From 74577c4aa3261567f514decf75f53abe5d44c421 Mon Sep 17 00:00:00 2001 From: Daniel McGregor Date: Tue, 20 Aug 2024 12:41:04 +0800 Subject: [PATCH] fix: do not error when using `algopy.arc4.abi_call` with a method selector string containing no arguments --- examples/sizes.txt | 4 +- src/puya/awst_build/eb/arc4/_utils.py | 2 +- test_cases/typed_abi_call/logger.py | 4 + .../typed_abi_call/out/Greeter.approval.mir | 3192 +++++++++-------- .../typed_abi_call/out/Greeter.approval.teal | 116 +- .../typed_abi_call/out/Greeter.arc32.json | 20 +- .../out/Greeter.destructured.ir | 75 +- test_cases/typed_abi_call/out/Greeter.ssa.ir | 392 +- .../out/Greeter.ssa.opt_pass_1.ir | 76 +- .../out/Greeter.ssa.opt_pass_2.ir | 75 +- .../out/Greeter.ssa.opt_pass_3.ir | 75 +- .../out/Greeter.ssa.opt_pass_4.ir | 75 +- .../out/Greeter.ssa.opt_pass_5.ir | 75 +- .../out/Greeter.ssa.opt_pass_6.ir | 75 +- .../out/Greeter.ssa.opt_pass_7.ir | 75 +- .../typed_abi_call/out/Logger.approval.mir | 1544 ++++---- .../typed_abi_call/out/Logger.approval.teal | 150 +- .../typed_abi_call/out/Logger.arc32.json | 15 +- .../typed_abi_call/out/Logger.destructured.ir | 359 +- test_cases/typed_abi_call/out/Logger.ssa.ir | 367 +- .../out/Logger.ssa.opt_pass_1.ir | 359 +- .../out/Logger.ssa.opt_pass_2.ir | 359 +- .../out/Logger.ssa.opt_pass_3.ir | 359 +- .../out/Logger.ssa.opt_pass_4.ir | 359 +- .../out/Logger.ssa.opt_pass_5.ir | 359 +- .../typed_abi_call/out/client_Greeter.py | 6 + .../typed_abi_call/out/client_Logger.py | 5 + test_cases/typed_abi_call/out/logger.awst | 5 + test_cases/typed_abi_call/out/typed_c2c.awst | 10 + .../out_O2/Greeter.approval.teal | 95 +- .../out_O2/Greeter.destructured.ir | 75 +- .../out_O2/Logger.approval.teal | 53 +- .../out_O2/Logger.destructured.ir | 359 +- .../out_unoptimized/Greeter.approval.teal | 143 +- .../out_unoptimized/Greeter.destructured.ir | 97 +- .../out_unoptimized/Logger.approval.teal | 165 +- .../out_unoptimized/Logger.destructured.ir | 367 +- test_cases/typed_abi_call/puya.log | 1348 +++++-- test_cases/typed_abi_call/typed_c2c.py | 10 + tests/test_arc32.py | 6 + 40 files changed, 6824 insertions(+), 4481 deletions(-) diff --git a/examples/sizes.txt b/examples/sizes.txt index f38dc1ce80..1036a8d3b1 100644 --- a/examples/sizes.txt +++ b/examples/sizes.txt @@ -111,8 +111,8 @@ tuple_support/NestedTuples 956 613 343 613 0 tuple_support/TupleComparisons 136 68 68 68 0 tuple_support/TupleSupport 696 409 287 409 0 - typed_abi_call/Greeter 2852 2437 415 2437 0 - typed_abi_call/Logger 882 748 134 748 0 + typed_abi_call/Greeter 3007 2588 419 2588 0 + typed_abi_call/Logger 914 778 136 778 0 unary/Unary 130 67 63 67 0 unassigned_expression/Unassigned 132 107 25 107 0 undefined_phi_args/Baddie 324 284 40 284 0 diff --git a/src/puya/awst_build/eb/arc4/_utils.py b/src/puya/awst_build/eb/arc4/_utils.py index 07d3a25ba4..954f323091 100644 --- a/src/puya/awst_build/eb/arc4/_utils.py +++ b/src/puya/awst_build/eb/arc4/_utils.py @@ -161,7 +161,7 @@ def _split_signature( if remaining: if not name: name = remaining - elif not args: + elif args is None: raise CodeError( f"invalid signature, args not well defined: {name=}, {remaining=}", location ) diff --git a/test_cases/typed_abi_call/logger.py b/test_cases/typed_abi_call/logger.py index 8311bdc2b3..36a214472d 100644 --- a/test_cases/typed_abi_call/logger.py +++ b/test_cases/typed_abi_call/logger.py @@ -22,6 +22,10 @@ class Logger(ARC4Contract): def echo(self, value: arc4.String) -> arc4.String: return "echo: " + value + @arc4.abimethod + def no_args(self) -> UInt64: + return UInt64(42) + @arc4.abimethod(name=LOG_METHOD_NAME) def log_uint64(self, value: arc4.UInt64) -> None: log(value) diff --git a/test_cases/typed_abi_call/out/Greeter.approval.mir b/test_cases/typed_abi_call/out/Greeter.approval.mir index d555c5a2e4..5d0767d37f 100644 --- a/test_cases/typed_abi_call/out/Greeter.approval.mir +++ b/test_cases/typed_abi_call/out/Greeter.approval.mir @@ -1,1624 +1,1762 @@ -// Op // Op Description Stack (out) X stack Source code Source line +// Op // Op Description Stack (out) X stack Source code Source line #pragma version 10 // test_cases.typed_abi_call.typed_c2c.Greeter.approval_program() -> uint64: main_block@0: - txn NumAppArgs // {txn} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - // virtual: store tmp%0#0 to l-stack (no copy) tmp%0#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - // virtual: load tmp%0#0 from l-stack (no copy) tmp%0#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - bz main_bare_routing@15 // class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - // Implicit fall through to main_abi_routing@1 // class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + txn NumAppArgs // {txn} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + // virtual: store tmp%0#0 to l-stack (no copy) tmp%0#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + // virtual: load tmp%0#0 from l-stack (no copy) tmp%0#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + bz main_bare_routing@16 // class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + // Implicit fall through to main_abi_routing@1 // class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 main_abi_routing@1: - txna ApplicationArgs 0 // {txna} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - // virtual: store tmp%1#0 to l-stack (no copy) tmp%1#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - method "test_method_selector_kinds(application)void" // tmp%1#0,method<"test_method_selector_kinds(application)void"> class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - method "test_method_overload(application)void" // tmp%1#0,method<"test_method_selector_kinds(application)void">,method<"test_method_overload(application)void"> class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - method "test_arg_conversion(application)void" // tmp%1#0,method<"test_method_selector_kinds(application)void">,method<"test_method_overload(application)void">,method<"test_arg_conversion(application)void"> class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - method "test_15plus_args(application)void" // tmp%1#0,method<"test_method_selector_kinds(application)void">,method<"test_method_overload(application)void">,method<"test_arg_conversion(application)void">,method<"test_15plus_args(application)void"> class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - method "test_void(application)void" // tmp%1#0,method<"test_method_selector_kinds(application)void">,method<"test_method_overload(application)void">,method<"test_arg_conversion(application)void">,method<"test_15plus_args(application)void">,method<"test_void(application)void"> class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - method "test_ref_types(application,asset)void" // tmp%1#0,method<"test_method_selector_kinds(application)void">,method<"test_method_overload(application)void">,method<"test_arg_conversion(application)void">,method<"test_15plus_args(application)void">,method<"test_void(application)void">,method<"test_ref_types(application,asset)void"> class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - method "test_native_string(application)void" // tmp%1#0,method<"test_method_selector_kinds(application)void">,method<"test_method_overload(application)void">,method<"test_arg_conversion(application)void">,method<"test_15plus_args(application)void">,method<"test_void(application)void">,method<"test_ref_types(application,asset)void">,method<"test_native_string(application)void"> class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - method "test_native_bytes(application)void" // tmp%1#0,method<"test_method_selector_kinds(application)void">,method<"test_method_overload(application)void">,method<"test_arg_conversion(application)void">,method<"test_15plus_args(application)void">,method<"test_void(application)void">,method<"test_ref_types(application,asset)void">,method<"test_native_string(application)void">,method<"test_native_bytes(application)void"> class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - method "test_native_uint64(application)void" // tmp%1#0,method<"test_method_selector_kinds(application)void">,method<"test_method_overload(application)void">,method<"test_arg_conversion(application)void">,method<"test_15plus_args(application)void">,method<"test_void(application)void">,method<"test_ref_types(application,asset)void">,method<"test_native_string(application)void">,method<"test_native_bytes(application)void">,method<"test_native_uint64(application)void"> class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - method "test_native_biguint(application)void" // tmp%1#0,method<"test_method_selector_kinds(application)void">,method<"test_method_overload(application)void">,method<"test_arg_conversion(application)void">,method<"test_15plus_args(application)void">,method<"test_void(application)void">,method<"test_ref_types(application,asset)void">,method<"test_native_string(application)void">,method<"test_native_bytes(application)void">,method<"test_native_uint64(application)void">,method<"test_native_biguint(application)void"> class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - method "test_native_tuple(application)void" // tmp%1#0,method<"test_method_selector_kinds(application)void">,method<"test_method_overload(application)void">,method<"test_arg_conversion(application)void">,method<"test_15plus_args(application)void">,method<"test_void(application)void">,method<"test_ref_types(application,asset)void">,method<"test_native_string(application)void">,method<"test_native_bytes(application)void">,method<"test_native_uint64(application)void">,method<"test_native_biguint(application)void">,method<"test_native_tuple(application)void"> class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - uncover 11 // load tmp%1#0 from l-stack (no copy) method<"test_method_selector_kinds(application)void">,method<"test_method_overload(application)void">,method<"test_arg_conversion(application)void">,method<"test_15plus_args(application)void">,method<"test_void(application)void">,method<"test_ref_types(application,asset)void">,method<"test_native_string(application)void">,method<"test_native_bytes(application)void">,method<"test_native_uint64(application)void">,method<"test_native_biguint(application)void">,method<"test_native_tuple(application)void">,tmp%1#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - match main_test_method_selector_kinds_route@2 main_test_method_overload_route@3 main_test_arg_conversion_route@4 main_test_15plus_args_route@5 main_test_void_route@6 main_test_ref_types_route@7 main_test_native_string_route@8 main_test_native_bytes_route@9 main_test_native_uint64_route@10 main_test_native_biguint_route@11 main_test_native_tuple_route@12 // class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - err // reject transaction // class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + txna ApplicationArgs 0 // {txna} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + // virtual: store tmp%1#0 to l-stack (no copy) tmp%1#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + method "test_method_selector_kinds(application)void" // tmp%1#0,method<"test_method_selector_kinds(application)void"> class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + method "test_method_overload(application)void" // tmp%1#0,method<"test_method_selector_kinds(application)void">,method<"test_method_overload(application)void"> class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + method "test_arg_conversion(application)void" // tmp%1#0,method<"test_method_selector_kinds(application)void">,method<"test_method_overload(application)void">,method<"test_arg_conversion(application)void"> class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + method "test_15plus_args(application)void" // tmp%1#0,method<"test_method_selector_kinds(application)void">,method<"test_method_overload(application)void">,method<"test_arg_conversion(application)void">,method<"test_15plus_args(application)void"> class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + method "test_void(application)void" // tmp%1#0,method<"test_method_selector_kinds(application)void">,method<"test_method_overload(application)void">,method<"test_arg_conversion(application)void">,method<"test_15plus_args(application)void">,method<"test_void(application)void"> class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + method "test_ref_types(application,asset)void" // tmp%1#0,method<"test_method_selector_kinds(application)void">,method<"test_method_overload(application)void">,method<"test_arg_conversion(application)void">,method<"test_15plus_args(application)void">,method<"test_void(application)void">,method<"test_ref_types(application,asset)void"> class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + method "test_native_string(application)void" // tmp%1#0,method<"test_method_selector_kinds(application)void">,method<"test_method_overload(application)void">,method<"test_arg_conversion(application)void">,method<"test_15plus_args(application)void">,method<"test_void(application)void">,method<"test_ref_types(application,asset)void">,method<"test_native_string(application)void"> class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + method "test_native_bytes(application)void" // tmp%1#0,method<"test_method_selector_kinds(application)void">,method<"test_method_overload(application)void">,method<"test_arg_conversion(application)void">,method<"test_15plus_args(application)void">,method<"test_void(application)void">,method<"test_ref_types(application,asset)void">,method<"test_native_string(application)void">,method<"test_native_bytes(application)void"> class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + method "test_native_uint64(application)void" // tmp%1#0,method<"test_method_selector_kinds(application)void">,method<"test_method_overload(application)void">,method<"test_arg_conversion(application)void">,method<"test_15plus_args(application)void">,method<"test_void(application)void">,method<"test_ref_types(application,asset)void">,method<"test_native_string(application)void">,method<"test_native_bytes(application)void">,method<"test_native_uint64(application)void"> class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + method "test_native_biguint(application)void" // tmp%1#0,method<"test_method_selector_kinds(application)void">,method<"test_method_overload(application)void">,method<"test_arg_conversion(application)void">,method<"test_15plus_args(application)void">,method<"test_void(application)void">,method<"test_ref_types(application,asset)void">,method<"test_native_string(application)void">,method<"test_native_bytes(application)void">,method<"test_native_uint64(application)void">,method<"test_native_biguint(application)void"> class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + method "test_native_tuple(application)void" // tmp%1#0,method<"test_method_selector_kinds(application)void">,method<"test_method_overload(application)void">,method<"test_arg_conversion(application)void">,method<"test_15plus_args(application)void">,method<"test_void(application)void">,method<"test_ref_types(application,asset)void">,method<"test_native_string(application)void">,method<"test_native_bytes(application)void">,method<"test_native_uint64(application)void">,method<"test_native_biguint(application)void">,method<"test_native_tuple(application)void"> class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + method "test_no_args(application)void" // tmp%1#0,method<"test_method_selector_kinds(application)void">,method<"test_method_overload(application)void">,method<"test_arg_conversion(application)void">,method<"test_15plus_args(application)void">,method<"test_void(application)void">,method<"test_ref_types(application,asset)void">,method<"test_native_string(application)void">,method<"test_native_bytes(application)void">,method<"test_native_uint64(application)void">,method<"test_native_biguint(application)void">,method<"test_native_tuple(application)void">,method<"test_no_args(application)void"> class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + uncover 12 // load tmp%1#0 from l-stack (no copy) method<"test_method_selector_kinds(application)void">,method<"test_method_overload(application)void">,method<"test_arg_conversion(application)void">,method<"test_15plus_args(application)void">,method<"test_void(application)void">,method<"test_ref_types(application,asset)void">,method<"test_native_string(application)void">,method<"test_native_bytes(application)void">,method<"test_native_uint64(application)void">,method<"test_native_biguint(application)void">,method<"test_native_tuple(application)void">,method<"test_no_args(application)void">,tmp%1#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + match main_test_method_selector_kinds_route@2 main_test_method_overload_route@3 main_test_arg_conversion_route@4 main_test_15plus_args_route@5 main_test_void_route@6 main_test_ref_types_route@7 main_test_native_string_route@8 main_test_native_bytes_route@9 main_test_native_uint64_route@10 main_test_native_biguint_route@11 main_test_native_tuple_route@12 main_test_no_args_route@13 // class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + err // reject transaction // class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 main_test_method_selector_kinds_route@2: - txn OnCompletion // {txn} arc4.abimethod() typed_abi_call/typed_c2c.py:18 - // virtual: store tmp%2#0 to l-stack (no copy) tmp%2#0 arc4.abimethod() typed_abi_call/typed_c2c.py:18 - // virtual: load tmp%2#0 from l-stack (no copy) tmp%2#0 arc4.abimethod() typed_abi_call/typed_c2c.py:18 - ! // {!} arc4.abimethod() typed_abi_call/typed_c2c.py:18 - // virtual: store tmp%3#0 to l-stack (no copy) tmp%3#0 arc4.abimethod() typed_abi_call/typed_c2c.py:18 - // virtual: load tmp%3#0 from l-stack (no copy) tmp%3#0 arc4.abimethod() typed_abi_call/typed_c2c.py:18 - assert // OnCompletion is NoOp // arc4.abimethod() typed_abi_call/typed_c2c.py:18 - txn ApplicationID // {txn} arc4.abimethod() typed_abi_call/typed_c2c.py:18 - // virtual: store tmp%4#0 to l-stack (no copy) tmp%4#0 arc4.abimethod() typed_abi_call/typed_c2c.py:18 - // virtual: load tmp%4#0 from l-stack (no copy) tmp%4#0 arc4.abimethod() typed_abi_call/typed_c2c.py:18 - assert // is not creating // arc4.abimethod() typed_abi_call/typed_c2c.py:18 - txna ApplicationArgs 1 // {txna} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - // virtual: store tmp%5#0 to l-stack (no copy) tmp%5#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - // virtual: load tmp%5#0 from l-stack (no copy) tmp%5#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - btoi // {btoi} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - // virtual: store tmp%6#0 to l-stack (no copy) tmp%6#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - // virtual: load tmp%6#0 from l-stack (no copy) tmp%6#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - txnas Applications // {txnas} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - // virtual: store tmp%7#0 to l-stack (no copy) tmp%7#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - // virtual: load tmp%7#0 from l-stack (no copy) tmp%7#0 arc4.abimethod() typed_abi_call/typed_c2c.py:18 - callsub test_method_selector_kinds // arc4.abimethod() typed_abi_call/typed_c2c.py:18 - int 1 // 1 arc4.abimethod() typed_abi_call/typed_c2c.py:18 - return // arc4.abimethod() typed_abi_call/typed_c2c.py:18 + txn OnCompletion // {txn} arc4.abimethod() typed_abi_call/typed_c2c.py:18 + // virtual: store tmp%2#0 to l-stack (no copy) tmp%2#0 arc4.abimethod() typed_abi_call/typed_c2c.py:18 + // virtual: load tmp%2#0 from l-stack (no copy) tmp%2#0 arc4.abimethod() typed_abi_call/typed_c2c.py:18 + ! // {!} arc4.abimethod() typed_abi_call/typed_c2c.py:18 + // virtual: store tmp%3#0 to l-stack (no copy) tmp%3#0 arc4.abimethod() typed_abi_call/typed_c2c.py:18 + // virtual: load tmp%3#0 from l-stack (no copy) tmp%3#0 arc4.abimethod() typed_abi_call/typed_c2c.py:18 + assert // OnCompletion is NoOp // arc4.abimethod() typed_abi_call/typed_c2c.py:18 + txn ApplicationID // {txn} arc4.abimethod() typed_abi_call/typed_c2c.py:18 + // virtual: store tmp%4#0 to l-stack (no copy) tmp%4#0 arc4.abimethod() typed_abi_call/typed_c2c.py:18 + // virtual: load tmp%4#0 from l-stack (no copy) tmp%4#0 arc4.abimethod() typed_abi_call/typed_c2c.py:18 + assert // is not creating // arc4.abimethod() typed_abi_call/typed_c2c.py:18 + txna ApplicationArgs 1 // {txna} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + // virtual: store tmp%5#0 to l-stack (no copy) tmp%5#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + // virtual: load tmp%5#0 from l-stack (no copy) tmp%5#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + btoi // {btoi} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + // virtual: store tmp%6#0 to l-stack (no copy) tmp%6#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + // virtual: load tmp%6#0 from l-stack (no copy) tmp%6#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + txnas Applications // {txnas} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + // virtual: store tmp%7#0 to l-stack (no copy) tmp%7#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + // virtual: load tmp%7#0 from l-stack (no copy) tmp%7#0 arc4.abimethod() typed_abi_call/typed_c2c.py:18 + callsub test_method_selector_kinds // arc4.abimethod() typed_abi_call/typed_c2c.py:18 + int 1 // 1 arc4.abimethod() typed_abi_call/typed_c2c.py:18 + return // arc4.abimethod() typed_abi_call/typed_c2c.py:18 main_test_method_overload_route@3: - txn OnCompletion // {txn} arc4.abimethod() typed_abi_call/typed_c2c.py:31 - // virtual: store tmp%8#0 to l-stack (no copy) tmp%8#0 arc4.abimethod() typed_abi_call/typed_c2c.py:31 - // virtual: load tmp%8#0 from l-stack (no copy) tmp%8#0 arc4.abimethod() typed_abi_call/typed_c2c.py:31 - ! // {!} arc4.abimethod() typed_abi_call/typed_c2c.py:31 - // virtual: store tmp%9#0 to l-stack (no copy) tmp%9#0 arc4.abimethod() typed_abi_call/typed_c2c.py:31 - // virtual: load tmp%9#0 from l-stack (no copy) tmp%9#0 arc4.abimethod() typed_abi_call/typed_c2c.py:31 - assert // OnCompletion is NoOp // arc4.abimethod() typed_abi_call/typed_c2c.py:31 - txn ApplicationID // {txn} arc4.abimethod() typed_abi_call/typed_c2c.py:31 - // virtual: store tmp%10#0 to l-stack (no copy) tmp%10#0 arc4.abimethod() typed_abi_call/typed_c2c.py:31 - // virtual: load tmp%10#0 from l-stack (no copy) tmp%10#0 arc4.abimethod() typed_abi_call/typed_c2c.py:31 - assert // is not creating // arc4.abimethod() typed_abi_call/typed_c2c.py:31 - txna ApplicationArgs 1 // {txna} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - // virtual: store tmp%11#0 to l-stack (no copy) tmp%11#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - // virtual: load tmp%11#0 from l-stack (no copy) tmp%11#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - btoi // {btoi} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - // virtual: store tmp%12#0 to l-stack (no copy) tmp%12#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - // virtual: load tmp%12#0 from l-stack (no copy) tmp%12#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - txnas Applications // {txnas} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - // virtual: store tmp%13#0 to l-stack (no copy) tmp%13#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - // virtual: load tmp%13#0 from l-stack (no copy) tmp%13#0 arc4.abimethod() typed_abi_call/typed_c2c.py:31 - callsub test_method_overload // arc4.abimethod() typed_abi_call/typed_c2c.py:31 - int 1 // 1 arc4.abimethod() typed_abi_call/typed_c2c.py:31 - return // arc4.abimethod() typed_abi_call/typed_c2c.py:31 + txn OnCompletion // {txn} arc4.abimethod() typed_abi_call/typed_c2c.py:31 + // virtual: store tmp%8#0 to l-stack (no copy) tmp%8#0 arc4.abimethod() typed_abi_call/typed_c2c.py:31 + // virtual: load tmp%8#0 from l-stack (no copy) tmp%8#0 arc4.abimethod() typed_abi_call/typed_c2c.py:31 + ! // {!} arc4.abimethod() typed_abi_call/typed_c2c.py:31 + // virtual: store tmp%9#0 to l-stack (no copy) tmp%9#0 arc4.abimethod() typed_abi_call/typed_c2c.py:31 + // virtual: load tmp%9#0 from l-stack (no copy) tmp%9#0 arc4.abimethod() typed_abi_call/typed_c2c.py:31 + assert // OnCompletion is NoOp // arc4.abimethod() typed_abi_call/typed_c2c.py:31 + txn ApplicationID // {txn} arc4.abimethod() typed_abi_call/typed_c2c.py:31 + // virtual: store tmp%10#0 to l-stack (no copy) tmp%10#0 arc4.abimethod() typed_abi_call/typed_c2c.py:31 + // virtual: load tmp%10#0 from l-stack (no copy) tmp%10#0 arc4.abimethod() typed_abi_call/typed_c2c.py:31 + assert // is not creating // arc4.abimethod() typed_abi_call/typed_c2c.py:31 + txna ApplicationArgs 1 // {txna} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + // virtual: store tmp%11#0 to l-stack (no copy) tmp%11#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + // virtual: load tmp%11#0 from l-stack (no copy) tmp%11#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + btoi // {btoi} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + // virtual: store tmp%12#0 to l-stack (no copy) tmp%12#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + // virtual: load tmp%12#0 from l-stack (no copy) tmp%12#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + txnas Applications // {txnas} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + // virtual: store tmp%13#0 to l-stack (no copy) tmp%13#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + // virtual: load tmp%13#0 from l-stack (no copy) tmp%13#0 arc4.abimethod() typed_abi_call/typed_c2c.py:31 + callsub test_method_overload // arc4.abimethod() typed_abi_call/typed_c2c.py:31 + int 1 // 1 arc4.abimethod() typed_abi_call/typed_c2c.py:31 + return // arc4.abimethod() typed_abi_call/typed_c2c.py:31 main_test_arg_conversion_route@4: - txn OnCompletion // {txn} arc4.abimethod() typed_abi_call/typed_c2c.py:46 - // virtual: store tmp%14#0 to l-stack (no copy) tmp%14#0 arc4.abimethod() typed_abi_call/typed_c2c.py:46 - // virtual: load tmp%14#0 from l-stack (no copy) tmp%14#0 arc4.abimethod() typed_abi_call/typed_c2c.py:46 - ! // {!} arc4.abimethod() typed_abi_call/typed_c2c.py:46 - // virtual: store tmp%15#0 to l-stack (no copy) tmp%15#0 arc4.abimethod() typed_abi_call/typed_c2c.py:46 - // virtual: load tmp%15#0 from l-stack (no copy) tmp%15#0 arc4.abimethod() typed_abi_call/typed_c2c.py:46 - assert // OnCompletion is NoOp // arc4.abimethod() typed_abi_call/typed_c2c.py:46 - txn ApplicationID // {txn} arc4.abimethod() typed_abi_call/typed_c2c.py:46 - // virtual: store tmp%16#0 to l-stack (no copy) tmp%16#0 arc4.abimethod() typed_abi_call/typed_c2c.py:46 - // virtual: load tmp%16#0 from l-stack (no copy) tmp%16#0 arc4.abimethod() typed_abi_call/typed_c2c.py:46 - assert // is not creating // arc4.abimethod() typed_abi_call/typed_c2c.py:46 - txna ApplicationArgs 1 // {txna} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - // virtual: store tmp%17#0 to l-stack (no copy) tmp%17#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - // virtual: load tmp%17#0 from l-stack (no copy) tmp%17#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - btoi // {btoi} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - // virtual: store tmp%18#0 to l-stack (no copy) tmp%18#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - // virtual: load tmp%18#0 from l-stack (no copy) tmp%18#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - txnas Applications // {txnas} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - // virtual: store tmp%19#0 to l-stack (no copy) tmp%19#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - // virtual: load tmp%19#0 from l-stack (no copy) tmp%19#0 arc4.abimethod() typed_abi_call/typed_c2c.py:46 - callsub test_arg_conversion // arc4.abimethod() typed_abi_call/typed_c2c.py:46 - int 1 // 1 arc4.abimethod() typed_abi_call/typed_c2c.py:46 - return // arc4.abimethod() typed_abi_call/typed_c2c.py:46 + txn OnCompletion // {txn} arc4.abimethod() typed_abi_call/typed_c2c.py:46 + // virtual: store tmp%14#0 to l-stack (no copy) tmp%14#0 arc4.abimethod() typed_abi_call/typed_c2c.py:46 + // virtual: load tmp%14#0 from l-stack (no copy) tmp%14#0 arc4.abimethod() typed_abi_call/typed_c2c.py:46 + ! // {!} arc4.abimethod() typed_abi_call/typed_c2c.py:46 + // virtual: store tmp%15#0 to l-stack (no copy) tmp%15#0 arc4.abimethod() typed_abi_call/typed_c2c.py:46 + // virtual: load tmp%15#0 from l-stack (no copy) tmp%15#0 arc4.abimethod() typed_abi_call/typed_c2c.py:46 + assert // OnCompletion is NoOp // arc4.abimethod() typed_abi_call/typed_c2c.py:46 + txn ApplicationID // {txn} arc4.abimethod() typed_abi_call/typed_c2c.py:46 + // virtual: store tmp%16#0 to l-stack (no copy) tmp%16#0 arc4.abimethod() typed_abi_call/typed_c2c.py:46 + // virtual: load tmp%16#0 from l-stack (no copy) tmp%16#0 arc4.abimethod() typed_abi_call/typed_c2c.py:46 + assert // is not creating // arc4.abimethod() typed_abi_call/typed_c2c.py:46 + txna ApplicationArgs 1 // {txna} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + // virtual: store tmp%17#0 to l-stack (no copy) tmp%17#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + // virtual: load tmp%17#0 from l-stack (no copy) tmp%17#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + btoi // {btoi} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + // virtual: store tmp%18#0 to l-stack (no copy) tmp%18#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + // virtual: load tmp%18#0 from l-stack (no copy) tmp%18#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + txnas Applications // {txnas} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + // virtual: store tmp%19#0 to l-stack (no copy) tmp%19#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + // virtual: load tmp%19#0 from l-stack (no copy) tmp%19#0 arc4.abimethod() typed_abi_call/typed_c2c.py:46 + callsub test_arg_conversion // arc4.abimethod() typed_abi_call/typed_c2c.py:46 + int 1 // 1 arc4.abimethod() typed_abi_call/typed_c2c.py:46 + return // arc4.abimethod() typed_abi_call/typed_c2c.py:46 main_test_15plus_args_route@5: - txn OnCompletion // {txn} arc4.abimethod() typed_abi_call/typed_c2c.py:63 - // virtual: store tmp%20#0 to l-stack (no copy) tmp%20#0 arc4.abimethod() typed_abi_call/typed_c2c.py:63 - // virtual: load tmp%20#0 from l-stack (no copy) tmp%20#0 arc4.abimethod() typed_abi_call/typed_c2c.py:63 - ! // {!} arc4.abimethod() typed_abi_call/typed_c2c.py:63 - // virtual: store tmp%21#0 to l-stack (no copy) tmp%21#0 arc4.abimethod() typed_abi_call/typed_c2c.py:63 - // virtual: load tmp%21#0 from l-stack (no copy) tmp%21#0 arc4.abimethod() typed_abi_call/typed_c2c.py:63 - assert // OnCompletion is NoOp // arc4.abimethod() typed_abi_call/typed_c2c.py:63 - txn ApplicationID // {txn} arc4.abimethod() typed_abi_call/typed_c2c.py:63 - // virtual: store tmp%22#0 to l-stack (no copy) tmp%22#0 arc4.abimethod() typed_abi_call/typed_c2c.py:63 - // virtual: load tmp%22#0 from l-stack (no copy) tmp%22#0 arc4.abimethod() typed_abi_call/typed_c2c.py:63 - assert // is not creating // arc4.abimethod() typed_abi_call/typed_c2c.py:63 - txna ApplicationArgs 1 // {txna} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - // virtual: store tmp%23#0 to l-stack (no copy) tmp%23#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - // virtual: load tmp%23#0 from l-stack (no copy) tmp%23#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - btoi // {btoi} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - // virtual: store tmp%24#0 to l-stack (no copy) tmp%24#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - // virtual: load tmp%24#0 from l-stack (no copy) tmp%24#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - txnas Applications // {txnas} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - // virtual: store tmp%25#0 to l-stack (no copy) tmp%25#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - // virtual: load tmp%25#0 from l-stack (no copy) tmp%25#0 arc4.abimethod() typed_abi_call/typed_c2c.py:63 - callsub test_15plus_args // arc4.abimethod() typed_abi_call/typed_c2c.py:63 - int 1 // 1 arc4.abimethod() typed_abi_call/typed_c2c.py:63 - return // arc4.abimethod() typed_abi_call/typed_c2c.py:63 + txn OnCompletion // {txn} arc4.abimethod() typed_abi_call/typed_c2c.py:63 + // virtual: store tmp%20#0 to l-stack (no copy) tmp%20#0 arc4.abimethod() typed_abi_call/typed_c2c.py:63 + // virtual: load tmp%20#0 from l-stack (no copy) tmp%20#0 arc4.abimethod() typed_abi_call/typed_c2c.py:63 + ! // {!} arc4.abimethod() typed_abi_call/typed_c2c.py:63 + // virtual: store tmp%21#0 to l-stack (no copy) tmp%21#0 arc4.abimethod() typed_abi_call/typed_c2c.py:63 + // virtual: load tmp%21#0 from l-stack (no copy) tmp%21#0 arc4.abimethod() typed_abi_call/typed_c2c.py:63 + assert // OnCompletion is NoOp // arc4.abimethod() typed_abi_call/typed_c2c.py:63 + txn ApplicationID // {txn} arc4.abimethod() typed_abi_call/typed_c2c.py:63 + // virtual: store tmp%22#0 to l-stack (no copy) tmp%22#0 arc4.abimethod() typed_abi_call/typed_c2c.py:63 + // virtual: load tmp%22#0 from l-stack (no copy) tmp%22#0 arc4.abimethod() typed_abi_call/typed_c2c.py:63 + assert // is not creating // arc4.abimethod() typed_abi_call/typed_c2c.py:63 + txna ApplicationArgs 1 // {txna} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + // virtual: store tmp%23#0 to l-stack (no copy) tmp%23#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + // virtual: load tmp%23#0 from l-stack (no copy) tmp%23#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + btoi // {btoi} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + // virtual: store tmp%24#0 to l-stack (no copy) tmp%24#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + // virtual: load tmp%24#0 from l-stack (no copy) tmp%24#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + txnas Applications // {txnas} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + // virtual: store tmp%25#0 to l-stack (no copy) tmp%25#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + // virtual: load tmp%25#0 from l-stack (no copy) tmp%25#0 arc4.abimethod() typed_abi_call/typed_c2c.py:63 + callsub test_15plus_args // arc4.abimethod() typed_abi_call/typed_c2c.py:63 + int 1 // 1 arc4.abimethod() typed_abi_call/typed_c2c.py:63 + return // arc4.abimethod() typed_abi_call/typed_c2c.py:63 main_test_void_route@6: - txn OnCompletion // {txn} arc4.abimethod() typed_abi_call/typed_c2c.py:91 - // virtual: store tmp%26#0 to l-stack (no copy) tmp%26#0 arc4.abimethod() typed_abi_call/typed_c2c.py:91 - // virtual: load tmp%26#0 from l-stack (no copy) tmp%26#0 arc4.abimethod() typed_abi_call/typed_c2c.py:91 - ! // {!} arc4.abimethod() typed_abi_call/typed_c2c.py:91 - // virtual: store tmp%27#0 to l-stack (no copy) tmp%27#0 arc4.abimethod() typed_abi_call/typed_c2c.py:91 - // virtual: load tmp%27#0 from l-stack (no copy) tmp%27#0 arc4.abimethod() typed_abi_call/typed_c2c.py:91 - assert // OnCompletion is NoOp // arc4.abimethod() typed_abi_call/typed_c2c.py:91 - txn ApplicationID // {txn} arc4.abimethod() typed_abi_call/typed_c2c.py:91 - // virtual: store tmp%28#0 to l-stack (no copy) tmp%28#0 arc4.abimethod() typed_abi_call/typed_c2c.py:91 - // virtual: load tmp%28#0 from l-stack (no copy) tmp%28#0 arc4.abimethod() typed_abi_call/typed_c2c.py:91 - assert // is not creating // arc4.abimethod() typed_abi_call/typed_c2c.py:91 - txna ApplicationArgs 1 // {txna} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - // virtual: store tmp%29#0 to l-stack (no copy) tmp%29#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - // virtual: load tmp%29#0 from l-stack (no copy) tmp%29#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - btoi // {btoi} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - // virtual: store tmp%30#0 to l-stack (no copy) tmp%30#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - // virtual: load tmp%30#0 from l-stack (no copy) tmp%30#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - txnas Applications // {txnas} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - // virtual: store tmp%31#0 to l-stack (no copy) tmp%31#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - // virtual: load tmp%31#0 from l-stack (no copy) tmp%31#0 arc4.abimethod() typed_abi_call/typed_c2c.py:91 - callsub test_void // arc4.abimethod() typed_abi_call/typed_c2c.py:91 - int 1 // 1 arc4.abimethod() typed_abi_call/typed_c2c.py:91 - return // arc4.abimethod() typed_abi_call/typed_c2c.py:91 + txn OnCompletion // {txn} arc4.abimethod() typed_abi_call/typed_c2c.py:91 + // virtual: store tmp%26#0 to l-stack (no copy) tmp%26#0 arc4.abimethod() typed_abi_call/typed_c2c.py:91 + // virtual: load tmp%26#0 from l-stack (no copy) tmp%26#0 arc4.abimethod() typed_abi_call/typed_c2c.py:91 + ! // {!} arc4.abimethod() typed_abi_call/typed_c2c.py:91 + // virtual: store tmp%27#0 to l-stack (no copy) tmp%27#0 arc4.abimethod() typed_abi_call/typed_c2c.py:91 + // virtual: load tmp%27#0 from l-stack (no copy) tmp%27#0 arc4.abimethod() typed_abi_call/typed_c2c.py:91 + assert // OnCompletion is NoOp // arc4.abimethod() typed_abi_call/typed_c2c.py:91 + txn ApplicationID // {txn} arc4.abimethod() typed_abi_call/typed_c2c.py:91 + // virtual: store tmp%28#0 to l-stack (no copy) tmp%28#0 arc4.abimethod() typed_abi_call/typed_c2c.py:91 + // virtual: load tmp%28#0 from l-stack (no copy) tmp%28#0 arc4.abimethod() typed_abi_call/typed_c2c.py:91 + assert // is not creating // arc4.abimethod() typed_abi_call/typed_c2c.py:91 + txna ApplicationArgs 1 // {txna} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + // virtual: store tmp%29#0 to l-stack (no copy) tmp%29#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + // virtual: load tmp%29#0 from l-stack (no copy) tmp%29#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + btoi // {btoi} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + // virtual: store tmp%30#0 to l-stack (no copy) tmp%30#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + // virtual: load tmp%30#0 from l-stack (no copy) tmp%30#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + txnas Applications // {txnas} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + // virtual: store tmp%31#0 to l-stack (no copy) tmp%31#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + // virtual: load tmp%31#0 from l-stack (no copy) tmp%31#0 arc4.abimethod() typed_abi_call/typed_c2c.py:91 + callsub test_void // arc4.abimethod() typed_abi_call/typed_c2c.py:91 + int 1 // 1 arc4.abimethod() typed_abi_call/typed_c2c.py:91 + return // arc4.abimethod() typed_abi_call/typed_c2c.py:91 main_test_ref_types_route@7: - txn OnCompletion // {txn} arc4.abimethod() typed_abi_call/typed_c2c.py:105 - // virtual: store tmp%32#0 to l-stack (no copy) tmp%32#0 arc4.abimethod() typed_abi_call/typed_c2c.py:105 - // virtual: load tmp%32#0 from l-stack (no copy) tmp%32#0 arc4.abimethod() typed_abi_call/typed_c2c.py:105 - ! // {!} arc4.abimethod() typed_abi_call/typed_c2c.py:105 - // virtual: store tmp%33#0 to l-stack (no copy) tmp%33#0 arc4.abimethod() typed_abi_call/typed_c2c.py:105 - // virtual: load tmp%33#0 from l-stack (no copy) tmp%33#0 arc4.abimethod() typed_abi_call/typed_c2c.py:105 - assert // OnCompletion is NoOp // arc4.abimethod() typed_abi_call/typed_c2c.py:105 - txn ApplicationID // {txn} arc4.abimethod() typed_abi_call/typed_c2c.py:105 - // virtual: store tmp%34#0 to l-stack (no copy) tmp%34#0 arc4.abimethod() typed_abi_call/typed_c2c.py:105 - // virtual: load tmp%34#0 from l-stack (no copy) tmp%34#0 arc4.abimethod() typed_abi_call/typed_c2c.py:105 - assert // is not creating // arc4.abimethod() typed_abi_call/typed_c2c.py:105 - txna ApplicationArgs 1 // {txna} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - // virtual: store tmp%35#0 to l-stack (no copy) tmp%35#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - // virtual: load tmp%35#0 from l-stack (no copy) tmp%35#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - btoi // {btoi} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - // virtual: store tmp%36#0 to l-stack (no copy) tmp%36#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - // virtual: load tmp%36#0 from l-stack (no copy) tmp%36#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - txnas Applications // {txnas} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - // virtual: store tmp%37#0 to l-stack (no copy) tmp%37#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - txna ApplicationArgs 2 // tmp%37#0,{txna} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - // virtual: store tmp%38#0 to l-stack (no copy) tmp%37#0,tmp%38#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - // virtual: load tmp%38#0 from l-stack (no copy) tmp%37#0,tmp%38#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - btoi // tmp%37#0,{btoi} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - // virtual: store tmp%39#0 to l-stack (no copy) tmp%37#0,tmp%39#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - // virtual: load tmp%39#0 from l-stack (no copy) tmp%37#0,tmp%39#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - txnas Assets // tmp%37#0,{txnas} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - // virtual: store tmp%40#0 to l-stack (no copy) tmp%37#0,tmp%40#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - // virtual: load tmp%37#0 from l-stack (no copy) tmp%40#0,tmp%37#0 arc4.abimethod() typed_abi_call/typed_c2c.py:105 - // virtual: load tmp%40#0 from l-stack (no copy) tmp%37#0,tmp%40#0 arc4.abimethod() typed_abi_call/typed_c2c.py:105 - callsub test_ref_types // arc4.abimethod() typed_abi_call/typed_c2c.py:105 - int 1 // 1 arc4.abimethod() typed_abi_call/typed_c2c.py:105 - return // arc4.abimethod() typed_abi_call/typed_c2c.py:105 + txn OnCompletion // {txn} arc4.abimethod() typed_abi_call/typed_c2c.py:105 + // virtual: store tmp%32#0 to l-stack (no copy) tmp%32#0 arc4.abimethod() typed_abi_call/typed_c2c.py:105 + // virtual: load tmp%32#0 from l-stack (no copy) tmp%32#0 arc4.abimethod() typed_abi_call/typed_c2c.py:105 + ! // {!} arc4.abimethod() typed_abi_call/typed_c2c.py:105 + // virtual: store tmp%33#0 to l-stack (no copy) tmp%33#0 arc4.abimethod() typed_abi_call/typed_c2c.py:105 + // virtual: load tmp%33#0 from l-stack (no copy) tmp%33#0 arc4.abimethod() typed_abi_call/typed_c2c.py:105 + assert // OnCompletion is NoOp // arc4.abimethod() typed_abi_call/typed_c2c.py:105 + txn ApplicationID // {txn} arc4.abimethod() typed_abi_call/typed_c2c.py:105 + // virtual: store tmp%34#0 to l-stack (no copy) tmp%34#0 arc4.abimethod() typed_abi_call/typed_c2c.py:105 + // virtual: load tmp%34#0 from l-stack (no copy) tmp%34#0 arc4.abimethod() typed_abi_call/typed_c2c.py:105 + assert // is not creating // arc4.abimethod() typed_abi_call/typed_c2c.py:105 + txna ApplicationArgs 1 // {txna} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + // virtual: store tmp%35#0 to l-stack (no copy) tmp%35#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + // virtual: load tmp%35#0 from l-stack (no copy) tmp%35#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + btoi // {btoi} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + // virtual: store tmp%36#0 to l-stack (no copy) tmp%36#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + // virtual: load tmp%36#0 from l-stack (no copy) tmp%36#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + txnas Applications // {txnas} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + // virtual: store tmp%37#0 to l-stack (no copy) tmp%37#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + txna ApplicationArgs 2 // tmp%37#0,{txna} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + // virtual: store tmp%38#0 to l-stack (no copy) tmp%37#0,tmp%38#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + // virtual: load tmp%38#0 from l-stack (no copy) tmp%37#0,tmp%38#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + btoi // tmp%37#0,{btoi} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + // virtual: store tmp%39#0 to l-stack (no copy) tmp%37#0,tmp%39#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + // virtual: load tmp%39#0 from l-stack (no copy) tmp%37#0,tmp%39#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + txnas Assets // tmp%37#0,{txnas} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + // virtual: store tmp%40#0 to l-stack (no copy) tmp%37#0,tmp%40#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + // virtual: load tmp%37#0 from l-stack (no copy) tmp%40#0,tmp%37#0 arc4.abimethod() typed_abi_call/typed_c2c.py:105 + // virtual: load tmp%40#0 from l-stack (no copy) tmp%37#0,tmp%40#0 arc4.abimethod() typed_abi_call/typed_c2c.py:105 + callsub test_ref_types // arc4.abimethod() typed_abi_call/typed_c2c.py:105 + int 1 // 1 arc4.abimethod() typed_abi_call/typed_c2c.py:105 + return // arc4.abimethod() typed_abi_call/typed_c2c.py:105 main_test_native_string_route@8: - txn OnCompletion // {txn} arc4.abimethod() typed_abi_call/typed_c2c.py:119 - // virtual: store tmp%41#0 to l-stack (no copy) tmp%41#0 arc4.abimethod() typed_abi_call/typed_c2c.py:119 - // virtual: load tmp%41#0 from l-stack (no copy) tmp%41#0 arc4.abimethod() typed_abi_call/typed_c2c.py:119 - ! // {!} arc4.abimethod() typed_abi_call/typed_c2c.py:119 - // virtual: store tmp%42#0 to l-stack (no copy) tmp%42#0 arc4.abimethod() typed_abi_call/typed_c2c.py:119 - // virtual: load tmp%42#0 from l-stack (no copy) tmp%42#0 arc4.abimethod() typed_abi_call/typed_c2c.py:119 - assert // OnCompletion is NoOp // arc4.abimethod() typed_abi_call/typed_c2c.py:119 - txn ApplicationID // {txn} arc4.abimethod() typed_abi_call/typed_c2c.py:119 - // virtual: store tmp%43#0 to l-stack (no copy) tmp%43#0 arc4.abimethod() typed_abi_call/typed_c2c.py:119 - // virtual: load tmp%43#0 from l-stack (no copy) tmp%43#0 arc4.abimethod() typed_abi_call/typed_c2c.py:119 - assert // is not creating // arc4.abimethod() typed_abi_call/typed_c2c.py:119 - txna ApplicationArgs 1 // {txna} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - // virtual: store tmp%44#0 to l-stack (no copy) tmp%44#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - // virtual: load tmp%44#0 from l-stack (no copy) tmp%44#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - btoi // {btoi} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - // virtual: store tmp%45#0 to l-stack (no copy) tmp%45#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - // virtual: load tmp%45#0 from l-stack (no copy) tmp%45#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - txnas Applications // {txnas} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - // virtual: store tmp%46#0 to l-stack (no copy) tmp%46#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - // virtual: load tmp%46#0 from l-stack (no copy) tmp%46#0 arc4.abimethod() typed_abi_call/typed_c2c.py:119 - callsub test_native_string // arc4.abimethod() typed_abi_call/typed_c2c.py:119 - int 1 // 1 arc4.abimethod() typed_abi_call/typed_c2c.py:119 - return // arc4.abimethod() typed_abi_call/typed_c2c.py:119 + txn OnCompletion // {txn} arc4.abimethod() typed_abi_call/typed_c2c.py:119 + // virtual: store tmp%41#0 to l-stack (no copy) tmp%41#0 arc4.abimethod() typed_abi_call/typed_c2c.py:119 + // virtual: load tmp%41#0 from l-stack (no copy) tmp%41#0 arc4.abimethod() typed_abi_call/typed_c2c.py:119 + ! // {!} arc4.abimethod() typed_abi_call/typed_c2c.py:119 + // virtual: store tmp%42#0 to l-stack (no copy) tmp%42#0 arc4.abimethod() typed_abi_call/typed_c2c.py:119 + // virtual: load tmp%42#0 from l-stack (no copy) tmp%42#0 arc4.abimethod() typed_abi_call/typed_c2c.py:119 + assert // OnCompletion is NoOp // arc4.abimethod() typed_abi_call/typed_c2c.py:119 + txn ApplicationID // {txn} arc4.abimethod() typed_abi_call/typed_c2c.py:119 + // virtual: store tmp%43#0 to l-stack (no copy) tmp%43#0 arc4.abimethod() typed_abi_call/typed_c2c.py:119 + // virtual: load tmp%43#0 from l-stack (no copy) tmp%43#0 arc4.abimethod() typed_abi_call/typed_c2c.py:119 + assert // is not creating // arc4.abimethod() typed_abi_call/typed_c2c.py:119 + txna ApplicationArgs 1 // {txna} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + // virtual: store tmp%44#0 to l-stack (no copy) tmp%44#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + // virtual: load tmp%44#0 from l-stack (no copy) tmp%44#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + btoi // {btoi} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + // virtual: store tmp%45#0 to l-stack (no copy) tmp%45#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + // virtual: load tmp%45#0 from l-stack (no copy) tmp%45#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + txnas Applications // {txnas} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + // virtual: store tmp%46#0 to l-stack (no copy) tmp%46#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + // virtual: load tmp%46#0 from l-stack (no copy) tmp%46#0 arc4.abimethod() typed_abi_call/typed_c2c.py:119 + callsub test_native_string // arc4.abimethod() typed_abi_call/typed_c2c.py:119 + int 1 // 1 arc4.abimethod() typed_abi_call/typed_c2c.py:119 + return // arc4.abimethod() typed_abi_call/typed_c2c.py:119 main_test_native_bytes_route@9: - txn OnCompletion // {txn} arc4.abimethod() typed_abi_call/typed_c2c.py:130 - // virtual: store tmp%47#0 to l-stack (no copy) tmp%47#0 arc4.abimethod() typed_abi_call/typed_c2c.py:130 - // virtual: load tmp%47#0 from l-stack (no copy) tmp%47#0 arc4.abimethod() typed_abi_call/typed_c2c.py:130 - ! // {!} arc4.abimethod() typed_abi_call/typed_c2c.py:130 - // virtual: store tmp%48#0 to l-stack (no copy) tmp%48#0 arc4.abimethod() typed_abi_call/typed_c2c.py:130 - // virtual: load tmp%48#0 from l-stack (no copy) tmp%48#0 arc4.abimethod() typed_abi_call/typed_c2c.py:130 - assert // OnCompletion is NoOp // arc4.abimethod() typed_abi_call/typed_c2c.py:130 - txn ApplicationID // {txn} arc4.abimethod() typed_abi_call/typed_c2c.py:130 - // virtual: store tmp%49#0 to l-stack (no copy) tmp%49#0 arc4.abimethod() typed_abi_call/typed_c2c.py:130 - // virtual: load tmp%49#0 from l-stack (no copy) tmp%49#0 arc4.abimethod() typed_abi_call/typed_c2c.py:130 - assert // is not creating // arc4.abimethod() typed_abi_call/typed_c2c.py:130 - txna ApplicationArgs 1 // {txna} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - // virtual: store tmp%50#0 to l-stack (no copy) tmp%50#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - // virtual: load tmp%50#0 from l-stack (no copy) tmp%50#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - btoi // {btoi} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - // virtual: store tmp%51#0 to l-stack (no copy) tmp%51#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - // virtual: load tmp%51#0 from l-stack (no copy) tmp%51#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - txnas Applications // {txnas} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - // virtual: store tmp%52#0 to l-stack (no copy) tmp%52#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - // virtual: load tmp%52#0 from l-stack (no copy) tmp%52#0 arc4.abimethod() typed_abi_call/typed_c2c.py:130 - callsub test_native_bytes // arc4.abimethod() typed_abi_call/typed_c2c.py:130 - int 1 // 1 arc4.abimethod() typed_abi_call/typed_c2c.py:130 - return // arc4.abimethod() typed_abi_call/typed_c2c.py:130 + txn OnCompletion // {txn} arc4.abimethod() typed_abi_call/typed_c2c.py:130 + // virtual: store tmp%47#0 to l-stack (no copy) tmp%47#0 arc4.abimethod() typed_abi_call/typed_c2c.py:130 + // virtual: load tmp%47#0 from l-stack (no copy) tmp%47#0 arc4.abimethod() typed_abi_call/typed_c2c.py:130 + ! // {!} arc4.abimethod() typed_abi_call/typed_c2c.py:130 + // virtual: store tmp%48#0 to l-stack (no copy) tmp%48#0 arc4.abimethod() typed_abi_call/typed_c2c.py:130 + // virtual: load tmp%48#0 from l-stack (no copy) tmp%48#0 arc4.abimethod() typed_abi_call/typed_c2c.py:130 + assert // OnCompletion is NoOp // arc4.abimethod() typed_abi_call/typed_c2c.py:130 + txn ApplicationID // {txn} arc4.abimethod() typed_abi_call/typed_c2c.py:130 + // virtual: store tmp%49#0 to l-stack (no copy) tmp%49#0 arc4.abimethod() typed_abi_call/typed_c2c.py:130 + // virtual: load tmp%49#0 from l-stack (no copy) tmp%49#0 arc4.abimethod() typed_abi_call/typed_c2c.py:130 + assert // is not creating // arc4.abimethod() typed_abi_call/typed_c2c.py:130 + txna ApplicationArgs 1 // {txna} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + // virtual: store tmp%50#0 to l-stack (no copy) tmp%50#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + // virtual: load tmp%50#0 from l-stack (no copy) tmp%50#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + btoi // {btoi} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + // virtual: store tmp%51#0 to l-stack (no copy) tmp%51#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + // virtual: load tmp%51#0 from l-stack (no copy) tmp%51#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + txnas Applications // {txnas} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + // virtual: store tmp%52#0 to l-stack (no copy) tmp%52#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + // virtual: load tmp%52#0 from l-stack (no copy) tmp%52#0 arc4.abimethod() typed_abi_call/typed_c2c.py:130 + callsub test_native_bytes // arc4.abimethod() typed_abi_call/typed_c2c.py:130 + int 1 // 1 arc4.abimethod() typed_abi_call/typed_c2c.py:130 + return // arc4.abimethod() typed_abi_call/typed_c2c.py:130 main_test_native_uint64_route@10: - txn OnCompletion // {txn} arc4.abimethod() typed_abi_call/typed_c2c.py:143 - // virtual: store tmp%53#0 to l-stack (no copy) tmp%53#0 arc4.abimethod() typed_abi_call/typed_c2c.py:143 - // virtual: load tmp%53#0 from l-stack (no copy) tmp%53#0 arc4.abimethod() typed_abi_call/typed_c2c.py:143 - ! // {!} arc4.abimethod() typed_abi_call/typed_c2c.py:143 - // virtual: store tmp%54#0 to l-stack (no copy) tmp%54#0 arc4.abimethod() typed_abi_call/typed_c2c.py:143 - // virtual: load tmp%54#0 from l-stack (no copy) tmp%54#0 arc4.abimethod() typed_abi_call/typed_c2c.py:143 - assert // OnCompletion is NoOp // arc4.abimethod() typed_abi_call/typed_c2c.py:143 - txn ApplicationID // {txn} arc4.abimethod() typed_abi_call/typed_c2c.py:143 - // virtual: store tmp%55#0 to l-stack (no copy) tmp%55#0 arc4.abimethod() typed_abi_call/typed_c2c.py:143 - // virtual: load tmp%55#0 from l-stack (no copy) tmp%55#0 arc4.abimethod() typed_abi_call/typed_c2c.py:143 - assert // is not creating // arc4.abimethod() typed_abi_call/typed_c2c.py:143 - txna ApplicationArgs 1 // {txna} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - // virtual: store tmp%56#0 to l-stack (no copy) tmp%56#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - // virtual: load tmp%56#0 from l-stack (no copy) tmp%56#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - btoi // {btoi} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - // virtual: store tmp%57#0 to l-stack (no copy) tmp%57#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - // virtual: load tmp%57#0 from l-stack (no copy) tmp%57#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - txnas Applications // {txnas} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - // virtual: store tmp%58#0 to l-stack (no copy) tmp%58#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - // virtual: load tmp%58#0 from l-stack (no copy) tmp%58#0 arc4.abimethod() typed_abi_call/typed_c2c.py:143 - callsub test_native_uint64 // arc4.abimethod() typed_abi_call/typed_c2c.py:143 - int 1 // 1 arc4.abimethod() typed_abi_call/typed_c2c.py:143 - return // arc4.abimethod() typed_abi_call/typed_c2c.py:143 + txn OnCompletion // {txn} arc4.abimethod() typed_abi_call/typed_c2c.py:143 + // virtual: store tmp%53#0 to l-stack (no copy) tmp%53#0 arc4.abimethod() typed_abi_call/typed_c2c.py:143 + // virtual: load tmp%53#0 from l-stack (no copy) tmp%53#0 arc4.abimethod() typed_abi_call/typed_c2c.py:143 + ! // {!} arc4.abimethod() typed_abi_call/typed_c2c.py:143 + // virtual: store tmp%54#0 to l-stack (no copy) tmp%54#0 arc4.abimethod() typed_abi_call/typed_c2c.py:143 + // virtual: load tmp%54#0 from l-stack (no copy) tmp%54#0 arc4.abimethod() typed_abi_call/typed_c2c.py:143 + assert // OnCompletion is NoOp // arc4.abimethod() typed_abi_call/typed_c2c.py:143 + txn ApplicationID // {txn} arc4.abimethod() typed_abi_call/typed_c2c.py:143 + // virtual: store tmp%55#0 to l-stack (no copy) tmp%55#0 arc4.abimethod() typed_abi_call/typed_c2c.py:143 + // virtual: load tmp%55#0 from l-stack (no copy) tmp%55#0 arc4.abimethod() typed_abi_call/typed_c2c.py:143 + assert // is not creating // arc4.abimethod() typed_abi_call/typed_c2c.py:143 + txna ApplicationArgs 1 // {txna} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + // virtual: store tmp%56#0 to l-stack (no copy) tmp%56#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + // virtual: load tmp%56#0 from l-stack (no copy) tmp%56#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + btoi // {btoi} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + // virtual: store tmp%57#0 to l-stack (no copy) tmp%57#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + // virtual: load tmp%57#0 from l-stack (no copy) tmp%57#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + txnas Applications // {txnas} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + // virtual: store tmp%58#0 to l-stack (no copy) tmp%58#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + // virtual: load tmp%58#0 from l-stack (no copy) tmp%58#0 arc4.abimethod() typed_abi_call/typed_c2c.py:143 + callsub test_native_uint64 // arc4.abimethod() typed_abi_call/typed_c2c.py:143 + int 1 // 1 arc4.abimethod() typed_abi_call/typed_c2c.py:143 + return // arc4.abimethod() typed_abi_call/typed_c2c.py:143 main_test_native_biguint_route@11: - txn OnCompletion // {txn} arc4.abimethod() typed_abi_call/typed_c2c.py:154 - // virtual: store tmp%59#0 to l-stack (no copy) tmp%59#0 arc4.abimethod() typed_abi_call/typed_c2c.py:154 - // virtual: load tmp%59#0 from l-stack (no copy) tmp%59#0 arc4.abimethod() typed_abi_call/typed_c2c.py:154 - ! // {!} arc4.abimethod() typed_abi_call/typed_c2c.py:154 - // virtual: store tmp%60#0 to l-stack (no copy) tmp%60#0 arc4.abimethod() typed_abi_call/typed_c2c.py:154 - // virtual: load tmp%60#0 from l-stack (no copy) tmp%60#0 arc4.abimethod() typed_abi_call/typed_c2c.py:154 - assert // OnCompletion is NoOp // arc4.abimethod() typed_abi_call/typed_c2c.py:154 - txn ApplicationID // {txn} arc4.abimethod() typed_abi_call/typed_c2c.py:154 - // virtual: store tmp%61#0 to l-stack (no copy) tmp%61#0 arc4.abimethod() typed_abi_call/typed_c2c.py:154 - // virtual: load tmp%61#0 from l-stack (no copy) tmp%61#0 arc4.abimethod() typed_abi_call/typed_c2c.py:154 - assert // is not creating // arc4.abimethod() typed_abi_call/typed_c2c.py:154 - txna ApplicationArgs 1 // {txna} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - // virtual: store tmp%62#0 to l-stack (no copy) tmp%62#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - // virtual: load tmp%62#0 from l-stack (no copy) tmp%62#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - btoi // {btoi} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - // virtual: store tmp%63#0 to l-stack (no copy) tmp%63#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - // virtual: load tmp%63#0 from l-stack (no copy) tmp%63#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - txnas Applications // {txnas} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - // virtual: store tmp%64#0 to l-stack (no copy) tmp%64#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - // virtual: load tmp%64#0 from l-stack (no copy) tmp%64#0 arc4.abimethod() typed_abi_call/typed_c2c.py:154 - callsub test_native_biguint // arc4.abimethod() typed_abi_call/typed_c2c.py:154 - int 1 // 1 arc4.abimethod() typed_abi_call/typed_c2c.py:154 - return // arc4.abimethod() typed_abi_call/typed_c2c.py:154 + txn OnCompletion // {txn} arc4.abimethod() typed_abi_call/typed_c2c.py:154 + // virtual: store tmp%59#0 to l-stack (no copy) tmp%59#0 arc4.abimethod() typed_abi_call/typed_c2c.py:154 + // virtual: load tmp%59#0 from l-stack (no copy) tmp%59#0 arc4.abimethod() typed_abi_call/typed_c2c.py:154 + ! // {!} arc4.abimethod() typed_abi_call/typed_c2c.py:154 + // virtual: store tmp%60#0 to l-stack (no copy) tmp%60#0 arc4.abimethod() typed_abi_call/typed_c2c.py:154 + // virtual: load tmp%60#0 from l-stack (no copy) tmp%60#0 arc4.abimethod() typed_abi_call/typed_c2c.py:154 + assert // OnCompletion is NoOp // arc4.abimethod() typed_abi_call/typed_c2c.py:154 + txn ApplicationID // {txn} arc4.abimethod() typed_abi_call/typed_c2c.py:154 + // virtual: store tmp%61#0 to l-stack (no copy) tmp%61#0 arc4.abimethod() typed_abi_call/typed_c2c.py:154 + // virtual: load tmp%61#0 from l-stack (no copy) tmp%61#0 arc4.abimethod() typed_abi_call/typed_c2c.py:154 + assert // is not creating // arc4.abimethod() typed_abi_call/typed_c2c.py:154 + txna ApplicationArgs 1 // {txna} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + // virtual: store tmp%62#0 to l-stack (no copy) tmp%62#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + // virtual: load tmp%62#0 from l-stack (no copy) tmp%62#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + btoi // {btoi} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + // virtual: store tmp%63#0 to l-stack (no copy) tmp%63#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + // virtual: load tmp%63#0 from l-stack (no copy) tmp%63#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + txnas Applications // {txnas} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + // virtual: store tmp%64#0 to l-stack (no copy) tmp%64#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + // virtual: load tmp%64#0 from l-stack (no copy) tmp%64#0 arc4.abimethod() typed_abi_call/typed_c2c.py:154 + callsub test_native_biguint // arc4.abimethod() typed_abi_call/typed_c2c.py:154 + int 1 // 1 arc4.abimethod() typed_abi_call/typed_c2c.py:154 + return // arc4.abimethod() typed_abi_call/typed_c2c.py:154 main_test_native_tuple_route@12: - txn OnCompletion // {txn} arc4.abimethod() typed_abi_call/typed_c2c.py:165 - // virtual: store tmp%65#0 to l-stack (no copy) tmp%65#0 arc4.abimethod() typed_abi_call/typed_c2c.py:165 - // virtual: load tmp%65#0 from l-stack (no copy) tmp%65#0 arc4.abimethod() typed_abi_call/typed_c2c.py:165 - ! // {!} arc4.abimethod() typed_abi_call/typed_c2c.py:165 - // virtual: store tmp%66#0 to l-stack (no copy) tmp%66#0 arc4.abimethod() typed_abi_call/typed_c2c.py:165 - // virtual: load tmp%66#0 from l-stack (no copy) tmp%66#0 arc4.abimethod() typed_abi_call/typed_c2c.py:165 - assert // OnCompletion is NoOp // arc4.abimethod() typed_abi_call/typed_c2c.py:165 - txn ApplicationID // {txn} arc4.abimethod() typed_abi_call/typed_c2c.py:165 - // virtual: store tmp%67#0 to l-stack (no copy) tmp%67#0 arc4.abimethod() typed_abi_call/typed_c2c.py:165 - // virtual: load tmp%67#0 from l-stack (no copy) tmp%67#0 arc4.abimethod() typed_abi_call/typed_c2c.py:165 - assert // is not creating // arc4.abimethod() typed_abi_call/typed_c2c.py:165 - txna ApplicationArgs 1 // {txna} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - // virtual: store tmp%68#0 to l-stack (no copy) tmp%68#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - // virtual: load tmp%68#0 from l-stack (no copy) tmp%68#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - btoi // {btoi} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - // virtual: store tmp%69#0 to l-stack (no copy) tmp%69#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - // virtual: load tmp%69#0 from l-stack (no copy) tmp%69#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - txnas Applications // {txnas} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - // virtual: store tmp%70#0 to l-stack (no copy) tmp%70#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - // virtual: load tmp%70#0 from l-stack (no copy) tmp%70#0 arc4.abimethod() typed_abi_call/typed_c2c.py:165 - callsub test_native_tuple // arc4.abimethod() typed_abi_call/typed_c2c.py:165 - int 1 // 1 arc4.abimethod() typed_abi_call/typed_c2c.py:165 - return // arc4.abimethod() typed_abi_call/typed_c2c.py:165 + txn OnCompletion // {txn} arc4.abimethod() typed_abi_call/typed_c2c.py:165 + // virtual: store tmp%65#0 to l-stack (no copy) tmp%65#0 arc4.abimethod() typed_abi_call/typed_c2c.py:165 + // virtual: load tmp%65#0 from l-stack (no copy) tmp%65#0 arc4.abimethod() typed_abi_call/typed_c2c.py:165 + ! // {!} arc4.abimethod() typed_abi_call/typed_c2c.py:165 + // virtual: store tmp%66#0 to l-stack (no copy) tmp%66#0 arc4.abimethod() typed_abi_call/typed_c2c.py:165 + // virtual: load tmp%66#0 from l-stack (no copy) tmp%66#0 arc4.abimethod() typed_abi_call/typed_c2c.py:165 + assert // OnCompletion is NoOp // arc4.abimethod() typed_abi_call/typed_c2c.py:165 + txn ApplicationID // {txn} arc4.abimethod() typed_abi_call/typed_c2c.py:165 + // virtual: store tmp%67#0 to l-stack (no copy) tmp%67#0 arc4.abimethod() typed_abi_call/typed_c2c.py:165 + // virtual: load tmp%67#0 from l-stack (no copy) tmp%67#0 arc4.abimethod() typed_abi_call/typed_c2c.py:165 + assert // is not creating // arc4.abimethod() typed_abi_call/typed_c2c.py:165 + txna ApplicationArgs 1 // {txna} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + // virtual: store tmp%68#0 to l-stack (no copy) tmp%68#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + // virtual: load tmp%68#0 from l-stack (no copy) tmp%68#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + btoi // {btoi} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + // virtual: store tmp%69#0 to l-stack (no copy) tmp%69#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + // virtual: load tmp%69#0 from l-stack (no copy) tmp%69#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + txnas Applications // {txnas} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + // virtual: store tmp%70#0 to l-stack (no copy) tmp%70#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + // virtual: load tmp%70#0 from l-stack (no copy) tmp%70#0 arc4.abimethod() typed_abi_call/typed_c2c.py:165 + callsub test_native_tuple // arc4.abimethod() typed_abi_call/typed_c2c.py:165 + int 1 // 1 arc4.abimethod() typed_abi_call/typed_c2c.py:165 + return // arc4.abimethod() typed_abi_call/typed_c2c.py:165 -main_bare_routing@15: - txn OnCompletion // {txn} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - // virtual: store tmp%71#0 to l-stack (no copy) tmp%71#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - // virtual: load tmp%71#0 from l-stack (no copy) tmp%71#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - ! // {!} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - // virtual: store not%tmp%71#0 to l-stack (no copy) not%tmp%71#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - // virtual: load not%tmp%71#0 from l-stack (no copy) not%tmp%71#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - assert // reject transaction // class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - txn ApplicationID // {txn} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - // virtual: store tmp%72#0 to l-stack (no copy) tmp%72#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - // virtual: load tmp%72#0 from l-stack (no copy) tmp%72#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - ! // {!} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - // virtual: store tmp%73#0 to l-stack (no copy) tmp%73#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - // virtual: load tmp%73#0 from l-stack (no copy) tmp%73#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - assert // is creating // class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - int 1 // 1 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 - return // class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 +main_test_no_args_route@13: + txn OnCompletion // {txn} arc4.abimethod() typed_abi_call/typed_c2c.py:215 + // virtual: store tmp%71#0 to l-stack (no copy) tmp%71#0 arc4.abimethod() typed_abi_call/typed_c2c.py:215 + // virtual: load tmp%71#0 from l-stack (no copy) tmp%71#0 arc4.abimethod() typed_abi_call/typed_c2c.py:215 + ! // {!} arc4.abimethod() typed_abi_call/typed_c2c.py:215 + // virtual: store tmp%72#0 to l-stack (no copy) tmp%72#0 arc4.abimethod() typed_abi_call/typed_c2c.py:215 + // virtual: load tmp%72#0 from l-stack (no copy) tmp%72#0 arc4.abimethod() typed_abi_call/typed_c2c.py:215 + assert // OnCompletion is NoOp // arc4.abimethod() typed_abi_call/typed_c2c.py:215 + txn ApplicationID // {txn} arc4.abimethod() typed_abi_call/typed_c2c.py:215 + // virtual: store tmp%73#0 to l-stack (no copy) tmp%73#0 arc4.abimethod() typed_abi_call/typed_c2c.py:215 + // virtual: load tmp%73#0 from l-stack (no copy) tmp%73#0 arc4.abimethod() typed_abi_call/typed_c2c.py:215 + assert // is not creating // arc4.abimethod() typed_abi_call/typed_c2c.py:215 + txna ApplicationArgs 1 // {txna} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + // virtual: store tmp%74#0 to l-stack (no copy) tmp%74#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + // virtual: load tmp%74#0 from l-stack (no copy) tmp%74#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + btoi // {btoi} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + // virtual: store tmp%75#0 to l-stack (no copy) tmp%75#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + // virtual: load tmp%75#0 from l-stack (no copy) tmp%75#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + txnas Applications // {txnas} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + // virtual: store tmp%76#0 to l-stack (no copy) tmp%76#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + // virtual: load tmp%76#0 from l-stack (no copy) tmp%76#0 arc4.abimethod() typed_abi_call/typed_c2c.py:215 + callsub test_no_args // arc4.abimethod() typed_abi_call/typed_c2c.py:215 + int 1 // 1 arc4.abimethod() typed_abi_call/typed_c2c.py:215 + return // arc4.abimethod() typed_abi_call/typed_c2c.py:215 + +main_bare_routing@16: + txn OnCompletion // {txn} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + // virtual: store tmp%77#0 to l-stack (no copy) tmp%77#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + // virtual: load tmp%77#0 from l-stack (no copy) tmp%77#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + ! // {!} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + // virtual: store not%tmp%77#0 to l-stack (no copy) not%tmp%77#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + // virtual: load not%tmp%77#0 from l-stack (no copy) not%tmp%77#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + assert // reject transaction // class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + txn ApplicationID // {txn} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + // virtual: store tmp%78#0 to l-stack (no copy) tmp%78#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + // virtual: load tmp%78#0 from l-stack (no copy) tmp%78#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + ! // {!} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + // virtual: store tmp%79#0 to l-stack (no copy) tmp%79#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + // virtual: load tmp%79#0 from l-stack (no copy) tmp%79#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + assert // is creating // class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + int 1 // 1 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 + return // class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:17 // test_cases.typed_abi_call.typed_c2c.Greeter.test_method_selector_kinds(app: uint64) -> void: test_method_selector_kinds: - proto 1 0 // (𝕡) app#0 | @arc4.abimethod()\ndef test_method_selector_kinds(self, app: Application) -> None: typed_abi_call/typed_c2c.py:18-19 + proto 1 0 // (𝕡) app#0 | @arc4.abimethod()\ndef test_method_selector_kinds(self, app: Application) -> None: typed_abi_call/typed_c2c.py:18-19 test_method_selector_kinds_block@0: - itxn_begin // (𝕡) app#0 | arc4.abi_call(Logger.echo, arc4.String("test1"), app_id=app) typed_abi_call/typed_c2c.py:20 - frame_dig -1 // load app#0 from parameters (𝕡) app#0 | app#0 - itxn_field ApplicationID // (𝕡) app#0 | - method "echo(string)string" // (𝕡) app#0 | method<"echo(string)string"> arc4.abi_call(Logger.echo, arc4.String("test1"), app_id=app) typed_abi_call/typed_c2c.py:20 - itxn_field ApplicationArgs // (𝕡) app#0 | - byte 0x00057465737431 // (𝕡) app#0 | 0x00057465737431 arc4.String("test1") typed_abi_call/typed_c2c.py:20 - itxn_field ApplicationArgs // (𝕡) app#0 | - int appl // (𝕡) app#0 | appl arc4.abi_call(Logger.echo, arc4.String("test1"), app_id=app) typed_abi_call/typed_c2c.py:20 - itxn_field TypeEnum // (𝕡) app#0 | - int 0 // (𝕡) app#0 | 0 arc4.abi_call(Logger.echo, arc4.String("test1"), app_id=app) typed_abi_call/typed_c2c.py:20 - itxn_field Fee // (𝕡) app#0 | - itxn_submit // (𝕡) app#0 | arc4.abi_call(Logger.echo, arc4.String("test1"), app_id=app) typed_abi_call/typed_c2c.py:20 - itxn LastLog // (𝕡) app#0 | {itxn} arc4.abi_call(Logger.echo, arc4.String("test1"), app_id=app) typed_abi_call/typed_c2c.py:20 - // virtual: store awst_tmp%0#0 to l-stack (no copy) (𝕡) app#0 | awst_tmp%0#0 arc4.abi_call(Logger.echo, arc4.String("test1"), app_id=app) typed_abi_call/typed_c2c.py:20 - dup // load awst_tmp%0#0 from l-stack (copy) (𝕡) app#0 | awst_tmp%0#0,awst_tmp%0#0 arc4.abi_call(Logger.echo, arc4.String("test1"), app_id=app) typed_abi_call/typed_c2c.py:20 - extract 4 0 // (𝕡) app#0 | awst_tmp%0#0,{extract} arc4.abi_call(Logger.echo, arc4.String("test1"), app_id=app) typed_abi_call/typed_c2c.py:20 - cover 1 // store result#0 to l-stack (no copy) (𝕡) app#0 | result#0,awst_tmp%0#0 arc4.abi_call(Logger.echo, arc4.String("test1"), app_id=app) typed_abi_call/typed_c2c.py:20 - // virtual: load awst_tmp%0#0 from l-stack (no copy) (𝕡) app#0 | result#0,awst_tmp%0#0 arc4.abi_call(Logger.echo, arc4.String("test1"), app_id=app) typed_abi_call/typed_c2c.py:20 - extract 0 4 // (𝕡) app#0 | result#0,{extract} arc4.abi_call(Logger.echo, arc4.String("test1"), app_id=app) typed_abi_call/typed_c2c.py:20 - // virtual: store tmp%1#0 to l-stack (no copy) (𝕡) app#0 | result#0,tmp%1#0 arc4.abi_call(Logger.echo, arc4.String("test1"), app_id=app) typed_abi_call/typed_c2c.py:20 - // virtual: load tmp%1#0 from l-stack (no copy) (𝕡) app#0 | result#0,tmp%1#0 arc4.abi_call(Logger.echo, arc4.String("test1"), app_id=app) typed_abi_call/typed_c2c.py:20 - byte 0x151f7c75 // (𝕡) app#0 | result#0,tmp%1#0,0x151f7c75 arc4.abi_call(Logger.echo, arc4.String("test1"), app_id=app) typed_abi_call/typed_c2c.py:20 - == // (𝕡) app#0 | result#0,{==} arc4.abi_call(Logger.echo, arc4.String("test1"), app_id=app) typed_abi_call/typed_c2c.py:20 - // virtual: store tmp%2#0 to l-stack (no copy) (𝕡) app#0 | result#0,tmp%2#0 arc4.abi_call(Logger.echo, arc4.String("test1"), app_id=app) typed_abi_call/typed_c2c.py:20 - // virtual: load tmp%2#0 from l-stack (no copy) (𝕡) app#0 | result#0,tmp%2#0 arc4.abi_call(Logger.echo, arc4.String("test1"), app_id=app) typed_abi_call/typed_c2c.py:20 - assert // ARC4 prefix is valid // (𝕡) app#0 | result#0 arc4.abi_call(Logger.echo, arc4.String("test1"), app_id=app) typed_abi_call/typed_c2c.py:20 - // virtual: load result#0 from l-stack (no copy) (𝕡) app#0 | result#0 result == "echo: test1" typed_abi_call/typed_c2c.py:21 - byte 0x000b6563686f3a207465737431 // (𝕡) app#0 | result#0,0x000b6563686f3a207465737431 "echo: test1" typed_abi_call/typed_c2c.py:21 - == // (𝕡) app#0 | {==} result == "echo: test1" typed_abi_call/typed_c2c.py:21 - // virtual: store tmp%3#0 to l-stack (no copy) (𝕡) app#0 | tmp%3#0 result == "echo: test1" typed_abi_call/typed_c2c.py:21 - // virtual: load tmp%3#0 from l-stack (no copy) (𝕡) app#0 | tmp%3#0 assert result == "echo: test1" typed_abi_call/typed_c2c.py:21 - assert // (𝕡) app#0 | assert result == "echo: test1" typed_abi_call/typed_c2c.py:21 - itxn_begin // (𝕡) app#0 | arc4.abi_call(LoggerClient.echo, "test2", app_id=app) typed_abi_call/typed_c2c.py:22 - frame_dig -1 // load app#0 from parameters (𝕡) app#0 | app#0 - itxn_field ApplicationID // (𝕡) app#0 | - method "echo(string)string" // (𝕡) app#0 | method<"echo(string)string"> arc4.abi_call(LoggerClient.echo, "test2", app_id=app) typed_abi_call/typed_c2c.py:22 - itxn_field ApplicationArgs // (𝕡) app#0 | - byte 0x00057465737432 // (𝕡) app#0 | 0x00057465737432 "test2" typed_abi_call/typed_c2c.py:22 - itxn_field ApplicationArgs // (𝕡) app#0 | - int appl // (𝕡) app#0 | appl arc4.abi_call(LoggerClient.echo, "test2", app_id=app) typed_abi_call/typed_c2c.py:22 - itxn_field TypeEnum // (𝕡) app#0 | - int 0 // (𝕡) app#0 | 0 arc4.abi_call(LoggerClient.echo, "test2", app_id=app) typed_abi_call/typed_c2c.py:22 - itxn_field Fee // (𝕡) app#0 | - itxn_submit // (𝕡) app#0 | arc4.abi_call(LoggerClient.echo, "test2", app_id=app) typed_abi_call/typed_c2c.py:22 - itxn LastLog // (𝕡) app#0 | {itxn} arc4.abi_call(LoggerClient.echo, "test2", app_id=app) typed_abi_call/typed_c2c.py:22 - // virtual: store awst_tmp%1#0 to l-stack (no copy) (𝕡) app#0 | awst_tmp%1#0 arc4.abi_call(LoggerClient.echo, "test2", app_id=app) typed_abi_call/typed_c2c.py:22 - dup // load awst_tmp%1#0 from l-stack (copy) (𝕡) app#0 | awst_tmp%1#0,awst_tmp%1#0 arc4.abi_call(LoggerClient.echo, "test2", app_id=app) typed_abi_call/typed_c2c.py:22 - extract 4 0 // (𝕡) app#0 | awst_tmp%1#0,{extract} arc4.abi_call(LoggerClient.echo, "test2", app_id=app) typed_abi_call/typed_c2c.py:22 - cover 1 // store result#0 to l-stack (no copy) (𝕡) app#0 | result#0,awst_tmp%1#0 arc4.abi_call(LoggerClient.echo, "test2", app_id=app) typed_abi_call/typed_c2c.py:22 - // virtual: load awst_tmp%1#0 from l-stack (no copy) (𝕡) app#0 | result#0,awst_tmp%1#0 arc4.abi_call(LoggerClient.echo, "test2", app_id=app) typed_abi_call/typed_c2c.py:22 - extract 0 4 // (𝕡) app#0 | result#0,{extract} arc4.abi_call(LoggerClient.echo, "test2", app_id=app) typed_abi_call/typed_c2c.py:22 - // virtual: store tmp%5#0 to l-stack (no copy) (𝕡) app#0 | result#0,tmp%5#0 arc4.abi_call(LoggerClient.echo, "test2", app_id=app) typed_abi_call/typed_c2c.py:22 - // virtual: load tmp%5#0 from l-stack (no copy) (𝕡) app#0 | result#0,tmp%5#0 arc4.abi_call(LoggerClient.echo, "test2", app_id=app) typed_abi_call/typed_c2c.py:22 - byte 0x151f7c75 // (𝕡) app#0 | result#0,tmp%5#0,0x151f7c75 arc4.abi_call(LoggerClient.echo, "test2", app_id=app) typed_abi_call/typed_c2c.py:22 - == // (𝕡) app#0 | result#0,{==} arc4.abi_call(LoggerClient.echo, "test2", app_id=app) typed_abi_call/typed_c2c.py:22 - // virtual: store tmp%6#0 to l-stack (no copy) (𝕡) app#0 | result#0,tmp%6#0 arc4.abi_call(LoggerClient.echo, "test2", app_id=app) typed_abi_call/typed_c2c.py:22 - // virtual: load tmp%6#0 from l-stack (no copy) (𝕡) app#0 | result#0,tmp%6#0 arc4.abi_call(LoggerClient.echo, "test2", app_id=app) typed_abi_call/typed_c2c.py:22 - assert // ARC4 prefix is valid // (𝕡) app#0 | result#0 arc4.abi_call(LoggerClient.echo, "test2", app_id=app) typed_abi_call/typed_c2c.py:22 - // virtual: load result#0 from l-stack (no copy) (𝕡) app#0 | result#0 result == "echo: test2" typed_abi_call/typed_c2c.py:23 - byte 0x000b6563686f3a207465737432 // (𝕡) app#0 | result#0,0x000b6563686f3a207465737432 "echo: test2" typed_abi_call/typed_c2c.py:23 - == // (𝕡) app#0 | {==} result == "echo: test2" typed_abi_call/typed_c2c.py:23 - // virtual: store tmp%7#0 to l-stack (no copy) (𝕡) app#0 | tmp%7#0 result == "echo: test2" typed_abi_call/typed_c2c.py:23 - // virtual: load tmp%7#0 from l-stack (no copy) (𝕡) app#0 | tmp%7#0 assert result == "echo: test2" typed_abi_call/typed_c2c.py:23 - assert // (𝕡) app#0 | assert result == "echo: test2" typed_abi_call/typed_c2c.py:23 - itxn_begin // (𝕡) app#0 | arc4.abi_call[arc4.String]("echo", "test3", app_id=app) typed_abi_call/typed_c2c.py:24 - frame_dig -1 // load app#0 from parameters (𝕡) app#0 | app#0 - itxn_field ApplicationID // (𝕡) app#0 | - method "echo(string)string" // (𝕡) app#0 | method<"echo(string)string"> arc4.abi_call[arc4.String]("echo", "test3", app_id=app) typed_abi_call/typed_c2c.py:24 - itxn_field ApplicationArgs // (𝕡) app#0 | - byte 0x00057465737433 // (𝕡) app#0 | 0x00057465737433 "test3" typed_abi_call/typed_c2c.py:24 - itxn_field ApplicationArgs // (𝕡) app#0 | - int appl // (𝕡) app#0 | appl arc4.abi_call[arc4.String]("echo", "test3", app_id=app) typed_abi_call/typed_c2c.py:24 - itxn_field TypeEnum // (𝕡) app#0 | - int 0 // (𝕡) app#0 | 0 arc4.abi_call[arc4.String]("echo", "test3", app_id=app) typed_abi_call/typed_c2c.py:24 - itxn_field Fee // (𝕡) app#0 | - itxn_submit // (𝕡) app#0 | arc4.abi_call[arc4.String]("echo", "test3", app_id=app) typed_abi_call/typed_c2c.py:24 - itxn LastLog // (𝕡) app#0 | {itxn} arc4.abi_call[arc4.String]("echo", "test3", app_id=app) typed_abi_call/typed_c2c.py:24 - // virtual: store awst_tmp%2#0 to l-stack (no copy) (𝕡) app#0 | awst_tmp%2#0 arc4.abi_call[arc4.String]("echo", "test3", app_id=app) typed_abi_call/typed_c2c.py:24 - dup // load awst_tmp%2#0 from l-stack (copy) (𝕡) app#0 | awst_tmp%2#0,awst_tmp%2#0 arc4.abi_call[arc4.String]("echo", "test3", app_id=app) typed_abi_call/typed_c2c.py:24 - extract 4 0 // (𝕡) app#0 | awst_tmp%2#0,{extract} arc4.abi_call[arc4.String]("echo", "test3", app_id=app) typed_abi_call/typed_c2c.py:24 - cover 1 // store result#0 to l-stack (no copy) (𝕡) app#0 | result#0,awst_tmp%2#0 arc4.abi_call[arc4.String]("echo", "test3", app_id=app) typed_abi_call/typed_c2c.py:24 - // virtual: load awst_tmp%2#0 from l-stack (no copy) (𝕡) app#0 | result#0,awst_tmp%2#0 arc4.abi_call[arc4.String]("echo", "test3", app_id=app) typed_abi_call/typed_c2c.py:24 - extract 0 4 // (𝕡) app#0 | result#0,{extract} arc4.abi_call[arc4.String]("echo", "test3", app_id=app) typed_abi_call/typed_c2c.py:24 - // virtual: store tmp%9#0 to l-stack (no copy) (𝕡) app#0 | result#0,tmp%9#0 arc4.abi_call[arc4.String]("echo", "test3", app_id=app) typed_abi_call/typed_c2c.py:24 - // virtual: load tmp%9#0 from l-stack (no copy) (𝕡) app#0 | result#0,tmp%9#0 arc4.abi_call[arc4.String]("echo", "test3", app_id=app) typed_abi_call/typed_c2c.py:24 - byte 0x151f7c75 // (𝕡) app#0 | result#0,tmp%9#0,0x151f7c75 arc4.abi_call[arc4.String]("echo", "test3", app_id=app) typed_abi_call/typed_c2c.py:24 - == // (𝕡) app#0 | result#0,{==} arc4.abi_call[arc4.String]("echo", "test3", app_id=app) typed_abi_call/typed_c2c.py:24 - // virtual: store tmp%10#0 to l-stack (no copy) (𝕡) app#0 | result#0,tmp%10#0 arc4.abi_call[arc4.String]("echo", "test3", app_id=app) typed_abi_call/typed_c2c.py:24 - // virtual: load tmp%10#0 from l-stack (no copy) (𝕡) app#0 | result#0,tmp%10#0 arc4.abi_call[arc4.String]("echo", "test3", app_id=app) typed_abi_call/typed_c2c.py:24 - assert // ARC4 prefix is valid // (𝕡) app#0 | result#0 arc4.abi_call[arc4.String]("echo", "test3", app_id=app) typed_abi_call/typed_c2c.py:24 - // virtual: load result#0 from l-stack (no copy) (𝕡) app#0 | result#0 result == "echo: test3" typed_abi_call/typed_c2c.py:25 - byte 0x000b6563686f3a207465737433 // (𝕡) app#0 | result#0,0x000b6563686f3a207465737433 "echo: test3" typed_abi_call/typed_c2c.py:25 - == // (𝕡) app#0 | {==} result == "echo: test3" typed_abi_call/typed_c2c.py:25 - // virtual: store tmp%11#0 to l-stack (no copy) (𝕡) app#0 | tmp%11#0 result == "echo: test3" typed_abi_call/typed_c2c.py:25 - // virtual: load tmp%11#0 from l-stack (no copy) (𝕡) app#0 | tmp%11#0 assert result == "echo: test3" typed_abi_call/typed_c2c.py:25 - assert // (𝕡) app#0 | assert result == "echo: test3" typed_abi_call/typed_c2c.py:25 - itxn_begin // (𝕡) app#0 | arc4.abi_call[arc4.String]("echo(string)", "test4", app_id=app) typed_abi_call/typed_c2c.py:26 - frame_dig -1 // load app#0 from parameters (𝕡) app#0 | app#0 - itxn_field ApplicationID // (𝕡) app#0 | - method "echo(string)string" // (𝕡) app#0 | method<"echo(string)string"> arc4.abi_call[arc4.String]("echo(string)", "test4", app_id=app) typed_abi_call/typed_c2c.py:26 - itxn_field ApplicationArgs // (𝕡) app#0 | - byte 0x00057465737434 // (𝕡) app#0 | 0x00057465737434 "test4" typed_abi_call/typed_c2c.py:26 - itxn_field ApplicationArgs // (𝕡) app#0 | - int appl // (𝕡) app#0 | appl arc4.abi_call[arc4.String]("echo(string)", "test4", app_id=app) typed_abi_call/typed_c2c.py:26 - itxn_field TypeEnum // (𝕡) app#0 | - int 0 // (𝕡) app#0 | 0 arc4.abi_call[arc4.String]("echo(string)", "test4", app_id=app) typed_abi_call/typed_c2c.py:26 - itxn_field Fee // (𝕡) app#0 | - itxn_submit // (𝕡) app#0 | arc4.abi_call[arc4.String]("echo(string)", "test4", app_id=app) typed_abi_call/typed_c2c.py:26 - itxn LastLog // (𝕡) app#0 | {itxn} arc4.abi_call[arc4.String]("echo(string)", "test4", app_id=app) typed_abi_call/typed_c2c.py:26 - // virtual: store awst_tmp%3#0 to l-stack (no copy) (𝕡) app#0 | awst_tmp%3#0 arc4.abi_call[arc4.String]("echo(string)", "test4", app_id=app) typed_abi_call/typed_c2c.py:26 - dup // load awst_tmp%3#0 from l-stack (copy) (𝕡) app#0 | awst_tmp%3#0,awst_tmp%3#0 arc4.abi_call[arc4.String]("echo(string)", "test4", app_id=app) typed_abi_call/typed_c2c.py:26 - extract 4 0 // (𝕡) app#0 | awst_tmp%3#0,{extract} arc4.abi_call[arc4.String]("echo(string)", "test4", app_id=app) typed_abi_call/typed_c2c.py:26 - cover 1 // store result#0 to l-stack (no copy) (𝕡) app#0 | result#0,awst_tmp%3#0 arc4.abi_call[arc4.String]("echo(string)", "test4", app_id=app) typed_abi_call/typed_c2c.py:26 - // virtual: load awst_tmp%3#0 from l-stack (no copy) (𝕡) app#0 | result#0,awst_tmp%3#0 arc4.abi_call[arc4.String]("echo(string)", "test4", app_id=app) typed_abi_call/typed_c2c.py:26 - extract 0 4 // (𝕡) app#0 | result#0,{extract} arc4.abi_call[arc4.String]("echo(string)", "test4", app_id=app) typed_abi_call/typed_c2c.py:26 - // virtual: store tmp%13#0 to l-stack (no copy) (𝕡) app#0 | result#0,tmp%13#0 arc4.abi_call[arc4.String]("echo(string)", "test4", app_id=app) typed_abi_call/typed_c2c.py:26 - // virtual: load tmp%13#0 from l-stack (no copy) (𝕡) app#0 | result#0,tmp%13#0 arc4.abi_call[arc4.String]("echo(string)", "test4", app_id=app) typed_abi_call/typed_c2c.py:26 - byte 0x151f7c75 // (𝕡) app#0 | result#0,tmp%13#0,0x151f7c75 arc4.abi_call[arc4.String]("echo(string)", "test4", app_id=app) typed_abi_call/typed_c2c.py:26 - == // (𝕡) app#0 | result#0,{==} arc4.abi_call[arc4.String]("echo(string)", "test4", app_id=app) typed_abi_call/typed_c2c.py:26 - // virtual: store tmp%14#0 to l-stack (no copy) (𝕡) app#0 | result#0,tmp%14#0 arc4.abi_call[arc4.String]("echo(string)", "test4", app_id=app) typed_abi_call/typed_c2c.py:26 - // virtual: load tmp%14#0 from l-stack (no copy) (𝕡) app#0 | result#0,tmp%14#0 arc4.abi_call[arc4.String]("echo(string)", "test4", app_id=app) typed_abi_call/typed_c2c.py:26 - assert // ARC4 prefix is valid // (𝕡) app#0 | result#0 arc4.abi_call[arc4.String]("echo(string)", "test4", app_id=app) typed_abi_call/typed_c2c.py:26 - // virtual: load result#0 from l-stack (no copy) (𝕡) app#0 | result#0 result == "echo: test4" typed_abi_call/typed_c2c.py:27 - byte 0x000b6563686f3a207465737434 // (𝕡) app#0 | result#0,0x000b6563686f3a207465737434 "echo: test4" typed_abi_call/typed_c2c.py:27 - == // (𝕡) app#0 | {==} result == "echo: test4" typed_abi_call/typed_c2c.py:27 - // virtual: store tmp%15#0 to l-stack (no copy) (𝕡) app#0 | tmp%15#0 result == "echo: test4" typed_abi_call/typed_c2c.py:27 - // virtual: load tmp%15#0 from l-stack (no copy) (𝕡) app#0 | tmp%15#0 assert result == "echo: test4" typed_abi_call/typed_c2c.py:27 - assert // (𝕡) app#0 | assert result == "echo: test4" typed_abi_call/typed_c2c.py:27 - itxn_begin // (𝕡) app#0 | arc4.abi_call[arc4.String]("echo(string)string", "test5", app_id=app) typed_abi_call/typed_c2c.py:28 - frame_dig -1 // load app#0 from parameters (𝕡) app#0 | app#0 - itxn_field ApplicationID // (𝕡) app#0 | - method "echo(string)string" // (𝕡) app#0 | method<"echo(string)string"> arc4.abi_call[arc4.String]("echo(string)string", "test5", app_id=app) typed_abi_call/typed_c2c.py:28 - itxn_field ApplicationArgs // (𝕡) app#0 | - byte 0x00057465737435 // (𝕡) app#0 | 0x00057465737435 "test5" typed_abi_call/typed_c2c.py:28 - itxn_field ApplicationArgs // (𝕡) app#0 | - int appl // (𝕡) app#0 | appl arc4.abi_call[arc4.String]("echo(string)string", "test5", app_id=app) typed_abi_call/typed_c2c.py:28 - itxn_field TypeEnum // (𝕡) app#0 | - int 0 // (𝕡) app#0 | 0 arc4.abi_call[arc4.String]("echo(string)string", "test5", app_id=app) typed_abi_call/typed_c2c.py:28 - itxn_field Fee // (𝕡) app#0 | - itxn_submit // (𝕡) app#0 | arc4.abi_call[arc4.String]("echo(string)string", "test5", app_id=app) typed_abi_call/typed_c2c.py:28 - itxn LastLog // (𝕡) app#0 | {itxn} arc4.abi_call[arc4.String]("echo(string)string", "test5", app_id=app) typed_abi_call/typed_c2c.py:28 - // virtual: store awst_tmp%4#0 to l-stack (no copy) (𝕡) app#0 | awst_tmp%4#0 arc4.abi_call[arc4.String]("echo(string)string", "test5", app_id=app) typed_abi_call/typed_c2c.py:28 - dup // load awst_tmp%4#0 from l-stack (copy) (𝕡) app#0 | awst_tmp%4#0,awst_tmp%4#0 arc4.abi_call[arc4.String]("echo(string)string", "test5", app_id=app) typed_abi_call/typed_c2c.py:28 - extract 4 0 // (𝕡) app#0 | awst_tmp%4#0,{extract} arc4.abi_call[arc4.String]("echo(string)string", "test5", app_id=app) typed_abi_call/typed_c2c.py:28 - cover 1 // store result#0 to l-stack (no copy) (𝕡) app#0 | result#0,awst_tmp%4#0 arc4.abi_call[arc4.String]("echo(string)string", "test5", app_id=app) typed_abi_call/typed_c2c.py:28 - // virtual: load awst_tmp%4#0 from l-stack (no copy) (𝕡) app#0 | result#0,awst_tmp%4#0 arc4.abi_call[arc4.String]("echo(string)string", "test5", app_id=app) typed_abi_call/typed_c2c.py:28 - extract 0 4 // (𝕡) app#0 | result#0,{extract} arc4.abi_call[arc4.String]("echo(string)string", "test5", app_id=app) typed_abi_call/typed_c2c.py:28 - // virtual: store tmp%17#0 to l-stack (no copy) (𝕡) app#0 | result#0,tmp%17#0 arc4.abi_call[arc4.String]("echo(string)string", "test5", app_id=app) typed_abi_call/typed_c2c.py:28 - // virtual: load tmp%17#0 from l-stack (no copy) (𝕡) app#0 | result#0,tmp%17#0 arc4.abi_call[arc4.String]("echo(string)string", "test5", app_id=app) typed_abi_call/typed_c2c.py:28 - byte 0x151f7c75 // (𝕡) app#0 | result#0,tmp%17#0,0x151f7c75 arc4.abi_call[arc4.String]("echo(string)string", "test5", app_id=app) typed_abi_call/typed_c2c.py:28 - == // (𝕡) app#0 | result#0,{==} arc4.abi_call[arc4.String]("echo(string)string", "test5", app_id=app) typed_abi_call/typed_c2c.py:28 - // virtual: store tmp%18#0 to l-stack (no copy) (𝕡) app#0 | result#0,tmp%18#0 arc4.abi_call[arc4.String]("echo(string)string", "test5", app_id=app) typed_abi_call/typed_c2c.py:28 - // virtual: load tmp%18#0 from l-stack (no copy) (𝕡) app#0 | result#0,tmp%18#0 arc4.abi_call[arc4.String]("echo(string)string", "test5", app_id=app) typed_abi_call/typed_c2c.py:28 - assert // ARC4 prefix is valid // (𝕡) app#0 | result#0 arc4.abi_call[arc4.String]("echo(string)string", "test5", app_id=app) typed_abi_call/typed_c2c.py:28 - // virtual: load result#0 from l-stack (no copy) (𝕡) app#0 | result#0 result == "echo: test5" typed_abi_call/typed_c2c.py:29 - byte 0x000b6563686f3a207465737435 // (𝕡) app#0 | result#0,0x000b6563686f3a207465737435 "echo: test5" typed_abi_call/typed_c2c.py:29 - == // (𝕡) app#0 | {==} result == "echo: test5" typed_abi_call/typed_c2c.py:29 - // virtual: store tmp%19#0 to l-stack (no copy) (𝕡) app#0 | tmp%19#0 result == "echo: test5" typed_abi_call/typed_c2c.py:29 - // virtual: load tmp%19#0 from l-stack (no copy) (𝕡) app#0 | tmp%19#0 assert result == "echo: test5" typed_abi_call/typed_c2c.py:29 - assert // (𝕡) app#0 | assert result == "echo: test5" typed_abi_call/typed_c2c.py:29 - retsub // + itxn_begin // (𝕡) app#0 | arc4.abi_call(Logger.echo, arc4.String("test1"), app_id=app) typed_abi_call/typed_c2c.py:20 + frame_dig -1 // load app#0 from parameters (𝕡) app#0 | app#0 + itxn_field ApplicationID // (𝕡) app#0 | + method "echo(string)string" // (𝕡) app#0 | method<"echo(string)string"> arc4.abi_call(Logger.echo, arc4.String("test1"), app_id=app) typed_abi_call/typed_c2c.py:20 + itxn_field ApplicationArgs // (𝕡) app#0 | + byte 0x00057465737431 // (𝕡) app#0 | 0x00057465737431 arc4.String("test1") typed_abi_call/typed_c2c.py:20 + itxn_field ApplicationArgs // (𝕡) app#0 | + int appl // (𝕡) app#0 | appl arc4.abi_call(Logger.echo, arc4.String("test1"), app_id=app) typed_abi_call/typed_c2c.py:20 + itxn_field TypeEnum // (𝕡) app#0 | + int 0 // (𝕡) app#0 | 0 arc4.abi_call(Logger.echo, arc4.String("test1"), app_id=app) typed_abi_call/typed_c2c.py:20 + itxn_field Fee // (𝕡) app#0 | + itxn_submit // (𝕡) app#0 | arc4.abi_call(Logger.echo, arc4.String("test1"), app_id=app) typed_abi_call/typed_c2c.py:20 + itxn LastLog // (𝕡) app#0 | {itxn} arc4.abi_call(Logger.echo, arc4.String("test1"), app_id=app) typed_abi_call/typed_c2c.py:20 + // virtual: store awst_tmp%0#0 to l-stack (no copy) (𝕡) app#0 | awst_tmp%0#0 arc4.abi_call(Logger.echo, arc4.String("test1"), app_id=app) typed_abi_call/typed_c2c.py:20 + dup // load awst_tmp%0#0 from l-stack (copy) (𝕡) app#0 | awst_tmp%0#0,awst_tmp%0#0 arc4.abi_call(Logger.echo, arc4.String("test1"), app_id=app) typed_abi_call/typed_c2c.py:20 + extract 4 0 // (𝕡) app#0 | awst_tmp%0#0,{extract} arc4.abi_call(Logger.echo, arc4.String("test1"), app_id=app) typed_abi_call/typed_c2c.py:20 + cover 1 // store result#0 to l-stack (no copy) (𝕡) app#0 | result#0,awst_tmp%0#0 arc4.abi_call(Logger.echo, arc4.String("test1"), app_id=app) typed_abi_call/typed_c2c.py:20 + // virtual: load awst_tmp%0#0 from l-stack (no copy) (𝕡) app#0 | result#0,awst_tmp%0#0 arc4.abi_call(Logger.echo, arc4.String("test1"), app_id=app) typed_abi_call/typed_c2c.py:20 + extract 0 4 // (𝕡) app#0 | result#0,{extract} arc4.abi_call(Logger.echo, arc4.String("test1"), app_id=app) typed_abi_call/typed_c2c.py:20 + // virtual: store tmp%1#0 to l-stack (no copy) (𝕡) app#0 | result#0,tmp%1#0 arc4.abi_call(Logger.echo, arc4.String("test1"), app_id=app) typed_abi_call/typed_c2c.py:20 + // virtual: load tmp%1#0 from l-stack (no copy) (𝕡) app#0 | result#0,tmp%1#0 arc4.abi_call(Logger.echo, arc4.String("test1"), app_id=app) typed_abi_call/typed_c2c.py:20 + byte 0x151f7c75 // (𝕡) app#0 | result#0,tmp%1#0,0x151f7c75 arc4.abi_call(Logger.echo, arc4.String("test1"), app_id=app) typed_abi_call/typed_c2c.py:20 + == // (𝕡) app#0 | result#0,{==} arc4.abi_call(Logger.echo, arc4.String("test1"), app_id=app) typed_abi_call/typed_c2c.py:20 + // virtual: store tmp%2#0 to l-stack (no copy) (𝕡) app#0 | result#0,tmp%2#0 arc4.abi_call(Logger.echo, arc4.String("test1"), app_id=app) typed_abi_call/typed_c2c.py:20 + // virtual: load tmp%2#0 from l-stack (no copy) (𝕡) app#0 | result#0,tmp%2#0 arc4.abi_call(Logger.echo, arc4.String("test1"), app_id=app) typed_abi_call/typed_c2c.py:20 + assert // ARC4 prefix is valid // (𝕡) app#0 | result#0 arc4.abi_call(Logger.echo, arc4.String("test1"), app_id=app) typed_abi_call/typed_c2c.py:20 + // virtual: load result#0 from l-stack (no copy) (𝕡) app#0 | result#0 result == "echo: test1" typed_abi_call/typed_c2c.py:21 + byte 0x000b6563686f3a207465737431 // (𝕡) app#0 | result#0,0x000b6563686f3a207465737431 "echo: test1" typed_abi_call/typed_c2c.py:21 + == // (𝕡) app#0 | {==} result == "echo: test1" typed_abi_call/typed_c2c.py:21 + // virtual: store tmp%3#0 to l-stack (no copy) (𝕡) app#0 | tmp%3#0 result == "echo: test1" typed_abi_call/typed_c2c.py:21 + // virtual: load tmp%3#0 from l-stack (no copy) (𝕡) app#0 | tmp%3#0 assert result == "echo: test1" typed_abi_call/typed_c2c.py:21 + assert // (𝕡) app#0 | assert result == "echo: test1" typed_abi_call/typed_c2c.py:21 + itxn_begin // (𝕡) app#0 | arc4.abi_call(LoggerClient.echo, "test2", app_id=app) typed_abi_call/typed_c2c.py:22 + frame_dig -1 // load app#0 from parameters (𝕡) app#0 | app#0 + itxn_field ApplicationID // (𝕡) app#0 | + method "echo(string)string" // (𝕡) app#0 | method<"echo(string)string"> arc4.abi_call(LoggerClient.echo, "test2", app_id=app) typed_abi_call/typed_c2c.py:22 + itxn_field ApplicationArgs // (𝕡) app#0 | + byte 0x00057465737432 // (𝕡) app#0 | 0x00057465737432 "test2" typed_abi_call/typed_c2c.py:22 + itxn_field ApplicationArgs // (𝕡) app#0 | + int appl // (𝕡) app#0 | appl arc4.abi_call(LoggerClient.echo, "test2", app_id=app) typed_abi_call/typed_c2c.py:22 + itxn_field TypeEnum // (𝕡) app#0 | + int 0 // (𝕡) app#0 | 0 arc4.abi_call(LoggerClient.echo, "test2", app_id=app) typed_abi_call/typed_c2c.py:22 + itxn_field Fee // (𝕡) app#0 | + itxn_submit // (𝕡) app#0 | arc4.abi_call(LoggerClient.echo, "test2", app_id=app) typed_abi_call/typed_c2c.py:22 + itxn LastLog // (𝕡) app#0 | {itxn} arc4.abi_call(LoggerClient.echo, "test2", app_id=app) typed_abi_call/typed_c2c.py:22 + // virtual: store awst_tmp%1#0 to l-stack (no copy) (𝕡) app#0 | awst_tmp%1#0 arc4.abi_call(LoggerClient.echo, "test2", app_id=app) typed_abi_call/typed_c2c.py:22 + dup // load awst_tmp%1#0 from l-stack (copy) (𝕡) app#0 | awst_tmp%1#0,awst_tmp%1#0 arc4.abi_call(LoggerClient.echo, "test2", app_id=app) typed_abi_call/typed_c2c.py:22 + extract 4 0 // (𝕡) app#0 | awst_tmp%1#0,{extract} arc4.abi_call(LoggerClient.echo, "test2", app_id=app) typed_abi_call/typed_c2c.py:22 + cover 1 // store result#0 to l-stack (no copy) (𝕡) app#0 | result#0,awst_tmp%1#0 arc4.abi_call(LoggerClient.echo, "test2", app_id=app) typed_abi_call/typed_c2c.py:22 + // virtual: load awst_tmp%1#0 from l-stack (no copy) (𝕡) app#0 | result#0,awst_tmp%1#0 arc4.abi_call(LoggerClient.echo, "test2", app_id=app) typed_abi_call/typed_c2c.py:22 + extract 0 4 // (𝕡) app#0 | result#0,{extract} arc4.abi_call(LoggerClient.echo, "test2", app_id=app) typed_abi_call/typed_c2c.py:22 + // virtual: store tmp%5#0 to l-stack (no copy) (𝕡) app#0 | result#0,tmp%5#0 arc4.abi_call(LoggerClient.echo, "test2", app_id=app) typed_abi_call/typed_c2c.py:22 + // virtual: load tmp%5#0 from l-stack (no copy) (𝕡) app#0 | result#0,tmp%5#0 arc4.abi_call(LoggerClient.echo, "test2", app_id=app) typed_abi_call/typed_c2c.py:22 + byte 0x151f7c75 // (𝕡) app#0 | result#0,tmp%5#0,0x151f7c75 arc4.abi_call(LoggerClient.echo, "test2", app_id=app) typed_abi_call/typed_c2c.py:22 + == // (𝕡) app#0 | result#0,{==} arc4.abi_call(LoggerClient.echo, "test2", app_id=app) typed_abi_call/typed_c2c.py:22 + // virtual: store tmp%6#0 to l-stack (no copy) (𝕡) app#0 | result#0,tmp%6#0 arc4.abi_call(LoggerClient.echo, "test2", app_id=app) typed_abi_call/typed_c2c.py:22 + // virtual: load tmp%6#0 from l-stack (no copy) (𝕡) app#0 | result#0,tmp%6#0 arc4.abi_call(LoggerClient.echo, "test2", app_id=app) typed_abi_call/typed_c2c.py:22 + assert // ARC4 prefix is valid // (𝕡) app#0 | result#0 arc4.abi_call(LoggerClient.echo, "test2", app_id=app) typed_abi_call/typed_c2c.py:22 + // virtual: load result#0 from l-stack (no copy) (𝕡) app#0 | result#0 result == "echo: test2" typed_abi_call/typed_c2c.py:23 + byte 0x000b6563686f3a207465737432 // (𝕡) app#0 | result#0,0x000b6563686f3a207465737432 "echo: test2" typed_abi_call/typed_c2c.py:23 + == // (𝕡) app#0 | {==} result == "echo: test2" typed_abi_call/typed_c2c.py:23 + // virtual: store tmp%7#0 to l-stack (no copy) (𝕡) app#0 | tmp%7#0 result == "echo: test2" typed_abi_call/typed_c2c.py:23 + // virtual: load tmp%7#0 from l-stack (no copy) (𝕡) app#0 | tmp%7#0 assert result == "echo: test2" typed_abi_call/typed_c2c.py:23 + assert // (𝕡) app#0 | assert result == "echo: test2" typed_abi_call/typed_c2c.py:23 + itxn_begin // (𝕡) app#0 | arc4.abi_call[arc4.String]("echo", "test3", app_id=app) typed_abi_call/typed_c2c.py:24 + frame_dig -1 // load app#0 from parameters (𝕡) app#0 | app#0 + itxn_field ApplicationID // (𝕡) app#0 | + method "echo(string)string" // (𝕡) app#0 | method<"echo(string)string"> arc4.abi_call[arc4.String]("echo", "test3", app_id=app) typed_abi_call/typed_c2c.py:24 + itxn_field ApplicationArgs // (𝕡) app#0 | + byte 0x00057465737433 // (𝕡) app#0 | 0x00057465737433 "test3" typed_abi_call/typed_c2c.py:24 + itxn_field ApplicationArgs // (𝕡) app#0 | + int appl // (𝕡) app#0 | appl arc4.abi_call[arc4.String]("echo", "test3", app_id=app) typed_abi_call/typed_c2c.py:24 + itxn_field TypeEnum // (𝕡) app#0 | + int 0 // (𝕡) app#0 | 0 arc4.abi_call[arc4.String]("echo", "test3", app_id=app) typed_abi_call/typed_c2c.py:24 + itxn_field Fee // (𝕡) app#0 | + itxn_submit // (𝕡) app#0 | arc4.abi_call[arc4.String]("echo", "test3", app_id=app) typed_abi_call/typed_c2c.py:24 + itxn LastLog // (𝕡) app#0 | {itxn} arc4.abi_call[arc4.String]("echo", "test3", app_id=app) typed_abi_call/typed_c2c.py:24 + // virtual: store awst_tmp%2#0 to l-stack (no copy) (𝕡) app#0 | awst_tmp%2#0 arc4.abi_call[arc4.String]("echo", "test3", app_id=app) typed_abi_call/typed_c2c.py:24 + dup // load awst_tmp%2#0 from l-stack (copy) (𝕡) app#0 | awst_tmp%2#0,awst_tmp%2#0 arc4.abi_call[arc4.String]("echo", "test3", app_id=app) typed_abi_call/typed_c2c.py:24 + extract 4 0 // (𝕡) app#0 | awst_tmp%2#0,{extract} arc4.abi_call[arc4.String]("echo", "test3", app_id=app) typed_abi_call/typed_c2c.py:24 + cover 1 // store result#0 to l-stack (no copy) (𝕡) app#0 | result#0,awst_tmp%2#0 arc4.abi_call[arc4.String]("echo", "test3", app_id=app) typed_abi_call/typed_c2c.py:24 + // virtual: load awst_tmp%2#0 from l-stack (no copy) (𝕡) app#0 | result#0,awst_tmp%2#0 arc4.abi_call[arc4.String]("echo", "test3", app_id=app) typed_abi_call/typed_c2c.py:24 + extract 0 4 // (𝕡) app#0 | result#0,{extract} arc4.abi_call[arc4.String]("echo", "test3", app_id=app) typed_abi_call/typed_c2c.py:24 + // virtual: store tmp%9#0 to l-stack (no copy) (𝕡) app#0 | result#0,tmp%9#0 arc4.abi_call[arc4.String]("echo", "test3", app_id=app) typed_abi_call/typed_c2c.py:24 + // virtual: load tmp%9#0 from l-stack (no copy) (𝕡) app#0 | result#0,tmp%9#0 arc4.abi_call[arc4.String]("echo", "test3", app_id=app) typed_abi_call/typed_c2c.py:24 + byte 0x151f7c75 // (𝕡) app#0 | result#0,tmp%9#0,0x151f7c75 arc4.abi_call[arc4.String]("echo", "test3", app_id=app) typed_abi_call/typed_c2c.py:24 + == // (𝕡) app#0 | result#0,{==} arc4.abi_call[arc4.String]("echo", "test3", app_id=app) typed_abi_call/typed_c2c.py:24 + // virtual: store tmp%10#0 to l-stack (no copy) (𝕡) app#0 | result#0,tmp%10#0 arc4.abi_call[arc4.String]("echo", "test3", app_id=app) typed_abi_call/typed_c2c.py:24 + // virtual: load tmp%10#0 from l-stack (no copy) (𝕡) app#0 | result#0,tmp%10#0 arc4.abi_call[arc4.String]("echo", "test3", app_id=app) typed_abi_call/typed_c2c.py:24 + assert // ARC4 prefix is valid // (𝕡) app#0 | result#0 arc4.abi_call[arc4.String]("echo", "test3", app_id=app) typed_abi_call/typed_c2c.py:24 + // virtual: load result#0 from l-stack (no copy) (𝕡) app#0 | result#0 result == "echo: test3" typed_abi_call/typed_c2c.py:25 + byte 0x000b6563686f3a207465737433 // (𝕡) app#0 | result#0,0x000b6563686f3a207465737433 "echo: test3" typed_abi_call/typed_c2c.py:25 + == // (𝕡) app#0 | {==} result == "echo: test3" typed_abi_call/typed_c2c.py:25 + // virtual: store tmp%11#0 to l-stack (no copy) (𝕡) app#0 | tmp%11#0 result == "echo: test3" typed_abi_call/typed_c2c.py:25 + // virtual: load tmp%11#0 from l-stack (no copy) (𝕡) app#0 | tmp%11#0 assert result == "echo: test3" typed_abi_call/typed_c2c.py:25 + assert // (𝕡) app#0 | assert result == "echo: test3" typed_abi_call/typed_c2c.py:25 + itxn_begin // (𝕡) app#0 | arc4.abi_call[arc4.String]("echo(string)", "test4", app_id=app) typed_abi_call/typed_c2c.py:26 + frame_dig -1 // load app#0 from parameters (𝕡) app#0 | app#0 + itxn_field ApplicationID // (𝕡) app#0 | + method "echo(string)string" // (𝕡) app#0 | method<"echo(string)string"> arc4.abi_call[arc4.String]("echo(string)", "test4", app_id=app) typed_abi_call/typed_c2c.py:26 + itxn_field ApplicationArgs // (𝕡) app#0 | + byte 0x00057465737434 // (𝕡) app#0 | 0x00057465737434 "test4" typed_abi_call/typed_c2c.py:26 + itxn_field ApplicationArgs // (𝕡) app#0 | + int appl // (𝕡) app#0 | appl arc4.abi_call[arc4.String]("echo(string)", "test4", app_id=app) typed_abi_call/typed_c2c.py:26 + itxn_field TypeEnum // (𝕡) app#0 | + int 0 // (𝕡) app#0 | 0 arc4.abi_call[arc4.String]("echo(string)", "test4", app_id=app) typed_abi_call/typed_c2c.py:26 + itxn_field Fee // (𝕡) app#0 | + itxn_submit // (𝕡) app#0 | arc4.abi_call[arc4.String]("echo(string)", "test4", app_id=app) typed_abi_call/typed_c2c.py:26 + itxn LastLog // (𝕡) app#0 | {itxn} arc4.abi_call[arc4.String]("echo(string)", "test4", app_id=app) typed_abi_call/typed_c2c.py:26 + // virtual: store awst_tmp%3#0 to l-stack (no copy) (𝕡) app#0 | awst_tmp%3#0 arc4.abi_call[arc4.String]("echo(string)", "test4", app_id=app) typed_abi_call/typed_c2c.py:26 + dup // load awst_tmp%3#0 from l-stack (copy) (𝕡) app#0 | awst_tmp%3#0,awst_tmp%3#0 arc4.abi_call[arc4.String]("echo(string)", "test4", app_id=app) typed_abi_call/typed_c2c.py:26 + extract 4 0 // (𝕡) app#0 | awst_tmp%3#0,{extract} arc4.abi_call[arc4.String]("echo(string)", "test4", app_id=app) typed_abi_call/typed_c2c.py:26 + cover 1 // store result#0 to l-stack (no copy) (𝕡) app#0 | result#0,awst_tmp%3#0 arc4.abi_call[arc4.String]("echo(string)", "test4", app_id=app) typed_abi_call/typed_c2c.py:26 + // virtual: load awst_tmp%3#0 from l-stack (no copy) (𝕡) app#0 | result#0,awst_tmp%3#0 arc4.abi_call[arc4.String]("echo(string)", "test4", app_id=app) typed_abi_call/typed_c2c.py:26 + extract 0 4 // (𝕡) app#0 | result#0,{extract} arc4.abi_call[arc4.String]("echo(string)", "test4", app_id=app) typed_abi_call/typed_c2c.py:26 + // virtual: store tmp%13#0 to l-stack (no copy) (𝕡) app#0 | result#0,tmp%13#0 arc4.abi_call[arc4.String]("echo(string)", "test4", app_id=app) typed_abi_call/typed_c2c.py:26 + // virtual: load tmp%13#0 from l-stack (no copy) (𝕡) app#0 | result#0,tmp%13#0 arc4.abi_call[arc4.String]("echo(string)", "test4", app_id=app) typed_abi_call/typed_c2c.py:26 + byte 0x151f7c75 // (𝕡) app#0 | result#0,tmp%13#0,0x151f7c75 arc4.abi_call[arc4.String]("echo(string)", "test4", app_id=app) typed_abi_call/typed_c2c.py:26 + == // (𝕡) app#0 | result#0,{==} arc4.abi_call[arc4.String]("echo(string)", "test4", app_id=app) typed_abi_call/typed_c2c.py:26 + // virtual: store tmp%14#0 to l-stack (no copy) (𝕡) app#0 | result#0,tmp%14#0 arc4.abi_call[arc4.String]("echo(string)", "test4", app_id=app) typed_abi_call/typed_c2c.py:26 + // virtual: load tmp%14#0 from l-stack (no copy) (𝕡) app#0 | result#0,tmp%14#0 arc4.abi_call[arc4.String]("echo(string)", "test4", app_id=app) typed_abi_call/typed_c2c.py:26 + assert // ARC4 prefix is valid // (𝕡) app#0 | result#0 arc4.abi_call[arc4.String]("echo(string)", "test4", app_id=app) typed_abi_call/typed_c2c.py:26 + // virtual: load result#0 from l-stack (no copy) (𝕡) app#0 | result#0 result == "echo: test4" typed_abi_call/typed_c2c.py:27 + byte 0x000b6563686f3a207465737434 // (𝕡) app#0 | result#0,0x000b6563686f3a207465737434 "echo: test4" typed_abi_call/typed_c2c.py:27 + == // (𝕡) app#0 | {==} result == "echo: test4" typed_abi_call/typed_c2c.py:27 + // virtual: store tmp%15#0 to l-stack (no copy) (𝕡) app#0 | tmp%15#0 result == "echo: test4" typed_abi_call/typed_c2c.py:27 + // virtual: load tmp%15#0 from l-stack (no copy) (𝕡) app#0 | tmp%15#0 assert result == "echo: test4" typed_abi_call/typed_c2c.py:27 + assert // (𝕡) app#0 | assert result == "echo: test4" typed_abi_call/typed_c2c.py:27 + itxn_begin // (𝕡) app#0 | arc4.abi_call[arc4.String]("echo(string)string", "test5", app_id=app) typed_abi_call/typed_c2c.py:28 + frame_dig -1 // load app#0 from parameters (𝕡) app#0 | app#0 + itxn_field ApplicationID // (𝕡) app#0 | + method "echo(string)string" // (𝕡) app#0 | method<"echo(string)string"> arc4.abi_call[arc4.String]("echo(string)string", "test5", app_id=app) typed_abi_call/typed_c2c.py:28 + itxn_field ApplicationArgs // (𝕡) app#0 | + byte 0x00057465737435 // (𝕡) app#0 | 0x00057465737435 "test5" typed_abi_call/typed_c2c.py:28 + itxn_field ApplicationArgs // (𝕡) app#0 | + int appl // (𝕡) app#0 | appl arc4.abi_call[arc4.String]("echo(string)string", "test5", app_id=app) typed_abi_call/typed_c2c.py:28 + itxn_field TypeEnum // (𝕡) app#0 | + int 0 // (𝕡) app#0 | 0 arc4.abi_call[arc4.String]("echo(string)string", "test5", app_id=app) typed_abi_call/typed_c2c.py:28 + itxn_field Fee // (𝕡) app#0 | + itxn_submit // (𝕡) app#0 | arc4.abi_call[arc4.String]("echo(string)string", "test5", app_id=app) typed_abi_call/typed_c2c.py:28 + itxn LastLog // (𝕡) app#0 | {itxn} arc4.abi_call[arc4.String]("echo(string)string", "test5", app_id=app) typed_abi_call/typed_c2c.py:28 + // virtual: store awst_tmp%4#0 to l-stack (no copy) (𝕡) app#0 | awst_tmp%4#0 arc4.abi_call[arc4.String]("echo(string)string", "test5", app_id=app) typed_abi_call/typed_c2c.py:28 + dup // load awst_tmp%4#0 from l-stack (copy) (𝕡) app#0 | awst_tmp%4#0,awst_tmp%4#0 arc4.abi_call[arc4.String]("echo(string)string", "test5", app_id=app) typed_abi_call/typed_c2c.py:28 + extract 4 0 // (𝕡) app#0 | awst_tmp%4#0,{extract} arc4.abi_call[arc4.String]("echo(string)string", "test5", app_id=app) typed_abi_call/typed_c2c.py:28 + cover 1 // store result#0 to l-stack (no copy) (𝕡) app#0 | result#0,awst_tmp%4#0 arc4.abi_call[arc4.String]("echo(string)string", "test5", app_id=app) typed_abi_call/typed_c2c.py:28 + // virtual: load awst_tmp%4#0 from l-stack (no copy) (𝕡) app#0 | result#0,awst_tmp%4#0 arc4.abi_call[arc4.String]("echo(string)string", "test5", app_id=app) typed_abi_call/typed_c2c.py:28 + extract 0 4 // (𝕡) app#0 | result#0,{extract} arc4.abi_call[arc4.String]("echo(string)string", "test5", app_id=app) typed_abi_call/typed_c2c.py:28 + // virtual: store tmp%17#0 to l-stack (no copy) (𝕡) app#0 | result#0,tmp%17#0 arc4.abi_call[arc4.String]("echo(string)string", "test5", app_id=app) typed_abi_call/typed_c2c.py:28 + // virtual: load tmp%17#0 from l-stack (no copy) (𝕡) app#0 | result#0,tmp%17#0 arc4.abi_call[arc4.String]("echo(string)string", "test5", app_id=app) typed_abi_call/typed_c2c.py:28 + byte 0x151f7c75 // (𝕡) app#0 | result#0,tmp%17#0,0x151f7c75 arc4.abi_call[arc4.String]("echo(string)string", "test5", app_id=app) typed_abi_call/typed_c2c.py:28 + == // (𝕡) app#0 | result#0,{==} arc4.abi_call[arc4.String]("echo(string)string", "test5", app_id=app) typed_abi_call/typed_c2c.py:28 + // virtual: store tmp%18#0 to l-stack (no copy) (𝕡) app#0 | result#0,tmp%18#0 arc4.abi_call[arc4.String]("echo(string)string", "test5", app_id=app) typed_abi_call/typed_c2c.py:28 + // virtual: load tmp%18#0 from l-stack (no copy) (𝕡) app#0 | result#0,tmp%18#0 arc4.abi_call[arc4.String]("echo(string)string", "test5", app_id=app) typed_abi_call/typed_c2c.py:28 + assert // ARC4 prefix is valid // (𝕡) app#0 | result#0 arc4.abi_call[arc4.String]("echo(string)string", "test5", app_id=app) typed_abi_call/typed_c2c.py:28 + // virtual: load result#0 from l-stack (no copy) (𝕡) app#0 | result#0 result == "echo: test5" typed_abi_call/typed_c2c.py:29 + byte 0x000b6563686f3a207465737435 // (𝕡) app#0 | result#0,0x000b6563686f3a207465737435 "echo: test5" typed_abi_call/typed_c2c.py:29 + == // (𝕡) app#0 | {==} result == "echo: test5" typed_abi_call/typed_c2c.py:29 + // virtual: store tmp%19#0 to l-stack (no copy) (𝕡) app#0 | tmp%19#0 result == "echo: test5" typed_abi_call/typed_c2c.py:29 + // virtual: load tmp%19#0 from l-stack (no copy) (𝕡) app#0 | tmp%19#0 assert result == "echo: test5" typed_abi_call/typed_c2c.py:29 + assert // (𝕡) app#0 | assert result == "echo: test5" typed_abi_call/typed_c2c.py:29 + retsub // // test_cases.typed_abi_call.typed_c2c.Greeter.test_method_overload(app: uint64) -> void: test_method_overload: - proto 1 0 // (𝕡) app#0 | @arc4.abimethod()\ndef test_method_overload(self, app: Application) -> None: typed_abi_call/typed_c2c.py:31-32 + proto 1 0 // (𝕡) app#0 | @arc4.abimethod()\ndef test_method_overload(self, app: Application) -> None: typed_abi_call/typed_c2c.py:31-32 test_method_overload_block@0: - itxn_begin // (𝕡) app#0 | arc4.abi_call[arc4.String]("echo(string)string", "typed + ignore", app_id=app) typed_abi_call/typed_c2c.py:33 - frame_dig -1 // load app#0 from parameters (𝕡) app#0 | app#0 - itxn_field ApplicationID // (𝕡) app#0 | - method "echo(string)string" // (𝕡) app#0 | method<"echo(string)string"> arc4.abi_call[arc4.String]("echo(string)string", "typed + ignore", app_id=app) typed_abi_call/typed_c2c.py:33 - itxn_field ApplicationArgs // (𝕡) app#0 | - byte 0x000e7479706564202b2069676e6f7265 // (𝕡) app#0 | 0x000e7479706564202b2069676e6f7265 "typed + ignore" typed_abi_call/typed_c2c.py:33 - itxn_field ApplicationArgs // (𝕡) app#0 | - int appl // (𝕡) app#0 | appl arc4.abi_call[arc4.String]("echo(string)string", "typed + ignore", app_id=app) typed_abi_call/typed_c2c.py:33 - itxn_field TypeEnum // (𝕡) app#0 | - int 0 // (𝕡) app#0 | 0 arc4.abi_call[arc4.String]("echo(string)string", "typed + ignore", app_id=app) typed_abi_call/typed_c2c.py:33 - itxn_field Fee // (𝕡) app#0 | - itxn_submit // (𝕡) app#0 | arc4.abi_call[arc4.String]("echo(string)string", "typed + ignore", app_id=app) typed_abi_call/typed_c2c.py:33 - itxn LastLog // (𝕡) app#0 | {itxn} arc4.abi_call[arc4.String]("echo(string)string", "typed + ignore", app_id=app) typed_abi_call/typed_c2c.py:33 - // virtual: store awst_tmp%0#0 to l-stack (no copy) (𝕡) app#0 | awst_tmp%0#0 arc4.abi_call[arc4.String]("echo(string)string", "typed + ignore", app_id=app) typed_abi_call/typed_c2c.py:33 - // virtual: load awst_tmp%0#0 from l-stack (no copy) (𝕡) app#0 | awst_tmp%0#0 arc4.abi_call[arc4.String]("echo(string)string", "typed + ignore", app_id=app) typed_abi_call/typed_c2c.py:33 - extract 0 4 // (𝕡) app#0 | {extract} arc4.abi_call[arc4.String]("echo(string)string", "typed + ignore", app_id=app) typed_abi_call/typed_c2c.py:33 - // virtual: store tmp%1#0 to l-stack (no copy) (𝕡) app#0 | tmp%1#0 arc4.abi_call[arc4.String]("echo(string)string", "typed + ignore", app_id=app) typed_abi_call/typed_c2c.py:33 - // virtual: load tmp%1#0 from l-stack (no copy) (𝕡) app#0 | tmp%1#0 arc4.abi_call[arc4.String]("echo(string)string", "typed + ignore", app_id=app) typed_abi_call/typed_c2c.py:33 - byte 0x151f7c75 // (𝕡) app#0 | tmp%1#0,0x151f7c75 arc4.abi_call[arc4.String]("echo(string)string", "typed + ignore", app_id=app) typed_abi_call/typed_c2c.py:33 - == // (𝕡) app#0 | {==} arc4.abi_call[arc4.String]("echo(string)string", "typed + ignore", app_id=app) typed_abi_call/typed_c2c.py:33 - // virtual: store tmp%2#0 to l-stack (no copy) (𝕡) app#0 | tmp%2#0 arc4.abi_call[arc4.String]("echo(string)string", "typed + ignore", app_id=app) typed_abi_call/typed_c2c.py:33 - // virtual: load tmp%2#0 from l-stack (no copy) (𝕡) app#0 | tmp%2#0 arc4.abi_call[arc4.String]("echo(string)string", "typed + ignore", app_id=app) typed_abi_call/typed_c2c.py:33 - assert // ARC4 prefix is valid // (𝕡) app#0 | arc4.abi_call[arc4.String]("echo(string)string", "typed + ignore", app_id=app) typed_abi_call/typed_c2c.py:33 - itxn LastLog // (𝕡) app#0 | {itxn} op.ITxn.last_log() typed_abi_call/typed_c2c.py:34 - // virtual: store awst_tmp%1#0 to l-stack (no copy) (𝕡) app#0 | awst_tmp%1#0 op.ITxn.last_log() typed_abi_call/typed_c2c.py:34 - dup // load awst_tmp%1#0 from l-stack (copy) (𝕡) app#0 | awst_tmp%1#0,awst_tmp%1#0 arc4.String.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:34 - extract 4 0 // (𝕡) app#0 | awst_tmp%1#0,{extract} arc4.String.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:34 - cover 1 // store tmp%3#0 to l-stack (no copy) (𝕡) app#0 | tmp%3#0,awst_tmp%1#0 arc4.String.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:34 - // virtual: load awst_tmp%1#0 from l-stack (no copy) (𝕡) app#0 | tmp%3#0,awst_tmp%1#0 arc4.String.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:34 - extract 0 4 // (𝕡) app#0 | tmp%3#0,{extract} arc4.String.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:34 - // virtual: store tmp%4#0 to l-stack (no copy) (𝕡) app#0 | tmp%3#0,tmp%4#0 arc4.String.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:34 - // virtual: load tmp%4#0 from l-stack (no copy) (𝕡) app#0 | tmp%3#0,tmp%4#0 arc4.String.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:34 - byte 0x151f7c75 // (𝕡) app#0 | tmp%3#0,tmp%4#0,0x151f7c75 arc4.String.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:34 - == // (𝕡) app#0 | tmp%3#0,{==} arc4.String.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:34 - // virtual: store tmp%5#0 to l-stack (no copy) (𝕡) app#0 | tmp%3#0,tmp%5#0 arc4.String.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:34 - // virtual: load tmp%5#0 from l-stack (no copy) (𝕡) app#0 | tmp%3#0,tmp%5#0 arc4.String.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:34 - assert // ARC4 prefix is valid // (𝕡) app#0 | tmp%3#0 arc4.String.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:34 - // virtual: load tmp%3#0 from l-stack (no copy) (𝕡) app#0 | tmp%3#0 arc4.String.from_log(op.ITxn.last_log()) == "echo: typed + ignore" typed_abi_call/typed_c2c.py:34 - byte 0x00146563686f3a207479706564202b2069676e6f7265 // (𝕡) app#0 | tmp%3#0,0x00146563686f3a207479706564202b2069676e6f7265 "echo: typed + ignore" typed_abi_call/typed_c2c.py:34 - == // (𝕡) app#0 | {==} arc4.String.from_log(op.ITxn.last_log()) == "echo: typed + ignore" typed_abi_call/typed_c2c.py:34 - // virtual: store tmp%6#0 to l-stack (no copy) (𝕡) app#0 | tmp%6#0 arc4.String.from_log(op.ITxn.last_log()) == "echo: typed + ignore" typed_abi_call/typed_c2c.py:34 - // virtual: load tmp%6#0 from l-stack (no copy) (𝕡) app#0 | tmp%6#0 assert arc4.String.from_log(op.ITxn.last_log()) == "echo: typed + ignore" typed_abi_call/typed_c2c.py:34 - assert // (𝕡) app#0 | assert arc4.String.from_log(op.ITxn.last_log()) == "echo: typed + ignore" typed_abi_call/typed_c2c.py:34 - itxn_begin // (𝕡) app#0 | arc4.abi_call("echo(string)string", "untyped + ignore", app_id=app) typed_abi_call/typed_c2c.py:36 - frame_dig -1 // load app#0 from parameters (𝕡) app#0 | app#0 - itxn_field ApplicationID // (𝕡) app#0 | - method "echo(string)string" // (𝕡) app#0 | method<"echo(string)string"> arc4.abi_call("echo(string)string", "untyped + ignore", app_id=app) typed_abi_call/typed_c2c.py:36 - itxn_field ApplicationArgs // (𝕡) app#0 | - byte 0x0010756e7479706564202b2069676e6f7265 // (𝕡) app#0 | 0x0010756e7479706564202b2069676e6f7265 "untyped + ignore" typed_abi_call/typed_c2c.py:36 - itxn_field ApplicationArgs // (𝕡) app#0 | - int appl // (𝕡) app#0 | appl arc4.abi_call("echo(string)string", "untyped + ignore", app_id=app) typed_abi_call/typed_c2c.py:36 - itxn_field TypeEnum // (𝕡) app#0 | - int 0 // (𝕡) app#0 | 0 arc4.abi_call("echo(string)string", "untyped + ignore", app_id=app) typed_abi_call/typed_c2c.py:36 - itxn_field Fee // (𝕡) app#0 | - itxn_submit // (𝕡) app#0 | arc4.abi_call("echo(string)string", "untyped + ignore", app_id=app) typed_abi_call/typed_c2c.py:36 - itxn LastLog // (𝕡) app#0 | {itxn} op.ITxn.last_log() typed_abi_call/typed_c2c.py:37 - // virtual: store awst_tmp%2#0 to l-stack (no copy) (𝕡) app#0 | awst_tmp%2#0 op.ITxn.last_log() typed_abi_call/typed_c2c.py:37 - dup // load awst_tmp%2#0 from l-stack (copy) (𝕡) app#0 | awst_tmp%2#0,awst_tmp%2#0 arc4.String.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:37 - extract 4 0 // (𝕡) app#0 | awst_tmp%2#0,{extract} arc4.String.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:37 - cover 1 // store tmp%7#0 to l-stack (no copy) (𝕡) app#0 | tmp%7#0,awst_tmp%2#0 arc4.String.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:37 - // virtual: load awst_tmp%2#0 from l-stack (no copy) (𝕡) app#0 | tmp%7#0,awst_tmp%2#0 arc4.String.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:37 - extract 0 4 // (𝕡) app#0 | tmp%7#0,{extract} arc4.String.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:37 - // virtual: store tmp%8#0 to l-stack (no copy) (𝕡) app#0 | tmp%7#0,tmp%8#0 arc4.String.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:37 - // virtual: load tmp%8#0 from l-stack (no copy) (𝕡) app#0 | tmp%7#0,tmp%8#0 arc4.String.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:37 - byte 0x151f7c75 // (𝕡) app#0 | tmp%7#0,tmp%8#0,0x151f7c75 arc4.String.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:37 - == // (𝕡) app#0 | tmp%7#0,{==} arc4.String.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:37 - // virtual: store tmp%9#0 to l-stack (no copy) (𝕡) app#0 | tmp%7#0,tmp%9#0 arc4.String.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:37 - // virtual: load tmp%9#0 from l-stack (no copy) (𝕡) app#0 | tmp%7#0,tmp%9#0 arc4.String.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:37 - assert // ARC4 prefix is valid // (𝕡) app#0 | tmp%7#0 arc4.String.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:37 - // virtual: load tmp%7#0 from l-stack (no copy) (𝕡) app#0 | tmp%7#0 arc4.String.from_log(op.ITxn.last_log()) == "echo: untyped + ignore" typed_abi_call/typed_c2c.py:37 - byte 0x00166563686f3a20756e7479706564202b2069676e6f7265 // (𝕡) app#0 | tmp%7#0,0x00166563686f3a20756e7479706564202b2069676e6f7265 "echo: untyped + ignore" typed_abi_call/typed_c2c.py:37 - == // (𝕡) app#0 | {==} arc4.String.from_log(op.ITxn.last_log()) == "echo: untyped + ignore" typed_abi_call/typed_c2c.py:37 - // virtual: store tmp%10#0 to l-stack (no copy) (𝕡) app#0 | tmp%10#0 arc4.String.from_log(op.ITxn.last_log()) == "echo: untyped + ignore" typed_abi_call/typed_c2c.py:37 - // virtual: load tmp%10#0 from l-stack (no copy) (𝕡) app#0 | tmp%10#0 assert arc4.String.from_log(op.ITxn.last_log()) == "echo: untyped + ignore" typed_abi_call/typed_c2c.py:37 - assert // (𝕡) app#0 | assert arc4.String.from_log(op.ITxn.last_log()) == "echo: untyped + ignore" typed_abi_call/typed_c2c.py:37 - itxn_begin // (𝕡) app#0 | arc4.abi_call[arc4.String]("echo(string)string", "tuple", app_id=app) typed_abi_call/typed_c2c.py:39 - frame_dig -1 // load app#0 from parameters (𝕡) app#0 | app#0 - itxn_field ApplicationID // (𝕡) app#0 | - method "echo(string)string" // (𝕡) app#0 | method<"echo(string)string"> arc4.abi_call[arc4.String]("echo(string)string", "tuple", app_id=app) typed_abi_call/typed_c2c.py:39 - itxn_field ApplicationArgs // (𝕡) app#0 | - byte 0x00057475706c65 // (𝕡) app#0 | 0x00057475706c65 "tuple" typed_abi_call/typed_c2c.py:39 - itxn_field ApplicationArgs // (𝕡) app#0 | - int appl // (𝕡) app#0 | appl arc4.abi_call[arc4.String]("echo(string)string", "tuple", app_id=app) typed_abi_call/typed_c2c.py:39 - itxn_field TypeEnum // (𝕡) app#0 | - int 0 // (𝕡) app#0 | 0 arc4.abi_call[arc4.String]("echo(string)string", "tuple", app_id=app) typed_abi_call/typed_c2c.py:39 - itxn_field Fee // (𝕡) app#0 | - itxn_submit // (𝕡) app#0 | arc4.abi_call[arc4.String]("echo(string)string", "tuple", app_id=app) typed_abi_call/typed_c2c.py:39 - itxn LastLog // (𝕡) app#0 | {itxn} arc4.abi_call[arc4.String]("echo(string)string", "tuple", app_id=app) typed_abi_call/typed_c2c.py:39 - // virtual: store awst_tmp%3#0 to l-stack (no copy) (𝕡) app#0 | awst_tmp%3#0 arc4.abi_call[arc4.String]("echo(string)string", "tuple", app_id=app) typed_abi_call/typed_c2c.py:39 - dup // load awst_tmp%3#0 from l-stack (copy) (𝕡) app#0 | awst_tmp%3#0,awst_tmp%3#0 arc4.abi_call[arc4.String]("echo(string)string", "tuple", app_id=app) typed_abi_call/typed_c2c.py:39 - extract 4 0 // (𝕡) app#0 | awst_tmp%3#0,{extract} arc4.abi_call[arc4.String]("echo(string)string", "tuple", app_id=app) typed_abi_call/typed_c2c.py:39 - cover 1 // store result.0#0 to l-stack (no copy) (𝕡) app#0 | result.0#0,awst_tmp%3#0 arc4.abi_call[arc4.String]("echo(string)string", "tuple", app_id=app) typed_abi_call/typed_c2c.py:39 - // virtual: load awst_tmp%3#0 from l-stack (no copy) (𝕡) app#0 | result.0#0,awst_tmp%3#0 arc4.abi_call[arc4.String]("echo(string)string", "tuple", app_id=app) typed_abi_call/typed_c2c.py:39 - extract 0 4 // (𝕡) app#0 | result.0#0,{extract} arc4.abi_call[arc4.String]("echo(string)string", "tuple", app_id=app) typed_abi_call/typed_c2c.py:39 - // virtual: store tmp%12#0 to l-stack (no copy) (𝕡) app#0 | result.0#0,tmp%12#0 arc4.abi_call[arc4.String]("echo(string)string", "tuple", app_id=app) typed_abi_call/typed_c2c.py:39 - // virtual: load tmp%12#0 from l-stack (no copy) (𝕡) app#0 | result.0#0,tmp%12#0 arc4.abi_call[arc4.String]("echo(string)string", "tuple", app_id=app) typed_abi_call/typed_c2c.py:39 - byte 0x151f7c75 // (𝕡) app#0 | result.0#0,tmp%12#0,0x151f7c75 arc4.abi_call[arc4.String]("echo(string)string", "tuple", app_id=app) typed_abi_call/typed_c2c.py:39 - == // (𝕡) app#0 | result.0#0,{==} arc4.abi_call[arc4.String]("echo(string)string", "tuple", app_id=app) typed_abi_call/typed_c2c.py:39 - // virtual: store tmp%13#0 to l-stack (no copy) (𝕡) app#0 | result.0#0,tmp%13#0 arc4.abi_call[arc4.String]("echo(string)string", "tuple", app_id=app) typed_abi_call/typed_c2c.py:39 - // virtual: load tmp%13#0 from l-stack (no copy) (𝕡) app#0 | result.0#0,tmp%13#0 arc4.abi_call[arc4.String]("echo(string)string", "tuple", app_id=app) typed_abi_call/typed_c2c.py:39 - assert // ARC4 prefix is valid // (𝕡) app#0 | result.0#0 arc4.abi_call[arc4.String]("echo(string)string", "tuple", app_id=app) typed_abi_call/typed_c2c.py:39 - itxn LastLog // (𝕡) app#0 | result.0#0,{itxn} arc4.abi_call[arc4.String]("echo(string)string", "tuple", app_id=app) typed_abi_call/typed_c2c.py:39 - // virtual: store result.1.LastLog#0 to l-stack (no copy) (𝕡) app#0 | result.0#0,result.1.LastLog#0 arc4.abi_call[arc4.String]("echo(string)string", "tuple", app_id=app) typed_abi_call/typed_c2c.py:39 - uncover 1 // load result.0#0 from l-stack (no copy) (𝕡) app#0 | result.1.LastLog#0,result.0#0 result[0] == "echo: tuple" typed_abi_call/typed_c2c.py:40 - byte 0x000b6563686f3a207475706c65 // (𝕡) app#0 | result.1.LastLog#0,result.0#0,0x000b6563686f3a207475706c65 "echo: tuple" typed_abi_call/typed_c2c.py:40 - == // (𝕡) app#0 | result.1.LastLog#0,{==} result[0] == "echo: tuple" typed_abi_call/typed_c2c.py:40 - // virtual: store tmp%14#0 to l-stack (no copy) (𝕡) app#0 | result.1.LastLog#0,tmp%14#0 result[0] == "echo: tuple" typed_abi_call/typed_c2c.py:40 - // virtual: load tmp%14#0 from l-stack (no copy) (𝕡) app#0 | result.1.LastLog#0,tmp%14#0 assert result[0] == "echo: tuple" typed_abi_call/typed_c2c.py:40 - assert // (𝕡) app#0 | result.1.LastLog#0 assert result[0] == "echo: tuple" typed_abi_call/typed_c2c.py:40 - dup // load result.1.LastLog#0 from l-stack (copy) (𝕡) app#0 | result.1.LastLog#0,result.1.LastLog#0 arc4.String.from_log(result[1].last_log) typed_abi_call/typed_c2c.py:41 - extract 4 0 // (𝕡) app#0 | result.1.LastLog#0,{extract} arc4.String.from_log(result[1].last_log) typed_abi_call/typed_c2c.py:41 - cover 1 // store tmp%15#0 to l-stack (no copy) (𝕡) app#0 | tmp%15#0,result.1.LastLog#0 arc4.String.from_log(result[1].last_log) typed_abi_call/typed_c2c.py:41 - // virtual: load result.1.LastLog#0 from l-stack (no copy) (𝕡) app#0 | tmp%15#0,result.1.LastLog#0 arc4.String.from_log(result[1].last_log) typed_abi_call/typed_c2c.py:41 - extract 0 4 // (𝕡) app#0 | tmp%15#0,{extract} arc4.String.from_log(result[1].last_log) typed_abi_call/typed_c2c.py:41 - // virtual: store tmp%16#0 to l-stack (no copy) (𝕡) app#0 | tmp%15#0,tmp%16#0 arc4.String.from_log(result[1].last_log) typed_abi_call/typed_c2c.py:41 - // virtual: load tmp%16#0 from l-stack (no copy) (𝕡) app#0 | tmp%15#0,tmp%16#0 arc4.String.from_log(result[1].last_log) typed_abi_call/typed_c2c.py:41 - byte 0x151f7c75 // (𝕡) app#0 | tmp%15#0,tmp%16#0,0x151f7c75 arc4.String.from_log(result[1].last_log) typed_abi_call/typed_c2c.py:41 - == // (𝕡) app#0 | tmp%15#0,{==} arc4.String.from_log(result[1].last_log) typed_abi_call/typed_c2c.py:41 - // virtual: store tmp%17#0 to l-stack (no copy) (𝕡) app#0 | tmp%15#0,tmp%17#0 arc4.String.from_log(result[1].last_log) typed_abi_call/typed_c2c.py:41 - // virtual: load tmp%17#0 from l-stack (no copy) (𝕡) app#0 | tmp%15#0,tmp%17#0 arc4.String.from_log(result[1].last_log) typed_abi_call/typed_c2c.py:41 - assert // ARC4 prefix is valid // (𝕡) app#0 | tmp%15#0 arc4.String.from_log(result[1].last_log) typed_abi_call/typed_c2c.py:41 - // virtual: load tmp%15#0 from l-stack (no copy) (𝕡) app#0 | tmp%15#0 arc4.String.from_log(result[1].last_log) == "echo: tuple" typed_abi_call/typed_c2c.py:41 - byte 0x000b6563686f3a207475706c65 // (𝕡) app#0 | tmp%15#0,0x000b6563686f3a207475706c65 "echo: tuple" typed_abi_call/typed_c2c.py:41 - == // (𝕡) app#0 | {==} arc4.String.from_log(result[1].last_log) == "echo: tuple" typed_abi_call/typed_c2c.py:41 - // virtual: store tmp%18#0 to l-stack (no copy) (𝕡) app#0 | tmp%18#0 arc4.String.from_log(result[1].last_log) == "echo: tuple" typed_abi_call/typed_c2c.py:41 - // virtual: load tmp%18#0 from l-stack (no copy) (𝕡) app#0 | tmp%18#0 assert arc4.String.from_log(result[1].last_log) == "echo: tuple" typed_abi_call/typed_c2c.py:41 - assert // (𝕡) app#0 | assert arc4.String.from_log(result[1].last_log) == "echo: tuple" typed_abi_call/typed_c2c.py:41 - itxn_begin // (𝕡) app#0 | arc4.abi_call("echo(string)string", "untyped", app_id=app) typed_abi_call/typed_c2c.py:43 - frame_dig -1 // load app#0 from parameters (𝕡) app#0 | app#0 - itxn_field ApplicationID // (𝕡) app#0 | - method "echo(string)string" // (𝕡) app#0 | method<"echo(string)string"> arc4.abi_call("echo(string)string", "untyped", app_id=app) typed_abi_call/typed_c2c.py:43 - itxn_field ApplicationArgs // (𝕡) app#0 | - byte 0x0007756e7479706564 // (𝕡) app#0 | 0x0007756e7479706564 "untyped" typed_abi_call/typed_c2c.py:43 - itxn_field ApplicationArgs // (𝕡) app#0 | - int appl // (𝕡) app#0 | appl arc4.abi_call("echo(string)string", "untyped", app_id=app) typed_abi_call/typed_c2c.py:43 - itxn_field TypeEnum // (𝕡) app#0 | - int 0 // (𝕡) app#0 | 0 arc4.abi_call("echo(string)string", "untyped", app_id=app) typed_abi_call/typed_c2c.py:43 - itxn_field Fee // (𝕡) app#0 | - itxn_submit // (𝕡) app#0 | arc4.abi_call("echo(string)string", "untyped", app_id=app) typed_abi_call/typed_c2c.py:43 - itxn LastLog // (𝕡) app#0 | {itxn} arc4.abi_call("echo(string)string", "untyped", app_id=app) typed_abi_call/typed_c2c.py:43 - // virtual: store txn_result.LastLog#0 to l-stack (no copy) (𝕡) app#0 | txn_result.LastLog#0 arc4.abi_call("echo(string)string", "untyped", app_id=app) typed_abi_call/typed_c2c.py:43 - dup // load txn_result.LastLog#0 from l-stack (copy) (𝕡) app#0 | txn_result.LastLog#0,txn_result.LastLog#0 arc4.String.from_log(txn_result.last_log) typed_abi_call/typed_c2c.py:44 - extract 4 0 // (𝕡) app#0 | txn_result.LastLog#0,{extract} arc4.String.from_log(txn_result.last_log) typed_abi_call/typed_c2c.py:44 - cover 1 // store tmp%19#0 to l-stack (no copy) (𝕡) app#0 | tmp%19#0,txn_result.LastLog#0 arc4.String.from_log(txn_result.last_log) typed_abi_call/typed_c2c.py:44 - // virtual: load txn_result.LastLog#0 from l-stack (no copy) (𝕡) app#0 | tmp%19#0,txn_result.LastLog#0 arc4.String.from_log(txn_result.last_log) typed_abi_call/typed_c2c.py:44 - extract 0 4 // (𝕡) app#0 | tmp%19#0,{extract} arc4.String.from_log(txn_result.last_log) typed_abi_call/typed_c2c.py:44 - // virtual: store tmp%20#0 to l-stack (no copy) (𝕡) app#0 | tmp%19#0,tmp%20#0 arc4.String.from_log(txn_result.last_log) typed_abi_call/typed_c2c.py:44 - // virtual: load tmp%20#0 from l-stack (no copy) (𝕡) app#0 | tmp%19#0,tmp%20#0 arc4.String.from_log(txn_result.last_log) typed_abi_call/typed_c2c.py:44 - byte 0x151f7c75 // (𝕡) app#0 | tmp%19#0,tmp%20#0,0x151f7c75 arc4.String.from_log(txn_result.last_log) typed_abi_call/typed_c2c.py:44 - == // (𝕡) app#0 | tmp%19#0,{==} arc4.String.from_log(txn_result.last_log) typed_abi_call/typed_c2c.py:44 - // virtual: store tmp%21#0 to l-stack (no copy) (𝕡) app#0 | tmp%19#0,tmp%21#0 arc4.String.from_log(txn_result.last_log) typed_abi_call/typed_c2c.py:44 - // virtual: load tmp%21#0 from l-stack (no copy) (𝕡) app#0 | tmp%19#0,tmp%21#0 arc4.String.from_log(txn_result.last_log) typed_abi_call/typed_c2c.py:44 - assert // ARC4 prefix is valid // (𝕡) app#0 | tmp%19#0 arc4.String.from_log(txn_result.last_log) typed_abi_call/typed_c2c.py:44 - // virtual: load tmp%19#0 from l-stack (no copy) (𝕡) app#0 | tmp%19#0 arc4.String.from_log(txn_result.last_log) == "echo: untyped" typed_abi_call/typed_c2c.py:44 - byte 0x000d6563686f3a20756e7479706564 // (𝕡) app#0 | tmp%19#0,0x000d6563686f3a20756e7479706564 "echo: untyped" typed_abi_call/typed_c2c.py:44 - == // (𝕡) app#0 | {==} arc4.String.from_log(txn_result.last_log) == "echo: untyped" typed_abi_call/typed_c2c.py:44 - // virtual: store tmp%22#0 to l-stack (no copy) (𝕡) app#0 | tmp%22#0 arc4.String.from_log(txn_result.last_log) == "echo: untyped" typed_abi_call/typed_c2c.py:44 - // virtual: load tmp%22#0 from l-stack (no copy) (𝕡) app#0 | tmp%22#0 assert arc4.String.from_log(txn_result.last_log) == "echo: untyped" typed_abi_call/typed_c2c.py:44 - assert // (𝕡) app#0 | assert arc4.String.from_log(txn_result.last_log) == "echo: untyped" typed_abi_call/typed_c2c.py:44 - retsub // + itxn_begin // (𝕡) app#0 | arc4.abi_call[arc4.String]("echo(string)string", "typed + ignore", app_id=app) typed_abi_call/typed_c2c.py:33 + frame_dig -1 // load app#0 from parameters (𝕡) app#0 | app#0 + itxn_field ApplicationID // (𝕡) app#0 | + method "echo(string)string" // (𝕡) app#0 | method<"echo(string)string"> arc4.abi_call[arc4.String]("echo(string)string", "typed + ignore", app_id=app) typed_abi_call/typed_c2c.py:33 + itxn_field ApplicationArgs // (𝕡) app#0 | + byte 0x000e7479706564202b2069676e6f7265 // (𝕡) app#0 | 0x000e7479706564202b2069676e6f7265 "typed + ignore" typed_abi_call/typed_c2c.py:33 + itxn_field ApplicationArgs // (𝕡) app#0 | + int appl // (𝕡) app#0 | appl arc4.abi_call[arc4.String]("echo(string)string", "typed + ignore", app_id=app) typed_abi_call/typed_c2c.py:33 + itxn_field TypeEnum // (𝕡) app#0 | + int 0 // (𝕡) app#0 | 0 arc4.abi_call[arc4.String]("echo(string)string", "typed + ignore", app_id=app) typed_abi_call/typed_c2c.py:33 + itxn_field Fee // (𝕡) app#0 | + itxn_submit // (𝕡) app#0 | arc4.abi_call[arc4.String]("echo(string)string", "typed + ignore", app_id=app) typed_abi_call/typed_c2c.py:33 + itxn LastLog // (𝕡) app#0 | {itxn} arc4.abi_call[arc4.String]("echo(string)string", "typed + ignore", app_id=app) typed_abi_call/typed_c2c.py:33 + // virtual: store awst_tmp%0#0 to l-stack (no copy) (𝕡) app#0 | awst_tmp%0#0 arc4.abi_call[arc4.String]("echo(string)string", "typed + ignore", app_id=app) typed_abi_call/typed_c2c.py:33 + // virtual: load awst_tmp%0#0 from l-stack (no copy) (𝕡) app#0 | awst_tmp%0#0 arc4.abi_call[arc4.String]("echo(string)string", "typed + ignore", app_id=app) typed_abi_call/typed_c2c.py:33 + extract 0 4 // (𝕡) app#0 | {extract} arc4.abi_call[arc4.String]("echo(string)string", "typed + ignore", app_id=app) typed_abi_call/typed_c2c.py:33 + // virtual: store tmp%1#0 to l-stack (no copy) (𝕡) app#0 | tmp%1#0 arc4.abi_call[arc4.String]("echo(string)string", "typed + ignore", app_id=app) typed_abi_call/typed_c2c.py:33 + // virtual: load tmp%1#0 from l-stack (no copy) (𝕡) app#0 | tmp%1#0 arc4.abi_call[arc4.String]("echo(string)string", "typed + ignore", app_id=app) typed_abi_call/typed_c2c.py:33 + byte 0x151f7c75 // (𝕡) app#0 | tmp%1#0,0x151f7c75 arc4.abi_call[arc4.String]("echo(string)string", "typed + ignore", app_id=app) typed_abi_call/typed_c2c.py:33 + == // (𝕡) app#0 | {==} arc4.abi_call[arc4.String]("echo(string)string", "typed + ignore", app_id=app) typed_abi_call/typed_c2c.py:33 + // virtual: store tmp%2#0 to l-stack (no copy) (𝕡) app#0 | tmp%2#0 arc4.abi_call[arc4.String]("echo(string)string", "typed + ignore", app_id=app) typed_abi_call/typed_c2c.py:33 + // virtual: load tmp%2#0 from l-stack (no copy) (𝕡) app#0 | tmp%2#0 arc4.abi_call[arc4.String]("echo(string)string", "typed + ignore", app_id=app) typed_abi_call/typed_c2c.py:33 + assert // ARC4 prefix is valid // (𝕡) app#0 | arc4.abi_call[arc4.String]("echo(string)string", "typed + ignore", app_id=app) typed_abi_call/typed_c2c.py:33 + itxn LastLog // (𝕡) app#0 | {itxn} op.ITxn.last_log() typed_abi_call/typed_c2c.py:34 + // virtual: store awst_tmp%1#0 to l-stack (no copy) (𝕡) app#0 | awst_tmp%1#0 op.ITxn.last_log() typed_abi_call/typed_c2c.py:34 + dup // load awst_tmp%1#0 from l-stack (copy) (𝕡) app#0 | awst_tmp%1#0,awst_tmp%1#0 arc4.String.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:34 + extract 4 0 // (𝕡) app#0 | awst_tmp%1#0,{extract} arc4.String.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:34 + cover 1 // store tmp%3#0 to l-stack (no copy) (𝕡) app#0 | tmp%3#0,awst_tmp%1#0 arc4.String.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:34 + // virtual: load awst_tmp%1#0 from l-stack (no copy) (𝕡) app#0 | tmp%3#0,awst_tmp%1#0 arc4.String.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:34 + extract 0 4 // (𝕡) app#0 | tmp%3#0,{extract} arc4.String.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:34 + // virtual: store tmp%4#0 to l-stack (no copy) (𝕡) app#0 | tmp%3#0,tmp%4#0 arc4.String.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:34 + // virtual: load tmp%4#0 from l-stack (no copy) (𝕡) app#0 | tmp%3#0,tmp%4#0 arc4.String.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:34 + byte 0x151f7c75 // (𝕡) app#0 | tmp%3#0,tmp%4#0,0x151f7c75 arc4.String.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:34 + == // (𝕡) app#0 | tmp%3#0,{==} arc4.String.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:34 + // virtual: store tmp%5#0 to l-stack (no copy) (𝕡) app#0 | tmp%3#0,tmp%5#0 arc4.String.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:34 + // virtual: load tmp%5#0 from l-stack (no copy) (𝕡) app#0 | tmp%3#0,tmp%5#0 arc4.String.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:34 + assert // ARC4 prefix is valid // (𝕡) app#0 | tmp%3#0 arc4.String.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:34 + // virtual: load tmp%3#0 from l-stack (no copy) (𝕡) app#0 | tmp%3#0 arc4.String.from_log(op.ITxn.last_log()) == "echo: typed + ignore" typed_abi_call/typed_c2c.py:34 + byte 0x00146563686f3a207479706564202b2069676e6f7265 // (𝕡) app#0 | tmp%3#0,0x00146563686f3a207479706564202b2069676e6f7265 "echo: typed + ignore" typed_abi_call/typed_c2c.py:34 + == // (𝕡) app#0 | {==} arc4.String.from_log(op.ITxn.last_log()) == "echo: typed + ignore" typed_abi_call/typed_c2c.py:34 + // virtual: store tmp%6#0 to l-stack (no copy) (𝕡) app#0 | tmp%6#0 arc4.String.from_log(op.ITxn.last_log()) == "echo: typed + ignore" typed_abi_call/typed_c2c.py:34 + // virtual: load tmp%6#0 from l-stack (no copy) (𝕡) app#0 | tmp%6#0 assert arc4.String.from_log(op.ITxn.last_log()) == "echo: typed + ignore" typed_abi_call/typed_c2c.py:34 + assert // (𝕡) app#0 | assert arc4.String.from_log(op.ITxn.last_log()) == "echo: typed + ignore" typed_abi_call/typed_c2c.py:34 + itxn_begin // (𝕡) app#0 | arc4.abi_call("echo(string)string", "untyped + ignore", app_id=app) typed_abi_call/typed_c2c.py:36 + frame_dig -1 // load app#0 from parameters (𝕡) app#0 | app#0 + itxn_field ApplicationID // (𝕡) app#0 | + method "echo(string)string" // (𝕡) app#0 | method<"echo(string)string"> arc4.abi_call("echo(string)string", "untyped + ignore", app_id=app) typed_abi_call/typed_c2c.py:36 + itxn_field ApplicationArgs // (𝕡) app#0 | + byte 0x0010756e7479706564202b2069676e6f7265 // (𝕡) app#0 | 0x0010756e7479706564202b2069676e6f7265 "untyped + ignore" typed_abi_call/typed_c2c.py:36 + itxn_field ApplicationArgs // (𝕡) app#0 | + int appl // (𝕡) app#0 | appl arc4.abi_call("echo(string)string", "untyped + ignore", app_id=app) typed_abi_call/typed_c2c.py:36 + itxn_field TypeEnum // (𝕡) app#0 | + int 0 // (𝕡) app#0 | 0 arc4.abi_call("echo(string)string", "untyped + ignore", app_id=app) typed_abi_call/typed_c2c.py:36 + itxn_field Fee // (𝕡) app#0 | + itxn_submit // (𝕡) app#0 | arc4.abi_call("echo(string)string", "untyped + ignore", app_id=app) typed_abi_call/typed_c2c.py:36 + itxn LastLog // (𝕡) app#0 | {itxn} op.ITxn.last_log() typed_abi_call/typed_c2c.py:37 + // virtual: store awst_tmp%2#0 to l-stack (no copy) (𝕡) app#0 | awst_tmp%2#0 op.ITxn.last_log() typed_abi_call/typed_c2c.py:37 + dup // load awst_tmp%2#0 from l-stack (copy) (𝕡) app#0 | awst_tmp%2#0,awst_tmp%2#0 arc4.String.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:37 + extract 4 0 // (𝕡) app#0 | awst_tmp%2#0,{extract} arc4.String.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:37 + cover 1 // store tmp%7#0 to l-stack (no copy) (𝕡) app#0 | tmp%7#0,awst_tmp%2#0 arc4.String.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:37 + // virtual: load awst_tmp%2#0 from l-stack (no copy) (𝕡) app#0 | tmp%7#0,awst_tmp%2#0 arc4.String.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:37 + extract 0 4 // (𝕡) app#0 | tmp%7#0,{extract} arc4.String.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:37 + // virtual: store tmp%8#0 to l-stack (no copy) (𝕡) app#0 | tmp%7#0,tmp%8#0 arc4.String.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:37 + // virtual: load tmp%8#0 from l-stack (no copy) (𝕡) app#0 | tmp%7#0,tmp%8#0 arc4.String.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:37 + byte 0x151f7c75 // (𝕡) app#0 | tmp%7#0,tmp%8#0,0x151f7c75 arc4.String.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:37 + == // (𝕡) app#0 | tmp%7#0,{==} arc4.String.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:37 + // virtual: store tmp%9#0 to l-stack (no copy) (𝕡) app#0 | tmp%7#0,tmp%9#0 arc4.String.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:37 + // virtual: load tmp%9#0 from l-stack (no copy) (𝕡) app#0 | tmp%7#0,tmp%9#0 arc4.String.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:37 + assert // ARC4 prefix is valid // (𝕡) app#0 | tmp%7#0 arc4.String.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:37 + // virtual: load tmp%7#0 from l-stack (no copy) (𝕡) app#0 | tmp%7#0 arc4.String.from_log(op.ITxn.last_log()) == "echo: untyped + ignore" typed_abi_call/typed_c2c.py:37 + byte 0x00166563686f3a20756e7479706564202b2069676e6f7265 // (𝕡) app#0 | tmp%7#0,0x00166563686f3a20756e7479706564202b2069676e6f7265 "echo: untyped + ignore" typed_abi_call/typed_c2c.py:37 + == // (𝕡) app#0 | {==} arc4.String.from_log(op.ITxn.last_log()) == "echo: untyped + ignore" typed_abi_call/typed_c2c.py:37 + // virtual: store tmp%10#0 to l-stack (no copy) (𝕡) app#0 | tmp%10#0 arc4.String.from_log(op.ITxn.last_log()) == "echo: untyped + ignore" typed_abi_call/typed_c2c.py:37 + // virtual: load tmp%10#0 from l-stack (no copy) (𝕡) app#0 | tmp%10#0 assert arc4.String.from_log(op.ITxn.last_log()) == "echo: untyped + ignore" typed_abi_call/typed_c2c.py:37 + assert // (𝕡) app#0 | assert arc4.String.from_log(op.ITxn.last_log()) == "echo: untyped + ignore" typed_abi_call/typed_c2c.py:37 + itxn_begin // (𝕡) app#0 | arc4.abi_call[arc4.String]("echo(string)string", "tuple", app_id=app) typed_abi_call/typed_c2c.py:39 + frame_dig -1 // load app#0 from parameters (𝕡) app#0 | app#0 + itxn_field ApplicationID // (𝕡) app#0 | + method "echo(string)string" // (𝕡) app#0 | method<"echo(string)string"> arc4.abi_call[arc4.String]("echo(string)string", "tuple", app_id=app) typed_abi_call/typed_c2c.py:39 + itxn_field ApplicationArgs // (𝕡) app#0 | + byte 0x00057475706c65 // (𝕡) app#0 | 0x00057475706c65 "tuple" typed_abi_call/typed_c2c.py:39 + itxn_field ApplicationArgs // (𝕡) app#0 | + int appl // (𝕡) app#0 | appl arc4.abi_call[arc4.String]("echo(string)string", "tuple", app_id=app) typed_abi_call/typed_c2c.py:39 + itxn_field TypeEnum // (𝕡) app#0 | + int 0 // (𝕡) app#0 | 0 arc4.abi_call[arc4.String]("echo(string)string", "tuple", app_id=app) typed_abi_call/typed_c2c.py:39 + itxn_field Fee // (𝕡) app#0 | + itxn_submit // (𝕡) app#0 | arc4.abi_call[arc4.String]("echo(string)string", "tuple", app_id=app) typed_abi_call/typed_c2c.py:39 + itxn LastLog // (𝕡) app#0 | {itxn} arc4.abi_call[arc4.String]("echo(string)string", "tuple", app_id=app) typed_abi_call/typed_c2c.py:39 + // virtual: store awst_tmp%3#0 to l-stack (no copy) (𝕡) app#0 | awst_tmp%3#0 arc4.abi_call[arc4.String]("echo(string)string", "tuple", app_id=app) typed_abi_call/typed_c2c.py:39 + dup // load awst_tmp%3#0 from l-stack (copy) (𝕡) app#0 | awst_tmp%3#0,awst_tmp%3#0 arc4.abi_call[arc4.String]("echo(string)string", "tuple", app_id=app) typed_abi_call/typed_c2c.py:39 + extract 4 0 // (𝕡) app#0 | awst_tmp%3#0,{extract} arc4.abi_call[arc4.String]("echo(string)string", "tuple", app_id=app) typed_abi_call/typed_c2c.py:39 + cover 1 // store result.0#0 to l-stack (no copy) (𝕡) app#0 | result.0#0,awst_tmp%3#0 arc4.abi_call[arc4.String]("echo(string)string", "tuple", app_id=app) typed_abi_call/typed_c2c.py:39 + // virtual: load awst_tmp%3#0 from l-stack (no copy) (𝕡) app#0 | result.0#0,awst_tmp%3#0 arc4.abi_call[arc4.String]("echo(string)string", "tuple", app_id=app) typed_abi_call/typed_c2c.py:39 + extract 0 4 // (𝕡) app#0 | result.0#0,{extract} arc4.abi_call[arc4.String]("echo(string)string", "tuple", app_id=app) typed_abi_call/typed_c2c.py:39 + // virtual: store tmp%12#0 to l-stack (no copy) (𝕡) app#0 | result.0#0,tmp%12#0 arc4.abi_call[arc4.String]("echo(string)string", "tuple", app_id=app) typed_abi_call/typed_c2c.py:39 + // virtual: load tmp%12#0 from l-stack (no copy) (𝕡) app#0 | result.0#0,tmp%12#0 arc4.abi_call[arc4.String]("echo(string)string", "tuple", app_id=app) typed_abi_call/typed_c2c.py:39 + byte 0x151f7c75 // (𝕡) app#0 | result.0#0,tmp%12#0,0x151f7c75 arc4.abi_call[arc4.String]("echo(string)string", "tuple", app_id=app) typed_abi_call/typed_c2c.py:39 + == // (𝕡) app#0 | result.0#0,{==} arc4.abi_call[arc4.String]("echo(string)string", "tuple", app_id=app) typed_abi_call/typed_c2c.py:39 + // virtual: store tmp%13#0 to l-stack (no copy) (𝕡) app#0 | result.0#0,tmp%13#0 arc4.abi_call[arc4.String]("echo(string)string", "tuple", app_id=app) typed_abi_call/typed_c2c.py:39 + // virtual: load tmp%13#0 from l-stack (no copy) (𝕡) app#0 | result.0#0,tmp%13#0 arc4.abi_call[arc4.String]("echo(string)string", "tuple", app_id=app) typed_abi_call/typed_c2c.py:39 + assert // ARC4 prefix is valid // (𝕡) app#0 | result.0#0 arc4.abi_call[arc4.String]("echo(string)string", "tuple", app_id=app) typed_abi_call/typed_c2c.py:39 + itxn LastLog // (𝕡) app#0 | result.0#0,{itxn} arc4.abi_call[arc4.String]("echo(string)string", "tuple", app_id=app) typed_abi_call/typed_c2c.py:39 + // virtual: store result.1.LastLog#0 to l-stack (no copy) (𝕡) app#0 | result.0#0,result.1.LastLog#0 arc4.abi_call[arc4.String]("echo(string)string", "tuple", app_id=app) typed_abi_call/typed_c2c.py:39 + uncover 1 // load result.0#0 from l-stack (no copy) (𝕡) app#0 | result.1.LastLog#0,result.0#0 result[0] == "echo: tuple" typed_abi_call/typed_c2c.py:40 + byte 0x000b6563686f3a207475706c65 // (𝕡) app#0 | result.1.LastLog#0,result.0#0,0x000b6563686f3a207475706c65 "echo: tuple" typed_abi_call/typed_c2c.py:40 + == // (𝕡) app#0 | result.1.LastLog#0,{==} result[0] == "echo: tuple" typed_abi_call/typed_c2c.py:40 + // virtual: store tmp%14#0 to l-stack (no copy) (𝕡) app#0 | result.1.LastLog#0,tmp%14#0 result[0] == "echo: tuple" typed_abi_call/typed_c2c.py:40 + // virtual: load tmp%14#0 from l-stack (no copy) (𝕡) app#0 | result.1.LastLog#0,tmp%14#0 assert result[0] == "echo: tuple" typed_abi_call/typed_c2c.py:40 + assert // (𝕡) app#0 | result.1.LastLog#0 assert result[0] == "echo: tuple" typed_abi_call/typed_c2c.py:40 + dup // load result.1.LastLog#0 from l-stack (copy) (𝕡) app#0 | result.1.LastLog#0,result.1.LastLog#0 arc4.String.from_log(result[1].last_log) typed_abi_call/typed_c2c.py:41 + extract 4 0 // (𝕡) app#0 | result.1.LastLog#0,{extract} arc4.String.from_log(result[1].last_log) typed_abi_call/typed_c2c.py:41 + cover 1 // store tmp%15#0 to l-stack (no copy) (𝕡) app#0 | tmp%15#0,result.1.LastLog#0 arc4.String.from_log(result[1].last_log) typed_abi_call/typed_c2c.py:41 + // virtual: load result.1.LastLog#0 from l-stack (no copy) (𝕡) app#0 | tmp%15#0,result.1.LastLog#0 arc4.String.from_log(result[1].last_log) typed_abi_call/typed_c2c.py:41 + extract 0 4 // (𝕡) app#0 | tmp%15#0,{extract} arc4.String.from_log(result[1].last_log) typed_abi_call/typed_c2c.py:41 + // virtual: store tmp%16#0 to l-stack (no copy) (𝕡) app#0 | tmp%15#0,tmp%16#0 arc4.String.from_log(result[1].last_log) typed_abi_call/typed_c2c.py:41 + // virtual: load tmp%16#0 from l-stack (no copy) (𝕡) app#0 | tmp%15#0,tmp%16#0 arc4.String.from_log(result[1].last_log) typed_abi_call/typed_c2c.py:41 + byte 0x151f7c75 // (𝕡) app#0 | tmp%15#0,tmp%16#0,0x151f7c75 arc4.String.from_log(result[1].last_log) typed_abi_call/typed_c2c.py:41 + == // (𝕡) app#0 | tmp%15#0,{==} arc4.String.from_log(result[1].last_log) typed_abi_call/typed_c2c.py:41 + // virtual: store tmp%17#0 to l-stack (no copy) (𝕡) app#0 | tmp%15#0,tmp%17#0 arc4.String.from_log(result[1].last_log) typed_abi_call/typed_c2c.py:41 + // virtual: load tmp%17#0 from l-stack (no copy) (𝕡) app#0 | tmp%15#0,tmp%17#0 arc4.String.from_log(result[1].last_log) typed_abi_call/typed_c2c.py:41 + assert // ARC4 prefix is valid // (𝕡) app#0 | tmp%15#0 arc4.String.from_log(result[1].last_log) typed_abi_call/typed_c2c.py:41 + // virtual: load tmp%15#0 from l-stack (no copy) (𝕡) app#0 | tmp%15#0 arc4.String.from_log(result[1].last_log) == "echo: tuple" typed_abi_call/typed_c2c.py:41 + byte 0x000b6563686f3a207475706c65 // (𝕡) app#0 | tmp%15#0,0x000b6563686f3a207475706c65 "echo: tuple" typed_abi_call/typed_c2c.py:41 + == // (𝕡) app#0 | {==} arc4.String.from_log(result[1].last_log) == "echo: tuple" typed_abi_call/typed_c2c.py:41 + // virtual: store tmp%18#0 to l-stack (no copy) (𝕡) app#0 | tmp%18#0 arc4.String.from_log(result[1].last_log) == "echo: tuple" typed_abi_call/typed_c2c.py:41 + // virtual: load tmp%18#0 from l-stack (no copy) (𝕡) app#0 | tmp%18#0 assert arc4.String.from_log(result[1].last_log) == "echo: tuple" typed_abi_call/typed_c2c.py:41 + assert // (𝕡) app#0 | assert arc4.String.from_log(result[1].last_log) == "echo: tuple" typed_abi_call/typed_c2c.py:41 + itxn_begin // (𝕡) app#0 | arc4.abi_call("echo(string)string", "untyped", app_id=app) typed_abi_call/typed_c2c.py:43 + frame_dig -1 // load app#0 from parameters (𝕡) app#0 | app#0 + itxn_field ApplicationID // (𝕡) app#0 | + method "echo(string)string" // (𝕡) app#0 | method<"echo(string)string"> arc4.abi_call("echo(string)string", "untyped", app_id=app) typed_abi_call/typed_c2c.py:43 + itxn_field ApplicationArgs // (𝕡) app#0 | + byte 0x0007756e7479706564 // (𝕡) app#0 | 0x0007756e7479706564 "untyped" typed_abi_call/typed_c2c.py:43 + itxn_field ApplicationArgs // (𝕡) app#0 | + int appl // (𝕡) app#0 | appl arc4.abi_call("echo(string)string", "untyped", app_id=app) typed_abi_call/typed_c2c.py:43 + itxn_field TypeEnum // (𝕡) app#0 | + int 0 // (𝕡) app#0 | 0 arc4.abi_call("echo(string)string", "untyped", app_id=app) typed_abi_call/typed_c2c.py:43 + itxn_field Fee // (𝕡) app#0 | + itxn_submit // (𝕡) app#0 | arc4.abi_call("echo(string)string", "untyped", app_id=app) typed_abi_call/typed_c2c.py:43 + itxn LastLog // (𝕡) app#0 | {itxn} arc4.abi_call("echo(string)string", "untyped", app_id=app) typed_abi_call/typed_c2c.py:43 + // virtual: store txn_result.LastLog#0 to l-stack (no copy) (𝕡) app#0 | txn_result.LastLog#0 arc4.abi_call("echo(string)string", "untyped", app_id=app) typed_abi_call/typed_c2c.py:43 + dup // load txn_result.LastLog#0 from l-stack (copy) (𝕡) app#0 | txn_result.LastLog#0,txn_result.LastLog#0 arc4.String.from_log(txn_result.last_log) typed_abi_call/typed_c2c.py:44 + extract 4 0 // (𝕡) app#0 | txn_result.LastLog#0,{extract} arc4.String.from_log(txn_result.last_log) typed_abi_call/typed_c2c.py:44 + cover 1 // store tmp%19#0 to l-stack (no copy) (𝕡) app#0 | tmp%19#0,txn_result.LastLog#0 arc4.String.from_log(txn_result.last_log) typed_abi_call/typed_c2c.py:44 + // virtual: load txn_result.LastLog#0 from l-stack (no copy) (𝕡) app#0 | tmp%19#0,txn_result.LastLog#0 arc4.String.from_log(txn_result.last_log) typed_abi_call/typed_c2c.py:44 + extract 0 4 // (𝕡) app#0 | tmp%19#0,{extract} arc4.String.from_log(txn_result.last_log) typed_abi_call/typed_c2c.py:44 + // virtual: store tmp%20#0 to l-stack (no copy) (𝕡) app#0 | tmp%19#0,tmp%20#0 arc4.String.from_log(txn_result.last_log) typed_abi_call/typed_c2c.py:44 + // virtual: load tmp%20#0 from l-stack (no copy) (𝕡) app#0 | tmp%19#0,tmp%20#0 arc4.String.from_log(txn_result.last_log) typed_abi_call/typed_c2c.py:44 + byte 0x151f7c75 // (𝕡) app#0 | tmp%19#0,tmp%20#0,0x151f7c75 arc4.String.from_log(txn_result.last_log) typed_abi_call/typed_c2c.py:44 + == // (𝕡) app#0 | tmp%19#0,{==} arc4.String.from_log(txn_result.last_log) typed_abi_call/typed_c2c.py:44 + // virtual: store tmp%21#0 to l-stack (no copy) (𝕡) app#0 | tmp%19#0,tmp%21#0 arc4.String.from_log(txn_result.last_log) typed_abi_call/typed_c2c.py:44 + // virtual: load tmp%21#0 from l-stack (no copy) (𝕡) app#0 | tmp%19#0,tmp%21#0 arc4.String.from_log(txn_result.last_log) typed_abi_call/typed_c2c.py:44 + assert // ARC4 prefix is valid // (𝕡) app#0 | tmp%19#0 arc4.String.from_log(txn_result.last_log) typed_abi_call/typed_c2c.py:44 + // virtual: load tmp%19#0 from l-stack (no copy) (𝕡) app#0 | tmp%19#0 arc4.String.from_log(txn_result.last_log) == "echo: untyped" typed_abi_call/typed_c2c.py:44 + byte 0x000d6563686f3a20756e7479706564 // (𝕡) app#0 | tmp%19#0,0x000d6563686f3a20756e7479706564 "echo: untyped" typed_abi_call/typed_c2c.py:44 + == // (𝕡) app#0 | {==} arc4.String.from_log(txn_result.last_log) == "echo: untyped" typed_abi_call/typed_c2c.py:44 + // virtual: store tmp%22#0 to l-stack (no copy) (𝕡) app#0 | tmp%22#0 arc4.String.from_log(txn_result.last_log) == "echo: untyped" typed_abi_call/typed_c2c.py:44 + // virtual: load tmp%22#0 from l-stack (no copy) (𝕡) app#0 | tmp%22#0 assert arc4.String.from_log(txn_result.last_log) == "echo: untyped" typed_abi_call/typed_c2c.py:44 + assert // (𝕡) app#0 | assert arc4.String.from_log(txn_result.last_log) == "echo: untyped" typed_abi_call/typed_c2c.py:44 + retsub // // test_cases.typed_abi_call.typed_c2c.Greeter.test_arg_conversion(app: uint64) -> void: test_arg_conversion: - proto 1 0 // (𝕡) app#0 | @arc4.abimethod()\ndef test_arg_conversion(self, app: Application) -> None: typed_abi_call/typed_c2c.py:46-47 + proto 1 0 // (𝕡) app#0 | @arc4.abimethod()\ndef test_arg_conversion(self, app: Application) -> None: typed_abi_call/typed_c2c.py:46-47 test_arg_conversion_block@0: - itxn_begin // (𝕡) app#0 | arc4.abi_call(Logger.log_string, "converted1", app_id=app) typed_abi_call/typed_c2c.py:48 - frame_dig -1 // load app#0 from parameters (𝕡) app#0 | app#0 - itxn_field ApplicationID // (𝕡) app#0 | - method "log(string)void" // (𝕡) app#0 | method<"log(string)void"> arc4.abi_call(Logger.log_string, "converted1", app_id=app) typed_abi_call/typed_c2c.py:48 - itxn_field ApplicationArgs // (𝕡) app#0 | - byte 0x000a636f6e76657274656431 // (𝕡) app#0 | 0x000a636f6e76657274656431 "converted1" typed_abi_call/typed_c2c.py:48 - itxn_field ApplicationArgs // (𝕡) app#0 | - int appl // (𝕡) app#0 | appl arc4.abi_call(Logger.log_string, "converted1", app_id=app) typed_abi_call/typed_c2c.py:48 - itxn_field TypeEnum // (𝕡) app#0 | - int 0 // (𝕡) app#0 | 0 arc4.abi_call(Logger.log_string, "converted1", app_id=app) typed_abi_call/typed_c2c.py:48 - itxn_field Fee // (𝕡) app#0 | - itxn_submit // (𝕡) app#0 | arc4.abi_call(Logger.log_string, "converted1", app_id=app) typed_abi_call/typed_c2c.py:48 - itxn LastLog // (𝕡) app#0 | {itxn} arc4.abi_call(Logger.log_string, "converted1", app_id=app) typed_abi_call/typed_c2c.py:48 - // virtual: store txn.LastLog#0 to l-stack (no copy) (𝕡) app#0 | txn.LastLog#0 arc4.abi_call(Logger.log_string, "converted1", app_id=app) typed_abi_call/typed_c2c.py:48 - // virtual: load txn.LastLog#0 from l-stack (no copy) (𝕡) app#0 | txn.LastLog#0 txn.last_log == b"converted1" typed_abi_call/typed_c2c.py:49 - byte 0x636f6e76657274656431 // (𝕡) app#0 | txn.LastLog#0,0x636f6e76657274656431 b"converted1" typed_abi_call/typed_c2c.py:49 - == // (𝕡) app#0 | {==} txn.last_log == b"converted1" typed_abi_call/typed_c2c.py:49 - // virtual: store tmp%0#0 to l-stack (no copy) (𝕡) app#0 | tmp%0#0 txn.last_log == b"converted1" typed_abi_call/typed_c2c.py:49 - // virtual: load tmp%0#0 from l-stack (no copy) (𝕡) app#0 | tmp%0#0 assert txn.last_log == b"converted1" typed_abi_call/typed_c2c.py:49 - assert // (𝕡) app#0 | assert txn.last_log == b"converted1" typed_abi_call/typed_c2c.py:49 - itxn_begin // (𝕡) app#0 | arc4.abi_call(Logger.log_uint64, 2, app_id=app) typed_abi_call/typed_c2c.py:51 - frame_dig -1 // load app#0 from parameters (𝕡) app#0 | app#0 - itxn_field ApplicationID // (𝕡) app#0 | - method "log(uint64)void" // (𝕡) app#0 | method<"log(uint64)void"> arc4.abi_call(Logger.log_uint64, 2, app_id=app) typed_abi_call/typed_c2c.py:51 - itxn_field ApplicationArgs // (𝕡) app#0 | - byte 0x0000000000000002 // (𝕡) app#0 | 0x0000000000000002 2 typed_abi_call/typed_c2c.py:51 - itxn_field ApplicationArgs // (𝕡) app#0 | - int appl // (𝕡) app#0 | appl arc4.abi_call(Logger.log_uint64, 2, app_id=app) typed_abi_call/typed_c2c.py:51 - itxn_field TypeEnum // (𝕡) app#0 | - int 0 // (𝕡) app#0 | 0 arc4.abi_call(Logger.log_uint64, 2, app_id=app) typed_abi_call/typed_c2c.py:51 - itxn_field Fee // (𝕡) app#0 | - itxn_submit // (𝕡) app#0 | arc4.abi_call(Logger.log_uint64, 2, app_id=app) typed_abi_call/typed_c2c.py:51 - itxn LastLog // (𝕡) app#0 | {itxn} arc4.abi_call(Logger.log_uint64, 2, app_id=app) typed_abi_call/typed_c2c.py:51 - // virtual: store txn.LastLog#0 to l-stack (no copy) (𝕡) app#0 | txn.LastLog#0 arc4.abi_call(Logger.log_uint64, 2, app_id=app) typed_abi_call/typed_c2c.py:51 - int 2 // (𝕡) app#0 | txn.LastLog#0,2 2 typed_abi_call/typed_c2c.py:52 - itob // (𝕡) app#0 | txn.LastLog#0,{itob} op.itob(2) typed_abi_call/typed_c2c.py:52 - // virtual: store tmp%1#0 to l-stack (no copy) (𝕡) app#0 | txn.LastLog#0,tmp%1#0 op.itob(2) typed_abi_call/typed_c2c.py:52 - // virtual: load txn.LastLog#0 from l-stack (no copy) (𝕡) app#0 | tmp%1#0,txn.LastLog#0 txn.last_log == op.itob(2) typed_abi_call/typed_c2c.py:52 - // virtual: load tmp%1#0 from l-stack (no copy) (𝕡) app#0 | txn.LastLog#0,tmp%1#0 txn.last_log == op.itob(2) typed_abi_call/typed_c2c.py:52 - == // (𝕡) app#0 | {==} txn.last_log == op.itob(2) typed_abi_call/typed_c2c.py:52 - // virtual: store tmp%2#0 to l-stack (no copy) (𝕡) app#0 | tmp%2#0 txn.last_log == op.itob(2) typed_abi_call/typed_c2c.py:52 - // virtual: load tmp%2#0 from l-stack (no copy) (𝕡) app#0 | tmp%2#0 assert txn.last_log == op.itob(2) typed_abi_call/typed_c2c.py:52 - assert // (𝕡) app#0 | assert txn.last_log == op.itob(2) typed_abi_call/typed_c2c.py:52 - itxn_begin // (𝕡) app#0 | arc4.abi_call(Logger.log_uint512, 3, app_id=app) typed_abi_call/typed_c2c.py:54 - frame_dig -1 // load app#0 from parameters (𝕡) app#0 | app#0 - itxn_field ApplicationID // (𝕡) app#0 | - method "log(uint512)void" // (𝕡) app#0 | method<"log(uint512)void"> arc4.abi_call(Logger.log_uint512, 3, app_id=app) typed_abi_call/typed_c2c.py:54 - itxn_field ApplicationArgs // (𝕡) app#0 | - byte 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003 // (𝕡) app#0 | 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003 3 typed_abi_call/typed_c2c.py:54 - itxn_field ApplicationArgs // (𝕡) app#0 | - int appl // (𝕡) app#0 | appl arc4.abi_call(Logger.log_uint512, 3, app_id=app) typed_abi_call/typed_c2c.py:54 - itxn_field TypeEnum // (𝕡) app#0 | - int 0 // (𝕡) app#0 | 0 arc4.abi_call(Logger.log_uint512, 3, app_id=app) typed_abi_call/typed_c2c.py:54 - itxn_field Fee // (𝕡) app#0 | - itxn_submit // (𝕡) app#0 | arc4.abi_call(Logger.log_uint512, 3, app_id=app) typed_abi_call/typed_c2c.py:54 - itxn LastLog // (𝕡) app#0 | {itxn} arc4.abi_call(Logger.log_uint512, 3, app_id=app) typed_abi_call/typed_c2c.py:54 - // virtual: store txn.LastLog#0 to l-stack (no copy) (𝕡) app#0 | txn.LastLog#0 arc4.abi_call(Logger.log_uint512, 3, app_id=app) typed_abi_call/typed_c2c.py:54 - // virtual: load txn.LastLog#0 from l-stack (no copy) (𝕡) app#0 | txn.LastLog#0 txn.last_log == (op.bzero(56) + op.itob(3)) typed_abi_call/typed_c2c.py:55 - byte 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003 // (𝕡) app#0 | txn.LastLog#0,0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003 op.bzero(56) + op.itob(3) typed_abi_call/typed_c2c.py:55 - == // (𝕡) app#0 | {==} txn.last_log == (op.bzero(56) + op.itob(3)) typed_abi_call/typed_c2c.py:55 - // virtual: store tmp%6#0 to l-stack (no copy) (𝕡) app#0 | tmp%6#0 txn.last_log == (op.bzero(56) + op.itob(3)) typed_abi_call/typed_c2c.py:55 - // virtual: load tmp%6#0 from l-stack (no copy) (𝕡) app#0 | tmp%6#0 assert txn.last_log == (op.bzero(56) + op.itob(3)) typed_abi_call/typed_c2c.py:55 - assert // (𝕡) app#0 | assert txn.last_log == (op.bzero(56) + op.itob(3)) typed_abi_call/typed_c2c.py:55 - itxn_begin // (𝕡) app#0 | arc4.abi_call(Logger.log_bytes, b"4", app_id=app) typed_abi_call/typed_c2c.py:57 - frame_dig -1 // load app#0 from parameters (𝕡) app#0 | app#0 - itxn_field ApplicationID // (𝕡) app#0 | - method "log(byte[])void" // (𝕡) app#0 | method<"log(byte[])void"> arc4.abi_call(Logger.log_bytes, b"4", app_id=app) typed_abi_call/typed_c2c.py:57 - itxn_field ApplicationArgs // (𝕡) app#0 | - byte 0x000134 // (𝕡) app#0 | 0x000134 b"4" typed_abi_call/typed_c2c.py:57 - itxn_field ApplicationArgs // (𝕡) app#0 | - int appl // (𝕡) app#0 | appl arc4.abi_call(Logger.log_bytes, b"4", app_id=app) typed_abi_call/typed_c2c.py:57 - itxn_field TypeEnum // (𝕡) app#0 | - int 0 // (𝕡) app#0 | 0 arc4.abi_call(Logger.log_bytes, b"4", app_id=app) typed_abi_call/typed_c2c.py:57 - itxn_field Fee // (𝕡) app#0 | - itxn_submit // (𝕡) app#0 | arc4.abi_call(Logger.log_bytes, b"4", app_id=app) typed_abi_call/typed_c2c.py:57 - itxn LastLog // (𝕡) app#0 | {itxn} arc4.abi_call(Logger.log_bytes, b"4", app_id=app) typed_abi_call/typed_c2c.py:57 - // virtual: store txn.LastLog#0 to l-stack (no copy) (𝕡) app#0 | txn.LastLog#0 arc4.abi_call(Logger.log_bytes, b"4", app_id=app) typed_abi_call/typed_c2c.py:57 - // virtual: load txn.LastLog#0 from l-stack (no copy) (𝕡) app#0 | txn.LastLog#0 txn.last_log == b"4" typed_abi_call/typed_c2c.py:58 - byte 0x34 // (𝕡) app#0 | txn.LastLog#0,0x34 b"4" typed_abi_call/typed_c2c.py:58 - == // (𝕡) app#0 | {==} txn.last_log == b"4" typed_abi_call/typed_c2c.py:58 - // virtual: store tmp%7#0 to l-stack (no copy) (𝕡) app#0 | tmp%7#0 txn.last_log == b"4" typed_abi_call/typed_c2c.py:58 - // virtual: load tmp%7#0 from l-stack (no copy) (𝕡) app#0 | tmp%7#0 assert txn.last_log == b"4" typed_abi_call/typed_c2c.py:58 - assert // (𝕡) app#0 | assert txn.last_log == b"4" typed_abi_call/typed_c2c.py:58 - itxn_begin // (𝕡) app#0 | arc4.abi_call(Logger.log_bool, True, app_id=app) typed_abi_call/typed_c2c.py:60 - frame_dig -1 // load app#0 from parameters (𝕡) app#0 | app#0 - itxn_field ApplicationID // (𝕡) app#0 | - method "log(bool)void" // (𝕡) app#0 | method<"log(bool)void"> arc4.abi_call(Logger.log_bool, True, app_id=app) typed_abi_call/typed_c2c.py:60 - itxn_field ApplicationArgs // (𝕡) app#0 | - byte 0x80 // (𝕡) app#0 | 0x80 True typed_abi_call/typed_c2c.py:60 - itxn_field ApplicationArgs // (𝕡) app#0 | - int appl // (𝕡) app#0 | appl arc4.abi_call(Logger.log_bool, True, app_id=app) typed_abi_call/typed_c2c.py:60 - itxn_field TypeEnum // (𝕡) app#0 | - int 0 // (𝕡) app#0 | 0 arc4.abi_call(Logger.log_bool, True, app_id=app) typed_abi_call/typed_c2c.py:60 - itxn_field Fee // (𝕡) app#0 | - itxn_submit // (𝕡) app#0 | arc4.abi_call(Logger.log_bool, True, app_id=app) typed_abi_call/typed_c2c.py:60 - itxn LastLog // (𝕡) app#0 | {itxn} arc4.abi_call(Logger.log_bool, True, app_id=app) typed_abi_call/typed_c2c.py:60 - // virtual: store txn.LastLog#0 to l-stack (no copy) (𝕡) app#0 | txn.LastLog#0 arc4.abi_call(Logger.log_bool, True, app_id=app) typed_abi_call/typed_c2c.py:60 - // virtual: load txn.LastLog#0 from l-stack (no copy) (𝕡) app#0 | txn.LastLog#0 txn.last_log == b"True" typed_abi_call/typed_c2c.py:61 - byte 0x54727565 // (𝕡) app#0 | txn.LastLog#0,0x54727565 b"True" typed_abi_call/typed_c2c.py:61 - == // (𝕡) app#0 | {==} txn.last_log == b"True" typed_abi_call/typed_c2c.py:61 - // virtual: store tmp%8#0 to l-stack (no copy) (𝕡) app#0 | tmp%8#0 txn.last_log == b"True" typed_abi_call/typed_c2c.py:61 - // virtual: load tmp%8#0 from l-stack (no copy) (𝕡) app#0 | tmp%8#0 assert txn.last_log == b"True" typed_abi_call/typed_c2c.py:61 - assert // (𝕡) app#0 | assert txn.last_log == b"True" typed_abi_call/typed_c2c.py:61 - retsub // + itxn_begin // (𝕡) app#0 | arc4.abi_call(Logger.log_string, "converted1", app_id=app) typed_abi_call/typed_c2c.py:48 + frame_dig -1 // load app#0 from parameters (𝕡) app#0 | app#0 + itxn_field ApplicationID // (𝕡) app#0 | + method "log(string)void" // (𝕡) app#0 | method<"log(string)void"> arc4.abi_call(Logger.log_string, "converted1", app_id=app) typed_abi_call/typed_c2c.py:48 + itxn_field ApplicationArgs // (𝕡) app#0 | + byte 0x000a636f6e76657274656431 // (𝕡) app#0 | 0x000a636f6e76657274656431 "converted1" typed_abi_call/typed_c2c.py:48 + itxn_field ApplicationArgs // (𝕡) app#0 | + int appl // (𝕡) app#0 | appl arc4.abi_call(Logger.log_string, "converted1", app_id=app) typed_abi_call/typed_c2c.py:48 + itxn_field TypeEnum // (𝕡) app#0 | + int 0 // (𝕡) app#0 | 0 arc4.abi_call(Logger.log_string, "converted1", app_id=app) typed_abi_call/typed_c2c.py:48 + itxn_field Fee // (𝕡) app#0 | + itxn_submit // (𝕡) app#0 | arc4.abi_call(Logger.log_string, "converted1", app_id=app) typed_abi_call/typed_c2c.py:48 + itxn LastLog // (𝕡) app#0 | {itxn} arc4.abi_call(Logger.log_string, "converted1", app_id=app) typed_abi_call/typed_c2c.py:48 + // virtual: store txn.LastLog#0 to l-stack (no copy) (𝕡) app#0 | txn.LastLog#0 arc4.abi_call(Logger.log_string, "converted1", app_id=app) typed_abi_call/typed_c2c.py:48 + // virtual: load txn.LastLog#0 from l-stack (no copy) (𝕡) app#0 | txn.LastLog#0 txn.last_log == b"converted1" typed_abi_call/typed_c2c.py:49 + byte 0x636f6e76657274656431 // (𝕡) app#0 | txn.LastLog#0,0x636f6e76657274656431 b"converted1" typed_abi_call/typed_c2c.py:49 + == // (𝕡) app#0 | {==} txn.last_log == b"converted1" typed_abi_call/typed_c2c.py:49 + // virtual: store tmp%0#0 to l-stack (no copy) (𝕡) app#0 | tmp%0#0 txn.last_log == b"converted1" typed_abi_call/typed_c2c.py:49 + // virtual: load tmp%0#0 from l-stack (no copy) (𝕡) app#0 | tmp%0#0 assert txn.last_log == b"converted1" typed_abi_call/typed_c2c.py:49 + assert // (𝕡) app#0 | assert txn.last_log == b"converted1" typed_abi_call/typed_c2c.py:49 + itxn_begin // (𝕡) app#0 | arc4.abi_call(Logger.log_uint64, 2, app_id=app) typed_abi_call/typed_c2c.py:51 + frame_dig -1 // load app#0 from parameters (𝕡) app#0 | app#0 + itxn_field ApplicationID // (𝕡) app#0 | + method "log(uint64)void" // (𝕡) app#0 | method<"log(uint64)void"> arc4.abi_call(Logger.log_uint64, 2, app_id=app) typed_abi_call/typed_c2c.py:51 + itxn_field ApplicationArgs // (𝕡) app#0 | + byte 0x0000000000000002 // (𝕡) app#0 | 0x0000000000000002 2 typed_abi_call/typed_c2c.py:51 + itxn_field ApplicationArgs // (𝕡) app#0 | + int appl // (𝕡) app#0 | appl arc4.abi_call(Logger.log_uint64, 2, app_id=app) typed_abi_call/typed_c2c.py:51 + itxn_field TypeEnum // (𝕡) app#0 | + int 0 // (𝕡) app#0 | 0 arc4.abi_call(Logger.log_uint64, 2, app_id=app) typed_abi_call/typed_c2c.py:51 + itxn_field Fee // (𝕡) app#0 | + itxn_submit // (𝕡) app#0 | arc4.abi_call(Logger.log_uint64, 2, app_id=app) typed_abi_call/typed_c2c.py:51 + itxn LastLog // (𝕡) app#0 | {itxn} arc4.abi_call(Logger.log_uint64, 2, app_id=app) typed_abi_call/typed_c2c.py:51 + // virtual: store txn.LastLog#0 to l-stack (no copy) (𝕡) app#0 | txn.LastLog#0 arc4.abi_call(Logger.log_uint64, 2, app_id=app) typed_abi_call/typed_c2c.py:51 + int 2 // (𝕡) app#0 | txn.LastLog#0,2 2 typed_abi_call/typed_c2c.py:52 + itob // (𝕡) app#0 | txn.LastLog#0,{itob} op.itob(2) typed_abi_call/typed_c2c.py:52 + // virtual: store tmp%1#0 to l-stack (no copy) (𝕡) app#0 | txn.LastLog#0,tmp%1#0 op.itob(2) typed_abi_call/typed_c2c.py:52 + // virtual: load txn.LastLog#0 from l-stack (no copy) (𝕡) app#0 | tmp%1#0,txn.LastLog#0 txn.last_log == op.itob(2) typed_abi_call/typed_c2c.py:52 + // virtual: load tmp%1#0 from l-stack (no copy) (𝕡) app#0 | txn.LastLog#0,tmp%1#0 txn.last_log == op.itob(2) typed_abi_call/typed_c2c.py:52 + == // (𝕡) app#0 | {==} txn.last_log == op.itob(2) typed_abi_call/typed_c2c.py:52 + // virtual: store tmp%2#0 to l-stack (no copy) (𝕡) app#0 | tmp%2#0 txn.last_log == op.itob(2) typed_abi_call/typed_c2c.py:52 + // virtual: load tmp%2#0 from l-stack (no copy) (𝕡) app#0 | tmp%2#0 assert txn.last_log == op.itob(2) typed_abi_call/typed_c2c.py:52 + assert // (𝕡) app#0 | assert txn.last_log == op.itob(2) typed_abi_call/typed_c2c.py:52 + itxn_begin // (𝕡) app#0 | arc4.abi_call(Logger.log_uint512, 3, app_id=app) typed_abi_call/typed_c2c.py:54 + frame_dig -1 // load app#0 from parameters (𝕡) app#0 | app#0 + itxn_field ApplicationID // (𝕡) app#0 | + method "log(uint512)void" // (𝕡) app#0 | method<"log(uint512)void"> arc4.abi_call(Logger.log_uint512, 3, app_id=app) typed_abi_call/typed_c2c.py:54 + itxn_field ApplicationArgs // (𝕡) app#0 | + byte 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003 // (𝕡) app#0 | 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003 3 typed_abi_call/typed_c2c.py:54 + itxn_field ApplicationArgs // (𝕡) app#0 | + int appl // (𝕡) app#0 | appl arc4.abi_call(Logger.log_uint512, 3, app_id=app) typed_abi_call/typed_c2c.py:54 + itxn_field TypeEnum // (𝕡) app#0 | + int 0 // (𝕡) app#0 | 0 arc4.abi_call(Logger.log_uint512, 3, app_id=app) typed_abi_call/typed_c2c.py:54 + itxn_field Fee // (𝕡) app#0 | + itxn_submit // (𝕡) app#0 | arc4.abi_call(Logger.log_uint512, 3, app_id=app) typed_abi_call/typed_c2c.py:54 + itxn LastLog // (𝕡) app#0 | {itxn} arc4.abi_call(Logger.log_uint512, 3, app_id=app) typed_abi_call/typed_c2c.py:54 + // virtual: store txn.LastLog#0 to l-stack (no copy) (𝕡) app#0 | txn.LastLog#0 arc4.abi_call(Logger.log_uint512, 3, app_id=app) typed_abi_call/typed_c2c.py:54 + // virtual: load txn.LastLog#0 from l-stack (no copy) (𝕡) app#0 | txn.LastLog#0 txn.last_log == (op.bzero(56) + op.itob(3)) typed_abi_call/typed_c2c.py:55 + byte 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003 // (𝕡) app#0 | txn.LastLog#0,0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003 op.bzero(56) + op.itob(3) typed_abi_call/typed_c2c.py:55 + == // (𝕡) app#0 | {==} txn.last_log == (op.bzero(56) + op.itob(3)) typed_abi_call/typed_c2c.py:55 + // virtual: store tmp%6#0 to l-stack (no copy) (𝕡) app#0 | tmp%6#0 txn.last_log == (op.bzero(56) + op.itob(3)) typed_abi_call/typed_c2c.py:55 + // virtual: load tmp%6#0 from l-stack (no copy) (𝕡) app#0 | tmp%6#0 assert txn.last_log == (op.bzero(56) + op.itob(3)) typed_abi_call/typed_c2c.py:55 + assert // (𝕡) app#0 | assert txn.last_log == (op.bzero(56) + op.itob(3)) typed_abi_call/typed_c2c.py:55 + itxn_begin // (𝕡) app#0 | arc4.abi_call(Logger.log_bytes, b"4", app_id=app) typed_abi_call/typed_c2c.py:57 + frame_dig -1 // load app#0 from parameters (𝕡) app#0 | app#0 + itxn_field ApplicationID // (𝕡) app#0 | + method "log(byte[])void" // (𝕡) app#0 | method<"log(byte[])void"> arc4.abi_call(Logger.log_bytes, b"4", app_id=app) typed_abi_call/typed_c2c.py:57 + itxn_field ApplicationArgs // (𝕡) app#0 | + byte 0x000134 // (𝕡) app#0 | 0x000134 b"4" typed_abi_call/typed_c2c.py:57 + itxn_field ApplicationArgs // (𝕡) app#0 | + int appl // (𝕡) app#0 | appl arc4.abi_call(Logger.log_bytes, b"4", app_id=app) typed_abi_call/typed_c2c.py:57 + itxn_field TypeEnum // (𝕡) app#0 | + int 0 // (𝕡) app#0 | 0 arc4.abi_call(Logger.log_bytes, b"4", app_id=app) typed_abi_call/typed_c2c.py:57 + itxn_field Fee // (𝕡) app#0 | + itxn_submit // (𝕡) app#0 | arc4.abi_call(Logger.log_bytes, b"4", app_id=app) typed_abi_call/typed_c2c.py:57 + itxn LastLog // (𝕡) app#0 | {itxn} arc4.abi_call(Logger.log_bytes, b"4", app_id=app) typed_abi_call/typed_c2c.py:57 + // virtual: store txn.LastLog#0 to l-stack (no copy) (𝕡) app#0 | txn.LastLog#0 arc4.abi_call(Logger.log_bytes, b"4", app_id=app) typed_abi_call/typed_c2c.py:57 + // virtual: load txn.LastLog#0 from l-stack (no copy) (𝕡) app#0 | txn.LastLog#0 txn.last_log == b"4" typed_abi_call/typed_c2c.py:58 + byte 0x34 // (𝕡) app#0 | txn.LastLog#0,0x34 b"4" typed_abi_call/typed_c2c.py:58 + == // (𝕡) app#0 | {==} txn.last_log == b"4" typed_abi_call/typed_c2c.py:58 + // virtual: store tmp%7#0 to l-stack (no copy) (𝕡) app#0 | tmp%7#0 txn.last_log == b"4" typed_abi_call/typed_c2c.py:58 + // virtual: load tmp%7#0 from l-stack (no copy) (𝕡) app#0 | tmp%7#0 assert txn.last_log == b"4" typed_abi_call/typed_c2c.py:58 + assert // (𝕡) app#0 | assert txn.last_log == b"4" typed_abi_call/typed_c2c.py:58 + itxn_begin // (𝕡) app#0 | arc4.abi_call(Logger.log_bool, True, app_id=app) typed_abi_call/typed_c2c.py:60 + frame_dig -1 // load app#0 from parameters (𝕡) app#0 | app#0 + itxn_field ApplicationID // (𝕡) app#0 | + method "log(bool)void" // (𝕡) app#0 | method<"log(bool)void"> arc4.abi_call(Logger.log_bool, True, app_id=app) typed_abi_call/typed_c2c.py:60 + itxn_field ApplicationArgs // (𝕡) app#0 | + byte 0x80 // (𝕡) app#0 | 0x80 True typed_abi_call/typed_c2c.py:60 + itxn_field ApplicationArgs // (𝕡) app#0 | + int appl // (𝕡) app#0 | appl arc4.abi_call(Logger.log_bool, True, app_id=app) typed_abi_call/typed_c2c.py:60 + itxn_field TypeEnum // (𝕡) app#0 | + int 0 // (𝕡) app#0 | 0 arc4.abi_call(Logger.log_bool, True, app_id=app) typed_abi_call/typed_c2c.py:60 + itxn_field Fee // (𝕡) app#0 | + itxn_submit // (𝕡) app#0 | arc4.abi_call(Logger.log_bool, True, app_id=app) typed_abi_call/typed_c2c.py:60 + itxn LastLog // (𝕡) app#0 | {itxn} arc4.abi_call(Logger.log_bool, True, app_id=app) typed_abi_call/typed_c2c.py:60 + // virtual: store txn.LastLog#0 to l-stack (no copy) (𝕡) app#0 | txn.LastLog#0 arc4.abi_call(Logger.log_bool, True, app_id=app) typed_abi_call/typed_c2c.py:60 + // virtual: load txn.LastLog#0 from l-stack (no copy) (𝕡) app#0 | txn.LastLog#0 txn.last_log == b"True" typed_abi_call/typed_c2c.py:61 + byte 0x54727565 // (𝕡) app#0 | txn.LastLog#0,0x54727565 b"True" typed_abi_call/typed_c2c.py:61 + == // (𝕡) app#0 | {==} txn.last_log == b"True" typed_abi_call/typed_c2c.py:61 + // virtual: store tmp%8#0 to l-stack (no copy) (𝕡) app#0 | tmp%8#0 txn.last_log == b"True" typed_abi_call/typed_c2c.py:61 + // virtual: load tmp%8#0 from l-stack (no copy) (𝕡) app#0 | tmp%8#0 assert txn.last_log == b"True" typed_abi_call/typed_c2c.py:61 + assert // (𝕡) app#0 | assert txn.last_log == b"True" typed_abi_call/typed_c2c.py:61 + retsub // // test_cases.typed_abi_call.typed_c2c.Greeter.test_15plus_args(app: uint64) -> void: test_15plus_args: - proto 1 0 // (𝕡) app#0 | @arc4.abimethod()\ndef test_15plus_args(self, app: Application) -> None: typed_abi_call/typed_c2c.py:63-64 + proto 1 0 // (𝕡) app#0 | @arc4.abimethod()\ndef test_15plus_args(self, app: Application) -> None: typed_abi_call/typed_c2c.py:63-64 test_15plus_args_block@0: - itxn_begin // (𝕡) app#0 | arc4.abi_call(\nLogger.return_args_after_14th,\n1,\n2,\n3,\n4,\n5,\n6,\n7,\n8,\n9,\n10,\n11,\n12,... typed_abi_call/typed_c2c.py:65-88 - frame_dig -1 // load app#0 from parameters (𝕡) app#0 | app#0 - itxn_field ApplicationID // (𝕡) app#0 | - method "return_args_after_14th(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint8,uint8,uint8,uint8,(uint8,uint8,uint8,uint8),uint8)byte[]" // (𝕡) app#0 | method<"return_args_after_14th(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint8,uint8,uint8,uint8,(uint8,uint8,uint8,uint8),uint8)byte[]"> arc4.abi_call(\nLogger.return_args_after_14th,\n1,\n2,\n3,\n4,\n5,\n6,\n7,\n8,\n9,\n10,\n11,\n12,... typed_abi_call/typed_c2c.py:65-88 - itxn_field ApplicationArgs // (𝕡) app#0 | - byte 0x0000000000000001 // (𝕡) app#0 | 0x0000000000000001 1 typed_abi_call/typed_c2c.py:67 - itxn_field ApplicationArgs // (𝕡) app#0 | - byte 0x0000000000000002 // (𝕡) app#0 | 0x0000000000000002 2 typed_abi_call/typed_c2c.py:68 - itxn_field ApplicationArgs // (𝕡) app#0 | - byte 0x0000000000000003 // (𝕡) app#0 | 0x0000000000000003 3 typed_abi_call/typed_c2c.py:69 - itxn_field ApplicationArgs // (𝕡) app#0 | - byte 0x0000000000000004 // (𝕡) app#0 | 0x0000000000000004 4 typed_abi_call/typed_c2c.py:70 - itxn_field ApplicationArgs // (𝕡) app#0 | - byte 0x0000000000000005 // (𝕡) app#0 | 0x0000000000000005 5 typed_abi_call/typed_c2c.py:71 - itxn_field ApplicationArgs // (𝕡) app#0 | - byte 0x0000000000000006 // (𝕡) app#0 | 0x0000000000000006 6 typed_abi_call/typed_c2c.py:72 - itxn_field ApplicationArgs // (𝕡) app#0 | - byte 0x0000000000000007 // (𝕡) app#0 | 0x0000000000000007 7 typed_abi_call/typed_c2c.py:73 - itxn_field ApplicationArgs // (𝕡) app#0 | - byte 0x0000000000000008 // (𝕡) app#0 | 0x0000000000000008 8 typed_abi_call/typed_c2c.py:74 - itxn_field ApplicationArgs // (𝕡) app#0 | - byte 0x0000000000000009 // (𝕡) app#0 | 0x0000000000000009 9 typed_abi_call/typed_c2c.py:75 - itxn_field ApplicationArgs // (𝕡) app#0 | - byte 0x000000000000000a // (𝕡) app#0 | 0x000000000000000a 10 typed_abi_call/typed_c2c.py:76 - itxn_field ApplicationArgs // (𝕡) app#0 | - byte 0x000000000000000b // (𝕡) app#0 | 0x000000000000000b 11 typed_abi_call/typed_c2c.py:77 - itxn_field ApplicationArgs // (𝕡) app#0 | - byte 0x000000000000000c // (𝕡) app#0 | 0x000000000000000c 12 typed_abi_call/typed_c2c.py:78 - itxn_field ApplicationArgs // (𝕡) app#0 | - byte 0x000000000000000d // (𝕡) app#0 | 0x000000000000000d 13 typed_abi_call/typed_c2c.py:79 - itxn_field ApplicationArgs // (𝕡) app#0 | - byte 0x000000000000000e // (𝕡) app#0 | 0x000000000000000e 14 typed_abi_call/typed_c2c.py:80 - itxn_field ApplicationArgs // (𝕡) app#0 | - byte 0x0f101112deadbeef14 // (𝕡) app#0 | 0x0f101112deadbeef14 15,\n16,\n17,\n18,\narc4.Tuple((arc4.UInt8(0xDE), arc4.UInt8(0xAD), arc4.UInt8(0xBE), arc4.UInt8(... typed_abi_call/typed_c2c.py:81-86 - itxn_field ApplicationArgs // (𝕡) app#0 | - int appl // (𝕡) app#0 | appl arc4.abi_call(\nLogger.return_args_after_14th,\n1,\n2,\n3,\n4,\n5,\n6,\n7,\n8,\n9,\n10,\n11,\n12,... typed_abi_call/typed_c2c.py:65-88 - itxn_field TypeEnum // (𝕡) app#0 | - int 0 // (𝕡) app#0 | 0 arc4.abi_call(\nLogger.return_args_after_14th,\n1,\n2,\n3,\n4,\n5,\n6,\n7,\n8,\n9,\n10,\n11,\n12,... typed_abi_call/typed_c2c.py:65-88 - itxn_field Fee // (𝕡) app#0 | - itxn_submit // (𝕡) app#0 | arc4.abi_call(\nLogger.return_args_after_14th,\n1,\n2,\n3,\n4,\n5,\n6,\n7,\n8,\n9,\n10,\n11,\n12,... typed_abi_call/typed_c2c.py:65-88 - itxn LastLog // (𝕡) app#0 | {itxn} arc4.abi_call(\nLogger.return_args_after_14th,\n1,\n2,\n3,\n4,\n5,\n6,\n7,\n8,\n9,\n10,\n11,\n12,... typed_abi_call/typed_c2c.py:65-88 - // virtual: store awst_tmp%0#0 to l-stack (no copy) (𝕡) app#0 | awst_tmp%0#0 arc4.abi_call(\nLogger.return_args_after_14th,\n1,\n2,\n3,\n4,\n5,\n6,\n7,\n8,\n9,\n10,\n11,\n12,... typed_abi_call/typed_c2c.py:65-88 - dup // load awst_tmp%0#0 from l-stack (copy) (𝕡) app#0 | awst_tmp%0#0,awst_tmp%0#0 arc4.abi_call(\nLogger.return_args_after_14th,\n1,\n2,\n3,\n4,\n5,\n6,\n7,\n8,\n9,\n10,\n11,\n12,... typed_abi_call/typed_c2c.py:65-88 - extract 4 0 // (𝕡) app#0 | awst_tmp%0#0,{extract} arc4.abi_call(\nLogger.return_args_after_14th,\n1,\n2,\n3,\n4,\n5,\n6,\n7,\n8,\n9,\n10,\n11,\n12,... typed_abi_call/typed_c2c.py:65-88 - cover 1 // store result#0 to l-stack (no copy) (𝕡) app#0 | result#0,awst_tmp%0#0 arc4.abi_call(\nLogger.return_args_after_14th,\n1,\n2,\n3,\n4,\n5,\n6,\n7,\n8,\n9,\n10,\n11,\n12,... typed_abi_call/typed_c2c.py:65-88 - // virtual: load awst_tmp%0#0 from l-stack (no copy) (𝕡) app#0 | result#0,awst_tmp%0#0 arc4.abi_call(\nLogger.return_args_after_14th,\n1,\n2,\n3,\n4,\n5,\n6,\n7,\n8,\n9,\n10,\n11,\n12,... typed_abi_call/typed_c2c.py:65-88 - extract 0 4 // (𝕡) app#0 | result#0,{extract} arc4.abi_call(\nLogger.return_args_after_14th,\n1,\n2,\n3,\n4,\n5,\n6,\n7,\n8,\n9,\n10,\n11,\n12,... typed_abi_call/typed_c2c.py:65-88 - // virtual: store tmp%1#0 to l-stack (no copy) (𝕡) app#0 | result#0,tmp%1#0 arc4.abi_call(\nLogger.return_args_after_14th,\n1,\n2,\n3,\n4,\n5,\n6,\n7,\n8,\n9,\n10,\n11,\n12,... typed_abi_call/typed_c2c.py:65-88 - // virtual: load tmp%1#0 from l-stack (no copy) (𝕡) app#0 | result#0,tmp%1#0 arc4.abi_call(\nLogger.return_args_after_14th,\n1,\n2,\n3,\n4,\n5,\n6,\n7,\n8,\n9,\n10,\n11,\n12,... typed_abi_call/typed_c2c.py:65-88 - byte 0x151f7c75 // (𝕡) app#0 | result#0,tmp%1#0,0x151f7c75 arc4.abi_call(\nLogger.return_args_after_14th,\n1,\n2,\n3,\n4,\n5,\n6,\n7,\n8,\n9,\n10,\n11,\n12,... typed_abi_call/typed_c2c.py:65-88 - == // (𝕡) app#0 | result#0,{==} arc4.abi_call(\nLogger.return_args_after_14th,\n1,\n2,\n3,\n4,\n5,\n6,\n7,\n8,\n9,\n10,\n11,\n12,... typed_abi_call/typed_c2c.py:65-88 - // virtual: store tmp%2#0 to l-stack (no copy) (𝕡) app#0 | result#0,tmp%2#0 arc4.abi_call(\nLogger.return_args_after_14th,\n1,\n2,\n3,\n4,\n5,\n6,\n7,\n8,\n9,\n10,\n11,\n12,... typed_abi_call/typed_c2c.py:65-88 - // virtual: load tmp%2#0 from l-stack (no copy) (𝕡) app#0 | result#0,tmp%2#0 arc4.abi_call(\nLogger.return_args_after_14th,\n1,\n2,\n3,\n4,\n5,\n6,\n7,\n8,\n9,\n10,\n11,\n12,... typed_abi_call/typed_c2c.py:65-88 - assert // ARC4 prefix is valid // (𝕡) app#0 | result#0 arc4.abi_call(\nLogger.return_args_after_14th,\n1,\n2,\n3,\n4,\n5,\n6,\n7,\n8,\n9,\n10,\n11,\n12,... typed_abi_call/typed_c2c.py:65-88 - // virtual: load result#0 from l-stack (no copy) (𝕡) app#0 | result#0 result.native typed_abi_call/typed_c2c.py:89 - extract 2 0 // (𝕡) app#0 | {extract} result.native typed_abi_call/typed_c2c.py:89 - // virtual: store tmp%3#0 to l-stack (no copy) (𝕡) app#0 | tmp%3#0 result.native typed_abi_call/typed_c2c.py:89 - // virtual: load tmp%3#0 from l-stack (no copy) (𝕡) app#0 | tmp%3#0 result.native == Bytes.from_hex("0F101112DEADBEEF14") typed_abi_call/typed_c2c.py:89 - byte 0x0f101112deadbeef14 // (𝕡) app#0 | tmp%3#0,0x0f101112deadbeef14 Bytes.from_hex("0F101112DEADBEEF14") typed_abi_call/typed_c2c.py:89 - == // (𝕡) app#0 | {==} result.native == Bytes.from_hex("0F101112DEADBEEF14") typed_abi_call/typed_c2c.py:89 - // virtual: store tmp%4#0 to l-stack (no copy) (𝕡) app#0 | tmp%4#0 result.native == Bytes.from_hex("0F101112DEADBEEF14") typed_abi_call/typed_c2c.py:89 - // virtual: load tmp%4#0 from l-stack (no copy) (𝕡) app#0 | tmp%4#0 assert result.native == Bytes.from_hex("0F101112DEADBEEF14") typed_abi_call/typed_c2c.py:89 - assert // (𝕡) app#0 | assert result.native == Bytes.from_hex("0F101112DEADBEEF14") typed_abi_call/typed_c2c.py:89 - retsub // + itxn_begin // (𝕡) app#0 | arc4.abi_call(\nLogger.return_args_after_14th,\n1,\n2,\n3,\n4,\n5,\n6,\n7,\n8,\n9,\n10,\n11,\n12,... typed_abi_call/typed_c2c.py:65-88 + frame_dig -1 // load app#0 from parameters (𝕡) app#0 | app#0 + itxn_field ApplicationID // (𝕡) app#0 | + method "return_args_after_14th(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint8,uint8,uint8,uint8,(uint8,uint8,uint8,uint8),uint8)byte[]" // (𝕡) app#0 | method<"return_args_after_14th(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint8,uint8,uint8,uint8,(uint8,uint8,uint8,uint8),uint8)byte[]"> arc4.abi_call(\nLogger.return_args_after_14th,\n1,\n2,\n3,\n4,\n5,\n6,\n7,\n8,\n9,\n10,\n11,\n12,... typed_abi_call/typed_c2c.py:65-88 + itxn_field ApplicationArgs // (𝕡) app#0 | + byte 0x0000000000000001 // (𝕡) app#0 | 0x0000000000000001 1 typed_abi_call/typed_c2c.py:67 + itxn_field ApplicationArgs // (𝕡) app#0 | + byte 0x0000000000000002 // (𝕡) app#0 | 0x0000000000000002 2 typed_abi_call/typed_c2c.py:68 + itxn_field ApplicationArgs // (𝕡) app#0 | + byte 0x0000000000000003 // (𝕡) app#0 | 0x0000000000000003 3 typed_abi_call/typed_c2c.py:69 + itxn_field ApplicationArgs // (𝕡) app#0 | + byte 0x0000000000000004 // (𝕡) app#0 | 0x0000000000000004 4 typed_abi_call/typed_c2c.py:70 + itxn_field ApplicationArgs // (𝕡) app#0 | + byte 0x0000000000000005 // (𝕡) app#0 | 0x0000000000000005 5 typed_abi_call/typed_c2c.py:71 + itxn_field ApplicationArgs // (𝕡) app#0 | + byte 0x0000000000000006 // (𝕡) app#0 | 0x0000000000000006 6 typed_abi_call/typed_c2c.py:72 + itxn_field ApplicationArgs // (𝕡) app#0 | + byte 0x0000000000000007 // (𝕡) app#0 | 0x0000000000000007 7 typed_abi_call/typed_c2c.py:73 + itxn_field ApplicationArgs // (𝕡) app#0 | + byte 0x0000000000000008 // (𝕡) app#0 | 0x0000000000000008 8 typed_abi_call/typed_c2c.py:74 + itxn_field ApplicationArgs // (𝕡) app#0 | + byte 0x0000000000000009 // (𝕡) app#0 | 0x0000000000000009 9 typed_abi_call/typed_c2c.py:75 + itxn_field ApplicationArgs // (𝕡) app#0 | + byte 0x000000000000000a // (𝕡) app#0 | 0x000000000000000a 10 typed_abi_call/typed_c2c.py:76 + itxn_field ApplicationArgs // (𝕡) app#0 | + byte 0x000000000000000b // (𝕡) app#0 | 0x000000000000000b 11 typed_abi_call/typed_c2c.py:77 + itxn_field ApplicationArgs // (𝕡) app#0 | + byte 0x000000000000000c // (𝕡) app#0 | 0x000000000000000c 12 typed_abi_call/typed_c2c.py:78 + itxn_field ApplicationArgs // (𝕡) app#0 | + byte 0x000000000000000d // (𝕡) app#0 | 0x000000000000000d 13 typed_abi_call/typed_c2c.py:79 + itxn_field ApplicationArgs // (𝕡) app#0 | + byte 0x000000000000000e // (𝕡) app#0 | 0x000000000000000e 14 typed_abi_call/typed_c2c.py:80 + itxn_field ApplicationArgs // (𝕡) app#0 | + byte 0x0f101112deadbeef14 // (𝕡) app#0 | 0x0f101112deadbeef14 15,\n16,\n17,\n18,\narc4.Tuple((arc4.UInt8(0xDE), arc4.UInt8(0xAD), arc4.UInt8(0xBE), arc4.UInt8(... typed_abi_call/typed_c2c.py:81-86 + itxn_field ApplicationArgs // (𝕡) app#0 | + int appl // (𝕡) app#0 | appl arc4.abi_call(\nLogger.return_args_after_14th,\n1,\n2,\n3,\n4,\n5,\n6,\n7,\n8,\n9,\n10,\n11,\n12,... typed_abi_call/typed_c2c.py:65-88 + itxn_field TypeEnum // (𝕡) app#0 | + int 0 // (𝕡) app#0 | 0 arc4.abi_call(\nLogger.return_args_after_14th,\n1,\n2,\n3,\n4,\n5,\n6,\n7,\n8,\n9,\n10,\n11,\n12,... typed_abi_call/typed_c2c.py:65-88 + itxn_field Fee // (𝕡) app#0 | + itxn_submit // (𝕡) app#0 | arc4.abi_call(\nLogger.return_args_after_14th,\n1,\n2,\n3,\n4,\n5,\n6,\n7,\n8,\n9,\n10,\n11,\n12,... typed_abi_call/typed_c2c.py:65-88 + itxn LastLog // (𝕡) app#0 | {itxn} arc4.abi_call(\nLogger.return_args_after_14th,\n1,\n2,\n3,\n4,\n5,\n6,\n7,\n8,\n9,\n10,\n11,\n12,... typed_abi_call/typed_c2c.py:65-88 + // virtual: store awst_tmp%0#0 to l-stack (no copy) (𝕡) app#0 | awst_tmp%0#0 arc4.abi_call(\nLogger.return_args_after_14th,\n1,\n2,\n3,\n4,\n5,\n6,\n7,\n8,\n9,\n10,\n11,\n12,... typed_abi_call/typed_c2c.py:65-88 + dup // load awst_tmp%0#0 from l-stack (copy) (𝕡) app#0 | awst_tmp%0#0,awst_tmp%0#0 arc4.abi_call(\nLogger.return_args_after_14th,\n1,\n2,\n3,\n4,\n5,\n6,\n7,\n8,\n9,\n10,\n11,\n12,... typed_abi_call/typed_c2c.py:65-88 + extract 4 0 // (𝕡) app#0 | awst_tmp%0#0,{extract} arc4.abi_call(\nLogger.return_args_after_14th,\n1,\n2,\n3,\n4,\n5,\n6,\n7,\n8,\n9,\n10,\n11,\n12,... typed_abi_call/typed_c2c.py:65-88 + cover 1 // store result#0 to l-stack (no copy) (𝕡) app#0 | result#0,awst_tmp%0#0 arc4.abi_call(\nLogger.return_args_after_14th,\n1,\n2,\n3,\n4,\n5,\n6,\n7,\n8,\n9,\n10,\n11,\n12,... typed_abi_call/typed_c2c.py:65-88 + // virtual: load awst_tmp%0#0 from l-stack (no copy) (𝕡) app#0 | result#0,awst_tmp%0#0 arc4.abi_call(\nLogger.return_args_after_14th,\n1,\n2,\n3,\n4,\n5,\n6,\n7,\n8,\n9,\n10,\n11,\n12,... typed_abi_call/typed_c2c.py:65-88 + extract 0 4 // (𝕡) app#0 | result#0,{extract} arc4.abi_call(\nLogger.return_args_after_14th,\n1,\n2,\n3,\n4,\n5,\n6,\n7,\n8,\n9,\n10,\n11,\n12,... typed_abi_call/typed_c2c.py:65-88 + // virtual: store tmp%1#0 to l-stack (no copy) (𝕡) app#0 | result#0,tmp%1#0 arc4.abi_call(\nLogger.return_args_after_14th,\n1,\n2,\n3,\n4,\n5,\n6,\n7,\n8,\n9,\n10,\n11,\n12,... typed_abi_call/typed_c2c.py:65-88 + // virtual: load tmp%1#0 from l-stack (no copy) (𝕡) app#0 | result#0,tmp%1#0 arc4.abi_call(\nLogger.return_args_after_14th,\n1,\n2,\n3,\n4,\n5,\n6,\n7,\n8,\n9,\n10,\n11,\n12,... typed_abi_call/typed_c2c.py:65-88 + byte 0x151f7c75 // (𝕡) app#0 | result#0,tmp%1#0,0x151f7c75 arc4.abi_call(\nLogger.return_args_after_14th,\n1,\n2,\n3,\n4,\n5,\n6,\n7,\n8,\n9,\n10,\n11,\n12,... typed_abi_call/typed_c2c.py:65-88 + == // (𝕡) app#0 | result#0,{==} arc4.abi_call(\nLogger.return_args_after_14th,\n1,\n2,\n3,\n4,\n5,\n6,\n7,\n8,\n9,\n10,\n11,\n12,... typed_abi_call/typed_c2c.py:65-88 + // virtual: store tmp%2#0 to l-stack (no copy) (𝕡) app#0 | result#0,tmp%2#0 arc4.abi_call(\nLogger.return_args_after_14th,\n1,\n2,\n3,\n4,\n5,\n6,\n7,\n8,\n9,\n10,\n11,\n12,... typed_abi_call/typed_c2c.py:65-88 + // virtual: load tmp%2#0 from l-stack (no copy) (𝕡) app#0 | result#0,tmp%2#0 arc4.abi_call(\nLogger.return_args_after_14th,\n1,\n2,\n3,\n4,\n5,\n6,\n7,\n8,\n9,\n10,\n11,\n12,... typed_abi_call/typed_c2c.py:65-88 + assert // ARC4 prefix is valid // (𝕡) app#0 | result#0 arc4.abi_call(\nLogger.return_args_after_14th,\n1,\n2,\n3,\n4,\n5,\n6,\n7,\n8,\n9,\n10,\n11,\n12,... typed_abi_call/typed_c2c.py:65-88 + // virtual: load result#0 from l-stack (no copy) (𝕡) app#0 | result#0 result.native typed_abi_call/typed_c2c.py:89 + extract 2 0 // (𝕡) app#0 | {extract} result.native typed_abi_call/typed_c2c.py:89 + // virtual: store tmp%3#0 to l-stack (no copy) (𝕡) app#0 | tmp%3#0 result.native typed_abi_call/typed_c2c.py:89 + // virtual: load tmp%3#0 from l-stack (no copy) (𝕡) app#0 | tmp%3#0 result.native == Bytes.from_hex("0F101112DEADBEEF14") typed_abi_call/typed_c2c.py:89 + byte 0x0f101112deadbeef14 // (𝕡) app#0 | tmp%3#0,0x0f101112deadbeef14 Bytes.from_hex("0F101112DEADBEEF14") typed_abi_call/typed_c2c.py:89 + == // (𝕡) app#0 | {==} result.native == Bytes.from_hex("0F101112DEADBEEF14") typed_abi_call/typed_c2c.py:89 + // virtual: store tmp%4#0 to l-stack (no copy) (𝕡) app#0 | tmp%4#0 result.native == Bytes.from_hex("0F101112DEADBEEF14") typed_abi_call/typed_c2c.py:89 + // virtual: load tmp%4#0 from l-stack (no copy) (𝕡) app#0 | tmp%4#0 assert result.native == Bytes.from_hex("0F101112DEADBEEF14") typed_abi_call/typed_c2c.py:89 + assert // (𝕡) app#0 | assert result.native == Bytes.from_hex("0F101112DEADBEEF14") typed_abi_call/typed_c2c.py:89 + retsub // // test_cases.typed_abi_call.typed_c2c.Greeter.test_void(app: uint64) -> void: test_void: - proto 1 0 // (𝕡) app#0 | @arc4.abimethod()\ndef test_void(self, app: Application) -> None: typed_abi_call/typed_c2c.py:91-92 + proto 1 0 // (𝕡) app#0 | @arc4.abimethod()\ndef test_void(self, app: Application) -> None: typed_abi_call/typed_c2c.py:91-92 test_void_block@0: - itxn_begin // (𝕡) app#0 | arc4.abi_call(LOG_METHOD_NAME + "(string)void", "World1", app_id=app) typed_abi_call/typed_c2c.py:93 - frame_dig -1 // load app#0 from parameters (𝕡) app#0 | app#0 - itxn_field ApplicationID // (𝕡) app#0 | - method "log(string)void" // (𝕡) app#0 | method<"log(string)void"> arc4.abi_call(LOG_METHOD_NAME + "(string)void", "World1", app_id=app) typed_abi_call/typed_c2c.py:93 - itxn_field ApplicationArgs // (𝕡) app#0 | - byte 0x0006576f726c6431 // (𝕡) app#0 | 0x0006576f726c6431 "World1" typed_abi_call/typed_c2c.py:93 - itxn_field ApplicationArgs // (𝕡) app#0 | - int appl // (𝕡) app#0 | appl arc4.abi_call(LOG_METHOD_NAME + "(string)void", "World1", app_id=app) typed_abi_call/typed_c2c.py:93 - itxn_field TypeEnum // (𝕡) app#0 | - int 0 // (𝕡) app#0 | 0 arc4.abi_call(LOG_METHOD_NAME + "(string)void", "World1", app_id=app) typed_abi_call/typed_c2c.py:93 - itxn_field Fee // (𝕡) app#0 | - itxn_submit // (𝕡) app#0 | arc4.abi_call(LOG_METHOD_NAME + "(string)void", "World1", app_id=app) typed_abi_call/typed_c2c.py:93 - itxn LastLog // (𝕡) app#0 | {itxn} arc4.abi_call(LOG_METHOD_NAME + "(string)void", "World1", app_id=app) typed_abi_call/typed_c2c.py:93 - // virtual: store txn.LastLog#0 to l-stack (no copy) (𝕡) app#0 | txn.LastLog#0 arc4.abi_call(LOG_METHOD_NAME + "(string)void", "World1", app_id=app) typed_abi_call/typed_c2c.py:93 - // virtual: load txn.LastLog#0 from l-stack (no copy) (𝕡) app#0 | txn.LastLog#0 txn.last_log == b"World1" typed_abi_call/typed_c2c.py:94 - byte 0x576f726c6431 // (𝕡) app#0 | txn.LastLog#0,0x576f726c6431 b"World1" typed_abi_call/typed_c2c.py:94 - == // (𝕡) app#0 | {==} txn.last_log == b"World1" typed_abi_call/typed_c2c.py:94 - // virtual: store tmp%0#0 to l-stack (no copy) (𝕡) app#0 | tmp%0#0 txn.last_log == b"World1" typed_abi_call/typed_c2c.py:94 - // virtual: load tmp%0#0 from l-stack (no copy) (𝕡) app#0 | tmp%0#0 assert txn.last_log == b"World1" typed_abi_call/typed_c2c.py:94 - assert // (𝕡) app#0 | assert txn.last_log == b"World1" typed_abi_call/typed_c2c.py:94 - itxn_begin // (𝕡) app#0 | arc4.abi_call(LOG_METHOD_NAME + "(string)", "World2", app_id=app) typed_abi_call/typed_c2c.py:96 - frame_dig -1 // load app#0 from parameters (𝕡) app#0 | app#0 - itxn_field ApplicationID // (𝕡) app#0 | - method "log(string)void" // (𝕡) app#0 | method<"log(string)void"> arc4.abi_call(LOG_METHOD_NAME + "(string)", "World2", app_id=app) typed_abi_call/typed_c2c.py:96 - itxn_field ApplicationArgs // (𝕡) app#0 | - byte 0x0006576f726c6432 // (𝕡) app#0 | 0x0006576f726c6432 "World2" typed_abi_call/typed_c2c.py:96 - itxn_field ApplicationArgs // (𝕡) app#0 | - int appl // (𝕡) app#0 | appl arc4.abi_call(LOG_METHOD_NAME + "(string)", "World2", app_id=app) typed_abi_call/typed_c2c.py:96 - itxn_field TypeEnum // (𝕡) app#0 | - int 0 // (𝕡) app#0 | 0 arc4.abi_call(LOG_METHOD_NAME + "(string)", "World2", app_id=app) typed_abi_call/typed_c2c.py:96 - itxn_field Fee // (𝕡) app#0 | - itxn_submit // (𝕡) app#0 | arc4.abi_call(LOG_METHOD_NAME + "(string)", "World2", app_id=app) typed_abi_call/typed_c2c.py:96 - itxn LastLog // (𝕡) app#0 | {itxn} arc4.abi_call(LOG_METHOD_NAME + "(string)", "World2", app_id=app) typed_abi_call/typed_c2c.py:96 - // virtual: store txn.LastLog#0 to l-stack (no copy) (𝕡) app#0 | txn.LastLog#0 arc4.abi_call(LOG_METHOD_NAME + "(string)", "World2", app_id=app) typed_abi_call/typed_c2c.py:96 - // virtual: load txn.LastLog#0 from l-stack (no copy) (𝕡) app#0 | txn.LastLog#0 txn.last_log == b"World2" typed_abi_call/typed_c2c.py:97 - byte 0x576f726c6432 // (𝕡) app#0 | txn.LastLog#0,0x576f726c6432 b"World2" typed_abi_call/typed_c2c.py:97 - == // (𝕡) app#0 | {==} txn.last_log == b"World2" typed_abi_call/typed_c2c.py:97 - // virtual: store tmp%1#0 to l-stack (no copy) (𝕡) app#0 | tmp%1#0 txn.last_log == b"World2" typed_abi_call/typed_c2c.py:97 - // virtual: load tmp%1#0 from l-stack (no copy) (𝕡) app#0 | tmp%1#0 assert txn.last_log == b"World2" typed_abi_call/typed_c2c.py:97 - assert // (𝕡) app#0 | assert txn.last_log == b"World2" typed_abi_call/typed_c2c.py:97 - itxn_begin // (𝕡) app#0 | arc4.abi_call(LOG_METHOD_NAME, arc4.String("World3"), app_id=app) typed_abi_call/typed_c2c.py:99 - frame_dig -1 // load app#0 from parameters (𝕡) app#0 | app#0 - itxn_field ApplicationID // (𝕡) app#0 | - method "log(string)void" // (𝕡) app#0 | method<"log(string)void"> arc4.abi_call(LOG_METHOD_NAME, arc4.String("World3"), app_id=app) typed_abi_call/typed_c2c.py:99 - itxn_field ApplicationArgs // (𝕡) app#0 | - byte 0x0006576f726c6433 // (𝕡) app#0 | 0x0006576f726c6433 arc4.String("World3") typed_abi_call/typed_c2c.py:99 - itxn_field ApplicationArgs // (𝕡) app#0 | - int appl // (𝕡) app#0 | appl arc4.abi_call(LOG_METHOD_NAME, arc4.String("World3"), app_id=app) typed_abi_call/typed_c2c.py:99 - itxn_field TypeEnum // (𝕡) app#0 | - int 0 // (𝕡) app#0 | 0 arc4.abi_call(LOG_METHOD_NAME, arc4.String("World3"), app_id=app) typed_abi_call/typed_c2c.py:99 - itxn_field Fee // (𝕡) app#0 | - itxn_submit // (𝕡) app#0 | arc4.abi_call(LOG_METHOD_NAME, arc4.String("World3"), app_id=app) typed_abi_call/typed_c2c.py:99 - itxn LastLog // (𝕡) app#0 | {itxn} arc4.abi_call(LOG_METHOD_NAME, arc4.String("World3"), app_id=app) typed_abi_call/typed_c2c.py:99 - // virtual: store txn.LastLog#0 to l-stack (no copy) (𝕡) app#0 | txn.LastLog#0 arc4.abi_call(LOG_METHOD_NAME, arc4.String("World3"), app_id=app) typed_abi_call/typed_c2c.py:99 - // virtual: load txn.LastLog#0 from l-stack (no copy) (𝕡) app#0 | txn.LastLog#0 txn.last_log == b"World3" typed_abi_call/typed_c2c.py:100 - byte 0x576f726c6433 // (𝕡) app#0 | txn.LastLog#0,0x576f726c6433 b"World3" typed_abi_call/typed_c2c.py:100 - == // (𝕡) app#0 | {==} txn.last_log == b"World3" typed_abi_call/typed_c2c.py:100 - // virtual: store tmp%2#0 to l-stack (no copy) (𝕡) app#0 | tmp%2#0 txn.last_log == b"World3" typed_abi_call/typed_c2c.py:100 - // virtual: load tmp%2#0 from l-stack (no copy) (𝕡) app#0 | tmp%2#0 assert txn.last_log == b"World3" typed_abi_call/typed_c2c.py:100 - assert // (𝕡) app#0 | assert txn.last_log == b"World3" typed_abi_call/typed_c2c.py:100 - itxn_begin // (𝕡) app#0 | arc4.abi_call(Logger.log_string, "World4", app_id=app) typed_abi_call/typed_c2c.py:102 - frame_dig -1 // load app#0 from parameters (𝕡) app#0 | app#0 - itxn_field ApplicationID // (𝕡) app#0 | - method "log(string)void" // (𝕡) app#0 | method<"log(string)void"> arc4.abi_call(Logger.log_string, "World4", app_id=app) typed_abi_call/typed_c2c.py:102 - itxn_field ApplicationArgs // (𝕡) app#0 | - byte 0x0006576f726c6434 // (𝕡) app#0 | 0x0006576f726c6434 "World4" typed_abi_call/typed_c2c.py:102 - itxn_field ApplicationArgs // (𝕡) app#0 | - int appl // (𝕡) app#0 | appl arc4.abi_call(Logger.log_string, "World4", app_id=app) typed_abi_call/typed_c2c.py:102 - itxn_field TypeEnum // (𝕡) app#0 | - int 0 // (𝕡) app#0 | 0 arc4.abi_call(Logger.log_string, "World4", app_id=app) typed_abi_call/typed_c2c.py:102 - itxn_field Fee // (𝕡) app#0 | - itxn_submit // (𝕡) app#0 | arc4.abi_call(Logger.log_string, "World4", app_id=app) typed_abi_call/typed_c2c.py:102 - itxn LastLog // (𝕡) app#0 | {itxn} arc4.abi_call(Logger.log_string, "World4", app_id=app) typed_abi_call/typed_c2c.py:102 - // virtual: store txn.LastLog#0 to l-stack (no copy) (𝕡) app#0 | txn.LastLog#0 arc4.abi_call(Logger.log_string, "World4", app_id=app) typed_abi_call/typed_c2c.py:102 - // virtual: load txn.LastLog#0 from l-stack (no copy) (𝕡) app#0 | txn.LastLog#0 txn.last_log == b"World4" typed_abi_call/typed_c2c.py:103 - byte 0x576f726c6434 // (𝕡) app#0 | txn.LastLog#0,0x576f726c6434 b"World4" typed_abi_call/typed_c2c.py:103 - == // (𝕡) app#0 | {==} txn.last_log == b"World4" typed_abi_call/typed_c2c.py:103 - // virtual: store tmp%3#0 to l-stack (no copy) (𝕡) app#0 | tmp%3#0 txn.last_log == b"World4" typed_abi_call/typed_c2c.py:103 - // virtual: load tmp%3#0 from l-stack (no copy) (𝕡) app#0 | tmp%3#0 assert txn.last_log == b"World4" typed_abi_call/typed_c2c.py:103 - assert // (𝕡) app#0 | assert txn.last_log == b"World4" typed_abi_call/typed_c2c.py:103 - retsub // + itxn_begin // (𝕡) app#0 | arc4.abi_call(LOG_METHOD_NAME + "(string)void", "World1", app_id=app) typed_abi_call/typed_c2c.py:93 + frame_dig -1 // load app#0 from parameters (𝕡) app#0 | app#0 + itxn_field ApplicationID // (𝕡) app#0 | + method "log(string)void" // (𝕡) app#0 | method<"log(string)void"> arc4.abi_call(LOG_METHOD_NAME + "(string)void", "World1", app_id=app) typed_abi_call/typed_c2c.py:93 + itxn_field ApplicationArgs // (𝕡) app#0 | + byte 0x0006576f726c6431 // (𝕡) app#0 | 0x0006576f726c6431 "World1" typed_abi_call/typed_c2c.py:93 + itxn_field ApplicationArgs // (𝕡) app#0 | + int appl // (𝕡) app#0 | appl arc4.abi_call(LOG_METHOD_NAME + "(string)void", "World1", app_id=app) typed_abi_call/typed_c2c.py:93 + itxn_field TypeEnum // (𝕡) app#0 | + int 0 // (𝕡) app#0 | 0 arc4.abi_call(LOG_METHOD_NAME + "(string)void", "World1", app_id=app) typed_abi_call/typed_c2c.py:93 + itxn_field Fee // (𝕡) app#0 | + itxn_submit // (𝕡) app#0 | arc4.abi_call(LOG_METHOD_NAME + "(string)void", "World1", app_id=app) typed_abi_call/typed_c2c.py:93 + itxn LastLog // (𝕡) app#0 | {itxn} arc4.abi_call(LOG_METHOD_NAME + "(string)void", "World1", app_id=app) typed_abi_call/typed_c2c.py:93 + // virtual: store txn.LastLog#0 to l-stack (no copy) (𝕡) app#0 | txn.LastLog#0 arc4.abi_call(LOG_METHOD_NAME + "(string)void", "World1", app_id=app) typed_abi_call/typed_c2c.py:93 + // virtual: load txn.LastLog#0 from l-stack (no copy) (𝕡) app#0 | txn.LastLog#0 txn.last_log == b"World1" typed_abi_call/typed_c2c.py:94 + byte 0x576f726c6431 // (𝕡) app#0 | txn.LastLog#0,0x576f726c6431 b"World1" typed_abi_call/typed_c2c.py:94 + == // (𝕡) app#0 | {==} txn.last_log == b"World1" typed_abi_call/typed_c2c.py:94 + // virtual: store tmp%0#0 to l-stack (no copy) (𝕡) app#0 | tmp%0#0 txn.last_log == b"World1" typed_abi_call/typed_c2c.py:94 + // virtual: load tmp%0#0 from l-stack (no copy) (𝕡) app#0 | tmp%0#0 assert txn.last_log == b"World1" typed_abi_call/typed_c2c.py:94 + assert // (𝕡) app#0 | assert txn.last_log == b"World1" typed_abi_call/typed_c2c.py:94 + itxn_begin // (𝕡) app#0 | arc4.abi_call(LOG_METHOD_NAME + "(string)", "World2", app_id=app) typed_abi_call/typed_c2c.py:96 + frame_dig -1 // load app#0 from parameters (𝕡) app#0 | app#0 + itxn_field ApplicationID // (𝕡) app#0 | + method "log(string)void" // (𝕡) app#0 | method<"log(string)void"> arc4.abi_call(LOG_METHOD_NAME + "(string)", "World2", app_id=app) typed_abi_call/typed_c2c.py:96 + itxn_field ApplicationArgs // (𝕡) app#0 | + byte 0x0006576f726c6432 // (𝕡) app#0 | 0x0006576f726c6432 "World2" typed_abi_call/typed_c2c.py:96 + itxn_field ApplicationArgs // (𝕡) app#0 | + int appl // (𝕡) app#0 | appl arc4.abi_call(LOG_METHOD_NAME + "(string)", "World2", app_id=app) typed_abi_call/typed_c2c.py:96 + itxn_field TypeEnum // (𝕡) app#0 | + int 0 // (𝕡) app#0 | 0 arc4.abi_call(LOG_METHOD_NAME + "(string)", "World2", app_id=app) typed_abi_call/typed_c2c.py:96 + itxn_field Fee // (𝕡) app#0 | + itxn_submit // (𝕡) app#0 | arc4.abi_call(LOG_METHOD_NAME + "(string)", "World2", app_id=app) typed_abi_call/typed_c2c.py:96 + itxn LastLog // (𝕡) app#0 | {itxn} arc4.abi_call(LOG_METHOD_NAME + "(string)", "World2", app_id=app) typed_abi_call/typed_c2c.py:96 + // virtual: store txn.LastLog#0 to l-stack (no copy) (𝕡) app#0 | txn.LastLog#0 arc4.abi_call(LOG_METHOD_NAME + "(string)", "World2", app_id=app) typed_abi_call/typed_c2c.py:96 + // virtual: load txn.LastLog#0 from l-stack (no copy) (𝕡) app#0 | txn.LastLog#0 txn.last_log == b"World2" typed_abi_call/typed_c2c.py:97 + byte 0x576f726c6432 // (𝕡) app#0 | txn.LastLog#0,0x576f726c6432 b"World2" typed_abi_call/typed_c2c.py:97 + == // (𝕡) app#0 | {==} txn.last_log == b"World2" typed_abi_call/typed_c2c.py:97 + // virtual: store tmp%1#0 to l-stack (no copy) (𝕡) app#0 | tmp%1#0 txn.last_log == b"World2" typed_abi_call/typed_c2c.py:97 + // virtual: load tmp%1#0 from l-stack (no copy) (𝕡) app#0 | tmp%1#0 assert txn.last_log == b"World2" typed_abi_call/typed_c2c.py:97 + assert // (𝕡) app#0 | assert txn.last_log == b"World2" typed_abi_call/typed_c2c.py:97 + itxn_begin // (𝕡) app#0 | arc4.abi_call(LOG_METHOD_NAME, arc4.String("World3"), app_id=app) typed_abi_call/typed_c2c.py:99 + frame_dig -1 // load app#0 from parameters (𝕡) app#0 | app#0 + itxn_field ApplicationID // (𝕡) app#0 | + method "log(string)void" // (𝕡) app#0 | method<"log(string)void"> arc4.abi_call(LOG_METHOD_NAME, arc4.String("World3"), app_id=app) typed_abi_call/typed_c2c.py:99 + itxn_field ApplicationArgs // (𝕡) app#0 | + byte 0x0006576f726c6433 // (𝕡) app#0 | 0x0006576f726c6433 arc4.String("World3") typed_abi_call/typed_c2c.py:99 + itxn_field ApplicationArgs // (𝕡) app#0 | + int appl // (𝕡) app#0 | appl arc4.abi_call(LOG_METHOD_NAME, arc4.String("World3"), app_id=app) typed_abi_call/typed_c2c.py:99 + itxn_field TypeEnum // (𝕡) app#0 | + int 0 // (𝕡) app#0 | 0 arc4.abi_call(LOG_METHOD_NAME, arc4.String("World3"), app_id=app) typed_abi_call/typed_c2c.py:99 + itxn_field Fee // (𝕡) app#0 | + itxn_submit // (𝕡) app#0 | arc4.abi_call(LOG_METHOD_NAME, arc4.String("World3"), app_id=app) typed_abi_call/typed_c2c.py:99 + itxn LastLog // (𝕡) app#0 | {itxn} arc4.abi_call(LOG_METHOD_NAME, arc4.String("World3"), app_id=app) typed_abi_call/typed_c2c.py:99 + // virtual: store txn.LastLog#0 to l-stack (no copy) (𝕡) app#0 | txn.LastLog#0 arc4.abi_call(LOG_METHOD_NAME, arc4.String("World3"), app_id=app) typed_abi_call/typed_c2c.py:99 + // virtual: load txn.LastLog#0 from l-stack (no copy) (𝕡) app#0 | txn.LastLog#0 txn.last_log == b"World3" typed_abi_call/typed_c2c.py:100 + byte 0x576f726c6433 // (𝕡) app#0 | txn.LastLog#0,0x576f726c6433 b"World3" typed_abi_call/typed_c2c.py:100 + == // (𝕡) app#0 | {==} txn.last_log == b"World3" typed_abi_call/typed_c2c.py:100 + // virtual: store tmp%2#0 to l-stack (no copy) (𝕡) app#0 | tmp%2#0 txn.last_log == b"World3" typed_abi_call/typed_c2c.py:100 + // virtual: load tmp%2#0 from l-stack (no copy) (𝕡) app#0 | tmp%2#0 assert txn.last_log == b"World3" typed_abi_call/typed_c2c.py:100 + assert // (𝕡) app#0 | assert txn.last_log == b"World3" typed_abi_call/typed_c2c.py:100 + itxn_begin // (𝕡) app#0 | arc4.abi_call(Logger.log_string, "World4", app_id=app) typed_abi_call/typed_c2c.py:102 + frame_dig -1 // load app#0 from parameters (𝕡) app#0 | app#0 + itxn_field ApplicationID // (𝕡) app#0 | + method "log(string)void" // (𝕡) app#0 | method<"log(string)void"> arc4.abi_call(Logger.log_string, "World4", app_id=app) typed_abi_call/typed_c2c.py:102 + itxn_field ApplicationArgs // (𝕡) app#0 | + byte 0x0006576f726c6434 // (𝕡) app#0 | 0x0006576f726c6434 "World4" typed_abi_call/typed_c2c.py:102 + itxn_field ApplicationArgs // (𝕡) app#0 | + int appl // (𝕡) app#0 | appl arc4.abi_call(Logger.log_string, "World4", app_id=app) typed_abi_call/typed_c2c.py:102 + itxn_field TypeEnum // (𝕡) app#0 | + int 0 // (𝕡) app#0 | 0 arc4.abi_call(Logger.log_string, "World4", app_id=app) typed_abi_call/typed_c2c.py:102 + itxn_field Fee // (𝕡) app#0 | + itxn_submit // (𝕡) app#0 | arc4.abi_call(Logger.log_string, "World4", app_id=app) typed_abi_call/typed_c2c.py:102 + itxn LastLog // (𝕡) app#0 | {itxn} arc4.abi_call(Logger.log_string, "World4", app_id=app) typed_abi_call/typed_c2c.py:102 + // virtual: store txn.LastLog#0 to l-stack (no copy) (𝕡) app#0 | txn.LastLog#0 arc4.abi_call(Logger.log_string, "World4", app_id=app) typed_abi_call/typed_c2c.py:102 + // virtual: load txn.LastLog#0 from l-stack (no copy) (𝕡) app#0 | txn.LastLog#0 txn.last_log == b"World4" typed_abi_call/typed_c2c.py:103 + byte 0x576f726c6434 // (𝕡) app#0 | txn.LastLog#0,0x576f726c6434 b"World4" typed_abi_call/typed_c2c.py:103 + == // (𝕡) app#0 | {==} txn.last_log == b"World4" typed_abi_call/typed_c2c.py:103 + // virtual: store tmp%3#0 to l-stack (no copy) (𝕡) app#0 | tmp%3#0 txn.last_log == b"World4" typed_abi_call/typed_c2c.py:103 + // virtual: load tmp%3#0 from l-stack (no copy) (𝕡) app#0 | tmp%3#0 assert txn.last_log == b"World4" typed_abi_call/typed_c2c.py:103 + assert // (𝕡) app#0 | assert txn.last_log == b"World4" typed_abi_call/typed_c2c.py:103 + retsub // // test_cases.typed_abi_call.typed_c2c.Greeter.test_ref_types(app: uint64, asset: uint64) -> void: test_ref_types: - proto 2 0 // (𝕡) app#0,asset#0 | @arc4.abimethod()\ndef test_ref_types(self, app: Application, asset: Asset) -> None: typed_abi_call/typed_c2c.py:105-106 + proto 2 0 // (𝕡) app#0,asset#0 | @arc4.abimethod()\ndef test_ref_types(self, app: Application, asset: Asset) -> None: typed_abi_call/typed_c2c.py:105-106 test_ref_types_block@0: - itxn_begin // (𝕡) app#0,asset#0 | arc4.abi_call(\nLogger.log_asset_account_app,\nasset,\nGlobal.current_application_address,\napp,\... typed_abi_call/typed_c2c.py:107-113 - global CurrentApplicationAddress // (𝕡) app#0,asset#0 | {global} Global.current_application_address typed_abi_call/typed_c2c.py:110 - // virtual: store tmp%0#0 to l-stack (no copy) (𝕡) app#0,asset#0 | tmp%0#0 Global.current_application_address typed_abi_call/typed_c2c.py:110 - frame_dig -2 // load app#0 from parameters (𝕡) app#0,asset#0 | tmp%0#0,app#0 - itxn_field ApplicationID // (𝕡) app#0,asset#0 | tmp%0#0 - frame_dig -1 // load asset#0 from parameters (𝕡) app#0,asset#0 | tmp%0#0,asset#0 - itxn_field Assets // (𝕡) app#0,asset#0 | tmp%0#0 - frame_dig -2 // load app#0 from parameters (𝕡) app#0,asset#0 | tmp%0#0,app#0 - itxn_field Applications // (𝕡) app#0,asset#0 | tmp%0#0 - // virtual: load tmp%0#0 from l-stack (no copy) (𝕡) app#0,asset#0 | tmp%0#0 - itxn_field Accounts // (𝕡) app#0,asset#0 | - method "log(asset,account,application)void" // (𝕡) app#0,asset#0 | method<"log(asset,account,application)void"> arc4.abi_call(\nLogger.log_asset_account_app,\nasset,\nGlobal.current_application_address,\napp,\... typed_abi_call/typed_c2c.py:107-113 - itxn_field ApplicationArgs // (𝕡) app#0,asset#0 | - byte 0x00 // (𝕡) app#0,asset#0 | 0x00 asset typed_abi_call/typed_c2c.py:109 - itxn_field ApplicationArgs // (𝕡) app#0,asset#0 | - byte 0x01 // (𝕡) app#0,asset#0 | 0x01 Global.current_application_address typed_abi_call/typed_c2c.py:110 - itxn_field ApplicationArgs // (𝕡) app#0,asset#0 | - byte 0x01 // (𝕡) app#0,asset#0 | 0x01 app typed_abi_call/typed_c2c.py:111 - itxn_field ApplicationArgs // (𝕡) app#0,asset#0 | - int appl // (𝕡) app#0,asset#0 | appl arc4.abi_call(\nLogger.log_asset_account_app,\nasset,\nGlobal.current_application_address,\napp,\... typed_abi_call/typed_c2c.py:107-113 - itxn_field TypeEnum // (𝕡) app#0,asset#0 | - int 0 // (𝕡) app#0,asset#0 | 0 arc4.abi_call(\nLogger.log_asset_account_app,\nasset,\nGlobal.current_application_address,\napp,\... typed_abi_call/typed_c2c.py:107-113 - itxn_field Fee // (𝕡) app#0,asset#0 | - itxn_submit // (𝕡) app#0,asset#0 | arc4.abi_call(\nLogger.log_asset_account_app,\nasset,\nGlobal.current_application_address,\napp,\... typed_abi_call/typed_c2c.py:107-113 - itxn LastLog // (𝕡) app#0,asset#0 | {itxn} arc4.abi_call(\nLogger.log_asset_account_app,\nasset,\nGlobal.current_application_address,\napp,\... typed_abi_call/typed_c2c.py:107-113 - // virtual: store txn.LastLog#0 to l-stack (no copy) (𝕡) app#0,asset#0 | txn.LastLog#0 arc4.abi_call(\nLogger.log_asset_account_app,\nasset,\nGlobal.current_application_address,\napp,\... typed_abi_call/typed_c2c.py:107-113 - frame_dig -1 // load asset#0 from parameters (𝕡) app#0,asset#0 | txn.LastLog#0,asset#0 asset.name typed_abi_call/typed_c2c.py:116 - asset_params_get AssetName // (𝕡) app#0,asset#0 | txn.LastLog#0,{asset_params_get}.0,{asset_params_get}.1 asset.name typed_abi_call/typed_c2c.py:116 - // virtual: store check%0#0 to l-stack (no copy) (𝕡) app#0,asset#0 | txn.LastLog#0,check%0#0,{asset_params_get}.0 asset.name typed_abi_call/typed_c2c.py:116 - // virtual: store value%0#0 to l-stack (no copy) (𝕡) app#0,asset#0 | txn.LastLog#0,value%0#0,check%0#0 asset.name typed_abi_call/typed_c2c.py:116 - // virtual: load check%0#0 from l-stack (no copy) (𝕡) app#0,asset#0 | txn.LastLog#0,value%0#0,check%0#0 asset.name typed_abi_call/typed_c2c.py:116 - assert // asset exists // (𝕡) app#0,asset#0 | txn.LastLog#0,value%0#0 asset.name typed_abi_call/typed_c2c.py:116 - global CurrentApplicationAddress // (𝕡) app#0,asset#0 | txn.LastLog#0,value%0#0,{global} Global.current_application_address typed_abi_call/typed_c2c.py:116 - // virtual: store tmp%1#0 to l-stack (no copy) (𝕡) app#0,asset#0 | txn.LastLog#0,value%0#0,tmp%1#0 Global.current_application_address typed_abi_call/typed_c2c.py:116 - // virtual: load value%0#0 from l-stack (no copy) (𝕡) app#0,asset#0 | txn.LastLog#0,tmp%1#0,value%0#0 asset.name + Global.current_application_address.bytes typed_abi_call/typed_c2c.py:116 - // virtual: load tmp%1#0 from l-stack (no copy) (𝕡) app#0,asset#0 | txn.LastLog#0,value%0#0,tmp%1#0 asset.name + Global.current_application_address.bytes typed_abi_call/typed_c2c.py:116 - concat // (𝕡) app#0,asset#0 | txn.LastLog#0,{concat} asset.name + Global.current_application_address.bytes typed_abi_call/typed_c2c.py:116 - // virtual: store tmp%2#0 to l-stack (no copy) (𝕡) app#0,asset#0 | txn.LastLog#0,tmp%2#0 asset.name + Global.current_application_address.bytes typed_abi_call/typed_c2c.py:116 - frame_dig -2 // load app#0 from parameters (𝕡) app#0,asset#0 | txn.LastLog#0,tmp%2#0,app#0 app.address typed_abi_call/typed_c2c.py:116 - app_params_get AppAddress // (𝕡) app#0,asset#0 | txn.LastLog#0,tmp%2#0,{app_params_get}.0,{app_params_get}.1 app.address typed_abi_call/typed_c2c.py:116 - // virtual: store check%1#0 to l-stack (no copy) (𝕡) app#0,asset#0 | txn.LastLog#0,tmp%2#0,check%1#0,{app_params_get}.0 app.address typed_abi_call/typed_c2c.py:116 - // virtual: store value%1#0 to l-stack (no copy) (𝕡) app#0,asset#0 | txn.LastLog#0,tmp%2#0,value%1#0,check%1#0 app.address typed_abi_call/typed_c2c.py:116 - // virtual: load check%1#0 from l-stack (no copy) (𝕡) app#0,asset#0 | txn.LastLog#0,tmp%2#0,value%1#0,check%1#0 app.address typed_abi_call/typed_c2c.py:116 - assert // application exists // (𝕡) app#0,asset#0 | txn.LastLog#0,tmp%2#0,value%1#0 app.address typed_abi_call/typed_c2c.py:116 - // virtual: load tmp%2#0 from l-stack (no copy) (𝕡) app#0,asset#0 | txn.LastLog#0,value%1#0,tmp%2#0 asset.name + Global.current_application_address.bytes + app.address.bytes typed_abi_call/typed_c2c.py:116 - // virtual: load value%1#0 from l-stack (no copy) (𝕡) app#0,asset#0 | txn.LastLog#0,tmp%2#0,value%1#0 asset.name + Global.current_application_address.bytes + app.address.bytes typed_abi_call/typed_c2c.py:116 - concat // (𝕡) app#0,asset#0 | txn.LastLog#0,{concat} asset.name + Global.current_application_address.bytes + app.address.bytes typed_abi_call/typed_c2c.py:116 - // virtual: store tmp%3#0 to l-stack (no copy) (𝕡) app#0,asset#0 | txn.LastLog#0,tmp%3#0 asset.name + Global.current_application_address.bytes + app.address.bytes typed_abi_call/typed_c2c.py:116 - // virtual: load txn.LastLog#0 from l-stack (no copy) (𝕡) app#0,asset#0 | tmp%3#0,txn.LastLog#0 txn.last_log\n== asset.name + Global.current_application_address.bytes + app.address.bytes typed_abi_call/typed_c2c.py:115-116 - // virtual: load tmp%3#0 from l-stack (no copy) (𝕡) app#0,asset#0 | txn.LastLog#0,tmp%3#0 txn.last_log\n== asset.name + Global.current_application_address.bytes + app.address.bytes typed_abi_call/typed_c2c.py:115-116 - == // (𝕡) app#0,asset#0 | {==} txn.last_log\n== asset.name + Global.current_application_address.bytes + app.address.bytes typed_abi_call/typed_c2c.py:115-116 - // virtual: store tmp%4#0 to l-stack (no copy) (𝕡) app#0,asset#0 | tmp%4#0 txn.last_log\n== asset.name + Global.current_application_address.bytes + app.address.bytes typed_abi_call/typed_c2c.py:115-116 - // virtual: load tmp%4#0 from l-stack (no copy) (𝕡) app#0,asset#0 | tmp%4#0 assert (\ntxn.last_log\n== asset.name + Global.current_application_address.bytes + app.address.by... typed_abi_call/typed_c2c.py:114-117 - assert // (𝕡) app#0,asset#0 | assert (\ntxn.last_log\n== asset.name + Global.current_application_address.bytes + app.address.by... typed_abi_call/typed_c2c.py:114-117 - retsub // + itxn_begin // (𝕡) app#0,asset#0 | arc4.abi_call(\nLogger.log_asset_account_app,\nasset,\nGlobal.current_application_address,\napp,\... typed_abi_call/typed_c2c.py:107-113 + global CurrentApplicationAddress // (𝕡) app#0,asset#0 | {global} Global.current_application_address typed_abi_call/typed_c2c.py:110 + // virtual: store tmp%0#0 to l-stack (no copy) (𝕡) app#0,asset#0 | tmp%0#0 Global.current_application_address typed_abi_call/typed_c2c.py:110 + frame_dig -2 // load app#0 from parameters (𝕡) app#0,asset#0 | tmp%0#0,app#0 + itxn_field ApplicationID // (𝕡) app#0,asset#0 | tmp%0#0 + frame_dig -1 // load asset#0 from parameters (𝕡) app#0,asset#0 | tmp%0#0,asset#0 + itxn_field Assets // (𝕡) app#0,asset#0 | tmp%0#0 + frame_dig -2 // load app#0 from parameters (𝕡) app#0,asset#0 | tmp%0#0,app#0 + itxn_field Applications // (𝕡) app#0,asset#0 | tmp%0#0 + // virtual: load tmp%0#0 from l-stack (no copy) (𝕡) app#0,asset#0 | tmp%0#0 + itxn_field Accounts // (𝕡) app#0,asset#0 | + method "log(asset,account,application)void" // (𝕡) app#0,asset#0 | method<"log(asset,account,application)void"> arc4.abi_call(\nLogger.log_asset_account_app,\nasset,\nGlobal.current_application_address,\napp,\... typed_abi_call/typed_c2c.py:107-113 + itxn_field ApplicationArgs // (𝕡) app#0,asset#0 | + byte 0x00 // (𝕡) app#0,asset#0 | 0x00 asset typed_abi_call/typed_c2c.py:109 + itxn_field ApplicationArgs // (𝕡) app#0,asset#0 | + byte 0x01 // (𝕡) app#0,asset#0 | 0x01 Global.current_application_address typed_abi_call/typed_c2c.py:110 + itxn_field ApplicationArgs // (𝕡) app#0,asset#0 | + byte 0x01 // (𝕡) app#0,asset#0 | 0x01 app typed_abi_call/typed_c2c.py:111 + itxn_field ApplicationArgs // (𝕡) app#0,asset#0 | + int appl // (𝕡) app#0,asset#0 | appl arc4.abi_call(\nLogger.log_asset_account_app,\nasset,\nGlobal.current_application_address,\napp,\... typed_abi_call/typed_c2c.py:107-113 + itxn_field TypeEnum // (𝕡) app#0,asset#0 | + int 0 // (𝕡) app#0,asset#0 | 0 arc4.abi_call(\nLogger.log_asset_account_app,\nasset,\nGlobal.current_application_address,\napp,\... typed_abi_call/typed_c2c.py:107-113 + itxn_field Fee // (𝕡) app#0,asset#0 | + itxn_submit // (𝕡) app#0,asset#0 | arc4.abi_call(\nLogger.log_asset_account_app,\nasset,\nGlobal.current_application_address,\napp,\... typed_abi_call/typed_c2c.py:107-113 + itxn LastLog // (𝕡) app#0,asset#0 | {itxn} arc4.abi_call(\nLogger.log_asset_account_app,\nasset,\nGlobal.current_application_address,\napp,\... typed_abi_call/typed_c2c.py:107-113 + // virtual: store txn.LastLog#0 to l-stack (no copy) (𝕡) app#0,asset#0 | txn.LastLog#0 arc4.abi_call(\nLogger.log_asset_account_app,\nasset,\nGlobal.current_application_address,\napp,\... typed_abi_call/typed_c2c.py:107-113 + frame_dig -1 // load asset#0 from parameters (𝕡) app#0,asset#0 | txn.LastLog#0,asset#0 asset.name typed_abi_call/typed_c2c.py:116 + asset_params_get AssetName // (𝕡) app#0,asset#0 | txn.LastLog#0,{asset_params_get}.0,{asset_params_get}.1 asset.name typed_abi_call/typed_c2c.py:116 + // virtual: store check%0#0 to l-stack (no copy) (𝕡) app#0,asset#0 | txn.LastLog#0,check%0#0,{asset_params_get}.0 asset.name typed_abi_call/typed_c2c.py:116 + // virtual: store value%0#0 to l-stack (no copy) (𝕡) app#0,asset#0 | txn.LastLog#0,value%0#0,check%0#0 asset.name typed_abi_call/typed_c2c.py:116 + // virtual: load check%0#0 from l-stack (no copy) (𝕡) app#0,asset#0 | txn.LastLog#0,value%0#0,check%0#0 asset.name typed_abi_call/typed_c2c.py:116 + assert // asset exists // (𝕡) app#0,asset#0 | txn.LastLog#0,value%0#0 asset.name typed_abi_call/typed_c2c.py:116 + global CurrentApplicationAddress // (𝕡) app#0,asset#0 | txn.LastLog#0,value%0#0,{global} Global.current_application_address typed_abi_call/typed_c2c.py:116 + // virtual: store tmp%1#0 to l-stack (no copy) (𝕡) app#0,asset#0 | txn.LastLog#0,value%0#0,tmp%1#0 Global.current_application_address typed_abi_call/typed_c2c.py:116 + // virtual: load value%0#0 from l-stack (no copy) (𝕡) app#0,asset#0 | txn.LastLog#0,tmp%1#0,value%0#0 asset.name + Global.current_application_address.bytes typed_abi_call/typed_c2c.py:116 + // virtual: load tmp%1#0 from l-stack (no copy) (𝕡) app#0,asset#0 | txn.LastLog#0,value%0#0,tmp%1#0 asset.name + Global.current_application_address.bytes typed_abi_call/typed_c2c.py:116 + concat // (𝕡) app#0,asset#0 | txn.LastLog#0,{concat} asset.name + Global.current_application_address.bytes typed_abi_call/typed_c2c.py:116 + // virtual: store tmp%2#0 to l-stack (no copy) (𝕡) app#0,asset#0 | txn.LastLog#0,tmp%2#0 asset.name + Global.current_application_address.bytes typed_abi_call/typed_c2c.py:116 + frame_dig -2 // load app#0 from parameters (𝕡) app#0,asset#0 | txn.LastLog#0,tmp%2#0,app#0 app.address typed_abi_call/typed_c2c.py:116 + app_params_get AppAddress // (𝕡) app#0,asset#0 | txn.LastLog#0,tmp%2#0,{app_params_get}.0,{app_params_get}.1 app.address typed_abi_call/typed_c2c.py:116 + // virtual: store check%1#0 to l-stack (no copy) (𝕡) app#0,asset#0 | txn.LastLog#0,tmp%2#0,check%1#0,{app_params_get}.0 app.address typed_abi_call/typed_c2c.py:116 + // virtual: store value%1#0 to l-stack (no copy) (𝕡) app#0,asset#0 | txn.LastLog#0,tmp%2#0,value%1#0,check%1#0 app.address typed_abi_call/typed_c2c.py:116 + // virtual: load check%1#0 from l-stack (no copy) (𝕡) app#0,asset#0 | txn.LastLog#0,tmp%2#0,value%1#0,check%1#0 app.address typed_abi_call/typed_c2c.py:116 + assert // application exists // (𝕡) app#0,asset#0 | txn.LastLog#0,tmp%2#0,value%1#0 app.address typed_abi_call/typed_c2c.py:116 + // virtual: load tmp%2#0 from l-stack (no copy) (𝕡) app#0,asset#0 | txn.LastLog#0,value%1#0,tmp%2#0 asset.name + Global.current_application_address.bytes + app.address.bytes typed_abi_call/typed_c2c.py:116 + // virtual: load value%1#0 from l-stack (no copy) (𝕡) app#0,asset#0 | txn.LastLog#0,tmp%2#0,value%1#0 asset.name + Global.current_application_address.bytes + app.address.bytes typed_abi_call/typed_c2c.py:116 + concat // (𝕡) app#0,asset#0 | txn.LastLog#0,{concat} asset.name + Global.current_application_address.bytes + app.address.bytes typed_abi_call/typed_c2c.py:116 + // virtual: store tmp%3#0 to l-stack (no copy) (𝕡) app#0,asset#0 | txn.LastLog#0,tmp%3#0 asset.name + Global.current_application_address.bytes + app.address.bytes typed_abi_call/typed_c2c.py:116 + // virtual: load txn.LastLog#0 from l-stack (no copy) (𝕡) app#0,asset#0 | tmp%3#0,txn.LastLog#0 txn.last_log\n== asset.name + Global.current_application_address.bytes + app.address.bytes typed_abi_call/typed_c2c.py:115-116 + // virtual: load tmp%3#0 from l-stack (no copy) (𝕡) app#0,asset#0 | txn.LastLog#0,tmp%3#0 txn.last_log\n== asset.name + Global.current_application_address.bytes + app.address.bytes typed_abi_call/typed_c2c.py:115-116 + == // (𝕡) app#0,asset#0 | {==} txn.last_log\n== asset.name + Global.current_application_address.bytes + app.address.bytes typed_abi_call/typed_c2c.py:115-116 + // virtual: store tmp%4#0 to l-stack (no copy) (𝕡) app#0,asset#0 | tmp%4#0 txn.last_log\n== asset.name + Global.current_application_address.bytes + app.address.bytes typed_abi_call/typed_c2c.py:115-116 + // virtual: load tmp%4#0 from l-stack (no copy) (𝕡) app#0,asset#0 | tmp%4#0 assert (\ntxn.last_log\n== asset.name + Global.current_application_address.bytes + app.address.by... typed_abi_call/typed_c2c.py:114-117 + assert // (𝕡) app#0,asset#0 | assert (\ntxn.last_log\n== asset.name + Global.current_application_address.bytes + app.address.by... typed_abi_call/typed_c2c.py:114-117 + retsub // // test_cases.typed_abi_call.typed_c2c.Greeter.test_native_string(app: uint64) -> void: test_native_string: - proto 1 0 // (𝕡) app#0 | @arc4.abimethod()\ndef test_native_string(self, app: Application) -> None: typed_abi_call/typed_c2c.py:119-120 + proto 1 0 // (𝕡) app#0 | @arc4.abimethod()\ndef test_native_string(self, app: Application) -> None: typed_abi_call/typed_c2c.py:119-120 test_native_string_block@0: - itxn_begin // (𝕡) app#0 | arc4.abi_call(Logger.echo_native_string, "s", app_id=app) typed_abi_call/typed_c2c.py:121 - frame_dig -1 // load app#0 from parameters (𝕡) app#0 | app#0 - itxn_field ApplicationID // (𝕡) app#0 | - method "echo_native_string(string)string" // (𝕡) app#0 | method<"echo_native_string(string)string"> arc4.abi_call(Logger.echo_native_string, "s", app_id=app) typed_abi_call/typed_c2c.py:121 - itxn_field ApplicationArgs // (𝕡) app#0 | - byte 0x000173 // (𝕡) app#0 | 0x000173 "s" typed_abi_call/typed_c2c.py:121 - itxn_field ApplicationArgs // (𝕡) app#0 | - int appl // (𝕡) app#0 | appl arc4.abi_call(Logger.echo_native_string, "s", app_id=app) typed_abi_call/typed_c2c.py:121 - itxn_field TypeEnum // (𝕡) app#0 | - int 0 // (𝕡) app#0 | 0 arc4.abi_call(Logger.echo_native_string, "s", app_id=app) typed_abi_call/typed_c2c.py:121 - itxn_field Fee // (𝕡) app#0 | - itxn_submit // (𝕡) app#0 | arc4.abi_call(Logger.echo_native_string, "s", app_id=app) typed_abi_call/typed_c2c.py:121 - itxn LastLog // (𝕡) app#0 | {itxn} arc4.abi_call(Logger.echo_native_string, "s", app_id=app) typed_abi_call/typed_c2c.py:121 - // virtual: store awst_tmp%0#0 to l-stack (no copy) (𝕡) app#0 | awst_tmp%0#0 arc4.abi_call(Logger.echo_native_string, "s", app_id=app) typed_abi_call/typed_c2c.py:121 - dup // load awst_tmp%0#0 from l-stack (copy) (𝕡) app#0 | awst_tmp%0#0,awst_tmp%0#0 arc4.abi_call(Logger.echo_native_string, "s", app_id=app) typed_abi_call/typed_c2c.py:121 - extract 4 0 // (𝕡) app#0 | awst_tmp%0#0,{extract} arc4.abi_call(Logger.echo_native_string, "s", app_id=app) typed_abi_call/typed_c2c.py:121 - cover 1 // store tmp%0#0 to l-stack (no copy) (𝕡) app#0 | tmp%0#0,awst_tmp%0#0 arc4.abi_call(Logger.echo_native_string, "s", app_id=app) typed_abi_call/typed_c2c.py:121 - // virtual: load awst_tmp%0#0 from l-stack (no copy) (𝕡) app#0 | tmp%0#0,awst_tmp%0#0 arc4.abi_call(Logger.echo_native_string, "s", app_id=app) typed_abi_call/typed_c2c.py:121 - extract 0 4 // (𝕡) app#0 | tmp%0#0,{extract} arc4.abi_call(Logger.echo_native_string, "s", app_id=app) typed_abi_call/typed_c2c.py:121 - // virtual: store tmp%1#0 to l-stack (no copy) (𝕡) app#0 | tmp%0#0,tmp%1#0 arc4.abi_call(Logger.echo_native_string, "s", app_id=app) typed_abi_call/typed_c2c.py:121 - // virtual: load tmp%1#0 from l-stack (no copy) (𝕡) app#0 | tmp%0#0,tmp%1#0 arc4.abi_call(Logger.echo_native_string, "s", app_id=app) typed_abi_call/typed_c2c.py:121 - byte 0x151f7c75 // (𝕡) app#0 | tmp%0#0,tmp%1#0,0x151f7c75 arc4.abi_call(Logger.echo_native_string, "s", app_id=app) typed_abi_call/typed_c2c.py:121 - == // (𝕡) app#0 | tmp%0#0,{==} arc4.abi_call(Logger.echo_native_string, "s", app_id=app) typed_abi_call/typed_c2c.py:121 - // virtual: store tmp%2#0 to l-stack (no copy) (𝕡) app#0 | tmp%0#0,tmp%2#0 arc4.abi_call(Logger.echo_native_string, "s", app_id=app) typed_abi_call/typed_c2c.py:121 - // virtual: load tmp%2#0 from l-stack (no copy) (𝕡) app#0 | tmp%0#0,tmp%2#0 arc4.abi_call(Logger.echo_native_string, "s", app_id=app) typed_abi_call/typed_c2c.py:121 - assert // ARC4 prefix is valid // (𝕡) app#0 | tmp%0#0 arc4.abi_call(Logger.echo_native_string, "s", app_id=app) typed_abi_call/typed_c2c.py:121 - // virtual: load tmp%0#0 from l-stack (no copy) (𝕡) app#0 | tmp%0#0 result1, _txn = arc4.abi_call(Logger.echo_native_string, "s", app_id=app) typed_abi_call/typed_c2c.py:121 - extract 2 0 // (𝕡) app#0 | {extract} arc4.abi_call(Logger.echo_native_string, "s", app_id=app) typed_abi_call/typed_c2c.py:121 - // virtual: store result1#0 to l-stack (no copy) (𝕡) app#0 | result1#0 result1, _txn = arc4.abi_call(Logger.echo_native_string, "s", app_id=app) typed_abi_call/typed_c2c.py:121 - dup // load result1#0 from l-stack (copy) (𝕡) app#0 | result1#0,result1#0 result1 == "echo: s" typed_abi_call/typed_c2c.py:122 - byte "echo: s" // (𝕡) app#0 | result1#0,result1#0,"echo: s" "echo: s" typed_abi_call/typed_c2c.py:122 - == // (𝕡) app#0 | result1#0,{==} result1 == "echo: s" typed_abi_call/typed_c2c.py:122 - // virtual: store tmp%3#0 to l-stack (no copy) (𝕡) app#0 | result1#0,tmp%3#0 result1 == "echo: s" typed_abi_call/typed_c2c.py:122 - // virtual: load tmp%3#0 from l-stack (no copy) (𝕡) app#0 | result1#0,tmp%3#0 assert result1 == "echo: s" typed_abi_call/typed_c2c.py:122 - assert // (𝕡) app#0 | result1#0 assert result1 == "echo: s" typed_abi_call/typed_c2c.py:122 - itxn_begin // (𝕡) app#0 | result1#0 arc4.abi_call(Logger.echo_native_string, String("s"), app_id=app) typed_abi_call/typed_c2c.py:124 - frame_dig -1 // load app#0 from parameters (𝕡) app#0 | result1#0,app#0 - itxn_field ApplicationID // (𝕡) app#0 | result1#0 - method "echo_native_string(string)string" // (𝕡) app#0 | result1#0,method<"echo_native_string(string)string"> arc4.abi_call(Logger.echo_native_string, String("s"), app_id=app) typed_abi_call/typed_c2c.py:124 - itxn_field ApplicationArgs // (𝕡) app#0 | result1#0 - byte 0x000173 // (𝕡) app#0 | result1#0,0x000173 String("s") typed_abi_call/typed_c2c.py:124 - itxn_field ApplicationArgs // (𝕡) app#0 | result1#0 - int appl // (𝕡) app#0 | result1#0,appl arc4.abi_call(Logger.echo_native_string, String("s"), app_id=app) typed_abi_call/typed_c2c.py:124 - itxn_field TypeEnum // (𝕡) app#0 | result1#0 - int 0 // (𝕡) app#0 | result1#0,0 arc4.abi_call(Logger.echo_native_string, String("s"), app_id=app) typed_abi_call/typed_c2c.py:124 - itxn_field Fee // (𝕡) app#0 | result1#0 - itxn_submit // (𝕡) app#0 | result1#0 arc4.abi_call(Logger.echo_native_string, String("s"), app_id=app) typed_abi_call/typed_c2c.py:124 - itxn LastLog // (𝕡) app#0 | result1#0,{itxn} arc4.abi_call(Logger.echo_native_string, String("s"), app_id=app) typed_abi_call/typed_c2c.py:124 - // virtual: store awst_tmp%1#0 to l-stack (no copy) (𝕡) app#0 | result1#0,awst_tmp%1#0 arc4.abi_call(Logger.echo_native_string, String("s"), app_id=app) typed_abi_call/typed_c2c.py:124 - dup // load awst_tmp%1#0 from l-stack (copy) (𝕡) app#0 | result1#0,awst_tmp%1#0,awst_tmp%1#0 arc4.abi_call(Logger.echo_native_string, String("s"), app_id=app) typed_abi_call/typed_c2c.py:124 - extract 4 0 // (𝕡) app#0 | result1#0,awst_tmp%1#0,{extract} arc4.abi_call(Logger.echo_native_string, String("s"), app_id=app) typed_abi_call/typed_c2c.py:124 - cover 1 // store tmp%4#0 to l-stack (no copy) (𝕡) app#0 | result1#0,tmp%4#0,awst_tmp%1#0 arc4.abi_call(Logger.echo_native_string, String("s"), app_id=app) typed_abi_call/typed_c2c.py:124 - // virtual: load awst_tmp%1#0 from l-stack (no copy) (𝕡) app#0 | result1#0,tmp%4#0,awst_tmp%1#0 arc4.abi_call(Logger.echo_native_string, String("s"), app_id=app) typed_abi_call/typed_c2c.py:124 - extract 0 4 // (𝕡) app#0 | result1#0,tmp%4#0,{extract} arc4.abi_call(Logger.echo_native_string, String("s"), app_id=app) typed_abi_call/typed_c2c.py:124 - // virtual: store tmp%5#0 to l-stack (no copy) (𝕡) app#0 | result1#0,tmp%4#0,tmp%5#0 arc4.abi_call(Logger.echo_native_string, String("s"), app_id=app) typed_abi_call/typed_c2c.py:124 - // virtual: load tmp%5#0 from l-stack (no copy) (𝕡) app#0 | result1#0,tmp%4#0,tmp%5#0 arc4.abi_call(Logger.echo_native_string, String("s"), app_id=app) typed_abi_call/typed_c2c.py:124 - byte 0x151f7c75 // (𝕡) app#0 | result1#0,tmp%4#0,tmp%5#0,0x151f7c75 arc4.abi_call(Logger.echo_native_string, String("s"), app_id=app) typed_abi_call/typed_c2c.py:124 - == // (𝕡) app#0 | result1#0,tmp%4#0,{==} arc4.abi_call(Logger.echo_native_string, String("s"), app_id=app) typed_abi_call/typed_c2c.py:124 - // virtual: store tmp%6#0 to l-stack (no copy) (𝕡) app#0 | result1#0,tmp%4#0,tmp%6#0 arc4.abi_call(Logger.echo_native_string, String("s"), app_id=app) typed_abi_call/typed_c2c.py:124 - // virtual: load tmp%6#0 from l-stack (no copy) (𝕡) app#0 | result1#0,tmp%4#0,tmp%6#0 arc4.abi_call(Logger.echo_native_string, String("s"), app_id=app) typed_abi_call/typed_c2c.py:124 - assert // ARC4 prefix is valid // (𝕡) app#0 | result1#0,tmp%4#0 arc4.abi_call(Logger.echo_native_string, String("s"), app_id=app) typed_abi_call/typed_c2c.py:124 - // virtual: load tmp%4#0 from l-stack (no copy) (𝕡) app#0 | result1#0,tmp%4#0 result2, _txn = arc4.abi_call(Logger.echo_native_string, String("s"), app_id=app) typed_abi_call/typed_c2c.py:124 - extract 2 0 // (𝕡) app#0 | result1#0,{extract} arc4.abi_call(Logger.echo_native_string, String("s"), app_id=app) typed_abi_call/typed_c2c.py:124 - // virtual: store result2#0 to l-stack (no copy) (𝕡) app#0 | result1#0,result2#0 result2, _txn = arc4.abi_call(Logger.echo_native_string, String("s"), app_id=app) typed_abi_call/typed_c2c.py:124 - // virtual: load result2#0 from l-stack (no copy) (𝕡) app#0 | result1#0,result2#0 result2 == result1 typed_abi_call/typed_c2c.py:125 - dig 1 // load result1#0 from l-stack (copy) (𝕡) app#0 | result1#0,result2#0,result1#0 result2 == result1 typed_abi_call/typed_c2c.py:125 - == // (𝕡) app#0 | result1#0,{==} result2 == result1 typed_abi_call/typed_c2c.py:125 - // virtual: store tmp%7#0 to l-stack (no copy) (𝕡) app#0 | result1#0,tmp%7#0 result2 == result1 typed_abi_call/typed_c2c.py:125 - // virtual: load tmp%7#0 from l-stack (no copy) (𝕡) app#0 | result1#0,tmp%7#0 assert result2 == result1 typed_abi_call/typed_c2c.py:125 - assert // (𝕡) app#0 | result1#0 assert result2 == result1 typed_abi_call/typed_c2c.py:125 - itxn_begin // (𝕡) app#0 | result1#0 arc4.abi_call(Logger.echo_native_string, arc4.String("s"), app_id=app) typed_abi_call/typed_c2c.py:127 - frame_dig -1 // load app#0 from parameters (𝕡) app#0 | result1#0,app#0 - itxn_field ApplicationID // (𝕡) app#0 | result1#0 - method "echo_native_string(string)string" // (𝕡) app#0 | result1#0,method<"echo_native_string(string)string"> arc4.abi_call(Logger.echo_native_string, arc4.String("s"), app_id=app) typed_abi_call/typed_c2c.py:127 - itxn_field ApplicationArgs // (𝕡) app#0 | result1#0 - byte 0x000173 // (𝕡) app#0 | result1#0,0x000173 arc4.String("s") typed_abi_call/typed_c2c.py:127 - itxn_field ApplicationArgs // (𝕡) app#0 | result1#0 - int appl // (𝕡) app#0 | result1#0,appl arc4.abi_call(Logger.echo_native_string, arc4.String("s"), app_id=app) typed_abi_call/typed_c2c.py:127 - itxn_field TypeEnum // (𝕡) app#0 | result1#0 - int 0 // (𝕡) app#0 | result1#0,0 arc4.abi_call(Logger.echo_native_string, arc4.String("s"), app_id=app) typed_abi_call/typed_c2c.py:127 - itxn_field Fee // (𝕡) app#0 | result1#0 - itxn_submit // (𝕡) app#0 | result1#0 arc4.abi_call(Logger.echo_native_string, arc4.String("s"), app_id=app) typed_abi_call/typed_c2c.py:127 - itxn LastLog // (𝕡) app#0 | result1#0,{itxn} arc4.abi_call(Logger.echo_native_string, arc4.String("s"), app_id=app) typed_abi_call/typed_c2c.py:127 - // virtual: store awst_tmp%2#0 to l-stack (no copy) (𝕡) app#0 | result1#0,awst_tmp%2#0 arc4.abi_call(Logger.echo_native_string, arc4.String("s"), app_id=app) typed_abi_call/typed_c2c.py:127 - dup // load awst_tmp%2#0 from l-stack (copy) (𝕡) app#0 | result1#0,awst_tmp%2#0,awst_tmp%2#0 arc4.abi_call(Logger.echo_native_string, arc4.String("s"), app_id=app) typed_abi_call/typed_c2c.py:127 - extract 4 0 // (𝕡) app#0 | result1#0,awst_tmp%2#0,{extract} arc4.abi_call(Logger.echo_native_string, arc4.String("s"), app_id=app) typed_abi_call/typed_c2c.py:127 - cover 1 // store tmp%8#0 to l-stack (no copy) (𝕡) app#0 | result1#0,tmp%8#0,awst_tmp%2#0 arc4.abi_call(Logger.echo_native_string, arc4.String("s"), app_id=app) typed_abi_call/typed_c2c.py:127 - // virtual: load awst_tmp%2#0 from l-stack (no copy) (𝕡) app#0 | result1#0,tmp%8#0,awst_tmp%2#0 arc4.abi_call(Logger.echo_native_string, arc4.String("s"), app_id=app) typed_abi_call/typed_c2c.py:127 - extract 0 4 // (𝕡) app#0 | result1#0,tmp%8#0,{extract} arc4.abi_call(Logger.echo_native_string, arc4.String("s"), app_id=app) typed_abi_call/typed_c2c.py:127 - // virtual: store tmp%9#0 to l-stack (no copy) (𝕡) app#0 | result1#0,tmp%8#0,tmp%9#0 arc4.abi_call(Logger.echo_native_string, arc4.String("s"), app_id=app) typed_abi_call/typed_c2c.py:127 - // virtual: load tmp%9#0 from l-stack (no copy) (𝕡) app#0 | result1#0,tmp%8#0,tmp%9#0 arc4.abi_call(Logger.echo_native_string, arc4.String("s"), app_id=app) typed_abi_call/typed_c2c.py:127 - byte 0x151f7c75 // (𝕡) app#0 | result1#0,tmp%8#0,tmp%9#0,0x151f7c75 arc4.abi_call(Logger.echo_native_string, arc4.String("s"), app_id=app) typed_abi_call/typed_c2c.py:127 - == // (𝕡) app#0 | result1#0,tmp%8#0,{==} arc4.abi_call(Logger.echo_native_string, arc4.String("s"), app_id=app) typed_abi_call/typed_c2c.py:127 - // virtual: store tmp%10#0 to l-stack (no copy) (𝕡) app#0 | result1#0,tmp%8#0,tmp%10#0 arc4.abi_call(Logger.echo_native_string, arc4.String("s"), app_id=app) typed_abi_call/typed_c2c.py:127 - // virtual: load tmp%10#0 from l-stack (no copy) (𝕡) app#0 | result1#0,tmp%8#0,tmp%10#0 arc4.abi_call(Logger.echo_native_string, arc4.String("s"), app_id=app) typed_abi_call/typed_c2c.py:127 - assert // ARC4 prefix is valid // (𝕡) app#0 | result1#0,tmp%8#0 arc4.abi_call(Logger.echo_native_string, arc4.String("s"), app_id=app) typed_abi_call/typed_c2c.py:127 - // virtual: load tmp%8#0 from l-stack (no copy) (𝕡) app#0 | result1#0,tmp%8#0 result3, _txn = arc4.abi_call(Logger.echo_native_string, arc4.String("s"), app_id=app) typed_abi_call/typed_c2c.py:127 - extract 2 0 // (𝕡) app#0 | result1#0,{extract} arc4.abi_call(Logger.echo_native_string, arc4.String("s"), app_id=app) typed_abi_call/typed_c2c.py:127 - // virtual: store result3#0 to l-stack (no copy) (𝕡) app#0 | result1#0,result3#0 result3, _txn = arc4.abi_call(Logger.echo_native_string, arc4.String("s"), app_id=app) typed_abi_call/typed_c2c.py:127 - // virtual: load result3#0 from l-stack (no copy) (𝕡) app#0 | result1#0,result3#0 result3 == result1 typed_abi_call/typed_c2c.py:128 - uncover 1 // load result1#0 from l-stack (no copy) (𝕡) app#0 | result3#0,result1#0 result3 == result1 typed_abi_call/typed_c2c.py:128 - == // (𝕡) app#0 | {==} result3 == result1 typed_abi_call/typed_c2c.py:128 - // virtual: store tmp%11#0 to l-stack (no copy) (𝕡) app#0 | tmp%11#0 result3 == result1 typed_abi_call/typed_c2c.py:128 - // virtual: load tmp%11#0 from l-stack (no copy) (𝕡) app#0 | tmp%11#0 assert result3 == result1 typed_abi_call/typed_c2c.py:128 - assert // (𝕡) app#0 | assert result3 == result1 typed_abi_call/typed_c2c.py:128 - retsub // + itxn_begin // (𝕡) app#0 | arc4.abi_call(Logger.echo_native_string, "s", app_id=app) typed_abi_call/typed_c2c.py:121 + frame_dig -1 // load app#0 from parameters (𝕡) app#0 | app#0 + itxn_field ApplicationID // (𝕡) app#0 | + method "echo_native_string(string)string" // (𝕡) app#0 | method<"echo_native_string(string)string"> arc4.abi_call(Logger.echo_native_string, "s", app_id=app) typed_abi_call/typed_c2c.py:121 + itxn_field ApplicationArgs // (𝕡) app#0 | + byte 0x000173 // (𝕡) app#0 | 0x000173 "s" typed_abi_call/typed_c2c.py:121 + itxn_field ApplicationArgs // (𝕡) app#0 | + int appl // (𝕡) app#0 | appl arc4.abi_call(Logger.echo_native_string, "s", app_id=app) typed_abi_call/typed_c2c.py:121 + itxn_field TypeEnum // (𝕡) app#0 | + int 0 // (𝕡) app#0 | 0 arc4.abi_call(Logger.echo_native_string, "s", app_id=app) typed_abi_call/typed_c2c.py:121 + itxn_field Fee // (𝕡) app#0 | + itxn_submit // (𝕡) app#0 | arc4.abi_call(Logger.echo_native_string, "s", app_id=app) typed_abi_call/typed_c2c.py:121 + itxn LastLog // (𝕡) app#0 | {itxn} arc4.abi_call(Logger.echo_native_string, "s", app_id=app) typed_abi_call/typed_c2c.py:121 + // virtual: store awst_tmp%0#0 to l-stack (no copy) (𝕡) app#0 | awst_tmp%0#0 arc4.abi_call(Logger.echo_native_string, "s", app_id=app) typed_abi_call/typed_c2c.py:121 + dup // load awst_tmp%0#0 from l-stack (copy) (𝕡) app#0 | awst_tmp%0#0,awst_tmp%0#0 arc4.abi_call(Logger.echo_native_string, "s", app_id=app) typed_abi_call/typed_c2c.py:121 + extract 4 0 // (𝕡) app#0 | awst_tmp%0#0,{extract} arc4.abi_call(Logger.echo_native_string, "s", app_id=app) typed_abi_call/typed_c2c.py:121 + cover 1 // store tmp%0#0 to l-stack (no copy) (𝕡) app#0 | tmp%0#0,awst_tmp%0#0 arc4.abi_call(Logger.echo_native_string, "s", app_id=app) typed_abi_call/typed_c2c.py:121 + // virtual: load awst_tmp%0#0 from l-stack (no copy) (𝕡) app#0 | tmp%0#0,awst_tmp%0#0 arc4.abi_call(Logger.echo_native_string, "s", app_id=app) typed_abi_call/typed_c2c.py:121 + extract 0 4 // (𝕡) app#0 | tmp%0#0,{extract} arc4.abi_call(Logger.echo_native_string, "s", app_id=app) typed_abi_call/typed_c2c.py:121 + // virtual: store tmp%1#0 to l-stack (no copy) (𝕡) app#0 | tmp%0#0,tmp%1#0 arc4.abi_call(Logger.echo_native_string, "s", app_id=app) typed_abi_call/typed_c2c.py:121 + // virtual: load tmp%1#0 from l-stack (no copy) (𝕡) app#0 | tmp%0#0,tmp%1#0 arc4.abi_call(Logger.echo_native_string, "s", app_id=app) typed_abi_call/typed_c2c.py:121 + byte 0x151f7c75 // (𝕡) app#0 | tmp%0#0,tmp%1#0,0x151f7c75 arc4.abi_call(Logger.echo_native_string, "s", app_id=app) typed_abi_call/typed_c2c.py:121 + == // (𝕡) app#0 | tmp%0#0,{==} arc4.abi_call(Logger.echo_native_string, "s", app_id=app) typed_abi_call/typed_c2c.py:121 + // virtual: store tmp%2#0 to l-stack (no copy) (𝕡) app#0 | tmp%0#0,tmp%2#0 arc4.abi_call(Logger.echo_native_string, "s", app_id=app) typed_abi_call/typed_c2c.py:121 + // virtual: load tmp%2#0 from l-stack (no copy) (𝕡) app#0 | tmp%0#0,tmp%2#0 arc4.abi_call(Logger.echo_native_string, "s", app_id=app) typed_abi_call/typed_c2c.py:121 + assert // ARC4 prefix is valid // (𝕡) app#0 | tmp%0#0 arc4.abi_call(Logger.echo_native_string, "s", app_id=app) typed_abi_call/typed_c2c.py:121 + // virtual: load tmp%0#0 from l-stack (no copy) (𝕡) app#0 | tmp%0#0 result1, _txn = arc4.abi_call(Logger.echo_native_string, "s", app_id=app) typed_abi_call/typed_c2c.py:121 + extract 2 0 // (𝕡) app#0 | {extract} arc4.abi_call(Logger.echo_native_string, "s", app_id=app) typed_abi_call/typed_c2c.py:121 + // virtual: store result1#0 to l-stack (no copy) (𝕡) app#0 | result1#0 result1, _txn = arc4.abi_call(Logger.echo_native_string, "s", app_id=app) typed_abi_call/typed_c2c.py:121 + dup // load result1#0 from l-stack (copy) (𝕡) app#0 | result1#0,result1#0 result1 == "echo: s" typed_abi_call/typed_c2c.py:122 + byte "echo: s" // (𝕡) app#0 | result1#0,result1#0,"echo: s" "echo: s" typed_abi_call/typed_c2c.py:122 + == // (𝕡) app#0 | result1#0,{==} result1 == "echo: s" typed_abi_call/typed_c2c.py:122 + // virtual: store tmp%3#0 to l-stack (no copy) (𝕡) app#0 | result1#0,tmp%3#0 result1 == "echo: s" typed_abi_call/typed_c2c.py:122 + // virtual: load tmp%3#0 from l-stack (no copy) (𝕡) app#0 | result1#0,tmp%3#0 assert result1 == "echo: s" typed_abi_call/typed_c2c.py:122 + assert // (𝕡) app#0 | result1#0 assert result1 == "echo: s" typed_abi_call/typed_c2c.py:122 + itxn_begin // (𝕡) app#0 | result1#0 arc4.abi_call(Logger.echo_native_string, String("s"), app_id=app) typed_abi_call/typed_c2c.py:124 + frame_dig -1 // load app#0 from parameters (𝕡) app#0 | result1#0,app#0 + itxn_field ApplicationID // (𝕡) app#0 | result1#0 + method "echo_native_string(string)string" // (𝕡) app#0 | result1#0,method<"echo_native_string(string)string"> arc4.abi_call(Logger.echo_native_string, String("s"), app_id=app) typed_abi_call/typed_c2c.py:124 + itxn_field ApplicationArgs // (𝕡) app#0 | result1#0 + byte 0x000173 // (𝕡) app#0 | result1#0,0x000173 String("s") typed_abi_call/typed_c2c.py:124 + itxn_field ApplicationArgs // (𝕡) app#0 | result1#0 + int appl // (𝕡) app#0 | result1#0,appl arc4.abi_call(Logger.echo_native_string, String("s"), app_id=app) typed_abi_call/typed_c2c.py:124 + itxn_field TypeEnum // (𝕡) app#0 | result1#0 + int 0 // (𝕡) app#0 | result1#0,0 arc4.abi_call(Logger.echo_native_string, String("s"), app_id=app) typed_abi_call/typed_c2c.py:124 + itxn_field Fee // (𝕡) app#0 | result1#0 + itxn_submit // (𝕡) app#0 | result1#0 arc4.abi_call(Logger.echo_native_string, String("s"), app_id=app) typed_abi_call/typed_c2c.py:124 + itxn LastLog // (𝕡) app#0 | result1#0,{itxn} arc4.abi_call(Logger.echo_native_string, String("s"), app_id=app) typed_abi_call/typed_c2c.py:124 + // virtual: store awst_tmp%1#0 to l-stack (no copy) (𝕡) app#0 | result1#0,awst_tmp%1#0 arc4.abi_call(Logger.echo_native_string, String("s"), app_id=app) typed_abi_call/typed_c2c.py:124 + dup // load awst_tmp%1#0 from l-stack (copy) (𝕡) app#0 | result1#0,awst_tmp%1#0,awst_tmp%1#0 arc4.abi_call(Logger.echo_native_string, String("s"), app_id=app) typed_abi_call/typed_c2c.py:124 + extract 4 0 // (𝕡) app#0 | result1#0,awst_tmp%1#0,{extract} arc4.abi_call(Logger.echo_native_string, String("s"), app_id=app) typed_abi_call/typed_c2c.py:124 + cover 1 // store tmp%4#0 to l-stack (no copy) (𝕡) app#0 | result1#0,tmp%4#0,awst_tmp%1#0 arc4.abi_call(Logger.echo_native_string, String("s"), app_id=app) typed_abi_call/typed_c2c.py:124 + // virtual: load awst_tmp%1#0 from l-stack (no copy) (𝕡) app#0 | result1#0,tmp%4#0,awst_tmp%1#0 arc4.abi_call(Logger.echo_native_string, String("s"), app_id=app) typed_abi_call/typed_c2c.py:124 + extract 0 4 // (𝕡) app#0 | result1#0,tmp%4#0,{extract} arc4.abi_call(Logger.echo_native_string, String("s"), app_id=app) typed_abi_call/typed_c2c.py:124 + // virtual: store tmp%5#0 to l-stack (no copy) (𝕡) app#0 | result1#0,tmp%4#0,tmp%5#0 arc4.abi_call(Logger.echo_native_string, String("s"), app_id=app) typed_abi_call/typed_c2c.py:124 + // virtual: load tmp%5#0 from l-stack (no copy) (𝕡) app#0 | result1#0,tmp%4#0,tmp%5#0 arc4.abi_call(Logger.echo_native_string, String("s"), app_id=app) typed_abi_call/typed_c2c.py:124 + byte 0x151f7c75 // (𝕡) app#0 | result1#0,tmp%4#0,tmp%5#0,0x151f7c75 arc4.abi_call(Logger.echo_native_string, String("s"), app_id=app) typed_abi_call/typed_c2c.py:124 + == // (𝕡) app#0 | result1#0,tmp%4#0,{==} arc4.abi_call(Logger.echo_native_string, String("s"), app_id=app) typed_abi_call/typed_c2c.py:124 + // virtual: store tmp%6#0 to l-stack (no copy) (𝕡) app#0 | result1#0,tmp%4#0,tmp%6#0 arc4.abi_call(Logger.echo_native_string, String("s"), app_id=app) typed_abi_call/typed_c2c.py:124 + // virtual: load tmp%6#0 from l-stack (no copy) (𝕡) app#0 | result1#0,tmp%4#0,tmp%6#0 arc4.abi_call(Logger.echo_native_string, String("s"), app_id=app) typed_abi_call/typed_c2c.py:124 + assert // ARC4 prefix is valid // (𝕡) app#0 | result1#0,tmp%4#0 arc4.abi_call(Logger.echo_native_string, String("s"), app_id=app) typed_abi_call/typed_c2c.py:124 + // virtual: load tmp%4#0 from l-stack (no copy) (𝕡) app#0 | result1#0,tmp%4#0 result2, _txn = arc4.abi_call(Logger.echo_native_string, String("s"), app_id=app) typed_abi_call/typed_c2c.py:124 + extract 2 0 // (𝕡) app#0 | result1#0,{extract} arc4.abi_call(Logger.echo_native_string, String("s"), app_id=app) typed_abi_call/typed_c2c.py:124 + // virtual: store result2#0 to l-stack (no copy) (𝕡) app#0 | result1#0,result2#0 result2, _txn = arc4.abi_call(Logger.echo_native_string, String("s"), app_id=app) typed_abi_call/typed_c2c.py:124 + // virtual: load result2#0 from l-stack (no copy) (𝕡) app#0 | result1#0,result2#0 result2 == result1 typed_abi_call/typed_c2c.py:125 + dig 1 // load result1#0 from l-stack (copy) (𝕡) app#0 | result1#0,result2#0,result1#0 result2 == result1 typed_abi_call/typed_c2c.py:125 + == // (𝕡) app#0 | result1#0,{==} result2 == result1 typed_abi_call/typed_c2c.py:125 + // virtual: store tmp%7#0 to l-stack (no copy) (𝕡) app#0 | result1#0,tmp%7#0 result2 == result1 typed_abi_call/typed_c2c.py:125 + // virtual: load tmp%7#0 from l-stack (no copy) (𝕡) app#0 | result1#0,tmp%7#0 assert result2 == result1 typed_abi_call/typed_c2c.py:125 + assert // (𝕡) app#0 | result1#0 assert result2 == result1 typed_abi_call/typed_c2c.py:125 + itxn_begin // (𝕡) app#0 | result1#0 arc4.abi_call(Logger.echo_native_string, arc4.String("s"), app_id=app) typed_abi_call/typed_c2c.py:127 + frame_dig -1 // load app#0 from parameters (𝕡) app#0 | result1#0,app#0 + itxn_field ApplicationID // (𝕡) app#0 | result1#0 + method "echo_native_string(string)string" // (𝕡) app#0 | result1#0,method<"echo_native_string(string)string"> arc4.abi_call(Logger.echo_native_string, arc4.String("s"), app_id=app) typed_abi_call/typed_c2c.py:127 + itxn_field ApplicationArgs // (𝕡) app#0 | result1#0 + byte 0x000173 // (𝕡) app#0 | result1#0,0x000173 arc4.String("s") typed_abi_call/typed_c2c.py:127 + itxn_field ApplicationArgs // (𝕡) app#0 | result1#0 + int appl // (𝕡) app#0 | result1#0,appl arc4.abi_call(Logger.echo_native_string, arc4.String("s"), app_id=app) typed_abi_call/typed_c2c.py:127 + itxn_field TypeEnum // (𝕡) app#0 | result1#0 + int 0 // (𝕡) app#0 | result1#0,0 arc4.abi_call(Logger.echo_native_string, arc4.String("s"), app_id=app) typed_abi_call/typed_c2c.py:127 + itxn_field Fee // (𝕡) app#0 | result1#0 + itxn_submit // (𝕡) app#0 | result1#0 arc4.abi_call(Logger.echo_native_string, arc4.String("s"), app_id=app) typed_abi_call/typed_c2c.py:127 + itxn LastLog // (𝕡) app#0 | result1#0,{itxn} arc4.abi_call(Logger.echo_native_string, arc4.String("s"), app_id=app) typed_abi_call/typed_c2c.py:127 + // virtual: store awst_tmp%2#0 to l-stack (no copy) (𝕡) app#0 | result1#0,awst_tmp%2#0 arc4.abi_call(Logger.echo_native_string, arc4.String("s"), app_id=app) typed_abi_call/typed_c2c.py:127 + dup // load awst_tmp%2#0 from l-stack (copy) (𝕡) app#0 | result1#0,awst_tmp%2#0,awst_tmp%2#0 arc4.abi_call(Logger.echo_native_string, arc4.String("s"), app_id=app) typed_abi_call/typed_c2c.py:127 + extract 4 0 // (𝕡) app#0 | result1#0,awst_tmp%2#0,{extract} arc4.abi_call(Logger.echo_native_string, arc4.String("s"), app_id=app) typed_abi_call/typed_c2c.py:127 + cover 1 // store tmp%8#0 to l-stack (no copy) (𝕡) app#0 | result1#0,tmp%8#0,awst_tmp%2#0 arc4.abi_call(Logger.echo_native_string, arc4.String("s"), app_id=app) typed_abi_call/typed_c2c.py:127 + // virtual: load awst_tmp%2#0 from l-stack (no copy) (𝕡) app#0 | result1#0,tmp%8#0,awst_tmp%2#0 arc4.abi_call(Logger.echo_native_string, arc4.String("s"), app_id=app) typed_abi_call/typed_c2c.py:127 + extract 0 4 // (𝕡) app#0 | result1#0,tmp%8#0,{extract} arc4.abi_call(Logger.echo_native_string, arc4.String("s"), app_id=app) typed_abi_call/typed_c2c.py:127 + // virtual: store tmp%9#0 to l-stack (no copy) (𝕡) app#0 | result1#0,tmp%8#0,tmp%9#0 arc4.abi_call(Logger.echo_native_string, arc4.String("s"), app_id=app) typed_abi_call/typed_c2c.py:127 + // virtual: load tmp%9#0 from l-stack (no copy) (𝕡) app#0 | result1#0,tmp%8#0,tmp%9#0 arc4.abi_call(Logger.echo_native_string, arc4.String("s"), app_id=app) typed_abi_call/typed_c2c.py:127 + byte 0x151f7c75 // (𝕡) app#0 | result1#0,tmp%8#0,tmp%9#0,0x151f7c75 arc4.abi_call(Logger.echo_native_string, arc4.String("s"), app_id=app) typed_abi_call/typed_c2c.py:127 + == // (𝕡) app#0 | result1#0,tmp%8#0,{==} arc4.abi_call(Logger.echo_native_string, arc4.String("s"), app_id=app) typed_abi_call/typed_c2c.py:127 + // virtual: store tmp%10#0 to l-stack (no copy) (𝕡) app#0 | result1#0,tmp%8#0,tmp%10#0 arc4.abi_call(Logger.echo_native_string, arc4.String("s"), app_id=app) typed_abi_call/typed_c2c.py:127 + // virtual: load tmp%10#0 from l-stack (no copy) (𝕡) app#0 | result1#0,tmp%8#0,tmp%10#0 arc4.abi_call(Logger.echo_native_string, arc4.String("s"), app_id=app) typed_abi_call/typed_c2c.py:127 + assert // ARC4 prefix is valid // (𝕡) app#0 | result1#0,tmp%8#0 arc4.abi_call(Logger.echo_native_string, arc4.String("s"), app_id=app) typed_abi_call/typed_c2c.py:127 + // virtual: load tmp%8#0 from l-stack (no copy) (𝕡) app#0 | result1#0,tmp%8#0 result3, _txn = arc4.abi_call(Logger.echo_native_string, arc4.String("s"), app_id=app) typed_abi_call/typed_c2c.py:127 + extract 2 0 // (𝕡) app#0 | result1#0,{extract} arc4.abi_call(Logger.echo_native_string, arc4.String("s"), app_id=app) typed_abi_call/typed_c2c.py:127 + // virtual: store result3#0 to l-stack (no copy) (𝕡) app#0 | result1#0,result3#0 result3, _txn = arc4.abi_call(Logger.echo_native_string, arc4.String("s"), app_id=app) typed_abi_call/typed_c2c.py:127 + // virtual: load result3#0 from l-stack (no copy) (𝕡) app#0 | result1#0,result3#0 result3 == result1 typed_abi_call/typed_c2c.py:128 + uncover 1 // load result1#0 from l-stack (no copy) (𝕡) app#0 | result3#0,result1#0 result3 == result1 typed_abi_call/typed_c2c.py:128 + == // (𝕡) app#0 | {==} result3 == result1 typed_abi_call/typed_c2c.py:128 + // virtual: store tmp%11#0 to l-stack (no copy) (𝕡) app#0 | tmp%11#0 result3 == result1 typed_abi_call/typed_c2c.py:128 + // virtual: load tmp%11#0 from l-stack (no copy) (𝕡) app#0 | tmp%11#0 assert result3 == result1 typed_abi_call/typed_c2c.py:128 + assert // (𝕡) app#0 | assert result3 == result1 typed_abi_call/typed_c2c.py:128 + retsub // // test_cases.typed_abi_call.typed_c2c.Greeter.test_native_bytes(app: uint64) -> void: test_native_bytes: - proto 1 0 // (𝕡) app#0 | @arc4.abimethod()\ndef test_native_bytes(self, app: Application) -> None: typed_abi_call/typed_c2c.py:130-131 + proto 1 0 // (𝕡) app#0 | @arc4.abimethod()\ndef test_native_bytes(self, app: Application) -> None: typed_abi_call/typed_c2c.py:130-131 test_native_bytes_block@0: - itxn_begin // (𝕡) app#0 | arc4.abi_call(Logger.echo_native_bytes, b"b", app_id=app) typed_abi_call/typed_c2c.py:132 - frame_dig -1 // load app#0 from parameters (𝕡) app#0 | app#0 - itxn_field ApplicationID // (𝕡) app#0 | - method "echo_native_bytes(byte[])byte[]" // (𝕡) app#0 | method<"echo_native_bytes(byte[])byte[]"> arc4.abi_call(Logger.echo_native_bytes, b"b", app_id=app) typed_abi_call/typed_c2c.py:132 - itxn_field ApplicationArgs // (𝕡) app#0 | - byte 0x000162 // (𝕡) app#0 | 0x000162 b"b" typed_abi_call/typed_c2c.py:132 - itxn_field ApplicationArgs // (𝕡) app#0 | - int appl // (𝕡) app#0 | appl arc4.abi_call(Logger.echo_native_bytes, b"b", app_id=app) typed_abi_call/typed_c2c.py:132 - itxn_field TypeEnum // (𝕡) app#0 | - int 0 // (𝕡) app#0 | 0 arc4.abi_call(Logger.echo_native_bytes, b"b", app_id=app) typed_abi_call/typed_c2c.py:132 - itxn_field Fee // (𝕡) app#0 | - itxn_submit // (𝕡) app#0 | arc4.abi_call(Logger.echo_native_bytes, b"b", app_id=app) typed_abi_call/typed_c2c.py:132 - itxn LastLog // (𝕡) app#0 | {itxn} arc4.abi_call(Logger.echo_native_bytes, b"b", app_id=app) typed_abi_call/typed_c2c.py:132 - // virtual: store awst_tmp%0#0 to l-stack (no copy) (𝕡) app#0 | awst_tmp%0#0 arc4.abi_call(Logger.echo_native_bytes, b"b", app_id=app) typed_abi_call/typed_c2c.py:132 - dup // load awst_tmp%0#0 from l-stack (copy) (𝕡) app#0 | awst_tmp%0#0,awst_tmp%0#0 arc4.abi_call(Logger.echo_native_bytes, b"b", app_id=app) typed_abi_call/typed_c2c.py:132 - extract 4 0 // (𝕡) app#0 | awst_tmp%0#0,{extract} arc4.abi_call(Logger.echo_native_bytes, b"b", app_id=app) typed_abi_call/typed_c2c.py:132 - cover 1 // store tmp%0#0 to l-stack (no copy) (𝕡) app#0 | tmp%0#0,awst_tmp%0#0 arc4.abi_call(Logger.echo_native_bytes, b"b", app_id=app) typed_abi_call/typed_c2c.py:132 - // virtual: load awst_tmp%0#0 from l-stack (no copy) (𝕡) app#0 | tmp%0#0,awst_tmp%0#0 arc4.abi_call(Logger.echo_native_bytes, b"b", app_id=app) typed_abi_call/typed_c2c.py:132 - extract 0 4 // (𝕡) app#0 | tmp%0#0,{extract} arc4.abi_call(Logger.echo_native_bytes, b"b", app_id=app) typed_abi_call/typed_c2c.py:132 - // virtual: store tmp%1#0 to l-stack (no copy) (𝕡) app#0 | tmp%0#0,tmp%1#0 arc4.abi_call(Logger.echo_native_bytes, b"b", app_id=app) typed_abi_call/typed_c2c.py:132 - // virtual: load tmp%1#0 from l-stack (no copy) (𝕡) app#0 | tmp%0#0,tmp%1#0 arc4.abi_call(Logger.echo_native_bytes, b"b", app_id=app) typed_abi_call/typed_c2c.py:132 - byte 0x151f7c75 // (𝕡) app#0 | tmp%0#0,tmp%1#0,0x151f7c75 arc4.abi_call(Logger.echo_native_bytes, b"b", app_id=app) typed_abi_call/typed_c2c.py:132 - == // (𝕡) app#0 | tmp%0#0,{==} arc4.abi_call(Logger.echo_native_bytes, b"b", app_id=app) typed_abi_call/typed_c2c.py:132 - // virtual: store tmp%2#0 to l-stack (no copy) (𝕡) app#0 | tmp%0#0,tmp%2#0 arc4.abi_call(Logger.echo_native_bytes, b"b", app_id=app) typed_abi_call/typed_c2c.py:132 - // virtual: load tmp%2#0 from l-stack (no copy) (𝕡) app#0 | tmp%0#0,tmp%2#0 arc4.abi_call(Logger.echo_native_bytes, b"b", app_id=app) typed_abi_call/typed_c2c.py:132 - assert // ARC4 prefix is valid // (𝕡) app#0 | tmp%0#0 arc4.abi_call(Logger.echo_native_bytes, b"b", app_id=app) typed_abi_call/typed_c2c.py:132 - // virtual: load tmp%0#0 from l-stack (no copy) (𝕡) app#0 | tmp%0#0 result1, _txn = arc4.abi_call(Logger.echo_native_bytes, b"b", app_id=app) typed_abi_call/typed_c2c.py:132 - extract 2 0 // (𝕡) app#0 | {extract} arc4.abi_call(Logger.echo_native_bytes, b"b", app_id=app) typed_abi_call/typed_c2c.py:132 - // virtual: store result1#0 to l-stack (no copy) (𝕡) app#0 | result1#0 result1, _txn = arc4.abi_call(Logger.echo_native_bytes, b"b", app_id=app) typed_abi_call/typed_c2c.py:132 - dup // load result1#0 from l-stack (copy) (𝕡) app#0 | result1#0,result1#0 result1 == b"echo: b" typed_abi_call/typed_c2c.py:133 - byte 0x6563686f3a2062 // (𝕡) app#0 | result1#0,result1#0,0x6563686f3a2062 b"echo: b" typed_abi_call/typed_c2c.py:133 - == // (𝕡) app#0 | result1#0,{==} result1 == b"echo: b" typed_abi_call/typed_c2c.py:133 - // virtual: store tmp%3#0 to l-stack (no copy) (𝕡) app#0 | result1#0,tmp%3#0 result1 == b"echo: b" typed_abi_call/typed_c2c.py:133 - // virtual: load tmp%3#0 from l-stack (no copy) (𝕡) app#0 | result1#0,tmp%3#0 assert result1 == b"echo: b" typed_abi_call/typed_c2c.py:133 - assert // (𝕡) app#0 | result1#0 assert result1 == b"echo: b" typed_abi_call/typed_c2c.py:133 - itxn_begin // (𝕡) app#0 | result1#0 arc4.abi_call(Logger.echo_native_bytes, Bytes(b"b"), app_id=app) typed_abi_call/typed_c2c.py:135 - frame_dig -1 // load app#0 from parameters (𝕡) app#0 | result1#0,app#0 - itxn_field ApplicationID // (𝕡) app#0 | result1#0 - method "echo_native_bytes(byte[])byte[]" // (𝕡) app#0 | result1#0,method<"echo_native_bytes(byte[])byte[]"> arc4.abi_call(Logger.echo_native_bytes, Bytes(b"b"), app_id=app) typed_abi_call/typed_c2c.py:135 - itxn_field ApplicationArgs // (𝕡) app#0 | result1#0 - byte 0x000162 // (𝕡) app#0 | result1#0,0x000162 Bytes(b"b") typed_abi_call/typed_c2c.py:135 - itxn_field ApplicationArgs // (𝕡) app#0 | result1#0 - int appl // (𝕡) app#0 | result1#0,appl arc4.abi_call(Logger.echo_native_bytes, Bytes(b"b"), app_id=app) typed_abi_call/typed_c2c.py:135 - itxn_field TypeEnum // (𝕡) app#0 | result1#0 - int 0 // (𝕡) app#0 | result1#0,0 arc4.abi_call(Logger.echo_native_bytes, Bytes(b"b"), app_id=app) typed_abi_call/typed_c2c.py:135 - itxn_field Fee // (𝕡) app#0 | result1#0 - itxn_submit // (𝕡) app#0 | result1#0 arc4.abi_call(Logger.echo_native_bytes, Bytes(b"b"), app_id=app) typed_abi_call/typed_c2c.py:135 - itxn LastLog // (𝕡) app#0 | result1#0,{itxn} arc4.abi_call(Logger.echo_native_bytes, Bytes(b"b"), app_id=app) typed_abi_call/typed_c2c.py:135 - // virtual: store awst_tmp%1#0 to l-stack (no copy) (𝕡) app#0 | result1#0,awst_tmp%1#0 arc4.abi_call(Logger.echo_native_bytes, Bytes(b"b"), app_id=app) typed_abi_call/typed_c2c.py:135 - dup // load awst_tmp%1#0 from l-stack (copy) (𝕡) app#0 | result1#0,awst_tmp%1#0,awst_tmp%1#0 arc4.abi_call(Logger.echo_native_bytes, Bytes(b"b"), app_id=app) typed_abi_call/typed_c2c.py:135 - extract 4 0 // (𝕡) app#0 | result1#0,awst_tmp%1#0,{extract} arc4.abi_call(Logger.echo_native_bytes, Bytes(b"b"), app_id=app) typed_abi_call/typed_c2c.py:135 - cover 1 // store tmp%4#0 to l-stack (no copy) (𝕡) app#0 | result1#0,tmp%4#0,awst_tmp%1#0 arc4.abi_call(Logger.echo_native_bytes, Bytes(b"b"), app_id=app) typed_abi_call/typed_c2c.py:135 - // virtual: load awst_tmp%1#0 from l-stack (no copy) (𝕡) app#0 | result1#0,tmp%4#0,awst_tmp%1#0 arc4.abi_call(Logger.echo_native_bytes, Bytes(b"b"), app_id=app) typed_abi_call/typed_c2c.py:135 - extract 0 4 // (𝕡) app#0 | result1#0,tmp%4#0,{extract} arc4.abi_call(Logger.echo_native_bytes, Bytes(b"b"), app_id=app) typed_abi_call/typed_c2c.py:135 - // virtual: store tmp%5#0 to l-stack (no copy) (𝕡) app#0 | result1#0,tmp%4#0,tmp%5#0 arc4.abi_call(Logger.echo_native_bytes, Bytes(b"b"), app_id=app) typed_abi_call/typed_c2c.py:135 - // virtual: load tmp%5#0 from l-stack (no copy) (𝕡) app#0 | result1#0,tmp%4#0,tmp%5#0 arc4.abi_call(Logger.echo_native_bytes, Bytes(b"b"), app_id=app) typed_abi_call/typed_c2c.py:135 - byte 0x151f7c75 // (𝕡) app#0 | result1#0,tmp%4#0,tmp%5#0,0x151f7c75 arc4.abi_call(Logger.echo_native_bytes, Bytes(b"b"), app_id=app) typed_abi_call/typed_c2c.py:135 - == // (𝕡) app#0 | result1#0,tmp%4#0,{==} arc4.abi_call(Logger.echo_native_bytes, Bytes(b"b"), app_id=app) typed_abi_call/typed_c2c.py:135 - // virtual: store tmp%6#0 to l-stack (no copy) (𝕡) app#0 | result1#0,tmp%4#0,tmp%6#0 arc4.abi_call(Logger.echo_native_bytes, Bytes(b"b"), app_id=app) typed_abi_call/typed_c2c.py:135 - // virtual: load tmp%6#0 from l-stack (no copy) (𝕡) app#0 | result1#0,tmp%4#0,tmp%6#0 arc4.abi_call(Logger.echo_native_bytes, Bytes(b"b"), app_id=app) typed_abi_call/typed_c2c.py:135 - assert // ARC4 prefix is valid // (𝕡) app#0 | result1#0,tmp%4#0 arc4.abi_call(Logger.echo_native_bytes, Bytes(b"b"), app_id=app) typed_abi_call/typed_c2c.py:135 - // virtual: load tmp%4#0 from l-stack (no copy) (𝕡) app#0 | result1#0,tmp%4#0 result2, _txn = arc4.abi_call(Logger.echo_native_bytes, Bytes(b"b"), app_id=app) typed_abi_call/typed_c2c.py:135 - extract 2 0 // (𝕡) app#0 | result1#0,{extract} arc4.abi_call(Logger.echo_native_bytes, Bytes(b"b"), app_id=app) typed_abi_call/typed_c2c.py:135 - // virtual: store result2#0 to l-stack (no copy) (𝕡) app#0 | result1#0,result2#0 result2, _txn = arc4.abi_call(Logger.echo_native_bytes, Bytes(b"b"), app_id=app) typed_abi_call/typed_c2c.py:135 - // virtual: load result2#0 from l-stack (no copy) (𝕡) app#0 | result1#0,result2#0 result2 == result1 typed_abi_call/typed_c2c.py:136 - dig 1 // load result1#0 from l-stack (copy) (𝕡) app#0 | result1#0,result2#0,result1#0 result2 == result1 typed_abi_call/typed_c2c.py:136 - == // (𝕡) app#0 | result1#0,{==} result2 == result1 typed_abi_call/typed_c2c.py:136 - // virtual: store tmp%7#0 to l-stack (no copy) (𝕡) app#0 | result1#0,tmp%7#0 result2 == result1 typed_abi_call/typed_c2c.py:136 - // virtual: load tmp%7#0 from l-stack (no copy) (𝕡) app#0 | result1#0,tmp%7#0 assert result2 == result1 typed_abi_call/typed_c2c.py:136 - assert // (𝕡) app#0 | result1#0 assert result2 == result1 typed_abi_call/typed_c2c.py:136 - itxn_begin // (𝕡) app#0 | result1#0 arc4.abi_call(\nLogger.echo_native_bytes, arc4.DynamicBytes(b"b"), app_id=app\n) typed_abi_call/typed_c2c.py:138-140 - frame_dig -1 // load app#0 from parameters (𝕡) app#0 | result1#0,app#0 - itxn_field ApplicationID // (𝕡) app#0 | result1#0 - method "echo_native_bytes(byte[])byte[]" // (𝕡) app#0 | result1#0,method<"echo_native_bytes(byte[])byte[]"> arc4.abi_call(\nLogger.echo_native_bytes, arc4.DynamicBytes(b"b"), app_id=app\n) typed_abi_call/typed_c2c.py:138-140 - itxn_field ApplicationArgs // (𝕡) app#0 | result1#0 - byte 0x000162 // (𝕡) app#0 | result1#0,0x000162 arc4.DynamicBytes(b"b") typed_abi_call/typed_c2c.py:139 - itxn_field ApplicationArgs // (𝕡) app#0 | result1#0 - int appl // (𝕡) app#0 | result1#0,appl arc4.abi_call(\nLogger.echo_native_bytes, arc4.DynamicBytes(b"b"), app_id=app\n) typed_abi_call/typed_c2c.py:138-140 - itxn_field TypeEnum // (𝕡) app#0 | result1#0 - int 0 // (𝕡) app#0 | result1#0,0 arc4.abi_call(\nLogger.echo_native_bytes, arc4.DynamicBytes(b"b"), app_id=app\n) typed_abi_call/typed_c2c.py:138-140 - itxn_field Fee // (𝕡) app#0 | result1#0 - itxn_submit // (𝕡) app#0 | result1#0 arc4.abi_call(\nLogger.echo_native_bytes, arc4.DynamicBytes(b"b"), app_id=app\n) typed_abi_call/typed_c2c.py:138-140 - itxn LastLog // (𝕡) app#0 | result1#0,{itxn} arc4.abi_call(\nLogger.echo_native_bytes, arc4.DynamicBytes(b"b"), app_id=app\n) typed_abi_call/typed_c2c.py:138-140 - // virtual: store awst_tmp%2#0 to l-stack (no copy) (𝕡) app#0 | result1#0,awst_tmp%2#0 arc4.abi_call(\nLogger.echo_native_bytes, arc4.DynamicBytes(b"b"), app_id=app\n) typed_abi_call/typed_c2c.py:138-140 - dup // load awst_tmp%2#0 from l-stack (copy) (𝕡) app#0 | result1#0,awst_tmp%2#0,awst_tmp%2#0 arc4.abi_call(\nLogger.echo_native_bytes, arc4.DynamicBytes(b"b"), app_id=app\n) typed_abi_call/typed_c2c.py:138-140 - extract 4 0 // (𝕡) app#0 | result1#0,awst_tmp%2#0,{extract} arc4.abi_call(\nLogger.echo_native_bytes, arc4.DynamicBytes(b"b"), app_id=app\n) typed_abi_call/typed_c2c.py:138-140 - cover 1 // store tmp%8#0 to l-stack (no copy) (𝕡) app#0 | result1#0,tmp%8#0,awst_tmp%2#0 arc4.abi_call(\nLogger.echo_native_bytes, arc4.DynamicBytes(b"b"), app_id=app\n) typed_abi_call/typed_c2c.py:138-140 - // virtual: load awst_tmp%2#0 from l-stack (no copy) (𝕡) app#0 | result1#0,tmp%8#0,awst_tmp%2#0 arc4.abi_call(\nLogger.echo_native_bytes, arc4.DynamicBytes(b"b"), app_id=app\n) typed_abi_call/typed_c2c.py:138-140 - extract 0 4 // (𝕡) app#0 | result1#0,tmp%8#0,{extract} arc4.abi_call(\nLogger.echo_native_bytes, arc4.DynamicBytes(b"b"), app_id=app\n) typed_abi_call/typed_c2c.py:138-140 - // virtual: store tmp%9#0 to l-stack (no copy) (𝕡) app#0 | result1#0,tmp%8#0,tmp%9#0 arc4.abi_call(\nLogger.echo_native_bytes, arc4.DynamicBytes(b"b"), app_id=app\n) typed_abi_call/typed_c2c.py:138-140 - // virtual: load tmp%9#0 from l-stack (no copy) (𝕡) app#0 | result1#0,tmp%8#0,tmp%9#0 arc4.abi_call(\nLogger.echo_native_bytes, arc4.DynamicBytes(b"b"), app_id=app\n) typed_abi_call/typed_c2c.py:138-140 - byte 0x151f7c75 // (𝕡) app#0 | result1#0,tmp%8#0,tmp%9#0,0x151f7c75 arc4.abi_call(\nLogger.echo_native_bytes, arc4.DynamicBytes(b"b"), app_id=app\n) typed_abi_call/typed_c2c.py:138-140 - == // (𝕡) app#0 | result1#0,tmp%8#0,{==} arc4.abi_call(\nLogger.echo_native_bytes, arc4.DynamicBytes(b"b"), app_id=app\n) typed_abi_call/typed_c2c.py:138-140 - // virtual: store tmp%10#0 to l-stack (no copy) (𝕡) app#0 | result1#0,tmp%8#0,tmp%10#0 arc4.abi_call(\nLogger.echo_native_bytes, arc4.DynamicBytes(b"b"), app_id=app\n) typed_abi_call/typed_c2c.py:138-140 - // virtual: load tmp%10#0 from l-stack (no copy) (𝕡) app#0 | result1#0,tmp%8#0,tmp%10#0 arc4.abi_call(\nLogger.echo_native_bytes, arc4.DynamicBytes(b"b"), app_id=app\n) typed_abi_call/typed_c2c.py:138-140 - assert // ARC4 prefix is valid // (𝕡) app#0 | result1#0,tmp%8#0 arc4.abi_call(\nLogger.echo_native_bytes, arc4.DynamicBytes(b"b"), app_id=app\n) typed_abi_call/typed_c2c.py:138-140 - // virtual: load tmp%8#0 from l-stack (no copy) (𝕡) app#0 | result1#0,tmp%8#0 result3, _txn = arc4.abi_call(\nLogger.echo_native_bytes, arc4.DynamicBytes(b"b"), app_id=app\n) typed_abi_call/typed_c2c.py:138-140 - extract 2 0 // (𝕡) app#0 | result1#0,{extract} arc4.abi_call(\nLogger.echo_native_bytes, arc4.DynamicBytes(b"b"), app_id=app\n) typed_abi_call/typed_c2c.py:138-140 - // virtual: store result3#0 to l-stack (no copy) (𝕡) app#0 | result1#0,result3#0 result3, _txn = arc4.abi_call(\nLogger.echo_native_bytes, arc4.DynamicBytes(b"b"), app_id=app\n) typed_abi_call/typed_c2c.py:138-140 - // virtual: load result3#0 from l-stack (no copy) (𝕡) app#0 | result1#0,result3#0 result3 == result1 typed_abi_call/typed_c2c.py:141 - uncover 1 // load result1#0 from l-stack (no copy) (𝕡) app#0 | result3#0,result1#0 result3 == result1 typed_abi_call/typed_c2c.py:141 - == // (𝕡) app#0 | {==} result3 == result1 typed_abi_call/typed_c2c.py:141 - // virtual: store tmp%11#0 to l-stack (no copy) (𝕡) app#0 | tmp%11#0 result3 == result1 typed_abi_call/typed_c2c.py:141 - // virtual: load tmp%11#0 from l-stack (no copy) (𝕡) app#0 | tmp%11#0 assert result3 == result1 typed_abi_call/typed_c2c.py:141 - assert // (𝕡) app#0 | assert result3 == result1 typed_abi_call/typed_c2c.py:141 - retsub // + itxn_begin // (𝕡) app#0 | arc4.abi_call(Logger.echo_native_bytes, b"b", app_id=app) typed_abi_call/typed_c2c.py:132 + frame_dig -1 // load app#0 from parameters (𝕡) app#0 | app#0 + itxn_field ApplicationID // (𝕡) app#0 | + method "echo_native_bytes(byte[])byte[]" // (𝕡) app#0 | method<"echo_native_bytes(byte[])byte[]"> arc4.abi_call(Logger.echo_native_bytes, b"b", app_id=app) typed_abi_call/typed_c2c.py:132 + itxn_field ApplicationArgs // (𝕡) app#0 | + byte 0x000162 // (𝕡) app#0 | 0x000162 b"b" typed_abi_call/typed_c2c.py:132 + itxn_field ApplicationArgs // (𝕡) app#0 | + int appl // (𝕡) app#0 | appl arc4.abi_call(Logger.echo_native_bytes, b"b", app_id=app) typed_abi_call/typed_c2c.py:132 + itxn_field TypeEnum // (𝕡) app#0 | + int 0 // (𝕡) app#0 | 0 arc4.abi_call(Logger.echo_native_bytes, b"b", app_id=app) typed_abi_call/typed_c2c.py:132 + itxn_field Fee // (𝕡) app#0 | + itxn_submit // (𝕡) app#0 | arc4.abi_call(Logger.echo_native_bytes, b"b", app_id=app) typed_abi_call/typed_c2c.py:132 + itxn LastLog // (𝕡) app#0 | {itxn} arc4.abi_call(Logger.echo_native_bytes, b"b", app_id=app) typed_abi_call/typed_c2c.py:132 + // virtual: store awst_tmp%0#0 to l-stack (no copy) (𝕡) app#0 | awst_tmp%0#0 arc4.abi_call(Logger.echo_native_bytes, b"b", app_id=app) typed_abi_call/typed_c2c.py:132 + dup // load awst_tmp%0#0 from l-stack (copy) (𝕡) app#0 | awst_tmp%0#0,awst_tmp%0#0 arc4.abi_call(Logger.echo_native_bytes, b"b", app_id=app) typed_abi_call/typed_c2c.py:132 + extract 4 0 // (𝕡) app#0 | awst_tmp%0#0,{extract} arc4.abi_call(Logger.echo_native_bytes, b"b", app_id=app) typed_abi_call/typed_c2c.py:132 + cover 1 // store tmp%0#0 to l-stack (no copy) (𝕡) app#0 | tmp%0#0,awst_tmp%0#0 arc4.abi_call(Logger.echo_native_bytes, b"b", app_id=app) typed_abi_call/typed_c2c.py:132 + // virtual: load awst_tmp%0#0 from l-stack (no copy) (𝕡) app#0 | tmp%0#0,awst_tmp%0#0 arc4.abi_call(Logger.echo_native_bytes, b"b", app_id=app) typed_abi_call/typed_c2c.py:132 + extract 0 4 // (𝕡) app#0 | tmp%0#0,{extract} arc4.abi_call(Logger.echo_native_bytes, b"b", app_id=app) typed_abi_call/typed_c2c.py:132 + // virtual: store tmp%1#0 to l-stack (no copy) (𝕡) app#0 | tmp%0#0,tmp%1#0 arc4.abi_call(Logger.echo_native_bytes, b"b", app_id=app) typed_abi_call/typed_c2c.py:132 + // virtual: load tmp%1#0 from l-stack (no copy) (𝕡) app#0 | tmp%0#0,tmp%1#0 arc4.abi_call(Logger.echo_native_bytes, b"b", app_id=app) typed_abi_call/typed_c2c.py:132 + byte 0x151f7c75 // (𝕡) app#0 | tmp%0#0,tmp%1#0,0x151f7c75 arc4.abi_call(Logger.echo_native_bytes, b"b", app_id=app) typed_abi_call/typed_c2c.py:132 + == // (𝕡) app#0 | tmp%0#0,{==} arc4.abi_call(Logger.echo_native_bytes, b"b", app_id=app) typed_abi_call/typed_c2c.py:132 + // virtual: store tmp%2#0 to l-stack (no copy) (𝕡) app#0 | tmp%0#0,tmp%2#0 arc4.abi_call(Logger.echo_native_bytes, b"b", app_id=app) typed_abi_call/typed_c2c.py:132 + // virtual: load tmp%2#0 from l-stack (no copy) (𝕡) app#0 | tmp%0#0,tmp%2#0 arc4.abi_call(Logger.echo_native_bytes, b"b", app_id=app) typed_abi_call/typed_c2c.py:132 + assert // ARC4 prefix is valid // (𝕡) app#0 | tmp%0#0 arc4.abi_call(Logger.echo_native_bytes, b"b", app_id=app) typed_abi_call/typed_c2c.py:132 + // virtual: load tmp%0#0 from l-stack (no copy) (𝕡) app#0 | tmp%0#0 result1, _txn = arc4.abi_call(Logger.echo_native_bytes, b"b", app_id=app) typed_abi_call/typed_c2c.py:132 + extract 2 0 // (𝕡) app#0 | {extract} arc4.abi_call(Logger.echo_native_bytes, b"b", app_id=app) typed_abi_call/typed_c2c.py:132 + // virtual: store result1#0 to l-stack (no copy) (𝕡) app#0 | result1#0 result1, _txn = arc4.abi_call(Logger.echo_native_bytes, b"b", app_id=app) typed_abi_call/typed_c2c.py:132 + dup // load result1#0 from l-stack (copy) (𝕡) app#0 | result1#0,result1#0 result1 == b"echo: b" typed_abi_call/typed_c2c.py:133 + byte 0x6563686f3a2062 // (𝕡) app#0 | result1#0,result1#0,0x6563686f3a2062 b"echo: b" typed_abi_call/typed_c2c.py:133 + == // (𝕡) app#0 | result1#0,{==} result1 == b"echo: b" typed_abi_call/typed_c2c.py:133 + // virtual: store tmp%3#0 to l-stack (no copy) (𝕡) app#0 | result1#0,tmp%3#0 result1 == b"echo: b" typed_abi_call/typed_c2c.py:133 + // virtual: load tmp%3#0 from l-stack (no copy) (𝕡) app#0 | result1#0,tmp%3#0 assert result1 == b"echo: b" typed_abi_call/typed_c2c.py:133 + assert // (𝕡) app#0 | result1#0 assert result1 == b"echo: b" typed_abi_call/typed_c2c.py:133 + itxn_begin // (𝕡) app#0 | result1#0 arc4.abi_call(Logger.echo_native_bytes, Bytes(b"b"), app_id=app) typed_abi_call/typed_c2c.py:135 + frame_dig -1 // load app#0 from parameters (𝕡) app#0 | result1#0,app#0 + itxn_field ApplicationID // (𝕡) app#0 | result1#0 + method "echo_native_bytes(byte[])byte[]" // (𝕡) app#0 | result1#0,method<"echo_native_bytes(byte[])byte[]"> arc4.abi_call(Logger.echo_native_bytes, Bytes(b"b"), app_id=app) typed_abi_call/typed_c2c.py:135 + itxn_field ApplicationArgs // (𝕡) app#0 | result1#0 + byte 0x000162 // (𝕡) app#0 | result1#0,0x000162 Bytes(b"b") typed_abi_call/typed_c2c.py:135 + itxn_field ApplicationArgs // (𝕡) app#0 | result1#0 + int appl // (𝕡) app#0 | result1#0,appl arc4.abi_call(Logger.echo_native_bytes, Bytes(b"b"), app_id=app) typed_abi_call/typed_c2c.py:135 + itxn_field TypeEnum // (𝕡) app#0 | result1#0 + int 0 // (𝕡) app#0 | result1#0,0 arc4.abi_call(Logger.echo_native_bytes, Bytes(b"b"), app_id=app) typed_abi_call/typed_c2c.py:135 + itxn_field Fee // (𝕡) app#0 | result1#0 + itxn_submit // (𝕡) app#0 | result1#0 arc4.abi_call(Logger.echo_native_bytes, Bytes(b"b"), app_id=app) typed_abi_call/typed_c2c.py:135 + itxn LastLog // (𝕡) app#0 | result1#0,{itxn} arc4.abi_call(Logger.echo_native_bytes, Bytes(b"b"), app_id=app) typed_abi_call/typed_c2c.py:135 + // virtual: store awst_tmp%1#0 to l-stack (no copy) (𝕡) app#0 | result1#0,awst_tmp%1#0 arc4.abi_call(Logger.echo_native_bytes, Bytes(b"b"), app_id=app) typed_abi_call/typed_c2c.py:135 + dup // load awst_tmp%1#0 from l-stack (copy) (𝕡) app#0 | result1#0,awst_tmp%1#0,awst_tmp%1#0 arc4.abi_call(Logger.echo_native_bytes, Bytes(b"b"), app_id=app) typed_abi_call/typed_c2c.py:135 + extract 4 0 // (𝕡) app#0 | result1#0,awst_tmp%1#0,{extract} arc4.abi_call(Logger.echo_native_bytes, Bytes(b"b"), app_id=app) typed_abi_call/typed_c2c.py:135 + cover 1 // store tmp%4#0 to l-stack (no copy) (𝕡) app#0 | result1#0,tmp%4#0,awst_tmp%1#0 arc4.abi_call(Logger.echo_native_bytes, Bytes(b"b"), app_id=app) typed_abi_call/typed_c2c.py:135 + // virtual: load awst_tmp%1#0 from l-stack (no copy) (𝕡) app#0 | result1#0,tmp%4#0,awst_tmp%1#0 arc4.abi_call(Logger.echo_native_bytes, Bytes(b"b"), app_id=app) typed_abi_call/typed_c2c.py:135 + extract 0 4 // (𝕡) app#0 | result1#0,tmp%4#0,{extract} arc4.abi_call(Logger.echo_native_bytes, Bytes(b"b"), app_id=app) typed_abi_call/typed_c2c.py:135 + // virtual: store tmp%5#0 to l-stack (no copy) (𝕡) app#0 | result1#0,tmp%4#0,tmp%5#0 arc4.abi_call(Logger.echo_native_bytes, Bytes(b"b"), app_id=app) typed_abi_call/typed_c2c.py:135 + // virtual: load tmp%5#0 from l-stack (no copy) (𝕡) app#0 | result1#0,tmp%4#0,tmp%5#0 arc4.abi_call(Logger.echo_native_bytes, Bytes(b"b"), app_id=app) typed_abi_call/typed_c2c.py:135 + byte 0x151f7c75 // (𝕡) app#0 | result1#0,tmp%4#0,tmp%5#0,0x151f7c75 arc4.abi_call(Logger.echo_native_bytes, Bytes(b"b"), app_id=app) typed_abi_call/typed_c2c.py:135 + == // (𝕡) app#0 | result1#0,tmp%4#0,{==} arc4.abi_call(Logger.echo_native_bytes, Bytes(b"b"), app_id=app) typed_abi_call/typed_c2c.py:135 + // virtual: store tmp%6#0 to l-stack (no copy) (𝕡) app#0 | result1#0,tmp%4#0,tmp%6#0 arc4.abi_call(Logger.echo_native_bytes, Bytes(b"b"), app_id=app) typed_abi_call/typed_c2c.py:135 + // virtual: load tmp%6#0 from l-stack (no copy) (𝕡) app#0 | result1#0,tmp%4#0,tmp%6#0 arc4.abi_call(Logger.echo_native_bytes, Bytes(b"b"), app_id=app) typed_abi_call/typed_c2c.py:135 + assert // ARC4 prefix is valid // (𝕡) app#0 | result1#0,tmp%4#0 arc4.abi_call(Logger.echo_native_bytes, Bytes(b"b"), app_id=app) typed_abi_call/typed_c2c.py:135 + // virtual: load tmp%4#0 from l-stack (no copy) (𝕡) app#0 | result1#0,tmp%4#0 result2, _txn = arc4.abi_call(Logger.echo_native_bytes, Bytes(b"b"), app_id=app) typed_abi_call/typed_c2c.py:135 + extract 2 0 // (𝕡) app#0 | result1#0,{extract} arc4.abi_call(Logger.echo_native_bytes, Bytes(b"b"), app_id=app) typed_abi_call/typed_c2c.py:135 + // virtual: store result2#0 to l-stack (no copy) (𝕡) app#0 | result1#0,result2#0 result2, _txn = arc4.abi_call(Logger.echo_native_bytes, Bytes(b"b"), app_id=app) typed_abi_call/typed_c2c.py:135 + // virtual: load result2#0 from l-stack (no copy) (𝕡) app#0 | result1#0,result2#0 result2 == result1 typed_abi_call/typed_c2c.py:136 + dig 1 // load result1#0 from l-stack (copy) (𝕡) app#0 | result1#0,result2#0,result1#0 result2 == result1 typed_abi_call/typed_c2c.py:136 + == // (𝕡) app#0 | result1#0,{==} result2 == result1 typed_abi_call/typed_c2c.py:136 + // virtual: store tmp%7#0 to l-stack (no copy) (𝕡) app#0 | result1#0,tmp%7#0 result2 == result1 typed_abi_call/typed_c2c.py:136 + // virtual: load tmp%7#0 from l-stack (no copy) (𝕡) app#0 | result1#0,tmp%7#0 assert result2 == result1 typed_abi_call/typed_c2c.py:136 + assert // (𝕡) app#0 | result1#0 assert result2 == result1 typed_abi_call/typed_c2c.py:136 + itxn_begin // (𝕡) app#0 | result1#0 arc4.abi_call(\nLogger.echo_native_bytes, arc4.DynamicBytes(b"b"), app_id=app\n) typed_abi_call/typed_c2c.py:138-140 + frame_dig -1 // load app#0 from parameters (𝕡) app#0 | result1#0,app#0 + itxn_field ApplicationID // (𝕡) app#0 | result1#0 + method "echo_native_bytes(byte[])byte[]" // (𝕡) app#0 | result1#0,method<"echo_native_bytes(byte[])byte[]"> arc4.abi_call(\nLogger.echo_native_bytes, arc4.DynamicBytes(b"b"), app_id=app\n) typed_abi_call/typed_c2c.py:138-140 + itxn_field ApplicationArgs // (𝕡) app#0 | result1#0 + byte 0x000162 // (𝕡) app#0 | result1#0,0x000162 arc4.DynamicBytes(b"b") typed_abi_call/typed_c2c.py:139 + itxn_field ApplicationArgs // (𝕡) app#0 | result1#0 + int appl // (𝕡) app#0 | result1#0,appl arc4.abi_call(\nLogger.echo_native_bytes, arc4.DynamicBytes(b"b"), app_id=app\n) typed_abi_call/typed_c2c.py:138-140 + itxn_field TypeEnum // (𝕡) app#0 | result1#0 + int 0 // (𝕡) app#0 | result1#0,0 arc4.abi_call(\nLogger.echo_native_bytes, arc4.DynamicBytes(b"b"), app_id=app\n) typed_abi_call/typed_c2c.py:138-140 + itxn_field Fee // (𝕡) app#0 | result1#0 + itxn_submit // (𝕡) app#0 | result1#0 arc4.abi_call(\nLogger.echo_native_bytes, arc4.DynamicBytes(b"b"), app_id=app\n) typed_abi_call/typed_c2c.py:138-140 + itxn LastLog // (𝕡) app#0 | result1#0,{itxn} arc4.abi_call(\nLogger.echo_native_bytes, arc4.DynamicBytes(b"b"), app_id=app\n) typed_abi_call/typed_c2c.py:138-140 + // virtual: store awst_tmp%2#0 to l-stack (no copy) (𝕡) app#0 | result1#0,awst_tmp%2#0 arc4.abi_call(\nLogger.echo_native_bytes, arc4.DynamicBytes(b"b"), app_id=app\n) typed_abi_call/typed_c2c.py:138-140 + dup // load awst_tmp%2#0 from l-stack (copy) (𝕡) app#0 | result1#0,awst_tmp%2#0,awst_tmp%2#0 arc4.abi_call(\nLogger.echo_native_bytes, arc4.DynamicBytes(b"b"), app_id=app\n) typed_abi_call/typed_c2c.py:138-140 + extract 4 0 // (𝕡) app#0 | result1#0,awst_tmp%2#0,{extract} arc4.abi_call(\nLogger.echo_native_bytes, arc4.DynamicBytes(b"b"), app_id=app\n) typed_abi_call/typed_c2c.py:138-140 + cover 1 // store tmp%8#0 to l-stack (no copy) (𝕡) app#0 | result1#0,tmp%8#0,awst_tmp%2#0 arc4.abi_call(\nLogger.echo_native_bytes, arc4.DynamicBytes(b"b"), app_id=app\n) typed_abi_call/typed_c2c.py:138-140 + // virtual: load awst_tmp%2#0 from l-stack (no copy) (𝕡) app#0 | result1#0,tmp%8#0,awst_tmp%2#0 arc4.abi_call(\nLogger.echo_native_bytes, arc4.DynamicBytes(b"b"), app_id=app\n) typed_abi_call/typed_c2c.py:138-140 + extract 0 4 // (𝕡) app#0 | result1#0,tmp%8#0,{extract} arc4.abi_call(\nLogger.echo_native_bytes, arc4.DynamicBytes(b"b"), app_id=app\n) typed_abi_call/typed_c2c.py:138-140 + // virtual: store tmp%9#0 to l-stack (no copy) (𝕡) app#0 | result1#0,tmp%8#0,tmp%9#0 arc4.abi_call(\nLogger.echo_native_bytes, arc4.DynamicBytes(b"b"), app_id=app\n) typed_abi_call/typed_c2c.py:138-140 + // virtual: load tmp%9#0 from l-stack (no copy) (𝕡) app#0 | result1#0,tmp%8#0,tmp%9#0 arc4.abi_call(\nLogger.echo_native_bytes, arc4.DynamicBytes(b"b"), app_id=app\n) typed_abi_call/typed_c2c.py:138-140 + byte 0x151f7c75 // (𝕡) app#0 | result1#0,tmp%8#0,tmp%9#0,0x151f7c75 arc4.abi_call(\nLogger.echo_native_bytes, arc4.DynamicBytes(b"b"), app_id=app\n) typed_abi_call/typed_c2c.py:138-140 + == // (𝕡) app#0 | result1#0,tmp%8#0,{==} arc4.abi_call(\nLogger.echo_native_bytes, arc4.DynamicBytes(b"b"), app_id=app\n) typed_abi_call/typed_c2c.py:138-140 + // virtual: store tmp%10#0 to l-stack (no copy) (𝕡) app#0 | result1#0,tmp%8#0,tmp%10#0 arc4.abi_call(\nLogger.echo_native_bytes, arc4.DynamicBytes(b"b"), app_id=app\n) typed_abi_call/typed_c2c.py:138-140 + // virtual: load tmp%10#0 from l-stack (no copy) (𝕡) app#0 | result1#0,tmp%8#0,tmp%10#0 arc4.abi_call(\nLogger.echo_native_bytes, arc4.DynamicBytes(b"b"), app_id=app\n) typed_abi_call/typed_c2c.py:138-140 + assert // ARC4 prefix is valid // (𝕡) app#0 | result1#0,tmp%8#0 arc4.abi_call(\nLogger.echo_native_bytes, arc4.DynamicBytes(b"b"), app_id=app\n) typed_abi_call/typed_c2c.py:138-140 + // virtual: load tmp%8#0 from l-stack (no copy) (𝕡) app#0 | result1#0,tmp%8#0 result3, _txn = arc4.abi_call(\nLogger.echo_native_bytes, arc4.DynamicBytes(b"b"), app_id=app\n) typed_abi_call/typed_c2c.py:138-140 + extract 2 0 // (𝕡) app#0 | result1#0,{extract} arc4.abi_call(\nLogger.echo_native_bytes, arc4.DynamicBytes(b"b"), app_id=app\n) typed_abi_call/typed_c2c.py:138-140 + // virtual: store result3#0 to l-stack (no copy) (𝕡) app#0 | result1#0,result3#0 result3, _txn = arc4.abi_call(\nLogger.echo_native_bytes, arc4.DynamicBytes(b"b"), app_id=app\n) typed_abi_call/typed_c2c.py:138-140 + // virtual: load result3#0 from l-stack (no copy) (𝕡) app#0 | result1#0,result3#0 result3 == result1 typed_abi_call/typed_c2c.py:141 + uncover 1 // load result1#0 from l-stack (no copy) (𝕡) app#0 | result3#0,result1#0 result3 == result1 typed_abi_call/typed_c2c.py:141 + == // (𝕡) app#0 | {==} result3 == result1 typed_abi_call/typed_c2c.py:141 + // virtual: store tmp%11#0 to l-stack (no copy) (𝕡) app#0 | tmp%11#0 result3 == result1 typed_abi_call/typed_c2c.py:141 + // virtual: load tmp%11#0 from l-stack (no copy) (𝕡) app#0 | tmp%11#0 assert result3 == result1 typed_abi_call/typed_c2c.py:141 + assert // (𝕡) app#0 | assert result3 == result1 typed_abi_call/typed_c2c.py:141 + retsub // // test_cases.typed_abi_call.typed_c2c.Greeter.test_native_uint64(app: uint64) -> void: test_native_uint64: - proto 1 0 // (𝕡) app#0 | @arc4.abimethod()\ndef test_native_uint64(self, app: Application) -> None: typed_abi_call/typed_c2c.py:143-144 + proto 1 0 // (𝕡) app#0 | @arc4.abimethod()\ndef test_native_uint64(self, app: Application) -> None: typed_abi_call/typed_c2c.py:143-144 test_native_uint64_block@0: - itxn_begin // (𝕡) app#0 | arc4.abi_call(Logger.echo_native_uint64, 1, app_id=app) typed_abi_call/typed_c2c.py:145 - frame_dig -1 // load app#0 from parameters (𝕡) app#0 | app#0 - itxn_field ApplicationID // (𝕡) app#0 | - method "echo_native_uint64(uint64)uint64" // (𝕡) app#0 | method<"echo_native_uint64(uint64)uint64"> arc4.abi_call(Logger.echo_native_uint64, 1, app_id=app) typed_abi_call/typed_c2c.py:145 - itxn_field ApplicationArgs // (𝕡) app#0 | - byte 0x0000000000000001 // (𝕡) app#0 | 0x0000000000000001 1 typed_abi_call/typed_c2c.py:145 - itxn_field ApplicationArgs // (𝕡) app#0 | - int appl // (𝕡) app#0 | appl arc4.abi_call(Logger.echo_native_uint64, 1, app_id=app) typed_abi_call/typed_c2c.py:145 - itxn_field TypeEnum // (𝕡) app#0 | - int 0 // (𝕡) app#0 | 0 arc4.abi_call(Logger.echo_native_uint64, 1, app_id=app) typed_abi_call/typed_c2c.py:145 - itxn_field Fee // (𝕡) app#0 | - itxn_submit // (𝕡) app#0 | arc4.abi_call(Logger.echo_native_uint64, 1, app_id=app) typed_abi_call/typed_c2c.py:145 - itxn LastLog // (𝕡) app#0 | {itxn} arc4.abi_call(Logger.echo_native_uint64, 1, app_id=app) typed_abi_call/typed_c2c.py:145 - // virtual: store awst_tmp%0#0 to l-stack (no copy) (𝕡) app#0 | awst_tmp%0#0 arc4.abi_call(Logger.echo_native_uint64, 1, app_id=app) typed_abi_call/typed_c2c.py:145 - dup // load awst_tmp%0#0 from l-stack (copy) (𝕡) app#0 | awst_tmp%0#0,awst_tmp%0#0 arc4.abi_call(Logger.echo_native_uint64, 1, app_id=app) typed_abi_call/typed_c2c.py:145 - extract 4 0 // (𝕡) app#0 | awst_tmp%0#0,{extract} arc4.abi_call(Logger.echo_native_uint64, 1, app_id=app) typed_abi_call/typed_c2c.py:145 - cover 1 // store tmp%0#0 to l-stack (no copy) (𝕡) app#0 | tmp%0#0,awst_tmp%0#0 arc4.abi_call(Logger.echo_native_uint64, 1, app_id=app) typed_abi_call/typed_c2c.py:145 - // virtual: load awst_tmp%0#0 from l-stack (no copy) (𝕡) app#0 | tmp%0#0,awst_tmp%0#0 arc4.abi_call(Logger.echo_native_uint64, 1, app_id=app) typed_abi_call/typed_c2c.py:145 - extract 0 4 // (𝕡) app#0 | tmp%0#0,{extract} arc4.abi_call(Logger.echo_native_uint64, 1, app_id=app) typed_abi_call/typed_c2c.py:145 - // virtual: store tmp%1#0 to l-stack (no copy) (𝕡) app#0 | tmp%0#0,tmp%1#0 arc4.abi_call(Logger.echo_native_uint64, 1, app_id=app) typed_abi_call/typed_c2c.py:145 - // virtual: load tmp%1#0 from l-stack (no copy) (𝕡) app#0 | tmp%0#0,tmp%1#0 arc4.abi_call(Logger.echo_native_uint64, 1, app_id=app) typed_abi_call/typed_c2c.py:145 - byte 0x151f7c75 // (𝕡) app#0 | tmp%0#0,tmp%1#0,0x151f7c75 arc4.abi_call(Logger.echo_native_uint64, 1, app_id=app) typed_abi_call/typed_c2c.py:145 - == // (𝕡) app#0 | tmp%0#0,{==} arc4.abi_call(Logger.echo_native_uint64, 1, app_id=app) typed_abi_call/typed_c2c.py:145 - // virtual: store tmp%2#0 to l-stack (no copy) (𝕡) app#0 | tmp%0#0,tmp%2#0 arc4.abi_call(Logger.echo_native_uint64, 1, app_id=app) typed_abi_call/typed_c2c.py:145 - // virtual: load tmp%2#0 from l-stack (no copy) (𝕡) app#0 | tmp%0#0,tmp%2#0 arc4.abi_call(Logger.echo_native_uint64, 1, app_id=app) typed_abi_call/typed_c2c.py:145 - assert // ARC4 prefix is valid // (𝕡) app#0 | tmp%0#0 arc4.abi_call(Logger.echo_native_uint64, 1, app_id=app) typed_abi_call/typed_c2c.py:145 - // virtual: load tmp%0#0 from l-stack (no copy) (𝕡) app#0 | tmp%0#0 result1, _txn = arc4.abi_call(Logger.echo_native_uint64, 1, app_id=app) typed_abi_call/typed_c2c.py:145 - btoi // (𝕡) app#0 | {btoi} arc4.abi_call(Logger.echo_native_uint64, 1, app_id=app) typed_abi_call/typed_c2c.py:145 - // virtual: store result1#0 to l-stack (no copy) (𝕡) app#0 | result1#0 result1, _txn = arc4.abi_call(Logger.echo_native_uint64, 1, app_id=app) typed_abi_call/typed_c2c.py:145 - dup // load result1#0 from l-stack (copy) (𝕡) app#0 | result1#0,result1#0 result1 == 2 typed_abi_call/typed_c2c.py:146 - int 2 // (𝕡) app#0 | result1#0,result1#0,2 2 typed_abi_call/typed_c2c.py:146 - == // (𝕡) app#0 | result1#0,{==} result1 == 2 typed_abi_call/typed_c2c.py:146 - // virtual: store tmp%3#0 to l-stack (no copy) (𝕡) app#0 | result1#0,tmp%3#0 result1 == 2 typed_abi_call/typed_c2c.py:146 - // virtual: load tmp%3#0 from l-stack (no copy) (𝕡) app#0 | result1#0,tmp%3#0 assert result1 == 2 typed_abi_call/typed_c2c.py:146 - assert // (𝕡) app#0 | result1#0 assert result1 == 2 typed_abi_call/typed_c2c.py:146 - itxn_begin // (𝕡) app#0 | result1#0 arc4.abi_call(Logger.echo_native_uint64, UInt64(1), app_id=app) typed_abi_call/typed_c2c.py:148 - int 1 // (𝕡) app#0 | result1#0,1 UInt64(1) typed_abi_call/typed_c2c.py:148 - itob // (𝕡) app#0 | result1#0,{itob} UInt64(1) typed_abi_call/typed_c2c.py:148 - // virtual: store val_as_bytes%0#0 to l-stack (no copy) (𝕡) app#0 | result1#0,val_as_bytes%0#0 UInt64(1) typed_abi_call/typed_c2c.py:148 - frame_dig -1 // load app#0 from parameters (𝕡) app#0 | result1#0,val_as_bytes%0#0,app#0 - itxn_field ApplicationID // (𝕡) app#0 | result1#0,val_as_bytes%0#0 - method "echo_native_uint64(uint64)uint64" // (𝕡) app#0 | result1#0,val_as_bytes%0#0,method<"echo_native_uint64(uint64)uint64"> arc4.abi_call(Logger.echo_native_uint64, UInt64(1), app_id=app) typed_abi_call/typed_c2c.py:148 - itxn_field ApplicationArgs // (𝕡) app#0 | result1#0,val_as_bytes%0#0 - // virtual: load val_as_bytes%0#0 from l-stack (no copy) (𝕡) app#0 | result1#0,val_as_bytes%0#0 - itxn_field ApplicationArgs // (𝕡) app#0 | result1#0 - int appl // (𝕡) app#0 | result1#0,appl arc4.abi_call(Logger.echo_native_uint64, UInt64(1), app_id=app) typed_abi_call/typed_c2c.py:148 - itxn_field TypeEnum // (𝕡) app#0 | result1#0 - int 0 // (𝕡) app#0 | result1#0,0 arc4.abi_call(Logger.echo_native_uint64, UInt64(1), app_id=app) typed_abi_call/typed_c2c.py:148 - itxn_field Fee // (𝕡) app#0 | result1#0 - itxn_submit // (𝕡) app#0 | result1#0 arc4.abi_call(Logger.echo_native_uint64, UInt64(1), app_id=app) typed_abi_call/typed_c2c.py:148 - itxn LastLog // (𝕡) app#0 | result1#0,{itxn} arc4.abi_call(Logger.echo_native_uint64, UInt64(1), app_id=app) typed_abi_call/typed_c2c.py:148 - // virtual: store awst_tmp%1#0 to l-stack (no copy) (𝕡) app#0 | result1#0,awst_tmp%1#0 arc4.abi_call(Logger.echo_native_uint64, UInt64(1), app_id=app) typed_abi_call/typed_c2c.py:148 - dup // load awst_tmp%1#0 from l-stack (copy) (𝕡) app#0 | result1#0,awst_tmp%1#0,awst_tmp%1#0 arc4.abi_call(Logger.echo_native_uint64, UInt64(1), app_id=app) typed_abi_call/typed_c2c.py:148 - extract 4 0 // (𝕡) app#0 | result1#0,awst_tmp%1#0,{extract} arc4.abi_call(Logger.echo_native_uint64, UInt64(1), app_id=app) typed_abi_call/typed_c2c.py:148 - cover 1 // store tmp%4#0 to l-stack (no copy) (𝕡) app#0 | result1#0,tmp%4#0,awst_tmp%1#0 arc4.abi_call(Logger.echo_native_uint64, UInt64(1), app_id=app) typed_abi_call/typed_c2c.py:148 - // virtual: load awst_tmp%1#0 from l-stack (no copy) (𝕡) app#0 | result1#0,tmp%4#0,awst_tmp%1#0 arc4.abi_call(Logger.echo_native_uint64, UInt64(1), app_id=app) typed_abi_call/typed_c2c.py:148 - extract 0 4 // (𝕡) app#0 | result1#0,tmp%4#0,{extract} arc4.abi_call(Logger.echo_native_uint64, UInt64(1), app_id=app) typed_abi_call/typed_c2c.py:148 - // virtual: store tmp%5#0 to l-stack (no copy) (𝕡) app#0 | result1#0,tmp%4#0,tmp%5#0 arc4.abi_call(Logger.echo_native_uint64, UInt64(1), app_id=app) typed_abi_call/typed_c2c.py:148 - // virtual: load tmp%5#0 from l-stack (no copy) (𝕡) app#0 | result1#0,tmp%4#0,tmp%5#0 arc4.abi_call(Logger.echo_native_uint64, UInt64(1), app_id=app) typed_abi_call/typed_c2c.py:148 - byte 0x151f7c75 // (𝕡) app#0 | result1#0,tmp%4#0,tmp%5#0,0x151f7c75 arc4.abi_call(Logger.echo_native_uint64, UInt64(1), app_id=app) typed_abi_call/typed_c2c.py:148 - == // (𝕡) app#0 | result1#0,tmp%4#0,{==} arc4.abi_call(Logger.echo_native_uint64, UInt64(1), app_id=app) typed_abi_call/typed_c2c.py:148 - // virtual: store tmp%6#0 to l-stack (no copy) (𝕡) app#0 | result1#0,tmp%4#0,tmp%6#0 arc4.abi_call(Logger.echo_native_uint64, UInt64(1), app_id=app) typed_abi_call/typed_c2c.py:148 - // virtual: load tmp%6#0 from l-stack (no copy) (𝕡) app#0 | result1#0,tmp%4#0,tmp%6#0 arc4.abi_call(Logger.echo_native_uint64, UInt64(1), app_id=app) typed_abi_call/typed_c2c.py:148 - assert // ARC4 prefix is valid // (𝕡) app#0 | result1#0,tmp%4#0 arc4.abi_call(Logger.echo_native_uint64, UInt64(1), app_id=app) typed_abi_call/typed_c2c.py:148 - // virtual: load tmp%4#0 from l-stack (no copy) (𝕡) app#0 | result1#0,tmp%4#0 result2, _txn = arc4.abi_call(Logger.echo_native_uint64, UInt64(1), app_id=app) typed_abi_call/typed_c2c.py:148 - btoi // (𝕡) app#0 | result1#0,{btoi} arc4.abi_call(Logger.echo_native_uint64, UInt64(1), app_id=app) typed_abi_call/typed_c2c.py:148 - // virtual: store result2#0 to l-stack (no copy) (𝕡) app#0 | result1#0,result2#0 result2, _txn = arc4.abi_call(Logger.echo_native_uint64, UInt64(1), app_id=app) typed_abi_call/typed_c2c.py:148 - // virtual: load result2#0 from l-stack (no copy) (𝕡) app#0 | result1#0,result2#0 result2 == result1 typed_abi_call/typed_c2c.py:149 - dig 1 // load result1#0 from l-stack (copy) (𝕡) app#0 | result1#0,result2#0,result1#0 result2 == result1 typed_abi_call/typed_c2c.py:149 - == // (𝕡) app#0 | result1#0,{==} result2 == result1 typed_abi_call/typed_c2c.py:149 - // virtual: store tmp%7#0 to l-stack (no copy) (𝕡) app#0 | result1#0,tmp%7#0 result2 == result1 typed_abi_call/typed_c2c.py:149 - // virtual: load tmp%7#0 from l-stack (no copy) (𝕡) app#0 | result1#0,tmp%7#0 assert result2 == result1 typed_abi_call/typed_c2c.py:149 - assert // (𝕡) app#0 | result1#0 assert result2 == result1 typed_abi_call/typed_c2c.py:149 - itxn_begin // (𝕡) app#0 | result1#0 arc4.abi_call(Logger.echo_native_uint64, arc4.UInt64(1), app_id=app) typed_abi_call/typed_c2c.py:151 - frame_dig -1 // load app#0 from parameters (𝕡) app#0 | result1#0,app#0 - itxn_field ApplicationID // (𝕡) app#0 | result1#0 - method "echo_native_uint64(uint64)uint64" // (𝕡) app#0 | result1#0,method<"echo_native_uint64(uint64)uint64"> arc4.abi_call(Logger.echo_native_uint64, arc4.UInt64(1), app_id=app) typed_abi_call/typed_c2c.py:151 - itxn_field ApplicationArgs // (𝕡) app#0 | result1#0 - byte 0x0000000000000001 // (𝕡) app#0 | result1#0,0x0000000000000001 arc4.UInt64(1) typed_abi_call/typed_c2c.py:151 - itxn_field ApplicationArgs // (𝕡) app#0 | result1#0 - int appl // (𝕡) app#0 | result1#0,appl arc4.abi_call(Logger.echo_native_uint64, arc4.UInt64(1), app_id=app) typed_abi_call/typed_c2c.py:151 - itxn_field TypeEnum // (𝕡) app#0 | result1#0 - int 0 // (𝕡) app#0 | result1#0,0 arc4.abi_call(Logger.echo_native_uint64, arc4.UInt64(1), app_id=app) typed_abi_call/typed_c2c.py:151 - itxn_field Fee // (𝕡) app#0 | result1#0 - itxn_submit // (𝕡) app#0 | result1#0 arc4.abi_call(Logger.echo_native_uint64, arc4.UInt64(1), app_id=app) typed_abi_call/typed_c2c.py:151 - itxn LastLog // (𝕡) app#0 | result1#0,{itxn} arc4.abi_call(Logger.echo_native_uint64, arc4.UInt64(1), app_id=app) typed_abi_call/typed_c2c.py:151 - // virtual: store awst_tmp%2#0 to l-stack (no copy) (𝕡) app#0 | result1#0,awst_tmp%2#0 arc4.abi_call(Logger.echo_native_uint64, arc4.UInt64(1), app_id=app) typed_abi_call/typed_c2c.py:151 - dup // load awst_tmp%2#0 from l-stack (copy) (𝕡) app#0 | result1#0,awst_tmp%2#0,awst_tmp%2#0 arc4.abi_call(Logger.echo_native_uint64, arc4.UInt64(1), app_id=app) typed_abi_call/typed_c2c.py:151 - extract 4 0 // (𝕡) app#0 | result1#0,awst_tmp%2#0,{extract} arc4.abi_call(Logger.echo_native_uint64, arc4.UInt64(1), app_id=app) typed_abi_call/typed_c2c.py:151 - cover 1 // store tmp%8#0 to l-stack (no copy) (𝕡) app#0 | result1#0,tmp%8#0,awst_tmp%2#0 arc4.abi_call(Logger.echo_native_uint64, arc4.UInt64(1), app_id=app) typed_abi_call/typed_c2c.py:151 - // virtual: load awst_tmp%2#0 from l-stack (no copy) (𝕡) app#0 | result1#0,tmp%8#0,awst_tmp%2#0 arc4.abi_call(Logger.echo_native_uint64, arc4.UInt64(1), app_id=app) typed_abi_call/typed_c2c.py:151 - extract 0 4 // (𝕡) app#0 | result1#0,tmp%8#0,{extract} arc4.abi_call(Logger.echo_native_uint64, arc4.UInt64(1), app_id=app) typed_abi_call/typed_c2c.py:151 - // virtual: store tmp%9#0 to l-stack (no copy) (𝕡) app#0 | result1#0,tmp%8#0,tmp%9#0 arc4.abi_call(Logger.echo_native_uint64, arc4.UInt64(1), app_id=app) typed_abi_call/typed_c2c.py:151 - // virtual: load tmp%9#0 from l-stack (no copy) (𝕡) app#0 | result1#0,tmp%8#0,tmp%9#0 arc4.abi_call(Logger.echo_native_uint64, arc4.UInt64(1), app_id=app) typed_abi_call/typed_c2c.py:151 - byte 0x151f7c75 // (𝕡) app#0 | result1#0,tmp%8#0,tmp%9#0,0x151f7c75 arc4.abi_call(Logger.echo_native_uint64, arc4.UInt64(1), app_id=app) typed_abi_call/typed_c2c.py:151 - == // (𝕡) app#0 | result1#0,tmp%8#0,{==} arc4.abi_call(Logger.echo_native_uint64, arc4.UInt64(1), app_id=app) typed_abi_call/typed_c2c.py:151 - // virtual: store tmp%10#0 to l-stack (no copy) (𝕡) app#0 | result1#0,tmp%8#0,tmp%10#0 arc4.abi_call(Logger.echo_native_uint64, arc4.UInt64(1), app_id=app) typed_abi_call/typed_c2c.py:151 - // virtual: load tmp%10#0 from l-stack (no copy) (𝕡) app#0 | result1#0,tmp%8#0,tmp%10#0 arc4.abi_call(Logger.echo_native_uint64, arc4.UInt64(1), app_id=app) typed_abi_call/typed_c2c.py:151 - assert // ARC4 prefix is valid // (𝕡) app#0 | result1#0,tmp%8#0 arc4.abi_call(Logger.echo_native_uint64, arc4.UInt64(1), app_id=app) typed_abi_call/typed_c2c.py:151 - // virtual: load tmp%8#0 from l-stack (no copy) (𝕡) app#0 | result1#0,tmp%8#0 result3, _txn = arc4.abi_call(Logger.echo_native_uint64, arc4.UInt64(1), app_id=app) typed_abi_call/typed_c2c.py:151 - btoi // (𝕡) app#0 | result1#0,{btoi} arc4.abi_call(Logger.echo_native_uint64, arc4.UInt64(1), app_id=app) typed_abi_call/typed_c2c.py:151 - // virtual: store result3#0 to l-stack (no copy) (𝕡) app#0 | result1#0,result3#0 result3, _txn = arc4.abi_call(Logger.echo_native_uint64, arc4.UInt64(1), app_id=app) typed_abi_call/typed_c2c.py:151 - // virtual: load result3#0 from l-stack (no copy) (𝕡) app#0 | result1#0,result3#0 result3 == result1 typed_abi_call/typed_c2c.py:152 - uncover 1 // load result1#0 from l-stack (no copy) (𝕡) app#0 | result3#0,result1#0 result3 == result1 typed_abi_call/typed_c2c.py:152 - == // (𝕡) app#0 | {==} result3 == result1 typed_abi_call/typed_c2c.py:152 - // virtual: store tmp%11#0 to l-stack (no copy) (𝕡) app#0 | tmp%11#0 result3 == result1 typed_abi_call/typed_c2c.py:152 - // virtual: load tmp%11#0 from l-stack (no copy) (𝕡) app#0 | tmp%11#0 assert result3 == result1 typed_abi_call/typed_c2c.py:152 - assert // (𝕡) app#0 | assert result3 == result1 typed_abi_call/typed_c2c.py:152 - retsub // + itxn_begin // (𝕡) app#0 | arc4.abi_call(Logger.echo_native_uint64, 1, app_id=app) typed_abi_call/typed_c2c.py:145 + frame_dig -1 // load app#0 from parameters (𝕡) app#0 | app#0 + itxn_field ApplicationID // (𝕡) app#0 | + method "echo_native_uint64(uint64)uint64" // (𝕡) app#0 | method<"echo_native_uint64(uint64)uint64"> arc4.abi_call(Logger.echo_native_uint64, 1, app_id=app) typed_abi_call/typed_c2c.py:145 + itxn_field ApplicationArgs // (𝕡) app#0 | + byte 0x0000000000000001 // (𝕡) app#0 | 0x0000000000000001 1 typed_abi_call/typed_c2c.py:145 + itxn_field ApplicationArgs // (𝕡) app#0 | + int appl // (𝕡) app#0 | appl arc4.abi_call(Logger.echo_native_uint64, 1, app_id=app) typed_abi_call/typed_c2c.py:145 + itxn_field TypeEnum // (𝕡) app#0 | + int 0 // (𝕡) app#0 | 0 arc4.abi_call(Logger.echo_native_uint64, 1, app_id=app) typed_abi_call/typed_c2c.py:145 + itxn_field Fee // (𝕡) app#0 | + itxn_submit // (𝕡) app#0 | arc4.abi_call(Logger.echo_native_uint64, 1, app_id=app) typed_abi_call/typed_c2c.py:145 + itxn LastLog // (𝕡) app#0 | {itxn} arc4.abi_call(Logger.echo_native_uint64, 1, app_id=app) typed_abi_call/typed_c2c.py:145 + // virtual: store awst_tmp%0#0 to l-stack (no copy) (𝕡) app#0 | awst_tmp%0#0 arc4.abi_call(Logger.echo_native_uint64, 1, app_id=app) typed_abi_call/typed_c2c.py:145 + dup // load awst_tmp%0#0 from l-stack (copy) (𝕡) app#0 | awst_tmp%0#0,awst_tmp%0#0 arc4.abi_call(Logger.echo_native_uint64, 1, app_id=app) typed_abi_call/typed_c2c.py:145 + extract 4 0 // (𝕡) app#0 | awst_tmp%0#0,{extract} arc4.abi_call(Logger.echo_native_uint64, 1, app_id=app) typed_abi_call/typed_c2c.py:145 + cover 1 // store tmp%0#0 to l-stack (no copy) (𝕡) app#0 | tmp%0#0,awst_tmp%0#0 arc4.abi_call(Logger.echo_native_uint64, 1, app_id=app) typed_abi_call/typed_c2c.py:145 + // virtual: load awst_tmp%0#0 from l-stack (no copy) (𝕡) app#0 | tmp%0#0,awst_tmp%0#0 arc4.abi_call(Logger.echo_native_uint64, 1, app_id=app) typed_abi_call/typed_c2c.py:145 + extract 0 4 // (𝕡) app#0 | tmp%0#0,{extract} arc4.abi_call(Logger.echo_native_uint64, 1, app_id=app) typed_abi_call/typed_c2c.py:145 + // virtual: store tmp%1#0 to l-stack (no copy) (𝕡) app#0 | tmp%0#0,tmp%1#0 arc4.abi_call(Logger.echo_native_uint64, 1, app_id=app) typed_abi_call/typed_c2c.py:145 + // virtual: load tmp%1#0 from l-stack (no copy) (𝕡) app#0 | tmp%0#0,tmp%1#0 arc4.abi_call(Logger.echo_native_uint64, 1, app_id=app) typed_abi_call/typed_c2c.py:145 + byte 0x151f7c75 // (𝕡) app#0 | tmp%0#0,tmp%1#0,0x151f7c75 arc4.abi_call(Logger.echo_native_uint64, 1, app_id=app) typed_abi_call/typed_c2c.py:145 + == // (𝕡) app#0 | tmp%0#0,{==} arc4.abi_call(Logger.echo_native_uint64, 1, app_id=app) typed_abi_call/typed_c2c.py:145 + // virtual: store tmp%2#0 to l-stack (no copy) (𝕡) app#0 | tmp%0#0,tmp%2#0 arc4.abi_call(Logger.echo_native_uint64, 1, app_id=app) typed_abi_call/typed_c2c.py:145 + // virtual: load tmp%2#0 from l-stack (no copy) (𝕡) app#0 | tmp%0#0,tmp%2#0 arc4.abi_call(Logger.echo_native_uint64, 1, app_id=app) typed_abi_call/typed_c2c.py:145 + assert // ARC4 prefix is valid // (𝕡) app#0 | tmp%0#0 arc4.abi_call(Logger.echo_native_uint64, 1, app_id=app) typed_abi_call/typed_c2c.py:145 + // virtual: load tmp%0#0 from l-stack (no copy) (𝕡) app#0 | tmp%0#0 result1, _txn = arc4.abi_call(Logger.echo_native_uint64, 1, app_id=app) typed_abi_call/typed_c2c.py:145 + btoi // (𝕡) app#0 | {btoi} arc4.abi_call(Logger.echo_native_uint64, 1, app_id=app) typed_abi_call/typed_c2c.py:145 + // virtual: store result1#0 to l-stack (no copy) (𝕡) app#0 | result1#0 result1, _txn = arc4.abi_call(Logger.echo_native_uint64, 1, app_id=app) typed_abi_call/typed_c2c.py:145 + dup // load result1#0 from l-stack (copy) (𝕡) app#0 | result1#0,result1#0 result1 == 2 typed_abi_call/typed_c2c.py:146 + int 2 // (𝕡) app#0 | result1#0,result1#0,2 2 typed_abi_call/typed_c2c.py:146 + == // (𝕡) app#0 | result1#0,{==} result1 == 2 typed_abi_call/typed_c2c.py:146 + // virtual: store tmp%3#0 to l-stack (no copy) (𝕡) app#0 | result1#0,tmp%3#0 result1 == 2 typed_abi_call/typed_c2c.py:146 + // virtual: load tmp%3#0 from l-stack (no copy) (𝕡) app#0 | result1#0,tmp%3#0 assert result1 == 2 typed_abi_call/typed_c2c.py:146 + assert // (𝕡) app#0 | result1#0 assert result1 == 2 typed_abi_call/typed_c2c.py:146 + itxn_begin // (𝕡) app#0 | result1#0 arc4.abi_call(Logger.echo_native_uint64, UInt64(1), app_id=app) typed_abi_call/typed_c2c.py:148 + int 1 // (𝕡) app#0 | result1#0,1 UInt64(1) typed_abi_call/typed_c2c.py:148 + itob // (𝕡) app#0 | result1#0,{itob} UInt64(1) typed_abi_call/typed_c2c.py:148 + // virtual: store val_as_bytes%0#0 to l-stack (no copy) (𝕡) app#0 | result1#0,val_as_bytes%0#0 UInt64(1) typed_abi_call/typed_c2c.py:148 + frame_dig -1 // load app#0 from parameters (𝕡) app#0 | result1#0,val_as_bytes%0#0,app#0 + itxn_field ApplicationID // (𝕡) app#0 | result1#0,val_as_bytes%0#0 + method "echo_native_uint64(uint64)uint64" // (𝕡) app#0 | result1#0,val_as_bytes%0#0,method<"echo_native_uint64(uint64)uint64"> arc4.abi_call(Logger.echo_native_uint64, UInt64(1), app_id=app) typed_abi_call/typed_c2c.py:148 + itxn_field ApplicationArgs // (𝕡) app#0 | result1#0,val_as_bytes%0#0 + // virtual: load val_as_bytes%0#0 from l-stack (no copy) (𝕡) app#0 | result1#0,val_as_bytes%0#0 + itxn_field ApplicationArgs // (𝕡) app#0 | result1#0 + int appl // (𝕡) app#0 | result1#0,appl arc4.abi_call(Logger.echo_native_uint64, UInt64(1), app_id=app) typed_abi_call/typed_c2c.py:148 + itxn_field TypeEnum // (𝕡) app#0 | result1#0 + int 0 // (𝕡) app#0 | result1#0,0 arc4.abi_call(Logger.echo_native_uint64, UInt64(1), app_id=app) typed_abi_call/typed_c2c.py:148 + itxn_field Fee // (𝕡) app#0 | result1#0 + itxn_submit // (𝕡) app#0 | result1#0 arc4.abi_call(Logger.echo_native_uint64, UInt64(1), app_id=app) typed_abi_call/typed_c2c.py:148 + itxn LastLog // (𝕡) app#0 | result1#0,{itxn} arc4.abi_call(Logger.echo_native_uint64, UInt64(1), app_id=app) typed_abi_call/typed_c2c.py:148 + // virtual: store awst_tmp%1#0 to l-stack (no copy) (𝕡) app#0 | result1#0,awst_tmp%1#0 arc4.abi_call(Logger.echo_native_uint64, UInt64(1), app_id=app) typed_abi_call/typed_c2c.py:148 + dup // load awst_tmp%1#0 from l-stack (copy) (𝕡) app#0 | result1#0,awst_tmp%1#0,awst_tmp%1#0 arc4.abi_call(Logger.echo_native_uint64, UInt64(1), app_id=app) typed_abi_call/typed_c2c.py:148 + extract 4 0 // (𝕡) app#0 | result1#0,awst_tmp%1#0,{extract} arc4.abi_call(Logger.echo_native_uint64, UInt64(1), app_id=app) typed_abi_call/typed_c2c.py:148 + cover 1 // store tmp%4#0 to l-stack (no copy) (𝕡) app#0 | result1#0,tmp%4#0,awst_tmp%1#0 arc4.abi_call(Logger.echo_native_uint64, UInt64(1), app_id=app) typed_abi_call/typed_c2c.py:148 + // virtual: load awst_tmp%1#0 from l-stack (no copy) (𝕡) app#0 | result1#0,tmp%4#0,awst_tmp%1#0 arc4.abi_call(Logger.echo_native_uint64, UInt64(1), app_id=app) typed_abi_call/typed_c2c.py:148 + extract 0 4 // (𝕡) app#0 | result1#0,tmp%4#0,{extract} arc4.abi_call(Logger.echo_native_uint64, UInt64(1), app_id=app) typed_abi_call/typed_c2c.py:148 + // virtual: store tmp%5#0 to l-stack (no copy) (𝕡) app#0 | result1#0,tmp%4#0,tmp%5#0 arc4.abi_call(Logger.echo_native_uint64, UInt64(1), app_id=app) typed_abi_call/typed_c2c.py:148 + // virtual: load tmp%5#0 from l-stack (no copy) (𝕡) app#0 | result1#0,tmp%4#0,tmp%5#0 arc4.abi_call(Logger.echo_native_uint64, UInt64(1), app_id=app) typed_abi_call/typed_c2c.py:148 + byte 0x151f7c75 // (𝕡) app#0 | result1#0,tmp%4#0,tmp%5#0,0x151f7c75 arc4.abi_call(Logger.echo_native_uint64, UInt64(1), app_id=app) typed_abi_call/typed_c2c.py:148 + == // (𝕡) app#0 | result1#0,tmp%4#0,{==} arc4.abi_call(Logger.echo_native_uint64, UInt64(1), app_id=app) typed_abi_call/typed_c2c.py:148 + // virtual: store tmp%6#0 to l-stack (no copy) (𝕡) app#0 | result1#0,tmp%4#0,tmp%6#0 arc4.abi_call(Logger.echo_native_uint64, UInt64(1), app_id=app) typed_abi_call/typed_c2c.py:148 + // virtual: load tmp%6#0 from l-stack (no copy) (𝕡) app#0 | result1#0,tmp%4#0,tmp%6#0 arc4.abi_call(Logger.echo_native_uint64, UInt64(1), app_id=app) typed_abi_call/typed_c2c.py:148 + assert // ARC4 prefix is valid // (𝕡) app#0 | result1#0,tmp%4#0 arc4.abi_call(Logger.echo_native_uint64, UInt64(1), app_id=app) typed_abi_call/typed_c2c.py:148 + // virtual: load tmp%4#0 from l-stack (no copy) (𝕡) app#0 | result1#0,tmp%4#0 result2, _txn = arc4.abi_call(Logger.echo_native_uint64, UInt64(1), app_id=app) typed_abi_call/typed_c2c.py:148 + btoi // (𝕡) app#0 | result1#0,{btoi} arc4.abi_call(Logger.echo_native_uint64, UInt64(1), app_id=app) typed_abi_call/typed_c2c.py:148 + // virtual: store result2#0 to l-stack (no copy) (𝕡) app#0 | result1#0,result2#0 result2, _txn = arc4.abi_call(Logger.echo_native_uint64, UInt64(1), app_id=app) typed_abi_call/typed_c2c.py:148 + // virtual: load result2#0 from l-stack (no copy) (𝕡) app#0 | result1#0,result2#0 result2 == result1 typed_abi_call/typed_c2c.py:149 + dig 1 // load result1#0 from l-stack (copy) (𝕡) app#0 | result1#0,result2#0,result1#0 result2 == result1 typed_abi_call/typed_c2c.py:149 + == // (𝕡) app#0 | result1#0,{==} result2 == result1 typed_abi_call/typed_c2c.py:149 + // virtual: store tmp%7#0 to l-stack (no copy) (𝕡) app#0 | result1#0,tmp%7#0 result2 == result1 typed_abi_call/typed_c2c.py:149 + // virtual: load tmp%7#0 from l-stack (no copy) (𝕡) app#0 | result1#0,tmp%7#0 assert result2 == result1 typed_abi_call/typed_c2c.py:149 + assert // (𝕡) app#0 | result1#0 assert result2 == result1 typed_abi_call/typed_c2c.py:149 + itxn_begin // (𝕡) app#0 | result1#0 arc4.abi_call(Logger.echo_native_uint64, arc4.UInt64(1), app_id=app) typed_abi_call/typed_c2c.py:151 + frame_dig -1 // load app#0 from parameters (𝕡) app#0 | result1#0,app#0 + itxn_field ApplicationID // (𝕡) app#0 | result1#0 + method "echo_native_uint64(uint64)uint64" // (𝕡) app#0 | result1#0,method<"echo_native_uint64(uint64)uint64"> arc4.abi_call(Logger.echo_native_uint64, arc4.UInt64(1), app_id=app) typed_abi_call/typed_c2c.py:151 + itxn_field ApplicationArgs // (𝕡) app#0 | result1#0 + byte 0x0000000000000001 // (𝕡) app#0 | result1#0,0x0000000000000001 arc4.UInt64(1) typed_abi_call/typed_c2c.py:151 + itxn_field ApplicationArgs // (𝕡) app#0 | result1#0 + int appl // (𝕡) app#0 | result1#0,appl arc4.abi_call(Logger.echo_native_uint64, arc4.UInt64(1), app_id=app) typed_abi_call/typed_c2c.py:151 + itxn_field TypeEnum // (𝕡) app#0 | result1#0 + int 0 // (𝕡) app#0 | result1#0,0 arc4.abi_call(Logger.echo_native_uint64, arc4.UInt64(1), app_id=app) typed_abi_call/typed_c2c.py:151 + itxn_field Fee // (𝕡) app#0 | result1#0 + itxn_submit // (𝕡) app#0 | result1#0 arc4.abi_call(Logger.echo_native_uint64, arc4.UInt64(1), app_id=app) typed_abi_call/typed_c2c.py:151 + itxn LastLog // (𝕡) app#0 | result1#0,{itxn} arc4.abi_call(Logger.echo_native_uint64, arc4.UInt64(1), app_id=app) typed_abi_call/typed_c2c.py:151 + // virtual: store awst_tmp%2#0 to l-stack (no copy) (𝕡) app#0 | result1#0,awst_tmp%2#0 arc4.abi_call(Logger.echo_native_uint64, arc4.UInt64(1), app_id=app) typed_abi_call/typed_c2c.py:151 + dup // load awst_tmp%2#0 from l-stack (copy) (𝕡) app#0 | result1#0,awst_tmp%2#0,awst_tmp%2#0 arc4.abi_call(Logger.echo_native_uint64, arc4.UInt64(1), app_id=app) typed_abi_call/typed_c2c.py:151 + extract 4 0 // (𝕡) app#0 | result1#0,awst_tmp%2#0,{extract} arc4.abi_call(Logger.echo_native_uint64, arc4.UInt64(1), app_id=app) typed_abi_call/typed_c2c.py:151 + cover 1 // store tmp%8#0 to l-stack (no copy) (𝕡) app#0 | result1#0,tmp%8#0,awst_tmp%2#0 arc4.abi_call(Logger.echo_native_uint64, arc4.UInt64(1), app_id=app) typed_abi_call/typed_c2c.py:151 + // virtual: load awst_tmp%2#0 from l-stack (no copy) (𝕡) app#0 | result1#0,tmp%8#0,awst_tmp%2#0 arc4.abi_call(Logger.echo_native_uint64, arc4.UInt64(1), app_id=app) typed_abi_call/typed_c2c.py:151 + extract 0 4 // (𝕡) app#0 | result1#0,tmp%8#0,{extract} arc4.abi_call(Logger.echo_native_uint64, arc4.UInt64(1), app_id=app) typed_abi_call/typed_c2c.py:151 + // virtual: store tmp%9#0 to l-stack (no copy) (𝕡) app#0 | result1#0,tmp%8#0,tmp%9#0 arc4.abi_call(Logger.echo_native_uint64, arc4.UInt64(1), app_id=app) typed_abi_call/typed_c2c.py:151 + // virtual: load tmp%9#0 from l-stack (no copy) (𝕡) app#0 | result1#0,tmp%8#0,tmp%9#0 arc4.abi_call(Logger.echo_native_uint64, arc4.UInt64(1), app_id=app) typed_abi_call/typed_c2c.py:151 + byte 0x151f7c75 // (𝕡) app#0 | result1#0,tmp%8#0,tmp%9#0,0x151f7c75 arc4.abi_call(Logger.echo_native_uint64, arc4.UInt64(1), app_id=app) typed_abi_call/typed_c2c.py:151 + == // (𝕡) app#0 | result1#0,tmp%8#0,{==} arc4.abi_call(Logger.echo_native_uint64, arc4.UInt64(1), app_id=app) typed_abi_call/typed_c2c.py:151 + // virtual: store tmp%10#0 to l-stack (no copy) (𝕡) app#0 | result1#0,tmp%8#0,tmp%10#0 arc4.abi_call(Logger.echo_native_uint64, arc4.UInt64(1), app_id=app) typed_abi_call/typed_c2c.py:151 + // virtual: load tmp%10#0 from l-stack (no copy) (𝕡) app#0 | result1#0,tmp%8#0,tmp%10#0 arc4.abi_call(Logger.echo_native_uint64, arc4.UInt64(1), app_id=app) typed_abi_call/typed_c2c.py:151 + assert // ARC4 prefix is valid // (𝕡) app#0 | result1#0,tmp%8#0 arc4.abi_call(Logger.echo_native_uint64, arc4.UInt64(1), app_id=app) typed_abi_call/typed_c2c.py:151 + // virtual: load tmp%8#0 from l-stack (no copy) (𝕡) app#0 | result1#0,tmp%8#0 result3, _txn = arc4.abi_call(Logger.echo_native_uint64, arc4.UInt64(1), app_id=app) typed_abi_call/typed_c2c.py:151 + btoi // (𝕡) app#0 | result1#0,{btoi} arc4.abi_call(Logger.echo_native_uint64, arc4.UInt64(1), app_id=app) typed_abi_call/typed_c2c.py:151 + // virtual: store result3#0 to l-stack (no copy) (𝕡) app#0 | result1#0,result3#0 result3, _txn = arc4.abi_call(Logger.echo_native_uint64, arc4.UInt64(1), app_id=app) typed_abi_call/typed_c2c.py:151 + // virtual: load result3#0 from l-stack (no copy) (𝕡) app#0 | result1#0,result3#0 result3 == result1 typed_abi_call/typed_c2c.py:152 + uncover 1 // load result1#0 from l-stack (no copy) (𝕡) app#0 | result3#0,result1#0 result3 == result1 typed_abi_call/typed_c2c.py:152 + == // (𝕡) app#0 | {==} result3 == result1 typed_abi_call/typed_c2c.py:152 + // virtual: store tmp%11#0 to l-stack (no copy) (𝕡) app#0 | tmp%11#0 result3 == result1 typed_abi_call/typed_c2c.py:152 + // virtual: load tmp%11#0 from l-stack (no copy) (𝕡) app#0 | tmp%11#0 assert result3 == result1 typed_abi_call/typed_c2c.py:152 + assert // (𝕡) app#0 | assert result3 == result1 typed_abi_call/typed_c2c.py:152 + retsub // // test_cases.typed_abi_call.typed_c2c.Greeter.test_native_biguint(app: uint64) -> void: test_native_biguint: - proto 1 0 // (𝕡) app#0 | @arc4.abimethod()\ndef test_native_biguint(self, app: Application) -> None: typed_abi_call/typed_c2c.py:154-155 + proto 1 0 // (𝕡) app#0 | @arc4.abimethod()\ndef test_native_biguint(self, app: Application) -> None: typed_abi_call/typed_c2c.py:154-155 test_native_biguint_block@0: - itxn_begin // (𝕡) app#0 | arc4.abi_call(Logger.echo_native_biguint, 2, app_id=app) typed_abi_call/typed_c2c.py:156 - frame_dig -1 // load app#0 from parameters (𝕡) app#0 | app#0 - itxn_field ApplicationID // (𝕡) app#0 | - method "echo_native_biguint(uint512)uint512" // (𝕡) app#0 | method<"echo_native_biguint(uint512)uint512"> arc4.abi_call(Logger.echo_native_biguint, 2, app_id=app) typed_abi_call/typed_c2c.py:156 - itxn_field ApplicationArgs // (𝕡) app#0 | - byte 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002 // (𝕡) app#0 | 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002 2 typed_abi_call/typed_c2c.py:156 - itxn_field ApplicationArgs // (𝕡) app#0 | - int appl // (𝕡) app#0 | appl arc4.abi_call(Logger.echo_native_biguint, 2, app_id=app) typed_abi_call/typed_c2c.py:156 - itxn_field TypeEnum // (𝕡) app#0 | - int 0 // (𝕡) app#0 | 0 arc4.abi_call(Logger.echo_native_biguint, 2, app_id=app) typed_abi_call/typed_c2c.py:156 - itxn_field Fee // (𝕡) app#0 | - itxn_submit // (𝕡) app#0 | arc4.abi_call(Logger.echo_native_biguint, 2, app_id=app) typed_abi_call/typed_c2c.py:156 - itxn LastLog // (𝕡) app#0 | {itxn} arc4.abi_call(Logger.echo_native_biguint, 2, app_id=app) typed_abi_call/typed_c2c.py:156 - // virtual: store awst_tmp%0#0 to l-stack (no copy) (𝕡) app#0 | awst_tmp%0#0 arc4.abi_call(Logger.echo_native_biguint, 2, app_id=app) typed_abi_call/typed_c2c.py:156 - dup // load awst_tmp%0#0 from l-stack (copy) (𝕡) app#0 | awst_tmp%0#0,awst_tmp%0#0 arc4.abi_call(Logger.echo_native_biguint, 2, app_id=app) typed_abi_call/typed_c2c.py:156 - extract 4 0 // (𝕡) app#0 | awst_tmp%0#0,{extract} arc4.abi_call(Logger.echo_native_biguint, 2, app_id=app) typed_abi_call/typed_c2c.py:156 - cover 1 // store result1#0 to l-stack (no copy) (𝕡) app#0 | result1#0,awst_tmp%0#0 arc4.abi_call(Logger.echo_native_biguint, 2, app_id=app) typed_abi_call/typed_c2c.py:156 - // virtual: load awst_tmp%0#0 from l-stack (no copy) (𝕡) app#0 | result1#0,awst_tmp%0#0 arc4.abi_call(Logger.echo_native_biguint, 2, app_id=app) typed_abi_call/typed_c2c.py:156 - extract 0 4 // (𝕡) app#0 | result1#0,{extract} arc4.abi_call(Logger.echo_native_biguint, 2, app_id=app) typed_abi_call/typed_c2c.py:156 - // virtual: store tmp%1#0 to l-stack (no copy) (𝕡) app#0 | result1#0,tmp%1#0 arc4.abi_call(Logger.echo_native_biguint, 2, app_id=app) typed_abi_call/typed_c2c.py:156 - // virtual: load tmp%1#0 from l-stack (no copy) (𝕡) app#0 | result1#0,tmp%1#0 arc4.abi_call(Logger.echo_native_biguint, 2, app_id=app) typed_abi_call/typed_c2c.py:156 - byte 0x151f7c75 // (𝕡) app#0 | result1#0,tmp%1#0,0x151f7c75 arc4.abi_call(Logger.echo_native_biguint, 2, app_id=app) typed_abi_call/typed_c2c.py:156 - == // (𝕡) app#0 | result1#0,{==} arc4.abi_call(Logger.echo_native_biguint, 2, app_id=app) typed_abi_call/typed_c2c.py:156 - // virtual: store tmp%2#0 to l-stack (no copy) (𝕡) app#0 | result1#0,tmp%2#0 arc4.abi_call(Logger.echo_native_biguint, 2, app_id=app) typed_abi_call/typed_c2c.py:156 - // virtual: load tmp%2#0 from l-stack (no copy) (𝕡) app#0 | result1#0,tmp%2#0 arc4.abi_call(Logger.echo_native_biguint, 2, app_id=app) typed_abi_call/typed_c2c.py:156 - assert // ARC4 prefix is valid // (𝕡) app#0 | result1#0 arc4.abi_call(Logger.echo_native_biguint, 2, app_id=app) typed_abi_call/typed_c2c.py:156 - dup // load result1#0 from l-stack (copy) (𝕡) app#0 | result1#0,result1#0 result1 == 3 typed_abi_call/typed_c2c.py:157 - byte 0x03 // (𝕡) app#0 | result1#0,result1#0,0x03 3 typed_abi_call/typed_c2c.py:157 - b== // (𝕡) app#0 | result1#0,{b==} result1 == 3 typed_abi_call/typed_c2c.py:157 - // virtual: store tmp%3#0 to l-stack (no copy) (𝕡) app#0 | result1#0,tmp%3#0 result1 == 3 typed_abi_call/typed_c2c.py:157 - // virtual: load tmp%3#0 from l-stack (no copy) (𝕡) app#0 | result1#0,tmp%3#0 assert result1 == 3 typed_abi_call/typed_c2c.py:157 - assert // (𝕡) app#0 | result1#0 assert result1 == 3 typed_abi_call/typed_c2c.py:157 - itxn_begin // (𝕡) app#0 | result1#0 arc4.abi_call(Logger.echo_native_biguint, BigUInt(2), app_id=app) typed_abi_call/typed_c2c.py:159 - frame_dig -1 // load app#0 from parameters (𝕡) app#0 | result1#0,app#0 - itxn_field ApplicationID // (𝕡) app#0 | result1#0 - method "echo_native_biguint(uint512)uint512" // (𝕡) app#0 | result1#0,method<"echo_native_biguint(uint512)uint512"> arc4.abi_call(Logger.echo_native_biguint, BigUInt(2), app_id=app) typed_abi_call/typed_c2c.py:159 - itxn_field ApplicationArgs // (𝕡) app#0 | result1#0 - byte 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002 // (𝕡) app#0 | result1#0,0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002 BigUInt(2) typed_abi_call/typed_c2c.py:159 - itxn_field ApplicationArgs // (𝕡) app#0 | result1#0 - int appl // (𝕡) app#0 | result1#0,appl arc4.abi_call(Logger.echo_native_biguint, BigUInt(2), app_id=app) typed_abi_call/typed_c2c.py:159 - itxn_field TypeEnum // (𝕡) app#0 | result1#0 - int 0 // (𝕡) app#0 | result1#0,0 arc4.abi_call(Logger.echo_native_biguint, BigUInt(2), app_id=app) typed_abi_call/typed_c2c.py:159 - itxn_field Fee // (𝕡) app#0 | result1#0 - itxn_submit // (𝕡) app#0 | result1#0 arc4.abi_call(Logger.echo_native_biguint, BigUInt(2), app_id=app) typed_abi_call/typed_c2c.py:159 - itxn LastLog // (𝕡) app#0 | result1#0,{itxn} arc4.abi_call(Logger.echo_native_biguint, BigUInt(2), app_id=app) typed_abi_call/typed_c2c.py:159 - // virtual: store awst_tmp%1#0 to l-stack (no copy) (𝕡) app#0 | result1#0,awst_tmp%1#0 arc4.abi_call(Logger.echo_native_biguint, BigUInt(2), app_id=app) typed_abi_call/typed_c2c.py:159 - dup // load awst_tmp%1#0 from l-stack (copy) (𝕡) app#0 | result1#0,awst_tmp%1#0,awst_tmp%1#0 arc4.abi_call(Logger.echo_native_biguint, BigUInt(2), app_id=app) typed_abi_call/typed_c2c.py:159 - extract 4 0 // (𝕡) app#0 | result1#0,awst_tmp%1#0,{extract} arc4.abi_call(Logger.echo_native_biguint, BigUInt(2), app_id=app) typed_abi_call/typed_c2c.py:159 - cover 1 // store result2#0 to l-stack (no copy) (𝕡) app#0 | result1#0,result2#0,awst_tmp%1#0 arc4.abi_call(Logger.echo_native_biguint, BigUInt(2), app_id=app) typed_abi_call/typed_c2c.py:159 - // virtual: load awst_tmp%1#0 from l-stack (no copy) (𝕡) app#0 | result1#0,result2#0,awst_tmp%1#0 arc4.abi_call(Logger.echo_native_biguint, BigUInt(2), app_id=app) typed_abi_call/typed_c2c.py:159 - extract 0 4 // (𝕡) app#0 | result1#0,result2#0,{extract} arc4.abi_call(Logger.echo_native_biguint, BigUInt(2), app_id=app) typed_abi_call/typed_c2c.py:159 - // virtual: store tmp%6#0 to l-stack (no copy) (𝕡) app#0 | result1#0,result2#0,tmp%6#0 arc4.abi_call(Logger.echo_native_biguint, BigUInt(2), app_id=app) typed_abi_call/typed_c2c.py:159 - // virtual: load tmp%6#0 from l-stack (no copy) (𝕡) app#0 | result1#0,result2#0,tmp%6#0 arc4.abi_call(Logger.echo_native_biguint, BigUInt(2), app_id=app) typed_abi_call/typed_c2c.py:159 - byte 0x151f7c75 // (𝕡) app#0 | result1#0,result2#0,tmp%6#0,0x151f7c75 arc4.abi_call(Logger.echo_native_biguint, BigUInt(2), app_id=app) typed_abi_call/typed_c2c.py:159 - == // (𝕡) app#0 | result1#0,result2#0,{==} arc4.abi_call(Logger.echo_native_biguint, BigUInt(2), app_id=app) typed_abi_call/typed_c2c.py:159 - // virtual: store tmp%7#0 to l-stack (no copy) (𝕡) app#0 | result1#0,result2#0,tmp%7#0 arc4.abi_call(Logger.echo_native_biguint, BigUInt(2), app_id=app) typed_abi_call/typed_c2c.py:159 - // virtual: load tmp%7#0 from l-stack (no copy) (𝕡) app#0 | result1#0,result2#0,tmp%7#0 arc4.abi_call(Logger.echo_native_biguint, BigUInt(2), app_id=app) typed_abi_call/typed_c2c.py:159 - assert // ARC4 prefix is valid // (𝕡) app#0 | result1#0,result2#0 arc4.abi_call(Logger.echo_native_biguint, BigUInt(2), app_id=app) typed_abi_call/typed_c2c.py:159 - // virtual: load result2#0 from l-stack (no copy) (𝕡) app#0 | result1#0,result2#0 result2 == result1 typed_abi_call/typed_c2c.py:160 - dig 1 // load result1#0 from l-stack (copy) (𝕡) app#0 | result1#0,result2#0,result1#0 result2 == result1 typed_abi_call/typed_c2c.py:160 - b== // (𝕡) app#0 | result1#0,{b==} result2 == result1 typed_abi_call/typed_c2c.py:160 - // virtual: store tmp%8#0 to l-stack (no copy) (𝕡) app#0 | result1#0,tmp%8#0 result2 == result1 typed_abi_call/typed_c2c.py:160 - // virtual: load tmp%8#0 from l-stack (no copy) (𝕡) app#0 | result1#0,tmp%8#0 assert result2 == result1 typed_abi_call/typed_c2c.py:160 - assert // (𝕡) app#0 | result1#0 assert result2 == result1 typed_abi_call/typed_c2c.py:160 - itxn_begin // (𝕡) app#0 | result1#0 arc4.abi_call(Logger.echo_native_biguint, arc4.UInt512(2), app_id=app) typed_abi_call/typed_c2c.py:162 - frame_dig -1 // load app#0 from parameters (𝕡) app#0 | result1#0,app#0 - itxn_field ApplicationID // (𝕡) app#0 | result1#0 - method "echo_native_biguint(uint512)uint512" // (𝕡) app#0 | result1#0,method<"echo_native_biguint(uint512)uint512"> arc4.abi_call(Logger.echo_native_biguint, arc4.UInt512(2), app_id=app) typed_abi_call/typed_c2c.py:162 - itxn_field ApplicationArgs // (𝕡) app#0 | result1#0 - byte 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002 // (𝕡) app#0 | result1#0,0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002 arc4.UInt512(2) typed_abi_call/typed_c2c.py:162 - itxn_field ApplicationArgs // (𝕡) app#0 | result1#0 - int appl // (𝕡) app#0 | result1#0,appl arc4.abi_call(Logger.echo_native_biguint, arc4.UInt512(2), app_id=app) typed_abi_call/typed_c2c.py:162 - itxn_field TypeEnum // (𝕡) app#0 | result1#0 - int 0 // (𝕡) app#0 | result1#0,0 arc4.abi_call(Logger.echo_native_biguint, arc4.UInt512(2), app_id=app) typed_abi_call/typed_c2c.py:162 - itxn_field Fee // (𝕡) app#0 | result1#0 - itxn_submit // (𝕡) app#0 | result1#0 arc4.abi_call(Logger.echo_native_biguint, arc4.UInt512(2), app_id=app) typed_abi_call/typed_c2c.py:162 - itxn LastLog // (𝕡) app#0 | result1#0,{itxn} arc4.abi_call(Logger.echo_native_biguint, arc4.UInt512(2), app_id=app) typed_abi_call/typed_c2c.py:162 - // virtual: store awst_tmp%2#0 to l-stack (no copy) (𝕡) app#0 | result1#0,awst_tmp%2#0 arc4.abi_call(Logger.echo_native_biguint, arc4.UInt512(2), app_id=app) typed_abi_call/typed_c2c.py:162 - dup // load awst_tmp%2#0 from l-stack (copy) (𝕡) app#0 | result1#0,awst_tmp%2#0,awst_tmp%2#0 arc4.abi_call(Logger.echo_native_biguint, arc4.UInt512(2), app_id=app) typed_abi_call/typed_c2c.py:162 - extract 4 0 // (𝕡) app#0 | result1#0,awst_tmp%2#0,{extract} arc4.abi_call(Logger.echo_native_biguint, arc4.UInt512(2), app_id=app) typed_abi_call/typed_c2c.py:162 - cover 1 // store result3#0 to l-stack (no copy) (𝕡) app#0 | result1#0,result3#0,awst_tmp%2#0 arc4.abi_call(Logger.echo_native_biguint, arc4.UInt512(2), app_id=app) typed_abi_call/typed_c2c.py:162 - // virtual: load awst_tmp%2#0 from l-stack (no copy) (𝕡) app#0 | result1#0,result3#0,awst_tmp%2#0 arc4.abi_call(Logger.echo_native_biguint, arc4.UInt512(2), app_id=app) typed_abi_call/typed_c2c.py:162 - extract 0 4 // (𝕡) app#0 | result1#0,result3#0,{extract} arc4.abi_call(Logger.echo_native_biguint, arc4.UInt512(2), app_id=app) typed_abi_call/typed_c2c.py:162 - // virtual: store tmp%10#0 to l-stack (no copy) (𝕡) app#0 | result1#0,result3#0,tmp%10#0 arc4.abi_call(Logger.echo_native_biguint, arc4.UInt512(2), app_id=app) typed_abi_call/typed_c2c.py:162 - // virtual: load tmp%10#0 from l-stack (no copy) (𝕡) app#0 | result1#0,result3#0,tmp%10#0 arc4.abi_call(Logger.echo_native_biguint, arc4.UInt512(2), app_id=app) typed_abi_call/typed_c2c.py:162 - byte 0x151f7c75 // (𝕡) app#0 | result1#0,result3#0,tmp%10#0,0x151f7c75 arc4.abi_call(Logger.echo_native_biguint, arc4.UInt512(2), app_id=app) typed_abi_call/typed_c2c.py:162 - == // (𝕡) app#0 | result1#0,result3#0,{==} arc4.abi_call(Logger.echo_native_biguint, arc4.UInt512(2), app_id=app) typed_abi_call/typed_c2c.py:162 - // virtual: store tmp%11#0 to l-stack (no copy) (𝕡) app#0 | result1#0,result3#0,tmp%11#0 arc4.abi_call(Logger.echo_native_biguint, arc4.UInt512(2), app_id=app) typed_abi_call/typed_c2c.py:162 - // virtual: load tmp%11#0 from l-stack (no copy) (𝕡) app#0 | result1#0,result3#0,tmp%11#0 arc4.abi_call(Logger.echo_native_biguint, arc4.UInt512(2), app_id=app) typed_abi_call/typed_c2c.py:162 - assert // ARC4 prefix is valid // (𝕡) app#0 | result1#0,result3#0 arc4.abi_call(Logger.echo_native_biguint, arc4.UInt512(2), app_id=app) typed_abi_call/typed_c2c.py:162 - // virtual: load result3#0 from l-stack (no copy) (𝕡) app#0 | result1#0,result3#0 result3 == result1 typed_abi_call/typed_c2c.py:163 - uncover 1 // load result1#0 from l-stack (no copy) (𝕡) app#0 | result3#0,result1#0 result3 == result1 typed_abi_call/typed_c2c.py:163 - b== // (𝕡) app#0 | {b==} result3 == result1 typed_abi_call/typed_c2c.py:163 - // virtual: store tmp%12#0 to l-stack (no copy) (𝕡) app#0 | tmp%12#0 result3 == result1 typed_abi_call/typed_c2c.py:163 - // virtual: load tmp%12#0 from l-stack (no copy) (𝕡) app#0 | tmp%12#0 assert result3 == result1 typed_abi_call/typed_c2c.py:163 - assert // (𝕡) app#0 | assert result3 == result1 typed_abi_call/typed_c2c.py:163 - retsub // + itxn_begin // (𝕡) app#0 | arc4.abi_call(Logger.echo_native_biguint, 2, app_id=app) typed_abi_call/typed_c2c.py:156 + frame_dig -1 // load app#0 from parameters (𝕡) app#0 | app#0 + itxn_field ApplicationID // (𝕡) app#0 | + method "echo_native_biguint(uint512)uint512" // (𝕡) app#0 | method<"echo_native_biguint(uint512)uint512"> arc4.abi_call(Logger.echo_native_biguint, 2, app_id=app) typed_abi_call/typed_c2c.py:156 + itxn_field ApplicationArgs // (𝕡) app#0 | + byte 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002 // (𝕡) app#0 | 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002 2 typed_abi_call/typed_c2c.py:156 + itxn_field ApplicationArgs // (𝕡) app#0 | + int appl // (𝕡) app#0 | appl arc4.abi_call(Logger.echo_native_biguint, 2, app_id=app) typed_abi_call/typed_c2c.py:156 + itxn_field TypeEnum // (𝕡) app#0 | + int 0 // (𝕡) app#0 | 0 arc4.abi_call(Logger.echo_native_biguint, 2, app_id=app) typed_abi_call/typed_c2c.py:156 + itxn_field Fee // (𝕡) app#0 | + itxn_submit // (𝕡) app#0 | arc4.abi_call(Logger.echo_native_biguint, 2, app_id=app) typed_abi_call/typed_c2c.py:156 + itxn LastLog // (𝕡) app#0 | {itxn} arc4.abi_call(Logger.echo_native_biguint, 2, app_id=app) typed_abi_call/typed_c2c.py:156 + // virtual: store awst_tmp%0#0 to l-stack (no copy) (𝕡) app#0 | awst_tmp%0#0 arc4.abi_call(Logger.echo_native_biguint, 2, app_id=app) typed_abi_call/typed_c2c.py:156 + dup // load awst_tmp%0#0 from l-stack (copy) (𝕡) app#0 | awst_tmp%0#0,awst_tmp%0#0 arc4.abi_call(Logger.echo_native_biguint, 2, app_id=app) typed_abi_call/typed_c2c.py:156 + extract 4 0 // (𝕡) app#0 | awst_tmp%0#0,{extract} arc4.abi_call(Logger.echo_native_biguint, 2, app_id=app) typed_abi_call/typed_c2c.py:156 + cover 1 // store result1#0 to l-stack (no copy) (𝕡) app#0 | result1#0,awst_tmp%0#0 arc4.abi_call(Logger.echo_native_biguint, 2, app_id=app) typed_abi_call/typed_c2c.py:156 + // virtual: load awst_tmp%0#0 from l-stack (no copy) (𝕡) app#0 | result1#0,awst_tmp%0#0 arc4.abi_call(Logger.echo_native_biguint, 2, app_id=app) typed_abi_call/typed_c2c.py:156 + extract 0 4 // (𝕡) app#0 | result1#0,{extract} arc4.abi_call(Logger.echo_native_biguint, 2, app_id=app) typed_abi_call/typed_c2c.py:156 + // virtual: store tmp%1#0 to l-stack (no copy) (𝕡) app#0 | result1#0,tmp%1#0 arc4.abi_call(Logger.echo_native_biguint, 2, app_id=app) typed_abi_call/typed_c2c.py:156 + // virtual: load tmp%1#0 from l-stack (no copy) (𝕡) app#0 | result1#0,tmp%1#0 arc4.abi_call(Logger.echo_native_biguint, 2, app_id=app) typed_abi_call/typed_c2c.py:156 + byte 0x151f7c75 // (𝕡) app#0 | result1#0,tmp%1#0,0x151f7c75 arc4.abi_call(Logger.echo_native_biguint, 2, app_id=app) typed_abi_call/typed_c2c.py:156 + == // (𝕡) app#0 | result1#0,{==} arc4.abi_call(Logger.echo_native_biguint, 2, app_id=app) typed_abi_call/typed_c2c.py:156 + // virtual: store tmp%2#0 to l-stack (no copy) (𝕡) app#0 | result1#0,tmp%2#0 arc4.abi_call(Logger.echo_native_biguint, 2, app_id=app) typed_abi_call/typed_c2c.py:156 + // virtual: load tmp%2#0 from l-stack (no copy) (𝕡) app#0 | result1#0,tmp%2#0 arc4.abi_call(Logger.echo_native_biguint, 2, app_id=app) typed_abi_call/typed_c2c.py:156 + assert // ARC4 prefix is valid // (𝕡) app#0 | result1#0 arc4.abi_call(Logger.echo_native_biguint, 2, app_id=app) typed_abi_call/typed_c2c.py:156 + dup // load result1#0 from l-stack (copy) (𝕡) app#0 | result1#0,result1#0 result1 == 3 typed_abi_call/typed_c2c.py:157 + byte 0x03 // (𝕡) app#0 | result1#0,result1#0,0x03 3 typed_abi_call/typed_c2c.py:157 + b== // (𝕡) app#0 | result1#0,{b==} result1 == 3 typed_abi_call/typed_c2c.py:157 + // virtual: store tmp%3#0 to l-stack (no copy) (𝕡) app#0 | result1#0,tmp%3#0 result1 == 3 typed_abi_call/typed_c2c.py:157 + // virtual: load tmp%3#0 from l-stack (no copy) (𝕡) app#0 | result1#0,tmp%3#0 assert result1 == 3 typed_abi_call/typed_c2c.py:157 + assert // (𝕡) app#0 | result1#0 assert result1 == 3 typed_abi_call/typed_c2c.py:157 + itxn_begin // (𝕡) app#0 | result1#0 arc4.abi_call(Logger.echo_native_biguint, BigUInt(2), app_id=app) typed_abi_call/typed_c2c.py:159 + frame_dig -1 // load app#0 from parameters (𝕡) app#0 | result1#0,app#0 + itxn_field ApplicationID // (𝕡) app#0 | result1#0 + method "echo_native_biguint(uint512)uint512" // (𝕡) app#0 | result1#0,method<"echo_native_biguint(uint512)uint512"> arc4.abi_call(Logger.echo_native_biguint, BigUInt(2), app_id=app) typed_abi_call/typed_c2c.py:159 + itxn_field ApplicationArgs // (𝕡) app#0 | result1#0 + byte 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002 // (𝕡) app#0 | result1#0,0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002 BigUInt(2) typed_abi_call/typed_c2c.py:159 + itxn_field ApplicationArgs // (𝕡) app#0 | result1#0 + int appl // (𝕡) app#0 | result1#0,appl arc4.abi_call(Logger.echo_native_biguint, BigUInt(2), app_id=app) typed_abi_call/typed_c2c.py:159 + itxn_field TypeEnum // (𝕡) app#0 | result1#0 + int 0 // (𝕡) app#0 | result1#0,0 arc4.abi_call(Logger.echo_native_biguint, BigUInt(2), app_id=app) typed_abi_call/typed_c2c.py:159 + itxn_field Fee // (𝕡) app#0 | result1#0 + itxn_submit // (𝕡) app#0 | result1#0 arc4.abi_call(Logger.echo_native_biguint, BigUInt(2), app_id=app) typed_abi_call/typed_c2c.py:159 + itxn LastLog // (𝕡) app#0 | result1#0,{itxn} arc4.abi_call(Logger.echo_native_biguint, BigUInt(2), app_id=app) typed_abi_call/typed_c2c.py:159 + // virtual: store awst_tmp%1#0 to l-stack (no copy) (𝕡) app#0 | result1#0,awst_tmp%1#0 arc4.abi_call(Logger.echo_native_biguint, BigUInt(2), app_id=app) typed_abi_call/typed_c2c.py:159 + dup // load awst_tmp%1#0 from l-stack (copy) (𝕡) app#0 | result1#0,awst_tmp%1#0,awst_tmp%1#0 arc4.abi_call(Logger.echo_native_biguint, BigUInt(2), app_id=app) typed_abi_call/typed_c2c.py:159 + extract 4 0 // (𝕡) app#0 | result1#0,awst_tmp%1#0,{extract} arc4.abi_call(Logger.echo_native_biguint, BigUInt(2), app_id=app) typed_abi_call/typed_c2c.py:159 + cover 1 // store result2#0 to l-stack (no copy) (𝕡) app#0 | result1#0,result2#0,awst_tmp%1#0 arc4.abi_call(Logger.echo_native_biguint, BigUInt(2), app_id=app) typed_abi_call/typed_c2c.py:159 + // virtual: load awst_tmp%1#0 from l-stack (no copy) (𝕡) app#0 | result1#0,result2#0,awst_tmp%1#0 arc4.abi_call(Logger.echo_native_biguint, BigUInt(2), app_id=app) typed_abi_call/typed_c2c.py:159 + extract 0 4 // (𝕡) app#0 | result1#0,result2#0,{extract} arc4.abi_call(Logger.echo_native_biguint, BigUInt(2), app_id=app) typed_abi_call/typed_c2c.py:159 + // virtual: store tmp%6#0 to l-stack (no copy) (𝕡) app#0 | result1#0,result2#0,tmp%6#0 arc4.abi_call(Logger.echo_native_biguint, BigUInt(2), app_id=app) typed_abi_call/typed_c2c.py:159 + // virtual: load tmp%6#0 from l-stack (no copy) (𝕡) app#0 | result1#0,result2#0,tmp%6#0 arc4.abi_call(Logger.echo_native_biguint, BigUInt(2), app_id=app) typed_abi_call/typed_c2c.py:159 + byte 0x151f7c75 // (𝕡) app#0 | result1#0,result2#0,tmp%6#0,0x151f7c75 arc4.abi_call(Logger.echo_native_biguint, BigUInt(2), app_id=app) typed_abi_call/typed_c2c.py:159 + == // (𝕡) app#0 | result1#0,result2#0,{==} arc4.abi_call(Logger.echo_native_biguint, BigUInt(2), app_id=app) typed_abi_call/typed_c2c.py:159 + // virtual: store tmp%7#0 to l-stack (no copy) (𝕡) app#0 | result1#0,result2#0,tmp%7#0 arc4.abi_call(Logger.echo_native_biguint, BigUInt(2), app_id=app) typed_abi_call/typed_c2c.py:159 + // virtual: load tmp%7#0 from l-stack (no copy) (𝕡) app#0 | result1#0,result2#0,tmp%7#0 arc4.abi_call(Logger.echo_native_biguint, BigUInt(2), app_id=app) typed_abi_call/typed_c2c.py:159 + assert // ARC4 prefix is valid // (𝕡) app#0 | result1#0,result2#0 arc4.abi_call(Logger.echo_native_biguint, BigUInt(2), app_id=app) typed_abi_call/typed_c2c.py:159 + // virtual: load result2#0 from l-stack (no copy) (𝕡) app#0 | result1#0,result2#0 result2 == result1 typed_abi_call/typed_c2c.py:160 + dig 1 // load result1#0 from l-stack (copy) (𝕡) app#0 | result1#0,result2#0,result1#0 result2 == result1 typed_abi_call/typed_c2c.py:160 + b== // (𝕡) app#0 | result1#0,{b==} result2 == result1 typed_abi_call/typed_c2c.py:160 + // virtual: store tmp%8#0 to l-stack (no copy) (𝕡) app#0 | result1#0,tmp%8#0 result2 == result1 typed_abi_call/typed_c2c.py:160 + // virtual: load tmp%8#0 from l-stack (no copy) (𝕡) app#0 | result1#0,tmp%8#0 assert result2 == result1 typed_abi_call/typed_c2c.py:160 + assert // (𝕡) app#0 | result1#0 assert result2 == result1 typed_abi_call/typed_c2c.py:160 + itxn_begin // (𝕡) app#0 | result1#0 arc4.abi_call(Logger.echo_native_biguint, arc4.UInt512(2), app_id=app) typed_abi_call/typed_c2c.py:162 + frame_dig -1 // load app#0 from parameters (𝕡) app#0 | result1#0,app#0 + itxn_field ApplicationID // (𝕡) app#0 | result1#0 + method "echo_native_biguint(uint512)uint512" // (𝕡) app#0 | result1#0,method<"echo_native_biguint(uint512)uint512"> arc4.abi_call(Logger.echo_native_biguint, arc4.UInt512(2), app_id=app) typed_abi_call/typed_c2c.py:162 + itxn_field ApplicationArgs // (𝕡) app#0 | result1#0 + byte 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002 // (𝕡) app#0 | result1#0,0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002 arc4.UInt512(2) typed_abi_call/typed_c2c.py:162 + itxn_field ApplicationArgs // (𝕡) app#0 | result1#0 + int appl // (𝕡) app#0 | result1#0,appl arc4.abi_call(Logger.echo_native_biguint, arc4.UInt512(2), app_id=app) typed_abi_call/typed_c2c.py:162 + itxn_field TypeEnum // (𝕡) app#0 | result1#0 + int 0 // (𝕡) app#0 | result1#0,0 arc4.abi_call(Logger.echo_native_biguint, arc4.UInt512(2), app_id=app) typed_abi_call/typed_c2c.py:162 + itxn_field Fee // (𝕡) app#0 | result1#0 + itxn_submit // (𝕡) app#0 | result1#0 arc4.abi_call(Logger.echo_native_biguint, arc4.UInt512(2), app_id=app) typed_abi_call/typed_c2c.py:162 + itxn LastLog // (𝕡) app#0 | result1#0,{itxn} arc4.abi_call(Logger.echo_native_biguint, arc4.UInt512(2), app_id=app) typed_abi_call/typed_c2c.py:162 + // virtual: store awst_tmp%2#0 to l-stack (no copy) (𝕡) app#0 | result1#0,awst_tmp%2#0 arc4.abi_call(Logger.echo_native_biguint, arc4.UInt512(2), app_id=app) typed_abi_call/typed_c2c.py:162 + dup // load awst_tmp%2#0 from l-stack (copy) (𝕡) app#0 | result1#0,awst_tmp%2#0,awst_tmp%2#0 arc4.abi_call(Logger.echo_native_biguint, arc4.UInt512(2), app_id=app) typed_abi_call/typed_c2c.py:162 + extract 4 0 // (𝕡) app#0 | result1#0,awst_tmp%2#0,{extract} arc4.abi_call(Logger.echo_native_biguint, arc4.UInt512(2), app_id=app) typed_abi_call/typed_c2c.py:162 + cover 1 // store result3#0 to l-stack (no copy) (𝕡) app#0 | result1#0,result3#0,awst_tmp%2#0 arc4.abi_call(Logger.echo_native_biguint, arc4.UInt512(2), app_id=app) typed_abi_call/typed_c2c.py:162 + // virtual: load awst_tmp%2#0 from l-stack (no copy) (𝕡) app#0 | result1#0,result3#0,awst_tmp%2#0 arc4.abi_call(Logger.echo_native_biguint, arc4.UInt512(2), app_id=app) typed_abi_call/typed_c2c.py:162 + extract 0 4 // (𝕡) app#0 | result1#0,result3#0,{extract} arc4.abi_call(Logger.echo_native_biguint, arc4.UInt512(2), app_id=app) typed_abi_call/typed_c2c.py:162 + // virtual: store tmp%10#0 to l-stack (no copy) (𝕡) app#0 | result1#0,result3#0,tmp%10#0 arc4.abi_call(Logger.echo_native_biguint, arc4.UInt512(2), app_id=app) typed_abi_call/typed_c2c.py:162 + // virtual: load tmp%10#0 from l-stack (no copy) (𝕡) app#0 | result1#0,result3#0,tmp%10#0 arc4.abi_call(Logger.echo_native_biguint, arc4.UInt512(2), app_id=app) typed_abi_call/typed_c2c.py:162 + byte 0x151f7c75 // (𝕡) app#0 | result1#0,result3#0,tmp%10#0,0x151f7c75 arc4.abi_call(Logger.echo_native_biguint, arc4.UInt512(2), app_id=app) typed_abi_call/typed_c2c.py:162 + == // (𝕡) app#0 | result1#0,result3#0,{==} arc4.abi_call(Logger.echo_native_biguint, arc4.UInt512(2), app_id=app) typed_abi_call/typed_c2c.py:162 + // virtual: store tmp%11#0 to l-stack (no copy) (𝕡) app#0 | result1#0,result3#0,tmp%11#0 arc4.abi_call(Logger.echo_native_biguint, arc4.UInt512(2), app_id=app) typed_abi_call/typed_c2c.py:162 + // virtual: load tmp%11#0 from l-stack (no copy) (𝕡) app#0 | result1#0,result3#0,tmp%11#0 arc4.abi_call(Logger.echo_native_biguint, arc4.UInt512(2), app_id=app) typed_abi_call/typed_c2c.py:162 + assert // ARC4 prefix is valid // (𝕡) app#0 | result1#0,result3#0 arc4.abi_call(Logger.echo_native_biguint, arc4.UInt512(2), app_id=app) typed_abi_call/typed_c2c.py:162 + // virtual: load result3#0 from l-stack (no copy) (𝕡) app#0 | result1#0,result3#0 result3 == result1 typed_abi_call/typed_c2c.py:163 + uncover 1 // load result1#0 from l-stack (no copy) (𝕡) app#0 | result3#0,result1#0 result3 == result1 typed_abi_call/typed_c2c.py:163 + b== // (𝕡) app#0 | {b==} result3 == result1 typed_abi_call/typed_c2c.py:163 + // virtual: store tmp%12#0 to l-stack (no copy) (𝕡) app#0 | tmp%12#0 result3 == result1 typed_abi_call/typed_c2c.py:163 + // virtual: load tmp%12#0 from l-stack (no copy) (𝕡) app#0 | tmp%12#0 assert result3 == result1 typed_abi_call/typed_c2c.py:163 + assert // (𝕡) app#0 | assert result3 == result1 typed_abi_call/typed_c2c.py:163 + retsub // // test_cases.typed_abi_call.typed_c2c.Greeter.test_native_tuple(app: uint64) -> void: test_native_tuple: - proto 1 0 // (𝕡) app#0 | @arc4.abimethod()\ndef test_native_tuple(self, app: Application) -> None: typed_abi_call/typed_c2c.py:165-166 + proto 1 0 // (𝕡) app#0 | @arc4.abimethod()\ndef test_native_tuple(self, app: Application) -> None: typed_abi_call/typed_c2c.py:165-166 test_native_tuple_block@0: - itxn_begin // (𝕡) app#0 | : the following uses method selectors to work around having nested tuples\ntxn = arc4.abi_call(\n... typed_abi_call/typed_c2c.py:169-177 - frame_dig -1 // load app#0 from parameters (𝕡) app#0 | app#0 - itxn_field ApplicationID // (𝕡) app#0 | - method "echo_native_tuple(string,byte[],uint64,uint512)(string,byte[],uint64,uint512)" // (𝕡) app#0 | method<"echo_native_tuple(string,byte[],uint64,uint512)(string,byte[],uint64,uint512)"> : the following uses method selectors to work around having nested tuples\ntxn = arc4.abi_call(\n... typed_abi_call/typed_c2c.py:169-177 - itxn_field ApplicationArgs // (𝕡) app#0 | - byte 0x00027331 // (𝕡) app#0 | 0x00027331 "s1" typed_abi_call/typed_c2c.py:172 - itxn_field ApplicationArgs // (𝕡) app#0 | - byte 0x00026231 // (𝕡) app#0 | 0x00026231 b"b1" typed_abi_call/typed_c2c.py:173 - itxn_field ApplicationArgs // (𝕡) app#0 | - byte 0x0000000000000001 // (𝕡) app#0 | 0x0000000000000001 1 typed_abi_call/typed_c2c.py:174 - itxn_field ApplicationArgs // (𝕡) app#0 | - byte 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002 // (𝕡) app#0 | 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002 2 typed_abi_call/typed_c2c.py:175 - itxn_field ApplicationArgs // (𝕡) app#0 | - int appl // (𝕡) app#0 | appl : the following uses method selectors to work around having nested tuples\ntxn = arc4.abi_call(\n... typed_abi_call/typed_c2c.py:169-177 - itxn_field TypeEnum // (𝕡) app#0 | - int 0 // (𝕡) app#0 | 0 : the following uses method selectors to work around having nested tuples\ntxn = arc4.abi_call(\n... typed_abi_call/typed_c2c.py:169-177 - itxn_field Fee // (𝕡) app#0 | - itxn_submit // (𝕡) app#0 | : the following uses method selectors to work around having nested tuples\ntxn = arc4.abi_call(\n... typed_abi_call/typed_c2c.py:169-177 - itxn LastLog // (𝕡) app#0 | {itxn} : the following uses method selectors to work around having nested tuples\ntxn = arc4.abi_call(\n... typed_abi_call/typed_c2c.py:169-177 - // virtual: store txn.LastLog#0 to l-stack (no copy) (𝕡) app#0 | txn.LastLog#0 : the following uses method selectors to work around having nested tuples\ntxn = arc4.abi_call(\n... typed_abi_call/typed_c2c.py:169-177 - dup // load txn.LastLog#0 from l-stack (copy) (𝕡) app#0 | txn.LastLog#0,txn.LastLog#0 arc4.Tuple[arc4.String, arc4.DynamicBytes, arc4.UInt64, arc4.UInt512].from_log(\ntxn.last_log\n) typed_abi_call/typed_c2c.py:178-180 - extract 4 0 // (𝕡) app#0 | txn.LastLog#0,{extract} arc4.Tuple[arc4.String, arc4.DynamicBytes, arc4.UInt64, arc4.UInt512].from_log(\ntxn.last_log\n) typed_abi_call/typed_c2c.py:178-180 - cover 1 // store result1#0 to l-stack (no copy) (𝕡) app#0 | result1#0,txn.LastLog#0 arc4.Tuple[arc4.String, arc4.DynamicBytes, arc4.UInt64, arc4.UInt512].from_log(\ntxn.last_log\n) typed_abi_call/typed_c2c.py:178-180 - // virtual: load txn.LastLog#0 from l-stack (no copy) (𝕡) app#0 | result1#0,txn.LastLog#0 arc4.Tuple[arc4.String, arc4.DynamicBytes, arc4.UInt64, arc4.UInt512].from_log(\ntxn.last_log\n) typed_abi_call/typed_c2c.py:178-180 - extract 0 4 // (𝕡) app#0 | result1#0,{extract} arc4.Tuple[arc4.String, arc4.DynamicBytes, arc4.UInt64, arc4.UInt512].from_log(\ntxn.last_log\n) typed_abi_call/typed_c2c.py:178-180 - // virtual: store tmp%1#0 to l-stack (no copy) (𝕡) app#0 | result1#0,tmp%1#0 arc4.Tuple[arc4.String, arc4.DynamicBytes, arc4.UInt64, arc4.UInt512].from_log(\ntxn.last_log\n) typed_abi_call/typed_c2c.py:178-180 - // virtual: load tmp%1#0 from l-stack (no copy) (𝕡) app#0 | result1#0,tmp%1#0 arc4.Tuple[arc4.String, arc4.DynamicBytes, arc4.UInt64, arc4.UInt512].from_log(\ntxn.last_log\n) typed_abi_call/typed_c2c.py:178-180 - byte 0x151f7c75 // (𝕡) app#0 | result1#0,tmp%1#0,0x151f7c75 arc4.Tuple[arc4.String, arc4.DynamicBytes, arc4.UInt64, arc4.UInt512].from_log(\ntxn.last_log\n) typed_abi_call/typed_c2c.py:178-180 - == // (𝕡) app#0 | result1#0,{==} arc4.Tuple[arc4.String, arc4.DynamicBytes, arc4.UInt64, arc4.UInt512].from_log(\ntxn.last_log\n) typed_abi_call/typed_c2c.py:178-180 - // virtual: store tmp%2#0 to l-stack (no copy) (𝕡) app#0 | result1#0,tmp%2#0 arc4.Tuple[arc4.String, arc4.DynamicBytes, arc4.UInt64, arc4.UInt512].from_log(\ntxn.last_log\n) typed_abi_call/typed_c2c.py:178-180 - // virtual: load tmp%2#0 from l-stack (no copy) (𝕡) app#0 | result1#0,tmp%2#0 arc4.Tuple[arc4.String, arc4.DynamicBytes, arc4.UInt64, arc4.UInt512].from_log(\ntxn.last_log\n) typed_abi_call/typed_c2c.py:178-180 - assert // ARC4 prefix is valid // (𝕡) app#0 | result1#0 arc4.Tuple[arc4.String, arc4.DynamicBytes, arc4.UInt64, arc4.UInt512].from_log(\ntxn.last_log\n) typed_abi_call/typed_c2c.py:178-180 - dup // load result1#0 from l-stack (copy) (𝕡) app#0 | result1#0,result1#0 result1.native typed_abi_call/typed_c2c.py:181 - int 0 // (𝕡) app#0 | result1#0,result1#0,0 result1.native typed_abi_call/typed_c2c.py:181 - extract_uint16 // (𝕡) app#0 | result1#0,{extract_uint16} result1.native typed_abi_call/typed_c2c.py:181 - cover 1 // store item_start_offset%0#0 to l-stack (no copy) (𝕡) app#0 | item_start_offset%0#0,result1#0 result1.native typed_abi_call/typed_c2c.py:181 - dup // load result1#0 from l-stack (copy) (𝕡) app#0 | item_start_offset%0#0,result1#0,result1#0 result1.native typed_abi_call/typed_c2c.py:181 - int 2 // (𝕡) app#0 | item_start_offset%0#0,result1#0,result1#0,2 result1.native typed_abi_call/typed_c2c.py:181 - extract_uint16 // (𝕡) app#0 | item_start_offset%0#0,result1#0,{extract_uint16} result1.native typed_abi_call/typed_c2c.py:181 - // virtual: store item_end_offset%0#0 to l-stack (no copy) (𝕡) app#0 | item_start_offset%0#0,result1#0,item_end_offset%0#0 result1.native typed_abi_call/typed_c2c.py:181 - dig 1 // load result1#0 from l-stack (copy) (𝕡) app#0 | item_start_offset%0#0,result1#0,item_end_offset%0#0,result1#0 result1.native typed_abi_call/typed_c2c.py:181 - uncover 3 // load item_start_offset%0#0 from l-stack (no copy) (𝕡) app#0 | result1#0,item_end_offset%0#0,result1#0,item_start_offset%0#0 result1.native typed_abi_call/typed_c2c.py:181 - dig 2 // load item_end_offset%0#0 from l-stack (copy) (𝕡) app#0 | result1#0,item_end_offset%0#0,result1#0,item_start_offset%0#0,item_end_offset%0#0 result1.native typed_abi_call/typed_c2c.py:181 - substring3 // (𝕡) app#0 | result1#0,item_end_offset%0#0,{substring3} result1.native typed_abi_call/typed_c2c.py:181 - cover 2 // store s#0 to l-stack (no copy) (𝕡) app#0 | s#0,result1#0,item_end_offset%0#0 result1.native typed_abi_call/typed_c2c.py:181 - dig 1 // load result1#0 from l-stack (copy) (𝕡) app#0 | s#0,result1#0,item_end_offset%0#0,result1#0 result1.native typed_abi_call/typed_c2c.py:181 - len // (𝕡) app#0 | s#0,result1#0,item_end_offset%0#0,{len} result1.native typed_abi_call/typed_c2c.py:181 - cover 1 // store item_end_offset%1#0 to l-stack (no copy) (𝕡) app#0 | s#0,result1#0,item_end_offset%1#0,item_end_offset%0#0 result1.native typed_abi_call/typed_c2c.py:181 - dig 2 // load result1#0 from l-stack (copy) (𝕡) app#0 | s#0,result1#0,item_end_offset%1#0,item_end_offset%0#0,result1#0 result1.native typed_abi_call/typed_c2c.py:181 - uncover 1 // load item_end_offset%0#0 from l-stack (no copy) (𝕡) app#0 | s#0,result1#0,item_end_offset%1#0,result1#0,item_end_offset%0#0 result1.native typed_abi_call/typed_c2c.py:181 - uncover 2 // load item_end_offset%1#0 from l-stack (no copy) (𝕡) app#0 | s#0,result1#0,result1#0,item_end_offset%0#0,item_end_offset%1#0 result1.native typed_abi_call/typed_c2c.py:181 - substring3 // (𝕡) app#0 | s#0,result1#0,{substring3} result1.native typed_abi_call/typed_c2c.py:181 - cover 2 // store b#0 to l-stack (no copy) (𝕡) app#0 | b#0,s#0,result1#0 result1.native typed_abi_call/typed_c2c.py:181 - dup // load result1#0 from l-stack (copy) (𝕡) app#0 | b#0,s#0,result1#0,result1#0 result1.native typed_abi_call/typed_c2c.py:181 - extract 4 8 // on error: Index access is out of bounds // (𝕡) app#0 | b#0,s#0,result1#0,{extract} result1.native typed_abi_call/typed_c2c.py:181 - cover 3 // store u#0 to l-stack (no copy) (𝕡) app#0 | u#0,b#0,s#0,result1#0 result1.native typed_abi_call/typed_c2c.py:181 - dup // load result1#0 from l-stack (copy) (𝕡) app#0 | u#0,b#0,s#0,result1#0,result1#0 result1.native typed_abi_call/typed_c2c.py:181 - extract 12 64 // on error: Index access is out of bounds // (𝕡) app#0 | u#0,b#0,s#0,result1#0,{extract} result1.native typed_abi_call/typed_c2c.py:181 - cover 3 // store bu#0 to l-stack (no copy) (𝕡) app#0 | u#0,bu#0,b#0,s#0,result1#0 result1.native typed_abi_call/typed_c2c.py:181 - uncover 1 // load s#0 from l-stack (no copy) (𝕡) app#0 | u#0,bu#0,b#0,result1#0,s#0 s.native typed_abi_call/typed_c2c.py:182 - extract 2 0 // (𝕡) app#0 | u#0,bu#0,b#0,result1#0,{extract} s.native typed_abi_call/typed_c2c.py:182 - // virtual: store tmp%3#0 to l-stack (no copy) (𝕡) app#0 | u#0,bu#0,b#0,result1#0,tmp%3#0 s.native typed_abi_call/typed_c2c.py:182 - // virtual: load tmp%3#0 from l-stack (no copy) (𝕡) app#0 | u#0,bu#0,b#0,result1#0,tmp%3#0 s.native == "echo: s1" typed_abi_call/typed_c2c.py:182 - byte "echo: s1" // (𝕡) app#0 | u#0,bu#0,b#0,result1#0,tmp%3#0,"echo: s1" "echo: s1" typed_abi_call/typed_c2c.py:182 - == // (𝕡) app#0 | u#0,bu#0,b#0,result1#0,{==} s.native == "echo: s1" typed_abi_call/typed_c2c.py:182 - // virtual: store tmp%4#0 to l-stack (no copy) (𝕡) app#0 | u#0,bu#0,b#0,result1#0,tmp%4#0 s.native == "echo: s1" typed_abi_call/typed_c2c.py:182 - // virtual: load tmp%4#0 from l-stack (no copy) (𝕡) app#0 | u#0,bu#0,b#0,result1#0,tmp%4#0 assert s.native == "echo: s1" typed_abi_call/typed_c2c.py:182 - assert // (𝕡) app#0 | u#0,bu#0,b#0,result1#0 assert s.native == "echo: s1" typed_abi_call/typed_c2c.py:182 - uncover 1 // load b#0 from l-stack (no copy) (𝕡) app#0 | u#0,bu#0,result1#0,b#0 b.native typed_abi_call/typed_c2c.py:183 - extract 2 0 // (𝕡) app#0 | u#0,bu#0,result1#0,{extract} b.native typed_abi_call/typed_c2c.py:183 - // virtual: store tmp%5#0 to l-stack (no copy) (𝕡) app#0 | u#0,bu#0,result1#0,tmp%5#0 b.native typed_abi_call/typed_c2c.py:183 - // virtual: load tmp%5#0 from l-stack (no copy) (𝕡) app#0 | u#0,bu#0,result1#0,tmp%5#0 b.native == b"echo: b1" typed_abi_call/typed_c2c.py:183 - byte 0x6563686f3a206231 // (𝕡) app#0 | u#0,bu#0,result1#0,tmp%5#0,0x6563686f3a206231 b"echo: b1" typed_abi_call/typed_c2c.py:183 - == // (𝕡) app#0 | u#0,bu#0,result1#0,{==} b.native == b"echo: b1" typed_abi_call/typed_c2c.py:183 - // virtual: store tmp%6#0 to l-stack (no copy) (𝕡) app#0 | u#0,bu#0,result1#0,tmp%6#0 b.native == b"echo: b1" typed_abi_call/typed_c2c.py:183 - // virtual: load tmp%6#0 from l-stack (no copy) (𝕡) app#0 | u#0,bu#0,result1#0,tmp%6#0 assert b.native == b"echo: b1" typed_abi_call/typed_c2c.py:183 - assert // (𝕡) app#0 | u#0,bu#0,result1#0 assert b.native == b"echo: b1" typed_abi_call/typed_c2c.py:183 - uncover 2 // load u#0 from l-stack (no copy) (𝕡) app#0 | bu#0,result1#0,u#0 u.native typed_abi_call/typed_c2c.py:184 - btoi // (𝕡) app#0 | bu#0,result1#0,{btoi} u.native typed_abi_call/typed_c2c.py:184 - // virtual: store tmp%7#0 to l-stack (no copy) (𝕡) app#0 | bu#0,result1#0,tmp%7#0 u.native typed_abi_call/typed_c2c.py:184 - // virtual: load tmp%7#0 from l-stack (no copy) (𝕡) app#0 | bu#0,result1#0,tmp%7#0 u.native == 2 typed_abi_call/typed_c2c.py:184 - int 2 // (𝕡) app#0 | bu#0,result1#0,tmp%7#0,2 2 typed_abi_call/typed_c2c.py:184 - == // (𝕡) app#0 | bu#0,result1#0,{==} u.native == 2 typed_abi_call/typed_c2c.py:184 - // virtual: store tmp%8#0 to l-stack (no copy) (𝕡) app#0 | bu#0,result1#0,tmp%8#0 u.native == 2 typed_abi_call/typed_c2c.py:184 - // virtual: load tmp%8#0 from l-stack (no copy) (𝕡) app#0 | bu#0,result1#0,tmp%8#0 assert u.native == 2 typed_abi_call/typed_c2c.py:184 - assert // (𝕡) app#0 | bu#0,result1#0 assert u.native == 2 typed_abi_call/typed_c2c.py:184 - uncover 1 // load bu#0 from l-stack (no copy) (𝕡) app#0 | result1#0,bu#0 bu.native == 3 typed_abi_call/typed_c2c.py:185 - byte 0x03 // (𝕡) app#0 | result1#0,bu#0,0x03 3 typed_abi_call/typed_c2c.py:185 - b== // (𝕡) app#0 | result1#0,{b==} bu.native == 3 typed_abi_call/typed_c2c.py:185 - // virtual: store tmp%9#0 to l-stack (no copy) (𝕡) app#0 | result1#0,tmp%9#0 bu.native == 3 typed_abi_call/typed_c2c.py:185 - // virtual: load tmp%9#0 from l-stack (no copy) (𝕡) app#0 | result1#0,tmp%9#0 assert bu.native == 3 typed_abi_call/typed_c2c.py:185 - assert // (𝕡) app#0 | result1#0 assert bu.native == 3 typed_abi_call/typed_c2c.py:185 - itxn_begin // (𝕡) app#0 | result1#0 again using native types in arguments\ntxn = arc4.abi_call(\n"echo_native_tuple(string,byte[],uin... typed_abi_call/typed_c2c.py:187-195 - int 1 // (𝕡) app#0 | result1#0,1 UInt64(1) typed_abi_call/typed_c2c.py:192 - itob // (𝕡) app#0 | result1#0,{itob} UInt64(1) typed_abi_call/typed_c2c.py:192 - // virtual: store val_as_bytes%0#0 to l-stack (no copy) (𝕡) app#0 | result1#0,val_as_bytes%0#0 UInt64(1) typed_abi_call/typed_c2c.py:192 - frame_dig -1 // load app#0 from parameters (𝕡) app#0 | result1#0,val_as_bytes%0#0,app#0 - itxn_field ApplicationID // (𝕡) app#0 | result1#0,val_as_bytes%0#0 - method "echo_native_tuple(string,byte[],uint64,uint512)(string,byte[],uint64,uint512)" // (𝕡) app#0 | result1#0,val_as_bytes%0#0,method<"echo_native_tuple(string,byte[],uint64,uint512)(string,byte[],uint64,uint512)"> again using native types in arguments\ntxn = arc4.abi_call(\n"echo_native_tuple(string,byte[],uin... typed_abi_call/typed_c2c.py:187-195 - itxn_field ApplicationArgs // (𝕡) app#0 | result1#0,val_as_bytes%0#0 - byte 0x00027331 // (𝕡) app#0 | result1#0,val_as_bytes%0#0,0x00027331 String("s1") typed_abi_call/typed_c2c.py:190 - itxn_field ApplicationArgs // (𝕡) app#0 | result1#0,val_as_bytes%0#0 - byte 0x00026231 // (𝕡) app#0 | result1#0,val_as_bytes%0#0,0x00026231 Bytes(b"b1") typed_abi_call/typed_c2c.py:191 - itxn_field ApplicationArgs // (𝕡) app#0 | result1#0,val_as_bytes%0#0 - // virtual: load val_as_bytes%0#0 from l-stack (no copy) (𝕡) app#0 | result1#0,val_as_bytes%0#0 - itxn_field ApplicationArgs // (𝕡) app#0 | result1#0 - byte 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002 // (𝕡) app#0 | result1#0,0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002 BigUInt(2) typed_abi_call/typed_c2c.py:193 - itxn_field ApplicationArgs // (𝕡) app#0 | result1#0 - int appl // (𝕡) app#0 | result1#0,appl again using native types in arguments\ntxn = arc4.abi_call(\n"echo_native_tuple(string,byte[],uin... typed_abi_call/typed_c2c.py:187-195 - itxn_field TypeEnum // (𝕡) app#0 | result1#0 - int 0 // (𝕡) app#0 | result1#0,0 again using native types in arguments\ntxn = arc4.abi_call(\n"echo_native_tuple(string,byte[],uin... typed_abi_call/typed_c2c.py:187-195 - itxn_field Fee // (𝕡) app#0 | result1#0 - itxn_submit // (𝕡) app#0 | result1#0 again using native types in arguments\ntxn = arc4.abi_call(\n"echo_native_tuple(string,byte[],uin... typed_abi_call/typed_c2c.py:187-195 - itxn LastLog // (𝕡) app#0 | result1#0,{itxn} again using native types in arguments\ntxn = arc4.abi_call(\n"echo_native_tuple(string,byte[],uin... typed_abi_call/typed_c2c.py:187-195 - // virtual: store txn.LastLog#0 to l-stack (no copy) (𝕡) app#0 | result1#0,txn.LastLog#0 again using native types in arguments\ntxn = arc4.abi_call(\n"echo_native_tuple(string,byte[],uin... typed_abi_call/typed_c2c.py:187-195 - dup // load txn.LastLog#0 from l-stack (copy) (𝕡) app#0 | result1#0,txn.LastLog#0,txn.LastLog#0 arc4.Tuple[arc4.String, arc4.DynamicBytes, arc4.UInt64, arc4.UInt512].from_log(\ntxn.last_log\n) typed_abi_call/typed_c2c.py:196-198 - extract 4 0 // (𝕡) app#0 | result1#0,txn.LastLog#0,{extract} arc4.Tuple[arc4.String, arc4.DynamicBytes, arc4.UInt64, arc4.UInt512].from_log(\ntxn.last_log\n) typed_abi_call/typed_c2c.py:196-198 - cover 1 // store result2#0 to l-stack (no copy) (𝕡) app#0 | result1#0,result2#0,txn.LastLog#0 arc4.Tuple[arc4.String, arc4.DynamicBytes, arc4.UInt64, arc4.UInt512].from_log(\ntxn.last_log\n) typed_abi_call/typed_c2c.py:196-198 - // virtual: load txn.LastLog#0 from l-stack (no copy) (𝕡) app#0 | result1#0,result2#0,txn.LastLog#0 arc4.Tuple[arc4.String, arc4.DynamicBytes, arc4.UInt64, arc4.UInt512].from_log(\ntxn.last_log\n) typed_abi_call/typed_c2c.py:196-198 - extract 0 4 // (𝕡) app#0 | result1#0,result2#0,{extract} arc4.Tuple[arc4.String, arc4.DynamicBytes, arc4.UInt64, arc4.UInt512].from_log(\ntxn.last_log\n) typed_abi_call/typed_c2c.py:196-198 - // virtual: store tmp%12#0 to l-stack (no copy) (𝕡) app#0 | result1#0,result2#0,tmp%12#0 arc4.Tuple[arc4.String, arc4.DynamicBytes, arc4.UInt64, arc4.UInt512].from_log(\ntxn.last_log\n) typed_abi_call/typed_c2c.py:196-198 - // virtual: load tmp%12#0 from l-stack (no copy) (𝕡) app#0 | result1#0,result2#0,tmp%12#0 arc4.Tuple[arc4.String, arc4.DynamicBytes, arc4.UInt64, arc4.UInt512].from_log(\ntxn.last_log\n) typed_abi_call/typed_c2c.py:196-198 - byte 0x151f7c75 // (𝕡) app#0 | result1#0,result2#0,tmp%12#0,0x151f7c75 arc4.Tuple[arc4.String, arc4.DynamicBytes, arc4.UInt64, arc4.UInt512].from_log(\ntxn.last_log\n) typed_abi_call/typed_c2c.py:196-198 - == // (𝕡) app#0 | result1#0,result2#0,{==} arc4.Tuple[arc4.String, arc4.DynamicBytes, arc4.UInt64, arc4.UInt512].from_log(\ntxn.last_log\n) typed_abi_call/typed_c2c.py:196-198 - // virtual: store tmp%13#0 to l-stack (no copy) (𝕡) app#0 | result1#0,result2#0,tmp%13#0 arc4.Tuple[arc4.String, arc4.DynamicBytes, arc4.UInt64, arc4.UInt512].from_log(\ntxn.last_log\n) typed_abi_call/typed_c2c.py:196-198 - // virtual: load tmp%13#0 from l-stack (no copy) (𝕡) app#0 | result1#0,result2#0,tmp%13#0 arc4.Tuple[arc4.String, arc4.DynamicBytes, arc4.UInt64, arc4.UInt512].from_log(\ntxn.last_log\n) typed_abi_call/typed_c2c.py:196-198 - assert // ARC4 prefix is valid // (𝕡) app#0 | result1#0,result2#0 arc4.Tuple[arc4.String, arc4.DynamicBytes, arc4.UInt64, arc4.UInt512].from_log(\ntxn.last_log\n) typed_abi_call/typed_c2c.py:196-198 - dig 1 // load result1#0 from l-stack (copy) (𝕡) app#0 | result1#0,result2#0,result1#0 result1 == result2 typed_abi_call/typed_c2c.py:199 - uncover 1 // load result2#0 from l-stack (no copy) (𝕡) app#0 | result1#0,result1#0,result2#0 result1 == result2 typed_abi_call/typed_c2c.py:199 - == // (𝕡) app#0 | result1#0,{==} result1 == result2 typed_abi_call/typed_c2c.py:199 - // virtual: store tmp%14#0 to l-stack (no copy) (𝕡) app#0 | result1#0,tmp%14#0 result1 == result2 typed_abi_call/typed_c2c.py:199 - // virtual: load tmp%14#0 from l-stack (no copy) (𝕡) app#0 | result1#0,tmp%14#0 assert result1 == result2 typed_abi_call/typed_c2c.py:199 - assert // (𝕡) app#0 | result1#0 assert result1 == result2 typed_abi_call/typed_c2c.py:199 - itxn_begin // (𝕡) app#0 | result1#0 again using arc4 types in arguments\ntxn = arc4.abi_call(\n"echo_native_tuple(string,byte[],uint6... typed_abi_call/typed_c2c.py:201-209 - frame_dig -1 // load app#0 from parameters (𝕡) app#0 | result1#0,app#0 - itxn_field ApplicationID // (𝕡) app#0 | result1#0 - method "echo_native_tuple(string,byte[],uint64,uint512)(string,byte[],uint64,uint512)" // (𝕡) app#0 | result1#0,method<"echo_native_tuple(string,byte[],uint64,uint512)(string,byte[],uint64,uint512)"> again using arc4 types in arguments\ntxn = arc4.abi_call(\n"echo_native_tuple(string,byte[],uint6... typed_abi_call/typed_c2c.py:201-209 - itxn_field ApplicationArgs // (𝕡) app#0 | result1#0 - byte 0x00027331 // (𝕡) app#0 | result1#0,0x00027331 arc4.String("s1") typed_abi_call/typed_c2c.py:204 - itxn_field ApplicationArgs // (𝕡) app#0 | result1#0 - byte 0x00026231 // (𝕡) app#0 | result1#0,0x00026231 arc4.DynamicBytes(b"b1") typed_abi_call/typed_c2c.py:205 - itxn_field ApplicationArgs // (𝕡) app#0 | result1#0 - byte 0x0000000000000001 // (𝕡) app#0 | result1#0,0x0000000000000001 arc4.UInt64(1) typed_abi_call/typed_c2c.py:206 - itxn_field ApplicationArgs // (𝕡) app#0 | result1#0 - byte 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002 // (𝕡) app#0 | result1#0,0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002 arc4.UInt512(2) typed_abi_call/typed_c2c.py:207 - itxn_field ApplicationArgs // (𝕡) app#0 | result1#0 - int appl // (𝕡) app#0 | result1#0,appl again using arc4 types in arguments\ntxn = arc4.abi_call(\n"echo_native_tuple(string,byte[],uint6... typed_abi_call/typed_c2c.py:201-209 - itxn_field TypeEnum // (𝕡) app#0 | result1#0 - int 0 // (𝕡) app#0 | result1#0,0 again using arc4 types in arguments\ntxn = arc4.abi_call(\n"echo_native_tuple(string,byte[],uint6... typed_abi_call/typed_c2c.py:201-209 - itxn_field Fee // (𝕡) app#0 | result1#0 - itxn_submit // (𝕡) app#0 | result1#0 again using arc4 types in arguments\ntxn = arc4.abi_call(\n"echo_native_tuple(string,byte[],uint6... typed_abi_call/typed_c2c.py:201-209 - itxn LastLog // (𝕡) app#0 | result1#0,{itxn} again using arc4 types in arguments\ntxn = arc4.abi_call(\n"echo_native_tuple(string,byte[],uint6... typed_abi_call/typed_c2c.py:201-209 - // virtual: store txn.LastLog#0 to l-stack (no copy) (𝕡) app#0 | result1#0,txn.LastLog#0 again using arc4 types in arguments\ntxn = arc4.abi_call(\n"echo_native_tuple(string,byte[],uint6... typed_abi_call/typed_c2c.py:201-209 - dup // load txn.LastLog#0 from l-stack (copy) (𝕡) app#0 | result1#0,txn.LastLog#0,txn.LastLog#0 arc4.Tuple[arc4.String, arc4.DynamicBytes, arc4.UInt64, arc4.UInt512].from_log(\ntxn.last_log\n) typed_abi_call/typed_c2c.py:210-212 - extract 4 0 // (𝕡) app#0 | result1#0,txn.LastLog#0,{extract} arc4.Tuple[arc4.String, arc4.DynamicBytes, arc4.UInt64, arc4.UInt512].from_log(\ntxn.last_log\n) typed_abi_call/typed_c2c.py:210-212 - cover 1 // store result3#0 to l-stack (no copy) (𝕡) app#0 | result1#0,result3#0,txn.LastLog#0 arc4.Tuple[arc4.String, arc4.DynamicBytes, arc4.UInt64, arc4.UInt512].from_log(\ntxn.last_log\n) typed_abi_call/typed_c2c.py:210-212 - // virtual: load txn.LastLog#0 from l-stack (no copy) (𝕡) app#0 | result1#0,result3#0,txn.LastLog#0 arc4.Tuple[arc4.String, arc4.DynamicBytes, arc4.UInt64, arc4.UInt512].from_log(\ntxn.last_log\n) typed_abi_call/typed_c2c.py:210-212 - extract 0 4 // (𝕡) app#0 | result1#0,result3#0,{extract} arc4.Tuple[arc4.String, arc4.DynamicBytes, arc4.UInt64, arc4.UInt512].from_log(\ntxn.last_log\n) typed_abi_call/typed_c2c.py:210-212 - // virtual: store tmp%16#0 to l-stack (no copy) (𝕡) app#0 | result1#0,result3#0,tmp%16#0 arc4.Tuple[arc4.String, arc4.DynamicBytes, arc4.UInt64, arc4.UInt512].from_log(\ntxn.last_log\n) typed_abi_call/typed_c2c.py:210-212 - // virtual: load tmp%16#0 from l-stack (no copy) (𝕡) app#0 | result1#0,result3#0,tmp%16#0 arc4.Tuple[arc4.String, arc4.DynamicBytes, arc4.UInt64, arc4.UInt512].from_log(\ntxn.last_log\n) typed_abi_call/typed_c2c.py:210-212 - byte 0x151f7c75 // (𝕡) app#0 | result1#0,result3#0,tmp%16#0,0x151f7c75 arc4.Tuple[arc4.String, arc4.DynamicBytes, arc4.UInt64, arc4.UInt512].from_log(\ntxn.last_log\n) typed_abi_call/typed_c2c.py:210-212 - == // (𝕡) app#0 | result1#0,result3#0,{==} arc4.Tuple[arc4.String, arc4.DynamicBytes, arc4.UInt64, arc4.UInt512].from_log(\ntxn.last_log\n) typed_abi_call/typed_c2c.py:210-212 - // virtual: store tmp%17#0 to l-stack (no copy) (𝕡) app#0 | result1#0,result3#0,tmp%17#0 arc4.Tuple[arc4.String, arc4.DynamicBytes, arc4.UInt64, arc4.UInt512].from_log(\ntxn.last_log\n) typed_abi_call/typed_c2c.py:210-212 - // virtual: load tmp%17#0 from l-stack (no copy) (𝕡) app#0 | result1#0,result3#0,tmp%17#0 arc4.Tuple[arc4.String, arc4.DynamicBytes, arc4.UInt64, arc4.UInt512].from_log(\ntxn.last_log\n) typed_abi_call/typed_c2c.py:210-212 - assert // ARC4 prefix is valid // (𝕡) app#0 | result1#0,result3#0 arc4.Tuple[arc4.String, arc4.DynamicBytes, arc4.UInt64, arc4.UInt512].from_log(\ntxn.last_log\n) typed_abi_call/typed_c2c.py:210-212 - // virtual: load result1#0 from l-stack (no copy) (𝕡) app#0 | result3#0,result1#0 result1 == result3 typed_abi_call/typed_c2c.py:213 - // virtual: load result3#0 from l-stack (no copy) (𝕡) app#0 | result1#0,result3#0 result1 == result3 typed_abi_call/typed_c2c.py:213 - == // (𝕡) app#0 | {==} result1 == result3 typed_abi_call/typed_c2c.py:213 - // virtual: store tmp%18#0 to l-stack (no copy) (𝕡) app#0 | tmp%18#0 result1 == result3 typed_abi_call/typed_c2c.py:213 - // virtual: load tmp%18#0 from l-stack (no copy) (𝕡) app#0 | tmp%18#0 assert result1 == result3 typed_abi_call/typed_c2c.py:213 - assert // (𝕡) app#0 | assert result1 == result3 typed_abi_call/typed_c2c.py:213 - retsub // + itxn_begin // (𝕡) app#0 | : the following uses method selectors to work around having nested tuples\ntxn = arc4.abi_call(\n... typed_abi_call/typed_c2c.py:169-177 + frame_dig -1 // load app#0 from parameters (𝕡) app#0 | app#0 + itxn_field ApplicationID // (𝕡) app#0 | + method "echo_native_tuple(string,byte[],uint64,uint512)(string,byte[],uint64,uint512)" // (𝕡) app#0 | method<"echo_native_tuple(string,byte[],uint64,uint512)(string,byte[],uint64,uint512)"> : the following uses method selectors to work around having nested tuples\ntxn = arc4.abi_call(\n... typed_abi_call/typed_c2c.py:169-177 + itxn_field ApplicationArgs // (𝕡) app#0 | + byte 0x00027331 // (𝕡) app#0 | 0x00027331 "s1" typed_abi_call/typed_c2c.py:172 + itxn_field ApplicationArgs // (𝕡) app#0 | + byte 0x00026231 // (𝕡) app#0 | 0x00026231 b"b1" typed_abi_call/typed_c2c.py:173 + itxn_field ApplicationArgs // (𝕡) app#0 | + byte 0x0000000000000001 // (𝕡) app#0 | 0x0000000000000001 1 typed_abi_call/typed_c2c.py:174 + itxn_field ApplicationArgs // (𝕡) app#0 | + byte 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002 // (𝕡) app#0 | 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002 2 typed_abi_call/typed_c2c.py:175 + itxn_field ApplicationArgs // (𝕡) app#0 | + int appl // (𝕡) app#0 | appl : the following uses method selectors to work around having nested tuples\ntxn = arc4.abi_call(\n... typed_abi_call/typed_c2c.py:169-177 + itxn_field TypeEnum // (𝕡) app#0 | + int 0 // (𝕡) app#0 | 0 : the following uses method selectors to work around having nested tuples\ntxn = arc4.abi_call(\n... typed_abi_call/typed_c2c.py:169-177 + itxn_field Fee // (𝕡) app#0 | + itxn_submit // (𝕡) app#0 | : the following uses method selectors to work around having nested tuples\ntxn = arc4.abi_call(\n... typed_abi_call/typed_c2c.py:169-177 + itxn LastLog // (𝕡) app#0 | {itxn} : the following uses method selectors to work around having nested tuples\ntxn = arc4.abi_call(\n... typed_abi_call/typed_c2c.py:169-177 + // virtual: store txn.LastLog#0 to l-stack (no copy) (𝕡) app#0 | txn.LastLog#0 : the following uses method selectors to work around having nested tuples\ntxn = arc4.abi_call(\n... typed_abi_call/typed_c2c.py:169-177 + dup // load txn.LastLog#0 from l-stack (copy) (𝕡) app#0 | txn.LastLog#0,txn.LastLog#0 arc4.Tuple[arc4.String, arc4.DynamicBytes, arc4.UInt64, arc4.UInt512].from_log(\ntxn.last_log\n) typed_abi_call/typed_c2c.py:178-180 + extract 4 0 // (𝕡) app#0 | txn.LastLog#0,{extract} arc4.Tuple[arc4.String, arc4.DynamicBytes, arc4.UInt64, arc4.UInt512].from_log(\ntxn.last_log\n) typed_abi_call/typed_c2c.py:178-180 + cover 1 // store result1#0 to l-stack (no copy) (𝕡) app#0 | result1#0,txn.LastLog#0 arc4.Tuple[arc4.String, arc4.DynamicBytes, arc4.UInt64, arc4.UInt512].from_log(\ntxn.last_log\n) typed_abi_call/typed_c2c.py:178-180 + // virtual: load txn.LastLog#0 from l-stack (no copy) (𝕡) app#0 | result1#0,txn.LastLog#0 arc4.Tuple[arc4.String, arc4.DynamicBytes, arc4.UInt64, arc4.UInt512].from_log(\ntxn.last_log\n) typed_abi_call/typed_c2c.py:178-180 + extract 0 4 // (𝕡) app#0 | result1#0,{extract} arc4.Tuple[arc4.String, arc4.DynamicBytes, arc4.UInt64, arc4.UInt512].from_log(\ntxn.last_log\n) typed_abi_call/typed_c2c.py:178-180 + // virtual: store tmp%1#0 to l-stack (no copy) (𝕡) app#0 | result1#0,tmp%1#0 arc4.Tuple[arc4.String, arc4.DynamicBytes, arc4.UInt64, arc4.UInt512].from_log(\ntxn.last_log\n) typed_abi_call/typed_c2c.py:178-180 + // virtual: load tmp%1#0 from l-stack (no copy) (𝕡) app#0 | result1#0,tmp%1#0 arc4.Tuple[arc4.String, arc4.DynamicBytes, arc4.UInt64, arc4.UInt512].from_log(\ntxn.last_log\n) typed_abi_call/typed_c2c.py:178-180 + byte 0x151f7c75 // (𝕡) app#0 | result1#0,tmp%1#0,0x151f7c75 arc4.Tuple[arc4.String, arc4.DynamicBytes, arc4.UInt64, arc4.UInt512].from_log(\ntxn.last_log\n) typed_abi_call/typed_c2c.py:178-180 + == // (𝕡) app#0 | result1#0,{==} arc4.Tuple[arc4.String, arc4.DynamicBytes, arc4.UInt64, arc4.UInt512].from_log(\ntxn.last_log\n) typed_abi_call/typed_c2c.py:178-180 + // virtual: store tmp%2#0 to l-stack (no copy) (𝕡) app#0 | result1#0,tmp%2#0 arc4.Tuple[arc4.String, arc4.DynamicBytes, arc4.UInt64, arc4.UInt512].from_log(\ntxn.last_log\n) typed_abi_call/typed_c2c.py:178-180 + // virtual: load tmp%2#0 from l-stack (no copy) (𝕡) app#0 | result1#0,tmp%2#0 arc4.Tuple[arc4.String, arc4.DynamicBytes, arc4.UInt64, arc4.UInt512].from_log(\ntxn.last_log\n) typed_abi_call/typed_c2c.py:178-180 + assert // ARC4 prefix is valid // (𝕡) app#0 | result1#0 arc4.Tuple[arc4.String, arc4.DynamicBytes, arc4.UInt64, arc4.UInt512].from_log(\ntxn.last_log\n) typed_abi_call/typed_c2c.py:178-180 + dup // load result1#0 from l-stack (copy) (𝕡) app#0 | result1#0,result1#0 result1.native typed_abi_call/typed_c2c.py:181 + int 0 // (𝕡) app#0 | result1#0,result1#0,0 result1.native typed_abi_call/typed_c2c.py:181 + extract_uint16 // (𝕡) app#0 | result1#0,{extract_uint16} result1.native typed_abi_call/typed_c2c.py:181 + cover 1 // store item_start_offset%0#0 to l-stack (no copy) (𝕡) app#0 | item_start_offset%0#0,result1#0 result1.native typed_abi_call/typed_c2c.py:181 + dup // load result1#0 from l-stack (copy) (𝕡) app#0 | item_start_offset%0#0,result1#0,result1#0 result1.native typed_abi_call/typed_c2c.py:181 + int 2 // (𝕡) app#0 | item_start_offset%0#0,result1#0,result1#0,2 result1.native typed_abi_call/typed_c2c.py:181 + extract_uint16 // (𝕡) app#0 | item_start_offset%0#0,result1#0,{extract_uint16} result1.native typed_abi_call/typed_c2c.py:181 + // virtual: store item_end_offset%0#0 to l-stack (no copy) (𝕡) app#0 | item_start_offset%0#0,result1#0,item_end_offset%0#0 result1.native typed_abi_call/typed_c2c.py:181 + dig 1 // load result1#0 from l-stack (copy) (𝕡) app#0 | item_start_offset%0#0,result1#0,item_end_offset%0#0,result1#0 result1.native typed_abi_call/typed_c2c.py:181 + uncover 3 // load item_start_offset%0#0 from l-stack (no copy) (𝕡) app#0 | result1#0,item_end_offset%0#0,result1#0,item_start_offset%0#0 result1.native typed_abi_call/typed_c2c.py:181 + dig 2 // load item_end_offset%0#0 from l-stack (copy) (𝕡) app#0 | result1#0,item_end_offset%0#0,result1#0,item_start_offset%0#0,item_end_offset%0#0 result1.native typed_abi_call/typed_c2c.py:181 + substring3 // (𝕡) app#0 | result1#0,item_end_offset%0#0,{substring3} result1.native typed_abi_call/typed_c2c.py:181 + cover 2 // store s#0 to l-stack (no copy) (𝕡) app#0 | s#0,result1#0,item_end_offset%0#0 result1.native typed_abi_call/typed_c2c.py:181 + dig 1 // load result1#0 from l-stack (copy) (𝕡) app#0 | s#0,result1#0,item_end_offset%0#0,result1#0 result1.native typed_abi_call/typed_c2c.py:181 + len // (𝕡) app#0 | s#0,result1#0,item_end_offset%0#0,{len} result1.native typed_abi_call/typed_c2c.py:181 + cover 1 // store item_end_offset%1#0 to l-stack (no copy) (𝕡) app#0 | s#0,result1#0,item_end_offset%1#0,item_end_offset%0#0 result1.native typed_abi_call/typed_c2c.py:181 + dig 2 // load result1#0 from l-stack (copy) (𝕡) app#0 | s#0,result1#0,item_end_offset%1#0,item_end_offset%0#0,result1#0 result1.native typed_abi_call/typed_c2c.py:181 + uncover 1 // load item_end_offset%0#0 from l-stack (no copy) (𝕡) app#0 | s#0,result1#0,item_end_offset%1#0,result1#0,item_end_offset%0#0 result1.native typed_abi_call/typed_c2c.py:181 + uncover 2 // load item_end_offset%1#0 from l-stack (no copy) (𝕡) app#0 | s#0,result1#0,result1#0,item_end_offset%0#0,item_end_offset%1#0 result1.native typed_abi_call/typed_c2c.py:181 + substring3 // (𝕡) app#0 | s#0,result1#0,{substring3} result1.native typed_abi_call/typed_c2c.py:181 + cover 2 // store b#0 to l-stack (no copy) (𝕡) app#0 | b#0,s#0,result1#0 result1.native typed_abi_call/typed_c2c.py:181 + dup // load result1#0 from l-stack (copy) (𝕡) app#0 | b#0,s#0,result1#0,result1#0 result1.native typed_abi_call/typed_c2c.py:181 + extract 4 8 // on error: Index access is out of bounds // (𝕡) app#0 | b#0,s#0,result1#0,{extract} result1.native typed_abi_call/typed_c2c.py:181 + cover 3 // store u#0 to l-stack (no copy) (𝕡) app#0 | u#0,b#0,s#0,result1#0 result1.native typed_abi_call/typed_c2c.py:181 + dup // load result1#0 from l-stack (copy) (𝕡) app#0 | u#0,b#0,s#0,result1#0,result1#0 result1.native typed_abi_call/typed_c2c.py:181 + extract 12 64 // on error: Index access is out of bounds // (𝕡) app#0 | u#0,b#0,s#0,result1#0,{extract} result1.native typed_abi_call/typed_c2c.py:181 + cover 3 // store bu#0 to l-stack (no copy) (𝕡) app#0 | u#0,bu#0,b#0,s#0,result1#0 result1.native typed_abi_call/typed_c2c.py:181 + uncover 1 // load s#0 from l-stack (no copy) (𝕡) app#0 | u#0,bu#0,b#0,result1#0,s#0 s.native typed_abi_call/typed_c2c.py:182 + extract 2 0 // (𝕡) app#0 | u#0,bu#0,b#0,result1#0,{extract} s.native typed_abi_call/typed_c2c.py:182 + // virtual: store tmp%3#0 to l-stack (no copy) (𝕡) app#0 | u#0,bu#0,b#0,result1#0,tmp%3#0 s.native typed_abi_call/typed_c2c.py:182 + // virtual: load tmp%3#0 from l-stack (no copy) (𝕡) app#0 | u#0,bu#0,b#0,result1#0,tmp%3#0 s.native == "echo: s1" typed_abi_call/typed_c2c.py:182 + byte "echo: s1" // (𝕡) app#0 | u#0,bu#0,b#0,result1#0,tmp%3#0,"echo: s1" "echo: s1" typed_abi_call/typed_c2c.py:182 + == // (𝕡) app#0 | u#0,bu#0,b#0,result1#0,{==} s.native == "echo: s1" typed_abi_call/typed_c2c.py:182 + // virtual: store tmp%4#0 to l-stack (no copy) (𝕡) app#0 | u#0,bu#0,b#0,result1#0,tmp%4#0 s.native == "echo: s1" typed_abi_call/typed_c2c.py:182 + // virtual: load tmp%4#0 from l-stack (no copy) (𝕡) app#0 | u#0,bu#0,b#0,result1#0,tmp%4#0 assert s.native == "echo: s1" typed_abi_call/typed_c2c.py:182 + assert // (𝕡) app#0 | u#0,bu#0,b#0,result1#0 assert s.native == "echo: s1" typed_abi_call/typed_c2c.py:182 + uncover 1 // load b#0 from l-stack (no copy) (𝕡) app#0 | u#0,bu#0,result1#0,b#0 b.native typed_abi_call/typed_c2c.py:183 + extract 2 0 // (𝕡) app#0 | u#0,bu#0,result1#0,{extract} b.native typed_abi_call/typed_c2c.py:183 + // virtual: store tmp%5#0 to l-stack (no copy) (𝕡) app#0 | u#0,bu#0,result1#0,tmp%5#0 b.native typed_abi_call/typed_c2c.py:183 + // virtual: load tmp%5#0 from l-stack (no copy) (𝕡) app#0 | u#0,bu#0,result1#0,tmp%5#0 b.native == b"echo: b1" typed_abi_call/typed_c2c.py:183 + byte 0x6563686f3a206231 // (𝕡) app#0 | u#0,bu#0,result1#0,tmp%5#0,0x6563686f3a206231 b"echo: b1" typed_abi_call/typed_c2c.py:183 + == // (𝕡) app#0 | u#0,bu#0,result1#0,{==} b.native == b"echo: b1" typed_abi_call/typed_c2c.py:183 + // virtual: store tmp%6#0 to l-stack (no copy) (𝕡) app#0 | u#0,bu#0,result1#0,tmp%6#0 b.native == b"echo: b1" typed_abi_call/typed_c2c.py:183 + // virtual: load tmp%6#0 from l-stack (no copy) (𝕡) app#0 | u#0,bu#0,result1#0,tmp%6#0 assert b.native == b"echo: b1" typed_abi_call/typed_c2c.py:183 + assert // (𝕡) app#0 | u#0,bu#0,result1#0 assert b.native == b"echo: b1" typed_abi_call/typed_c2c.py:183 + uncover 2 // load u#0 from l-stack (no copy) (𝕡) app#0 | bu#0,result1#0,u#0 u.native typed_abi_call/typed_c2c.py:184 + btoi // (𝕡) app#0 | bu#0,result1#0,{btoi} u.native typed_abi_call/typed_c2c.py:184 + // virtual: store tmp%7#0 to l-stack (no copy) (𝕡) app#0 | bu#0,result1#0,tmp%7#0 u.native typed_abi_call/typed_c2c.py:184 + // virtual: load tmp%7#0 from l-stack (no copy) (𝕡) app#0 | bu#0,result1#0,tmp%7#0 u.native == 2 typed_abi_call/typed_c2c.py:184 + int 2 // (𝕡) app#0 | bu#0,result1#0,tmp%7#0,2 2 typed_abi_call/typed_c2c.py:184 + == // (𝕡) app#0 | bu#0,result1#0,{==} u.native == 2 typed_abi_call/typed_c2c.py:184 + // virtual: store tmp%8#0 to l-stack (no copy) (𝕡) app#0 | bu#0,result1#0,tmp%8#0 u.native == 2 typed_abi_call/typed_c2c.py:184 + // virtual: load tmp%8#0 from l-stack (no copy) (𝕡) app#0 | bu#0,result1#0,tmp%8#0 assert u.native == 2 typed_abi_call/typed_c2c.py:184 + assert // (𝕡) app#0 | bu#0,result1#0 assert u.native == 2 typed_abi_call/typed_c2c.py:184 + uncover 1 // load bu#0 from l-stack (no copy) (𝕡) app#0 | result1#0,bu#0 bu.native == 3 typed_abi_call/typed_c2c.py:185 + byte 0x03 // (𝕡) app#0 | result1#0,bu#0,0x03 3 typed_abi_call/typed_c2c.py:185 + b== // (𝕡) app#0 | result1#0,{b==} bu.native == 3 typed_abi_call/typed_c2c.py:185 + // virtual: store tmp%9#0 to l-stack (no copy) (𝕡) app#0 | result1#0,tmp%9#0 bu.native == 3 typed_abi_call/typed_c2c.py:185 + // virtual: load tmp%9#0 from l-stack (no copy) (𝕡) app#0 | result1#0,tmp%9#0 assert bu.native == 3 typed_abi_call/typed_c2c.py:185 + assert // (𝕡) app#0 | result1#0 assert bu.native == 3 typed_abi_call/typed_c2c.py:185 + itxn_begin // (𝕡) app#0 | result1#0 again using native types in arguments\ntxn = arc4.abi_call(\n"echo_native_tuple(string,byte[],uin... typed_abi_call/typed_c2c.py:187-195 + int 1 // (𝕡) app#0 | result1#0,1 UInt64(1) typed_abi_call/typed_c2c.py:192 + itob // (𝕡) app#0 | result1#0,{itob} UInt64(1) typed_abi_call/typed_c2c.py:192 + // virtual: store val_as_bytes%0#0 to l-stack (no copy) (𝕡) app#0 | result1#0,val_as_bytes%0#0 UInt64(1) typed_abi_call/typed_c2c.py:192 + frame_dig -1 // load app#0 from parameters (𝕡) app#0 | result1#0,val_as_bytes%0#0,app#0 + itxn_field ApplicationID // (𝕡) app#0 | result1#0,val_as_bytes%0#0 + method "echo_native_tuple(string,byte[],uint64,uint512)(string,byte[],uint64,uint512)" // (𝕡) app#0 | result1#0,val_as_bytes%0#0,method<"echo_native_tuple(string,byte[],uint64,uint512)(string,byte[],uint64,uint512)"> again using native types in arguments\ntxn = arc4.abi_call(\n"echo_native_tuple(string,byte[],uin... typed_abi_call/typed_c2c.py:187-195 + itxn_field ApplicationArgs // (𝕡) app#0 | result1#0,val_as_bytes%0#0 + byte 0x00027331 // (𝕡) app#0 | result1#0,val_as_bytes%0#0,0x00027331 String("s1") typed_abi_call/typed_c2c.py:190 + itxn_field ApplicationArgs // (𝕡) app#0 | result1#0,val_as_bytes%0#0 + byte 0x00026231 // (𝕡) app#0 | result1#0,val_as_bytes%0#0,0x00026231 Bytes(b"b1") typed_abi_call/typed_c2c.py:191 + itxn_field ApplicationArgs // (𝕡) app#0 | result1#0,val_as_bytes%0#0 + // virtual: load val_as_bytes%0#0 from l-stack (no copy) (𝕡) app#0 | result1#0,val_as_bytes%0#0 + itxn_field ApplicationArgs // (𝕡) app#0 | result1#0 + byte 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002 // (𝕡) app#0 | result1#0,0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002 BigUInt(2) typed_abi_call/typed_c2c.py:193 + itxn_field ApplicationArgs // (𝕡) app#0 | result1#0 + int appl // (𝕡) app#0 | result1#0,appl again using native types in arguments\ntxn = arc4.abi_call(\n"echo_native_tuple(string,byte[],uin... typed_abi_call/typed_c2c.py:187-195 + itxn_field TypeEnum // (𝕡) app#0 | result1#0 + int 0 // (𝕡) app#0 | result1#0,0 again using native types in arguments\ntxn = arc4.abi_call(\n"echo_native_tuple(string,byte[],uin... typed_abi_call/typed_c2c.py:187-195 + itxn_field Fee // (𝕡) app#0 | result1#0 + itxn_submit // (𝕡) app#0 | result1#0 again using native types in arguments\ntxn = arc4.abi_call(\n"echo_native_tuple(string,byte[],uin... typed_abi_call/typed_c2c.py:187-195 + itxn LastLog // (𝕡) app#0 | result1#0,{itxn} again using native types in arguments\ntxn = arc4.abi_call(\n"echo_native_tuple(string,byte[],uin... typed_abi_call/typed_c2c.py:187-195 + // virtual: store txn.LastLog#0 to l-stack (no copy) (𝕡) app#0 | result1#0,txn.LastLog#0 again using native types in arguments\ntxn = arc4.abi_call(\n"echo_native_tuple(string,byte[],uin... typed_abi_call/typed_c2c.py:187-195 + dup // load txn.LastLog#0 from l-stack (copy) (𝕡) app#0 | result1#0,txn.LastLog#0,txn.LastLog#0 arc4.Tuple[arc4.String, arc4.DynamicBytes, arc4.UInt64, arc4.UInt512].from_log(\ntxn.last_log\n) typed_abi_call/typed_c2c.py:196-198 + extract 4 0 // (𝕡) app#0 | result1#0,txn.LastLog#0,{extract} arc4.Tuple[arc4.String, arc4.DynamicBytes, arc4.UInt64, arc4.UInt512].from_log(\ntxn.last_log\n) typed_abi_call/typed_c2c.py:196-198 + cover 1 // store result2#0 to l-stack (no copy) (𝕡) app#0 | result1#0,result2#0,txn.LastLog#0 arc4.Tuple[arc4.String, arc4.DynamicBytes, arc4.UInt64, arc4.UInt512].from_log(\ntxn.last_log\n) typed_abi_call/typed_c2c.py:196-198 + // virtual: load txn.LastLog#0 from l-stack (no copy) (𝕡) app#0 | result1#0,result2#0,txn.LastLog#0 arc4.Tuple[arc4.String, arc4.DynamicBytes, arc4.UInt64, arc4.UInt512].from_log(\ntxn.last_log\n) typed_abi_call/typed_c2c.py:196-198 + extract 0 4 // (𝕡) app#0 | result1#0,result2#0,{extract} arc4.Tuple[arc4.String, arc4.DynamicBytes, arc4.UInt64, arc4.UInt512].from_log(\ntxn.last_log\n) typed_abi_call/typed_c2c.py:196-198 + // virtual: store tmp%12#0 to l-stack (no copy) (𝕡) app#0 | result1#0,result2#0,tmp%12#0 arc4.Tuple[arc4.String, arc4.DynamicBytes, arc4.UInt64, arc4.UInt512].from_log(\ntxn.last_log\n) typed_abi_call/typed_c2c.py:196-198 + // virtual: load tmp%12#0 from l-stack (no copy) (𝕡) app#0 | result1#0,result2#0,tmp%12#0 arc4.Tuple[arc4.String, arc4.DynamicBytes, arc4.UInt64, arc4.UInt512].from_log(\ntxn.last_log\n) typed_abi_call/typed_c2c.py:196-198 + byte 0x151f7c75 // (𝕡) app#0 | result1#0,result2#0,tmp%12#0,0x151f7c75 arc4.Tuple[arc4.String, arc4.DynamicBytes, arc4.UInt64, arc4.UInt512].from_log(\ntxn.last_log\n) typed_abi_call/typed_c2c.py:196-198 + == // (𝕡) app#0 | result1#0,result2#0,{==} arc4.Tuple[arc4.String, arc4.DynamicBytes, arc4.UInt64, arc4.UInt512].from_log(\ntxn.last_log\n) typed_abi_call/typed_c2c.py:196-198 + // virtual: store tmp%13#0 to l-stack (no copy) (𝕡) app#0 | result1#0,result2#0,tmp%13#0 arc4.Tuple[arc4.String, arc4.DynamicBytes, arc4.UInt64, arc4.UInt512].from_log(\ntxn.last_log\n) typed_abi_call/typed_c2c.py:196-198 + // virtual: load tmp%13#0 from l-stack (no copy) (𝕡) app#0 | result1#0,result2#0,tmp%13#0 arc4.Tuple[arc4.String, arc4.DynamicBytes, arc4.UInt64, arc4.UInt512].from_log(\ntxn.last_log\n) typed_abi_call/typed_c2c.py:196-198 + assert // ARC4 prefix is valid // (𝕡) app#0 | result1#0,result2#0 arc4.Tuple[arc4.String, arc4.DynamicBytes, arc4.UInt64, arc4.UInt512].from_log(\ntxn.last_log\n) typed_abi_call/typed_c2c.py:196-198 + dig 1 // load result1#0 from l-stack (copy) (𝕡) app#0 | result1#0,result2#0,result1#0 result1 == result2 typed_abi_call/typed_c2c.py:199 + uncover 1 // load result2#0 from l-stack (no copy) (𝕡) app#0 | result1#0,result1#0,result2#0 result1 == result2 typed_abi_call/typed_c2c.py:199 + == // (𝕡) app#0 | result1#0,{==} result1 == result2 typed_abi_call/typed_c2c.py:199 + // virtual: store tmp%14#0 to l-stack (no copy) (𝕡) app#0 | result1#0,tmp%14#0 result1 == result2 typed_abi_call/typed_c2c.py:199 + // virtual: load tmp%14#0 from l-stack (no copy) (𝕡) app#0 | result1#0,tmp%14#0 assert result1 == result2 typed_abi_call/typed_c2c.py:199 + assert // (𝕡) app#0 | result1#0 assert result1 == result2 typed_abi_call/typed_c2c.py:199 + itxn_begin // (𝕡) app#0 | result1#0 again using arc4 types in arguments\ntxn = arc4.abi_call(\n"echo_native_tuple(string,byte[],uint6... typed_abi_call/typed_c2c.py:201-209 + frame_dig -1 // load app#0 from parameters (𝕡) app#0 | result1#0,app#0 + itxn_field ApplicationID // (𝕡) app#0 | result1#0 + method "echo_native_tuple(string,byte[],uint64,uint512)(string,byte[],uint64,uint512)" // (𝕡) app#0 | result1#0,method<"echo_native_tuple(string,byte[],uint64,uint512)(string,byte[],uint64,uint512)"> again using arc4 types in arguments\ntxn = arc4.abi_call(\n"echo_native_tuple(string,byte[],uint6... typed_abi_call/typed_c2c.py:201-209 + itxn_field ApplicationArgs // (𝕡) app#0 | result1#0 + byte 0x00027331 // (𝕡) app#0 | result1#0,0x00027331 arc4.String("s1") typed_abi_call/typed_c2c.py:204 + itxn_field ApplicationArgs // (𝕡) app#0 | result1#0 + byte 0x00026231 // (𝕡) app#0 | result1#0,0x00026231 arc4.DynamicBytes(b"b1") typed_abi_call/typed_c2c.py:205 + itxn_field ApplicationArgs // (𝕡) app#0 | result1#0 + byte 0x0000000000000001 // (𝕡) app#0 | result1#0,0x0000000000000001 arc4.UInt64(1) typed_abi_call/typed_c2c.py:206 + itxn_field ApplicationArgs // (𝕡) app#0 | result1#0 + byte 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002 // (𝕡) app#0 | result1#0,0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002 arc4.UInt512(2) typed_abi_call/typed_c2c.py:207 + itxn_field ApplicationArgs // (𝕡) app#0 | result1#0 + int appl // (𝕡) app#0 | result1#0,appl again using arc4 types in arguments\ntxn = arc4.abi_call(\n"echo_native_tuple(string,byte[],uint6... typed_abi_call/typed_c2c.py:201-209 + itxn_field TypeEnum // (𝕡) app#0 | result1#0 + int 0 // (𝕡) app#0 | result1#0,0 again using arc4 types in arguments\ntxn = arc4.abi_call(\n"echo_native_tuple(string,byte[],uint6... typed_abi_call/typed_c2c.py:201-209 + itxn_field Fee // (𝕡) app#0 | result1#0 + itxn_submit // (𝕡) app#0 | result1#0 again using arc4 types in arguments\ntxn = arc4.abi_call(\n"echo_native_tuple(string,byte[],uint6... typed_abi_call/typed_c2c.py:201-209 + itxn LastLog // (𝕡) app#0 | result1#0,{itxn} again using arc4 types in arguments\ntxn = arc4.abi_call(\n"echo_native_tuple(string,byte[],uint6... typed_abi_call/typed_c2c.py:201-209 + // virtual: store txn.LastLog#0 to l-stack (no copy) (𝕡) app#0 | result1#0,txn.LastLog#0 again using arc4 types in arguments\ntxn = arc4.abi_call(\n"echo_native_tuple(string,byte[],uint6... typed_abi_call/typed_c2c.py:201-209 + dup // load txn.LastLog#0 from l-stack (copy) (𝕡) app#0 | result1#0,txn.LastLog#0,txn.LastLog#0 arc4.Tuple[arc4.String, arc4.DynamicBytes, arc4.UInt64, arc4.UInt512].from_log(\ntxn.last_log\n) typed_abi_call/typed_c2c.py:210-212 + extract 4 0 // (𝕡) app#0 | result1#0,txn.LastLog#0,{extract} arc4.Tuple[arc4.String, arc4.DynamicBytes, arc4.UInt64, arc4.UInt512].from_log(\ntxn.last_log\n) typed_abi_call/typed_c2c.py:210-212 + cover 1 // store result3#0 to l-stack (no copy) (𝕡) app#0 | result1#0,result3#0,txn.LastLog#0 arc4.Tuple[arc4.String, arc4.DynamicBytes, arc4.UInt64, arc4.UInt512].from_log(\ntxn.last_log\n) typed_abi_call/typed_c2c.py:210-212 + // virtual: load txn.LastLog#0 from l-stack (no copy) (𝕡) app#0 | result1#0,result3#0,txn.LastLog#0 arc4.Tuple[arc4.String, arc4.DynamicBytes, arc4.UInt64, arc4.UInt512].from_log(\ntxn.last_log\n) typed_abi_call/typed_c2c.py:210-212 + extract 0 4 // (𝕡) app#0 | result1#0,result3#0,{extract} arc4.Tuple[arc4.String, arc4.DynamicBytes, arc4.UInt64, arc4.UInt512].from_log(\ntxn.last_log\n) typed_abi_call/typed_c2c.py:210-212 + // virtual: store tmp%16#0 to l-stack (no copy) (𝕡) app#0 | result1#0,result3#0,tmp%16#0 arc4.Tuple[arc4.String, arc4.DynamicBytes, arc4.UInt64, arc4.UInt512].from_log(\ntxn.last_log\n) typed_abi_call/typed_c2c.py:210-212 + // virtual: load tmp%16#0 from l-stack (no copy) (𝕡) app#0 | result1#0,result3#0,tmp%16#0 arc4.Tuple[arc4.String, arc4.DynamicBytes, arc4.UInt64, arc4.UInt512].from_log(\ntxn.last_log\n) typed_abi_call/typed_c2c.py:210-212 + byte 0x151f7c75 // (𝕡) app#0 | result1#0,result3#0,tmp%16#0,0x151f7c75 arc4.Tuple[arc4.String, arc4.DynamicBytes, arc4.UInt64, arc4.UInt512].from_log(\ntxn.last_log\n) typed_abi_call/typed_c2c.py:210-212 + == // (𝕡) app#0 | result1#0,result3#0,{==} arc4.Tuple[arc4.String, arc4.DynamicBytes, arc4.UInt64, arc4.UInt512].from_log(\ntxn.last_log\n) typed_abi_call/typed_c2c.py:210-212 + // virtual: store tmp%17#0 to l-stack (no copy) (𝕡) app#0 | result1#0,result3#0,tmp%17#0 arc4.Tuple[arc4.String, arc4.DynamicBytes, arc4.UInt64, arc4.UInt512].from_log(\ntxn.last_log\n) typed_abi_call/typed_c2c.py:210-212 + // virtual: load tmp%17#0 from l-stack (no copy) (𝕡) app#0 | result1#0,result3#0,tmp%17#0 arc4.Tuple[arc4.String, arc4.DynamicBytes, arc4.UInt64, arc4.UInt512].from_log(\ntxn.last_log\n) typed_abi_call/typed_c2c.py:210-212 + assert // ARC4 prefix is valid // (𝕡) app#0 | result1#0,result3#0 arc4.Tuple[arc4.String, arc4.DynamicBytes, arc4.UInt64, arc4.UInt512].from_log(\ntxn.last_log\n) typed_abi_call/typed_c2c.py:210-212 + // virtual: load result1#0 from l-stack (no copy) (𝕡) app#0 | result3#0,result1#0 result1 == result3 typed_abi_call/typed_c2c.py:213 + // virtual: load result3#0 from l-stack (no copy) (𝕡) app#0 | result1#0,result3#0 result1 == result3 typed_abi_call/typed_c2c.py:213 + == // (𝕡) app#0 | {==} result1 == result3 typed_abi_call/typed_c2c.py:213 + // virtual: store tmp%18#0 to l-stack (no copy) (𝕡) app#0 | tmp%18#0 result1 == result3 typed_abi_call/typed_c2c.py:213 + // virtual: load tmp%18#0 from l-stack (no copy) (𝕡) app#0 | tmp%18#0 assert result1 == result3 typed_abi_call/typed_c2c.py:213 + assert // (𝕡) app#0 | assert result1 == result3 typed_abi_call/typed_c2c.py:213 + retsub // + + +// test_cases.typed_abi_call.typed_c2c.Greeter.test_no_args(app: uint64) -> void: +test_no_args: + proto 1 0 // (𝕡) app#0 | @arc4.abimethod()\ndef test_no_args(self, app: Application) -> None: typed_abi_call/typed_c2c.py:215-216 + +test_no_args_block@0: + itxn_begin // (𝕡) app#0 | arc4.abi_call(Logger.no_args, app_id=app) typed_abi_call/typed_c2c.py:217 + frame_dig -1 // load app#0 from parameters (𝕡) app#0 | app#0 + itxn_field ApplicationID // (𝕡) app#0 | + method "no_args()uint64" // (𝕡) app#0 | method<"no_args()uint64"> arc4.abi_call(Logger.no_args, app_id=app) typed_abi_call/typed_c2c.py:217 + itxn_field ApplicationArgs // (𝕡) app#0 | + int appl // (𝕡) app#0 | appl arc4.abi_call(Logger.no_args, app_id=app) typed_abi_call/typed_c2c.py:217 + itxn_field TypeEnum // (𝕡) app#0 | + int 0 // (𝕡) app#0 | 0 arc4.abi_call(Logger.no_args, app_id=app) typed_abi_call/typed_c2c.py:217 + itxn_field Fee // (𝕡) app#0 | + itxn_submit // (𝕡) app#0 | arc4.abi_call(Logger.no_args, app_id=app) typed_abi_call/typed_c2c.py:217 + itxn LastLog // (𝕡) app#0 | {itxn} arc4.abi_call(Logger.no_args, app_id=app) typed_abi_call/typed_c2c.py:217 + // virtual: store awst_tmp%0#0 to l-stack (no copy) (𝕡) app#0 | awst_tmp%0#0 arc4.abi_call(Logger.no_args, app_id=app) typed_abi_call/typed_c2c.py:217 + dup // load awst_tmp%0#0 from l-stack (copy) (𝕡) app#0 | awst_tmp%0#0,awst_tmp%0#0 arc4.abi_call(Logger.no_args, app_id=app) typed_abi_call/typed_c2c.py:217 + extract 4 0 // (𝕡) app#0 | awst_tmp%0#0,{extract} arc4.abi_call(Logger.no_args, app_id=app) typed_abi_call/typed_c2c.py:217 + cover 1 // store tmp%0#0 to l-stack (no copy) (𝕡) app#0 | tmp%0#0,awst_tmp%0#0 arc4.abi_call(Logger.no_args, app_id=app) typed_abi_call/typed_c2c.py:217 + // virtual: load awst_tmp%0#0 from l-stack (no copy) (𝕡) app#0 | tmp%0#0,awst_tmp%0#0 arc4.abi_call(Logger.no_args, app_id=app) typed_abi_call/typed_c2c.py:217 + extract 0 4 // (𝕡) app#0 | tmp%0#0,{extract} arc4.abi_call(Logger.no_args, app_id=app) typed_abi_call/typed_c2c.py:217 + // virtual: store tmp%1#0 to l-stack (no copy) (𝕡) app#0 | tmp%0#0,tmp%1#0 arc4.abi_call(Logger.no_args, app_id=app) typed_abi_call/typed_c2c.py:217 + // virtual: load tmp%1#0 from l-stack (no copy) (𝕡) app#0 | tmp%0#0,tmp%1#0 arc4.abi_call(Logger.no_args, app_id=app) typed_abi_call/typed_c2c.py:217 + byte 0x151f7c75 // (𝕡) app#0 | tmp%0#0,tmp%1#0,0x151f7c75 arc4.abi_call(Logger.no_args, app_id=app) typed_abi_call/typed_c2c.py:217 + == // (𝕡) app#0 | tmp%0#0,{==} arc4.abi_call(Logger.no_args, app_id=app) typed_abi_call/typed_c2c.py:217 + // virtual: store tmp%2#0 to l-stack (no copy) (𝕡) app#0 | tmp%0#0,tmp%2#0 arc4.abi_call(Logger.no_args, app_id=app) typed_abi_call/typed_c2c.py:217 + // virtual: load tmp%2#0 from l-stack (no copy) (𝕡) app#0 | tmp%0#0,tmp%2#0 arc4.abi_call(Logger.no_args, app_id=app) typed_abi_call/typed_c2c.py:217 + assert // ARC4 prefix is valid // (𝕡) app#0 | tmp%0#0 arc4.abi_call(Logger.no_args, app_id=app) typed_abi_call/typed_c2c.py:217 + // virtual: load tmp%0#0 from l-stack (no copy) (𝕡) app#0 | tmp%0#0 result, _txn = arc4.abi_call(Logger.no_args, app_id=app) typed_abi_call/typed_c2c.py:217 + btoi // (𝕡) app#0 | {btoi} arc4.abi_call(Logger.no_args, app_id=app) typed_abi_call/typed_c2c.py:217 + // virtual: store result#0 to l-stack (no copy) (𝕡) app#0 | result#0 result, _txn = arc4.abi_call(Logger.no_args, app_id=app) typed_abi_call/typed_c2c.py:217 + // virtual: load result#0 from l-stack (no copy) (𝕡) app#0 | result#0 result == 42 typed_abi_call/typed_c2c.py:218 + int 42 // (𝕡) app#0 | result#0,42 42 typed_abi_call/typed_c2c.py:218 + == // (𝕡) app#0 | {==} result == 42 typed_abi_call/typed_c2c.py:218 + // virtual: store tmp%3#0 to l-stack (no copy) (𝕡) app#0 | tmp%3#0 result == 42 typed_abi_call/typed_c2c.py:218 + // virtual: load tmp%3#0 from l-stack (no copy) (𝕡) app#0 | tmp%3#0 assert result == 42 typed_abi_call/typed_c2c.py:218 + assert // (𝕡) app#0 | assert result == 42 typed_abi_call/typed_c2c.py:218 + itxn_begin // (𝕡) app#0 | arc4.abi_call[arc4.UInt64]("no_args()uint64", app_id=app) typed_abi_call/typed_c2c.py:219 + frame_dig -1 // load app#0 from parameters (𝕡) app#0 | app#0 + itxn_field ApplicationID // (𝕡) app#0 | + method "no_args()uint64" // (𝕡) app#0 | method<"no_args()uint64"> arc4.abi_call[arc4.UInt64]("no_args()uint64", app_id=app) typed_abi_call/typed_c2c.py:219 + itxn_field ApplicationArgs // (𝕡) app#0 | + int appl // (𝕡) app#0 | appl arc4.abi_call[arc4.UInt64]("no_args()uint64", app_id=app) typed_abi_call/typed_c2c.py:219 + itxn_field TypeEnum // (𝕡) app#0 | + int 0 // (𝕡) app#0 | 0 arc4.abi_call[arc4.UInt64]("no_args()uint64", app_id=app) typed_abi_call/typed_c2c.py:219 + itxn_field Fee // (𝕡) app#0 | + itxn_submit // (𝕡) app#0 | arc4.abi_call[arc4.UInt64]("no_args()uint64", app_id=app) typed_abi_call/typed_c2c.py:219 + itxn LastLog // (𝕡) app#0 | {itxn} arc4.abi_call[arc4.UInt64]("no_args()uint64", app_id=app) typed_abi_call/typed_c2c.py:219 + // virtual: store awst_tmp%1#0 to l-stack (no copy) (𝕡) app#0 | awst_tmp%1#0 arc4.abi_call[arc4.UInt64]("no_args()uint64", app_id=app) typed_abi_call/typed_c2c.py:219 + dup // load awst_tmp%1#0 from l-stack (copy) (𝕡) app#0 | awst_tmp%1#0,awst_tmp%1#0 arc4.abi_call[arc4.UInt64]("no_args()uint64", app_id=app) typed_abi_call/typed_c2c.py:219 + extract 4 0 // (𝕡) app#0 | awst_tmp%1#0,{extract} arc4.abi_call[arc4.UInt64]("no_args()uint64", app_id=app) typed_abi_call/typed_c2c.py:219 + cover 1 // store arc4_result#0 to l-stack (no copy) (𝕡) app#0 | arc4_result#0,awst_tmp%1#0 arc4.abi_call[arc4.UInt64]("no_args()uint64", app_id=app) typed_abi_call/typed_c2c.py:219 + // virtual: load awst_tmp%1#0 from l-stack (no copy) (𝕡) app#0 | arc4_result#0,awst_tmp%1#0 arc4.abi_call[arc4.UInt64]("no_args()uint64", app_id=app) typed_abi_call/typed_c2c.py:219 + extract 0 4 // (𝕡) app#0 | arc4_result#0,{extract} arc4.abi_call[arc4.UInt64]("no_args()uint64", app_id=app) typed_abi_call/typed_c2c.py:219 + // virtual: store tmp%5#0 to l-stack (no copy) (𝕡) app#0 | arc4_result#0,tmp%5#0 arc4.abi_call[arc4.UInt64]("no_args()uint64", app_id=app) typed_abi_call/typed_c2c.py:219 + // virtual: load tmp%5#0 from l-stack (no copy) (𝕡) app#0 | arc4_result#0,tmp%5#0 arc4.abi_call[arc4.UInt64]("no_args()uint64", app_id=app) typed_abi_call/typed_c2c.py:219 + byte 0x151f7c75 // (𝕡) app#0 | arc4_result#0,tmp%5#0,0x151f7c75 arc4.abi_call[arc4.UInt64]("no_args()uint64", app_id=app) typed_abi_call/typed_c2c.py:219 + == // (𝕡) app#0 | arc4_result#0,{==} arc4.abi_call[arc4.UInt64]("no_args()uint64", app_id=app) typed_abi_call/typed_c2c.py:219 + // virtual: store tmp%6#0 to l-stack (no copy) (𝕡) app#0 | arc4_result#0,tmp%6#0 arc4.abi_call[arc4.UInt64]("no_args()uint64", app_id=app) typed_abi_call/typed_c2c.py:219 + // virtual: load tmp%6#0 from l-stack (no copy) (𝕡) app#0 | arc4_result#0,tmp%6#0 arc4.abi_call[arc4.UInt64]("no_args()uint64", app_id=app) typed_abi_call/typed_c2c.py:219 + assert // ARC4 prefix is valid // (𝕡) app#0 | arc4_result#0 arc4.abi_call[arc4.UInt64]("no_args()uint64", app_id=app) typed_abi_call/typed_c2c.py:219 + // virtual: load arc4_result#0 from l-stack (no copy) (𝕡) app#0 | arc4_result#0 arc4_result == 42 typed_abi_call/typed_c2c.py:220 + byte 0x000000000000002a // (𝕡) app#0 | arc4_result#0,0x000000000000002a 42 typed_abi_call/typed_c2c.py:220 + b== // (𝕡) app#0 | {b==} arc4_result == 42 typed_abi_call/typed_c2c.py:220 + // virtual: store tmp%7#0 to l-stack (no copy) (𝕡) app#0 | tmp%7#0 arc4_result == 42 typed_abi_call/typed_c2c.py:220 + // virtual: load tmp%7#0 from l-stack (no copy) (𝕡) app#0 | tmp%7#0 assert arc4_result == 42 typed_abi_call/typed_c2c.py:220 + assert // (𝕡) app#0 | assert arc4_result == 42 typed_abi_call/typed_c2c.py:220 + itxn_begin // (𝕡) app#0 | arc4.abi_call(Logger.no_args, app_id=app) typed_abi_call/typed_c2c.py:222 + frame_dig -1 // load app#0 from parameters (𝕡) app#0 | app#0 + itxn_field ApplicationID // (𝕡) app#0 | + method "no_args()uint64" // (𝕡) app#0 | method<"no_args()uint64"> arc4.abi_call(Logger.no_args, app_id=app) typed_abi_call/typed_c2c.py:222 + itxn_field ApplicationArgs // (𝕡) app#0 | + int appl // (𝕡) app#0 | appl arc4.abi_call(Logger.no_args, app_id=app) typed_abi_call/typed_c2c.py:222 + itxn_field TypeEnum // (𝕡) app#0 | + int 0 // (𝕡) app#0 | 0 arc4.abi_call(Logger.no_args, app_id=app) typed_abi_call/typed_c2c.py:222 + itxn_field Fee // (𝕡) app#0 | + itxn_submit // (𝕡) app#0 | arc4.abi_call(Logger.no_args, app_id=app) typed_abi_call/typed_c2c.py:222 + itxn LastLog // (𝕡) app#0 | {itxn} arc4.abi_call(Logger.no_args, app_id=app) typed_abi_call/typed_c2c.py:222 + // virtual: store awst_tmp%2#0 to l-stack (no copy) (𝕡) app#0 | awst_tmp%2#0 arc4.abi_call(Logger.no_args, app_id=app) typed_abi_call/typed_c2c.py:222 + // virtual: load awst_tmp%2#0 from l-stack (no copy) (𝕡) app#0 | awst_tmp%2#0 arc4.abi_call(Logger.no_args, app_id=app) typed_abi_call/typed_c2c.py:222 + extract 0 4 // (𝕡) app#0 | {extract} arc4.abi_call(Logger.no_args, app_id=app) typed_abi_call/typed_c2c.py:222 + // virtual: store tmp%9#0 to l-stack (no copy) (𝕡) app#0 | tmp%9#0 arc4.abi_call(Logger.no_args, app_id=app) typed_abi_call/typed_c2c.py:222 + // virtual: load tmp%9#0 from l-stack (no copy) (𝕡) app#0 | tmp%9#0 arc4.abi_call(Logger.no_args, app_id=app) typed_abi_call/typed_c2c.py:222 + byte 0x151f7c75 // (𝕡) app#0 | tmp%9#0,0x151f7c75 arc4.abi_call(Logger.no_args, app_id=app) typed_abi_call/typed_c2c.py:222 + == // (𝕡) app#0 | {==} arc4.abi_call(Logger.no_args, app_id=app) typed_abi_call/typed_c2c.py:222 + // virtual: store tmp%10#0 to l-stack (no copy) (𝕡) app#0 | tmp%10#0 arc4.abi_call(Logger.no_args, app_id=app) typed_abi_call/typed_c2c.py:222 + // virtual: load tmp%10#0 from l-stack (no copy) (𝕡) app#0 | tmp%10#0 arc4.abi_call(Logger.no_args, app_id=app) typed_abi_call/typed_c2c.py:222 + assert // ARC4 prefix is valid // (𝕡) app#0 | arc4.abi_call(Logger.no_args, app_id=app) typed_abi_call/typed_c2c.py:222 + itxn LastLog // (𝕡) app#0 | {itxn} op.ITxn.last_log() typed_abi_call/typed_c2c.py:223 + // virtual: store awst_tmp%3#0 to l-stack (no copy) (𝕡) app#0 | awst_tmp%3#0 op.ITxn.last_log() typed_abi_call/typed_c2c.py:223 + dup // load awst_tmp%3#0 from l-stack (copy) (𝕡) app#0 | awst_tmp%3#0,awst_tmp%3#0 arc4.UInt64.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:223 + extract 4 0 // (𝕡) app#0 | awst_tmp%3#0,{extract} arc4.UInt64.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:223 + cover 1 // store tmp%12#0 to l-stack (no copy) (𝕡) app#0 | tmp%12#0,awst_tmp%3#0 arc4.UInt64.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:223 + // virtual: load awst_tmp%3#0 from l-stack (no copy) (𝕡) app#0 | tmp%12#0,awst_tmp%3#0 arc4.UInt64.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:223 + extract 0 4 // (𝕡) app#0 | tmp%12#0,{extract} arc4.UInt64.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:223 + // virtual: store tmp%13#0 to l-stack (no copy) (𝕡) app#0 | tmp%12#0,tmp%13#0 arc4.UInt64.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:223 + // virtual: load tmp%13#0 from l-stack (no copy) (𝕡) app#0 | tmp%12#0,tmp%13#0 arc4.UInt64.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:223 + byte 0x151f7c75 // (𝕡) app#0 | tmp%12#0,tmp%13#0,0x151f7c75 arc4.UInt64.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:223 + == // (𝕡) app#0 | tmp%12#0,{==} arc4.UInt64.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:223 + // virtual: store tmp%14#0 to l-stack (no copy) (𝕡) app#0 | tmp%12#0,tmp%14#0 arc4.UInt64.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:223 + // virtual: load tmp%14#0 from l-stack (no copy) (𝕡) app#0 | tmp%12#0,tmp%14#0 arc4.UInt64.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:223 + assert // ARC4 prefix is valid // (𝕡) app#0 | tmp%12#0 arc4.UInt64.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:223 + // virtual: load tmp%12#0 from l-stack (no copy) (𝕡) app#0 | tmp%12#0 arc4.UInt64.from_log(op.ITxn.last_log()) == 42 typed_abi_call/typed_c2c.py:223 + byte 0x000000000000002a // (𝕡) app#0 | tmp%12#0,0x000000000000002a 42 typed_abi_call/typed_c2c.py:223 + b== // (𝕡) app#0 | {b==} arc4.UInt64.from_log(op.ITxn.last_log()) == 42 typed_abi_call/typed_c2c.py:223 + // virtual: store tmp%15#0 to l-stack (no copy) (𝕡) app#0 | tmp%15#0 arc4.UInt64.from_log(op.ITxn.last_log()) == 42 typed_abi_call/typed_c2c.py:223 + // virtual: load tmp%15#0 from l-stack (no copy) (𝕡) app#0 | tmp%15#0 assert arc4.UInt64.from_log(op.ITxn.last_log()) == 42 typed_abi_call/typed_c2c.py:223 + assert // (𝕡) app#0 | assert arc4.UInt64.from_log(op.ITxn.last_log()) == 42 typed_abi_call/typed_c2c.py:223 + retsub // diff --git a/test_cases/typed_abi_call/out/Greeter.approval.teal b/test_cases/typed_abi_call/out/Greeter.approval.teal index 8cc177dc5e..8f9dd5dda1 100644 --- a/test_cases/typed_abi_call/out/Greeter.approval.teal +++ b/test_cases/typed_abi_call/out/Greeter.approval.teal @@ -4,7 +4,7 @@ test_cases.typed_abi_call.typed_c2c.Greeter.approval_program: // typed_abi_call/typed_c2c.py:17 // class Greeter(ARC4Contract): txn NumAppArgs - bz main_bare_routing@15 + bz main_bare_routing@16 method "test_method_selector_kinds(application)void" method "test_method_overload(application)void" method "test_arg_conversion(application)void" @@ -16,8 +16,9 @@ test_cases.typed_abi_call.typed_c2c.Greeter.approval_program: method "test_native_uint64(application)void" method "test_native_biguint(application)void" method "test_native_tuple(application)void" + method "test_no_args(application)void" txna ApplicationArgs 0 - match main_test_method_selector_kinds_route@2 main_test_method_overload_route@3 main_test_arg_conversion_route@4 main_test_15plus_args_route@5 main_test_void_route@6 main_test_ref_types_route@7 main_test_native_string_route@8 main_test_native_bytes_route@9 main_test_native_uint64_route@10 main_test_native_biguint_route@11 main_test_native_tuple_route@12 + match main_test_method_selector_kinds_route@2 main_test_method_overload_route@3 main_test_arg_conversion_route@4 main_test_15plus_args_route@5 main_test_void_route@6 main_test_ref_types_route@7 main_test_native_string_route@8 main_test_native_bytes_route@9 main_test_native_uint64_route@10 main_test_native_biguint_route@11 main_test_native_tuple_route@12 main_test_no_args_route@13 err // reject transaction main_test_method_selector_kinds_route@2: @@ -232,7 +233,26 @@ main_test_native_tuple_route@12: int 1 return -main_bare_routing@15: +main_test_no_args_route@13: + // typed_abi_call/typed_c2c.py:215 + // @arc4.abimethod() + txn OnCompletion + ! + assert // OnCompletion is NoOp + txn ApplicationID + assert // is not creating + // typed_abi_call/typed_c2c.py:17 + // class Greeter(ARC4Contract): + txna ApplicationArgs 1 + btoi + txnas Applications + // typed_abi_call/typed_c2c.py:215 + // @arc4.abimethod() + callsub test_no_args + int 1 + return + +main_bare_routing@16: // typed_abi_call/typed_c2c.py:17 // class Greeter(ARC4Contract): txn OnCompletion @@ -1589,3 +1609,93 @@ test_native_tuple: == assert retsub + + +// test_cases.typed_abi_call.typed_c2c.Greeter.test_no_args(app: uint64) -> void: +test_no_args: + // typed_abi_call/typed_c2c.py:215-216 + // @arc4.abimethod() + // def test_no_args(self, app: Application) -> None: + proto 1 0 + // typed_abi_call/typed_c2c.py:217 + // result, _txn = arc4.abi_call(Logger.no_args, app_id=app) + itxn_begin + frame_dig -1 + itxn_field ApplicationID + method "no_args()uint64" + itxn_field ApplicationArgs + int appl + itxn_field TypeEnum + int 0 + itxn_field Fee + itxn_submit + itxn LastLog + dup + extract 4 0 + swap + extract 0 4 + byte 0x151f7c75 + == + assert // ARC4 prefix is valid + btoi + // typed_abi_call/typed_c2c.py:218 + // assert result == 42 + int 42 + == + assert + // typed_abi_call/typed_c2c.py:219 + // arc4_result, _txn = arc4.abi_call[arc4.UInt64]("no_args()uint64", app_id=app) + itxn_begin + frame_dig -1 + itxn_field ApplicationID + method "no_args()uint64" + itxn_field ApplicationArgs + int appl + itxn_field TypeEnum + int 0 + itxn_field Fee + itxn_submit + itxn LastLog + dup + extract 4 0 + swap + extract 0 4 + byte 0x151f7c75 + == + assert // ARC4 prefix is valid + // typed_abi_call/typed_c2c.py:220 + // assert arc4_result == 42 + byte 0x000000000000002a + b== + assert + // typed_abi_call/typed_c2c.py:222 + // arc4.abi_call(Logger.no_args, app_id=app) + itxn_begin + frame_dig -1 + itxn_field ApplicationID + method "no_args()uint64" + itxn_field ApplicationArgs + int appl + itxn_field TypeEnum + int 0 + itxn_field Fee + itxn_submit + itxn LastLog + extract 0 4 + byte 0x151f7c75 + == + assert // ARC4 prefix is valid + // typed_abi_call/typed_c2c.py:223 + // assert arc4.UInt64.from_log(op.ITxn.last_log()) == 42 + itxn LastLog + dup + extract 4 0 + swap + extract 0 4 + byte 0x151f7c75 + == + assert // ARC4 prefix is valid + byte 0x000000000000002a + b== + assert + retsub diff --git a/test_cases/typed_abi_call/out/Greeter.arc32.json b/test_cases/typed_abi_call/out/Greeter.arc32.json index 6ad6ba2a25..abfd0dfb89 100644 --- a/test_cases/typed_abi_call/out/Greeter.arc32.json +++ b/test_cases/typed_abi_call/out/Greeter.arc32.json @@ -54,10 +54,15 @@ "call_config": { "no_op": "CALL" } + }, + "test_no_args(application)void": { + "call_config": { + "no_op": "CALL" + } } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0X2Nhc2VzLnR5cGVkX2FiaV9jYWxsLnR5cGVkX2MyYy5HcmVldGVyLmFwcHJvdmFsX3Byb2dyYW06CiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MTcKICAgIC8vIGNsYXNzIEdyZWV0ZXIoQVJDNENvbnRyYWN0KToKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX2JhcmVfcm91dGluZ0AxNQogICAgbWV0aG9kICJ0ZXN0X21ldGhvZF9zZWxlY3Rvcl9raW5kcyhhcHBsaWNhdGlvbil2b2lkIgogICAgbWV0aG9kICJ0ZXN0X21ldGhvZF9vdmVybG9hZChhcHBsaWNhdGlvbil2b2lkIgogICAgbWV0aG9kICJ0ZXN0X2FyZ19jb252ZXJzaW9uKGFwcGxpY2F0aW9uKXZvaWQiCiAgICBtZXRob2QgInRlc3RfMTVwbHVzX2FyZ3MoYXBwbGljYXRpb24pdm9pZCIKICAgIG1ldGhvZCAidGVzdF92b2lkKGFwcGxpY2F0aW9uKXZvaWQiCiAgICBtZXRob2QgInRlc3RfcmVmX3R5cGVzKGFwcGxpY2F0aW9uLGFzc2V0KXZvaWQiCiAgICBtZXRob2QgInRlc3RfbmF0aXZlX3N0cmluZyhhcHBsaWNhdGlvbil2b2lkIgogICAgbWV0aG9kICJ0ZXN0X25hdGl2ZV9ieXRlcyhhcHBsaWNhdGlvbil2b2lkIgogICAgbWV0aG9kICJ0ZXN0X25hdGl2ZV91aW50NjQoYXBwbGljYXRpb24pdm9pZCIKICAgIG1ldGhvZCAidGVzdF9uYXRpdmVfYmlndWludChhcHBsaWNhdGlvbil2b2lkIgogICAgbWV0aG9kICJ0ZXN0X25hdGl2ZV90dXBsZShhcHBsaWNhdGlvbil2b2lkIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl90ZXN0X21ldGhvZF9zZWxlY3Rvcl9raW5kc19yb3V0ZUAyIG1haW5fdGVzdF9tZXRob2Rfb3ZlcmxvYWRfcm91dGVAMyBtYWluX3Rlc3RfYXJnX2NvbnZlcnNpb25fcm91dGVANCBtYWluX3Rlc3RfMTVwbHVzX2FyZ3Nfcm91dGVANSBtYWluX3Rlc3Rfdm9pZF9yb3V0ZUA2IG1haW5fdGVzdF9yZWZfdHlwZXNfcm91dGVANyBtYWluX3Rlc3RfbmF0aXZlX3N0cmluZ19yb3V0ZUA4IG1haW5fdGVzdF9uYXRpdmVfYnl0ZXNfcm91dGVAOSBtYWluX3Rlc3RfbmF0aXZlX3VpbnQ2NF9yb3V0ZUAxMCBtYWluX3Rlc3RfbmF0aXZlX2JpZ3VpbnRfcm91dGVAMTEgbWFpbl90ZXN0X25hdGl2ZV90dXBsZV9yb3V0ZUAxMgogICAgZXJyIC8vIHJlamVjdCB0cmFuc2FjdGlvbgoKbWFpbl90ZXN0X21ldGhvZF9zZWxlY3Rvcl9raW5kc19yb3V0ZUAyOgogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjE4CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjE3CiAgICAvLyBjbGFzcyBHcmVldGVyKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBcHBsaWNhdGlvbnMKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weToxOAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdGVzdF9tZXRob2Rfc2VsZWN0b3Jfa2luZHMKICAgIGludCAxCiAgICByZXR1cm4KCm1haW5fdGVzdF9tZXRob2Rfb3ZlcmxvYWRfcm91dGVAMzoKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weTozMQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBpcyBub3QgY3JlYXRpbmcKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weToxNwogICAgLy8gY2xhc3MgR3JlZXRlcihBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXBwbGljYXRpb25zCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MzEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHRlc3RfbWV0aG9kX292ZXJsb2FkCiAgICBpbnQgMQogICAgcmV0dXJuCgptYWluX3Rlc3RfYXJnX2NvbnZlcnNpb25fcm91dGVANDoKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weTo0NgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBpcyBub3QgY3JlYXRpbmcKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weToxNwogICAgLy8gY2xhc3MgR3JlZXRlcihBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXBwbGljYXRpb25zCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6NDYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHRlc3RfYXJnX2NvbnZlcnNpb24KICAgIGludCAxCiAgICByZXR1cm4KCm1haW5fdGVzdF8xNXBsdXNfYXJnc19yb3V0ZUA1OgogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjYzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjE3CiAgICAvLyBjbGFzcyBHcmVldGVyKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBcHBsaWNhdGlvbnMKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weTo2MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdGVzdF8xNXBsdXNfYXJncwogICAgaW50IDEKICAgIHJldHVybgoKbWFpbl90ZXN0X3ZvaWRfcm91dGVANjoKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weTo5MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBpcyBub3QgY3JlYXRpbmcKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weToxNwogICAgLy8gY2xhc3MgR3JlZXRlcihBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXBwbGljYXRpb25zCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6OTEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHRlc3Rfdm9pZAogICAgaW50IDEKICAgIHJldHVybgoKbWFpbl90ZXN0X3JlZl90eXBlc19yb3V0ZUA3OgogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjEwNQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBpcyBub3QgY3JlYXRpbmcKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weToxNwogICAgLy8gY2xhc3MgR3JlZXRlcihBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXBwbGljYXRpb25zCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICB0eG5hcyBBc3NldHMKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weToxMDUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHRlc3RfcmVmX3R5cGVzCiAgICBpbnQgMQogICAgcmV0dXJuCgptYWluX3Rlc3RfbmF0aXZlX3N0cmluZ19yb3V0ZUA4OgogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjExOQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBpcyBub3QgY3JlYXRpbmcKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weToxNwogICAgLy8gY2xhc3MgR3JlZXRlcihBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXBwbGljYXRpb25zCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MTE5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB0ZXN0X25hdGl2ZV9zdHJpbmcKICAgIGludCAxCiAgICByZXR1cm4KCm1haW5fdGVzdF9uYXRpdmVfYnl0ZXNfcm91dGVAOToKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weToxMzAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gaXMgbm90IGNyZWF0aW5nCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MTcKICAgIC8vIGNsYXNzIEdyZWV0ZXIoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFwcGxpY2F0aW9ucwogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjEzMAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdGVzdF9uYXRpdmVfYnl0ZXMKICAgIGludCAxCiAgICByZXR1cm4KCm1haW5fdGVzdF9uYXRpdmVfdWludDY0X3JvdXRlQDEwOgogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjE0MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBpcyBub3QgY3JlYXRpbmcKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weToxNwogICAgLy8gY2xhc3MgR3JlZXRlcihBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXBwbGljYXRpb25zCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MTQzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB0ZXN0X25hdGl2ZV91aW50NjQKICAgIGludCAxCiAgICByZXR1cm4KCm1haW5fdGVzdF9uYXRpdmVfYmlndWludF9yb3V0ZUAxMToKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weToxNTQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gaXMgbm90IGNyZWF0aW5nCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MTcKICAgIC8vIGNsYXNzIEdyZWV0ZXIoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFwcGxpY2F0aW9ucwogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjE1NAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdGVzdF9uYXRpdmVfYmlndWludAogICAgaW50IDEKICAgIHJldHVybgoKbWFpbl90ZXN0X25hdGl2ZV90dXBsZV9yb3V0ZUAxMjoKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weToxNjUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gaXMgbm90IGNyZWF0aW5nCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MTcKICAgIC8vIGNsYXNzIEdyZWV0ZXIoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFwcGxpY2F0aW9ucwogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjE2NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdGVzdF9uYXRpdmVfdHVwbGUKICAgIGludCAxCiAgICByZXR1cm4KCm1haW5fYmFyZV9yb3V0aW5nQDE1OgogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjE3CiAgICAvLyBjbGFzcyBHcmVldGVyKEFSQzRDb250cmFjdCk6CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gcmVqZWN0IHRyYW5zYWN0aW9uCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgYXNzZXJ0IC8vIGlzIGNyZWF0aW5nCiAgICBpbnQgMQogICAgcmV0dXJuCgoKLy8gdGVzdF9jYXNlcy50eXBlZF9hYmlfY2FsbC50eXBlZF9jMmMuR3JlZXRlci50ZXN0X21ldGhvZF9zZWxlY3Rvcl9raW5kcyhhcHA6IHVpbnQ2NCkgLT4gdm9pZDoKdGVzdF9tZXRob2Rfc2VsZWN0b3Jfa2luZHM6CiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MTgtMTkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBkZWYgdGVzdF9tZXRob2Rfc2VsZWN0b3Jfa2luZHMoc2VsZiwgYXBwOiBBcHBsaWNhdGlvbikgLT4gTm9uZToKICAgIHByb3RvIDEgMAogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjIwCiAgICAvLyByZXN1bHQsIF90eG4gPSBhcmM0LmFiaV9jYWxsKExvZ2dlci5lY2hvLCBhcmM0LlN0cmluZygidGVzdDEiKSwgYXBwX2lkPWFwcCkKICAgIGl0eG5fYmVnaW4KICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBtZXRob2QgImVjaG8oc3RyaW5nKXN0cmluZyIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBieXRlIDB4MDAwNTc0NjU3Mzc0MzEKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpbnQgYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50IDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZSAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEFSQzQgcHJlZml4IGlzIHZhbGlkCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MjEKICAgIC8vIGFzc2VydCByZXN1bHQgPT0gImVjaG86IHRlc3QxIgogICAgYnl0ZSAweDAwMGI2NTYzNjg2ZjNhMjA3NDY1NzM3NDMxCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MjIKICAgIC8vIHJlc3VsdCwgX3R4biA9IGFyYzQuYWJpX2NhbGwoTG9nZ2VyQ2xpZW50LmVjaG8sICJ0ZXN0MiIsIGFwcF9pZD1hcHApCiAgICBpdHhuX2JlZ2luCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgbWV0aG9kICJlY2hvKHN0cmluZylzdHJpbmciCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgYnl0ZSAweDAwMDU3NDY1NzM3NDMyCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaW50IGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgc3dhcAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGUgMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBBUkM0IHByZWZpeCBpcyB2YWxpZAogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjIzCiAgICAvLyBhc3NlcnQgcmVzdWx0ID09ICJlY2hvOiB0ZXN0MiIKICAgIGJ5dGUgMHgwMDBiNjU2MzY4NmYzYTIwNzQ2NTczNzQzMgogICAgPT0KICAgIGFzc2VydAogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjI0CiAgICAvLyByZXN1bHQsIF90eG4gPSBhcmM0LmFiaV9jYWxsW2FyYzQuU3RyaW5nXSgiZWNobyIsICJ0ZXN0MyIsIGFwcF9pZD1hcHApCiAgICBpdHhuX2JlZ2luCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgbWV0aG9kICJlY2hvKHN0cmluZylzdHJpbmciCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgYnl0ZSAweDAwMDU3NDY1NzM3NDMzCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaW50IGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgc3dhcAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGUgMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBBUkM0IHByZWZpeCBpcyB2YWxpZAogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjI1CiAgICAvLyBhc3NlcnQgcmVzdWx0ID09ICJlY2hvOiB0ZXN0MyIKICAgIGJ5dGUgMHgwMDBiNjU2MzY4NmYzYTIwNzQ2NTczNzQzMwogICAgPT0KICAgIGFzc2VydAogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjI2CiAgICAvLyByZXN1bHQsIF90eG4gPSBhcmM0LmFiaV9jYWxsW2FyYzQuU3RyaW5nXSgiZWNobyhzdHJpbmcpIiwgInRlc3Q0IiwgYXBwX2lkPWFwcCkKICAgIGl0eG5fYmVnaW4KICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBtZXRob2QgImVjaG8oc3RyaW5nKXN0cmluZyIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBieXRlIDB4MDAwNTc0NjU3Mzc0MzQKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpbnQgYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50IDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZSAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEFSQzQgcHJlZml4IGlzIHZhbGlkCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MjcKICAgIC8vIGFzc2VydCByZXN1bHQgPT0gImVjaG86IHRlc3Q0IgogICAgYnl0ZSAweDAwMGI2NTYzNjg2ZjNhMjA3NDY1NzM3NDM0CiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MjgKICAgIC8vIHJlc3VsdCwgX3R4biA9IGFyYzQuYWJpX2NhbGxbYXJjNC5TdHJpbmddKCJlY2hvKHN0cmluZylzdHJpbmciLCAidGVzdDUiLCBhcHBfaWQ9YXBwKQogICAgaXR4bl9iZWdpbgogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIG1ldGhvZCAiZWNobyhzdHJpbmcpc3RyaW5nIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ5dGUgMHgwMDA1NzQ2NTczNzQzNQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGludCBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnQgMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIGR1cAogICAgZXh0cmFjdCA0IDAKICAgIHN3YXAKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQVJDNCBwcmVmaXggaXMgdmFsaWQKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weToyOQogICAgLy8gYXNzZXJ0IHJlc3VsdCA9PSAiZWNobzogdGVzdDUiCiAgICBieXRlIDB4MDAwYjY1NjM2ODZmM2EyMDc0NjU3Mzc0MzUKICAgID09CiAgICBhc3NlcnQKICAgIHJldHN1YgoKCi8vIHRlc3RfY2FzZXMudHlwZWRfYWJpX2NhbGwudHlwZWRfYzJjLkdyZWV0ZXIudGVzdF9tZXRob2Rfb3ZlcmxvYWQoYXBwOiB1aW50NjQpIC0+IHZvaWQ6CnRlc3RfbWV0aG9kX292ZXJsb2FkOgogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjMxLTMyCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gZGVmIHRlc3RfbWV0aG9kX292ZXJsb2FkKHNlbGYsIGFwcDogQXBwbGljYXRpb24pIC0+IE5vbmU6CiAgICBwcm90byAxIDAKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weTozMwogICAgLy8gYXJjNC5hYmlfY2FsbFthcmM0LlN0cmluZ10oImVjaG8oc3RyaW5nKXN0cmluZyIsICJ0eXBlZCArIGlnbm9yZSIsIGFwcF9pZD1hcHApCiAgICBpdHhuX2JlZ2luCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgbWV0aG9kICJlY2hvKHN0cmluZylzdHJpbmciCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgYnl0ZSAweDAwMGU3NDc5NzA2NTY0MjAyYjIwNjk2NzZlNmY3MjY1CiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaW50IGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGUgMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBBUkM0IHByZWZpeCBpcyB2YWxpZAogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjM0CiAgICAvLyBhc3NlcnQgYXJjNC5TdHJpbmcuZnJvbV9sb2cob3AuSVR4bi5sYXN0X2xvZygpKSA9PSAiZWNobzogdHlwZWQgKyBpZ25vcmUiCiAgICBpdHhuIExhc3RMb2cKICAgIGR1cAogICAgZXh0cmFjdCA0IDAKICAgIHN3YXAKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQVJDNCBwcmVmaXggaXMgdmFsaWQKICAgIGJ5dGUgMHgwMDE0NjU2MzY4NmYzYTIwNzQ3OTcwNjU2NDIwMmIyMDY5Njc2ZTZmNzI2NQogICAgPT0KICAgIGFzc2VydAogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjM2CiAgICAvLyBhcmM0LmFiaV9jYWxsKCJlY2hvKHN0cmluZylzdHJpbmciLCAidW50eXBlZCArIGlnbm9yZSIsIGFwcF9pZD1hcHApCiAgICBpdHhuX2JlZ2luCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgbWV0aG9kICJlY2hvKHN0cmluZylzdHJpbmciCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgYnl0ZSAweDAwMTA3NTZlNzQ3OTcwNjU2NDIwMmIyMDY5Njc2ZTZmNzI2NQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGludCBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnQgMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MzcKICAgIC8vIGFzc2VydCBhcmM0LlN0cmluZy5mcm9tX2xvZyhvcC5JVHhuLmxhc3RfbG9nKCkpID09ICJlY2hvOiB1bnR5cGVkICsgaWdub3JlIgogICAgaXR4biBMYXN0TG9nCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZSAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEFSQzQgcHJlZml4IGlzIHZhbGlkCiAgICBieXRlIDB4MDAxNjY1NjM2ODZmM2EyMDc1NmU3NDc5NzA2NTY0MjAyYjIwNjk2NzZlNmY3MjY1CiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MzkKICAgIC8vIHJlc3VsdCA9IGFyYzQuYWJpX2NhbGxbYXJjNC5TdHJpbmddKCJlY2hvKHN0cmluZylzdHJpbmciLCAidHVwbGUiLCBhcHBfaWQ9YXBwKQogICAgaXR4bl9iZWdpbgogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIG1ldGhvZCAiZWNobyhzdHJpbmcpc3RyaW5nIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ5dGUgMHgwMDA1NzQ3NTcwNmM2NQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGludCBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnQgMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIGR1cAogICAgZXh0cmFjdCA0IDAKICAgIHN3YXAKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQVJDNCBwcmVmaXggaXMgdmFsaWQKICAgIGl0eG4gTGFzdExvZwogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjQwCiAgICAvLyBhc3NlcnQgcmVzdWx0WzBdID09ICJlY2hvOiB0dXBsZSIKICAgIHN3YXAKICAgIGJ5dGUgMHgwMDBiNjU2MzY4NmYzYTIwNzQ3NTcwNmM2NQogICAgPT0KICAgIGFzc2VydAogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjQxCiAgICAvLyBhc3NlcnQgYXJjNC5TdHJpbmcuZnJvbV9sb2cocmVzdWx0WzFdLmxhc3RfbG9nKSA9PSAiZWNobzogdHVwbGUiCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZSAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEFSQzQgcHJlZml4IGlzIHZhbGlkCiAgICBieXRlIDB4MDAwYjY1NjM2ODZmM2EyMDc0NzU3MDZjNjUKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weTo0MwogICAgLy8gdHhuX3Jlc3VsdCA9IGFyYzQuYWJpX2NhbGwoImVjaG8oc3RyaW5nKXN0cmluZyIsICJ1bnR5cGVkIiwgYXBwX2lkPWFwcCkKICAgIGl0eG5fYmVnaW4KICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBtZXRob2QgImVjaG8oc3RyaW5nKXN0cmluZyIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBieXRlIDB4MDAwNzc1NmU3NDc5NzA2NTY0CiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaW50IGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjQ0CiAgICAvLyBhc3NlcnQgYXJjNC5TdHJpbmcuZnJvbV9sb2codHhuX3Jlc3VsdC5sYXN0X2xvZykgPT0gImVjaG86IHVudHlwZWQiCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZSAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEFSQzQgcHJlZml4IGlzIHZhbGlkCiAgICBieXRlIDB4MDAwZDY1NjM2ODZmM2EyMDc1NmU3NDc5NzA2NTY0CiAgICA9PQogICAgYXNzZXJ0CiAgICByZXRzdWIKCgovLyB0ZXN0X2Nhc2VzLnR5cGVkX2FiaV9jYWxsLnR5cGVkX2MyYy5HcmVldGVyLnRlc3RfYXJnX2NvbnZlcnNpb24oYXBwOiB1aW50NjQpIC0+IHZvaWQ6CnRlc3RfYXJnX2NvbnZlcnNpb246CiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6NDYtNDcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBkZWYgdGVzdF9hcmdfY29udmVyc2lvbihzZWxmLCBhcHA6IEFwcGxpY2F0aW9uKSAtPiBOb25lOgogICAgcHJvdG8gMSAwCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6NDgKICAgIC8vIHR4biA9IGFyYzQuYWJpX2NhbGwoTG9nZ2VyLmxvZ19zdHJpbmcsICJjb252ZXJ0ZWQxIiwgYXBwX2lkPWFwcCkKICAgIGl0eG5fYmVnaW4KICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBtZXRob2QgImxvZyhzdHJpbmcpdm9pZCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBieXRlIDB4MDAwYTYzNmY2ZTc2NjU3Mjc0NjU2NDMxCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaW50IGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjQ5CiAgICAvLyBhc3NlcnQgdHhuLmxhc3RfbG9nID09IGIiY29udmVydGVkMSIKICAgIGJ5dGUgMHg2MzZmNmU3NjY1NzI3NDY1NjQzMQogICAgPT0KICAgIGFzc2VydAogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjUxCiAgICAvLyB0eG4gPSBhcmM0LmFiaV9jYWxsKExvZ2dlci5sb2dfdWludDY0LCAyLCBhcHBfaWQ9YXBwKQogICAgaXR4bl9iZWdpbgogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIG1ldGhvZCAibG9nKHVpbnQ2NCl2b2lkIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ5dGUgMHgwMDAwMDAwMDAwMDAwMDAyCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaW50IGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjUyCiAgICAvLyBhc3NlcnQgdHhuLmxhc3RfbG9nID09IG9wLml0b2IoMikKICAgIGludCAyCiAgICBpdG9iCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6NTQKICAgIC8vIHR4biA9IGFyYzQuYWJpX2NhbGwoTG9nZ2VyLmxvZ191aW50NTEyLCAzLCBhcHBfaWQ9YXBwKQogICAgaXR4bl9iZWdpbgogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIG1ldGhvZCAibG9nKHVpbnQ1MTIpdm9pZCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBieXRlIDB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpbnQgYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50IDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6NTUKICAgIC8vIGFzc2VydCB0eG4ubGFzdF9sb2cgPT0gKG9wLmJ6ZXJvKDU2KSArIG9wLml0b2IoMykpCiAgICBieXRlIDB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weTo1NwogICAgLy8gdHhuID0gYXJjNC5hYmlfY2FsbChMb2dnZXIubG9nX2J5dGVzLCBiIjQiLCBhcHBfaWQ9YXBwKQogICAgaXR4bl9iZWdpbgogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIG1ldGhvZCAibG9nKGJ5dGVbXSl2b2lkIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ5dGUgMHgwMDAxMzQKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpbnQgYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50IDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6NTgKICAgIC8vIGFzc2VydCB0eG4ubGFzdF9sb2cgPT0gYiI0IgogICAgYnl0ZSAweDM0CiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6NjAKICAgIC8vIHR4biA9IGFyYzQuYWJpX2NhbGwoTG9nZ2VyLmxvZ19ib29sLCBUcnVlLCBhcHBfaWQ9YXBwKQogICAgaXR4bl9iZWdpbgogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIG1ldGhvZCAibG9nKGJvb2wpdm9pZCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBieXRlIDB4ODAKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpbnQgYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50IDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6NjEKICAgIC8vIGFzc2VydCB0eG4ubGFzdF9sb2cgPT0gYiJUcnVlIgogICAgYnl0ZSAweDU0NzI3NTY1CiAgICA9PQogICAgYXNzZXJ0CiAgICByZXRzdWIKCgovLyB0ZXN0X2Nhc2VzLnR5cGVkX2FiaV9jYWxsLnR5cGVkX2MyYy5HcmVldGVyLnRlc3RfMTVwbHVzX2FyZ3MoYXBwOiB1aW50NjQpIC0+IHZvaWQ6CnRlc3RfMTVwbHVzX2FyZ3M6CiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6NjMtNjQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBkZWYgdGVzdF8xNXBsdXNfYXJncyhzZWxmLCBhcHA6IEFwcGxpY2F0aW9uKSAtPiBOb25lOgogICAgcHJvdG8gMSAwCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6NjUtODgKICAgIC8vIHJlc3VsdCwgdHhuID0gYXJjNC5hYmlfY2FsbCgKICAgIC8vICAgICBMb2dnZXIucmV0dXJuX2FyZ3NfYWZ0ZXJfMTR0aCwKICAgIC8vICAgICAxLAogICAgLy8gICAgIDIsCiAgICAvLyAgICAgMywKICAgIC8vICAgICA0LAogICAgLy8gICAgIDUsCiAgICAvLyAgICAgNiwKICAgIC8vICAgICA3LAogICAgLy8gICAgIDgsCiAgICAvLyAgICAgOSwKICAgIC8vICAgICAxMCwKICAgIC8vICAgICAxMSwKICAgIC8vICAgICAxMiwKICAgIC8vICAgICAxMywKICAgIC8vICAgICAxNCwKICAgIC8vICAgICAxNSwKICAgIC8vICAgICAxNiwKICAgIC8vICAgICAxNywKICAgIC8vICAgICAxOCwKICAgIC8vICAgICBhcmM0LlR1cGxlKChhcmM0LlVJbnQ4KDB4REUpLCBhcmM0LlVJbnQ4KDB4QUQpLCBhcmM0LlVJbnQ4KDB4QkUpLCBhcmM0LlVJbnQ4KDB4RUYpKSksCiAgICAvLyAgICAgMjAsCiAgICAvLyAgICAgYXBwX2lkPWFwcCwKICAgIC8vICkKICAgIGl0eG5fYmVnaW4KICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBtZXRob2QgInJldHVybl9hcmdzX2FmdGVyXzE0dGgodWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50OCx1aW50OCx1aW50OCx1aW50OCwodWludDgsdWludDgsdWludDgsdWludDgpLHVpbnQ4KWJ5dGVbXSIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6NjcKICAgIC8vIDEsCiAgICBieXRlIDB4MDAwMDAwMDAwMDAwMDAwMQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weTo2OAogICAgLy8gMiwKICAgIGJ5dGUgMHgwMDAwMDAwMDAwMDAwMDAyCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjY5CiAgICAvLyAzLAogICAgYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDMKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6NzAKICAgIC8vIDQsCiAgICBieXRlIDB4MDAwMDAwMDAwMDAwMDAwNAogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weTo3MQogICAgLy8gNSwKICAgIGJ5dGUgMHgwMDAwMDAwMDAwMDAwMDA1CiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjcyCiAgICAvLyA2LAogICAgYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDYKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6NzMKICAgIC8vIDcsCiAgICBieXRlIDB4MDAwMDAwMDAwMDAwMDAwNwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weTo3NAogICAgLy8gOCwKICAgIGJ5dGUgMHgwMDAwMDAwMDAwMDAwMDA4CiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5Ojc1CiAgICAvLyA5LAogICAgYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDkKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6NzYKICAgIC8vIDEwLAogICAgYnl0ZSAweDAwMDAwMDAwMDAwMDAwMGEKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6NzcKICAgIC8vIDExLAogICAgYnl0ZSAweDAwMDAwMDAwMDAwMDAwMGIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6NzgKICAgIC8vIDEyLAogICAgYnl0ZSAweDAwMDAwMDAwMDAwMDAwMGMKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6NzkKICAgIC8vIDEzLAogICAgYnl0ZSAweDAwMDAwMDAwMDAwMDAwMGQKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6ODAKICAgIC8vIDE0LAogICAgYnl0ZSAweDAwMDAwMDAwMDAwMDAwMGUKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6ODEtODYKICAgIC8vIDE1LAogICAgLy8gMTYsCiAgICAvLyAxNywKICAgIC8vIDE4LAogICAgLy8gYXJjNC5UdXBsZSgoYXJjNC5VSW50OCgweERFKSwgYXJjNC5VSW50OCgweEFEKSwgYXJjNC5VSW50OCgweEJFKSwgYXJjNC5VSW50OCgweEVGKSkpLAogICAgLy8gMjAsCiAgICBieXRlIDB4MGYxMDExMTJkZWFkYmVlZjE0CiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjY1LTg4CiAgICAvLyByZXN1bHQsIHR4biA9IGFyYzQuYWJpX2NhbGwoCiAgICAvLyAgICAgTG9nZ2VyLnJldHVybl9hcmdzX2FmdGVyXzE0dGgsCiAgICAvLyAgICAgMSwKICAgIC8vICAgICAyLAogICAgLy8gICAgIDMsCiAgICAvLyAgICAgNCwKICAgIC8vICAgICA1LAogICAgLy8gICAgIDYsCiAgICAvLyAgICAgNywKICAgIC8vICAgICA4LAogICAgLy8gICAgIDksCiAgICAvLyAgICAgMTAsCiAgICAvLyAgICAgMTEsCiAgICAvLyAgICAgMTIsCiAgICAvLyAgICAgMTMsCiAgICAvLyAgICAgMTQsCiAgICAvLyAgICAgMTUsCiAgICAvLyAgICAgMTYsCiAgICAvLyAgICAgMTcsCiAgICAvLyAgICAgMTgsCiAgICAvLyAgICAgYXJjNC5UdXBsZSgoYXJjNC5VSW50OCgweERFKSwgYXJjNC5VSW50OCgweEFEKSwgYXJjNC5VSW50OCgweEJFKSwgYXJjNC5VSW50OCgweEVGKSkpLAogICAgLy8gICAgIDIwLAogICAgLy8gICAgIGFwcF9pZD1hcHAsCiAgICAvLyApCiAgICBpbnQgYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50IDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZSAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEFSQzQgcHJlZml4IGlzIHZhbGlkCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6ODkKICAgIC8vIGFzc2VydCByZXN1bHQubmF0aXZlID09IEJ5dGVzLmZyb21faGV4KCIwRjEwMTExMkRFQURCRUVGMTQiKQogICAgZXh0cmFjdCAyIDAKICAgIGJ5dGUgMHgwZjEwMTExMmRlYWRiZWVmMTQKICAgID09CiAgICBhc3NlcnQKICAgIHJldHN1YgoKCi8vIHRlc3RfY2FzZXMudHlwZWRfYWJpX2NhbGwudHlwZWRfYzJjLkdyZWV0ZXIudGVzdF92b2lkKGFwcDogdWludDY0KSAtPiB2b2lkOgp0ZXN0X3ZvaWQ6CiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6OTEtOTIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBkZWYgdGVzdF92b2lkKHNlbGYsIGFwcDogQXBwbGljYXRpb24pIC0+IE5vbmU6CiAgICBwcm90byAxIDAKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weTo5MwogICAgLy8gdHhuID0gYXJjNC5hYmlfY2FsbChMT0dfTUVUSE9EX05BTUUgKyAiKHN0cmluZyl2b2lkIiwgIldvcmxkMSIsIGFwcF9pZD1hcHApCiAgICBpdHhuX2JlZ2luCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgbWV0aG9kICJsb2coc3RyaW5nKXZvaWQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgYnl0ZSAweDAwMDY1NzZmNzI2YzY0MzEKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpbnQgYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50IDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6OTQKICAgIC8vIGFzc2VydCB0eG4ubGFzdF9sb2cgPT0gYiJXb3JsZDEiCiAgICBieXRlIDB4NTc2ZjcyNmM2NDMxCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6OTYKICAgIC8vIHR4biA9IGFyYzQuYWJpX2NhbGwoTE9HX01FVEhPRF9OQU1FICsgIihzdHJpbmcpIiwgIldvcmxkMiIsIGFwcF9pZD1hcHApCiAgICBpdHhuX2JlZ2luCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgbWV0aG9kICJsb2coc3RyaW5nKXZvaWQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgYnl0ZSAweDAwMDY1NzZmNzI2YzY0MzIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpbnQgYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50IDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6OTcKICAgIC8vIGFzc2VydCB0eG4ubGFzdF9sb2cgPT0gYiJXb3JsZDIiCiAgICBieXRlIDB4NTc2ZjcyNmM2NDMyCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6OTkKICAgIC8vIHR4biA9IGFyYzQuYWJpX2NhbGwoTE9HX01FVEhPRF9OQU1FLCBhcmM0LlN0cmluZygiV29ybGQzIiksIGFwcF9pZD1hcHApCiAgICBpdHhuX2JlZ2luCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgbWV0aG9kICJsb2coc3RyaW5nKXZvaWQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgYnl0ZSAweDAwMDY1NzZmNzI2YzY0MzMKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpbnQgYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50IDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MTAwCiAgICAvLyBhc3NlcnQgdHhuLmxhc3RfbG9nID09IGIiV29ybGQzIgogICAgYnl0ZSAweDU3NmY3MjZjNjQzMwogICAgPT0KICAgIGFzc2VydAogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjEwMgogICAgLy8gdHhuID0gYXJjNC5hYmlfY2FsbChMb2dnZXIubG9nX3N0cmluZywgIldvcmxkNCIsIGFwcF9pZD1hcHApCiAgICBpdHhuX2JlZ2luCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgbWV0aG9kICJsb2coc3RyaW5nKXZvaWQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgYnl0ZSAweDAwMDY1NzZmNzI2YzY0MzQKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpbnQgYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50IDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MTAzCiAgICAvLyBhc3NlcnQgdHhuLmxhc3RfbG9nID09IGIiV29ybGQ0IgogICAgYnl0ZSAweDU3NmY3MjZjNjQzNAogICAgPT0KICAgIGFzc2VydAogICAgcmV0c3ViCgoKLy8gdGVzdF9jYXNlcy50eXBlZF9hYmlfY2FsbC50eXBlZF9jMmMuR3JlZXRlci50ZXN0X3JlZl90eXBlcyhhcHA6IHVpbnQ2NCwgYXNzZXQ6IHVpbnQ2NCkgLT4gdm9pZDoKdGVzdF9yZWZfdHlwZXM6CiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MTA1LTEwNgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIGRlZiB0ZXN0X3JlZl90eXBlcyhzZWxmLCBhcHA6IEFwcGxpY2F0aW9uLCBhc3NldDogQXNzZXQpIC0+IE5vbmU6CiAgICBwcm90byAyIDAKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weToxMDctMTEzCiAgICAvLyB0eG4gPSBhcmM0LmFiaV9jYWxsKAogICAgLy8gICAgIExvZ2dlci5sb2dfYXNzZXRfYWNjb3VudF9hcHAsCiAgICAvLyAgICAgYXNzZXQsCiAgICAvLyAgICAgR2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIC8vICAgICBhcHAsCiAgICAvLyAgICAgYXBwX2lkPWFwcCwKICAgIC8vICkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weToxMTAKICAgIC8vIEdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgZnJhbWVfZGlnIC0yCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBBc3NldHMKICAgIGZyYW1lX2RpZyAtMgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbnMKICAgIGl0eG5fZmllbGQgQWNjb3VudHMKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weToxMDctMTEzCiAgICAvLyB0eG4gPSBhcmM0LmFiaV9jYWxsKAogICAgLy8gICAgIExvZ2dlci5sb2dfYXNzZXRfYWNjb3VudF9hcHAsCiAgICAvLyAgICAgYXNzZXQsCiAgICAvLyAgICAgR2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIC8vICAgICBhcHAsCiAgICAvLyAgICAgYXBwX2lkPWFwcCwKICAgIC8vICkKICAgIG1ldGhvZCAibG9nKGFzc2V0LGFjY291bnQsYXBwbGljYXRpb24pdm9pZCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MTA5CiAgICAvLyBhc3NldCwKICAgIGJ5dGUgMHgwMAogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weToxMTAKICAgIC8vIEdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICBieXRlIDB4MDEKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MTExCiAgICAvLyBhcHAsCiAgICBieXRlIDB4MDEKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MTA3LTExMwogICAgLy8gdHhuID0gYXJjNC5hYmlfY2FsbCgKICAgIC8vICAgICBMb2dnZXIubG9nX2Fzc2V0X2FjY291bnRfYXBwLAogICAgLy8gICAgIGFzc2V0LAogICAgLy8gICAgIEdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICAvLyAgICAgYXBwLAogICAgLy8gICAgIGFwcF9pZD1hcHAsCiAgICAvLyApCiAgICBpbnQgYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50IDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MTE2CiAgICAvLyA9PSBhc3NldC5uYW1lICsgR2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcy5ieXRlcyArIGFwcC5hZGRyZXNzLmJ5dGVzCiAgICBmcmFtZV9kaWcgLTEKICAgIGFzc2V0X3BhcmFtc19nZXQgQXNzZXROYW1lCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTIKICAgIGFwcF9wYXJhbXNfZ2V0IEFwcEFkZHJlc3MKICAgIGFzc2VydCAvLyBhcHBsaWNhdGlvbiBleGlzdHMKICAgIGNvbmNhdAogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjExNS0xMTYKICAgIC8vIHR4bi5sYXN0X2xvZwogICAgLy8gPT0gYXNzZXQubmFtZSArIEdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MuYnl0ZXMgKyBhcHAuYWRkcmVzcy5ieXRlcwogICAgPT0KICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weToxMTQtMTE3CiAgICAvLyBhc3NlcnQgKAogICAgLy8gICAgIHR4bi5sYXN0X2xvZwogICAgLy8gICAgID09IGFzc2V0Lm5hbWUgKyBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLmJ5dGVzICsgYXBwLmFkZHJlc3MuYnl0ZXMKICAgIC8vICkKICAgIGFzc2VydAogICAgcmV0c3ViCgoKLy8gdGVzdF9jYXNlcy50eXBlZF9hYmlfY2FsbC50eXBlZF9jMmMuR3JlZXRlci50ZXN0X25hdGl2ZV9zdHJpbmcoYXBwOiB1aW50NjQpIC0+IHZvaWQ6CnRlc3RfbmF0aXZlX3N0cmluZzoKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weToxMTktMTIwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gZGVmIHRlc3RfbmF0aXZlX3N0cmluZyhzZWxmLCBhcHA6IEFwcGxpY2F0aW9uKSAtPiBOb25lOgogICAgcHJvdG8gMSAwCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MTIxCiAgICAvLyByZXN1bHQxLCBfdHhuID0gYXJjNC5hYmlfY2FsbChMb2dnZXIuZWNob19uYXRpdmVfc3RyaW5nLCAicyIsIGFwcF9pZD1hcHApCiAgICBpdHhuX2JlZ2luCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgbWV0aG9kICJlY2hvX25hdGl2ZV9zdHJpbmcoc3RyaW5nKXN0cmluZyIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBieXRlIDB4MDAwMTczCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaW50IGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgc3dhcAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGUgMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBBUkM0IHByZWZpeCBpcyB2YWxpZAogICAgZXh0cmFjdCAyIDAKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weToxMjIKICAgIC8vIGFzc2VydCByZXN1bHQxID09ICJlY2hvOiBzIgogICAgZHVwCiAgICBieXRlICJlY2hvOiBzIgogICAgPT0KICAgIGFzc2VydAogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjEyNAogICAgLy8gcmVzdWx0MiwgX3R4biA9IGFyYzQuYWJpX2NhbGwoTG9nZ2VyLmVjaG9fbmF0aXZlX3N0cmluZywgU3RyaW5nKCJzIiksIGFwcF9pZD1hcHApCiAgICBpdHhuX2JlZ2luCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgbWV0aG9kICJlY2hvX25hdGl2ZV9zdHJpbmcoc3RyaW5nKXN0cmluZyIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBieXRlIDB4MDAwMTczCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaW50IGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgc3dhcAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGUgMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBBUkM0IHByZWZpeCBpcyB2YWxpZAogICAgZXh0cmFjdCAyIDAKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weToxMjUKICAgIC8vIGFzc2VydCByZXN1bHQyID09IHJlc3VsdDEKICAgIGRpZyAxCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MTI3CiAgICAvLyByZXN1bHQzLCBfdHhuID0gYXJjNC5hYmlfY2FsbChMb2dnZXIuZWNob19uYXRpdmVfc3RyaW5nLCBhcmM0LlN0cmluZygicyIpLCBhcHBfaWQ9YXBwKQogICAgaXR4bl9iZWdpbgogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIG1ldGhvZCAiZWNob19uYXRpdmVfc3RyaW5nKHN0cmluZylzdHJpbmciCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgYnl0ZSAweDAwMDE3MwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGludCBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnQgMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIGR1cAogICAgZXh0cmFjdCA0IDAKICAgIHN3YXAKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQVJDNCBwcmVmaXggaXMgdmFsaWQKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MTI4CiAgICAvLyBhc3NlcnQgcmVzdWx0MyA9PSByZXN1bHQxCiAgICA9PQogICAgYXNzZXJ0CiAgICByZXRzdWIKCgovLyB0ZXN0X2Nhc2VzLnR5cGVkX2FiaV9jYWxsLnR5cGVkX2MyYy5HcmVldGVyLnRlc3RfbmF0aXZlX2J5dGVzKGFwcDogdWludDY0KSAtPiB2b2lkOgp0ZXN0X25hdGl2ZV9ieXRlczoKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weToxMzAtMTMxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gZGVmIHRlc3RfbmF0aXZlX2J5dGVzKHNlbGYsIGFwcDogQXBwbGljYXRpb24pIC0+IE5vbmU6CiAgICBwcm90byAxIDAKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weToxMzIKICAgIC8vIHJlc3VsdDEsIF90eG4gPSBhcmM0LmFiaV9jYWxsKExvZ2dlci5lY2hvX25hdGl2ZV9ieXRlcywgYiJiIiwgYXBwX2lkPWFwcCkKICAgIGl0eG5fYmVnaW4KICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBtZXRob2QgImVjaG9fbmF0aXZlX2J5dGVzKGJ5dGVbXSlieXRlW10iCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgYnl0ZSAweDAwMDE2MgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGludCBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnQgMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIGR1cAogICAgZXh0cmFjdCA0IDAKICAgIHN3YXAKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQVJDNCBwcmVmaXggaXMgdmFsaWQKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MTMzCiAgICAvLyBhc3NlcnQgcmVzdWx0MSA9PSBiImVjaG86IGIiCiAgICBkdXAKICAgIGJ5dGUgMHg2NTYzNjg2ZjNhMjA2MgogICAgPT0KICAgIGFzc2VydAogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjEzNQogICAgLy8gcmVzdWx0MiwgX3R4biA9IGFyYzQuYWJpX2NhbGwoTG9nZ2VyLmVjaG9fbmF0aXZlX2J5dGVzLCBCeXRlcyhiImIiKSwgYXBwX2lkPWFwcCkKICAgIGl0eG5fYmVnaW4KICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBtZXRob2QgImVjaG9fbmF0aXZlX2J5dGVzKGJ5dGVbXSlieXRlW10iCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgYnl0ZSAweDAwMDE2MgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGludCBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnQgMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIGR1cAogICAgZXh0cmFjdCA0IDAKICAgIHN3YXAKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQVJDNCBwcmVmaXggaXMgdmFsaWQKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MTM2CiAgICAvLyBhc3NlcnQgcmVzdWx0MiA9PSByZXN1bHQxCiAgICBkaWcgMQogICAgPT0KICAgIGFzc2VydAogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjEzOC0xNDAKICAgIC8vIHJlc3VsdDMsIF90eG4gPSBhcmM0LmFiaV9jYWxsKAogICAgLy8gICAgIExvZ2dlci5lY2hvX25hdGl2ZV9ieXRlcywgYXJjNC5EeW5hbWljQnl0ZXMoYiJiIiksIGFwcF9pZD1hcHAKICAgIC8vICkKICAgIGl0eG5fYmVnaW4KICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBtZXRob2QgImVjaG9fbmF0aXZlX2J5dGVzKGJ5dGVbXSlieXRlW10iCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjEzOQogICAgLy8gTG9nZ2VyLmVjaG9fbmF0aXZlX2J5dGVzLCBhcmM0LkR5bmFtaWNCeXRlcyhiImIiKSwgYXBwX2lkPWFwcAogICAgYnl0ZSAweDAwMDE2MgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weToxMzgtMTQwCiAgICAvLyByZXN1bHQzLCBfdHhuID0gYXJjNC5hYmlfY2FsbCgKICAgIC8vICAgICBMb2dnZXIuZWNob19uYXRpdmVfYnl0ZXMsIGFyYzQuRHluYW1pY0J5dGVzKGIiYiIpLCBhcHBfaWQ9YXBwCiAgICAvLyApCiAgICBpbnQgYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50IDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZSAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEFSQzQgcHJlZml4IGlzIHZhbGlkCiAgICBleHRyYWN0IDIgMAogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjE0MQogICAgLy8gYXNzZXJ0IHJlc3VsdDMgPT0gcmVzdWx0MQogICAgPT0KICAgIGFzc2VydAogICAgcmV0c3ViCgoKLy8gdGVzdF9jYXNlcy50eXBlZF9hYmlfY2FsbC50eXBlZF9jMmMuR3JlZXRlci50ZXN0X25hdGl2ZV91aW50NjQoYXBwOiB1aW50NjQpIC0+IHZvaWQ6CnRlc3RfbmF0aXZlX3VpbnQ2NDoKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weToxNDMtMTQ0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gZGVmIHRlc3RfbmF0aXZlX3VpbnQ2NChzZWxmLCBhcHA6IEFwcGxpY2F0aW9uKSAtPiBOb25lOgogICAgcHJvdG8gMSAwCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MTQ1CiAgICAvLyByZXN1bHQxLCBfdHhuID0gYXJjNC5hYmlfY2FsbChMb2dnZXIuZWNob19uYXRpdmVfdWludDY0LCAxLCBhcHBfaWQ9YXBwKQogICAgaXR4bl9iZWdpbgogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIG1ldGhvZCAiZWNob19uYXRpdmVfdWludDY0KHVpbnQ2NCl1aW50NjQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDEKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpbnQgYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50IDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZSAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEFSQzQgcHJlZml4IGlzIHZhbGlkCiAgICBidG9pCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MTQ2CiAgICAvLyBhc3NlcnQgcmVzdWx0MSA9PSAyCiAgICBkdXAKICAgIGludCAyCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MTQ4CiAgICAvLyByZXN1bHQyLCBfdHhuID0gYXJjNC5hYmlfY2FsbChMb2dnZXIuZWNob19uYXRpdmVfdWludDY0LCBVSW50NjQoMSksIGFwcF9pZD1hcHApCiAgICBpdHhuX2JlZ2luCiAgICBpbnQgMQogICAgaXRvYgogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIG1ldGhvZCAiZWNob19uYXRpdmVfdWludDY0KHVpbnQ2NCl1aW50NjQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGludCBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnQgMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIGR1cAogICAgZXh0cmFjdCA0IDAKICAgIHN3YXAKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQVJDNCBwcmVmaXggaXMgdmFsaWQKICAgIGJ0b2kKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weToxNDkKICAgIC8vIGFzc2VydCByZXN1bHQyID09IHJlc3VsdDEKICAgIGRpZyAxCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MTUxCiAgICAvLyByZXN1bHQzLCBfdHhuID0gYXJjNC5hYmlfY2FsbChMb2dnZXIuZWNob19uYXRpdmVfdWludDY0LCBhcmM0LlVJbnQ2NCgxKSwgYXBwX2lkPWFwcCkKICAgIGl0eG5fYmVnaW4KICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBtZXRob2QgImVjaG9fbmF0aXZlX3VpbnQ2NCh1aW50NjQpdWludDY0IgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ5dGUgMHgwMDAwMDAwMDAwMDAwMDAxCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaW50IGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgc3dhcAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGUgMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBBUkM0IHByZWZpeCBpcyB2YWxpZAogICAgYnRvaQogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjE1MgogICAgLy8gYXNzZXJ0IHJlc3VsdDMgPT0gcmVzdWx0MQogICAgPT0KICAgIGFzc2VydAogICAgcmV0c3ViCgoKLy8gdGVzdF9jYXNlcy50eXBlZF9hYmlfY2FsbC50eXBlZF9jMmMuR3JlZXRlci50ZXN0X25hdGl2ZV9iaWd1aW50KGFwcDogdWludDY0KSAtPiB2b2lkOgp0ZXN0X25hdGl2ZV9iaWd1aW50OgogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjE1NC0xNTUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBkZWYgdGVzdF9uYXRpdmVfYmlndWludChzZWxmLCBhcHA6IEFwcGxpY2F0aW9uKSAtPiBOb25lOgogICAgcHJvdG8gMSAwCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MTU2CiAgICAvLyByZXN1bHQxLCBfdHhuID0gYXJjNC5hYmlfY2FsbChMb2dnZXIuZWNob19uYXRpdmVfYmlndWludCwgMiwgYXBwX2lkPWFwcCkKICAgIGl0eG5fYmVnaW4KICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBtZXRob2QgImVjaG9fbmF0aXZlX2JpZ3VpbnQodWludDUxMil1aW50NTEyIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ5dGUgMHgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGludCBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnQgMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIGR1cAogICAgZXh0cmFjdCA0IDAKICAgIHN3YXAKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQVJDNCBwcmVmaXggaXMgdmFsaWQKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weToxNTcKICAgIC8vIGFzc2VydCByZXN1bHQxID09IDMKICAgIGR1cAogICAgYnl0ZSAweDAzCiAgICBiPT0KICAgIGFzc2VydAogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjE1OQogICAgLy8gcmVzdWx0MiwgX3R4biA9IGFyYzQuYWJpX2NhbGwoTG9nZ2VyLmVjaG9fbmF0aXZlX2JpZ3VpbnQsIEJpZ1VJbnQoMiksIGFwcF9pZD1hcHApCiAgICBpdHhuX2JlZ2luCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgbWV0aG9kICJlY2hvX25hdGl2ZV9iaWd1aW50KHVpbnQ1MTIpdWludDUxMiIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBieXRlIDB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpbnQgYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50IDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZSAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEFSQzQgcHJlZml4IGlzIHZhbGlkCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MTYwCiAgICAvLyBhc3NlcnQgcmVzdWx0MiA9PSByZXN1bHQxCiAgICBkaWcgMQogICAgYj09CiAgICBhc3NlcnQKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weToxNjIKICAgIC8vIHJlc3VsdDMsIF90eG4gPSBhcmM0LmFiaV9jYWxsKExvZ2dlci5lY2hvX25hdGl2ZV9iaWd1aW50LCBhcmM0LlVJbnQ1MTIoMiksIGFwcF9pZD1hcHApCiAgICBpdHhuX2JlZ2luCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgbWV0aG9kICJlY2hvX25hdGl2ZV9iaWd1aW50KHVpbnQ1MTIpdWludDUxMiIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBieXRlIDB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpbnQgYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50IDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZSAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEFSQzQgcHJlZml4IGlzIHZhbGlkCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MTYzCiAgICAvLyBhc3NlcnQgcmVzdWx0MyA9PSByZXN1bHQxCiAgICBiPT0KICAgIGFzc2VydAogICAgcmV0c3ViCgoKLy8gdGVzdF9jYXNlcy50eXBlZF9hYmlfY2FsbC50eXBlZF9jMmMuR3JlZXRlci50ZXN0X25hdGl2ZV90dXBsZShhcHA6IHVpbnQ2NCkgLT4gdm9pZDoKdGVzdF9uYXRpdmVfdHVwbGU6CiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MTY1LTE2NgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIGRlZiB0ZXN0X25hdGl2ZV90dXBsZShzZWxmLCBhcHA6IEFwcGxpY2F0aW9uKSAtPiBOb25lOgogICAgcHJvdG8gMSAwCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MTY5LTE3NwogICAgLy8gIyBOT1RFOiB0aGUgZm9sbG93aW5nIHVzZXMgbWV0aG9kIHNlbGVjdG9ycyB0byB3b3JrIGFyb3VuZCBoYXZpbmcgbmVzdGVkIHR1cGxlcwogICAgLy8gdHhuID0gYXJjNC5hYmlfY2FsbCgKICAgIC8vICAgICAiZWNob19uYXRpdmVfdHVwbGUoc3RyaW5nLGJ5dGVbXSx1aW50NjQsdWludDUxMikoc3RyaW5nLGJ5dGVbXSx1aW50NjQsdWludDUxMikiLAogICAgLy8gICAgICJzMSIsCiAgICAvLyAgICAgYiJiMSIsCiAgICAvLyAgICAgMSwKICAgIC8vICAgICAyLAogICAgLy8gICAgIGFwcF9pZD1hcHAsCiAgICAvLyApCiAgICBpdHhuX2JlZ2luCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgbWV0aG9kICJlY2hvX25hdGl2ZV90dXBsZShzdHJpbmcsYnl0ZVtdLHVpbnQ2NCx1aW50NTEyKShzdHJpbmcsYnl0ZVtdLHVpbnQ2NCx1aW50NTEyKSIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MTcyCiAgICAvLyAiczEiLAogICAgYnl0ZSAweDAwMDI3MzMxCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjE3MwogICAgLy8gYiJiMSIsCiAgICBieXRlIDB4MDAwMjYyMzEKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MTc0CiAgICAvLyAxLAogICAgYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDEKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MTc1CiAgICAvLyAyLAogICAgYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjE2OS0xNzcKICAgIC8vICMgTk9URTogdGhlIGZvbGxvd2luZyB1c2VzIG1ldGhvZCBzZWxlY3RvcnMgdG8gd29yayBhcm91bmQgaGF2aW5nIG5lc3RlZCB0dXBsZXMKICAgIC8vIHR4biA9IGFyYzQuYWJpX2NhbGwoCiAgICAvLyAgICAgImVjaG9fbmF0aXZlX3R1cGxlKHN0cmluZyxieXRlW10sdWludDY0LHVpbnQ1MTIpKHN0cmluZyxieXRlW10sdWludDY0LHVpbnQ1MTIpIiwKICAgIC8vICAgICAiczEiLAogICAgLy8gICAgIGIiYjEiLAogICAgLy8gICAgIDEsCiAgICAvLyAgICAgMiwKICAgIC8vICAgICBhcHBfaWQ9YXBwLAogICAgLy8gKQogICAgaW50IGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjE3OC0xODAKICAgIC8vIHJlc3VsdDEgPSBhcmM0LlR1cGxlW2FyYzQuU3RyaW5nLCBhcmM0LkR5bmFtaWNCeXRlcywgYXJjNC5VSW50NjQsIGFyYzQuVUludDUxMl0uZnJvbV9sb2coCiAgICAvLyAgICAgdHhuLmxhc3RfbG9nCiAgICAvLyApCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZSAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEFSQzQgcHJlZml4IGlzIHZhbGlkCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MTgxCiAgICAvLyBzLCBiLCB1LCBidSA9IHJlc3VsdDEubmF0aXZlCiAgICBkdXAKICAgIGludCAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgc3dhcAogICAgZHVwCiAgICBpbnQgMgogICAgZXh0cmFjdF91aW50MTYKICAgIGRpZyAxCiAgICB1bmNvdmVyIDMKICAgIGRpZyAyCiAgICBzdWJzdHJpbmczCiAgICBjb3ZlciAyCiAgICBkaWcgMQogICAgbGVuCiAgICBkaWcgMgogICAgY292ZXIgMgogICAgc3Vic3RyaW5nMwogICAgY292ZXIgMgogICAgZHVwCiAgICBleHRyYWN0IDQgOCAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGNvdmVyIDMKICAgIGR1cAogICAgZXh0cmFjdCAxMiA2NCAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGNvdmVyIDMKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weToxODIKICAgIC8vIGFzc2VydCBzLm5hdGl2ZSA9PSAiZWNobzogczEiCiAgICBzd2FwCiAgICBleHRyYWN0IDIgMAogICAgYnl0ZSAiZWNobzogczEiCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MTgzCiAgICAvLyBhc3NlcnQgYi5uYXRpdmUgPT0gYiJlY2hvOiBiMSIKICAgIHN3YXAKICAgIGV4dHJhY3QgMiAwCiAgICBieXRlIDB4NjU2MzY4NmYzYTIwNjIzMQogICAgPT0KICAgIGFzc2VydAogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjE4NAogICAgLy8gYXNzZXJ0IHUubmF0aXZlID09IDIKICAgIHVuY292ZXIgMgogICAgYnRvaQogICAgaW50IDIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weToxODUKICAgIC8vIGFzc2VydCBidS5uYXRpdmUgPT0gMwogICAgc3dhcAogICAgYnl0ZSAweDAzCiAgICBiPT0KICAgIGFzc2VydAogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjE4Ny0xOTUKICAgIC8vICMgdGVzdCBhZ2FpbiB1c2luZyBuYXRpdmUgdHlwZXMgaW4gYXJndW1lbnRzCiAgICAvLyB0eG4gPSBhcmM0LmFiaV9jYWxsKAogICAgLy8gICAgICJlY2hvX25hdGl2ZV90dXBsZShzdHJpbmcsYnl0ZVtdLHVpbnQ2NCx1aW50NTEyKShzdHJpbmcsYnl0ZVtdLHVpbnQ2NCx1aW50NTEyKSIsCiAgICAvLyAgICAgU3RyaW5nKCJzMSIpLAogICAgLy8gICAgIEJ5dGVzKGIiYjEiKSwKICAgIC8vICAgICBVSW50NjQoMSksCiAgICAvLyAgICAgQmlnVUludCgyKSwKICAgIC8vICAgICBhcHBfaWQ9YXBwLAogICAgLy8gKQogICAgaXR4bl9iZWdpbgogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjE5MgogICAgLy8gVUludDY0KDEpLAogICAgaW50IDEKICAgIGl0b2IKICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MTg3LTE5NQogICAgLy8gIyB0ZXN0IGFnYWluIHVzaW5nIG5hdGl2ZSB0eXBlcyBpbiBhcmd1bWVudHMKICAgIC8vIHR4biA9IGFyYzQuYWJpX2NhbGwoCiAgICAvLyAgICAgImVjaG9fbmF0aXZlX3R1cGxlKHN0cmluZyxieXRlW10sdWludDY0LHVpbnQ1MTIpKHN0cmluZyxieXRlW10sdWludDY0LHVpbnQ1MTIpIiwKICAgIC8vICAgICBTdHJpbmcoInMxIiksCiAgICAvLyAgICAgQnl0ZXMoYiJiMSIpLAogICAgLy8gICAgIFVJbnQ2NCgxKSwKICAgIC8vICAgICBCaWdVSW50KDIpLAogICAgLy8gICAgIGFwcF9pZD1hcHAsCiAgICAvLyApCiAgICBtZXRob2QgImVjaG9fbmF0aXZlX3R1cGxlKHN0cmluZyxieXRlW10sdWludDY0LHVpbnQ1MTIpKHN0cmluZyxieXRlW10sdWludDY0LHVpbnQ1MTIpIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weToxOTAKICAgIC8vIFN0cmluZygiczEiKSwKICAgIGJ5dGUgMHgwMDAyNzMzMQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weToxOTEKICAgIC8vIEJ5dGVzKGIiYjEiKSwKICAgIGJ5dGUgMHgwMDAyNjIzMQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MTkzCiAgICAvLyBCaWdVSW50KDIpLAogICAgYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjE4Ny0xOTUKICAgIC8vICMgdGVzdCBhZ2FpbiB1c2luZyBuYXRpdmUgdHlwZXMgaW4gYXJndW1lbnRzCiAgICAvLyB0eG4gPSBhcmM0LmFiaV9jYWxsKAogICAgLy8gICAgICJlY2hvX25hdGl2ZV90dXBsZShzdHJpbmcsYnl0ZVtdLHVpbnQ2NCx1aW50NTEyKShzdHJpbmcsYnl0ZVtdLHVpbnQ2NCx1aW50NTEyKSIsCiAgICAvLyAgICAgU3RyaW5nKCJzMSIpLAogICAgLy8gICAgIEJ5dGVzKGIiYjEiKSwKICAgIC8vICAgICBVSW50NjQoMSksCiAgICAvLyAgICAgQmlnVUludCgyKSwKICAgIC8vICAgICBhcHBfaWQ9YXBwLAogICAgLy8gKQogICAgaW50IGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjE5Ni0xOTgKICAgIC8vIHJlc3VsdDIgPSBhcmM0LlR1cGxlW2FyYzQuU3RyaW5nLCBhcmM0LkR5bmFtaWNCeXRlcywgYXJjNC5VSW50NjQsIGFyYzQuVUludDUxMl0uZnJvbV9sb2coCiAgICAvLyAgICAgdHhuLmxhc3RfbG9nCiAgICAvLyApCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZSAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEFSQzQgcHJlZml4IGlzIHZhbGlkCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MTk5CiAgICAvLyBhc3NlcnQgcmVzdWx0MSA9PSByZXN1bHQyCiAgICBkaWcgMQogICAgPT0KICAgIGFzc2VydAogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjIwMS0yMDkKICAgIC8vICMgdGVzdCBhZ2FpbiB1c2luZyBhcmM0IHR5cGVzIGluIGFyZ3VtZW50cwogICAgLy8gdHhuID0gYXJjNC5hYmlfY2FsbCgKICAgIC8vICAgICAiZWNob19uYXRpdmVfdHVwbGUoc3RyaW5nLGJ5dGVbXSx1aW50NjQsdWludDUxMikoc3RyaW5nLGJ5dGVbXSx1aW50NjQsdWludDUxMikiLAogICAgLy8gICAgIGFyYzQuU3RyaW5nKCJzMSIpLAogICAgLy8gICAgIGFyYzQuRHluYW1pY0J5dGVzKGIiYjEiKSwKICAgIC8vICAgICBhcmM0LlVJbnQ2NCgxKSwKICAgIC8vICAgICBhcmM0LlVJbnQ1MTIoMiksCiAgICAvLyAgICAgYXBwX2lkPWFwcCwKICAgIC8vICkKICAgIGl0eG5fYmVnaW4KICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBtZXRob2QgImVjaG9fbmF0aXZlX3R1cGxlKHN0cmluZyxieXRlW10sdWludDY0LHVpbnQ1MTIpKHN0cmluZyxieXRlW10sdWludDY0LHVpbnQ1MTIpIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weToyMDQKICAgIC8vIGFyYzQuU3RyaW5nKCJzMSIpLAogICAgYnl0ZSAweDAwMDI3MzMxCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjIwNQogICAgLy8gYXJjNC5EeW5hbWljQnl0ZXMoYiJiMSIpLAogICAgYnl0ZSAweDAwMDI2MjMxCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjIwNgogICAgLy8gYXJjNC5VSW50NjQoMSksCiAgICBieXRlIDB4MDAwMDAwMDAwMDAwMDAwMQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weToyMDcKICAgIC8vIGFyYzQuVUludDUxMigyKSwKICAgIGJ5dGUgMHgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weToyMDEtMjA5CiAgICAvLyAjIHRlc3QgYWdhaW4gdXNpbmcgYXJjNCB0eXBlcyBpbiBhcmd1bWVudHMKICAgIC8vIHR4biA9IGFyYzQuYWJpX2NhbGwoCiAgICAvLyAgICAgImVjaG9fbmF0aXZlX3R1cGxlKHN0cmluZyxieXRlW10sdWludDY0LHVpbnQ1MTIpKHN0cmluZyxieXRlW10sdWludDY0LHVpbnQ1MTIpIiwKICAgIC8vICAgICBhcmM0LlN0cmluZygiczEiKSwKICAgIC8vICAgICBhcmM0LkR5bmFtaWNCeXRlcyhiImIxIiksCiAgICAvLyAgICAgYXJjNC5VSW50NjQoMSksCiAgICAvLyAgICAgYXJjNC5VSW50NTEyKDIpLAogICAgLy8gICAgIGFwcF9pZD1hcHAsCiAgICAvLyApCiAgICBpbnQgYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50IDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MjEwLTIxMgogICAgLy8gcmVzdWx0MyA9IGFyYzQuVHVwbGVbYXJjNC5TdHJpbmcsIGFyYzQuRHluYW1pY0J5dGVzLCBhcmM0LlVJbnQ2NCwgYXJjNC5VSW50NTEyXS5mcm9tX2xvZygKICAgIC8vICAgICB0eG4ubGFzdF9sb2cKICAgIC8vICkKICAgIGR1cAogICAgZXh0cmFjdCA0IDAKICAgIHN3YXAKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQVJDNCBwcmVmaXggaXMgdmFsaWQKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weToyMTMKICAgIC8vIGFzc2VydCByZXN1bHQxID09IHJlc3VsdDMKICAgID09CiAgICBhc3NlcnQKICAgIHJldHN1Ygo=", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0X2Nhc2VzLnR5cGVkX2FiaV9jYWxsLnR5cGVkX2MyYy5HcmVldGVyLmFwcHJvdmFsX3Byb2dyYW06CiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MTcKICAgIC8vIGNsYXNzIEdyZWV0ZXIoQVJDNENvbnRyYWN0KToKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX2JhcmVfcm91dGluZ0AxNgogICAgbWV0aG9kICJ0ZXN0X21ldGhvZF9zZWxlY3Rvcl9raW5kcyhhcHBsaWNhdGlvbil2b2lkIgogICAgbWV0aG9kICJ0ZXN0X21ldGhvZF9vdmVybG9hZChhcHBsaWNhdGlvbil2b2lkIgogICAgbWV0aG9kICJ0ZXN0X2FyZ19jb252ZXJzaW9uKGFwcGxpY2F0aW9uKXZvaWQiCiAgICBtZXRob2QgInRlc3RfMTVwbHVzX2FyZ3MoYXBwbGljYXRpb24pdm9pZCIKICAgIG1ldGhvZCAidGVzdF92b2lkKGFwcGxpY2F0aW9uKXZvaWQiCiAgICBtZXRob2QgInRlc3RfcmVmX3R5cGVzKGFwcGxpY2F0aW9uLGFzc2V0KXZvaWQiCiAgICBtZXRob2QgInRlc3RfbmF0aXZlX3N0cmluZyhhcHBsaWNhdGlvbil2b2lkIgogICAgbWV0aG9kICJ0ZXN0X25hdGl2ZV9ieXRlcyhhcHBsaWNhdGlvbil2b2lkIgogICAgbWV0aG9kICJ0ZXN0X25hdGl2ZV91aW50NjQoYXBwbGljYXRpb24pdm9pZCIKICAgIG1ldGhvZCAidGVzdF9uYXRpdmVfYmlndWludChhcHBsaWNhdGlvbil2b2lkIgogICAgbWV0aG9kICJ0ZXN0X25hdGl2ZV90dXBsZShhcHBsaWNhdGlvbil2b2lkIgogICAgbWV0aG9kICJ0ZXN0X25vX2FyZ3MoYXBwbGljYXRpb24pdm9pZCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1haW5fdGVzdF9tZXRob2Rfc2VsZWN0b3Jfa2luZHNfcm91dGVAMiBtYWluX3Rlc3RfbWV0aG9kX292ZXJsb2FkX3JvdXRlQDMgbWFpbl90ZXN0X2FyZ19jb252ZXJzaW9uX3JvdXRlQDQgbWFpbl90ZXN0XzE1cGx1c19hcmdzX3JvdXRlQDUgbWFpbl90ZXN0X3ZvaWRfcm91dGVANiBtYWluX3Rlc3RfcmVmX3R5cGVzX3JvdXRlQDcgbWFpbl90ZXN0X25hdGl2ZV9zdHJpbmdfcm91dGVAOCBtYWluX3Rlc3RfbmF0aXZlX2J5dGVzX3JvdXRlQDkgbWFpbl90ZXN0X25hdGl2ZV91aW50NjRfcm91dGVAMTAgbWFpbl90ZXN0X25hdGl2ZV9iaWd1aW50X3JvdXRlQDExIG1haW5fdGVzdF9uYXRpdmVfdHVwbGVfcm91dGVAMTIgbWFpbl90ZXN0X25vX2FyZ3Nfcm91dGVAMTMKICAgIGVyciAvLyByZWplY3QgdHJhbnNhY3Rpb24KCm1haW5fdGVzdF9tZXRob2Rfc2VsZWN0b3Jfa2luZHNfcm91dGVAMjoKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weToxOAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBpcyBub3QgY3JlYXRpbmcKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weToxNwogICAgLy8gY2xhc3MgR3JlZXRlcihBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXBwbGljYXRpb25zCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MTgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHRlc3RfbWV0aG9kX3NlbGVjdG9yX2tpbmRzCiAgICBpbnQgMQogICAgcmV0dXJuCgptYWluX3Rlc3RfbWV0aG9kX292ZXJsb2FkX3JvdXRlQDM6CiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MzEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gaXMgbm90IGNyZWF0aW5nCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MTcKICAgIC8vIGNsYXNzIEdyZWV0ZXIoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFwcGxpY2F0aW9ucwogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjMxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB0ZXN0X21ldGhvZF9vdmVybG9hZAogICAgaW50IDEKICAgIHJldHVybgoKbWFpbl90ZXN0X2FyZ19jb252ZXJzaW9uX3JvdXRlQDQ6CiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6NDYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gaXMgbm90IGNyZWF0aW5nCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MTcKICAgIC8vIGNsYXNzIEdyZWV0ZXIoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFwcGxpY2F0aW9ucwogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjQ2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB0ZXN0X2FyZ19jb252ZXJzaW9uCiAgICBpbnQgMQogICAgcmV0dXJuCgptYWluX3Rlc3RfMTVwbHVzX2FyZ3Nfcm91dGVANToKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weTo2MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBpcyBub3QgY3JlYXRpbmcKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weToxNwogICAgLy8gY2xhc3MgR3JlZXRlcihBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXBwbGljYXRpb25zCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6NjMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHRlc3RfMTVwbHVzX2FyZ3MKICAgIGludCAxCiAgICByZXR1cm4KCm1haW5fdGVzdF92b2lkX3JvdXRlQDY6CiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6OTEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gaXMgbm90IGNyZWF0aW5nCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MTcKICAgIC8vIGNsYXNzIEdyZWV0ZXIoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFwcGxpY2F0aW9ucwogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjkxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB0ZXN0X3ZvaWQKICAgIGludCAxCiAgICByZXR1cm4KCm1haW5fdGVzdF9yZWZfdHlwZXNfcm91dGVANzoKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weToxMDUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gaXMgbm90IGNyZWF0aW5nCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MTcKICAgIC8vIGNsYXNzIEdyZWV0ZXIoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFwcGxpY2F0aW9ucwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MTA1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB0ZXN0X3JlZl90eXBlcwogICAgaW50IDEKICAgIHJldHVybgoKbWFpbl90ZXN0X25hdGl2ZV9zdHJpbmdfcm91dGVAODoKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weToxMTkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gaXMgbm90IGNyZWF0aW5nCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MTcKICAgIC8vIGNsYXNzIEdyZWV0ZXIoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFwcGxpY2F0aW9ucwogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjExOQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdGVzdF9uYXRpdmVfc3RyaW5nCiAgICBpbnQgMQogICAgcmV0dXJuCgptYWluX3Rlc3RfbmF0aXZlX2J5dGVzX3JvdXRlQDk6CiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MTMwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjE3CiAgICAvLyBjbGFzcyBHcmVldGVyKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBcHBsaWNhdGlvbnMKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weToxMzAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHRlc3RfbmF0aXZlX2J5dGVzCiAgICBpbnQgMQogICAgcmV0dXJuCgptYWluX3Rlc3RfbmF0aXZlX3VpbnQ2NF9yb3V0ZUAxMDoKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weToxNDMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gaXMgbm90IGNyZWF0aW5nCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MTcKICAgIC8vIGNsYXNzIEdyZWV0ZXIoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFwcGxpY2F0aW9ucwogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjE0MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdGVzdF9uYXRpdmVfdWludDY0CiAgICBpbnQgMQogICAgcmV0dXJuCgptYWluX3Rlc3RfbmF0aXZlX2JpZ3VpbnRfcm91dGVAMTE6CiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MTU0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjE3CiAgICAvLyBjbGFzcyBHcmVldGVyKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBcHBsaWNhdGlvbnMKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weToxNTQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHRlc3RfbmF0aXZlX2JpZ3VpbnQKICAgIGludCAxCiAgICByZXR1cm4KCm1haW5fdGVzdF9uYXRpdmVfdHVwbGVfcm91dGVAMTI6CiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MTY1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjE3CiAgICAvLyBjbGFzcyBHcmVldGVyKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBcHBsaWNhdGlvbnMKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weToxNjUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHRlc3RfbmF0aXZlX3R1cGxlCiAgICBpbnQgMQogICAgcmV0dXJuCgptYWluX3Rlc3Rfbm9fYXJnc19yb3V0ZUAxMzoKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weToyMTUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gaXMgbm90IGNyZWF0aW5nCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MTcKICAgIC8vIGNsYXNzIEdyZWV0ZXIoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFwcGxpY2F0aW9ucwogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjIxNQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdGVzdF9ub19hcmdzCiAgICBpbnQgMQogICAgcmV0dXJuCgptYWluX2JhcmVfcm91dGluZ0AxNjoKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weToxNwogICAgLy8gY2xhc3MgR3JlZXRlcihBUkM0Q29udHJhY3QpOgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIHJlamVjdCB0cmFuc2FjdGlvbgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgIGFzc2VydCAvLyBpcyBjcmVhdGluZwogICAgaW50IDEKICAgIHJldHVybgoKCi8vIHRlc3RfY2FzZXMudHlwZWRfYWJpX2NhbGwudHlwZWRfYzJjLkdyZWV0ZXIudGVzdF9tZXRob2Rfc2VsZWN0b3Jfa2luZHMoYXBwOiB1aW50NjQpIC0+IHZvaWQ6CnRlc3RfbWV0aG9kX3NlbGVjdG9yX2tpbmRzOgogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjE4LTE5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gZGVmIHRlc3RfbWV0aG9kX3NlbGVjdG9yX2tpbmRzKHNlbGYsIGFwcDogQXBwbGljYXRpb24pIC0+IE5vbmU6CiAgICBwcm90byAxIDAKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weToyMAogICAgLy8gcmVzdWx0LCBfdHhuID0gYXJjNC5hYmlfY2FsbChMb2dnZXIuZWNobywgYXJjNC5TdHJpbmcoInRlc3QxIiksIGFwcF9pZD1hcHApCiAgICBpdHhuX2JlZ2luCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgbWV0aG9kICJlY2hvKHN0cmluZylzdHJpbmciCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgYnl0ZSAweDAwMDU3NDY1NzM3NDMxCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaW50IGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgc3dhcAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGUgMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBBUkM0IHByZWZpeCBpcyB2YWxpZAogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjIxCiAgICAvLyBhc3NlcnQgcmVzdWx0ID09ICJlY2hvOiB0ZXN0MSIKICAgIGJ5dGUgMHgwMDBiNjU2MzY4NmYzYTIwNzQ2NTczNzQzMQogICAgPT0KICAgIGFzc2VydAogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjIyCiAgICAvLyByZXN1bHQsIF90eG4gPSBhcmM0LmFiaV9jYWxsKExvZ2dlckNsaWVudC5lY2hvLCAidGVzdDIiLCBhcHBfaWQ9YXBwKQogICAgaXR4bl9iZWdpbgogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIG1ldGhvZCAiZWNobyhzdHJpbmcpc3RyaW5nIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ5dGUgMHgwMDA1NzQ2NTczNzQzMgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGludCBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnQgMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIGR1cAogICAgZXh0cmFjdCA0IDAKICAgIHN3YXAKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQVJDNCBwcmVmaXggaXMgdmFsaWQKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weToyMwogICAgLy8gYXNzZXJ0IHJlc3VsdCA9PSAiZWNobzogdGVzdDIiCiAgICBieXRlIDB4MDAwYjY1NjM2ODZmM2EyMDc0NjU3Mzc0MzIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weToyNAogICAgLy8gcmVzdWx0LCBfdHhuID0gYXJjNC5hYmlfY2FsbFthcmM0LlN0cmluZ10oImVjaG8iLCAidGVzdDMiLCBhcHBfaWQ9YXBwKQogICAgaXR4bl9iZWdpbgogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIG1ldGhvZCAiZWNobyhzdHJpbmcpc3RyaW5nIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ5dGUgMHgwMDA1NzQ2NTczNzQzMwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGludCBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnQgMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIGR1cAogICAgZXh0cmFjdCA0IDAKICAgIHN3YXAKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQVJDNCBwcmVmaXggaXMgdmFsaWQKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weToyNQogICAgLy8gYXNzZXJ0IHJlc3VsdCA9PSAiZWNobzogdGVzdDMiCiAgICBieXRlIDB4MDAwYjY1NjM2ODZmM2EyMDc0NjU3Mzc0MzMKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weToyNgogICAgLy8gcmVzdWx0LCBfdHhuID0gYXJjNC5hYmlfY2FsbFthcmM0LlN0cmluZ10oImVjaG8oc3RyaW5nKSIsICJ0ZXN0NCIsIGFwcF9pZD1hcHApCiAgICBpdHhuX2JlZ2luCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgbWV0aG9kICJlY2hvKHN0cmluZylzdHJpbmciCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgYnl0ZSAweDAwMDU3NDY1NzM3NDM0CiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaW50IGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgc3dhcAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGUgMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBBUkM0IHByZWZpeCBpcyB2YWxpZAogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjI3CiAgICAvLyBhc3NlcnQgcmVzdWx0ID09ICJlY2hvOiB0ZXN0NCIKICAgIGJ5dGUgMHgwMDBiNjU2MzY4NmYzYTIwNzQ2NTczNzQzNAogICAgPT0KICAgIGFzc2VydAogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjI4CiAgICAvLyByZXN1bHQsIF90eG4gPSBhcmM0LmFiaV9jYWxsW2FyYzQuU3RyaW5nXSgiZWNobyhzdHJpbmcpc3RyaW5nIiwgInRlc3Q1IiwgYXBwX2lkPWFwcCkKICAgIGl0eG5fYmVnaW4KICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBtZXRob2QgImVjaG8oc3RyaW5nKXN0cmluZyIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBieXRlIDB4MDAwNTc0NjU3Mzc0MzUKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpbnQgYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50IDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZSAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEFSQzQgcHJlZml4IGlzIHZhbGlkCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MjkKICAgIC8vIGFzc2VydCByZXN1bHQgPT0gImVjaG86IHRlc3Q1IgogICAgYnl0ZSAweDAwMGI2NTYzNjg2ZjNhMjA3NDY1NzM3NDM1CiAgICA9PQogICAgYXNzZXJ0CiAgICByZXRzdWIKCgovLyB0ZXN0X2Nhc2VzLnR5cGVkX2FiaV9jYWxsLnR5cGVkX2MyYy5HcmVldGVyLnRlc3RfbWV0aG9kX292ZXJsb2FkKGFwcDogdWludDY0KSAtPiB2b2lkOgp0ZXN0X21ldGhvZF9vdmVybG9hZDoKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weTozMS0zMgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIGRlZiB0ZXN0X21ldGhvZF9vdmVybG9hZChzZWxmLCBhcHA6IEFwcGxpY2F0aW9uKSAtPiBOb25lOgogICAgcHJvdG8gMSAwCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MzMKICAgIC8vIGFyYzQuYWJpX2NhbGxbYXJjNC5TdHJpbmddKCJlY2hvKHN0cmluZylzdHJpbmciLCAidHlwZWQgKyBpZ25vcmUiLCBhcHBfaWQ9YXBwKQogICAgaXR4bl9iZWdpbgogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIG1ldGhvZCAiZWNobyhzdHJpbmcpc3RyaW5nIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ5dGUgMHgwMDBlNzQ3OTcwNjU2NDIwMmIyMDY5Njc2ZTZmNzI2NQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGludCBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnQgMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQVJDNCBwcmVmaXggaXMgdmFsaWQKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weTozNAogICAgLy8gYXNzZXJ0IGFyYzQuU3RyaW5nLmZyb21fbG9nKG9wLklUeG4ubGFzdF9sb2coKSkgPT0gImVjaG86IHR5cGVkICsgaWdub3JlIgogICAgaXR4biBMYXN0TG9nCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZSAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEFSQzQgcHJlZml4IGlzIHZhbGlkCiAgICBieXRlIDB4MDAxNDY1NjM2ODZmM2EyMDc0Nzk3MDY1NjQyMDJiMjA2OTY3NmU2ZjcyNjUKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weTozNgogICAgLy8gYXJjNC5hYmlfY2FsbCgiZWNobyhzdHJpbmcpc3RyaW5nIiwgInVudHlwZWQgKyBpZ25vcmUiLCBhcHBfaWQ9YXBwKQogICAgaXR4bl9iZWdpbgogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIG1ldGhvZCAiZWNobyhzdHJpbmcpc3RyaW5nIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ5dGUgMHgwMDEwNzU2ZTc0Nzk3MDY1NjQyMDJiMjA2OTY3NmU2ZjcyNjUKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpbnQgYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50IDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjM3CiAgICAvLyBhc3NlcnQgYXJjNC5TdHJpbmcuZnJvbV9sb2cob3AuSVR4bi5sYXN0X2xvZygpKSA9PSAiZWNobzogdW50eXBlZCArIGlnbm9yZSIKICAgIGl0eG4gTGFzdExvZwogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgc3dhcAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGUgMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBBUkM0IHByZWZpeCBpcyB2YWxpZAogICAgYnl0ZSAweDAwMTY2NTYzNjg2ZjNhMjA3NTZlNzQ3OTcwNjU2NDIwMmIyMDY5Njc2ZTZmNzI2NQogICAgPT0KICAgIGFzc2VydAogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjM5CiAgICAvLyByZXN1bHQgPSBhcmM0LmFiaV9jYWxsW2FyYzQuU3RyaW5nXSgiZWNobyhzdHJpbmcpc3RyaW5nIiwgInR1cGxlIiwgYXBwX2lkPWFwcCkKICAgIGl0eG5fYmVnaW4KICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBtZXRob2QgImVjaG8oc3RyaW5nKXN0cmluZyIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBieXRlIDB4MDAwNTc0NzU3MDZjNjUKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpbnQgYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50IDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZSAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEFSQzQgcHJlZml4IGlzIHZhbGlkCiAgICBpdHhuIExhc3RMb2cKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weTo0MAogICAgLy8gYXNzZXJ0IHJlc3VsdFswXSA9PSAiZWNobzogdHVwbGUiCiAgICBzd2FwCiAgICBieXRlIDB4MDAwYjY1NjM2ODZmM2EyMDc0NzU3MDZjNjUKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weTo0MQogICAgLy8gYXNzZXJ0IGFyYzQuU3RyaW5nLmZyb21fbG9nKHJlc3VsdFsxXS5sYXN0X2xvZykgPT0gImVjaG86IHR1cGxlIgogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgc3dhcAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGUgMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBBUkM0IHByZWZpeCBpcyB2YWxpZAogICAgYnl0ZSAweDAwMGI2NTYzNjg2ZjNhMjA3NDc1NzA2YzY1CiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6NDMKICAgIC8vIHR4bl9yZXN1bHQgPSBhcmM0LmFiaV9jYWxsKCJlY2hvKHN0cmluZylzdHJpbmciLCAidW50eXBlZCIsIGFwcF9pZD1hcHApCiAgICBpdHhuX2JlZ2luCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgbWV0aG9kICJlY2hvKHN0cmluZylzdHJpbmciCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgYnl0ZSAweDAwMDc3NTZlNzQ3OTcwNjU2NAogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGludCBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnQgMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weTo0NAogICAgLy8gYXNzZXJ0IGFyYzQuU3RyaW5nLmZyb21fbG9nKHR4bl9yZXN1bHQubGFzdF9sb2cpID09ICJlY2hvOiB1bnR5cGVkIgogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgc3dhcAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGUgMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBBUkM0IHByZWZpeCBpcyB2YWxpZAogICAgYnl0ZSAweDAwMGQ2NTYzNjg2ZjNhMjA3NTZlNzQ3OTcwNjU2NAogICAgPT0KICAgIGFzc2VydAogICAgcmV0c3ViCgoKLy8gdGVzdF9jYXNlcy50eXBlZF9hYmlfY2FsbC50eXBlZF9jMmMuR3JlZXRlci50ZXN0X2FyZ19jb252ZXJzaW9uKGFwcDogdWludDY0KSAtPiB2b2lkOgp0ZXN0X2FyZ19jb252ZXJzaW9uOgogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjQ2LTQ3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gZGVmIHRlc3RfYXJnX2NvbnZlcnNpb24oc2VsZiwgYXBwOiBBcHBsaWNhdGlvbikgLT4gTm9uZToKICAgIHByb3RvIDEgMAogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjQ4CiAgICAvLyB0eG4gPSBhcmM0LmFiaV9jYWxsKExvZ2dlci5sb2dfc3RyaW5nLCAiY29udmVydGVkMSIsIGFwcF9pZD1hcHApCiAgICBpdHhuX2JlZ2luCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgbWV0aG9kICJsb2coc3RyaW5nKXZvaWQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgYnl0ZSAweDAwMGE2MzZmNmU3NjY1NzI3NDY1NjQzMQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGludCBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnQgMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weTo0OQogICAgLy8gYXNzZXJ0IHR4bi5sYXN0X2xvZyA9PSBiImNvbnZlcnRlZDEiCiAgICBieXRlIDB4NjM2ZjZlNzY2NTcyNzQ2NTY0MzEKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weTo1MQogICAgLy8gdHhuID0gYXJjNC5hYmlfY2FsbChMb2dnZXIubG9nX3VpbnQ2NCwgMiwgYXBwX2lkPWFwcCkKICAgIGl0eG5fYmVnaW4KICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBtZXRob2QgImxvZyh1aW50NjQpdm9pZCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBieXRlIDB4MDAwMDAwMDAwMDAwMDAwMgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGludCBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnQgMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weTo1MgogICAgLy8gYXNzZXJ0IHR4bi5sYXN0X2xvZyA9PSBvcC5pdG9iKDIpCiAgICBpbnQgMgogICAgaXRvYgogICAgPT0KICAgIGFzc2VydAogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjU0CiAgICAvLyB0eG4gPSBhcmM0LmFiaV9jYWxsKExvZ2dlci5sb2dfdWludDUxMiwgMywgYXBwX2lkPWFwcCkKICAgIGl0eG5fYmVnaW4KICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBtZXRob2QgImxvZyh1aW50NTEyKXZvaWQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaW50IGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjU1CiAgICAvLyBhc3NlcnQgdHhuLmxhc3RfbG9nID09IChvcC5iemVybyg1NikgKyBvcC5pdG9iKDMpKQogICAgYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6NTcKICAgIC8vIHR4biA9IGFyYzQuYWJpX2NhbGwoTG9nZ2VyLmxvZ19ieXRlcywgYiI0IiwgYXBwX2lkPWFwcCkKICAgIGl0eG5fYmVnaW4KICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBtZXRob2QgImxvZyhieXRlW10pdm9pZCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBieXRlIDB4MDAwMTM0CiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaW50IGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjU4CiAgICAvLyBhc3NlcnQgdHhuLmxhc3RfbG9nID09IGIiNCIKICAgIGJ5dGUgMHgzNAogICAgPT0KICAgIGFzc2VydAogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjYwCiAgICAvLyB0eG4gPSBhcmM0LmFiaV9jYWxsKExvZ2dlci5sb2dfYm9vbCwgVHJ1ZSwgYXBwX2lkPWFwcCkKICAgIGl0eG5fYmVnaW4KICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBtZXRob2QgImxvZyhib29sKXZvaWQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgYnl0ZSAweDgwCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaW50IGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjYxCiAgICAvLyBhc3NlcnQgdHhuLmxhc3RfbG9nID09IGIiVHJ1ZSIKICAgIGJ5dGUgMHg1NDcyNzU2NQogICAgPT0KICAgIGFzc2VydAogICAgcmV0c3ViCgoKLy8gdGVzdF9jYXNlcy50eXBlZF9hYmlfY2FsbC50eXBlZF9jMmMuR3JlZXRlci50ZXN0XzE1cGx1c19hcmdzKGFwcDogdWludDY0KSAtPiB2b2lkOgp0ZXN0XzE1cGx1c19hcmdzOgogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjYzLTY0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gZGVmIHRlc3RfMTVwbHVzX2FyZ3Moc2VsZiwgYXBwOiBBcHBsaWNhdGlvbikgLT4gTm9uZToKICAgIHByb3RvIDEgMAogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjY1LTg4CiAgICAvLyByZXN1bHQsIHR4biA9IGFyYzQuYWJpX2NhbGwoCiAgICAvLyAgICAgTG9nZ2VyLnJldHVybl9hcmdzX2FmdGVyXzE0dGgsCiAgICAvLyAgICAgMSwKICAgIC8vICAgICAyLAogICAgLy8gICAgIDMsCiAgICAvLyAgICAgNCwKICAgIC8vICAgICA1LAogICAgLy8gICAgIDYsCiAgICAvLyAgICAgNywKICAgIC8vICAgICA4LAogICAgLy8gICAgIDksCiAgICAvLyAgICAgMTAsCiAgICAvLyAgICAgMTEsCiAgICAvLyAgICAgMTIsCiAgICAvLyAgICAgMTMsCiAgICAvLyAgICAgMTQsCiAgICAvLyAgICAgMTUsCiAgICAvLyAgICAgMTYsCiAgICAvLyAgICAgMTcsCiAgICAvLyAgICAgMTgsCiAgICAvLyAgICAgYXJjNC5UdXBsZSgoYXJjNC5VSW50OCgweERFKSwgYXJjNC5VSW50OCgweEFEKSwgYXJjNC5VSW50OCgweEJFKSwgYXJjNC5VSW50OCgweEVGKSkpLAogICAgLy8gICAgIDIwLAogICAgLy8gICAgIGFwcF9pZD1hcHAsCiAgICAvLyApCiAgICBpdHhuX2JlZ2luCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgbWV0aG9kICJyZXR1cm5fYXJnc19hZnRlcl8xNHRoKHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDgsdWludDgsdWludDgsdWludDgsKHVpbnQ4LHVpbnQ4LHVpbnQ4LHVpbnQ4KSx1aW50OClieXRlW10iCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjY3CiAgICAvLyAxLAogICAgYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDEKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6NjgKICAgIC8vIDIsCiAgICBieXRlIDB4MDAwMDAwMDAwMDAwMDAwMgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weTo2OQogICAgLy8gMywKICAgIGJ5dGUgMHgwMDAwMDAwMDAwMDAwMDAzCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjcwCiAgICAvLyA0LAogICAgYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDQKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6NzEKICAgIC8vIDUsCiAgICBieXRlIDB4MDAwMDAwMDAwMDAwMDAwNQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weTo3MgogICAgLy8gNiwKICAgIGJ5dGUgMHgwMDAwMDAwMDAwMDAwMDA2CiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjczCiAgICAvLyA3LAogICAgYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDcKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6NzQKICAgIC8vIDgsCiAgICBieXRlIDB4MDAwMDAwMDAwMDAwMDAwOAogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weTo3NQogICAgLy8gOSwKICAgIGJ5dGUgMHgwMDAwMDAwMDAwMDAwMDA5CiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5Ojc2CiAgICAvLyAxMCwKICAgIGJ5dGUgMHgwMDAwMDAwMDAwMDAwMDBhCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5Ojc3CiAgICAvLyAxMSwKICAgIGJ5dGUgMHgwMDAwMDAwMDAwMDAwMDBiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5Ojc4CiAgICAvLyAxMiwKICAgIGJ5dGUgMHgwMDAwMDAwMDAwMDAwMDBjCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5Ojc5CiAgICAvLyAxMywKICAgIGJ5dGUgMHgwMDAwMDAwMDAwMDAwMDBkCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjgwCiAgICAvLyAxNCwKICAgIGJ5dGUgMHgwMDAwMDAwMDAwMDAwMDBlCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjgxLTg2CiAgICAvLyAxNSwKICAgIC8vIDE2LAogICAgLy8gMTcsCiAgICAvLyAxOCwKICAgIC8vIGFyYzQuVHVwbGUoKGFyYzQuVUludDgoMHhERSksIGFyYzQuVUludDgoMHhBRCksIGFyYzQuVUludDgoMHhCRSksIGFyYzQuVUludDgoMHhFRikpKSwKICAgIC8vIDIwLAogICAgYnl0ZSAweDBmMTAxMTEyZGVhZGJlZWYxNAogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weTo2NS04OAogICAgLy8gcmVzdWx0LCB0eG4gPSBhcmM0LmFiaV9jYWxsKAogICAgLy8gICAgIExvZ2dlci5yZXR1cm5fYXJnc19hZnRlcl8xNHRoLAogICAgLy8gICAgIDEsCiAgICAvLyAgICAgMiwKICAgIC8vICAgICAzLAogICAgLy8gICAgIDQsCiAgICAvLyAgICAgNSwKICAgIC8vICAgICA2LAogICAgLy8gICAgIDcsCiAgICAvLyAgICAgOCwKICAgIC8vICAgICA5LAogICAgLy8gICAgIDEwLAogICAgLy8gICAgIDExLAogICAgLy8gICAgIDEyLAogICAgLy8gICAgIDEzLAogICAgLy8gICAgIDE0LAogICAgLy8gICAgIDE1LAogICAgLy8gICAgIDE2LAogICAgLy8gICAgIDE3LAogICAgLy8gICAgIDE4LAogICAgLy8gICAgIGFyYzQuVHVwbGUoKGFyYzQuVUludDgoMHhERSksIGFyYzQuVUludDgoMHhBRCksIGFyYzQuVUludDgoMHhCRSksIGFyYzQuVUludDgoMHhFRikpKSwKICAgIC8vICAgICAyMCwKICAgIC8vICAgICBhcHBfaWQ9YXBwLAogICAgLy8gKQogICAgaW50IGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgc3dhcAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGUgMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBBUkM0IHByZWZpeCBpcyB2YWxpZAogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5Ojg5CiAgICAvLyBhc3NlcnQgcmVzdWx0Lm5hdGl2ZSA9PSBCeXRlcy5mcm9tX2hleCgiMEYxMDExMTJERUFEQkVFRjE0IikKICAgIGV4dHJhY3QgMiAwCiAgICBieXRlIDB4MGYxMDExMTJkZWFkYmVlZjE0CiAgICA9PQogICAgYXNzZXJ0CiAgICByZXRzdWIKCgovLyB0ZXN0X2Nhc2VzLnR5cGVkX2FiaV9jYWxsLnR5cGVkX2MyYy5HcmVldGVyLnRlc3Rfdm9pZChhcHA6IHVpbnQ2NCkgLT4gdm9pZDoKdGVzdF92b2lkOgogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjkxLTkyCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gZGVmIHRlc3Rfdm9pZChzZWxmLCBhcHA6IEFwcGxpY2F0aW9uKSAtPiBOb25lOgogICAgcHJvdG8gMSAwCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6OTMKICAgIC8vIHR4biA9IGFyYzQuYWJpX2NhbGwoTE9HX01FVEhPRF9OQU1FICsgIihzdHJpbmcpdm9pZCIsICJXb3JsZDEiLCBhcHBfaWQ9YXBwKQogICAgaXR4bl9iZWdpbgogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIG1ldGhvZCAibG9nKHN0cmluZyl2b2lkIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ5dGUgMHgwMDA2NTc2ZjcyNmM2NDMxCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaW50IGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5Ojk0CiAgICAvLyBhc3NlcnQgdHhuLmxhc3RfbG9nID09IGIiV29ybGQxIgogICAgYnl0ZSAweDU3NmY3MjZjNjQzMQogICAgPT0KICAgIGFzc2VydAogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5Ojk2CiAgICAvLyB0eG4gPSBhcmM0LmFiaV9jYWxsKExPR19NRVRIT0RfTkFNRSArICIoc3RyaW5nKSIsICJXb3JsZDIiLCBhcHBfaWQ9YXBwKQogICAgaXR4bl9iZWdpbgogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIG1ldGhvZCAibG9nKHN0cmluZyl2b2lkIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ5dGUgMHgwMDA2NTc2ZjcyNmM2NDMyCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaW50IGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5Ojk3CiAgICAvLyBhc3NlcnQgdHhuLmxhc3RfbG9nID09IGIiV29ybGQyIgogICAgYnl0ZSAweDU3NmY3MjZjNjQzMgogICAgPT0KICAgIGFzc2VydAogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5Ojk5CiAgICAvLyB0eG4gPSBhcmM0LmFiaV9jYWxsKExPR19NRVRIT0RfTkFNRSwgYXJjNC5TdHJpbmcoIldvcmxkMyIpLCBhcHBfaWQ9YXBwKQogICAgaXR4bl9iZWdpbgogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIG1ldGhvZCAibG9nKHN0cmluZyl2b2lkIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ5dGUgMHgwMDA2NTc2ZjcyNmM2NDMzCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaW50IGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjEwMAogICAgLy8gYXNzZXJ0IHR4bi5sYXN0X2xvZyA9PSBiIldvcmxkMyIKICAgIGJ5dGUgMHg1NzZmNzI2YzY0MzMKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weToxMDIKICAgIC8vIHR4biA9IGFyYzQuYWJpX2NhbGwoTG9nZ2VyLmxvZ19zdHJpbmcsICJXb3JsZDQiLCBhcHBfaWQ9YXBwKQogICAgaXR4bl9iZWdpbgogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIG1ldGhvZCAibG9nKHN0cmluZyl2b2lkIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ5dGUgMHgwMDA2NTc2ZjcyNmM2NDM0CiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaW50IGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjEwMwogICAgLy8gYXNzZXJ0IHR4bi5sYXN0X2xvZyA9PSBiIldvcmxkNCIKICAgIGJ5dGUgMHg1NzZmNzI2YzY0MzQKICAgID09CiAgICBhc3NlcnQKICAgIHJldHN1YgoKCi8vIHRlc3RfY2FzZXMudHlwZWRfYWJpX2NhbGwudHlwZWRfYzJjLkdyZWV0ZXIudGVzdF9yZWZfdHlwZXMoYXBwOiB1aW50NjQsIGFzc2V0OiB1aW50NjQpIC0+IHZvaWQ6CnRlc3RfcmVmX3R5cGVzOgogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjEwNS0xMDYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBkZWYgdGVzdF9yZWZfdHlwZXMoc2VsZiwgYXBwOiBBcHBsaWNhdGlvbiwgYXNzZXQ6IEFzc2V0KSAtPiBOb25lOgogICAgcHJvdG8gMiAwCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MTA3LTExMwogICAgLy8gdHhuID0gYXJjNC5hYmlfY2FsbCgKICAgIC8vICAgICBMb2dnZXIubG9nX2Fzc2V0X2FjY291bnRfYXBwLAogICAgLy8gICAgIGFzc2V0LAogICAgLy8gICAgIEdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICAvLyAgICAgYXBwLAogICAgLy8gICAgIGFwcF9pZD1hcHAsCiAgICAvLyApCiAgICBpdHhuX2JlZ2luCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MTEwCiAgICAvLyBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLAogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIGZyYW1lX2RpZyAtMgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgQXNzZXRzCiAgICBmcmFtZV9kaWcgLTIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25zCiAgICBpdHhuX2ZpZWxkIEFjY291bnRzCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MTA3LTExMwogICAgLy8gdHhuID0gYXJjNC5hYmlfY2FsbCgKICAgIC8vICAgICBMb2dnZXIubG9nX2Fzc2V0X2FjY291bnRfYXBwLAogICAgLy8gICAgIGFzc2V0LAogICAgLy8gICAgIEdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICAvLyAgICAgYXBwLAogICAgLy8gICAgIGFwcF9pZD1hcHAsCiAgICAvLyApCiAgICBtZXRob2QgImxvZyhhc3NldCxhY2NvdW50LGFwcGxpY2F0aW9uKXZvaWQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjEwOQogICAgLy8gYXNzZXQsCiAgICBieXRlIDB4MDAKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MTEwCiAgICAvLyBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLAogICAgYnl0ZSAweDAxCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjExMQogICAgLy8gYXBwLAogICAgYnl0ZSAweDAxCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjEwNy0xMTMKICAgIC8vIHR4biA9IGFyYzQuYWJpX2NhbGwoCiAgICAvLyAgICAgTG9nZ2VyLmxvZ19hc3NldF9hY2NvdW50X2FwcCwKICAgIC8vICAgICBhc3NldCwKICAgIC8vICAgICBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLAogICAgLy8gICAgIGFwcCwKICAgIC8vICAgICBhcHBfaWQ9YXBwLAogICAgLy8gKQogICAgaW50IGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjExNgogICAgLy8gPT0gYXNzZXQubmFtZSArIEdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MuYnl0ZXMgKyBhcHAuYWRkcmVzcy5ieXRlcwogICAgZnJhbWVfZGlnIC0xCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0TmFtZQogICAgYXNzZXJ0IC8vIGFzc2V0IGV4aXN0cwogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC0yCiAgICBhcHBfcGFyYW1zX2dldCBBcHBBZGRyZXNzCiAgICBhc3NlcnQgLy8gYXBwbGljYXRpb24gZXhpc3RzCiAgICBjb25jYXQKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weToxMTUtMTE2CiAgICAvLyB0eG4ubGFzdF9sb2cKICAgIC8vID09IGFzc2V0Lm5hbWUgKyBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLmJ5dGVzICsgYXBwLmFkZHJlc3MuYnl0ZXMKICAgID09CiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MTE0LTExNwogICAgLy8gYXNzZXJ0ICgKICAgIC8vICAgICB0eG4ubGFzdF9sb2cKICAgIC8vICAgICA9PSBhc3NldC5uYW1lICsgR2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcy5ieXRlcyArIGFwcC5hZGRyZXNzLmJ5dGVzCiAgICAvLyApCiAgICBhc3NlcnQKICAgIHJldHN1YgoKCi8vIHRlc3RfY2FzZXMudHlwZWRfYWJpX2NhbGwudHlwZWRfYzJjLkdyZWV0ZXIudGVzdF9uYXRpdmVfc3RyaW5nKGFwcDogdWludDY0KSAtPiB2b2lkOgp0ZXN0X25hdGl2ZV9zdHJpbmc6CiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MTE5LTEyMAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIGRlZiB0ZXN0X25hdGl2ZV9zdHJpbmcoc2VsZiwgYXBwOiBBcHBsaWNhdGlvbikgLT4gTm9uZToKICAgIHByb3RvIDEgMAogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjEyMQogICAgLy8gcmVzdWx0MSwgX3R4biA9IGFyYzQuYWJpX2NhbGwoTG9nZ2VyLmVjaG9fbmF0aXZlX3N0cmluZywgInMiLCBhcHBfaWQ9YXBwKQogICAgaXR4bl9iZWdpbgogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIG1ldGhvZCAiZWNob19uYXRpdmVfc3RyaW5nKHN0cmluZylzdHJpbmciCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgYnl0ZSAweDAwMDE3MwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGludCBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnQgMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIGR1cAogICAgZXh0cmFjdCA0IDAKICAgIHN3YXAKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQVJDNCBwcmVmaXggaXMgdmFsaWQKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MTIyCiAgICAvLyBhc3NlcnQgcmVzdWx0MSA9PSAiZWNobzogcyIKICAgIGR1cAogICAgYnl0ZSAiZWNobzogcyIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weToxMjQKICAgIC8vIHJlc3VsdDIsIF90eG4gPSBhcmM0LmFiaV9jYWxsKExvZ2dlci5lY2hvX25hdGl2ZV9zdHJpbmcsIFN0cmluZygicyIpLCBhcHBfaWQ9YXBwKQogICAgaXR4bl9iZWdpbgogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIG1ldGhvZCAiZWNob19uYXRpdmVfc3RyaW5nKHN0cmluZylzdHJpbmciCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgYnl0ZSAweDAwMDE3MwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGludCBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnQgMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIGR1cAogICAgZXh0cmFjdCA0IDAKICAgIHN3YXAKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQVJDNCBwcmVmaXggaXMgdmFsaWQKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MTI1CiAgICAvLyBhc3NlcnQgcmVzdWx0MiA9PSByZXN1bHQxCiAgICBkaWcgMQogICAgPT0KICAgIGFzc2VydAogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjEyNwogICAgLy8gcmVzdWx0MywgX3R4biA9IGFyYzQuYWJpX2NhbGwoTG9nZ2VyLmVjaG9fbmF0aXZlX3N0cmluZywgYXJjNC5TdHJpbmcoInMiKSwgYXBwX2lkPWFwcCkKICAgIGl0eG5fYmVnaW4KICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBtZXRob2QgImVjaG9fbmF0aXZlX3N0cmluZyhzdHJpbmcpc3RyaW5nIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ5dGUgMHgwMDAxNzMKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpbnQgYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50IDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZSAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEFSQzQgcHJlZml4IGlzIHZhbGlkCiAgICBleHRyYWN0IDIgMAogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjEyOAogICAgLy8gYXNzZXJ0IHJlc3VsdDMgPT0gcmVzdWx0MQogICAgPT0KICAgIGFzc2VydAogICAgcmV0c3ViCgoKLy8gdGVzdF9jYXNlcy50eXBlZF9hYmlfY2FsbC50eXBlZF9jMmMuR3JlZXRlci50ZXN0X25hdGl2ZV9ieXRlcyhhcHA6IHVpbnQ2NCkgLT4gdm9pZDoKdGVzdF9uYXRpdmVfYnl0ZXM6CiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MTMwLTEzMQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIGRlZiB0ZXN0X25hdGl2ZV9ieXRlcyhzZWxmLCBhcHA6IEFwcGxpY2F0aW9uKSAtPiBOb25lOgogICAgcHJvdG8gMSAwCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MTMyCiAgICAvLyByZXN1bHQxLCBfdHhuID0gYXJjNC5hYmlfY2FsbChMb2dnZXIuZWNob19uYXRpdmVfYnl0ZXMsIGIiYiIsIGFwcF9pZD1hcHApCiAgICBpdHhuX2JlZ2luCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgbWV0aG9kICJlY2hvX25hdGl2ZV9ieXRlcyhieXRlW10pYnl0ZVtdIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ5dGUgMHgwMDAxNjIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpbnQgYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50IDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZSAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEFSQzQgcHJlZml4IGlzIHZhbGlkCiAgICBleHRyYWN0IDIgMAogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjEzMwogICAgLy8gYXNzZXJ0IHJlc3VsdDEgPT0gYiJlY2hvOiBiIgogICAgZHVwCiAgICBieXRlIDB4NjU2MzY4NmYzYTIwNjIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weToxMzUKICAgIC8vIHJlc3VsdDIsIF90eG4gPSBhcmM0LmFiaV9jYWxsKExvZ2dlci5lY2hvX25hdGl2ZV9ieXRlcywgQnl0ZXMoYiJiIiksIGFwcF9pZD1hcHApCiAgICBpdHhuX2JlZ2luCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgbWV0aG9kICJlY2hvX25hdGl2ZV9ieXRlcyhieXRlW10pYnl0ZVtdIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ5dGUgMHgwMDAxNjIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpbnQgYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50IDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZSAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEFSQzQgcHJlZml4IGlzIHZhbGlkCiAgICBleHRyYWN0IDIgMAogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjEzNgogICAgLy8gYXNzZXJ0IHJlc3VsdDIgPT0gcmVzdWx0MQogICAgZGlnIDEKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weToxMzgtMTQwCiAgICAvLyByZXN1bHQzLCBfdHhuID0gYXJjNC5hYmlfY2FsbCgKICAgIC8vICAgICBMb2dnZXIuZWNob19uYXRpdmVfYnl0ZXMsIGFyYzQuRHluYW1pY0J5dGVzKGIiYiIpLCBhcHBfaWQ9YXBwCiAgICAvLyApCiAgICBpdHhuX2JlZ2luCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgbWV0aG9kICJlY2hvX25hdGl2ZV9ieXRlcyhieXRlW10pYnl0ZVtdIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weToxMzkKICAgIC8vIExvZ2dlci5lY2hvX25hdGl2ZV9ieXRlcywgYXJjNC5EeW5hbWljQnl0ZXMoYiJiIiksIGFwcF9pZD1hcHAKICAgIGJ5dGUgMHgwMDAxNjIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MTM4LTE0MAogICAgLy8gcmVzdWx0MywgX3R4biA9IGFyYzQuYWJpX2NhbGwoCiAgICAvLyAgICAgTG9nZ2VyLmVjaG9fbmF0aXZlX2J5dGVzLCBhcmM0LkR5bmFtaWNCeXRlcyhiImIiKSwgYXBwX2lkPWFwcAogICAgLy8gKQogICAgaW50IGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgc3dhcAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGUgMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBBUkM0IHByZWZpeCBpcyB2YWxpZAogICAgZXh0cmFjdCAyIDAKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weToxNDEKICAgIC8vIGFzc2VydCByZXN1bHQzID09IHJlc3VsdDEKICAgID09CiAgICBhc3NlcnQKICAgIHJldHN1YgoKCi8vIHRlc3RfY2FzZXMudHlwZWRfYWJpX2NhbGwudHlwZWRfYzJjLkdyZWV0ZXIudGVzdF9uYXRpdmVfdWludDY0KGFwcDogdWludDY0KSAtPiB2b2lkOgp0ZXN0X25hdGl2ZV91aW50NjQ6CiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MTQzLTE0NAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIGRlZiB0ZXN0X25hdGl2ZV91aW50NjQoc2VsZiwgYXBwOiBBcHBsaWNhdGlvbikgLT4gTm9uZToKICAgIHByb3RvIDEgMAogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjE0NQogICAgLy8gcmVzdWx0MSwgX3R4biA9IGFyYzQuYWJpX2NhbGwoTG9nZ2VyLmVjaG9fbmF0aXZlX3VpbnQ2NCwgMSwgYXBwX2lkPWFwcCkKICAgIGl0eG5fYmVnaW4KICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBtZXRob2QgImVjaG9fbmF0aXZlX3VpbnQ2NCh1aW50NjQpdWludDY0IgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ5dGUgMHgwMDAwMDAwMDAwMDAwMDAxCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaW50IGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgc3dhcAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGUgMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBBUkM0IHByZWZpeCBpcyB2YWxpZAogICAgYnRvaQogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjE0NgogICAgLy8gYXNzZXJ0IHJlc3VsdDEgPT0gMgogICAgZHVwCiAgICBpbnQgMgogICAgPT0KICAgIGFzc2VydAogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjE0OAogICAgLy8gcmVzdWx0MiwgX3R4biA9IGFyYzQuYWJpX2NhbGwoTG9nZ2VyLmVjaG9fbmF0aXZlX3VpbnQ2NCwgVUludDY0KDEpLCBhcHBfaWQ9YXBwKQogICAgaXR4bl9iZWdpbgogICAgaW50IDEKICAgIGl0b2IKICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBtZXRob2QgImVjaG9fbmF0aXZlX3VpbnQ2NCh1aW50NjQpdWludDY0IgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpbnQgYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50IDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZSAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEFSQzQgcHJlZml4IGlzIHZhbGlkCiAgICBidG9pCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MTQ5CiAgICAvLyBhc3NlcnQgcmVzdWx0MiA9PSByZXN1bHQxCiAgICBkaWcgMQogICAgPT0KICAgIGFzc2VydAogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjE1MQogICAgLy8gcmVzdWx0MywgX3R4biA9IGFyYzQuYWJpX2NhbGwoTG9nZ2VyLmVjaG9fbmF0aXZlX3VpbnQ2NCwgYXJjNC5VSW50NjQoMSksIGFwcF9pZD1hcHApCiAgICBpdHhuX2JlZ2luCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgbWV0aG9kICJlY2hvX25hdGl2ZV91aW50NjQodWludDY0KXVpbnQ2NCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBieXRlIDB4MDAwMDAwMDAwMDAwMDAwMQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGludCBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnQgMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIGR1cAogICAgZXh0cmFjdCA0IDAKICAgIHN3YXAKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQVJDNCBwcmVmaXggaXMgdmFsaWQKICAgIGJ0b2kKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weToxNTIKICAgIC8vIGFzc2VydCByZXN1bHQzID09IHJlc3VsdDEKICAgID09CiAgICBhc3NlcnQKICAgIHJldHN1YgoKCi8vIHRlc3RfY2FzZXMudHlwZWRfYWJpX2NhbGwudHlwZWRfYzJjLkdyZWV0ZXIudGVzdF9uYXRpdmVfYmlndWludChhcHA6IHVpbnQ2NCkgLT4gdm9pZDoKdGVzdF9uYXRpdmVfYmlndWludDoKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weToxNTQtMTU1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gZGVmIHRlc3RfbmF0aXZlX2JpZ3VpbnQoc2VsZiwgYXBwOiBBcHBsaWNhdGlvbikgLT4gTm9uZToKICAgIHByb3RvIDEgMAogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjE1NgogICAgLy8gcmVzdWx0MSwgX3R4biA9IGFyYzQuYWJpX2NhbGwoTG9nZ2VyLmVjaG9fbmF0aXZlX2JpZ3VpbnQsIDIsIGFwcF9pZD1hcHApCiAgICBpdHhuX2JlZ2luCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgbWV0aG9kICJlY2hvX25hdGl2ZV9iaWd1aW50KHVpbnQ1MTIpdWludDUxMiIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBieXRlIDB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpbnQgYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50IDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZSAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEFSQzQgcHJlZml4IGlzIHZhbGlkCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MTU3CiAgICAvLyBhc3NlcnQgcmVzdWx0MSA9PSAzCiAgICBkdXAKICAgIGJ5dGUgMHgwMwogICAgYj09CiAgICBhc3NlcnQKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weToxNTkKICAgIC8vIHJlc3VsdDIsIF90eG4gPSBhcmM0LmFiaV9jYWxsKExvZ2dlci5lY2hvX25hdGl2ZV9iaWd1aW50LCBCaWdVSW50KDIpLCBhcHBfaWQ9YXBwKQogICAgaXR4bl9iZWdpbgogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIG1ldGhvZCAiZWNob19uYXRpdmVfYmlndWludCh1aW50NTEyKXVpbnQ1MTIiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaW50IGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgc3dhcAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGUgMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBBUkM0IHByZWZpeCBpcyB2YWxpZAogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjE2MAogICAgLy8gYXNzZXJ0IHJlc3VsdDIgPT0gcmVzdWx0MQogICAgZGlnIDEKICAgIGI9PQogICAgYXNzZXJ0CiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MTYyCiAgICAvLyByZXN1bHQzLCBfdHhuID0gYXJjNC5hYmlfY2FsbChMb2dnZXIuZWNob19uYXRpdmVfYmlndWludCwgYXJjNC5VSW50NTEyKDIpLCBhcHBfaWQ9YXBwKQogICAgaXR4bl9iZWdpbgogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIG1ldGhvZCAiZWNob19uYXRpdmVfYmlndWludCh1aW50NTEyKXVpbnQ1MTIiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaW50IGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgc3dhcAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGUgMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBBUkM0IHByZWZpeCBpcyB2YWxpZAogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjE2MwogICAgLy8gYXNzZXJ0IHJlc3VsdDMgPT0gcmVzdWx0MQogICAgYj09CiAgICBhc3NlcnQKICAgIHJldHN1YgoKCi8vIHRlc3RfY2FzZXMudHlwZWRfYWJpX2NhbGwudHlwZWRfYzJjLkdyZWV0ZXIudGVzdF9uYXRpdmVfdHVwbGUoYXBwOiB1aW50NjQpIC0+IHZvaWQ6CnRlc3RfbmF0aXZlX3R1cGxlOgogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjE2NS0xNjYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBkZWYgdGVzdF9uYXRpdmVfdHVwbGUoc2VsZiwgYXBwOiBBcHBsaWNhdGlvbikgLT4gTm9uZToKICAgIHByb3RvIDEgMAogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjE2OS0xNzcKICAgIC8vICMgTk9URTogdGhlIGZvbGxvd2luZyB1c2VzIG1ldGhvZCBzZWxlY3RvcnMgdG8gd29yayBhcm91bmQgaGF2aW5nIG5lc3RlZCB0dXBsZXMKICAgIC8vIHR4biA9IGFyYzQuYWJpX2NhbGwoCiAgICAvLyAgICAgImVjaG9fbmF0aXZlX3R1cGxlKHN0cmluZyxieXRlW10sdWludDY0LHVpbnQ1MTIpKHN0cmluZyxieXRlW10sdWludDY0LHVpbnQ1MTIpIiwKICAgIC8vICAgICAiczEiLAogICAgLy8gICAgIGIiYjEiLAogICAgLy8gICAgIDEsCiAgICAvLyAgICAgMiwKICAgIC8vICAgICBhcHBfaWQ9YXBwLAogICAgLy8gKQogICAgaXR4bl9iZWdpbgogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIG1ldGhvZCAiZWNob19uYXRpdmVfdHVwbGUoc3RyaW5nLGJ5dGVbXSx1aW50NjQsdWludDUxMikoc3RyaW5nLGJ5dGVbXSx1aW50NjQsdWludDUxMikiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjE3MgogICAgLy8gInMxIiwKICAgIGJ5dGUgMHgwMDAyNzMzMQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weToxNzMKICAgIC8vIGIiYjEiLAogICAgYnl0ZSAweDAwMDI2MjMxCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjE3NAogICAgLy8gMSwKICAgIGJ5dGUgMHgwMDAwMDAwMDAwMDAwMDAxCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjE3NQogICAgLy8gMiwKICAgIGJ5dGUgMHgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weToxNjktMTc3CiAgICAvLyAjIE5PVEU6IHRoZSBmb2xsb3dpbmcgdXNlcyBtZXRob2Qgc2VsZWN0b3JzIHRvIHdvcmsgYXJvdW5kIGhhdmluZyBuZXN0ZWQgdHVwbGVzCiAgICAvLyB0eG4gPSBhcmM0LmFiaV9jYWxsKAogICAgLy8gICAgICJlY2hvX25hdGl2ZV90dXBsZShzdHJpbmcsYnl0ZVtdLHVpbnQ2NCx1aW50NTEyKShzdHJpbmcsYnl0ZVtdLHVpbnQ2NCx1aW50NTEyKSIsCiAgICAvLyAgICAgInMxIiwKICAgIC8vICAgICBiImIxIiwKICAgIC8vICAgICAxLAogICAgLy8gICAgIDIsCiAgICAvLyAgICAgYXBwX2lkPWFwcCwKICAgIC8vICkKICAgIGludCBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnQgMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weToxNzgtMTgwCiAgICAvLyByZXN1bHQxID0gYXJjNC5UdXBsZVthcmM0LlN0cmluZywgYXJjNC5EeW5hbWljQnl0ZXMsIGFyYzQuVUludDY0LCBhcmM0LlVJbnQ1MTJdLmZyb21fbG9nKAogICAgLy8gICAgIHR4bi5sYXN0X2xvZwogICAgLy8gKQogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgc3dhcAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGUgMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBBUkM0IHByZWZpeCBpcyB2YWxpZAogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjE4MQogICAgLy8gcywgYiwgdSwgYnUgPSByZXN1bHQxLm5hdGl2ZQogICAgZHVwCiAgICBpbnQgMAogICAgZXh0cmFjdF91aW50MTYKICAgIHN3YXAKICAgIGR1cAogICAgaW50IDIKICAgIGV4dHJhY3RfdWludDE2CiAgICBkaWcgMQogICAgdW5jb3ZlciAzCiAgICBkaWcgMgogICAgc3Vic3RyaW5nMwogICAgY292ZXIgMgogICAgZGlnIDEKICAgIGxlbgogICAgZGlnIDIKICAgIGNvdmVyIDIKICAgIHN1YnN0cmluZzMKICAgIGNvdmVyIDIKICAgIGR1cAogICAgZXh0cmFjdCA0IDggLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBjb3ZlciAzCiAgICBkdXAKICAgIGV4dHJhY3QgMTIgNjQgLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBjb3ZlciAzCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MTgyCiAgICAvLyBhc3NlcnQgcy5uYXRpdmUgPT0gImVjaG86IHMxIgogICAgc3dhcAogICAgZXh0cmFjdCAyIDAKICAgIGJ5dGUgImVjaG86IHMxIgogICAgPT0KICAgIGFzc2VydAogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjE4MwogICAgLy8gYXNzZXJ0IGIubmF0aXZlID09IGIiZWNobzogYjEiCiAgICBzd2FwCiAgICBleHRyYWN0IDIgMAogICAgYnl0ZSAweDY1NjM2ODZmM2EyMDYyMzEKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weToxODQKICAgIC8vIGFzc2VydCB1Lm5hdGl2ZSA9PSAyCiAgICB1bmNvdmVyIDIKICAgIGJ0b2kKICAgIGludCAyCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MTg1CiAgICAvLyBhc3NlcnQgYnUubmF0aXZlID09IDMKICAgIHN3YXAKICAgIGJ5dGUgMHgwMwogICAgYj09CiAgICBhc3NlcnQKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weToxODctMTk1CiAgICAvLyAjIHRlc3QgYWdhaW4gdXNpbmcgbmF0aXZlIHR5cGVzIGluIGFyZ3VtZW50cwogICAgLy8gdHhuID0gYXJjNC5hYmlfY2FsbCgKICAgIC8vICAgICAiZWNob19uYXRpdmVfdHVwbGUoc3RyaW5nLGJ5dGVbXSx1aW50NjQsdWludDUxMikoc3RyaW5nLGJ5dGVbXSx1aW50NjQsdWludDUxMikiLAogICAgLy8gICAgIFN0cmluZygiczEiKSwKICAgIC8vICAgICBCeXRlcyhiImIxIiksCiAgICAvLyAgICAgVUludDY0KDEpLAogICAgLy8gICAgIEJpZ1VJbnQoMiksCiAgICAvLyAgICAgYXBwX2lkPWFwcCwKICAgIC8vICkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weToxOTIKICAgIC8vIFVJbnQ2NCgxKSwKICAgIGludCAxCiAgICBpdG9iCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjE4Ny0xOTUKICAgIC8vICMgdGVzdCBhZ2FpbiB1c2luZyBuYXRpdmUgdHlwZXMgaW4gYXJndW1lbnRzCiAgICAvLyB0eG4gPSBhcmM0LmFiaV9jYWxsKAogICAgLy8gICAgICJlY2hvX25hdGl2ZV90dXBsZShzdHJpbmcsYnl0ZVtdLHVpbnQ2NCx1aW50NTEyKShzdHJpbmcsYnl0ZVtdLHVpbnQ2NCx1aW50NTEyKSIsCiAgICAvLyAgICAgU3RyaW5nKCJzMSIpLAogICAgLy8gICAgIEJ5dGVzKGIiYjEiKSwKICAgIC8vICAgICBVSW50NjQoMSksCiAgICAvLyAgICAgQmlnVUludCgyKSwKICAgIC8vICAgICBhcHBfaWQ9YXBwLAogICAgLy8gKQogICAgbWV0aG9kICJlY2hvX25hdGl2ZV90dXBsZShzdHJpbmcsYnl0ZVtdLHVpbnQ2NCx1aW50NTEyKShzdHJpbmcsYnl0ZVtdLHVpbnQ2NCx1aW50NTEyKSIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MTkwCiAgICAvLyBTdHJpbmcoInMxIiksCiAgICBieXRlIDB4MDAwMjczMzEKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MTkxCiAgICAvLyBCeXRlcyhiImIxIiksCiAgICBieXRlIDB4MDAwMjYyMzEKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjE5MwogICAgLy8gQmlnVUludCgyKSwKICAgIGJ5dGUgMHgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weToxODctMTk1CiAgICAvLyAjIHRlc3QgYWdhaW4gdXNpbmcgbmF0aXZlIHR5cGVzIGluIGFyZ3VtZW50cwogICAgLy8gdHhuID0gYXJjNC5hYmlfY2FsbCgKICAgIC8vICAgICAiZWNob19uYXRpdmVfdHVwbGUoc3RyaW5nLGJ5dGVbXSx1aW50NjQsdWludDUxMikoc3RyaW5nLGJ5dGVbXSx1aW50NjQsdWludDUxMikiLAogICAgLy8gICAgIFN0cmluZygiczEiKSwKICAgIC8vICAgICBCeXRlcyhiImIxIiksCiAgICAvLyAgICAgVUludDY0KDEpLAogICAgLy8gICAgIEJpZ1VJbnQoMiksCiAgICAvLyAgICAgYXBwX2lkPWFwcCwKICAgIC8vICkKICAgIGludCBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnQgMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weToxOTYtMTk4CiAgICAvLyByZXN1bHQyID0gYXJjNC5UdXBsZVthcmM0LlN0cmluZywgYXJjNC5EeW5hbWljQnl0ZXMsIGFyYzQuVUludDY0LCBhcmM0LlVJbnQ1MTJdLmZyb21fbG9nKAogICAgLy8gICAgIHR4bi5sYXN0X2xvZwogICAgLy8gKQogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgc3dhcAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGUgMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBBUkM0IHByZWZpeCBpcyB2YWxpZAogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjE5OQogICAgLy8gYXNzZXJ0IHJlc3VsdDEgPT0gcmVzdWx0MgogICAgZGlnIDEKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weToyMDEtMjA5CiAgICAvLyAjIHRlc3QgYWdhaW4gdXNpbmcgYXJjNCB0eXBlcyBpbiBhcmd1bWVudHMKICAgIC8vIHR4biA9IGFyYzQuYWJpX2NhbGwoCiAgICAvLyAgICAgImVjaG9fbmF0aXZlX3R1cGxlKHN0cmluZyxieXRlW10sdWludDY0LHVpbnQ1MTIpKHN0cmluZyxieXRlW10sdWludDY0LHVpbnQ1MTIpIiwKICAgIC8vICAgICBhcmM0LlN0cmluZygiczEiKSwKICAgIC8vICAgICBhcmM0LkR5bmFtaWNCeXRlcyhiImIxIiksCiAgICAvLyAgICAgYXJjNC5VSW50NjQoMSksCiAgICAvLyAgICAgYXJjNC5VSW50NTEyKDIpLAogICAgLy8gICAgIGFwcF9pZD1hcHAsCiAgICAvLyApCiAgICBpdHhuX2JlZ2luCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgbWV0aG9kICJlY2hvX25hdGl2ZV90dXBsZShzdHJpbmcsYnl0ZVtdLHVpbnQ2NCx1aW50NTEyKShzdHJpbmcsYnl0ZVtdLHVpbnQ2NCx1aW50NTEyKSIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MjA0CiAgICAvLyBhcmM0LlN0cmluZygiczEiKSwKICAgIGJ5dGUgMHgwMDAyNzMzMQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weToyMDUKICAgIC8vIGFyYzQuRHluYW1pY0J5dGVzKGIiYjEiKSwKICAgIGJ5dGUgMHgwMDAyNjIzMQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weToyMDYKICAgIC8vIGFyYzQuVUludDY0KDEpLAogICAgYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDEKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MjA3CiAgICAvLyBhcmM0LlVJbnQ1MTIoMiksCiAgICBieXRlIDB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MjAxLTIwOQogICAgLy8gIyB0ZXN0IGFnYWluIHVzaW5nIGFyYzQgdHlwZXMgaW4gYXJndW1lbnRzCiAgICAvLyB0eG4gPSBhcmM0LmFiaV9jYWxsKAogICAgLy8gICAgICJlY2hvX25hdGl2ZV90dXBsZShzdHJpbmcsYnl0ZVtdLHVpbnQ2NCx1aW50NTEyKShzdHJpbmcsYnl0ZVtdLHVpbnQ2NCx1aW50NTEyKSIsCiAgICAvLyAgICAgYXJjNC5TdHJpbmcoInMxIiksCiAgICAvLyAgICAgYXJjNC5EeW5hbWljQnl0ZXMoYiJiMSIpLAogICAgLy8gICAgIGFyYzQuVUludDY0KDEpLAogICAgLy8gICAgIGFyYzQuVUludDUxMigyKSwKICAgIC8vICAgICBhcHBfaWQ9YXBwLAogICAgLy8gKQogICAgaW50IGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjIxMC0yMTIKICAgIC8vIHJlc3VsdDMgPSBhcmM0LlR1cGxlW2FyYzQuU3RyaW5nLCBhcmM0LkR5bmFtaWNCeXRlcywgYXJjNC5VSW50NjQsIGFyYzQuVUludDUxMl0uZnJvbV9sb2coCiAgICAvLyAgICAgdHhuLmxhc3RfbG9nCiAgICAvLyApCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZSAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEFSQzQgcHJlZml4IGlzIHZhbGlkCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MjEzCiAgICAvLyBhc3NlcnQgcmVzdWx0MSA9PSByZXN1bHQzCiAgICA9PQogICAgYXNzZXJ0CiAgICByZXRzdWIKCgovLyB0ZXN0X2Nhc2VzLnR5cGVkX2FiaV9jYWxsLnR5cGVkX2MyYy5HcmVldGVyLnRlc3Rfbm9fYXJncyhhcHA6IHVpbnQ2NCkgLT4gdm9pZDoKdGVzdF9ub19hcmdzOgogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjIxNS0yMTYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBkZWYgdGVzdF9ub19hcmdzKHNlbGYsIGFwcDogQXBwbGljYXRpb24pIC0+IE5vbmU6CiAgICBwcm90byAxIDAKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weToyMTcKICAgIC8vIHJlc3VsdCwgX3R4biA9IGFyYzQuYWJpX2NhbGwoTG9nZ2VyLm5vX2FyZ3MsIGFwcF9pZD1hcHApCiAgICBpdHhuX2JlZ2luCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgbWV0aG9kICJub19hcmdzKCl1aW50NjQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaW50IGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgc3dhcAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGUgMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBBUkM0IHByZWZpeCBpcyB2YWxpZAogICAgYnRvaQogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjIxOAogICAgLy8gYXNzZXJ0IHJlc3VsdCA9PSA0MgogICAgaW50IDQyCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MjE5CiAgICAvLyBhcmM0X3Jlc3VsdCwgX3R4biA9IGFyYzQuYWJpX2NhbGxbYXJjNC5VSW50NjRdKCJub19hcmdzKCl1aW50NjQiLCBhcHBfaWQ9YXBwKQogICAgaXR4bl9iZWdpbgogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIG1ldGhvZCAibm9fYXJncygpdWludDY0IgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGludCBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnQgMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIGR1cAogICAgZXh0cmFjdCA0IDAKICAgIHN3YXAKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQVJDNCBwcmVmaXggaXMgdmFsaWQKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weToyMjAKICAgIC8vIGFzc2VydCBhcmM0X3Jlc3VsdCA9PSA0MgogICAgYnl0ZSAweDAwMDAwMDAwMDAwMDAwMmEKICAgIGI9PQogICAgYXNzZXJ0CiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MjIyCiAgICAvLyBhcmM0LmFiaV9jYWxsKExvZ2dlci5ub19hcmdzLCBhcHBfaWQ9YXBwKQogICAgaXR4bl9iZWdpbgogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIG1ldGhvZCAibm9fYXJncygpdWludDY0IgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGludCBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnQgMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQVJDNCBwcmVmaXggaXMgdmFsaWQKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weToyMjMKICAgIC8vIGFzc2VydCBhcmM0LlVJbnQ2NC5mcm9tX2xvZyhvcC5JVHhuLmxhc3RfbG9nKCkpID09IDQyCiAgICBpdHhuIExhc3RMb2cKICAgIGR1cAogICAgZXh0cmFjdCA0IDAKICAgIHN3YXAKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQVJDNCBwcmVmaXggaXMgdmFsaWQKICAgIGJ5dGUgMHgwMDAwMDAwMDAwMDAwMDJhCiAgICBiPT0KICAgIGFzc2VydAogICAgcmV0c3ViCg==", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0X2Nhc2VzLnR5cGVkX2FiaV9jYWxsLnR5cGVkX2MyYy5HcmVldGVyLmNsZWFyX3N0YXRlX3Byb2dyYW06CiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MTcKICAgIC8vIGNsYXNzIEdyZWV0ZXIoQVJDNENvbnRyYWN0KToKICAgIGludCAxCiAgICByZXR1cm4K" }, "state": { @@ -229,6 +234,19 @@ "returns": { "type": "void" } + }, + { + "name": "test_no_args", + "args": [ + { + "type": "application", + "name": "app" + } + ], + "readonly": false, + "returns": { + "type": "void" + } } ], "networks": {} diff --git a/test_cases/typed_abi_call/out/Greeter.destructured.ir b/test_cases/typed_abi_call/out/Greeter.destructured.ir index 25531637b3..7c0bb21321 100644 --- a/test_cases/typed_abi_call/out/Greeter.destructured.ir +++ b/test_cases/typed_abi_call/out/Greeter.destructured.ir @@ -3,10 +3,10 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: subroutine test_cases.typed_abi_call.typed_c2c.Greeter.approval_program() -> bool: block@0: // L17 let tmp%0#0: bool = (txn NumAppArgs) - goto tmp%0#0 ? block@1 : block@15 + goto tmp%0#0 ? block@1 : block@16 block@1: // abi_routing_L17 let tmp%1#0: bytes = (txna ApplicationArgs 0) - switch tmp%1#0 {method "test_method_selector_kinds(application)void" => block@2, method "test_method_overload(application)void" => block@3, method "test_arg_conversion(application)void" => block@4, method "test_15plus_args(application)void" => block@5, method "test_void(application)void" => block@6, method "test_ref_types(application,asset)void" => block@7, method "test_native_string(application)void" => block@8, method "test_native_bytes(application)void" => block@9, method "test_native_uint64(application)void" => block@10, method "test_native_biguint(application)void" => block@11, method "test_native_tuple(application)void" => block@12, * => fail // reject transaction} + switch tmp%1#0 {method "test_method_selector_kinds(application)void" => block@2, method "test_method_overload(application)void" => block@3, method "test_arg_conversion(application)void" => block@4, method "test_15plus_args(application)void" => block@5, method "test_void(application)void" => block@6, method "test_ref_types(application,asset)void" => block@7, method "test_native_string(application)void" => block@8, method "test_native_bytes(application)void" => block@9, method "test_native_uint64(application)void" => block@10, method "test_native_biguint(application)void" => block@11, method "test_native_tuple(application)void" => block@12, method "test_no_args(application)void" => block@13, * => fail // reject transaction} block@2: // test_method_selector_kinds_route_L18 let tmp%2#0: uint64 = (txn OnCompletion) let tmp%3#0: bool = (! tmp%2#0) @@ -131,13 +131,24 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: let tmp%70#0: uint64 = ((txnas Applications) tmp%69#0) test_cases.typed_abi_call.typed_c2c.Greeter.test_native_tuple(tmp%70#0) return 1u - block@15: // bare_routing_L17 + block@13: // test_no_args_route_L215 let tmp%71#0: uint64 = (txn OnCompletion) - let not%tmp%71#0: bool = (! tmp%71#0) - (assert not%tmp%71#0) // reject transaction - let tmp%72#0: bool = (txn ApplicationID) - let tmp%73#0: bool = (! tmp%72#0) - (assert tmp%73#0) // is creating + let tmp%72#0: bool = (! tmp%71#0) + (assert tmp%72#0) // OnCompletion is NoOp + let tmp%73#0: bool = (txn ApplicationID) + (assert tmp%73#0) // is not creating + let tmp%74#0: bytes = (txna ApplicationArgs 1) + let tmp%75#0: uint64 = (btoi tmp%74#0) + let tmp%76#0: uint64 = ((txnas Applications) tmp%75#0) + test_cases.typed_abi_call.typed_c2c.Greeter.test_no_args(tmp%76#0) + return 1u + block@16: // bare_routing_L17 + let tmp%77#0: uint64 = (txn OnCompletion) + let not%tmp%77#0: bool = (! tmp%77#0) + (assert not%tmp%77#0) // reject transaction + let tmp%78#0: bool = (txn ApplicationID) + let tmp%79#0: bool = (! tmp%78#0) + (assert tmp%79#0) // is creating return 1u subroutine test_cases.typed_abi_call.typed_c2c.Greeter.test_method_selector_kinds(app: uint64) -> void: @@ -709,6 +720,54 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: let tmp%18#0: bool = (== result1#0 result3#0) (assert tmp%18#0) return + + subroutine test_cases.typed_abi_call.typed_c2c.Greeter.test_no_args(app: uint64) -> void: + block@0: // L215 + itxn_begin + ((itxn_field ApplicationID) app#0) + ((itxn_field ApplicationArgs) method "no_args()uint64") + ((itxn_field TypeEnum) appl) + ((itxn_field Fee) 0u) + itxn_submit + let awst_tmp%0#0: bytes = (itxn LastLog) + let tmp%0#0: bytes = ((extract 4 0) awst_tmp%0#0) + let tmp%1#0: bytes = ((extract 0 4) awst_tmp%0#0) + let tmp%2#0: bool = (== tmp%1#0 0x151f7c75) + (assert tmp%2#0) // ARC4 prefix is valid + let result#0: uint64 = (btoi tmp%0#0) + let tmp%3#0: bool = (== result#0 42u) + (assert tmp%3#0) + itxn_begin + ((itxn_field ApplicationID) app#0) + ((itxn_field ApplicationArgs) method "no_args()uint64") + ((itxn_field TypeEnum) appl) + ((itxn_field Fee) 0u) + itxn_submit + let awst_tmp%1#0: bytes = (itxn LastLog) + let arc4_result#0: bytes = ((extract 4 0) awst_tmp%1#0) + let tmp%5#0: bytes = ((extract 0 4) awst_tmp%1#0) + let tmp%6#0: bool = (== tmp%5#0 0x151f7c75) + (assert tmp%6#0) // ARC4 prefix is valid + let tmp%7#0: bool = (b== arc4_result#0 0x000000000000002a) + (assert tmp%7#0) + itxn_begin + ((itxn_field ApplicationID) app#0) + ((itxn_field ApplicationArgs) method "no_args()uint64") + ((itxn_field TypeEnum) appl) + ((itxn_field Fee) 0u) + itxn_submit + let awst_tmp%2#0: bytes = (itxn LastLog) + let tmp%9#0: bytes = ((extract 0 4) awst_tmp%2#0) + let tmp%10#0: bool = (== tmp%9#0 0x151f7c75) + (assert tmp%10#0) // ARC4 prefix is valid + let awst_tmp%3#0: bytes = (itxn LastLog) + let tmp%12#0: bytes = ((extract 4 0) awst_tmp%3#0) + let tmp%13#0: bytes = ((extract 0 4) awst_tmp%3#0) + let tmp%14#0: bool = (== tmp%13#0 0x151f7c75) + (assert tmp%14#0) // ARC4 prefix is valid + let tmp%15#0: bool = (b== tmp%12#0 0x000000000000002a) + (assert tmp%15#0) + return program clear-state: subroutine test_cases.typed_abi_call.typed_c2c.Greeter.clear_state_program() -> bool: diff --git a/test_cases/typed_abi_call/out/Greeter.ssa.ir b/test_cases/typed_abi_call/out/Greeter.ssa.ir index 3cef1e2a37..989b6c3656 100644 --- a/test_cases/typed_abi_call/out/Greeter.ssa.ir +++ b/test_cases/typed_abi_call/out/Greeter.ssa.ir @@ -3,10 +3,10 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: subroutine test_cases.typed_abi_call.typed_c2c.Greeter.approval_program() -> bool: block@0: // L17 let tmp%0#0: bool = (txn NumAppArgs) - goto tmp%0#0 ? block@1 : block@15 + goto tmp%0#0 ? block@1 : block@16 block@1: // abi_routing_L17 let tmp%1#0: bytes = (txna ApplicationArgs 0) - switch tmp%1#0 {method "test_method_selector_kinds(application)void" => block@2, method "test_method_overload(application)void" => block@3, method "test_arg_conversion(application)void" => block@4, method "test_15plus_args(application)void" => block@5, method "test_void(application)void" => block@6, method "test_ref_types(application,asset)void" => block@7, method "test_native_string(application)void" => block@8, method "test_native_bytes(application)void" => block@9, method "test_native_uint64(application)void" => block@10, method "test_native_biguint(application)void" => block@11, method "test_native_tuple(application)void" => block@12, * => block@13} + switch tmp%1#0 {method "test_method_selector_kinds(application)void" => block@2, method "test_method_overload(application)void" => block@3, method "test_arg_conversion(application)void" => block@4, method "test_15plus_args(application)void" => block@5, method "test_void(application)void" => block@6, method "test_ref_types(application,asset)void" => block@7, method "test_native_string(application)void" => block@8, method "test_native_bytes(application)void" => block@9, method "test_native_uint64(application)void" => block@10, method "test_native_biguint(application)void" => block@11, method "test_native_tuple(application)void" => block@12, method "test_no_args(application)void" => block@13, * => block@14} block@2: // test_method_selector_kinds_route_L18 let tmp%2#0: uint64 = (txn OnCompletion) let tmp%3#0: bool = (== tmp%2#0 NoOp) @@ -131,19 +131,30 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: let tmp%70#0: uint64 = ((txnas Applications) tmp%69#0) test_cases.typed_abi_call.typed_c2c.Greeter.test_native_tuple(tmp%70#0) return 1u - block@13: // switch_case_default_L17 - goto block@14 - block@14: // switch_case_next_L17 - fail // reject transaction - block@15: // bare_routing_L17 + block@13: // test_no_args_route_L215 let tmp%71#0: uint64 = (txn OnCompletion) - switch tmp%71#0 {0u => block@16, * => block@17} - block@16: // create_L17 - let tmp%72#0: bool = (txn ApplicationID) - let tmp%73#0: bool = (! tmp%72#0) - (assert tmp%73#0) // is creating + let tmp%72#0: bool = (== tmp%71#0 NoOp) + (assert tmp%72#0) // OnCompletion is NoOp + let tmp%73#0: bool = (txn ApplicationID) + (assert tmp%73#0) // is not creating + let tmp%74#0: bytes = (txna ApplicationArgs 1) + let tmp%75#0: uint64 = (btoi tmp%74#0) + let tmp%76#0: uint64 = ((txnas Applications) tmp%75#0) + test_cases.typed_abi_call.typed_c2c.Greeter.test_no_args(tmp%76#0) + return 1u + block@14: // switch_case_default_L17 + goto block@15 + block@15: // switch_case_next_L17 + fail // reject transaction + block@16: // bare_routing_L17 + let tmp%77#0: uint64 = (txn OnCompletion) + switch tmp%77#0 {0u => block@17, * => block@18} + block@17: // create_L17 + let tmp%78#0: bool = (txn ApplicationID) + let tmp%79#0: bool = (! tmp%78#0) + (assert tmp%79#0) // is creating return 1u - block@17: // reject_bare_on_completion_L17 + block@18: // reject_bare_on_completion_L17 fail // reject transaction subroutine test_cases.typed_abi_call.typed_c2c.Greeter.test_method_selector_kinds(app: uint64) -> void: @@ -5067,6 +5078,361 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: let tmp%18#0: bool = (== result1#0 result3#0) (assert tmp%18#0) return + + subroutine test_cases.typed_abi_call.typed_c2c.Greeter.test_no_args(app: uint64) -> void: + block@0: // L215 + itxn_begin + let inner_txn_params%0#0: itxn_field_set = itxn_field_set(0) + let inner_txn_params%0%%param_Fee_idx_0#0: uint64 = 0u + let inner_txn_params%0%%Fee_length#0: uint64 = 1u + let inner_txn_params%0%%param_TypeEnum_idx_0#0: uint64 = appl + let inner_txn_params%0%%TypeEnum_length#0: uint64 = 1u + let inner_txn_params%0%%param_ApplicationArgs_idx_0#0: bytes = method "no_args()uint64" + let inner_txn_params%0%%ApplicationArgs_length#0: uint64 = 1u + let inner_txn_params%0%%param_ApplicationID_idx_0#0: uint64 = app#0 + let inner_txn_params%0%%ApplicationID_length#0: uint64 = 1u + let inner_txn_params%0%%Sender_length#0: uint64 = 0u + let inner_txn_params%0%%Note_length#0: uint64 = 0u + let inner_txn_params%0%%Receiver_length#0: uint64 = 0u + let inner_txn_params%0%%Amount_length#0: uint64 = 0u + let inner_txn_params%0%%CloseRemainderTo_length#0: uint64 = 0u + let inner_txn_params%0%%VotePK_length#0: uint64 = 0u + let inner_txn_params%0%%SelectionPK_length#0: uint64 = 0u + let inner_txn_params%0%%VoteFirst_length#0: uint64 = 0u + let inner_txn_params%0%%VoteLast_length#0: uint64 = 0u + let inner_txn_params%0%%VoteKeyDilution_length#0: uint64 = 0u + let inner_txn_params%0%%Type_length#0: uint64 = 0u + let inner_txn_params%0%%XferAsset_length#0: uint64 = 0u + let inner_txn_params%0%%AssetAmount_length#0: uint64 = 0u + let inner_txn_params%0%%AssetSender_length#0: uint64 = 0u + let inner_txn_params%0%%AssetReceiver_length#0: uint64 = 0u + let inner_txn_params%0%%AssetCloseTo_length#0: uint64 = 0u + let inner_txn_params%0%%OnCompletion_length#0: uint64 = 0u + let inner_txn_params%0%%ApprovalProgram_length#0: uint64 = 0u + let inner_txn_params%0%%ClearStateProgram_length#0: uint64 = 0u + let inner_txn_params%0%%RekeyTo_length#0: uint64 = 0u + let inner_txn_params%0%%ConfigAsset_length#0: uint64 = 0u + let inner_txn_params%0%%ConfigAssetTotal_length#0: uint64 = 0u + let inner_txn_params%0%%ConfigAssetDecimals_length#0: uint64 = 0u + let inner_txn_params%0%%ConfigAssetDefaultFrozen_length#0: uint64 = 0u + let inner_txn_params%0%%ConfigAssetUnitName_length#0: uint64 = 0u + let inner_txn_params%0%%ConfigAssetName_length#0: uint64 = 0u + let inner_txn_params%0%%ConfigAssetURL_length#0: uint64 = 0u + let inner_txn_params%0%%ConfigAssetMetadataHash_length#0: uint64 = 0u + let inner_txn_params%0%%ConfigAssetManager_length#0: uint64 = 0u + let inner_txn_params%0%%ConfigAssetReserve_length#0: uint64 = 0u + let inner_txn_params%0%%ConfigAssetFreeze_length#0: uint64 = 0u + let inner_txn_params%0%%ConfigAssetClawback_length#0: uint64 = 0u + let inner_txn_params%0%%FreezeAsset_length#0: uint64 = 0u + let inner_txn_params%0%%FreezeAssetAccount_length#0: uint64 = 0u + let inner_txn_params%0%%FreezeAssetFrozen_length#0: uint64 = 0u + let inner_txn_params%0%%GlobalNumUint_length#0: uint64 = 0u + let inner_txn_params%0%%GlobalNumByteSlice_length#0: uint64 = 0u + let inner_txn_params%0%%LocalNumUint_length#0: uint64 = 0u + let inner_txn_params%0%%LocalNumByteSlice_length#0: uint64 = 0u + let inner_txn_params%0%%ExtraProgramPages_length#0: uint64 = 0u + let inner_txn_params%0%%Nonparticipation_length#0: uint64 = 0u + let inner_txn_params%0%%StateProofPK_length#0: uint64 = 0u + let inner_txn_params%0%%Accounts_length#0: uint64 = 0u + let inner_txn_params%0%%Assets_length#0: uint64 = 0u + let inner_txn_params%0%%Applications_length#0: uint64 = 0u + let inner_txn_params%0%%ApprovalProgramPages_length#0: uint64 = 0u + let inner_txn_params%0%%ClearStateProgramPages_length#0: uint64 = 0u + ((itxn_field ApplicationID) inner_txn_params%0%%param_ApplicationID_idx_0#0) + ((itxn_field ApplicationArgs) inner_txn_params%0%%param_ApplicationArgs_idx_0#0) + ((itxn_field TypeEnum) inner_txn_params%0%%param_TypeEnum_idx_0#0) + ((itxn_field Fee) inner_txn_params%0%%param_Fee_idx_0#0) + goto block@1 + block@1: // next_txn_L217 + itxn_submit + let awst_tmp%0#0: bytes = itxn[itxn_group_idx(0)].LastLog + let tmp%0#0: bytes = ((extract 4 0) awst_tmp%0#0) + let tmp%1#0: bytes = ((extract 0 4) awst_tmp%0#0) + let tmp%2#0: bool = (== tmp%1#0 0x151f7c75) + (assert tmp%2#0) // ARC4 prefix is valid + let result#0: uint64 = (btoi tmp%0#0) + let _txn#0: itxn_group_idx = itxn_group_idx(0) + let _txn._is_last#0: bool = 1u + let _txn.Sender#0: bytes = itxn[_txn#0].Sender + let _txn.Fee#0: uint64 = itxn[_txn#0].Fee + let _txn.FirstValid#0: uint64 = itxn[_txn#0].FirstValid + let _txn.FirstValidTime#0: uint64 = itxn[_txn#0].FirstValidTime + let _txn.LastValid#0: uint64 = itxn[_txn#0].LastValid + let _txn.Note#0: bytes = itxn[_txn#0].Note + let _txn.Lease#0: bytes = itxn[_txn#0].Lease + let _txn.Receiver#0: bytes = itxn[_txn#0].Receiver + let _txn.Amount#0: uint64 = itxn[_txn#0].Amount + let _txn.CloseRemainderTo#0: bytes = itxn[_txn#0].CloseRemainderTo + let _txn.VotePK#0: bytes = itxn[_txn#0].VotePK + let _txn.SelectionPK#0: bytes = itxn[_txn#0].SelectionPK + let _txn.VoteFirst#0: uint64 = itxn[_txn#0].VoteFirst + let _txn.VoteLast#0: uint64 = itxn[_txn#0].VoteLast + let _txn.VoteKeyDilution#0: uint64 = itxn[_txn#0].VoteKeyDilution + let _txn.Type#0: bytes = itxn[_txn#0].Type + let _txn.TypeEnum#0: uint64 = itxn[_txn#0].TypeEnum + let _txn.XferAsset#0: uint64 = itxn[_txn#0].XferAsset + let _txn.AssetAmount#0: uint64 = itxn[_txn#0].AssetAmount + let _txn.AssetSender#0: bytes = itxn[_txn#0].AssetSender + let _txn.AssetReceiver#0: bytes = itxn[_txn#0].AssetReceiver + let _txn.AssetCloseTo#0: bytes = itxn[_txn#0].AssetCloseTo + let _txn.GroupIndex#0: uint64 = itxn[_txn#0].GroupIndex + let _txn.TxID#0: bytes = itxn[_txn#0].TxID + let _txn.ApplicationID#0: uint64 = itxn[_txn#0].ApplicationID + let _txn.OnCompletion#0: uint64 = itxn[_txn#0].OnCompletion + let _txn.NumAppArgs#0: uint64 = itxn[_txn#0].NumAppArgs + let _txn.NumAccounts#0: uint64 = itxn[_txn#0].NumAccounts + let _txn.ApprovalProgram#0: bytes = itxn[_txn#0].ApprovalProgram + let _txn.ClearStateProgram#0: bytes = itxn[_txn#0].ClearStateProgram + let _txn.RekeyTo#0: bytes = itxn[_txn#0].RekeyTo + let _txn.ConfigAsset#0: uint64 = itxn[_txn#0].ConfigAsset + let _txn.ConfigAssetTotal#0: uint64 = itxn[_txn#0].ConfigAssetTotal + let _txn.ConfigAssetDecimals#0: uint64 = itxn[_txn#0].ConfigAssetDecimals + let _txn.ConfigAssetDefaultFrozen#0: bool = itxn[_txn#0].ConfigAssetDefaultFrozen + let _txn.ConfigAssetUnitName#0: bytes = itxn[_txn#0].ConfigAssetUnitName + let _txn.ConfigAssetName#0: bytes = itxn[_txn#0].ConfigAssetName + let _txn.ConfigAssetURL#0: bytes = itxn[_txn#0].ConfigAssetURL + let _txn.ConfigAssetMetadataHash#0: bytes = itxn[_txn#0].ConfigAssetMetadataHash + let _txn.ConfigAssetManager#0: bytes = itxn[_txn#0].ConfigAssetManager + let _txn.ConfigAssetReserve#0: bytes = itxn[_txn#0].ConfigAssetReserve + let _txn.ConfigAssetFreeze#0: bytes = itxn[_txn#0].ConfigAssetFreeze + let _txn.ConfigAssetClawback#0: bytes = itxn[_txn#0].ConfigAssetClawback + let _txn.FreezeAsset#0: uint64 = itxn[_txn#0].FreezeAsset + let _txn.FreezeAssetAccount#0: bytes = itxn[_txn#0].FreezeAssetAccount + let _txn.FreezeAssetFrozen#0: bool = itxn[_txn#0].FreezeAssetFrozen + let _txn.NumAssets#0: uint64 = itxn[_txn#0].NumAssets + let _txn.NumApplications#0: uint64 = itxn[_txn#0].NumApplications + let _txn.GlobalNumUint#0: uint64 = itxn[_txn#0].GlobalNumUint + let _txn.GlobalNumByteSlice#0: uint64 = itxn[_txn#0].GlobalNumByteSlice + let _txn.LocalNumUint#0: uint64 = itxn[_txn#0].LocalNumUint + let _txn.LocalNumByteSlice#0: uint64 = itxn[_txn#0].LocalNumByteSlice + let _txn.ExtraProgramPages#0: uint64 = itxn[_txn#0].ExtraProgramPages + let _txn.Nonparticipation#0: bool = itxn[_txn#0].Nonparticipation + let _txn.NumLogs#0: uint64 = itxn[_txn#0].NumLogs + let _txn.CreatedAssetID#0: uint64 = itxn[_txn#0].CreatedAssetID + let _txn.CreatedApplicationID#0: uint64 = itxn[_txn#0].CreatedApplicationID + let _txn.LastLog#0: bytes = itxn[_txn#0].LastLog + let _txn.StateProofPK#0: bytes = itxn[_txn#0].StateProofPK + let _txn.NumApprovalProgramPages#0: uint64 = itxn[_txn#0].NumApprovalProgramPages + let _txn.NumClearStateProgramPages#0: uint64 = itxn[_txn#0].NumClearStateProgramPages + let tmp%3#0: bool = (== result#0 42u) + (assert tmp%3#0) + itxn_begin + let inner_txn_params%1#0: itxn_field_set = itxn_field_set(1) + let inner_txn_params%1%%param_Fee_idx_0#0: uint64 = 0u + let inner_txn_params%1%%Fee_length#0: uint64 = 1u + let inner_txn_params%1%%param_TypeEnum_idx_0#0: uint64 = appl + let inner_txn_params%1%%TypeEnum_length#0: uint64 = 1u + let inner_txn_params%1%%param_ApplicationArgs_idx_0#0: bytes = method "no_args()uint64" + let inner_txn_params%1%%ApplicationArgs_length#0: uint64 = 1u + let inner_txn_params%1%%param_ApplicationID_idx_0#0: uint64 = app#0 + let inner_txn_params%1%%ApplicationID_length#0: uint64 = 1u + let inner_txn_params%1%%Sender_length#0: uint64 = 0u + let inner_txn_params%1%%Note_length#0: uint64 = 0u + let inner_txn_params%1%%Receiver_length#0: uint64 = 0u + let inner_txn_params%1%%Amount_length#0: uint64 = 0u + let inner_txn_params%1%%CloseRemainderTo_length#0: uint64 = 0u + let inner_txn_params%1%%VotePK_length#0: uint64 = 0u + let inner_txn_params%1%%SelectionPK_length#0: uint64 = 0u + let inner_txn_params%1%%VoteFirst_length#0: uint64 = 0u + let inner_txn_params%1%%VoteLast_length#0: uint64 = 0u + let inner_txn_params%1%%VoteKeyDilution_length#0: uint64 = 0u + let inner_txn_params%1%%Type_length#0: uint64 = 0u + let inner_txn_params%1%%XferAsset_length#0: uint64 = 0u + let inner_txn_params%1%%AssetAmount_length#0: uint64 = 0u + let inner_txn_params%1%%AssetSender_length#0: uint64 = 0u + let inner_txn_params%1%%AssetReceiver_length#0: uint64 = 0u + let inner_txn_params%1%%AssetCloseTo_length#0: uint64 = 0u + let inner_txn_params%1%%OnCompletion_length#0: uint64 = 0u + let inner_txn_params%1%%ApprovalProgram_length#0: uint64 = 0u + let inner_txn_params%1%%ClearStateProgram_length#0: uint64 = 0u + let inner_txn_params%1%%RekeyTo_length#0: uint64 = 0u + let inner_txn_params%1%%ConfigAsset_length#0: uint64 = 0u + let inner_txn_params%1%%ConfigAssetTotal_length#0: uint64 = 0u + let inner_txn_params%1%%ConfigAssetDecimals_length#0: uint64 = 0u + let inner_txn_params%1%%ConfigAssetDefaultFrozen_length#0: uint64 = 0u + let inner_txn_params%1%%ConfigAssetUnitName_length#0: uint64 = 0u + let inner_txn_params%1%%ConfigAssetName_length#0: uint64 = 0u + let inner_txn_params%1%%ConfigAssetURL_length#0: uint64 = 0u + let inner_txn_params%1%%ConfigAssetMetadataHash_length#0: uint64 = 0u + let inner_txn_params%1%%ConfigAssetManager_length#0: uint64 = 0u + let inner_txn_params%1%%ConfigAssetReserve_length#0: uint64 = 0u + let inner_txn_params%1%%ConfigAssetFreeze_length#0: uint64 = 0u + let inner_txn_params%1%%ConfigAssetClawback_length#0: uint64 = 0u + let inner_txn_params%1%%FreezeAsset_length#0: uint64 = 0u + let inner_txn_params%1%%FreezeAssetAccount_length#0: uint64 = 0u + let inner_txn_params%1%%FreezeAssetFrozen_length#0: uint64 = 0u + let inner_txn_params%1%%GlobalNumUint_length#0: uint64 = 0u + let inner_txn_params%1%%GlobalNumByteSlice_length#0: uint64 = 0u + let inner_txn_params%1%%LocalNumUint_length#0: uint64 = 0u + let inner_txn_params%1%%LocalNumByteSlice_length#0: uint64 = 0u + let inner_txn_params%1%%ExtraProgramPages_length#0: uint64 = 0u + let inner_txn_params%1%%Nonparticipation_length#0: uint64 = 0u + let inner_txn_params%1%%StateProofPK_length#0: uint64 = 0u + let inner_txn_params%1%%Accounts_length#0: uint64 = 0u + let inner_txn_params%1%%Assets_length#0: uint64 = 0u + let inner_txn_params%1%%Applications_length#0: uint64 = 0u + let inner_txn_params%1%%ApprovalProgramPages_length#0: uint64 = 0u + let inner_txn_params%1%%ClearStateProgramPages_length#0: uint64 = 0u + ((itxn_field ApplicationID) inner_txn_params%1%%param_ApplicationID_idx_0#0) + ((itxn_field ApplicationArgs) inner_txn_params%1%%param_ApplicationArgs_idx_0#0) + ((itxn_field TypeEnum) inner_txn_params%1%%param_TypeEnum_idx_0#0) + ((itxn_field Fee) inner_txn_params%1%%param_Fee_idx_0#0) + goto block@2 + block@2: // next_txn_L219 + itxn_submit + let awst_tmp%1#0: bytes = itxn[itxn_group_idx(0)].LastLog + let tmp%4#0: bytes = ((extract 4 0) awst_tmp%1#0) + let tmp%5#0: bytes = ((extract 0 4) awst_tmp%1#0) + let tmp%6#0: bool = (== tmp%5#0 0x151f7c75) + (assert tmp%6#0) // ARC4 prefix is valid + let arc4_result#0: bytes = tmp%4#0 + let _txn#1: itxn_group_idx = itxn_group_idx(0) + let _txn._is_last#1: bool = 1u + let _txn.Sender#1: bytes = itxn[_txn#1].Sender + let _txn.Fee#1: uint64 = itxn[_txn#1].Fee + let _txn.FirstValid#1: uint64 = itxn[_txn#1].FirstValid + let _txn.FirstValidTime#1: uint64 = itxn[_txn#1].FirstValidTime + let _txn.LastValid#1: uint64 = itxn[_txn#1].LastValid + let _txn.Note#1: bytes = itxn[_txn#1].Note + let _txn.Lease#1: bytes = itxn[_txn#1].Lease + let _txn.Receiver#1: bytes = itxn[_txn#1].Receiver + let _txn.Amount#1: uint64 = itxn[_txn#1].Amount + let _txn.CloseRemainderTo#1: bytes = itxn[_txn#1].CloseRemainderTo + let _txn.VotePK#1: bytes = itxn[_txn#1].VotePK + let _txn.SelectionPK#1: bytes = itxn[_txn#1].SelectionPK + let _txn.VoteFirst#1: uint64 = itxn[_txn#1].VoteFirst + let _txn.VoteLast#1: uint64 = itxn[_txn#1].VoteLast + let _txn.VoteKeyDilution#1: uint64 = itxn[_txn#1].VoteKeyDilution + let _txn.Type#1: bytes = itxn[_txn#1].Type + let _txn.TypeEnum#1: uint64 = itxn[_txn#1].TypeEnum + let _txn.XferAsset#1: uint64 = itxn[_txn#1].XferAsset + let _txn.AssetAmount#1: uint64 = itxn[_txn#1].AssetAmount + let _txn.AssetSender#1: bytes = itxn[_txn#1].AssetSender + let _txn.AssetReceiver#1: bytes = itxn[_txn#1].AssetReceiver + let _txn.AssetCloseTo#1: bytes = itxn[_txn#1].AssetCloseTo + let _txn.GroupIndex#1: uint64 = itxn[_txn#1].GroupIndex + let _txn.TxID#1: bytes = itxn[_txn#1].TxID + let _txn.ApplicationID#1: uint64 = itxn[_txn#1].ApplicationID + let _txn.OnCompletion#1: uint64 = itxn[_txn#1].OnCompletion + let _txn.NumAppArgs#1: uint64 = itxn[_txn#1].NumAppArgs + let _txn.NumAccounts#1: uint64 = itxn[_txn#1].NumAccounts + let _txn.ApprovalProgram#1: bytes = itxn[_txn#1].ApprovalProgram + let _txn.ClearStateProgram#1: bytes = itxn[_txn#1].ClearStateProgram + let _txn.RekeyTo#1: bytes = itxn[_txn#1].RekeyTo + let _txn.ConfigAsset#1: uint64 = itxn[_txn#1].ConfigAsset + let _txn.ConfigAssetTotal#1: uint64 = itxn[_txn#1].ConfigAssetTotal + let _txn.ConfigAssetDecimals#1: uint64 = itxn[_txn#1].ConfigAssetDecimals + let _txn.ConfigAssetDefaultFrozen#1: bool = itxn[_txn#1].ConfigAssetDefaultFrozen + let _txn.ConfigAssetUnitName#1: bytes = itxn[_txn#1].ConfigAssetUnitName + let _txn.ConfigAssetName#1: bytes = itxn[_txn#1].ConfigAssetName + let _txn.ConfigAssetURL#1: bytes = itxn[_txn#1].ConfigAssetURL + let _txn.ConfigAssetMetadataHash#1: bytes = itxn[_txn#1].ConfigAssetMetadataHash + let _txn.ConfigAssetManager#1: bytes = itxn[_txn#1].ConfigAssetManager + let _txn.ConfigAssetReserve#1: bytes = itxn[_txn#1].ConfigAssetReserve + let _txn.ConfigAssetFreeze#1: bytes = itxn[_txn#1].ConfigAssetFreeze + let _txn.ConfigAssetClawback#1: bytes = itxn[_txn#1].ConfigAssetClawback + let _txn.FreezeAsset#1: uint64 = itxn[_txn#1].FreezeAsset + let _txn.FreezeAssetAccount#1: bytes = itxn[_txn#1].FreezeAssetAccount + let _txn.FreezeAssetFrozen#1: bool = itxn[_txn#1].FreezeAssetFrozen + let _txn.NumAssets#1: uint64 = itxn[_txn#1].NumAssets + let _txn.NumApplications#1: uint64 = itxn[_txn#1].NumApplications + let _txn.GlobalNumUint#1: uint64 = itxn[_txn#1].GlobalNumUint + let _txn.GlobalNumByteSlice#1: uint64 = itxn[_txn#1].GlobalNumByteSlice + let _txn.LocalNumUint#1: uint64 = itxn[_txn#1].LocalNumUint + let _txn.LocalNumByteSlice#1: uint64 = itxn[_txn#1].LocalNumByteSlice + let _txn.ExtraProgramPages#1: uint64 = itxn[_txn#1].ExtraProgramPages + let _txn.Nonparticipation#1: bool = itxn[_txn#1].Nonparticipation + let _txn.NumLogs#1: uint64 = itxn[_txn#1].NumLogs + let _txn.CreatedAssetID#1: uint64 = itxn[_txn#1].CreatedAssetID + let _txn.CreatedApplicationID#1: uint64 = itxn[_txn#1].CreatedApplicationID + let _txn.LastLog#1: bytes = itxn[_txn#1].LastLog + let _txn.StateProofPK#1: bytes = itxn[_txn#1].StateProofPK + let _txn.NumApprovalProgramPages#1: uint64 = itxn[_txn#1].NumApprovalProgramPages + let _txn.NumClearStateProgramPages#1: uint64 = itxn[_txn#1].NumClearStateProgramPages + let reinterpret_biguint%0#0: biguint = arc4_result#0 + let reinterpret_biguint%1#0: biguint = 0x000000000000002a + let tmp%7#0: bool = (b== reinterpret_biguint%0#0 reinterpret_biguint%1#0) + (assert tmp%7#0) + itxn_begin + let inner_txn_params%2#0: itxn_field_set = itxn_field_set(2) + let inner_txn_params%2%%param_Fee_idx_0#0: uint64 = 0u + let inner_txn_params%2%%Fee_length#0: uint64 = 1u + let inner_txn_params%2%%param_TypeEnum_idx_0#0: uint64 = appl + let inner_txn_params%2%%TypeEnum_length#0: uint64 = 1u + let inner_txn_params%2%%param_ApplicationArgs_idx_0#0: bytes = method "no_args()uint64" + let inner_txn_params%2%%ApplicationArgs_length#0: uint64 = 1u + let inner_txn_params%2%%param_ApplicationID_idx_0#0: uint64 = app#0 + let inner_txn_params%2%%ApplicationID_length#0: uint64 = 1u + let inner_txn_params%2%%Sender_length#0: uint64 = 0u + let inner_txn_params%2%%Note_length#0: uint64 = 0u + let inner_txn_params%2%%Receiver_length#0: uint64 = 0u + let inner_txn_params%2%%Amount_length#0: uint64 = 0u + let inner_txn_params%2%%CloseRemainderTo_length#0: uint64 = 0u + let inner_txn_params%2%%VotePK_length#0: uint64 = 0u + let inner_txn_params%2%%SelectionPK_length#0: uint64 = 0u + let inner_txn_params%2%%VoteFirst_length#0: uint64 = 0u + let inner_txn_params%2%%VoteLast_length#0: uint64 = 0u + let inner_txn_params%2%%VoteKeyDilution_length#0: uint64 = 0u + let inner_txn_params%2%%Type_length#0: uint64 = 0u + let inner_txn_params%2%%XferAsset_length#0: uint64 = 0u + let inner_txn_params%2%%AssetAmount_length#0: uint64 = 0u + let inner_txn_params%2%%AssetSender_length#0: uint64 = 0u + let inner_txn_params%2%%AssetReceiver_length#0: uint64 = 0u + let inner_txn_params%2%%AssetCloseTo_length#0: uint64 = 0u + let inner_txn_params%2%%OnCompletion_length#0: uint64 = 0u + let inner_txn_params%2%%ApprovalProgram_length#0: uint64 = 0u + let inner_txn_params%2%%ClearStateProgram_length#0: uint64 = 0u + let inner_txn_params%2%%RekeyTo_length#0: uint64 = 0u + let inner_txn_params%2%%ConfigAsset_length#0: uint64 = 0u + let inner_txn_params%2%%ConfigAssetTotal_length#0: uint64 = 0u + let inner_txn_params%2%%ConfigAssetDecimals_length#0: uint64 = 0u + let inner_txn_params%2%%ConfigAssetDefaultFrozen_length#0: uint64 = 0u + let inner_txn_params%2%%ConfigAssetUnitName_length#0: uint64 = 0u + let inner_txn_params%2%%ConfigAssetName_length#0: uint64 = 0u + let inner_txn_params%2%%ConfigAssetURL_length#0: uint64 = 0u + let inner_txn_params%2%%ConfigAssetMetadataHash_length#0: uint64 = 0u + let inner_txn_params%2%%ConfigAssetManager_length#0: uint64 = 0u + let inner_txn_params%2%%ConfigAssetReserve_length#0: uint64 = 0u + let inner_txn_params%2%%ConfigAssetFreeze_length#0: uint64 = 0u + let inner_txn_params%2%%ConfigAssetClawback_length#0: uint64 = 0u + let inner_txn_params%2%%FreezeAsset_length#0: uint64 = 0u + let inner_txn_params%2%%FreezeAssetAccount_length#0: uint64 = 0u + let inner_txn_params%2%%FreezeAssetFrozen_length#0: uint64 = 0u + let inner_txn_params%2%%GlobalNumUint_length#0: uint64 = 0u + let inner_txn_params%2%%GlobalNumByteSlice_length#0: uint64 = 0u + let inner_txn_params%2%%LocalNumUint_length#0: uint64 = 0u + let inner_txn_params%2%%LocalNumByteSlice_length#0: uint64 = 0u + let inner_txn_params%2%%ExtraProgramPages_length#0: uint64 = 0u + let inner_txn_params%2%%Nonparticipation_length#0: uint64 = 0u + let inner_txn_params%2%%StateProofPK_length#0: uint64 = 0u + let inner_txn_params%2%%Accounts_length#0: uint64 = 0u + let inner_txn_params%2%%Assets_length#0: uint64 = 0u + let inner_txn_params%2%%Applications_length#0: uint64 = 0u + let inner_txn_params%2%%ApprovalProgramPages_length#0: uint64 = 0u + let inner_txn_params%2%%ClearStateProgramPages_length#0: uint64 = 0u + ((itxn_field ApplicationID) inner_txn_params%2%%param_ApplicationID_idx_0#0) + ((itxn_field ApplicationArgs) inner_txn_params%2%%param_ApplicationArgs_idx_0#0) + ((itxn_field TypeEnum) inner_txn_params%2%%param_TypeEnum_idx_0#0) + ((itxn_field Fee) inner_txn_params%2%%param_Fee_idx_0#0) + goto block@3 + block@3: // next_txn_L222 + itxn_submit + let awst_tmp%2#0: bytes = itxn[itxn_group_idx(0)].LastLog + let tmp%8#0: bytes = ((extract 4 0) awst_tmp%2#0) + let tmp%9#0: bytes = ((extract 0 4) awst_tmp%2#0) + let tmp%10#0: bool = (== tmp%9#0 0x151f7c75) + (assert tmp%10#0) // ARC4 prefix is valid + let tmp%11#0: uint64 = (btoi tmp%8#0) + let awst_tmp%3#0: bytes = (itxn LastLog) + let tmp%12#0: bytes = ((extract 4 0) awst_tmp%3#0) + let tmp%13#0: bytes = ((extract 0 4) awst_tmp%3#0) + let tmp%14#0: bool = (== tmp%13#0 0x151f7c75) + (assert tmp%14#0) // ARC4 prefix is valid + let reinterpret_biguint%2#0: biguint = tmp%12#0 + let reinterpret_biguint%3#0: biguint = 0x000000000000002a + let tmp%15#0: bool = (b== reinterpret_biguint%2#0 reinterpret_biguint%3#0) + (assert tmp%15#0) + return program clear-state: subroutine test_cases.typed_abi_call.typed_c2c.Greeter.clear_state_program() -> bool: diff --git a/test_cases/typed_abi_call/out/Greeter.ssa.opt_pass_1.ir b/test_cases/typed_abi_call/out/Greeter.ssa.opt_pass_1.ir index 8f772591f8..2c2c65e08d 100644 --- a/test_cases/typed_abi_call/out/Greeter.ssa.opt_pass_1.ir +++ b/test_cases/typed_abi_call/out/Greeter.ssa.opt_pass_1.ir @@ -3,10 +3,10 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: subroutine test_cases.typed_abi_call.typed_c2c.Greeter.approval_program() -> bool: block@0: // L17 let tmp%0#0: bool = (txn NumAppArgs) - goto tmp%0#0 ? block@1 : block@15 + goto tmp%0#0 ? block@1 : block@16 block@1: // abi_routing_L17 let tmp%1#0: bytes = (txna ApplicationArgs 0) - switch tmp%1#0 {method "test_method_selector_kinds(application)void" => block@2, method "test_method_overload(application)void" => block@3, method "test_arg_conversion(application)void" => block@4, method "test_15plus_args(application)void" => block@5, method "test_void(application)void" => block@6, method "test_ref_types(application,asset)void" => block@7, method "test_native_string(application)void" => block@8, method "test_native_bytes(application)void" => block@9, method "test_native_uint64(application)void" => block@10, method "test_native_biguint(application)void" => block@11, method "test_native_tuple(application)void" => block@12, * => fail // reject transaction} + switch tmp%1#0 {method "test_method_selector_kinds(application)void" => block@2, method "test_method_overload(application)void" => block@3, method "test_arg_conversion(application)void" => block@4, method "test_15plus_args(application)void" => block@5, method "test_void(application)void" => block@6, method "test_ref_types(application,asset)void" => block@7, method "test_native_string(application)void" => block@8, method "test_native_bytes(application)void" => block@9, method "test_native_uint64(application)void" => block@10, method "test_native_biguint(application)void" => block@11, method "test_native_tuple(application)void" => block@12, method "test_no_args(application)void" => block@13, * => fail // reject transaction} block@2: // test_method_selector_kinds_route_L18 let tmp%2#0: uint64 = (txn OnCompletion) let tmp%3#0: bool = (! tmp%2#0) @@ -131,13 +131,24 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: let tmp%70#0: uint64 = ((txnas Applications) tmp%69#0) test_cases.typed_abi_call.typed_c2c.Greeter.test_native_tuple(tmp%70#0) return 1u - block@15: // bare_routing_L17 + block@13: // test_no_args_route_L215 let tmp%71#0: uint64 = (txn OnCompletion) - let not%tmp%71#0: bool = (! tmp%71#0) - (assert not%tmp%71#0) // reject transaction - let tmp%72#0: bool = (txn ApplicationID) - let tmp%73#0: bool = (! tmp%72#0) - (assert tmp%73#0) // is creating + let tmp%72#0: bool = (! tmp%71#0) + (assert tmp%72#0) // OnCompletion is NoOp + let tmp%73#0: bool = (txn ApplicationID) + (assert tmp%73#0) // is not creating + let tmp%74#0: bytes = (txna ApplicationArgs 1) + let tmp%75#0: uint64 = (btoi tmp%74#0) + let tmp%76#0: uint64 = ((txnas Applications) tmp%75#0) + test_cases.typed_abi_call.typed_c2c.Greeter.test_no_args(tmp%76#0) + return 1u + block@16: // bare_routing_L17 + let tmp%77#0: uint64 = (txn OnCompletion) + let not%tmp%77#0: bool = (! tmp%77#0) + (assert not%tmp%77#0) // reject transaction + let tmp%78#0: bool = (txn ApplicationID) + let tmp%79#0: bool = (! tmp%78#0) + (assert tmp%79#0) // is creating return 1u subroutine test_cases.typed_abi_call.typed_c2c.Greeter.test_method_selector_kinds(app: uint64) -> void: @@ -877,6 +888,55 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: let tmp%18#0: bool = (== result1#0 result3#0) (assert tmp%18#0) return + + subroutine test_cases.typed_abi_call.typed_c2c.Greeter.test_no_args(app: uint64) -> void: + block@0: // L215 + itxn_begin + ((itxn_field ApplicationID) app#0) + ((itxn_field ApplicationArgs) method "no_args()uint64") + ((itxn_field TypeEnum) appl) + ((itxn_field Fee) 0u) + itxn_submit + let awst_tmp%0#0: bytes = (itxn LastLog) + let tmp%0#0: bytes = ((extract 4 0) awst_tmp%0#0) + let tmp%1#0: bytes = ((extract 0 4) awst_tmp%0#0) + let tmp%2#0: bool = (== tmp%1#0 0x151f7c75) + (assert tmp%2#0) // ARC4 prefix is valid + let result#0: uint64 = (btoi tmp%0#0) + let tmp%3#0: bool = (== result#0 42u) + (assert tmp%3#0) + itxn_begin + ((itxn_field ApplicationID) app#0) + ((itxn_field ApplicationArgs) method "no_args()uint64") + ((itxn_field TypeEnum) appl) + ((itxn_field Fee) 0u) + itxn_submit + let awst_tmp%1#0: bytes = (itxn LastLog) + let arc4_result#0: bytes = ((extract 4 0) awst_tmp%1#0) + let tmp%5#0: bytes = ((extract 0 4) awst_tmp%1#0) + let tmp%6#0: bool = (== tmp%5#0 0x151f7c75) + (assert tmp%6#0) // ARC4 prefix is valid + let tmp%7#0: bool = (b== arc4_result#0 0x000000000000002a) + (assert tmp%7#0) + itxn_begin + ((itxn_field ApplicationID) app#0) + ((itxn_field ApplicationArgs) method "no_args()uint64") + ((itxn_field TypeEnum) appl) + ((itxn_field Fee) 0u) + itxn_submit + let awst_tmp%2#0: bytes = (itxn LastLog) + let tmp%8#0: bytes = ((extract 4 0) awst_tmp%2#0) + let tmp%9#0: bytes = ((extract 0 4) awst_tmp%2#0) + let tmp%10#0: bool = (== tmp%9#0 0x151f7c75) + (assert tmp%10#0) // ARC4 prefix is valid + let awst_tmp%3#0: bytes = (itxn LastLog) + let tmp%12#0: bytes = ((extract 4 0) awst_tmp%3#0) + let tmp%13#0: bytes = ((extract 0 4) awst_tmp%3#0) + let tmp%14#0: bool = (== tmp%13#0 0x151f7c75) + (assert tmp%14#0) // ARC4 prefix is valid + let tmp%15#0: bool = (b== tmp%12#0 0x000000000000002a) + (assert tmp%15#0) + return program clear-state: subroutine test_cases.typed_abi_call.typed_c2c.Greeter.clear_state_program() -> bool: diff --git a/test_cases/typed_abi_call/out/Greeter.ssa.opt_pass_2.ir b/test_cases/typed_abi_call/out/Greeter.ssa.opt_pass_2.ir index 51d8373fc1..2e0a34f11d 100644 --- a/test_cases/typed_abi_call/out/Greeter.ssa.opt_pass_2.ir +++ b/test_cases/typed_abi_call/out/Greeter.ssa.opt_pass_2.ir @@ -3,10 +3,10 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: subroutine test_cases.typed_abi_call.typed_c2c.Greeter.approval_program() -> bool: block@0: // L17 let tmp%0#0: bool = (txn NumAppArgs) - goto tmp%0#0 ? block@1 : block@15 + goto tmp%0#0 ? block@1 : block@16 block@1: // abi_routing_L17 let tmp%1#0: bytes = (txna ApplicationArgs 0) - switch tmp%1#0 {method "test_method_selector_kinds(application)void" => block@2, method "test_method_overload(application)void" => block@3, method "test_arg_conversion(application)void" => block@4, method "test_15plus_args(application)void" => block@5, method "test_void(application)void" => block@6, method "test_ref_types(application,asset)void" => block@7, method "test_native_string(application)void" => block@8, method "test_native_bytes(application)void" => block@9, method "test_native_uint64(application)void" => block@10, method "test_native_biguint(application)void" => block@11, method "test_native_tuple(application)void" => block@12, * => fail // reject transaction} + switch tmp%1#0 {method "test_method_selector_kinds(application)void" => block@2, method "test_method_overload(application)void" => block@3, method "test_arg_conversion(application)void" => block@4, method "test_15plus_args(application)void" => block@5, method "test_void(application)void" => block@6, method "test_ref_types(application,asset)void" => block@7, method "test_native_string(application)void" => block@8, method "test_native_bytes(application)void" => block@9, method "test_native_uint64(application)void" => block@10, method "test_native_biguint(application)void" => block@11, method "test_native_tuple(application)void" => block@12, method "test_no_args(application)void" => block@13, * => fail // reject transaction} block@2: // test_method_selector_kinds_route_L18 let tmp%2#0: uint64 = (txn OnCompletion) let tmp%3#0: bool = (! tmp%2#0) @@ -131,13 +131,24 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: let tmp%70#0: uint64 = ((txnas Applications) tmp%69#0) test_cases.typed_abi_call.typed_c2c.Greeter.test_native_tuple(tmp%70#0) return 1u - block@15: // bare_routing_L17 + block@13: // test_no_args_route_L215 let tmp%71#0: uint64 = (txn OnCompletion) - let not%tmp%71#0: bool = (! tmp%71#0) - (assert not%tmp%71#0) // reject transaction - let tmp%72#0: bool = (txn ApplicationID) - let tmp%73#0: bool = (! tmp%72#0) - (assert tmp%73#0) // is creating + let tmp%72#0: bool = (! tmp%71#0) + (assert tmp%72#0) // OnCompletion is NoOp + let tmp%73#0: bool = (txn ApplicationID) + (assert tmp%73#0) // is not creating + let tmp%74#0: bytes = (txna ApplicationArgs 1) + let tmp%75#0: uint64 = (btoi tmp%74#0) + let tmp%76#0: uint64 = ((txnas Applications) tmp%75#0) + test_cases.typed_abi_call.typed_c2c.Greeter.test_no_args(tmp%76#0) + return 1u + block@16: // bare_routing_L17 + let tmp%77#0: uint64 = (txn OnCompletion) + let not%tmp%77#0: bool = (! tmp%77#0) + (assert not%tmp%77#0) // reject transaction + let tmp%78#0: bool = (txn ApplicationID) + let tmp%79#0: bool = (! tmp%78#0) + (assert tmp%79#0) // is creating return 1u subroutine test_cases.typed_abi_call.typed_c2c.Greeter.test_method_selector_kinds(app: uint64) -> void: @@ -795,6 +806,54 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: let tmp%18#0: bool = (== result1#0 result3#0) (assert tmp%18#0) return + + subroutine test_cases.typed_abi_call.typed_c2c.Greeter.test_no_args(app: uint64) -> void: + block@0: // L215 + itxn_begin + ((itxn_field ApplicationID) app#0) + ((itxn_field ApplicationArgs) method "no_args()uint64") + ((itxn_field TypeEnum) appl) + ((itxn_field Fee) 0u) + itxn_submit + let awst_tmp%0#0: bytes = (itxn LastLog) + let tmp%0#0: bytes = ((extract 4 0) awst_tmp%0#0) + let tmp%1#0: bytes = ((extract 0 4) awst_tmp%0#0) + let tmp%2#0: bool = (== tmp%1#0 0x151f7c75) + (assert tmp%2#0) // ARC4 prefix is valid + let result#0: uint64 = (btoi tmp%0#0) + let tmp%3#0: bool = (== result#0 42u) + (assert tmp%3#0) + itxn_begin + ((itxn_field ApplicationID) app#0) + ((itxn_field ApplicationArgs) method "no_args()uint64") + ((itxn_field TypeEnum) appl) + ((itxn_field Fee) 0u) + itxn_submit + let awst_tmp%1#0: bytes = (itxn LastLog) + let arc4_result#0: bytes = ((extract 4 0) awst_tmp%1#0) + let tmp%5#0: bytes = ((extract 0 4) awst_tmp%1#0) + let tmp%6#0: bool = (== tmp%5#0 0x151f7c75) + (assert tmp%6#0) // ARC4 prefix is valid + let tmp%7#0: bool = (b== arc4_result#0 0x000000000000002a) + (assert tmp%7#0) + itxn_begin + ((itxn_field ApplicationID) app#0) + ((itxn_field ApplicationArgs) method "no_args()uint64") + ((itxn_field TypeEnum) appl) + ((itxn_field Fee) 0u) + itxn_submit + let awst_tmp%2#0: bytes = (itxn LastLog) + let tmp%9#0: bytes = ((extract 0 4) awst_tmp%2#0) + let tmp%10#0: bool = (== tmp%9#0 0x151f7c75) + (assert tmp%10#0) // ARC4 prefix is valid + let awst_tmp%3#0: bytes = (itxn LastLog) + let tmp%12#0: bytes = ((extract 4 0) awst_tmp%3#0) + let tmp%13#0: bytes = ((extract 0 4) awst_tmp%3#0) + let tmp%14#0: bool = (== tmp%13#0 0x151f7c75) + (assert tmp%14#0) // ARC4 prefix is valid + let tmp%15#0: bool = (b== tmp%12#0 0x000000000000002a) + (assert tmp%15#0) + return program clear-state: subroutine test_cases.typed_abi_call.typed_c2c.Greeter.clear_state_program() -> bool: diff --git a/test_cases/typed_abi_call/out/Greeter.ssa.opt_pass_3.ir b/test_cases/typed_abi_call/out/Greeter.ssa.opt_pass_3.ir index 2dca5d9e9a..b6b023bd6a 100644 --- a/test_cases/typed_abi_call/out/Greeter.ssa.opt_pass_3.ir +++ b/test_cases/typed_abi_call/out/Greeter.ssa.opt_pass_3.ir @@ -3,10 +3,10 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: subroutine test_cases.typed_abi_call.typed_c2c.Greeter.approval_program() -> bool: block@0: // L17 let tmp%0#0: bool = (txn NumAppArgs) - goto tmp%0#0 ? block@1 : block@15 + goto tmp%0#0 ? block@1 : block@16 block@1: // abi_routing_L17 let tmp%1#0: bytes = (txna ApplicationArgs 0) - switch tmp%1#0 {method "test_method_selector_kinds(application)void" => block@2, method "test_method_overload(application)void" => block@3, method "test_arg_conversion(application)void" => block@4, method "test_15plus_args(application)void" => block@5, method "test_void(application)void" => block@6, method "test_ref_types(application,asset)void" => block@7, method "test_native_string(application)void" => block@8, method "test_native_bytes(application)void" => block@9, method "test_native_uint64(application)void" => block@10, method "test_native_biguint(application)void" => block@11, method "test_native_tuple(application)void" => block@12, * => fail // reject transaction} + switch tmp%1#0 {method "test_method_selector_kinds(application)void" => block@2, method "test_method_overload(application)void" => block@3, method "test_arg_conversion(application)void" => block@4, method "test_15plus_args(application)void" => block@5, method "test_void(application)void" => block@6, method "test_ref_types(application,asset)void" => block@7, method "test_native_string(application)void" => block@8, method "test_native_bytes(application)void" => block@9, method "test_native_uint64(application)void" => block@10, method "test_native_biguint(application)void" => block@11, method "test_native_tuple(application)void" => block@12, method "test_no_args(application)void" => block@13, * => fail // reject transaction} block@2: // test_method_selector_kinds_route_L18 let tmp%2#0: uint64 = (txn OnCompletion) let tmp%3#0: bool = (! tmp%2#0) @@ -131,13 +131,24 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: let tmp%70#0: uint64 = ((txnas Applications) tmp%69#0) test_cases.typed_abi_call.typed_c2c.Greeter.test_native_tuple(tmp%70#0) return 1u - block@15: // bare_routing_L17 + block@13: // test_no_args_route_L215 let tmp%71#0: uint64 = (txn OnCompletion) - let not%tmp%71#0: bool = (! tmp%71#0) - (assert not%tmp%71#0) // reject transaction - let tmp%72#0: bool = (txn ApplicationID) - let tmp%73#0: bool = (! tmp%72#0) - (assert tmp%73#0) // is creating + let tmp%72#0: bool = (! tmp%71#0) + (assert tmp%72#0) // OnCompletion is NoOp + let tmp%73#0: bool = (txn ApplicationID) + (assert tmp%73#0) // is not creating + let tmp%74#0: bytes = (txna ApplicationArgs 1) + let tmp%75#0: uint64 = (btoi tmp%74#0) + let tmp%76#0: uint64 = ((txnas Applications) tmp%75#0) + test_cases.typed_abi_call.typed_c2c.Greeter.test_no_args(tmp%76#0) + return 1u + block@16: // bare_routing_L17 + let tmp%77#0: uint64 = (txn OnCompletion) + let not%tmp%77#0: bool = (! tmp%77#0) + (assert not%tmp%77#0) // reject transaction + let tmp%78#0: bool = (txn ApplicationID) + let tmp%79#0: bool = (! tmp%78#0) + (assert tmp%79#0) // is creating return 1u subroutine test_cases.typed_abi_call.typed_c2c.Greeter.test_method_selector_kinds(app: uint64) -> void: @@ -752,6 +763,54 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: let tmp%18#0: bool = (== result1#0 result3#0) (assert tmp%18#0) return + + subroutine test_cases.typed_abi_call.typed_c2c.Greeter.test_no_args(app: uint64) -> void: + block@0: // L215 + itxn_begin + ((itxn_field ApplicationID) app#0) + ((itxn_field ApplicationArgs) method "no_args()uint64") + ((itxn_field TypeEnum) appl) + ((itxn_field Fee) 0u) + itxn_submit + let awst_tmp%0#0: bytes = (itxn LastLog) + let tmp%0#0: bytes = ((extract 4 0) awst_tmp%0#0) + let tmp%1#0: bytes = ((extract 0 4) awst_tmp%0#0) + let tmp%2#0: bool = (== tmp%1#0 0x151f7c75) + (assert tmp%2#0) // ARC4 prefix is valid + let result#0: uint64 = (btoi tmp%0#0) + let tmp%3#0: bool = (== result#0 42u) + (assert tmp%3#0) + itxn_begin + ((itxn_field ApplicationID) app#0) + ((itxn_field ApplicationArgs) method "no_args()uint64") + ((itxn_field TypeEnum) appl) + ((itxn_field Fee) 0u) + itxn_submit + let awst_tmp%1#0: bytes = (itxn LastLog) + let arc4_result#0: bytes = ((extract 4 0) awst_tmp%1#0) + let tmp%5#0: bytes = ((extract 0 4) awst_tmp%1#0) + let tmp%6#0: bool = (== tmp%5#0 0x151f7c75) + (assert tmp%6#0) // ARC4 prefix is valid + let tmp%7#0: bool = (b== arc4_result#0 0x000000000000002a) + (assert tmp%7#0) + itxn_begin + ((itxn_field ApplicationID) app#0) + ((itxn_field ApplicationArgs) method "no_args()uint64") + ((itxn_field TypeEnum) appl) + ((itxn_field Fee) 0u) + itxn_submit + let awst_tmp%2#0: bytes = (itxn LastLog) + let tmp%9#0: bytes = ((extract 0 4) awst_tmp%2#0) + let tmp%10#0: bool = (== tmp%9#0 0x151f7c75) + (assert tmp%10#0) // ARC4 prefix is valid + let awst_tmp%3#0: bytes = (itxn LastLog) + let tmp%12#0: bytes = ((extract 4 0) awst_tmp%3#0) + let tmp%13#0: bytes = ((extract 0 4) awst_tmp%3#0) + let tmp%14#0: bool = (== tmp%13#0 0x151f7c75) + (assert tmp%14#0) // ARC4 prefix is valid + let tmp%15#0: bool = (b== tmp%12#0 0x000000000000002a) + (assert tmp%15#0) + return program clear-state: subroutine test_cases.typed_abi_call.typed_c2c.Greeter.clear_state_program() -> bool: diff --git a/test_cases/typed_abi_call/out/Greeter.ssa.opt_pass_4.ir b/test_cases/typed_abi_call/out/Greeter.ssa.opt_pass_4.ir index ecd58d696d..97efdde2cd 100644 --- a/test_cases/typed_abi_call/out/Greeter.ssa.opt_pass_4.ir +++ b/test_cases/typed_abi_call/out/Greeter.ssa.opt_pass_4.ir @@ -3,10 +3,10 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: subroutine test_cases.typed_abi_call.typed_c2c.Greeter.approval_program() -> bool: block@0: // L17 let tmp%0#0: bool = (txn NumAppArgs) - goto tmp%0#0 ? block@1 : block@15 + goto tmp%0#0 ? block@1 : block@16 block@1: // abi_routing_L17 let tmp%1#0: bytes = (txna ApplicationArgs 0) - switch tmp%1#0 {method "test_method_selector_kinds(application)void" => block@2, method "test_method_overload(application)void" => block@3, method "test_arg_conversion(application)void" => block@4, method "test_15plus_args(application)void" => block@5, method "test_void(application)void" => block@6, method "test_ref_types(application,asset)void" => block@7, method "test_native_string(application)void" => block@8, method "test_native_bytes(application)void" => block@9, method "test_native_uint64(application)void" => block@10, method "test_native_biguint(application)void" => block@11, method "test_native_tuple(application)void" => block@12, * => fail // reject transaction} + switch tmp%1#0 {method "test_method_selector_kinds(application)void" => block@2, method "test_method_overload(application)void" => block@3, method "test_arg_conversion(application)void" => block@4, method "test_15plus_args(application)void" => block@5, method "test_void(application)void" => block@6, method "test_ref_types(application,asset)void" => block@7, method "test_native_string(application)void" => block@8, method "test_native_bytes(application)void" => block@9, method "test_native_uint64(application)void" => block@10, method "test_native_biguint(application)void" => block@11, method "test_native_tuple(application)void" => block@12, method "test_no_args(application)void" => block@13, * => fail // reject transaction} block@2: // test_method_selector_kinds_route_L18 let tmp%2#0: uint64 = (txn OnCompletion) let tmp%3#0: bool = (! tmp%2#0) @@ -131,13 +131,24 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: let tmp%70#0: uint64 = ((txnas Applications) tmp%69#0) test_cases.typed_abi_call.typed_c2c.Greeter.test_native_tuple(tmp%70#0) return 1u - block@15: // bare_routing_L17 + block@13: // test_no_args_route_L215 let tmp%71#0: uint64 = (txn OnCompletion) - let not%tmp%71#0: bool = (! tmp%71#0) - (assert not%tmp%71#0) // reject transaction - let tmp%72#0: bool = (txn ApplicationID) - let tmp%73#0: bool = (! tmp%72#0) - (assert tmp%73#0) // is creating + let tmp%72#0: bool = (! tmp%71#0) + (assert tmp%72#0) // OnCompletion is NoOp + let tmp%73#0: bool = (txn ApplicationID) + (assert tmp%73#0) // is not creating + let tmp%74#0: bytes = (txna ApplicationArgs 1) + let tmp%75#0: uint64 = (btoi tmp%74#0) + let tmp%76#0: uint64 = ((txnas Applications) tmp%75#0) + test_cases.typed_abi_call.typed_c2c.Greeter.test_no_args(tmp%76#0) + return 1u + block@16: // bare_routing_L17 + let tmp%77#0: uint64 = (txn OnCompletion) + let not%tmp%77#0: bool = (! tmp%77#0) + (assert not%tmp%77#0) // reject transaction + let tmp%78#0: bool = (txn ApplicationID) + let tmp%79#0: bool = (! tmp%78#0) + (assert tmp%79#0) // is creating return 1u subroutine test_cases.typed_abi_call.typed_c2c.Greeter.test_method_selector_kinds(app: uint64) -> void: @@ -713,6 +724,54 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: let tmp%18#0: bool = (== result1#0 result3#0) (assert tmp%18#0) return + + subroutine test_cases.typed_abi_call.typed_c2c.Greeter.test_no_args(app: uint64) -> void: + block@0: // L215 + itxn_begin + ((itxn_field ApplicationID) app#0) + ((itxn_field ApplicationArgs) method "no_args()uint64") + ((itxn_field TypeEnum) appl) + ((itxn_field Fee) 0u) + itxn_submit + let awst_tmp%0#0: bytes = (itxn LastLog) + let tmp%0#0: bytes = ((extract 4 0) awst_tmp%0#0) + let tmp%1#0: bytes = ((extract 0 4) awst_tmp%0#0) + let tmp%2#0: bool = (== tmp%1#0 0x151f7c75) + (assert tmp%2#0) // ARC4 prefix is valid + let result#0: uint64 = (btoi tmp%0#0) + let tmp%3#0: bool = (== result#0 42u) + (assert tmp%3#0) + itxn_begin + ((itxn_field ApplicationID) app#0) + ((itxn_field ApplicationArgs) method "no_args()uint64") + ((itxn_field TypeEnum) appl) + ((itxn_field Fee) 0u) + itxn_submit + let awst_tmp%1#0: bytes = (itxn LastLog) + let arc4_result#0: bytes = ((extract 4 0) awst_tmp%1#0) + let tmp%5#0: bytes = ((extract 0 4) awst_tmp%1#0) + let tmp%6#0: bool = (== tmp%5#0 0x151f7c75) + (assert tmp%6#0) // ARC4 prefix is valid + let tmp%7#0: bool = (b== arc4_result#0 0x000000000000002a) + (assert tmp%7#0) + itxn_begin + ((itxn_field ApplicationID) app#0) + ((itxn_field ApplicationArgs) method "no_args()uint64") + ((itxn_field TypeEnum) appl) + ((itxn_field Fee) 0u) + itxn_submit + let awst_tmp%2#0: bytes = (itxn LastLog) + let tmp%9#0: bytes = ((extract 0 4) awst_tmp%2#0) + let tmp%10#0: bool = (== tmp%9#0 0x151f7c75) + (assert tmp%10#0) // ARC4 prefix is valid + let awst_tmp%3#0: bytes = (itxn LastLog) + let tmp%12#0: bytes = ((extract 4 0) awst_tmp%3#0) + let tmp%13#0: bytes = ((extract 0 4) awst_tmp%3#0) + let tmp%14#0: bool = (== tmp%13#0 0x151f7c75) + (assert tmp%14#0) // ARC4 prefix is valid + let tmp%15#0: bool = (b== tmp%12#0 0x000000000000002a) + (assert tmp%15#0) + return program clear-state: subroutine test_cases.typed_abi_call.typed_c2c.Greeter.clear_state_program() -> bool: diff --git a/test_cases/typed_abi_call/out/Greeter.ssa.opt_pass_5.ir b/test_cases/typed_abi_call/out/Greeter.ssa.opt_pass_5.ir index e32c252642..b64e0d0f77 100644 --- a/test_cases/typed_abi_call/out/Greeter.ssa.opt_pass_5.ir +++ b/test_cases/typed_abi_call/out/Greeter.ssa.opt_pass_5.ir @@ -3,10 +3,10 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: subroutine test_cases.typed_abi_call.typed_c2c.Greeter.approval_program() -> bool: block@0: // L17 let tmp%0#0: bool = (txn NumAppArgs) - goto tmp%0#0 ? block@1 : block@15 + goto tmp%0#0 ? block@1 : block@16 block@1: // abi_routing_L17 let tmp%1#0: bytes = (txna ApplicationArgs 0) - switch tmp%1#0 {method "test_method_selector_kinds(application)void" => block@2, method "test_method_overload(application)void" => block@3, method "test_arg_conversion(application)void" => block@4, method "test_15plus_args(application)void" => block@5, method "test_void(application)void" => block@6, method "test_ref_types(application,asset)void" => block@7, method "test_native_string(application)void" => block@8, method "test_native_bytes(application)void" => block@9, method "test_native_uint64(application)void" => block@10, method "test_native_biguint(application)void" => block@11, method "test_native_tuple(application)void" => block@12, * => fail // reject transaction} + switch tmp%1#0 {method "test_method_selector_kinds(application)void" => block@2, method "test_method_overload(application)void" => block@3, method "test_arg_conversion(application)void" => block@4, method "test_15plus_args(application)void" => block@5, method "test_void(application)void" => block@6, method "test_ref_types(application,asset)void" => block@7, method "test_native_string(application)void" => block@8, method "test_native_bytes(application)void" => block@9, method "test_native_uint64(application)void" => block@10, method "test_native_biguint(application)void" => block@11, method "test_native_tuple(application)void" => block@12, method "test_no_args(application)void" => block@13, * => fail // reject transaction} block@2: // test_method_selector_kinds_route_L18 let tmp%2#0: uint64 = (txn OnCompletion) let tmp%3#0: bool = (! tmp%2#0) @@ -131,13 +131,24 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: let tmp%70#0: uint64 = ((txnas Applications) tmp%69#0) test_cases.typed_abi_call.typed_c2c.Greeter.test_native_tuple(tmp%70#0) return 1u - block@15: // bare_routing_L17 + block@13: // test_no_args_route_L215 let tmp%71#0: uint64 = (txn OnCompletion) - let not%tmp%71#0: bool = (! tmp%71#0) - (assert not%tmp%71#0) // reject transaction - let tmp%72#0: bool = (txn ApplicationID) - let tmp%73#0: bool = (! tmp%72#0) - (assert tmp%73#0) // is creating + let tmp%72#0: bool = (! tmp%71#0) + (assert tmp%72#0) // OnCompletion is NoOp + let tmp%73#0: bool = (txn ApplicationID) + (assert tmp%73#0) // is not creating + let tmp%74#0: bytes = (txna ApplicationArgs 1) + let tmp%75#0: uint64 = (btoi tmp%74#0) + let tmp%76#0: uint64 = ((txnas Applications) tmp%75#0) + test_cases.typed_abi_call.typed_c2c.Greeter.test_no_args(tmp%76#0) + return 1u + block@16: // bare_routing_L17 + let tmp%77#0: uint64 = (txn OnCompletion) + let not%tmp%77#0: bool = (! tmp%77#0) + (assert not%tmp%77#0) // reject transaction + let tmp%78#0: bool = (txn ApplicationID) + let tmp%79#0: bool = (! tmp%78#0) + (assert tmp%79#0) // is creating return 1u subroutine test_cases.typed_abi_call.typed_c2c.Greeter.test_method_selector_kinds(app: uint64) -> void: @@ -711,6 +722,54 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: let tmp%18#0: bool = (== result1#0 result3#0) (assert tmp%18#0) return + + subroutine test_cases.typed_abi_call.typed_c2c.Greeter.test_no_args(app: uint64) -> void: + block@0: // L215 + itxn_begin + ((itxn_field ApplicationID) app#0) + ((itxn_field ApplicationArgs) method "no_args()uint64") + ((itxn_field TypeEnum) appl) + ((itxn_field Fee) 0u) + itxn_submit + let awst_tmp%0#0: bytes = (itxn LastLog) + let tmp%0#0: bytes = ((extract 4 0) awst_tmp%0#0) + let tmp%1#0: bytes = ((extract 0 4) awst_tmp%0#0) + let tmp%2#0: bool = (== tmp%1#0 0x151f7c75) + (assert tmp%2#0) // ARC4 prefix is valid + let result#0: uint64 = (btoi tmp%0#0) + let tmp%3#0: bool = (== result#0 42u) + (assert tmp%3#0) + itxn_begin + ((itxn_field ApplicationID) app#0) + ((itxn_field ApplicationArgs) method "no_args()uint64") + ((itxn_field TypeEnum) appl) + ((itxn_field Fee) 0u) + itxn_submit + let awst_tmp%1#0: bytes = (itxn LastLog) + let arc4_result#0: bytes = ((extract 4 0) awst_tmp%1#0) + let tmp%5#0: bytes = ((extract 0 4) awst_tmp%1#0) + let tmp%6#0: bool = (== tmp%5#0 0x151f7c75) + (assert tmp%6#0) // ARC4 prefix is valid + let tmp%7#0: bool = (b== arc4_result#0 0x000000000000002a) + (assert tmp%7#0) + itxn_begin + ((itxn_field ApplicationID) app#0) + ((itxn_field ApplicationArgs) method "no_args()uint64") + ((itxn_field TypeEnum) appl) + ((itxn_field Fee) 0u) + itxn_submit + let awst_tmp%2#0: bytes = (itxn LastLog) + let tmp%9#0: bytes = ((extract 0 4) awst_tmp%2#0) + let tmp%10#0: bool = (== tmp%9#0 0x151f7c75) + (assert tmp%10#0) // ARC4 prefix is valid + let awst_tmp%3#0: bytes = (itxn LastLog) + let tmp%12#0: bytes = ((extract 4 0) awst_tmp%3#0) + let tmp%13#0: bytes = ((extract 0 4) awst_tmp%3#0) + let tmp%14#0: bool = (== tmp%13#0 0x151f7c75) + (assert tmp%14#0) // ARC4 prefix is valid + let tmp%15#0: bool = (b== tmp%12#0 0x000000000000002a) + (assert tmp%15#0) + return program clear-state: subroutine test_cases.typed_abi_call.typed_c2c.Greeter.clear_state_program() -> bool: diff --git a/test_cases/typed_abi_call/out/Greeter.ssa.opt_pass_6.ir b/test_cases/typed_abi_call/out/Greeter.ssa.opt_pass_6.ir index 2f8c20715f..1dcbe6a501 100644 --- a/test_cases/typed_abi_call/out/Greeter.ssa.opt_pass_6.ir +++ b/test_cases/typed_abi_call/out/Greeter.ssa.opt_pass_6.ir @@ -3,10 +3,10 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: subroutine test_cases.typed_abi_call.typed_c2c.Greeter.approval_program() -> bool: block@0: // L17 let tmp%0#0: bool = (txn NumAppArgs) - goto tmp%0#0 ? block@1 : block@15 + goto tmp%0#0 ? block@1 : block@16 block@1: // abi_routing_L17 let tmp%1#0: bytes = (txna ApplicationArgs 0) - switch tmp%1#0 {method "test_method_selector_kinds(application)void" => block@2, method "test_method_overload(application)void" => block@3, method "test_arg_conversion(application)void" => block@4, method "test_15plus_args(application)void" => block@5, method "test_void(application)void" => block@6, method "test_ref_types(application,asset)void" => block@7, method "test_native_string(application)void" => block@8, method "test_native_bytes(application)void" => block@9, method "test_native_uint64(application)void" => block@10, method "test_native_biguint(application)void" => block@11, method "test_native_tuple(application)void" => block@12, * => fail // reject transaction} + switch tmp%1#0 {method "test_method_selector_kinds(application)void" => block@2, method "test_method_overload(application)void" => block@3, method "test_arg_conversion(application)void" => block@4, method "test_15plus_args(application)void" => block@5, method "test_void(application)void" => block@6, method "test_ref_types(application,asset)void" => block@7, method "test_native_string(application)void" => block@8, method "test_native_bytes(application)void" => block@9, method "test_native_uint64(application)void" => block@10, method "test_native_biguint(application)void" => block@11, method "test_native_tuple(application)void" => block@12, method "test_no_args(application)void" => block@13, * => fail // reject transaction} block@2: // test_method_selector_kinds_route_L18 let tmp%2#0: uint64 = (txn OnCompletion) let tmp%3#0: bool = (! tmp%2#0) @@ -131,13 +131,24 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: let tmp%70#0: uint64 = ((txnas Applications) tmp%69#0) test_cases.typed_abi_call.typed_c2c.Greeter.test_native_tuple(tmp%70#0) return 1u - block@15: // bare_routing_L17 + block@13: // test_no_args_route_L215 let tmp%71#0: uint64 = (txn OnCompletion) - let not%tmp%71#0: bool = (! tmp%71#0) - (assert not%tmp%71#0) // reject transaction - let tmp%72#0: bool = (txn ApplicationID) - let tmp%73#0: bool = (! tmp%72#0) - (assert tmp%73#0) // is creating + let tmp%72#0: bool = (! tmp%71#0) + (assert tmp%72#0) // OnCompletion is NoOp + let tmp%73#0: bool = (txn ApplicationID) + (assert tmp%73#0) // is not creating + let tmp%74#0: bytes = (txna ApplicationArgs 1) + let tmp%75#0: uint64 = (btoi tmp%74#0) + let tmp%76#0: uint64 = ((txnas Applications) tmp%75#0) + test_cases.typed_abi_call.typed_c2c.Greeter.test_no_args(tmp%76#0) + return 1u + block@16: // bare_routing_L17 + let tmp%77#0: uint64 = (txn OnCompletion) + let not%tmp%77#0: bool = (! tmp%77#0) + (assert not%tmp%77#0) // reject transaction + let tmp%78#0: bool = (txn ApplicationID) + let tmp%79#0: bool = (! tmp%78#0) + (assert tmp%79#0) // is creating return 1u subroutine test_cases.typed_abi_call.typed_c2c.Greeter.test_method_selector_kinds(app: uint64) -> void: @@ -710,6 +721,54 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: let tmp%18#0: bool = (== result1#0 result3#0) (assert tmp%18#0) return + + subroutine test_cases.typed_abi_call.typed_c2c.Greeter.test_no_args(app: uint64) -> void: + block@0: // L215 + itxn_begin + ((itxn_field ApplicationID) app#0) + ((itxn_field ApplicationArgs) method "no_args()uint64") + ((itxn_field TypeEnum) appl) + ((itxn_field Fee) 0u) + itxn_submit + let awst_tmp%0#0: bytes = (itxn LastLog) + let tmp%0#0: bytes = ((extract 4 0) awst_tmp%0#0) + let tmp%1#0: bytes = ((extract 0 4) awst_tmp%0#0) + let tmp%2#0: bool = (== tmp%1#0 0x151f7c75) + (assert tmp%2#0) // ARC4 prefix is valid + let result#0: uint64 = (btoi tmp%0#0) + let tmp%3#0: bool = (== result#0 42u) + (assert tmp%3#0) + itxn_begin + ((itxn_field ApplicationID) app#0) + ((itxn_field ApplicationArgs) method "no_args()uint64") + ((itxn_field TypeEnum) appl) + ((itxn_field Fee) 0u) + itxn_submit + let awst_tmp%1#0: bytes = (itxn LastLog) + let arc4_result#0: bytes = ((extract 4 0) awst_tmp%1#0) + let tmp%5#0: bytes = ((extract 0 4) awst_tmp%1#0) + let tmp%6#0: bool = (== tmp%5#0 0x151f7c75) + (assert tmp%6#0) // ARC4 prefix is valid + let tmp%7#0: bool = (b== arc4_result#0 0x000000000000002a) + (assert tmp%7#0) + itxn_begin + ((itxn_field ApplicationID) app#0) + ((itxn_field ApplicationArgs) method "no_args()uint64") + ((itxn_field TypeEnum) appl) + ((itxn_field Fee) 0u) + itxn_submit + let awst_tmp%2#0: bytes = (itxn LastLog) + let tmp%9#0: bytes = ((extract 0 4) awst_tmp%2#0) + let tmp%10#0: bool = (== tmp%9#0 0x151f7c75) + (assert tmp%10#0) // ARC4 prefix is valid + let awst_tmp%3#0: bytes = (itxn LastLog) + let tmp%12#0: bytes = ((extract 4 0) awst_tmp%3#0) + let tmp%13#0: bytes = ((extract 0 4) awst_tmp%3#0) + let tmp%14#0: bool = (== tmp%13#0 0x151f7c75) + (assert tmp%14#0) // ARC4 prefix is valid + let tmp%15#0: bool = (b== tmp%12#0 0x000000000000002a) + (assert tmp%15#0) + return program clear-state: subroutine test_cases.typed_abi_call.typed_c2c.Greeter.clear_state_program() -> bool: diff --git a/test_cases/typed_abi_call/out/Greeter.ssa.opt_pass_7.ir b/test_cases/typed_abi_call/out/Greeter.ssa.opt_pass_7.ir index 4d2d2c3dff..1921622246 100644 --- a/test_cases/typed_abi_call/out/Greeter.ssa.opt_pass_7.ir +++ b/test_cases/typed_abi_call/out/Greeter.ssa.opt_pass_7.ir @@ -3,10 +3,10 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: subroutine test_cases.typed_abi_call.typed_c2c.Greeter.approval_program() -> bool: block@0: // L17 let tmp%0#0: bool = (txn NumAppArgs) - goto tmp%0#0 ? block@1 : block@15 + goto tmp%0#0 ? block@1 : block@16 block@1: // abi_routing_L17 let tmp%1#0: bytes = (txna ApplicationArgs 0) - switch tmp%1#0 {method "test_method_selector_kinds(application)void" => block@2, method "test_method_overload(application)void" => block@3, method "test_arg_conversion(application)void" => block@4, method "test_15plus_args(application)void" => block@5, method "test_void(application)void" => block@6, method "test_ref_types(application,asset)void" => block@7, method "test_native_string(application)void" => block@8, method "test_native_bytes(application)void" => block@9, method "test_native_uint64(application)void" => block@10, method "test_native_biguint(application)void" => block@11, method "test_native_tuple(application)void" => block@12, * => fail // reject transaction} + switch tmp%1#0 {method "test_method_selector_kinds(application)void" => block@2, method "test_method_overload(application)void" => block@3, method "test_arg_conversion(application)void" => block@4, method "test_15plus_args(application)void" => block@5, method "test_void(application)void" => block@6, method "test_ref_types(application,asset)void" => block@7, method "test_native_string(application)void" => block@8, method "test_native_bytes(application)void" => block@9, method "test_native_uint64(application)void" => block@10, method "test_native_biguint(application)void" => block@11, method "test_native_tuple(application)void" => block@12, method "test_no_args(application)void" => block@13, * => fail // reject transaction} block@2: // test_method_selector_kinds_route_L18 let tmp%2#0: uint64 = (txn OnCompletion) let tmp%3#0: bool = (! tmp%2#0) @@ -131,13 +131,24 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: let tmp%70#0: uint64 = ((txnas Applications) tmp%69#0) test_cases.typed_abi_call.typed_c2c.Greeter.test_native_tuple(tmp%70#0) return 1u - block@15: // bare_routing_L17 + block@13: // test_no_args_route_L215 let tmp%71#0: uint64 = (txn OnCompletion) - let not%tmp%71#0: bool = (! tmp%71#0) - (assert not%tmp%71#0) // reject transaction - let tmp%72#0: bool = (txn ApplicationID) - let tmp%73#0: bool = (! tmp%72#0) - (assert tmp%73#0) // is creating + let tmp%72#0: bool = (! tmp%71#0) + (assert tmp%72#0) // OnCompletion is NoOp + let tmp%73#0: bool = (txn ApplicationID) + (assert tmp%73#0) // is not creating + let tmp%74#0: bytes = (txna ApplicationArgs 1) + let tmp%75#0: uint64 = (btoi tmp%74#0) + let tmp%76#0: uint64 = ((txnas Applications) tmp%75#0) + test_cases.typed_abi_call.typed_c2c.Greeter.test_no_args(tmp%76#0) + return 1u + block@16: // bare_routing_L17 + let tmp%77#0: uint64 = (txn OnCompletion) + let not%tmp%77#0: bool = (! tmp%77#0) + (assert not%tmp%77#0) // reject transaction + let tmp%78#0: bool = (txn ApplicationID) + let tmp%79#0: bool = (! tmp%78#0) + (assert tmp%79#0) // is creating return 1u subroutine test_cases.typed_abi_call.typed_c2c.Greeter.test_method_selector_kinds(app: uint64) -> void: @@ -709,6 +720,54 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: let tmp%18#0: bool = (== result1#0 result3#0) (assert tmp%18#0) return + + subroutine test_cases.typed_abi_call.typed_c2c.Greeter.test_no_args(app: uint64) -> void: + block@0: // L215 + itxn_begin + ((itxn_field ApplicationID) app#0) + ((itxn_field ApplicationArgs) method "no_args()uint64") + ((itxn_field TypeEnum) appl) + ((itxn_field Fee) 0u) + itxn_submit + let awst_tmp%0#0: bytes = (itxn LastLog) + let tmp%0#0: bytes = ((extract 4 0) awst_tmp%0#0) + let tmp%1#0: bytes = ((extract 0 4) awst_tmp%0#0) + let tmp%2#0: bool = (== tmp%1#0 0x151f7c75) + (assert tmp%2#0) // ARC4 prefix is valid + let result#0: uint64 = (btoi tmp%0#0) + let tmp%3#0: bool = (== result#0 42u) + (assert tmp%3#0) + itxn_begin + ((itxn_field ApplicationID) app#0) + ((itxn_field ApplicationArgs) method "no_args()uint64") + ((itxn_field TypeEnum) appl) + ((itxn_field Fee) 0u) + itxn_submit + let awst_tmp%1#0: bytes = (itxn LastLog) + let arc4_result#0: bytes = ((extract 4 0) awst_tmp%1#0) + let tmp%5#0: bytes = ((extract 0 4) awst_tmp%1#0) + let tmp%6#0: bool = (== tmp%5#0 0x151f7c75) + (assert tmp%6#0) // ARC4 prefix is valid + let tmp%7#0: bool = (b== arc4_result#0 0x000000000000002a) + (assert tmp%7#0) + itxn_begin + ((itxn_field ApplicationID) app#0) + ((itxn_field ApplicationArgs) method "no_args()uint64") + ((itxn_field TypeEnum) appl) + ((itxn_field Fee) 0u) + itxn_submit + let awst_tmp%2#0: bytes = (itxn LastLog) + let tmp%9#0: bytes = ((extract 0 4) awst_tmp%2#0) + let tmp%10#0: bool = (== tmp%9#0 0x151f7c75) + (assert tmp%10#0) // ARC4 prefix is valid + let awst_tmp%3#0: bytes = (itxn LastLog) + let tmp%12#0: bytes = ((extract 4 0) awst_tmp%3#0) + let tmp%13#0: bytes = ((extract 0 4) awst_tmp%3#0) + let tmp%14#0: bool = (== tmp%13#0 0x151f7c75) + (assert tmp%14#0) // ARC4 prefix is valid + let tmp%15#0: bool = (b== tmp%12#0 0x000000000000002a) + (assert tmp%15#0) + return program clear-state: subroutine test_cases.typed_abi_call.typed_c2c.Greeter.clear_state_program() -> bool: diff --git a/test_cases/typed_abi_call/out/Logger.approval.mir b/test_cases/typed_abi_call/out/Logger.approval.mir index 14ce422160..b68a162db5 100644 --- a/test_cases/typed_abi_call/out/Logger.approval.mir +++ b/test_cases/typed_abi_call/out/Logger.approval.mir @@ -1,852 +1,888 @@ -// Op // Op Description Stack (out) X stack Source code Source line +// Op // Op Description Stack (out) X stack Source code Source line #pragma version 10 // test_cases.typed_abi_call.logger.Logger.approval_program() -> uint64: main_block@0: - txn NumAppArgs // {txn} class Logger(ARC4Contract): typed_abi_call/logger.py:20 - // virtual: store tmp%0#0 to l-stack (no copy) tmp%0#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 - // virtual: load tmp%0#0 from l-stack (no copy) tmp%0#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 - bz main_bare_routing@17 // class Logger(ARC4Contract): typed_abi_call/logger.py:20 - // Implicit fall through to main_abi_routing@1 // class Logger(ARC4Contract): typed_abi_call/logger.py:20 + txn NumAppArgs // {txn} class Logger(ARC4Contract): typed_abi_call/logger.py:20 + // virtual: store tmp%0#0 to l-stack (no copy) tmp%0#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 + // virtual: load tmp%0#0 from l-stack (no copy) tmp%0#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 + bz main_bare_routing@18 // class Logger(ARC4Contract): typed_abi_call/logger.py:20 + // Implicit fall through to main_abi_routing@1 // class Logger(ARC4Contract): typed_abi_call/logger.py:20 main_abi_routing@1: - txna ApplicationArgs 0 // {txna} class Logger(ARC4Contract): typed_abi_call/logger.py:20 - // virtual: store tmp%1#0 to l-stack (no copy) tmp%1#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 - method "echo(string)string" // tmp%1#0,method<"echo(string)string"> class Logger(ARC4Contract): typed_abi_call/logger.py:20 - method "log(uint64)void" // tmp%1#0,method<"echo(string)string">,method<"log(uint64)void"> class Logger(ARC4Contract): typed_abi_call/logger.py:20 - method "log(uint512)void" // tmp%1#0,method<"echo(string)string">,method<"log(uint64)void">,method<"log(uint512)void"> class Logger(ARC4Contract): typed_abi_call/logger.py:20 - method "log(string)void" // tmp%1#0,method<"echo(string)string">,method<"log(uint64)void">,method<"log(uint512)void">,method<"log(string)void"> class Logger(ARC4Contract): typed_abi_call/logger.py:20 - method "log(bool)void" // tmp%1#0,method<"echo(string)string">,method<"log(uint64)void">,method<"log(uint512)void">,method<"log(string)void">,method<"log(bool)void"> class Logger(ARC4Contract): typed_abi_call/logger.py:20 - method "log(byte[])void" // tmp%1#0,method<"echo(string)string">,method<"log(uint64)void">,method<"log(uint512)void">,method<"log(string)void">,method<"log(bool)void">,method<"log(byte[])void"> class Logger(ARC4Contract): typed_abi_call/logger.py:20 - method "log(asset,account,application)void" // tmp%1#0,method<"echo(string)string">,method<"log(uint64)void">,method<"log(uint512)void">,method<"log(string)void">,method<"log(bool)void">,method<"log(byte[])void">,method<"log(asset,account,application)void"> class Logger(ARC4Contract): typed_abi_call/logger.py:20 - method "echo_native_string(string)string" // tmp%1#0,method<"echo(string)string">,method<"log(uint64)void">,method<"log(uint512)void">,method<"log(string)void">,method<"log(bool)void">,method<"log(byte[])void">,method<"log(asset,account,application)void">,method<"echo_native_string(string)string"> class Logger(ARC4Contract): typed_abi_call/logger.py:20 - method "echo_native_bytes(byte[])byte[]" // tmp%1#0,method<"echo(string)string">,method<"log(uint64)void">,method<"log(uint512)void">,method<"log(string)void">,method<"log(bool)void">,method<"log(byte[])void">,method<"log(asset,account,application)void">,method<"echo_native_string(string)string">,method<"echo_native_bytes(byte[])byte[]"> class Logger(ARC4Contract): typed_abi_call/logger.py:20 - method "echo_native_uint64(uint64)uint64" // tmp%1#0,method<"echo(string)string">,method<"log(uint64)void">,method<"log(uint512)void">,method<"log(string)void">,method<"log(bool)void">,method<"log(byte[])void">,method<"log(asset,account,application)void">,method<"echo_native_string(string)string">,method<"echo_native_bytes(byte[])byte[]">,method<"echo_native_uint64(uint64)uint64"> class Logger(ARC4Contract): typed_abi_call/logger.py:20 - method "echo_native_biguint(uint512)uint512" // tmp%1#0,method<"echo(string)string">,method<"log(uint64)void">,method<"log(uint512)void">,method<"log(string)void">,method<"log(bool)void">,method<"log(byte[])void">,method<"log(asset,account,application)void">,method<"echo_native_string(string)string">,method<"echo_native_bytes(byte[])byte[]">,method<"echo_native_uint64(uint64)uint64">,method<"echo_native_biguint(uint512)uint512"> class Logger(ARC4Contract): typed_abi_call/logger.py:20 - method "echo_native_tuple(string,byte[],uint64,uint512)(string,byte[],uint64,uint512)" // tmp%1#0,method<"echo(string)string">,method<"log(uint64)void">,method<"log(uint512)void">,method<"log(string)void">,method<"log(bool)void">,method<"log(byte[])void">,method<"log(asset,account,application)void">,method<"echo_native_string(string)string">,method<"echo_native_bytes(byte[])byte[]">,method<"echo_native_uint64(uint64)uint64">,method<"echo_native_biguint(uint512)uint512">,method<"echo_native_tuple(string,byte[],uint64,uint512)(string,byte[],uint64,uint512)"> class Logger(ARC4Contract): typed_abi_call/logger.py:20 - method "return_args_after_14th(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint8,uint8,uint8,uint8,(uint8,uint8,uint8,uint8),uint8)byte[]" // tmp%1#0,method<"echo(string)string">,method<"log(uint64)void">,method<"log(uint512)void">,method<"log(string)void">,method<"log(bool)void">,method<"log(byte[])void">,method<"log(asset,account,application)void">,method<"echo_native_string(string)string">,method<"echo_native_bytes(byte[])byte[]">,method<"echo_native_uint64(uint64)uint64">,method<"echo_native_biguint(uint512)uint512">,method<"echo_native_tuple(string,byte[],uint64,uint512)(string,byte[],uint64,uint512)">,method<"return_args_after_14th(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint8,uint8,uint8,uint8,(uint8,uint8,uint8,uint8),uint8)byte[]"> class Logger(ARC4Contract): typed_abi_call/logger.py:20 - uncover 13 // load tmp%1#0 from l-stack (no copy) method<"echo(string)string">,method<"log(uint64)void">,method<"log(uint512)void">,method<"log(string)void">,method<"log(bool)void">,method<"log(byte[])void">,method<"log(asset,account,application)void">,method<"echo_native_string(string)string">,method<"echo_native_bytes(byte[])byte[]">,method<"echo_native_uint64(uint64)uint64">,method<"echo_native_biguint(uint512)uint512">,method<"echo_native_tuple(string,byte[],uint64,uint512)(string,byte[],uint64,uint512)">,method<"return_args_after_14th(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint8,uint8,uint8,uint8,(uint8,uint8,uint8,uint8),uint8)byte[]">,tmp%1#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 - match main_echo_route@2 main_log_route@3 main_log_route@4 main_log_route@5 main_log_route@6 main_log_route@7 main_log_route@8 main_echo_native_string_route@9 main_echo_native_bytes_route@10 main_echo_native_uint64_route@11 main_echo_native_biguint_route@12 main_echo_native_tuple_route@13 main_return_args_after_14th_route@14 // class Logger(ARC4Contract): typed_abi_call/logger.py:20 - err // reject transaction // class Logger(ARC4Contract): typed_abi_call/logger.py:20 + txna ApplicationArgs 0 // {txna} class Logger(ARC4Contract): typed_abi_call/logger.py:20 + // virtual: store tmp%1#0 to l-stack (no copy) tmp%1#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 + method "echo(string)string" // tmp%1#0,method<"echo(string)string"> class Logger(ARC4Contract): typed_abi_call/logger.py:20 + method "no_args()uint64" // tmp%1#0,method<"echo(string)string">,method<"no_args()uint64"> class Logger(ARC4Contract): typed_abi_call/logger.py:20 + method "log(uint64)void" // tmp%1#0,method<"echo(string)string">,method<"no_args()uint64">,method<"log(uint64)void"> class Logger(ARC4Contract): typed_abi_call/logger.py:20 + method "log(uint512)void" // tmp%1#0,method<"echo(string)string">,method<"no_args()uint64">,method<"log(uint64)void">,method<"log(uint512)void"> class Logger(ARC4Contract): typed_abi_call/logger.py:20 + method "log(string)void" // tmp%1#0,method<"echo(string)string">,method<"no_args()uint64">,method<"log(uint64)void">,method<"log(uint512)void">,method<"log(string)void"> class Logger(ARC4Contract): typed_abi_call/logger.py:20 + method "log(bool)void" // tmp%1#0,method<"echo(string)string">,method<"no_args()uint64">,method<"log(uint64)void">,method<"log(uint512)void">,method<"log(string)void">,method<"log(bool)void"> class Logger(ARC4Contract): typed_abi_call/logger.py:20 + method "log(byte[])void" // tmp%1#0,method<"echo(string)string">,method<"no_args()uint64">,method<"log(uint64)void">,method<"log(uint512)void">,method<"log(string)void">,method<"log(bool)void">,method<"log(byte[])void"> class Logger(ARC4Contract): typed_abi_call/logger.py:20 + method "log(asset,account,application)void" // tmp%1#0,method<"echo(string)string">,method<"no_args()uint64">,method<"log(uint64)void">,method<"log(uint512)void">,method<"log(string)void">,method<"log(bool)void">,method<"log(byte[])void">,method<"log(asset,account,application)void"> class Logger(ARC4Contract): typed_abi_call/logger.py:20 + method "echo_native_string(string)string" // tmp%1#0,method<"echo(string)string">,method<"no_args()uint64">,method<"log(uint64)void">,method<"log(uint512)void">,method<"log(string)void">,method<"log(bool)void">,method<"log(byte[])void">,method<"log(asset,account,application)void">,method<"echo_native_string(string)string"> class Logger(ARC4Contract): typed_abi_call/logger.py:20 + method "echo_native_bytes(byte[])byte[]" // tmp%1#0,method<"echo(string)string">,method<"no_args()uint64">,method<"log(uint64)void">,method<"log(uint512)void">,method<"log(string)void">,method<"log(bool)void">,method<"log(byte[])void">,method<"log(asset,account,application)void">,method<"echo_native_string(string)string">,method<"echo_native_bytes(byte[])byte[]"> class Logger(ARC4Contract): typed_abi_call/logger.py:20 + method "echo_native_uint64(uint64)uint64" // tmp%1#0,method<"echo(string)string">,method<"no_args()uint64">,method<"log(uint64)void">,method<"log(uint512)void">,method<"log(string)void">,method<"log(bool)void">,method<"log(byte[])void">,method<"log(asset,account,application)void">,method<"echo_native_string(string)string">,method<"echo_native_bytes(byte[])byte[]">,method<"echo_native_uint64(uint64)uint64"> class Logger(ARC4Contract): typed_abi_call/logger.py:20 + method "echo_native_biguint(uint512)uint512" // tmp%1#0,method<"echo(string)string">,method<"no_args()uint64">,method<"log(uint64)void">,method<"log(uint512)void">,method<"log(string)void">,method<"log(bool)void">,method<"log(byte[])void">,method<"log(asset,account,application)void">,method<"echo_native_string(string)string">,method<"echo_native_bytes(byte[])byte[]">,method<"echo_native_uint64(uint64)uint64">,method<"echo_native_biguint(uint512)uint512"> class Logger(ARC4Contract): typed_abi_call/logger.py:20 + method "echo_native_tuple(string,byte[],uint64,uint512)(string,byte[],uint64,uint512)" // tmp%1#0,method<"echo(string)string">,method<"no_args()uint64">,method<"log(uint64)void">,method<"log(uint512)void">,method<"log(string)void">,method<"log(bool)void">,method<"log(byte[])void">,method<"log(asset,account,application)void">,method<"echo_native_string(string)string">,method<"echo_native_bytes(byte[])byte[]">,method<"echo_native_uint64(uint64)uint64">,method<"echo_native_biguint(uint512)uint512">,method<"echo_native_tuple(string,byte[],uint64,uint512)(string,byte[],uint64,uint512)"> class Logger(ARC4Contract): typed_abi_call/logger.py:20 + method "return_args_after_14th(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint8,uint8,uint8,uint8,(uint8,uint8,uint8,uint8),uint8)byte[]" // tmp%1#0,method<"echo(string)string">,method<"no_args()uint64">,method<"log(uint64)void">,method<"log(uint512)void">,method<"log(string)void">,method<"log(bool)void">,method<"log(byte[])void">,method<"log(asset,account,application)void">,method<"echo_native_string(string)string">,method<"echo_native_bytes(byte[])byte[]">,method<"echo_native_uint64(uint64)uint64">,method<"echo_native_biguint(uint512)uint512">,method<"echo_native_tuple(string,byte[],uint64,uint512)(string,byte[],uint64,uint512)">,method<"return_args_after_14th(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint8,uint8,uint8,uint8,(uint8,uint8,uint8,uint8),uint8)byte[]"> class Logger(ARC4Contract): typed_abi_call/logger.py:20 + uncover 14 // load tmp%1#0 from l-stack (no copy) method<"echo(string)string">,method<"no_args()uint64">,method<"log(uint64)void">,method<"log(uint512)void">,method<"log(string)void">,method<"log(bool)void">,method<"log(byte[])void">,method<"log(asset,account,application)void">,method<"echo_native_string(string)string">,method<"echo_native_bytes(byte[])byte[]">,method<"echo_native_uint64(uint64)uint64">,method<"echo_native_biguint(uint512)uint512">,method<"echo_native_tuple(string,byte[],uint64,uint512)(string,byte[],uint64,uint512)">,method<"return_args_after_14th(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint8,uint8,uint8,uint8,(uint8,uint8,uint8,uint8),uint8)byte[]">,tmp%1#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 + match main_echo_route@2 main_no_args_route@3 main_log_route@4 main_log_route@5 main_log_route@6 main_log_route@7 main_log_route@8 main_log_route@9 main_echo_native_string_route@10 main_echo_native_bytes_route@11 main_echo_native_uint64_route@12 main_echo_native_biguint_route@13 main_echo_native_tuple_route@14 main_return_args_after_14th_route@15 // class Logger(ARC4Contract): typed_abi_call/logger.py:20 + err // reject transaction // class Logger(ARC4Contract): typed_abi_call/logger.py:20 main_echo_route@2: - txn OnCompletion // {txn} arc4.abimethod typed_abi_call/logger.py:21 - // virtual: store tmp%2#0 to l-stack (no copy) tmp%2#0 arc4.abimethod typed_abi_call/logger.py:21 - // virtual: load tmp%2#0 from l-stack (no copy) tmp%2#0 arc4.abimethod typed_abi_call/logger.py:21 - ! // {!} arc4.abimethod typed_abi_call/logger.py:21 - // virtual: store tmp%3#0 to l-stack (no copy) tmp%3#0 arc4.abimethod typed_abi_call/logger.py:21 - // virtual: load tmp%3#0 from l-stack (no copy) tmp%3#0 arc4.abimethod typed_abi_call/logger.py:21 - assert // OnCompletion is NoOp // arc4.abimethod typed_abi_call/logger.py:21 - txn ApplicationID // {txn} arc4.abimethod typed_abi_call/logger.py:21 - // virtual: store tmp%4#0 to l-stack (no copy) tmp%4#0 arc4.abimethod typed_abi_call/logger.py:21 - // virtual: load tmp%4#0 from l-stack (no copy) tmp%4#0 arc4.abimethod typed_abi_call/logger.py:21 - assert // is not creating // arc4.abimethod typed_abi_call/logger.py:21 - txna ApplicationArgs 1 // {txna} class Logger(ARC4Contract): typed_abi_call/logger.py:20 - // virtual: store tmp%5#0 to l-stack (no copy) tmp%5#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 - // virtual: load tmp%5#0 from l-stack (no copy) tmp%5#0 arc4.abimethod typed_abi_call/logger.py:21 - callsub echo // {echo} arc4.abimethod typed_abi_call/logger.py:21 - // virtual: store tmp%6#0 to l-stack (no copy) tmp%6#0 arc4.abimethod typed_abi_call/logger.py:21 - byte 0x151f7c75 // tmp%6#0,0x151f7c75 arc4.abimethod typed_abi_call/logger.py:21 - uncover 1 // load tmp%6#0 from l-stack (no copy) 0x151f7c75,tmp%6#0 arc4.abimethod typed_abi_call/logger.py:21 - concat // {concat} arc4.abimethod typed_abi_call/logger.py:21 - // virtual: store tmp%7#0 to l-stack (no copy) tmp%7#0 arc4.abimethod typed_abi_call/logger.py:21 - // virtual: load tmp%7#0 from l-stack (no copy) tmp%7#0 arc4.abimethod typed_abi_call/logger.py:21 - log // arc4.abimethod typed_abi_call/logger.py:21 - int 1 // 1 arc4.abimethod typed_abi_call/logger.py:21 - return // arc4.abimethod typed_abi_call/logger.py:21 - -main_log_route@3: - txn OnCompletion // {txn} arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:25 - // virtual: store tmp%8#0 to l-stack (no copy) tmp%8#0 arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:25 - // virtual: load tmp%8#0 from l-stack (no copy) tmp%8#0 arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:25 - ! // {!} arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:25 - // virtual: store tmp%9#0 to l-stack (no copy) tmp%9#0 arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:25 - // virtual: load tmp%9#0 from l-stack (no copy) tmp%9#0 arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:25 - assert // OnCompletion is NoOp // arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:25 - txn ApplicationID // {txn} arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:25 - // virtual: store tmp%10#0 to l-stack (no copy) tmp%10#0 arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:25 - // virtual: load tmp%10#0 from l-stack (no copy) tmp%10#0 arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:25 - assert // is not creating // arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:25 - txna ApplicationArgs 1 // {txna} class Logger(ARC4Contract): typed_abi_call/logger.py:20 - // virtual: store tmp%11#0 to l-stack (no copy) tmp%11#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 - // virtual: load tmp%11#0 from l-stack (no copy) tmp%11#0 arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:25 - callsub log_uint64 // arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:25 - int 1 // 1 arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:25 - return // arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:25 + txn OnCompletion // {txn} arc4.abimethod typed_abi_call/logger.py:21 + // virtual: store tmp%2#0 to l-stack (no copy) tmp%2#0 arc4.abimethod typed_abi_call/logger.py:21 + // virtual: load tmp%2#0 from l-stack (no copy) tmp%2#0 arc4.abimethod typed_abi_call/logger.py:21 + ! // {!} arc4.abimethod typed_abi_call/logger.py:21 + // virtual: store tmp%3#0 to l-stack (no copy) tmp%3#0 arc4.abimethod typed_abi_call/logger.py:21 + // virtual: load tmp%3#0 from l-stack (no copy) tmp%3#0 arc4.abimethod typed_abi_call/logger.py:21 + assert // OnCompletion is NoOp // arc4.abimethod typed_abi_call/logger.py:21 + txn ApplicationID // {txn} arc4.abimethod typed_abi_call/logger.py:21 + // virtual: store tmp%4#0 to l-stack (no copy) tmp%4#0 arc4.abimethod typed_abi_call/logger.py:21 + // virtual: load tmp%4#0 from l-stack (no copy) tmp%4#0 arc4.abimethod typed_abi_call/logger.py:21 + assert // is not creating // arc4.abimethod typed_abi_call/logger.py:21 + txna ApplicationArgs 1 // {txna} class Logger(ARC4Contract): typed_abi_call/logger.py:20 + // virtual: store tmp%5#0 to l-stack (no copy) tmp%5#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 + // virtual: load tmp%5#0 from l-stack (no copy) tmp%5#0 arc4.abimethod typed_abi_call/logger.py:21 + callsub echo // {echo} arc4.abimethod typed_abi_call/logger.py:21 + // virtual: store tmp%6#0 to l-stack (no copy) tmp%6#0 arc4.abimethod typed_abi_call/logger.py:21 + byte 0x151f7c75 // tmp%6#0,0x151f7c75 arc4.abimethod typed_abi_call/logger.py:21 + uncover 1 // load tmp%6#0 from l-stack (no copy) 0x151f7c75,tmp%6#0 arc4.abimethod typed_abi_call/logger.py:21 + concat // {concat} arc4.abimethod typed_abi_call/logger.py:21 + // virtual: store tmp%7#0 to l-stack (no copy) tmp%7#0 arc4.abimethod typed_abi_call/logger.py:21 + // virtual: load tmp%7#0 from l-stack (no copy) tmp%7#0 arc4.abimethod typed_abi_call/logger.py:21 + log // arc4.abimethod typed_abi_call/logger.py:21 + int 1 // 1 arc4.abimethod typed_abi_call/logger.py:21 + return // arc4.abimethod typed_abi_call/logger.py:21 + +main_no_args_route@3: + txn OnCompletion // {txn} arc4.abimethod typed_abi_call/logger.py:25 + // virtual: store tmp%8#0 to l-stack (no copy) tmp%8#0 arc4.abimethod typed_abi_call/logger.py:25 + // virtual: load tmp%8#0 from l-stack (no copy) tmp%8#0 arc4.abimethod typed_abi_call/logger.py:25 + ! // {!} arc4.abimethod typed_abi_call/logger.py:25 + // virtual: store tmp%9#0 to l-stack (no copy) tmp%9#0 arc4.abimethod typed_abi_call/logger.py:25 + // virtual: load tmp%9#0 from l-stack (no copy) tmp%9#0 arc4.abimethod typed_abi_call/logger.py:25 + assert // OnCompletion is NoOp // arc4.abimethod typed_abi_call/logger.py:25 + txn ApplicationID // {txn} arc4.abimethod typed_abi_call/logger.py:25 + // virtual: store tmp%10#0 to l-stack (no copy) tmp%10#0 arc4.abimethod typed_abi_call/logger.py:25 + // virtual: load tmp%10#0 from l-stack (no copy) tmp%10#0 arc4.abimethod typed_abi_call/logger.py:25 + assert // is not creating // arc4.abimethod typed_abi_call/logger.py:25 + callsub no_args // {no_args} arc4.abimethod typed_abi_call/logger.py:25 + // virtual: store tmp%11#0 to l-stack (no copy) tmp%11#0 arc4.abimethod typed_abi_call/logger.py:25 + // virtual: load tmp%11#0 from l-stack (no copy) tmp%11#0 arc4.abimethod typed_abi_call/logger.py:25 + itob // {itob} arc4.abimethod typed_abi_call/logger.py:25 + // virtual: store val_as_bytes%0#0 to l-stack (no copy) val_as_bytes%0#0 arc4.abimethod typed_abi_call/logger.py:25 + byte 0x151f7c75 // val_as_bytes%0#0,0x151f7c75 arc4.abimethod typed_abi_call/logger.py:25 + uncover 1 // load val_as_bytes%0#0 from l-stack (no copy) 0x151f7c75,val_as_bytes%0#0 arc4.abimethod typed_abi_call/logger.py:25 + concat // {concat} arc4.abimethod typed_abi_call/logger.py:25 + // virtual: store tmp%12#0 to l-stack (no copy) tmp%12#0 arc4.abimethod typed_abi_call/logger.py:25 + // virtual: load tmp%12#0 from l-stack (no copy) tmp%12#0 arc4.abimethod typed_abi_call/logger.py:25 + log // arc4.abimethod typed_abi_call/logger.py:25 + int 1 // 1 arc4.abimethod typed_abi_call/logger.py:25 + return // arc4.abimethod typed_abi_call/logger.py:25 main_log_route@4: - txn OnCompletion // {txn} arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:29 - // virtual: store tmp%12#0 to l-stack (no copy) tmp%12#0 arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:29 - // virtual: load tmp%12#0 from l-stack (no copy) tmp%12#0 arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:29 - ! // {!} arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:29 - // virtual: store tmp%13#0 to l-stack (no copy) tmp%13#0 arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:29 - // virtual: load tmp%13#0 from l-stack (no copy) tmp%13#0 arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:29 - assert // OnCompletion is NoOp // arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:29 - txn ApplicationID // {txn} arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:29 - // virtual: store tmp%14#0 to l-stack (no copy) tmp%14#0 arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:29 - // virtual: load tmp%14#0 from l-stack (no copy) tmp%14#0 arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:29 - assert // is not creating // arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:29 - txna ApplicationArgs 1 // {txna} class Logger(ARC4Contract): typed_abi_call/logger.py:20 - // virtual: store tmp%15#0 to l-stack (no copy) tmp%15#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 - // virtual: load tmp%15#0 from l-stack (no copy) tmp%15#0 arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:29 - callsub log_uint512 // arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:29 - int 1 // 1 arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:29 - return // arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:29 + txn OnCompletion // {txn} arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:29 + // virtual: store tmp%13#0 to l-stack (no copy) tmp%13#0 arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:29 + // virtual: load tmp%13#0 from l-stack (no copy) tmp%13#0 arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:29 + ! // {!} arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:29 + // virtual: store tmp%14#0 to l-stack (no copy) tmp%14#0 arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:29 + // virtual: load tmp%14#0 from l-stack (no copy) tmp%14#0 arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:29 + assert // OnCompletion is NoOp // arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:29 + txn ApplicationID // {txn} arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:29 + // virtual: store tmp%15#0 to l-stack (no copy) tmp%15#0 arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:29 + // virtual: load tmp%15#0 from l-stack (no copy) tmp%15#0 arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:29 + assert // is not creating // arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:29 + txna ApplicationArgs 1 // {txna} class Logger(ARC4Contract): typed_abi_call/logger.py:20 + // virtual: store tmp%16#0 to l-stack (no copy) tmp%16#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 + // virtual: load tmp%16#0 from l-stack (no copy) tmp%16#0 arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:29 + callsub log_uint64 // arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:29 + int 1 // 1 arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:29 + return // arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:29 main_log_route@5: - txn OnCompletion // {txn} arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:33 - // virtual: store tmp%16#0 to l-stack (no copy) tmp%16#0 arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:33 - // virtual: load tmp%16#0 from l-stack (no copy) tmp%16#0 arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:33 - ! // {!} arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:33 - // virtual: store tmp%17#0 to l-stack (no copy) tmp%17#0 arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:33 - // virtual: load tmp%17#0 from l-stack (no copy) tmp%17#0 arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:33 - assert // OnCompletion is NoOp // arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:33 - txn ApplicationID // {txn} arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:33 - // virtual: store tmp%18#0 to l-stack (no copy) tmp%18#0 arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:33 - // virtual: load tmp%18#0 from l-stack (no copy) tmp%18#0 arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:33 - assert // is not creating // arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:33 - txna ApplicationArgs 1 // {txna} class Logger(ARC4Contract): typed_abi_call/logger.py:20 - // virtual: store tmp%19#0 to l-stack (no copy) tmp%19#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 - // virtual: load tmp%19#0 from l-stack (no copy) tmp%19#0 arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:33 - callsub log_string // arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:33 - int 1 // 1 arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:33 - return // arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:33 + txn OnCompletion // {txn} arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:33 + // virtual: store tmp%17#0 to l-stack (no copy) tmp%17#0 arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:33 + // virtual: load tmp%17#0 from l-stack (no copy) tmp%17#0 arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:33 + ! // {!} arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:33 + // virtual: store tmp%18#0 to l-stack (no copy) tmp%18#0 arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:33 + // virtual: load tmp%18#0 from l-stack (no copy) tmp%18#0 arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:33 + assert // OnCompletion is NoOp // arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:33 + txn ApplicationID // {txn} arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:33 + // virtual: store tmp%19#0 to l-stack (no copy) tmp%19#0 arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:33 + // virtual: load tmp%19#0 from l-stack (no copy) tmp%19#0 arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:33 + assert // is not creating // arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:33 + txna ApplicationArgs 1 // {txna} class Logger(ARC4Contract): typed_abi_call/logger.py:20 + // virtual: store tmp%20#0 to l-stack (no copy) tmp%20#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 + // virtual: load tmp%20#0 from l-stack (no copy) tmp%20#0 arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:33 + callsub log_uint512 // arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:33 + int 1 // 1 arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:33 + return // arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:33 main_log_route@6: - txn OnCompletion // {txn} arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:37 - // virtual: store tmp%20#0 to l-stack (no copy) tmp%20#0 arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:37 - // virtual: load tmp%20#0 from l-stack (no copy) tmp%20#0 arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:37 - ! // {!} arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:37 - // virtual: store tmp%21#0 to l-stack (no copy) tmp%21#0 arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:37 - // virtual: load tmp%21#0 from l-stack (no copy) tmp%21#0 arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:37 - assert // OnCompletion is NoOp // arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:37 - txn ApplicationID // {txn} arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:37 - // virtual: store tmp%22#0 to l-stack (no copy) tmp%22#0 arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:37 - // virtual: load tmp%22#0 from l-stack (no copy) tmp%22#0 arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:37 - assert // is not creating // arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:37 - txna ApplicationArgs 1 // {txna} class Logger(ARC4Contract): typed_abi_call/logger.py:20 - // virtual: store tmp%23#0 to l-stack (no copy) tmp%23#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 - // virtual: load tmp%23#0 from l-stack (no copy) tmp%23#0 arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:37 - callsub log_bool // arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:37 - int 1 // 1 arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:37 - return // arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:37 + txn OnCompletion // {txn} arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:37 + // virtual: store tmp%21#0 to l-stack (no copy) tmp%21#0 arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:37 + // virtual: load tmp%21#0 from l-stack (no copy) tmp%21#0 arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:37 + ! // {!} arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:37 + // virtual: store tmp%22#0 to l-stack (no copy) tmp%22#0 arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:37 + // virtual: load tmp%22#0 from l-stack (no copy) tmp%22#0 arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:37 + assert // OnCompletion is NoOp // arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:37 + txn ApplicationID // {txn} arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:37 + // virtual: store tmp%23#0 to l-stack (no copy) tmp%23#0 arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:37 + // virtual: load tmp%23#0 from l-stack (no copy) tmp%23#0 arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:37 + assert // is not creating // arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:37 + txna ApplicationArgs 1 // {txna} class Logger(ARC4Contract): typed_abi_call/logger.py:20 + // virtual: store tmp%24#0 to l-stack (no copy) tmp%24#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 + // virtual: load tmp%24#0 from l-stack (no copy) tmp%24#0 arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:37 + callsub log_string // arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:37 + int 1 // 1 arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:37 + return // arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:37 main_log_route@7: - txn OnCompletion // {txn} arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:41 - // virtual: store tmp%24#0 to l-stack (no copy) tmp%24#0 arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:41 - // virtual: load tmp%24#0 from l-stack (no copy) tmp%24#0 arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:41 - ! // {!} arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:41 - // virtual: store tmp%25#0 to l-stack (no copy) tmp%25#0 arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:41 - // virtual: load tmp%25#0 from l-stack (no copy) tmp%25#0 arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:41 - assert // OnCompletion is NoOp // arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:41 - txn ApplicationID // {txn} arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:41 - // virtual: store tmp%26#0 to l-stack (no copy) tmp%26#0 arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:41 - // virtual: load tmp%26#0 from l-stack (no copy) tmp%26#0 arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:41 - assert // is not creating // arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:41 - txna ApplicationArgs 1 // {txna} class Logger(ARC4Contract): typed_abi_call/logger.py:20 - // virtual: store tmp%27#0 to l-stack (no copy) tmp%27#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 - // virtual: load tmp%27#0 from l-stack (no copy) tmp%27#0 arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:41 - callsub log_bytes // arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:41 - int 1 // 1 arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:41 - return // arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:41 + txn OnCompletion // {txn} arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:41 + // virtual: store tmp%25#0 to l-stack (no copy) tmp%25#0 arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:41 + // virtual: load tmp%25#0 from l-stack (no copy) tmp%25#0 arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:41 + ! // {!} arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:41 + // virtual: store tmp%26#0 to l-stack (no copy) tmp%26#0 arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:41 + // virtual: load tmp%26#0 from l-stack (no copy) tmp%26#0 arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:41 + assert // OnCompletion is NoOp // arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:41 + txn ApplicationID // {txn} arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:41 + // virtual: store tmp%27#0 to l-stack (no copy) tmp%27#0 arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:41 + // virtual: load tmp%27#0 from l-stack (no copy) tmp%27#0 arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:41 + assert // is not creating // arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:41 + txna ApplicationArgs 1 // {txna} class Logger(ARC4Contract): typed_abi_call/logger.py:20 + // virtual: store tmp%28#0 to l-stack (no copy) tmp%28#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 + // virtual: load tmp%28#0 from l-stack (no copy) tmp%28#0 arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:41 + callsub log_bool // arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:41 + int 1 // 1 arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:41 + return // arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:41 main_log_route@8: - txn OnCompletion // {txn} arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:45 - // virtual: store tmp%28#0 to l-stack (no copy) tmp%28#0 arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:45 - // virtual: load tmp%28#0 from l-stack (no copy) tmp%28#0 arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:45 - ! // {!} arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:45 - // virtual: store tmp%29#0 to l-stack (no copy) tmp%29#0 arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:45 - // virtual: load tmp%29#0 from l-stack (no copy) tmp%29#0 arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:45 - assert // OnCompletion is NoOp // arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:45 - txn ApplicationID // {txn} arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:45 - // virtual: store tmp%30#0 to l-stack (no copy) tmp%30#0 arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:45 - // virtual: load tmp%30#0 from l-stack (no copy) tmp%30#0 arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:45 - assert // is not creating // arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:45 - txna ApplicationArgs 1 // {txna} class Logger(ARC4Contract): typed_abi_call/logger.py:20 - // virtual: store tmp%31#0 to l-stack (no copy) tmp%31#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 - // virtual: load tmp%31#0 from l-stack (no copy) tmp%31#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 - btoi // {btoi} class Logger(ARC4Contract): typed_abi_call/logger.py:20 - // virtual: store tmp%32#0 to l-stack (no copy) tmp%32#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 - // virtual: load tmp%32#0 from l-stack (no copy) tmp%32#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 - txnas Assets // {txnas} class Logger(ARC4Contract): typed_abi_call/logger.py:20 - // virtual: store tmp%33#0 to l-stack (no copy) tmp%33#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 - txna ApplicationArgs 2 // tmp%33#0,{txna} class Logger(ARC4Contract): typed_abi_call/logger.py:20 - // virtual: store tmp%34#0 to l-stack (no copy) tmp%33#0,tmp%34#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 - // virtual: load tmp%34#0 from l-stack (no copy) tmp%33#0,tmp%34#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 - btoi // tmp%33#0,{btoi} class Logger(ARC4Contract): typed_abi_call/logger.py:20 - // virtual: store tmp%35#0 to l-stack (no copy) tmp%33#0,tmp%35#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 - // virtual: load tmp%35#0 from l-stack (no copy) tmp%33#0,tmp%35#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 - txnas Accounts // tmp%33#0,{txnas} class Logger(ARC4Contract): typed_abi_call/logger.py:20 - // virtual: store tmp%36#0 to l-stack (no copy) tmp%33#0,tmp%36#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 - txna ApplicationArgs 3 // tmp%33#0,tmp%36#0,{txna} class Logger(ARC4Contract): typed_abi_call/logger.py:20 - // virtual: store tmp%37#0 to l-stack (no copy) tmp%33#0,tmp%36#0,tmp%37#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 - // virtual: load tmp%37#0 from l-stack (no copy) tmp%33#0,tmp%36#0,tmp%37#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 - btoi // tmp%33#0,tmp%36#0,{btoi} class Logger(ARC4Contract): typed_abi_call/logger.py:20 - // virtual: store tmp%38#0 to l-stack (no copy) tmp%33#0,tmp%36#0,tmp%38#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 - // virtual: load tmp%38#0 from l-stack (no copy) tmp%33#0,tmp%36#0,tmp%38#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 - txnas Applications // tmp%33#0,tmp%36#0,{txnas} class Logger(ARC4Contract): typed_abi_call/logger.py:20 - // virtual: store tmp%39#0 to l-stack (no copy) tmp%33#0,tmp%36#0,tmp%39#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 - uncover 2 // load tmp%33#0 from l-stack (no copy) tmp%36#0,tmp%39#0,tmp%33#0 arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:45 - uncover 2 // load tmp%36#0 from l-stack (no copy) tmp%39#0,tmp%33#0,tmp%36#0 arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:45 - uncover 2 // load tmp%39#0 from l-stack (no copy) tmp%33#0,tmp%36#0,tmp%39#0 arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:45 - callsub log_asset_account_app // arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:45 - int 1 // 1 arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:45 - return // arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:45 - -main_echo_native_string_route@9: - txn OnCompletion // {txn} arc4.abimethod typed_abi_call/logger.py:49 - // virtual: store tmp%40#0 to l-stack (no copy) tmp%40#0 arc4.abimethod typed_abi_call/logger.py:49 - // virtual: load tmp%40#0 from l-stack (no copy) tmp%40#0 arc4.abimethod typed_abi_call/logger.py:49 - ! // {!} arc4.abimethod typed_abi_call/logger.py:49 - // virtual: store tmp%41#0 to l-stack (no copy) tmp%41#0 arc4.abimethod typed_abi_call/logger.py:49 - // virtual: load tmp%41#0 from l-stack (no copy) tmp%41#0 arc4.abimethod typed_abi_call/logger.py:49 - assert // OnCompletion is NoOp // arc4.abimethod typed_abi_call/logger.py:49 - txn ApplicationID // {txn} arc4.abimethod typed_abi_call/logger.py:49 - // virtual: store tmp%42#0 to l-stack (no copy) tmp%42#0 arc4.abimethod typed_abi_call/logger.py:49 - // virtual: load tmp%42#0 from l-stack (no copy) tmp%42#0 arc4.abimethod typed_abi_call/logger.py:49 - assert // is not creating // arc4.abimethod typed_abi_call/logger.py:49 - txna ApplicationArgs 1 // {txna} class Logger(ARC4Contract): typed_abi_call/logger.py:20 - // virtual: store tmp%43#0 to l-stack (no copy) tmp%43#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 - // virtual: load tmp%43#0 from l-stack (no copy) tmp%43#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 - extract 2 0 // {extract} class Logger(ARC4Contract): typed_abi_call/logger.py:20 - // virtual: store tmp%44#0 to l-stack (no copy) tmp%44#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 - // virtual: load tmp%44#0 from l-stack (no copy) tmp%44#0 arc4.abimethod typed_abi_call/logger.py:49 - callsub echo_native_string // {echo_native_string} arc4.abimethod typed_abi_call/logger.py:49 - // virtual: store tmp%45#0 to l-stack (no copy) tmp%45#0 arc4.abimethod typed_abi_call/logger.py:49 - dup // load tmp%45#0 from l-stack (copy) tmp%45#0,tmp%45#0 arc4.abimethod typed_abi_call/logger.py:49 - len // tmp%45#0,{len} arc4.abimethod typed_abi_call/logger.py:49 - // virtual: store length%0#0 to l-stack (no copy) tmp%45#0,length%0#0 arc4.abimethod typed_abi_call/logger.py:49 - // virtual: load length%0#0 from l-stack (no copy) tmp%45#0,length%0#0 arc4.abimethod typed_abi_call/logger.py:49 - itob // tmp%45#0,{itob} arc4.abimethod typed_abi_call/logger.py:49 - // virtual: store as_bytes%0#0 to l-stack (no copy) tmp%45#0,as_bytes%0#0 arc4.abimethod typed_abi_call/logger.py:49 - // virtual: load as_bytes%0#0 from l-stack (no copy) tmp%45#0,as_bytes%0#0 arc4.abimethod typed_abi_call/logger.py:49 - extract 6 2 // tmp%45#0,{extract} arc4.abimethod typed_abi_call/logger.py:49 - // virtual: store length_uint16%0#0 to l-stack (no copy) tmp%45#0,length_uint16%0#0 arc4.abimethod typed_abi_call/logger.py:49 - // virtual: load length_uint16%0#0 from l-stack (no copy) tmp%45#0,length_uint16%0#0 arc4.abimethod typed_abi_call/logger.py:49 - uncover 1 // load tmp%45#0 from l-stack (no copy) length_uint16%0#0,tmp%45#0 arc4.abimethod typed_abi_call/logger.py:49 - concat // {concat} arc4.abimethod typed_abi_call/logger.py:49 - // virtual: store encoded_value%0#0 to l-stack (no copy) encoded_value%0#0 arc4.abimethod typed_abi_call/logger.py:49 - byte 0x151f7c75 // encoded_value%0#0,0x151f7c75 arc4.abimethod typed_abi_call/logger.py:49 - uncover 1 // load encoded_value%0#0 from l-stack (no copy) 0x151f7c75,encoded_value%0#0 arc4.abimethod typed_abi_call/logger.py:49 - concat // {concat} arc4.abimethod typed_abi_call/logger.py:49 - // virtual: store tmp%46#0 to l-stack (no copy) tmp%46#0 arc4.abimethod typed_abi_call/logger.py:49 - // virtual: load tmp%46#0 from l-stack (no copy) tmp%46#0 arc4.abimethod typed_abi_call/logger.py:49 - log // arc4.abimethod typed_abi_call/logger.py:49 - int 1 // 1 arc4.abimethod typed_abi_call/logger.py:49 - return // arc4.abimethod typed_abi_call/logger.py:49 - -main_echo_native_bytes_route@10: - txn OnCompletion // {txn} arc4.abimethod typed_abi_call/logger.py:53 - // virtual: store tmp%47#0 to l-stack (no copy) tmp%47#0 arc4.abimethod typed_abi_call/logger.py:53 - // virtual: load tmp%47#0 from l-stack (no copy) tmp%47#0 arc4.abimethod typed_abi_call/logger.py:53 - ! // {!} arc4.abimethod typed_abi_call/logger.py:53 - // virtual: store tmp%48#0 to l-stack (no copy) tmp%48#0 arc4.abimethod typed_abi_call/logger.py:53 - // virtual: load tmp%48#0 from l-stack (no copy) tmp%48#0 arc4.abimethod typed_abi_call/logger.py:53 - assert // OnCompletion is NoOp // arc4.abimethod typed_abi_call/logger.py:53 - txn ApplicationID // {txn} arc4.abimethod typed_abi_call/logger.py:53 - // virtual: store tmp%49#0 to l-stack (no copy) tmp%49#0 arc4.abimethod typed_abi_call/logger.py:53 - // virtual: load tmp%49#0 from l-stack (no copy) tmp%49#0 arc4.abimethod typed_abi_call/logger.py:53 - assert // is not creating // arc4.abimethod typed_abi_call/logger.py:53 - txna ApplicationArgs 1 // {txna} class Logger(ARC4Contract): typed_abi_call/logger.py:20 - // virtual: store tmp%50#0 to l-stack (no copy) tmp%50#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 - // virtual: load tmp%50#0 from l-stack (no copy) tmp%50#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 - extract 2 0 // {extract} class Logger(ARC4Contract): typed_abi_call/logger.py:20 - // virtual: store tmp%51#0 to l-stack (no copy) tmp%51#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 - // virtual: load tmp%51#0 from l-stack (no copy) tmp%51#0 arc4.abimethod typed_abi_call/logger.py:53 - callsub echo_native_bytes // {echo_native_bytes} arc4.abimethod typed_abi_call/logger.py:53 - // virtual: store tmp%52#0 to l-stack (no copy) tmp%52#0 arc4.abimethod typed_abi_call/logger.py:53 - dup // load tmp%52#0 from l-stack (copy) tmp%52#0,tmp%52#0 arc4.abimethod typed_abi_call/logger.py:53 - len // tmp%52#0,{len} arc4.abimethod typed_abi_call/logger.py:53 - // virtual: store length%1#0 to l-stack (no copy) tmp%52#0,length%1#0 arc4.abimethod typed_abi_call/logger.py:53 - // virtual: load length%1#0 from l-stack (no copy) tmp%52#0,length%1#0 arc4.abimethod typed_abi_call/logger.py:53 - itob // tmp%52#0,{itob} arc4.abimethod typed_abi_call/logger.py:53 - // virtual: store as_bytes%1#0 to l-stack (no copy) tmp%52#0,as_bytes%1#0 arc4.abimethod typed_abi_call/logger.py:53 - // virtual: load as_bytes%1#0 from l-stack (no copy) tmp%52#0,as_bytes%1#0 arc4.abimethod typed_abi_call/logger.py:53 - extract 6 2 // tmp%52#0,{extract} arc4.abimethod typed_abi_call/logger.py:53 - // virtual: store length_uint16%1#0 to l-stack (no copy) tmp%52#0,length_uint16%1#0 arc4.abimethod typed_abi_call/logger.py:53 - // virtual: load length_uint16%1#0 from l-stack (no copy) tmp%52#0,length_uint16%1#0 arc4.abimethod typed_abi_call/logger.py:53 - uncover 1 // load tmp%52#0 from l-stack (no copy) length_uint16%1#0,tmp%52#0 arc4.abimethod typed_abi_call/logger.py:53 - concat // {concat} arc4.abimethod typed_abi_call/logger.py:53 - // virtual: store encoded_value%1#0 to l-stack (no copy) encoded_value%1#0 arc4.abimethod typed_abi_call/logger.py:53 - byte 0x151f7c75 // encoded_value%1#0,0x151f7c75 arc4.abimethod typed_abi_call/logger.py:53 - uncover 1 // load encoded_value%1#0 from l-stack (no copy) 0x151f7c75,encoded_value%1#0 arc4.abimethod typed_abi_call/logger.py:53 - concat // {concat} arc4.abimethod typed_abi_call/logger.py:53 - // virtual: store tmp%53#0 to l-stack (no copy) tmp%53#0 arc4.abimethod typed_abi_call/logger.py:53 - // virtual: load tmp%53#0 from l-stack (no copy) tmp%53#0 arc4.abimethod typed_abi_call/logger.py:53 - log // arc4.abimethod typed_abi_call/logger.py:53 - int 1 // 1 arc4.abimethod typed_abi_call/logger.py:53 - return // arc4.abimethod typed_abi_call/logger.py:53 - -main_echo_native_uint64_route@11: - txn OnCompletion // {txn} arc4.abimethod typed_abi_call/logger.py:57 - // virtual: store tmp%54#0 to l-stack (no copy) tmp%54#0 arc4.abimethod typed_abi_call/logger.py:57 - // virtual: load tmp%54#0 from l-stack (no copy) tmp%54#0 arc4.abimethod typed_abi_call/logger.py:57 - ! // {!} arc4.abimethod typed_abi_call/logger.py:57 - // virtual: store tmp%55#0 to l-stack (no copy) tmp%55#0 arc4.abimethod typed_abi_call/logger.py:57 - // virtual: load tmp%55#0 from l-stack (no copy) tmp%55#0 arc4.abimethod typed_abi_call/logger.py:57 - assert // OnCompletion is NoOp // arc4.abimethod typed_abi_call/logger.py:57 - txn ApplicationID // {txn} arc4.abimethod typed_abi_call/logger.py:57 - // virtual: store tmp%56#0 to l-stack (no copy) tmp%56#0 arc4.abimethod typed_abi_call/logger.py:57 - // virtual: load tmp%56#0 from l-stack (no copy) tmp%56#0 arc4.abimethod typed_abi_call/logger.py:57 - assert // is not creating // arc4.abimethod typed_abi_call/logger.py:57 - txna ApplicationArgs 1 // {txna} class Logger(ARC4Contract): typed_abi_call/logger.py:20 - // virtual: store tmp%57#0 to l-stack (no copy) tmp%57#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 - // virtual: load tmp%57#0 from l-stack (no copy) tmp%57#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 - btoi // {btoi} class Logger(ARC4Contract): typed_abi_call/logger.py:20 - // virtual: store tmp%58#0 to l-stack (no copy) tmp%58#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 - // virtual: load tmp%58#0 from l-stack (no copy) tmp%58#0 arc4.abimethod typed_abi_call/logger.py:57 - callsub echo_native_uint64 // {echo_native_uint64} arc4.abimethod typed_abi_call/logger.py:57 - // virtual: store tmp%59#0 to l-stack (no copy) tmp%59#0 arc4.abimethod typed_abi_call/logger.py:57 - // virtual: load tmp%59#0 from l-stack (no copy) tmp%59#0 arc4.abimethod typed_abi_call/logger.py:57 - itob // {itob} arc4.abimethod typed_abi_call/logger.py:57 - // virtual: store val_as_bytes%0#0 to l-stack (no copy) val_as_bytes%0#0 arc4.abimethod typed_abi_call/logger.py:57 - byte 0x151f7c75 // val_as_bytes%0#0,0x151f7c75 arc4.abimethod typed_abi_call/logger.py:57 - uncover 1 // load val_as_bytes%0#0 from l-stack (no copy) 0x151f7c75,val_as_bytes%0#0 arc4.abimethod typed_abi_call/logger.py:57 - concat // {concat} arc4.abimethod typed_abi_call/logger.py:57 - // virtual: store tmp%60#0 to l-stack (no copy) tmp%60#0 arc4.abimethod typed_abi_call/logger.py:57 - // virtual: load tmp%60#0 from l-stack (no copy) tmp%60#0 arc4.abimethod typed_abi_call/logger.py:57 - log // arc4.abimethod typed_abi_call/logger.py:57 - int 1 // 1 arc4.abimethod typed_abi_call/logger.py:57 - return // arc4.abimethod typed_abi_call/logger.py:57 - -main_echo_native_biguint_route@12: - txn OnCompletion // {txn} arc4.abimethod typed_abi_call/logger.py:61 - // virtual: store tmp%61#0 to l-stack (no copy) tmp%61#0 arc4.abimethod typed_abi_call/logger.py:61 - // virtual: load tmp%61#0 from l-stack (no copy) tmp%61#0 arc4.abimethod typed_abi_call/logger.py:61 - ! // {!} arc4.abimethod typed_abi_call/logger.py:61 - // virtual: store tmp%62#0 to l-stack (no copy) tmp%62#0 arc4.abimethod typed_abi_call/logger.py:61 - // virtual: load tmp%62#0 from l-stack (no copy) tmp%62#0 arc4.abimethod typed_abi_call/logger.py:61 - assert // OnCompletion is NoOp // arc4.abimethod typed_abi_call/logger.py:61 - txn ApplicationID // {txn} arc4.abimethod typed_abi_call/logger.py:61 - // virtual: store tmp%63#0 to l-stack (no copy) tmp%63#0 arc4.abimethod typed_abi_call/logger.py:61 - // virtual: load tmp%63#0 from l-stack (no copy) tmp%63#0 arc4.abimethod typed_abi_call/logger.py:61 - assert // is not creating // arc4.abimethod typed_abi_call/logger.py:61 - txna ApplicationArgs 1 // {txna} class Logger(ARC4Contract): typed_abi_call/logger.py:20 - // virtual: store tmp%64#0 to l-stack (no copy) tmp%64#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 - // virtual: load tmp%64#0 from l-stack (no copy) tmp%64#0 arc4.abimethod typed_abi_call/logger.py:61 - callsub echo_native_biguint // {echo_native_biguint} arc4.abimethod typed_abi_call/logger.py:61 - // virtual: store tmp%65#0 to l-stack (no copy) tmp%65#0 arc4.abimethod typed_abi_call/logger.py:61 - dup // load tmp%65#0 from l-stack (copy) tmp%65#0,tmp%65#0 arc4.abimethod typed_abi_call/logger.py:61 - len // tmp%65#0,{len} arc4.abimethod typed_abi_call/logger.py:61 - // virtual: store len_%0#0 to l-stack (no copy) tmp%65#0,len_%0#0 arc4.abimethod typed_abi_call/logger.py:61 - // virtual: load len_%0#0 from l-stack (no copy) tmp%65#0,len_%0#0 arc4.abimethod typed_abi_call/logger.py:61 - int 64 // tmp%65#0,len_%0#0,64 arc4.abimethod typed_abi_call/logger.py:61 - <= // tmp%65#0,{<=} arc4.abimethod typed_abi_call/logger.py:61 - // virtual: store no_overflow%0#0 to l-stack (no copy) tmp%65#0,no_overflow%0#0 arc4.abimethod typed_abi_call/logger.py:61 - // virtual: load no_overflow%0#0 from l-stack (no copy) tmp%65#0,no_overflow%0#0 arc4.abimethod typed_abi_call/logger.py:61 - assert // overflow // tmp%65#0 arc4.abimethod typed_abi_call/logger.py:61 - int 64 // tmp%65#0,64 arc4.abimethod typed_abi_call/logger.py:61 - bzero // tmp%65#0,{bzero} arc4.abimethod typed_abi_call/logger.py:61 - // virtual: store b_zeros%0#0 to l-stack (no copy) tmp%65#0,b_zeros%0#0 arc4.abimethod typed_abi_call/logger.py:61 - // virtual: load tmp%65#0 from l-stack (no copy) b_zeros%0#0,tmp%65#0 arc4.abimethod typed_abi_call/logger.py:61 - // virtual: load b_zeros%0#0 from l-stack (no copy) tmp%65#0,b_zeros%0#0 arc4.abimethod typed_abi_call/logger.py:61 - b| // {b|} arc4.abimethod typed_abi_call/logger.py:61 - // virtual: store tmp%66#0 to l-stack (no copy) tmp%66#0 arc4.abimethod typed_abi_call/logger.py:61 - byte 0x151f7c75 // tmp%66#0,0x151f7c75 arc4.abimethod typed_abi_call/logger.py:61 - uncover 1 // load tmp%66#0 from l-stack (no copy) 0x151f7c75,tmp%66#0 arc4.abimethod typed_abi_call/logger.py:61 - concat // {concat} arc4.abimethod typed_abi_call/logger.py:61 - // virtual: store tmp%67#0 to l-stack (no copy) tmp%67#0 arc4.abimethod typed_abi_call/logger.py:61 - // virtual: load tmp%67#0 from l-stack (no copy) tmp%67#0 arc4.abimethod typed_abi_call/logger.py:61 - log // arc4.abimethod typed_abi_call/logger.py:61 - int 1 // 1 arc4.abimethod typed_abi_call/logger.py:61 - return // arc4.abimethod typed_abi_call/logger.py:61 - -main_echo_native_tuple_route@13: - txn OnCompletion // {txn} arc4.abimethod typed_abi_call/logger.py:65 - // virtual: store tmp%68#0 to l-stack (no copy) tmp%68#0 arc4.abimethod typed_abi_call/logger.py:65 - // virtual: load tmp%68#0 from l-stack (no copy) tmp%68#0 arc4.abimethod typed_abi_call/logger.py:65 - ! // {!} arc4.abimethod typed_abi_call/logger.py:65 - // virtual: store tmp%69#0 to l-stack (no copy) tmp%69#0 arc4.abimethod typed_abi_call/logger.py:65 - // virtual: load tmp%69#0 from l-stack (no copy) tmp%69#0 arc4.abimethod typed_abi_call/logger.py:65 - assert // OnCompletion is NoOp // arc4.abimethod typed_abi_call/logger.py:65 - txn ApplicationID // {txn} arc4.abimethod typed_abi_call/logger.py:65 - // virtual: store tmp%70#0 to l-stack (no copy) tmp%70#0 arc4.abimethod typed_abi_call/logger.py:65 - // virtual: load tmp%70#0 from l-stack (no copy) tmp%70#0 arc4.abimethod typed_abi_call/logger.py:65 - assert // is not creating // arc4.abimethod typed_abi_call/logger.py:65 - txna ApplicationArgs 1 // {txna} class Logger(ARC4Contract): typed_abi_call/logger.py:20 - // virtual: store tmp%71#0 to l-stack (no copy) tmp%71#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 - // virtual: load tmp%71#0 from l-stack (no copy) tmp%71#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 - extract 2 0 // {extract} class Logger(ARC4Contract): typed_abi_call/logger.py:20 - // virtual: store tmp%72#0 to l-stack (no copy) tmp%72#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 - txna ApplicationArgs 2 // tmp%72#0,{txna} class Logger(ARC4Contract): typed_abi_call/logger.py:20 - // virtual: store tmp%73#0 to l-stack (no copy) tmp%72#0,tmp%73#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 - // virtual: load tmp%73#0 from l-stack (no copy) tmp%72#0,tmp%73#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 - extract 2 0 // tmp%72#0,{extract} class Logger(ARC4Contract): typed_abi_call/logger.py:20 - // virtual: store tmp%74#0 to l-stack (no copy) tmp%72#0,tmp%74#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 - txna ApplicationArgs 3 // tmp%72#0,tmp%74#0,{txna} class Logger(ARC4Contract): typed_abi_call/logger.py:20 - // virtual: store tmp%75#0 to l-stack (no copy) tmp%72#0,tmp%74#0,tmp%75#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 - // virtual: load tmp%75#0 from l-stack (no copy) tmp%72#0,tmp%74#0,tmp%75#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 - btoi // tmp%72#0,tmp%74#0,{btoi} class Logger(ARC4Contract): typed_abi_call/logger.py:20 - // virtual: store tmp%76#0 to l-stack (no copy) tmp%72#0,tmp%74#0,tmp%76#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 - txna ApplicationArgs 4 // tmp%72#0,tmp%74#0,tmp%76#0,{txna} class Logger(ARC4Contract): typed_abi_call/logger.py:20 - // virtual: store tmp%77#0 to l-stack (no copy) tmp%72#0,tmp%74#0,tmp%76#0,tmp%77#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 - uncover 3 // load tmp%72#0 from l-stack (no copy) tmp%74#0,tmp%76#0,tmp%77#0,tmp%72#0 arc4.abimethod typed_abi_call/logger.py:65 - uncover 3 // load tmp%74#0 from l-stack (no copy) tmp%76#0,tmp%77#0,tmp%72#0,tmp%74#0 arc4.abimethod typed_abi_call/logger.py:65 - uncover 3 // load tmp%76#0 from l-stack (no copy) tmp%77#0,tmp%72#0,tmp%74#0,tmp%76#0 arc4.abimethod typed_abi_call/logger.py:65 - uncover 3 // load tmp%77#0 from l-stack (no copy) tmp%72#0,tmp%74#0,tmp%76#0,tmp%77#0 arc4.abimethod typed_abi_call/logger.py:65 - callsub echo_native_tuple // {echo_native_tuple}.0,{echo_native_tuple}.1,{echo_native_tuple}.2,{echo_native_tuple}.3 arc4.abimethod typed_abi_call/logger.py:65 - cover 3 // store awst_tmp%3#0 to l-stack (no copy) awst_tmp%3#0,{echo_native_tuple}.0,{echo_native_tuple}.1,{echo_native_tuple}.2 arc4.abimethod typed_abi_call/logger.py:65 - cover 2 // store awst_tmp%2#0 to l-stack (no copy) awst_tmp%3#0,awst_tmp%2#0,{echo_native_tuple}.0,{echo_native_tuple}.1 arc4.abimethod typed_abi_call/logger.py:65 - cover 1 // store awst_tmp%1#0 to l-stack (no copy) awst_tmp%3#0,awst_tmp%2#0,awst_tmp%1#0,{echo_native_tuple}.0 arc4.abimethod typed_abi_call/logger.py:65 - // virtual: store awst_tmp%0#0 to l-stack (no copy) awst_tmp%3#0,awst_tmp%2#0,awst_tmp%1#0,awst_tmp%0#0 arc4.abimethod typed_abi_call/logger.py:65 - dup // load awst_tmp%0#0 from l-stack (copy) awst_tmp%3#0,awst_tmp%2#0,awst_tmp%1#0,awst_tmp%0#0,awst_tmp%0#0 arc4.abimethod typed_abi_call/logger.py:65 - len // awst_tmp%3#0,awst_tmp%2#0,awst_tmp%1#0,awst_tmp%0#0,{len} arc4.abimethod typed_abi_call/logger.py:65 - // virtual: store length%2#0 to l-stack (no copy) awst_tmp%3#0,awst_tmp%2#0,awst_tmp%1#0,awst_tmp%0#0,length%2#0 arc4.abimethod typed_abi_call/logger.py:65 - // virtual: load length%2#0 from l-stack (no copy) awst_tmp%3#0,awst_tmp%2#0,awst_tmp%1#0,awst_tmp%0#0,length%2#0 arc4.abimethod typed_abi_call/logger.py:65 - itob // awst_tmp%3#0,awst_tmp%2#0,awst_tmp%1#0,awst_tmp%0#0,{itob} arc4.abimethod typed_abi_call/logger.py:65 - // virtual: store as_bytes%2#0 to l-stack (no copy) awst_tmp%3#0,awst_tmp%2#0,awst_tmp%1#0,awst_tmp%0#0,as_bytes%2#0 arc4.abimethod typed_abi_call/logger.py:65 - // virtual: load as_bytes%2#0 from l-stack (no copy) awst_tmp%3#0,awst_tmp%2#0,awst_tmp%1#0,awst_tmp%0#0,as_bytes%2#0 arc4.abimethod typed_abi_call/logger.py:65 - extract 6 2 // awst_tmp%3#0,awst_tmp%2#0,awst_tmp%1#0,awst_tmp%0#0,{extract} arc4.abimethod typed_abi_call/logger.py:65 - // virtual: store length_uint16%2#0 to l-stack (no copy) awst_tmp%3#0,awst_tmp%2#0,awst_tmp%1#0,awst_tmp%0#0,length_uint16%2#0 arc4.abimethod typed_abi_call/logger.py:65 - // virtual: load length_uint16%2#0 from l-stack (no copy) awst_tmp%3#0,awst_tmp%2#0,awst_tmp%1#0,awst_tmp%0#0,length_uint16%2#0 arc4.abimethod typed_abi_call/logger.py:65 - uncover 1 // load awst_tmp%0#0 from l-stack (no copy) awst_tmp%3#0,awst_tmp%2#0,awst_tmp%1#0,length_uint16%2#0,awst_tmp%0#0 arc4.abimethod typed_abi_call/logger.py:65 - concat // awst_tmp%3#0,awst_tmp%2#0,awst_tmp%1#0,{concat} arc4.abimethod typed_abi_call/logger.py:65 - cover 3 // store encoded_value%2#0 to l-stack (no copy) encoded_value%2#0,awst_tmp%3#0,awst_tmp%2#0,awst_tmp%1#0 arc4.abimethod typed_abi_call/logger.py:65 - dup // load awst_tmp%1#0 from l-stack (copy) encoded_value%2#0,awst_tmp%3#0,awst_tmp%2#0,awst_tmp%1#0,awst_tmp%1#0 arc4.abimethod typed_abi_call/logger.py:65 - len // encoded_value%2#0,awst_tmp%3#0,awst_tmp%2#0,awst_tmp%1#0,{len} arc4.abimethod typed_abi_call/logger.py:65 - // virtual: store length%3#0 to l-stack (no copy) encoded_value%2#0,awst_tmp%3#0,awst_tmp%2#0,awst_tmp%1#0,length%3#0 arc4.abimethod typed_abi_call/logger.py:65 - // virtual: load length%3#0 from l-stack (no copy) encoded_value%2#0,awst_tmp%3#0,awst_tmp%2#0,awst_tmp%1#0,length%3#0 arc4.abimethod typed_abi_call/logger.py:65 - itob // encoded_value%2#0,awst_tmp%3#0,awst_tmp%2#0,awst_tmp%1#0,{itob} arc4.abimethod typed_abi_call/logger.py:65 - // virtual: store as_bytes%3#0 to l-stack (no copy) encoded_value%2#0,awst_tmp%3#0,awst_tmp%2#0,awst_tmp%1#0,as_bytes%3#0 arc4.abimethod typed_abi_call/logger.py:65 - // virtual: load as_bytes%3#0 from l-stack (no copy) encoded_value%2#0,awst_tmp%3#0,awst_tmp%2#0,awst_tmp%1#0,as_bytes%3#0 arc4.abimethod typed_abi_call/logger.py:65 - extract 6 2 // encoded_value%2#0,awst_tmp%3#0,awst_tmp%2#0,awst_tmp%1#0,{extract} arc4.abimethod typed_abi_call/logger.py:65 - // virtual: store length_uint16%3#0 to l-stack (no copy) encoded_value%2#0,awst_tmp%3#0,awst_tmp%2#0,awst_tmp%1#0,length_uint16%3#0 arc4.abimethod typed_abi_call/logger.py:65 - // virtual: load length_uint16%3#0 from l-stack (no copy) encoded_value%2#0,awst_tmp%3#0,awst_tmp%2#0,awst_tmp%1#0,length_uint16%3#0 arc4.abimethod typed_abi_call/logger.py:65 - uncover 1 // load awst_tmp%1#0 from l-stack (no copy) encoded_value%2#0,awst_tmp%3#0,awst_tmp%2#0,length_uint16%3#0,awst_tmp%1#0 arc4.abimethod typed_abi_call/logger.py:65 - concat // encoded_value%2#0,awst_tmp%3#0,awst_tmp%2#0,{concat} arc4.abimethod typed_abi_call/logger.py:65 - cover 3 // store encoded_value%3#0 to l-stack (no copy) encoded_value%3#0,encoded_value%2#0,awst_tmp%3#0,awst_tmp%2#0 arc4.abimethod typed_abi_call/logger.py:65 - // virtual: load awst_tmp%2#0 from l-stack (no copy) encoded_value%3#0,encoded_value%2#0,awst_tmp%3#0,awst_tmp%2#0 arc4.abimethod typed_abi_call/logger.py:65 - itob // encoded_value%3#0,encoded_value%2#0,awst_tmp%3#0,{itob} arc4.abimethod typed_abi_call/logger.py:65 - cover 2 // store val_as_bytes%1#0 to l-stack (no copy) encoded_value%3#0,val_as_bytes%1#0,encoded_value%2#0,awst_tmp%3#0 arc4.abimethod typed_abi_call/logger.py:65 - dup // load awst_tmp%3#0 from l-stack (copy) encoded_value%3#0,val_as_bytes%1#0,encoded_value%2#0,awst_tmp%3#0,awst_tmp%3#0 arc4.abimethod typed_abi_call/logger.py:65 - len // encoded_value%3#0,val_as_bytes%1#0,encoded_value%2#0,awst_tmp%3#0,{len} arc4.abimethod typed_abi_call/logger.py:65 - // virtual: store len_%1#0 to l-stack (no copy) encoded_value%3#0,val_as_bytes%1#0,encoded_value%2#0,awst_tmp%3#0,len_%1#0 arc4.abimethod typed_abi_call/logger.py:65 - // virtual: load len_%1#0 from l-stack (no copy) encoded_value%3#0,val_as_bytes%1#0,encoded_value%2#0,awst_tmp%3#0,len_%1#0 arc4.abimethod typed_abi_call/logger.py:65 - int 64 // encoded_value%3#0,val_as_bytes%1#0,encoded_value%2#0,awst_tmp%3#0,len_%1#0,64 arc4.abimethod typed_abi_call/logger.py:65 - <= // encoded_value%3#0,val_as_bytes%1#0,encoded_value%2#0,awst_tmp%3#0,{<=} arc4.abimethod typed_abi_call/logger.py:65 - // virtual: store no_overflow%1#0 to l-stack (no copy) encoded_value%3#0,val_as_bytes%1#0,encoded_value%2#0,awst_tmp%3#0,no_overflow%1#0 arc4.abimethod typed_abi_call/logger.py:65 - // virtual: load no_overflow%1#0 from l-stack (no copy) encoded_value%3#0,val_as_bytes%1#0,encoded_value%2#0,awst_tmp%3#0,no_overflow%1#0 arc4.abimethod typed_abi_call/logger.py:65 - assert // overflow // encoded_value%3#0,val_as_bytes%1#0,encoded_value%2#0,awst_tmp%3#0 arc4.abimethod typed_abi_call/logger.py:65 - int 64 // encoded_value%3#0,val_as_bytes%1#0,encoded_value%2#0,awst_tmp%3#0,64 arc4.abimethod typed_abi_call/logger.py:65 - bzero // encoded_value%3#0,val_as_bytes%1#0,encoded_value%2#0,awst_tmp%3#0,{bzero} arc4.abimethod typed_abi_call/logger.py:65 - // virtual: store b_zeros%1#0 to l-stack (no copy) encoded_value%3#0,val_as_bytes%1#0,encoded_value%2#0,awst_tmp%3#0,b_zeros%1#0 arc4.abimethod typed_abi_call/logger.py:65 - // virtual: load awst_tmp%3#0 from l-stack (no copy) encoded_value%3#0,val_as_bytes%1#0,encoded_value%2#0,b_zeros%1#0,awst_tmp%3#0 arc4.abimethod typed_abi_call/logger.py:65 - // virtual: load b_zeros%1#0 from l-stack (no copy) encoded_value%3#0,val_as_bytes%1#0,encoded_value%2#0,awst_tmp%3#0,b_zeros%1#0 arc4.abimethod typed_abi_call/logger.py:65 - b| // encoded_value%3#0,val_as_bytes%1#0,encoded_value%2#0,{b|} arc4.abimethod typed_abi_call/logger.py:65 - // virtual: store tmp%78#0 to l-stack (no copy) encoded_value%3#0,val_as_bytes%1#0,encoded_value%2#0,tmp%78#0 arc4.abimethod typed_abi_call/logger.py:65 - dig 1 // load encoded_value%2#0 from l-stack (copy) encoded_value%3#0,val_as_bytes%1#0,encoded_value%2#0,tmp%78#0,encoded_value%2#0 arc4.abimethod typed_abi_call/logger.py:65 - len // encoded_value%3#0,val_as_bytes%1#0,encoded_value%2#0,tmp%78#0,{len} arc4.abimethod typed_abi_call/logger.py:65 - // virtual: store data_length%0#0 to l-stack (no copy) encoded_value%3#0,val_as_bytes%1#0,encoded_value%2#0,tmp%78#0,data_length%0#0 arc4.abimethod typed_abi_call/logger.py:65 - int 76 // encoded_value%3#0,val_as_bytes%1#0,encoded_value%2#0,tmp%78#0,data_length%0#0,76 arc4.abimethod typed_abi_call/logger.py:65 - uncover 1 // load data_length%0#0 from l-stack (no copy) encoded_value%3#0,val_as_bytes%1#0,encoded_value%2#0,tmp%78#0,76,data_length%0#0 arc4.abimethod typed_abi_call/logger.py:65 - + // encoded_value%3#0,val_as_bytes%1#0,encoded_value%2#0,tmp%78#0,{+} arc4.abimethod typed_abi_call/logger.py:65 - // virtual: store current_tail_offset%1#0 to l-stack (no copy) encoded_value%3#0,val_as_bytes%1#0,encoded_value%2#0,tmp%78#0,current_tail_offset%1#0 arc4.abimethod typed_abi_call/logger.py:65 - // virtual: load current_tail_offset%1#0 from l-stack (no copy) encoded_value%3#0,val_as_bytes%1#0,encoded_value%2#0,tmp%78#0,current_tail_offset%1#0 arc4.abimethod typed_abi_call/logger.py:65 - itob // encoded_value%3#0,val_as_bytes%1#0,encoded_value%2#0,tmp%78#0,{itob} arc4.abimethod typed_abi_call/logger.py:65 - // virtual: store as_bytes%5#0 to l-stack (no copy) encoded_value%3#0,val_as_bytes%1#0,encoded_value%2#0,tmp%78#0,as_bytes%5#0 arc4.abimethod typed_abi_call/logger.py:65 - // virtual: load as_bytes%5#0 from l-stack (no copy) encoded_value%3#0,val_as_bytes%1#0,encoded_value%2#0,tmp%78#0,as_bytes%5#0 arc4.abimethod typed_abi_call/logger.py:65 - extract 6 2 // encoded_value%3#0,val_as_bytes%1#0,encoded_value%2#0,tmp%78#0,{extract} arc4.abimethod typed_abi_call/logger.py:65 - // virtual: store offset_as_uint16%1#0 to l-stack (no copy) encoded_value%3#0,val_as_bytes%1#0,encoded_value%2#0,tmp%78#0,offset_as_uint16%1#0 arc4.abimethod typed_abi_call/logger.py:65 - byte 0x004c // encoded_value%3#0,val_as_bytes%1#0,encoded_value%2#0,tmp%78#0,offset_as_uint16%1#0,0x004c arc4.abimethod typed_abi_call/logger.py:65 - uncover 1 // load offset_as_uint16%1#0 from l-stack (no copy) encoded_value%3#0,val_as_bytes%1#0,encoded_value%2#0,tmp%78#0,0x004c,offset_as_uint16%1#0 arc4.abimethod typed_abi_call/logger.py:65 - concat // encoded_value%3#0,val_as_bytes%1#0,encoded_value%2#0,tmp%78#0,{concat} arc4.abimethod typed_abi_call/logger.py:65 - // virtual: store encoded_tuple_buffer%2#0 to l-stack (no copy) encoded_value%3#0,val_as_bytes%1#0,encoded_value%2#0,tmp%78#0,encoded_tuple_buffer%2#0 arc4.abimethod typed_abi_call/logger.py:65 - // virtual: load encoded_tuple_buffer%2#0 from l-stack (no copy) encoded_value%3#0,val_as_bytes%1#0,encoded_value%2#0,tmp%78#0,encoded_tuple_buffer%2#0 arc4.abimethod typed_abi_call/logger.py:65 - uncover 3 // load val_as_bytes%1#0 from l-stack (no copy) encoded_value%3#0,encoded_value%2#0,tmp%78#0,encoded_tuple_buffer%2#0,val_as_bytes%1#0 arc4.abimethod typed_abi_call/logger.py:65 - concat // encoded_value%3#0,encoded_value%2#0,tmp%78#0,{concat} arc4.abimethod typed_abi_call/logger.py:65 - // virtual: store encoded_tuple_buffer%3#0 to l-stack (no copy) encoded_value%3#0,encoded_value%2#0,tmp%78#0,encoded_tuple_buffer%3#0 arc4.abimethod typed_abi_call/logger.py:65 - // virtual: load encoded_tuple_buffer%3#0 from l-stack (no copy) encoded_value%3#0,encoded_value%2#0,tmp%78#0,encoded_tuple_buffer%3#0 arc4.abimethod typed_abi_call/logger.py:65 - uncover 1 // load tmp%78#0 from l-stack (no copy) encoded_value%3#0,encoded_value%2#0,encoded_tuple_buffer%3#0,tmp%78#0 arc4.abimethod typed_abi_call/logger.py:65 - concat // encoded_value%3#0,encoded_value%2#0,{concat} arc4.abimethod typed_abi_call/logger.py:65 - // virtual: store encoded_tuple_buffer%4#0 to l-stack (no copy) encoded_value%3#0,encoded_value%2#0,encoded_tuple_buffer%4#0 arc4.abimethod typed_abi_call/logger.py:65 - // virtual: load encoded_tuple_buffer%4#0 from l-stack (no copy) encoded_value%3#0,encoded_value%2#0,encoded_tuple_buffer%4#0 arc4.abimethod typed_abi_call/logger.py:65 - uncover 1 // load encoded_value%2#0 from l-stack (no copy) encoded_value%3#0,encoded_tuple_buffer%4#0,encoded_value%2#0 arc4.abimethod typed_abi_call/logger.py:65 - concat // encoded_value%3#0,{concat} arc4.abimethod typed_abi_call/logger.py:65 - // virtual: store encoded_tuple_buffer%5#0 to l-stack (no copy) encoded_value%3#0,encoded_tuple_buffer%5#0 arc4.abimethod typed_abi_call/logger.py:65 - // virtual: load encoded_tuple_buffer%5#0 from l-stack (no copy) encoded_value%3#0,encoded_tuple_buffer%5#0 arc4.abimethod typed_abi_call/logger.py:65 - uncover 1 // load encoded_value%3#0 from l-stack (no copy) encoded_tuple_buffer%5#0,encoded_value%3#0 arc4.abimethod typed_abi_call/logger.py:65 - concat // {concat} arc4.abimethod typed_abi_call/logger.py:65 - // virtual: store encoded_tuple_buffer%6#0 to l-stack (no copy) encoded_tuple_buffer%6#0 arc4.abimethod typed_abi_call/logger.py:65 - byte 0x151f7c75 // encoded_tuple_buffer%6#0,0x151f7c75 arc4.abimethod typed_abi_call/logger.py:65 - uncover 1 // load encoded_tuple_buffer%6#0 from l-stack (no copy) 0x151f7c75,encoded_tuple_buffer%6#0 arc4.abimethod typed_abi_call/logger.py:65 - concat // {concat} arc4.abimethod typed_abi_call/logger.py:65 - // virtual: store tmp%79#0 to l-stack (no copy) tmp%79#0 arc4.abimethod typed_abi_call/logger.py:65 - // virtual: load tmp%79#0 from l-stack (no copy) tmp%79#0 arc4.abimethod typed_abi_call/logger.py:65 - log // arc4.abimethod typed_abi_call/logger.py:65 - int 1 // 1 arc4.abimethod typed_abi_call/logger.py:65 - return // arc4.abimethod typed_abi_call/logger.py:65 - -main_return_args_after_14th_route@14: - txn OnCompletion // {txn} arc4.abimethod typed_abi_call/logger.py:71 - // virtual: store tmp%80#0 to l-stack (no copy) tmp%80#0 arc4.abimethod typed_abi_call/logger.py:71 - // virtual: load tmp%80#0 from l-stack (no copy) tmp%80#0 arc4.abimethod typed_abi_call/logger.py:71 - ! // {!} arc4.abimethod typed_abi_call/logger.py:71 - // virtual: store tmp%81#0 to l-stack (no copy) tmp%81#0 arc4.abimethod typed_abi_call/logger.py:71 - // virtual: load tmp%81#0 from l-stack (no copy) tmp%81#0 arc4.abimethod typed_abi_call/logger.py:71 - assert // OnCompletion is NoOp // arc4.abimethod typed_abi_call/logger.py:71 - txn ApplicationID // {txn} arc4.abimethod typed_abi_call/logger.py:71 - // virtual: store tmp%82#0 to l-stack (no copy) tmp%82#0 arc4.abimethod typed_abi_call/logger.py:71 - // virtual: load tmp%82#0 from l-stack (no copy) tmp%82#0 arc4.abimethod typed_abi_call/logger.py:71 - assert // is not creating // arc4.abimethod typed_abi_call/logger.py:71 - txna ApplicationArgs 1 // {txna} class Logger(ARC4Contract): typed_abi_call/logger.py:20 - // virtual: store tmp%83#0 to l-stack (no copy) tmp%83#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 - txna ApplicationArgs 2 // tmp%83#0,{txna} class Logger(ARC4Contract): typed_abi_call/logger.py:20 - // virtual: store tmp%84#0 to l-stack (no copy) tmp%83#0,tmp%84#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 - txna ApplicationArgs 3 // tmp%83#0,tmp%84#0,{txna} class Logger(ARC4Contract): typed_abi_call/logger.py:20 - // virtual: store tmp%85#0 to l-stack (no copy) tmp%83#0,tmp%84#0,tmp%85#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 - txna ApplicationArgs 4 // tmp%83#0,tmp%84#0,tmp%85#0,{txna} class Logger(ARC4Contract): typed_abi_call/logger.py:20 - // virtual: store tmp%86#0 to l-stack (no copy) tmp%83#0,tmp%84#0,tmp%85#0,tmp%86#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 - txna ApplicationArgs 5 // tmp%83#0,tmp%84#0,tmp%85#0,tmp%86#0,{txna} class Logger(ARC4Contract): typed_abi_call/logger.py:20 - // virtual: store tmp%87#0 to l-stack (no copy) tmp%83#0,tmp%84#0,tmp%85#0,tmp%86#0,tmp%87#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 - txna ApplicationArgs 6 // tmp%83#0,tmp%84#0,tmp%85#0,tmp%86#0,tmp%87#0,{txna} class Logger(ARC4Contract): typed_abi_call/logger.py:20 - // virtual: store tmp%88#0 to l-stack (no copy) tmp%83#0,tmp%84#0,tmp%85#0,tmp%86#0,tmp%87#0,tmp%88#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 - txna ApplicationArgs 7 // tmp%83#0,tmp%84#0,tmp%85#0,tmp%86#0,tmp%87#0,tmp%88#0,{txna} class Logger(ARC4Contract): typed_abi_call/logger.py:20 - // virtual: store tmp%89#0 to l-stack (no copy) tmp%83#0,tmp%84#0,tmp%85#0,tmp%86#0,tmp%87#0,tmp%88#0,tmp%89#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 - txna ApplicationArgs 8 // tmp%83#0,tmp%84#0,tmp%85#0,tmp%86#0,tmp%87#0,tmp%88#0,tmp%89#0,{txna} class Logger(ARC4Contract): typed_abi_call/logger.py:20 - // virtual: store tmp%90#0 to l-stack (no copy) tmp%83#0,tmp%84#0,tmp%85#0,tmp%86#0,tmp%87#0,tmp%88#0,tmp%89#0,tmp%90#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 - txna ApplicationArgs 9 // tmp%83#0,tmp%84#0,tmp%85#0,tmp%86#0,tmp%87#0,tmp%88#0,tmp%89#0,tmp%90#0,{txna} class Logger(ARC4Contract): typed_abi_call/logger.py:20 - // virtual: store tmp%91#0 to l-stack (no copy) tmp%83#0,tmp%84#0,tmp%85#0,tmp%86#0,tmp%87#0,tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 - txna ApplicationArgs 10 // tmp%83#0,tmp%84#0,tmp%85#0,tmp%86#0,tmp%87#0,tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,{txna} class Logger(ARC4Contract): typed_abi_call/logger.py:20 - // virtual: store tmp%92#0 to l-stack (no copy) tmp%83#0,tmp%84#0,tmp%85#0,tmp%86#0,tmp%87#0,tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 - txna ApplicationArgs 11 // tmp%83#0,tmp%84#0,tmp%85#0,tmp%86#0,tmp%87#0,tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,{txna} class Logger(ARC4Contract): typed_abi_call/logger.py:20 - // virtual: store tmp%93#0 to l-stack (no copy) tmp%83#0,tmp%84#0,tmp%85#0,tmp%86#0,tmp%87#0,tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 - txna ApplicationArgs 12 // tmp%83#0,tmp%84#0,tmp%85#0,tmp%86#0,tmp%87#0,tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,{txna} class Logger(ARC4Contract): typed_abi_call/logger.py:20 - // virtual: store tmp%94#0 to l-stack (no copy) tmp%83#0,tmp%84#0,tmp%85#0,tmp%86#0,tmp%87#0,tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 - txna ApplicationArgs 13 // tmp%83#0,tmp%84#0,tmp%85#0,tmp%86#0,tmp%87#0,tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,{txna} class Logger(ARC4Contract): typed_abi_call/logger.py:20 - // virtual: store tmp%95#0 to l-stack (no copy) tmp%83#0,tmp%84#0,tmp%85#0,tmp%86#0,tmp%87#0,tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 - txna ApplicationArgs 14 // tmp%83#0,tmp%84#0,tmp%85#0,tmp%86#0,tmp%87#0,tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,{txna} class Logger(ARC4Contract): typed_abi_call/logger.py:20 - // virtual: store tmp%96#0 to l-stack (no copy) tmp%83#0,tmp%84#0,tmp%85#0,tmp%86#0,tmp%87#0,tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 - txna ApplicationArgs 15 // tmp%83#0,tmp%84#0,tmp%85#0,tmp%86#0,tmp%87#0,tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,{txna} class Logger(ARC4Contract): typed_abi_call/logger.py:20 - // virtual: store tmp%97#0 to l-stack (no copy) tmp%83#0,tmp%84#0,tmp%85#0,tmp%86#0,tmp%87#0,tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,tmp%97#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 - // virtual: load tmp%97#0 from l-stack (no copy) tmp%83#0,tmp%84#0,tmp%85#0,tmp%86#0,tmp%87#0,tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,tmp%97#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 - extract 0 1 // on error: Index access is out of bounds // tmp%83#0,tmp%84#0,tmp%85#0,tmp%86#0,tmp%87#0,tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,{extract} class Logger(ARC4Contract): typed_abi_call/logger.py:20 - // virtual: store tmp%98#0 to l-stack (no copy) tmp%83#0,tmp%84#0,tmp%85#0,tmp%86#0,tmp%87#0,tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,tmp%98#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 - txna ApplicationArgs 15 // tmp%83#0,tmp%84#0,tmp%85#0,tmp%86#0,tmp%87#0,tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,tmp%98#0,{txna} class Logger(ARC4Contract): typed_abi_call/logger.py:20 - // virtual: store tmp%99#0 to l-stack (no copy) tmp%83#0,tmp%84#0,tmp%85#0,tmp%86#0,tmp%87#0,tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,tmp%98#0,tmp%99#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 - // virtual: load tmp%99#0 from l-stack (no copy) tmp%83#0,tmp%84#0,tmp%85#0,tmp%86#0,tmp%87#0,tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,tmp%98#0,tmp%99#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 - extract 1 1 // on error: Index access is out of bounds // tmp%83#0,tmp%84#0,tmp%85#0,tmp%86#0,tmp%87#0,tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,tmp%98#0,{extract} class Logger(ARC4Contract): typed_abi_call/logger.py:20 - // virtual: store tmp%100#0 to l-stack (no copy) tmp%83#0,tmp%84#0,tmp%85#0,tmp%86#0,tmp%87#0,tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,tmp%98#0,tmp%100#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 - txna ApplicationArgs 15 // tmp%83#0,tmp%84#0,tmp%85#0,tmp%86#0,tmp%87#0,tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,tmp%98#0,tmp%100#0,{txna} class Logger(ARC4Contract): typed_abi_call/logger.py:20 - // virtual: store tmp%101#0 to l-stack (no copy) tmp%83#0,tmp%84#0,tmp%85#0,tmp%86#0,tmp%87#0,tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,tmp%98#0,tmp%100#0,tmp%101#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 - // virtual: load tmp%101#0 from l-stack (no copy) tmp%83#0,tmp%84#0,tmp%85#0,tmp%86#0,tmp%87#0,tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,tmp%98#0,tmp%100#0,tmp%101#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 - extract 2 1 // on error: Index access is out of bounds // tmp%83#0,tmp%84#0,tmp%85#0,tmp%86#0,tmp%87#0,tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,tmp%98#0,tmp%100#0,{extract} class Logger(ARC4Contract): typed_abi_call/logger.py:20 - // virtual: store tmp%102#0 to l-stack (no copy) tmp%83#0,tmp%84#0,tmp%85#0,tmp%86#0,tmp%87#0,tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,tmp%98#0,tmp%100#0,tmp%102#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 - txna ApplicationArgs 15 // tmp%83#0,tmp%84#0,tmp%85#0,tmp%86#0,tmp%87#0,tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,tmp%98#0,tmp%100#0,tmp%102#0,{txna} class Logger(ARC4Contract): typed_abi_call/logger.py:20 - // virtual: store tmp%103#0 to l-stack (no copy) tmp%83#0,tmp%84#0,tmp%85#0,tmp%86#0,tmp%87#0,tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,tmp%98#0,tmp%100#0,tmp%102#0,tmp%103#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 - // virtual: load tmp%103#0 from l-stack (no copy) tmp%83#0,tmp%84#0,tmp%85#0,tmp%86#0,tmp%87#0,tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,tmp%98#0,tmp%100#0,tmp%102#0,tmp%103#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 - extract 3 1 // on error: Index access is out of bounds // tmp%83#0,tmp%84#0,tmp%85#0,tmp%86#0,tmp%87#0,tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,tmp%98#0,tmp%100#0,tmp%102#0,{extract} class Logger(ARC4Contract): typed_abi_call/logger.py:20 - // virtual: store tmp%104#0 to l-stack (no copy) tmp%83#0,tmp%84#0,tmp%85#0,tmp%86#0,tmp%87#0,tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,tmp%98#0,tmp%100#0,tmp%102#0,tmp%104#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 - txna ApplicationArgs 15 // tmp%83#0,tmp%84#0,tmp%85#0,tmp%86#0,tmp%87#0,tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,tmp%98#0,tmp%100#0,tmp%102#0,tmp%104#0,{txna} class Logger(ARC4Contract): typed_abi_call/logger.py:20 - // virtual: store tmp%105#0 to l-stack (no copy) tmp%83#0,tmp%84#0,tmp%85#0,tmp%86#0,tmp%87#0,tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,tmp%98#0,tmp%100#0,tmp%102#0,tmp%104#0,tmp%105#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 - // virtual: load tmp%105#0 from l-stack (no copy) tmp%83#0,tmp%84#0,tmp%85#0,tmp%86#0,tmp%87#0,tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,tmp%98#0,tmp%100#0,tmp%102#0,tmp%104#0,tmp%105#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 - extract 4 4 // on error: Index access is out of bounds // tmp%83#0,tmp%84#0,tmp%85#0,tmp%86#0,tmp%87#0,tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,tmp%98#0,tmp%100#0,tmp%102#0,tmp%104#0,{extract} class Logger(ARC4Contract): typed_abi_call/logger.py:20 - // virtual: store tmp%106#0 to l-stack (no copy) tmp%83#0,tmp%84#0,tmp%85#0,tmp%86#0,tmp%87#0,tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,tmp%98#0,tmp%100#0,tmp%102#0,tmp%104#0,tmp%106#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 - txna ApplicationArgs 15 // tmp%83#0,tmp%84#0,tmp%85#0,tmp%86#0,tmp%87#0,tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,tmp%98#0,tmp%100#0,tmp%102#0,tmp%104#0,tmp%106#0,{txna} class Logger(ARC4Contract): typed_abi_call/logger.py:20 - // virtual: store tmp%107#0 to l-stack (no copy) tmp%83#0,tmp%84#0,tmp%85#0,tmp%86#0,tmp%87#0,tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,tmp%98#0,tmp%100#0,tmp%102#0,tmp%104#0,tmp%106#0,tmp%107#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 - // virtual: load tmp%107#0 from l-stack (no copy) tmp%83#0,tmp%84#0,tmp%85#0,tmp%86#0,tmp%87#0,tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,tmp%98#0,tmp%100#0,tmp%102#0,tmp%104#0,tmp%106#0,tmp%107#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 - extract 8 1 // on error: Index access is out of bounds // tmp%83#0,tmp%84#0,tmp%85#0,tmp%86#0,tmp%87#0,tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,tmp%98#0,tmp%100#0,tmp%102#0,tmp%104#0,tmp%106#0,{extract} class Logger(ARC4Contract): typed_abi_call/logger.py:20 - // virtual: store tmp%108#0 to l-stack (no copy) tmp%83#0,tmp%84#0,tmp%85#0,tmp%86#0,tmp%87#0,tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,tmp%98#0,tmp%100#0,tmp%102#0,tmp%104#0,tmp%106#0,tmp%108#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 - uncover 19 // load tmp%83#0 from l-stack (no copy) tmp%84#0,tmp%85#0,tmp%86#0,tmp%87#0,tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,tmp%98#0,tmp%100#0,tmp%102#0,tmp%104#0,tmp%106#0,tmp%108#0,tmp%83#0 arc4.abimethod typed_abi_call/logger.py:71 - uncover 19 // load tmp%84#0 from l-stack (no copy) tmp%85#0,tmp%86#0,tmp%87#0,tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,tmp%98#0,tmp%100#0,tmp%102#0,tmp%104#0,tmp%106#0,tmp%108#0,tmp%83#0,tmp%84#0 arc4.abimethod typed_abi_call/logger.py:71 - uncover 19 // load tmp%85#0 from l-stack (no copy) tmp%86#0,tmp%87#0,tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,tmp%98#0,tmp%100#0,tmp%102#0,tmp%104#0,tmp%106#0,tmp%108#0,tmp%83#0,tmp%84#0,tmp%85#0 arc4.abimethod typed_abi_call/logger.py:71 - uncover 19 // load tmp%86#0 from l-stack (no copy) tmp%87#0,tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,tmp%98#0,tmp%100#0,tmp%102#0,tmp%104#0,tmp%106#0,tmp%108#0,tmp%83#0,tmp%84#0,tmp%85#0,tmp%86#0 arc4.abimethod typed_abi_call/logger.py:71 - uncover 19 // load tmp%87#0 from l-stack (no copy) tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,tmp%98#0,tmp%100#0,tmp%102#0,tmp%104#0,tmp%106#0,tmp%108#0,tmp%83#0,tmp%84#0,tmp%85#0,tmp%86#0,tmp%87#0 arc4.abimethod typed_abi_call/logger.py:71 - uncover 19 // load tmp%88#0 from l-stack (no copy) tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,tmp%98#0,tmp%100#0,tmp%102#0,tmp%104#0,tmp%106#0,tmp%108#0,tmp%83#0,tmp%84#0,tmp%85#0,tmp%86#0,tmp%87#0,tmp%88#0 arc4.abimethod typed_abi_call/logger.py:71 - uncover 19 // load tmp%89#0 from l-stack (no copy) tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,tmp%98#0,tmp%100#0,tmp%102#0,tmp%104#0,tmp%106#0,tmp%108#0,tmp%83#0,tmp%84#0,tmp%85#0,tmp%86#0,tmp%87#0,tmp%88#0,tmp%89#0 arc4.abimethod typed_abi_call/logger.py:71 - uncover 19 // load tmp%90#0 from l-stack (no copy) tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,tmp%98#0,tmp%100#0,tmp%102#0,tmp%104#0,tmp%106#0,tmp%108#0,tmp%83#0,tmp%84#0,tmp%85#0,tmp%86#0,tmp%87#0,tmp%88#0,tmp%89#0,tmp%90#0 arc4.abimethod typed_abi_call/logger.py:71 - uncover 19 // load tmp%91#0 from l-stack (no copy) tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,tmp%98#0,tmp%100#0,tmp%102#0,tmp%104#0,tmp%106#0,tmp%108#0,tmp%83#0,tmp%84#0,tmp%85#0,tmp%86#0,tmp%87#0,tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0 arc4.abimethod typed_abi_call/logger.py:71 - uncover 19 // load tmp%92#0 from l-stack (no copy) tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,tmp%98#0,tmp%100#0,tmp%102#0,tmp%104#0,tmp%106#0,tmp%108#0,tmp%83#0,tmp%84#0,tmp%85#0,tmp%86#0,tmp%87#0,tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0 arc4.abimethod typed_abi_call/logger.py:71 - uncover 19 // load tmp%93#0 from l-stack (no copy) tmp%94#0,tmp%95#0,tmp%96#0,tmp%98#0,tmp%100#0,tmp%102#0,tmp%104#0,tmp%106#0,tmp%108#0,tmp%83#0,tmp%84#0,tmp%85#0,tmp%86#0,tmp%87#0,tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0 arc4.abimethod typed_abi_call/logger.py:71 - uncover 19 // load tmp%94#0 from l-stack (no copy) tmp%95#0,tmp%96#0,tmp%98#0,tmp%100#0,tmp%102#0,tmp%104#0,tmp%106#0,tmp%108#0,tmp%83#0,tmp%84#0,tmp%85#0,tmp%86#0,tmp%87#0,tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0 arc4.abimethod typed_abi_call/logger.py:71 - uncover 19 // load tmp%95#0 from l-stack (no copy) tmp%96#0,tmp%98#0,tmp%100#0,tmp%102#0,tmp%104#0,tmp%106#0,tmp%108#0,tmp%83#0,tmp%84#0,tmp%85#0,tmp%86#0,tmp%87#0,tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0 arc4.abimethod typed_abi_call/logger.py:71 - uncover 19 // load tmp%96#0 from l-stack (no copy) tmp%98#0,tmp%100#0,tmp%102#0,tmp%104#0,tmp%106#0,tmp%108#0,tmp%83#0,tmp%84#0,tmp%85#0,tmp%86#0,tmp%87#0,tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0 arc4.abimethod typed_abi_call/logger.py:71 - uncover 19 // load tmp%98#0 from l-stack (no copy) tmp%100#0,tmp%102#0,tmp%104#0,tmp%106#0,tmp%108#0,tmp%83#0,tmp%84#0,tmp%85#0,tmp%86#0,tmp%87#0,tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,tmp%98#0 arc4.abimethod typed_abi_call/logger.py:71 - uncover 19 // load tmp%100#0 from l-stack (no copy) tmp%102#0,tmp%104#0,tmp%106#0,tmp%108#0,tmp%83#0,tmp%84#0,tmp%85#0,tmp%86#0,tmp%87#0,tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,tmp%98#0,tmp%100#0 arc4.abimethod typed_abi_call/logger.py:71 - uncover 19 // load tmp%102#0 from l-stack (no copy) tmp%104#0,tmp%106#0,tmp%108#0,tmp%83#0,tmp%84#0,tmp%85#0,tmp%86#0,tmp%87#0,tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,tmp%98#0,tmp%100#0,tmp%102#0 arc4.abimethod typed_abi_call/logger.py:71 - uncover 19 // load tmp%104#0 from l-stack (no copy) tmp%106#0,tmp%108#0,tmp%83#0,tmp%84#0,tmp%85#0,tmp%86#0,tmp%87#0,tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,tmp%98#0,tmp%100#0,tmp%102#0,tmp%104#0 arc4.abimethod typed_abi_call/logger.py:71 - uncover 19 // load tmp%106#0 from l-stack (no copy) tmp%108#0,tmp%83#0,tmp%84#0,tmp%85#0,tmp%86#0,tmp%87#0,tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,tmp%98#0,tmp%100#0,tmp%102#0,tmp%104#0,tmp%106#0 arc4.abimethod typed_abi_call/logger.py:71 - uncover 19 // load tmp%108#0 from l-stack (no copy) tmp%83#0,tmp%84#0,tmp%85#0,tmp%86#0,tmp%87#0,tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,tmp%98#0,tmp%100#0,tmp%102#0,tmp%104#0,tmp%106#0,tmp%108#0 arc4.abimethod typed_abi_call/logger.py:71 - callsub return_args_after_14th // {return_args_after_14th} arc4.abimethod typed_abi_call/logger.py:71 - // virtual: store tmp%109#0 to l-stack (no copy) tmp%109#0 arc4.abimethod typed_abi_call/logger.py:71 - byte 0x151f7c75 // tmp%109#0,0x151f7c75 arc4.abimethod typed_abi_call/logger.py:71 - uncover 1 // load tmp%109#0 from l-stack (no copy) 0x151f7c75,tmp%109#0 arc4.abimethod typed_abi_call/logger.py:71 - concat // {concat} arc4.abimethod typed_abi_call/logger.py:71 - // virtual: store tmp%110#0 to l-stack (no copy) tmp%110#0 arc4.abimethod typed_abi_call/logger.py:71 - // virtual: load tmp%110#0 from l-stack (no copy) tmp%110#0 arc4.abimethod typed_abi_call/logger.py:71 - log // arc4.abimethod typed_abi_call/logger.py:71 - int 1 // 1 arc4.abimethod typed_abi_call/logger.py:71 - return // arc4.abimethod typed_abi_call/logger.py:71 - -main_bare_routing@17: - txn OnCompletion // {txn} class Logger(ARC4Contract): typed_abi_call/logger.py:20 - // virtual: store tmp%111#0 to l-stack (no copy) tmp%111#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 - // virtual: load tmp%111#0 from l-stack (no copy) tmp%111#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 - ! // {!} class Logger(ARC4Contract): typed_abi_call/logger.py:20 - // virtual: store not%tmp%111#0 to l-stack (no copy) not%tmp%111#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 - // virtual: load not%tmp%111#0 from l-stack (no copy) not%tmp%111#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 - assert // reject transaction // class Logger(ARC4Contract): typed_abi_call/logger.py:20 - txn ApplicationID // {txn} class Logger(ARC4Contract): typed_abi_call/logger.py:20 - // virtual: store tmp%112#0 to l-stack (no copy) tmp%112#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 - // virtual: load tmp%112#0 from l-stack (no copy) tmp%112#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 - ! // {!} class Logger(ARC4Contract): typed_abi_call/logger.py:20 - // virtual: store tmp%113#0 to l-stack (no copy) tmp%113#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 - // virtual: load tmp%113#0 from l-stack (no copy) tmp%113#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 - assert // is creating // class Logger(ARC4Contract): typed_abi_call/logger.py:20 - int 1 // 1 class Logger(ARC4Contract): typed_abi_call/logger.py:20 - return // class Logger(ARC4Contract): typed_abi_call/logger.py:20 + txn OnCompletion // {txn} arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:45 + // virtual: store tmp%29#0 to l-stack (no copy) tmp%29#0 arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:45 + // virtual: load tmp%29#0 from l-stack (no copy) tmp%29#0 arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:45 + ! // {!} arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:45 + // virtual: store tmp%30#0 to l-stack (no copy) tmp%30#0 arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:45 + // virtual: load tmp%30#0 from l-stack (no copy) tmp%30#0 arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:45 + assert // OnCompletion is NoOp // arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:45 + txn ApplicationID // {txn} arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:45 + // virtual: store tmp%31#0 to l-stack (no copy) tmp%31#0 arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:45 + // virtual: load tmp%31#0 from l-stack (no copy) tmp%31#0 arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:45 + assert // is not creating // arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:45 + txna ApplicationArgs 1 // {txna} class Logger(ARC4Contract): typed_abi_call/logger.py:20 + // virtual: store tmp%32#0 to l-stack (no copy) tmp%32#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 + // virtual: load tmp%32#0 from l-stack (no copy) tmp%32#0 arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:45 + callsub log_bytes // arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:45 + int 1 // 1 arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:45 + return // arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:45 + +main_log_route@9: + txn OnCompletion // {txn} arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:49 + // virtual: store tmp%33#0 to l-stack (no copy) tmp%33#0 arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:49 + // virtual: load tmp%33#0 from l-stack (no copy) tmp%33#0 arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:49 + ! // {!} arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:49 + // virtual: store tmp%34#0 to l-stack (no copy) tmp%34#0 arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:49 + // virtual: load tmp%34#0 from l-stack (no copy) tmp%34#0 arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:49 + assert // OnCompletion is NoOp // arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:49 + txn ApplicationID // {txn} arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:49 + // virtual: store tmp%35#0 to l-stack (no copy) tmp%35#0 arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:49 + // virtual: load tmp%35#0 from l-stack (no copy) tmp%35#0 arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:49 + assert // is not creating // arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:49 + txna ApplicationArgs 1 // {txna} class Logger(ARC4Contract): typed_abi_call/logger.py:20 + // virtual: store tmp%36#0 to l-stack (no copy) tmp%36#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 + // virtual: load tmp%36#0 from l-stack (no copy) tmp%36#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 + btoi // {btoi} class Logger(ARC4Contract): typed_abi_call/logger.py:20 + // virtual: store tmp%37#0 to l-stack (no copy) tmp%37#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 + // virtual: load tmp%37#0 from l-stack (no copy) tmp%37#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 + txnas Assets // {txnas} class Logger(ARC4Contract): typed_abi_call/logger.py:20 + // virtual: store tmp%38#0 to l-stack (no copy) tmp%38#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 + txna ApplicationArgs 2 // tmp%38#0,{txna} class Logger(ARC4Contract): typed_abi_call/logger.py:20 + // virtual: store tmp%39#0 to l-stack (no copy) tmp%38#0,tmp%39#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 + // virtual: load tmp%39#0 from l-stack (no copy) tmp%38#0,tmp%39#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 + btoi // tmp%38#0,{btoi} class Logger(ARC4Contract): typed_abi_call/logger.py:20 + // virtual: store tmp%40#0 to l-stack (no copy) tmp%38#0,tmp%40#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 + // virtual: load tmp%40#0 from l-stack (no copy) tmp%38#0,tmp%40#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 + txnas Accounts // tmp%38#0,{txnas} class Logger(ARC4Contract): typed_abi_call/logger.py:20 + // virtual: store tmp%41#0 to l-stack (no copy) tmp%38#0,tmp%41#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 + txna ApplicationArgs 3 // tmp%38#0,tmp%41#0,{txna} class Logger(ARC4Contract): typed_abi_call/logger.py:20 + // virtual: store tmp%42#0 to l-stack (no copy) tmp%38#0,tmp%41#0,tmp%42#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 + // virtual: load tmp%42#0 from l-stack (no copy) tmp%38#0,tmp%41#0,tmp%42#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 + btoi // tmp%38#0,tmp%41#0,{btoi} class Logger(ARC4Contract): typed_abi_call/logger.py:20 + // virtual: store tmp%43#0 to l-stack (no copy) tmp%38#0,tmp%41#0,tmp%43#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 + // virtual: load tmp%43#0 from l-stack (no copy) tmp%38#0,tmp%41#0,tmp%43#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 + txnas Applications // tmp%38#0,tmp%41#0,{txnas} class Logger(ARC4Contract): typed_abi_call/logger.py:20 + // virtual: store tmp%44#0 to l-stack (no copy) tmp%38#0,tmp%41#0,tmp%44#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 + uncover 2 // load tmp%38#0 from l-stack (no copy) tmp%41#0,tmp%44#0,tmp%38#0 arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:49 + uncover 2 // load tmp%41#0 from l-stack (no copy) tmp%44#0,tmp%38#0,tmp%41#0 arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:49 + uncover 2 // load tmp%44#0 from l-stack (no copy) tmp%38#0,tmp%41#0,tmp%44#0 arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:49 + callsub log_asset_account_app // arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:49 + int 1 // 1 arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:49 + return // arc4.abimethod(name=LOG_METHOD_NAME) typed_abi_call/logger.py:49 + +main_echo_native_string_route@10: + txn OnCompletion // {txn} arc4.abimethod typed_abi_call/logger.py:53 + // virtual: store tmp%45#0 to l-stack (no copy) tmp%45#0 arc4.abimethod typed_abi_call/logger.py:53 + // virtual: load tmp%45#0 from l-stack (no copy) tmp%45#0 arc4.abimethod typed_abi_call/logger.py:53 + ! // {!} arc4.abimethod typed_abi_call/logger.py:53 + // virtual: store tmp%46#0 to l-stack (no copy) tmp%46#0 arc4.abimethod typed_abi_call/logger.py:53 + // virtual: load tmp%46#0 from l-stack (no copy) tmp%46#0 arc4.abimethod typed_abi_call/logger.py:53 + assert // OnCompletion is NoOp // arc4.abimethod typed_abi_call/logger.py:53 + txn ApplicationID // {txn} arc4.abimethod typed_abi_call/logger.py:53 + // virtual: store tmp%47#0 to l-stack (no copy) tmp%47#0 arc4.abimethod typed_abi_call/logger.py:53 + // virtual: load tmp%47#0 from l-stack (no copy) tmp%47#0 arc4.abimethod typed_abi_call/logger.py:53 + assert // is not creating // arc4.abimethod typed_abi_call/logger.py:53 + txna ApplicationArgs 1 // {txna} class Logger(ARC4Contract): typed_abi_call/logger.py:20 + // virtual: store tmp%48#0 to l-stack (no copy) tmp%48#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 + // virtual: load tmp%48#0 from l-stack (no copy) tmp%48#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 + extract 2 0 // {extract} class Logger(ARC4Contract): typed_abi_call/logger.py:20 + // virtual: store tmp%49#0 to l-stack (no copy) tmp%49#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 + // virtual: load tmp%49#0 from l-stack (no copy) tmp%49#0 arc4.abimethod typed_abi_call/logger.py:53 + callsub echo_native_string // {echo_native_string} arc4.abimethod typed_abi_call/logger.py:53 + // virtual: store tmp%50#0 to l-stack (no copy) tmp%50#0 arc4.abimethod typed_abi_call/logger.py:53 + dup // load tmp%50#0 from l-stack (copy) tmp%50#0,tmp%50#0 arc4.abimethod typed_abi_call/logger.py:53 + len // tmp%50#0,{len} arc4.abimethod typed_abi_call/logger.py:53 + // virtual: store length%0#0 to l-stack (no copy) tmp%50#0,length%0#0 arc4.abimethod typed_abi_call/logger.py:53 + // virtual: load length%0#0 from l-stack (no copy) tmp%50#0,length%0#0 arc4.abimethod typed_abi_call/logger.py:53 + itob // tmp%50#0,{itob} arc4.abimethod typed_abi_call/logger.py:53 + // virtual: store as_bytes%0#0 to l-stack (no copy) tmp%50#0,as_bytes%0#0 arc4.abimethod typed_abi_call/logger.py:53 + // virtual: load as_bytes%0#0 from l-stack (no copy) tmp%50#0,as_bytes%0#0 arc4.abimethod typed_abi_call/logger.py:53 + extract 6 2 // tmp%50#0,{extract} arc4.abimethod typed_abi_call/logger.py:53 + // virtual: store length_uint16%0#0 to l-stack (no copy) tmp%50#0,length_uint16%0#0 arc4.abimethod typed_abi_call/logger.py:53 + // virtual: load length_uint16%0#0 from l-stack (no copy) tmp%50#0,length_uint16%0#0 arc4.abimethod typed_abi_call/logger.py:53 + uncover 1 // load tmp%50#0 from l-stack (no copy) length_uint16%0#0,tmp%50#0 arc4.abimethod typed_abi_call/logger.py:53 + concat // {concat} arc4.abimethod typed_abi_call/logger.py:53 + // virtual: store encoded_value%0#0 to l-stack (no copy) encoded_value%0#0 arc4.abimethod typed_abi_call/logger.py:53 + byte 0x151f7c75 // encoded_value%0#0,0x151f7c75 arc4.abimethod typed_abi_call/logger.py:53 + uncover 1 // load encoded_value%0#0 from l-stack (no copy) 0x151f7c75,encoded_value%0#0 arc4.abimethod typed_abi_call/logger.py:53 + concat // {concat} arc4.abimethod typed_abi_call/logger.py:53 + // virtual: store tmp%51#0 to l-stack (no copy) tmp%51#0 arc4.abimethod typed_abi_call/logger.py:53 + // virtual: load tmp%51#0 from l-stack (no copy) tmp%51#0 arc4.abimethod typed_abi_call/logger.py:53 + log // arc4.abimethod typed_abi_call/logger.py:53 + int 1 // 1 arc4.abimethod typed_abi_call/logger.py:53 + return // arc4.abimethod typed_abi_call/logger.py:53 + +main_echo_native_bytes_route@11: + txn OnCompletion // {txn} arc4.abimethod typed_abi_call/logger.py:57 + // virtual: store tmp%52#0 to l-stack (no copy) tmp%52#0 arc4.abimethod typed_abi_call/logger.py:57 + // virtual: load tmp%52#0 from l-stack (no copy) tmp%52#0 arc4.abimethod typed_abi_call/logger.py:57 + ! // {!} arc4.abimethod typed_abi_call/logger.py:57 + // virtual: store tmp%53#0 to l-stack (no copy) tmp%53#0 arc4.abimethod typed_abi_call/logger.py:57 + // virtual: load tmp%53#0 from l-stack (no copy) tmp%53#0 arc4.abimethod typed_abi_call/logger.py:57 + assert // OnCompletion is NoOp // arc4.abimethod typed_abi_call/logger.py:57 + txn ApplicationID // {txn} arc4.abimethod typed_abi_call/logger.py:57 + // virtual: store tmp%54#0 to l-stack (no copy) tmp%54#0 arc4.abimethod typed_abi_call/logger.py:57 + // virtual: load tmp%54#0 from l-stack (no copy) tmp%54#0 arc4.abimethod typed_abi_call/logger.py:57 + assert // is not creating // arc4.abimethod typed_abi_call/logger.py:57 + txna ApplicationArgs 1 // {txna} class Logger(ARC4Contract): typed_abi_call/logger.py:20 + // virtual: store tmp%55#0 to l-stack (no copy) tmp%55#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 + // virtual: load tmp%55#0 from l-stack (no copy) tmp%55#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 + extract 2 0 // {extract} class Logger(ARC4Contract): typed_abi_call/logger.py:20 + // virtual: store tmp%56#0 to l-stack (no copy) tmp%56#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 + // virtual: load tmp%56#0 from l-stack (no copy) tmp%56#0 arc4.abimethod typed_abi_call/logger.py:57 + callsub echo_native_bytes // {echo_native_bytes} arc4.abimethod typed_abi_call/logger.py:57 + // virtual: store tmp%57#0 to l-stack (no copy) tmp%57#0 arc4.abimethod typed_abi_call/logger.py:57 + dup // load tmp%57#0 from l-stack (copy) tmp%57#0,tmp%57#0 arc4.abimethod typed_abi_call/logger.py:57 + len // tmp%57#0,{len} arc4.abimethod typed_abi_call/logger.py:57 + // virtual: store length%1#0 to l-stack (no copy) tmp%57#0,length%1#0 arc4.abimethod typed_abi_call/logger.py:57 + // virtual: load length%1#0 from l-stack (no copy) tmp%57#0,length%1#0 arc4.abimethod typed_abi_call/logger.py:57 + itob // tmp%57#0,{itob} arc4.abimethod typed_abi_call/logger.py:57 + // virtual: store as_bytes%1#0 to l-stack (no copy) tmp%57#0,as_bytes%1#0 arc4.abimethod typed_abi_call/logger.py:57 + // virtual: load as_bytes%1#0 from l-stack (no copy) tmp%57#0,as_bytes%1#0 arc4.abimethod typed_abi_call/logger.py:57 + extract 6 2 // tmp%57#0,{extract} arc4.abimethod typed_abi_call/logger.py:57 + // virtual: store length_uint16%1#0 to l-stack (no copy) tmp%57#0,length_uint16%1#0 arc4.abimethod typed_abi_call/logger.py:57 + // virtual: load length_uint16%1#0 from l-stack (no copy) tmp%57#0,length_uint16%1#0 arc4.abimethod typed_abi_call/logger.py:57 + uncover 1 // load tmp%57#0 from l-stack (no copy) length_uint16%1#0,tmp%57#0 arc4.abimethod typed_abi_call/logger.py:57 + concat // {concat} arc4.abimethod typed_abi_call/logger.py:57 + // virtual: store encoded_value%1#0 to l-stack (no copy) encoded_value%1#0 arc4.abimethod typed_abi_call/logger.py:57 + byte 0x151f7c75 // encoded_value%1#0,0x151f7c75 arc4.abimethod typed_abi_call/logger.py:57 + uncover 1 // load encoded_value%1#0 from l-stack (no copy) 0x151f7c75,encoded_value%1#0 arc4.abimethod typed_abi_call/logger.py:57 + concat // {concat} arc4.abimethod typed_abi_call/logger.py:57 + // virtual: store tmp%58#0 to l-stack (no copy) tmp%58#0 arc4.abimethod typed_abi_call/logger.py:57 + // virtual: load tmp%58#0 from l-stack (no copy) tmp%58#0 arc4.abimethod typed_abi_call/logger.py:57 + log // arc4.abimethod typed_abi_call/logger.py:57 + int 1 // 1 arc4.abimethod typed_abi_call/logger.py:57 + return // arc4.abimethod typed_abi_call/logger.py:57 + +main_echo_native_uint64_route@12: + txn OnCompletion // {txn} arc4.abimethod typed_abi_call/logger.py:61 + // virtual: store tmp%59#0 to l-stack (no copy) tmp%59#0 arc4.abimethod typed_abi_call/logger.py:61 + // virtual: load tmp%59#0 from l-stack (no copy) tmp%59#0 arc4.abimethod typed_abi_call/logger.py:61 + ! // {!} arc4.abimethod typed_abi_call/logger.py:61 + // virtual: store tmp%60#0 to l-stack (no copy) tmp%60#0 arc4.abimethod typed_abi_call/logger.py:61 + // virtual: load tmp%60#0 from l-stack (no copy) tmp%60#0 arc4.abimethod typed_abi_call/logger.py:61 + assert // OnCompletion is NoOp // arc4.abimethod typed_abi_call/logger.py:61 + txn ApplicationID // {txn} arc4.abimethod typed_abi_call/logger.py:61 + // virtual: store tmp%61#0 to l-stack (no copy) tmp%61#0 arc4.abimethod typed_abi_call/logger.py:61 + // virtual: load tmp%61#0 from l-stack (no copy) tmp%61#0 arc4.abimethod typed_abi_call/logger.py:61 + assert // is not creating // arc4.abimethod typed_abi_call/logger.py:61 + txna ApplicationArgs 1 // {txna} class Logger(ARC4Contract): typed_abi_call/logger.py:20 + // virtual: store tmp%62#0 to l-stack (no copy) tmp%62#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 + // virtual: load tmp%62#0 from l-stack (no copy) tmp%62#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 + btoi // {btoi} class Logger(ARC4Contract): typed_abi_call/logger.py:20 + // virtual: store tmp%63#0 to l-stack (no copy) tmp%63#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 + // virtual: load tmp%63#0 from l-stack (no copy) tmp%63#0 arc4.abimethod typed_abi_call/logger.py:61 + callsub echo_native_uint64 // {echo_native_uint64} arc4.abimethod typed_abi_call/logger.py:61 + // virtual: store tmp%64#0 to l-stack (no copy) tmp%64#0 arc4.abimethod typed_abi_call/logger.py:61 + // virtual: load tmp%64#0 from l-stack (no copy) tmp%64#0 arc4.abimethod typed_abi_call/logger.py:61 + itob // {itob} arc4.abimethod typed_abi_call/logger.py:61 + // virtual: store val_as_bytes%1#0 to l-stack (no copy) val_as_bytes%1#0 arc4.abimethod typed_abi_call/logger.py:61 + byte 0x151f7c75 // val_as_bytes%1#0,0x151f7c75 arc4.abimethod typed_abi_call/logger.py:61 + uncover 1 // load val_as_bytes%1#0 from l-stack (no copy) 0x151f7c75,val_as_bytes%1#0 arc4.abimethod typed_abi_call/logger.py:61 + concat // {concat} arc4.abimethod typed_abi_call/logger.py:61 + // virtual: store tmp%65#0 to l-stack (no copy) tmp%65#0 arc4.abimethod typed_abi_call/logger.py:61 + // virtual: load tmp%65#0 from l-stack (no copy) tmp%65#0 arc4.abimethod typed_abi_call/logger.py:61 + log // arc4.abimethod typed_abi_call/logger.py:61 + int 1 // 1 arc4.abimethod typed_abi_call/logger.py:61 + return // arc4.abimethod typed_abi_call/logger.py:61 + +main_echo_native_biguint_route@13: + txn OnCompletion // {txn} arc4.abimethod typed_abi_call/logger.py:65 + // virtual: store tmp%66#0 to l-stack (no copy) tmp%66#0 arc4.abimethod typed_abi_call/logger.py:65 + // virtual: load tmp%66#0 from l-stack (no copy) tmp%66#0 arc4.abimethod typed_abi_call/logger.py:65 + ! // {!} arc4.abimethod typed_abi_call/logger.py:65 + // virtual: store tmp%67#0 to l-stack (no copy) tmp%67#0 arc4.abimethod typed_abi_call/logger.py:65 + // virtual: load tmp%67#0 from l-stack (no copy) tmp%67#0 arc4.abimethod typed_abi_call/logger.py:65 + assert // OnCompletion is NoOp // arc4.abimethod typed_abi_call/logger.py:65 + txn ApplicationID // {txn} arc4.abimethod typed_abi_call/logger.py:65 + // virtual: store tmp%68#0 to l-stack (no copy) tmp%68#0 arc4.abimethod typed_abi_call/logger.py:65 + // virtual: load tmp%68#0 from l-stack (no copy) tmp%68#0 arc4.abimethod typed_abi_call/logger.py:65 + assert // is not creating // arc4.abimethod typed_abi_call/logger.py:65 + txna ApplicationArgs 1 // {txna} class Logger(ARC4Contract): typed_abi_call/logger.py:20 + // virtual: store tmp%69#0 to l-stack (no copy) tmp%69#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 + // virtual: load tmp%69#0 from l-stack (no copy) tmp%69#0 arc4.abimethod typed_abi_call/logger.py:65 + callsub echo_native_biguint // {echo_native_biguint} arc4.abimethod typed_abi_call/logger.py:65 + // virtual: store tmp%70#0 to l-stack (no copy) tmp%70#0 arc4.abimethod typed_abi_call/logger.py:65 + dup // load tmp%70#0 from l-stack (copy) tmp%70#0,tmp%70#0 arc4.abimethod typed_abi_call/logger.py:65 + len // tmp%70#0,{len} arc4.abimethod typed_abi_call/logger.py:65 + // virtual: store len_%0#0 to l-stack (no copy) tmp%70#0,len_%0#0 arc4.abimethod typed_abi_call/logger.py:65 + // virtual: load len_%0#0 from l-stack (no copy) tmp%70#0,len_%0#0 arc4.abimethod typed_abi_call/logger.py:65 + int 64 // tmp%70#0,len_%0#0,64 arc4.abimethod typed_abi_call/logger.py:65 + <= // tmp%70#0,{<=} arc4.abimethod typed_abi_call/logger.py:65 + // virtual: store no_overflow%0#0 to l-stack (no copy) tmp%70#0,no_overflow%0#0 arc4.abimethod typed_abi_call/logger.py:65 + // virtual: load no_overflow%0#0 from l-stack (no copy) tmp%70#0,no_overflow%0#0 arc4.abimethod typed_abi_call/logger.py:65 + assert // overflow // tmp%70#0 arc4.abimethod typed_abi_call/logger.py:65 + int 64 // tmp%70#0,64 arc4.abimethod typed_abi_call/logger.py:65 + bzero // tmp%70#0,{bzero} arc4.abimethod typed_abi_call/logger.py:65 + // virtual: store b_zeros%0#0 to l-stack (no copy) tmp%70#0,b_zeros%0#0 arc4.abimethod typed_abi_call/logger.py:65 + // virtual: load tmp%70#0 from l-stack (no copy) b_zeros%0#0,tmp%70#0 arc4.abimethod typed_abi_call/logger.py:65 + // virtual: load b_zeros%0#0 from l-stack (no copy) tmp%70#0,b_zeros%0#0 arc4.abimethod typed_abi_call/logger.py:65 + b| // {b|} arc4.abimethod typed_abi_call/logger.py:65 + // virtual: store tmp%71#0 to l-stack (no copy) tmp%71#0 arc4.abimethod typed_abi_call/logger.py:65 + byte 0x151f7c75 // tmp%71#0,0x151f7c75 arc4.abimethod typed_abi_call/logger.py:65 + uncover 1 // load tmp%71#0 from l-stack (no copy) 0x151f7c75,tmp%71#0 arc4.abimethod typed_abi_call/logger.py:65 + concat // {concat} arc4.abimethod typed_abi_call/logger.py:65 + // virtual: store tmp%72#0 to l-stack (no copy) tmp%72#0 arc4.abimethod typed_abi_call/logger.py:65 + // virtual: load tmp%72#0 from l-stack (no copy) tmp%72#0 arc4.abimethod typed_abi_call/logger.py:65 + log // arc4.abimethod typed_abi_call/logger.py:65 + int 1 // 1 arc4.abimethod typed_abi_call/logger.py:65 + return // arc4.abimethod typed_abi_call/logger.py:65 + +main_echo_native_tuple_route@14: + txn OnCompletion // {txn} arc4.abimethod typed_abi_call/logger.py:69 + // virtual: store tmp%73#0 to l-stack (no copy) tmp%73#0 arc4.abimethod typed_abi_call/logger.py:69 + // virtual: load tmp%73#0 from l-stack (no copy) tmp%73#0 arc4.abimethod typed_abi_call/logger.py:69 + ! // {!} arc4.abimethod typed_abi_call/logger.py:69 + // virtual: store tmp%74#0 to l-stack (no copy) tmp%74#0 arc4.abimethod typed_abi_call/logger.py:69 + // virtual: load tmp%74#0 from l-stack (no copy) tmp%74#0 arc4.abimethod typed_abi_call/logger.py:69 + assert // OnCompletion is NoOp // arc4.abimethod typed_abi_call/logger.py:69 + txn ApplicationID // {txn} arc4.abimethod typed_abi_call/logger.py:69 + // virtual: store tmp%75#0 to l-stack (no copy) tmp%75#0 arc4.abimethod typed_abi_call/logger.py:69 + // virtual: load tmp%75#0 from l-stack (no copy) tmp%75#0 arc4.abimethod typed_abi_call/logger.py:69 + assert // is not creating // arc4.abimethod typed_abi_call/logger.py:69 + txna ApplicationArgs 1 // {txna} class Logger(ARC4Contract): typed_abi_call/logger.py:20 + // virtual: store tmp%76#0 to l-stack (no copy) tmp%76#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 + // virtual: load tmp%76#0 from l-stack (no copy) tmp%76#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 + extract 2 0 // {extract} class Logger(ARC4Contract): typed_abi_call/logger.py:20 + // virtual: store tmp%77#0 to l-stack (no copy) tmp%77#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 + txna ApplicationArgs 2 // tmp%77#0,{txna} class Logger(ARC4Contract): typed_abi_call/logger.py:20 + // virtual: store tmp%78#0 to l-stack (no copy) tmp%77#0,tmp%78#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 + // virtual: load tmp%78#0 from l-stack (no copy) tmp%77#0,tmp%78#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 + extract 2 0 // tmp%77#0,{extract} class Logger(ARC4Contract): typed_abi_call/logger.py:20 + // virtual: store tmp%79#0 to l-stack (no copy) tmp%77#0,tmp%79#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 + txna ApplicationArgs 3 // tmp%77#0,tmp%79#0,{txna} class Logger(ARC4Contract): typed_abi_call/logger.py:20 + // virtual: store tmp%80#0 to l-stack (no copy) tmp%77#0,tmp%79#0,tmp%80#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 + // virtual: load tmp%80#0 from l-stack (no copy) tmp%77#0,tmp%79#0,tmp%80#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 + btoi // tmp%77#0,tmp%79#0,{btoi} class Logger(ARC4Contract): typed_abi_call/logger.py:20 + // virtual: store tmp%81#0 to l-stack (no copy) tmp%77#0,tmp%79#0,tmp%81#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 + txna ApplicationArgs 4 // tmp%77#0,tmp%79#0,tmp%81#0,{txna} class Logger(ARC4Contract): typed_abi_call/logger.py:20 + // virtual: store tmp%82#0 to l-stack (no copy) tmp%77#0,tmp%79#0,tmp%81#0,tmp%82#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 + uncover 3 // load tmp%77#0 from l-stack (no copy) tmp%79#0,tmp%81#0,tmp%82#0,tmp%77#0 arc4.abimethod typed_abi_call/logger.py:69 + uncover 3 // load tmp%79#0 from l-stack (no copy) tmp%81#0,tmp%82#0,tmp%77#0,tmp%79#0 arc4.abimethod typed_abi_call/logger.py:69 + uncover 3 // load tmp%81#0 from l-stack (no copy) tmp%82#0,tmp%77#0,tmp%79#0,tmp%81#0 arc4.abimethod typed_abi_call/logger.py:69 + uncover 3 // load tmp%82#0 from l-stack (no copy) tmp%77#0,tmp%79#0,tmp%81#0,tmp%82#0 arc4.abimethod typed_abi_call/logger.py:69 + callsub echo_native_tuple // {echo_native_tuple}.0,{echo_native_tuple}.1,{echo_native_tuple}.2,{echo_native_tuple}.3 arc4.abimethod typed_abi_call/logger.py:69 + cover 3 // store awst_tmp%3#0 to l-stack (no copy) awst_tmp%3#0,{echo_native_tuple}.0,{echo_native_tuple}.1,{echo_native_tuple}.2 arc4.abimethod typed_abi_call/logger.py:69 + cover 2 // store awst_tmp%2#0 to l-stack (no copy) awst_tmp%3#0,awst_tmp%2#0,{echo_native_tuple}.0,{echo_native_tuple}.1 arc4.abimethod typed_abi_call/logger.py:69 + cover 1 // store awst_tmp%1#0 to l-stack (no copy) awst_tmp%3#0,awst_tmp%2#0,awst_tmp%1#0,{echo_native_tuple}.0 arc4.abimethod typed_abi_call/logger.py:69 + // virtual: store awst_tmp%0#0 to l-stack (no copy) awst_tmp%3#0,awst_tmp%2#0,awst_tmp%1#0,awst_tmp%0#0 arc4.abimethod typed_abi_call/logger.py:69 + dup // load awst_tmp%0#0 from l-stack (copy) awst_tmp%3#0,awst_tmp%2#0,awst_tmp%1#0,awst_tmp%0#0,awst_tmp%0#0 arc4.abimethod typed_abi_call/logger.py:69 + len // awst_tmp%3#0,awst_tmp%2#0,awst_tmp%1#0,awst_tmp%0#0,{len} arc4.abimethod typed_abi_call/logger.py:69 + // virtual: store length%2#0 to l-stack (no copy) awst_tmp%3#0,awst_tmp%2#0,awst_tmp%1#0,awst_tmp%0#0,length%2#0 arc4.abimethod typed_abi_call/logger.py:69 + // virtual: load length%2#0 from l-stack (no copy) awst_tmp%3#0,awst_tmp%2#0,awst_tmp%1#0,awst_tmp%0#0,length%2#0 arc4.abimethod typed_abi_call/logger.py:69 + itob // awst_tmp%3#0,awst_tmp%2#0,awst_tmp%1#0,awst_tmp%0#0,{itob} arc4.abimethod typed_abi_call/logger.py:69 + // virtual: store as_bytes%2#0 to l-stack (no copy) awst_tmp%3#0,awst_tmp%2#0,awst_tmp%1#0,awst_tmp%0#0,as_bytes%2#0 arc4.abimethod typed_abi_call/logger.py:69 + // virtual: load as_bytes%2#0 from l-stack (no copy) awst_tmp%3#0,awst_tmp%2#0,awst_tmp%1#0,awst_tmp%0#0,as_bytes%2#0 arc4.abimethod typed_abi_call/logger.py:69 + extract 6 2 // awst_tmp%3#0,awst_tmp%2#0,awst_tmp%1#0,awst_tmp%0#0,{extract} arc4.abimethod typed_abi_call/logger.py:69 + // virtual: store length_uint16%2#0 to l-stack (no copy) awst_tmp%3#0,awst_tmp%2#0,awst_tmp%1#0,awst_tmp%0#0,length_uint16%2#0 arc4.abimethod typed_abi_call/logger.py:69 + // virtual: load length_uint16%2#0 from l-stack (no copy) awst_tmp%3#0,awst_tmp%2#0,awst_tmp%1#0,awst_tmp%0#0,length_uint16%2#0 arc4.abimethod typed_abi_call/logger.py:69 + uncover 1 // load awst_tmp%0#0 from l-stack (no copy) awst_tmp%3#0,awst_tmp%2#0,awst_tmp%1#0,length_uint16%2#0,awst_tmp%0#0 arc4.abimethod typed_abi_call/logger.py:69 + concat // awst_tmp%3#0,awst_tmp%2#0,awst_tmp%1#0,{concat} arc4.abimethod typed_abi_call/logger.py:69 + cover 3 // store encoded_value%2#0 to l-stack (no copy) encoded_value%2#0,awst_tmp%3#0,awst_tmp%2#0,awst_tmp%1#0 arc4.abimethod typed_abi_call/logger.py:69 + dup // load awst_tmp%1#0 from l-stack (copy) encoded_value%2#0,awst_tmp%3#0,awst_tmp%2#0,awst_tmp%1#0,awst_tmp%1#0 arc4.abimethod typed_abi_call/logger.py:69 + len // encoded_value%2#0,awst_tmp%3#0,awst_tmp%2#0,awst_tmp%1#0,{len} arc4.abimethod typed_abi_call/logger.py:69 + // virtual: store length%3#0 to l-stack (no copy) encoded_value%2#0,awst_tmp%3#0,awst_tmp%2#0,awst_tmp%1#0,length%3#0 arc4.abimethod typed_abi_call/logger.py:69 + // virtual: load length%3#0 from l-stack (no copy) encoded_value%2#0,awst_tmp%3#0,awst_tmp%2#0,awst_tmp%1#0,length%3#0 arc4.abimethod typed_abi_call/logger.py:69 + itob // encoded_value%2#0,awst_tmp%3#0,awst_tmp%2#0,awst_tmp%1#0,{itob} arc4.abimethod typed_abi_call/logger.py:69 + // virtual: store as_bytes%3#0 to l-stack (no copy) encoded_value%2#0,awst_tmp%3#0,awst_tmp%2#0,awst_tmp%1#0,as_bytes%3#0 arc4.abimethod typed_abi_call/logger.py:69 + // virtual: load as_bytes%3#0 from l-stack (no copy) encoded_value%2#0,awst_tmp%3#0,awst_tmp%2#0,awst_tmp%1#0,as_bytes%3#0 arc4.abimethod typed_abi_call/logger.py:69 + extract 6 2 // encoded_value%2#0,awst_tmp%3#0,awst_tmp%2#0,awst_tmp%1#0,{extract} arc4.abimethod typed_abi_call/logger.py:69 + // virtual: store length_uint16%3#0 to l-stack (no copy) encoded_value%2#0,awst_tmp%3#0,awst_tmp%2#0,awst_tmp%1#0,length_uint16%3#0 arc4.abimethod typed_abi_call/logger.py:69 + // virtual: load length_uint16%3#0 from l-stack (no copy) encoded_value%2#0,awst_tmp%3#0,awst_tmp%2#0,awst_tmp%1#0,length_uint16%3#0 arc4.abimethod typed_abi_call/logger.py:69 + uncover 1 // load awst_tmp%1#0 from l-stack (no copy) encoded_value%2#0,awst_tmp%3#0,awst_tmp%2#0,length_uint16%3#0,awst_tmp%1#0 arc4.abimethod typed_abi_call/logger.py:69 + concat // encoded_value%2#0,awst_tmp%3#0,awst_tmp%2#0,{concat} arc4.abimethod typed_abi_call/logger.py:69 + cover 3 // store encoded_value%3#0 to l-stack (no copy) encoded_value%3#0,encoded_value%2#0,awst_tmp%3#0,awst_tmp%2#0 arc4.abimethod typed_abi_call/logger.py:69 + // virtual: load awst_tmp%2#0 from l-stack (no copy) encoded_value%3#0,encoded_value%2#0,awst_tmp%3#0,awst_tmp%2#0 arc4.abimethod typed_abi_call/logger.py:69 + itob // encoded_value%3#0,encoded_value%2#0,awst_tmp%3#0,{itob} arc4.abimethod typed_abi_call/logger.py:69 + cover 2 // store val_as_bytes%2#0 to l-stack (no copy) encoded_value%3#0,val_as_bytes%2#0,encoded_value%2#0,awst_tmp%3#0 arc4.abimethod typed_abi_call/logger.py:69 + dup // load awst_tmp%3#0 from l-stack (copy) encoded_value%3#0,val_as_bytes%2#0,encoded_value%2#0,awst_tmp%3#0,awst_tmp%3#0 arc4.abimethod typed_abi_call/logger.py:69 + len // encoded_value%3#0,val_as_bytes%2#0,encoded_value%2#0,awst_tmp%3#0,{len} arc4.abimethod typed_abi_call/logger.py:69 + // virtual: store len_%1#0 to l-stack (no copy) encoded_value%3#0,val_as_bytes%2#0,encoded_value%2#0,awst_tmp%3#0,len_%1#0 arc4.abimethod typed_abi_call/logger.py:69 + // virtual: load len_%1#0 from l-stack (no copy) encoded_value%3#0,val_as_bytes%2#0,encoded_value%2#0,awst_tmp%3#0,len_%1#0 arc4.abimethod typed_abi_call/logger.py:69 + int 64 // encoded_value%3#0,val_as_bytes%2#0,encoded_value%2#0,awst_tmp%3#0,len_%1#0,64 arc4.abimethod typed_abi_call/logger.py:69 + <= // encoded_value%3#0,val_as_bytes%2#0,encoded_value%2#0,awst_tmp%3#0,{<=} arc4.abimethod typed_abi_call/logger.py:69 + // virtual: store no_overflow%1#0 to l-stack (no copy) encoded_value%3#0,val_as_bytes%2#0,encoded_value%2#0,awst_tmp%3#0,no_overflow%1#0 arc4.abimethod typed_abi_call/logger.py:69 + // virtual: load no_overflow%1#0 from l-stack (no copy) encoded_value%3#0,val_as_bytes%2#0,encoded_value%2#0,awst_tmp%3#0,no_overflow%1#0 arc4.abimethod typed_abi_call/logger.py:69 + assert // overflow // encoded_value%3#0,val_as_bytes%2#0,encoded_value%2#0,awst_tmp%3#0 arc4.abimethod typed_abi_call/logger.py:69 + int 64 // encoded_value%3#0,val_as_bytes%2#0,encoded_value%2#0,awst_tmp%3#0,64 arc4.abimethod typed_abi_call/logger.py:69 + bzero // encoded_value%3#0,val_as_bytes%2#0,encoded_value%2#0,awst_tmp%3#0,{bzero} arc4.abimethod typed_abi_call/logger.py:69 + // virtual: store b_zeros%1#0 to l-stack (no copy) encoded_value%3#0,val_as_bytes%2#0,encoded_value%2#0,awst_tmp%3#0,b_zeros%1#0 arc4.abimethod typed_abi_call/logger.py:69 + // virtual: load awst_tmp%3#0 from l-stack (no copy) encoded_value%3#0,val_as_bytes%2#0,encoded_value%2#0,b_zeros%1#0,awst_tmp%3#0 arc4.abimethod typed_abi_call/logger.py:69 + // virtual: load b_zeros%1#0 from l-stack (no copy) encoded_value%3#0,val_as_bytes%2#0,encoded_value%2#0,awst_tmp%3#0,b_zeros%1#0 arc4.abimethod typed_abi_call/logger.py:69 + b| // encoded_value%3#0,val_as_bytes%2#0,encoded_value%2#0,{b|} arc4.abimethod typed_abi_call/logger.py:69 + // virtual: store tmp%83#0 to l-stack (no copy) encoded_value%3#0,val_as_bytes%2#0,encoded_value%2#0,tmp%83#0 arc4.abimethod typed_abi_call/logger.py:69 + dig 1 // load encoded_value%2#0 from l-stack (copy) encoded_value%3#0,val_as_bytes%2#0,encoded_value%2#0,tmp%83#0,encoded_value%2#0 arc4.abimethod typed_abi_call/logger.py:69 + len // encoded_value%3#0,val_as_bytes%2#0,encoded_value%2#0,tmp%83#0,{len} arc4.abimethod typed_abi_call/logger.py:69 + // virtual: store data_length%0#0 to l-stack (no copy) encoded_value%3#0,val_as_bytes%2#0,encoded_value%2#0,tmp%83#0,data_length%0#0 arc4.abimethod typed_abi_call/logger.py:69 + int 76 // encoded_value%3#0,val_as_bytes%2#0,encoded_value%2#0,tmp%83#0,data_length%0#0,76 arc4.abimethod typed_abi_call/logger.py:69 + uncover 1 // load data_length%0#0 from l-stack (no copy) encoded_value%3#0,val_as_bytes%2#0,encoded_value%2#0,tmp%83#0,76,data_length%0#0 arc4.abimethod typed_abi_call/logger.py:69 + + // encoded_value%3#0,val_as_bytes%2#0,encoded_value%2#0,tmp%83#0,{+} arc4.abimethod typed_abi_call/logger.py:69 + // virtual: store current_tail_offset%1#0 to l-stack (no copy) encoded_value%3#0,val_as_bytes%2#0,encoded_value%2#0,tmp%83#0,current_tail_offset%1#0 arc4.abimethod typed_abi_call/logger.py:69 + // virtual: load current_tail_offset%1#0 from l-stack (no copy) encoded_value%3#0,val_as_bytes%2#0,encoded_value%2#0,tmp%83#0,current_tail_offset%1#0 arc4.abimethod typed_abi_call/logger.py:69 + itob // encoded_value%3#0,val_as_bytes%2#0,encoded_value%2#0,tmp%83#0,{itob} arc4.abimethod typed_abi_call/logger.py:69 + // virtual: store as_bytes%5#0 to l-stack (no copy) encoded_value%3#0,val_as_bytes%2#0,encoded_value%2#0,tmp%83#0,as_bytes%5#0 arc4.abimethod typed_abi_call/logger.py:69 + // virtual: load as_bytes%5#0 from l-stack (no copy) encoded_value%3#0,val_as_bytes%2#0,encoded_value%2#0,tmp%83#0,as_bytes%5#0 arc4.abimethod typed_abi_call/logger.py:69 + extract 6 2 // encoded_value%3#0,val_as_bytes%2#0,encoded_value%2#0,tmp%83#0,{extract} arc4.abimethod typed_abi_call/logger.py:69 + // virtual: store offset_as_uint16%1#0 to l-stack (no copy) encoded_value%3#0,val_as_bytes%2#0,encoded_value%2#0,tmp%83#0,offset_as_uint16%1#0 arc4.abimethod typed_abi_call/logger.py:69 + byte 0x004c // encoded_value%3#0,val_as_bytes%2#0,encoded_value%2#0,tmp%83#0,offset_as_uint16%1#0,0x004c arc4.abimethod typed_abi_call/logger.py:69 + uncover 1 // load offset_as_uint16%1#0 from l-stack (no copy) encoded_value%3#0,val_as_bytes%2#0,encoded_value%2#0,tmp%83#0,0x004c,offset_as_uint16%1#0 arc4.abimethod typed_abi_call/logger.py:69 + concat // encoded_value%3#0,val_as_bytes%2#0,encoded_value%2#0,tmp%83#0,{concat} arc4.abimethod typed_abi_call/logger.py:69 + // virtual: store encoded_tuple_buffer%2#0 to l-stack (no copy) encoded_value%3#0,val_as_bytes%2#0,encoded_value%2#0,tmp%83#0,encoded_tuple_buffer%2#0 arc4.abimethod typed_abi_call/logger.py:69 + // virtual: load encoded_tuple_buffer%2#0 from l-stack (no copy) encoded_value%3#0,val_as_bytes%2#0,encoded_value%2#0,tmp%83#0,encoded_tuple_buffer%2#0 arc4.abimethod typed_abi_call/logger.py:69 + uncover 3 // load val_as_bytes%2#0 from l-stack (no copy) encoded_value%3#0,encoded_value%2#0,tmp%83#0,encoded_tuple_buffer%2#0,val_as_bytes%2#0 arc4.abimethod typed_abi_call/logger.py:69 + concat // encoded_value%3#0,encoded_value%2#0,tmp%83#0,{concat} arc4.abimethod typed_abi_call/logger.py:69 + // virtual: store encoded_tuple_buffer%3#0 to l-stack (no copy) encoded_value%3#0,encoded_value%2#0,tmp%83#0,encoded_tuple_buffer%3#0 arc4.abimethod typed_abi_call/logger.py:69 + // virtual: load encoded_tuple_buffer%3#0 from l-stack (no copy) encoded_value%3#0,encoded_value%2#0,tmp%83#0,encoded_tuple_buffer%3#0 arc4.abimethod typed_abi_call/logger.py:69 + uncover 1 // load tmp%83#0 from l-stack (no copy) encoded_value%3#0,encoded_value%2#0,encoded_tuple_buffer%3#0,tmp%83#0 arc4.abimethod typed_abi_call/logger.py:69 + concat // encoded_value%3#0,encoded_value%2#0,{concat} arc4.abimethod typed_abi_call/logger.py:69 + // virtual: store encoded_tuple_buffer%4#0 to l-stack (no copy) encoded_value%3#0,encoded_value%2#0,encoded_tuple_buffer%4#0 arc4.abimethod typed_abi_call/logger.py:69 + // virtual: load encoded_tuple_buffer%4#0 from l-stack (no copy) encoded_value%3#0,encoded_value%2#0,encoded_tuple_buffer%4#0 arc4.abimethod typed_abi_call/logger.py:69 + uncover 1 // load encoded_value%2#0 from l-stack (no copy) encoded_value%3#0,encoded_tuple_buffer%4#0,encoded_value%2#0 arc4.abimethod typed_abi_call/logger.py:69 + concat // encoded_value%3#0,{concat} arc4.abimethod typed_abi_call/logger.py:69 + // virtual: store encoded_tuple_buffer%5#0 to l-stack (no copy) encoded_value%3#0,encoded_tuple_buffer%5#0 arc4.abimethod typed_abi_call/logger.py:69 + // virtual: load encoded_tuple_buffer%5#0 from l-stack (no copy) encoded_value%3#0,encoded_tuple_buffer%5#0 arc4.abimethod typed_abi_call/logger.py:69 + uncover 1 // load encoded_value%3#0 from l-stack (no copy) encoded_tuple_buffer%5#0,encoded_value%3#0 arc4.abimethod typed_abi_call/logger.py:69 + concat // {concat} arc4.abimethod typed_abi_call/logger.py:69 + // virtual: store encoded_tuple_buffer%6#0 to l-stack (no copy) encoded_tuple_buffer%6#0 arc4.abimethod typed_abi_call/logger.py:69 + byte 0x151f7c75 // encoded_tuple_buffer%6#0,0x151f7c75 arc4.abimethod typed_abi_call/logger.py:69 + uncover 1 // load encoded_tuple_buffer%6#0 from l-stack (no copy) 0x151f7c75,encoded_tuple_buffer%6#0 arc4.abimethod typed_abi_call/logger.py:69 + concat // {concat} arc4.abimethod typed_abi_call/logger.py:69 + // virtual: store tmp%84#0 to l-stack (no copy) tmp%84#0 arc4.abimethod typed_abi_call/logger.py:69 + // virtual: load tmp%84#0 from l-stack (no copy) tmp%84#0 arc4.abimethod typed_abi_call/logger.py:69 + log // arc4.abimethod typed_abi_call/logger.py:69 + int 1 // 1 arc4.abimethod typed_abi_call/logger.py:69 + return // arc4.abimethod typed_abi_call/logger.py:69 + +main_return_args_after_14th_route@15: + txn OnCompletion // {txn} arc4.abimethod typed_abi_call/logger.py:75 + // virtual: store tmp%85#0 to l-stack (no copy) tmp%85#0 arc4.abimethod typed_abi_call/logger.py:75 + // virtual: load tmp%85#0 from l-stack (no copy) tmp%85#0 arc4.abimethod typed_abi_call/logger.py:75 + ! // {!} arc4.abimethod typed_abi_call/logger.py:75 + // virtual: store tmp%86#0 to l-stack (no copy) tmp%86#0 arc4.abimethod typed_abi_call/logger.py:75 + // virtual: load tmp%86#0 from l-stack (no copy) tmp%86#0 arc4.abimethod typed_abi_call/logger.py:75 + assert // OnCompletion is NoOp // arc4.abimethod typed_abi_call/logger.py:75 + txn ApplicationID // {txn} arc4.abimethod typed_abi_call/logger.py:75 + // virtual: store tmp%87#0 to l-stack (no copy) tmp%87#0 arc4.abimethod typed_abi_call/logger.py:75 + // virtual: load tmp%87#0 from l-stack (no copy) tmp%87#0 arc4.abimethod typed_abi_call/logger.py:75 + assert // is not creating // arc4.abimethod typed_abi_call/logger.py:75 + txna ApplicationArgs 1 // {txna} class Logger(ARC4Contract): typed_abi_call/logger.py:20 + // virtual: store tmp%88#0 to l-stack (no copy) tmp%88#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 + txna ApplicationArgs 2 // tmp%88#0,{txna} class Logger(ARC4Contract): typed_abi_call/logger.py:20 + // virtual: store tmp%89#0 to l-stack (no copy) tmp%88#0,tmp%89#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 + txna ApplicationArgs 3 // tmp%88#0,tmp%89#0,{txna} class Logger(ARC4Contract): typed_abi_call/logger.py:20 + // virtual: store tmp%90#0 to l-stack (no copy) tmp%88#0,tmp%89#0,tmp%90#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 + txna ApplicationArgs 4 // tmp%88#0,tmp%89#0,tmp%90#0,{txna} class Logger(ARC4Contract): typed_abi_call/logger.py:20 + // virtual: store tmp%91#0 to l-stack (no copy) tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 + txna ApplicationArgs 5 // tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,{txna} class Logger(ARC4Contract): typed_abi_call/logger.py:20 + // virtual: store tmp%92#0 to l-stack (no copy) tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 + txna ApplicationArgs 6 // tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,{txna} class Logger(ARC4Contract): typed_abi_call/logger.py:20 + // virtual: store tmp%93#0 to l-stack (no copy) tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 + txna ApplicationArgs 7 // tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,{txna} class Logger(ARC4Contract): typed_abi_call/logger.py:20 + // virtual: store tmp%94#0 to l-stack (no copy) tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 + txna ApplicationArgs 8 // tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,{txna} class Logger(ARC4Contract): typed_abi_call/logger.py:20 + // virtual: store tmp%95#0 to l-stack (no copy) tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 + txna ApplicationArgs 9 // tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,{txna} class Logger(ARC4Contract): typed_abi_call/logger.py:20 + // virtual: store tmp%96#0 to l-stack (no copy) tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 + txna ApplicationArgs 10 // tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,{txna} class Logger(ARC4Contract): typed_abi_call/logger.py:20 + // virtual: store tmp%97#0 to l-stack (no copy) tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,tmp%97#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 + txna ApplicationArgs 11 // tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,tmp%97#0,{txna} class Logger(ARC4Contract): typed_abi_call/logger.py:20 + // virtual: store tmp%98#0 to l-stack (no copy) tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,tmp%97#0,tmp%98#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 + txna ApplicationArgs 12 // tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,tmp%97#0,tmp%98#0,{txna} class Logger(ARC4Contract): typed_abi_call/logger.py:20 + // virtual: store tmp%99#0 to l-stack (no copy) tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,tmp%97#0,tmp%98#0,tmp%99#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 + txna ApplicationArgs 13 // tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,tmp%97#0,tmp%98#0,tmp%99#0,{txna} class Logger(ARC4Contract): typed_abi_call/logger.py:20 + // virtual: store tmp%100#0 to l-stack (no copy) tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,tmp%97#0,tmp%98#0,tmp%99#0,tmp%100#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 + txna ApplicationArgs 14 // tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,tmp%97#0,tmp%98#0,tmp%99#0,tmp%100#0,{txna} class Logger(ARC4Contract): typed_abi_call/logger.py:20 + // virtual: store tmp%101#0 to l-stack (no copy) tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,tmp%97#0,tmp%98#0,tmp%99#0,tmp%100#0,tmp%101#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 + txna ApplicationArgs 15 // tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,tmp%97#0,tmp%98#0,tmp%99#0,tmp%100#0,tmp%101#0,{txna} class Logger(ARC4Contract): typed_abi_call/logger.py:20 + // virtual: store tmp%102#0 to l-stack (no copy) tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,tmp%97#0,tmp%98#0,tmp%99#0,tmp%100#0,tmp%101#0,tmp%102#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 + // virtual: load tmp%102#0 from l-stack (no copy) tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,tmp%97#0,tmp%98#0,tmp%99#0,tmp%100#0,tmp%101#0,tmp%102#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 + extract 0 1 // on error: Index access is out of bounds // tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,tmp%97#0,tmp%98#0,tmp%99#0,tmp%100#0,tmp%101#0,{extract} class Logger(ARC4Contract): typed_abi_call/logger.py:20 + // virtual: store tmp%103#0 to l-stack (no copy) tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,tmp%97#0,tmp%98#0,tmp%99#0,tmp%100#0,tmp%101#0,tmp%103#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 + txna ApplicationArgs 15 // tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,tmp%97#0,tmp%98#0,tmp%99#0,tmp%100#0,tmp%101#0,tmp%103#0,{txna} class Logger(ARC4Contract): typed_abi_call/logger.py:20 + // virtual: store tmp%104#0 to l-stack (no copy) tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,tmp%97#0,tmp%98#0,tmp%99#0,tmp%100#0,tmp%101#0,tmp%103#0,tmp%104#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 + // virtual: load tmp%104#0 from l-stack (no copy) tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,tmp%97#0,tmp%98#0,tmp%99#0,tmp%100#0,tmp%101#0,tmp%103#0,tmp%104#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 + extract 1 1 // on error: Index access is out of bounds // tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,tmp%97#0,tmp%98#0,tmp%99#0,tmp%100#0,tmp%101#0,tmp%103#0,{extract} class Logger(ARC4Contract): typed_abi_call/logger.py:20 + // virtual: store tmp%105#0 to l-stack (no copy) tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,tmp%97#0,tmp%98#0,tmp%99#0,tmp%100#0,tmp%101#0,tmp%103#0,tmp%105#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 + txna ApplicationArgs 15 // tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,tmp%97#0,tmp%98#0,tmp%99#0,tmp%100#0,tmp%101#0,tmp%103#0,tmp%105#0,{txna} class Logger(ARC4Contract): typed_abi_call/logger.py:20 + // virtual: store tmp%106#0 to l-stack (no copy) tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,tmp%97#0,tmp%98#0,tmp%99#0,tmp%100#0,tmp%101#0,tmp%103#0,tmp%105#0,tmp%106#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 + // virtual: load tmp%106#0 from l-stack (no copy) tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,tmp%97#0,tmp%98#0,tmp%99#0,tmp%100#0,tmp%101#0,tmp%103#0,tmp%105#0,tmp%106#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 + extract 2 1 // on error: Index access is out of bounds // tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,tmp%97#0,tmp%98#0,tmp%99#0,tmp%100#0,tmp%101#0,tmp%103#0,tmp%105#0,{extract} class Logger(ARC4Contract): typed_abi_call/logger.py:20 + // virtual: store tmp%107#0 to l-stack (no copy) tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,tmp%97#0,tmp%98#0,tmp%99#0,tmp%100#0,tmp%101#0,tmp%103#0,tmp%105#0,tmp%107#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 + txna ApplicationArgs 15 // tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,tmp%97#0,tmp%98#0,tmp%99#0,tmp%100#0,tmp%101#0,tmp%103#0,tmp%105#0,tmp%107#0,{txna} class Logger(ARC4Contract): typed_abi_call/logger.py:20 + // virtual: store tmp%108#0 to l-stack (no copy) tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,tmp%97#0,tmp%98#0,tmp%99#0,tmp%100#0,tmp%101#0,tmp%103#0,tmp%105#0,tmp%107#0,tmp%108#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 + // virtual: load tmp%108#0 from l-stack (no copy) tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,tmp%97#0,tmp%98#0,tmp%99#0,tmp%100#0,tmp%101#0,tmp%103#0,tmp%105#0,tmp%107#0,tmp%108#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 + extract 3 1 // on error: Index access is out of bounds // tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,tmp%97#0,tmp%98#0,tmp%99#0,tmp%100#0,tmp%101#0,tmp%103#0,tmp%105#0,tmp%107#0,{extract} class Logger(ARC4Contract): typed_abi_call/logger.py:20 + // virtual: store tmp%109#0 to l-stack (no copy) tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,tmp%97#0,tmp%98#0,tmp%99#0,tmp%100#0,tmp%101#0,tmp%103#0,tmp%105#0,tmp%107#0,tmp%109#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 + txna ApplicationArgs 15 // tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,tmp%97#0,tmp%98#0,tmp%99#0,tmp%100#0,tmp%101#0,tmp%103#0,tmp%105#0,tmp%107#0,tmp%109#0,{txna} class Logger(ARC4Contract): typed_abi_call/logger.py:20 + // virtual: store tmp%110#0 to l-stack (no copy) tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,tmp%97#0,tmp%98#0,tmp%99#0,tmp%100#0,tmp%101#0,tmp%103#0,tmp%105#0,tmp%107#0,tmp%109#0,tmp%110#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 + // virtual: load tmp%110#0 from l-stack (no copy) tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,tmp%97#0,tmp%98#0,tmp%99#0,tmp%100#0,tmp%101#0,tmp%103#0,tmp%105#0,tmp%107#0,tmp%109#0,tmp%110#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 + extract 4 4 // on error: Index access is out of bounds // tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,tmp%97#0,tmp%98#0,tmp%99#0,tmp%100#0,tmp%101#0,tmp%103#0,tmp%105#0,tmp%107#0,tmp%109#0,{extract} class Logger(ARC4Contract): typed_abi_call/logger.py:20 + // virtual: store tmp%111#0 to l-stack (no copy) tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,tmp%97#0,tmp%98#0,tmp%99#0,tmp%100#0,tmp%101#0,tmp%103#0,tmp%105#0,tmp%107#0,tmp%109#0,tmp%111#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 + txna ApplicationArgs 15 // tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,tmp%97#0,tmp%98#0,tmp%99#0,tmp%100#0,tmp%101#0,tmp%103#0,tmp%105#0,tmp%107#0,tmp%109#0,tmp%111#0,{txna} class Logger(ARC4Contract): typed_abi_call/logger.py:20 + // virtual: store tmp%112#0 to l-stack (no copy) tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,tmp%97#0,tmp%98#0,tmp%99#0,tmp%100#0,tmp%101#0,tmp%103#0,tmp%105#0,tmp%107#0,tmp%109#0,tmp%111#0,tmp%112#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 + // virtual: load tmp%112#0 from l-stack (no copy) tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,tmp%97#0,tmp%98#0,tmp%99#0,tmp%100#0,tmp%101#0,tmp%103#0,tmp%105#0,tmp%107#0,tmp%109#0,tmp%111#0,tmp%112#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 + extract 8 1 // on error: Index access is out of bounds // tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,tmp%97#0,tmp%98#0,tmp%99#0,tmp%100#0,tmp%101#0,tmp%103#0,tmp%105#0,tmp%107#0,tmp%109#0,tmp%111#0,{extract} class Logger(ARC4Contract): typed_abi_call/logger.py:20 + // virtual: store tmp%113#0 to l-stack (no copy) tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,tmp%97#0,tmp%98#0,tmp%99#0,tmp%100#0,tmp%101#0,tmp%103#0,tmp%105#0,tmp%107#0,tmp%109#0,tmp%111#0,tmp%113#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 + uncover 19 // load tmp%88#0 from l-stack (no copy) tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,tmp%97#0,tmp%98#0,tmp%99#0,tmp%100#0,tmp%101#0,tmp%103#0,tmp%105#0,tmp%107#0,tmp%109#0,tmp%111#0,tmp%113#0,tmp%88#0 arc4.abimethod typed_abi_call/logger.py:75 + uncover 19 // load tmp%89#0 from l-stack (no copy) tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,tmp%97#0,tmp%98#0,tmp%99#0,tmp%100#0,tmp%101#0,tmp%103#0,tmp%105#0,tmp%107#0,tmp%109#0,tmp%111#0,tmp%113#0,tmp%88#0,tmp%89#0 arc4.abimethod typed_abi_call/logger.py:75 + uncover 19 // load tmp%90#0 from l-stack (no copy) tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,tmp%97#0,tmp%98#0,tmp%99#0,tmp%100#0,tmp%101#0,tmp%103#0,tmp%105#0,tmp%107#0,tmp%109#0,tmp%111#0,tmp%113#0,tmp%88#0,tmp%89#0,tmp%90#0 arc4.abimethod typed_abi_call/logger.py:75 + uncover 19 // load tmp%91#0 from l-stack (no copy) tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,tmp%97#0,tmp%98#0,tmp%99#0,tmp%100#0,tmp%101#0,tmp%103#0,tmp%105#0,tmp%107#0,tmp%109#0,tmp%111#0,tmp%113#0,tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0 arc4.abimethod typed_abi_call/logger.py:75 + uncover 19 // load tmp%92#0 from l-stack (no copy) tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,tmp%97#0,tmp%98#0,tmp%99#0,tmp%100#0,tmp%101#0,tmp%103#0,tmp%105#0,tmp%107#0,tmp%109#0,tmp%111#0,tmp%113#0,tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0 arc4.abimethod typed_abi_call/logger.py:75 + uncover 19 // load tmp%93#0 from l-stack (no copy) tmp%94#0,tmp%95#0,tmp%96#0,tmp%97#0,tmp%98#0,tmp%99#0,tmp%100#0,tmp%101#0,tmp%103#0,tmp%105#0,tmp%107#0,tmp%109#0,tmp%111#0,tmp%113#0,tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0 arc4.abimethod typed_abi_call/logger.py:75 + uncover 19 // load tmp%94#0 from l-stack (no copy) tmp%95#0,tmp%96#0,tmp%97#0,tmp%98#0,tmp%99#0,tmp%100#0,tmp%101#0,tmp%103#0,tmp%105#0,tmp%107#0,tmp%109#0,tmp%111#0,tmp%113#0,tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0 arc4.abimethod typed_abi_call/logger.py:75 + uncover 19 // load tmp%95#0 from l-stack (no copy) tmp%96#0,tmp%97#0,tmp%98#0,tmp%99#0,tmp%100#0,tmp%101#0,tmp%103#0,tmp%105#0,tmp%107#0,tmp%109#0,tmp%111#0,tmp%113#0,tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0 arc4.abimethod typed_abi_call/logger.py:75 + uncover 19 // load tmp%96#0 from l-stack (no copy) tmp%97#0,tmp%98#0,tmp%99#0,tmp%100#0,tmp%101#0,tmp%103#0,tmp%105#0,tmp%107#0,tmp%109#0,tmp%111#0,tmp%113#0,tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0 arc4.abimethod typed_abi_call/logger.py:75 + uncover 19 // load tmp%97#0 from l-stack (no copy) tmp%98#0,tmp%99#0,tmp%100#0,tmp%101#0,tmp%103#0,tmp%105#0,tmp%107#0,tmp%109#0,tmp%111#0,tmp%113#0,tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,tmp%97#0 arc4.abimethod typed_abi_call/logger.py:75 + uncover 19 // load tmp%98#0 from l-stack (no copy) tmp%99#0,tmp%100#0,tmp%101#0,tmp%103#0,tmp%105#0,tmp%107#0,tmp%109#0,tmp%111#0,tmp%113#0,tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,tmp%97#0,tmp%98#0 arc4.abimethod typed_abi_call/logger.py:75 + uncover 19 // load tmp%99#0 from l-stack (no copy) tmp%100#0,tmp%101#0,tmp%103#0,tmp%105#0,tmp%107#0,tmp%109#0,tmp%111#0,tmp%113#0,tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,tmp%97#0,tmp%98#0,tmp%99#0 arc4.abimethod typed_abi_call/logger.py:75 + uncover 19 // load tmp%100#0 from l-stack (no copy) tmp%101#0,tmp%103#0,tmp%105#0,tmp%107#0,tmp%109#0,tmp%111#0,tmp%113#0,tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,tmp%97#0,tmp%98#0,tmp%99#0,tmp%100#0 arc4.abimethod typed_abi_call/logger.py:75 + uncover 19 // load tmp%101#0 from l-stack (no copy) tmp%103#0,tmp%105#0,tmp%107#0,tmp%109#0,tmp%111#0,tmp%113#0,tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,tmp%97#0,tmp%98#0,tmp%99#0,tmp%100#0,tmp%101#0 arc4.abimethod typed_abi_call/logger.py:75 + uncover 19 // load tmp%103#0 from l-stack (no copy) tmp%105#0,tmp%107#0,tmp%109#0,tmp%111#0,tmp%113#0,tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,tmp%97#0,tmp%98#0,tmp%99#0,tmp%100#0,tmp%101#0,tmp%103#0 arc4.abimethod typed_abi_call/logger.py:75 + uncover 19 // load tmp%105#0 from l-stack (no copy) tmp%107#0,tmp%109#0,tmp%111#0,tmp%113#0,tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,tmp%97#0,tmp%98#0,tmp%99#0,tmp%100#0,tmp%101#0,tmp%103#0,tmp%105#0 arc4.abimethod typed_abi_call/logger.py:75 + uncover 19 // load tmp%107#0 from l-stack (no copy) tmp%109#0,tmp%111#0,tmp%113#0,tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,tmp%97#0,tmp%98#0,tmp%99#0,tmp%100#0,tmp%101#0,tmp%103#0,tmp%105#0,tmp%107#0 arc4.abimethod typed_abi_call/logger.py:75 + uncover 19 // load tmp%109#0 from l-stack (no copy) tmp%111#0,tmp%113#0,tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,tmp%97#0,tmp%98#0,tmp%99#0,tmp%100#0,tmp%101#0,tmp%103#0,tmp%105#0,tmp%107#0,tmp%109#0 arc4.abimethod typed_abi_call/logger.py:75 + uncover 19 // load tmp%111#0 from l-stack (no copy) tmp%113#0,tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,tmp%97#0,tmp%98#0,tmp%99#0,tmp%100#0,tmp%101#0,tmp%103#0,tmp%105#0,tmp%107#0,tmp%109#0,tmp%111#0 arc4.abimethod typed_abi_call/logger.py:75 + uncover 19 // load tmp%113#0 from l-stack (no copy) tmp%88#0,tmp%89#0,tmp%90#0,tmp%91#0,tmp%92#0,tmp%93#0,tmp%94#0,tmp%95#0,tmp%96#0,tmp%97#0,tmp%98#0,tmp%99#0,tmp%100#0,tmp%101#0,tmp%103#0,tmp%105#0,tmp%107#0,tmp%109#0,tmp%111#0,tmp%113#0 arc4.abimethod typed_abi_call/logger.py:75 + callsub return_args_after_14th // {return_args_after_14th} arc4.abimethod typed_abi_call/logger.py:75 + // virtual: store tmp%114#0 to l-stack (no copy) tmp%114#0 arc4.abimethod typed_abi_call/logger.py:75 + byte 0x151f7c75 // tmp%114#0,0x151f7c75 arc4.abimethod typed_abi_call/logger.py:75 + uncover 1 // load tmp%114#0 from l-stack (no copy) 0x151f7c75,tmp%114#0 arc4.abimethod typed_abi_call/logger.py:75 + concat // {concat} arc4.abimethod typed_abi_call/logger.py:75 + // virtual: store tmp%115#0 to l-stack (no copy) tmp%115#0 arc4.abimethod typed_abi_call/logger.py:75 + // virtual: load tmp%115#0 from l-stack (no copy) tmp%115#0 arc4.abimethod typed_abi_call/logger.py:75 + log // arc4.abimethod typed_abi_call/logger.py:75 + int 1 // 1 arc4.abimethod typed_abi_call/logger.py:75 + return // arc4.abimethod typed_abi_call/logger.py:75 + +main_bare_routing@18: + txn OnCompletion // {txn} class Logger(ARC4Contract): typed_abi_call/logger.py:20 + // virtual: store tmp%116#0 to l-stack (no copy) tmp%116#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 + // virtual: load tmp%116#0 from l-stack (no copy) tmp%116#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 + ! // {!} class Logger(ARC4Contract): typed_abi_call/logger.py:20 + // virtual: store not%tmp%116#0 to l-stack (no copy) not%tmp%116#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 + // virtual: load not%tmp%116#0 from l-stack (no copy) not%tmp%116#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 + assert // reject transaction // class Logger(ARC4Contract): typed_abi_call/logger.py:20 + txn ApplicationID // {txn} class Logger(ARC4Contract): typed_abi_call/logger.py:20 + // virtual: store tmp%117#0 to l-stack (no copy) tmp%117#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 + // virtual: load tmp%117#0 from l-stack (no copy) tmp%117#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 + ! // {!} class Logger(ARC4Contract): typed_abi_call/logger.py:20 + // virtual: store tmp%118#0 to l-stack (no copy) tmp%118#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 + // virtual: load tmp%118#0 from l-stack (no copy) tmp%118#0 class Logger(ARC4Contract): typed_abi_call/logger.py:20 + assert // is creating // class Logger(ARC4Contract): typed_abi_call/logger.py:20 + int 1 // 1 class Logger(ARC4Contract): typed_abi_call/logger.py:20 + return // class Logger(ARC4Contract): typed_abi_call/logger.py:20 // test_cases.typed_abi_call.logger.Logger.echo(value: bytes) -> bytes: echo: - proto 1 1 // (𝕡) value#0 | @arc4.abimethod\ndef echo(self, value: arc4.String) -> arc4.String: typed_abi_call/logger.py:21-22 + proto 1 1 // (𝕡) value#0 | @arc4.abimethod\ndef echo(self, value: arc4.String) -> arc4.String: typed_abi_call/logger.py:21-22 echo_block@0: - frame_dig -1 // load value#0 from parameters (𝕡) value#0 | value#0 "echo: " + value typed_abi_call/logger.py:23 - extract 2 0 // (𝕡) value#0 | {extract} "echo: " + value typed_abi_call/logger.py:23 - // virtual: store expr_value_trimmed%1#0 to l-stack (no copy) (𝕡) value#0 | expr_value_trimmed%1#0 "echo: " + value typed_abi_call/logger.py:23 - byte 0x6563686f3a20 // (𝕡) value#0 | expr_value_trimmed%1#0,0x6563686f3a20 "echo: " + value typed_abi_call/logger.py:23 - uncover 1 // load expr_value_trimmed%1#0 from l-stack (no copy) (𝕡) value#0 | 0x6563686f3a20,expr_value_trimmed%1#0 "echo: " + value typed_abi_call/logger.py:23 - concat // (𝕡) value#0 | {concat} "echo: " + value typed_abi_call/logger.py:23 - // virtual: store concatenated%0#0 to l-stack (no copy) (𝕡) value#0 | concatenated%0#0 "echo: " + value typed_abi_call/logger.py:23 - dup // load concatenated%0#0 from l-stack (copy) (𝕡) value#0 | concatenated%0#0,concatenated%0#0 "echo: " + value typed_abi_call/logger.py:23 - len // (𝕡) value#0 | concatenated%0#0,{len} "echo: " + value typed_abi_call/logger.py:23 - // virtual: store len_%0#0 to l-stack (no copy) (𝕡) value#0 | concatenated%0#0,len_%0#0 "echo: " + value typed_abi_call/logger.py:23 - // virtual: load len_%0#0 from l-stack (no copy) (𝕡) value#0 | concatenated%0#0,len_%0#0 "echo: " + value typed_abi_call/logger.py:23 - itob // (𝕡) value#0 | concatenated%0#0,{itob} "echo: " + value typed_abi_call/logger.py:23 - // virtual: store as_bytes%1#0 to l-stack (no copy) (𝕡) value#0 | concatenated%0#0,as_bytes%1#0 "echo: " + value typed_abi_call/logger.py:23 - // virtual: load as_bytes%1#0 from l-stack (no copy) (𝕡) value#0 | concatenated%0#0,as_bytes%1#0 "echo: " + value typed_abi_call/logger.py:23 - extract 6 2 // (𝕡) value#0 | concatenated%0#0,{extract} "echo: " + value typed_abi_call/logger.py:23 - // virtual: store len_16_bit%0#0 to l-stack (no copy) (𝕡) value#0 | concatenated%0#0,len_16_bit%0#0 "echo: " + value typed_abi_call/logger.py:23 - // virtual: load len_16_bit%0#0 from l-stack (no copy) (𝕡) value#0 | concatenated%0#0,len_16_bit%0#0 "echo: " + value typed_abi_call/logger.py:23 - uncover 1 // load concatenated%0#0 from l-stack (no copy) (𝕡) value#0 | len_16_bit%0#0,concatenated%0#0 "echo: " + value typed_abi_call/logger.py:23 - concat // (𝕡) value#0 | {concat} "echo: " + value typed_abi_call/logger.py:23 - // virtual: store concat_result%0#0 to l-stack (no copy) (𝕡) value#0 | concat_result%0#0 "echo: " + value typed_abi_call/logger.py:23 - // virtual: load concat_result%0#0 from l-stack (no copy) (𝕡) value#0 | concat_result%0#0 return "echo: " + value typed_abi_call/logger.py:23 - retsub // concat_result%0#0 return "echo: " + value typed_abi_call/logger.py:23 + frame_dig -1 // load value#0 from parameters (𝕡) value#0 | value#0 "echo: " + value typed_abi_call/logger.py:23 + extract 2 0 // (𝕡) value#0 | {extract} "echo: " + value typed_abi_call/logger.py:23 + // virtual: store expr_value_trimmed%1#0 to l-stack (no copy) (𝕡) value#0 | expr_value_trimmed%1#0 "echo: " + value typed_abi_call/logger.py:23 + byte 0x6563686f3a20 // (𝕡) value#0 | expr_value_trimmed%1#0,0x6563686f3a20 "echo: " + value typed_abi_call/logger.py:23 + uncover 1 // load expr_value_trimmed%1#0 from l-stack (no copy) (𝕡) value#0 | 0x6563686f3a20,expr_value_trimmed%1#0 "echo: " + value typed_abi_call/logger.py:23 + concat // (𝕡) value#0 | {concat} "echo: " + value typed_abi_call/logger.py:23 + // virtual: store concatenated%0#0 to l-stack (no copy) (𝕡) value#0 | concatenated%0#0 "echo: " + value typed_abi_call/logger.py:23 + dup // load concatenated%0#0 from l-stack (copy) (𝕡) value#0 | concatenated%0#0,concatenated%0#0 "echo: " + value typed_abi_call/logger.py:23 + len // (𝕡) value#0 | concatenated%0#0,{len} "echo: " + value typed_abi_call/logger.py:23 + // virtual: store len_%0#0 to l-stack (no copy) (𝕡) value#0 | concatenated%0#0,len_%0#0 "echo: " + value typed_abi_call/logger.py:23 + // virtual: load len_%0#0 from l-stack (no copy) (𝕡) value#0 | concatenated%0#0,len_%0#0 "echo: " + value typed_abi_call/logger.py:23 + itob // (𝕡) value#0 | concatenated%0#0,{itob} "echo: " + value typed_abi_call/logger.py:23 + // virtual: store as_bytes%1#0 to l-stack (no copy) (𝕡) value#0 | concatenated%0#0,as_bytes%1#0 "echo: " + value typed_abi_call/logger.py:23 + // virtual: load as_bytes%1#0 from l-stack (no copy) (𝕡) value#0 | concatenated%0#0,as_bytes%1#0 "echo: " + value typed_abi_call/logger.py:23 + extract 6 2 // (𝕡) value#0 | concatenated%0#0,{extract} "echo: " + value typed_abi_call/logger.py:23 + // virtual: store len_16_bit%0#0 to l-stack (no copy) (𝕡) value#0 | concatenated%0#0,len_16_bit%0#0 "echo: " + value typed_abi_call/logger.py:23 + // virtual: load len_16_bit%0#0 from l-stack (no copy) (𝕡) value#0 | concatenated%0#0,len_16_bit%0#0 "echo: " + value typed_abi_call/logger.py:23 + uncover 1 // load concatenated%0#0 from l-stack (no copy) (𝕡) value#0 | len_16_bit%0#0,concatenated%0#0 "echo: " + value typed_abi_call/logger.py:23 + concat // (𝕡) value#0 | {concat} "echo: " + value typed_abi_call/logger.py:23 + // virtual: store concat_result%0#0 to l-stack (no copy) (𝕡) value#0 | concat_result%0#0 "echo: " + value typed_abi_call/logger.py:23 + // virtual: load concat_result%0#0 from l-stack (no copy) (𝕡) value#0 | concat_result%0#0 return "echo: " + value typed_abi_call/logger.py:23 + retsub // concat_result%0#0 return "echo: " + value typed_abi_call/logger.py:23 + + +// test_cases.typed_abi_call.logger.Logger.no_args() -> uint64: +no_args: + proto 0 1 // @arc4.abimethod\ndef no_args(self) -> UInt64: typed_abi_call/logger.py:25-26 + +no_args_block@0: + int 42 // 42 UInt64(42) typed_abi_call/logger.py:27 + retsub // 42 return UInt64(42) typed_abi_call/logger.py:27 // test_cases.typed_abi_call.logger.Logger.log_uint64(value: bytes) -> void: log_uint64: - proto 1 0 // (𝕡) value#0 | @arc4.abimethod(name=LOG_METHOD_NAME)\ndef log_uint64(self, value: arc4.UInt64) -> None: typed_abi_call/logger.py:25-26 + proto 1 0 // (𝕡) value#0 | @arc4.abimethod(name=LOG_METHOD_NAME)\ndef log_uint64(self, value: arc4.UInt64) -> None: typed_abi_call/logger.py:29-30 log_uint64_block@0: - frame_dig -1 // load value#0 from parameters (𝕡) value#0 | value#0 log(value) typed_abi_call/logger.py:27 - log // (𝕡) value#0 | log(value) typed_abi_call/logger.py:27 - retsub // + frame_dig -1 // load value#0 from parameters (𝕡) value#0 | value#0 log(value) typed_abi_call/logger.py:31 + log // (𝕡) value#0 | log(value) typed_abi_call/logger.py:31 + retsub // // test_cases.typed_abi_call.logger.Logger.log_uint512(value: bytes) -> void: log_uint512: - proto 1 0 // (𝕡) value#0 | @arc4.abimethod(name=LOG_METHOD_NAME)\ndef log_uint512(self, value: arc4.UInt512) -> None: typed_abi_call/logger.py:29-30 + proto 1 0 // (𝕡) value#0 | @arc4.abimethod(name=LOG_METHOD_NAME)\ndef log_uint512(self, value: arc4.UInt512) -> None: typed_abi_call/logger.py:33-34 log_uint512_block@0: - frame_dig -1 // load value#0 from parameters (𝕡) value#0 | value#0 log(value) typed_abi_call/logger.py:31 - log // (𝕡) value#0 | log(value) typed_abi_call/logger.py:31 - retsub // + frame_dig -1 // load value#0 from parameters (𝕡) value#0 | value#0 log(value) typed_abi_call/logger.py:35 + log // (𝕡) value#0 | log(value) typed_abi_call/logger.py:35 + retsub // // test_cases.typed_abi_call.logger.Logger.log_string(value: bytes) -> void: log_string: - proto 1 0 // (𝕡) value#0 | @arc4.abimethod(name=LOG_METHOD_NAME)\ndef log_string(self, value: arc4.String) -> None: typed_abi_call/logger.py:33-34 + proto 1 0 // (𝕡) value#0 | @arc4.abimethod(name=LOG_METHOD_NAME)\ndef log_string(self, value: arc4.String) -> None: typed_abi_call/logger.py:37-38 log_string_block@0: - frame_dig -1 // load value#0 from parameters (𝕡) value#0 | value#0 value.native typed_abi_call/logger.py:35 - extract 2 0 // (𝕡) value#0 | {extract} value.native typed_abi_call/logger.py:35 - // virtual: store tmp%0#0 to l-stack (no copy) (𝕡) value#0 | tmp%0#0 value.native typed_abi_call/logger.py:35 - // virtual: load tmp%0#0 from l-stack (no copy) (𝕡) value#0 | tmp%0#0 log(value.native) typed_abi_call/logger.py:35 - log // (𝕡) value#0 | log(value.native) typed_abi_call/logger.py:35 - retsub // + frame_dig -1 // load value#0 from parameters (𝕡) value#0 | value#0 value.native typed_abi_call/logger.py:39 + extract 2 0 // (𝕡) value#0 | {extract} value.native typed_abi_call/logger.py:39 + // virtual: store tmp%0#0 to l-stack (no copy) (𝕡) value#0 | tmp%0#0 value.native typed_abi_call/logger.py:39 + // virtual: load tmp%0#0 from l-stack (no copy) (𝕡) value#0 | tmp%0#0 log(value.native) typed_abi_call/logger.py:39 + log // (𝕡) value#0 | log(value.native) typed_abi_call/logger.py:39 + retsub // // test_cases.typed_abi_call.logger.Logger.log_bool(value: bytes) -> void: log_bool: - proto 1 0 // (𝕡) value#0 | @arc4.abimethod(name=LOG_METHOD_NAME)\ndef log_bool(self, value: arc4.Bool) -> None: typed_abi_call/logger.py:37-38 + proto 1 0 // (𝕡) value#0 | @arc4.abimethod(name=LOG_METHOD_NAME)\ndef log_bool(self, value: arc4.Bool) -> None: typed_abi_call/logger.py:41-42 log_bool_block@0: - frame_dig -1 // load value#0 from parameters (𝕡) value#0 | value#0 value.native typed_abi_call/logger.py:39 - int 0 // (𝕡) value#0 | value#0,0 - getbit // (𝕡) value#0 | {getbit} value.native typed_abi_call/logger.py:39 - // virtual: store tmp%0#0 to l-stack (no copy) (𝕡) value#0 | tmp%0#0 value.native typed_abi_call/logger.py:39 - byte 0x46616c7365 // (𝕡) value#0 | tmp%0#0,0x46616c7365 Bytes(b"False") typed_abi_call/logger.py:39 - byte 0x54727565 // (𝕡) value#0 | tmp%0#0,0x46616c7365,0x54727565 Bytes(b"True") typed_abi_call/logger.py:39 - uncover 2 // load tmp%0#0 from l-stack (no copy) (𝕡) value#0 | 0x46616c7365,0x54727565,tmp%0#0 Bytes(b"True") if value.native else Bytes(b"False") typed_abi_call/logger.py:39 - select // (𝕡) value#0 | {select} Bytes(b"True") if value.native else Bytes(b"False") typed_abi_call/logger.py:39 - // virtual: store tmp%1#0 to l-stack (no copy) (𝕡) value#0 | tmp%1#0 Bytes(b"True") if value.native else Bytes(b"False") typed_abi_call/logger.py:39 - // virtual: load tmp%1#0 from l-stack (no copy) (𝕡) value#0 | tmp%1#0 log(Bytes(b"True") if value.native else Bytes(b"False")) typed_abi_call/logger.py:39 - log // (𝕡) value#0 | log(Bytes(b"True") if value.native else Bytes(b"False")) typed_abi_call/logger.py:39 - retsub // + frame_dig -1 // load value#0 from parameters (𝕡) value#0 | value#0 value.native typed_abi_call/logger.py:43 + int 0 // (𝕡) value#0 | value#0,0 + getbit // (𝕡) value#0 | {getbit} value.native typed_abi_call/logger.py:43 + // virtual: store tmp%0#0 to l-stack (no copy) (𝕡) value#0 | tmp%0#0 value.native typed_abi_call/logger.py:43 + byte 0x46616c7365 // (𝕡) value#0 | tmp%0#0,0x46616c7365 Bytes(b"False") typed_abi_call/logger.py:43 + byte 0x54727565 // (𝕡) value#0 | tmp%0#0,0x46616c7365,0x54727565 Bytes(b"True") typed_abi_call/logger.py:43 + uncover 2 // load tmp%0#0 from l-stack (no copy) (𝕡) value#0 | 0x46616c7365,0x54727565,tmp%0#0 Bytes(b"True") if value.native else Bytes(b"False") typed_abi_call/logger.py:43 + select // (𝕡) value#0 | {select} Bytes(b"True") if value.native else Bytes(b"False") typed_abi_call/logger.py:43 + // virtual: store tmp%1#0 to l-stack (no copy) (𝕡) value#0 | tmp%1#0 Bytes(b"True") if value.native else Bytes(b"False") typed_abi_call/logger.py:43 + // virtual: load tmp%1#0 from l-stack (no copy) (𝕡) value#0 | tmp%1#0 log(Bytes(b"True") if value.native else Bytes(b"False")) typed_abi_call/logger.py:43 + log // (𝕡) value#0 | log(Bytes(b"True") if value.native else Bytes(b"False")) typed_abi_call/logger.py:43 + retsub // // test_cases.typed_abi_call.logger.Logger.log_bytes(value: bytes) -> void: log_bytes: - proto 1 0 // (𝕡) value#0 | @arc4.abimethod(name=LOG_METHOD_NAME)\ndef log_bytes(self, value: arc4.DynamicBytes) -> None: typed_abi_call/logger.py:41-42 + proto 1 0 // (𝕡) value#0 | @arc4.abimethod(name=LOG_METHOD_NAME)\ndef log_bytes(self, value: arc4.DynamicBytes) -> None: typed_abi_call/logger.py:45-46 log_bytes_block@0: - frame_dig -1 // load value#0 from parameters (𝕡) value#0 | value#0 value.native typed_abi_call/logger.py:43 - extract 2 0 // (𝕡) value#0 | {extract} value.native typed_abi_call/logger.py:43 - // virtual: store tmp%0#0 to l-stack (no copy) (𝕡) value#0 | tmp%0#0 value.native typed_abi_call/logger.py:43 - // virtual: load tmp%0#0 from l-stack (no copy) (𝕡) value#0 | tmp%0#0 log(value.native) typed_abi_call/logger.py:43 - log // (𝕡) value#0 | log(value.native) typed_abi_call/logger.py:43 - retsub // + frame_dig -1 // load value#0 from parameters (𝕡) value#0 | value#0 value.native typed_abi_call/logger.py:47 + extract 2 0 // (𝕡) value#0 | {extract} value.native typed_abi_call/logger.py:47 + // virtual: store tmp%0#0 to l-stack (no copy) (𝕡) value#0 | tmp%0#0 value.native typed_abi_call/logger.py:47 + // virtual: load tmp%0#0 from l-stack (no copy) (𝕡) value#0 | tmp%0#0 log(value.native) typed_abi_call/logger.py:47 + log // (𝕡) value#0 | log(value.native) typed_abi_call/logger.py:47 + retsub // // test_cases.typed_abi_call.logger.Logger.log_asset_account_app(asset: uint64, account: bytes, app: uint64) -> void: log_asset_account_app: - proto 3 0 // (𝕡) asset#0,account#0,app#0 | @arc4.abimethod(name=LOG_METHOD_NAME)\ndef log_asset_account_app(self, asset: Asset, account: Acc... typed_abi_call/logger.py:45-46 + proto 3 0 // (𝕡) asset#0,account#0,app#0 | @arc4.abimethod(name=LOG_METHOD_NAME)\ndef log_asset_account_app(self, asset: Asset, account: Acc... typed_abi_call/logger.py:49-50 log_asset_account_app_block@0: - frame_dig -3 // load asset#0 from parameters (𝕡) asset#0,account#0,app#0 | asset#0 asset.name typed_abi_call/logger.py:47 - asset_params_get AssetName // (𝕡) asset#0,account#0,app#0 | {asset_params_get}.0,{asset_params_get}.1 asset.name typed_abi_call/logger.py:47 - // virtual: store check%0#0 to l-stack (no copy) (𝕡) asset#0,account#0,app#0 | check%0#0,{asset_params_get}.0 asset.name typed_abi_call/logger.py:47 - // virtual: store value%0#0 to l-stack (no copy) (𝕡) asset#0,account#0,app#0 | value%0#0,check%0#0 asset.name typed_abi_call/logger.py:47 - // virtual: load check%0#0 from l-stack (no copy) (𝕡) asset#0,account#0,app#0 | value%0#0,check%0#0 asset.name typed_abi_call/logger.py:47 - assert // asset exists // (𝕡) asset#0,account#0,app#0 | value%0#0 asset.name typed_abi_call/logger.py:47 - // virtual: load value%0#0 from l-stack (no copy) (𝕡) asset#0,account#0,app#0 | value%0#0 account.bytes typed_abi_call/logger.py:47 - frame_dig -2 // load account#0 from parameters (𝕡) asset#0,account#0,app#0 | value%0#0,account#0 account.bytes typed_abi_call/logger.py:47 - concat // (𝕡) asset#0,account#0,app#0 | {concat} account.bytes typed_abi_call/logger.py:47 - // virtual: store tmp%1#0 to l-stack (no copy) (𝕡) asset#0,account#0,app#0 | tmp%1#0 account.bytes typed_abi_call/logger.py:47 - frame_dig -1 // load app#0 from parameters (𝕡) asset#0,account#0,app#0 | tmp%1#0,app#0 app.address typed_abi_call/logger.py:47 - app_params_get AppAddress // (𝕡) asset#0,account#0,app#0 | tmp%1#0,{app_params_get}.0,{app_params_get}.1 app.address typed_abi_call/logger.py:47 - // virtual: store check%1#0 to l-stack (no copy) (𝕡) asset#0,account#0,app#0 | tmp%1#0,check%1#0,{app_params_get}.0 app.address typed_abi_call/logger.py:47 - // virtual: store value%1#0 to l-stack (no copy) (𝕡) asset#0,account#0,app#0 | tmp%1#0,value%1#0,check%1#0 app.address typed_abi_call/logger.py:47 - // virtual: load check%1#0 from l-stack (no copy) (𝕡) asset#0,account#0,app#0 | tmp%1#0,value%1#0,check%1#0 app.address typed_abi_call/logger.py:47 - assert // application exists // (𝕡) asset#0,account#0,app#0 | tmp%1#0,value%1#0 app.address typed_abi_call/logger.py:47 - // virtual: load tmp%1#0 from l-stack (no copy) (𝕡) asset#0,account#0,app#0 | value%1#0,tmp%1#0 app.address typed_abi_call/logger.py:47 - // virtual: load value%1#0 from l-stack (no copy) (𝕡) asset#0,account#0,app#0 | tmp%1#0,value%1#0 app.address typed_abi_call/logger.py:47 - concat // (𝕡) asset#0,account#0,app#0 | {concat} app.address typed_abi_call/logger.py:47 - // virtual: store tmp%3#0 to l-stack (no copy) (𝕡) asset#0,account#0,app#0 | tmp%3#0 app.address typed_abi_call/logger.py:47 - // virtual: load tmp%3#0 from l-stack (no copy) (𝕡) asset#0,account#0,app#0 | tmp%3#0 log(asset.name, account.bytes, app.address) typed_abi_call/logger.py:47 - log // (𝕡) asset#0,account#0,app#0 | log(asset.name, account.bytes, app.address) typed_abi_call/logger.py:47 - retsub // + frame_dig -3 // load asset#0 from parameters (𝕡) asset#0,account#0,app#0 | asset#0 asset.name typed_abi_call/logger.py:51 + asset_params_get AssetName // (𝕡) asset#0,account#0,app#0 | {asset_params_get}.0,{asset_params_get}.1 asset.name typed_abi_call/logger.py:51 + // virtual: store check%0#0 to l-stack (no copy) (𝕡) asset#0,account#0,app#0 | check%0#0,{asset_params_get}.0 asset.name typed_abi_call/logger.py:51 + // virtual: store value%0#0 to l-stack (no copy) (𝕡) asset#0,account#0,app#0 | value%0#0,check%0#0 asset.name typed_abi_call/logger.py:51 + // virtual: load check%0#0 from l-stack (no copy) (𝕡) asset#0,account#0,app#0 | value%0#0,check%0#0 asset.name typed_abi_call/logger.py:51 + assert // asset exists // (𝕡) asset#0,account#0,app#0 | value%0#0 asset.name typed_abi_call/logger.py:51 + // virtual: load value%0#0 from l-stack (no copy) (𝕡) asset#0,account#0,app#0 | value%0#0 account.bytes typed_abi_call/logger.py:51 + frame_dig -2 // load account#0 from parameters (𝕡) asset#0,account#0,app#0 | value%0#0,account#0 account.bytes typed_abi_call/logger.py:51 + concat // (𝕡) asset#0,account#0,app#0 | {concat} account.bytes typed_abi_call/logger.py:51 + // virtual: store tmp%1#0 to l-stack (no copy) (𝕡) asset#0,account#0,app#0 | tmp%1#0 account.bytes typed_abi_call/logger.py:51 + frame_dig -1 // load app#0 from parameters (𝕡) asset#0,account#0,app#0 | tmp%1#0,app#0 app.address typed_abi_call/logger.py:51 + app_params_get AppAddress // (𝕡) asset#0,account#0,app#0 | tmp%1#0,{app_params_get}.0,{app_params_get}.1 app.address typed_abi_call/logger.py:51 + // virtual: store check%1#0 to l-stack (no copy) (𝕡) asset#0,account#0,app#0 | tmp%1#0,check%1#0,{app_params_get}.0 app.address typed_abi_call/logger.py:51 + // virtual: store value%1#0 to l-stack (no copy) (𝕡) asset#0,account#0,app#0 | tmp%1#0,value%1#0,check%1#0 app.address typed_abi_call/logger.py:51 + // virtual: load check%1#0 from l-stack (no copy) (𝕡) asset#0,account#0,app#0 | tmp%1#0,value%1#0,check%1#0 app.address typed_abi_call/logger.py:51 + assert // application exists // (𝕡) asset#0,account#0,app#0 | tmp%1#0,value%1#0 app.address typed_abi_call/logger.py:51 + // virtual: load tmp%1#0 from l-stack (no copy) (𝕡) asset#0,account#0,app#0 | value%1#0,tmp%1#0 app.address typed_abi_call/logger.py:51 + // virtual: load value%1#0 from l-stack (no copy) (𝕡) asset#0,account#0,app#0 | tmp%1#0,value%1#0 app.address typed_abi_call/logger.py:51 + concat // (𝕡) asset#0,account#0,app#0 | {concat} app.address typed_abi_call/logger.py:51 + // virtual: store tmp%3#0 to l-stack (no copy) (𝕡) asset#0,account#0,app#0 | tmp%3#0 app.address typed_abi_call/logger.py:51 + // virtual: load tmp%3#0 from l-stack (no copy) (𝕡) asset#0,account#0,app#0 | tmp%3#0 log(asset.name, account.bytes, app.address) typed_abi_call/logger.py:51 + log // (𝕡) asset#0,account#0,app#0 | log(asset.name, account.bytes, app.address) typed_abi_call/logger.py:51 + retsub // // test_cases.typed_abi_call.logger.Logger.echo_native_string(value: bytes) -> bytes: echo_native_string: - proto 1 1 // (𝕡) value#0 | @arc4.abimethod\ndef echo_native_string(self, value: String) -> String: typed_abi_call/logger.py:49-50 + proto 1 1 // (𝕡) value#0 | @arc4.abimethod\ndef echo_native_string(self, value: String) -> String: typed_abi_call/logger.py:53-54 echo_native_string_block@0: - byte "echo: " // (𝕡) value#0 | "echo: " "echo: " typed_abi_call/logger.py:51 - frame_dig -1 // load value#0 from parameters (𝕡) value#0 | "echo: ",value#0 "echo: " + value typed_abi_call/logger.py:51 - concat // (𝕡) value#0 | {concat} "echo: " + value typed_abi_call/logger.py:51 - // virtual: store tmp%0#0 to l-stack (no copy) (𝕡) value#0 | tmp%0#0 "echo: " + value typed_abi_call/logger.py:51 - // virtual: load tmp%0#0 from l-stack (no copy) (𝕡) value#0 | tmp%0#0 return "echo: " + value typed_abi_call/logger.py:51 - retsub // tmp%0#0 return "echo: " + value typed_abi_call/logger.py:51 + byte "echo: " // (𝕡) value#0 | "echo: " "echo: " typed_abi_call/logger.py:55 + frame_dig -1 // load value#0 from parameters (𝕡) value#0 | "echo: ",value#0 "echo: " + value typed_abi_call/logger.py:55 + concat // (𝕡) value#0 | {concat} "echo: " + value typed_abi_call/logger.py:55 + // virtual: store tmp%0#0 to l-stack (no copy) (𝕡) value#0 | tmp%0#0 "echo: " + value typed_abi_call/logger.py:55 + // virtual: load tmp%0#0 from l-stack (no copy) (𝕡) value#0 | tmp%0#0 return "echo: " + value typed_abi_call/logger.py:55 + retsub // tmp%0#0 return "echo: " + value typed_abi_call/logger.py:55 // test_cases.typed_abi_call.logger.Logger.echo_native_bytes(value: bytes) -> bytes: echo_native_bytes: - proto 1 1 // (𝕡) value#0 | @arc4.abimethod\ndef echo_native_bytes(self, value: Bytes) -> Bytes: typed_abi_call/logger.py:53-54 + proto 1 1 // (𝕡) value#0 | @arc4.abimethod\ndef echo_native_bytes(self, value: Bytes) -> Bytes: typed_abi_call/logger.py:57-58 echo_native_bytes_block@0: - byte 0x6563686f3a20 // (𝕡) value#0 | 0x6563686f3a20 b"echo: " typed_abi_call/logger.py:55 - frame_dig -1 // load value#0 from parameters (𝕡) value#0 | 0x6563686f3a20,value#0 b"echo: " + value typed_abi_call/logger.py:55 - concat // (𝕡) value#0 | {concat} b"echo: " + value typed_abi_call/logger.py:55 - // virtual: store tmp%0#0 to l-stack (no copy) (𝕡) value#0 | tmp%0#0 b"echo: " + value typed_abi_call/logger.py:55 - // virtual: load tmp%0#0 from l-stack (no copy) (𝕡) value#0 | tmp%0#0 return b"echo: " + value typed_abi_call/logger.py:55 - retsub // tmp%0#0 return b"echo: " + value typed_abi_call/logger.py:55 + byte 0x6563686f3a20 // (𝕡) value#0 | 0x6563686f3a20 b"echo: " typed_abi_call/logger.py:59 + frame_dig -1 // load value#0 from parameters (𝕡) value#0 | 0x6563686f3a20,value#0 b"echo: " + value typed_abi_call/logger.py:59 + concat // (𝕡) value#0 | {concat} b"echo: " + value typed_abi_call/logger.py:59 + // virtual: store tmp%0#0 to l-stack (no copy) (𝕡) value#0 | tmp%0#0 b"echo: " + value typed_abi_call/logger.py:59 + // virtual: load tmp%0#0 from l-stack (no copy) (𝕡) value#0 | tmp%0#0 return b"echo: " + value typed_abi_call/logger.py:59 + retsub // tmp%0#0 return b"echo: " + value typed_abi_call/logger.py:59 // test_cases.typed_abi_call.logger.Logger.echo_native_uint64(value: uint64) -> uint64: echo_native_uint64: - proto 1 1 // (𝕡) value#0 | @arc4.abimethod\ndef echo_native_uint64(self, value: UInt64) -> UInt64: typed_abi_call/logger.py:57-58 + proto 1 1 // (𝕡) value#0 | @arc4.abimethod\ndef echo_native_uint64(self, value: UInt64) -> UInt64: typed_abi_call/logger.py:61-62 echo_native_uint64_block@0: - frame_dig -1 // load value#0 from parameters (𝕡) value#0 | value#0 value + 1 typed_abi_call/logger.py:59 - int 1 // (𝕡) value#0 | value#0,1 1 typed_abi_call/logger.py:59 - + // (𝕡) value#0 | {+} value + 1 typed_abi_call/logger.py:59 - // virtual: store tmp%0#0 to l-stack (no copy) (𝕡) value#0 | tmp%0#0 value + 1 typed_abi_call/logger.py:59 - // virtual: load tmp%0#0 from l-stack (no copy) (𝕡) value#0 | tmp%0#0 return value + 1 typed_abi_call/logger.py:59 - retsub // tmp%0#0 return value + 1 typed_abi_call/logger.py:59 + frame_dig -1 // load value#0 from parameters (𝕡) value#0 | value#0 value + 1 typed_abi_call/logger.py:63 + int 1 // (𝕡) value#0 | value#0,1 1 typed_abi_call/logger.py:63 + + // (𝕡) value#0 | {+} value + 1 typed_abi_call/logger.py:63 + // virtual: store tmp%0#0 to l-stack (no copy) (𝕡) value#0 | tmp%0#0 value + 1 typed_abi_call/logger.py:63 + // virtual: load tmp%0#0 from l-stack (no copy) (𝕡) value#0 | tmp%0#0 return value + 1 typed_abi_call/logger.py:63 + retsub // tmp%0#0 return value + 1 typed_abi_call/logger.py:63 // test_cases.typed_abi_call.logger.Logger.echo_native_biguint(value: bytes) -> bytes: echo_native_biguint: - proto 1 1 // (𝕡) value#0 | @arc4.abimethod\ndef echo_native_biguint(self, value: BigUInt) -> BigUInt: typed_abi_call/logger.py:61-62 + proto 1 1 // (𝕡) value#0 | @arc4.abimethod\ndef echo_native_biguint(self, value: BigUInt) -> BigUInt: typed_abi_call/logger.py:65-66 echo_native_biguint_block@0: - frame_dig -1 // load value#0 from parameters (𝕡) value#0 | value#0 value + 1 typed_abi_call/logger.py:63 - byte 0x01 // (𝕡) value#0 | value#0,0x01 1 typed_abi_call/logger.py:63 - b+ // (𝕡) value#0 | {b+} value + 1 typed_abi_call/logger.py:63 - // virtual: store tmp%0#0 to l-stack (no copy) (𝕡) value#0 | tmp%0#0 value + 1 typed_abi_call/logger.py:63 - // virtual: load tmp%0#0 from l-stack (no copy) (𝕡) value#0 | tmp%0#0 return value + 1 typed_abi_call/logger.py:63 - retsub // tmp%0#0 return value + 1 typed_abi_call/logger.py:63 + frame_dig -1 // load value#0 from parameters (𝕡) value#0 | value#0 value + 1 typed_abi_call/logger.py:67 + byte 0x01 // (𝕡) value#0 | value#0,0x01 1 typed_abi_call/logger.py:67 + b+ // (𝕡) value#0 | {b+} value + 1 typed_abi_call/logger.py:67 + // virtual: store tmp%0#0 to l-stack (no copy) (𝕡) value#0 | tmp%0#0 value + 1 typed_abi_call/logger.py:67 + // virtual: load tmp%0#0 from l-stack (no copy) (𝕡) value#0 | tmp%0#0 return value + 1 typed_abi_call/logger.py:67 + retsub // tmp%0#0 return value + 1 typed_abi_call/logger.py:67 // test_cases.typed_abi_call.logger.Logger.echo_native_tuple(s: bytes, b: bytes, u: uint64, bu: bytes) -> bytes, bytes, uint64, bytes: echo_native_tuple: - proto 4 4 // (𝕡) s#0,b#0,u#0,bu#0 | @arc4.abimethod\ndef echo_native_tuple(\nself, s: String, b: Bytes, u: UInt64, bu: BigUInt\n) -> ... typed_abi_call/logger.py:65-68 + proto 4 4 // (𝕡) s#0,b#0,u#0,bu#0 | @arc4.abimethod\ndef echo_native_tuple(\nself, s: String, b: Bytes, u: UInt64, bu: BigUInt\n) -> ... typed_abi_call/logger.py:69-72 echo_native_tuple_block@0: - byte "echo: " // (𝕡) s#0,b#0,u#0,bu#0 | "echo: " "echo: " typed_abi_call/logger.py:69 - frame_dig -4 // load s#0 from parameters (𝕡) s#0,b#0,u#0,bu#0 | "echo: ",s#0 "echo: " + s typed_abi_call/logger.py:69 - concat // (𝕡) s#0,b#0,u#0,bu#0 | {concat} "echo: " + s typed_abi_call/logger.py:69 - // virtual: store tmp%0#0 to l-stack (no copy) (𝕡) s#0,b#0,u#0,bu#0 | tmp%0#0 "echo: " + s typed_abi_call/logger.py:69 - byte 0x6563686f3a20 // (𝕡) s#0,b#0,u#0,bu#0 | tmp%0#0,0x6563686f3a20 b"echo: " typed_abi_call/logger.py:69 - frame_dig -3 // load b#0 from parameters (𝕡) s#0,b#0,u#0,bu#0 | tmp%0#0,0x6563686f3a20,b#0 b"echo: " + b typed_abi_call/logger.py:69 - concat // (𝕡) s#0,b#0,u#0,bu#0 | tmp%0#0,{concat} b"echo: " + b typed_abi_call/logger.py:69 - // virtual: store tmp%1#0 to l-stack (no copy) (𝕡) s#0,b#0,u#0,bu#0 | tmp%0#0,tmp%1#0 b"echo: " + b typed_abi_call/logger.py:69 - frame_dig -2 // load u#0 from parameters (𝕡) s#0,b#0,u#0,bu#0 | tmp%0#0,tmp%1#0,u#0 u + 1 typed_abi_call/logger.py:69 - int 1 // (𝕡) s#0,b#0,u#0,bu#0 | tmp%0#0,tmp%1#0,u#0,1 1 typed_abi_call/logger.py:69 - + // (𝕡) s#0,b#0,u#0,bu#0 | tmp%0#0,tmp%1#0,{+} u + 1 typed_abi_call/logger.py:69 - // virtual: store tmp%2#0 to l-stack (no copy) (𝕡) s#0,b#0,u#0,bu#0 | tmp%0#0,tmp%1#0,tmp%2#0 u + 1 typed_abi_call/logger.py:69 - frame_dig -1 // load bu#0 from parameters (𝕡) s#0,b#0,u#0,bu#0 | tmp%0#0,tmp%1#0,tmp%2#0,bu#0 bu + 1 typed_abi_call/logger.py:69 - byte 0x01 // (𝕡) s#0,b#0,u#0,bu#0 | tmp%0#0,tmp%1#0,tmp%2#0,bu#0,0x01 1 typed_abi_call/logger.py:69 - b+ // (𝕡) s#0,b#0,u#0,bu#0 | tmp%0#0,tmp%1#0,tmp%2#0,{b+} bu + 1 typed_abi_call/logger.py:69 - // virtual: store tmp%3#0 to l-stack (no copy) (𝕡) s#0,b#0,u#0,bu#0 | tmp%0#0,tmp%1#0,tmp%2#0,tmp%3#0 bu + 1 typed_abi_call/logger.py:69 - uncover 3 // load tmp%0#0 from l-stack (no copy) (𝕡) s#0,b#0,u#0,bu#0 | tmp%1#0,tmp%2#0,tmp%3#0,tmp%0#0 return "echo: " + s, b"echo: " + b, u + 1, bu + 1 typed_abi_call/logger.py:69 - uncover 3 // load tmp%1#0 from l-stack (no copy) (𝕡) s#0,b#0,u#0,bu#0 | tmp%2#0,tmp%3#0,tmp%0#0,tmp%1#0 return "echo: " + s, b"echo: " + b, u + 1, bu + 1 typed_abi_call/logger.py:69 - uncover 3 // load tmp%2#0 from l-stack (no copy) (𝕡) s#0,b#0,u#0,bu#0 | tmp%3#0,tmp%0#0,tmp%1#0,tmp%2#0 return "echo: " + s, b"echo: " + b, u + 1, bu + 1 typed_abi_call/logger.py:69 - uncover 3 // load tmp%3#0 from l-stack (no copy) (𝕡) s#0,b#0,u#0,bu#0 | tmp%0#0,tmp%1#0,tmp%2#0,tmp%3#0 return "echo: " + s, b"echo: " + b, u + 1, bu + 1 typed_abi_call/logger.py:69 - retsub // tmp%0#0,tmp%1#0,tmp%2#0,tmp%3#0 return "echo: " + s, b"echo: " + b, u + 1, bu + 1 typed_abi_call/logger.py:69 + byte "echo: " // (𝕡) s#0,b#0,u#0,bu#0 | "echo: " "echo: " typed_abi_call/logger.py:73 + frame_dig -4 // load s#0 from parameters (𝕡) s#0,b#0,u#0,bu#0 | "echo: ",s#0 "echo: " + s typed_abi_call/logger.py:73 + concat // (𝕡) s#0,b#0,u#0,bu#0 | {concat} "echo: " + s typed_abi_call/logger.py:73 + // virtual: store tmp%0#0 to l-stack (no copy) (𝕡) s#0,b#0,u#0,bu#0 | tmp%0#0 "echo: " + s typed_abi_call/logger.py:73 + byte 0x6563686f3a20 // (𝕡) s#0,b#0,u#0,bu#0 | tmp%0#0,0x6563686f3a20 b"echo: " typed_abi_call/logger.py:73 + frame_dig -3 // load b#0 from parameters (𝕡) s#0,b#0,u#0,bu#0 | tmp%0#0,0x6563686f3a20,b#0 b"echo: " + b typed_abi_call/logger.py:73 + concat // (𝕡) s#0,b#0,u#0,bu#0 | tmp%0#0,{concat} b"echo: " + b typed_abi_call/logger.py:73 + // virtual: store tmp%1#0 to l-stack (no copy) (𝕡) s#0,b#0,u#0,bu#0 | tmp%0#0,tmp%1#0 b"echo: " + b typed_abi_call/logger.py:73 + frame_dig -2 // load u#0 from parameters (𝕡) s#0,b#0,u#0,bu#0 | tmp%0#0,tmp%1#0,u#0 u + 1 typed_abi_call/logger.py:73 + int 1 // (𝕡) s#0,b#0,u#0,bu#0 | tmp%0#0,tmp%1#0,u#0,1 1 typed_abi_call/logger.py:73 + + // (𝕡) s#0,b#0,u#0,bu#0 | tmp%0#0,tmp%1#0,{+} u + 1 typed_abi_call/logger.py:73 + // virtual: store tmp%2#0 to l-stack (no copy) (𝕡) s#0,b#0,u#0,bu#0 | tmp%0#0,tmp%1#0,tmp%2#0 u + 1 typed_abi_call/logger.py:73 + frame_dig -1 // load bu#0 from parameters (𝕡) s#0,b#0,u#0,bu#0 | tmp%0#0,tmp%1#0,tmp%2#0,bu#0 bu + 1 typed_abi_call/logger.py:73 + byte 0x01 // (𝕡) s#0,b#0,u#0,bu#0 | tmp%0#0,tmp%1#0,tmp%2#0,bu#0,0x01 1 typed_abi_call/logger.py:73 + b+ // (𝕡) s#0,b#0,u#0,bu#0 | tmp%0#0,tmp%1#0,tmp%2#0,{b+} bu + 1 typed_abi_call/logger.py:73 + // virtual: store tmp%3#0 to l-stack (no copy) (𝕡) s#0,b#0,u#0,bu#0 | tmp%0#0,tmp%1#0,tmp%2#0,tmp%3#0 bu + 1 typed_abi_call/logger.py:73 + uncover 3 // load tmp%0#0 from l-stack (no copy) (𝕡) s#0,b#0,u#0,bu#0 | tmp%1#0,tmp%2#0,tmp%3#0,tmp%0#0 return "echo: " + s, b"echo: " + b, u + 1, bu + 1 typed_abi_call/logger.py:73 + uncover 3 // load tmp%1#0 from l-stack (no copy) (𝕡) s#0,b#0,u#0,bu#0 | tmp%2#0,tmp%3#0,tmp%0#0,tmp%1#0 return "echo: " + s, b"echo: " + b, u + 1, bu + 1 typed_abi_call/logger.py:73 + uncover 3 // load tmp%2#0 from l-stack (no copy) (𝕡) s#0,b#0,u#0,bu#0 | tmp%3#0,tmp%0#0,tmp%1#0,tmp%2#0 return "echo: " + s, b"echo: " + b, u + 1, bu + 1 typed_abi_call/logger.py:73 + uncover 3 // load tmp%3#0 from l-stack (no copy) (𝕡) s#0,b#0,u#0,bu#0 | tmp%0#0,tmp%1#0,tmp%2#0,tmp%3#0 return "echo: " + s, b"echo: " + b, u + 1, bu + 1 typed_abi_call/logger.py:73 + retsub // tmp%0#0,tmp%1#0,tmp%2#0,tmp%3#0 return "echo: " + s, b"echo: " + b, u + 1, bu + 1 typed_abi_call/logger.py:73 // test_cases.typed_abi_call.logger.Logger.return_args_after_14th(_a1: bytes, _a2: bytes, _a3: bytes, _a4: bytes, _a5: bytes, _a6: bytes, _a7: bytes, _a8: bytes, _a9: bytes, _a10: bytes, _a11: bytes, _a12: bytes, _a13: bytes, _a14: bytes, a15: bytes, a16: bytes, a17: bytes, a18: bytes, a19: bytes, a20: bytes) -> bytes: return_args_after_14th: - proto 20 1 // (𝕡) _a1#0,_a2#0,_a3#0,_a4#0,_a5#0,_a6#0,_a7#0,_a8#0,_a9#0,_a10#0,_a11#0,_a12#0,_a13#0,_a14#0,a15#0,a16#0,a17#0,a18#0,a19#0,a20#0 | @arc4.abimethod\ndef return_args_after_14th(\nself,\n_a1: arc4.UInt64,\n_a2: arc4.UInt64,\n_a3: a... typed_abi_call/logger.py:71-94 + proto 20 1 // (𝕡) _a1#0,_a2#0,_a3#0,_a4#0,_a5#0,_a6#0,_a7#0,_a8#0,_a9#0,_a10#0,_a11#0,_a12#0,_a13#0,_a14#0,a15#0,a16#0,a17#0,a18#0,a19#0,a20#0 | @arc4.abimethod\ndef return_args_after_14th(\nself,\n_a1: arc4.UInt64,\n_a2: arc4.UInt64,\n_a3: a... typed_abi_call/logger.py:75-98 return_args_after_14th_block@0: - frame_dig -6 // load a15#0 from parameters (𝕡) _a1#0,_a2#0,_a3#0,_a4#0,_a5#0,_a6#0,_a7#0,_a8#0,_a9#0,_a10#0,_a11#0,_a12#0,_a13#0,_a14#0,a15#0,a16#0,a17#0,a18#0,a19#0,a20#0 | a15#0 arc4.Tuple((a15, a16, a17, a18, a19, a20)) typed_abi_call/logger.py:95 - frame_dig -5 // load a16#0 from parameters (𝕡) _a1#0,_a2#0,_a3#0,_a4#0,_a5#0,_a6#0,_a7#0,_a8#0,_a9#0,_a10#0,_a11#0,_a12#0,_a13#0,_a14#0,a15#0,a16#0,a17#0,a18#0,a19#0,a20#0 | a15#0,a16#0 arc4.Tuple((a15, a16, a17, a18, a19, a20)) typed_abi_call/logger.py:95 - concat // (𝕡) _a1#0,_a2#0,_a3#0,_a4#0,_a5#0,_a6#0,_a7#0,_a8#0,_a9#0,_a10#0,_a11#0,_a12#0,_a13#0,_a14#0,a15#0,a16#0,a17#0,a18#0,a19#0,a20#0 | {concat} arc4.Tuple((a15, a16, a17, a18, a19, a20)) typed_abi_call/logger.py:95 - // virtual: store encoded_tuple_buffer%2#0 to l-stack (no copy) (𝕡) _a1#0,_a2#0,_a3#0,_a4#0,_a5#0,_a6#0,_a7#0,_a8#0,_a9#0,_a10#0,_a11#0,_a12#0,_a13#0,_a14#0,a15#0,a16#0,a17#0,a18#0,a19#0,a20#0 | encoded_tuple_buffer%2#0 arc4.Tuple((a15, a16, a17, a18, a19, a20)) typed_abi_call/logger.py:95 - // virtual: load encoded_tuple_buffer%2#0 from l-stack (no copy) (𝕡) _a1#0,_a2#0,_a3#0,_a4#0,_a5#0,_a6#0,_a7#0,_a8#0,_a9#0,_a10#0,_a11#0,_a12#0,_a13#0,_a14#0,a15#0,a16#0,a17#0,a18#0,a19#0,a20#0 | encoded_tuple_buffer%2#0 arc4.Tuple((a15, a16, a17, a18, a19, a20)) typed_abi_call/logger.py:95 - frame_dig -4 // load a17#0 from parameters (𝕡) _a1#0,_a2#0,_a3#0,_a4#0,_a5#0,_a6#0,_a7#0,_a8#0,_a9#0,_a10#0,_a11#0,_a12#0,_a13#0,_a14#0,a15#0,a16#0,a17#0,a18#0,a19#0,a20#0 | encoded_tuple_buffer%2#0,a17#0 arc4.Tuple((a15, a16, a17, a18, a19, a20)) typed_abi_call/logger.py:95 - concat // (𝕡) _a1#0,_a2#0,_a3#0,_a4#0,_a5#0,_a6#0,_a7#0,_a8#0,_a9#0,_a10#0,_a11#0,_a12#0,_a13#0,_a14#0,a15#0,a16#0,a17#0,a18#0,a19#0,a20#0 | {concat} arc4.Tuple((a15, a16, a17, a18, a19, a20)) typed_abi_call/logger.py:95 - // virtual: store encoded_tuple_buffer%3#0 to l-stack (no copy) (𝕡) _a1#0,_a2#0,_a3#0,_a4#0,_a5#0,_a6#0,_a7#0,_a8#0,_a9#0,_a10#0,_a11#0,_a12#0,_a13#0,_a14#0,a15#0,a16#0,a17#0,a18#0,a19#0,a20#0 | encoded_tuple_buffer%3#0 arc4.Tuple((a15, a16, a17, a18, a19, a20)) typed_abi_call/logger.py:95 - // virtual: load encoded_tuple_buffer%3#0 from l-stack (no copy) (𝕡) _a1#0,_a2#0,_a3#0,_a4#0,_a5#0,_a6#0,_a7#0,_a8#0,_a9#0,_a10#0,_a11#0,_a12#0,_a13#0,_a14#0,a15#0,a16#0,a17#0,a18#0,a19#0,a20#0 | encoded_tuple_buffer%3#0 arc4.Tuple((a15, a16, a17, a18, a19, a20)) typed_abi_call/logger.py:95 - frame_dig -3 // load a18#0 from parameters (𝕡) _a1#0,_a2#0,_a3#0,_a4#0,_a5#0,_a6#0,_a7#0,_a8#0,_a9#0,_a10#0,_a11#0,_a12#0,_a13#0,_a14#0,a15#0,a16#0,a17#0,a18#0,a19#0,a20#0 | encoded_tuple_buffer%3#0,a18#0 arc4.Tuple((a15, a16, a17, a18, a19, a20)) typed_abi_call/logger.py:95 - concat // (𝕡) _a1#0,_a2#0,_a3#0,_a4#0,_a5#0,_a6#0,_a7#0,_a8#0,_a9#0,_a10#0,_a11#0,_a12#0,_a13#0,_a14#0,a15#0,a16#0,a17#0,a18#0,a19#0,a20#0 | {concat} arc4.Tuple((a15, a16, a17, a18, a19, a20)) typed_abi_call/logger.py:95 - // virtual: store encoded_tuple_buffer%4#0 to l-stack (no copy) (𝕡) _a1#0,_a2#0,_a3#0,_a4#0,_a5#0,_a6#0,_a7#0,_a8#0,_a9#0,_a10#0,_a11#0,_a12#0,_a13#0,_a14#0,a15#0,a16#0,a17#0,a18#0,a19#0,a20#0 | encoded_tuple_buffer%4#0 arc4.Tuple((a15, a16, a17, a18, a19, a20)) typed_abi_call/logger.py:95 - // virtual: load encoded_tuple_buffer%4#0 from l-stack (no copy) (𝕡) _a1#0,_a2#0,_a3#0,_a4#0,_a5#0,_a6#0,_a7#0,_a8#0,_a9#0,_a10#0,_a11#0,_a12#0,_a13#0,_a14#0,a15#0,a16#0,a17#0,a18#0,a19#0,a20#0 | encoded_tuple_buffer%4#0 arc4.Tuple((a15, a16, a17, a18, a19, a20)) typed_abi_call/logger.py:95 - frame_dig -2 // load a19#0 from parameters (𝕡) _a1#0,_a2#0,_a3#0,_a4#0,_a5#0,_a6#0,_a7#0,_a8#0,_a9#0,_a10#0,_a11#0,_a12#0,_a13#0,_a14#0,a15#0,a16#0,a17#0,a18#0,a19#0,a20#0 | encoded_tuple_buffer%4#0,a19#0 arc4.Tuple((a15, a16, a17, a18, a19, a20)) typed_abi_call/logger.py:95 - concat // (𝕡) _a1#0,_a2#0,_a3#0,_a4#0,_a5#0,_a6#0,_a7#0,_a8#0,_a9#0,_a10#0,_a11#0,_a12#0,_a13#0,_a14#0,a15#0,a16#0,a17#0,a18#0,a19#0,a20#0 | {concat} arc4.Tuple((a15, a16, a17, a18, a19, a20)) typed_abi_call/logger.py:95 - // virtual: store encoded_tuple_buffer%5#0 to l-stack (no copy) (𝕡) _a1#0,_a2#0,_a3#0,_a4#0,_a5#0,_a6#0,_a7#0,_a8#0,_a9#0,_a10#0,_a11#0,_a12#0,_a13#0,_a14#0,a15#0,a16#0,a17#0,a18#0,a19#0,a20#0 | encoded_tuple_buffer%5#0 arc4.Tuple((a15, a16, a17, a18, a19, a20)) typed_abi_call/logger.py:95 - // virtual: load encoded_tuple_buffer%5#0 from l-stack (no copy) (𝕡) _a1#0,_a2#0,_a3#0,_a4#0,_a5#0,_a6#0,_a7#0,_a8#0,_a9#0,_a10#0,_a11#0,_a12#0,_a13#0,_a14#0,a15#0,a16#0,a17#0,a18#0,a19#0,a20#0 | encoded_tuple_buffer%5#0 arc4.Tuple((a15, a16, a17, a18, a19, a20)) typed_abi_call/logger.py:95 - frame_dig -1 // load a20#0 from parameters (𝕡) _a1#0,_a2#0,_a3#0,_a4#0,_a5#0,_a6#0,_a7#0,_a8#0,_a9#0,_a10#0,_a11#0,_a12#0,_a13#0,_a14#0,a15#0,a16#0,a17#0,a18#0,a19#0,a20#0 | encoded_tuple_buffer%5#0,a20#0 arc4.Tuple((a15, a16, a17, a18, a19, a20)) typed_abi_call/logger.py:95 - concat // (𝕡) _a1#0,_a2#0,_a3#0,_a4#0,_a5#0,_a6#0,_a7#0,_a8#0,_a9#0,_a10#0,_a11#0,_a12#0,_a13#0,_a14#0,a15#0,a16#0,a17#0,a18#0,a19#0,a20#0 | {concat} arc4.Tuple((a15, a16, a17, a18, a19, a20)) typed_abi_call/logger.py:95 - // virtual: store last_arg#0 to l-stack (no copy) (𝕡) _a1#0,_a2#0,_a3#0,_a4#0,_a5#0,_a6#0,_a7#0,_a8#0,_a9#0,_a10#0,_a11#0,_a12#0,_a13#0,_a14#0,a15#0,a16#0,a17#0,a18#0,a19#0,a20#0 | last_arg#0 arc4.Tuple((a15, a16, a17, a18, a19, a20)) typed_abi_call/logger.py:95 - txna ApplicationArgs 15 // (𝕡) _a1#0,_a2#0,_a3#0,_a4#0,_a5#0,_a6#0,_a7#0,_a8#0,_a9#0,_a10#0,_a11#0,_a12#0,_a13#0,_a14#0,a15#0,a16#0,a17#0,a18#0,a19#0,a20#0 | last_arg#0,{txna} Txn.application_args(15) typed_abi_call/logger.py:96 - // virtual: store tmp%0#0 to l-stack (no copy) (𝕡) _a1#0,_a2#0,_a3#0,_a4#0,_a5#0,_a6#0,_a7#0,_a8#0,_a9#0,_a10#0,_a11#0,_a12#0,_a13#0,_a14#0,a15#0,a16#0,a17#0,a18#0,a19#0,a20#0 | last_arg#0,tmp%0#0 Txn.application_args(15) typed_abi_call/logger.py:96 - // virtual: load tmp%0#0 from l-stack (no copy) (𝕡) _a1#0,_a2#0,_a3#0,_a4#0,_a5#0,_a6#0,_a7#0,_a8#0,_a9#0,_a10#0,_a11#0,_a12#0,_a13#0,_a14#0,a15#0,a16#0,a17#0,a18#0,a19#0,a20#0 | last_arg#0,tmp%0#0 Txn.application_args(15) == last_arg.bytes typed_abi_call/logger.py:96 - dig 1 // load last_arg#0 from l-stack (copy) (𝕡) _a1#0,_a2#0,_a3#0,_a4#0,_a5#0,_a6#0,_a7#0,_a8#0,_a9#0,_a10#0,_a11#0,_a12#0,_a13#0,_a14#0,a15#0,a16#0,a17#0,a18#0,a19#0,a20#0 | last_arg#0,tmp%0#0,last_arg#0 Txn.application_args(15) == last_arg.bytes typed_abi_call/logger.py:96 - == // (𝕡) _a1#0,_a2#0,_a3#0,_a4#0,_a5#0,_a6#0,_a7#0,_a8#0,_a9#0,_a10#0,_a11#0,_a12#0,_a13#0,_a14#0,a15#0,a16#0,a17#0,a18#0,a19#0,a20#0 | last_arg#0,{==} Txn.application_args(15) == last_arg.bytes typed_abi_call/logger.py:96 - // virtual: store tmp%1#0 to l-stack (no copy) (𝕡) _a1#0,_a2#0,_a3#0,_a4#0,_a5#0,_a6#0,_a7#0,_a8#0,_a9#0,_a10#0,_a11#0,_a12#0,_a13#0,_a14#0,a15#0,a16#0,a17#0,a18#0,a19#0,a20#0 | last_arg#0,tmp%1#0 Txn.application_args(15) == last_arg.bytes typed_abi_call/logger.py:96 - // virtual: load tmp%1#0 from l-stack (no copy) (𝕡) _a1#0,_a2#0,_a3#0,_a4#0,_a5#0,_a6#0,_a7#0,_a8#0,_a9#0,_a10#0,_a11#0,_a12#0,_a13#0,_a14#0,a15#0,a16#0,a17#0,a18#0,a19#0,a20#0 | last_arg#0,tmp%1#0 assert Txn.application_args(15) == last_arg.bytes typed_abi_call/logger.py:96 - assert // (𝕡) _a1#0,_a2#0,_a3#0,_a4#0,_a5#0,_a6#0,_a7#0,_a8#0,_a9#0,_a10#0,_a11#0,_a12#0,_a13#0,_a14#0,a15#0,a16#0,a17#0,a18#0,a19#0,a20#0 | last_arg#0 assert Txn.application_args(15) == last_arg.bytes typed_abi_call/logger.py:96 - dup // load last_arg#0 from l-stack (copy) (𝕡) _a1#0,_a2#0,_a3#0,_a4#0,_a5#0,_a6#0,_a7#0,_a8#0,_a9#0,_a10#0,_a11#0,_a12#0,_a13#0,_a14#0,a15#0,a16#0,a17#0,a18#0,a19#0,a20#0 | last_arg#0,last_arg#0 arc4.DynamicBytes(last_arg.bytes) typed_abi_call/logger.py:97 - len // (𝕡) _a1#0,_a2#0,_a3#0,_a4#0,_a5#0,_a6#0,_a7#0,_a8#0,_a9#0,_a10#0,_a11#0,_a12#0,_a13#0,_a14#0,a15#0,a16#0,a17#0,a18#0,a19#0,a20#0 | last_arg#0,{len} arc4.DynamicBytes(last_arg.bytes) typed_abi_call/logger.py:97 - // virtual: store length%0#0 to l-stack (no copy) (𝕡) _a1#0,_a2#0,_a3#0,_a4#0,_a5#0,_a6#0,_a7#0,_a8#0,_a9#0,_a10#0,_a11#0,_a12#0,_a13#0,_a14#0,a15#0,a16#0,a17#0,a18#0,a19#0,a20#0 | last_arg#0,length%0#0 arc4.DynamicBytes(last_arg.bytes) typed_abi_call/logger.py:97 - // virtual: load length%0#0 from l-stack (no copy) (𝕡) _a1#0,_a2#0,_a3#0,_a4#0,_a5#0,_a6#0,_a7#0,_a8#0,_a9#0,_a10#0,_a11#0,_a12#0,_a13#0,_a14#0,a15#0,a16#0,a17#0,a18#0,a19#0,a20#0 | last_arg#0,length%0#0 arc4.DynamicBytes(last_arg.bytes) typed_abi_call/logger.py:97 - itob // (𝕡) _a1#0,_a2#0,_a3#0,_a4#0,_a5#0,_a6#0,_a7#0,_a8#0,_a9#0,_a10#0,_a11#0,_a12#0,_a13#0,_a14#0,a15#0,a16#0,a17#0,a18#0,a19#0,a20#0 | last_arg#0,{itob} arc4.DynamicBytes(last_arg.bytes) typed_abi_call/logger.py:97 - // virtual: store as_bytes%0#0 to l-stack (no copy) (𝕡) _a1#0,_a2#0,_a3#0,_a4#0,_a5#0,_a6#0,_a7#0,_a8#0,_a9#0,_a10#0,_a11#0,_a12#0,_a13#0,_a14#0,a15#0,a16#0,a17#0,a18#0,a19#0,a20#0 | last_arg#0,as_bytes%0#0 arc4.DynamicBytes(last_arg.bytes) typed_abi_call/logger.py:97 - // virtual: load as_bytes%0#0 from l-stack (no copy) (𝕡) _a1#0,_a2#0,_a3#0,_a4#0,_a5#0,_a6#0,_a7#0,_a8#0,_a9#0,_a10#0,_a11#0,_a12#0,_a13#0,_a14#0,a15#0,a16#0,a17#0,a18#0,a19#0,a20#0 | last_arg#0,as_bytes%0#0 arc4.DynamicBytes(last_arg.bytes) typed_abi_call/logger.py:97 - extract 6 2 // (𝕡) _a1#0,_a2#0,_a3#0,_a4#0,_a5#0,_a6#0,_a7#0,_a8#0,_a9#0,_a10#0,_a11#0,_a12#0,_a13#0,_a14#0,a15#0,a16#0,a17#0,a18#0,a19#0,a20#0 | last_arg#0,{extract} arc4.DynamicBytes(last_arg.bytes) typed_abi_call/logger.py:97 - // virtual: store length_uint16%0#0 to l-stack (no copy) (𝕡) _a1#0,_a2#0,_a3#0,_a4#0,_a5#0,_a6#0,_a7#0,_a8#0,_a9#0,_a10#0,_a11#0,_a12#0,_a13#0,_a14#0,a15#0,a16#0,a17#0,a18#0,a19#0,a20#0 | last_arg#0,length_uint16%0#0 arc4.DynamicBytes(last_arg.bytes) typed_abi_call/logger.py:97 - // virtual: load length_uint16%0#0 from l-stack (no copy) (𝕡) _a1#0,_a2#0,_a3#0,_a4#0,_a5#0,_a6#0,_a7#0,_a8#0,_a9#0,_a10#0,_a11#0,_a12#0,_a13#0,_a14#0,a15#0,a16#0,a17#0,a18#0,a19#0,a20#0 | last_arg#0,length_uint16%0#0 arc4.DynamicBytes(last_arg.bytes) typed_abi_call/logger.py:97 - uncover 1 // load last_arg#0 from l-stack (no copy) (𝕡) _a1#0,_a2#0,_a3#0,_a4#0,_a5#0,_a6#0,_a7#0,_a8#0,_a9#0,_a10#0,_a11#0,_a12#0,_a13#0,_a14#0,a15#0,a16#0,a17#0,a18#0,a19#0,a20#0 | length_uint16%0#0,last_arg#0 arc4.DynamicBytes(last_arg.bytes) typed_abi_call/logger.py:97 - concat // (𝕡) _a1#0,_a2#0,_a3#0,_a4#0,_a5#0,_a6#0,_a7#0,_a8#0,_a9#0,_a10#0,_a11#0,_a12#0,_a13#0,_a14#0,a15#0,a16#0,a17#0,a18#0,a19#0,a20#0 | {concat} arc4.DynamicBytes(last_arg.bytes) typed_abi_call/logger.py:97 - // virtual: store encoded_value%0#0 to l-stack (no copy) (𝕡) _a1#0,_a2#0,_a3#0,_a4#0,_a5#0,_a6#0,_a7#0,_a8#0,_a9#0,_a10#0,_a11#0,_a12#0,_a13#0,_a14#0,a15#0,a16#0,a17#0,a18#0,a19#0,a20#0 | encoded_value%0#0 arc4.DynamicBytes(last_arg.bytes) typed_abi_call/logger.py:97 - // virtual: load encoded_value%0#0 from l-stack (no copy) (𝕡) _a1#0,_a2#0,_a3#0,_a4#0,_a5#0,_a6#0,_a7#0,_a8#0,_a9#0,_a10#0,_a11#0,_a12#0,_a13#0,_a14#0,a15#0,a16#0,a17#0,a18#0,a19#0,a20#0 | encoded_value%0#0 return arc4.DynamicBytes(last_arg.bytes) typed_abi_call/logger.py:97 - retsub // encoded_value%0#0 return arc4.DynamicBytes(last_arg.bytes) typed_abi_call/logger.py:97 + frame_dig -6 // load a15#0 from parameters (𝕡) _a1#0,_a2#0,_a3#0,_a4#0,_a5#0,_a6#0,_a7#0,_a8#0,_a9#0,_a10#0,_a11#0,_a12#0,_a13#0,_a14#0,a15#0,a16#0,a17#0,a18#0,a19#0,a20#0 | a15#0 arc4.Tuple((a15, a16, a17, a18, a19, a20)) typed_abi_call/logger.py:99 + frame_dig -5 // load a16#0 from parameters (𝕡) _a1#0,_a2#0,_a3#0,_a4#0,_a5#0,_a6#0,_a7#0,_a8#0,_a9#0,_a10#0,_a11#0,_a12#0,_a13#0,_a14#0,a15#0,a16#0,a17#0,a18#0,a19#0,a20#0 | a15#0,a16#0 arc4.Tuple((a15, a16, a17, a18, a19, a20)) typed_abi_call/logger.py:99 + concat // (𝕡) _a1#0,_a2#0,_a3#0,_a4#0,_a5#0,_a6#0,_a7#0,_a8#0,_a9#0,_a10#0,_a11#0,_a12#0,_a13#0,_a14#0,a15#0,a16#0,a17#0,a18#0,a19#0,a20#0 | {concat} arc4.Tuple((a15, a16, a17, a18, a19, a20)) typed_abi_call/logger.py:99 + // virtual: store encoded_tuple_buffer%2#0 to l-stack (no copy) (𝕡) _a1#0,_a2#0,_a3#0,_a4#0,_a5#0,_a6#0,_a7#0,_a8#0,_a9#0,_a10#0,_a11#0,_a12#0,_a13#0,_a14#0,a15#0,a16#0,a17#0,a18#0,a19#0,a20#0 | encoded_tuple_buffer%2#0 arc4.Tuple((a15, a16, a17, a18, a19, a20)) typed_abi_call/logger.py:99 + // virtual: load encoded_tuple_buffer%2#0 from l-stack (no copy) (𝕡) _a1#0,_a2#0,_a3#0,_a4#0,_a5#0,_a6#0,_a7#0,_a8#0,_a9#0,_a10#0,_a11#0,_a12#0,_a13#0,_a14#0,a15#0,a16#0,a17#0,a18#0,a19#0,a20#0 | encoded_tuple_buffer%2#0 arc4.Tuple((a15, a16, a17, a18, a19, a20)) typed_abi_call/logger.py:99 + frame_dig -4 // load a17#0 from parameters (𝕡) _a1#0,_a2#0,_a3#0,_a4#0,_a5#0,_a6#0,_a7#0,_a8#0,_a9#0,_a10#0,_a11#0,_a12#0,_a13#0,_a14#0,a15#0,a16#0,a17#0,a18#0,a19#0,a20#0 | encoded_tuple_buffer%2#0,a17#0 arc4.Tuple((a15, a16, a17, a18, a19, a20)) typed_abi_call/logger.py:99 + concat // (𝕡) _a1#0,_a2#0,_a3#0,_a4#0,_a5#0,_a6#0,_a7#0,_a8#0,_a9#0,_a10#0,_a11#0,_a12#0,_a13#0,_a14#0,a15#0,a16#0,a17#0,a18#0,a19#0,a20#0 | {concat} arc4.Tuple((a15, a16, a17, a18, a19, a20)) typed_abi_call/logger.py:99 + // virtual: store encoded_tuple_buffer%3#0 to l-stack (no copy) (𝕡) _a1#0,_a2#0,_a3#0,_a4#0,_a5#0,_a6#0,_a7#0,_a8#0,_a9#0,_a10#0,_a11#0,_a12#0,_a13#0,_a14#0,a15#0,a16#0,a17#0,a18#0,a19#0,a20#0 | encoded_tuple_buffer%3#0 arc4.Tuple((a15, a16, a17, a18, a19, a20)) typed_abi_call/logger.py:99 + // virtual: load encoded_tuple_buffer%3#0 from l-stack (no copy) (𝕡) _a1#0,_a2#0,_a3#0,_a4#0,_a5#0,_a6#0,_a7#0,_a8#0,_a9#0,_a10#0,_a11#0,_a12#0,_a13#0,_a14#0,a15#0,a16#0,a17#0,a18#0,a19#0,a20#0 | encoded_tuple_buffer%3#0 arc4.Tuple((a15, a16, a17, a18, a19, a20)) typed_abi_call/logger.py:99 + frame_dig -3 // load a18#0 from parameters (𝕡) _a1#0,_a2#0,_a3#0,_a4#0,_a5#0,_a6#0,_a7#0,_a8#0,_a9#0,_a10#0,_a11#0,_a12#0,_a13#0,_a14#0,a15#0,a16#0,a17#0,a18#0,a19#0,a20#0 | encoded_tuple_buffer%3#0,a18#0 arc4.Tuple((a15, a16, a17, a18, a19, a20)) typed_abi_call/logger.py:99 + concat // (𝕡) _a1#0,_a2#0,_a3#0,_a4#0,_a5#0,_a6#0,_a7#0,_a8#0,_a9#0,_a10#0,_a11#0,_a12#0,_a13#0,_a14#0,a15#0,a16#0,a17#0,a18#0,a19#0,a20#0 | {concat} arc4.Tuple((a15, a16, a17, a18, a19, a20)) typed_abi_call/logger.py:99 + // virtual: store encoded_tuple_buffer%4#0 to l-stack (no copy) (𝕡) _a1#0,_a2#0,_a3#0,_a4#0,_a5#0,_a6#0,_a7#0,_a8#0,_a9#0,_a10#0,_a11#0,_a12#0,_a13#0,_a14#0,a15#0,a16#0,a17#0,a18#0,a19#0,a20#0 | encoded_tuple_buffer%4#0 arc4.Tuple((a15, a16, a17, a18, a19, a20)) typed_abi_call/logger.py:99 + // virtual: load encoded_tuple_buffer%4#0 from l-stack (no copy) (𝕡) _a1#0,_a2#0,_a3#0,_a4#0,_a5#0,_a6#0,_a7#0,_a8#0,_a9#0,_a10#0,_a11#0,_a12#0,_a13#0,_a14#0,a15#0,a16#0,a17#0,a18#0,a19#0,a20#0 | encoded_tuple_buffer%4#0 arc4.Tuple((a15, a16, a17, a18, a19, a20)) typed_abi_call/logger.py:99 + frame_dig -2 // load a19#0 from parameters (𝕡) _a1#0,_a2#0,_a3#0,_a4#0,_a5#0,_a6#0,_a7#0,_a8#0,_a9#0,_a10#0,_a11#0,_a12#0,_a13#0,_a14#0,a15#0,a16#0,a17#0,a18#0,a19#0,a20#0 | encoded_tuple_buffer%4#0,a19#0 arc4.Tuple((a15, a16, a17, a18, a19, a20)) typed_abi_call/logger.py:99 + concat // (𝕡) _a1#0,_a2#0,_a3#0,_a4#0,_a5#0,_a6#0,_a7#0,_a8#0,_a9#0,_a10#0,_a11#0,_a12#0,_a13#0,_a14#0,a15#0,a16#0,a17#0,a18#0,a19#0,a20#0 | {concat} arc4.Tuple((a15, a16, a17, a18, a19, a20)) typed_abi_call/logger.py:99 + // virtual: store encoded_tuple_buffer%5#0 to l-stack (no copy) (𝕡) _a1#0,_a2#0,_a3#0,_a4#0,_a5#0,_a6#0,_a7#0,_a8#0,_a9#0,_a10#0,_a11#0,_a12#0,_a13#0,_a14#0,a15#0,a16#0,a17#0,a18#0,a19#0,a20#0 | encoded_tuple_buffer%5#0 arc4.Tuple((a15, a16, a17, a18, a19, a20)) typed_abi_call/logger.py:99 + // virtual: load encoded_tuple_buffer%5#0 from l-stack (no copy) (𝕡) _a1#0,_a2#0,_a3#0,_a4#0,_a5#0,_a6#0,_a7#0,_a8#0,_a9#0,_a10#0,_a11#0,_a12#0,_a13#0,_a14#0,a15#0,a16#0,a17#0,a18#0,a19#0,a20#0 | encoded_tuple_buffer%5#0 arc4.Tuple((a15, a16, a17, a18, a19, a20)) typed_abi_call/logger.py:99 + frame_dig -1 // load a20#0 from parameters (𝕡) _a1#0,_a2#0,_a3#0,_a4#0,_a5#0,_a6#0,_a7#0,_a8#0,_a9#0,_a10#0,_a11#0,_a12#0,_a13#0,_a14#0,a15#0,a16#0,a17#0,a18#0,a19#0,a20#0 | encoded_tuple_buffer%5#0,a20#0 arc4.Tuple((a15, a16, a17, a18, a19, a20)) typed_abi_call/logger.py:99 + concat // (𝕡) _a1#0,_a2#0,_a3#0,_a4#0,_a5#0,_a6#0,_a7#0,_a8#0,_a9#0,_a10#0,_a11#0,_a12#0,_a13#0,_a14#0,a15#0,a16#0,a17#0,a18#0,a19#0,a20#0 | {concat} arc4.Tuple((a15, a16, a17, a18, a19, a20)) typed_abi_call/logger.py:99 + // virtual: store last_arg#0 to l-stack (no copy) (𝕡) _a1#0,_a2#0,_a3#0,_a4#0,_a5#0,_a6#0,_a7#0,_a8#0,_a9#0,_a10#0,_a11#0,_a12#0,_a13#0,_a14#0,a15#0,a16#0,a17#0,a18#0,a19#0,a20#0 | last_arg#0 arc4.Tuple((a15, a16, a17, a18, a19, a20)) typed_abi_call/logger.py:99 + txna ApplicationArgs 15 // (𝕡) _a1#0,_a2#0,_a3#0,_a4#0,_a5#0,_a6#0,_a7#0,_a8#0,_a9#0,_a10#0,_a11#0,_a12#0,_a13#0,_a14#0,a15#0,a16#0,a17#0,a18#0,a19#0,a20#0 | last_arg#0,{txna} Txn.application_args(15) typed_abi_call/logger.py:100 + // virtual: store tmp%0#0 to l-stack (no copy) (𝕡) _a1#0,_a2#0,_a3#0,_a4#0,_a5#0,_a6#0,_a7#0,_a8#0,_a9#0,_a10#0,_a11#0,_a12#0,_a13#0,_a14#0,a15#0,a16#0,a17#0,a18#0,a19#0,a20#0 | last_arg#0,tmp%0#0 Txn.application_args(15) typed_abi_call/logger.py:100 + // virtual: load tmp%0#0 from l-stack (no copy) (𝕡) _a1#0,_a2#0,_a3#0,_a4#0,_a5#0,_a6#0,_a7#0,_a8#0,_a9#0,_a10#0,_a11#0,_a12#0,_a13#0,_a14#0,a15#0,a16#0,a17#0,a18#0,a19#0,a20#0 | last_arg#0,tmp%0#0 Txn.application_args(15) == last_arg.bytes typed_abi_call/logger.py:100 + dig 1 // load last_arg#0 from l-stack (copy) (𝕡) _a1#0,_a2#0,_a3#0,_a4#0,_a5#0,_a6#0,_a7#0,_a8#0,_a9#0,_a10#0,_a11#0,_a12#0,_a13#0,_a14#0,a15#0,a16#0,a17#0,a18#0,a19#0,a20#0 | last_arg#0,tmp%0#0,last_arg#0 Txn.application_args(15) == last_arg.bytes typed_abi_call/logger.py:100 + == // (𝕡) _a1#0,_a2#0,_a3#0,_a4#0,_a5#0,_a6#0,_a7#0,_a8#0,_a9#0,_a10#0,_a11#0,_a12#0,_a13#0,_a14#0,a15#0,a16#0,a17#0,a18#0,a19#0,a20#0 | last_arg#0,{==} Txn.application_args(15) == last_arg.bytes typed_abi_call/logger.py:100 + // virtual: store tmp%1#0 to l-stack (no copy) (𝕡) _a1#0,_a2#0,_a3#0,_a4#0,_a5#0,_a6#0,_a7#0,_a8#0,_a9#0,_a10#0,_a11#0,_a12#0,_a13#0,_a14#0,a15#0,a16#0,a17#0,a18#0,a19#0,a20#0 | last_arg#0,tmp%1#0 Txn.application_args(15) == last_arg.bytes typed_abi_call/logger.py:100 + // virtual: load tmp%1#0 from l-stack (no copy) (𝕡) _a1#0,_a2#0,_a3#0,_a4#0,_a5#0,_a6#0,_a7#0,_a8#0,_a9#0,_a10#0,_a11#0,_a12#0,_a13#0,_a14#0,a15#0,a16#0,a17#0,a18#0,a19#0,a20#0 | last_arg#0,tmp%1#0 assert Txn.application_args(15) == last_arg.bytes typed_abi_call/logger.py:100 + assert // (𝕡) _a1#0,_a2#0,_a3#0,_a4#0,_a5#0,_a6#0,_a7#0,_a8#0,_a9#0,_a10#0,_a11#0,_a12#0,_a13#0,_a14#0,a15#0,a16#0,a17#0,a18#0,a19#0,a20#0 | last_arg#0 assert Txn.application_args(15) == last_arg.bytes typed_abi_call/logger.py:100 + dup // load last_arg#0 from l-stack (copy) (𝕡) _a1#0,_a2#0,_a3#0,_a4#0,_a5#0,_a6#0,_a7#0,_a8#0,_a9#0,_a10#0,_a11#0,_a12#0,_a13#0,_a14#0,a15#0,a16#0,a17#0,a18#0,a19#0,a20#0 | last_arg#0,last_arg#0 arc4.DynamicBytes(last_arg.bytes) typed_abi_call/logger.py:101 + len // (𝕡) _a1#0,_a2#0,_a3#0,_a4#0,_a5#0,_a6#0,_a7#0,_a8#0,_a9#0,_a10#0,_a11#0,_a12#0,_a13#0,_a14#0,a15#0,a16#0,a17#0,a18#0,a19#0,a20#0 | last_arg#0,{len} arc4.DynamicBytes(last_arg.bytes) typed_abi_call/logger.py:101 + // virtual: store length%0#0 to l-stack (no copy) (𝕡) _a1#0,_a2#0,_a3#0,_a4#0,_a5#0,_a6#0,_a7#0,_a8#0,_a9#0,_a10#0,_a11#0,_a12#0,_a13#0,_a14#0,a15#0,a16#0,a17#0,a18#0,a19#0,a20#0 | last_arg#0,length%0#0 arc4.DynamicBytes(last_arg.bytes) typed_abi_call/logger.py:101 + // virtual: load length%0#0 from l-stack (no copy) (𝕡) _a1#0,_a2#0,_a3#0,_a4#0,_a5#0,_a6#0,_a7#0,_a8#0,_a9#0,_a10#0,_a11#0,_a12#0,_a13#0,_a14#0,a15#0,a16#0,a17#0,a18#0,a19#0,a20#0 | last_arg#0,length%0#0 arc4.DynamicBytes(last_arg.bytes) typed_abi_call/logger.py:101 + itob // (𝕡) _a1#0,_a2#0,_a3#0,_a4#0,_a5#0,_a6#0,_a7#0,_a8#0,_a9#0,_a10#0,_a11#0,_a12#0,_a13#0,_a14#0,a15#0,a16#0,a17#0,a18#0,a19#0,a20#0 | last_arg#0,{itob} arc4.DynamicBytes(last_arg.bytes) typed_abi_call/logger.py:101 + // virtual: store as_bytes%0#0 to l-stack (no copy) (𝕡) _a1#0,_a2#0,_a3#0,_a4#0,_a5#0,_a6#0,_a7#0,_a8#0,_a9#0,_a10#0,_a11#0,_a12#0,_a13#0,_a14#0,a15#0,a16#0,a17#0,a18#0,a19#0,a20#0 | last_arg#0,as_bytes%0#0 arc4.DynamicBytes(last_arg.bytes) typed_abi_call/logger.py:101 + // virtual: load as_bytes%0#0 from l-stack (no copy) (𝕡) _a1#0,_a2#0,_a3#0,_a4#0,_a5#0,_a6#0,_a7#0,_a8#0,_a9#0,_a10#0,_a11#0,_a12#0,_a13#0,_a14#0,a15#0,a16#0,a17#0,a18#0,a19#0,a20#0 | last_arg#0,as_bytes%0#0 arc4.DynamicBytes(last_arg.bytes) typed_abi_call/logger.py:101 + extract 6 2 // (𝕡) _a1#0,_a2#0,_a3#0,_a4#0,_a5#0,_a6#0,_a7#0,_a8#0,_a9#0,_a10#0,_a11#0,_a12#0,_a13#0,_a14#0,a15#0,a16#0,a17#0,a18#0,a19#0,a20#0 | last_arg#0,{extract} arc4.DynamicBytes(last_arg.bytes) typed_abi_call/logger.py:101 + // virtual: store length_uint16%0#0 to l-stack (no copy) (𝕡) _a1#0,_a2#0,_a3#0,_a4#0,_a5#0,_a6#0,_a7#0,_a8#0,_a9#0,_a10#0,_a11#0,_a12#0,_a13#0,_a14#0,a15#0,a16#0,a17#0,a18#0,a19#0,a20#0 | last_arg#0,length_uint16%0#0 arc4.DynamicBytes(last_arg.bytes) typed_abi_call/logger.py:101 + // virtual: load length_uint16%0#0 from l-stack (no copy) (𝕡) _a1#0,_a2#0,_a3#0,_a4#0,_a5#0,_a6#0,_a7#0,_a8#0,_a9#0,_a10#0,_a11#0,_a12#0,_a13#0,_a14#0,a15#0,a16#0,a17#0,a18#0,a19#0,a20#0 | last_arg#0,length_uint16%0#0 arc4.DynamicBytes(last_arg.bytes) typed_abi_call/logger.py:101 + uncover 1 // load last_arg#0 from l-stack (no copy) (𝕡) _a1#0,_a2#0,_a3#0,_a4#0,_a5#0,_a6#0,_a7#0,_a8#0,_a9#0,_a10#0,_a11#0,_a12#0,_a13#0,_a14#0,a15#0,a16#0,a17#0,a18#0,a19#0,a20#0 | length_uint16%0#0,last_arg#0 arc4.DynamicBytes(last_arg.bytes) typed_abi_call/logger.py:101 + concat // (𝕡) _a1#0,_a2#0,_a3#0,_a4#0,_a5#0,_a6#0,_a7#0,_a8#0,_a9#0,_a10#0,_a11#0,_a12#0,_a13#0,_a14#0,a15#0,a16#0,a17#0,a18#0,a19#0,a20#0 | {concat} arc4.DynamicBytes(last_arg.bytes) typed_abi_call/logger.py:101 + // virtual: store encoded_value%0#0 to l-stack (no copy) (𝕡) _a1#0,_a2#0,_a3#0,_a4#0,_a5#0,_a6#0,_a7#0,_a8#0,_a9#0,_a10#0,_a11#0,_a12#0,_a13#0,_a14#0,a15#0,a16#0,a17#0,a18#0,a19#0,a20#0 | encoded_value%0#0 arc4.DynamicBytes(last_arg.bytes) typed_abi_call/logger.py:101 + // virtual: load encoded_value%0#0 from l-stack (no copy) (𝕡) _a1#0,_a2#0,_a3#0,_a4#0,_a5#0,_a6#0,_a7#0,_a8#0,_a9#0,_a10#0,_a11#0,_a12#0,_a13#0,_a14#0,a15#0,a16#0,a17#0,a18#0,a19#0,a20#0 | encoded_value%0#0 return arc4.DynamicBytes(last_arg.bytes) typed_abi_call/logger.py:101 + retsub // encoded_value%0#0 return arc4.DynamicBytes(last_arg.bytes) typed_abi_call/logger.py:101 diff --git a/test_cases/typed_abi_call/out/Logger.approval.teal b/test_cases/typed_abi_call/out/Logger.approval.teal index 2bbaf6a9bd..0eab73c0c0 100644 --- a/test_cases/typed_abi_call/out/Logger.approval.teal +++ b/test_cases/typed_abi_call/out/Logger.approval.teal @@ -4,8 +4,9 @@ test_cases.typed_abi_call.logger.Logger.approval_program: // typed_abi_call/logger.py:20 // class Logger(ARC4Contract): txn NumAppArgs - bz main_bare_routing@17 + bz main_bare_routing@18 method "echo(string)string" + method "no_args()uint64" method "log(uint64)void" method "log(uint512)void" method "log(string)void" @@ -19,7 +20,7 @@ test_cases.typed_abi_call.logger.Logger.approval_program: method "echo_native_tuple(string,byte[],uint64,uint512)(string,byte[],uint64,uint512)" method "return_args_after_14th(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint8,uint8,uint8,uint8,(uint8,uint8,uint8,uint8),uint8)byte[]" txna ApplicationArgs 0 - match main_echo_route@2 main_log_route@3 main_log_route@4 main_log_route@5 main_log_route@6 main_log_route@7 main_log_route@8 main_echo_native_string_route@9 main_echo_native_bytes_route@10 main_echo_native_uint64_route@11 main_echo_native_biguint_route@12 main_echo_native_tuple_route@13 main_return_args_after_14th_route@14 + match main_echo_route@2 main_no_args_route@3 main_log_route@4 main_log_route@5 main_log_route@6 main_log_route@7 main_log_route@8 main_log_route@9 main_echo_native_string_route@10 main_echo_native_bytes_route@11 main_echo_native_uint64_route@12 main_echo_native_biguint_route@13 main_echo_native_tuple_route@14 main_return_args_after_14th_route@15 err // reject transaction main_echo_route@2: @@ -43,20 +44,20 @@ main_echo_route@2: int 1 return -main_log_route@3: +main_no_args_route@3: // typed_abi_call/logger.py:25 - // @arc4.abimethod(name=LOG_METHOD_NAME) + // @arc4.abimethod txn OnCompletion ! assert // OnCompletion is NoOp txn ApplicationID assert // is not creating - // typed_abi_call/logger.py:20 - // class Logger(ARC4Contract): - txna ApplicationArgs 1 - // typed_abi_call/logger.py:25 - // @arc4.abimethod(name=LOG_METHOD_NAME) - callsub log_uint64 + callsub no_args + itob + byte 0x151f7c75 + swap + concat + log int 1 return @@ -73,7 +74,7 @@ main_log_route@4: txna ApplicationArgs 1 // typed_abi_call/logger.py:29 // @arc4.abimethod(name=LOG_METHOD_NAME) - callsub log_uint512 + callsub log_uint64 int 1 return @@ -90,7 +91,7 @@ main_log_route@5: txna ApplicationArgs 1 // typed_abi_call/logger.py:33 // @arc4.abimethod(name=LOG_METHOD_NAME) - callsub log_string + callsub log_uint512 int 1 return @@ -107,7 +108,7 @@ main_log_route@6: txna ApplicationArgs 1 // typed_abi_call/logger.py:37 // @arc4.abimethod(name=LOG_METHOD_NAME) - callsub log_bool + callsub log_string int 1 return @@ -124,7 +125,7 @@ main_log_route@7: txna ApplicationArgs 1 // typed_abi_call/logger.py:41 // @arc4.abimethod(name=LOG_METHOD_NAME) - callsub log_bytes + callsub log_bool int 1 return @@ -139,6 +140,23 @@ main_log_route@8: // typed_abi_call/logger.py:20 // class Logger(ARC4Contract): txna ApplicationArgs 1 + // typed_abi_call/logger.py:45 + // @arc4.abimethod(name=LOG_METHOD_NAME) + callsub log_bytes + int 1 + return + +main_log_route@9: + // typed_abi_call/logger.py:49 + // @arc4.abimethod(name=LOG_METHOD_NAME) + txn OnCompletion + ! + assert // OnCompletion is NoOp + txn ApplicationID + assert // is not creating + // typed_abi_call/logger.py:20 + // class Logger(ARC4Contract): + txna ApplicationArgs 1 btoi txnas Assets txna ApplicationArgs 2 @@ -147,14 +165,14 @@ main_log_route@8: txna ApplicationArgs 3 btoi txnas Applications - // typed_abi_call/logger.py:45 + // typed_abi_call/logger.py:49 // @arc4.abimethod(name=LOG_METHOD_NAME) callsub log_asset_account_app int 1 return -main_echo_native_string_route@9: - // typed_abi_call/logger.py:49 +main_echo_native_string_route@10: + // typed_abi_call/logger.py:53 // @arc4.abimethod txn OnCompletion ! @@ -165,7 +183,7 @@ main_echo_native_string_route@9: // class Logger(ARC4Contract): txna ApplicationArgs 1 extract 2 0 - // typed_abi_call/logger.py:49 + // typed_abi_call/logger.py:53 // @arc4.abimethod callsub echo_native_string dup @@ -181,8 +199,8 @@ main_echo_native_string_route@9: int 1 return -main_echo_native_bytes_route@10: - // typed_abi_call/logger.py:53 +main_echo_native_bytes_route@11: + // typed_abi_call/logger.py:57 // @arc4.abimethod txn OnCompletion ! @@ -193,7 +211,7 @@ main_echo_native_bytes_route@10: // class Logger(ARC4Contract): txna ApplicationArgs 1 extract 2 0 - // typed_abi_call/logger.py:53 + // typed_abi_call/logger.py:57 // @arc4.abimethod callsub echo_native_bytes dup @@ -209,8 +227,8 @@ main_echo_native_bytes_route@10: int 1 return -main_echo_native_uint64_route@11: - // typed_abi_call/logger.py:57 +main_echo_native_uint64_route@12: + // typed_abi_call/logger.py:61 // @arc4.abimethod txn OnCompletion ! @@ -221,7 +239,7 @@ main_echo_native_uint64_route@11: // class Logger(ARC4Contract): txna ApplicationArgs 1 btoi - // typed_abi_call/logger.py:57 + // typed_abi_call/logger.py:61 // @arc4.abimethod callsub echo_native_uint64 itob @@ -232,8 +250,8 @@ main_echo_native_uint64_route@11: int 1 return -main_echo_native_biguint_route@12: - // typed_abi_call/logger.py:61 +main_echo_native_biguint_route@13: + // typed_abi_call/logger.py:65 // @arc4.abimethod txn OnCompletion ! @@ -243,7 +261,7 @@ main_echo_native_biguint_route@12: // typed_abi_call/logger.py:20 // class Logger(ARC4Contract): txna ApplicationArgs 1 - // typed_abi_call/logger.py:61 + // typed_abi_call/logger.py:65 // @arc4.abimethod callsub echo_native_biguint dup @@ -261,8 +279,8 @@ main_echo_native_biguint_route@12: int 1 return -main_echo_native_tuple_route@13: - // typed_abi_call/logger.py:65 +main_echo_native_tuple_route@14: + // typed_abi_call/logger.py:69 // @arc4.abimethod txn OnCompletion ! @@ -278,7 +296,7 @@ main_echo_native_tuple_route@13: txna ApplicationArgs 3 btoi txna ApplicationArgs 4 - // typed_abi_call/logger.py:65 + // typed_abi_call/logger.py:69 // @arc4.abimethod callsub echo_native_tuple cover 3 @@ -332,8 +350,8 @@ main_echo_native_tuple_route@13: int 1 return -main_return_args_after_14th_route@14: - // typed_abi_call/logger.py:71 +main_return_args_after_14th_route@15: + // typed_abi_call/logger.py:75 // @arc4.abimethod txn OnCompletion ! @@ -368,7 +386,7 @@ main_return_args_after_14th_route@14: extract 4 4 // on error: Index access is out of bounds txna ApplicationArgs 15 extract 8 1 // on error: Index access is out of bounds - // typed_abi_call/logger.py:71 + // typed_abi_call/logger.py:75 // @arc4.abimethod callsub return_args_after_14th byte 0x151f7c75 @@ -378,7 +396,7 @@ main_return_args_after_14th_route@14: int 1 return -main_bare_routing@17: +main_bare_routing@18: // typed_abi_call/logger.py:20 // class Logger(ARC4Contract): txn OnCompletion @@ -413,13 +431,25 @@ echo: retsub +// test_cases.typed_abi_call.logger.Logger.no_args() -> uint64: +no_args: + // typed_abi_call/logger.py:25-26 + // @arc4.abimethod + // def no_args(self) -> UInt64: + proto 0 1 + // typed_abi_call/logger.py:27 + // return UInt64(42) + int 42 + retsub + + // test_cases.typed_abi_call.logger.Logger.log_uint64(value: bytes) -> void: log_uint64: - // typed_abi_call/logger.py:25-26 + // typed_abi_call/logger.py:29-30 // @arc4.abimethod(name=LOG_METHOD_NAME) // def log_uint64(self, value: arc4.UInt64) -> None: proto 1 0 - // typed_abi_call/logger.py:27 + // typed_abi_call/logger.py:31 // log(value) frame_dig -1 log @@ -428,11 +458,11 @@ log_uint64: // test_cases.typed_abi_call.logger.Logger.log_uint512(value: bytes) -> void: log_uint512: - // typed_abi_call/logger.py:29-30 + // typed_abi_call/logger.py:33-34 // @arc4.abimethod(name=LOG_METHOD_NAME) // def log_uint512(self, value: arc4.UInt512) -> None: proto 1 0 - // typed_abi_call/logger.py:31 + // typed_abi_call/logger.py:35 // log(value) frame_dig -1 log @@ -441,11 +471,11 @@ log_uint512: // test_cases.typed_abi_call.logger.Logger.log_string(value: bytes) -> void: log_string: - // typed_abi_call/logger.py:33-34 + // typed_abi_call/logger.py:37-38 // @arc4.abimethod(name=LOG_METHOD_NAME) // def log_string(self, value: arc4.String) -> None: proto 1 0 - // typed_abi_call/logger.py:35 + // typed_abi_call/logger.py:39 // log(value.native) # decode to remove header frame_dig -1 extract 2 0 @@ -455,11 +485,11 @@ log_string: // test_cases.typed_abi_call.logger.Logger.log_bool(value: bytes) -> void: log_bool: - // typed_abi_call/logger.py:37-38 + // typed_abi_call/logger.py:41-42 // @arc4.abimethod(name=LOG_METHOD_NAME) // def log_bool(self, value: arc4.Bool) -> None: proto 1 0 - // typed_abi_call/logger.py:39 + // typed_abi_call/logger.py:43 // log(Bytes(b"True") if value.native else Bytes(b"False")) frame_dig -1 int 0 @@ -474,11 +504,11 @@ log_bool: // test_cases.typed_abi_call.logger.Logger.log_bytes(value: bytes) -> void: log_bytes: - // typed_abi_call/logger.py:41-42 + // typed_abi_call/logger.py:45-46 // @arc4.abimethod(name=LOG_METHOD_NAME) // def log_bytes(self, value: arc4.DynamicBytes) -> None: proto 1 0 - // typed_abi_call/logger.py:43 + // typed_abi_call/logger.py:47 // log(value.native) frame_dig -1 extract 2 0 @@ -488,11 +518,11 @@ log_bytes: // test_cases.typed_abi_call.logger.Logger.log_asset_account_app(asset: uint64, account: bytes, app: uint64) -> void: log_asset_account_app: - // typed_abi_call/logger.py:45-46 + // typed_abi_call/logger.py:49-50 // @arc4.abimethod(name=LOG_METHOD_NAME) // def log_asset_account_app(self, asset: Asset, account: Account, app: Application) -> None: proto 3 0 - // typed_abi_call/logger.py:47 + // typed_abi_call/logger.py:51 // log(asset.name, account.bytes, app.address) frame_dig -3 asset_params_get AssetName @@ -509,11 +539,11 @@ log_asset_account_app: // test_cases.typed_abi_call.logger.Logger.echo_native_string(value: bytes) -> bytes: echo_native_string: - // typed_abi_call/logger.py:49-50 + // typed_abi_call/logger.py:53-54 // @arc4.abimethod // def echo_native_string(self, value: String) -> String: proto 1 1 - // typed_abi_call/logger.py:51 + // typed_abi_call/logger.py:55 // return "echo: " + value byte "echo: " frame_dig -1 @@ -523,11 +553,11 @@ echo_native_string: // test_cases.typed_abi_call.logger.Logger.echo_native_bytes(value: bytes) -> bytes: echo_native_bytes: - // typed_abi_call/logger.py:53-54 + // typed_abi_call/logger.py:57-58 // @arc4.abimethod // def echo_native_bytes(self, value: Bytes) -> Bytes: proto 1 1 - // typed_abi_call/logger.py:55 + // typed_abi_call/logger.py:59 // return b"echo: " + value byte 0x6563686f3a20 frame_dig -1 @@ -537,11 +567,11 @@ echo_native_bytes: // test_cases.typed_abi_call.logger.Logger.echo_native_uint64(value: uint64) -> uint64: echo_native_uint64: - // typed_abi_call/logger.py:57-58 + // typed_abi_call/logger.py:61-62 // @arc4.abimethod // def echo_native_uint64(self, value: UInt64) -> UInt64: proto 1 1 - // typed_abi_call/logger.py:59 + // typed_abi_call/logger.py:63 // return value + 1 frame_dig -1 int 1 @@ -551,11 +581,11 @@ echo_native_uint64: // test_cases.typed_abi_call.logger.Logger.echo_native_biguint(value: bytes) -> bytes: echo_native_biguint: - // typed_abi_call/logger.py:61-62 + // typed_abi_call/logger.py:65-66 // @arc4.abimethod // def echo_native_biguint(self, value: BigUInt) -> BigUInt: proto 1 1 - // typed_abi_call/logger.py:63 + // typed_abi_call/logger.py:67 // return value + 1 frame_dig -1 byte 0x01 @@ -565,13 +595,13 @@ echo_native_biguint: // test_cases.typed_abi_call.logger.Logger.echo_native_tuple(s: bytes, b: bytes, u: uint64, bu: bytes) -> bytes, bytes, uint64, bytes: echo_native_tuple: - // typed_abi_call/logger.py:65-68 + // typed_abi_call/logger.py:69-72 // @arc4.abimethod // def echo_native_tuple( // self, s: String, b: Bytes, u: UInt64, bu: BigUInt // ) -> tuple[String, Bytes, UInt64, BigUInt]: proto 4 4 - // typed_abi_call/logger.py:69 + // typed_abi_call/logger.py:73 // return "echo: " + s, b"echo: " + b, u + 1, bu + 1 byte "echo: " frame_dig -4 @@ -590,7 +620,7 @@ echo_native_tuple: // test_cases.typed_abi_call.logger.Logger.return_args_after_14th(_a1: bytes, _a2: bytes, _a3: bytes, _a4: bytes, _a5: bytes, _a6: bytes, _a7: bytes, _a8: bytes, _a9: bytes, _a10: bytes, _a11: bytes, _a12: bytes, _a13: bytes, _a14: bytes, a15: bytes, a16: bytes, a17: bytes, a18: bytes, a19: bytes, a20: bytes) -> bytes: return_args_after_14th: - // typed_abi_call/logger.py:71-94 + // typed_abi_call/logger.py:75-98 // @arc4.abimethod // def return_args_after_14th( // self, @@ -616,7 +646,7 @@ return_args_after_14th: // a20: arc4.UInt8, // ) -> arc4.DynamicBytes: proto 20 1 - // typed_abi_call/logger.py:95 + // typed_abi_call/logger.py:99 // last_arg = arc4.Tuple((a15, a16, a17, a18, a19, a20)) frame_dig -6 frame_dig -5 @@ -629,13 +659,13 @@ return_args_after_14th: concat frame_dig -1 concat - // typed_abi_call/logger.py:96 + // typed_abi_call/logger.py:100 // assert Txn.application_args(15) == last_arg.bytes txna ApplicationArgs 15 dig 1 == assert - // typed_abi_call/logger.py:97 + // typed_abi_call/logger.py:101 // return arc4.DynamicBytes(last_arg.bytes) dup len diff --git a/test_cases/typed_abi_call/out/Logger.arc32.json b/test_cases/typed_abi_call/out/Logger.arc32.json index baddff7364..cfd690121e 100644 --- a/test_cases/typed_abi_call/out/Logger.arc32.json +++ b/test_cases/typed_abi_call/out/Logger.arc32.json @@ -5,6 +5,11 @@ "no_op": "CALL" } }, + "no_args()uint64": { + "call_config": { + "no_op": "CALL" + } + }, "log(uint64)void": { "call_config": { "no_op": "CALL" @@ -67,7 +72,7 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0X2Nhc2VzLnR5cGVkX2FiaV9jYWxsLmxvZ2dlci5Mb2dnZXIuYXBwcm92YWxfcHJvZ3JhbToKICAgIC8vIHR5cGVkX2FiaV9jYWxsL2xvZ2dlci5weToyMAogICAgLy8gY2xhc3MgTG9nZ2VyKEFSQzRDb250cmFjdCk6CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdAMTcKICAgIG1ldGhvZCAiZWNobyhzdHJpbmcpc3RyaW5nIgogICAgbWV0aG9kICJsb2codWludDY0KXZvaWQiCiAgICBtZXRob2QgImxvZyh1aW50NTEyKXZvaWQiCiAgICBtZXRob2QgImxvZyhzdHJpbmcpdm9pZCIKICAgIG1ldGhvZCAibG9nKGJvb2wpdm9pZCIKICAgIG1ldGhvZCAibG9nKGJ5dGVbXSl2b2lkIgogICAgbWV0aG9kICJsb2coYXNzZXQsYWNjb3VudCxhcHBsaWNhdGlvbil2b2lkIgogICAgbWV0aG9kICJlY2hvX25hdGl2ZV9zdHJpbmcoc3RyaW5nKXN0cmluZyIKICAgIG1ldGhvZCAiZWNob19uYXRpdmVfYnl0ZXMoYnl0ZVtdKWJ5dGVbXSIKICAgIG1ldGhvZCAiZWNob19uYXRpdmVfdWludDY0KHVpbnQ2NCl1aW50NjQiCiAgICBtZXRob2QgImVjaG9fbmF0aXZlX2JpZ3VpbnQodWludDUxMil1aW50NTEyIgogICAgbWV0aG9kICJlY2hvX25hdGl2ZV90dXBsZShzdHJpbmcsYnl0ZVtdLHVpbnQ2NCx1aW50NTEyKShzdHJpbmcsYnl0ZVtdLHVpbnQ2NCx1aW50NTEyKSIKICAgIG1ldGhvZCAicmV0dXJuX2FyZ3NfYWZ0ZXJfMTR0aCh1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ4LHVpbnQ4LHVpbnQ4LHVpbnQ4LCh1aW50OCx1aW50OCx1aW50OCx1aW50OCksdWludDgpYnl0ZVtdIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl9lY2hvX3JvdXRlQDIgbWFpbl9sb2dfcm91dGVAMyBtYWluX2xvZ19yb3V0ZUA0IG1haW5fbG9nX3JvdXRlQDUgbWFpbl9sb2dfcm91dGVANiBtYWluX2xvZ19yb3V0ZUA3IG1haW5fbG9nX3JvdXRlQDggbWFpbl9lY2hvX25hdGl2ZV9zdHJpbmdfcm91dGVAOSBtYWluX2VjaG9fbmF0aXZlX2J5dGVzX3JvdXRlQDEwIG1haW5fZWNob19uYXRpdmVfdWludDY0X3JvdXRlQDExIG1haW5fZWNob19uYXRpdmVfYmlndWludF9yb3V0ZUAxMiBtYWluX2VjaG9fbmF0aXZlX3R1cGxlX3JvdXRlQDEzIG1haW5fcmV0dXJuX2FyZ3NfYWZ0ZXJfMTR0aF9yb3V0ZUAxNAogICAgZXJyIC8vIHJlamVjdCB0cmFuc2FjdGlvbgoKbWFpbl9lY2hvX3JvdXRlQDI6CiAgICAvLyB0eXBlZF9hYmlfY2FsbC9sb2dnZXIucHk6MjEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgLy8gdHlwZWRfYWJpX2NhbGwvbG9nZ2VyLnB5OjIwCiAgICAvLyBjbGFzcyBMb2dnZXIoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIC8vIHR5cGVkX2FiaV9jYWxsL2xvZ2dlci5weToyMQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBjYWxsc3ViIGVjaG8KICAgIGJ5dGUgMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludCAxCiAgICByZXR1cm4KCm1haW5fbG9nX3JvdXRlQDM6CiAgICAvLyB0eXBlZF9hYmlfY2FsbC9sb2dnZXIucHk6MjUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChuYW1lPUxPR19NRVRIT0RfTkFNRSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBpcyBub3QgY3JlYXRpbmcKICAgIC8vIHR5cGVkX2FiaV9jYWxsL2xvZ2dlci5weToyMAogICAgLy8gY2xhc3MgTG9nZ2VyKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyB0eXBlZF9hYmlfY2FsbC9sb2dnZXIucHk6MjUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChuYW1lPUxPR19NRVRIT0RfTkFNRSkKICAgIGNhbGxzdWIgbG9nX3VpbnQ2NAogICAgaW50IDEKICAgIHJldHVybgoKbWFpbl9sb2dfcm91dGVANDoKICAgIC8vIHR5cGVkX2FiaV9jYWxsL2xvZ2dlci5weToyOQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKG5hbWU9TE9HX01FVEhPRF9OQU1FKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgLy8gdHlwZWRfYWJpX2NhbGwvbG9nZ2VyLnB5OjIwCiAgICAvLyBjbGFzcyBMb2dnZXIoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIC8vIHR5cGVkX2FiaV9jYWxsL2xvZ2dlci5weToyOQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKG5hbWU9TE9HX01FVEhPRF9OQU1FKQogICAgY2FsbHN1YiBsb2dfdWludDUxMgogICAgaW50IDEKICAgIHJldHVybgoKbWFpbl9sb2dfcm91dGVANToKICAgIC8vIHR5cGVkX2FiaV9jYWxsL2xvZ2dlci5weTozMwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKG5hbWU9TE9HX01FVEhPRF9OQU1FKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgLy8gdHlwZWRfYWJpX2NhbGwvbG9nZ2VyLnB5OjIwCiAgICAvLyBjbGFzcyBMb2dnZXIoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIC8vIHR5cGVkX2FiaV9jYWxsL2xvZ2dlci5weTozMwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKG5hbWU9TE9HX01FVEhPRF9OQU1FKQogICAgY2FsbHN1YiBsb2dfc3RyaW5nCiAgICBpbnQgMQogICAgcmV0dXJuCgptYWluX2xvZ19yb3V0ZUA2OgogICAgLy8gdHlwZWRfYWJpX2NhbGwvbG9nZ2VyLnB5OjM3CiAgICAvLyBAYXJjNC5hYmltZXRob2QobmFtZT1MT0dfTUVUSE9EX05BTUUpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gaXMgbm90IGNyZWF0aW5nCiAgICAvLyB0eXBlZF9hYmlfY2FsbC9sb2dnZXIucHk6MjAKICAgIC8vIGNsYXNzIExvZ2dlcihBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgLy8gdHlwZWRfYWJpX2NhbGwvbG9nZ2VyLnB5OjM3CiAgICAvLyBAYXJjNC5hYmltZXRob2QobmFtZT1MT0dfTUVUSE9EX05BTUUpCiAgICBjYWxsc3ViIGxvZ19ib29sCiAgICBpbnQgMQogICAgcmV0dXJuCgptYWluX2xvZ19yb3V0ZUA3OgogICAgLy8gdHlwZWRfYWJpX2NhbGwvbG9nZ2VyLnB5OjQxCiAgICAvLyBAYXJjNC5hYmltZXRob2QobmFtZT1MT0dfTUVUSE9EX05BTUUpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gaXMgbm90IGNyZWF0aW5nCiAgICAvLyB0eXBlZF9hYmlfY2FsbC9sb2dnZXIucHk6MjAKICAgIC8vIGNsYXNzIExvZ2dlcihBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgLy8gdHlwZWRfYWJpX2NhbGwvbG9nZ2VyLnB5OjQxCiAgICAvLyBAYXJjNC5hYmltZXRob2QobmFtZT1MT0dfTUVUSE9EX05BTUUpCiAgICBjYWxsc3ViIGxvZ19ieXRlcwogICAgaW50IDEKICAgIHJldHVybgoKbWFpbl9sb2dfcm91dGVAODoKICAgIC8vIHR5cGVkX2FiaV9jYWxsL2xvZ2dlci5weTo0NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKG5hbWU9TE9HX01FVEhPRF9OQU1FKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgLy8gdHlwZWRfYWJpX2NhbGwvbG9nZ2VyLnB5OjIwCiAgICAvLyBjbGFzcyBMb2dnZXIoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFzc2V0cwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGJ0b2kKICAgIHR4bmFzIEFwcGxpY2F0aW9ucwogICAgLy8gdHlwZWRfYWJpX2NhbGwvbG9nZ2VyLnB5OjQ1CiAgICAvLyBAYXJjNC5hYmltZXRob2QobmFtZT1MT0dfTUVUSE9EX05BTUUpCiAgICBjYWxsc3ViIGxvZ19hc3NldF9hY2NvdW50X2FwcAogICAgaW50IDEKICAgIHJldHVybgoKbWFpbl9lY2hvX25hdGl2ZV9zdHJpbmdfcm91dGVAOToKICAgIC8vIHR5cGVkX2FiaV9jYWxsL2xvZ2dlci5weTo0OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gaXMgbm90IGNyZWF0aW5nCiAgICAvLyB0eXBlZF9hYmlfY2FsbC9sb2dnZXIucHk6MjAKICAgIC8vIGNsYXNzIExvZ2dlcihBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIC8vIHR5cGVkX2FiaV9jYWxsL2xvZ2dlci5weTo0OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBjYWxsc3ViIGVjaG9fbmF0aXZlX3N0cmluZwogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGUgMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludCAxCiAgICByZXR1cm4KCm1haW5fZWNob19uYXRpdmVfYnl0ZXNfcm91dGVAMTA6CiAgICAvLyB0eXBlZF9hYmlfY2FsbC9sb2dnZXIucHk6NTMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgLy8gdHlwZWRfYWJpX2NhbGwvbG9nZ2VyLnB5OjIwCiAgICAvLyBjbGFzcyBMb2dnZXIoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0eXBlZF9hYmlfY2FsbC9sb2dnZXIucHk6NTMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgY2FsbHN1YiBlY2hvX25hdGl2ZV9ieXRlcwogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGUgMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludCAxCiAgICByZXR1cm4KCm1haW5fZWNob19uYXRpdmVfdWludDY0X3JvdXRlQDExOgogICAgLy8gdHlwZWRfYWJpX2NhbGwvbG9nZ2VyLnB5OjU3CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBpcyBub3QgY3JlYXRpbmcKICAgIC8vIHR5cGVkX2FiaV9jYWxsL2xvZ2dlci5weToyMAogICAgLy8gY2xhc3MgTG9nZ2VyKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyB0eXBlZF9hYmlfY2FsbC9sb2dnZXIucHk6NTcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgY2FsbHN1YiBlY2hvX25hdGl2ZV91aW50NjQKICAgIGl0b2IKICAgIGJ5dGUgMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludCAxCiAgICByZXR1cm4KCm1haW5fZWNob19uYXRpdmVfYmlndWludF9yb3V0ZUAxMjoKICAgIC8vIHR5cGVkX2FiaV9jYWxsL2xvZ2dlci5weTo2MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gaXMgbm90IGNyZWF0aW5nCiAgICAvLyB0eXBlZF9hYmlfY2FsbC9sb2dnZXIucHk6MjAKICAgIC8vIGNsYXNzIExvZ2dlcihBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgLy8gdHlwZWRfYWJpX2NhbGwvbG9nZ2VyLnB5OjYxCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGNhbGxzdWIgZWNob19uYXRpdmVfYmlndWludAogICAgZHVwCiAgICBsZW4KICAgIGludCA2NAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50IDY0CiAgICBiemVybwogICAgYnwKICAgIGJ5dGUgMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludCAxCiAgICByZXR1cm4KCm1haW5fZWNob19uYXRpdmVfdHVwbGVfcm91dGVAMTM6CiAgICAvLyB0eXBlZF9hYmlfY2FsbC9sb2dnZXIucHk6NjUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgLy8gdHlwZWRfYWJpX2NhbGwvbG9nZ2VyLnB5OjIwCiAgICAvLyBjbGFzcyBMb2dnZXIoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNAogICAgLy8gdHlwZWRfYWJpX2NhbGwvbG9nZ2VyLnB5OjY1CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGNhbGxzdWIgZWNob19uYXRpdmVfdHVwbGUKICAgIGNvdmVyIDMKICAgIGNvdmVyIDIKICAgIHN3YXAKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBjb3ZlciAzCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgY292ZXIgMwogICAgaXRvYgogICAgY292ZXIgMgogICAgZHVwCiAgICBsZW4KICAgIGludCA2NAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50IDY0CiAgICBiemVybwogICAgYnwKICAgIGRpZyAxCiAgICBsZW4KICAgIGludCA3NgogICAgKwogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGJ5dGUgMHgwMDRjCiAgICBzd2FwCiAgICBjb25jYXQKICAgIHVuY292ZXIgMwogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnQgMQogICAgcmV0dXJuCgptYWluX3JldHVybl9hcmdzX2FmdGVyXzE0dGhfcm91dGVAMTQ6CiAgICAvLyB0eXBlZF9hYmlfY2FsbC9sb2dnZXIucHk6NzEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgLy8gdHlwZWRfYWJpX2NhbGwvbG9nZ2VyLnB5OjIwCiAgICAvLyBjbGFzcyBMb2dnZXIoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDQKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDUKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDYKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDcKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDgKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxMQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMTIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEzCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxNAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMTUKICAgIGV4dHJhY3QgMCAxIC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMTUKICAgIGV4dHJhY3QgMSAxIC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMTUKICAgIGV4dHJhY3QgMiAxIC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMTUKICAgIGV4dHJhY3QgMyAxIC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMTUKICAgIGV4dHJhY3QgNCA0IC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMTUKICAgIGV4dHJhY3QgOCAxIC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgLy8gdHlwZWRfYWJpX2NhbGwvbG9nZ2VyLnB5OjcxCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGNhbGxzdWIgcmV0dXJuX2FyZ3NfYWZ0ZXJfMTR0aAogICAgYnl0ZSAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50IDEKICAgIHJldHVybgoKbWFpbl9iYXJlX3JvdXRpbmdAMTc6CiAgICAvLyB0eXBlZF9hYmlfY2FsbC9sb2dnZXIucHk6MjAKICAgIC8vIGNsYXNzIExvZ2dlcihBUkM0Q29udHJhY3QpOgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIHJlamVjdCB0cmFuc2FjdGlvbgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgIGFzc2VydCAvLyBpcyBjcmVhdGluZwogICAgaW50IDEKICAgIHJldHVybgoKCi8vIHRlc3RfY2FzZXMudHlwZWRfYWJpX2NhbGwubG9nZ2VyLkxvZ2dlci5lY2hvKHZhbHVlOiBieXRlcykgLT4gYnl0ZXM6CmVjaG86CiAgICAvLyB0eXBlZF9hYmlfY2FsbC9sb2dnZXIucHk6MjEtMjIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgLy8gZGVmIGVjaG8oc2VsZiwgdmFsdWU6IGFyYzQuU3RyaW5nKSAtPiBhcmM0LlN0cmluZzoKICAgIHByb3RvIDEgMQogICAgLy8gdHlwZWRfYWJpX2NhbGwvbG9nZ2VyLnB5OjIzCiAgICAvLyByZXR1cm4gImVjaG86ICIgKyB2YWx1ZQogICAgZnJhbWVfZGlnIC0xCiAgICBleHRyYWN0IDIgMAogICAgYnl0ZSAweDY1NjM2ODZmM2EyMAogICAgc3dhcAogICAgY29uY2F0CiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgcmV0c3ViCgoKLy8gdGVzdF9jYXNlcy50eXBlZF9hYmlfY2FsbC5sb2dnZXIuTG9nZ2VyLmxvZ191aW50NjQodmFsdWU6IGJ5dGVzKSAtPiB2b2lkOgpsb2dfdWludDY0OgogICAgLy8gdHlwZWRfYWJpX2NhbGwvbG9nZ2VyLnB5OjI1LTI2CiAgICAvLyBAYXJjNC5hYmltZXRob2QobmFtZT1MT0dfTUVUSE9EX05BTUUpCiAgICAvLyBkZWYgbG9nX3VpbnQ2NChzZWxmLCB2YWx1ZTogYXJjNC5VSW50NjQpIC0+IE5vbmU6CiAgICBwcm90byAxIDAKICAgIC8vIHR5cGVkX2FiaV9jYWxsL2xvZ2dlci5weToyNwogICAgLy8gbG9nKHZhbHVlKQogICAgZnJhbWVfZGlnIC0xCiAgICBsb2cKICAgIHJldHN1YgoKCi8vIHRlc3RfY2FzZXMudHlwZWRfYWJpX2NhbGwubG9nZ2VyLkxvZ2dlci5sb2dfdWludDUxMih2YWx1ZTogYnl0ZXMpIC0+IHZvaWQ6CmxvZ191aW50NTEyOgogICAgLy8gdHlwZWRfYWJpX2NhbGwvbG9nZ2VyLnB5OjI5LTMwCiAgICAvLyBAYXJjNC5hYmltZXRob2QobmFtZT1MT0dfTUVUSE9EX05BTUUpCiAgICAvLyBkZWYgbG9nX3VpbnQ1MTIoc2VsZiwgdmFsdWU6IGFyYzQuVUludDUxMikgLT4gTm9uZToKICAgIHByb3RvIDEgMAogICAgLy8gdHlwZWRfYWJpX2NhbGwvbG9nZ2VyLnB5OjMxCiAgICAvLyBsb2codmFsdWUpCiAgICBmcmFtZV9kaWcgLTEKICAgIGxvZwogICAgcmV0c3ViCgoKLy8gdGVzdF9jYXNlcy50eXBlZF9hYmlfY2FsbC5sb2dnZXIuTG9nZ2VyLmxvZ19zdHJpbmcodmFsdWU6IGJ5dGVzKSAtPiB2b2lkOgpsb2dfc3RyaW5nOgogICAgLy8gdHlwZWRfYWJpX2NhbGwvbG9nZ2VyLnB5OjMzLTM0CiAgICAvLyBAYXJjNC5hYmltZXRob2QobmFtZT1MT0dfTUVUSE9EX05BTUUpCiAgICAvLyBkZWYgbG9nX3N0cmluZyhzZWxmLCB2YWx1ZTogYXJjNC5TdHJpbmcpIC0+IE5vbmU6CiAgICBwcm90byAxIDAKICAgIC8vIHR5cGVkX2FiaV9jYWxsL2xvZ2dlci5weTozNQogICAgLy8gbG9nKHZhbHVlLm5hdGl2ZSkgICMgZGVjb2RlIHRvIHJlbW92ZSBoZWFkZXIKICAgIGZyYW1lX2RpZyAtMQogICAgZXh0cmFjdCAyIDAKICAgIGxvZwogICAgcmV0c3ViCgoKLy8gdGVzdF9jYXNlcy50eXBlZF9hYmlfY2FsbC5sb2dnZXIuTG9nZ2VyLmxvZ19ib29sKHZhbHVlOiBieXRlcykgLT4gdm9pZDoKbG9nX2Jvb2w6CiAgICAvLyB0eXBlZF9hYmlfY2FsbC9sb2dnZXIucHk6MzctMzgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChuYW1lPUxPR19NRVRIT0RfTkFNRSkKICAgIC8vIGRlZiBsb2dfYm9vbChzZWxmLCB2YWx1ZTogYXJjNC5Cb29sKSAtPiBOb25lOgogICAgcHJvdG8gMSAwCiAgICAvLyB0eXBlZF9hYmlfY2FsbC9sb2dnZXIucHk6MzkKICAgIC8vIGxvZyhCeXRlcyhiIlRydWUiKSBpZiB2YWx1ZS5uYXRpdmUgZWxzZSBCeXRlcyhiIkZhbHNlIikpCiAgICBmcmFtZV9kaWcgLTEKICAgIGludCAwCiAgICBnZXRiaXQKICAgIGJ5dGUgMHg0NjYxNmM3MzY1CiAgICBieXRlIDB4NTQ3Mjc1NjUKICAgIHVuY292ZXIgMgogICAgc2VsZWN0CiAgICBsb2cKICAgIHJldHN1YgoKCi8vIHRlc3RfY2FzZXMudHlwZWRfYWJpX2NhbGwubG9nZ2VyLkxvZ2dlci5sb2dfYnl0ZXModmFsdWU6IGJ5dGVzKSAtPiB2b2lkOgpsb2dfYnl0ZXM6CiAgICAvLyB0eXBlZF9hYmlfY2FsbC9sb2dnZXIucHk6NDEtNDIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChuYW1lPUxPR19NRVRIT0RfTkFNRSkKICAgIC8vIGRlZiBsb2dfYnl0ZXMoc2VsZiwgdmFsdWU6IGFyYzQuRHluYW1pY0J5dGVzKSAtPiBOb25lOgogICAgcHJvdG8gMSAwCiAgICAvLyB0eXBlZF9hYmlfY2FsbC9sb2dnZXIucHk6NDMKICAgIC8vIGxvZyh2YWx1ZS5uYXRpdmUpCiAgICBmcmFtZV9kaWcgLTEKICAgIGV4dHJhY3QgMiAwCiAgICBsb2cKICAgIHJldHN1YgoKCi8vIHRlc3RfY2FzZXMudHlwZWRfYWJpX2NhbGwubG9nZ2VyLkxvZ2dlci5sb2dfYXNzZXRfYWNjb3VudF9hcHAoYXNzZXQ6IHVpbnQ2NCwgYWNjb3VudDogYnl0ZXMsIGFwcDogdWludDY0KSAtPiB2b2lkOgpsb2dfYXNzZXRfYWNjb3VudF9hcHA6CiAgICAvLyB0eXBlZF9hYmlfY2FsbC9sb2dnZXIucHk6NDUtNDYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChuYW1lPUxPR19NRVRIT0RfTkFNRSkKICAgIC8vIGRlZiBsb2dfYXNzZXRfYWNjb3VudF9hcHAoc2VsZiwgYXNzZXQ6IEFzc2V0LCBhY2NvdW50OiBBY2NvdW50LCBhcHA6IEFwcGxpY2F0aW9uKSAtPiBOb25lOgogICAgcHJvdG8gMyAwCiAgICAvLyB0eXBlZF9hYmlfY2FsbC9sb2dnZXIucHk6NDcKICAgIC8vIGxvZyhhc3NldC5uYW1lLCBhY2NvdW50LmJ5dGVzLCBhcHAuYWRkcmVzcykKICAgIGZyYW1lX2RpZyAtMwogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldE5hbWUKICAgIGFzc2VydCAvLyBhc3NldCBleGlzdHMKICAgIGZyYW1lX2RpZyAtMgogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9wYXJhbXNfZ2V0IEFwcEFkZHJlc3MKICAgIGFzc2VydCAvLyBhcHBsaWNhdGlvbiBleGlzdHMKICAgIGNvbmNhdAogICAgbG9nCiAgICByZXRzdWIKCgovLyB0ZXN0X2Nhc2VzLnR5cGVkX2FiaV9jYWxsLmxvZ2dlci5Mb2dnZXIuZWNob19uYXRpdmVfc3RyaW5nKHZhbHVlOiBieXRlcykgLT4gYnl0ZXM6CmVjaG9fbmF0aXZlX3N0cmluZzoKICAgIC8vIHR5cGVkX2FiaV9jYWxsL2xvZ2dlci5weTo0OS01MAogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICAvLyBkZWYgZWNob19uYXRpdmVfc3RyaW5nKHNlbGYsIHZhbHVlOiBTdHJpbmcpIC0+IFN0cmluZzoKICAgIHByb3RvIDEgMQogICAgLy8gdHlwZWRfYWJpX2NhbGwvbG9nZ2VyLnB5OjUxCiAgICAvLyByZXR1cm4gImVjaG86ICIgKyB2YWx1ZQogICAgYnl0ZSAiZWNobzogIgogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIHJldHN1YgoKCi8vIHRlc3RfY2FzZXMudHlwZWRfYWJpX2NhbGwubG9nZ2VyLkxvZ2dlci5lY2hvX25hdGl2ZV9ieXRlcyh2YWx1ZTogYnl0ZXMpIC0+IGJ5dGVzOgplY2hvX25hdGl2ZV9ieXRlczoKICAgIC8vIHR5cGVkX2FiaV9jYWxsL2xvZ2dlci5weTo1My01NAogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICAvLyBkZWYgZWNob19uYXRpdmVfYnl0ZXMoc2VsZiwgdmFsdWU6IEJ5dGVzKSAtPiBCeXRlczoKICAgIHByb3RvIDEgMQogICAgLy8gdHlwZWRfYWJpX2NhbGwvbG9nZ2VyLnB5OjU1CiAgICAvLyByZXR1cm4gYiJlY2hvOiAiICsgdmFsdWUKICAgIGJ5dGUgMHg2NTYzNjg2ZjNhMjAKICAgIGZyYW1lX2RpZyAtMQogICAgY29uY2F0CiAgICByZXRzdWIKCgovLyB0ZXN0X2Nhc2VzLnR5cGVkX2FiaV9jYWxsLmxvZ2dlci5Mb2dnZXIuZWNob19uYXRpdmVfdWludDY0KHZhbHVlOiB1aW50NjQpIC0+IHVpbnQ2NDoKZWNob19uYXRpdmVfdWludDY0OgogICAgLy8gdHlwZWRfYWJpX2NhbGwvbG9nZ2VyLnB5OjU3LTU4CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIC8vIGRlZiBlY2hvX25hdGl2ZV91aW50NjQoc2VsZiwgdmFsdWU6IFVJbnQ2NCkgLT4gVUludDY0OgogICAgcHJvdG8gMSAxCiAgICAvLyB0eXBlZF9hYmlfY2FsbC9sb2dnZXIucHk6NTkKICAgIC8vIHJldHVybiB2YWx1ZSArIDEKICAgIGZyYW1lX2RpZyAtMQogICAgaW50IDEKICAgICsKICAgIHJldHN1YgoKCi8vIHRlc3RfY2FzZXMudHlwZWRfYWJpX2NhbGwubG9nZ2VyLkxvZ2dlci5lY2hvX25hdGl2ZV9iaWd1aW50KHZhbHVlOiBieXRlcykgLT4gYnl0ZXM6CmVjaG9fbmF0aXZlX2JpZ3VpbnQ6CiAgICAvLyB0eXBlZF9hYmlfY2FsbC9sb2dnZXIucHk6NjEtNjIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgLy8gZGVmIGVjaG9fbmF0aXZlX2JpZ3VpbnQoc2VsZiwgdmFsdWU6IEJpZ1VJbnQpIC0+IEJpZ1VJbnQ6CiAgICBwcm90byAxIDEKICAgIC8vIHR5cGVkX2FiaV9jYWxsL2xvZ2dlci5weTo2MwogICAgLy8gcmV0dXJuIHZhbHVlICsgMQogICAgZnJhbWVfZGlnIC0xCiAgICBieXRlIDB4MDEKICAgIGIrCiAgICByZXRzdWIKCgovLyB0ZXN0X2Nhc2VzLnR5cGVkX2FiaV9jYWxsLmxvZ2dlci5Mb2dnZXIuZWNob19uYXRpdmVfdHVwbGUoczogYnl0ZXMsIGI6IGJ5dGVzLCB1OiB1aW50NjQsIGJ1OiBieXRlcykgLT4gYnl0ZXMsIGJ5dGVzLCB1aW50NjQsIGJ5dGVzOgplY2hvX25hdGl2ZV90dXBsZToKICAgIC8vIHR5cGVkX2FiaV9jYWxsL2xvZ2dlci5weTo2NS02OAogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICAvLyBkZWYgZWNob19uYXRpdmVfdHVwbGUoCiAgICAvLyAgICAgc2VsZiwgczogU3RyaW5nLCBiOiBCeXRlcywgdTogVUludDY0LCBidTogQmlnVUludAogICAgLy8gKSAtPiB0dXBsZVtTdHJpbmcsIEJ5dGVzLCBVSW50NjQsIEJpZ1VJbnRdOgogICAgcHJvdG8gNCA0CiAgICAvLyB0eXBlZF9hYmlfY2FsbC9sb2dnZXIucHk6NjkKICAgIC8vIHJldHVybiAiZWNobzogIiArIHMsIGIiZWNobzogIiArIGIsIHUgKyAxLCBidSArIDEKICAgIGJ5dGUgImVjaG86ICIKICAgIGZyYW1lX2RpZyAtNAogICAgY29uY2F0CiAgICBieXRlIDB4NjU2MzY4NmYzYTIwCiAgICBmcmFtZV9kaWcgLTMKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC0yCiAgICBpbnQgMQogICAgKwogICAgZnJhbWVfZGlnIC0xCiAgICBieXRlIDB4MDEKICAgIGIrCiAgICByZXRzdWIKCgovLyB0ZXN0X2Nhc2VzLnR5cGVkX2FiaV9jYWxsLmxvZ2dlci5Mb2dnZXIucmV0dXJuX2FyZ3NfYWZ0ZXJfMTR0aChfYTE6IGJ5dGVzLCBfYTI6IGJ5dGVzLCBfYTM6IGJ5dGVzLCBfYTQ6IGJ5dGVzLCBfYTU6IGJ5dGVzLCBfYTY6IGJ5dGVzLCBfYTc6IGJ5dGVzLCBfYTg6IGJ5dGVzLCBfYTk6IGJ5dGVzLCBfYTEwOiBieXRlcywgX2ExMTogYnl0ZXMsIF9hMTI6IGJ5dGVzLCBfYTEzOiBieXRlcywgX2ExNDogYnl0ZXMsIGExNTogYnl0ZXMsIGExNjogYnl0ZXMsIGExNzogYnl0ZXMsIGExODogYnl0ZXMsIGExOTogYnl0ZXMsIGEyMDogYnl0ZXMpIC0+IGJ5dGVzOgpyZXR1cm5fYXJnc19hZnRlcl8xNHRoOgogICAgLy8gdHlwZWRfYWJpX2NhbGwvbG9nZ2VyLnB5OjcxLTk0CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIC8vIGRlZiByZXR1cm5fYXJnc19hZnRlcl8xNHRoKAogICAgLy8gICAgIHNlbGYsCiAgICAvLyAgICAgX2ExOiBhcmM0LlVJbnQ2NCwKICAgIC8vICAgICBfYTI6IGFyYzQuVUludDY0LAogICAgLy8gICAgIF9hMzogYXJjNC5VSW50NjQsCiAgICAvLyAgICAgX2E0OiBhcmM0LlVJbnQ2NCwKICAgIC8vICAgICBfYTU6IGFyYzQuVUludDY0LAogICAgLy8gICAgIF9hNjogYXJjNC5VSW50NjQsCiAgICAvLyAgICAgX2E3OiBhcmM0LlVJbnQ2NCwKICAgIC8vICAgICBfYTg6IGFyYzQuVUludDY0LAogICAgLy8gICAgIF9hOTogYXJjNC5VSW50NjQsCiAgICAvLyAgICAgX2ExMDogYXJjNC5VSW50NjQsCiAgICAvLyAgICAgX2ExMTogYXJjNC5VSW50NjQsCiAgICAvLyAgICAgX2ExMjogYXJjNC5VSW50NjQsCiAgICAvLyAgICAgX2ExMzogYXJjNC5VSW50NjQsCiAgICAvLyAgICAgX2ExNDogYXJjNC5VSW50NjQsCiAgICAvLyAgICAgYTE1OiBhcmM0LlVJbnQ4LAogICAgLy8gICAgIGExNjogYXJjNC5VSW50OCwKICAgIC8vICAgICBhMTc6IGFyYzQuVUludDgsCiAgICAvLyAgICAgYTE4OiBhcmM0LlVJbnQ4LAogICAgLy8gICAgIGExOTogYXJjNC5UdXBsZVthcmM0LlVJbnQ4LCBhcmM0LlVJbnQ4LCBhcmM0LlVJbnQ4LCBhcmM0LlVJbnQ4XSwKICAgIC8vICAgICBhMjA6IGFyYzQuVUludDgsCiAgICAvLyApIC0+IGFyYzQuRHluYW1pY0J5dGVzOgogICAgcHJvdG8gMjAgMQogICAgLy8gdHlwZWRfYWJpX2NhbGwvbG9nZ2VyLnB5Ojk1CiAgICAvLyBsYXN0X2FyZyA9IGFyYzQuVHVwbGUoKGExNSwgYTE2LCBhMTcsIGExOCwgYTE5LCBhMjApKQogICAgZnJhbWVfZGlnIC02CiAgICBmcmFtZV9kaWcgLTUKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC00CiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtMwogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTIKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIC8vIHR5cGVkX2FiaV9jYWxsL2xvZ2dlci5weTo5NgogICAgLy8gYXNzZXJ0IFR4bi5hcHBsaWNhdGlvbl9hcmdzKDE1KSA9PSBsYXN0X2FyZy5ieXRlcwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMTUKICAgIGRpZyAxCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0eXBlZF9hYmlfY2FsbC9sb2dnZXIucHk6OTcKICAgIC8vIHJldHVybiBhcmM0LkR5bmFtaWNCeXRlcyhsYXN0X2FyZy5ieXRlcykKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICByZXRzdWIK", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0X2Nhc2VzLnR5cGVkX2FiaV9jYWxsLmxvZ2dlci5Mb2dnZXIuYXBwcm92YWxfcHJvZ3JhbToKICAgIC8vIHR5cGVkX2FiaV9jYWxsL2xvZ2dlci5weToyMAogICAgLy8gY2xhc3MgTG9nZ2VyKEFSQzRDb250cmFjdCk6CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdAMTgKICAgIG1ldGhvZCAiZWNobyhzdHJpbmcpc3RyaW5nIgogICAgbWV0aG9kICJub19hcmdzKCl1aW50NjQiCiAgICBtZXRob2QgImxvZyh1aW50NjQpdm9pZCIKICAgIG1ldGhvZCAibG9nKHVpbnQ1MTIpdm9pZCIKICAgIG1ldGhvZCAibG9nKHN0cmluZyl2b2lkIgogICAgbWV0aG9kICJsb2coYm9vbCl2b2lkIgogICAgbWV0aG9kICJsb2coYnl0ZVtdKXZvaWQiCiAgICBtZXRob2QgImxvZyhhc3NldCxhY2NvdW50LGFwcGxpY2F0aW9uKXZvaWQiCiAgICBtZXRob2QgImVjaG9fbmF0aXZlX3N0cmluZyhzdHJpbmcpc3RyaW5nIgogICAgbWV0aG9kICJlY2hvX25hdGl2ZV9ieXRlcyhieXRlW10pYnl0ZVtdIgogICAgbWV0aG9kICJlY2hvX25hdGl2ZV91aW50NjQodWludDY0KXVpbnQ2NCIKICAgIG1ldGhvZCAiZWNob19uYXRpdmVfYmlndWludCh1aW50NTEyKXVpbnQ1MTIiCiAgICBtZXRob2QgImVjaG9fbmF0aXZlX3R1cGxlKHN0cmluZyxieXRlW10sdWludDY0LHVpbnQ1MTIpKHN0cmluZyxieXRlW10sdWludDY0LHVpbnQ1MTIpIgogICAgbWV0aG9kICJyZXR1cm5fYXJnc19hZnRlcl8xNHRoKHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDgsdWludDgsdWludDgsdWludDgsKHVpbnQ4LHVpbnQ4LHVpbnQ4LHVpbnQ4KSx1aW50OClieXRlW10iCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBtYWluX2VjaG9fcm91dGVAMiBtYWluX25vX2FyZ3Nfcm91dGVAMyBtYWluX2xvZ19yb3V0ZUA0IG1haW5fbG9nX3JvdXRlQDUgbWFpbl9sb2dfcm91dGVANiBtYWluX2xvZ19yb3V0ZUA3IG1haW5fbG9nX3JvdXRlQDggbWFpbl9sb2dfcm91dGVAOSBtYWluX2VjaG9fbmF0aXZlX3N0cmluZ19yb3V0ZUAxMCBtYWluX2VjaG9fbmF0aXZlX2J5dGVzX3JvdXRlQDExIG1haW5fZWNob19uYXRpdmVfdWludDY0X3JvdXRlQDEyIG1haW5fZWNob19uYXRpdmVfYmlndWludF9yb3V0ZUAxMyBtYWluX2VjaG9fbmF0aXZlX3R1cGxlX3JvdXRlQDE0IG1haW5fcmV0dXJuX2FyZ3NfYWZ0ZXJfMTR0aF9yb3V0ZUAxNQogICAgZXJyIC8vIHJlamVjdCB0cmFuc2FjdGlvbgoKbWFpbl9lY2hvX3JvdXRlQDI6CiAgICAvLyB0eXBlZF9hYmlfY2FsbC9sb2dnZXIucHk6MjEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgLy8gdHlwZWRfYWJpX2NhbGwvbG9nZ2VyLnB5OjIwCiAgICAvLyBjbGFzcyBMb2dnZXIoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIC8vIHR5cGVkX2FiaV9jYWxsL2xvZ2dlci5weToyMQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBjYWxsc3ViIGVjaG8KICAgIGJ5dGUgMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludCAxCiAgICByZXR1cm4KCm1haW5fbm9fYXJnc19yb3V0ZUAzOgogICAgLy8gdHlwZWRfYWJpX2NhbGwvbG9nZ2VyLnB5OjI1CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBpcyBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgbm9fYXJncwogICAgaXRvYgogICAgYnl0ZSAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50IDEKICAgIHJldHVybgoKbWFpbl9sb2dfcm91dGVANDoKICAgIC8vIHR5cGVkX2FiaV9jYWxsL2xvZ2dlci5weToyOQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKG5hbWU9TE9HX01FVEhPRF9OQU1FKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgLy8gdHlwZWRfYWJpX2NhbGwvbG9nZ2VyLnB5OjIwCiAgICAvLyBjbGFzcyBMb2dnZXIoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIC8vIHR5cGVkX2FiaV9jYWxsL2xvZ2dlci5weToyOQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKG5hbWU9TE9HX01FVEhPRF9OQU1FKQogICAgY2FsbHN1YiBsb2dfdWludDY0CiAgICBpbnQgMQogICAgcmV0dXJuCgptYWluX2xvZ19yb3V0ZUA1OgogICAgLy8gdHlwZWRfYWJpX2NhbGwvbG9nZ2VyLnB5OjMzCiAgICAvLyBAYXJjNC5hYmltZXRob2QobmFtZT1MT0dfTUVUSE9EX05BTUUpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gaXMgbm90IGNyZWF0aW5nCiAgICAvLyB0eXBlZF9hYmlfY2FsbC9sb2dnZXIucHk6MjAKICAgIC8vIGNsYXNzIExvZ2dlcihBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgLy8gdHlwZWRfYWJpX2NhbGwvbG9nZ2VyLnB5OjMzCiAgICAvLyBAYXJjNC5hYmltZXRob2QobmFtZT1MT0dfTUVUSE9EX05BTUUpCiAgICBjYWxsc3ViIGxvZ191aW50NTEyCiAgICBpbnQgMQogICAgcmV0dXJuCgptYWluX2xvZ19yb3V0ZUA2OgogICAgLy8gdHlwZWRfYWJpX2NhbGwvbG9nZ2VyLnB5OjM3CiAgICAvLyBAYXJjNC5hYmltZXRob2QobmFtZT1MT0dfTUVUSE9EX05BTUUpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gaXMgbm90IGNyZWF0aW5nCiAgICAvLyB0eXBlZF9hYmlfY2FsbC9sb2dnZXIucHk6MjAKICAgIC8vIGNsYXNzIExvZ2dlcihBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgLy8gdHlwZWRfYWJpX2NhbGwvbG9nZ2VyLnB5OjM3CiAgICAvLyBAYXJjNC5hYmltZXRob2QobmFtZT1MT0dfTUVUSE9EX05BTUUpCiAgICBjYWxsc3ViIGxvZ19zdHJpbmcKICAgIGludCAxCiAgICByZXR1cm4KCm1haW5fbG9nX3JvdXRlQDc6CiAgICAvLyB0eXBlZF9hYmlfY2FsbC9sb2dnZXIucHk6NDEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChuYW1lPUxPR19NRVRIT0RfTkFNRSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBpcyBub3QgY3JlYXRpbmcKICAgIC8vIHR5cGVkX2FiaV9jYWxsL2xvZ2dlci5weToyMAogICAgLy8gY2xhc3MgTG9nZ2VyKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyB0eXBlZF9hYmlfY2FsbC9sb2dnZXIucHk6NDEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChuYW1lPUxPR19NRVRIT0RfTkFNRSkKICAgIGNhbGxzdWIgbG9nX2Jvb2wKICAgIGludCAxCiAgICByZXR1cm4KCm1haW5fbG9nX3JvdXRlQDg6CiAgICAvLyB0eXBlZF9hYmlfY2FsbC9sb2dnZXIucHk6NDUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChuYW1lPUxPR19NRVRIT0RfTkFNRSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBpcyBub3QgY3JlYXRpbmcKICAgIC8vIHR5cGVkX2FiaV9jYWxsL2xvZ2dlci5weToyMAogICAgLy8gY2xhc3MgTG9nZ2VyKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyB0eXBlZF9hYmlfY2FsbC9sb2dnZXIucHk6NDUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChuYW1lPUxPR19NRVRIT0RfTkFNRSkKICAgIGNhbGxzdWIgbG9nX2J5dGVzCiAgICBpbnQgMQogICAgcmV0dXJuCgptYWluX2xvZ19yb3V0ZUA5OgogICAgLy8gdHlwZWRfYWJpX2NhbGwvbG9nZ2VyLnB5OjQ5CiAgICAvLyBAYXJjNC5hYmltZXRob2QobmFtZT1MT0dfTUVUSE9EX05BTUUpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gaXMgbm90IGNyZWF0aW5nCiAgICAvLyB0eXBlZF9hYmlfY2FsbC9sb2dnZXIucHk6MjAKICAgIC8vIGNsYXNzIExvZ2dlcihBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICB0eG5hcyBBY2NvdW50cwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgYnRvaQogICAgdHhuYXMgQXBwbGljYXRpb25zCiAgICAvLyB0eXBlZF9hYmlfY2FsbC9sb2dnZXIucHk6NDkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChuYW1lPUxPR19NRVRIT0RfTkFNRSkKICAgIGNhbGxzdWIgbG9nX2Fzc2V0X2FjY291bnRfYXBwCiAgICBpbnQgMQogICAgcmV0dXJuCgptYWluX2VjaG9fbmF0aXZlX3N0cmluZ19yb3V0ZUAxMDoKICAgIC8vIHR5cGVkX2FiaV9jYWxsL2xvZ2dlci5weTo1MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gaXMgbm90IGNyZWF0aW5nCiAgICAvLyB0eXBlZF9hYmlfY2FsbC9sb2dnZXIucHk6MjAKICAgIC8vIGNsYXNzIExvZ2dlcihBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIC8vIHR5cGVkX2FiaV9jYWxsL2xvZ2dlci5weTo1MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBjYWxsc3ViIGVjaG9fbmF0aXZlX3N0cmluZwogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGUgMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludCAxCiAgICByZXR1cm4KCm1haW5fZWNob19uYXRpdmVfYnl0ZXNfcm91dGVAMTE6CiAgICAvLyB0eXBlZF9hYmlfY2FsbC9sb2dnZXIucHk6NTcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgLy8gdHlwZWRfYWJpX2NhbGwvbG9nZ2VyLnB5OjIwCiAgICAvLyBjbGFzcyBMb2dnZXIoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0eXBlZF9hYmlfY2FsbC9sb2dnZXIucHk6NTcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgY2FsbHN1YiBlY2hvX25hdGl2ZV9ieXRlcwogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGUgMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludCAxCiAgICByZXR1cm4KCm1haW5fZWNob19uYXRpdmVfdWludDY0X3JvdXRlQDEyOgogICAgLy8gdHlwZWRfYWJpX2NhbGwvbG9nZ2VyLnB5OjYxCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBpcyBub3QgY3JlYXRpbmcKICAgIC8vIHR5cGVkX2FiaV9jYWxsL2xvZ2dlci5weToyMAogICAgLy8gY2xhc3MgTG9nZ2VyKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyB0eXBlZF9hYmlfY2FsbC9sb2dnZXIucHk6NjEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgY2FsbHN1YiBlY2hvX25hdGl2ZV91aW50NjQKICAgIGl0b2IKICAgIGJ5dGUgMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludCAxCiAgICByZXR1cm4KCm1haW5fZWNob19uYXRpdmVfYmlndWludF9yb3V0ZUAxMzoKICAgIC8vIHR5cGVkX2FiaV9jYWxsL2xvZ2dlci5weTo2NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gaXMgbm90IGNyZWF0aW5nCiAgICAvLyB0eXBlZF9hYmlfY2FsbC9sb2dnZXIucHk6MjAKICAgIC8vIGNsYXNzIExvZ2dlcihBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgLy8gdHlwZWRfYWJpX2NhbGwvbG9nZ2VyLnB5OjY1CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGNhbGxzdWIgZWNob19uYXRpdmVfYmlndWludAogICAgZHVwCiAgICBsZW4KICAgIGludCA2NAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50IDY0CiAgICBiemVybwogICAgYnwKICAgIGJ5dGUgMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludCAxCiAgICByZXR1cm4KCm1haW5fZWNob19uYXRpdmVfdHVwbGVfcm91dGVAMTQ6CiAgICAvLyB0eXBlZF9hYmlfY2FsbC9sb2dnZXIucHk6NjkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgLy8gdHlwZWRfYWJpX2NhbGwvbG9nZ2VyLnB5OjIwCiAgICAvLyBjbGFzcyBMb2dnZXIoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNAogICAgLy8gdHlwZWRfYWJpX2NhbGwvbG9nZ2VyLnB5OjY5CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGNhbGxzdWIgZWNob19uYXRpdmVfdHVwbGUKICAgIGNvdmVyIDMKICAgIGNvdmVyIDIKICAgIHN3YXAKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBjb3ZlciAzCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgY292ZXIgMwogICAgaXRvYgogICAgY292ZXIgMgogICAgZHVwCiAgICBsZW4KICAgIGludCA2NAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50IDY0CiAgICBiemVybwogICAgYnwKICAgIGRpZyAxCiAgICBsZW4KICAgIGludCA3NgogICAgKwogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGJ5dGUgMHgwMDRjCiAgICBzd2FwCiAgICBjb25jYXQKICAgIHVuY292ZXIgMwogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnQgMQogICAgcmV0dXJuCgptYWluX3JldHVybl9hcmdzX2FmdGVyXzE0dGhfcm91dGVAMTU6CiAgICAvLyB0eXBlZF9hYmlfY2FsbC9sb2dnZXIucHk6NzUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgLy8gdHlwZWRfYWJpX2NhbGwvbG9nZ2VyLnB5OjIwCiAgICAvLyBjbGFzcyBMb2dnZXIoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDQKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDUKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDYKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDcKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDgKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxMQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMTIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEzCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxNAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMTUKICAgIGV4dHJhY3QgMCAxIC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMTUKICAgIGV4dHJhY3QgMSAxIC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMTUKICAgIGV4dHJhY3QgMiAxIC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMTUKICAgIGV4dHJhY3QgMyAxIC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMTUKICAgIGV4dHJhY3QgNCA0IC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMTUKICAgIGV4dHJhY3QgOCAxIC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgLy8gdHlwZWRfYWJpX2NhbGwvbG9nZ2VyLnB5Ojc1CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGNhbGxzdWIgcmV0dXJuX2FyZ3NfYWZ0ZXJfMTR0aAogICAgYnl0ZSAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50IDEKICAgIHJldHVybgoKbWFpbl9iYXJlX3JvdXRpbmdAMTg6CiAgICAvLyB0eXBlZF9hYmlfY2FsbC9sb2dnZXIucHk6MjAKICAgIC8vIGNsYXNzIExvZ2dlcihBUkM0Q29udHJhY3QpOgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIHJlamVjdCB0cmFuc2FjdGlvbgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgIGFzc2VydCAvLyBpcyBjcmVhdGluZwogICAgaW50IDEKICAgIHJldHVybgoKCi8vIHRlc3RfY2FzZXMudHlwZWRfYWJpX2NhbGwubG9nZ2VyLkxvZ2dlci5lY2hvKHZhbHVlOiBieXRlcykgLT4gYnl0ZXM6CmVjaG86CiAgICAvLyB0eXBlZF9hYmlfY2FsbC9sb2dnZXIucHk6MjEtMjIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgLy8gZGVmIGVjaG8oc2VsZiwgdmFsdWU6IGFyYzQuU3RyaW5nKSAtPiBhcmM0LlN0cmluZzoKICAgIHByb3RvIDEgMQogICAgLy8gdHlwZWRfYWJpX2NhbGwvbG9nZ2VyLnB5OjIzCiAgICAvLyByZXR1cm4gImVjaG86ICIgKyB2YWx1ZQogICAgZnJhbWVfZGlnIC0xCiAgICBleHRyYWN0IDIgMAogICAgYnl0ZSAweDY1NjM2ODZmM2EyMAogICAgc3dhcAogICAgY29uY2F0CiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgcmV0c3ViCgoKLy8gdGVzdF9jYXNlcy50eXBlZF9hYmlfY2FsbC5sb2dnZXIuTG9nZ2VyLm5vX2FyZ3MoKSAtPiB1aW50NjQ6Cm5vX2FyZ3M6CiAgICAvLyB0eXBlZF9hYmlfY2FsbC9sb2dnZXIucHk6MjUtMjYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgLy8gZGVmIG5vX2FyZ3Moc2VsZikgLT4gVUludDY0OgogICAgcHJvdG8gMCAxCiAgICAvLyB0eXBlZF9hYmlfY2FsbC9sb2dnZXIucHk6MjcKICAgIC8vIHJldHVybiBVSW50NjQoNDIpCiAgICBpbnQgNDIKICAgIHJldHN1YgoKCi8vIHRlc3RfY2FzZXMudHlwZWRfYWJpX2NhbGwubG9nZ2VyLkxvZ2dlci5sb2dfdWludDY0KHZhbHVlOiBieXRlcykgLT4gdm9pZDoKbG9nX3VpbnQ2NDoKICAgIC8vIHR5cGVkX2FiaV9jYWxsL2xvZ2dlci5weToyOS0zMAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKG5hbWU9TE9HX01FVEhPRF9OQU1FKQogICAgLy8gZGVmIGxvZ191aW50NjQoc2VsZiwgdmFsdWU6IGFyYzQuVUludDY0KSAtPiBOb25lOgogICAgcHJvdG8gMSAwCiAgICAvLyB0eXBlZF9hYmlfY2FsbC9sb2dnZXIucHk6MzEKICAgIC8vIGxvZyh2YWx1ZSkKICAgIGZyYW1lX2RpZyAtMQogICAgbG9nCiAgICByZXRzdWIKCgovLyB0ZXN0X2Nhc2VzLnR5cGVkX2FiaV9jYWxsLmxvZ2dlci5Mb2dnZXIubG9nX3VpbnQ1MTIodmFsdWU6IGJ5dGVzKSAtPiB2b2lkOgpsb2dfdWludDUxMjoKICAgIC8vIHR5cGVkX2FiaV9jYWxsL2xvZ2dlci5weTozMy0zNAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKG5hbWU9TE9HX01FVEhPRF9OQU1FKQogICAgLy8gZGVmIGxvZ191aW50NTEyKHNlbGYsIHZhbHVlOiBhcmM0LlVJbnQ1MTIpIC0+IE5vbmU6CiAgICBwcm90byAxIDAKICAgIC8vIHR5cGVkX2FiaV9jYWxsL2xvZ2dlci5weTozNQogICAgLy8gbG9nKHZhbHVlKQogICAgZnJhbWVfZGlnIC0xCiAgICBsb2cKICAgIHJldHN1YgoKCi8vIHRlc3RfY2FzZXMudHlwZWRfYWJpX2NhbGwubG9nZ2VyLkxvZ2dlci5sb2dfc3RyaW5nKHZhbHVlOiBieXRlcykgLT4gdm9pZDoKbG9nX3N0cmluZzoKICAgIC8vIHR5cGVkX2FiaV9jYWxsL2xvZ2dlci5weTozNy0zOAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKG5hbWU9TE9HX01FVEhPRF9OQU1FKQogICAgLy8gZGVmIGxvZ19zdHJpbmcoc2VsZiwgdmFsdWU6IGFyYzQuU3RyaW5nKSAtPiBOb25lOgogICAgcHJvdG8gMSAwCiAgICAvLyB0eXBlZF9hYmlfY2FsbC9sb2dnZXIucHk6MzkKICAgIC8vIGxvZyh2YWx1ZS5uYXRpdmUpICAjIGRlY29kZSB0byByZW1vdmUgaGVhZGVyCiAgICBmcmFtZV9kaWcgLTEKICAgIGV4dHJhY3QgMiAwCiAgICBsb2cKICAgIHJldHN1YgoKCi8vIHRlc3RfY2FzZXMudHlwZWRfYWJpX2NhbGwubG9nZ2VyLkxvZ2dlci5sb2dfYm9vbCh2YWx1ZTogYnl0ZXMpIC0+IHZvaWQ6CmxvZ19ib29sOgogICAgLy8gdHlwZWRfYWJpX2NhbGwvbG9nZ2VyLnB5OjQxLTQyCiAgICAvLyBAYXJjNC5hYmltZXRob2QobmFtZT1MT0dfTUVUSE9EX05BTUUpCiAgICAvLyBkZWYgbG9nX2Jvb2woc2VsZiwgdmFsdWU6IGFyYzQuQm9vbCkgLT4gTm9uZToKICAgIHByb3RvIDEgMAogICAgLy8gdHlwZWRfYWJpX2NhbGwvbG9nZ2VyLnB5OjQzCiAgICAvLyBsb2coQnl0ZXMoYiJUcnVlIikgaWYgdmFsdWUubmF0aXZlIGVsc2UgQnl0ZXMoYiJGYWxzZSIpKQogICAgZnJhbWVfZGlnIC0xCiAgICBpbnQgMAogICAgZ2V0Yml0CiAgICBieXRlIDB4NDY2MTZjNzM2NQogICAgYnl0ZSAweDU0NzI3NTY1CiAgICB1bmNvdmVyIDIKICAgIHNlbGVjdAogICAgbG9nCiAgICByZXRzdWIKCgovLyB0ZXN0X2Nhc2VzLnR5cGVkX2FiaV9jYWxsLmxvZ2dlci5Mb2dnZXIubG9nX2J5dGVzKHZhbHVlOiBieXRlcykgLT4gdm9pZDoKbG9nX2J5dGVzOgogICAgLy8gdHlwZWRfYWJpX2NhbGwvbG9nZ2VyLnB5OjQ1LTQ2CiAgICAvLyBAYXJjNC5hYmltZXRob2QobmFtZT1MT0dfTUVUSE9EX05BTUUpCiAgICAvLyBkZWYgbG9nX2J5dGVzKHNlbGYsIHZhbHVlOiBhcmM0LkR5bmFtaWNCeXRlcykgLT4gTm9uZToKICAgIHByb3RvIDEgMAogICAgLy8gdHlwZWRfYWJpX2NhbGwvbG9nZ2VyLnB5OjQ3CiAgICAvLyBsb2codmFsdWUubmF0aXZlKQogICAgZnJhbWVfZGlnIC0xCiAgICBleHRyYWN0IDIgMAogICAgbG9nCiAgICByZXRzdWIKCgovLyB0ZXN0X2Nhc2VzLnR5cGVkX2FiaV9jYWxsLmxvZ2dlci5Mb2dnZXIubG9nX2Fzc2V0X2FjY291bnRfYXBwKGFzc2V0OiB1aW50NjQsIGFjY291bnQ6IGJ5dGVzLCBhcHA6IHVpbnQ2NCkgLT4gdm9pZDoKbG9nX2Fzc2V0X2FjY291bnRfYXBwOgogICAgLy8gdHlwZWRfYWJpX2NhbGwvbG9nZ2VyLnB5OjQ5LTUwCiAgICAvLyBAYXJjNC5hYmltZXRob2QobmFtZT1MT0dfTUVUSE9EX05BTUUpCiAgICAvLyBkZWYgbG9nX2Fzc2V0X2FjY291bnRfYXBwKHNlbGYsIGFzc2V0OiBBc3NldCwgYWNjb3VudDogQWNjb3VudCwgYXBwOiBBcHBsaWNhdGlvbikgLT4gTm9uZToKICAgIHByb3RvIDMgMAogICAgLy8gdHlwZWRfYWJpX2NhbGwvbG9nZ2VyLnB5OjUxCiAgICAvLyBsb2coYXNzZXQubmFtZSwgYWNjb3VudC5ieXRlcywgYXBwLmFkZHJlc3MpCiAgICBmcmFtZV9kaWcgLTMKICAgIGFzc2V0X3BhcmFtc19nZXQgQXNzZXROYW1lCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTIKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC0xCiAgICBhcHBfcGFyYW1zX2dldCBBcHBBZGRyZXNzCiAgICBhc3NlcnQgLy8gYXBwbGljYXRpb24gZXhpc3RzCiAgICBjb25jYXQKICAgIGxvZwogICAgcmV0c3ViCgoKLy8gdGVzdF9jYXNlcy50eXBlZF9hYmlfY2FsbC5sb2dnZXIuTG9nZ2VyLmVjaG9fbmF0aXZlX3N0cmluZyh2YWx1ZTogYnl0ZXMpIC0+IGJ5dGVzOgplY2hvX25hdGl2ZV9zdHJpbmc6CiAgICAvLyB0eXBlZF9hYmlfY2FsbC9sb2dnZXIucHk6NTMtNTQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgLy8gZGVmIGVjaG9fbmF0aXZlX3N0cmluZyhzZWxmLCB2YWx1ZTogU3RyaW5nKSAtPiBTdHJpbmc6CiAgICBwcm90byAxIDEKICAgIC8vIHR5cGVkX2FiaV9jYWxsL2xvZ2dlci5weTo1NQogICAgLy8gcmV0dXJuICJlY2hvOiAiICsgdmFsdWUKICAgIGJ5dGUgImVjaG86ICIKICAgIGZyYW1lX2RpZyAtMQogICAgY29uY2F0CiAgICByZXRzdWIKCgovLyB0ZXN0X2Nhc2VzLnR5cGVkX2FiaV9jYWxsLmxvZ2dlci5Mb2dnZXIuZWNob19uYXRpdmVfYnl0ZXModmFsdWU6IGJ5dGVzKSAtPiBieXRlczoKZWNob19uYXRpdmVfYnl0ZXM6CiAgICAvLyB0eXBlZF9hYmlfY2FsbC9sb2dnZXIucHk6NTctNTgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgLy8gZGVmIGVjaG9fbmF0aXZlX2J5dGVzKHNlbGYsIHZhbHVlOiBCeXRlcykgLT4gQnl0ZXM6CiAgICBwcm90byAxIDEKICAgIC8vIHR5cGVkX2FiaV9jYWxsL2xvZ2dlci5weTo1OQogICAgLy8gcmV0dXJuIGIiZWNobzogIiArIHZhbHVlCiAgICBieXRlIDB4NjU2MzY4NmYzYTIwCiAgICBmcmFtZV9kaWcgLTEKICAgIGNvbmNhdAogICAgcmV0c3ViCgoKLy8gdGVzdF9jYXNlcy50eXBlZF9hYmlfY2FsbC5sb2dnZXIuTG9nZ2VyLmVjaG9fbmF0aXZlX3VpbnQ2NCh2YWx1ZTogdWludDY0KSAtPiB1aW50NjQ6CmVjaG9fbmF0aXZlX3VpbnQ2NDoKICAgIC8vIHR5cGVkX2FiaV9jYWxsL2xvZ2dlci5weTo2MS02MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICAvLyBkZWYgZWNob19uYXRpdmVfdWludDY0KHNlbGYsIHZhbHVlOiBVSW50NjQpIC0+IFVJbnQ2NDoKICAgIHByb3RvIDEgMQogICAgLy8gdHlwZWRfYWJpX2NhbGwvbG9nZ2VyLnB5OjYzCiAgICAvLyByZXR1cm4gdmFsdWUgKyAxCiAgICBmcmFtZV9kaWcgLTEKICAgIGludCAxCiAgICArCiAgICByZXRzdWIKCgovLyB0ZXN0X2Nhc2VzLnR5cGVkX2FiaV9jYWxsLmxvZ2dlci5Mb2dnZXIuZWNob19uYXRpdmVfYmlndWludCh2YWx1ZTogYnl0ZXMpIC0+IGJ5dGVzOgplY2hvX25hdGl2ZV9iaWd1aW50OgogICAgLy8gdHlwZWRfYWJpX2NhbGwvbG9nZ2VyLnB5OjY1LTY2CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIC8vIGRlZiBlY2hvX25hdGl2ZV9iaWd1aW50KHNlbGYsIHZhbHVlOiBCaWdVSW50KSAtPiBCaWdVSW50OgogICAgcHJvdG8gMSAxCiAgICAvLyB0eXBlZF9hYmlfY2FsbC9sb2dnZXIucHk6NjcKICAgIC8vIHJldHVybiB2YWx1ZSArIDEKICAgIGZyYW1lX2RpZyAtMQogICAgYnl0ZSAweDAxCiAgICBiKwogICAgcmV0c3ViCgoKLy8gdGVzdF9jYXNlcy50eXBlZF9hYmlfY2FsbC5sb2dnZXIuTG9nZ2VyLmVjaG9fbmF0aXZlX3R1cGxlKHM6IGJ5dGVzLCBiOiBieXRlcywgdTogdWludDY0LCBidTogYnl0ZXMpIC0+IGJ5dGVzLCBieXRlcywgdWludDY0LCBieXRlczoKZWNob19uYXRpdmVfdHVwbGU6CiAgICAvLyB0eXBlZF9hYmlfY2FsbC9sb2dnZXIucHk6NjktNzIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgLy8gZGVmIGVjaG9fbmF0aXZlX3R1cGxlKAogICAgLy8gICAgIHNlbGYsIHM6IFN0cmluZywgYjogQnl0ZXMsIHU6IFVJbnQ2NCwgYnU6IEJpZ1VJbnQKICAgIC8vICkgLT4gdHVwbGVbU3RyaW5nLCBCeXRlcywgVUludDY0LCBCaWdVSW50XToKICAgIHByb3RvIDQgNAogICAgLy8gdHlwZWRfYWJpX2NhbGwvbG9nZ2VyLnB5OjczCiAgICAvLyByZXR1cm4gImVjaG86ICIgKyBzLCBiImVjaG86ICIgKyBiLCB1ICsgMSwgYnUgKyAxCiAgICBieXRlICJlY2hvOiAiCiAgICBmcmFtZV9kaWcgLTQKICAgIGNvbmNhdAogICAgYnl0ZSAweDY1NjM2ODZmM2EyMAogICAgZnJhbWVfZGlnIC0zCiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtMgogICAgaW50IDEKICAgICsKICAgIGZyYW1lX2RpZyAtMQogICAgYnl0ZSAweDAxCiAgICBiKwogICAgcmV0c3ViCgoKLy8gdGVzdF9jYXNlcy50eXBlZF9hYmlfY2FsbC5sb2dnZXIuTG9nZ2VyLnJldHVybl9hcmdzX2FmdGVyXzE0dGgoX2ExOiBieXRlcywgX2EyOiBieXRlcywgX2EzOiBieXRlcywgX2E0OiBieXRlcywgX2E1OiBieXRlcywgX2E2OiBieXRlcywgX2E3OiBieXRlcywgX2E4OiBieXRlcywgX2E5OiBieXRlcywgX2ExMDogYnl0ZXMsIF9hMTE6IGJ5dGVzLCBfYTEyOiBieXRlcywgX2ExMzogYnl0ZXMsIF9hMTQ6IGJ5dGVzLCBhMTU6IGJ5dGVzLCBhMTY6IGJ5dGVzLCBhMTc6IGJ5dGVzLCBhMTg6IGJ5dGVzLCBhMTk6IGJ5dGVzLCBhMjA6IGJ5dGVzKSAtPiBieXRlczoKcmV0dXJuX2FyZ3NfYWZ0ZXJfMTR0aDoKICAgIC8vIHR5cGVkX2FiaV9jYWxsL2xvZ2dlci5weTo3NS05OAogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICAvLyBkZWYgcmV0dXJuX2FyZ3NfYWZ0ZXJfMTR0aCgKICAgIC8vICAgICBzZWxmLAogICAgLy8gICAgIF9hMTogYXJjNC5VSW50NjQsCiAgICAvLyAgICAgX2EyOiBhcmM0LlVJbnQ2NCwKICAgIC8vICAgICBfYTM6IGFyYzQuVUludDY0LAogICAgLy8gICAgIF9hNDogYXJjNC5VSW50NjQsCiAgICAvLyAgICAgX2E1OiBhcmM0LlVJbnQ2NCwKICAgIC8vICAgICBfYTY6IGFyYzQuVUludDY0LAogICAgLy8gICAgIF9hNzogYXJjNC5VSW50NjQsCiAgICAvLyAgICAgX2E4OiBhcmM0LlVJbnQ2NCwKICAgIC8vICAgICBfYTk6IGFyYzQuVUludDY0LAogICAgLy8gICAgIF9hMTA6IGFyYzQuVUludDY0LAogICAgLy8gICAgIF9hMTE6IGFyYzQuVUludDY0LAogICAgLy8gICAgIF9hMTI6IGFyYzQuVUludDY0LAogICAgLy8gICAgIF9hMTM6IGFyYzQuVUludDY0LAogICAgLy8gICAgIF9hMTQ6IGFyYzQuVUludDY0LAogICAgLy8gICAgIGExNTogYXJjNC5VSW50OCwKICAgIC8vICAgICBhMTY6IGFyYzQuVUludDgsCiAgICAvLyAgICAgYTE3OiBhcmM0LlVJbnQ4LAogICAgLy8gICAgIGExODogYXJjNC5VSW50OCwKICAgIC8vICAgICBhMTk6IGFyYzQuVHVwbGVbYXJjNC5VSW50OCwgYXJjNC5VSW50OCwgYXJjNC5VSW50OCwgYXJjNC5VSW50OF0sCiAgICAvLyAgICAgYTIwOiBhcmM0LlVJbnQ4LAogICAgLy8gKSAtPiBhcmM0LkR5bmFtaWNCeXRlczoKICAgIHByb3RvIDIwIDEKICAgIC8vIHR5cGVkX2FiaV9jYWxsL2xvZ2dlci5weTo5OQogICAgLy8gbGFzdF9hcmcgPSBhcmM0LlR1cGxlKChhMTUsIGExNiwgYTE3LCBhMTgsIGExOSwgYTIwKSkKICAgIGZyYW1lX2RpZyAtNgogICAgZnJhbWVfZGlnIC01CiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtNAogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTMKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC0yCiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtMQogICAgY29uY2F0CiAgICAvLyB0eXBlZF9hYmlfY2FsbC9sb2dnZXIucHk6MTAwCiAgICAvLyBhc3NlcnQgVHhuLmFwcGxpY2F0aW9uX2FyZ3MoMTUpID09IGxhc3RfYXJnLmJ5dGVzCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxNQogICAgZGlnIDEKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHR5cGVkX2FiaV9jYWxsL2xvZ2dlci5weToxMDEKICAgIC8vIHJldHVybiBhcmM0LkR5bmFtaWNCeXRlcyhsYXN0X2FyZy5ieXRlcykKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICByZXRzdWIK", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0X2Nhc2VzLnR5cGVkX2FiaV9jYWxsLmxvZ2dlci5Mb2dnZXIuY2xlYXJfc3RhdGVfcHJvZ3JhbToKICAgIC8vIHR5cGVkX2FiaV9jYWxsL2xvZ2dlci5weToyMAogICAgLy8gY2xhc3MgTG9nZ2VyKEFSQzRDb250cmFjdCk6CiAgICBpbnQgMQogICAgcmV0dXJuCg==" }, "state": { @@ -106,6 +111,14 @@ "type": "string" } }, + { + "name": "no_args", + "args": [], + "readonly": false, + "returns": { + "type": "uint64" + } + }, { "name": "log", "args": [ diff --git a/test_cases/typed_abi_call/out/Logger.destructured.ir b/test_cases/typed_abi_call/out/Logger.destructured.ir index 4f3e6befb4..a30c0643a4 100644 --- a/test_cases/typed_abi_call/out/Logger.destructured.ir +++ b/test_cases/typed_abi_call/out/Logger.destructured.ir @@ -3,10 +3,10 @@ contract test_cases.typed_abi_call.logger.Logger: subroutine test_cases.typed_abi_call.logger.Logger.approval_program() -> bool: block@0: // L20 let tmp%0#0: bool = (txn NumAppArgs) - goto tmp%0#0 ? block@1 : block@17 + goto tmp%0#0 ? block@1 : block@18 block@1: // abi_routing_L20 let tmp%1#0: bytes = (txna ApplicationArgs 0) - switch tmp%1#0 {method "echo(string)string" => block@2, method "log(uint64)void" => block@3, method "log(uint512)void" => block@4, method "log(string)void" => block@5, method "log(bool)void" => block@6, method "log(byte[])void" => block@7, method "log(asset,account,application)void" => block@8, method "echo_native_string(string)string" => block@9, method "echo_native_bytes(byte[])byte[]" => block@10, method "echo_native_uint64(uint64)uint64" => block@11, method "echo_native_biguint(uint512)uint512" => block@12, method "echo_native_tuple(string,byte[],uint64,uint512)(string,byte[],uint64,uint512)" => block@13, method "return_args_after_14th(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint8,uint8,uint8,uint8,(uint8,uint8,uint8,uint8),uint8)byte[]" => block@14, * => fail // reject transaction} + switch tmp%1#0 {method "echo(string)string" => block@2, method "no_args()uint64" => block@3, method "log(uint64)void" => block@4, method "log(uint512)void" => block@5, method "log(string)void" => block@6, method "log(bool)void" => block@7, method "log(byte[])void" => block@8, method "log(asset,account,application)void" => block@9, method "echo_native_string(string)string" => block@10, method "echo_native_bytes(byte[])byte[]" => block@11, method "echo_native_uint64(uint64)uint64" => block@12, method "echo_native_biguint(uint512)uint512" => block@13, method "echo_native_tuple(string,byte[],uint64,uint512)(string,byte[],uint64,uint512)" => block@14, method "return_args_after_14th(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint8,uint8,uint8,uint8,(uint8,uint8,uint8,uint8),uint8)byte[]" => block@15, * => fail // reject transaction} block@2: // echo_route_L21 let tmp%2#0: uint64 = (txn OnCompletion) let tmp%3#0: bool = (! tmp%2#0) @@ -18,143 +18,154 @@ contract test_cases.typed_abi_call.logger.Logger: let tmp%7#0: bytes = (concat 0x151f7c75 tmp%6#0) (log tmp%7#0) return 1u - block@3: // log_route_L25 + block@3: // no_args_route_L25 let tmp%8#0: uint64 = (txn OnCompletion) let tmp%9#0: bool = (! tmp%8#0) (assert tmp%9#0) // OnCompletion is NoOp let tmp%10#0: bool = (txn ApplicationID) (assert tmp%10#0) // is not creating - let tmp%11#0: bytes = (txna ApplicationArgs 1) - test_cases.typed_abi_call.logger.Logger.log_uint64(tmp%11#0) + let tmp%11#0: uint64 = test_cases.typed_abi_call.logger.Logger.no_args() + let val_as_bytes%0#0: bytes = (itob tmp%11#0) + let tmp%12#0: bytes = (concat 0x151f7c75 val_as_bytes%0#0) + (log tmp%12#0) return 1u block@4: // log_route_L29 - let tmp%12#0: uint64 = (txn OnCompletion) - let tmp%13#0: bool = (! tmp%12#0) - (assert tmp%13#0) // OnCompletion is NoOp - let tmp%14#0: bool = (txn ApplicationID) - (assert tmp%14#0) // is not creating - let tmp%15#0: bytes = (txna ApplicationArgs 1) - test_cases.typed_abi_call.logger.Logger.log_uint512(tmp%15#0) + let tmp%13#0: uint64 = (txn OnCompletion) + let tmp%14#0: bool = (! tmp%13#0) + (assert tmp%14#0) // OnCompletion is NoOp + let tmp%15#0: bool = (txn ApplicationID) + (assert tmp%15#0) // is not creating + let tmp%16#0: bytes = (txna ApplicationArgs 1) + test_cases.typed_abi_call.logger.Logger.log_uint64(tmp%16#0) return 1u block@5: // log_route_L33 - let tmp%16#0: uint64 = (txn OnCompletion) - let tmp%17#0: bool = (! tmp%16#0) - (assert tmp%17#0) // OnCompletion is NoOp - let tmp%18#0: bool = (txn ApplicationID) - (assert tmp%18#0) // is not creating - let tmp%19#0: bytes = (txna ApplicationArgs 1) - test_cases.typed_abi_call.logger.Logger.log_string(tmp%19#0) + let tmp%17#0: uint64 = (txn OnCompletion) + let tmp%18#0: bool = (! tmp%17#0) + (assert tmp%18#0) // OnCompletion is NoOp + let tmp%19#0: bool = (txn ApplicationID) + (assert tmp%19#0) // is not creating + let tmp%20#0: bytes = (txna ApplicationArgs 1) + test_cases.typed_abi_call.logger.Logger.log_uint512(tmp%20#0) return 1u block@6: // log_route_L37 - let tmp%20#0: uint64 = (txn OnCompletion) - let tmp%21#0: bool = (! tmp%20#0) - (assert tmp%21#0) // OnCompletion is NoOp - let tmp%22#0: bool = (txn ApplicationID) - (assert tmp%22#0) // is not creating - let tmp%23#0: bytes = (txna ApplicationArgs 1) - test_cases.typed_abi_call.logger.Logger.log_bool(tmp%23#0) + let tmp%21#0: uint64 = (txn OnCompletion) + let tmp%22#0: bool = (! tmp%21#0) + (assert tmp%22#0) // OnCompletion is NoOp + let tmp%23#0: bool = (txn ApplicationID) + (assert tmp%23#0) // is not creating + let tmp%24#0: bytes = (txna ApplicationArgs 1) + test_cases.typed_abi_call.logger.Logger.log_string(tmp%24#0) return 1u block@7: // log_route_L41 - let tmp%24#0: uint64 = (txn OnCompletion) - let tmp%25#0: bool = (! tmp%24#0) - (assert tmp%25#0) // OnCompletion is NoOp - let tmp%26#0: bool = (txn ApplicationID) - (assert tmp%26#0) // is not creating - let tmp%27#0: bytes = (txna ApplicationArgs 1) - test_cases.typed_abi_call.logger.Logger.log_bytes(tmp%27#0) + let tmp%25#0: uint64 = (txn OnCompletion) + let tmp%26#0: bool = (! tmp%25#0) + (assert tmp%26#0) // OnCompletion is NoOp + let tmp%27#0: bool = (txn ApplicationID) + (assert tmp%27#0) // is not creating + let tmp%28#0: bytes = (txna ApplicationArgs 1) + test_cases.typed_abi_call.logger.Logger.log_bool(tmp%28#0) return 1u block@8: // log_route_L45 - let tmp%28#0: uint64 = (txn OnCompletion) - let tmp%29#0: bool = (! tmp%28#0) - (assert tmp%29#0) // OnCompletion is NoOp - let tmp%30#0: bool = (txn ApplicationID) - (assert tmp%30#0) // is not creating - let tmp%31#0: bytes = (txna ApplicationArgs 1) - let tmp%32#0: uint64 = (btoi tmp%31#0) - let tmp%33#0: uint64 = ((txnas Assets) tmp%32#0) - let tmp%34#0: bytes = (txna ApplicationArgs 2) - let tmp%35#0: uint64 = (btoi tmp%34#0) - let tmp%36#0: bytes = ((txnas Accounts) tmp%35#0) - let tmp%37#0: bytes = (txna ApplicationArgs 3) - let tmp%38#0: uint64 = (btoi tmp%37#0) - let tmp%39#0: uint64 = ((txnas Applications) tmp%38#0) - test_cases.typed_abi_call.logger.Logger.log_asset_account_app(tmp%33#0, tmp%36#0, tmp%39#0) + let tmp%29#0: uint64 = (txn OnCompletion) + let tmp%30#0: bool = (! tmp%29#0) + (assert tmp%30#0) // OnCompletion is NoOp + let tmp%31#0: bool = (txn ApplicationID) + (assert tmp%31#0) // is not creating + let tmp%32#0: bytes = (txna ApplicationArgs 1) + test_cases.typed_abi_call.logger.Logger.log_bytes(tmp%32#0) return 1u - block@9: // echo_native_string_route_L49 - let tmp%40#0: uint64 = (txn OnCompletion) - let tmp%41#0: bool = (! tmp%40#0) - (assert tmp%41#0) // OnCompletion is NoOp - let tmp%42#0: bool = (txn ApplicationID) - (assert tmp%42#0) // is not creating - let tmp%43#0: bytes = (txna ApplicationArgs 1) - let tmp%44#0: bytes = ((extract 2 0) tmp%43#0) - let tmp%45#0: bytes = test_cases.typed_abi_call.logger.Logger.echo_native_string(tmp%44#0) - let length%0#0: uint64 = (len tmp%45#0) + block@9: // log_route_L49 + let tmp%33#0: uint64 = (txn OnCompletion) + let tmp%34#0: bool = (! tmp%33#0) + (assert tmp%34#0) // OnCompletion is NoOp + let tmp%35#0: bool = (txn ApplicationID) + (assert tmp%35#0) // is not creating + let tmp%36#0: bytes = (txna ApplicationArgs 1) + let tmp%37#0: uint64 = (btoi tmp%36#0) + let tmp%38#0: uint64 = ((txnas Assets) tmp%37#0) + let tmp%39#0: bytes = (txna ApplicationArgs 2) + let tmp%40#0: uint64 = (btoi tmp%39#0) + let tmp%41#0: bytes = ((txnas Accounts) tmp%40#0) + let tmp%42#0: bytes = (txna ApplicationArgs 3) + let tmp%43#0: uint64 = (btoi tmp%42#0) + let tmp%44#0: uint64 = ((txnas Applications) tmp%43#0) + test_cases.typed_abi_call.logger.Logger.log_asset_account_app(tmp%38#0, tmp%41#0, tmp%44#0) + return 1u + block@10: // echo_native_string_route_L53 + let tmp%45#0: uint64 = (txn OnCompletion) + let tmp%46#0: bool = (! tmp%45#0) + (assert tmp%46#0) // OnCompletion is NoOp + let tmp%47#0: bool = (txn ApplicationID) + (assert tmp%47#0) // is not creating + let tmp%48#0: bytes = (txna ApplicationArgs 1) + let tmp%49#0: bytes = ((extract 2 0) tmp%48#0) + let tmp%50#0: bytes = test_cases.typed_abi_call.logger.Logger.echo_native_string(tmp%49#0) + let length%0#0: uint64 = (len tmp%50#0) 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 tmp%45#0) - let tmp%46#0: bytes = (concat 0x151f7c75 encoded_value%0#0) - (log tmp%46#0) + let encoded_value%0#0: bytes = (concat length_uint16%0#0 tmp%50#0) + let tmp%51#0: bytes = (concat 0x151f7c75 encoded_value%0#0) + (log tmp%51#0) return 1u - block@10: // echo_native_bytes_route_L53 - let tmp%47#0: uint64 = (txn OnCompletion) - let tmp%48#0: bool = (! tmp%47#0) - (assert tmp%48#0) // OnCompletion is NoOp - let tmp%49#0: bool = (txn ApplicationID) - (assert tmp%49#0) // is not creating - let tmp%50#0: bytes = (txna ApplicationArgs 1) - let tmp%51#0: bytes = ((extract 2 0) tmp%50#0) - let tmp%52#0: bytes = test_cases.typed_abi_call.logger.Logger.echo_native_bytes(tmp%51#0) - let length%1#0: uint64 = (len tmp%52#0) + block@11: // echo_native_bytes_route_L57 + let tmp%52#0: uint64 = (txn OnCompletion) + let tmp%53#0: bool = (! tmp%52#0) + (assert tmp%53#0) // OnCompletion is NoOp + let tmp%54#0: bool = (txn ApplicationID) + (assert tmp%54#0) // is not creating + let tmp%55#0: bytes = (txna ApplicationArgs 1) + let tmp%56#0: bytes = ((extract 2 0) tmp%55#0) + let tmp%57#0: bytes = test_cases.typed_abi_call.logger.Logger.echo_native_bytes(tmp%56#0) + let length%1#0: uint64 = (len tmp%57#0) let as_bytes%1#0: bytes = (itob length%1#0) let length_uint16%1#0: bytes = ((extract 6 2) as_bytes%1#0) - let encoded_value%1#0: bytes = (concat length_uint16%1#0 tmp%52#0) - let tmp%53#0: bytes = (concat 0x151f7c75 encoded_value%1#0) - (log tmp%53#0) + let encoded_value%1#0: bytes = (concat length_uint16%1#0 tmp%57#0) + let tmp%58#0: bytes = (concat 0x151f7c75 encoded_value%1#0) + (log tmp%58#0) return 1u - block@11: // echo_native_uint64_route_L57 - let tmp%54#0: uint64 = (txn OnCompletion) - let tmp%55#0: bool = (! tmp%54#0) - (assert tmp%55#0) // OnCompletion is NoOp - let tmp%56#0: bool = (txn ApplicationID) - (assert tmp%56#0) // is not creating - let tmp%57#0: bytes = (txna ApplicationArgs 1) - let tmp%58#0: uint64 = (btoi tmp%57#0) - let tmp%59#0: uint64 = test_cases.typed_abi_call.logger.Logger.echo_native_uint64(tmp%58#0) - let val_as_bytes%0#0: bytes = (itob tmp%59#0) - let tmp%60#0: bytes = (concat 0x151f7c75 val_as_bytes%0#0) - (log tmp%60#0) + block@12: // echo_native_uint64_route_L61 + let tmp%59#0: uint64 = (txn OnCompletion) + let tmp%60#0: bool = (! tmp%59#0) + (assert tmp%60#0) // OnCompletion is NoOp + let tmp%61#0: bool = (txn ApplicationID) + (assert tmp%61#0) // is not creating + let tmp%62#0: bytes = (txna ApplicationArgs 1) + let tmp%63#0: uint64 = (btoi tmp%62#0) + let tmp%64#0: uint64 = test_cases.typed_abi_call.logger.Logger.echo_native_uint64(tmp%63#0) + let val_as_bytes%1#0: bytes = (itob tmp%64#0) + let tmp%65#0: bytes = (concat 0x151f7c75 val_as_bytes%1#0) + (log tmp%65#0) return 1u - block@12: // echo_native_biguint_route_L61 - let tmp%61#0: uint64 = (txn OnCompletion) - let tmp%62#0: bool = (! tmp%61#0) - (assert tmp%62#0) // OnCompletion is NoOp - let tmp%63#0: bool = (txn ApplicationID) - (assert tmp%63#0) // is not creating - let tmp%64#0: bytes = (txna ApplicationArgs 1) - let tmp%65#0: biguint = test_cases.typed_abi_call.logger.Logger.echo_native_biguint(tmp%64#0) - let len_%0#0: uint64 = (len tmp%65#0) + block@13: // echo_native_biguint_route_L65 + let tmp%66#0: uint64 = (txn OnCompletion) + let tmp%67#0: bool = (! tmp%66#0) + (assert tmp%67#0) // OnCompletion is NoOp + let tmp%68#0: bool = (txn ApplicationID) + (assert tmp%68#0) // is not creating + let tmp%69#0: bytes = (txna ApplicationArgs 1) + let tmp%70#0: biguint = test_cases.typed_abi_call.logger.Logger.echo_native_biguint(tmp%69#0) + let len_%0#0: uint64 = (len tmp%70#0) let no_overflow%0#0: bool = (<= len_%0#0 64u) (assert no_overflow%0#0) // overflow let b_zeros%0#0: bytes = (bzero 64u) - let tmp%66#0: bytes = (b| tmp%65#0 b_zeros%0#0) - let tmp%67#0: bytes = (concat 0x151f7c75 tmp%66#0) - (log tmp%67#0) + let tmp%71#0: bytes = (b| tmp%70#0 b_zeros%0#0) + let tmp%72#0: bytes = (concat 0x151f7c75 tmp%71#0) + (log tmp%72#0) return 1u - block@13: // echo_native_tuple_route_L65 - let tmp%68#0: uint64 = (txn OnCompletion) - let tmp%69#0: bool = (! tmp%68#0) - (assert tmp%69#0) // OnCompletion is NoOp - let tmp%70#0: bool = (txn ApplicationID) - (assert tmp%70#0) // is not creating - let tmp%71#0: bytes = (txna ApplicationArgs 1) - let tmp%72#0: bytes = ((extract 2 0) tmp%71#0) - let tmp%73#0: bytes = (txna ApplicationArgs 2) - let tmp%74#0: bytes = ((extract 2 0) tmp%73#0) - let tmp%75#0: bytes = (txna ApplicationArgs 3) - let tmp%76#0: uint64 = (btoi tmp%75#0) - let tmp%77#0: bytes = (txna ApplicationArgs 4) - let (awst_tmp%0#0: bytes, awst_tmp%1#0: bytes, awst_tmp%2#0: uint64, awst_tmp%3#0: biguint) = test_cases.typed_abi_call.logger.Logger.echo_native_tuple(tmp%72#0, tmp%74#0, tmp%76#0, tmp%77#0) + block@14: // echo_native_tuple_route_L69 + let tmp%73#0: uint64 = (txn OnCompletion) + let tmp%74#0: bool = (! tmp%73#0) + (assert tmp%74#0) // OnCompletion is NoOp + let tmp%75#0: bool = (txn ApplicationID) + (assert tmp%75#0) // is not creating + let tmp%76#0: bytes = (txna ApplicationArgs 1) + let tmp%77#0: bytes = ((extract 2 0) tmp%76#0) + let tmp%78#0: bytes = (txna ApplicationArgs 2) + let tmp%79#0: bytes = ((extract 2 0) tmp%78#0) + let tmp%80#0: bytes = (txna ApplicationArgs 3) + let tmp%81#0: uint64 = (btoi tmp%80#0) + let tmp%82#0: bytes = (txna ApplicationArgs 4) + let (awst_tmp%0#0: bytes, awst_tmp%1#0: bytes, awst_tmp%2#0: uint64, awst_tmp%3#0: biguint) = test_cases.typed_abi_call.logger.Logger.echo_native_tuple(tmp%77#0, tmp%79#0, tmp%81#0, tmp%82#0) let length%2#0: uint64 = (len awst_tmp%0#0) let as_bytes%2#0: bytes = (itob length%2#0) let length_uint16%2#0: bytes = ((extract 6 2) as_bytes%2#0) @@ -163,67 +174,67 @@ contract test_cases.typed_abi_call.logger.Logger: let as_bytes%3#0: bytes = (itob length%3#0) let length_uint16%3#0: bytes = ((extract 6 2) as_bytes%3#0) let encoded_value%3#0: bytes = (concat length_uint16%3#0 awst_tmp%1#0) - let val_as_bytes%1#0: bytes = (itob awst_tmp%2#0) + let val_as_bytes%2#0: bytes = (itob awst_tmp%2#0) let len_%1#0: uint64 = (len awst_tmp%3#0) let no_overflow%1#0: bool = (<= len_%1#0 64u) (assert no_overflow%1#0) // overflow let b_zeros%1#0: bytes = (bzero 64u) - let tmp%78#0: bytes = (b| awst_tmp%3#0 b_zeros%1#0) + let tmp%83#0: bytes = (b| awst_tmp%3#0 b_zeros%1#0) let data_length%0#0: uint64 = (len encoded_value%2#0) let current_tail_offset%1#0: uint64 = (+ 76u data_length%0#0) let as_bytes%5#0: bytes = (itob current_tail_offset%1#0) let offset_as_uint16%1#0: bytes = ((extract 6 2) as_bytes%5#0) let encoded_tuple_buffer%2#0: bytes = (concat 0x004c offset_as_uint16%1#0) - let encoded_tuple_buffer%3#0: bytes = (concat encoded_tuple_buffer%2#0 val_as_bytes%1#0) - let encoded_tuple_buffer%4#0: bytes = (concat encoded_tuple_buffer%3#0 tmp%78#0) + let encoded_tuple_buffer%3#0: bytes = (concat encoded_tuple_buffer%2#0 val_as_bytes%2#0) + let encoded_tuple_buffer%4#0: bytes = (concat encoded_tuple_buffer%3#0 tmp%83#0) let encoded_tuple_buffer%5#0: bytes = (concat encoded_tuple_buffer%4#0 encoded_value%2#0) let encoded_tuple_buffer%6#0: bytes = (concat encoded_tuple_buffer%5#0 encoded_value%3#0) - let tmp%79#0: bytes = (concat 0x151f7c75 encoded_tuple_buffer%6#0) - (log tmp%79#0) + let tmp%84#0: bytes = (concat 0x151f7c75 encoded_tuple_buffer%6#0) + (log tmp%84#0) return 1u - block@14: // return_args_after_14th_route_L71 - let tmp%80#0: uint64 = (txn OnCompletion) - let tmp%81#0: bool = (! tmp%80#0) - (assert tmp%81#0) // OnCompletion is NoOp - let tmp%82#0: bool = (txn ApplicationID) - (assert tmp%82#0) // is not creating - let tmp%83#0: bytes = (txna ApplicationArgs 1) - let tmp%84#0: bytes = (txna ApplicationArgs 2) - let tmp%85#0: bytes = (txna ApplicationArgs 3) - let tmp%86#0: bytes = (txna ApplicationArgs 4) - let tmp%87#0: bytes = (txna ApplicationArgs 5) - let tmp%88#0: bytes = (txna ApplicationArgs 6) - let tmp%89#0: bytes = (txna ApplicationArgs 7) - let tmp%90#0: bytes = (txna ApplicationArgs 8) - let tmp%91#0: bytes = (txna ApplicationArgs 9) - let tmp%92#0: bytes = (txna ApplicationArgs 10) - let tmp%93#0: bytes = (txna ApplicationArgs 11) - let tmp%94#0: bytes = (txna ApplicationArgs 12) - let tmp%95#0: bytes = (txna ApplicationArgs 13) - let tmp%96#0: bytes = (txna ApplicationArgs 14) - let tmp%97#0: bytes = (txna ApplicationArgs 15) - let tmp%98#0: bytes = ((extract 0 1) tmp%97#0) // on error: Index access is out of bounds - let tmp%99#0: bytes = (txna ApplicationArgs 15) - let tmp%100#0: bytes = ((extract 1 1) tmp%99#0) // on error: Index access is out of bounds - let tmp%101#0: bytes = (txna ApplicationArgs 15) - let tmp%102#0: bytes = ((extract 2 1) tmp%101#0) // on error: Index access is out of bounds - let tmp%103#0: bytes = (txna ApplicationArgs 15) - let tmp%104#0: bytes = ((extract 3 1) tmp%103#0) // on error: Index access is out of bounds - let tmp%105#0: bytes = (txna ApplicationArgs 15) - let tmp%106#0: bytes = ((extract 4 4) tmp%105#0) // on error: Index access is out of bounds - let tmp%107#0: bytes = (txna ApplicationArgs 15) - let tmp%108#0: bytes = ((extract 8 1) tmp%107#0) // on error: Index access is out of bounds - let tmp%109#0: bytes = test_cases.typed_abi_call.logger.Logger.return_args_after_14th(tmp%83#0, tmp%84#0, tmp%85#0, tmp%86#0, tmp%87#0, tmp%88#0, tmp%89#0, tmp%90#0, tmp%91#0, tmp%92#0, tmp%93#0, tmp%94#0, tmp%95#0, tmp%96#0, tmp%98#0, tmp%100#0, tmp%102#0, tmp%104#0, tmp%106#0, tmp%108#0) - let tmp%110#0: bytes = (concat 0x151f7c75 tmp%109#0) - (log tmp%110#0) + block@15: // return_args_after_14th_route_L75 + let tmp%85#0: uint64 = (txn OnCompletion) + let tmp%86#0: bool = (! tmp%85#0) + (assert tmp%86#0) // OnCompletion is NoOp + let tmp%87#0: bool = (txn ApplicationID) + (assert tmp%87#0) // is not creating + let tmp%88#0: bytes = (txna ApplicationArgs 1) + let tmp%89#0: bytes = (txna ApplicationArgs 2) + let tmp%90#0: bytes = (txna ApplicationArgs 3) + let tmp%91#0: bytes = (txna ApplicationArgs 4) + let tmp%92#0: bytes = (txna ApplicationArgs 5) + let tmp%93#0: bytes = (txna ApplicationArgs 6) + let tmp%94#0: bytes = (txna ApplicationArgs 7) + let tmp%95#0: bytes = (txna ApplicationArgs 8) + let tmp%96#0: bytes = (txna ApplicationArgs 9) + let tmp%97#0: bytes = (txna ApplicationArgs 10) + let tmp%98#0: bytes = (txna ApplicationArgs 11) + let tmp%99#0: bytes = (txna ApplicationArgs 12) + let tmp%100#0: bytes = (txna ApplicationArgs 13) + let tmp%101#0: bytes = (txna ApplicationArgs 14) + let tmp%102#0: bytes = (txna ApplicationArgs 15) + let tmp%103#0: bytes = ((extract 0 1) tmp%102#0) // on error: Index access is out of bounds + let tmp%104#0: bytes = (txna ApplicationArgs 15) + let tmp%105#0: bytes = ((extract 1 1) tmp%104#0) // on error: Index access is out of bounds + let tmp%106#0: bytes = (txna ApplicationArgs 15) + let tmp%107#0: bytes = ((extract 2 1) tmp%106#0) // on error: Index access is out of bounds + let tmp%108#0: bytes = (txna ApplicationArgs 15) + let tmp%109#0: bytes = ((extract 3 1) tmp%108#0) // on error: Index access is out of bounds + let tmp%110#0: bytes = (txna ApplicationArgs 15) + let tmp%111#0: bytes = ((extract 4 4) tmp%110#0) // on error: Index access is out of bounds + let tmp%112#0: bytes = (txna ApplicationArgs 15) + let tmp%113#0: bytes = ((extract 8 1) tmp%112#0) // on error: Index access is out of bounds + let tmp%114#0: bytes = test_cases.typed_abi_call.logger.Logger.return_args_after_14th(tmp%88#0, tmp%89#0, tmp%90#0, tmp%91#0, tmp%92#0, tmp%93#0, tmp%94#0, tmp%95#0, tmp%96#0, tmp%97#0, tmp%98#0, tmp%99#0, tmp%100#0, tmp%101#0, tmp%103#0, tmp%105#0, tmp%107#0, tmp%109#0, tmp%111#0, tmp%113#0) + let tmp%115#0: bytes = (concat 0x151f7c75 tmp%114#0) + (log tmp%115#0) return 1u - block@17: // bare_routing_L20 - let tmp%111#0: uint64 = (txn OnCompletion) - let not%tmp%111#0: bool = (! tmp%111#0) - (assert not%tmp%111#0) // reject transaction - let tmp%112#0: bool = (txn ApplicationID) - let tmp%113#0: bool = (! tmp%112#0) - (assert tmp%113#0) // is creating + block@18: // bare_routing_L20 + let tmp%116#0: uint64 = (txn OnCompletion) + let not%tmp%116#0: bool = (! tmp%116#0) + (assert not%tmp%116#0) // reject transaction + let tmp%117#0: bool = (txn ApplicationID) + let tmp%118#0: bool = (! tmp%117#0) + (assert tmp%118#0) // is creating return 1u subroutine test_cases.typed_abi_call.logger.Logger.echo(value: bytes) -> bytes: @@ -236,37 +247,41 @@ contract test_cases.typed_abi_call.logger.Logger: let concat_result%0#0: bytes = (concat len_16_bit%0#0 concatenated%0#0) return concat_result%0#0 - subroutine test_cases.typed_abi_call.logger.Logger.log_uint64(value: bytes) -> void: + subroutine test_cases.typed_abi_call.logger.Logger.no_args() -> uint64: block@0: // L25 + return 42u + + subroutine test_cases.typed_abi_call.logger.Logger.log_uint64(value: bytes) -> void: + block@0: // L29 (log value#0) return subroutine test_cases.typed_abi_call.logger.Logger.log_uint512(value: bytes) -> void: - block@0: // L29 + block@0: // L33 (log value#0) return subroutine test_cases.typed_abi_call.logger.Logger.log_string(value: bytes) -> void: - block@0: // L33 + block@0: // L37 let tmp%0#0: bytes = ((extract 2 0) value#0) (log tmp%0#0) return subroutine test_cases.typed_abi_call.logger.Logger.log_bool(value: bytes) -> void: - block@0: // L37 + block@0: // L41 let tmp%0#0: bool = (getbit value#0 0u) let tmp%1#0: bytes = (select 0x46616c7365 0x54727565 tmp%0#0) (log tmp%1#0) return subroutine test_cases.typed_abi_call.logger.Logger.log_bytes(value: bytes) -> void: - block@0: // L41 + block@0: // L45 let tmp%0#0: bytes = ((extract 2 0) value#0) (log tmp%0#0) return subroutine test_cases.typed_abi_call.logger.Logger.log_asset_account_app(asset: uint64, account: bytes, app: uint64) -> void: - block@0: // L45 + block@0: // L49 let (value%0#0: bytes, check%0#0: bool) = ((asset_params_get AssetName) asset#0) (assert check%0#0) // asset exists let tmp%1#0: bytes = (concat value%0#0 account#0) @@ -277,27 +292,27 @@ contract test_cases.typed_abi_call.logger.Logger: return subroutine test_cases.typed_abi_call.logger.Logger.echo_native_string(value: bytes) -> bytes: - block@0: // L49 + block@0: // L53 let tmp%0#0: bytes = (concat "echo: " value#0) return tmp%0#0 subroutine test_cases.typed_abi_call.logger.Logger.echo_native_bytes(value: bytes) -> bytes: - block@0: // L53 + block@0: // L57 let tmp%0#0: bytes = (concat 0x6563686f3a20 value#0) return tmp%0#0 subroutine test_cases.typed_abi_call.logger.Logger.echo_native_uint64(value: uint64) -> uint64: - block@0: // L57 + block@0: // L61 let tmp%0#0: uint64 = (+ value#0 1u) return tmp%0#0 subroutine test_cases.typed_abi_call.logger.Logger.echo_native_biguint(value: biguint) -> biguint: - block@0: // L61 + block@0: // L65 let tmp%0#0: biguint = (b+ value#0 1b) return tmp%0#0 subroutine test_cases.typed_abi_call.logger.Logger.echo_native_tuple(s: bytes, b: bytes, u: uint64, bu: biguint) -> : - block@0: // L65 + block@0: // L69 let tmp%0#0: bytes = (concat "echo: " s#0) let tmp%1#0: bytes = (concat 0x6563686f3a20 b#0) let tmp%2#0: uint64 = (+ u#0 1u) @@ -305,7 +320,7 @@ contract test_cases.typed_abi_call.logger.Logger: return tmp%0#0 tmp%1#0 tmp%2#0 tmp%3#0 subroutine test_cases.typed_abi_call.logger.Logger.return_args_after_14th(_a1: bytes, _a2: bytes, _a3: bytes, _a4: bytes, _a5: bytes, _a6: bytes, _a7: bytes, _a8: bytes, _a9: bytes, _a10: bytes, _a11: bytes, _a12: bytes, _a13: bytes, _a14: bytes, a15: bytes, a16: bytes, a17: bytes, a18: bytes, a19: bytes, a20: bytes) -> bytes: - block@0: // L71 + block@0: // L75 let encoded_tuple_buffer%2#0: bytes = (concat a15#0 a16#0) let encoded_tuple_buffer%3#0: bytes = (concat encoded_tuple_buffer%2#0 a17#0) let encoded_tuple_buffer%4#0: bytes = (concat encoded_tuple_buffer%3#0 a18#0) diff --git a/test_cases/typed_abi_call/out/Logger.ssa.ir b/test_cases/typed_abi_call/out/Logger.ssa.ir index 9f715c5777..7d464578db 100644 --- a/test_cases/typed_abi_call/out/Logger.ssa.ir +++ b/test_cases/typed_abi_call/out/Logger.ssa.ir @@ -3,10 +3,10 @@ contract test_cases.typed_abi_call.logger.Logger: subroutine test_cases.typed_abi_call.logger.Logger.approval_program() -> bool: block@0: // L20 let tmp%0#0: bool = (txn NumAppArgs) - goto tmp%0#0 ? block@1 : block@17 + goto tmp%0#0 ? block@1 : block@18 block@1: // abi_routing_L20 let tmp%1#0: bytes = (txna ApplicationArgs 0) - switch tmp%1#0 {method "echo(string)string" => block@2, method "log(uint64)void" => block@3, method "log(uint512)void" => block@4, method "log(string)void" => block@5, method "log(bool)void" => block@6, method "log(byte[])void" => block@7, method "log(asset,account,application)void" => block@8, method "echo_native_string(string)string" => block@9, method "echo_native_bytes(byte[])byte[]" => block@10, method "echo_native_uint64(uint64)uint64" => block@11, method "echo_native_biguint(uint512)uint512" => block@12, method "echo_native_tuple(string,byte[],uint64,uint512)(string,byte[],uint64,uint512)" => block@13, method "return_args_after_14th(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint8,uint8,uint8,uint8,(uint8,uint8,uint8,uint8),uint8)byte[]" => block@14, * => block@15} + switch tmp%1#0 {method "echo(string)string" => block@2, method "no_args()uint64" => block@3, method "log(uint64)void" => block@4, method "log(uint512)void" => block@5, method "log(string)void" => block@6, method "log(bool)void" => block@7, method "log(byte[])void" => block@8, method "log(asset,account,application)void" => block@9, method "echo_native_string(string)string" => block@10, method "echo_native_bytes(byte[])byte[]" => block@11, method "echo_native_uint64(uint64)uint64" => block@12, method "echo_native_biguint(uint512)uint512" => block@13, method "echo_native_tuple(string,byte[],uint64,uint512)(string,byte[],uint64,uint512)" => block@14, method "return_args_after_14th(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint8,uint8,uint8,uint8,(uint8,uint8,uint8,uint8),uint8)byte[]" => block@15, * => block@16} block@2: // echo_route_L21 let tmp%2#0: uint64 = (txn OnCompletion) let tmp%3#0: bool = (== tmp%2#0 NoOp) @@ -18,143 +18,154 @@ contract test_cases.typed_abi_call.logger.Logger: let tmp%7#0: bytes = (concat 0x151f7c75 tmp%6#0) (log tmp%7#0) return 1u - block@3: // log_route_L25 + block@3: // no_args_route_L25 let tmp%8#0: uint64 = (txn OnCompletion) let tmp%9#0: bool = (== tmp%8#0 NoOp) (assert tmp%9#0) // OnCompletion is NoOp let tmp%10#0: bool = (txn ApplicationID) (assert tmp%10#0) // is not creating - let tmp%11#0: bytes = (txna ApplicationArgs 1) - test_cases.typed_abi_call.logger.Logger.log_uint64(tmp%11#0) + let tmp%11#0: uint64 = test_cases.typed_abi_call.logger.Logger.no_args() + let val_as_bytes%0#0: bytes = (itob tmp%11#0) + let tmp%12#0: bytes = (concat 0x151f7c75 val_as_bytes%0#0) + (log tmp%12#0) return 1u block@4: // log_route_L29 - let tmp%12#0: uint64 = (txn OnCompletion) - let tmp%13#0: bool = (== tmp%12#0 NoOp) - (assert tmp%13#0) // OnCompletion is NoOp - let tmp%14#0: bool = (txn ApplicationID) - (assert tmp%14#0) // is not creating - let tmp%15#0: bytes = (txna ApplicationArgs 1) - test_cases.typed_abi_call.logger.Logger.log_uint512(tmp%15#0) + let tmp%13#0: uint64 = (txn OnCompletion) + let tmp%14#0: bool = (== tmp%13#0 NoOp) + (assert tmp%14#0) // OnCompletion is NoOp + let tmp%15#0: bool = (txn ApplicationID) + (assert tmp%15#0) // is not creating + let tmp%16#0: bytes = (txna ApplicationArgs 1) + test_cases.typed_abi_call.logger.Logger.log_uint64(tmp%16#0) return 1u block@5: // log_route_L33 - let tmp%16#0: uint64 = (txn OnCompletion) - let tmp%17#0: bool = (== tmp%16#0 NoOp) - (assert tmp%17#0) // OnCompletion is NoOp - let tmp%18#0: bool = (txn ApplicationID) - (assert tmp%18#0) // is not creating - let tmp%19#0: bytes = (txna ApplicationArgs 1) - test_cases.typed_abi_call.logger.Logger.log_string(tmp%19#0) + let tmp%17#0: uint64 = (txn OnCompletion) + let tmp%18#0: bool = (== tmp%17#0 NoOp) + (assert tmp%18#0) // OnCompletion is NoOp + let tmp%19#0: bool = (txn ApplicationID) + (assert tmp%19#0) // is not creating + let tmp%20#0: bytes = (txna ApplicationArgs 1) + test_cases.typed_abi_call.logger.Logger.log_uint512(tmp%20#0) return 1u block@6: // log_route_L37 - let tmp%20#0: uint64 = (txn OnCompletion) - let tmp%21#0: bool = (== tmp%20#0 NoOp) - (assert tmp%21#0) // OnCompletion is NoOp - let tmp%22#0: bool = (txn ApplicationID) - (assert tmp%22#0) // is not creating - let tmp%23#0: bytes = (txna ApplicationArgs 1) - test_cases.typed_abi_call.logger.Logger.log_bool(tmp%23#0) + let tmp%21#0: uint64 = (txn OnCompletion) + let tmp%22#0: bool = (== tmp%21#0 NoOp) + (assert tmp%22#0) // OnCompletion is NoOp + let tmp%23#0: bool = (txn ApplicationID) + (assert tmp%23#0) // is not creating + let tmp%24#0: bytes = (txna ApplicationArgs 1) + test_cases.typed_abi_call.logger.Logger.log_string(tmp%24#0) return 1u block@7: // log_route_L41 - let tmp%24#0: uint64 = (txn OnCompletion) - let tmp%25#0: bool = (== tmp%24#0 NoOp) - (assert tmp%25#0) // OnCompletion is NoOp - let tmp%26#0: bool = (txn ApplicationID) - (assert tmp%26#0) // is not creating - let tmp%27#0: bytes = (txna ApplicationArgs 1) - test_cases.typed_abi_call.logger.Logger.log_bytes(tmp%27#0) + let tmp%25#0: uint64 = (txn OnCompletion) + let tmp%26#0: bool = (== tmp%25#0 NoOp) + (assert tmp%26#0) // OnCompletion is NoOp + let tmp%27#0: bool = (txn ApplicationID) + (assert tmp%27#0) // is not creating + let tmp%28#0: bytes = (txna ApplicationArgs 1) + test_cases.typed_abi_call.logger.Logger.log_bool(tmp%28#0) return 1u block@8: // log_route_L45 - let tmp%28#0: uint64 = (txn OnCompletion) - let tmp%29#0: bool = (== tmp%28#0 NoOp) - (assert tmp%29#0) // OnCompletion is NoOp - let tmp%30#0: bool = (txn ApplicationID) - (assert tmp%30#0) // is not creating - let tmp%31#0: bytes = (txna ApplicationArgs 1) - let tmp%32#0: uint64 = (btoi tmp%31#0) - let tmp%33#0: uint64 = ((txnas Assets) tmp%32#0) - let tmp%34#0: bytes = (txna ApplicationArgs 2) - let tmp%35#0: uint64 = (btoi tmp%34#0) - let tmp%36#0: bytes = ((txnas Accounts) tmp%35#0) - let tmp%37#0: bytes = (txna ApplicationArgs 3) - let tmp%38#0: uint64 = (btoi tmp%37#0) - let tmp%39#0: uint64 = ((txnas Applications) tmp%38#0) - test_cases.typed_abi_call.logger.Logger.log_asset_account_app(tmp%33#0, tmp%36#0, tmp%39#0) + let tmp%29#0: uint64 = (txn OnCompletion) + let tmp%30#0: bool = (== tmp%29#0 NoOp) + (assert tmp%30#0) // OnCompletion is NoOp + let tmp%31#0: bool = (txn ApplicationID) + (assert tmp%31#0) // is not creating + let tmp%32#0: bytes = (txna ApplicationArgs 1) + test_cases.typed_abi_call.logger.Logger.log_bytes(tmp%32#0) return 1u - block@9: // echo_native_string_route_L49 - let tmp%40#0: uint64 = (txn OnCompletion) - let tmp%41#0: bool = (== tmp%40#0 NoOp) - (assert tmp%41#0) // OnCompletion is NoOp - let tmp%42#0: bool = (txn ApplicationID) - (assert tmp%42#0) // is not creating - let tmp%43#0: bytes = (txna ApplicationArgs 1) - let tmp%44#0: bytes = ((extract 2 0) tmp%43#0) - let tmp%45#0: bytes = test_cases.typed_abi_call.logger.Logger.echo_native_string(tmp%44#0) - let length%0#0: uint64 = (len tmp%45#0) + block@9: // log_route_L49 + let tmp%33#0: uint64 = (txn OnCompletion) + let tmp%34#0: bool = (== tmp%33#0 NoOp) + (assert tmp%34#0) // OnCompletion is NoOp + let tmp%35#0: bool = (txn ApplicationID) + (assert tmp%35#0) // is not creating + let tmp%36#0: bytes = (txna ApplicationArgs 1) + let tmp%37#0: uint64 = (btoi tmp%36#0) + let tmp%38#0: uint64 = ((txnas Assets) tmp%37#0) + let tmp%39#0: bytes = (txna ApplicationArgs 2) + let tmp%40#0: uint64 = (btoi tmp%39#0) + let tmp%41#0: bytes = ((txnas Accounts) tmp%40#0) + let tmp%42#0: bytes = (txna ApplicationArgs 3) + let tmp%43#0: uint64 = (btoi tmp%42#0) + let tmp%44#0: uint64 = ((txnas Applications) tmp%43#0) + test_cases.typed_abi_call.logger.Logger.log_asset_account_app(tmp%38#0, tmp%41#0, tmp%44#0) + return 1u + block@10: // echo_native_string_route_L53 + let tmp%45#0: uint64 = (txn OnCompletion) + let tmp%46#0: bool = (== tmp%45#0 NoOp) + (assert tmp%46#0) // OnCompletion is NoOp + let tmp%47#0: bool = (txn ApplicationID) + (assert tmp%47#0) // is not creating + let tmp%48#0: bytes = (txna ApplicationArgs 1) + let tmp%49#0: bytes = ((extract 2 0) tmp%48#0) + let tmp%50#0: bytes = test_cases.typed_abi_call.logger.Logger.echo_native_string(tmp%49#0) + let length%0#0: uint64 = (len tmp%50#0) 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 tmp%45#0) - let tmp%46#0: bytes = (concat 0x151f7c75 encoded_value%0#0) - (log tmp%46#0) + let encoded_value%0#0: bytes = (concat length_uint16%0#0 tmp%50#0) + let tmp%51#0: bytes = (concat 0x151f7c75 encoded_value%0#0) + (log tmp%51#0) return 1u - block@10: // echo_native_bytes_route_L53 - let tmp%47#0: uint64 = (txn OnCompletion) - let tmp%48#0: bool = (== tmp%47#0 NoOp) - (assert tmp%48#0) // OnCompletion is NoOp - let tmp%49#0: bool = (txn ApplicationID) - (assert tmp%49#0) // is not creating - let tmp%50#0: bytes = (txna ApplicationArgs 1) - let tmp%51#0: bytes = ((extract 2 0) tmp%50#0) - let tmp%52#0: bytes = test_cases.typed_abi_call.logger.Logger.echo_native_bytes(tmp%51#0) - let length%1#0: uint64 = (len tmp%52#0) + block@11: // echo_native_bytes_route_L57 + let tmp%52#0: uint64 = (txn OnCompletion) + let tmp%53#0: bool = (== tmp%52#0 NoOp) + (assert tmp%53#0) // OnCompletion is NoOp + let tmp%54#0: bool = (txn ApplicationID) + (assert tmp%54#0) // is not creating + let tmp%55#0: bytes = (txna ApplicationArgs 1) + let tmp%56#0: bytes = ((extract 2 0) tmp%55#0) + let tmp%57#0: bytes = test_cases.typed_abi_call.logger.Logger.echo_native_bytes(tmp%56#0) + let length%1#0: uint64 = (len tmp%57#0) let as_bytes%1#0: bytes = (itob length%1#0) let length_uint16%1#0: bytes = ((extract 6 2) as_bytes%1#0) - let encoded_value%1#0: bytes = (concat length_uint16%1#0 tmp%52#0) - let tmp%53#0: bytes = (concat 0x151f7c75 encoded_value%1#0) - (log tmp%53#0) + let encoded_value%1#0: bytes = (concat length_uint16%1#0 tmp%57#0) + let tmp%58#0: bytes = (concat 0x151f7c75 encoded_value%1#0) + (log tmp%58#0) return 1u - block@11: // echo_native_uint64_route_L57 - let tmp%54#0: uint64 = (txn OnCompletion) - let tmp%55#0: bool = (== tmp%54#0 NoOp) - (assert tmp%55#0) // OnCompletion is NoOp - let tmp%56#0: bool = (txn ApplicationID) - (assert tmp%56#0) // is not creating - let tmp%57#0: bytes = (txna ApplicationArgs 1) - let tmp%58#0: uint64 = (btoi tmp%57#0) - let tmp%59#0: uint64 = test_cases.typed_abi_call.logger.Logger.echo_native_uint64(tmp%58#0) - let val_as_bytes%0#0: bytes = (itob tmp%59#0) - let tmp%60#0: bytes = (concat 0x151f7c75 val_as_bytes%0#0) - (log tmp%60#0) + block@12: // echo_native_uint64_route_L61 + let tmp%59#0: uint64 = (txn OnCompletion) + let tmp%60#0: bool = (== tmp%59#0 NoOp) + (assert tmp%60#0) // OnCompletion is NoOp + let tmp%61#0: bool = (txn ApplicationID) + (assert tmp%61#0) // is not creating + let tmp%62#0: bytes = (txna ApplicationArgs 1) + let tmp%63#0: uint64 = (btoi tmp%62#0) + let tmp%64#0: uint64 = test_cases.typed_abi_call.logger.Logger.echo_native_uint64(tmp%63#0) + let val_as_bytes%1#0: bytes = (itob tmp%64#0) + let tmp%65#0: bytes = (concat 0x151f7c75 val_as_bytes%1#0) + (log tmp%65#0) return 1u - block@12: // echo_native_biguint_route_L61 - let tmp%61#0: uint64 = (txn OnCompletion) - let tmp%62#0: bool = (== tmp%61#0 NoOp) - (assert tmp%62#0) // OnCompletion is NoOp - let tmp%63#0: bool = (txn ApplicationID) - (assert tmp%63#0) // is not creating - let tmp%64#0: bytes = (txna ApplicationArgs 1) - let tmp%65#0: biguint = test_cases.typed_abi_call.logger.Logger.echo_native_biguint(tmp%64#0) - let len_%0#0: uint64 = (len tmp%65#0) + block@13: // echo_native_biguint_route_L65 + let tmp%66#0: uint64 = (txn OnCompletion) + let tmp%67#0: bool = (== tmp%66#0 NoOp) + (assert tmp%67#0) // OnCompletion is NoOp + let tmp%68#0: bool = (txn ApplicationID) + (assert tmp%68#0) // is not creating + let tmp%69#0: bytes = (txna ApplicationArgs 1) + let tmp%70#0: biguint = test_cases.typed_abi_call.logger.Logger.echo_native_biguint(tmp%69#0) + let len_%0#0: uint64 = (len tmp%70#0) let no_overflow%0#0: bool = (<= len_%0#0 64u) (assert no_overflow%0#0) // overflow let b_zeros%0#0: bytes = (bzero 64u) - let tmp%66#0: bytes = (b| tmp%65#0 b_zeros%0#0) - let tmp%67#0: bytes = (concat 0x151f7c75 tmp%66#0) - (log tmp%67#0) + let tmp%71#0: bytes = (b| tmp%70#0 b_zeros%0#0) + let tmp%72#0: bytes = (concat 0x151f7c75 tmp%71#0) + (log tmp%72#0) return 1u - block@13: // echo_native_tuple_route_L65 - let tmp%68#0: uint64 = (txn OnCompletion) - let tmp%69#0: bool = (== tmp%68#0 NoOp) - (assert tmp%69#0) // OnCompletion is NoOp - let tmp%70#0: bool = (txn ApplicationID) - (assert tmp%70#0) // is not creating - let tmp%71#0: bytes = (txna ApplicationArgs 1) - let tmp%72#0: bytes = ((extract 2 0) tmp%71#0) - let tmp%73#0: bytes = (txna ApplicationArgs 2) - let tmp%74#0: bytes = ((extract 2 0) tmp%73#0) - let tmp%75#0: bytes = (txna ApplicationArgs 3) - let tmp%76#0: uint64 = (btoi tmp%75#0) - let tmp%77#0: bytes = (txna ApplicationArgs 4) - let (awst_tmp%0#0: bytes, awst_tmp%1#0: bytes, awst_tmp%2#0: uint64, awst_tmp%3#0: biguint) = test_cases.typed_abi_call.logger.Logger.echo_native_tuple(tmp%72#0, tmp%74#0, tmp%76#0, tmp%77#0) + block@14: // echo_native_tuple_route_L69 + let tmp%73#0: uint64 = (txn OnCompletion) + let tmp%74#0: bool = (== tmp%73#0 NoOp) + (assert tmp%74#0) // OnCompletion is NoOp + let tmp%75#0: bool = (txn ApplicationID) + (assert tmp%75#0) // is not creating + let tmp%76#0: bytes = (txna ApplicationArgs 1) + let tmp%77#0: bytes = ((extract 2 0) tmp%76#0) + let tmp%78#0: bytes = (txna ApplicationArgs 2) + let tmp%79#0: bytes = ((extract 2 0) tmp%78#0) + let tmp%80#0: bytes = (txna ApplicationArgs 3) + let tmp%81#0: uint64 = (btoi tmp%80#0) + let tmp%82#0: bytes = (txna ApplicationArgs 4) + let (awst_tmp%0#0: bytes, awst_tmp%1#0: bytes, awst_tmp%2#0: uint64, awst_tmp%3#0: biguint) = test_cases.typed_abi_call.logger.Logger.echo_native_tuple(tmp%77#0, tmp%79#0, tmp%81#0, tmp%82#0) let length%2#0: uint64 = (len awst_tmp%0#0) let as_bytes%2#0: bytes = (itob length%2#0) let length_uint16%2#0: bytes = ((extract 6 2) as_bytes%2#0) @@ -163,12 +174,12 @@ contract test_cases.typed_abi_call.logger.Logger: let as_bytes%3#0: bytes = (itob length%3#0) let length_uint16%3#0: bytes = ((extract 6 2) as_bytes%3#0) let encoded_value%3#0: bytes = (concat length_uint16%3#0 awst_tmp%1#0) - let val_as_bytes%1#0: bytes = (itob awst_tmp%2#0) + let val_as_bytes%2#0: bytes = (itob awst_tmp%2#0) let len_%1#0: uint64 = (len awst_tmp%3#0) let no_overflow%1#0: bool = (<= len_%1#0 64u) (assert no_overflow%1#0) // overflow let b_zeros%1#0: bytes = (bzero 64u) - let tmp%78#0: bytes = (b| awst_tmp%3#0 b_zeros%1#0) + let tmp%83#0: bytes = (b| awst_tmp%3#0 b_zeros%1#0) let current_tail_offset%0#0: uint64 = 76u let encoded_tuple_buffer%0#0: bytes = 0x let as_bytes%4#0: bytes = (itob current_tail_offset%0#0) @@ -181,62 +192,62 @@ contract test_cases.typed_abi_call.logger.Logger: let encoded_tuple_buffer%2#0: bytes = (concat encoded_tuple_buffer%1#0 offset_as_uint16%1#0) let data_length%1#0: uint64 = (len encoded_value%3#0) let current_tail_offset%2#0: uint64 = (+ current_tail_offset%1#0 data_length%1#0) - let encoded_tuple_buffer%3#0: bytes = (concat encoded_tuple_buffer%2#0 val_as_bytes%1#0) - let encoded_tuple_buffer%4#0: bytes = (concat encoded_tuple_buffer%3#0 tmp%78#0) + let encoded_tuple_buffer%3#0: bytes = (concat encoded_tuple_buffer%2#0 val_as_bytes%2#0) + let encoded_tuple_buffer%4#0: bytes = (concat encoded_tuple_buffer%3#0 tmp%83#0) let encoded_tuple_buffer%5#0: bytes = (concat encoded_tuple_buffer%4#0 encoded_value%2#0) let encoded_tuple_buffer%6#0: bytes = (concat encoded_tuple_buffer%5#0 encoded_value%3#0) - let tmp%79#0: bytes = (concat 0x151f7c75 encoded_tuple_buffer%6#0) - (log tmp%79#0) + let tmp%84#0: bytes = (concat 0x151f7c75 encoded_tuple_buffer%6#0) + (log tmp%84#0) return 1u - block@14: // return_args_after_14th_route_L71 - let tmp%80#0: uint64 = (txn OnCompletion) - let tmp%81#0: bool = (== tmp%80#0 NoOp) - (assert tmp%81#0) // OnCompletion is NoOp - let tmp%82#0: bool = (txn ApplicationID) - (assert tmp%82#0) // is not creating - let tmp%83#0: bytes = (txna ApplicationArgs 1) - let tmp%84#0: bytes = (txna ApplicationArgs 2) - let tmp%85#0: bytes = (txna ApplicationArgs 3) - let tmp%86#0: bytes = (txna ApplicationArgs 4) - let tmp%87#0: bytes = (txna ApplicationArgs 5) - let tmp%88#0: bytes = (txna ApplicationArgs 6) - let tmp%89#0: bytes = (txna ApplicationArgs 7) - let tmp%90#0: bytes = (txna ApplicationArgs 8) - let tmp%91#0: bytes = (txna ApplicationArgs 9) - let tmp%92#0: bytes = (txna ApplicationArgs 10) - let tmp%93#0: bytes = (txna ApplicationArgs 11) - let tmp%94#0: bytes = (txna ApplicationArgs 12) - let tmp%95#0: bytes = (txna ApplicationArgs 13) - let tmp%96#0: bytes = (txna ApplicationArgs 14) - let tmp%97#0: bytes = (txna ApplicationArgs 15) - let tmp%98#0: bytes = (extract3 tmp%97#0 0u 1u) // on error: Index access is out of bounds - let tmp%99#0: bytes = (txna ApplicationArgs 15) - let tmp%100#0: bytes = (extract3 tmp%99#0 1u 1u) // on error: Index access is out of bounds - let tmp%101#0: bytes = (txna ApplicationArgs 15) - let tmp%102#0: bytes = (extract3 tmp%101#0 2u 1u) // on error: Index access is out of bounds - let tmp%103#0: bytes = (txna ApplicationArgs 15) - let tmp%104#0: bytes = (extract3 tmp%103#0 3u 1u) // on error: Index access is out of bounds - let tmp%105#0: bytes = (txna ApplicationArgs 15) - let tmp%106#0: bytes = (extract3 tmp%105#0 4u 4u) // on error: Index access is out of bounds - let tmp%107#0: bytes = (txna ApplicationArgs 15) - let tmp%108#0: bytes = (extract3 tmp%107#0 8u 1u) // on error: Index access is out of bounds - let tmp%109#0: bytes = test_cases.typed_abi_call.logger.Logger.return_args_after_14th(tmp%83#0, tmp%84#0, tmp%85#0, tmp%86#0, tmp%87#0, tmp%88#0, tmp%89#0, tmp%90#0, tmp%91#0, tmp%92#0, tmp%93#0, tmp%94#0, tmp%95#0, tmp%96#0, tmp%98#0, tmp%100#0, tmp%102#0, tmp%104#0, tmp%106#0, tmp%108#0) - let tmp%110#0: bytes = (concat 0x151f7c75 tmp%109#0) - (log tmp%110#0) + block@15: // return_args_after_14th_route_L75 + let tmp%85#0: uint64 = (txn OnCompletion) + let tmp%86#0: bool = (== tmp%85#0 NoOp) + (assert tmp%86#0) // OnCompletion is NoOp + let tmp%87#0: bool = (txn ApplicationID) + (assert tmp%87#0) // is not creating + let tmp%88#0: bytes = (txna ApplicationArgs 1) + let tmp%89#0: bytes = (txna ApplicationArgs 2) + let tmp%90#0: bytes = (txna ApplicationArgs 3) + let tmp%91#0: bytes = (txna ApplicationArgs 4) + let tmp%92#0: bytes = (txna ApplicationArgs 5) + let tmp%93#0: bytes = (txna ApplicationArgs 6) + let tmp%94#0: bytes = (txna ApplicationArgs 7) + let tmp%95#0: bytes = (txna ApplicationArgs 8) + let tmp%96#0: bytes = (txna ApplicationArgs 9) + let tmp%97#0: bytes = (txna ApplicationArgs 10) + let tmp%98#0: bytes = (txna ApplicationArgs 11) + let tmp%99#0: bytes = (txna ApplicationArgs 12) + let tmp%100#0: bytes = (txna ApplicationArgs 13) + let tmp%101#0: bytes = (txna ApplicationArgs 14) + let tmp%102#0: bytes = (txna ApplicationArgs 15) + let tmp%103#0: bytes = (extract3 tmp%102#0 0u 1u) // on error: Index access is out of bounds + let tmp%104#0: bytes = (txna ApplicationArgs 15) + let tmp%105#0: bytes = (extract3 tmp%104#0 1u 1u) // on error: Index access is out of bounds + let tmp%106#0: bytes = (txna ApplicationArgs 15) + let tmp%107#0: bytes = (extract3 tmp%106#0 2u 1u) // on error: Index access is out of bounds + let tmp%108#0: bytes = (txna ApplicationArgs 15) + let tmp%109#0: bytes = (extract3 tmp%108#0 3u 1u) // on error: Index access is out of bounds + let tmp%110#0: bytes = (txna ApplicationArgs 15) + let tmp%111#0: bytes = (extract3 tmp%110#0 4u 4u) // on error: Index access is out of bounds + let tmp%112#0: bytes = (txna ApplicationArgs 15) + let tmp%113#0: bytes = (extract3 tmp%112#0 8u 1u) // on error: Index access is out of bounds + let tmp%114#0: bytes = test_cases.typed_abi_call.logger.Logger.return_args_after_14th(tmp%88#0, tmp%89#0, tmp%90#0, tmp%91#0, tmp%92#0, tmp%93#0, tmp%94#0, tmp%95#0, tmp%96#0, tmp%97#0, tmp%98#0, tmp%99#0, tmp%100#0, tmp%101#0, tmp%103#0, tmp%105#0, tmp%107#0, tmp%109#0, tmp%111#0, tmp%113#0) + let tmp%115#0: bytes = (concat 0x151f7c75 tmp%114#0) + (log tmp%115#0) return 1u - block@15: // switch_case_default_L20 - goto block@16 - block@16: // switch_case_next_L20 + block@16: // switch_case_default_L20 + goto block@17 + block@17: // switch_case_next_L20 fail // reject transaction - block@17: // bare_routing_L20 - let tmp%111#0: uint64 = (txn OnCompletion) - switch tmp%111#0 {0u => block@18, * => block@19} - block@18: // create_L20 - let tmp%112#0: bool = (txn ApplicationID) - let tmp%113#0: bool = (! tmp%112#0) - (assert tmp%113#0) // is creating + block@18: // bare_routing_L20 + let tmp%116#0: uint64 = (txn OnCompletion) + switch tmp%116#0 {0u => block@19, * => block@20} + block@19: // create_L20 + let tmp%117#0: bool = (txn ApplicationID) + let tmp%118#0: bool = (! tmp%117#0) + (assert tmp%118#0) // is creating return 1u - block@19: // reject_bare_on_completion_L20 + block@20: // reject_bare_on_completion_L20 fail // reject transaction subroutine test_cases.typed_abi_call.logger.Logger.echo(value: bytes) -> bytes: @@ -254,37 +265,41 @@ contract test_cases.typed_abi_call.logger.Logger: let concat_result%0#0: bytes = (concat len_16_bit%0#0 concatenated%0#0) return concat_result%0#0 - subroutine test_cases.typed_abi_call.logger.Logger.log_uint64(value: bytes) -> void: + subroutine test_cases.typed_abi_call.logger.Logger.no_args() -> uint64: block@0: // L25 + return 42u + + subroutine test_cases.typed_abi_call.logger.Logger.log_uint64(value: bytes) -> void: + block@0: // L29 (log value#0) return subroutine test_cases.typed_abi_call.logger.Logger.log_uint512(value: bytes) -> void: - block@0: // L29 + block@0: // L33 (log value#0) return subroutine test_cases.typed_abi_call.logger.Logger.log_string(value: bytes) -> void: - block@0: // L33 + block@0: // L37 let tmp%0#0: bytes = ((extract 2 0) value#0) (log tmp%0#0) return subroutine test_cases.typed_abi_call.logger.Logger.log_bool(value: bytes) -> void: - block@0: // L37 + block@0: // L41 let tmp%0#0: bool = (getbit value#0 0u) let tmp%1#0: bytes = (select 0x46616c7365 0x54727565 tmp%0#0) (log tmp%1#0) return subroutine test_cases.typed_abi_call.logger.Logger.log_bytes(value: bytes) -> void: - block@0: // L41 + block@0: // L45 let tmp%0#0: bytes = ((extract 2 0) value#0) (log tmp%0#0) return subroutine test_cases.typed_abi_call.logger.Logger.log_asset_account_app(asset: uint64, account: bytes, app: uint64) -> void: - block@0: // L45 + block@0: // L49 let (value%0#0: bytes, check%0#0: bool) = ((asset_params_get AssetName) asset#0) (assert check%0#0) // asset exists let tmp%0#0: bytes = (concat value%0#0 "") @@ -297,27 +312,27 @@ contract test_cases.typed_abi_call.logger.Logger: return subroutine test_cases.typed_abi_call.logger.Logger.echo_native_string(value: bytes) -> bytes: - block@0: // L49 + block@0: // L53 let tmp%0#0: bytes = (concat "echo: " value#0) return tmp%0#0 subroutine test_cases.typed_abi_call.logger.Logger.echo_native_bytes(value: bytes) -> bytes: - block@0: // L53 + block@0: // L57 let tmp%0#0: bytes = (concat 0x6563686f3a20 value#0) return tmp%0#0 subroutine test_cases.typed_abi_call.logger.Logger.echo_native_uint64(value: uint64) -> uint64: - block@0: // L57 + block@0: // L61 let tmp%0#0: uint64 = (+ value#0 1u) return tmp%0#0 subroutine test_cases.typed_abi_call.logger.Logger.echo_native_biguint(value: biguint) -> biguint: - block@0: // L61 + block@0: // L65 let tmp%0#0: biguint = (b+ value#0 1b) return tmp%0#0 subroutine test_cases.typed_abi_call.logger.Logger.echo_native_tuple(s: bytes, b: bytes, u: uint64, bu: biguint) -> : - block@0: // L65 + block@0: // L69 let tmp%0#0: bytes = (concat "echo: " s#0) let tmp%1#0: bytes = (concat 0x6563686f3a20 b#0) let tmp%2#0: uint64 = (+ u#0 1u) @@ -325,7 +340,7 @@ contract test_cases.typed_abi_call.logger.Logger: return tmp%0#0 tmp%1#0 tmp%2#0 tmp%3#0 subroutine test_cases.typed_abi_call.logger.Logger.return_args_after_14th(_a1: bytes, _a2: bytes, _a3: bytes, _a4: bytes, _a5: bytes, _a6: bytes, _a7: bytes, _a8: bytes, _a9: bytes, _a10: bytes, _a11: bytes, _a12: bytes, _a13: bytes, _a14: bytes, a15: bytes, a16: bytes, a17: bytes, a18: bytes, a19: bytes, a20: bytes) -> bytes: - block@0: // L71 + block@0: // L75 let current_tail_offset%0#0: uint64 = 9u let encoded_tuple_buffer%0#0: bytes = 0x let encoded_tuple_buffer%1#0: bytes = (concat encoded_tuple_buffer%0#0 a15#0) diff --git a/test_cases/typed_abi_call/out/Logger.ssa.opt_pass_1.ir b/test_cases/typed_abi_call/out/Logger.ssa.opt_pass_1.ir index 0975d08aa7..ce6e3ebc6e 100644 --- a/test_cases/typed_abi_call/out/Logger.ssa.opt_pass_1.ir +++ b/test_cases/typed_abi_call/out/Logger.ssa.opt_pass_1.ir @@ -3,10 +3,10 @@ contract test_cases.typed_abi_call.logger.Logger: subroutine test_cases.typed_abi_call.logger.Logger.approval_program() -> bool: block@0: // L20 let tmp%0#0: bool = (txn NumAppArgs) - goto tmp%0#0 ? block@1 : block@17 + goto tmp%0#0 ? block@1 : block@18 block@1: // abi_routing_L20 let tmp%1#0: bytes = (txna ApplicationArgs 0) - switch tmp%1#0 {method "echo(string)string" => block@2, method "log(uint64)void" => block@3, method "log(uint512)void" => block@4, method "log(string)void" => block@5, method "log(bool)void" => block@6, method "log(byte[])void" => block@7, method "log(asset,account,application)void" => block@8, method "echo_native_string(string)string" => block@9, method "echo_native_bytes(byte[])byte[]" => block@10, method "echo_native_uint64(uint64)uint64" => block@11, method "echo_native_biguint(uint512)uint512" => block@12, method "echo_native_tuple(string,byte[],uint64,uint512)(string,byte[],uint64,uint512)" => block@13, method "return_args_after_14th(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint8,uint8,uint8,uint8,(uint8,uint8,uint8,uint8),uint8)byte[]" => block@14, * => fail // reject transaction} + switch tmp%1#0 {method "echo(string)string" => block@2, method "no_args()uint64" => block@3, method "log(uint64)void" => block@4, method "log(uint512)void" => block@5, method "log(string)void" => block@6, method "log(bool)void" => block@7, method "log(byte[])void" => block@8, method "log(asset,account,application)void" => block@9, method "echo_native_string(string)string" => block@10, method "echo_native_bytes(byte[])byte[]" => block@11, method "echo_native_uint64(uint64)uint64" => block@12, method "echo_native_biguint(uint512)uint512" => block@13, method "echo_native_tuple(string,byte[],uint64,uint512)(string,byte[],uint64,uint512)" => block@14, method "return_args_after_14th(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint8,uint8,uint8,uint8,(uint8,uint8,uint8,uint8),uint8)byte[]" => block@15, * => fail // reject transaction} block@2: // echo_route_L21 let tmp%2#0: uint64 = (txn OnCompletion) let tmp%3#0: bool = (! tmp%2#0) @@ -18,143 +18,154 @@ contract test_cases.typed_abi_call.logger.Logger: let tmp%7#0: bytes = (concat 0x151f7c75 tmp%6#0) (log tmp%7#0) return 1u - block@3: // log_route_L25 + block@3: // no_args_route_L25 let tmp%8#0: uint64 = (txn OnCompletion) let tmp%9#0: bool = (! tmp%8#0) (assert tmp%9#0) // OnCompletion is NoOp let tmp%10#0: bool = (txn ApplicationID) (assert tmp%10#0) // is not creating - let tmp%11#0: bytes = (txna ApplicationArgs 1) - test_cases.typed_abi_call.logger.Logger.log_uint64(tmp%11#0) + let tmp%11#0: uint64 = test_cases.typed_abi_call.logger.Logger.no_args() + let val_as_bytes%0#0: bytes = (itob tmp%11#0) + let tmp%12#0: bytes = (concat 0x151f7c75 val_as_bytes%0#0) + (log tmp%12#0) return 1u block@4: // log_route_L29 - let tmp%12#0: uint64 = (txn OnCompletion) - let tmp%13#0: bool = (! tmp%12#0) - (assert tmp%13#0) // OnCompletion is NoOp - let tmp%14#0: bool = (txn ApplicationID) - (assert tmp%14#0) // is not creating - let tmp%15#0: bytes = (txna ApplicationArgs 1) - test_cases.typed_abi_call.logger.Logger.log_uint512(tmp%15#0) + let tmp%13#0: uint64 = (txn OnCompletion) + let tmp%14#0: bool = (! tmp%13#0) + (assert tmp%14#0) // OnCompletion is NoOp + let tmp%15#0: bool = (txn ApplicationID) + (assert tmp%15#0) // is not creating + let tmp%16#0: bytes = (txna ApplicationArgs 1) + test_cases.typed_abi_call.logger.Logger.log_uint64(tmp%16#0) return 1u block@5: // log_route_L33 - let tmp%16#0: uint64 = (txn OnCompletion) - let tmp%17#0: bool = (! tmp%16#0) - (assert tmp%17#0) // OnCompletion is NoOp - let tmp%18#0: bool = (txn ApplicationID) - (assert tmp%18#0) // is not creating - let tmp%19#0: bytes = (txna ApplicationArgs 1) - test_cases.typed_abi_call.logger.Logger.log_string(tmp%19#0) + let tmp%17#0: uint64 = (txn OnCompletion) + let tmp%18#0: bool = (! tmp%17#0) + (assert tmp%18#0) // OnCompletion is NoOp + let tmp%19#0: bool = (txn ApplicationID) + (assert tmp%19#0) // is not creating + let tmp%20#0: bytes = (txna ApplicationArgs 1) + test_cases.typed_abi_call.logger.Logger.log_uint512(tmp%20#0) return 1u block@6: // log_route_L37 - let tmp%20#0: uint64 = (txn OnCompletion) - let tmp%21#0: bool = (! tmp%20#0) - (assert tmp%21#0) // OnCompletion is NoOp - let tmp%22#0: bool = (txn ApplicationID) - (assert tmp%22#0) // is not creating - let tmp%23#0: bytes = (txna ApplicationArgs 1) - test_cases.typed_abi_call.logger.Logger.log_bool(tmp%23#0) + let tmp%21#0: uint64 = (txn OnCompletion) + let tmp%22#0: bool = (! tmp%21#0) + (assert tmp%22#0) // OnCompletion is NoOp + let tmp%23#0: bool = (txn ApplicationID) + (assert tmp%23#0) // is not creating + let tmp%24#0: bytes = (txna ApplicationArgs 1) + test_cases.typed_abi_call.logger.Logger.log_string(tmp%24#0) return 1u block@7: // log_route_L41 - let tmp%24#0: uint64 = (txn OnCompletion) - let tmp%25#0: bool = (! tmp%24#0) - (assert tmp%25#0) // OnCompletion is NoOp - let tmp%26#0: bool = (txn ApplicationID) - (assert tmp%26#0) // is not creating - let tmp%27#0: bytes = (txna ApplicationArgs 1) - test_cases.typed_abi_call.logger.Logger.log_bytes(tmp%27#0) + let tmp%25#0: uint64 = (txn OnCompletion) + let tmp%26#0: bool = (! tmp%25#0) + (assert tmp%26#0) // OnCompletion is NoOp + let tmp%27#0: bool = (txn ApplicationID) + (assert tmp%27#0) // is not creating + let tmp%28#0: bytes = (txna ApplicationArgs 1) + test_cases.typed_abi_call.logger.Logger.log_bool(tmp%28#0) return 1u block@8: // log_route_L45 - let tmp%28#0: uint64 = (txn OnCompletion) - let tmp%29#0: bool = (! tmp%28#0) - (assert tmp%29#0) // OnCompletion is NoOp - let tmp%30#0: bool = (txn ApplicationID) - (assert tmp%30#0) // is not creating - let tmp%31#0: bytes = (txna ApplicationArgs 1) - let tmp%32#0: uint64 = (btoi tmp%31#0) - let tmp%33#0: uint64 = ((txnas Assets) tmp%32#0) - let tmp%34#0: bytes = (txna ApplicationArgs 2) - let tmp%35#0: uint64 = (btoi tmp%34#0) - let tmp%36#0: bytes = ((txnas Accounts) tmp%35#0) - let tmp%37#0: bytes = (txna ApplicationArgs 3) - let tmp%38#0: uint64 = (btoi tmp%37#0) - let tmp%39#0: uint64 = ((txnas Applications) tmp%38#0) - test_cases.typed_abi_call.logger.Logger.log_asset_account_app(tmp%33#0, tmp%36#0, tmp%39#0) + let tmp%29#0: uint64 = (txn OnCompletion) + let tmp%30#0: bool = (! tmp%29#0) + (assert tmp%30#0) // OnCompletion is NoOp + let tmp%31#0: bool = (txn ApplicationID) + (assert tmp%31#0) // is not creating + let tmp%32#0: bytes = (txna ApplicationArgs 1) + test_cases.typed_abi_call.logger.Logger.log_bytes(tmp%32#0) return 1u - block@9: // echo_native_string_route_L49 - let tmp%40#0: uint64 = (txn OnCompletion) - let tmp%41#0: bool = (! tmp%40#0) - (assert tmp%41#0) // OnCompletion is NoOp - let tmp%42#0: bool = (txn ApplicationID) - (assert tmp%42#0) // is not creating - let tmp%43#0: bytes = (txna ApplicationArgs 1) - let tmp%44#0: bytes = ((extract 2 0) tmp%43#0) - let tmp%45#0: bytes = test_cases.typed_abi_call.logger.Logger.echo_native_string(tmp%44#0) - let length%0#0: uint64 = (len tmp%45#0) + block@9: // log_route_L49 + let tmp%33#0: uint64 = (txn OnCompletion) + let tmp%34#0: bool = (! tmp%33#0) + (assert tmp%34#0) // OnCompletion is NoOp + let tmp%35#0: bool = (txn ApplicationID) + (assert tmp%35#0) // is not creating + let tmp%36#0: bytes = (txna ApplicationArgs 1) + let tmp%37#0: uint64 = (btoi tmp%36#0) + let tmp%38#0: uint64 = ((txnas Assets) tmp%37#0) + let tmp%39#0: bytes = (txna ApplicationArgs 2) + let tmp%40#0: uint64 = (btoi tmp%39#0) + let tmp%41#0: bytes = ((txnas Accounts) tmp%40#0) + let tmp%42#0: bytes = (txna ApplicationArgs 3) + let tmp%43#0: uint64 = (btoi tmp%42#0) + let tmp%44#0: uint64 = ((txnas Applications) tmp%43#0) + test_cases.typed_abi_call.logger.Logger.log_asset_account_app(tmp%38#0, tmp%41#0, tmp%44#0) + return 1u + block@10: // echo_native_string_route_L53 + let tmp%45#0: uint64 = (txn OnCompletion) + let tmp%46#0: bool = (! tmp%45#0) + (assert tmp%46#0) // OnCompletion is NoOp + let tmp%47#0: bool = (txn ApplicationID) + (assert tmp%47#0) // is not creating + let tmp%48#0: bytes = (txna ApplicationArgs 1) + let tmp%49#0: bytes = ((extract 2 0) tmp%48#0) + let tmp%50#0: bytes = test_cases.typed_abi_call.logger.Logger.echo_native_string(tmp%49#0) + let length%0#0: uint64 = (len tmp%50#0) 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 tmp%45#0) - let tmp%46#0: bytes = (concat 0x151f7c75 encoded_value%0#0) - (log tmp%46#0) + let encoded_value%0#0: bytes = (concat length_uint16%0#0 tmp%50#0) + let tmp%51#0: bytes = (concat 0x151f7c75 encoded_value%0#0) + (log tmp%51#0) return 1u - block@10: // echo_native_bytes_route_L53 - let tmp%47#0: uint64 = (txn OnCompletion) - let tmp%48#0: bool = (! tmp%47#0) - (assert tmp%48#0) // OnCompletion is NoOp - let tmp%49#0: bool = (txn ApplicationID) - (assert tmp%49#0) // is not creating - let tmp%50#0: bytes = (txna ApplicationArgs 1) - let tmp%51#0: bytes = ((extract 2 0) tmp%50#0) - let tmp%52#0: bytes = test_cases.typed_abi_call.logger.Logger.echo_native_bytes(tmp%51#0) - let length%1#0: uint64 = (len tmp%52#0) + block@11: // echo_native_bytes_route_L57 + let tmp%52#0: uint64 = (txn OnCompletion) + let tmp%53#0: bool = (! tmp%52#0) + (assert tmp%53#0) // OnCompletion is NoOp + let tmp%54#0: bool = (txn ApplicationID) + (assert tmp%54#0) // is not creating + let tmp%55#0: bytes = (txna ApplicationArgs 1) + let tmp%56#0: bytes = ((extract 2 0) tmp%55#0) + let tmp%57#0: bytes = test_cases.typed_abi_call.logger.Logger.echo_native_bytes(tmp%56#0) + let length%1#0: uint64 = (len tmp%57#0) let as_bytes%1#0: bytes = (itob length%1#0) let length_uint16%1#0: bytes = ((extract 6 2) as_bytes%1#0) - let encoded_value%1#0: bytes = (concat length_uint16%1#0 tmp%52#0) - let tmp%53#0: bytes = (concat 0x151f7c75 encoded_value%1#0) - (log tmp%53#0) + let encoded_value%1#0: bytes = (concat length_uint16%1#0 tmp%57#0) + let tmp%58#0: bytes = (concat 0x151f7c75 encoded_value%1#0) + (log tmp%58#0) return 1u - block@11: // echo_native_uint64_route_L57 - let tmp%54#0: uint64 = (txn OnCompletion) - let tmp%55#0: bool = (! tmp%54#0) - (assert tmp%55#0) // OnCompletion is NoOp - let tmp%56#0: bool = (txn ApplicationID) - (assert tmp%56#0) // is not creating - let tmp%57#0: bytes = (txna ApplicationArgs 1) - let tmp%58#0: uint64 = (btoi tmp%57#0) - let tmp%59#0: uint64 = test_cases.typed_abi_call.logger.Logger.echo_native_uint64(tmp%58#0) - let val_as_bytes%0#0: bytes = (itob tmp%59#0) - let tmp%60#0: bytes = (concat 0x151f7c75 val_as_bytes%0#0) - (log tmp%60#0) + block@12: // echo_native_uint64_route_L61 + let tmp%59#0: uint64 = (txn OnCompletion) + let tmp%60#0: bool = (! tmp%59#0) + (assert tmp%60#0) // OnCompletion is NoOp + let tmp%61#0: bool = (txn ApplicationID) + (assert tmp%61#0) // is not creating + let tmp%62#0: bytes = (txna ApplicationArgs 1) + let tmp%63#0: uint64 = (btoi tmp%62#0) + let tmp%64#0: uint64 = test_cases.typed_abi_call.logger.Logger.echo_native_uint64(tmp%63#0) + let val_as_bytes%1#0: bytes = (itob tmp%64#0) + let tmp%65#0: bytes = (concat 0x151f7c75 val_as_bytes%1#0) + (log tmp%65#0) return 1u - block@12: // echo_native_biguint_route_L61 - let tmp%61#0: uint64 = (txn OnCompletion) - let tmp%62#0: bool = (! tmp%61#0) - (assert tmp%62#0) // OnCompletion is NoOp - let tmp%63#0: bool = (txn ApplicationID) - (assert tmp%63#0) // is not creating - let tmp%64#0: bytes = (txna ApplicationArgs 1) - let tmp%65#0: biguint = test_cases.typed_abi_call.logger.Logger.echo_native_biguint(tmp%64#0) - let len_%0#0: uint64 = (len tmp%65#0) + block@13: // echo_native_biguint_route_L65 + let tmp%66#0: uint64 = (txn OnCompletion) + let tmp%67#0: bool = (! tmp%66#0) + (assert tmp%67#0) // OnCompletion is NoOp + let tmp%68#0: bool = (txn ApplicationID) + (assert tmp%68#0) // is not creating + let tmp%69#0: bytes = (txna ApplicationArgs 1) + let tmp%70#0: biguint = test_cases.typed_abi_call.logger.Logger.echo_native_biguint(tmp%69#0) + let len_%0#0: uint64 = (len tmp%70#0) let no_overflow%0#0: bool = (<= len_%0#0 64u) (assert no_overflow%0#0) // overflow let b_zeros%0#0: bytes = (bzero 64u) - let tmp%66#0: bytes = (b| tmp%65#0 b_zeros%0#0) - let tmp%67#0: bytes = (concat 0x151f7c75 tmp%66#0) - (log tmp%67#0) + let tmp%71#0: bytes = (b| tmp%70#0 b_zeros%0#0) + let tmp%72#0: bytes = (concat 0x151f7c75 tmp%71#0) + (log tmp%72#0) return 1u - block@13: // echo_native_tuple_route_L65 - let tmp%68#0: uint64 = (txn OnCompletion) - let tmp%69#0: bool = (! tmp%68#0) - (assert tmp%69#0) // OnCompletion is NoOp - let tmp%70#0: bool = (txn ApplicationID) - (assert tmp%70#0) // is not creating - let tmp%71#0: bytes = (txna ApplicationArgs 1) - let tmp%72#0: bytes = ((extract 2 0) tmp%71#0) - let tmp%73#0: bytes = (txna ApplicationArgs 2) - let tmp%74#0: bytes = ((extract 2 0) tmp%73#0) - let tmp%75#0: bytes = (txna ApplicationArgs 3) - let tmp%76#0: uint64 = (btoi tmp%75#0) - let tmp%77#0: bytes = (txna ApplicationArgs 4) - let (awst_tmp%0#0: bytes, awst_tmp%1#0: bytes, awst_tmp%2#0: uint64, awst_tmp%3#0: biguint) = test_cases.typed_abi_call.logger.Logger.echo_native_tuple(tmp%72#0, tmp%74#0, tmp%76#0, tmp%77#0) + block@14: // echo_native_tuple_route_L69 + let tmp%73#0: uint64 = (txn OnCompletion) + let tmp%74#0: bool = (! tmp%73#0) + (assert tmp%74#0) // OnCompletion is NoOp + let tmp%75#0: bool = (txn ApplicationID) + (assert tmp%75#0) // is not creating + let tmp%76#0: bytes = (txna ApplicationArgs 1) + let tmp%77#0: bytes = ((extract 2 0) tmp%76#0) + let tmp%78#0: bytes = (txna ApplicationArgs 2) + let tmp%79#0: bytes = ((extract 2 0) tmp%78#0) + let tmp%80#0: bytes = (txna ApplicationArgs 3) + let tmp%81#0: uint64 = (btoi tmp%80#0) + let tmp%82#0: bytes = (txna ApplicationArgs 4) + let (awst_tmp%0#0: bytes, awst_tmp%1#0: bytes, awst_tmp%2#0: uint64, awst_tmp%3#0: biguint) = test_cases.typed_abi_call.logger.Logger.echo_native_tuple(tmp%77#0, tmp%79#0, tmp%81#0, tmp%82#0) let length%2#0: uint64 = (len awst_tmp%0#0) let as_bytes%2#0: bytes = (itob length%2#0) let length_uint16%2#0: bytes = ((extract 6 2) as_bytes%2#0) @@ -163,12 +174,12 @@ contract test_cases.typed_abi_call.logger.Logger: let as_bytes%3#0: bytes = (itob length%3#0) let length_uint16%3#0: bytes = ((extract 6 2) as_bytes%3#0) let encoded_value%3#0: bytes = (concat length_uint16%3#0 awst_tmp%1#0) - let val_as_bytes%1#0: bytes = (itob awst_tmp%2#0) + let val_as_bytes%2#0: bytes = (itob awst_tmp%2#0) let len_%1#0: uint64 = (len awst_tmp%3#0) let no_overflow%1#0: bool = (<= len_%1#0 64u) (assert no_overflow%1#0) // overflow let b_zeros%1#0: bytes = (bzero 64u) - let tmp%78#0: bytes = (b| awst_tmp%3#0 b_zeros%1#0) + let tmp%83#0: bytes = (b| awst_tmp%3#0 b_zeros%1#0) let offset_as_uint16%0#0: bytes = 0x004c let encoded_tuple_buffer%1#0: bytes = offset_as_uint16%0#0 let data_length%0#0: uint64 = (len encoded_value%2#0) @@ -177,56 +188,56 @@ contract test_cases.typed_abi_call.logger.Logger: let offset_as_uint16%1#0: bytes = ((extract 6 2) as_bytes%5#0) let encoded_tuple_buffer%2#0: bytes = (concat encoded_tuple_buffer%1#0 offset_as_uint16%1#0) let data_length%1#0: uint64 = (len encoded_value%3#0) - let encoded_tuple_buffer%3#0: bytes = (concat encoded_tuple_buffer%2#0 val_as_bytes%1#0) - let encoded_tuple_buffer%4#0: bytes = (concat encoded_tuple_buffer%3#0 tmp%78#0) + let encoded_tuple_buffer%3#0: bytes = (concat encoded_tuple_buffer%2#0 val_as_bytes%2#0) + let encoded_tuple_buffer%4#0: bytes = (concat encoded_tuple_buffer%3#0 tmp%83#0) let encoded_tuple_buffer%5#0: bytes = (concat encoded_tuple_buffer%4#0 encoded_value%2#0) let encoded_tuple_buffer%6#0: bytes = (concat encoded_tuple_buffer%5#0 encoded_value%3#0) - let tmp%79#0: bytes = (concat 0x151f7c75 encoded_tuple_buffer%6#0) - (log tmp%79#0) + let tmp%84#0: bytes = (concat 0x151f7c75 encoded_tuple_buffer%6#0) + (log tmp%84#0) return 1u - block@14: // return_args_after_14th_route_L71 - let tmp%80#0: uint64 = (txn OnCompletion) - let tmp%81#0: bool = (! tmp%80#0) - (assert tmp%81#0) // OnCompletion is NoOp - let tmp%82#0: bool = (txn ApplicationID) - (assert tmp%82#0) // is not creating - let tmp%83#0: bytes = (txna ApplicationArgs 1) - let tmp%84#0: bytes = (txna ApplicationArgs 2) - let tmp%85#0: bytes = (txna ApplicationArgs 3) - let tmp%86#0: bytes = (txna ApplicationArgs 4) - let tmp%87#0: bytes = (txna ApplicationArgs 5) - let tmp%88#0: bytes = (txna ApplicationArgs 6) - let tmp%89#0: bytes = (txna ApplicationArgs 7) - let tmp%90#0: bytes = (txna ApplicationArgs 8) - let tmp%91#0: bytes = (txna ApplicationArgs 9) - let tmp%92#0: bytes = (txna ApplicationArgs 10) - let tmp%93#0: bytes = (txna ApplicationArgs 11) - let tmp%94#0: bytes = (txna ApplicationArgs 12) - let tmp%95#0: bytes = (txna ApplicationArgs 13) - let tmp%96#0: bytes = (txna ApplicationArgs 14) - let tmp%97#0: bytes = (txna ApplicationArgs 15) - let tmp%98#0: bytes = ((extract 0 1) tmp%97#0) // on error: Index access is out of bounds - let tmp%99#0: bytes = (txna ApplicationArgs 15) - let tmp%100#0: bytes = ((extract 1 1) tmp%99#0) // on error: Index access is out of bounds - let tmp%101#0: bytes = (txna ApplicationArgs 15) - let tmp%102#0: bytes = ((extract 2 1) tmp%101#0) // on error: Index access is out of bounds - let tmp%103#0: bytes = (txna ApplicationArgs 15) - let tmp%104#0: bytes = ((extract 3 1) tmp%103#0) // on error: Index access is out of bounds - let tmp%105#0: bytes = (txna ApplicationArgs 15) - let tmp%106#0: bytes = ((extract 4 4) tmp%105#0) // on error: Index access is out of bounds - let tmp%107#0: bytes = (txna ApplicationArgs 15) - let tmp%108#0: bytes = ((extract 8 1) tmp%107#0) // on error: Index access is out of bounds - let tmp%109#0: bytes = test_cases.typed_abi_call.logger.Logger.return_args_after_14th(tmp%83#0, tmp%84#0, tmp%85#0, tmp%86#0, tmp%87#0, tmp%88#0, tmp%89#0, tmp%90#0, tmp%91#0, tmp%92#0, tmp%93#0, tmp%94#0, tmp%95#0, tmp%96#0, tmp%98#0, tmp%100#0, tmp%102#0, tmp%104#0, tmp%106#0, tmp%108#0) - let tmp%110#0: bytes = (concat 0x151f7c75 tmp%109#0) - (log tmp%110#0) + block@15: // return_args_after_14th_route_L75 + let tmp%85#0: uint64 = (txn OnCompletion) + let tmp%86#0: bool = (! tmp%85#0) + (assert tmp%86#0) // OnCompletion is NoOp + let tmp%87#0: bool = (txn ApplicationID) + (assert tmp%87#0) // is not creating + let tmp%88#0: bytes = (txna ApplicationArgs 1) + let tmp%89#0: bytes = (txna ApplicationArgs 2) + let tmp%90#0: bytes = (txna ApplicationArgs 3) + let tmp%91#0: bytes = (txna ApplicationArgs 4) + let tmp%92#0: bytes = (txna ApplicationArgs 5) + let tmp%93#0: bytes = (txna ApplicationArgs 6) + let tmp%94#0: bytes = (txna ApplicationArgs 7) + let tmp%95#0: bytes = (txna ApplicationArgs 8) + let tmp%96#0: bytes = (txna ApplicationArgs 9) + let tmp%97#0: bytes = (txna ApplicationArgs 10) + let tmp%98#0: bytes = (txna ApplicationArgs 11) + let tmp%99#0: bytes = (txna ApplicationArgs 12) + let tmp%100#0: bytes = (txna ApplicationArgs 13) + let tmp%101#0: bytes = (txna ApplicationArgs 14) + let tmp%102#0: bytes = (txna ApplicationArgs 15) + let tmp%103#0: bytes = ((extract 0 1) tmp%102#0) // on error: Index access is out of bounds + let tmp%104#0: bytes = (txna ApplicationArgs 15) + let tmp%105#0: bytes = ((extract 1 1) tmp%104#0) // on error: Index access is out of bounds + let tmp%106#0: bytes = (txna ApplicationArgs 15) + let tmp%107#0: bytes = ((extract 2 1) tmp%106#0) // on error: Index access is out of bounds + let tmp%108#0: bytes = (txna ApplicationArgs 15) + let tmp%109#0: bytes = ((extract 3 1) tmp%108#0) // on error: Index access is out of bounds + let tmp%110#0: bytes = (txna ApplicationArgs 15) + let tmp%111#0: bytes = ((extract 4 4) tmp%110#0) // on error: Index access is out of bounds + let tmp%112#0: bytes = (txna ApplicationArgs 15) + let tmp%113#0: bytes = ((extract 8 1) tmp%112#0) // on error: Index access is out of bounds + let tmp%114#0: bytes = test_cases.typed_abi_call.logger.Logger.return_args_after_14th(tmp%88#0, tmp%89#0, tmp%90#0, tmp%91#0, tmp%92#0, tmp%93#0, tmp%94#0, tmp%95#0, tmp%96#0, tmp%97#0, tmp%98#0, tmp%99#0, tmp%100#0, tmp%101#0, tmp%103#0, tmp%105#0, tmp%107#0, tmp%109#0, tmp%111#0, tmp%113#0) + let tmp%115#0: bytes = (concat 0x151f7c75 tmp%114#0) + (log tmp%115#0) return 1u - block@17: // bare_routing_L20 - let tmp%111#0: uint64 = (txn OnCompletion) - let not%tmp%111#0: bool = (! tmp%111#0) - (assert not%tmp%111#0) // reject transaction - let tmp%112#0: bool = (txn ApplicationID) - let tmp%113#0: bool = (! tmp%112#0) - (assert tmp%113#0) // is creating + block@18: // bare_routing_L20 + let tmp%116#0: uint64 = (txn OnCompletion) + let not%tmp%116#0: bool = (! tmp%116#0) + (assert not%tmp%116#0) // reject transaction + let tmp%117#0: bool = (txn ApplicationID) + let tmp%118#0: bool = (! tmp%117#0) + (assert tmp%118#0) // is creating return 1u subroutine test_cases.typed_abi_call.logger.Logger.echo(value: bytes) -> bytes: @@ -244,37 +255,41 @@ contract test_cases.typed_abi_call.logger.Logger: let concat_result%0#0: bytes = (concat len_16_bit%0#0 concatenated%0#0) return concat_result%0#0 - subroutine test_cases.typed_abi_call.logger.Logger.log_uint64(value: bytes) -> void: + subroutine test_cases.typed_abi_call.logger.Logger.no_args() -> uint64: block@0: // L25 + return 42u + + subroutine test_cases.typed_abi_call.logger.Logger.log_uint64(value: bytes) -> void: + block@0: // L29 (log value#0) return subroutine test_cases.typed_abi_call.logger.Logger.log_uint512(value: bytes) -> void: - block@0: // L29 + block@0: // L33 (log value#0) return subroutine test_cases.typed_abi_call.logger.Logger.log_string(value: bytes) -> void: - block@0: // L33 + block@0: // L37 let tmp%0#0: bytes = ((extract 2 0) value#0) (log tmp%0#0) return subroutine test_cases.typed_abi_call.logger.Logger.log_bool(value: bytes) -> void: - block@0: // L37 + block@0: // L41 let tmp%0#0: bool = (getbit value#0 0u) let tmp%1#0: bytes = (select 0x46616c7365 0x54727565 tmp%0#0) (log tmp%1#0) return subroutine test_cases.typed_abi_call.logger.Logger.log_bytes(value: bytes) -> void: - block@0: // L41 + block@0: // L45 let tmp%0#0: bytes = ((extract 2 0) value#0) (log tmp%0#0) return subroutine test_cases.typed_abi_call.logger.Logger.log_asset_account_app(asset: uint64, account: bytes, app: uint64) -> void: - block@0: // L45 + block@0: // L49 let (value%0#0: bytes, check%0#0: bool) = ((asset_params_get AssetName) asset#0) (assert check%0#0) // asset exists let tmp%0#0: bytes = value%0#0 @@ -287,27 +302,27 @@ contract test_cases.typed_abi_call.logger.Logger: return subroutine test_cases.typed_abi_call.logger.Logger.echo_native_string(value: bytes) -> bytes: - block@0: // L49 + block@0: // L53 let tmp%0#0: bytes = (concat "echo: " value#0) return tmp%0#0 subroutine test_cases.typed_abi_call.logger.Logger.echo_native_bytes(value: bytes) -> bytes: - block@0: // L53 + block@0: // L57 let tmp%0#0: bytes = (concat 0x6563686f3a20 value#0) return tmp%0#0 subroutine test_cases.typed_abi_call.logger.Logger.echo_native_uint64(value: uint64) -> uint64: - block@0: // L57 + block@0: // L61 let tmp%0#0: uint64 = (+ value#0 1u) return tmp%0#0 subroutine test_cases.typed_abi_call.logger.Logger.echo_native_biguint(value: biguint) -> biguint: - block@0: // L61 + block@0: // L65 let tmp%0#0: biguint = (b+ value#0 1b) return tmp%0#0 subroutine test_cases.typed_abi_call.logger.Logger.echo_native_tuple(s: bytes, b: bytes, u: uint64, bu: biguint) -> : - block@0: // L65 + block@0: // L69 let tmp%0#0: bytes = (concat "echo: " s#0) let tmp%1#0: bytes = (concat 0x6563686f3a20 b#0) let tmp%2#0: uint64 = (+ u#0 1u) @@ -315,7 +330,7 @@ contract test_cases.typed_abi_call.logger.Logger: return tmp%0#0 tmp%1#0 tmp%2#0 tmp%3#0 subroutine test_cases.typed_abi_call.logger.Logger.return_args_after_14th(_a1: bytes, _a2: bytes, _a3: bytes, _a4: bytes, _a5: bytes, _a6: bytes, _a7: bytes, _a8: bytes, _a9: bytes, _a10: bytes, _a11: bytes, _a12: bytes, _a13: bytes, _a14: bytes, a15: bytes, a16: bytes, a17: bytes, a18: bytes, a19: bytes, a20: bytes) -> bytes: - block@0: // L71 + block@0: // L75 let encoded_tuple_buffer%1#0: bytes = a15#0 let encoded_tuple_buffer%2#0: bytes = (concat encoded_tuple_buffer%1#0 a16#0) let encoded_tuple_buffer%3#0: bytes = (concat encoded_tuple_buffer%2#0 a17#0) diff --git a/test_cases/typed_abi_call/out/Logger.ssa.opt_pass_2.ir b/test_cases/typed_abi_call/out/Logger.ssa.opt_pass_2.ir index 73a130e8cd..ca9c05c4ee 100644 --- a/test_cases/typed_abi_call/out/Logger.ssa.opt_pass_2.ir +++ b/test_cases/typed_abi_call/out/Logger.ssa.opt_pass_2.ir @@ -3,10 +3,10 @@ contract test_cases.typed_abi_call.logger.Logger: subroutine test_cases.typed_abi_call.logger.Logger.approval_program() -> bool: block@0: // L20 let tmp%0#0: bool = (txn NumAppArgs) - goto tmp%0#0 ? block@1 : block@17 + goto tmp%0#0 ? block@1 : block@18 block@1: // abi_routing_L20 let tmp%1#0: bytes = (txna ApplicationArgs 0) - switch tmp%1#0 {method "echo(string)string" => block@2, method "log(uint64)void" => block@3, method "log(uint512)void" => block@4, method "log(string)void" => block@5, method "log(bool)void" => block@6, method "log(byte[])void" => block@7, method "log(asset,account,application)void" => block@8, method "echo_native_string(string)string" => block@9, method "echo_native_bytes(byte[])byte[]" => block@10, method "echo_native_uint64(uint64)uint64" => block@11, method "echo_native_biguint(uint512)uint512" => block@12, method "echo_native_tuple(string,byte[],uint64,uint512)(string,byte[],uint64,uint512)" => block@13, method "return_args_after_14th(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint8,uint8,uint8,uint8,(uint8,uint8,uint8,uint8),uint8)byte[]" => block@14, * => fail // reject transaction} + switch tmp%1#0 {method "echo(string)string" => block@2, method "no_args()uint64" => block@3, method "log(uint64)void" => block@4, method "log(uint512)void" => block@5, method "log(string)void" => block@6, method "log(bool)void" => block@7, method "log(byte[])void" => block@8, method "log(asset,account,application)void" => block@9, method "echo_native_string(string)string" => block@10, method "echo_native_bytes(byte[])byte[]" => block@11, method "echo_native_uint64(uint64)uint64" => block@12, method "echo_native_biguint(uint512)uint512" => block@13, method "echo_native_tuple(string,byte[],uint64,uint512)(string,byte[],uint64,uint512)" => block@14, method "return_args_after_14th(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint8,uint8,uint8,uint8,(uint8,uint8,uint8,uint8),uint8)byte[]" => block@15, * => fail // reject transaction} block@2: // echo_route_L21 let tmp%2#0: uint64 = (txn OnCompletion) let tmp%3#0: bool = (! tmp%2#0) @@ -18,143 +18,154 @@ contract test_cases.typed_abi_call.logger.Logger: let tmp%7#0: bytes = (concat 0x151f7c75 tmp%6#0) (log tmp%7#0) return 1u - block@3: // log_route_L25 + block@3: // no_args_route_L25 let tmp%8#0: uint64 = (txn OnCompletion) let tmp%9#0: bool = (! tmp%8#0) (assert tmp%9#0) // OnCompletion is NoOp let tmp%10#0: bool = (txn ApplicationID) (assert tmp%10#0) // is not creating - let tmp%11#0: bytes = (txna ApplicationArgs 1) - test_cases.typed_abi_call.logger.Logger.log_uint64(tmp%11#0) + let tmp%11#0: uint64 = test_cases.typed_abi_call.logger.Logger.no_args() + let val_as_bytes%0#0: bytes = (itob tmp%11#0) + let tmp%12#0: bytes = (concat 0x151f7c75 val_as_bytes%0#0) + (log tmp%12#0) return 1u block@4: // log_route_L29 - let tmp%12#0: uint64 = (txn OnCompletion) - let tmp%13#0: bool = (! tmp%12#0) - (assert tmp%13#0) // OnCompletion is NoOp - let tmp%14#0: bool = (txn ApplicationID) - (assert tmp%14#0) // is not creating - let tmp%15#0: bytes = (txna ApplicationArgs 1) - test_cases.typed_abi_call.logger.Logger.log_uint512(tmp%15#0) + let tmp%13#0: uint64 = (txn OnCompletion) + let tmp%14#0: bool = (! tmp%13#0) + (assert tmp%14#0) // OnCompletion is NoOp + let tmp%15#0: bool = (txn ApplicationID) + (assert tmp%15#0) // is not creating + let tmp%16#0: bytes = (txna ApplicationArgs 1) + test_cases.typed_abi_call.logger.Logger.log_uint64(tmp%16#0) return 1u block@5: // log_route_L33 - let tmp%16#0: uint64 = (txn OnCompletion) - let tmp%17#0: bool = (! tmp%16#0) - (assert tmp%17#0) // OnCompletion is NoOp - let tmp%18#0: bool = (txn ApplicationID) - (assert tmp%18#0) // is not creating - let tmp%19#0: bytes = (txna ApplicationArgs 1) - test_cases.typed_abi_call.logger.Logger.log_string(tmp%19#0) + let tmp%17#0: uint64 = (txn OnCompletion) + let tmp%18#0: bool = (! tmp%17#0) + (assert tmp%18#0) // OnCompletion is NoOp + let tmp%19#0: bool = (txn ApplicationID) + (assert tmp%19#0) // is not creating + let tmp%20#0: bytes = (txna ApplicationArgs 1) + test_cases.typed_abi_call.logger.Logger.log_uint512(tmp%20#0) return 1u block@6: // log_route_L37 - let tmp%20#0: uint64 = (txn OnCompletion) - let tmp%21#0: bool = (! tmp%20#0) - (assert tmp%21#0) // OnCompletion is NoOp - let tmp%22#0: bool = (txn ApplicationID) - (assert tmp%22#0) // is not creating - let tmp%23#0: bytes = (txna ApplicationArgs 1) - test_cases.typed_abi_call.logger.Logger.log_bool(tmp%23#0) + let tmp%21#0: uint64 = (txn OnCompletion) + let tmp%22#0: bool = (! tmp%21#0) + (assert tmp%22#0) // OnCompletion is NoOp + let tmp%23#0: bool = (txn ApplicationID) + (assert tmp%23#0) // is not creating + let tmp%24#0: bytes = (txna ApplicationArgs 1) + test_cases.typed_abi_call.logger.Logger.log_string(tmp%24#0) return 1u block@7: // log_route_L41 - let tmp%24#0: uint64 = (txn OnCompletion) - let tmp%25#0: bool = (! tmp%24#0) - (assert tmp%25#0) // OnCompletion is NoOp - let tmp%26#0: bool = (txn ApplicationID) - (assert tmp%26#0) // is not creating - let tmp%27#0: bytes = (txna ApplicationArgs 1) - test_cases.typed_abi_call.logger.Logger.log_bytes(tmp%27#0) + let tmp%25#0: uint64 = (txn OnCompletion) + let tmp%26#0: bool = (! tmp%25#0) + (assert tmp%26#0) // OnCompletion is NoOp + let tmp%27#0: bool = (txn ApplicationID) + (assert tmp%27#0) // is not creating + let tmp%28#0: bytes = (txna ApplicationArgs 1) + test_cases.typed_abi_call.logger.Logger.log_bool(tmp%28#0) return 1u block@8: // log_route_L45 - let tmp%28#0: uint64 = (txn OnCompletion) - let tmp%29#0: bool = (! tmp%28#0) - (assert tmp%29#0) // OnCompletion is NoOp - let tmp%30#0: bool = (txn ApplicationID) - (assert tmp%30#0) // is not creating - let tmp%31#0: bytes = (txna ApplicationArgs 1) - let tmp%32#0: uint64 = (btoi tmp%31#0) - let tmp%33#0: uint64 = ((txnas Assets) tmp%32#0) - let tmp%34#0: bytes = (txna ApplicationArgs 2) - let tmp%35#0: uint64 = (btoi tmp%34#0) - let tmp%36#0: bytes = ((txnas Accounts) tmp%35#0) - let tmp%37#0: bytes = (txna ApplicationArgs 3) - let tmp%38#0: uint64 = (btoi tmp%37#0) - let tmp%39#0: uint64 = ((txnas Applications) tmp%38#0) - test_cases.typed_abi_call.logger.Logger.log_asset_account_app(tmp%33#0, tmp%36#0, tmp%39#0) + let tmp%29#0: uint64 = (txn OnCompletion) + let tmp%30#0: bool = (! tmp%29#0) + (assert tmp%30#0) // OnCompletion is NoOp + let tmp%31#0: bool = (txn ApplicationID) + (assert tmp%31#0) // is not creating + let tmp%32#0: bytes = (txna ApplicationArgs 1) + test_cases.typed_abi_call.logger.Logger.log_bytes(tmp%32#0) return 1u - block@9: // echo_native_string_route_L49 - let tmp%40#0: uint64 = (txn OnCompletion) - let tmp%41#0: bool = (! tmp%40#0) - (assert tmp%41#0) // OnCompletion is NoOp - let tmp%42#0: bool = (txn ApplicationID) - (assert tmp%42#0) // is not creating - let tmp%43#0: bytes = (txna ApplicationArgs 1) - let tmp%44#0: bytes = ((extract 2 0) tmp%43#0) - let tmp%45#0: bytes = test_cases.typed_abi_call.logger.Logger.echo_native_string(tmp%44#0) - let length%0#0: uint64 = (len tmp%45#0) + block@9: // log_route_L49 + let tmp%33#0: uint64 = (txn OnCompletion) + let tmp%34#0: bool = (! tmp%33#0) + (assert tmp%34#0) // OnCompletion is NoOp + let tmp%35#0: bool = (txn ApplicationID) + (assert tmp%35#0) // is not creating + let tmp%36#0: bytes = (txna ApplicationArgs 1) + let tmp%37#0: uint64 = (btoi tmp%36#0) + let tmp%38#0: uint64 = ((txnas Assets) tmp%37#0) + let tmp%39#0: bytes = (txna ApplicationArgs 2) + let tmp%40#0: uint64 = (btoi tmp%39#0) + let tmp%41#0: bytes = ((txnas Accounts) tmp%40#0) + let tmp%42#0: bytes = (txna ApplicationArgs 3) + let tmp%43#0: uint64 = (btoi tmp%42#0) + let tmp%44#0: uint64 = ((txnas Applications) tmp%43#0) + test_cases.typed_abi_call.logger.Logger.log_asset_account_app(tmp%38#0, tmp%41#0, tmp%44#0) + return 1u + block@10: // echo_native_string_route_L53 + let tmp%45#0: uint64 = (txn OnCompletion) + let tmp%46#0: bool = (! tmp%45#0) + (assert tmp%46#0) // OnCompletion is NoOp + let tmp%47#0: bool = (txn ApplicationID) + (assert tmp%47#0) // is not creating + let tmp%48#0: bytes = (txna ApplicationArgs 1) + let tmp%49#0: bytes = ((extract 2 0) tmp%48#0) + let tmp%50#0: bytes = test_cases.typed_abi_call.logger.Logger.echo_native_string(tmp%49#0) + let length%0#0: uint64 = (len tmp%50#0) 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 tmp%45#0) - let tmp%46#0: bytes = (concat 0x151f7c75 encoded_value%0#0) - (log tmp%46#0) + let encoded_value%0#0: bytes = (concat length_uint16%0#0 tmp%50#0) + let tmp%51#0: bytes = (concat 0x151f7c75 encoded_value%0#0) + (log tmp%51#0) return 1u - block@10: // echo_native_bytes_route_L53 - let tmp%47#0: uint64 = (txn OnCompletion) - let tmp%48#0: bool = (! tmp%47#0) - (assert tmp%48#0) // OnCompletion is NoOp - let tmp%49#0: bool = (txn ApplicationID) - (assert tmp%49#0) // is not creating - let tmp%50#0: bytes = (txna ApplicationArgs 1) - let tmp%51#0: bytes = ((extract 2 0) tmp%50#0) - let tmp%52#0: bytes = test_cases.typed_abi_call.logger.Logger.echo_native_bytes(tmp%51#0) - let length%1#0: uint64 = (len tmp%52#0) + block@11: // echo_native_bytes_route_L57 + let tmp%52#0: uint64 = (txn OnCompletion) + let tmp%53#0: bool = (! tmp%52#0) + (assert tmp%53#0) // OnCompletion is NoOp + let tmp%54#0: bool = (txn ApplicationID) + (assert tmp%54#0) // is not creating + let tmp%55#0: bytes = (txna ApplicationArgs 1) + let tmp%56#0: bytes = ((extract 2 0) tmp%55#0) + let tmp%57#0: bytes = test_cases.typed_abi_call.logger.Logger.echo_native_bytes(tmp%56#0) + let length%1#0: uint64 = (len tmp%57#0) let as_bytes%1#0: bytes = (itob length%1#0) let length_uint16%1#0: bytes = ((extract 6 2) as_bytes%1#0) - let encoded_value%1#0: bytes = (concat length_uint16%1#0 tmp%52#0) - let tmp%53#0: bytes = (concat 0x151f7c75 encoded_value%1#0) - (log tmp%53#0) + let encoded_value%1#0: bytes = (concat length_uint16%1#0 tmp%57#0) + let tmp%58#0: bytes = (concat 0x151f7c75 encoded_value%1#0) + (log tmp%58#0) return 1u - block@11: // echo_native_uint64_route_L57 - let tmp%54#0: uint64 = (txn OnCompletion) - let tmp%55#0: bool = (! tmp%54#0) - (assert tmp%55#0) // OnCompletion is NoOp - let tmp%56#0: bool = (txn ApplicationID) - (assert tmp%56#0) // is not creating - let tmp%57#0: bytes = (txna ApplicationArgs 1) - let tmp%58#0: uint64 = (btoi tmp%57#0) - let tmp%59#0: uint64 = test_cases.typed_abi_call.logger.Logger.echo_native_uint64(tmp%58#0) - let val_as_bytes%0#0: bytes = (itob tmp%59#0) - let tmp%60#0: bytes = (concat 0x151f7c75 val_as_bytes%0#0) - (log tmp%60#0) + block@12: // echo_native_uint64_route_L61 + let tmp%59#0: uint64 = (txn OnCompletion) + let tmp%60#0: bool = (! tmp%59#0) + (assert tmp%60#0) // OnCompletion is NoOp + let tmp%61#0: bool = (txn ApplicationID) + (assert tmp%61#0) // is not creating + let tmp%62#0: bytes = (txna ApplicationArgs 1) + let tmp%63#0: uint64 = (btoi tmp%62#0) + let tmp%64#0: uint64 = test_cases.typed_abi_call.logger.Logger.echo_native_uint64(tmp%63#0) + let val_as_bytes%1#0: bytes = (itob tmp%64#0) + let tmp%65#0: bytes = (concat 0x151f7c75 val_as_bytes%1#0) + (log tmp%65#0) return 1u - block@12: // echo_native_biguint_route_L61 - let tmp%61#0: uint64 = (txn OnCompletion) - let tmp%62#0: bool = (! tmp%61#0) - (assert tmp%62#0) // OnCompletion is NoOp - let tmp%63#0: bool = (txn ApplicationID) - (assert tmp%63#0) // is not creating - let tmp%64#0: bytes = (txna ApplicationArgs 1) - let tmp%65#0: biguint = test_cases.typed_abi_call.logger.Logger.echo_native_biguint(tmp%64#0) - let len_%0#0: uint64 = (len tmp%65#0) + block@13: // echo_native_biguint_route_L65 + let tmp%66#0: uint64 = (txn OnCompletion) + let tmp%67#0: bool = (! tmp%66#0) + (assert tmp%67#0) // OnCompletion is NoOp + let tmp%68#0: bool = (txn ApplicationID) + (assert tmp%68#0) // is not creating + let tmp%69#0: bytes = (txna ApplicationArgs 1) + let tmp%70#0: biguint = test_cases.typed_abi_call.logger.Logger.echo_native_biguint(tmp%69#0) + let len_%0#0: uint64 = (len tmp%70#0) let no_overflow%0#0: bool = (<= len_%0#0 64u) (assert no_overflow%0#0) // overflow let b_zeros%0#0: bytes = (bzero 64u) - let tmp%66#0: bytes = (b| tmp%65#0 b_zeros%0#0) - let tmp%67#0: bytes = (concat 0x151f7c75 tmp%66#0) - (log tmp%67#0) + let tmp%71#0: bytes = (b| tmp%70#0 b_zeros%0#0) + let tmp%72#0: bytes = (concat 0x151f7c75 tmp%71#0) + (log tmp%72#0) return 1u - block@13: // echo_native_tuple_route_L65 - let tmp%68#0: uint64 = (txn OnCompletion) - let tmp%69#0: bool = (! tmp%68#0) - (assert tmp%69#0) // OnCompletion is NoOp - let tmp%70#0: bool = (txn ApplicationID) - (assert tmp%70#0) // is not creating - let tmp%71#0: bytes = (txna ApplicationArgs 1) - let tmp%72#0: bytes = ((extract 2 0) tmp%71#0) - let tmp%73#0: bytes = (txna ApplicationArgs 2) - let tmp%74#0: bytes = ((extract 2 0) tmp%73#0) - let tmp%75#0: bytes = (txna ApplicationArgs 3) - let tmp%76#0: uint64 = (btoi tmp%75#0) - let tmp%77#0: bytes = (txna ApplicationArgs 4) - let (awst_tmp%0#0: bytes, awst_tmp%1#0: bytes, awst_tmp%2#0: uint64, awst_tmp%3#0: biguint) = test_cases.typed_abi_call.logger.Logger.echo_native_tuple(tmp%72#0, tmp%74#0, tmp%76#0, tmp%77#0) + block@14: // echo_native_tuple_route_L69 + let tmp%73#0: uint64 = (txn OnCompletion) + let tmp%74#0: bool = (! tmp%73#0) + (assert tmp%74#0) // OnCompletion is NoOp + let tmp%75#0: bool = (txn ApplicationID) + (assert tmp%75#0) // is not creating + let tmp%76#0: bytes = (txna ApplicationArgs 1) + let tmp%77#0: bytes = ((extract 2 0) tmp%76#0) + let tmp%78#0: bytes = (txna ApplicationArgs 2) + let tmp%79#0: bytes = ((extract 2 0) tmp%78#0) + let tmp%80#0: bytes = (txna ApplicationArgs 3) + let tmp%81#0: uint64 = (btoi tmp%80#0) + let tmp%82#0: bytes = (txna ApplicationArgs 4) + let (awst_tmp%0#0: bytes, awst_tmp%1#0: bytes, awst_tmp%2#0: uint64, awst_tmp%3#0: biguint) = test_cases.typed_abi_call.logger.Logger.echo_native_tuple(tmp%77#0, tmp%79#0, tmp%81#0, tmp%82#0) let length%2#0: uint64 = (len awst_tmp%0#0) let as_bytes%2#0: bytes = (itob length%2#0) let length_uint16%2#0: bytes = ((extract 6 2) as_bytes%2#0) @@ -163,67 +174,67 @@ contract test_cases.typed_abi_call.logger.Logger: let as_bytes%3#0: bytes = (itob length%3#0) let length_uint16%3#0: bytes = ((extract 6 2) as_bytes%3#0) let encoded_value%3#0: bytes = (concat length_uint16%3#0 awst_tmp%1#0) - let val_as_bytes%1#0: bytes = (itob awst_tmp%2#0) + let val_as_bytes%2#0: bytes = (itob awst_tmp%2#0) let len_%1#0: uint64 = (len awst_tmp%3#0) let no_overflow%1#0: bool = (<= len_%1#0 64u) (assert no_overflow%1#0) // overflow let b_zeros%1#0: bytes = (bzero 64u) - let tmp%78#0: bytes = (b| awst_tmp%3#0 b_zeros%1#0) + let tmp%83#0: bytes = (b| awst_tmp%3#0 b_zeros%1#0) let data_length%0#0: uint64 = (len encoded_value%2#0) let current_tail_offset%1#0: uint64 = (+ 76u data_length%0#0) let as_bytes%5#0: bytes = (itob current_tail_offset%1#0) let offset_as_uint16%1#0: bytes = ((extract 6 2) as_bytes%5#0) let encoded_tuple_buffer%2#0: bytes = (concat 0x004c offset_as_uint16%1#0) - let encoded_tuple_buffer%3#0: bytes = (concat encoded_tuple_buffer%2#0 val_as_bytes%1#0) - let encoded_tuple_buffer%4#0: bytes = (concat encoded_tuple_buffer%3#0 tmp%78#0) + let encoded_tuple_buffer%3#0: bytes = (concat encoded_tuple_buffer%2#0 val_as_bytes%2#0) + let encoded_tuple_buffer%4#0: bytes = (concat encoded_tuple_buffer%3#0 tmp%83#0) let encoded_tuple_buffer%5#0: bytes = (concat encoded_tuple_buffer%4#0 encoded_value%2#0) let encoded_tuple_buffer%6#0: bytes = (concat encoded_tuple_buffer%5#0 encoded_value%3#0) - let tmp%79#0: bytes = (concat 0x151f7c75 encoded_tuple_buffer%6#0) - (log tmp%79#0) + let tmp%84#0: bytes = (concat 0x151f7c75 encoded_tuple_buffer%6#0) + (log tmp%84#0) return 1u - block@14: // return_args_after_14th_route_L71 - let tmp%80#0: uint64 = (txn OnCompletion) - let tmp%81#0: bool = (! tmp%80#0) - (assert tmp%81#0) // OnCompletion is NoOp - let tmp%82#0: bool = (txn ApplicationID) - (assert tmp%82#0) // is not creating - let tmp%83#0: bytes = (txna ApplicationArgs 1) - let tmp%84#0: bytes = (txna ApplicationArgs 2) - let tmp%85#0: bytes = (txna ApplicationArgs 3) - let tmp%86#0: bytes = (txna ApplicationArgs 4) - let tmp%87#0: bytes = (txna ApplicationArgs 5) - let tmp%88#0: bytes = (txna ApplicationArgs 6) - let tmp%89#0: bytes = (txna ApplicationArgs 7) - let tmp%90#0: bytes = (txna ApplicationArgs 8) - let tmp%91#0: bytes = (txna ApplicationArgs 9) - let tmp%92#0: bytes = (txna ApplicationArgs 10) - let tmp%93#0: bytes = (txna ApplicationArgs 11) - let tmp%94#0: bytes = (txna ApplicationArgs 12) - let tmp%95#0: bytes = (txna ApplicationArgs 13) - let tmp%96#0: bytes = (txna ApplicationArgs 14) - let tmp%97#0: bytes = (txna ApplicationArgs 15) - let tmp%98#0: bytes = ((extract 0 1) tmp%97#0) // on error: Index access is out of bounds - let tmp%99#0: bytes = (txna ApplicationArgs 15) - let tmp%100#0: bytes = ((extract 1 1) tmp%99#0) // on error: Index access is out of bounds - let tmp%101#0: bytes = (txna ApplicationArgs 15) - let tmp%102#0: bytes = ((extract 2 1) tmp%101#0) // on error: Index access is out of bounds - let tmp%103#0: bytes = (txna ApplicationArgs 15) - let tmp%104#0: bytes = ((extract 3 1) tmp%103#0) // on error: Index access is out of bounds - let tmp%105#0: bytes = (txna ApplicationArgs 15) - let tmp%106#0: bytes = ((extract 4 4) tmp%105#0) // on error: Index access is out of bounds - let tmp%107#0: bytes = (txna ApplicationArgs 15) - let tmp%108#0: bytes = ((extract 8 1) tmp%107#0) // on error: Index access is out of bounds - let tmp%109#0: bytes = test_cases.typed_abi_call.logger.Logger.return_args_after_14th(tmp%83#0, tmp%84#0, tmp%85#0, tmp%86#0, tmp%87#0, tmp%88#0, tmp%89#0, tmp%90#0, tmp%91#0, tmp%92#0, tmp%93#0, tmp%94#0, tmp%95#0, tmp%96#0, tmp%98#0, tmp%100#0, tmp%102#0, tmp%104#0, tmp%106#0, tmp%108#0) - let tmp%110#0: bytes = (concat 0x151f7c75 tmp%109#0) - (log tmp%110#0) + block@15: // return_args_after_14th_route_L75 + let tmp%85#0: uint64 = (txn OnCompletion) + let tmp%86#0: bool = (! tmp%85#0) + (assert tmp%86#0) // OnCompletion is NoOp + let tmp%87#0: bool = (txn ApplicationID) + (assert tmp%87#0) // is not creating + let tmp%88#0: bytes = (txna ApplicationArgs 1) + let tmp%89#0: bytes = (txna ApplicationArgs 2) + let tmp%90#0: bytes = (txna ApplicationArgs 3) + let tmp%91#0: bytes = (txna ApplicationArgs 4) + let tmp%92#0: bytes = (txna ApplicationArgs 5) + let tmp%93#0: bytes = (txna ApplicationArgs 6) + let tmp%94#0: bytes = (txna ApplicationArgs 7) + let tmp%95#0: bytes = (txna ApplicationArgs 8) + let tmp%96#0: bytes = (txna ApplicationArgs 9) + let tmp%97#0: bytes = (txna ApplicationArgs 10) + let tmp%98#0: bytes = (txna ApplicationArgs 11) + let tmp%99#0: bytes = (txna ApplicationArgs 12) + let tmp%100#0: bytes = (txna ApplicationArgs 13) + let tmp%101#0: bytes = (txna ApplicationArgs 14) + let tmp%102#0: bytes = (txna ApplicationArgs 15) + let tmp%103#0: bytes = ((extract 0 1) tmp%102#0) // on error: Index access is out of bounds + let tmp%104#0: bytes = (txna ApplicationArgs 15) + let tmp%105#0: bytes = ((extract 1 1) tmp%104#0) // on error: Index access is out of bounds + let tmp%106#0: bytes = (txna ApplicationArgs 15) + let tmp%107#0: bytes = ((extract 2 1) tmp%106#0) // on error: Index access is out of bounds + let tmp%108#0: bytes = (txna ApplicationArgs 15) + let tmp%109#0: bytes = ((extract 3 1) tmp%108#0) // on error: Index access is out of bounds + let tmp%110#0: bytes = (txna ApplicationArgs 15) + let tmp%111#0: bytes = ((extract 4 4) tmp%110#0) // on error: Index access is out of bounds + let tmp%112#0: bytes = (txna ApplicationArgs 15) + let tmp%113#0: bytes = ((extract 8 1) tmp%112#0) // on error: Index access is out of bounds + let tmp%114#0: bytes = test_cases.typed_abi_call.logger.Logger.return_args_after_14th(tmp%88#0, tmp%89#0, tmp%90#0, tmp%91#0, tmp%92#0, tmp%93#0, tmp%94#0, tmp%95#0, tmp%96#0, tmp%97#0, tmp%98#0, tmp%99#0, tmp%100#0, tmp%101#0, tmp%103#0, tmp%105#0, tmp%107#0, tmp%109#0, tmp%111#0, tmp%113#0) + let tmp%115#0: bytes = (concat 0x151f7c75 tmp%114#0) + (log tmp%115#0) return 1u - block@17: // bare_routing_L20 - let tmp%111#0: uint64 = (txn OnCompletion) - let not%tmp%111#0: bool = (! tmp%111#0) - (assert not%tmp%111#0) // reject transaction - let tmp%112#0: bool = (txn ApplicationID) - let tmp%113#0: bool = (! tmp%112#0) - (assert tmp%113#0) // is creating + block@18: // bare_routing_L20 + let tmp%116#0: uint64 = (txn OnCompletion) + let not%tmp%116#0: bool = (! tmp%116#0) + (assert not%tmp%116#0) // reject transaction + let tmp%117#0: bool = (txn ApplicationID) + let tmp%118#0: bool = (! tmp%117#0) + (assert tmp%118#0) // is creating return 1u subroutine test_cases.typed_abi_call.logger.Logger.echo(value: bytes) -> bytes: @@ -239,37 +250,41 @@ contract test_cases.typed_abi_call.logger.Logger: let concat_result%0#0: bytes = (concat len_16_bit%0#0 concatenated%0#0) return concat_result%0#0 - subroutine test_cases.typed_abi_call.logger.Logger.log_uint64(value: bytes) -> void: + subroutine test_cases.typed_abi_call.logger.Logger.no_args() -> uint64: block@0: // L25 + return 42u + + subroutine test_cases.typed_abi_call.logger.Logger.log_uint64(value: bytes) -> void: + block@0: // L29 (log value#0) return subroutine test_cases.typed_abi_call.logger.Logger.log_uint512(value: bytes) -> void: - block@0: // L29 + block@0: // L33 (log value#0) return subroutine test_cases.typed_abi_call.logger.Logger.log_string(value: bytes) -> void: - block@0: // L33 + block@0: // L37 let tmp%0#0: bytes = ((extract 2 0) value#0) (log tmp%0#0) return subroutine test_cases.typed_abi_call.logger.Logger.log_bool(value: bytes) -> void: - block@0: // L37 + block@0: // L41 let tmp%0#0: bool = (getbit value#0 0u) let tmp%1#0: bytes = (select 0x46616c7365 0x54727565 tmp%0#0) (log tmp%1#0) return subroutine test_cases.typed_abi_call.logger.Logger.log_bytes(value: bytes) -> void: - block@0: // L41 + block@0: // L45 let tmp%0#0: bytes = ((extract 2 0) value#0) (log tmp%0#0) return subroutine test_cases.typed_abi_call.logger.Logger.log_asset_account_app(asset: uint64, account: bytes, app: uint64) -> void: - block@0: // L45 + block@0: // L49 let (value%0#0: bytes, check%0#0: bool) = ((asset_params_get AssetName) asset#0) (assert check%0#0) // asset exists let tmp%1#0: bytes = (concat value%0#0 account#0) @@ -280,27 +295,27 @@ contract test_cases.typed_abi_call.logger.Logger: return subroutine test_cases.typed_abi_call.logger.Logger.echo_native_string(value: bytes) -> bytes: - block@0: // L49 + block@0: // L53 let tmp%0#0: bytes = (concat "echo: " value#0) return tmp%0#0 subroutine test_cases.typed_abi_call.logger.Logger.echo_native_bytes(value: bytes) -> bytes: - block@0: // L53 + block@0: // L57 let tmp%0#0: bytes = (concat 0x6563686f3a20 value#0) return tmp%0#0 subroutine test_cases.typed_abi_call.logger.Logger.echo_native_uint64(value: uint64) -> uint64: - block@0: // L57 + block@0: // L61 let tmp%0#0: uint64 = (+ value#0 1u) return tmp%0#0 subroutine test_cases.typed_abi_call.logger.Logger.echo_native_biguint(value: biguint) -> biguint: - block@0: // L61 + block@0: // L65 let tmp%0#0: biguint = (b+ value#0 1b) return tmp%0#0 subroutine test_cases.typed_abi_call.logger.Logger.echo_native_tuple(s: bytes, b: bytes, u: uint64, bu: biguint) -> : - block@0: // L65 + block@0: // L69 let tmp%0#0: bytes = (concat "echo: " s#0) let tmp%1#0: bytes = (concat 0x6563686f3a20 b#0) let tmp%2#0: uint64 = (+ u#0 1u) @@ -308,7 +323,7 @@ contract test_cases.typed_abi_call.logger.Logger: return tmp%0#0 tmp%1#0 tmp%2#0 tmp%3#0 subroutine test_cases.typed_abi_call.logger.Logger.return_args_after_14th(_a1: bytes, _a2: bytes, _a3: bytes, _a4: bytes, _a5: bytes, _a6: bytes, _a7: bytes, _a8: bytes, _a9: bytes, _a10: bytes, _a11: bytes, _a12: bytes, _a13: bytes, _a14: bytes, a15: bytes, a16: bytes, a17: bytes, a18: bytes, a19: bytes, a20: bytes) -> bytes: - block@0: // L71 + block@0: // L75 let encoded_tuple_buffer%2#0: bytes = (concat a15#0 a16#0) let encoded_tuple_buffer%3#0: bytes = (concat encoded_tuple_buffer%2#0 a17#0) let encoded_tuple_buffer%4#0: bytes = (concat encoded_tuple_buffer%3#0 a18#0) diff --git a/test_cases/typed_abi_call/out/Logger.ssa.opt_pass_3.ir b/test_cases/typed_abi_call/out/Logger.ssa.opt_pass_3.ir index 3b4cb70fa1..6b3db28b56 100644 --- a/test_cases/typed_abi_call/out/Logger.ssa.opt_pass_3.ir +++ b/test_cases/typed_abi_call/out/Logger.ssa.opt_pass_3.ir @@ -3,10 +3,10 @@ contract test_cases.typed_abi_call.logger.Logger: subroutine test_cases.typed_abi_call.logger.Logger.approval_program() -> bool: block@0: // L20 let tmp%0#0: bool = (txn NumAppArgs) - goto tmp%0#0 ? block@1 : block@17 + goto tmp%0#0 ? block@1 : block@18 block@1: // abi_routing_L20 let tmp%1#0: bytes = (txna ApplicationArgs 0) - switch tmp%1#0 {method "echo(string)string" => block@2, method "log(uint64)void" => block@3, method "log(uint512)void" => block@4, method "log(string)void" => block@5, method "log(bool)void" => block@6, method "log(byte[])void" => block@7, method "log(asset,account,application)void" => block@8, method "echo_native_string(string)string" => block@9, method "echo_native_bytes(byte[])byte[]" => block@10, method "echo_native_uint64(uint64)uint64" => block@11, method "echo_native_biguint(uint512)uint512" => block@12, method "echo_native_tuple(string,byte[],uint64,uint512)(string,byte[],uint64,uint512)" => block@13, method "return_args_after_14th(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint8,uint8,uint8,uint8,(uint8,uint8,uint8,uint8),uint8)byte[]" => block@14, * => fail // reject transaction} + switch tmp%1#0 {method "echo(string)string" => block@2, method "no_args()uint64" => block@3, method "log(uint64)void" => block@4, method "log(uint512)void" => block@5, method "log(string)void" => block@6, method "log(bool)void" => block@7, method "log(byte[])void" => block@8, method "log(asset,account,application)void" => block@9, method "echo_native_string(string)string" => block@10, method "echo_native_bytes(byte[])byte[]" => block@11, method "echo_native_uint64(uint64)uint64" => block@12, method "echo_native_biguint(uint512)uint512" => block@13, method "echo_native_tuple(string,byte[],uint64,uint512)(string,byte[],uint64,uint512)" => block@14, method "return_args_after_14th(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint8,uint8,uint8,uint8,(uint8,uint8,uint8,uint8),uint8)byte[]" => block@15, * => fail // reject transaction} block@2: // echo_route_L21 let tmp%2#0: uint64 = (txn OnCompletion) let tmp%3#0: bool = (! tmp%2#0) @@ -18,143 +18,154 @@ contract test_cases.typed_abi_call.logger.Logger: let tmp%7#0: bytes = (concat 0x151f7c75 tmp%6#0) (log tmp%7#0) return 1u - block@3: // log_route_L25 + block@3: // no_args_route_L25 let tmp%8#0: uint64 = (txn OnCompletion) let tmp%9#0: bool = (! tmp%8#0) (assert tmp%9#0) // OnCompletion is NoOp let tmp%10#0: bool = (txn ApplicationID) (assert tmp%10#0) // is not creating - let tmp%11#0: bytes = (txna ApplicationArgs 1) - test_cases.typed_abi_call.logger.Logger.log_uint64(tmp%11#0) + let tmp%11#0: uint64 = test_cases.typed_abi_call.logger.Logger.no_args() + let val_as_bytes%0#0: bytes = (itob tmp%11#0) + let tmp%12#0: bytes = (concat 0x151f7c75 val_as_bytes%0#0) + (log tmp%12#0) return 1u block@4: // log_route_L29 - let tmp%12#0: uint64 = (txn OnCompletion) - let tmp%13#0: bool = (! tmp%12#0) - (assert tmp%13#0) // OnCompletion is NoOp - let tmp%14#0: bool = (txn ApplicationID) - (assert tmp%14#0) // is not creating - let tmp%15#0: bytes = (txna ApplicationArgs 1) - test_cases.typed_abi_call.logger.Logger.log_uint512(tmp%15#0) + let tmp%13#0: uint64 = (txn OnCompletion) + let tmp%14#0: bool = (! tmp%13#0) + (assert tmp%14#0) // OnCompletion is NoOp + let tmp%15#0: bool = (txn ApplicationID) + (assert tmp%15#0) // is not creating + let tmp%16#0: bytes = (txna ApplicationArgs 1) + test_cases.typed_abi_call.logger.Logger.log_uint64(tmp%16#0) return 1u block@5: // log_route_L33 - let tmp%16#0: uint64 = (txn OnCompletion) - let tmp%17#0: bool = (! tmp%16#0) - (assert tmp%17#0) // OnCompletion is NoOp - let tmp%18#0: bool = (txn ApplicationID) - (assert tmp%18#0) // is not creating - let tmp%19#0: bytes = (txna ApplicationArgs 1) - test_cases.typed_abi_call.logger.Logger.log_string(tmp%19#0) + let tmp%17#0: uint64 = (txn OnCompletion) + let tmp%18#0: bool = (! tmp%17#0) + (assert tmp%18#0) // OnCompletion is NoOp + let tmp%19#0: bool = (txn ApplicationID) + (assert tmp%19#0) // is not creating + let tmp%20#0: bytes = (txna ApplicationArgs 1) + test_cases.typed_abi_call.logger.Logger.log_uint512(tmp%20#0) return 1u block@6: // log_route_L37 - let tmp%20#0: uint64 = (txn OnCompletion) - let tmp%21#0: bool = (! tmp%20#0) - (assert tmp%21#0) // OnCompletion is NoOp - let tmp%22#0: bool = (txn ApplicationID) - (assert tmp%22#0) // is not creating - let tmp%23#0: bytes = (txna ApplicationArgs 1) - test_cases.typed_abi_call.logger.Logger.log_bool(tmp%23#0) + let tmp%21#0: uint64 = (txn OnCompletion) + let tmp%22#0: bool = (! tmp%21#0) + (assert tmp%22#0) // OnCompletion is NoOp + let tmp%23#0: bool = (txn ApplicationID) + (assert tmp%23#0) // is not creating + let tmp%24#0: bytes = (txna ApplicationArgs 1) + test_cases.typed_abi_call.logger.Logger.log_string(tmp%24#0) return 1u block@7: // log_route_L41 - let tmp%24#0: uint64 = (txn OnCompletion) - let tmp%25#0: bool = (! tmp%24#0) - (assert tmp%25#0) // OnCompletion is NoOp - let tmp%26#0: bool = (txn ApplicationID) - (assert tmp%26#0) // is not creating - let tmp%27#0: bytes = (txna ApplicationArgs 1) - test_cases.typed_abi_call.logger.Logger.log_bytes(tmp%27#0) + let tmp%25#0: uint64 = (txn OnCompletion) + let tmp%26#0: bool = (! tmp%25#0) + (assert tmp%26#0) // OnCompletion is NoOp + let tmp%27#0: bool = (txn ApplicationID) + (assert tmp%27#0) // is not creating + let tmp%28#0: bytes = (txna ApplicationArgs 1) + test_cases.typed_abi_call.logger.Logger.log_bool(tmp%28#0) return 1u block@8: // log_route_L45 - let tmp%28#0: uint64 = (txn OnCompletion) - let tmp%29#0: bool = (! tmp%28#0) - (assert tmp%29#0) // OnCompletion is NoOp - let tmp%30#0: bool = (txn ApplicationID) - (assert tmp%30#0) // is not creating - let tmp%31#0: bytes = (txna ApplicationArgs 1) - let tmp%32#0: uint64 = (btoi tmp%31#0) - let tmp%33#0: uint64 = ((txnas Assets) tmp%32#0) - let tmp%34#0: bytes = (txna ApplicationArgs 2) - let tmp%35#0: uint64 = (btoi tmp%34#0) - let tmp%36#0: bytes = ((txnas Accounts) tmp%35#0) - let tmp%37#0: bytes = (txna ApplicationArgs 3) - let tmp%38#0: uint64 = (btoi tmp%37#0) - let tmp%39#0: uint64 = ((txnas Applications) tmp%38#0) - test_cases.typed_abi_call.logger.Logger.log_asset_account_app(tmp%33#0, tmp%36#0, tmp%39#0) + let tmp%29#0: uint64 = (txn OnCompletion) + let tmp%30#0: bool = (! tmp%29#0) + (assert tmp%30#0) // OnCompletion is NoOp + let tmp%31#0: bool = (txn ApplicationID) + (assert tmp%31#0) // is not creating + let tmp%32#0: bytes = (txna ApplicationArgs 1) + test_cases.typed_abi_call.logger.Logger.log_bytes(tmp%32#0) return 1u - block@9: // echo_native_string_route_L49 - let tmp%40#0: uint64 = (txn OnCompletion) - let tmp%41#0: bool = (! tmp%40#0) - (assert tmp%41#0) // OnCompletion is NoOp - let tmp%42#0: bool = (txn ApplicationID) - (assert tmp%42#0) // is not creating - let tmp%43#0: bytes = (txna ApplicationArgs 1) - let tmp%44#0: bytes = ((extract 2 0) tmp%43#0) - let tmp%45#0: bytes = test_cases.typed_abi_call.logger.Logger.echo_native_string(tmp%44#0) - let length%0#0: uint64 = (len tmp%45#0) + block@9: // log_route_L49 + let tmp%33#0: uint64 = (txn OnCompletion) + let tmp%34#0: bool = (! tmp%33#0) + (assert tmp%34#0) // OnCompletion is NoOp + let tmp%35#0: bool = (txn ApplicationID) + (assert tmp%35#0) // is not creating + let tmp%36#0: bytes = (txna ApplicationArgs 1) + let tmp%37#0: uint64 = (btoi tmp%36#0) + let tmp%38#0: uint64 = ((txnas Assets) tmp%37#0) + let tmp%39#0: bytes = (txna ApplicationArgs 2) + let tmp%40#0: uint64 = (btoi tmp%39#0) + let tmp%41#0: bytes = ((txnas Accounts) tmp%40#0) + let tmp%42#0: bytes = (txna ApplicationArgs 3) + let tmp%43#0: uint64 = (btoi tmp%42#0) + let tmp%44#0: uint64 = ((txnas Applications) tmp%43#0) + test_cases.typed_abi_call.logger.Logger.log_asset_account_app(tmp%38#0, tmp%41#0, tmp%44#0) + return 1u + block@10: // echo_native_string_route_L53 + let tmp%45#0: uint64 = (txn OnCompletion) + let tmp%46#0: bool = (! tmp%45#0) + (assert tmp%46#0) // OnCompletion is NoOp + let tmp%47#0: bool = (txn ApplicationID) + (assert tmp%47#0) // is not creating + let tmp%48#0: bytes = (txna ApplicationArgs 1) + let tmp%49#0: bytes = ((extract 2 0) tmp%48#0) + let tmp%50#0: bytes = test_cases.typed_abi_call.logger.Logger.echo_native_string(tmp%49#0) + let length%0#0: uint64 = (len tmp%50#0) 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 tmp%45#0) - let tmp%46#0: bytes = (concat 0x151f7c75 encoded_value%0#0) - (log tmp%46#0) + let encoded_value%0#0: bytes = (concat length_uint16%0#0 tmp%50#0) + let tmp%51#0: bytes = (concat 0x151f7c75 encoded_value%0#0) + (log tmp%51#0) return 1u - block@10: // echo_native_bytes_route_L53 - let tmp%47#0: uint64 = (txn OnCompletion) - let tmp%48#0: bool = (! tmp%47#0) - (assert tmp%48#0) // OnCompletion is NoOp - let tmp%49#0: bool = (txn ApplicationID) - (assert tmp%49#0) // is not creating - let tmp%50#0: bytes = (txna ApplicationArgs 1) - let tmp%51#0: bytes = ((extract 2 0) tmp%50#0) - let tmp%52#0: bytes = test_cases.typed_abi_call.logger.Logger.echo_native_bytes(tmp%51#0) - let length%1#0: uint64 = (len tmp%52#0) + block@11: // echo_native_bytes_route_L57 + let tmp%52#0: uint64 = (txn OnCompletion) + let tmp%53#0: bool = (! tmp%52#0) + (assert tmp%53#0) // OnCompletion is NoOp + let tmp%54#0: bool = (txn ApplicationID) + (assert tmp%54#0) // is not creating + let tmp%55#0: bytes = (txna ApplicationArgs 1) + let tmp%56#0: bytes = ((extract 2 0) tmp%55#0) + let tmp%57#0: bytes = test_cases.typed_abi_call.logger.Logger.echo_native_bytes(tmp%56#0) + let length%1#0: uint64 = (len tmp%57#0) let as_bytes%1#0: bytes = (itob length%1#0) let length_uint16%1#0: bytes = ((extract 6 2) as_bytes%1#0) - let encoded_value%1#0: bytes = (concat length_uint16%1#0 tmp%52#0) - let tmp%53#0: bytes = (concat 0x151f7c75 encoded_value%1#0) - (log tmp%53#0) + let encoded_value%1#0: bytes = (concat length_uint16%1#0 tmp%57#0) + let tmp%58#0: bytes = (concat 0x151f7c75 encoded_value%1#0) + (log tmp%58#0) return 1u - block@11: // echo_native_uint64_route_L57 - let tmp%54#0: uint64 = (txn OnCompletion) - let tmp%55#0: bool = (! tmp%54#0) - (assert tmp%55#0) // OnCompletion is NoOp - let tmp%56#0: bool = (txn ApplicationID) - (assert tmp%56#0) // is not creating - let tmp%57#0: bytes = (txna ApplicationArgs 1) - let tmp%58#0: uint64 = (btoi tmp%57#0) - let tmp%59#0: uint64 = test_cases.typed_abi_call.logger.Logger.echo_native_uint64(tmp%58#0) - let val_as_bytes%0#0: bytes = (itob tmp%59#0) - let tmp%60#0: bytes = (concat 0x151f7c75 val_as_bytes%0#0) - (log tmp%60#0) + block@12: // echo_native_uint64_route_L61 + let tmp%59#0: uint64 = (txn OnCompletion) + let tmp%60#0: bool = (! tmp%59#0) + (assert tmp%60#0) // OnCompletion is NoOp + let tmp%61#0: bool = (txn ApplicationID) + (assert tmp%61#0) // is not creating + let tmp%62#0: bytes = (txna ApplicationArgs 1) + let tmp%63#0: uint64 = (btoi tmp%62#0) + let tmp%64#0: uint64 = test_cases.typed_abi_call.logger.Logger.echo_native_uint64(tmp%63#0) + let val_as_bytes%1#0: bytes = (itob tmp%64#0) + let tmp%65#0: bytes = (concat 0x151f7c75 val_as_bytes%1#0) + (log tmp%65#0) return 1u - block@12: // echo_native_biguint_route_L61 - let tmp%61#0: uint64 = (txn OnCompletion) - let tmp%62#0: bool = (! tmp%61#0) - (assert tmp%62#0) // OnCompletion is NoOp - let tmp%63#0: bool = (txn ApplicationID) - (assert tmp%63#0) // is not creating - let tmp%64#0: bytes = (txna ApplicationArgs 1) - let tmp%65#0: biguint = test_cases.typed_abi_call.logger.Logger.echo_native_biguint(tmp%64#0) - let len_%0#0: uint64 = (len tmp%65#0) + block@13: // echo_native_biguint_route_L65 + let tmp%66#0: uint64 = (txn OnCompletion) + let tmp%67#0: bool = (! tmp%66#0) + (assert tmp%67#0) // OnCompletion is NoOp + let tmp%68#0: bool = (txn ApplicationID) + (assert tmp%68#0) // is not creating + let tmp%69#0: bytes = (txna ApplicationArgs 1) + let tmp%70#0: biguint = test_cases.typed_abi_call.logger.Logger.echo_native_biguint(tmp%69#0) + let len_%0#0: uint64 = (len tmp%70#0) let no_overflow%0#0: bool = (<= len_%0#0 64u) (assert no_overflow%0#0) // overflow let b_zeros%0#0: bytes = (bzero 64u) - let tmp%66#0: bytes = (b| tmp%65#0 b_zeros%0#0) - let tmp%67#0: bytes = (concat 0x151f7c75 tmp%66#0) - (log tmp%67#0) + let tmp%71#0: bytes = (b| tmp%70#0 b_zeros%0#0) + let tmp%72#0: bytes = (concat 0x151f7c75 tmp%71#0) + (log tmp%72#0) return 1u - block@13: // echo_native_tuple_route_L65 - let tmp%68#0: uint64 = (txn OnCompletion) - let tmp%69#0: bool = (! tmp%68#0) - (assert tmp%69#0) // OnCompletion is NoOp - let tmp%70#0: bool = (txn ApplicationID) - (assert tmp%70#0) // is not creating - let tmp%71#0: bytes = (txna ApplicationArgs 1) - let tmp%72#0: bytes = ((extract 2 0) tmp%71#0) - let tmp%73#0: bytes = (txna ApplicationArgs 2) - let tmp%74#0: bytes = ((extract 2 0) tmp%73#0) - let tmp%75#0: bytes = (txna ApplicationArgs 3) - let tmp%76#0: uint64 = (btoi tmp%75#0) - let tmp%77#0: bytes = (txna ApplicationArgs 4) - let (awst_tmp%0#0: bytes, awst_tmp%1#0: bytes, awst_tmp%2#0: uint64, awst_tmp%3#0: biguint) = test_cases.typed_abi_call.logger.Logger.echo_native_tuple(tmp%72#0, tmp%74#0, tmp%76#0, tmp%77#0) + block@14: // echo_native_tuple_route_L69 + let tmp%73#0: uint64 = (txn OnCompletion) + let tmp%74#0: bool = (! tmp%73#0) + (assert tmp%74#0) // OnCompletion is NoOp + let tmp%75#0: bool = (txn ApplicationID) + (assert tmp%75#0) // is not creating + let tmp%76#0: bytes = (txna ApplicationArgs 1) + let tmp%77#0: bytes = ((extract 2 0) tmp%76#0) + let tmp%78#0: bytes = (txna ApplicationArgs 2) + let tmp%79#0: bytes = ((extract 2 0) tmp%78#0) + let tmp%80#0: bytes = (txna ApplicationArgs 3) + let tmp%81#0: uint64 = (btoi tmp%80#0) + let tmp%82#0: bytes = (txna ApplicationArgs 4) + let (awst_tmp%0#0: bytes, awst_tmp%1#0: bytes, awst_tmp%2#0: uint64, awst_tmp%3#0: biguint) = test_cases.typed_abi_call.logger.Logger.echo_native_tuple(tmp%77#0, tmp%79#0, tmp%81#0, tmp%82#0) let length%2#0: uint64 = (len awst_tmp%0#0) let as_bytes%2#0: bytes = (itob length%2#0) let length_uint16%2#0: bytes = ((extract 6 2) as_bytes%2#0) @@ -163,67 +174,67 @@ contract test_cases.typed_abi_call.logger.Logger: let as_bytes%3#0: bytes = (itob length%3#0) let length_uint16%3#0: bytes = ((extract 6 2) as_bytes%3#0) let encoded_value%3#0: bytes = (concat length_uint16%3#0 awst_tmp%1#0) - let val_as_bytes%1#0: bytes = (itob awst_tmp%2#0) + let val_as_bytes%2#0: bytes = (itob awst_tmp%2#0) let len_%1#0: uint64 = (len awst_tmp%3#0) let no_overflow%1#0: bool = (<= len_%1#0 64u) (assert no_overflow%1#0) // overflow let b_zeros%1#0: bytes = (bzero 64u) - let tmp%78#0: bytes = (b| awst_tmp%3#0 b_zeros%1#0) + let tmp%83#0: bytes = (b| awst_tmp%3#0 b_zeros%1#0) let data_length%0#0: uint64 = (len encoded_value%2#0) let current_tail_offset%1#0: uint64 = (+ 76u data_length%0#0) let as_bytes%5#0: bytes = (itob current_tail_offset%1#0) let offset_as_uint16%1#0: bytes = ((extract 6 2) as_bytes%5#0) let encoded_tuple_buffer%2#0: bytes = (concat 0x004c offset_as_uint16%1#0) - let encoded_tuple_buffer%3#0: bytes = (concat encoded_tuple_buffer%2#0 val_as_bytes%1#0) - let encoded_tuple_buffer%4#0: bytes = (concat encoded_tuple_buffer%3#0 tmp%78#0) + let encoded_tuple_buffer%3#0: bytes = (concat encoded_tuple_buffer%2#0 val_as_bytes%2#0) + let encoded_tuple_buffer%4#0: bytes = (concat encoded_tuple_buffer%3#0 tmp%83#0) let encoded_tuple_buffer%5#0: bytes = (concat encoded_tuple_buffer%4#0 encoded_value%2#0) let encoded_tuple_buffer%6#0: bytes = (concat encoded_tuple_buffer%5#0 encoded_value%3#0) - let tmp%79#0: bytes = (concat 0x151f7c75 encoded_tuple_buffer%6#0) - (log tmp%79#0) + let tmp%84#0: bytes = (concat 0x151f7c75 encoded_tuple_buffer%6#0) + (log tmp%84#0) return 1u - block@14: // return_args_after_14th_route_L71 - let tmp%80#0: uint64 = (txn OnCompletion) - let tmp%81#0: bool = (! tmp%80#0) - (assert tmp%81#0) // OnCompletion is NoOp - let tmp%82#0: bool = (txn ApplicationID) - (assert tmp%82#0) // is not creating - let tmp%83#0: bytes = (txna ApplicationArgs 1) - let tmp%84#0: bytes = (txna ApplicationArgs 2) - let tmp%85#0: bytes = (txna ApplicationArgs 3) - let tmp%86#0: bytes = (txna ApplicationArgs 4) - let tmp%87#0: bytes = (txna ApplicationArgs 5) - let tmp%88#0: bytes = (txna ApplicationArgs 6) - let tmp%89#0: bytes = (txna ApplicationArgs 7) - let tmp%90#0: bytes = (txna ApplicationArgs 8) - let tmp%91#0: bytes = (txna ApplicationArgs 9) - let tmp%92#0: bytes = (txna ApplicationArgs 10) - let tmp%93#0: bytes = (txna ApplicationArgs 11) - let tmp%94#0: bytes = (txna ApplicationArgs 12) - let tmp%95#0: bytes = (txna ApplicationArgs 13) - let tmp%96#0: bytes = (txna ApplicationArgs 14) - let tmp%97#0: bytes = (txna ApplicationArgs 15) - let tmp%98#0: bytes = ((extract 0 1) tmp%97#0) // on error: Index access is out of bounds - let tmp%99#0: bytes = (txna ApplicationArgs 15) - let tmp%100#0: bytes = ((extract 1 1) tmp%99#0) // on error: Index access is out of bounds - let tmp%101#0: bytes = (txna ApplicationArgs 15) - let tmp%102#0: bytes = ((extract 2 1) tmp%101#0) // on error: Index access is out of bounds - let tmp%103#0: bytes = (txna ApplicationArgs 15) - let tmp%104#0: bytes = ((extract 3 1) tmp%103#0) // on error: Index access is out of bounds - let tmp%105#0: bytes = (txna ApplicationArgs 15) - let tmp%106#0: bytes = ((extract 4 4) tmp%105#0) // on error: Index access is out of bounds - let tmp%107#0: bytes = (txna ApplicationArgs 15) - let tmp%108#0: bytes = ((extract 8 1) tmp%107#0) // on error: Index access is out of bounds - let tmp%109#0: bytes = test_cases.typed_abi_call.logger.Logger.return_args_after_14th(tmp%83#0, tmp%84#0, tmp%85#0, tmp%86#0, tmp%87#0, tmp%88#0, tmp%89#0, tmp%90#0, tmp%91#0, tmp%92#0, tmp%93#0, tmp%94#0, tmp%95#0, tmp%96#0, tmp%98#0, tmp%100#0, tmp%102#0, tmp%104#0, tmp%106#0, tmp%108#0) - let tmp%110#0: bytes = (concat 0x151f7c75 tmp%109#0) - (log tmp%110#0) + block@15: // return_args_after_14th_route_L75 + let tmp%85#0: uint64 = (txn OnCompletion) + let tmp%86#0: bool = (! tmp%85#0) + (assert tmp%86#0) // OnCompletion is NoOp + let tmp%87#0: bool = (txn ApplicationID) + (assert tmp%87#0) // is not creating + let tmp%88#0: bytes = (txna ApplicationArgs 1) + let tmp%89#0: bytes = (txna ApplicationArgs 2) + let tmp%90#0: bytes = (txna ApplicationArgs 3) + let tmp%91#0: bytes = (txna ApplicationArgs 4) + let tmp%92#0: bytes = (txna ApplicationArgs 5) + let tmp%93#0: bytes = (txna ApplicationArgs 6) + let tmp%94#0: bytes = (txna ApplicationArgs 7) + let tmp%95#0: bytes = (txna ApplicationArgs 8) + let tmp%96#0: bytes = (txna ApplicationArgs 9) + let tmp%97#0: bytes = (txna ApplicationArgs 10) + let tmp%98#0: bytes = (txna ApplicationArgs 11) + let tmp%99#0: bytes = (txna ApplicationArgs 12) + let tmp%100#0: bytes = (txna ApplicationArgs 13) + let tmp%101#0: bytes = (txna ApplicationArgs 14) + let tmp%102#0: bytes = (txna ApplicationArgs 15) + let tmp%103#0: bytes = ((extract 0 1) tmp%102#0) // on error: Index access is out of bounds + let tmp%104#0: bytes = (txna ApplicationArgs 15) + let tmp%105#0: bytes = ((extract 1 1) tmp%104#0) // on error: Index access is out of bounds + let tmp%106#0: bytes = (txna ApplicationArgs 15) + let tmp%107#0: bytes = ((extract 2 1) tmp%106#0) // on error: Index access is out of bounds + let tmp%108#0: bytes = (txna ApplicationArgs 15) + let tmp%109#0: bytes = ((extract 3 1) tmp%108#0) // on error: Index access is out of bounds + let tmp%110#0: bytes = (txna ApplicationArgs 15) + let tmp%111#0: bytes = ((extract 4 4) tmp%110#0) // on error: Index access is out of bounds + let tmp%112#0: bytes = (txna ApplicationArgs 15) + let tmp%113#0: bytes = ((extract 8 1) tmp%112#0) // on error: Index access is out of bounds + let tmp%114#0: bytes = test_cases.typed_abi_call.logger.Logger.return_args_after_14th(tmp%88#0, tmp%89#0, tmp%90#0, tmp%91#0, tmp%92#0, tmp%93#0, tmp%94#0, tmp%95#0, tmp%96#0, tmp%97#0, tmp%98#0, tmp%99#0, tmp%100#0, tmp%101#0, tmp%103#0, tmp%105#0, tmp%107#0, tmp%109#0, tmp%111#0, tmp%113#0) + let tmp%115#0: bytes = (concat 0x151f7c75 tmp%114#0) + (log tmp%115#0) return 1u - block@17: // bare_routing_L20 - let tmp%111#0: uint64 = (txn OnCompletion) - let not%tmp%111#0: bool = (! tmp%111#0) - (assert not%tmp%111#0) // reject transaction - let tmp%112#0: bool = (txn ApplicationID) - let tmp%113#0: bool = (! tmp%112#0) - (assert tmp%113#0) // is creating + block@18: // bare_routing_L20 + let tmp%116#0: uint64 = (txn OnCompletion) + let not%tmp%116#0: bool = (! tmp%116#0) + (assert not%tmp%116#0) // reject transaction + let tmp%117#0: bool = (txn ApplicationID) + let tmp%118#0: bool = (! tmp%117#0) + (assert tmp%118#0) // is creating return 1u subroutine test_cases.typed_abi_call.logger.Logger.echo(value: bytes) -> bytes: @@ -238,37 +249,41 @@ contract test_cases.typed_abi_call.logger.Logger: let concat_result%0#0: bytes = (concat len_16_bit%0#0 concatenated%0#0) return concat_result%0#0 - subroutine test_cases.typed_abi_call.logger.Logger.log_uint64(value: bytes) -> void: + subroutine test_cases.typed_abi_call.logger.Logger.no_args() -> uint64: block@0: // L25 + return 42u + + subroutine test_cases.typed_abi_call.logger.Logger.log_uint64(value: bytes) -> void: + block@0: // L29 (log value#0) return subroutine test_cases.typed_abi_call.logger.Logger.log_uint512(value: bytes) -> void: - block@0: // L29 + block@0: // L33 (log value#0) return subroutine test_cases.typed_abi_call.logger.Logger.log_string(value: bytes) -> void: - block@0: // L33 + block@0: // L37 let tmp%0#0: bytes = ((extract 2 0) value#0) (log tmp%0#0) return subroutine test_cases.typed_abi_call.logger.Logger.log_bool(value: bytes) -> void: - block@0: // L37 + block@0: // L41 let tmp%0#0: bool = (getbit value#0 0u) let tmp%1#0: bytes = (select 0x46616c7365 0x54727565 tmp%0#0) (log tmp%1#0) return subroutine test_cases.typed_abi_call.logger.Logger.log_bytes(value: bytes) -> void: - block@0: // L41 + block@0: // L45 let tmp%0#0: bytes = ((extract 2 0) value#0) (log tmp%0#0) return subroutine test_cases.typed_abi_call.logger.Logger.log_asset_account_app(asset: uint64, account: bytes, app: uint64) -> void: - block@0: // L45 + block@0: // L49 let (value%0#0: bytes, check%0#0: bool) = ((asset_params_get AssetName) asset#0) (assert check%0#0) // asset exists let tmp%1#0: bytes = (concat value%0#0 account#0) @@ -279,27 +294,27 @@ contract test_cases.typed_abi_call.logger.Logger: return subroutine test_cases.typed_abi_call.logger.Logger.echo_native_string(value: bytes) -> bytes: - block@0: // L49 + block@0: // L53 let tmp%0#0: bytes = (concat "echo: " value#0) return tmp%0#0 subroutine test_cases.typed_abi_call.logger.Logger.echo_native_bytes(value: bytes) -> bytes: - block@0: // L53 + block@0: // L57 let tmp%0#0: bytes = (concat 0x6563686f3a20 value#0) return tmp%0#0 subroutine test_cases.typed_abi_call.logger.Logger.echo_native_uint64(value: uint64) -> uint64: - block@0: // L57 + block@0: // L61 let tmp%0#0: uint64 = (+ value#0 1u) return tmp%0#0 subroutine test_cases.typed_abi_call.logger.Logger.echo_native_biguint(value: biguint) -> biguint: - block@0: // L61 + block@0: // L65 let tmp%0#0: biguint = (b+ value#0 1b) return tmp%0#0 subroutine test_cases.typed_abi_call.logger.Logger.echo_native_tuple(s: bytes, b: bytes, u: uint64, bu: biguint) -> : - block@0: // L65 + block@0: // L69 let tmp%0#0: bytes = (concat "echo: " s#0) let tmp%1#0: bytes = (concat 0x6563686f3a20 b#0) let tmp%2#0: uint64 = (+ u#0 1u) @@ -307,7 +322,7 @@ contract test_cases.typed_abi_call.logger.Logger: return tmp%0#0 tmp%1#0 tmp%2#0 tmp%3#0 subroutine test_cases.typed_abi_call.logger.Logger.return_args_after_14th(_a1: bytes, _a2: bytes, _a3: bytes, _a4: bytes, _a5: bytes, _a6: bytes, _a7: bytes, _a8: bytes, _a9: bytes, _a10: bytes, _a11: bytes, _a12: bytes, _a13: bytes, _a14: bytes, a15: bytes, a16: bytes, a17: bytes, a18: bytes, a19: bytes, a20: bytes) -> bytes: - block@0: // L71 + block@0: // L75 let encoded_tuple_buffer%2#0: bytes = (concat a15#0 a16#0) let encoded_tuple_buffer%3#0: bytes = (concat encoded_tuple_buffer%2#0 a17#0) let encoded_tuple_buffer%4#0: bytes = (concat encoded_tuple_buffer%3#0 a18#0) diff --git a/test_cases/typed_abi_call/out/Logger.ssa.opt_pass_4.ir b/test_cases/typed_abi_call/out/Logger.ssa.opt_pass_4.ir index 647d1ea8a9..57a20f8238 100644 --- a/test_cases/typed_abi_call/out/Logger.ssa.opt_pass_4.ir +++ b/test_cases/typed_abi_call/out/Logger.ssa.opt_pass_4.ir @@ -3,10 +3,10 @@ contract test_cases.typed_abi_call.logger.Logger: subroutine test_cases.typed_abi_call.logger.Logger.approval_program() -> bool: block@0: // L20 let tmp%0#0: bool = (txn NumAppArgs) - goto tmp%0#0 ? block@1 : block@17 + goto tmp%0#0 ? block@1 : block@18 block@1: // abi_routing_L20 let tmp%1#0: bytes = (txna ApplicationArgs 0) - switch tmp%1#0 {method "echo(string)string" => block@2, method "log(uint64)void" => block@3, method "log(uint512)void" => block@4, method "log(string)void" => block@5, method "log(bool)void" => block@6, method "log(byte[])void" => block@7, method "log(asset,account,application)void" => block@8, method "echo_native_string(string)string" => block@9, method "echo_native_bytes(byte[])byte[]" => block@10, method "echo_native_uint64(uint64)uint64" => block@11, method "echo_native_biguint(uint512)uint512" => block@12, method "echo_native_tuple(string,byte[],uint64,uint512)(string,byte[],uint64,uint512)" => block@13, method "return_args_after_14th(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint8,uint8,uint8,uint8,(uint8,uint8,uint8,uint8),uint8)byte[]" => block@14, * => fail // reject transaction} + switch tmp%1#0 {method "echo(string)string" => block@2, method "no_args()uint64" => block@3, method "log(uint64)void" => block@4, method "log(uint512)void" => block@5, method "log(string)void" => block@6, method "log(bool)void" => block@7, method "log(byte[])void" => block@8, method "log(asset,account,application)void" => block@9, method "echo_native_string(string)string" => block@10, method "echo_native_bytes(byte[])byte[]" => block@11, method "echo_native_uint64(uint64)uint64" => block@12, method "echo_native_biguint(uint512)uint512" => block@13, method "echo_native_tuple(string,byte[],uint64,uint512)(string,byte[],uint64,uint512)" => block@14, method "return_args_after_14th(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint8,uint8,uint8,uint8,(uint8,uint8,uint8,uint8),uint8)byte[]" => block@15, * => fail // reject transaction} block@2: // echo_route_L21 let tmp%2#0: uint64 = (txn OnCompletion) let tmp%3#0: bool = (! tmp%2#0) @@ -18,143 +18,154 @@ contract test_cases.typed_abi_call.logger.Logger: let tmp%7#0: bytes = (concat 0x151f7c75 tmp%6#0) (log tmp%7#0) return 1u - block@3: // log_route_L25 + block@3: // no_args_route_L25 let tmp%8#0: uint64 = (txn OnCompletion) let tmp%9#0: bool = (! tmp%8#0) (assert tmp%9#0) // OnCompletion is NoOp let tmp%10#0: bool = (txn ApplicationID) (assert tmp%10#0) // is not creating - let tmp%11#0: bytes = (txna ApplicationArgs 1) - test_cases.typed_abi_call.logger.Logger.log_uint64(tmp%11#0) + let tmp%11#0: uint64 = test_cases.typed_abi_call.logger.Logger.no_args() + let val_as_bytes%0#0: bytes = (itob tmp%11#0) + let tmp%12#0: bytes = (concat 0x151f7c75 val_as_bytes%0#0) + (log tmp%12#0) return 1u block@4: // log_route_L29 - let tmp%12#0: uint64 = (txn OnCompletion) - let tmp%13#0: bool = (! tmp%12#0) - (assert tmp%13#0) // OnCompletion is NoOp - let tmp%14#0: bool = (txn ApplicationID) - (assert tmp%14#0) // is not creating - let tmp%15#0: bytes = (txna ApplicationArgs 1) - test_cases.typed_abi_call.logger.Logger.log_uint512(tmp%15#0) + let tmp%13#0: uint64 = (txn OnCompletion) + let tmp%14#0: bool = (! tmp%13#0) + (assert tmp%14#0) // OnCompletion is NoOp + let tmp%15#0: bool = (txn ApplicationID) + (assert tmp%15#0) // is not creating + let tmp%16#0: bytes = (txna ApplicationArgs 1) + test_cases.typed_abi_call.logger.Logger.log_uint64(tmp%16#0) return 1u block@5: // log_route_L33 - let tmp%16#0: uint64 = (txn OnCompletion) - let tmp%17#0: bool = (! tmp%16#0) - (assert tmp%17#0) // OnCompletion is NoOp - let tmp%18#0: bool = (txn ApplicationID) - (assert tmp%18#0) // is not creating - let tmp%19#0: bytes = (txna ApplicationArgs 1) - test_cases.typed_abi_call.logger.Logger.log_string(tmp%19#0) + let tmp%17#0: uint64 = (txn OnCompletion) + let tmp%18#0: bool = (! tmp%17#0) + (assert tmp%18#0) // OnCompletion is NoOp + let tmp%19#0: bool = (txn ApplicationID) + (assert tmp%19#0) // is not creating + let tmp%20#0: bytes = (txna ApplicationArgs 1) + test_cases.typed_abi_call.logger.Logger.log_uint512(tmp%20#0) return 1u block@6: // log_route_L37 - let tmp%20#0: uint64 = (txn OnCompletion) - let tmp%21#0: bool = (! tmp%20#0) - (assert tmp%21#0) // OnCompletion is NoOp - let tmp%22#0: bool = (txn ApplicationID) - (assert tmp%22#0) // is not creating - let tmp%23#0: bytes = (txna ApplicationArgs 1) - test_cases.typed_abi_call.logger.Logger.log_bool(tmp%23#0) + let tmp%21#0: uint64 = (txn OnCompletion) + let tmp%22#0: bool = (! tmp%21#0) + (assert tmp%22#0) // OnCompletion is NoOp + let tmp%23#0: bool = (txn ApplicationID) + (assert tmp%23#0) // is not creating + let tmp%24#0: bytes = (txna ApplicationArgs 1) + test_cases.typed_abi_call.logger.Logger.log_string(tmp%24#0) return 1u block@7: // log_route_L41 - let tmp%24#0: uint64 = (txn OnCompletion) - let tmp%25#0: bool = (! tmp%24#0) - (assert tmp%25#0) // OnCompletion is NoOp - let tmp%26#0: bool = (txn ApplicationID) - (assert tmp%26#0) // is not creating - let tmp%27#0: bytes = (txna ApplicationArgs 1) - test_cases.typed_abi_call.logger.Logger.log_bytes(tmp%27#0) + let tmp%25#0: uint64 = (txn OnCompletion) + let tmp%26#0: bool = (! tmp%25#0) + (assert tmp%26#0) // OnCompletion is NoOp + let tmp%27#0: bool = (txn ApplicationID) + (assert tmp%27#0) // is not creating + let tmp%28#0: bytes = (txna ApplicationArgs 1) + test_cases.typed_abi_call.logger.Logger.log_bool(tmp%28#0) return 1u block@8: // log_route_L45 - let tmp%28#0: uint64 = (txn OnCompletion) - let tmp%29#0: bool = (! tmp%28#0) - (assert tmp%29#0) // OnCompletion is NoOp - let tmp%30#0: bool = (txn ApplicationID) - (assert tmp%30#0) // is not creating - let tmp%31#0: bytes = (txna ApplicationArgs 1) - let tmp%32#0: uint64 = (btoi tmp%31#0) - let tmp%33#0: uint64 = ((txnas Assets) tmp%32#0) - let tmp%34#0: bytes = (txna ApplicationArgs 2) - let tmp%35#0: uint64 = (btoi tmp%34#0) - let tmp%36#0: bytes = ((txnas Accounts) tmp%35#0) - let tmp%37#0: bytes = (txna ApplicationArgs 3) - let tmp%38#0: uint64 = (btoi tmp%37#0) - let tmp%39#0: uint64 = ((txnas Applications) tmp%38#0) - test_cases.typed_abi_call.logger.Logger.log_asset_account_app(tmp%33#0, tmp%36#0, tmp%39#0) + let tmp%29#0: uint64 = (txn OnCompletion) + let tmp%30#0: bool = (! tmp%29#0) + (assert tmp%30#0) // OnCompletion is NoOp + let tmp%31#0: bool = (txn ApplicationID) + (assert tmp%31#0) // is not creating + let tmp%32#0: bytes = (txna ApplicationArgs 1) + test_cases.typed_abi_call.logger.Logger.log_bytes(tmp%32#0) return 1u - block@9: // echo_native_string_route_L49 - let tmp%40#0: uint64 = (txn OnCompletion) - let tmp%41#0: bool = (! tmp%40#0) - (assert tmp%41#0) // OnCompletion is NoOp - let tmp%42#0: bool = (txn ApplicationID) - (assert tmp%42#0) // is not creating - let tmp%43#0: bytes = (txna ApplicationArgs 1) - let tmp%44#0: bytes = ((extract 2 0) tmp%43#0) - let tmp%45#0: bytes = test_cases.typed_abi_call.logger.Logger.echo_native_string(tmp%44#0) - let length%0#0: uint64 = (len tmp%45#0) + block@9: // log_route_L49 + let tmp%33#0: uint64 = (txn OnCompletion) + let tmp%34#0: bool = (! tmp%33#0) + (assert tmp%34#0) // OnCompletion is NoOp + let tmp%35#0: bool = (txn ApplicationID) + (assert tmp%35#0) // is not creating + let tmp%36#0: bytes = (txna ApplicationArgs 1) + let tmp%37#0: uint64 = (btoi tmp%36#0) + let tmp%38#0: uint64 = ((txnas Assets) tmp%37#0) + let tmp%39#0: bytes = (txna ApplicationArgs 2) + let tmp%40#0: uint64 = (btoi tmp%39#0) + let tmp%41#0: bytes = ((txnas Accounts) tmp%40#0) + let tmp%42#0: bytes = (txna ApplicationArgs 3) + let tmp%43#0: uint64 = (btoi tmp%42#0) + let tmp%44#0: uint64 = ((txnas Applications) tmp%43#0) + test_cases.typed_abi_call.logger.Logger.log_asset_account_app(tmp%38#0, tmp%41#0, tmp%44#0) + return 1u + block@10: // echo_native_string_route_L53 + let tmp%45#0: uint64 = (txn OnCompletion) + let tmp%46#0: bool = (! tmp%45#0) + (assert tmp%46#0) // OnCompletion is NoOp + let tmp%47#0: bool = (txn ApplicationID) + (assert tmp%47#0) // is not creating + let tmp%48#0: bytes = (txna ApplicationArgs 1) + let tmp%49#0: bytes = ((extract 2 0) tmp%48#0) + let tmp%50#0: bytes = test_cases.typed_abi_call.logger.Logger.echo_native_string(tmp%49#0) + let length%0#0: uint64 = (len tmp%50#0) 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 tmp%45#0) - let tmp%46#0: bytes = (concat 0x151f7c75 encoded_value%0#0) - (log tmp%46#0) + let encoded_value%0#0: bytes = (concat length_uint16%0#0 tmp%50#0) + let tmp%51#0: bytes = (concat 0x151f7c75 encoded_value%0#0) + (log tmp%51#0) return 1u - block@10: // echo_native_bytes_route_L53 - let tmp%47#0: uint64 = (txn OnCompletion) - let tmp%48#0: bool = (! tmp%47#0) - (assert tmp%48#0) // OnCompletion is NoOp - let tmp%49#0: bool = (txn ApplicationID) - (assert tmp%49#0) // is not creating - let tmp%50#0: bytes = (txna ApplicationArgs 1) - let tmp%51#0: bytes = ((extract 2 0) tmp%50#0) - let tmp%52#0: bytes = test_cases.typed_abi_call.logger.Logger.echo_native_bytes(tmp%51#0) - let length%1#0: uint64 = (len tmp%52#0) + block@11: // echo_native_bytes_route_L57 + let tmp%52#0: uint64 = (txn OnCompletion) + let tmp%53#0: bool = (! tmp%52#0) + (assert tmp%53#0) // OnCompletion is NoOp + let tmp%54#0: bool = (txn ApplicationID) + (assert tmp%54#0) // is not creating + let tmp%55#0: bytes = (txna ApplicationArgs 1) + let tmp%56#0: bytes = ((extract 2 0) tmp%55#0) + let tmp%57#0: bytes = test_cases.typed_abi_call.logger.Logger.echo_native_bytes(tmp%56#0) + let length%1#0: uint64 = (len tmp%57#0) let as_bytes%1#0: bytes = (itob length%1#0) let length_uint16%1#0: bytes = ((extract 6 2) as_bytes%1#0) - let encoded_value%1#0: bytes = (concat length_uint16%1#0 tmp%52#0) - let tmp%53#0: bytes = (concat 0x151f7c75 encoded_value%1#0) - (log tmp%53#0) + let encoded_value%1#0: bytes = (concat length_uint16%1#0 tmp%57#0) + let tmp%58#0: bytes = (concat 0x151f7c75 encoded_value%1#0) + (log tmp%58#0) return 1u - block@11: // echo_native_uint64_route_L57 - let tmp%54#0: uint64 = (txn OnCompletion) - let tmp%55#0: bool = (! tmp%54#0) - (assert tmp%55#0) // OnCompletion is NoOp - let tmp%56#0: bool = (txn ApplicationID) - (assert tmp%56#0) // is not creating - let tmp%57#0: bytes = (txna ApplicationArgs 1) - let tmp%58#0: uint64 = (btoi tmp%57#0) - let tmp%59#0: uint64 = test_cases.typed_abi_call.logger.Logger.echo_native_uint64(tmp%58#0) - let val_as_bytes%0#0: bytes = (itob tmp%59#0) - let tmp%60#0: bytes = (concat 0x151f7c75 val_as_bytes%0#0) - (log tmp%60#0) + block@12: // echo_native_uint64_route_L61 + let tmp%59#0: uint64 = (txn OnCompletion) + let tmp%60#0: bool = (! tmp%59#0) + (assert tmp%60#0) // OnCompletion is NoOp + let tmp%61#0: bool = (txn ApplicationID) + (assert tmp%61#0) // is not creating + let tmp%62#0: bytes = (txna ApplicationArgs 1) + let tmp%63#0: uint64 = (btoi tmp%62#0) + let tmp%64#0: uint64 = test_cases.typed_abi_call.logger.Logger.echo_native_uint64(tmp%63#0) + let val_as_bytes%1#0: bytes = (itob tmp%64#0) + let tmp%65#0: bytes = (concat 0x151f7c75 val_as_bytes%1#0) + (log tmp%65#0) return 1u - block@12: // echo_native_biguint_route_L61 - let tmp%61#0: uint64 = (txn OnCompletion) - let tmp%62#0: bool = (! tmp%61#0) - (assert tmp%62#0) // OnCompletion is NoOp - let tmp%63#0: bool = (txn ApplicationID) - (assert tmp%63#0) // is not creating - let tmp%64#0: bytes = (txna ApplicationArgs 1) - let tmp%65#0: biguint = test_cases.typed_abi_call.logger.Logger.echo_native_biguint(tmp%64#0) - let len_%0#0: uint64 = (len tmp%65#0) + block@13: // echo_native_biguint_route_L65 + let tmp%66#0: uint64 = (txn OnCompletion) + let tmp%67#0: bool = (! tmp%66#0) + (assert tmp%67#0) // OnCompletion is NoOp + let tmp%68#0: bool = (txn ApplicationID) + (assert tmp%68#0) // is not creating + let tmp%69#0: bytes = (txna ApplicationArgs 1) + let tmp%70#0: biguint = test_cases.typed_abi_call.logger.Logger.echo_native_biguint(tmp%69#0) + let len_%0#0: uint64 = (len tmp%70#0) let no_overflow%0#0: bool = (<= len_%0#0 64u) (assert no_overflow%0#0) // overflow let b_zeros%0#0: bytes = (bzero 64u) - let tmp%66#0: bytes = (b| tmp%65#0 b_zeros%0#0) - let tmp%67#0: bytes = (concat 0x151f7c75 tmp%66#0) - (log tmp%67#0) + let tmp%71#0: bytes = (b| tmp%70#0 b_zeros%0#0) + let tmp%72#0: bytes = (concat 0x151f7c75 tmp%71#0) + (log tmp%72#0) return 1u - block@13: // echo_native_tuple_route_L65 - let tmp%68#0: uint64 = (txn OnCompletion) - let tmp%69#0: bool = (! tmp%68#0) - (assert tmp%69#0) // OnCompletion is NoOp - let tmp%70#0: bool = (txn ApplicationID) - (assert tmp%70#0) // is not creating - let tmp%71#0: bytes = (txna ApplicationArgs 1) - let tmp%72#0: bytes = ((extract 2 0) tmp%71#0) - let tmp%73#0: bytes = (txna ApplicationArgs 2) - let tmp%74#0: bytes = ((extract 2 0) tmp%73#0) - let tmp%75#0: bytes = (txna ApplicationArgs 3) - let tmp%76#0: uint64 = (btoi tmp%75#0) - let tmp%77#0: bytes = (txna ApplicationArgs 4) - let (awst_tmp%0#0: bytes, awst_tmp%1#0: bytes, awst_tmp%2#0: uint64, awst_tmp%3#0: biguint) = test_cases.typed_abi_call.logger.Logger.echo_native_tuple(tmp%72#0, tmp%74#0, tmp%76#0, tmp%77#0) + block@14: // echo_native_tuple_route_L69 + let tmp%73#0: uint64 = (txn OnCompletion) + let tmp%74#0: bool = (! tmp%73#0) + (assert tmp%74#0) // OnCompletion is NoOp + let tmp%75#0: bool = (txn ApplicationID) + (assert tmp%75#0) // is not creating + let tmp%76#0: bytes = (txna ApplicationArgs 1) + let tmp%77#0: bytes = ((extract 2 0) tmp%76#0) + let tmp%78#0: bytes = (txna ApplicationArgs 2) + let tmp%79#0: bytes = ((extract 2 0) tmp%78#0) + let tmp%80#0: bytes = (txna ApplicationArgs 3) + let tmp%81#0: uint64 = (btoi tmp%80#0) + let tmp%82#0: bytes = (txna ApplicationArgs 4) + let (awst_tmp%0#0: bytes, awst_tmp%1#0: bytes, awst_tmp%2#0: uint64, awst_tmp%3#0: biguint) = test_cases.typed_abi_call.logger.Logger.echo_native_tuple(tmp%77#0, tmp%79#0, tmp%81#0, tmp%82#0) let length%2#0: uint64 = (len awst_tmp%0#0) let as_bytes%2#0: bytes = (itob length%2#0) let length_uint16%2#0: bytes = ((extract 6 2) as_bytes%2#0) @@ -163,67 +174,67 @@ contract test_cases.typed_abi_call.logger.Logger: let as_bytes%3#0: bytes = (itob length%3#0) let length_uint16%3#0: bytes = ((extract 6 2) as_bytes%3#0) let encoded_value%3#0: bytes = (concat length_uint16%3#0 awst_tmp%1#0) - let val_as_bytes%1#0: bytes = (itob awst_tmp%2#0) + let val_as_bytes%2#0: bytes = (itob awst_tmp%2#0) let len_%1#0: uint64 = (len awst_tmp%3#0) let no_overflow%1#0: bool = (<= len_%1#0 64u) (assert no_overflow%1#0) // overflow let b_zeros%1#0: bytes = (bzero 64u) - let tmp%78#0: bytes = (b| awst_tmp%3#0 b_zeros%1#0) + let tmp%83#0: bytes = (b| awst_tmp%3#0 b_zeros%1#0) let data_length%0#0: uint64 = (len encoded_value%2#0) let current_tail_offset%1#0: uint64 = (+ 76u data_length%0#0) let as_bytes%5#0: bytes = (itob current_tail_offset%1#0) let offset_as_uint16%1#0: bytes = ((extract 6 2) as_bytes%5#0) let encoded_tuple_buffer%2#0: bytes = (concat 0x004c offset_as_uint16%1#0) - let encoded_tuple_buffer%3#0: bytes = (concat encoded_tuple_buffer%2#0 val_as_bytes%1#0) - let encoded_tuple_buffer%4#0: bytes = (concat encoded_tuple_buffer%3#0 tmp%78#0) + let encoded_tuple_buffer%3#0: bytes = (concat encoded_tuple_buffer%2#0 val_as_bytes%2#0) + let encoded_tuple_buffer%4#0: bytes = (concat encoded_tuple_buffer%3#0 tmp%83#0) let encoded_tuple_buffer%5#0: bytes = (concat encoded_tuple_buffer%4#0 encoded_value%2#0) let encoded_tuple_buffer%6#0: bytes = (concat encoded_tuple_buffer%5#0 encoded_value%3#0) - let tmp%79#0: bytes = (concat 0x151f7c75 encoded_tuple_buffer%6#0) - (log tmp%79#0) + let tmp%84#0: bytes = (concat 0x151f7c75 encoded_tuple_buffer%6#0) + (log tmp%84#0) return 1u - block@14: // return_args_after_14th_route_L71 - let tmp%80#0: uint64 = (txn OnCompletion) - let tmp%81#0: bool = (! tmp%80#0) - (assert tmp%81#0) // OnCompletion is NoOp - let tmp%82#0: bool = (txn ApplicationID) - (assert tmp%82#0) // is not creating - let tmp%83#0: bytes = (txna ApplicationArgs 1) - let tmp%84#0: bytes = (txna ApplicationArgs 2) - let tmp%85#0: bytes = (txna ApplicationArgs 3) - let tmp%86#0: bytes = (txna ApplicationArgs 4) - let tmp%87#0: bytes = (txna ApplicationArgs 5) - let tmp%88#0: bytes = (txna ApplicationArgs 6) - let tmp%89#0: bytes = (txna ApplicationArgs 7) - let tmp%90#0: bytes = (txna ApplicationArgs 8) - let tmp%91#0: bytes = (txna ApplicationArgs 9) - let tmp%92#0: bytes = (txna ApplicationArgs 10) - let tmp%93#0: bytes = (txna ApplicationArgs 11) - let tmp%94#0: bytes = (txna ApplicationArgs 12) - let tmp%95#0: bytes = (txna ApplicationArgs 13) - let tmp%96#0: bytes = (txna ApplicationArgs 14) - let tmp%97#0: bytes = (txna ApplicationArgs 15) - let tmp%98#0: bytes = ((extract 0 1) tmp%97#0) // on error: Index access is out of bounds - let tmp%99#0: bytes = (txna ApplicationArgs 15) - let tmp%100#0: bytes = ((extract 1 1) tmp%99#0) // on error: Index access is out of bounds - let tmp%101#0: bytes = (txna ApplicationArgs 15) - let tmp%102#0: bytes = ((extract 2 1) tmp%101#0) // on error: Index access is out of bounds - let tmp%103#0: bytes = (txna ApplicationArgs 15) - let tmp%104#0: bytes = ((extract 3 1) tmp%103#0) // on error: Index access is out of bounds - let tmp%105#0: bytes = (txna ApplicationArgs 15) - let tmp%106#0: bytes = ((extract 4 4) tmp%105#0) // on error: Index access is out of bounds - let tmp%107#0: bytes = (txna ApplicationArgs 15) - let tmp%108#0: bytes = ((extract 8 1) tmp%107#0) // on error: Index access is out of bounds - let tmp%109#0: bytes = test_cases.typed_abi_call.logger.Logger.return_args_after_14th(tmp%83#0, tmp%84#0, tmp%85#0, tmp%86#0, tmp%87#0, tmp%88#0, tmp%89#0, tmp%90#0, tmp%91#0, tmp%92#0, tmp%93#0, tmp%94#0, tmp%95#0, tmp%96#0, tmp%98#0, tmp%100#0, tmp%102#0, tmp%104#0, tmp%106#0, tmp%108#0) - let tmp%110#0: bytes = (concat 0x151f7c75 tmp%109#0) - (log tmp%110#0) + block@15: // return_args_after_14th_route_L75 + let tmp%85#0: uint64 = (txn OnCompletion) + let tmp%86#0: bool = (! tmp%85#0) + (assert tmp%86#0) // OnCompletion is NoOp + let tmp%87#0: bool = (txn ApplicationID) + (assert tmp%87#0) // is not creating + let tmp%88#0: bytes = (txna ApplicationArgs 1) + let tmp%89#0: bytes = (txna ApplicationArgs 2) + let tmp%90#0: bytes = (txna ApplicationArgs 3) + let tmp%91#0: bytes = (txna ApplicationArgs 4) + let tmp%92#0: bytes = (txna ApplicationArgs 5) + let tmp%93#0: bytes = (txna ApplicationArgs 6) + let tmp%94#0: bytes = (txna ApplicationArgs 7) + let tmp%95#0: bytes = (txna ApplicationArgs 8) + let tmp%96#0: bytes = (txna ApplicationArgs 9) + let tmp%97#0: bytes = (txna ApplicationArgs 10) + let tmp%98#0: bytes = (txna ApplicationArgs 11) + let tmp%99#0: bytes = (txna ApplicationArgs 12) + let tmp%100#0: bytes = (txna ApplicationArgs 13) + let tmp%101#0: bytes = (txna ApplicationArgs 14) + let tmp%102#0: bytes = (txna ApplicationArgs 15) + let tmp%103#0: bytes = ((extract 0 1) tmp%102#0) // on error: Index access is out of bounds + let tmp%104#0: bytes = (txna ApplicationArgs 15) + let tmp%105#0: bytes = ((extract 1 1) tmp%104#0) // on error: Index access is out of bounds + let tmp%106#0: bytes = (txna ApplicationArgs 15) + let tmp%107#0: bytes = ((extract 2 1) tmp%106#0) // on error: Index access is out of bounds + let tmp%108#0: bytes = (txna ApplicationArgs 15) + let tmp%109#0: bytes = ((extract 3 1) tmp%108#0) // on error: Index access is out of bounds + let tmp%110#0: bytes = (txna ApplicationArgs 15) + let tmp%111#0: bytes = ((extract 4 4) tmp%110#0) // on error: Index access is out of bounds + let tmp%112#0: bytes = (txna ApplicationArgs 15) + let tmp%113#0: bytes = ((extract 8 1) tmp%112#0) // on error: Index access is out of bounds + let tmp%114#0: bytes = test_cases.typed_abi_call.logger.Logger.return_args_after_14th(tmp%88#0, tmp%89#0, tmp%90#0, tmp%91#0, tmp%92#0, tmp%93#0, tmp%94#0, tmp%95#0, tmp%96#0, tmp%97#0, tmp%98#0, tmp%99#0, tmp%100#0, tmp%101#0, tmp%103#0, tmp%105#0, tmp%107#0, tmp%109#0, tmp%111#0, tmp%113#0) + let tmp%115#0: bytes = (concat 0x151f7c75 tmp%114#0) + (log tmp%115#0) return 1u - block@17: // bare_routing_L20 - let tmp%111#0: uint64 = (txn OnCompletion) - let not%tmp%111#0: bool = (! tmp%111#0) - (assert not%tmp%111#0) // reject transaction - let tmp%112#0: bool = (txn ApplicationID) - let tmp%113#0: bool = (! tmp%112#0) - (assert tmp%113#0) // is creating + block@18: // bare_routing_L20 + let tmp%116#0: uint64 = (txn OnCompletion) + let not%tmp%116#0: bool = (! tmp%116#0) + (assert not%tmp%116#0) // reject transaction + let tmp%117#0: bool = (txn ApplicationID) + let tmp%118#0: bool = (! tmp%117#0) + (assert tmp%118#0) // is creating return 1u subroutine test_cases.typed_abi_call.logger.Logger.echo(value: bytes) -> bytes: @@ -237,37 +248,41 @@ contract test_cases.typed_abi_call.logger.Logger: let concat_result%0#0: bytes = (concat len_16_bit%0#0 concatenated%0#0) return concat_result%0#0 - subroutine test_cases.typed_abi_call.logger.Logger.log_uint64(value: bytes) -> void: + subroutine test_cases.typed_abi_call.logger.Logger.no_args() -> uint64: block@0: // L25 + return 42u + + subroutine test_cases.typed_abi_call.logger.Logger.log_uint64(value: bytes) -> void: + block@0: // L29 (log value#0) return subroutine test_cases.typed_abi_call.logger.Logger.log_uint512(value: bytes) -> void: - block@0: // L29 + block@0: // L33 (log value#0) return subroutine test_cases.typed_abi_call.logger.Logger.log_string(value: bytes) -> void: - block@0: // L33 + block@0: // L37 let tmp%0#0: bytes = ((extract 2 0) value#0) (log tmp%0#0) return subroutine test_cases.typed_abi_call.logger.Logger.log_bool(value: bytes) -> void: - block@0: // L37 + block@0: // L41 let tmp%0#0: bool = (getbit value#0 0u) let tmp%1#0: bytes = (select 0x46616c7365 0x54727565 tmp%0#0) (log tmp%1#0) return subroutine test_cases.typed_abi_call.logger.Logger.log_bytes(value: bytes) -> void: - block@0: // L41 + block@0: // L45 let tmp%0#0: bytes = ((extract 2 0) value#0) (log tmp%0#0) return subroutine test_cases.typed_abi_call.logger.Logger.log_asset_account_app(asset: uint64, account: bytes, app: uint64) -> void: - block@0: // L45 + block@0: // L49 let (value%0#0: bytes, check%0#0: bool) = ((asset_params_get AssetName) asset#0) (assert check%0#0) // asset exists let tmp%1#0: bytes = (concat value%0#0 account#0) @@ -278,27 +293,27 @@ contract test_cases.typed_abi_call.logger.Logger: return subroutine test_cases.typed_abi_call.logger.Logger.echo_native_string(value: bytes) -> bytes: - block@0: // L49 + block@0: // L53 let tmp%0#0: bytes = (concat "echo: " value#0) return tmp%0#0 subroutine test_cases.typed_abi_call.logger.Logger.echo_native_bytes(value: bytes) -> bytes: - block@0: // L53 + block@0: // L57 let tmp%0#0: bytes = (concat 0x6563686f3a20 value#0) return tmp%0#0 subroutine test_cases.typed_abi_call.logger.Logger.echo_native_uint64(value: uint64) -> uint64: - block@0: // L57 + block@0: // L61 let tmp%0#0: uint64 = (+ value#0 1u) return tmp%0#0 subroutine test_cases.typed_abi_call.logger.Logger.echo_native_biguint(value: biguint) -> biguint: - block@0: // L61 + block@0: // L65 let tmp%0#0: biguint = (b+ value#0 1b) return tmp%0#0 subroutine test_cases.typed_abi_call.logger.Logger.echo_native_tuple(s: bytes, b: bytes, u: uint64, bu: biguint) -> : - block@0: // L65 + block@0: // L69 let tmp%0#0: bytes = (concat "echo: " s#0) let tmp%1#0: bytes = (concat 0x6563686f3a20 b#0) let tmp%2#0: uint64 = (+ u#0 1u) @@ -306,7 +321,7 @@ contract test_cases.typed_abi_call.logger.Logger: return tmp%0#0 tmp%1#0 tmp%2#0 tmp%3#0 subroutine test_cases.typed_abi_call.logger.Logger.return_args_after_14th(_a1: bytes, _a2: bytes, _a3: bytes, _a4: bytes, _a5: bytes, _a6: bytes, _a7: bytes, _a8: bytes, _a9: bytes, _a10: bytes, _a11: bytes, _a12: bytes, _a13: bytes, _a14: bytes, a15: bytes, a16: bytes, a17: bytes, a18: bytes, a19: bytes, a20: bytes) -> bytes: - block@0: // L71 + block@0: // L75 let encoded_tuple_buffer%2#0: bytes = (concat a15#0 a16#0) let encoded_tuple_buffer%3#0: bytes = (concat encoded_tuple_buffer%2#0 a17#0) let encoded_tuple_buffer%4#0: bytes = (concat encoded_tuple_buffer%3#0 a18#0) diff --git a/test_cases/typed_abi_call/out/Logger.ssa.opt_pass_5.ir b/test_cases/typed_abi_call/out/Logger.ssa.opt_pass_5.ir index 4f3e6befb4..a30c0643a4 100644 --- a/test_cases/typed_abi_call/out/Logger.ssa.opt_pass_5.ir +++ b/test_cases/typed_abi_call/out/Logger.ssa.opt_pass_5.ir @@ -3,10 +3,10 @@ contract test_cases.typed_abi_call.logger.Logger: subroutine test_cases.typed_abi_call.logger.Logger.approval_program() -> bool: block@0: // L20 let tmp%0#0: bool = (txn NumAppArgs) - goto tmp%0#0 ? block@1 : block@17 + goto tmp%0#0 ? block@1 : block@18 block@1: // abi_routing_L20 let tmp%1#0: bytes = (txna ApplicationArgs 0) - switch tmp%1#0 {method "echo(string)string" => block@2, method "log(uint64)void" => block@3, method "log(uint512)void" => block@4, method "log(string)void" => block@5, method "log(bool)void" => block@6, method "log(byte[])void" => block@7, method "log(asset,account,application)void" => block@8, method "echo_native_string(string)string" => block@9, method "echo_native_bytes(byte[])byte[]" => block@10, method "echo_native_uint64(uint64)uint64" => block@11, method "echo_native_biguint(uint512)uint512" => block@12, method "echo_native_tuple(string,byte[],uint64,uint512)(string,byte[],uint64,uint512)" => block@13, method "return_args_after_14th(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint8,uint8,uint8,uint8,(uint8,uint8,uint8,uint8),uint8)byte[]" => block@14, * => fail // reject transaction} + switch tmp%1#0 {method "echo(string)string" => block@2, method "no_args()uint64" => block@3, method "log(uint64)void" => block@4, method "log(uint512)void" => block@5, method "log(string)void" => block@6, method "log(bool)void" => block@7, method "log(byte[])void" => block@8, method "log(asset,account,application)void" => block@9, method "echo_native_string(string)string" => block@10, method "echo_native_bytes(byte[])byte[]" => block@11, method "echo_native_uint64(uint64)uint64" => block@12, method "echo_native_biguint(uint512)uint512" => block@13, method "echo_native_tuple(string,byte[],uint64,uint512)(string,byte[],uint64,uint512)" => block@14, method "return_args_after_14th(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint8,uint8,uint8,uint8,(uint8,uint8,uint8,uint8),uint8)byte[]" => block@15, * => fail // reject transaction} block@2: // echo_route_L21 let tmp%2#0: uint64 = (txn OnCompletion) let tmp%3#0: bool = (! tmp%2#0) @@ -18,143 +18,154 @@ contract test_cases.typed_abi_call.logger.Logger: let tmp%7#0: bytes = (concat 0x151f7c75 tmp%6#0) (log tmp%7#0) return 1u - block@3: // log_route_L25 + block@3: // no_args_route_L25 let tmp%8#0: uint64 = (txn OnCompletion) let tmp%9#0: bool = (! tmp%8#0) (assert tmp%9#0) // OnCompletion is NoOp let tmp%10#0: bool = (txn ApplicationID) (assert tmp%10#0) // is not creating - let tmp%11#0: bytes = (txna ApplicationArgs 1) - test_cases.typed_abi_call.logger.Logger.log_uint64(tmp%11#0) + let tmp%11#0: uint64 = test_cases.typed_abi_call.logger.Logger.no_args() + let val_as_bytes%0#0: bytes = (itob tmp%11#0) + let tmp%12#0: bytes = (concat 0x151f7c75 val_as_bytes%0#0) + (log tmp%12#0) return 1u block@4: // log_route_L29 - let tmp%12#0: uint64 = (txn OnCompletion) - let tmp%13#0: bool = (! tmp%12#0) - (assert tmp%13#0) // OnCompletion is NoOp - let tmp%14#0: bool = (txn ApplicationID) - (assert tmp%14#0) // is not creating - let tmp%15#0: bytes = (txna ApplicationArgs 1) - test_cases.typed_abi_call.logger.Logger.log_uint512(tmp%15#0) + let tmp%13#0: uint64 = (txn OnCompletion) + let tmp%14#0: bool = (! tmp%13#0) + (assert tmp%14#0) // OnCompletion is NoOp + let tmp%15#0: bool = (txn ApplicationID) + (assert tmp%15#0) // is not creating + let tmp%16#0: bytes = (txna ApplicationArgs 1) + test_cases.typed_abi_call.logger.Logger.log_uint64(tmp%16#0) return 1u block@5: // log_route_L33 - let tmp%16#0: uint64 = (txn OnCompletion) - let tmp%17#0: bool = (! tmp%16#0) - (assert tmp%17#0) // OnCompletion is NoOp - let tmp%18#0: bool = (txn ApplicationID) - (assert tmp%18#0) // is not creating - let tmp%19#0: bytes = (txna ApplicationArgs 1) - test_cases.typed_abi_call.logger.Logger.log_string(tmp%19#0) + let tmp%17#0: uint64 = (txn OnCompletion) + let tmp%18#0: bool = (! tmp%17#0) + (assert tmp%18#0) // OnCompletion is NoOp + let tmp%19#0: bool = (txn ApplicationID) + (assert tmp%19#0) // is not creating + let tmp%20#0: bytes = (txna ApplicationArgs 1) + test_cases.typed_abi_call.logger.Logger.log_uint512(tmp%20#0) return 1u block@6: // log_route_L37 - let tmp%20#0: uint64 = (txn OnCompletion) - let tmp%21#0: bool = (! tmp%20#0) - (assert tmp%21#0) // OnCompletion is NoOp - let tmp%22#0: bool = (txn ApplicationID) - (assert tmp%22#0) // is not creating - let tmp%23#0: bytes = (txna ApplicationArgs 1) - test_cases.typed_abi_call.logger.Logger.log_bool(tmp%23#0) + let tmp%21#0: uint64 = (txn OnCompletion) + let tmp%22#0: bool = (! tmp%21#0) + (assert tmp%22#0) // OnCompletion is NoOp + let tmp%23#0: bool = (txn ApplicationID) + (assert tmp%23#0) // is not creating + let tmp%24#0: bytes = (txna ApplicationArgs 1) + test_cases.typed_abi_call.logger.Logger.log_string(tmp%24#0) return 1u block@7: // log_route_L41 - let tmp%24#0: uint64 = (txn OnCompletion) - let tmp%25#0: bool = (! tmp%24#0) - (assert tmp%25#0) // OnCompletion is NoOp - let tmp%26#0: bool = (txn ApplicationID) - (assert tmp%26#0) // is not creating - let tmp%27#0: bytes = (txna ApplicationArgs 1) - test_cases.typed_abi_call.logger.Logger.log_bytes(tmp%27#0) + let tmp%25#0: uint64 = (txn OnCompletion) + let tmp%26#0: bool = (! tmp%25#0) + (assert tmp%26#0) // OnCompletion is NoOp + let tmp%27#0: bool = (txn ApplicationID) + (assert tmp%27#0) // is not creating + let tmp%28#0: bytes = (txna ApplicationArgs 1) + test_cases.typed_abi_call.logger.Logger.log_bool(tmp%28#0) return 1u block@8: // log_route_L45 - let tmp%28#0: uint64 = (txn OnCompletion) - let tmp%29#0: bool = (! tmp%28#0) - (assert tmp%29#0) // OnCompletion is NoOp - let tmp%30#0: bool = (txn ApplicationID) - (assert tmp%30#0) // is not creating - let tmp%31#0: bytes = (txna ApplicationArgs 1) - let tmp%32#0: uint64 = (btoi tmp%31#0) - let tmp%33#0: uint64 = ((txnas Assets) tmp%32#0) - let tmp%34#0: bytes = (txna ApplicationArgs 2) - let tmp%35#0: uint64 = (btoi tmp%34#0) - let tmp%36#0: bytes = ((txnas Accounts) tmp%35#0) - let tmp%37#0: bytes = (txna ApplicationArgs 3) - let tmp%38#0: uint64 = (btoi tmp%37#0) - let tmp%39#0: uint64 = ((txnas Applications) tmp%38#0) - test_cases.typed_abi_call.logger.Logger.log_asset_account_app(tmp%33#0, tmp%36#0, tmp%39#0) + let tmp%29#0: uint64 = (txn OnCompletion) + let tmp%30#0: bool = (! tmp%29#0) + (assert tmp%30#0) // OnCompletion is NoOp + let tmp%31#0: bool = (txn ApplicationID) + (assert tmp%31#0) // is not creating + let tmp%32#0: bytes = (txna ApplicationArgs 1) + test_cases.typed_abi_call.logger.Logger.log_bytes(tmp%32#0) return 1u - block@9: // echo_native_string_route_L49 - let tmp%40#0: uint64 = (txn OnCompletion) - let tmp%41#0: bool = (! tmp%40#0) - (assert tmp%41#0) // OnCompletion is NoOp - let tmp%42#0: bool = (txn ApplicationID) - (assert tmp%42#0) // is not creating - let tmp%43#0: bytes = (txna ApplicationArgs 1) - let tmp%44#0: bytes = ((extract 2 0) tmp%43#0) - let tmp%45#0: bytes = test_cases.typed_abi_call.logger.Logger.echo_native_string(tmp%44#0) - let length%0#0: uint64 = (len tmp%45#0) + block@9: // log_route_L49 + let tmp%33#0: uint64 = (txn OnCompletion) + let tmp%34#0: bool = (! tmp%33#0) + (assert tmp%34#0) // OnCompletion is NoOp + let tmp%35#0: bool = (txn ApplicationID) + (assert tmp%35#0) // is not creating + let tmp%36#0: bytes = (txna ApplicationArgs 1) + let tmp%37#0: uint64 = (btoi tmp%36#0) + let tmp%38#0: uint64 = ((txnas Assets) tmp%37#0) + let tmp%39#0: bytes = (txna ApplicationArgs 2) + let tmp%40#0: uint64 = (btoi tmp%39#0) + let tmp%41#0: bytes = ((txnas Accounts) tmp%40#0) + let tmp%42#0: bytes = (txna ApplicationArgs 3) + let tmp%43#0: uint64 = (btoi tmp%42#0) + let tmp%44#0: uint64 = ((txnas Applications) tmp%43#0) + test_cases.typed_abi_call.logger.Logger.log_asset_account_app(tmp%38#0, tmp%41#0, tmp%44#0) + return 1u + block@10: // echo_native_string_route_L53 + let tmp%45#0: uint64 = (txn OnCompletion) + let tmp%46#0: bool = (! tmp%45#0) + (assert tmp%46#0) // OnCompletion is NoOp + let tmp%47#0: bool = (txn ApplicationID) + (assert tmp%47#0) // is not creating + let tmp%48#0: bytes = (txna ApplicationArgs 1) + let tmp%49#0: bytes = ((extract 2 0) tmp%48#0) + let tmp%50#0: bytes = test_cases.typed_abi_call.logger.Logger.echo_native_string(tmp%49#0) + let length%0#0: uint64 = (len tmp%50#0) 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 tmp%45#0) - let tmp%46#0: bytes = (concat 0x151f7c75 encoded_value%0#0) - (log tmp%46#0) + let encoded_value%0#0: bytes = (concat length_uint16%0#0 tmp%50#0) + let tmp%51#0: bytes = (concat 0x151f7c75 encoded_value%0#0) + (log tmp%51#0) return 1u - block@10: // echo_native_bytes_route_L53 - let tmp%47#0: uint64 = (txn OnCompletion) - let tmp%48#0: bool = (! tmp%47#0) - (assert tmp%48#0) // OnCompletion is NoOp - let tmp%49#0: bool = (txn ApplicationID) - (assert tmp%49#0) // is not creating - let tmp%50#0: bytes = (txna ApplicationArgs 1) - let tmp%51#0: bytes = ((extract 2 0) tmp%50#0) - let tmp%52#0: bytes = test_cases.typed_abi_call.logger.Logger.echo_native_bytes(tmp%51#0) - let length%1#0: uint64 = (len tmp%52#0) + block@11: // echo_native_bytes_route_L57 + let tmp%52#0: uint64 = (txn OnCompletion) + let tmp%53#0: bool = (! tmp%52#0) + (assert tmp%53#0) // OnCompletion is NoOp + let tmp%54#0: bool = (txn ApplicationID) + (assert tmp%54#0) // is not creating + let tmp%55#0: bytes = (txna ApplicationArgs 1) + let tmp%56#0: bytes = ((extract 2 0) tmp%55#0) + let tmp%57#0: bytes = test_cases.typed_abi_call.logger.Logger.echo_native_bytes(tmp%56#0) + let length%1#0: uint64 = (len tmp%57#0) let as_bytes%1#0: bytes = (itob length%1#0) let length_uint16%1#0: bytes = ((extract 6 2) as_bytes%1#0) - let encoded_value%1#0: bytes = (concat length_uint16%1#0 tmp%52#0) - let tmp%53#0: bytes = (concat 0x151f7c75 encoded_value%1#0) - (log tmp%53#0) + let encoded_value%1#0: bytes = (concat length_uint16%1#0 tmp%57#0) + let tmp%58#0: bytes = (concat 0x151f7c75 encoded_value%1#0) + (log tmp%58#0) return 1u - block@11: // echo_native_uint64_route_L57 - let tmp%54#0: uint64 = (txn OnCompletion) - let tmp%55#0: bool = (! tmp%54#0) - (assert tmp%55#0) // OnCompletion is NoOp - let tmp%56#0: bool = (txn ApplicationID) - (assert tmp%56#0) // is not creating - let tmp%57#0: bytes = (txna ApplicationArgs 1) - let tmp%58#0: uint64 = (btoi tmp%57#0) - let tmp%59#0: uint64 = test_cases.typed_abi_call.logger.Logger.echo_native_uint64(tmp%58#0) - let val_as_bytes%0#0: bytes = (itob tmp%59#0) - let tmp%60#0: bytes = (concat 0x151f7c75 val_as_bytes%0#0) - (log tmp%60#0) + block@12: // echo_native_uint64_route_L61 + let tmp%59#0: uint64 = (txn OnCompletion) + let tmp%60#0: bool = (! tmp%59#0) + (assert tmp%60#0) // OnCompletion is NoOp + let tmp%61#0: bool = (txn ApplicationID) + (assert tmp%61#0) // is not creating + let tmp%62#0: bytes = (txna ApplicationArgs 1) + let tmp%63#0: uint64 = (btoi tmp%62#0) + let tmp%64#0: uint64 = test_cases.typed_abi_call.logger.Logger.echo_native_uint64(tmp%63#0) + let val_as_bytes%1#0: bytes = (itob tmp%64#0) + let tmp%65#0: bytes = (concat 0x151f7c75 val_as_bytes%1#0) + (log tmp%65#0) return 1u - block@12: // echo_native_biguint_route_L61 - let tmp%61#0: uint64 = (txn OnCompletion) - let tmp%62#0: bool = (! tmp%61#0) - (assert tmp%62#0) // OnCompletion is NoOp - let tmp%63#0: bool = (txn ApplicationID) - (assert tmp%63#0) // is not creating - let tmp%64#0: bytes = (txna ApplicationArgs 1) - let tmp%65#0: biguint = test_cases.typed_abi_call.logger.Logger.echo_native_biguint(tmp%64#0) - let len_%0#0: uint64 = (len tmp%65#0) + block@13: // echo_native_biguint_route_L65 + let tmp%66#0: uint64 = (txn OnCompletion) + let tmp%67#0: bool = (! tmp%66#0) + (assert tmp%67#0) // OnCompletion is NoOp + let tmp%68#0: bool = (txn ApplicationID) + (assert tmp%68#0) // is not creating + let tmp%69#0: bytes = (txna ApplicationArgs 1) + let tmp%70#0: biguint = test_cases.typed_abi_call.logger.Logger.echo_native_biguint(tmp%69#0) + let len_%0#0: uint64 = (len tmp%70#0) let no_overflow%0#0: bool = (<= len_%0#0 64u) (assert no_overflow%0#0) // overflow let b_zeros%0#0: bytes = (bzero 64u) - let tmp%66#0: bytes = (b| tmp%65#0 b_zeros%0#0) - let tmp%67#0: bytes = (concat 0x151f7c75 tmp%66#0) - (log tmp%67#0) + let tmp%71#0: bytes = (b| tmp%70#0 b_zeros%0#0) + let tmp%72#0: bytes = (concat 0x151f7c75 tmp%71#0) + (log tmp%72#0) return 1u - block@13: // echo_native_tuple_route_L65 - let tmp%68#0: uint64 = (txn OnCompletion) - let tmp%69#0: bool = (! tmp%68#0) - (assert tmp%69#0) // OnCompletion is NoOp - let tmp%70#0: bool = (txn ApplicationID) - (assert tmp%70#0) // is not creating - let tmp%71#0: bytes = (txna ApplicationArgs 1) - let tmp%72#0: bytes = ((extract 2 0) tmp%71#0) - let tmp%73#0: bytes = (txna ApplicationArgs 2) - let tmp%74#0: bytes = ((extract 2 0) tmp%73#0) - let tmp%75#0: bytes = (txna ApplicationArgs 3) - let tmp%76#0: uint64 = (btoi tmp%75#0) - let tmp%77#0: bytes = (txna ApplicationArgs 4) - let (awst_tmp%0#0: bytes, awst_tmp%1#0: bytes, awst_tmp%2#0: uint64, awst_tmp%3#0: biguint) = test_cases.typed_abi_call.logger.Logger.echo_native_tuple(tmp%72#0, tmp%74#0, tmp%76#0, tmp%77#0) + block@14: // echo_native_tuple_route_L69 + let tmp%73#0: uint64 = (txn OnCompletion) + let tmp%74#0: bool = (! tmp%73#0) + (assert tmp%74#0) // OnCompletion is NoOp + let tmp%75#0: bool = (txn ApplicationID) + (assert tmp%75#0) // is not creating + let tmp%76#0: bytes = (txna ApplicationArgs 1) + let tmp%77#0: bytes = ((extract 2 0) tmp%76#0) + let tmp%78#0: bytes = (txna ApplicationArgs 2) + let tmp%79#0: bytes = ((extract 2 0) tmp%78#0) + let tmp%80#0: bytes = (txna ApplicationArgs 3) + let tmp%81#0: uint64 = (btoi tmp%80#0) + let tmp%82#0: bytes = (txna ApplicationArgs 4) + let (awst_tmp%0#0: bytes, awst_tmp%1#0: bytes, awst_tmp%2#0: uint64, awst_tmp%3#0: biguint) = test_cases.typed_abi_call.logger.Logger.echo_native_tuple(tmp%77#0, tmp%79#0, tmp%81#0, tmp%82#0) let length%2#0: uint64 = (len awst_tmp%0#0) let as_bytes%2#0: bytes = (itob length%2#0) let length_uint16%2#0: bytes = ((extract 6 2) as_bytes%2#0) @@ -163,67 +174,67 @@ contract test_cases.typed_abi_call.logger.Logger: let as_bytes%3#0: bytes = (itob length%3#0) let length_uint16%3#0: bytes = ((extract 6 2) as_bytes%3#0) let encoded_value%3#0: bytes = (concat length_uint16%3#0 awst_tmp%1#0) - let val_as_bytes%1#0: bytes = (itob awst_tmp%2#0) + let val_as_bytes%2#0: bytes = (itob awst_tmp%2#0) let len_%1#0: uint64 = (len awst_tmp%3#0) let no_overflow%1#0: bool = (<= len_%1#0 64u) (assert no_overflow%1#0) // overflow let b_zeros%1#0: bytes = (bzero 64u) - let tmp%78#0: bytes = (b| awst_tmp%3#0 b_zeros%1#0) + let tmp%83#0: bytes = (b| awst_tmp%3#0 b_zeros%1#0) let data_length%0#0: uint64 = (len encoded_value%2#0) let current_tail_offset%1#0: uint64 = (+ 76u data_length%0#0) let as_bytes%5#0: bytes = (itob current_tail_offset%1#0) let offset_as_uint16%1#0: bytes = ((extract 6 2) as_bytes%5#0) let encoded_tuple_buffer%2#0: bytes = (concat 0x004c offset_as_uint16%1#0) - let encoded_tuple_buffer%3#0: bytes = (concat encoded_tuple_buffer%2#0 val_as_bytes%1#0) - let encoded_tuple_buffer%4#0: bytes = (concat encoded_tuple_buffer%3#0 tmp%78#0) + let encoded_tuple_buffer%3#0: bytes = (concat encoded_tuple_buffer%2#0 val_as_bytes%2#0) + let encoded_tuple_buffer%4#0: bytes = (concat encoded_tuple_buffer%3#0 tmp%83#0) let encoded_tuple_buffer%5#0: bytes = (concat encoded_tuple_buffer%4#0 encoded_value%2#0) let encoded_tuple_buffer%6#0: bytes = (concat encoded_tuple_buffer%5#0 encoded_value%3#0) - let tmp%79#0: bytes = (concat 0x151f7c75 encoded_tuple_buffer%6#0) - (log tmp%79#0) + let tmp%84#0: bytes = (concat 0x151f7c75 encoded_tuple_buffer%6#0) + (log tmp%84#0) return 1u - block@14: // return_args_after_14th_route_L71 - let tmp%80#0: uint64 = (txn OnCompletion) - let tmp%81#0: bool = (! tmp%80#0) - (assert tmp%81#0) // OnCompletion is NoOp - let tmp%82#0: bool = (txn ApplicationID) - (assert tmp%82#0) // is not creating - let tmp%83#0: bytes = (txna ApplicationArgs 1) - let tmp%84#0: bytes = (txna ApplicationArgs 2) - let tmp%85#0: bytes = (txna ApplicationArgs 3) - let tmp%86#0: bytes = (txna ApplicationArgs 4) - let tmp%87#0: bytes = (txna ApplicationArgs 5) - let tmp%88#0: bytes = (txna ApplicationArgs 6) - let tmp%89#0: bytes = (txna ApplicationArgs 7) - let tmp%90#0: bytes = (txna ApplicationArgs 8) - let tmp%91#0: bytes = (txna ApplicationArgs 9) - let tmp%92#0: bytes = (txna ApplicationArgs 10) - let tmp%93#0: bytes = (txna ApplicationArgs 11) - let tmp%94#0: bytes = (txna ApplicationArgs 12) - let tmp%95#0: bytes = (txna ApplicationArgs 13) - let tmp%96#0: bytes = (txna ApplicationArgs 14) - let tmp%97#0: bytes = (txna ApplicationArgs 15) - let tmp%98#0: bytes = ((extract 0 1) tmp%97#0) // on error: Index access is out of bounds - let tmp%99#0: bytes = (txna ApplicationArgs 15) - let tmp%100#0: bytes = ((extract 1 1) tmp%99#0) // on error: Index access is out of bounds - let tmp%101#0: bytes = (txna ApplicationArgs 15) - let tmp%102#0: bytes = ((extract 2 1) tmp%101#0) // on error: Index access is out of bounds - let tmp%103#0: bytes = (txna ApplicationArgs 15) - let tmp%104#0: bytes = ((extract 3 1) tmp%103#0) // on error: Index access is out of bounds - let tmp%105#0: bytes = (txna ApplicationArgs 15) - let tmp%106#0: bytes = ((extract 4 4) tmp%105#0) // on error: Index access is out of bounds - let tmp%107#0: bytes = (txna ApplicationArgs 15) - let tmp%108#0: bytes = ((extract 8 1) tmp%107#0) // on error: Index access is out of bounds - let tmp%109#0: bytes = test_cases.typed_abi_call.logger.Logger.return_args_after_14th(tmp%83#0, tmp%84#0, tmp%85#0, tmp%86#0, tmp%87#0, tmp%88#0, tmp%89#0, tmp%90#0, tmp%91#0, tmp%92#0, tmp%93#0, tmp%94#0, tmp%95#0, tmp%96#0, tmp%98#0, tmp%100#0, tmp%102#0, tmp%104#0, tmp%106#0, tmp%108#0) - let tmp%110#0: bytes = (concat 0x151f7c75 tmp%109#0) - (log tmp%110#0) + block@15: // return_args_after_14th_route_L75 + let tmp%85#0: uint64 = (txn OnCompletion) + let tmp%86#0: bool = (! tmp%85#0) + (assert tmp%86#0) // OnCompletion is NoOp + let tmp%87#0: bool = (txn ApplicationID) + (assert tmp%87#0) // is not creating + let tmp%88#0: bytes = (txna ApplicationArgs 1) + let tmp%89#0: bytes = (txna ApplicationArgs 2) + let tmp%90#0: bytes = (txna ApplicationArgs 3) + let tmp%91#0: bytes = (txna ApplicationArgs 4) + let tmp%92#0: bytes = (txna ApplicationArgs 5) + let tmp%93#0: bytes = (txna ApplicationArgs 6) + let tmp%94#0: bytes = (txna ApplicationArgs 7) + let tmp%95#0: bytes = (txna ApplicationArgs 8) + let tmp%96#0: bytes = (txna ApplicationArgs 9) + let tmp%97#0: bytes = (txna ApplicationArgs 10) + let tmp%98#0: bytes = (txna ApplicationArgs 11) + let tmp%99#0: bytes = (txna ApplicationArgs 12) + let tmp%100#0: bytes = (txna ApplicationArgs 13) + let tmp%101#0: bytes = (txna ApplicationArgs 14) + let tmp%102#0: bytes = (txna ApplicationArgs 15) + let tmp%103#0: bytes = ((extract 0 1) tmp%102#0) // on error: Index access is out of bounds + let tmp%104#0: bytes = (txna ApplicationArgs 15) + let tmp%105#0: bytes = ((extract 1 1) tmp%104#0) // on error: Index access is out of bounds + let tmp%106#0: bytes = (txna ApplicationArgs 15) + let tmp%107#0: bytes = ((extract 2 1) tmp%106#0) // on error: Index access is out of bounds + let tmp%108#0: bytes = (txna ApplicationArgs 15) + let tmp%109#0: bytes = ((extract 3 1) tmp%108#0) // on error: Index access is out of bounds + let tmp%110#0: bytes = (txna ApplicationArgs 15) + let tmp%111#0: bytes = ((extract 4 4) tmp%110#0) // on error: Index access is out of bounds + let tmp%112#0: bytes = (txna ApplicationArgs 15) + let tmp%113#0: bytes = ((extract 8 1) tmp%112#0) // on error: Index access is out of bounds + let tmp%114#0: bytes = test_cases.typed_abi_call.logger.Logger.return_args_after_14th(tmp%88#0, tmp%89#0, tmp%90#0, tmp%91#0, tmp%92#0, tmp%93#0, tmp%94#0, tmp%95#0, tmp%96#0, tmp%97#0, tmp%98#0, tmp%99#0, tmp%100#0, tmp%101#0, tmp%103#0, tmp%105#0, tmp%107#0, tmp%109#0, tmp%111#0, tmp%113#0) + let tmp%115#0: bytes = (concat 0x151f7c75 tmp%114#0) + (log tmp%115#0) return 1u - block@17: // bare_routing_L20 - let tmp%111#0: uint64 = (txn OnCompletion) - let not%tmp%111#0: bool = (! tmp%111#0) - (assert not%tmp%111#0) // reject transaction - let tmp%112#0: bool = (txn ApplicationID) - let tmp%113#0: bool = (! tmp%112#0) - (assert tmp%113#0) // is creating + block@18: // bare_routing_L20 + let tmp%116#0: uint64 = (txn OnCompletion) + let not%tmp%116#0: bool = (! tmp%116#0) + (assert not%tmp%116#0) // reject transaction + let tmp%117#0: bool = (txn ApplicationID) + let tmp%118#0: bool = (! tmp%117#0) + (assert tmp%118#0) // is creating return 1u subroutine test_cases.typed_abi_call.logger.Logger.echo(value: bytes) -> bytes: @@ -236,37 +247,41 @@ contract test_cases.typed_abi_call.logger.Logger: let concat_result%0#0: bytes = (concat len_16_bit%0#0 concatenated%0#0) return concat_result%0#0 - subroutine test_cases.typed_abi_call.logger.Logger.log_uint64(value: bytes) -> void: + subroutine test_cases.typed_abi_call.logger.Logger.no_args() -> uint64: block@0: // L25 + return 42u + + subroutine test_cases.typed_abi_call.logger.Logger.log_uint64(value: bytes) -> void: + block@0: // L29 (log value#0) return subroutine test_cases.typed_abi_call.logger.Logger.log_uint512(value: bytes) -> void: - block@0: // L29 + block@0: // L33 (log value#0) return subroutine test_cases.typed_abi_call.logger.Logger.log_string(value: bytes) -> void: - block@0: // L33 + block@0: // L37 let tmp%0#0: bytes = ((extract 2 0) value#0) (log tmp%0#0) return subroutine test_cases.typed_abi_call.logger.Logger.log_bool(value: bytes) -> void: - block@0: // L37 + block@0: // L41 let tmp%0#0: bool = (getbit value#0 0u) let tmp%1#0: bytes = (select 0x46616c7365 0x54727565 tmp%0#0) (log tmp%1#0) return subroutine test_cases.typed_abi_call.logger.Logger.log_bytes(value: bytes) -> void: - block@0: // L41 + block@0: // L45 let tmp%0#0: bytes = ((extract 2 0) value#0) (log tmp%0#0) return subroutine test_cases.typed_abi_call.logger.Logger.log_asset_account_app(asset: uint64, account: bytes, app: uint64) -> void: - block@0: // L45 + block@0: // L49 let (value%0#0: bytes, check%0#0: bool) = ((asset_params_get AssetName) asset#0) (assert check%0#0) // asset exists let tmp%1#0: bytes = (concat value%0#0 account#0) @@ -277,27 +292,27 @@ contract test_cases.typed_abi_call.logger.Logger: return subroutine test_cases.typed_abi_call.logger.Logger.echo_native_string(value: bytes) -> bytes: - block@0: // L49 + block@0: // L53 let tmp%0#0: bytes = (concat "echo: " value#0) return tmp%0#0 subroutine test_cases.typed_abi_call.logger.Logger.echo_native_bytes(value: bytes) -> bytes: - block@0: // L53 + block@0: // L57 let tmp%0#0: bytes = (concat 0x6563686f3a20 value#0) return tmp%0#0 subroutine test_cases.typed_abi_call.logger.Logger.echo_native_uint64(value: uint64) -> uint64: - block@0: // L57 + block@0: // L61 let tmp%0#0: uint64 = (+ value#0 1u) return tmp%0#0 subroutine test_cases.typed_abi_call.logger.Logger.echo_native_biguint(value: biguint) -> biguint: - block@0: // L61 + block@0: // L65 let tmp%0#0: biguint = (b+ value#0 1b) return tmp%0#0 subroutine test_cases.typed_abi_call.logger.Logger.echo_native_tuple(s: bytes, b: bytes, u: uint64, bu: biguint) -> : - block@0: // L65 + block@0: // L69 let tmp%0#0: bytes = (concat "echo: " s#0) let tmp%1#0: bytes = (concat 0x6563686f3a20 b#0) let tmp%2#0: uint64 = (+ u#0 1u) @@ -305,7 +320,7 @@ contract test_cases.typed_abi_call.logger.Logger: return tmp%0#0 tmp%1#0 tmp%2#0 tmp%3#0 subroutine test_cases.typed_abi_call.logger.Logger.return_args_after_14th(_a1: bytes, _a2: bytes, _a3: bytes, _a4: bytes, _a5: bytes, _a6: bytes, _a7: bytes, _a8: bytes, _a9: bytes, _a10: bytes, _a11: bytes, _a12: bytes, _a13: bytes, _a14: bytes, a15: bytes, a16: bytes, a17: bytes, a18: bytes, a19: bytes, a20: bytes) -> bytes: - block@0: // L71 + block@0: // L75 let encoded_tuple_buffer%2#0: bytes = (concat a15#0 a16#0) let encoded_tuple_buffer%3#0: bytes = (concat encoded_tuple_buffer%2#0 a17#0) let encoded_tuple_buffer%4#0: bytes = (concat encoded_tuple_buffer%3#0 a18#0) diff --git a/test_cases/typed_abi_call/out/client_Greeter.py b/test_cases/typed_abi_call/out/client_Greeter.py index e247fadba7..2f7943c3d7 100644 --- a/test_cases/typed_abi_call/out/client_Greeter.py +++ b/test_cases/typed_abi_call/out/client_Greeter.py @@ -73,3 +73,9 @@ def test_native_tuple( self, app: algopy.Application, ) -> None: ... + + @algopy.arc4.abimethod + def test_no_args( + self, + app: algopy.Application, + ) -> None: ... diff --git a/test_cases/typed_abi_call/out/client_Logger.py b/test_cases/typed_abi_call/out/client_Logger.py index 75c9a03595..44c8893176 100644 --- a/test_cases/typed_abi_call/out/client_Logger.py +++ b/test_cases/typed_abi_call/out/client_Logger.py @@ -13,6 +13,11 @@ def echo( value: algopy.arc4.String, ) -> algopy.arc4.String: ... + @algopy.arc4.abimethod + def no_args( + self, + ) -> algopy.arc4.UIntN[typing.Literal[64]]: ... + @algopy.arc4.abimethod def log( self, diff --git a/test_cases/typed_abi_call/out/logger.awst b/test_cases/typed_abi_call/out/logger.awst index 3c899df940..34e75f0928 100644 --- a/test_cases/typed_abi_call/out/logger.awst +++ b/test_cases/typed_abi_call/out/logger.awst @@ -7,6 +7,11 @@ contract Logger return arc4_encode('echo: ', arc4.dynamic_array) + value } + abimethod no_args(): uint64 + { + return 42u + } + abimethod[name_override=log] log_uint64(value: arc4.uint64): void { log(reinterpret_cast(value)) diff --git a/test_cases/typed_abi_call/out/typed_c2c.awst b/test_cases/typed_abi_call/out/typed_c2c.awst index d278911bad..000c69860d 100644 --- a/test_cases/typed_abi_call/out/typed_c2c.awst +++ b/test_cases/typed_abi_call/out/typed_c2c.awst @@ -121,4 +121,14 @@ contract Greeter result3: arc4.tuple,arc4.dynamic_array,arc4.uint64,arc4.uint512> = checked_maybe((extract<4, 0>(SINGLE_EVAL(id=46, source=txn.LastLog)), extract<0, 4>(SINGLE_EVAL(id=46)) == hex<"151F7C75">)) assert(result1 == result3) } + + abimethod test_no_args(app: application): void + { + (result, _txn): tuple = (arc4_decode(checked_maybe((extract<4, 0>(SINGLE_EVAL(id=48, source=SINGLE_EVAL(id=47, source=submit_txn(create_inner_transaction(Fee=0u, TypeEnum=appl, ApplicationArgs=(Method("no_args()uint64")), ApplicationID=app))).LastLog)), extract<0, 4>(SINGLE_EVAL(id=48)) == hex<"151F7C75">)), uint64), SINGLE_EVAL(id=47)) + assert(result == 42u) + (arc4_result, _txn): tuple = (checked_maybe((extract<4, 0>(SINGLE_EVAL(id=50, source=SINGLE_EVAL(id=49, source=submit_txn(create_inner_transaction(Fee=0u, TypeEnum=appl, ApplicationArgs=(Method("no_args()uint64")), ApplicationID=app))).LastLog)), extract<0, 4>(SINGLE_EVAL(id=50)) == hex<"151F7C75">)), SINGLE_EVAL(id=49)) + assert(reinterpret_cast(arc4_result) == reinterpret_cast(42arc4u64)) + (arc4_decode(checked_maybe((extract<4, 0>(SINGLE_EVAL(id=52, source=SINGLE_EVAL(id=51, source=submit_txn(create_inner_transaction(Fee=0u, TypeEnum=appl, ApplicationArgs=(Method("no_args()uint64")), ApplicationID=app))).LastLog)), extract<0, 4>(SINGLE_EVAL(id=52)) == hex<"151F7C75">)), uint64), SINGLE_EVAL(id=51)) + assert(reinterpret_cast(checked_maybe((extract<4, 0>(SINGLE_EVAL(id=53, source=itxn())), extract<0, 4>(SINGLE_EVAL(id=53)) == hex<"151F7C75">))) == reinterpret_cast(42arc4u64)) + } } \ No newline at end of file diff --git a/test_cases/typed_abi_call/out_O2/Greeter.approval.teal b/test_cases/typed_abi_call/out_O2/Greeter.approval.teal index 8f355c80bf..eccd3e59ca 100644 --- a/test_cases/typed_abi_call/out_O2/Greeter.approval.teal +++ b/test_cases/typed_abi_call/out_O2/Greeter.approval.teal @@ -2,7 +2,7 @@ test_cases.typed_abi_call.typed_c2c.Greeter.approval_program: txn NumAppArgs - bz main_bare_routing@15 + bz main_bare_routing@16 method "test_method_selector_kinds(application)void" method "test_method_overload(application)void" method "test_arg_conversion(application)void" @@ -14,8 +14,9 @@ test_cases.typed_abi_call.typed_c2c.Greeter.approval_program: method "test_native_uint64(application)void" method "test_native_biguint(application)void" method "test_native_tuple(application)void" + method "test_no_args(application)void" txna ApplicationArgs 0 - match main_test_method_selector_kinds_route@2 main_test_method_overload_route@3 main_test_arg_conversion_route@4 main_test_15plus_args_route@5 main_test_void_route@6 main_test_ref_types_route@7 main_test_native_string_route@8 main_test_native_bytes_route@9 main_test_native_uint64_route@10 main_test_native_biguint_route@11 main_test_native_tuple_route@12 + match main_test_method_selector_kinds_route@2 main_test_method_overload_route@3 main_test_arg_conversion_route@4 main_test_15plus_args_route@5 main_test_void_route@6 main_test_ref_types_route@7 main_test_native_string_route@8 main_test_native_bytes_route@9 main_test_native_uint64_route@10 main_test_native_biguint_route@11 main_test_native_tuple_route@12 main_test_no_args_route@13 err // reject transaction main_test_method_selector_kinds_route@2: @@ -164,7 +165,20 @@ main_test_native_tuple_route@12: int 1 return -main_bare_routing@15: +main_test_no_args_route@13: + txn OnCompletion + ! + assert // OnCompletion is NoOp + txn ApplicationID + assert // is not creating + txna ApplicationArgs 1 + btoi + txnas Applications + callsub test_no_args + int 1 + return + +main_bare_routing@16: txn OnCompletion ! assert // reject transaction @@ -1107,3 +1121,78 @@ test_native_tuple: == assert retsub + + +// test_cases.typed_abi_call.typed_c2c.Greeter.test_no_args(app: uint64) -> void: +test_no_args: + proto 1 0 + itxn_begin + frame_dig -1 + itxn_field ApplicationID + method "no_args()uint64" + itxn_field ApplicationArgs + int appl + itxn_field TypeEnum + int 0 + itxn_field Fee + itxn_submit + itxn LastLog + dup + extract 4 0 + swap + extract 0 4 + byte 0x151f7c75 + == + assert // ARC4 prefix is valid + btoi + int 42 + == + assert + itxn_begin + frame_dig -1 + itxn_field ApplicationID + method "no_args()uint64" + itxn_field ApplicationArgs + int appl + itxn_field TypeEnum + int 0 + itxn_field Fee + itxn_submit + itxn LastLog + dup + extract 4 0 + swap + extract 0 4 + byte 0x151f7c75 + == + assert // ARC4 prefix is valid + byte 0x000000000000002a + b== + assert + itxn_begin + frame_dig -1 + itxn_field ApplicationID + method "no_args()uint64" + itxn_field ApplicationArgs + int appl + itxn_field TypeEnum + int 0 + itxn_field Fee + itxn_submit + itxn LastLog + extract 0 4 + byte 0x151f7c75 + == + assert // ARC4 prefix is valid + itxn LastLog + dup + extract 4 0 + swap + extract 0 4 + byte 0x151f7c75 + == + assert // ARC4 prefix is valid + byte 0x000000000000002a + b== + assert + retsub diff --git a/test_cases/typed_abi_call/out_O2/Greeter.destructured.ir b/test_cases/typed_abi_call/out_O2/Greeter.destructured.ir index 25531637b3..7c0bb21321 100644 --- a/test_cases/typed_abi_call/out_O2/Greeter.destructured.ir +++ b/test_cases/typed_abi_call/out_O2/Greeter.destructured.ir @@ -3,10 +3,10 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: subroutine test_cases.typed_abi_call.typed_c2c.Greeter.approval_program() -> bool: block@0: // L17 let tmp%0#0: bool = (txn NumAppArgs) - goto tmp%0#0 ? block@1 : block@15 + goto tmp%0#0 ? block@1 : block@16 block@1: // abi_routing_L17 let tmp%1#0: bytes = (txna ApplicationArgs 0) - switch tmp%1#0 {method "test_method_selector_kinds(application)void" => block@2, method "test_method_overload(application)void" => block@3, method "test_arg_conversion(application)void" => block@4, method "test_15plus_args(application)void" => block@5, method "test_void(application)void" => block@6, method "test_ref_types(application,asset)void" => block@7, method "test_native_string(application)void" => block@8, method "test_native_bytes(application)void" => block@9, method "test_native_uint64(application)void" => block@10, method "test_native_biguint(application)void" => block@11, method "test_native_tuple(application)void" => block@12, * => fail // reject transaction} + switch tmp%1#0 {method "test_method_selector_kinds(application)void" => block@2, method "test_method_overload(application)void" => block@3, method "test_arg_conversion(application)void" => block@4, method "test_15plus_args(application)void" => block@5, method "test_void(application)void" => block@6, method "test_ref_types(application,asset)void" => block@7, method "test_native_string(application)void" => block@8, method "test_native_bytes(application)void" => block@9, method "test_native_uint64(application)void" => block@10, method "test_native_biguint(application)void" => block@11, method "test_native_tuple(application)void" => block@12, method "test_no_args(application)void" => block@13, * => fail // reject transaction} block@2: // test_method_selector_kinds_route_L18 let tmp%2#0: uint64 = (txn OnCompletion) let tmp%3#0: bool = (! tmp%2#0) @@ -131,13 +131,24 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: let tmp%70#0: uint64 = ((txnas Applications) tmp%69#0) test_cases.typed_abi_call.typed_c2c.Greeter.test_native_tuple(tmp%70#0) return 1u - block@15: // bare_routing_L17 + block@13: // test_no_args_route_L215 let tmp%71#0: uint64 = (txn OnCompletion) - let not%tmp%71#0: bool = (! tmp%71#0) - (assert not%tmp%71#0) // reject transaction - let tmp%72#0: bool = (txn ApplicationID) - let tmp%73#0: bool = (! tmp%72#0) - (assert tmp%73#0) // is creating + let tmp%72#0: bool = (! tmp%71#0) + (assert tmp%72#0) // OnCompletion is NoOp + let tmp%73#0: bool = (txn ApplicationID) + (assert tmp%73#0) // is not creating + let tmp%74#0: bytes = (txna ApplicationArgs 1) + let tmp%75#0: uint64 = (btoi tmp%74#0) + let tmp%76#0: uint64 = ((txnas Applications) tmp%75#0) + test_cases.typed_abi_call.typed_c2c.Greeter.test_no_args(tmp%76#0) + return 1u + block@16: // bare_routing_L17 + let tmp%77#0: uint64 = (txn OnCompletion) + let not%tmp%77#0: bool = (! tmp%77#0) + (assert not%tmp%77#0) // reject transaction + let tmp%78#0: bool = (txn ApplicationID) + let tmp%79#0: bool = (! tmp%78#0) + (assert tmp%79#0) // is creating return 1u subroutine test_cases.typed_abi_call.typed_c2c.Greeter.test_method_selector_kinds(app: uint64) -> void: @@ -709,6 +720,54 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: let tmp%18#0: bool = (== result1#0 result3#0) (assert tmp%18#0) return + + subroutine test_cases.typed_abi_call.typed_c2c.Greeter.test_no_args(app: uint64) -> void: + block@0: // L215 + itxn_begin + ((itxn_field ApplicationID) app#0) + ((itxn_field ApplicationArgs) method "no_args()uint64") + ((itxn_field TypeEnum) appl) + ((itxn_field Fee) 0u) + itxn_submit + let awst_tmp%0#0: bytes = (itxn LastLog) + let tmp%0#0: bytes = ((extract 4 0) awst_tmp%0#0) + let tmp%1#0: bytes = ((extract 0 4) awst_tmp%0#0) + let tmp%2#0: bool = (== tmp%1#0 0x151f7c75) + (assert tmp%2#0) // ARC4 prefix is valid + let result#0: uint64 = (btoi tmp%0#0) + let tmp%3#0: bool = (== result#0 42u) + (assert tmp%3#0) + itxn_begin + ((itxn_field ApplicationID) app#0) + ((itxn_field ApplicationArgs) method "no_args()uint64") + ((itxn_field TypeEnum) appl) + ((itxn_field Fee) 0u) + itxn_submit + let awst_tmp%1#0: bytes = (itxn LastLog) + let arc4_result#0: bytes = ((extract 4 0) awst_tmp%1#0) + let tmp%5#0: bytes = ((extract 0 4) awst_tmp%1#0) + let tmp%6#0: bool = (== tmp%5#0 0x151f7c75) + (assert tmp%6#0) // ARC4 prefix is valid + let tmp%7#0: bool = (b== arc4_result#0 0x000000000000002a) + (assert tmp%7#0) + itxn_begin + ((itxn_field ApplicationID) app#0) + ((itxn_field ApplicationArgs) method "no_args()uint64") + ((itxn_field TypeEnum) appl) + ((itxn_field Fee) 0u) + itxn_submit + let awst_tmp%2#0: bytes = (itxn LastLog) + let tmp%9#0: bytes = ((extract 0 4) awst_tmp%2#0) + let tmp%10#0: bool = (== tmp%9#0 0x151f7c75) + (assert tmp%10#0) // ARC4 prefix is valid + let awst_tmp%3#0: bytes = (itxn LastLog) + let tmp%12#0: bytes = ((extract 4 0) awst_tmp%3#0) + let tmp%13#0: bytes = ((extract 0 4) awst_tmp%3#0) + let tmp%14#0: bool = (== tmp%13#0 0x151f7c75) + (assert tmp%14#0) // ARC4 prefix is valid + let tmp%15#0: bool = (b== tmp%12#0 0x000000000000002a) + (assert tmp%15#0) + return program clear-state: subroutine test_cases.typed_abi_call.typed_c2c.Greeter.clear_state_program() -> bool: diff --git a/test_cases/typed_abi_call/out_O2/Logger.approval.teal b/test_cases/typed_abi_call/out_O2/Logger.approval.teal index b79c3b7230..f0ce4cd03f 100644 --- a/test_cases/typed_abi_call/out_O2/Logger.approval.teal +++ b/test_cases/typed_abi_call/out_O2/Logger.approval.teal @@ -2,8 +2,9 @@ test_cases.typed_abi_call.logger.Logger.approval_program: txn NumAppArgs - bz main_bare_routing@17 + bz main_bare_routing@18 method "echo(string)string" + method "no_args()uint64" method "log(uint64)void" method "log(uint512)void" method "log(string)void" @@ -17,7 +18,7 @@ test_cases.typed_abi_call.logger.Logger.approval_program: method "echo_native_tuple(string,byte[],uint64,uint512)(string,byte[],uint64,uint512)" method "return_args_after_14th(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint8,uint8,uint8,uint8,(uint8,uint8,uint8,uint8),uint8)byte[]" txna ApplicationArgs 0 - match main_echo_route@2 main_log_route@3 main_log_route@4 main_log_route@5 main_log_route@6 main_log_route@7 main_log_route@8 main_echo_native_string_route@9 main_echo_native_bytes_route@10 main_echo_native_uint64_route@11 main_echo_native_biguint_route@12 main_echo_native_tuple_route@13 main_return_args_after_14th_route@14 + match main_echo_route@2 main_no_args_route@3 main_log_route@4 main_log_route@5 main_log_route@6 main_log_route@7 main_log_route@8 main_log_route@9 main_echo_native_string_route@10 main_echo_native_bytes_route@11 main_echo_native_uint64_route@12 main_echo_native_biguint_route@13 main_echo_native_tuple_route@14 main_return_args_after_14th_route@15 err // reject transaction main_echo_route@2: @@ -35,7 +36,22 @@ main_echo_route@2: int 1 return -main_log_route@3: +main_no_args_route@3: + txn OnCompletion + ! + assert // OnCompletion is NoOp + txn ApplicationID + assert // is not creating + callsub no_args + itob + byte 0x151f7c75 + swap + concat + log + int 1 + return + +main_log_route@4: txn OnCompletion ! assert // OnCompletion is NoOp @@ -46,7 +62,7 @@ main_log_route@3: int 1 return -main_log_route@4: +main_log_route@5: txn OnCompletion ! assert // OnCompletion is NoOp @@ -57,7 +73,7 @@ main_log_route@4: int 1 return -main_log_route@5: +main_log_route@6: txn OnCompletion ! assert // OnCompletion is NoOp @@ -68,7 +84,7 @@ main_log_route@5: int 1 return -main_log_route@6: +main_log_route@7: txn OnCompletion ! assert // OnCompletion is NoOp @@ -79,7 +95,7 @@ main_log_route@6: int 1 return -main_log_route@7: +main_log_route@8: txn OnCompletion ! assert // OnCompletion is NoOp @@ -90,7 +106,7 @@ main_log_route@7: int 1 return -main_log_route@8: +main_log_route@9: txn OnCompletion ! assert // OnCompletion is NoOp @@ -109,7 +125,7 @@ main_log_route@8: int 1 return -main_echo_native_string_route@9: +main_echo_native_string_route@10: txn OnCompletion ! assert // OnCompletion is NoOp @@ -131,7 +147,7 @@ main_echo_native_string_route@9: int 1 return -main_echo_native_bytes_route@10: +main_echo_native_bytes_route@11: txn OnCompletion ! assert // OnCompletion is NoOp @@ -153,7 +169,7 @@ main_echo_native_bytes_route@10: int 1 return -main_echo_native_uint64_route@11: +main_echo_native_uint64_route@12: txn OnCompletion ! assert // OnCompletion is NoOp @@ -170,7 +186,7 @@ main_echo_native_uint64_route@11: int 1 return -main_echo_native_biguint_route@12: +main_echo_native_biguint_route@13: txn OnCompletion ! assert // OnCompletion is NoOp @@ -193,7 +209,7 @@ main_echo_native_biguint_route@12: int 1 return -main_echo_native_tuple_route@13: +main_echo_native_tuple_route@14: txn OnCompletion ! assert // OnCompletion is NoOp @@ -258,7 +274,7 @@ main_echo_native_tuple_route@13: int 1 return -main_return_args_after_14th_route@14: +main_return_args_after_14th_route@15: txn OnCompletion ! assert // OnCompletion is NoOp @@ -298,7 +314,7 @@ main_return_args_after_14th_route@14: int 1 return -main_bare_routing@17: +main_bare_routing@18: txn OnCompletion ! assert // reject transaction @@ -326,6 +342,13 @@ echo: retsub +// test_cases.typed_abi_call.logger.Logger.no_args() -> uint64: +no_args: + proto 0 1 + int 42 + retsub + + // test_cases.typed_abi_call.logger.Logger.log_uint64(value: bytes) -> void: log_uint64: proto 1 0 diff --git a/test_cases/typed_abi_call/out_O2/Logger.destructured.ir b/test_cases/typed_abi_call/out_O2/Logger.destructured.ir index 4f3e6befb4..a30c0643a4 100644 --- a/test_cases/typed_abi_call/out_O2/Logger.destructured.ir +++ b/test_cases/typed_abi_call/out_O2/Logger.destructured.ir @@ -3,10 +3,10 @@ contract test_cases.typed_abi_call.logger.Logger: subroutine test_cases.typed_abi_call.logger.Logger.approval_program() -> bool: block@0: // L20 let tmp%0#0: bool = (txn NumAppArgs) - goto tmp%0#0 ? block@1 : block@17 + goto tmp%0#0 ? block@1 : block@18 block@1: // abi_routing_L20 let tmp%1#0: bytes = (txna ApplicationArgs 0) - switch tmp%1#0 {method "echo(string)string" => block@2, method "log(uint64)void" => block@3, method "log(uint512)void" => block@4, method "log(string)void" => block@5, method "log(bool)void" => block@6, method "log(byte[])void" => block@7, method "log(asset,account,application)void" => block@8, method "echo_native_string(string)string" => block@9, method "echo_native_bytes(byte[])byte[]" => block@10, method "echo_native_uint64(uint64)uint64" => block@11, method "echo_native_biguint(uint512)uint512" => block@12, method "echo_native_tuple(string,byte[],uint64,uint512)(string,byte[],uint64,uint512)" => block@13, method "return_args_after_14th(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint8,uint8,uint8,uint8,(uint8,uint8,uint8,uint8),uint8)byte[]" => block@14, * => fail // reject transaction} + switch tmp%1#0 {method "echo(string)string" => block@2, method "no_args()uint64" => block@3, method "log(uint64)void" => block@4, method "log(uint512)void" => block@5, method "log(string)void" => block@6, method "log(bool)void" => block@7, method "log(byte[])void" => block@8, method "log(asset,account,application)void" => block@9, method "echo_native_string(string)string" => block@10, method "echo_native_bytes(byte[])byte[]" => block@11, method "echo_native_uint64(uint64)uint64" => block@12, method "echo_native_biguint(uint512)uint512" => block@13, method "echo_native_tuple(string,byte[],uint64,uint512)(string,byte[],uint64,uint512)" => block@14, method "return_args_after_14th(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint8,uint8,uint8,uint8,(uint8,uint8,uint8,uint8),uint8)byte[]" => block@15, * => fail // reject transaction} block@2: // echo_route_L21 let tmp%2#0: uint64 = (txn OnCompletion) let tmp%3#0: bool = (! tmp%2#0) @@ -18,143 +18,154 @@ contract test_cases.typed_abi_call.logger.Logger: let tmp%7#0: bytes = (concat 0x151f7c75 tmp%6#0) (log tmp%7#0) return 1u - block@3: // log_route_L25 + block@3: // no_args_route_L25 let tmp%8#0: uint64 = (txn OnCompletion) let tmp%9#0: bool = (! tmp%8#0) (assert tmp%9#0) // OnCompletion is NoOp let tmp%10#0: bool = (txn ApplicationID) (assert tmp%10#0) // is not creating - let tmp%11#0: bytes = (txna ApplicationArgs 1) - test_cases.typed_abi_call.logger.Logger.log_uint64(tmp%11#0) + let tmp%11#0: uint64 = test_cases.typed_abi_call.logger.Logger.no_args() + let val_as_bytes%0#0: bytes = (itob tmp%11#0) + let tmp%12#0: bytes = (concat 0x151f7c75 val_as_bytes%0#0) + (log tmp%12#0) return 1u block@4: // log_route_L29 - let tmp%12#0: uint64 = (txn OnCompletion) - let tmp%13#0: bool = (! tmp%12#0) - (assert tmp%13#0) // OnCompletion is NoOp - let tmp%14#0: bool = (txn ApplicationID) - (assert tmp%14#0) // is not creating - let tmp%15#0: bytes = (txna ApplicationArgs 1) - test_cases.typed_abi_call.logger.Logger.log_uint512(tmp%15#0) + let tmp%13#0: uint64 = (txn OnCompletion) + let tmp%14#0: bool = (! tmp%13#0) + (assert tmp%14#0) // OnCompletion is NoOp + let tmp%15#0: bool = (txn ApplicationID) + (assert tmp%15#0) // is not creating + let tmp%16#0: bytes = (txna ApplicationArgs 1) + test_cases.typed_abi_call.logger.Logger.log_uint64(tmp%16#0) return 1u block@5: // log_route_L33 - let tmp%16#0: uint64 = (txn OnCompletion) - let tmp%17#0: bool = (! tmp%16#0) - (assert tmp%17#0) // OnCompletion is NoOp - let tmp%18#0: bool = (txn ApplicationID) - (assert tmp%18#0) // is not creating - let tmp%19#0: bytes = (txna ApplicationArgs 1) - test_cases.typed_abi_call.logger.Logger.log_string(tmp%19#0) + let tmp%17#0: uint64 = (txn OnCompletion) + let tmp%18#0: bool = (! tmp%17#0) + (assert tmp%18#0) // OnCompletion is NoOp + let tmp%19#0: bool = (txn ApplicationID) + (assert tmp%19#0) // is not creating + let tmp%20#0: bytes = (txna ApplicationArgs 1) + test_cases.typed_abi_call.logger.Logger.log_uint512(tmp%20#0) return 1u block@6: // log_route_L37 - let tmp%20#0: uint64 = (txn OnCompletion) - let tmp%21#0: bool = (! tmp%20#0) - (assert tmp%21#0) // OnCompletion is NoOp - let tmp%22#0: bool = (txn ApplicationID) - (assert tmp%22#0) // is not creating - let tmp%23#0: bytes = (txna ApplicationArgs 1) - test_cases.typed_abi_call.logger.Logger.log_bool(tmp%23#0) + let tmp%21#0: uint64 = (txn OnCompletion) + let tmp%22#0: bool = (! tmp%21#0) + (assert tmp%22#0) // OnCompletion is NoOp + let tmp%23#0: bool = (txn ApplicationID) + (assert tmp%23#0) // is not creating + let tmp%24#0: bytes = (txna ApplicationArgs 1) + test_cases.typed_abi_call.logger.Logger.log_string(tmp%24#0) return 1u block@7: // log_route_L41 - let tmp%24#0: uint64 = (txn OnCompletion) - let tmp%25#0: bool = (! tmp%24#0) - (assert tmp%25#0) // OnCompletion is NoOp - let tmp%26#0: bool = (txn ApplicationID) - (assert tmp%26#0) // is not creating - let tmp%27#0: bytes = (txna ApplicationArgs 1) - test_cases.typed_abi_call.logger.Logger.log_bytes(tmp%27#0) + let tmp%25#0: uint64 = (txn OnCompletion) + let tmp%26#0: bool = (! tmp%25#0) + (assert tmp%26#0) // OnCompletion is NoOp + let tmp%27#0: bool = (txn ApplicationID) + (assert tmp%27#0) // is not creating + let tmp%28#0: bytes = (txna ApplicationArgs 1) + test_cases.typed_abi_call.logger.Logger.log_bool(tmp%28#0) return 1u block@8: // log_route_L45 - let tmp%28#0: uint64 = (txn OnCompletion) - let tmp%29#0: bool = (! tmp%28#0) - (assert tmp%29#0) // OnCompletion is NoOp - let tmp%30#0: bool = (txn ApplicationID) - (assert tmp%30#0) // is not creating - let tmp%31#0: bytes = (txna ApplicationArgs 1) - let tmp%32#0: uint64 = (btoi tmp%31#0) - let tmp%33#0: uint64 = ((txnas Assets) tmp%32#0) - let tmp%34#0: bytes = (txna ApplicationArgs 2) - let tmp%35#0: uint64 = (btoi tmp%34#0) - let tmp%36#0: bytes = ((txnas Accounts) tmp%35#0) - let tmp%37#0: bytes = (txna ApplicationArgs 3) - let tmp%38#0: uint64 = (btoi tmp%37#0) - let tmp%39#0: uint64 = ((txnas Applications) tmp%38#0) - test_cases.typed_abi_call.logger.Logger.log_asset_account_app(tmp%33#0, tmp%36#0, tmp%39#0) + let tmp%29#0: uint64 = (txn OnCompletion) + let tmp%30#0: bool = (! tmp%29#0) + (assert tmp%30#0) // OnCompletion is NoOp + let tmp%31#0: bool = (txn ApplicationID) + (assert tmp%31#0) // is not creating + let tmp%32#0: bytes = (txna ApplicationArgs 1) + test_cases.typed_abi_call.logger.Logger.log_bytes(tmp%32#0) return 1u - block@9: // echo_native_string_route_L49 - let tmp%40#0: uint64 = (txn OnCompletion) - let tmp%41#0: bool = (! tmp%40#0) - (assert tmp%41#0) // OnCompletion is NoOp - let tmp%42#0: bool = (txn ApplicationID) - (assert tmp%42#0) // is not creating - let tmp%43#0: bytes = (txna ApplicationArgs 1) - let tmp%44#0: bytes = ((extract 2 0) tmp%43#0) - let tmp%45#0: bytes = test_cases.typed_abi_call.logger.Logger.echo_native_string(tmp%44#0) - let length%0#0: uint64 = (len tmp%45#0) + block@9: // log_route_L49 + let tmp%33#0: uint64 = (txn OnCompletion) + let tmp%34#0: bool = (! tmp%33#0) + (assert tmp%34#0) // OnCompletion is NoOp + let tmp%35#0: bool = (txn ApplicationID) + (assert tmp%35#0) // is not creating + let tmp%36#0: bytes = (txna ApplicationArgs 1) + let tmp%37#0: uint64 = (btoi tmp%36#0) + let tmp%38#0: uint64 = ((txnas Assets) tmp%37#0) + let tmp%39#0: bytes = (txna ApplicationArgs 2) + let tmp%40#0: uint64 = (btoi tmp%39#0) + let tmp%41#0: bytes = ((txnas Accounts) tmp%40#0) + let tmp%42#0: bytes = (txna ApplicationArgs 3) + let tmp%43#0: uint64 = (btoi tmp%42#0) + let tmp%44#0: uint64 = ((txnas Applications) tmp%43#0) + test_cases.typed_abi_call.logger.Logger.log_asset_account_app(tmp%38#0, tmp%41#0, tmp%44#0) + return 1u + block@10: // echo_native_string_route_L53 + let tmp%45#0: uint64 = (txn OnCompletion) + let tmp%46#0: bool = (! tmp%45#0) + (assert tmp%46#0) // OnCompletion is NoOp + let tmp%47#0: bool = (txn ApplicationID) + (assert tmp%47#0) // is not creating + let tmp%48#0: bytes = (txna ApplicationArgs 1) + let tmp%49#0: bytes = ((extract 2 0) tmp%48#0) + let tmp%50#0: bytes = test_cases.typed_abi_call.logger.Logger.echo_native_string(tmp%49#0) + let length%0#0: uint64 = (len tmp%50#0) 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 tmp%45#0) - let tmp%46#0: bytes = (concat 0x151f7c75 encoded_value%0#0) - (log tmp%46#0) + let encoded_value%0#0: bytes = (concat length_uint16%0#0 tmp%50#0) + let tmp%51#0: bytes = (concat 0x151f7c75 encoded_value%0#0) + (log tmp%51#0) return 1u - block@10: // echo_native_bytes_route_L53 - let tmp%47#0: uint64 = (txn OnCompletion) - let tmp%48#0: bool = (! tmp%47#0) - (assert tmp%48#0) // OnCompletion is NoOp - let tmp%49#0: bool = (txn ApplicationID) - (assert tmp%49#0) // is not creating - let tmp%50#0: bytes = (txna ApplicationArgs 1) - let tmp%51#0: bytes = ((extract 2 0) tmp%50#0) - let tmp%52#0: bytes = test_cases.typed_abi_call.logger.Logger.echo_native_bytes(tmp%51#0) - let length%1#0: uint64 = (len tmp%52#0) + block@11: // echo_native_bytes_route_L57 + let tmp%52#0: uint64 = (txn OnCompletion) + let tmp%53#0: bool = (! tmp%52#0) + (assert tmp%53#0) // OnCompletion is NoOp + let tmp%54#0: bool = (txn ApplicationID) + (assert tmp%54#0) // is not creating + let tmp%55#0: bytes = (txna ApplicationArgs 1) + let tmp%56#0: bytes = ((extract 2 0) tmp%55#0) + let tmp%57#0: bytes = test_cases.typed_abi_call.logger.Logger.echo_native_bytes(tmp%56#0) + let length%1#0: uint64 = (len tmp%57#0) let as_bytes%1#0: bytes = (itob length%1#0) let length_uint16%1#0: bytes = ((extract 6 2) as_bytes%1#0) - let encoded_value%1#0: bytes = (concat length_uint16%1#0 tmp%52#0) - let tmp%53#0: bytes = (concat 0x151f7c75 encoded_value%1#0) - (log tmp%53#0) + let encoded_value%1#0: bytes = (concat length_uint16%1#0 tmp%57#0) + let tmp%58#0: bytes = (concat 0x151f7c75 encoded_value%1#0) + (log tmp%58#0) return 1u - block@11: // echo_native_uint64_route_L57 - let tmp%54#0: uint64 = (txn OnCompletion) - let tmp%55#0: bool = (! tmp%54#0) - (assert tmp%55#0) // OnCompletion is NoOp - let tmp%56#0: bool = (txn ApplicationID) - (assert tmp%56#0) // is not creating - let tmp%57#0: bytes = (txna ApplicationArgs 1) - let tmp%58#0: uint64 = (btoi tmp%57#0) - let tmp%59#0: uint64 = test_cases.typed_abi_call.logger.Logger.echo_native_uint64(tmp%58#0) - let val_as_bytes%0#0: bytes = (itob tmp%59#0) - let tmp%60#0: bytes = (concat 0x151f7c75 val_as_bytes%0#0) - (log tmp%60#0) + block@12: // echo_native_uint64_route_L61 + let tmp%59#0: uint64 = (txn OnCompletion) + let tmp%60#0: bool = (! tmp%59#0) + (assert tmp%60#0) // OnCompletion is NoOp + let tmp%61#0: bool = (txn ApplicationID) + (assert tmp%61#0) // is not creating + let tmp%62#0: bytes = (txna ApplicationArgs 1) + let tmp%63#0: uint64 = (btoi tmp%62#0) + let tmp%64#0: uint64 = test_cases.typed_abi_call.logger.Logger.echo_native_uint64(tmp%63#0) + let val_as_bytes%1#0: bytes = (itob tmp%64#0) + let tmp%65#0: bytes = (concat 0x151f7c75 val_as_bytes%1#0) + (log tmp%65#0) return 1u - block@12: // echo_native_biguint_route_L61 - let tmp%61#0: uint64 = (txn OnCompletion) - let tmp%62#0: bool = (! tmp%61#0) - (assert tmp%62#0) // OnCompletion is NoOp - let tmp%63#0: bool = (txn ApplicationID) - (assert tmp%63#0) // is not creating - let tmp%64#0: bytes = (txna ApplicationArgs 1) - let tmp%65#0: biguint = test_cases.typed_abi_call.logger.Logger.echo_native_biguint(tmp%64#0) - let len_%0#0: uint64 = (len tmp%65#0) + block@13: // echo_native_biguint_route_L65 + let tmp%66#0: uint64 = (txn OnCompletion) + let tmp%67#0: bool = (! tmp%66#0) + (assert tmp%67#0) // OnCompletion is NoOp + let tmp%68#0: bool = (txn ApplicationID) + (assert tmp%68#0) // is not creating + let tmp%69#0: bytes = (txna ApplicationArgs 1) + let tmp%70#0: biguint = test_cases.typed_abi_call.logger.Logger.echo_native_biguint(tmp%69#0) + let len_%0#0: uint64 = (len tmp%70#0) let no_overflow%0#0: bool = (<= len_%0#0 64u) (assert no_overflow%0#0) // overflow let b_zeros%0#0: bytes = (bzero 64u) - let tmp%66#0: bytes = (b| tmp%65#0 b_zeros%0#0) - let tmp%67#0: bytes = (concat 0x151f7c75 tmp%66#0) - (log tmp%67#0) + let tmp%71#0: bytes = (b| tmp%70#0 b_zeros%0#0) + let tmp%72#0: bytes = (concat 0x151f7c75 tmp%71#0) + (log tmp%72#0) return 1u - block@13: // echo_native_tuple_route_L65 - let tmp%68#0: uint64 = (txn OnCompletion) - let tmp%69#0: bool = (! tmp%68#0) - (assert tmp%69#0) // OnCompletion is NoOp - let tmp%70#0: bool = (txn ApplicationID) - (assert tmp%70#0) // is not creating - let tmp%71#0: bytes = (txna ApplicationArgs 1) - let tmp%72#0: bytes = ((extract 2 0) tmp%71#0) - let tmp%73#0: bytes = (txna ApplicationArgs 2) - let tmp%74#0: bytes = ((extract 2 0) tmp%73#0) - let tmp%75#0: bytes = (txna ApplicationArgs 3) - let tmp%76#0: uint64 = (btoi tmp%75#0) - let tmp%77#0: bytes = (txna ApplicationArgs 4) - let (awst_tmp%0#0: bytes, awst_tmp%1#0: bytes, awst_tmp%2#0: uint64, awst_tmp%3#0: biguint) = test_cases.typed_abi_call.logger.Logger.echo_native_tuple(tmp%72#0, tmp%74#0, tmp%76#0, tmp%77#0) + block@14: // echo_native_tuple_route_L69 + let tmp%73#0: uint64 = (txn OnCompletion) + let tmp%74#0: bool = (! tmp%73#0) + (assert tmp%74#0) // OnCompletion is NoOp + let tmp%75#0: bool = (txn ApplicationID) + (assert tmp%75#0) // is not creating + let tmp%76#0: bytes = (txna ApplicationArgs 1) + let tmp%77#0: bytes = ((extract 2 0) tmp%76#0) + let tmp%78#0: bytes = (txna ApplicationArgs 2) + let tmp%79#0: bytes = ((extract 2 0) tmp%78#0) + let tmp%80#0: bytes = (txna ApplicationArgs 3) + let tmp%81#0: uint64 = (btoi tmp%80#0) + let tmp%82#0: bytes = (txna ApplicationArgs 4) + let (awst_tmp%0#0: bytes, awst_tmp%1#0: bytes, awst_tmp%2#0: uint64, awst_tmp%3#0: biguint) = test_cases.typed_abi_call.logger.Logger.echo_native_tuple(tmp%77#0, tmp%79#0, tmp%81#0, tmp%82#0) let length%2#0: uint64 = (len awst_tmp%0#0) let as_bytes%2#0: bytes = (itob length%2#0) let length_uint16%2#0: bytes = ((extract 6 2) as_bytes%2#0) @@ -163,67 +174,67 @@ contract test_cases.typed_abi_call.logger.Logger: let as_bytes%3#0: bytes = (itob length%3#0) let length_uint16%3#0: bytes = ((extract 6 2) as_bytes%3#0) let encoded_value%3#0: bytes = (concat length_uint16%3#0 awst_tmp%1#0) - let val_as_bytes%1#0: bytes = (itob awst_tmp%2#0) + let val_as_bytes%2#0: bytes = (itob awst_tmp%2#0) let len_%1#0: uint64 = (len awst_tmp%3#0) let no_overflow%1#0: bool = (<= len_%1#0 64u) (assert no_overflow%1#0) // overflow let b_zeros%1#0: bytes = (bzero 64u) - let tmp%78#0: bytes = (b| awst_tmp%3#0 b_zeros%1#0) + let tmp%83#0: bytes = (b| awst_tmp%3#0 b_zeros%1#0) let data_length%0#0: uint64 = (len encoded_value%2#0) let current_tail_offset%1#0: uint64 = (+ 76u data_length%0#0) let as_bytes%5#0: bytes = (itob current_tail_offset%1#0) let offset_as_uint16%1#0: bytes = ((extract 6 2) as_bytes%5#0) let encoded_tuple_buffer%2#0: bytes = (concat 0x004c offset_as_uint16%1#0) - let encoded_tuple_buffer%3#0: bytes = (concat encoded_tuple_buffer%2#0 val_as_bytes%1#0) - let encoded_tuple_buffer%4#0: bytes = (concat encoded_tuple_buffer%3#0 tmp%78#0) + let encoded_tuple_buffer%3#0: bytes = (concat encoded_tuple_buffer%2#0 val_as_bytes%2#0) + let encoded_tuple_buffer%4#0: bytes = (concat encoded_tuple_buffer%3#0 tmp%83#0) let encoded_tuple_buffer%5#0: bytes = (concat encoded_tuple_buffer%4#0 encoded_value%2#0) let encoded_tuple_buffer%6#0: bytes = (concat encoded_tuple_buffer%5#0 encoded_value%3#0) - let tmp%79#0: bytes = (concat 0x151f7c75 encoded_tuple_buffer%6#0) - (log tmp%79#0) + let tmp%84#0: bytes = (concat 0x151f7c75 encoded_tuple_buffer%6#0) + (log tmp%84#0) return 1u - block@14: // return_args_after_14th_route_L71 - let tmp%80#0: uint64 = (txn OnCompletion) - let tmp%81#0: bool = (! tmp%80#0) - (assert tmp%81#0) // OnCompletion is NoOp - let tmp%82#0: bool = (txn ApplicationID) - (assert tmp%82#0) // is not creating - let tmp%83#0: bytes = (txna ApplicationArgs 1) - let tmp%84#0: bytes = (txna ApplicationArgs 2) - let tmp%85#0: bytes = (txna ApplicationArgs 3) - let tmp%86#0: bytes = (txna ApplicationArgs 4) - let tmp%87#0: bytes = (txna ApplicationArgs 5) - let tmp%88#0: bytes = (txna ApplicationArgs 6) - let tmp%89#0: bytes = (txna ApplicationArgs 7) - let tmp%90#0: bytes = (txna ApplicationArgs 8) - let tmp%91#0: bytes = (txna ApplicationArgs 9) - let tmp%92#0: bytes = (txna ApplicationArgs 10) - let tmp%93#0: bytes = (txna ApplicationArgs 11) - let tmp%94#0: bytes = (txna ApplicationArgs 12) - let tmp%95#0: bytes = (txna ApplicationArgs 13) - let tmp%96#0: bytes = (txna ApplicationArgs 14) - let tmp%97#0: bytes = (txna ApplicationArgs 15) - let tmp%98#0: bytes = ((extract 0 1) tmp%97#0) // on error: Index access is out of bounds - let tmp%99#0: bytes = (txna ApplicationArgs 15) - let tmp%100#0: bytes = ((extract 1 1) tmp%99#0) // on error: Index access is out of bounds - let tmp%101#0: bytes = (txna ApplicationArgs 15) - let tmp%102#0: bytes = ((extract 2 1) tmp%101#0) // on error: Index access is out of bounds - let tmp%103#0: bytes = (txna ApplicationArgs 15) - let tmp%104#0: bytes = ((extract 3 1) tmp%103#0) // on error: Index access is out of bounds - let tmp%105#0: bytes = (txna ApplicationArgs 15) - let tmp%106#0: bytes = ((extract 4 4) tmp%105#0) // on error: Index access is out of bounds - let tmp%107#0: bytes = (txna ApplicationArgs 15) - let tmp%108#0: bytes = ((extract 8 1) tmp%107#0) // on error: Index access is out of bounds - let tmp%109#0: bytes = test_cases.typed_abi_call.logger.Logger.return_args_after_14th(tmp%83#0, tmp%84#0, tmp%85#0, tmp%86#0, tmp%87#0, tmp%88#0, tmp%89#0, tmp%90#0, tmp%91#0, tmp%92#0, tmp%93#0, tmp%94#0, tmp%95#0, tmp%96#0, tmp%98#0, tmp%100#0, tmp%102#0, tmp%104#0, tmp%106#0, tmp%108#0) - let tmp%110#0: bytes = (concat 0x151f7c75 tmp%109#0) - (log tmp%110#0) + block@15: // return_args_after_14th_route_L75 + let tmp%85#0: uint64 = (txn OnCompletion) + let tmp%86#0: bool = (! tmp%85#0) + (assert tmp%86#0) // OnCompletion is NoOp + let tmp%87#0: bool = (txn ApplicationID) + (assert tmp%87#0) // is not creating + let tmp%88#0: bytes = (txna ApplicationArgs 1) + let tmp%89#0: bytes = (txna ApplicationArgs 2) + let tmp%90#0: bytes = (txna ApplicationArgs 3) + let tmp%91#0: bytes = (txna ApplicationArgs 4) + let tmp%92#0: bytes = (txna ApplicationArgs 5) + let tmp%93#0: bytes = (txna ApplicationArgs 6) + let tmp%94#0: bytes = (txna ApplicationArgs 7) + let tmp%95#0: bytes = (txna ApplicationArgs 8) + let tmp%96#0: bytes = (txna ApplicationArgs 9) + let tmp%97#0: bytes = (txna ApplicationArgs 10) + let tmp%98#0: bytes = (txna ApplicationArgs 11) + let tmp%99#0: bytes = (txna ApplicationArgs 12) + let tmp%100#0: bytes = (txna ApplicationArgs 13) + let tmp%101#0: bytes = (txna ApplicationArgs 14) + let tmp%102#0: bytes = (txna ApplicationArgs 15) + let tmp%103#0: bytes = ((extract 0 1) tmp%102#0) // on error: Index access is out of bounds + let tmp%104#0: bytes = (txna ApplicationArgs 15) + let tmp%105#0: bytes = ((extract 1 1) tmp%104#0) // on error: Index access is out of bounds + let tmp%106#0: bytes = (txna ApplicationArgs 15) + let tmp%107#0: bytes = ((extract 2 1) tmp%106#0) // on error: Index access is out of bounds + let tmp%108#0: bytes = (txna ApplicationArgs 15) + let tmp%109#0: bytes = ((extract 3 1) tmp%108#0) // on error: Index access is out of bounds + let tmp%110#0: bytes = (txna ApplicationArgs 15) + let tmp%111#0: bytes = ((extract 4 4) tmp%110#0) // on error: Index access is out of bounds + let tmp%112#0: bytes = (txna ApplicationArgs 15) + let tmp%113#0: bytes = ((extract 8 1) tmp%112#0) // on error: Index access is out of bounds + let tmp%114#0: bytes = test_cases.typed_abi_call.logger.Logger.return_args_after_14th(tmp%88#0, tmp%89#0, tmp%90#0, tmp%91#0, tmp%92#0, tmp%93#0, tmp%94#0, tmp%95#0, tmp%96#0, tmp%97#0, tmp%98#0, tmp%99#0, tmp%100#0, tmp%101#0, tmp%103#0, tmp%105#0, tmp%107#0, tmp%109#0, tmp%111#0, tmp%113#0) + let tmp%115#0: bytes = (concat 0x151f7c75 tmp%114#0) + (log tmp%115#0) return 1u - block@17: // bare_routing_L20 - let tmp%111#0: uint64 = (txn OnCompletion) - let not%tmp%111#0: bool = (! tmp%111#0) - (assert not%tmp%111#0) // reject transaction - let tmp%112#0: bool = (txn ApplicationID) - let tmp%113#0: bool = (! tmp%112#0) - (assert tmp%113#0) // is creating + block@18: // bare_routing_L20 + let tmp%116#0: uint64 = (txn OnCompletion) + let not%tmp%116#0: bool = (! tmp%116#0) + (assert not%tmp%116#0) // reject transaction + let tmp%117#0: bool = (txn ApplicationID) + let tmp%118#0: bool = (! tmp%117#0) + (assert tmp%118#0) // is creating return 1u subroutine test_cases.typed_abi_call.logger.Logger.echo(value: bytes) -> bytes: @@ -236,37 +247,41 @@ contract test_cases.typed_abi_call.logger.Logger: let concat_result%0#0: bytes = (concat len_16_bit%0#0 concatenated%0#0) return concat_result%0#0 - subroutine test_cases.typed_abi_call.logger.Logger.log_uint64(value: bytes) -> void: + subroutine test_cases.typed_abi_call.logger.Logger.no_args() -> uint64: block@0: // L25 + return 42u + + subroutine test_cases.typed_abi_call.logger.Logger.log_uint64(value: bytes) -> void: + block@0: // L29 (log value#0) return subroutine test_cases.typed_abi_call.logger.Logger.log_uint512(value: bytes) -> void: - block@0: // L29 + block@0: // L33 (log value#0) return subroutine test_cases.typed_abi_call.logger.Logger.log_string(value: bytes) -> void: - block@0: // L33 + block@0: // L37 let tmp%0#0: bytes = ((extract 2 0) value#0) (log tmp%0#0) return subroutine test_cases.typed_abi_call.logger.Logger.log_bool(value: bytes) -> void: - block@0: // L37 + block@0: // L41 let tmp%0#0: bool = (getbit value#0 0u) let tmp%1#0: bytes = (select 0x46616c7365 0x54727565 tmp%0#0) (log tmp%1#0) return subroutine test_cases.typed_abi_call.logger.Logger.log_bytes(value: bytes) -> void: - block@0: // L41 + block@0: // L45 let tmp%0#0: bytes = ((extract 2 0) value#0) (log tmp%0#0) return subroutine test_cases.typed_abi_call.logger.Logger.log_asset_account_app(asset: uint64, account: bytes, app: uint64) -> void: - block@0: // L45 + block@0: // L49 let (value%0#0: bytes, check%0#0: bool) = ((asset_params_get AssetName) asset#0) (assert check%0#0) // asset exists let tmp%1#0: bytes = (concat value%0#0 account#0) @@ -277,27 +292,27 @@ contract test_cases.typed_abi_call.logger.Logger: return subroutine test_cases.typed_abi_call.logger.Logger.echo_native_string(value: bytes) -> bytes: - block@0: // L49 + block@0: // L53 let tmp%0#0: bytes = (concat "echo: " value#0) return tmp%0#0 subroutine test_cases.typed_abi_call.logger.Logger.echo_native_bytes(value: bytes) -> bytes: - block@0: // L53 + block@0: // L57 let tmp%0#0: bytes = (concat 0x6563686f3a20 value#0) return tmp%0#0 subroutine test_cases.typed_abi_call.logger.Logger.echo_native_uint64(value: uint64) -> uint64: - block@0: // L57 + block@0: // L61 let tmp%0#0: uint64 = (+ value#0 1u) return tmp%0#0 subroutine test_cases.typed_abi_call.logger.Logger.echo_native_biguint(value: biguint) -> biguint: - block@0: // L61 + block@0: // L65 let tmp%0#0: biguint = (b+ value#0 1b) return tmp%0#0 subroutine test_cases.typed_abi_call.logger.Logger.echo_native_tuple(s: bytes, b: bytes, u: uint64, bu: biguint) -> : - block@0: // L65 + block@0: // L69 let tmp%0#0: bytes = (concat "echo: " s#0) let tmp%1#0: bytes = (concat 0x6563686f3a20 b#0) let tmp%2#0: uint64 = (+ u#0 1u) @@ -305,7 +320,7 @@ contract test_cases.typed_abi_call.logger.Logger: return tmp%0#0 tmp%1#0 tmp%2#0 tmp%3#0 subroutine test_cases.typed_abi_call.logger.Logger.return_args_after_14th(_a1: bytes, _a2: bytes, _a3: bytes, _a4: bytes, _a5: bytes, _a6: bytes, _a7: bytes, _a8: bytes, _a9: bytes, _a10: bytes, _a11: bytes, _a12: bytes, _a13: bytes, _a14: bytes, a15: bytes, a16: bytes, a17: bytes, a18: bytes, a19: bytes, a20: bytes) -> bytes: - block@0: // L71 + block@0: // L75 let encoded_tuple_buffer%2#0: bytes = (concat a15#0 a16#0) let encoded_tuple_buffer%3#0: bytes = (concat encoded_tuple_buffer%2#0 a17#0) let encoded_tuple_buffer%4#0: bytes = (concat encoded_tuple_buffer%3#0 a18#0) 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 079629116e..2746705725 100644 --- a/test_cases/typed_abi_call/out_unoptimized/Greeter.approval.teal +++ b/test_cases/typed_abi_call/out_unoptimized/Greeter.approval.teal @@ -4,7 +4,7 @@ test_cases.typed_abi_call.typed_c2c.Greeter.approval_program: // typed_abi_call/typed_c2c.py:17 // class Greeter(ARC4Contract): txn NumAppArgs - bz main_bare_routing@15 + bz main_bare_routing@16 txna ApplicationArgs 0 method "test_method_selector_kinds(application)void" method "test_method_overload(application)void" @@ -17,9 +17,10 @@ test_cases.typed_abi_call.typed_c2c.Greeter.approval_program: method "test_native_uint64(application)void" method "test_native_biguint(application)void" method "test_native_tuple(application)void" - uncover 11 - match main_test_method_selector_kinds_route@2 main_test_method_overload_route@3 main_test_arg_conversion_route@4 main_test_15plus_args_route@5 main_test_void_route@6 main_test_ref_types_route@7 main_test_native_string_route@8 main_test_native_bytes_route@9 main_test_native_uint64_route@10 main_test_native_biguint_route@11 main_test_native_tuple_route@12 - b main_switch_case_default@13 + method "test_no_args(application)void" + uncover 12 + match main_test_method_selector_kinds_route@2 main_test_method_overload_route@3 main_test_arg_conversion_route@4 main_test_15plus_args_route@5 main_test_void_route@6 main_test_ref_types_route@7 main_test_native_string_route@8 main_test_native_bytes_route@9 main_test_native_uint64_route@10 main_test_native_biguint_route@11 main_test_native_tuple_route@12 main_test_no_args_route@13 + b main_switch_case_default@14 main_test_method_selector_kinds_route@2: // typed_abi_call/typed_c2c.py:18 @@ -244,21 +245,41 @@ main_test_native_tuple_route@12: int 1 return -main_switch_case_default@13: +main_test_no_args_route@13: + // typed_abi_call/typed_c2c.py:215 + // @arc4.abimethod() + txn OnCompletion + int NoOp + == + assert // OnCompletion is NoOp + txn ApplicationID + assert // is not creating + // typed_abi_call/typed_c2c.py:17 + // class Greeter(ARC4Contract): + txna ApplicationArgs 1 + btoi + txnas Applications + // typed_abi_call/typed_c2c.py:215 + // @arc4.abimethod() + callsub test_no_args + int 1 + return + +main_switch_case_default@14: // typed_abi_call/typed_c2c.py:17 // class Greeter(ARC4Contract): err // reject transaction -main_bare_routing@15: +main_bare_routing@16: // typed_abi_call/typed_c2c.py:17 // class Greeter(ARC4Contract): txn OnCompletion int 0 uncover 1 - match main_create@16 - b main_reject_bare_on_completion@17 + match main_create@17 + b main_reject_bare_on_completion@18 -main_create@16: +main_create@17: // typed_abi_call/typed_c2c.py:17 // class Greeter(ARC4Contract): txn ApplicationID @@ -267,7 +288,7 @@ main_create@16: int 1 return -main_reject_bare_on_completion@17: +main_reject_bare_on_completion@18: // typed_abi_call/typed_c2c.py:17 // class Greeter(ARC4Contract): err // reject transaction @@ -2098,3 +2119,105 @@ test_native_tuple: == assert retsub + + +// test_cases.typed_abi_call.typed_c2c.Greeter.test_no_args(app: uint64) -> void: +test_no_args: + // typed_abi_call/typed_c2c.py:215-216 + // @arc4.abimethod() + // def test_no_args(self, app: Application) -> None: + proto 1 0 + // typed_abi_call/typed_c2c.py:217 + // result, _txn = arc4.abi_call(Logger.no_args, app_id=app) + itxn_begin + // typed_abi_call/typed_c2c.py:216 + // def test_no_args(self, app: Application) -> None: + frame_dig -1 + itxn_field ApplicationID + // typed_abi_call/typed_c2c.py:217 + // result, _txn = arc4.abi_call(Logger.no_args, app_id=app) + method "no_args()uint64" + itxn_field ApplicationArgs + int appl + itxn_field TypeEnum + int 0 + itxn_field Fee + itxn_submit + itxn LastLog + dup + extract 4 0 + cover 1 + extract 0 4 + byte 0x151f7c75 + == + assert // ARC4 prefix is valid + btoi + // typed_abi_call/typed_c2c.py:218 + // assert result == 42 + int 42 + == + assert + // typed_abi_call/typed_c2c.py:219 + // arc4_result, _txn = arc4.abi_call[arc4.UInt64]("no_args()uint64", app_id=app) + itxn_begin + // typed_abi_call/typed_c2c.py:216 + // def test_no_args(self, app: Application) -> None: + frame_dig -1 + itxn_field ApplicationID + // typed_abi_call/typed_c2c.py:219 + // arc4_result, _txn = arc4.abi_call[arc4.UInt64]("no_args()uint64", app_id=app) + method "no_args()uint64" + itxn_field ApplicationArgs + int appl + itxn_field TypeEnum + int 0 + itxn_field Fee + itxn_submit + itxn LastLog + dup + extract 4 0 + cover 1 + extract 0 4 + byte 0x151f7c75 + == + assert // ARC4 prefix is valid + // typed_abi_call/typed_c2c.py:220 + // assert arc4_result == 42 + byte 0x000000000000002a + b== + assert + // typed_abi_call/typed_c2c.py:222 + // arc4.abi_call(Logger.no_args, app_id=app) + itxn_begin + // typed_abi_call/typed_c2c.py:216 + // def test_no_args(self, app: Application) -> None: + frame_dig -1 + itxn_field ApplicationID + // typed_abi_call/typed_c2c.py:222 + // arc4.abi_call(Logger.no_args, app_id=app) + method "no_args()uint64" + itxn_field ApplicationArgs + int appl + itxn_field TypeEnum + int 0 + itxn_field Fee + itxn_submit + itxn LastLog + extract 0 4 + byte 0x151f7c75 + == + assert // ARC4 prefix is valid + // typed_abi_call/typed_c2c.py:223 + // assert arc4.UInt64.from_log(op.ITxn.last_log()) == 42 + itxn LastLog + dup + extract 4 0 + cover 1 + extract 0 4 + byte 0x151f7c75 + == + assert // ARC4 prefix is valid + byte 0x000000000000002a + b== + assert + retsub diff --git a/test_cases/typed_abi_call/out_unoptimized/Greeter.destructured.ir b/test_cases/typed_abi_call/out_unoptimized/Greeter.destructured.ir index 51d9ea99bd..d88e729107 100644 --- a/test_cases/typed_abi_call/out_unoptimized/Greeter.destructured.ir +++ b/test_cases/typed_abi_call/out_unoptimized/Greeter.destructured.ir @@ -3,10 +3,10 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: subroutine test_cases.typed_abi_call.typed_c2c.Greeter.approval_program() -> bool: block@0: // L17 let tmp%0#0: bool = (txn NumAppArgs) - goto tmp%0#0 ? block@1 : block@15 + goto tmp%0#0 ? block@1 : block@16 block@1: // abi_routing_L17 let tmp%1#0: bytes = (txna ApplicationArgs 0) - switch tmp%1#0 {method "test_method_selector_kinds(application)void" => block@2, method "test_method_overload(application)void" => block@3, method "test_arg_conversion(application)void" => block@4, method "test_15plus_args(application)void" => block@5, method "test_void(application)void" => block@6, method "test_ref_types(application,asset)void" => block@7, method "test_native_string(application)void" => block@8, method "test_native_bytes(application)void" => block@9, method "test_native_uint64(application)void" => block@10, method "test_native_biguint(application)void" => block@11, method "test_native_tuple(application)void" => block@12, * => block@13} + switch tmp%1#0 {method "test_method_selector_kinds(application)void" => block@2, method "test_method_overload(application)void" => block@3, method "test_arg_conversion(application)void" => block@4, method "test_15plus_args(application)void" => block@5, method "test_void(application)void" => block@6, method "test_ref_types(application,asset)void" => block@7, method "test_native_string(application)void" => block@8, method "test_native_bytes(application)void" => block@9, method "test_native_uint64(application)void" => block@10, method "test_native_biguint(application)void" => block@11, method "test_native_tuple(application)void" => block@12, method "test_no_args(application)void" => block@13, * => block@14} block@2: // test_method_selector_kinds_route_L18 let tmp%2#0: uint64 = (txn OnCompletion) let tmp%3#0: bool = (== tmp%2#0 NoOp) @@ -131,19 +131,30 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: let tmp%70#0: uint64 = ((txnas Applications) tmp%69#0) test_cases.typed_abi_call.typed_c2c.Greeter.test_native_tuple(tmp%70#0) return 1u - block@13: // switch_case_default_L17 - goto block@14 - block@14: // switch_case_next_L17 - fail // reject transaction - block@15: // bare_routing_L17 + block@13: // test_no_args_route_L215 let tmp%71#0: uint64 = (txn OnCompletion) - switch tmp%71#0 {0u => block@16, * => block@17} - block@16: // create_L17 - let tmp%72#0: bool = (txn ApplicationID) - let tmp%73#0: bool = (! tmp%72#0) - (assert tmp%73#0) // is creating + let tmp%72#0: bool = (== tmp%71#0 NoOp) + (assert tmp%72#0) // OnCompletion is NoOp + let tmp%73#0: bool = (txn ApplicationID) + (assert tmp%73#0) // is not creating + let tmp%74#0: bytes = (txna ApplicationArgs 1) + let tmp%75#0: uint64 = (btoi tmp%74#0) + let tmp%76#0: uint64 = ((txnas Applications) tmp%75#0) + test_cases.typed_abi_call.typed_c2c.Greeter.test_no_args(tmp%76#0) + return 1u + block@14: // switch_case_default_L17 + goto block@15 + block@15: // switch_case_next_L17 + fail // reject transaction + block@16: // bare_routing_L17 + let tmp%77#0: uint64 = (txn OnCompletion) + switch tmp%77#0 {0u => block@17, * => block@18} + block@17: // create_L17 + let tmp%78#0: bool = (txn ApplicationID) + let tmp%79#0: bool = (! tmp%78#0) + (assert tmp%79#0) // is creating return 1u - block@17: // reject_bare_on_completion_L17 + block@18: // reject_bare_on_completion_L17 fail // reject transaction subroutine test_cases.typed_abi_call.typed_c2c.Greeter.test_method_selector_kinds(app: uint64) -> void: @@ -1046,6 +1057,66 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: let tmp%18#0: bool = (== result1#0 result3#0) (assert tmp%18#0) return + + subroutine test_cases.typed_abi_call.typed_c2c.Greeter.test_no_args(app: uint64) -> void: + block@0: // L215 + itxn_begin + let inner_txn_params%0%%param_ApplicationID_idx_0#0: uint64 = app#0 + ((itxn_field ApplicationID) inner_txn_params%0%%param_ApplicationID_idx_0#0) + ((itxn_field ApplicationArgs) method "no_args()uint64") + ((itxn_field TypeEnum) appl) + ((itxn_field Fee) 0u) + goto block@1 + block@1: // next_txn_L217 + itxn_submit + let awst_tmp%0#0: bytes = (itxn LastLog) + let tmp%0#0: bytes = ((extract 4 0) awst_tmp%0#0) + let tmp%1#0: bytes = ((extract 0 4) awst_tmp%0#0) + let tmp%2#0: bool = (== tmp%1#0 0x151f7c75) + (assert tmp%2#0) // ARC4 prefix is valid + let result#0: uint64 = (btoi tmp%0#0) + let tmp%3#0: bool = (== result#0 42u) + (assert tmp%3#0) + itxn_begin + let inner_txn_params%1%%param_ApplicationID_idx_0#0: uint64 = app#0 + ((itxn_field ApplicationID) inner_txn_params%1%%param_ApplicationID_idx_0#0) + ((itxn_field ApplicationArgs) method "no_args()uint64") + ((itxn_field TypeEnum) appl) + ((itxn_field Fee) 0u) + goto block@2 + block@2: // next_txn_L219 + itxn_submit + let awst_tmp%1#0: bytes = (itxn LastLog) + let tmp%4#0: bytes = ((extract 4 0) awst_tmp%1#0) + let tmp%5#0: bytes = ((extract 0 4) awst_tmp%1#0) + let tmp%6#0: bool = (== tmp%5#0 0x151f7c75) + (assert tmp%6#0) // ARC4 prefix is valid + let arc4_result#0: bytes = tmp%4#0 + let reinterpret_biguint%0#0: biguint = arc4_result#0 + let tmp%7#0: bool = (b== reinterpret_biguint%0#0 0x000000000000002a) + (assert tmp%7#0) + itxn_begin + let inner_txn_params%2%%param_ApplicationID_idx_0#0: uint64 = app#0 + ((itxn_field ApplicationID) inner_txn_params%2%%param_ApplicationID_idx_0#0) + ((itxn_field ApplicationArgs) method "no_args()uint64") + ((itxn_field TypeEnum) appl) + ((itxn_field Fee) 0u) + goto block@3 + block@3: // next_txn_L222 + itxn_submit + let awst_tmp%2#0: bytes = (itxn LastLog) + let tmp%9#0: bytes = ((extract 0 4) awst_tmp%2#0) + let tmp%10#0: bool = (== tmp%9#0 0x151f7c75) + (assert tmp%10#0) // ARC4 prefix is valid + let awst_tmp%3#0: bytes = (itxn LastLog) + let tmp%12#0: bytes = ((extract 4 0) awst_tmp%3#0) + let tmp%13#0: bytes = ((extract 0 4) awst_tmp%3#0) + let tmp%14#0: bool = (== tmp%13#0 0x151f7c75) + (assert tmp%14#0) // ARC4 prefix is valid + let reinterpret_biguint%2#0: biguint = tmp%12#0 + let tmp%15#0: bool = (b== reinterpret_biguint%2#0 0x000000000000002a) + (assert tmp%15#0) + return program clear-state: subroutine test_cases.typed_abi_call.typed_c2c.Greeter.clear_state_program() -> bool: diff --git a/test_cases/typed_abi_call/out_unoptimized/Logger.approval.teal b/test_cases/typed_abi_call/out_unoptimized/Logger.approval.teal index ea5d666bcf..1268db3c31 100644 --- a/test_cases/typed_abi_call/out_unoptimized/Logger.approval.teal +++ b/test_cases/typed_abi_call/out_unoptimized/Logger.approval.teal @@ -4,9 +4,10 @@ test_cases.typed_abi_call.logger.Logger.approval_program: // typed_abi_call/logger.py:20 // class Logger(ARC4Contract): txn NumAppArgs - bz main_bare_routing@17 + bz main_bare_routing@18 txna ApplicationArgs 0 method "echo(string)string" + method "no_args()uint64" method "log(uint64)void" method "log(uint512)void" method "log(string)void" @@ -19,9 +20,9 @@ test_cases.typed_abi_call.logger.Logger.approval_program: method "echo_native_biguint(uint512)uint512" method "echo_native_tuple(string,byte[],uint64,uint512)(string,byte[],uint64,uint512)" method "return_args_after_14th(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint8,uint8,uint8,uint8,(uint8,uint8,uint8,uint8),uint8)byte[]" - uncover 13 - match main_echo_route@2 main_log_route@3 main_log_route@4 main_log_route@5 main_log_route@6 main_log_route@7 main_log_route@8 main_echo_native_string_route@9 main_echo_native_bytes_route@10 main_echo_native_uint64_route@11 main_echo_native_biguint_route@12 main_echo_native_tuple_route@13 main_return_args_after_14th_route@14 - b main_switch_case_default@15 + uncover 14 + match main_echo_route@2 main_no_args_route@3 main_log_route@4 main_log_route@5 main_log_route@6 main_log_route@7 main_log_route@8 main_log_route@9 main_echo_native_string_route@10 main_echo_native_bytes_route@11 main_echo_native_uint64_route@12 main_echo_native_biguint_route@13 main_echo_native_tuple_route@14 main_return_args_after_14th_route@15 + b main_switch_case_default@16 main_echo_route@2: // typed_abi_call/logger.py:21 @@ -45,21 +46,21 @@ main_echo_route@2: int 1 return -main_log_route@3: +main_no_args_route@3: // typed_abi_call/logger.py:25 - // @arc4.abimethod(name=LOG_METHOD_NAME) + // @arc4.abimethod txn OnCompletion int NoOp == assert // OnCompletion is NoOp txn ApplicationID assert // is not creating - // typed_abi_call/logger.py:20 - // class Logger(ARC4Contract): - txna ApplicationArgs 1 - // typed_abi_call/logger.py:25 - // @arc4.abimethod(name=LOG_METHOD_NAME) - callsub log_uint64 + callsub no_args + itob + byte 0x151f7c75 + uncover 1 + concat + log int 1 return @@ -77,7 +78,7 @@ main_log_route@4: txna ApplicationArgs 1 // typed_abi_call/logger.py:29 // @arc4.abimethod(name=LOG_METHOD_NAME) - callsub log_uint512 + callsub log_uint64 int 1 return @@ -95,7 +96,7 @@ main_log_route@5: txna ApplicationArgs 1 // typed_abi_call/logger.py:33 // @arc4.abimethod(name=LOG_METHOD_NAME) - callsub log_string + callsub log_uint512 int 1 return @@ -113,7 +114,7 @@ main_log_route@6: txna ApplicationArgs 1 // typed_abi_call/logger.py:37 // @arc4.abimethod(name=LOG_METHOD_NAME) - callsub log_bool + callsub log_string int 1 return @@ -131,7 +132,7 @@ main_log_route@7: txna ApplicationArgs 1 // typed_abi_call/logger.py:41 // @arc4.abimethod(name=LOG_METHOD_NAME) - callsub log_bytes + callsub log_bool int 1 return @@ -147,6 +148,24 @@ main_log_route@8: // typed_abi_call/logger.py:20 // class Logger(ARC4Contract): txna ApplicationArgs 1 + // typed_abi_call/logger.py:45 + // @arc4.abimethod(name=LOG_METHOD_NAME) + callsub log_bytes + int 1 + return + +main_log_route@9: + // typed_abi_call/logger.py:49 + // @arc4.abimethod(name=LOG_METHOD_NAME) + txn OnCompletion + int NoOp + == + assert // OnCompletion is NoOp + txn ApplicationID + assert // is not creating + // typed_abi_call/logger.py:20 + // class Logger(ARC4Contract): + txna ApplicationArgs 1 btoi txnas Assets txna ApplicationArgs 2 @@ -155,7 +174,7 @@ main_log_route@8: txna ApplicationArgs 3 btoi txnas Applications - // typed_abi_call/logger.py:45 + // typed_abi_call/logger.py:49 // @arc4.abimethod(name=LOG_METHOD_NAME) uncover 2 uncover 2 @@ -164,8 +183,8 @@ main_log_route@8: int 1 return -main_echo_native_string_route@9: - // typed_abi_call/logger.py:49 +main_echo_native_string_route@10: + // typed_abi_call/logger.py:53 // @arc4.abimethod txn OnCompletion int NoOp @@ -177,7 +196,7 @@ main_echo_native_string_route@9: // class Logger(ARC4Contract): txna ApplicationArgs 1 extract 2 0 - // typed_abi_call/logger.py:49 + // typed_abi_call/logger.py:53 // @arc4.abimethod callsub echo_native_string dup @@ -193,8 +212,8 @@ main_echo_native_string_route@9: int 1 return -main_echo_native_bytes_route@10: - // typed_abi_call/logger.py:53 +main_echo_native_bytes_route@11: + // typed_abi_call/logger.py:57 // @arc4.abimethod txn OnCompletion int NoOp @@ -206,7 +225,7 @@ main_echo_native_bytes_route@10: // class Logger(ARC4Contract): txna ApplicationArgs 1 extract 2 0 - // typed_abi_call/logger.py:53 + // typed_abi_call/logger.py:57 // @arc4.abimethod callsub echo_native_bytes dup @@ -222,8 +241,8 @@ main_echo_native_bytes_route@10: int 1 return -main_echo_native_uint64_route@11: - // typed_abi_call/logger.py:57 +main_echo_native_uint64_route@12: + // typed_abi_call/logger.py:61 // @arc4.abimethod txn OnCompletion int NoOp @@ -235,7 +254,7 @@ main_echo_native_uint64_route@11: // class Logger(ARC4Contract): txna ApplicationArgs 1 btoi - // typed_abi_call/logger.py:57 + // typed_abi_call/logger.py:61 // @arc4.abimethod callsub echo_native_uint64 itob @@ -246,8 +265,8 @@ main_echo_native_uint64_route@11: int 1 return -main_echo_native_biguint_route@12: - // typed_abi_call/logger.py:61 +main_echo_native_biguint_route@13: + // typed_abi_call/logger.py:65 // @arc4.abimethod txn OnCompletion int NoOp @@ -258,7 +277,7 @@ main_echo_native_biguint_route@12: // typed_abi_call/logger.py:20 // class Logger(ARC4Contract): txna ApplicationArgs 1 - // typed_abi_call/logger.py:61 + // typed_abi_call/logger.py:65 // @arc4.abimethod callsub echo_native_biguint dup @@ -276,8 +295,8 @@ main_echo_native_biguint_route@12: int 1 return -main_echo_native_tuple_route@13: - // typed_abi_call/logger.py:65 +main_echo_native_tuple_route@14: + // typed_abi_call/logger.py:69 // @arc4.abimethod txn OnCompletion int NoOp @@ -294,7 +313,7 @@ main_echo_native_tuple_route@13: txna ApplicationArgs 3 btoi txna ApplicationArgs 4 - // typed_abi_call/logger.py:65 + // typed_abi_call/logger.py:69 // @arc4.abimethod uncover 3 uncover 3 @@ -357,8 +376,8 @@ main_echo_native_tuple_route@13: int 1 return -main_return_args_after_14th_route@14: - // typed_abi_call/logger.py:71 +main_return_args_after_14th_route@15: + // typed_abi_call/logger.py:75 // @arc4.abimethod txn OnCompletion int NoOp @@ -406,7 +425,7 @@ main_return_args_after_14th_route@14: int 8 int 1 extract3 // on error: Index access is out of bounds - // typed_abi_call/logger.py:71 + // typed_abi_call/logger.py:75 // @arc4.abimethod uncover 19 uncover 19 @@ -436,21 +455,21 @@ main_return_args_after_14th_route@14: int 1 return -main_switch_case_default@15: +main_switch_case_default@16: // typed_abi_call/logger.py:20 // class Logger(ARC4Contract): err // reject transaction -main_bare_routing@17: +main_bare_routing@18: // typed_abi_call/logger.py:20 // class Logger(ARC4Contract): txn OnCompletion int 0 uncover 1 - match main_create@18 - b main_reject_bare_on_completion@19 + match main_create@19 + b main_reject_bare_on_completion@20 -main_create@18: +main_create@19: // typed_abi_call/logger.py:20 // class Logger(ARC4Contract): txn ApplicationID @@ -459,7 +478,7 @@ main_create@18: int 1 return -main_reject_bare_on_completion@19: +main_reject_bare_on_completion@20: // typed_abi_call/logger.py:20 // class Logger(ARC4Contract): err // reject transaction @@ -492,13 +511,25 @@ echo: retsub +// test_cases.typed_abi_call.logger.Logger.no_args() -> uint64: +no_args: + // typed_abi_call/logger.py:25-26 + // @arc4.abimethod + // def no_args(self) -> UInt64: + proto 0 1 + // typed_abi_call/logger.py:27 + // return UInt64(42) + int 42 + retsub + + // test_cases.typed_abi_call.logger.Logger.log_uint64(value: bytes) -> void: log_uint64: - // typed_abi_call/logger.py:25-26 + // typed_abi_call/logger.py:29-30 // @arc4.abimethod(name=LOG_METHOD_NAME) // def log_uint64(self, value: arc4.UInt64) -> None: proto 1 0 - // typed_abi_call/logger.py:27 + // typed_abi_call/logger.py:31 // log(value) frame_dig -1 log @@ -507,11 +538,11 @@ log_uint64: // test_cases.typed_abi_call.logger.Logger.log_uint512(value: bytes) -> void: log_uint512: - // typed_abi_call/logger.py:29-30 + // typed_abi_call/logger.py:33-34 // @arc4.abimethod(name=LOG_METHOD_NAME) // def log_uint512(self, value: arc4.UInt512) -> None: proto 1 0 - // typed_abi_call/logger.py:31 + // typed_abi_call/logger.py:35 // log(value) frame_dig -1 log @@ -520,11 +551,11 @@ log_uint512: // test_cases.typed_abi_call.logger.Logger.log_string(value: bytes) -> void: log_string: - // typed_abi_call/logger.py:33-34 + // typed_abi_call/logger.py:37-38 // @arc4.abimethod(name=LOG_METHOD_NAME) // def log_string(self, value: arc4.String) -> None: proto 1 0 - // typed_abi_call/logger.py:35 + // typed_abi_call/logger.py:39 // log(value.native) # decode to remove header frame_dig -1 extract 2 0 @@ -534,11 +565,11 @@ log_string: // test_cases.typed_abi_call.logger.Logger.log_bool(value: bytes) -> void: log_bool: - // typed_abi_call/logger.py:37-38 + // typed_abi_call/logger.py:41-42 // @arc4.abimethod(name=LOG_METHOD_NAME) // def log_bool(self, value: arc4.Bool) -> None: proto 1 0 - // typed_abi_call/logger.py:39 + // typed_abi_call/logger.py:43 // log(Bytes(b"True") if value.native else Bytes(b"False")) frame_dig -1 int 0 @@ -553,11 +584,11 @@ log_bool: // test_cases.typed_abi_call.logger.Logger.log_bytes(value: bytes) -> void: log_bytes: - // typed_abi_call/logger.py:41-42 + // typed_abi_call/logger.py:45-46 // @arc4.abimethod(name=LOG_METHOD_NAME) // def log_bytes(self, value: arc4.DynamicBytes) -> None: proto 1 0 - // typed_abi_call/logger.py:43 + // typed_abi_call/logger.py:47 // log(value.native) frame_dig -1 extract 2 0 @@ -567,11 +598,11 @@ log_bytes: // test_cases.typed_abi_call.logger.Logger.log_asset_account_app(asset: uint64, account: bytes, app: uint64) -> void: log_asset_account_app: - // typed_abi_call/logger.py:45-46 + // typed_abi_call/logger.py:49-50 // @arc4.abimethod(name=LOG_METHOD_NAME) // def log_asset_account_app(self, asset: Asset, account: Account, app: Application) -> None: proto 3 0 - // typed_abi_call/logger.py:47 + // typed_abi_call/logger.py:51 // log(asset.name, account.bytes, app.address) frame_dig -3 asset_params_get AssetName @@ -592,11 +623,11 @@ log_asset_account_app: // test_cases.typed_abi_call.logger.Logger.echo_native_string(value: bytes) -> bytes: echo_native_string: - // typed_abi_call/logger.py:49-50 + // typed_abi_call/logger.py:53-54 // @arc4.abimethod // def echo_native_string(self, value: String) -> String: proto 1 1 - // typed_abi_call/logger.py:51 + // typed_abi_call/logger.py:55 // return "echo: " + value byte "echo: " frame_dig -1 @@ -606,11 +637,11 @@ echo_native_string: // test_cases.typed_abi_call.logger.Logger.echo_native_bytes(value: bytes) -> bytes: echo_native_bytes: - // typed_abi_call/logger.py:53-54 + // typed_abi_call/logger.py:57-58 // @arc4.abimethod // def echo_native_bytes(self, value: Bytes) -> Bytes: proto 1 1 - // typed_abi_call/logger.py:55 + // typed_abi_call/logger.py:59 // return b"echo: " + value byte 0x6563686f3a20 frame_dig -1 @@ -620,11 +651,11 @@ echo_native_bytes: // test_cases.typed_abi_call.logger.Logger.echo_native_uint64(value: uint64) -> uint64: echo_native_uint64: - // typed_abi_call/logger.py:57-58 + // typed_abi_call/logger.py:61-62 // @arc4.abimethod // def echo_native_uint64(self, value: UInt64) -> UInt64: proto 1 1 - // typed_abi_call/logger.py:59 + // typed_abi_call/logger.py:63 // return value + 1 frame_dig -1 int 1 @@ -634,11 +665,11 @@ echo_native_uint64: // test_cases.typed_abi_call.logger.Logger.echo_native_biguint(value: bytes) -> bytes: echo_native_biguint: - // typed_abi_call/logger.py:61-62 + // typed_abi_call/logger.py:65-66 // @arc4.abimethod // def echo_native_biguint(self, value: BigUInt) -> BigUInt: proto 1 1 - // typed_abi_call/logger.py:63 + // typed_abi_call/logger.py:67 // return value + 1 frame_dig -1 byte 0x01 @@ -648,13 +679,13 @@ echo_native_biguint: // test_cases.typed_abi_call.logger.Logger.echo_native_tuple(s: bytes, b: bytes, u: uint64, bu: bytes) -> bytes, bytes, uint64, bytes: echo_native_tuple: - // typed_abi_call/logger.py:65-68 + // typed_abi_call/logger.py:69-72 // @arc4.abimethod // def echo_native_tuple( // self, s: String, b: Bytes, u: UInt64, bu: BigUInt // ) -> tuple[String, Bytes, UInt64, BigUInt]: proto 4 4 - // typed_abi_call/logger.py:69 + // typed_abi_call/logger.py:73 // return "echo: " + s, b"echo: " + b, u + 1, bu + 1 byte "echo: " frame_dig -4 @@ -677,7 +708,7 @@ echo_native_tuple: // test_cases.typed_abi_call.logger.Logger.return_args_after_14th(_a1: bytes, _a2: bytes, _a3: bytes, _a4: bytes, _a5: bytes, _a6: bytes, _a7: bytes, _a8: bytes, _a9: bytes, _a10: bytes, _a11: bytes, _a12: bytes, _a13: bytes, _a14: bytes, a15: bytes, a16: bytes, a17: bytes, a18: bytes, a19: bytes, a20: bytes) -> bytes: return_args_after_14th: - // typed_abi_call/logger.py:71-94 + // typed_abi_call/logger.py:75-98 // @arc4.abimethod // def return_args_after_14th( // self, @@ -703,7 +734,7 @@ return_args_after_14th: // a20: arc4.UInt8, // ) -> arc4.DynamicBytes: proto 20 1 - // typed_abi_call/logger.py:95 + // typed_abi_call/logger.py:99 // last_arg = arc4.Tuple((a15, a16, a17, a18, a19, a20)) byte 0x frame_dig -6 @@ -718,13 +749,13 @@ return_args_after_14th: concat frame_dig -1 concat - // typed_abi_call/logger.py:96 + // typed_abi_call/logger.py:100 // assert Txn.application_args(15) == last_arg.bytes txna ApplicationArgs 15 dig 1 == assert - // typed_abi_call/logger.py:97 + // typed_abi_call/logger.py:101 // return arc4.DynamicBytes(last_arg.bytes) dup len diff --git a/test_cases/typed_abi_call/out_unoptimized/Logger.destructured.ir b/test_cases/typed_abi_call/out_unoptimized/Logger.destructured.ir index 741701541b..76e81093f2 100644 --- a/test_cases/typed_abi_call/out_unoptimized/Logger.destructured.ir +++ b/test_cases/typed_abi_call/out_unoptimized/Logger.destructured.ir @@ -3,10 +3,10 @@ contract test_cases.typed_abi_call.logger.Logger: subroutine test_cases.typed_abi_call.logger.Logger.approval_program() -> bool: block@0: // L20 let tmp%0#0: bool = (txn NumAppArgs) - goto tmp%0#0 ? block@1 : block@17 + goto tmp%0#0 ? block@1 : block@18 block@1: // abi_routing_L20 let tmp%1#0: bytes = (txna ApplicationArgs 0) - switch tmp%1#0 {method "echo(string)string" => block@2, method "log(uint64)void" => block@3, method "log(uint512)void" => block@4, method "log(string)void" => block@5, method "log(bool)void" => block@6, method "log(byte[])void" => block@7, method "log(asset,account,application)void" => block@8, method "echo_native_string(string)string" => block@9, method "echo_native_bytes(byte[])byte[]" => block@10, method "echo_native_uint64(uint64)uint64" => block@11, method "echo_native_biguint(uint512)uint512" => block@12, method "echo_native_tuple(string,byte[],uint64,uint512)(string,byte[],uint64,uint512)" => block@13, method "return_args_after_14th(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint8,uint8,uint8,uint8,(uint8,uint8,uint8,uint8),uint8)byte[]" => block@14, * => block@15} + switch tmp%1#0 {method "echo(string)string" => block@2, method "no_args()uint64" => block@3, method "log(uint64)void" => block@4, method "log(uint512)void" => block@5, method "log(string)void" => block@6, method "log(bool)void" => block@7, method "log(byte[])void" => block@8, method "log(asset,account,application)void" => block@9, method "echo_native_string(string)string" => block@10, method "echo_native_bytes(byte[])byte[]" => block@11, method "echo_native_uint64(uint64)uint64" => block@12, method "echo_native_biguint(uint512)uint512" => block@13, method "echo_native_tuple(string,byte[],uint64,uint512)(string,byte[],uint64,uint512)" => block@14, method "return_args_after_14th(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint8,uint8,uint8,uint8,(uint8,uint8,uint8,uint8),uint8)byte[]" => block@15, * => block@16} block@2: // echo_route_L21 let tmp%2#0: uint64 = (txn OnCompletion) let tmp%3#0: bool = (== tmp%2#0 NoOp) @@ -18,143 +18,154 @@ contract test_cases.typed_abi_call.logger.Logger: let tmp%7#0: bytes = (concat 0x151f7c75 tmp%6#0) (log tmp%7#0) return 1u - block@3: // log_route_L25 + block@3: // no_args_route_L25 let tmp%8#0: uint64 = (txn OnCompletion) let tmp%9#0: bool = (== tmp%8#0 NoOp) (assert tmp%9#0) // OnCompletion is NoOp let tmp%10#0: bool = (txn ApplicationID) (assert tmp%10#0) // is not creating - let tmp%11#0: bytes = (txna ApplicationArgs 1) - test_cases.typed_abi_call.logger.Logger.log_uint64(tmp%11#0) + let tmp%11#0: uint64 = test_cases.typed_abi_call.logger.Logger.no_args() + let val_as_bytes%0#0: bytes = (itob tmp%11#0) + let tmp%12#0: bytes = (concat 0x151f7c75 val_as_bytes%0#0) + (log tmp%12#0) return 1u block@4: // log_route_L29 - let tmp%12#0: uint64 = (txn OnCompletion) - let tmp%13#0: bool = (== tmp%12#0 NoOp) - (assert tmp%13#0) // OnCompletion is NoOp - let tmp%14#0: bool = (txn ApplicationID) - (assert tmp%14#0) // is not creating - let tmp%15#0: bytes = (txna ApplicationArgs 1) - test_cases.typed_abi_call.logger.Logger.log_uint512(tmp%15#0) + let tmp%13#0: uint64 = (txn OnCompletion) + let tmp%14#0: bool = (== tmp%13#0 NoOp) + (assert tmp%14#0) // OnCompletion is NoOp + let tmp%15#0: bool = (txn ApplicationID) + (assert tmp%15#0) // is not creating + let tmp%16#0: bytes = (txna ApplicationArgs 1) + test_cases.typed_abi_call.logger.Logger.log_uint64(tmp%16#0) return 1u block@5: // log_route_L33 - let tmp%16#0: uint64 = (txn OnCompletion) - let tmp%17#0: bool = (== tmp%16#0 NoOp) - (assert tmp%17#0) // OnCompletion is NoOp - let tmp%18#0: bool = (txn ApplicationID) - (assert tmp%18#0) // is not creating - let tmp%19#0: bytes = (txna ApplicationArgs 1) - test_cases.typed_abi_call.logger.Logger.log_string(tmp%19#0) + let tmp%17#0: uint64 = (txn OnCompletion) + let tmp%18#0: bool = (== tmp%17#0 NoOp) + (assert tmp%18#0) // OnCompletion is NoOp + let tmp%19#0: bool = (txn ApplicationID) + (assert tmp%19#0) // is not creating + let tmp%20#0: bytes = (txna ApplicationArgs 1) + test_cases.typed_abi_call.logger.Logger.log_uint512(tmp%20#0) return 1u block@6: // log_route_L37 - let tmp%20#0: uint64 = (txn OnCompletion) - let tmp%21#0: bool = (== tmp%20#0 NoOp) - (assert tmp%21#0) // OnCompletion is NoOp - let tmp%22#0: bool = (txn ApplicationID) - (assert tmp%22#0) // is not creating - let tmp%23#0: bytes = (txna ApplicationArgs 1) - test_cases.typed_abi_call.logger.Logger.log_bool(tmp%23#0) + let tmp%21#0: uint64 = (txn OnCompletion) + let tmp%22#0: bool = (== tmp%21#0 NoOp) + (assert tmp%22#0) // OnCompletion is NoOp + let tmp%23#0: bool = (txn ApplicationID) + (assert tmp%23#0) // is not creating + let tmp%24#0: bytes = (txna ApplicationArgs 1) + test_cases.typed_abi_call.logger.Logger.log_string(tmp%24#0) return 1u block@7: // log_route_L41 - let tmp%24#0: uint64 = (txn OnCompletion) - let tmp%25#0: bool = (== tmp%24#0 NoOp) - (assert tmp%25#0) // OnCompletion is NoOp - let tmp%26#0: bool = (txn ApplicationID) - (assert tmp%26#0) // is not creating - let tmp%27#0: bytes = (txna ApplicationArgs 1) - test_cases.typed_abi_call.logger.Logger.log_bytes(tmp%27#0) + let tmp%25#0: uint64 = (txn OnCompletion) + let tmp%26#0: bool = (== tmp%25#0 NoOp) + (assert tmp%26#0) // OnCompletion is NoOp + let tmp%27#0: bool = (txn ApplicationID) + (assert tmp%27#0) // is not creating + let tmp%28#0: bytes = (txna ApplicationArgs 1) + test_cases.typed_abi_call.logger.Logger.log_bool(tmp%28#0) return 1u block@8: // log_route_L45 - let tmp%28#0: uint64 = (txn OnCompletion) - let tmp%29#0: bool = (== tmp%28#0 NoOp) - (assert tmp%29#0) // OnCompletion is NoOp - let tmp%30#0: bool = (txn ApplicationID) - (assert tmp%30#0) // is not creating - let tmp%31#0: bytes = (txna ApplicationArgs 1) - let tmp%32#0: uint64 = (btoi tmp%31#0) - let tmp%33#0: uint64 = ((txnas Assets) tmp%32#0) - let tmp%34#0: bytes = (txna ApplicationArgs 2) - let tmp%35#0: uint64 = (btoi tmp%34#0) - let tmp%36#0: bytes = ((txnas Accounts) tmp%35#0) - let tmp%37#0: bytes = (txna ApplicationArgs 3) - let tmp%38#0: uint64 = (btoi tmp%37#0) - let tmp%39#0: uint64 = ((txnas Applications) tmp%38#0) - test_cases.typed_abi_call.logger.Logger.log_asset_account_app(tmp%33#0, tmp%36#0, tmp%39#0) + let tmp%29#0: uint64 = (txn OnCompletion) + let tmp%30#0: bool = (== tmp%29#0 NoOp) + (assert tmp%30#0) // OnCompletion is NoOp + let tmp%31#0: bool = (txn ApplicationID) + (assert tmp%31#0) // is not creating + let tmp%32#0: bytes = (txna ApplicationArgs 1) + test_cases.typed_abi_call.logger.Logger.log_bytes(tmp%32#0) return 1u - block@9: // echo_native_string_route_L49 - let tmp%40#0: uint64 = (txn OnCompletion) - let tmp%41#0: bool = (== tmp%40#0 NoOp) - (assert tmp%41#0) // OnCompletion is NoOp - let tmp%42#0: bool = (txn ApplicationID) - (assert tmp%42#0) // is not creating - let tmp%43#0: bytes = (txna ApplicationArgs 1) - let tmp%44#0: bytes = ((extract 2 0) tmp%43#0) - let tmp%45#0: bytes = test_cases.typed_abi_call.logger.Logger.echo_native_string(tmp%44#0) - let length%0#0: uint64 = (len tmp%45#0) + block@9: // log_route_L49 + let tmp%33#0: uint64 = (txn OnCompletion) + let tmp%34#0: bool = (== tmp%33#0 NoOp) + (assert tmp%34#0) // OnCompletion is NoOp + let tmp%35#0: bool = (txn ApplicationID) + (assert tmp%35#0) // is not creating + let tmp%36#0: bytes = (txna ApplicationArgs 1) + let tmp%37#0: uint64 = (btoi tmp%36#0) + let tmp%38#0: uint64 = ((txnas Assets) tmp%37#0) + let tmp%39#0: bytes = (txna ApplicationArgs 2) + let tmp%40#0: uint64 = (btoi tmp%39#0) + let tmp%41#0: bytes = ((txnas Accounts) tmp%40#0) + let tmp%42#0: bytes = (txna ApplicationArgs 3) + let tmp%43#0: uint64 = (btoi tmp%42#0) + let tmp%44#0: uint64 = ((txnas Applications) tmp%43#0) + test_cases.typed_abi_call.logger.Logger.log_asset_account_app(tmp%38#0, tmp%41#0, tmp%44#0) + return 1u + block@10: // echo_native_string_route_L53 + let tmp%45#0: uint64 = (txn OnCompletion) + let tmp%46#0: bool = (== tmp%45#0 NoOp) + (assert tmp%46#0) // OnCompletion is NoOp + let tmp%47#0: bool = (txn ApplicationID) + (assert tmp%47#0) // is not creating + let tmp%48#0: bytes = (txna ApplicationArgs 1) + let tmp%49#0: bytes = ((extract 2 0) tmp%48#0) + let tmp%50#0: bytes = test_cases.typed_abi_call.logger.Logger.echo_native_string(tmp%49#0) + let length%0#0: uint64 = (len tmp%50#0) 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 tmp%45#0) - let tmp%46#0: bytes = (concat 0x151f7c75 encoded_value%0#0) - (log tmp%46#0) + let encoded_value%0#0: bytes = (concat length_uint16%0#0 tmp%50#0) + let tmp%51#0: bytes = (concat 0x151f7c75 encoded_value%0#0) + (log tmp%51#0) return 1u - block@10: // echo_native_bytes_route_L53 - let tmp%47#0: uint64 = (txn OnCompletion) - let tmp%48#0: bool = (== tmp%47#0 NoOp) - (assert tmp%48#0) // OnCompletion is NoOp - let tmp%49#0: bool = (txn ApplicationID) - (assert tmp%49#0) // is not creating - let tmp%50#0: bytes = (txna ApplicationArgs 1) - let tmp%51#0: bytes = ((extract 2 0) tmp%50#0) - let tmp%52#0: bytes = test_cases.typed_abi_call.logger.Logger.echo_native_bytes(tmp%51#0) - let length%1#0: uint64 = (len tmp%52#0) + block@11: // echo_native_bytes_route_L57 + let tmp%52#0: uint64 = (txn OnCompletion) + let tmp%53#0: bool = (== tmp%52#0 NoOp) + (assert tmp%53#0) // OnCompletion is NoOp + let tmp%54#0: bool = (txn ApplicationID) + (assert tmp%54#0) // is not creating + let tmp%55#0: bytes = (txna ApplicationArgs 1) + let tmp%56#0: bytes = ((extract 2 0) tmp%55#0) + let tmp%57#0: bytes = test_cases.typed_abi_call.logger.Logger.echo_native_bytes(tmp%56#0) + let length%1#0: uint64 = (len tmp%57#0) let as_bytes%1#0: bytes = (itob length%1#0) let length_uint16%1#0: bytes = ((extract 6 2) as_bytes%1#0) - let encoded_value%1#0: bytes = (concat length_uint16%1#0 tmp%52#0) - let tmp%53#0: bytes = (concat 0x151f7c75 encoded_value%1#0) - (log tmp%53#0) + let encoded_value%1#0: bytes = (concat length_uint16%1#0 tmp%57#0) + let tmp%58#0: bytes = (concat 0x151f7c75 encoded_value%1#0) + (log tmp%58#0) return 1u - block@11: // echo_native_uint64_route_L57 - let tmp%54#0: uint64 = (txn OnCompletion) - let tmp%55#0: bool = (== tmp%54#0 NoOp) - (assert tmp%55#0) // OnCompletion is NoOp - let tmp%56#0: bool = (txn ApplicationID) - (assert tmp%56#0) // is not creating - let tmp%57#0: bytes = (txna ApplicationArgs 1) - let tmp%58#0: uint64 = (btoi tmp%57#0) - let tmp%59#0: uint64 = test_cases.typed_abi_call.logger.Logger.echo_native_uint64(tmp%58#0) - let val_as_bytes%0#0: bytes = (itob tmp%59#0) - let tmp%60#0: bytes = (concat 0x151f7c75 val_as_bytes%0#0) - (log tmp%60#0) + block@12: // echo_native_uint64_route_L61 + let tmp%59#0: uint64 = (txn OnCompletion) + let tmp%60#0: bool = (== tmp%59#0 NoOp) + (assert tmp%60#0) // OnCompletion is NoOp + let tmp%61#0: bool = (txn ApplicationID) + (assert tmp%61#0) // is not creating + let tmp%62#0: bytes = (txna ApplicationArgs 1) + let tmp%63#0: uint64 = (btoi tmp%62#0) + let tmp%64#0: uint64 = test_cases.typed_abi_call.logger.Logger.echo_native_uint64(tmp%63#0) + let val_as_bytes%1#0: bytes = (itob tmp%64#0) + let tmp%65#0: bytes = (concat 0x151f7c75 val_as_bytes%1#0) + (log tmp%65#0) return 1u - block@12: // echo_native_biguint_route_L61 - let tmp%61#0: uint64 = (txn OnCompletion) - let tmp%62#0: bool = (== tmp%61#0 NoOp) - (assert tmp%62#0) // OnCompletion is NoOp - let tmp%63#0: bool = (txn ApplicationID) - (assert tmp%63#0) // is not creating - let tmp%64#0: bytes = (txna ApplicationArgs 1) - let tmp%65#0: biguint = test_cases.typed_abi_call.logger.Logger.echo_native_biguint(tmp%64#0) - let len_%0#0: uint64 = (len tmp%65#0) + block@13: // echo_native_biguint_route_L65 + let tmp%66#0: uint64 = (txn OnCompletion) + let tmp%67#0: bool = (== tmp%66#0 NoOp) + (assert tmp%67#0) // OnCompletion is NoOp + let tmp%68#0: bool = (txn ApplicationID) + (assert tmp%68#0) // is not creating + let tmp%69#0: bytes = (txna ApplicationArgs 1) + let tmp%70#0: biguint = test_cases.typed_abi_call.logger.Logger.echo_native_biguint(tmp%69#0) + let len_%0#0: uint64 = (len tmp%70#0) let no_overflow%0#0: bool = (<= len_%0#0 64u) (assert no_overflow%0#0) // overflow let b_zeros%0#0: bytes = (bzero 64u) - let tmp%66#0: bytes = (b| tmp%65#0 b_zeros%0#0) - let tmp%67#0: bytes = (concat 0x151f7c75 tmp%66#0) - (log tmp%67#0) + let tmp%71#0: bytes = (b| tmp%70#0 b_zeros%0#0) + let tmp%72#0: bytes = (concat 0x151f7c75 tmp%71#0) + (log tmp%72#0) return 1u - block@13: // echo_native_tuple_route_L65 - let tmp%68#0: uint64 = (txn OnCompletion) - let tmp%69#0: bool = (== tmp%68#0 NoOp) - (assert tmp%69#0) // OnCompletion is NoOp - let tmp%70#0: bool = (txn ApplicationID) - (assert tmp%70#0) // is not creating - let tmp%71#0: bytes = (txna ApplicationArgs 1) - let tmp%72#0: bytes = ((extract 2 0) tmp%71#0) - let tmp%73#0: bytes = (txna ApplicationArgs 2) - let tmp%74#0: bytes = ((extract 2 0) tmp%73#0) - let tmp%75#0: bytes = (txna ApplicationArgs 3) - let tmp%76#0: uint64 = (btoi tmp%75#0) - let tmp%77#0: bytes = (txna ApplicationArgs 4) - let (awst_tmp%0#0: bytes, awst_tmp%1#0: bytes, awst_tmp%2#0: uint64, awst_tmp%3#0: biguint) = test_cases.typed_abi_call.logger.Logger.echo_native_tuple(tmp%72#0, tmp%74#0, tmp%76#0, tmp%77#0) + block@14: // echo_native_tuple_route_L69 + let tmp%73#0: uint64 = (txn OnCompletion) + let tmp%74#0: bool = (== tmp%73#0 NoOp) + (assert tmp%74#0) // OnCompletion is NoOp + let tmp%75#0: bool = (txn ApplicationID) + (assert tmp%75#0) // is not creating + let tmp%76#0: bytes = (txna ApplicationArgs 1) + let tmp%77#0: bytes = ((extract 2 0) tmp%76#0) + let tmp%78#0: bytes = (txna ApplicationArgs 2) + let tmp%79#0: bytes = ((extract 2 0) tmp%78#0) + let tmp%80#0: bytes = (txna ApplicationArgs 3) + let tmp%81#0: uint64 = (btoi tmp%80#0) + let tmp%82#0: bytes = (txna ApplicationArgs 4) + let (awst_tmp%0#0: bytes, awst_tmp%1#0: bytes, awst_tmp%2#0: uint64, awst_tmp%3#0: biguint) = test_cases.typed_abi_call.logger.Logger.echo_native_tuple(tmp%77#0, tmp%79#0, tmp%81#0, tmp%82#0) let length%2#0: uint64 = (len awst_tmp%0#0) let as_bytes%2#0: bytes = (itob length%2#0) let length_uint16%2#0: bytes = ((extract 6 2) as_bytes%2#0) @@ -163,12 +174,12 @@ contract test_cases.typed_abi_call.logger.Logger: let as_bytes%3#0: bytes = (itob length%3#0) let length_uint16%3#0: bytes = ((extract 6 2) as_bytes%3#0) let encoded_value%3#0: bytes = (concat length_uint16%3#0 awst_tmp%1#0) - let val_as_bytes%1#0: bytes = (itob awst_tmp%2#0) + let val_as_bytes%2#0: bytes = (itob awst_tmp%2#0) let len_%1#0: uint64 = (len awst_tmp%3#0) let no_overflow%1#0: bool = (<= len_%1#0 64u) (assert no_overflow%1#0) // overflow let b_zeros%1#0: bytes = (bzero 64u) - let tmp%78#0: bytes = (b| awst_tmp%3#0 b_zeros%1#0) + let tmp%83#0: bytes = (b| awst_tmp%3#0 b_zeros%1#0) let as_bytes%4#0: bytes = (itob 76u) let offset_as_uint16%0#0: bytes = ((extract 6 2) as_bytes%4#0) let encoded_tuple_buffer%1#0: bytes = (concat 0x offset_as_uint16%0#0) @@ -177,62 +188,62 @@ contract test_cases.typed_abi_call.logger.Logger: let as_bytes%5#0: bytes = (itob current_tail_offset%1#0) let offset_as_uint16%1#0: bytes = ((extract 6 2) as_bytes%5#0) let encoded_tuple_buffer%2#0: bytes = (concat encoded_tuple_buffer%1#0 offset_as_uint16%1#0) - let encoded_tuple_buffer%3#0: bytes = (concat encoded_tuple_buffer%2#0 val_as_bytes%1#0) - let encoded_tuple_buffer%4#0: bytes = (concat encoded_tuple_buffer%3#0 tmp%78#0) + let encoded_tuple_buffer%3#0: bytes = (concat encoded_tuple_buffer%2#0 val_as_bytes%2#0) + let encoded_tuple_buffer%4#0: bytes = (concat encoded_tuple_buffer%3#0 tmp%83#0) let encoded_tuple_buffer%5#0: bytes = (concat encoded_tuple_buffer%4#0 encoded_value%2#0) let encoded_tuple_buffer%6#0: bytes = (concat encoded_tuple_buffer%5#0 encoded_value%3#0) - let tmp%79#0: bytes = (concat 0x151f7c75 encoded_tuple_buffer%6#0) - (log tmp%79#0) + let tmp%84#0: bytes = (concat 0x151f7c75 encoded_tuple_buffer%6#0) + (log tmp%84#0) return 1u - block@14: // return_args_after_14th_route_L71 - let tmp%80#0: uint64 = (txn OnCompletion) - let tmp%81#0: bool = (== tmp%80#0 NoOp) - (assert tmp%81#0) // OnCompletion is NoOp - let tmp%82#0: bool = (txn ApplicationID) - (assert tmp%82#0) // is not creating - let tmp%83#0: bytes = (txna ApplicationArgs 1) - let tmp%84#0: bytes = (txna ApplicationArgs 2) - let tmp%85#0: bytes = (txna ApplicationArgs 3) - let tmp%86#0: bytes = (txna ApplicationArgs 4) - let tmp%87#0: bytes = (txna ApplicationArgs 5) - let tmp%88#0: bytes = (txna ApplicationArgs 6) - let tmp%89#0: bytes = (txna ApplicationArgs 7) - let tmp%90#0: bytes = (txna ApplicationArgs 8) - let tmp%91#0: bytes = (txna ApplicationArgs 9) - let tmp%92#0: bytes = (txna ApplicationArgs 10) - let tmp%93#0: bytes = (txna ApplicationArgs 11) - let tmp%94#0: bytes = (txna ApplicationArgs 12) - let tmp%95#0: bytes = (txna ApplicationArgs 13) - let tmp%96#0: bytes = (txna ApplicationArgs 14) - let tmp%97#0: bytes = (txna ApplicationArgs 15) - let tmp%98#0: bytes = (extract3 tmp%97#0 0u 1u) // on error: Index access is out of bounds - let tmp%99#0: bytes = (txna ApplicationArgs 15) - let tmp%100#0: bytes = (extract3 tmp%99#0 1u 1u) // on error: Index access is out of bounds - let tmp%101#0: bytes = (txna ApplicationArgs 15) - let tmp%102#0: bytes = (extract3 tmp%101#0 2u 1u) // on error: Index access is out of bounds - let tmp%103#0: bytes = (txna ApplicationArgs 15) - let tmp%104#0: bytes = (extract3 tmp%103#0 3u 1u) // on error: Index access is out of bounds - let tmp%105#0: bytes = (txna ApplicationArgs 15) - let tmp%106#0: bytes = (extract3 tmp%105#0 4u 4u) // on error: Index access is out of bounds - let tmp%107#0: bytes = (txna ApplicationArgs 15) - let tmp%108#0: bytes = (extract3 tmp%107#0 8u 1u) // on error: Index access is out of bounds - let tmp%109#0: bytes = test_cases.typed_abi_call.logger.Logger.return_args_after_14th(tmp%83#0, tmp%84#0, tmp%85#0, tmp%86#0, tmp%87#0, tmp%88#0, tmp%89#0, tmp%90#0, tmp%91#0, tmp%92#0, tmp%93#0, tmp%94#0, tmp%95#0, tmp%96#0, tmp%98#0, tmp%100#0, tmp%102#0, tmp%104#0, tmp%106#0, tmp%108#0) - let tmp%110#0: bytes = (concat 0x151f7c75 tmp%109#0) - (log tmp%110#0) + block@15: // return_args_after_14th_route_L75 + let tmp%85#0: uint64 = (txn OnCompletion) + let tmp%86#0: bool = (== tmp%85#0 NoOp) + (assert tmp%86#0) // OnCompletion is NoOp + let tmp%87#0: bool = (txn ApplicationID) + (assert tmp%87#0) // is not creating + let tmp%88#0: bytes = (txna ApplicationArgs 1) + let tmp%89#0: bytes = (txna ApplicationArgs 2) + let tmp%90#0: bytes = (txna ApplicationArgs 3) + let tmp%91#0: bytes = (txna ApplicationArgs 4) + let tmp%92#0: bytes = (txna ApplicationArgs 5) + let tmp%93#0: bytes = (txna ApplicationArgs 6) + let tmp%94#0: bytes = (txna ApplicationArgs 7) + let tmp%95#0: bytes = (txna ApplicationArgs 8) + let tmp%96#0: bytes = (txna ApplicationArgs 9) + let tmp%97#0: bytes = (txna ApplicationArgs 10) + let tmp%98#0: bytes = (txna ApplicationArgs 11) + let tmp%99#0: bytes = (txna ApplicationArgs 12) + let tmp%100#0: bytes = (txna ApplicationArgs 13) + let tmp%101#0: bytes = (txna ApplicationArgs 14) + let tmp%102#0: bytes = (txna ApplicationArgs 15) + let tmp%103#0: bytes = (extract3 tmp%102#0 0u 1u) // on error: Index access is out of bounds + let tmp%104#0: bytes = (txna ApplicationArgs 15) + let tmp%105#0: bytes = (extract3 tmp%104#0 1u 1u) // on error: Index access is out of bounds + let tmp%106#0: bytes = (txna ApplicationArgs 15) + let tmp%107#0: bytes = (extract3 tmp%106#0 2u 1u) // on error: Index access is out of bounds + let tmp%108#0: bytes = (txna ApplicationArgs 15) + let tmp%109#0: bytes = (extract3 tmp%108#0 3u 1u) // on error: Index access is out of bounds + let tmp%110#0: bytes = (txna ApplicationArgs 15) + let tmp%111#0: bytes = (extract3 tmp%110#0 4u 4u) // on error: Index access is out of bounds + let tmp%112#0: bytes = (txna ApplicationArgs 15) + let tmp%113#0: bytes = (extract3 tmp%112#0 8u 1u) // on error: Index access is out of bounds + let tmp%114#0: bytes = test_cases.typed_abi_call.logger.Logger.return_args_after_14th(tmp%88#0, tmp%89#0, tmp%90#0, tmp%91#0, tmp%92#0, tmp%93#0, tmp%94#0, tmp%95#0, tmp%96#0, tmp%97#0, tmp%98#0, tmp%99#0, tmp%100#0, tmp%101#0, tmp%103#0, tmp%105#0, tmp%107#0, tmp%109#0, tmp%111#0, tmp%113#0) + let tmp%115#0: bytes = (concat 0x151f7c75 tmp%114#0) + (log tmp%115#0) return 1u - block@15: // switch_case_default_L20 - goto block@16 - block@16: // switch_case_next_L20 + block@16: // switch_case_default_L20 + goto block@17 + block@17: // switch_case_next_L20 fail // reject transaction - block@17: // bare_routing_L20 - let tmp%111#0: uint64 = (txn OnCompletion) - switch tmp%111#0 {0u => block@18, * => block@19} - block@18: // create_L20 - let tmp%112#0: bool = (txn ApplicationID) - let tmp%113#0: bool = (! tmp%112#0) - (assert tmp%113#0) // is creating + block@18: // bare_routing_L20 + let tmp%116#0: uint64 = (txn OnCompletion) + switch tmp%116#0 {0u => block@19, * => block@20} + block@19: // create_L20 + let tmp%117#0: bool = (txn ApplicationID) + let tmp%118#0: bool = (! tmp%117#0) + (assert tmp%118#0) // is creating return 1u - block@19: // reject_bare_on_completion_L20 + block@20: // reject_bare_on_completion_L20 fail // reject transaction subroutine test_cases.typed_abi_call.logger.Logger.echo(value: bytes) -> bytes: @@ -250,37 +261,41 @@ contract test_cases.typed_abi_call.logger.Logger: let concat_result%0#0: bytes = (concat len_16_bit%0#0 concatenated%0#0) return concat_result%0#0 - subroutine test_cases.typed_abi_call.logger.Logger.log_uint64(value: bytes) -> void: + subroutine test_cases.typed_abi_call.logger.Logger.no_args() -> uint64: block@0: // L25 + return 42u + + subroutine test_cases.typed_abi_call.logger.Logger.log_uint64(value: bytes) -> void: + block@0: // L29 (log value#0) return subroutine test_cases.typed_abi_call.logger.Logger.log_uint512(value: bytes) -> void: - block@0: // L29 + block@0: // L33 (log value#0) return subroutine test_cases.typed_abi_call.logger.Logger.log_string(value: bytes) -> void: - block@0: // L33 + block@0: // L37 let tmp%0#0: bytes = ((extract 2 0) value#0) (log tmp%0#0) return subroutine test_cases.typed_abi_call.logger.Logger.log_bool(value: bytes) -> void: - block@0: // L37 + block@0: // L41 let tmp%0#0: bool = (getbit value#0 0u) let tmp%1#0: bytes = (select 0x46616c7365 0x54727565 tmp%0#0) (log tmp%1#0) return subroutine test_cases.typed_abi_call.logger.Logger.log_bytes(value: bytes) -> void: - block@0: // L41 + block@0: // L45 let tmp%0#0: bytes = ((extract 2 0) value#0) (log tmp%0#0) return subroutine test_cases.typed_abi_call.logger.Logger.log_asset_account_app(asset: uint64, account: bytes, app: uint64) -> void: - block@0: // L45 + block@0: // L49 let (value%0#0: bytes, check%0#0: bool) = ((asset_params_get AssetName) asset#0) (assert check%0#0) // asset exists let tmp%0#0: bytes = (concat value%0#0 "") @@ -293,27 +308,27 @@ contract test_cases.typed_abi_call.logger.Logger: return subroutine test_cases.typed_abi_call.logger.Logger.echo_native_string(value: bytes) -> bytes: - block@0: // L49 + block@0: // L53 let tmp%0#0: bytes = (concat "echo: " value#0) return tmp%0#0 subroutine test_cases.typed_abi_call.logger.Logger.echo_native_bytes(value: bytes) -> bytes: - block@0: // L53 + block@0: // L57 let tmp%0#0: bytes = (concat 0x6563686f3a20 value#0) return tmp%0#0 subroutine test_cases.typed_abi_call.logger.Logger.echo_native_uint64(value: uint64) -> uint64: - block@0: // L57 + block@0: // L61 let tmp%0#0: uint64 = (+ value#0 1u) return tmp%0#0 subroutine test_cases.typed_abi_call.logger.Logger.echo_native_biguint(value: biguint) -> biguint: - block@0: // L61 + block@0: // L65 let tmp%0#0: biguint = (b+ value#0 1b) return tmp%0#0 subroutine test_cases.typed_abi_call.logger.Logger.echo_native_tuple(s: bytes, b: bytes, u: uint64, bu: biguint) -> : - block@0: // L65 + block@0: // L69 let tmp%0#0: bytes = (concat "echo: " s#0) let tmp%1#0: bytes = (concat 0x6563686f3a20 b#0) let tmp%2#0: uint64 = (+ u#0 1u) @@ -321,7 +336,7 @@ contract test_cases.typed_abi_call.logger.Logger: return tmp%0#0 tmp%1#0 tmp%2#0 tmp%3#0 subroutine test_cases.typed_abi_call.logger.Logger.return_args_after_14th(_a1: bytes, _a2: bytes, _a3: bytes, _a4: bytes, _a5: bytes, _a6: bytes, _a7: bytes, _a8: bytes, _a9: bytes, _a10: bytes, _a11: bytes, _a12: bytes, _a13: bytes, _a14: bytes, a15: bytes, a16: bytes, a17: bytes, a18: bytes, a19: bytes, a20: bytes) -> bytes: - block@0: // L71 + block@0: // L75 let encoded_tuple_buffer%1#0: bytes = (concat 0x a15#0) let encoded_tuple_buffer%2#0: bytes = (concat encoded_tuple_buffer%1#0 a16#0) let encoded_tuple_buffer%3#0: bytes = (concat encoded_tuple_buffer%2#0 a17#0) diff --git a/test_cases/typed_abi_call/puya.log b/test_cases/typed_abi_call/puya.log index 6011bbd79f..abaede913c 100644 --- a/test_cases/typed_abi_call/puya.log +++ b/test_cases/typed_abi_call/puya.log @@ -373,16 +373,18 @@ debug: Sealing block@0: // L61 debug: Terminated block@0: // L61 debug: Sealing block@0: // L65 debug: Terminated block@0: // L65 -debug: Sealing block@0: // L71 -debug: Terminated block@0: // L71 +debug: Sealing block@0: // L69 +debug: Terminated block@0: // L69 +debug: Sealing block@0: // L75 +debug: Terminated block@0: // L75 debug: Sealing block@0: // L20 debug: Terminated block@0: // L20 debug: Sealing block@1: // abi_routing_L20 debug: Terminated block@1: // abi_routing_L20 debug: Sealing block@2: // echo_route_L21 debug: Terminated block@2: // echo_route_L21 -debug: Sealing block@3: // log_route_L25 -debug: Terminated block@3: // log_route_L25 +debug: Sealing block@3: // no_args_route_L25 +debug: Terminated block@3: // no_args_route_L25 debug: Sealing block@4: // log_route_L29 debug: Terminated block@4: // log_route_L29 debug: Sealing block@5: // log_route_L33 @@ -393,28 +395,30 @@ debug: Sealing block@7: // log_route_L41 debug: Terminated block@7: // log_route_L41 debug: Sealing block@8: // log_route_L45 debug: Terminated block@8: // log_route_L45 -debug: Sealing block@9: // echo_native_string_route_L49 -debug: Terminated block@9: // echo_native_string_route_L49 -debug: Sealing block@10: // echo_native_bytes_route_L53 -debug: Terminated block@10: // echo_native_bytes_route_L53 -debug: Sealing block@11: // echo_native_uint64_route_L57 -debug: Terminated block@11: // echo_native_uint64_route_L57 -debug: Sealing block@12: // echo_native_biguint_route_L61 -debug: Terminated block@12: // echo_native_biguint_route_L61 -debug: Sealing block@13: // echo_native_tuple_route_L65 -debug: Terminated block@13: // echo_native_tuple_route_L65 -debug: Sealing block@14: // return_args_after_14th_route_L71 -debug: Terminated block@14: // return_args_after_14th_route_L71 -debug: Sealing block@15: // switch_case_default_L20 -debug: Terminated block@15: // switch_case_default_L20 -debug: Sealing block@16: // switch_case_next_L20 -debug: Terminated block@16: // switch_case_next_L20 -debug: Sealing block@17: // bare_routing_L20 -debug: Terminated block@17: // bare_routing_L20 -debug: Sealing block@18: // create_L20 -debug: Terminated block@18: // create_L20 -debug: Sealing block@19: // reject_bare_on_completion_L20 -debug: Terminated block@19: // reject_bare_on_completion_L20 +debug: Sealing block@9: // log_route_L49 +debug: Terminated block@9: // log_route_L49 +debug: Sealing block@10: // echo_native_string_route_L53 +debug: Terminated block@10: // echo_native_string_route_L53 +debug: Sealing block@11: // echo_native_bytes_route_L57 +debug: Terminated block@11: // echo_native_bytes_route_L57 +debug: Sealing block@12: // echo_native_uint64_route_L61 +debug: Terminated block@12: // echo_native_uint64_route_L61 +debug: Sealing block@13: // echo_native_biguint_route_L65 +debug: Terminated block@13: // echo_native_biguint_route_L65 +debug: Sealing block@14: // echo_native_tuple_route_L69 +debug: Terminated block@14: // echo_native_tuple_route_L69 +debug: Sealing block@15: // return_args_after_14th_route_L75 +debug: Terminated block@15: // return_args_after_14th_route_L75 +debug: Sealing block@16: // switch_case_default_L20 +debug: Terminated block@16: // switch_case_default_L20 +debug: Sealing block@17: // switch_case_next_L20 +debug: Terminated block@17: // switch_case_next_L20 +debug: Sealing block@18: // bare_routing_L20 +debug: Terminated block@18: // bare_routing_L20 +debug: Sealing block@19: // create_L20 +debug: Terminated block@19: // create_L20 +debug: Sealing block@20: // reject_bare_on_completion_L20 +debug: Terminated block@20: // reject_bare_on_completion_L20 debug: Sealing block@0: // L20 debug: Terminated block@0: // L20 debug: Sealing block@0: // L18 @@ -509,6 +513,14 @@ debug: Sealing block@2: // next_txn_L187 debug: Terminated block@2: // next_txn_L187 debug: Sealing block@3: // next_txn_L201 debug: Terminated block@3: // next_txn_L201 +debug: Sealing block@0: // L215 +debug: Terminated block@0: // L215 +debug: Sealing block@1: // next_txn_L217 +debug: Terminated block@1: // next_txn_L217 +debug: Sealing block@2: // next_txn_L219 +debug: Terminated block@2: // next_txn_L219 +debug: Sealing block@3: // next_txn_L222 +debug: Terminated block@3: // next_txn_L222 debug: Sealing block@0: // L17 debug: Terminated block@0: // L17 debug: Sealing block@1: // abi_routing_L17 @@ -535,16 +547,18 @@ debug: Sealing block@11: // test_native_biguint_route_L154 debug: Terminated block@11: // test_native_biguint_route_L154 debug: Sealing block@12: // test_native_tuple_route_L165 debug: Terminated block@12: // test_native_tuple_route_L165 -debug: Sealing block@13: // switch_case_default_L17 -debug: Terminated block@13: // switch_case_default_L17 -debug: Sealing block@14: // switch_case_next_L17 -debug: Terminated block@14: // switch_case_next_L17 -debug: Sealing block@15: // bare_routing_L17 -debug: Terminated block@15: // bare_routing_L17 -debug: Sealing block@16: // create_L17 -debug: Terminated block@16: // create_L17 -debug: Sealing block@17: // reject_bare_on_completion_L17 -debug: Terminated block@17: // reject_bare_on_completion_L17 +debug: Sealing block@13: // test_no_args_route_L215 +debug: Terminated block@13: // test_no_args_route_L215 +debug: Sealing block@14: // switch_case_default_L17 +debug: Terminated block@14: // switch_case_default_L17 +debug: Sealing block@15: // switch_case_next_L17 +debug: Terminated block@15: // switch_case_next_L17 +debug: Sealing block@16: // bare_routing_L17 +debug: Terminated block@16: // bare_routing_L17 +debug: Sealing block@17: // create_L17 +debug: Terminated block@17: // create_L17 +debug: Sealing block@18: // reject_bare_on_completion_L17 +debug: Terminated block@18: // reject_bare_on_completion_L17 debug: Sealing block@0: // L17 debug: Terminated block@0: // L17 debug: Output IR to typed_abi_call/out/Logger.ssa.ir @@ -557,25 +571,26 @@ debug: Optimizer: Copy Propagation debug: Optimizer: Intrinsic Simplifier debug: Simplified (== tmp%2#0 NoOp) to (! tmp%2#0) debug: Simplified (== tmp%8#0 NoOp) to (! tmp%8#0) -debug: Simplified (== tmp%12#0 NoOp) to (! tmp%12#0) -debug: Simplified (== tmp%16#0 NoOp) to (! tmp%16#0) -debug: Simplified (== tmp%20#0 NoOp) to (! tmp%20#0) -debug: Simplified (== tmp%24#0 NoOp) to (! tmp%24#0) -debug: Simplified (== tmp%28#0 NoOp) to (! tmp%28#0) -debug: Simplified (== tmp%40#0 NoOp) to (! tmp%40#0) -debug: Simplified (== tmp%47#0 NoOp) to (! tmp%47#0) -debug: Simplified (== tmp%54#0 NoOp) to (! tmp%54#0) -debug: Simplified (== tmp%61#0 NoOp) to (! tmp%61#0) -debug: Simplified (== tmp%68#0 NoOp) to (! tmp%68#0) +debug: Simplified (== tmp%13#0 NoOp) to (! tmp%13#0) +debug: Simplified (== tmp%17#0 NoOp) to (! tmp%17#0) +debug: Simplified (== tmp%21#0 NoOp) to (! tmp%21#0) +debug: Simplified (== tmp%25#0 NoOp) to (! tmp%25#0) +debug: Simplified (== tmp%29#0 NoOp) to (! tmp%29#0) +debug: Simplified (== tmp%33#0 NoOp) to (! tmp%33#0) +debug: Simplified (== tmp%45#0 NoOp) to (! tmp%45#0) +debug: Simplified (== tmp%52#0 NoOp) to (! tmp%52#0) +debug: Simplified (== tmp%59#0 NoOp) to (! tmp%59#0) +debug: Simplified (== tmp%66#0 NoOp) to (! tmp%66#0) +debug: Simplified (== tmp%73#0 NoOp) to (! tmp%73#0) debug: Simplified ((extract 6 2) as_bytes%4#0) to 0x004c debug: Simplified (concat 0x offset_as_uint16%0#0) to offset_as_uint16%0#0 -debug: Simplified (== tmp%80#0 NoOp) to (! tmp%80#0) -debug: Simplified (extract3 tmp%97#0 0u 1u) // on error: Index access is out of bounds to ((extract 0 1) tmp%97#0) // on error: Index access is out of bounds -debug: Simplified (extract3 tmp%99#0 1u 1u) // on error: Index access is out of bounds to ((extract 1 1) tmp%99#0) // on error: Index access is out of bounds -debug: Simplified (extract3 tmp%101#0 2u 1u) // on error: Index access is out of bounds to ((extract 2 1) tmp%101#0) // on error: Index access is out of bounds -debug: Simplified (extract3 tmp%103#0 3u 1u) // on error: Index access is out of bounds to ((extract 3 1) tmp%103#0) // on error: Index access is out of bounds -debug: Simplified (extract3 tmp%105#0 4u 4u) // on error: Index access is out of bounds to ((extract 4 4) tmp%105#0) // on error: Index access is out of bounds -debug: Simplified (extract3 tmp%107#0 8u 1u) // on error: Index access is out of bounds to ((extract 8 1) tmp%107#0) // on error: Index access is out of bounds +debug: Simplified (== tmp%85#0 NoOp) to (! tmp%85#0) +debug: Simplified (extract3 tmp%102#0 0u 1u) // on error: Index access is out of bounds to ((extract 0 1) tmp%102#0) // on error: Index access is out of bounds +debug: Simplified (extract3 tmp%104#0 1u 1u) // on error: Index access is out of bounds to ((extract 1 1) tmp%104#0) // on error: Index access is out of bounds +debug: Simplified (extract3 tmp%106#0 2u 1u) // on error: Index access is out of bounds to ((extract 2 1) tmp%106#0) // on error: Index access is out of bounds +debug: Simplified (extract3 tmp%108#0 3u 1u) // on error: Index access is out of bounds to ((extract 3 1) tmp%108#0) // on error: Index access is out of bounds +debug: Simplified (extract3 tmp%110#0 4u 4u) // on error: Index access is out of bounds to ((extract 4 4) tmp%110#0) // on error: Index access is out of bounds +debug: Simplified (extract3 tmp%112#0 8u 1u) // on error: Index access is out of bounds to ((extract 8 1) tmp%112#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 @@ -585,22 +600,22 @@ 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_L20 as a predecessor of block@16: // switch_case_next_L20 due to inlining of block@15: // switch_case_default_L20 -debug: simplified terminator of block@1: // abi_routing_L20 from switch tmp%1#0 {method "echo(string)string" => block@2, method "log(uint64)void" => block@3, method "log(uint512)void" => block@4, method "log(string)void" => block@5, method "log(bool)void" => block@6, method "log(byte[])void" => block@7, method "log(asset,account,application)void" => block@8, method "echo_native_string(string)string" => block@9, method "echo_native_bytes(byte[])byte[]" => block@10, method "echo_native_uint64(uint64)uint64" => block@11, method "echo_native_biguint(uint512)uint512" => block@12, method "echo_native_tuple(string,byte[],uint64,uint512)(string,byte[],uint64,uint512)" => block@13, method "return_args_after_14th(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint8,uint8,uint8,uint8,(uint8,uint8,uint8,uint8),uint8)byte[]" => block@14, * => block@15} to switch tmp%1#0 {method "echo(string)string" => block@2, method "log(uint64)void" => block@3, method "log(uint512)void" => block@4, method "log(string)void" => block@5, method "log(bool)void" => block@6, method "log(byte[])void" => block@7, method "log(asset,account,application)void" => block@8, method "echo_native_string(string)string" => block@9, method "echo_native_bytes(byte[])byte[]" => block@10, method "echo_native_uint64(uint64)uint64" => block@11, method "echo_native_biguint(uint512)uint512" => block@12, method "echo_native_tuple(string,byte[],uint64,uint512)(string,byte[],uint64,uint512)" => block@13, method "return_args_after_14th(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint8,uint8,uint8,uint8,(uint8,uint8,uint8,uint8),uint8)byte[]" => block@14, * => block@16} +debug: adding block@1: // abi_routing_L20 as a predecessor of block@17: // switch_case_next_L20 due to inlining of block@16: // switch_case_default_L20 +debug: simplified terminator of block@1: // abi_routing_L20 from switch tmp%1#0 {method "echo(string)string" => block@2, method "no_args()uint64" => block@3, method "log(uint64)void" => block@4, method "log(uint512)void" => block@5, method "log(string)void" => block@6, method "log(bool)void" => block@7, method "log(byte[])void" => block@8, method "log(asset,account,application)void" => block@9, method "echo_native_string(string)string" => block@10, method "echo_native_bytes(byte[])byte[]" => block@11, method "echo_native_uint64(uint64)uint64" => block@12, method "echo_native_biguint(uint512)uint512" => block@13, method "echo_native_tuple(string,byte[],uint64,uint512)(string,byte[],uint64,uint512)" => block@14, method "return_args_after_14th(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint8,uint8,uint8,uint8,(uint8,uint8,uint8,uint8),uint8)byte[]" => block@15, * => block@16} to switch tmp%1#0 {method "echo(string)string" => block@2, method "no_args()uint64" => block@3, method "log(uint64)void" => block@4, method "log(uint512)void" => block@5, method "log(string)void" => block@6, method "log(bool)void" => block@7, method "log(byte[])void" => block@8, method "log(asset,account,application)void" => block@9, method "echo_native_string(string)string" => block@10, method "echo_native_bytes(byte[])byte[]" => block@11, method "echo_native_uint64(uint64)uint64" => block@12, method "echo_native_biguint(uint512)uint512" => block@13, method "echo_native_tuple(string,byte[],uint64,uint512)(string,byte[],uint64,uint512)" => block@14, method "return_args_after_14th(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint8,uint8,uint8,uint8,(uint8,uint8,uint8,uint8),uint8)byte[]" => block@15, * => block@17} debug: simplifying a switch with constants into goto nth -debug: simplified terminator of block@17: // bare_routing_L20 from switch tmp%111#0 {0u => block@18, * => block@19} to goto_nth [block@18][tmp%111#0] else goto block@19 +debug: simplified terminator of block@18: // bare_routing_L20 from switch tmp%116#0 {0u => block@19, * => block@20} to goto_nth [block@19][tmp%116#0] else goto block@20 debug: inlining the default target of a switch/goto nth -debug: simplified terminator of block@1: // abi_routing_L20 from switch tmp%1#0 {method "echo(string)string" => block@2, method "log(uint64)void" => block@3, method "log(uint512)void" => block@4, method "log(string)void" => block@5, method "log(bool)void" => block@6, method "log(byte[])void" => block@7, method "log(asset,account,application)void" => block@8, method "echo_native_string(string)string" => block@9, method "echo_native_bytes(byte[])byte[]" => block@10, method "echo_native_uint64(uint64)uint64" => block@11, method "echo_native_biguint(uint512)uint512" => block@12, method "echo_native_tuple(string,byte[],uint64,uint512)(string,byte[],uint64,uint512)" => block@13, method "return_args_after_14th(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint8,uint8,uint8,uint8,(uint8,uint8,uint8,uint8),uint8)byte[]" => block@14, * => block@16} to switch tmp%1#0 {method "echo(string)string" => block@2, method "log(uint64)void" => block@3, method "log(uint512)void" => block@4, method "log(string)void" => block@5, method "log(bool)void" => block@6, method "log(byte[])void" => block@7, method "log(asset,account,application)void" => block@8, method "echo_native_string(string)string" => block@9, method "echo_native_bytes(byte[])byte[]" => block@10, method "echo_native_uint64(uint64)uint64" => block@11, method "echo_native_biguint(uint512)uint512" => block@12, method "echo_native_tuple(string,byte[],uint64,uint512)(string,byte[],uint64,uint512)" => block@13, method "return_args_after_14th(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint8,uint8,uint8,uint8,(uint8,uint8,uint8,uint8),uint8)byte[]" => block@14, * => fail // reject transaction} +debug: simplified terminator of block@1: // abi_routing_L20 from switch tmp%1#0 {method "echo(string)string" => block@2, method "no_args()uint64" => block@3, method "log(uint64)void" => block@4, method "log(uint512)void" => block@5, method "log(string)void" => block@6, method "log(bool)void" => block@7, method "log(byte[])void" => block@8, method "log(asset,account,application)void" => block@9, method "echo_native_string(string)string" => block@10, method "echo_native_bytes(byte[])byte[]" => block@11, method "echo_native_uint64(uint64)uint64" => block@12, method "echo_native_biguint(uint512)uint512" => block@13, method "echo_native_tuple(string,byte[],uint64,uint512)(string,byte[],uint64,uint512)" => block@14, method "return_args_after_14th(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint8,uint8,uint8,uint8,(uint8,uint8,uint8,uint8),uint8)byte[]" => block@15, * => block@17} to switch tmp%1#0 {method "echo(string)string" => block@2, method "no_args()uint64" => block@3, method "log(uint64)void" => block@4, method "log(uint512)void" => block@5, method "log(string)void" => block@6, method "log(bool)void" => block@7, method "log(byte[])void" => block@8, method "log(asset,account,application)void" => block@9, method "echo_native_string(string)string" => block@10, method "echo_native_bytes(byte[])byte[]" => block@11, method "echo_native_uint64(uint64)uint64" => block@12, method "echo_native_biguint(uint512)uint512" => block@13, method "echo_native_tuple(string,byte[],uint64,uint512)(string,byte[],uint64,uint512)" => block@14, method "return_args_after_14th(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint8,uint8,uint8,uint8,(uint8,uint8,uint8,uint8),uint8)byte[]" => block@15, * => fail // reject transaction} debug: simplifying a goto nth with two targets into a conditional branch -debug: simplified terminator of block@17: // bare_routing_L20 from goto_nth [block@18][tmp%111#0] else goto block@19 to goto tmp%111#0 ? block@19 : block@18 +debug: simplified terminator of block@18: // bare_routing_L20 from goto_nth [block@19][tmp%116#0] else goto block@20 to goto tmp%116#0 ? block@20 : block@19 debug: inlining condition branch to err block into an assert false -debug: simplified terminator of block@17: // bare_routing_L20 from goto tmp%111#0 ? block@19 : block@18 to goto block@18 +debug: simplified terminator of block@18: // bare_routing_L20 from goto tmp%116#0 ? block@20 : block@19 to goto block@19 debug: Optimizer: Remove Linear Jump -debug: Merged linear block@16: // switch_case_next_L20 into block@15: // switch_case_default_L20 -debug: Merged linear block@18: // create_L20 into block@17: // bare_routing_L20 +debug: Merged linear block@17: // switch_case_next_L20 into block@16: // switch_case_default_L20 +debug: Merged linear block@19: // create_L20 into block@18: // bare_routing_L20 debug: Optimizer: Remove Empty Blocks debug: Optimizer: Remove Unreachable Blocks -debug: Removing unreachable blocks: block@15: // switch_case_default_L20, block@19: // reject_bare_on_completion_L20 +debug: Removing unreachable blocks: block@16: // switch_case_default_L20, block@20: // reject_bare_on_completion_L20 debug: Optimizer: Repeated Expression Elimination debug: Optimizer: Remove Calls To No Op Subroutines debug: Optimizing subroutine test_cases.typed_abi_call.logger.Logger.echo @@ -618,6 +633,20 @@ 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.typed_abi_call.logger.Logger.no_args +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.typed_abi_call.logger.Logger.log_uint64 debug: Splitting parallel copies prior to optimization debug: Optimizer: Constant Replacer @@ -841,6 +870,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.typed_abi_call.logger.Logger.no_args +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.typed_abi_call.logger.Logger.log_uint64 debug: Optimizer: Constant Replacer debug: Optimizer: Copy Propagation @@ -1046,6 +1088,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.typed_abi_call.logger.Logger.no_args +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.typed_abi_call.logger.Logger.log_uint64 debug: Optimizer: Constant Replacer debug: Optimizer: Copy Propagation @@ -1245,6 +1300,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.typed_abi_call.logger.Logger.no_args +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.typed_abi_call.logger.Logger.log_uint64 debug: Optimizer: Constant Replacer debug: Optimizer: Copy Propagation @@ -1443,6 +1511,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.typed_abi_call.logger.Logger.no_args +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.typed_abi_call.logger.Logger.log_uint64 debug: Optimizer: Constant Replacer debug: Optimizer: Copy Propagation @@ -1640,6 +1721,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.typed_abi_call.logger.Logger.no_args +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.typed_abi_call.logger.Logger.log_uint64 debug: Optimizer: Constant Replacer debug: Optimizer: Copy Propagation @@ -1812,6 +1906,7 @@ debug: Optimizer: Remove Calls To No Op Subroutines debug: No optimizations performed in pass 6, ending loop debug: Removing Phis from test_cases.typed_abi_call.logger.Logger.approval_program debug: Removing Phis from test_cases.typed_abi_call.logger.Logger.echo +debug: Removing Phis from test_cases.typed_abi_call.logger.Logger.no_args debug: Removing Phis from test_cases.typed_abi_call.logger.Logger.log_uint64 debug: Removing Phis from test_cases.typed_abi_call.logger.Logger.log_uint512 debug: Removing Phis from test_cases.typed_abi_call.logger.Logger.log_string @@ -1829,6 +1924,8 @@ debug: Coalescing local variables in test_cases.typed_abi_call.logger.Logger.app debug: Coalescing resulted in 0 replacement/s debug: Coalescing local variables in test_cases.typed_abi_call.logger.Logger.echo using strategy RootOperandGrouping debug: Coalescing resulted in 0 replacement/s +debug: Coalescing local variables in test_cases.typed_abi_call.logger.Logger.no_args using strategy RootOperandGrouping +debug: Coalescing resulted in 0 replacement/s debug: Coalescing local variables in test_cases.typed_abi_call.logger.Logger.log_uint64 using strategy RootOperandGrouping debug: Coalescing resulted in 0 replacement/s debug: Coalescing local variables in test_cases.typed_abi_call.logger.Logger.log_uint512 using strategy RootOperandGrouping @@ -1857,6 +1954,7 @@ debug: Coalescing local variables in test_cases.typed_abi_call.logger.Logger.cle debug: Coalescing resulted in 0 replacement/s debug: Sequentializing parallel copies in test_cases.typed_abi_call.logger.Logger.approval_program debug: Sequentializing parallel copies in test_cases.typed_abi_call.logger.Logger.echo +debug: Sequentializing parallel copies in test_cases.typed_abi_call.logger.Logger.no_args debug: Sequentializing parallel copies in test_cases.typed_abi_call.logger.Logger.log_uint64 debug: Sequentializing parallel copies in test_cases.typed_abi_call.logger.Logger.log_uint512 debug: Sequentializing parallel copies in test_cases.typed_abi_call.logger.Logger.log_string @@ -1875,7 +1973,7 @@ debug: Output IR to typed_abi_call/out/Logger.destructured.ir debug: Inserted main_block@0.ops[1]: 'store tmp%0#0 to l-stack (copy)' debug: Replaced main_block@0.ops[3]: 'load tmp%0#0' with 'load tmp%0#0 from l-stack (no copy)' debug: Inserted main_abi_routing@1.ops[1]: 'store tmp%1#0 to l-stack (copy)' -debug: Replaced main_abi_routing@1.ops[16]: 'load tmp%1#0' with 'load tmp%1#0 from l-stack (no copy)' +debug: Replaced main_abi_routing@1.ops[17]: 'load tmp%1#0' with 'load tmp%1#0 from l-stack (no copy)' debug: Inserted main_echo_route@2.ops[1]: 'store tmp%2#0 to l-stack (copy)' debug: Replaced main_echo_route@2.ops[3]: 'load tmp%2#0' with 'load tmp%2#0 from l-stack (no copy)' debug: Inserted main_echo_route@2.ops[5]: 'store tmp%3#0 to l-stack (copy)' @@ -1888,308 +1986,320 @@ debug: Inserted main_echo_route@2.ops[23]: 'store tmp%7#0 to l-stack (copy)' debug: Replaced main_echo_route@2.ops[25]: 'load tmp%7#0' with 'load tmp%7#0 from l-stack (no copy)' debug: Inserted main_echo_route@2.ops[19]: 'store tmp%6#0 to l-stack (copy)' debug: Replaced main_echo_route@2.ops[22]: 'load tmp%6#0' with 'load tmp%6#0 from l-stack (no copy)' -debug: Inserted main_log_route@3.ops[1]: 'store tmp%8#0 to l-stack (copy)' -debug: Replaced main_log_route@3.ops[3]: 'load tmp%8#0' with 'load tmp%8#0 from l-stack (no copy)' -debug: Inserted main_log_route@3.ops[5]: 'store tmp%9#0 to l-stack (copy)' -debug: Replaced main_log_route@3.ops[7]: 'load tmp%9#0' with 'load tmp%9#0 from l-stack (no copy)' -debug: Inserted main_log_route@3.ops[10]: 'store tmp%10#0 to l-stack (copy)' -debug: Replaced main_log_route@3.ops[12]: 'load tmp%10#0' with 'load tmp%10#0 from l-stack (no copy)' -debug: Inserted main_log_route@3.ops[15]: 'store tmp%11#0 to l-stack (copy)' -debug: Replaced main_log_route@3.ops[17]: 'load tmp%11#0' with 'load tmp%11#0 from l-stack (no copy)' -debug: Inserted main_log_route@4.ops[1]: 'store tmp%12#0 to l-stack (copy)' -debug: Replaced main_log_route@4.ops[3]: 'load tmp%12#0' with 'load tmp%12#0 from l-stack (no copy)' -debug: Inserted main_log_route@4.ops[5]: 'store tmp%13#0 to l-stack (copy)' -debug: Replaced main_log_route@4.ops[7]: 'load tmp%13#0' with 'load tmp%13#0 from l-stack (no copy)' -debug: Inserted main_log_route@4.ops[10]: 'store tmp%14#0 to l-stack (copy)' -debug: Replaced main_log_route@4.ops[12]: 'load tmp%14#0' with 'load tmp%14#0 from l-stack (no copy)' -debug: Inserted main_log_route@4.ops[15]: 'store tmp%15#0 to l-stack (copy)' -debug: Replaced main_log_route@4.ops[17]: 'load tmp%15#0' with 'load tmp%15#0 from l-stack (no copy)' -debug: Inserted main_log_route@5.ops[1]: 'store tmp%16#0 to l-stack (copy)' -debug: Replaced main_log_route@5.ops[3]: 'load tmp%16#0' with 'load tmp%16#0 from l-stack (no copy)' -debug: Inserted main_log_route@5.ops[5]: 'store tmp%17#0 to l-stack (copy)' -debug: Replaced main_log_route@5.ops[7]: 'load tmp%17#0' with 'load tmp%17#0 from l-stack (no copy)' -debug: Inserted main_log_route@5.ops[10]: 'store tmp%18#0 to l-stack (copy)' -debug: Replaced main_log_route@5.ops[12]: 'load tmp%18#0' with 'load tmp%18#0 from l-stack (no copy)' -debug: Inserted main_log_route@5.ops[15]: 'store tmp%19#0 to l-stack (copy)' -debug: Replaced main_log_route@5.ops[17]: 'load tmp%19#0' with 'load tmp%19#0 from l-stack (no copy)' -debug: Inserted main_log_route@6.ops[1]: 'store tmp%20#0 to l-stack (copy)' -debug: Replaced main_log_route@6.ops[3]: 'load tmp%20#0' with 'load tmp%20#0 from l-stack (no copy)' -debug: Inserted main_log_route@6.ops[5]: 'store tmp%21#0 to l-stack (copy)' -debug: Replaced main_log_route@6.ops[7]: 'load tmp%21#0' with 'load tmp%21#0 from l-stack (no copy)' -debug: Inserted main_log_route@6.ops[10]: 'store tmp%22#0 to l-stack (copy)' -debug: Replaced main_log_route@6.ops[12]: 'load tmp%22#0' with 'load tmp%22#0 from l-stack (no copy)' -debug: Inserted main_log_route@6.ops[15]: 'store tmp%23#0 to l-stack (copy)' -debug: Replaced main_log_route@6.ops[17]: 'load tmp%23#0' with 'load tmp%23#0 from l-stack (no copy)' -debug: Inserted main_log_route@7.ops[1]: 'store tmp%24#0 to l-stack (copy)' -debug: Replaced main_log_route@7.ops[3]: 'load tmp%24#0' with 'load tmp%24#0 from l-stack (no copy)' -debug: Inserted main_log_route@7.ops[5]: 'store tmp%25#0 to l-stack (copy)' -debug: Replaced main_log_route@7.ops[7]: 'load tmp%25#0' with 'load tmp%25#0 from l-stack (no copy)' -debug: Inserted main_log_route@7.ops[10]: 'store tmp%26#0 to l-stack (copy)' -debug: Replaced main_log_route@7.ops[12]: 'load tmp%26#0' with 'load tmp%26#0 from l-stack (no copy)' -debug: Inserted main_log_route@7.ops[15]: 'store tmp%27#0 to l-stack (copy)' -debug: Replaced main_log_route@7.ops[17]: 'load tmp%27#0' with 'load tmp%27#0 from l-stack (no copy)' -debug: Inserted main_log_route@8.ops[1]: 'store tmp%28#0 to l-stack (copy)' -debug: Replaced main_log_route@8.ops[3]: 'load tmp%28#0' with 'load tmp%28#0 from l-stack (no copy)' -debug: Inserted main_log_route@8.ops[5]: 'store tmp%29#0 to l-stack (copy)' -debug: Replaced main_log_route@8.ops[7]: 'load tmp%29#0' with 'load tmp%29#0 from l-stack (no copy)' -debug: Inserted main_log_route@8.ops[10]: 'store tmp%30#0 to l-stack (copy)' -debug: Replaced main_log_route@8.ops[12]: 'load tmp%30#0' with 'load tmp%30#0 from l-stack (no copy)' -debug: Inserted main_log_route@8.ops[15]: 'store tmp%31#0 to l-stack (copy)' -debug: Replaced main_log_route@8.ops[17]: 'load tmp%31#0' with 'load tmp%31#0 from l-stack (no copy)' -debug: Inserted main_log_route@8.ops[19]: 'store tmp%32#0 to l-stack (copy)' -debug: Replaced main_log_route@8.ops[21]: 'load tmp%32#0' with 'load tmp%32#0 from l-stack (no copy)' -debug: Inserted main_log_route@8.ops[25]: 'store tmp%34#0 to l-stack (copy)' -debug: Replaced main_log_route@8.ops[27]: 'load tmp%34#0' with 'load tmp%34#0 from l-stack (no copy)' -debug: Inserted main_log_route@8.ops[29]: 'store tmp%35#0 to l-stack (copy)' -debug: Replaced main_log_route@8.ops[31]: 'load tmp%35#0' with 'load tmp%35#0 from l-stack (no copy)' -debug: Inserted main_log_route@8.ops[35]: 'store tmp%37#0 to l-stack (copy)' -debug: Replaced main_log_route@8.ops[37]: 'load tmp%37#0' with 'load tmp%37#0 from l-stack (no copy)' -debug: Inserted main_log_route@8.ops[39]: 'store tmp%38#0 to l-stack (copy)' -debug: Replaced main_log_route@8.ops[41]: 'load tmp%38#0' with 'load tmp%38#0 from l-stack (no copy)' -debug: Inserted main_log_route@8.ops[43]: 'store tmp%39#0 to l-stack (copy)' -debug: Replaced main_log_route@8.ops[47]: 'load tmp%39#0' with 'load tmp%39#0 from l-stack (no copy)' -debug: Inserted main_log_route@8.ops[33]: 'store tmp%36#0 to l-stack (copy)' -debug: Replaced main_log_route@8.ops[47]: 'load tmp%36#0' with 'load tmp%36#0 from l-stack (no copy)' -debug: Inserted main_log_route@8.ops[23]: 'store tmp%33#0 to l-stack (copy)' -debug: Replaced main_log_route@8.ops[47]: 'load tmp%33#0' with 'load tmp%33#0 from l-stack (no copy)' -debug: Inserted main_echo_native_string_route@9.ops[1]: 'store tmp%40#0 to l-stack (copy)' -debug: Replaced main_echo_native_string_route@9.ops[3]: 'load tmp%40#0' with 'load tmp%40#0 from l-stack (no copy)' -debug: Inserted main_echo_native_string_route@9.ops[5]: 'store tmp%41#0 to l-stack (copy)' -debug: Replaced main_echo_native_string_route@9.ops[7]: 'load tmp%41#0' with 'load tmp%41#0 from l-stack (no copy)' -debug: Inserted main_echo_native_string_route@9.ops[10]: 'store tmp%42#0 to l-stack (copy)' -debug: Replaced main_echo_native_string_route@9.ops[12]: 'load tmp%42#0' with 'load tmp%42#0 from l-stack (no copy)' -debug: Inserted main_echo_native_string_route@9.ops[15]: 'store tmp%43#0 to l-stack (copy)' -debug: Replaced main_echo_native_string_route@9.ops[17]: 'load tmp%43#0' with 'load tmp%43#0 from l-stack (no copy)' -debug: Inserted main_echo_native_string_route@9.ops[19]: 'store tmp%44#0 to l-stack (copy)' -debug: Replaced main_echo_native_string_route@9.ops[21]: 'load tmp%44#0' with 'load tmp%44#0 from l-stack (no copy)' -debug: Inserted main_echo_native_string_route@9.ops[23]: 'store tmp%45#0 to l-stack (copy)' -debug: Replaced main_echo_native_string_route@9.ops[25]: 'load tmp%45#0' with 'load tmp%45#0 from l-stack (no copy)' -debug: Inserted main_echo_native_string_route@9.ops[27]: 'store length%0#0 to l-stack (copy)' -debug: Replaced main_echo_native_string_route@9.ops[29]: 'load length%0#0' with 'load length%0#0 from l-stack (no copy)' -debug: Inserted main_echo_native_string_route@9.ops[31]: 'store as_bytes%0#0 to l-stack (copy)' -debug: Replaced main_echo_native_string_route@9.ops[33]: 'load as_bytes%0#0' with 'load as_bytes%0#0 from l-stack (no copy)' -debug: Inserted main_echo_native_string_route@9.ops[35]: 'store length_uint16%0#0 to l-stack (copy)' -debug: Replaced main_echo_native_string_route@9.ops[37]: 'load length_uint16%0#0' with 'load length_uint16%0#0 from l-stack (no copy)' -debug: Inserted main_echo_native_string_route@9.ops[44]: 'store tmp%46#0 to l-stack (copy)' -debug: Replaced main_echo_native_string_route@9.ops[46]: 'load tmp%46#0' with 'load tmp%46#0 from l-stack (no copy)' -debug: Inserted main_echo_native_string_route@9.ops[40]: 'store encoded_value%0#0 to l-stack (copy)' -debug: Replaced main_echo_native_string_route@9.ops[43]: 'load encoded_value%0#0' with 'load encoded_value%0#0 from l-stack (no copy)' -debug: Inserted main_echo_native_string_route@9.ops[26]: 'store tmp%45#0 to l-stack (copy)' -debug: Replaced main_echo_native_string_route@9.ops[39]: 'load tmp%45#0' with 'load tmp%45#0 from l-stack (no copy)' -debug: Inserted main_echo_native_bytes_route@10.ops[1]: 'store tmp%47#0 to l-stack (copy)' -debug: Replaced main_echo_native_bytes_route@10.ops[3]: 'load tmp%47#0' with 'load tmp%47#0 from l-stack (no copy)' -debug: Inserted main_echo_native_bytes_route@10.ops[5]: 'store tmp%48#0 to l-stack (copy)' -debug: Replaced main_echo_native_bytes_route@10.ops[7]: 'load tmp%48#0' with 'load tmp%48#0 from l-stack (no copy)' -debug: Inserted main_echo_native_bytes_route@10.ops[10]: 'store tmp%49#0 to l-stack (copy)' -debug: Replaced main_echo_native_bytes_route@10.ops[12]: 'load tmp%49#0' with 'load tmp%49#0 from l-stack (no copy)' -debug: Inserted main_echo_native_bytes_route@10.ops[15]: 'store tmp%50#0 to l-stack (copy)' -debug: Replaced main_echo_native_bytes_route@10.ops[17]: 'load tmp%50#0' with 'load tmp%50#0 from l-stack (no copy)' -debug: Inserted main_echo_native_bytes_route@10.ops[19]: 'store tmp%51#0 to l-stack (copy)' -debug: Replaced main_echo_native_bytes_route@10.ops[21]: 'load tmp%51#0' with 'load tmp%51#0 from l-stack (no copy)' -debug: Inserted main_echo_native_bytes_route@10.ops[23]: 'store tmp%52#0 to l-stack (copy)' -debug: Replaced main_echo_native_bytes_route@10.ops[25]: 'load tmp%52#0' with 'load tmp%52#0 from l-stack (no copy)' -debug: Inserted main_echo_native_bytes_route@10.ops[27]: 'store length%1#0 to l-stack (copy)' -debug: Replaced main_echo_native_bytes_route@10.ops[29]: 'load length%1#0' with 'load length%1#0 from l-stack (no copy)' -debug: Inserted main_echo_native_bytes_route@10.ops[31]: 'store as_bytes%1#0 to l-stack (copy)' -debug: Replaced main_echo_native_bytes_route@10.ops[33]: 'load as_bytes%1#0' with 'load as_bytes%1#0 from l-stack (no copy)' -debug: Inserted main_echo_native_bytes_route@10.ops[35]: 'store length_uint16%1#0 to l-stack (copy)' -debug: Replaced main_echo_native_bytes_route@10.ops[37]: 'load length_uint16%1#0' with 'load length_uint16%1#0 from l-stack (no copy)' -debug: Inserted main_echo_native_bytes_route@10.ops[44]: 'store tmp%53#0 to l-stack (copy)' -debug: Replaced main_echo_native_bytes_route@10.ops[46]: 'load tmp%53#0' with 'load tmp%53#0 from l-stack (no copy)' -debug: Inserted main_echo_native_bytes_route@10.ops[40]: 'store encoded_value%1#0 to l-stack (copy)' -debug: Replaced main_echo_native_bytes_route@10.ops[43]: 'load encoded_value%1#0' with 'load encoded_value%1#0 from l-stack (no copy)' -debug: Inserted main_echo_native_bytes_route@10.ops[26]: 'store tmp%52#0 to l-stack (copy)' -debug: Replaced main_echo_native_bytes_route@10.ops[39]: 'load tmp%52#0' with 'load tmp%52#0 from l-stack (no copy)' -debug: Inserted main_echo_native_uint64_route@11.ops[1]: 'store tmp%54#0 to l-stack (copy)' -debug: Replaced main_echo_native_uint64_route@11.ops[3]: 'load tmp%54#0' with 'load tmp%54#0 from l-stack (no copy)' -debug: Inserted main_echo_native_uint64_route@11.ops[5]: 'store tmp%55#0 to l-stack (copy)' -debug: Replaced main_echo_native_uint64_route@11.ops[7]: 'load tmp%55#0' with 'load tmp%55#0 from l-stack (no copy)' -debug: Inserted main_echo_native_uint64_route@11.ops[10]: 'store tmp%56#0 to l-stack (copy)' -debug: Replaced main_echo_native_uint64_route@11.ops[12]: 'load tmp%56#0' with 'load tmp%56#0 from l-stack (no copy)' -debug: Inserted main_echo_native_uint64_route@11.ops[15]: 'store tmp%57#0 to l-stack (copy)' -debug: Replaced main_echo_native_uint64_route@11.ops[17]: 'load tmp%57#0' with 'load tmp%57#0 from l-stack (no copy)' -debug: Inserted main_echo_native_uint64_route@11.ops[19]: 'store tmp%58#0 to l-stack (copy)' -debug: Replaced main_echo_native_uint64_route@11.ops[21]: 'load tmp%58#0' with 'load tmp%58#0 from l-stack (no copy)' -debug: Inserted main_echo_native_uint64_route@11.ops[23]: 'store tmp%59#0 to l-stack (copy)' -debug: Replaced main_echo_native_uint64_route@11.ops[25]: 'load tmp%59#0' with 'load tmp%59#0 from l-stack (no copy)' -debug: Inserted main_echo_native_uint64_route@11.ops[31]: 'store tmp%60#0 to l-stack (copy)' -debug: Replaced main_echo_native_uint64_route@11.ops[33]: 'load tmp%60#0' with 'load tmp%60#0 from l-stack (no copy)' -debug: Inserted main_echo_native_uint64_route@11.ops[27]: 'store val_as_bytes%0#0 to l-stack (copy)' -debug: Replaced main_echo_native_uint64_route@11.ops[30]: 'load val_as_bytes%0#0' with 'load val_as_bytes%0#0 from l-stack (no copy)' -debug: Inserted main_echo_native_biguint_route@12.ops[1]: 'store tmp%61#0 to l-stack (copy)' -debug: Replaced main_echo_native_biguint_route@12.ops[3]: 'load tmp%61#0' with 'load tmp%61#0 from l-stack (no copy)' -debug: Inserted main_echo_native_biguint_route@12.ops[5]: 'store tmp%62#0 to l-stack (copy)' -debug: Replaced main_echo_native_biguint_route@12.ops[7]: 'load tmp%62#0' with 'load tmp%62#0 from l-stack (no copy)' -debug: Inserted main_echo_native_biguint_route@12.ops[10]: 'store tmp%63#0 to l-stack (copy)' -debug: Replaced main_echo_native_biguint_route@12.ops[12]: 'load tmp%63#0' with 'load tmp%63#0 from l-stack (no copy)' -debug: Inserted main_echo_native_biguint_route@12.ops[15]: 'store tmp%64#0 to l-stack (copy)' -debug: Replaced main_echo_native_biguint_route@12.ops[17]: 'load tmp%64#0' with 'load tmp%64#0 from l-stack (no copy)' -debug: Inserted main_echo_native_biguint_route@12.ops[19]: 'store tmp%65#0 to l-stack (copy)' -debug: Replaced main_echo_native_biguint_route@12.ops[21]: 'load tmp%65#0' with 'load tmp%65#0 from l-stack (no copy)' -debug: Inserted main_echo_native_biguint_route@12.ops[23]: 'store len_%0#0 to l-stack (copy)' -debug: Replaced main_echo_native_biguint_route@12.ops[25]: 'load len_%0#0' with 'load len_%0#0 from l-stack (no copy)' -debug: Inserted main_echo_native_biguint_route@12.ops[28]: 'store no_overflow%0#0 to l-stack (copy)' -debug: Replaced main_echo_native_biguint_route@12.ops[30]: 'load no_overflow%0#0' with 'load no_overflow%0#0 from l-stack (no copy)' -debug: Inserted main_echo_native_biguint_route@12.ops[42]: 'store tmp%67#0 to l-stack (copy)' -debug: Replaced main_echo_native_biguint_route@12.ops[44]: 'load tmp%67#0' with 'load tmp%67#0 from l-stack (no copy)' -debug: Inserted main_echo_native_biguint_route@12.ops[34]: 'store b_zeros%0#0 to l-stack (copy)' -debug: Replaced main_echo_native_biguint_route@12.ops[37]: 'load b_zeros%0#0' with 'load b_zeros%0#0 from l-stack (no copy)' -debug: Inserted main_echo_native_biguint_route@12.ops[39]: 'store tmp%66#0 to l-stack (copy)' -debug: Replaced main_echo_native_biguint_route@12.ops[42]: 'load tmp%66#0' with 'load tmp%66#0 from l-stack (no copy)' -debug: Inserted main_echo_native_biguint_route@12.ops[22]: 'store tmp%65#0 to l-stack (copy)' -debug: Replaced main_echo_native_biguint_route@12.ops[37]: 'load tmp%65#0' with 'load tmp%65#0 from l-stack (no copy)' -debug: Inserted main_echo_native_tuple_route@13.ops[1]: 'store tmp%68#0 to l-stack (copy)' -debug: Replaced main_echo_native_tuple_route@13.ops[3]: 'load tmp%68#0' with 'load tmp%68#0 from l-stack (no copy)' -debug: Inserted main_echo_native_tuple_route@13.ops[5]: 'store tmp%69#0 to l-stack (copy)' -debug: Replaced main_echo_native_tuple_route@13.ops[7]: 'load tmp%69#0' with 'load tmp%69#0 from l-stack (no copy)' -debug: Inserted main_echo_native_tuple_route@13.ops[10]: 'store tmp%70#0 to l-stack (copy)' -debug: Replaced main_echo_native_tuple_route@13.ops[12]: 'load tmp%70#0' with 'load tmp%70#0 from l-stack (no copy)' -debug: Inserted main_echo_native_tuple_route@13.ops[15]: 'store tmp%71#0 to l-stack (copy)' -debug: Replaced main_echo_native_tuple_route@13.ops[17]: 'load tmp%71#0' with 'load tmp%71#0 from l-stack (no copy)' -debug: Inserted main_echo_native_tuple_route@13.ops[21]: 'store tmp%73#0 to l-stack (copy)' -debug: Replaced main_echo_native_tuple_route@13.ops[23]: 'load tmp%73#0' with 'load tmp%73#0 from l-stack (no copy)' -debug: Inserted main_echo_native_tuple_route@13.ops[27]: 'store tmp%75#0 to l-stack (copy)' -debug: Replaced main_echo_native_tuple_route@13.ops[29]: 'load tmp%75#0' with 'load tmp%75#0 from l-stack (no copy)' -debug: Inserted main_echo_native_tuple_route@13.ops[42]: 'store awst_tmp%0#0 to l-stack (copy)' -debug: Replaced main_echo_native_tuple_route@13.ops[44]: 'load awst_tmp%0#0' with 'load awst_tmp%0#0 from l-stack (no copy)' -debug: Inserted main_echo_native_tuple_route@13.ops[46]: 'store length%2#0 to l-stack (copy)' -debug: Replaced main_echo_native_tuple_route@13.ops[48]: 'load length%2#0' with 'load length%2#0 from l-stack (no copy)' -debug: Inserted main_echo_native_tuple_route@13.ops[50]: 'store as_bytes%2#0 to l-stack (copy)' -debug: Replaced main_echo_native_tuple_route@13.ops[52]: 'load as_bytes%2#0' with 'load as_bytes%2#0 from l-stack (no copy)' -debug: Inserted main_echo_native_tuple_route@13.ops[54]: 'store length_uint16%2#0 to l-stack (copy)' -debug: Replaced main_echo_native_tuple_route@13.ops[56]: 'load length_uint16%2#0' with 'load length_uint16%2#0 from l-stack (no copy)' -debug: Inserted main_echo_native_tuple_route@13.ops[62]: 'store length%3#0 to l-stack (copy)' -debug: Replaced main_echo_native_tuple_route@13.ops[64]: 'load length%3#0' with 'load length%3#0 from l-stack (no copy)' -debug: Inserted main_echo_native_tuple_route@13.ops[66]: 'store as_bytes%3#0 to l-stack (copy)' -debug: Replaced main_echo_native_tuple_route@13.ops[68]: 'load as_bytes%3#0' with 'load as_bytes%3#0 from l-stack (no copy)' -debug: Inserted main_echo_native_tuple_route@13.ops[70]: 'store length_uint16%3#0 to l-stack (copy)' -debug: Replaced main_echo_native_tuple_route@13.ops[72]: 'load length_uint16%3#0' with 'load length_uint16%3#0 from l-stack (no copy)' -debug: Inserted main_echo_native_tuple_route@13.ops[81]: 'store len_%1#0 to l-stack (copy)' -debug: Replaced main_echo_native_tuple_route@13.ops[83]: 'load len_%1#0' with 'load len_%1#0 from l-stack (no copy)' -debug: Inserted main_echo_native_tuple_route@13.ops[86]: 'store no_overflow%1#0 to l-stack (copy)' -debug: Replaced main_echo_native_tuple_route@13.ops[88]: 'load no_overflow%1#0' with 'load no_overflow%1#0 from l-stack (no copy)' -debug: Inserted main_echo_native_tuple_route@13.ops[103]: 'store current_tail_offset%1#0 to l-stack (copy)' -debug: Replaced main_echo_native_tuple_route@13.ops[105]: 'load current_tail_offset%1#0' with 'load current_tail_offset%1#0 from l-stack (no copy)' -debug: Inserted main_echo_native_tuple_route@13.ops[107]: 'store as_bytes%5#0 to l-stack (copy)' -debug: Replaced main_echo_native_tuple_route@13.ops[109]: 'load as_bytes%5#0' with 'load as_bytes%5#0 from l-stack (no copy)' -debug: Inserted main_echo_native_tuple_route@13.ops[115]: 'store encoded_tuple_buffer%2#0 to l-stack (copy)' -debug: Replaced main_echo_native_tuple_route@13.ops[117]: 'load encoded_tuple_buffer%2#0' with 'load encoded_tuple_buffer%2#0 from l-stack (no copy)' -debug: Inserted main_echo_native_tuple_route@13.ops[120]: 'store encoded_tuple_buffer%3#0 to l-stack (copy)' -debug: Replaced main_echo_native_tuple_route@13.ops[122]: 'load encoded_tuple_buffer%3#0' with 'load encoded_tuple_buffer%3#0 from l-stack (no copy)' -debug: Inserted main_echo_native_tuple_route@13.ops[125]: 'store encoded_tuple_buffer%4#0 to l-stack (copy)' -debug: Replaced main_echo_native_tuple_route@13.ops[127]: 'load encoded_tuple_buffer%4#0' with 'load encoded_tuple_buffer%4#0 from l-stack (no copy)' -debug: Inserted main_echo_native_tuple_route@13.ops[130]: 'store encoded_tuple_buffer%5#0 to l-stack (copy)' -debug: Replaced main_echo_native_tuple_route@13.ops[132]: 'load encoded_tuple_buffer%5#0' with 'load encoded_tuple_buffer%5#0 from l-stack (no copy)' -debug: Inserted main_echo_native_tuple_route@13.ops[139]: 'store tmp%79#0 to l-stack (copy)' -debug: Replaced main_echo_native_tuple_route@13.ops[141]: 'load tmp%79#0' with 'load tmp%79#0 from l-stack (no copy)' -debug: Inserted main_echo_native_tuple_route@13.ops[92]: 'store b_zeros%1#0 to l-stack (copy)' -debug: Replaced main_echo_native_tuple_route@13.ops[95]: 'load b_zeros%1#0' with 'load b_zeros%1#0 from l-stack (no copy)' -debug: Inserted main_echo_native_tuple_route@13.ops[100]: 'store data_length%0#0 to l-stack (copy)' -debug: Replaced main_echo_native_tuple_route@13.ops[103]: 'load data_length%0#0' with 'load data_length%0#0 from l-stack (no copy)' -debug: Inserted main_echo_native_tuple_route@13.ops[113]: 'store offset_as_uint16%1#0 to l-stack (copy)' -debug: Replaced main_echo_native_tuple_route@13.ops[116]: 'load offset_as_uint16%1#0' with 'load offset_as_uint16%1#0 from l-stack (no copy)' -debug: Inserted main_echo_native_tuple_route@13.ops[138]: 'store encoded_tuple_buffer%6#0 to l-stack (copy)' -debug: Replaced main_echo_native_tuple_route@13.ops[141]: 'load encoded_tuple_buffer%6#0' with 'load encoded_tuple_buffer%6#0 from l-stack (no copy)' -debug: Inserted main_echo_native_tuple_route@13.ops[33]: 'store tmp%77#0 to l-stack (copy)' -debug: Replaced main_echo_native_tuple_route@13.ops[38]: 'load tmp%77#0' with 'load tmp%77#0 from l-stack (no copy)' -debug: Inserted main_echo_native_tuple_route@13.ops[31]: 'store tmp%76#0 to l-stack (copy)' -debug: Replaced main_echo_native_tuple_route@13.ops[38]: 'load tmp%76#0' with 'load tmp%76#0 from l-stack (no copy)' -debug: Inserted main_echo_native_tuple_route@13.ops[25]: 'store tmp%74#0 to l-stack (copy)' -debug: Replaced main_echo_native_tuple_route@13.ops[38]: 'load tmp%74#0' with 'load tmp%74#0 from l-stack (no copy)' -debug: Inserted main_echo_native_tuple_route@13.ops[48]: 'store awst_tmp%0#0 to l-stack (copy)' -debug: Replaced main_echo_native_tuple_route@13.ops[61]: 'load awst_tmp%0#0' with 'load awst_tmp%0#0 from l-stack (no copy)' -debug: Inserted main_echo_native_tuple_route@13.ops[65]: 'store awst_tmp%1#0 to l-stack (copy)' -debug: Replaced main_echo_native_tuple_route@13.ops[78]: 'load awst_tmp%1#0' with 'load awst_tmp%1#0 from l-stack (no copy)' -debug: Inserted main_echo_native_tuple_route@13.ops[85]: 'store awst_tmp%3#0 to l-stack (copy)' -debug: Replaced main_echo_native_tuple_route@13.ops[100]: 'load awst_tmp%3#0' with 'load awst_tmp%3#0 from l-stack (no copy)' -debug: Inserted main_echo_native_tuple_route@13.ops[19]: 'store tmp%72#0 to l-stack (copy)' -debug: Replaced main_echo_native_tuple_route@13.ops[38]: 'load tmp%72#0' with 'load tmp%72#0 from l-stack (no copy)' -debug: Inserted main_echo_native_tuple_route@13.ops[45]: 'store awst_tmp%1#0 to l-stack (copy)' -debug: Replaced main_echo_native_tuple_route@13.ops[66]: 'load awst_tmp%1#0' with 'load awst_tmp%1#0 from l-stack (no copy)' -debug: Inserted main_echo_native_tuple_route@13.ops[105]: 'store tmp%78#0 to l-stack (copy)' -debug: Replaced main_echo_native_tuple_route@13.ops[135]: 'load tmp%78#0' with 'load tmp%78#0 from l-stack (no copy)' -debug: Inserted main_echo_native_tuple_route@13.ops[108]: 'store encoded_value%2#0 to l-stack (copy)' -debug: Replaced main_echo_native_tuple_route@13.ops[141]: 'load encoded_value%2#0' with 'load encoded_value%2#0 from l-stack (no copy)' -debug: Inserted main_echo_native_tuple_route@13.ops[44]: 'store awst_tmp%2#0 to l-stack (copy)' -debug: Replaced main_echo_native_tuple_route@13.ops[84]: 'load awst_tmp%2#0' with 'load awst_tmp%2#0 from l-stack (no copy)' -debug: Inserted main_echo_native_tuple_route@13.ops[43]: 'store awst_tmp%3#0 to l-stack (copy)' -debug: Replaced main_echo_native_tuple_route@13.ops[88]: 'load awst_tmp%3#0' with 'load awst_tmp%3#0 from l-stack (no copy)' -debug: Inserted main_echo_native_tuple_route@13.ops[67]: 'store encoded_value%2#0 to l-stack (copy)' -debug: Replaced main_echo_native_tuple_route@13.ops[110]: 'load encoded_value%2#0' with 'load encoded_value%2#0 from l-stack (no copy)' -debug: Inserted main_echo_native_tuple_route@13.ops[88]: 'store val_as_bytes%1#0 to l-stack (copy)' -debug: Replaced main_echo_native_tuple_route@13.ops[135]: 'load val_as_bytes%1#0' with 'load val_as_bytes%1#0 from l-stack (no copy)' -debug: Inserted main_echo_native_tuple_route@13.ops[85]: 'store encoded_value%3#0 to l-stack (copy)' -debug: Replaced main_echo_native_tuple_route@13.ops[151]: 'load encoded_value%3#0' with 'load encoded_value%3#0 from l-stack (no copy)' -debug: Inserted main_return_args_after_14th_route@14.ops[1]: 'store tmp%80#0 to l-stack (copy)' -debug: Replaced main_return_args_after_14th_route@14.ops[3]: 'load tmp%80#0' with 'load tmp%80#0 from l-stack (no copy)' -debug: Inserted main_return_args_after_14th_route@14.ops[5]: 'store tmp%81#0 to l-stack (copy)' -debug: Replaced main_return_args_after_14th_route@14.ops[7]: 'load tmp%81#0' with 'load tmp%81#0 from l-stack (no copy)' -debug: Inserted main_return_args_after_14th_route@14.ops[10]: 'store tmp%82#0 to l-stack (copy)' -debug: Replaced main_return_args_after_14th_route@14.ops[12]: 'load tmp%82#0' with 'load tmp%82#0 from l-stack (no copy)' -debug: Inserted main_return_args_after_14th_route@14.ops[43]: 'store tmp%97#0 to l-stack (copy)' -debug: Replaced main_return_args_after_14th_route@14.ops[45]: 'load tmp%97#0' with 'load tmp%97#0 from l-stack (no copy)' -debug: Inserted main_return_args_after_14th_route@14.ops[49]: 'store tmp%99#0 to l-stack (copy)' -debug: Replaced main_return_args_after_14th_route@14.ops[51]: 'load tmp%99#0' with 'load tmp%99#0 from l-stack (no copy)' -debug: Inserted main_return_args_after_14th_route@14.ops[55]: 'store tmp%101#0 to l-stack (copy)' -debug: Replaced main_return_args_after_14th_route@14.ops[57]: 'load tmp%101#0' with 'load tmp%101#0 from l-stack (no copy)' -debug: Inserted main_return_args_after_14th_route@14.ops[61]: 'store tmp%103#0 to l-stack (copy)' -debug: Replaced main_return_args_after_14th_route@14.ops[63]: 'load tmp%103#0' with 'load tmp%103#0 from l-stack (no copy)' -debug: Inserted main_return_args_after_14th_route@14.ops[67]: 'store tmp%105#0 to l-stack (copy)' -debug: Replaced main_return_args_after_14th_route@14.ops[69]: 'load tmp%105#0' with 'load tmp%105#0 from l-stack (no copy)' -debug: Inserted main_return_args_after_14th_route@14.ops[73]: 'store tmp%107#0 to l-stack (copy)' -debug: Replaced main_return_args_after_14th_route@14.ops[75]: 'load tmp%107#0' with 'load tmp%107#0 from l-stack (no copy)' -debug: Inserted main_return_args_after_14th_route@14.ops[103]: 'store tmp%110#0 to l-stack (copy)' -debug: Replaced main_return_args_after_14th_route@14.ops[105]: 'load tmp%110#0' with 'load tmp%110#0 from l-stack (no copy)' -debug: Inserted main_return_args_after_14th_route@14.ops[99]: 'store tmp%109#0 to l-stack (copy)' -debug: Replaced main_return_args_after_14th_route@14.ops[102]: 'load tmp%109#0' with 'load tmp%109#0 from l-stack (no copy)' -debug: Inserted main_return_args_after_14th_route@14.ops[77]: 'store tmp%108#0 to l-stack (copy)' -debug: Replaced main_return_args_after_14th_route@14.ops[98]: 'load tmp%108#0' with 'load tmp%108#0 from l-stack (no copy)' -debug: Inserted main_return_args_after_14th_route@14.ops[71]: 'store tmp%106#0 to l-stack (copy)' -debug: Replaced main_return_args_after_14th_route@14.ops[98]: 'load tmp%106#0' with 'load tmp%106#0 from l-stack (no copy)' -debug: Inserted main_return_args_after_14th_route@14.ops[65]: 'store tmp%104#0 to l-stack (copy)' -debug: Replaced main_return_args_after_14th_route@14.ops[98]: 'load tmp%104#0' with 'load tmp%104#0 from l-stack (no copy)' -debug: Inserted main_return_args_after_14th_route@14.ops[59]: 'store tmp%102#0 to l-stack (copy)' -debug: Replaced main_return_args_after_14th_route@14.ops[98]: 'load tmp%102#0' with 'load tmp%102#0 from l-stack (no copy)' -debug: Inserted main_return_args_after_14th_route@14.ops[53]: 'store tmp%100#0 to l-stack (copy)' -debug: Replaced main_return_args_after_14th_route@14.ops[98]: 'load tmp%100#0' with 'load tmp%100#0 from l-stack (no copy)' -debug: Inserted main_return_args_after_14th_route@14.ops[47]: 'store tmp%98#0 to l-stack (copy)' -debug: Replaced main_return_args_after_14th_route@14.ops[98]: 'load tmp%98#0' with 'load tmp%98#0 from l-stack (no copy)' -debug: Inserted main_return_args_after_14th_route@14.ops[41]: 'store tmp%96#0 to l-stack (copy)' -debug: Replaced main_return_args_after_14th_route@14.ops[98]: 'load tmp%96#0' with 'load tmp%96#0 from l-stack (no copy)' -debug: Inserted main_return_args_after_14th_route@14.ops[39]: 'store tmp%95#0 to l-stack (copy)' -debug: Replaced main_return_args_after_14th_route@14.ops[98]: 'load tmp%95#0' with 'load tmp%95#0 from l-stack (no copy)' -debug: Inserted main_return_args_after_14th_route@14.ops[37]: 'store tmp%94#0 to l-stack (copy)' -debug: Replaced main_return_args_after_14th_route@14.ops[98]: 'load tmp%94#0' with 'load tmp%94#0 from l-stack (no copy)' -debug: Inserted main_return_args_after_14th_route@14.ops[35]: 'store tmp%93#0 to l-stack (copy)' -debug: Replaced main_return_args_after_14th_route@14.ops[98]: 'load tmp%93#0' with 'load tmp%93#0 from l-stack (no copy)' -debug: Inserted main_return_args_after_14th_route@14.ops[33]: 'store tmp%92#0 to l-stack (copy)' -debug: Replaced main_return_args_after_14th_route@14.ops[98]: 'load tmp%92#0' with 'load tmp%92#0 from l-stack (no copy)' -debug: Inserted main_return_args_after_14th_route@14.ops[31]: 'store tmp%91#0 to l-stack (copy)' -debug: Replaced main_return_args_after_14th_route@14.ops[98]: 'load tmp%91#0' with 'load tmp%91#0 from l-stack (no copy)' -debug: Inserted main_return_args_after_14th_route@14.ops[29]: 'store tmp%90#0 to l-stack (copy)' -debug: Replaced main_return_args_after_14th_route@14.ops[98]: 'load tmp%90#0' with 'load tmp%90#0 from l-stack (no copy)' -debug: Inserted main_return_args_after_14th_route@14.ops[27]: 'store tmp%89#0 to l-stack (copy)' -debug: Replaced main_return_args_after_14th_route@14.ops[98]: 'load tmp%89#0' with 'load tmp%89#0 from l-stack (no copy)' -debug: Inserted main_return_args_after_14th_route@14.ops[25]: 'store tmp%88#0 to l-stack (copy)' -debug: Replaced main_return_args_after_14th_route@14.ops[98]: 'load tmp%88#0' with 'load tmp%88#0 from l-stack (no copy)' -debug: Inserted main_return_args_after_14th_route@14.ops[23]: 'store tmp%87#0 to l-stack (copy)' -debug: Replaced main_return_args_after_14th_route@14.ops[98]: 'load tmp%87#0' with 'load tmp%87#0 from l-stack (no copy)' -debug: Inserted main_return_args_after_14th_route@14.ops[21]: 'store tmp%86#0 to l-stack (copy)' -debug: Replaced main_return_args_after_14th_route@14.ops[98]: 'load tmp%86#0' with 'load tmp%86#0 from l-stack (no copy)' -debug: Inserted main_return_args_after_14th_route@14.ops[19]: 'store tmp%85#0 to l-stack (copy)' -debug: Replaced main_return_args_after_14th_route@14.ops[98]: 'load tmp%85#0' with 'load tmp%85#0 from l-stack (no copy)' -debug: Inserted main_return_args_after_14th_route@14.ops[17]: 'store tmp%84#0 to l-stack (copy)' -debug: Replaced main_return_args_after_14th_route@14.ops[98]: 'load tmp%84#0' with 'load tmp%84#0 from l-stack (no copy)' -debug: Inserted main_return_args_after_14th_route@14.ops[15]: 'store tmp%83#0 to l-stack (copy)' -debug: Replaced main_return_args_after_14th_route@14.ops[98]: 'load tmp%83#0' with 'load tmp%83#0 from l-stack (no copy)' -debug: Inserted main_bare_routing@17.ops[1]: 'store tmp%111#0 to l-stack (copy)' -debug: Replaced main_bare_routing@17.ops[3]: 'load tmp%111#0' with 'load tmp%111#0 from l-stack (no copy)' -debug: Inserted main_bare_routing@17.ops[5]: 'store not%tmp%111#0 to l-stack (copy)' -debug: Replaced main_bare_routing@17.ops[7]: 'load not%tmp%111#0' with 'load not%tmp%111#0 from l-stack (no copy)' -debug: Inserted main_bare_routing@17.ops[10]: 'store tmp%112#0 to l-stack (copy)' -debug: Replaced main_bare_routing@17.ops[12]: 'load tmp%112#0' with 'load tmp%112#0 from l-stack (no copy)' -debug: Inserted main_bare_routing@17.ops[14]: 'store tmp%113#0 to l-stack (copy)' -debug: Replaced main_bare_routing@17.ops[16]: 'load tmp%113#0' with 'load tmp%113#0 from l-stack (no copy)' +debug: Inserted main_no_args_route@3.ops[1]: 'store tmp%8#0 to l-stack (copy)' +debug: Replaced main_no_args_route@3.ops[3]: 'load tmp%8#0' with 'load tmp%8#0 from l-stack (no copy)' +debug: Inserted main_no_args_route@3.ops[5]: 'store tmp%9#0 to l-stack (copy)' +debug: Replaced main_no_args_route@3.ops[7]: 'load tmp%9#0' with 'load tmp%9#0 from l-stack (no copy)' +debug: Inserted main_no_args_route@3.ops[10]: 'store tmp%10#0 to l-stack (copy)' +debug: Replaced main_no_args_route@3.ops[12]: 'load tmp%10#0' with 'load tmp%10#0 from l-stack (no copy)' +debug: Inserted main_no_args_route@3.ops[15]: 'store tmp%11#0 to l-stack (copy)' +debug: Replaced main_no_args_route@3.ops[17]: 'load tmp%11#0' with 'load tmp%11#0 from l-stack (no copy)' +debug: Inserted main_no_args_route@3.ops[23]: 'store tmp%12#0 to l-stack (copy)' +debug: Replaced main_no_args_route@3.ops[25]: 'load tmp%12#0' with 'load tmp%12#0 from l-stack (no copy)' +debug: Inserted main_no_args_route@3.ops[19]: 'store val_as_bytes%0#0 to l-stack (copy)' +debug: Replaced main_no_args_route@3.ops[22]: 'load val_as_bytes%0#0' with 'load val_as_bytes%0#0 from l-stack (no copy)' +debug: Inserted main_log_route@4.ops[1]: 'store tmp%13#0 to l-stack (copy)' +debug: Replaced main_log_route@4.ops[3]: 'load tmp%13#0' with 'load tmp%13#0 from l-stack (no copy)' +debug: Inserted main_log_route@4.ops[5]: 'store tmp%14#0 to l-stack (copy)' +debug: Replaced main_log_route@4.ops[7]: 'load tmp%14#0' with 'load tmp%14#0 from l-stack (no copy)' +debug: Inserted main_log_route@4.ops[10]: 'store tmp%15#0 to l-stack (copy)' +debug: Replaced main_log_route@4.ops[12]: 'load tmp%15#0' with 'load tmp%15#0 from l-stack (no copy)' +debug: Inserted main_log_route@4.ops[15]: 'store tmp%16#0 to l-stack (copy)' +debug: Replaced main_log_route@4.ops[17]: 'load tmp%16#0' with 'load tmp%16#0 from l-stack (no copy)' +debug: Inserted main_log_route@5.ops[1]: 'store tmp%17#0 to l-stack (copy)' +debug: Replaced main_log_route@5.ops[3]: 'load tmp%17#0' with 'load tmp%17#0 from l-stack (no copy)' +debug: Inserted main_log_route@5.ops[5]: 'store tmp%18#0 to l-stack (copy)' +debug: Replaced main_log_route@5.ops[7]: 'load tmp%18#0' with 'load tmp%18#0 from l-stack (no copy)' +debug: Inserted main_log_route@5.ops[10]: 'store tmp%19#0 to l-stack (copy)' +debug: Replaced main_log_route@5.ops[12]: 'load tmp%19#0' with 'load tmp%19#0 from l-stack (no copy)' +debug: Inserted main_log_route@5.ops[15]: 'store tmp%20#0 to l-stack (copy)' +debug: Replaced main_log_route@5.ops[17]: 'load tmp%20#0' with 'load tmp%20#0 from l-stack (no copy)' +debug: Inserted main_log_route@6.ops[1]: 'store tmp%21#0 to l-stack (copy)' +debug: Replaced main_log_route@6.ops[3]: 'load tmp%21#0' with 'load tmp%21#0 from l-stack (no copy)' +debug: Inserted main_log_route@6.ops[5]: 'store tmp%22#0 to l-stack (copy)' +debug: Replaced main_log_route@6.ops[7]: 'load tmp%22#0' with 'load tmp%22#0 from l-stack (no copy)' +debug: Inserted main_log_route@6.ops[10]: 'store tmp%23#0 to l-stack (copy)' +debug: Replaced main_log_route@6.ops[12]: 'load tmp%23#0' with 'load tmp%23#0 from l-stack (no copy)' +debug: Inserted main_log_route@6.ops[15]: 'store tmp%24#0 to l-stack (copy)' +debug: Replaced main_log_route@6.ops[17]: 'load tmp%24#0' with 'load tmp%24#0 from l-stack (no copy)' +debug: Inserted main_log_route@7.ops[1]: 'store tmp%25#0 to l-stack (copy)' +debug: Replaced main_log_route@7.ops[3]: 'load tmp%25#0' with 'load tmp%25#0 from l-stack (no copy)' +debug: Inserted main_log_route@7.ops[5]: 'store tmp%26#0 to l-stack (copy)' +debug: Replaced main_log_route@7.ops[7]: 'load tmp%26#0' with 'load tmp%26#0 from l-stack (no copy)' +debug: Inserted main_log_route@7.ops[10]: 'store tmp%27#0 to l-stack (copy)' +debug: Replaced main_log_route@7.ops[12]: 'load tmp%27#0' with 'load tmp%27#0 from l-stack (no copy)' +debug: Inserted main_log_route@7.ops[15]: 'store tmp%28#0 to l-stack (copy)' +debug: Replaced main_log_route@7.ops[17]: 'load tmp%28#0' with 'load tmp%28#0 from l-stack (no copy)' +debug: Inserted main_log_route@8.ops[1]: 'store tmp%29#0 to l-stack (copy)' +debug: Replaced main_log_route@8.ops[3]: 'load tmp%29#0' with 'load tmp%29#0 from l-stack (no copy)' +debug: Inserted main_log_route@8.ops[5]: 'store tmp%30#0 to l-stack (copy)' +debug: Replaced main_log_route@8.ops[7]: 'load tmp%30#0' with 'load tmp%30#0 from l-stack (no copy)' +debug: Inserted main_log_route@8.ops[10]: 'store tmp%31#0 to l-stack (copy)' +debug: Replaced main_log_route@8.ops[12]: 'load tmp%31#0' with 'load tmp%31#0 from l-stack (no copy)' +debug: Inserted main_log_route@8.ops[15]: 'store tmp%32#0 to l-stack (copy)' +debug: Replaced main_log_route@8.ops[17]: 'load tmp%32#0' with 'load tmp%32#0 from l-stack (no copy)' +debug: Inserted main_log_route@9.ops[1]: 'store tmp%33#0 to l-stack (copy)' +debug: Replaced main_log_route@9.ops[3]: 'load tmp%33#0' with 'load tmp%33#0 from l-stack (no copy)' +debug: Inserted main_log_route@9.ops[5]: 'store tmp%34#0 to l-stack (copy)' +debug: Replaced main_log_route@9.ops[7]: 'load tmp%34#0' with 'load tmp%34#0 from l-stack (no copy)' +debug: Inserted main_log_route@9.ops[10]: 'store tmp%35#0 to l-stack (copy)' +debug: Replaced main_log_route@9.ops[12]: 'load tmp%35#0' with 'load tmp%35#0 from l-stack (no copy)' +debug: Inserted main_log_route@9.ops[15]: 'store tmp%36#0 to l-stack (copy)' +debug: Replaced main_log_route@9.ops[17]: 'load tmp%36#0' with 'load tmp%36#0 from l-stack (no copy)' +debug: Inserted main_log_route@9.ops[19]: 'store tmp%37#0 to l-stack (copy)' +debug: Replaced main_log_route@9.ops[21]: 'load tmp%37#0' with 'load tmp%37#0 from l-stack (no copy)' +debug: Inserted main_log_route@9.ops[25]: 'store tmp%39#0 to l-stack (copy)' +debug: Replaced main_log_route@9.ops[27]: 'load tmp%39#0' with 'load tmp%39#0 from l-stack (no copy)' +debug: Inserted main_log_route@9.ops[29]: 'store tmp%40#0 to l-stack (copy)' +debug: Replaced main_log_route@9.ops[31]: 'load tmp%40#0' with 'load tmp%40#0 from l-stack (no copy)' +debug: Inserted main_log_route@9.ops[35]: 'store tmp%42#0 to l-stack (copy)' +debug: Replaced main_log_route@9.ops[37]: 'load tmp%42#0' with 'load tmp%42#0 from l-stack (no copy)' +debug: Inserted main_log_route@9.ops[39]: 'store tmp%43#0 to l-stack (copy)' +debug: Replaced main_log_route@9.ops[41]: 'load tmp%43#0' with 'load tmp%43#0 from l-stack (no copy)' +debug: Inserted main_log_route@9.ops[43]: 'store tmp%44#0 to l-stack (copy)' +debug: Replaced main_log_route@9.ops[47]: 'load tmp%44#0' with 'load tmp%44#0 from l-stack (no copy)' +debug: Inserted main_log_route@9.ops[33]: 'store tmp%41#0 to l-stack (copy)' +debug: Replaced main_log_route@9.ops[47]: 'load tmp%41#0' with 'load tmp%41#0 from l-stack (no copy)' +debug: Inserted main_log_route@9.ops[23]: 'store tmp%38#0 to l-stack (copy)' +debug: Replaced main_log_route@9.ops[47]: 'load tmp%38#0' with 'load tmp%38#0 from l-stack (no copy)' +debug: Inserted main_echo_native_string_route@10.ops[1]: 'store tmp%45#0 to l-stack (copy)' +debug: Replaced main_echo_native_string_route@10.ops[3]: 'load tmp%45#0' with 'load tmp%45#0 from l-stack (no copy)' +debug: Inserted main_echo_native_string_route@10.ops[5]: 'store tmp%46#0 to l-stack (copy)' +debug: Replaced main_echo_native_string_route@10.ops[7]: 'load tmp%46#0' with 'load tmp%46#0 from l-stack (no copy)' +debug: Inserted main_echo_native_string_route@10.ops[10]: 'store tmp%47#0 to l-stack (copy)' +debug: Replaced main_echo_native_string_route@10.ops[12]: 'load tmp%47#0' with 'load tmp%47#0 from l-stack (no copy)' +debug: Inserted main_echo_native_string_route@10.ops[15]: 'store tmp%48#0 to l-stack (copy)' +debug: Replaced main_echo_native_string_route@10.ops[17]: 'load tmp%48#0' with 'load tmp%48#0 from l-stack (no copy)' +debug: Inserted main_echo_native_string_route@10.ops[19]: 'store tmp%49#0 to l-stack (copy)' +debug: Replaced main_echo_native_string_route@10.ops[21]: 'load tmp%49#0' with 'load tmp%49#0 from l-stack (no copy)' +debug: Inserted main_echo_native_string_route@10.ops[23]: 'store tmp%50#0 to l-stack (copy)' +debug: Replaced main_echo_native_string_route@10.ops[25]: 'load tmp%50#0' with 'load tmp%50#0 from l-stack (no copy)' +debug: Inserted main_echo_native_string_route@10.ops[27]: 'store length%0#0 to l-stack (copy)' +debug: Replaced main_echo_native_string_route@10.ops[29]: 'load length%0#0' with 'load length%0#0 from l-stack (no copy)' +debug: Inserted main_echo_native_string_route@10.ops[31]: 'store as_bytes%0#0 to l-stack (copy)' +debug: Replaced main_echo_native_string_route@10.ops[33]: 'load as_bytes%0#0' with 'load as_bytes%0#0 from l-stack (no copy)' +debug: Inserted main_echo_native_string_route@10.ops[35]: 'store length_uint16%0#0 to l-stack (copy)' +debug: Replaced main_echo_native_string_route@10.ops[37]: 'load length_uint16%0#0' with 'load length_uint16%0#0 from l-stack (no copy)' +debug: Inserted main_echo_native_string_route@10.ops[44]: 'store tmp%51#0 to l-stack (copy)' +debug: Replaced main_echo_native_string_route@10.ops[46]: 'load tmp%51#0' with 'load tmp%51#0 from l-stack (no copy)' +debug: Inserted main_echo_native_string_route@10.ops[40]: 'store encoded_value%0#0 to l-stack (copy)' +debug: Replaced main_echo_native_string_route@10.ops[43]: 'load encoded_value%0#0' with 'load encoded_value%0#0 from l-stack (no copy)' +debug: Inserted main_echo_native_string_route@10.ops[26]: 'store tmp%50#0 to l-stack (copy)' +debug: Replaced main_echo_native_string_route@10.ops[39]: 'load tmp%50#0' with 'load tmp%50#0 from l-stack (no copy)' +debug: Inserted main_echo_native_bytes_route@11.ops[1]: 'store tmp%52#0 to l-stack (copy)' +debug: Replaced main_echo_native_bytes_route@11.ops[3]: 'load tmp%52#0' with 'load tmp%52#0 from l-stack (no copy)' +debug: Inserted main_echo_native_bytes_route@11.ops[5]: 'store tmp%53#0 to l-stack (copy)' +debug: Replaced main_echo_native_bytes_route@11.ops[7]: 'load tmp%53#0' with 'load tmp%53#0 from l-stack (no copy)' +debug: Inserted main_echo_native_bytes_route@11.ops[10]: 'store tmp%54#0 to l-stack (copy)' +debug: Replaced main_echo_native_bytes_route@11.ops[12]: 'load tmp%54#0' with 'load tmp%54#0 from l-stack (no copy)' +debug: Inserted main_echo_native_bytes_route@11.ops[15]: 'store tmp%55#0 to l-stack (copy)' +debug: Replaced main_echo_native_bytes_route@11.ops[17]: 'load tmp%55#0' with 'load tmp%55#0 from l-stack (no copy)' +debug: Inserted main_echo_native_bytes_route@11.ops[19]: 'store tmp%56#0 to l-stack (copy)' +debug: Replaced main_echo_native_bytes_route@11.ops[21]: 'load tmp%56#0' with 'load tmp%56#0 from l-stack (no copy)' +debug: Inserted main_echo_native_bytes_route@11.ops[23]: 'store tmp%57#0 to l-stack (copy)' +debug: Replaced main_echo_native_bytes_route@11.ops[25]: 'load tmp%57#0' with 'load tmp%57#0 from l-stack (no copy)' +debug: Inserted main_echo_native_bytes_route@11.ops[27]: 'store length%1#0 to l-stack (copy)' +debug: Replaced main_echo_native_bytes_route@11.ops[29]: 'load length%1#0' with 'load length%1#0 from l-stack (no copy)' +debug: Inserted main_echo_native_bytes_route@11.ops[31]: 'store as_bytes%1#0 to l-stack (copy)' +debug: Replaced main_echo_native_bytes_route@11.ops[33]: 'load as_bytes%1#0' with 'load as_bytes%1#0 from l-stack (no copy)' +debug: Inserted main_echo_native_bytes_route@11.ops[35]: 'store length_uint16%1#0 to l-stack (copy)' +debug: Replaced main_echo_native_bytes_route@11.ops[37]: 'load length_uint16%1#0' with 'load length_uint16%1#0 from l-stack (no copy)' +debug: Inserted main_echo_native_bytes_route@11.ops[44]: 'store tmp%58#0 to l-stack (copy)' +debug: Replaced main_echo_native_bytes_route@11.ops[46]: 'load tmp%58#0' with 'load tmp%58#0 from l-stack (no copy)' +debug: Inserted main_echo_native_bytes_route@11.ops[40]: 'store encoded_value%1#0 to l-stack (copy)' +debug: Replaced main_echo_native_bytes_route@11.ops[43]: 'load encoded_value%1#0' with 'load encoded_value%1#0 from l-stack (no copy)' +debug: Inserted main_echo_native_bytes_route@11.ops[26]: 'store tmp%57#0 to l-stack (copy)' +debug: Replaced main_echo_native_bytes_route@11.ops[39]: 'load tmp%57#0' with 'load tmp%57#0 from l-stack (no copy)' +debug: Inserted main_echo_native_uint64_route@12.ops[1]: 'store tmp%59#0 to l-stack (copy)' +debug: Replaced main_echo_native_uint64_route@12.ops[3]: 'load tmp%59#0' with 'load tmp%59#0 from l-stack (no copy)' +debug: Inserted main_echo_native_uint64_route@12.ops[5]: 'store tmp%60#0 to l-stack (copy)' +debug: Replaced main_echo_native_uint64_route@12.ops[7]: 'load tmp%60#0' with 'load tmp%60#0 from l-stack (no copy)' +debug: Inserted main_echo_native_uint64_route@12.ops[10]: 'store tmp%61#0 to l-stack (copy)' +debug: Replaced main_echo_native_uint64_route@12.ops[12]: 'load tmp%61#0' with 'load tmp%61#0 from l-stack (no copy)' +debug: Inserted main_echo_native_uint64_route@12.ops[15]: 'store tmp%62#0 to l-stack (copy)' +debug: Replaced main_echo_native_uint64_route@12.ops[17]: 'load tmp%62#0' with 'load tmp%62#0 from l-stack (no copy)' +debug: Inserted main_echo_native_uint64_route@12.ops[19]: 'store tmp%63#0 to l-stack (copy)' +debug: Replaced main_echo_native_uint64_route@12.ops[21]: 'load tmp%63#0' with 'load tmp%63#0 from l-stack (no copy)' +debug: Inserted main_echo_native_uint64_route@12.ops[23]: 'store tmp%64#0 to l-stack (copy)' +debug: Replaced main_echo_native_uint64_route@12.ops[25]: 'load tmp%64#0' with 'load tmp%64#0 from l-stack (no copy)' +debug: Inserted main_echo_native_uint64_route@12.ops[31]: 'store tmp%65#0 to l-stack (copy)' +debug: Replaced main_echo_native_uint64_route@12.ops[33]: 'load tmp%65#0' with 'load tmp%65#0 from l-stack (no copy)' +debug: Inserted main_echo_native_uint64_route@12.ops[27]: 'store val_as_bytes%1#0 to l-stack (copy)' +debug: Replaced main_echo_native_uint64_route@12.ops[30]: 'load val_as_bytes%1#0' with 'load val_as_bytes%1#0 from l-stack (no copy)' +debug: Inserted main_echo_native_biguint_route@13.ops[1]: 'store tmp%66#0 to l-stack (copy)' +debug: Replaced main_echo_native_biguint_route@13.ops[3]: 'load tmp%66#0' with 'load tmp%66#0 from l-stack (no copy)' +debug: Inserted main_echo_native_biguint_route@13.ops[5]: 'store tmp%67#0 to l-stack (copy)' +debug: Replaced main_echo_native_biguint_route@13.ops[7]: 'load tmp%67#0' with 'load tmp%67#0 from l-stack (no copy)' +debug: Inserted main_echo_native_biguint_route@13.ops[10]: 'store tmp%68#0 to l-stack (copy)' +debug: Replaced main_echo_native_biguint_route@13.ops[12]: 'load tmp%68#0' with 'load tmp%68#0 from l-stack (no copy)' +debug: Inserted main_echo_native_biguint_route@13.ops[15]: 'store tmp%69#0 to l-stack (copy)' +debug: Replaced main_echo_native_biguint_route@13.ops[17]: 'load tmp%69#0' with 'load tmp%69#0 from l-stack (no copy)' +debug: Inserted main_echo_native_biguint_route@13.ops[19]: 'store tmp%70#0 to l-stack (copy)' +debug: Replaced main_echo_native_biguint_route@13.ops[21]: 'load tmp%70#0' with 'load tmp%70#0 from l-stack (no copy)' +debug: Inserted main_echo_native_biguint_route@13.ops[23]: 'store len_%0#0 to l-stack (copy)' +debug: Replaced main_echo_native_biguint_route@13.ops[25]: 'load len_%0#0' with 'load len_%0#0 from l-stack (no copy)' +debug: Inserted main_echo_native_biguint_route@13.ops[28]: 'store no_overflow%0#0 to l-stack (copy)' +debug: Replaced main_echo_native_biguint_route@13.ops[30]: 'load no_overflow%0#0' with 'load no_overflow%0#0 from l-stack (no copy)' +debug: Inserted main_echo_native_biguint_route@13.ops[42]: 'store tmp%72#0 to l-stack (copy)' +debug: Replaced main_echo_native_biguint_route@13.ops[44]: 'load tmp%72#0' with 'load tmp%72#0 from l-stack (no copy)' +debug: Inserted main_echo_native_biguint_route@13.ops[34]: 'store b_zeros%0#0 to l-stack (copy)' +debug: Replaced main_echo_native_biguint_route@13.ops[37]: 'load b_zeros%0#0' with 'load b_zeros%0#0 from l-stack (no copy)' +debug: Inserted main_echo_native_biguint_route@13.ops[39]: 'store tmp%71#0 to l-stack (copy)' +debug: Replaced main_echo_native_biguint_route@13.ops[42]: 'load tmp%71#0' with 'load tmp%71#0 from l-stack (no copy)' +debug: Inserted main_echo_native_biguint_route@13.ops[22]: 'store tmp%70#0 to l-stack (copy)' +debug: Replaced main_echo_native_biguint_route@13.ops[37]: 'load tmp%70#0' with 'load tmp%70#0 from l-stack (no copy)' +debug: Inserted main_echo_native_tuple_route@14.ops[1]: 'store tmp%73#0 to l-stack (copy)' +debug: Replaced main_echo_native_tuple_route@14.ops[3]: 'load tmp%73#0' with 'load tmp%73#0 from l-stack (no copy)' +debug: Inserted main_echo_native_tuple_route@14.ops[5]: 'store tmp%74#0 to l-stack (copy)' +debug: Replaced main_echo_native_tuple_route@14.ops[7]: 'load tmp%74#0' with 'load tmp%74#0 from l-stack (no copy)' +debug: Inserted main_echo_native_tuple_route@14.ops[10]: 'store tmp%75#0 to l-stack (copy)' +debug: Replaced main_echo_native_tuple_route@14.ops[12]: 'load tmp%75#0' with 'load tmp%75#0 from l-stack (no copy)' +debug: Inserted main_echo_native_tuple_route@14.ops[15]: 'store tmp%76#0 to l-stack (copy)' +debug: Replaced main_echo_native_tuple_route@14.ops[17]: 'load tmp%76#0' with 'load tmp%76#0 from l-stack (no copy)' +debug: Inserted main_echo_native_tuple_route@14.ops[21]: 'store tmp%78#0 to l-stack (copy)' +debug: Replaced main_echo_native_tuple_route@14.ops[23]: 'load tmp%78#0' with 'load tmp%78#0 from l-stack (no copy)' +debug: Inserted main_echo_native_tuple_route@14.ops[27]: 'store tmp%80#0 to l-stack (copy)' +debug: Replaced main_echo_native_tuple_route@14.ops[29]: 'load tmp%80#0' with 'load tmp%80#0 from l-stack (no copy)' +debug: Inserted main_echo_native_tuple_route@14.ops[42]: 'store awst_tmp%0#0 to l-stack (copy)' +debug: Replaced main_echo_native_tuple_route@14.ops[44]: 'load awst_tmp%0#0' with 'load awst_tmp%0#0 from l-stack (no copy)' +debug: Inserted main_echo_native_tuple_route@14.ops[46]: 'store length%2#0 to l-stack (copy)' +debug: Replaced main_echo_native_tuple_route@14.ops[48]: 'load length%2#0' with 'load length%2#0 from l-stack (no copy)' +debug: Inserted main_echo_native_tuple_route@14.ops[50]: 'store as_bytes%2#0 to l-stack (copy)' +debug: Replaced main_echo_native_tuple_route@14.ops[52]: 'load as_bytes%2#0' with 'load as_bytes%2#0 from l-stack (no copy)' +debug: Inserted main_echo_native_tuple_route@14.ops[54]: 'store length_uint16%2#0 to l-stack (copy)' +debug: Replaced main_echo_native_tuple_route@14.ops[56]: 'load length_uint16%2#0' with 'load length_uint16%2#0 from l-stack (no copy)' +debug: Inserted main_echo_native_tuple_route@14.ops[62]: 'store length%3#0 to l-stack (copy)' +debug: Replaced main_echo_native_tuple_route@14.ops[64]: 'load length%3#0' with 'load length%3#0 from l-stack (no copy)' +debug: Inserted main_echo_native_tuple_route@14.ops[66]: 'store as_bytes%3#0 to l-stack (copy)' +debug: Replaced main_echo_native_tuple_route@14.ops[68]: 'load as_bytes%3#0' with 'load as_bytes%3#0 from l-stack (no copy)' +debug: Inserted main_echo_native_tuple_route@14.ops[70]: 'store length_uint16%3#0 to l-stack (copy)' +debug: Replaced main_echo_native_tuple_route@14.ops[72]: 'load length_uint16%3#0' with 'load length_uint16%3#0 from l-stack (no copy)' +debug: Inserted main_echo_native_tuple_route@14.ops[81]: 'store len_%1#0 to l-stack (copy)' +debug: Replaced main_echo_native_tuple_route@14.ops[83]: 'load len_%1#0' with 'load len_%1#0 from l-stack (no copy)' +debug: Inserted main_echo_native_tuple_route@14.ops[86]: 'store no_overflow%1#0 to l-stack (copy)' +debug: Replaced main_echo_native_tuple_route@14.ops[88]: 'load no_overflow%1#0' with 'load no_overflow%1#0 from l-stack (no copy)' +debug: Inserted main_echo_native_tuple_route@14.ops[103]: 'store current_tail_offset%1#0 to l-stack (copy)' +debug: Replaced main_echo_native_tuple_route@14.ops[105]: 'load current_tail_offset%1#0' with 'load current_tail_offset%1#0 from l-stack (no copy)' +debug: Inserted main_echo_native_tuple_route@14.ops[107]: 'store as_bytes%5#0 to l-stack (copy)' +debug: Replaced main_echo_native_tuple_route@14.ops[109]: 'load as_bytes%5#0' with 'load as_bytes%5#0 from l-stack (no copy)' +debug: Inserted main_echo_native_tuple_route@14.ops[115]: 'store encoded_tuple_buffer%2#0 to l-stack (copy)' +debug: Replaced main_echo_native_tuple_route@14.ops[117]: 'load encoded_tuple_buffer%2#0' with 'load encoded_tuple_buffer%2#0 from l-stack (no copy)' +debug: Inserted main_echo_native_tuple_route@14.ops[120]: 'store encoded_tuple_buffer%3#0 to l-stack (copy)' +debug: Replaced main_echo_native_tuple_route@14.ops[122]: 'load encoded_tuple_buffer%3#0' with 'load encoded_tuple_buffer%3#0 from l-stack (no copy)' +debug: Inserted main_echo_native_tuple_route@14.ops[125]: 'store encoded_tuple_buffer%4#0 to l-stack (copy)' +debug: Replaced main_echo_native_tuple_route@14.ops[127]: 'load encoded_tuple_buffer%4#0' with 'load encoded_tuple_buffer%4#0 from l-stack (no copy)' +debug: Inserted main_echo_native_tuple_route@14.ops[130]: 'store encoded_tuple_buffer%5#0 to l-stack (copy)' +debug: Replaced main_echo_native_tuple_route@14.ops[132]: 'load encoded_tuple_buffer%5#0' with 'load encoded_tuple_buffer%5#0 from l-stack (no copy)' +debug: Inserted main_echo_native_tuple_route@14.ops[139]: 'store tmp%84#0 to l-stack (copy)' +debug: Replaced main_echo_native_tuple_route@14.ops[141]: 'load tmp%84#0' with 'load tmp%84#0 from l-stack (no copy)' +debug: Inserted main_echo_native_tuple_route@14.ops[92]: 'store b_zeros%1#0 to l-stack (copy)' +debug: Replaced main_echo_native_tuple_route@14.ops[95]: 'load b_zeros%1#0' with 'load b_zeros%1#0 from l-stack (no copy)' +debug: Inserted main_echo_native_tuple_route@14.ops[100]: 'store data_length%0#0 to l-stack (copy)' +debug: Replaced main_echo_native_tuple_route@14.ops[103]: 'load data_length%0#0' with 'load data_length%0#0 from l-stack (no copy)' +debug: Inserted main_echo_native_tuple_route@14.ops[113]: 'store offset_as_uint16%1#0 to l-stack (copy)' +debug: Replaced main_echo_native_tuple_route@14.ops[116]: 'load offset_as_uint16%1#0' with 'load offset_as_uint16%1#0 from l-stack (no copy)' +debug: Inserted main_echo_native_tuple_route@14.ops[138]: 'store encoded_tuple_buffer%6#0 to l-stack (copy)' +debug: Replaced main_echo_native_tuple_route@14.ops[141]: 'load encoded_tuple_buffer%6#0' with 'load encoded_tuple_buffer%6#0 from l-stack (no copy)' +debug: Inserted main_echo_native_tuple_route@14.ops[33]: 'store tmp%82#0 to l-stack (copy)' +debug: Replaced main_echo_native_tuple_route@14.ops[38]: 'load tmp%82#0' with 'load tmp%82#0 from l-stack (no copy)' +debug: Inserted main_echo_native_tuple_route@14.ops[31]: 'store tmp%81#0 to l-stack (copy)' +debug: Replaced main_echo_native_tuple_route@14.ops[38]: 'load tmp%81#0' with 'load tmp%81#0 from l-stack (no copy)' +debug: Inserted main_echo_native_tuple_route@14.ops[25]: 'store tmp%79#0 to l-stack (copy)' +debug: Replaced main_echo_native_tuple_route@14.ops[38]: 'load tmp%79#0' with 'load tmp%79#0 from l-stack (no copy)' +debug: Inserted main_echo_native_tuple_route@14.ops[48]: 'store awst_tmp%0#0 to l-stack (copy)' +debug: Replaced main_echo_native_tuple_route@14.ops[61]: 'load awst_tmp%0#0' with 'load awst_tmp%0#0 from l-stack (no copy)' +debug: Inserted main_echo_native_tuple_route@14.ops[65]: 'store awst_tmp%1#0 to l-stack (copy)' +debug: Replaced main_echo_native_tuple_route@14.ops[78]: 'load awst_tmp%1#0' with 'load awst_tmp%1#0 from l-stack (no copy)' +debug: Inserted main_echo_native_tuple_route@14.ops[85]: 'store awst_tmp%3#0 to l-stack (copy)' +debug: Replaced main_echo_native_tuple_route@14.ops[100]: 'load awst_tmp%3#0' with 'load awst_tmp%3#0 from l-stack (no copy)' +debug: Inserted main_echo_native_tuple_route@14.ops[19]: 'store tmp%77#0 to l-stack (copy)' +debug: Replaced main_echo_native_tuple_route@14.ops[38]: 'load tmp%77#0' with 'load tmp%77#0 from l-stack (no copy)' +debug: Inserted main_echo_native_tuple_route@14.ops[45]: 'store awst_tmp%1#0 to l-stack (copy)' +debug: Replaced main_echo_native_tuple_route@14.ops[66]: 'load awst_tmp%1#0' with 'load awst_tmp%1#0 from l-stack (no copy)' +debug: Inserted main_echo_native_tuple_route@14.ops[105]: 'store tmp%83#0 to l-stack (copy)' +debug: Replaced main_echo_native_tuple_route@14.ops[135]: 'load tmp%83#0' with 'load tmp%83#0 from l-stack (no copy)' +debug: Inserted main_echo_native_tuple_route@14.ops[108]: 'store encoded_value%2#0 to l-stack (copy)' +debug: Replaced main_echo_native_tuple_route@14.ops[141]: 'load encoded_value%2#0' with 'load encoded_value%2#0 from l-stack (no copy)' +debug: Inserted main_echo_native_tuple_route@14.ops[44]: 'store awst_tmp%2#0 to l-stack (copy)' +debug: Replaced main_echo_native_tuple_route@14.ops[84]: 'load awst_tmp%2#0' with 'load awst_tmp%2#0 from l-stack (no copy)' +debug: Inserted main_echo_native_tuple_route@14.ops[43]: 'store awst_tmp%3#0 to l-stack (copy)' +debug: Replaced main_echo_native_tuple_route@14.ops[88]: 'load awst_tmp%3#0' with 'load awst_tmp%3#0 from l-stack (no copy)' +debug: Inserted main_echo_native_tuple_route@14.ops[67]: 'store encoded_value%2#0 to l-stack (copy)' +debug: Replaced main_echo_native_tuple_route@14.ops[110]: 'load encoded_value%2#0' with 'load encoded_value%2#0 from l-stack (no copy)' +debug: Inserted main_echo_native_tuple_route@14.ops[88]: 'store val_as_bytes%2#0 to l-stack (copy)' +debug: Replaced main_echo_native_tuple_route@14.ops[135]: 'load val_as_bytes%2#0' with 'load val_as_bytes%2#0 from l-stack (no copy)' +debug: Inserted main_echo_native_tuple_route@14.ops[85]: 'store encoded_value%3#0 to l-stack (copy)' +debug: Replaced main_echo_native_tuple_route@14.ops[151]: 'load encoded_value%3#0' with 'load encoded_value%3#0 from l-stack (no copy)' +debug: Inserted main_return_args_after_14th_route@15.ops[1]: 'store tmp%85#0 to l-stack (copy)' +debug: Replaced main_return_args_after_14th_route@15.ops[3]: 'load tmp%85#0' with 'load tmp%85#0 from l-stack (no copy)' +debug: Inserted main_return_args_after_14th_route@15.ops[5]: 'store tmp%86#0 to l-stack (copy)' +debug: Replaced main_return_args_after_14th_route@15.ops[7]: 'load tmp%86#0' with 'load tmp%86#0 from l-stack (no copy)' +debug: Inserted main_return_args_after_14th_route@15.ops[10]: 'store tmp%87#0 to l-stack (copy)' +debug: Replaced main_return_args_after_14th_route@15.ops[12]: 'load tmp%87#0' with 'load tmp%87#0 from l-stack (no copy)' +debug: Inserted main_return_args_after_14th_route@15.ops[43]: 'store tmp%102#0 to l-stack (copy)' +debug: Replaced main_return_args_after_14th_route@15.ops[45]: 'load tmp%102#0' with 'load tmp%102#0 from l-stack (no copy)' +debug: Inserted main_return_args_after_14th_route@15.ops[49]: 'store tmp%104#0 to l-stack (copy)' +debug: Replaced main_return_args_after_14th_route@15.ops[51]: 'load tmp%104#0' with 'load tmp%104#0 from l-stack (no copy)' +debug: Inserted main_return_args_after_14th_route@15.ops[55]: 'store tmp%106#0 to l-stack (copy)' +debug: Replaced main_return_args_after_14th_route@15.ops[57]: 'load tmp%106#0' with 'load tmp%106#0 from l-stack (no copy)' +debug: Inserted main_return_args_after_14th_route@15.ops[61]: 'store tmp%108#0 to l-stack (copy)' +debug: Replaced main_return_args_after_14th_route@15.ops[63]: 'load tmp%108#0' with 'load tmp%108#0 from l-stack (no copy)' +debug: Inserted main_return_args_after_14th_route@15.ops[67]: 'store tmp%110#0 to l-stack (copy)' +debug: Replaced main_return_args_after_14th_route@15.ops[69]: 'load tmp%110#0' with 'load tmp%110#0 from l-stack (no copy)' +debug: Inserted main_return_args_after_14th_route@15.ops[73]: 'store tmp%112#0 to l-stack (copy)' +debug: Replaced main_return_args_after_14th_route@15.ops[75]: 'load tmp%112#0' with 'load tmp%112#0 from l-stack (no copy)' +debug: Inserted main_return_args_after_14th_route@15.ops[103]: 'store tmp%115#0 to l-stack (copy)' +debug: Replaced main_return_args_after_14th_route@15.ops[105]: 'load tmp%115#0' with 'load tmp%115#0 from l-stack (no copy)' +debug: Inserted main_return_args_after_14th_route@15.ops[99]: 'store tmp%114#0 to l-stack (copy)' +debug: Replaced main_return_args_after_14th_route@15.ops[102]: 'load tmp%114#0' with 'load tmp%114#0 from l-stack (no copy)' +debug: Inserted main_return_args_after_14th_route@15.ops[77]: 'store tmp%113#0 to l-stack (copy)' +debug: Replaced main_return_args_after_14th_route@15.ops[98]: 'load tmp%113#0' with 'load tmp%113#0 from l-stack (no copy)' +debug: Inserted main_return_args_after_14th_route@15.ops[71]: 'store tmp%111#0 to l-stack (copy)' +debug: Replaced main_return_args_after_14th_route@15.ops[98]: 'load tmp%111#0' with 'load tmp%111#0 from l-stack (no copy)' +debug: Inserted main_return_args_after_14th_route@15.ops[65]: 'store tmp%109#0 to l-stack (copy)' +debug: Replaced main_return_args_after_14th_route@15.ops[98]: 'load tmp%109#0' with 'load tmp%109#0 from l-stack (no copy)' +debug: Inserted main_return_args_after_14th_route@15.ops[59]: 'store tmp%107#0 to l-stack (copy)' +debug: Replaced main_return_args_after_14th_route@15.ops[98]: 'load tmp%107#0' with 'load tmp%107#0 from l-stack (no copy)' +debug: Inserted main_return_args_after_14th_route@15.ops[53]: 'store tmp%105#0 to l-stack (copy)' +debug: Replaced main_return_args_after_14th_route@15.ops[98]: 'load tmp%105#0' with 'load tmp%105#0 from l-stack (no copy)' +debug: Inserted main_return_args_after_14th_route@15.ops[47]: 'store tmp%103#0 to l-stack (copy)' +debug: Replaced main_return_args_after_14th_route@15.ops[98]: 'load tmp%103#0' with 'load tmp%103#0 from l-stack (no copy)' +debug: Inserted main_return_args_after_14th_route@15.ops[41]: 'store tmp%101#0 to l-stack (copy)' +debug: Replaced main_return_args_after_14th_route@15.ops[98]: 'load tmp%101#0' with 'load tmp%101#0 from l-stack (no copy)' +debug: Inserted main_return_args_after_14th_route@15.ops[39]: 'store tmp%100#0 to l-stack (copy)' +debug: Replaced main_return_args_after_14th_route@15.ops[98]: 'load tmp%100#0' with 'load tmp%100#0 from l-stack (no copy)' +debug: Inserted main_return_args_after_14th_route@15.ops[37]: 'store tmp%99#0 to l-stack (copy)' +debug: Replaced main_return_args_after_14th_route@15.ops[98]: 'load tmp%99#0' with 'load tmp%99#0 from l-stack (no copy)' +debug: Inserted main_return_args_after_14th_route@15.ops[35]: 'store tmp%98#0 to l-stack (copy)' +debug: Replaced main_return_args_after_14th_route@15.ops[98]: 'load tmp%98#0' with 'load tmp%98#0 from l-stack (no copy)' +debug: Inserted main_return_args_after_14th_route@15.ops[33]: 'store tmp%97#0 to l-stack (copy)' +debug: Replaced main_return_args_after_14th_route@15.ops[98]: 'load tmp%97#0' with 'load tmp%97#0 from l-stack (no copy)' +debug: Inserted main_return_args_after_14th_route@15.ops[31]: 'store tmp%96#0 to l-stack (copy)' +debug: Replaced main_return_args_after_14th_route@15.ops[98]: 'load tmp%96#0' with 'load tmp%96#0 from l-stack (no copy)' +debug: Inserted main_return_args_after_14th_route@15.ops[29]: 'store tmp%95#0 to l-stack (copy)' +debug: Replaced main_return_args_after_14th_route@15.ops[98]: 'load tmp%95#0' with 'load tmp%95#0 from l-stack (no copy)' +debug: Inserted main_return_args_after_14th_route@15.ops[27]: 'store tmp%94#0 to l-stack (copy)' +debug: Replaced main_return_args_after_14th_route@15.ops[98]: 'load tmp%94#0' with 'load tmp%94#0 from l-stack (no copy)' +debug: Inserted main_return_args_after_14th_route@15.ops[25]: 'store tmp%93#0 to l-stack (copy)' +debug: Replaced main_return_args_after_14th_route@15.ops[98]: 'load tmp%93#0' with 'load tmp%93#0 from l-stack (no copy)' +debug: Inserted main_return_args_after_14th_route@15.ops[23]: 'store tmp%92#0 to l-stack (copy)' +debug: Replaced main_return_args_after_14th_route@15.ops[98]: 'load tmp%92#0' with 'load tmp%92#0 from l-stack (no copy)' +debug: Inserted main_return_args_after_14th_route@15.ops[21]: 'store tmp%91#0 to l-stack (copy)' +debug: Replaced main_return_args_after_14th_route@15.ops[98]: 'load tmp%91#0' with 'load tmp%91#0 from l-stack (no copy)' +debug: Inserted main_return_args_after_14th_route@15.ops[19]: 'store tmp%90#0 to l-stack (copy)' +debug: Replaced main_return_args_after_14th_route@15.ops[98]: 'load tmp%90#0' with 'load tmp%90#0 from l-stack (no copy)' +debug: Inserted main_return_args_after_14th_route@15.ops[17]: 'store tmp%89#0 to l-stack (copy)' +debug: Replaced main_return_args_after_14th_route@15.ops[98]: 'load tmp%89#0' with 'load tmp%89#0 from l-stack (no copy)' +debug: Inserted main_return_args_after_14th_route@15.ops[15]: 'store tmp%88#0 to l-stack (copy)' +debug: Replaced main_return_args_after_14th_route@15.ops[98]: 'load tmp%88#0' with 'load tmp%88#0 from l-stack (no copy)' +debug: Inserted main_bare_routing@18.ops[1]: 'store tmp%116#0 to l-stack (copy)' +debug: Replaced main_bare_routing@18.ops[3]: 'load tmp%116#0' with 'load tmp%116#0 from l-stack (no copy)' +debug: Inserted main_bare_routing@18.ops[5]: 'store not%tmp%116#0 to l-stack (copy)' +debug: Replaced main_bare_routing@18.ops[7]: 'load not%tmp%116#0' with 'load not%tmp%116#0 from l-stack (no copy)' +debug: Inserted main_bare_routing@18.ops[10]: 'store tmp%117#0 to l-stack (copy)' +debug: Replaced main_bare_routing@18.ops[12]: 'load tmp%117#0' with 'load tmp%117#0 from l-stack (no copy)' +debug: Inserted main_bare_routing@18.ops[14]: 'store tmp%118#0 to l-stack (copy)' +debug: Replaced main_bare_routing@18.ops[16]: 'load tmp%118#0' with 'load tmp%118#0 from l-stack (no copy)' debug: Found 2 edge set/s for test_cases.typed_abi_call.logger.Logger.approval_program debug: Inserted echo_block@0.ops[6]: 'store concatenated%0#0 to l-stack (copy)' debug: Replaced echo_block@0.ops[8]: 'load concatenated%0#0' with 'load concatenated%0#0 from l-stack (no copy)' @@ -2286,27 +2396,28 @@ debug: Simplified (== tmp%47#0 NoOp) to (! tmp%47#0) debug: Simplified (== tmp%53#0 NoOp) to (! tmp%53#0) debug: Simplified (== tmp%59#0 NoOp) to (! tmp%59#0) debug: Simplified (== tmp%65#0 NoOp) to (! tmp%65#0) +debug: Simplified (== tmp%71#0 NoOp) to (! tmp%71#0) debug: Optimizer: Remove Unused Variables 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_L17 as a predecessor of block@14: // switch_case_next_L17 due to inlining of block@13: // switch_case_default_L17 -debug: simplified terminator of block@1: // abi_routing_L17 from switch tmp%1#0 {method "test_method_selector_kinds(application)void" => block@2, method "test_method_overload(application)void" => block@3, method "test_arg_conversion(application)void" => block@4, method "test_15plus_args(application)void" => block@5, method "test_void(application)void" => block@6, method "test_ref_types(application,asset)void" => block@7, method "test_native_string(application)void" => block@8, method "test_native_bytes(application)void" => block@9, method "test_native_uint64(application)void" => block@10, method "test_native_biguint(application)void" => block@11, method "test_native_tuple(application)void" => block@12, * => block@13} to switch tmp%1#0 {method "test_method_selector_kinds(application)void" => block@2, method "test_method_overload(application)void" => block@3, method "test_arg_conversion(application)void" => block@4, method "test_15plus_args(application)void" => block@5, method "test_void(application)void" => block@6, method "test_ref_types(application,asset)void" => block@7, method "test_native_string(application)void" => block@8, method "test_native_bytes(application)void" => block@9, method "test_native_uint64(application)void" => block@10, method "test_native_biguint(application)void" => block@11, method "test_native_tuple(application)void" => block@12, * => block@14} +debug: adding block@1: // abi_routing_L17 as a predecessor of block@15: // switch_case_next_L17 due to inlining of block@14: // switch_case_default_L17 +debug: simplified terminator of block@1: // abi_routing_L17 from switch tmp%1#0 {method "test_method_selector_kinds(application)void" => block@2, method "test_method_overload(application)void" => block@3, method "test_arg_conversion(application)void" => block@4, method "test_15plus_args(application)void" => block@5, method "test_void(application)void" => block@6, method "test_ref_types(application,asset)void" => block@7, method "test_native_string(application)void" => block@8, method "test_native_bytes(application)void" => block@9, method "test_native_uint64(application)void" => block@10, method "test_native_biguint(application)void" => block@11, method "test_native_tuple(application)void" => block@12, method "test_no_args(application)void" => block@13, * => block@14} to switch tmp%1#0 {method "test_method_selector_kinds(application)void" => block@2, method "test_method_overload(application)void" => block@3, method "test_arg_conversion(application)void" => block@4, method "test_15plus_args(application)void" => block@5, method "test_void(application)void" => block@6, method "test_ref_types(application,asset)void" => block@7, method "test_native_string(application)void" => block@8, method "test_native_bytes(application)void" => block@9, method "test_native_uint64(application)void" => block@10, method "test_native_biguint(application)void" => block@11, method "test_native_tuple(application)void" => block@12, method "test_no_args(application)void" => block@13, * => block@15} debug: simplifying a switch with constants into goto nth -debug: simplified terminator of block@15: // bare_routing_L17 from switch tmp%71#0 {0u => block@16, * => block@17} to goto_nth [block@16][tmp%71#0] else goto block@17 +debug: simplified terminator of block@16: // bare_routing_L17 from switch tmp%77#0 {0u => block@17, * => block@18} to goto_nth [block@17][tmp%77#0] else goto block@18 debug: inlining the default target of a switch/goto nth -debug: simplified terminator of block@1: // abi_routing_L17 from switch tmp%1#0 {method "test_method_selector_kinds(application)void" => block@2, method "test_method_overload(application)void" => block@3, method "test_arg_conversion(application)void" => block@4, method "test_15plus_args(application)void" => block@5, method "test_void(application)void" => block@6, method "test_ref_types(application,asset)void" => block@7, method "test_native_string(application)void" => block@8, method "test_native_bytes(application)void" => block@9, method "test_native_uint64(application)void" => block@10, method "test_native_biguint(application)void" => block@11, method "test_native_tuple(application)void" => block@12, * => block@14} to switch tmp%1#0 {method "test_method_selector_kinds(application)void" => block@2, method "test_method_overload(application)void" => block@3, method "test_arg_conversion(application)void" => block@4, method "test_15plus_args(application)void" => block@5, method "test_void(application)void" => block@6, method "test_ref_types(application,asset)void" => block@7, method "test_native_string(application)void" => block@8, method "test_native_bytes(application)void" => block@9, method "test_native_uint64(application)void" => block@10, method "test_native_biguint(application)void" => block@11, method "test_native_tuple(application)void" => block@12, * => fail // reject transaction} +debug: simplified terminator of block@1: // abi_routing_L17 from switch tmp%1#0 {method "test_method_selector_kinds(application)void" => block@2, method "test_method_overload(application)void" => block@3, method "test_arg_conversion(application)void" => block@4, method "test_15plus_args(application)void" => block@5, method "test_void(application)void" => block@6, method "test_ref_types(application,asset)void" => block@7, method "test_native_string(application)void" => block@8, method "test_native_bytes(application)void" => block@9, method "test_native_uint64(application)void" => block@10, method "test_native_biguint(application)void" => block@11, method "test_native_tuple(application)void" => block@12, method "test_no_args(application)void" => block@13, * => block@15} to switch tmp%1#0 {method "test_method_selector_kinds(application)void" => block@2, method "test_method_overload(application)void" => block@3, method "test_arg_conversion(application)void" => block@4, method "test_15plus_args(application)void" => block@5, method "test_void(application)void" => block@6, method "test_ref_types(application,asset)void" => block@7, method "test_native_string(application)void" => block@8, method "test_native_bytes(application)void" => block@9, method "test_native_uint64(application)void" => block@10, method "test_native_biguint(application)void" => block@11, method "test_native_tuple(application)void" => block@12, method "test_no_args(application)void" => block@13, * => fail // reject transaction} debug: simplifying a goto nth with two targets into a conditional branch -debug: simplified terminator of block@15: // bare_routing_L17 from goto_nth [block@16][tmp%71#0] else goto block@17 to goto tmp%71#0 ? block@17 : block@16 +debug: simplified terminator of block@16: // bare_routing_L17 from goto_nth [block@17][tmp%77#0] else goto block@18 to goto tmp%77#0 ? block@18 : block@17 debug: inlining condition branch to err block into an assert false -debug: simplified terminator of block@15: // bare_routing_L17 from goto tmp%71#0 ? block@17 : block@16 to goto block@16 +debug: simplified terminator of block@16: // bare_routing_L17 from goto tmp%77#0 ? block@18 : block@17 to goto block@17 debug: Optimizer: Remove Linear Jump -debug: Merged linear block@14: // switch_case_next_L17 into block@13: // switch_case_default_L17 -debug: Merged linear block@16: // create_L17 into block@15: // bare_routing_L17 +debug: Merged linear block@15: // switch_case_next_L17 into block@14: // switch_case_default_L17 +debug: Merged linear block@17: // create_L17 into block@16: // bare_routing_L17 debug: Optimizer: Remove Empty Blocks debug: Optimizer: Remove Unreachable Blocks -debug: Removing unreachable blocks: block@13: // switch_case_default_L17, block@17: // reject_bare_on_completion_L17 +debug: Removing unreachable blocks: block@14: // switch_case_default_L17, block@18: // reject_bare_on_completion_L17 debug: Optimizer: Repeated Expression Elimination debug: Optimizer: Remove Calls To No Op Subroutines debug: Optimizing subroutine test_cases.typed_abi_call.typed_c2c.Greeter.test_method_selector_kinds @@ -6723,6 +6834,325 @@ debug: Replacing redundant declaration let item_start_offset%1#0: uint64 = (extr debug: Found equivalence set: item_end_offset%0#0, item_start_offset%1#0 debug: Replacing {item_start_offset%1#0} with item_end_offset%0#0 made 1 modifications debug: Optimizer: Remove Calls To No Op Subroutines +debug: Optimizing subroutine test_cases.typed_abi_call.typed_c2c.Greeter.test_no_args +debug: Splitting parallel copies prior to optimization +debug: Optimizer: Constant Replacer +debug: Optimizer: Copy Propagation +debug: Found equivalence set: app#0, inner_txn_params%0%%param_ApplicationID_idx_0#0, inner_txn_params%1%%param_ApplicationID_idx_0#0, inner_txn_params%2%%param_ApplicationID_idx_0#0 +debug: Replacing {inner_txn_params%0%%param_ApplicationID_idx_0#0, inner_txn_params%1%%param_ApplicationID_idx_0#0, inner_txn_params%2%%param_ApplicationID_idx_0#0} with app#0 made 3 modifications +debug: Found equivalence set: tmp%4#0, arc4_result#0, reinterpret_biguint%0#0 +debug: Replacing {tmp%4#0, reinterpret_biguint%0#0} with arc4_result#0 made 2 modifications +debug: Found equivalence set: tmp%12#0, reinterpret_biguint%2#0 +debug: Replacing {reinterpret_biguint%2#0} with tmp%12#0 made 1 modifications +debug: Optimizer: Intrinsic Simplifier +debug: Optimizer: Remove Unused Variables +debug: Removing unused variable inner_txn_params%0#0 +debug: Removing unused variable inner_txn_params%0%%param_Fee_idx_0#0 +debug: Removing unused variable inner_txn_params%0%%Fee_length#0 +debug: Removing unused variable inner_txn_params%0%%param_TypeEnum_idx_0#0 +debug: Removing unused variable inner_txn_params%0%%TypeEnum_length#0 +debug: Removing unused variable inner_txn_params%0%%param_ApplicationArgs_idx_0#0 +debug: Removing unused variable inner_txn_params%0%%ApplicationArgs_length#0 +debug: Removing unused variable inner_txn_params%0%%ApplicationID_length#0 +debug: Removing unused variable inner_txn_params%0%%Sender_length#0 +debug: Removing unused variable inner_txn_params%0%%Note_length#0 +debug: Removing unused variable inner_txn_params%0%%Receiver_length#0 +debug: Removing unused variable inner_txn_params%0%%Amount_length#0 +debug: Removing unused variable inner_txn_params%0%%CloseRemainderTo_length#0 +debug: Removing unused variable inner_txn_params%0%%VotePK_length#0 +debug: Removing unused variable inner_txn_params%0%%SelectionPK_length#0 +debug: Removing unused variable inner_txn_params%0%%VoteFirst_length#0 +debug: Removing unused variable inner_txn_params%0%%VoteLast_length#0 +debug: Removing unused variable inner_txn_params%0%%VoteKeyDilution_length#0 +debug: Removing unused variable inner_txn_params%0%%Type_length#0 +debug: Removing unused variable inner_txn_params%0%%XferAsset_length#0 +debug: Removing unused variable inner_txn_params%0%%AssetAmount_length#0 +debug: Removing unused variable inner_txn_params%0%%AssetSender_length#0 +debug: Removing unused variable inner_txn_params%0%%AssetReceiver_length#0 +debug: Removing unused variable inner_txn_params%0%%AssetCloseTo_length#0 +debug: Removing unused variable inner_txn_params%0%%OnCompletion_length#0 +debug: Removing unused variable inner_txn_params%0%%ApprovalProgram_length#0 +debug: Removing unused variable inner_txn_params%0%%ClearStateProgram_length#0 +debug: Removing unused variable inner_txn_params%0%%RekeyTo_length#0 +debug: Removing unused variable inner_txn_params%0%%ConfigAsset_length#0 +debug: Removing unused variable inner_txn_params%0%%ConfigAssetTotal_length#0 +debug: Removing unused variable inner_txn_params%0%%ConfigAssetDecimals_length#0 +debug: Removing unused variable inner_txn_params%0%%ConfigAssetDefaultFrozen_length#0 +debug: Removing unused variable inner_txn_params%0%%ConfigAssetUnitName_length#0 +debug: Removing unused variable inner_txn_params%0%%ConfigAssetName_length#0 +debug: Removing unused variable inner_txn_params%0%%ConfigAssetURL_length#0 +debug: Removing unused variable inner_txn_params%0%%ConfigAssetMetadataHash_length#0 +debug: Removing unused variable inner_txn_params%0%%ConfigAssetManager_length#0 +debug: Removing unused variable inner_txn_params%0%%ConfigAssetReserve_length#0 +debug: Removing unused variable inner_txn_params%0%%ConfigAssetFreeze_length#0 +debug: Removing unused variable inner_txn_params%0%%ConfigAssetClawback_length#0 +debug: Removing unused variable inner_txn_params%0%%FreezeAsset_length#0 +debug: Removing unused variable inner_txn_params%0%%FreezeAssetAccount_length#0 +debug: Removing unused variable inner_txn_params%0%%FreezeAssetFrozen_length#0 +debug: Removing unused variable inner_txn_params%0%%GlobalNumUint_length#0 +debug: Removing unused variable inner_txn_params%0%%GlobalNumByteSlice_length#0 +debug: Removing unused variable inner_txn_params%0%%LocalNumUint_length#0 +debug: Removing unused variable inner_txn_params%0%%LocalNumByteSlice_length#0 +debug: Removing unused variable inner_txn_params%0%%ExtraProgramPages_length#0 +debug: Removing unused variable inner_txn_params%0%%Nonparticipation_length#0 +debug: Removing unused variable inner_txn_params%0%%StateProofPK_length#0 +debug: Removing unused variable inner_txn_params%0%%Accounts_length#0 +debug: Removing unused variable inner_txn_params%0%%Assets_length#0 +debug: Removing unused variable inner_txn_params%0%%Applications_length#0 +debug: Removing unused variable inner_txn_params%0%%ApprovalProgramPages_length#0 +debug: Removing unused variable inner_txn_params%0%%ClearStateProgramPages_length#0 +debug: Removing unused variable _txn#0 +debug: Removing unused variable _txn._is_last#0 +debug: Removing unused variable _txn.Sender#0 +debug: Removing unused variable _txn.Fee#0 +debug: Removing unused variable _txn.FirstValid#0 +debug: Removing unused variable _txn.FirstValidTime#0 +debug: Removing unused variable _txn.LastValid#0 +debug: Removing unused variable _txn.Note#0 +debug: Removing unused variable _txn.Lease#0 +debug: Removing unused variable _txn.Receiver#0 +debug: Removing unused variable _txn.Amount#0 +debug: Removing unused variable _txn.CloseRemainderTo#0 +debug: Removing unused variable _txn.VotePK#0 +debug: Removing unused variable _txn.SelectionPK#0 +debug: Removing unused variable _txn.VoteFirst#0 +debug: Removing unused variable _txn.VoteLast#0 +debug: Removing unused variable _txn.VoteKeyDilution#0 +debug: Removing unused variable _txn.Type#0 +debug: Removing unused variable _txn.TypeEnum#0 +debug: Removing unused variable _txn.XferAsset#0 +debug: Removing unused variable _txn.AssetAmount#0 +debug: Removing unused variable _txn.AssetSender#0 +debug: Removing unused variable _txn.AssetReceiver#0 +debug: Removing unused variable _txn.AssetCloseTo#0 +debug: Removing unused variable _txn.GroupIndex#0 +debug: Removing unused variable _txn.TxID#0 +debug: Removing unused variable _txn.ApplicationID#0 +debug: Removing unused variable _txn.OnCompletion#0 +debug: Removing unused variable _txn.NumAppArgs#0 +debug: Removing unused variable _txn.NumAccounts#0 +debug: Removing unused variable _txn.ApprovalProgram#0 +debug: Removing unused variable _txn.ClearStateProgram#0 +debug: Removing unused variable _txn.RekeyTo#0 +debug: Removing unused variable _txn.ConfigAsset#0 +debug: Removing unused variable _txn.ConfigAssetTotal#0 +debug: Removing unused variable _txn.ConfigAssetDecimals#0 +debug: Removing unused variable _txn.ConfigAssetDefaultFrozen#0 +debug: Removing unused variable _txn.ConfigAssetUnitName#0 +debug: Removing unused variable _txn.ConfigAssetName#0 +debug: Removing unused variable _txn.ConfigAssetURL#0 +debug: Removing unused variable _txn.ConfigAssetMetadataHash#0 +debug: Removing unused variable _txn.ConfigAssetManager#0 +debug: Removing unused variable _txn.ConfigAssetReserve#0 +debug: Removing unused variable _txn.ConfigAssetFreeze#0 +debug: Removing unused variable _txn.ConfigAssetClawback#0 +debug: Removing unused variable _txn.FreezeAsset#0 +debug: Removing unused variable _txn.FreezeAssetAccount#0 +debug: Removing unused variable _txn.FreezeAssetFrozen#0 +debug: Removing unused variable _txn.NumAssets#0 +debug: Removing unused variable _txn.NumApplications#0 +debug: Removing unused variable _txn.GlobalNumUint#0 +debug: Removing unused variable _txn.GlobalNumByteSlice#0 +debug: Removing unused variable _txn.LocalNumUint#0 +debug: Removing unused variable _txn.LocalNumByteSlice#0 +debug: Removing unused variable _txn.ExtraProgramPages#0 +debug: Removing unused variable _txn.Nonparticipation#0 +debug: Removing unused variable _txn.NumLogs#0 +debug: Removing unused variable _txn.CreatedAssetID#0 +debug: Removing unused variable _txn.CreatedApplicationID#0 +debug: Removing unused variable _txn.LastLog#0 +debug: Removing unused variable _txn.StateProofPK#0 +debug: Removing unused variable _txn.NumApprovalProgramPages#0 +debug: Removing unused variable _txn.NumClearStateProgramPages#0 +debug: Removing unused variable inner_txn_params%1#0 +debug: Removing unused variable inner_txn_params%1%%param_Fee_idx_0#0 +debug: Removing unused variable inner_txn_params%1%%Fee_length#0 +debug: Removing unused variable inner_txn_params%1%%param_TypeEnum_idx_0#0 +debug: Removing unused variable inner_txn_params%1%%TypeEnum_length#0 +debug: Removing unused variable inner_txn_params%1%%param_ApplicationArgs_idx_0#0 +debug: Removing unused variable inner_txn_params%1%%ApplicationArgs_length#0 +debug: Removing unused variable inner_txn_params%1%%ApplicationID_length#0 +debug: Removing unused variable inner_txn_params%1%%Sender_length#0 +debug: Removing unused variable inner_txn_params%1%%Note_length#0 +debug: Removing unused variable inner_txn_params%1%%Receiver_length#0 +debug: Removing unused variable inner_txn_params%1%%Amount_length#0 +debug: Removing unused variable inner_txn_params%1%%CloseRemainderTo_length#0 +debug: Removing unused variable inner_txn_params%1%%VotePK_length#0 +debug: Removing unused variable inner_txn_params%1%%SelectionPK_length#0 +debug: Removing unused variable inner_txn_params%1%%VoteFirst_length#0 +debug: Removing unused variable inner_txn_params%1%%VoteLast_length#0 +debug: Removing unused variable inner_txn_params%1%%VoteKeyDilution_length#0 +debug: Removing unused variable inner_txn_params%1%%Type_length#0 +debug: Removing unused variable inner_txn_params%1%%XferAsset_length#0 +debug: Removing unused variable inner_txn_params%1%%AssetAmount_length#0 +debug: Removing unused variable inner_txn_params%1%%AssetSender_length#0 +debug: Removing unused variable inner_txn_params%1%%AssetReceiver_length#0 +debug: Removing unused variable inner_txn_params%1%%AssetCloseTo_length#0 +debug: Removing unused variable inner_txn_params%1%%OnCompletion_length#0 +debug: Removing unused variable inner_txn_params%1%%ApprovalProgram_length#0 +debug: Removing unused variable inner_txn_params%1%%ClearStateProgram_length#0 +debug: Removing unused variable inner_txn_params%1%%RekeyTo_length#0 +debug: Removing unused variable inner_txn_params%1%%ConfigAsset_length#0 +debug: Removing unused variable inner_txn_params%1%%ConfigAssetTotal_length#0 +debug: Removing unused variable inner_txn_params%1%%ConfigAssetDecimals_length#0 +debug: Removing unused variable inner_txn_params%1%%ConfigAssetDefaultFrozen_length#0 +debug: Removing unused variable inner_txn_params%1%%ConfigAssetUnitName_length#0 +debug: Removing unused variable inner_txn_params%1%%ConfigAssetName_length#0 +debug: Removing unused variable inner_txn_params%1%%ConfigAssetURL_length#0 +debug: Removing unused variable inner_txn_params%1%%ConfigAssetMetadataHash_length#0 +debug: Removing unused variable inner_txn_params%1%%ConfigAssetManager_length#0 +debug: Removing unused variable inner_txn_params%1%%ConfigAssetReserve_length#0 +debug: Removing unused variable inner_txn_params%1%%ConfigAssetFreeze_length#0 +debug: Removing unused variable inner_txn_params%1%%ConfigAssetClawback_length#0 +debug: Removing unused variable inner_txn_params%1%%FreezeAsset_length#0 +debug: Removing unused variable inner_txn_params%1%%FreezeAssetAccount_length#0 +debug: Removing unused variable inner_txn_params%1%%FreezeAssetFrozen_length#0 +debug: Removing unused variable inner_txn_params%1%%GlobalNumUint_length#0 +debug: Removing unused variable inner_txn_params%1%%GlobalNumByteSlice_length#0 +debug: Removing unused variable inner_txn_params%1%%LocalNumUint_length#0 +debug: Removing unused variable inner_txn_params%1%%LocalNumByteSlice_length#0 +debug: Removing unused variable inner_txn_params%1%%ExtraProgramPages_length#0 +debug: Removing unused variable inner_txn_params%1%%Nonparticipation_length#0 +debug: Removing unused variable inner_txn_params%1%%StateProofPK_length#0 +debug: Removing unused variable inner_txn_params%1%%Accounts_length#0 +debug: Removing unused variable inner_txn_params%1%%Assets_length#0 +debug: Removing unused variable inner_txn_params%1%%Applications_length#0 +debug: Removing unused variable inner_txn_params%1%%ApprovalProgramPages_length#0 +debug: Removing unused variable inner_txn_params%1%%ClearStateProgramPages_length#0 +debug: Removing unused variable _txn#1 +debug: Removing unused variable _txn._is_last#1 +debug: Removing unused variable _txn.Sender#1 +debug: Removing unused variable _txn.Fee#1 +debug: Removing unused variable _txn.FirstValid#1 +debug: Removing unused variable _txn.FirstValidTime#1 +debug: Removing unused variable _txn.LastValid#1 +debug: Removing unused variable _txn.Note#1 +debug: Removing unused variable _txn.Lease#1 +debug: Removing unused variable _txn.Receiver#1 +debug: Removing unused variable _txn.Amount#1 +debug: Removing unused variable _txn.CloseRemainderTo#1 +debug: Removing unused variable _txn.VotePK#1 +debug: Removing unused variable _txn.SelectionPK#1 +debug: Removing unused variable _txn.VoteFirst#1 +debug: Removing unused variable _txn.VoteLast#1 +debug: Removing unused variable _txn.VoteKeyDilution#1 +debug: Removing unused variable _txn.Type#1 +debug: Removing unused variable _txn.TypeEnum#1 +debug: Removing unused variable _txn.XferAsset#1 +debug: Removing unused variable _txn.AssetAmount#1 +debug: Removing unused variable _txn.AssetSender#1 +debug: Removing unused variable _txn.AssetReceiver#1 +debug: Removing unused variable _txn.AssetCloseTo#1 +debug: Removing unused variable _txn.GroupIndex#1 +debug: Removing unused variable _txn.TxID#1 +debug: Removing unused variable _txn.ApplicationID#1 +debug: Removing unused variable _txn.OnCompletion#1 +debug: Removing unused variable _txn.NumAppArgs#1 +debug: Removing unused variable _txn.NumAccounts#1 +debug: Removing unused variable _txn.ApprovalProgram#1 +debug: Removing unused variable _txn.ClearStateProgram#1 +debug: Removing unused variable _txn.RekeyTo#1 +debug: Removing unused variable _txn.ConfigAsset#1 +debug: Removing unused variable _txn.ConfigAssetTotal#1 +debug: Removing unused variable _txn.ConfigAssetDecimals#1 +debug: Removing unused variable _txn.ConfigAssetDefaultFrozen#1 +debug: Removing unused variable _txn.ConfigAssetUnitName#1 +debug: Removing unused variable _txn.ConfigAssetName#1 +debug: Removing unused variable _txn.ConfigAssetURL#1 +debug: Removing unused variable _txn.ConfigAssetMetadataHash#1 +debug: Removing unused variable _txn.ConfigAssetManager#1 +debug: Removing unused variable _txn.ConfigAssetReserve#1 +debug: Removing unused variable _txn.ConfigAssetFreeze#1 +debug: Removing unused variable _txn.ConfigAssetClawback#1 +debug: Removing unused variable _txn.FreezeAsset#1 +debug: Removing unused variable _txn.FreezeAssetAccount#1 +debug: Removing unused variable _txn.FreezeAssetFrozen#1 +debug: Removing unused variable _txn.NumAssets#1 +debug: Removing unused variable _txn.NumApplications#1 +debug: Removing unused variable _txn.GlobalNumUint#1 +debug: Removing unused variable _txn.GlobalNumByteSlice#1 +debug: Removing unused variable _txn.LocalNumUint#1 +debug: Removing unused variable _txn.LocalNumByteSlice#1 +debug: Removing unused variable _txn.ExtraProgramPages#1 +debug: Removing unused variable _txn.Nonparticipation#1 +debug: Removing unused variable _txn.NumLogs#1 +debug: Removing unused variable _txn.CreatedAssetID#1 +debug: Removing unused variable _txn.CreatedApplicationID#1 +debug: Removing unused variable _txn.LastLog#1 +debug: Removing unused variable _txn.StateProofPK#1 +debug: Removing unused variable _txn.NumApprovalProgramPages#1 +debug: Removing unused variable _txn.NumClearStateProgramPages#1 +debug: Removing unused variable reinterpret_biguint%1#0 +debug: Removing unused variable inner_txn_params%2#0 +debug: Removing unused variable inner_txn_params%2%%param_Fee_idx_0#0 +debug: Removing unused variable inner_txn_params%2%%Fee_length#0 +debug: Removing unused variable inner_txn_params%2%%param_TypeEnum_idx_0#0 +debug: Removing unused variable inner_txn_params%2%%TypeEnum_length#0 +debug: Removing unused variable inner_txn_params%2%%param_ApplicationArgs_idx_0#0 +debug: Removing unused variable inner_txn_params%2%%ApplicationArgs_length#0 +debug: Removing unused variable inner_txn_params%2%%ApplicationID_length#0 +debug: Removing unused variable inner_txn_params%2%%Sender_length#0 +debug: Removing unused variable inner_txn_params%2%%Note_length#0 +debug: Removing unused variable inner_txn_params%2%%Receiver_length#0 +debug: Removing unused variable inner_txn_params%2%%Amount_length#0 +debug: Removing unused variable inner_txn_params%2%%CloseRemainderTo_length#0 +debug: Removing unused variable inner_txn_params%2%%VotePK_length#0 +debug: Removing unused variable inner_txn_params%2%%SelectionPK_length#0 +debug: Removing unused variable inner_txn_params%2%%VoteFirst_length#0 +debug: Removing unused variable inner_txn_params%2%%VoteLast_length#0 +debug: Removing unused variable inner_txn_params%2%%VoteKeyDilution_length#0 +debug: Removing unused variable inner_txn_params%2%%Type_length#0 +debug: Removing unused variable inner_txn_params%2%%XferAsset_length#0 +debug: Removing unused variable inner_txn_params%2%%AssetAmount_length#0 +debug: Removing unused variable inner_txn_params%2%%AssetSender_length#0 +debug: Removing unused variable inner_txn_params%2%%AssetReceiver_length#0 +debug: Removing unused variable inner_txn_params%2%%AssetCloseTo_length#0 +debug: Removing unused variable inner_txn_params%2%%OnCompletion_length#0 +debug: Removing unused variable inner_txn_params%2%%ApprovalProgram_length#0 +debug: Removing unused variable inner_txn_params%2%%ClearStateProgram_length#0 +debug: Removing unused variable inner_txn_params%2%%RekeyTo_length#0 +debug: Removing unused variable inner_txn_params%2%%ConfigAsset_length#0 +debug: Removing unused variable inner_txn_params%2%%ConfigAssetTotal_length#0 +debug: Removing unused variable inner_txn_params%2%%ConfigAssetDecimals_length#0 +debug: Removing unused variable inner_txn_params%2%%ConfigAssetDefaultFrozen_length#0 +debug: Removing unused variable inner_txn_params%2%%ConfigAssetUnitName_length#0 +debug: Removing unused variable inner_txn_params%2%%ConfigAssetName_length#0 +debug: Removing unused variable inner_txn_params%2%%ConfigAssetURL_length#0 +debug: Removing unused variable inner_txn_params%2%%ConfigAssetMetadataHash_length#0 +debug: Removing unused variable inner_txn_params%2%%ConfigAssetManager_length#0 +debug: Removing unused variable inner_txn_params%2%%ConfigAssetReserve_length#0 +debug: Removing unused variable inner_txn_params%2%%ConfigAssetFreeze_length#0 +debug: Removing unused variable inner_txn_params%2%%ConfigAssetClawback_length#0 +debug: Removing unused variable inner_txn_params%2%%FreezeAsset_length#0 +debug: Removing unused variable inner_txn_params%2%%FreezeAssetAccount_length#0 +debug: Removing unused variable inner_txn_params%2%%FreezeAssetFrozen_length#0 +debug: Removing unused variable inner_txn_params%2%%GlobalNumUint_length#0 +debug: Removing unused variable inner_txn_params%2%%GlobalNumByteSlice_length#0 +debug: Removing unused variable inner_txn_params%2%%LocalNumUint_length#0 +debug: Removing unused variable inner_txn_params%2%%LocalNumByteSlice_length#0 +debug: Removing unused variable inner_txn_params%2%%ExtraProgramPages_length#0 +debug: Removing unused variable inner_txn_params%2%%Nonparticipation_length#0 +debug: Removing unused variable inner_txn_params%2%%StateProofPK_length#0 +debug: Removing unused variable inner_txn_params%2%%Accounts_length#0 +debug: Removing unused variable inner_txn_params%2%%Assets_length#0 +debug: Removing unused variable inner_txn_params%2%%Applications_length#0 +debug: Removing unused variable inner_txn_params%2%%ApprovalProgramPages_length#0 +debug: Removing unused variable inner_txn_params%2%%ClearStateProgramPages_length#0 +debug: Removing unused variable tmp%11#0 +debug: Removing unused variable reinterpret_biguint%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@1: // next_txn_L217 with block@0: // L215 in block@2: // next_txn_L219 +debug: Merged linear block@1: // next_txn_L217 into block@0: // L215 +debug: Replaced predecessor block@2: // next_txn_L219 with block@0: // L215 in block@3: // next_txn_L222 +debug: Merged linear block@2: // next_txn_L219 into block@0: // L215 +debug: Merged linear block@3: // next_txn_L222 into block@0: // L215 +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.typed_abi_call.typed_c2c.Greeter.clear_state_program debug: Splitting parallel copies prior to optimization debug: Optimizer: Constant Replacer @@ -7018,6 +7448,20 @@ 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.typed_abi_call.typed_c2c.Greeter.test_no_args +debug: Optimizer: Constant Replacer +debug: Optimizer: Copy Propagation +debug: Optimizer: Intrinsic Simplifier +debug: Optimizer: Remove Unused Variables +debug: Removing unused variable tmp%8#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.typed_abi_call.typed_c2c.Greeter.clear_state_program debug: Optimizer: Constant Replacer debug: Optimizer: Copy Propagation @@ -7269,6 +7713,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.typed_abi_call.typed_c2c.Greeter.test_no_args +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.typed_abi_call.typed_c2c.Greeter.clear_state_program debug: Optimizer: Constant Replacer debug: Optimizer: Copy Propagation @@ -7481,6 +7938,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.typed_abi_call.typed_c2c.Greeter.test_no_args +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.typed_abi_call.typed_c2c.Greeter.clear_state_program debug: Optimizer: Constant Replacer debug: Optimizer: Copy Propagation @@ -7655,6 +8125,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.typed_abi_call.typed_c2c.Greeter.test_no_args +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.typed_abi_call.typed_c2c.Greeter.clear_state_program debug: Optimizer: Constant Replacer debug: Optimizer: Copy Propagation @@ -7828,6 +8311,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.typed_abi_call.typed_c2c.Greeter.test_no_args +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.typed_abi_call.typed_c2c.Greeter.clear_state_program debug: Optimizer: Constant Replacer debug: Optimizer: Copy Propagation @@ -8000,6 +8496,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.typed_abi_call.typed_c2c.Greeter.test_no_args +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.typed_abi_call.typed_c2c.Greeter.clear_state_program debug: Optimizer: Constant Replacer debug: Optimizer: Copy Propagation @@ -8171,6 +8680,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.typed_abi_call.typed_c2c.Greeter.test_no_args +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.typed_abi_call.typed_c2c.Greeter.clear_state_program debug: Optimizer: Constant Replacer debug: Optimizer: Copy Propagation @@ -8197,6 +8719,7 @@ debug: Removing Phis from test_cases.typed_abi_call.typed_c2c.Greeter.test_nativ debug: Removing Phis from test_cases.typed_abi_call.typed_c2c.Greeter.test_native_uint64 debug: Removing Phis from test_cases.typed_abi_call.typed_c2c.Greeter.test_native_biguint debug: Removing Phis from test_cases.typed_abi_call.typed_c2c.Greeter.test_native_tuple +debug: Removing Phis from test_cases.typed_abi_call.typed_c2c.Greeter.test_no_args debug: Removing Phis from test_cases.typed_abi_call.typed_c2c.Greeter.clear_state_program debug: Coalescing local variables in test_cases.typed_abi_call.typed_c2c.Greeter.approval_program using strategy RootOperandGrouping debug: Coalescing resulted in 0 replacement/s @@ -8226,6 +8749,8 @@ debug: Coalescing resulted in 0 replacement/s debug: Coalescing local variables in test_cases.typed_abi_call.typed_c2c.Greeter.test_native_tuple using strategy RootOperandGrouping debug: Coalescing txn.LastLog#0 with [txn.LastLog#1, txn.LastLog#2] debug: Coalescing resulted in 6 replacement/s +debug: Coalescing local variables in test_cases.typed_abi_call.typed_c2c.Greeter.test_no_args using strategy RootOperandGrouping +debug: Coalescing resulted in 0 replacement/s debug: Coalescing local variables in test_cases.typed_abi_call.typed_c2c.Greeter.clear_state_program using strategy RootOperandGrouping debug: Coalescing resulted in 0 replacement/s debug: Sequentializing parallel copies in test_cases.typed_abi_call.typed_c2c.Greeter.approval_program @@ -8240,13 +8765,14 @@ debug: Sequentializing parallel copies in test_cases.typed_abi_call.typed_c2c.Gr debug: Sequentializing parallel copies in test_cases.typed_abi_call.typed_c2c.Greeter.test_native_uint64 debug: Sequentializing parallel copies in test_cases.typed_abi_call.typed_c2c.Greeter.test_native_biguint debug: Sequentializing parallel copies in test_cases.typed_abi_call.typed_c2c.Greeter.test_native_tuple +debug: Sequentializing parallel copies in test_cases.typed_abi_call.typed_c2c.Greeter.test_no_args debug: Sequentializing parallel copies in test_cases.typed_abi_call.typed_c2c.Greeter.clear_state_program debug: Performing post-SSA optimizations debug: Output IR to typed_abi_call/out/Greeter.destructured.ir debug: Inserted main_block@0.ops[1]: 'store tmp%0#0 to l-stack (copy)' debug: Replaced main_block@0.ops[3]: 'load tmp%0#0' with 'load tmp%0#0 from l-stack (no copy)' debug: Inserted main_abi_routing@1.ops[1]: 'store tmp%1#0 to l-stack (copy)' -debug: Replaced main_abi_routing@1.ops[14]: 'load tmp%1#0' with 'load tmp%1#0 from l-stack (no copy)' +debug: Replaced main_abi_routing@1.ops[15]: 'load tmp%1#0' with 'load tmp%1#0 from l-stack (no copy)' debug: Inserted main_test_method_selector_kinds_route@2.ops[1]: 'store tmp%2#0 to l-stack (copy)' debug: Replaced main_test_method_selector_kinds_route@2.ops[3]: 'load tmp%2#0' with 'load tmp%2#0 from l-stack (no copy)' debug: Inserted main_test_method_selector_kinds_route@2.ops[5]: 'store tmp%3#0 to l-stack (copy)' @@ -8385,14 +8911,26 @@ debug: Inserted main_test_native_tuple_route@12.ops[19]: 'store tmp%69#0 to l-st debug: Replaced main_test_native_tuple_route@12.ops[21]: 'load tmp%69#0' with 'load tmp%69#0 from l-stack (no copy)' debug: Inserted main_test_native_tuple_route@12.ops[23]: 'store tmp%70#0 to l-stack (copy)' debug: Replaced main_test_native_tuple_route@12.ops[25]: 'load tmp%70#0' with 'load tmp%70#0 from l-stack (no copy)' -debug: Inserted main_bare_routing@15.ops[1]: 'store tmp%71#0 to l-stack (copy)' -debug: Replaced main_bare_routing@15.ops[3]: 'load tmp%71#0' with 'load tmp%71#0 from l-stack (no copy)' -debug: Inserted main_bare_routing@15.ops[5]: 'store not%tmp%71#0 to l-stack (copy)' -debug: Replaced main_bare_routing@15.ops[7]: 'load not%tmp%71#0' with 'load not%tmp%71#0 from l-stack (no copy)' -debug: Inserted main_bare_routing@15.ops[10]: 'store tmp%72#0 to l-stack (copy)' -debug: Replaced main_bare_routing@15.ops[12]: 'load tmp%72#0' with 'load tmp%72#0 from l-stack (no copy)' -debug: Inserted main_bare_routing@15.ops[14]: 'store tmp%73#0 to l-stack (copy)' -debug: Replaced main_bare_routing@15.ops[16]: 'load tmp%73#0' with 'load tmp%73#0 from l-stack (no copy)' +debug: Inserted main_test_no_args_route@13.ops[1]: 'store tmp%71#0 to l-stack (copy)' +debug: Replaced main_test_no_args_route@13.ops[3]: 'load tmp%71#0' with 'load tmp%71#0 from l-stack (no copy)' +debug: Inserted main_test_no_args_route@13.ops[5]: 'store tmp%72#0 to l-stack (copy)' +debug: Replaced main_test_no_args_route@13.ops[7]: 'load tmp%72#0' with 'load tmp%72#0 from l-stack (no copy)' +debug: Inserted main_test_no_args_route@13.ops[10]: 'store tmp%73#0 to l-stack (copy)' +debug: Replaced main_test_no_args_route@13.ops[12]: 'load tmp%73#0' with 'load tmp%73#0 from l-stack (no copy)' +debug: Inserted main_test_no_args_route@13.ops[15]: 'store tmp%74#0 to l-stack (copy)' +debug: Replaced main_test_no_args_route@13.ops[17]: 'load tmp%74#0' with 'load tmp%74#0 from l-stack (no copy)' +debug: Inserted main_test_no_args_route@13.ops[19]: 'store tmp%75#0 to l-stack (copy)' +debug: Replaced main_test_no_args_route@13.ops[21]: 'load tmp%75#0' with 'load tmp%75#0 from l-stack (no copy)' +debug: Inserted main_test_no_args_route@13.ops[23]: 'store tmp%76#0 to l-stack (copy)' +debug: Replaced main_test_no_args_route@13.ops[25]: 'load tmp%76#0' with 'load tmp%76#0 from l-stack (no copy)' +debug: Inserted main_bare_routing@16.ops[1]: 'store tmp%77#0 to l-stack (copy)' +debug: Replaced main_bare_routing@16.ops[3]: 'load tmp%77#0' with 'load tmp%77#0 from l-stack (no copy)' +debug: Inserted main_bare_routing@16.ops[5]: 'store not%tmp%77#0 to l-stack (copy)' +debug: Replaced main_bare_routing@16.ops[7]: 'load not%tmp%77#0' with 'load not%tmp%77#0 from l-stack (no copy)' +debug: Inserted main_bare_routing@16.ops[10]: 'store tmp%78#0 to l-stack (copy)' +debug: Replaced main_bare_routing@16.ops[12]: 'load tmp%78#0' with 'load tmp%78#0 from l-stack (no copy)' +debug: Inserted main_bare_routing@16.ops[14]: 'store tmp%79#0 to l-stack (copy)' +debug: Replaced main_bare_routing@16.ops[16]: 'load tmp%79#0' with 'load tmp%79#0 from l-stack (no copy)' debug: Found 2 edge set/s for test_cases.typed_abi_call.typed_c2c.Greeter.approval_program debug: Inserted test_method_selector_kinds_block@0.ops[13]: 'store awst_tmp%0#0 to l-stack (copy)' debug: Replaced test_method_selector_kinds_block@0.ops[15]: 'load awst_tmp%0#0' with 'load awst_tmp%0#0 from l-stack (no copy)' @@ -8854,6 +9392,50 @@ debug: Inserted test_native_tuple_block@0.ops[160]: 'store result1#0 to l-stack debug: Replaced test_native_tuple_block@0.ops[204]: 'load result1#0' with 'load result1#0 from l-stack (no copy)' debug: Inserted test_native_tuple_block@0.ops[75]: 'store result1#0 to l-stack (copy)' debug: Replaced test_native_tuple_block@0.ops[160]: 'load result1#0' with 'load result1#0 from l-stack (no copy)' +debug: Inserted test_no_args_block@0.ops[11]: 'store awst_tmp%0#0 to l-stack (copy)' +debug: Replaced test_no_args_block@0.ops[13]: 'load awst_tmp%0#0' with 'load awst_tmp%0#0 from l-stack (no copy)' +debug: Inserted test_no_args_block@0.ops[18]: 'store tmp%1#0 to l-stack (copy)' +debug: Replaced test_no_args_block@0.ops[20]: 'load tmp%1#0' with 'load tmp%1#0 from l-stack (no copy)' +debug: Inserted test_no_args_block@0.ops[23]: 'store tmp%2#0 to l-stack (copy)' +debug: Replaced test_no_args_block@0.ops[25]: 'load tmp%2#0' with 'load tmp%2#0 from l-stack (no copy)' +debug: Inserted test_no_args_block@0.ops[29]: 'store result#0 to l-stack (copy)' +debug: Replaced test_no_args_block@0.ops[31]: 'load result#0' with 'load result#0 from l-stack (no copy)' +debug: Inserted test_no_args_block@0.ops[34]: 'store tmp%3#0 to l-stack (copy)' +debug: Replaced test_no_args_block@0.ops[36]: 'load tmp%3#0' with 'load tmp%3#0 from l-stack (no copy)' +debug: Inserted test_no_args_block@0.ops[49]: 'store awst_tmp%1#0 to l-stack (copy)' +debug: Replaced test_no_args_block@0.ops[51]: 'load awst_tmp%1#0' with 'load awst_tmp%1#0 from l-stack (no copy)' +debug: Inserted test_no_args_block@0.ops[56]: 'store tmp%5#0 to l-stack (copy)' +debug: Replaced test_no_args_block@0.ops[58]: 'load tmp%5#0' with 'load tmp%5#0 from l-stack (no copy)' +debug: Inserted test_no_args_block@0.ops[61]: 'store tmp%6#0 to l-stack (copy)' +debug: Replaced test_no_args_block@0.ops[63]: 'load tmp%6#0' with 'load tmp%6#0 from l-stack (no copy)' +debug: Inserted test_no_args_block@0.ops[68]: 'store tmp%7#0 to l-stack (copy)' +debug: Replaced test_no_args_block@0.ops[70]: 'load tmp%7#0' with 'load tmp%7#0 from l-stack (no copy)' +debug: Inserted test_no_args_block@0.ops[83]: 'store awst_tmp%2#0 to l-stack (copy)' +debug: Replaced test_no_args_block@0.ops[85]: 'load awst_tmp%2#0' with 'load awst_tmp%2#0 from l-stack (no copy)' +debug: Inserted test_no_args_block@0.ops[87]: 'store tmp%9#0 to l-stack (copy)' +debug: Replaced test_no_args_block@0.ops[89]: 'load tmp%9#0' with 'load tmp%9#0 from l-stack (no copy)' +debug: Inserted test_no_args_block@0.ops[92]: 'store tmp%10#0 to l-stack (copy)' +debug: Replaced test_no_args_block@0.ops[94]: 'load tmp%10#0' with 'load tmp%10#0 from l-stack (no copy)' +debug: Inserted test_no_args_block@0.ops[97]: 'store awst_tmp%3#0 to l-stack (copy)' +debug: Replaced test_no_args_block@0.ops[99]: 'load awst_tmp%3#0' with 'load awst_tmp%3#0 from l-stack (no copy)' +debug: Inserted test_no_args_block@0.ops[104]: 'store tmp%13#0 to l-stack (copy)' +debug: Replaced test_no_args_block@0.ops[106]: 'load tmp%13#0' with 'load tmp%13#0 from l-stack (no copy)' +debug: Inserted test_no_args_block@0.ops[109]: 'store tmp%14#0 to l-stack (copy)' +debug: Replaced test_no_args_block@0.ops[111]: 'load tmp%14#0' with 'load tmp%14#0 from l-stack (no copy)' +debug: Inserted test_no_args_block@0.ops[116]: 'store tmp%15#0 to l-stack (copy)' +debug: Replaced test_no_args_block@0.ops[118]: 'load tmp%15#0' with 'load tmp%15#0 from l-stack (no copy)' +debug: Inserted test_no_args_block@0.ops[14]: 'store awst_tmp%0#0 to l-stack (copy)' +debug: Replaced test_no_args_block@0.ops[17]: 'load awst_tmp%0#0' with 'load awst_tmp%0#0 from l-stack (no copy)' +debug: Inserted test_no_args_block@0.ops[53]: 'store awst_tmp%1#0 to l-stack (copy)' +debug: Replaced test_no_args_block@0.ops[56]: 'load awst_tmp%1#0' with 'load awst_tmp%1#0 from l-stack (no copy)' +debug: Inserted test_no_args_block@0.ops[102]: 'store awst_tmp%3#0 to l-stack (copy)' +debug: Replaced test_no_args_block@0.ops[105]: 'load awst_tmp%3#0' with 'load awst_tmp%3#0 from l-stack (no copy)' +debug: Inserted test_no_args_block@0.ops[16]: 'store tmp%0#0 to l-stack (copy)' +debug: Replaced test_no_args_block@0.ops[29]: 'load tmp%0#0' with 'load tmp%0#0 from l-stack (no copy)' +debug: Inserted test_no_args_block@0.ops[56]: 'store arc4_result#0 to l-stack (copy)' +debug: Replaced test_no_args_block@0.ops[69]: 'load arc4_result#0' with 'load arc4_result#0 from l-stack (no copy)' +debug: Inserted test_no_args_block@0.ops[106]: 'store tmp%12#0 to l-stack (copy)' +debug: Replaced test_no_args_block@0.ops[119]: 'load tmp%12#0' with 'load tmp%12#0 from l-stack (no copy)' info: Writing typed_abi_call/out/Logger.arc32.json info: Writing typed_abi_call/out/client_Logger.py info: Writing typed_abi_call/out/Logger.approval.teal diff --git a/test_cases/typed_abi_call/typed_c2c.py b/test_cases/typed_abi_call/typed_c2c.py index e65de87417..e5a84427e4 100644 --- a/test_cases/typed_abi_call/typed_c2c.py +++ b/test_cases/typed_abi_call/typed_c2c.py @@ -211,3 +211,13 @@ def test_native_tuple(self, app: Application) -> None: txn.last_log ) assert result1 == result3 + + @arc4.abimethod() + def test_no_args(self, app: Application) -> None: + result, _txn = arc4.abi_call(Logger.no_args, app_id=app) + assert result == 42 + arc4_result, _txn = arc4.abi_call[arc4.UInt64]("no_args()uint64", app_id=app) + assert arc4_result == 42 + + arc4.abi_call(Logger.no_args, app_id=app) + assert arc4.UInt64.from_log(op.ITxn.last_log()) == 42 diff --git a/tests/test_arc32.py b/tests/test_arc32.py index f085a88c62..f1e9d310e0 100644 --- a/tests/test_arc32.py +++ b/tests/test_arc32.py @@ -924,6 +924,12 @@ def test_typed_abi_call( app=logger.app_id, ) + app_client.call( + "test_no_args", + transaction_parameters=txn_params, + app=logger.app_id, + ) + def test_arc28(algod_client: AlgodClient, account: algokit_utils.Account) -> None: app_client = algokit_utils.ApplicationClient(