diff --git a/src/util/arc4-signature-parser.spec.ts b/src/util/arc4-signature-parser.spec.ts index a0f5c178..12d589a7 100644 --- a/src/util/arc4-signature-parser.spec.ts +++ b/src/util/arc4-signature-parser.spec.ts @@ -48,7 +48,7 @@ describe('arc4 signature parser', () => { ['uint2', 'n must be between 8 and 512, and a multiple of 8', 0], ['(uint8,uint2)', 'n must be between 8 and 512, and a multiple of 8', 7], ['uint8[', "Expecting character ']', but got end of input.", 6], - ['uint8]', "Expecting ',', '[', or ')', but got ]", 5], + ['uint8]', "Expecting ',', '[', or ')', but got ]", 6], ['uint8,uint8', 'Signature contained more than one type. Wrap multiple types in parentheses to declare a tuple type', 0], ['(uint8', 'Tuple has not been closed', 6], ['(uint8,bool))', "Char ')' has no matching opening '('", 13], diff --git a/tests/approvals/out/abi-decorators/abi-decorators.awst b/tests/approvals/out/abi-decorators/abi-decorators.awst index 784b537c..1fdf2ff0 100644 --- a/tests/approvals/out/abi-decorators/abi-decorators.awst +++ b/tests/approvals/out/abi-decorators/abi-decorators.awst @@ -33,7 +33,7 @@ contract AbiDecorators return 5 } - methodWithDefaults(): uint64 + methodWithDefaults(a: uint64, b: uint64, c: uint64): uint64 { return a * b + c } @@ -57,12 +57,12 @@ contract OverloadedMethods return True } - doThingOne(): uint64 + doThingOne(x: uint64): uint64 { return x } - doThingTwo(): uint64 + doThingTwo(x: uint64, y: uint64): uint64 { return x * y } diff --git a/tests/approvals/out/accounts/accounts.awst b/tests/approvals/out/accounts/accounts.awst index f2521598..551db4ea 100644 --- a/tests/approvals/out/accounts/accounts.awst +++ b/tests/approvals/out/accounts/accounts.awst @@ -10,7 +10,7 @@ contract AccountsContract return True } - getAccountInfo(): getAccountInfoResult{ bytes: bytes, balance: uint64, minBalance: uint64, authAddress: bytes, totalNumUint: uint64, totalNumByteSlice: uint64, totalExtraAppPages: uint64, totalAppsCreated: uint64, totalAppsOptedIn: uint64, totalAssetsCreated: uint64, totalAssets: uint64, totalBoxes: uint64, totalBoxBytes: uint64, isOptInApp: bool, isOptInAsset: bool } + getAccountInfo(account: account, asset: asset): getAccountInfoResult{ bytes: bytes, balance: uint64, minBalance: uint64, authAddress: bytes, totalNumUint: uint64, totalNumByteSlice: uint64, totalExtraAppPages: uint64, totalAppsCreated: uint64, totalAppsOptedIn: uint64, totalAssetsCreated: uint64, totalAssets: uint64, totalBoxes: uint64, totalBoxBytes: uint64, isOptInApp: bool, isOptInAsset: bool } { ensure_budget(1400, 0) return { bytes: (#0 = { bytes: reinterpret_cast(account), balance: checked_maybe(acct_params_get(account), comment=account funded), minBalance: checked_maybe(acct_params_get(account), comment=account funded), authAddress: reinterpret_cast(checked_maybe(acct_params_get(account), comment=account funded)), totalNumUint: checked_maybe(acct_params_get(account), comment=account funded), totalNumByteSlice: checked_maybe(acct_params_get(account), comment=account funded), totalExtraAppPages: checked_maybe(acct_params_get(account), comment=account funded), totalAppsCreated: checked_maybe(acct_params_get(account), comment=account funded), totalAppsOptedIn: checked_maybe(acct_params_get(account), comment=account funded), totalAssetsCreated: checked_maybe(acct_params_get(account), comment=account funded), totalAssets: checked_maybe(acct_params_get(account), comment=account funded), totalBoxes: checked_maybe(acct_params_get(account), comment=account funded), totalBoxBytes: checked_maybe(acct_params_get(account), comment=account funded), isOptInApp: app_opted_in(account, global()), isOptInAsset: asset_holding_get(account, asset).1 }).bytes, balance: #0.balance, minBalance: #0.minBalance, authAddress: #0.authAddress, totalNumUint: #0.totalNumUint, totalNumByteSlice: #0.totalNumByteSlice, totalExtraAppPages: #0.totalExtraAppPages, totalAppsCreated: #0.totalAppsCreated, totalAppsOptedIn: #0.totalAppsOptedIn, totalAssetsCreated: #0.totalAssetsCreated, totalAssets: #0.totalAssets, totalBoxes: #0.totalBoxes, totalBoxBytes: #0.totalBoxBytes, isOptInApp: #0.isOptInApp, isOptInAsset: #0.isOptInAsset } diff --git a/tests/approvals/out/arc-28-events/EventEmitter.approval.teal b/tests/approvals/out/arc-28-events/EventEmitter.approval.teal index 8959a633..6c44ff1a 100644 --- a/tests/approvals/out/arc-28-events/EventEmitter.approval.teal +++ b/tests/approvals/out/arc-28-events/EventEmitter.approval.teal @@ -3,40 +3,63 @@ // @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> uint64: main: - intcblock 0 1 3 + intcblock 0 1 3 4 bytecblock 0x 0x0b6325ed 0x00 0xa313c066 main_block@1: - // tests/approvals/arc-28-events.algo.ts:12 + // tests/approvals/arc-28-events.algo.ts:13 // class EventEmitter extends Contract { txn NumAppArgs intc_0 // 0 != - bz main_bare_routing@7 + bz main_bare_routing@8 main_abi_routing@2: - // tests/approvals/arc-28-events.algo.ts:12 + // tests/approvals/arc-28-events.algo.ts:13 // class EventEmitter extends Contract { txna ApplicationArgs 0 pushbytes 0x8769b79a // method "emitSwapped(uint8,uint8)void" pushbytes 0xf14889d7 // method "emitCustom(string,bool)void" - uncover 2 - match main_emitSwapped_route@3 main_emitCustom_route@4 + pushbytes 0xd4c97c9c // method "emitDynamicBytes(byte[],byte[])void" + uncover 3 + match main_emitSwapped_route@3 main_emitCustom_route@4 main_emitDynamicBytes_route@5 -main_switch_case_default@5: +main_switch_case_default@6: -main_switch_case_next@6: +main_switch_case_next@7: -main_after_if_else@11: - // tests/approvals/arc-28-events.algo.ts:12 +main_after_if_else@12: + // tests/approvals/arc-28-events.algo.ts:13 // class EventEmitter extends Contract { intc_0 // 0 -main_after_inlined_tests/approvals/arc-28-events.algo.ts::EventEmitter.__puya_arc4_router__@12: +main_after_inlined_tests/approvals/arc-28-events.algo.ts::EventEmitter.__puya_arc4_router__@13: return +main_emitDynamicBytes_route@5: + // tests/approvals/arc-28-events.algo.ts:37 + // emitDynamicBytes(x: bytes, y: DynamicBytes) { + txn OnCompletion + intc_0 // NoOp + == + assert // OnCompletion is not NoOp + txn ApplicationID + intc_0 // 0 + != + assert // can only call when not creating + // tests/approvals/arc-28-events.algo.ts:13 + // class EventEmitter extends Contract { + txna ApplicationArgs 1 + extract 2 0 + txna ApplicationArgs 2 + // tests/approvals/arc-28-events.algo.ts:37 + // emitDynamicBytes(x: bytes, y: DynamicBytes) { + callsub emitDynamicBytes + intc_1 // 1 + b main_after_inlined_tests/approvals/arc-28-events.algo.ts::EventEmitter.__puya_arc4_router__@13 + main_emitCustom_route@4: - // tests/approvals/arc-28-events.algo.ts:31 + // tests/approvals/arc-28-events.algo.ts:32 // emitCustom(arg0: string, arg1: boolean) { txn OnCompletion intc_0 // NoOp @@ -46,21 +69,21 @@ main_emitCustom_route@4: intc_0 // 0 != assert // can only call when not creating - // tests/approvals/arc-28-events.algo.ts:12 + // tests/approvals/arc-28-events.algo.ts:13 // class EventEmitter extends Contract { txna ApplicationArgs 1 extract 2 0 txna ApplicationArgs 2 intc_0 // 0 getbit - // tests/approvals/arc-28-events.algo.ts:31 + // tests/approvals/arc-28-events.algo.ts:32 // emitCustom(arg0: string, arg1: boolean) { callsub emitCustom intc_1 // 1 - b main_after_inlined_tests/approvals/arc-28-events.algo.ts::EventEmitter.__puya_arc4_router__@12 + b main_after_inlined_tests/approvals/arc-28-events.algo.ts::EventEmitter.__puya_arc4_router__@13 main_emitSwapped_route@3: - // tests/approvals/arc-28-events.algo.ts:13 + // tests/approvals/arc-28-events.algo.ts:14 // emitSwapped(a: UintN8, b: UintN8) { txn OnCompletion intc_0 // NoOp @@ -70,31 +93,31 @@ main_emitSwapped_route@3: intc_0 // 0 != assert // can only call when not creating - // tests/approvals/arc-28-events.algo.ts:12 + // tests/approvals/arc-28-events.algo.ts:13 // class EventEmitter extends Contract { txna ApplicationArgs 1 txna ApplicationArgs 2 - // tests/approvals/arc-28-events.algo.ts:13 + // tests/approvals/arc-28-events.algo.ts:14 // emitSwapped(a: UintN8, b: UintN8) { callsub emitSwapped intc_1 // 1 - b main_after_inlined_tests/approvals/arc-28-events.algo.ts::EventEmitter.__puya_arc4_router__@12 + b main_after_inlined_tests/approvals/arc-28-events.algo.ts::EventEmitter.__puya_arc4_router__@13 -main_bare_routing@7: - // tests/approvals/arc-28-events.algo.ts:12 +main_bare_routing@8: + // tests/approvals/arc-28-events.algo.ts:13 // class EventEmitter extends Contract { txn OnCompletion intc_0 // 0 swap - match main___algots__.defaultCreate@8 + match main___algots__.defaultCreate@9 -main_switch_case_default@9: +main_switch_case_default@10: -main_switch_case_next@10: - b main_after_if_else@11 +main_switch_case_next@11: + b main_after_if_else@12 -main___algots__.defaultCreate@8: - // tests/approvals/arc-28-events.algo.ts:12 +main___algots__.defaultCreate@9: + // tests/approvals/arc-28-events.algo.ts:13 // class EventEmitter extends Contract { txn ApplicationID intc_0 // 0 @@ -102,15 +125,15 @@ main___algots__.defaultCreate@8: assert // can only call when creating callsub __algots__.defaultCreate intc_1 // 1 - b main_after_inlined_tests/approvals/arc-28-events.algo.ts::EventEmitter.__puya_arc4_router__@12 + b main_after_inlined_tests/approvals/arc-28-events.algo.ts::EventEmitter.__puya_arc4_router__@13 // tests/approvals/arc-28-events.algo.ts::EventEmitter.emitSwapped(a: bytes, b: bytes) -> void: emitSwapped: - // tests/approvals/arc-28-events.algo.ts:13 + // tests/approvals/arc-28-events.algo.ts:14 // emitSwapped(a: UintN8, b: UintN8) { proto 2 0 - // tests/approvals/arc-28-events.algo.ts:14 + // tests/approvals/arc-28-events.algo.ts:15 // emit({ a: b, b: a }) bytec_0 // 0x frame_dig -1 @@ -121,12 +144,12 @@ emitSwapped: swap concat log - // tests/approvals/arc-28-events.algo.ts:16 + // tests/approvals/arc-28-events.algo.ts:17 // const x: Swapped = { a: b, b: a } frame_dig -1 frame_dig -2 swap - // tests/approvals/arc-28-events.algo.ts:17 + // tests/approvals/arc-28-events.algo.ts:18 // emit(x) bytec_0 // 0x swap @@ -137,7 +160,7 @@ emitSwapped: swap concat log - // tests/approvals/arc-28-events.algo.ts:19-22 + // tests/approvals/arc-28-events.algo.ts:20-23 // const y = new SwappedArc4({ // a: b, // b: a, @@ -147,13 +170,13 @@ emitSwapped: concat frame_dig -2 concat - // tests/approvals/arc-28-events.algo.ts:23 + // tests/approvals/arc-28-events.algo.ts:24 // emit(y) pushbytes 0x441e2cd8 // method "SwappedArc4(uint8,uint8)" swap concat log - // tests/approvals/arc-28-events.algo.ts:25 + // tests/approvals/arc-28-events.algo.ts:26 // emit('Swapped', b, a) bytec_0 // 0x frame_dig -1 @@ -164,7 +187,7 @@ emitSwapped: swap concat log - // tests/approvals/arc-28-events.algo.ts:27 + // tests/approvals/arc-28-events.algo.ts:28 // emit('Swapped(uint8,uint8)', b, a) bytec_0 // 0x frame_dig -1 @@ -175,7 +198,7 @@ emitSwapped: swap concat log - // tests/approvals/arc-28-events.algo.ts:28 + // tests/approvals/arc-28-events.algo.ts:29 // emit('Swapped((uint8,uint8),uint8)', [b, b] as const, a) bytec_0 // 0x frame_dig -1 @@ -196,10 +219,10 @@ emitSwapped: // tests/approvals/arc-28-events.algo.ts::EventEmitter.emitCustom(arg0: bytes, arg1: uint64) -> void: emitCustom: - // tests/approvals/arc-28-events.algo.ts:31 + // tests/approvals/arc-28-events.algo.ts:32 // emitCustom(arg0: string, arg1: boolean) { proto 2 0 - // tests/approvals/arc-28-events.algo.ts:32 + // tests/approvals/arc-28-events.algo.ts:33 // emit('Custom', arg0, arg1) frame_dig -2 len @@ -225,7 +248,7 @@ emitCustom: swap concat log - // tests/approvals/arc-28-events.algo.ts:33 + // tests/approvals/arc-28-events.algo.ts:34 // emit('Custom(string,bool)', arg0, arg1) frame_dig -2 len @@ -254,9 +277,49 @@ emitCustom: retsub +// tests/approvals/arc-28-events.algo.ts::EventEmitter.emitDynamicBytes(x: bytes, y: bytes) -> void: +emitDynamicBytes: + // tests/approvals/arc-28-events.algo.ts:37 + // emitDynamicBytes(x: bytes, y: DynamicBytes) { + proto 2 0 + // tests/approvals/arc-28-events.algo.ts:38 + // emit('DB(byte[],byte[])', x, y) + frame_dig -2 + len + itob + extract 6 2 + frame_dig -2 + concat + intc_3 // 4 + itob + extract 6 2 + bytec_0 // 0x + swap + concat + swap + dup + len + intc_3 // 4 + + + itob + extract 6 2 + uncover 2 + swap + concat + swap + concat + frame_dig -1 + concat + pushbytes 0x4524e1dd // method "DB(byte[],byte[])" + swap + concat + log + retsub + + // tests/approvals/arc-28-events.algo.ts::EventEmitter.__algots__.defaultCreate() -> void: __algots__.defaultCreate: - // tests/approvals/arc-28-events.algo.ts:12 + // tests/approvals/arc-28-events.algo.ts:13 // class EventEmitter extends Contract { proto 0 0 retsub diff --git a/tests/approvals/out/arc-28-events/EventEmitter.arc32.json b/tests/approvals/out/arc-28-events/EventEmitter.arc32.json index bb97de3d..27773b47 100644 --- a/tests/approvals/out/arc-28-events/EventEmitter.arc32.json +++ b/tests/approvals/out/arc-28-events/EventEmitter.arc32.json @@ -9,10 +9,15 @@ "call_config": { "no_op": "CALL" } + }, + "emitDynamicBytes(byte[],byte[])void": { + "call_config": { + "no_op": "CALL" + } } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxIDMKICAgIGJ5dGVjYmxvY2sgMHggMHgwYjYzMjVlZCAweDAwIDB4YTMxM2MwNjYKCm1haW5fYmxvY2tAMToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmMtMjgtZXZlbnRzLmFsZ28udHM6MTIKICAgIC8vIGNsYXNzIEV2ZW50RW1pdHRlciBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDcKCm1haW5fYWJpX3JvdXRpbmdAMjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmMtMjgtZXZlbnRzLmFsZ28udHM6MTIKICAgIC8vIGNsYXNzIEV2ZW50RW1pdHRlciBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIHB1c2hieXRlcyAweDg3NjliNzlhIC8vIG1ldGhvZCAiZW1pdFN3YXBwZWQodWludDgsdWludDgpdm9pZCIKICAgIHB1c2hieXRlcyAweGYxNDg4OWQ3IC8vIG1ldGhvZCAiZW1pdEN1c3RvbShzdHJpbmcsYm9vbCl2b2lkIgogICAgdW5jb3ZlciAyCiAgICBtYXRjaCBtYWluX2VtaXRTd2FwcGVkX3JvdXRlQDMgbWFpbl9lbWl0Q3VzdG9tX3JvdXRlQDQKCm1haW5fc3dpdGNoX2Nhc2VfZGVmYXVsdEA1OgoKbWFpbl9zd2l0Y2hfY2FzZV9uZXh0QDY6CgptYWluX2FmdGVyX2lmX2Vsc2VAMTE6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjLTI4LWV2ZW50cy5hbGdvLnRzOjEyCiAgICAvLyBjbGFzcyBFdmVudEVtaXR0ZXIgZXh0ZW5kcyBDb250cmFjdCB7CiAgICBpbnRjXzAgLy8gMAoKbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9hcmMtMjgtZXZlbnRzLmFsZ28udHM6OkV2ZW50RW1pdHRlci5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMjoKICAgIHJldHVybgoKbWFpbl9lbWl0Q3VzdG9tX3JvdXRlQDQ6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjLTI4LWV2ZW50cy5hbGdvLnRzOjMxCiAgICAvLyBlbWl0Q3VzdG9tKGFyZzA6IHN0cmluZywgYXJnMTogYm9vbGVhbikgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYy0yOC1ldmVudHMuYWxnby50czoxMgogICAgLy8gY2xhc3MgRXZlbnRFbWl0dGVyIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGludGNfMCAvLyAwCiAgICBnZXRiaXQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmMtMjgtZXZlbnRzLmFsZ28udHM6MzEKICAgIC8vIGVtaXRDdXN0b20oYXJnMDogc3RyaW5nLCBhcmcxOiBib29sZWFuKSB7CiAgICBjYWxsc3ViIGVtaXRDdXN0b20KICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvYXJjLTI4LWV2ZW50cy5hbGdvLnRzOjpFdmVudEVtaXR0ZXIuX19wdXlhX2FyYzRfcm91dGVyX19AMTIKCm1haW5fZW1pdFN3YXBwZWRfcm91dGVAMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmMtMjgtZXZlbnRzLmFsZ28udHM6MTMKICAgIC8vIGVtaXRTd2FwcGVkKGE6IFVpbnROOCwgYjogVWludE44KSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjLTI4LWV2ZW50cy5hbGdvLnRzOjEyCiAgICAvLyBjbGFzcyBFdmVudEVtaXR0ZXIgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjLTI4LWV2ZW50cy5hbGdvLnRzOjEzCiAgICAvLyBlbWl0U3dhcHBlZChhOiBVaW50TjgsIGI6IFVpbnROOCkgewogICAgY2FsbHN1YiBlbWl0U3dhcHBlZAogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9hcmMtMjgtZXZlbnRzLmFsZ28udHM6OkV2ZW50RW1pdHRlci5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMgoKbWFpbl9iYXJlX3JvdXRpbmdANzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmMtMjgtZXZlbnRzLmFsZ28udHM6MTIKICAgIC8vIGNsYXNzIEV2ZW50RW1pdHRlciBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICBtYXRjaCBtYWluX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA4CgptYWluX3N3aXRjaF9jYXNlX2RlZmF1bHRAOToKCm1haW5fc3dpdGNoX2Nhc2VfbmV4dEAxMDoKICAgIGIgbWFpbl9hZnRlcl9pZl9lbHNlQDExCgptYWluX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA4OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYy0yOC1ldmVudHMuYWxnby50czoxMgogICAgLy8gY2xhc3MgRXZlbnRFbWl0dGVyIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICA9PQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgY2FsbHN1YiBfX2FsZ290c19fLmRlZmF1bHRDcmVhdGUKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvYXJjLTI4LWV2ZW50cy5hbGdvLnRzOjpFdmVudEVtaXR0ZXIuX19wdXlhX2FyYzRfcm91dGVyX19AMTIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvYXJjLTI4LWV2ZW50cy5hbGdvLnRzOjpFdmVudEVtaXR0ZXIuZW1pdFN3YXBwZWQoYTogYnl0ZXMsIGI6IGJ5dGVzKSAtPiB2b2lkOgplbWl0U3dhcHBlZDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmMtMjgtZXZlbnRzLmFsZ28udHM6MTMKICAgIC8vIGVtaXRTd2FwcGVkKGE6IFVpbnROOCwgYjogVWludE44KSB7CiAgICBwcm90byAyIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmMtMjgtZXZlbnRzLmFsZ28udHM6MTQKICAgIC8vIGVtaXQ8U3dhcHBlZD4oeyBhOiBiLCBiOiBhIH0pCiAgICBieXRlY18wIC8vIDB4CiAgICBmcmFtZV9kaWcgLTEKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC0yCiAgICBjb25jYXQKICAgIGJ5dGVjXzEgLy8gbWV0aG9kICJTd2FwcGVkKHVpbnQ4LHVpbnQ4KSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjLTI4LWV2ZW50cy5hbGdvLnRzOjE2CiAgICAvLyBjb25zdCB4OiBTd2FwcGVkID0geyBhOiBiLCBiOiBhIH0KICAgIGZyYW1lX2RpZyAtMQogICAgZnJhbWVfZGlnIC0yCiAgICBzd2FwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjLTI4LWV2ZW50cy5hbGdvLnRzOjE3CiAgICAvLyBlbWl0KHgpCiAgICBieXRlY18wIC8vIDB4CiAgICBzd2FwCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMSAvLyBtZXRob2QgIlN3YXBwZWQodWludDgsdWludDgpIgogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmMtMjgtZXZlbnRzLmFsZ28udHM6MTktMjIKICAgIC8vIGNvbnN0IHkgPSBuZXcgU3dhcHBlZEFyYzQoewogICAgLy8gICBhOiBiLAogICAgLy8gICBiOiBhLAogICAgLy8gfSkKICAgIGJ5dGVjXzAgLy8gMHgKICAgIGZyYW1lX2RpZyAtMQogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTIKICAgIGNvbmNhdAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYy0yOC1ldmVudHMuYWxnby50czoyMwogICAgLy8gZW1pdCh5KQogICAgcHVzaGJ5dGVzIDB4NDQxZTJjZDggLy8gbWV0aG9kICJTd2FwcGVkQXJjNCh1aW50OCx1aW50OCkiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYy0yOC1ldmVudHMuYWxnby50czoyNQogICAgLy8gZW1pdCgnU3dhcHBlZCcsIGIsIGEpCiAgICBieXRlY18wIC8vIDB4CiAgICBmcmFtZV9kaWcgLTEKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC0yCiAgICBjb25jYXQKICAgIGJ5dGVjXzEgLy8gbWV0aG9kICJTd2FwcGVkKHVpbnQ4LHVpbnQ4KSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjLTI4LWV2ZW50cy5hbGdvLnRzOjI3CiAgICAvLyBlbWl0KCdTd2FwcGVkKHVpbnQ4LHVpbnQ4KScsIGIsIGEpCiAgICBieXRlY18wIC8vIDB4CiAgICBmcmFtZV9kaWcgLTEKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC0yCiAgICBjb25jYXQKICAgIGJ5dGVjXzEgLy8gbWV0aG9kICJTd2FwcGVkKHVpbnQ4LHVpbnQ4KSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjLTI4LWV2ZW50cy5hbGdvLnRzOjI4CiAgICAvLyBlbWl0KCdTd2FwcGVkKCh1aW50OCx1aW50OCksdWludDgpJywgW2IsIGJdIGFzIGNvbnN0LCBhKQogICAgYnl0ZWNfMCAvLyAweAogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtMQogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtMgogICAgY29uY2F0CiAgICBwdXNoYnl0ZXMgMHgzODhjYzEyZCAvLyBtZXRob2QgIlN3YXBwZWQoKHVpbnQ4LHVpbnQ4KSx1aW50OCkiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL2FyYy0yOC1ldmVudHMuYWxnby50czo6RXZlbnRFbWl0dGVyLmVtaXRDdXN0b20oYXJnMDogYnl0ZXMsIGFyZzE6IHVpbnQ2NCkgLT4gdm9pZDoKZW1pdEN1c3RvbToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmMtMjgtZXZlbnRzLmFsZ28udHM6MzEKICAgIC8vIGVtaXRDdXN0b20oYXJnMDogc3RyaW5nLCBhcmcxOiBib29sZWFuKSB7CiAgICBwcm90byAyIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmMtMjgtZXZlbnRzLmFsZ28udHM6MzIKICAgIC8vIGVtaXQoJ0N1c3RvbScsIGFyZzAsIGFyZzEpCiAgICBmcmFtZV9kaWcgLTIKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGZyYW1lX2RpZyAtMgogICAgY29uY2F0CiAgICBieXRlY18yIC8vIDB4MDAKICAgIGludGNfMCAvLyAwCiAgICBmcmFtZV9kaWcgLTEKICAgIHNldGJpdAogICAgaW50Y18yIC8vIDMKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBieXRlY18wIC8vIDB4CiAgICBzd2FwCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18zIC8vIG1ldGhvZCAiQ3VzdG9tKHN0cmluZyxib29sKSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjLTI4LWV2ZW50cy5hbGdvLnRzOjMzCiAgICAvLyBlbWl0KCdDdXN0b20oc3RyaW5nLGJvb2wpJywgYXJnMCwgYXJnMSkKICAgIGZyYW1lX2RpZyAtMgogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgZnJhbWVfZGlnIC0yCiAgICBjb25jYXQKICAgIGJ5dGVjXzIgLy8gMHgwMAogICAgaW50Y18wIC8vIDAKICAgIGZyYW1lX2RpZyAtMQogICAgc2V0Yml0CiAgICBpbnRjXzIgLy8gMwogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGJ5dGVjXzAgLy8gMHgKICAgIHN3YXAKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzMgLy8gbWV0aG9kICJDdXN0b20oc3RyaW5nLGJvb2wpIgogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9hcmMtMjgtZXZlbnRzLmFsZ28udHM6OkV2ZW50RW1pdHRlci5fX2FsZ290c19fLmRlZmF1bHRDcmVhdGUoKSAtPiB2b2lkOgpfX2FsZ290c19fLmRlZmF1bHRDcmVhdGU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjLTI4LWV2ZW50cy5hbGdvLnRzOjEyCiAgICAvLyBjbGFzcyBFdmVudEVtaXR0ZXIgZXh0ZW5kcyBDb250cmFjdCB7CiAgICBwcm90byAwIDAKICAgIHJldHN1Ygo=", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxIDMgNAogICAgYnl0ZWNibG9jayAweCAweDBiNjMyNWVkIDB4MDAgMHhhMzEzYzA2NgoKbWFpbl9ibG9ja0AxOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYy0yOC1ldmVudHMuYWxnby50czoxMwogICAgLy8gY2xhc3MgRXZlbnRFbWl0dGVyIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdAOAoKbWFpbl9hYmlfcm91dGluZ0AyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYy0yOC1ldmVudHMuYWxnby50czoxMwogICAgLy8gY2xhc3MgRXZlbnRFbWl0dGVyIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgcHVzaGJ5dGVzIDB4ODc2OWI3OWEgLy8gbWV0aG9kICJlbWl0U3dhcHBlZCh1aW50OCx1aW50OCl2b2lkIgogICAgcHVzaGJ5dGVzIDB4ZjE0ODg5ZDcgLy8gbWV0aG9kICJlbWl0Q3VzdG9tKHN0cmluZyxib29sKXZvaWQiCiAgICBwdXNoYnl0ZXMgMHhkNGM5N2M5YyAvLyBtZXRob2QgImVtaXREeW5hbWljQnl0ZXMoYnl0ZVtdLGJ5dGVbXSl2b2lkIgogICAgdW5jb3ZlciAzCiAgICBtYXRjaCBtYWluX2VtaXRTd2FwcGVkX3JvdXRlQDMgbWFpbl9lbWl0Q3VzdG9tX3JvdXRlQDQgbWFpbl9lbWl0RHluYW1pY0J5dGVzX3JvdXRlQDUKCm1haW5fc3dpdGNoX2Nhc2VfZGVmYXVsdEA2OgoKbWFpbl9zd2l0Y2hfY2FzZV9uZXh0QDc6CgptYWluX2FmdGVyX2lmX2Vsc2VAMTI6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjLTI4LWV2ZW50cy5hbGdvLnRzOjEzCiAgICAvLyBjbGFzcyBFdmVudEVtaXR0ZXIgZXh0ZW5kcyBDb250cmFjdCB7CiAgICBpbnRjXzAgLy8gMAoKbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9hcmMtMjgtZXZlbnRzLmFsZ28udHM6OkV2ZW50RW1pdHRlci5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMzoKICAgIHJldHVybgoKbWFpbl9lbWl0RHluYW1pY0J5dGVzX3JvdXRlQDU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjLTI4LWV2ZW50cy5hbGdvLnRzOjM3CiAgICAvLyBlbWl0RHluYW1pY0J5dGVzKHg6IGJ5dGVzLCB5OiBEeW5hbWljQnl0ZXMpIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmMtMjgtZXZlbnRzLmFsZ28udHM6MTMKICAgIC8vIGNsYXNzIEV2ZW50RW1pdHRlciBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjLTI4LWV2ZW50cy5hbGdvLnRzOjM3CiAgICAvLyBlbWl0RHluYW1pY0J5dGVzKHg6IGJ5dGVzLCB5OiBEeW5hbWljQnl0ZXMpIHsKICAgIGNhbGxzdWIgZW1pdER5bmFtaWNCeXRlcwogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9hcmMtMjgtZXZlbnRzLmFsZ28udHM6OkV2ZW50RW1pdHRlci5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMwoKbWFpbl9lbWl0Q3VzdG9tX3JvdXRlQDQ6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjLTI4LWV2ZW50cy5hbGdvLnRzOjMyCiAgICAvLyBlbWl0Q3VzdG9tKGFyZzA6IHN0cmluZywgYXJnMTogYm9vbGVhbikgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYy0yOC1ldmVudHMuYWxnby50czoxMwogICAgLy8gY2xhc3MgRXZlbnRFbWl0dGVyIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGludGNfMCAvLyAwCiAgICBnZXRiaXQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmMtMjgtZXZlbnRzLmFsZ28udHM6MzIKICAgIC8vIGVtaXRDdXN0b20oYXJnMDogc3RyaW5nLCBhcmcxOiBib29sZWFuKSB7CiAgICBjYWxsc3ViIGVtaXRDdXN0b20KICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvYXJjLTI4LWV2ZW50cy5hbGdvLnRzOjpFdmVudEVtaXR0ZXIuX19wdXlhX2FyYzRfcm91dGVyX19AMTMKCm1haW5fZW1pdFN3YXBwZWRfcm91dGVAMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmMtMjgtZXZlbnRzLmFsZ28udHM6MTQKICAgIC8vIGVtaXRTd2FwcGVkKGE6IFVpbnROOCwgYjogVWludE44KSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjLTI4LWV2ZW50cy5hbGdvLnRzOjEzCiAgICAvLyBjbGFzcyBFdmVudEVtaXR0ZXIgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjLTI4LWV2ZW50cy5hbGdvLnRzOjE0CiAgICAvLyBlbWl0U3dhcHBlZChhOiBVaW50TjgsIGI6IFVpbnROOCkgewogICAgY2FsbHN1YiBlbWl0U3dhcHBlZAogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9hcmMtMjgtZXZlbnRzLmFsZ28udHM6OkV2ZW50RW1pdHRlci5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMwoKbWFpbl9iYXJlX3JvdXRpbmdAODoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmMtMjgtZXZlbnRzLmFsZ28udHM6MTMKICAgIC8vIGNsYXNzIEV2ZW50RW1pdHRlciBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICBtYXRjaCBtYWluX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA5CgptYWluX3N3aXRjaF9jYXNlX2RlZmF1bHRAMTA6CgptYWluX3N3aXRjaF9jYXNlX25leHRAMTE6CiAgICBiIG1haW5fYWZ0ZXJfaWZfZWxzZUAxMgoKbWFpbl9fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVAOToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmMtMjgtZXZlbnRzLmFsZ28udHM6MTMKICAgIC8vIGNsYXNzIEV2ZW50RW1pdHRlciBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgPT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGNhbGxzdWIgX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL2FyYy0yOC1ldmVudHMuYWxnby50czo6RXZlbnRFbWl0dGVyLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDEzCgoKLy8gdGVzdHMvYXBwcm92YWxzL2FyYy0yOC1ldmVudHMuYWxnby50czo6RXZlbnRFbWl0dGVyLmVtaXRTd2FwcGVkKGE6IGJ5dGVzLCBiOiBieXRlcykgLT4gdm9pZDoKZW1pdFN3YXBwZWQ6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjLTI4LWV2ZW50cy5hbGdvLnRzOjE0CiAgICAvLyBlbWl0U3dhcHBlZChhOiBVaW50TjgsIGI6IFVpbnROOCkgewogICAgcHJvdG8gMiAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjLTI4LWV2ZW50cy5hbGdvLnRzOjE1CiAgICAvLyBlbWl0PFN3YXBwZWQ+KHsgYTogYiwgYjogYSB9KQogICAgYnl0ZWNfMCAvLyAweAogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtMgogICAgY29uY2F0CiAgICBieXRlY18xIC8vIG1ldGhvZCAiU3dhcHBlZCh1aW50OCx1aW50OCkiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYy0yOC1ldmVudHMuYWxnby50czoxNwogICAgLy8gY29uc3QgeDogU3dhcHBlZCA9IHsgYTogYiwgYjogYSB9CiAgICBmcmFtZV9kaWcgLTEKICAgIGZyYW1lX2RpZyAtMgogICAgc3dhcAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYy0yOC1ldmVudHMuYWxnby50czoxOAogICAgLy8gZW1pdCh4KQogICAgYnl0ZWNfMCAvLyAweAogICAgc3dhcAogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzEgLy8gbWV0aG9kICJTd2FwcGVkKHVpbnQ4LHVpbnQ4KSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjLTI4LWV2ZW50cy5hbGdvLnRzOjIwLTIzCiAgICAvLyBjb25zdCB5ID0gbmV3IFN3YXBwZWRBcmM0KHsKICAgIC8vICAgYTogYiwKICAgIC8vICAgYjogYSwKICAgIC8vIH0pCiAgICBieXRlY18wIC8vIDB4CiAgICBmcmFtZV9kaWcgLTEKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC0yCiAgICBjb25jYXQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmMtMjgtZXZlbnRzLmFsZ28udHM6MjQKICAgIC8vIGVtaXQoeSkKICAgIHB1c2hieXRlcyAweDQ0MWUyY2Q4IC8vIG1ldGhvZCAiU3dhcHBlZEFyYzQodWludDgsdWludDgpIgogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmMtMjgtZXZlbnRzLmFsZ28udHM6MjYKICAgIC8vIGVtaXQoJ1N3YXBwZWQnLCBiLCBhKQogICAgYnl0ZWNfMCAvLyAweAogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtMgogICAgY29uY2F0CiAgICBieXRlY18xIC8vIG1ldGhvZCAiU3dhcHBlZCh1aW50OCx1aW50OCkiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYy0yOC1ldmVudHMuYWxnby50czoyOAogICAgLy8gZW1pdCgnU3dhcHBlZCh1aW50OCx1aW50OCknLCBiLCBhKQogICAgYnl0ZWNfMCAvLyAweAogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtMgogICAgY29uY2F0CiAgICBieXRlY18xIC8vIG1ldGhvZCAiU3dhcHBlZCh1aW50OCx1aW50OCkiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYy0yOC1ldmVudHMuYWxnby50czoyOQogICAgLy8gZW1pdCgnU3dhcHBlZCgodWludDgsdWludDgpLHVpbnQ4KScsIFtiLCBiXSBhcyBjb25zdCwgYSkKICAgIGJ5dGVjXzAgLy8gMHgKICAgIGZyYW1lX2RpZyAtMQogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTEKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweAogICAgc3dhcAogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTIKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzIDB4Mzg4Y2MxMmQgLy8gbWV0aG9kICJTd2FwcGVkKCh1aW50OCx1aW50OCksdWludDgpIgogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9hcmMtMjgtZXZlbnRzLmFsZ28udHM6OkV2ZW50RW1pdHRlci5lbWl0Q3VzdG9tKGFyZzA6IGJ5dGVzLCBhcmcxOiB1aW50NjQpIC0+IHZvaWQ6CmVtaXRDdXN0b206CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjLTI4LWV2ZW50cy5hbGdvLnRzOjMyCiAgICAvLyBlbWl0Q3VzdG9tKGFyZzA6IHN0cmluZywgYXJnMTogYm9vbGVhbikgewogICAgcHJvdG8gMiAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjLTI4LWV2ZW50cy5hbGdvLnRzOjMzCiAgICAvLyBlbWl0KCdDdXN0b20nLCBhcmcwLCBhcmcxKQogICAgZnJhbWVfZGlnIC0yCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBmcmFtZV9kaWcgLTIKICAgIGNvbmNhdAogICAgYnl0ZWNfMiAvLyAweDAwCiAgICBpbnRjXzAgLy8gMAogICAgZnJhbWVfZGlnIC0xCiAgICBzZXRiaXQKICAgIGludGNfMiAvLyAzCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgYnl0ZWNfMCAvLyAweAogICAgc3dhcAogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMyAvLyBtZXRob2QgIkN1c3RvbShzdHJpbmcsYm9vbCkiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYy0yOC1ldmVudHMuYWxnby50czozNAogICAgLy8gZW1pdCgnQ3VzdG9tKHN0cmluZyxib29sKScsIGFyZzAsIGFyZzEpCiAgICBmcmFtZV9kaWcgLTIKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGZyYW1lX2RpZyAtMgogICAgY29uY2F0CiAgICBieXRlY18yIC8vIDB4MDAKICAgIGludGNfMCAvLyAwCiAgICBmcmFtZV9kaWcgLTEKICAgIHNldGJpdAogICAgaW50Y18yIC8vIDMKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBieXRlY18wIC8vIDB4CiAgICBzd2FwCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18zIC8vIG1ldGhvZCAiQ3VzdG9tKHN0cmluZyxib29sKSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvYXJjLTI4LWV2ZW50cy5hbGdvLnRzOjpFdmVudEVtaXR0ZXIuZW1pdER5bmFtaWNCeXRlcyh4OiBieXRlcywgeTogYnl0ZXMpIC0+IHZvaWQ6CmVtaXREeW5hbWljQnl0ZXM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjLTI4LWV2ZW50cy5hbGdvLnRzOjM3CiAgICAvLyBlbWl0RHluYW1pY0J5dGVzKHg6IGJ5dGVzLCB5OiBEeW5hbWljQnl0ZXMpIHsKICAgIHByb3RvIDIgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYy0yOC1ldmVudHMuYWxnby50czozOAogICAgLy8gZW1pdCgnREIoYnl0ZVtdLGJ5dGVbXSknLCB4LCB5KQogICAgZnJhbWVfZGlnIC0yCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBmcmFtZV9kaWcgLTIKICAgIGNvbmNhdAogICAgaW50Y18zIC8vIDQKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBieXRlY18wIC8vIDB4CiAgICBzd2FwCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gNAogICAgKwogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHVuY292ZXIgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtMQogICAgY29uY2F0CiAgICBwdXNoYnl0ZXMgMHg0NTI0ZTFkZCAvLyBtZXRob2QgIkRCKGJ5dGVbXSxieXRlW10pIgogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9hcmMtMjgtZXZlbnRzLmFsZ28udHM6OkV2ZW50RW1pdHRlci5fX2FsZ290c19fLmRlZmF1bHRDcmVhdGUoKSAtPiB2b2lkOgpfX2FsZ290c19fLmRlZmF1bHRDcmVhdGU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjLTI4LWV2ZW50cy5hbGdvLnRzOjEzCiAgICAvLyBjbGFzcyBFdmVudEVtaXR0ZXIgZXh0ZW5kcyBDb250cmFjdCB7CiAgICBwcm90byAwIDAKICAgIHJldHN1Ygo=", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "state": { @@ -71,6 +76,23 @@ "returns": { "type": "void" } + }, + { + "name": "emitDynamicBytes", + "args": [ + { + "type": "byte[]", + "name": "x" + }, + { + "type": "byte[]", + "name": "y" + } + ], + "readonly": false, + "returns": { + "type": "void" + } } ], "networks": {} diff --git a/tests/approvals/out/arc-28-events/EventEmitter.arc56.json b/tests/approvals/out/arc-28-events/EventEmitter.arc56.json index 833d1e3c..400d6626 100644 --- a/tests/approvals/out/arc-28-events/EventEmitter.arc56.json +++ b/tests/approvals/out/arc-28-events/EventEmitter.arc56.json @@ -118,6 +118,45 @@ } ], "recommendations": {} + }, + { + "name": "emitDynamicBytes", + "args": [ + { + "type": "byte[]", + "name": "x" + }, + { + "type": "byte[]", + "name": "y" + } + ], + "returns": { + "type": "void" + }, + "actions": { + "create": [], + "call": [ + "NoOp" + ] + }, + "readonly": false, + "events": [ + { + "name": "DB", + "args": [ + { + "type": "byte[]", + "name": "0" + }, + { + "type": "byte[]", + "name": "1" + } + ] + } + ], + "recommendations": {} } ], "arcs": [ @@ -158,21 +197,23 @@ "sourceInfo": [ { "pc": [ - 57, - 85 + 66, + 92, + 120 ], "errorMessage": "OnCompletion is not NoOp" }, { "pc": [ - 119 + 154 ], "errorMessage": "can only call when creating" }, { "pc": [ - 62, - 90 + 71, + 97, + 125 ], "errorMessage": "can only call when not creating" } @@ -185,11 +226,11 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxIDMKICAgIGJ5dGVjYmxvY2sgMHggMHgwYjYzMjVlZCAweDAwIDB4YTMxM2MwNjYKCm1haW5fYmxvY2tAMToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmMtMjgtZXZlbnRzLmFsZ28udHM6MTIKICAgIC8vIGNsYXNzIEV2ZW50RW1pdHRlciBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDcKCm1haW5fYWJpX3JvdXRpbmdAMjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmMtMjgtZXZlbnRzLmFsZ28udHM6MTIKICAgIC8vIGNsYXNzIEV2ZW50RW1pdHRlciBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIHB1c2hieXRlcyAweDg3NjliNzlhIC8vIG1ldGhvZCAiZW1pdFN3YXBwZWQodWludDgsdWludDgpdm9pZCIKICAgIHB1c2hieXRlcyAweGYxNDg4OWQ3IC8vIG1ldGhvZCAiZW1pdEN1c3RvbShzdHJpbmcsYm9vbCl2b2lkIgogICAgdW5jb3ZlciAyCiAgICBtYXRjaCBtYWluX2VtaXRTd2FwcGVkX3JvdXRlQDMgbWFpbl9lbWl0Q3VzdG9tX3JvdXRlQDQKCm1haW5fc3dpdGNoX2Nhc2VfZGVmYXVsdEA1OgoKbWFpbl9zd2l0Y2hfY2FzZV9uZXh0QDY6CgptYWluX2FmdGVyX2lmX2Vsc2VAMTE6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjLTI4LWV2ZW50cy5hbGdvLnRzOjEyCiAgICAvLyBjbGFzcyBFdmVudEVtaXR0ZXIgZXh0ZW5kcyBDb250cmFjdCB7CiAgICBpbnRjXzAgLy8gMAoKbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9hcmMtMjgtZXZlbnRzLmFsZ28udHM6OkV2ZW50RW1pdHRlci5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMjoKICAgIHJldHVybgoKbWFpbl9lbWl0Q3VzdG9tX3JvdXRlQDQ6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjLTI4LWV2ZW50cy5hbGdvLnRzOjMxCiAgICAvLyBlbWl0Q3VzdG9tKGFyZzA6IHN0cmluZywgYXJnMTogYm9vbGVhbikgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYy0yOC1ldmVudHMuYWxnby50czoxMgogICAgLy8gY2xhc3MgRXZlbnRFbWl0dGVyIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGludGNfMCAvLyAwCiAgICBnZXRiaXQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmMtMjgtZXZlbnRzLmFsZ28udHM6MzEKICAgIC8vIGVtaXRDdXN0b20oYXJnMDogc3RyaW5nLCBhcmcxOiBib29sZWFuKSB7CiAgICBjYWxsc3ViIGVtaXRDdXN0b20KICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvYXJjLTI4LWV2ZW50cy5hbGdvLnRzOjpFdmVudEVtaXR0ZXIuX19wdXlhX2FyYzRfcm91dGVyX19AMTIKCm1haW5fZW1pdFN3YXBwZWRfcm91dGVAMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmMtMjgtZXZlbnRzLmFsZ28udHM6MTMKICAgIC8vIGVtaXRTd2FwcGVkKGE6IFVpbnROOCwgYjogVWludE44KSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjLTI4LWV2ZW50cy5hbGdvLnRzOjEyCiAgICAvLyBjbGFzcyBFdmVudEVtaXR0ZXIgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjLTI4LWV2ZW50cy5hbGdvLnRzOjEzCiAgICAvLyBlbWl0U3dhcHBlZChhOiBVaW50TjgsIGI6IFVpbnROOCkgewogICAgY2FsbHN1YiBlbWl0U3dhcHBlZAogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9hcmMtMjgtZXZlbnRzLmFsZ28udHM6OkV2ZW50RW1pdHRlci5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMgoKbWFpbl9iYXJlX3JvdXRpbmdANzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmMtMjgtZXZlbnRzLmFsZ28udHM6MTIKICAgIC8vIGNsYXNzIEV2ZW50RW1pdHRlciBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICBtYXRjaCBtYWluX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA4CgptYWluX3N3aXRjaF9jYXNlX2RlZmF1bHRAOToKCm1haW5fc3dpdGNoX2Nhc2VfbmV4dEAxMDoKICAgIGIgbWFpbl9hZnRlcl9pZl9lbHNlQDExCgptYWluX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA4OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYy0yOC1ldmVudHMuYWxnby50czoxMgogICAgLy8gY2xhc3MgRXZlbnRFbWl0dGVyIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICA9PQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgY2FsbHN1YiBfX2FsZ290c19fLmRlZmF1bHRDcmVhdGUKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvYXJjLTI4LWV2ZW50cy5hbGdvLnRzOjpFdmVudEVtaXR0ZXIuX19wdXlhX2FyYzRfcm91dGVyX19AMTIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvYXJjLTI4LWV2ZW50cy5hbGdvLnRzOjpFdmVudEVtaXR0ZXIuZW1pdFN3YXBwZWQoYTogYnl0ZXMsIGI6IGJ5dGVzKSAtPiB2b2lkOgplbWl0U3dhcHBlZDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmMtMjgtZXZlbnRzLmFsZ28udHM6MTMKICAgIC8vIGVtaXRTd2FwcGVkKGE6IFVpbnROOCwgYjogVWludE44KSB7CiAgICBwcm90byAyIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmMtMjgtZXZlbnRzLmFsZ28udHM6MTQKICAgIC8vIGVtaXQ8U3dhcHBlZD4oeyBhOiBiLCBiOiBhIH0pCiAgICBieXRlY18wIC8vIDB4CiAgICBmcmFtZV9kaWcgLTEKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC0yCiAgICBjb25jYXQKICAgIGJ5dGVjXzEgLy8gbWV0aG9kICJTd2FwcGVkKHVpbnQ4LHVpbnQ4KSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjLTI4LWV2ZW50cy5hbGdvLnRzOjE2CiAgICAvLyBjb25zdCB4OiBTd2FwcGVkID0geyBhOiBiLCBiOiBhIH0KICAgIGZyYW1lX2RpZyAtMQogICAgZnJhbWVfZGlnIC0yCiAgICBzd2FwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjLTI4LWV2ZW50cy5hbGdvLnRzOjE3CiAgICAvLyBlbWl0KHgpCiAgICBieXRlY18wIC8vIDB4CiAgICBzd2FwCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMSAvLyBtZXRob2QgIlN3YXBwZWQodWludDgsdWludDgpIgogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmMtMjgtZXZlbnRzLmFsZ28udHM6MTktMjIKICAgIC8vIGNvbnN0IHkgPSBuZXcgU3dhcHBlZEFyYzQoewogICAgLy8gICBhOiBiLAogICAgLy8gICBiOiBhLAogICAgLy8gfSkKICAgIGJ5dGVjXzAgLy8gMHgKICAgIGZyYW1lX2RpZyAtMQogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTIKICAgIGNvbmNhdAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYy0yOC1ldmVudHMuYWxnby50czoyMwogICAgLy8gZW1pdCh5KQogICAgcHVzaGJ5dGVzIDB4NDQxZTJjZDggLy8gbWV0aG9kICJTd2FwcGVkQXJjNCh1aW50OCx1aW50OCkiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYy0yOC1ldmVudHMuYWxnby50czoyNQogICAgLy8gZW1pdCgnU3dhcHBlZCcsIGIsIGEpCiAgICBieXRlY18wIC8vIDB4CiAgICBmcmFtZV9kaWcgLTEKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC0yCiAgICBjb25jYXQKICAgIGJ5dGVjXzEgLy8gbWV0aG9kICJTd2FwcGVkKHVpbnQ4LHVpbnQ4KSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjLTI4LWV2ZW50cy5hbGdvLnRzOjI3CiAgICAvLyBlbWl0KCdTd2FwcGVkKHVpbnQ4LHVpbnQ4KScsIGIsIGEpCiAgICBieXRlY18wIC8vIDB4CiAgICBmcmFtZV9kaWcgLTEKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC0yCiAgICBjb25jYXQKICAgIGJ5dGVjXzEgLy8gbWV0aG9kICJTd2FwcGVkKHVpbnQ4LHVpbnQ4KSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjLTI4LWV2ZW50cy5hbGdvLnRzOjI4CiAgICAvLyBlbWl0KCdTd2FwcGVkKCh1aW50OCx1aW50OCksdWludDgpJywgW2IsIGJdIGFzIGNvbnN0LCBhKQogICAgYnl0ZWNfMCAvLyAweAogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtMQogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtMgogICAgY29uY2F0CiAgICBwdXNoYnl0ZXMgMHgzODhjYzEyZCAvLyBtZXRob2QgIlN3YXBwZWQoKHVpbnQ4LHVpbnQ4KSx1aW50OCkiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL2FyYy0yOC1ldmVudHMuYWxnby50czo6RXZlbnRFbWl0dGVyLmVtaXRDdXN0b20oYXJnMDogYnl0ZXMsIGFyZzE6IHVpbnQ2NCkgLT4gdm9pZDoKZW1pdEN1c3RvbToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmMtMjgtZXZlbnRzLmFsZ28udHM6MzEKICAgIC8vIGVtaXRDdXN0b20oYXJnMDogc3RyaW5nLCBhcmcxOiBib29sZWFuKSB7CiAgICBwcm90byAyIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmMtMjgtZXZlbnRzLmFsZ28udHM6MzIKICAgIC8vIGVtaXQoJ0N1c3RvbScsIGFyZzAsIGFyZzEpCiAgICBmcmFtZV9kaWcgLTIKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGZyYW1lX2RpZyAtMgogICAgY29uY2F0CiAgICBieXRlY18yIC8vIDB4MDAKICAgIGludGNfMCAvLyAwCiAgICBmcmFtZV9kaWcgLTEKICAgIHNldGJpdAogICAgaW50Y18yIC8vIDMKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBieXRlY18wIC8vIDB4CiAgICBzd2FwCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18zIC8vIG1ldGhvZCAiQ3VzdG9tKHN0cmluZyxib29sKSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjLTI4LWV2ZW50cy5hbGdvLnRzOjMzCiAgICAvLyBlbWl0KCdDdXN0b20oc3RyaW5nLGJvb2wpJywgYXJnMCwgYXJnMSkKICAgIGZyYW1lX2RpZyAtMgogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgZnJhbWVfZGlnIC0yCiAgICBjb25jYXQKICAgIGJ5dGVjXzIgLy8gMHgwMAogICAgaW50Y18wIC8vIDAKICAgIGZyYW1lX2RpZyAtMQogICAgc2V0Yml0CiAgICBpbnRjXzIgLy8gMwogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGJ5dGVjXzAgLy8gMHgKICAgIHN3YXAKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzMgLy8gbWV0aG9kICJDdXN0b20oc3RyaW5nLGJvb2wpIgogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9hcmMtMjgtZXZlbnRzLmFsZ28udHM6OkV2ZW50RW1pdHRlci5fX2FsZ290c19fLmRlZmF1bHRDcmVhdGUoKSAtPiB2b2lkOgpfX2FsZ290c19fLmRlZmF1bHRDcmVhdGU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjLTI4LWV2ZW50cy5hbGdvLnRzOjEyCiAgICAvLyBjbGFzcyBFdmVudEVtaXR0ZXIgZXh0ZW5kcyBDb250cmFjdCB7CiAgICBwcm90byAwIDAKICAgIHJldHN1Ygo=", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxIDMgNAogICAgYnl0ZWNibG9jayAweCAweDBiNjMyNWVkIDB4MDAgMHhhMzEzYzA2NgoKbWFpbl9ibG9ja0AxOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYy0yOC1ldmVudHMuYWxnby50czoxMwogICAgLy8gY2xhc3MgRXZlbnRFbWl0dGVyIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdAOAoKbWFpbl9hYmlfcm91dGluZ0AyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYy0yOC1ldmVudHMuYWxnby50czoxMwogICAgLy8gY2xhc3MgRXZlbnRFbWl0dGVyIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgcHVzaGJ5dGVzIDB4ODc2OWI3OWEgLy8gbWV0aG9kICJlbWl0U3dhcHBlZCh1aW50OCx1aW50OCl2b2lkIgogICAgcHVzaGJ5dGVzIDB4ZjE0ODg5ZDcgLy8gbWV0aG9kICJlbWl0Q3VzdG9tKHN0cmluZyxib29sKXZvaWQiCiAgICBwdXNoYnl0ZXMgMHhkNGM5N2M5YyAvLyBtZXRob2QgImVtaXREeW5hbWljQnl0ZXMoYnl0ZVtdLGJ5dGVbXSl2b2lkIgogICAgdW5jb3ZlciAzCiAgICBtYXRjaCBtYWluX2VtaXRTd2FwcGVkX3JvdXRlQDMgbWFpbl9lbWl0Q3VzdG9tX3JvdXRlQDQgbWFpbl9lbWl0RHluYW1pY0J5dGVzX3JvdXRlQDUKCm1haW5fc3dpdGNoX2Nhc2VfZGVmYXVsdEA2OgoKbWFpbl9zd2l0Y2hfY2FzZV9uZXh0QDc6CgptYWluX2FmdGVyX2lmX2Vsc2VAMTI6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjLTI4LWV2ZW50cy5hbGdvLnRzOjEzCiAgICAvLyBjbGFzcyBFdmVudEVtaXR0ZXIgZXh0ZW5kcyBDb250cmFjdCB7CiAgICBpbnRjXzAgLy8gMAoKbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9hcmMtMjgtZXZlbnRzLmFsZ28udHM6OkV2ZW50RW1pdHRlci5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMzoKICAgIHJldHVybgoKbWFpbl9lbWl0RHluYW1pY0J5dGVzX3JvdXRlQDU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjLTI4LWV2ZW50cy5hbGdvLnRzOjM3CiAgICAvLyBlbWl0RHluYW1pY0J5dGVzKHg6IGJ5dGVzLCB5OiBEeW5hbWljQnl0ZXMpIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmMtMjgtZXZlbnRzLmFsZ28udHM6MTMKICAgIC8vIGNsYXNzIEV2ZW50RW1pdHRlciBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjLTI4LWV2ZW50cy5hbGdvLnRzOjM3CiAgICAvLyBlbWl0RHluYW1pY0J5dGVzKHg6IGJ5dGVzLCB5OiBEeW5hbWljQnl0ZXMpIHsKICAgIGNhbGxzdWIgZW1pdER5bmFtaWNCeXRlcwogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9hcmMtMjgtZXZlbnRzLmFsZ28udHM6OkV2ZW50RW1pdHRlci5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMwoKbWFpbl9lbWl0Q3VzdG9tX3JvdXRlQDQ6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjLTI4LWV2ZW50cy5hbGdvLnRzOjMyCiAgICAvLyBlbWl0Q3VzdG9tKGFyZzA6IHN0cmluZywgYXJnMTogYm9vbGVhbikgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYy0yOC1ldmVudHMuYWxnby50czoxMwogICAgLy8gY2xhc3MgRXZlbnRFbWl0dGVyIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGludGNfMCAvLyAwCiAgICBnZXRiaXQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmMtMjgtZXZlbnRzLmFsZ28udHM6MzIKICAgIC8vIGVtaXRDdXN0b20oYXJnMDogc3RyaW5nLCBhcmcxOiBib29sZWFuKSB7CiAgICBjYWxsc3ViIGVtaXRDdXN0b20KICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvYXJjLTI4LWV2ZW50cy5hbGdvLnRzOjpFdmVudEVtaXR0ZXIuX19wdXlhX2FyYzRfcm91dGVyX19AMTMKCm1haW5fZW1pdFN3YXBwZWRfcm91dGVAMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmMtMjgtZXZlbnRzLmFsZ28udHM6MTQKICAgIC8vIGVtaXRTd2FwcGVkKGE6IFVpbnROOCwgYjogVWludE44KSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjLTI4LWV2ZW50cy5hbGdvLnRzOjEzCiAgICAvLyBjbGFzcyBFdmVudEVtaXR0ZXIgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjLTI4LWV2ZW50cy5hbGdvLnRzOjE0CiAgICAvLyBlbWl0U3dhcHBlZChhOiBVaW50TjgsIGI6IFVpbnROOCkgewogICAgY2FsbHN1YiBlbWl0U3dhcHBlZAogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9hcmMtMjgtZXZlbnRzLmFsZ28udHM6OkV2ZW50RW1pdHRlci5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMwoKbWFpbl9iYXJlX3JvdXRpbmdAODoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmMtMjgtZXZlbnRzLmFsZ28udHM6MTMKICAgIC8vIGNsYXNzIEV2ZW50RW1pdHRlciBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICBtYXRjaCBtYWluX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA5CgptYWluX3N3aXRjaF9jYXNlX2RlZmF1bHRAMTA6CgptYWluX3N3aXRjaF9jYXNlX25leHRAMTE6CiAgICBiIG1haW5fYWZ0ZXJfaWZfZWxzZUAxMgoKbWFpbl9fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVAOToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmMtMjgtZXZlbnRzLmFsZ28udHM6MTMKICAgIC8vIGNsYXNzIEV2ZW50RW1pdHRlciBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgPT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGNhbGxzdWIgX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL2FyYy0yOC1ldmVudHMuYWxnby50czo6RXZlbnRFbWl0dGVyLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDEzCgoKLy8gdGVzdHMvYXBwcm92YWxzL2FyYy0yOC1ldmVudHMuYWxnby50czo6RXZlbnRFbWl0dGVyLmVtaXRTd2FwcGVkKGE6IGJ5dGVzLCBiOiBieXRlcykgLT4gdm9pZDoKZW1pdFN3YXBwZWQ6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjLTI4LWV2ZW50cy5hbGdvLnRzOjE0CiAgICAvLyBlbWl0U3dhcHBlZChhOiBVaW50TjgsIGI6IFVpbnROOCkgewogICAgcHJvdG8gMiAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjLTI4LWV2ZW50cy5hbGdvLnRzOjE1CiAgICAvLyBlbWl0PFN3YXBwZWQ+KHsgYTogYiwgYjogYSB9KQogICAgYnl0ZWNfMCAvLyAweAogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtMgogICAgY29uY2F0CiAgICBieXRlY18xIC8vIG1ldGhvZCAiU3dhcHBlZCh1aW50OCx1aW50OCkiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYy0yOC1ldmVudHMuYWxnby50czoxNwogICAgLy8gY29uc3QgeDogU3dhcHBlZCA9IHsgYTogYiwgYjogYSB9CiAgICBmcmFtZV9kaWcgLTEKICAgIGZyYW1lX2RpZyAtMgogICAgc3dhcAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYy0yOC1ldmVudHMuYWxnby50czoxOAogICAgLy8gZW1pdCh4KQogICAgYnl0ZWNfMCAvLyAweAogICAgc3dhcAogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzEgLy8gbWV0aG9kICJTd2FwcGVkKHVpbnQ4LHVpbnQ4KSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjLTI4LWV2ZW50cy5hbGdvLnRzOjIwLTIzCiAgICAvLyBjb25zdCB5ID0gbmV3IFN3YXBwZWRBcmM0KHsKICAgIC8vICAgYTogYiwKICAgIC8vICAgYjogYSwKICAgIC8vIH0pCiAgICBieXRlY18wIC8vIDB4CiAgICBmcmFtZV9kaWcgLTEKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC0yCiAgICBjb25jYXQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmMtMjgtZXZlbnRzLmFsZ28udHM6MjQKICAgIC8vIGVtaXQoeSkKICAgIHB1c2hieXRlcyAweDQ0MWUyY2Q4IC8vIG1ldGhvZCAiU3dhcHBlZEFyYzQodWludDgsdWludDgpIgogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmMtMjgtZXZlbnRzLmFsZ28udHM6MjYKICAgIC8vIGVtaXQoJ1N3YXBwZWQnLCBiLCBhKQogICAgYnl0ZWNfMCAvLyAweAogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtMgogICAgY29uY2F0CiAgICBieXRlY18xIC8vIG1ldGhvZCAiU3dhcHBlZCh1aW50OCx1aW50OCkiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYy0yOC1ldmVudHMuYWxnby50czoyOAogICAgLy8gZW1pdCgnU3dhcHBlZCh1aW50OCx1aW50OCknLCBiLCBhKQogICAgYnl0ZWNfMCAvLyAweAogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtMgogICAgY29uY2F0CiAgICBieXRlY18xIC8vIG1ldGhvZCAiU3dhcHBlZCh1aW50OCx1aW50OCkiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYy0yOC1ldmVudHMuYWxnby50czoyOQogICAgLy8gZW1pdCgnU3dhcHBlZCgodWludDgsdWludDgpLHVpbnQ4KScsIFtiLCBiXSBhcyBjb25zdCwgYSkKICAgIGJ5dGVjXzAgLy8gMHgKICAgIGZyYW1lX2RpZyAtMQogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTEKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweAogICAgc3dhcAogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTIKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzIDB4Mzg4Y2MxMmQgLy8gbWV0aG9kICJTd2FwcGVkKCh1aW50OCx1aW50OCksdWludDgpIgogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9hcmMtMjgtZXZlbnRzLmFsZ28udHM6OkV2ZW50RW1pdHRlci5lbWl0Q3VzdG9tKGFyZzA6IGJ5dGVzLCBhcmcxOiB1aW50NjQpIC0+IHZvaWQ6CmVtaXRDdXN0b206CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjLTI4LWV2ZW50cy5hbGdvLnRzOjMyCiAgICAvLyBlbWl0Q3VzdG9tKGFyZzA6IHN0cmluZywgYXJnMTogYm9vbGVhbikgewogICAgcHJvdG8gMiAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjLTI4LWV2ZW50cy5hbGdvLnRzOjMzCiAgICAvLyBlbWl0KCdDdXN0b20nLCBhcmcwLCBhcmcxKQogICAgZnJhbWVfZGlnIC0yCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBmcmFtZV9kaWcgLTIKICAgIGNvbmNhdAogICAgYnl0ZWNfMiAvLyAweDAwCiAgICBpbnRjXzAgLy8gMAogICAgZnJhbWVfZGlnIC0xCiAgICBzZXRiaXQKICAgIGludGNfMiAvLyAzCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgYnl0ZWNfMCAvLyAweAogICAgc3dhcAogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMyAvLyBtZXRob2QgIkN1c3RvbShzdHJpbmcsYm9vbCkiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYy0yOC1ldmVudHMuYWxnby50czozNAogICAgLy8gZW1pdCgnQ3VzdG9tKHN0cmluZyxib29sKScsIGFyZzAsIGFyZzEpCiAgICBmcmFtZV9kaWcgLTIKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGZyYW1lX2RpZyAtMgogICAgY29uY2F0CiAgICBieXRlY18yIC8vIDB4MDAKICAgIGludGNfMCAvLyAwCiAgICBmcmFtZV9kaWcgLTEKICAgIHNldGJpdAogICAgaW50Y18yIC8vIDMKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBieXRlY18wIC8vIDB4CiAgICBzd2FwCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18zIC8vIG1ldGhvZCAiQ3VzdG9tKHN0cmluZyxib29sKSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvYXJjLTI4LWV2ZW50cy5hbGdvLnRzOjpFdmVudEVtaXR0ZXIuZW1pdER5bmFtaWNCeXRlcyh4OiBieXRlcywgeTogYnl0ZXMpIC0+IHZvaWQ6CmVtaXREeW5hbWljQnl0ZXM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjLTI4LWV2ZW50cy5hbGdvLnRzOjM3CiAgICAvLyBlbWl0RHluYW1pY0J5dGVzKHg6IGJ5dGVzLCB5OiBEeW5hbWljQnl0ZXMpIHsKICAgIHByb3RvIDIgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYy0yOC1ldmVudHMuYWxnby50czozOAogICAgLy8gZW1pdCgnREIoYnl0ZVtdLGJ5dGVbXSknLCB4LCB5KQogICAgZnJhbWVfZGlnIC0yCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBmcmFtZV9kaWcgLTIKICAgIGNvbmNhdAogICAgaW50Y18zIC8vIDQKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBieXRlY18wIC8vIDB4CiAgICBzd2FwCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gNAogICAgKwogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHVuY292ZXIgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtMQogICAgY29uY2F0CiAgICBwdXNoYnl0ZXMgMHg0NTI0ZTFkZCAvLyBtZXRob2QgIkRCKGJ5dGVbXSxieXRlW10pIgogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9hcmMtMjgtZXZlbnRzLmFsZ28udHM6OkV2ZW50RW1pdHRlci5fX2FsZ290c19fLmRlZmF1bHRDcmVhdGUoKSAtPiB2b2lkOgpfX2FsZ290c19fLmRlZmF1bHRDcmVhdGU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjLTI4LWV2ZW50cy5hbGdvLnRzOjEzCiAgICAvLyBjbGFzcyBFdmVudEVtaXR0ZXIgZXh0ZW5kcyBDb250cmFjdCB7CiAgICBwcm90byAwIDAKICAgIHJldHN1Ygo=", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "byteCode": { - "approval": "CiADAAEDJgQABAtjJe0BAASjE8BmMRsiE0EATDYaAIAEh2m3moAE8UiJ108CjgIAHgACIkMxGSISRDEYIhNENhoBVwIANhoCIlOIAIsjQv/jMRkiEkQxGCITRDYaATYaAogAGyNC/8wxGSJMjgEAA0L/wDEYIhJEiACfI0L/tYoCACiL/1CL/lApTFCwi/+L/kwoTFBMUClMULAoi/9Qi/5QgAREHizYTFCwKIv/UIv+UClMULAoi/9Qi/5QKUxQsCiL/1CL/1AoTFCL/lCABDiMwS1MULCJigIAi/4VFlcGAov+UCoii/9UJBZXBgIoTFBMUExQK0xQsIv+FRZXBgKL/lAqIov/VCQWVwYCKExQTFBMUCtMULCJigAAiQ==", + "approval": "CiAEAAEDBCYEAAQLYyXtAQAEoxPAZjEbIhNBAG42GgCABIdpt5qABPFIideABNTJfJxPA44DADgAHAACIkMxGSISRDEYIhNENhoBVwIANhoCiADpI0L/5TEZIhJEMRgiE0Q2GgFXAgA2GgIiU4gAiyNC/8kxGSISRDEYIhNENhoBNhoCiAAbI0L/sjEZIkyOAQADQv+mMRgiEkSIANAjQv+bigIAKIv/UIv+UClMULCL/4v+TChMUExQKUxQsCiL/1CL/lCABEQeLNhMULAoi/9Qi/5QKUxQsCiL/1CL/lApTFCwKIv/UIv/UChMUIv+UIAEOIzBLUxQsImKAgCL/hUWVwYCi/5QKiKL/1QkFlcGAihMUExQTFArTFCwi/4VFlcGAov+UCoii/9UJBZXBgIoTFBMUExQK0xQsImKAgCL/hUWVwYCi/5QJRZXBgIoTFBMSRUlCBZXBgJPAkxQTFCL/1CABEUk4d1MULCJigAAiQ==", "clear": "CoEBQw==" }, "compilerInfo": { @@ -265,6 +306,19 @@ "name": "1" } ] + }, + { + "name": "DB", + "args": [ + { + "type": "byte[]", + "name": "0" + }, + { + "type": "byte[]", + "name": "1" + } + ] } ], "templateVariables": {} diff --git a/tests/approvals/out/arc-28-events/EventEmitter.ir/EventEmitter.approval.0.ssa.ir b/tests/approvals/out/arc-28-events/EventEmitter.ir/EventEmitter.approval.0.ssa.ir index cd4de745..e07984c7 100644 --- a/tests/approvals/out/arc-28-events/EventEmitter.ir/EventEmitter.approval.0.ssa.ir +++ b/tests/approvals/out/arc-28-events/EventEmitter.ir/EventEmitter.approval.0.ssa.ir @@ -4,14 +4,14 @@ main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalP return tmp%0#0 subroutine tests/approvals/arc-28-events.algo.ts::EventEmitter.__puya_arc4_router__() -> bool: - block@0: // L12 + block@0: // L13 let tmp%0#0: uint64 = (txn NumAppArgs) let tmp%1#0: bool = (!= tmp%0#0 0u) - goto tmp%1#0 ? block@1 : block@6 - block@1: // abi_routing_L12 + goto tmp%1#0 ? block@1 : block@7 + block@1: // abi_routing_L13 let tmp%2#0: bytes = (txna ApplicationArgs 0) - switch tmp%2#0 {method "emitSwapped(uint8,uint8)void" => block@2, method "emitCustom(string,bool)void" => block@3, * => block@4} - block@2: // emitSwapped_route_L13 + switch tmp%2#0 {method "emitSwapped(uint8,uint8)void" => block@2, method "emitCustom(string,bool)void" => block@3, method "emitDynamicBytes(byte[],byte[])void" => block@4, * => block@5} + block@2: // emitSwapped_route_L14 let tmp%3#0: uint64 = (txn OnCompletion) let tmp%4#0: bool = (== tmp%3#0 NoOp) (assert tmp%4#0) // OnCompletion is not NoOp @@ -22,7 +22,7 @@ subroutine tests/approvals/arc-28-events.algo.ts::EventEmitter.__puya_arc4_route let tmp%8#0: bytes = (txna ApplicationArgs 2) tests/approvals/arc-28-events.algo.ts::EventEmitter.emitSwapped(tmp%7#0, tmp%8#0) return 1u - block@3: // emitCustom_route_L31 + block@3: // emitCustom_route_L32 let tmp%9#0: uint64 = (txn OnCompletion) let tmp%10#0: bool = (== tmp%9#0 NoOp) (assert tmp%10#0) // OnCompletion is not NoOp @@ -35,28 +35,40 @@ subroutine tests/approvals/arc-28-events.algo.ts::EventEmitter.__puya_arc4_route let tmp%16#0: bool = (getbit tmp%15#0 0u) tests/approvals/arc-28-events.algo.ts::EventEmitter.emitCustom(tmp%14#0, tmp%16#0) return 1u - block@4: // switch_case_default_L12 - goto block@5 - block@5: // switch_case_next_L12 - goto block@10 - block@6: // bare_routing_L12 + block@4: // emitDynamicBytes_route_L37 let tmp%17#0: uint64 = (txn OnCompletion) - switch tmp%17#0 {0u => block@7, * => block@8} - block@7: // __algots__.defaultCreate_L12 - let tmp%18#0: uint64 = (txn ApplicationID) - let tmp%19#0: bool = (== tmp%18#0 0u) - (assert tmp%19#0) // can only call when creating + let tmp%18#0: bool = (== tmp%17#0 NoOp) + (assert tmp%18#0) // OnCompletion is not NoOp + let tmp%19#0: uint64 = (txn ApplicationID) + let tmp%20#0: bool = (!= tmp%19#0 0u) + (assert tmp%20#0) // can only call when not creating + let tmp%21#0: bytes = (txna ApplicationArgs 1) + let tmp%22#0: bytes = ((extract 2 0) tmp%21#0) + let tmp%23#0: bytes = (txna ApplicationArgs 2) + tests/approvals/arc-28-events.algo.ts::EventEmitter.emitDynamicBytes(tmp%22#0, tmp%23#0) + return 1u + block@5: // switch_case_default_L13 + goto block@6 + block@6: // switch_case_next_L13 + goto block@11 + block@7: // bare_routing_L13 + let tmp%24#0: uint64 = (txn OnCompletion) + switch tmp%24#0 {0u => block@8, * => block@9} + block@8: // __algots__.defaultCreate_L13 + let tmp%25#0: uint64 = (txn ApplicationID) + let tmp%26#0: bool = (== tmp%25#0 0u) + (assert tmp%26#0) // can only call when creating tests/approvals/arc-28-events.algo.ts::EventEmitter.__algots__.defaultCreate() return 1u - block@8: // switch_case_default_L12 - goto block@9 - block@9: // switch_case_next_L12 + block@9: // switch_case_default_L13 goto block@10 - block@10: // after_if_else_L12 + block@10: // switch_case_next_L13 + goto block@11 + block@11: // after_if_else_L13 return 0u subroutine tests/approvals/arc-28-events.algo.ts::EventEmitter.emitSwapped(a: bytes, b: bytes) -> void: - block@0: // L13 + block@0: // L14 let current_tail_offset%0#0: uint64 = 2u let encoded_tuple_buffer%0#0: bytes = 0x let encoded_tuple_buffer%1#0: bytes = (concat encoded_tuple_buffer%0#0 b#0) @@ -102,7 +114,7 @@ subroutine tests/approvals/arc-28-events.algo.ts::EventEmitter.emitSwapped(a: by return subroutine tests/approvals/arc-28-events.algo.ts::EventEmitter.emitCustom(arg0: bytes, arg1: bool) -> void: - block@0: // L31 + block@0: // L32 let length%0#0: uint64 = (len arg0#0) let as_bytes%0#0: bytes = (itob length%0#0) let length_uint16%0#0: bytes = ((extract 6 2) as_bytes%0#0) @@ -137,6 +149,30 @@ subroutine tests/approvals/arc-28-events.algo.ts::EventEmitter.emitCustom(arg0: (log event%1#0) return +subroutine tests/approvals/arc-28-events.algo.ts::EventEmitter.emitDynamicBytes(x: bytes, y: bytes) -> void: + block@0: // L37 + let length%0#0: uint64 = (len x#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 x#0) + let current_tail_offset%0#0: uint64 = 4u + let encoded_tuple_buffer%0#0: bytes = 0x + let as_bytes%1#0: bytes = (itob current_tail_offset%0#0) + let offset_as_uint16%0#0: bytes = ((extract 6 2) as_bytes%1#0) + let encoded_tuple_buffer%1#0: bytes = (concat encoded_tuple_buffer%0#0 offset_as_uint16%0#0) + let data_length%0#0: uint64 = (len encoded_value%0#0) + let current_tail_offset%1#0: uint64 = (+ current_tail_offset%0#0 data_length%0#0) + let as_bytes%2#0: bytes = (itob current_tail_offset%1#0) + let offset_as_uint16%1#0: bytes = ((extract 6 2) as_bytes%2#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 y#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 encoded_value%0#0) + let encoded_tuple_buffer%4#0: bytes = (concat encoded_tuple_buffer%3#0 y#0) + let event%0#0: bytes = (concat method "DB(byte[],byte[])" encoded_tuple_buffer%4#0) + (log event%0#0) + return + subroutine tests/approvals/arc-28-events.algo.ts::EventEmitter.__algots__.defaultCreate() -> void: - block@0: // L12 + block@0: // L13 return \ No newline at end of file diff --git a/tests/approvals/out/arc-28-events/arc-28-events.awst b/tests/approvals/out/arc-28-events/arc-28-events.awst index 21645f15..be6c1b69 100644 --- a/tests/approvals/out/arc-28-events/arc-28-events.awst +++ b/tests/approvals/out/arc-28-events/arc-28-events.awst @@ -10,7 +10,7 @@ contract EventEmitter return True } - emitSwapped(): void + emitSwapped(a: arc4.uint8, b: arc4.uint8): void { emit("Swapped(uint8,uint8)", ARC4_ENCODE({ a: b, b: a }, wtype=Swapped)) x: Swapped{ a: arc4.uint8, b: arc4.uint8 } = { a: (#0 = { a: b, b: a }).a, b: #0.b } @@ -22,12 +22,17 @@ contract EventEmitter emit("Swapped((uint8,uint8),uint8)", new Swapped(0=ARC4_ENCODE([b, b], wtype=arc4.tuple), 1=a)) } - emitCustom(): void + emitCustom(arg0: string, arg1: bool): void { emit("Custom(string,bool)", new Custom(0=ARC4_ENCODE(arg0, wtype=arc4.dynamic_array), 1=ARC4_ENCODE(arg1, wtype=arc4.bool))) emit("Custom(string,bool)", new Custom(0=ARC4_ENCODE(arg0, wtype=arc4.dynamic_array), 1=ARC4_ENCODE(arg1, wtype=arc4.bool))) } + emitDynamicBytes(x: bytes, y: arc4.dynamic_array): void + { + emit("DB(byte[],byte[])", new DB(0=ARC4_ENCODE(x, wtype=arc4.dynamic_array), 1=y)) + } + __algots__.defaultCreate(): void { } diff --git a/tests/approvals/out/arc-28-events/arc-28-events.awst.json b/tests/approvals/out/arc-28-events/arc-28-events.awst.json index 6726e08c..55096f77 100644 --- a/tests/approvals/out/arc-28-events/arc-28-events.awst.json +++ b/tests/approvals/out/arc-28-events/arc-28-events.awst.json @@ -3,8 +3,8 @@ "_type": "Contract", "source_location": { "file": "tests/approvals/arc-28-events.algo.ts", - "line": 12, - "end_line": 12, + "line": 13, + "end_line": 13, "column": 0, "end_column": 37 }, @@ -165,8 +165,8 @@ "_type": "ContractMethod", "source_location": { "file": "tests/approvals/arc-28-events.algo.ts", - "line": 13, - "end_line": 13, + "line": 14, + "end_line": 14, "column": 2, "end_column": 35 }, @@ -192,8 +192,8 @@ }, "source_location": { "file": "tests/approvals/arc-28-events.algo.ts", - "line": 13, - "end_line": 13, + "line": 14, + "end_line": 14, "column": 14, "end_column": 23 } @@ -219,8 +219,8 @@ }, "source_location": { "file": "tests/approvals/arc-28-events.algo.ts", - "line": 13, - "end_line": 13, + "line": 14, + "end_line": 14, "column": 25, "end_column": 34 } @@ -237,8 +237,8 @@ "_type": "Block", "source_location": { "file": "tests/approvals/arc-28-events.algo.ts", - "line": 13, - "end_line": 29, + "line": 14, + "end_line": 30, "column": 36, "end_column": 3 }, @@ -247,8 +247,8 @@ "_type": "ExpressionStatement", "source_location": { "file": "tests/approvals/arc-28-events.algo.ts", - "line": 14, - "end_line": 14, + "line": 15, + "end_line": 15, "column": 4, "end_column": 33 }, @@ -256,8 +256,8 @@ "_type": "Emit", "source_location": { "file": "tests/approvals/arc-28-events.algo.ts", - "line": 14, - "end_line": 14, + "line": 15, + "end_line": 15, "column": 4, "end_column": 33 }, @@ -273,8 +273,8 @@ "_type": "ARC4Encode", "source_location": { "file": "tests/approvals/arc-28-events.algo.ts", - "line": 14, - "end_line": 14, + "line": 15, + "end_line": 15, "column": 18, "end_column": 32 }, @@ -328,8 +328,8 @@ "_type": "TupleExpression", "source_location": { "file": "tests/approvals/arc-28-events.algo.ts", - "line": 14, - "end_line": 14, + "line": 15, + "end_line": 15, "column": 18, "end_column": 32 }, @@ -383,8 +383,8 @@ "_type": "VarExpression", "source_location": { "file": "tests/approvals/arc-28-events.algo.ts", - "line": 14, - "end_line": 14, + "line": 15, + "end_line": 15, "column": 23, "end_column": 24 }, @@ -410,8 +410,8 @@ "_type": "VarExpression", "source_location": { "file": "tests/approvals/arc-28-events.algo.ts", - "line": 14, - "end_line": 14, + "line": 15, + "end_line": 15, "column": 29, "end_column": 30 }, @@ -442,8 +442,8 @@ "_type": "AssignmentStatement", "source_location": { "file": "tests/approvals/arc-28-events.algo.ts", - "line": 16, - "end_line": 16, + "line": 17, + "end_line": 17, "column": 10, "end_column": 37 }, @@ -451,8 +451,8 @@ "_type": "VarExpression", "source_location": { "file": "tests/approvals/arc-28-events.algo.ts", - "line": 16, - "end_line": 16, + "line": 17, + "end_line": 17, "column": 10, "end_column": 11 }, @@ -507,8 +507,8 @@ "_type": "TupleExpression", "source_location": { "file": "tests/approvals/arc-28-events.algo.ts", - "line": 16, - "end_line": 16, + "line": 17, + "end_line": 17, "column": 23, "end_column": 37 }, @@ -562,8 +562,8 @@ "_type": "FieldExpression", "source_location": { "file": "tests/approvals/arc-28-events.algo.ts", - "line": 16, - "end_line": 16, + "line": 17, + "end_line": 17, "column": 23, "end_column": 37 }, @@ -587,8 +587,8 @@ "_type": "SingleEvaluation", "source_location": { "file": "tests/approvals/arc-28-events.algo.ts", - "line": 16, - "end_line": 16, + "line": 17, + "end_line": 17, "column": 23, "end_column": 37 }, @@ -641,8 +641,8 @@ "_type": "TupleExpression", "source_location": { "file": "tests/approvals/arc-28-events.algo.ts", - "line": 16, - "end_line": 16, + "line": 17, + "end_line": 17, "column": 23, "end_column": 37 }, @@ -696,8 +696,8 @@ "_type": "VarExpression", "source_location": { "file": "tests/approvals/arc-28-events.algo.ts", - "line": 16, - "end_line": 16, + "line": 17, + "end_line": 17, "column": 28, "end_column": 29 }, @@ -723,8 +723,8 @@ "_type": "VarExpression", "source_location": { "file": "tests/approvals/arc-28-events.algo.ts", - "line": 16, - "end_line": 16, + "line": 17, + "end_line": 17, "column": 34, "end_column": 35 }, @@ -756,8 +756,8 @@ "_type": "FieldExpression", "source_location": { "file": "tests/approvals/arc-28-events.algo.ts", - "line": 16, - "end_line": 16, + "line": 17, + "end_line": 17, "column": 23, "end_column": 37 }, @@ -781,8 +781,8 @@ "_type": "SingleEvaluation", "source_location": { "file": "tests/approvals/arc-28-events.algo.ts", - "line": 16, - "end_line": 16, + "line": 17, + "end_line": 17, "column": 23, "end_column": 37 }, @@ -835,8 +835,8 @@ "_type": "TupleExpression", "source_location": { "file": "tests/approvals/arc-28-events.algo.ts", - "line": 16, - "end_line": 16, + "line": 17, + "end_line": 17, "column": 23, "end_column": 37 }, @@ -890,8 +890,8 @@ "_type": "VarExpression", "source_location": { "file": "tests/approvals/arc-28-events.algo.ts", - "line": 16, - "end_line": 16, + "line": 17, + "end_line": 17, "column": 28, "end_column": 29 }, @@ -917,8 +917,8 @@ "_type": "VarExpression", "source_location": { "file": "tests/approvals/arc-28-events.algo.ts", - "line": 16, - "end_line": 16, + "line": 17, + "end_line": 17, "column": 34, "end_column": 35 }, @@ -953,8 +953,8 @@ "_type": "ExpressionStatement", "source_location": { "file": "tests/approvals/arc-28-events.algo.ts", - "line": 17, - "end_line": 17, + "line": 18, + "end_line": 18, "column": 4, "end_column": 11 }, @@ -962,8 +962,8 @@ "_type": "Emit", "source_location": { "file": "tests/approvals/arc-28-events.algo.ts", - "line": 17, - "end_line": 17, + "line": 18, + "end_line": 18, "column": 4, "end_column": 11 }, @@ -979,8 +979,8 @@ "_type": "ARC4Encode", "source_location": { "file": "tests/approvals/arc-28-events.algo.ts", - "line": 17, - "end_line": 17, + "line": 18, + "end_line": 18, "column": 9, "end_column": 10 }, @@ -1034,8 +1034,8 @@ "_type": "VarExpression", "source_location": { "file": "tests/approvals/arc-28-events.algo.ts", - "line": 17, - "end_line": 17, + "line": 18, + "end_line": 18, "column": 9, "end_column": 10 }, @@ -1093,8 +1093,8 @@ "_type": "AssignmentStatement", "source_location": { "file": "tests/approvals/arc-28-events.algo.ts", - "line": 19, - "end_line": 22, + "line": 20, + "end_line": 23, "column": 10, "end_column": 6 }, @@ -1102,8 +1102,8 @@ "_type": "VarExpression", "source_location": { "file": "tests/approvals/arc-28-events.algo.ts", - "line": 19, - "end_line": 19, + "line": 20, + "end_line": 20, "column": 10, "end_column": 11 }, @@ -1151,8 +1151,8 @@ }, "source_location": { "file": "tests/approvals/arc-28-events.algo.ts", - "line": 19, - "end_line": 19, + "line": 20, + "end_line": 20, "column": 10, "end_column": 11 }, @@ -1165,8 +1165,8 @@ "_type": "NewStruct", "source_location": { "file": "tests/approvals/arc-28-events.algo.ts", - "line": 19, - "end_line": 22, + "line": 20, + "end_line": 23, "column": 14, "end_column": 6 }, @@ -1214,8 +1214,8 @@ }, "source_location": { "file": "tests/approvals/arc-28-events.algo.ts", - "line": 19, - "end_line": 19, + "line": 20, + "end_line": 20, "column": 18, "end_column": 29 }, @@ -1227,8 +1227,8 @@ "_type": "FieldExpression", "source_location": { "file": "tests/approvals/arc-28-events.algo.ts", - "line": 19, - "end_line": 22, + "line": 20, + "end_line": 23, "column": 14, "end_column": 6 }, @@ -1252,8 +1252,8 @@ "_type": "SingleEvaluation", "source_location": { "file": "tests/approvals/arc-28-events.algo.ts", - "line": 19, - "end_line": 22, + "line": 20, + "end_line": 23, "column": 30, "end_column": 5 }, @@ -1306,8 +1306,8 @@ "_type": "TupleExpression", "source_location": { "file": "tests/approvals/arc-28-events.algo.ts", - "line": 19, - "end_line": 22, + "line": 20, + "end_line": 23, "column": 30, "end_column": 5 }, @@ -1361,8 +1361,8 @@ "_type": "VarExpression", "source_location": { "file": "tests/approvals/arc-28-events.algo.ts", - "line": 20, - "end_line": 20, + "line": 21, + "end_line": 21, "column": 9, "end_column": 10 }, @@ -1388,8 +1388,8 @@ "_type": "VarExpression", "source_location": { "file": "tests/approvals/arc-28-events.algo.ts", - "line": 21, - "end_line": 21, + "line": 22, + "end_line": 22, "column": 9, "end_column": 10 }, @@ -1421,8 +1421,8 @@ "_type": "FieldExpression", "source_location": { "file": "tests/approvals/arc-28-events.algo.ts", - "line": 19, - "end_line": 22, + "line": 20, + "end_line": 23, "column": 14, "end_column": 6 }, @@ -1446,8 +1446,8 @@ "_type": "SingleEvaluation", "source_location": { "file": "tests/approvals/arc-28-events.algo.ts", - "line": 19, - "end_line": 22, + "line": 20, + "end_line": 23, "column": 30, "end_column": 5 }, @@ -1500,8 +1500,8 @@ "_type": "TupleExpression", "source_location": { "file": "tests/approvals/arc-28-events.algo.ts", - "line": 19, - "end_line": 22, + "line": 20, + "end_line": 23, "column": 30, "end_column": 5 }, @@ -1555,8 +1555,8 @@ "_type": "VarExpression", "source_location": { "file": "tests/approvals/arc-28-events.algo.ts", - "line": 20, - "end_line": 20, + "line": 21, + "end_line": 21, "column": 9, "end_column": 10 }, @@ -1582,8 +1582,8 @@ "_type": "VarExpression", "source_location": { "file": "tests/approvals/arc-28-events.algo.ts", - "line": 21, - "end_line": 21, + "line": 22, + "end_line": 22, "column": 9, "end_column": 10 }, @@ -1618,8 +1618,8 @@ "_type": "ExpressionStatement", "source_location": { "file": "tests/approvals/arc-28-events.algo.ts", - "line": 23, - "end_line": 23, + "line": 24, + "end_line": 24, "column": 4, "end_column": 11 }, @@ -1627,8 +1627,8 @@ "_type": "Emit", "source_location": { "file": "tests/approvals/arc-28-events.algo.ts", - "line": 23, - "end_line": 23, + "line": 24, + "end_line": 24, "column": 4, "end_column": 11 }, @@ -1644,8 +1644,8 @@ "_type": "VarExpression", "source_location": { "file": "tests/approvals/arc-28-events.algo.ts", - "line": 23, - "end_line": 23, + "line": 24, + "end_line": 24, "column": 9, "end_column": 10 }, @@ -1693,8 +1693,8 @@ }, "source_location": { "file": "tests/approvals/arc-28-events.algo.ts", - "line": 23, - "end_line": 23, + "line": 24, + "end_line": 24, "column": 9, "end_column": 10 }, @@ -1709,8 +1709,8 @@ "_type": "ExpressionStatement", "source_location": { "file": "tests/approvals/arc-28-events.algo.ts", - "line": 25, - "end_line": 25, + "line": 26, + "end_line": 26, "column": 4, "end_column": 25 }, @@ -1718,8 +1718,8 @@ "_type": "Emit", "source_location": { "file": "tests/approvals/arc-28-events.algo.ts", - "line": 25, - "end_line": 25, + "line": 26, + "end_line": 26, "column": 4, "end_column": 25 }, @@ -1735,8 +1735,8 @@ "_type": "NewStruct", "source_location": { "file": "tests/approvals/arc-28-events.algo.ts", - "line": 25, - "end_line": 25, + "line": 26, + "end_line": 26, "column": 4, "end_column": 25 }, @@ -1784,8 +1784,8 @@ }, "source_location": { "file": "tests/approvals/arc-28-events.algo.ts", - "line": 25, - "end_line": 25, + "line": 26, + "end_line": 26, "column": 4, "end_column": 25 }, @@ -1797,8 +1797,8 @@ "_type": "VarExpression", "source_location": { "file": "tests/approvals/arc-28-events.algo.ts", - "line": 25, - "end_line": 25, + "line": 26, + "end_line": 26, "column": 20, "end_column": 21 }, @@ -1824,8 +1824,8 @@ "_type": "VarExpression", "source_location": { "file": "tests/approvals/arc-28-events.algo.ts", - "line": 25, - "end_line": 25, + "line": 26, + "end_line": 26, "column": 23, "end_column": 24 }, @@ -1855,8 +1855,8 @@ "_type": "ExpressionStatement", "source_location": { "file": "tests/approvals/arc-28-events.algo.ts", - "line": 27, - "end_line": 27, + "line": 28, + "end_line": 28, "column": 4, "end_column": 38 }, @@ -1864,8 +1864,8 @@ "_type": "Emit", "source_location": { "file": "tests/approvals/arc-28-events.algo.ts", - "line": 27, - "end_line": 27, + "line": 28, + "end_line": 28, "column": 4, "end_column": 38 }, @@ -1881,8 +1881,8 @@ "_type": "NewStruct", "source_location": { "file": "tests/approvals/arc-28-events.algo.ts", - "line": 27, - "end_line": 27, + "line": 28, + "end_line": 28, "column": 4, "end_column": 38 }, @@ -1930,8 +1930,8 @@ }, "source_location": { "file": "tests/approvals/arc-28-events.algo.ts", - "line": 27, - "end_line": 27, + "line": 28, + "end_line": 28, "column": 4, "end_column": 38 }, @@ -1943,8 +1943,8 @@ "_type": "VarExpression", "source_location": { "file": "tests/approvals/arc-28-events.algo.ts", - "line": 27, - "end_line": 27, + "line": 28, + "end_line": 28, "column": 33, "end_column": 34 }, @@ -1970,8 +1970,8 @@ "_type": "VarExpression", "source_location": { "file": "tests/approvals/arc-28-events.algo.ts", - "line": 27, - "end_line": 27, + "line": 28, + "end_line": 28, "column": 36, "end_column": 37 }, @@ -2001,8 +2001,8 @@ "_type": "ExpressionStatement", "source_location": { "file": "tests/approvals/arc-28-events.algo.ts", - "line": 28, - "end_line": 28, + "line": 29, + "end_line": 29, "column": 4, "end_column": 60 }, @@ -2010,8 +2010,8 @@ "_type": "Emit", "source_location": { "file": "tests/approvals/arc-28-events.algo.ts", - "line": 28, - "end_line": 28, + "line": 29, + "end_line": 29, "column": 4, "end_column": 60 }, @@ -2027,8 +2027,8 @@ "_type": "NewStruct", "source_location": { "file": "tests/approvals/arc-28-events.algo.ts", - "line": 28, - "end_line": 28, + "line": 29, + "end_line": 29, "column": 4, "end_column": 60 }, @@ -2104,8 +2104,8 @@ }, "source_location": { "file": "tests/approvals/arc-28-events.algo.ts", - "line": 28, - "end_line": 28, + "line": 29, + "end_line": 29, "column": 4, "end_column": 60 }, @@ -2117,8 +2117,8 @@ "_type": "ARC4Encode", "source_location": { "file": "tests/approvals/arc-28-events.algo.ts", - "line": 28, - "end_line": 28, + "line": 29, + "end_line": 29, "column": 41, "end_column": 47 }, @@ -2170,8 +2170,8 @@ "_type": "TupleExpression", "source_location": { "file": "tests/approvals/arc-28-events.algo.ts", - "line": 28, - "end_line": 28, + "line": 29, + "end_line": 29, "column": 41, "end_column": 47 }, @@ -2221,8 +2221,8 @@ "_type": "VarExpression", "source_location": { "file": "tests/approvals/arc-28-events.algo.ts", - "line": 28, - "end_line": 28, + "line": 29, + "end_line": 29, "column": 42, "end_column": 43 }, @@ -2248,8 +2248,8 @@ "_type": "VarExpression", "source_location": { "file": "tests/approvals/arc-28-events.algo.ts", - "line": 28, - "end_line": 28, + "line": 29, + "end_line": 29, "column": 45, "end_column": 46 }, @@ -2278,8 +2278,8 @@ "_type": "VarExpression", "source_location": { "file": "tests/approvals/arc-28-events.algo.ts", - "line": 28, - "end_line": 28, + "line": 29, + "end_line": 29, "column": 58, "end_column": 59 }, @@ -2321,8 +2321,8 @@ "_type": "ARC4ABIMethodConfig", "source_location": { "file": "tests/approvals/arc-28-events.algo.ts", - "line": 13, - "end_line": 13, + "line": 14, + "end_line": 14, "column": 2, "end_column": 35 }, @@ -2341,8 +2341,8 @@ "_type": "ContractMethod", "source_location": { "file": "tests/approvals/arc-28-events.algo.ts", - "line": 31, - "end_line": 31, + "line": 32, + "end_line": 32, "column": 2, "end_column": 41 }, @@ -2359,8 +2359,8 @@ }, "source_location": { "file": "tests/approvals/arc-28-events.algo.ts", - "line": 31, - "end_line": 31, + "line": 32, + "end_line": 32, "column": 13, "end_column": 25 } @@ -2377,8 +2377,8 @@ }, "source_location": { "file": "tests/approvals/arc-28-events.algo.ts", - "line": 31, - "end_line": 31, + "line": 32, + "end_line": 32, "column": 27, "end_column": 40 } @@ -2395,8 +2395,8 @@ "_type": "Block", "source_location": { "file": "tests/approvals/arc-28-events.algo.ts", - "line": 31, - "end_line": 34, + "line": 32, + "end_line": 35, "column": 42, "end_column": 3 }, @@ -2405,8 +2405,8 @@ "_type": "ExpressionStatement", "source_location": { "file": "tests/approvals/arc-28-events.algo.ts", - "line": 32, - "end_line": 32, + "line": 33, + "end_line": 33, "column": 4, "end_column": 30 }, @@ -2414,8 +2414,8 @@ "_type": "Emit", "source_location": { "file": "tests/approvals/arc-28-events.algo.ts", - "line": 32, - "end_line": 32, + "line": 33, + "end_line": 33, "column": 4, "end_column": 30 }, @@ -2431,8 +2431,8 @@ "_type": "NewStruct", "source_location": { "file": "tests/approvals/arc-28-events.algo.ts", - "line": 32, - "end_line": 32, + "line": 33, + "end_line": 33, "column": 4, "end_column": 30 }, @@ -2495,8 +2495,8 @@ }, "source_location": { "file": "tests/approvals/arc-28-events.algo.ts", - "line": 32, - "end_line": 32, + "line": 33, + "end_line": 33, "column": 4, "end_column": 30 }, @@ -2508,8 +2508,8 @@ "_type": "ARC4Encode", "source_location": { "file": "tests/approvals/arc-28-events.algo.ts", - "line": 32, - "end_line": 32, + "line": 33, + "end_line": 33, "column": 19, "end_column": 23 }, @@ -2549,8 +2549,8 @@ "_type": "VarExpression", "source_location": { "file": "tests/approvals/arc-28-events.algo.ts", - "line": 32, - "end_line": 32, + "line": 33, + "end_line": 33, "column": 19, "end_column": 23 }, @@ -2568,8 +2568,8 @@ "_type": "ARC4Encode", "source_location": { "file": "tests/approvals/arc-28-events.algo.ts", - "line": 32, - "end_line": 32, + "line": 33, + "end_line": 33, "column": 25, "end_column": 29 }, @@ -2592,8 +2592,8 @@ "_type": "VarExpression", "source_location": { "file": "tests/approvals/arc-28-events.algo.ts", - "line": 32, - "end_line": 32, + "line": 33, + "end_line": 33, "column": 25, "end_column": 29 }, @@ -2615,8 +2615,8 @@ "_type": "ExpressionStatement", "source_location": { "file": "tests/approvals/arc-28-events.algo.ts", - "line": 33, - "end_line": 33, + "line": 34, + "end_line": 34, "column": 4, "end_column": 43 }, @@ -2624,8 +2624,8 @@ "_type": "Emit", "source_location": { "file": "tests/approvals/arc-28-events.algo.ts", - "line": 33, - "end_line": 33, + "line": 34, + "end_line": 34, "column": 4, "end_column": 43 }, @@ -2641,8 +2641,8 @@ "_type": "NewStruct", "source_location": { "file": "tests/approvals/arc-28-events.algo.ts", - "line": 33, - "end_line": 33, + "line": 34, + "end_line": 34, "column": 4, "end_column": 43 }, @@ -2705,8 +2705,8 @@ }, "source_location": { "file": "tests/approvals/arc-28-events.algo.ts", - "line": 33, - "end_line": 33, + "line": 34, + "end_line": 34, "column": 4, "end_column": 43 }, @@ -2718,8 +2718,8 @@ "_type": "ARC4Encode", "source_location": { "file": "tests/approvals/arc-28-events.algo.ts", - "line": 33, - "end_line": 33, + "line": 34, + "end_line": 34, "column": 32, "end_column": 36 }, @@ -2759,8 +2759,8 @@ "_type": "VarExpression", "source_location": { "file": "tests/approvals/arc-28-events.algo.ts", - "line": 33, - "end_line": 33, + "line": 34, + "end_line": 34, "column": 32, "end_column": 36 }, @@ -2778,8 +2778,8 @@ "_type": "ARC4Encode", "source_location": { "file": "tests/approvals/arc-28-events.algo.ts", - "line": 33, - "end_line": 33, + "line": 34, + "end_line": 34, "column": 38, "end_column": 42 }, @@ -2802,8 +2802,8 @@ "_type": "VarExpression", "source_location": { "file": "tests/approvals/arc-28-events.algo.ts", - "line": 33, - "end_line": 33, + "line": 34, + "end_line": 34, "column": 38, "end_column": 42 }, @@ -2837,8 +2837,8 @@ "_type": "ARC4ABIMethodConfig", "source_location": { "file": "tests/approvals/arc-28-events.algo.ts", - "line": 31, - "end_line": 31, + "line": 32, + "end_line": 32, "column": 2, "end_column": 41 }, @@ -2857,8 +2857,356 @@ "_type": "ContractMethod", "source_location": { "file": "tests/approvals/arc-28-events.algo.ts", - "line": 12, - "end_line": 12, + "line": 37, + "end_line": 37, + "column": 2, + "end_column": 45 + }, + "args": [ + { + "_type": "SubroutineArgument", + "name": "x", + "wtype": { + "_type": "WType", + "name": "bytes", + "immutable": true, + "ephemeral": false, + "scalar_type": 1 + }, + "source_location": { + "file": "tests/approvals/arc-28-events.algo.ts", + "line": 37, + "end_line": 37, + "column": 19, + "end_column": 27 + } + }, + { + "_type": "SubroutineArgument", + "name": "y", + "wtype": { + "_type": "ARC4DynamicArray", + "name": "arc4.dynamic_array", + "immutable": true, + "ephemeral": false, + "scalar_type": 1, + "native_type": { + "_type": "WType", + "name": "bytes", + "immutable": true, + "ephemeral": false, + "scalar_type": 1 + }, + "arc4_name": "byte[]", + "element_type": { + "_type": "ARC4UIntN", + "name": "arc4.byte", + "immutable": true, + "ephemeral": false, + "scalar_type": 1, + "native_type": { + "_type": "WType", + "name": "uint64", + "immutable": true, + "ephemeral": false, + "scalar_type": 2 + }, + "arc4_name": "byte", + "n": "8" + }, + "source_location": null + }, + "source_location": { + "file": "tests/approvals/arc-28-events.algo.ts", + "line": 37, + "end_line": 37, + "column": 29, + "end_column": 44 + } + } + ], + "return_type": { + "_type": "WType", + "name": "void", + "immutable": true, + "ephemeral": false, + "scalar_type": null + }, + "body": { + "_type": "Block", + "source_location": { + "file": "tests/approvals/arc-28-events.algo.ts", + "line": 37, + "end_line": 39, + "column": 46, + "end_column": 3 + }, + "body": [ + { + "_type": "ExpressionStatement", + "source_location": { + "file": "tests/approvals/arc-28-events.algo.ts", + "line": 38, + "end_line": 38, + "column": 4, + "end_column": 35 + }, + "expr": { + "_type": "Emit", + "source_location": { + "file": "tests/approvals/arc-28-events.algo.ts", + "line": 38, + "end_line": 38, + "column": 4, + "end_column": 35 + }, + "wtype": { + "_type": "WType", + "name": "void", + "immutable": true, + "ephemeral": false, + "scalar_type": null + }, + "signature": "DB(byte[],byte[])", + "value": { + "_type": "NewStruct", + "source_location": { + "file": "tests/approvals/arc-28-events.algo.ts", + "line": 38, + "end_line": 38, + "column": 4, + "end_column": 35 + }, + "wtype": { + "_type": "ARC4Struct", + "name": "DB", + "immutable": true, + "ephemeral": false, + "scalar_type": 1, + "native_type": null, + "arc4_name": "(byte[],byte[])", + "fields": { + "0": { + "_type": "ARC4DynamicArray", + "name": "arc4.dynamic_array", + "immutable": true, + "ephemeral": false, + "scalar_type": 1, + "native_type": { + "_type": "WType", + "name": "bytes", + "immutable": true, + "ephemeral": false, + "scalar_type": 1 + }, + "arc4_name": "byte[]", + "element_type": { + "_type": "ARC4UIntN", + "name": "arc4.byte", + "immutable": true, + "ephemeral": false, + "scalar_type": 1, + "native_type": { + "_type": "WType", + "name": "uint64", + "immutable": true, + "ephemeral": false, + "scalar_type": 2 + }, + "arc4_name": "byte", + "n": "8" + }, + "source_location": null + }, + "1": { + "_type": "ARC4DynamicArray", + "name": "arc4.dynamic_array", + "immutable": true, + "ephemeral": false, + "scalar_type": 1, + "native_type": { + "_type": "WType", + "name": "bytes", + "immutable": true, + "ephemeral": false, + "scalar_type": 1 + }, + "arc4_name": "byte[]", + "element_type": { + "_type": "ARC4UIntN", + "name": "arc4.byte", + "immutable": true, + "ephemeral": false, + "scalar_type": 1, + "native_type": { + "_type": "WType", + "name": "uint64", + "immutable": true, + "ephemeral": false, + "scalar_type": 2 + }, + "arc4_name": "byte", + "n": "8" + }, + "source_location": null + } + }, + "source_location": { + "file": "tests/approvals/arc-28-events.algo.ts", + "line": 38, + "end_line": 38, + "column": 4, + "end_column": 35 + }, + "frozen": false, + "desc": null + }, + "values": { + "0": { + "_type": "ARC4Encode", + "source_location": { + "file": "tests/approvals/arc-28-events.algo.ts", + "line": 38, + "end_line": 38, + "column": 30, + "end_column": 31 + }, + "wtype": { + "_type": "ARC4DynamicArray", + "name": "arc4.dynamic_array", + "immutable": true, + "ephemeral": false, + "scalar_type": 1, + "native_type": { + "_type": "WType", + "name": "bytes", + "immutable": true, + "ephemeral": false, + "scalar_type": 1 + }, + "arc4_name": "byte[]", + "element_type": { + "_type": "ARC4UIntN", + "name": "arc4.byte", + "immutable": true, + "ephemeral": false, + "scalar_type": 1, + "native_type": { + "_type": "WType", + "name": "uint64", + "immutable": true, + "ephemeral": false, + "scalar_type": 2 + }, + "arc4_name": "byte", + "n": "8" + }, + "source_location": null + }, + "value": { + "_type": "VarExpression", + "source_location": { + "file": "tests/approvals/arc-28-events.algo.ts", + "line": 38, + "end_line": 38, + "column": 30, + "end_column": 31 + }, + "wtype": { + "_type": "WType", + "name": "bytes", + "immutable": true, + "ephemeral": false, + "scalar_type": 1 + }, + "name": "x" + } + }, + "1": { + "_type": "VarExpression", + "source_location": { + "file": "tests/approvals/arc-28-events.algo.ts", + "line": 38, + "end_line": 38, + "column": 33, + "end_column": 34 + }, + "wtype": { + "_type": "ARC4DynamicArray", + "name": "arc4.dynamic_array", + "immutable": true, + "ephemeral": false, + "scalar_type": 1, + "native_type": { + "_type": "WType", + "name": "bytes", + "immutable": true, + "ephemeral": false, + "scalar_type": 1 + }, + "arc4_name": "byte[]", + "element_type": { + "_type": "ARC4UIntN", + "name": "arc4.byte", + "immutable": true, + "ephemeral": false, + "scalar_type": 1, + "native_type": { + "_type": "WType", + "name": "uint64", + "immutable": true, + "ephemeral": false, + "scalar_type": 2 + }, + "arc4_name": "byte", + "n": "8" + }, + "source_location": null + }, + "name": "y" + } + } + } + } + } + ], + "label": null, + "comment": null + }, + "documentation": { + "_type": "MethodDocumentation", + "description": null, + "args": {}, + "returns": null + }, + "cref": "tests/approvals/arc-28-events.algo.ts::EventEmitter", + "member_name": "emitDynamicBytes", + "arc4_method_config": { + "_type": "ARC4ABIMethodConfig", + "source_location": { + "file": "tests/approvals/arc-28-events.algo.ts", + "line": 37, + "end_line": 37, + "column": 2, + "end_column": 45 + }, + "name": "emitDynamicBytes", + "is_bare": false, + "create": 3, + "readonly": false, + "allowed_completion_types": [ + 0 + ], + "default_args": {}, + "structs": {} + } + }, + { + "_type": "ContractMethod", + "source_location": { + "file": "tests/approvals/arc-28-events.algo.ts", + "line": 13, + "end_line": 13, "column": 0, "end_column": 37 }, @@ -2874,8 +3222,8 @@ "_type": "Block", "source_location": { "file": "tests/approvals/arc-28-events.algo.ts", - "line": 12, - "end_line": 12, + "line": 13, + "end_line": 13, "column": 0, "end_column": 37 }, @@ -2895,8 +3243,8 @@ "_type": "ARC4BareMethodConfig", "source_location": { "file": "tests/approvals/arc-28-events.algo.ts", - "line": 12, - "end_line": 12, + "line": 13, + "end_line": 13, "column": 0, "end_column": 37 }, diff --git a/tests/approvals/out/arc4-encode-decode/arc4-encode-decode.awst b/tests/approvals/out/arc4-encode-decode/arc4-encode-decode.awst index 8c93b337..8f850935 100644 --- a/tests/approvals/out/arc4-encode-decode/arc4-encode-decode.awst +++ b/tests/approvals/out/arc4-encode-decode/arc4-encode-decode.awst @@ -10,7 +10,7 @@ contract Arc4EncodeDecode return True } - testEncoding(): void + testEncoding(a: uint64, b: bool, c: biguint, d: bytes, e: string): void { assert(reinterpret_cast(ARC4_ENCODE(a, wtype=arc4.uint64)) == reinterpret_cast(ARC4_ENCODE(a, wtype=arc4.uint64))) assert(reinterpret_cast(ARC4_ENCODE(b, wtype=arc4.bool)) == reinterpret_cast(ARC4_ENCODE(b, wtype=arc4.bool))) @@ -20,7 +20,7 @@ contract Arc4EncodeDecode assert(reinterpret_cast(ARC4_ENCODE({ a: a, b: d }, wtype=(uint64,byte[]))) == reinterpret_cast(new TestStruct(a=(#0 = { a: ARC4_ENCODE(a, wtype=arc4.uint64), b: ARC4_ENCODE(d, wtype=arc4.dynamic_array) }).a, b=#0.b))) } - testDecoding(): void + testDecoding(a: uint64, a_bytes: bytes, b: bool, b_bytes: bytes, c: biguint, c_bytes: bytes, d: string, d_bytes: bytes, e: TestObj{ a: arc4.uint64, b: arc4.dynamic_array }, e_bytes: bytes): void { assert(ARC4_DECODE(reinterpret_cast(a_bytes)) == a) assert(ARC4_DECODE(reinterpret_cast(b_bytes)) == b) diff --git a/tests/approvals/out/arc4-struct/arc4-struct.awst b/tests/approvals/out/arc4-struct/arc4-struct.awst index f47c98dc..43c4e0fe 100644 --- a/tests/approvals/out/arc4-struct/arc4-struct.awst +++ b/tests/approvals/out/arc4-struct/arc4-struct.awst @@ -19,12 +19,12 @@ contract StructDemo assert(reinterpret_cast(v1) == reinterpret_cast(v2)) } - addVectors(): Vector + addVectors(v1: Vector, v2: Vector): Vector { return new Vector(x=(#3 = { x: ARC4_ENCODE(ARC4_DECODE(v1.x) + ARC4_DECODE(v2.x), wtype=arc4.uint64), y: ARC4_ENCODE(ARC4_DECODE(v1.y) + ARC4_DECODE(v2.y), wtype=arc4.uint64) }).x, y=#3.y) } - implicitCastingAndSpreading(): void + implicitCastingAndSpreading(v1: Vector): void { v2: Vector = new Vector(x=(#4 = ARC4_DECODE(v1)).x, y=#4.y) v3: Vector = new Vector(x=(#5 = { x: v2.x, y: v2.y }).x, y=#5.y) @@ -32,7 +32,7 @@ contract StructDemo assert(reinterpret_cast(v3) == reinterpret_cast(v1)) } - toAndFromBytes(): Vector + toAndFromBytes(v1: Vector): Vector { v1_bytes: bytes = reinterpret_cast(v1) return reinterpret_cast(v1_bytes) diff --git a/tests/approvals/out/assert-match/assert-match.awst b/tests/approvals/out/assert-match/assert-match.awst index 94b7ea2d..6815d84f 100644 --- a/tests/approvals/out/assert-match/assert-match.awst +++ b/tests/approvals/out/assert-match/assert-match.awst @@ -10,7 +10,7 @@ contract AssertMatchContract return True } - testPay(): bool + testPay(pay: group_transaction_pay): bool { assert(gtxns(pay) <= 105000 and gtxns(pay) >= 100000 and gtxns(pay) == txn() and gtxns(pay) == global() and gtxns(pay) == global() and gtxns(pay) > 1 and gtxns(pay) < 1099511627776, comment=assert target is match for conditions) return True diff --git a/tests/approvals/out/inheritance-b/inheritance-b.awst b/tests/approvals/out/inheritance-b/inheritance-b.awst index 800eefe0..ba7ff6e3 100644 --- a/tests/approvals/out/inheritance-b/inheritance-b.awst +++ b/tests/approvals/out/inheritance-b/inheritance-b.awst @@ -16,7 +16,7 @@ contract ConcreteSimpleContract return True } - SimpleContract::simpleMethod(): uint64 + SimpleContract::simpleMethod(a: uint64, b: uint64): uint64 { return a * b } @@ -42,12 +42,12 @@ contract ConcreteArc4Contract return "42" } - Arc4Contract::simpleMethod(): uint64 + Arc4Contract::simpleMethod(a: uint64, b: uint64): uint64 { return a * b } - Arc4Contract::simpleAbiMethod(): uint64 + Arc4Contract::simpleAbiMethod(a: uint64, b: uint64): uint64 { return a + b } diff --git a/tests/approvals/out/jsdoc/jsdoc.awst b/tests/approvals/out/jsdoc/jsdoc.awst index feb78aa5..cd71b0b4 100644 --- a/tests/approvals/out/jsdoc/jsdoc.awst +++ b/tests/approvals/out/jsdoc/jsdoc.awst @@ -16,12 +16,12 @@ contract JSDocDemo return True } - test(): DemoStruct + test(a: uint64, b: bytes): DemoStruct { return new DemoStruct(a=(#0 = { a: ARC4_ENCODE(a, wtype=arc4.uint64) }).a) } - test2(): DemoType{ a: bytes } + test2(a: bytes): DemoType{ a: bytes } { return { a: (#1 = { a: a }).a } } diff --git a/tests/approvals/out/local-state/local-state.awst b/tests/approvals/out/local-state/local-state.awst index 800c1590..4258e4d2 100644 --- a/tests/approvals/out/local-state/local-state.awst +++ b/tests/approvals/out/local-state/local-state.awst @@ -17,7 +17,7 @@ contract LocalStateDemo return True } - setState(): void + setState(p: { a: uint64, b: bytes }, c: arc4.static_array): void { { a: a, b: b }: { a: uint64, b: bytes } = p LocalState[txn()]["l1"]: uint64 = a diff --git a/tests/approvals/out/named-types/named-types.awst b/tests/approvals/out/named-types/named-types.awst index 5dcdd06d..74a10529 100644 --- a/tests/approvals/out/named-types/named-types.awst +++ b/tests/approvals/out/named-types/named-types.awst @@ -25,7 +25,7 @@ contract MyContract return { x: (#2 = { x: 3, y: 4 }).x, y: #2.y } } - test(): void + test(x: XY{ x: uint64, y: uint64 }, y: YX{ y: uint64, x: uint64 }): void { assert(x.y == y.y and x.x == y.x, comment=assert target is match for conditions) } diff --git a/tests/approvals/out/precompiled-apps/precompiled-apps.awst b/tests/approvals/out/precompiled-apps/precompiled-apps.awst index 45918423..8edb546d 100644 --- a/tests/approvals/out/precompiled-apps/precompiled-apps.awst +++ b/tests/approvals/out/precompiled-apps/precompiled-apps.awst @@ -16,7 +16,7 @@ contract Hello return True } - create(): void + create(greeting: string): void { GlobalState["greeting"]: string = greeting } @@ -29,7 +29,7 @@ contract Hello { } - HelloBase::greet(): string + HelloBase::greet(name: string): string { return "" + GlobalState["greeting"] + " " + name } @@ -77,7 +77,7 @@ contract HelloTemplate { } - HelloBase::greet(): string + HelloBase::greet(name: string): string { return "" + GlobalState["greeting"] + " " + name } @@ -125,7 +125,7 @@ contract HelloTemplateCustomPrefix { } - HelloBase::greet(): string + HelloBase::greet(name: string): string { return "" + GlobalState["greeting"] + " " + name } diff --git a/tests/approvals/out/state-totals/state-totals.awst b/tests/approvals/out/state-totals/state-totals.awst index e74dbe0e..3731a438 100644 --- a/tests/approvals/out/state-totals/state-totals.awst +++ b/tests/approvals/out/state-totals/state-totals.awst @@ -20,7 +20,7 @@ contract BaseWithState return True } - setState(): void + setState(n: uint64): void { GlobalState["oneGlobal"]: uint64 = n GlobalState["twoGlobal"]: uint64 = n @@ -61,13 +61,13 @@ contract SubClassWithState return True } - setState(): void + setState(n: uint64): void { super.setState(n) GlobalState["threeGlobal"]: uint64 = n } - BaseWithState::setState(): void + BaseWithState::setState(n: uint64): void { GlobalState["oneGlobal"]: uint64 = n GlobalState["twoGlobal"]: uint64 = n @@ -106,7 +106,7 @@ contract SubClassWithExplicitTotals return True } - BaseWithState::setState(): void + BaseWithState::setState(n: uint64): void { GlobalState["oneGlobal"]: uint64 = n GlobalState["twoGlobal"]: uint64 = n @@ -146,13 +146,13 @@ contract ExtendsSubWithTotals return True } - setState(): void + setState(n: uint64): void { super.setState(n) LocalState[txn()]["oneLocal"]: uint64 = n } - BaseWithState::setState(): void + BaseWithState::setState(n: uint64): void { GlobalState["oneGlobal"]: uint64 = n GlobalState["twoGlobal"]: uint64 = n diff --git a/tests/approvals/out/strings/strings.awst b/tests/approvals/out/strings/strings.awst index 1c12b71a..b0e7453e 100644 --- a/tests/approvals/out/strings/strings.awst +++ b/tests/approvals/out/strings/strings.awst @@ -10,12 +10,12 @@ contract StringContract return True } - join(): string + join(a: string, b: string): string { return concat(a, b) } - interpolate(): string + interpolate(a: string): string { return "You interpolated " + a }