tx · 3YvdZnniiZ3EEdehUxfhoAaJENZmaJmNUzXc86AkmK9M

3MpygN8qm376tUAHB6mhC5BxG5NKYortiyX:  -0.03700000 Waves

2023.03.17 17:11 [2494096] smart account 3MpygN8qm376tUAHB6mhC5BxG5NKYortiyX > SELF 0.00000000 Waves

{ "type": 13, "id": "3YvdZnniiZ3EEdehUxfhoAaJENZmaJmNUzXc86AkmK9M", "fee": 3700000, "feeAssetId": null, "timestamp": 1679062377246, "version": 2, "chainId": 84, "sender": "3MpygN8qm376tUAHB6mhC5BxG5NKYortiyX", "senderPublicKey": "BjnLnkAMaJLYAK36vQqSepUNjGeMDHfZGfmdYwGcLbmg", "proofs": [ "4ua5kMxw3wxRkcq1DqmEWQyGCWjraiQYrnrMP3V9irnu1aNmyDn2hi2boAQShemynK3ySdEoarCBWzo6FLnwJvAd", "KFWKeWGj7opqWZ5P9Vfm2bVhdfAWVgsiSdK7NN9LwQbnSfu9wHRuGFZ3GoaUUAK34suAf5oQgX9vdkJ1dDcHCKv" ], "script": "base64:BgJJCAISAwoBBBIECgIEARIGCgQBAQQBEgMKAQESBgoEAQgBARIECgIBARIDCgEBEgASABIAEgMKAQESBQoDBAEIEgASBAoCAQESAHAAB3ZlcnNpb24CBTIuMC4wAAhrVmVyc2lvbgIHdmVyc2lvbgAHa0FjdGl2ZQIGYWN0aXZlAAtrQWN0aXZlR2xvYgIUYWN0aXZlX2FsbF9jb250cmFjdHMAC2tEZXByZWNhdGVkAgtkZXByZWNhdGVkXwAJa0Fzc2V0SWRBAgpBX2Fzc2V0X2lkAAlrQXNzZXRJZEICCkJfYXNzZXRfaWQACWtCYWxhbmNlQQIPQV9hc3NldF9iYWxhbmNlAAlrQmFsYW5jZUICD0JfYXNzZXRfYmFsYW5jZQANa1NoYXJlQXNzZXRJZAIOc2hhcmVfYXNzZXRfaWQAEWtTaGFyZUFzc2V0U3VwcGx5AhJzaGFyZV9hc3NldF9zdXBwbHkABGtGZWUCCmNvbW1pc3Npb24ACmtJbnZhcmlhbnQCCWludmFyaWFudAAGa0NhdXNlAg5zaHV0ZG93bl9jYXVzZQAMa1VTRE5BZGRyZXNzAhhzdGFraW5nX3VzZG5uc2J0X2FkZHJlc3MADGtFVVJOQWRkcmVzcwIUc3Rha2luZ19ldXJuX2FkZHJlc3MACmtEaXNjb3VudHMCCWRpc2NvdW50cwAPa0Rpc2NvdW50VmFsdWVzAg9kaXNjb3VudF92YWx1ZXMADmtVc2VyU3dvcEluR292AgxfU1dPUF9hbW91bnQAD2tVc2VyR1N3b3BJbkdvdgINX0dTd29wX2Ftb3VudAANa0ZpcnN0SGFydmVzdAINZmlyc3RfaGFydmVzdAATa0ZpcnN0SGFydmVzdEhlaWdodAIUZmlyc3RfaGFydmVzdF9oZWlnaHQAC2tTaGFyZUxpbWl0AhxzaGFyZV9saW1pdF9vbl9maXJzdF9oYXJ2ZXN0AAtrQmFzZVBlcmlvZAILYmFzZV9wZXJpb2QADWtQZXJpb2RMZW5ndGgCDXBlcmlvZF9sZW5ndGgADGtTdGFydEhlaWdodAIMc3RhcnRfaGVpZ2h0AA5rREFwcFRocmVzaG9sZAIOZEFwcF90aHJlc2hvbGQADWtBZG1pblB1YktleTECC2FkbWluX3B1Yl8xAA1rQWRtaW5QdWJLZXkyAgthZG1pbl9wdWJfMgANa0FkbWluUHViS2V5MwILYWRtaW5fcHViXzMAEmtBZG1pbkludm9rZVB1YktleQIQYWRtaW5faW52b2tlX3B1YgAQa01vbmV5Qm94QWRkcmVzcwIRbW9uZXlfYm94X2FkZHJlc3MAD2tUZWFtQm94QWRkcmVzcwIQdGVhbV9ib3hfYWRkcmVzcwALa0dvdkFkZHJlc3MCEmdvdmVybmFuY2VfYWRkcmVzcwAPa0Zhcm1pbmdBZGRyZXNzAg9mYXJtaW5nX2FkZHJlc3MADmtWb3RpbmdBZGRyZXNzAg52b3RpbmdfYWRkcmVzcwAMa1VTRE5Bc3NldElkAg11c2RuX2Fzc2V0X2lkAA5rU3Rha2luZ0Fzc2V0cwIOc3Rha2luZ19hc3NldHMABm9yYWNsZQkBB0FkZHJlc3MBARoBVEgTlwzA0zPMJTKAtin3p2RogKvjzHtLmQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEDa2V5BAckbWF0Y2gwCQCdCAIFBm9yYWNsZQUDa2V5AwkAAQIFByRtYXRjaDACBlN0cmluZwQGc3RyaW5nBQckbWF0Y2gwCQDZBAEFBnN0cmluZwQHbm90aGluZwUHJG1hdGNoMAkAAgEJAKwCAgUDa2V5AghpcyBlbXB0eQAMYWRtaW5QdWJLZXkxCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFDWtBZG1pblB1YktleTEADGFkbWluUHViS2V5MgkBE2dldEJhc2U1OEZyb21PcmFjbGUBBQ1rQWRtaW5QdWJLZXkyAAxhZG1pblB1YktleTMJARNnZXRCYXNlNThGcm9tT3JhY2xlAQUNa0FkbWluUHViS2V5MwARYWRtaW5QdWJLZXlJbnZva2UJARNnZXRCYXNlNThGcm9tT3JhY2xlAQUSa0FkbWluSW52b2tlUHViS2V5AA9tb25leUJveEFkZHJlc3MJAQdBZGRyZXNzAQkBE2dldEJhc2U1OEZyb21PcmFjbGUBBRBrTW9uZXlCb3hBZGRyZXNzAA50ZWFtQm94QWRkcmVzcwkBB0FkZHJlc3MBCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFD2tUZWFtQm94QWRkcmVzcwAKZ292QWRkcmVzcwkBB0FkZHJlc3MBCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFC2tHb3ZBZGRyZXNzABJzdGFraW5nVVNETkFkZHJlc3MJAQdBZGRyZXNzAQkBE2dldEJhc2U1OEZyb21PcmFjbGUBBQxrVVNETkFkZHJlc3MADXZvdGluZ0FkZHJlc3MJAQdBZGRyZXNzAQkBE2dldEJhc2U1OEZyb21PcmFjbGUBBQ5rVm90aW5nQWRkcmVzcwAOZmFybWluZ0FkZHJlc3MJAQdBZGRyZXNzAQkBE2dldEJhc2U1OEZyb21PcmFjbGUBBQ9rRmFybWluZ0FkZHJlc3MABFVTRE4JARNnZXRCYXNlNThGcm9tT3JhY2xlAQUMa1VTRE5Bc3NldElkAA1zdGFraW5nQXNzZXRzCQERQGV4dHJOYXRpdmUoMTA1MykCBQZvcmFjbGUFDmtTdGFraW5nQXNzZXRzAApiYXNlUGVyaW9kCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUNdm90aW5nQWRkcmVzcwULa0Jhc2VQZXJpb2QCEUVtcHR5IGtCYXNlUGVyaW9kAAtzdGFydEhlaWdodAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFDXZvdGluZ0FkZHJlc3MFDGtTdGFydEhlaWdodAISRW1wdHkga1N0YXJ0SGVpZ2h0AAxwZXJpb2RMZW5ndGgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQ12b3RpbmdBZGRyZXNzBQ1rUGVyaW9kTGVuZ3RoAhNFbXB0eSBrUGVyaW9kTGVuZ3RoABVmaXJzdEhhcnZlc3RFbmRQZXJpb2QJAGQCCQBkAgUKYmFzZVBlcmlvZAkAaQIJAGUCBQZoZWlnaHQFC3N0YXJ0SGVpZ2h0BQxwZXJpb2RMZW5ndGgAAwAGYWN0aXZlCQERQGV4dHJOYXRpdmUoMTA1MSkCBQR0aGlzBQdrQWN0aXZlAAphY3RpdmVHbG9iCQELdmFsdWVPckVsc2UCCQCbCAIFBm9yYWNsZQULa0FjdGl2ZUdsb2IGAA5kZXByZWNhdGVkUG9vbAkBC3ZhbHVlT3JFbHNlAgkAmwgCBQZvcmFjbGUJAKwCAgULa0RlcHJlY2F0ZWQJAKUIAQUEdGhpcwcAC3N0ckFzc2V0SWRBCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzBQlrQXNzZXRJZEEAC3N0ckFzc2V0SWRCCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzBQlrQXNzZXRJZEIACGFzc2V0SWRBAwkAAAIFC3N0ckFzc2V0SWRBAgVXQVZFUwUEdW5pdAkA2QQBBQtzdHJBc3NldElkQQAIYXNzZXRJZEIDCQAAAgULc3RyQXNzZXRJZEICBVdBVkVTBQR1bml0CQDZBAEFC3N0ckFzc2V0SWRCAAphc3NldE5hbWVBBAckbWF0Y2gwBQhhc3NldElkQQMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAJpZAUHJG1hdGNoMAgJAQV2YWx1ZQEJAOwHAQUCaWQEbmFtZQMJAAECBQckbWF0Y2gwAgRVbml0BAV3YXZlcwUHJG1hdGNoMAIFV0FWRVMJAAIBAgtNYXRjaCBlcnJvcgAKYXNzZXROYW1lQgQHJG1hdGNoMAUIYXNzZXRJZEIDCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQCaWQFByRtYXRjaDAICQEFdmFsdWUBCQDsBwEFAmlkBG5hbWUDCQABAgUHJG1hdGNoMAIEVW5pdAQFd2F2ZXMFByRtYXRjaDACBVdBVkVTCQACAQILTWF0Y2ggZXJyb3IACGJhbGFuY2VBCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzBQlrQmFsYW5jZUEACGJhbGFuY2VCCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzBQlrQmFsYW5jZUIADHNoYXJlQXNzZXRJZAkA2QQBCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzBQ1rU2hhcmVBc3NldElkABBzaGFyZUFzc2V0U3VwcGx5CQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzBRFrU2hhcmVBc3NldFN1cHBseQAJaW52YXJpYW50CQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzBQprSW52YXJpYW50AANmZWUJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMFBGtGZWUADWZlZUdvdmVybmFuY2UJAGsDBQNmZWUAIwBkAAdmZWVUZWFtCQBrAwUDZmVlAAoAZAAJZmVlU2NhbGU2AMCEPQAGc2NhbGUzAOgHAAZzY2FsZTgAgMLXLwAHc2NhbGUxNgCAgIT+pt7hEQAHZGlnaXRzOAAIABVleGNoYW5nZVJhdGlvTGltaXRNaW4AgI7OHAAVZXhjaGFuZ2VSYXRpb0xpbWl0TWF4AID24EIABWFscGhhADIAC2FscGhhRGlnaXRzAAIABGJldGEAgIDer8/1lQgBDmFjY291bnRCYWxhbmNlAQdhc3NldElkBAckbWF0Y2gwBQdhc3NldElkAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEAmlkBQckbWF0Y2gwCQDwBwIFBHRoaXMFAmlkAwkAAQIFByRtYXRjaDACBFVuaXQEBXdhdmVzBQckbWF0Y2gwCAkA7wcBBQR0aGlzCWF2YWlsYWJsZQkAAgECC01hdGNoIGVycm9yAQxzdGFrZWRBbW91bnQBB2Fzc2V0SWQEFnN0YWtlZEFtb3VudENhbGN1bGF0ZWQEByRtYXRjaDAFB2Fzc2V0SWQDCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQDYUlkBQckbWF0Y2gwAwkAAAIFA2FJZAUEVVNETgkAmggCBRJzdGFraW5nVVNETkFkZHJlc3MJAKwCAgkArAICCQCsAgICDHJwZF9iYWxhbmNlXwkA2AQBBQNhSWQCAV8JAKUIAQUEdGhpcwAAAwkAAQIFByRtYXRjaDACBFVuaXQAAAkAAgECC01hdGNoIGVycm9yBAckbWF0Y2gwBRZzdGFrZWRBbW91bnRDYWxjdWxhdGVkAwkAAQIFByRtYXRjaDACA0ludAQBaQUHJG1hdGNoMAUBaQAAAA1zdGFrZWRBbW91bnRBCQEMc3Rha2VkQW1vdW50AQUIYXNzZXRJZEEADXN0YWtlZEFtb3VudEIJAQxzdGFrZWRBbW91bnQBBQhhc3NldElkQgARYXZhaWxhYmxlQmFsYW5jZUEJAGUCBQhiYWxhbmNlQQUNc3Rha2VkQW1vdW50QQARYXZhaWxhYmxlQmFsYW5jZUIJAGUCBQhiYWxhbmNlQgUNc3Rha2VkQW1vdW50QgAZYWNjb3VudEJhbGFuY2VXaXRoU3Rha2VkQQkAZAIJAQ5hY2NvdW50QmFsYW5jZQEFCGFzc2V0SWRBBQ1zdGFrZWRBbW91bnRBABlhY2NvdW50QmFsYW5jZVdpdGhTdGFrZWRCCQBkAgkBDmFjY291bnRCYWxhbmNlAQUIYXNzZXRJZEIFDXN0YWtlZEFtb3VudEIAEGhhc0Vub3VnaEJhbGFuY2UDCQBnAgUZYWNjb3VudEJhbGFuY2VXaXRoU3Rha2VkQQUIYmFsYW5jZUEJAGcCBRlhY2NvdW50QmFsYW5jZVdpdGhTdGFrZWRCBQhiYWxhbmNlQgcBCHNrZXduZXNzAgF4AXkJAGkCCQBkAgkAawMFB3NjYWxlMTYFAXgFAXkJAGsDBQdzY2FsZTE2BQF5BQF4AAIBDWludmFyaWFudENhbGMCAXgBeQQCc2sJAQhza2V3bmVzcwIFAXgFAXkJAGQCCQBrAwkAZAIFAXgFAXkFB3NjYWxlMTYJAGwGBQJzawUHZGlnaXRzOAUFYWxwaGEFC2FscGhhRGlnaXRzBQdkaWdpdHM4BQdDRUlMSU5HCQBoAgACCQBrAwkAoAMBCQB2BgkAvAIDCQC2AgEFAXgJALYCAQUBeQkAtgIBBQZzY2FsZTgAAAkAtgIBAAUAAQkAaQIFB2RpZ2l0czgAAgUERE9XTgkAbAYJAGUCBQJzawUEYmV0YQUHZGlnaXRzOAUFYWxwaGEFC2FscGhhRGlnaXRzBQdkaWdpdHM4BQRET1dOBQZzY2FsZTgBE2NhbGN1bGF0ZVNlbmRBbW91bnQHFWFtb3VudFRvU2VuZEVzdGltYXRlZBVtaW5Ub2tlblJlY2VpdmVBbW91bnQSdG9rZW5SZWNlaXZlQW1vdW50B3Rva2VuSWQFYmFsY0EFYmFsY0IGaW52Q3VyBB13b3JzdEFsbG93ZWROZXdJbnZhcmlhbnRSYXRpbwkAZQIFB3NjYWxlMTYJAGkCCQBoAgUHc2NhbGUxNgABAICt4gQEHmRlbHRhQmV0d2Vlbk1heEFuZE1pblNlbmRWYWx1ZQkAZQIFFWFtb3VudFRvU2VuZEVzdGltYXRlZAUVbWluVG9rZW5SZWNlaXZlQW1vdW50BAF4CQBkAgUFYmFsY0EFEnRva2VuUmVjZWl2ZUFtb3VudAQBeQkAZAIFBWJhbGNCBRJ0b2tlblJlY2VpdmVBbW91bnQKAQ1nZXRTdGVwQW1vdW50AgNhY2MEc3RlcAMJAAACCAUDYWNjAl8xAP///////////wEEDGFtb3VudFRvU2VuZAkAZQIFFWFtb3VudFRvU2VuZEVzdGltYXRlZAkAaQIJAGkCCQBoAgUEc3RlcAUeZGVsdGFCZXR3ZWVuTWF4QW5kTWluU2VuZFZhbHVlAAMFBnNjYWxlMwQNc3RlcEludmFyaWFudAMJAAACBQd0b2tlbklkBQhhc3NldElkQQkBDWludmFyaWFudENhbGMCBQF4CQBlAgUFYmFsY0IFDGFtb3VudFRvU2VuZAkBDWludmFyaWFudENhbGMCCQBlAgUFYmFsY0EFDGFtb3VudFRvU2VuZAUBeQMJAGYCBQ1zdGVwSW52YXJpYW50BQZpbnZDdXIJAJQKAgUMYW1vdW50VG9TZW5kBQ1zdGVwSW52YXJpYW50CQCUCgIA////////////AQAABQNhY2MED2Ftb3VudFRvU2VuZE1pbgkBDWdldFN0ZXBBbW91bnQCCQCUCgIA////////////AQAAALgXAwkAZgIAAAgFD2Ftb3VudFRvU2VuZE1pbgJfMQkAAgECH1ByaWNlIGlzIHdvcnNlIHRoYW4gbWluUmVjZWl2ZWQEDGludkVzdGltYXRlZAMJAAACBQd0b2tlbklkBQhhc3NldElkQQkBDWludmFyaWFudENhbGMCBQF4CQBlAgUFYmFsY0IFFWFtb3VudFRvU2VuZEVzdGltYXRlZAMJAAACBQd0b2tlbklkBQhhc3NldElkQgkBDWludmFyaWFudENhbGMCCQBlAgUFYmFsY0EFFWFtb3VudFRvU2VuZEVzdGltYXRlZAUBeQkAAgECFldyb25nIGFzc2V0IGluIHBheW1lbnQDCQBmAgUGaW52Q3VyBQxpbnZFc3RpbWF0ZWQDCQBnAgUdd29yc3RBbGxvd2VkTmV3SW52YXJpYW50UmF0aW8JAGsDBQdzY2FsZTE2BQZpbnZDdXIFDGludkVzdGltYXRlZAkAAgECMlRoZSByZXF1ZXN0ZWQgcHJpY2UgaXMgdG9vIG5vdCBwcm9maXRhYmxlIGZvciB1c2VyBAFhCgACJGwJAMwIAgAZCQDMCAIAyAEJAMwIAgD0AwUDbmlsCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCAP///////////wEAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQENZ2V0U3RlcEFtb3VudAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgMwkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwMJAGYCAAAIBQFhAl8xCAUPYW1vdW50VG9TZW5kTWluAl8xCAUBYQJfMQQBYQoAAiRsCQDMCAIAjPz/////////AQkAzAgCALj+/////////wEJAMwIAgDn//////////8BBQNuaWwKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCUCgIA////////////AQAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQ1nZXRTdGVwQW1vdW50AgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyAzCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADBA90dXBsZVNlbmRCZXR0ZXIDCQBmAgAACAUBYQJfMQkAlAoCBRVhbW91bnRUb1NlbmRFc3RpbWF0ZWQFDGludkVzdGltYXRlZAUBYQMJAGcCBR13b3JzdEFsbG93ZWROZXdJbnZhcmlhbnRSYXRpbwkAawMFB3NjYWxlMTYFBmludkN1cggFD3R1cGxlU2VuZEJldHRlcgJfMgkAAgECMlRoZSByZXF1ZXN0ZWQgcHJpY2UgaXMgdG9vIG5vdCBwcm9maXRhYmxlIGZvciB1c2VyCAUPdHVwbGVTZW5kQmV0dGVyAl8xAQxnZXRBc3NldEluZm8BB2Fzc2V0SWQEByRtYXRjaDAFB2Fzc2V0SWQDCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQCaWQFByRtYXRjaDAECHN0cmluZ0lkCQDYBAEFAmlkBARpbmZvCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQUCaWQJAKwCAgkArAICAgZBc3NldCAFCHN0cmluZ0lkAg4gZG9lc24ndCBleGlzdAkAlQoDBQhzdHJpbmdJZAgFBGluZm8EbmFtZQgFBGluZm8IZGVjaW1hbHMDCQABAgUHJG1hdGNoMAIEVW5pdAQFd2F2ZXMFByRtYXRjaDAJAJUKAwIFV0FWRVMCBVdBVkVTAAgJAAIBAgtNYXRjaCBlcnJvcgEHc3VzcGVuZAEFY2F1c2UJAMwIAgkBDEJvb2xlYW5FbnRyeQIFB2tBY3RpdmUHCQDMCAIJAQtTdHJpbmdFbnRyeQIFBmtDYXVzZQUFY2F1c2UFA25pbAENdGhyb3dJc0FjdGl2ZQAJAAIBAhZEQXBwIGlzIGFscmVhZHkgYWN0aXZlAQhpc0FjdGl2ZQADAwUGYWN0aXZlBQphY3RpdmVHbG9iBwUEdW5pdAkAAgECH0RBcHAgaXMgaW5hY3RpdmUgYXQgdGhpcyBtb21lbnQBDGlzRGVwcmljYXRlZAADCQEBIQEFDmRlcHJlY2F0ZWRQb29sBQR1bml0CQACAQIxUG9vbCBpcyBkZXByZWNhdGVkLiBPbmx5IHdpdGhkcmF3IGFjdGlvbiBhbGxvd2VkLgELaXNBZG1pbkNhbGwBAWkDCQEPY29udGFpbnNFbGVtZW50AgkAzAgCBQxhZG1pblB1YktleTEJAMwIAgUMYWRtaW5QdWJLZXkyCQDMCAIFDGFkbWluUHViS2V5MwUDbmlsCAUBaQ9jYWxsZXJQdWJsaWNLZXkFBHVuaXQJAAIBAiFPbmx5IGFkbWluIGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24BCmlzU2VsZkNhbGwBAWkDCQAAAgUEdGhpcwgFAWkGY2FsbGVyBQR1bml0CQACAQIrT25seSBjb250cmFjdCBpdHNlbGYgY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgELdGhyb3dBc3NldHMACQACAQkArAICCQCsAgIJAKwCAgIlSW5jb3JyZWN0IGFzc2V0cyBhdHRhY2hlZC4gRXhwZWN0ZWQ6IAULc3RyQXNzZXRJZEECBSBhbmQgBQtzdHJBc3NldElkQgEPdGhyb3dPbmVQYXltZW50AAkAAgECHU9uZSBhdHRhY2hlZCBwYXltZW50IGV4cGVjdGVkARFzdXNwZW5kU3VzcGljaW91cwAJAQdzdXNwZW5kAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIjU3VzcGljaW91cyBzdGF0ZS4gQWN0dWFsIGJhbGFuY2VzOiAJAKQDAQUIYmFsYW5jZUECASAFCmFzc2V0TmFtZUECAiwgCQCkAwEFCGJhbGFuY2VCAgEgBQphc3NldE5hbWVCAgkuIFN0YXRlOiAJAKQDAQkBDmFjY291bnRCYWxhbmNlAQUIYXNzZXRJZEECASAFCmFzc2V0TmFtZUECAiwgCQCkAwEJAQ5hY2NvdW50QmFsYW5jZQEFCGFzc2V0SWRCAgEgBQphc3NldE5hbWVCARhjYWxjU3Rha2luZ0Z1bmNBbmRBZGRyZXMCBXN0YWtlB2Fzc2V0SWQDBQVzdGFrZQkAlAoCAgxsb2NrTmV1dHJpbm8FEnN0YWtpbmdVU0ROQWRkcmVzcwkAlAoCAg51bmxvY2tOZXV0cmlubwUSc3Rha2luZ1VTRE5BZGRyZXNzARFjYWxjU3Rha2luZ1BhcmFtcwMFc3Rha2UGYW1vdW50B2Fzc2V0SWQDBQVzdGFrZQQNJHQwMTA2MDYxMDY3MgkBGGNhbGNTdGFraW5nRnVuY0FuZEFkZHJlcwIFBXN0YWtlBQdhc3NldElkBARjYWxsCAUNJHQwMTA2MDYxMDY3MgJfMQQLc3Rha2luZ0FkZHIIBQ0kdDAxMDYwNjEwNjcyAl8yCQCWCgQFBGNhbGwFC3N0YWtpbmdBZGRyBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFB2Fzc2V0SWQFBmFtb3VudAUDbmlsBA0kdDAxMDc3MDEwODM2CQEYY2FsY1N0YWtpbmdGdW5jQW5kQWRkcmVzAgUFc3Rha2UFB2Fzc2V0SWQEBGNhbGwIBQ0kdDAxMDc3MDEwODM2Al8xBAtzdGFraW5nQWRkcggFDSR0MDEwNzcwMTA4MzYCXzIJAJYKBAUEY2FsbAULc3Rha2luZ0FkZHIJAMwIAgUGYW1vdW50CQDMCAIJANgEAQUHYXNzZXRJZAUDbmlsBQNuaWwBFGNhbGN1bGF0ZUZlZURpc2NvdW50AQh1c2VyQWRkcgQKc3dvcEFtb3VudAkBC3ZhbHVlT3JFbHNlAgkAmggCBQpnb3ZBZGRyZXNzCQCsAgIJAKUIAQUIdXNlckFkZHIFDmtVc2VyU3dvcEluR292AAAEC2dTd29wQW1vdW50CQELdmFsdWVPckVsc2UCCQCaCAIFCmdvdkFkZHJlc3MJAKwCAgkApQgBBQh1c2VyQWRkcgUPa1VzZXJHU3dvcEluR292BQpzd29wQW1vdW50BA5kaXNjb3VudFZhbHVlcwkAtQkCCQERQGV4dHJOYXRpdmUoMTA1MykCBQZvcmFjbGUFD2tEaXNjb3VudFZhbHVlcwIBLAQJZGlzY291bnRzCQC1CQIJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBm9yYWNsZQUKa0Rpc2NvdW50cwIBLAMDCQBnAgULZ1N3b3BBbW91bnQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ5kaXNjb3VudFZhbHVlcwAACQBmAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDmRpc2NvdW50VmFsdWVzAAEFC2dTd29wQW1vdW50BwkAZQIFCWZlZVNjYWxlNgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCWRpc2NvdW50cwAAAwMJAGcCBQtnU3dvcEFtb3VudAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDmRpc2NvdW50VmFsdWVzAAEJAGYCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUOZGlzY291bnRWYWx1ZXMAAgULZ1N3b3BBbW91bnQHCQBlAgUJZmVlU2NhbGU2CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUJZGlzY291bnRzAAEDAwkAZwIFC2dTd29wQW1vdW50CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUOZGlzY291bnRWYWx1ZXMAAgkAZgIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ5kaXNjb3VudFZhbHVlcwADBQtnU3dvcEFtb3VudAcJAGUCBQlmZWVTY2FsZTYJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQlkaXNjb3VudHMAAgMDCQBnAgULZ1N3b3BBbW91bnQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ5kaXNjb3VudFZhbHVlcwADCQBmAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDmRpc2NvdW50VmFsdWVzAAQFC2dTd29wQW1vdW50BwkAZQIFCWZlZVNjYWxlNgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCWRpc2NvdW50cwADAwkAZwIFC2dTd29wQW1vdW50CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUOZGlzY291bnRWYWx1ZXMABAkAZQIFCWZlZVNjYWxlNgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCWRpc2NvdW50cwAEBQlmZWVTY2FsZTYBEmNoZWNrREFwcFRocmVzaG9sZAMLbmV3QmFsYW5jZUELbmV3QmFsYW5jZUIKcG10QXNzZXRJZAQNZEFwcFRocmVzaG9sZAkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwUOa0RBcHBUaHJlc2hvbGQEBXJhdGlvAwMJAAACBQpwbXRBc3NldElkBQhhc3NldElkQQkAZgIFC25ld0JhbGFuY2VBBQtuZXdCYWxhbmNlQgcJAG4EBQtuZXdCYWxhbmNlQQABBQtuZXdCYWxhbmNlQgUHQ0VJTElORwMDCQAAAgUKcG10QXNzZXRJZAUIYXNzZXRJZEIJAGYCBQtuZXdCYWxhbmNlQgULbmV3QmFsYW5jZUEHCQBuBAULbmV3QmFsYW5jZUIAAQULbmV3QmFsYW5jZUEFB0NFSUxJTkcAAAMJAGYCBQVyYXRpbwUNZEFwcFRocmVzaG9sZAQNJHQwMTI2ODkxMjc5NwMJAAACBQpwbXRBc3NldElkBQhhc3NldElkQQkAlAoCBQphc3NldE5hbWVCBQphc3NldE5hbWVBCQCUCgIFCmFzc2V0TmFtZUEFCmFzc2V0TmFtZUIEBnRva2VuMQgFDSR0MDEyNjg5MTI3OTcCXzEEBnRva2VuMggFDSR0MDEyNjg5MTI3OTcCXzIJAAIBCQCsAgIJAKwCAgkArAICCQCsAgICB0J1eWluZyAFBnRva2VuMQInIGlzIHRlbXBvcmFyaWx5IHVuYXZhaWxhYmxlIGR1ZSB0byB0aGUgBQZ0b2tlbjICBiBkZXBlZwYBGnJlcGxlbmlzaFdpdGhUd29Ub2tlbnNDYWxjAwFpDHN0YWtlRmFybWluZwhsb2NrVHlwZQQLcG10QXNzZXRJZEEICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAQLcG10QXNzZXRJZEIICQCRAwIIBQFpCHBheW1lbnRzAAEHYXNzZXRJZAQTcmF0aW9TaGFyZVRva2Vuc0luQQkAawMFBnNjYWxlOAgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQFCGJhbGFuY2VBBBNyYXRpb1NoYXJlVG9rZW5zSW5CCQBrAwUGc2NhbGU4CAkAkQMCCAUBaQhwYXltZW50cwABBmFtb3VudAUIYmFsYW5jZUIEDSR0MDEzMzA5MTMzODYJAQxnZXRBc3NldEluZm8BBQtwbXRBc3NldElkQQQOcG10U3RyQXNzZXRJZEEIBQ0kdDAxMzMwOTEzMzg2Al8xBA1wbXRBc3NldE5hbWVBCAUNJHQwMTMzMDkxMzM4NgJfMgQMcG10RGVjaW1hbHNBCAUNJHQwMTMzMDkxMzM4NgJfMwQNJHQwMTMzOTUxMzUxNgkBDGdldEFzc2V0SW5mbwEFC3BtdEFzc2V0SWRCBA5wbXRTdHJBc3NldElkQggFDSR0MDEzMzk1MTM1MTYCXzEEDXBtdEFzc2V0TmFtZUIIBQ0kdDAxMzM5NTEzNTE2Al8yBAxwbXREZWNpbWFsc0IIBQ0kdDAxMzM5NTEzNTE2Al8zBA0kdDAxMzUyNTE0MDI5AwkAZgIFE3JhdGlvU2hhcmVUb2tlbnNJbkIFE3JhdGlvU2hhcmVUb2tlbnNJbkEEA3BtdAkAbgQFCGJhbGFuY2VCBRNyYXRpb1NoYXJlVG9rZW5zSW5BBQZzY2FsZTgFB0NFSUxJTkcJAJcKBQgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQFA3BtdAkAZQIICQCRAwIIBQFpCHBheW1lbnRzAAEGYW1vdW50BQNwbXQFC3BtdEFzc2V0SWRCBRNyYXRpb1NoYXJlVG9rZW5zSW5BBANwbXQJAG4EBQhiYWxhbmNlQQUTcmF0aW9TaGFyZVRva2Vuc0luQgUGc2NhbGU4BQdDRUlMSU5HCQCXCgUFA3BtdAgJAJEDAggFAWkIcGF5bWVudHMAAQZhbW91bnQJAGUCCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAUDcG10BQtwbXRBc3NldElkQQUTcmF0aW9TaGFyZVRva2Vuc0luQgQKcG10QW1vdW50QQgFDSR0MDEzNTI1MTQwMjkCXzEECnBtdEFtb3VudEIIBQ0kdDAxMzUyNTE0MDI5Al8yBAZjaGFuZ2UIBQ0kdDAxMzUyNTE0MDI5Al8zBA1jaGFuZ2VBc3NldElkCAUNJHQwMTM1MjUxNDAyOQJfNAQPc2hhcmVUb2tlblJhdGlvCAUNJHQwMTM1MjUxNDAyOQJfNQQVc2hhcmVUb2tlblRvUGF5QW1vdW50CQBrAwUPc2hhcmVUb2tlblJhdGlvBRBzaGFyZUFzc2V0U3VwcGx5BQZzY2FsZTgDAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwACCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAMHCQACAQIeVHdvIG9yIHRocmVlIHBheW1lbnRzIGV4cGVjdGVkAwMJAQIhPQIFC3BtdEFzc2V0SWRBBQhhc3NldElkQQYJAQIhPQIFC3BtdEFzc2V0SWRCBQhhc3NldElkQgkBC3Rocm93QXNzZXRzAAMJAAACBRVzaGFyZVRva2VuVG9QYXlBbW91bnQAAAkAAgECHVRvbyBzbWFsbCBhbW91bnQgdG8gcmVwbGVuaXNoAwkAZgIAAAUGY2hhbmdlCQACAQIKQ2hhbmdlIDwgMAMJAQEhAQUQaGFzRW5vdWdoQmFsYW5jZQkAzggCCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgUKcG10QW1vdW50QQULcG10QXNzZXRJZEEJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQpwbXRBbW91bnRCBQtwbXRBc3NldElkQgUDbmlsCQERc3VzcGVuZFN1c3BpY2lvdXMABAZzdGFrZTEDCQEIY29udGFpbnMCBQ1zdGFraW5nQXNzZXRzBQ5wbXRTdHJBc3NldElkQQkA/AcEBQR0aGlzAgxzdGFrZVVuc3Rha2UJAMwIAgYJAMwIAgUKcG10QW1vdW50QQkAzAgCBQ5wbXRTdHJBc3NldElkQQUDbmlsBQNuaWwAAAMJAAACBQZzdGFrZTEFBnN0YWtlMQQGc3Rha2UyAwkBCGNvbnRhaW5zAgUNc3Rha2luZ0Fzc2V0cwUOcG10U3RyQXNzZXRJZEIJAPwHBAUEdGhpcwIMc3Rha2VVbnN0YWtlCQDMCAIGCQDMCAIFCnBtdEFtb3VudEIJAMwIAgUOcG10U3RyQXNzZXRJZEIFA25pbAUDbmlsAAADCQAAAgUGc3Rha2UyBQZzdGFrZTIEDXNjcmlwdEFjdGlvbnMJAMwIAgkBDEludGVnZXJFbnRyeQIFCWtCYWxhbmNlQQkAZAIFCGJhbGFuY2VBBQpwbXRBbW91bnRBCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlrQmFsYW5jZUIJAGQCBQhiYWxhbmNlQgUKcG10QW1vdW50QgkAzAgCCQEMSW50ZWdlckVudHJ5AgURa1NoYXJlQXNzZXRTdXBwbHkJAGQCBRBzaGFyZUFzc2V0U3VwcGx5BRVzaGFyZVRva2VuVG9QYXlBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIFCmtJbnZhcmlhbnQJAQ1pbnZhcmlhbnRDYWxjAgkAZAIFCGJhbGFuY2VBBQpwbXRBbW91bnRBCQBkAgUIYmFsYW5jZUIFCnBtdEFtb3VudEIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQZjaGFuZ2UFDWNoYW5nZUFzc2V0SWQFA25pbAMFDHN0YWtlRmFybWluZwQKc3RQYXltZW50cwkAzggCCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQxzaGFyZUFzc2V0SWQFFXNoYXJlVG9rZW5Ub1BheUFtb3VudAUDbmlsAwkAAAIJAJADAQgFAWkIcGF5bWVudHMAAwkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgMJAAACCAkAkQMCCAUBaQhwYXltZW50cwACB2Fzc2V0SWQBAAUEdW5pdAgJAJEDAggFAWkIcGF5bWVudHMAAgdhc3NldElkCAkAkQMCCAUBaQhwYXltZW50cwACBmFtb3VudAUDbmlsBQNuaWwEAnJlCQD8BwQFBHRoaXMCDHJlaXNzdWVTaGFyZQkAzAgCBRVzaGFyZVRva2VuVG9QYXlBbW91bnQFA25pbAUDbmlsAwkAAAIFAnJlBQJyZQQBcwkA/AcEBQ5mYXJtaW5nQWRkcmVzcwIXbG9ja1NoYXJlVG9rZW5zRnJvbVBvb2wJAMwIAggIBQFpBmNhbGxlcgVieXRlcwkAzAgCCQClCAEFBHRoaXMJAMwIAgUIbG9ja1R5cGUFA25pbAUKc3RQYXltZW50cwMJAAACBQFzBQFzBQ1zY3JpcHRBY3Rpb25zCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQDOCAIFDXNjcmlwdEFjdGlvbnMJAMwIAgkBB1JlaXNzdWUDBQxzaGFyZUFzc2V0SWQFFXNoYXJlVG9rZW5Ub1BheUFtb3VudAYJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBRVzaGFyZVRva2VuVG9QYXlBbW91bnQFDHNoYXJlQXNzZXRJZAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuARlyZXBsZW5pc2hXaXRoT25lVG9rZW5DYWxjBQFpE3ZpcnR1YWxTd2FwVG9rZW5QYXkTdmlydHVhbFN3YXBUb2tlbkdldAxzdGFrZUZhcm1pbmcIbG9ja1R5cGUEDSR0MDE2OTMxMTcwMDYJAJQKAggJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAQJcG10QW1vdW50CAUNJHQwMTY5MzExNzAwNgJfMQQKcG10QXNzZXRJZAgFDSR0MDE2OTMxMTcwMDYCXzIEDSR0MDE3MDE1MTcwODgJAQxnZXRBc3NldEluZm8BBQpwbXRBc3NldElkBA1wbXRTdHJBc3NldElkCAUNJHQwMTcwMTUxNzA4OAJfMQQMcG10QXNzZXROYW1lCAUNJHQwMTcwMTUxNzA4OAJfMgQLcG10RGVjaW1hbHMIBQ0kdDAxNzAxNTE3MDg4Al8zBA9wbXRNaW5UaHJlc2hvbGQAwJaxAgQddGhyZXNob2xkVmFsdWVGb3JNaW5Ub2xlcmFuY2UAgOHrFwQJdG9sZXJhbmNlAwkAZgIFHXRocmVzaG9sZFZhbHVlRm9yTWluVG9sZXJhbmNlBQlwbXRBbW91bnQAoI0GAAEEHHNsaXBwYWdlVmFsdWVNaW5Gb3JSZXBsZW5pc2gJAGUCBQZzY2FsZTgJAGkCCQBoAgUGc2NhbGU4BQl0b2xlcmFuY2UAgK3iBAQcc2xpcHBhZ2VWYWx1ZU1heEZvclJlcGxlbmlzaAkAZAIFBnNjYWxlOAkAaQIJAGgCBQZzY2FsZTgFCXRvbGVyYW5jZQCAreIEBBdzbGlwcGFnZVZhbHVlTWluRm9yU3dhcAkAZQIFBnNjYWxlOAkAaQIJAGgCBQZzY2FsZTgAAQCAreIEAwkAZgIFD3BtdE1pblRocmVzaG9sZAUJcG10QW1vdW50CQACAQkArAICCQCsAgIJAKwCAgkArAICAg9QYXltZW50IGFtb3VudCAJAKQDAQUJcG10QW1vdW50AicgZG9lcyBub3QgZXhjZWVkIHRoZSBtaW5pbXVtIGFtb3VudCBvZiAJAKQDAQUPcG10TWluVGhyZXNob2xkAgcgdG9rZW5zAwMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwACBwkAAgECHE9uZSBvciB0d28gcGF5bWVudHMgZXhwZWN0ZWQDCQEBIQEFEGhhc0Vub3VnaEJhbGFuY2UJAM4IAgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFCXBtdEFtb3VudAUKcG10QXNzZXRJZAUDbmlsCQERc3VzcGVuZFN1c3BpY2lvdXMAAwMJAQIhPQIFCnBtdEFzc2V0SWQFCGFzc2V0SWRBCQECIT0CBQpwbXRBc3NldElkBQhhc3NldElkQgcJAQt0aHJvd0Fzc2V0cwAEDSR0MDE4MTk4MTg4NDgDCQAAAgUKcG10QXNzZXRJZAUIYXNzZXRJZEEJAJgKBgkAZQIFCXBtdEFtb3VudAUTdmlydHVhbFN3YXBUb2tlblBheQUTdmlydHVhbFN3YXBUb2tlbkdldAkAZAIFCGJhbGFuY2VBBRN2aXJ0dWFsU3dhcFRva2VuUGF5CQBlAgUIYmFsYW5jZUIFE3ZpcnR1YWxTd2FwVG9rZW5HZXQJAGQCBQhiYWxhbmNlQQUJcG10QW1vdW50BQhiYWxhbmNlQgkAmAoGBRN2aXJ0dWFsU3dhcFRva2VuR2V0CQBlAgUJcG10QW1vdW50BRN2aXJ0dWFsU3dhcFRva2VuUGF5CQBlAgUIYmFsYW5jZUEFE3ZpcnR1YWxTd2FwVG9rZW5HZXQJAGQCBQhiYWxhbmNlQgUTdmlydHVhbFN3YXBUb2tlblBheQUIYmFsYW5jZUEJAGQCBQhiYWxhbmNlQgUJcG10QW1vdW50BBF2aXJ0dWFsUmVwbGVuaXNoQQgFDSR0MDE4MTk4MTg4NDgCXzEEEXZpcnR1YWxSZXBsZW5pc2hCCAUNJHQwMTgxOTgxODg0OAJfMgQRYmFsYW5jZUFmdGVyU3dhcEEIBQ0kdDAxODE5ODE4ODQ4Al8zBBFiYWxhbmNlQWZ0ZXJTd2FwQggFDSR0MDE4MTk4MTg4NDgCXzQEC25ld0JhbGFuY2VBCAUNJHQwMTgxOTgxODg0OAJfNQQLbmV3QmFsYW5jZUIIBQ0kdDAxODE5ODE4ODQ4Al82BAxpbnZhcmlhbnROZXcJAQ1pbnZhcmlhbnRDYWxjAgURYmFsYW5jZUFmdGVyU3dhcEEFEWJhbGFuY2VBZnRlclN3YXBCBCVyYXRpb1ZpcnR1YWxCYWxhbmNlVG9WaXJ0dWFsUmVwbGVuaXNoCQBpAgkAawMFB3NjYWxlMTYFEWJhbGFuY2VBZnRlclN3YXBBBRFiYWxhbmNlQWZ0ZXJTd2FwQgkAawMFBnNjYWxlOAURdmlydHVhbFJlcGxlbmlzaEEFEXZpcnR1YWxSZXBsZW5pc2hCAwMJAGcCBRdzbGlwcGFnZVZhbHVlTWluRm9yU3dhcAkAawMFBnNjYWxlOAUJaW52YXJpYW50BQxpbnZhcmlhbnROZXcGCQBmAgUJaW52YXJpYW50BQxpbnZhcmlhbnROZXcJAAIBAjpJbmNvcnJlY3QgdmlydHVhbFN3YXBUb2tlblBheSBvciB2aXJ0dWFsU3dhcFRva2VuR2V0IHZhbHVlAwMJAGYCBRxzbGlwcGFnZVZhbHVlTWluRm9yUmVwbGVuaXNoBSVyYXRpb1ZpcnR1YWxCYWxhbmNlVG9WaXJ0dWFsUmVwbGVuaXNoBgkAZgIFJXJhdGlvVmlydHVhbEJhbGFuY2VUb1ZpcnR1YWxSZXBsZW5pc2gFHHNsaXBwYWdlVmFsdWVNYXhGb3JSZXBsZW5pc2gJAAIBAmxTd2FwIHdpdGggdmlydHVhbFN3YXBUb2tlblBheSBhbmQgdmlydHVhbFN3YXBUb2tlbkdldCBpcyBwb3NzaWJsZSwgYnV0IHJhdGlvIGFmdGVyIHZpcnR1YWwgc3dhcCBpcyBpbmNvcnJlY3QDCQEBIQEJARJjaGVja0RBcHBUaHJlc2hvbGQDBQtuZXdCYWxhbmNlQQULbmV3QmFsYW5jZUIFCnBtdEFzc2V0SWQJAQV0aHJvdwAEE3JhdGlvU2hhcmVUb2tlbnNJbkEJAGsDBRF2aXJ0dWFsUmVwbGVuaXNoQQUGc2NhbGU4BRFiYWxhbmNlQWZ0ZXJTd2FwQQQTcmF0aW9TaGFyZVRva2Vuc0luQgkAawMFEXZpcnR1YWxSZXBsZW5pc2hCBQZzY2FsZTgFEWJhbGFuY2VBZnRlclN3YXBCBBVzaGFyZVRva2VuVG9QYXlBbW91bnQJAGsDCQCXAwEJAMwIAgUTcmF0aW9TaGFyZVRva2Vuc0luQQkAzAgCBRNyYXRpb1NoYXJlVG9rZW5zSW5CBQNuaWwFEHNoYXJlQXNzZXRTdXBwbHkFBnNjYWxlOAQdc2hhcmVUb2tlblRvUGF5QW1vdW50QWZ0ZXJGZWUJAGsDBRVzaGFyZVRva2VuVG9QYXlBbW91bnQJAGUCBQlmZWVTY2FsZTYJAGkCBQNmZWUAAgUJZmVlU2NhbGU2BBpzaGFyZVRva2VuR292ZXJuYW5jZVJld2FyZAkAawMFFXNoYXJlVG9rZW5Ub1BheUFtb3VudAkAaQIFDWZlZUdvdmVybmFuY2UAAgUJZmVlU2NhbGU2BBRzaGFyZVRva2VuVGVhbVJld2FyZAkAawMFFXNoYXJlVG9rZW5Ub1BheUFtb3VudAkAaQIFB2ZlZVRlYW0AAgUJZmVlU2NhbGU2BBZnb3Zlcm5hbmNlUmV3YXJkVG9rZW5BCQBrAwUac2hhcmVUb2tlbkdvdmVybmFuY2VSZXdhcmQFCGJhbGFuY2VBBRBzaGFyZUFzc2V0U3VwcGx5BBZnb3Zlcm5hbmNlUmV3YXJkVG9rZW5CCQBrAwUac2hhcmVUb2tlbkdvdmVybmFuY2VSZXdhcmQFCGJhbGFuY2VCBRBzaGFyZUFzc2V0U3VwcGx5BBB0ZWFtUmV3YXJkVG9rZW5BCQBrAwUUc2hhcmVUb2tlblRlYW1SZXdhcmQFCGJhbGFuY2VBBRBzaGFyZUFzc2V0U3VwcGx5BBB0ZWFtUmV3YXJkVG9rZW5CCQBrAwUUc2hhcmVUb2tlblRlYW1SZXdhcmQFCGJhbGFuY2VCBRBzaGFyZUFzc2V0U3VwcGx5BA0kdDAyMTAzMzIxNDE2AwkAAAIFDXBtdFN0ckFzc2V0SWQFC3N0ckFzc2V0SWRBCQCVCgMJAGUCCQBlAgUJcG10QW1vdW50BRZnb3Zlcm5hbmNlUmV3YXJkVG9rZW5BBRB0ZWFtUmV3YXJkVG9rZW5BCQBkAgUWZ292ZXJuYW5jZVJld2FyZFRva2VuQgUQdGVhbVJld2FyZFRva2VuQgULc3RyQXNzZXRJZEIJAJUKAwkAZQIJAGUCBQlwbXRBbW91bnQFFmdvdmVybmFuY2VSZXdhcmRUb2tlbkIFEHRlYW1SZXdhcmRUb2tlbkIJAGQCBRZnb3Zlcm5hbmNlUmV3YXJkVG9rZW5BBRB0ZWFtUmV3YXJkVG9rZW5BBQtzdHJBc3NldElkQQQLc3Rha2VBbW91bnQIBQ0kdDAyMTAzMzIxNDE2Al8xBA11bnN0YWtlQW1vdW50CAUNJHQwMjEwMzMyMTQxNgJfMgQMdW5zdGFrZUFzc2V0CAUNJHQwMjEwMzMyMTQxNgJfMwQGc3Rha2UxAwkBCGNvbnRhaW5zAgUNc3Rha2luZ0Fzc2V0cwUNcG10U3RyQXNzZXRJZAkA/AcEBQR0aGlzAgxzdGFrZVVuc3Rha2UJAMwIAgYJAMwIAgULc3Rha2VBbW91bnQJAMwIAgUNcG10U3RyQXNzZXRJZAUDbmlsBQNuaWwAAAMJAAACBQZzdGFrZTEFBnN0YWtlMQQGc3Rha2UyAwkBCGNvbnRhaW5zAgUNc3Rha2luZ0Fzc2V0cwUMdW5zdGFrZUFzc2V0CQD8BwQFBHRoaXMCDHN0YWtlVW5zdGFrZQkAzAgCBwkAzAgCBQ11bnN0YWtlQW1vdW50CQDMCAIFDHVuc3Rha2VBc3NldAUDbmlsBQNuaWwAAAMJAAACBQZzdGFrZTIFBnN0YWtlMgQNc2NyaXB0QWN0aW9ucwkAzAgCCQEMSW50ZWdlckVudHJ5AgUJa0JhbGFuY2VBCQBlAgkAZQIFC25ld0JhbGFuY2VBBRZnb3Zlcm5hbmNlUmV3YXJkVG9rZW5BBRB0ZWFtUmV3YXJkVG9rZW5BCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlrQmFsYW5jZUIJAGUCCQBlAgULbmV3QmFsYW5jZUIFFmdvdmVybmFuY2VSZXdhcmRUb2tlbkIFEHRlYW1SZXdhcmRUb2tlbkIJAMwIAgkBDEludGVnZXJFbnRyeQIFEWtTaGFyZUFzc2V0U3VwcGx5CQBkAgUQc2hhcmVBc3NldFN1cHBseQUdc2hhcmVUb2tlblRvUGF5QW1vdW50QWZ0ZXJGZWUJAMwIAgkBDEludGVnZXJFbnRyeQIFCmtJbnZhcmlhbnQJAQ1pbnZhcmlhbnRDYWxjAgkAZQIFC25ld0JhbGFuY2VBBRZnb3Zlcm5hbmNlUmV3YXJkVG9rZW5BCQBlAgULbmV3QmFsYW5jZUIFFmdvdmVybmFuY2VSZXdhcmRUb2tlbkIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUPbW9uZXlCb3hBZGRyZXNzBRZnb3Zlcm5hbmNlUmV3YXJkVG9rZW5BBQhhc3NldElkQQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQ9tb25leUJveEFkZHJlc3MFFmdvdmVybmFuY2VSZXdhcmRUb2tlbkIFCGFzc2V0SWRCCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFDnRlYW1Cb3hBZGRyZXNzBRB0ZWFtUmV3YXJkVG9rZW5BBQhhc3NldElkQQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQ50ZWFtQm94QWRkcmVzcwUQdGVhbVJld2FyZFRva2VuQgUIYXNzZXRJZEIFA25pbAMFDHN0YWtlRmFybWluZwQKc3RQYXltZW50cwkAzggCCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQxzaGFyZUFzc2V0SWQFHXNoYXJlVG9rZW5Ub1BheUFtb3VudEFmdGVyRmVlBQNuaWwDCQAAAgkAkAMBCAUBaQhwYXltZW50cwACCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCAwkAAAIICQCRAwIIBQFpCHBheW1lbnRzAAEHYXNzZXRJZAEABQR1bml0CAkAkQMCCAUBaQhwYXltZW50cwABB2Fzc2V0SWQICQCRAwIIBQFpCHBheW1lbnRzAAEGYW1vdW50BQNuaWwFA25pbAQCcmUJAPwHBAUEdGhpcwIMcmVpc3N1ZVNoYXJlCQDMCAIFHXNoYXJlVG9rZW5Ub1BheUFtb3VudEFmdGVyRmVlBQNuaWwFA25pbAMJAAACBQJyZQUCcmUEAXMJAPwHBAUOZmFybWluZ0FkZHJlc3MCF2xvY2tTaGFyZVRva2Vuc0Zyb21Qb29sCQDMCAIICAUBaQZjYWxsZXIFYnl0ZXMJAMwIAgkApQgBBQR0aGlzCQDMCAIFCGxvY2tUeXBlBQNuaWwFCnN0UGF5bWVudHMDCQAAAgUBcwUBcwUNc2NyaXB0QWN0aW9ucwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAzggCBQ1zY3JpcHRBY3Rpb25zCQDMCAIJAQdSZWlzc3VlAwUMc2hhcmVBc3NldElkBR1zaGFyZVRva2VuVG9QYXlBbW91bnRBZnRlckZlZQYJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBR1zaGFyZVRva2VuVG9QYXlBbW91bnRBZnRlckZlZQUMc2hhcmVBc3NldElkBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BDHdpdGhkcmF3Q2FsYwIBaQx1bmxvY2tBbW91bnQEDSR0MDI0MTcxMjQ1MDYDCQAAAgkAkAMBCAUBaQhwYXltZW50cwABAwkBAiE9AggJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBQxzaGFyZUFzc2V0SWQJAAIBCQCsAgICJEluY29ycmVjdCBhc3NldCBhdHRhY2hlZC4gRXhwZWN0ZWQ6IAkA2AQBBQxzaGFyZUFzc2V0SWQJAJQKAggJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAkAlAoCAAAFDHNoYXJlQXNzZXRJZAQJcG10QW1vdW50CAUNJHQwMjQxNzEyNDUwNgJfMQQKcG10QXNzZXRJZAgFDSR0MDI0MTcxMjQ1MDYCXzIDCQEBIQEFEGhhc0Vub3VnaEJhbGFuY2UJAM4IAgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFCXBtdEFtb3VudAUKcG10QXNzZXRJZAUDbmlsCQERc3VzcGVuZFN1c3BpY2lvdXMABAZ1bmxvY2sDCQBmAgUMdW5sb2NrQW1vdW50AAAJAPwHBAUOZmFybWluZ0FkZHJlc3MCG3dpdGhkcmF3U2hhcmVUb2tlbnNGcm9tUG9vbAkAzAgCCAgFAWkGY2FsbGVyBWJ5dGVzCQDMCAIJAKUIAQUEdGhpcwkAzAgCBQx1bmxvY2tBbW91bnQFA25pbAUDbmlsAAADCQAAAgUGdW5sb2NrBQZ1bmxvY2sEDndpdGhkcmF3QW1vdW50CQBkAgUJcG10QW1vdW50BQx1bmxvY2tBbW91bnQEDGFtb3VudFRvUGF5QQkAawMFDndpdGhkcmF3QW1vdW50BQhiYWxhbmNlQQUQc2hhcmVBc3NldFN1cHBseQQMYW1vdW50VG9QYXlCCQBrAwUOd2l0aGRyYXdBbW91bnQFCGJhbGFuY2VCBRBzaGFyZUFzc2V0U3VwcGx5BBNpbnZhcmlhbnRDYWxjdWxhdGVkCQENaW52YXJpYW50Q2FsYwIJAGUCBQhiYWxhbmNlQQUMYW1vdW50VG9QYXlBCQBlAgUIYmFsYW5jZUIFDGFtb3VudFRvUGF5QgQGc3Rha2UxAwkBCGNvbnRhaW5zAgUNc3Rha2luZ0Fzc2V0cwULc3RyQXNzZXRJZEEJAPwHBAUEdGhpcwIMc3Rha2VVbnN0YWtlCQDMCAIHCQDMCAIFDGFtb3VudFRvUGF5QQkAzAgCBQtzdHJBc3NldElkQQUDbmlsBQNuaWwAAAMJAAACBQZzdGFrZTEFBnN0YWtlMQQGc3Rha2UyAwkBCGNvbnRhaW5zAgUNc3Rha2luZ0Fzc2V0cwULc3RyQXNzZXRJZEIJAPwHBAUEdGhpcwIMc3Rha2VVbnN0YWtlCQDMCAIHCQDMCAIFDGFtb3VudFRvUGF5QgkAzAgCBQtzdHJBc3NldElkQgUDbmlsBQNuaWwAAAMJAAACBQZzdGFrZTIFBnN0YWtlMgkAzAgCCQEMSW50ZWdlckVudHJ5AgUJa0JhbGFuY2VBCQBlAgUIYmFsYW5jZUEFDGFtb3VudFRvUGF5QQkAzAgCCQEMSW50ZWdlckVudHJ5AgUJa0JhbGFuY2VCCQBlAgUIYmFsYW5jZUIFDGFtb3VudFRvUGF5QgkAzAgCCQEMSW50ZWdlckVudHJ5AgURa1NoYXJlQXNzZXRTdXBwbHkJAGUCBRBzaGFyZUFzc2V0U3VwcGx5BQ53aXRoZHJhd0Ftb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgUKa0ludmFyaWFudAUTaW52YXJpYW50Q2FsY3VsYXRlZAkAzAgCCQEEQnVybgIFDHNoYXJlQXNzZXRJZAUOd2l0aGRyYXdBbW91bnQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQxhbW91bnRUb1BheUEFCGFzc2V0SWRBCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgUMYW1vdW50VG9QYXlCBQhhc3NldElkQgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuDwFpAQRpbml0AQxmaXJzdEhhcnZlc3QEDSR0MDI2MzYyMjY0MzkJAJQKAggJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAQKcG10QW1vdW50QQgFDSR0MDI2MzYyMjY0MzkCXzEEC3BtdEFzc2V0SWRBCAUNJHQwMjYzNjIyNjQzOQJfMgQNJHQwMjY0NDgyNjUyNQkAlAoCCAkAkQMCCAUBaQhwYXltZW50cwABBmFtb3VudAgJAJEDAggFAWkIcGF5bWVudHMAAQdhc3NldElkBApwbXRBbW91bnRCCAUNJHQwMjY0NDgyNjUyNQJfMQQLcG10QXNzZXRJZEIIBQ0kdDAyNjQ0ODI2NTI1Al8yBA0kdDAyNjUzNDI2NjExCQEMZ2V0QXNzZXRJbmZvAQULcG10QXNzZXRJZEEEDnBtdFN0ckFzc2V0SWRBCAUNJHQwMjY1MzQyNjYxMQJfMQQNcG10QXNzZXROYW1lQQgFDSR0MDI2NTM0MjY2MTECXzIEDHBtdERlY2ltYWxzQQgFDSR0MDI2NTM0MjY2MTECXzMEDSR0MDI2NjIwMjY2OTcJAQxnZXRBc3NldEluZm8BBQtwbXRBc3NldElkQgQOcG10U3RyQXNzZXRJZEIIBQ0kdDAyNjYyMDI2Njk3Al8xBA1wbXRBc3NldE5hbWVCCAUNJHQwMjY2MjAyNjY5NwJfMgQMcG10RGVjaW1hbHNCCAUNJHQwMjY2MjAyNjY5NwJfMwMJAQlpc0RlZmluZWQBCQCbCAIFBHRoaXMFB2tBY3RpdmUJAQ10aHJvd0lzQWN0aXZlAAMJAAACBQtwbXRBc3NldElkQQULcG10QXNzZXRJZEIJAAIBAhhBc3NldHMgbXVzdCBiZSBkaWZmZXJlbnQECXNoYXJlTmFtZQkArAICCQCsAgIJAKwCAgIBcwkArwICBQ1wbXRBc3NldE5hbWVBAAcCAV8JAK8CAgUNcG10QXNzZXROYW1lQgAHBBBzaGFyZURlc2NyaXB0aW9uCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIiU2hhcmVUb2tlbiBvZiBTd29wRmkgcHJvdG9jb2wgZm9yIAUNcG10QXNzZXROYW1lQQIFIGFuZCAFDXBtdEFzc2V0TmFtZUICDCBhdCBhZGRyZXNzIAkApQgBBQR0aGlzBA1zaGFyZURlY2ltYWxzCQBpAgkAZAIFDHBtdERlY2ltYWxzQQUMcG10RGVjaW1hbHNCAAIEEnNoYXJlSW5pdGlhbFN1cHBseQkAawMJAGwGBQpwbXRBbW91bnRBBQxwbXREZWNpbWFsc0EABQABBQxwbXREZWNpbWFsc0EFBERPV04JAGwGBQpwbXRBbW91bnRCBQxwbXREZWNpbWFsc0IABQABBQxwbXREZWNpbWFsc0IFBERPV04JAGwGAAoAAAUNc2hhcmVEZWNpbWFscwAAAAAFBERPV04ECnNoYXJlSXNzdWUJAMIIBQUJc2hhcmVOYW1lBRBzaGFyZURlc2NyaXB0aW9uBRJzaGFyZUluaXRpYWxTdXBwbHkFDXNoYXJlRGVjaW1hbHMGBAxzaGFyZUlzc3VlSWQJALgIAQUKc2hhcmVJc3N1ZQQTaW52YXJpYW50Q2FsY3VsYXRlZAkBDWludmFyaWFudENhbGMCBQpwbXRBbW91bnRBBQpwbXRBbW91bnRCBAZzdGFrZTEDCQEIY29udGFpbnMCBQ1zdGFraW5nQXNzZXRzBQ5wbXRTdHJBc3NldElkQQkA/AcEBQR0aGlzAgxzdGFrZVVuc3Rha2UJAMwIAgYJAMwIAgUKcG10QW1vdW50QQkAzAgCBQ5wbXRTdHJBc3NldElkQQUDbmlsBQNuaWwAAAMJAAACBQZzdGFrZTEFBnN0YWtlMQQGc3Rha2UyAwkBCGNvbnRhaW5zAgUNc3Rha2luZ0Fzc2V0cwUOcG10U3RyQXNzZXRJZEIJAPwHBAUEdGhpcwIMc3Rha2VVbnN0YWtlCQDMCAIGCQDMCAIFCnBtdEFtb3VudEIJAMwIAgUOcG10U3RyQXNzZXRJZEIFA25pbAUDbmlsAAADCQAAAgUGc3Rha2UyBQZzdGFrZTIECWJhc2VFbnRyeQkAzAgCCQELU3RyaW5nRW50cnkCBQhrVmVyc2lvbgUHdmVyc2lvbgkAzAgCCQEMQm9vbGVhbkVudHJ5AgUHa0FjdGl2ZQYJAMwIAgkBC1N0cmluZ0VudHJ5AgUJa0Fzc2V0SWRBBQ5wbXRTdHJBc3NldElkQQkAzAgCCQELU3RyaW5nRW50cnkCBQlrQXNzZXRJZEIFDnBtdFN0ckFzc2V0SWRCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlrQmFsYW5jZUEFCnBtdEFtb3VudEEJAMwIAgkBDEludGVnZXJFbnRyeQIFCWtCYWxhbmNlQgUKcG10QW1vdW50QgkAzAgCCQEMSW50ZWdlckVudHJ5AgUKa0ludmFyaWFudAUTaW52YXJpYW50Q2FsY3VsYXRlZAkAzAgCCQEMSW50ZWdlckVudHJ5AgUEa0ZlZQkBEUBleHRyTmF0aXZlKDEwNTApAgUGb3JhY2xlAg1iYXNlX2ZlZV9mbGF0CQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ5rREFwcFRocmVzaG9sZAADCQDMCAIFCnNoYXJlSXNzdWUJAMwIAgkBC1N0cmluZ0VudHJ5AgUNa1NoYXJlQXNzZXRJZAkA2AQBBQxzaGFyZUlzc3VlSWQJAMwIAgkBDEludGVnZXJFbnRyeQIFEWtTaGFyZUFzc2V0U3VwcGx5BRJzaGFyZUluaXRpYWxTdXBwbHkJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBRJzaGFyZUluaXRpYWxTdXBwbHkFDHNoYXJlSXNzdWVJZAUDbmlsAwUMZmlyc3RIYXJ2ZXN0CQDOCAIFCWJhc2VFbnRyeQkAzAgCCQEMQm9vbGVhbkVudHJ5AgUNa0ZpcnN0SGFydmVzdAUMZmlyc3RIYXJ2ZXN0CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRNrRmlyc3RIYXJ2ZXN0SGVpZ2h0CQBkAgULc3RhcnRIZWlnaHQJAGgCBRVmaXJzdEhhcnZlc3RFbmRQZXJpb2QFDHBlcmlvZExlbmd0aAUDbmlsBQliYXNlRW50cnkJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEYcmVwbGVuaXNoV2l0aFR3b1Rva2Vuc1YyAgxzdGFrZUZhcm1pbmcIbG9ja1R5cGUJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQAJAQt2YWx1ZU9yRWxzZQIJAQxpc0RlcHJpY2F0ZWQACQEacmVwbGVuaXNoV2l0aFR3b1Rva2Vuc0NhbGMDBQFpBQxzdGFrZUZhcm1pbmcFCGxvY2tUeXBlAWkBF3JlcGxlbmlzaFdpdGhPbmVUb2tlblYyBBN2aXJ0dWFsU3dhcFRva2VuUGF5E3ZpcnR1YWxTd2FwVG9rZW5HZXQMc3Rha2VGYXJtaW5nCGxvY2tUeXBlCQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUACQELdmFsdWVPckVsc2UCCQEMaXNEZXByaWNhdGVkAAkBGXJlcGxlbmlzaFdpdGhPbmVUb2tlbkNhbGMFBQFpBRN2aXJ0dWFsU3dhcFRva2VuUGF5BRN2aXJ0dWFsU3dhcFRva2VuR2V0BQxzdGFrZUZhcm1pbmcFCGxvY2tUeXBlAWkBCndpdGhkcmF3VjIBDHVubG9ja0Ftb3VudAkBC3ZhbHVlT3JFbHNlAgkBCGlzQWN0aXZlAAkBDHdpdGhkcmF3Q2FsYwIFAWkFDHVubG9ja0Ftb3VudAFpARB3aXRoZHJhd09uZVRva2VuBAx1bmxvY2tBbW91bnQNd2l0aGRyYXdBc3NldBhlc3RpbWF0ZWRBbW91bnRUb1JlY2VpdmUSbWluQW1vdW50VG9SZWNlaXZlCQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUACQELdmFsdWVPckVsc2UCCQEMaXNEZXByaWNhdGVkAAQNJHQwMzA3MTEzMTA3MAMJAAACCQCQAwEIBQFpCHBheW1lbnRzAAEDCQECIT0CCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQFDHNoYXJlQXNzZXRJZAkAAgEJAKwCAgIkSW5jb3JyZWN0IGFzc2V0IGF0dGFjaGVkLiBFeHBlY3RlZDogCQDYBAEFDHNoYXJlQXNzZXRJZAkAlAoCCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAgJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkCQCUCgIAAAUMc2hhcmVBc3NldElkBAlwbXRBbW91bnQIBQ0kdDAzMDcxMTMxMDcwAl8xBApwbXRBc3NldElkCAUNJHQwMzA3MTEzMTA3MAJfMgQOd2l0aGRyYXdBbW91bnQJAGQCBQlwbXRBbW91bnQFDHVubG9ja0Ftb3VudAMDCQECIT0CBQ13aXRoZHJhd0Fzc2V0BQtzdHJBc3NldElkQQkBAiE9AgUNd2l0aGRyYXdBc3NldAULc3RyQXNzZXRJZEIHCQACAQIYSW5jb3JyZWN0IHdpdGhkcmF3IGFzc2V0AwkAZwIAAAUOd2l0aGRyYXdBbW91bnQJAAIBAiV3aXRoZHJhdyBhbW91bnQgbXVzdCBiZSBncmF0ZXIgdGhhbiAwAwkBASEBBRBoYXNFbm91Z2hCYWxhbmNlCQDOCAIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQlwbXRBbW91bnQFCnBtdEFzc2V0SWQFA25pbAkBEXN1c3BlbmRTdXNwaWNpb3VzAAQGdW5sb2NrAwkAZgIFDHVubG9ja0Ftb3VudAAACQD8BwQFDmZhcm1pbmdBZGRyZXNzAht3aXRoZHJhd1NoYXJlVG9rZW5zRnJvbVBvb2wJAMwIAggIBQFpBmNhbGxlcgVieXRlcwkAzAgCCQClCAEFBHRoaXMJAMwIAgUMdW5sb2NrQW1vdW50BQNuaWwFA25pbAAAAwkAAAIFBnVubG9jawUGdW5sb2NrBAxhbW91bnRUb1BheUEJAGsDBQ53aXRoZHJhd0Ftb3VudAUIYmFsYW5jZUEFEHNoYXJlQXNzZXRTdXBwbHkEDGFtb3VudFRvUGF5QgkAawMFDndpdGhkcmF3QW1vdW50BQhiYWxhbmNlQgUQc2hhcmVBc3NldFN1cHBseQQMbmV3VmlydEJhbGNBCQBlAgUIYmFsYW5jZUEFDGFtb3VudFRvUGF5QQQMbmV3VmlydEJhbGNCCQBlAgUIYmFsYW5jZUIFDGFtb3VudFRvUGF5QgQLZmVlRGlzY291bnQJARRjYWxjdWxhdGVGZWVEaXNjb3VudAEIBQFpDG9yaWdpbkNhbGxlcgQWYW1vdW50RXhjaGFuZ2VkV2l0aEZlZQMJAAACBQ13aXRoZHJhd0Fzc2V0BQtzdHJBc3NldElkQQkBE2NhbGN1bGF0ZVNlbmRBbW91bnQHBRhlc3RpbWF0ZWRBbW91bnRUb1JlY2VpdmUFEm1pbkFtb3VudFRvUmVjZWl2ZQUMYW1vdW50VG9QYXlCBQhhc3NldElkQgUMbmV3VmlydEJhbGNBBQxuZXdWaXJ0QmFsY0IJAQ1pbnZhcmlhbnRDYWxjAgUMbmV3VmlydEJhbGNBBQxuZXdWaXJ0QmFsY0IJARNjYWxjdWxhdGVTZW5kQW1vdW50BwUYZXN0aW1hdGVkQW1vdW50VG9SZWNlaXZlBRJtaW5BbW91bnRUb1JlY2VpdmUFDGFtb3VudFRvUGF5QQUIYXNzZXRJZEEFDG5ld1ZpcnRCYWxjQQUMbmV3VmlydEJhbGNCCQENaW52YXJpYW50Q2FsYwIFDG5ld1ZpcnRCYWxjQQUMbmV3VmlydEJhbGNCBAlnb3ZSZXdhcmQJAGsDBRZhbW91bnRFeGNoYW5nZWRXaXRoRmVlCQBuBAUNZmVlR292ZXJuYW5jZQULZmVlRGlzY291bnQFCWZlZVNjYWxlNgUHQ0VJTElORwUJZmVlU2NhbGU2BAp0ZWFtUmV3YXJkCQBrAwUWYW1vdW50RXhjaGFuZ2VkV2l0aEZlZQkAbgQFB2ZlZVRlYW0FC2ZlZURpc2NvdW50BQlmZWVTY2FsZTYFB0NFSUxJTkcFCWZlZVNjYWxlNgQPYW1vdW50RXhjaGFuZ2VkCQBrAwUWYW1vdW50RXhjaGFuZ2VkV2l0aEZlZQkAZQIFCWZlZVNjYWxlNgkAbgQFA2ZlZQULZmVlRGlzY291bnQFCWZlZVNjYWxlNgUHQ0VJTElORwUJZmVlU2NhbGU2BA0kdDAzMzA2ODMzNDkyAwkAAAIFDXdpdGhkcmF3QXNzZXQFC3N0ckFzc2V0SWRBCQCWCgQJAGQCBQxhbW91bnRUb1BheUEFD2Ftb3VudEV4Y2hhbmdlZAkAZQIJAGUCCQBlAgkAZQIFCGJhbGFuY2VBBQxhbW91bnRUb1BheUEFD2Ftb3VudEV4Y2hhbmdlZAUJZ292UmV3YXJkBQp0ZWFtUmV3YXJkBQhiYWxhbmNlQgUIYXNzZXRJZEIJAJYKBAkAZAIFDGFtb3VudFRvUGF5QgUPYW1vdW50RXhjaGFuZ2VkBQhiYWxhbmNlQQkAZQIJAGUCCQBlAgkAZQIFCGJhbGFuY2VCBQxhbW91bnRUb1BheUIFD2Ftb3VudEV4Y2hhbmdlZAUJZ292UmV3YXJkBQp0ZWFtUmV3YXJkBQhhc3NldElkQQQLYW1vdW50VG9QYXkIBQ0kdDAzMzA2ODMzNDkyAl8xBAtiYWxhbmNlQU5ldwgFDSR0MDMzMDY4MzM0OTICXzIEC2JhbGFuY2VCTmV3CAUNJHQwMzMwNjgzMzQ5MgJfMwQLdmlydEFzc2V0SWQIBQ0kdDAzMzA2ODMzNDkyAl80AwkBASEBCQESY2hlY2tEQXBwVGhyZXNob2xkAwULYmFsYW5jZUFOZXcFC2JhbGFuY2VCTmV3BQt2aXJ0QXNzZXRJZAkBBXRocm93AAQTaW52YXJpYW50Q2FsY3VsYXRlZAkBDWludmFyaWFudENhbGMCBQtiYWxhbmNlQU5ldwULYmFsYW5jZUJOZXcEBnN0YWtlMQMJAQhjb250YWlucwIFDXN0YWtpbmdBc3NldHMFDXdpdGhkcmF3QXNzZXQJAPwHBAUEdGhpcwIMc3Rha2VVbnN0YWtlCQDMCAIHCQDMCAIJAGQCCQBkAgULYW1vdW50VG9QYXkFCWdvdlJld2FyZAUKdGVhbVJld2FyZAkAzAgCBQ13aXRoZHJhd0Fzc2V0BQNuaWwFA25pbAAAAwkAAAIFBnN0YWtlMQUGc3Rha2UxCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlrQmFsYW5jZUEFC2JhbGFuY2VBTmV3CQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlrQmFsYW5jZUIFC2JhbGFuY2VCTmV3CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRFrU2hhcmVBc3NldFN1cHBseQkAZQIFEHNoYXJlQXNzZXRTdXBwbHkFDndpdGhkcmF3QW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCBQprSW52YXJpYW50BRNpbnZhcmlhbnRDYWxjdWxhdGVkCQDMCAIJAQRCdXJuAgUMc2hhcmVBc3NldElkBQ53aXRoZHJhd0Ftb3VudAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFC2Ftb3VudFRvUGF5CQDZBAEFDXdpdGhkcmF3QXNzZXQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUPbW9uZXlCb3hBZGRyZXNzBQlnb3ZSZXdhcmQJANkEAQUNd2l0aGRyYXdBc3NldAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQ50ZWFtQm94QWRkcmVzcwUKdGVhbVJld2FyZAkA2QQBBQ13aXRoZHJhd0Fzc2V0BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEIZXhjaGFuZ2UCGGVzdGltYXRlZEFtb3VudFRvUmVjZWl2ZRJtaW5BbW91bnRUb1JlY2VpdmUJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQAJAQt2YWx1ZU9yRWxzZQIJAQxpc0RlcHJpY2F0ZWQABA0kdDAzNDk5MzM1MDY4CQCUCgIICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50CAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQECXBtdEFtb3VudAgFDSR0MDM0OTkzMzUwNjgCXzEECnBtdEFzc2V0SWQIBQ0kdDAzNDk5MzM1MDY4Al8yAwkAZwIAAAUYZXN0aW1hdGVkQW1vdW50VG9SZWNlaXZlCQACAQkArAICAitFc3RpbWF0ZWQgYW1vdW50IG11c3QgYmUgcG9zaXRpdmUuIEFjdHVhbDogCQCkAwEFGGVzdGltYXRlZEFtb3VudFRvUmVjZWl2ZQMJAGYCBRJtaW5BbW91bnRUb1JlY2VpdmUFGGVzdGltYXRlZEFtb3VudFRvUmVjZWl2ZQkAAgECL01pbmltYWwgYW1vdW50IGNhbid0IGJlIGdyZWF0ZXIgdGhhbiBlc3RpbWF0ZWQuAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQEPdGhyb3dPbmVQYXltZW50AAMJAQEhAQUQaGFzRW5vdWdoQmFsYW5jZQkAzggCCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgUJcG10QW1vdW50BQpwbXRBc3NldElkBQNuaWwJARFzdXNwZW5kU3VzcGljaW91cwADAwkBAiE9AgUKcG10QXNzZXRJZAUIYXNzZXRJZEEJAQIhPQIFCnBtdEFzc2V0SWQFCGFzc2V0SWRCBwkBC3Rocm93QXNzZXRzAAMJAGYCAICt4gQFCXBtdEFtb3VudAkAAgECME9ubHkgc3dhcCBvZiAxMC4wMDAwMDAgb3IgbW9yZSB0b2tlbnMgaXMgYWxsb3dlZAMDCQBmAgUVZXhjaGFuZ2VSYXRpb0xpbWl0TWluCQBrAwUGc2NhbGU4BRJtaW5BbW91bnRUb1JlY2VpdmUFCXBtdEFtb3VudAYJAGYCCQBrAwUGc2NhbGU4BRhlc3RpbWF0ZWRBbW91bnRUb1JlY2VpdmUFCXBtdEFtb3VudAUVZXhjaGFuZ2VSYXRpb0xpbWl0TWF4CQACAQIcSW5jb3JyZWN0IGFyZ3MgYW5kIHBtdCByYXRpbwQLc2VuZEFzc2V0SWQDCQAAAgUKcG10QXNzZXRJZAUIYXNzZXRJZEEFCGFzc2V0SWRCBQhhc3NldElkQQQGYW1vdW50CQETY2FsY3VsYXRlU2VuZEFtb3VudAcFGGVzdGltYXRlZEFtb3VudFRvUmVjZWl2ZQUSbWluQW1vdW50VG9SZWNlaXZlBQlwbXRBbW91bnQFCnBtdEFzc2V0SWQFCGJhbGFuY2VBBQhiYWxhbmNlQgUJaW52YXJpYW50BAtmZWVEaXNjb3VudAkBFGNhbGN1bGF0ZUZlZURpc2NvdW50AQgFAWkMb3JpZ2luQ2FsbGVyBBBnb3Zlcm5hbmNlUmV3YXJkCQBrAwUGYW1vdW50CQBuBAUNZmVlR292ZXJuYW5jZQULZmVlRGlzY291bnQFCWZlZVNjYWxlNgUHQ0VJTElORwUJZmVlU2NhbGU2BAp0ZWFtUmV3YXJkCQBrAwUGYW1vdW50CQBuBAUHZmVlVGVhbQULZmVlRGlzY291bnQFCWZlZVNjYWxlNgUHQ0VJTElORwUJZmVlU2NhbGU2BA5hbW91bnRNaW51c0ZlZQkAawMFBmFtb3VudAkAZQIFCWZlZVNjYWxlNgkAbgQFA2ZlZQULZmVlRGlzY291bnQFCWZlZVNjYWxlNgUHQ0VJTElORwUJZmVlU2NhbGU2BA0kdDAzNjg4NzM3MjA3AwkAAAIFCnBtdEFzc2V0SWQFCGFzc2V0SWRBCQCUCgIJAGQCBQhiYWxhbmNlQQUJcG10QW1vdW50CQBlAgkAZQIJAGUCBQhiYWxhbmNlQgUOYW1vdW50TWludXNGZWUFEGdvdmVybmFuY2VSZXdhcmQFCnRlYW1SZXdhcmQJAJQKAgkAZQIJAGUCCQBlAgUIYmFsYW5jZUEFDmFtb3VudE1pbnVzRmVlBRBnb3Zlcm5hbmNlUmV3YXJkBQp0ZWFtUmV3YXJkCQBkAgUIYmFsYW5jZUIFCXBtdEFtb3VudAQLbmV3QmFsYW5jZUEIBQ0kdDAzNjg4NzM3MjA3Al8xBAtuZXdCYWxhbmNlQggFDSR0MDM2ODg3MzcyMDcCXzIDCQEBIQEJARJjaGVja0RBcHBUaHJlc2hvbGQDBQtuZXdCYWxhbmNlQQULbmV3QmFsYW5jZUIFCnBtdEFzc2V0SWQJAQV0aHJvdwAEDSR0MDM3MzQxMzc0MTQJAQxnZXRBc3NldEluZm8BBQpwbXRBc3NldElkBA1wbXRTdHJBc3NldElkCAUNJHQwMzczNDEzNzQxNAJfMQQMcG10QXNzZXROYW1lCAUNJHQwMzczNDEzNzQxNAJfMgQLcG10RGVjaW1hbHMIBQ0kdDAzNzM0MTM3NDE0Al8zBA0kdDAzNzQ0MzM3NTIwCQEMZ2V0QXNzZXRJbmZvAQULc2VuZEFzc2V0SWQEDnNlbmRTdHJBc3NldElkCAUNJHQwMzc0NDMzNzUyMAJfMQQNc2VuZEFzc2V0TmFtZQgFDSR0MDM3NDQzMzc1MjACXzIEDHNlbmREZWNpbWFscwgFDSR0MDM3NDQzMzc1MjACXzMEBnN0YWtlMQMJAQhjb250YWlucwIFDXN0YWtpbmdBc3NldHMFDXBtdFN0ckFzc2V0SWQJAPwHBAUEdGhpcwIMc3Rha2VVbnN0YWtlCQDMCAIGCQDMCAIFCXBtdEFtb3VudAkAzAgCBQ1wbXRTdHJBc3NldElkBQNuaWwFA25pbAAAAwkAAAIFBnN0YWtlMQUGc3Rha2UxBAZzdGFrZTIDCQEIY29udGFpbnMCBQ1zdGFraW5nQXNzZXRzBQ5zZW5kU3RyQXNzZXRJZAkA/AcEBQR0aGlzAgxzdGFrZVVuc3Rha2UJAMwIAgcJAMwIAgkAZAIJAGQCBQ5hbW91bnRNaW51c0ZlZQUQZ292ZXJuYW5jZVJld2FyZAUKdGVhbVJld2FyZAkAzAgCBQ5zZW5kU3RyQXNzZXRJZAUDbmlsBQNuaWwAAAMJAAACBQZzdGFrZTIFBnN0YWtlMgkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlrQmFsYW5jZUEFC25ld0JhbGFuY2VBCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlrQmFsYW5jZUIFC25ld0JhbGFuY2VCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQprSW52YXJpYW50CQENaW52YXJpYW50Q2FsYwIFC25ld0JhbGFuY2VBBQtuZXdCYWxhbmNlQgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFDmFtb3VudE1pbnVzRmVlBQtzZW5kQXNzZXRJZAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQ9tb25leUJveEFkZHJlc3MFEGdvdmVybmFuY2VSZXdhcmQFC3NlbmRBc3NldElkCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFDnRlYW1Cb3hBZGRyZXNzBQp0ZWFtUmV3YXJkBQtzZW5kQXNzZXRJZAUDbmlsCQDMCAIFDmFtb3VudE1pbnVzRmVlCQDMCAIFC3NlbmRBc3NldElkBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4DbXNnAQxyZWlzc3VlU2hhcmUBBmFtb3VudAkBC3ZhbHVlT3JFbHNlAgkBCmlzU2VsZkNhbGwBBQNtc2cJAMwIAgkBB1JlaXNzdWUDBQxzaGFyZUFzc2V0SWQFBmFtb3VudAYFA25pbAFpAQhzaHV0ZG93bgAJAQt2YWx1ZU9yRWxzZQIJAQtpc0FkbWluQ2FsbAEFAWkDCQEBIQEFBmFjdGl2ZQkAAgEJAKwCAgIiREFwcCBpcyBhbHJlYWR5IHN1c3BlbmRlZC4gQ2F1c2U6IAkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzBQZrQ2F1c2UCGnRoZSBjYXVzZSB3YXNuJ3Qgc3BlY2lmaWVkCQEHc3VzcGVuZAECD1BhdXNlZCBieSBhZG1pbgFpAQhhY3RpdmF0ZQAJAQt2YWx1ZU9yRWxzZQIJAQtpc0FkbWluQ2FsbAEFAWkDBQZhY3RpdmUJAQ10aHJvd0lzQWN0aXZlAAkAzAgCCQEMQm9vbGVhbkVudHJ5AgUHa0FjdGl2ZQYJAMwIAgkBC0RlbGV0ZUVudHJ5AQUGa0NhdXNlBQNuaWwBaQEZdGFrZUludG9BY2NvdW50RXh0cmFGdW5kcwAJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQAEBWNsYWltAwMJAAACBQhhc3NldElkQQUEVVNETgYJAAACBQhhc3NldElkQgUEVVNETgkA/AcEBRJzdGFraW5nVVNETkFkZHJlc3MCDGNsYWltUmV3YXJkcwUDbmlsBQNuaWwAAAMJAAACBQVjbGFpbQUFY2xhaW0EDWFtb3VudEVucm9sbEEJAGUCBRlhY2NvdW50QmFsYW5jZVdpdGhTdGFrZWRBBQhiYWxhbmNlQQQNYW1vdW50RW5yb2xsQgkAZQIFGWFjY291bnRCYWxhbmNlV2l0aFN0YWtlZEIFCGJhbGFuY2VCBAxpbnZhcmlhbnROZXcJAQ1pbnZhcmlhbnRDYWxjAgkAZAIFCGJhbGFuY2VBBQ1hbW91bnRFbnJvbGxBCQBkAgUIYmFsYW5jZUIFDWFtb3VudEVucm9sbEIDCQECIT0CCAUBaQZjYWxsZXIFD21vbmV5Qm94QWRkcmVzcwkAAgECKU9ubHkgdGhlIG1vbmV5IGJveCBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uAwMJAGYCAAAFDWFtb3VudEVucm9sbEEGCQBmAgAABQ1hbW91bnRFbnJvbGxCCQEHc3VzcGVuZAECFkVucm9sbCBhbW91bnQgbmVnYXRpdmUDAwkAAAIFDWFtb3VudEVucm9sbEEAAAkAAAIFDWFtb3VudEVucm9sbEIAAAcJAAIBAhBObyBtb25leSB0byB0YWtlBAZzdGFrZTEDAwkBCGNvbnRhaW5zAgUNc3Rha2luZ0Fzc2V0cwULc3RyQXNzZXRJZEEJAGYCBQ1hbW91bnRFbnJvbGxBAAAHCQD8BwQFBHRoaXMCDHN0YWtlVW5zdGFrZQkAzAgCBgkAzAgCBQ1hbW91bnRFbnJvbGxBCQDMCAIFC3N0ckFzc2V0SWRBBQNuaWwFA25pbAAAAwkAAAIFBnN0YWtlMQUGc3Rha2UxBAZzdGFrZTIDAwkBCGNvbnRhaW5zAgUNc3Rha2luZ0Fzc2V0cwULc3RyQXNzZXRJZEIJAGYCBQ1hbW91bnRFbnJvbGxCAAAHCQD8BwQFBHRoaXMCDHN0YWtlVW5zdGFrZQkAzAgCBgkAzAgCBQ1hbW91bnRFbnJvbGxCCQDMCAIFC3N0ckFzc2V0SWRCBQNuaWwFA25pbAAAAwkAAAIFBnN0YWtlMgUGc3Rha2UyCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQprSW52YXJpYW50BQxpbnZhcmlhbnROZXcJAMwIAgkBDEludGVnZXJFbnRyeQIFCWtCYWxhbmNlQQkAZAIFCGJhbGFuY2VBBQ1hbW91bnRFbnJvbGxBCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlrQmFsYW5jZUIJAGQCBQhiYWxhbmNlQgUNYW1vdW50RW5yb2xsQgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBGGtlZXBMaW1pdEZvckZpcnN0SGFydmVzdAEKc2hhcmVMaW1pdAkBC3ZhbHVlT3JFbHNlAgkBCGlzQWN0aXZlAAkBC3ZhbHVlT3JFbHNlAgkBC2lzQWRtaW5DYWxsAQUBaQkAzAgCCQEMSW50ZWdlckVudHJ5AgULa1NoYXJlTGltaXQFCnNoYXJlTGltaXQFA25pbAFpAQxzdGFrZVVuc3Rha2UDBXN0YWtlBmFtb3VudA1hc3NldElkU3RyaW5nAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQItT25seSBjb250cmFjdCBpdHNlbGYgY2FuIGludm9rZSB0aGlzIGZ1bmN0aW9uBA0kdDA0MTgwNjQxOTA5CQERY2FsY1N0YWtpbmdQYXJhbXMDBQVzdGFrZQUGYW1vdW50CQDZBAEFDWFzc2V0SWRTdHJpbmcEBGNhbGwIBQ0kdDA0MTgwNjQxOTA5Al8xBARhZGRyCAUNJHQwNDE4MDY0MTkwOQJfMgQGcGFyYW1zCAUNJHQwNDE4MDY0MTkwOQJfMwQIcGF5bWVudHMIBQ0kdDA0MTgwNjQxOTA5Al80BANpbnYJAPwHBAUEYWRkcgUEY2FsbAUGcGFyYW1zBQhwYXltZW50cwMJAAACBQNpbnYFA2ludgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBFnJlcGxlbmlzaFdpdGhUd29Ub2tlbnMACQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUACQELdmFsdWVPckVsc2UCCQEMaXNEZXByaWNhdGVkAAkBGnJlcGxlbmlzaFdpdGhUd29Ub2tlbnNDYWxjAwUBaQcAAAFpARVyZXBsZW5pc2hXaXRoT25lVG9rZW4CE3ZpcnR1YWxTd2FwVG9rZW5QYXkTdmlydHVhbFN3YXBUb2tlbkdldAkBC3ZhbHVlT3JFbHNlAgkBCGlzQWN0aXZlAAkBC3ZhbHVlT3JFbHNlAgkBDGlzRGVwcmljYXRlZAAJARlyZXBsZW5pc2hXaXRoT25lVG9rZW5DYWxjBQUBaQUTdmlydHVhbFN3YXBUb2tlblBheQUTdmlydHVhbFN3YXBUb2tlbkdldAcAAAFpAQh3aXRoZHJhdwAJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQAJAQx3aXRoZHJhd0NhbGMCBQFpAAABAnR4AQZ2ZXJpZnkABBNtdWx0aVNpZ25lZEJ5QWRtaW5zBBJhZG1pblB1YktleTFTaWduZWQDCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAABQxhZG1pblB1YktleTEAAQAABBJhZG1pblB1YktleTJTaWduZWQDCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwABBQxhZG1pblB1YktleTIAAQAABBJhZG1pblB1YktleTNTaWduZWQDCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwACBQxhZG1pblB1YktleTMAAQAACQBnAgkAZAIJAGQCBRJhZG1pblB1YktleTFTaWduZWQFEmFkbWluUHViS2V5MlNpZ25lZAUSYWRtaW5QdWJLZXkzU2lnbmVkAAIEByRtYXRjaDAFAnR4AwkAAQIFByRtYXRjaDACF0ludm9rZVNjcmlwdFRyYW5zYWN0aW9uBANpbnYFByRtYXRjaDAEE2NhbGxUYWtlSW50b0FjY291bnQDCQAAAggFA2ludgRkQXBwBQR0aGlzCQAAAggFA2ludghmdW5jdGlvbgIZdGFrZUludG9BY2NvdW50RXh0cmFGdW5kcwcEDXNpZ25lZEJ5QWRtaW4DAwMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAFDGFkbWluUHViS2V5MQYJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAFDGFkbWluUHViS2V5MgYJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAFDGFkbWluUHViS2V5MwYJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAFEWFkbWluUHViS2V5SW52b2tlAwMFE2NhbGxUYWtlSW50b0FjY291bnQFDXNpZ25lZEJ5QWRtaW4HBgUTbXVsdGlTaWduZWRCeUFkbWlucwUTbXVsdGlTaWduZWRCeUFkbWluc4+qVBU=", "height": 2494096, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 5PPzq43jcyeDiVERV2Ndz1HhSeCfGHiQwSpdXNeroJxW Next: none Diff:
OldNewDifferences
6565
6666 let F = "money_box_address"
6767
68-let G = "governance_address"
68+let G = "team_box_address"
6969
70-let H = "farming_address"
70+let H = "governance_address"
7171
72-let I = "voting_address"
72+let I = "farming_address"
7373
74-let J = "usdn_asset_id"
74+let J = "voting_address"
7575
76-let K = "staking_assets"
76+let K = "usdn_asset_id"
7777
78-let L = Address(base58'3MvVBtsXroQpy1tsPw21TU2ET9A8WfmrNjz')
78+let L = "staking_assets"
7979
80-func M (N) = {
81- let O = getString(L, N)
82- if ($isInstanceOf(O, "String"))
80+let M = Address(base58'3MvVBtsXroQpy1tsPw21TU2ET9A8WfmrNjz')
81+
82+func N (O) = {
83+ let P = getString(M, O)
84+ if ($isInstanceOf(P, "String"))
8385 then {
84- let P = O
85- fromBase58String(P)
86+ let Q = P
87+ fromBase58String(Q)
8688 }
8789 else {
88- let Q = O
89- throw((N + "is empty"))
90+ let R = P
91+ throw((O + "is empty"))
9092 }
9193 }
9294
9395
94-let R = M(B)
96+let S = N(B)
9597
96-let S = M(C)
98+let T = N(C)
9799
98-let T = M(D)
100+let U = N(D)
99101
100-let U = M(E)
102+let V = N(E)
101103
102-let V = Address(M(F))
104+let W = Address(N(F))
103105
104-let W = Address(M(G))
106+let X = Address(N(G))
105107
106-let X = Address(M(o))
108+let Y = Address(N(H))
107109
108-let Y = Address(M(I))
110+let Z = Address(N(o))
109111
110-let Z = Address(M(H))
112+let aa = Address(N(J))
111113
112-let aa = M(J)
114+let ab = Address(N(I))
113115
114-let ab = getStringValue(L, K)
116+let ac = N(K)
115117
116-let ac = valueOrErrorMessage(getInteger(Y, x), "Empty kBasePeriod")
118+let ad = getStringValue(M, L)
117119
118-let ad = valueOrErrorMessage(getInteger(Y, z), "Empty kStartHeight")
120+let ae = valueOrErrorMessage(getInteger(aa, x), "Empty kBasePeriod")
119121
120-let ae = valueOrErrorMessage(getInteger(Y, y), "Empty kPeriodLength")
122+let af = valueOrErrorMessage(getInteger(aa, z), "Empty kStartHeight")
121123
122-let af = ((ac + ((height - ad) / ae)) + 3)
124+let ag = valueOrErrorMessage(getInteger(aa, y), "Empty kPeriodLength")
123125
124-let ag = getBooleanValue(this, c)
126+let ah = ((ae + ((height - af) / ag)) + 3)
125127
126-let ah = valueOrElse(getBoolean(L, d), true)
128+let ai = getBooleanValue(this, c)
127129
128-let ai = valueOrElse(getBoolean(L, (e + toString(this))), false)
130+let aj = valueOrElse(getBoolean(M, d), true)
129131
130-let aj = getStringValue(this, f)
132+let ak = valueOrElse(getBoolean(M, (e + toString(this))), false)
131133
132-let ak = getStringValue(this, g)
134+let al = getStringValue(this, f)
133135
134-let al = if ((aj == "WAVES"))
136+let am = getStringValue(this, g)
137+
138+let an = if ((al == "WAVES"))
135139 then unit
136- else fromBase58String(aj)
140+ else fromBase58String(al)
137141
138-let am = if ((ak == "WAVES"))
142+let ao = if ((am == "WAVES"))
139143 then unit
140- else fromBase58String(ak)
144+ else fromBase58String(am)
141145
142-let an = {
143- let O = al
144- if ($isInstanceOf(O, "ByteVector"))
146+let ap = {
147+ let P = an
148+ if ($isInstanceOf(P, "ByteVector"))
145149 then {
146- let ao = O
147- value(assetInfo(ao)).name
150+ let aq = P
151+ value(assetInfo(aq)).name
148152 }
149- else if ($isInstanceOf(O, "Unit"))
153+ else if ($isInstanceOf(P, "Unit"))
150154 then {
151- let ap = O
155+ let ar = P
152156 "WAVES"
153157 }
154158 else throw("Match error")
155159 }
156160
157-let aq = {
158- let O = am
159- if ($isInstanceOf(O, "ByteVector"))
161+let as = {
162+ let P = ao
163+ if ($isInstanceOf(P, "ByteVector"))
160164 then {
161- let ao = O
162- value(assetInfo(ao)).name
165+ let aq = P
166+ value(assetInfo(aq)).name
163167 }
164- else if ($isInstanceOf(O, "Unit"))
168+ else if ($isInstanceOf(P, "Unit"))
165169 then {
166- let ap = O
170+ let ar = P
167171 "WAVES"
168172 }
169173 else throw("Match error")
170174 }
171175
172-let ar = getIntegerValue(this, h)
176+let at = getIntegerValue(this, h)
173177
174-let as = getIntegerValue(this, i)
178+let au = getIntegerValue(this, i)
175179
176-let at = fromBase58String(getStringValue(this, j))
180+let av = fromBase58String(getStringValue(this, j))
177181
178-let au = getIntegerValue(this, k)
182+let aw = getIntegerValue(this, k)
179183
180-let av = getIntegerValue(this, m)
184+let ax = getIntegerValue(this, m)
181185
182-let aw = getIntegerValue(this, l)
186+let ay = getIntegerValue(this, l)
183187
184-let ax = fraction(aw, 40, 100)
188+let az = fraction(ay, 35, 100)
185189
186-let ay = 1000000
190+let aA = fraction(ay, 10, 100)
187191
188-let az = 1000
192+let aB = 1000000
189193
190-let aA = 100000000
194+let aC = 1000
191195
192-let aB = 10000000000000000
196+let aD = 100000000
193197
194-let aC = 8
198+let aE = 10000000000000000
195199
196-let aD = 60000000
200+let aF = 8
197201
198-let aE = 140000000
202+let aG = 60000000
199203
200-let aF = 50
204+let aH = 140000000
201205
202-let aG = 2
206+let aI = 50
203207
204-let aH = 4600000000000000
208+let aJ = 2
205209
206-func aI (aJ) = {
207- let O = aJ
208- if ($isInstanceOf(O, "ByteVector"))
210+let aK = 4600000000000000
211+
212+func aL (aM) = {
213+ let P = aM
214+ if ($isInstanceOf(P, "ByteVector"))
209215 then {
210- let ao = O
211- assetBalance(this, ao)
216+ let aq = P
217+ assetBalance(this, aq)
212218 }
213- else if ($isInstanceOf(O, "Unit"))
219+ else if ($isInstanceOf(P, "Unit"))
214220 then {
215- let ap = O
221+ let ar = P
216222 wavesBalance(this).available
217223 }
218224 else throw("Match error")
219225 }
220226
221227
222-func aK (aJ) = {
223- let aL = {
224- let O = aJ
225- if ($isInstanceOf(O, "ByteVector"))
228+func aN (aM) = {
229+ let aO = {
230+ let P = aM
231+ if ($isInstanceOf(P, "ByteVector"))
226232 then {
227- let aM = O
228- if ((aM == aa))
229- then getInteger(X, ((("rpd_balance_" + toBase58String(aM)) + "_") + toString(this)))
233+ let aP = P
234+ if ((aP == ac))
235+ then getInteger(Z, ((("rpd_balance_" + toBase58String(aP)) + "_") + toString(this)))
230236 else 0
231237 }
232- else if ($isInstanceOf(O, "Unit"))
238+ else if ($isInstanceOf(P, "Unit"))
233239 then 0
234240 else throw("Match error")
235241 }
236- let O = aL
237- if ($isInstanceOf(O, "Int"))
242+ let P = aO
243+ if ($isInstanceOf(P, "Int"))
238244 then {
239- let aN = O
240- aN
245+ let aQ = P
246+ aQ
241247 }
242248 else 0
243249 }
244250
245251
246-let aO = aK(al)
252+let aR = aN(an)
247253
248-let aP = aK(am)
254+let aS = aN(ao)
249255
250-let aQ = (ar - aO)
256+let aT = (at - aR)
251257
252-let aR = (as - aP)
258+let aU = (au - aS)
253259
254-let aS = (aI(al) + aO)
260+let aV = (aL(an) + aR)
255261
256-let aT = (aI(am) + aP)
262+let aW = (aL(ao) + aS)
257263
258-let aU = if ((aS >= ar))
259- then (aT >= as)
264+let aX = if ((aV >= at))
265+ then (aW >= au)
260266 else false
261267
262-func aV (aW,aX) = ((fraction(aB, aW, aX) + fraction(aB, aX, aW)) / 2)
268+func aY (aZ,ba) = ((fraction(aE, aZ, ba) + fraction(aE, ba, aZ)) / 2)
263269
264270
265-func aY (aW,aX) = {
266- let aZ = aV(aW, aX)
267- (fraction((aW + aX), aB, pow(aZ, aC, aF, aG, aC, CEILING)) + (2 * fraction(toInt(pow(fraction(toBigInt(aW), toBigInt(aX), toBigInt(aA)), 0, toBigInt(5), 1, (aC / 2), DOWN)), pow((aZ - aH), aC, aF, aG, aC, DOWN), aA)))
271+func bb (aZ,ba) = {
272+ let bc = aY(aZ, ba)
273+ (fraction((aZ + ba), aE, pow(bc, aF, aI, aJ, aF, CEILING)) + (2 * fraction(toInt(pow(fraction(toBigInt(aZ), toBigInt(ba), toBigInt(aD)), 0, toBigInt(5), 1, (aF / 2), DOWN)), pow((bc - aK), aF, aI, aJ, aF, DOWN), aD)))
268274 }
269275
270276
271-func ba (bb,bc,bd,be,bf,bg,bh) = {
272- let bi = (aB - ((aB * 1) / 10000000))
273- let bj = (bb - bc)
274- let aW = (bf + bd)
275- let aX = (bg + bd)
276- func bk (bl,bm) = if ((bl._1 == -1))
277+func bd (be,bf,bg,bh,bi,bj,bk) = {
278+ let bl = (aE - ((aE * 1) / 10000000))
279+ let bm = (be - bf)
280+ let aZ = (bi + bg)
281+ let ba = (bj + bg)
282+ func bn (bo,bp) = if ((bo._1 == -1))
277283 then {
278- let bn = (bb - (((bm * bj) / 3) / az))
279- let bo = if ((be == al))
280- then aY(aW, (bg - bn))
281- else aY((bf - bn), aX)
282- if ((bo > bh))
283- then $Tuple2(bn, bo)
284+ let bq = (be - (((bp * bm) / 3) / aC))
285+ let br = if ((bh == an))
286+ then bb(aZ, (bj - bq))
287+ else bb((bi - bq), ba)
288+ if ((br > bk))
289+ then $Tuple2(bq, br)
284290 else $Tuple2(-1, 0)
285291 }
286- else bl
292+ else bo
287293
288- let bp = bk($Tuple2(-1, 0), 3000)
289- if ((0 > bp._1))
294+ let bs = bn($Tuple2(-1, 0), 3000)
295+ if ((0 > bs._1))
290296 then throw("Price is worse than minReceived")
291297 else {
292- let bq = if ((be == al))
293- then aY(aW, (bg - bb))
294- else if ((be == am))
295- then aY((bf - bb), aX)
298+ let bt = if ((bh == an))
299+ then bb(aZ, (bj - be))
300+ else if ((bh == ao))
301+ then bb((bi - be), ba)
296302 else throw("Wrong asset in payment")
297- if ((bh > bq))
298- then if ((bi >= fraction(aB, bh, bq)))
303+ if ((bk > bt))
304+ then if ((bl >= fraction(aE, bk, bt)))
299305 then throw("The requested price is too not profitable for user")
300306 else {
301- let br = {
302- let bs = [25, 200, 500]
303- let bt = size(bs)
304- let bu = $Tuple2(-1, 0)
305- func bv (bw,bx) = if ((bx >= bt))
306- then bw
307- else bk(bw, bs[bx])
307+ let bu = {
308+ let bv = [25, 200, 500]
309+ let bw = size(bv)
310+ let bx = $Tuple2(-1, 0)
311+ func by (bz,bA) = if ((bA >= bw))
312+ then bz
313+ else bn(bz, bv[bA])
308314
309- func by (bw,bx) = if ((bx >= bt))
310- then bw
315+ func bB (bz,bA) = if ((bA >= bw))
316+ then bz
311317 else throw("List size exceeds 3")
312318
313- by(bv(bv(bv(bu, 0), 1), 2), 3)
319+ bB(by(by(by(bx, 0), 1), 2), 3)
314320 }
315- if ((0 > br._1))
316- then bp._1
317- else br._1
321+ if ((0 > bu._1))
322+ then bs._1
323+ else bu._1
318324 }
319325 else {
320- let br = {
321- let bs = [-500, -200, -25]
322- let bt = size(bs)
323- let bu = $Tuple2(-1, 0)
324- func bv (bw,bx) = if ((bx >= bt))
325- then bw
326- else bk(bw, bs[bx])
326+ let bu = {
327+ let bv = [-500, -200, -25]
328+ let bw = size(bv)
329+ let bx = $Tuple2(-1, 0)
330+ func by (bz,bA) = if ((bA >= bw))
331+ then bz
332+ else bn(bz, bv[bA])
327333
328- func by (bw,bx) = if ((bx >= bt))
329- then bw
334+ func bB (bz,bA) = if ((bA >= bw))
335+ then bz
330336 else throw("List size exceeds 3")
331337
332- by(bv(bv(bv(bu, 0), 1), 2), 3)
338+ bB(by(by(by(bx, 0), 1), 2), 3)
333339 }
334- let bz = if ((0 > br._1))
335- then $Tuple2(bb, bq)
336- else br
337- if ((bi >= fraction(aB, bh, bz._2)))
340+ let bC = if ((0 > bu._1))
341+ then $Tuple2(be, bt)
342+ else bu
343+ if ((bl >= fraction(aE, bk, bC._2)))
338344 then throw("The requested price is too not profitable for user")
339- else bz._1
345+ else bC._1
340346 }
341347 }
342348 }
343349
344350
345-func bA (aJ) = {
346- let O = aJ
347- if ($isInstanceOf(O, "ByteVector"))
351+func bD (aM) = {
352+ let P = aM
353+ if ($isInstanceOf(P, "ByteVector"))
348354 then {
349- let ao = O
350- let bB = toBase58String(ao)
351- let bC = valueOrErrorMessage(assetInfo(ao), (("Asset " + bB) + " doesn't exist"))
352- $Tuple3(bB, bC.name, bC.decimals)
355+ let aq = P
356+ let bE = toBase58String(aq)
357+ let bF = valueOrErrorMessage(assetInfo(aq), (("Asset " + bE) + " doesn't exist"))
358+ $Tuple3(bE, bF.name, bF.decimals)
353359 }
354- else if ($isInstanceOf(O, "Unit"))
360+ else if ($isInstanceOf(P, "Unit"))
355361 then {
356- let ap = O
362+ let ar = P
357363 $Tuple3("WAVES", "WAVES", 8)
358364 }
359365 else throw("Match error")
360366 }
361367
362368
363-func bD (bE) = [BooleanEntry(c, false), StringEntry(n, bE)]
369+func bG (bH) = [BooleanEntry(c, false), StringEntry(n, bH)]
364370
365371
366-func bF () = throw("DApp is already active")
372+func bI () = throw("DApp is already active")
367373
368374
369-func bG () = if (if (ag)
370- then ah
375+func bJ () = if (if (ai)
376+ then aj
371377 else false)
372378 then unit
373379 else throw("DApp is inactive at this moment")
374380
375381
376-func bH () = if (!(ai))
382+func bK () = if (!(ak))
377383 then unit
378384 else throw("Pool is deprecated. Only withdraw action allowed.")
379385
380386
381-func bI (aN) = if (containsElement([R, S, T], aN.callerPublicKey))
387+func bL (aQ) = if (containsElement([S, T, U], aQ.callerPublicKey))
382388 then unit
383389 else throw("Only admin can call this function")
384390
385391
386-func bJ (aN) = if ((this == aN.caller))
392+func bM (aQ) = if ((this == aQ.caller))
387393 then unit
388394 else throw("Only contract itself can call this function")
389395
390396
391-func bK () = throw(((("Incorrect assets attached. Expected: " + aj) + " and ") + ak))
397+func bN () = throw(((("Incorrect assets attached. Expected: " + al) + " and ") + am))
392398
393399
394-func bL () = throw("One attached payment expected")
400+func bO () = throw("One attached payment expected")
395401
396402
397-func bM () = bD(((((((((((((((("Suspicious state. Actual balances: " + toString(ar)) + " ") + an) + ", ") + toString(as)) + " ") + aq) + ". State: ") + toString(aI(al))) + " ") + an) + ", ") + toString(aI(am))) + " ") + aq))
403+func bP () = bG(((((((((((((((("Suspicious state. Actual balances: " + toString(at)) + " ") + ap) + ", ") + toString(au)) + " ") + as) + ". State: ") + toString(aL(an))) + " ") + ap) + ", ") + toString(aL(ao))) + " ") + as))
398404
399405
400-func bN (bO,aJ) = if (bO)
401- then $Tuple2("lockNeutrino", X)
402- else $Tuple2("unlockNeutrino", X)
406+func bQ (bR,aM) = if (bR)
407+ then $Tuple2("lockNeutrino", Z)
408+ else $Tuple2("unlockNeutrino", Z)
403409
404410
405-func bP (bO,bQ,aJ) = if (bO)
411+func bS (bR,bT,aM) = if (bR)
406412 then {
407- let bR = bN(bO, aJ)
408- let bS = bR._1
409- let bT = bR._2
410- $Tuple4(bS, bT, nil, [AttachedPayment(aJ, bQ)])
413+ let bU = bQ(bR, aM)
414+ let bV = bU._1
415+ let bW = bU._2
416+ $Tuple4(bV, bW, nil, [AttachedPayment(aM, bT)])
411417 }
412418 else {
413- let bU = bN(bO, aJ)
414- let bS = bU._1
415- let bT = bU._2
416- $Tuple4(bS, bT, [bQ, toBase58String(aJ)], nil)
419+ let bX = bQ(bR, aM)
420+ let bV = bX._1
421+ let bW = bX._2
422+ $Tuple4(bV, bW, [bT, toBase58String(aM)], nil)
417423 }
418424
419425
420-func bV (bW) = {
421- let bX = valueOrElse(getInteger(W, (toString(bW) + s)), 0)
422- let bY = valueOrElse(getInteger(W, (toString(bW) + t)), bX)
423- let bZ = split(getStringValue(L, r), ",")
424- let ca = split(getStringValue(L, q), ",")
425- if (if ((bY >= parseIntValue(bZ[0])))
426- then (parseIntValue(bZ[1]) > bY)
426+func bY (bZ) = {
427+ let ca = valueOrElse(getInteger(Y, (toString(bZ) + s)), 0)
428+ let cb = valueOrElse(getInteger(Y, (toString(bZ) + t)), ca)
429+ let cc = split(getStringValue(M, r), ",")
430+ let cd = split(getStringValue(M, q), ",")
431+ if (if ((cb >= parseIntValue(cc[0])))
432+ then (parseIntValue(cc[1]) > cb)
427433 else false)
428- then (ay - parseIntValue(ca[0]))
429- else if (if ((bY >= parseIntValue(bZ[1])))
430- then (parseIntValue(bZ[2]) > bY)
434+ then (aB - parseIntValue(cd[0]))
435+ else if (if ((cb >= parseIntValue(cc[1])))
436+ then (parseIntValue(cc[2]) > cb)
431437 else false)
432- then (ay - parseIntValue(ca[1]))
433- else if (if ((bY >= parseIntValue(bZ[2])))
434- then (parseIntValue(bZ[3]) > bY)
438+ then (aB - parseIntValue(cd[1]))
439+ else if (if ((cb >= parseIntValue(cc[2])))
440+ then (parseIntValue(cc[3]) > cb)
435441 else false)
436- then (ay - parseIntValue(ca[2]))
437- else if (if ((bY >= parseIntValue(bZ[3])))
438- then (parseIntValue(bZ[4]) > bY)
442+ then (aB - parseIntValue(cd[2]))
443+ else if (if ((cb >= parseIntValue(cc[3])))
444+ then (parseIntValue(cc[4]) > cb)
439445 else false)
440- then (ay - parseIntValue(ca[3]))
441- else if ((bY >= parseIntValue(bZ[4])))
442- then (ay - parseIntValue(ca[4]))
443- else ay
446+ then (aB - parseIntValue(cd[3]))
447+ else if ((cb >= parseIntValue(cc[4])))
448+ then (aB - parseIntValue(cd[4]))
449+ else aB
444450 }
445451
446452
447-func cb (cc,cd,ce) = {
448- let cf = getIntegerValue(this, A)
449- let cg = if (if ((ce == al))
450- then (cc > cd)
453+func ce (cf,cg,ch) = {
454+ let ci = getIntegerValue(this, A)
455+ let cj = if (if ((ch == an))
456+ then (cf > cg)
451457 else false)
452- then fraction(cc, 1, cd, CEILING)
453- else if (if ((ce == am))
454- then (cd > cc)
458+ then fraction(cf, 1, cg, CEILING)
459+ else if (if ((ch == ao))
460+ then (cg > cf)
455461 else false)
456- then fraction(cd, 1, cc, CEILING)
462+ then fraction(cg, 1, cf, CEILING)
457463 else 0
458- if ((cg > cf))
464+ if ((cj > ci))
459465 then {
460- let ch = if ((ce == al))
461- then $Tuple2(aq, an)
462- else $Tuple2(an, aq)
463- let ci = ch._1
464- let cj = ch._2
465- throw((((("Buying " + ci) + " is temporarily unavailable due to the ") + cj) + " depeg"))
466+ let ck = if ((ch == an))
467+ then $Tuple2(as, ap)
468+ else $Tuple2(ap, as)
469+ let cl = ck._1
470+ let cm = ck._2
471+ throw((((("Buying " + cl) + " is temporarily unavailable due to the ") + cm) + " depeg"))
466472 }
467473 else true
468474 }
469475
470476
471-func ck (aN,cl,cm) = {
472- let cn = aN.payments[0].assetId
473- let co = aN.payments[1].assetId
474- let cp = fraction(aA, aN.payments[0].amount, ar)
475- let cq = fraction(aA, aN.payments[1].amount, as)
476- let cr = bA(cn)
477- let cs = cr._1
478- let ct = cr._2
479- let cu = cr._3
480- let cv = bA(co)
481- let cw = cv._1
482- let cx = cv._2
483- let cy = cv._3
484- let cz = if ((cq > cp))
477+func cn (aQ,co,cp) = {
478+ let cq = aQ.payments[0].assetId
479+ let cr = aQ.payments[1].assetId
480+ let cs = fraction(aD, aQ.payments[0].amount, at)
481+ let ct = fraction(aD, aQ.payments[1].amount, au)
482+ let cu = bD(cq)
483+ let cv = cu._1
484+ let cw = cu._2
485+ let cx = cu._3
486+ let cy = bD(cr)
487+ let cz = cy._1
488+ let cA = cy._2
489+ let cB = cy._3
490+ let cC = if ((ct > cs))
485491 then {
486- let cA = fraction(as, cp, aA, CEILING)
487- $Tuple5(aN.payments[0].amount, cA, (aN.payments[1].amount - cA), co, cp)
492+ let cD = fraction(au, cs, aD, CEILING)
493+ $Tuple5(aQ.payments[0].amount, cD, (aQ.payments[1].amount - cD), cr, cs)
488494 }
489495 else {
490- let cA = fraction(ar, cq, aA, CEILING)
491- $Tuple5(cA, aN.payments[1].amount, (aN.payments[0].amount - cA), cn, cq)
496+ let cD = fraction(at, ct, aD, CEILING)
497+ $Tuple5(cD, aQ.payments[1].amount, (aQ.payments[0].amount - cD), cq, ct)
492498 }
493- let cB = cz._1
494- let cC = cz._2
495- let cD = cz._3
496- let cE = cz._4
497- let cF = cz._5
498- let cG = fraction(cF, au, aA)
499- if (if ((size(aN.payments) != 2))
500- then (size(aN.payments) != 3)
499+ let cE = cC._1
500+ let cF = cC._2
501+ let cG = cC._3
502+ let cH = cC._4
503+ let cI = cC._5
504+ let cJ = fraction(cI, aw, aD)
505+ if (if ((size(aQ.payments) != 2))
506+ then (size(aQ.payments) != 3)
501507 else false)
502508 then throw("Two or three payments expected")
503- else if (if ((cn != al))
509+ else if (if ((cq != an))
504510 then true
505- else (co != am))
506- then bK()
507- else if ((cG == 0))
511+ else (cr != ao))
512+ then bN()
513+ else if ((cJ == 0))
508514 then throw("Too small amount to replenish")
509- else if ((0 > cD))
515+ else if ((0 > cG))
510516 then throw("Change < 0")
511- else if (!(aU))
512- then ([ScriptTransfer(aN.caller, cB, cn), ScriptTransfer(aN.caller, cC, co)] ++ bM())
517+ else if (!(aX))
518+ then ([ScriptTransfer(aQ.caller, cE, cq), ScriptTransfer(aQ.caller, cF, cr)] ++ bP())
513519 else {
514- let cH = if (contains(ab, cs))
515- then invoke(this, "stakeUnstake", [true, cB, cs], nil)
520+ let cK = if (contains(ad, cv))
521+ then invoke(this, "stakeUnstake", [true, cE, cv], nil)
516522 else 0
517- if ((cH == cH))
523+ if ((cK == cK))
518524 then {
519- let cI = if (contains(ab, cw))
520- then invoke(this, "stakeUnstake", [true, cC, cw], nil)
525+ let cL = if (contains(ad, cz))
526+ then invoke(this, "stakeUnstake", [true, cF, cz], nil)
521527 else 0
522- if ((cI == cI))
528+ if ((cL == cL))
523529 then {
524- let cJ = [IntegerEntry(h, (ar + cB)), IntegerEntry(i, (as + cC)), IntegerEntry(k, (au + cG)), IntegerEntry(m, aY((ar + cB), (as + cC))), ScriptTransfer(aN.caller, cD, cE)]
525- if (cl)
530+ let cM = [IntegerEntry(h, (at + cE)), IntegerEntry(i, (au + cF)), IntegerEntry(k, (aw + cJ)), IntegerEntry(m, bb((at + cE), (au + cF))), ScriptTransfer(aQ.caller, cG, cH)]
531+ if (co)
526532 then {
527- let cK = ([AttachedPayment(at, cG)] ++ (if ((size(aN.payments) == 3))
528- then [AttachedPayment(if ((aN.payments[2].assetId == base58''))
533+ let cN = ([AttachedPayment(av, cJ)] ++ (if ((size(aQ.payments) == 3))
534+ then [AttachedPayment(if ((aQ.payments[2].assetId == base58''))
529535 then unit
530- else aN.payments[2].assetId, aN.payments[2].amount)]
536+ else aQ.payments[2].assetId, aQ.payments[2].amount)]
531537 else nil))
532- let cL = invoke(this, "reissueShare", [cG], nil)
533- if ((cL == cL))
538+ let cO = invoke(this, "reissueShare", [cJ], nil)
539+ if ((cO == cO))
534540 then {
535- let cM = invoke(Z, "lockShareTokensFromPool", [aN.caller.bytes, toString(this), cm], cK)
536- if ((cM == cM))
537- then cJ
541+ let cP = invoke(ab, "lockShareTokensFromPool", [aQ.caller.bytes, toString(this), cp], cN)
542+ if ((cP == cP))
543+ then cM
538544 else throw("Strict value is not equal to itself.")
539545 }
540546 else throw("Strict value is not equal to itself.")
541547 }
542- else (cJ ++ [Reissue(at, cG, true), ScriptTransfer(aN.caller, cG, at)])
548+ else (cM ++ [Reissue(av, cJ, true), ScriptTransfer(aQ.caller, cJ, av)])
543549 }
544550 else throw("Strict value is not equal to itself.")
545551 }
548554 }
549555
550556
551-func cN (aN,cO,cP,cl,cm) = {
552- let cQ = $Tuple2(aN.payments[0].amount, aN.payments[0].assetId)
553- let cR = cQ._1
554- let ce = cQ._2
555- let cS = bA(ce)
556- let cT = cS._1
557- let cU = cS._2
558- let cV = cS._3
559- let cW = 5000000
560- let cX = 50000000
561- let cY = if ((cX > cR))
557+func cQ (aQ,cR,cS,co,cp) = {
558+ let cT = $Tuple2(aQ.payments[0].amount, aQ.payments[0].assetId)
559+ let cU = cT._1
560+ let ch = cT._2
561+ let cV = bD(ch)
562+ let cW = cV._1
563+ let cX = cV._2
564+ let cY = cV._3
565+ let cZ = 5000000
566+ let da = 50000000
567+ let db = if ((da > cU))
562568 then 100000
563569 else 1
564- let cZ = (aA - ((aA * cY) / 10000000))
565- let da = (aA + ((aA * cY) / 10000000))
566- let db = (aA - ((aA * 1) / 10000000))
567- if ((cW > cR))
568- then throw((((("Payment amount " + toString(cR)) + " does not exceed the minimum amount of ") + toString(cW)) + " tokens"))
569- else if (if ((size(aN.payments) != 1))
570- then (size(aN.payments) != 2)
570+ let dc = (aD - ((aD * db) / 10000000))
571+ let dd = (aD + ((aD * db) / 10000000))
572+ let de = (aD - ((aD * 1) / 10000000))
573+ if ((cZ > cU))
574+ then throw((((("Payment amount " + toString(cU)) + " does not exceed the minimum amount of ") + toString(cZ)) + " tokens"))
575+ else if (if ((size(aQ.payments) != 1))
576+ then (size(aQ.payments) != 2)
571577 else false)
572578 then throw("One or two payments expected")
573- else if (!(aU))
574- then ([ScriptTransfer(aN.caller, cR, ce)] ++ bM())
575- else if (if ((ce != al))
576- then (ce != am)
579+ else if (!(aX))
580+ then ([ScriptTransfer(aQ.caller, cU, ch)] ++ bP())
581+ else if (if ((ch != an))
582+ then (ch != ao)
577583 else false)
578- then bK()
584+ then bN()
579585 else {
580- let dc = if ((ce == al))
581- then $Tuple6((cR - cO), cP, (ar + cO), (as - cP), (ar + cR), as)
582- else $Tuple6(cP, (cR - cO), (ar - cP), (as + cO), ar, (as + cR))
583- let dd = dc._1
584- let de = dc._2
585- let df = dc._3
586- let dg = dc._4
587- let cc = dc._5
588- let cd = dc._6
589- let dh = aY(df, dg)
590- let di = (fraction(aB, df, dg) / fraction(aA, dd, de))
591- if (if ((db >= fraction(aA, av, dh)))
586+ let df = if ((ch == an))
587+ then $Tuple6((cU - cR), cS, (at + cR), (au - cS), (at + cU), au)
588+ else $Tuple6(cS, (cU - cR), (at - cS), (au + cR), at, (au + cU))
589+ let dg = df._1
590+ let dh = df._2
591+ let di = df._3
592+ let dj = df._4
593+ let cf = df._5
594+ let cg = df._6
595+ let dk = bb(di, dj)
596+ let dl = (fraction(aE, di, dj) / fraction(aD, dg, dh))
597+ if (if ((de >= fraction(aD, ax, dk)))
592598 then true
593- else (av > dh))
599+ else (ax > dk))
594600 then throw("Incorrect virtualSwapTokenPay or virtualSwapTokenGet value")
595- else if (if ((cZ > di))
601+ else if (if ((dc > dl))
596602 then true
597- else (di > da))
603+ else (dl > dd))
598604 then throw("Swap with virtualSwapTokenPay and virtualSwapTokenGet is possible, but ratio after virtual swap is incorrect")
599- else if (!(cb(cc, cd, ce)))
605+ else if (!(ce(cf, cg, ch)))
600606 then throw()
601607 else {
602- let cp = fraction(dd, aA, df)
603- let cq = fraction(de, aA, dg)
604- let cG = fraction(min([cp, cq]), au, aA)
605- let dj = fraction(cG, (ay - (aw / 2)), ay)
606- let dk = fraction(cG, (ax / 2), ay)
607- let dl = fraction(dk, ar, au)
608- let dm = fraction(dk, as, au)
609- let dn = if ((cT == aj))
610- then $Tuple3((cR - dl), dm, ak)
611- else $Tuple3((cR - dm), dl, aj)
612- let do = dn._1
613- let dp = dn._2
614- let dq = dn._3
615- let cH = if (contains(ab, cT))
616- then invoke(this, "stakeUnstake", [true, do, cT], nil)
608+ let cs = fraction(dg, aD, di)
609+ let ct = fraction(dh, aD, dj)
610+ let cJ = fraction(min([cs, ct]), aw, aD)
611+ let dm = fraction(cJ, (aB - (ay / 2)), aB)
612+ let dn = fraction(cJ, (az / 2), aB)
613+ let do = fraction(cJ, (aA / 2), aB)
614+ let dp = fraction(dn, at, aw)
615+ let dq = fraction(dn, au, aw)
616+ let dr = fraction(do, at, aw)
617+ let ds = fraction(do, au, aw)
618+ let dt = if ((cW == al))
619+ then $Tuple3(((cU - dp) - dr), (dq + ds), am)
620+ else $Tuple3(((cU - dq) - ds), (dp + dr), al)
621+ let du = dt._1
622+ let dv = dt._2
623+ let dw = dt._3
624+ let cK = if (contains(ad, cW))
625+ then invoke(this, "stakeUnstake", [true, du, cW], nil)
617626 else 0
618- if ((cH == cH))
627+ if ((cK == cK))
619628 then {
620- let cI = if (contains(ab, dq))
621- then invoke(this, "stakeUnstake", [false, dp, dq], nil)
629+ let cL = if (contains(ad, dw))
630+ then invoke(this, "stakeUnstake", [false, dv, dw], nil)
622631 else 0
623- if ((cI == cI))
632+ if ((cL == cL))
624633 then {
625- let cJ = [IntegerEntry(h, (cc - dl)), IntegerEntry(i, (cd - dm)), IntegerEntry(k, (au + dj)), IntegerEntry(m, aY((cc - dl), (cd - dm))), ScriptTransfer(V, dl, al), ScriptTransfer(V, dm, am)]
626- if (cl)
634+ let cM = [IntegerEntry(h, ((cf - dp) - dr)), IntegerEntry(i, ((cg - dq) - ds)), IntegerEntry(k, (aw + dm)), IntegerEntry(m, bb((cf - dp), (cg - dq))), ScriptTransfer(W, dp, an), ScriptTransfer(W, dq, ao), ScriptTransfer(X, dr, an), ScriptTransfer(X, ds, ao)]
635+ if (co)
627636 then {
628- let cK = ([AttachedPayment(at, dj)] ++ (if ((size(aN.payments) == 2))
629- then [AttachedPayment(if ((aN.payments[1].assetId == base58''))
637+ let cN = ([AttachedPayment(av, dm)] ++ (if ((size(aQ.payments) == 2))
638+ then [AttachedPayment(if ((aQ.payments[1].assetId == base58''))
630639 then unit
631- else aN.payments[1].assetId, aN.payments[1].amount)]
640+ else aQ.payments[1].assetId, aQ.payments[1].amount)]
632641 else nil))
633- let cL = invoke(this, "reissueShare", [dj], nil)
634- if ((cL == cL))
642+ let cO = invoke(this, "reissueShare", [dm], nil)
643+ if ((cO == cO))
635644 then {
636- let cM = invoke(Z, "lockShareTokensFromPool", [aN.caller.bytes, toString(this), cm], cK)
637- if ((cM == cM))
638- then cJ
645+ let cP = invoke(ab, "lockShareTokensFromPool", [aQ.caller.bytes, toString(this), cp], cN)
646+ if ((cP == cP))
647+ then cM
639648 else throw("Strict value is not equal to itself.")
640649 }
641650 else throw("Strict value is not equal to itself.")
642651 }
643- else (cJ ++ [Reissue(at, dj, true), ScriptTransfer(aN.caller, dj, at)])
652+ else (cM ++ [Reissue(av, dm, true), ScriptTransfer(aQ.caller, dm, av)])
644653 }
645654 else throw("Strict value is not equal to itself.")
646655 }
650659 }
651660
652661
653-func dr (aN,ds) = {
654- let dt = if ((size(aN.payments) == 1))
655- then if ((aN.payments[0].assetId != at))
656- then throw(("Incorrect asset attached. Expected: " + toBase58String(at)))
657- else $Tuple2(aN.payments[0].amount, aN.payments[0].assetId)
658- else $Tuple2(0, at)
659- let cR = dt._1
660- let ce = dt._2
661- if (!(aU))
662- then ([ScriptTransfer(aN.caller, cR, ce)] ++ bM())
662+func dx (aQ,dy) = {
663+ let dz = if ((size(aQ.payments) == 1))
664+ then if ((aQ.payments[0].assetId != av))
665+ then throw(("Incorrect asset attached. Expected: " + toBase58String(av)))
666+ else $Tuple2(aQ.payments[0].amount, aQ.payments[0].assetId)
667+ else $Tuple2(0, av)
668+ let cU = dz._1
669+ let ch = dz._2
670+ if (!(aX))
671+ then ([ScriptTransfer(aQ.caller, cU, ch)] ++ bP())
663672 else {
664- let du = if ((ds > 0))
665- then invoke(Z, "withdrawShareTokensFromPool", [aN.caller.bytes, toString(this), ds], nil)
673+ let dA = if ((dy > 0))
674+ then invoke(ab, "withdrawShareTokensFromPool", [aQ.caller.bytes, toString(this), dy], nil)
666675 else 0
667- if ((du == du))
676+ if ((dA == dA))
668677 then {
669- let dv = (cR + ds)
670- let dw = fraction(dv, ar, au)
671- let dx = fraction(dv, as, au)
672- let dy = aY((ar - dw), (as - dx))
673- let cH = if (contains(ab, aj))
674- then invoke(this, "stakeUnstake", [false, dw, aj], nil)
678+ let dB = (cU + dy)
679+ let dC = fraction(dB, at, aw)
680+ let dD = fraction(dB, au, aw)
681+ let dE = bb((at - dC), (au - dD))
682+ let cK = if (contains(ad, al))
683+ then invoke(this, "stakeUnstake", [false, dC, al], nil)
675684 else 0
676- if ((cH == cH))
685+ if ((cK == cK))
677686 then {
678- let cI = if (contains(ab, ak))
679- then invoke(this, "stakeUnstake", [false, dx, ak], nil)
687+ let cL = if (contains(ad, am))
688+ then invoke(this, "stakeUnstake", [false, dD, am], nil)
680689 else 0
681- if ((cI == cI))
682- then [IntegerEntry(h, (ar - dw)), IntegerEntry(i, (as - dx)), IntegerEntry(k, (au - dv)), IntegerEntry(m, dy), Burn(at, dv), ScriptTransfer(aN.caller, dw, al), ScriptTransfer(aN.caller, dx, am)]
690+ if ((cL == cL))
691+ then [IntegerEntry(h, (at - dC)), IntegerEntry(i, (au - dD)), IntegerEntry(k, (aw - dB)), IntegerEntry(m, dE), Burn(av, dB), ScriptTransfer(aQ.caller, dC, an), ScriptTransfer(aQ.caller, dD, ao)]
683692 else throw("Strict value is not equal to itself.")
684693 }
685694 else throw("Strict value is not equal to itself.")
689698 }
690699
691700
692-@Callable(aN)
693-func init (dz) = {
694- let dA = $Tuple2(aN.payments[0].amount, aN.payments[0].assetId)
695- let cB = dA._1
696- let cn = dA._2
697- let dB = $Tuple2(aN.payments[1].amount, aN.payments[1].assetId)
698- let cC = dB._1
699- let co = dB._2
700- let dC = bA(cn)
701- let cs = dC._1
702- let ct = dC._2
703- let cu = dC._3
704- let dD = bA(co)
705- let cw = dD._1
706- let cx = dD._2
707- let cy = dD._3
701+@Callable(aQ)
702+func init (dF) = {
703+ let dG = $Tuple2(aQ.payments[0].amount, aQ.payments[0].assetId)
704+ let cE = dG._1
705+ let cq = dG._2
706+ let dH = $Tuple2(aQ.payments[1].amount, aQ.payments[1].assetId)
707+ let cF = dH._1
708+ let cr = dH._2
709+ let dI = bD(cq)
710+ let cv = dI._1
711+ let cw = dI._2
712+ let cx = dI._3
713+ let dJ = bD(cr)
714+ let cz = dJ._1
715+ let cA = dJ._2
716+ let cB = dJ._3
708717 if (isDefined(getBoolean(this, c)))
709- then bF()
710- else if ((cn == co))
718+ then bI()
719+ else if ((cq == cr))
711720 then throw("Assets must be different")
712721 else {
713- let dE = ((("s" + take(ct, 7)) + "_") + take(cx, 7))
714- let dF = ((((("ShareToken of SwopFi protocol for " + ct) + " and ") + cx) + " at address ") + toString(this))
715- let dG = ((cu + cy) / 2)
716- let dH = fraction(pow(cB, cu, 5, 1, cu, DOWN), pow(cC, cy, 5, 1, cy, DOWN), pow(10, 0, dG, 0, 0, DOWN))
717- let dI = Issue(dE, dF, dH, dG, true)
718- let dJ = calculateAssetId(dI)
719- let dy = aY(cB, cC)
720- let cH = if (contains(ab, cs))
721- then invoke(this, "stakeUnstake", [true, cB, cs], nil)
722+ let dK = ((("s" + take(cw, 7)) + "_") + take(cA, 7))
723+ let dL = ((((("ShareToken of SwopFi protocol for " + cw) + " and ") + cA) + " at address ") + toString(this))
724+ let dM = ((cx + cB) / 2)
725+ let dN = fraction(pow(cE, cx, 5, 1, cx, DOWN), pow(cF, cB, 5, 1, cB, DOWN), pow(10, 0, dM, 0, 0, DOWN))
726+ let dO = Issue(dK, dL, dN, dM, true)
727+ let dP = calculateAssetId(dO)
728+ let dE = bb(cE, cF)
729+ let cK = if (contains(ad, cv))
730+ then invoke(this, "stakeUnstake", [true, cE, cv], nil)
722731 else 0
723- if ((cH == cH))
732+ if ((cK == cK))
724733 then {
725- let cI = if (contains(ab, cw))
726- then invoke(this, "stakeUnstake", [true, cC, cw], nil)
734+ let cL = if (contains(ad, cz))
735+ then invoke(this, "stakeUnstake", [true, cF, cz], nil)
727736 else 0
728- if ((cI == cI))
737+ if ((cL == cL))
729738 then {
730- let dK = [StringEntry(b, a), BooleanEntry(c, true), StringEntry(f, cs), StringEntry(g, cw), IntegerEntry(h, cB), IntegerEntry(i, cC), IntegerEntry(m, dy), IntegerEntry(l, getIntegerValue(L, "base_fee_flat")), IntegerEntry(A, 3), dI, StringEntry(j, toBase58String(dJ)), IntegerEntry(k, dH), ScriptTransfer(aN.caller, dH, dJ)]
731- if (dz)
732- then (dK ++ [BooleanEntry(u, dz), IntegerEntry(v, (ad + (af * ae)))])
733- else dK
739+ let dQ = [StringEntry(b, a), BooleanEntry(c, true), StringEntry(f, cv), StringEntry(g, cz), IntegerEntry(h, cE), IntegerEntry(i, cF), IntegerEntry(m, dE), IntegerEntry(l, getIntegerValue(M, "base_fee_flat")), IntegerEntry(A, 3), dO, StringEntry(j, toBase58String(dP)), IntegerEntry(k, dN), ScriptTransfer(aQ.caller, dN, dP)]
740+ if (dF)
741+ then (dQ ++ [BooleanEntry(u, dF), IntegerEntry(v, (af + (ah * ag)))])
742+ else dQ
734743 }
735744 else throw("Strict value is not equal to itself.")
736745 }
740749
741750
742751
743-@Callable(aN)
744-func replenishWithTwoTokensV2 (cl,cm) = valueOrElse(bG(), valueOrElse(bH(), ck(aN, cl, cm)))
752+@Callable(aQ)
753+func replenishWithTwoTokensV2 (co,cp) = valueOrElse(bJ(), valueOrElse(bK(), cn(aQ, co, cp)))
745754
746755
747756
748-@Callable(aN)
749-func replenishWithOneTokenV2 (cO,cP,cl,cm) = valueOrElse(bG(), valueOrElse(bH(), cN(aN, cO, cP, cl, cm)))
757+@Callable(aQ)
758+func replenishWithOneTokenV2 (cR,cS,co,cp) = valueOrElse(bJ(), valueOrElse(bK(), cQ(aQ, cR, cS, co, cp)))
750759
751760
752761
753-@Callable(aN)
754-func withdrawV2 (ds) = valueOrElse(bG(), dr(aN, ds))
762+@Callable(aQ)
763+func withdrawV2 (dy) = valueOrElse(bJ(), dx(aQ, dy))
755764
756765
757766
758-@Callable(aN)
759-func withdrawOneToken (ds,dL,dM,dN) = valueOrElse(bG(), valueOrElse(bH(), {
760- let dO = if ((size(aN.payments) == 1))
761- then if ((aN.payments[0].assetId != at))
762- then throw(("Incorrect asset attached. Expected: " + toBase58String(at)))
763- else $Tuple2(aN.payments[0].amount, aN.payments[0].assetId)
764- else $Tuple2(0, at)
765- let cR = dO._1
766- let ce = dO._2
767- let dv = (cR + ds)
768- if (if ((dL != aj))
769- then (dL != ak)
767+@Callable(aQ)
768+func withdrawOneToken (dy,dR,dS,dT) = valueOrElse(bJ(), valueOrElse(bK(), {
769+ let dU = if ((size(aQ.payments) == 1))
770+ then if ((aQ.payments[0].assetId != av))
771+ then throw(("Incorrect asset attached. Expected: " + toBase58String(av)))
772+ else $Tuple2(aQ.payments[0].amount, aQ.payments[0].assetId)
773+ else $Tuple2(0, av)
774+ let cU = dU._1
775+ let ch = dU._2
776+ let dB = (cU + dy)
777+ if (if ((dR != al))
778+ then (dR != am)
770779 else false)
771780 then throw("Incorrect withdraw asset")
772- else if ((0 >= dv))
781+ else if ((0 >= dB))
773782 then throw("withdraw amount must be grater than 0")
774- else if (!(aU))
775- then ([ScriptTransfer(aN.caller, cR, ce)] ++ bM())
783+ else if (!(aX))
784+ then ([ScriptTransfer(aQ.caller, cU, ch)] ++ bP())
776785 else {
777- let du = if ((ds > 0))
778- then invoke(Z, "withdrawShareTokensFromPool", [aN.caller.bytes, toString(this), ds], nil)
786+ let dA = if ((dy > 0))
787+ then invoke(ab, "withdrawShareTokensFromPool", [aQ.caller.bytes, toString(this), dy], nil)
779788 else 0
780- if ((du == du))
789+ if ((dA == dA))
781790 then {
782- let dw = fraction(dv, ar, au)
783- let dx = fraction(dv, as, au)
784- let dP = (ar - dw)
785- let dQ = (as - dx)
786- let dR = bV(aN.originCaller)
787- let dS = if ((dL == aj))
788- then ba(dM, dN, dx, am, dP, dQ, aY(dP, dQ))
789- else ba(dM, dN, dw, al, dP, dQ, aY(dP, dQ))
790- let dT = fraction(dS, fraction(ax, dR, ay, CEILING), ay)
791- let dU = fraction(dS, (ay - fraction(aw, dR, ay, CEILING)), ay)
792- let dV = if ((dL == aj))
793- then $Tuple4((dw + dU), (((ar - dw) - dU) - dT), as, am)
794- else $Tuple4((dx + dU), ar, (((as - dx) - dU) - dT), al)
795- let dW = dV._1
796- let dX = dV._2
797- let dY = dV._3
798- let dZ = dV._4
799- if (!(cb(dX, dY, dZ)))
791+ let dC = fraction(dB, at, aw)
792+ let dD = fraction(dB, au, aw)
793+ let dV = (at - dC)
794+ let dW = (au - dD)
795+ let dX = bY(aQ.originCaller)
796+ let dY = if ((dR == al))
797+ then bd(dS, dT, dD, ao, dV, dW, bb(dV, dW))
798+ else bd(dS, dT, dC, an, dV, dW, bb(dV, dW))
799+ let dZ = fraction(dY, fraction(az, dX, aB, CEILING), aB)
800+ let ea = fraction(dY, fraction(aA, dX, aB, CEILING), aB)
801+ let eb = fraction(dY, (aB - fraction(ay, dX, aB, CEILING)), aB)
802+ let ec = if ((dR == al))
803+ then $Tuple4((dC + eb), ((((at - dC) - eb) - dZ) - ea), au, ao)
804+ else $Tuple4((dD + eb), at, ((((au - dD) - eb) - dZ) - ea), an)
805+ let ed = ec._1
806+ let ee = ec._2
807+ let ef = ec._3
808+ let eg = ec._4
809+ if (!(ce(ee, ef, eg)))
800810 then throw()
801811 else {
802- let dy = aY(dX, dY)
803- let cH = if (contains(ab, dL))
804- then invoke(this, "stakeUnstake", [false, (dW + dT), dL], nil)
812+ let dE = bb(ee, ef)
813+ let cK = if (contains(ad, dR))
814+ then invoke(this, "stakeUnstake", [false, ((ed + dZ) + ea), dR], nil)
805815 else 0
806- if ((cH == cH))
807- then [IntegerEntry(h, dX), IntegerEntry(i, dY), IntegerEntry(k, (au - dv)), IntegerEntry(m, dy), Burn(at, dv), ScriptTransfer(aN.caller, dW, fromBase58String(dL)), ScriptTransfer(V, dT, fromBase58String(dL))]
816+ if ((cK == cK))
817+ then [IntegerEntry(h, ee), IntegerEntry(i, ef), IntegerEntry(k, (aw - dB)), IntegerEntry(m, dE), Burn(av, dB), ScriptTransfer(aQ.caller, ed, fromBase58String(dR)), ScriptTransfer(W, dZ, fromBase58String(dR)), ScriptTransfer(X, ea, fromBase58String(dR))]
808818 else throw("Strict value is not equal to itself.")
809819 }
810820 }
814824
815825
816826
817-@Callable(aN)
818-func exchange (dM,dN) = valueOrElse(bG(), valueOrElse(bH(), {
819- let ea = $Tuple2(aN.payments[0].amount, aN.payments[0].assetId)
820- let cR = ea._1
821- let ce = ea._2
822- if ((0 >= dM))
823- then throw(("Estimated amount must be positive. Actual: " + toString(dM)))
824- else if ((dN > dM))
827+@Callable(aQ)
828+func exchange (dS,dT) = valueOrElse(bJ(), valueOrElse(bK(), {
829+ let eh = $Tuple2(aQ.payments[0].amount, aQ.payments[0].assetId)
830+ let cU = eh._1
831+ let ch = eh._2
832+ if ((0 >= dS))
833+ then throw(("Estimated amount must be positive. Actual: " + toString(dS)))
834+ else if ((dT > dS))
825835 then throw("Minimal amount can't be greater than estimated.")
826- else if ((size(aN.payments) != 1))
827- then bL()
828- else if (!(aU))
829- then ([ScriptTransfer(aN.caller, cR, ce)] ++ bM())
830- else if (if ((ce != al))
831- then (ce != am)
836+ else if ((size(aQ.payments) != 1))
837+ then bO()
838+ else if (!(aX))
839+ then ([ScriptTransfer(aQ.caller, cU, ch)] ++ bP())
840+ else if (if ((ch != an))
841+ then (ch != ao)
832842 else false)
833- then bK()
834- else if ((10000000 > cR))
843+ then bN()
844+ else if ((10000000 > cU))
835845 then throw("Only swap of 10.000000 or more tokens is allowed")
836- else if (if ((aD > fraction(aA, dN, cR)))
846+ else if (if ((aG > fraction(aD, dT, cU)))
837847 then true
838- else (fraction(aA, dM, cR) > aE))
848+ else (fraction(aD, dS, cU) > aH))
839849 then throw("Incorrect args and pmt ratio")
840850 else {
841- let eb = if ((ce == al))
842- then am
843- else al
844- let bQ = ba(dM, dN, cR, ce, ar, as, av)
845- let dR = bV(aN.originCaller)
846- let ec = fraction(bQ, fraction(ax, dR, ay, CEILING), ay)
847- let ed = fraction(bQ, (ay - fraction(aw, dR, ay, CEILING)), ay)
848- let ee = if ((ce == al))
849- then $Tuple2((ar + cR), ((as - ed) - ec))
850- else $Tuple2(((ar - ed) - ec), (as + cR))
851- let cc = ee._1
852- let cd = ee._2
853- if (!(cb(cc, cd, ce)))
851+ let ei = if ((ch == an))
852+ then ao
853+ else an
854+ let bT = bd(dS, dT, cU, ch, at, au, ax)
855+ let dX = bY(aQ.originCaller)
856+ let ej = fraction(bT, fraction(az, dX, aB, CEILING), aB)
857+ let ea = fraction(bT, fraction(aA, dX, aB, CEILING), aB)
858+ let ek = fraction(bT, (aB - fraction(ay, dX, aB, CEILING)), aB)
859+ let el = if ((ch == an))
860+ then $Tuple2((at + cU), (((au - ek) - ej) - ea))
861+ else $Tuple2((((at - ek) - ej) - ea), (au + cU))
862+ let cf = el._1
863+ let cg = el._2
864+ if (!(ce(cf, cg, ch)))
854865 then throw()
855866 else {
856- let ef = bA(ce)
857- let cT = ef._1
858- let cU = ef._2
859- let cV = ef._3
860- let eg = bA(eb)
861- let eh = eg._1
862- let ei = eg._2
863- let ej = eg._3
864- let cH = if (contains(ab, cT))
865- then invoke(this, "stakeUnstake", [true, cR, cT], nil)
867+ let em = bD(ch)
868+ let cW = em._1
869+ let cX = em._2
870+ let cY = em._3
871+ let en = bD(ei)
872+ let eo = en._1
873+ let ep = en._2
874+ let eq = en._3
875+ let cK = if (contains(ad, cW))
876+ then invoke(this, "stakeUnstake", [true, cU, cW], nil)
866877 else 0
867- if ((cH == cH))
878+ if ((cK == cK))
868879 then {
869- let cI = if (contains(ab, eh))
870- then invoke(this, "stakeUnstake", [false, (ed + ec), eh], nil)
880+ let cL = if (contains(ad, eo))
881+ then invoke(this, "stakeUnstake", [false, ((ek + ej) + ea), eo], nil)
871882 else 0
872- if ((cI == cI))
873- then $Tuple2([IntegerEntry(h, cc), IntegerEntry(i, cd), IntegerEntry(m, aY(cc, cd)), ScriptTransfer(aN.caller, ed, eb), ScriptTransfer(V, ec, eb)], [ed, eb])
883+ if ((cL == cL))
884+ then $Tuple2([IntegerEntry(h, cf), IntegerEntry(i, cg), IntegerEntry(m, bb(cf, cg)), ScriptTransfer(aQ.caller, ek, ei), ScriptTransfer(W, ej, ei), ScriptTransfer(X, ea, ei)], [ek, ei])
874885 else throw("Strict value is not equal to itself.")
875886 }
876887 else throw("Strict value is not equal to itself.")
880891
881892
882893
883-@Callable(ek)
884-func reissueShare (bQ) = valueOrElse(bJ(ek), [Reissue(at, bQ, true)])
894+@Callable(er)
895+func reissueShare (bT) = valueOrElse(bM(er), [Reissue(av, bT, true)])
885896
886897
887898
888-@Callable(aN)
889-func shutdown () = valueOrElse(bI(aN), if (!(ag))
899+@Callable(aQ)
900+func shutdown () = valueOrElse(bL(aQ), if (!(ai))
890901 then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, n), "the cause wasn't specified")))
891- else bD("Paused by admin"))
902+ else bG("Paused by admin"))
892903
893904
894905
895-@Callable(aN)
896-func activate () = valueOrElse(bI(aN), if (ag)
897- then bF()
906+@Callable(aQ)
907+func activate () = valueOrElse(bL(aQ), if (ai)
908+ then bI()
898909 else [BooleanEntry(c, true), DeleteEntry(n)])
899910
900911
901912
902-@Callable(aN)
903-func takeIntoAccountExtraFunds () = valueOrElse(bG(), {
904- let el = if (if ((al == aa))
913+@Callable(aQ)
914+func takeIntoAccountExtraFunds () = valueOrElse(bJ(), {
915+ let es = if (if ((an == ac))
905916 then true
906- else (am == aa))
907- then invoke(X, "claimRewards", nil, nil)
917+ else (ao == ac))
918+ then invoke(Z, "claimRewards", nil, nil)
908919 else 0
909- if ((el == el))
920+ if ((es == es))
910921 then {
911- let em = (aS - ar)
912- let en = (aT - as)
913- let dh = aY((ar + em), (as + en))
914- if ((aN.caller != V))
922+ let et = (aV - at)
923+ let eu = (aW - au)
924+ let dk = bb((at + et), (au + eu))
925+ if ((aQ.caller != W))
915926 then throw("Only the money box can call this function")
916- else if (if ((0 > em))
927+ else if (if ((0 > et))
917928 then true
918- else (0 > en))
919- then bD("Enroll amount negative")
920- else if (if ((em == 0))
921- then (en == 0)
929+ else (0 > eu))
930+ then bG("Enroll amount negative")
931+ else if (if ((et == 0))
932+ then (eu == 0)
922933 else false)
923934 then throw("No money to take")
924935 else {
925- let cH = if (if (contains(ab, aj))
926- then (em > 0)
936+ let cK = if (if (contains(ad, al))
937+ then (et > 0)
927938 else false)
928- then invoke(this, "stakeUnstake", [true, em, aj], nil)
939+ then invoke(this, "stakeUnstake", [true, et, al], nil)
929940 else 0
930- if ((cH == cH))
941+ if ((cK == cK))
931942 then {
932- let cI = if (if (contains(ab, ak))
933- then (en > 0)
943+ let cL = if (if (contains(ad, am))
944+ then (eu > 0)
934945 else false)
935- then invoke(this, "stakeUnstake", [true, en, ak], nil)
946+ then invoke(this, "stakeUnstake", [true, eu, am], nil)
936947 else 0
937- if ((cI == cI))
938- then [IntegerEntry(m, dh), IntegerEntry(h, (ar + em)), IntegerEntry(i, (as + en))]
948+ if ((cL == cL))
949+ then [IntegerEntry(m, dk), IntegerEntry(h, (at + et)), IntegerEntry(i, (au + eu))]
939950 else throw("Strict value is not equal to itself.")
940951 }
941952 else throw("Strict value is not equal to itself.")
946957
947958
948959
949-@Callable(aN)
950-func keepLimitForFirstHarvest (eo) = valueOrElse(bG(), valueOrElse(bI(aN), [IntegerEntry(w, eo)]))
960+@Callable(aQ)
961+func keepLimitForFirstHarvest (ev) = valueOrElse(bJ(), valueOrElse(bL(aQ), [IntegerEntry(w, ev)]))
951962
952963
953964
954-@Callable(aN)
955-func stakeUnstake (bO,bQ,ep) = if ((aN.caller != this))
965+@Callable(aQ)
966+func stakeUnstake (bR,bT,ew) = if ((aQ.caller != this))
956967 then throw("Only contract itself can invoke this function")
957968 else {
958- let eq = bP(bO, bQ, fromBase58String(ep))
959- let bS = eq._1
960- let er = eq._2
961- let es = eq._3
962- let et = eq._4
963- let eu = invoke(er, bS, es, et)
964- if ((eu == eu))
969+ let ex = bS(bR, bT, fromBase58String(ew))
970+ let bV = ex._1
971+ let ey = ex._2
972+ let ez = ex._3
973+ let eA = ex._4
974+ let eB = invoke(ey, bV, ez, eA)
975+ if ((eB == eB))
965976 then nil
966977 else throw("Strict value is not equal to itself.")
967978 }
968979
969980
970981
971-@Callable(aN)
972-func replenishWithTwoTokens () = valueOrElse(bG(), valueOrElse(bH(), ck(aN, false, 0)))
982+@Callable(aQ)
983+func replenishWithTwoTokens () = valueOrElse(bJ(), valueOrElse(bK(), cn(aQ, false, 0)))
973984
974985
975986
976-@Callable(aN)
977-func replenishWithOneToken (cO,cP) = valueOrElse(bG(), valueOrElse(bH(), cN(aN, cO, cP, false, 0)))
987+@Callable(aQ)
988+func replenishWithOneToken (cR,cS) = valueOrElse(bJ(), valueOrElse(bK(), cQ(aQ, cR, cS, false, 0)))
978989
979990
980991
981-@Callable(aN)
982-func withdraw () = valueOrElse(bG(), dr(aN, 0))
992+@Callable(aQ)
993+func withdraw () = valueOrElse(bJ(), dx(aQ, 0))
983994
984995
985-@Verifier(ev)
986-func ew () = {
987- let ex = {
988- let ey = if (sigVerify(ev.bodyBytes, ev.proofs[0], R))
996+@Verifier(eC)
997+func eD () = {
998+ let eE = {
999+ let eF = if (sigVerify(eC.bodyBytes, eC.proofs[0], S))
9891000 then 1
9901001 else 0
991- let ez = if (sigVerify(ev.bodyBytes, ev.proofs[1], S))
1002+ let eG = if (sigVerify(eC.bodyBytes, eC.proofs[1], T))
9921003 then 1
9931004 else 0
994- let eA = if (sigVerify(ev.bodyBytes, ev.proofs[2], T))
1005+ let eH = if (sigVerify(eC.bodyBytes, eC.proofs[2], U))
9951006 then 1
9961007 else 0
997- (((ey + ez) + eA) >= 2)
1008+ (((eF + eG) + eH) >= 2)
9981009 }
999- let O = ev
1000- if ($isInstanceOf(O, "InvokeScriptTransaction"))
1010+ let P = eC
1011+ if ($isInstanceOf(P, "InvokeScriptTransaction"))
10011012 then {
1002- let eu = O
1003- let eB = if ((eu.dApp == this))
1004- then (eu.function == "takeIntoAccountExtraFunds")
1013+ let eB = P
1014+ let eI = if ((eB.dApp == this))
1015+ then (eB.function == "takeIntoAccountExtraFunds")
10051016 else false
1006- let eC = if (if (if (sigVerify(ev.bodyBytes, ev.proofs[0], R))
1017+ let eJ = if (if (if (sigVerify(eC.bodyBytes, eC.proofs[0], S))
10071018 then true
1008- else sigVerify(ev.bodyBytes, ev.proofs[0], S))
1019+ else sigVerify(eC.bodyBytes, eC.proofs[0], T))
10091020 then true
1010- else sigVerify(ev.bodyBytes, ev.proofs[0], T))
1021+ else sigVerify(eC.bodyBytes, eC.proofs[0], U))
10111022 then true
1012- else sigVerify(ev.bodyBytes, ev.proofs[0], U)
1013- if (if (eB)
1014- then eC
1023+ else sigVerify(eC.bodyBytes, eC.proofs[0], V)
1024+ if (if (eI)
1025+ then eJ
10151026 else false)
10161027 then true
1017- else ex
1028+ else eE
10181029 }
1019- else ex
1030+ else eE
10201031 }
10211032
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = "2.0.0"
55
66 let b = "version"
77
88 let c = "active"
99
1010 let d = "active_all_contracts"
1111
1212 let e = "deprecated_"
1313
1414 let f = "A_asset_id"
1515
1616 let g = "B_asset_id"
1717
1818 let h = "A_asset_balance"
1919
2020 let i = "B_asset_balance"
2121
2222 let j = "share_asset_id"
2323
2424 let k = "share_asset_supply"
2525
2626 let l = "commission"
2727
2828 let m = "invariant"
2929
3030 let n = "shutdown_cause"
3131
3232 let o = "staking_usdnnsbt_address"
3333
3434 let p = "staking_eurn_address"
3535
3636 let q = "discounts"
3737
3838 let r = "discount_values"
3939
4040 let s = "_SWOP_amount"
4141
4242 let t = "_GSwop_amount"
4343
4444 let u = "first_harvest"
4545
4646 let v = "first_harvest_height"
4747
4848 let w = "share_limit_on_first_harvest"
4949
5050 let x = "base_period"
5151
5252 let y = "period_length"
5353
5454 let z = "start_height"
5555
5656 let A = "dApp_threshold"
5757
5858 let B = "admin_pub_1"
5959
6060 let C = "admin_pub_2"
6161
6262 let D = "admin_pub_3"
6363
6464 let E = "admin_invoke_pub"
6565
6666 let F = "money_box_address"
6767
68-let G = "governance_address"
68+let G = "team_box_address"
6969
70-let H = "farming_address"
70+let H = "governance_address"
7171
72-let I = "voting_address"
72+let I = "farming_address"
7373
74-let J = "usdn_asset_id"
74+let J = "voting_address"
7575
76-let K = "staking_assets"
76+let K = "usdn_asset_id"
7777
78-let L = Address(base58'3MvVBtsXroQpy1tsPw21TU2ET9A8WfmrNjz')
78+let L = "staking_assets"
7979
80-func M (N) = {
81- let O = getString(L, N)
82- if ($isInstanceOf(O, "String"))
80+let M = Address(base58'3MvVBtsXroQpy1tsPw21TU2ET9A8WfmrNjz')
81+
82+func N (O) = {
83+ let P = getString(M, O)
84+ if ($isInstanceOf(P, "String"))
8385 then {
84- let P = O
85- fromBase58String(P)
86+ let Q = P
87+ fromBase58String(Q)
8688 }
8789 else {
88- let Q = O
89- throw((N + "is empty"))
90+ let R = P
91+ throw((O + "is empty"))
9092 }
9193 }
9294
9395
94-let R = M(B)
96+let S = N(B)
9597
96-let S = M(C)
98+let T = N(C)
9799
98-let T = M(D)
100+let U = N(D)
99101
100-let U = M(E)
102+let V = N(E)
101103
102-let V = Address(M(F))
104+let W = Address(N(F))
103105
104-let W = Address(M(G))
106+let X = Address(N(G))
105107
106-let X = Address(M(o))
108+let Y = Address(N(H))
107109
108-let Y = Address(M(I))
110+let Z = Address(N(o))
109111
110-let Z = Address(M(H))
112+let aa = Address(N(J))
111113
112-let aa = M(J)
114+let ab = Address(N(I))
113115
114-let ab = getStringValue(L, K)
116+let ac = N(K)
115117
116-let ac = valueOrErrorMessage(getInteger(Y, x), "Empty kBasePeriod")
118+let ad = getStringValue(M, L)
117119
118-let ad = valueOrErrorMessage(getInteger(Y, z), "Empty kStartHeight")
120+let ae = valueOrErrorMessage(getInteger(aa, x), "Empty kBasePeriod")
119121
120-let ae = valueOrErrorMessage(getInteger(Y, y), "Empty kPeriodLength")
122+let af = valueOrErrorMessage(getInteger(aa, z), "Empty kStartHeight")
121123
122-let af = ((ac + ((height - ad) / ae)) + 3)
124+let ag = valueOrErrorMessage(getInteger(aa, y), "Empty kPeriodLength")
123125
124-let ag = getBooleanValue(this, c)
126+let ah = ((ae + ((height - af) / ag)) + 3)
125127
126-let ah = valueOrElse(getBoolean(L, d), true)
128+let ai = getBooleanValue(this, c)
127129
128-let ai = valueOrElse(getBoolean(L, (e + toString(this))), false)
130+let aj = valueOrElse(getBoolean(M, d), true)
129131
130-let aj = getStringValue(this, f)
132+let ak = valueOrElse(getBoolean(M, (e + toString(this))), false)
131133
132-let ak = getStringValue(this, g)
134+let al = getStringValue(this, f)
133135
134-let al = if ((aj == "WAVES"))
136+let am = getStringValue(this, g)
137+
138+let an = if ((al == "WAVES"))
135139 then unit
136- else fromBase58String(aj)
140+ else fromBase58String(al)
137141
138-let am = if ((ak == "WAVES"))
142+let ao = if ((am == "WAVES"))
139143 then unit
140- else fromBase58String(ak)
144+ else fromBase58String(am)
141145
142-let an = {
143- let O = al
144- if ($isInstanceOf(O, "ByteVector"))
146+let ap = {
147+ let P = an
148+ if ($isInstanceOf(P, "ByteVector"))
145149 then {
146- let ao = O
147- value(assetInfo(ao)).name
150+ let aq = P
151+ value(assetInfo(aq)).name
148152 }
149- else if ($isInstanceOf(O, "Unit"))
153+ else if ($isInstanceOf(P, "Unit"))
150154 then {
151- let ap = O
155+ let ar = P
152156 "WAVES"
153157 }
154158 else throw("Match error")
155159 }
156160
157-let aq = {
158- let O = am
159- if ($isInstanceOf(O, "ByteVector"))
161+let as = {
162+ let P = ao
163+ if ($isInstanceOf(P, "ByteVector"))
160164 then {
161- let ao = O
162- value(assetInfo(ao)).name
165+ let aq = P
166+ value(assetInfo(aq)).name
163167 }
164- else if ($isInstanceOf(O, "Unit"))
168+ else if ($isInstanceOf(P, "Unit"))
165169 then {
166- let ap = O
170+ let ar = P
167171 "WAVES"
168172 }
169173 else throw("Match error")
170174 }
171175
172-let ar = getIntegerValue(this, h)
176+let at = getIntegerValue(this, h)
173177
174-let as = getIntegerValue(this, i)
178+let au = getIntegerValue(this, i)
175179
176-let at = fromBase58String(getStringValue(this, j))
180+let av = fromBase58String(getStringValue(this, j))
177181
178-let au = getIntegerValue(this, k)
182+let aw = getIntegerValue(this, k)
179183
180-let av = getIntegerValue(this, m)
184+let ax = getIntegerValue(this, m)
181185
182-let aw = getIntegerValue(this, l)
186+let ay = getIntegerValue(this, l)
183187
184-let ax = fraction(aw, 40, 100)
188+let az = fraction(ay, 35, 100)
185189
186-let ay = 1000000
190+let aA = fraction(ay, 10, 100)
187191
188-let az = 1000
192+let aB = 1000000
189193
190-let aA = 100000000
194+let aC = 1000
191195
192-let aB = 10000000000000000
196+let aD = 100000000
193197
194-let aC = 8
198+let aE = 10000000000000000
195199
196-let aD = 60000000
200+let aF = 8
197201
198-let aE = 140000000
202+let aG = 60000000
199203
200-let aF = 50
204+let aH = 140000000
201205
202-let aG = 2
206+let aI = 50
203207
204-let aH = 4600000000000000
208+let aJ = 2
205209
206-func aI (aJ) = {
207- let O = aJ
208- if ($isInstanceOf(O, "ByteVector"))
210+let aK = 4600000000000000
211+
212+func aL (aM) = {
213+ let P = aM
214+ if ($isInstanceOf(P, "ByteVector"))
209215 then {
210- let ao = O
211- assetBalance(this, ao)
216+ let aq = P
217+ assetBalance(this, aq)
212218 }
213- else if ($isInstanceOf(O, "Unit"))
219+ else if ($isInstanceOf(P, "Unit"))
214220 then {
215- let ap = O
221+ let ar = P
216222 wavesBalance(this).available
217223 }
218224 else throw("Match error")
219225 }
220226
221227
222-func aK (aJ) = {
223- let aL = {
224- let O = aJ
225- if ($isInstanceOf(O, "ByteVector"))
228+func aN (aM) = {
229+ let aO = {
230+ let P = aM
231+ if ($isInstanceOf(P, "ByteVector"))
226232 then {
227- let aM = O
228- if ((aM == aa))
229- then getInteger(X, ((("rpd_balance_" + toBase58String(aM)) + "_") + toString(this)))
233+ let aP = P
234+ if ((aP == ac))
235+ then getInteger(Z, ((("rpd_balance_" + toBase58String(aP)) + "_") + toString(this)))
230236 else 0
231237 }
232- else if ($isInstanceOf(O, "Unit"))
238+ else if ($isInstanceOf(P, "Unit"))
233239 then 0
234240 else throw("Match error")
235241 }
236- let O = aL
237- if ($isInstanceOf(O, "Int"))
242+ let P = aO
243+ if ($isInstanceOf(P, "Int"))
238244 then {
239- let aN = O
240- aN
245+ let aQ = P
246+ aQ
241247 }
242248 else 0
243249 }
244250
245251
246-let aO = aK(al)
252+let aR = aN(an)
247253
248-let aP = aK(am)
254+let aS = aN(ao)
249255
250-let aQ = (ar - aO)
256+let aT = (at - aR)
251257
252-let aR = (as - aP)
258+let aU = (au - aS)
253259
254-let aS = (aI(al) + aO)
260+let aV = (aL(an) + aR)
255261
256-let aT = (aI(am) + aP)
262+let aW = (aL(ao) + aS)
257263
258-let aU = if ((aS >= ar))
259- then (aT >= as)
264+let aX = if ((aV >= at))
265+ then (aW >= au)
260266 else false
261267
262-func aV (aW,aX) = ((fraction(aB, aW, aX) + fraction(aB, aX, aW)) / 2)
268+func aY (aZ,ba) = ((fraction(aE, aZ, ba) + fraction(aE, ba, aZ)) / 2)
263269
264270
265-func aY (aW,aX) = {
266- let aZ = aV(aW, aX)
267- (fraction((aW + aX), aB, pow(aZ, aC, aF, aG, aC, CEILING)) + (2 * fraction(toInt(pow(fraction(toBigInt(aW), toBigInt(aX), toBigInt(aA)), 0, toBigInt(5), 1, (aC / 2), DOWN)), pow((aZ - aH), aC, aF, aG, aC, DOWN), aA)))
271+func bb (aZ,ba) = {
272+ let bc = aY(aZ, ba)
273+ (fraction((aZ + ba), aE, pow(bc, aF, aI, aJ, aF, CEILING)) + (2 * fraction(toInt(pow(fraction(toBigInt(aZ), toBigInt(ba), toBigInt(aD)), 0, toBigInt(5), 1, (aF / 2), DOWN)), pow((bc - aK), aF, aI, aJ, aF, DOWN), aD)))
268274 }
269275
270276
271-func ba (bb,bc,bd,be,bf,bg,bh) = {
272- let bi = (aB - ((aB * 1) / 10000000))
273- let bj = (bb - bc)
274- let aW = (bf + bd)
275- let aX = (bg + bd)
276- func bk (bl,bm) = if ((bl._1 == -1))
277+func bd (be,bf,bg,bh,bi,bj,bk) = {
278+ let bl = (aE - ((aE * 1) / 10000000))
279+ let bm = (be - bf)
280+ let aZ = (bi + bg)
281+ let ba = (bj + bg)
282+ func bn (bo,bp) = if ((bo._1 == -1))
277283 then {
278- let bn = (bb - (((bm * bj) / 3) / az))
279- let bo = if ((be == al))
280- then aY(aW, (bg - bn))
281- else aY((bf - bn), aX)
282- if ((bo > bh))
283- then $Tuple2(bn, bo)
284+ let bq = (be - (((bp * bm) / 3) / aC))
285+ let br = if ((bh == an))
286+ then bb(aZ, (bj - bq))
287+ else bb((bi - bq), ba)
288+ if ((br > bk))
289+ then $Tuple2(bq, br)
284290 else $Tuple2(-1, 0)
285291 }
286- else bl
292+ else bo
287293
288- let bp = bk($Tuple2(-1, 0), 3000)
289- if ((0 > bp._1))
294+ let bs = bn($Tuple2(-1, 0), 3000)
295+ if ((0 > bs._1))
290296 then throw("Price is worse than minReceived")
291297 else {
292- let bq = if ((be == al))
293- then aY(aW, (bg - bb))
294- else if ((be == am))
295- then aY((bf - bb), aX)
298+ let bt = if ((bh == an))
299+ then bb(aZ, (bj - be))
300+ else if ((bh == ao))
301+ then bb((bi - be), ba)
296302 else throw("Wrong asset in payment")
297- if ((bh > bq))
298- then if ((bi >= fraction(aB, bh, bq)))
303+ if ((bk > bt))
304+ then if ((bl >= fraction(aE, bk, bt)))
299305 then throw("The requested price is too not profitable for user")
300306 else {
301- let br = {
302- let bs = [25, 200, 500]
303- let bt = size(bs)
304- let bu = $Tuple2(-1, 0)
305- func bv (bw,bx) = if ((bx >= bt))
306- then bw
307- else bk(bw, bs[bx])
307+ let bu = {
308+ let bv = [25, 200, 500]
309+ let bw = size(bv)
310+ let bx = $Tuple2(-1, 0)
311+ func by (bz,bA) = if ((bA >= bw))
312+ then bz
313+ else bn(bz, bv[bA])
308314
309- func by (bw,bx) = if ((bx >= bt))
310- then bw
315+ func bB (bz,bA) = if ((bA >= bw))
316+ then bz
311317 else throw("List size exceeds 3")
312318
313- by(bv(bv(bv(bu, 0), 1), 2), 3)
319+ bB(by(by(by(bx, 0), 1), 2), 3)
314320 }
315- if ((0 > br._1))
316- then bp._1
317- else br._1
321+ if ((0 > bu._1))
322+ then bs._1
323+ else bu._1
318324 }
319325 else {
320- let br = {
321- let bs = [-500, -200, -25]
322- let bt = size(bs)
323- let bu = $Tuple2(-1, 0)
324- func bv (bw,bx) = if ((bx >= bt))
325- then bw
326- else bk(bw, bs[bx])
326+ let bu = {
327+ let bv = [-500, -200, -25]
328+ let bw = size(bv)
329+ let bx = $Tuple2(-1, 0)
330+ func by (bz,bA) = if ((bA >= bw))
331+ then bz
332+ else bn(bz, bv[bA])
327333
328- func by (bw,bx) = if ((bx >= bt))
329- then bw
334+ func bB (bz,bA) = if ((bA >= bw))
335+ then bz
330336 else throw("List size exceeds 3")
331337
332- by(bv(bv(bv(bu, 0), 1), 2), 3)
338+ bB(by(by(by(bx, 0), 1), 2), 3)
333339 }
334- let bz = if ((0 > br._1))
335- then $Tuple2(bb, bq)
336- else br
337- if ((bi >= fraction(aB, bh, bz._2)))
340+ let bC = if ((0 > bu._1))
341+ then $Tuple2(be, bt)
342+ else bu
343+ if ((bl >= fraction(aE, bk, bC._2)))
338344 then throw("The requested price is too not profitable for user")
339- else bz._1
345+ else bC._1
340346 }
341347 }
342348 }
343349
344350
345-func bA (aJ) = {
346- let O = aJ
347- if ($isInstanceOf(O, "ByteVector"))
351+func bD (aM) = {
352+ let P = aM
353+ if ($isInstanceOf(P, "ByteVector"))
348354 then {
349- let ao = O
350- let bB = toBase58String(ao)
351- let bC = valueOrErrorMessage(assetInfo(ao), (("Asset " + bB) + " doesn't exist"))
352- $Tuple3(bB, bC.name, bC.decimals)
355+ let aq = P
356+ let bE = toBase58String(aq)
357+ let bF = valueOrErrorMessage(assetInfo(aq), (("Asset " + bE) + " doesn't exist"))
358+ $Tuple3(bE, bF.name, bF.decimals)
353359 }
354- else if ($isInstanceOf(O, "Unit"))
360+ else if ($isInstanceOf(P, "Unit"))
355361 then {
356- let ap = O
362+ let ar = P
357363 $Tuple3("WAVES", "WAVES", 8)
358364 }
359365 else throw("Match error")
360366 }
361367
362368
363-func bD (bE) = [BooleanEntry(c, false), StringEntry(n, bE)]
369+func bG (bH) = [BooleanEntry(c, false), StringEntry(n, bH)]
364370
365371
366-func bF () = throw("DApp is already active")
372+func bI () = throw("DApp is already active")
367373
368374
369-func bG () = if (if (ag)
370- then ah
375+func bJ () = if (if (ai)
376+ then aj
371377 else false)
372378 then unit
373379 else throw("DApp is inactive at this moment")
374380
375381
376-func bH () = if (!(ai))
382+func bK () = if (!(ak))
377383 then unit
378384 else throw("Pool is deprecated. Only withdraw action allowed.")
379385
380386
381-func bI (aN) = if (containsElement([R, S, T], aN.callerPublicKey))
387+func bL (aQ) = if (containsElement([S, T, U], aQ.callerPublicKey))
382388 then unit
383389 else throw("Only admin can call this function")
384390
385391
386-func bJ (aN) = if ((this == aN.caller))
392+func bM (aQ) = if ((this == aQ.caller))
387393 then unit
388394 else throw("Only contract itself can call this function")
389395
390396
391-func bK () = throw(((("Incorrect assets attached. Expected: " + aj) + " and ") + ak))
397+func bN () = throw(((("Incorrect assets attached. Expected: " + al) + " and ") + am))
392398
393399
394-func bL () = throw("One attached payment expected")
400+func bO () = throw("One attached payment expected")
395401
396402
397-func bM () = bD(((((((((((((((("Suspicious state. Actual balances: " + toString(ar)) + " ") + an) + ", ") + toString(as)) + " ") + aq) + ". State: ") + toString(aI(al))) + " ") + an) + ", ") + toString(aI(am))) + " ") + aq))
403+func bP () = bG(((((((((((((((("Suspicious state. Actual balances: " + toString(at)) + " ") + ap) + ", ") + toString(au)) + " ") + as) + ". State: ") + toString(aL(an))) + " ") + ap) + ", ") + toString(aL(ao))) + " ") + as))
398404
399405
400-func bN (bO,aJ) = if (bO)
401- then $Tuple2("lockNeutrino", X)
402- else $Tuple2("unlockNeutrino", X)
406+func bQ (bR,aM) = if (bR)
407+ then $Tuple2("lockNeutrino", Z)
408+ else $Tuple2("unlockNeutrino", Z)
403409
404410
405-func bP (bO,bQ,aJ) = if (bO)
411+func bS (bR,bT,aM) = if (bR)
406412 then {
407- let bR = bN(bO, aJ)
408- let bS = bR._1
409- let bT = bR._2
410- $Tuple4(bS, bT, nil, [AttachedPayment(aJ, bQ)])
413+ let bU = bQ(bR, aM)
414+ let bV = bU._1
415+ let bW = bU._2
416+ $Tuple4(bV, bW, nil, [AttachedPayment(aM, bT)])
411417 }
412418 else {
413- let bU = bN(bO, aJ)
414- let bS = bU._1
415- let bT = bU._2
416- $Tuple4(bS, bT, [bQ, toBase58String(aJ)], nil)
419+ let bX = bQ(bR, aM)
420+ let bV = bX._1
421+ let bW = bX._2
422+ $Tuple4(bV, bW, [bT, toBase58String(aM)], nil)
417423 }
418424
419425
420-func bV (bW) = {
421- let bX = valueOrElse(getInteger(W, (toString(bW) + s)), 0)
422- let bY = valueOrElse(getInteger(W, (toString(bW) + t)), bX)
423- let bZ = split(getStringValue(L, r), ",")
424- let ca = split(getStringValue(L, q), ",")
425- if (if ((bY >= parseIntValue(bZ[0])))
426- then (parseIntValue(bZ[1]) > bY)
426+func bY (bZ) = {
427+ let ca = valueOrElse(getInteger(Y, (toString(bZ) + s)), 0)
428+ let cb = valueOrElse(getInteger(Y, (toString(bZ) + t)), ca)
429+ let cc = split(getStringValue(M, r), ",")
430+ let cd = split(getStringValue(M, q), ",")
431+ if (if ((cb >= parseIntValue(cc[0])))
432+ then (parseIntValue(cc[1]) > cb)
427433 else false)
428- then (ay - parseIntValue(ca[0]))
429- else if (if ((bY >= parseIntValue(bZ[1])))
430- then (parseIntValue(bZ[2]) > bY)
434+ then (aB - parseIntValue(cd[0]))
435+ else if (if ((cb >= parseIntValue(cc[1])))
436+ then (parseIntValue(cc[2]) > cb)
431437 else false)
432- then (ay - parseIntValue(ca[1]))
433- else if (if ((bY >= parseIntValue(bZ[2])))
434- then (parseIntValue(bZ[3]) > bY)
438+ then (aB - parseIntValue(cd[1]))
439+ else if (if ((cb >= parseIntValue(cc[2])))
440+ then (parseIntValue(cc[3]) > cb)
435441 else false)
436- then (ay - parseIntValue(ca[2]))
437- else if (if ((bY >= parseIntValue(bZ[3])))
438- then (parseIntValue(bZ[4]) > bY)
442+ then (aB - parseIntValue(cd[2]))
443+ else if (if ((cb >= parseIntValue(cc[3])))
444+ then (parseIntValue(cc[4]) > cb)
439445 else false)
440- then (ay - parseIntValue(ca[3]))
441- else if ((bY >= parseIntValue(bZ[4])))
442- then (ay - parseIntValue(ca[4]))
443- else ay
446+ then (aB - parseIntValue(cd[3]))
447+ else if ((cb >= parseIntValue(cc[4])))
448+ then (aB - parseIntValue(cd[4]))
449+ else aB
444450 }
445451
446452
447-func cb (cc,cd,ce) = {
448- let cf = getIntegerValue(this, A)
449- let cg = if (if ((ce == al))
450- then (cc > cd)
453+func ce (cf,cg,ch) = {
454+ let ci = getIntegerValue(this, A)
455+ let cj = if (if ((ch == an))
456+ then (cf > cg)
451457 else false)
452- then fraction(cc, 1, cd, CEILING)
453- else if (if ((ce == am))
454- then (cd > cc)
458+ then fraction(cf, 1, cg, CEILING)
459+ else if (if ((ch == ao))
460+ then (cg > cf)
455461 else false)
456- then fraction(cd, 1, cc, CEILING)
462+ then fraction(cg, 1, cf, CEILING)
457463 else 0
458- if ((cg > cf))
464+ if ((cj > ci))
459465 then {
460- let ch = if ((ce == al))
461- then $Tuple2(aq, an)
462- else $Tuple2(an, aq)
463- let ci = ch._1
464- let cj = ch._2
465- throw((((("Buying " + ci) + " is temporarily unavailable due to the ") + cj) + " depeg"))
466+ let ck = if ((ch == an))
467+ then $Tuple2(as, ap)
468+ else $Tuple2(ap, as)
469+ let cl = ck._1
470+ let cm = ck._2
471+ throw((((("Buying " + cl) + " is temporarily unavailable due to the ") + cm) + " depeg"))
466472 }
467473 else true
468474 }
469475
470476
471-func ck (aN,cl,cm) = {
472- let cn = aN.payments[0].assetId
473- let co = aN.payments[1].assetId
474- let cp = fraction(aA, aN.payments[0].amount, ar)
475- let cq = fraction(aA, aN.payments[1].amount, as)
476- let cr = bA(cn)
477- let cs = cr._1
478- let ct = cr._2
479- let cu = cr._3
480- let cv = bA(co)
481- let cw = cv._1
482- let cx = cv._2
483- let cy = cv._3
484- let cz = if ((cq > cp))
477+func cn (aQ,co,cp) = {
478+ let cq = aQ.payments[0].assetId
479+ let cr = aQ.payments[1].assetId
480+ let cs = fraction(aD, aQ.payments[0].amount, at)
481+ let ct = fraction(aD, aQ.payments[1].amount, au)
482+ let cu = bD(cq)
483+ let cv = cu._1
484+ let cw = cu._2
485+ let cx = cu._3
486+ let cy = bD(cr)
487+ let cz = cy._1
488+ let cA = cy._2
489+ let cB = cy._3
490+ let cC = if ((ct > cs))
485491 then {
486- let cA = fraction(as, cp, aA, CEILING)
487- $Tuple5(aN.payments[0].amount, cA, (aN.payments[1].amount - cA), co, cp)
492+ let cD = fraction(au, cs, aD, CEILING)
493+ $Tuple5(aQ.payments[0].amount, cD, (aQ.payments[1].amount - cD), cr, cs)
488494 }
489495 else {
490- let cA = fraction(ar, cq, aA, CEILING)
491- $Tuple5(cA, aN.payments[1].amount, (aN.payments[0].amount - cA), cn, cq)
496+ let cD = fraction(at, ct, aD, CEILING)
497+ $Tuple5(cD, aQ.payments[1].amount, (aQ.payments[0].amount - cD), cq, ct)
492498 }
493- let cB = cz._1
494- let cC = cz._2
495- let cD = cz._3
496- let cE = cz._4
497- let cF = cz._5
498- let cG = fraction(cF, au, aA)
499- if (if ((size(aN.payments) != 2))
500- then (size(aN.payments) != 3)
499+ let cE = cC._1
500+ let cF = cC._2
501+ let cG = cC._3
502+ let cH = cC._4
503+ let cI = cC._5
504+ let cJ = fraction(cI, aw, aD)
505+ if (if ((size(aQ.payments) != 2))
506+ then (size(aQ.payments) != 3)
501507 else false)
502508 then throw("Two or three payments expected")
503- else if (if ((cn != al))
509+ else if (if ((cq != an))
504510 then true
505- else (co != am))
506- then bK()
507- else if ((cG == 0))
511+ else (cr != ao))
512+ then bN()
513+ else if ((cJ == 0))
508514 then throw("Too small amount to replenish")
509- else if ((0 > cD))
515+ else if ((0 > cG))
510516 then throw("Change < 0")
511- else if (!(aU))
512- then ([ScriptTransfer(aN.caller, cB, cn), ScriptTransfer(aN.caller, cC, co)] ++ bM())
517+ else if (!(aX))
518+ then ([ScriptTransfer(aQ.caller, cE, cq), ScriptTransfer(aQ.caller, cF, cr)] ++ bP())
513519 else {
514- let cH = if (contains(ab, cs))
515- then invoke(this, "stakeUnstake", [true, cB, cs], nil)
520+ let cK = if (contains(ad, cv))
521+ then invoke(this, "stakeUnstake", [true, cE, cv], nil)
516522 else 0
517- if ((cH == cH))
523+ if ((cK == cK))
518524 then {
519- let cI = if (contains(ab, cw))
520- then invoke(this, "stakeUnstake", [true, cC, cw], nil)
525+ let cL = if (contains(ad, cz))
526+ then invoke(this, "stakeUnstake", [true, cF, cz], nil)
521527 else 0
522- if ((cI == cI))
528+ if ((cL == cL))
523529 then {
524- let cJ = [IntegerEntry(h, (ar + cB)), IntegerEntry(i, (as + cC)), IntegerEntry(k, (au + cG)), IntegerEntry(m, aY((ar + cB), (as + cC))), ScriptTransfer(aN.caller, cD, cE)]
525- if (cl)
530+ let cM = [IntegerEntry(h, (at + cE)), IntegerEntry(i, (au + cF)), IntegerEntry(k, (aw + cJ)), IntegerEntry(m, bb((at + cE), (au + cF))), ScriptTransfer(aQ.caller, cG, cH)]
531+ if (co)
526532 then {
527- let cK = ([AttachedPayment(at, cG)] ++ (if ((size(aN.payments) == 3))
528- then [AttachedPayment(if ((aN.payments[2].assetId == base58''))
533+ let cN = ([AttachedPayment(av, cJ)] ++ (if ((size(aQ.payments) == 3))
534+ then [AttachedPayment(if ((aQ.payments[2].assetId == base58''))
529535 then unit
530- else aN.payments[2].assetId, aN.payments[2].amount)]
536+ else aQ.payments[2].assetId, aQ.payments[2].amount)]
531537 else nil))
532- let cL = invoke(this, "reissueShare", [cG], nil)
533- if ((cL == cL))
538+ let cO = invoke(this, "reissueShare", [cJ], nil)
539+ if ((cO == cO))
534540 then {
535- let cM = invoke(Z, "lockShareTokensFromPool", [aN.caller.bytes, toString(this), cm], cK)
536- if ((cM == cM))
537- then cJ
541+ let cP = invoke(ab, "lockShareTokensFromPool", [aQ.caller.bytes, toString(this), cp], cN)
542+ if ((cP == cP))
543+ then cM
538544 else throw("Strict value is not equal to itself.")
539545 }
540546 else throw("Strict value is not equal to itself.")
541547 }
542- else (cJ ++ [Reissue(at, cG, true), ScriptTransfer(aN.caller, cG, at)])
548+ else (cM ++ [Reissue(av, cJ, true), ScriptTransfer(aQ.caller, cJ, av)])
543549 }
544550 else throw("Strict value is not equal to itself.")
545551 }
546552 else throw("Strict value is not equal to itself.")
547553 }
548554 }
549555
550556
551-func cN (aN,cO,cP,cl,cm) = {
552- let cQ = $Tuple2(aN.payments[0].amount, aN.payments[0].assetId)
553- let cR = cQ._1
554- let ce = cQ._2
555- let cS = bA(ce)
556- let cT = cS._1
557- let cU = cS._2
558- let cV = cS._3
559- let cW = 5000000
560- let cX = 50000000
561- let cY = if ((cX > cR))
557+func cQ (aQ,cR,cS,co,cp) = {
558+ let cT = $Tuple2(aQ.payments[0].amount, aQ.payments[0].assetId)
559+ let cU = cT._1
560+ let ch = cT._2
561+ let cV = bD(ch)
562+ let cW = cV._1
563+ let cX = cV._2
564+ let cY = cV._3
565+ let cZ = 5000000
566+ let da = 50000000
567+ let db = if ((da > cU))
562568 then 100000
563569 else 1
564- let cZ = (aA - ((aA * cY) / 10000000))
565- let da = (aA + ((aA * cY) / 10000000))
566- let db = (aA - ((aA * 1) / 10000000))
567- if ((cW > cR))
568- then throw((((("Payment amount " + toString(cR)) + " does not exceed the minimum amount of ") + toString(cW)) + " tokens"))
569- else if (if ((size(aN.payments) != 1))
570- then (size(aN.payments) != 2)
570+ let dc = (aD - ((aD * db) / 10000000))
571+ let dd = (aD + ((aD * db) / 10000000))
572+ let de = (aD - ((aD * 1) / 10000000))
573+ if ((cZ > cU))
574+ then throw((((("Payment amount " + toString(cU)) + " does not exceed the minimum amount of ") + toString(cZ)) + " tokens"))
575+ else if (if ((size(aQ.payments) != 1))
576+ then (size(aQ.payments) != 2)
571577 else false)
572578 then throw("One or two payments expected")
573- else if (!(aU))
574- then ([ScriptTransfer(aN.caller, cR, ce)] ++ bM())
575- else if (if ((ce != al))
576- then (ce != am)
579+ else if (!(aX))
580+ then ([ScriptTransfer(aQ.caller, cU, ch)] ++ bP())
581+ else if (if ((ch != an))
582+ then (ch != ao)
577583 else false)
578- then bK()
584+ then bN()
579585 else {
580- let dc = if ((ce == al))
581- then $Tuple6((cR - cO), cP, (ar + cO), (as - cP), (ar + cR), as)
582- else $Tuple6(cP, (cR - cO), (ar - cP), (as + cO), ar, (as + cR))
583- let dd = dc._1
584- let de = dc._2
585- let df = dc._3
586- let dg = dc._4
587- let cc = dc._5
588- let cd = dc._6
589- let dh = aY(df, dg)
590- let di = (fraction(aB, df, dg) / fraction(aA, dd, de))
591- if (if ((db >= fraction(aA, av, dh)))
586+ let df = if ((ch == an))
587+ then $Tuple6((cU - cR), cS, (at + cR), (au - cS), (at + cU), au)
588+ else $Tuple6(cS, (cU - cR), (at - cS), (au + cR), at, (au + cU))
589+ let dg = df._1
590+ let dh = df._2
591+ let di = df._3
592+ let dj = df._4
593+ let cf = df._5
594+ let cg = df._6
595+ let dk = bb(di, dj)
596+ let dl = (fraction(aE, di, dj) / fraction(aD, dg, dh))
597+ if (if ((de >= fraction(aD, ax, dk)))
592598 then true
593- else (av > dh))
599+ else (ax > dk))
594600 then throw("Incorrect virtualSwapTokenPay or virtualSwapTokenGet value")
595- else if (if ((cZ > di))
601+ else if (if ((dc > dl))
596602 then true
597- else (di > da))
603+ else (dl > dd))
598604 then throw("Swap with virtualSwapTokenPay and virtualSwapTokenGet is possible, but ratio after virtual swap is incorrect")
599- else if (!(cb(cc, cd, ce)))
605+ else if (!(ce(cf, cg, ch)))
600606 then throw()
601607 else {
602- let cp = fraction(dd, aA, df)
603- let cq = fraction(de, aA, dg)
604- let cG = fraction(min([cp, cq]), au, aA)
605- let dj = fraction(cG, (ay - (aw / 2)), ay)
606- let dk = fraction(cG, (ax / 2), ay)
607- let dl = fraction(dk, ar, au)
608- let dm = fraction(dk, as, au)
609- let dn = if ((cT == aj))
610- then $Tuple3((cR - dl), dm, ak)
611- else $Tuple3((cR - dm), dl, aj)
612- let do = dn._1
613- let dp = dn._2
614- let dq = dn._3
615- let cH = if (contains(ab, cT))
616- then invoke(this, "stakeUnstake", [true, do, cT], nil)
608+ let cs = fraction(dg, aD, di)
609+ let ct = fraction(dh, aD, dj)
610+ let cJ = fraction(min([cs, ct]), aw, aD)
611+ let dm = fraction(cJ, (aB - (ay / 2)), aB)
612+ let dn = fraction(cJ, (az / 2), aB)
613+ let do = fraction(cJ, (aA / 2), aB)
614+ let dp = fraction(dn, at, aw)
615+ let dq = fraction(dn, au, aw)
616+ let dr = fraction(do, at, aw)
617+ let ds = fraction(do, au, aw)
618+ let dt = if ((cW == al))
619+ then $Tuple3(((cU - dp) - dr), (dq + ds), am)
620+ else $Tuple3(((cU - dq) - ds), (dp + dr), al)
621+ let du = dt._1
622+ let dv = dt._2
623+ let dw = dt._3
624+ let cK = if (contains(ad, cW))
625+ then invoke(this, "stakeUnstake", [true, du, cW], nil)
617626 else 0
618- if ((cH == cH))
627+ if ((cK == cK))
619628 then {
620- let cI = if (contains(ab, dq))
621- then invoke(this, "stakeUnstake", [false, dp, dq], nil)
629+ let cL = if (contains(ad, dw))
630+ then invoke(this, "stakeUnstake", [false, dv, dw], nil)
622631 else 0
623- if ((cI == cI))
632+ if ((cL == cL))
624633 then {
625- let cJ = [IntegerEntry(h, (cc - dl)), IntegerEntry(i, (cd - dm)), IntegerEntry(k, (au + dj)), IntegerEntry(m, aY((cc - dl), (cd - dm))), ScriptTransfer(V, dl, al), ScriptTransfer(V, dm, am)]
626- if (cl)
634+ let cM = [IntegerEntry(h, ((cf - dp) - dr)), IntegerEntry(i, ((cg - dq) - ds)), IntegerEntry(k, (aw + dm)), IntegerEntry(m, bb((cf - dp), (cg - dq))), ScriptTransfer(W, dp, an), ScriptTransfer(W, dq, ao), ScriptTransfer(X, dr, an), ScriptTransfer(X, ds, ao)]
635+ if (co)
627636 then {
628- let cK = ([AttachedPayment(at, dj)] ++ (if ((size(aN.payments) == 2))
629- then [AttachedPayment(if ((aN.payments[1].assetId == base58''))
637+ let cN = ([AttachedPayment(av, dm)] ++ (if ((size(aQ.payments) == 2))
638+ then [AttachedPayment(if ((aQ.payments[1].assetId == base58''))
630639 then unit
631- else aN.payments[1].assetId, aN.payments[1].amount)]
640+ else aQ.payments[1].assetId, aQ.payments[1].amount)]
632641 else nil))
633- let cL = invoke(this, "reissueShare", [dj], nil)
634- if ((cL == cL))
642+ let cO = invoke(this, "reissueShare", [dm], nil)
643+ if ((cO == cO))
635644 then {
636- let cM = invoke(Z, "lockShareTokensFromPool", [aN.caller.bytes, toString(this), cm], cK)
637- if ((cM == cM))
638- then cJ
645+ let cP = invoke(ab, "lockShareTokensFromPool", [aQ.caller.bytes, toString(this), cp], cN)
646+ if ((cP == cP))
647+ then cM
639648 else throw("Strict value is not equal to itself.")
640649 }
641650 else throw("Strict value is not equal to itself.")
642651 }
643- else (cJ ++ [Reissue(at, dj, true), ScriptTransfer(aN.caller, dj, at)])
652+ else (cM ++ [Reissue(av, dm, true), ScriptTransfer(aQ.caller, dm, av)])
644653 }
645654 else throw("Strict value is not equal to itself.")
646655 }
647656 else throw("Strict value is not equal to itself.")
648657 }
649658 }
650659 }
651660
652661
653-func dr (aN,ds) = {
654- let dt = if ((size(aN.payments) == 1))
655- then if ((aN.payments[0].assetId != at))
656- then throw(("Incorrect asset attached. Expected: " + toBase58String(at)))
657- else $Tuple2(aN.payments[0].amount, aN.payments[0].assetId)
658- else $Tuple2(0, at)
659- let cR = dt._1
660- let ce = dt._2
661- if (!(aU))
662- then ([ScriptTransfer(aN.caller, cR, ce)] ++ bM())
662+func dx (aQ,dy) = {
663+ let dz = if ((size(aQ.payments) == 1))
664+ then if ((aQ.payments[0].assetId != av))
665+ then throw(("Incorrect asset attached. Expected: " + toBase58String(av)))
666+ else $Tuple2(aQ.payments[0].amount, aQ.payments[0].assetId)
667+ else $Tuple2(0, av)
668+ let cU = dz._1
669+ let ch = dz._2
670+ if (!(aX))
671+ then ([ScriptTransfer(aQ.caller, cU, ch)] ++ bP())
663672 else {
664- let du = if ((ds > 0))
665- then invoke(Z, "withdrawShareTokensFromPool", [aN.caller.bytes, toString(this), ds], nil)
673+ let dA = if ((dy > 0))
674+ then invoke(ab, "withdrawShareTokensFromPool", [aQ.caller.bytes, toString(this), dy], nil)
666675 else 0
667- if ((du == du))
676+ if ((dA == dA))
668677 then {
669- let dv = (cR + ds)
670- let dw = fraction(dv, ar, au)
671- let dx = fraction(dv, as, au)
672- let dy = aY((ar - dw), (as - dx))
673- let cH = if (contains(ab, aj))
674- then invoke(this, "stakeUnstake", [false, dw, aj], nil)
678+ let dB = (cU + dy)
679+ let dC = fraction(dB, at, aw)
680+ let dD = fraction(dB, au, aw)
681+ let dE = bb((at - dC), (au - dD))
682+ let cK = if (contains(ad, al))
683+ then invoke(this, "stakeUnstake", [false, dC, al], nil)
675684 else 0
676- if ((cH == cH))
685+ if ((cK == cK))
677686 then {
678- let cI = if (contains(ab, ak))
679- then invoke(this, "stakeUnstake", [false, dx, ak], nil)
687+ let cL = if (contains(ad, am))
688+ then invoke(this, "stakeUnstake", [false, dD, am], nil)
680689 else 0
681- if ((cI == cI))
682- then [IntegerEntry(h, (ar - dw)), IntegerEntry(i, (as - dx)), IntegerEntry(k, (au - dv)), IntegerEntry(m, dy), Burn(at, dv), ScriptTransfer(aN.caller, dw, al), ScriptTransfer(aN.caller, dx, am)]
690+ if ((cL == cL))
691+ then [IntegerEntry(h, (at - dC)), IntegerEntry(i, (au - dD)), IntegerEntry(k, (aw - dB)), IntegerEntry(m, dE), Burn(av, dB), ScriptTransfer(aQ.caller, dC, an), ScriptTransfer(aQ.caller, dD, ao)]
683692 else throw("Strict value is not equal to itself.")
684693 }
685694 else throw("Strict value is not equal to itself.")
686695 }
687696 else throw("Strict value is not equal to itself.")
688697 }
689698 }
690699
691700
692-@Callable(aN)
693-func init (dz) = {
694- let dA = $Tuple2(aN.payments[0].amount, aN.payments[0].assetId)
695- let cB = dA._1
696- let cn = dA._2
697- let dB = $Tuple2(aN.payments[1].amount, aN.payments[1].assetId)
698- let cC = dB._1
699- let co = dB._2
700- let dC = bA(cn)
701- let cs = dC._1
702- let ct = dC._2
703- let cu = dC._3
704- let dD = bA(co)
705- let cw = dD._1
706- let cx = dD._2
707- let cy = dD._3
701+@Callable(aQ)
702+func init (dF) = {
703+ let dG = $Tuple2(aQ.payments[0].amount, aQ.payments[0].assetId)
704+ let cE = dG._1
705+ let cq = dG._2
706+ let dH = $Tuple2(aQ.payments[1].amount, aQ.payments[1].assetId)
707+ let cF = dH._1
708+ let cr = dH._2
709+ let dI = bD(cq)
710+ let cv = dI._1
711+ let cw = dI._2
712+ let cx = dI._3
713+ let dJ = bD(cr)
714+ let cz = dJ._1
715+ let cA = dJ._2
716+ let cB = dJ._3
708717 if (isDefined(getBoolean(this, c)))
709- then bF()
710- else if ((cn == co))
718+ then bI()
719+ else if ((cq == cr))
711720 then throw("Assets must be different")
712721 else {
713- let dE = ((("s" + take(ct, 7)) + "_") + take(cx, 7))
714- let dF = ((((("ShareToken of SwopFi protocol for " + ct) + " and ") + cx) + " at address ") + toString(this))
715- let dG = ((cu + cy) / 2)
716- let dH = fraction(pow(cB, cu, 5, 1, cu, DOWN), pow(cC, cy, 5, 1, cy, DOWN), pow(10, 0, dG, 0, 0, DOWN))
717- let dI = Issue(dE, dF, dH, dG, true)
718- let dJ = calculateAssetId(dI)
719- let dy = aY(cB, cC)
720- let cH = if (contains(ab, cs))
721- then invoke(this, "stakeUnstake", [true, cB, cs], nil)
722+ let dK = ((("s" + take(cw, 7)) + "_") + take(cA, 7))
723+ let dL = ((((("ShareToken of SwopFi protocol for " + cw) + " and ") + cA) + " at address ") + toString(this))
724+ let dM = ((cx + cB) / 2)
725+ let dN = fraction(pow(cE, cx, 5, 1, cx, DOWN), pow(cF, cB, 5, 1, cB, DOWN), pow(10, 0, dM, 0, 0, DOWN))
726+ let dO = Issue(dK, dL, dN, dM, true)
727+ let dP = calculateAssetId(dO)
728+ let dE = bb(cE, cF)
729+ let cK = if (contains(ad, cv))
730+ then invoke(this, "stakeUnstake", [true, cE, cv], nil)
722731 else 0
723- if ((cH == cH))
732+ if ((cK == cK))
724733 then {
725- let cI = if (contains(ab, cw))
726- then invoke(this, "stakeUnstake", [true, cC, cw], nil)
734+ let cL = if (contains(ad, cz))
735+ then invoke(this, "stakeUnstake", [true, cF, cz], nil)
727736 else 0
728- if ((cI == cI))
737+ if ((cL == cL))
729738 then {
730- let dK = [StringEntry(b, a), BooleanEntry(c, true), StringEntry(f, cs), StringEntry(g, cw), IntegerEntry(h, cB), IntegerEntry(i, cC), IntegerEntry(m, dy), IntegerEntry(l, getIntegerValue(L, "base_fee_flat")), IntegerEntry(A, 3), dI, StringEntry(j, toBase58String(dJ)), IntegerEntry(k, dH), ScriptTransfer(aN.caller, dH, dJ)]
731- if (dz)
732- then (dK ++ [BooleanEntry(u, dz), IntegerEntry(v, (ad + (af * ae)))])
733- else dK
739+ let dQ = [StringEntry(b, a), BooleanEntry(c, true), StringEntry(f, cv), StringEntry(g, cz), IntegerEntry(h, cE), IntegerEntry(i, cF), IntegerEntry(m, dE), IntegerEntry(l, getIntegerValue(M, "base_fee_flat")), IntegerEntry(A, 3), dO, StringEntry(j, toBase58String(dP)), IntegerEntry(k, dN), ScriptTransfer(aQ.caller, dN, dP)]
740+ if (dF)
741+ then (dQ ++ [BooleanEntry(u, dF), IntegerEntry(v, (af + (ah * ag)))])
742+ else dQ
734743 }
735744 else throw("Strict value is not equal to itself.")
736745 }
737746 else throw("Strict value is not equal to itself.")
738747 }
739748 }
740749
741750
742751
743-@Callable(aN)
744-func replenishWithTwoTokensV2 (cl,cm) = valueOrElse(bG(), valueOrElse(bH(), ck(aN, cl, cm)))
752+@Callable(aQ)
753+func replenishWithTwoTokensV2 (co,cp) = valueOrElse(bJ(), valueOrElse(bK(), cn(aQ, co, cp)))
745754
746755
747756
748-@Callable(aN)
749-func replenishWithOneTokenV2 (cO,cP,cl,cm) = valueOrElse(bG(), valueOrElse(bH(), cN(aN, cO, cP, cl, cm)))
757+@Callable(aQ)
758+func replenishWithOneTokenV2 (cR,cS,co,cp) = valueOrElse(bJ(), valueOrElse(bK(), cQ(aQ, cR, cS, co, cp)))
750759
751760
752761
753-@Callable(aN)
754-func withdrawV2 (ds) = valueOrElse(bG(), dr(aN, ds))
762+@Callable(aQ)
763+func withdrawV2 (dy) = valueOrElse(bJ(), dx(aQ, dy))
755764
756765
757766
758-@Callable(aN)
759-func withdrawOneToken (ds,dL,dM,dN) = valueOrElse(bG(), valueOrElse(bH(), {
760- let dO = if ((size(aN.payments) == 1))
761- then if ((aN.payments[0].assetId != at))
762- then throw(("Incorrect asset attached. Expected: " + toBase58String(at)))
763- else $Tuple2(aN.payments[0].amount, aN.payments[0].assetId)
764- else $Tuple2(0, at)
765- let cR = dO._1
766- let ce = dO._2
767- let dv = (cR + ds)
768- if (if ((dL != aj))
769- then (dL != ak)
767+@Callable(aQ)
768+func withdrawOneToken (dy,dR,dS,dT) = valueOrElse(bJ(), valueOrElse(bK(), {
769+ let dU = if ((size(aQ.payments) == 1))
770+ then if ((aQ.payments[0].assetId != av))
771+ then throw(("Incorrect asset attached. Expected: " + toBase58String(av)))
772+ else $Tuple2(aQ.payments[0].amount, aQ.payments[0].assetId)
773+ else $Tuple2(0, av)
774+ let cU = dU._1
775+ let ch = dU._2
776+ let dB = (cU + dy)
777+ if (if ((dR != al))
778+ then (dR != am)
770779 else false)
771780 then throw("Incorrect withdraw asset")
772- else if ((0 >= dv))
781+ else if ((0 >= dB))
773782 then throw("withdraw amount must be grater than 0")
774- else if (!(aU))
775- then ([ScriptTransfer(aN.caller, cR, ce)] ++ bM())
783+ else if (!(aX))
784+ then ([ScriptTransfer(aQ.caller, cU, ch)] ++ bP())
776785 else {
777- let du = if ((ds > 0))
778- then invoke(Z, "withdrawShareTokensFromPool", [aN.caller.bytes, toString(this), ds], nil)
786+ let dA = if ((dy > 0))
787+ then invoke(ab, "withdrawShareTokensFromPool", [aQ.caller.bytes, toString(this), dy], nil)
779788 else 0
780- if ((du == du))
789+ if ((dA == dA))
781790 then {
782- let dw = fraction(dv, ar, au)
783- let dx = fraction(dv, as, au)
784- let dP = (ar - dw)
785- let dQ = (as - dx)
786- let dR = bV(aN.originCaller)
787- let dS = if ((dL == aj))
788- then ba(dM, dN, dx, am, dP, dQ, aY(dP, dQ))
789- else ba(dM, dN, dw, al, dP, dQ, aY(dP, dQ))
790- let dT = fraction(dS, fraction(ax, dR, ay, CEILING), ay)
791- let dU = fraction(dS, (ay - fraction(aw, dR, ay, CEILING)), ay)
792- let dV = if ((dL == aj))
793- then $Tuple4((dw + dU), (((ar - dw) - dU) - dT), as, am)
794- else $Tuple4((dx + dU), ar, (((as - dx) - dU) - dT), al)
795- let dW = dV._1
796- let dX = dV._2
797- let dY = dV._3
798- let dZ = dV._4
799- if (!(cb(dX, dY, dZ)))
791+ let dC = fraction(dB, at, aw)
792+ let dD = fraction(dB, au, aw)
793+ let dV = (at - dC)
794+ let dW = (au - dD)
795+ let dX = bY(aQ.originCaller)
796+ let dY = if ((dR == al))
797+ then bd(dS, dT, dD, ao, dV, dW, bb(dV, dW))
798+ else bd(dS, dT, dC, an, dV, dW, bb(dV, dW))
799+ let dZ = fraction(dY, fraction(az, dX, aB, CEILING), aB)
800+ let ea = fraction(dY, fraction(aA, dX, aB, CEILING), aB)
801+ let eb = fraction(dY, (aB - fraction(ay, dX, aB, CEILING)), aB)
802+ let ec = if ((dR == al))
803+ then $Tuple4((dC + eb), ((((at - dC) - eb) - dZ) - ea), au, ao)
804+ else $Tuple4((dD + eb), at, ((((au - dD) - eb) - dZ) - ea), an)
805+ let ed = ec._1
806+ let ee = ec._2
807+ let ef = ec._3
808+ let eg = ec._4
809+ if (!(ce(ee, ef, eg)))
800810 then throw()
801811 else {
802- let dy = aY(dX, dY)
803- let cH = if (contains(ab, dL))
804- then invoke(this, "stakeUnstake", [false, (dW + dT), dL], nil)
812+ let dE = bb(ee, ef)
813+ let cK = if (contains(ad, dR))
814+ then invoke(this, "stakeUnstake", [false, ((ed + dZ) + ea), dR], nil)
805815 else 0
806- if ((cH == cH))
807- then [IntegerEntry(h, dX), IntegerEntry(i, dY), IntegerEntry(k, (au - dv)), IntegerEntry(m, dy), Burn(at, dv), ScriptTransfer(aN.caller, dW, fromBase58String(dL)), ScriptTransfer(V, dT, fromBase58String(dL))]
816+ if ((cK == cK))
817+ then [IntegerEntry(h, ee), IntegerEntry(i, ef), IntegerEntry(k, (aw - dB)), IntegerEntry(m, dE), Burn(av, dB), ScriptTransfer(aQ.caller, ed, fromBase58String(dR)), ScriptTransfer(W, dZ, fromBase58String(dR)), ScriptTransfer(X, ea, fromBase58String(dR))]
808818 else throw("Strict value is not equal to itself.")
809819 }
810820 }
811821 else throw("Strict value is not equal to itself.")
812822 }
813823 }))
814824
815825
816826
817-@Callable(aN)
818-func exchange (dM,dN) = valueOrElse(bG(), valueOrElse(bH(), {
819- let ea = $Tuple2(aN.payments[0].amount, aN.payments[0].assetId)
820- let cR = ea._1
821- let ce = ea._2
822- if ((0 >= dM))
823- then throw(("Estimated amount must be positive. Actual: " + toString(dM)))
824- else if ((dN > dM))
827+@Callable(aQ)
828+func exchange (dS,dT) = valueOrElse(bJ(), valueOrElse(bK(), {
829+ let eh = $Tuple2(aQ.payments[0].amount, aQ.payments[0].assetId)
830+ let cU = eh._1
831+ let ch = eh._2
832+ if ((0 >= dS))
833+ then throw(("Estimated amount must be positive. Actual: " + toString(dS)))
834+ else if ((dT > dS))
825835 then throw("Minimal amount can't be greater than estimated.")
826- else if ((size(aN.payments) != 1))
827- then bL()
828- else if (!(aU))
829- then ([ScriptTransfer(aN.caller, cR, ce)] ++ bM())
830- else if (if ((ce != al))
831- then (ce != am)
836+ else if ((size(aQ.payments) != 1))
837+ then bO()
838+ else if (!(aX))
839+ then ([ScriptTransfer(aQ.caller, cU, ch)] ++ bP())
840+ else if (if ((ch != an))
841+ then (ch != ao)
832842 else false)
833- then bK()
834- else if ((10000000 > cR))
843+ then bN()
844+ else if ((10000000 > cU))
835845 then throw("Only swap of 10.000000 or more tokens is allowed")
836- else if (if ((aD > fraction(aA, dN, cR)))
846+ else if (if ((aG > fraction(aD, dT, cU)))
837847 then true
838- else (fraction(aA, dM, cR) > aE))
848+ else (fraction(aD, dS, cU) > aH))
839849 then throw("Incorrect args and pmt ratio")
840850 else {
841- let eb = if ((ce == al))
842- then am
843- else al
844- let bQ = ba(dM, dN, cR, ce, ar, as, av)
845- let dR = bV(aN.originCaller)
846- let ec = fraction(bQ, fraction(ax, dR, ay, CEILING), ay)
847- let ed = fraction(bQ, (ay - fraction(aw, dR, ay, CEILING)), ay)
848- let ee = if ((ce == al))
849- then $Tuple2((ar + cR), ((as - ed) - ec))
850- else $Tuple2(((ar - ed) - ec), (as + cR))
851- let cc = ee._1
852- let cd = ee._2
853- if (!(cb(cc, cd, ce)))
851+ let ei = if ((ch == an))
852+ then ao
853+ else an
854+ let bT = bd(dS, dT, cU, ch, at, au, ax)
855+ let dX = bY(aQ.originCaller)
856+ let ej = fraction(bT, fraction(az, dX, aB, CEILING), aB)
857+ let ea = fraction(bT, fraction(aA, dX, aB, CEILING), aB)
858+ let ek = fraction(bT, (aB - fraction(ay, dX, aB, CEILING)), aB)
859+ let el = if ((ch == an))
860+ then $Tuple2((at + cU), (((au - ek) - ej) - ea))
861+ else $Tuple2((((at - ek) - ej) - ea), (au + cU))
862+ let cf = el._1
863+ let cg = el._2
864+ if (!(ce(cf, cg, ch)))
854865 then throw()
855866 else {
856- let ef = bA(ce)
857- let cT = ef._1
858- let cU = ef._2
859- let cV = ef._3
860- let eg = bA(eb)
861- let eh = eg._1
862- let ei = eg._2
863- let ej = eg._3
864- let cH = if (contains(ab, cT))
865- then invoke(this, "stakeUnstake", [true, cR, cT], nil)
867+ let em = bD(ch)
868+ let cW = em._1
869+ let cX = em._2
870+ let cY = em._3
871+ let en = bD(ei)
872+ let eo = en._1
873+ let ep = en._2
874+ let eq = en._3
875+ let cK = if (contains(ad, cW))
876+ then invoke(this, "stakeUnstake", [true, cU, cW], nil)
866877 else 0
867- if ((cH == cH))
878+ if ((cK == cK))
868879 then {
869- let cI = if (contains(ab, eh))
870- then invoke(this, "stakeUnstake", [false, (ed + ec), eh], nil)
880+ let cL = if (contains(ad, eo))
881+ then invoke(this, "stakeUnstake", [false, ((ek + ej) + ea), eo], nil)
871882 else 0
872- if ((cI == cI))
873- then $Tuple2([IntegerEntry(h, cc), IntegerEntry(i, cd), IntegerEntry(m, aY(cc, cd)), ScriptTransfer(aN.caller, ed, eb), ScriptTransfer(V, ec, eb)], [ed, eb])
883+ if ((cL == cL))
884+ then $Tuple2([IntegerEntry(h, cf), IntegerEntry(i, cg), IntegerEntry(m, bb(cf, cg)), ScriptTransfer(aQ.caller, ek, ei), ScriptTransfer(W, ej, ei), ScriptTransfer(X, ea, ei)], [ek, ei])
874885 else throw("Strict value is not equal to itself.")
875886 }
876887 else throw("Strict value is not equal to itself.")
877888 }
878889 }
879890 }))
880891
881892
882893
883-@Callable(ek)
884-func reissueShare (bQ) = valueOrElse(bJ(ek), [Reissue(at, bQ, true)])
894+@Callable(er)
895+func reissueShare (bT) = valueOrElse(bM(er), [Reissue(av, bT, true)])
885896
886897
887898
888-@Callable(aN)
889-func shutdown () = valueOrElse(bI(aN), if (!(ag))
899+@Callable(aQ)
900+func shutdown () = valueOrElse(bL(aQ), if (!(ai))
890901 then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, n), "the cause wasn't specified")))
891- else bD("Paused by admin"))
902+ else bG("Paused by admin"))
892903
893904
894905
895-@Callable(aN)
896-func activate () = valueOrElse(bI(aN), if (ag)
897- then bF()
906+@Callable(aQ)
907+func activate () = valueOrElse(bL(aQ), if (ai)
908+ then bI()
898909 else [BooleanEntry(c, true), DeleteEntry(n)])
899910
900911
901912
902-@Callable(aN)
903-func takeIntoAccountExtraFunds () = valueOrElse(bG(), {
904- let el = if (if ((al == aa))
913+@Callable(aQ)
914+func takeIntoAccountExtraFunds () = valueOrElse(bJ(), {
915+ let es = if (if ((an == ac))
905916 then true
906- else (am == aa))
907- then invoke(X, "claimRewards", nil, nil)
917+ else (ao == ac))
918+ then invoke(Z, "claimRewards", nil, nil)
908919 else 0
909- if ((el == el))
920+ if ((es == es))
910921 then {
911- let em = (aS - ar)
912- let en = (aT - as)
913- let dh = aY((ar + em), (as + en))
914- if ((aN.caller != V))
922+ let et = (aV - at)
923+ let eu = (aW - au)
924+ let dk = bb((at + et), (au + eu))
925+ if ((aQ.caller != W))
915926 then throw("Only the money box can call this function")
916- else if (if ((0 > em))
927+ else if (if ((0 > et))
917928 then true
918- else (0 > en))
919- then bD("Enroll amount negative")
920- else if (if ((em == 0))
921- then (en == 0)
929+ else (0 > eu))
930+ then bG("Enroll amount negative")
931+ else if (if ((et == 0))
932+ then (eu == 0)
922933 else false)
923934 then throw("No money to take")
924935 else {
925- let cH = if (if (contains(ab, aj))
926- then (em > 0)
936+ let cK = if (if (contains(ad, al))
937+ then (et > 0)
927938 else false)
928- then invoke(this, "stakeUnstake", [true, em, aj], nil)
939+ then invoke(this, "stakeUnstake", [true, et, al], nil)
929940 else 0
930- if ((cH == cH))
941+ if ((cK == cK))
931942 then {
932- let cI = if (if (contains(ab, ak))
933- then (en > 0)
943+ let cL = if (if (contains(ad, am))
944+ then (eu > 0)
934945 else false)
935- then invoke(this, "stakeUnstake", [true, en, ak], nil)
946+ then invoke(this, "stakeUnstake", [true, eu, am], nil)
936947 else 0
937- if ((cI == cI))
938- then [IntegerEntry(m, dh), IntegerEntry(h, (ar + em)), IntegerEntry(i, (as + en))]
948+ if ((cL == cL))
949+ then [IntegerEntry(m, dk), IntegerEntry(h, (at + et)), IntegerEntry(i, (au + eu))]
939950 else throw("Strict value is not equal to itself.")
940951 }
941952 else throw("Strict value is not equal to itself.")
942953 }
943954 }
944955 else throw("Strict value is not equal to itself.")
945956 })
946957
947958
948959
949-@Callable(aN)
950-func keepLimitForFirstHarvest (eo) = valueOrElse(bG(), valueOrElse(bI(aN), [IntegerEntry(w, eo)]))
960+@Callable(aQ)
961+func keepLimitForFirstHarvest (ev) = valueOrElse(bJ(), valueOrElse(bL(aQ), [IntegerEntry(w, ev)]))
951962
952963
953964
954-@Callable(aN)
955-func stakeUnstake (bO,bQ,ep) = if ((aN.caller != this))
965+@Callable(aQ)
966+func stakeUnstake (bR,bT,ew) = if ((aQ.caller != this))
956967 then throw("Only contract itself can invoke this function")
957968 else {
958- let eq = bP(bO, bQ, fromBase58String(ep))
959- let bS = eq._1
960- let er = eq._2
961- let es = eq._3
962- let et = eq._4
963- let eu = invoke(er, bS, es, et)
964- if ((eu == eu))
969+ let ex = bS(bR, bT, fromBase58String(ew))
970+ let bV = ex._1
971+ let ey = ex._2
972+ let ez = ex._3
973+ let eA = ex._4
974+ let eB = invoke(ey, bV, ez, eA)
975+ if ((eB == eB))
965976 then nil
966977 else throw("Strict value is not equal to itself.")
967978 }
968979
969980
970981
971-@Callable(aN)
972-func replenishWithTwoTokens () = valueOrElse(bG(), valueOrElse(bH(), ck(aN, false, 0)))
982+@Callable(aQ)
983+func replenishWithTwoTokens () = valueOrElse(bJ(), valueOrElse(bK(), cn(aQ, false, 0)))
973984
974985
975986
976-@Callable(aN)
977-func replenishWithOneToken (cO,cP) = valueOrElse(bG(), valueOrElse(bH(), cN(aN, cO, cP, false, 0)))
987+@Callable(aQ)
988+func replenishWithOneToken (cR,cS) = valueOrElse(bJ(), valueOrElse(bK(), cQ(aQ, cR, cS, false, 0)))
978989
979990
980991
981-@Callable(aN)
982-func withdraw () = valueOrElse(bG(), dr(aN, 0))
992+@Callable(aQ)
993+func withdraw () = valueOrElse(bJ(), dx(aQ, 0))
983994
984995
985-@Verifier(ev)
986-func ew () = {
987- let ex = {
988- let ey = if (sigVerify(ev.bodyBytes, ev.proofs[0], R))
996+@Verifier(eC)
997+func eD () = {
998+ let eE = {
999+ let eF = if (sigVerify(eC.bodyBytes, eC.proofs[0], S))
9891000 then 1
9901001 else 0
991- let ez = if (sigVerify(ev.bodyBytes, ev.proofs[1], S))
1002+ let eG = if (sigVerify(eC.bodyBytes, eC.proofs[1], T))
9921003 then 1
9931004 else 0
994- let eA = if (sigVerify(ev.bodyBytes, ev.proofs[2], T))
1005+ let eH = if (sigVerify(eC.bodyBytes, eC.proofs[2], U))
9951006 then 1
9961007 else 0
997- (((ey + ez) + eA) >= 2)
1008+ (((eF + eG) + eH) >= 2)
9981009 }
999- let O = ev
1000- if ($isInstanceOf(O, "InvokeScriptTransaction"))
1010+ let P = eC
1011+ if ($isInstanceOf(P, "InvokeScriptTransaction"))
10011012 then {
1002- let eu = O
1003- let eB = if ((eu.dApp == this))
1004- then (eu.function == "takeIntoAccountExtraFunds")
1013+ let eB = P
1014+ let eI = if ((eB.dApp == this))
1015+ then (eB.function == "takeIntoAccountExtraFunds")
10051016 else false
1006- let eC = if (if (if (sigVerify(ev.bodyBytes, ev.proofs[0], R))
1017+ let eJ = if (if (if (sigVerify(eC.bodyBytes, eC.proofs[0], S))
10071018 then true
1008- else sigVerify(ev.bodyBytes, ev.proofs[0], S))
1019+ else sigVerify(eC.bodyBytes, eC.proofs[0], T))
10091020 then true
1010- else sigVerify(ev.bodyBytes, ev.proofs[0], T))
1021+ else sigVerify(eC.bodyBytes, eC.proofs[0], U))
10111022 then true
1012- else sigVerify(ev.bodyBytes, ev.proofs[0], U)
1013- if (if (eB)
1014- then eC
1023+ else sigVerify(eC.bodyBytes, eC.proofs[0], V)
1024+ if (if (eI)
1025+ then eJ
10151026 else false)
10161027 then true
1017- else ex
1028+ else eE
10181029 }
1019- else ex
1030+ else eE
10201031 }
10211032

github/deemru/w8io/169f3d6 
399.34 ms