tx · 9Vj57iaXogm2YaS7bA1ubq4gshnarRjgUi943n5k2y7H

3MrbnZkriTBZhRqS45L1VfCrden6Erpa7To:  -0.01400000 Waves

2021.12.15 15:08 [1835357] smart account 3MrbnZkriTBZhRqS45L1VfCrden6Erpa7To > SELF 0.00000000 Waves

{ "type": 13, "id": "9Vj57iaXogm2YaS7bA1ubq4gshnarRjgUi943n5k2y7H", "fee": 1400000, "feeAssetId": null, "timestamp": 1639570177665, "version": 1, "sender": "3MrbnZkriTBZhRqS45L1VfCrden6Erpa7To", "senderPublicKey": "63obiHRgG6hmZ9wxY6Lve4XmWN3XBCrDahV6tZwhsJEY", "proofs": [ "5b9dhM4nW14JadUnAFdXvs7gEjkvQDkE2vpy87UGq1djHRpNrGGjZKWtmV6pNxs1CFDvX6uMoeyCtqdS9FiCFBK8" ], "script": "base64:AAIFAAAAAAAAADwIAhIKCggICAgICAgIARIDCgEIEgYKBAgICAgSCQoHCAgICAgBCBIECgIIARIDCgEBEgMKAQESBAoCCAgAAABFAAAAAAZTQ0FMRTgAAAAAAAAAAAgAAAAABU1VTFQ4AAAAAAAF9eEAAAAAAAdTQ0FMRTE4AAAAAAAAAAASAAAAAAZNVUxUMTgJAAE2AAAAAQAN4Lazp2QAAAAAAAAOUE9PTFdFSUdIVE1VTFQFAAAABU1VTFQ4AAAAAA5HV1h2aXJ0dWFsUE9PTAIAAAAOR1dYdmlydHVhbFBPT0wAAAAAEWRlY2ltYWxzTXVsdFByaWNlCQAAaAAAAAIJAABoAAAAAgAAAAAAAAAAZAAAAAAAAAAD6AAAAAAAAAAD6AAAAAADU0VQAgAAAAJfXwAAAAAKUG9vbEFjdGl2ZQAAAAAAAAAAAQAAAAAPUG9vbFB1dERpc2FibGVkAAAAAAAAAAACAAAAABNQb29sTWF0Y2hlckRpc2FibGVkAAAAAAAAAAADAAAAAAxQb29sU2h1dGRvd24AAAAAAAAAAAQAAAAAEmlkeEludGVybmFsQXNzZXRJZAAAAAAAAAAAAQAAAAAPaWR4UmVzdXRBY3Rpb25zAAAAAAAAAAACAAAAACBpZHhJZkFzc2V0SWRDYWxjdWxhdGlvblBlcmZvcm1lZAAAAAAAAAAAAwAAAAAOaWR4UG9vbEFkZHJlc3MAAAAAAAAAAAEAAAAADWlkeFBvb2xTdGF0dXMAAAAAAAAAAAIAAAAAEGlkeFBvb2xMUEFzc2V0SWQAAAAAAAAAAAMAAAAADWlkeEFtdEFzc2V0SWQAAAAAAAAAAAQAAAAAD2lkeFByaWNlQXNzZXRJZAAAAAAAAAAABQAAAAAOaWR4QW10QXNzZXREY20AAAAAAAAAAAYAAAAAEGlkeFByaWNlQXNzZXREY20AAAAAAAAAAAcAAAAADmlkeElBbXRBc3NldElkAAAAAAAAAAAIAAAAABBpZHhJUHJpY2VBc3NldElkAAAAAAAAAAAJAAAAAA1pZHhMUEFzc2V0RGNtAAAAAAAAAAAKAAAAAAtpZHhQb29sVHlwZQAAAAAAAAAACwEAAAAQa2V5RmFjdG9yeUNvbmZpZwAAAAACAAAAESVzX19mYWN0b3J5Q29uZmlnAQAAAA9rZXlMcFRva2Vuc0xpc3QAAAAAAgAAABAlc19fbHBUb2tlbnNMaXN0AQAAABFrZXlQb29sU2NyaXB0SGFzaAAAAAACAAAAFiVzJXNfX3Bvb2xfX3NjcmlwdEhhc2gBAAAADWtleU1hdGNoZXJQdWIAAAAAAgAAABglcyVzX19tYXRjaGVyX19wdWJsaWNLZXkBAAAAEGtleVByaWNlRGVjaW1hbHMAAAAAAgAAABElc19fcHJpY2VEZWNpbWFscwEAAAATa2V5QWxsUG9vbHNTaHV0ZG93bgAAAAACAAAADCVzX19zaHV0ZG93bgEAAAAWa2V5TmV4dEludGVybmFsQXNzZXRJZAAAAAACAAAAFyVzX19uZXh0SW50ZXJuYWxBc3NldElkAQAAAA9rZXlQb29sVG9XZWlnaHQAAAABAAAAC3Bvb2xBZGRyZXNzCQABLAAAAAICAAAAEiVzJXNfX3Bvb2xXZWlnaHRfXwUAAAALcG9vbEFkZHJlc3MBAAAAFmtleVBvb2xUb1dlaWdodEhpc3RvcnkAAAACAAAAC3Bvb2xBZGRyZXNzAAAAA251bQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAASJXMlc19fcG9vbFdlaWdodF9fBQAAAAtwb29sQWRkcmVzcwIAAAACX18JAAGkAAAAAQUAAAADbnVtAQAAAB9rZXlNYXBwaW5nc0ludGVybmFsMmJhc2VBc3NldElkAAAAAQAAABFpbnRlcm5hbEJhc2VBc3NldAkAASwAAAACAgAAACglcyVzJWRfX21hcHBpbmdzX19pbnRlcm5hbDJiYXNlQXNzZXRJZF9fCQABpAAAAAEFAAAAEWludGVybmFsQmFzZUFzc2V0AQAAAB9rZXlNYXBwaW5nc0Jhc2VBc3NldDJpbnRlcm5hbElkAAAAAQAAAAxiYXNlQXNzZXRTdHIJAAEsAAAAAgIAAAAoJXMlcyVzX19tYXBwaW5nc19fYmFzZUFzc2V0MmludGVybmFsSWRfXwUAAAAMYmFzZUFzc2V0U3RyAQAAAA1rZXlQb29sQ29uZmlnAAAAAgAAABNhbW91bnRBc3NldEludGVybmFsAAAAEnByaWNlQXNzZXRJbnRlcm5hbAkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAglZCVkJXNfXwUAAAATYW1vdW50QXNzZXRJbnRlcm5hbAIAAAACX18FAAAAEnByaWNlQXNzZXRJbnRlcm5hbAIAAAAIX19jb25maWcBAAAAHWtleU1hcHBpbmdMcEFzc2V0VG9Qb29sQXNzZXRzAAAAAQAAAApscEFzc2V0U3RyCQABLAAAAAIJAAEsAAAAAgIAAAAIJXMlcyVzX18FAAAACmxwQXNzZXRTdHICAAAAGF9fbWFwcGluZ3NfX2xwQXNzZXQyUG9vbAEAAAAda2V5TWFwcGluZ1Bvb2xBc3NldHNUb0xwYXNzZXQAAAACAAAAGGludGVybmFsQW1vdW50QXNzZXRJZFN0cgAAABdpbnRlcm5hbFByaWNlQXNzZXRJZFN0cgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAolZCVkJXMlc19fBQAAABhpbnRlcm5hbEFtb3VudEFzc2V0SWRTdHICAAAAAl9fBQAAABdpbnRlcm5hbFByaWNlQXNzZXRJZFN0cgIAAAAeX19tYXBwaW5nc19fUG9vbEFzc2V0czJMcEFzc2V0AQAAAClrZXlNYXBwaW5nUG9vbENvbnRyYWN0QWRkcmVzc1RvUG9vbEFzc2V0cwAAAAEAAAATcG9vbENvbnRyYWN0QWRkcmVzcwkAASwAAAACCQABLAAAAAICAAAACCVzJXMlc19fBQAAABNwb29sQ29udHJhY3RBZGRyZXNzAgAAACNfX21hcHBpbmdzX19wb29sQ29udHJhY3QyUG9vbEFzc2V0cwEAAAApa2V5TWFwcGluZ1Bvb2xBc3NldHNUb1Bvb2xDb250cmFjdEFkZHJlc3MAAAACAAAAGGludGVybmFsQW1vdW50QXNzZXRJZFN0cgAAABdpbnRlcm5hbFByaWNlQXNzZXRJZFN0cgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAolZCVkJXMlc19fCQABpAAAAAEFAAAAGGludGVybmFsQW1vdW50QXNzZXRJZFN0cgIAAAACX18JAAGkAAAAAQUAAAAXaW50ZXJuYWxQcmljZUFzc2V0SWRTdHICAAAAI19fbWFwcGluZ3NfX3Bvb2xBc3NldHMyUG9vbENvbnRyYWN0AQAAAB5rZXlNYXBwaW5nUG9vbENvbnRyYWNUb0xQQXNzZXQAAAABAAAAE3Bvb2xDb250cmFjdEFkZHJlc3MJAAEsAAAAAgkAASwAAAACAgAAAAglcyVzJXNfXwUAAAATcG9vbENvbnRyYWN0QWRkcmVzcwIAAAAgX19tYXBwaW5nc19fcG9vbENvbnRyYWN0MkxwQXNzZXQBAAAAKmtleU1hcHBpbmdQb29sTFBBc3NldFRvUG9vbENvbnRyYWN0QWRkcmVzcwAAAAEAAAAKbHBBc3NldFN0cgkAASwAAAACCQABLAAAAAICAAAACCVzJXMlc19fBQAAAApscEFzc2V0U3RyAgAAACBfX21hcHBpbmdzX19scEFzc2V0MlBvb2xDb250cmFjdAEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAQAAAANrZXkJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABB0AAAACBQAAAAR0aGlzBQAAAANrZXkJAAEsAAAAAgIAAAAVTm8gZGF0YSBmb3IgdGhpcy5rZXk9BQAAAANrZXkBAAAAEGdldEJvb2xlYW5PckZhaWwAAAABAAAAA2tleQkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEGwAAAAIFAAAABHRoaXMFAAAAA2tleQkAASwAAAACAgAAABVObyBkYXRhIGZvciB0aGlzLmtleT0FAAAAA2tleQEAAAAMZ2V0SW50T3JGYWlsAAAAAQAAAANrZXkJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABBoAAAACBQAAAAR0aGlzBQAAAANrZXkJAAEsAAAAAgIAAAAVTm8gZGF0YSBmb3IgdGhpcy5rZXk9BQAAAANrZXkAAAAAGElkeEZhY3RvcnlDZmdTdGFraW5nRGFwcAAAAAAAAAAAAQAAAAAZSWR4RmFjdG9yeUNmZ0Jvb3N0aW5nRGFwcAAAAAAAAAAAAgAAAAAUSWR4RmFjdG9yeUNmZ0lkb0RhcHAAAAAAAAAAAAMAAAAAFUlkeEZhY3RvcnlDZmdUZWFtRGFwcAAAAAAAAAAABAAAAAAZSWR4RmFjdG9yeUNmZ0VtaXNzaW9uRGFwcAAAAAAAAAAABQAAAAAVSWR4RmFjdG9yeUNmZ1Jlc3REYXBwAAAAAAAAAAAGAAAAABlJZHhGYWN0b3J5Q2ZnU2xpcHBhZ2VEYXBwAAAAAAAAAAAHAAAAABRJZHhGYWN0b3J5Q2ZnRGFvRGFwcAAAAAAAAAAACAAAAAAaSWR4RmFjdG9yeUNmZ01hcmtldGluZ0RhcHAAAAAAAAAAAAkAAAAAGklkeEZhY3RvcnlDZmdHd3hSZXdhcmREYXBwAAAAAAAAAAAKAAAAABZJZHhGYWN0b3J5Q2ZnQmlyZHNEYXBwAAAAAAAAAAALAQAAABhnZXRCb29zdGluZ0FkZHJlc3NPckZhaWwAAAABAAAACmZhY3RvcnlDZmcJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEJAAGRAAAAAgUAAAAKZmFjdG9yeUNmZwUAAAAZSWR4RmFjdG9yeUNmZ0Jvb3N0aW5nRGFwcAEAAAAYZ2V0RW1pc3Npb25BZGRyZXNzT3JGYWlsAAAAAQAAAApmYWN0b3J5Q2ZnCQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABCQABkQAAAAIFAAAACmZhY3RvcnlDZmcFAAAAGUlkeEZhY3RvcnlDZmdFbWlzc2lvbkRhcHABAAAAF2dldFN0YWtpbmdBZGRyZXNzT3JGYWlsAAAAAQAAAApmYWN0b3J5Q2ZnCQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABCQABkQAAAAIFAAAACmZhY3RvcnlDZmcFAAAAGElkeEZhY3RvcnlDZmdTdGFraW5nRGFwcAEAAAAZZ2V0R3d4UmV3YXJkQWRkcmVzc09yRmFpbAAAAAEAAAAKZmFjdG9yeUNmZwkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQkAAZEAAAACBQAAAApmYWN0b3J5Q2ZnBQAAABpJZHhGYWN0b3J5Q2ZnR3d4UmV3YXJkRGFwcAEAAAAQZGF0YUZhY3RvcnlDZmdWMwAAAAsAAAAOc3Rha2luZ0FkZHJlc3MAAAAPYm9vc3RpbmdBZGRyZXNzAAAAC2lkb0NvbnRyYWN0AAAADHRlYW1Db250cmFjdAAAABBlbWlzc2lvbkNvbnRyYWN0AAAADHJlc3RDb250cmFjdAAAABBzbGlwcGFnZUNvbnRyYWN0AAAAC2Rhb0NvbnRyYWN0AAAAEW1hcmtldGluZ0NvbnRyYWN0AAAAEmd3eFJld2FyZHNDb250cmFjdAAAAA1iaXJkc0NvbnRyYWN0CQAEuQAAAAIJAARMAAAAAgIAAAAWJXMlcyVzJXMlcyVzJXMlcyVzJXMlcwkABEwAAAACBQAAAA5zdGFraW5nQWRkcmVzcwkABEwAAAACBQAAAA9ib29zdGluZ0FkZHJlc3MJAARMAAAAAgUAAAALaWRvQ29udHJhY3QJAARMAAAAAgUAAAAMdGVhbUNvbnRyYWN0CQAETAAAAAIFAAAAEGVtaXNzaW9uQ29udHJhY3QJAARMAAAAAgUAAAAMcmVzdENvbnRyYWN0CQAETAAAAAIFAAAAEHNsaXBwYWdlQ29udHJhY3QJAARMAAAAAgUAAAALZGFvQ29udHJhY3QJAARMAAAAAgUAAAARbWFya2V0aW5nQ29udHJhY3QJAARMAAAAAgUAAAASZ3d4UmV3YXJkc0NvbnRyYWN0CQAETAAAAAIFAAAADWJpcmRzQ29udHJhY3QFAAAAA25pbAUAAAADU0VQAQAAAA5kYXRhRmFjdG9yeUNmZwAAAAcAAAAOc3Rha2luZ0FkZHJlc3MAAAAPYm9vc3RpbmdBZGRyZXNzAAAAC2lkb0NvbnRyYWN0AAAADHRlYW1Db250cmFjdAAAABBlbWlzc2lvbkNvbnRyYWN0AAAADHJlc3RDb250cmFjdAAAABBzbGlwcGFnZUNvbnRyYWN0CQAEuQAAAAIJAARMAAAAAgIAAAAMJXMlcyVzJXMlcyVzCQAETAAAAAIFAAAADnN0YWtpbmdBZGRyZXNzCQAETAAAAAIFAAAAD2Jvb3N0aW5nQWRkcmVzcwkABEwAAAACBQAAAAtpZG9Db250cmFjdAkABEwAAAACBQAAAAx0ZWFtQ29udHJhY3QJAARMAAAAAgUAAAAQZW1pc3Npb25Db250cmFjdAkABEwAAAACBQAAAAxyZXN0Q29udHJhY3QJAARMAAAAAgUAAAAQc2xpcHBhZ2VDb250cmFjdAUAAAADbmlsBQAAAANTRVABAAAAC2RhdGFQb29sQ2ZnAAAACwAAAAtwb29sQWRkcmVzcwAAAApwb29sU3RhdHVzAAAACWxwQXNzZXRJZAAAAA5hbW91bnRBc3NldFN0cgAAAA1wcmljZUFzc2V0U3RyAAAAE2Ftb3VudEFzc2V0RGVjaW1hbHMAAAAScHJpY2VBc3NldERlY2ltYWxzAAAAFWFtb3VudEFzc2V0SW50ZXJuYWxJZAAAABRwcmljZUFzc2V0SW50ZXJuYWxJZAAAAA9scEFzc2V0RGVjaW1hbHMAAAAIcG9vbFR5cGUJAAS5AAAAAgkABEwAAAACAgAAABYlcyVkJXMlcyVzJWQlZCVkJWQlZCVzCQAETAAAAAIFAAAAC3Bvb2xBZGRyZXNzCQAETAAAAAIFAAAACnBvb2xTdGF0dXMJAARMAAAAAgUAAAAJbHBBc3NldElkCQAETAAAAAIFAAAADmFtb3VudEFzc2V0U3RyCQAETAAAAAIFAAAADXByaWNlQXNzZXRTdHIJAARMAAAAAgkAAaQAAAABBQAAABNhbW91bnRBc3NldERlY2ltYWxzCQAETAAAAAIJAAGkAAAAAQUAAAAScHJpY2VBc3NldERlY2ltYWxzCQAETAAAAAIJAAGkAAAAAQUAAAAVYW1vdW50QXNzZXRJbnRlcm5hbElkCQAETAAAAAIJAAGkAAAAAQUAAAAUcHJpY2VBc3NldEludGVybmFsSWQJAARMAAAAAgkAAaQAAAABBQAAAA9scEFzc2V0RGVjaW1hbHMJAARMAAAAAgUAAAAIcG9vbFR5cGUFAAAAA25pbAUAAAADU0VQAQAAABVkYXRhTWFwcGluZ1Bvb2xBc3NldHMAAAACAAAAFmludGVybmFsQW1vdW50QXNzZXRTdHIAAAAVaW50ZXJuYWxQcmljZUFzc2V0U3RyCQAEuQAAAAIJAARMAAAAAgIAAAAEJWQlZAkABEwAAAACCQABpAAAAAEFAAAAFmludGVybmFsQW1vdW50QXNzZXRTdHIJAARMAAAAAgkAAaQAAAABBQAAABVpbnRlcm5hbFByaWNlQXNzZXRTdHIFAAAAA25pbAUAAAADU0VQAQAAAA1nZXRQb29sQ29uZmlnAAAAAQAAAAtwb29sQWRkcmVzcwQAAAAKcG9vbEFzc2V0cwkABLUAAAACCQEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAQkBAAAAKWtleU1hcHBpbmdQb29sQ29udHJhY3RBZGRyZXNzVG9Qb29sQXNzZXRzAAAAAQUAAAALcG9vbEFkZHJlc3MFAAAAA1NFUAQAAAATYW1vdW50QXNzZXRJbnRlcm5hbAkAAZEAAAACBQAAAApwb29sQXNzZXRzAAAAAAAAAAABBAAAABJwcmljZUFzc2V0SW50ZXJuYWwJAAGRAAAAAgUAAAAKcG9vbEFzc2V0cwAAAAAAAAAAAgkABLUAAAACCQEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAQkBAAAADWtleVBvb2xDb25maWcAAAACBQAAABNhbW91bnRBc3NldEludGVybmFsBQAAABJwcmljZUFzc2V0SW50ZXJuYWwFAAAAA1NFUAEAAAAaZ2V0SW50ZXJuYWxBc3NldElkT3JDcmVhdGUAAAACAAAACmFzc2V0SWRTdHIAAAALaW5jcmVtZW50b3IEAAAAD2ludGVybmFsQXNzZXRJZAkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAR0aGlzCQEAAAAfa2V5TWFwcGluZ3NCYXNlQXNzZXQyaW50ZXJuYWxJZAAAAAEFAAAACmFzc2V0SWRTdHIAAAAAAAAAAAAEAAAAGGN1cnJlbnRJbmRleE9mSW50ZXJuYWxJZAkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAR0aGlzCQEAAAAWa2V5TmV4dEludGVybmFsQXNzZXRJZAAAAAAAAAAAAAAAAAAEAAAABnJlc3VsdAMJAAAAAAAAAgUAAAAPaW50ZXJuYWxBc3NldElkAAAAAAAAAAAABAAAABJuZXdJbnRlcm5hbEFzc2V0SWQJAABkAAAAAgUAAAAYY3VycmVudEluZGV4T2ZJbnRlcm5hbElkBQAAAAtpbmNyZW1lbnRvcgkABRUAAAADBQAAABJuZXdJbnRlcm5hbEFzc2V0SWQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABZrZXlOZXh0SW50ZXJuYWxBc3NldElkAAAAAAUAAAASbmV3SW50ZXJuYWxBc3NldElkCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAfa2V5TWFwcGluZ3NCYXNlQXNzZXQyaW50ZXJuYWxJZAAAAAEFAAAACmFzc2V0SWRTdHIFAAAAEm5ld0ludGVybmFsQXNzZXRJZAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAfa2V5TWFwcGluZ3NJbnRlcm5hbDJiYXNlQXNzZXRJZAAAAAEFAAAAEm5ld0ludGVybmFsQXNzZXRJZAUAAAAKYXNzZXRJZFN0cgUAAAADbmlsBgkABRUAAAADBQAAAA9pbnRlcm5hbEFzc2V0SWQFAAAAA25pbAcFAAAABnJlc3VsdAEAAAAXY3JlYXRlTHBUb2tlbnNMaXN0RW50cnkAAAABAAAACm5ld0xwVG9rZW4EAAAACGxwVG9rZW5zCQAEHQAAAAIFAAAABHRoaXMJAQAAAA9rZXlMcFRva2Vuc0xpc3QAAAAAAwkBAAAACWlzRGVmaW5lZAAAAAEFAAAACGxwVG9rZW5zCQABLAAAAAIJAAEsAAAAAgkBAAAABXZhbHVlAAAAAQUAAAAIbHBUb2tlbnMFAAAAA1NFUAUAAAAKbmV3THBUb2tlbgUAAAAKbmV3THBUb2tlbgAAAAgAAAABaQEAAAALY29uc3RydWN0b3IAAAAIAAAAD3N0YWtpbmdDb250cmFjdAAAABBib29zdGluZ0NvbnRyYWN0AAAAC2lkb0NvbnRyYWN0AAAADHRlYW1Db250cmFjdAAAABBlbWlzc2lvbkNvbnRyYWN0AAAADHJlc3RDb250cmFjdAAAABBzbHBpcGFnZUNvbnRyYWN0AAAADXByaWNlRGVjaW1hbHMDCQEAAAACIT0AAAACCAUAAAABaQAAAAZjYWxsZXIFAAAABHRoaXMJAAACAAAAAQIAAAAScGVybWlzc2lvbnMgZGVuaWVkCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABBrZXlGYWN0b3J5Q29uZmlnAAAAAAkBAAAADmRhdGFGYWN0b3J5Q2ZnAAAABwUAAAAPc3Rha2luZ0NvbnRyYWN0BQAAABBib29zdGluZ0NvbnRyYWN0BQAAAAtpZG9Db250cmFjdAUAAAAMdGVhbUNvbnRyYWN0BQAAABBlbWlzc2lvbkNvbnRyYWN0BQAAAAxyZXN0Q29udHJhY3QFAAAAEHNscGlwYWdlQ29udHJhY3QJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABBrZXlQcmljZURlY2ltYWxzAAAAAAUAAAANcHJpY2VEZWNpbWFscwUAAAADbmlsAAAAAWkBAAAADWNvbnN0cnVjdG9yVjIAAAABAAAAEG1hdGhjaGVyUHViNThTdHIDCQEAAAACIT0AAAACCAUAAAABaQAAAAZjYWxsZXIFAAAABHRoaXMJAAACAAAAAQIAAAAScGVybWlzc2lvbnMgZGVuaWVkBAAAAAptYXRoY2VyUHViCQEAAAAUYWRkcmVzc0Zyb21QdWJsaWNLZXkAAAABCQACWQAAAAEFAAAAEG1hdGhjaGVyUHViNThTdHIDCQAAAAAAAAIFAAAACm1hdGhjZXJQdWIFAAAACm1hdGhjZXJQdWIJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAADWtleU1hdGNoZXJQdWIAAAAABQAAABBtYXRoY2hlclB1YjU4U3RyBQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAADWNvbnN0cnVjdG9yVjMAAAAEAAAAC2Rhb0NvbnRyYWN0AAAAEW1hcmtldGluZ0NvbnRyYWN0AAAAEmd3eFJld2FyZHNDb250cmFjdAAAAA1iaXJkc0NvbnRyYWN0AwkBAAAAAiE9AAAAAggFAAAAAWkAAAAGY2FsbGVyBQAAAAR0aGlzCQAAAgAAAAECAAAAEnBlcm1pc3Npb25zIGRlbmllZAQAAAAKZmFjdG9yeUNmZwkABLUAAAACCQEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAQkBAAAAEGtleUZhY3RvcnlDb25maWcAAAAABQAAAANTRVAJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAEGtleUZhY3RvcnlDb25maWcAAAAACQEAAAAQZGF0YUZhY3RvcnlDZmdWMwAAAAsJAAGRAAAAAgUAAAAKZmFjdG9yeUNmZwAAAAAAAAAAAQkAAZEAAAACBQAAAApmYWN0b3J5Q2ZnAAAAAAAAAAACCQABkQAAAAIFAAAACmZhY3RvcnlDZmcAAAAAAAAAAAMJAAGRAAAAAgUAAAAKZmFjdG9yeUNmZwAAAAAAAAAABAkAAZEAAAACBQAAAApmYWN0b3J5Q2ZnAAAAAAAAAAAFCQABkQAAAAIFAAAACmZhY3RvcnlDZmcAAAAAAAAAAAYJAAGRAAAAAgUAAAAKZmFjdG9yeUNmZwAAAAAAAAAABwUAAAALZGFvQ29udHJhY3QFAAAAEW1hcmtldGluZ0NvbnRyYWN0BQAAABJnd3hSZXdhcmRzQ29udHJhY3QFAAAADWJpcmRzQ29udHJhY3QFAAAAA25pbAAAAAFpAQAAAA9hY3RpdmF0ZU5ld1Bvb2wAAAAHAAAAC3Bvb2xBZGRyZXNzAAAADmFtb3VudEFzc2V0U3RyAAAADXByaWNlQXNzZXRTdHIAAAALbHBBc3NldE5hbWUAAAAMbHBBc3NldERlc2NyAAAACnBvb2xXZWlnaHQAAAAIcG9vbFR5cGUDCQEAAAACIT0AAAACCAUAAAABaQAAAAZjYWxsZXIFAAAABHRoaXMJAAACAAAAAQIAAAAScGVybWlzc2lvbnMgZGVuaWVkAwkBAAAACWlzRGVmaW5lZAAAAAEJAAQiAAAAAQkBAAAAKWtleU1hcHBpbmdQb29sQ29udHJhY3RBZGRyZXNzVG9Qb29sQXNzZXRzAAAAAQUAAAALcG9vbEFkZHJlc3MJAAACAAAAAQkAASwAAAACCQABLAAAAAICAAAADVBvb2wgYWRkcmVzcyAFAAAAC3Bvb2xBZGRyZXNzAgAAABQgYWxyZWFkeSByZWdpc3RlcmVkLgQAAAAXaW50ZXJuYWxBbW91bnRBc3NldERhdGEJAQAAABpnZXRJbnRlcm5hbEFzc2V0SWRPckNyZWF0ZQAAAAIFAAAADmFtb3VudEFzc2V0U3RyAAAAAAAAAAABBAAAABVpbnRlcm5hbEFtb3VudEFzc2V0SWQIBQAAABdpbnRlcm5hbEFtb3VudEFzc2V0RGF0YQAAAAJfMQQAAAAWaW50ZXJuYWxQcmljZUFzc2V0RGF0YQkBAAAAGmdldEludGVybmFsQXNzZXRJZE9yQ3JlYXRlAAAAAgUAAAANcHJpY2VBc3NldFN0cgMIBQAAABdpbnRlcm5hbEFtb3VudEFzc2V0RGF0YQAAAAJfMwAAAAAAAAAAAgAAAAAAAAAAAQQAAAAUaW50ZXJuYWxQcmljZUFzc2V0SWQIBQAAABZpbnRlcm5hbFByaWNlQXNzZXREYXRhAAAAAl8xBAAAABVwb29sQWNjb3VudFNjcmlwdEhhc2gJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkAA/EAAAABCQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABBQAAAAtwb29sQWRkcmVzcwkAASwAAAACAgAAAClObyBzY3JpcHQgaGFzIGJlZW4gZm91bmQgb24gcG9vbCBhY2NvdW50IAUAAAALcG9vbEFkZHJlc3MEAAAAHGV0aGFsb25Qb29sQWNjb3VudFNjcmlwdEhhc2gJAQAAABFAZXh0ck5hdGl2ZSgxMDU3KQAAAAEJAQAAABFrZXlQb29sU2NyaXB0SGFzaAAAAAAEAAAACnBvb2xDb25maWcJAAQdAAAAAgUAAAAEdGhpcwkBAAAADWtleVBvb2xDb25maWcAAAACCQABpAAAAAEFAAAAFWludGVybmFsQW1vdW50QXNzZXRJZAkAAaQAAAABBQAAABRpbnRlcm5hbFByaWNlQXNzZXRJZAMJAQAAAAlpc0RlZmluZWQAAAABBQAAAApwb29sQ29uZmlnCQAAAgAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAFUG9vbCAFAAAADmFtb3VudEFzc2V0U3RyAgAAAAEvBQAAAA1wcmljZUFzc2V0U3RyAgAAABwgaGFzIGFscmVhZHkgYmVlbiBhY3RpdmF0ZWQuBAAAAA9wb29sQ29uZmlnVmFsdWUJAQAAAAV2YWx1ZQAAAAEJAAQdAAAAAgUAAAAEdGhpcwkBAAAADWtleVBvb2xDb25maWcAAAACCQABpAAAAAEFAAAAFWludGVybmFsQW1vdW50QXNzZXRJZAkAAaQAAAABBQAAABRpbnRlcm5hbFByaWNlQXNzZXRJZAQAAAAUYW1vdW50QXNzZXRzRGVjaW1hbHMDCQAAAAAAAAIFAAAADmFtb3VudEFzc2V0U3RyAgAAAAVXQVZFUwUAAAARZGVjaW1hbHNNdWx0UHJpY2UJAABsAAAABgAAAAAAAAAACgAAAAAAAAAAAAgJAQAAAAV2YWx1ZQAAAAEJAAPsAAAAAQkAAlkAAAABBQAAAA5hbW91bnRBc3NldFN0cgAAAAhkZWNpbWFscwAAAAAAAAAAAAAAAAAAAAAAAAUAAAAERE9XTgQAAAATcHJpY2VBc3NldHNEZWNpbWFscwMJAAAAAAAAAgUAAAANcHJpY2VBc3NldFN0cgIAAAAFV0FWRVMFAAAAEWRlY2ltYWxzTXVsdFByaWNlCQAAbAAAAAYAAAAAAAAAAAoAAAAAAAAAAAAICQEAAAAFdmFsdWUAAAABCQAD7AAAAAEJAAJZAAAAAQUAAAANcHJpY2VBc3NldFN0cgAAAAhkZWNpbWFscwAAAAAAAAAAAAAAAAAAAAAAAAUAAAAERE9XTgQAAAASbHBBc3NldElzc3VlQWN0aW9uCQAEQgAAAAUFAAAAC2xwQXNzZXROYW1lBQAAAAxscEFzc2V0RGVzY3IAAAAAAAAAAAEAAAAAAAAAAAgGBAAAAAlscEFzc2V0SWQJAAQ4AAAAAQUAAAASbHBBc3NldElzc3VlQWN0aW9uBAAAAAxscEFzc2V0SWRTdHIJAAJYAAAAAQUAAAAJbHBBc3NldElkBAAAABhwb29sQWN0aXZhdGVJbnZva2VSZXN1bHQJAAP8AAAABAkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQUAAAALcG9vbEFkZHJlc3MCAAAACGFjdGl2YXRlCQAETAAAAAIFAAAADmFtb3VudEFzc2V0U3RyCQAETAAAAAIFAAAADXByaWNlQXNzZXRTdHIFAAAAA25pbAUAAAADbmlsAwkAAAAAAAACBQAAABhwb29sQWN0aXZhdGVJbnZva2VSZXN1bHQFAAAAGHBvb2xBY3RpdmF0ZUludm9rZVJlc3VsdAMJAQAAAAIhPQAAAAIFAAAAGHBvb2xBY3RpdmF0ZUludm9rZVJlc3VsdAIAAAAHc3VjY2VzcwkAAAIAAAABAgAAACNQb29sIGluaXRpYWxpc2F0aW9uIGVycm9yIGhhcHBlbmVkLgkABRQAAAACCQAETgAAAAIJAAROAAAAAggFAAAAF2ludGVybmFsQW1vdW50QXNzZXREYXRhAAAAAl8yCAUAAAAWaW50ZXJuYWxQcmljZUFzc2V0RGF0YQAAAAJfMgkABEwAAAACBQAAABJscEFzc2V0SXNzdWVBY3Rpb24JAARMAAAAAgkBAAAABEJ1cm4AAAACBQAAAAlscEFzc2V0SWQAAAAAAAAAAAEJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAADWtleVBvb2xDb25maWcAAAACCQABpAAAAAEFAAAAFWludGVybmFsQW1vdW50QXNzZXRJZAkAAaQAAAABBQAAABRpbnRlcm5hbFByaWNlQXNzZXRJZAkBAAAAC2RhdGFQb29sQ2ZnAAAACwUAAAALcG9vbEFkZHJlc3MJAAGkAAAAAQUAAAAKUG9vbEFjdGl2ZQUAAAAMbHBBc3NldElkU3RyBQAAAA5hbW91bnRBc3NldFN0cgUAAAANcHJpY2VBc3NldFN0cgUAAAAUYW1vdW50QXNzZXRzRGVjaW1hbHMFAAAAE3ByaWNlQXNzZXRzRGVjaW1hbHMFAAAAFWludGVybmFsQW1vdW50QXNzZXRJZAUAAAAUaW50ZXJuYWxQcmljZUFzc2V0SWQFAAAAEWRlY2ltYWxzTXVsdFByaWNlBQAAAAhwb29sVHlwZQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAda2V5TWFwcGluZ0xwQXNzZXRUb1Bvb2xBc3NldHMAAAABBQAAAAxscEFzc2V0SWRTdHIJAQAAABVkYXRhTWFwcGluZ1Bvb2xBc3NldHMAAAACBQAAABVpbnRlcm5hbEFtb3VudEFzc2V0SWQFAAAAFGludGVybmFsUHJpY2VBc3NldElkCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAB1rZXlNYXBwaW5nUG9vbEFzc2V0c1RvTHBhc3NldAAAAAIJAAGkAAAAAQUAAAAVaW50ZXJuYWxBbW91bnRBc3NldElkCQABpAAAAAEFAAAAFGludGVybmFsUHJpY2VBc3NldElkCQABLAAAAAICAAAABCVzX18FAAAADGxwQXNzZXRJZFN0cgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAApa2V5TWFwcGluZ1Bvb2xDb250cmFjdEFkZHJlc3NUb1Bvb2xBc3NldHMAAAABBQAAAAtwb29sQWRkcmVzcwkBAAAAFWRhdGFNYXBwaW5nUG9vbEFzc2V0cwAAAAIFAAAAFWludGVybmFsQW1vdW50QXNzZXRJZAUAAAAUaW50ZXJuYWxQcmljZUFzc2V0SWQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAKWtleU1hcHBpbmdQb29sQXNzZXRzVG9Qb29sQ29udHJhY3RBZGRyZXNzAAAAAgUAAAAVaW50ZXJuYWxBbW91bnRBc3NldElkBQAAABRpbnRlcm5hbFByaWNlQXNzZXRJZAUAAAALcG9vbEFkZHJlc3MJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAKmtleU1hcHBpbmdQb29sTFBBc3NldFRvUG9vbENvbnRyYWN0QWRkcmVzcwAAAAEFAAAADGxwQXNzZXRJZFN0cgUAAAALcG9vbEFkZHJlc3MJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAHmtleU1hcHBpbmdQb29sQ29udHJhY1RvTFBBc3NldAAAAAEFAAAAC3Bvb2xBZGRyZXNzBQAAAAxscEFzc2V0SWRTdHIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAAA9rZXlQb29sVG9XZWlnaHQAAAABBQAAAAtwb29sQWRkcmVzcwUAAAAKcG9vbFdlaWdodAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAPa2V5THBUb2tlbnNMaXN0AAAAAAkBAAAAF2NyZWF0ZUxwVG9rZW5zTGlzdEVudHJ5AAAAAQUAAAAMbHBBc3NldElkU3RyBQAAAANuaWwCAAAAB3N1Y2Nlc3MJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAACm1hbmFnZVBvb2wAAAACAAAAC3Bvb2xBZGRyZXNzAAAACW5ld1N0YXR1cwMJAQAAAAIhPQAAAAIIBQAAAAFpAAAABmNhbGxlcgUAAAAEdGhpcwkAAAIAAAABAgAAABJwZXJtaXNzaW9ucyBkZW5pZWQEAAAACnBvb2xDb25maWcJAQAAAA1nZXRQb29sQ29uZmlnAAAAAQUAAAALcG9vbEFkZHJlc3MEAAAACnBvb2xTdGF0dXMJAAGRAAAAAgUAAAAKcG9vbENvbmZpZwUAAAANaWR4UG9vbFN0YXR1cwQAAAAMbHBBc3NldElkU3RyCQABkQAAAAIFAAAACnBvb2xDb25maWcFAAAAEGlkeFBvb2xMUEFzc2V0SWQEAAAADmFtb3VudEFzc2V0U3RyCQABkQAAAAIFAAAACnBvb2xDb25maWcFAAAADWlkeEFtdEFzc2V0SWQEAAAADXByaWNlQXNzZXRTdHIJAAGRAAAAAgUAAAAKcG9vbENvbmZpZwUAAAAPaWR4UHJpY2VBc3NldElkBAAAABRhbW91bnRBc3NldHNEZWNpbWFscwkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAACnBvb2xDb25maWcFAAAADmlkeEFtdEFzc2V0RGNtBAAAABNwcmljZUFzc2V0c0RlY2ltYWxzCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAKcG9vbENvbmZpZwUAAAAQaWR4UHJpY2VBc3NldERjbQQAAAAVaW50ZXJuYWxBbW91bnRBc3NldElkCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAKcG9vbENvbmZpZwUAAAAOaWR4SUFtdEFzc2V0SWQEAAAAFGludGVybmFsUHJpY2VBc3NldElkCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAKcG9vbENvbmZpZwUAAAAQaWR4SVByaWNlQXNzZXRJZAQAAAAKbHBBc3NldERjbQkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAACnBvb2xDb25maWcFAAAADWlkeExQQXNzZXREY20EAAAACHBvb2xUeXBlCQABkQAAAAIFAAAACnBvb2xDb25maWcFAAAAC2lkeFBvb2xUeXBlCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAA1rZXlQb29sQ29uZmlnAAAAAgkAAaQAAAABBQAAABVpbnRlcm5hbEFtb3VudEFzc2V0SWQJAAGkAAAAAQUAAAAUaW50ZXJuYWxQcmljZUFzc2V0SWQJAQAAAAtkYXRhUG9vbENmZwAAAAsFAAAAC3Bvb2xBZGRyZXNzCQABpAAAAAEFAAAACW5ld1N0YXR1cwUAAAAMbHBBc3NldElkU3RyBQAAAA5hbW91bnRBc3NldFN0cgUAAAANcHJpY2VBc3NldFN0cgUAAAAUYW1vdW50QXNzZXRzRGVjaW1hbHMFAAAAE3ByaWNlQXNzZXRzRGVjaW1hbHMFAAAAFWludGVybmFsQW1vdW50QXNzZXRJZAUAAAAUaW50ZXJuYWxQcmljZUFzc2V0SWQFAAAACmxwQXNzZXREY20FAAAACHBvb2xUeXBlBQAAAANuaWwAAAABaQEAAAAEZW1pdAAAAAEAAAAMYW1vdW50VG9FbWl0BAAAAAZjYWxsZXIIBQAAAAFpAAAABmNhbGxlcgQAAAAMb3JpZ2luQ2FsbGVyCAUAAAABaQAAAAxvcmlnaW5DYWxsZXIEAAAAEGxwQXNzZXRSZXF1ZXN0ZWQJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABCIAAAABCQEAAAAea2V5TWFwcGluZ1Bvb2xDb250cmFjVG9MUEFzc2V0AAAAAQkABCUAAAABBQAAAAZjYWxsZXICAAAAHUludmFsaWQgTFAgYWRkcmVzcyBjYWxsZWQgbWUuBAAAAAdscEFzc2V0CQACWQAAAAEFAAAAEGxwQXNzZXRSZXF1ZXN0ZWQDCQAAZgAAAAIFAAAADGFtb3VudFRvRW1pdAAAAAAAAAAAAAkABRQAAAACCQAETAAAAAIJAQAAAAdSZWlzc3VlAAAAAwUAAAAHbHBBc3NldAUAAAAMYW1vdW50VG9FbWl0BgkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAADGFtb3VudFRvRW1pdAUAAAAHbHBBc3NldAUAAAADbmlsAgAAAAdzdWNjZXNzBQAAAANuaWwAAAABaQEAAAAEYnVybgAAAAEAAAAMYW1vdW50VG9CdXJuBAAAAAZjYWxsZXIIBQAAAAFpAAAABmNhbGxlcgQAAAAMb3JpZ2luQ2FsbGVyCAUAAAABaQAAAAxvcmlnaW5DYWxsZXIEAAAAB3BheW1lbnQJAQAAAAV2YWx1ZQAAAAEJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAEAAAADXBheW1lbnRBbW91bnQJAQAAAAV2YWx1ZQAAAAEIBQAAAAdwYXltZW50AAAABmFtb3VudAQAAAAPaW5BbW91bnRBc3NldElkCQACWAAAAAEJAQAAAAV2YWx1ZQAAAAEIBQAAAAdwYXltZW50AAAAB2Fzc2V0SWQEAAAAGmxwQXNzZXRSZXF1ZXN0ZWRGb3JCdXJuaW5nCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQiAAAAAQkBAAAAHmtleU1hcHBpbmdQb29sQ29udHJhY1RvTFBBc3NldAAAAAEJAAQlAAAAAQUAAAAGY2FsbGVyAgAAAB1JbnZhbGlkIExQIGFkZHJlc3MgY2FsbGVkIG1lLgMJAQAAAAIhPQAAAAIFAAAAD2luQW1vdW50QXNzZXRJZAUAAAAabHBBc3NldFJlcXVlc3RlZEZvckJ1cm5pbmcJAAACAAAAAQIAAAAVSW52YWxpZCBhc3NldCBwYXNzZWQuAwkBAAAAAiE9AAAAAgUAAAAMYW1vdW50VG9CdXJuBQAAAA1wYXltZW50QW1vdW50CQAAAgAAAAECAAAAFkludmFsaWQgYW1vdW50IHBhc3NlZC4EAAAAB2xwQXNzZXQJAAJZAAAAAQUAAAAabHBBc3NldFJlcXVlc3RlZEZvckJ1cm5pbmcJAAUUAAAAAgkABEwAAAACCQEAAAAEQnVybgAAAAIFAAAAB2xwQXNzZXQFAAAADGFtb3VudFRvQnVybgUAAAADbmlsAgAAAAdzdWNjZXNzAAAAAWkBAAAADW1vZGlmeVdlaWdodHMAAAACAAAADmJ0Y1Bvb2xBZGRyZXNzAAAADmV0aFBvb2xBZGRyZXNzBAAAAAxnd3hXZWlnaHROZXcJAABpAAAAAgkAAGgAAAACAAAAAAAAAAAFBQAAAA5QT09MV0VJR0hUTVVMVAAAAAAAAAAAZAQAAAAPd2VpZ2h0RGVjcmVtZW50CQAAaQAAAAIJAABoAAAAAgAAAAAAAAAAGQUAAAAOUE9PTFdFSUdIVE1VTFQAAAAAAAAAA+gEAAAABmNhbGxlcggFAAAAAWkAAAAGY2FsbGVyAwkBAAAAAiE9AAAAAgUAAAAGY2FsbGVyBQAAAAR0aGlzCQAAAgAAAAECAAAAEnBlcm1pc3Npb25zIGRlbmllZAQAAAAKZmFjdG9yeUNmZwkABLUAAAACCQEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAQkBAAAAEGtleUZhY3RvcnlDb25maWcAAAAABQAAAANTRVAEAAAAC3N0YWtpbmdEYXBwCQEAAAAXZ2V0U3Rha2luZ0FkZHJlc3NPckZhaWwAAAABBQAAAApmYWN0b3J5Q2ZnBAAAAA1nd3hSZXdhcmREYXBwCQEAAAAZZ2V0R3d4UmV3YXJkQWRkcmVzc09yRmFpbAAAAAEFAAAACmZhY3RvcnlDZmcEAAAADGJ0Y1dlaWdodEtFWQkBAAAAD2tleVBvb2xUb1dlaWdodAAAAAEFAAAADmJ0Y1Bvb2xBZGRyZXNzBAAAAAxldGhXZWlnaHRLRVkJAQAAAA9rZXlQb29sVG9XZWlnaHQAAAABBQAAAA5ldGhQb29sQWRkcmVzcwQAAAAMZ3d4V2VpZ2h0S0VZCQEAAAAPa2V5UG9vbFRvV2VpZ2h0AAAAAQUAAAAOR1dYdmlydHVhbFBPT0wEAAAACWJ0Y1dlaWdodAkBAAAADGdldEludE9yRmFpbAAAAAEFAAAADGJ0Y1dlaWdodEtFWQQAAAAJZXRoV2VpZ2h0CQEAAAAMZ2V0SW50T3JGYWlsAAAAAQUAAAAMZXRoV2VpZ2h0S0VZBAAAAAxidGNXZWlnaHROZXcJAABlAAAAAgUAAAAJYnRjV2VpZ2h0BQAAAA93ZWlnaHREZWNyZW1lbnQEAAAADGV0aFdlaWdodE5ldwkAAGUAAAACBQAAAAlldGhXZWlnaHQFAAAAD3dlaWdodERlY3JlbWVudAMJAABnAAAAAgAAAAAAAAAAAAUAAAAMYnRjV2VpZ2h0TmV3CQAAAgAAAAEJAAEsAAAAAgIAAAAWaW52YWxpZCBidGNXZWlnaHROZXc6IAkAAaQAAAABBQAAAAxidGNXZWlnaHROZXcDCQAAZwAAAAIAAAAAAAAAAAAFAAAADGV0aFdlaWdodE5ldwkAAAIAAAABCQABLAAAAAICAAAAFmludmFsaWQgZXRoV2VpZ2h0TmV3OiAJAAGkAAAAAQUAAAAMZXRoV2VpZ2h0TmV3BAAAAA9idGNMcEFzc2V0SWRTdHIJAQAAAA9nZXRTdHJpbmdPckZhaWwAAAABCQEAAAAea2V5TWFwcGluZ1Bvb2xDb250cmFjVG9MUEFzc2V0AAAAAQUAAAAOYnRjUG9vbEFkZHJlc3MEAAAAD2V0aExwQXNzZXRJZFN0cgkBAAAAD2dldFN0cmluZ09yRmFpbAAAAAEJAQAAAB5rZXlNYXBwaW5nUG9vbENvbnRyYWNUb0xQQXNzZXQAAAABBQAAAA5ldGhQb29sQWRkcmVzcwQAAAARb25Nb2RpZnlXZWlnaHRCdGMJAAP8AAAABAUAAAALc3Rha2luZ0RhcHACAAAADm9uTW9kaWZ5V2VpZ2h0CQAETAAAAAIFAAAAD2J0Y0xwQXNzZXRJZFN0cgkABEwAAAACBQAAAA5idGNQb29sQWRkcmVzcwUAAAADbmlsBQAAAANuaWwDCQAAAAAAAAIFAAAAEW9uTW9kaWZ5V2VpZ2h0QnRjBQAAABFvbk1vZGlmeVdlaWdodEJ0YwQAAAARb25Nb2RpZnlXZWlnaHRFdGgJAAP8AAAABAUAAAALc3Rha2luZ0RhcHACAAAADm9uTW9kaWZ5V2VpZ2h0CQAETAAAAAIFAAAAD2V0aExwQXNzZXRJZFN0cgkABEwAAAACBQAAAA5ldGhQb29sQWRkcmVzcwUAAAADbmlsBQAAAANuaWwDCQAAAAAAAAIFAAAAEW9uTW9kaWZ5V2VpZ2h0RXRoBQAAABFvbk1vZGlmeVdlaWdodEV0aAQAAAAVb25FbWlzc2lvbkZvckd3eFN0YXJ0CQAD/AAAAAQFAAAADWd3eFJld2FyZERhcHACAAAAFW9uRW1pc3Npb25Gb3JHd3hTdGFydAUAAAADbmlsBQAAAANuaWwDCQAAAAAAAAIFAAAAFW9uRW1pc3Npb25Gb3JHd3hTdGFydAUAAAAVb25FbWlzc2lvbkZvckd3eFN0YXJ0CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAxidGNXZWlnaHRLRVkFAAAADGJ0Y1dlaWdodE5ldwkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAMZXRoV2VpZ2h0S0VZBQAAAAxldGhXZWlnaHROZXcJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAADGd3eFdlaWdodEtFWQUAAAAMZ3d4V2VpZ2h0TmV3CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAWa2V5UG9vbFRvV2VpZ2h0SGlzdG9yeQAAAAIFAAAADmJ0Y1Bvb2xBZGRyZXNzAAAAAAAAAAAABQAAAAlidGNXZWlnaHQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABZrZXlQb29sVG9XZWlnaHRIaXN0b3J5AAAAAgUAAAAOZXRoUG9vbEFkZHJlc3MAAAAAAAAAAAAFAAAACWV0aFdlaWdodAUAAAADbmlsCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAQAAAAJ0eAEAAAAGdmVyaWZ5AAAAAAkAAfQAAAADCAUAAAACdHgAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAJ0eAAAAAZwcm9vZnMAAAAAAAAAAAAIBQAAAAJ0eAAAAA9zZW5kZXJQdWJsaWNLZXmW2Rr7", "chainId": 84, "height": 1835357, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 8WFBieHcRr21kB1ioqqwE2obgnVzABf49rxtQuu1rAz3 Next: H9Cf4CHaWjbN78PHYb1od6pdEbE5bMMhVHxaxWF5HvLU Diff:
OldNewDifferences
7575
7676
7777 func keyPoolToWeight (poolAddress) = ("%s%s__poolWeight__" + poolAddress)
78+
79+
80+func keyPoolToWeightHistory (poolAddress,num) = ((("%s%s__poolWeight__" + poolAddress) + "__") + toString(num))
7881
7982
8083 func keyMappingsInternal2baseAssetId (internalBaseAsset) = ("%s%s%d__mappings__internal2baseAssetId__" + toString(internalBaseAsset))
323326 let btcWeightKEY = keyPoolToWeight(btcPoolAddress)
324327 let ethWeightKEY = keyPoolToWeight(ethPoolAddress)
325328 let gwxWeightKEY = keyPoolToWeight(GWXvirtualPOOL)
326- let btcWeightNew = (getIntOrFail(btcWeightKEY) - weightDecrement)
327- let ethWeightNew = (getIntOrFail(ethWeightKEY) - weightDecrement)
329+ let btcWeight = getIntOrFail(btcWeightKEY)
330+ let ethWeight = getIntOrFail(ethWeightKEY)
331+ let btcWeightNew = (btcWeight - weightDecrement)
332+ let ethWeightNew = (ethWeight - weightDecrement)
328333 if ((0 >= btcWeightNew))
329334 then throw(("invalid btcWeightNew: " + toString(btcWeightNew)))
330335 else if ((0 >= ethWeightNew))
340345 then {
341346 let onEmissionForGwxStart = invoke(gwxRewardDapp, "onEmissionForGwxStart", nil, nil)
342347 if ((onEmissionForGwxStart == onEmissionForGwxStart))
343- then [IntegerEntry(btcWeightKEY, btcWeightNew), IntegerEntry(ethWeightKEY, ethWeightNew), IntegerEntry(gwxWeightKEY, gwxWeightNew)]
348+ then [IntegerEntry(btcWeightKEY, btcWeightNew), IntegerEntry(ethWeightKEY, ethWeightNew), IntegerEntry(gwxWeightKEY, gwxWeightNew), IntegerEntry(keyPoolToWeightHistory(btcPoolAddress, 0), btcWeight), IntegerEntry(keyPoolToWeightHistory(ethPoolAddress, 0), ethWeight)]
344349 else throw("Strict value is not equal to itself.")
345350 }
346351 else throw("Strict value is not equal to itself.")
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)
78+
79+
80+func keyPoolToWeightHistory (poolAddress,num) = ((("%s%s__poolWeight__" + poolAddress) + "__") + toString(num))
7881
7982
8083 func keyMappingsInternal2baseAssetId (internalBaseAsset) = ("%s%s%d__mappings__internal2baseAssetId__" + toString(internalBaseAsset))
8184
8285
8386 func keyMappingsBaseAsset2internalId (baseAssetStr) = ("%s%s%s__mappings__baseAsset2internalId__" + baseAssetStr)
8487
8588
8689 func keyPoolConfig (amountAssetInternal,priceAssetInternal) = (((("%d%d%s__" + amountAssetInternal) + "__") + priceAssetInternal) + "__config")
8790
8891
8992 func keyMappingLpAssetToPoolAssets (lpAssetStr) = (("%s%s%s__" + lpAssetStr) + "__mappings__lpAsset2Pool")
9093
9194
9295 func keyMappingPoolAssetsToLpasset (internalAmountAssetIdStr,internalPriceAssetIdStr) = (((("%d%d%s%s__" + internalAmountAssetIdStr) + "__") + internalPriceAssetIdStr) + "__mappings__PoolAssets2LpAsset")
9396
9497
9598 func keyMappingPoolContractAddressToPoolAssets (poolContractAddress) = (("%s%s%s__" + poolContractAddress) + "__mappings__poolContract2PoolAssets")
9699
97100
98101 func keyMappingPoolAssetsToPoolContractAddress (internalAmountAssetIdStr,internalPriceAssetIdStr) = (((("%d%d%s%s__" + toString(internalAmountAssetIdStr)) + "__") + toString(internalPriceAssetIdStr)) + "__mappings__poolAssets2PoolContract")
99102
100103
101104 func keyMappingPoolContracToLPAsset (poolContractAddress) = (("%s%s%s__" + poolContractAddress) + "__mappings__poolContract2LpAsset")
102105
103106
104107 func keyMappingPoolLPAssetToPoolContractAddress (lpAssetStr) = (("%s%s%s__" + lpAssetStr) + "__mappings__lpAsset2PoolContract")
105108
106109
107110 func getStringOrFail (key) = valueOrErrorMessage(getString(this, key), ("No data for this.key=" + key))
108111
109112
110113 func getBooleanOrFail (key) = valueOrErrorMessage(getBoolean(this, key), ("No data for this.key=" + key))
111114
112115
113116 func getIntOrFail (key) = valueOrErrorMessage(getInteger(this, key), ("No data for this.key=" + key))
114117
115118
116119 let IdxFactoryCfgStakingDapp = 1
117120
118121 let IdxFactoryCfgBoostingDapp = 2
119122
120123 let IdxFactoryCfgIdoDapp = 3
121124
122125 let IdxFactoryCfgTeamDapp = 4
123126
124127 let IdxFactoryCfgEmissionDapp = 5
125128
126129 let IdxFactoryCfgRestDapp = 6
127130
128131 let IdxFactoryCfgSlippageDapp = 7
129132
130133 let IdxFactoryCfgDaoDapp = 8
131134
132135 let IdxFactoryCfgMarketingDapp = 9
133136
134137 let IdxFactoryCfgGwxRewardDapp = 10
135138
136139 let IdxFactoryCfgBirdsDapp = 11
137140
138141 func getBoostingAddressOrFail (factoryCfg) = addressFromStringValue(factoryCfg[IdxFactoryCfgBoostingDapp])
139142
140143
141144 func getEmissionAddressOrFail (factoryCfg) = addressFromStringValue(factoryCfg[IdxFactoryCfgEmissionDapp])
142145
143146
144147 func getStakingAddressOrFail (factoryCfg) = addressFromStringValue(factoryCfg[IdxFactoryCfgStakingDapp])
145148
146149
147150 func getGwxRewardAddressOrFail (factoryCfg) = addressFromStringValue(factoryCfg[IdxFactoryCfgGwxRewardDapp])
148151
149152
150153 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)
151154
152155
153156 func dataFactoryCfg (stakingAddress,boostingAddress,idoContract,teamContract,emissionContract,restContract,slippageContract) = makeString(["%s%s%s%s%s%s", stakingAddress, boostingAddress, idoContract, teamContract, emissionContract, restContract, slippageContract], SEP)
154157
155158
156159 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)
157160
158161
159162 func dataMappingPoolAssets (internalAmountAssetStr,internalPriceAssetStr) = makeString(["%d%d", toString(internalAmountAssetStr), toString(internalPriceAssetStr)], SEP)
160163
161164
162165 func getPoolConfig (poolAddress) = {
163166 let poolAssets = split(getStringOrFail(keyMappingPoolContractAddressToPoolAssets(poolAddress)), SEP)
164167 let amountAssetInternal = poolAssets[1]
165168 let priceAssetInternal = poolAssets[2]
166169 split(getStringOrFail(keyPoolConfig(amountAssetInternal, priceAssetInternal)), SEP)
167170 }
168171
169172
170173 func getInternalAssetIdOrCreate (assetIdStr,incrementor) = {
171174 let internalAssetId = valueOrElse(getInteger(this, keyMappingsBaseAsset2internalId(assetIdStr)), 0)
172175 let currentIndexOfInternalId = valueOrElse(getInteger(this, keyNextInternalAssetId()), 0)
173176 let result = if ((internalAssetId == 0))
174177 then {
175178 let newInternalAssetId = (currentIndexOfInternalId + incrementor)
176179 $Tuple3(newInternalAssetId, [IntegerEntry(keyNextInternalAssetId(), newInternalAssetId), IntegerEntry(keyMappingsBaseAsset2internalId(assetIdStr), newInternalAssetId), StringEntry(keyMappingsInternal2baseAssetId(newInternalAssetId), assetIdStr)], true)
177180 }
178181 else $Tuple3(internalAssetId, nil, false)
179182 result
180183 }
181184
182185
183186 func createLpTokensListEntry (newLpToken) = {
184187 let lpTokens = getString(this, keyLpTokensList())
185188 if (isDefined(lpTokens))
186189 then ((value(lpTokens) + SEP) + newLpToken)
187190 else newLpToken
188191 }
189192
190193
191194 @Callable(i)
192195 func constructor (stakingContract,boostingContract,idoContract,teamContract,emissionContract,restContract,slpipageContract,priceDecimals) = if ((i.caller != this))
193196 then throw("permissions denied")
194197 else [StringEntry(keyFactoryConfig(), dataFactoryCfg(stakingContract, boostingContract, idoContract, teamContract, emissionContract, restContract, slpipageContract)), IntegerEntry(keyPriceDecimals(), priceDecimals)]
195198
196199
197200
198201 @Callable(i)
199202 func constructorV2 (mathcherPub58Str) = if ((i.caller != this))
200203 then throw("permissions denied")
201204 else {
202205 let mathcerPub = addressFromPublicKey(fromBase58String(mathcherPub58Str))
203206 if ((mathcerPub == mathcerPub))
204207 then [StringEntry(keyMatcherPub(), mathcherPub58Str)]
205208 else throw("Strict value is not equal to itself.")
206209 }
207210
208211
209212
210213 @Callable(i)
211214 func constructorV3 (daoContract,marketingContract,gwxRewardsContract,birdsContract) = if ((i.caller != this))
212215 then throw("permissions denied")
213216 else {
214217 let factoryCfg = split(getStringOrFail(keyFactoryConfig()), SEP)
215218 [StringEntry(keyFactoryConfig(), dataFactoryCfgV3(factoryCfg[1], factoryCfg[2], factoryCfg[3], factoryCfg[4], factoryCfg[5], factoryCfg[6], factoryCfg[7], daoContract, marketingContract, gwxRewardsContract, birdsContract))]
216219 }
217220
218221
219222
220223 @Callable(i)
221224 func activateNewPool (poolAddress,amountAssetStr,priceAssetStr,lpAssetName,lpAssetDescr,poolWeight,poolType) = if ((i.caller != this))
222225 then throw("permissions denied")
223226 else if (isDefined(getString(keyMappingPoolContractAddressToPoolAssets(poolAddress))))
224227 then throw((("Pool address " + poolAddress) + " already registered."))
225228 else {
226229 let internalAmountAssetData = getInternalAssetIdOrCreate(amountAssetStr, 1)
227230 let internalAmountAssetId = internalAmountAssetData._1
228231 let internalPriceAssetData = getInternalAssetIdOrCreate(priceAssetStr, if (internalAmountAssetData._3)
229232 then 2
230233 else 1)
231234 let internalPriceAssetId = internalPriceAssetData._1
232235 let poolAccountScriptHash = valueOrErrorMessage(scriptHash(addressFromStringValue(poolAddress)), ("No script has been found on pool account " + poolAddress))
233236 let ethalonPoolAccountScriptHash = getBinaryValue(keyPoolScriptHash())
234237 let poolConfig = getString(this, keyPoolConfig(toString(internalAmountAssetId), toString(internalPriceAssetId)))
235238 if (isDefined(poolConfig))
236239 then throw((((("Pool " + amountAssetStr) + "/") + priceAssetStr) + " has already been activated."))
237240 else {
238241 let poolConfigValue = value(getString(this, keyPoolConfig(toString(internalAmountAssetId), toString(internalPriceAssetId))))
239242 let amountAssetsDecimals = if ((amountAssetStr == "WAVES"))
240243 then decimalsMultPrice
241244 else pow(10, 0, value(assetInfo(fromBase58String(amountAssetStr))).decimals, 0, 0, DOWN)
242245 let priceAssetsDecimals = if ((priceAssetStr == "WAVES"))
243246 then decimalsMultPrice
244247 else pow(10, 0, value(assetInfo(fromBase58String(priceAssetStr))).decimals, 0, 0, DOWN)
245248 let lpAssetIssueAction = Issue(lpAssetName, lpAssetDescr, 1, 8, true)
246249 let lpAssetId = calculateAssetId(lpAssetIssueAction)
247250 let lpAssetIdStr = toBase58String(lpAssetId)
248251 let poolActivateInvokeResult = invoke(addressFromStringValue(poolAddress), "activate", [amountAssetStr, priceAssetStr], nil)
249252 if ((poolActivateInvokeResult == poolActivateInvokeResult))
250253 then if ((poolActivateInvokeResult != "success"))
251254 then throw("Pool initialisation error happened.")
252255 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")
253256 else throw("Strict value is not equal to itself.")
254257 }
255258 }
256259
257260
258261
259262 @Callable(i)
260263 func managePool (poolAddress,newStatus) = if ((i.caller != this))
261264 then throw("permissions denied")
262265 else {
263266 let poolConfig = getPoolConfig(poolAddress)
264267 let poolStatus = poolConfig[idxPoolStatus]
265268 let lpAssetIdStr = poolConfig[idxPoolLPAssetId]
266269 let amountAssetStr = poolConfig[idxAmtAssetId]
267270 let priceAssetStr = poolConfig[idxPriceAssetId]
268271 let amountAssetsDecimals = parseIntValue(poolConfig[idxAmtAssetDcm])
269272 let priceAssetsDecimals = parseIntValue(poolConfig[idxPriceAssetDcm])
270273 let internalAmountAssetId = parseIntValue(poolConfig[idxIAmtAssetId])
271274 let internalPriceAssetId = parseIntValue(poolConfig[idxIPriceAssetId])
272275 let lpAssetDcm = parseIntValue(poolConfig[idxLPAssetDcm])
273276 let poolType = poolConfig[idxPoolType]
274277 [StringEntry(keyPoolConfig(toString(internalAmountAssetId), toString(internalPriceAssetId)), dataPoolCfg(poolAddress, toString(newStatus), lpAssetIdStr, amountAssetStr, priceAssetStr, amountAssetsDecimals, priceAssetsDecimals, internalAmountAssetId, internalPriceAssetId, lpAssetDcm, poolType))]
275278 }
276279
277280
278281
279282 @Callable(i)
280283 func emit (amountToEmit) = {
281284 let caller = i.caller
282285 let originCaller = i.originCaller
283286 let lpAssetRequested = valueOrErrorMessage(getString(keyMappingPoolContracToLPAsset(toString(caller))), "Invalid LP address called me.")
284287 let lpAsset = fromBase58String(lpAssetRequested)
285288 if ((amountToEmit > 0))
286289 then $Tuple2([Reissue(lpAsset, amountToEmit, true), ScriptTransfer(i.caller, amountToEmit, lpAsset)], "success")
287290 else nil
288291 }
289292
290293
291294
292295 @Callable(i)
293296 func burn (amountToBurn) = {
294297 let caller = i.caller
295298 let originCaller = i.originCaller
296299 let payment = value(i.payments[0])
297300 let paymentAmount = value(payment.amount)
298301 let inAmountAssetId = toBase58String(value(payment.assetId))
299302 let lpAssetRequestedForBurning = valueOrErrorMessage(getString(keyMappingPoolContracToLPAsset(toString(caller))), "Invalid LP address called me.")
300303 if ((inAmountAssetId != lpAssetRequestedForBurning))
301304 then throw("Invalid asset passed.")
302305 else if ((amountToBurn != paymentAmount))
303306 then throw("Invalid amount passed.")
304307 else {
305308 let lpAsset = fromBase58String(lpAssetRequestedForBurning)
306309 $Tuple2([Burn(lpAsset, amountToBurn)], "success")
307310 }
308311 }
309312
310313
311314
312315 @Callable(i)
313316 func modifyWeights (btcPoolAddress,ethPoolAddress) = {
314317 let gwxWeightNew = ((5 * POOLWEIGHTMULT) / 100)
315318 let weightDecrement = ((25 * POOLWEIGHTMULT) / 1000)
316319 let caller = i.caller
317320 if ((caller != this))
318321 then throw("permissions denied")
319322 else {
320323 let factoryCfg = split(getStringOrFail(keyFactoryConfig()), SEP)
321324 let stakingDapp = getStakingAddressOrFail(factoryCfg)
322325 let gwxRewardDapp = getGwxRewardAddressOrFail(factoryCfg)
323326 let btcWeightKEY = keyPoolToWeight(btcPoolAddress)
324327 let ethWeightKEY = keyPoolToWeight(ethPoolAddress)
325328 let gwxWeightKEY = keyPoolToWeight(GWXvirtualPOOL)
326- let btcWeightNew = (getIntOrFail(btcWeightKEY) - weightDecrement)
327- let ethWeightNew = (getIntOrFail(ethWeightKEY) - weightDecrement)
329+ let btcWeight = getIntOrFail(btcWeightKEY)
330+ let ethWeight = getIntOrFail(ethWeightKEY)
331+ let btcWeightNew = (btcWeight - weightDecrement)
332+ let ethWeightNew = (ethWeight - weightDecrement)
328333 if ((0 >= btcWeightNew))
329334 then throw(("invalid btcWeightNew: " + toString(btcWeightNew)))
330335 else if ((0 >= ethWeightNew))
331336 then throw(("invalid ethWeightNew: " + toString(ethWeightNew)))
332337 else {
333338 let btcLpAssetIdStr = getStringOrFail(keyMappingPoolContracToLPAsset(btcPoolAddress))
334339 let ethLpAssetIdStr = getStringOrFail(keyMappingPoolContracToLPAsset(ethPoolAddress))
335340 let onModifyWeightBtc = invoke(stakingDapp, "onModifyWeight", [btcLpAssetIdStr, btcPoolAddress], nil)
336341 if ((onModifyWeightBtc == onModifyWeightBtc))
337342 then {
338343 let onModifyWeightEth = invoke(stakingDapp, "onModifyWeight", [ethLpAssetIdStr, ethPoolAddress], nil)
339344 if ((onModifyWeightEth == onModifyWeightEth))
340345 then {
341346 let onEmissionForGwxStart = invoke(gwxRewardDapp, "onEmissionForGwxStart", nil, nil)
342347 if ((onEmissionForGwxStart == onEmissionForGwxStart))
343- then [IntegerEntry(btcWeightKEY, btcWeightNew), IntegerEntry(ethWeightKEY, ethWeightNew), IntegerEntry(gwxWeightKEY, gwxWeightNew)]
348+ then [IntegerEntry(btcWeightKEY, btcWeightNew), IntegerEntry(ethWeightKEY, ethWeightNew), IntegerEntry(gwxWeightKEY, gwxWeightNew), IntegerEntry(keyPoolToWeightHistory(btcPoolAddress, 0), btcWeight), IntegerEntry(keyPoolToWeightHistory(ethPoolAddress, 0), ethWeight)]
344349 else throw("Strict value is not equal to itself.")
345350 }
346351 else throw("Strict value is not equal to itself.")
347352 }
348353 else throw("Strict value is not equal to itself.")
349354 }
350355 }
351356 }
352357
353358
354359 @Verifier(tx)
355360 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
356361

github/deemru/w8io/c3f4982 
58.60 ms