{ "name": "Contract", "structs": { "EventOnly": [ { "name": "x", "type": "uint64" }, { "name": "y", "type": "uint64" } ], "SharedStruct": [ { "name": "foo", "type": "byte[]" }, { "name": "bar", "type": "uint8" } ], "StateStruct": [ { "name": "a", "type": "uint64" }, { "name": "b", "type": "string" } ], "TopLevelStruct": [ { "name": "a", "type": "uint64" }, { "name": "b", "type": "string" }, { "name": "shared", "type": "SharedStruct" } ] }, "methods": [ { "name": "create", "args": [], "returns": { "type": "void" }, "actions": { "create": [ "NoOp", "OptIn" ], "call": [ "NoOp", "OptIn" ] }, "readonly": false, "desc": "Method docstring", "events": [], "recommendations": {} }, { "name": "struct_arg", "args": [ { "type": "(uint64,string,(byte[],uint8))", "struct": "TopLevelStruct", "name": "arg" }, { "type": "(byte[],uint8)", "struct": "SharedStruct", "name": "shared" } ], "returns": { "type": "uint64" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Method docstring2", "events": [], "recommendations": {} }, { "name": "struct_return", "args": [ { "type": "(uint64,string,(byte[],uint8))", "struct": "TopLevelStruct", "name": "arg" } ], "returns": { "type": "(byte[],uint8)", "struct": "SharedStruct" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "emits_error", "args": [ { "type": "(uint64,string,(byte[],uint8))", "struct": "TopLevelStruct", "name": "arg" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "emitter", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [ { "name": "SharedStruct", "args": [ { "type": "byte[]", "name": "foo" }, { "type": "uint8", "name": "bar" } ], "desc": "This struct is shared" }, { "name": "Anonymous", "args": [ { "type": "string", "name": "field1" }, { "type": "(byte[],uint8)", "name": "field2", "struct": "SharedStruct" } ] } ], "recommendations": {} }, { "name": "conditional_emit", "args": [ { "type": "bool", "name": "should_emit" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [ { "name": "Anonymous2", "args": [ { "type": "(uint64,uint64)", "name": "field1", "struct": "EventOnly" }, { "type": "(byte[],uint8)", "name": "field2", "struct": "SharedStruct" } ] } ], "recommendations": {} }, { "name": "template_value", "args": [], "returns": { "type": "((byte[],uint8),uint64,string,uint8)" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "with_constant_defaults", "args": [ { "type": "uint64", "name": "a", "defaultValue": { "source": "literal", "data": "AAAAAAAAAHs=", "type": "uint64" } }, { "type": "uint64", "name": "b", "defaultValue": { "source": "literal", "data": "AAAAAAAAAOo=", "type": "uint64" } }, { "type": "byte[]", "name": "c", "defaultValue": { "source": "literal", "data": "AAMxMjM=", "type": "byte[]" } }, { "type": "(uint64,uint64)", "struct": "EventOnly", "name": "d", "defaultValue": { "source": "literal", "data": "AAAAAAAAAAEAAAAAAAAAAg==", "type": "(uint64,uint64)" } }, { "type": "(uint64,string)", "name": "e", "defaultValue": { "source": "literal", "data": "AAAAAAAAACoACgALb24gdGhlIGVkZ2U=", "type": "(uint64,string)" } }, { "type": "string[2]", "name": "f", "defaultValue": { "source": "literal", "data": "AAQACAACaGkABnRoZXJlIQ==", "type": "string[2]" } }, { "type": "string[]", "name": "g", "defaultValue": { "source": "literal", "data": "AAIABAAJAANvbmUAA3R3bw==", "type": "string[]" } }, { "type": "uint64", "name": "h", "defaultValue": { "source": "literal", "data": "AAAAAAAAACo=", "type": "uint64" } }, { "type": "uint64", "name": "i", "defaultValue": { "source": "literal", "data": "AAAAAAAABNI=", "type": "uint64" } } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} } ], "arcs": [ 22, 28 ], "desc": "Contract docstring", "networks": {}, "state": { "schema": { "global": { "ints": 1, "bytes": 2 }, "local": { "ints": 1, "bytes": 2 } }, "keys": { "global": { "g_struct": { "keyType": "AVMString", "valueType": "StateStruct", "key": "Z19zdHJ1Y3Q=" }, "g_uint64": { "keyType": "AVMBytes", "valueType": "AVMUint64", "key": "Z3U=" }, "g_address": { "keyType": "AVMBytes", "valueType": "address", "key": "Z2E=" } }, "local": { "l_struct": { "keyType": "AVMString", "valueType": "StateStruct", "key": "bF9zdHJ1Y3Q=" }, "l_uint64": { "keyType": "AVMBytes", "valueType": "AVMUint64", "key": "bHU=" }, "l_address": { "keyType": "AVMBytes", "valueType": "address", "key": "bGE=" } }, "box": { "b_struct": { "keyType": "AVMString", "valueType": "StateStruct", "key": "Yl9zdHJ1Y3Q=" }, "b_uint64": { "keyType": "AVMBytes", "valueType": "uint64", "key": "YnU=" }, "b_address": { "keyType": "AVMBytes", "valueType": "address", "key": "YmE=" }, "box_ref": { "keyType": "AVMString", "valueType": "AVMBytes", "key": "Ym94X3JlZg==" }, "box_ref2": { "keyType": "AVMBytes", "valueType": "AVMBytes", "key": "YnI=" } } }, "maps": { "global": {}, "local": {}, "box": { "box_map_struct": { "keyType": "StateStruct", "valueType": "SharedStruct", "prefix": "Ym94X21hcF9zdHJ1Y3Q=" }, "box_map_uint64": { "keyType": "uint64", "valueType": "SharedStruct", "prefix": "Ym11" }, "box_map_address": { "keyType": "address", "valueType": "SharedStruct", "prefix": "Ym1h" } } } }, "bareActions": { "create": [ "DeleteApplication", "NoOp", "OptIn" ], "call": [ "NoOp", "OptIn" ] }, "sourceInfo": { "approval": { "sourceInfo": [ { "pc": [ 662, 730 ], "errorMessage": "invalid array encoding" }, { "pc": [ 166, 204, 236, 282, 320, 358, 392, 585, 627, 676, 699, 744 ], "errorMessage": "invalid array length header" }, { "pc": [ 465 ], "errorMessage": "invalid number of bytes for arc4.bool" }, { "pc": [ 763 ], "errorMessage": "invalid number of bytes for arc4.dynamic_array>" }, { "pc": [ 592 ], "errorMessage": "invalid number of bytes for arc4.dynamic_array" }, { "pc": [ 693 ], "errorMessage": "invalid number of bytes for arc4.static_array, 2>" }, { "pc": [ 634 ], "errorMessage": "invalid number of bytes for arc4.tuple>" }, { "pc": [ 570, 578, 771, 781 ], "errorMessage": "invalid number of bytes for arc4.uint64" }, { "pc": [ 604 ], "errorMessage": "invalid number of bytes for test_cases.arc_56.contract.EventOnly" }, { "pc": [ 241 ], "errorMessage": "invalid number of bytes for test_cases.arc_56.contract.SharedStruct" }, { "pc": [ 214, 330, 398 ], "errorMessage": "invalid number of bytes for test_cases.arc_56.contract.TopLevelStruct" }, { "pc": [ 196, 228, 312, 388 ], "errorMessage": "invalid tail pointer at index 0 of ((len+uint8[]),uint8)" }, { "pc": [ 618 ], "errorMessage": "invalid tail pointer at index 1 of (uint64,(len+utf8[]))" }, { "pc": [ 158, 274, 350 ], "errorMessage": "invalid tail pointer at index 1 of (uint64,(len+utf8[]),((len+uint8[]),uint8))" }, { "pc": [ 179, 295, 371 ], "errorMessage": "invalid tail pointer at index 2 of (uint64,(len+utf8[]),((len+uint8[]),uint8))" }, { "pc": [ 738 ], "errorMessage": "invalid tail pointer for (len+(len+utf8[])[])" }, { "pc": [ 670 ], "errorMessage": "invalid tail pointer for (len+utf8[])[2]" }, { "pc": [ 153, 174, 191, 223, 269, 290, 307, 345, 366, 383, 613 ], "errorMessage": "invalid tuple encoding" }, { "pc": [ 243 ], "errorMessage": "this might error" }, { "pc": [ 406 ], "errorMessage": "this will error" } ], "pcOffsetMethod": "none" }, "clear": { "sourceInfo": [], "pcOffsetMethod": "none" } }, "source": { "approval": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAwIDEgMiA4IFRNUExfQVZNX1VJTlQ2NAogICAgYnl0ZWNibG9jayAweCAweDE1MWY3Yzc1IFRNUExfQVJDNF9VSU5UOCBUTVBMX0FWTV9TVFJJTkcgVE1QTF9TVFJVQ1QKICAgIC8vIGFyY181Ni9jb250cmFjdC5weTo1MwogICAgLy8gY2xhc3MgQ29udHJhY3QoQVJDNENvbnRyYWN0KToKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX2JhcmVfcm91dGluZ0AxOAogICAgcHVzaGJ5dGVzIDB4NGM1YzYxYmEgLy8gbWV0aG9kICJjcmVhdGUoKXZvaWQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBtYWluX2NyZWF0ZV9yb3V0ZUA1CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQKICAgIHB1c2hieXRlc3MgMHg5N2U4ZTRhNyAweDc2YzRkZTExIDB4YzFjYTc3MDkgMHg2ZGU3NjJjMiAweDU5ZmM1MjgyIDB4OWQ5ZWVjYjAgMHg1ZThlZWY5YSAvLyBtZXRob2QgInN0cnVjdF9hcmcoKHVpbnQ2NCxzdHJpbmcsKGJ5dGVbXSx1aW50OCkpLChieXRlW10sdWludDgpKXVpbnQ2NCIsIG1ldGhvZCAic3RydWN0X3JldHVybigodWludDY0LHN0cmluZywoYnl0ZVtdLHVpbnQ4KSkpKGJ5dGVbXSx1aW50OCkiLCBtZXRob2QgImVtaXRzX2Vycm9yKCh1aW50NjQsc3RyaW5nLChieXRlW10sdWludDgpKSl2b2lkIiwgbWV0aG9kICJlbWl0dGVyKCl2b2lkIiwgbWV0aG9kICJjb25kaXRpb25hbF9lbWl0KGJvb2wpdm9pZCIsIG1ldGhvZCAidGVtcGxhdGVfdmFsdWUoKSgoYnl0ZVtdLHVpbnQ4KSx1aW50NjQsc3RyaW5nLHVpbnQ4KSIsIG1ldGhvZCAid2l0aF9jb25zdGFudF9kZWZhdWx0cyh1aW50NjQsdWludDY0LGJ5dGVbXSwodWludDY0LHVpbnQ2NCksKHVpbnQ2NCxzdHJpbmcpLHN0cmluZ1syXSxzdHJpbmdbXSx1aW50NjQsdWludDY0KXZvaWQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBzdHJ1Y3RfYXJnIHN0cnVjdF9yZXR1cm4gZXJyb3JzIGVtaXR0ZXIgY29uZGl0aW9uYWxfZW1pdCB0ZW1wbGF0ZV92YWx1ZSB3aXRoX2NvbnN0YW50X2RlZmF1bHRzCgptYWluX2FmdGVyX2lmX2Vsc2VAMjI6CiAgICAvLyBhcmNfNTYvY29udHJhY3QucHk6NTMKICAgIC8vIGNsYXNzIENvbnRyYWN0KEFSQzRDb250cmFjdCk6CiAgICBlcnIKCm1haW5fY3JlYXRlX3JvdXRlQDU6CiAgICAvLyBhcmNfNTYvY29udHJhY3QucHk6ODAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChjcmVhdGU9ImFsbG93IiwgYWxsb3dfYWN0aW9ucz1bIk5vT3AiLCAiT3B0SW4iXSkKICAgIGludGNfMSAvLyAxCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBzaGwKICAgIHB1c2hpbnQgMwogICAgJgogICAgcmV0dXJuCgptYWluX2JhcmVfcm91dGluZ0AxODoKICAgIC8vIGFyY181Ni9jb250cmFjdC5weTo1MwogICAgLy8gY2xhc3MgQ29udHJhY3QoQVJDNENvbnRyYWN0KToKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIHN3aXRjaCBtYWluX2JhcmVfY3JlYXRlQDE5IG1haW5fYmFyZV9jcmVhdGVAMTkgbWFpbl9hZnRlcl9pZl9lbHNlQDIyIG1haW5fYWZ0ZXJfaWZfZWxzZUAyMiBtYWluX2FmdGVyX2lmX2Vsc2VAMjIgbWFpbl90cmFuc2llbnRAMjAKICAgIGVycgoKbWFpbl90cmFuc2llbnRAMjA6CiAgICAvLyBhcmNfNTYvY29udHJhY3QucHk6ODQKICAgIC8vIEBhcmM0LmJhcmVtZXRob2QoY3JlYXRlPSJyZXF1aXJlIiwgYWxsb3dfYWN0aW9ucz1bIkRlbGV0ZUFwcGxpY2F0aW9uIl0pCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgcmV0dXJuCgptYWluX2JhcmVfY3JlYXRlQDE5OgogICAgLy8gYXJjXzU2L2NvbnRyYWN0LnB5Ojc2CiAgICAvLyBAYXJjNC5iYXJlbWV0aG9kKGNyZWF0ZT0iYWxsb3ciLCBhbGxvd19hY3Rpb25zPVsiTm9PcCIsICJPcHRJbiJdKQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RfY2FzZXMuYXJjXzU2LmNvbnRyYWN0LkNvbnRyYWN0LnN0cnVjdF9hcmdbcm91dGluZ10oKSAtPiB2b2lkOgpzdHJ1Y3RfYXJnOgogICAgLy8gYXJjXzU2L2NvbnRyYWN0LnB5Ojg4CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGRpZyAxCiAgICBpbnRjXzMgLy8gOAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgdHVwbGUgZW5jb2RpbmcKICAgIGR1cAogICAgcHVzaGludCAxMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIHRhaWwgcG9pbnRlciBhdCBpbmRleCAxIG9mICh1aW50NjQsKGxlbit1dGY4W10pLCgobGVuK3VpbnQ4W10pLHVpbnQ4KSkKICAgIGRpZyAyCiAgICBzd2FwCiAgICBkaWcgMgogICAgc3Vic3RyaW5nMwogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIHB1c2hpbnQgMTQKICAgICsKICAgIGRpZyAyCiAgICBwdXNoaW50IDEwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCB0dXBsZSBlbmNvZGluZwogICAgZHVwCiAgICBkaWcgMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIHRhaWwgcG9pbnRlciBhdCBpbmRleCAyIG9mICh1aW50NjQsKGxlbit1dGY4W10pLCgobGVuK3VpbnQ4W10pLHVpbnQ4KSkKICAgIHVuY292ZXIgMwogICAgc3dhcAogICAgZGlnIDMKICAgIHN1YnN0cmluZzMKICAgIGR1cAogICAgbGVuCiAgICBkaWcgMQogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIHR1cGxlIGVuY29kaW5nCiAgICBkdXAKICAgIHB1c2hpbnQgMwogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIHRhaWwgcG9pbnRlciBhdCBpbmRleCAwIG9mICgobGVuK3VpbnQ4W10pLHVpbnQ4KQogICAgZGlnIDIKICAgIHN3YXAKICAgIHVuY292ZXIgMgogICAgc3Vic3RyaW5nMwogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIHB1c2hpbnQgNQogICAgKwogICAgdW5jb3ZlciAyCiAgICArCiAgICB1bmNvdmVyIDIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHRlc3RfY2FzZXMuYXJjXzU2LmNvbnRyYWN0LlRvcExldmVsU3RydWN0CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgZGlnIDEKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCB0dXBsZSBlbmNvZGluZwogICAgZHVwCiAgICBwdXNoaW50IDMKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCB0YWlsIHBvaW50ZXIgYXQgaW5kZXggMCBvZiAoKGxlbit1aW50OFtdKSx1aW50OCkKICAgIGRpZyAyCiAgICBzd2FwCiAgICBkaWcgMgogICAgc3Vic3RyaW5nMwogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIHB1c2hpbnQgNQogICAgKwogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgdGVzdF9jYXNlcy5hcmNfNTYuY29udHJhY3QuU2hhcmVkU3RydWN0CiAgICAvLyBhcmNfNTYvY29udHJhY3QucHk6OTEKICAgIC8vIGFzc2VydCBhcmcuc2hhcmVkID09IHNoYXJlZCwgInRoaXMgbWlnaHQgZXJyb3IiCiAgICA9PQogICAgYXNzZXJ0IC8vIHRoaXMgbWlnaHQgZXJyb3IKICAgIC8vIGFyY181Ni9jb250cmFjdC5weTo4OAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHB1c2hieXRlcyAweDE1MWY3Yzc1MDAwMDAwMDAwMDAwMDAyYQogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdF9jYXNlcy5hcmNfNTYuY29udHJhY3QuQ29udHJhY3Quc3RydWN0X3JldHVybltyb3V0aW5nXSgpIC0+IHZvaWQ6CnN0cnVjdF9yZXR1cm46CiAgICAvLyBhcmNfNTYvY29udHJhY3QucHk6OTQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGRpZyAxCiAgICBpbnRjXzMgLy8gOAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgdHVwbGUgZW5jb2RpbmcKICAgIGR1cAogICAgcHVzaGludCAxMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIHRhaWwgcG9pbnRlciBhdCBpbmRleCAxIG9mICh1aW50NjQsKGxlbit1dGY4W10pLCgobGVuK3VpbnQ4W10pLHVpbnQ4KSkKICAgIGRpZyAyCiAgICBzd2FwCiAgICBkaWcgMgogICAgc3Vic3RyaW5nMwogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIHB1c2hpbnQgMTQKICAgICsKICAgIGRpZyAyCiAgICBwdXNoaW50IDEwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCB0dXBsZSBlbmNvZGluZwogICAgZHVwCiAgICBkaWcgMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIHRhaWwgcG9pbnRlciBhdCBpbmRleCAyIG9mICh1aW50NjQsKGxlbit1dGY4W10pLCgobGVuK3VpbnQ4W10pLHVpbnQ4KSkKICAgIHVuY292ZXIgMwogICAgc3dhcAogICAgZGlnIDMKICAgIHN1YnN0cmluZzMKICAgIGR1cAogICAgbGVuCiAgICBkaWcgMQogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIHR1cGxlIGVuY29kaW5nCiAgICBkdXAKICAgIHB1c2hpbnQgMwogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIHRhaWwgcG9pbnRlciBhdCBpbmRleCAwIG9mICgobGVuK3VpbnQ4W10pLHVpbnQ4KQogICAgZGlnIDIKICAgIHN3YXAKICAgIHVuY292ZXIgMgogICAgc3Vic3RyaW5nMwogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIHB1c2hpbnQgNQogICAgKwogICAgdW5jb3ZlciAyCiAgICArCiAgICB1bmNvdmVyIDIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHRlc3RfY2FzZXMuYXJjXzU2LmNvbnRyYWN0LlRvcExldmVsU3RydWN0CiAgICBieXRlY18xIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdF9jYXNlcy5hcmNfNTYuY29udHJhY3QuQ29udHJhY3QuZXJyb3JzW3JvdXRpbmddKCkgLT4gdm9pZDoKZXJyb3JzOgogICAgLy8gYXJjXzU2L2NvbnRyYWN0LnB5Ojk5CiAgICAvLyBAYXJjNC5hYmltZXRob2QobmFtZT0iZW1pdHNfZXJyb3IiLCByZWFkb25seT1UcnVlKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGRpZyAxCiAgICBpbnRjXzMgLy8gOAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgdHVwbGUgZW5jb2RpbmcKICAgIGR1cAogICAgcHVzaGludCAxMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIHRhaWwgcG9pbnRlciBhdCBpbmRleCAxIG9mICh1aW50NjQsKGxlbit1dGY4W10pLCgobGVuK3VpbnQ4W10pLHVpbnQ4KSkKICAgIGRpZyAyCiAgICBzd2FwCiAgICBkaWcgMgogICAgc3Vic3RyaW5nMwogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIHB1c2hpbnQgMTQKICAgICsKICAgIGRpZyAyCiAgICBwdXNoaW50IDEwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCB0dXBsZSBlbmNvZGluZwogICAgZHVwCiAgICBkaWcgMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIHRhaWwgcG9pbnRlciBhdCBpbmRleCAyIG9mICh1aW50NjQsKGxlbit1dGY4W10pLCgobGVuK3VpbnQ4W10pLHVpbnQ4KSkKICAgIGRpZyAzCiAgICBzd2FwCiAgICBkaWcgMwogICAgc3Vic3RyaW5nMwogICAgZHVwCiAgICBsZW4KICAgIGRpZyAxCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgdHVwbGUgZW5jb2RpbmcKICAgIGR1cAogICAgcHVzaGludCAzCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgdGFpbCBwb2ludGVyIGF0IGluZGV4IDAgb2YgKChsZW4rdWludDhbXSksdWludDgpCiAgICBzd2FwCiAgICBzdWJzdHJpbmczCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgcHVzaGludCA1CiAgICArCiAgICArCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciB0ZXN0X2Nhc2VzLmFyY181Ni5jb250cmFjdC5Ub3BMZXZlbFN0cnVjdAogICAgLy8gYXJjXzU2L2NvbnRyYWN0LnB5OjEwMQogICAgLy8gYXNzZXJ0IGFyZy5hLmJ5dGVzID09IGFyYzQuVUludDgoMCkuYnl0ZXMsICJ0aGlzIHdpbGwgZXJyb3IiCiAgICBleHRyYWN0IDAgOAogICAgcHVzaGJ5dGVzIDB4MDAKICAgID09CiAgICBhc3NlcnQgLy8gdGhpcyB3aWxsIGVycm9yCiAgICAvLyBhcmNfNTYvY29udHJhY3QucHk6OTkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChuYW1lPSJlbWl0c19lcnJvciIsIHJlYWRvbmx5PVRydWUpCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdF9jYXNlcy5hcmNfNTYuY29udHJhY3QuQ29udHJhY3QuZW1pdHRlcltyb3V0aW5nXSgpIC0+IHZvaWQ6CmVtaXR0ZXI6CiAgICAvLyBhcmNfNTYvY29udHJhY3QucHk6MTA1CiAgICAvLyBhcmM0LmVtaXQoU2hhcmVkU3RydWN0KGZvbz1hcmM0LkR5bmFtaWNCeXRlcyhiImhlbGxvMSIpLCBiYXI9YXJjNC5VSW50OCg0MikpKQogICAgcHVzaGJ5dGVzIDB4ZDkzZjM3NGUwMDAzMmEwMDA2Njg2NTZjNmM2ZjMxCiAgICBsb2cKICAgIC8vIGFyY181Ni9jb250cmFjdC5weToxMDctMTExCiAgICAvLyBhcmM0LmVtaXQoCiAgICAvLyAgICAgIkFub255bW91cyIsCiAgICAvLyAgICAgU3RyaW5nKCJoZWxsbyIpLAogICAgLy8gICAgIFNoYXJlZFN0cnVjdChmb289YXJjNC5EeW5hbWljQnl0ZXMoYiJoZWxsbzIiKSwgYmFyPWFyYzQuVUludDgoNDIpKSwKICAgIC8vICkKICAgIHB1c2hieXRlcyAweDFlNzJhZjRlMDAwNDAwMGIwMDA1Njg2NTZjNmM2ZjAwMDMyYTAwMDY2ODY1NmM2YzZmMzIKICAgIGxvZwogICAgLy8gYXJjXzU2L2NvbnRyYWN0LnB5OjEwMwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0X2Nhc2VzLmFyY181Ni5jb250cmFjdC5Db250cmFjdC5jb25kaXRpb25hbF9lbWl0W3JvdXRpbmddKCkgLT4gdm9pZDoKY29uZGl0aW9uYWxfZW1pdDoKICAgIC8vIGFyY181Ni9jb250cmFjdC5weToxMTMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18xIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuYm9vbAogICAgaW50Y18wIC8vIDAKICAgIGdldGJpdAogICAgLy8gYXJjXzU2L2NvbnRyYWN0LnB5OjExNQogICAgLy8gaWYgc2hvdWxkX2VtaXQ6CiAgICBieiBjb25kaXRpb25hbF9lbWl0X2FmdGVyX2lmX2Vsc2VAMwogICAgLy8gYXJjXzU2L2NvbnRyYWN0LnB5OjExNi0xMjAKICAgIC8vIGFyYzQuZW1pdCgKICAgIC8vICAgICAiQW5vbnltb3VzMiIsCiAgICAvLyAgICAgRXZlbnRPbmx5KGFyYzQuVUludDY0KDQyKSwgYXJjNC5VSW50NjQoNDMpKSwKICAgIC8vICAgICBTaGFyZWRTdHJ1Y3QoZm9vPWFyYzQuRHluYW1pY0J5dGVzKGIiaGVsbG8zIiksIGJhcj1hcmM0LlVJbnQ4KDQyKSksCiAgICAvLyApCiAgICBwdXNoYnl0ZXMgMHgxMWM1NDdiYTAwMDAwMDAwMDAwMDAwMmEwMDAwMDAwMDAwMDAwMDJiMDAxMjAwMDMyYTAwMDY2ODY1NmM2YzZmMzMKICAgIGxvZwoKY29uZGl0aW9uYWxfZW1pdF9hZnRlcl9pZl9lbHNlQDM6CiAgICAvLyBhcmNfNTYvY29udHJhY3QucHk6MTEzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RfY2FzZXMuYXJjXzU2LmNvbnRyYWN0LkNvbnRyYWN0LnRlbXBsYXRlX3ZhbHVlW3JvdXRpbmddKCkgLT4gdm9pZDoKdGVtcGxhdGVfdmFsdWU6CiAgICAvLyBhcmNfNTYvY29udHJhY3QucHk6MTI4CiAgICAvLyBUZW1wbGF0ZVZhclthcmM0LlVJbnQ4XSgiQVJDNF9VSU5UOCIpLAogICAgYnl0ZWNfMiAvLyBUTVBMX0FSQzRfVUlOVDgKICAgIC8vIGFyY181Ni9jb250cmFjdC5weToxMjcKICAgIC8vIFRlbXBsYXRlVmFyW1N0cmluZ10oIkFWTV9TVFJJTkciKSwKICAgIGJ5dGVjXzMgLy8gVE1QTF9BVk1fU1RSSU5HCiAgICAvLyBhcmNfNTYvY29udHJhY3QucHk6MTI2CiAgICAvLyBUZW1wbGF0ZVZhcltVSW50NjRdKCJBVk1fVUlOVDY0IiksCiAgICBpbnRjIDQgLy8gVE1QTF9BVk1fVUlOVDY0CiAgICAvLyBhcmNfNTYvY29udHJhY3QucHk6MTI1CiAgICAvLyBUZW1wbGF0ZVZhcltTaGFyZWRTdHJ1Y3RdKCJTVFJVQ1QiKSwKICAgIGJ5dGVjIDQgLy8gVE1QTF9TVFJVQ1QKICAgIC8vIGFyY181Ni9jb250cmFjdC5weToxMjIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBkdXAKICAgIGxlbgogICAgcHVzaGludCAxMwogICAgKwogICAgdW5jb3ZlciAyCiAgICBpdG9iCiAgICBwdXNoYnl0ZXMgMHgwMDBkCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGRpZyAzCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICB1bmNvdmVyIDQKICAgIGNvbmNhdAogICAgdW5jb3ZlciAyCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgdW5jb3ZlciAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIHVuY292ZXIgMwogICAgY29uY2F0CiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18xIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdF9jYXNlcy5hcmNfNTYuY29udHJhY3QuQ29udHJhY3Qud2l0aF9jb25zdGFudF9kZWZhdWx0c1tyb3V0aW5nXSgpIC0+IHZvaWQ6CndpdGhfY29uc3RhbnRfZGVmYXVsdHM6CiAgICAvLyBhcmNfNTYvY29udHJhY3QucHk6MTMxLTE0MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKAogICAgLy8gICAgIGRlZmF1bHRfYXJncz17CiAgICAvLyAgICAgICAgICJhIjogYXJjNC5VSW50NjQoMTIzKSwKICAgIC8vICAgICAgICAgImMiOiBCeXRlcyhiIjEyMyIpLAogICAgLy8gICAgICAgICAiYiI6IFVJbnQ2NCgyMzQpLAogICAgLy8gICAgICAgICAiZCI6IEV2ZW50T25seSh4PWFyYzQuVUludDY0KDEpLCB5PWFyYzQuVUludDY0KDIpKSwKICAgIC8vICAgICAgICAgImUiOiAoVUludDY0KDQyKSwgU3RyaW5nKCJvbiB0aGUgZWRnZSIpKSwKICAgIC8vICAgICAgICAgImYiOiBhcmM0LlN0YXRpY0FycmF5KGFyYzQuU3RyaW5nKCJoaSIpLCBhcmM0LlN0cmluZygidGhlcmUhIikpLAogICAgLy8gICAgICAgICAiZyI6IGFyYzQuRHluYW1pY0FycmF5KGFyYzQuU3RyaW5nKCJvbmUiKSwgYXJjNC5TdHJpbmcoInR3byIpKSwKICAgIC8vICAgICAgICAgImgiOiBjb25zdGFudF9tZXRob2QoKSwKICAgIC8vICAgICAgICAgImkiOiBlY2hvX251bWJlcihVSW50NjQoMTIzNCkpLAogICAgLy8gICAgIH0KICAgIC8vICkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBkaWcgMQogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmR5bmFtaWNfYXJyYXk8YXJjNC51aW50OD4KICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA0CiAgICBkdXAKICAgIGxlbgogICAgcHVzaGludCAxNgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgdGVzdF9jYXNlcy5hcmNfNTYuY29udHJhY3QuRXZlbnRPbmx5CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA1CiAgICBkdXAKICAgIGxlbgogICAgZGlnIDEKICAgIGludGNfMyAvLyA4CiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCB0dXBsZSBlbmNvZGluZwogICAgZHVwCiAgICBwdXNoaW50IDEwCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgdGFpbCBwb2ludGVyIGF0IGluZGV4IDEgb2YgKHVpbnQ2NCwobGVuK3V0ZjhbXSkpCiAgICBkaWcgMgogICAgc3dhcAogICAgZGlnIDIKICAgIHN1YnN0cmluZzMKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIHB1c2hpbnQgMTIKICAgICsKICAgIHVuY292ZXIgMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC50dXBsZTxhcmM0LnVpbnQ2NCxhcmM0LmR5bmFtaWNfYXJyYXk8YXJjNC51aW50OD4+CiAgICBzd2FwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50NjQKICAgIHN3YXAKICAgIGV4dHJhY3QgMiAwCiAgICBwdXNoaW50IDQKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDYKICAgIGludGNfMCAvLyAwCgp3aXRoX2NvbnN0YW50X2RlZmF1bHRzX2Zvcl9oZWFkZXJAMToKICAgIC8vIGFyY181Ni9jb250cmFjdC5weToxMzEtMTQzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoCiAgICAvLyAgICAgZGVmYXVsdF9hcmdzPXsKICAgIC8vICAgICAgICAgImEiOiBhcmM0LlVJbnQ2NCgxMjMpLAogICAgLy8gICAgICAgICAiYyI6IEJ5dGVzKGIiMTIzIiksCiAgICAvLyAgICAgICAgICJiIjogVUludDY0KDIzNCksCiAgICAvLyAgICAgICAgICJkIjogRXZlbnRPbmx5KHg9YXJjNC5VSW50NjQoMSksIHk9YXJjNC5VSW50NjQoMikpLAogICAgLy8gICAgICAgICAiZSI6IChVSW50NjQoNDIpLCBTdHJpbmcoIm9uIHRoZSBlZGdlIikpLAogICAgLy8gICAgICAgICAiZiI6IGFyYzQuU3RhdGljQXJyYXkoYXJjNC5TdHJpbmcoImhpIiksIGFyYzQuU3RyaW5nKCJ0aGVyZSEiKSksCiAgICAvLyAgICAgICAgICJnIjogYXJjNC5EeW5hbWljQXJyYXkoYXJjNC5TdHJpbmcoIm9uZSIpLCBhcmM0LlN0cmluZygidHdvIikpLAogICAgLy8gICAgICAgICAiaCI6IGNvbnN0YW50X21ldGhvZCgpLAogICAgLy8gICAgICAgICAiaSI6IGVjaG9fbnVtYmVyKFVJbnQ2NCgxMjM0KSksCiAgICAvLyAgICAgfQogICAgLy8gKQogICAgZHVwCiAgICBpbnRjXzIgLy8gMgogICAgPAogICAgYnogd2l0aF9jb25zdGFudF9kZWZhdWx0c19hZnRlcl9mb3JANAogICAgZHVwCiAgICBpbnRjXzIgLy8gMgogICAgKgogICAgZGlnIDIKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBlbmNvZGluZwogICAgZHVwCiAgICB1bmNvdmVyIDUKICAgIGR1cAogICAgY292ZXIgNAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIHRhaWwgcG9pbnRlciBmb3IgKGxlbit1dGY4W10pWzJdCiAgICBkaWcgMQogICAgbGVuCiAgICBzdWJzdHJpbmczCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgaW50Y18yIC8vIDIKICAgICsKICAgICsKICAgIGNvdmVyIDIKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBiIHdpdGhfY29uc3RhbnRfZGVmYXVsdHNfZm9yX2hlYWRlckAxCgp3aXRoX2NvbnN0YW50X2RlZmF1bHRzX2FmdGVyX2ZvckA0OgogICAgcG9wCiAgICAvLyBhcmNfNTYvY29udHJhY3QucHk6MTMxLTE0MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKAogICAgLy8gICAgIGRlZmF1bHRfYXJncz17CiAgICAvLyAgICAgICAgICJhIjogYXJjNC5VSW50NjQoMTIzKSwKICAgIC8vICAgICAgICAgImMiOiBCeXRlcyhiIjEyMyIpLAogICAgLy8gICAgICAgICAiYiI6IFVJbnQ2NCgyMzQpLAogICAgLy8gICAgICAgICAiZCI6IEV2ZW50T25seSh4PWFyYzQuVUludDY0KDEpLCB5PWFyYzQuVUludDY0KDIpKSwKICAgIC8vICAgICAgICAgImUiOiAoVUludDY0KDQyKSwgU3RyaW5nKCJvbiB0aGUgZWRnZSIpKSwKICAgIC8vICAgICAgICAgImYiOiBhcmM0LlN0YXRpY0FycmF5KGFyYzQuU3RyaW5nKCJoaSIpLCBhcmM0LlN0cmluZygidGhlcmUhIikpLAogICAgLy8gICAgICAgICAiZyI6IGFyYzQuRHluYW1pY0FycmF5KGFyYzQuU3RyaW5nKCJvbmUiKSwgYXJjNC5TdHJpbmcoInR3byIpKSwKICAgIC8vICAgICAgICAgImgiOiBjb25zdGFudF9tZXRob2QoKSwKICAgIC8vICAgICAgICAgImkiOiBlY2hvX251bWJlcihVSW50NjQoMTIzNCkpLAogICAgLy8gICAgIH0KICAgIC8vICkKICAgIGR1cAogICAgbGVuCiAgICB1bmNvdmVyIDIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQuZHluYW1pY19hcnJheTxhcmM0LnVpbnQ4PiwgMj4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDcKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGR1cAogICAgY292ZXIgMwogICAgaW50Y18yIC8vIDIKICAgICoKICAgIGNvdmVyIDIKICAgIGR1cAogICAgbGVuCiAgICBjb3ZlciAzCiAgICBleHRyYWN0IDIgMAogICAgaW50Y18wIC8vIDAKCndpdGhfY29uc3RhbnRfZGVmYXVsdHNfZm9yX2hlYWRlckA1OgogICAgLy8gYXJjXzU2L2NvbnRyYWN0LnB5OjEzMS0xNDMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgKICAgIC8vICAgICBkZWZhdWx0X2FyZ3M9ewogICAgLy8gICAgICAgICAiYSI6IGFyYzQuVUludDY0KDEyMyksCiAgICAvLyAgICAgICAgICJjIjogQnl0ZXMoYiIxMjMiKSwKICAgIC8vICAgICAgICAgImIiOiBVSW50NjQoMjM0KSwKICAgIC8vICAgICAgICAgImQiOiBFdmVudE9ubHkoeD1hcmM0LlVJbnQ2NCgxKSwgeT1hcmM0LlVJbnQ2NCgyKSksCiAgICAvLyAgICAgICAgICJlIjogKFVJbnQ2NCg0MiksIFN0cmluZygib24gdGhlIGVkZ2UiKSksCiAgICAvLyAgICAgICAgICJmIjogYXJjNC5TdGF0aWNBcnJheShhcmM0LlN0cmluZygiaGkiKSwgYXJjNC5TdHJpbmcoInRoZXJlISIpKSwKICAgIC8vICAgICAgICAgImciOiBhcmM0LkR5bmFtaWNBcnJheShhcmM0LlN0cmluZygib25lIiksIGFyYzQuU3RyaW5nKCJ0d28iKSksCiAgICAvLyAgICAgICAgICJoIjogY29uc3RhbnRfbWV0aG9kKCksCiAgICAvLyAgICAgICAgICJpIjogZWNob19udW1iZXIoVUludDY0KDEyMzQpKSwKICAgIC8vICAgICB9CiAgICAvLyApCiAgICBkdXAKICAgIGRpZyA2CiAgICA8CiAgICBieiB3aXRoX2NvbnN0YW50X2RlZmF1bHRzX2FmdGVyX2ZvckA4CiAgICBkdXAKICAgIGludGNfMiAvLyAyCiAgICAqCiAgICBkaWcgMgogICAgZHVwCiAgICB1bmNvdmVyIDIKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGVuY29kaW5nCiAgICBkdXAKICAgIHVuY292ZXIgNgogICAgZHVwCiAgICBjb3ZlciA0CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgdGFpbCBwb2ludGVyIGZvciAobGVuKyhsZW4rdXRmOFtdKVtdKQogICAgZGlnIDEKICAgIGxlbgogICAgc3Vic3RyaW5nMwogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGludGNfMiAvLyAyCiAgICArCiAgICArCiAgICBjb3ZlciAzCiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgYiB3aXRoX2NvbnN0YW50X2RlZmF1bHRzX2Zvcl9oZWFkZXJANQoKd2l0aF9jb25zdGFudF9kZWZhdWx0c19hZnRlcl9mb3JAODoKICAgIHBvcG4gMgogICAgLy8gYXJjXzU2L2NvbnRyYWN0LnB5OjEzMS0xNDMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgKICAgIC8vICAgICBkZWZhdWx0X2FyZ3M9ewogICAgLy8gICAgICAgICAiYSI6IGFyYzQuVUludDY0KDEyMyksCiAgICAvLyAgICAgICAgICJjIjogQnl0ZXMoYiIxMjMiKSwKICAgIC8vICAgICAgICAgImIiOiBVSW50NjQoMjM0KSwKICAgIC8vICAgICAgICAgImQiOiBFdmVudE9ubHkoeD1hcmM0LlVJbnQ2NCgxKSwgeT1hcmM0LlVJbnQ2NCgyKSksCiAgICAvLyAgICAgICAgICJlIjogKFVJbnQ2NCg0MiksIFN0cmluZygib24gdGhlIGVkZ2UiKSksCiAgICAvLyAgICAgICAgICJmIjogYXJjNC5TdGF0aWNBcnJheShhcmM0LlN0cmluZygiaGkiKSwgYXJjNC5TdHJpbmcoInRoZXJlISIpKSwKICAgIC8vICAgICAgICAgImciOiBhcmM0LkR5bmFtaWNBcnJheShhcmM0LlN0cmluZygib25lIiksIGFyYzQuU3RyaW5nKCJ0d28iKSksCiAgICAvLyAgICAgICAgICJoIjogY29uc3RhbnRfbWV0aG9kKCksCiAgICAvLyAgICAgICAgICJpIjogZWNob19udW1iZXIoVUludDY0KDEyMzQpKSwKICAgIC8vICAgICB9CiAgICAvLyApCiAgICBzd2FwCiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgdW5jb3ZlciAyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmR5bmFtaWNfYXJyYXk8YXJjNC5keW5hbWljX2FycmF5PGFyYzQudWludDg+PgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgOAogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgc3dhcAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgOQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgc3dhcAogICAgLy8gYXJjXzU2L2NvbnRyYWN0LnB5OjE1NgogICAgLy8gYXNzZXJ0IGEKICAgIGRpZyA5CiAgICBieXRlY18wIC8vIDB4CiAgICBiIT0KICAgIGFzc2VydAogICAgLy8gYXJjXzU2L2NvbnRyYWN0LnB5OjE1NwogICAgLy8gYXNzZXJ0IGIKICAgIGRpZyA4CiAgICBhc3NlcnQKICAgIC8vIGFyY181Ni9jb250cmFjdC5weToxNTgKICAgIC8vIGFzc2VydCBjCiAgICBkaWcgNwogICAgbGVuCiAgICBhc3NlcnQKICAgIC8vIGFyY181Ni9jb250cmFjdC5weToxNTkKICAgIC8vIGFzc2VydCBkLnggb3IgZC55CiAgICBkaWcgNgogICAgZXh0cmFjdCAwIDgKICAgIGJ5dGVjXzAgLy8gMHgKICAgIGIhPQogICAgYm56IHdpdGhfY29uc3RhbnRfZGVmYXVsdHNfYm9vbF90cnVlQDExCiAgICBkaWcgNgogICAgZXh0cmFjdCA4IDgKICAgIGJ5dGVjXzAgLy8gMHgKICAgIGIhPQogICAgYnogd2l0aF9jb25zdGFudF9kZWZhdWx0c19ib29sX2ZhbHNlQDEyCgp3aXRoX2NvbnN0YW50X2RlZmF1bHRzX2Jvb2xfdHJ1ZUAxMToKICAgIGludGNfMSAvLyAxCgp3aXRoX2NvbnN0YW50X2RlZmF1bHRzX2Jvb2xfbWVyZ2VAMTM6CiAgICAvLyBhcmNfNTYvY29udHJhY3QucHk6MTU5CiAgICAvLyBhc3NlcnQgZC54IG9yIGQueQogICAgYXNzZXJ0CiAgICAvLyBhcmNfNTYvY29udHJhY3QucHk6MTYwCiAgICAvLyBhc3NlcnQgZVswXSBvciBlWzFdCiAgICBkaWcgNQogICAgYm56IHdpdGhfY29uc3RhbnRfZGVmYXVsdHNfYm9vbF90cnVlQDE1CiAgICBkaWcgNAogICAgbGVuCiAgICBieiB3aXRoX2NvbnN0YW50X2RlZmF1bHRzX2Jvb2xfZmFsc2VAMTYKCndpdGhfY29uc3RhbnRfZGVmYXVsdHNfYm9vbF90cnVlQDE1OgogICAgaW50Y18xIC8vIDEKCndpdGhfY29uc3RhbnRfZGVmYXVsdHNfYm9vbF9tZXJnZUAxNzoKICAgIC8vIGFyY181Ni9jb250cmFjdC5weToxNjAKICAgIC8vIGFzc2VydCBlWzBdIG9yIGVbMV0KICAgIGFzc2VydAogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGR1cDIKICAgIGV4dHJhY3RfdWludDE2CiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgZXh0cmFjdDMKICAgIC8vIGFyY181Ni9jb250cmFjdC5weToxNjEKICAgIC8vIGFzc2VydCBmWzBdID09ICJoaSIKICAgIHB1c2hieXRlcyAweDAwMDI2ODY5CiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBhcmNfNTYvY29udHJhY3QucHk6MTYyCiAgICAvLyBhc3NlcnQgZy5sZW5ndGggPT0gMgogICAgdW5jb3ZlciAyCiAgICBpbnRjXzIgLy8gMgogICAgPT0KICAgIGFzc2VydAogICAgLy8gYXJjXzU2L2NvbnRyYWN0LnB5OjE2MwogICAgLy8gYXNzZXJ0IGggPT0gNDIKICAgIHN3YXAKICAgIHB1c2hpbnQgNDIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIGFyY181Ni9jb250cmFjdC5weToxNjQKICAgIC8vIGFzc2VydCBpID09IDEyMzQKICAgIHB1c2hpbnQgMTIzNAogICAgPT0KICAgIGFzc2VydAogICAgLy8gYXJjXzU2L2NvbnRyYWN0LnB5OjEzMS0xNDMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgKICAgIC8vICAgICBkZWZhdWx0X2FyZ3M9ewogICAgLy8gICAgICAgICAiYSI6IGFyYzQuVUludDY0KDEyMyksCiAgICAvLyAgICAgICAgICJjIjogQnl0ZXMoYiIxMjMiKSwKICAgIC8vICAgICAgICAgImIiOiBVSW50NjQoMjM0KSwKICAgIC8vICAgICAgICAgImQiOiBFdmVudE9ubHkoeD1hcmM0LlVJbnQ2NCgxKSwgeT1hcmM0LlVJbnQ2NCgyKSksCiAgICAvLyAgICAgICAgICJlIjogKFVJbnQ2NCg0MiksIFN0cmluZygib24gdGhlIGVkZ2UiKSksCiAgICAvLyAgICAgICAgICJmIjogYXJjNC5TdGF0aWNBcnJheShhcmM0LlN0cmluZygiaGkiKSwgYXJjNC5TdHJpbmcoInRoZXJlISIpKSwKICAgIC8vICAgICAgICAgImciOiBhcmM0LkR5bmFtaWNBcnJheShhcmM0LlN0cmluZygib25lIiksIGFyYzQuU3RyaW5nKCJ0d28iKSksCiAgICAvLyAgICAgICAgICJoIjogY29uc3RhbnRfbWV0aG9kKCksCiAgICAvLyAgICAgICAgICJpIjogZWNob19udW1iZXIoVUludDY0KDEyMzQpKSwKICAgIC8vICAgICB9CiAgICAvLyApCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgp3aXRoX2NvbnN0YW50X2RlZmF1bHRzX2Jvb2xfZmFsc2VAMTY6CiAgICBpbnRjXzAgLy8gMAogICAgYiB3aXRoX2NvbnN0YW50X2RlZmF1bHRzX2Jvb2xfbWVyZ2VAMTcKCndpdGhfY29uc3RhbnRfZGVmYXVsdHNfYm9vbF9mYWxzZUAxMjoKICAgIGludGNfMCAvLyAwCiAgICBiIHdpdGhfY29uc3RhbnRfZGVmYXVsdHNfYm9vbF9tZXJnZUAxMwo=", "clear": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMQogICAgcmV0dXJuCg==" }, "byteCode": { "approval": "CyAFAAECCHsmBQAEFR98dQH/BUhlbGxvBwAD/wACSGkxG0EAVYAETFxhujYaAI4BAEAxGRREMRhEggcEl+jkpwR2xN4RBMHKdwkEbediwgRZ/FKCBJ2e7LAEXo7vmjYaAI4HACAAlADgASgBWQGMAcIAIzEZkIEDGkMxGY0GAAUABf/n/+f/5wABADEYFEMjQzYaAUkVSwElWUmBDBJESwJMSwJSIlmBDghLAoEKWUlLAhJETwNMSwNSSRVLASJZSYEDEkRLAkxPAlIiWYEFCE8CCE8CEkQ2GgJJFUsBIllJgQMSREsCTEsCUiJZgQUIEkQSRIAMFR98dQAAAAAAAAAqsCNDNhoBSRVLASVZSYEMEkRLAkxLAlIiWYEOCEsCgQpZSUsCEkRPA0xLA1JJFUsBIllJgQMSREsCTE8CUiJZgQUITwIITwISRClMULAjQzYaAUkVSwElWUmBDBJESwJMSwJSIlmBDghLAoEKWUlLAhJESwNMSwNSSRVLASJZSYEDEkRMUiJZgQUICBJEVwAIgAEAEkQjQ4AP2T83TgADKgAGaGVsbG8xsIAaHnKvTgAEAAsABWhlbGxvAAMqAAZoZWxsbzKwI0M2GgFJFSMSRCJTQQAkgCERxUe6AAAAAAAAACoAAAAAAAAAKwASAAMqAAZoZWxsbzOwI0MqKyEEJwRJFYENCE8CFoACAA1MUEsDFRZXBgJPBFBPAhZXBgJPAkxQTwNQTwJQTFApTFCwI0M2GgFJFSUSRDYaAkkVJRJEFzYaA0kiWSQISwEVEkRXAgA2GgRJFYEQEkQ2GgVJFUsBJVlJgQoSREsCTEsCUkkiWYEMCE8CEkRMIltMVwIAgQQ2GgYiSSQMQQAhSSQLSwJJTwJZSU8FSU4EEkRLARVSIlkkCAhOAiMIQv/ZSEkVTwISRDYaB0kiWUlOAyQLTgJJFU4DVwIAIklLBgxBACFJJAtLAklPAllJTwZJTgQSREsBFVIiWSQICE4DIwhC/9hGAkwkCE8CEkQ2GghJFSUSRBdMNhoJSRUlEkQXTEsJKKlESwhESwcVREsGVwAIKKlAAApLBlcICCipQQA0I0RLBUAABksEFUEAIyNESSJZSlkkCFiABAACaGkSRE8CJBJETIEqEkSB0gkSRCNDIkL/2iJC/8k=", "clear": "C4EBQw==" }, "compilerInfo": { "compiler": "puya", "compilerVersion": { "major": 99, "minor": 99, "patch": 99 } }, "events": [ { "name": "SharedStruct", "args": [ { "type": "byte[]", "name": "foo" }, { "type": "uint8", "name": "bar" } ], "desc": "This struct is shared" }, { "name": "Anonymous", "args": [ { "type": "string", "name": "field1" }, { "type": "(byte[],uint8)", "name": "field2", "struct": "SharedStruct" } ] }, { "name": "Anonymous2", "args": [ { "type": "(uint64,uint64)", "name": "field1", "struct": "EventOnly" }, { "type": "(byte[],uint8)", "name": "field2", "struct": "SharedStruct" } ] } ], "templateVariables": { "AVM_UINT64": { "type": "AVMUint64", "value": "AAAAAAAAAHs=" }, "ARC4_UINT8": { "type": "uint8", "value": "/w==" }, "AVM_STRING": { "type": "AVMString", "value": "SGVsbG8=" }, "STRUCT": { "type": "SharedStruct", "value": "AAP/AAJIaQ==" } } }