{ "name": "IntegrityExam", "structs": { "CertificateData": [ { "name": "student_address", "type": "address" }, { "name": "final_marks", "type": "uint64" }, { "name": "total_questions", "type": "uint64" }, { "name": "timestamp", "type": "uint64" }, { "name": "nft_id", "type": "uint64" } ], "StudentData": [ { "name": "staked_amount", "type": "uint64" }, { "name": "marks", "type": "uint64" }, { "name": "cheat_count", "type": "uint64" }, { "name": "is_exam_active", "type": "uint64" } ] }, "methods": [ { "name": "create_application", "args": [ { "type": "uint64", "name": "gzc_id" } ], "returns": { "type": "void" }, "actions": { "create": [ "NoOp" ], "call": [] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "opt_in_to_asset", "args": [ { "type": "uint64", "name": "gzc_asset" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "claim_demo_tokens", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "stake_and_start", "args": [ { "type": "axfer", "name": "stake_pmt" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "record_cheat", "args": [ { "type": "address", "name": "student" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "complete_exam", "args": [ { "type": "address", "name": "student" }, { "type": "uint64", "name": "final_marks" }, { "type": "uint64", "name": "total_q" } ], "returns": { "type": "uint64" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "admin_withdraw", "args": [ { "type": "uint64", "name": "amount" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "get_certificate", "args": [ { "type": "address", "name": "student" } ], "returns": { "type": "(address,uint64,uint64,uint64,uint64)", "struct": "CertificateData" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "desc": "Get certificate data for a student", "events": [], "recommendations": {} } ], "arcs": [ 22, 28 ], "networks": {}, "state": { "schema": { "global": { "ints": 3, "bytes": 0 }, "local": { "ints": 0, "bytes": 0 } }, "keys": { "global": { "gzc_asa_id": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "Z3pjX2FzYV9pZA==" }, "scholarship_amount": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "c2Nob2xhcnNoaXBfYW1vdW50" }, "total_questions": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "dG90YWxfcXVlc3Rpb25z" } }, "local": {}, "box": {} }, "maps": { "global": {}, "local": {}, "box": { "student_records": { "keyType": "address", "valueType": "StudentData", "prefix": "cw==" }, "has_claimed_demo": { "keyType": "address", "valueType": "uint64", "prefix": "ZA==" }, "certificates": { "keyType": "address", "valueType": "CertificateData", "prefix": "Yw==" } } } }, "bareActions": { "create": [], "call": [] }, "sourceInfo": { "approval": { "sourceInfo": [ { "pc": [ 234 ], "errorMessage": "Already claimed" }, { "pc": [ 203 ], "errorMessage": "Asset mismatch" }, { "pc": [ 292 ], "errorMessage": "Exam in progress" }, { "pc": [ 195, 702 ], "errorMessage": "Only creator" }, { "pc": [ 363, 433 ], "errorMessage": "Only proctor" }, { "pc": [ 740 ], "errorMessage": "check self.certificates entry exists" }, { "pc": [ 199, 239, 306, 633, 655, 707 ], "errorMessage": "check self.gzc_asa_id exists" }, { "pc": [ 659 ], "errorMessage": "check self.scholarship_amount exists" }, { "pc": [ 369, 445 ], "errorMessage": "check self.student_records entry exists" }, { "pc": [ 357, 405, 735 ], "errorMessage": "invalid number of bytes for arc4.static_array" }, { "pc": [ 166, 188, 416, 427, 695 ], "errorMessage": "invalid number of bytes for arc4.uint64" }, { "pc": [ 283 ], "errorMessage": "transaction type is axfer" } ], "pcOffsetMethod": "none" }, "clear": { "sourceInfo": [], "pcOffsetMethod": "none" } }, "source": { "approval": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAwIDEgNCA4CiAgICBieXRlY2Jsb2NrICJnemNfYXNhX2lkIiAweDczICJzY2hvbGFyc2hpcF9hbW91bnQiIDB4NjMgMHgxNTFmN2M3NQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMgogICAgLy8gY29udHJhY3RzL0ludGVncml0eUV4YW0ucHk6MzMKICAgIC8vIHNlbGYuZ3pjX2FzYV9pZCAgICAgICAgID0gVUludDY0KDApCiAgICBieXRlY18wIC8vICJnemNfYXNhX2lkIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBjb250cmFjdHMvSW50ZWdyaXR5RXhhbS5weTozNAogICAgLy8gc2VsZi5zY2hvbGFyc2hpcF9hbW91bnQgPSBVSW50NjQoMCkKICAgIGJ5dGVjXzIgLy8gInNjaG9sYXJzaGlwX2Ftb3VudCIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gY29udHJhY3RzL0ludGVncml0eUV4YW0ucHk6MzUKICAgIC8vIHNlbGYudG90YWxfcXVlc3Rpb25zICAgID0gVUludDY0KDEwKQogICAgcHVzaGJ5dGVzICJ0b3RhbF9xdWVzdGlvbnMiCiAgICBwdXNoaW50IDEwCiAgICBhcHBfZ2xvYmFsX3B1dAoKbWFpbl9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBjb250cmFjdHMvSW50ZWdyaXR5RXhhbS5weToyNgogICAgLy8gY2xhc3MgSW50ZWdyaXR5RXhhbShBUkM0Q29udHJhY3QpOgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYnogbWFpbl9jcmVhdGVfTm9PcEAxMwogICAgcHVzaGJ5dGVzcyAweGRmNTRlOGFhIDB4MTExMzM0MTggMHhlNjk0NWUxNyAweDZmNzAzYTUxIDB4MjYyMmM5NTIgMHg5ZGJiNGE3NiAweGFlNzc5MDVmIC8vIG1ldGhvZCAib3B0X2luX3RvX2Fzc2V0KHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJjbGFpbV9kZW1vX3Rva2Vucygpdm9pZCIsIG1ldGhvZCAic3Rha2VfYW5kX3N0YXJ0KGF4ZmVyKXZvaWQiLCBtZXRob2QgInJlY29yZF9jaGVhdChhZGRyZXNzKXZvaWQiLCBtZXRob2QgImNvbXBsZXRlX2V4YW0oYWRkcmVzcyx1aW50NjQsdWludDY0KXVpbnQ2NCIsIG1ldGhvZCAiYWRtaW5fd2l0aGRyYXcodWludDY0KXZvaWQiLCBtZXRob2QgImdldF9jZXJ0aWZpY2F0ZShhZGRyZXNzKShhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCkiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBvcHRfaW5fdG9fYXNzZXQgY2xhaW1fZGVtb190b2tlbnMgc3Rha2VfYW5kX3N0YXJ0IHJlY29yZF9jaGVhdCBjb21wbGV0ZV9leGFtIGFkbWluX3dpdGhkcmF3IGdldF9jZXJ0aWZpY2F0ZQogICAgZXJyCgptYWluX2NyZWF0ZV9Ob09wQDEzOgogICAgLy8gY29udHJhY3RzL0ludGVncml0eUV4YW0ucHk6MjYKICAgIC8vIGNsYXNzIEludGVncml0eUV4YW0oQVJDNENvbnRyYWN0KToKICAgIHB1c2hieXRlcyAweGEwM2I4MWQyIC8vIG1ldGhvZCAiY3JlYXRlX2FwcGxpY2F0aW9uKHVpbnQ2NCl2b2lkIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggY3JlYXRlX2FwcGxpY2F0aW9uCiAgICBlcnIKCgovLyBJbnRlZ3JpdHlFeGFtLkludGVncml0eUV4YW0uY3JlYXRlX2FwcGxpY2F0aW9uW3JvdXRpbmddKCkgLT4gdm9pZDoKY3JlYXRlX2FwcGxpY2F0aW9uOgogICAgLy8gY29udHJhY3RzL0ludGVncml0eUV4YW0ucHk6MzcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChjcmVhdGU9InJlcXVpcmUiKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gY29udHJhY3RzL0ludGVncml0eUV4YW0ucHk6MzkKICAgIC8vIHNlbGYuZ3pjX2FzYV9pZCAgICAgICAgID0gZ3pjX2lkLmlkCiAgICBieXRlY18wIC8vICJnemNfYXNhX2lkIgogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIGNvbnRyYWN0cy9JbnRlZ3JpdHlFeGFtLnB5OjQwCiAgICAvLyBzZWxmLnNjaG9sYXJzaGlwX2Ftb3VudCA9IFVJbnQ2NCgxMF8wMDBfMDAwXzAwMCkKICAgIGJ5dGVjXzIgLy8gInNjaG9sYXJzaGlwX2Ftb3VudCIKICAgIHB1c2hpbnQgMTAwMDAwMDAwMDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBjb250cmFjdHMvSW50ZWdyaXR5RXhhbS5weTozNwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKGNyZWF0ZT0icmVxdWlyZSIpCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gSW50ZWdyaXR5RXhhbS5JbnRlZ3JpdHlFeGFtLm9wdF9pbl90b19hc3NldFtyb3V0aW5nXSgpIC0+IHZvaWQ6Cm9wdF9pbl90b19hc3NldDoKICAgIC8vIGNvbnRyYWN0cy9JbnRlZ3JpdHlFeGFtLnB5OjQyCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIC8vIGNvbnRyYWN0cy9JbnRlZ3JpdHlFeGFtLnB5OjQ0CiAgICAvLyBhc3NlcnQgVHhuLnNlbmRlciA9PSBHbG9iYWwuY3JlYXRvcl9hZGRyZXNzLCAiT25seSBjcmVhdG9yIgogICAgdHhuIFNlbmRlcgogICAgZ2xvYmFsIENyZWF0b3JBZGRyZXNzCiAgICA9PQogICAgYXNzZXJ0IC8vIE9ubHkgY3JlYXRvcgogICAgLy8gY29udHJhY3RzL0ludGVncml0eUV4YW0ucHk6NDUKICAgIC8vIGFzc2VydCBnemNfYXNzZXQuaWQgPT0gc2VsZi5nemNfYXNhX2lkLCAiQXNzZXQgbWlzbWF0Y2giCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMCAvLyAiZ3pjX2FzYV9pZCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5nemNfYXNhX2lkIGV4aXN0cwogICAgZGlnIDEKICAgID09CiAgICBhc3NlcnQgLy8gQXNzZXQgbWlzbWF0Y2gKICAgIC8vIGNvbnRyYWN0cy9JbnRlZ3JpdHlFeGFtLnB5OjQ2LTUwCiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICAvLyAgICAgeGZlcl9hc3NldD1nemNfYXNzZXQsCiAgICAvLyAgICAgYXNzZXRfcmVjZWl2ZXI9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIC8vICAgICBhc3NldF9hbW91bnQ9MCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIGNvbnRyYWN0cy9JbnRlZ3JpdHlFeGFtLnB5OjQ4CiAgICAvLyBhc3NldF9yZWNlaXZlcj1HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLAogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIC8vIGNvbnRyYWN0cy9JbnRlZ3JpdHlFeGFtLnB5OjQ5CiAgICAvLyBhc3NldF9hbW91bnQ9MCwKICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICAvLyBjb250cmFjdHMvSW50ZWdyaXR5RXhhbS5weTo0NgogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgaW50Y18yIC8vIGF4ZmVyCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIGNvbnRyYWN0cy9JbnRlZ3JpdHlFeGFtLnB5OjQ2LTUwCiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICAvLyAgICAgeGZlcl9hc3NldD1nemNfYXNzZXQsCiAgICAvLyAgICAgYXNzZXRfcmVjZWl2ZXI9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIC8vICAgICBhc3NldF9hbW91bnQ9MCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICAvLyBjb250cmFjdHMvSW50ZWdyaXR5RXhhbS5weTo0MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gSW50ZWdyaXR5RXhhbS5JbnRlZ3JpdHlFeGFtLmNsYWltX2RlbW9fdG9rZW5zW3JvdXRpbmddKCkgLT4gdm9pZDoKY2xhaW1fZGVtb190b2tlbnM6CiAgICAvLyBjb250cmFjdHMvSW50ZWdyaXR5RXhhbS5weTo1NQogICAgLy8gYXNzZXJ0IHNlbmRlcl9hZGRyZXNzIG5vdCBpbiBzZWxmLmhhc19jbGFpbWVkX2RlbW8sICJBbHJlYWR5IGNsYWltZWQiCiAgICBwdXNoYnl0ZXMgMHg2NAogICAgLy8gY29udHJhY3RzL0ludGVncml0eUV4YW0ucHk6NTQKICAgIC8vIHNlbmRlcl9hZGRyZXNzID0gYXJjNC5BZGRyZXNzKFR4bi5zZW5kZXIpCiAgICB0eG4gU2VuZGVyCiAgICAvLyBjb250cmFjdHMvSW50ZWdyaXR5RXhhbS5weTo1NQogICAgLy8gYXNzZXJ0IHNlbmRlcl9hZGRyZXNzIG5vdCBpbiBzZWxmLmhhc19jbGFpbWVkX2RlbW8sICJBbHJlYWR5IGNsYWltZWQiCiAgICBjb25jYXQKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICAhCiAgICBhc3NlcnQgLy8gQWxyZWFkeSBjbGFpbWVkCiAgICAvLyBjb250cmFjdHMvSW50ZWdyaXR5RXhhbS5weTo1Ni02MAogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgLy8gICAgIHhmZXJfYXNzZXQ9QXNzZXQoc2VsZi5nemNfYXNhX2lkKSwKICAgIC8vICAgICBhc3NldF9yZWNlaXZlcj1UeG4uc2VuZGVyLAogICAgLy8gICAgIGFzc2V0X2Ftb3VudD1VSW50NjQoMV8wMDBfMDAwXzAwMCksCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBjb250cmFjdHMvSW50ZWdyaXR5RXhhbS5weTo1NwogICAgLy8geGZlcl9hc3NldD1Bc3NldChzZWxmLmd6Y19hc2FfaWQpLAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gImd6Y19hc2FfaWQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuZ3pjX2FzYV9pZCBleGlzdHMKICAgIC8vIGNvbnRyYWN0cy9JbnRlZ3JpdHlFeGFtLnB5OjU4CiAgICAvLyBhc3NldF9yZWNlaXZlcj1UeG4uc2VuZGVyLAogICAgdHhuIFNlbmRlcgogICAgLy8gY29udHJhY3RzL0ludGVncml0eUV4YW0ucHk6NTkKICAgIC8vIGFzc2V0X2Ftb3VudD1VSW50NjQoMV8wMDBfMDAwXzAwMCksCiAgICBwdXNoaW50IDEwMDAwMDAwMDAKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIC8vIGNvbnRyYWN0cy9JbnRlZ3JpdHlFeGFtLnB5OjU2CiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICBpbnRjXzIgLy8gYXhmZXIKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gY29udHJhY3RzL0ludGVncml0eUV4YW0ucHk6NTYtNjAKICAgIC8vIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIC8vICAgICB4ZmVyX2Fzc2V0PUFzc2V0KHNlbGYuZ3pjX2FzYV9pZCksCiAgICAvLyAgICAgYXNzZXRfcmVjZWl2ZXI9VHhuLnNlbmRlciwKICAgIC8vICAgICBhc3NldF9hbW91bnQ9VUludDY0KDFfMDAwXzAwMF8wMDApLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIC8vIGNvbnRyYWN0cy9JbnRlZ3JpdHlFeGFtLnB5OjYxCiAgICAvLyBzZWxmLmhhc19jbGFpbWVkX2RlbW9bc2VuZGVyX2FkZHJlc3NdID0gYXJjNC5VSW50NjQoMSkKICAgIHB1c2hieXRlcyAweDAwMDAwMDAwMDAwMDAwMDEKICAgIGJveF9wdXQKICAgIC8vIGNvbnRyYWN0cy9JbnRlZ3JpdHlFeGFtLnB5OjUyCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBJbnRlZ3JpdHlFeGFtLkludGVncml0eUV4YW0uc3Rha2VfYW5kX3N0YXJ0W3JvdXRpbmddKCkgLT4gdm9pZDoKc3Rha2VfYW5kX3N0YXJ0OgogICAgLy8gY29udHJhY3RzL0ludGVncml0eUV4YW0ucHk6NjMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIEdyb3VwSW5kZXgKICAgIGludGNfMSAvLyAxCiAgICAtCiAgICBkdXAKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBpbnRjXzIgLy8gYXhmZXIKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBheGZlcgogICAgLy8gY29udHJhY3RzL0ludGVncml0eUV4YW0ucHk6NjUKICAgIC8vIGFzc2VydCBhcmM0LkFkZHJlc3MoVHhuLnNlbmRlcikgbm90IGluIHNlbGYuc3R1ZGVudF9yZWNvcmRzLCAiRXhhbSBpbiBwcm9ncmVzcyIKICAgIGJ5dGVjXzEgLy8gMHg3MwogICAgdHhuIFNlbmRlcgogICAgY29uY2F0CiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgICEKICAgIGFzc2VydCAvLyBFeGFtIGluIHByb2dyZXNzCiAgICAvLyBjb250cmFjdHMvSW50ZWdyaXR5RXhhbS5weTo2NgogICAgLy8gYXNzZXJ0IHN0YWtlX3BtdC5hc3NldF9yZWNlaXZlciA9PSBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzCiAgICBkdXAKICAgIGd0eG5zIEFzc2V0UmVjZWl2ZXIKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBjb250cmFjdHMvSW50ZWdyaXR5RXhhbS5weTo2NwogICAgLy8gYXNzZXJ0IHN0YWtlX3BtdC54ZmVyX2Fzc2V0LmlkID09IHNlbGYuZ3pjX2FzYV9pZAogICAgZHVwCiAgICBndHhucyBYZmVyQXNzZXQKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18wIC8vICJnemNfYXNhX2lkIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmd6Y19hc2FfaWQgZXhpc3RzCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBjb250cmFjdHMvSW50ZWdyaXR5RXhhbS5weTo2OAogICAgLy8gYXNzZXJ0IHN0YWtlX3BtdC5hc3NldF9hbW91bnQgPiAwCiAgICBndHhucyBBc3NldEFtb3VudAogICAgZHVwCiAgICBhc3NlcnQKICAgIC8vIGNvbnRyYWN0cy9JbnRlZ3JpdHlFeGFtLnB5OjcwCiAgICAvLyBzdGFrZWRfYW1vdW50PWFyYzQuVUludDY0KHN0YWtlX3BtdC5hc3NldF9hbW91bnQpLAogICAgaXRvYgogICAgLy8gY29udHJhY3RzL0ludGVncml0eUV4YW0ucHk6NjktNzQKICAgIC8vIHNlbGYuc3R1ZGVudF9yZWNvcmRzW2FyYzQuQWRkcmVzcyhUeG4uc2VuZGVyKV0gPSBTdHVkZW50RGF0YSgKICAgIC8vICAgICBzdGFrZWRfYW1vdW50PWFyYzQuVUludDY0KHN0YWtlX3BtdC5hc3NldF9hbW91bnQpLAogICAgLy8gICAgIG1hcmtzPWFyYzQuVUludDY0KDApLAogICAgLy8gICAgIGNoZWF0X2NvdW50PWFyYzQuVUludDY0KDApLAogICAgLy8gICAgIGlzX2V4YW1fYWN0aXZlPWFyYzQuVUludDY0KDEpLAogICAgLy8gKQogICAgcHVzaGJ5dGVzIDB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCiAgICBjb25jYXQKICAgIC8vIGNvbnRyYWN0cy9JbnRlZ3JpdHlFeGFtLnB5OjY5CiAgICAvLyBzZWxmLnN0dWRlbnRfcmVjb3Jkc1thcmM0LkFkZHJlc3MoVHhuLnNlbmRlcildID0gU3R1ZGVudERhdGEoCiAgICBieXRlY18xIC8vIDB4NzMKICAgIHR4biBTZW5kZXIKICAgIGNvbmNhdAogICAgLy8gY29udHJhY3RzL0ludGVncml0eUV4YW0ucHk6NjktNzQKICAgIC8vIHNlbGYuc3R1ZGVudF9yZWNvcmRzW2FyYzQuQWRkcmVzcyhUeG4uc2VuZGVyKV0gPSBTdHVkZW50RGF0YSgKICAgIC8vICAgICBzdGFrZWRfYW1vdW50PWFyYzQuVUludDY0KHN0YWtlX3BtdC5hc3NldF9hbW91bnQpLAogICAgLy8gICAgIG1hcmtzPWFyYzQuVUludDY0KDApLAogICAgLy8gICAgIGNoZWF0X2NvdW50PWFyYzQuVUludDY0KDApLAogICAgLy8gICAgIGlzX2V4YW1fYWN0aXZlPWFyYzQuVUludDY0KDEpLAogICAgLy8gKQogICAgc3dhcAogICAgYm94X3B1dAogICAgLy8gY29udHJhY3RzL0ludGVncml0eUV4YW0ucHk6NjMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIEludGVncml0eUV4YW0uSW50ZWdyaXR5RXhhbS5yZWNvcmRfY2hlYXRbcm91dGluZ10oKSAtPiB2b2lkOgpyZWNvcmRfY2hlYXQ6CiAgICAvLyBjb250cmFjdHMvSW50ZWdyaXR5RXhhbS5weTo3NgogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgcHVzaGludCAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICAvLyBjb250cmFjdHMvSW50ZWdyaXR5RXhhbS5weTo3OAogICAgLy8gYXNzZXJ0IFR4bi5zZW5kZXIgPT0gR2xvYmFsLmNyZWF0b3JfYWRkcmVzcywgIk9ubHkgcHJvY3RvciIKICAgIHR4biBTZW5kZXIKICAgIGdsb2JhbCBDcmVhdG9yQWRkcmVzcwogICAgPT0KICAgIGFzc2VydCAvLyBPbmx5IHByb2N0b3IKICAgIC8vIGNvbnRyYWN0cy9JbnRlZ3JpdHlFeGFtLnB5Ojc5CiAgICAvLyByZWNvcmQgPSBzZWxmLnN0dWRlbnRfcmVjb3Jkc1tzdHVkZW50XS5jb3B5KCkKICAgIGJ5dGVjXzEgLy8gMHg3MwogICAgc3dhcAogICAgY29uY2F0CiAgICBkdXAKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnN0dWRlbnRfcmVjb3JkcyBlbnRyeSBleGlzdHMKICAgIC8vIGNvbnRyYWN0cy9JbnRlZ3JpdHlFeGFtLnB5OjgwCiAgICAvLyBuZXdfY2hlYXRzID0gcmVjb3JkLmNoZWF0X2NvdW50Lm5hdGl2ZSArIDEKICAgIGR1cAogICAgcHVzaGludCAxNgogICAgZXh0cmFjdF91aW50NjQKICAgIGludGNfMSAvLyAxCiAgICArCiAgICAvLyBjb250cmFjdHMvSW50ZWdyaXR5RXhhbS5weTo4MQogICAgLy8gcmVjb3JkLmNoZWF0X2NvdW50ID0gYXJjNC5VSW50NjQobmV3X2NoZWF0cykKICAgIGl0b2IKICAgIHJlcGxhY2UyIDE2CiAgICAvLyBjb250cmFjdHMvSW50ZWdyaXR5RXhhbS5weTo4Mi04MwogICAgLy8gIyAxMDAlIHNsYXNoIG9uIEFOWSBjaGVhdCAtIGtlZXAgYWxsIHN0YWtlIGluIGNvbnRyYWN0CiAgICAvLyByZWNvcmQuc3Rha2VkX2Ftb3VudCA9IGFyYzQuVUludDY0KDApCiAgICBwdXNoYnl0ZXMgMHgwMDAwMDAwMDAwMDAwMDAwCiAgICByZXBsYWNlMiAwCiAgICAvLyBjb250cmFjdHMvSW50ZWdyaXR5RXhhbS5weTo4NAogICAgLy8gc2VsZi5zdHVkZW50X3JlY29yZHNbc3R1ZGVudF0gPSByZWNvcmQuY29weSgpCiAgICBib3hfcHV0CiAgICAvLyBjb250cmFjdHMvSW50ZWdyaXR5RXhhbS5weTo3NgogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gSW50ZWdyaXR5RXhhbS5JbnRlZ3JpdHlFeGFtLmNvbXBsZXRlX2V4YW1bcm91dGluZ10oKSAtPiB2b2lkOgpjb21wbGV0ZV9leGFtOgogICAgcHVzaGJ5dGVzICIiCiAgICAvLyBjb250cmFjdHMvSW50ZWdyaXR5RXhhbS5weTo4NgogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXBuIDIKICAgIGxlbgogICAgcHVzaGludCAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGR1cAogICAgY292ZXIgMwogICAgbGVuCiAgICBpbnRjXzMgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIC8vIGNvbnRyYWN0cy9JbnRlZ3JpdHlFeGFtLnB5Ojg4CiAgICAvLyBhc3NlcnQgVHhuLnNlbmRlciA9PSBHbG9iYWwuY3JlYXRvcl9hZGRyZXNzLCAiT25seSBwcm9jdG9yIgogICAgdHhuIFNlbmRlcgogICAgZ2xvYmFsIENyZWF0b3JBZGRyZXNzCiAgICA9PQogICAgYXNzZXJ0IC8vIE9ubHkgcHJvY3RvcgogICAgLy8gY29udHJhY3RzL0ludGVncml0eUV4YW0ucHk6ODkKICAgIC8vIHJlY29yZCA9IHNlbGYuc3R1ZGVudF9yZWNvcmRzW3N0dWRlbnRdLmNvcHkoKQogICAgYnl0ZWNfMSAvLyAweDczCiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgZHVwCiAgICBjb3ZlciAyCiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBjb3ZlciAyCiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5zdHVkZW50X3JlY29yZHMgZW50cnkgZXhpc3RzCiAgICAvLyBjb250cmFjdHMvSW50ZWdyaXR5RXhhbS5weTo5MS05MgogICAgLy8gIyBPbmx5IGlzc3VlIGNlcnRpZmljYXRlLCByZXR1cm4gc3Rha2UsIGFuZCBnaXZlIHNjaG9sYXJzaGlwIGlmIHBhc3NlZCB3aXRoIE5PIGNoZWF0cwogICAgLy8gbmZ0X2lkID0gVUludDY0KDApCiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgLy8gY29udHJhY3RzL0ludGVncml0eUV4YW0ucHk6OTMKICAgIC8vIGlmIGZpbmFsX21hcmtzID49IDgwIGFuZCByZWNvcmQuY2hlYXRfY291bnQubmF0aXZlID09IDA6CiAgICBwdXNoaW50IDgwCiAgICA+PQogICAgYnogY29tcGxldGVfZXhhbV9hZnRlcl9pZl9lbHNlQDEwCiAgICBkaWcgMQogICAgcHVzaGludCAxNgogICAgZXh0cmFjdF91aW50NjQKICAgIGJueiBjb21wbGV0ZV9leGFtX2FmdGVyX2lmX2Vsc2VAMTAKICAgIC8vIGNvbnRyYWN0cy9JbnRlZ3JpdHlFeGFtLnB5Ojk0LTEwNgogICAgLy8gIyBNaW50IHNjaG9sYXJzaGlwIE5GVCBjZXJ0aWZpY2F0ZQogICAgLy8gbmZ0X2lkID0gaXR4bi5Bc3NldENvbmZpZygKICAgIC8vICAgICB0b3RhbD0xLAogICAgLy8gICAgIGRlY2ltYWxzPTAsCiAgICAvLyAgICAgZGVmYXVsdF9mcm96ZW49RmFsc2UsCiAgICAvLyAgICAgdW5pdF9uYW1lPWIiR1pDRVJUIiwKICAgIC8vICAgICBhc3NldF9uYW1lPWIiR3JhZFpDYXAgU2Nob2xhcnNoaXAgQ2VydGlmaWNhdGUiLAogICAgLy8gICAgIHVybD1iImh0dHBzOi8vZ3JhZHpjYXAuY29tL3ZlcmlmeSIsCiAgICAvLyAgICAgbWFuYWdlcj1HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLAogICAgLy8gICAgIHJlc2VydmU9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIC8vICAgICBmcmVlemU9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIC8vICAgICBjbGF3YmFjaz1HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLAogICAgLy8gKS5zdWJtaXQoKS5jcmVhdGVkX2Fzc2V0LmlkCiAgICBpdHhuX2JlZ2luCiAgICAvLyBjb250cmFjdHMvSW50ZWdyaXR5RXhhbS5weToxMDIKICAgIC8vIG1hbmFnZXI9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICAvLyBjb250cmFjdHMvSW50ZWdyaXR5RXhhbS5weToxMDMtMTA1CiAgICAvLyByZXNlcnZlPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICAvLyBmcmVlemU9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIC8vIGNsYXdiYWNrPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICBkdXBuIDMKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRDbGF3YmFjawogICAgaXR4bl9maWVsZCBDb25maWdBc3NldEZyZWV6ZQogICAgaXR4bl9maWVsZCBDb25maWdBc3NldFJlc2VydmUKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRNYW5hZ2VyCiAgICAvLyBjb250cmFjdHMvSW50ZWdyaXR5RXhhbS5weToxMDEKICAgIC8vIHVybD1iImh0dHBzOi8vZ3JhZHpjYXAuY29tL3ZlcmlmeSIsCiAgICBwdXNoYnl0ZXMgMHg2ODc0NzQ3MDczM2EyZjJmNjc3MjYxNjQ3YTYzNjE3MDJlNjM2ZjZkMmY3NjY1NzI2OTY2NzkKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRVUkwKICAgIC8vIGNvbnRyYWN0cy9JbnRlZ3JpdHlFeGFtLnB5OjEwMAogICAgLy8gYXNzZXRfbmFtZT1iIkdyYWRaQ2FwIFNjaG9sYXJzaGlwIENlcnRpZmljYXRlIiwKICAgIHB1c2hieXRlcyAweDQ3NzI2MTY0NWE0MzYxNzAyMDUzNjM2ODZmNmM2MTcyNzM2ODY5NzAyMDQzNjU3Mjc0Njk2NjY5NjM2MTc0NjUKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXROYW1lCiAgICAvLyBjb250cmFjdHMvSW50ZWdyaXR5RXhhbS5weTo5OQogICAgLy8gdW5pdF9uYW1lPWIiR1pDRVJUIiwKICAgIHB1c2hieXRlcyAweDQ3NWE0MzQ1NTI1NAogICAgaXR4bl9maWVsZCBDb25maWdBc3NldFVuaXROYW1lCiAgICAvLyBjb250cmFjdHMvSW50ZWdyaXR5RXhhbS5weTo5OAogICAgLy8gZGVmYXVsdF9mcm96ZW49RmFsc2UsCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBDb25maWdBc3NldERlZmF1bHRGcm96ZW4KICAgIC8vIGNvbnRyYWN0cy9JbnRlZ3JpdHlFeGFtLnB5Ojk3CiAgICAvLyBkZWNpbWFscz0wLAogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXREZWNpbWFscwogICAgLy8gY29udHJhY3RzL0ludGVncml0eUV4YW0ucHk6OTYKICAgIC8vIHRvdGFsPTEsCiAgICBpbnRjXzEgLy8gMQogICAgaXR4bl9maWVsZCBDb25maWdBc3NldFRvdGFsCiAgICAvLyBjb250cmFjdHMvSW50ZWdyaXR5RXhhbS5weTo5NC05NQogICAgLy8gIyBNaW50IHNjaG9sYXJzaGlwIE5GVCBjZXJ0aWZpY2F0ZQogICAgLy8gbmZ0X2lkID0gaXR4bi5Bc3NldENvbmZpZygKICAgIHB1c2hpbnQgMyAvLyBhY2ZnCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIGNvbnRyYWN0cy9JbnRlZ3JpdHlFeGFtLnB5Ojk0LTEwNgogICAgLy8gIyBNaW50IHNjaG9sYXJzaGlwIE5GVCBjZXJ0aWZpY2F0ZQogICAgLy8gbmZ0X2lkID0gaXR4bi5Bc3NldENvbmZpZygKICAgIC8vICAgICB0b3RhbD0xLAogICAgLy8gICAgIGRlY2ltYWxzPTAsCiAgICAvLyAgICAgZGVmYXVsdF9mcm96ZW49RmFsc2UsCiAgICAvLyAgICAgdW5pdF9uYW1lPWIiR1pDRVJUIiwKICAgIC8vICAgICBhc3NldF9uYW1lPWIiR3JhZFpDYXAgU2Nob2xhcnNoaXAgQ2VydGlmaWNhdGUiLAogICAgLy8gICAgIHVybD1iImh0dHBzOi8vZ3JhZHpjYXAuY29tL3ZlcmlmeSIsCiAgICAvLyAgICAgbWFuYWdlcj1HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLAogICAgLy8gICAgIHJlc2VydmU9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIC8vICAgICBmcmVlemU9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIC8vICAgICBjbGF3YmFjaz1HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLAogICAgLy8gKS5zdWJtaXQoKS5jcmVhdGVkX2Fzc2V0LmlkCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBDcmVhdGVkQXNzZXRJRAogICAgZHVwCiAgICBidXJ5IDIKICAgIC8vIGNvbnRyYWN0cy9JbnRlZ3JpdHlFeGFtLnB5OjEwOC0xMTMKICAgIC8vICMgVHJhbnNmZXIgTkZUIHRvIHN0dWRlbnQKICAgIC8vIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIC8vICAgICB4ZmVyX2Fzc2V0PUFzc2V0KG5mdF9pZCksCiAgICAvLyAgICAgYXNzZXRfcmVjZWl2ZXI9c3R1ZGVudC5uYXRpdmUsCiAgICAvLyAgICAgYXNzZXRfYW1vdW50PTEsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBjb250cmFjdHMvSW50ZWdyaXR5RXhhbS5weToxMTIKICAgIC8vIGFzc2V0X2Ftb3VudD0xLAogICAgaW50Y18xIC8vIDEKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGRpZyA2CiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgZHVwCiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgLy8gY29udHJhY3RzL0ludGVncml0eUV4YW0ucHk6MTA4LTEwOQogICAgLy8gIyBUcmFuc2ZlciBORlQgdG8gc3R1ZGVudAogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgaW50Y18yIC8vIGF4ZmVyCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIGNvbnRyYWN0cy9JbnRlZ3JpdHlFeGFtLnB5OjEwOC0xMTMKICAgIC8vICMgVHJhbnNmZXIgTkZUIHRvIHN0dWRlbnQKICAgIC8vIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIC8vICAgICB4ZmVyX2Fzc2V0PUFzc2V0KG5mdF9pZCksCiAgICAvLyAgICAgYXNzZXRfcmVjZWl2ZXI9c3R1ZGVudC5uYXRpdmUsCiAgICAvLyAgICAgYXNzZXRfYW1vdW50PTEsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gY29udHJhY3RzL0ludGVncml0eUV4YW0ucHk6MTIwCiAgICAvLyB0aW1lc3RhbXA9YXJjNC5VSW50NjQoR2xvYmFsLmxhdGVzdF90aW1lc3RhbXApLAogICAgZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAogICAgaXRvYgogICAgLy8gY29udHJhY3RzL0ludGVncml0eUV4YW0ucHk6MTIxCiAgICAvLyBuZnRfaWQ9YXJjNC5VSW50NjQobmZ0X2lkKSwKICAgIHN3YXAKICAgIGl0b2IKICAgIC8vIGNvbnRyYWN0cy9JbnRlZ3JpdHlFeGFtLnB5OjExNS0xMjIKICAgIC8vICMgU3RvcmUgY2VydGlmaWNhdGUgZGF0YSBvbi1jaGFpbgogICAgLy8gc2VsZi5jZXJ0aWZpY2F0ZXNbc3R1ZGVudF0gPSBDZXJ0aWZpY2F0ZURhdGEoCiAgICAvLyAgICAgc3R1ZGVudF9hZGRyZXNzPXN0dWRlbnQsCiAgICAvLyAgICAgZmluYWxfbWFya3M9YXJjNC5VSW50NjQoZmluYWxfbWFya3MpLAogICAgLy8gICAgIHRvdGFsX3F1ZXN0aW9ucz1hcmM0LlVJbnQ2NCh0b3RhbF9xKSwKICAgIC8vICAgICB0aW1lc3RhbXA9YXJjNC5VSW50NjQoR2xvYmFsLmxhdGVzdF90aW1lc3RhbXApLAogICAgLy8gICAgIG5mdF9pZD1hcmM0LlVJbnQ2NChuZnRfaWQpLAogICAgLy8gKQogICAgZGlnIDIKICAgIGRpZyA4CiAgICBjb25jYXQKICAgIGRpZyA3CiAgICBjb25jYXQKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIGNvbnRyYWN0cy9JbnRlZ3JpdHlFeGFtLnB5OjExNS0xMTYKICAgIC8vICMgU3RvcmUgY2VydGlmaWNhdGUgZGF0YSBvbi1jaGFpbgogICAgLy8gc2VsZi5jZXJ0aWZpY2F0ZXNbc3R1ZGVudF0gPSBDZXJ0aWZpY2F0ZURhdGEoCiAgICBieXRlY18zIC8vIDB4NjMKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICAvLyBjb250cmFjdHMvSW50ZWdyaXR5RXhhbS5weToxMTUtMTIyCiAgICAvLyAjIFN0b3JlIGNlcnRpZmljYXRlIGRhdGEgb24tY2hhaW4KICAgIC8vIHNlbGYuY2VydGlmaWNhdGVzW3N0dWRlbnRdID0gQ2VydGlmaWNhdGVEYXRhKAogICAgLy8gICAgIHN0dWRlbnRfYWRkcmVzcz1zdHVkZW50LAogICAgLy8gICAgIGZpbmFsX21hcmtzPWFyYzQuVUludDY0KGZpbmFsX21hcmtzKSwKICAgIC8vICAgICB0b3RhbF9xdWVzdGlvbnM9YXJjNC5VSW50NjQodG90YWxfcSksCiAgICAvLyAgICAgdGltZXN0YW1wPWFyYzQuVUludDY0KEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wKSwKICAgIC8vICAgICBuZnRfaWQ9YXJjNC5VSW50NjQobmZ0X2lkKSwKICAgIC8vICkKICAgIHN3YXAKICAgIGJveF9wdXQKICAgIC8vIGNvbnRyYWN0cy9JbnRlZ3JpdHlFeGFtLnB5OjEyNC0xMjUKICAgIC8vICMgUmV0dXJuIHN0YWtlCiAgICAvLyBpZiByZWNvcmQuc3Rha2VkX2Ftb3VudC5uYXRpdmUgPiAwOgogICAgZGlnIDEKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQ2NAogICAgZHVwCiAgICBidXJ5IDgKICAgIGJ6IGNvbXBsZXRlX2V4YW1fYWZ0ZXJfaWZfZWxzZUA4CiAgICAvLyBjb250cmFjdHMvSW50ZWdyaXR5RXhhbS5weToxMjYtMTMwCiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICAvLyAgICAgeGZlcl9hc3NldD1Bc3NldChzZWxmLmd6Y19hc2FfaWQpLAogICAgLy8gICAgIGFzc2V0X3JlY2VpdmVyPXN0dWRlbnQubmF0aXZlLAogICAgLy8gICAgIGFzc2V0X2Ftb3VudD1yZWNvcmQuc3Rha2VkX2Ftb3VudC5uYXRpdmUsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBjb250cmFjdHMvSW50ZWdyaXR5RXhhbS5weToxMjcKICAgIC8vIHhmZXJfYXNzZXQ9QXNzZXQoc2VsZi5nemNfYXNhX2lkKSwKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18wIC8vICJnemNfYXNhX2lkIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmd6Y19hc2FfaWQgZXhpc3RzCiAgICBkaWcgNwogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgZGlnIDYKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIC8vIGNvbnRyYWN0cy9JbnRlZ3JpdHlFeGFtLnB5OjEyNgogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgaW50Y18yIC8vIGF4ZmVyCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIGNvbnRyYWN0cy9JbnRlZ3JpdHlFeGFtLnB5OjEyNi0xMzAKICAgIC8vIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIC8vICAgICB4ZmVyX2Fzc2V0PUFzc2V0KHNlbGYuZ3pjX2FzYV9pZCksCiAgICAvLyAgICAgYXNzZXRfcmVjZWl2ZXI9c3R1ZGVudC5uYXRpdmUsCiAgICAvLyAgICAgYXNzZXRfYW1vdW50PXJlY29yZC5zdGFrZWRfYW1vdW50Lm5hdGl2ZSwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0Cgpjb21wbGV0ZV9leGFtX2FmdGVyX2lmX2Vsc2VAODoKICAgIC8vIGNvbnRyYWN0cy9JbnRlZ3JpdHlFeGFtLnB5OjEzMi0xMzcKICAgIC8vICMgR2l2ZSBzY2hvbGFyc2hpcCB0b2tlbnMKICAgIC8vIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIC8vICAgICB4ZmVyX2Fzc2V0PUFzc2V0KHNlbGYuZ3pjX2FzYV9pZCksCiAgICAvLyAgICAgYXNzZXRfcmVjZWl2ZXI9c3R1ZGVudC5uYXRpdmUsCiAgICAvLyAgICAgYXNzZXRfYW1vdW50PXNlbGYuc2Nob2xhcnNoaXBfYW1vdW50LAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gY29udHJhY3RzL0ludGVncml0eUV4YW0ucHk6MTM0CiAgICAvLyB4ZmVyX2Fzc2V0PUFzc2V0KHNlbGYuZ3pjX2FzYV9pZCksCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMCAvLyAiZ3pjX2FzYV9pZCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5nemNfYXNhX2lkIGV4aXN0cwogICAgLy8gY29udHJhY3RzL0ludGVncml0eUV4YW0ucHk6MTM2CiAgICAvLyBhc3NldF9hbW91bnQ9c2VsZi5zY2hvbGFyc2hpcF9hbW91bnQsCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMiAvLyAic2Nob2xhcnNoaXBfYW1vdW50IgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnNjaG9sYXJzaGlwX2Ftb3VudCBleGlzdHMKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGRpZyA2CiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICAvLyBjb250cmFjdHMvSW50ZWdyaXR5RXhhbS5weToxMzItMTMzCiAgICAvLyAjIEdpdmUgc2Nob2xhcnNoaXAgdG9rZW5zCiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICBpbnRjXzIgLy8gYXhmZXIKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gY29udHJhY3RzL0ludGVncml0eUV4YW0ucHk6MTMyLTEzNwogICAgLy8gIyBHaXZlIHNjaG9sYXJzaGlwIHRva2VucwogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgLy8gICAgIHhmZXJfYXNzZXQ9QXNzZXQoc2VsZi5nemNfYXNhX2lkKSwKICAgIC8vICAgICBhc3NldF9yZWNlaXZlcj1zdHVkZW50Lm5hdGl2ZSwKICAgIC8vICAgICBhc3NldF9hbW91bnQ9c2VsZi5zY2hvbGFyc2hpcF9hbW91bnQsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAoKY29tcGxldGVfZXhhbV9hZnRlcl9pZl9lbHNlQDEwOgogICAgLy8gY29udHJhY3RzL0ludGVncml0eUV4YW0ucHk6MTM5LTE0MAogICAgLy8gIyBJZiBmYWlsZWQgb3IgY2hlYXRlZCwga2VlcCBzdGFrZSBpbiBjb250cmFjdCAoYWxyZWFkeSBzbGFzaGVkKQogICAgLy8gZGVsIHNlbGYuc3R1ZGVudF9yZWNvcmRzW3N0dWRlbnRdCiAgICBkaWcgMgogICAgYm94X2RlbAogICAgcG9wCiAgICAvLyBjb250cmFjdHMvSW50ZWdyaXR5RXhhbS5weToxNDEKICAgIC8vIHJldHVybiBhcmM0LlVJbnQ2NChuZnRfaWQpCiAgICBkdXAKICAgIGl0b2IKICAgIC8vIGNvbnRyYWN0cy9JbnRlZ3JpdHlFeGFtLnB5Ojg2CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGJ5dGVjIDQgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBJbnRlZ3JpdHlFeGFtLkludGVncml0eUV4YW0uYWRtaW5fd2l0aGRyYXdbcm91dGluZ10oKSAtPiB2b2lkOgphZG1pbl93aXRoZHJhdzoKICAgIC8vIGNvbnRyYWN0cy9JbnRlZ3JpdHlFeGFtLnB5OjE0MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBjb250cmFjdHMvSW50ZWdyaXR5RXhhbS5weToxNDUKICAgIC8vIGFzc2VydCBUeG4uc2VuZGVyID09IEdsb2JhbC5jcmVhdG9yX2FkZHJlc3MsICJPbmx5IGNyZWF0b3IiCiAgICB0eG4gU2VuZGVyCiAgICBnbG9iYWwgQ3JlYXRvckFkZHJlc3MKICAgID09CiAgICBhc3NlcnQgLy8gT25seSBjcmVhdG9yCiAgICAvLyBjb250cmFjdHMvSW50ZWdyaXR5RXhhbS5weToxNDYtMTUwCiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICAvLyAgICAgeGZlcl9hc3NldD1Bc3NldChzZWxmLmd6Y19hc2FfaWQpLAogICAgLy8gICAgIGFzc2V0X3JlY2VpdmVyPUdsb2JhbC5jcmVhdG9yX2FkZHJlc3MsCiAgICAvLyAgICAgYXNzZXRfYW1vdW50PWFtb3VudCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIGNvbnRyYWN0cy9JbnRlZ3JpdHlFeGFtLnB5OjE0NwogICAgLy8geGZlcl9hc3NldD1Bc3NldChzZWxmLmd6Y19hc2FfaWQpLAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gImd6Y19hc2FfaWQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuZ3pjX2FzYV9pZCBleGlzdHMKICAgIC8vIGNvbnRyYWN0cy9JbnRlZ3JpdHlFeGFtLnB5OjE0OAogICAgLy8gYXNzZXRfcmVjZWl2ZXI9R2xvYmFsLmNyZWF0b3JfYWRkcmVzcywKICAgIGdsb2JhbCBDcmVhdG9yQWRkcmVzcwogICAgdW5jb3ZlciAyCiAgICBpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICAvLyBjb250cmFjdHMvSW50ZWdyaXR5RXhhbS5weToxNDYKICAgIC8vIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIGludGNfMiAvLyBheGZlcgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBjb250cmFjdHMvSW50ZWdyaXR5RXhhbS5weToxNDYtMTUwCiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICAvLyAgICAgeGZlcl9hc3NldD1Bc3NldChzZWxmLmd6Y19hc2FfaWQpLAogICAgLy8gICAgIGFzc2V0X3JlY2VpdmVyPUdsb2JhbC5jcmVhdG9yX2FkZHJlc3MsCiAgICAvLyAgICAgYXNzZXRfYW1vdW50PWFtb3VudCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICAvLyBjb250cmFjdHMvSW50ZWdyaXR5RXhhbS5weToxNDMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIEludGVncml0eUV4YW0uSW50ZWdyaXR5RXhhbS5nZXRfY2VydGlmaWNhdGVbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRfY2VydGlmaWNhdGU6CiAgICAvLyBjb250cmFjdHMvSW50ZWdyaXR5RXhhbS5weToxNTIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIHB1c2hpbnQgMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgLy8gY29udHJhY3RzL0ludGVncml0eUV4YW0ucHk6MTU1CiAgICAvLyByZXR1cm4gc2VsZi5jZXJ0aWZpY2F0ZXNbc3R1ZGVudF0uY29weSgpCiAgICBieXRlY18zIC8vIDB4NjMKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuY2VydGlmaWNhdGVzIGVudHJ5IGV4aXN0cwogICAgLy8gY29udHJhY3RzL0ludGVncml0eUV4YW0ucHk6MTUyCiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGJ5dGVjIDQgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4K", "clear": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMQogICAgcmV0dXJuCg==" }, "byteCode": { "approval": "CyAEAAEECCYFCmd6Y19hc2FfaWQBcxJzY2hvbGFyc2hpcF9hbW91bnQBYwQVH3x1MRhAABooImcqImeAD3RvdGFsX3F1ZXN0aW9uc4EKZzEZFEQxGEEAOYIHBN9U6KoEERM0GATmlF4XBG9wOlEEJiLJUgSdu0p2BK53kF82GgCOBwAlAE8AggDNAPoCIAJHAIAEoDuB0jYaAI4BAAEANhoBSRUlEkQXKExnKoGAyK+gJWcjQzYaAUkVJRJEFzEAMgkSRCIoZURLARJEsTIKIrISshSyESSyECKyAbMjQ4ABZDEAUEm9RQEURLEiKGVEMQCBgJTr3AOyErIUshEkshAisgGzgAgAAAAAAAAAAb8jQzEWIwlJOBAkEkQpMQBQvUUBFERJOBQyChJESTgRIihlRBJEOBJJRBaAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVApMQBQTL8jQzYaAUkVgSASRDEAMgkSRClMUEm+REmBEFsjCBZcEIAIAAAAAAAAAABcAL8jQ4AANhoBRwIVgSASRDYaAklOAkkVJRJEFzYaA0lOAxUlEkQxADIJEkQpTwJQSU4CvkxOAkQiTIFQD0EA3UsBgRBbQADVsTIKRwOyLLIrsiqyKYAbaHR0cHM6Ly9ncmFkemNhcC5jb20vdmVyaWZ5sieAIEdyYWRaQ2FwIFNjaG9sYXJzaGlwIENlcnRpZmljYXRlsiaABkdaQ0VSVLIlIrIkIrIjI7IigQOyECKyAbO0PElFArEjshJLBklOArIUSbIRJLIQIrIBszIHFkwWSwJLCFBLB1BPAlBMUCtPAlBMv0sBIltJRQhBABaxIihlREsHshJLBrIUshEkshAisgGzsSIoZUQiKmVEshJLBrIUshEkshAisgGzSwK8SEkWJwRMULAjQzYaAUkVJRJEFzEAMgkSRLEiKGVEMglPArISshSyESSyECKyAbMjQzYaAUkVgSASRCtMUL5EJwRMULAjQw==", "clear": "C4EBQw==" }, "compilerInfo": { "compiler": "puya", "compilerVersion": { "major": 5, "minor": 7, "patch": 1 } }, "events": [], "templateVariables": {} }