tx · 4DFiukmYwHTe1G8UzAn8FbnajE8LfPhkoXJyenxpdBJP

3MxWgDbE9EmjQj8b3LfFwa91FZizptyeQXS:  -0.10000000 Waves

2023.01.24 12:05 [2418837] smart account 3MxWgDbE9EmjQj8b3LfFwa91FZizptyeQXS > SELF 0.00000000 Waves

{ "type": 13, "id": "4DFiukmYwHTe1G8UzAn8FbnajE8LfPhkoXJyenxpdBJP", "fee": 10000000, "feeAssetId": null, "timestamp": 1674551203526, "version": 2, "chainId": 84, "sender": "3MxWgDbE9EmjQj8b3LfFwa91FZizptyeQXS", "senderPublicKey": "C7xgcYqQ8qV8rmvzAjhQWq4cz82F6VJfXMNygvrTXsfW", "proofs": [ "4dt6ioSAsqj9CU9vLWSNJ7sQuVCbXgmGPuiYYSJz1xb95BxqSfqJ2TCvxg4SLUMmVGj2fFKGkNWk394wtaYicWUt", "3ZbLFWnSYrjZzdxG7gJACMJCBeBFHoTi66GM79Gq31B6DtTN3mUAyEAEvU7KMRDeotA2XCKb5z7D14LCNZHtRbkJ" ], "script": "base64:BgJmCAISBAoCEQESBQoDCAEBEgUKAwEEARIECgIRCBIDCgEBEgYKBAgIAQgSBAoCCAESAwoBERIECgIRARIFCgMBCAgSBAoCCAESBQoDCAEBEgASABIECgIRBBIECgIBARIAEgASABIAXwAJUFJFQ0lTSU9OAMCEPQAFTUFYX0EAwIQ9AAxNQVhfQV9DSEFOR0UACgAIREVDSU1BTFMABgANTUlOX1JBTVBfVElNRQkAaQIAgKMFADwAB3ZlcnNpb24CBTMuMC4wAAhrVmVyc2lvbgIHdmVyc2lvbgAHa0Fzc2V0cwIJYXNzZXRfaWRzAA1rQXNzZXRCYWxhbmNlAghfYmFsYW5jZQAHa0FjdGl2ZQIGYWN0aXZlAAtrQWN0aXZlR2xvYgIUYWN0aXZlX2FsbF9jb250cmFjdHMAC2tEZXByZWNhdGVkAgtkZXByZWNhdGVkXwAGa0NhdXNlAg5zaHV0ZG93bl9jYXVzZQANa1NoYXJlQXNzZXRJZAIOc2hhcmVfYXNzZXRfaWQAEWtTaGFyZUFzc2V0U3VwcGx5AhJzaGFyZV9hc3NldF9zdXBwbHkABGtGZWUCCmNvbW1pc3Npb24AEmtEQXBwVGhyZXNob2xkQ29lZgIRZEFwcFRocmVzaG9sZENvZWYADGtVU0ROQWRkcmVzcwIYc3Rha2luZ191c2RubnNidF9hZGRyZXNzAAprRGlzY291bnRzAglkaXNjb3VudHMAD2tEaXNjb3VudFZhbHVlcwIPZGlzY291bnRfdmFsdWVzAA5rVXNlclN3b3BJbkdvdgIMX1NXT1BfYW1vdW50AA9rVXNlckdTd29wSW5Hb3YCDV9HU3dvcF9hbW91bnQADWtBZG1pblB1YktleTECC2FkbWluX3B1Yl8xAA1rQWRtaW5QdWJLZXkyAgthZG1pbl9wdWJfMgANa0FkbWluUHViS2V5MwILYWRtaW5fcHViXzMAEmtBZG1pbkludm9rZVB1YktleQIQYWRtaW5faW52b2tlX3B1YgAQa01vbmV5Qm94QWRkcmVzcwIRbW9uZXlfYm94X2FkZHJlc3MAC2tHb3ZBZGRyZXNzAhJnb3Zlcm5hbmNlX2FkZHJlc3MADmtWb3RpbmdBZGRyZXNzAg52b3RpbmdfYWRkcmVzcwAPa0Zhcm1pbmdBZGRyZXNzAg9mYXJtaW5nX2FkZHJlc3MAEWtMUEZhcm1pbmdBZGRyZXNzAgpscF9mYXJtaW5nAAZvcmFjbGUJAQdBZGRyZXNzAQEaAVRIE5cMwNMzzCUygLYp96dkaICr48x7S5kBE2dldEJhc2U1OEZyb21PcmFjbGUBA2tleQQHJG1hdGNoMAkAnQgCBQZvcmFjbGUFA2tleQMJAAECBQckbWF0Y2gwAgZTdHJpbmcEBnN0cmluZwUHJG1hdGNoMAkA2QQBBQZzdHJpbmcEB25vdGhpbmcFByRtYXRjaDAJAAIBCQCsAgIFA2tleQIIaXMgZW1wdHkADGFkbWluUHViS2V5MQkBE2dldEJhc2U1OEZyb21PcmFjbGUBBQ1rQWRtaW5QdWJLZXkxAAxhZG1pblB1YktleTIJARNnZXRCYXNlNThGcm9tT3JhY2xlAQUNa0FkbWluUHViS2V5MgAMYWRtaW5QdWJLZXkzCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFDWtBZG1pblB1YktleTMAEWFkbWluUHViS2V5SW52b2tlCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFEmtBZG1pbkludm9rZVB1YktleQAPbW9uZXlCb3hBZGRyZXNzCQEHQWRkcmVzcwEJARNnZXRCYXNlNThGcm9tT3JhY2xlAQUQa01vbmV5Qm94QWRkcmVzcwAKZ292QWRkcmVzcwkBB0FkZHJlc3MBCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFC2tHb3ZBZGRyZXNzABJzdGFraW5nVVNETkFkZHJlc3MJAQdBZGRyZXNzAQkBE2dldEJhc2U1OEZyb21PcmFjbGUBBQxrVVNETkFkZHJlc3MADXZvdGluZ0FkZHJlc3MJAQdBZGRyZXNzAQkBE2dldEJhc2U1OEZyb21PcmFjbGUBBQ5rVm90aW5nQWRkcmVzcwAOZmFybWluZ0FkZHJlc3MJAQdBZGRyZXNzAQkBE2dldEJhc2U1OEZyb21PcmFjbGUBBQ9rRmFybWluZ0FkZHJlc3MAEGxwRmFybWluZ0FkZHJlc3MJAQdBZGRyZXNzAQkBE2dldEJhc2U1OEZyb21PcmFjbGUBBRFrTFBGYXJtaW5nQWRkcmVzcwAEVVNETgEgtiYpwwT1zlORpA5LdSQvZIxRsfrfr1QpvUjSHSqyqtEADXN0YWtpbmdBc3NldHMJAMwIAgkA2AQBBQRVU0ROBQNuaWwABmFjdGl2ZQkBEUBleHRyTmF0aXZlKDEwNTEpAgUEdGhpcwUHa0FjdGl2ZQAKYWN0aXZlR2xvYgkBC3ZhbHVlT3JFbHNlAgkAmwgCBQZvcmFjbGUFC2tBY3RpdmVHbG9iBgAOZGVwcmVjYXRlZFBvb2wJAQt2YWx1ZU9yRWxzZQIJAJsIAgUGb3JhY2xlCQCsAgIFC2tEZXByZWNhdGVkCQClCAEFBHRoaXMHAAxzaGFyZUFzc2V0SWQJANkEAQkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwUNa1NoYXJlQXNzZXRJZAALc2hhcmVTdXBwbHkJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMFEWtTaGFyZUFzc2V0U3VwcGx5AAlmZWVTY2FsZTYAwIQ9AANmZWUJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMFBGtGZWUADWZlZUdvdmVybmFuY2UJAGsDACgFCWZlZVNjYWxlNgBkAAlpbml0aWFsX0EJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMCCWluaXRpYWxfQQAIZnV0dXJlX0EJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMCCGZ1dHVyZV9BAA5pbml0aWFsX0FfdGltZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzAg5pbml0aWFsX0FfdGltZQAAAA1mdXR1cmVfQV90aW1lCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMCDWZ1dHVyZV9BX3RpbWUAAAAIYXNzZXRJZHMJALUJAgkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwUHa0Fzc2V0cwIBLAAGbkNvaW5zCQCQAwEFCGFzc2V0SWRzAQdzdXNwZW5kAQVjYXVzZQkAzAgCCQEMQm9vbGVhbkVudHJ5AgUHa0FjdGl2ZQcJAMwIAgkBC1N0cmluZ0VudHJ5AgUGa0NhdXNlBQVjYXVzZQUDbmlsAQ10aHJvd0lzQWN0aXZlAAkAAgECFkRBcHAgaXMgYWxyZWFkeSBhY3RpdmUBCGlzQWN0aXZlAAMDBQZhY3RpdmUFCmFjdGl2ZUdsb2IHBQR1bml0CQACAQIfREFwcCBpcyBpbmFjdGl2ZSBhdCB0aGlzIG1vbWVudAEMaXNEZXByaWNhdGVkAAMJAQEhAQUOZGVwcmVjYXRlZFBvb2wFBHVuaXQJAAIBAjFQb29sIGlzIGRlcHJlY2F0ZWQuIE9ubHkgd2l0aGRyYXcgYWN0aW9uIGFsbG93ZWQuAQtpc0FkbWluQ2FsbAEBaQMJAQ9jb250YWluc0VsZW1lbnQCCQDMCAIFDGFkbWluUHViS2V5MQkAzAgCBQxhZG1pblB1YktleTIJAMwIAgUMYWRtaW5QdWJLZXkzBQNuaWwIBQFpD2NhbGxlclB1YmxpY0tleQUEdW5pdAkAAgECIU9ubHkgYWRtaW4gY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgEKaXNTZWxmQ2FsbAEBaQMJAAACBQR0aGlzCAUBaQZjYWxsZXIFBHVuaXQJAAIBAitPbmx5IGNvbnRyYWN0IGl0c2VsZiBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uAARiaWcyCQC2AgEAAgAGaXRlcjEwCQDMCAIAAAkAzAgCAAEJAMwIAgACCQDMCAIAAwkAzAgCAAQJAMwIAgAFCQDMCAIABgkAzAgCAAcJAMwIAgAICQDMCAIACQUDbmlsAAZpdGVyMTUJAMwIAgAACQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUJAMwIAgAGCQDMCAIABwkAzAgCAAgJAMwIAgAJCQDMCAIACgkAzAgCAAsJAMwIAgAMCQDMCAIADQkAzAgCAA4FA25pbAAGaXRlcjE2CQDMCAIAAAkAzAgCAAEJAMwIAgACCQDMCAIAAwkAzAgCAAQJAMwIAgAFCQDMCAIABgkAzAgCAAcJAMwIAgAICQDMCAIACQkAzAgCAAoJAMwIAgALCQDMCAIADAkAzAgCAA0JAMwIAgAOCQDMCAIADwUDbmlsAA5ibG9ja1RpbWVzdGFtcAUGaGVpZ2h0AQZhc3NlcnQBAWEDBQFhBwYBFGNhbGN1bGF0ZUZlZURpc2NvdW50AQh1c2VyQWRkcgQEdXNlcgQHJG1hdGNoMAUIdXNlckFkZHIDCQABAgUHJG1hdGNoMAIHQWRkcmVzcwQBdQUHJG1hdGNoMAkApQgBBQF1AwkAAQIFByRtYXRjaDACBlN0cmluZwQBdQUHJG1hdGNoMAUBdQkAAgECGFVua25vdyB0eXBlIG9mIHVzZXIgQWRkcgQKc3dvcEFtb3VudAkBC3ZhbHVlT3JFbHNlAgkAmggCBQpnb3ZBZGRyZXNzCQCsAgIFBHVzZXIFD2tVc2VyR1N3b3BJbkdvdgAABAtnU3dvcEFtb3VudAkBC3ZhbHVlT3JFbHNlAgkAmggCBQpnb3ZBZGRyZXNzCQCsAgIFBHVzZXIFD2tVc2VyR1N3b3BJbkdvdgUKc3dvcEFtb3VudAQOZGlzY291bnRWYWx1ZXMJALUJAgkBEUBleHRyTmF0aXZlKDEwNTMpAgUGb3JhY2xlBQ9rRGlzY291bnRWYWx1ZXMCASwECWRpc2NvdW50cwkAtQkCCQERQGV4dHJOYXRpdmUoMTA1MykCBQZvcmFjbGUFCmtEaXNjb3VudHMCASwDAwkAZwIFC2dTd29wQW1vdW50CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUOZGlzY291bnRWYWx1ZXMAAAkAZgIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ5kaXNjb3VudFZhbHVlcwABBQtnU3dvcEFtb3VudAcJAGUCBQlmZWVTY2FsZTYJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQlkaXNjb3VudHMAAAMDCQBnAgULZ1N3b3BBbW91bnQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ5kaXNjb3VudFZhbHVlcwABCQBmAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDmRpc2NvdW50VmFsdWVzAAIFC2dTd29wQW1vdW50BwkAZQIFCWZlZVNjYWxlNgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCWRpc2NvdW50cwABAwMJAGcCBQtnU3dvcEFtb3VudAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDmRpc2NvdW50VmFsdWVzAAIJAGYCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUOZGlzY291bnRWYWx1ZXMAAwULZ1N3b3BBbW91bnQHCQBlAgUJZmVlU2NhbGU2CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUJZGlzY291bnRzAAIDAwkAZwIFC2dTd29wQW1vdW50CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUOZGlzY291bnRWYWx1ZXMAAwkAZgIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ5kaXNjb3VudFZhbHVlcwAE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aWwAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEPeHBfcmVkdWNlZF9wcm9jAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKBAp4cF9yZWR1Y2VkCAUNJHQwMTA0NDExMDUwNQJfMQQFaW5kZXgIBQ0kdDAxMDQ0MTEwNTA1Al8yBAx4cF9yZWR1Y2VkX2kJAJEDAgUKeHBfcmVkdWNlZAUBaQQCZHkJAGUCCQBlAgUMeHBfcmVkdWNlZF9pCQEHZ2V0X3lfRAQFA2FtcAUBaQUKeHBfcmVkdWNlZAUCRDEAAQkAlAoCBQJkeQkAZQIFBGR5XzAFAmR5AQ1nZXRTdHJBc3NldElkAQdhc3NldElkBAckbWF0Y2gwBQdhc3NldElkAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEAmlkBQckbWF0Y2gwCQDYBAEFAmlkAwkAAQIFByRtYXRjaDACBFVuaXQEBXdhdmVzBQckbWF0Y2gwAgVXQVZFUwkAAgECC01hdGNoIGVycm9yARhjYWxjU3Rha2luZ0Z1bmNBbmRBZGRyZXMCBXN0YWtlB2Fzc2V0SWQDBQVzdGFrZQkAlAoCAgxsb2NrTmV1dHJpbm8FEnN0YWtpbmdVU0ROQWRkcmVzcwkAlAoCAg51bmxvY2tOZXV0cmlubwUSc3Rha2luZ1VTRE5BZGRyZXNzARFjYWxjU3Rha2luZ1BhcmFtcwMFc3Rha2UGYW1vdW50B2Fzc2V0SWQDBQVzdGFrZQQNJHQwMTEwNjkxMTEzNQkBGGNhbGNTdGFraW5nRnVuY0FuZEFkZHJlcwIFBXN0YWtlBQdhc3NldElkBARjYWxsCAUNJHQwMTEwNjkxMTEzNQJfMQQLc3Rha2luZ0FkZHIIBQ0kdDAxMTA2OTExMTM1Al8yCQCWCgQFBGNhbGwFC3N0YWtpbmdBZGRyBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFB2Fzc2V0SWQFBmFtb3VudAUDbmlsBA0kdDAxMTIyMTExMjg3CQEYY2FsY1N0YWtpbmdGdW5jQW5kQWRkcmVzAgUFc3Rha2UFB2Fzc2V0SWQEBGNhbGwIBQ0kdDAxMTIyMTExMjg3Al8xBAtzdGFraW5nQWRkcggFDSR0MDExMjIxMTEyODcCXzIJAJYKBAUEY2FsbAULc3Rha2luZ0FkZHIJAMwIAgUGYW1vdW50CQDMCAIJANgEAQUHYXNzZXRJZAUDbmlsBQNuaWwBBXN0YWtlAgZhbW91bnQNYXNzZXRJZFN0cmluZwMJAQ9jb250YWluc0VsZW1lbnQCBQ1zdGFraW5nQXNzZXRzBQ1hc3NldElkU3RyaW5nBA0kdDAxMTQ3NDExNTc2CQERY2FsY1N0YWtpbmdQYXJhbXMDBgUGYW1vdW50CQDZBAEFDWFzc2V0SWRTdHJpbmcEBGNhbGwIBQ0kdDAxMTQ3NDExNTc2Al8xBARhZGRyCAUNJHQwMTE0NzQxMTU3NgJfMgQGcGFyYW1zCAUNJHQwMTE0NzQxMTU3NgJfMwQIcGF5bWVudHMIBQ0kdDAxMTQ3NDExNTc2Al80CQD8BwQFBGFkZHIFBGNhbGwFBnBhcmFtcwUIcGF5bWVudHMAAAEHdW5zdGFrZQIGYW1vdW50DWFzc2V0SWRTdHJpbmcDCQEPY29udGFpbnNFbGVtZW50AgUNc3Rha2luZ0Fzc2V0cwUNYXNzZXRJZFN0cmluZwQNJHQwMTE3NjExMTg2NAkBEWNhbGNTdGFraW5nUGFyYW1zAwcFBmFtb3VudAkA2QQBBQ1hc3NldElkU3RyaW5nBARjYWxsCAUNJHQwMTE3NjExMTg2NAJfMQQEYWRkcggFDSR0MDExNzYxMTE4NjQCXzIEBnBhcmFtcwgFDSR0MDExNzYxMTE4NjQCXzMECHBheW1lbnRzCAUNJHQwMTE3NjExMTg2NAJfNAkA/AcEBQRhZGRyBQRjYWxsBQZwYXJhbXMFCHBheW1lbnRzAAABDHN0YWtlZEFtb3VudAEHYXNzZXRJZAQWc3Rha2VkQW1vdW50Q2FsY3VsYXRlZAQHJG1hdGNoMAUHYXNzZXRJZAMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBANhSWQFByRtYXRjaDADCQAAAgUDYUlkBQRVU0ROCQCaCAIFEnN0YWtpbmdVU0ROQWRkcmVzcwkArAICCQCsAgIJAKwCAgIMcnBkX2JhbGFuY2VfCQDYBAEFA2FJZAIBXwkApQgBBQR0aGlzAAADCQABAgUHJG1hdGNoMAIEVW5pdAAACQACAQILTWF0Y2ggZXJyb3IEByRtYXRjaDAFFnN0YWtlZEFtb3VudENhbGN1bGF0ZWQDCQABAgUHJG1hdGNoMAIDSW50BAFpBQckbWF0Y2gwBQFpAAABD2NoZWNrU3VzcGljaW91cwAEEGNvbnRyYWN0QmFsYW5jZXMJAQNfeHAACgEMY2hlY2tCYWxhbmNlAgNhY2MHYXNzZXRJZAQNJHQwMTI0NzUxMjUwMAUDYWNjBApzdXNwaWNpb3VzCAUNJHQwMTI0NzUxMjUwMAJfMQQBaQgFDSR0MDEyNDc1MTI1MDACXzIDBQpzdXNwaWNpb3VzCQCUCgIFCnN1c3BpY2lvdXMFAWkECGFCYWxhbmNlCQBkAgkA8AcCBQR0aGlzCQDZBAEFB2Fzc2V0SWQJAQxzdGFrZWRBbW91bnQBCQDZBAEFB2Fzc2V0SWQDCQBmAgkAkQMCBRBjb250cmFjdEJhbGFuY2VzBQFpBQhhQmFsYW5jZQkAlAoCBgUBaQkAlAoCBwkAZAIFAWkAAQoAAiRsBQhhc3NldElkcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgcAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEMY2hlY2tCYWxhbmNlAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKARFzdXNwZW5kU3VzcGljaW91cwEBaQkBB3N1c3BlbmQBCQCsAgICHVN1c3BpY2lvdXMgc3RhdGUgd2l0aCBhc3NldDogCQCRAwIFCGFzc2V0SWRzBQFpAQ5yZXR1cm5QYXltZW50cwIGY2FsbGVyCHBheW1lbnRzCgENcGFyc2VQYXltZW50cwIDYWNjB3BheW1lbnQJAM0IAgUDYWNjCQEOU2NyaXB0VHJhbnNmZXIDBQZjYWxsZXIIBQdwYXltZW50BmFtb3VudAgFB3BheW1lbnQHYXNzZXRJZAoAAiRsBQhwYXltZW50cwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQENcGFyc2VQYXltZW50cwIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgESY2hlY2tEQXBwVGhyZXNob2xkAQtuZXdCYWxhbmNlcwQRZEFwcFRocmVzaG9sZENvZWYJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQR0aGlzBRJrREFwcFRocmVzaG9sZENvZWYCGE5vIGRBcHBUaHJlc2hvbGRDb2VmIGtleQQOdGhyZXNob2xkU2NhbGUAkE4ECm1heEJhbGFuY2UJAJYDAQULbmV3QmFsYW5jZXMECm1pbkJhbGFuY2UJAJcDAQULbmV3QmFsYW5jZXMEBXJhdGlvCQBrAwUKbWF4QmFsYW5jZQUOdGhyZXNob2xkU2NhbGUFCm1pbkJhbGFuY2UDCQBmAgUFcmF0aW8JAGgCBRFkQXBwVGhyZXNob2xkQ29lZgUOdGhyZXNob2xkU2NhbGUJAAIBAjhOZXcgYmFsYW5jZSBpbiBhc3NldHMgb2YgdGhlIERBcHAgaXMgbGVzcyB0aGFuIHRocmVzaG9sZAcBCmNoZWNrQ29pbnMBCGFzc2V0SWRzBAVjb2lucwkAtQkCBQhhc3NldElkcwIBLAMJAGYCCQCQAwEFBWNvaW5zAAoJAAIBAiBUbyBtYW55IGNvaW5zLCBtYXggY29pbnMgc2l6ZSAxMAoBCWNoZWNrQ29pbgIFZXJyb3IHYXNzZXRJZAQFYXNzZXQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkA2QQBBQdhc3NldElkCQCsAgICEmZyb21CYXNlNThTdHJpbmc6IAUHYXNzZXRJZAQIZGVjaW1hbHMICQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQUFYXNzZXQJAKwCAgILYXNzZXRJbmZvOiAFB2Fzc2V0SWQIZGVjaW1hbHMDCQECIT0CBQhkZWNpbWFscwUIREVDSU1BTFMJAAIBAg53cm9uZyBkZWNpbWFscwcKAAIkbAUFY29pbnMKAAIkcwkAkAMBBQIkbAoABSRhY2MwBwoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEJY2hlY2tDb2luAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAQxjYWxjV2l0aGRyYXcDA21zZwptaW5BbW91bnRzDHVubG9ja0Ftb3VudAQKc3VzcGljaW91cwkBD2NoZWNrU3VzcGljaW91cwADCAUKc3VzcGljaW91cwJfMQkAzggCCQERc3VzcGVuZFN1c3BpY2lvdXMBCAUKc3VzcGljaW91cwJfMgkBDnJldHVyblBheW1lbnRzAggFA21zZwZjYWxsZXIIBQNtc2cIcGF5bWVudHMECXBtdEFtb3VudAMJAGYCCQCQAwEIBQNtc2cIcGF5bWVudHMAAAMJAQIhPQIJAJADAQgFA21zZwhwYXltZW50cwABCQACAQITc2l6ZShwYXltZW50cykgIT0gMQQKcG10QXNzZXRJZAgJAJEDAggFA21zZwhwYXltZW50cwAAB2Fzc2V0SWQDCQECIT0CBQxzaGFyZUFzc2V0SWQFCnBtdEFzc2V0SWQJAAIBAhV1bmtub3duIHBheW1lbnQgdG9rZW4ICQCRAwIIBQNtc2cIcGF5bWVudHMAAAZhbW91bnQAAAQOd2l0aGRyYXdBbW91bnQJAGQCBQlwbXRBbW91bnQFDHVubG9ja0Ftb3VudAoBEWNhbGNTY3JpcHRBY3Rpb25zAgNhY2MHYmFsYW5jZQQNJHQwMTQ5MTYxNDk0NAUDYWNjBA1zY3JpcHRBY3Rpb25zCAUNJHQwMTQ5MTYxNDk0NAJfMQQBaQgFDSR0MDE0OTE2MTQ5NDQCXzIEB3dBbW91bnQJAGsDBQdiYWxhbmNlBQ53aXRoZHJhd0Ftb3VudAULc2hhcmVTdXBwbHkDCQEGYXNzZXJ0AQkAZwIFB3dBbW91bnQJAJEDAgUKbWluQW1vdW50cwUBaQkAAgECMFdpdGhkcmF3YWwgcmVzdWx0ZWQgaW4gZmV3ZXIgY29pbnMgdGhhbiBleHBlY3RlZAQCdXMJAQd1bnN0YWtlAgUHd0Ftb3VudAkAkQMCBQhhc3NldElkcwUBaQMJAAACBQJ1cwUCdXMJAJQKAgkAzggCBQ1zY3JpcHRBY3Rpb25zCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAJEDAgUIYXNzZXRJZHMFAWkFDWtBc3NldEJhbGFuY2UJAGUCBQdiYWxhbmNlBQd3QW1vdW50CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQNtc2cGY2FsbGVyBQd3QW1vdW50CQDZBAEJAJEDAgUIYXNzZXRJZHMFAWkFA25pbAkAZAIFAWkAAQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgQNJHQwMTU0MzMxNTUwMQoAAiRsCQEDX3hwAAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgUDbmlsAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBEWNhbGNTY3JpcHRBY3Rpb25zAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKBA1zY3JpcHRBY3Rpb25zCAUNJHQwMTU0MzMxNTUwMQJfMQQBaQgFDSR0MDE1NDMzMTU1MDECXzIJAM4IAgUNc2NyaXB0QWN0aW9ucwkAzAgCCQEEQnVybgIFDHNoYXJlQXNzZXRJZAUOd2l0aGRyYXdBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIFEWtTaGFyZUFzc2V0U3VwcGx5CQBlAgULc2hhcmVTdXBwbHkFDndpdGhkcmF3QW1vdW50BQNuaWwBGmNhbGNXaXRoZHJhd09uZUNvaW5FbnRyaWVzBANtc2cIdG9rZW5PdXQJbWluQW1vdW50DHVubG9ja0Ftb3VudAQKc3VzcGljaW91cwkBD2NoZWNrU3VzcGljaW91cwADCAUKc3VzcGljaW91cwJfMQkAzggCCQERc3VzcGVuZFN1c3BpY2lvdXMBCAUKc3VzcGljaW91cwJfMgkBDnJldHVyblBheW1lbnRzAggFA21zZwxvcmlnaW5DYWxsZXIIBQNtc2cIcGF5bWVudHMECXBtdEFtb3VudAMJAGYCCQCQAwEIBQNtc2cIcGF5bWVudHMAAAQKcG10QXNzZXRJZAgJAJEDAggFA21zZwhwYXltZW50cwAAB2Fzc2V0SWQDCQECIT0CBQxzaGFyZUFzc2V0SWQFCnBtdEFzc2V0SWQJAAIBAhV1bmtub3duIHBheW1lbnQgdG9rZW4ICQCRAwIIBQNtc2cIcGF5bWVudHMAAAZhbW91bnQAAAQIb3V0SW5kZXgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAzwgCBQhhc3NldElkcwUIdG9rZW5PdXQCEXVua25vd24gdG9rZW4gb3V0BAt0b2tlbk91dEI1OAkA2QQBBQh0b2tlbk91dAQOd2l0aGRyYXdBbW91bnQJAGQCBQlwbXRBbW91bnQFDHVubG9ja0Ftb3VudAQCeHAJAQNfeHAABA0kdDAxNjM2MzE2NDUwCQEUX2NhbGNXaXRoZHJhd09uZUNvaW4EBQJ4cAUOd2l0aGRyYXdBbW91bnQFCG91dEluZGV4CAUDbXNnDG9yaWdpbkNhbGxlcgQCZHkIBQ0kdDAxNjM2MzE2NDUwAl8xBAZkeV9mZWUIBQ0kdDAxNjM2MzE2NDUwAl8yAwkBBmFzc2VydAEJAGcCBQJkeQUJbWluQW1vdW50CQACAQIYTm90IGVub3VnaCBjb2lucyByZW1vdmVkBA5nb3Zlcm5hbmNlRmVlcwkAawMFBmR5X2ZlZQUNZmVlR292ZXJuYW5jZQUJZmVlU2NhbGU2BApkeV9hbmRfZmVlCQBkAgUCZHkFBmR5X2ZlZQoBD21ha2VOZXdCYWxhbmNlcwIDYWNjDHRva2VuQmFsYW5jZQQNJHQwMTY3MDgxNjczNAUDYWNjBAtuZXdCYWxhbmNlcwgFDSR0MDE2NzA4MTY3MzQCXzEEAWkIBQ0kdDAxNjcwODE2NzM0Al8yAwkAAAIFAWkFCG91dEluZGV4CQCUCgIJAM0IAgULbmV3QmFsYW5jZXMJAGUCBQx0b2tlbkJhbGFuY2UFCmR5X2FuZF9mZWUJAGQCBQFpAAEJAJQKAgkAzQgCBQtuZXdCYWxhbmNlcwUMdG9rZW5CYWxhbmNlCQBkAgUBaQABBA0kdDAxNjkwMTE2OTYyCgACJGwFAnhwCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCBQNuaWwAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEPbWFrZU5ld0JhbGFuY2VzAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKBAtuZXdCYWxhbmNlcwgFDSR0MDE2OTAxMTY5NjICXzEEAXYIBQ0kdDAxNjkwMTE2OTYyAl8yAwkBEmNoZWNrREFwcFRocmVzaG9sZAEFC25ld0JhbGFuY2VzCQEFdGhyb3cABAJ1cwkBB3Vuc3Rha2UCBQpkeV9hbmRfZmVlBQh0b2tlbk91dAMJAAACBQJ1cwUCdXMEBmxwRmVlcwkAZQIFBmR5X2ZlZQUOZ292ZXJuYW5jZUZlZXMEB2FpcmRyb3ADCQBmAgUGbHBGZWVzAAAJAPwHBAUQbHBGYXJtaW5nQWRkcmVzcwIHYWlyRHJvcAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQt0b2tlbk91dEI1OAUGbHBGZWVzBQNuaWwAAAMJAAACBQdhaXJkcm9wBQdhaXJkcm9wCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQNtc2cMb3JpZ2luQ2FsbGVyBQJkeQULdG9rZW5PdXRCNTgJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkAkQMCBQhhc3NldElkcwUIb3V0SW5kZXgFDWtBc3NldEJhbGFuY2UJAGUCCQCRAwIFAnhwBQhvdXRJbmRleAUKZHlfYW5kX2ZlZQkAzAgCCQEEQnVybgIFDHNoYXJlQXNzZXRJZAUOd2l0aGRyYXdBbW91bnQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUPbW9uZXlCb3hBZGRyZXNzBQ5nb3Zlcm5hbmNlRmVlcwULdG9rZW5PdXRCNTgJAMwIAgkBDEludGVnZXJFbnRyeQIFEWtTaGFyZUFzc2V0U3VwcGx5CQBlAgULc2hhcmVTdXBwbHkFDndpdGhkcmF3QW1vdW50BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4UA21zZwEBRAICeHADYW1wBAFECQEOZ2V0X0RfaW50ZXJuYWwCBQJ4cAUDYW1wCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQICAUQFAUQFA25pbAUBRANtc2cBBGluaXQDCGFzc2V0SWRzAl9BEl9kQXBwVGhyZXNob2xkQ29lZgMJAQEhAQkAnggBBQR0aGlzCQACAQITQWxyZWFkeSBpbml0aWFsaXplZAMJAGcCAAAFAl9BCQACAQIUQW1wIG11c3QgYmUgbXVzdCA+IDADCQBnAgAABRJfZEFwcFRocmVzaG9sZENvZWYJAAIBAh9kQXBwIFRocmVzaG9sZCBDb2VmIG11c3QgYmUgPiAwBAlzaGFyZU5hbWUCC3NfTXVsdGlfVVNEBBBzaGFyZURlc2NyaXB0aW9uCQCsAgICQlNoYXJlVG9rZW4gb2YgU3dvcEZpIHByb3RvY29sIGZvciBNdWx0aVN0YWJsZSBVU0QgcG9vbCBhdCBhZGRyZXNzIAkApQgBBQR0aGlzBAppc3N1ZVRva2VuCQDCCAUFCXNoYXJlTmFtZQUQc2hhcmVEZXNjcmlwdGlvbgAAAAYGBAd0b2tlbklkCQC4CAEFCmlzc3VlVG9rZW4DCQEKY2hlY2tDb2lucwEFCGFzc2V0SWRzCQEFdGhyb3cACQDMCAIJAQtTdHJpbmdFbnRyeQIFCGtWZXJzaW9uBQd2ZXJzaW9uCQDMCAIJAQtTdHJpbmdFbnRyeQIFB2tBc3NldHMFCGFzc2V0SWRzCQDMCAIJAQxJbnRlZ2VyRW50cnkCAglpbml0aWFsX0EFAl9BCQDMCAIJAQxJbnRlZ2VyRW50cnkCAghmdXR1cmVfQQUCX0EJAMwIAgkBDEludGVnZXJFbnRyeQIFBGtGZWUJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBm9yYWNsZQINYmFzZV9mZWVfZmxhdAkAzAgCCQELU3RyaW5nRW50cnkCBQ1rU2hhcmVBc3NldElkCQDYBAEFB3Rva2VuSWQJAMwIAgkBDEludGVnZXJFbnRyeQIFEWtTaGFyZUFzc2V0U3VwcGx5AAAJAMwIAgkBDEludGVnZXJFbnRyeQIFEmtEQXBwVGhyZXNob2xkQ29lZgUSX2RBcHBUaHJlc2hvbGRDb2VmCQDMCAIJAQxCb29sZWFuRW50cnkCBQdrQWN0aXZlBgkAzAgCBQppc3N1ZVRva2VuBQNuaWwDbXNnAQxhZGRMaXF1aWRpdHkDDW1pbk1pbnRBbW91bnQMc3Rha2VGYXJtaW5nCGxvY2tUeXBlCQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUACQELdmFsdWVPckVsc2UCCQEMaXNEZXByaWNhdGVkAAQDYW1wCQECX0EABAJ4cAkBA194cAAEAkQwAwkAAAIFC3NoYXJlU3VwcGx5AAAAAAkBB2dldERNZW0CBQJ4cAUDYW1wBA0kdDAxOTEzMTE5Mzg1AwMJAGYCBQhsb2NrVHlwZQAACQAAAggJAJEDAggFA21zZwhwYXltZW50cwkAZQIJAJADAQgFA21zZwhwYXltZW50cwABB2Fzc2V0SWQFBHVuaXQHCQCUCgIJANEIAggFA21zZwhwYXltZW50cwkAZQIJAJADAQgFA21zZwhwYXltZW50cwABCQDMCAIJAJEDAggFA21zZwhwYXltZW50cwkAZQIJAJADAQgFA21zZwhwYXltZW50cwABBQNuaWwJAJQKAggFA21zZwhwYXltZW50cwUDbmlsBAhwYXltZW50cwgFDSR0MDE5MTMxMTkzODUCXzEEB2xvY2tGZWUIBQ0kdDAxOTEzMTE5Mzg1Al8yBAxwYXltZW50c1NpemUJAJADAQUIcGF5bWVudHMKAQ12YWxpZFBheW1lbnRzAQFuAwkAZgIFDHBheW1lbnRzU2l6ZQUGbkNvaW5zCQACAQkArAICAhBwYXltZW50cyBzaXplID4gCQCkAwEFBm5Db2lucwMJAGYCAAEFDHBheW1lbnRzU2l6ZQkAAgECEXBheW1lbnRzIHNpemUgPCAxAwMJAAACBQtzaGFyZVN1cHBseQAACQECIT0CBQZuQ29pbnMFDHBheW1lbnRzU2l6ZQcJAAIBAiJpbml0aWFsIGRlcG9zaXQgcmVxdWlyZXMgYWxsIGNvaW5zCgEMcGF5bWFudFZhbGlkAgNhY2MHcGF5bWVudAMJAQ9jb250YWluc0VsZW1lbnQCBQhhc3NldElkcwkBDWdldFN0ckFzc2V0SWQBCAUHcGF5bWVudAdhc3NldElkBgkAAgECGEludmFsaWQgYXNzZXQgaW4gcGF5bWVudAoAAiRsBQhwYXltZW50cwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAHCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQxwYXltYW50VmFsaWQCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoDCQEBIQEJAQ12YWxpZFBheW1lbnRzAQUMcGF5bWVudHNTaXplCQEFdGhyb3cABApzdXNwaWNpb3VzCQEPY2hlY2tTdXNwaWNpb3VzAAMIBQpzdXNwaWNpb3VzAl8xCQDOCAIJARFzdXNwZW5kU3VzcGljaW91cwEIBQpzdXNwaWNpb3VzAl8yCQEOcmV0dXJuUGF5bWVudHMCCAUDbXNnBmNhbGxlcgUIcGF5bWVudHMKAQ1wYXJzZVBheW1lbnRzAgNhY2MHYXNzZXRJZAQNJHQwMjAyNTUyMDI4MQUDYWNjBAtuZXdCYWxhbmNlcwgFDSR0MDIwMjU1MjAyODECXzEEAWkIBQ0kdDAyMDI1NTIwMjgxAl8yCgEMcGFyc2VQYXltZW50AgpuZXdCYWxhbmNlB3BheW1lbnQDCQAAAgkBDWdldFN0ckFzc2V0SWQBCAUHcGF5bWVudAdhc3NldElkBQdhc3NldElkCQBkAgUKbmV3QmFsYW5jZQgFB3BheW1lbnQGYW1vdW50BQpuZXdCYWxhbmNlBAluZXdCYWxhY2UKAAIkbAUIcGF5bWVudHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCRAwIFAnhwBQFpCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQxwYXJzZVBheW1lbnQCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoJAJQKAgkAzQgCBQtuZXdCYWxhbmNlcwUJbmV3QmFsYWNlCQBkAgUBaQABBA0kdDAyMDYzMTIwNjk4CgACJGwFCGFzc2V0SWRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCBQNuaWwAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQENcGFyc2VQYXltZW50cwIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgQLbmV3QmFsYW5jZXMIBQ0kdDAyMDYzMTIwNjk4Al8xBAFrCAUNJHQwMjA2MzEyMDY5OAJfMgMJARJjaGVja0RBcHBUaHJlc2hvbGQBBQtuZXdCYWxhbmNlcwkBBXRocm93AAQCRDEJAQdnZXRETWVtAgULbmV3QmFsYW5jZXMFA2FtcAMJAQZhc3NlcnQBCQBmAgUCRDEFAkQwCQACAQIHRDEgPiBEMAQLZmVlRGlzY291bnQJARRjYWxjdWxhdGVGZWVEaXNjb3VudAEIBQNtc2cGY2FsbGVyCgERY2FsY1NjcmlwdEFjdGlvbnMCA2FjYwpuZXdCYWxhbmNlBA0kdDAyMTAxODIxMDU5BQNhY2MEC2ludkJhbGFuY2VzCAUNJHQwMjEwMTgyMTA1OQJfMQQNc2NyaXB0QWN0aW9ucwgFDSR0MDIxMDE4MjEwNTkCXzIEAWkIBQ0kdDAyMTAxODIxMDU5Al8zAwkAZgIFC3NoYXJlU3VwcGx5AAAEBF9mZWUJAGkCCQBoAgkAbgQFA2ZlZQULZmVlRGlzY291bnQFCWZlZVNjYWxlNgUHQ0VJTElORwUGbkNvaW5zCQBoAgAECQBlAgUGbkNvaW5zAAEEBGZlZXMEDGlkZWFsQmFsYW5jZQkAawMFAkQxCQCRAwIFAnhwBQFpBQJEMAQKZGlmZmVyZW5jZQMJAGYCBQxpZGVhbEJhbGFuY2UFCm5ld0JhbGFuY2UJAGUCBQxpZGVhbEJhbGFuY2UFCm5ld0JhbGFuY2UJAGUCBQpuZXdCYWxhbmNlBQxpZGVhbEJhbGFuY2UJAGsDBQRfZmVlBQpkaWZmZXJlbmNlBQlmZWVTY2FsZTYEDmdvdmVybmFuY2VGZWVzCQBrAwUEZmVlcwUNZmVlR292ZXJuYW5jZQUJZmVlU2NhbGU2BAxmaW5hbEJhbGFuY2UJAGUCBQpuZXdCYWxhbmNlBQRmZWVzBBBpbnZhcmlhbnRCYWxhbmNlCQBlAgUKbmV3QmFsYW5jZQUEZmVlcwQDcG10CQBlAgUKbmV3QmFsYW5jZQkAkQMCBQJ4cAUBaQQGbHBGZWVzCQBlAgUEZmVlcwUOZ292ZXJuYW5jZUZlZXMEA2ludgMJAGYCBQNwbXQAAAkBBXN0YWtlAgkAZQIFA3BtdAUEZmVlcwkAkQMCBQhhc3NldElkcwUBaQkBB3Vuc3Rha2UCBQRmZWVzCQCRAwIFCGFzc2V0SWRzBQFpAwkAAAIFA2ludgUDaW52BAdhaXJkcm9wAwkAZgIFBmxwRmVlcwAACQD8BwQFEGxwRmFybWluZ0FkZHJlc3MCB2FpckRyb3AFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkA2QQBCQCRAwIFCGFzc2V0SWRzBQFpBQZscEZlZXMFA25pbAAAAwkAAAIFB2FpcmRyb3AFB2FpcmRyb3AJAJUKAwkAzQgCBQtpbnZCYWxhbmNlcwUQaW52YXJpYW50QmFsYW5jZQkAzggCBQ1zY3JpcHRBY3Rpb25zCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFD21vbmV5Qm94QWRkcmVzcwUOZ292ZXJuYW5jZUZlZXMJANkEAQkAkQMCBQhhc3NldElkcwUBaQkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCRAwIFCGFzc2V0SWRzBQFpBQ1rQXNzZXRCYWxhbmNlBQxmaW5hbEJhbGFuY2UFA25pbAkAZAIFAWkAAQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgQDaW52CQEFc3Rha2UCBQpuZXdCYWxhbmNlCQCRAwIFCGFzc2V0SWRzBQFpAwkAAAIFA2ludgUDaW52CQCVCgMJAM0IAgULaW52QmFsYW5jZXMFCm5ld0JhbGFuY2UJAM0IAgUNc2NyaXB0QWN0aW9ucwkBDEludGVnZXJFbnRyeQIJAKwCAgkAkQMCBQhhc3NldElkcwUBaQUNa0Fzc2V0QmFsYW5jZQUKbmV3QmFsYW5jZQkAZAIFAWkAAQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgQNJHQwMjI3NjQyMjg1MgoAAiRsBQtuZXdCYWxhbmNlcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJUKAwUDbmlsBQNuaWwAAAoBBSRmMV8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQERY2FsY1NjcmlwdEFjdGlvbnMCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjFfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEwCQEFJGYxXzICCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoEC2ludkJhbGFuY2VzCAUNJHQwMjI3NjQyMjg1MgJfMQQNc2NyaXB0QWN0aW9ucwgFDSR0MDIyNzY0MjI4NTICXzIEAkQyCQEHZ2V0RE1lbQIFC2ludkJhbGFuY2VzBQNhbXAEC21pbnRfYW1vdW50AwkAAAIFC3NoYXJlU3VwcGx5AAAFAkQxCQBrAwULc2hhcmVTdXBwbHkJAGUCBQJEMgUCRDAFAkQwAwkBBmFzc2VydAEJAGcCBQttaW50X2Ftb3VudAUNbWluTWludEFtb3VudAkAAgECFFNsaXBwYWdlIHNjcmV3ZWQgeW91AwUMc3Rha2VGYXJtaW5nBAJyZQkA/AcEBQR0aGlzAgxyZWlzc3VlU2hhcmUJAMwIAgULbWludF9hbW91bnQFA25pbAUDbmlsAwkAAAIFAnJlBQJyZQQBcwkA/AcEBQ5mYXJtaW5nQWRkcmVzcwIXbG9ja1NoYXJlVG9rZW5zRnJvbVBvb2wJAMwIAggIBQNtc2cGY2FsbGVyBWJ5dGVzCQDMCAIJAKUIAQUEdGhpcwkAzAgCBQhsb2NrVHlwZQUDbmlsCQDOCAIJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFDHNoYXJlQXNzZXRJZAULbWludF9hbW91bnQFA25pbAUHbG9ja0ZlZQMJAAACBQFzBQFzCQDNCAIFDXNjcmlwdEFjdGlvbnMJAQxJbnRlZ2VyRW50cnkCBRFrU2hhcmVBc3NldFN1cHBseQkAZAIFC3NoYXJlU3VwcGx5BQttaW50X2Ftb3VudAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAzggCBQ1zY3JpcHRBY3Rpb25zCQDMCAIJAQdSZWlzc3VlAwUMc2hhcmVBc3NldElkBQttaW50X2Ftb3VudAYJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFA21zZwZjYWxsZXIFC21pbnRfYW1vdW50BQxzaGFyZUFzc2V0SWQJAMwIAgkBDEludGVnZXJFbnRyeQIFEWtTaGFyZUFzc2V0U3VwcGx5CQBkAgULc2hhcmVTdXBwbHkFC21pbnRfYW1vdW50BQNuaWwDbXNnAQ5jYWxjTWludEFtb3VudAILbmV3QmFsYW5jZXMEdXNlcgQDYW1wCQECX0EABAJ4cAkBA194cAAEAkQxCQEHZ2V0RE1lbQIFC25ld0JhbGFuY2VzBQNhbXADCQAAAgULc2hhcmVTdXBwbHkAAAkAlAoCBQNuaWwFAkQxBAJEMAkBB2dldERNZW0CBQJ4cAUDYW1wBAtmZWVEaXNjb3VudAkBFGNhbGN1bGF0ZUZlZURpc2NvdW50AQUEdXNlcgoBD2NhbGNJbnZCYWxhbmNlcwIDYWNjCm5ld0JhbGFuY2UEDSR0MDI0MTMwMjQxNTYFA2FjYwQLaW52QmFsYW5jZXMIBQ0kdDAyNDEzMDI0MTU2Al8xBAFpCAUNJHQwMjQxMzAyNDE1NgJfMgQEX2ZlZQkAaQIJAGgCCQBuBAUDZmVlBQtmZWVEaXNjb3VudAUJZmVlU2NhbGU2BQdDRUlMSU5HBQZuQ29pbnMJAGgCAAQJAGUCBQZuQ29pbnMAAQQEZmVlcwQMaWRlYWxCYWxhbmNlCQBrAwUCRDEJAJEDAgUCeHAFAWkFAkQwBApkaWZmZXJlbmNlAwkAZgIFDGlkZWFsQmFsYW5jZQUKbmV3QmFsYW5jZQkAZQIFDGlkZWFsQmFsYW5jZQUKbmV3QmFsYW5jZQkAZQIFCm5ld0JhbGFuY2UFDGlkZWFsQmFsYW5jZQkAawMFBF9mZWUFCmRpZmZlcmVuY2UFCWZlZVNjYWxlNgQQaW52YXJpYW50QmFsYW5jZQkAZQIFCm5ld0JhbGFuY2UFBGZlZXMJAJQKAgkAzQgCBQtpbnZCYWxhbmNlcwUQaW52YXJpYW50QmFsYW5jZQkAZAIFAWkAAQQNJHQwMjQ3NTgyNDgyOAoAAiRsBQtuZXdCYWxhbmNlcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgUDbmlsAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBD2NhbGNJbnZCYWxhbmNlcwIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgQLaW52QmFsYW5jZXMIBQ0kdDAyNDc1ODI0ODI4Al8xBAFrCAUNJHQwMjQ3NTgyNDgyOAJfMgQCRDIJAQdnZXRETWVtAgULaW52QmFsYW5jZXMFA2FtcAQKbWludEFtb3VudAkAawMFC3NoYXJlU3VwcGx5CQBlAgUCRDIFAkQwBQJEMAkAlAoCBQNuaWwFCm1pbnRBbW91bnQDbXNnAQxyZWlzc3VlU2hhcmUBBmFtb3VudAkBC3ZhbHVlT3JFbHNlAgkBCmlzU2VsZkNhbGwBBQNtc2cJAMwIAgkBB1JlaXNzdWUDBQxzaGFyZUFzc2V0SWQFBmFtb3VudAYFA25pbANtc2cBBWdldER5BAlhc3NldEZyb20HYXNzZXRUbwJkeAt1c2VyQWRkcmVzcwQCeHAJAQNfeHAABAlmcm9tSW5kZXgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAzwgCBQhhc3NldElkcwUJYXNzZXRGcm9tAhB1bmtub3duIHRva2VuIGluBAd0b0luZGV4CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAM8IAgUIYXNzZXRJZHMFB2Fzc2V0VG8CEXVua25vd24gdG9rZW4gb3V0BAF4CQBkAgkAkQMCBQJ4cAUJZnJvbUluZGV4BQJkeAQBeQkBBGdldFkEBQlmcm9tSW5kZXgFB3RvSW5kZXgFAXgFAnhwBAJkeQkAZQIJAGUCCQCRAwIFAnhwBQd0b0luZGV4BQF5AAEEC2ZlZURpc2NvdW50CQEUY2FsY3VsYXRlRmVlRGlzY291bnQBCQEHQWRkcmVzcwEJANkEAQULdXNlckFkZHJlc3MEBF9mZWUJAGsDCQBuBAUDZmVlBQtmZWVEaXNjb3VudAUJZmVlU2NhbGU2BQdDRUlMSU5HBQJkeQUJZmVlU2NhbGU2CQCUCgIFA25pbAkAlAoCCQBlAgUCZHkFBF9mZWUFBF9mZWUDbXNnAQhleGNoYW5nZQIIdG9rZW5PdXQGbWluX2R5CQELdmFsdWVPckVsc2UCCQEMaXNEZXByaWNhdGVkAAkBC3ZhbHVlT3JFbHNlAgkBCGlzQWN0aXZlAAMJAQIhPQIJAJADAQgFA21zZwhwYXltZW50cwABCQACAQITc2l6ZShwYXltZW50cykgIT0gMQQKc3VzcGljaW91cwkBD2NoZWNrU3VzcGljaW91cwADCAUKc3VzcGljaW91cwJfMQkAzggCCQERc3VzcGVuZFN1c3BpY2lvdXMBCAUKc3VzcGljaW91cwJfMgkBDnJldHVyblBheW1lbnRzAggFA21zZwZjYWxsZXIIBQNtc2cIcGF5bWVudHMEB3BheW1lbnQJAJEDAggFA21zZwhwYXltZW50cwAABAd0b2tlbkluCQENZ2V0U3RyQXNzZXRJZAEIBQdwYXltZW50B2Fzc2V0SWQEC3Rva2VuT3V0QjU4CQDZBAEFCHRva2VuT3V0BAJkeAgFB3BheW1lbnQGYW1vdW50BAlmcm9tSW5kZXgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAzwgCBQhhc3NldElkcwUHdG9rZW5JbgIQdW5rbm93biB0b2tlbiBpbgQHdG9JbmRleAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDPCAIFCGFzc2V0SWRzBQh0b2tlbk91dAIRdW5rbm93biB0b2tlbiBvdXQEAnhwCQEDX3hwAAQBeAkAZAIJAJEDAgUCeHAFCWZyb21JbmRleAUCZHgEAXkJAQRnZXRZBAUJZnJvbUluZGV4BQd0b0luZGV4BQF4BQJ4cAQDX2R5CQBlAgkAZQIJAJEDAgUCeHAFB3RvSW5kZXgFAXkAAQQLZmVlRGlzY291bnQJARRjYWxjdWxhdGVGZWVEaXNjb3VudAEIBQNtc2cMb3JpZ2luQ2FsbGVyBARfZmVlCQBrAwUDX2R5CQBuBAUDZmVlBQtmZWVEaXNjb3VudAUJZmVlU2NhbGU2BQdDRUlMSU5HBQlmZWVTY2FsZTYEAmR5CQBlAgUDX2R5BQRfZmVlBA5nb3Zlcm5hbmNlRmVlcwkAawMFBF9mZWUFDWZlZUdvdmVybmFuY2UFCWZlZVNjYWxlNgMJAQZhc3NlcnQBCQBnAgUCZHkFBm1pbl9keQkAAgECLkV4Y2hhbmdlIHJlc3VsdGVkIGluIGZld2VyIGNvaW5zIHRoYW4gZXhwZWN0ZWQKAQ9tYWtlTmV3QmFsYW5jZXMCA2FjYwx0b2tlbkJhbGFuY2UEDSR0MDI2OTk4MjcwMjQFA2FjYwQLbmV3QmFsYW5jZXMIBQ0kdDAyNjk5ODI3MDI0Al8xBAFpCAUNJHQwMjY5OTgyNzAyNAJfMgMJAAACBQFpBQlmcm9tSW5kZXgJAJQKAgkAzQgCBQtuZXdCYWxhbmNlcwkAZAIFDHRva2VuQmFsYW5jZQUCZHgJAGQCBQFpAAEDCQAAAgUBaQUHdG9JbmRleAkAlAoCCQDNCAIFC25ld0JhbGFuY2VzCQBlAgUMdG9rZW5CYWxhbmNlBQNfZHkJAGQCBQFpAAEJAJQKAgkAzQgCBQtuZXdCYWxhbmNlcwUMdG9rZW5CYWxhbmNlCQBkAgUBaQABBA0kdDAyNzMwNzI3MzY4CgACJGwFAnhwCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCBQNuaWwAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEPbWFrZU5ld0JhbGFuY2VzAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKBAtuZXdCYWxhbmNlcwgFDSR0MDI3MzA3MjczNjgCXzEEAWkIBQ0kdDAyNzMwNzI3MzY4Al8yAwkBEmNoZWNrREFwcFRocmVzaG9sZAEFC25ld0JhbGFuY2VzCQEFdGhyb3cABAFzCQEFc3Rha2UCCAUHcGF5bWVudAZhbW91bnQJAQ1nZXRTdHJBc3NldElkAQgFB3BheW1lbnQHYXNzZXRJZAMJAAACBQFzBQFzBAJ1cwkBB3Vuc3Rha2UCBQNfZHkFCHRva2VuT3V0AwkAAAIFAnVzBQJ1cwQGbHBGZWVzCQBlAgUEX2ZlZQUOZ292ZXJuYW5jZUZlZXMEB2FpcmRyb3ADCQBmAgUGbHBGZWVzAAAJAPwHBAUQbHBGYXJtaW5nQWRkcmVzcwIHYWlyRHJvcAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQt0b2tlbk91dEI1OAUGbHBGZWVzBQNuaWwAAAMJAAACBQdhaXJkcm9wBQdhaXJkcm9wCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUHdG9rZW5JbgUNa0Fzc2V0QmFsYW5jZQUBeAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQh0b2tlbk91dAUNa0Fzc2V0QmFsYW5jZQkAZQIJAJEDAgUCeHAFB3RvSW5kZXgFA19keQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUDbXNnBmNhbGxlcgUCZHkFC3Rva2VuT3V0QjU4CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFD21vbmV5Qm94QWRkcmVzcwUOZ292ZXJuYW5jZUZlZXMFC3Rva2VuT3V0QjU4BQNuaWwJAMwIAgUCZHkJAMwIAgULdG9rZW5PdXRCNTgFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgNtc2cBCHdpdGhkcmF3AQptaW5BbW91bnRzCQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUACQEMY2FsY1dpdGhkcmF3AwUDbXNnBQptaW5BbW91bnRzAAADbXNnARJ3aXRoZHJhd1dpdGhVbmxvY2sCCm1pbkFtb3VudHMMdW5sb2NrQW1vdW50CQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUAAwkAZwIAAAUMdW5sb2NrQW1vdW50CQACAQIeVW5sb2NrIGFtb3VudCBtdXN0IGJlIHBvc2l0aXZlBAZ1bmxvY2sJAPwHBAUOZmFybWluZ0FkZHJlc3MCG3dpdGhkcmF3U2hhcmVUb2tlbnNGcm9tUG9vbAkAzAgCCAgFA21zZwZjYWxsZXIFYnl0ZXMJAMwIAgkApQgBBQR0aGlzCQDMCAIFDHVubG9ja0Ftb3VudAUDbmlsBQNuaWwDCQAAAgUGdW5sb2NrBQZ1bmxvY2sJAQxjYWxjV2l0aGRyYXcDBQNtc2cFCm1pbkFtb3VudHMFDHVubG9ja0Ftb3VudAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgNtc2cBE2NhbGNXaXRoZHJhd09uZUNvaW4DC3Rva2VuQW1vdW50CHRva2VuT3V0BHVzZXIDCQBnAgAABQt0b2tlbkFtb3VudAkAAgECF0Ftb3VudCBtdXN0IGJlIHBvc2l0aXZlBAFpCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAM8IAgUIYXNzZXRJZHMFCHRva2VuT3V0AhF1bmtub3duIHRva2VuIG91dAkAlAoCBQNuaWwICQEUX2NhbGNXaXRoZHJhd09uZUNvaW4ECQEDX3hwAAULdG9rZW5BbW91bnQFAWkJAQdBZGRyZXNzAQkA2QQBBQR1c2VyAl8xA21zZwEPd2l0aGRyYXdPbmVDb2luAgh0b2tlbk91dAltaW5BbW91bnQJAQt2YWx1ZU9yRWxzZQIJAQxpc0RlcHJpY2F0ZWQACQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUAAwkBAiE9AgkAkAMBCAUDbXNnCHBheW1lbnRzAAEJAAIBAhNzaXplKHBheW1lbnRzKSAhPSAxCQEaY2FsY1dpdGhkcmF3T25lQ29pbkVudHJpZXMEBQNtc2cFCHRva2VuT3V0BQltaW5BbW91bnQAAANtc2cBGXdpdGhkcmF3T25lQ29pbldpdGhVbmxvY2sDCHRva2VuT3V0CW1pbkFtb3VudAx1bmxvY2tBbW91bnQJAQt2YWx1ZU9yRWxzZQIJAQxpc0RlcHJpY2F0ZWQACQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUAAwkAZgIAAAUMdW5sb2NrQW1vdW50CQACAQIeVW5sb2NrIGFtb3VudCBtdXN0IGJlIHBvc2l0aXZlBAZ1bmxvY2sJAPwHBAUOZmFybWluZ0FkZHJlc3MCG3dpdGhkcmF3U2hhcmVUb2tlbnNGcm9tUG9vbAkAzAgCCAgFA21zZwZjYWxsZXIFYnl0ZXMJAMwIAgkApQgBBQR0aGlzCQDMCAIFDHVubG9ja0Ftb3VudAUDbmlsBQNuaWwDCQAAAgUGdW5sb2NrBQZ1bmxvY2sJARpjYWxjV2l0aGRyYXdPbmVDb2luRW50cmllcwQFA21zZwUIdG9rZW5PdXQFCW1pbkFtb3VudAUMdW5sb2NrQW1vdW50CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuA21zZwEBQQAJAJQKAgUDbmlsCQECX0EAA21zZwEPZ2V0VmlydHVhbFByaWNlAAQBRAkBBWdldF9EAgkBA194cAAJAQJfQQAJAJQKAgUDbmlsCQBrAwUBRAUJUFJFQ0lTSU9OBQtzaGFyZVN1cHBseQNtc2cBD2NhbGNUb2tlbkFtb3VudAIHYW1vdW50cwdkZXBvc2l0BANhbXAJAQJfQQAECGJhbGFuY2VzCQEDX3hwAAQCRDAJAQdnZXRETWVtAgUIYmFsYW5jZXMFA2FtcAoBD2NhbGNOZXdCYWxhbmNlcwIDYWNjB2JhbGFuY2UEDSR0MDMwMTU4MzAxODQFA2FjYwQLbmV3QmFsYW5jZXMIBQ0kdDAzMDE1ODMwMTg0Al8xBAFpCAUNJHQwMzAxNTgzMDE4NAJfMgQKbmV3QmFsYW5jZQkAZAIFB2JhbGFuY2UDBQdkZXBvc2l0CQCRAwIFB2Ftb3VudHMFAWkJAQEtAQkAkQMCBQdhbW91bnRzBQFpCQCUCgIJAM0IAgULbmV3QmFsYW5jZXMFCm5ld0JhbGFuY2UJAGQCBQFpAAEEC25ld0JhbGFuY2VzCAoAAiRsBQhiYWxhbmNlcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgUDbmlsAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBD2NhbGNOZXdCYWxhbmNlcwIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgJfMQQCRDEJAQdnZXRETWVtAgULbmV3QmFsYW5jZXMFA2FtcAQEZGlmZgMFB2RlcG9zaXQJAGUCBQJEMQUCRDAJAGUCBQJEMAUCRDEJAJQKAgUDbmlsCQBrAwUEZGlmZgULc2hhcmVTdXBwbHkFAkQwA21zZwEFcmFtcEECCF9mdXR1cmVBC19mdXR1cmVUaW1lCQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUACQELdmFsdWVPckVsc2UCCQELaXNBZG1pbkNhbGwBBQNtc2cDCQEGYXNzZXJ0AQkAZwIFDmJsb2NrVGltZXN0YW1wCQBkAgUOaW5pdGlhbF9BX3RpbWUFDU1JTl9SQU1QX1RJTUUJAAIBAgl0b28gb2Z0ZW4DCQEGYXNzZXJ0AQkAZwIFC19mdXR1cmVUaW1lCQBkAgUOYmxvY2tUaW1lc3RhbXAFDU1JTl9SQU1QX1RJTUUJAAIBAhFpbnN1ZmZpY2llbnQgdGltZQQKX2luaXRpYWxfQQkBAl9BAAMJAQZhc3NlcnQBAwkAZgIFCF9mdXR1cmVBAAAJAGYCBQVNQVhfQQUIX2Z1dHVyZUEHCQACAQIRb3V0IG9mIGJhc2UgcmFuZ2UDCQEGYXNzZXJ0AQMDCQBnAgUIX2Z1dHVyZUEFCl9pbml0aWFsX0EJAGcCCQBoAgUKX2luaXRpYWxfQQUMTUFYX0FfQ0hBTkdFBQhfZnV0dXJlQQcGAwkAZgIFCl9pbml0aWFsX0EFCF9mdXR1cmVBCQBnAgkAaAIFCF9mdXR1cmVBBQxNQVhfQV9DSEFOR0UFCl9pbml0aWFsX0EHCQACAQIMb3V0IG9mIHJhbmdlCQDMCAIJAQxJbnRlZ2VyRW50cnkCAglpbml0aWFsX0EFCl9pbml0aWFsX0EJAMwIAgkBDEludGVnZXJFbnRyeQICCGZ1dHVyZV9BBQhfZnV0dXJlQQkAzAgCCQEMSW50ZWdlckVudHJ5AgIOaW5pdGlhbF9BX3RpbWUFDmJsb2NrVGltZXN0YW1wCQDMCAIJAQxJbnRlZ2VyRW50cnkCAg1mdXR1cmVfQV90aW1lBQtfZnV0dXJlVGltZQUDbmlsA21zZwEJc3RvcFJhbXBBAAkBC3ZhbHVlT3JFbHNlAgkBCGlzQWN0aXZlAAkBC3ZhbHVlT3JFbHNlAgkBC2lzQWRtaW5DYWxsAQUDbXNnBAhjdXJyZW50QQkBAl9BAAkAzAgCCQEMSW50ZWdlckVudHJ5AgIJaW5pdGlhbF9BBQhjdXJyZW50QQkAzAgCCQEMSW50ZWdlckVudHJ5AgIIZnV0dXJlX0EFCGN1cnJlbnRBCQDMCAIJAQxJbnRlZ2VyRW50cnkCAg5pbml0aWFsX0FfdGltZQUOYmxvY2tUaW1lc3RhbXAJAMwIAgkBDEludGVnZXJFbnRyeQICDWZ1dHVyZV9BX3RpbWUFDmJsb2NrVGltZXN0YW1wBQNuaWwDbXNnAQhzaHV0ZG93bgAJAQt2YWx1ZU9yRWxzZQIJAQtpc0FkbWluQ2FsbAEFA21zZwMJAQEhAQUGYWN0aXZlCQACAQkArAICAiJEQXBwIGlzIGFscmVhZHkgc3VzcGVuZGVkLiBDYXVzZTogCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMFBmtDYXVzZQIadGhlIGNhdXNlIHdhc24ndCBzcGVjaWZpZWQJAQdzdXNwZW5kAQIPUGF1c2VkIGJ5IGFkbWluA21zZwEIYWN0aXZhdGUACQELdmFsdWVPckVsc2UCCQELaXNBZG1pbkNhbGwBBQNtc2cDBQZhY3RpdmUJAQ10aHJvd0lzQWN0aXZlAAkAzAgCCQEMQm9vbGVhbkVudHJ5AgUHa0FjdGl2ZQYJAMwIAgkBC0RlbGV0ZUVudHJ5AQUGa0NhdXNlBQNuaWwDbXNnARl0YWtlSW50b0FjY291bnRFeHRyYUZ1bmRzAAkBC3ZhbHVlT3JFbHNlAgkBCGlzQWN0aXZlAAQFY2xhaW0DCQEPY29udGFpbnNFbGVtZW50AgUIYXNzZXRJZHMJANgEAQUEVVNETgkA/AcEBRJzdGFraW5nVVNETkFkZHJlc3MCDGNsYWltUmV3YXJkcwUDbmlsBQNuaWwAAAMJAAACBQVjbGFpbQUFY2xhaW0DCQECIT0CCAUDbXNnBmNhbGxlcgUPbW9uZXlCb3hBZGRyZXNzCQACAQImT25seSB0aGUgd2FsbGV0IGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24ECGJhbGFuY2VzCQEDX3hwAAoBDnRha2VFeHRyYUZ1bmRzAgNhY2MHYXNzZXRJZAQNJHQwMzI3NjkzMjc4NwUDYWNjBANzdW0IBQ0kdDAzMjc2OTMyNzg3Al8xBAFpCAUNJHQwMzI3NjkzMjc4NwJfMgQIdG9rZW5CNTgJANkEAQUHYXNzZXRJZAQIckJhbGFuY2UJAGQCCQDwBwIFBHRoaXMFCHRva2VuQjU4CQEMc3Rha2VkQW1vdW50AQUIdG9rZW5CNTgEDGVucm9sbEFtb3VudAkAZQIFCHJCYWxhbmNlCQCRAwIFCGJhbGFuY2VzBQFpAwkAZgIAAAUMZW5yb2xsQW1vdW50CQEHc3VzcGVuZAEJAKwCAgIgRW5yb2xsIGFtb3VudCBuZWdhdGl2ZSBmb3IgYXNzZXQFB2Fzc2V0SWQEB2FpcmRyb3ADCQBmAgUMZW5yb2xsQW1vdW50AAAJAPwHBAUQbHBGYXJtaW5nQWRkcmVzcwIHYWlyRHJvcAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQh0b2tlbkI1OAUMZW5yb2xsQW1vdW50BQNuaWwAAAMJAAACBQdhaXJkcm9wBQdhaXJkcm9wCQCUCgIJAGQCBQNzdW0FDGVucm9sbEFtb3VudAkAZAIFAWkAAQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgQBawoAAiRsBQhhc3NldElkcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgAAAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBDnRha2VFeHRyYUZ1bmRzAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAwkAAAIIBQFrAl8xAAAJAAIBAhBObyBtb25leSB0byB0YWtlBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BAnR4AQZ2ZXJpZnkABBNtdWx0aVNpZ25lZEJ5QWRtaW5zBBJhZG1pblB1YktleTFTaWduZWQDCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAABQxhZG1pblB1YktleTEAAQAABBJhZG1pblB1YktleTJTaWduZWQDCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwABBQxhZG1pblB1YktleTIAAQAABBJhZG1pblB1YktleTNTaWduZWQDCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwACBQxhZG1pblB1YktleTMAAQAACQBnAgkAZAIJAGQCBRJhZG1pblB1YktleTFTaWduZWQFEmFkbWluUHViS2V5MlNpZ25lZAUSYWRtaW5QdWJLZXkzU2lnbmVkAAIEByRtYXRjaDAFAnR4AwkAAQIFByRtYXRjaDACF0ludm9rZVNjcmlwdFRyYW5zYWN0aW9uBANpbnYFByRtYXRjaDAEE2NhbGxUYWtlSW50b0FjY291bnQDCQAAAggFA2ludgRkQXBwBQR0aGlzCQAAAggFA2ludghmdW5jdGlvbgIZdGFrZUludG9BY2NvdW50RXh0cmFGdW5kcwcEDXNpZ25lZEJ5QWRtaW4DAwMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAFDGFkbWluUHViS2V5MQYJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAFDGFkbWluUHViS2V5MgYJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAFDGFkbWluUHViS2V5MwYJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAFEWFkbWluUHViS2V5SW52b2tlAwMFE2NhbGxUYWtlSW50b0FjY291bnQFDXNpZ25lZEJ5QWRtaW4HBgUTbXVsdGlTaWduZWRCeUFkbWlucwUTbXVsdGlTaWduZWRCeUFkbWlucy2FIkY=", "height": 2418837, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 6qhLkDFqMWisAhKUqnDMTwSTqtb6G7RCXdQuQytgVba5 Next: 21Pqs7asD3hspdVaKqbXq3g3CHDzTX7fRkED1NnrG4rN Diff:
OldNewDifferences
2323
2424 let k = "active_all_contracts"
2525
26-let l = "shutdown_cause"
26+let l = "deprecated_"
2727
28-let m = "share_asset_id"
28+let m = "shutdown_cause"
2929
30-let n = "share_asset_supply"
30+let n = "share_asset_id"
3131
32-let o = "commission"
32+let o = "share_asset_supply"
3333
34-let p = "dAppThresholdCoef"
34+let p = "commission"
3535
36-let q = "staking_usdnnsbt_address"
36+let q = "dAppThresholdCoef"
3737
38-let r = "discounts"
38+let r = "staking_usdnnsbt_address"
3939
40-let s = "discount_values"
40+let s = "discounts"
4141
42-let t = "_SWOP_amount"
42+let t = "discount_values"
4343
44-let u = "_GSwop_amount"
44+let u = "_SWOP_amount"
4545
46-let v = "admin_pub_1"
46+let v = "_GSwop_amount"
4747
48-let w = "admin_pub_2"
48+let w = "admin_pub_1"
4949
50-let x = "admin_pub_3"
50+let x = "admin_pub_2"
5151
52-let y = "admin_invoke_pub"
52+let y = "admin_pub_3"
5353
54-let z = "money_box_address"
54+let z = "admin_invoke_pub"
5555
56-let B = "governance_address"
56+let B = "money_box_address"
5757
58-let C = "voting_address"
58+let C = "governance_address"
5959
60-let E = "farming_address"
60+let E = "voting_address"
6161
62-let F = "lp_farming"
62+let F = "farming_address"
6363
64-let G = Address(base58'3MvVBtsXroQpy1tsPw21TU2ET9A8WfmrNjz')
64+let G = "lp_farming"
6565
66-func H (I) = {
67- let J = getString(G, I)
68- if ($isInstanceOf(J, "String"))
66+let H = Address(base58'3MvVBtsXroQpy1tsPw21TU2ET9A8WfmrNjz')
67+
68+func I (J) = {
69+ let K = getString(H, J)
70+ if ($isInstanceOf(K, "String"))
6971 then {
70- let K = J
71- fromBase58String(K)
72+ let L = K
73+ fromBase58String(L)
7274 }
7375 else {
74- let L = J
75- throw((I + "is empty"))
76+ let M = K
77+ throw((J + "is empty"))
7678 }
7779 }
7880
7981
80-let M = H(v)
82+let N = I(w)
8183
82-let N = H(w)
84+let O = I(x)
8385
84-let O = H(x)
86+let P = I(y)
8587
86-let P = H(y)
88+let Q = I(z)
8789
88-let Q = Address(H(z))
90+let R = Address(I(B))
8991
90-let R = Address(H(B))
92+let S = Address(I(C))
9193
92-let S = Address(H(q))
94+let T = Address(I(r))
9395
94-let T = Address(H(C))
96+let U = Address(I(E))
9597
96-let U = Address(H(E))
98+let V = Address(I(F))
9799
98-let V = Address(H(F))
100+let W = Address(I(G))
99101
100-let W = base58'8UrfDVd5GreeUwm7uPk7eYz1eMv376kzR52C6sANPkwS'
102+let X = base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p'
101103
102-let X = [toBase58String(W)]
104+let Y = [toBase58String(X)]
103105
104-let Y = getBooleanValue(this, j)
106+let Z = getBooleanValue(this, j)
105107
106-let Z = valueOrElse(getBoolean(G, k), true)
108+let aa = valueOrElse(getBoolean(H, k), true)
107109
108-let aa = fromBase58String(getStringValue(this, m))
110+let ab = valueOrElse(getBoolean(H, (l + toString(this))), false)
109111
110-let ab = getIntegerValue(this, n)
111-
112-let ac = 1000000
112+let ac = fromBase58String(getStringValue(this, n))
113113
114114 let ad = getIntegerValue(this, o)
115115
116-let ae = fraction(40, ac, 100)
116+let ae = 1000000
117117
118-let af = getIntegerValue(this, "initial_A")
118+let af = getIntegerValue(this, p)
119119
120-let ag = getIntegerValue(this, "future_A")
120+let ag = fraction(40, ae, 100)
121121
122-let ah = valueOrElse(getInteger(this, "initial_A_time"), 0)
122+let ah = getIntegerValue(this, "initial_A")
123123
124-let ai = valueOrElse(getInteger(this, "future_A_time"), 0)
124+let ai = getIntegerValue(this, "future_A")
125125
126-let aj = split(getStringValue(this, h), ",")
126+let aj = valueOrElse(getInteger(this, "initial_A_time"), 0)
127127
128-let ak = size(aj)
128+let ak = valueOrElse(getInteger(this, "future_A_time"), 0)
129129
130-func al (am) = [BooleanEntry(j, false), StringEntry(l, am)]
130+let al = split(getStringValue(this, h), ",")
131+
132+let am = size(al)
133+
134+func an (ao) = [BooleanEntry(j, false), StringEntry(m, ao)]
131135
132136
133-func an () = throw("DApp is already active")
137+func ap () = throw("DApp is already active")
134138
135139
136-func ao () = if (if (Y)
137- then Z
140+func aq () = if (if (Z)
141+ then aa
138142 else false)
139143 then unit
140144 else throw("DApp is inactive at this moment")
141145
142146
143-func ap (aq) = if (containsElement([M, N, O], aq.callerPublicKey))
147+func ar () = if (!(ab))
148+ then unit
149+ else throw("Pool is deprecated. Only withdraw action allowed.")
150+
151+
152+func as (at) = if (containsElement([N, O, P], at.callerPublicKey))
144153 then unit
145154 else throw("Only admin can call this function")
146155
147156
148-func ar (aq) = if ((this == aq.caller))
157+func au (at) = if ((this == at.caller))
149158 then unit
150159 else throw("Only contract itself can call this function")
151160
152161
153-let as = toBigInt(2)
162+let av = toBigInt(2)
154163
155-let at = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
164+let aw = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
156165
157-let au = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
166+let ax = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
158167
159-let av = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
168+let ay = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
160169
161-let aw = height
170+let az = height
162171
163-func ax (ay) = if (ay)
172+func aA (aB) = if (aB)
164173 then false
165174 else true
166175
167176
168-func az (aA) = {
169- let aB = {
170- let J = aA
171- if ($isInstanceOf(J, "Address"))
177+func aC (aD) = {
178+ let aE = {
179+ let K = aD
180+ if ($isInstanceOf(K, "Address"))
172181 then {
173- let aC = J
174- toString(aC)
182+ let aF = K
183+ toString(aF)
175184 }
176- else if ($isInstanceOf(J, "String"))
185+ else if ($isInstanceOf(K, "String"))
177186 then {
178- let aC = J
179- aC
187+ let aF = K
188+ aF
180189 }
181190 else throw("Unknow type of user Addr")
182191 }
183- let aD = valueOrElse(getInteger(R, (aB + u)), 0)
184- let aE = valueOrElse(getInteger(R, (aB + u)), aD)
185- let aF = split(getStringValue(G, s), ",")
186- let aG = split(getStringValue(G, r), ",")
187- if (if ((aE >= parseIntValue(aF[0])))
188- then (parseIntValue(aF[1]) > aE)
192+ let aG = valueOrElse(getInteger(S, (aE + v)), 0)
193+ let aH = valueOrElse(getInteger(S, (aE + v)), aG)
194+ let aI = split(getStringValue(H, t), ",")
195+ let aJ = split(getStringValue(H, s), ",")
196+ if (if ((aH >= parseIntValue(aI[0])))
197+ then (parseIntValue(aI[1]) > aH)
189198 else false)
190- then (ac - parseIntValue(aG[0]))
191- else if (if ((aE >= parseIntValue(aF[1])))
192- then (parseIntValue(aF[2]) > aE)
199+ then (ae - parseIntValue(aJ[0]))
200+ else if (if ((aH >= parseIntValue(aI[1])))
201+ then (parseIntValue(aI[2]) > aH)
193202 else false)
194- then (ac - parseIntValue(aG[1]))
195- else if (if ((aE >= parseIntValue(aF[2])))
196- then (parseIntValue(aF[3]) > aE)
203+ then (ae - parseIntValue(aJ[1]))
204+ else if (if ((aH >= parseIntValue(aI[2])))
205+ then (parseIntValue(aI[3]) > aH)
197206 else false)
198- then (ac - parseIntValue(aG[2]))
199- else if (if ((aE >= parseIntValue(aF[3])))
200- then (parseIntValue(aF[4]) > aE)
207+ then (ae - parseIntValue(aJ[2]))
208+ else if (if ((aH >= parseIntValue(aI[3])))
209+ then (parseIntValue(aI[4]) > aH)
201210 else false)
202- then (ac - parseIntValue(aG[3]))
203- else if ((aE >= parseIntValue(aF[4])))
204- then (ac - parseIntValue(aG[4]))
205- else ac
211+ then (ae - parseIntValue(aJ[3]))
212+ else if ((aH >= parseIntValue(aI[4])))
213+ then (ae - parseIntValue(aJ[4]))
214+ else ae
206215 }
207216
208217
209-func aH () = {
210- let aI = ai
211- let aJ = ag
212- if ((aI > aw))
218+func aK () = {
219+ let aL = ak
220+ let aM = ai
221+ if ((aL > az))
213222 then {
214- let aK = af
215- let aL = ah
216- if ((aJ > aK))
217- then (aK + (((aJ - aK) * (aw - aL)) / (aI - aL)))
218- else (aK - (((aK - aJ) * (aw - aL)) / (aI - aL)))
223+ let aN = ah
224+ let aO = aj
225+ if ((aM > aN))
226+ then (aN + (((aM - aN) * (az - aO)) / (aL - aO)))
227+ else (aN - (((aN - aM) * (az - aO)) / (aL - aO)))
219228 }
220- else aJ
229+ else aM
221230 }
222231
223232
224-func aM () = {
225- func aN (aO,aP) = (aO :+ valueOrElse(getInteger(this, (aP + i)), 0))
233+func aP () = {
234+ func aQ (aR,aS) = (aR :+ valueOrElse(getInteger(this, (aS + i)), 0))
226235
227- let aQ = aj
228- let aR = size(aQ)
229- let aS = nil
230- func aT (aU,aV) = if ((aV >= aR))
231- then aU
232- else aN(aU, aQ[aV])
236+ let aT = al
237+ let aU = size(aT)
238+ let aV = nil
239+ func aW (aX,aY) = if ((aY >= aU))
240+ then aX
241+ else aQ(aX, aT[aY])
233242
234- func aW (aU,aV) = if ((aV >= aR))
235- then aU
243+ func aZ (aX,aY) = if ((aY >= aU))
244+ then aX
236245 else throw("List size exceeds 10")
237246
238- aW(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
247+ aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
239248 }
240249
241250
242-func aX (aY) = aY
251+func ba (bb) = bb
243252
244253
245-func aZ (aO,ba) = (aO + ba)
254+func bc (aR,bd) = (aR + bd)
246255
247256
248-func bb (aY,bc) = {
249- let bd = invoke(this, "D", [aY, bc], nil)
250- if ($isInstanceOf(bd, "Int"))
251- then bd
252- else throw(($getType(bd) + " couldn't be cast to Int"))
257+func be (bb,bf) = {
258+ let bg = invoke(this, "D", [bb, bf], nil)
259+ if ($isInstanceOf(bg, "Int"))
260+ then bg
261+ else throw(($getType(bg) + " couldn't be cast to Int"))
253262 }
254263
255264
256-func be (aY,bc) = {
257- let bf = {
258- let aQ = aY
259- let aR = size(aQ)
260- let aS = 0
261- func aT (aU,aV) = if ((aV >= aR))
262- then aU
263- else aZ(aU, aQ[aV])
265+func bh (bb,bf) = {
266+ let bi = {
267+ let aT = bb
268+ let aU = size(aT)
269+ let aV = 0
270+ func aW (aX,aY) = if ((aY >= aU))
271+ then aX
272+ else bc(aX, aT[aY])
264273
265- func aW (aU,aV) = if ((aV >= aR))
266- then aU
274+ func aZ (aX,aY) = if ((aY >= aU))
275+ then aX
267276 else throw("List size exceeds 10")
268277
269- aW(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
278+ aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
270279 }
271- if ((bf == 0))
280+ if ((bi == 0))
272281 then 0
273282 else {
274- let bg = (bc * ak)
275- let bh = (toBigInt(bg) * toBigInt(bf))
276- let bi = toBigInt((bg - 1))
277- func bj (aO,aq) = if ((aO._2 == true))
278- then aO
283+ let bj = (bf * am)
284+ let bk = (toBigInt(bj) * toBigInt(bi))
285+ let bl = toBigInt((bj - 1))
286+ func bm (aR,at) = if ((aR._2 == true))
287+ then aR
279288 else {
280- let bk = aO._1
281- func bl (bm,aq) = if ((ak > aq))
282- then ((bm * bk) / (toBigInt(aY[aq]) * toBigInt(ak)))
283- else bm
289+ let bn = aR._1
290+ func bo (bp,at) = if ((am > at))
291+ then ((bp * bn) / (toBigInt(bb[at]) * toBigInt(am)))
292+ else bp
284293
285- let bm = {
286- let aQ = at
287- let aR = size(aQ)
288- let aS = bk
289- func bn (aU,aV) = if ((aV >= aR))
290- then aU
291- else bl(aU, aQ[aV])
294+ let bp = {
295+ let aT = aw
296+ let aU = size(aT)
297+ let aV = bn
298+ func bq (aX,aY) = if ((aY >= aU))
299+ then aX
300+ else bo(aX, aT[aY])
292301
293- func bo (aU,aV) = if ((aV >= aR))
294- then aU
302+ func br (aX,aY) = if ((aY >= aU))
303+ then aX
295304 else throw("List size exceeds 10")
296305
297- bo(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
306+ br(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
298307 }
299- let bp = fraction((bh + (toBigInt(ak) * bm)), bk, ((bi * bk) + (toBigInt((ak + 1)) * bm)))
300- if ((bp > bk))
301- then if ((1 >= toInt((bp - bk))))
302- then $Tuple2(bp, true)
303- else $Tuple2(bp, false)
304- else if ((1 >= toInt((bk - bp))))
305- then $Tuple2(bp, true)
306- else $Tuple2(bp, false)
308+ let bs = fraction((bk + (toBigInt(am) * bp)), bn, ((bl * bn) + (toBigInt((am + 1)) * bp)))
309+ if ((bs > bn))
310+ then if ((1 >= toInt((bs - bn))))
311+ then $Tuple2(bs, true)
312+ else $Tuple2(bs, false)
313+ else if ((1 >= toInt((bn - bs))))
314+ then $Tuple2(bs, true)
315+ else $Tuple2(bs, false)
307316 }
308317
309- let bq = {
310- let aQ = au
311- let aR = size(aQ)
312- let aS = $Tuple2(toBigInt(bf), false)
313- func bn (aU,aV) = if ((aV >= aR))
314- then aU
315- else bj(aU, aQ[aV])
318+ let bt = {
319+ let aT = ax
320+ let aU = size(aT)
321+ let aV = $Tuple2(toBigInt(bi), false)
322+ func bq (aX,aY) = if ((aY >= aU))
323+ then aX
324+ else bm(aX, aT[aY])
316325
317- func bo (aU,aV) = if ((aV >= aR))
318- then aU
326+ func br (aX,aY) = if ((aY >= aU))
327+ then aX
319328 else throw("List size exceeds 15")
320329
321- bo(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
330+ 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)
322331 }
323- let bp = bq._1
324- let br = bq._2
325- if ((br == false))
326- then throw(("get_D() not finished with " + toString(bp)))
327- else toInt(bp)
332+ let bs = bt._1
333+ let bu = bt._2
334+ if ((bu == false))
335+ then throw(("get_D() not finished with " + toString(bs)))
336+ else toInt(bs)
328337 }
329338 }
330339
331340
332-func bs (aY,bc) = bb(aX(aY), bc)
341+func bv (bb,bf) = be(ba(bb), bf)
333342
334343
335-func bt (bu,bv,bw,bx) = if (ax((bu != bv)))
344+func bw (bx,by,bz,bA) = if (aA((bx != by)))
336345 then throw("same coin")
337- else if (ax(if ((bv >= 0))
338- then (bu >= 0)
346+ else if (aA(if ((by >= 0))
347+ then (bx >= 0)
339348 else false))
340349 then throw("below zero")
341- else if (ax(if ((ak > bv))
342- then (ak > bu)
350+ else if (aA(if ((am > by))
351+ then (am > bx)
343352 else false))
344353 then throw("above N_COINS")
345354 else {
346- let bc = aH()
347- let bp = bb(bx, bc)
348- let bg = (bc * ak)
349- func by (aO,aq) = {
350- let bz = aO
351- let bA = bz._1
352- let bB = bz._2
353- let bC = if ((bu == aq))
354- then bw
355- else bx[aq]
356- if (if ((aq != bv))
357- then (ak > aq)
355+ let bf = aK()
356+ let bs = be(bA, bf)
357+ let bj = (bf * am)
358+ func bB (aR,at) = {
359+ let bC = aR
360+ let bD = bC._1
361+ let bE = bC._2
362+ let bF = if ((bx == at))
363+ then bz
364+ else bA[at]
365+ if (if ((at != by))
366+ then (am > at)
358367 else false)
359- then $Tuple2((bA + bC), fraction(bB, toBigInt(bp), toBigInt((bC * ak))))
360- else $Tuple2(bA, bB)
368+ then $Tuple2((bD + bF), fraction(bE, toBigInt(bs), toBigInt((bF * am))))
369+ else $Tuple2(bD, bE)
361370 }
362371
363- let bD = {
364- let aQ = at
365- let aR = size(aQ)
366- let aS = $Tuple2(0, toBigInt(bp))
367- func aT (aU,aV) = if ((aV >= aR))
368- then aU
369- else by(aU, aQ[aV])
372+ let bG = {
373+ let aT = aw
374+ let aU = size(aT)
375+ let aV = $Tuple2(0, toBigInt(bs))
376+ func aW (aX,aY) = if ((aY >= aU))
377+ then aX
378+ else bB(aX, aT[aY])
370379
371- func aW (aU,aV) = if ((aV >= aR))
372- then aU
380+ func aZ (aX,aY) = if ((aY >= aU))
381+ then aX
373382 else throw("List size exceeds 10")
374383
375- aW(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
384+ aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
376385 }
377- let bA = bD._1
378- let bE = bD._2
379- let bB = fraction(bE, toBigInt(bp), toBigInt((bg * ak)))
380- let bF = toBigInt(((bA + (bp / bg)) - bp))
381- func bG (aO,bH) = if ((aO._2 == true))
382- then aO
386+ let bD = bG._1
387+ let bH = bG._2
388+ let bE = fraction(bH, toBigInt(bs), toBigInt((bj * am)))
389+ let bI = toBigInt(((bD + (bs / bj)) - bs))
390+ func bJ (aR,bK) = if ((aR._2 == true))
391+ then aR
383392 else {
384- let bI = aO._1
385- let bJ = (((bI * bI) + bB) / ((as * bI) + bF))
386- if ((bJ > bI))
387- then if ((1 >= toInt((bJ - bI))))
388- then $Tuple2(bJ, true)
389- else $Tuple2(bJ, false)
390- else if ((1 >= toInt((bI - bJ))))
391- then $Tuple2(bJ, true)
392- else $Tuple2(bJ, false)
393+ let bL = aR._1
394+ let bM = (((bL * bL) + bE) / ((av * bL) + bI))
395+ if ((bM > bL))
396+ then if ((1 >= toInt((bM - bL))))
397+ then $Tuple2(bM, true)
398+ else $Tuple2(bM, false)
399+ else if ((1 >= toInt((bL - bM))))
400+ then $Tuple2(bM, true)
401+ else $Tuple2(bM, false)
393402 }
394403
395- let bK = {
396- let aQ = av
397- let aR = size(aQ)
398- let aS = $Tuple2(toBigInt(bp), false)
399- func bn (aU,aV) = if ((aV >= aR))
400- then aU
401- else bG(aU, aQ[aV])
404+ let bN = {
405+ let aT = ay
406+ let aU = size(aT)
407+ let aV = $Tuple2(toBigInt(bs), false)
408+ func bq (aX,aY) = if ((aY >= aU))
409+ then aX
410+ else bJ(aX, aT[aY])
402411
403- func bo (aU,aV) = if ((aV >= aR))
404- then aU
412+ func br (aX,aY) = if ((aY >= aU))
413+ then aX
405414 else throw("List size exceeds 16")
406415
407- bo(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16)
416+ 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)
408417 }
409- let bJ = bK._1
410- let br = bK._2
411- if ((br == false))
412- then throw(("getY() not finished with " + toString(bJ)))
413- else toInt(bJ)
418+ let bM = bN._1
419+ let bu = bN._2
420+ if ((bu == false))
421+ then throw(("getY() not finished with " + toString(bM)))
422+ else toInt(bM)
414423 }
415424
416425
417-func bL (bM,bu,aY,bp) = if (ax((bu >= 0)))
426+func bO (bP,bx,bb,bs) = if (aA((bx >= 0)))
418427 then throw("i below zero")
419- else if (ax((ak > bu)))
428+ else if (aA((am > bx)))
420429 then throw("i above N_COINS")
421430 else {
422- let bg = (bM * ak)
423- func by (aO,aq) = {
424- let bN = aO
425- let bA = bN._1
426- let bB = bN._2
427- let bC = if (if ((bu != aq))
428- then (ak > aq)
431+ let bj = (bP * am)
432+ func bB (aR,at) = {
433+ let bQ = aR
434+ let bD = bQ._1
435+ let bE = bQ._2
436+ let bF = if (if ((bx != at))
437+ then (am > at)
429438 else false)
430- then aY[aq]
439+ then bb[at]
431440 else 0
432- if (if ((ak > aq))
433- then (bu != aq)
441+ if (if ((am > at))
442+ then (bx != at)
434443 else false)
435- then $Tuple2((bA + bC), fraction(bB, toBigInt(bp), toBigInt((bC * ak))))
436- else $Tuple2(bA, bB)
444+ then $Tuple2((bD + bF), fraction(bE, toBigInt(bs), toBigInt((bF * am))))
445+ else $Tuple2(bD, bE)
437446 }
438447
439- let bO = {
440- let aQ = at
441- let aR = size(aQ)
442- let aS = $Tuple2(0, toBigInt(bp))
443- func aT (aU,aV) = if ((aV >= aR))
444- then aU
445- else by(aU, aQ[aV])
448+ let bR = {
449+ let aT = aw
450+ let aU = size(aT)
451+ let aV = $Tuple2(0, toBigInt(bs))
452+ func aW (aX,aY) = if ((aY >= aU))
453+ then aX
454+ else bB(aX, aT[aY])
446455
447- func aW (aU,aV) = if ((aV >= aR))
448- then aU
456+ func aZ (aX,aY) = if ((aY >= aU))
457+ then aX
449458 else throw("List size exceeds 10")
450459
451- aW(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
460+ aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
452461 }
453- let bA = bO._1
454- let bE = bO._2
455- let bB = fraction(bE, toBigInt(bp), toBigInt((bg * ak)))
456- let bF = toBigInt(((bA + (bp / bg)) - bp))
457- func bP (aO,aq) = if ((aO._2 == true))
458- then aO
462+ let bD = bR._1
463+ let bH = bR._2
464+ let bE = fraction(bH, toBigInt(bs), toBigInt((bj * am)))
465+ let bI = toBigInt(((bD + (bs / bj)) - bs))
466+ func bS (aR,at) = if ((aR._2 == true))
467+ then aR
459468 else {
460- let bI = aO._1
461- let bJ = (((bI * bI) + bB) / ((as * bI) + bF))
462- if ((bJ > bI))
463- then if ((1 >= toInt((bJ - bI))))
464- then $Tuple2(bJ, true)
465- else $Tuple2(bJ, false)
466- else if ((1 >= toInt((bI - bJ))))
467- then $Tuple2(bJ, true)
468- else $Tuple2(bJ, false)
469+ let bL = aR._1
470+ let bM = (((bL * bL) + bE) / ((av * bL) + bI))
471+ if ((bM > bL))
472+ then if ((1 >= toInt((bM - bL))))
473+ then $Tuple2(bM, true)
474+ else $Tuple2(bM, false)
475+ else if ((1 >= toInt((bL - bM))))
476+ then $Tuple2(bM, true)
477+ else $Tuple2(bM, false)
469478 }
470479
471- let bQ = {
472- let aQ = av
473- let aR = size(aQ)
474- let aS = $Tuple2(toBigInt(bp), false)
475- func bn (aU,aV) = if ((aV >= aR))
476- then aU
477- else bP(aU, aQ[aV])
480+ let bT = {
481+ let aT = ay
482+ let aU = size(aT)
483+ let aV = $Tuple2(toBigInt(bs), false)
484+ func bq (aX,aY) = if ((aY >= aU))
485+ then aX
486+ else bS(aX, aT[aY])
478487
479- func bo (aU,aV) = if ((aV >= aR))
480- then aU
488+ func br (aX,aY) = if ((aY >= aU))
489+ then aX
481490 else throw("List size exceeds 16")
482491
483- bo(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16)
492+ 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)
484493 }
485- let bJ = bQ._1
486- let br = bQ._2
487- if ((br == false))
488- then throw(("get_y_D() not finished with " + toString(bJ)))
489- else toInt(bJ)
494+ let bM = bT._1
495+ let bu = bT._2
496+ if ((bu == false))
497+ then throw(("get_y_D() not finished with " + toString(bM)))
498+ else toInt(bM)
490499 }
491500
492501
493-func bR (aY,bS,aq,bT) = {
494- let bU = az(bT)
495- let bc = aH()
496- let bV = ((fraction(ad, bU, ac, CEILING) * ak) / (4 * (ak - 1)))
497- let bW = ab
498- let bX = bb(aY, bc)
499- let bY = (bX - fraction(bS, bX, bW))
500- let bZ = bL(bc, aq, aY, bY)
501- let ca = (aY[aq] - bZ)
502- func cb (aO,cc) = {
503- let cd = aO
504- let ce = cd._1
505- let cf = cd._2
506- let cg = if ((cf == aq))
507- then (fraction(cc, bY, bX) - bZ)
508- else (cc - fraction(cc, bY, bX))
509- $Tuple2((ce :+ (cc - fraction(bV, cg, ac))), (cf + 1))
502+func bU (bb,bV,at,bW) = {
503+ let bX = aC(bW)
504+ let bf = aK()
505+ let bY = ((fraction(af, bX, ae, CEILING) * am) / (4 * (am - 1)))
506+ let bZ = ad
507+ let ca = be(bb, bf)
508+ let cb = (ca - fraction(bV, ca, bZ))
509+ let cc = bO(bf, at, bb, cb)
510+ let cd = (bb[at] - cc)
511+ func ce (aR,cf) = {
512+ let cg = aR
513+ let ch = cg._1
514+ let ci = cg._2
515+ let cj = if ((ci == at))
516+ then (fraction(cf, cb, ca) - cc)
517+ else (cf - fraction(cf, cb, ca))
518+ $Tuple2((ch :+ (cf - fraction(bY, cj, ae))), (ci + 1))
510519 }
511520
512- let ch = {
513- let aQ = aY
514- let aR = size(aQ)
515- let aS = $Tuple2(nil, 0)
516- func aT (aU,aV) = if ((aV >= aR))
517- then aU
518- else cb(aU, aQ[aV])
521+ let ck = {
522+ let aT = bb
523+ let aU = size(aT)
524+ let aV = $Tuple2(nil, 0)
525+ func aW (aX,aY) = if ((aY >= aU))
526+ then aX
527+ else ce(aX, aT[aY])
519528
520- func aW (aU,aV) = if ((aV >= aR))
521- then aU
529+ func aZ (aX,aY) = if ((aY >= aU))
530+ then aX
522531 else throw("List size exceeds 10")
523532
524- aW(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
533+ aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
525534 }
526- let ce = ch._1
527- let cf = ch._2
528- let ci = ce[aq]
529- let cj = ((ci - bL(bc, aq, ce, bY)) - 1)
530- $Tuple2(cj, (ca - cj))
535+ let ch = ck._1
536+ let ci = ck._2
537+ let cl = ch[at]
538+ let cm = ((cl - bO(bf, at, ch, cb)) - 1)
539+ $Tuple2(cm, (cd - cm))
531540 }
532541
533542
534-func ck (aP) = {
535- let J = aP
536- if ($isInstanceOf(J, "ByteVector"))
543+func cn (aS) = {
544+ let K = aS
545+ if ($isInstanceOf(K, "ByteVector"))
537546 then {
538- let cl = J
539- toBase58String(cl)
547+ let co = K
548+ toBase58String(co)
540549 }
541- else if ($isInstanceOf(J, "Unit"))
550+ else if ($isInstanceOf(K, "Unit"))
542551 then {
543- let cm = J
552+ let cp = K
544553 "WAVES"
545554 }
546555 else throw("Match error")
547556 }
548557
549558
550-func cn (co,aP) = if (co)
551- then $Tuple2("lockNeutrino", S)
552- else $Tuple2("unlockNeutrino", S)
559+func cq (cr,aS) = if (cr)
560+ then $Tuple2("lockNeutrino", T)
561+ else $Tuple2("unlockNeutrino", T)
553562
554563
555-func cp (co,cq,aP) = if (co)
564+func cs (cr,ct,aS) = if (cr)
556565 then {
557- let cr = cn(co, aP)
558- let cs = cr._1
559- let ct = cr._2
560- $Tuple4(cs, ct, nil, [AttachedPayment(aP, cq)])
566+ let cu = cq(cr, aS)
567+ let cv = cu._1
568+ let cw = cu._2
569+ $Tuple4(cv, cw, nil, [AttachedPayment(aS, ct)])
561570 }
562571 else {
563- let cu = cn(co, aP)
564- let cs = cu._1
565- let ct = cu._2
566- $Tuple4(cs, ct, [cq, toBase58String(aP)], nil)
572+ let cx = cq(cr, aS)
573+ let cv = cx._1
574+ let cw = cx._2
575+ $Tuple4(cv, cw, [ct, toBase58String(aS)], nil)
567576 }
568577
569578
570-func co (cq,cv) = if (containsElement(X, cv))
579+func cr (ct,cy) = if (containsElement(Y, cy))
571580 then {
572- let cw = cp(true, cq, fromBase58String(cv))
573- let cs = cw._1
574- let cx = cw._2
575- let cy = cw._3
576- let cz = cw._4
577- invoke(cx, cs, cy, cz)
581+ let cz = cs(true, ct, fromBase58String(cy))
582+ let cv = cz._1
583+ let cA = cz._2
584+ let cB = cz._3
585+ let cC = cz._4
586+ invoke(cA, cv, cB, cC)
578587 }
579588 else 0
580589
581590
582-func cA (cq,cv) = if (containsElement(X, cv))
591+func cD (ct,cy) = if (containsElement(Y, cy))
583592 then {
584- let cB = cp(false, cq, fromBase58String(cv))
585- let cs = cB._1
586- let cx = cB._2
587- let cy = cB._3
588- let cz = cB._4
589- invoke(cx, cs, cy, cz)
593+ let cE = cs(false, ct, fromBase58String(cy))
594+ let cv = cE._1
595+ let cA = cE._2
596+ let cB = cE._3
597+ let cC = cE._4
598+ invoke(cA, cv, cB, cC)
590599 }
591600 else 0
592601
593602
594-func cC (aP) = {
595- let cD = {
596- let J = aP
597- if ($isInstanceOf(J, "ByteVector"))
603+func cF (aS) = {
604+ let cG = {
605+ let K = aS
606+ if ($isInstanceOf(K, "ByteVector"))
598607 then {
599- let cE = J
600- if ((cE == W))
601- then getInteger(S, ((("rpd_balance_" + toBase58String(cE)) + "_") + toString(this)))
608+ let cH = K
609+ if ((cH == X))
610+ then getInteger(T, ((("rpd_balance_" + toBase58String(cH)) + "_") + toString(this)))
602611 else 0
603612 }
604- else if ($isInstanceOf(J, "Unit"))
613+ else if ($isInstanceOf(K, "Unit"))
605614 then 0
606615 else throw("Match error")
607616 }
608- let J = cD
609- if ($isInstanceOf(J, "Int"))
617+ let K = cG
618+ if ($isInstanceOf(K, "Int"))
610619 then {
611- let aq = J
612- aq
620+ let at = K
621+ at
613622 }
614623 else 0
615624 }
616625
617626
618-func cF () = {
619- let cG = aM()
620- func cH (aO,aP) = {
621- let cI = aO
622- let cJ = cI._1
623- let aq = cI._2
624- if (cJ)
625- then $Tuple2(cJ, aq)
627+func cI () = {
628+ let cJ = aP()
629+ func cK (aR,aS) = {
630+ let cL = aR
631+ let cM = cL._1
632+ let at = cL._2
633+ if (cM)
634+ then $Tuple2(cM, at)
626635 else {
627- let cK = (assetBalance(this, fromBase58String(aP)) + cC(fromBase58String(aP)))
628- if ((cG[aq] > cK))
629- then $Tuple2(true, aq)
630- else $Tuple2(false, (aq + 1))
636+ let cN = (assetBalance(this, fromBase58String(aS)) + cF(fromBase58String(aS)))
637+ if ((cJ[at] > cN))
638+ then $Tuple2(true, at)
639+ else $Tuple2(false, (at + 1))
631640 }
632641 }
633642
634- let aQ = aj
635- let aR = size(aQ)
636- let aS = $Tuple2(false, 0)
637- func aT (aU,aV) = if ((aV >= aR))
638- then aU
639- else cH(aU, aQ[aV])
643+ let aT = al
644+ let aU = size(aT)
645+ let aV = $Tuple2(false, 0)
646+ func aW (aX,aY) = if ((aY >= aU))
647+ then aX
648+ else cK(aX, aT[aY])
640649
641- func aW (aU,aV) = if ((aV >= aR))
642- then aU
650+ func aZ (aX,aY) = if ((aY >= aU))
651+ then aX
643652 else throw("List size exceeds 10")
644653
645- aW(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
654+ aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
646655 }
647656
648657
649-func cL (aq) = al(("Suspicious state with asset: " + aj[aq]))
658+func cO (at) = an(("Suspicious state with asset: " + al[at]))
650659
651660
652-func cM (bT,cz) = {
653- func cN (aO,cO) = (aO :+ ScriptTransfer(bT, cO.amount, cO.assetId))
661+func cP (bW,cC) = {
662+ func cQ (aR,cR) = (aR :+ ScriptTransfer(bW, cR.amount, cR.assetId))
654663
655- let aQ = cz
656- let aR = size(aQ)
657- let aS = nil
658- func aT (aU,aV) = if ((aV >= aR))
659- then aU
660- else cN(aU, aQ[aV])
664+ let aT = cC
665+ let aU = size(aT)
666+ let aV = nil
667+ func aW (aX,aY) = if ((aY >= aU))
668+ then aX
669+ else cQ(aX, aT[aY])
661670
662- func aW (aU,aV) = if ((aV >= aR))
663- then aU
671+ func aZ (aX,aY) = if ((aY >= aU))
672+ then aX
664673 else throw("List size exceeds 10")
665674
666- aW(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
675+ aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
667676 }
668677
669678
670-func cP (cQ) = {
671- let cR = valueOrErrorMessage(getInteger(this, p), "No dAppThresholdCoef key")
672- let cS = 10000
673- let cT = max(cQ)
674- let cU = min(cQ)
675- let cV = fraction(cT, cS, cU)
676- if ((cV > (cR * cS)))
679+func cS (cT) = {
680+ let cU = valueOrErrorMessage(getInteger(this, q), "No dAppThresholdCoef key")
681+ let cV = 10000
682+ let cW = max(cT)
683+ let cX = min(cT)
684+ let cY = fraction(cW, cV, cX)
685+ if ((cY > (cU * cV)))
677686 then throw("New balance in assets of the DApp is less than threshold")
678687 else false
679688 }
680689
681690
682-func cW (aj) = {
683- let cX = split(aj, ",")
684- if ((size(cX) > 10))
691+func cZ (al) = {
692+ let da = split(al, ",")
693+ if ((size(da) > 10))
685694 then throw("To many coins, max coins size 10")
686695 else {
687- func cY (cZ,aP) = {
688- let da = valueOrErrorMessage(fromBase58String(aP), ("fromBase58String: " + aP))
689- let db = valueOrErrorMessage(assetInfo(da), ("assetInfo: " + aP)).decimals
690- if ((db != d))
696+ func db (dc,aS) = {
697+ let dd = valueOrErrorMessage(fromBase58String(aS), ("fromBase58String: " + aS))
698+ let de = valueOrErrorMessage(assetInfo(dd), ("assetInfo: " + aS)).decimals
699+ if ((de != d))
691700 then throw("wrong decimals")
692701 else false
693702 }
694703
695- let aQ = cX
696- let aR = size(aQ)
697- let aS = false
698- func aT (aU,aV) = if ((aV >= aR))
699- then aU
700- else cY(aU, aQ[aV])
704+ let aT = da
705+ let aU = size(aT)
706+ let aV = false
707+ func aW (aX,aY) = if ((aY >= aU))
708+ then aX
709+ else db(aX, aT[aY])
701710
702- func aW (aU,aV) = if ((aV >= aR))
703- then aU
711+ func aZ (aX,aY) = if ((aY >= aU))
712+ then aX
704713 else throw("List size exceeds 10")
705714
706- aW(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
715+ aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
707716 }
708717 }
709718
710719
711-func dc (dd,de,df) = {
712- let cJ = cF()
713- if (cJ._1)
714- then (cL(cJ._2) ++ cM(dd.caller, dd.payments))
720+func df (dg,dh,di) = {
721+ let cM = cI()
722+ if (cM._1)
723+ then (cO(cM._2) ++ cP(dg.caller, dg.payments))
715724 else {
716- let dg = if ((size(dd.payments) > 0))
717- then if ((size(dd.payments) != 1))
725+ let dj = if ((size(dg.payments) > 0))
726+ then if ((size(dg.payments) != 1))
718727 then throw("size(payments) != 1")
719728 else {
720- let dh = dd.payments[0].assetId
721- if ((aa != dh))
729+ let dk = dg.payments[0].assetId
730+ if ((ac != dk))
722731 then throw("unknown payment token")
723- else dd.payments[0].amount
732+ else dg.payments[0].amount
724733 }
725734 else 0
726- let di = (dg + df)
727- func dj (aO,dk) = {
728- let dl = aO
729- let dm = dl._1
730- let aq = dl._2
731- let dn = fraction(dk, di, ab)
732- if (ax((dn >= de[aq])))
735+ let dl = (dj + di)
736+ func dm (aR,dn) = {
737+ let do = aR
738+ let dp = do._1
739+ let at = do._2
740+ let dq = fraction(dn, dl, ad)
741+ if (aA((dq >= dh[at])))
733742 then throw("Withdrawal resulted in fewer coins than expected")
734743 else {
735- let do = cA(dn, aj[aq])
736- if ((do == do))
737- then $Tuple2((dm ++ [IntegerEntry((aj[aq] + i), (dk - dn)), ScriptTransfer(dd.caller, dn, fromBase58String(aj[aq]))]), (aq + 1))
744+ let dr = cD(dq, al[at])
745+ if ((dr == dr))
746+ then $Tuple2((dp ++ [IntegerEntry((al[at] + i), (dn - dq)), ScriptTransfer(dg.caller, dq, fromBase58String(al[at]))]), (at + 1))
738747 else throw("Strict value is not equal to itself.")
739748 }
740749 }
741750
742- let dp = {
743- let aQ = aM()
744- let aR = size(aQ)
745- let aS = $Tuple2(nil, 0)
746- func aT (aU,aV) = if ((aV >= aR))
747- then aU
748- else dj(aU, aQ[aV])
751+ let ds = {
752+ let aT = aP()
753+ let aU = size(aT)
754+ let aV = $Tuple2(nil, 0)
755+ func aW (aX,aY) = if ((aY >= aU))
756+ then aX
757+ else dm(aX, aT[aY])
749758
750- func aW (aU,aV) = if ((aV >= aR))
751- then aU
759+ func aZ (aX,aY) = if ((aY >= aU))
760+ then aX
752761 else throw("List size exceeds 10")
753762
754- aW(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
763+ aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
755764 }
756- let dm = dp._1
757- let aq = dp._2
758- (dm ++ [Burn(aa, di), IntegerEntry(n, (ab - di))])
765+ let dp = ds._1
766+ let at = ds._2
767+ (dp ++ [Burn(ac, dl), IntegerEntry(o, (ad - dl))])
759768 }
760769 }
761770
762771
763-func dq (dd,dr,ds,df) = {
764- let cJ = cF()
765- if (cJ._1)
766- then (cL(cJ._2) ++ cM(dd.originCaller, dd.payments))
772+func dt (dg,du,dv,di) = {
773+ let cM = cI()
774+ if (cM._1)
775+ then (cO(cM._2) ++ cP(dg.originCaller, dg.payments))
767776 else {
768- let dg = if ((size(dd.payments) > 0))
777+ let dj = if ((size(dg.payments) > 0))
769778 then {
770- let dh = dd.payments[0].assetId
771- if ((aa != dh))
779+ let dk = dg.payments[0].assetId
780+ if ((ac != dk))
772781 then throw("unknown payment token")
773- else dd.payments[0].amount
782+ else dg.payments[0].amount
774783 }
775784 else 0
776- let dt = valueOrErrorMessage(indexOf(aj, dr), "unknown token out")
777- let du = fromBase58String(dr)
778- let di = (dg + df)
779- let aY = aM()
780- let dv = bR(aY, di, dt, dd.originCaller)
781- let cj = dv._1
782- let dw = dv._2
783- if (ax((cj >= ds)))
785+ let dw = valueOrErrorMessage(indexOf(al, du), "unknown token out")
786+ let dx = fromBase58String(du)
787+ let dl = (dj + di)
788+ let bb = aP()
789+ let dy = bU(bb, dl, dw, dg.originCaller)
790+ let cm = dy._1
791+ let dz = dy._2
792+ if (aA((cm >= dv)))
784793 then throw("Not enough coins removed")
785794 else {
786- let dx = fraction(dw, ae, ac)
787- let dy = (cj + dw)
788- func dz (aO,dA) = {
789- let dB = aO
790- let cQ = dB._1
791- let aq = dB._2
792- if ((aq == dt))
793- then $Tuple2((cQ :+ (dA - dy)), (aq + 1))
794- else $Tuple2((cQ :+ dA), (aq + 1))
795+ let dA = fraction(dz, ag, ae)
796+ let dB = (cm + dz)
797+ func dC (aR,dD) = {
798+ let dE = aR
799+ let cT = dE._1
800+ let at = dE._2
801+ if ((at == dw))
802+ then $Tuple2((cT :+ (dD - dB)), (at + 1))
803+ else $Tuple2((cT :+ dD), (at + 1))
795804 }
796805
797- let dC = {
798- let aQ = aY
799- let aR = size(aQ)
800- let aS = $Tuple2(nil, 0)
801- func aT (aU,aV) = if ((aV >= aR))
802- then aU
803- else dz(aU, aQ[aV])
806+ let dF = {
807+ let aT = bb
808+ let aU = size(aT)
809+ let aV = $Tuple2(nil, 0)
810+ func aW (aX,aY) = if ((aY >= aU))
811+ then aX
812+ else dC(aX, aT[aY])
804813
805- func aW (aU,aV) = if ((aV >= aR))
806- then aU
814+ func aZ (aX,aY) = if ((aY >= aU))
815+ then aX
807816 else throw("List size exceeds 10")
808817
809- aW(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
818+ aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
810819 }
811- let cQ = dC._1
812- let dD = dC._2
813- if (cP(cQ))
820+ let cT = dF._1
821+ let dG = dF._2
822+ if (cS(cT))
814823 then throw()
815824 else {
816- let do = cA(dy, dr)
817- if ((do == do))
825+ let dr = cD(dB, du)
826+ if ((dr == dr))
818827 then {
819- let dE = (dw - dx)
820- let dF = if ((dE > 0))
821- then invoke(V, "airDrop", nil, [AttachedPayment(du, dE)])
828+ let dH = (dz - dA)
829+ let dI = if ((dH > 0))
830+ then invoke(W, "airDrop", nil, [AttachedPayment(dx, dH)])
822831 else 0
823- if ((dF == dF))
824- then [ScriptTransfer(dd.originCaller, cj, du), IntegerEntry((aj[dt] + i), (aY[dt] - dy)), Burn(aa, di), ScriptTransfer(Q, dx, du), IntegerEntry(n, (ab - di))]
832+ if ((dI == dI))
833+ then [ScriptTransfer(dg.originCaller, cm, dx), IntegerEntry((al[dw] + i), (bb[dw] - dB)), Burn(ac, dl), ScriptTransfer(R, dA, dx), IntegerEntry(o, (ad - dl))]
825834 else throw("Strict value is not equal to itself.")
826835 }
827836 else throw("Strict value is not equal to itself.")
831840 }
832841
833842
834-@Callable(dd)
835-func D (aY,bc) = {
836- let bp = be(aY, bc)
837- $Tuple2([IntegerEntry("D", bp)], bp)
843+@Callable(dg)
844+func D (bb,bf) = {
845+ let bs = bh(bb, bf)
846+ $Tuple2([IntegerEntry("D", bs)], bs)
838847 }
839848
840849
841850
842-@Callable(dd)
843-func init (aj,aH,dG) = if (!(isDataStorageUntouched(this)))
851+@Callable(dg)
852+func init (al,aK,dJ) = if (!(isDataStorageUntouched(this)))
844853 then throw("Already initialized")
845- else if ((0 >= aH))
854+ else if ((0 >= aK))
846855 then throw("Amp must be must > 0")
847- else if ((0 >= dG))
856+ else if ((0 >= dJ))
848857 then throw("dApp Threshold Coef must be > 0")
849858 else {
850- let dH = "s_Multi_USD"
851- let dI = ("ShareToken of SwopFi protocol for MultiStable USD pool at address " + toString(this))
852- let dJ = Issue(dH, dI, 0, 6, true)
853- let dK = calculateAssetId(dJ)
854- if (cW(aj))
859+ let dK = "s_Multi_USD"
860+ let dL = ("ShareToken of SwopFi protocol for MultiStable USD pool at address " + toString(this))
861+ let dM = Issue(dK, dL, 0, 6, true)
862+ let dN = calculateAssetId(dM)
863+ if (cZ(al))
855864 then throw()
856- else [StringEntry(g, f), StringEntry(h, aj), IntegerEntry("initial_A", aH), IntegerEntry("future_A", aH), IntegerEntry(o, getIntegerValue(G, "base_fee_flat")), StringEntry(m, toBase58String(dK)), IntegerEntry(n, 0), IntegerEntry(p, dG), BooleanEntry(j, true), dJ]
865+ 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]
857866 }
858867
859868
860869
861-@Callable(dd)
862-func addLiquidity (dL,dM,dN) = valueOrElse(ao(), {
863- let bc = aH()
864- let aY = aM()
865- let bX = if ((ab == 0))
870+@Callable(dg)
871+func addLiquidity (dO,dP,dQ) = valueOrElse(aq(), valueOrElse(ar(), {
872+ let bf = aK()
873+ let bb = aP()
874+ let ca = if ((ad == 0))
866875 then 0
867- else bs(aY, bc)
868- let dO = if (if ((dN > 0))
869- then (dd.payments[(size(dd.payments) - 1)].assetId == unit)
876+ else bv(bb, bf)
877+ let dR = if (if ((dQ > 0))
878+ then (dg.payments[(size(dg.payments) - 1)].assetId == unit)
870879 else false)
871- then $Tuple2(removeByIndex(dd.payments, (size(dd.payments) - 1)), [dd.payments[(size(dd.payments) - 1)]])
872- else $Tuple2(dd.payments, nil)
873- let cz = dO._1
874- let dP = dO._2
875- let dQ = size(cz)
876- func dR (dS) = if ((dQ > ak))
877- then throw(("payments size > " + toString(ak)))
878- else if ((1 > dQ))
880+ then $Tuple2(removeByIndex(dg.payments, (size(dg.payments) - 1)), [dg.payments[(size(dg.payments) - 1)]])
881+ else $Tuple2(dg.payments, nil)
882+ let cC = dR._1
883+ let dS = dR._2
884+ let dT = size(cC)
885+ func dU (dV) = if ((dT > am))
886+ then throw(("payments size > " + toString(am)))
887+ else if ((1 > dT))
879888 then throw("payments size < 1")
880- else if (if ((ab == 0))
881- then (ak != dQ)
889+ else if (if ((ad == 0))
890+ then (am != dT)
882891 else false)
883892 then throw("initial deposit requires all coins")
884893 else {
885- func dT (aO,cO) = if (containsElement(aj, ck(cO.assetId)))
894+ func dW (aR,cR) = if (containsElement(al, cn(cR.assetId)))
886895 then true
887896 else throw("Invalid asset in payment")
888897
889- let aQ = cz
890- let aR = size(aQ)
891- let aS = false
892- func aT (aU,aV) = if ((aV >= aR))
893- then aU
894- else dT(aU, aQ[aV])
898+ let aT = cC
899+ let aU = size(aT)
900+ let aV = false
901+ func aW (aX,aY) = if ((aY >= aU))
902+ then aX
903+ else dW(aX, aT[aY])
895904
896- func aW (aU,aV) = if ((aV >= aR))
897- then aU
905+ func aZ (aX,aY) = if ((aY >= aU))
906+ then aX
898907 else throw("List size exceeds 10")
899908
900- aW(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
909+ aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
901910 }
902911
903- if (!(dR(dQ)))
912+ if (!(dU(dT)))
904913 then throw()
905914 else {
906- let cJ = cF()
907- if (cJ._1)
908- then (cL(cJ._2) ++ cM(dd.caller, cz))
915+ let cM = cI()
916+ if (cM._1)
917+ then (cO(cM._2) ++ cP(dg.caller, cC))
909918 else {
910- func cN (aO,aP) = {
911- let dU = aO
912- let cQ = dU._1
913- let aq = dU._2
914- func dV (dW,cO) = if ((ck(cO.assetId) == aP))
915- then (dW + cO.amount)
916- else dW
919+ func cQ (aR,aS) = {
920+ let dX = aR
921+ let cT = dX._1
922+ let at = dX._2
923+ func dY (dZ,cR) = if ((cn(cR.assetId) == aS))
924+ then (dZ + cR.amount)
925+ else dZ
917926
918- let dX = {
919- let aQ = cz
920- let aR = size(aQ)
921- let aS = aY[aq]
922- func aT (aU,aV) = if ((aV >= aR))
923- then aU
924- else dV(aU, aQ[aV])
927+ let ea = {
928+ let aT = cC
929+ let aU = size(aT)
930+ let aV = bb[at]
931+ func aW (aX,aY) = if ((aY >= aU))
932+ then aX
933+ else dY(aX, aT[aY])
925934
926- func aW (aU,aV) = if ((aV >= aR))
927- then aU
935+ func aZ (aX,aY) = if ((aY >= aU))
936+ then aX
928937 else throw("List size exceeds 10")
929938
930- aW(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
939+ aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
931940 }
932- $Tuple2((cQ :+ dX), (aq + 1))
941+ $Tuple2((cT :+ ea), (at + 1))
933942 }
934943
935- let dY = {
936- let aQ = aj
937- let aR = size(aQ)
938- let aS = $Tuple2(nil, 0)
939- func aT (aU,aV) = if ((aV >= aR))
940- then aU
941- else cN(aU, aQ[aV])
944+ let eb = {
945+ let aT = al
946+ let aU = size(aT)
947+ let aV = $Tuple2(nil, 0)
948+ func aW (aX,aY) = if ((aY >= aU))
949+ then aX
950+ else cQ(aX, aT[aY])
942951
943- func aW (aU,aV) = if ((aV >= aR))
944- then aU
952+ func aZ (aX,aY) = if ((aY >= aU))
953+ then aX
945954 else throw("List size exceeds 10")
946955
947- aW(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
956+ aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
948957 }
949- let cQ = dY._1
950- let dZ = dY._2
951- if (cP(cQ))
958+ let cT = eb._1
959+ let ec = eb._2
960+ if (cS(cT))
952961 then throw()
953962 else {
954- let bY = bs(cQ, bc)
955- if (ax((bY > bX)))
963+ let cb = bv(cT, bf)
964+ if (aA((cb > ca)))
956965 then throw("D1 > D0")
957966 else {
958- let bU = az(dd.caller)
959- func dj (aO,dW) = {
960- let ea = aO
961- let eb = ea._1
962- let dm = ea._2
963- let aq = ea._3
964- if ((ab > 0))
967+ let bX = aC(dg.caller)
968+ func dm (aR,dZ) = {
969+ let ed = aR
970+ let ee = ed._1
971+ let dp = ed._2
972+ let at = ed._3
973+ if ((ad > 0))
965974 then {
966- let bV = ((fraction(ad, bU, ac, CEILING) * ak) / (4 * (ak - 1)))
967- let ec = {
968- let ed = fraction(bY, aY[aq], bX)
969- let ee = if ((ed > dW))
970- then (ed - dW)
971- else (dW - ed)
972- fraction(bV, ee, ac)
975+ let bY = ((fraction(af, bX, ae, CEILING) * am) / (4 * (am - 1)))
976+ let ef = {
977+ let eg = fraction(cb, bb[at], ca)
978+ let eh = if ((eg > dZ))
979+ then (eg - dZ)
980+ else (dZ - eg)
981+ fraction(bY, eh, ae)
973982 }
974- let dx = fraction(ec, ae, ac)
975- let ef = (dW - ec)
976- let eg = (dW - ec)
977- let eh = (dW - aY[aq])
978- let dE = (ec - dx)
979- let ei = if ((eh > 0))
980- then co((eh - ec), aj[aq])
981- else cA(ec, aj[aq])
982- if ((ei == ei))
983+ let dA = fraction(ef, ag, ae)
984+ let ei = (dZ - ef)
985+ let ej = (dZ - ef)
986+ let ek = (dZ - bb[at])
987+ let dH = (ef - dA)
988+ let el = if ((ek > 0))
989+ then cr((ek - ef), al[at])
990+ else cD(ef, al[at])
991+ if ((el == el))
983992 then {
984- let dF = if ((dE > 0))
985- then invoke(V, "airDrop", nil, [AttachedPayment(fromBase58String(aj[aq]), dE)])
993+ let dI = if ((dH > 0))
994+ then invoke(W, "airDrop", nil, [AttachedPayment(fromBase58String(al[at]), dH)])
986995 else 0
987- if ((dF == dF))
988- then $Tuple3((eb :+ eg), (dm ++ [ScriptTransfer(Q, dx, fromBase58String(aj[aq])), IntegerEntry((aj[aq] + i), ef)]), (aq + 1))
996+ if ((dI == dI))
997+ then $Tuple3((ee :+ ej), (dp ++ [ScriptTransfer(R, dA, fromBase58String(al[at])), IntegerEntry((al[at] + i), ei)]), (at + 1))
989998 else throw("Strict value is not equal to itself.")
990999 }
9911000 else throw("Strict value is not equal to itself.")
9921001 }
9931002 else {
994- let ei = co(dW, aj[aq])
995- if ((ei == ei))
996- then $Tuple3((eb :+ dW), (dm :+ IntegerEntry((aj[aq] + i), dW)), (aq + 1))
1003+ let el = cr(dZ, al[at])
1004+ if ((el == el))
1005+ then $Tuple3((ee :+ dZ), (dp :+ IntegerEntry((al[at] + i), dZ)), (at + 1))
9971006 else throw("Strict value is not equal to itself.")
9981007 }
9991008 }
10001009
1001- let ej = {
1002- let aQ = cQ
1003- let aR = size(aQ)
1004- let aS = $Tuple3(nil, nil, 0)
1005- func bn (aU,aV) = if ((aV >= aR))
1006- then aU
1007- else dj(aU, aQ[aV])
1010+ let em = {
1011+ let aT = cT
1012+ let aU = size(aT)
1013+ let aV = $Tuple3(nil, nil, 0)
1014+ func bq (aX,aY) = if ((aY >= aU))
1015+ then aX
1016+ else dm(aX, aT[aY])
10081017
1009- func bo (aU,aV) = if ((aV >= aR))
1010- then aU
1018+ func br (aX,aY) = if ((aY >= aU))
1019+ then aX
10111020 else throw("List size exceeds 10")
10121021
1013- bo(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
1022+ br(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
10141023 }
1015- let eb = ej._1
1016- let dm = ej._2
1017- let ek = bs(eb, bc)
1018- let el = if ((ab == 0))
1019- then bY
1020- else fraction(ab, (ek - bX), bX)
1021- if (ax((el >= dL)))
1024+ let ee = em._1
1025+ let dp = em._2
1026+ let en = bv(ee, bf)
1027+ let eo = if ((ad == 0))
1028+ then cb
1029+ else fraction(ad, (en - ca), ca)
1030+ if (aA((eo >= dO)))
10221031 then throw("Slippage screwed you")
1023- else if (dM)
1032+ else if (dP)
10241033 then {
1025- let em = invoke(this, "reissueShare", [el], nil)
1026- if ((em == em))
1034+ let ep = invoke(this, "reissueShare", [eo], nil)
1035+ if ((ep == ep))
10271036 then {
1028- let en = invoke(U, "lockShareTokensFromPool", [dd.caller.bytes, toString(this), dN], ([AttachedPayment(aa, el)] ++ dP))
1029- if ((en == en))
1030- then (dm :+ IntegerEntry(n, (ab + el)))
1037+ let eq = invoke(V, "lockShareTokensFromPool", [dg.caller.bytes, toString(this), dQ], ([AttachedPayment(ac, eo)] ++ dS))
1038+ if ((eq == eq))
1039+ then (dp :+ IntegerEntry(o, (ad + eo)))
10311040 else throw("Strict value is not equal to itself.")
10321041 }
10331042 else throw("Strict value is not equal to itself.")
10341043 }
1035- else (dm ++ [Reissue(aa, el, true), ScriptTransfer(dd.caller, el, aa), IntegerEntry(n, (ab + el))])
1044+ else (dp ++ [Reissue(ac, eo, true), ScriptTransfer(dg.caller, eo, ac), IntegerEntry(o, (ad + eo))])
10361045 }
10371046 }
10381047 }
10391048 }
1040- })
1049+ }))
10411050
10421051
10431052
1044-@Callable(dd)
1045-func calcMintAmount (cQ,aB) = {
1046- let bc = aH()
1047- let aY = aM()
1048- let bY = bs(cQ, bc)
1049- if ((ab == 0))
1050- then $Tuple2(nil, bY)
1053+@Callable(dg)
1054+func calcMintAmount (cT,aE) = {
1055+ let bf = aK()
1056+ let bb = aP()
1057+ let cb = bv(cT, bf)
1058+ if ((ad == 0))
1059+ then $Tuple2(nil, cb)
10511060 else {
1052- let bX = bs(aY, bc)
1053- let bU = az(aB)
1054- func eo (aO,dW) = {
1055- let ep = aO
1056- let eb = ep._1
1057- let aq = ep._2
1058- let bV = ((fraction(ad, bU, ac, CEILING) * ak) / (4 * (ak - 1)))
1059- let ec = {
1060- let ed = fraction(bY, aY[aq], bX)
1061- let ee = if ((ed > dW))
1062- then (ed - dW)
1063- else (dW - ed)
1064- fraction(bV, ee, ac)
1061+ let ca = bv(bb, bf)
1062+ let bX = aC(aE)
1063+ func er (aR,dZ) = {
1064+ let es = aR
1065+ let ee = es._1
1066+ let at = es._2
1067+ let bY = ((fraction(af, bX, ae, CEILING) * am) / (4 * (am - 1)))
1068+ let ef = {
1069+ let eg = fraction(cb, bb[at], ca)
1070+ let eh = if ((eg > dZ))
1071+ then (eg - dZ)
1072+ else (dZ - eg)
1073+ fraction(bY, eh, ae)
10651074 }
1066- let eg = (dW - ec)
1067- $Tuple2((eb :+ eg), (aq + 1))
1075+ let ej = (dZ - ef)
1076+ $Tuple2((ee :+ ej), (at + 1))
10681077 }
10691078
1070- let eq = {
1071- let aQ = cQ
1072- let aR = size(aQ)
1073- let aS = $Tuple2(nil, 0)
1074- func aT (aU,aV) = if ((aV >= aR))
1075- then aU
1076- else eo(aU, aQ[aV])
1079+ let et = {
1080+ let aT = cT
1081+ let aU = size(aT)
1082+ let aV = $Tuple2(nil, 0)
1083+ func aW (aX,aY) = if ((aY >= aU))
1084+ then aX
1085+ else er(aX, aT[aY])
10771086
1078- func aW (aU,aV) = if ((aV >= aR))
1079- then aU
1087+ func aZ (aX,aY) = if ((aY >= aU))
1088+ then aX
10801089 else throw("List size exceeds 10")
10811090
1082- aW(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
1091+ aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
10831092 }
1084- let eb = eq._1
1085- let dZ = eq._2
1086- let ek = bs(eb, bc)
1087- let er = fraction(ab, (ek - bX), bX)
1088- $Tuple2(nil, er)
1093+ let ee = et._1
1094+ let ec = et._2
1095+ let en = bv(ee, bf)
1096+ let eu = fraction(ad, (en - ca), ca)
1097+ $Tuple2(nil, eu)
10891098 }
10901099 }
10911100
10921101
10931102
1094-@Callable(dd)
1095-func reissueShare (cq) = valueOrElse(ar(dd), [Reissue(aa, cq, true)])
1103+@Callable(dg)
1104+func reissueShare (ct) = valueOrElse(au(dg), [Reissue(ac, ct, true)])
10961105
10971106
10981107
1099-@Callable(dd)
1100-func getDy (es,et,eu,ev) = {
1101- let aY = aM()
1102- let ew = valueOrErrorMessage(indexOf(aj, es), "unknown token in")
1103- let ex = valueOrErrorMessage(indexOf(aj, et), "unknown token out")
1104- let bw = (aY[ew] + eu)
1105- let bJ = bt(ew, ex, bw, aY)
1106- let cj = ((aY[ex] - bJ) - 1)
1107- let bU = az(Address(fromBase58String(ev)))
1108- let bV = fraction(fraction(ad, bU, ac, CEILING), cj, ac)
1109- $Tuple2(nil, $Tuple2((cj - bV), bV))
1108+@Callable(dg)
1109+func getDy (ev,ew,ex,ey) = {
1110+ let bb = aP()
1111+ let ez = valueOrErrorMessage(indexOf(al, ev), "unknown token in")
1112+ let eA = valueOrErrorMessage(indexOf(al, ew), "unknown token out")
1113+ let bz = (bb[ez] + ex)
1114+ let bM = bw(ez, eA, bz, bb)
1115+ let cm = ((bb[eA] - bM) - 1)
1116+ let bX = aC(Address(fromBase58String(ey)))
1117+ let bY = fraction(fraction(af, bX, ae, CEILING), cm, ae)
1118+ $Tuple2(nil, $Tuple2((cm - bY), bY))
11101119 }
11111120
11121121
11131122
1114-@Callable(dd)
1115-func exchange (dr,ey) = valueOrElse(ao(), if ((size(dd.payments) != 1))
1123+@Callable(dg)
1124+func exchange (du,eB) = valueOrElse(ar(), valueOrElse(aq(), if ((size(dg.payments) != 1))
11161125 then throw("size(payments) != 1")
11171126 else {
1118- let cJ = cF()
1119- if (cJ._1)
1120- then (cL(cJ._2) ++ cM(dd.caller, dd.payments))
1127+ let cM = cI()
1128+ if (cM._1)
1129+ then (cO(cM._2) ++ cP(dg.caller, dg.payments))
11211130 else {
1122- let cO = dd.payments[0]
1123- let ez = ck(cO.assetId)
1124- let du = fromBase58String(dr)
1125- let eu = cO.amount
1126- let ew = valueOrErrorMessage(indexOf(aj, ez), "unknown token in")
1127- let ex = valueOrErrorMessage(indexOf(aj, dr), "unknown token out")
1128- let aY = aM()
1129- let bw = (aY[ew] + eu)
1130- let bJ = bt(ew, ex, bw, aY)
1131- let eA = ((aY[ex] - bJ) - 1)
1132- let bU = az(dd.originCaller)
1133- let bV = fraction(eA, fraction(ad, bU, ac, CEILING), ac)
1134- let cj = (eA - bV)
1135- let dx = fraction(bV, ae, ac)
1136- if (ax((cj >= ey)))
1131+ let cR = dg.payments[0]
1132+ let eC = cn(cR.assetId)
1133+ let dx = fromBase58String(du)
1134+ let ex = cR.amount
1135+ let ez = valueOrErrorMessage(indexOf(al, eC), "unknown token in")
1136+ let eA = valueOrErrorMessage(indexOf(al, du), "unknown token out")
1137+ let bb = aP()
1138+ let bz = (bb[ez] + ex)
1139+ let bM = bw(ez, eA, bz, bb)
1140+ let eD = ((bb[eA] - bM) - 1)
1141+ let bX = aC(dg.originCaller)
1142+ let bY = fraction(eD, fraction(af, bX, ae, CEILING), ae)
1143+ let cm = (eD - bY)
1144+ let dA = fraction(bY, ag, ae)
1145+ if (aA((cm >= eB)))
11371146 then throw("Exchange resulted in fewer coins than expected")
11381147 else {
1139- func dz (aO,dA) = {
1140- let eB = aO
1141- let cQ = eB._1
1142- let aq = eB._2
1143- if ((aq == ew))
1144- then $Tuple2((cQ :+ (dA + eu)), (aq + 1))
1145- else if ((aq == ex))
1146- then $Tuple2((cQ :+ (dA - eA)), (aq + 1))
1147- else $Tuple2((cQ :+ dA), (aq + 1))
1148+ func dC (aR,dD) = {
1149+ let eE = aR
1150+ let cT = eE._1
1151+ let at = eE._2
1152+ if ((at == ez))
1153+ then $Tuple2((cT :+ (dD + ex)), (at + 1))
1154+ else if ((at == eA))
1155+ then $Tuple2((cT :+ (dD - eD)), (at + 1))
1156+ else $Tuple2((cT :+ dD), (at + 1))
11481157 }
11491158
1150- let eC = {
1151- let aQ = aY
1152- let aR = size(aQ)
1153- let aS = $Tuple2(nil, 0)
1154- func aT (aU,aV) = if ((aV >= aR))
1155- then aU
1156- else dz(aU, aQ[aV])
1159+ let eF = {
1160+ let aT = bb
1161+ let aU = size(aT)
1162+ let aV = $Tuple2(nil, 0)
1163+ func aW (aX,aY) = if ((aY >= aU))
1164+ then aX
1165+ else dC(aX, aT[aY])
11571166
1158- func aW (aU,aV) = if ((aV >= aR))
1159- then aU
1167+ func aZ (aX,aY) = if ((aY >= aU))
1168+ then aX
11601169 else throw("List size exceeds 10")
11611170
1162- aW(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
1171+ aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
11631172 }
1164- let cQ = eC._1
1165- let aq = eC._2
1166- if (cP(cQ))
1173+ let cT = eF._1
1174+ let at = eF._2
1175+ if (cS(cT))
11671176 then throw()
11681177 else {
1169- let en = co(cO.amount, ck(cO.assetId))
1170- if ((en == en))
1178+ let eq = cr(cR.amount, cn(cR.assetId))
1179+ if ((eq == eq))
11711180 then {
1172- let do = cA(eA, dr)
1173- if ((do == do))
1181+ let dr = cD(eD, du)
1182+ if ((dr == dr))
11741183 then {
1175- let dE = (bV - dx)
1176- let dF = if ((dE > 0))
1177- then invoke(V, "airDrop", nil, [AttachedPayment(du, dE)])
1184+ let dH = (bY - dA)
1185+ let dI = if ((dH > 0))
1186+ then invoke(W, "airDrop", nil, [AttachedPayment(dx, dH)])
11781187 else 0
1179- if ((dF == dF))
1180- then $Tuple2([IntegerEntry((ez + i), bw), IntegerEntry((dr + i), (aY[ex] - eA)), ScriptTransfer(dd.caller, cj, du), ScriptTransfer(Q, dx, du)], [cj, du])
1188+ if ((dI == dI))
1189+ then $Tuple2([IntegerEntry((eC + i), bz), IntegerEntry((du + i), (bb[eA] - eD)), ScriptTransfer(dg.caller, cm, dx), ScriptTransfer(R, dA, dx)], [cm, dx])
11811190 else throw("Strict value is not equal to itself.")
11821191 }
11831192 else throw("Strict value is not equal to itself.")
11861195 }
11871196 }
11881197 }
1189- })
1198+ }))
11901199
11911200
11921201
1193-@Callable(dd)
1194-func withdraw (de) = valueOrElse(ao(), dc(dd, de, 0))
1202+@Callable(dg)
1203+func withdraw (dh) = valueOrElse(aq(), df(dg, dh, 0))
11951204
11961205
11971206
1198-@Callable(dd)
1199-func withdrawWithUnlock (de,df) = valueOrElse(ao(), if ((0 >= df))
1207+@Callable(dg)
1208+func withdrawWithUnlock (dh,di) = valueOrElse(aq(), if ((0 >= di))
12001209 then throw("Unlock amount must be positive")
12011210 else {
1202- let eD = invoke(U, "withdrawShareTokensFromPool", [dd.caller.bytes, toString(this), df], nil)
1203- if ((eD == eD))
1204- then dc(dd, de, df)
1211+ let eG = invoke(V, "withdrawShareTokensFromPool", [dg.caller.bytes, toString(this), di], nil)
1212+ if ((eG == eG))
1213+ then df(dg, dh, di)
12051214 else throw("Strict value is not equal to itself.")
12061215 })
12071216
12081217
12091218
1210-@Callable(dd)
1211-func calcWithdrawOneCoin (eE,dr,aB) = if ((0 >= eE))
1219+@Callable(dg)
1220+func calcWithdrawOneCoin (eH,du,aE) = if ((0 >= eH))
12121221 then throw("Amount must be positive")
12131222 else {
1214- let aq = valueOrErrorMessage(indexOf(aj, dr), "unknown token out")
1215- $Tuple2(nil, bR(aM(), eE, aq, Address(fromBase58String(aB)))._1)
1223+ let at = valueOrErrorMessage(indexOf(al, du), "unknown token out")
1224+ $Tuple2(nil, bU(aP(), eH, at, Address(fromBase58String(aE)))._1)
12161225 }
12171226
12181227
12191228
1220-@Callable(dd)
1221-func withdrawOneCoin (dr,ds) = valueOrElse(ao(), if ((size(dd.payments) != 1))
1229+@Callable(dg)
1230+func withdrawOneCoin (du,dv) = valueOrElse(ar(), valueOrElse(aq(), if ((size(dg.payments) != 1))
12221231 then throw("size(payments) != 1")
1223- else dq(dd, dr, ds, 0))
1232+ else dt(dg, du, dv, 0)))
12241233
12251234
12261235
1227-@Callable(dd)
1228-func withdrawOneCoinWithUnlock (dr,ds,df) = valueOrElse(ao(), if ((0 > df))
1236+@Callable(dg)
1237+func withdrawOneCoinWithUnlock (du,dv,di) = valueOrElse(ar(), valueOrElse(aq(), if ((0 > di))
12291238 then throw("Unlock amount must be positive")
12301239 else {
1231- let eD = invoke(U, "withdrawShareTokensFromPool", [dd.caller.bytes, toString(this), df], nil)
1232- if ((eD == eD))
1233- then dq(dd, dr, ds, df)
1240+ let eG = invoke(V, "withdrawShareTokensFromPool", [dg.caller.bytes, toString(this), di], nil)
1241+ if ((eG == eG))
1242+ then dt(dg, du, dv, di)
12341243 else throw("Strict value is not equal to itself.")
1235- })
1244+ }))
12361245
12371246
12381247
1239-@Callable(dd)
1240-func A () = $Tuple2(nil, aH())
1248+@Callable(dg)
1249+func A () = $Tuple2(nil, aK())
12411250
12421251
12431252
1244-@Callable(dd)
1253+@Callable(dg)
12451254 func getVirtualPrice () = {
1246- let bp = bb(aM(), aH())
1247- $Tuple2(nil, fraction(bp, a, ab))
1255+ let bs = be(aP(), aK())
1256+ $Tuple2(nil, fraction(bs, a, ad))
12481257 }
12491258
12501259
12511260
1252-@Callable(dd)
1253-func calcTokenAmount (eF,eG) = {
1254- let bc = aH()
1255- let eH = aM()
1256- let bX = bs(eH, bc)
1257- func eI (aO,dk) = {
1258- let eJ = aO
1259- let cQ = eJ._1
1260- let aq = eJ._2
1261- let dW = (dk + (if (eG)
1262- then eF[aq]
1263- else -(eF[aq])))
1264- $Tuple2((cQ :+ dW), (aq + 1))
1261+@Callable(dg)
1262+func calcTokenAmount (eI,eJ) = {
1263+ let bf = aK()
1264+ let eK = aP()
1265+ let ca = bv(eK, bf)
1266+ func eL (aR,dn) = {
1267+ let eM = aR
1268+ let cT = eM._1
1269+ let at = eM._2
1270+ let dZ = (dn + (if (eJ)
1271+ then eI[at]
1272+ else -(eI[at])))
1273+ $Tuple2((cT :+ dZ), (at + 1))
12651274 }
12661275
1267- let cQ = ( let aQ = eH
1268- let aR = size(aQ)
1269- let aS = $Tuple2(nil, 0)
1270- func aT (aU,aV) = if ((aV >= aR))
1271- then aU
1272- else eI(aU, aQ[aV])
1276+ let cT = ( let aT = eK
1277+ let aU = size(aT)
1278+ let aV = $Tuple2(nil, 0)
1279+ func aW (aX,aY) = if ((aY >= aU))
1280+ then aX
1281+ else eL(aX, aT[aY])
12731282
1274- func aW (aU,aV) = if ((aV >= aR))
1275- then aU
1283+ func aZ (aX,aY) = if ((aY >= aU))
1284+ then aX
12761285 else throw("List size exceeds 10")
12771286
1278- aW(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10))._1
1279- let bY = bs(cQ, bc)
1280- let eK = if (eG)
1281- then (bY - bX)
1282- else (bX - bY)
1283- $Tuple2(nil, fraction(eK, ab, bX))
1287+ aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10))._1
1288+ let cb = bv(cT, bf)
1289+ let eN = if (eJ)
1290+ then (cb - ca)
1291+ else (ca - cb)
1292+ $Tuple2(nil, fraction(eN, ad, ca))
12841293 }
12851294
12861295
12871296
1288-@Callable(dd)
1289-func rampA (eL,eM) = valueOrElse(ao(), valueOrElse(ap(dd), if (ax((aw >= (ah + e))))
1297+@Callable(dg)
1298+func rampA (eO,eP) = valueOrElse(aq(), valueOrElse(as(dg), if (aA((az >= (aj + e))))
12901299 then throw("too often")
1291- else if (ax((eM >= (aw + e))))
1300+ else if (aA((eP >= (az + e))))
12921301 then throw("insufficient time")
12931302 else {
1294- let eN = aH()
1295- if (ax(if ((eL > 0))
1296- then (b > eL)
1303+ let eQ = aK()
1304+ if (aA(if ((eO > 0))
1305+ then (b > eO)
12971306 else false))
12981307 then throw("out of base range")
1299- else if (ax(if (if ((eL >= eN))
1300- then ((eN * c) >= eL)
1308+ else if (aA(if (if ((eO >= eQ))
1309+ then ((eQ * c) >= eO)
13011310 else false)
13021311 then true
1303- else if ((eN > eL))
1304- then ((eL * c) >= eN)
1312+ else if ((eQ > eO))
1313+ then ((eO * c) >= eQ)
13051314 else false))
13061315 then throw("out of range")
1307- else [IntegerEntry("initial_A", eN), IntegerEntry("future_A", eL), IntegerEntry("initial_A_time", aw), IntegerEntry("future_A_time", eM)]
1316+ else [IntegerEntry("initial_A", eQ), IntegerEntry("future_A", eO), IntegerEntry("initial_A_time", az), IntegerEntry("future_A_time", eP)]
13081317 }))
13091318
13101319
13111320
1312-@Callable(dd)
1313-func stopRampA () = valueOrElse(ao(), valueOrElse(ap(dd), {
1314- let eO = aH()
1315-[IntegerEntry("initial_A", eO), IntegerEntry("future_A", eO), IntegerEntry("initial_A_time", aw), IntegerEntry("future_A_time", aw)]
1321+@Callable(dg)
1322+func stopRampA () = valueOrElse(aq(), valueOrElse(as(dg), {
1323+ let eR = aK()
1324+[IntegerEntry("initial_A", eR), IntegerEntry("future_A", eR), IntegerEntry("initial_A_time", az), IntegerEntry("future_A_time", az)]
13161325 }))
13171326
13181327
13191328
1320-@Callable(dd)
1321-func shutdown () = valueOrElse(ap(dd), if (!(Y))
1322- then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, l), "the cause wasn't specified")))
1323- else al("Paused by admin"))
1329+@Callable(dg)
1330+func shutdown () = valueOrElse(as(dg), if (!(Z))
1331+ then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, m), "the cause wasn't specified")))
1332+ else an("Paused by admin"))
13241333
13251334
13261335
1327-@Callable(dd)
1328-func activate () = valueOrElse(ap(dd), if (Y)
1329- then an()
1330- else [BooleanEntry(j, true), DeleteEntry(l)])
1336+@Callable(dg)
1337+func activate () = valueOrElse(as(dg), if (Z)
1338+ then ap()
1339+ else [BooleanEntry(j, true), DeleteEntry(m)])
13311340
13321341
13331342
1334-@Callable(dd)
1335-func takeIntoAccountExtraFunds () = valueOrElse(ao(), if ((dd.caller != Q))
1336- then throw("Only the wallet can call this function")
1337- else {
1338- let eH = aM()
1339- func eP (aO,aP) = {
1340- let eQ = aO
1341- let eR = eQ._1
1342- let aq = eQ._2
1343- let eS = fromBase58String(aP)
1344- let eT = (assetBalance(this, eS) + cC(eS))
1345- let eU = (eT - eH[aq])
1346- if ((0 > eU))
1347- then al(("Enroll amount negative for asset" + aP))
1348- else {
1349- let dF = if ((eU > 0))
1350- then invoke(V, "airDrop", nil, [AttachedPayment(eS, eU)])
1351- else 0
1352- if ((dF == dF))
1353- then $Tuple2((eR + eU), (aq + 1))
1354- else throw("Strict value is not equal to itself.")
1343+@Callable(dg)
1344+func takeIntoAccountExtraFunds () = valueOrElse(aq(), {
1345+ let eS = if (containsElement(al, toBase58String(X)))
1346+ then invoke(T, "claimRewards", nil, nil)
1347+ else 0
1348+ if ((eS == eS))
1349+ then if ((dg.caller != R))
1350+ then throw("Only the wallet can call this function")
1351+ else {
1352+ let eK = aP()
1353+ func eT (aR,aS) = {
1354+ let eU = aR
1355+ let eV = eU._1
1356+ let at = eU._2
1357+ let eW = fromBase58String(aS)
1358+ let eX = (assetBalance(this, eW) + cF(eW))
1359+ let eY = (eX - eK[at])
1360+ if ((0 > eY))
1361+ then an(("Enroll amount negative for asset" + aS))
1362+ else {
1363+ let dI = if ((eY > 0))
1364+ then invoke(W, "airDrop", nil, [AttachedPayment(eW, eY)])
1365+ else 0
1366+ if ((dI == dI))
1367+ then $Tuple2((eV + eY), (at + 1))
1368+ else throw("Strict value is not equal to itself.")
1369+ }
13551370 }
1356- }
13571371
1358- let dZ = {
1359- let aQ = aj
1360- let aR = size(aQ)
1361- let aS = $Tuple2(0, 0)
1362- func aT (aU,aV) = if ((aV >= aR))
1363- then aU
1364- else eP(aU, aQ[aV])
1372+ let ec = {
1373+ let aT = al
1374+ let aU = size(aT)
1375+ let aV = $Tuple2(0, 0)
1376+ func aW (aX,aY) = if ((aY >= aU))
1377+ then aX
1378+ else eT(aX, aT[aY])
13651379
1366- func aW (aU,aV) = if ((aV >= aR))
1367- then aU
1368- else throw("List size exceeds 10")
1380+ func aZ (aX,aY) = if ((aY >= aU))
1381+ then aX
1382+ else throw("List size exceeds 10")
13691383
1370- aW(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
1371- }
1372- if ((dZ._1 == 0))
1373- then throw("No money to take")
1374- else nil
1375- })
1384+ aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
1385+ }
1386+ if ((ec._1 == 0))
1387+ then throw("No money to take")
1388+ else nil
1389+ }
1390+ else throw("Strict value is not equal to itself.")
1391+ })
13761392
13771393
1378-@Verifier(eV)
1379-func eW () = {
1380- let eX = {
1381- let eY = if (sigVerify(eV.bodyBytes, eV.proofs[0], M))
1394+@Verifier(eZ)
1395+func fa () = {
1396+ let fb = {
1397+ let fc = if (sigVerify(eZ.bodyBytes, eZ.proofs[0], N))
13821398 then 1
13831399 else 0
1384- let eZ = if (sigVerify(eV.bodyBytes, eV.proofs[1], N))
1400+ let fd = if (sigVerify(eZ.bodyBytes, eZ.proofs[1], O))
13851401 then 1
13861402 else 0
1387- let fa = if (sigVerify(eV.bodyBytes, eV.proofs[2], O))
1403+ let fe = if (sigVerify(eZ.bodyBytes, eZ.proofs[2], P))
13881404 then 1
13891405 else 0
1390- (((eY + eZ) + fa) >= 2)
1406+ (((fc + fd) + fe) >= 2)
13911407 }
1392- let J = eV
1393- if ($isInstanceOf(J, "InvokeScriptTransaction"))
1408+ let K = eZ
1409+ if ($isInstanceOf(K, "InvokeScriptTransaction"))
13941410 then {
1395- let ei = J
1396- let fb = if ((ei.dApp == this))
1397- then (ei.function == "takeIntoAccountExtraFunds")
1411+ let el = K
1412+ let ff = if ((el.dApp == this))
1413+ then (el.function == "takeIntoAccountExtraFunds")
13981414 else false
1399- let fc = if (if (if (sigVerify(eV.bodyBytes, eV.proofs[0], M))
1415+ let fg = if (if (if (sigVerify(eZ.bodyBytes, eZ.proofs[0], N))
14001416 then true
1401- else sigVerify(eV.bodyBytes, eV.proofs[0], N))
1417+ else sigVerify(eZ.bodyBytes, eZ.proofs[0], O))
14021418 then true
1403- else sigVerify(eV.bodyBytes, eV.proofs[0], O))
1419+ else sigVerify(eZ.bodyBytes, eZ.proofs[0], P))
14041420 then true
1405- else sigVerify(eV.bodyBytes, eV.proofs[0], P)
1406- if (if (fb)
1407- then fc
1421+ else sigVerify(eZ.bodyBytes, eZ.proofs[0], Q)
1422+ if (if (ff)
1423+ then fg
14081424 else false)
14091425 then true
1410- else eX
1426+ else fb
14111427 }
1412- else eX
1428+ else fb
14131429 }
14141430
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
26-let l = "shutdown_cause"
26+let l = "deprecated_"
2727
28-let m = "share_asset_id"
28+let m = "shutdown_cause"
2929
30-let n = "share_asset_supply"
30+let n = "share_asset_id"
3131
32-let o = "commission"
32+let o = "share_asset_supply"
3333
34-let p = "dAppThresholdCoef"
34+let p = "commission"
3535
36-let q = "staking_usdnnsbt_address"
36+let q = "dAppThresholdCoef"
3737
38-let r = "discounts"
38+let r = "staking_usdnnsbt_address"
3939
40-let s = "discount_values"
40+let s = "discounts"
4141
42-let t = "_SWOP_amount"
42+let t = "discount_values"
4343
44-let u = "_GSwop_amount"
44+let u = "_SWOP_amount"
4545
46-let v = "admin_pub_1"
46+let v = "_GSwop_amount"
4747
48-let w = "admin_pub_2"
48+let w = "admin_pub_1"
4949
50-let x = "admin_pub_3"
50+let x = "admin_pub_2"
5151
52-let y = "admin_invoke_pub"
52+let y = "admin_pub_3"
5353
54-let z = "money_box_address"
54+let z = "admin_invoke_pub"
5555
56-let B = "governance_address"
56+let B = "money_box_address"
5757
58-let C = "voting_address"
58+let C = "governance_address"
5959
60-let E = "farming_address"
60+let E = "voting_address"
6161
62-let F = "lp_farming"
62+let F = "farming_address"
6363
64-let G = Address(base58'3MvVBtsXroQpy1tsPw21TU2ET9A8WfmrNjz')
64+let G = "lp_farming"
6565
66-func H (I) = {
67- let J = getString(G, I)
68- if ($isInstanceOf(J, "String"))
66+let H = Address(base58'3MvVBtsXroQpy1tsPw21TU2ET9A8WfmrNjz')
67+
68+func I (J) = {
69+ let K = getString(H, J)
70+ if ($isInstanceOf(K, "String"))
6971 then {
70- let K = J
71- fromBase58String(K)
72+ let L = K
73+ fromBase58String(L)
7274 }
7375 else {
74- let L = J
75- throw((I + "is empty"))
76+ let M = K
77+ throw((J + "is empty"))
7678 }
7779 }
7880
7981
80-let M = H(v)
82+let N = I(w)
8183
82-let N = H(w)
84+let O = I(x)
8385
84-let O = H(x)
86+let P = I(y)
8587
86-let P = H(y)
88+let Q = I(z)
8789
88-let Q = Address(H(z))
90+let R = Address(I(B))
8991
90-let R = Address(H(B))
92+let S = Address(I(C))
9193
92-let S = Address(H(q))
94+let T = Address(I(r))
9395
94-let T = Address(H(C))
96+let U = Address(I(E))
9597
96-let U = Address(H(E))
98+let V = Address(I(F))
9799
98-let V = Address(H(F))
100+let W = Address(I(G))
99101
100-let W = base58'8UrfDVd5GreeUwm7uPk7eYz1eMv376kzR52C6sANPkwS'
102+let X = base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p'
101103
102-let X = [toBase58String(W)]
104+let Y = [toBase58String(X)]
103105
104-let Y = getBooleanValue(this, j)
106+let Z = getBooleanValue(this, j)
105107
106-let Z = valueOrElse(getBoolean(G, k), true)
108+let aa = valueOrElse(getBoolean(H, k), true)
107109
108-let aa = fromBase58String(getStringValue(this, m))
110+let ab = valueOrElse(getBoolean(H, (l + toString(this))), false)
109111
110-let ab = getIntegerValue(this, n)
111-
112-let ac = 1000000
112+let ac = fromBase58String(getStringValue(this, n))
113113
114114 let ad = getIntegerValue(this, o)
115115
116-let ae = fraction(40, ac, 100)
116+let ae = 1000000
117117
118-let af = getIntegerValue(this, "initial_A")
118+let af = getIntegerValue(this, p)
119119
120-let ag = getIntegerValue(this, "future_A")
120+let ag = fraction(40, ae, 100)
121121
122-let ah = valueOrElse(getInteger(this, "initial_A_time"), 0)
122+let ah = getIntegerValue(this, "initial_A")
123123
124-let ai = valueOrElse(getInteger(this, "future_A_time"), 0)
124+let ai = getIntegerValue(this, "future_A")
125125
126-let aj = split(getStringValue(this, h), ",")
126+let aj = valueOrElse(getInteger(this, "initial_A_time"), 0)
127127
128-let ak = size(aj)
128+let ak = valueOrElse(getInteger(this, "future_A_time"), 0)
129129
130-func al (am) = [BooleanEntry(j, false), StringEntry(l, am)]
130+let al = split(getStringValue(this, h), ",")
131+
132+let am = size(al)
133+
134+func an (ao) = [BooleanEntry(j, false), StringEntry(m, ao)]
131135
132136
133-func an () = throw("DApp is already active")
137+func ap () = throw("DApp is already active")
134138
135139
136-func ao () = if (if (Y)
137- then Z
140+func aq () = if (if (Z)
141+ then aa
138142 else false)
139143 then unit
140144 else throw("DApp is inactive at this moment")
141145
142146
143-func ap (aq) = if (containsElement([M, N, O], aq.callerPublicKey))
147+func ar () = if (!(ab))
148+ then unit
149+ else throw("Pool is deprecated. Only withdraw action allowed.")
150+
151+
152+func as (at) = if (containsElement([N, O, P], at.callerPublicKey))
144153 then unit
145154 else throw("Only admin can call this function")
146155
147156
148-func ar (aq) = if ((this == aq.caller))
157+func au (at) = if ((this == at.caller))
149158 then unit
150159 else throw("Only contract itself can call this function")
151160
152161
153-let as = toBigInt(2)
162+let av = toBigInt(2)
154163
155-let at = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
164+let aw = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
156165
157-let au = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
166+let ax = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
158167
159-let av = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
168+let ay = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
160169
161-let aw = height
170+let az = height
162171
163-func ax (ay) = if (ay)
172+func aA (aB) = if (aB)
164173 then false
165174 else true
166175
167176
168-func az (aA) = {
169- let aB = {
170- let J = aA
171- if ($isInstanceOf(J, "Address"))
177+func aC (aD) = {
178+ let aE = {
179+ let K = aD
180+ if ($isInstanceOf(K, "Address"))
172181 then {
173- let aC = J
174- toString(aC)
182+ let aF = K
183+ toString(aF)
175184 }
176- else if ($isInstanceOf(J, "String"))
185+ else if ($isInstanceOf(K, "String"))
177186 then {
178- let aC = J
179- aC
187+ let aF = K
188+ aF
180189 }
181190 else throw("Unknow type of user Addr")
182191 }
183- let aD = valueOrElse(getInteger(R, (aB + u)), 0)
184- let aE = valueOrElse(getInteger(R, (aB + u)), aD)
185- let aF = split(getStringValue(G, s), ",")
186- let aG = split(getStringValue(G, r), ",")
187- if (if ((aE >= parseIntValue(aF[0])))
188- then (parseIntValue(aF[1]) > aE)
192+ let aG = valueOrElse(getInteger(S, (aE + v)), 0)
193+ let aH = valueOrElse(getInteger(S, (aE + v)), aG)
194+ let aI = split(getStringValue(H, t), ",")
195+ let aJ = split(getStringValue(H, s), ",")
196+ if (if ((aH >= parseIntValue(aI[0])))
197+ then (parseIntValue(aI[1]) > aH)
189198 else false)
190- then (ac - parseIntValue(aG[0]))
191- else if (if ((aE >= parseIntValue(aF[1])))
192- then (parseIntValue(aF[2]) > aE)
199+ then (ae - parseIntValue(aJ[0]))
200+ else if (if ((aH >= parseIntValue(aI[1])))
201+ then (parseIntValue(aI[2]) > aH)
193202 else false)
194- then (ac - parseIntValue(aG[1]))
195- else if (if ((aE >= parseIntValue(aF[2])))
196- then (parseIntValue(aF[3]) > aE)
203+ then (ae - parseIntValue(aJ[1]))
204+ else if (if ((aH >= parseIntValue(aI[2])))
205+ then (parseIntValue(aI[3]) > aH)
197206 else false)
198- then (ac - parseIntValue(aG[2]))
199- else if (if ((aE >= parseIntValue(aF[3])))
200- then (parseIntValue(aF[4]) > aE)
207+ then (ae - parseIntValue(aJ[2]))
208+ else if (if ((aH >= parseIntValue(aI[3])))
209+ then (parseIntValue(aI[4]) > aH)
201210 else false)
202- then (ac - parseIntValue(aG[3]))
203- else if ((aE >= parseIntValue(aF[4])))
204- then (ac - parseIntValue(aG[4]))
205- else ac
211+ then (ae - parseIntValue(aJ[3]))
212+ else if ((aH >= parseIntValue(aI[4])))
213+ then (ae - parseIntValue(aJ[4]))
214+ else ae
206215 }
207216
208217
209-func aH () = {
210- let aI = ai
211- let aJ = ag
212- if ((aI > aw))
218+func aK () = {
219+ let aL = ak
220+ let aM = ai
221+ if ((aL > az))
213222 then {
214- let aK = af
215- let aL = ah
216- if ((aJ > aK))
217- then (aK + (((aJ - aK) * (aw - aL)) / (aI - aL)))
218- else (aK - (((aK - aJ) * (aw - aL)) / (aI - aL)))
223+ let aN = ah
224+ let aO = aj
225+ if ((aM > aN))
226+ then (aN + (((aM - aN) * (az - aO)) / (aL - aO)))
227+ else (aN - (((aN - aM) * (az - aO)) / (aL - aO)))
219228 }
220- else aJ
229+ else aM
221230 }
222231
223232
224-func aM () = {
225- func aN (aO,aP) = (aO :+ valueOrElse(getInteger(this, (aP + i)), 0))
233+func aP () = {
234+ func aQ (aR,aS) = (aR :+ valueOrElse(getInteger(this, (aS + i)), 0))
226235
227- let aQ = aj
228- let aR = size(aQ)
229- let aS = nil
230- func aT (aU,aV) = if ((aV >= aR))
231- then aU
232- else aN(aU, aQ[aV])
236+ let aT = al
237+ let aU = size(aT)
238+ let aV = nil
239+ func aW (aX,aY) = if ((aY >= aU))
240+ then aX
241+ else aQ(aX, aT[aY])
233242
234- func aW (aU,aV) = if ((aV >= aR))
235- then aU
243+ func aZ (aX,aY) = if ((aY >= aU))
244+ then aX
236245 else throw("List size exceeds 10")
237246
238- aW(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
247+ aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
239248 }
240249
241250
242-func aX (aY) = aY
251+func ba (bb) = bb
243252
244253
245-func aZ (aO,ba) = (aO + ba)
254+func bc (aR,bd) = (aR + bd)
246255
247256
248-func bb (aY,bc) = {
249- let bd = invoke(this, "D", [aY, bc], nil)
250- if ($isInstanceOf(bd, "Int"))
251- then bd
252- else throw(($getType(bd) + " couldn't be cast to Int"))
257+func be (bb,bf) = {
258+ let bg = invoke(this, "D", [bb, bf], nil)
259+ if ($isInstanceOf(bg, "Int"))
260+ then bg
261+ else throw(($getType(bg) + " couldn't be cast to Int"))
253262 }
254263
255264
256-func be (aY,bc) = {
257- let bf = {
258- let aQ = aY
259- let aR = size(aQ)
260- let aS = 0
261- func aT (aU,aV) = if ((aV >= aR))
262- then aU
263- else aZ(aU, aQ[aV])
265+func bh (bb,bf) = {
266+ let bi = {
267+ let aT = bb
268+ let aU = size(aT)
269+ let aV = 0
270+ func aW (aX,aY) = if ((aY >= aU))
271+ then aX
272+ else bc(aX, aT[aY])
264273
265- func aW (aU,aV) = if ((aV >= aR))
266- then aU
274+ func aZ (aX,aY) = if ((aY >= aU))
275+ then aX
267276 else throw("List size exceeds 10")
268277
269- aW(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
278+ aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
270279 }
271- if ((bf == 0))
280+ if ((bi == 0))
272281 then 0
273282 else {
274- let bg = (bc * ak)
275- let bh = (toBigInt(bg) * toBigInt(bf))
276- let bi = toBigInt((bg - 1))
277- func bj (aO,aq) = if ((aO._2 == true))
278- then aO
283+ let bj = (bf * am)
284+ let bk = (toBigInt(bj) * toBigInt(bi))
285+ let bl = toBigInt((bj - 1))
286+ func bm (aR,at) = if ((aR._2 == true))
287+ then aR
279288 else {
280- let bk = aO._1
281- func bl (bm,aq) = if ((ak > aq))
282- then ((bm * bk) / (toBigInt(aY[aq]) * toBigInt(ak)))
283- else bm
289+ let bn = aR._1
290+ func bo (bp,at) = if ((am > at))
291+ then ((bp * bn) / (toBigInt(bb[at]) * toBigInt(am)))
292+ else bp
284293
285- let bm = {
286- let aQ = at
287- let aR = size(aQ)
288- let aS = bk
289- func bn (aU,aV) = if ((aV >= aR))
290- then aU
291- else bl(aU, aQ[aV])
294+ let bp = {
295+ let aT = aw
296+ let aU = size(aT)
297+ let aV = bn
298+ func bq (aX,aY) = if ((aY >= aU))
299+ then aX
300+ else bo(aX, aT[aY])
292301
293- func bo (aU,aV) = if ((aV >= aR))
294- then aU
302+ func br (aX,aY) = if ((aY >= aU))
303+ then aX
295304 else throw("List size exceeds 10")
296305
297- bo(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
306+ br(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
298307 }
299- let bp = fraction((bh + (toBigInt(ak) * bm)), bk, ((bi * bk) + (toBigInt((ak + 1)) * bm)))
300- if ((bp > bk))
301- then if ((1 >= toInt((bp - bk))))
302- then $Tuple2(bp, true)
303- else $Tuple2(bp, false)
304- else if ((1 >= toInt((bk - bp))))
305- then $Tuple2(bp, true)
306- else $Tuple2(bp, false)
308+ let bs = fraction((bk + (toBigInt(am) * bp)), bn, ((bl * bn) + (toBigInt((am + 1)) * bp)))
309+ if ((bs > bn))
310+ then if ((1 >= toInt((bs - bn))))
311+ then $Tuple2(bs, true)
312+ else $Tuple2(bs, false)
313+ else if ((1 >= toInt((bn - bs))))
314+ then $Tuple2(bs, true)
315+ else $Tuple2(bs, false)
307316 }
308317
309- let bq = {
310- let aQ = au
311- let aR = size(aQ)
312- let aS = $Tuple2(toBigInt(bf), false)
313- func bn (aU,aV) = if ((aV >= aR))
314- then aU
315- else bj(aU, aQ[aV])
318+ let bt = {
319+ let aT = ax
320+ let aU = size(aT)
321+ let aV = $Tuple2(toBigInt(bi), false)
322+ func bq (aX,aY) = if ((aY >= aU))
323+ then aX
324+ else bm(aX, aT[aY])
316325
317- func bo (aU,aV) = if ((aV >= aR))
318- then aU
326+ func br (aX,aY) = if ((aY >= aU))
327+ then aX
319328 else throw("List size exceeds 15")
320329
321- bo(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
330+ 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)
322331 }
323- let bp = bq._1
324- let br = bq._2
325- if ((br == false))
326- then throw(("get_D() not finished with " + toString(bp)))
327- else toInt(bp)
332+ let bs = bt._1
333+ let bu = bt._2
334+ if ((bu == false))
335+ then throw(("get_D() not finished with " + toString(bs)))
336+ else toInt(bs)
328337 }
329338 }
330339
331340
332-func bs (aY,bc) = bb(aX(aY), bc)
341+func bv (bb,bf) = be(ba(bb), bf)
333342
334343
335-func bt (bu,bv,bw,bx) = if (ax((bu != bv)))
344+func bw (bx,by,bz,bA) = if (aA((bx != by)))
336345 then throw("same coin")
337- else if (ax(if ((bv >= 0))
338- then (bu >= 0)
346+ else if (aA(if ((by >= 0))
347+ then (bx >= 0)
339348 else false))
340349 then throw("below zero")
341- else if (ax(if ((ak > bv))
342- then (ak > bu)
350+ else if (aA(if ((am > by))
351+ then (am > bx)
343352 else false))
344353 then throw("above N_COINS")
345354 else {
346- let bc = aH()
347- let bp = bb(bx, bc)
348- let bg = (bc * ak)
349- func by (aO,aq) = {
350- let bz = aO
351- let bA = bz._1
352- let bB = bz._2
353- let bC = if ((bu == aq))
354- then bw
355- else bx[aq]
356- if (if ((aq != bv))
357- then (ak > aq)
355+ let bf = aK()
356+ let bs = be(bA, bf)
357+ let bj = (bf * am)
358+ func bB (aR,at) = {
359+ let bC = aR
360+ let bD = bC._1
361+ let bE = bC._2
362+ let bF = if ((bx == at))
363+ then bz
364+ else bA[at]
365+ if (if ((at != by))
366+ then (am > at)
358367 else false)
359- then $Tuple2((bA + bC), fraction(bB, toBigInt(bp), toBigInt((bC * ak))))
360- else $Tuple2(bA, bB)
368+ then $Tuple2((bD + bF), fraction(bE, toBigInt(bs), toBigInt((bF * am))))
369+ else $Tuple2(bD, bE)
361370 }
362371
363- let bD = {
364- let aQ = at
365- let aR = size(aQ)
366- let aS = $Tuple2(0, toBigInt(bp))
367- func aT (aU,aV) = if ((aV >= aR))
368- then aU
369- else by(aU, aQ[aV])
372+ let bG = {
373+ let aT = aw
374+ let aU = size(aT)
375+ let aV = $Tuple2(0, toBigInt(bs))
376+ func aW (aX,aY) = if ((aY >= aU))
377+ then aX
378+ else bB(aX, aT[aY])
370379
371- func aW (aU,aV) = if ((aV >= aR))
372- then aU
380+ func aZ (aX,aY) = if ((aY >= aU))
381+ then aX
373382 else throw("List size exceeds 10")
374383
375- aW(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
384+ aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
376385 }
377- let bA = bD._1
378- let bE = bD._2
379- let bB = fraction(bE, toBigInt(bp), toBigInt((bg * ak)))
380- let bF = toBigInt(((bA + (bp / bg)) - bp))
381- func bG (aO,bH) = if ((aO._2 == true))
382- then aO
386+ let bD = bG._1
387+ let bH = bG._2
388+ let bE = fraction(bH, toBigInt(bs), toBigInt((bj * am)))
389+ let bI = toBigInt(((bD + (bs / bj)) - bs))
390+ func bJ (aR,bK) = if ((aR._2 == true))
391+ then aR
383392 else {
384- let bI = aO._1
385- let bJ = (((bI * bI) + bB) / ((as * bI) + bF))
386- if ((bJ > bI))
387- then if ((1 >= toInt((bJ - bI))))
388- then $Tuple2(bJ, true)
389- else $Tuple2(bJ, false)
390- else if ((1 >= toInt((bI - bJ))))
391- then $Tuple2(bJ, true)
392- else $Tuple2(bJ, false)
393+ let bL = aR._1
394+ let bM = (((bL * bL) + bE) / ((av * bL) + bI))
395+ if ((bM > bL))
396+ then if ((1 >= toInt((bM - bL))))
397+ then $Tuple2(bM, true)
398+ else $Tuple2(bM, false)
399+ else if ((1 >= toInt((bL - bM))))
400+ then $Tuple2(bM, true)
401+ else $Tuple2(bM, false)
393402 }
394403
395- let bK = {
396- let aQ = av
397- let aR = size(aQ)
398- let aS = $Tuple2(toBigInt(bp), false)
399- func bn (aU,aV) = if ((aV >= aR))
400- then aU
401- else bG(aU, aQ[aV])
404+ let bN = {
405+ let aT = ay
406+ let aU = size(aT)
407+ let aV = $Tuple2(toBigInt(bs), false)
408+ func bq (aX,aY) = if ((aY >= aU))
409+ then aX
410+ else bJ(aX, aT[aY])
402411
403- func bo (aU,aV) = if ((aV >= aR))
404- then aU
412+ func br (aX,aY) = if ((aY >= aU))
413+ then aX
405414 else throw("List size exceeds 16")
406415
407- bo(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16)
416+ 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)
408417 }
409- let bJ = bK._1
410- let br = bK._2
411- if ((br == false))
412- then throw(("getY() not finished with " + toString(bJ)))
413- else toInt(bJ)
418+ let bM = bN._1
419+ let bu = bN._2
420+ if ((bu == false))
421+ then throw(("getY() not finished with " + toString(bM)))
422+ else toInt(bM)
414423 }
415424
416425
417-func bL (bM,bu,aY,bp) = if (ax((bu >= 0)))
426+func bO (bP,bx,bb,bs) = if (aA((bx >= 0)))
418427 then throw("i below zero")
419- else if (ax((ak > bu)))
428+ else if (aA((am > bx)))
420429 then throw("i above N_COINS")
421430 else {
422- let bg = (bM * ak)
423- func by (aO,aq) = {
424- let bN = aO
425- let bA = bN._1
426- let bB = bN._2
427- let bC = if (if ((bu != aq))
428- then (ak > aq)
431+ let bj = (bP * am)
432+ func bB (aR,at) = {
433+ let bQ = aR
434+ let bD = bQ._1
435+ let bE = bQ._2
436+ let bF = if (if ((bx != at))
437+ then (am > at)
429438 else false)
430- then aY[aq]
439+ then bb[at]
431440 else 0
432- if (if ((ak > aq))
433- then (bu != aq)
441+ if (if ((am > at))
442+ then (bx != at)
434443 else false)
435- then $Tuple2((bA + bC), fraction(bB, toBigInt(bp), toBigInt((bC * ak))))
436- else $Tuple2(bA, bB)
444+ then $Tuple2((bD + bF), fraction(bE, toBigInt(bs), toBigInt((bF * am))))
445+ else $Tuple2(bD, bE)
437446 }
438447
439- let bO = {
440- let aQ = at
441- let aR = size(aQ)
442- let aS = $Tuple2(0, toBigInt(bp))
443- func aT (aU,aV) = if ((aV >= aR))
444- then aU
445- else by(aU, aQ[aV])
448+ let bR = {
449+ let aT = aw
450+ let aU = size(aT)
451+ let aV = $Tuple2(0, toBigInt(bs))
452+ func aW (aX,aY) = if ((aY >= aU))
453+ then aX
454+ else bB(aX, aT[aY])
446455
447- func aW (aU,aV) = if ((aV >= aR))
448- then aU
456+ func aZ (aX,aY) = if ((aY >= aU))
457+ then aX
449458 else throw("List size exceeds 10")
450459
451- aW(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
460+ aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
452461 }
453- let bA = bO._1
454- let bE = bO._2
455- let bB = fraction(bE, toBigInt(bp), toBigInt((bg * ak)))
456- let bF = toBigInt(((bA + (bp / bg)) - bp))
457- func bP (aO,aq) = if ((aO._2 == true))
458- then aO
462+ let bD = bR._1
463+ let bH = bR._2
464+ let bE = fraction(bH, toBigInt(bs), toBigInt((bj * am)))
465+ let bI = toBigInt(((bD + (bs / bj)) - bs))
466+ func bS (aR,at) = if ((aR._2 == true))
467+ then aR
459468 else {
460- let bI = aO._1
461- let bJ = (((bI * bI) + bB) / ((as * bI) + bF))
462- if ((bJ > bI))
463- then if ((1 >= toInt((bJ - bI))))
464- then $Tuple2(bJ, true)
465- else $Tuple2(bJ, false)
466- else if ((1 >= toInt((bI - bJ))))
467- then $Tuple2(bJ, true)
468- else $Tuple2(bJ, false)
469+ let bL = aR._1
470+ let bM = (((bL * bL) + bE) / ((av * bL) + bI))
471+ if ((bM > bL))
472+ then if ((1 >= toInt((bM - bL))))
473+ then $Tuple2(bM, true)
474+ else $Tuple2(bM, false)
475+ else if ((1 >= toInt((bL - bM))))
476+ then $Tuple2(bM, true)
477+ else $Tuple2(bM, false)
469478 }
470479
471- let bQ = {
472- let aQ = av
473- let aR = size(aQ)
474- let aS = $Tuple2(toBigInt(bp), false)
475- func bn (aU,aV) = if ((aV >= aR))
476- then aU
477- else bP(aU, aQ[aV])
480+ let bT = {
481+ let aT = ay
482+ let aU = size(aT)
483+ let aV = $Tuple2(toBigInt(bs), false)
484+ func bq (aX,aY) = if ((aY >= aU))
485+ then aX
486+ else bS(aX, aT[aY])
478487
479- func bo (aU,aV) = if ((aV >= aR))
480- then aU
488+ func br (aX,aY) = if ((aY >= aU))
489+ then aX
481490 else throw("List size exceeds 16")
482491
483- bo(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16)
492+ 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)
484493 }
485- let bJ = bQ._1
486- let br = bQ._2
487- if ((br == false))
488- then throw(("get_y_D() not finished with " + toString(bJ)))
489- else toInt(bJ)
494+ let bM = bT._1
495+ let bu = bT._2
496+ if ((bu == false))
497+ then throw(("get_y_D() not finished with " + toString(bM)))
498+ else toInt(bM)
490499 }
491500
492501
493-func bR (aY,bS,aq,bT) = {
494- let bU = az(bT)
495- let bc = aH()
496- let bV = ((fraction(ad, bU, ac, CEILING) * ak) / (4 * (ak - 1)))
497- let bW = ab
498- let bX = bb(aY, bc)
499- let bY = (bX - fraction(bS, bX, bW))
500- let bZ = bL(bc, aq, aY, bY)
501- let ca = (aY[aq] - bZ)
502- func cb (aO,cc) = {
503- let cd = aO
504- let ce = cd._1
505- let cf = cd._2
506- let cg = if ((cf == aq))
507- then (fraction(cc, bY, bX) - bZ)
508- else (cc - fraction(cc, bY, bX))
509- $Tuple2((ce :+ (cc - fraction(bV, cg, ac))), (cf + 1))
502+func bU (bb,bV,at,bW) = {
503+ let bX = aC(bW)
504+ let bf = aK()
505+ let bY = ((fraction(af, bX, ae, CEILING) * am) / (4 * (am - 1)))
506+ let bZ = ad
507+ let ca = be(bb, bf)
508+ let cb = (ca - fraction(bV, ca, bZ))
509+ let cc = bO(bf, at, bb, cb)
510+ let cd = (bb[at] - cc)
511+ func ce (aR,cf) = {
512+ let cg = aR
513+ let ch = cg._1
514+ let ci = cg._2
515+ let cj = if ((ci == at))
516+ then (fraction(cf, cb, ca) - cc)
517+ else (cf - fraction(cf, cb, ca))
518+ $Tuple2((ch :+ (cf - fraction(bY, cj, ae))), (ci + 1))
510519 }
511520
512- let ch = {
513- let aQ = aY
514- let aR = size(aQ)
515- let aS = $Tuple2(nil, 0)
516- func aT (aU,aV) = if ((aV >= aR))
517- then aU
518- else cb(aU, aQ[aV])
521+ let ck = {
522+ let aT = bb
523+ let aU = size(aT)
524+ let aV = $Tuple2(nil, 0)
525+ func aW (aX,aY) = if ((aY >= aU))
526+ then aX
527+ else ce(aX, aT[aY])
519528
520- func aW (aU,aV) = if ((aV >= aR))
521- then aU
529+ func aZ (aX,aY) = if ((aY >= aU))
530+ then aX
522531 else throw("List size exceeds 10")
523532
524- aW(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
533+ aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
525534 }
526- let ce = ch._1
527- let cf = ch._2
528- let ci = ce[aq]
529- let cj = ((ci - bL(bc, aq, ce, bY)) - 1)
530- $Tuple2(cj, (ca - cj))
535+ let ch = ck._1
536+ let ci = ck._2
537+ let cl = ch[at]
538+ let cm = ((cl - bO(bf, at, ch, cb)) - 1)
539+ $Tuple2(cm, (cd - cm))
531540 }
532541
533542
534-func ck (aP) = {
535- let J = aP
536- if ($isInstanceOf(J, "ByteVector"))
543+func cn (aS) = {
544+ let K = aS
545+ if ($isInstanceOf(K, "ByteVector"))
537546 then {
538- let cl = J
539- toBase58String(cl)
547+ let co = K
548+ toBase58String(co)
540549 }
541- else if ($isInstanceOf(J, "Unit"))
550+ else if ($isInstanceOf(K, "Unit"))
542551 then {
543- let cm = J
552+ let cp = K
544553 "WAVES"
545554 }
546555 else throw("Match error")
547556 }
548557
549558
550-func cn (co,aP) = if (co)
551- then $Tuple2("lockNeutrino", S)
552- else $Tuple2("unlockNeutrino", S)
559+func cq (cr,aS) = if (cr)
560+ then $Tuple2("lockNeutrino", T)
561+ else $Tuple2("unlockNeutrino", T)
553562
554563
555-func cp (co,cq,aP) = if (co)
564+func cs (cr,ct,aS) = if (cr)
556565 then {
557- let cr = cn(co, aP)
558- let cs = cr._1
559- let ct = cr._2
560- $Tuple4(cs, ct, nil, [AttachedPayment(aP, cq)])
566+ let cu = cq(cr, aS)
567+ let cv = cu._1
568+ let cw = cu._2
569+ $Tuple4(cv, cw, nil, [AttachedPayment(aS, ct)])
561570 }
562571 else {
563- let cu = cn(co, aP)
564- let cs = cu._1
565- let ct = cu._2
566- $Tuple4(cs, ct, [cq, toBase58String(aP)], nil)
572+ let cx = cq(cr, aS)
573+ let cv = cx._1
574+ let cw = cx._2
575+ $Tuple4(cv, cw, [ct, toBase58String(aS)], nil)
567576 }
568577
569578
570-func co (cq,cv) = if (containsElement(X, cv))
579+func cr (ct,cy) = if (containsElement(Y, cy))
571580 then {
572- let cw = cp(true, cq, fromBase58String(cv))
573- let cs = cw._1
574- let cx = cw._2
575- let cy = cw._3
576- let cz = cw._4
577- invoke(cx, cs, cy, cz)
581+ let cz = cs(true, ct, fromBase58String(cy))
582+ let cv = cz._1
583+ let cA = cz._2
584+ let cB = cz._3
585+ let cC = cz._4
586+ invoke(cA, cv, cB, cC)
578587 }
579588 else 0
580589
581590
582-func cA (cq,cv) = if (containsElement(X, cv))
591+func cD (ct,cy) = if (containsElement(Y, cy))
583592 then {
584- let cB = cp(false, cq, fromBase58String(cv))
585- let cs = cB._1
586- let cx = cB._2
587- let cy = cB._3
588- let cz = cB._4
589- invoke(cx, cs, cy, cz)
593+ let cE = cs(false, ct, fromBase58String(cy))
594+ let cv = cE._1
595+ let cA = cE._2
596+ let cB = cE._3
597+ let cC = cE._4
598+ invoke(cA, cv, cB, cC)
590599 }
591600 else 0
592601
593602
594-func cC (aP) = {
595- let cD = {
596- let J = aP
597- if ($isInstanceOf(J, "ByteVector"))
603+func cF (aS) = {
604+ let cG = {
605+ let K = aS
606+ if ($isInstanceOf(K, "ByteVector"))
598607 then {
599- let cE = J
600- if ((cE == W))
601- then getInteger(S, ((("rpd_balance_" + toBase58String(cE)) + "_") + toString(this)))
608+ let cH = K
609+ if ((cH == X))
610+ then getInteger(T, ((("rpd_balance_" + toBase58String(cH)) + "_") + toString(this)))
602611 else 0
603612 }
604- else if ($isInstanceOf(J, "Unit"))
613+ else if ($isInstanceOf(K, "Unit"))
605614 then 0
606615 else throw("Match error")
607616 }
608- let J = cD
609- if ($isInstanceOf(J, "Int"))
617+ let K = cG
618+ if ($isInstanceOf(K, "Int"))
610619 then {
611- let aq = J
612- aq
620+ let at = K
621+ at
613622 }
614623 else 0
615624 }
616625
617626
618-func cF () = {
619- let cG = aM()
620- func cH (aO,aP) = {
621- let cI = aO
622- let cJ = cI._1
623- let aq = cI._2
624- if (cJ)
625- then $Tuple2(cJ, aq)
627+func cI () = {
628+ let cJ = aP()
629+ func cK (aR,aS) = {
630+ let cL = aR
631+ let cM = cL._1
632+ let at = cL._2
633+ if (cM)
634+ then $Tuple2(cM, at)
626635 else {
627- let cK = (assetBalance(this, fromBase58String(aP)) + cC(fromBase58String(aP)))
628- if ((cG[aq] > cK))
629- then $Tuple2(true, aq)
630- else $Tuple2(false, (aq + 1))
636+ let cN = (assetBalance(this, fromBase58String(aS)) + cF(fromBase58String(aS)))
637+ if ((cJ[at] > cN))
638+ then $Tuple2(true, at)
639+ else $Tuple2(false, (at + 1))
631640 }
632641 }
633642
634- let aQ = aj
635- let aR = size(aQ)
636- let aS = $Tuple2(false, 0)
637- func aT (aU,aV) = if ((aV >= aR))
638- then aU
639- else cH(aU, aQ[aV])
643+ let aT = al
644+ let aU = size(aT)
645+ let aV = $Tuple2(false, 0)
646+ func aW (aX,aY) = if ((aY >= aU))
647+ then aX
648+ else cK(aX, aT[aY])
640649
641- func aW (aU,aV) = if ((aV >= aR))
642- then aU
650+ func aZ (aX,aY) = if ((aY >= aU))
651+ then aX
643652 else throw("List size exceeds 10")
644653
645- aW(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
654+ aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
646655 }
647656
648657
649-func cL (aq) = al(("Suspicious state with asset: " + aj[aq]))
658+func cO (at) = an(("Suspicious state with asset: " + al[at]))
650659
651660
652-func cM (bT,cz) = {
653- func cN (aO,cO) = (aO :+ ScriptTransfer(bT, cO.amount, cO.assetId))
661+func cP (bW,cC) = {
662+ func cQ (aR,cR) = (aR :+ ScriptTransfer(bW, cR.amount, cR.assetId))
654663
655- let aQ = cz
656- let aR = size(aQ)
657- let aS = nil
658- func aT (aU,aV) = if ((aV >= aR))
659- then aU
660- else cN(aU, aQ[aV])
664+ let aT = cC
665+ let aU = size(aT)
666+ let aV = nil
667+ func aW (aX,aY) = if ((aY >= aU))
668+ then aX
669+ else cQ(aX, aT[aY])
661670
662- func aW (aU,aV) = if ((aV >= aR))
663- then aU
671+ func aZ (aX,aY) = if ((aY >= aU))
672+ then aX
664673 else throw("List size exceeds 10")
665674
666- aW(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
675+ aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
667676 }
668677
669678
670-func cP (cQ) = {
671- let cR = valueOrErrorMessage(getInteger(this, p), "No dAppThresholdCoef key")
672- let cS = 10000
673- let cT = max(cQ)
674- let cU = min(cQ)
675- let cV = fraction(cT, cS, cU)
676- if ((cV > (cR * cS)))
679+func cS (cT) = {
680+ let cU = valueOrErrorMessage(getInteger(this, q), "No dAppThresholdCoef key")
681+ let cV = 10000
682+ let cW = max(cT)
683+ let cX = min(cT)
684+ let cY = fraction(cW, cV, cX)
685+ if ((cY > (cU * cV)))
677686 then throw("New balance in assets of the DApp is less than threshold")
678687 else false
679688 }
680689
681690
682-func cW (aj) = {
683- let cX = split(aj, ",")
684- if ((size(cX) > 10))
691+func cZ (al) = {
692+ let da = split(al, ",")
693+ if ((size(da) > 10))
685694 then throw("To many coins, max coins size 10")
686695 else {
687- func cY (cZ,aP) = {
688- let da = valueOrErrorMessage(fromBase58String(aP), ("fromBase58String: " + aP))
689- let db = valueOrErrorMessage(assetInfo(da), ("assetInfo: " + aP)).decimals
690- if ((db != d))
696+ func db (dc,aS) = {
697+ let dd = valueOrErrorMessage(fromBase58String(aS), ("fromBase58String: " + aS))
698+ let de = valueOrErrorMessage(assetInfo(dd), ("assetInfo: " + aS)).decimals
699+ if ((de != d))
691700 then throw("wrong decimals")
692701 else false
693702 }
694703
695- let aQ = cX
696- let aR = size(aQ)
697- let aS = false
698- func aT (aU,aV) = if ((aV >= aR))
699- then aU
700- else cY(aU, aQ[aV])
704+ let aT = da
705+ let aU = size(aT)
706+ let aV = false
707+ func aW (aX,aY) = if ((aY >= aU))
708+ then aX
709+ else db(aX, aT[aY])
701710
702- func aW (aU,aV) = if ((aV >= aR))
703- then aU
711+ func aZ (aX,aY) = if ((aY >= aU))
712+ then aX
704713 else throw("List size exceeds 10")
705714
706- aW(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
715+ aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
707716 }
708717 }
709718
710719
711-func dc (dd,de,df) = {
712- let cJ = cF()
713- if (cJ._1)
714- then (cL(cJ._2) ++ cM(dd.caller, dd.payments))
720+func df (dg,dh,di) = {
721+ let cM = cI()
722+ if (cM._1)
723+ then (cO(cM._2) ++ cP(dg.caller, dg.payments))
715724 else {
716- let dg = if ((size(dd.payments) > 0))
717- then if ((size(dd.payments) != 1))
725+ let dj = if ((size(dg.payments) > 0))
726+ then if ((size(dg.payments) != 1))
718727 then throw("size(payments) != 1")
719728 else {
720- let dh = dd.payments[0].assetId
721- if ((aa != dh))
729+ let dk = dg.payments[0].assetId
730+ if ((ac != dk))
722731 then throw("unknown payment token")
723- else dd.payments[0].amount
732+ else dg.payments[0].amount
724733 }
725734 else 0
726- let di = (dg + df)
727- func dj (aO,dk) = {
728- let dl = aO
729- let dm = dl._1
730- let aq = dl._2
731- let dn = fraction(dk, di, ab)
732- if (ax((dn >= de[aq])))
735+ let dl = (dj + di)
736+ func dm (aR,dn) = {
737+ let do = aR
738+ let dp = do._1
739+ let at = do._2
740+ let dq = fraction(dn, dl, ad)
741+ if (aA((dq >= dh[at])))
733742 then throw("Withdrawal resulted in fewer coins than expected")
734743 else {
735- let do = cA(dn, aj[aq])
736- if ((do == do))
737- then $Tuple2((dm ++ [IntegerEntry((aj[aq] + i), (dk - dn)), ScriptTransfer(dd.caller, dn, fromBase58String(aj[aq]))]), (aq + 1))
744+ let dr = cD(dq, al[at])
745+ if ((dr == dr))
746+ then $Tuple2((dp ++ [IntegerEntry((al[at] + i), (dn - dq)), ScriptTransfer(dg.caller, dq, fromBase58String(al[at]))]), (at + 1))
738747 else throw("Strict value is not equal to itself.")
739748 }
740749 }
741750
742- let dp = {
743- let aQ = aM()
744- let aR = size(aQ)
745- let aS = $Tuple2(nil, 0)
746- func aT (aU,aV) = if ((aV >= aR))
747- then aU
748- else dj(aU, aQ[aV])
751+ let ds = {
752+ let aT = aP()
753+ let aU = size(aT)
754+ let aV = $Tuple2(nil, 0)
755+ func aW (aX,aY) = if ((aY >= aU))
756+ then aX
757+ else dm(aX, aT[aY])
749758
750- func aW (aU,aV) = if ((aV >= aR))
751- then aU
759+ func aZ (aX,aY) = if ((aY >= aU))
760+ then aX
752761 else throw("List size exceeds 10")
753762
754- aW(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
763+ aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
755764 }
756- let dm = dp._1
757- let aq = dp._2
758- (dm ++ [Burn(aa, di), IntegerEntry(n, (ab - di))])
765+ let dp = ds._1
766+ let at = ds._2
767+ (dp ++ [Burn(ac, dl), IntegerEntry(o, (ad - dl))])
759768 }
760769 }
761770
762771
763-func dq (dd,dr,ds,df) = {
764- let cJ = cF()
765- if (cJ._1)
766- then (cL(cJ._2) ++ cM(dd.originCaller, dd.payments))
772+func dt (dg,du,dv,di) = {
773+ let cM = cI()
774+ if (cM._1)
775+ then (cO(cM._2) ++ cP(dg.originCaller, dg.payments))
767776 else {
768- let dg = if ((size(dd.payments) > 0))
777+ let dj = if ((size(dg.payments) > 0))
769778 then {
770- let dh = dd.payments[0].assetId
771- if ((aa != dh))
779+ let dk = dg.payments[0].assetId
780+ if ((ac != dk))
772781 then throw("unknown payment token")
773- else dd.payments[0].amount
782+ else dg.payments[0].amount
774783 }
775784 else 0
776- let dt = valueOrErrorMessage(indexOf(aj, dr), "unknown token out")
777- let du = fromBase58String(dr)
778- let di = (dg + df)
779- let aY = aM()
780- let dv = bR(aY, di, dt, dd.originCaller)
781- let cj = dv._1
782- let dw = dv._2
783- if (ax((cj >= ds)))
785+ let dw = valueOrErrorMessage(indexOf(al, du), "unknown token out")
786+ let dx = fromBase58String(du)
787+ let dl = (dj + di)
788+ let bb = aP()
789+ let dy = bU(bb, dl, dw, dg.originCaller)
790+ let cm = dy._1
791+ let dz = dy._2
792+ if (aA((cm >= dv)))
784793 then throw("Not enough coins removed")
785794 else {
786- let dx = fraction(dw, ae, ac)
787- let dy = (cj + dw)
788- func dz (aO,dA) = {
789- let dB = aO
790- let cQ = dB._1
791- let aq = dB._2
792- if ((aq == dt))
793- then $Tuple2((cQ :+ (dA - dy)), (aq + 1))
794- else $Tuple2((cQ :+ dA), (aq + 1))
795+ let dA = fraction(dz, ag, ae)
796+ let dB = (cm + dz)
797+ func dC (aR,dD) = {
798+ let dE = aR
799+ let cT = dE._1
800+ let at = dE._2
801+ if ((at == dw))
802+ then $Tuple2((cT :+ (dD - dB)), (at + 1))
803+ else $Tuple2((cT :+ dD), (at + 1))
795804 }
796805
797- let dC = {
798- let aQ = aY
799- let aR = size(aQ)
800- let aS = $Tuple2(nil, 0)
801- func aT (aU,aV) = if ((aV >= aR))
802- then aU
803- else dz(aU, aQ[aV])
806+ let dF = {
807+ let aT = bb
808+ let aU = size(aT)
809+ let aV = $Tuple2(nil, 0)
810+ func aW (aX,aY) = if ((aY >= aU))
811+ then aX
812+ else dC(aX, aT[aY])
804813
805- func aW (aU,aV) = if ((aV >= aR))
806- then aU
814+ func aZ (aX,aY) = if ((aY >= aU))
815+ then aX
807816 else throw("List size exceeds 10")
808817
809- aW(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
818+ aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
810819 }
811- let cQ = dC._1
812- let dD = dC._2
813- if (cP(cQ))
820+ let cT = dF._1
821+ let dG = dF._2
822+ if (cS(cT))
814823 then throw()
815824 else {
816- let do = cA(dy, dr)
817- if ((do == do))
825+ let dr = cD(dB, du)
826+ if ((dr == dr))
818827 then {
819- let dE = (dw - dx)
820- let dF = if ((dE > 0))
821- then invoke(V, "airDrop", nil, [AttachedPayment(du, dE)])
828+ let dH = (dz - dA)
829+ let dI = if ((dH > 0))
830+ then invoke(W, "airDrop", nil, [AttachedPayment(dx, dH)])
822831 else 0
823- if ((dF == dF))
824- then [ScriptTransfer(dd.originCaller, cj, du), IntegerEntry((aj[dt] + i), (aY[dt] - dy)), Burn(aa, di), ScriptTransfer(Q, dx, du), IntegerEntry(n, (ab - di))]
832+ if ((dI == dI))
833+ then [ScriptTransfer(dg.originCaller, cm, dx), IntegerEntry((al[dw] + i), (bb[dw] - dB)), Burn(ac, dl), ScriptTransfer(R, dA, dx), IntegerEntry(o, (ad - dl))]
825834 else throw("Strict value is not equal to itself.")
826835 }
827836 else throw("Strict value is not equal to itself.")
828837 }
829838 }
830839 }
831840 }
832841
833842
834-@Callable(dd)
835-func D (aY,bc) = {
836- let bp = be(aY, bc)
837- $Tuple2([IntegerEntry("D", bp)], bp)
843+@Callable(dg)
844+func D (bb,bf) = {
845+ let bs = bh(bb, bf)
846+ $Tuple2([IntegerEntry("D", bs)], bs)
838847 }
839848
840849
841850
842-@Callable(dd)
843-func init (aj,aH,dG) = if (!(isDataStorageUntouched(this)))
851+@Callable(dg)
852+func init (al,aK,dJ) = if (!(isDataStorageUntouched(this)))
844853 then throw("Already initialized")
845- else if ((0 >= aH))
854+ else if ((0 >= aK))
846855 then throw("Amp must be must > 0")
847- else if ((0 >= dG))
856+ else if ((0 >= dJ))
848857 then throw("dApp Threshold Coef must be > 0")
849858 else {
850- let dH = "s_Multi_USD"
851- let dI = ("ShareToken of SwopFi protocol for MultiStable USD pool at address " + toString(this))
852- let dJ = Issue(dH, dI, 0, 6, true)
853- let dK = calculateAssetId(dJ)
854- if (cW(aj))
859+ let dK = "s_Multi_USD"
860+ let dL = ("ShareToken of SwopFi protocol for MultiStable USD pool at address " + toString(this))
861+ let dM = Issue(dK, dL, 0, 6, true)
862+ let dN = calculateAssetId(dM)
863+ if (cZ(al))
855864 then throw()
856- else [StringEntry(g, f), StringEntry(h, aj), IntegerEntry("initial_A", aH), IntegerEntry("future_A", aH), IntegerEntry(o, getIntegerValue(G, "base_fee_flat")), StringEntry(m, toBase58String(dK)), IntegerEntry(n, 0), IntegerEntry(p, dG), BooleanEntry(j, true), dJ]
865+ 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]
857866 }
858867
859868
860869
861-@Callable(dd)
862-func addLiquidity (dL,dM,dN) = valueOrElse(ao(), {
863- let bc = aH()
864- let aY = aM()
865- let bX = if ((ab == 0))
870+@Callable(dg)
871+func addLiquidity (dO,dP,dQ) = valueOrElse(aq(), valueOrElse(ar(), {
872+ let bf = aK()
873+ let bb = aP()
874+ let ca = if ((ad == 0))
866875 then 0
867- else bs(aY, bc)
868- let dO = if (if ((dN > 0))
869- then (dd.payments[(size(dd.payments) - 1)].assetId == unit)
876+ else bv(bb, bf)
877+ let dR = if (if ((dQ > 0))
878+ then (dg.payments[(size(dg.payments) - 1)].assetId == unit)
870879 else false)
871- then $Tuple2(removeByIndex(dd.payments, (size(dd.payments) - 1)), [dd.payments[(size(dd.payments) - 1)]])
872- else $Tuple2(dd.payments, nil)
873- let cz = dO._1
874- let dP = dO._2
875- let dQ = size(cz)
876- func dR (dS) = if ((dQ > ak))
877- then throw(("payments size > " + toString(ak)))
878- else if ((1 > dQ))
880+ then $Tuple2(removeByIndex(dg.payments, (size(dg.payments) - 1)), [dg.payments[(size(dg.payments) - 1)]])
881+ else $Tuple2(dg.payments, nil)
882+ let cC = dR._1
883+ let dS = dR._2
884+ let dT = size(cC)
885+ func dU (dV) = if ((dT > am))
886+ then throw(("payments size > " + toString(am)))
887+ else if ((1 > dT))
879888 then throw("payments size < 1")
880- else if (if ((ab == 0))
881- then (ak != dQ)
889+ else if (if ((ad == 0))
890+ then (am != dT)
882891 else false)
883892 then throw("initial deposit requires all coins")
884893 else {
885- func dT (aO,cO) = if (containsElement(aj, ck(cO.assetId)))
894+ func dW (aR,cR) = if (containsElement(al, cn(cR.assetId)))
886895 then true
887896 else throw("Invalid asset in payment")
888897
889- let aQ = cz
890- let aR = size(aQ)
891- let aS = false
892- func aT (aU,aV) = if ((aV >= aR))
893- then aU
894- else dT(aU, aQ[aV])
898+ let aT = cC
899+ let aU = size(aT)
900+ let aV = false
901+ func aW (aX,aY) = if ((aY >= aU))
902+ then aX
903+ else dW(aX, aT[aY])
895904
896- func aW (aU,aV) = if ((aV >= aR))
897- then aU
905+ func aZ (aX,aY) = if ((aY >= aU))
906+ then aX
898907 else throw("List size exceeds 10")
899908
900- aW(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
909+ aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
901910 }
902911
903- if (!(dR(dQ)))
912+ if (!(dU(dT)))
904913 then throw()
905914 else {
906- let cJ = cF()
907- if (cJ._1)
908- then (cL(cJ._2) ++ cM(dd.caller, cz))
915+ let cM = cI()
916+ if (cM._1)
917+ then (cO(cM._2) ++ cP(dg.caller, cC))
909918 else {
910- func cN (aO,aP) = {
911- let dU = aO
912- let cQ = dU._1
913- let aq = dU._2
914- func dV (dW,cO) = if ((ck(cO.assetId) == aP))
915- then (dW + cO.amount)
916- else dW
919+ func cQ (aR,aS) = {
920+ let dX = aR
921+ let cT = dX._1
922+ let at = dX._2
923+ func dY (dZ,cR) = if ((cn(cR.assetId) == aS))
924+ then (dZ + cR.amount)
925+ else dZ
917926
918- let dX = {
919- let aQ = cz
920- let aR = size(aQ)
921- let aS = aY[aq]
922- func aT (aU,aV) = if ((aV >= aR))
923- then aU
924- else dV(aU, aQ[aV])
927+ let ea = {
928+ let aT = cC
929+ let aU = size(aT)
930+ let aV = bb[at]
931+ func aW (aX,aY) = if ((aY >= aU))
932+ then aX
933+ else dY(aX, aT[aY])
925934
926- func aW (aU,aV) = if ((aV >= aR))
927- then aU
935+ func aZ (aX,aY) = if ((aY >= aU))
936+ then aX
928937 else throw("List size exceeds 10")
929938
930- aW(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
939+ aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
931940 }
932- $Tuple2((cQ :+ dX), (aq + 1))
941+ $Tuple2((cT :+ ea), (at + 1))
933942 }
934943
935- let dY = {
936- let aQ = aj
937- let aR = size(aQ)
938- let aS = $Tuple2(nil, 0)
939- func aT (aU,aV) = if ((aV >= aR))
940- then aU
941- else cN(aU, aQ[aV])
944+ let eb = {
945+ let aT = al
946+ let aU = size(aT)
947+ let aV = $Tuple2(nil, 0)
948+ func aW (aX,aY) = if ((aY >= aU))
949+ then aX
950+ else cQ(aX, aT[aY])
942951
943- func aW (aU,aV) = if ((aV >= aR))
944- then aU
952+ func aZ (aX,aY) = if ((aY >= aU))
953+ then aX
945954 else throw("List size exceeds 10")
946955
947- aW(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
956+ aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
948957 }
949- let cQ = dY._1
950- let dZ = dY._2
951- if (cP(cQ))
958+ let cT = eb._1
959+ let ec = eb._2
960+ if (cS(cT))
952961 then throw()
953962 else {
954- let bY = bs(cQ, bc)
955- if (ax((bY > bX)))
963+ let cb = bv(cT, bf)
964+ if (aA((cb > ca)))
956965 then throw("D1 > D0")
957966 else {
958- let bU = az(dd.caller)
959- func dj (aO,dW) = {
960- let ea = aO
961- let eb = ea._1
962- let dm = ea._2
963- let aq = ea._3
964- if ((ab > 0))
967+ let bX = aC(dg.caller)
968+ func dm (aR,dZ) = {
969+ let ed = aR
970+ let ee = ed._1
971+ let dp = ed._2
972+ let at = ed._3
973+ if ((ad > 0))
965974 then {
966- let bV = ((fraction(ad, bU, ac, CEILING) * ak) / (4 * (ak - 1)))
967- let ec = {
968- let ed = fraction(bY, aY[aq], bX)
969- let ee = if ((ed > dW))
970- then (ed - dW)
971- else (dW - ed)
972- fraction(bV, ee, ac)
975+ let bY = ((fraction(af, bX, ae, CEILING) * am) / (4 * (am - 1)))
976+ let ef = {
977+ let eg = fraction(cb, bb[at], ca)
978+ let eh = if ((eg > dZ))
979+ then (eg - dZ)
980+ else (dZ - eg)
981+ fraction(bY, eh, ae)
973982 }
974- let dx = fraction(ec, ae, ac)
975- let ef = (dW - ec)
976- let eg = (dW - ec)
977- let eh = (dW - aY[aq])
978- let dE = (ec - dx)
979- let ei = if ((eh > 0))
980- then co((eh - ec), aj[aq])
981- else cA(ec, aj[aq])
982- if ((ei == ei))
983+ let dA = fraction(ef, ag, ae)
984+ let ei = (dZ - ef)
985+ let ej = (dZ - ef)
986+ let ek = (dZ - bb[at])
987+ let dH = (ef - dA)
988+ let el = if ((ek > 0))
989+ then cr((ek - ef), al[at])
990+ else cD(ef, al[at])
991+ if ((el == el))
983992 then {
984- let dF = if ((dE > 0))
985- then invoke(V, "airDrop", nil, [AttachedPayment(fromBase58String(aj[aq]), dE)])
993+ let dI = if ((dH > 0))
994+ then invoke(W, "airDrop", nil, [AttachedPayment(fromBase58String(al[at]), dH)])
986995 else 0
987- if ((dF == dF))
988- then $Tuple3((eb :+ eg), (dm ++ [ScriptTransfer(Q, dx, fromBase58String(aj[aq])), IntegerEntry((aj[aq] + i), ef)]), (aq + 1))
996+ if ((dI == dI))
997+ then $Tuple3((ee :+ ej), (dp ++ [ScriptTransfer(R, dA, fromBase58String(al[at])), IntegerEntry((al[at] + i), ei)]), (at + 1))
989998 else throw("Strict value is not equal to itself.")
990999 }
9911000 else throw("Strict value is not equal to itself.")
9921001 }
9931002 else {
994- let ei = co(dW, aj[aq])
995- if ((ei == ei))
996- then $Tuple3((eb :+ dW), (dm :+ IntegerEntry((aj[aq] + i), dW)), (aq + 1))
1003+ let el = cr(dZ, al[at])
1004+ if ((el == el))
1005+ then $Tuple3((ee :+ dZ), (dp :+ IntegerEntry((al[at] + i), dZ)), (at + 1))
9971006 else throw("Strict value is not equal to itself.")
9981007 }
9991008 }
10001009
1001- let ej = {
1002- let aQ = cQ
1003- let aR = size(aQ)
1004- let aS = $Tuple3(nil, nil, 0)
1005- func bn (aU,aV) = if ((aV >= aR))
1006- then aU
1007- else dj(aU, aQ[aV])
1010+ let em = {
1011+ let aT = cT
1012+ let aU = size(aT)
1013+ let aV = $Tuple3(nil, nil, 0)
1014+ func bq (aX,aY) = if ((aY >= aU))
1015+ then aX
1016+ else dm(aX, aT[aY])
10081017
1009- func bo (aU,aV) = if ((aV >= aR))
1010- then aU
1018+ func br (aX,aY) = if ((aY >= aU))
1019+ then aX
10111020 else throw("List size exceeds 10")
10121021
1013- bo(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
1022+ br(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
10141023 }
1015- let eb = ej._1
1016- let dm = ej._2
1017- let ek = bs(eb, bc)
1018- let el = if ((ab == 0))
1019- then bY
1020- else fraction(ab, (ek - bX), bX)
1021- if (ax((el >= dL)))
1024+ let ee = em._1
1025+ let dp = em._2
1026+ let en = bv(ee, bf)
1027+ let eo = if ((ad == 0))
1028+ then cb
1029+ else fraction(ad, (en - ca), ca)
1030+ if (aA((eo >= dO)))
10221031 then throw("Slippage screwed you")
1023- else if (dM)
1032+ else if (dP)
10241033 then {
1025- let em = invoke(this, "reissueShare", [el], nil)
1026- if ((em == em))
1034+ let ep = invoke(this, "reissueShare", [eo], nil)
1035+ if ((ep == ep))
10271036 then {
1028- let en = invoke(U, "lockShareTokensFromPool", [dd.caller.bytes, toString(this), dN], ([AttachedPayment(aa, el)] ++ dP))
1029- if ((en == en))
1030- then (dm :+ IntegerEntry(n, (ab + el)))
1037+ let eq = invoke(V, "lockShareTokensFromPool", [dg.caller.bytes, toString(this), dQ], ([AttachedPayment(ac, eo)] ++ dS))
1038+ if ((eq == eq))
1039+ then (dp :+ IntegerEntry(o, (ad + eo)))
10311040 else throw("Strict value is not equal to itself.")
10321041 }
10331042 else throw("Strict value is not equal to itself.")
10341043 }
1035- else (dm ++ [Reissue(aa, el, true), ScriptTransfer(dd.caller, el, aa), IntegerEntry(n, (ab + el))])
1044+ else (dp ++ [Reissue(ac, eo, true), ScriptTransfer(dg.caller, eo, ac), IntegerEntry(o, (ad + eo))])
10361045 }
10371046 }
10381047 }
10391048 }
1040- })
1049+ }))
10411050
10421051
10431052
1044-@Callable(dd)
1045-func calcMintAmount (cQ,aB) = {
1046- let bc = aH()
1047- let aY = aM()
1048- let bY = bs(cQ, bc)
1049- if ((ab == 0))
1050- then $Tuple2(nil, bY)
1053+@Callable(dg)
1054+func calcMintAmount (cT,aE) = {
1055+ let bf = aK()
1056+ let bb = aP()
1057+ let cb = bv(cT, bf)
1058+ if ((ad == 0))
1059+ then $Tuple2(nil, cb)
10511060 else {
1052- let bX = bs(aY, bc)
1053- let bU = az(aB)
1054- func eo (aO,dW) = {
1055- let ep = aO
1056- let eb = ep._1
1057- let aq = ep._2
1058- let bV = ((fraction(ad, bU, ac, CEILING) * ak) / (4 * (ak - 1)))
1059- let ec = {
1060- let ed = fraction(bY, aY[aq], bX)
1061- let ee = if ((ed > dW))
1062- then (ed - dW)
1063- else (dW - ed)
1064- fraction(bV, ee, ac)
1061+ let ca = bv(bb, bf)
1062+ let bX = aC(aE)
1063+ func er (aR,dZ) = {
1064+ let es = aR
1065+ let ee = es._1
1066+ let at = es._2
1067+ let bY = ((fraction(af, bX, ae, CEILING) * am) / (4 * (am - 1)))
1068+ let ef = {
1069+ let eg = fraction(cb, bb[at], ca)
1070+ let eh = if ((eg > dZ))
1071+ then (eg - dZ)
1072+ else (dZ - eg)
1073+ fraction(bY, eh, ae)
10651074 }
1066- let eg = (dW - ec)
1067- $Tuple2((eb :+ eg), (aq + 1))
1075+ let ej = (dZ - ef)
1076+ $Tuple2((ee :+ ej), (at + 1))
10681077 }
10691078
1070- let eq = {
1071- let aQ = cQ
1072- let aR = size(aQ)
1073- let aS = $Tuple2(nil, 0)
1074- func aT (aU,aV) = if ((aV >= aR))
1075- then aU
1076- else eo(aU, aQ[aV])
1079+ let et = {
1080+ let aT = cT
1081+ let aU = size(aT)
1082+ let aV = $Tuple2(nil, 0)
1083+ func aW (aX,aY) = if ((aY >= aU))
1084+ then aX
1085+ else er(aX, aT[aY])
10771086
1078- func aW (aU,aV) = if ((aV >= aR))
1079- then aU
1087+ func aZ (aX,aY) = if ((aY >= aU))
1088+ then aX
10801089 else throw("List size exceeds 10")
10811090
1082- aW(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
1091+ aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
10831092 }
1084- let eb = eq._1
1085- let dZ = eq._2
1086- let ek = bs(eb, bc)
1087- let er = fraction(ab, (ek - bX), bX)
1088- $Tuple2(nil, er)
1093+ let ee = et._1
1094+ let ec = et._2
1095+ let en = bv(ee, bf)
1096+ let eu = fraction(ad, (en - ca), ca)
1097+ $Tuple2(nil, eu)
10891098 }
10901099 }
10911100
10921101
10931102
1094-@Callable(dd)
1095-func reissueShare (cq) = valueOrElse(ar(dd), [Reissue(aa, cq, true)])
1103+@Callable(dg)
1104+func reissueShare (ct) = valueOrElse(au(dg), [Reissue(ac, ct, true)])
10961105
10971106
10981107
1099-@Callable(dd)
1100-func getDy (es,et,eu,ev) = {
1101- let aY = aM()
1102- let ew = valueOrErrorMessage(indexOf(aj, es), "unknown token in")
1103- let ex = valueOrErrorMessage(indexOf(aj, et), "unknown token out")
1104- let bw = (aY[ew] + eu)
1105- let bJ = bt(ew, ex, bw, aY)
1106- let cj = ((aY[ex] - bJ) - 1)
1107- let bU = az(Address(fromBase58String(ev)))
1108- let bV = fraction(fraction(ad, bU, ac, CEILING), cj, ac)
1109- $Tuple2(nil, $Tuple2((cj - bV), bV))
1108+@Callable(dg)
1109+func getDy (ev,ew,ex,ey) = {
1110+ let bb = aP()
1111+ let ez = valueOrErrorMessage(indexOf(al, ev), "unknown token in")
1112+ let eA = valueOrErrorMessage(indexOf(al, ew), "unknown token out")
1113+ let bz = (bb[ez] + ex)
1114+ let bM = bw(ez, eA, bz, bb)
1115+ let cm = ((bb[eA] - bM) - 1)
1116+ let bX = aC(Address(fromBase58String(ey)))
1117+ let bY = fraction(fraction(af, bX, ae, CEILING), cm, ae)
1118+ $Tuple2(nil, $Tuple2((cm - bY), bY))
11101119 }
11111120
11121121
11131122
1114-@Callable(dd)
1115-func exchange (dr,ey) = valueOrElse(ao(), if ((size(dd.payments) != 1))
1123+@Callable(dg)
1124+func exchange (du,eB) = valueOrElse(ar(), valueOrElse(aq(), if ((size(dg.payments) != 1))
11161125 then throw("size(payments) != 1")
11171126 else {
1118- let cJ = cF()
1119- if (cJ._1)
1120- then (cL(cJ._2) ++ cM(dd.caller, dd.payments))
1127+ let cM = cI()
1128+ if (cM._1)
1129+ then (cO(cM._2) ++ cP(dg.caller, dg.payments))
11211130 else {
1122- let cO = dd.payments[0]
1123- let ez = ck(cO.assetId)
1124- let du = fromBase58String(dr)
1125- let eu = cO.amount
1126- let ew = valueOrErrorMessage(indexOf(aj, ez), "unknown token in")
1127- let ex = valueOrErrorMessage(indexOf(aj, dr), "unknown token out")
1128- let aY = aM()
1129- let bw = (aY[ew] + eu)
1130- let bJ = bt(ew, ex, bw, aY)
1131- let eA = ((aY[ex] - bJ) - 1)
1132- let bU = az(dd.originCaller)
1133- let bV = fraction(eA, fraction(ad, bU, ac, CEILING), ac)
1134- let cj = (eA - bV)
1135- let dx = fraction(bV, ae, ac)
1136- if (ax((cj >= ey)))
1131+ let cR = dg.payments[0]
1132+ let eC = cn(cR.assetId)
1133+ let dx = fromBase58String(du)
1134+ let ex = cR.amount
1135+ let ez = valueOrErrorMessage(indexOf(al, eC), "unknown token in")
1136+ let eA = valueOrErrorMessage(indexOf(al, du), "unknown token out")
1137+ let bb = aP()
1138+ let bz = (bb[ez] + ex)
1139+ let bM = bw(ez, eA, bz, bb)
1140+ let eD = ((bb[eA] - bM) - 1)
1141+ let bX = aC(dg.originCaller)
1142+ let bY = fraction(eD, fraction(af, bX, ae, CEILING), ae)
1143+ let cm = (eD - bY)
1144+ let dA = fraction(bY, ag, ae)
1145+ if (aA((cm >= eB)))
11371146 then throw("Exchange resulted in fewer coins than expected")
11381147 else {
1139- func dz (aO,dA) = {
1140- let eB = aO
1141- let cQ = eB._1
1142- let aq = eB._2
1143- if ((aq == ew))
1144- then $Tuple2((cQ :+ (dA + eu)), (aq + 1))
1145- else if ((aq == ex))
1146- then $Tuple2((cQ :+ (dA - eA)), (aq + 1))
1147- else $Tuple2((cQ :+ dA), (aq + 1))
1148+ func dC (aR,dD) = {
1149+ let eE = aR
1150+ let cT = eE._1
1151+ let at = eE._2
1152+ if ((at == ez))
1153+ then $Tuple2((cT :+ (dD + ex)), (at + 1))
1154+ else if ((at == eA))
1155+ then $Tuple2((cT :+ (dD - eD)), (at + 1))
1156+ else $Tuple2((cT :+ dD), (at + 1))
11481157 }
11491158
1150- let eC = {
1151- let aQ = aY
1152- let aR = size(aQ)
1153- let aS = $Tuple2(nil, 0)
1154- func aT (aU,aV) = if ((aV >= aR))
1155- then aU
1156- else dz(aU, aQ[aV])
1159+ let eF = {
1160+ let aT = bb
1161+ let aU = size(aT)
1162+ let aV = $Tuple2(nil, 0)
1163+ func aW (aX,aY) = if ((aY >= aU))
1164+ then aX
1165+ else dC(aX, aT[aY])
11571166
1158- func aW (aU,aV) = if ((aV >= aR))
1159- then aU
1167+ func aZ (aX,aY) = if ((aY >= aU))
1168+ then aX
11601169 else throw("List size exceeds 10")
11611170
1162- aW(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
1171+ aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
11631172 }
1164- let cQ = eC._1
1165- let aq = eC._2
1166- if (cP(cQ))
1173+ let cT = eF._1
1174+ let at = eF._2
1175+ if (cS(cT))
11671176 then throw()
11681177 else {
1169- let en = co(cO.amount, ck(cO.assetId))
1170- if ((en == en))
1178+ let eq = cr(cR.amount, cn(cR.assetId))
1179+ if ((eq == eq))
11711180 then {
1172- let do = cA(eA, dr)
1173- if ((do == do))
1181+ let dr = cD(eD, du)
1182+ if ((dr == dr))
11741183 then {
1175- let dE = (bV - dx)
1176- let dF = if ((dE > 0))
1177- then invoke(V, "airDrop", nil, [AttachedPayment(du, dE)])
1184+ let dH = (bY - dA)
1185+ let dI = if ((dH > 0))
1186+ then invoke(W, "airDrop", nil, [AttachedPayment(dx, dH)])
11781187 else 0
1179- if ((dF == dF))
1180- then $Tuple2([IntegerEntry((ez + i), bw), IntegerEntry((dr + i), (aY[ex] - eA)), ScriptTransfer(dd.caller, cj, du), ScriptTransfer(Q, dx, du)], [cj, du])
1188+ if ((dI == dI))
1189+ then $Tuple2([IntegerEntry((eC + i), bz), IntegerEntry((du + i), (bb[eA] - eD)), ScriptTransfer(dg.caller, cm, dx), ScriptTransfer(R, dA, dx)], [cm, dx])
11811190 else throw("Strict value is not equal to itself.")
11821191 }
11831192 else throw("Strict value is not equal to itself.")
11841193 }
11851194 else throw("Strict value is not equal to itself.")
11861195 }
11871196 }
11881197 }
1189- })
1198+ }))
11901199
11911200
11921201
1193-@Callable(dd)
1194-func withdraw (de) = valueOrElse(ao(), dc(dd, de, 0))
1202+@Callable(dg)
1203+func withdraw (dh) = valueOrElse(aq(), df(dg, dh, 0))
11951204
11961205
11971206
1198-@Callable(dd)
1199-func withdrawWithUnlock (de,df) = valueOrElse(ao(), if ((0 >= df))
1207+@Callable(dg)
1208+func withdrawWithUnlock (dh,di) = valueOrElse(aq(), if ((0 >= di))
12001209 then throw("Unlock amount must be positive")
12011210 else {
1202- let eD = invoke(U, "withdrawShareTokensFromPool", [dd.caller.bytes, toString(this), df], nil)
1203- if ((eD == eD))
1204- then dc(dd, de, df)
1211+ let eG = invoke(V, "withdrawShareTokensFromPool", [dg.caller.bytes, toString(this), di], nil)
1212+ if ((eG == eG))
1213+ then df(dg, dh, di)
12051214 else throw("Strict value is not equal to itself.")
12061215 })
12071216
12081217
12091218
1210-@Callable(dd)
1211-func calcWithdrawOneCoin (eE,dr,aB) = if ((0 >= eE))
1219+@Callable(dg)
1220+func calcWithdrawOneCoin (eH,du,aE) = if ((0 >= eH))
12121221 then throw("Amount must be positive")
12131222 else {
1214- let aq = valueOrErrorMessage(indexOf(aj, dr), "unknown token out")
1215- $Tuple2(nil, bR(aM(), eE, aq, Address(fromBase58String(aB)))._1)
1223+ let at = valueOrErrorMessage(indexOf(al, du), "unknown token out")
1224+ $Tuple2(nil, bU(aP(), eH, at, Address(fromBase58String(aE)))._1)
12161225 }
12171226
12181227
12191228
1220-@Callable(dd)
1221-func withdrawOneCoin (dr,ds) = valueOrElse(ao(), if ((size(dd.payments) != 1))
1229+@Callable(dg)
1230+func withdrawOneCoin (du,dv) = valueOrElse(ar(), valueOrElse(aq(), if ((size(dg.payments) != 1))
12221231 then throw("size(payments) != 1")
1223- else dq(dd, dr, ds, 0))
1232+ else dt(dg, du, dv, 0)))
12241233
12251234
12261235
1227-@Callable(dd)
1228-func withdrawOneCoinWithUnlock (dr,ds,df) = valueOrElse(ao(), if ((0 > df))
1236+@Callable(dg)
1237+func withdrawOneCoinWithUnlock (du,dv,di) = valueOrElse(ar(), valueOrElse(aq(), if ((0 > di))
12291238 then throw("Unlock amount must be positive")
12301239 else {
1231- let eD = invoke(U, "withdrawShareTokensFromPool", [dd.caller.bytes, toString(this), df], nil)
1232- if ((eD == eD))
1233- then dq(dd, dr, ds, df)
1240+ let eG = invoke(V, "withdrawShareTokensFromPool", [dg.caller.bytes, toString(this), di], nil)
1241+ if ((eG == eG))
1242+ then dt(dg, du, dv, di)
12341243 else throw("Strict value is not equal to itself.")
1235- })
1244+ }))
12361245
12371246
12381247
1239-@Callable(dd)
1240-func A () = $Tuple2(nil, aH())
1248+@Callable(dg)
1249+func A () = $Tuple2(nil, aK())
12411250
12421251
12431252
1244-@Callable(dd)
1253+@Callable(dg)
12451254 func getVirtualPrice () = {
1246- let bp = bb(aM(), aH())
1247- $Tuple2(nil, fraction(bp, a, ab))
1255+ let bs = be(aP(), aK())
1256+ $Tuple2(nil, fraction(bs, a, ad))
12481257 }
12491258
12501259
12511260
1252-@Callable(dd)
1253-func calcTokenAmount (eF,eG) = {
1254- let bc = aH()
1255- let eH = aM()
1256- let bX = bs(eH, bc)
1257- func eI (aO,dk) = {
1258- let eJ = aO
1259- let cQ = eJ._1
1260- let aq = eJ._2
1261- let dW = (dk + (if (eG)
1262- then eF[aq]
1263- else -(eF[aq])))
1264- $Tuple2((cQ :+ dW), (aq + 1))
1261+@Callable(dg)
1262+func calcTokenAmount (eI,eJ) = {
1263+ let bf = aK()
1264+ let eK = aP()
1265+ let ca = bv(eK, bf)
1266+ func eL (aR,dn) = {
1267+ let eM = aR
1268+ let cT = eM._1
1269+ let at = eM._2
1270+ let dZ = (dn + (if (eJ)
1271+ then eI[at]
1272+ else -(eI[at])))
1273+ $Tuple2((cT :+ dZ), (at + 1))
12651274 }
12661275
1267- let cQ = ( let aQ = eH
1268- let aR = size(aQ)
1269- let aS = $Tuple2(nil, 0)
1270- func aT (aU,aV) = if ((aV >= aR))
1271- then aU
1272- else eI(aU, aQ[aV])
1276+ let cT = ( let aT = eK
1277+ let aU = size(aT)
1278+ let aV = $Tuple2(nil, 0)
1279+ func aW (aX,aY) = if ((aY >= aU))
1280+ then aX
1281+ else eL(aX, aT[aY])
12731282
1274- func aW (aU,aV) = if ((aV >= aR))
1275- then aU
1283+ func aZ (aX,aY) = if ((aY >= aU))
1284+ then aX
12761285 else throw("List size exceeds 10")
12771286
1278- aW(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10))._1
1279- let bY = bs(cQ, bc)
1280- let eK = if (eG)
1281- then (bY - bX)
1282- else (bX - bY)
1283- $Tuple2(nil, fraction(eK, ab, bX))
1287+ aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10))._1
1288+ let cb = bv(cT, bf)
1289+ let eN = if (eJ)
1290+ then (cb - ca)
1291+ else (ca - cb)
1292+ $Tuple2(nil, fraction(eN, ad, ca))
12841293 }
12851294
12861295
12871296
1288-@Callable(dd)
1289-func rampA (eL,eM) = valueOrElse(ao(), valueOrElse(ap(dd), if (ax((aw >= (ah + e))))
1297+@Callable(dg)
1298+func rampA (eO,eP) = valueOrElse(aq(), valueOrElse(as(dg), if (aA((az >= (aj + e))))
12901299 then throw("too often")
1291- else if (ax((eM >= (aw + e))))
1300+ else if (aA((eP >= (az + e))))
12921301 then throw("insufficient time")
12931302 else {
1294- let eN = aH()
1295- if (ax(if ((eL > 0))
1296- then (b > eL)
1303+ let eQ = aK()
1304+ if (aA(if ((eO > 0))
1305+ then (b > eO)
12971306 else false))
12981307 then throw("out of base range")
1299- else if (ax(if (if ((eL >= eN))
1300- then ((eN * c) >= eL)
1308+ else if (aA(if (if ((eO >= eQ))
1309+ then ((eQ * c) >= eO)
13011310 else false)
13021311 then true
1303- else if ((eN > eL))
1304- then ((eL * c) >= eN)
1312+ else if ((eQ > eO))
1313+ then ((eO * c) >= eQ)
13051314 else false))
13061315 then throw("out of range")
1307- else [IntegerEntry("initial_A", eN), IntegerEntry("future_A", eL), IntegerEntry("initial_A_time", aw), IntegerEntry("future_A_time", eM)]
1316+ else [IntegerEntry("initial_A", eQ), IntegerEntry("future_A", eO), IntegerEntry("initial_A_time", az), IntegerEntry("future_A_time", eP)]
13081317 }))
13091318
13101319
13111320
1312-@Callable(dd)
1313-func stopRampA () = valueOrElse(ao(), valueOrElse(ap(dd), {
1314- let eO = aH()
1315-[IntegerEntry("initial_A", eO), IntegerEntry("future_A", eO), IntegerEntry("initial_A_time", aw), IntegerEntry("future_A_time", aw)]
1321+@Callable(dg)
1322+func stopRampA () = valueOrElse(aq(), valueOrElse(as(dg), {
1323+ let eR = aK()
1324+[IntegerEntry("initial_A", eR), IntegerEntry("future_A", eR), IntegerEntry("initial_A_time", az), IntegerEntry("future_A_time", az)]
13161325 }))
13171326
13181327
13191328
1320-@Callable(dd)
1321-func shutdown () = valueOrElse(ap(dd), if (!(Y))
1322- then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, l), "the cause wasn't specified")))
1323- else al("Paused by admin"))
1329+@Callable(dg)
1330+func shutdown () = valueOrElse(as(dg), if (!(Z))
1331+ then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, m), "the cause wasn't specified")))
1332+ else an("Paused by admin"))
13241333
13251334
13261335
1327-@Callable(dd)
1328-func activate () = valueOrElse(ap(dd), if (Y)
1329- then an()
1330- else [BooleanEntry(j, true), DeleteEntry(l)])
1336+@Callable(dg)
1337+func activate () = valueOrElse(as(dg), if (Z)
1338+ then ap()
1339+ else [BooleanEntry(j, true), DeleteEntry(m)])
13311340
13321341
13331342
1334-@Callable(dd)
1335-func takeIntoAccountExtraFunds () = valueOrElse(ao(), if ((dd.caller != Q))
1336- then throw("Only the wallet can call this function")
1337- else {
1338- let eH = aM()
1339- func eP (aO,aP) = {
1340- let eQ = aO
1341- let eR = eQ._1
1342- let aq = eQ._2
1343- let eS = fromBase58String(aP)
1344- let eT = (assetBalance(this, eS) + cC(eS))
1345- let eU = (eT - eH[aq])
1346- if ((0 > eU))
1347- then al(("Enroll amount negative for asset" + aP))
1348- else {
1349- let dF = if ((eU > 0))
1350- then invoke(V, "airDrop", nil, [AttachedPayment(eS, eU)])
1351- else 0
1352- if ((dF == dF))
1353- then $Tuple2((eR + eU), (aq + 1))
1354- else throw("Strict value is not equal to itself.")
1343+@Callable(dg)
1344+func takeIntoAccountExtraFunds () = valueOrElse(aq(), {
1345+ let eS = if (containsElement(al, toBase58String(X)))
1346+ then invoke(T, "claimRewards", nil, nil)
1347+ else 0
1348+ if ((eS == eS))
1349+ then if ((dg.caller != R))
1350+ then throw("Only the wallet can call this function")
1351+ else {
1352+ let eK = aP()
1353+ func eT (aR,aS) = {
1354+ let eU = aR
1355+ let eV = eU._1
1356+ let at = eU._2
1357+ let eW = fromBase58String(aS)
1358+ let eX = (assetBalance(this, eW) + cF(eW))
1359+ let eY = (eX - eK[at])
1360+ if ((0 > eY))
1361+ then an(("Enroll amount negative for asset" + aS))
1362+ else {
1363+ let dI = if ((eY > 0))
1364+ then invoke(W, "airDrop", nil, [AttachedPayment(eW, eY)])
1365+ else 0
1366+ if ((dI == dI))
1367+ then $Tuple2((eV + eY), (at + 1))
1368+ else throw("Strict value is not equal to itself.")
1369+ }
13551370 }
1356- }
13571371
1358- let dZ = {
1359- let aQ = aj
1360- let aR = size(aQ)
1361- let aS = $Tuple2(0, 0)
1362- func aT (aU,aV) = if ((aV >= aR))
1363- then aU
1364- else eP(aU, aQ[aV])
1372+ let ec = {
1373+ let aT = al
1374+ let aU = size(aT)
1375+ let aV = $Tuple2(0, 0)
1376+ func aW (aX,aY) = if ((aY >= aU))
1377+ then aX
1378+ else eT(aX, aT[aY])
13651379
1366- func aW (aU,aV) = if ((aV >= aR))
1367- then aU
1368- else throw("List size exceeds 10")
1380+ func aZ (aX,aY) = if ((aY >= aU))
1381+ then aX
1382+ else throw("List size exceeds 10")
13691383
1370- aW(aT(aT(aT(aT(aT(aT(aT(aT(aT(aT(aS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
1371- }
1372- if ((dZ._1 == 0))
1373- then throw("No money to take")
1374- else nil
1375- })
1384+ aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
1385+ }
1386+ if ((ec._1 == 0))
1387+ then throw("No money to take")
1388+ else nil
1389+ }
1390+ else throw("Strict value is not equal to itself.")
1391+ })
13761392
13771393
1378-@Verifier(eV)
1379-func eW () = {
1380- let eX = {
1381- let eY = if (sigVerify(eV.bodyBytes, eV.proofs[0], M))
1394+@Verifier(eZ)
1395+func fa () = {
1396+ let fb = {
1397+ let fc = if (sigVerify(eZ.bodyBytes, eZ.proofs[0], N))
13821398 then 1
13831399 else 0
1384- let eZ = if (sigVerify(eV.bodyBytes, eV.proofs[1], N))
1400+ let fd = if (sigVerify(eZ.bodyBytes, eZ.proofs[1], O))
13851401 then 1
13861402 else 0
1387- let fa = if (sigVerify(eV.bodyBytes, eV.proofs[2], O))
1403+ let fe = if (sigVerify(eZ.bodyBytes, eZ.proofs[2], P))
13881404 then 1
13891405 else 0
1390- (((eY + eZ) + fa) >= 2)
1406+ (((fc + fd) + fe) >= 2)
13911407 }
1392- let J = eV
1393- if ($isInstanceOf(J, "InvokeScriptTransaction"))
1408+ let K = eZ
1409+ if ($isInstanceOf(K, "InvokeScriptTransaction"))
13941410 then {
1395- let ei = J
1396- let fb = if ((ei.dApp == this))
1397- then (ei.function == "takeIntoAccountExtraFunds")
1411+ let el = K
1412+ let ff = if ((el.dApp == this))
1413+ then (el.function == "takeIntoAccountExtraFunds")
13981414 else false
1399- let fc = if (if (if (sigVerify(eV.bodyBytes, eV.proofs[0], M))
1415+ let fg = if (if (if (sigVerify(eZ.bodyBytes, eZ.proofs[0], N))
14001416 then true
1401- else sigVerify(eV.bodyBytes, eV.proofs[0], N))
1417+ else sigVerify(eZ.bodyBytes, eZ.proofs[0], O))
14021418 then true
1403- else sigVerify(eV.bodyBytes, eV.proofs[0], O))
1419+ else sigVerify(eZ.bodyBytes, eZ.proofs[0], P))
14041420 then true
1405- else sigVerify(eV.bodyBytes, eV.proofs[0], P)
1406- if (if (fb)
1407- then fc
1421+ else sigVerify(eZ.bodyBytes, eZ.proofs[0], Q)
1422+ if (if (ff)
1423+ then fg
14081424 else false)
14091425 then true
1410- else eX
1426+ else fb
14111427 }
1412- else eX
1428+ else fb
14131429 }
14141430

github/deemru/w8io/169f3d6 
573.47 ms