tx · BF7YtJwURhSyBDGN4rfC3AH3gUCT2gQW4DboexBz1ZWF

3MxWgDbE9EmjQj8b3LfFwa91FZizptyeQXS:  -0.03800000 Waves

2023.02.13 10:15 [2447518] smart account 3MxWgDbE9EmjQj8b3LfFwa91FZizptyeQXS > SELF 0.00000000 Waves

{ "type": 13, "id": "BF7YtJwURhSyBDGN4rfC3AH3gUCT2gQW4DboexBz1ZWF", "fee": 3800000, "feeAssetId": null, "timestamp": 1676272505664, "version": 2, "chainId": 84, "sender": "3MxWgDbE9EmjQj8b3LfFwa91FZizptyeQXS", "senderPublicKey": "C7xgcYqQ8qV8rmvzAjhQWq4cz82F6VJfXMNygvrTXsfW", "proofs": [ "fXZfNq93GRgoR1mBdN9X6DvHhPJGhf181AV1D1hSfGYUGJW95AtGNp5WtTYGwxiec8vK9f3QYB7Fkx5Sb3YE1QU", "58WSLev1Pse6vDwwNQCVK6NzH1gHAFr7N2G7w1YsWvAqRSyeDo9xjmgxmeLA8yjFhDBXKKRbsRFwhtWujhnADeZB" ], "script": "base64:BgJmCAISBAoCEQESBQoDCAEBEgUKAwEEARIECgIRCBIDCgEBEgYKBAgIAQgSBAoCCAESAwoBERIECgIRARIFCgMBCAgSBAoCCAESBQoDCAEBEgASABIECgIRBBIECgIBARIAEgASABIAXwAJUFJFQ0lTSU9OAMCEPQAFTUFYX0EAwIQ9AAxNQVhfQV9DSEFOR0UACgAIREVDSU1BTFMABgANTUlOX1JBTVBfVElNRQkAaQIAgKMFADwAB3ZlcnNpb24CBTMuMC4wAAhrVmVyc2lvbgIHdmVyc2lvbgAHa0Fzc2V0cwIJYXNzZXRfaWRzAA1rQXNzZXRCYWxhbmNlAghfYmFsYW5jZQAHa0FjdGl2ZQIGYWN0aXZlAAtrQWN0aXZlR2xvYgIUYWN0aXZlX2FsbF9jb250cmFjdHMAC2tEZXByZWNhdGVkAgtkZXByZWNhdGVkXwAGa0NhdXNlAg5zaHV0ZG93bl9jYXVzZQANa1NoYXJlQXNzZXRJZAIOc2hhcmVfYXNzZXRfaWQAEWtTaGFyZUFzc2V0U3VwcGx5AhJzaGFyZV9hc3NldF9zdXBwbHkABGtGZWUCCmNvbW1pc3Npb24AEmtEQXBwVGhyZXNob2xkQ29lZgIRZEFwcFRocmVzaG9sZENvZWYADGtVU0ROQWRkcmVzcwIYc3Rha2luZ191c2RubnNidF9hZGRyZXNzAAprRGlzY291bnRzAglkaXNjb3VudHMAD2tEaXNjb3VudFZhbHVlcwIPZGlzY291bnRfdmFsdWVzAA5rVXNlclN3b3BJbkdvdgIMX1NXT1BfYW1vdW50AA9rVXNlckdTd29wSW5Hb3YCDV9HU3dvcF9hbW91bnQADWtBZG1pblB1YktleTECC2FkbWluX3B1Yl8xAA1rQWRtaW5QdWJLZXkyAgthZG1pbl9wdWJfMgANa0FkbWluUHViS2V5MwILYWRtaW5fcHViXzMAEmtBZG1pbkludm9rZVB1YktleQIQYWRtaW5faW52b2tlX3B1YgAQa01vbmV5Qm94QWRkcmVzcwIRbW9uZXlfYm94X2FkZHJlc3MAC2tHb3ZBZGRyZXNzAhJnb3Zlcm5hbmNlX2FkZHJlc3MADmtWb3RpbmdBZGRyZXNzAg52b3RpbmdfYWRkcmVzcwAPa0Zhcm1pbmdBZGRyZXNzAg9mYXJtaW5nX2FkZHJlc3MAEWtMUEZhcm1pbmdBZGRyZXNzAgpscF9mYXJtaW5nAAZvcmFjbGUJAQdBZGRyZXNzAQEaAVRIE5cMwNMzzCUygLYp96dkaICr48x7S5kBE2dldEJhc2U1OEZyb21PcmFjbGUBA2tleQQHJG1hdGNoMAkAnQgCBQZvcmFjbGUFA2tleQMJAAECBQckbWF0Y2gwAgZTdHJpbmcEBnN0cmluZwUHJG1hdGNoMAkA2QQBBQZzdHJpbmcEB25vdGhpbmcFByRtYXRjaDAJAAIBCQCsAgIFA2tleQIIaXMgZW1wdHkADGFkbWluUHViS2V5MQkBE2dldEJhc2U1OEZyb21PcmFjbGUBBQ1rQWRtaW5QdWJLZXkxAAxhZG1pblB1YktleTIJARNnZXRCYXNlNThGcm9tT3JhY2xlAQUNa0FkbWluUHViS2V5MgAMYWRtaW5QdWJLZXkzCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFDWtBZG1pblB1YktleTMAEWFkbWluUHViS2V5SW52b2tlCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFEmtBZG1pbkludm9rZVB1YktleQAPbW9uZXlCb3hBZGRyZXNzCQEHQWRkcmVzcwEJARNnZXRCYXNlNThGcm9tT3JhY2xlAQUQa01vbmV5Qm94QWRkcmVzcwAKZ292QWRkcmVzcwkBB0FkZHJlc3MBCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFC2tHb3ZBZGRyZXNzABJzdGFraW5nVVNETkFkZHJlc3MJAQdBZGRyZXNzAQkBE2dldEJhc2U1OEZyb21PcmFjbGUBBQxrVVNETkFkZHJlc3MADXZvdGluZ0FkZHJlc3MJAQdBZGRyZXNzAQkBE2dldEJhc2U1OEZyb21PcmFjbGUBBQ5rVm90aW5nQWRkcmVzcwAOZmFybWluZ0FkZHJlc3MJAQdBZGRyZXNzAQkBE2dldEJhc2U1OEZyb21PcmFjbGUBBQ9rRmFybWluZ0FkZHJlc3MAEGxwRmFybWluZ0FkZHJlc3MJAQdBZGRyZXNzAQkBE2dldEJhc2U1OEZyb21PcmFjbGUBBRFrTFBGYXJtaW5nQWRkcmVzcwAEVVNETgEgtiYpwwT1zlORpA5LdSQvZIxRsfrfr1QpvUjSHSqyqtEADXN0YWtpbmdBc3NldHMJAMwIAgkA2AQBBQRVU0ROBQNuaWwABmFjdGl2ZQkBEUBleHRyTmF0aXZlKDEwNTEpAgUEdGhpcwUHa0FjdGl2ZQAKYWN0aXZlR2xvYgkBC3ZhbHVlT3JFbHNlAgkAmwgCBQZvcmFjbGUFC2tBY3RpdmVHbG9iBgAOZGVwcmVjYXRlZFBvb2wJAQt2YWx1ZU9yRWxzZQIJAJsIAgUGb3JhY2xlCQCsAgIFC2tEZXByZWNhdGVkCQClCAEFBHRoaXMHAAxzaGFyZUFzc2V0SWQJANkEAQkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwUNa1NoYXJlQXNzZXRJZAALc2hhcmVTdXBwbHkJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMFEWtTaGFyZUFzc2V0U3VwcGx5AAlmZWVTY2FsZTYAwIQ9AANmZWUJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMFBGtGZWUADWZlZUdvdmVybmFuY2UJAGsDACgFCWZlZVNjYWxlNgBkAAlpbml0aWFsX0EJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMCCWluaXRpYWxfQQAIZnV0dXJlX0EJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMCCGZ1dHVyZV9BAA5pbml0aWFsX0FfdGltZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzAg5pbml0aWFsX0FfdGltZQAAAA1mdXR1cmVfQV90aW1lCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMCDWZ1dHVyZV9BX3RpbWUAAAAIYXNzZXRJZHMJALUJAgkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwUHa0Fzc2V0cwIBLAAGbkNvaW5zCQCQAwEFCGFzc2V0SWRzAQdzdXNwZW5kAQVjYXVzZQkAzAgCCQEMQm9vbGVhbkVudHJ5AgUHa0FjdGl2ZQcJAMwIAgkBC1N0cmluZ0VudHJ5AgUGa0NhdXNlBQVjYXVzZQUDbmlsAQ10aHJvd0lzQWN0aXZlAAkAAgECFkRBcHAgaXMgYWxyZWFkeSBhY3RpdmUBCGlzQWN0aXZlAAMDBQZhY3RpdmUFCmFjdGl2ZUdsb2IHBQR1bml0CQACAQIfREFwcCBpcyBpbmFjdGl2ZSBhdCB0aGlzIG1vbWVudAEMaXNEZXByaWNhdGVkAAMJAQEhAQUOZGVwcmVjYXRlZFBvb2wFBHVuaXQJAAIBAjFQb29sIGlzIGRlcHJlY2F0ZWQuIE9ubHkgd2l0aGRyYXcgYWN0aW9uIGFsbG93ZWQuAQtpc0FkbWluQ2FsbAEBaQMJAQ9jb250YWluc0VsZW1lbnQCCQDMCAIFDGFkbWluUHViS2V5MQkAzAgCBQxhZG1pblB1YktleTIJAMwIAgUMYWRtaW5QdWJLZXkzBQNuaWwIBQFpD2NhbGxlclB1YmxpY0tleQUEdW5pdAkAAgECIU9ubHkgYWRtaW4gY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgEKaXNTZWxmQ2FsbAEBaQMJAAACBQR0aGlzCAUBaQZjYWxsZXIFBHVuaXQJAAIBAitPbmx5IGNvbnRyYWN0IGl0c2VsZiBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uAARiaWcyCQC2AgEAAgAGaXRlcjEwCQDMCAIAAAkAzAgCAAEJAMwIAgACCQDMCAIAAwkAzAgCAAQJAMwIAgAFCQDMCAIABgkAzAgCAAcJAMwIAgAICQDMCAIACQUDbmlsAAZpdGVyMTUJAMwIAgAACQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUJAMwIAgAGCQDMCAIABwkAzAgCAAgJAMwIAgAJCQDMCAIACgkAzAgCAAsJAMwIAgAMCQDMCAIADQkAzAgCAA4FA25pbAAGaXRlcjE2CQDMCAIAAAkAzAgCAAEJAMwIAgACCQDMCAIAAwkAzAgCAAQJAMwIAgAFCQDMCAIABgkAzAgCAAcJAMwIAgAICQDMCAIACQkAzAgCAAoJAMwIAgALCQDMCAIADAkAzAgCAA0JAMwIAgAOCQDMCAIADwUDbmlsAA5ibG9ja1RpbWVzdGFtcAUGaGVpZ2h0AQZhc3NlcnQBAWEDBQFhBwYBFGNhbGN1bGF0ZUZlZURpc2NvdW50AQh1c2VyQWRkcgQEdXNlcgQHJG1hdGNoMAUIdXNlckFkZHIDCQABAgUHJG1hdGNoMAIHQWRkcmVzcwQBdQUHJG1hdGNoMAkApQgBBQF1AwkAAQIFByRtYXRjaDACBlN0cmluZwQBdQUHJG1hdGNoMAUBdQkAAgECGFVua25vdyB0eXBlIG9mIHVzZXIgQWRkcgQKc3dvcEFtb3VudAkBC3ZhbHVlT3JFbHNlAgkAmggCBQpnb3ZBZGRyZXNzCQCsAgIFBHVzZXIFD2tVc2VyR1N3b3BJbkdvdgAABAtnU3dvcEFtb3VudAkBC3ZhbHVlT3JFbHNlAgkAmggCBQpnb3ZBZGRyZXNzCQCsAgIFBHVzZXIFD2tVc2VyR1N3b3BJbkdvdgUKc3dvcEFtb3VudAQOZGlzY291bnRWYWx1ZXMJALUJAgkBEUBleHRyTmF0aXZlKDEwNTMpAgUGb3JhY2xlBQ9rRGlzY291bnRWYWx1ZXMCASwECWRpc2NvdW50cwkAtQkCCQERQGV4dHJOYXRpdmUoMTA1MykCBQZvcmFjbGUFCmtEaXNjb3VudHMCASwDAwkAZwIFC2dTd29wQW1vdW50CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUOZGlzY291bnRWYWx1ZXMAAAkAZgIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ5kaXNjb3VudFZhbHVlcwABBQtnU3dvcEFtb3VudAcJAGUCBQlmZWVTY2FsZTYJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQlkaXNjb3VudHMAAAMDCQBnAgULZ1N3b3BBbW91bnQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ5kaXNjb3VudFZhbHVlcwABCQBmAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDmRpc2NvdW50VmFsdWVzAAIFC2dTd29wQW1vdW50BwkAZQIFCWZlZVNjYWxlNgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCWRpc2NvdW50cwABAwMJAGcCBQtnU3dvcEFtb3VudAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDmRpc2NvdW50VmFsdWVzAAIJAGYCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUOZGlzY291bnRWYWx1ZXMAAwULZ1N3b3BBbW91bnQHCQBlAgUJZmVlU2NhbGU2CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUJZGlzY291bnRzAAIDAwkAZwIFC2dTd29wQW1vdW50CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUOZGlzY291bnRWYWx1ZXMAAwkAZgIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ5kaXNjb3VudFZhbHVlcwAE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aWwAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEPeHBfcmVkdWNlZF9wcm9jAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKBAp4cF9yZWR1Y2VkCAUNJHQwMTA0MzIxMDQ5NgJfMQQFaW5kZXgIBQ0kdDAxMDQzMjEwNDk2Al8yBAx4cF9yZWR1Y2VkX2kJAJEDAgUKeHBfcmVkdWNlZAUBaQQCZHkJAGUCCQBlAgUMeHBfcmVkdWNlZF9pCQEHZ2V0X3lfRAQFA2FtcAUBaQUKeHBfcmVkdWNlZAUCRDEAAQkAlAoCBQJkeQkAZQIFBGR5XzAFAmR5AQ1nZXRTdHJBc3NldElkAQdhc3NldElkBAckbWF0Y2gwBQdhc3NldElkAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEAmlkBQckbWF0Y2gwCQDYBAEFAmlkAwkAAQIFByRtYXRjaDACBFVuaXQEBXdhdmVzBQckbWF0Y2gwAgVXQVZFUwkAAgECC01hdGNoIGVycm9yARhjYWxjU3Rha2luZ0Z1bmNBbmRBZGRyZXMCBXN0YWtlB2Fzc2V0SWQDBQVzdGFrZQkAlAoCAgxsb2NrTmV1dHJpbm8FEnN0YWtpbmdVU0ROQWRkcmVzcwkAlAoCAg51bmxvY2tOZXV0cmlubwUSc3Rha2luZ1VTRE5BZGRyZXNzARFjYWxjU3Rha2luZ1BhcmFtcwMFc3Rha2UGYW1vdW50B2Fzc2V0SWQDBQVzdGFrZQQNJHQwMTEwNjAxMTEyNgkBGGNhbGNTdGFraW5nRnVuY0FuZEFkZHJlcwIFBXN0YWtlBQdhc3NldElkBARjYWxsCAUNJHQwMTEwNjAxMTEyNgJfMQQLc3Rha2luZ0FkZHIIBQ0kdDAxMTA2MDExMTI2Al8yCQCWCgQFBGNhbGwFC3N0YWtpbmdBZGRyBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFB2Fzc2V0SWQFBmFtb3VudAUDbmlsBA0kdDAxMTIxMjExMjc4CQEYY2FsY1N0YWtpbmdGdW5jQW5kQWRkcmVzAgUFc3Rha2UFB2Fzc2V0SWQEBGNhbGwIBQ0kdDAxMTIxMjExMjc4Al8xBAtzdGFraW5nQWRkcggFDSR0MDExMjEyMTEyNzgCXzIJAJYKBAUEY2FsbAULc3Rha2luZ0FkZHIJAMwIAgUGYW1vdW50CQDMCAIJANgEAQUHYXNzZXRJZAUDbmlsBQNuaWwBBXN0YWtlAgZhbW91bnQNYXNzZXRJZFN0cmluZwMJAQ9jb250YWluc0VsZW1lbnQCBQ1zdGFraW5nQXNzZXRzBQ1hc3NldElkU3RyaW5nBA0kdDAxMTQ2NTExNTY3CQERY2FsY1N0YWtpbmdQYXJhbXMDBgUGYW1vdW50CQDZBAEFDWFzc2V0SWRTdHJpbmcEBGNhbGwIBQ0kdDAxMTQ2NTExNTY3Al8xBARhZGRyCAUNJHQwMTE0NjUxMTU2NwJfMgQGcGFyYW1zCAUNJHQwMTE0NjUxMTU2NwJfMwQIcGF5bWVudHMIBQ0kdDAxMTQ2NTExNTY3Al80CQD8BwQFBGFkZHIFBGNhbGwFBnBhcmFtcwUIcGF5bWVudHMAAAEHdW5zdGFrZQIGYW1vdW50DWFzc2V0SWRTdHJpbmcDCQEPY29udGFpbnNFbGVtZW50AgUNc3Rha2luZ0Fzc2V0cwUNYXNzZXRJZFN0cmluZwQNJHQwMTE3NTIxMTg1NQkBEWNhbGNTdGFraW5nUGFyYW1zAwcFBmFtb3VudAkA2QQBBQ1hc3NldElkU3RyaW5nBARjYWxsCAUNJHQwMTE3NTIxMTg1NQJfMQQEYWRkcggFDSR0MDExNzUyMTE4NTUCXzIEBnBhcmFtcwgFDSR0MDExNzUyMTE4NTUCXzMECHBheW1lbnRzCAUNJHQwMTE3NTIxMTg1NQJfNAkA/AcEBQRhZGRyBQRjYWxsBQZwYXJhbXMFCHBheW1lbnRzAAABDHN0YWtlZEFtb3VudAEHYXNzZXRJZAQWc3Rha2VkQW1vdW50Q2FsY3VsYXRlZAQHJG1hdGNoMAUHYXNzZXRJZAMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBANhSWQFByRtYXRjaDADCQAAAgUDYUlkBQRVU0ROCQCaCAIFEnN0YWtpbmdVU0ROQWRkcmVzcwkArAICCQCsAgIJAKwCAgIMcnBkX2JhbGFuY2VfCQDYBAEFA2FJZAIBXwkApQgBBQR0aGlzAAADCQABAgUHJG1hdGNoMAIEVW5pdAAACQACAQILTWF0Y2ggZXJyb3IEByRtYXRjaDAFFnN0YWtlZEFtb3VudENhbGN1bGF0ZWQDCQABAgUHJG1hdGNoMAIDSW50BAFpBQckbWF0Y2gwBQFpAAABD2NoZWNrU3VzcGljaW91cwAEEGNvbnRyYWN0QmFsYW5jZXMJAQNfeHAACgEMY2hlY2tCYWxhbmNlAgNhY2MHYXNzZXRJZAQNJHQwMTI0NjYxMjQ5MQUDYWNjBApzdXNwaWNpb3VzCAUNJHQwMTI0NjYxMjQ5MQJfMQQBaQgFDSR0MDEyNDY2MTI0OTECXzIDBQpzdXNwaWNpb3VzCQCUCgIFCnN1c3BpY2lvdXMFAWkECGFCYWxhbmNlCQBkAgkA8AcCBQR0aGlzCQDZBAEFB2Fzc2V0SWQJAQxzdGFrZWRBbW91bnQBCQDZBAEFB2Fzc2V0SWQDCQBmAgkAkQMCBRBjb250cmFjdEJhbGFuY2VzBQFpBQhhQmFsYW5jZQkAlAoCBgUBaQkAlAoCBwkAZAIFAWkAAQoAAiRsBQhhc3NldElkcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgcAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEMY2hlY2tCYWxhbmNlAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKARFzdXNwZW5kU3VzcGljaW91cwEBaQkBB3N1c3BlbmQBCQCsAgICHVN1c3BpY2lvdXMgc3RhdGUgd2l0aCBhc3NldDogCQCRAwIFCGFzc2V0SWRzBQFpAQ5yZXR1cm5QYXltZW50cwIGY2FsbGVyCHBheW1lbnRzCgENcGFyc2VQYXltZW50cwIDYWNjB3BheW1lbnQJAM0IAgUDYWNjCQEOU2NyaXB0VHJhbnNmZXIDBQZjYWxsZXIIBQdwYXltZW50BmFtb3VudAgFB3BheW1lbnQHYXNzZXRJZAoAAiRsBQhwYXltZW50cwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQENcGFyc2VQYXltZW50cwIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgESY2hlY2tEQXBwVGhyZXNob2xkAQtuZXdCYWxhbmNlcwQRZEFwcFRocmVzaG9sZENvZWYJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQR0aGlzBRJrREFwcFRocmVzaG9sZENvZWYCGE5vIGRBcHBUaHJlc2hvbGRDb2VmIGtleQQOdGhyZXNob2xkU2NhbGUAkE4ECm1heEJhbGFuY2UJAJYDAQULbmV3QmFsYW5jZXMECm1pbkJhbGFuY2UJAJcDAQULbmV3QmFsYW5jZXMEBXJhdGlvCQBrAwUKbWF4QmFsYW5jZQUOdGhyZXNob2xkU2NhbGUFCm1pbkJhbGFuY2UDCQBmAgUFcmF0aW8JAGgCBRFkQXBwVGhyZXNob2xkQ29lZgUOdGhyZXNob2xkU2NhbGUJAAIBAjhOZXcgYmFsYW5jZSBpbiBhc3NldHMgb2YgdGhlIERBcHAgaXMgbGVzcyB0aGFuIHRocmVzaG9sZAcBCmNoZWNrQ29pbnMBCGFzc2V0SWRzBAVjb2lucwkAtQkCBQhhc3NldElkcwIBLAMJAGYCCQCQAwEFBWNvaW5zAAoJAAIBAiBUbyBtYW55IGNvaW5zLCBtYXggY29pbnMgc2l6ZSAxMAoBCWNoZWNrQ29pbgIFZXJyb3IHYXNzZXRJZAQFYXNzZXQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkA2QQBBQdhc3NldElkCQCsAgICEmZyb21CYXNlNThTdHJpbmc6IAUHYXNzZXRJZAQIZGVjaW1hbHMICQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQUFYXNzZXQJAKwCAgILYXNzZXRJbmZvOiAFB2Fzc2V0SWQIZGVjaW1hbHMDCQECIT0CBQhkZWNpbWFscwUIREVDSU1BTFMJAAIBAg53cm9uZyBkZWNpbWFscwcKAAIkbAUFY29pbnMKAAIkcwkAkAMBBQIkbAoABSRhY2MwBwoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEJY2hlY2tDb2luAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAQxjYWxjV2l0aGRyYXcDA21zZwptaW5BbW91bnRzDHVubG9ja0Ftb3VudAQKc3VzcGljaW91cwkBD2NoZWNrU3VzcGljaW91cwADCAUKc3VzcGljaW91cwJfMQkAzggCCQERc3VzcGVuZFN1c3BpY2lvdXMBCAUKc3VzcGljaW91cwJfMgkBDnJldHVyblBheW1lbnRzAggFA21zZwZjYWxsZXIIBQNtc2cIcGF5bWVudHMECXBtdEFtb3VudAMJAGYCCQCQAwEIBQNtc2cIcGF5bWVudHMAAAMJAQIhPQIJAJADAQgFA21zZwhwYXltZW50cwABCQACAQITc2l6ZShwYXltZW50cykgIT0gMQQKcG10QXNzZXRJZAgJAJEDAggFA21zZwhwYXltZW50cwAAB2Fzc2V0SWQDCQECIT0CBQxzaGFyZUFzc2V0SWQFCnBtdEFzc2V0SWQJAAIBAhV1bmtub3duIHBheW1lbnQgdG9rZW4ICQCRAwIIBQNtc2cIcGF5bWVudHMAAAZhbW91bnQAAAQOd2l0aGRyYXdBbW91bnQJAGQCBQlwbXRBbW91bnQFDHVubG9ja0Ftb3VudAoBEWNhbGNTY3JpcHRBY3Rpb25zAgNhY2MHYmFsYW5jZQQNJHQwMTQ5MDcxNDkzNQUDYWNjBA1zY3JpcHRBY3Rpb25zCAUNJHQwMTQ5MDcxNDkzNQJfMQQBaQgFDSR0MDE0OTA3MTQ5MzUCXzIEB3dBbW91bnQJAGsDBQdiYWxhbmNlBQ53aXRoZHJhd0Ftb3VudAULc2hhcmVTdXBwbHkDCQEGYXNzZXJ0AQkAZwIFB3dBbW91bnQJAJEDAgUKbWluQW1vdW50cwUBaQkAAgECMFdpdGhkcmF3YWwgcmVzdWx0ZWQgaW4gZmV3ZXIgY29pbnMgdGhhbiBleHBlY3RlZAQCdXMJAQd1bnN0YWtlAgUHd0Ftb3VudAkAkQMCBQhhc3NldElkcwUBaQMJAAACBQJ1cwUCdXMJAJQKAgkAzggCBQ1zY3JpcHRBY3Rpb25zCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAJEDAgUIYXNzZXRJZHMFAWkFDWtBc3NldEJhbGFuY2UJAGUCBQdiYWxhbmNlBQd3QW1vdW50CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQNtc2cGY2FsbGVyBQd3QW1vdW50CQDZBAEJAJEDAgUIYXNzZXRJZHMFAWkFA25pbAkAZAIFAWkAAQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgQNJHQwMTU0MjQxNTQ5MgoAAiRsCQEDX3hwAAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgUDbmlsAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBEWNhbGNTY3JpcHRBY3Rpb25zAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKBA1zY3JpcHRBY3Rpb25zCAUNJHQwMTU0MjQxNTQ5MgJfMQQBaQgFDSR0MDE1NDI0MTU0OTICXzIJAM4IAgUNc2NyaXB0QWN0aW9ucwkAzAgCCQEEQnVybgIFDHNoYXJlQXNzZXRJZAUOd2l0aGRyYXdBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIFEWtTaGFyZUFzc2V0U3VwcGx5CQBlAgULc2hhcmVTdXBwbHkFDndpdGhkcmF3QW1vdW50BQNuaWwBGmNhbGNXaXRoZHJhd09uZUNvaW5FbnRyaWVzBANtc2cIdG9rZW5PdXQJbWluQW1vdW50DHVubG9ja0Ftb3VudAQKc3VzcGljaW91cwkBD2NoZWNrU3VzcGljaW91cwADCAUKc3VzcGljaW91cwJfMQkAzggCCQERc3VzcGVuZFN1c3BpY2lvdXMBCAUKc3VzcGljaW91cwJfMgkBDnJldHVyblBheW1lbnRzAggFA21zZwxvcmlnaW5DYWxsZXIIBQNtc2cIcGF5bWVudHMECXBtdEFtb3VudAMJAGYCCQCQAwEIBQNtc2cIcGF5bWVudHMAAAQKcG10QXNzZXRJZAgJAJEDAggFA21zZwhwYXltZW50cwAAB2Fzc2V0SWQDCQECIT0CBQxzaGFyZUFzc2V0SWQFCnBtdEFzc2V0SWQJAAIBAhV1bmtub3duIHBheW1lbnQgdG9rZW4ICQCRAwIIBQNtc2cIcGF5bWVudHMAAAZhbW91bnQAAAQIb3V0SW5kZXgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAzwgCBQhhc3NldElkcwUIdG9rZW5PdXQCEXVua25vd24gdG9rZW4gb3V0BAt0b2tlbk91dEI1OAkA2QQBBQh0b2tlbk91dAQOd2l0aGRyYXdBbW91bnQJAGQCBQlwbXRBbW91bnQFDHVubG9ja0Ftb3VudAQCeHAJAQNfeHAABA0kdDAxNjM1NDE2NDQxCQEUX2NhbGNXaXRoZHJhd09uZUNvaW4EBQJ4cAUOd2l0aGRyYXdBbW91bnQFCG91dEluZGV4CAUDbXNnDG9yaWdpbkNhbGxlcgQCZHkIBQ0kdDAxNjM1NDE2NDQxAl8xBAZkeV9mZWUIBQ0kdDAxNjM1NDE2NDQxAl8yAwkBBmFzc2VydAEJAGcCBQJkeQUJbWluQW1vdW50CQACAQIYTm90IGVub3VnaCBjb2lucyByZW1vdmVkBA5nb3Zlcm5hbmNlRmVlcwkAawMFBmR5X2ZlZQUNZmVlR292ZXJuYW5jZQUJZmVlU2NhbGU2BApkeV9hbmRfZmVlCQBkAgUCZHkFBmR5X2ZlZQoBD21ha2VOZXdCYWxhbmNlcwIDYWNjDHRva2VuQmFsYW5jZQQNJHQwMTY2OTkxNjcyNQUDYWNjBAtuZXdCYWxhbmNlcwgFDSR0MDE2Njk5MTY3MjUCXzEEAWkIBQ0kdDAxNjY5OTE2NzI1Al8yAwkAAAIFAWkFCG91dEluZGV4CQCUCgIJAM0IAgULbmV3QmFsYW5jZXMJAGUCBQx0b2tlbkJhbGFuY2UFCmR5X2FuZF9mZWUJAGQCBQFpAAEJAJQKAgkAzQgCBQtuZXdCYWxhbmNlcwUMdG9rZW5CYWxhbmNlCQBkAgUBaQABBA0kdDAxNjg5MjE2OTUzCgACJGwFAnhwCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCBQNuaWwAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEPbWFrZU5ld0JhbGFuY2VzAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKBAtuZXdCYWxhbmNlcwgFDSR0MDE2ODkyMTY5NTMCXzEEAXYIBQ0kdDAxNjg5MjE2OTUzAl8yAwkBEmNoZWNrREFwcFRocmVzaG9sZAEFC25ld0JhbGFuY2VzCQEFdGhyb3cABAJ1cwkBB3Vuc3Rha2UCBQpkeV9hbmRfZmVlBQh0b2tlbk91dAMJAAACBQJ1cwUCdXMEBmxwRmVlcwkAZQIFBmR5X2ZlZQUOZ292ZXJuYW5jZUZlZXMEB2FpcmRyb3ADCQBmAgUGbHBGZWVzAAAJAPwHBAUQbHBGYXJtaW5nQWRkcmVzcwIHYWlyRHJvcAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQt0b2tlbk91dEI1OAUGbHBGZWVzBQNuaWwAAAMJAAACBQdhaXJkcm9wBQdhaXJkcm9wCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQNtc2cMb3JpZ2luQ2FsbGVyBQJkeQULdG9rZW5PdXRCNTgJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkAkQMCBQhhc3NldElkcwUIb3V0SW5kZXgFDWtBc3NldEJhbGFuY2UJAGUCCQCRAwIFAnhwBQhvdXRJbmRleAUKZHlfYW5kX2ZlZQkAzAgCCQEEQnVybgIFDHNoYXJlQXNzZXRJZAUOd2l0aGRyYXdBbW91bnQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUPbW9uZXlCb3hBZGRyZXNzBQ5nb3Zlcm5hbmNlRmVlcwULdG9rZW5PdXRCNTgJAMwIAgkBDEludGVnZXJFbnRyeQIFEWtTaGFyZUFzc2V0U3VwcGx5CQBlAgULc2hhcmVTdXBwbHkFDndpdGhkcmF3QW1vdW50BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4UA21zZwEBRAICeHADYW1wBAFECQEOZ2V0X0RfaW50ZXJuYWwCBQJ4cAUDYW1wCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQICAUQFAUQFA25pbAUBRANtc2cBBGluaXQDCGFzc2V0SWRzAl9BEl9kQXBwVGhyZXNob2xkQ29lZgMJAQEhAQkAnggBBQR0aGlzCQACAQITQWxyZWFkeSBpbml0aWFsaXplZAMJAGcCAAAFAl9BCQACAQIUQW1wIG11c3QgYmUgbXVzdCA+IDADCQBnAgAABRJfZEFwcFRocmVzaG9sZENvZWYJAAIBAh9kQXBwIFRocmVzaG9sZCBDb2VmIG11c3QgYmUgPiAwBAlzaGFyZU5hbWUCC3NfTXVsdGlfVVNEBBBzaGFyZURlc2NyaXB0aW9uCQCsAgICQlNoYXJlVG9rZW4gb2YgU3dvcEZpIHByb3RvY29sIGZvciBNdWx0aVN0YWJsZSBVU0QgcG9vbCBhdCBhZGRyZXNzIAkApQgBBQR0aGlzBAppc3N1ZVRva2VuCQDCCAUFCXNoYXJlTmFtZQUQc2hhcmVEZXNjcmlwdGlvbgAAAAYGBAd0b2tlbklkCQC4CAEFCmlzc3VlVG9rZW4DCQEKY2hlY2tDb2lucwEFCGFzc2V0SWRzCQEFdGhyb3cACQDMCAIJAQtTdHJpbmdFbnRyeQIFCGtWZXJzaW9uBQd2ZXJzaW9uCQDMCAIJAQtTdHJpbmdFbnRyeQIFB2tBc3NldHMFCGFzc2V0SWRzCQDMCAIJAQxJbnRlZ2VyRW50cnkCAglpbml0aWFsX0EFAl9BCQDMCAIJAQxJbnRlZ2VyRW50cnkCAghmdXR1cmVfQQUCX0EJAMwIAgkBDEludGVnZXJFbnRyeQIFBGtGZWUJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBm9yYWNsZQINYmFzZV9mZWVfZmxhdAkAzAgCCQELU3RyaW5nRW50cnkCBQ1rU2hhcmVBc3NldElkCQDYBAEFB3Rva2VuSWQJAMwIAgkBDEludGVnZXJFbnRyeQIFEWtTaGFyZUFzc2V0U3VwcGx5AAAJAMwIAgkBDEludGVnZXJFbnRyeQIFEmtEQXBwVGhyZXNob2xkQ29lZgUSX2RBcHBUaHJlc2hvbGRDb2VmCQDMCAIJAQxCb29sZWFuRW50cnkCBQdrQWN0aXZlBgkAzAgCBQppc3N1ZVRva2VuBQNuaWwDbXNnAQxhZGRMaXF1aWRpdHkDDW1pbk1pbnRBbW91bnQMc3Rha2VGYXJtaW5nCGxvY2tUeXBlCQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUACQELdmFsdWVPckVsc2UCCQEMaXNEZXByaWNhdGVkAAQDYW1wCQECX0EABAJ4cAkBA194cAAEAkQwAwkAAAIFC3NoYXJlU3VwcGx5AAAAAAkBB2dldERNZW0CBQJ4cAUDYW1wBA0kdDAxOTEyMjE5Mzc2AwMJAGYCBQhsb2NrVHlwZQAACQAAAggJAJEDAggFA21zZwhwYXltZW50cwkAZQIJAJADAQgFA21zZwhwYXltZW50cwABB2Fzc2V0SWQFBHVuaXQHCQCUCgIJANEIAggFA21zZwhwYXltZW50cwkAZQIJAJADAQgFA21zZwhwYXltZW50cwABCQDMCAIJAJEDAggFA21zZwhwYXltZW50cwkAZQIJAJADAQgFA21zZwhwYXltZW50cwABBQNuaWwJAJQKAggFA21zZwhwYXltZW50cwUDbmlsBAhwYXltZW50cwgFDSR0MDE5MTIyMTkzNzYCXzEEB2xvY2tGZWUIBQ0kdDAxOTEyMjE5Mzc2Al8yBAxwYXltZW50c1NpemUJAJADAQUIcGF5bWVudHMKAQ12YWxpZFBheW1lbnRzAQFuAwkAZgIFDHBheW1lbnRzU2l6ZQUGbkNvaW5zCQACAQkArAICAhBwYXltZW50cyBzaXplID4gCQCkAwEFBm5Db2lucwMJAGYCAAEFDHBheW1lbnRzU2l6ZQkAAgECEXBheW1lbnRzIHNpemUgPCAxAwMJAAACBQtzaGFyZVN1cHBseQAACQECIT0CBQZuQ29pbnMFDHBheW1lbnRzU2l6ZQcJAAIBAiJpbml0aWFsIGRlcG9zaXQgcmVxdWlyZXMgYWxsIGNvaW5zCgEMcGF5bWFudFZhbGlkAgNhY2MHcGF5bWVudAMJAQ9jb250YWluc0VsZW1lbnQCBQhhc3NldElkcwkBDWdldFN0ckFzc2V0SWQBCAUHcGF5bWVudAdhc3NldElkBgkAAgECGEludmFsaWQgYXNzZXQgaW4gcGF5bWVudAoAAiRsBQhwYXltZW50cwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAHCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQxwYXltYW50VmFsaWQCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoDCQEBIQEJAQ12YWxpZFBheW1lbnRzAQUMcGF5bWVudHNTaXplCQEFdGhyb3cABApzdXNwaWNpb3VzCQEPY2hlY2tTdXNwaWNpb3VzAAMIBQpzdXNwaWNpb3VzAl8xCQDOCAIJARFzdXNwZW5kU3VzcGljaW91cwEIBQpzdXNwaWNpb3VzAl8yCQEOcmV0dXJuUGF5bWVudHMCCAUDbXNnBmNhbGxlcgUIcGF5bWVudHMKAQ1wYXJzZVBheW1lbnRzAgNhY2MHYXNzZXRJZAQNJHQwMjAyNDYyMDI3MgUDYWNjBAtuZXdCYWxhbmNlcwgFDSR0MDIwMjQ2MjAyNzICXzEEAWkIBQ0kdDAyMDI0NjIwMjcyAl8yCgEMcGFyc2VQYXltZW50AgpuZXdCYWxhbmNlB3BheW1lbnQDCQAAAgkBDWdldFN0ckFzc2V0SWQBCAUHcGF5bWVudAdhc3NldElkBQdhc3NldElkCQBkAgUKbmV3QmFsYW5jZQgFB3BheW1lbnQGYW1vdW50BQpuZXdCYWxhbmNlBAluZXdCYWxhY2UKAAIkbAUIcGF5bWVudHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCRAwIFAnhwBQFpCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQxwYXJzZVBheW1lbnQCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoJAJQKAgkAzQgCBQtuZXdCYWxhbmNlcwUJbmV3QmFsYWNlCQBkAgUBaQABBA0kdDAyMDYyMjIwNjg5CgACJGwFCGFzc2V0SWRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCBQNuaWwAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQENcGFyc2VQYXltZW50cwIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgQLbmV3QmFsYW5jZXMIBQ0kdDAyMDYyMjIwNjg5Al8xBAFrCAUNJHQwMjA2MjIyMDY4OQJfMgMJARJjaGVja0RBcHBUaHJlc2hvbGQBBQtuZXdCYWxhbmNlcwkBBXRocm93AAQCRDEJAQdnZXRETWVtAgULbmV3QmFsYW5jZXMFA2FtcAMJAQZhc3NlcnQBCQBmAgUCRDEFAkQwCQACAQIHRDEgPiBEMAQLZmVlRGlzY291bnQJARRjYWxjdWxhdGVGZWVEaXNjb3VudAEIBQNtc2cGY2FsbGVyCgERY2FsY1NjcmlwdEFjdGlvbnMCA2FjYwpuZXdCYWxhbmNlBA0kdDAyMTAwOTIxMDUwBQNhY2MEC2ludkJhbGFuY2VzCAUNJHQwMjEwMDkyMTA1MAJfMQQNc2NyaXB0QWN0aW9ucwgFDSR0MDIxMDA5MjEwNTACXzIEAWkIBQ0kdDAyMTAwOTIxMDUwAl8zAwkAZgIFC3NoYXJlU3VwcGx5AAAEBF9mZWUJAGkCCQBoAgkAbgQFA2ZlZQULZmVlRGlzY291bnQFCWZlZVNjYWxlNgUHQ0VJTElORwUGbkNvaW5zCQBoAgAECQBlAgUGbkNvaW5zAAEEBGZlZXMEDGlkZWFsQmFsYW5jZQkAawMFAkQxCQCRAwIFAnhwBQFpBQJEMAQKZGlmZmVyZW5jZQMJAGYCBQxpZGVhbEJhbGFuY2UFCm5ld0JhbGFuY2UJAGUCBQxpZGVhbEJhbGFuY2UFCm5ld0JhbGFuY2UJAGUCBQpuZXdCYWxhbmNlBQxpZGVhbEJhbGFuY2UJAGsDBQRfZmVlBQpkaWZmZXJlbmNlBQlmZWVTY2FsZTYEDmdvdmVybmFuY2VGZWVzCQBrAwUEZmVlcwUNZmVlR292ZXJuYW5jZQUJZmVlU2NhbGU2BAxmaW5hbEJhbGFuY2UJAGUCBQpuZXdCYWxhbmNlBQRmZWVzBBBpbnZhcmlhbnRCYWxhbmNlCQBlAgUKbmV3QmFsYW5jZQUEZmVlcwQDcG10CQBlAgUKbmV3QmFsYW5jZQkAkQMCBQJ4cAUBaQQGbHBGZWVzCQBlAgUEZmVlcwUOZ292ZXJuYW5jZUZlZXMEA2ludgMJAGYCBQNwbXQAAAkBBXN0YWtlAgkAZQIFA3BtdAUEZmVlcwkAkQMCBQhhc3NldElkcwUBaQkBB3Vuc3Rha2UCBQRmZWVzCQCRAwIFCGFzc2V0SWRzBQFpAwkAAAIFA2ludgUDaW52BAdhaXJkcm9wAwkAZgIFBmxwRmVlcwAACQD8BwQFEGxwRmFybWluZ0FkZHJlc3MCB2FpckRyb3AFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkA2QQBCQCRAwIFCGFzc2V0SWRzBQFpBQZscEZlZXMFA25pbAAAAwkAAAIFB2FpcmRyb3AFB2FpcmRyb3AJAJUKAwkAzQgCBQtpbnZCYWxhbmNlcwUQaW52YXJpYW50QmFsYW5jZQkAzggCBQ1zY3JpcHRBY3Rpb25zCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFD21vbmV5Qm94QWRkcmVzcwUOZ292ZXJuYW5jZUZlZXMJANkEAQkAkQMCBQhhc3NldElkcwUBaQkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCRAwIFCGFzc2V0SWRzBQFpBQ1rQXNzZXRCYWxhbmNlBQxmaW5hbEJhbGFuY2UFA25pbAkAZAIFAWkAAQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgQDaW52CQEFc3Rha2UCBQpuZXdCYWxhbmNlCQCRAwIFCGFzc2V0SWRzBQFpAwkAAAIFA2ludgUDaW52CQCVCgMJAM0IAgULaW52QmFsYW5jZXMFCm5ld0JhbGFuY2UJAM0IAgUNc2NyaXB0QWN0aW9ucwkBDEludGVnZXJFbnRyeQIJAKwCAgkAkQMCBQhhc3NldElkcwUBaQUNa0Fzc2V0QmFsYW5jZQUKbmV3QmFsYW5jZQkAZAIFAWkAAQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgQNJHQwMjI3NTUyMjg0MwoAAiRsBQtuZXdCYWxhbmNlcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJUKAwUDbmlsBQNuaWwAAAoBBSRmMV8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQERY2FsY1NjcmlwdEFjdGlvbnMCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjFfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEwCQEFJGYxXzICCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoEC2ludkJhbGFuY2VzCAUNJHQwMjI3NTUyMjg0MwJfMQQNc2NyaXB0QWN0aW9ucwgFDSR0MDIyNzU1MjI4NDMCXzIEAkQyCQEHZ2V0RE1lbQIFC2ludkJhbGFuY2VzBQNhbXAEC21pbnRfYW1vdW50AwkAAAIFC3NoYXJlU3VwcGx5AAAFAkQxCQBrAwULc2hhcmVTdXBwbHkJAGUCBQJEMgUCRDAFAkQwAwkBBmFzc2VydAEJAGcCBQttaW50X2Ftb3VudAUNbWluTWludEFtb3VudAkAAgECFFNsaXBwYWdlIHNjcmV3ZWQgeW91AwUMc3Rha2VGYXJtaW5nBAJyZQkA/AcEBQR0aGlzAgxyZWlzc3VlU2hhcmUJAMwIAgULbWludF9hbW91bnQFA25pbAUDbmlsAwkAAAIFAnJlBQJyZQQBcwkA/AcEBQ5mYXJtaW5nQWRkcmVzcwIXbG9ja1NoYXJlVG9rZW5zRnJvbVBvb2wJAMwIAggIBQNtc2cGY2FsbGVyBWJ5dGVzCQDMCAIJAKUIAQUEdGhpcwkAzAgCBQhsb2NrVHlwZQUDbmlsCQDOCAIJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFDHNoYXJlQXNzZXRJZAULbWludF9hbW91bnQFA25pbAUHbG9ja0ZlZQMJAAACBQFzBQFzCQDNCAIFDXNjcmlwdEFjdGlvbnMJAQxJbnRlZ2VyRW50cnkCBRFrU2hhcmVBc3NldFN1cHBseQkAZAIFC3NoYXJlU3VwcGx5BQttaW50X2Ftb3VudAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAzggCBQ1zY3JpcHRBY3Rpb25zCQDMCAIJAQdSZWlzc3VlAwUMc2hhcmVBc3NldElkBQttaW50X2Ftb3VudAYJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFA21zZwZjYWxsZXIFC21pbnRfYW1vdW50BQxzaGFyZUFzc2V0SWQJAMwIAgkBDEludGVnZXJFbnRyeQIFEWtTaGFyZUFzc2V0U3VwcGx5CQBkAgULc2hhcmVTdXBwbHkFC21pbnRfYW1vdW50BQNuaWwDbXNnAQ5jYWxjTWludEFtb3VudAILbmV3QmFsYW5jZXMEdXNlcgQDYW1wCQECX0EABAJ4cAkBA194cAAEAkQxCQEHZ2V0RE1lbQIFC25ld0JhbGFuY2VzBQNhbXADCQAAAgULc2hhcmVTdXBwbHkAAAkAlAoCBQNuaWwFAkQxBAJEMAkBB2dldERNZW0CBQJ4cAUDYW1wBAtmZWVEaXNjb3VudAkBFGNhbGN1bGF0ZUZlZURpc2NvdW50AQUEdXNlcgoBD2NhbGNJbnZCYWxhbmNlcwIDYWNjCm5ld0JhbGFuY2UEDSR0MDI0MTIxMjQxNDcFA2FjYwQLaW52QmFsYW5jZXMIBQ0kdDAyNDEyMTI0MTQ3Al8xBAFpCAUNJHQwMjQxMjEyNDE0NwJfMgQEX2ZlZQkAaQIJAGgCCQBuBAUDZmVlBQtmZWVEaXNjb3VudAUJZmVlU2NhbGU2BQdDRUlMSU5HBQZuQ29pbnMJAGgCAAQJAGUCBQZuQ29pbnMAAQQEZmVlcwQMaWRlYWxCYWxhbmNlCQBrAwUCRDEJAJEDAgUCeHAFAWkFAkQwBApkaWZmZXJlbmNlAwkAZgIFDGlkZWFsQmFsYW5jZQUKbmV3QmFsYW5jZQkAZQIFDGlkZWFsQmFsYW5jZQUKbmV3QmFsYW5jZQkAZQIFCm5ld0JhbGFuY2UFDGlkZWFsQmFsYW5jZQkAawMFBF9mZWUFCmRpZmZlcmVuY2UFCWZlZVNjYWxlNgQQaW52YXJpYW50QmFsYW5jZQkAZQIFCm5ld0JhbGFuY2UFBGZlZXMJAJQKAgkAzQgCBQtpbnZCYWxhbmNlcwUQaW52YXJpYW50QmFsYW5jZQkAZAIFAWkAAQQNJHQwMjQ3NDkyNDgxOQoAAiRsBQtuZXdCYWxhbmNlcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgUDbmlsAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBD2NhbGNJbnZCYWxhbmNlcwIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgQLaW52QmFsYW5jZXMIBQ0kdDAyNDc0OTI0ODE5Al8xBAFrCAUNJHQwMjQ3NDkyNDgxOQJfMgQCRDIJAQdnZXRETWVtAgULaW52QmFsYW5jZXMFA2FtcAQKbWludEFtb3VudAkAawMFC3NoYXJlU3VwcGx5CQBlAgUCRDIFAkQwBQJEMAkAlAoCBQNuaWwFCm1pbnRBbW91bnQDbXNnAQxyZWlzc3VlU2hhcmUBBmFtb3VudAkBC3ZhbHVlT3JFbHNlAgkBCmlzU2VsZkNhbGwBBQNtc2cJAMwIAgkBB1JlaXNzdWUDBQxzaGFyZUFzc2V0SWQFBmFtb3VudAYFA25pbANtc2cBBWdldER5BAlhc3NldEZyb20HYXNzZXRUbwJkeAt1c2VyQWRkcmVzcwQCeHAJAQNfeHAABAlmcm9tSW5kZXgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAzwgCBQhhc3NldElkcwUJYXNzZXRGcm9tAhB1bmtub3duIHRva2VuIGluBAd0b0luZGV4CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAM8IAgUIYXNzZXRJZHMFB2Fzc2V0VG8CEXVua25vd24gdG9rZW4gb3V0BAF4CQBkAgkAkQMCBQJ4cAUJZnJvbUluZGV4BQJkeAQBeQkBBGdldFkEBQlmcm9tSW5kZXgFB3RvSW5kZXgFAXgFAnhwBAJkeQkAZQIJAGUCCQCRAwIFAnhwBQd0b0luZGV4BQF5AAEEC2ZlZURpc2NvdW50CQEUY2FsY3VsYXRlRmVlRGlzY291bnQBCQEHQWRkcmVzcwEJANkEAQULdXNlckFkZHJlc3MEBF9mZWUJAGsDCQBuBAUDZmVlBQtmZWVEaXNjb3VudAUJZmVlU2NhbGU2BQdDRUlMSU5HBQJkeQUJZmVlU2NhbGU2CQCUCgIFA25pbAkAlAoCCQBlAgUCZHkFBF9mZWUFBF9mZWUDbXNnAQhleGNoYW5nZQIIdG9rZW5PdXQGbWluX2R5CQELdmFsdWVPckVsc2UCCQEMaXNEZXByaWNhdGVkAAkBC3ZhbHVlT3JFbHNlAgkBCGlzQWN0aXZlAAMJAQIhPQIJAJADAQgFA21zZwhwYXltZW50cwABCQACAQITc2l6ZShwYXltZW50cykgIT0gMQQKc3VzcGljaW91cwkBD2NoZWNrU3VzcGljaW91cwADCAUKc3VzcGljaW91cwJfMQkAzggCCQERc3VzcGVuZFN1c3BpY2lvdXMBCAUKc3VzcGljaW91cwJfMgkBDnJldHVyblBheW1lbnRzAggFA21zZwZjYWxsZXIIBQNtc2cIcGF5bWVudHMEB3BheW1lbnQJAJEDAggFA21zZwhwYXltZW50cwAABAd0b2tlbkluCQENZ2V0U3RyQXNzZXRJZAEIBQdwYXltZW50B2Fzc2V0SWQEC3Rva2VuT3V0QjU4CQDZBAEFCHRva2VuT3V0BAJkeAgFB3BheW1lbnQGYW1vdW50BAlmcm9tSW5kZXgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAzwgCBQhhc3NldElkcwUHdG9rZW5JbgIQdW5rbm93biB0b2tlbiBpbgQHdG9JbmRleAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDPCAIFCGFzc2V0SWRzBQh0b2tlbk91dAIRdW5rbm93biB0b2tlbiBvdXQEAnhwCQEDX3hwAAQBeAkAZAIJAJEDAgUCeHAFCWZyb21JbmRleAUCZHgEAXkJAQRnZXRZBAUJZnJvbUluZGV4BQd0b0luZGV4BQF4BQJ4cAQDX2R5CQBlAgkAZQIJAJEDAgUCeHAFB3RvSW5kZXgFAXkAAQQLZmVlRGlzY291bnQJARRjYWxjdWxhdGVGZWVEaXNjb3VudAEIBQNtc2cMb3JpZ2luQ2FsbGVyBARfZmVlCQBrAwUDX2R5CQBuBAUDZmVlBQtmZWVEaXNjb3VudAUJZmVlU2NhbGU2BQdDRUlMSU5HBQlmZWVTY2FsZTYEAmR5CQBlAgUDX2R5BQRfZmVlBA5nb3Zlcm5hbmNlRmVlcwkAawMFBF9mZWUFDWZlZUdvdmVybmFuY2UFCWZlZVNjYWxlNgMJAQZhc3NlcnQBCQBnAgUCZHkFBm1pbl9keQkAAgECLkV4Y2hhbmdlIHJlc3VsdGVkIGluIGZld2VyIGNvaW5zIHRoYW4gZXhwZWN0ZWQKAQ9tYWtlTmV3QmFsYW5jZXMCA2FjYwx0b2tlbkJhbGFuY2UEDSR0MDI2OTg5MjcwMTUFA2FjYwQLbmV3QmFsYW5jZXMIBQ0kdDAyNjk4OTI3MDE1Al8xBAFpCAUNJHQwMjY5ODkyNzAxNQJfMgMJAAACBQFpBQlmcm9tSW5kZXgJAJQKAgkAzQgCBQtuZXdCYWxhbmNlcwkAZAIFDHRva2VuQmFsYW5jZQUCZHgJAGQCBQFpAAEDCQAAAgUBaQUHdG9JbmRleAkAlAoCCQDNCAIFC25ld0JhbGFuY2VzCQBlAgUMdG9rZW5CYWxhbmNlBQNfZHkJAGQCBQFpAAEJAJQKAgkAzQgCBQtuZXdCYWxhbmNlcwUMdG9rZW5CYWxhbmNlCQBkAgUBaQABBA0kdDAyNzI5ODI3MzU5CgACJGwFAnhwCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCBQNuaWwAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEPbWFrZU5ld0JhbGFuY2VzAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKBAtuZXdCYWxhbmNlcwgFDSR0MDI3Mjk4MjczNTkCXzEEAWkIBQ0kdDAyNzI5ODI3MzU5Al8yAwkBEmNoZWNrREFwcFRocmVzaG9sZAEFC25ld0JhbGFuY2VzCQEFdGhyb3cABAFzCQEFc3Rha2UCCAUHcGF5bWVudAZhbW91bnQJAQ1nZXRTdHJBc3NldElkAQgFB3BheW1lbnQHYXNzZXRJZAMJAAACBQFzBQFzBAJ1cwkBB3Vuc3Rha2UCBQNfZHkFCHRva2VuT3V0AwkAAAIFAnVzBQJ1cwQGbHBGZWVzCQBlAgUEX2ZlZQUOZ292ZXJuYW5jZUZlZXMEB2FpcmRyb3ADCQBmAgUGbHBGZWVzAAAJAPwHBAUQbHBGYXJtaW5nQWRkcmVzcwIHYWlyRHJvcAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQt0b2tlbk91dEI1OAUGbHBGZWVzBQNuaWwAAAMJAAACBQdhaXJkcm9wBQdhaXJkcm9wCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUHdG9rZW5JbgUNa0Fzc2V0QmFsYW5jZQUBeAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQh0b2tlbk91dAUNa0Fzc2V0QmFsYW5jZQkAZQIJAJEDAgUCeHAFB3RvSW5kZXgFA19keQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUDbXNnBmNhbGxlcgUCZHkFC3Rva2VuT3V0QjU4CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFD21vbmV5Qm94QWRkcmVzcwUOZ292ZXJuYW5jZUZlZXMFC3Rva2VuT3V0QjU4BQNuaWwJAMwIAgUCZHkJAMwIAgULdG9rZW5PdXRCNTgFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgNtc2cBCHdpdGhkcmF3AQptaW5BbW91bnRzCQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUACQEMY2FsY1dpdGhkcmF3AwUDbXNnBQptaW5BbW91bnRzAAADbXNnARJ3aXRoZHJhd1dpdGhVbmxvY2sCCm1pbkFtb3VudHMMdW5sb2NrQW1vdW50CQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUAAwkAZwIAAAUMdW5sb2NrQW1vdW50CQACAQIeVW5sb2NrIGFtb3VudCBtdXN0IGJlIHBvc2l0aXZlBAZ1bmxvY2sJAPwHBAUOZmFybWluZ0FkZHJlc3MCG3dpdGhkcmF3U2hhcmVUb2tlbnNGcm9tUG9vbAkAzAgCCAgFA21zZwZjYWxsZXIFYnl0ZXMJAMwIAgkApQgBBQR0aGlzCQDMCAIFDHVubG9ja0Ftb3VudAUDbmlsBQNuaWwDCQAAAgUGdW5sb2NrBQZ1bmxvY2sJAQxjYWxjV2l0aGRyYXcDBQNtc2cFCm1pbkFtb3VudHMFDHVubG9ja0Ftb3VudAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgNtc2cBE2NhbGNXaXRoZHJhd09uZUNvaW4DC3Rva2VuQW1vdW50CHRva2VuT3V0BHVzZXIDCQBnAgAABQt0b2tlbkFtb3VudAkAAgECF0Ftb3VudCBtdXN0IGJlIHBvc2l0aXZlBAFpCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAM8IAgUIYXNzZXRJZHMFCHRva2VuT3V0AhF1bmtub3duIHRva2VuIG91dAkAlAoCBQNuaWwICQEUX2NhbGNXaXRoZHJhd09uZUNvaW4ECQEDX3hwAAULdG9rZW5BbW91bnQFAWkJAQdBZGRyZXNzAQkA2QQBBQR1c2VyAl8xA21zZwEPd2l0aGRyYXdPbmVDb2luAgh0b2tlbk91dAltaW5BbW91bnQJAQt2YWx1ZU9yRWxzZQIJAQxpc0RlcHJpY2F0ZWQACQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUAAwkBAiE9AgkAkAMBCAUDbXNnCHBheW1lbnRzAAEJAAIBAhNzaXplKHBheW1lbnRzKSAhPSAxCQEaY2FsY1dpdGhkcmF3T25lQ29pbkVudHJpZXMEBQNtc2cFCHRva2VuT3V0BQltaW5BbW91bnQAAANtc2cBGXdpdGhkcmF3T25lQ29pbldpdGhVbmxvY2sDCHRva2VuT3V0CW1pbkFtb3VudAx1bmxvY2tBbW91bnQJAQt2YWx1ZU9yRWxzZQIJAQxpc0RlcHJpY2F0ZWQACQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUAAwkAZgIAAAUMdW5sb2NrQW1vdW50CQACAQIeVW5sb2NrIGFtb3VudCBtdXN0IGJlIHBvc2l0aXZlBAZ1bmxvY2sJAPwHBAUOZmFybWluZ0FkZHJlc3MCG3dpdGhkcmF3U2hhcmVUb2tlbnNGcm9tUG9vbAkAzAgCCAgFA21zZwZjYWxsZXIFYnl0ZXMJAMwIAgkApQgBBQR0aGlzCQDMCAIFDHVubG9ja0Ftb3VudAUDbmlsBQNuaWwDCQAAAgUGdW5sb2NrBQZ1bmxvY2sJARpjYWxjV2l0aGRyYXdPbmVDb2luRW50cmllcwQFA21zZwUIdG9rZW5PdXQFCW1pbkFtb3VudAUMdW5sb2NrQW1vdW50CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuA21zZwEBQQAJAJQKAgUDbmlsCQECX0EAA21zZwEPZ2V0VmlydHVhbFByaWNlAAQBRAkBBWdldF9EAgkBA194cAAJAQJfQQAJAJQKAgUDbmlsCQBrAwUBRAUJUFJFQ0lTSU9OBQtzaGFyZVN1cHBseQNtc2cBD2NhbGNUb2tlbkFtb3VudAIHYW1vdW50cwdkZXBvc2l0BANhbXAJAQJfQQAECGJhbGFuY2VzCQEDX3hwAAQCRDAJAQdnZXRETWVtAgUIYmFsYW5jZXMFA2FtcAoBD2NhbGNOZXdCYWxhbmNlcwIDYWNjB2JhbGFuY2UEDSR0MDMwMTQ5MzAxNzUFA2FjYwQLbmV3QmFsYW5jZXMIBQ0kdDAzMDE0OTMwMTc1Al8xBAFpCAUNJHQwMzAxNDkzMDE3NQJfMgQKbmV3QmFsYW5jZQkAZAIFB2JhbGFuY2UDBQdkZXBvc2l0CQCRAwIFB2Ftb3VudHMFAWkJAQEtAQkAkQMCBQdhbW91bnRzBQFpCQCUCgIJAM0IAgULbmV3QmFsYW5jZXMFCm5ld0JhbGFuY2UJAGQCBQFpAAEEC25ld0JhbGFuY2VzCAoAAiRsBQhiYWxhbmNlcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgUDbmlsAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBD2NhbGNOZXdCYWxhbmNlcwIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgJfMQQCRDEJAQdnZXRETWVtAgULbmV3QmFsYW5jZXMFA2FtcAQEZGlmZgMFB2RlcG9zaXQJAGUCBQJEMQUCRDAJAGUCBQJEMAUCRDEJAJQKAgUDbmlsCQBrAwUEZGlmZgULc2hhcmVTdXBwbHkFAkQwA21zZwEFcmFtcEECCF9mdXR1cmVBC19mdXR1cmVUaW1lCQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUACQELdmFsdWVPckVsc2UCCQELaXNBZG1pbkNhbGwBBQNtc2cDCQEGYXNzZXJ0AQkAZwIFDmJsb2NrVGltZXN0YW1wCQBkAgUOaW5pdGlhbF9BX3RpbWUFDU1JTl9SQU1QX1RJTUUJAAIBAgl0b28gb2Z0ZW4DCQEGYXNzZXJ0AQkAZwIFC19mdXR1cmVUaW1lCQBkAgUOYmxvY2tUaW1lc3RhbXAFDU1JTl9SQU1QX1RJTUUJAAIBAhFpbnN1ZmZpY2llbnQgdGltZQQKX2luaXRpYWxfQQkBAl9BAAMJAQZhc3NlcnQBAwkAZgIFCF9mdXR1cmVBAAAJAGYCBQVNQVhfQQUIX2Z1dHVyZUEHCQACAQIRb3V0IG9mIGJhc2UgcmFuZ2UDCQEGYXNzZXJ0AQMDCQBnAgUIX2Z1dHVyZUEFCl9pbml0aWFsX0EJAGcCCQBoAgUKX2luaXRpYWxfQQUMTUFYX0FfQ0hBTkdFBQhfZnV0dXJlQQcGAwkAZgIFCl9pbml0aWFsX0EFCF9mdXR1cmVBCQBnAgkAaAIFCF9mdXR1cmVBBQxNQVhfQV9DSEFOR0UFCl9pbml0aWFsX0EHCQACAQIMb3V0IG9mIHJhbmdlCQDMCAIJAQxJbnRlZ2VyRW50cnkCAglpbml0aWFsX0EFCl9pbml0aWFsX0EJAMwIAgkBDEludGVnZXJFbnRyeQICCGZ1dHVyZV9BBQhfZnV0dXJlQQkAzAgCCQEMSW50ZWdlckVudHJ5AgIOaW5pdGlhbF9BX3RpbWUFDmJsb2NrVGltZXN0YW1wCQDMCAIJAQxJbnRlZ2VyRW50cnkCAg1mdXR1cmVfQV90aW1lBQtfZnV0dXJlVGltZQUDbmlsA21zZwEJc3RvcFJhbXBBAAkBC3ZhbHVlT3JFbHNlAgkBCGlzQWN0aXZlAAkBC3ZhbHVlT3JFbHNlAgkBC2lzQWRtaW5DYWxsAQUDbXNnBAhjdXJyZW50QQkBAl9BAAkAzAgCCQEMSW50ZWdlckVudHJ5AgIJaW5pdGlhbF9BBQhjdXJyZW50QQkAzAgCCQEMSW50ZWdlckVudHJ5AgIIZnV0dXJlX0EFCGN1cnJlbnRBCQDMCAIJAQxJbnRlZ2VyRW50cnkCAg5pbml0aWFsX0FfdGltZQUOYmxvY2tUaW1lc3RhbXAJAMwIAgkBDEludGVnZXJFbnRyeQICDWZ1dHVyZV9BX3RpbWUFDmJsb2NrVGltZXN0YW1wBQNuaWwDbXNnAQhzaHV0ZG93bgAJAQt2YWx1ZU9yRWxzZQIJAQtpc0FkbWluQ2FsbAEFA21zZwMJAQEhAQUGYWN0aXZlCQACAQkArAICAiJEQXBwIGlzIGFscmVhZHkgc3VzcGVuZGVkLiBDYXVzZTogCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMFBmtDYXVzZQIadGhlIGNhdXNlIHdhc24ndCBzcGVjaWZpZWQJAQdzdXNwZW5kAQIPUGF1c2VkIGJ5IGFkbWluA21zZwEIYWN0aXZhdGUACQELdmFsdWVPckVsc2UCCQELaXNBZG1pbkNhbGwBBQNtc2cDBQZhY3RpdmUJAQ10aHJvd0lzQWN0aXZlAAkAzAgCCQEMQm9vbGVhbkVudHJ5AgUHa0FjdGl2ZQYJAMwIAgkBC0RlbGV0ZUVudHJ5AQUGa0NhdXNlBQNuaWwDbXNnARl0YWtlSW50b0FjY291bnRFeHRyYUZ1bmRzAAkBC3ZhbHVlT3JFbHNlAgkBCGlzQWN0aXZlAAQFY2xhaW0DCQEPY29udGFpbnNFbGVtZW50AgUIYXNzZXRJZHMJANgEAQUEVVNETgkA/AcEBRJzdGFraW5nVVNETkFkZHJlc3MCDGNsYWltUmV3YXJkcwUDbmlsBQNuaWwAAAMJAAACBQVjbGFpbQUFY2xhaW0DCQECIT0CCAUDbXNnBmNhbGxlcgUPbW9uZXlCb3hBZGRyZXNzCQACAQImT25seSB0aGUgd2FsbGV0IGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24ECGJhbGFuY2VzCQEDX3hwAAoBDnRha2VFeHRyYUZ1bmRzAgNhY2MHYXNzZXRJZAQNJHQwMzI3NjAzMjc3OAUDYWNjBANzdW0IBQ0kdDAzMjc2MDMyNzc4Al8xBAFpCAUNJHQwMzI3NjAzMjc3OAJfMgQIdG9rZW5CNTgJANkEAQUHYXNzZXRJZAQIckJhbGFuY2UJAGQCCQDwBwIFBHRoaXMFCHRva2VuQjU4CQEMc3Rha2VkQW1vdW50AQUIdG9rZW5CNTgEDGVucm9sbEFtb3VudAkAZQIFCHJCYWxhbmNlCQCRAwIFCGJhbGFuY2VzBQFpAwkAZgIAAAUMZW5yb2xsQW1vdW50CQEHc3VzcGVuZAEJAKwCAgIgRW5yb2xsIGFtb3VudCBuZWdhdGl2ZSBmb3IgYXNzZXQFB2Fzc2V0SWQEB2FpcmRyb3ADCQBmAgUMZW5yb2xsQW1vdW50AAAJAPwHBAUQbHBGYXJtaW5nQWRkcmVzcwIHYWlyRHJvcAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQh0b2tlbkI1OAUMZW5yb2xsQW1vdW50BQNuaWwAAAMJAAACBQdhaXJkcm9wBQdhaXJkcm9wCQCUCgIJAGQCBQNzdW0FDGVucm9sbEFtb3VudAkAZAIFAWkAAQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgQBawoAAiRsBQhhc3NldElkcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgAAAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBDnRha2VFeHRyYUZ1bmRzAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAwkAAAIIBQFrAl8xAAAJAAIBAhBObyBtb25leSB0byB0YWtlBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BAnR4AQZ2ZXJpZnkABBNtdWx0aVNpZ25lZEJ5QWRtaW5zBBJhZG1pblB1YktleTFTaWduZWQDCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAABQxhZG1pblB1YktleTEAAQAABBJhZG1pblB1YktleTJTaWduZWQDCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwABBQxhZG1pblB1YktleTIAAQAABBJhZG1pblB1YktleTNTaWduZWQDCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwACBQxhZG1pblB1YktleTMAAQAACQBnAgkAZAIJAGQCBRJhZG1pblB1YktleTFTaWduZWQFEmFkbWluUHViS2V5MlNpZ25lZAUSYWRtaW5QdWJLZXkzU2lnbmVkAAIEByRtYXRjaDAFAnR4AwkAAQIFByRtYXRjaDACF0ludm9rZVNjcmlwdFRyYW5zYWN0aW9uBANpbnYFByRtYXRjaDAEE2NhbGxUYWtlSW50b0FjY291bnQDCQAAAggFA2ludgRkQXBwBQR0aGlzCQAAAggFA2ludghmdW5jdGlvbgIZdGFrZUludG9BY2NvdW50RXh0cmFGdW5kcwcEDXNpZ25lZEJ5QWRtaW4DAwMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAFDGFkbWluUHViS2V5MQYJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAFDGFkbWluUHViS2V5MgYJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAFDGFkbWluUHViS2V5MwYJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAFEWFkbWluUHViS2V5SW52b2tlAwMFE2NhbGxUYWtlSW50b0FjY291bnQFDXNpZ25lZEJ5QWRtaW4HBgUTbXVsdGlTaWduZWRCeUFkbWlucwUTbXVsdGlTaWduZWRCeUFkbWluc6pE1hg=", "height": 2447518, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 9M4xLK3rqRUBgx76Th1SAVjPTp5jJz23XZvD3ERw6Z9z Next: 3q8Z8MyQoighBNDkYYZnsmDvY3jStjuN4cibaLpegA4M Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = 1000000
55
66 let b = 1000000
77
88 let c = 10
99
1010 let d = 6
1111
1212 let e = (86400 / 60)
1313
1414 let f = "3.0.0"
1515
1616 let g = "version"
1717
1818 let h = "asset_ids"
1919
2020 let i = "_balance"
2121
2222 let j = "active"
2323
2424 let k = "active_all_contracts"
2525
2626 let l = "deprecated_"
2727
2828 let m = "shutdown_cause"
2929
3030 let n = "share_asset_id"
3131
3232 let o = "share_asset_supply"
3333
3434 let p = "commission"
3535
3636 let q = "dAppThresholdCoef"
3737
3838 let r = "staking_usdnnsbt_address"
3939
4040 let s = "discounts"
4141
4242 let t = "discount_values"
4343
4444 let u = "_SWOP_amount"
4545
4646 let v = "_GSwop_amount"
4747
4848 let w = "admin_pub_1"
4949
5050 let x = "admin_pub_2"
5151
5252 let y = "admin_pub_3"
5353
5454 let z = "admin_invoke_pub"
5555
5656 let B = "money_box_address"
5757
5858 let C = "governance_address"
5959
6060 let E = "voting_address"
6161
6262 let F = "farming_address"
6363
6464 let G = "lp_farming"
6565
6666 let H = Address(base58'3MvVBtsXroQpy1tsPw21TU2ET9A8WfmrNjz')
6767
6868 func I (J) = {
6969 let K = getString(H, J)
7070 if ($isInstanceOf(K, "String"))
7171 then {
7272 let L = K
7373 fromBase58String(L)
7474 }
7575 else {
7676 let M = K
7777 throw((J + "is empty"))
7878 }
7979 }
8080
8181
8282 let N = I(w)
8383
8484 let O = I(x)
8585
8686 let P = I(y)
8787
8888 let Q = I(z)
8989
9090 let R = Address(I(B))
9191
9292 let S = Address(I(C))
9393
9494 let T = Address(I(r))
9595
9696 let U = Address(I(E))
9797
9898 let V = Address(I(F))
9999
100100 let W = Address(I(G))
101101
102102 let X = base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p'
103103
104104 let Y = [toBase58String(X)]
105105
106106 let Z = getBooleanValue(this, j)
107107
108108 let aa = valueOrElse(getBoolean(H, k), true)
109109
110110 let ab = valueOrElse(getBoolean(H, (l + toString(this))), false)
111111
112112 let ac = fromBase58String(getStringValue(this, n))
113113
114114 let ad = getIntegerValue(this, o)
115115
116116 let ae = 1000000
117117
118118 let af = getIntegerValue(this, p)
119119
120120 let ag = fraction(40, ae, 100)
121121
122122 let ah = getIntegerValue(this, "initial_A")
123123
124124 let ai = getIntegerValue(this, "future_A")
125125
126126 let aj = valueOrElse(getInteger(this, "initial_A_time"), 0)
127127
128128 let ak = valueOrElse(getInteger(this, "future_A_time"), 0)
129129
130130 let al = split(getStringValue(this, h), ",")
131131
132132 let am = size(al)
133133
134134 func an (ao) = [BooleanEntry(j, false), StringEntry(m, ao)]
135135
136136
137137 func ap () = throw("DApp is already active")
138138
139139
140140 func aq () = if (if (Z)
141141 then aa
142142 else false)
143143 then unit
144144 else throw("DApp is inactive at this moment")
145145
146146
147147 func ar () = if (!(ab))
148148 then unit
149149 else throw("Pool is deprecated. Only withdraw action allowed.")
150150
151151
152152 func as (at) = if (containsElement([N, O, P], at.callerPublicKey))
153153 then unit
154154 else throw("Only admin can call this function")
155155
156156
157157 func au (at) = if ((this == at.caller))
158158 then unit
159159 else throw("Only contract itself can call this function")
160160
161161
162162 let av = toBigInt(2)
163163
164164 let aw = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
165165
166166 let ax = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
167167
168168 let ay = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
169169
170170 let az = height
171171
172172 func aA (aB) = if (aB)
173173 then false
174174 else true
175175
176176
177177 func aC (aD) = {
178178 let aE = {
179179 let K = aD
180180 if ($isInstanceOf(K, "Address"))
181181 then {
182182 let aF = K
183183 toString(aF)
184184 }
185185 else if ($isInstanceOf(K, "String"))
186186 then {
187187 let aF = K
188188 aF
189189 }
190190 else throw("Unknow type of user Addr")
191191 }
192192 let aG = valueOrElse(getInteger(S, (aE + v)), 0)
193193 let aH = valueOrElse(getInteger(S, (aE + v)), aG)
194194 let aI = split(getStringValue(H, t), ",")
195195 let aJ = split(getStringValue(H, s), ",")
196196 if (if ((aH >= parseIntValue(aI[0])))
197197 then (parseIntValue(aI[1]) > aH)
198198 else false)
199199 then (ae - parseIntValue(aJ[0]))
200200 else if (if ((aH >= parseIntValue(aI[1])))
201201 then (parseIntValue(aI[2]) > aH)
202202 else false)
203203 then (ae - parseIntValue(aJ[1]))
204204 else if (if ((aH >= parseIntValue(aI[2])))
205205 then (parseIntValue(aI[3]) > aH)
206206 else false)
207207 then (ae - parseIntValue(aJ[2]))
208208 else if (if ((aH >= parseIntValue(aI[3])))
209209 then (parseIntValue(aI[4]) > aH)
210210 else false)
211211 then (ae - parseIntValue(aJ[3]))
212212 else if ((aH >= parseIntValue(aI[4])))
213213 then (ae - parseIntValue(aJ[4]))
214214 else ae
215215 }
216216
217217
218218 func aK () = {
219219 let aL = ak
220220 let aM = ai
221221 if ((aL > az))
222222 then {
223223 let aN = ah
224224 let aO = aj
225225 if ((aM > aN))
226226 then (aN + (((aM - aN) * (az - aO)) / (aL - aO)))
227227 else (aN - (((aN - aM) * (az - aO)) / (aL - aO)))
228228 }
229229 else aM
230230 }
231231
232232
233233 func aP () = {
234234 func aQ (aR,aS) = (aR :+ valueOrElse(getInteger(this, (aS + i)), 0))
235235
236236 let aT = al
237237 let aU = size(aT)
238238 let aV = nil
239239 func aW (aX,aY) = if ((aY >= aU))
240240 then aX
241241 else aQ(aX, aT[aY])
242242
243243 func aZ (aX,aY) = if ((aY >= aU))
244244 then aX
245245 else throw("List size exceeds 10")
246246
247247 aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
248248 }
249249
250250
251251 func ba (bb) = bb
252252
253253
254254 func bc (aR,bd) = (aR + bd)
255255
256256
257257 func be (bb,bf) = {
258258 let bg = invoke(this, "D", [bb, bf], nil)
259259 if ($isInstanceOf(bg, "Int"))
260260 then bg
261261 else throw(($getType(bg) + " couldn't be cast to Int"))
262262 }
263263
264264
265265 func bh (bb,bf) = {
266266 let bi = {
267267 let aT = bb
268268 let aU = size(aT)
269269 let aV = 0
270270 func aW (aX,aY) = if ((aY >= aU))
271271 then aX
272272 else bc(aX, aT[aY])
273273
274274 func aZ (aX,aY) = if ((aY >= aU))
275275 then aX
276276 else throw("List size exceeds 10")
277277
278278 aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
279279 }
280280 if ((bi == 0))
281281 then 0
282282 else {
283283 let bj = (bf * am)
284284 let bk = (toBigInt(bj) * toBigInt(bi))
285285 let bl = toBigInt((bj - 1))
286286 func bm (aR,at) = if ((aR._2 == true))
287287 then aR
288288 else {
289289 let bn = aR._1
290290 func bo (bp,at) = if ((am > at))
291291 then ((bp * bn) / (toBigInt(bb[at]) * toBigInt(am)))
292292 else bp
293293
294294 let bp = {
295295 let aT = aw
296296 let aU = size(aT)
297297 let aV = bn
298298 func bq (aX,aY) = if ((aY >= aU))
299299 then aX
300300 else bo(aX, aT[aY])
301301
302302 func br (aX,aY) = if ((aY >= aU))
303303 then aX
304304 else throw("List size exceeds 10")
305305
306306 br(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
307307 }
308308 let bs = fraction((bk + (toBigInt(am) * bp)), bn, ((bl * bn) + (toBigInt((am + 1)) * bp)))
309309 if ((bs > bn))
310310 then if ((1 >= toInt((bs - bn))))
311311 then $Tuple2(bs, true)
312312 else $Tuple2(bs, false)
313313 else if ((1 >= toInt((bn - bs))))
314314 then $Tuple2(bs, true)
315315 else $Tuple2(bs, false)
316316 }
317317
318318 let bt = {
319319 let aT = ax
320320 let aU = size(aT)
321321 let aV = $Tuple2(toBigInt(bi), false)
322322 func bq (aX,aY) = if ((aY >= aU))
323323 then aX
324324 else bm(aX, aT[aY])
325325
326326 func br (aX,aY) = if ((aY >= aU))
327327 then aX
328328 else throw("List size exceeds 15")
329329
330330 br(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
331331 }
332332 let bs = bt._1
333333 let bu = bt._2
334334 if ((bu == false))
335335 then throw(("get_D() not finished with " + toString(bs)))
336336 else toInt(bs)
337337 }
338338 }
339339
340340
341341 func bv (bb,bf) = be(ba(bb), bf)
342342
343343
344344 func bw (bx,by,bz,bA) = if (aA((bx != by)))
345345 then throw("same coin")
346346 else if (aA(if ((by >= 0))
347347 then (bx >= 0)
348348 else false))
349349 then throw("below zero")
350350 else if (aA(if ((am > by))
351351 then (am > bx)
352352 else false))
353353 then throw("above N_COINS")
354354 else {
355355 let bf = aK()
356356 let bs = be(bA, bf)
357357 let bj = (bf * am)
358358 func bB (aR,at) = {
359359 let bC = aR
360360 let bD = bC._1
361361 let bE = bC._2
362362 let bF = if ((bx == at))
363363 then bz
364364 else bA[at]
365365 if (if ((at != by))
366366 then (am > at)
367367 else false)
368368 then $Tuple2((bD + bF), fraction(bE, toBigInt(bs), toBigInt((bF * am))))
369369 else $Tuple2(bD, bE)
370370 }
371371
372372 let bG = {
373373 let aT = aw
374374 let aU = size(aT)
375375 let aV = $Tuple2(0, toBigInt(bs))
376376 func aW (aX,aY) = if ((aY >= aU))
377377 then aX
378378 else bB(aX, aT[aY])
379379
380380 func aZ (aX,aY) = if ((aY >= aU))
381381 then aX
382382 else throw("List size exceeds 10")
383383
384384 aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
385385 }
386386 let bD = bG._1
387387 let bH = bG._2
388388 let bE = fraction(bH, toBigInt(bs), toBigInt((bj * am)))
389389 let bI = toBigInt(((bD + (bs / bj)) - bs))
390390 func bJ (aR,bK) = if ((aR._2 == true))
391391 then aR
392392 else {
393393 let bL = aR._1
394394 let bM = (((bL * bL) + bE) / ((av * bL) + bI))
395395 if ((bM > bL))
396396 then if ((1 >= toInt((bM - bL))))
397397 then $Tuple2(bM, true)
398398 else $Tuple2(bM, false)
399399 else if ((1 >= toInt((bL - bM))))
400400 then $Tuple2(bM, true)
401401 else $Tuple2(bM, false)
402402 }
403403
404404 let bN = {
405405 let aT = ay
406406 let aU = size(aT)
407407 let aV = $Tuple2(toBigInt(bs), false)
408408 func bq (aX,aY) = if ((aY >= aU))
409409 then aX
410410 else bJ(aX, aT[aY])
411411
412412 func br (aX,aY) = if ((aY >= aU))
413413 then aX
414414 else throw("List size exceeds 16")
415415
416416 br(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16)
417417 }
418418 let bM = bN._1
419419 let bu = bN._2
420420 if ((bu == false))
421421 then throw(("getY() not finished with " + toString(bM)))
422422 else toInt(bM)
423423 }
424424
425425
426426 func bO (bP,bx,bb,bs) = if (aA((bx >= 0)))
427427 then throw("i below zero")
428428 else if (aA((am > bx)))
429429 then throw("i above N_COINS")
430430 else {
431431 let bj = (bP * am)
432432 func bB (aR,at) = {
433433 let bQ = aR
434434 let bD = bQ._1
435435 let bE = bQ._2
436436 let bF = if (if ((bx != at))
437437 then (am > at)
438438 else false)
439439 then bb[at]
440440 else 0
441441 if (if ((am > at))
442442 then (bx != at)
443443 else false)
444444 then $Tuple2((bD + bF), fraction(bE, toBigInt(bs), toBigInt((bF * am))))
445445 else $Tuple2(bD, bE)
446446 }
447447
448448 let bR = {
449449 let aT = aw
450450 let aU = size(aT)
451451 let aV = $Tuple2(0, toBigInt(bs))
452452 func aW (aX,aY) = if ((aY >= aU))
453453 then aX
454454 else bB(aX, aT[aY])
455455
456456 func aZ (aX,aY) = if ((aY >= aU))
457457 then aX
458458 else throw("List size exceeds 10")
459459
460460 aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
461461 }
462462 let bD = bR._1
463463 let bH = bR._2
464464 let bE = fraction(bH, toBigInt(bs), toBigInt((bj * am)))
465465 let bI = toBigInt(((bD + (bs / bj)) - bs))
466466 func bS (aR,at) = if ((aR._2 == true))
467467 then aR
468468 else {
469469 let bL = aR._1
470470 let bM = (((bL * bL) + bE) / ((av * bL) + bI))
471471 if ((bM > bL))
472472 then if ((1 >= toInt((bM - bL))))
473473 then $Tuple2(bM, true)
474474 else $Tuple2(bM, false)
475475 else if ((1 >= toInt((bL - bM))))
476476 then $Tuple2(bM, true)
477477 else $Tuple2(bM, false)
478478 }
479479
480480 let bT = {
481481 let aT = ay
482482 let aU = size(aT)
483483 let aV = $Tuple2(toBigInt(bs), false)
484484 func bq (aX,aY) = if ((aY >= aU))
485485 then aX
486486 else bS(aX, aT[aY])
487487
488488 func br (aX,aY) = if ((aY >= aU))
489489 then aX
490490 else throw("List size exceeds 16")
491491
492492 br(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16)
493493 }
494494 let bM = bT._1
495495 let bu = bT._2
496496 if ((bu == false))
497497 then throw(("get_y_D() not finished with " + toString(bM)))
498498 else toInt(bM)
499499 }
500500
501501
502502 func bU (bb,bV,at,bW) = {
503503 let bX = aC(bW)
504504 let bf = aK()
505505 let bY = ((fraction(af, bX, ae, CEILING) * am) / (4 * (am - 1)))
506506 let bZ = ad
507507 let ca = be(bb, bf)
508508 let cb = (ca - fraction(bV, ca, bZ))
509509 let cc = bO(bf, at, bb, cb)
510510 let cd = (bb[at] - cc)
511511 func ce (aR,cf) = {
512512 let cg = aR
513513 let ch = cg._1
514514 let ci = cg._2
515515 let cj = if ((ci == at))
516516 then (fraction(cf, cb, ca) - cc)
517517 else (cf - fraction(cf, cb, ca))
518518 $Tuple2((ch :+ (cf - fraction(bY, cj, ae))), (ci + 1))
519519 }
520520
521521 let ck = {
522522 let aT = bb
523523 let aU = size(aT)
524524 let aV = $Tuple2(nil, 0)
525525 func aW (aX,aY) = if ((aY >= aU))
526526 then aX
527527 else ce(aX, aT[aY])
528528
529529 func aZ (aX,aY) = if ((aY >= aU))
530530 then aX
531531 else throw("List size exceeds 10")
532532
533533 aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
534534 }
535535 let ch = ck._1
536536 let ci = ck._2
537537 let cl = ch[at]
538538 let cm = ((cl - bO(bf, at, ch, cb)) - 1)
539539 $Tuple2(cm, (cd - cm))
540540 }
541541
542542
543543 func cn (aS) = {
544544 let K = aS
545545 if ($isInstanceOf(K, "ByteVector"))
546546 then {
547547 let co = K
548548 toBase58String(co)
549549 }
550550 else if ($isInstanceOf(K, "Unit"))
551551 then {
552552 let cp = K
553553 "WAVES"
554554 }
555555 else throw("Match error")
556556 }
557557
558558
559559 func cq (cr,aS) = if (cr)
560560 then $Tuple2("lockNeutrino", T)
561561 else $Tuple2("unlockNeutrino", T)
562562
563563
564564 func cs (cr,ct,aS) = if (cr)
565565 then {
566566 let cu = cq(cr, aS)
567567 let cv = cu._1
568568 let cw = cu._2
569569 $Tuple4(cv, cw, nil, [AttachedPayment(aS, ct)])
570570 }
571571 else {
572572 let cx = cq(cr, aS)
573573 let cv = cx._1
574574 let cw = cx._2
575575 $Tuple4(cv, cw, [ct, toBase58String(aS)], nil)
576576 }
577577
578578
579579 func cr (ct,cy) = if (containsElement(Y, cy))
580580 then {
581581 let cz = cs(true, ct, fromBase58String(cy))
582582 let cv = cz._1
583583 let cA = cz._2
584584 let cB = cz._3
585585 let cC = cz._4
586586 invoke(cA, cv, cB, cC)
587587 }
588588 else 0
589589
590590
591591 func cD (ct,cy) = if (containsElement(Y, cy))
592592 then {
593593 let cE = cs(false, ct, fromBase58String(cy))
594594 let cv = cE._1
595595 let cA = cE._2
596596 let cB = cE._3
597597 let cC = cE._4
598598 invoke(cA, cv, cB, cC)
599599 }
600600 else 0
601601
602602
603603 func cF (aS) = {
604604 let cG = {
605605 let K = aS
606606 if ($isInstanceOf(K, "ByteVector"))
607607 then {
608608 let cH = K
609609 if ((cH == X))
610610 then getInteger(T, ((("rpd_balance_" + toBase58String(cH)) + "_") + toString(this)))
611611 else 0
612612 }
613613 else if ($isInstanceOf(K, "Unit"))
614614 then 0
615615 else throw("Match error")
616616 }
617617 let K = cG
618618 if ($isInstanceOf(K, "Int"))
619619 then {
620620 let at = K
621621 at
622622 }
623623 else 0
624624 }
625625
626626
627627 func cI () = {
628628 let cJ = aP()
629629 func cK (aR,aS) = {
630630 let cL = aR
631631 let cM = cL._1
632632 let at = cL._2
633633 if (cM)
634634 then $Tuple2(cM, at)
635635 else {
636636 let cN = (assetBalance(this, fromBase58String(aS)) + cF(fromBase58String(aS)))
637637 if ((cJ[at] > cN))
638638 then $Tuple2(true, at)
639639 else $Tuple2(false, (at + 1))
640640 }
641641 }
642642
643643 let aT = al
644644 let aU = size(aT)
645645 let aV = $Tuple2(false, 0)
646646 func aW (aX,aY) = if ((aY >= aU))
647647 then aX
648648 else cK(aX, aT[aY])
649649
650650 func aZ (aX,aY) = if ((aY >= aU))
651651 then aX
652652 else throw("List size exceeds 10")
653653
654654 aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
655655 }
656656
657657
658658 func cO (at) = an(("Suspicious state with asset: " + al[at]))
659659
660660
661661 func cP (bW,cC) = {
662662 func cQ (aR,cR) = (aR :+ ScriptTransfer(bW, cR.amount, cR.assetId))
663663
664664 let aT = cC
665665 let aU = size(aT)
666666 let aV = nil
667667 func aW (aX,aY) = if ((aY >= aU))
668668 then aX
669669 else cQ(aX, aT[aY])
670670
671671 func aZ (aX,aY) = if ((aY >= aU))
672672 then aX
673673 else throw("List size exceeds 10")
674674
675675 aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
676676 }
677677
678678
679679 func cS (cT) = {
680680 let cU = valueOrErrorMessage(getInteger(this, q), "No dAppThresholdCoef key")
681681 let cV = 10000
682682 let cW = max(cT)
683683 let cX = min(cT)
684684 let cY = fraction(cW, cV, cX)
685685 if ((cY > (cU * cV)))
686686 then throw("New balance in assets of the DApp is less than threshold")
687687 else false
688688 }
689689
690690
691691 func cZ (al) = {
692692 let da = split(al, ",")
693693 if ((size(da) > 10))
694694 then throw("To many coins, max coins size 10")
695695 else {
696696 func db (dc,aS) = {
697697 let dd = valueOrErrorMessage(fromBase58String(aS), ("fromBase58String: " + aS))
698698 let de = valueOrErrorMessage(assetInfo(dd), ("assetInfo: " + aS)).decimals
699699 if ((de != d))
700700 then throw("wrong decimals")
701701 else false
702702 }
703703
704704 let aT = da
705705 let aU = size(aT)
706706 let aV = false
707707 func aW (aX,aY) = if ((aY >= aU))
708708 then aX
709709 else db(aX, aT[aY])
710710
711711 func aZ (aX,aY) = if ((aY >= aU))
712712 then aX
713713 else throw("List size exceeds 10")
714714
715715 aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
716716 }
717717 }
718718
719719
720720 func df (dg,dh,di) = {
721721 let cM = cI()
722722 if (cM._1)
723723 then (cO(cM._2) ++ cP(dg.caller, dg.payments))
724724 else {
725725 let dj = if ((size(dg.payments) > 0))
726726 then if ((size(dg.payments) != 1))
727727 then throw("size(payments) != 1")
728728 else {
729729 let dk = dg.payments[0].assetId
730730 if ((ac != dk))
731731 then throw("unknown payment token")
732732 else dg.payments[0].amount
733733 }
734734 else 0
735735 let dl = (dj + di)
736736 func dm (aR,dn) = {
737737 let do = aR
738738 let dp = do._1
739739 let at = do._2
740740 let dq = fraction(dn, dl, ad)
741741 if (aA((dq >= dh[at])))
742742 then throw("Withdrawal resulted in fewer coins than expected")
743743 else {
744744 let dr = cD(dq, al[at])
745745 if ((dr == dr))
746746 then $Tuple2((dp ++ [IntegerEntry((al[at] + i), (dn - dq)), ScriptTransfer(dg.caller, dq, fromBase58String(al[at]))]), (at + 1))
747747 else throw("Strict value is not equal to itself.")
748748 }
749749 }
750750
751751 let ds = {
752752 let aT = aP()
753753 let aU = size(aT)
754754 let aV = $Tuple2(nil, 0)
755755 func aW (aX,aY) = if ((aY >= aU))
756756 then aX
757757 else dm(aX, aT[aY])
758758
759759 func aZ (aX,aY) = if ((aY >= aU))
760760 then aX
761761 else throw("List size exceeds 10")
762762
763763 aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
764764 }
765765 let dp = ds._1
766766 let at = ds._2
767767 (dp ++ [Burn(ac, dl), IntegerEntry(o, (ad - dl))])
768768 }
769769 }
770770
771771
772772 func dt (dg,du,dv,di) = {
773773 let cM = cI()
774774 if (cM._1)
775775 then (cO(cM._2) ++ cP(dg.originCaller, dg.payments))
776776 else {
777777 let dj = if ((size(dg.payments) > 0))
778778 then {
779779 let dk = dg.payments[0].assetId
780780 if ((ac != dk))
781781 then throw("unknown payment token")
782782 else dg.payments[0].amount
783783 }
784784 else 0
785785 let dw = valueOrErrorMessage(indexOf(al, du), "unknown token out")
786786 let dx = fromBase58String(du)
787787 let dl = (dj + di)
788788 let bb = aP()
789789 let dy = bU(bb, dl, dw, dg.originCaller)
790790 let cm = dy._1
791791 let dz = dy._2
792792 if (aA((cm >= dv)))
793793 then throw("Not enough coins removed")
794794 else {
795795 let dA = fraction(dz, ag, ae)
796796 let dB = (cm + dz)
797797 func dC (aR,dD) = {
798798 let dE = aR
799799 let cT = dE._1
800800 let at = dE._2
801801 if ((at == dw))
802802 then $Tuple2((cT :+ (dD - dB)), (at + 1))
803803 else $Tuple2((cT :+ dD), (at + 1))
804804 }
805805
806806 let dF = {
807807 let aT = bb
808808 let aU = size(aT)
809809 let aV = $Tuple2(nil, 0)
810810 func aW (aX,aY) = if ((aY >= aU))
811811 then aX
812812 else dC(aX, aT[aY])
813813
814814 func aZ (aX,aY) = if ((aY >= aU))
815815 then aX
816816 else throw("List size exceeds 10")
817817
818818 aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
819819 }
820820 let cT = dF._1
821821 let dG = dF._2
822822 if (cS(cT))
823823 then throw()
824824 else {
825825 let dr = cD(dB, du)
826826 if ((dr == dr))
827827 then {
828828 let dH = (dz - dA)
829829 let dI = if ((dH > 0))
830830 then invoke(W, "airDrop", nil, [AttachedPayment(dx, dH)])
831831 else 0
832832 if ((dI == dI))
833833 then [ScriptTransfer(dg.originCaller, cm, dx), IntegerEntry((al[dw] + i), (bb[dw] - dB)), Burn(ac, dl), ScriptTransfer(R, dA, dx), IntegerEntry(o, (ad - dl))]
834834 else throw("Strict value is not equal to itself.")
835835 }
836836 else throw("Strict value is not equal to itself.")
837837 }
838838 }
839839 }
840840 }
841841
842842
843843 @Callable(dg)
844844 func D (bb,bf) = {
845845 let bs = bh(bb, bf)
846846 $Tuple2([IntegerEntry("D", bs)], bs)
847847 }
848848
849849
850850
851851 @Callable(dg)
852852 func init (al,aK,dJ) = if (!(isDataStorageUntouched(this)))
853853 then throw("Already initialized")
854854 else if ((0 >= aK))
855855 then throw("Amp must be must > 0")
856856 else if ((0 >= dJ))
857857 then throw("dApp Threshold Coef must be > 0")
858858 else {
859859 let dK = "s_Multi_USD"
860860 let dL = ("ShareToken of SwopFi protocol for MultiStable USD pool at address " + toString(this))
861861 let dM = Issue(dK, dL, 0, 6, true)
862862 let dN = calculateAssetId(dM)
863863 if (cZ(al))
864864 then throw()
865865 else [StringEntry(g, f), StringEntry(h, al), IntegerEntry("initial_A", aK), IntegerEntry("future_A", aK), IntegerEntry(p, getIntegerValue(H, "base_fee_flat")), StringEntry(n, toBase58String(dN)), IntegerEntry(o, 0), IntegerEntry(q, dJ), BooleanEntry(j, true), dM]
866866 }
867867
868868
869869
870870 @Callable(dg)
871871 func addLiquidity (dO,dP,dQ) = valueOrElse(aq(), valueOrElse(ar(), {
872872 let bf = aK()
873873 let bb = aP()
874874 let ca = if ((ad == 0))
875875 then 0
876876 else bv(bb, bf)
877877 let dR = if (if ((dQ > 0))
878878 then (dg.payments[(size(dg.payments) - 1)].assetId == unit)
879879 else false)
880880 then $Tuple2(removeByIndex(dg.payments, (size(dg.payments) - 1)), [dg.payments[(size(dg.payments) - 1)]])
881881 else $Tuple2(dg.payments, nil)
882882 let cC = dR._1
883883 let dS = dR._2
884884 let dT = size(cC)
885885 func dU (dV) = if ((dT > am))
886886 then throw(("payments size > " + toString(am)))
887887 else if ((1 > dT))
888888 then throw("payments size < 1")
889889 else if (if ((ad == 0))
890890 then (am != dT)
891891 else false)
892892 then throw("initial deposit requires all coins")
893893 else {
894894 func dW (aR,cR) = if (containsElement(al, cn(cR.assetId)))
895895 then true
896896 else throw("Invalid asset in payment")
897897
898898 let aT = cC
899899 let aU = size(aT)
900900 let aV = false
901901 func aW (aX,aY) = if ((aY >= aU))
902902 then aX
903903 else dW(aX, aT[aY])
904904
905905 func aZ (aX,aY) = if ((aY >= aU))
906906 then aX
907907 else throw("List size exceeds 10")
908908
909909 aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
910910 }
911911
912912 if (!(dU(dT)))
913913 then throw()
914914 else {
915915 let cM = cI()
916916 if (cM._1)
917917 then (cO(cM._2) ++ cP(dg.caller, cC))
918918 else {
919919 func cQ (aR,aS) = {
920920 let dX = aR
921921 let cT = dX._1
922922 let at = dX._2
923923 func dY (dZ,cR) = if ((cn(cR.assetId) == aS))
924924 then (dZ + cR.amount)
925925 else dZ
926926
927927 let ea = {
928928 let aT = cC
929929 let aU = size(aT)
930930 let aV = bb[at]
931931 func aW (aX,aY) = if ((aY >= aU))
932932 then aX
933933 else dY(aX, aT[aY])
934934
935935 func aZ (aX,aY) = if ((aY >= aU))
936936 then aX
937937 else throw("List size exceeds 10")
938938
939939 aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
940940 }
941941 $Tuple2((cT :+ ea), (at + 1))
942942 }
943943
944944 let eb = {
945945 let aT = al
946946 let aU = size(aT)
947947 let aV = $Tuple2(nil, 0)
948948 func aW (aX,aY) = if ((aY >= aU))
949949 then aX
950950 else cQ(aX, aT[aY])
951951
952952 func aZ (aX,aY) = if ((aY >= aU))
953953 then aX
954954 else throw("List size exceeds 10")
955955
956956 aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
957957 }
958958 let cT = eb._1
959959 let ec = eb._2
960960 if (cS(cT))
961961 then throw()
962962 else {
963963 let cb = bv(cT, bf)
964964 if (aA((cb > ca)))
965965 then throw("D1 > D0")
966966 else {
967967 let bX = aC(dg.caller)
968968 func dm (aR,dZ) = {
969969 let ed = aR
970970 let ee = ed._1
971971 let dp = ed._2
972972 let at = ed._3
973973 if ((ad > 0))
974974 then {
975975 let bY = ((fraction(af, bX, ae, CEILING) * am) / (4 * (am - 1)))
976976 let ef = {
977977 let eg = fraction(cb, bb[at], ca)
978978 let eh = if ((eg > dZ))
979979 then (eg - dZ)
980980 else (dZ - eg)
981981 fraction(bY, eh, ae)
982982 }
983983 let dA = fraction(ef, ag, ae)
984984 let ei = (dZ - ef)
985985 let ej = (dZ - ef)
986986 let ek = (dZ - bb[at])
987987 let dH = (ef - dA)
988988 let el = if ((ek > 0))
989989 then cr((ek - ef), al[at])
990990 else cD(ef, al[at])
991991 if ((el == el))
992992 then {
993993 let dI = if ((dH > 0))
994994 then invoke(W, "airDrop", nil, [AttachedPayment(fromBase58String(al[at]), dH)])
995995 else 0
996996 if ((dI == dI))
997997 then $Tuple3((ee :+ ej), (dp ++ [ScriptTransfer(R, dA, fromBase58String(al[at])), IntegerEntry((al[at] + i), ei)]), (at + 1))
998998 else throw("Strict value is not equal to itself.")
999999 }
10001000 else throw("Strict value is not equal to itself.")
10011001 }
10021002 else {
10031003 let el = cr(dZ, al[at])
10041004 if ((el == el))
10051005 then $Tuple3((ee :+ dZ), (dp :+ IntegerEntry((al[at] + i), dZ)), (at + 1))
10061006 else throw("Strict value is not equal to itself.")
10071007 }
10081008 }
10091009
10101010 let em = {
10111011 let aT = cT
10121012 let aU = size(aT)
10131013 let aV = $Tuple3(nil, nil, 0)
10141014 func bq (aX,aY) = if ((aY >= aU))
10151015 then aX
10161016 else dm(aX, aT[aY])
10171017
10181018 func br (aX,aY) = if ((aY >= aU))
10191019 then aX
10201020 else throw("List size exceeds 10")
10211021
10221022 br(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
10231023 }
10241024 let ee = em._1
10251025 let dp = em._2
10261026 let en = bv(ee, bf)
10271027 let eo = if ((ad == 0))
10281028 then cb
10291029 else fraction(ad, (en - ca), ca)
10301030 if (aA((eo >= dO)))
10311031 then throw("Slippage screwed you")
10321032 else if (dP)
10331033 then {
10341034 let ep = invoke(this, "reissueShare", [eo], nil)
10351035 if ((ep == ep))
10361036 then {
10371037 let eq = invoke(V, "lockShareTokensFromPool", [dg.caller.bytes, toString(this), dQ], ([AttachedPayment(ac, eo)] ++ dS))
10381038 if ((eq == eq))
10391039 then (dp :+ IntegerEntry(o, (ad + eo)))
10401040 else throw("Strict value is not equal to itself.")
10411041 }
10421042 else throw("Strict value is not equal to itself.")
10431043 }
10441044 else (dp ++ [Reissue(ac, eo, true), ScriptTransfer(dg.caller, eo, ac), IntegerEntry(o, (ad + eo))])
10451045 }
10461046 }
10471047 }
10481048 }
10491049 }))
10501050
10511051
10521052
10531053 @Callable(dg)
10541054 func calcMintAmount (cT,aE) = {
10551055 let bf = aK()
10561056 let bb = aP()
10571057 let cb = bv(cT, bf)
10581058 if ((ad == 0))
10591059 then $Tuple2(nil, cb)
10601060 else {
10611061 let ca = bv(bb, bf)
10621062 let bX = aC(aE)
10631063 func er (aR,dZ) = {
10641064 let es = aR
10651065 let ee = es._1
10661066 let at = es._2
10671067 let bY = ((fraction(af, bX, ae, CEILING) * am) / (4 * (am - 1)))
10681068 let ef = {
10691069 let eg = fraction(cb, bb[at], ca)
10701070 let eh = if ((eg > dZ))
10711071 then (eg - dZ)
10721072 else (dZ - eg)
10731073 fraction(bY, eh, ae)
10741074 }
10751075 let ej = (dZ - ef)
10761076 $Tuple2((ee :+ ej), (at + 1))
10771077 }
10781078
10791079 let et = {
10801080 let aT = cT
10811081 let aU = size(aT)
10821082 let aV = $Tuple2(nil, 0)
10831083 func aW (aX,aY) = if ((aY >= aU))
10841084 then aX
10851085 else er(aX, aT[aY])
10861086
10871087 func aZ (aX,aY) = if ((aY >= aU))
10881088 then aX
10891089 else throw("List size exceeds 10")
10901090
10911091 aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
10921092 }
10931093 let ee = et._1
10941094 let ec = et._2
10951095 let en = bv(ee, bf)
10961096 let eu = fraction(ad, (en - ca), ca)
10971097 $Tuple2(nil, eu)
10981098 }
10991099 }
11001100
11011101
11021102
11031103 @Callable(dg)
11041104 func reissueShare (ct) = valueOrElse(au(dg), [Reissue(ac, ct, true)])
11051105
11061106
11071107
11081108 @Callable(dg)
11091109 func getDy (ev,ew,ex,ey) = {
11101110 let bb = aP()
11111111 let ez = valueOrErrorMessage(indexOf(al, ev), "unknown token in")
11121112 let eA = valueOrErrorMessage(indexOf(al, ew), "unknown token out")
11131113 let bz = (bb[ez] + ex)
11141114 let bM = bw(ez, eA, bz, bb)
11151115 let cm = ((bb[eA] - bM) - 1)
11161116 let bX = aC(Address(fromBase58String(ey)))
11171117 let bY = fraction(fraction(af, bX, ae, CEILING), cm, ae)
11181118 $Tuple2(nil, $Tuple2((cm - bY), bY))
11191119 }
11201120
11211121
11221122
11231123 @Callable(dg)
11241124 func exchange (du,eB) = valueOrElse(ar(), valueOrElse(aq(), if ((size(dg.payments) != 1))
11251125 then throw("size(payments) != 1")
11261126 else {
11271127 let cM = cI()
11281128 if (cM._1)
11291129 then (cO(cM._2) ++ cP(dg.caller, dg.payments))
11301130 else {
11311131 let cR = dg.payments[0]
11321132 let eC = cn(cR.assetId)
11331133 let dx = fromBase58String(du)
11341134 let ex = cR.amount
11351135 let ez = valueOrErrorMessage(indexOf(al, eC), "unknown token in")
11361136 let eA = valueOrErrorMessage(indexOf(al, du), "unknown token out")
11371137 let bb = aP()
11381138 let bz = (bb[ez] + ex)
11391139 let bM = bw(ez, eA, bz, bb)
11401140 let eD = ((bb[eA] - bM) - 1)
11411141 let bX = aC(dg.originCaller)
11421142 let bY = fraction(eD, fraction(af, bX, ae, CEILING), ae)
11431143 let cm = (eD - bY)
11441144 let dA = fraction(bY, ag, ae)
11451145 if (aA((cm >= eB)))
11461146 then throw("Exchange resulted in fewer coins than expected")
11471147 else {
11481148 func dC (aR,dD) = {
11491149 let eE = aR
11501150 let cT = eE._1
11511151 let at = eE._2
11521152 if ((at == ez))
11531153 then $Tuple2((cT :+ (dD + ex)), (at + 1))
11541154 else if ((at == eA))
11551155 then $Tuple2((cT :+ (dD - eD)), (at + 1))
11561156 else $Tuple2((cT :+ dD), (at + 1))
11571157 }
11581158
11591159 let eF = {
11601160 let aT = bb
11611161 let aU = size(aT)
11621162 let aV = $Tuple2(nil, 0)
11631163 func aW (aX,aY) = if ((aY >= aU))
11641164 then aX
11651165 else dC(aX, aT[aY])
11661166
11671167 func aZ (aX,aY) = if ((aY >= aU))
11681168 then aX
11691169 else throw("List size exceeds 10")
11701170
11711171 aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
11721172 }
11731173 let cT = eF._1
11741174 let at = eF._2
11751175 if (cS(cT))
11761176 then throw()
11771177 else {
11781178 let eq = cr(cR.amount, cn(cR.assetId))
11791179 if ((eq == eq))
11801180 then {
11811181 let dr = cD(eD, du)
11821182 if ((dr == dr))
11831183 then {
11841184 let dH = (bY - dA)
11851185 let dI = if ((dH > 0))
11861186 then invoke(W, "airDrop", nil, [AttachedPayment(dx, dH)])
11871187 else 0
11881188 if ((dI == dI))
11891189 then $Tuple2([IntegerEntry((eC + i), bz), IntegerEntry((du + i), (bb[eA] - eD)), ScriptTransfer(dg.caller, cm, dx), ScriptTransfer(R, dA, dx)], [cm, dx])
11901190 else throw("Strict value is not equal to itself.")
11911191 }
11921192 else throw("Strict value is not equal to itself.")
11931193 }
11941194 else throw("Strict value is not equal to itself.")
11951195 }
11961196 }
11971197 }
11981198 }))
11991199
12001200
12011201
12021202 @Callable(dg)
12031203 func withdraw (dh) = valueOrElse(aq(), df(dg, dh, 0))
12041204
12051205
12061206
12071207 @Callable(dg)
12081208 func withdrawWithUnlock (dh,di) = valueOrElse(aq(), if ((0 >= di))
12091209 then throw("Unlock amount must be positive")
12101210 else {
12111211 let eG = invoke(V, "withdrawShareTokensFromPool", [dg.caller.bytes, toString(this), di], nil)
12121212 if ((eG == eG))
12131213 then df(dg, dh, di)
12141214 else throw("Strict value is not equal to itself.")
12151215 })
12161216
12171217
12181218
12191219 @Callable(dg)
12201220 func calcWithdrawOneCoin (eH,du,aE) = if ((0 >= eH))
12211221 then throw("Amount must be positive")
12221222 else {
12231223 let at = valueOrErrorMessage(indexOf(al, du), "unknown token out")
12241224 $Tuple2(nil, bU(aP(), eH, at, Address(fromBase58String(aE)))._1)
12251225 }
12261226
12271227
12281228
12291229 @Callable(dg)
12301230 func withdrawOneCoin (du,dv) = valueOrElse(ar(), valueOrElse(aq(), if ((size(dg.payments) != 1))
12311231 then throw("size(payments) != 1")
12321232 else dt(dg, du, dv, 0)))
12331233
12341234
12351235
12361236 @Callable(dg)
12371237 func withdrawOneCoinWithUnlock (du,dv,di) = valueOrElse(ar(), valueOrElse(aq(), if ((0 > di))
12381238 then throw("Unlock amount must be positive")
12391239 else {
12401240 let eG = invoke(V, "withdrawShareTokensFromPool", [dg.caller.bytes, toString(this), di], nil)
12411241 if ((eG == eG))
12421242 then dt(dg, du, dv, di)
12431243 else throw("Strict value is not equal to itself.")
12441244 }))
12451245
12461246
12471247
12481248 @Callable(dg)
12491249 func A () = $Tuple2(nil, aK())
12501250
12511251
12521252
12531253 @Callable(dg)
12541254 func getVirtualPrice () = {
12551255 let bs = be(aP(), aK())
12561256 $Tuple2(nil, fraction(bs, a, ad))
12571257 }
12581258
12591259
12601260
12611261 @Callable(dg)
12621262 func calcTokenAmount (eI,eJ) = {
12631263 let bf = aK()
12641264 let eK = aP()
12651265 let ca = bv(eK, bf)
12661266 func eL (aR,dn) = {
12671267 let eM = aR
12681268 let cT = eM._1
12691269 let at = eM._2
12701270 let dZ = (dn + (if (eJ)
12711271 then eI[at]
12721272 else -(eI[at])))
12731273 $Tuple2((cT :+ dZ), (at + 1))
12741274 }
12751275
12761276 let cT = ( let aT = eK
12771277 let aU = size(aT)
12781278 let aV = $Tuple2(nil, 0)
12791279 func aW (aX,aY) = if ((aY >= aU))
12801280 then aX
12811281 else eL(aX, aT[aY])
12821282
12831283 func aZ (aX,aY) = if ((aY >= aU))
12841284 then aX
12851285 else throw("List size exceeds 10")
12861286
12871287 aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10))._1
12881288 let cb = bv(cT, bf)
12891289 let eN = if (eJ)
12901290 then (cb - ca)
12911291 else (ca - cb)
12921292 $Tuple2(nil, fraction(eN, ad, ca))
12931293 }
12941294
12951295
12961296
12971297 @Callable(dg)
12981298 func rampA (eO,eP) = valueOrElse(aq(), valueOrElse(as(dg), if (aA((az >= (aj + e))))
12991299 then throw("too often")
13001300 else if (aA((eP >= (az + e))))
13011301 then throw("insufficient time")
13021302 else {
13031303 let eQ = aK()
13041304 if (aA(if ((eO > 0))
13051305 then (b > eO)
13061306 else false))
13071307 then throw("out of base range")
13081308 else if (aA(if (if ((eO >= eQ))
13091309 then ((eQ * c) >= eO)
13101310 else false)
13111311 then true
13121312 else if ((eQ > eO))
13131313 then ((eO * c) >= eQ)
13141314 else false))
13151315 then throw("out of range")
13161316 else [IntegerEntry("initial_A", eQ), IntegerEntry("future_A", eO), IntegerEntry("initial_A_time", az), IntegerEntry("future_A_time", eP)]
13171317 }))
13181318
13191319
13201320
13211321 @Callable(dg)
13221322 func stopRampA () = valueOrElse(aq(), valueOrElse(as(dg), {
13231323 let eR = aK()
13241324 [IntegerEntry("initial_A", eR), IntegerEntry("future_A", eR), IntegerEntry("initial_A_time", az), IntegerEntry("future_A_time", az)]
13251325 }))
13261326
13271327
13281328
13291329 @Callable(dg)
13301330 func shutdown () = valueOrElse(as(dg), if (!(Z))
13311331 then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, m), "the cause wasn't specified")))
13321332 else an("Paused by admin"))
13331333
13341334
13351335
13361336 @Callable(dg)
13371337 func activate () = valueOrElse(as(dg), if (Z)
13381338 then ap()
13391339 else [BooleanEntry(j, true), DeleteEntry(m)])
13401340
13411341
13421342
13431343 @Callable(dg)
13441344 func takeIntoAccountExtraFunds () = valueOrElse(aq(), {
13451345 let eS = if (containsElement(al, toBase58String(X)))
13461346 then invoke(T, "claimRewards", nil, nil)
13471347 else 0
13481348 if ((eS == eS))
13491349 then if ((dg.caller != R))
13501350 then throw("Only the wallet can call this function")
13511351 else {
13521352 let eK = aP()
13531353 func eT (aR,aS) = {
13541354 let eU = aR
13551355 let eV = eU._1
13561356 let at = eU._2
13571357 let eW = fromBase58String(aS)
13581358 let eX = (assetBalance(this, eW) + cF(eW))
13591359 let eY = (eX - eK[at])
13601360 if ((0 > eY))
13611361 then an(("Enroll amount negative for asset" + aS))
13621362 else {
13631363 let dI = if ((eY > 0))
13641364 then invoke(W, "airDrop", nil, [AttachedPayment(eW, eY)])
13651365 else 0
13661366 if ((dI == dI))
13671367 then $Tuple2((eV + eY), (at + 1))
13681368 else throw("Strict value is not equal to itself.")
13691369 }
13701370 }
13711371
13721372 let ec = {
13731373 let aT = al
13741374 let aU = size(aT)
13751375 let aV = $Tuple2(0, 0)
13761376 func aW (aX,aY) = if ((aY >= aU))
13771377 then aX
13781378 else eT(aX, aT[aY])
13791379
13801380 func aZ (aX,aY) = if ((aY >= aU))
13811381 then aX
13821382 else throw("List size exceeds 10")
13831383
13841384 aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
13851385 }
13861386 if ((ec._1 == 0))
13871387 then throw("No money to take")
13881388 else nil
13891389 }
13901390 else throw("Strict value is not equal to itself.")
13911391 })
13921392
13931393
13941394 @Verifier(eZ)
13951395 func fa () = {
13961396 let fb = {
13971397 let fc = if (sigVerify(eZ.bodyBytes, eZ.proofs[0], N))
13981398 then 1
13991399 else 0
14001400 let fd = if (sigVerify(eZ.bodyBytes, eZ.proofs[1], O))
14011401 then 1
14021402 else 0
14031403 let fe = if (sigVerify(eZ.bodyBytes, eZ.proofs[2], P))
14041404 then 1
14051405 else 0
14061406 (((fc + fd) + fe) >= 2)
14071407 }
14081408 let K = eZ
14091409 if ($isInstanceOf(K, "InvokeScriptTransaction"))
14101410 then {
14111411 let el = K
14121412 let ff = if ((el.dApp == this))
14131413 then (el.function == "takeIntoAccountExtraFunds")
14141414 else false
14151415 let fg = if (if (if (sigVerify(eZ.bodyBytes, eZ.proofs[0], N))
14161416 then true
14171417 else sigVerify(eZ.bodyBytes, eZ.proofs[0], O))
14181418 then true
14191419 else sigVerify(eZ.bodyBytes, eZ.proofs[0], P))
14201420 then true
14211421 else sigVerify(eZ.bodyBytes, eZ.proofs[0], Q)
14221422 if (if (ff)
14231423 then fg
14241424 else false)
14251425 then true
14261426 else fb
14271427 }
14281428 else fb
14291429 }
14301430

github/deemru/w8io/873ac7e 
161.74 ms