tx · 9qP6orXxGJQLsJTmJtuF6DXFpS1dqFm36e2ELHq6tMom

3N95taAsiWcVMmXdVShZ2ann6MAboXrFT1b:  -0.01400000 Waves

2021.07.20 16:18 [1621989] smart account 3N95taAsiWcVMmXdVShZ2ann6MAboXrFT1b > SELF 0.00000000 Waves

{ "type": 13, "id": "9qP6orXxGJQLsJTmJtuF6DXFpS1dqFm36e2ELHq6tMom", "fee": 1400000, "feeAssetId": null, "timestamp": 1626787132542, "version": 2, "chainId": 84, "sender": "3N95taAsiWcVMmXdVShZ2ann6MAboXrFT1b", "senderPublicKey": "EDQ1awBPdPh8m86bDaSLf5pynLiRVX4kcPLMxYLRScq5", "proofs": [ "2YyzjC5LBqzSRHJTc1UiPzNACPx1vRJZdTDvntmAH8pDvYXwjkzuVLBWkanzEwfnsdgLBRdsSEcDZeDJpaSBDBw2", "65sHiKSFwPKowRN3swNBBqZqtVbs8HDyY3rREfz6Yu99d4FG5VnosqeSsWWXecQw3hiGKa3Rv3zf5f4mUNCTn1Ar" ], "script": "base64:AAIEAAAAAAAAACoIAhIDCgEEEgcKBQEBCAgEEgMKAQESAwoBARIAEgMKAQESABIAEgMKAQEAAABHAAAAAAd2ZXJzaW9uAgAAAAUxLjAuMAAAAAAKa2V5VmVyc2lvbgIAAAAHdmVyc2lvbgAAAAAJa2V5QWN0aXZlAgAAAAZhY3RpdmUAAAAAC2tleUFzc2V0SWRBAgAAAApBX2Fzc2V0X2lkAAAAAAtrZXlBc3NldElkQgIAAAAKQl9hc3NldF9pZAAAAAALa2V5QmFsYW5jZUECAAAAD0FfYXNzZXRfYmFsYW5jZQAAAAALa2V5QmFsYW5jZUICAAAAD0JfYXNzZXRfYmFsYW5jZQAAAAAPa2V5QmFsYW5jZUluaXRBAgAAAAxBX2Fzc2V0X2luaXQAAAAAD2tleUJhbGFuY2VJbml0QgIAAAAMQl9hc3NldF9pbml0AAAAAA9rZXlTaGFyZUFzc2V0SWQCAAAADnNoYXJlX2Fzc2V0X2lkAAAAABNrZXlTaGFyZUFzc2V0U3VwcGx5AgAAABJzaGFyZV9hc3NldF9zdXBwbHkAAAAADWtleUNvbW1pc3Npb24CAAAACmNvbW1pc3Npb24AAAAAG2tleUNvbW1pc3Npb25TY2FsZURlbGltaXRlcgIAAAAaY29tbWlzc2lvbl9zY2FsZV9kZWxpbWl0ZXIAAAAACGtleUNhdXNlAgAAAA5zaHV0ZG93bl9jYXVzZQAAAAAPa2V5Rmlyc3RIYXJ2ZXN0AgAAAA1maXJzdF9oYXJ2ZXN0AAAAABVrZXlGaXJzdEhhcnZlc3RIZWlnaHQCAAAAFGZpcnN0X2hhcnZlc3RfaGVpZ2h0AAAAAAtrU2hhcmVMaW1pdAIAAAAcc2hhcmVfbGltaXRfb25fZmlyc3RfaGFydmVzdAAAAAALa0Jhc2VQZXJpb2QCAAAAC2Jhc2VfcGVyaW9kAAAAAA1rUGVyaW9kTGVuZ3RoAgAAAA1wZXJpb2RfbGVuZ3RoAAAAAAxrU3RhcnRIZWlnaHQCAAAADHN0YXJ0X2hlaWdodAAAAAATa0ZpcnN0SGFydmVzdEhlaWdodAIAAAAUZmlyc3RfaGFydmVzdF9oZWlnaHQAAAAADGFkbWluUHViS2V5MQEAAAAgBM915WTQwQ9OZ7kfE2TEGg3qhCRCMX0zkF1AWAqdk0oAAAAA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QgAAAAUFAAAACXNoYXJlTmFtZQUAAAAQc2hhcmVEZXNjcmlwdGlvbgUAAAASc2hhcmVJbml0aWFsU3VwcGx5BQAAAA1zaGFyZURlY2ltYWxzBgQAAAAMc2hhcmVJc3N1ZUlkCQAEOAAAAAEFAAAACnNoYXJlSXNzdWUEAAAACWJhc2VFbnRyeQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAAAprZXlWZXJzaW9uBQAAAAd2ZXJzaW9uCQAETAAAAAIJAQAAAAxCb29sZWFuRW50cnkAAAACBQAAAAlrZXlBY3RpdmUGCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAAC2tleUFzc2V0SWRBBQAAAA5wbXRTdHJBc3NldElkQQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAAAtrZXlBc3NldElkQgUAAAAOcG10U3RyQXNzZXRJZEIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAC2tleUJhbGFuY2VBBQAAAApwbXRBbW91bnRBCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAtrZXlCYWxhbmNlQgUAAAAKcG10QW1vdW50QgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAANa2V5Q29tbWlzc2lvbgUAAAAKY29tbWlzc2lvbgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAba2V5Q29tbWlzc2lvblNjYWxlRGVsaW1pdGVyBQAAABhjb21taXNzaW9uU2NhbGVEZWxpbWl0ZXIJAARMAAAAAgUAAAAKc2hhcmVJc3N1ZQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAAA9rZXlTaGFyZUFzc2V0SWQJAAJYAAAAAQUAAAAMc2hhcmVJc3N1ZUlkCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABNrZXlTaGFyZUFzc2V0U3VwcGx5BQAAABJzaGFyZUluaXRpYWxTdXBwbHkJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyBQAAABJzaGFyZUluaXRpYWxTdXBwbHkFAAAADHNoYXJlSXNzdWVJZAUAAAADbmlsAwUAAAAMZmlyc3RIYXJ2ZXN0CQAETgAAAAIFAAAACWJhc2VFbnRyeQkABEwAAAACCQEAAAAMQm9vbGVhbkVudHJ5AAAAAgUAAAAPa2V5Rmlyc3RIYXJ2ZXN0BQAAAAxmaXJzdEhhcnZlc3QJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAFWtleUZpcnN0SGFydmVzdEhlaWdodAkAAGQAAAACBQAAAAtzdGFydEhlaWdodAkAAGgAAAACBQAAABVmaXJzdEhhcnZlc3RFbmRQZXJpb2QFAAAADHBlcmlvZExlbmd0aAUAAAADbmlsBQAAAAliYXNlRW50cnkAAAABaQEAAAARaW5pdFdpdGhJbml0UmF0aW8AAAAFAAAACWFtdEFzc2V0QQAAAAlhbXRBc3NldEIAAAALc3RyQXNzZXRJZEEAAAALc3RyQXNzZXRJZEIAAAAMZmlyc3RIYXJ2ZXN0BAAAAAskdDA5MDEwOTA5NwkBAAAAFmdldEFzc2V0SW5mb0Zyb21TdHJpbmcAAAABBQAAAAtzdHJBc3NldElkQQQAAAAOcG10U3RyQXNzZXRJZEEIBQAAAAskdDA5MDEwOTA5NwAAAAJfMQQAAAANcG10QXNzZXROYW1lQQgFAAAACyR0MDkwMTA5MDk3AAAAAl8yBAAAAAxwbXREZWNpbWFsc0EIBQAAAAskdDA5MDEwOTA5NwAAAAJfMwQAAAALJHQwOTEwMjkxODkJAQAAABZnZXRBc3NldEluZm9Gcm9tU3RyaW5nAAAAAQUAAAALc3RyQXNzZXRJZEIEAAAADnBtdFN0ckFzc2V0SWRCCAUAAAALJHQwOTEwMjkxODkAAAACXzEEAAAADXBtdEFzc2V0TmFtZUIIBQAAAAskdDA5MTAyOTE4OQAAAAJfMgQAAAAMcG10RGVjaW1hbHNCCAUAAAALJHQwOTEwMjkxODkAAAACXzMDCQEAAAABIQAAAAEJAQAAAA9jb250YWluc0VsZW1lbnQAAAACCQAETAAAAAIFAAAADGFkbWluUHViS2V5MQkABEwAAAACBQAAAAxhZG1pblB1YktleTIJAARMAAAAAgUAAAAMYWRtaW5QdWJLZXkzCQAETAAAAAIFAAAAEmFkbWluUHViS2V5U3Rha2luZwUAAAADbmlsCAUAAAABaQAAAA9jYWxsZXJQdWJsaWNLZXkJAAACAAAAAQIAAAAhT25seSBhZG1pbiBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uAwkBAAAACWlzRGVmaW5lZAAAAAEJAAQbAAAAAgUAAAAEdGhpcwUAAAAJa2V5QWN0aXZlCQAAAgAAAAECAAAAFkRBcHAgaXMgYWxyZWFkeSBhY3RpdmUDCQAAAAAAAAIFAAAAC3N0ckFzc2V0SWRBBQAAAAtzdHJBc3NldElkQgkAAAIAAAABAgAAABhBc3NldHMgbXVzdCBiZSBkaWZmZXJlbnQEAAAACXNoYXJlTmFtZQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAABcwkAAS8AAAACBQAAAA1wbXRBc3NldE5hbWVBAAAAAAAAAAAHAgAAAAFfCQABLwAAAAIFAAAADXBtdEFzc2V0TmFtZUIAAAAAAAAAAAcEAAAAEHNoYXJlRGVzY3JpcHRpb24JAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAACJTaGFyZVRva2VuIG9mIFN3b3BGaSBwcm90b2NvbCBmb3IgBQAAAA1wbXRBc3NldE5hbWVBAgAAAAUgYW5kIAUAAAANcG10QXNzZXROYW1lQgIAAAAMIGF0IGFkZHJlc3MgCQAEJQAAAAEFAAAABHRoaXMEAAAADXNoYXJlRGVjaW1hbHMJAABpAAAAAgkAAGQAAAACBQAAAAxwbXREZWNpbWFsc0EFAAAADHBtdERlY2ltYWxzQgAAAAAAAAAAAgQAAAASc2hhcmVJbml0aWFsU3VwcGx5AAAAAAAAAAAABAAAAApzaGFyZUlzc3VlCQAEQgAAAAUFAAAACXNoYXJlTmFtZQUAAAAQc2hhcmVEZXNjcmlwdGlvbgUAAAASc2hhcmVJbml0aWFsU3VwcGx5BQAAAA1zaGFyZURlY2ltYWxzBgQAAAAMc2hhcmVJc3N1ZUlkCQAEOAAAAAEFAAAACnNoYXJlSXNzdWUEAAAACWJhc2VFbnRyeQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAAAprZXlWZXJzaW9uBQAAAAd2ZXJzaW9uCQAETAAAAAIJAQAAAAxCb29sZWFuRW50cnkAAAACBQAAAAlrZXlBY3RpdmUGCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAAC2tleUFzc2V0SWRBBQAAAA5wbXRTdHJBc3NldElkQQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAAAtrZXlBc3NldElkQgUAAAAOcG10U3RyQXNzZXRJZEIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAD2tleUJhbGFuY2VJbml0QQUAAAAJYW10QXNzZXRBCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAA9rZXlCYWxhbmNlSW5pdEIFAAAACWFtdEFzc2V0QgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAALa2V5QmFsYW5jZUEAAAAAAAAAAAAJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAC2tleUJhbGFuY2VCAAAAAAAAAAAACQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAA1rZXlDb21taXNzaW9uBQAAAApjb21taXNzaW9uCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABtrZXlDb21taXNzaW9uU2NhbGVEZWxpbWl0ZXIFAAAAGGNvbW1pc3Npb25TY2FsZURlbGltaXRlcgkABEwAAAACBQAAAApzaGFyZUlzc3VlCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAAD2tleVNoYXJlQXNzZXRJZAkAAlgAAAABBQAAAAxzaGFyZUlzc3VlSWQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAE2tleVNoYXJlQXNzZXRTdXBwbHkFAAAAEnNoYXJlSW5pdGlhbFN1cHBseQUAAAADbmlsAwUAAAAMZmlyc3RIYXJ2ZXN0CQAETgAAAAIFAAAACWJhc2VFbnRyeQkABEwAAAACCQEAAAAMQm9vbGVhbkVudHJ5AAAAAgUAAAAPa2V5Rmlyc3RIYXJ2ZXN0BQAAAAxmaXJzdEhhcnZlc3QJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAFWtleUZpcnN0SGFydmVzdEhlaWdodAkAAGQAAAACBQAAAAtzdGFydEhlaWdodAkAAGgAAAACBQAAABVmaXJzdEhhcnZlc3RFbmRQZXJpb2QFAAAADHBlcmlvZExlbmd0aAUAAAADbmlsBQAAAAliYXNlRW50cnkAAAABaQEAAAAYa2VlcExpbWl0Rm9yRmlyc3RIYXJ2ZXN0AAAAAQAAAApzaGFyZUxpbWl0AwkBAAAAASEAAAABBQAAAAhpc0FjdGl2ZQkAAAIAAAABAgAAAB9EQXBwIGlzIGluYWN0aXZlIGF0IHRoaXMgbW9tZW50AwkBAAAAASEAAAABCQEAAAAPY29udGFpbnNFbGVtZW50AAAAAgkABEwAAAACBQAAAAxhZG1pblB1YktleTEJAARMAAAAAgUAAAAMYWRtaW5QdWJLZXkyCQAETAAAAAIFAAAADGFkbWluUHViS2V5MwkABEwAAAACBQAAABJhZG1pblB1YktleVN0YWtpbmcFAAAAA25pbAgFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5CQAAAgAAAAECAAAAIU9ubHkgYWRtaW4gY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAALa1NoYXJlTGltaXQFAAAACnNoYXJlTGltaXQFAAAAA25pbAAAAAFpAQAAABZyZXBsZW5pc2hXaXRoVHdvVG9rZW5zAAAAAQAAABFzbGlwcGFnZVRvbGVyYW5jZQQAAAALcG10QXNzZXRJZEEICQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAAAAAAB2Fzc2V0SWQEAAAAC3BtdEFzc2V0SWRCCAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAQAAAAdhc3NldElkBAAAAApwbXRBbW91bnRBCQEAAAAQZGVkdWN0U3Rha2luZ0ZlZQAAAAIICQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAAAAAABmFtb3VudAUAAAALcG10QXNzZXRJZEEEAAAACnBtdEFtb3VudEIJAQAAABBkZWR1Y3RTdGFraW5nRmVlAAAAAggJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAEAAAAGYW1vdW50BQAAAAtwbXRBc3NldElkQgMDCQAAAAAAAAIFAAAACGJhbGFuY2VBAAAAAAAAAAAACQAAAAAAAAIFAAAACGJhbGFuY2VCAAAAAAAAAAAABwQAAAANJHQwMTE4NzQxMTk1MQkBAAAADGdldEFzc2V0SW5mbwAAAAEFAAAAC3BtdEFzc2V0SWRBBAAAAA5wbXRTdHJBc3NldElkQQgFAAAADSR0MDExODc0MTE5NTEAAAACXzEEAAAADXBtdEFzc2V0TmFtZUEIBQAAAA0kdDAxMTg3NDExOTUxAAAAAl8yBAAAAAxwbXREZWNpbWFsc0EIBQAAAA0kdDAxMTg3NDExOTUxAAAAAl8zBAAAAA0kdDAxMTk2MDEyMDM3CQEAAAAMZ2V0QXNzZXRJbmZvAAAAAQUAAAALcG10QXNzZXRJZEIEAAAADnBtdFN0ckFzc2V0SWRCCAUAAAANJHQwMTE5NjAxMjAzNwAAAAJfMQQAAAANcG10QXNzZXROYW1lQggFAAAADSR0MDExOTYwMTIwMzcAAAACXzIEAAAADHBtdERlY2ltYWxzQggFAAAADSR0MDExOTYwMTIwMzcAAAACXzMEAAAACnRva2VuUmF0aW8JAABrAAAAAwkAAGsAAAADBQAAAAphc3NldEluaXRBBQAAAAtzY2FsZVZhbHVlOAUAAAAKcG10QW1vdW50QQUAAAALc2NhbGVWYWx1ZTMJAABrAAAAAwUAAAAKYXNzZXRJbml0QgUAAAALc2NhbGVWYWx1ZTgFAAAACnBtdEFtb3VudEIDCQAAAAAAAAIFAAAAC3BtdEFzc2V0SWRBBQAAAAtwbXRBc3NldElkQgkAAAIAAAABAgAAABhBc3NldHMgbXVzdCBiZSBkaWZmZXJlbnQEAAAADXNoYXJlRGVjaW1hbHMJAABpAAAAAgkAAGQAAAACBQAAAAxwbXREZWNpbWFsc0EFAAAADHBtdERlY2ltYWxzQgAAAAAAAAAAAgQAAAASc2hhcmVJbml0aWFsU3VwcGx5CQAAawAAAAMJAABsAAAABgUAAAAKcG10QW1vdW50QQUAAAAMcG10RGVjaW1hbHNBAAAAAAAAAAAFAAAAAAAAAAABBQAAAAxwbXREZWNpbWFsc0EFAAAACEhBTEZET1dOCQAAbAAAAAYFAAAACnBtdEFtb3VudEIFAAAADHBtdERlY2ltYWxzQgAAAAAAAAAABQAAAAAAAAAAAQUAAAAMcG10RGVjaW1hbHNCBQAAAAhIQUxGRE9XTgkAAGwAAAAGAAAAAAAAAAAKAAAAAAAAAAAABQAAAA1zaGFyZURlY2ltYWxzAAAAAAAAAAAAAAAAAAAAAAAABQAAAAhIQUxGRE9XTgMJAQAAAAEhAAAAAQUAAAAIaXNBY3RpdmUJAAACAAAAAQIAAAAfREFwcCBpcyBpbmFjdGl2ZSBhdCB0aGlzIG1vbWVudAMDCQAAZgAAAAIAAAAAAAAAAAAFAAAAEXNsaXBwYWdlVG9sZXJhbmNlBgkAAGYAAAACBQAAABFzbGlwcGFnZVRvbGVyYW5jZQUAAAAac2xpcHBhZ2VUb2xlcmFuY2VEZWxpbWl0ZXIJAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAApU2xpcHBhZ2UgdG9sZXJhbmNlIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAJAAGkAAAAAQUAAAAac2xpcHBhZ2VUb2xlcmFuY2VEZWxpbWl0ZXICAAAAFiBpbmNsdXNpdmVseS4gQWN0dWFsOiAJAAGkAAAAAQUAAAARc2xpcHBhZ2VUb2xlcmFuY2UDCQEAAAACIT0AAAACCQABkAAAAAEIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAACCQAAAgAAAAECAAAAHFR3byBhdHRhY2hlZCBhc3NldHMgZXhwZWN0ZWQDAwkAAGYAAAACCQAAaQAAAAIJAABoAAAAAgUAAAALc2NhbGVWYWx1ZTMJAABlAAAAAgUAAAAac2xpcHBhZ2VUb2xlcmFuY2VEZWxpbWl0ZXIFAAAAEXNsaXBwYWdlVG9sZXJhbmNlBQAAABpzbGlwcGFnZVRvbGVyYW5jZURlbGltaXRlcgUAAAAKdG9rZW5SYXRpbwYJAABmAAAAAgUAAAAKdG9rZW5SYXRpbwkAAGkAAAACCQAAaAAAAAIFAAAAC3NjYWxlVmFsdWUzCQAAZAAAAAIFAAAAGnNsaXBwYWdlVG9sZXJhbmNlRGVsaW1pdGVyBQAAABFzbGlwcGFnZVRvbGVyYW5jZQUAAAAac2xpcHBhZ2VUb2xlcmFuY2VEZWxpbWl0ZXIJAAACAAAAAQIAAAA9SW5jb3JyZWN0IGFzc2V0cyBhbW91bnQ6IGFtb3VudHMgbXVzdCBoYXZlIHRoZSBjb250cmFjdCByYXRpbwMDCQEAAAACIT0AAAACBQAAAAtwbXRBc3NldElkQQUAAAAIYXNzZXRJZEEGCQEAAAACIT0AAAACBQAAAAtwbXRBc3NldElkQgUAAAAIYXNzZXRJZEIJAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAlSW5jb3JyZWN0IGFzc2V0cyBhdHRhY2hlZC4gRXhwZWN0ZWQ6IAUAAAALc3RyQXNzZXRJZEECAAAABSBhbmQgBQAAAAtzdHJBc3NldElkQgMJAAAAAAAAAgUAAAASc2hhcmVJbml0aWFsU3VwcGx5AAAAAAAAAAAACQAAAgAAAAECAAAAHVRvbyBzbWFsbCBhbW91bnQgdG8gcmVwbGVuaXNoAwkBAAAAASEAAAABBQAAABBoYXNFbm91Z2hCYWxhbmNlCQAETgAAAAIJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyBQAAAApwbXRBbW91bnRBBQAAAAtwbXRBc3NldElkQQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAACnBtdEFtb3VudEIFAAAAC3BtdEFzc2V0SWRCBQAAAANuaWwJAQAAABFzdXNwZW5kU3VzcGljaW91cwAAAAAJAARMAAAAAgkBAAAAB1JlaXNzdWUAAAADBQAAAAxzaGFyZUFzc2V0SWQFAAAAEnNoYXJlSW5pdGlhbFN1cHBseQYJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAC2tleUJhbGFuY2VBBQAAAApwbXRBbW91bnRBCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAtrZXlCYWxhbmNlQgUAAAAKcG10QW1vdW50QgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAATa2V5U2hhcmVBc3NldFN1cHBseQUAAAASc2hhcmVJbml0aWFsU3VwcGx5CQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAASc2hhcmVJbml0aWFsU3VwcGx5BQAAAAxzaGFyZUFzc2V0SWQFAAAAA25pbAQAAAAKdG9rZW5SYXRpbwkAAGsAAAADCQAAawAAAAMFAAAACGJhbGFuY2VBBQAAAAtzY2FsZVZhbHVlOAUAAAAKcG10QW1vdW50QQUAAAALc2NhbGVWYWx1ZTMJAABrAAAAAwUAAAAIYmFsYW5jZUIFAAAAC3NjYWxlVmFsdWU4BQAAAApwbXRBbW91bnRCBAAAABNyYXRpb1NoYXJlVG9rZW5zSW5BCQAAawAAAAMFAAAACnBtdEFtb3VudEEFAAAAC3NjYWxlVmFsdWU4BQAAAAhiYWxhbmNlQQQAAAATcmF0aW9TaGFyZVRva2Vuc0luQgkAAGsAAAADBQAAAApwbXRBbW91bnRCBQAAAAtzY2FsZVZhbHVlOAUAAAAIYmFsYW5jZUIEAAAAFXNoYXJlVG9rZW5Ub1BheUFtb3VudAkAAGsAAAADCQABlwAAAAEJAARMAAAAAgUAAAATcmF0aW9TaGFyZVRva2Vuc0luQQkABEwAAAACBQAAABNyYXRpb1NoYXJlVG9rZW5zSW5CBQAAAANuaWwFAAAAEHNoYXJlQXNzZXRTdXBwbHkFAAAAC3NjYWxlVmFsdWU4AwkBAAAAASEAAAABBQAAAAhpc0FjdGl2ZQkAAAIAAAABAgAAAB9EQXBwIGlzIGluYWN0aXZlIGF0IHRoaXMgbW9tZW50AwMJAABmAAAAAgAAAAAAAAAAAAUAAAARc2xpcHBhZ2VUb2xlcmFuY2UGCQAAZgAAAAIFAAAAEXNsaXBwYWdlVG9sZXJhbmNlBQAAABpzbGlwcGFnZVRvbGVyYW5jZURlbGltaXRlcgkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAClTbGlwcGFnZSB0b2xlcmFuY2UgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIAkAAaQAAAABBQAAABpzbGlwcGFnZVRvbGVyYW5jZURlbGltaXRlcgIAAAAWIGluY2x1c2l2ZWx5LiBBY3R1YWw6IAkAAaQAAAABBQAAABFzbGlwcGFnZVRvbGVyYW5jZQMJAQAAAAIhPQAAAAIJAAGQAAAAAQgFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAIJAAACAAAAAQIAAAAcVHdvIGF0dGFjaGVkIGFzc2V0cyBleHBlY3RlZAMDCQEAAAACIT0AAAACBQAAAAtwbXRBc3NldElkQQUAAAAIYXNzZXRJZEEGCQEAAAACIT0AAAACBQAAAAtwbXRBc3NldElkQgUAAAAIYXNzZXRJZEIJAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAlSW5jb3JyZWN0IGFzc2V0cyBhdHRhY2hlZC4gRXhwZWN0ZWQ6IAUAAAALc3RyQXNzZXRJZEECAAAABSBhbmQgBQAAAAtzdHJBc3NldElkQgMDCQAAZgAAAAIJAABpAAAAAgkAAGgAAAACBQAAAAtzY2FsZVZhbHVlMwkAAGUAAAACBQAAABpzbGlwcGFnZVRvbGVyYW5jZURlbGltaXRlcgUAAAARc2xpcHBhZ2VUb2xlcmFuY2UFAAAAGnNsaXBwYWdlVG9sZXJhbmNlRGVsaW1pdGVyBQAAAAp0b2tlblJhdGlvBgkAAGYAAAACBQAAAAp0b2tlblJhdGlvCQAAaQAAAAIJAABoAAAAAgUAAAALc2NhbGVWYWx1ZTMJAABkAAAAAgUAAAAac2xpcHBhZ2VUb2xlcmFuY2VEZWxpbWl0ZXIFAAAAEXNsaXBwYWdlVG9sZXJhbmNlBQAAABpzbGlwcGFnZVRvbGVyYW5jZURlbGltaXRlcgkAAAIAAAABAgAAAD1JbmNvcnJlY3QgYXNzZXRzIGFtb3VudDogYW1vdW50cyBtdXN0IGhhdmUgdGhlIGNvbnRyYWN0IHJhdGlvAwkAAAAAAAACBQAAABVzaGFyZVRva2VuVG9QYXlBbW91bnQAAAAAAAAAAAAJAAACAAAAAQIAAAAdVG9vIHNtYWxsIGFtb3VudCB0byByZXBsZW5pc2gDCQEAAAABIQAAAAEFAAAAEGhhc0Vub3VnaEJhbGFuY2UJAAROAAAAAgkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAACnBtdEFtb3VudEEFAAAAC3BtdEFzc2V0SWRBCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAAKcG10QW1vdW50QgUAAAALcG10QXNzZXRJZEIFAAAAA25pbAkBAAAAEXN1c3BlbmRTdXNwaWNpb3VzAAAAAAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAALa2V5QmFsYW5jZUEJAABkAAAAAgUAAAAIYmFsYW5jZUEFAAAACnBtdEFtb3VudEEJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAC2tleUJhbGFuY2VCCQAAZAAAAAIFAAAACGJhbGFuY2VCBQAAAApwbXRBbW91bnRCCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABNrZXlTaGFyZUFzc2V0U3VwcGx5CQAAZAAAAAIFAAAAEHNoYXJlQXNzZXRTdXBwbHkFAAAAFXNoYXJlVG9rZW5Ub1BheUFtb3VudAkABEwAAAACCQEAAAAHUmVpc3N1ZQAAAAMFAAAADHNoYXJlQXNzZXRJZAUAAAAVc2hhcmVUb2tlblRvUGF5QW1vdW50BgkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAAFXNoYXJlVG9rZW5Ub1BheUFtb3VudAUAAAAMc2hhcmVBc3NldElkBQAAAANuaWwAAAABaQEAAAAId2l0aGRyYXcAAAAABAAAAA0kdDAxNjQ0OTE2NTk5CQAFFAAAAAIICQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAAAAAABmFtb3VudAgJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAHYXNzZXRJZAQAAAAJcG10QW1vdW50CAUAAAANJHQwMTY0NDkxNjU5OQAAAAJfMQQAAAAKcG10QXNzZXRJZAgFAAAADSR0MDE2NDQ5MTY1OTkAAAACXzIEAAAADGFtb3VudFRvUGF5QQkBAAAAEGRlZHVjdFN0YWtpbmdGZWUAAAACCQAAawAAAAMFAAAACXBtdEFtb3VudAUAAAAIYmFsYW5jZUEFAAAAEHNoYXJlQXNzZXRTdXBwbHkFAAAACGFzc2V0SWRBBAAAAAxhbW91bnRUb1BheUIJAQAAABBkZWR1Y3RTdGFraW5nRmVlAAAAAgkAAGsAAAADBQAAAAlwbXRBbW91bnQFAAAACGJhbGFuY2VCBQAAABBzaGFyZUFzc2V0U3VwcGx5BQAAAAhhc3NldElkQgMJAQAAAAEhAAAAAQUAAAAIaXNBY3RpdmUJAAACAAAAAQIAAAAfREFwcCBpcyBpbmFjdGl2ZSBhdCB0aGlzIG1vbWVudAMJAQAAAAIhPQAAAAIJAAGQAAAAAQgFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAEJAAACAAAAAQIAAAAdT25lIGF0dGFjaGVkIHBheW1lbnQgZXhwZWN0ZWQDCQEAAAACIT0AAAACBQAAAApwbXRBc3NldElkBQAAAAxzaGFyZUFzc2V0SWQJAAACAAAAAQkAASwAAAACAgAAACRJbmNvcnJlY3QgYXNzZXQgYXR0YWNoZWQuIEV4cGVjdGVkOiAJAAJYAAAAAQUAAAAMc2hhcmVBc3NldElkAwkBAAAAASEAAAABBQAAABBoYXNFbm91Z2hCYWxhbmNlCQAETgAAAAIJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyBQAAAAlwbXRBbW91bnQFAAAACnBtdEFzc2V0SWQFAAAAA25pbAkBAAAAEXN1c3BlbmRTdXNwaWNpb3VzAAAAAAMDCQAAZgAAAAIFAAAADGFtb3VudFRvUGF5QQUAAAARYXZhaWxhYmxlQmFsYW5jZUEGCQAAZgAAAAIFAAAADGFtb3VudFRvUGF5QgUAAAARYXZhaWxhYmxlQmFsYW5jZUIJAQAAACJ0aHJvd0luc3VmZmljaWVudEF2YWlsYWJsZUJhbGFuY2VzAAAAAgUAAAAMYW1vdW50VG9QYXlBBQAAAAxhbW91bnRUb1BheUIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAC2tleUJhbGFuY2VBCQAAZQAAAAIFAAAACGJhbGFuY2VBBQAAAAxhbW91bnRUb1BheUEJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAC2tleUJhbGFuY2VCCQAAZQAAAAIFAAAACGJhbGFuY2VCBQAAAAxhbW91bnRUb1BheUIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAE2tleVNoYXJlQXNzZXRTdXBwbHkJAABlAAAAAgUAAAAQc2hhcmVBc3NldFN1cHBseQUAAAAJcG10QW1vdW50CQAETAAAAAIJAQAAAARCdXJuAAAAAgUAAAAMc2hhcmVBc3NldElkBQAAAAlwbXRBbW91bnQJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyBQAAAAxhbW91bnRUb1BheUEFAAAACGFzc2V0SWRBCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAAMYW1vdW50VG9QYXlCBQAAAAhhc3NldElkQgUAAAADbmlsAAAAAWkBAAAACGV4Y2hhbmdlAAAAAQAAABJtaW5BbW91bnRUb1JlY2VpdmUEAAAADSR0MDE3ODA1MTc4ODAJAAUUAAAAAggJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAGYW1vdW50CAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAdhc3NldElkBAAAAAlwbXRBbW91bnQIBQAAAA0kdDAxNzgwNTE3ODgwAAAAAl8xBAAAAApwbXRBc3NldElkCAUAAAANJHQwMTc4MDUxNzg4MAAAAAJfMgoBAAAADWNhbGN1bGF0ZUZlZXMAAAACAAAACXRva2VuRnJvbQAAAAd0b2tlblRvBAAAABBhbW91bnRXaXRob3V0RmVlCQAAawAAAAMFAAAAB3Rva2VuVG8FAAAACXBtdEFtb3VudAkAAGQAAAACBQAAAAlwbXRBbW91bnQFAAAACXRva2VuRnJvbQQAAAANYW1vdW50V2l0aEZlZQkAAGsAAAADBQAAABBhbW91bnRXaXRob3V0RmVlCQAAZQAAAAIFAAAAGGNvbW1pc3Npb25TY2FsZURlbGltaXRlcgUAAAAKY29tbWlzc2lvbgUAAAAYY29tbWlzc2lvblNjYWxlRGVsaW1pdGVyBAAAABBnb3Zlcm5hbmNlUmV3YXJkCQAAawAAAAMFAAAAEGFtb3VudFdpdGhvdXRGZWUFAAAAFGNvbW1pc3Npb25Hb3Zlcm5hbmNlBQAAABhjb21taXNzaW9uU2NhbGVEZWxpbWl0ZXIDCQAAZgAAAAIFAAAAEm1pbkFtb3VudFRvUmVjZWl2ZQUAAAANYW1vdW50V2l0aEZlZQkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAB1DYWxjdWxhdGVkIGFtb3VudCB0byByZWNlaXZlIAkAAaQAAAABBQAAAA1hbW91bnRXaXRoRmVlAgAAACAgaXMgbGVzcyB0aGFuIHNwZWNpZmllZCBtaW5pbXVtIAkAAaQAAAABBQAAABJtaW5BbW91bnRUb1JlY2VpdmUJAAUVAAAAAwUAAAAQYW1vdW50V2l0aG91dEZlZQUAAAANYW1vdW50V2l0aEZlZQUAAAAQZ292ZXJuYW5jZVJld2FyZAMJAQAAAAEhAAAAAQUAAAAIaXNBY3RpdmUJAAACAAAAAQIAAAAfREFwcCBpcyBpbmFjdGl2ZSBhdCB0aGlzIG1vbWVudAMDCQAAAAAAAAIFAAAACGJhbGFuY2VBAAAAAAAAAAAABgkAAAAAAAACBQAAAAhiYWxhbmNlQgAAAAAAAAAAAAkAAAIAAAABAgAAACBDYW4ndCBleGNoYW5nZSB3aXRoIHplcm8gYmFsYW5jZQMJAABnAAAAAgAAAAAAAAAAAAUAAAASbWluQW1vdW50VG9SZWNlaXZlCQAAAgAAAAEJAAEsAAAAAgIAAAA0TWluaW1hbCBhbW91bnQgdG8gcmVjZWl2ZSBtdXN0IGJlIHBvc2l0aXZlLiBBY3R1YWw6IAkAAaQAAAABBQAAABJtaW5BbW91bnRUb1JlY2VpdmUDCQEAAAACIT0AAAACCQABkAAAAAEIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAABCQAAAgAAAAECAAAAHU9uZSBhdHRhY2hlZCBwYXltZW50IGV4cGVjdGVkAwkBAAAAASEAAAABBQAAABBoYXNFbm91Z2hCYWxhbmNlCQAETgAAAAIJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyBQAAAAlwbXRBbW91bnQFAAAACnBtdEFzc2V0SWQFAAAAA25pbAkBAAAAEXN1c3BlbmRTdXNwaWNpb3VzAAAAAAMJAAAAAAAAAgUAAAAKcG10QXNzZXRJZAUAAAAIYXNzZXRJZEEEAAAAC2Fzc2V0SWRTZW5kBQAAAAhhc3NldElkQgQAAAANJHQwMTkxNTQxOTI0NQkBAAAADWNhbGN1bGF0ZUZlZXMAAAACBQAAAAhiYWxhbmNlQQUAAAAIYmFsYW5jZUIEAAAAEGFtb3VudFdpdGhvdXRGZWUIBQAAAA0kdDAxOTE1NDE5MjQ1AAAAAl8xBAAAAA1hbW91bnRXaXRoRmVlCAUAAAANJHQwMTkxNTQxOTI0NQAAAAJfMgQAAAAQZ292ZXJuYW5jZVJld2FyZAgFAAAADSR0MDE5MTU0MTkyNDUAAAACXzMEAAAAC25ld0JhbGFuY2VBCQAAZAAAAAIFAAAACGJhbGFuY2VBBQAAAAlwbXRBbW91bnQEAAAAC25ld0JhbGFuY2VCCQAAZQAAAAIJAABlAAAAAgUAAAAIYmFsYW5jZUIFAAAADWFtb3VudFdpdGhGZWUFAAAAEGdvdmVybmFuY2VSZXdhcmQDAwMJAAAAAAAAAgUAAAAIYXNzZXRJZEEFAAAABFVTRE4JAABnAAAAAgUAAAAQc3Rha2VkQW1vdW50VVNETgUAAAALbmV3QmFsYW5jZUEHBgMJAAAAAAAAAgUAAAAIYXNzZXRJZEIFAAAABFVTRE4JAABnAAAAAgUAAAAQc3Rha2VkQW1vdW50VVNETgUAAAALbmV3QmFsYW5jZUIHCQEAAAAhdGhyb3dJbnN1ZmZpY2llbnRBdmFpbGFibGVCYWxhbmNlAAAAAwUAAAANYW1vdW50V2l0aEZlZQUAAAARYXZhaWxhYmxlQmFsYW5jZUIFAAAACmFzc2V0TmFtZUIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAC2tleUJhbGFuY2VBBQAAAAtuZXdCYWxhbmNlQQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAALa2V5QmFsYW5jZUIFAAAAC25ld0JhbGFuY2VCCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAANYW1vdW50V2l0aEZlZQUAAAALYXNzZXRJZFNlbmQJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAANd2FsbGV0QWRkcmVzcwUAAAAQZ292ZXJuYW5jZVJld2FyZAUAAAALYXNzZXRJZFNlbmQFAAAAA25pbAMJAAAAAAAAAgUAAAAKcG10QXNzZXRJZAUAAAAIYXNzZXRJZEIEAAAAC2Fzc2V0SWRTZW5kBQAAAAhhc3NldElkQQQAAAANJHQwMjAxMTQyMDIwNQkBAAAADWNhbGN1bGF0ZUZlZXMAAAACBQAAAAhiYWxhbmNlQgUAAAAIYmFsYW5jZUEEAAAAEGFtb3VudFdpdGhvdXRGZWUIBQAAAA0kdDAyMDExNDIwMjA1AAAAAl8xBAAAAA1hbW91bnRXaXRoRmVlCAUAAAANJHQwMjAxMTQyMDIwNQAAAAJfMgQAAAAQZ292ZXJuYW5jZVJld2FyZAgFAAAADSR0MDIwMTE0MjAyMDUAAAACXzMEAAAAC25ld0JhbGFuY2VBCQAAZQAAAAIJAABlAAAAAgUAAAAIYmFsYW5jZUEFAAAADWFtb3VudFdpdGhGZWUFAAAAEGdvdmVybmFuY2VSZXdhcmQEAAAAC25ld0JhbGFuY2VCCQAAZAAAAAIFAAAACGJhbGFuY2VCBQAAAAlwbXRBbW91bnQDAwMJAAAAAAAAAgUAAAAIYXNzZXRJZEEFAAAABFVTRE4JAABnAAAAAgUAAAAQc3Rha2VkQW1vdW50VVNETgUAAAALbmV3QmFsYW5jZUEHBgMJAAAAAAAAAgUAAAAIYXNzZXRJZEIFAAAABFVTRE4JAABnAAAAAgUAAAAQc3Rha2VkQW1vdW50VVNETgUAAAALbmV3QmFsYW5jZUIHCQEAAAAhdGhyb3dJbnN1ZmZpY2llbnRBdmFpbGFibGVCYWxhbmNlAAAAAwUAAAANYW1vdW50V2l0aEZlZQUAAAARYXZhaWxhYmxlQmFsYW5jZUEFAAAACmFzc2V0TmFtZUEJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAC2tleUJhbGFuY2VBBQAAAAtuZXdCYWxhbmNlQQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAALa2V5QmFsYW5jZUIFAAAAC25ld0JhbGFuY2VCCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAANYW1vdW50V2l0aEZlZQUAAAALYXNzZXRJZFNlbmQJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAANd2FsbGV0QWRkcmVzcwUAAAAQZ292ZXJuYW5jZVJld2FyZAUAAAALYXNzZXRJZFNlbmQFAAAAA25pbAkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAACRJbmNvcnJlY3QgYXNzZXQgYXR0YWNoZWQuIEV4cGVjdGVkOiAFAAAAC3N0ckFzc2V0SWRBAgAAAAQgb3IgBQAAAAtzdHJBc3NldElkQgAAAAFpAQAAAAhzaHV0ZG93bgAAAAADCQEAAAABIQAAAAEFAAAACGlzQWN0aXZlCQAAAgAAAAEJAAEsAAAAAgIAAAAiREFwcCBpcyBhbHJlYWR5IHN1c3BlbmRlZC4gQ2F1c2U6IAkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABB0AAAACBQAAAAR0aGlzBQAAAAhrZXlDYXVzZQIAAAAadGhlIGNhdXNlIHdhc24ndCBzcGVjaWZpZWQDCQEAAAABIQAAAAEJAQAAAA9jb250YWluc0VsZW1lbnQAAAACCQAETAAAAAIFAAAADGFkbWluUHViS2V5MQkABEwAAAACBQAAAAxhZG1pblB1YktleTIJAARMAAAAAgUAAAAMYWRtaW5QdWJLZXkzCQAETAAAAAIFAAAAFGFkbWluUHViS2V5U3RhcnRTdG9wBQAAAANuaWwIBQAAAAFpAAAAD2NhbGxlclB1YmxpY0tleQkAAAIAAAABAgAAACFPbmx5IGFkbWluIGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24JAQAAAAdzdXNwZW5kAAAAAQIAAAAPUGF1c2VkIGJ5IGFkbWluAAAAAWkBAAAACGFjdGl2YXRlAAAAAAMFAAAACGlzQWN0aXZlCQAAAgAAAAECAAAAFkRBcHAgaXMgYWxyZWFkeSBhY3RpdmUDCQEAAAABIQAAAAEJAQAAAA9jb250YWluc0VsZW1lbnQAAAACCQAETAAAAAIFAAAADGFkbWluUHViS2V5MQkABEwAAAACBQAAAAxhZG1pblB1YktleTIJAARMAAAAAgUAAAAMYWRtaW5QdWJLZXkzCQAETAAAAAIFAAAAFGFkbWluUHViS2V5U3RhcnRTdG9wBQAAAANuaWwIBQAAAAFpAAAAD2NhbGxlclB1YmxpY0tleQkAAAIAAAABAgAAACFPbmx5IGFkbWluIGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24JAARMAAAAAgkBAAAADEJvb2xlYW5FbnRyeQAAAAIFAAAACWtleUFjdGl2ZQYJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQUAAAAIa2V5Q2F1c2UFAAAAA25pbAAAAAFpAQAAABl0YWtlSW50b0FjY291bnRFeHRyYUZ1bmRzAAAAAQAAAAthbW91bnRMZWF2ZQQAAAAddW5jb3VudGFibGVBbW91bnRFbnJvbGxBc3NldEEJAABlAAAAAgUAAAAZYWNjb3VudEJhbGFuY2VXaXRoU3Rha2VkQQUAAAAIYmFsYW5jZUEEAAAAHXVuY291bnRhYmxlQW1vdW50RW5yb2xsQXNzZXRCCQAAZQAAAAIFAAAAGWFjY291bnRCYWxhbmNlV2l0aFN0YWtlZEIFAAAACGJhbGFuY2VCBAAAAA1hbW91bnRFbnJvbGxBCQAAZQAAAAIFAAAAHXVuY291bnRhYmxlQW1vdW50RW5yb2xsQXNzZXRBAwkAAAAAAAACBQAAAAhhc3NldElkQQUAAAAEdW5pdAUAAAALYW1vdW50TGVhdmUAAAAAAAAAAAAEAAAADWFtb3VudEVucm9sbEIJAABlAAAAAgUAAAAddW5jb3VudGFibGVBbW91bnRFbnJvbGxBc3NldEIDCQAAAAAAAAIFAAAACGFzc2V0SWRCBQAAAAR1bml0BQAAAAthbW91bnRMZWF2ZQAAAAAAAAAAAAMJAQAAAAEhAAAAAQUAAAAIaXNBY3RpdmUJAAACAAAAAQIAAAAfREFwcCBpcyBpbmFjdGl2ZSBhdCB0aGlzIG1vbWVudAMJAQAAAAIhPQAAAAIIBQAAAAFpAAAABmNhbGxlcgUAAAAEdGhpcwkAAAIAAAABAgAAACtPbmx5IHRoZSBEQXBwIGl0c2VsZiBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uAwkAAGYAAAACAAAAAAAAAAAABQAAAAthbW91bnRMZWF2ZQkAAAIAAAABCQABLAAAAAICAAAAM0FyZ3VtZW50ICdhbW91bnRMZWF2ZScgY2Fubm90IGJlIG5lZ2F0aXZlLiBBY3R1YWw6IAkAAaQAAAABBQAAAAthbW91bnRMZWF2ZQMDCQAAZgAAAAIAAAAAAAAAAAAFAAAAHXVuY291bnRhYmxlQW1vdW50RW5yb2xsQXNzZXRBBgkAAGYAAAACAAAAAAAAAAAABQAAAB11bmNvdW50YWJsZUFtb3VudEVucm9sbEFzc2V0QgkBAAAAB3N1c3BlbmQAAAABAgAAABZFbnJvbGwgYW1vdW50IG5lZ2F0aXZlAwMJAABmAAAAAgAAAAAAAAAAAAUAAAANYW1vdW50RW5y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", "height": 1621989, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: H2KR9fy8hox29uNCgEcJZjhCeJYHgE7PHCrTKhhFmndp Next: Gp1B9iArShJ62KJUTrSrA5H9GNXnr9qeVMJ8fTLxe7in Diff:
OldNewDifferences
1515
1616 let g = "B_asset_balance"
1717
18-let h = "share_asset_id"
18+let h = "A_asset_init"
1919
20-let i = "share_asset_supply"
20+let i = "B_asset_init"
2121
22-let j = "commission"
22+let j = "share_asset_id"
2323
24-let k = "commission_scale_delimiter"
24+let k = "share_asset_supply"
2525
26-let l = "shutdown_cause"
26+let l = "commission"
2727
28-let m = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
28+let m = "commission_scale_delimiter"
2929
30-let n = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
30+let n = "shutdown_cause"
3131
32-let o = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
32+let o = "first_harvest"
3333
34-let p = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
34+let p = "first_harvest_height"
3535
36-let q = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
36+let q = "share_limit_on_first_harvest"
3737
38-let r = Address(base58'3NAGTtZz6WpupSN89NZD5rMZwwziZEg4Kx4')
38+let r = "base_period"
3939
40-let s = Address(base58'3N6q7sCGSSLBUXDdjBdYGTJbZGZfhhh8cNg')
40+let s = "period_length"
4141
42-let t = base58'8UrfDVd5GreeUwm7uPk7eYz1eMv376kzR52C6sANPkwS'
42+let t = "start_height"
4343
44-let u = base58'36mg8NZTaFRDygiVwb8uBnLR51hetJruUCZcxhaVcHj9'
44+let u = "first_harvest_height"
4545
46-let v = base58'2HAJrwa8q4SxBx9cHYaBTQdBjdk5wwqdof7ccpAx2uhZ'
46+let v = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
4747
48-let w = Address(base58'3N3g1MVp6DXyfqhq8sMPA6CRRkTTPtBsZeh')
48+let w = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
4949
50-let x = Address(base58'3N95taAsiWcVMmXdVShZ2ann6MAboXrFT1b')
50+let x = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
5151
52-let y = 270000
52+let y = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
5353
54-let z = getBooleanValue(this, c)
54+let z = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
5555
56-let A = getStringValue(this, d)
56+let A = base58'5CqqMkmtXXt35KRH9LdWA3ap6TffPvTT5SHQzYrVFbBw'
5757
58-let B = getStringValue(this, e)
58+let B = Address(base58'3NAGTtZz6WpupSN89NZD5rMZwwziZEg4Kx4')
5959
60-let C = if ((A == "WAVES"))
60+let C = Address(base58'3MrJgdL1GniipErHy44YF9idzLaUL2iX5DQ')
61+
62+let D = Address(base58'3N6q7sCGSSLBUXDdjBdYGTJbZGZfhhh8cNg')
63+
64+let E = Address(base58'3N3g1MVp6DXyfqhq8sMPA6CRRkTTPtBsZeh')
65+
66+let F = valueOrErrorMessage(getInteger(C, r), "Empty kBasePeriod")
67+
68+let G = valueOrErrorMessage(getInteger(C, t), "Empty kStartHeight")
69+
70+let H = valueOrErrorMessage(getInteger(C, s), "Empty kPeriodLength")
71+
72+let I = ((F + ((height - G) / H)) + 3)
73+
74+let J = base58'8UrfDVd5GreeUwm7uPk7eYz1eMv376kzR52C6sANPkwS'
75+
76+let K = 270000
77+
78+let L = getBooleanValue(this, c)
79+
80+let M = getStringValue(this, d)
81+
82+let N = getStringValue(this, e)
83+
84+let O = if ((M == "WAVES"))
6185 then unit
62- else fromBase58String(A)
86+ else fromBase58String(M)
6387
64-let D = if ((B == "WAVES"))
88+let P = if ((N == "WAVES"))
6589 then unit
66- else fromBase58String(B)
90+ else fromBase58String(N)
6791
68-let E = {
69- let F = C
70- if ($isInstanceOf(F, "ByteVector"))
92+let Q = {
93+ let R = O
94+ if ($isInstanceOf(R, "ByteVector"))
7195 then {
72- let G = F
73- value(assetInfo(G)).name
96+ let S = R
97+ value(assetInfo(S)).name
7498 }
75- else if ($isInstanceOf(F, "Unit"))
99+ else if ($isInstanceOf(R, "Unit"))
76100 then {
77- let H = F
101+ let T = R
78102 "WAVES"
79103 }
80104 else throw("Match error")
81105 }
82106
83-let I = {
84- let F = D
85- if ($isInstanceOf(F, "ByteVector"))
107+let U = {
108+ let R = P
109+ if ($isInstanceOf(R, "ByteVector"))
86110 then {
87- let G = F
88- value(assetInfo(G)).name
111+ let S = R
112+ value(assetInfo(S)).name
89113 }
90- else if ($isInstanceOf(F, "Unit"))
114+ else if ($isInstanceOf(R, "Unit"))
91115 then {
92- let H = F
116+ let T = R
93117 "WAVES"
94118 }
95119 else throw("Match error")
96120 }
97121
98-let J = getIntegerValue(this, f)
122+let V = getIntegerValue(this, f)
99123
100-let K = getIntegerValue(this, g)
124+let W = getIntegerValue(this, g)
101125
102-let L = fromBase58String(getStringValue(this, h))
126+let X = fromBase58String(getStringValue(this, j))
103127
104-let M = getIntegerValue(this, i)
128+let Y = getIntegerValue(this, k)
105129
106-let N = 3000
130+let Z = 3000
107131
108-let O = 1200
132+let aa = 1200
109133
110-let P = 1000000
134+let ab = 1000000
111135
112-let Q = 1000
136+let ac = 1000
113137
114-let R = 100000000
138+let ad = 100000000
115139
116-let S = 1000
140+let ae = 1000
117141
118-let T = 8
142+let af = 8
119143
120-func U (V) = {
121- let F = V
122- if ($isInstanceOf(F, "ByteVector"))
144+func ag (ah) = {
145+ let R = ah
146+ if ($isInstanceOf(R, "ByteVector"))
123147 then {
124- let G = F
125- assetBalance(this, G)
148+ let S = R
149+ assetBalance(this, S)
126150 }
127- else if ($isInstanceOf(F, "Unit"))
151+ else if ($isInstanceOf(R, "Unit"))
128152 then {
129- let H = F
153+ let T = R
130154 wavesBalance(this).available
131155 }
132156 else throw("Match error")
133157 }
134158
135159
136-func W (X,Y) = {
137- let Z = {
138- let F = getInteger(X, ((("rpd_balance_" + Y) + "_") + toString(this)))
139- if ($isInstanceOf(F, "Int"))
160+let ai = {
161+ let R = getInteger(D, ((("rpd_balance_" + toBase58String(J)) + "_") + toString(this)))
162+ if ($isInstanceOf(R, "Int"))
163+ then {
164+ let aj = R
165+ aj
166+ }
167+ else if ($isInstanceOf(R, "Unit"))
140168 then {
141- let aa = F
142- aa
169+ let ak = R
170+ 0
143171 }
144- else if ($isInstanceOf(F, "Unit"))
145- then {
146- let ab = F
147- 0
148- }
149- else throw("Match error")
150- }
151- Z
172+ else throw("Match error")
152173 }
153174
175+let al = getIntegerValue(this, h)
154176
155-let ac = W(s, A)
177+let am = getIntegerValue(this, i)
156178
157-let ad = W(s, B)
179+let an = (V - (if ((O == J))
180+ then ai
181+ else 0))
158182
159-let ae = (J - ac)
183+let ao = (W - (if ((P == J))
184+ then ai
185+ else 0))
160186
161-let af = (K - ad)
187+let ap = (ag(O) + (if ((O == J))
188+ then ai
189+ else 0))
162190
163-let ag = (U(C) + ac)
191+let aq = (ag(P) + (if ((P == J))
192+ then ai
193+ else 0))
164194
165-let ah = (U(D) + ad)
166-
167-let ai = if ((ag >= J))
168- then (ah >= K)
195+let ar = if ((ap >= V))
196+ then (aq >= W)
169197 else false
170198
171-func aj (V) = {
172- let F = V
173- if ($isInstanceOf(F, "ByteVector"))
199+func as (ah) = {
200+ let R = ah
201+ if ($isInstanceOf(R, "ByteVector"))
174202 then {
175- let G = F
176- let ak = toBase58String(G)
177- let al = valueOrErrorMessage(assetInfo(G), (("Asset " + ak) + " doesn't exist"))
178- $Tuple3(ak, al.name, al.decimals)
203+ let S = R
204+ let at = toBase58String(S)
205+ let au = valueOrErrorMessage(assetInfo(S), (("Asset " + at) + " doesn't exist"))
206+ $Tuple3(at, au.name, au.decimals)
179207 }
180- else if ($isInstanceOf(F, "Unit"))
208+ else if ($isInstanceOf(R, "Unit"))
181209 then {
182- let H = F
210+ let T = R
183211 $Tuple3("WAVES", "WAVES", 8)
184212 }
185213 else throw("Match error")
186214 }
187215
188216
189-func am (an) = [BooleanEntry(c, false), StringEntry(l, an)]
217+func av (aw) = if ((aw == "WAVES"))
218+ then $Tuple3("WAVES", "WAVES", 8)
219+ else {
220+ let at = aw
221+ let S = fromBase58String(aw)
222+ let au = valueOrErrorMessage(assetInfo(S), (("Asset " + at) + " doesn't exist"))
223+ $Tuple3(at, au.name, au.decimals)
224+ }
190225
191226
192-func ao () = {
193- let ap = if ((ac > 0))
194- then 1
195- else 0
196- let aq = if ((ad > 0))
197- then 1
198- else 0
199- (ap + aq)
200- }
227+func ax (ay) = [BooleanEntry(c, false), StringEntry(n, ay)]
201228
202229
203-func ar (as,V) = if ((V == t))
230+func az (aA,ah) = if ((ah == J))
204231 then {
205- let at = (as - (ao() * y))
206- if ((0 >= at))
207- then throw((((("Insufficient amount " + toString(as)) + " to deduct staking fee ") + toString(y)) + " USD-N"))
208- else at
232+ let aB = (aA - K)
233+ if ((0 >= aB))
234+ then throw((((("Insufficient amount " + toString(aA)) + " to deduct staking fee ") + toString(K)) + " USD-N"))
235+ else aB
209236 }
210- else as
237+ else aA
211238
212239
213-func au (as,av,aw) = throw((((((((("Insufficient DApp balance to pay " + toString(as)) + " ") + aw) + " due to staking. Available: ") + toString(av)) + " ") + aw) + ". Please contact support in Telegram: https://t.me/swopfisupport"))
240+func aC (aA,aD,aE) = throw((((((((("Insufficient DApp balance to pay " + toString(aA)) + " ") + aE) + " due to staking. Available: ") + toString(aD)) + " ") + aE) + ". Please contact support in Telegram: https://t.me/swopfisupport"))
214241
215242
216-func ax (ay,az) = throw((((((((((((((((("Insufficient DApp balance to pay " + toString(ay)) + " ") + E) + " and ") + toString(az)) + " ") + I) + " due to staking. Available: ") + toString(ae)) + " ") + E) + " and ") + toString(af)) + " ") + I) + ". Please contact support in Telegram: https://t.me/swopfisupport"))
243+func aF (aG,aH) = throw((((((((((((((((("Insufficient DApp balance to pay " + toString(aG)) + " ") + Q) + " and ") + toString(aH)) + " ") + U) + " due to staking. Available: ") + toString(an)) + " ") + Q) + " and ") + toString(ao)) + " ") + U) + ". Please contact support in Telegram: https://t.me/swopfisupport"))
217244
218245
219-func aA () = am(((((((((((((((("Suspicious state. Actual balances: " + toString(ag)) + " ") + E) + ", ") + toString(ah)) + " ") + I) + ". State: ") + toString(J)) + " ") + E) + ", ") + toString(K)) + " ") + I))
246+func aI () = ax(((((((((((((((("Suspicious state. Actual balances: " + toString(ap)) + " ") + Q) + ", ") + toString(aq)) + " ") + U) + ". State: ") + toString(V)) + " ") + Q) + ", ") + toString(W)) + " ") + U))
220247
221248
222-@Callable(aB)
223-func init () = {
224- let aC = $Tuple2(aB.payments[0].amount, aB.payments[0].assetId)
225- let aD = aC._1
226- let aE = aC._2
227- let aF = $Tuple2(aB.payments[1].amount, aB.payments[1].assetId)
228- let aG = aF._1
229- let aH = aF._2
230- let aI = aj(aE)
231- let aJ = aI._1
232- let aK = aI._2
233- let aL = aI._3
234- let aM = aj(aH)
235- let aN = aM._1
236- let aO = aM._2
237- let aP = aM._3
238- if (isDefined(getBoolean(this, c)))
239- then throw("DApp is already active")
240- else if ((aE == aH))
241- then throw("Assets must be different")
242- else {
243- let aQ = ((("s" + take(aK, 7)) + "_") + take(aO, 7))
244- let aR = ((((("ShareToken of SwopFi protocol for " + aK) + " and ") + aO) + " at address ") + toString(this))
245- let aS = ((aL + aP) / 2)
246- let aT = fraction(pow(aD, aL, 5, 1, aL, HALFDOWN), pow(aG, aP, 5, 1, aP, HALFDOWN), pow(10, 0, aS, 0, 0, HALFDOWN))
247- let aU = Issue(aQ, aR, aT, aS, true)
248- let aV = calculateAssetId(aU)
249-[StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, aJ), StringEntry(e, aN), IntegerEntry(f, aD), IntegerEntry(g, aG), IntegerEntry(j, N), IntegerEntry(k, P), aU, StringEntry(h, toBase58String(aV)), IntegerEntry(i, aT), ScriptTransfer(aB.caller, aT, aV)]
250- }
249+@Callable(aJ)
250+func init (aK) = {
251+ let aL = $Tuple2(aJ.payments[0].amount, aJ.payments[0].assetId)
252+ let aM = aL._1
253+ let aN = aL._2
254+ let aO = $Tuple2(aJ.payments[1].amount, aJ.payments[1].assetId)
255+ let aP = aO._1
256+ let aQ = aO._2
257+ let aR = as(aN)
258+ let aS = aR._1
259+ let aT = aR._2
260+ let aU = aR._3
261+ let aV = as(aQ)
262+ let aW = aV._1
263+ let aX = aV._2
264+ let aY = aV._3
265+ if (!(containsElement([v, w, x, z], aJ.callerPublicKey)))
266+ then throw("Only admin can call this function")
267+ else if (isDefined(getBoolean(this, c)))
268+ then throw("DApp is already active")
269+ else if ((aN == aQ))
270+ then throw("Assets must be different")
271+ else {
272+ let aZ = ((("s" + take(aT, 7)) + "_") + take(aX, 7))
273+ let ba = ((((("ShareToken of SwopFi protocol for " + aT) + " and ") + aX) + " at address ") + toString(this))
274+ let bb = ((aU + aY) / 2)
275+ let bc = fraction(pow(aM, aU, 5, 1, aU, HALFDOWN), pow(aP, aY, 5, 1, aY, HALFDOWN), pow(10, 0, bb, 0, 0, HALFDOWN))
276+ let bd = Issue(aZ, ba, bc, bb, true)
277+ let be = calculateAssetId(bd)
278+ let bf = [StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, aS), StringEntry(e, aW), IntegerEntry(f, aM), IntegerEntry(g, aP), IntegerEntry(l, Z), IntegerEntry(m, ab), bd, StringEntry(j, toBase58String(be)), IntegerEntry(k, bc), ScriptTransfer(aJ.caller, bc, be)]
279+ if (aK)
280+ then (bf ++ [BooleanEntry(o, aK), IntegerEntry(p, (G + (I * H)))])
281+ else bf
282+ }
251283 }
252284
253285
254286
255-@Callable(aB)
256-func replenishWithTwoTokens (aW) = {
257- let aE = aB.payments[0].assetId
258- let aH = aB.payments[1].assetId
259- let aD = ar(aB.payments[0].amount, aE)
260- let aG = ar(aB.payments[1].amount, aH)
261- let aX = fraction(fraction(J, R, aD), Q, fraction(K, R, aG))
262- let aY = fraction(aD, R, J)
263- let aZ = fraction(aG, R, K)
264- let ba = fraction(min([aY, aZ]), M, R)
265- if (!(z))
266- then throw("DApp is inactive at this moment")
267- else if (if ((0 > aW))
268- then true
269- else (aW > S))
270- then throw(((("Slippage tolerance must be between 0 and " + toString(S)) + " inclusively. Actual: ") + toString(aW)))
271- else if ((size(aB.payments) != 2))
272- then throw("Two attached assets expected")
273- else if (if ((aE != C))
274- then true
275- else (aH != D))
276- then throw(((("Incorrect assets attached. Expected: " + A) + " and ") + B))
277- else if (if ((((Q * (S - aW)) / S) > aX))
278- then true
279- else (aX > ((Q * (S + aW)) / S)))
280- then throw("Incorrect assets amount: amounts must have the contract ratio")
281- else if ((ba == 0))
282- then throw("Too small amount to replenish")
283- else if (!(ai))
284- then ([ScriptTransfer(aB.caller, aD, aE), ScriptTransfer(aB.caller, aG, aH)] ++ aA())
285- else [IntegerEntry(f, (J + aD)), IntegerEntry(g, (K + aG)), IntegerEntry(i, (M + ba)), Reissue(L, ba, true), ScriptTransfer(aB.caller, ba, L)]
287+@Callable(aJ)
288+func initWithInitRatio (bg,bh,M,N,aK) = {
289+ let bi = av(M)
290+ let aS = bi._1
291+ let aT = bi._2
292+ let aU = bi._3
293+ let bj = av(N)
294+ let aW = bj._1
295+ let aX = bj._2
296+ let aY = bj._3
297+ if (!(containsElement([v, w, x, z], aJ.callerPublicKey)))
298+ then throw("Only admin can call this function")
299+ else if (isDefined(getBoolean(this, c)))
300+ then throw("DApp is already active")
301+ else if ((M == N))
302+ then throw("Assets must be different")
303+ else {
304+ let aZ = ((("s" + take(aT, 7)) + "_") + take(aX, 7))
305+ let ba = ((((("ShareToken of SwopFi protocol for " + aT) + " and ") + aX) + " at address ") + toString(this))
306+ let bb = ((aU + aY) / 2)
307+ let bc = 0
308+ let bd = Issue(aZ, ba, bc, bb, true)
309+ let be = calculateAssetId(bd)
310+ let bf = [StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, aS), StringEntry(e, aW), IntegerEntry(h, bg), IntegerEntry(i, bh), IntegerEntry(f, 0), IntegerEntry(g, 0), IntegerEntry(l, Z), IntegerEntry(m, ab), bd, StringEntry(j, toBase58String(be)), IntegerEntry(k, bc)]
311+ if (aK)
312+ then (bf ++ [BooleanEntry(o, aK), IntegerEntry(p, (G + (I * H)))])
313+ else bf
314+ }
286315 }
287316
288317
289318
290-@Callable(aB)
291-func withdraw () = {
292- let bb = $Tuple2(aB.payments[0].amount, aB.payments[0].assetId)
293- let bc = bb._1
294- let bd = bb._2
295- let be = ar(fraction(bc, J, M), C)
296- let bf = ar(fraction(bc, K, M), D)
297- if (!(z))
298- then throw("DApp is inactive at this moment")
299- else if ((size(aB.payments) != 1))
300- then throw("One attached payment expected")
301- else if ((bd != L))
302- then throw(("Incorrect asset attached. Expected: " + toBase58String(L)))
303- else if (!(ai))
304- then ([ScriptTransfer(aB.caller, bc, bd)] ++ aA())
305- else if (if ((be > ae))
306- then true
307- else (bf > af))
308- then ax(be, bf)
309- else [IntegerEntry(f, (J - be)), IntegerEntry(g, (K - bf)), IntegerEntry(i, (M - bc)), Burn(L, bc), ScriptTransfer(aB.caller, be, C), ScriptTransfer(aB.caller, bf, D)]
319+@Callable(aJ)
320+func keepLimitForFirstHarvest (bk) = if (!(L))
321+ then throw("DApp is inactive at this moment")
322+ else if (!(containsElement([v, w, x, z], aJ.callerPublicKey)))
323+ then throw("Only admin can call this function")
324+ else [IntegerEntry(q, bk)]
325+
326+
327+
328+@Callable(aJ)
329+func replenishWithTwoTokens (bl) = {
330+ let aN = aJ.payments[0].assetId
331+ let aQ = aJ.payments[1].assetId
332+ let aM = az(aJ.payments[0].amount, aN)
333+ let aP = az(aJ.payments[1].amount, aQ)
334+ if (if ((V == 0))
335+ then (W == 0)
336+ else false)
337+ then {
338+ let bm = as(aN)
339+ let aS = bm._1
340+ let aT = bm._2
341+ let aU = bm._3
342+ let bn = as(aQ)
343+ let aW = bn._1
344+ let aX = bn._2
345+ let aY = bn._3
346+ let bo = fraction(fraction(al, ad, aM), ac, fraction(am, ad, aP))
347+ if ((aN == aQ))
348+ then throw("Assets must be different")
349+ else {
350+ let bb = ((aU + aY) / 2)
351+ let bc = fraction(pow(aM, aU, 5, 1, aU, HALFDOWN), pow(aP, aY, 5, 1, aY, HALFDOWN), pow(10, 0, bb, 0, 0, HALFDOWN))
352+ if (!(L))
353+ then throw("DApp is inactive at this moment")
354+ else if (if ((0 > bl))
355+ then true
356+ else (bl > ae))
357+ then throw(((("Slippage tolerance must be between 0 and " + toString(ae)) + " inclusively. Actual: ") + toString(bl)))
358+ else if ((size(aJ.payments) != 2))
359+ then throw("Two attached assets expected")
360+ else if (if ((((ac * (ae - bl)) / ae) > bo))
361+ then true
362+ else (bo > ((ac * (ae + bl)) / ae)))
363+ then throw("Incorrect assets amount: amounts must have the contract ratio")
364+ else if (if ((aN != O))
365+ then true
366+ else (aQ != P))
367+ then throw(((("Incorrect assets attached. Expected: " + M) + " and ") + N))
368+ else if ((bc == 0))
369+ then throw("Too small amount to replenish")
370+ else if (!(ar))
371+ then ([ScriptTransfer(aJ.caller, aM, aN), ScriptTransfer(aJ.caller, aP, aQ)] ++ aI())
372+ else [Reissue(X, bc, true), IntegerEntry(f, aM), IntegerEntry(g, aP), IntegerEntry(k, bc), ScriptTransfer(aJ.caller, bc, X)]
373+ }
374+ }
375+ else {
376+ let bo = fraction(fraction(V, ad, aM), ac, fraction(W, ad, aP))
377+ let bp = fraction(aM, ad, V)
378+ let bq = fraction(aP, ad, W)
379+ let br = fraction(min([bp, bq]), Y, ad)
380+ if (!(L))
381+ then throw("DApp is inactive at this moment")
382+ else if (if ((0 > bl))
383+ then true
384+ else (bl > ae))
385+ then throw(((("Slippage tolerance must be between 0 and " + toString(ae)) + " inclusively. Actual: ") + toString(bl)))
386+ else if ((size(aJ.payments) != 2))
387+ then throw("Two attached assets expected")
388+ else if (if ((aN != O))
389+ then true
390+ else (aQ != P))
391+ then throw(((("Incorrect assets attached. Expected: " + M) + " and ") + N))
392+ else if (if ((((ac * (ae - bl)) / ae) > bo))
393+ then true
394+ else (bo > ((ac * (ae + bl)) / ae)))
395+ then throw("Incorrect assets amount: amounts must have the contract ratio")
396+ else if ((br == 0))
397+ then throw("Too small amount to replenish")
398+ else if (!(ar))
399+ then ([ScriptTransfer(aJ.caller, aM, aN), ScriptTransfer(aJ.caller, aP, aQ)] ++ aI())
400+ else [IntegerEntry(f, (V + aM)), IntegerEntry(g, (W + aP)), IntegerEntry(k, (Y + br)), Reissue(X, br, true), ScriptTransfer(aJ.caller, br, X)]
401+ }
310402 }
311403
312404
313405
314-@Callable(aB)
315-func exchange (bg) = {
316- let bh = $Tuple2(aB.payments[0].amount, aB.payments[0].assetId)
317- let bc = bh._1
318- let bd = bh._2
319- func bi (bj,bk) = {
320- let bl = fraction(bk, bc, (bc + bj))
321- let bm = fraction(bl, (P - N), P)
322- let bn = fraction(bl, O, P)
323- if ((bg > bm))
324- then throw(((("Calculated amount to receive " + toString(bm)) + " is less than specified minimum ") + toString(bg)))
325- else $Tuple3(bl, bm, bn)
326- }
327-
328- if (!(z))
406+@Callable(aJ)
407+func withdraw () = {
408+ let bs = $Tuple2(aJ.payments[0].amount, aJ.payments[0].assetId)
409+ let bt = bs._1
410+ let bu = bs._2
411+ let bv = az(fraction(bt, V, Y), O)
412+ let bw = az(fraction(bt, W, Y), P)
413+ if (!(L))
329414 then throw("DApp is inactive at this moment")
330- else if ((0 >= bg))
331- then throw(("Minimal amount to receive must be positive. Actual: " + toString(bg)))
332- else if ((size(aB.payments) != 1))
333- then throw("One attached payment expected")
334- else if (!(ai))
335- then ([ScriptTransfer(aB.caller, bc, bd)] ++ aA())
336- else if ((bd == C))
337- then {
338- let bo = D
339- let bp = bi(J, K)
340- let bl = bp._1
341- let bm = bp._2
342- let bn = bp._3
343- let bq = (J + bc)
344- let br = ((K - bm) - bn)
345- if (if ((ac >= bq))
346- then true
347- else (ad >= br))
348- then au(bm, af, I)
349- else [IntegerEntry(f, bq), IntegerEntry(g, br), ScriptTransfer(aB.caller, bm, bo), ScriptTransfer(r, bn, bo)]
350- }
351- else if ((bd == D))
352- then {
353- let bo = C
354- let bs = bi(K, J)
355- let bl = bs._1
356- let bm = bs._2
357- let bn = bs._3
358- let bq = ((J - bm) - bn)
359- let br = (K + bc)
360- if (if ((ac >= bq))
361- then true
362- else (ad >= br))
363- then au(bm, ae, E)
364- else [IntegerEntry(f, bq), IntegerEntry(g, br), ScriptTransfer(aB.caller, bm, bo), ScriptTransfer(r, bn, bo)]
365- }
366- else throw(((("Incorrect asset attached. Expected: " + A) + " or ") + B))
415+ else if ((size(aJ.payments) != 1))
416+ then throw("One attached payment expected")
417+ else if ((bu != X))
418+ then throw(("Incorrect asset attached. Expected: " + toBase58String(X)))
419+ else if (!(ar))
420+ then ([ScriptTransfer(aJ.caller, bt, bu)] ++ aI())
421+ else if (if ((bv > an))
422+ then true
423+ else (bw > ao))
424+ then aF(bv, bw)
425+ else [IntegerEntry(f, (V - bv)), IntegerEntry(g, (W - bw)), IntegerEntry(k, (Y - bt)), Burn(X, bt), ScriptTransfer(aJ.caller, bv, O), ScriptTransfer(aJ.caller, bw, P)]
367426 }
368427
369428
370429
371-@Callable(aB)
372-func shutdown () = if (!(z))
373- then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, l), "the cause wasn't specified")))
374- else if (!(containsElement([m, n, o, p], aB.callerPublicKey)))
375- then throw("Only admin can call this function")
376- else am("Paused by admin")
430+@Callable(aJ)
431+func exchange (bx) = {
432+ let by = $Tuple2(aJ.payments[0].amount, aJ.payments[0].assetId)
433+ let bt = by._1
434+ let bu = by._2
435+ func bz (bA,bB) = {
436+ let bC = fraction(bB, bt, (bt + bA))
437+ let bD = fraction(bC, (ab - Z), ab)
438+ let bE = fraction(bC, aa, ab)
439+ if ((bx > bD))
440+ then throw(((("Calculated amount to receive " + toString(bD)) + " is less than specified minimum ") + toString(bx)))
441+ else $Tuple3(bC, bD, bE)
442+ }
443+
444+ if (!(L))
445+ then throw("DApp is inactive at this moment")
446+ else if (if ((V == 0))
447+ then true
448+ else (W == 0))
449+ then throw("Can't exchange with zero balance")
450+ else if ((0 >= bx))
451+ then throw(("Minimal amount to receive must be positive. Actual: " + toString(bx)))
452+ else if ((size(aJ.payments) != 1))
453+ then throw("One attached payment expected")
454+ else if (!(ar))
455+ then ([ScriptTransfer(aJ.caller, bt, bu)] ++ aI())
456+ else if ((bu == O))
457+ then {
458+ let bF = P
459+ let bG = bz(V, W)
460+ let bC = bG._1
461+ let bD = bG._2
462+ let bE = bG._3
463+ let bH = (V + bt)
464+ let bI = ((W - bD) - bE)
465+ if (if (if ((O == J))
466+ then (ai >= bH)
467+ else false)
468+ then true
469+ else if ((P == J))
470+ then (ai >= bI)
471+ else false)
472+ then aC(bD, ao, U)
473+ else [IntegerEntry(f, bH), IntegerEntry(g, bI), ScriptTransfer(aJ.caller, bD, bF), ScriptTransfer(B, bE, bF)]
474+ }
475+ else if ((bu == P))
476+ then {
477+ let bF = O
478+ let bJ = bz(W, V)
479+ let bC = bJ._1
480+ let bD = bJ._2
481+ let bE = bJ._3
482+ let bH = ((V - bD) - bE)
483+ let bI = (W + bt)
484+ if (if (if ((O == J))
485+ then (ai >= bH)
486+ else false)
487+ then true
488+ else if ((P == J))
489+ then (ai >= bI)
490+ else false)
491+ then aC(bD, an, Q)
492+ else [IntegerEntry(f, bH), IntegerEntry(g, bI), ScriptTransfer(aJ.caller, bD, bF), ScriptTransfer(B, bE, bF)]
493+ }
494+ else throw(((("Incorrect asset attached. Expected: " + M) + " or ") + N))
495+ }
377496
378497
379498
380-@Callable(aB)
381-func activate () = if (z)
382- then throw("DApp is already active")
383- else if (!(containsElement([m, n, o, p], aB.callerPublicKey)))
499+@Callable(aJ)
500+func shutdown () = if (!(L))
501+ then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, n), "the cause wasn't specified")))
502+ else if (!(containsElement([v, w, x, y], aJ.callerPublicKey)))
384503 then throw("Only admin can call this function")
385- else [BooleanEntry(c, true), DeleteEntry(l)]
504+ else ax("Paused by admin")
386505
387506
388507
389-@Callable(aB)
390-func takeIntoAccountExtraFunds (bt) = {
391- let bu = (ag - J)
392- let bv = (ah - K)
393- let bw = (bu - (if ((C == unit))
394- then bt
508+@Callable(aJ)
509+func activate () = if (L)
510+ then throw("DApp is already active")
511+ else if (!(containsElement([v, w, x, y], aJ.callerPublicKey)))
512+ then throw("Only admin can call this function")
513+ else [BooleanEntry(c, true), DeleteEntry(n)]
514+
515+
516+
517+@Callable(aJ)
518+func takeIntoAccountExtraFunds (bK) = {
519+ let bL = (ap - V)
520+ let bM = (aq - W)
521+ let bN = (bL - (if ((O == unit))
522+ then bK
395523 else 0))
396- let bx = (bv - (if ((D == unit))
397- then bt
524+ let bO = (bM - (if ((P == unit))
525+ then bK
398526 else 0))
399- if (!(z))
527+ if (!(L))
400528 then throw("DApp is inactive at this moment")
401- else if ((aB.caller != this))
529+ else if ((aJ.caller != this))
402530 then throw("Only the DApp itself can call this function")
403- else if ((0 > bt))
404- then throw(("Argument 'amountLeave' cannot be negative. Actual: " + toString(bt)))
405- else if (if ((0 > bu))
531+ else if ((0 > bK))
532+ then throw(("Argument 'amountLeave' cannot be negative. Actual: " + toString(bK)))
533+ else if (if ((0 > bL))
406534 then true
407- else (0 > bv))
408- then am("Enroll amount negative")
409- else if (if ((0 > bw))
535+ else (0 > bM))
536+ then ax("Enroll amount negative")
537+ else if (if ((0 > bN))
410538 then true
411- else (0 > bx))
539+ else (0 > bO))
412540 then throw("Too large amountLeave")
413- else [IntegerEntry(f, (J + bw)), IntegerEntry(g, (K + bx)), IntegerEntry(("last_income_" + A), bw), IntegerEntry(("last_income_" + B), bx)]
541+ else [IntegerEntry(f, (V + bN)), IntegerEntry(g, (W + bO)), IntegerEntry(("last_income_" + M), bN), IntegerEntry(("last_income_" + N), bO)]
414542 }
415543
416544
417-@Verifier(by)
418-func bz () = {
419- let F = by
420- if ($isInstanceOf(F, "InvokeScriptTransaction"))
545+@Verifier(bP)
546+func bQ () = {
547+ let R = bP
548+ if ($isInstanceOf(R, "InvokeScriptTransaction"))
421549 then {
422- let bA = F
423- if (if (if (sigVerify(bA.bodyBytes, bA.proofs[0], q))
424- then (bA.dApp == s)
550+ let bR = R
551+ let bS = if ((bR.dApp == this))
552+ then (bR.function == "takeIntoAccountExtraFunds")
553+ else false
554+ let bT = if ((bR.dApp == D))
555+ then if (if (if ((bR.function == "lockNeutrino"))
556+ then (size(bR.payments) == 1)
557+ else false)
558+ then (bR.payments[0].assetId == J)
559+ else false)
560+ then true
561+ else if ((bR.function == "unlockNeutrino"))
562+ then (size(bR.payments) == 0)
563+ else false
564+ else false
565+ let bU = if (if (if ((bR.dApp == E))
566+ then (bR.function == "exchange")
567+ else false)
568+ then (O == J)
425569 else false)
426570 then true
427- else if (if (sigVerify(bA.bodyBytes, bA.proofs[0], q))
428- then (bA.function == "exchange")
429- else false)
430- then if (if (if (if ((C == u))
431- then (D == t)
432- else false)
433- then (bA.dApp == w)
434- else false)
435- then if ((bA.payments[0].assetId == unit))
436- then true
437- else (bA.payments[0].assetId == t)
438- else false)
439- then true
440- else if (if ((C == u))
441- then (D == v)
442- else false)
443- then if (if ((bA.dApp == x))
444- then (bA.payments[0].assetId == t)
445- else false)
446- then true
447- else if ((bA.dApp == w))
448- then if ((bA.payments[0].assetId == unit))
449- then true
450- else (bA.payments[0].assetId == t)
451- else false
452- else false
453- else false)
571+ else if ((P == J))
572+ then (bR.payments[0].assetId == J)
573+ else false
574+ let bV = if (if (if (sigVerify(bP.bodyBytes, bP.proofs[0], v))
454575 then true
455- else if (if (sigVerify(bA.bodyBytes, bA.proofs[0], q))
456- then (bA.dApp == this)
457- else false)
458- then (bA.function == "takeIntoAccountExtraFunds")
459- else false
576+ else sigVerify(bP.bodyBytes, bP.proofs[0], w))
577+ then true
578+ else sigVerify(bP.bodyBytes, bP.proofs[0], x))
579+ then true
580+ else sigVerify(bP.bodyBytes, bP.proofs[0], z)
581+ if (if (if (bS)
582+ then true
583+ else bT)
584+ then true
585+ else bU)
586+ then bV
587+ else false
460588 }
461589 else {
462- let bB = if (sigVerify(by.bodyBytes, by.proofs[0], m))
590+ let bW = if (sigVerify(bP.bodyBytes, bP.proofs[0], v))
463591 then 1
464592 else 0
465- let bC = if (sigVerify(by.bodyBytes, by.proofs[1], n))
593+ let bX = if (sigVerify(bP.bodyBytes, bP.proofs[1], w))
466594 then 1
467595 else 0
468- let bD = if (sigVerify(by.bodyBytes, by.proofs[2], o))
596+ let bY = if (sigVerify(bP.bodyBytes, bP.proofs[2], x))
469597 then 1
470598 else 0
471- (((bB + bC) + bD) >= 2)
599+ (((bW + bX) + bY) >= 2)
472600 }
473601 }
474602
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 4 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = "1.0.0"
55
66 let b = "version"
77
88 let c = "active"
99
1010 let d = "A_asset_id"
1111
1212 let e = "B_asset_id"
1313
1414 let f = "A_asset_balance"
1515
1616 let g = "B_asset_balance"
1717
18-let h = "share_asset_id"
18+let h = "A_asset_init"
1919
20-let i = "share_asset_supply"
20+let i = "B_asset_init"
2121
22-let j = "commission"
22+let j = "share_asset_id"
2323
24-let k = "commission_scale_delimiter"
24+let k = "share_asset_supply"
2525
26-let l = "shutdown_cause"
26+let l = "commission"
2727
28-let m = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
28+let m = "commission_scale_delimiter"
2929
30-let n = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
30+let n = "shutdown_cause"
3131
32-let o = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
32+let o = "first_harvest"
3333
34-let p = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
34+let p = "first_harvest_height"
3535
36-let q = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
36+let q = "share_limit_on_first_harvest"
3737
38-let r = Address(base58'3NAGTtZz6WpupSN89NZD5rMZwwziZEg4Kx4')
38+let r = "base_period"
3939
40-let s = Address(base58'3N6q7sCGSSLBUXDdjBdYGTJbZGZfhhh8cNg')
40+let s = "period_length"
4141
42-let t = base58'8UrfDVd5GreeUwm7uPk7eYz1eMv376kzR52C6sANPkwS'
42+let t = "start_height"
4343
44-let u = base58'36mg8NZTaFRDygiVwb8uBnLR51hetJruUCZcxhaVcHj9'
44+let u = "first_harvest_height"
4545
46-let v = base58'2HAJrwa8q4SxBx9cHYaBTQdBjdk5wwqdof7ccpAx2uhZ'
46+let v = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
4747
48-let w = Address(base58'3N3g1MVp6DXyfqhq8sMPA6CRRkTTPtBsZeh')
48+let w = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
4949
50-let x = Address(base58'3N95taAsiWcVMmXdVShZ2ann6MAboXrFT1b')
50+let x = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
5151
52-let y = 270000
52+let y = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
5353
54-let z = getBooleanValue(this, c)
54+let z = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
5555
56-let A = getStringValue(this, d)
56+let A = base58'5CqqMkmtXXt35KRH9LdWA3ap6TffPvTT5SHQzYrVFbBw'
5757
58-let B = getStringValue(this, e)
58+let B = Address(base58'3NAGTtZz6WpupSN89NZD5rMZwwziZEg4Kx4')
5959
60-let C = if ((A == "WAVES"))
60+let C = Address(base58'3MrJgdL1GniipErHy44YF9idzLaUL2iX5DQ')
61+
62+let D = Address(base58'3N6q7sCGSSLBUXDdjBdYGTJbZGZfhhh8cNg')
63+
64+let E = Address(base58'3N3g1MVp6DXyfqhq8sMPA6CRRkTTPtBsZeh')
65+
66+let F = valueOrErrorMessage(getInteger(C, r), "Empty kBasePeriod")
67+
68+let G = valueOrErrorMessage(getInteger(C, t), "Empty kStartHeight")
69+
70+let H = valueOrErrorMessage(getInteger(C, s), "Empty kPeriodLength")
71+
72+let I = ((F + ((height - G) / H)) + 3)
73+
74+let J = base58'8UrfDVd5GreeUwm7uPk7eYz1eMv376kzR52C6sANPkwS'
75+
76+let K = 270000
77+
78+let L = getBooleanValue(this, c)
79+
80+let M = getStringValue(this, d)
81+
82+let N = getStringValue(this, e)
83+
84+let O = if ((M == "WAVES"))
6185 then unit
62- else fromBase58String(A)
86+ else fromBase58String(M)
6387
64-let D = if ((B == "WAVES"))
88+let P = if ((N == "WAVES"))
6589 then unit
66- else fromBase58String(B)
90+ else fromBase58String(N)
6791
68-let E = {
69- let F = C
70- if ($isInstanceOf(F, "ByteVector"))
92+let Q = {
93+ let R = O
94+ if ($isInstanceOf(R, "ByteVector"))
7195 then {
72- let G = F
73- value(assetInfo(G)).name
96+ let S = R
97+ value(assetInfo(S)).name
7498 }
75- else if ($isInstanceOf(F, "Unit"))
99+ else if ($isInstanceOf(R, "Unit"))
76100 then {
77- let H = F
101+ let T = R
78102 "WAVES"
79103 }
80104 else throw("Match error")
81105 }
82106
83-let I = {
84- let F = D
85- if ($isInstanceOf(F, "ByteVector"))
107+let U = {
108+ let R = P
109+ if ($isInstanceOf(R, "ByteVector"))
86110 then {
87- let G = F
88- value(assetInfo(G)).name
111+ let S = R
112+ value(assetInfo(S)).name
89113 }
90- else if ($isInstanceOf(F, "Unit"))
114+ else if ($isInstanceOf(R, "Unit"))
91115 then {
92- let H = F
116+ let T = R
93117 "WAVES"
94118 }
95119 else throw("Match error")
96120 }
97121
98-let J = getIntegerValue(this, f)
122+let V = getIntegerValue(this, f)
99123
100-let K = getIntegerValue(this, g)
124+let W = getIntegerValue(this, g)
101125
102-let L = fromBase58String(getStringValue(this, h))
126+let X = fromBase58String(getStringValue(this, j))
103127
104-let M = getIntegerValue(this, i)
128+let Y = getIntegerValue(this, k)
105129
106-let N = 3000
130+let Z = 3000
107131
108-let O = 1200
132+let aa = 1200
109133
110-let P = 1000000
134+let ab = 1000000
111135
112-let Q = 1000
136+let ac = 1000
113137
114-let R = 100000000
138+let ad = 100000000
115139
116-let S = 1000
140+let ae = 1000
117141
118-let T = 8
142+let af = 8
119143
120-func U (V) = {
121- let F = V
122- if ($isInstanceOf(F, "ByteVector"))
144+func ag (ah) = {
145+ let R = ah
146+ if ($isInstanceOf(R, "ByteVector"))
123147 then {
124- let G = F
125- assetBalance(this, G)
148+ let S = R
149+ assetBalance(this, S)
126150 }
127- else if ($isInstanceOf(F, "Unit"))
151+ else if ($isInstanceOf(R, "Unit"))
128152 then {
129- let H = F
153+ let T = R
130154 wavesBalance(this).available
131155 }
132156 else throw("Match error")
133157 }
134158
135159
136-func W (X,Y) = {
137- let Z = {
138- let F = getInteger(X, ((("rpd_balance_" + Y) + "_") + toString(this)))
139- if ($isInstanceOf(F, "Int"))
160+let ai = {
161+ let R = getInteger(D, ((("rpd_balance_" + toBase58String(J)) + "_") + toString(this)))
162+ if ($isInstanceOf(R, "Int"))
163+ then {
164+ let aj = R
165+ aj
166+ }
167+ else if ($isInstanceOf(R, "Unit"))
140168 then {
141- let aa = F
142- aa
169+ let ak = R
170+ 0
143171 }
144- else if ($isInstanceOf(F, "Unit"))
145- then {
146- let ab = F
147- 0
148- }
149- else throw("Match error")
150- }
151- Z
172+ else throw("Match error")
152173 }
153174
175+let al = getIntegerValue(this, h)
154176
155-let ac = W(s, A)
177+let am = getIntegerValue(this, i)
156178
157-let ad = W(s, B)
179+let an = (V - (if ((O == J))
180+ then ai
181+ else 0))
158182
159-let ae = (J - ac)
183+let ao = (W - (if ((P == J))
184+ then ai
185+ else 0))
160186
161-let af = (K - ad)
187+let ap = (ag(O) + (if ((O == J))
188+ then ai
189+ else 0))
162190
163-let ag = (U(C) + ac)
191+let aq = (ag(P) + (if ((P == J))
192+ then ai
193+ else 0))
164194
165-let ah = (U(D) + ad)
166-
167-let ai = if ((ag >= J))
168- then (ah >= K)
195+let ar = if ((ap >= V))
196+ then (aq >= W)
169197 else false
170198
171-func aj (V) = {
172- let F = V
173- if ($isInstanceOf(F, "ByteVector"))
199+func as (ah) = {
200+ let R = ah
201+ if ($isInstanceOf(R, "ByteVector"))
174202 then {
175- let G = F
176- let ak = toBase58String(G)
177- let al = valueOrErrorMessage(assetInfo(G), (("Asset " + ak) + " doesn't exist"))
178- $Tuple3(ak, al.name, al.decimals)
203+ let S = R
204+ let at = toBase58String(S)
205+ let au = valueOrErrorMessage(assetInfo(S), (("Asset " + at) + " doesn't exist"))
206+ $Tuple3(at, au.name, au.decimals)
179207 }
180- else if ($isInstanceOf(F, "Unit"))
208+ else if ($isInstanceOf(R, "Unit"))
181209 then {
182- let H = F
210+ let T = R
183211 $Tuple3("WAVES", "WAVES", 8)
184212 }
185213 else throw("Match error")
186214 }
187215
188216
189-func am (an) = [BooleanEntry(c, false), StringEntry(l, an)]
217+func av (aw) = if ((aw == "WAVES"))
218+ then $Tuple3("WAVES", "WAVES", 8)
219+ else {
220+ let at = aw
221+ let S = fromBase58String(aw)
222+ let au = valueOrErrorMessage(assetInfo(S), (("Asset " + at) + " doesn't exist"))
223+ $Tuple3(at, au.name, au.decimals)
224+ }
190225
191226
192-func ao () = {
193- let ap = if ((ac > 0))
194- then 1
195- else 0
196- let aq = if ((ad > 0))
197- then 1
198- else 0
199- (ap + aq)
200- }
227+func ax (ay) = [BooleanEntry(c, false), StringEntry(n, ay)]
201228
202229
203-func ar (as,V) = if ((V == t))
230+func az (aA,ah) = if ((ah == J))
204231 then {
205- let at = (as - (ao() * y))
206- if ((0 >= at))
207- then throw((((("Insufficient amount " + toString(as)) + " to deduct staking fee ") + toString(y)) + " USD-N"))
208- else at
232+ let aB = (aA - K)
233+ if ((0 >= aB))
234+ then throw((((("Insufficient amount " + toString(aA)) + " to deduct staking fee ") + toString(K)) + " USD-N"))
235+ else aB
209236 }
210- else as
237+ else aA
211238
212239
213-func au (as,av,aw) = throw((((((((("Insufficient DApp balance to pay " + toString(as)) + " ") + aw) + " due to staking. Available: ") + toString(av)) + " ") + aw) + ". Please contact support in Telegram: https://t.me/swopfisupport"))
240+func aC (aA,aD,aE) = throw((((((((("Insufficient DApp balance to pay " + toString(aA)) + " ") + aE) + " due to staking. Available: ") + toString(aD)) + " ") + aE) + ". Please contact support in Telegram: https://t.me/swopfisupport"))
214241
215242
216-func ax (ay,az) = throw((((((((((((((((("Insufficient DApp balance to pay " + toString(ay)) + " ") + E) + " and ") + toString(az)) + " ") + I) + " due to staking. Available: ") + toString(ae)) + " ") + E) + " and ") + toString(af)) + " ") + I) + ". Please contact support in Telegram: https://t.me/swopfisupport"))
243+func aF (aG,aH) = throw((((((((((((((((("Insufficient DApp balance to pay " + toString(aG)) + " ") + Q) + " and ") + toString(aH)) + " ") + U) + " due to staking. Available: ") + toString(an)) + " ") + Q) + " and ") + toString(ao)) + " ") + U) + ". Please contact support in Telegram: https://t.me/swopfisupport"))
217244
218245
219-func aA () = am(((((((((((((((("Suspicious state. Actual balances: " + toString(ag)) + " ") + E) + ", ") + toString(ah)) + " ") + I) + ". State: ") + toString(J)) + " ") + E) + ", ") + toString(K)) + " ") + I))
246+func aI () = ax(((((((((((((((("Suspicious state. Actual balances: " + toString(ap)) + " ") + Q) + ", ") + toString(aq)) + " ") + U) + ". State: ") + toString(V)) + " ") + Q) + ", ") + toString(W)) + " ") + U))
220247
221248
222-@Callable(aB)
223-func init () = {
224- let aC = $Tuple2(aB.payments[0].amount, aB.payments[0].assetId)
225- let aD = aC._1
226- let aE = aC._2
227- let aF = $Tuple2(aB.payments[1].amount, aB.payments[1].assetId)
228- let aG = aF._1
229- let aH = aF._2
230- let aI = aj(aE)
231- let aJ = aI._1
232- let aK = aI._2
233- let aL = aI._3
234- let aM = aj(aH)
235- let aN = aM._1
236- let aO = aM._2
237- let aP = aM._3
238- if (isDefined(getBoolean(this, c)))
239- then throw("DApp is already active")
240- else if ((aE == aH))
241- then throw("Assets must be different")
242- else {
243- let aQ = ((("s" + take(aK, 7)) + "_") + take(aO, 7))
244- let aR = ((((("ShareToken of SwopFi protocol for " + aK) + " and ") + aO) + " at address ") + toString(this))
245- let aS = ((aL + aP) / 2)
246- let aT = fraction(pow(aD, aL, 5, 1, aL, HALFDOWN), pow(aG, aP, 5, 1, aP, HALFDOWN), pow(10, 0, aS, 0, 0, HALFDOWN))
247- let aU = Issue(aQ, aR, aT, aS, true)
248- let aV = calculateAssetId(aU)
249-[StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, aJ), StringEntry(e, aN), IntegerEntry(f, aD), IntegerEntry(g, aG), IntegerEntry(j, N), IntegerEntry(k, P), aU, StringEntry(h, toBase58String(aV)), IntegerEntry(i, aT), ScriptTransfer(aB.caller, aT, aV)]
250- }
249+@Callable(aJ)
250+func init (aK) = {
251+ let aL = $Tuple2(aJ.payments[0].amount, aJ.payments[0].assetId)
252+ let aM = aL._1
253+ let aN = aL._2
254+ let aO = $Tuple2(aJ.payments[1].amount, aJ.payments[1].assetId)
255+ let aP = aO._1
256+ let aQ = aO._2
257+ let aR = as(aN)
258+ let aS = aR._1
259+ let aT = aR._2
260+ let aU = aR._3
261+ let aV = as(aQ)
262+ let aW = aV._1
263+ let aX = aV._2
264+ let aY = aV._3
265+ if (!(containsElement([v, w, x, z], aJ.callerPublicKey)))
266+ then throw("Only admin can call this function")
267+ else if (isDefined(getBoolean(this, c)))
268+ then throw("DApp is already active")
269+ else if ((aN == aQ))
270+ then throw("Assets must be different")
271+ else {
272+ let aZ = ((("s" + take(aT, 7)) + "_") + take(aX, 7))
273+ let ba = ((((("ShareToken of SwopFi protocol for " + aT) + " and ") + aX) + " at address ") + toString(this))
274+ let bb = ((aU + aY) / 2)
275+ let bc = fraction(pow(aM, aU, 5, 1, aU, HALFDOWN), pow(aP, aY, 5, 1, aY, HALFDOWN), pow(10, 0, bb, 0, 0, HALFDOWN))
276+ let bd = Issue(aZ, ba, bc, bb, true)
277+ let be = calculateAssetId(bd)
278+ let bf = [StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, aS), StringEntry(e, aW), IntegerEntry(f, aM), IntegerEntry(g, aP), IntegerEntry(l, Z), IntegerEntry(m, ab), bd, StringEntry(j, toBase58String(be)), IntegerEntry(k, bc), ScriptTransfer(aJ.caller, bc, be)]
279+ if (aK)
280+ then (bf ++ [BooleanEntry(o, aK), IntegerEntry(p, (G + (I * H)))])
281+ else bf
282+ }
251283 }
252284
253285
254286
255-@Callable(aB)
256-func replenishWithTwoTokens (aW) = {
257- let aE = aB.payments[0].assetId
258- let aH = aB.payments[1].assetId
259- let aD = ar(aB.payments[0].amount, aE)
260- let aG = ar(aB.payments[1].amount, aH)
261- let aX = fraction(fraction(J, R, aD), Q, fraction(K, R, aG))
262- let aY = fraction(aD, R, J)
263- let aZ = fraction(aG, R, K)
264- let ba = fraction(min([aY, aZ]), M, R)
265- if (!(z))
266- then throw("DApp is inactive at this moment")
267- else if (if ((0 > aW))
268- then true
269- else (aW > S))
270- then throw(((("Slippage tolerance must be between 0 and " + toString(S)) + " inclusively. Actual: ") + toString(aW)))
271- else if ((size(aB.payments) != 2))
272- then throw("Two attached assets expected")
273- else if (if ((aE != C))
274- then true
275- else (aH != D))
276- then throw(((("Incorrect assets attached. Expected: " + A) + " and ") + B))
277- else if (if ((((Q * (S - aW)) / S) > aX))
278- then true
279- else (aX > ((Q * (S + aW)) / S)))
280- then throw("Incorrect assets amount: amounts must have the contract ratio")
281- else if ((ba == 0))
282- then throw("Too small amount to replenish")
283- else if (!(ai))
284- then ([ScriptTransfer(aB.caller, aD, aE), ScriptTransfer(aB.caller, aG, aH)] ++ aA())
285- else [IntegerEntry(f, (J + aD)), IntegerEntry(g, (K + aG)), IntegerEntry(i, (M + ba)), Reissue(L, ba, true), ScriptTransfer(aB.caller, ba, L)]
287+@Callable(aJ)
288+func initWithInitRatio (bg,bh,M,N,aK) = {
289+ let bi = av(M)
290+ let aS = bi._1
291+ let aT = bi._2
292+ let aU = bi._3
293+ let bj = av(N)
294+ let aW = bj._1
295+ let aX = bj._2
296+ let aY = bj._3
297+ if (!(containsElement([v, w, x, z], aJ.callerPublicKey)))
298+ then throw("Only admin can call this function")
299+ else if (isDefined(getBoolean(this, c)))
300+ then throw("DApp is already active")
301+ else if ((M == N))
302+ then throw("Assets must be different")
303+ else {
304+ let aZ = ((("s" + take(aT, 7)) + "_") + take(aX, 7))
305+ let ba = ((((("ShareToken of SwopFi protocol for " + aT) + " and ") + aX) + " at address ") + toString(this))
306+ let bb = ((aU + aY) / 2)
307+ let bc = 0
308+ let bd = Issue(aZ, ba, bc, bb, true)
309+ let be = calculateAssetId(bd)
310+ let bf = [StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, aS), StringEntry(e, aW), IntegerEntry(h, bg), IntegerEntry(i, bh), IntegerEntry(f, 0), IntegerEntry(g, 0), IntegerEntry(l, Z), IntegerEntry(m, ab), bd, StringEntry(j, toBase58String(be)), IntegerEntry(k, bc)]
311+ if (aK)
312+ then (bf ++ [BooleanEntry(o, aK), IntegerEntry(p, (G + (I * H)))])
313+ else bf
314+ }
286315 }
287316
288317
289318
290-@Callable(aB)
291-func withdraw () = {
292- let bb = $Tuple2(aB.payments[0].amount, aB.payments[0].assetId)
293- let bc = bb._1
294- let bd = bb._2
295- let be = ar(fraction(bc, J, M), C)
296- let bf = ar(fraction(bc, K, M), D)
297- if (!(z))
298- then throw("DApp is inactive at this moment")
299- else if ((size(aB.payments) != 1))
300- then throw("One attached payment expected")
301- else if ((bd != L))
302- then throw(("Incorrect asset attached. Expected: " + toBase58String(L)))
303- else if (!(ai))
304- then ([ScriptTransfer(aB.caller, bc, bd)] ++ aA())
305- else if (if ((be > ae))
306- then true
307- else (bf > af))
308- then ax(be, bf)
309- else [IntegerEntry(f, (J - be)), IntegerEntry(g, (K - bf)), IntegerEntry(i, (M - bc)), Burn(L, bc), ScriptTransfer(aB.caller, be, C), ScriptTransfer(aB.caller, bf, D)]
319+@Callable(aJ)
320+func keepLimitForFirstHarvest (bk) = if (!(L))
321+ then throw("DApp is inactive at this moment")
322+ else if (!(containsElement([v, w, x, z], aJ.callerPublicKey)))
323+ then throw("Only admin can call this function")
324+ else [IntegerEntry(q, bk)]
325+
326+
327+
328+@Callable(aJ)
329+func replenishWithTwoTokens (bl) = {
330+ let aN = aJ.payments[0].assetId
331+ let aQ = aJ.payments[1].assetId
332+ let aM = az(aJ.payments[0].amount, aN)
333+ let aP = az(aJ.payments[1].amount, aQ)
334+ if (if ((V == 0))
335+ then (W == 0)
336+ else false)
337+ then {
338+ let bm = as(aN)
339+ let aS = bm._1
340+ let aT = bm._2
341+ let aU = bm._3
342+ let bn = as(aQ)
343+ let aW = bn._1
344+ let aX = bn._2
345+ let aY = bn._3
346+ let bo = fraction(fraction(al, ad, aM), ac, fraction(am, ad, aP))
347+ if ((aN == aQ))
348+ then throw("Assets must be different")
349+ else {
350+ let bb = ((aU + aY) / 2)
351+ let bc = fraction(pow(aM, aU, 5, 1, aU, HALFDOWN), pow(aP, aY, 5, 1, aY, HALFDOWN), pow(10, 0, bb, 0, 0, HALFDOWN))
352+ if (!(L))
353+ then throw("DApp is inactive at this moment")
354+ else if (if ((0 > bl))
355+ then true
356+ else (bl > ae))
357+ then throw(((("Slippage tolerance must be between 0 and " + toString(ae)) + " inclusively. Actual: ") + toString(bl)))
358+ else if ((size(aJ.payments) != 2))
359+ then throw("Two attached assets expected")
360+ else if (if ((((ac * (ae - bl)) / ae) > bo))
361+ then true
362+ else (bo > ((ac * (ae + bl)) / ae)))
363+ then throw("Incorrect assets amount: amounts must have the contract ratio")
364+ else if (if ((aN != O))
365+ then true
366+ else (aQ != P))
367+ then throw(((("Incorrect assets attached. Expected: " + M) + " and ") + N))
368+ else if ((bc == 0))
369+ then throw("Too small amount to replenish")
370+ else if (!(ar))
371+ then ([ScriptTransfer(aJ.caller, aM, aN), ScriptTransfer(aJ.caller, aP, aQ)] ++ aI())
372+ else [Reissue(X, bc, true), IntegerEntry(f, aM), IntegerEntry(g, aP), IntegerEntry(k, bc), ScriptTransfer(aJ.caller, bc, X)]
373+ }
374+ }
375+ else {
376+ let bo = fraction(fraction(V, ad, aM), ac, fraction(W, ad, aP))
377+ let bp = fraction(aM, ad, V)
378+ let bq = fraction(aP, ad, W)
379+ let br = fraction(min([bp, bq]), Y, ad)
380+ if (!(L))
381+ then throw("DApp is inactive at this moment")
382+ else if (if ((0 > bl))
383+ then true
384+ else (bl > ae))
385+ then throw(((("Slippage tolerance must be between 0 and " + toString(ae)) + " inclusively. Actual: ") + toString(bl)))
386+ else if ((size(aJ.payments) != 2))
387+ then throw("Two attached assets expected")
388+ else if (if ((aN != O))
389+ then true
390+ else (aQ != P))
391+ then throw(((("Incorrect assets attached. Expected: " + M) + " and ") + N))
392+ else if (if ((((ac * (ae - bl)) / ae) > bo))
393+ then true
394+ else (bo > ((ac * (ae + bl)) / ae)))
395+ then throw("Incorrect assets amount: amounts must have the contract ratio")
396+ else if ((br == 0))
397+ then throw("Too small amount to replenish")
398+ else if (!(ar))
399+ then ([ScriptTransfer(aJ.caller, aM, aN), ScriptTransfer(aJ.caller, aP, aQ)] ++ aI())
400+ else [IntegerEntry(f, (V + aM)), IntegerEntry(g, (W + aP)), IntegerEntry(k, (Y + br)), Reissue(X, br, true), ScriptTransfer(aJ.caller, br, X)]
401+ }
310402 }
311403
312404
313405
314-@Callable(aB)
315-func exchange (bg) = {
316- let bh = $Tuple2(aB.payments[0].amount, aB.payments[0].assetId)
317- let bc = bh._1
318- let bd = bh._2
319- func bi (bj,bk) = {
320- let bl = fraction(bk, bc, (bc + bj))
321- let bm = fraction(bl, (P - N), P)
322- let bn = fraction(bl, O, P)
323- if ((bg > bm))
324- then throw(((("Calculated amount to receive " + toString(bm)) + " is less than specified minimum ") + toString(bg)))
325- else $Tuple3(bl, bm, bn)
326- }
327-
328- if (!(z))
406+@Callable(aJ)
407+func withdraw () = {
408+ let bs = $Tuple2(aJ.payments[0].amount, aJ.payments[0].assetId)
409+ let bt = bs._1
410+ let bu = bs._2
411+ let bv = az(fraction(bt, V, Y), O)
412+ let bw = az(fraction(bt, W, Y), P)
413+ if (!(L))
329414 then throw("DApp is inactive at this moment")
330- else if ((0 >= bg))
331- then throw(("Minimal amount to receive must be positive. Actual: " + toString(bg)))
332- else if ((size(aB.payments) != 1))
333- then throw("One attached payment expected")
334- else if (!(ai))
335- then ([ScriptTransfer(aB.caller, bc, bd)] ++ aA())
336- else if ((bd == C))
337- then {
338- let bo = D
339- let bp = bi(J, K)
340- let bl = bp._1
341- let bm = bp._2
342- let bn = bp._3
343- let bq = (J + bc)
344- let br = ((K - bm) - bn)
345- if (if ((ac >= bq))
346- then true
347- else (ad >= br))
348- then au(bm, af, I)
349- else [IntegerEntry(f, bq), IntegerEntry(g, br), ScriptTransfer(aB.caller, bm, bo), ScriptTransfer(r, bn, bo)]
350- }
351- else if ((bd == D))
352- then {
353- let bo = C
354- let bs = bi(K, J)
355- let bl = bs._1
356- let bm = bs._2
357- let bn = bs._3
358- let bq = ((J - bm) - bn)
359- let br = (K + bc)
360- if (if ((ac >= bq))
361- then true
362- else (ad >= br))
363- then au(bm, ae, E)
364- else [IntegerEntry(f, bq), IntegerEntry(g, br), ScriptTransfer(aB.caller, bm, bo), ScriptTransfer(r, bn, bo)]
365- }
366- else throw(((("Incorrect asset attached. Expected: " + A) + " or ") + B))
415+ else if ((size(aJ.payments) != 1))
416+ then throw("One attached payment expected")
417+ else if ((bu != X))
418+ then throw(("Incorrect asset attached. Expected: " + toBase58String(X)))
419+ else if (!(ar))
420+ then ([ScriptTransfer(aJ.caller, bt, bu)] ++ aI())
421+ else if (if ((bv > an))
422+ then true
423+ else (bw > ao))
424+ then aF(bv, bw)
425+ else [IntegerEntry(f, (V - bv)), IntegerEntry(g, (W - bw)), IntegerEntry(k, (Y - bt)), Burn(X, bt), ScriptTransfer(aJ.caller, bv, O), ScriptTransfer(aJ.caller, bw, P)]
367426 }
368427
369428
370429
371-@Callable(aB)
372-func shutdown () = if (!(z))
373- then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, l), "the cause wasn't specified")))
374- else if (!(containsElement([m, n, o, p], aB.callerPublicKey)))
375- then throw("Only admin can call this function")
376- else am("Paused by admin")
430+@Callable(aJ)
431+func exchange (bx) = {
432+ let by = $Tuple2(aJ.payments[0].amount, aJ.payments[0].assetId)
433+ let bt = by._1
434+ let bu = by._2
435+ func bz (bA,bB) = {
436+ let bC = fraction(bB, bt, (bt + bA))
437+ let bD = fraction(bC, (ab - Z), ab)
438+ let bE = fraction(bC, aa, ab)
439+ if ((bx > bD))
440+ then throw(((("Calculated amount to receive " + toString(bD)) + " is less than specified minimum ") + toString(bx)))
441+ else $Tuple3(bC, bD, bE)
442+ }
443+
444+ if (!(L))
445+ then throw("DApp is inactive at this moment")
446+ else if (if ((V == 0))
447+ then true
448+ else (W == 0))
449+ then throw("Can't exchange with zero balance")
450+ else if ((0 >= bx))
451+ then throw(("Minimal amount to receive must be positive. Actual: " + toString(bx)))
452+ else if ((size(aJ.payments) != 1))
453+ then throw("One attached payment expected")
454+ else if (!(ar))
455+ then ([ScriptTransfer(aJ.caller, bt, bu)] ++ aI())
456+ else if ((bu == O))
457+ then {
458+ let bF = P
459+ let bG = bz(V, W)
460+ let bC = bG._1
461+ let bD = bG._2
462+ let bE = bG._3
463+ let bH = (V + bt)
464+ let bI = ((W - bD) - bE)
465+ if (if (if ((O == J))
466+ then (ai >= bH)
467+ else false)
468+ then true
469+ else if ((P == J))
470+ then (ai >= bI)
471+ else false)
472+ then aC(bD, ao, U)
473+ else [IntegerEntry(f, bH), IntegerEntry(g, bI), ScriptTransfer(aJ.caller, bD, bF), ScriptTransfer(B, bE, bF)]
474+ }
475+ else if ((bu == P))
476+ then {
477+ let bF = O
478+ let bJ = bz(W, V)
479+ let bC = bJ._1
480+ let bD = bJ._2
481+ let bE = bJ._3
482+ let bH = ((V - bD) - bE)
483+ let bI = (W + bt)
484+ if (if (if ((O == J))
485+ then (ai >= bH)
486+ else false)
487+ then true
488+ else if ((P == J))
489+ then (ai >= bI)
490+ else false)
491+ then aC(bD, an, Q)
492+ else [IntegerEntry(f, bH), IntegerEntry(g, bI), ScriptTransfer(aJ.caller, bD, bF), ScriptTransfer(B, bE, bF)]
493+ }
494+ else throw(((("Incorrect asset attached. Expected: " + M) + " or ") + N))
495+ }
377496
378497
379498
380-@Callable(aB)
381-func activate () = if (z)
382- then throw("DApp is already active")
383- else if (!(containsElement([m, n, o, p], aB.callerPublicKey)))
499+@Callable(aJ)
500+func shutdown () = if (!(L))
501+ then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, n), "the cause wasn't specified")))
502+ else if (!(containsElement([v, w, x, y], aJ.callerPublicKey)))
384503 then throw("Only admin can call this function")
385- else [BooleanEntry(c, true), DeleteEntry(l)]
504+ else ax("Paused by admin")
386505
387506
388507
389-@Callable(aB)
390-func takeIntoAccountExtraFunds (bt) = {
391- let bu = (ag - J)
392- let bv = (ah - K)
393- let bw = (bu - (if ((C == unit))
394- then bt
508+@Callable(aJ)
509+func activate () = if (L)
510+ then throw("DApp is already active")
511+ else if (!(containsElement([v, w, x, y], aJ.callerPublicKey)))
512+ then throw("Only admin can call this function")
513+ else [BooleanEntry(c, true), DeleteEntry(n)]
514+
515+
516+
517+@Callable(aJ)
518+func takeIntoAccountExtraFunds (bK) = {
519+ let bL = (ap - V)
520+ let bM = (aq - W)
521+ let bN = (bL - (if ((O == unit))
522+ then bK
395523 else 0))
396- let bx = (bv - (if ((D == unit))
397- then bt
524+ let bO = (bM - (if ((P == unit))
525+ then bK
398526 else 0))
399- if (!(z))
527+ if (!(L))
400528 then throw("DApp is inactive at this moment")
401- else if ((aB.caller != this))
529+ else if ((aJ.caller != this))
402530 then throw("Only the DApp itself can call this function")
403- else if ((0 > bt))
404- then throw(("Argument 'amountLeave' cannot be negative. Actual: " + toString(bt)))
405- else if (if ((0 > bu))
531+ else if ((0 > bK))
532+ then throw(("Argument 'amountLeave' cannot be negative. Actual: " + toString(bK)))
533+ else if (if ((0 > bL))
406534 then true
407- else (0 > bv))
408- then am("Enroll amount negative")
409- else if (if ((0 > bw))
535+ else (0 > bM))
536+ then ax("Enroll amount negative")
537+ else if (if ((0 > bN))
410538 then true
411- else (0 > bx))
539+ else (0 > bO))
412540 then throw("Too large amountLeave")
413- else [IntegerEntry(f, (J + bw)), IntegerEntry(g, (K + bx)), IntegerEntry(("last_income_" + A), bw), IntegerEntry(("last_income_" + B), bx)]
541+ else [IntegerEntry(f, (V + bN)), IntegerEntry(g, (W + bO)), IntegerEntry(("last_income_" + M), bN), IntegerEntry(("last_income_" + N), bO)]
414542 }
415543
416544
417-@Verifier(by)
418-func bz () = {
419- let F = by
420- if ($isInstanceOf(F, "InvokeScriptTransaction"))
545+@Verifier(bP)
546+func bQ () = {
547+ let R = bP
548+ if ($isInstanceOf(R, "InvokeScriptTransaction"))
421549 then {
422- let bA = F
423- if (if (if (sigVerify(bA.bodyBytes, bA.proofs[0], q))
424- then (bA.dApp == s)
550+ let bR = R
551+ let bS = if ((bR.dApp == this))
552+ then (bR.function == "takeIntoAccountExtraFunds")
553+ else false
554+ let bT = if ((bR.dApp == D))
555+ then if (if (if ((bR.function == "lockNeutrino"))
556+ then (size(bR.payments) == 1)
557+ else false)
558+ then (bR.payments[0].assetId == J)
559+ else false)
560+ then true
561+ else if ((bR.function == "unlockNeutrino"))
562+ then (size(bR.payments) == 0)
563+ else false
564+ else false
565+ let bU = if (if (if ((bR.dApp == E))
566+ then (bR.function == "exchange")
567+ else false)
568+ then (O == J)
425569 else false)
426570 then true
427- else if (if (sigVerify(bA.bodyBytes, bA.proofs[0], q))
428- then (bA.function == "exchange")
429- else false)
430- then if (if (if (if ((C == u))
431- then (D == t)
432- else false)
433- then (bA.dApp == w)
434- else false)
435- then if ((bA.payments[0].assetId == unit))
436- then true
437- else (bA.payments[0].assetId == t)
438- else false)
439- then true
440- else if (if ((C == u))
441- then (D == v)
442- else false)
443- then if (if ((bA.dApp == x))
444- then (bA.payments[0].assetId == t)
445- else false)
446- then true
447- else if ((bA.dApp == w))
448- then if ((bA.payments[0].assetId == unit))
449- then true
450- else (bA.payments[0].assetId == t)
451- else false
452- else false
453- else false)
571+ else if ((P == J))
572+ then (bR.payments[0].assetId == J)
573+ else false
574+ let bV = if (if (if (sigVerify(bP.bodyBytes, bP.proofs[0], v))
454575 then true
455- else if (if (sigVerify(bA.bodyBytes, bA.proofs[0], q))
456- then (bA.dApp == this)
457- else false)
458- then (bA.function == "takeIntoAccountExtraFunds")
459- else false
576+ else sigVerify(bP.bodyBytes, bP.proofs[0], w))
577+ then true
578+ else sigVerify(bP.bodyBytes, bP.proofs[0], x))
579+ then true
580+ else sigVerify(bP.bodyBytes, bP.proofs[0], z)
581+ if (if (if (bS)
582+ then true
583+ else bT)
584+ then true
585+ else bU)
586+ then bV
587+ else false
460588 }
461589 else {
462- let bB = if (sigVerify(by.bodyBytes, by.proofs[0], m))
590+ let bW = if (sigVerify(bP.bodyBytes, bP.proofs[0], v))
463591 then 1
464592 else 0
465- let bC = if (sigVerify(by.bodyBytes, by.proofs[1], n))
593+ let bX = if (sigVerify(bP.bodyBytes, bP.proofs[1], w))
466594 then 1
467595 else 0
468- let bD = if (sigVerify(by.bodyBytes, by.proofs[2], o))
596+ let bY = if (sigVerify(bP.bodyBytes, bP.proofs[2], x))
469597 then 1
470598 else 0
471- (((bB + bC) + bD) >= 2)
599+ (((bW + bX) + bY) >= 2)
472600 }
473601 }
474602

github/deemru/w8io/169f3d6 
116.83 ms