{ "name": "SavingVault", "structs": { "UserData": [ { "name": "deposited", "type": "uint64" }, { "name": "goal", "type": "uint64" }, { "name": "goalReached", "type": "uint64" }, { "name": "totalSaving", "type": "uint64" }, { "name": "totalGoalsReached", "type": "uint64" }, { "name": "deadline", "type": "uint64" } ] }, "methods": [ { "name": "initUser", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "setGoal", "args": [ { "type": "uint64", "name": "goalAmount" }, { "type": "uint64", "name": "deadlineDuration" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "deposit", "args": [ { "type": "pay", "name": "payTxn" } ], "returns": { "type": "uint64" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "withdraw", "args": [ { "type": "uint64", "name": "amount" } ], "returns": { "type": "uint64" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} } ], "arcs": [ 22, 28 ], "networks": {}, "state": { "schema": { "global": { "ints": 1, "bytes": 0 }, "local": { "ints": 0, "bytes": 0 } }, "keys": { "global": { "penaltyPercent": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "cGVuYWx0eQ==" } }, "local": {}, "box": {} }, "maps": { "global": {}, "local": {}, "box": { "depositors": { "keyType": "address", "valueType": "UserData", "prefix": "ZGVw" } } } }, "bareActions": { "create": [ "NoOp" ], "call": [] }, "sourceInfo": { "approval": { "sourceInfo": [ { "pc": [ 439 ], "errorMessage": "Amount greater than the deposited amount" }, { "pc": [ 435 ], "errorMessage": "Amount must be greater than zero" }, { "pc": [ 193, 279, 424 ], "errorMessage": "Box must have value" }, { "pc": [ 265 ], "errorMessage": "Deposit amount must be greater than zero" }, { "pc": [ 198 ], "errorMessage": "Goal already set" }, { "pc": [ 187 ], "errorMessage": "Goal must be greater than zero" }, { "pc": [ 432 ], "errorMessage": "No deposits found for this account" }, { "pc": [ 43 ], "errorMessage": "OnCompletion must be NoOp" }, { "pc": [ 90 ], "errorMessage": "OnCompletion must be NoOp && can only call when creating" }, { "pc": [ 261 ], "errorMessage": "Receiver must be the contract address" }, { "pc": [ 287 ], "errorMessage": "Set a saving goal before depositing" }, { "pc": [ 101 ], "errorMessage": "User already initialized" }, { "pc": [ 184, 273, 412 ], "errorMessage": "User not initialized" }, { "pc": [ 583 ], "errorMessage": "check GlobalState exists" }, { "pc": [ 166, 175, 402 ], "errorMessage": "invalid number of bytes for arc4.uint64" }, { "pc": [ 254 ], "errorMessage": "transaction type is pay" } ], "pcOffsetMethod": "none" }, "clear": { "sourceInfo": [], "pcOffsetMethod": "none" } }, "source": { "approval": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMSAwIDggMTYKICAgIGJ5dGVjYmxvY2sgImRlcCIgInBlbmFsdHkiIDB4MTUxZjdjNzUKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zYXZpbmdfdmF1bHQvY29udHJhY3QuYWxnby50czoyOQogICAgLy8gcGVuYWx0eVBlcmNlbnQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoMTApLCBrZXk6ICdwZW5hbHR5JyB9KQogICAgYnl0ZWNfMSAvLyAicGVuYWx0eSIKICAgIHB1c2hpbnQgMTAgLy8gMTAKICAgIGFwcF9nbG9iYWxfcHV0CgptYWluX2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zYXZpbmdfdmF1bHQvY29udHJhY3QuYWxnby50czoyNwogICAgLy8gZXhwb3J0IGNsYXNzIFNhdmluZ1ZhdWx0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDEzCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIG11c3QgYmUgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydAogICAgcHVzaGJ5dGVzcyAweDIxZGI1YTQ4IDB4ZmE0MzAzYmEgMHgzMjk4ZTdjMCAweDMxMjE0MTc2IC8vIG1ldGhvZCAiaW5pdFVzZXIoKXZvaWQiLCBtZXRob2QgInNldEdvYWwodWludDY0LHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJkZXBvc2l0KHBheSl1aW50NjQiLCBtZXRob2QgIndpdGhkcmF3KHVpbnQ2NCl1aW50NjQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBpbml0VXNlciBzZXRHb2FsIGRlcG9zaXQgd2l0aGRyYXcKICAgIGVycgoKbWFpbl9fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVAMTM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvc2F2aW5nX3ZhdWx0L2NvbnRyYWN0LmFsZ28udHM6MjcKICAgIC8vIGV4cG9ydCBjbGFzcyBTYXZpbmdWYXVsdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICAmJgogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBtdXN0IGJlIE5vT3AgJiYgY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL3NhdmluZ192YXVsdC9jb250cmFjdC5hbGdvLnRzOjpTYXZpbmdWYXVsdC5pbml0VXNlcltyb3V0aW5nXSgpIC0+IHZvaWQ6CmluaXRVc2VyOgogICAgLy8gc21hcnRfY29udHJhY3RzL3NhdmluZ192YXVsdC9jb250cmFjdC5hbGdvLnRzOjI4CiAgICAvLyBkZXBvc2l0b3JzID0gQm94TWFwPEFjY291bnQsIFVzZXJEYXRhPih7IGtleVByZWZpeDogJ2RlcCcgfSkKICAgIGJ5dGVjXzAgLy8gImRlcCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zYXZpbmdfdmF1bHQvY29udHJhY3QuYWxnby50czozMwogICAgLy8gYXNzZXJ0KCF0aGlzLmRlcG9zaXRvcnMoVHhuLnNlbmRlcikuZXhpc3RzLCAnVXNlciBhbHJlYWR5IGluaXRpYWxpemVkJykKICAgIHR4biBTZW5kZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zYXZpbmdfdmF1bHQvY29udHJhY3QuYWxnby50czoyOAogICAgLy8gZGVwb3NpdG9ycyA9IEJveE1hcDxBY2NvdW50LCBVc2VyRGF0YT4oeyBrZXlQcmVmaXg6ICdkZXAnIH0pCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zYXZpbmdfdmF1bHQvY29udHJhY3QuYWxnby50czozMwogICAgLy8gYXNzZXJ0KCF0aGlzLmRlcG9zaXRvcnMoVHhuLnNlbmRlcikuZXhpc3RzLCAnVXNlciBhbHJlYWR5IGluaXRpYWxpemVkJykKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgIQogICAgYXNzZXJ0IC8vIFVzZXIgYWxyZWFkeSBpbml0aWFsaXplZAogICAgLy8gc21hcnRfY29udHJhY3RzL3NhdmluZ192YXVsdC9jb250cmFjdC5hbGdvLnRzOjI4CiAgICAvLyBkZXBvc2l0b3JzID0gQm94TWFwPEFjY291bnQsIFVzZXJEYXRhPih7IGtleVByZWZpeDogJ2RlcCcgfSkKICAgIGJ5dGVjXzAgLy8gImRlcCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zYXZpbmdfdmF1bHQvY29udHJhY3QuYWxnby50czo0MgogICAgLy8gdGhpcy5kZXBvc2l0b3JzKFR4bi5zZW5kZXIpLnZhbHVlID0gY2xvbmUoaW5pdGlhbCkKICAgIHR4biBTZW5kZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zYXZpbmdfdmF1bHQvY29udHJhY3QuYWxnby50czoyOAogICAgLy8gZGVwb3NpdG9ycyA9IEJveE1hcDxBY2NvdW50LCBVc2VyRGF0YT4oeyBrZXlQcmVmaXg6ICdkZXAnIH0pCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zYXZpbmdfdmF1bHQvY29udHJhY3QuYWxnby50czozNC00MQogICAgLy8gY29uc3QgaW5pdGlhbDogVXNlckRhdGEgPSB7CiAgICAvLyAgIGRlcG9zaXRlZDogVWludDY0KDApLAogICAgLy8gICBnb2FsOiBVaW50NjQoMCksCiAgICAvLyAgIGdvYWxSZWFjaGVkOiBVaW50NjQoMCksCiAgICAvLyAgIHRvdGFsU2F2aW5nOiBVaW50NjQoMCksCiAgICAvLyAgIHRvdGFsR29hbHNSZWFjaGVkOiBVaW50NjQoMCksCiAgICAvLyAgIGRlYWRsaW5lOiBVaW50NjQoMCksCiAgICAvLyB9CiAgICBwdXNoYnl0ZXMgMHgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zYXZpbmdfdmF1bHQvY29udHJhY3QuYWxnby50czo0MgogICAgLy8gdGhpcy5kZXBvc2l0b3JzKFR4bi5zZW5kZXIpLnZhbHVlID0gY2xvbmUoaW5pdGlhbCkKICAgIGJveF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zYXZpbmdfdmF1bHQvY29udHJhY3QuYWxnby50czozMQogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL3NhdmluZ192YXVsdC9jb250cmFjdC5hbGdvLnRzOjpTYXZpbmdWYXVsdC5zZXRHb2FsW3JvdXRpbmddKCkgLT4gdm9pZDoKc2V0R29hbDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zYXZpbmdfdmF1bHQvY29udHJhY3QuYWxnby50czo0NQogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvc2F2aW5nX3ZhdWx0L2NvbnRyYWN0LmFsZ28udHM6MjgKICAgIC8vIGRlcG9zaXRvcnMgPSBCb3hNYXA8QWNjb3VudCwgVXNlckRhdGE+KHsga2V5UHJlZml4OiAnZGVwJyB9KQogICAgYnl0ZWNfMCAvLyAiZGVwIgogICAgLy8gc21hcnRfY29udHJhY3RzL3NhdmluZ192YXVsdC9jb250cmFjdC5hbGdvLnRzOjQ3CiAgICAvLyBhc3NlcnQodGhpcy5kZXBvc2l0b3JzKFR4bi5zZW5kZXIpLmV4aXN0cywgJ1VzZXIgbm90IGluaXRpYWxpemVkJykKICAgIHR4biBTZW5kZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zYXZpbmdfdmF1bHQvY29udHJhY3QuYWxnby50czoyOAogICAgLy8gZGVwb3NpdG9ycyA9IEJveE1hcDxBY2NvdW50LCBVc2VyRGF0YT4oeyBrZXlQcmVmaXg6ICdkZXAnIH0pCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zYXZpbmdfdmF1bHQvY29udHJhY3QuYWxnby50czo0NwogICAgLy8gYXNzZXJ0KHRoaXMuZGVwb3NpdG9ycyhUeG4uc2VuZGVyKS5leGlzdHMsICdVc2VyIG5vdCBpbml0aWFsaXplZCcpCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBVc2VyIG5vdCBpbml0aWFsaXplZAogICAgLy8gc21hcnRfY29udHJhY3RzL3NhdmluZ192YXVsdC9jb250cmFjdC5hbGdvLnRzOjQ4CiAgICAvLyBhc3NlcnQoZ29hbEFtb3VudCA+IFVpbnQ2NCgwKSwgJ0dvYWwgbXVzdCBiZSBncmVhdGVyIHRoYW4gemVybycpCiAgICBkaWcgMQogICAgYXNzZXJ0IC8vIEdvYWwgbXVzdCBiZSBncmVhdGVyIHRoYW4gemVybwogICAgLy8gc21hcnRfY29udHJhY3RzL3NhdmluZ192YXVsdC9jb250cmFjdC5hbGdvLnRzOjI4CiAgICAvLyBkZXBvc2l0b3JzID0gQm94TWFwPEFjY291bnQsIFVzZXJEYXRhPih7IGtleVByZWZpeDogJ2RlcCcgfSkKICAgIGJ5dGVjXzAgLy8gImRlcCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zYXZpbmdfdmF1bHQvY29udHJhY3QuYWxnby50czo1MAogICAgLy8gY29uc3QgdXNlckRhdGEgPSBjbG9uZSh0aGlzLmRlcG9zaXRvcnMoVHhuLnNlbmRlcikudmFsdWUpCiAgICB0eG4gU2VuZGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvc2F2aW5nX3ZhdWx0L2NvbnRyYWN0LmFsZ28udHM6MjgKICAgIC8vIGRlcG9zaXRvcnMgPSBCb3hNYXA8QWNjb3VudCwgVXNlckRhdGE+KHsga2V5UHJlZml4OiAnZGVwJyB9KQogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvc2F2aW5nX3ZhdWx0L2NvbnRyYWN0LmFsZ28udHM6NTAKICAgIC8vIGNvbnN0IHVzZXJEYXRhID0gY2xvbmUodGhpcy5kZXBvc2l0b3JzKFR4bi5zZW5kZXIpLnZhbHVlKQogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zYXZpbmdfdmF1bHQvY29udHJhY3QuYWxnby50czo1MQogICAgLy8gYXNzZXJ0KHVzZXJEYXRhLmdvYWwgPT09IFVpbnQ2NCgwKSwgJ0dvYWwgYWxyZWFkeSBzZXQnKQogICAgZHVwCiAgICBpbnRjXzIgLy8gOAogICAgZXh0cmFjdF91aW50NjQKICAgICEKICAgIGFzc2VydCAvLyBHb2FsIGFscmVhZHkgc2V0CiAgICAvLyBzbWFydF9jb250cmFjdHMvc2F2aW5nX3ZhdWx0L2NvbnRyYWN0LmFsZ28udHM6NTMKICAgIC8vIGNvbnN0IGRlYWRsaW5lOiB1aW50NjQgPSBHbG9iYWwubGF0ZXN0VGltZXN0YW1wICsgZGVhZGxpbmVEdXJhdGlvbgogICAgZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAogICAgdW5jb3ZlciAyCiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvc2F2aW5nX3ZhdWx0L2NvbnRyYWN0LmFsZ28udHM6NTUKICAgIC8vIGRlcG9zaXRlZDogdXNlckRhdGEuZGVwb3NpdGVkLAogICAgZGlnIDEKICAgIGV4dHJhY3QgMCA4CiAgICAvLyBzbWFydF9jb250cmFjdHMvc2F2aW5nX3ZhdWx0L2NvbnRyYWN0LmFsZ28udHM6NTgKICAgIC8vIHRvdGFsU2F2aW5nOiB1c2VyRGF0YS50b3RhbFNhdmluZywKICAgIGRpZyAyCiAgICBleHRyYWN0IDI0IDgKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zYXZpbmdfdmF1bHQvY29udHJhY3QuYWxnby50czo1OQogICAgLy8gdG90YWxHb2Fsc1JlYWNoZWQ6IHVzZXJEYXRhLnRvdGFsR29hbHNSZWFjaGVkLAogICAgdW5jb3ZlciAzCiAgICBleHRyYWN0IDMyIDgKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zYXZpbmdfdmF1bHQvY29udHJhY3QuYWxnby50czo1NC02MQogICAgLy8gdGhpcy5kZXBvc2l0b3JzKFR4bi5zZW5kZXIpLnZhbHVlID0gewogICAgLy8gICBkZXBvc2l0ZWQ6IHVzZXJEYXRhLmRlcG9zaXRlZCwKICAgIC8vICAgZ29hbDogZ29hbEFtb3VudCwKICAgIC8vICAgZ29hbFJlYWNoZWQ6IFVpbnQ2NCgwKSwKICAgIC8vICAgdG90YWxTYXZpbmc6IHVzZXJEYXRhLnRvdGFsU2F2aW5nLAogICAgLy8gICB0b3RhbEdvYWxzUmVhY2hlZDogdXNlckRhdGEudG90YWxHb2Fsc1JlYWNoZWQsCiAgICAvLyAgIGRlYWRsaW5lOiBkZWFkbGluZSwKICAgIC8vIH0KICAgIHVuY292ZXIgNAogICAgaXRvYgogICAgdW5jb3ZlciAzCiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zYXZpbmdfdmF1bHQvY29udHJhY3QuYWxnby50czo1NwogICAgLy8gZ29hbFJlYWNoZWQ6IFVpbnQ2NCgwKSwKICAgIGludGNfMSAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvc2F2aW5nX3ZhdWx0L2NvbnRyYWN0LmFsZ28udHM6NTQtNjEKICAgIC8vIHRoaXMuZGVwb3NpdG9ycyhUeG4uc2VuZGVyKS52YWx1ZSA9IHsKICAgIC8vICAgZGVwb3NpdGVkOiB1c2VyRGF0YS5kZXBvc2l0ZWQsCiAgICAvLyAgIGdvYWw6IGdvYWxBbW91bnQsCiAgICAvLyAgIGdvYWxSZWFjaGVkOiBVaW50NjQoMCksCiAgICAvLyAgIHRvdGFsU2F2aW5nOiB1c2VyRGF0YS50b3RhbFNhdmluZywKICAgIC8vICAgdG90YWxHb2Fsc1JlYWNoZWQ6IHVzZXJEYXRhLnRvdGFsR29hbHNSZWFjaGVkLAogICAgLy8gICBkZWFkbGluZTogZGVhZGxpbmUsCiAgICAvLyB9CiAgICBpdG9iCiAgICBjb25jYXQKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGl0b2IKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL3NhdmluZ192YXVsdC9jb250cmFjdC5hbGdvLnRzOjI4CiAgICAvLyBkZXBvc2l0b3JzID0gQm94TWFwPEFjY291bnQsIFVzZXJEYXRhPih7IGtleVByZWZpeDogJ2RlcCcgfSkKICAgIGJ5dGVjXzAgLy8gImRlcCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zYXZpbmdfdmF1bHQvY29udHJhY3QuYWxnby50czo1NAogICAgLy8gdGhpcy5kZXBvc2l0b3JzKFR4bi5zZW5kZXIpLnZhbHVlID0gewogICAgdHhuIFNlbmRlcgogICAgLy8gc21hcnRfY29udHJhY3RzL3NhdmluZ192YXVsdC9jb250cmFjdC5hbGdvLnRzOjI4CiAgICAvLyBkZXBvc2l0b3JzID0gQm94TWFwPEFjY291bnQsIFVzZXJEYXRhPih7IGtleVByZWZpeDogJ2RlcCcgfSkKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL3NhdmluZ192YXVsdC9jb250cmFjdC5hbGdvLnRzOjU0LTYxCiAgICAvLyB0aGlzLmRlcG9zaXRvcnMoVHhuLnNlbmRlcikudmFsdWUgPSB7CiAgICAvLyAgIGRlcG9zaXRlZDogdXNlckRhdGEuZGVwb3NpdGVkLAogICAgLy8gICBnb2FsOiBnb2FsQW1vdW50LAogICAgLy8gICBnb2FsUmVhY2hlZDogVWludDY0KDApLAogICAgLy8gICB0b3RhbFNhdmluZzogdXNlckRhdGEudG90YWxTYXZpbmcsCiAgICAvLyAgIHRvdGFsR29hbHNSZWFjaGVkOiB1c2VyRGF0YS50b3RhbEdvYWxzUmVhY2hlZCwKICAgIC8vICAgZGVhZGxpbmU6IGRlYWRsaW5lLAogICAgLy8gfQogICAgc3dhcAogICAgYm94X3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3NhdmluZ192YXVsdC9jb250cmFjdC5hbGdvLnRzOjQ1CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvc2F2aW5nX3ZhdWx0L2NvbnRyYWN0LmFsZ28udHM6OlNhdmluZ1ZhdWx0LmRlcG9zaXRbcm91dGluZ10oKSAtPiB2b2lkOgpkZXBvc2l0OgogICAgLy8gc21hcnRfY29udHJhY3RzL3NhdmluZ192YXVsdC9jb250cmFjdC5hbGdvLnRzOjY0CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4biBHcm91cEluZGV4CiAgICBpbnRjXzAgLy8gMQogICAgLQogICAgZHVwCiAgICBndHhucyBUeXBlRW51bQogICAgaW50Y18wIC8vIHBheQogICAgPT0KICAgIGFzc2VydCAvLyB0cmFuc2FjdGlvbiB0eXBlIGlzIHBheQogICAgLy8gc21hcnRfY29udHJhY3RzL3NhdmluZ192YXVsdC9jb250cmFjdC5hbGdvLnRzOjY2CiAgICAvLyBhc3NlcnQocGF5VHhuLnJlY2VpdmVyID09PSBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywgJ1JlY2VpdmVyIG11c3QgYmUgdGhlIGNvbnRyYWN0IGFkZHJlc3MnKQogICAgZHVwCiAgICBndHhucyBSZWNlaXZlcgogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgID09CiAgICBhc3NlcnQgLy8gUmVjZWl2ZXIgbXVzdCBiZSB0aGUgY29udHJhY3QgYWRkcmVzcwogICAgLy8gc21hcnRfY29udHJhY3RzL3NhdmluZ192YXVsdC9jb250cmFjdC5hbGdvLnRzOjY3CiAgICAvLyBhc3NlcnQocGF5VHhuLmFtb3VudCA+IFVpbnQ2NCgwKSwgJ0RlcG9zaXQgYW1vdW50IG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8nKQogICAgZ3R4bnMgQW1vdW50CiAgICBkdXAKICAgIGFzc2VydCAvLyBEZXBvc2l0IGFtb3VudCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvCiAgICAvLyBzbWFydF9jb250cmFjdHMvc2F2aW5nX3ZhdWx0L2NvbnRyYWN0LmFsZ28udHM6MjgKICAgIC8vIGRlcG9zaXRvcnMgPSBCb3hNYXA8QWNjb3VudCwgVXNlckRhdGE+KHsga2V5UHJlZml4OiAnZGVwJyB9KQogICAgYnl0ZWNfMCAvLyAiZGVwIgogICAgLy8gc21hcnRfY29udHJhY3RzL3NhdmluZ192YXVsdC9jb250cmFjdC5hbGdvLnRzOjY4CiAgICAvLyBhc3NlcnQodGhpcy5kZXBvc2l0b3JzKFR4bi5zZW5kZXIpLmV4aXN0cywgJ1VzZXIgbm90IGluaXRpYWxpemVkJykKICAgIHR4biBTZW5kZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zYXZpbmdfdmF1bHQvY29udHJhY3QuYWxnby50czoyOAogICAgLy8gZGVwb3NpdG9ycyA9IEJveE1hcDxBY2NvdW50LCBVc2VyRGF0YT4oeyBrZXlQcmVmaXg6ICdkZXAnIH0pCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zYXZpbmdfdmF1bHQvY29udHJhY3QuYWxnby50czo2OAogICAgLy8gYXNzZXJ0KHRoaXMuZGVwb3NpdG9ycyhUeG4uc2VuZGVyKS5leGlzdHMsICdVc2VyIG5vdCBpbml0aWFsaXplZCcpCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBVc2VyIG5vdCBpbml0aWFsaXplZAogICAgLy8gc21hcnRfY29udHJhY3RzL3NhdmluZ192YXVsdC9jb250cmFjdC5hbGdvLnRzOjI4CiAgICAvLyBkZXBvc2l0b3JzID0gQm94TWFwPEFjY291bnQsIFVzZXJEYXRhPih7IGtleVByZWZpeDogJ2RlcCcgfSkKICAgIGJ5dGVjXzAgLy8gImRlcCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zYXZpbmdfdmF1bHQvY29udHJhY3QuYWxnby50czo3MQogICAgLy8gY29uc3QgdXNlckRhdGEgPSBjbG9uZSh0aGlzLmRlcG9zaXRvcnMoVHhuLnNlbmRlcikudmFsdWUpCiAgICB0eG4gU2VuZGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvc2F2aW5nX3ZhdWx0L2NvbnRyYWN0LmFsZ28udHM6MjgKICAgIC8vIGRlcG9zaXRvcnMgPSBCb3hNYXA8QWNjb3VudCwgVXNlckRhdGE+KHsga2V5UHJlZml4OiAnZGVwJyB9KQogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvc2F2aW5nX3ZhdWx0L2NvbnRyYWN0LmFsZ28udHM6NzEKICAgIC8vIGNvbnN0IHVzZXJEYXRhID0gY2xvbmUodGhpcy5kZXBvc2l0b3JzKFR4bi5zZW5kZXIpLnZhbHVlKQogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zYXZpbmdfdmF1bHQvY29udHJhY3QuYWxnby50czo3MgogICAgLy8gYXNzZXJ0KHVzZXJEYXRhLmdvYWwgPiBVaW50NjQoMCksICdTZXQgYSBzYXZpbmcgZ29hbCBiZWZvcmUgZGVwb3NpdGluZycpCiAgICBkdXAKICAgIGludGNfMiAvLyA4CiAgICBleHRyYWN0X3VpbnQ2NAogICAgZHVwCiAgICBjb3ZlciAzCiAgICBkdXAKICAgIGFzc2VydCAvLyBTZXQgYSBzYXZpbmcgZ29hbCBiZWZvcmUgZGVwb3NpdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL3NhdmluZ192YXVsdC9jb250cmFjdC5hbGdvLnRzOjc0CiAgICAvLyBjb25zdCBuZXdUb3RhbDogdWludDY0ID0gdXNlckRhdGEuZGVwb3NpdGVkICsgZGVwb3NpdEFtb3VudAogICAgZGlnIDEKICAgIGludGNfMSAvLyAwCiAgICBleHRyYWN0X3VpbnQ2NAogICAgZGlnIDMKICAgICsKICAgIGR1cAogICAgY292ZXIgMwogICAgY292ZXIgNAogICAgLy8gc21hcnRfY29udHJhY3RzL3NhdmluZ192YXVsdC9jb250cmFjdC5hbGdvLnRzOjc1CiAgICAvLyBjb25zdCBuZXdUb3RhbFNhdmluZzogdWludDY0ID0gdXNlckRhdGEudG90YWxTYXZpbmcgKyBkZXBvc2l0QW1vdW50CiAgICBkaWcgMQogICAgcHVzaGludCAyNCAvLyAyNAogICAgZXh0cmFjdF91aW50NjQKICAgIHVuY292ZXIgNAogICAgKwogICAgY292ZXIgMwogICAgLy8gc21hcnRfY29udHJhY3RzL3NhdmluZ192YXVsdC9jb250cmFjdC5hbGdvLnRzOjc3CiAgICAvLyBsZXQgbmV3R29hbFJlYWNoZWQ6IHVpbnQ2NCA9IHVzZXJEYXRhLmdvYWxSZWFjaGVkCiAgICBkaWcgMQogICAgaW50Y18zIC8vIDE2CiAgICBleHRyYWN0X3VpbnQ2NAogICAgY292ZXIgMwogICAgLy8gc21hcnRfY29udHJhY3RzL3NhdmluZ192YXVsdC9jb250cmFjdC5hbGdvLnRzOjc4CiAgICAvLyBsZXQgbmV3VG90YWxHb2Fsc1JlYWNoZWQ6IHVpbnQ2NCA9IHVzZXJEYXRhLnRvdGFsR29hbHNSZWFjaGVkCiAgICBkaWcgMQogICAgcHVzaGludCAzMiAvLyAzMgogICAgZXh0cmFjdF91aW50NjQKICAgIGNvdmVyIDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zYXZpbmdfdmF1bHQvY29udHJhY3QuYWxnby50czo4MAogICAgLy8gbGV0IG5ld0RlYWRsaW5lOiB1aW50NjQgPSB1c2VyRGF0YS5kZWFkbGluZQogICAgc3dhcAogICAgcHVzaGludCA0MCAvLyA0MAogICAgZXh0cmFjdF91aW50NjQKICAgIGNvdmVyIDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zYXZpbmdfdmF1bHQvY29udHJhY3QuYWxnby50czo4MgogICAgLy8gaWYgKG5ld1RvdGFsID49IHVzZXJEYXRhLmdvYWwgJiYgdXNlckRhdGEuZ29hbFJlYWNoZWQgPT09IFVpbnQ2NCgwKSkgewogICAgPj0KICAgIGJ6IGRlcG9zaXRfYWZ0ZXJfaWZfZWxzZUA0CiAgICBkaWcgMgogICAgYm56IGRlcG9zaXRfYWZ0ZXJfaWZfZWxzZUA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvc2F2aW5nX3ZhdWx0L2NvbnRyYWN0LmFsZ28udHM6ODMKICAgIC8vIG5ld0dvYWxSZWFjaGVkID0gVWludDY0KDEpCiAgICBpbnRjXzAgLy8gMQogICAgYnVyeSAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvc2F2aW5nX3ZhdWx0L2NvbnRyYWN0LmFsZ28udHM6ODQKICAgIC8vIG5ld1RvdGFsR29hbHNSZWFjaGVkID0gdXNlckRhdGEudG90YWxHb2Fsc1JlYWNoZWQgKyBVaW50NjQoMSkKICAgIGRpZyAxCiAgICBpbnRjXzAgLy8gMQogICAgKwogICAgYnVyeSAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvc2F2aW5nX3ZhdWx0L2NvbnRyYWN0LmFsZ28udHM6ODUKICAgIC8vIG5ld0dvYWwgPSBVaW50NjQoMCkKICAgIGludGNfMSAvLyAwCiAgICBidXJ5IDYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zYXZpbmdfdmF1bHQvY29udHJhY3QuYWxnby50czo4NgogICAgLy8gbmV3RGVhZGxpbmUgPSBVaW50NjQoMCkKICAgIGludGNfMSAvLyAwCiAgICBidXJ5IDEKCmRlcG9zaXRfYWZ0ZXJfaWZfZWxzZUA0OgogICAgLy8gc21hcnRfY29udHJhY3RzL3NhdmluZ192YXVsdC9jb250cmFjdC5hbGdvLnRzOjg5LTk2CiAgICAvLyB0aGlzLmRlcG9zaXRvcnMoVHhuLnNlbmRlcikudmFsdWUgPSB7CiAgICAvLyAgIGRlcG9zaXRlZDogbmV3VG90YWwsCiAgICAvLyAgIGdvYWw6IG5ld0dvYWwsCiAgICAvLyAgIGdvYWxSZWFjaGVkOiBuZXdHb2FsUmVhY2hlZCwKICAgIC8vICAgdG90YWxTYXZpbmc6IG5ld1RvdGFsU2F2aW5nLAogICAgLy8gICB0b3RhbEdvYWxzUmVhY2hlZDogbmV3VG90YWxHb2Fsc1JlYWNoZWQsCiAgICAvLyAgIGRlYWRsaW5lOiBuZXdEZWFkbGluZSwKICAgIC8vIH0KICAgIGRpZyA0CiAgICBpdG9iCiAgICBkaWcgNgogICAgaXRvYgogICAgY29uY2F0CiAgICBkaWcgMwogICAgaXRvYgogICAgY29uY2F0CiAgICBkaWcgNAogICAgaXRvYgogICAgY29uY2F0CiAgICBkaWcgMgogICAgaXRvYgogICAgc3dhcAogICAgZGlnIDEKICAgIGNvbmNhdAogICAgZGlnIDIKICAgIGl0b2IKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL3NhdmluZ192YXVsdC9jb250cmFjdC5hbGdvLnRzOjI4CiAgICAvLyBkZXBvc2l0b3JzID0gQm94TWFwPEFjY291bnQsIFVzZXJEYXRhPih7IGtleVByZWZpeDogJ2RlcCcgfSkKICAgIGJ5dGVjXzAgLy8gImRlcCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zYXZpbmdfdmF1bHQvY29udHJhY3QuYWxnby50czo4OQogICAgLy8gdGhpcy5kZXBvc2l0b3JzKFR4bi5zZW5kZXIpLnZhbHVlID0gewogICAgdHhuIFNlbmRlcgogICAgLy8gc21hcnRfY29udHJhY3RzL3NhdmluZ192YXVsdC9jb250cmFjdC5hbGdvLnRzOjI4CiAgICAvLyBkZXBvc2l0b3JzID0gQm94TWFwPEFjY291bnQsIFVzZXJEYXRhPih7IGtleVByZWZpeDogJ2RlcCcgfSkKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL3NhdmluZ192YXVsdC9jb250cmFjdC5hbGdvLnRzOjg5LTk2CiAgICAvLyB0aGlzLmRlcG9zaXRvcnMoVHhuLnNlbmRlcikudmFsdWUgPSB7CiAgICAvLyAgIGRlcG9zaXRlZDogbmV3VG90YWwsCiAgICAvLyAgIGdvYWw6IG5ld0dvYWwsCiAgICAvLyAgIGdvYWxSZWFjaGVkOiBuZXdHb2FsUmVhY2hlZCwKICAgIC8vICAgdG90YWxTYXZpbmc6IG5ld1RvdGFsU2F2aW5nLAogICAgLy8gICB0b3RhbEdvYWxzUmVhY2hlZDogbmV3VG90YWxHb2Fsc1JlYWNoZWQsCiAgICAvLyAgIGRlYWRsaW5lOiBuZXdEZWFkbGluZSwKICAgIC8vIH0KICAgIHN3YXAKICAgIGJveF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zYXZpbmdfdmF1bHQvY29udHJhY3QuYWxnby50czo2NAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBieXRlY18yIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL3NhdmluZ192YXVsdC9jb250cmFjdC5hbGdvLnRzOjpTYXZpbmdWYXVsdC53aXRoZHJhd1tyb3V0aW5nXSgpIC0+IHZvaWQ6CndpdGhkcmF3OgogICAgcHVzaGJ5dGVzICIiCiAgICBkdXBuIDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zYXZpbmdfdmF1bHQvY29udHJhY3QuYWxnby50czoxMDEKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvc2F2aW5nX3ZhdWx0L2NvbnRyYWN0LmFsZ28udHM6MjgKICAgIC8vIGRlcG9zaXRvcnMgPSBCb3hNYXA8QWNjb3VudCwgVXNlckRhdGE+KHsga2V5UHJlZml4OiAnZGVwJyB9KQogICAgYnl0ZWNfMCAvLyAiZGVwIgogICAgLy8gc21hcnRfY29udHJhY3RzL3NhdmluZ192YXVsdC9jb250cmFjdC5hbGdvLnRzOjEwMwogICAgLy8gYXNzZXJ0KHRoaXMuZGVwb3NpdG9ycyhUeG4uc2VuZGVyKS5leGlzdHMsICdVc2VyIG5vdCBpbml0aWFsaXplZCcpCiAgICB0eG4gU2VuZGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvc2F2aW5nX3ZhdWx0L2NvbnRyYWN0LmFsZ28udHM6MjgKICAgIC8vIGRlcG9zaXRvcnMgPSBCb3hNYXA8QWNjb3VudCwgVXNlckRhdGE+KHsga2V5UHJlZml4OiAnZGVwJyB9KQogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvc2F2aW5nX3ZhdWx0L2NvbnRyYWN0LmFsZ28udHM6MTAzCiAgICAvLyBhc3NlcnQodGhpcy5kZXBvc2l0b3JzKFR4bi5zZW5kZXIpLmV4aXN0cywgJ1VzZXIgbm90IGluaXRpYWxpemVkJykKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIFVzZXIgbm90IGluaXRpYWxpemVkCiAgICAvLyBzbWFydF9jb250cmFjdHMvc2F2aW5nX3ZhdWx0L2NvbnRyYWN0LmFsZ28udHM6MjgKICAgIC8vIGRlcG9zaXRvcnMgPSBCb3hNYXA8QWNjb3VudCwgVXNlckRhdGE+KHsga2V5UHJlZml4OiAnZGVwJyB9KQogICAgYnl0ZWNfMCAvLyAiZGVwIgogICAgLy8gc21hcnRfY29udHJhY3RzL3NhdmluZ192YXVsdC9jb250cmFjdC5hbGdvLnRzOjEwNAogICAgLy8gY29uc3QgdXNlckRhdGEgPSBjbG9uZSh0aGlzLmRlcG9zaXRvcnMoVHhuLnNlbmRlcikudmFsdWUpCiAgICB0eG4gU2VuZGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvc2F2aW5nX3ZhdWx0L2NvbnRyYWN0LmFsZ28udHM6MjgKICAgIC8vIGRlcG9zaXRvcnMgPSBCb3hNYXA8QWNjb3VudCwgVXNlckRhdGE+KHsga2V5UHJlZml4OiAnZGVwJyB9KQogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvc2F2aW5nX3ZhdWx0L2NvbnRyYWN0LmFsZ28udHM6MTA0CiAgICAvLyBjb25zdCB1c2VyRGF0YSA9IGNsb25lKHRoaXMuZGVwb3NpdG9ycyhUeG4uc2VuZGVyKS52YWx1ZSkKICAgIGJveF9nZXQKICAgIHN3YXAKICAgIGR1cAogICAgY292ZXIgMgogICAgY292ZXIgMwogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zYXZpbmdfdmF1bHQvY29udHJhY3QuYWxnby50czoxMDUKICAgIC8vIGFzc2VydCh1c2VyRGF0YS5kZXBvc2l0ZWQgPiBVaW50NjQoMCksICdObyBkZXBvc2l0cyBmb3VuZCBmb3IgdGhpcyBhY2NvdW50JykKICAgIGR1cAogICAgaW50Y18xIC8vIDAKICAgIGV4dHJhY3RfdWludDY0CiAgICBkdXAKICAgIGNvdmVyIDMKICAgIGR1cAogICAgYXNzZXJ0IC8vIE5vIGRlcG9zaXRzIGZvdW5kIGZvciB0aGlzIGFjY291bnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zYXZpbmdfdmF1bHQvY29udHJhY3QuYWxnby50czoxMDYKICAgIC8vIGFzc2VydChhbW91bnQgPiBVaW50NjQoMCksICdBbW91bnQgbXVzdCBiZSBncmVhdGVyIHRoYW4gemVybycpCiAgICBkaWcgMgogICAgYXNzZXJ0IC8vIEFtb3VudCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvCiAgICAvLyBzbWFydF9jb250cmFjdHMvc2F2aW5nX3ZhdWx0L2NvbnRyYWN0LmFsZ28udHM6MTA3CiAgICAvLyBhc3NlcnQoYW1vdW50IDw9IHVzZXJEYXRhLmRlcG9zaXRlZCwgJ0Ftb3VudCBncmVhdGVyIHRoYW4gdGhlIGRlcG9zaXRlZCBhbW91bnQnKQogICAgdW5jb3ZlciAyCiAgICA+PQogICAgYXNzZXJ0IC8vIEFtb3VudCBncmVhdGVyIHRoYW4gdGhlIGRlcG9zaXRlZCBhbW91bnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zYXZpbmdfdmF1bHQvY29udHJhY3QuYWxnby50czoxMTEKICAgIC8vIHVzZXJEYXRhLmdvYWwgPiBVaW50NjQoMCkgJiYKICAgIGludGNfMiAvLyA4CiAgICBleHRyYWN0X3VpbnQ2NAogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvc2F2aW5nX3ZhdWx0L2NvbnRyYWN0LmFsZ28udHM6MTExLTExMgogICAgLy8gdXNlckRhdGEuZ29hbCA+IFVpbnQ2NCgwKSAmJgogICAgLy8gdXNlckRhdGEuZ29hbFJlYWNoZWQgPT09IFVpbnQ2NCgwKSAmJgogICAgYm56IHdpdGhkcmF3X2FuZF9jb250ZEAyCiAgICBkaWcgMwoKd2l0aGRyYXdfYWZ0ZXJfaWZfZWxzZUA2OgogICAgLy8gc21hcnRfY29udHJhY3RzL3NhdmluZ192YXVsdC9jb250cmFjdC5hbGdvLnRzOjEyMC0xMjYKICAgIC8vIGNvbnN0IHJlc3VsdCA9IGl0eG4KICAgIC8vICAgLnBheW1lbnQoewogICAgLy8gICAgIHJlY2VpdmVyOiBUeG4uc2VuZGVyLAogICAgLy8gICAgIGFtb3VudDogcGF5b3V0LAogICAgLy8gICAgIGZlZTogVWludDY0KDApLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zYXZpbmdfdmF1bHQvY29udHJhY3QuYWxnby50czoxMjIKICAgIC8vIHJlY2VpdmVyOiBUeG4uc2VuZGVyLAogICAgdHhuIFNlbmRlcgogICAgaXR4bl9maWVsZCBSZWNlaXZlcgogICAgaXR4bl9maWVsZCBBbW91bnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zYXZpbmdfdmF1bHQvY29udHJhY3QuYWxnby50czoxMjAtMTI1CiAgICAvLyBjb25zdCByZXN1bHQgPSBpdHhuCiAgICAvLyAgIC5wYXltZW50KHsKICAgIC8vICAgICByZWNlaXZlcjogVHhuLnNlbmRlciwKICAgIC8vICAgICBhbW91bnQ6IHBheW91dCwKICAgIC8vICAgICBmZWU6IFVpbnQ2NCgwKSwKICAgIC8vICAgfSkKICAgIGludGNfMCAvLyAxCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICAvLyBzbWFydF9jb250cmFjdHMvc2F2aW5nX3ZhdWx0L2NvbnRyYWN0LmFsZ28udHM6MTI0CiAgICAvLyBmZWU6IFVpbnQ2NCgwKSwKICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL3NhdmluZ192YXVsdC9jb250cmFjdC5hbGdvLnRzOjEyMC0xMjYKICAgIC8vIGNvbnN0IHJlc3VsdCA9IGl0eG4KICAgIC8vICAgLnBheW1lbnQoewogICAgLy8gICAgIHJlY2VpdmVyOiBUeG4uc2VuZGVyLAogICAgLy8gICAgIGFtb3VudDogcGF5b3V0LAogICAgLy8gICAgIGZlZTogVWludDY0KDApLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIEFtb3VudAogICAgYnVyeSA2CiAgICAvLyBzbWFydF9jb250cmFjdHMvc2F2aW5nX3ZhdWx0L2NvbnRyYWN0LmFsZ28udHM6MTI4CiAgICAvLyBjb25zdCByZW1haW5pbmc6IHVpbnQ2NCA9IHVzZXJEYXRhLmRlcG9zaXRlZCAtIGFtb3VudAogICAgZGlnIDEKICAgIGRpZyA0CiAgICAtCiAgICBkdXAKICAgIGJ1cnkgOAogICAgLy8gc21hcnRfY29udHJhY3RzL3NhdmluZ192YXVsdC9jb250cmFjdC5hbGdvLnRzOjEzMAogICAgLy8gbGV0IG5ld0dvYWxSZWFjaGVkOiB1aW50NjQgPSB1c2VyRGF0YS5nb2FsUmVhY2hlZAogICAgZGlnIDMKICAgIGludGNfMyAvLyAxNgogICAgZXh0cmFjdF91aW50NjQKICAgIGJ1cnkgOQogICAgLy8gc21hcnRfY29udHJhY3RzL3NhdmluZ192YXVsdC9jb250cmFjdC5hbGdvLnRzOjEzMQogICAgLy8gaWYgKHJlbWFpbmluZyA8IHVzZXJEYXRhLmdvYWwpIHsKICAgIGRpZyAxCiAgICA8CiAgICBieiB3aXRoZHJhd19hZnRlcl9pZl9lbHNlQDkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zYXZpbmdfdmF1bHQvY29udHJhY3QuYWxnby50czoxMzIKICAgIC8vIG5ld0dvYWxSZWFjaGVkID0gVWludDY0KDApCiAgICBpbnRjXzEgLy8gMAogICAgYnVyeSA4Cgp3aXRoZHJhd19hZnRlcl9pZl9lbHNlQDk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvc2F2aW5nX3ZhdWx0L2NvbnRyYWN0LmFsZ28udHM6MTM5CiAgICAvLyB0b3RhbFNhdmluZzogdXNlckRhdGEudG90YWxTYXZpbmcsCiAgICBkaWcgMgogICAgZHVwCiAgICBleHRyYWN0IDI0IDgKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zYXZpbmdfdmF1bHQvY29udHJhY3QuYWxnby50czoxNDAKICAgIC8vIHRvdGFsR29hbHNSZWFjaGVkOiB1c2VyRGF0YS50b3RhbEdvYWxzUmVhY2hlZCwKICAgIGRpZyAxCiAgICBleHRyYWN0IDMyIDgKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zYXZpbmdfdmF1bHQvY29udHJhY3QuYWxnby50czoxNDEKICAgIC8vIGRlYWRsaW5lOiB1c2VyRGF0YS5kZWFkbGluZSwKICAgIHVuY292ZXIgMgogICAgZXh0cmFjdCA0MCA4CiAgICAvLyBzbWFydF9jb250cmFjdHMvc2F2aW5nX3ZhdWx0L2NvbnRyYWN0LmFsZ28udHM6MTM1LTE0MgogICAgLy8gdGhpcy5kZXBvc2l0b3JzKFR4bi5zZW5kZXIpLnZhbHVlID0gewogICAgLy8gICBkZXBvc2l0ZWQ6IHJlbWFpbmluZywKICAgIC8vICAgZ29hbDogdXNlckRhdGEuZ29hbCwKICAgIC8vICAgZ29hbFJlYWNoZWQ6IG5ld0dvYWxSZWFjaGVkLAogICAgLy8gICB0b3RhbFNhdmluZzogdXNlckRhdGEudG90YWxTYXZpbmcsCiAgICAvLyAgIHRvdGFsR29hbHNSZWFjaGVkOiB1c2VyRGF0YS50b3RhbEdvYWxzUmVhY2hlZCwKICAgIC8vICAgZGVhZGxpbmU6IHVzZXJEYXRhLmRlYWRsaW5lLAogICAgLy8gfQogICAgZGlnIDkKICAgIGl0b2IKICAgIGRpZyA0CiAgICBpdG9iCiAgICBjb25jYXQKICAgIGRpZyAxMQogICAgaXRvYgogICAgY29uY2F0CiAgICB1bmNvdmVyIDMKICAgIGNvbmNhdAogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL3NhdmluZ192YXVsdC9jb250cmFjdC5hbGdvLnRzOjI4CiAgICAvLyBkZXBvc2l0b3JzID0gQm94TWFwPEFjY291bnQsIFVzZXJEYXRhPih7IGtleVByZWZpeDogJ2RlcCcgfSkKICAgIGJ5dGVjXzAgLy8gImRlcCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zYXZpbmdfdmF1bHQvY29udHJhY3QuYWxnby50czoxMzUKICAgIC8vIHRoaXMuZGVwb3NpdG9ycyhUeG4uc2VuZGVyKS52YWx1ZSA9IHsKICAgIHR4biBTZW5kZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zYXZpbmdfdmF1bHQvY29udHJhY3QuYWxnby50czoyOAogICAgLy8gZGVwb3NpdG9ycyA9IEJveE1hcDxBY2NvdW50LCBVc2VyRGF0YT4oeyBrZXlQcmVmaXg6ICdkZXAnIH0pCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zYXZpbmdfdmF1bHQvY29udHJhY3QuYWxnby50czoxMzUtMTQyCiAgICAvLyB0aGlzLmRlcG9zaXRvcnMoVHhuLnNlbmRlcikudmFsdWUgPSB7CiAgICAvLyAgIGRlcG9zaXRlZDogcmVtYWluaW5nLAogICAgLy8gICBnb2FsOiB1c2VyRGF0YS5nb2FsLAogICAgLy8gICBnb2FsUmVhY2hlZDogbmV3R29hbFJlYWNoZWQsCiAgICAvLyAgIHRvdGFsU2F2aW5nOiB1c2VyRGF0YS50b3RhbFNhdmluZywKICAgIC8vICAgdG90YWxHb2Fsc1JlYWNoZWQ6IHVzZXJEYXRhLnRvdGFsR29hbHNSZWFjaGVkLAogICAgLy8gICBkZWFkbGluZTogdXNlckRhdGEuZGVhZGxpbmUsCiAgICAvLyB9CiAgICBzd2FwCiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvc2F2aW5nX3ZhdWx0L2NvbnRyYWN0LmFsZ28udHM6MTAxCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGRpZyA1CiAgICBpdG9iCiAgICBieXRlY18yIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgp3aXRoZHJhd19hbmRfY29udGRAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zYXZpbmdfdmF1bHQvY29udHJhY3QuYWxnby50czoxMTIKICAgIC8vIHVzZXJEYXRhLmdvYWxSZWFjaGVkID09PSBVaW50NjQoMCkgJiYKICAgIGRpZyAyCiAgICBpbnRjXzMgLy8gMTYKICAgIGV4dHJhY3RfdWludDY0CiAgICAvLyBzbWFydF9jb250cmFjdHMvc2F2aW5nX3ZhdWx0L2NvbnRyYWN0LmFsZ28udHM6MTExLTExMgogICAgLy8gdXNlckRhdGEuZ29hbCA+IFVpbnQ2NCgwKSAmJgogICAgLy8gdXNlckRhdGEuZ29hbFJlYWNoZWQgPT09IFVpbnQ2NCgwKSAmJgogICAgYnogd2l0aGRyYXdfYW5kX2NvbnRkQDMKICAgIGRpZyAzCiAgICBiIHdpdGhkcmF3X2FmdGVyX2lmX2Vsc2VANgoKd2l0aGRyYXdfYW5kX2NvbnRkQDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvc2F2aW5nX3ZhdWx0L2NvbnRyYWN0LmFsZ28udHM6MTEzCiAgICAvLyBHbG9iYWwubGF0ZXN0VGltZXN0YW1wID4gdXNlckRhdGEuZGVhZGxpbmUgJiYKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIGRpZyAzCiAgICBwdXNoaW50IDQwIC8vIDQwCiAgICBleHRyYWN0X3VpbnQ2NAogICAgZHVwCiAgICBidXJ5IDcKICAgID4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zYXZpbmdfdmF1bHQvY29udHJhY3QuYWxnby50czoxMTEtMTEzCiAgICAvLyB1c2VyRGF0YS5nb2FsID4gVWludDY0KDApICYmCiAgICAvLyB1c2VyRGF0YS5nb2FsUmVhY2hlZCA9PT0gVWludDY0KDApICYmCiAgICAvLyBHbG9iYWwubGF0ZXN0VGltZXN0YW1wID4gdXNlckRhdGEuZGVhZGxpbmUgJiYKICAgIGJueiB3aXRoZHJhd19hbmRfY29udGRANAogICAgZGlnIDMKICAgIGIgd2l0aGRyYXdfYWZ0ZXJfaWZfZWxzZUA2Cgp3aXRoZHJhd19hbmRfY29udGRANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zYXZpbmdfdmF1bHQvY29udHJhY3QuYWxnby50czoxMTEtMTE0CiAgICAvLyB1c2VyRGF0YS5nb2FsID4gVWludDY0KDApICYmCiAgICAvLyB1c2VyRGF0YS5nb2FsUmVhY2hlZCA9PT0gVWludDY0KDApICYmCiAgICAvLyBHbG9iYWwubGF0ZXN0VGltZXN0YW1wID4gdXNlckRhdGEuZGVhZGxpbmUgJiYKICAgIC8vIHVzZXJEYXRhLmRlYWRsaW5lID4gVWludDY0KDApCiAgICBkaWcgNAogICAgYm56IHdpdGhkcmF3X2lmX2JvZHlANQogICAgZGlnIDMKICAgIGIgd2l0aGRyYXdfYWZ0ZXJfaWZfZWxzZUA2Cgp3aXRoZHJhd19pZl9ib2R5QDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvc2F2aW5nX3ZhdWx0L2NvbnRyYWN0LmFsZ28udHM6MTE2CiAgICAvLyBjb25zdCBwZW5hbHR5OiB1aW50NjQgPSAoYW1vdW50ICogdGhpcy5wZW5hbHR5UGVyY2VudC52YWx1ZSkgLyBVaW50NjQoMTAwKQogICAgaW50Y18xIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zYXZpbmdfdmF1bHQvY29udHJhY3QuYWxnby50czoyOQogICAgLy8gcGVuYWx0eVBlcmNlbnQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoMTApLCBrZXk6ICdwZW5hbHR5JyB9KQogICAgYnl0ZWNfMSAvLyAicGVuYWx0eSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zYXZpbmdfdmF1bHQvY29udHJhY3QuYWxnby50czoxMTYKICAgIC8vIGNvbnN0IHBlbmFsdHk6IHVpbnQ2NCA9IChhbW91bnQgKiB0aGlzLnBlbmFsdHlQZXJjZW50LnZhbHVlKSAvIFVpbnQ2NCgxMDApCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZGlnIDQKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICAqCiAgICBwdXNoaW50IDEwMCAvLyAxMDAKICAgIC8KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zYXZpbmdfdmF1bHQvY29udHJhY3QuYWxnby50czoxMTcKICAgIC8vIHBheW91dCA9IGFtb3VudCAtIHBlbmFsdHkKICAgIC0KICAgIGIgd2l0aGRyYXdfYWZ0ZXJfaWZfZWxzZUA2Cg==", "clear": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "byteCode": { "approval": "CyAEAQAIECYDA2RlcAdwZW5hbHR5BBUffHUxGEAABCmBCmcxG0EAKzEZFEQxGESCBAQh21pIBPpDA7oEMpjnwAQxIUF2NhoAjgQACwBNAKMBNQAxGRQxGBQQRCJDKDEAUL1FARREKDEAUIAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvyJDNhoBSRUkEkQXNhoCSRUkEkQXKDEAUL1FAURLAUQoMQBQvkRJJFsURDIHTwIISwFXAAhLAlcYCE8DVyAITwQWTwNMUCMWUE8CUExQTBZQKDEAUEy/IkMxFiIJSTgQIhJESTgHMgoSRDgISUQoMQBQvUUBRCgxAFC+REkkW0lOA0lESwEjW0sDCElOA04ESwGBGFtPBAhOA0sBJVtOA0sBgSBbTgNMgShbTgIPQQAUSwJAAA8iRQNLASIIRQIjRQYjRQFLBBZLBhZQSwMWUEsEFlBLAhZMSwFQSwIWUCgxAFBMvypMULAiQ4AARwM2GgFJFSQSRBdJKDEAUL1FAUQoMQBQvkxJTgJOA0RJI1tJTgNJREsCRE8CD0QkW0lAAF1LA7ExALIHsggishAjsgGztAhFBksBSwQJSUUISwMlW0UJSwEMQQADI0UISwJJVxgISwFXIAhPAlcoCEsJFksEFlBLCxZQTwNQTwJQTFAoMQBQTL9LBRYqTFCwIkNLAiVbQQAFSwNC/5kyB0sDgShbSUUHDUAABUsDQv+GSwRAAAVLA0L/fCMpZURLBElPAguBZAoJQv9r", "clear": "C4EBQw==" }, "compilerInfo": { "compiler": "puya", "compilerVersion": { "major": 5, "minor": 3, "patch": 2 } }, "events": [], "templateVariables": {} }