tx · H9Cf4CHaWjbN78PHYb1od6pdEbE5bMMhVHxaxWF5HvLU

3MrbnZkriTBZhRqS45L1VfCrden6Erpa7To:  -0.01400000 Waves

2021.12.15 15:38 [1835386] smart account 3MrbnZkriTBZhRqS45L1VfCrden6Erpa7To > SELF 0.00000000 Waves

{ "type": 13, "id": "H9Cf4CHaWjbN78PHYb1od6pdEbE5bMMhVHxaxWF5HvLU", "fee": 1400000, "feeAssetId": null, "timestamp": 1639571969118, "version": 1, "sender": "3MrbnZkriTBZhRqS45L1VfCrden6Erpa7To", "senderPublicKey": "63obiHRgG6hmZ9wxY6Lve4XmWN3XBCrDahV6tZwhsJEY", "proofs": [ "2ZYspawtcj6EUhngES95HevWbD3gx2CoaGaTA3NQNPExGHLrKTHoYJ86UeSzvWGy2StsB9jDsrWXnczgr3jjRbPY" ], "script": "base64:AAIFAAAAAAAAADwIAhIKCggICAgICAgIARIDCgEIEgYKBAgICAgSCQoHCAgICAgBCBIECgIIARIDCgEBEgMKAQESBAoCCAgAAABFAAAAAAZTQ0FMRTgAAAAAAAAAAAgAAAAABU1VTFQ4AAAAAAAF9eEAAAAAAAdTQ0FMRTE4AAAAAAAAAAASAAAAAAZNVUxUMTgJAAE2AAAAAQAN4Lazp2QAAAAAAAAOUE9PTFdFSUdIVE1VTFQFAAAABU1VTFQ4AAAAAA5HV1h2aXJ0dWFsUE9PTAIAAAAOR1dYdmlydHVhbFBPT0wAAAAAEWRlY2ltYWxzTXVsdFByaWNlCQAAaAAAAAIJAABoAAAAAgAAAAAAAAAAZAAAAAAAAAAD6AAAAAAAAAAD6AAAAAADU0VQAgAAAAJfXwAAAAAKUG9vbEFjdGl2ZQAAAAAAAAAAAQAAAAAPUG9vbFB1dERpc2FibGVkAAAAAAAAAAACAAAAABNQb29sTWF0Y2hlckRpc2FibGVkAAAAAAAAAAADAAAAAAxQb29sU2h1dGRvd24AAAAAAAAAAAQAAAAAEmlkeEludGVybmFsQXNzZXRJZAAAAAAAAAAAAQAAAAAPaWR4UmVzdXRBY3Rpb25zAAAAAAAAAAACAAAAACBpZHhJZkFzc2V0SWRDYWxjdWxhdGlvblBlcmZvcm1lZAAAAAAAAAAAAwAAAAAOaWR4UG9vbEFkZHJlc3MAAAAAAAAAAAEAAAAADWlkeFBvb2xTdGF0dXMAAAAAAAAAAAIAAAAAEGlkeFBvb2xMUEFzc2V0SWQAAAAAAAAAAAMAAAAADWlkeEFtdEFzc2V0SWQAAAAAAAAAAAQAAAAAD2lkeFByaWNlQXNzZXRJZAAAAAAAAAAABQAAAAAOaWR4QW10QXNzZXREY20AAAAAAAAAAAYAAAAAEGlkeFByaWNlQXNzZXREY20AAAAAAAAAAAcAAAAADmlkeElBbXRBc3NldElkAAAAAAAAAAAIAAAAABBpZHhJUHJpY2VBc3NldElkAAAAAAAAAAAJAAAAAA1pZHhMUEFzc2V0RGNtAAAAAAAAAAAKAAAAAAtpZHhQb29sVHlwZQAAAAAAAAAACwEAAAAQa2V5RmFjdG9yeUNvbmZpZwAAAAACAAAAESVzX19mYWN0b3J5Q29uZmlnAQAAAA9rZXlMcFRva2Vuc0xpc3QAAAAAAgAAABAlc19fbHBUb2tlbnNMaXN0AQAAABFrZXlQb29sU2NyaXB0SGFzaAAAAAACAAAAFiVzJXNfX3Bvb2xfX3NjcmlwdEhhc2gBAAAADWtleU1hdGNoZXJQdWIAAAAAAgAAABglcyVzX19tYXRjaGVyX19wdWJsaWNLZXkBAAAAEGtleVByaWNlRGVjaW1hbHMAAAAAAgAAABElc19fcHJpY2VEZWNpbWFscwEAAAATa2V5QWxsUG9vbHNTaHV0ZG93bgAAAAACAAAADCVzX19zaHV0ZG93bgEAAAAWa2V5TmV4dEludGVybmFsQXNzZXRJZAAAAAACAAAAFyVzX19uZXh0SW50ZXJuYWxBc3NldElkAQAAAA9rZXlQb29sVG9XZWlnaHQAAAABAAAAC3Bvb2xBZGRyZXNzCQABLAAAAAICAAAAEiVzJXNfX3Bvb2xXZWlnaHRfXwUAAAALcG9vbEFkZHJlc3MBAAAAFmtleVBvb2xUb1dlaWdodEhpc3RvcnkAAAACAAAAC3Bvb2xBZGRyZXNzAAAAA251bQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAASJXMlc19fcG9vbFdlaWdodF9fBQAAAAtwb29sQWRkcmVzcwIAAAACX18JAAGkAAAAAQUAAAADbnVtAQAAAB9rZXlNYXBwaW5nc0ludGVybmFsMmJhc2VBc3NldElkAAAAAQAAABFpbnRlcm5hbEJhc2VBc3NldAkAASwAAAACAgAAACglcyVzJWRfX21hcHBpbmdzX19pbnRlcm5hbDJiYXNlQXNzZXRJZF9fCQABpAAAAAEFAAAAEWludGVybmFsQmFzZUFzc2V0AQAAAB9rZXlNYXBwaW5nc0Jhc2VBc3NldDJpbnRlcm5hbElkAAAAAQAAAAxiYXNlQXNzZXRTdHIJAAEsAAAAAgIAAAAoJXMlcyVzX19tYXBwaW5nc19fYmFzZUFzc2V0MmludGVybmFsSWRfXwUAAAAMYmFzZUFzc2V0U3RyAQAAAA1rZXlQb29sQ29uZmlnAAAAAgAAABNhbW91bnRBc3NldEludGVybmFsAAAAEnByaWNlQXNzZXRJbnRlcm5hbAkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAglZCVkJXNfXwUAAAATYW1vdW50QXNzZXRJbnRlcm5hbAIAAAACX18FAAAAEnByaWNlQXNzZXRJbnRlcm5hbAIAAAAIX19jb25maWcBAAAAHWtleU1hcHBpbmdMcEFzc2V0VG9Qb29sQXNzZXRzAAAAAQAAAApscEFzc2V0U3RyCQABLAAAAAIJAAEsAAAAAgIAAAAIJXMlcyVzX18FAAAACmxwQXNzZXRTdHICAAAAGF9fbWFwcGluZ3NfX2xwQXNzZXQyUG9vbAEAAAAda2V5TWFwcGluZ1Bvb2xBc3NldHNUb0xwYXNzZXQAAAACAAAAGGludGVybmFsQW1vdW50QXNzZXRJZFN0cgAAABdpbnRlcm5hbFByaWNlQXNzZXRJZFN0cgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAolZCVkJXMlc19fBQAAABhpbnRlcm5hbEFtb3VudEFzc2V0SWRTdHICAAAAAl9fBQAAABdpbnRlcm5hbFByaWNlQXNzZXRJZFN0cgIAAAAeX19tYXBwaW5nc19fUG9vbEFzc2V0czJMcEFzc2V0AQAAAClrZXlNYXBwaW5nUG9vbENvbnRyYWN0QWRkcmVzc1RvUG9vbEFzc2V0cwAAAAEAAAATcG9vbENvbnRyYWN0QWRkcmVzcwkAASwAAAACCQABLAAAAAICAAAACCVzJXMlc19fBQAAABNwb29sQ29udHJhY3RBZGRyZXNzAgAAACNfX21hcHBpbmdzX19wb29sQ29udHJhY3QyUG9vbEFzc2V0cwEAAAApa2V5TWFwcGluZ1Bvb2xBc3NldHNUb1Bvb2xDb250cmFjdEFkZHJlc3MAAAACAAAAGGludGVybmFsQW1vdW50QXNzZXRJZFN0cgAAABdpbnRlcm5hbFByaWNlQXNzZXRJZFN0cgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAolZCVkJXMlc19fCQABpAAAAAEFAAAAGGludGVybmFsQW1vdW50QXNzZXRJZFN0cgIAAAACX18JAAGkAAAAAQUAAAAXaW50ZXJuYWxQcmljZUFzc2V0SWRTdHICAAAAI19fbWFwcGluZ3NfX3Bvb2xBc3NldHMyUG9vbENvbnRyYWN0AQAAAB5rZXlNYXBwaW5nUG9vbENvbnRyYWNUb0xQQXNzZXQAAAABAAAAE3Bvb2xDb250cmFjdEFkZHJlc3MJAAEsAAAAAgkAASwAAAACAgAAAAglcyVzJXNfXwUAAAATcG9vbENvbnRyYWN0QWRkcmVzcwIAAAAgX19tYXBwaW5nc19fcG9vbENvbnRyYWN0MkxwQXNzZXQBAAAAKmtleU1hcHBpbmdQb29sTFBBc3NldFRvUG9vbENvbnRyYWN0QWRkcmVzcwAAAAEAAAAKbHBBc3NldFN0cgkAASwAAAACCQABLAAAAAICAAAACCVzJXMlc19fBQAAAApscEFzc2V0U3RyAgAAACBfX21hcHBpbmdzX19scEFzc2V0MlBvb2xDb250cmFjdAEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAQAAAANrZXkJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABB0AAAACBQAAAAR0aGlzBQAAAANrZXkJAAEsAAAAAgIAAAAVTm8gZGF0YSBmb3IgdGhpcy5rZXk9BQAAAANrZXkBAAAAEGdldEJvb2xlYW5PckZhaWwAAAABAAAAA2tleQkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEGwAAAAIFAAAABHRoaXMFAAAAA2tleQkAASwAAAACAgAAABVObyBkYXRhIGZvciB0aGlzLmtleT0FAAAAA2tleQEAAAAMZ2V0SW50T3JGYWlsAAAAAQAAAANrZXkJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABBoAAAACBQAAAAR0aGlzBQAAAANrZXkJAAEsAAAAAgIAAAAVTm8gZGF0YSBmb3IgdGhpcy5rZXk9BQAAAANrZXkAAAAAGElkeEZhY3RvcnlDZmdTdGFraW5nRGFwcAAAAAAAAAAAAQAAAAAZSWR4RmFjdG9yeUNmZ0Jvb3N0aW5nRGFwcAAAAAAAAAAAAgAAAAAUSWR4RmFjdG9yeUNmZ0lkb0RhcHAAAAAAAAAAAAMAAAAAFUlkeEZhY3RvcnlDZmdUZWFtRGFwcAAAAAAAAAAABAAAAAAZSWR4RmFjdG9yeUNmZ0VtaXNzaW9uRGFwcAAAAAAAAAAABQAAAAAVSWR4RmFjdG9yeUNmZ1Jlc3REYXBwAAAAAAAAAAAGAAAAABlJZHhGYWN0b3J5Q2ZnU2xpcHBhZ2VEYXBwAAAAAAAAAAAHAAAAABRJZHhGYWN0b3J5Q2ZnRGFvRGFwcAAAAAAAAAAACAAAAAAaSWR4RmFjdG9yeUNmZ01hcmtldGluZ0RhcHAAAAAAAAAAAAkAAAAAGklkeEZhY3RvcnlDZmdHd3hSZXdhcmREYXBwAAAAAAAAAAAKAAAAABZJZHhGYWN0b3J5Q2ZnQmlyZHNEYXBwAAAAAAAAAAALAQAAABhnZXRCb29zdGluZ0FkZHJlc3NPckZhaWwAAAABAAAACmZhY3RvcnlDZmcJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEJAAGRAAAAAgUAAAAKZmFjdG9yeUNmZwUAAAAZSWR4RmFjdG9yeUNmZ0Jvb3N0aW5nRGFwcAEAAAAYZ2V0RW1pc3Npb25BZGRyZXNzT3JGYWlsAAAAAQAAAApmYWN0b3J5Q2ZnCQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABCQABkQAAAAIFAAAACmZhY3RvcnlDZmcFAAAAGUlkeEZhY3RvcnlDZmdFbWlzc2lvbkRhcHABAAAAF2dldFN0YWtpbmdBZGRyZXNzT3JGYWlsAAAAAQAAAApmYWN0b3J5Q2ZnCQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABCQABkQAAAAIFAAAACmZhY3RvcnlDZmcFAAAAGElkeEZhY3RvcnlDZmdTdGFraW5nRGFwcAEAAAAZZ2V0R3d4UmV3YXJkQWRkcmVzc09yRmFpbAAAAAEAAAAKZmFjdG9yeUNmZwkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQkAAZEAAAACBQAAAApmYWN0b3J5Q2ZnBQAAABpJZHhGYWN0b3J5Q2ZnR3d4UmV3YXJkRGFwcAEAAAAQZGF0YUZhY3RvcnlDZmdWMwAAAAsAAAAOc3Rha2luZ0FkZHJlc3MAAAAPYm9vc3RpbmdBZGRyZXNzAAAAC2lkb0NvbnRyYWN0AAAADHRlYW1Db250cmFjdAAAABBlbWlzc2lvbkNvbnRyYWN0AAAADHJlc3RDb250cmFjdAAAABBzbGlwcGFnZUNvbnRyYWN0AAAAC2Rhb0NvbnRyYWN0AAAAEW1hcmtldGluZ0NvbnRyYWN0AAAAEmd3eFJld2FyZHNDb250cmFjdAAAAA1iaXJkc0NvbnRyYWN0CQAEuQAAAAIJAARMAAAAAgIAAAAWJXMlcyVzJXMlcyVzJXMlcyVzJXMlcwkABEwAAAACBQAAAA5zdGFraW5nQWRkcmVzcwkABEwAAAACBQAAAA9ib29zdGluZ0FkZHJlc3MJAARMAAAAAgUAAAALaWRvQ29udHJhY3QJAARMAAAAAgUAAAAMdGVhbUNvbnRyYWN0CQAETAAAAAIFAAAAEGVtaXNzaW9uQ29udHJhY3QJAARMAAAAAgUAAAAMcmVzdENvbnRyYWN0CQAETAAAAAIFAAAAEHNsaXBwYWdlQ29udHJhY3QJAARMAAAAAgUAAAALZGFvQ29udHJhY3QJAARMAAAAAgUAAAARbWFya2V0aW5nQ29udHJhY3QJAARMAAAAAgUAAAASZ3d4UmV3YXJkc0NvbnRyYWN0CQAETAAAAAIFAAAADWJpcmRzQ29udHJhY3QFAAAAA25pbAUAAAADU0VQAQAAAA5kYXRhRmFjdG9yeUNmZwAAAAcAAAAOc3Rha2luZ0FkZHJlc3MAAAAPYm9vc3RpbmdBZGRyZXNzAAAAC2lkb0NvbnRyYWN0AAAADHRlYW1Db250cmFjdAAAABBlbWlzc2lvbkNvbnRyYWN0AAAADHJlc3RDb250cmFjdAAAABBzbGlwcGFnZUNvbnRyYWN0CQAEuQAAAAIJAARMAAAAAgIAAAAMJXMlcyVzJXMlcyVzCQAETAAAAAIFAAAADnN0YWtpbmdBZGRyZXNzCQAETAAAAAIFAAAAD2Jvb3N0aW5nQWRkcmVzcwkABEwAAAACBQAAAAtpZG9Db250cmFjdAkABEwAAAACBQAAAAx0ZWFtQ29udHJhY3QJAARMAAAAAgUAAAAQZW1pc3Npb25Db250cmFjdAkABEwAAAACBQAAAAxyZXN0Q29udHJhY3QJAARMAAAAAgUAAAAQc2xpcHBhZ2VDb250cmFjdAUAAAADbmlsBQAAAANTRVABAAAAC2RhdGFQb29sQ2ZnAAAACwAAAAtwb29sQWRkcmVzcwAAAApwb29sU3RhdHVzAAAACWxwQXNzZXRJZAAAAA5hbW91bnRBc3NldFN0cgAAAA1wcmljZUFzc2V0U3RyAAAAE2Ftb3VudEFzc2V0RGVjaW1hbHMAAAAScHJpY2VBc3NldERlY2ltYWxzAAAAFWFtb3VudEFzc2V0SW50ZXJuYWxJZAAAABRwcmljZUFzc2V0SW50ZXJuYWxJZAAAAA9scEFzc2V0RGVjaW1hbHMAAAAIcG9vbFR5cGUJAAS5AAAAAgkABEwAAAACAgAAABYlcyVkJXMlcyVzJWQlZCVkJWQlZCVzCQAETAAAAAIFAAAAC3Bvb2xBZGRyZXNzCQAETAAAAAIFAAAACnBvb2xTdGF0dXMJAARMAAAAAgUAAAAJbHBBc3NldElkCQAETAAAAAIFAAAADmFtb3VudEFzc2V0U3RyCQAETAAAAAIFAAAADXByaWNlQXNzZXRTdHIJAARMAAAAAgkAAaQAAAABBQAAABNhbW91bnRBc3NldERlY2ltYWxzCQAETAAAAAIJAAGkAAAAAQUAAAAScHJpY2VBc3NldERlY2ltYWxzCQAETAAAAAIJAAGkAAAAAQUAAAAVYW1vdW50QXNzZXRJbnRlcm5hbElkCQAETAAAAAIJAAGkAAAAAQUAAAAUcHJpY2VBc3NldEludGVybmFsSWQJAARMAAAAAgkAAaQAAAABBQAAAA9scEFzc2V0RGVjaW1hbHMJAARMAAAAAgUAAAAIcG9vbFR5cGUFAAAAA25pbAUAAAADU0VQAQAAABVkYXRhTWFwcGluZ1Bvb2xBc3NldHMAAAACAAAAFmludGVybmFsQW1vdW50QXNzZXRTdHIAAAAVaW50ZXJuYWxQcmljZUFzc2V0U3RyCQAEuQAAAAIJAARMAAAAAgIAAAAEJWQlZAkABEwAAAACCQABpAAAAAEFAAAAFmludGVybmFsQW1vdW50QXNzZXRTdHIJAARMAAAAAgkAAaQAAAABBQAAABVpbnRlcm5hbFByaWNlQXNzZXRTdHIFAAAAA25pbAUAAAADU0VQAQAAAA1nZXRQb29sQ29uZmlnAAAAAQAAAAtwb29sQWRkcmVzcwQAAAAKcG9vbEFzc2V0cwkABLUAAAACCQEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAQkBAAAAKWtleU1hcHBpbmdQb29sQ29udHJhY3RBZGRyZXNzVG9Qb29sQXNzZXRzAAAAAQUAAAALcG9vbEFkZHJlc3MFAAAAA1NFUAQAAAATYW1vdW50QXNzZXRJbnRlcm5hbAkAAZEAAAACBQAAAApwb29sQXNzZXRzAAAAAAAAAAABBAAAABJwcmljZUFzc2V0SW50ZXJuYWwJAAGRAAAAAgUAAAAKcG9vbEFzc2V0cwAAAAAAAAAAAgkABLUAAAACCQEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAQkBAAAADWtleVBvb2xDb25maWcAAAACBQAAABNhbW91bnRBc3NldEludGVybmFsBQAAABJwcmljZUFzc2V0SW50ZXJuYWwFAAAAA1NFUAEAAAAaZ2V0SW50ZXJuYWxBc3NldElkT3JDcmVhdGUAAAACAAAACmFzc2V0SWRTdHIAAAALaW5jcmVtZW50b3IEAAAAD2ludGVybmFsQXNzZXRJZAkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAR0aGlzCQEAAAAfa2V5TWFwcGluZ3NCYXNlQXNzZXQyaW50ZXJuYWxJZAAAAAEFAAAACmFzc2V0SWRTdHIAAAAAAAAAAAAEAAAAGGN1cnJlbnRJbmRleE9mSW50ZXJuYWxJZAkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAR0aGlzCQEAAAAWa2V5TmV4dEludGVybmFsQXNzZXRJZAAAAAAAAAAAAAAAAAAEAAAABnJlc3VsdAMJAAAAAAAAAgUAAAAPaW50ZXJuYWxBc3NldElkAAAAAAAAAAAABAAAABJuZXdJbnRlcm5hbEFzc2V0SWQJAABkAAAAAgUAAAAYY3VycmVudEluZGV4T2ZJbnRlcm5hbElkBQAAAAtpbmNyZW1lbnRvcgkABRUAAAADBQAAABJuZXdJbnRlcm5hbEFzc2V0SWQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABZrZXlOZXh0SW50ZXJuYWxBc3NldElkAAAAAAUAAAASbmV3SW50ZXJuYWxBc3NldElkCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAfa2V5TWFwcGluZ3NCYXNlQXNzZXQyaW50ZXJuYWxJZAAAAAEFAAAACmFzc2V0SWRTdHIFAAAAEm5ld0ludGVybmFsQXNzZXRJZAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAfa2V5TWFwcGluZ3NJbnRlcm5hbDJiYXNlQXNzZXRJZAAAAAEFAAAAEm5ld0ludGVybmFsQXNzZXRJZAUAAAAKYXNzZXRJZFN0cgUAAAADbmlsBgkABRUAAAADBQAAAA9pbnRlcm5hbEFzc2V0SWQFAAAAA25pbAcFAAAABnJlc3VsdAEAAAAXY3JlYXRlTHBUb2tlbnNMaXN0RW50cnkAAAABAAAACm5ld0xwVG9rZW4EAAAACGxwVG9rZW5zCQAEHQAAAAIFAAAABHRoaXMJAQAAAA9rZXlMcFRva2Vuc0xpc3QAAAAAAwkBAAAACWlzRGVmaW5lZAAAAAEFAAAACGxwVG9rZW5zCQABLAAAAAIJAAEsAAAAAgkBAAAABXZhbHVlAAAAAQUAAAAIbHBUb2tlbnMFAAAAA1NFUAUAAAAKbmV3THBUb2tlbgUAAAAKbmV3THBUb2tlbgAAAAgAAAABaQEAAAALY29uc3RydWN0b3IAAAAIAAAAD3N0YWtpbmdDb250cmFjdAAAABBib29zdGluZ0NvbnRyYWN0AAAAC2lkb0NvbnRyYWN0AAAADHRlYW1Db250cmFjdAAAABBlbWlzc2lvbkNvbnRyYWN0AAAADHJlc3RDb250cmFjdAAAABBzbHBpcGFnZUNvbnRyYWN0AAAADXByaWNlRGVjaW1hbHMDCQEAAAACIT0AAAACCAUAAAABaQAAAAZjYWxsZXIFAAAABHRoaXMJAAACAAAAAQIAAAAScGVybWlzc2lvbnMgZGVuaWVkCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABBrZXlGYWN0b3J5Q29uZmlnAAAAAAkBAAAADmRhdGFGYWN0b3J5Q2ZnAAAABwUAAAAPc3Rha2luZ0NvbnRyYWN0BQAAABBib29zdGluZ0NvbnRyYWN0BQAAAAtpZG9Db250cmFjdAUAAAAMdGVhbUNvbnRyYWN0BQAAABBlbWlzc2lvbkNvbnRyYWN0BQAAAAxyZXN0Q29udHJhY3QFAAAAEHNscGlwYWdlQ29udHJhY3QJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABBrZXlQcmljZURlY2ltYWxzAAAAAAUAAAANcHJpY2VEZWNpbWFscwUAAAADbmlsAAAAAWkBAAAADWNvbnN0cnVjdG9yVjIAAAABAAAAEG1hdGhjaGVyUHViNThTdHIDCQEAAAACIT0AAAACCAUAAAABaQAAAAZjYWxsZXIFAAAABHRoaXMJAAACAAAAAQIAAAAScGVybWlzc2lvbnMgZGVuaWVkBAAAAAptYXRoY2VyUHViCQEAAAAUYWRkcmVzc0Zyb21QdWJsaWNLZXkAAAABCQACWQAAAAEFAAAAEG1hdGhjaGVyUHViNThTdHIDCQAAAAAAAAIFAAAACm1hdGhjZXJQdWIFAAAACm1hdGhjZXJQdWIJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAADWtleU1hdGNoZXJQdWIAAAAABQAAABBtYXRoY2hlclB1YjU4U3RyBQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAADWNvbnN0cnVjdG9yVjMAAAAEAAAAC2Rhb0NvbnRyYWN0AAAAEW1hcmtldGluZ0NvbnRyYWN0AAAAEmd3eFJld2FyZHNDb250cmFjdAAAAA1iaXJkc0NvbnRyYWN0AwkBAAAAAiE9AAAAAggFAAAAAWkAAAAGY2FsbGVyBQAAAAR0aGlzCQAAAgAAAAECAAAAEnBlcm1pc3Npb25zIGRlbmllZAQAAAAKZmFjdG9yeUNmZwkABLUAAAACCQEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAQkBAAAAEGtleUZhY3RvcnlDb25maWcAAAAABQAAAANTRVAJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAEGtleUZhY3RvcnlDb25maWcAAAAACQEAAAAQZGF0YUZhY3RvcnlDZmdWMwAAAAsJAAGRAAAAAgUAAAAKZmFjdG9yeUNmZwAAAAAAAAAAAQkAAZEAAAACBQAAAApmYWN0b3J5Q2ZnAAAAAAAAAAACCQABkQAAAAIFAAAACmZhY3RvcnlDZmcAAAAAAAAAAAMJAAGRAAAAAgUAAAAKZmFjdG9yeUNmZwAAAAAAAAAABAkAAZEAAAACBQAAAApmYWN0b3J5Q2ZnAAAAAAAAAAAFCQABkQAAAAIFAAAACmZhY3RvcnlDZmcAAAAAAAAAAAYJAAGRAAAAAgUAAAAKZmFjdG9yeUNmZwAAAAAAAAAABwUAAAALZGFvQ29udHJhY3QFAAAAEW1hcmtldGluZ0NvbnRyYWN0BQAAABJnd3hSZXdhcmRzQ29udHJhY3QFAAAADWJpcmRzQ29udHJhY3QFAAAAA25pbAAAAAFpAQAAAA9hY3RpdmF0ZU5ld1Bvb2wAAAAHAAAAC3Bvb2xBZGRyZXNzAAAADmFtb3VudEFzc2V0U3RyAAAADXByaWNlQXNzZXRTdHIAAAALbHBBc3NldE5hbWUAAAAMbHBBc3NldERlc2NyAAAACnBvb2xXZWlnaHQAAAAIcG9vbFR5cGUDCQEAAAACIT0AAAACCAUAAAABaQAAAAZjYWxsZXIFAAAABHRoaXMJAAACAAAAAQIAAAAScGVybWlzc2lvbnMgZGVuaWVkAwkBAAAACWlzRGVmaW5lZAAAAAEJAAQiAAAAAQkBAAAAKWtleU1hcHBpbmdQb29sQ29udHJhY3RBZGRyZXNzVG9Qb29sQXNzZXRzAAAAAQUAAAALcG9vbEFkZHJlc3MJAAACAAAAAQkAASwAAAACCQABLAAAAAICAAAADVBvb2wgYWRkcmVzcyAFAAAAC3Bvb2xBZGRyZXNzAgAAABQgYWxyZWFkeSByZWdpc3RlcmVkLgQAAAAXaW50ZXJuYWxBbW91bnRBc3NldERhdGEJAQAAABpnZXRJbnRlcm5hbEFzc2V0SWRPckNyZWF0ZQAAAAIFAAAADmFtb3VudEFzc2V0U3RyAAAAAAAAAAABBAAAABVpbnRlcm5hbEFtb3VudEFzc2V0SWQIBQAAABdpbnRlcm5hbEFtb3VudEFzc2V0RGF0YQAAAAJfMQQAAAAWaW50ZXJuYWxQcmljZUFzc2V0RGF0YQkBAAAAGmdldEludGVybmFsQXNzZXRJZE9yQ3JlYXRlAAAAAgUAAAANcHJpY2VBc3NldFN0cgMIBQAAABdpbnRlcm5hbEFtb3VudEFzc2V0RGF0YQAAAAJfMwAAAAAAAAAAAgAAAAAAAAAAAQQAAAAUaW50ZXJuYWxQcmljZUFzc2V0SWQIBQAAABZpbnRlcm5hbFByaWNlQXNzZXREYXRhAAAAAl8xBAAAABVwb29sQWNjb3VudFNjcmlwdEhhc2gJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkAA/EAAAABCQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABBQAAAAtwb29sQWRkcmVzcwkAASwAAAACAgAAAClObyBzY3JpcHQgaGFzIGJlZW4gZm91bmQgb24gcG9vbCBhY2NvdW50IAUAAAALcG9vbEFkZHJlc3MEAAAAHGV0aGFsb25Qb29sQWNjb3VudFNjcmlwdEhhc2gJAQAAABFAZXh0ck5hdGl2ZSgxMDU3KQAAAAEJAQAAABFrZXlQb29sU2NyaXB0SGFzaAAAAAAEAAAACnBvb2xDb25maWcJAAQdAAAAAgUAAAAEdGhpcwkBAAAADWtleVBvb2xDb25maWcAAAACCQABpAAAAAEFAAAAFWludGVybmFsQW1vdW50QXNzZXRJZAkAAaQAAAABBQAAABRpbnRlcm5hbFByaWNlQXNzZXRJZAMJAQAAAAlpc0RlZmluZWQAAAABBQAAAApwb29sQ29uZmlnCQAAAgAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAFUG9vbCAFAAAADmFtb3VudEFzc2V0U3RyAgAAAAEvBQAAAA1wcmljZUFzc2V0U3RyAgAAABwgaGFzIGFscmVhZHkgYmVlbiBhY3RpdmF0ZWQuBAAAAA9wb29sQ29uZmlnVmFsdWUJAQAAAAV2YWx1ZQAAAAEJAAQdAAAAAgUAAAAEdGhpcwkBAAAADWtleVBvb2xDb25maWcAAAACCQABpAAAAAEFAAAAFWludGVybmFsQW1vdW50QXNzZXRJZAkAAaQAAAABBQAAABRpbnRlcm5hbFByaWNlQXNzZXRJZAQAAAAUYW1vdW50QXNzZXRzRGVjaW1hbHMDCQAAAAAAAAIFAAAADmFtb3VudEFzc2V0U3RyAgAAAAVXQVZFUwUAAAARZGVjaW1hbHNNdWx0UHJpY2UJAABsAAAABgAAAAAAAAAACgAAAAAAAAAAAAgJAQAAAAV2YWx1ZQAAAAEJAAPsAAAAAQkAAlkAAAABBQAAAA5hbW91bnRBc3NldFN0cgAAAAhkZWNpbWFscwAAAAAAAAAAAAAAAAAAAAAAAAUAAAAERE9XTgQAAAATcHJpY2VBc3NldHNEZWNpbWFscwMJAAAAAAAAAgUAAAANcHJpY2VBc3NldFN0cgIAAAAFV0FWRVMFAAAAEWRlY2ltYWxzTXVsdFByaWNlCQAAbAAAAAYAAAAAAAAAAAoAAAAAAAAAAAAICQEAAAAFdmFsdWUAAAABCQAD7AAAAAEJAAJZAAAAAQUAAAANcHJpY2VBc3NldFN0cgAAAAhkZWNpbWFscwAAAAAAAAAAAAAAAAAAAAAAAAUAAAAERE9XTgQAAAASbHBBc3NldElzc3VlQWN0aW9uCQAEQgAAAAUFAAAAC2xwQXNzZXROYW1lBQAAAAxscEFzc2V0RGVzY3IAAAAAAAAAAAEAAAAAAAAAAAgGBAAAAAlscEFzc2V0SWQJAAQ4AAAAAQUAAAASbHBBc3NldElzc3VlQWN0aW9uBAAAAAxscEFzc2V0SWRTdHIJAAJYAAAAAQUAAAAJbHBBc3NldElkBAAAABhwb29sQWN0aXZhdGVJbnZva2VSZXN1bHQJAAP8AAAABAkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQUAAAALcG9vbEFkZHJlc3MCAAAACGFjdGl2YXRlCQAETAAAAAIFAAAADmFtb3VudEFzc2V0U3RyCQAETAAAAAIFAAAADXByaWNlQXNzZXRTdHIFAAAAA25pbAUAAAADbmlsAwkAAAAAAAACBQAAABhwb29sQWN0aXZhdGVJbnZva2VSZXN1bHQFAAAAGHBvb2xBY3RpdmF0ZUludm9rZVJlc3VsdAMJAQAAAAIhPQAAAAIFAAAAGHBvb2xBY3RpdmF0ZUludm9rZVJlc3VsdAIAAAAHc3VjY2VzcwkAAAIAAAABAgAAACNQb29sIGluaXRpYWxpc2F0aW9uIGVycm9yIGhhcHBlbmVkLgkABRQAAAACCQAETgAAAAIJAAROAAAAAggFAAAAF2ludGVybmFsQW1vdW50QXNzZXREYXRhAAAAAl8yCAUAAAAWaW50ZXJuYWxQcmljZUFzc2V0RGF0YQAAAAJfMgkABEwAAAACBQAAABJscEFzc2V0SXNzdWVBY3Rpb24JAARMAAAAAgkBAAAABEJ1cm4AAAACBQAAAAlscEFzc2V0SWQAAAAAAAAAAAEJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAADWtleVBvb2xDb25maWcAAAACCQABpAAAAAEFAAAAFWludGVybmFsQW1vdW50QXNzZXRJZAkAAaQAAAABBQAAABRpbnRlcm5hbFByaWNlQXNzZXRJZAkBAAAAC2RhdGFQb29sQ2ZnAAAACwUAAAALcG9vbEFkZHJlc3MJAAGkAAAAAQUAAAAKUG9vbEFjdGl2ZQUAAAAMbHBBc3NldElkU3RyBQAAAA5hbW91bnRBc3NldFN0cgUAAAANcHJpY2VBc3NldFN0cgUAAAAUYW1vdW50QXNzZXRzRGVjaW1hbHMFAAAAE3ByaWNlQXNzZXRzRGVjaW1hbHMFAAAAFWludGVybmFsQW1vdW50QXNzZXRJZAUAAAAUaW50ZXJuYWxQcmljZUFzc2V0SWQFAAAAEWRlY2ltYWxzTXVsdFByaWNlBQAAAAhwb29sVHlwZQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAda2V5TWFwcGluZ0xwQXNzZXRUb1Bvb2xBc3NldHMAAAABBQAAAAxscEFzc2V0SWRTdHIJAQAAABVkYXRhTWFwcGluZ1Bvb2xBc3NldHMAAAACBQAAABVpbnRlcm5hbEFtb3VudEFzc2V0SWQFAAAAFGludGVybmFsUHJpY2VBc3NldElkCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAB1rZXlNYXBwaW5nUG9vbEFzc2V0c1RvTHBhc3NldAAAAAIJAAGkAAAAAQUAAAAVaW50ZXJuYWxBbW91bnRBc3NldElkCQABpAAAAAEFAAAAFGludGVybmFsUHJpY2VBc3NldElkCQABLAAAAAICAAAABCVzX18FAAAADGxwQXNzZXRJZFN0cgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAApa2V5TWFwcGluZ1Bvb2xDb250cmFjdEFkZHJlc3NUb1Bvb2xBc3NldHMAAAABBQAAAAtwb29sQWRkcmVzcwkBAAAAFWRhdGFNYXBwaW5nUG9vbEFzc2V0cwAAAAIFAAAAFWludGVybmFsQW1vdW50QXNzZXRJZAUAAAAUaW50ZXJuYWxQcmljZUFzc2V0SWQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAKWtleU1hcHBpbmdQb29sQXNzZXRzVG9Qb29sQ29udHJhY3RBZGRyZXNzAAAAAgUAAAAVaW50ZXJuYWxBbW91bnRBc3NldElkBQAAABRpbnRlcm5hbFByaWNlQXNzZXRJZAUAAAALcG9vbEFkZHJlc3MJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAKmtleU1hcHBpbmdQb29sTFBBc3NldFRvUG9vbENvbnRyYWN0QWRkcmVzcwAAAAEFAAAADGxwQXNzZXRJZFN0cgUAAAALcG9vbEFkZHJlc3MJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAHmtleU1hcHBpbmdQb29sQ29udHJhY1RvTFBBc3NldAAAAAEFAAAAC3Bvb2xBZGRyZXNzBQAAAAxscEFzc2V0SWRTdHIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAAA9rZXlQb29sVG9XZWlnaHQAAAABBQAAAAtwb29sQWRkcmVzcwUAAAAKcG9vbFdlaWdodAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAPa2V5THBUb2tlbnNMaXN0AAAAAAkBAAAAF2NyZWF0ZUxwVG9rZW5zTGlzdEVudHJ5AAAAAQUAAAAMbHBBc3NldElkU3RyBQAAAANuaWwCAAAAB3N1Y2Nlc3MJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAACm1hbmFnZVBvb2wAAAACAAAAC3Bvb2xBZGRyZXNzAAAACW5ld1N0YXR1cwMJAQAAAAIhPQAAAAIIBQAAAAFpAAAABmNhbGxlcgUAAAAEdGhpcwkAAAIAAAABAgAAABJwZXJtaXNzaW9ucyBkZW5pZWQEAAAACnBvb2xDb25maWcJAQAAAA1nZXRQb29sQ29uZmlnAAAAAQUAAAALcG9vbEFkZHJlc3MEAAAACnBvb2xTdGF0dXMJAAGRAAAAAgUAAAAKcG9vbENvbmZpZwUAAAANaWR4UG9vbFN0YXR1cwQAAAAMbHBBc3NldElkU3RyCQABkQAAAAIFAAAACnBvb2xDb25maWcFAAAAEGlkeFBvb2xMUEFzc2V0SWQEAAAADmFtb3VudEFzc2V0U3RyCQABkQAAAAIFAAAACnBvb2xDb25maWcFAAAADWlkeEFtdEFzc2V0SWQEAAAADXByaWNlQXNzZXRTdHIJAAGRAAAAAgUAAAAKcG9vbENvbmZpZwUAAAAPaWR4UHJpY2VBc3NldElkBAAAABRhbW91bnRBc3NldHNEZWNpbWFscwkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAACnBvb2xDb25maWcFAAAADmlkeEFtdEFzc2V0RGNtBAAAABNwcmljZUFzc2V0c0RlY2ltYWxzCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAKcG9vbENvbmZpZwUAAAAQaWR4UHJpY2VBc3NldERjbQQAAAAVaW50ZXJuYWxBbW91bnRBc3NldElkCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAKcG9vbENvbmZpZwUAAAAOaWR4SUFtdEFzc2V0SWQEAAAAFGludGVybmFsUHJpY2VBc3NldElkCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAKcG9vbENvbmZpZwUAAAAQaWR4SVByaWNlQXNzZXRJZAQAAAAKbHBBc3NldERjbQkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAACnBvb2xDb25maWcFAAAADWlkeExQQXNzZXREY20EAAAACHBvb2xUeXBlCQABkQAAAAIFAAAACnBvb2xDb25maWcFAAAAC2lkeFBvb2xUeXBlCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAA1rZXlQb29sQ29uZmlnAAAAAgkAAaQAAAABBQAAABVpbnRlcm5hbEFtb3VudEFzc2V0SWQJAAGkAAAAAQUAAAAUaW50ZXJuYWxQcmljZUFzc2V0SWQJAQAAAAtkYXRhUG9vbENmZwAAAAsFAAAAC3Bvb2xBZGRyZXNzCQABpAAAAAEFAAAACW5ld1N0YXR1cwUAAAAMbHBBc3NldElkU3RyBQAAAA5hbW91bnRBc3NldFN0cgUAAAANcHJpY2VBc3NldFN0cgUAAAAUYW1vdW50QXNzZXRzRGVjaW1hbHMFAAAAE3ByaWNlQXNzZXRzRGVjaW1hbHMFAAAAFWludGVybmFsQW1vdW50QXNzZXRJZAUAAAAUaW50ZXJuYWxQcmljZUFzc2V0SWQFAAAACmxwQXNzZXREY20FAAAACHBvb2xUeXBlBQAAAANuaWwAAAABaQEAAAAEZW1pdAAAAAEAAAAMYW1vdW50VG9FbWl0BAAAAAZjYWxsZXIIBQAAAAFpAAAABmNhbGxlcgQAAAAMb3JpZ2luQ2FsbGVyCAUAAAABaQAAAAxvcmlnaW5DYWxsZXIEAAAAEGxwQXNzZXRSZXF1ZXN0ZWQJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABCIAAAABCQEAAAAea2V5TWFwcGluZ1Bvb2xDb250cmFjVG9MUEFzc2V0AAAAAQkABCUAAAABBQAAAAZjYWxsZXICAAAAHUludmFsaWQgTFAgYWRkcmVzcyBjYWxsZWQgbWUuBAAAAAdscEFzc2V0CQACWQAAAAEFAAAAEGxwQXNzZXRSZXF1ZXN0ZWQDCQAAZgAAAAIFAAAADGFtb3VudFRvRW1pdAAAAAAAAAAAAAkABRQAAAACCQAETAAAAAIJAQAAAAdSZWlzc3VlAAAAAwUAAAAHbHBBc3NldAUAAAAMYW1vdW50VG9FbWl0BgkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAADGFtb3VudFRvRW1pdAUAAAAHbHBBc3NldAUAAAADbmlsAgAAAAdzdWNjZXNzBQAAAANuaWwAAAABaQEAAAAEYnVybgAAAAEAAAAMYW1vdW50VG9CdXJuBAAAAAZjYWxsZXIIBQAAAAFpAAAABmNhbGxlcgQAAAAMb3JpZ2luQ2FsbGVyCAUAAAABaQAAAAxvcmlnaW5DYWxsZXIEAAAAB3BheW1lbnQJAQAAAAV2YWx1ZQAAAAEJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAEAAAADXBheW1lbnRBbW91bnQJAQAAAAV2YWx1ZQAAAAEIBQAAAAdwYXltZW50AAAABmFtb3VudAQAAAAPaW5BbW91bnRBc3NldElkCQACWAAAAAEJAQAAAAV2YWx1ZQAAAAEIBQAAAAdwYXltZW50AAAAB2Fzc2V0SWQEAAAAGmxwQXNzZXRSZXF1ZXN0ZWRGb3JCdXJuaW5nCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQiAAAAAQkBAAAAHmtleU1hcHBpbmdQb29sQ29udHJhY1RvTFBBc3NldAAAAAEJAAQlAAAAAQUAAAAGY2FsbGVyAgAAAB1JbnZhbGlkIExQIGFkZHJlc3MgY2FsbGVkIG1lLgMJAQAAAAIhPQAAAAIFAAAAD2luQW1vdW50QXNzZXRJZAUAAAAabHBBc3NldFJlcXVlc3RlZEZvckJ1cm5pbmcJAAACAAAAAQIAAAAVSW52YWxpZCBhc3NldCBwYXNzZWQuAwkBAAAAAiE9AAAAAgUAAAAMYW1vdW50VG9CdXJuBQAAAA1wYXltZW50QW1vdW50CQAAAgAAAAECAAAAFkludmFsaWQgYW1vdW50IHBhc3NlZC4EAAAAB2xwQXNzZXQJAAJZAAAAAQUAAAAabHBBc3NldFJlcXVlc3RlZEZvckJ1cm5pbmcJAAUUAAAAAgkABEwAAAACCQEAAAAEQnVybgAAAAIFAAAAB2xwQXNzZXQFAAAADGFtb3VudFRvQnVybgUAAAADbmlsAgAAAAdzdWNjZXNzAAAAAWkBAAAADW1vZGlmeVdlaWdodHMAAAACAAAADmJ0Y1Bvb2xBZGRyZXNzAAAADmV0aFBvb2xBZGRyZXNzBAAAAAxnd3hXZWlnaHROZXcJAABpAAAAAgkAAGgAAAACAAAAAAAAAAAbBQAAAA5QT09MV0VJR0hUTVVMVAAAAAAAAAAAZAQAAAAPd2VpZ2h0RGVjcmVtZW50CQAAaQAAAAIJAABoAAAAAgAAAAAAAAAACwUAAAAOUE9PTFdFSUdIVE1VTFQAAAAAAAAAAGQEAAAABmNhbGxlcggFAAAAAWkAAAAGY2FsbGVyAwkBAAAAAiE9AAAAAgUAAAAGY2FsbGVyBQAAAAR0aGlzCQAAAgAAAAECAAAAEnBlcm1pc3Npb25zIGRlbmllZAQAAAAKZmFjdG9yeUNmZwkABLUAAAACCQEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAQkBAAAAEGtleUZhY3RvcnlDb25maWcAAAAABQAAAANTRVAEAAAAC3N0YWtpbmdEYXBwCQEAAAAXZ2V0U3Rha2luZ0FkZHJlc3NPckZhaWwAAAABBQAAAApmYWN0b3J5Q2ZnBAAAAA1nd3hSZXdhcmREYXBwCQEAAAAZZ2V0R3d4UmV3YXJkQWRkcmVzc09yRmFpbAAAAAEFAAAACmZhY3RvcnlDZmcEAAAADGJ0Y1dlaWdodEtFWQkBAAAAD2tleVBvb2xUb1dlaWdodAAAAAEFAAAADmJ0Y1Bvb2xBZGRyZXNzBAAAAAxldGhXZWlnaHRLRVkJAQAAAA9rZXlQb29sVG9XZWlnaHQAAAABBQAAAA5ldGhQb29sQWRkcmVzcwQAAAAMZ3d4V2VpZ2h0S0VZCQEAAAAPa2V5UG9vbFRvV2VpZ2h0AAAAAQUAAAAOR1dYdmlydHVhbFBPT0wEAAAACWJ0Y1dlaWdodAkBAAAADGdldEludE9yRmFpbAAAAAEFAAAADGJ0Y1dlaWdodEtFWQQAAAAJZXRoV2VpZ2h0CQEAAAAMZ2V0SW50T3JGYWlsAAAAAQUAAAAMZXRoV2VpZ2h0S0VZBAAAAAxidGNXZWlnaHROZXcJAABlAAAAAgUAAAAJYnRjV2VpZ2h0BQAAAA93ZWlnaHREZWNyZW1lbnQEAAAADGV0aFdlaWdodE5ldwkAAGUAAAACBQAAAAlldGhXZWlnaHQFAAAAD3dlaWdodERlY3JlbWVudAMJAABnAAAAAgAAAAAAAAAAAAUAAAAMYnRjV2VpZ2h0TmV3CQAAAgAAAAEJAAEsAAAAAgIAAAAWaW52YWxpZCBidGNXZWlnaHROZXc6IAkAAaQAAAABBQAAAAxidGNXZWlnaHROZXcDCQAAZwAAAAIAAAAAAAAAAAAFAAAADGV0aFdlaWdodE5ldwkAAAIAAAABCQABLAAAAAICAAAAFmludmFsaWQgZXRoV2VpZ2h0TmV3OiAJAAGkAAAAAQUAAAAMZXRoV2VpZ2h0TmV3BAAAAA9idGNMcEFzc2V0SWRTdHIJAQAAAA9nZXRTdHJpbmdPckZhaWwAAAABCQEAAAAea2V5TWFwcGluZ1Bvb2xDb250cmFjVG9MUEFzc2V0AAAAAQUAAAAOYnRjUG9vbEFkZHJlc3MEAAAAD2V0aExwQXNzZXRJZFN0cgkBAAAAD2dldFN0cmluZ09yRmFpbAAAAAEJAQAAAB5rZXlNYXBwaW5nUG9vbENvbnRyYWNUb0xQQXNzZXQAAAABBQAAAA5ldGhQb29sQWRkcmVzcwQAAAARb25Nb2RpZnlXZWlnaHRCdGMJAAP8AAAABAUAAAALc3Rha2luZ0RhcHACAAAADm9uTW9kaWZ5V2VpZ2h0CQAETAAAAAIFAAAAD2J0Y0xwQXNzZXRJZFN0cgkABEwAAAACBQAAAA5idGNQb29sQWRkcmVzcwUAAAADbmlsBQAAAANuaWwDCQAAAAAAAAIFAAAAEW9uTW9kaWZ5V2VpZ2h0QnRjBQAAABFvbk1vZGlmeVdlaWdodEJ0YwQAAAARb25Nb2RpZnlXZWlnaHRFdGgJAAP8AAAABAUAAAALc3Rha2luZ0RhcHACAAAADm9uTW9kaWZ5V2VpZ2h0CQAETAAAAAIFAAAAD2V0aExwQXNzZXRJZFN0cgkABEwAAAACBQAAAA5ldGhQb29sQWRkcmVzcwUAAAADbmlsBQAAAANuaWwDCQAAAAAAAAIFAAAAEW9uTW9kaWZ5V2VpZ2h0RXRoBQAAABFvbk1vZGlmeVdlaWdodEV0aAQAAAAVb25FbWlzc2lvbkZvckd3eFN0YXJ0CQAD/AAAAAQFAAAADWd3eFJld2FyZERhcHACAAAAFW9uRW1pc3Npb25Gb3JHd3hTdGFydAUAAAADbmlsBQAAAANuaWwDCQAAAAAAAAIFAAAAFW9uRW1pc3Npb25Gb3JHd3hTdGFydAUAAAAVb25FbWlzc2lvbkZvckd3eFN0YXJ0CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAxidGNXZWlnaHRLRVkFAAAADGJ0Y1dlaWdodE5ldwkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAMZXRoV2VpZ2h0S0VZBQAAAAxldGhXZWlnaHROZXcJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAADGd3eFdlaWdodEtFWQUAAAAMZ3d4V2VpZ2h0TmV3CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAWa2V5UG9vbFRvV2VpZ2h0SGlzdG9yeQAAAAIFAAAADmJ0Y1Bvb2xBZGRyZXNzAAAAAAAAAAAABQAAAAlidGNXZWlnaHQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABZrZXlQb29sVG9XZWlnaHRIaXN0b3J5AAAAAgUAAAAOZXRoUG9vbEFkZHJlc3MAAAAAAAAAAAAFAAAACWV0aFdlaWdodAUAAAADbmlsCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAQAAAAJ0eAEAAAAGdmVyaWZ5AAAAAAkAAfQAAAADCAUAAAACdHgAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAJ0eAAAAAZwcm9vZnMAAAAAAAAAAAAIBQAAAAJ0eAAAAA9zZW5kZXJQdWJsaWNLZXmu+OsA", "chainId": 84, "height": 1835386, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 9Vj57iaXogm2YaS7bA1ubq4gshnarRjgUi943n5k2y7H Next: none Diff:
OldNewDifferences
314314
315315 @Callable(i)
316316 func modifyWeights (btcPoolAddress,ethPoolAddress) = {
317- let gwxWeightNew = ((5 * POOLWEIGHTMULT) / 100)
318- let weightDecrement = ((25 * POOLWEIGHTMULT) / 1000)
317+ let gwxWeightNew = ((27 * POOLWEIGHTMULT) / 100)
318+ let weightDecrement = ((11 * POOLWEIGHTMULT) / 100)
319319 let caller = i.caller
320320 if ((caller != this))
321321 then throw("permissions denied")
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let SCALE8 = 8
55
66 let MULT8 = 100000000
77
88 let SCALE18 = 18
99
1010 let MULT18 = toBigInt(1000000000000000000)
1111
1212 let POOLWEIGHTMULT = MULT8
1313
1414 let GWXvirtualPOOL = "GWXvirtualPOOL"
1515
1616 let decimalsMultPrice = ((100 * 1000) * 1000)
1717
1818 let SEP = "__"
1919
2020 let PoolActive = 1
2121
2222 let PoolPutDisabled = 2
2323
2424 let PoolMatcherDisabled = 3
2525
2626 let PoolShutdown = 4
2727
2828 let idxInternalAssetId = 1
2929
3030 let idxResutActions = 2
3131
3232 let idxIfAssetIdCalculationPerformed = 3
3333
3434 let idxPoolAddress = 1
3535
3636 let idxPoolStatus = 2
3737
3838 let idxPoolLPAssetId = 3
3939
4040 let idxAmtAssetId = 4
4141
4242 let idxPriceAssetId = 5
4343
4444 let idxAmtAssetDcm = 6
4545
4646 let idxPriceAssetDcm = 7
4747
4848 let idxIAmtAssetId = 8
4949
5050 let idxIPriceAssetId = 9
5151
5252 let idxLPAssetDcm = 10
5353
5454 let idxPoolType = 11
5555
5656 func keyFactoryConfig () = "%s__factoryConfig"
5757
5858
5959 func keyLpTokensList () = "%s__lpTokensList"
6060
6161
6262 func keyPoolScriptHash () = "%s%s__pool__scriptHash"
6363
6464
6565 func keyMatcherPub () = "%s%s__matcher__publicKey"
6666
6767
6868 func keyPriceDecimals () = "%s__priceDecimals"
6969
7070
7171 func keyAllPoolsShutdown () = "%s__shutdown"
7272
7373
7474 func keyNextInternalAssetId () = "%s__nextInternalAssetId"
7575
7676
7777 func keyPoolToWeight (poolAddress) = ("%s%s__poolWeight__" + poolAddress)
7878
7979
8080 func keyPoolToWeightHistory (poolAddress,num) = ((("%s%s__poolWeight__" + poolAddress) + "__") + toString(num))
8181
8282
8383 func keyMappingsInternal2baseAssetId (internalBaseAsset) = ("%s%s%d__mappings__internal2baseAssetId__" + toString(internalBaseAsset))
8484
8585
8686 func keyMappingsBaseAsset2internalId (baseAssetStr) = ("%s%s%s__mappings__baseAsset2internalId__" + baseAssetStr)
8787
8888
8989 func keyPoolConfig (amountAssetInternal,priceAssetInternal) = (((("%d%d%s__" + amountAssetInternal) + "__") + priceAssetInternal) + "__config")
9090
9191
9292 func keyMappingLpAssetToPoolAssets (lpAssetStr) = (("%s%s%s__" + lpAssetStr) + "__mappings__lpAsset2Pool")
9393
9494
9595 func keyMappingPoolAssetsToLpasset (internalAmountAssetIdStr,internalPriceAssetIdStr) = (((("%d%d%s%s__" + internalAmountAssetIdStr) + "__") + internalPriceAssetIdStr) + "__mappings__PoolAssets2LpAsset")
9696
9797
9898 func keyMappingPoolContractAddressToPoolAssets (poolContractAddress) = (("%s%s%s__" + poolContractAddress) + "__mappings__poolContract2PoolAssets")
9999
100100
101101 func keyMappingPoolAssetsToPoolContractAddress (internalAmountAssetIdStr,internalPriceAssetIdStr) = (((("%d%d%s%s__" + toString(internalAmountAssetIdStr)) + "__") + toString(internalPriceAssetIdStr)) + "__mappings__poolAssets2PoolContract")
102102
103103
104104 func keyMappingPoolContracToLPAsset (poolContractAddress) = (("%s%s%s__" + poolContractAddress) + "__mappings__poolContract2LpAsset")
105105
106106
107107 func keyMappingPoolLPAssetToPoolContractAddress (lpAssetStr) = (("%s%s%s__" + lpAssetStr) + "__mappings__lpAsset2PoolContract")
108108
109109
110110 func getStringOrFail (key) = valueOrErrorMessage(getString(this, key), ("No data for this.key=" + key))
111111
112112
113113 func getBooleanOrFail (key) = valueOrErrorMessage(getBoolean(this, key), ("No data for this.key=" + key))
114114
115115
116116 func getIntOrFail (key) = valueOrErrorMessage(getInteger(this, key), ("No data for this.key=" + key))
117117
118118
119119 let IdxFactoryCfgStakingDapp = 1
120120
121121 let IdxFactoryCfgBoostingDapp = 2
122122
123123 let IdxFactoryCfgIdoDapp = 3
124124
125125 let IdxFactoryCfgTeamDapp = 4
126126
127127 let IdxFactoryCfgEmissionDapp = 5
128128
129129 let IdxFactoryCfgRestDapp = 6
130130
131131 let IdxFactoryCfgSlippageDapp = 7
132132
133133 let IdxFactoryCfgDaoDapp = 8
134134
135135 let IdxFactoryCfgMarketingDapp = 9
136136
137137 let IdxFactoryCfgGwxRewardDapp = 10
138138
139139 let IdxFactoryCfgBirdsDapp = 11
140140
141141 func getBoostingAddressOrFail (factoryCfg) = addressFromStringValue(factoryCfg[IdxFactoryCfgBoostingDapp])
142142
143143
144144 func getEmissionAddressOrFail (factoryCfg) = addressFromStringValue(factoryCfg[IdxFactoryCfgEmissionDapp])
145145
146146
147147 func getStakingAddressOrFail (factoryCfg) = addressFromStringValue(factoryCfg[IdxFactoryCfgStakingDapp])
148148
149149
150150 func getGwxRewardAddressOrFail (factoryCfg) = addressFromStringValue(factoryCfg[IdxFactoryCfgGwxRewardDapp])
151151
152152
153153 func dataFactoryCfgV3 (stakingAddress,boostingAddress,idoContract,teamContract,emissionContract,restContract,slippageContract,daoContract,marketingContract,gwxRewardsContract,birdsContract) = makeString(["%s%s%s%s%s%s%s%s%s%s%s", stakingAddress, boostingAddress, idoContract, teamContract, emissionContract, restContract, slippageContract, daoContract, marketingContract, gwxRewardsContract, birdsContract], SEP)
154154
155155
156156 func dataFactoryCfg (stakingAddress,boostingAddress,idoContract,teamContract,emissionContract,restContract,slippageContract) = makeString(["%s%s%s%s%s%s", stakingAddress, boostingAddress, idoContract, teamContract, emissionContract, restContract, slippageContract], SEP)
157157
158158
159159 func dataPoolCfg (poolAddress,poolStatus,lpAssetId,amountAssetStr,priceAssetStr,amountAssetDecimals,priceAssetDecimals,amountAssetInternalId,priceAssetInternalId,lpAssetDecimals,poolType) = makeString(["%s%d%s%s%s%d%d%d%d%d%s", poolAddress, poolStatus, lpAssetId, amountAssetStr, priceAssetStr, toString(amountAssetDecimals), toString(priceAssetDecimals), toString(amountAssetInternalId), toString(priceAssetInternalId), toString(lpAssetDecimals), poolType], SEP)
160160
161161
162162 func dataMappingPoolAssets (internalAmountAssetStr,internalPriceAssetStr) = makeString(["%d%d", toString(internalAmountAssetStr), toString(internalPriceAssetStr)], SEP)
163163
164164
165165 func getPoolConfig (poolAddress) = {
166166 let poolAssets = split(getStringOrFail(keyMappingPoolContractAddressToPoolAssets(poolAddress)), SEP)
167167 let amountAssetInternal = poolAssets[1]
168168 let priceAssetInternal = poolAssets[2]
169169 split(getStringOrFail(keyPoolConfig(amountAssetInternal, priceAssetInternal)), SEP)
170170 }
171171
172172
173173 func getInternalAssetIdOrCreate (assetIdStr,incrementor) = {
174174 let internalAssetId = valueOrElse(getInteger(this, keyMappingsBaseAsset2internalId(assetIdStr)), 0)
175175 let currentIndexOfInternalId = valueOrElse(getInteger(this, keyNextInternalAssetId()), 0)
176176 let result = if ((internalAssetId == 0))
177177 then {
178178 let newInternalAssetId = (currentIndexOfInternalId + incrementor)
179179 $Tuple3(newInternalAssetId, [IntegerEntry(keyNextInternalAssetId(), newInternalAssetId), IntegerEntry(keyMappingsBaseAsset2internalId(assetIdStr), newInternalAssetId), StringEntry(keyMappingsInternal2baseAssetId(newInternalAssetId), assetIdStr)], true)
180180 }
181181 else $Tuple3(internalAssetId, nil, false)
182182 result
183183 }
184184
185185
186186 func createLpTokensListEntry (newLpToken) = {
187187 let lpTokens = getString(this, keyLpTokensList())
188188 if (isDefined(lpTokens))
189189 then ((value(lpTokens) + SEP) + newLpToken)
190190 else newLpToken
191191 }
192192
193193
194194 @Callable(i)
195195 func constructor (stakingContract,boostingContract,idoContract,teamContract,emissionContract,restContract,slpipageContract,priceDecimals) = if ((i.caller != this))
196196 then throw("permissions denied")
197197 else [StringEntry(keyFactoryConfig(), dataFactoryCfg(stakingContract, boostingContract, idoContract, teamContract, emissionContract, restContract, slpipageContract)), IntegerEntry(keyPriceDecimals(), priceDecimals)]
198198
199199
200200
201201 @Callable(i)
202202 func constructorV2 (mathcherPub58Str) = if ((i.caller != this))
203203 then throw("permissions denied")
204204 else {
205205 let mathcerPub = addressFromPublicKey(fromBase58String(mathcherPub58Str))
206206 if ((mathcerPub == mathcerPub))
207207 then [StringEntry(keyMatcherPub(), mathcherPub58Str)]
208208 else throw("Strict value is not equal to itself.")
209209 }
210210
211211
212212
213213 @Callable(i)
214214 func constructorV3 (daoContract,marketingContract,gwxRewardsContract,birdsContract) = if ((i.caller != this))
215215 then throw("permissions denied")
216216 else {
217217 let factoryCfg = split(getStringOrFail(keyFactoryConfig()), SEP)
218218 [StringEntry(keyFactoryConfig(), dataFactoryCfgV3(factoryCfg[1], factoryCfg[2], factoryCfg[3], factoryCfg[4], factoryCfg[5], factoryCfg[6], factoryCfg[7], daoContract, marketingContract, gwxRewardsContract, birdsContract))]
219219 }
220220
221221
222222
223223 @Callable(i)
224224 func activateNewPool (poolAddress,amountAssetStr,priceAssetStr,lpAssetName,lpAssetDescr,poolWeight,poolType) = if ((i.caller != this))
225225 then throw("permissions denied")
226226 else if (isDefined(getString(keyMappingPoolContractAddressToPoolAssets(poolAddress))))
227227 then throw((("Pool address " + poolAddress) + " already registered."))
228228 else {
229229 let internalAmountAssetData = getInternalAssetIdOrCreate(amountAssetStr, 1)
230230 let internalAmountAssetId = internalAmountAssetData._1
231231 let internalPriceAssetData = getInternalAssetIdOrCreate(priceAssetStr, if (internalAmountAssetData._3)
232232 then 2
233233 else 1)
234234 let internalPriceAssetId = internalPriceAssetData._1
235235 let poolAccountScriptHash = valueOrErrorMessage(scriptHash(addressFromStringValue(poolAddress)), ("No script has been found on pool account " + poolAddress))
236236 let ethalonPoolAccountScriptHash = getBinaryValue(keyPoolScriptHash())
237237 let poolConfig = getString(this, keyPoolConfig(toString(internalAmountAssetId), toString(internalPriceAssetId)))
238238 if (isDefined(poolConfig))
239239 then throw((((("Pool " + amountAssetStr) + "/") + priceAssetStr) + " has already been activated."))
240240 else {
241241 let poolConfigValue = value(getString(this, keyPoolConfig(toString(internalAmountAssetId), toString(internalPriceAssetId))))
242242 let amountAssetsDecimals = if ((amountAssetStr == "WAVES"))
243243 then decimalsMultPrice
244244 else pow(10, 0, value(assetInfo(fromBase58String(amountAssetStr))).decimals, 0, 0, DOWN)
245245 let priceAssetsDecimals = if ((priceAssetStr == "WAVES"))
246246 then decimalsMultPrice
247247 else pow(10, 0, value(assetInfo(fromBase58String(priceAssetStr))).decimals, 0, 0, DOWN)
248248 let lpAssetIssueAction = Issue(lpAssetName, lpAssetDescr, 1, 8, true)
249249 let lpAssetId = calculateAssetId(lpAssetIssueAction)
250250 let lpAssetIdStr = toBase58String(lpAssetId)
251251 let poolActivateInvokeResult = invoke(addressFromStringValue(poolAddress), "activate", [amountAssetStr, priceAssetStr], nil)
252252 if ((poolActivateInvokeResult == poolActivateInvokeResult))
253253 then if ((poolActivateInvokeResult != "success"))
254254 then throw("Pool initialisation error happened.")
255255 else $Tuple2(((internalAmountAssetData._2 ++ internalPriceAssetData._2) ++ [lpAssetIssueAction, Burn(lpAssetId, 1), StringEntry(keyPoolConfig(toString(internalAmountAssetId), toString(internalPriceAssetId)), dataPoolCfg(poolAddress, toString(PoolActive), lpAssetIdStr, amountAssetStr, priceAssetStr, amountAssetsDecimals, priceAssetsDecimals, internalAmountAssetId, internalPriceAssetId, decimalsMultPrice, poolType)), StringEntry(keyMappingLpAssetToPoolAssets(lpAssetIdStr), dataMappingPoolAssets(internalAmountAssetId, internalPriceAssetId)), StringEntry(keyMappingPoolAssetsToLpasset(toString(internalAmountAssetId), toString(internalPriceAssetId)), ("%s__" + lpAssetIdStr)), StringEntry(keyMappingPoolContractAddressToPoolAssets(poolAddress), dataMappingPoolAssets(internalAmountAssetId, internalPriceAssetId)), StringEntry(keyMappingPoolAssetsToPoolContractAddress(internalAmountAssetId, internalPriceAssetId), poolAddress), StringEntry(keyMappingPoolLPAssetToPoolContractAddress(lpAssetIdStr), poolAddress), StringEntry(keyMappingPoolContracToLPAsset(poolAddress), lpAssetIdStr), IntegerEntry(keyPoolToWeight(poolAddress), poolWeight), StringEntry(keyLpTokensList(), createLpTokensListEntry(lpAssetIdStr))]), "success")
256256 else throw("Strict value is not equal to itself.")
257257 }
258258 }
259259
260260
261261
262262 @Callable(i)
263263 func managePool (poolAddress,newStatus) = if ((i.caller != this))
264264 then throw("permissions denied")
265265 else {
266266 let poolConfig = getPoolConfig(poolAddress)
267267 let poolStatus = poolConfig[idxPoolStatus]
268268 let lpAssetIdStr = poolConfig[idxPoolLPAssetId]
269269 let amountAssetStr = poolConfig[idxAmtAssetId]
270270 let priceAssetStr = poolConfig[idxPriceAssetId]
271271 let amountAssetsDecimals = parseIntValue(poolConfig[idxAmtAssetDcm])
272272 let priceAssetsDecimals = parseIntValue(poolConfig[idxPriceAssetDcm])
273273 let internalAmountAssetId = parseIntValue(poolConfig[idxIAmtAssetId])
274274 let internalPriceAssetId = parseIntValue(poolConfig[idxIPriceAssetId])
275275 let lpAssetDcm = parseIntValue(poolConfig[idxLPAssetDcm])
276276 let poolType = poolConfig[idxPoolType]
277277 [StringEntry(keyPoolConfig(toString(internalAmountAssetId), toString(internalPriceAssetId)), dataPoolCfg(poolAddress, toString(newStatus), lpAssetIdStr, amountAssetStr, priceAssetStr, amountAssetsDecimals, priceAssetsDecimals, internalAmountAssetId, internalPriceAssetId, lpAssetDcm, poolType))]
278278 }
279279
280280
281281
282282 @Callable(i)
283283 func emit (amountToEmit) = {
284284 let caller = i.caller
285285 let originCaller = i.originCaller
286286 let lpAssetRequested = valueOrErrorMessage(getString(keyMappingPoolContracToLPAsset(toString(caller))), "Invalid LP address called me.")
287287 let lpAsset = fromBase58String(lpAssetRequested)
288288 if ((amountToEmit > 0))
289289 then $Tuple2([Reissue(lpAsset, amountToEmit, true), ScriptTransfer(i.caller, amountToEmit, lpAsset)], "success")
290290 else nil
291291 }
292292
293293
294294
295295 @Callable(i)
296296 func burn (amountToBurn) = {
297297 let caller = i.caller
298298 let originCaller = i.originCaller
299299 let payment = value(i.payments[0])
300300 let paymentAmount = value(payment.amount)
301301 let inAmountAssetId = toBase58String(value(payment.assetId))
302302 let lpAssetRequestedForBurning = valueOrErrorMessage(getString(keyMappingPoolContracToLPAsset(toString(caller))), "Invalid LP address called me.")
303303 if ((inAmountAssetId != lpAssetRequestedForBurning))
304304 then throw("Invalid asset passed.")
305305 else if ((amountToBurn != paymentAmount))
306306 then throw("Invalid amount passed.")
307307 else {
308308 let lpAsset = fromBase58String(lpAssetRequestedForBurning)
309309 $Tuple2([Burn(lpAsset, amountToBurn)], "success")
310310 }
311311 }
312312
313313
314314
315315 @Callable(i)
316316 func modifyWeights (btcPoolAddress,ethPoolAddress) = {
317- let gwxWeightNew = ((5 * POOLWEIGHTMULT) / 100)
318- let weightDecrement = ((25 * POOLWEIGHTMULT) / 1000)
317+ let gwxWeightNew = ((27 * POOLWEIGHTMULT) / 100)
318+ let weightDecrement = ((11 * POOLWEIGHTMULT) / 100)
319319 let caller = i.caller
320320 if ((caller != this))
321321 then throw("permissions denied")
322322 else {
323323 let factoryCfg = split(getStringOrFail(keyFactoryConfig()), SEP)
324324 let stakingDapp = getStakingAddressOrFail(factoryCfg)
325325 let gwxRewardDapp = getGwxRewardAddressOrFail(factoryCfg)
326326 let btcWeightKEY = keyPoolToWeight(btcPoolAddress)
327327 let ethWeightKEY = keyPoolToWeight(ethPoolAddress)
328328 let gwxWeightKEY = keyPoolToWeight(GWXvirtualPOOL)
329329 let btcWeight = getIntOrFail(btcWeightKEY)
330330 let ethWeight = getIntOrFail(ethWeightKEY)
331331 let btcWeightNew = (btcWeight - weightDecrement)
332332 let ethWeightNew = (ethWeight - weightDecrement)
333333 if ((0 >= btcWeightNew))
334334 then throw(("invalid btcWeightNew: " + toString(btcWeightNew)))
335335 else if ((0 >= ethWeightNew))
336336 then throw(("invalid ethWeightNew: " + toString(ethWeightNew)))
337337 else {
338338 let btcLpAssetIdStr = getStringOrFail(keyMappingPoolContracToLPAsset(btcPoolAddress))
339339 let ethLpAssetIdStr = getStringOrFail(keyMappingPoolContracToLPAsset(ethPoolAddress))
340340 let onModifyWeightBtc = invoke(stakingDapp, "onModifyWeight", [btcLpAssetIdStr, btcPoolAddress], nil)
341341 if ((onModifyWeightBtc == onModifyWeightBtc))
342342 then {
343343 let onModifyWeightEth = invoke(stakingDapp, "onModifyWeight", [ethLpAssetIdStr, ethPoolAddress], nil)
344344 if ((onModifyWeightEth == onModifyWeightEth))
345345 then {
346346 let onEmissionForGwxStart = invoke(gwxRewardDapp, "onEmissionForGwxStart", nil, nil)
347347 if ((onEmissionForGwxStart == onEmissionForGwxStart))
348348 then [IntegerEntry(btcWeightKEY, btcWeightNew), IntegerEntry(ethWeightKEY, ethWeightNew), IntegerEntry(gwxWeightKEY, gwxWeightNew), IntegerEntry(keyPoolToWeightHistory(btcPoolAddress, 0), btcWeight), IntegerEntry(keyPoolToWeightHistory(ethPoolAddress, 0), ethWeight)]
349349 else throw("Strict value is not equal to itself.")
350350 }
351351 else throw("Strict value is not equal to itself.")
352352 }
353353 else throw("Strict value is not equal to itself.")
354354 }
355355 }
356356 }
357357
358358
359359 @Verifier(tx)
360360 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
361361

github/deemru/w8io/026f985 
59.68 ms