{ "name": "AgentReputation", "structs": { "AgentProfile": [ { "name": "totalScore", "type": "uint64" }, { "name": "feedbackCount", "type": "uint64" }, { "name": "registeredAt", "type": "uint64" }, { "name": "isActive", "type": "uint64" } ] }, "methods": [ { "name": "createApplication", "args": [], "returns": { "type": "void" }, "actions": { "create": [ "NoOp" ], "call": [] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "registerAgent", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "deregisterAgent", "args": [ { "type": "address", "name": "agent" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "submitFeedback", "args": [ { "type": "address", "name": "agent" }, { "type": "uint64", "name": "score" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "getReputation", "args": [ { "type": "address", "name": "agent" } ], "returns": { "type": "uint64" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "getAgentProfile", "args": [ { "type": "address", "name": "agent" } ], "returns": { "type": "(uint64,uint64,uint64,uint64)", "struct": "AgentProfile" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "getFeedbackCount", "args": [ { "type": "address", "name": "agent" } ], "returns": { "type": "uint64" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "isRegistered", "args": [ { "type": "address", "name": "agent" } ], "returns": { "type": "uint64" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "getAgentCount", "args": [], "returns": { "type": "uint64" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "getTotalFeedbacks", "args": [], "returns": { "type": "uint64" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "pause", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "unpause", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "transferAdmin", "args": [ { "type": "address", "name": "newAdmin" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "deleteApplication", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "DeleteApplication" ] }, "readonly": false, "events": [], "recommendations": {} } ], "arcs": [ 22, 28 ], "networks": {}, "state": { "schema": { "global": { "ints": 3, "bytes": 1 }, "local": { "ints": 0, "bytes": 0 } }, "keys": { "global": { "admin": { "keyType": "AVMString", "valueType": "address", "key": "YWRtaW4=" }, "agentCount": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "YWdlbnRDb3VudA==" }, "totalFeedbacks": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "dG90YWxGZWVkYmFja3M=" }, "paused": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "cGF1c2Vk" } }, "local": {}, "box": {} }, "maps": { "global": {}, "local": {}, "box": { "agents": { "keyType": "address", "valueType": "AgentProfile", "prefix": "YQ==" } } } }, "bareActions": { "create": [], "call": [] }, "sourceInfo": { "approval": { "sourceInfo": [ { "pc": [ 231 ], "errorMessage": "Agent already registered" }, { "pc": [ 369 ], "errorMessage": "Agent is inactive" }, { "pc": [ 307, 347, 416, 462, 486 ], "errorMessage": "Agent not registered" }, { "pc": [ 359 ], "errorMessage": "Cannot review yourself" }, { "pc": [ 222, 338 ], "errorMessage": "Contract is paused" }, { "pc": [ 207 ], "errorMessage": "OnCompletion must be DeleteApplication && can only call when not creating" }, { "pc": [ 87 ], "errorMessage": "OnCompletion must be NoOp" }, { "pc": [ 353 ], "errorMessage": "Score must be 0-100" }, { "pc": [ 299, 558, 571, 592, 605 ], "errorMessage": "assert target is match for conditions" }, { "pc": [ 220, 275, 297, 336, 392, 531, 543, 556, 569, 590, 603 ], "errorMessage": "check GlobalState exists" }, { "pc": [ 291, 323, 408, 454, 478, 505, 584 ], "errorMessage": "invalid number of bytes for arc4.static_array" }, { "pc": [ 331 ], "errorMessage": "invalid number of bytes for arc4.uint64" } ], "pcOffsetMethod": "none" }, "clear": { "sourceInfo": [], "pcOffsetMethod": "none" } }, "source": { "approval": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxIDMyIDgKICAgIGJ5dGVjYmxvY2sgImEiICJhZG1pbiIgMHgxNTFmN2M3NSAicGF1c2VkIiAiYWdlbnRDb3VudCIgInRvdGFsRmVlZGJhY2tzIgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMgogICAgLy8gY29udHJhY3RzL0FnZW50UmVwdXRhdGlvbi5hbGdvLnRzOjUzCiAgICAvLyBhZ2VudENvdW50ID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogVWludDY0KDApIH0pOwogICAgYnl0ZWMgNCAvLyAiYWdlbnRDb3VudCIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gY29udHJhY3RzL0FnZW50UmVwdXRhdGlvbi5hbGdvLnRzOjU0CiAgICAvLyB0b3RhbEZlZWRiYWNrcyA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IFVpbnQ2NCgwKSB9KTsKICAgIGJ5dGVjIDUgLy8gInRvdGFsRmVlZGJhY2tzIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBjb250cmFjdHMvQWdlbnRSZXB1dGF0aW9uLmFsZ28udHM6NTUKICAgIC8vIHBhdXNlZCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IFVpbnQ2NCgwKSB9KTsKICAgIGJ5dGVjXzMgLy8gInBhdXNlZCIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAoKbWFpbl9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBjb250cmFjdHMvQWdlbnRSZXB1dGF0aW9uLmFsZ28udHM6NTEKICAgIC8vIGV4cG9ydCBjbGFzcyBBZ2VudFJlcHV0YXRpb24gZXh0ZW5kcyBDb250cmFjdCB7CiAgICBwdXNoYnl0ZXMgMHgyNDg3YzMyYyAvLyBtZXRob2QgImRlbGV0ZUFwcGxpY2F0aW9uKCl2b2lkIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl9kZWxldGVBcHBsaWNhdGlvbl9yb3V0ZUA0CgptYWluX3N3aXRjaF9jYXNlX25leHRANToKICAgIC8vIGNvbnRyYWN0cy9BZ2VudFJlcHV0YXRpb24uYWxnby50czo1MQogICAgLy8gZXhwb3J0IGNsYXNzIEFnZW50UmVwdXRhdGlvbiBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gbXVzdCBiZSBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYnogbWFpbl9jcmVhdGVfTm9PcEAyMAogICAgcHVzaGJ5dGVzcyAweGYyNTY2M2FkIDB4NjY2MjI5NmYgMHgyMWYzNGM5YiAweDhkNjk4NTE3IDB4ZTQxZThmOTQgMHgwZThmNThmYSAweGQ1ZGU0ZTU3IDB4NTc1ZTU0MjggMHhiNzNkMGZhZCAweDAxNzhmOTRiIDB4MWI1MjlkZTggMHg3ZWUxYjljYyAvLyBtZXRob2QgInJlZ2lzdGVyQWdlbnQoKXZvaWQiLCBtZXRob2QgImRlcmVnaXN0ZXJBZ2VudChhZGRyZXNzKXZvaWQiLCBtZXRob2QgInN1Ym1pdEZlZWRiYWNrKGFkZHJlc3MsdWludDY0KXZvaWQiLCBtZXRob2QgImdldFJlcHV0YXRpb24oYWRkcmVzcyl1aW50NjQiLCBtZXRob2QgImdldEFnZW50UHJvZmlsZShhZGRyZXNzKSh1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQpIiwgbWV0aG9kICJnZXRGZWVkYmFja0NvdW50KGFkZHJlc3MpdWludDY0IiwgbWV0aG9kICJpc1JlZ2lzdGVyZWQoYWRkcmVzcyl1aW50NjQiLCBtZXRob2QgImdldEFnZW50Q291bnQoKXVpbnQ2NCIsIG1ldGhvZCAiZ2V0VG90YWxGZWVkYmFja3MoKXVpbnQ2NCIsIG1ldGhvZCAicGF1c2UoKXZvaWQiLCBtZXRob2QgInVucGF1c2UoKXZvaWQiLCBtZXRob2QgInRyYW5zZmVyQWRtaW4oYWRkcmVzcyl2b2lkIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggcmVnaXN0ZXJBZ2VudCBkZXJlZ2lzdGVyQWdlbnQgc3VibWl0RmVlZGJhY2sgZ2V0UmVwdXRhdGlvbiBnZXRBZ2VudFByb2ZpbGUgZ2V0RmVlZGJhY2tDb3VudCBpc1JlZ2lzdGVyZWQgZ2V0QWdlbnRDb3VudCBnZXRUb3RhbEZlZWRiYWNrcyBwYXVzZSB1bnBhdXNlIHRyYW5zZmVyQWRtaW4KICAgIGVycgoKbWFpbl9jcmVhdGVfTm9PcEAyMDoKICAgIC8vIGNvbnRyYWN0cy9BZ2VudFJlcHV0YXRpb24uYWxnby50czo1MQogICAgLy8gZXhwb3J0IGNsYXNzIEFnZW50UmVwdXRhdGlvbiBleHRlbmRzIENvbnRyYWN0IHsKICAgIHB1c2hieXRlcyAweGI4NDQ3YjM2IC8vIG1ldGhvZCAiY3JlYXRlQXBwbGljYXRpb24oKXZvaWQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBjcmVhdGVBcHBsaWNhdGlvbgogICAgZXJyCgptYWluX2RlbGV0ZUFwcGxpY2F0aW9uX3JvdXRlQDQ6CiAgICAvLyBjb250cmFjdHMvQWdlbnRSZXB1dGF0aW9uLmFsZ28udHM6MTcwCiAgICAvLyBAYWJpbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiAiRGVsZXRlQXBwbGljYXRpb24iIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBwdXNoaW50IDUgLy8gRGVsZXRlQXBwbGljYXRpb24KICAgID09CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgJiYKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gbXVzdCBiZSBEZWxldGVBcHBsaWNhdGlvbiAmJiBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBiIGRlbGV0ZUFwcGxpY2F0aW9uCgoKLy8gY29udHJhY3RzL0FnZW50UmVwdXRhdGlvbi5hbGdvLnRzOjpBZ2VudFJlcHV0YXRpb24uY3JlYXRlQXBwbGljYXRpb25bcm91dGluZ10oKSAtPiB2b2lkOgpjcmVhdGVBcHBsaWNhdGlvbjoKICAgIC8vIGNvbnRyYWN0cy9BZ2VudFJlcHV0YXRpb24uYWxnby50czo1MgogICAgLy8gYWRtaW4gPSBHbG9iYWxTdGF0ZTxBY2NvdW50PigpOwogICAgYnl0ZWNfMSAvLyAiYWRtaW4iCiAgICAvLyBjb250cmFjdHMvQWdlbnRSZXB1dGF0aW9uLmFsZ28udHM6NjEKICAgIC8vIHRoaXMuYWRtaW4udmFsdWUgPSBUeG4uc2VuZGVyOwogICAgdHhuIFNlbmRlcgogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIGNvbnRyYWN0cy9BZ2VudFJlcHV0YXRpb24uYWxnby50czo1OQogICAgLy8gQGFiaW1ldGhvZCh7IGFsbG93QWN0aW9uczogIk5vT3AiLCBvbkNyZWF0ZTogInJlcXVpcmUiIH0pCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gY29udHJhY3RzL0FnZW50UmVwdXRhdGlvbi5hbGdvLnRzOjpBZ2VudFJlcHV0YXRpb24ucmVnaXN0ZXJBZ2VudFtyb3V0aW5nXSgpIC0+IHZvaWQ6CnJlZ2lzdGVyQWdlbnQ6CiAgICAvLyBjb250cmFjdHMvQWdlbnRSZXB1dGF0aW9uLmFsZ28udHM6NjcKICAgIC8vIGFzc2VydCh0aGlzLnBhdXNlZC52YWx1ZSA9PT0gVWludDY0KDApLCAiQ29udHJhY3QgaXMgcGF1c2VkIik7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gY29udHJhY3RzL0FnZW50UmVwdXRhdGlvbi5hbGdvLnRzOjU1CiAgICAvLyBwYXVzZWQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoMCkgfSk7CiAgICBieXRlY18zIC8vICJwYXVzZWQiCiAgICAvLyBjb250cmFjdHMvQWdlbnRSZXB1dGF0aW9uLmFsZ28udHM6NjcKICAgIC8vIGFzc2VydCh0aGlzLnBhdXNlZC52YWx1ZSA9PT0gVWludDY0KDApLCAiQ29udHJhY3QgaXMgcGF1c2VkIik7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgIQogICAgYXNzZXJ0IC8vIENvbnRyYWN0IGlzIHBhdXNlZAogICAgLy8gY29udHJhY3RzL0FnZW50UmVwdXRhdGlvbi5hbGdvLnRzOjU3CiAgICAvLyBhZ2VudHMgPSBCb3hNYXA8QWNjb3VudCwgQWdlbnRQcm9maWxlPih7IGtleVByZWZpeDogImEiIH0pOwogICAgYnl0ZWNfMCAvLyAiYSIKICAgIC8vIGNvbnRyYWN0cy9BZ2VudFJlcHV0YXRpb24uYWxnby50czo2OAogICAgLy8gYXNzZXJ0KCF0aGlzLmFnZW50cyhUeG4uc2VuZGVyKS5leGlzdHMsICJBZ2VudCBhbHJlYWR5IHJlZ2lzdGVyZWQiKTsKICAgIHR4biBTZW5kZXIKICAgIC8vIGNvbnRyYWN0cy9BZ2VudFJlcHV0YXRpb24uYWxnby50czo1NwogICAgLy8gYWdlbnRzID0gQm94TWFwPEFjY291bnQsIEFnZW50UHJvZmlsZT4oeyBrZXlQcmVmaXg6ICJhIiB9KTsKICAgIGNvbmNhdAogICAgLy8gY29udHJhY3RzL0FnZW50UmVwdXRhdGlvbi5hbGdvLnRzOjY4CiAgICAvLyBhc3NlcnQoIXRoaXMuYWdlbnRzKFR4bi5zZW5kZXIpLmV4aXN0cywgIkFnZW50IGFscmVhZHkgcmVnaXN0ZXJlZCIpOwogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICAhCiAgICBhc3NlcnQgLy8gQWdlbnQgYWxyZWFkeSByZWdpc3RlcmVkCiAgICAvLyBjb250cmFjdHMvQWdlbnRSZXB1dGF0aW9uLmFsZ28udHM6NTcKICAgIC8vIGFnZW50cyA9IEJveE1hcDxBY2NvdW50LCBBZ2VudFByb2ZpbGU+KHsga2V5UHJlZml4OiAiYSIgfSk7CiAgICBieXRlY18wIC8vICJhIgogICAgLy8gY29udHJhY3RzL0FnZW50UmVwdXRhdGlvbi5hbGdvLnRzOjc2CiAgICAvLyB0aGlzLmFnZW50cyhUeG4uc2VuZGVyKS52YWx1ZSA9IGNsb25lKHByb2ZpbGUpOwogICAgdHhuIFNlbmRlcgogICAgLy8gY29udHJhY3RzL0FnZW50UmVwdXRhdGlvbi5hbGdvLnRzOjU3CiAgICAvLyBhZ2VudHMgPSBCb3hNYXA8QWNjb3VudCwgQWdlbnRQcm9maWxlPih7IGtleVByZWZpeDogImEiIH0pOwogICAgY29uY2F0CiAgICAvLyBjb250cmFjdHMvQWdlbnRSZXB1dGF0aW9uLmFsZ28udHM6NzAtNzUKICAgIC8vIGNvbnN0IHByb2ZpbGU6IEFnZW50UHJvZmlsZSA9IHsKICAgIC8vICAgdG90YWxTY29yZTogVWludDY0KDApLAogICAgLy8gICBmZWVkYmFja0NvdW50OiBVaW50NjQoMCksCiAgICAvLyAgIHJlZ2lzdGVyZWRBdDogVWludDY0KDApLAogICAgLy8gICBpc0FjdGl2ZTogVWludDY0KDEpLAogICAgLy8gfTsKICAgIHB1c2hieXRlcyAweDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEKICAgIC8vIGNvbnRyYWN0cy9BZ2VudFJlcHV0YXRpb24uYWxnby50czo3NgogICAgLy8gdGhpcy5hZ2VudHMoVHhuLnNlbmRlcikudmFsdWUgPSBjbG9uZShwcm9maWxlKTsKICAgIGJveF9wdXQKICAgIC8vIGNvbnRyYWN0cy9BZ2VudFJlcHV0YXRpb24uYWxnby50czo3NwogICAgLy8gdGhpcy5hZ2VudENvdW50LnZhbHVlID0gdGhpcy5hZ2VudENvdW50LnZhbHVlICsgVWludDY0KDEpOwogICAgaW50Y18wIC8vIDAKICAgIC8vIGNvbnRyYWN0cy9BZ2VudFJlcHV0YXRpb24uYWxnby50czo1MwogICAgLy8gYWdlbnRDb3VudCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IFVpbnQ2NCgwKSB9KTsKICAgIGJ5dGVjIDQgLy8gImFnZW50Q291bnQiCiAgICAvLyBjb250cmFjdHMvQWdlbnRSZXB1dGF0aW9uLmFsZ28udHM6NzcKICAgIC8vIHRoaXMuYWdlbnRDb3VudC52YWx1ZSA9IHRoaXMuYWdlbnRDb3VudC52YWx1ZSArIFVpbnQ2NCgxKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgLy8gY29udHJhY3RzL0FnZW50UmVwdXRhdGlvbi5hbGdvLnRzOjUzCiAgICAvLyBhZ2VudENvdW50ID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogVWludDY0KDApIH0pOwogICAgYnl0ZWMgNCAvLyAiYWdlbnRDb3VudCIKICAgIC8vIGNvbnRyYWN0cy9BZ2VudFJlcHV0YXRpb24uYWxnby50czo3NwogICAgLy8gdGhpcy5hZ2VudENvdW50LnZhbHVlID0gdGhpcy5hZ2VudENvdW50LnZhbHVlICsgVWludDY0KDEpOwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIGNvbnRyYWN0cy9BZ2VudFJlcHV0YXRpb24uYWxnby50czo2NgogICAgLy8gcHVibGljIHJlZ2lzdGVyQWdlbnQoKTogdm9pZCB7CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gY29udHJhY3RzL0FnZW50UmVwdXRhdGlvbi5hbGdvLnRzOjpBZ2VudFJlcHV0YXRpb24uZGVyZWdpc3RlckFnZW50W3JvdXRpbmddKCkgLT4gdm9pZDoKZGVyZWdpc3RlckFnZW50OgogICAgLy8gY29udHJhY3RzL0FnZW50UmVwdXRhdGlvbi5hbGdvLnRzOjgwCiAgICAvLyBwdWJsaWMgZGVyZWdpc3RlckFnZW50KGFnZW50OiBBY2NvdW50KTogdm9pZCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIC8vIGNvbnRyYWN0cy9BZ2VudFJlcHV0YXRpb24uYWxnby50czo4MQogICAgLy8gYXNzZXJ0TWF0Y2goVHhuLCB7IHNlbmRlcjogdGhpcy5hZG1pbi52YWx1ZSB9KTsKICAgIHR4biBTZW5kZXIKICAgIGludGNfMCAvLyAwCiAgICAvLyBjb250cmFjdHMvQWdlbnRSZXB1dGF0aW9uLmFsZ28udHM6NTIKICAgIC8vIGFkbWluID0gR2xvYmFsU3RhdGU8QWNjb3VudD4oKTsKICAgIGJ5dGVjXzEgLy8gImFkbWluIgogICAgLy8gY29udHJhY3RzL0FnZW50UmVwdXRhdGlvbi5hbGdvLnRzOjgxCiAgICAvLyBhc3NlcnRNYXRjaChUeG4sIHsgc2VuZGVyOiB0aGlzLmFkbWluLnZhbHVlIH0pOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgID09CiAgICBhc3NlcnQgLy8gYXNzZXJ0IHRhcmdldCBpcyBtYXRjaCBmb3IgY29uZGl0aW9ucwogICAgLy8gY29udHJhY3RzL0FnZW50UmVwdXRhdGlvbi5hbGdvLnRzOjU3CiAgICAvLyBhZ2VudHMgPSBCb3hNYXA8QWNjb3VudCwgQWdlbnRQcm9maWxlPih7IGtleVByZWZpeDogImEiIH0pOwogICAgYnl0ZWNfMCAvLyAiYSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gY29udHJhY3RzL0FnZW50UmVwdXRhdGlvbi5hbGdvLnRzOjgyCiAgICAvLyBhc3NlcnQodGhpcy5hZ2VudHMoYWdlbnQpLmV4aXN0cywgIkFnZW50IG5vdCByZWdpc3RlcmVkIik7CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIEFnZW50IG5vdCByZWdpc3RlcmVkCiAgICAvLyBjb250cmFjdHMvQWdlbnRSZXB1dGF0aW9uLmFsZ28udHM6ODYKICAgIC8vIHVwZGF0ZWQuaXNBY3RpdmUgPSBVaW50NjQoMCk7CiAgICBpbnRjXzAgLy8gMAogICAgaXRvYgogICAgLy8gY29udHJhY3RzL0FnZW50UmVwdXRhdGlvbi5hbGdvLnRzOjg2LTg3CiAgICAvLyB1cGRhdGVkLmlzQWN0aXZlID0gVWludDY0KDApOwogICAgLy8gdGhpcy5hZ2VudHMoYWdlbnQpLnZhbHVlID0gY2xvbmUodXBkYXRlZCk7CiAgICBwdXNoaW50IDI0IC8vIDI0CiAgICBzd2FwCiAgICBib3hfcmVwbGFjZQogICAgLy8gY29udHJhY3RzL0FnZW50UmVwdXRhdGlvbi5hbGdvLnRzOjgwCiAgICAvLyBwdWJsaWMgZGVyZWdpc3RlckFnZW50KGFnZW50OiBBY2NvdW50KTogdm9pZCB7CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gY29udHJhY3RzL0FnZW50UmVwdXRhdGlvbi5hbGdvLnRzOjpBZ2VudFJlcHV0YXRpb24uc3VibWl0RmVlZGJhY2tbcm91dGluZ10oKSAtPiB2b2lkOgpzdWJtaXRGZWVkYmFjazoKICAgIC8vIGNvbnRyYWN0cy9BZ2VudFJlcHV0YXRpb24uYWxnby50czo5MgogICAgLy8gcHVibGljIHN1Ym1pdEZlZWRiYWNrKGFnZW50OiBBY2NvdW50LCBzY29yZTogdWludDY0KTogdm9pZCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIC8vIGNvbnRyYWN0cy9BZ2VudFJlcHV0YXRpb24uYWxnby50czo5MwogICAgLy8gYXNzZXJ0KHRoaXMucGF1c2VkLnZhbHVlID09PSBVaW50NjQoMCksICJDb250cmFjdCBpcyBwYXVzZWQiKTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBjb250cmFjdHMvQWdlbnRSZXB1dGF0aW9uLmFsZ28udHM6NTUKICAgIC8vIHBhdXNlZCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IFVpbnQ2NCgwKSB9KTsKICAgIGJ5dGVjXzMgLy8gInBhdXNlZCIKICAgIC8vIGNvbnRyYWN0cy9BZ2VudFJlcHV0YXRpb24uYWxnby50czo5MwogICAgLy8gYXNzZXJ0KHRoaXMucGF1c2VkLnZhbHVlID09PSBVaW50NjQoMCksICJDb250cmFjdCBpcyBwYXVzZWQiKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAhCiAgICBhc3NlcnQgLy8gQ29udHJhY3QgaXMgcGF1c2VkCiAgICAvLyBjb250cmFjdHMvQWdlbnRSZXB1dGF0aW9uLmFsZ28udHM6NTcKICAgIC8vIGFnZW50cyA9IEJveE1hcDxBY2NvdW50LCBBZ2VudFByb2ZpbGU+KHsga2V5UHJlZml4OiAiYSIgfSk7CiAgICBieXRlY18wIC8vICJhIgogICAgZGlnIDIKICAgIGNvbmNhdAogICAgLy8gY29udHJhY3RzL0FnZW50UmVwdXRhdGlvbi5hbGdvLnRzOjk0CiAgICAvLyBhc3NlcnQodGhpcy5hZ2VudHMoYWdlbnQpLmV4aXN0cywgIkFnZW50IG5vdCByZWdpc3RlcmVkIik7CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIEFnZW50IG5vdCByZWdpc3RlcmVkCiAgICAvLyBjb250cmFjdHMvQWdlbnRSZXB1dGF0aW9uLmFsZ28udHM6OTUKICAgIC8vIGFzc2VydChzY29yZSA8PSBNQVhfU0NPUkUsICJTY29yZSBtdXN0IGJlIDAtMTAwIik7CiAgICBkaWcgMQogICAgcHVzaGludCAxMDAgLy8gMTAwCiAgICA8PQogICAgYXNzZXJ0IC8vIFNjb3JlIG11c3QgYmUgMC0xMDAKICAgIC8vIGNvbnRyYWN0cy9BZ2VudFJlcHV0YXRpb24uYWxnby50czo5NwogICAgLy8gYXNzZXJ0KFR4bi5zZW5kZXIgIT09IGFnZW50LCAiQ2Fubm90IHJldmlldyB5b3Vyc2VsZiIpOwogICAgdHhuIFNlbmRlcgogICAgdW5jb3ZlciAzCiAgICAhPQogICAgYXNzZXJ0IC8vIENhbm5vdCByZXZpZXcgeW91cnNlbGYKICAgIC8vIGNvbnRyYWN0cy9BZ2VudFJlcHV0YXRpb24uYWxnby50czo5OQogICAgLy8gY29uc3QgcHJvZmlsZSA9IGNsb25lKHRoaXMuYWdlbnRzKGFnZW50KS52YWx1ZSk7CiAgICBkdXAKICAgIGJveF9nZXQKICAgIHBvcAogICAgLy8gY29udHJhY3RzL0FnZW50UmVwdXRhdGlvbi5hbGdvLnRzOjEwMAogICAgLy8gYXNzZXJ0KHByb2ZpbGUuaXNBY3RpdmUgPT09IFVpbnQ2NCgxKSwgIkFnZW50IGlzIGluYWN0aXZlIik7CiAgICBkdXAKICAgIHB1c2hpbnQgMjQgLy8gMjQKICAgIGV4dHJhY3RfdWludDY0CiAgICBpbnRjXzEgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBBZ2VudCBpcyBpbmFjdGl2ZQogICAgLy8gY29udHJhY3RzL0FnZW50UmVwdXRhdGlvbi5hbGdvLnRzOjEwMwogICAgLy8gdXBkYXRlZC50b3RhbFNjb3JlID0gdXBkYXRlZC50b3RhbFNjb3JlICsgc2NvcmU7CiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQ2NAogICAgdW5jb3ZlciAzCiAgICArCiAgICBpdG9iCiAgICByZXBsYWNlMiAwCiAgICAvLyBjb250cmFjdHMvQWdlbnRSZXB1dGF0aW9uLmFsZ28udHM6MTA0CiAgICAvLyB1cGRhdGVkLmZlZWRiYWNrQ291bnQgPSB1cGRhdGVkLmZlZWRiYWNrQ291bnQgKyBVaW50NjQoMSk7CiAgICBkdXAKICAgIGludGNfMyAvLyA4CiAgICBleHRyYWN0X3VpbnQ2NAogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGl0b2IKICAgIHJlcGxhY2UyIDgKICAgIC8vIGNvbnRyYWN0cy9BZ2VudFJlcHV0YXRpb24uYWxnby50czoxMDUKICAgIC8vIHRoaXMuYWdlbnRzKGFnZW50KS52YWx1ZSA9IGNsb25lKHVwZGF0ZWQpOwogICAgYm94X3B1dAogICAgLy8gY29udHJhY3RzL0FnZW50UmVwdXRhdGlvbi5hbGdvLnRzOjEwNwogICAgLy8gdGhpcy50b3RhbEZlZWRiYWNrcy52YWx1ZSA9IHRoaXMudG90YWxGZWVkYmFja3MudmFsdWUgKyBVaW50NjQoMSk7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gY29udHJhY3RzL0FnZW50UmVwdXRhdGlvbi5hbGdvLnRzOjU0CiAgICAvLyB0b3RhbEZlZWRiYWNrcyA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IFVpbnQ2NCgwKSB9KTsKICAgIGJ5dGVjIDUgLy8gInRvdGFsRmVlZGJhY2tzIgogICAgLy8gY29udHJhY3RzL0FnZW50UmVwdXRhdGlvbi5hbGdvLnRzOjEwNwogICAgLy8gdGhpcy50b3RhbEZlZWRiYWNrcy52YWx1ZSA9IHRoaXMudG90YWxGZWVkYmFja3MudmFsdWUgKyBVaW50NjQoMSk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgaW50Y18xIC8vIDEKICAgICsKICAgIC8vIGNvbnRyYWN0cy9BZ2VudFJlcHV0YXRpb24uYWxnby50czo1NAogICAgLy8gdG90YWxGZWVkYmFja3MgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoMCkgfSk7CiAgICBieXRlYyA1IC8vICJ0b3RhbEZlZWRiYWNrcyIKICAgIC8vIGNvbnRyYWN0cy9BZ2VudFJlcHV0YXRpb24uYWxnby50czoxMDcKICAgIC8vIHRoaXMudG90YWxGZWVkYmFja3MudmFsdWUgPSB0aGlzLnRvdGFsRmVlZGJhY2tzLnZhbHVlICsgVWludDY0KDEpOwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIGNvbnRyYWN0cy9BZ2VudFJlcHV0YXRpb24uYWxnby50czo5MgogICAgLy8gcHVibGljIHN1Ym1pdEZlZWRiYWNrKGFnZW50OiBBY2NvdW50LCBzY29yZTogdWludDY0KTogdm9pZCB7CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gY29udHJhY3RzL0FnZW50UmVwdXRhdGlvbi5hbGdvLnRzOjpBZ2VudFJlcHV0YXRpb24uZ2V0UmVwdXRhdGlvbltyb3V0aW5nXSgpIC0+IHZvaWQ6CmdldFJlcHV0YXRpb246CiAgICAvLyBjb250cmFjdHMvQWdlbnRSZXB1dGF0aW9uLmFsZ28udHM6MTEyCiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgLy8gY29udHJhY3RzL0FnZW50UmVwdXRhdGlvbi5hbGdvLnRzOjU3CiAgICAvLyBhZ2VudHMgPSBCb3hNYXA8QWNjb3VudCwgQWdlbnRQcm9maWxlPih7IGtleVByZWZpeDogImEiIH0pOwogICAgYnl0ZWNfMCAvLyAiYSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gY29udHJhY3RzL0FnZW50UmVwdXRhdGlvbi5hbGdvLnRzOjExNAogICAgLy8gYXNzZXJ0KHRoaXMuYWdlbnRzKGFnZW50KS5leGlzdHMsICJBZ2VudCBub3QgcmVnaXN0ZXJlZCIpOwogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBBZ2VudCBub3QgcmVnaXN0ZXJlZAogICAgLy8gY29udHJhY3RzL0FnZW50UmVwdXRhdGlvbi5hbGdvLnRzOjExNQogICAgLy8gY29uc3QgcHJvZmlsZSA9IGNsb25lKHRoaXMuYWdlbnRzKGFnZW50KS52YWx1ZSk7CiAgICBib3hfZ2V0CiAgICBwb3AKICAgIGR1cAogICAgLy8gY29udHJhY3RzL0FnZW50UmVwdXRhdGlvbi5hbGdvLnRzOjExNgogICAgLy8gaWYgKHByb2ZpbGUuZmVlZGJhY2tDb3VudCA9PT0gVWludDY0KDApKSB7CiAgICBpbnRjXzMgLy8gOAogICAgZXh0cmFjdF91aW50NjQKICAgIGR1cAogICAgYm56IGdldFJlcHV0YXRpb25fYWZ0ZXJfaWZfZWxzZUAzCiAgICAvLyBjb250cmFjdHMvQWdlbnRSZXB1dGF0aW9uLmFsZ28udHM6MTE3CiAgICAvLyByZXR1cm4gVWludDY0KDApOwogICAgaW50Y18wIC8vIDAKCmdldFJlcHV0YXRpb25fYWZ0ZXJfaW5saW5lZF9jb250cmFjdHMvQWdlbnRSZXB1dGF0aW9uLmFsZ28udHM6OkFnZW50UmVwdXRhdGlvbi5nZXRSZXB1dGF0aW9uQDQ6CiAgICAvLyBjb250cmFjdHMvQWdlbnRSZXB1dGF0aW9uLmFsZ28udHM6MTEyCiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIGl0b2IKICAgIGJ5dGVjXzIgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCmdldFJlcHV0YXRpb25fYWZ0ZXJfaWZfZWxzZUAzOgogICAgLy8gY29udHJhY3RzL0FnZW50UmVwdXRhdGlvbi5hbGdvLnRzOjExOQogICAgLy8gY29uc3QgcmVwdXRhdGlvbjogdWludDY0ID0gKHByb2ZpbGUudG90YWxTY29yZSAqIFNDQUxFKSAvIHByb2ZpbGUuZmVlZGJhY2tDb3VudDsKICAgIGRpZyAxCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50NjQKICAgIHB1c2hpbnQgMTAwIC8vIDEwMAogICAgKgogICAgZGlnIDEKICAgIC8KICAgIC8vIGNvbnRyYWN0cy9BZ2VudFJlcHV0YXRpb24uYWxnby50czoxMTIKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgYiBnZXRSZXB1dGF0aW9uX2FmdGVyX2lubGluZWRfY29udHJhY3RzL0FnZW50UmVwdXRhdGlvbi5hbGdvLnRzOjpBZ2VudFJlcHV0YXRpb24uZ2V0UmVwdXRhdGlvbkA0CgoKLy8gY29udHJhY3RzL0FnZW50UmVwdXRhdGlvbi5hbGdvLnRzOjpBZ2VudFJlcHV0YXRpb24uZ2V0QWdlbnRQcm9maWxlW3JvdXRpbmddKCkgLT4gdm9pZDoKZ2V0QWdlbnRQcm9maWxlOgogICAgLy8gY29udHJhY3RzL0FnZW50UmVwdXRhdGlvbi5hbGdvLnRzOjEyMwogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIC8vIGNvbnRyYWN0cy9BZ2VudFJlcHV0YXRpb24uYWxnby50czo1NwogICAgLy8gYWdlbnRzID0gQm94TWFwPEFjY291bnQsIEFnZW50UHJvZmlsZT4oeyBrZXlQcmVmaXg6ICJhIiB9KTsKICAgIGJ5dGVjXzAgLy8gImEiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIGNvbnRyYWN0cy9BZ2VudFJlcHV0YXRpb24uYWxnby50czoxMjUKICAgIC8vIGFzc2VydCh0aGlzLmFnZW50cyhhZ2VudCkuZXhpc3RzLCAiQWdlbnQgbm90IHJlZ2lzdGVyZWQiKTsKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gQWdlbnQgbm90IHJlZ2lzdGVyZWQKICAgIC8vIGNvbnRyYWN0cy9BZ2VudFJlcHV0YXRpb24uYWxnby50czoxMjYKICAgIC8vIHJldHVybiBjbG9uZSh0aGlzLmFnZW50cyhhZ2VudCkudmFsdWUpOwogICAgYm94X2dldAogICAgcG9wCiAgICAvLyBjb250cmFjdHMvQWdlbnRSZXB1dGF0aW9uLmFsZ28udHM6MTIzCiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIGJ5dGVjXzIgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBjb250cmFjdHMvQWdlbnRSZXB1dGF0aW9uLmFsZ28udHM6OkFnZW50UmVwdXRhdGlvbi5nZXRGZWVkYmFja0NvdW50W3JvdXRpbmddKCkgLT4gdm9pZDoKZ2V0RmVlZGJhY2tDb3VudDoKICAgIC8vIGNvbnRyYWN0cy9BZ2VudFJlcHV0YXRpb24uYWxnby50czoxMjkKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICAvLyBjb250cmFjdHMvQWdlbnRSZXB1dGF0aW9uLmFsZ28udHM6NTcKICAgIC8vIGFnZW50cyA9IEJveE1hcDxBY2NvdW50LCBBZ2VudFByb2ZpbGU+KHsga2V5UHJlZml4OiAiYSIgfSk7CiAgICBieXRlY18wIC8vICJhIgogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBjb250cmFjdHMvQWdlbnRSZXB1dGF0aW9uLmFsZ28udHM6MTMxCiAgICAvLyBhc3NlcnQodGhpcy5hZ2VudHMoYWdlbnQpLmV4aXN0cywgIkFnZW50IG5vdCByZWdpc3RlcmVkIik7CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIEFnZW50IG5vdCByZWdpc3RlcmVkCiAgICAvLyBjb250cmFjdHMvQWdlbnRSZXB1dGF0aW9uLmFsZ28udHM6MTMyCiAgICAvLyByZXR1cm4gY2xvbmUodGhpcy5hZ2VudHMoYWdlbnQpLnZhbHVlKS5mZWVkYmFja0NvdW50OwogICAgYm94X2dldAogICAgcG9wCiAgICBleHRyYWN0IDggOAogICAgLy8gY29udHJhY3RzL0FnZW50UmVwdXRhdGlvbi5hbGdvLnRzOjEyOQogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICBieXRlY18yIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gY29udHJhY3RzL0FnZW50UmVwdXRhdGlvbi5hbGdvLnRzOjpBZ2VudFJlcHV0YXRpb24uaXNSZWdpc3RlcmVkW3JvdXRpbmddKCkgLT4gdm9pZDoKaXNSZWdpc3RlcmVkOgogICAgLy8gY29udHJhY3RzL0FnZW50UmVwdXRhdGlvbi5hbGdvLnRzOjEzNQogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIC8vIGNvbnRyYWN0cy9BZ2VudFJlcHV0YXRpb24uYWxnby50czo1NwogICAgLy8gYWdlbnRzID0gQm94TWFwPEFjY291bnQsIEFnZW50UHJvZmlsZT4oeyBrZXlQcmVmaXg6ICJhIiB9KTsKICAgIGJ5dGVjXzAgLy8gImEiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIGNvbnRyYWN0cy9BZ2VudFJlcHV0YXRpb24uYWxnby50czoxMzcKICAgIC8vIGlmICh0aGlzLmFnZW50cyhhZ2VudCkuZXhpc3RzKSB7CiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGJ6IGlzUmVnaXN0ZXJlZF9hZnRlcl9pZl9lbHNlQDMKICAgIC8vIGNvbnRyYWN0cy9BZ2VudFJlcHV0YXRpb24uYWxnby50czoxMzgKICAgIC8vIHJldHVybiBVaW50NjQoMSk7CiAgICBpbnRjXzEgLy8gMQoKaXNSZWdpc3RlcmVkX2FmdGVyX2lubGluZWRfY29udHJhY3RzL0FnZW50UmVwdXRhdGlvbi5hbGdvLnRzOjpBZ2VudFJlcHV0YXRpb24uaXNSZWdpc3RlcmVkQDQ6CiAgICAvLyBjb250cmFjdHMvQWdlbnRSZXB1dGF0aW9uLmFsZ28udHM6MTM1CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIGl0b2IKICAgIGJ5dGVjXzIgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCmlzUmVnaXN0ZXJlZF9hZnRlcl9pZl9lbHNlQDM6CiAgICAvLyBjb250cmFjdHMvQWdlbnRSZXB1dGF0aW9uLmFsZ28udHM6MTQwCiAgICAvLyByZXR1cm4gVWludDY0KDApOwogICAgaW50Y18wIC8vIDAKICAgIC8vIGNvbnRyYWN0cy9BZ2VudFJlcHV0YXRpb24uYWxnby50czoxMzUKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgYiBpc1JlZ2lzdGVyZWRfYWZ0ZXJfaW5saW5lZF9jb250cmFjdHMvQWdlbnRSZXB1dGF0aW9uLmFsZ28udHM6OkFnZW50UmVwdXRhdGlvbi5pc1JlZ2lzdGVyZWRANAoKCi8vIGNvbnRyYWN0cy9BZ2VudFJlcHV0YXRpb24uYWxnby50czo6QWdlbnRSZXB1dGF0aW9uLmdldEFnZW50Q291bnRbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRBZ2VudENvdW50OgogICAgLy8gY29udHJhY3RzL0FnZW50UmVwdXRhdGlvbi5hbGdvLnRzOjE0NQogICAgLy8gcmV0dXJuIHRoaXMuYWdlbnRDb3VudC52YWx1ZTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBjb250cmFjdHMvQWdlbnRSZXB1dGF0aW9uLmFsZ28udHM6NTMKICAgIC8vIGFnZW50Q291bnQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoMCkgfSk7CiAgICBieXRlYyA0IC8vICJhZ2VudENvdW50IgogICAgLy8gY29udHJhY3RzL0FnZW50UmVwdXRhdGlvbi5hbGdvLnRzOjE0NQogICAgLy8gcmV0dXJuIHRoaXMuYWdlbnRDb3VudC52YWx1ZTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBjb250cmFjdHMvQWdlbnRSZXB1dGF0aW9uLmFsZ28udHM6MTQzCiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIGl0b2IKICAgIGJ5dGVjXzIgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBjb250cmFjdHMvQWdlbnRSZXB1dGF0aW9uLmFsZ28udHM6OkFnZW50UmVwdXRhdGlvbi5nZXRUb3RhbEZlZWRiYWNrc1tyb3V0aW5nXSgpIC0+IHZvaWQ6CmdldFRvdGFsRmVlZGJhY2tzOgogICAgLy8gY29udHJhY3RzL0FnZW50UmVwdXRhdGlvbi5hbGdvLnRzOjE1MAogICAgLy8gcmV0dXJuIHRoaXMudG90YWxGZWVkYmFja3MudmFsdWU7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gY29udHJhY3RzL0FnZW50UmVwdXRhdGlvbi5hbGdvLnRzOjU0CiAgICAvLyB0b3RhbEZlZWRiYWNrcyA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IFVpbnQ2NCgwKSB9KTsKICAgIGJ5dGVjIDUgLy8gInRvdGFsRmVlZGJhY2tzIgogICAgLy8gY29udHJhY3RzL0FnZW50UmVwdXRhdGlvbi5hbGdvLnRzOjE1MAogICAgLy8gcmV0dXJuIHRoaXMudG90YWxGZWVkYmFja3MudmFsdWU7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gY29udHJhY3RzL0FnZW50UmVwdXRhdGlvbi5hbGdvLnRzOjE0OAogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICBpdG9iCiAgICBieXRlY18yIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gY29udHJhY3RzL0FnZW50UmVwdXRhdGlvbi5hbGdvLnRzOjpBZ2VudFJlcHV0YXRpb24ucGF1c2Vbcm91dGluZ10oKSAtPiB2b2lkOgpwYXVzZToKICAgIC8vIGNvbnRyYWN0cy9BZ2VudFJlcHV0YXRpb24uYWxnby50czoxNTYKICAgIC8vIGFzc2VydE1hdGNoKFR4biwgeyBzZW5kZXI6IHRoaXMuYWRtaW4udmFsdWUgfSk7CiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgLy8gY29udHJhY3RzL0FnZW50UmVwdXRhdGlvbi5hbGdvLnRzOjUyCiAgICAvLyBhZG1pbiA9IEdsb2JhbFN0YXRlPEFjY291bnQ+KCk7CiAgICBieXRlY18xIC8vICJhZG1pbiIKICAgIC8vIGNvbnRyYWN0cy9BZ2VudFJlcHV0YXRpb24uYWxnby50czoxNTYKICAgIC8vIGFzc2VydE1hdGNoKFR4biwgeyBzZW5kZXI6IHRoaXMuYWRtaW4udmFsdWUgfSk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgPT0KICAgIGFzc2VydCAvLyBhc3NlcnQgdGFyZ2V0IGlzIG1hdGNoIGZvciBjb25kaXRpb25zCiAgICAvLyBjb250cmFjdHMvQWdlbnRSZXB1dGF0aW9uLmFsZ28udHM6NTUKICAgIC8vIHBhdXNlZCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IFVpbnQ2NCgwKSB9KTsKICAgIGJ5dGVjXzMgLy8gInBhdXNlZCIKICAgIC8vIGNvbnRyYWN0cy9BZ2VudFJlcHV0YXRpb24uYWxnby50czoxNTcKICAgIC8vIHRoaXMucGF1c2VkLnZhbHVlID0gVWludDY0KDEpOwogICAgaW50Y18xIC8vIDEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBjb250cmFjdHMvQWdlbnRSZXB1dGF0aW9uLmFsZ28udHM6MTU1CiAgICAvLyBwdWJsaWMgcGF1c2UoKTogdm9pZCB7CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gY29udHJhY3RzL0FnZW50UmVwdXRhdGlvbi5hbGdvLnRzOjpBZ2VudFJlcHV0YXRpb24udW5wYXVzZVtyb3V0aW5nXSgpIC0+IHZvaWQ6CnVucGF1c2U6CiAgICAvLyBjb250cmFjdHMvQWdlbnRSZXB1dGF0aW9uLmFsZ28udHM6MTYxCiAgICAvLyBhc3NlcnRNYXRjaChUeG4sIHsgc2VuZGVyOiB0aGlzLmFkbWluLnZhbHVlIH0pOwogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIC8vIGNvbnRyYWN0cy9BZ2VudFJlcHV0YXRpb24uYWxnby50czo1MgogICAgLy8gYWRtaW4gPSBHbG9iYWxTdGF0ZTxBY2NvdW50PigpOwogICAgYnl0ZWNfMSAvLyAiYWRtaW4iCiAgICAvLyBjb250cmFjdHMvQWdlbnRSZXB1dGF0aW9uLmFsZ28udHM6MTYxCiAgICAvLyBhc3NlcnRNYXRjaChUeG4sIHsgc2VuZGVyOiB0aGlzLmFkbWluLnZhbHVlIH0pOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgID09CiAgICBhc3NlcnQgLy8gYXNzZXJ0IHRhcmdldCBpcyBtYXRjaCBmb3IgY29uZGl0aW9ucwogICAgLy8gY29udHJhY3RzL0FnZW50UmVwdXRhdGlvbi5hbGdvLnRzOjU1CiAgICAvLyBwYXVzZWQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoMCkgfSk7CiAgICBieXRlY18zIC8vICJwYXVzZWQiCiAgICAvLyBjb250cmFjdHMvQWdlbnRSZXB1dGF0aW9uLmFsZ28udHM6MTYyCiAgICAvLyB0aGlzLnBhdXNlZC52YWx1ZSA9IFVpbnQ2NCgwKTsKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gY29udHJhY3RzL0FnZW50UmVwdXRhdGlvbi5hbGdvLnRzOjE2MAogICAgLy8gcHVibGljIHVucGF1c2UoKTogdm9pZCB7CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gY29udHJhY3RzL0FnZW50UmVwdXRhdGlvbi5hbGdvLnRzOjpBZ2VudFJlcHV0YXRpb24udHJhbnNmZXJBZG1pbltyb3V0aW5nXSgpIC0+IHZvaWQ6CnRyYW5zZmVyQWRtaW46CiAgICAvLyBjb250cmFjdHMvQWdlbnRSZXB1dGF0aW9uLmFsZ28udHM6MTY1CiAgICAvLyBwdWJsaWMgdHJhbnNmZXJBZG1pbihuZXdBZG1pbjogQWNjb3VudCk6IHZvaWQgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICAvLyBjb250cmFjdHMvQWdlbnRSZXB1dGF0aW9uLmFsZ28udHM6MTY2CiAgICAvLyBhc3NlcnRNYXRjaChUeG4sIHsgc2VuZGVyOiB0aGlzLmFkbWluLnZhbHVlIH0pOwogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIC8vIGNvbnRyYWN0cy9BZ2VudFJlcHV0YXRpb24uYWxnby50czo1MgogICAgLy8gYWRtaW4gPSBHbG9iYWxTdGF0ZTxBY2NvdW50PigpOwogICAgYnl0ZWNfMSAvLyAiYWRtaW4iCiAgICAvLyBjb250cmFjdHMvQWdlbnRSZXB1dGF0aW9uLmFsZ28udHM6MTY2CiAgICAvLyBhc3NlcnRNYXRjaChUeG4sIHsgc2VuZGVyOiB0aGlzLmFkbWluLnZhbHVlIH0pOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgID09CiAgICBhc3NlcnQgLy8gYXNzZXJ0IHRhcmdldCBpcyBtYXRjaCBmb3IgY29uZGl0aW9ucwogICAgLy8gY29udHJhY3RzL0FnZW50UmVwdXRhdGlvbi5hbGdvLnRzOjUyCiAgICAvLyBhZG1pbiA9IEdsb2JhbFN0YXRlPEFjY291bnQ+KCk7CiAgICBieXRlY18xIC8vICJhZG1pbiIKICAgIC8vIGNvbnRyYWN0cy9BZ2VudFJlcHV0YXRpb24uYWxnby50czoxNjcKICAgIC8vIHRoaXMuYWRtaW4udmFsdWUgPSBuZXdBZG1pbjsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBjb250cmFjdHMvQWdlbnRSZXB1dGF0aW9uLmFsZ28udHM6MTY1CiAgICAvLyBwdWJsaWMgdHJhbnNmZXJBZG1pbihuZXdBZG1pbjogQWNjb3VudCk6IHZvaWQgewogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIGNvbnRyYWN0cy9BZ2VudFJlcHV0YXRpb24uYWxnby50czo6QWdlbnRSZXB1dGF0aW9uLmRlbGV0ZUFwcGxpY2F0aW9uW3JvdXRpbmddKCkgLT4gdm9pZDoKZGVsZXRlQXBwbGljYXRpb246CiAgICAvLyBjb250cmFjdHMvQWdlbnRSZXB1dGF0aW9uLmFsZ28udHM6MTcyCiAgICAvLyBhc3NlcnRNYXRjaChUeG4sIHsgc2VuZGVyOiB0aGlzLmFkbWluLnZhbHVlIH0pOwogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIC8vIGNvbnRyYWN0cy9BZ2VudFJlcHV0YXRpb24uYWxnby50czo1MgogICAgLy8gYWRtaW4gPSBHbG9iYWxTdGF0ZTxBY2NvdW50PigpOwogICAgYnl0ZWNfMSAvLyAiYWRtaW4iCiAgICAvLyBjb250cmFjdHMvQWdlbnRSZXB1dGF0aW9uLmFsZ28udHM6MTcyCiAgICAvLyBhc3NlcnRNYXRjaChUeG4sIHsgc2VuZGVyOiB0aGlzLmFkbWluLnZhbHVlIH0pOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgID09CiAgICBhc3NlcnQgLy8gYXNzZXJ0IHRhcmdldCBpcyBtYXRjaCBmb3IgY29uZGl0aW9ucwogICAgLy8gY29udHJhY3RzL0FnZW50UmVwdXRhdGlvbi5hbGdvLnRzOjE3MAogICAgLy8gQGFiaW1ldGhvZCh7IGFsbG93QWN0aW9uczogIkRlbGV0ZUFwcGxpY2F0aW9uIiB9KQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgo=", "clear": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "byteCode": { "approval": "CyAEAAEgCCYGAWEFYWRtaW4EFR98dQZwYXVzZWQKYWdlbnRDb3VudA50b3RhbEZlZWRiYWNrczEYQAALJwQiZycFImcrImeABCSHwyw2GgCOAQBzMRkURDEYQQBcggwE8lZjrQRmYilvBCHzTJsEjWmFFwTkHo+UBA6PWPoE1d5OVwRXXlQoBLc9D60EAXj5SwQbUp3oBH7hucw2GgCODAAhAGQAhADZAQcBHwE6AVcBYwFvAXwBiQCABLhEezY2GgCOAQANADEZgQUSMRgQREIBgykxAGcjQyIrZUQURCgxAFC9RQEURCgxAFCAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABvyInBGVEIwgnBExnI0M2GgFJFSQSRDEAIillRBJEKExQSb1FAUQiFoEYTLsjQzYaAUkVJBJENhoCSRUlEkQXIitlRBREKEsCUEm9RQFESwGBZA5EMQBPAxNESb5ISYEYWyMSREkiW08DCBZcAEklWyMIFlwIvyInBWVEIwgnBUxnI0M2GgFJFSQSRChMUEm9RQFEvkhJJVtJQAAIIhYqTFCwI0NLASJbgWQLSwEKQv/sNhoBSRUkEkQoTFBJvUUBRL5IKkxQsCNDNhoBSRUkEkQoTFBJvUUBRL5IVwgIKkxQsCNDNhoBSRUkEkQoTFC9RQFBAAgjFipMULAjQyJC//UiJwRlRBYqTFCwI0MiJwVlRBYqTFCwI0MxACIpZUQSRCsjZyNDMQAiKWVEEkQrImcjQzYaAUkVJBJEMQAiKWVEEkQpTGcjQzEAIillRBJEI0M=", "clear": "C4EBQw==" }, "compilerInfo": { "compiler": "puya", "compilerVersion": { "major": 5, "minor": 3, "patch": 2 } }, "events": [], "templateVariables": {} }