tx · 2eoK9GQgWW5K2imh8paCwLr9nMsCQKbtXd2rCrUEzMBH

3N77kfPbQyjXWpDALX3xjKw3iEGMWEctV37:  -0.01400000 Waves

2021.08.06 16:41 [1646539] smart account 3N77kfPbQyjXWpDALX3xjKw3iEGMWEctV37 > SELF 0.00000000 Waves

{ "type": 13, "id": "2eoK9GQgWW5K2imh8paCwLr9nMsCQKbtXd2rCrUEzMBH", "fee": 1400000, "feeAssetId": null, "timestamp": 1628257313301, "version": 2, "chainId": 84, "sender": "3N77kfPbQyjXWpDALX3xjKw3iEGMWEctV37", "senderPublicKey": "4bwUHdA4vTBJ1k43dYKiPYTDqm3QqiZXNGXoQstGAD1k", "proofs": [ "4Z5KTSeD9pAjZwyjmzbYVL182iPvEDN9CfM2hwQsoAgjwMspq43S7cbCCjuG8ibu5rkv1KDcv3rJ3bMQ8xewu1tP", "4iqazUaGdrskgCwAYXXVseicLG3qrZVKimzoBjyu4TAvQGQxUNuG9JK7MTyuf1AsLKYikv1Sxk7gDyLvgxHH6wQm" ], "script": "base64:AAIFAAAAAAAAACMIAhIDCgEEEgMKAQESAwoBARIAEgMKAQESABIAEgMKAQESAAAAAFkAAAAAB3ZlcnNpb24CAAAABTEuMC4wAAAAAAprZXlWZXJzaW9uAgAAAAd2ZXJzaW9uAAAAAAlrZXlBY3RpdmUCAAAABmFjdGl2ZQAAAAALa2V5QXNzZXRJZEECAAAACkFfYXNzZXRfaWQAAAAAC2tleUFzc2V0SWRCAgAAAApCX2Fzc2V0X2lkAAAAAAtrZXlCYWxhbmNlQQIAAAAPQV9hc3NldF9iYWxhbmNlAAAAAAtrZXlCYWxhbmNlQgIAAAAPQl9hc3NldF9iYWxhbmNlAAAAAA9rZXlCYWxhbmNlSW5pdEECAAAADEFfYXNzZXRfaW5pdAAAAAAPa2V5QmFsYW5jZUluaXRCAgAAAAxCX2Fzc2V0X2luaXQAAAAAD2tleVNoYXJlQXNzZXRJZAIAAAAOc2hhcmVfYXNzZXRfaWQAAAAAE2tleVNoYXJlQXNzZXRTdXBwbHkCAAAAEnNoYXJlX2Fzc2V0X3N1cHBseQAAAAANa2V5Q29tbWlzc2lvbgIAAAAKY29tbWlzc2lvbgAAAAAba2V5Q29tbWlzc2lvblNjYWxlRGVsaW1pdGVyAgAAABpjb21taXNzaW9uX3NjYWxlX2RlbGltaXRlcgAAAAAIa2V5Q2F1c2UCAAAADnNodXRkb3duX2NhdXNlAAAAAA9rZXlGaXJzdEhhcnZlc3QCAAAADWZpcnN0X2hhcnZlc3QAAAAAFWtleUZpcnN0SGFydmVzdEhlaWdodAIAAAAUZmlyc3RfaGFydmVzdF9oZWlnaHQAAAAAC2tTaGFyZUxpbWl0AgAAABxzaGFyZV9saW1pdF9vbl9maXJzdF9oYXJ2ZXN0AAAAAAtrQmFzZVBlcmlvZAIAAAALYmFzZV9wZXJpb2QAAAAADWtQZXJpb2RMZW5ndGgCAAAADXBlcmlvZF9sZW5ndGgAAAAADGtTdGFydEhlaWdodAIAAAAMc3RhcnRfaGVpZ2h0AAAAABNrRmlyc3RIYXJ2ZXN0SGVpZ2h0AgAAABRmaXJzdF9oYXJ2ZXN0X2hlaWdodAAAAAAWa2V5T3JhY2xlQXNzZXRQcmlvcml0eQIAAAAPYXNzZXRfcHJpb3JpdHlfAAAAABNrZXlPcmFjbGVTY3Jp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eHRyTmF0aXZlKDEwNTApAAAAAgUAAAAEdGhpcwUAAAALa2V5QmFsYW5jZUEAAAAACGJhbGFuY2VCCQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAAAR0aGlzBQAAAAtrZXlCYWxhbmNlQgAAAAAMc2hhcmVBc3NldElkCQACWQAAAAEJAQAAABFAZXh0ck5hdGl2ZSgxMDUzKQAAAAIFAAAABHRoaXMFAAAAD2tleVNoYXJlQXNzZXRJZAAAAAAQc2hhcmVBc3NldFN1cHBseQkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAEdGhpcwUAAAATa2V5U2hhcmVBc3NldFN1cHBseQAAAAAKY29tbWlzc2lvbgAAAAAAAAALuAAAAAAUY29tbWlzc2lvbkdvdmVybmFuY2UAAAAAAAAABLAAAAAAGGNvbW1pc3Npb25TY2FsZURlbGltaXRlcgAAAAAAAA9CQAAAAAALc2NhbGVWYWx1ZTMAAAAAAAAAA+gAAAAAC3NjYWxlVmFsdWU4AAAAAAAF9eEAAAAAABpzbGlwcGFnZVRvbGVyYW5jZURlbGltaXRlcgAAAAAAAAAD6AAAAAARc2NhbGVWYWx1ZThEaWdpdHMAAAAAAAAAAAgAAAAAGWNvbWlzc2lvbkZvckluaXRhbGl6YXRpb24AAAAAADuaygABAAAADmFjY291bnRCYWxhbmNlAAAAAQAAAAdhc3NldElkBAAAAAckbWF0Y2gwBQAAAAdhc3NldElkAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAApCeXRlVmVjdG9yBAAAAAJpZAUAAAAHJG1hdGNoMAkAA/AAAAACBQAAAAR0aGlzBQAAAAJpZAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAEVW5pdAQAAAAFd2F2ZXMFAAAAByRtYXRjaDAICQAD7wAAAAEFAAAABHRoaXMAAAAJYXZhaWxhYmxlCQAAAgAAAAECAAAAC01hdGNoIGVycm9yAQAAAAxzdGFrZWRBbW91bnQAAAABAAAAB2Fzc2V0SWQEAAAAFnN0YWtlZEFtb3VudENhbGN1bGF0ZWQEAAAAByRtYXRjaDAFAAAAB2Fzc2V0SWQDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAACkJ5dGVWZWN0b3IEAAAAA2FJZAUAAAAHJG1hdGNoMAMDCQAAAAAAAAIFAAAAA2FJZAUAAAAEVVNETgYJAAAAAAAAAgUAAAADYUlkBQAAAAROU0JUCQAEGgAAAAIFAAAAFnN0YWtpbmdVU0ROTlNCVEFkZHJlc3MJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAADHJwZF9iYWxhbmNlXwkAAlgAAAABBQAAAANhSWQCAAAAAV8JAAQlAAAAAQUAAAAEdGhpcwMJAAAAAAAAAgUAAAADYUlkBQAAAARFVVJOCQAEGgAAAAIFAAAAEnN0YWtpbmdFVVJOQWRkcmVzcwkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAYJXMlcyVzX19zdGFraW5nQmFsYW5jZV9fCQACWAAAAAEFAAAAA2FJZAIAAAACX18JAAQlAAAAAQUAAAAEdGhpcwAAAAAAAAAAAAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAEVW5pdAAAAAAAAAAAAAkAAAIAAAABAgAAAAtNYXRjaCBlcnJvcgQAAAAHJG1hdGNoMAUAAAAWc3Rha2VkQW1vdW50Q2FsY3VsYXRlZAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFpBQAAAAckbWF0Y2gwBQAAAAFpAAAAAAAAAAAAAQAAAA5pc0FsbG93ZWRBc3NldAAAAAEAAAAHYXNzZXRJZAQAAAAHJG1hdGNoMAUAAAAHYXNzZXRJZAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAKQnl0ZVZlY3RvcgQAAAACaWQFAAAAByRtYXRjaDADAwkAAAAAAAACBQAAAAJpZAUAAAAEVVNETgYJAAAAAAAAAgUAAAACaWQFAAAABFNXT1AGBwMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAEVW5pdAQAAAAFd2F2ZXMFAAAAByRtYXRjaDAGCQAAAgAAAAECAAAAC01hdGNoIGVycm9yAAAAAA1zdGFrZWRBbW91bnRBCQEAAAAMc3Rha2VkQW1vdW50AAAAAQUAAAAIYXNzZXRJZEEAAAAADXN0YWtlZEFtb3VudEIJAQAAAAxzdGFrZWRBbW91bnQAAAABBQAAAAhhc3NldElkQgAAAAAKYXNzZXRJbml0QQkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAEdGhpcwUAAAAPa2V5QmFsYW5jZUluaXRBAAAAAAphc3NldEluaXRCCQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAAAR0aGlzBQAAAA9rZXlCYWxhbmNlSW5pdEIAAAAAEWF2YWlsYWJsZUJhbGFuY2VBCQAAZQAAAAIFAAAACGJhbGFuY2VBBQAAAA1zdGFrZWRBbW91bnRBAAAAABFhdmFpbGFibGVCYWxhbmNlQgkAAGUAAAACBQAAAAhiYWxhbmNlQgUAAAANc3Rha2VkQW1vdW50QgAAAAAZYWNjb3VudEJhbGFuY2VXaXRoU3Rha2VkQQkAAGQAAAACCQEAAAAOYWNjb3VudEJhbGFuY2UAAAABBQAAAAhhc3NldElkQQUAAAANc3Rha2VkQW1vdW50QQAAAAAZYWNjb3VudEJhbGFuY2VXaXRoU3Rha2VkQgkAAGQAAAACCQEAAAAOYWNjb3VudEJhbGFuY2UAAAABBQAAAAhhc3NldElkQgUAAAANc3Rha2VkQW1vdW50QgAAAAAQaGFzRW5vdWdoQmFsYW5jZQMJAABnAAAAAgUAAAAZYWNjb3VudEJhbGFuY2VXaXRoU3Rha2VkQQUAAAAIYmFsYW5jZUEJAABnAAAAAgUAAAAZYWNjb3VudEJhbGFuY2VXaXRoU3Rha2VkQgUAAAAIYmFsYW5jZUIHAQAAAAxnZXRBc3NldEluZm8AAAABAAAAB2Fzc2V0SWQEAAAAByRtYXRjaDAFAAAAB2Fzc2V0SWQDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAACkJ5dGVWZWN0b3IEAAAAAmlkBQAAAAckbWF0Y2gwBAAAAAhzdHJpbmdJZAkAAlgAAAABBQAAAAJpZAQAAAAEaW5mbwkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAD7AAAAAEFAAAAAmlkCQABLAAAAAIJAAEsAAAAAgIAAAAGQXNzZXQgBQAAAAhzdHJpbmdJZAIAAAAOIGRvZXNuJ3QgZXhpc3QJAAUVAAAAAwUAAAAIc3RyaW5nSWQIBQAAAARpbmZvAAAABG5hbWUIBQAAAARpbmZvAAAACGRlY2ltYWxzAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAARVbml0BAAAAAV3YXZlcwUAAAAHJG1hdGNoMAkABRUAAAADAgAA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AAAAAgIAAAAWa2V5T3JhY2xlQXNzZXRQcmlvcml0eQUAAAAOcG10U3RyQXNzZXRJZDEAAAAAAAAPQj8EAAAADmFzc2V0MlByaW9yaXR5CQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAABm9yYWNsZQkAASwAAAACAgAAABZrZXlPcmFjbGVBc3NldFByaW9yaXR5BQAAAA5wbXRTdHJBc3NldElkMgAAAAAAAA9CPwQAAAAMJHQwOTkzMzEwMTYwAwkAAGYAAAACBQAAAA5hc3NldDJQcmlvcml0eQUAAAAOYXNzZXQxUHJpb3JpdHkJAAUWAAAABAUAAAAKcG10QW1vdW50MgUAAAALcG10QXNzZXRJZDIFAAAACnBtdEFtb3VudDEFAAAAC3BtdEFzc2V0SWQxCQAFFgAAAAQFAAAACnBtdEFtb3VudDEFAAAAC3BtdEFzc2V0SWQxBQAAAApwbXRBbW91bnQyBQAAAAtwbXRBc3NldElkMgQAAAAKcG10QW1vdW50QQgFAAAADCR0MDk5MzMxMDE2MAAAAAJfMQQAAAALcG10QXNzZXRJZEEIBQAAAAwkdDA5OTMzMTAxNjAAAAACXzIEAAAACnBtdEFtb3VudEIIBQAAAAwkdDA5OTMzMTAxNjAAAAACXzMEAAAAC3BtdEFzc2V0SWRCCAUAAAAMJHQwOTkzMzEwMTYwAAAAAl80BAAAAA0kdDAxMDE2OTEwMjQ2CQEAAAAMZ2V0QXNzZXRJbmZvAAAAAQUAAAALcG10QXNzZXRJZEEEAAAADnBtdFN0ckFzc2V0SWRBCAUAAAANJHQwMTAxNjkxMDI0NgAAAAJfMQQAAAANcG10QXNzZXROYW1lQQgFAAAADSR0MDEwMTY5MTAyNDYAAAACXzIEAAAADHBtdERlY2ltYWxzQQgFAAAADSR0MDEwMTY5MTAyNDYAAAACXzMEAAAADSR0MDEwMjU1MTAzMzIJAQAAAAxnZXRBc3NldEluZm8AAAABBQAAAAtwbXRBc3NldElkQgQAAAAOcG10U3RyQXNzZXRJZEIIBQAAAA0kdDAxMDI1NTEwMzMyAAAAAl8xBAAAAA1wbXRBc3NldE5hbWVCCAUAAAANJHQwMTAyNTUxMDMzMgAAAAJfMgQAAAAMcG10RGVjaW1hbHNCCAUAAAANJHQwMTAyNTUxMDMzMgAAAAJfMwQAAAAHYWRkUG9vbAkAA/wAAAAEBQAAAAZvcmFjbGUCAAAAB2FkZFBvb2wJAARMAAAAAgUAAAAEdGhpcwkABEwAAAACCQABLAAAAAIJAAEsAAAAAgUAAAANcG10QXNzZXROYW1lQQIAAAABXwUAAAANcG10QXNzZXROYW1lQgUAAAADbmlsBQAAAANuaWwDCQAAAAAAAAIFAAAAB2FkZFBvb2wFAAAAB2FkZFBvb2wDCQEAAAABIQAAAAEJAQAAAAlpc0RlZmluZWQAAAABCQAEHQAAAAIFAAAABm9yYWNsZQkAASwAAAACAgAAAAVwb29sXwkABCUAAAABBQAAAAR0aGlzCQAAAgAAAAECAAAAEVBvb2wgaXMgbm90IGFkZGVkBAAAAAlzaGFyZU5hbWUJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAAXMJAAEvAAAAAgUAAAANcG10QXNzZXROYW1lQQAAAAAAAAAABwIAAAABXwkAAS8AAAACBQAAAA1wbXRBc3NldE5hbWVCAAAAAAAAAAAHBAAAABBzaGFyZURlc2NyaXB0aW9uCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAiU2hhcmVUb2tlbiBvZiBTd29wRmkgcHJvdG9jb2wgZm9yIAUAAAANcG10QXNzZXROYW1lQQIAAAAFIGFuZCAFAAAADXBtdEFzc2V0TmFtZUICAAAADCBhdCBhZGRyZXNzIAkABCUAAAABBQAAAAR0aGlzBAAAAA1zaGFyZURlY2ltYWxzCQAAaQAAAAIJAABkAAAAAgUAAAAMcG10RGVjaW1hbHNBBQAAAAxwbXREZWNpbWFsc0IAAAAAAAAAAAIEAAAABGFyZzEJAABsAAAABgUAAAAKcG10QW1vdW50QQUAAAAMcG10RGVjaW1hbHNBAAAAAAAAAAAFAAAAAAAAAAABBQAAAAxwbXREZWNpbWFsc0EFAAAABERPV04EAAAABGFyZzIJAABsAAAABgUAAAAKcG10QW1vdW50QgUAAAAMcG10RGVjaW1hbHNCAAAAAAAAAAAFAAAAAAAAAAABBQAAAAxwbXREZWNpbWFsc0IFAAAABERPV04EAAAABGFyZzMJAABsAAAABgAAAAAAAAAACgAAAAAAAAAAAAUAAAANc2hhcmVEZWNpbWFscwAAAAAAAAAAAAAAAAAAAAAAAAUAAAAERE9XTgQAAAASc2hhcmVJbml0aWFsU3VwcGx5CQAAawAAAAMFAAAABGFyZzEFAAAABGFyZzIFAAAABGFyZzMEAAAACnNoYXJlSXNzdWUJAARCAAAABQUAAAAJc2hhcmVOYW1lBQAAABBzaGFyZURlc2NyaXB0aW9uBQAAABJzaGFyZUluaXRpYWxTdXBwbHkFAAAADXNoYXJlRGVjaW1hbHMGBAAAAAxzaGFyZUlzc3VlSWQJAAQ4AAAAAQUAAAAKc2hhcmVJc3N1ZQQAAAAJYmFzZUVudHJ5CQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAACmtleVZlcnNpb24FAAAAB3ZlcnNpb24JAARMAAAAAgkBAAAADEJvb2xlYW5FbnRyeQAAAAIFAAAACWtleUFjdGl2ZQYJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAALa2V5QXNzZXRJZEEFAAAADnBtdFN0ckFzc2V0SWRBCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAAC2tleUFzc2V0SWRCBQAAAA5wbXRTdHJBc3NldElkQgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAALa2V5QmFsYW5jZUEFAAAACnBtdEFtb3VudEEJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAC2tleUJhbGFuY2VCBQAAAApwbXRBbW91bnRCCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAA1rZXlDb21taXNzaW9uBQAAAApjb21taXNzaW9uCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABtrZXlDb21taXNzaW9uU2NhbGVEZWxpbWl0ZXIFAAAAGGNvbW1pc3Npb25TY2FsZURlbGltaXRlcgkABEwAAAACBQAAAApzaGFyZUlzc3VlCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAAD2tleVNoYXJlQXNzZXRJZAkAAlgAAAABBQAAAAxzaGFyZUlzc3VlSWQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAE2tleVNoYXJlQXNzZXRTdXBwbHkFAAAAEnNoYXJlSW5pdGlhbFN1cHBseQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAARa2V5SW5pdFBvb2xIZWlnaHQFAAAABmhlaWdodAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADBQAAAA13YWxsZXRBZGRyZXNzBQAAABJzaGFyZUluaXRpYWxTdXBwbHkFAAAADHNoYXJlSXNzdWVJZAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAAGWNvbWlzc2lvbkZvckluaXRhbGl6YXRpb24FAAAABFNXT1AFAAAAA25pbAUAAAAJYmFzZUVudHJ5CQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAABhrZWVwTGltaXRGb3JGaXJzdEhhcnZlc3QAAAABAAAACnNoYXJlTGltaXQDCQEAAAABIQAAAAEFAAAACGlzQWN0aXZlCQAAAgAAAAECAAAAH0RBcHAgaXMgaW5hY3RpdmUgYXQgdGhpcyBtb21lbnQDCQEAAAABIQAAAAEJAQAAAA9jb250YWluc0VsZW1lbnQAAAACCQAETAAAAAIFAAAADGFkbWluUHViS2V5MQkABEwAAAACBQAAAAxhZG1pblB1YktleTIJAARMAAAAAgUAAAAMYWRtaW5QdWJLZXkzCQAETAAAAAIFAAAAEmFkbWluUHViS2V5U3Rha2luZwUAAAADbmlsCAUAAAABaQAAAA9jYWxsZXJQdWJsaWNLZXkJAAACAAAAAQIAAAAhT25seSBhZG1pbiBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAtrU2hhcmVMaW1pdAUAAAAKc2hhcmVMaW1pdAUAAAADbmlsAAAAAWkBAAAAFnJlcGxlbmlzaFdpdGhUd29Ub2tlbnMAAAABAAAAEXNsaXBwYWdlVG9sZXJhbmNlBAAAAAtwbXRBc3NldElkQQgJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAHYXNzZXRJZAQAAAALcG10QXNzZXRJZEIICQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAABAAAAB2Fzc2V0SWQEAAAACnBtdEFtb3VudEEJAQAAABBkZWR1Y3RTdGFraW5nRmVlAAAAAwgJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAGYW1vdW50BQAAAAtwbXRBc3NldElkQQUAAAALcG10QXNzZXRJZEIEAAAACnBtdEFtb3VudEIJAQAAABBkZWR1Y3RTdGFraW5nRmVlAAAAAwgJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAEAAAAGYW1vdW50BQAAAAtwbXRBc3NldElkQgUAAAALcG10QXNzZXRJZEEDAwkAAAAAAAACBQAAAAhiYWxhbmNlQQAAAAAAAAAAAAkAAAAAAAACBQAAAAhiYWxhbmNlQgAAAAAAAAAAAAcEAAAADSR0MDEzMTIwMTMxOTcJAQAAAAxnZXRBc3NldEluZm8AAAABBQAAAAtwbXRBc3NldElkQQQAAAAOcG10U3RyQXNzZXRJZEEIBQAAAA0kdDAxMzEyMDEzMTk3AAAAAl8xBAAAAA1wbXRBc3NldE5hbWVBCAUAAAANJHQwMTMxMjAxMzE5NwAAAAJfMgQAAAAMcG10RGVjaW1hbHNBCAUAAAANJHQwMTMxMjAxMzE5NwAAAAJfMwQAAAANJHQwMTMyMDYxMzI4MwkBAAAADGdldEFzc2V0SW5mbwAAAAEFAAAAC3BtdEFzc2V0SWRCBAAAAA5wbXRTdHJBc3NldElkQggFAAAADSR0MDEzMjA2MTMyODMAAAACXzEEAAAADXBtdEFzc2V0TmFtZUIIBQAAAA0kdDAxMzIwNjEzMjgzAAAAAl8yBAAAAAxwbXREZWNpbWFsc0IIBQAAAA0kdDAxMzIwNjEzMjgzAAAAAl8zBAAAAAp0b2tlblJhdGlvCQAAawAAAAMJAABrAAAAAwUAAAAKYXNzZXRJbml0QQUAAAALc2NhbGVWYWx1ZTgFAAAACnBtdEFtb3VudEEFAAAAC3NjYWxlVmFsdWUzCQAAawAAAAMFAAAACmFzc2V0SW5pdEIFAAAAC3NjYWxlVmFsdWU4BQAAAApwbXRBbW91bnRCAwkAAAAAAAACBQAAAAtwbXRBc3NldElkQQUAAAALcG10QXNzZXRJZEIJAAACAAAAAQIAAAAYQXNzZXRzIG11c3QgYmUgZGlmZmVyZW50BAAAAA1zaGFyZURlY2ltYWxzCQAAaQAAAAIJAABkAAAAAgUAAAAMcG10RGVjaW1hbHNBBQAAAAxwbXREZWNpbWFsc0IAAAAAAAAAAAIEAAAAEnNoYXJlSW5pdGlhbFN1cHBseQkAAGsAAAADCQAAbAAAAAYFAAAACnBtdEFtb3VudEEFAAAADHBtdERlY2ltYWxzQQAAAAAAAAAABQAAAAAAAAAAAQUAAAAMcG10RGVjaW1hbHNBBQAAAARET1dOCQAAbAAAAAYFAAAACnBtdEFtb3VudEIFAAAADHBtdERlY2ltYWxzQgAAAAAAAAAABQAAAAAAAAAAAQUAAAAMcG10RGVjaW1hbHNCBQAAAARET1dOCQAAbAAAAAYAAAAAAAAAAAoAAAAAAAAAAAAFAAAADXNoYXJlRGVjaW1hbHMAAAAAAAAAAAAAAAAAAAAAAAAFAAAABERPV04DCQEAAAABIQAAAAEFAAAACGlzQWN0aXZlCQAAAgAAAAECAAAAH0RBcHAgaXMgaW5hY3RpdmUgYXQgdGhpcyBtb21lbnQDAwkAAGYAAAACAAAAAAAAAAAABQAAABFzbGlwcGFnZVRvbGVyYW5jZQYJAABmAAAAAgUAAAARc2xpcHBhZ2VUb2xlcmFuY2UFAAAAGnNsaXBwYWdlVG9sZXJhbmNlRGVsaW1pdGVyCQAAAgAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAKVNsaXBwYWdlIHRvbGVyYW5jZSBtdXN0IGJlIGJldHdlZW4gMCBhbmQgCQABpAAAAAEFAAAAGnNsaXBwYWdlVG9sZXJhbmNlRGVsaW1pdGVyAgAAABYgaW5jbHVzaXZlbHkuIEFjdHVhbDogCQABpAAAAAEFAAAAEXNsaXBwYWdlVG9sZXJhbmNlAwkBAAAAAiE9AAAAAgkAAZAAAAABCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAgkAAAIAAAABAgAAABxUd28gYXR0YWNoZWQgYXNzZXRzIGV4cGVjdGVkAwMJAABmAAAAAgkAAGkAAAACCQAAaAAAAAIFAAAAC3NjYWxlVmFsdWUzCQAAZQAAAAIFAAAAGnNsaXBwYWdlVG9sZXJhbmNlRGVsaW1pdGVyBQAAABFzbGlwcGFnZVRvbGVyYW5jZQUAAAAac2xpcHBhZ2VUb2xlcmFuY2VEZWxpbWl0ZXIFAAAACnRva2VuUmF0aW8GCQAAZgAAAAIFAAAACnRva2VuUmF0aW8JAABpAAAAAgkAAGgAAAACBQAAAAtzY2FsZVZhbHVlMwkAAGQAAAACBQAAABpzbGlwcGFnZVRvbGVyYW5jZURlbGltaXRlcgUAAAARc2xpcHBhZ2VUb2xlcmFuY2UFAAAAGnNsaXBwYWdlVG9sZXJhbmNlRGVsaW1pdGVyCQAAAgAAAAECAAAAPUluY29ycmVjdCBhc3NldHMgYW1vdW50OiBhbW91bnRzIG11c3QgaGF2ZSB0aGUgY29udHJhY3QgcmF0aW8DAwkBAAAAAiE9AAAAAgUAAAALcG10QXNzZXRJZEEFAAAACGFzc2V0SWRBBgkBAAAAAiE9AAAAAgUAAAALcG10QXNzZXRJZEIFAAAACGFzc2V0SWRCCQAAAgAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAJUluY29ycmVjdCBhc3NldHMgYXR0YWNoZWQuIEV4cGVjdGVkOiAFAAAAC3N0ckFzc2V0SWRBAgAAAAUgYW5kIAUAAAALc3RyQXNzZXRJZEIDCQAAAAAAAAIFAAAAEnNoYXJlSW5pdGlhbFN1cHBseQAAAAAAAAAAAAkAAAIAAAABAgAAAB1Ub28gc21hbGwgYW1vdW50IHRvIHJlcGxlbmlzaAMJAQAAAAEhAAAAAQUAAAAQaGFzRW5vdWdoQmFsYW5jZQkABE4AAAACCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAAKcG10QW1vdW50QQUAAAALcG10QXNzZXRJZEEJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyBQAAAApwbXRBbW91bnRCBQAAAAtwbXRBc3NldElkQgUAAAADbmlsCQEAAAARc3VzcGVuZFN1c3BpY2lvdXMAAAAACQAETAAAAAIJAQAAAAdSZWlzc3VlAAAAAwUAAAAMc2hhcmVBc3NldElkBQAAABJzaGFyZUluaXRpYWxTdXBwbHkGCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAtrZXlCYWxhbmNlQQUAAAAKcG10QW1vdW50QQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAALa2V5QmFsYW5jZUIFAAAACnBtdEFtb3VudEIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAE2tleVNoYXJlQXNzZXRTdXBwbHkFAAAAEnNoYXJlSW5pdGlhbFN1cHBseQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAAEnNoYXJlSW5pdGlhbFN1cHBseQUAAAAMc2hhcmVBc3NldElkBQAAAANuaWwEAAAACnRva2VuUmF0aW8JAABrAAAAAwkAAGsAAAADBQAAAAhiYWxhbmNlQQUAAAALc2NhbGVWYWx1ZTgFAAAACnBtdEFtb3VudEEFAAAAC3NjYWxlVmFsdWUzCQAAawAAAAMFAAAACGJhbGFuY2VCBQAAAAtzY2FsZVZhbHVlOAUAAAAKcG10QW1vdW50QgQAAAATcmF0aW9TaGFyZVRva2Vuc0luQQkAAGsAAAADBQAAAApwbXRBbW91bnRBBQAAAAtzY2FsZVZhbHVlOAUAAAAIYmFsYW5jZUEEAAAAE3JhdGlvU2hhcmVUb2tlbnNJbkIJAABrAAAAAwUAAAAKcG10QW1vdW50QgUAAAALc2NhbGVWYWx1ZTgFAAAACGJhbGFuY2VCBAAAABVzaGFyZVRva2VuVG9QYXlBbW91bnQJAABrAAAAAwkAAZcAAAABCQAETAAAAAIFAAAAE3JhdGlvU2hhcmVUb2tlbnNJbkEJAARMAAAAAgUAAAATcmF0aW9TaGFyZVRva2Vuc0luQgUAAAADbmlsBQAAABBzaGFyZUFzc2V0U3VwcGx5BQAAAAtzY2FsZVZhbHVlOAMJAQAAAAEhAAAAAQUAAAAIaXNBY3RpdmUJAAACAAAAAQIAAAAfREFwcCBpcyBpbmFjdGl2ZSBhdCB0aGlzIG1vbWVudAMDCQAAZgAAAAIAAAAAAAAAAAAFAAAAEXNsaXBwYWdlVG9sZXJhbmNlBgkAAGYAAAACBQAAABFzbGlwcGFnZVRvbGVyYW5jZQUAAAAac2xpcHBhZ2VUb2xlcmFuY2VEZWxpbWl0ZXIJAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAApU2xpcHBhZ2UgdG9sZXJhbmNlIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAJAAGkAAAAAQUAAAAac2xpcHBhZ2VUb2xlcmFuY2VEZWxpbWl0ZXICAAAAFiBpbmNsdXNpdmVseS4gQWN0dWFsOiAJAAGkAAAAAQUAAAARc2xpcHBhZ2VUb2xlcmFuY2UDCQEAAAACIT0AAAACCQABkAAAAAEIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAACCQAAAgAAAAECAAAAHFR3byBhdHRhY2hlZCBhc3NldHMgZXhwZWN0ZWQDAwkBAAAAAiE9AAAAAgUAAAALcG10QXNzZXRJZEEFAAAACGFzc2V0SWRBBgkBAAAAAiE9AAAAAgUAAAALcG10QXNzZXRJZEIFAAAACGFzc2V0SWRCCQAAAgAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAJUluY29ycmVjdCBhc3NldHMgYXR0YWNoZWQuIEV4cGVjdGVkOiAFAAAAC3N0ckFzc2V0SWRBAgAAAAUgYW5kIAUAAAALc3RyQXNzZXRJZEIDAwkAAGYAAAACCQAAaQAAAAIJAABoAAAAAgUAAAALc2NhbGVWYWx1ZTMJAABlAAAAAgUAAAAac2xpcHBhZ2VUb2xlcmFuY2VEZWxpbWl0ZXIFAAAAEXNsaXBwYWdlVG9sZXJhbmNlBQAAABpzbGlwcGFnZVRvbGVyYW5jZURlbGltaXRlcgUAAAAKdG9rZW5SYXRpbwYJAABmAAAAAgUAAAAKdG9rZW5SYXRpbwkAAGkAAAACCQAAaAAAAAIFAAAAC3NjYWxlVmFsdWUzCQAAZAAAAAIFAAAAGnNsaXBwYWdlVG9sZXJhbmNlRGVsaW1pdGVyBQAAABFzbGlwcGFnZVRvbGVyYW5jZQUAAAAac2xpcHBhZ2VUb2xlcmFuY2VEZWxpbWl0ZXIJAAACAAAAAQIAAAA9SW5jb3JyZWN0IGFzc2V0cyBhbW91bnQ6IGFtb3VudHMgbXVzdCBoYXZlIHRoZSBjb250cmFjdCByYXRpbwMJAAAAAAAAAgUAAAAVc2hhcmVUb2tlblRvUGF5QW1vdW50AAAAAAAAAAAACQAAAgAAAAECAAAAHVRvbyBzbWFsbCBhbW91bnQgdG8gcmVwbGVuaXNoAwkBAAAAASEAAAABBQAAABBoYXNFbm91Z2hCYWxhbmNlCQAETgAAAAIJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyBQAAAApwbXRBbW91bnRBBQAAAAtwbXRBc3NldElkQQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAACnBtdEFtb3VudEIFAAAAC3BtdEFzc2V0SWRCBQAAAANuaWwJAQAAABFzdXNwZW5kU3VzcGljaW91cwAAAAAJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAC2tleUJhbGFuY2VBCQAAZAAAAAIFAAAACGJhbGFuY2VBBQAAAApwbXRBbW91bnRBCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAtrZXlCYWxhbmNlQgkAAGQAAAACBQAAAAhiYWxhbmNlQgUAAAAKcG10QW1vdW50QgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAATa2V5U2hhcmVBc3NldFN1cHBseQkAAGQAAAACBQAAABBzaGFyZUFzc2V0U3VwcGx5BQAAABVzaGFyZVRva2VuVG9QYXlBbW91bnQJAARMAAAAAgkBAAAAB1JlaXNzdWUAAAADBQAAAAxzaGFyZUFzc2V0SWQFAAAAFXNoYXJlVG9rZW5Ub1BheUFtb3VudAYJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyBQAAABVzaGFyZVRva2VuVG9QYXlBbW91bnQFAAAADHNoYXJlQXNzZXRJZAUAAAADbmlsAAAAAWkBAAAACHdpdGhkcmF3AAAAAAQAAAANJHQwMTc2ODIxNzgzMgkABRQAAAACCAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAZhbW91bnQICQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAAAAAAB2Fzc2V0SWQEAAAACXBtdEFtb3VudAgFAAAADSR0MDE3NjgyMTc4MzIAAAACXzEEAAAACnBtdEFzc2V0SWQIBQAAAA0kdDAxNzY4MjE3ODMyAAAAAl8yBAAAAAxhbW91bnRUb1BheUEJAQAAABBkZWR1Y3RTdGFraW5nRmVlAAAAAwkAAGsAAAADBQAAAAlwbXRBbW91bnQFAAAACGJhbGFuY2VBBQAAABBzaGFyZUFzc2V0U3VwcGx5BQAAAAhhc3NldElkQQUAAAAIYXNzZXRJZEIEAAAADGFtb3VudFRvUGF5QgkBAAAAEGRlZHVjdFN0YWtpbmdGZWUAAAADCQAAawAAAAMFAAAACXBtdEFtb3VudAUAAAAIYmFsYW5jZUIFAAAAEHNoYXJlQXNzZXRTdXBwbHkFAAAACGFzc2V0SWRCBQAAAAhhc3NldElkQQMJAQAAAAEhAAAAAQUAAAAIaXNBY3RpdmUJAAACAAAAAQIAAAAfREFwcCBpcyBpbmFjdGl2ZSBhdCB0aGlzIG1vbWVudAMJAQAAAAIhPQAAAAIJAAGQAAAAAQgFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAEJAAACAAAAAQIAAAAdT25lIGF0dGFjaGVkIHBheW1lbnQgZXhwZWN0ZWQDCQEAAAACIT0AAAACBQAAAApwbXRBc3NldElkBQAAAAxzaGFyZUFzc2V0SWQJAAACAAAAAQkAASwAAAACAgAAACRJbmNvcnJlY3QgYXNzZXQgYXR0YWNoZWQuIEV4cGVjdGVkOiAJAAJYAAAAAQUAAAAMc2hhcmVBc3NldElkAwkBAAAAASEAAAABBQAAABBoYXNFbm91Z2hCYWxhbmNlCQAETgAAAAIJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyBQAAAAlwbXRBbW91bnQFAAAACnBtdEFzc2V0SWQFAAAAA25pbAkBAAAAEXN1c3BlbmRTdXNwaWNpb3VzAAAAAAMDCQAAZgAAAAIFAAAADGFtb3VudFRvUGF5QQUAAAARYXZhaWxhYmxlQmFsYW5jZUEGCQAAZgAAAAIFAAAADGFtb3VudFRvUGF5QgUAAAARYXZhaWxhYmxlQmFsYW5jZUIJAQAAACJ0aHJvd0luc3VmZmljaWVudEF2YWlsYWJsZUJhbGFuY2VzAAAAAgUAAAAMYW1vdW50VG9QYXlBBQAAAAxhbW91bnRUb1BheUIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAC2tleUJhbGFuY2VBCQAAZQAAAAIFAAAACGJhbGFuY2VBBQAAAAxhbW91bnRUb1BheUEJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAC2tleUJhbGFuY2VCCQAAZQAAAAIFAAAACGJhbGFuY2VCBQAAAAxhbW91bnRUb1BheUIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAE2tleVNoYXJlQXNzZXRTdXBwbHkJAABlAAAAAgUAAAAQc2hhcmVBc3NldFN1cHBseQUAAAAJcG10QW1vdW50CQAETAAAAAIJAQAAAARCdXJuAAAAAgUAAAAMc2hhcmVBc3NldElkBQAAAAlwbXRBbW91bnQJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyBQAAAAxhbW91bnRUb1BheUEFAAAACGFzc2V0SWRBCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAAMYW1vdW50VG9QYXlCBQAAAAhhc3NldElkQgUAAAADbmlsAAAAAWkBAAAACGV4Y2hhbmdlAAAAAQAAABJtaW5BbW91bnRUb1JlY2VpdmUEAAAADSR0MDE5MDU4MTkxMzMJAAUUAAAAAggJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAGYW1vdW50CAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAdhc3NldElkBAAAAAlwbXRBbW91bnQIBQAAAA0kdDAxOTA1ODE5MTMzAAAAAl8xBAAAAApwbXRBc3NldElkCAUAAAANJHQwMTkwNTgxOTEzMwAAAAJfMgoBAAAADWNhbGN1bGF0ZUZlZXMAAAACAAAACXRva2VuRnJvbQAAAAd0b2tlblRvBAAAABBhbW91bnRXaXRob3V0RmVlCQAAawAAAAMFAAAAB3Rva2VuVG8FAAAACXBtdEFtb3VudAkAAGQAAAACBQAAAAlwbXRBbW91bnQFAAAACXRva2VuRnJvbQQAAAANYW1vdW50V2l0aEZlZQkAAGsAAAADBQAAABBhbW91bnRXaXRob3V0RmVlCQAAZQAAAAIFAAAAGGNvbW1pc3Npb25TY2FsZURlbGltaXRlcgUAAAAKY29tbWlzc2lvbgUAAAAYY29tbWlzc2lvblNjYWxlRGVsaW1pdGVyBAAAABBnb3Zlcm5hbmNlUmV3YXJkCQAAawAAAAMFAAAAEGFtb3VudFdpdGhvdXRGZWUFAAAAFGNvbW1pc3Npb25Hb3Zlcm5hbmNlBQAAABhjb21taXNzaW9uU2NhbGVEZWxpbWl0ZXIDCQAAZgAAAAIFAAAAEm1pbkFtb3VudFRvUmVjZWl2ZQUAAAANYW1vdW50V2l0aEZlZQkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAB1DYWxjdWxhdGVkIGFtb3VudCB0byByZWNlaXZlIAkAAaQAAAABBQAAAA1hbW91bnRXaXRoRmVlAgAAACAgaXMgbGVzcyB0aGFuIHNwZWNpZmllZCBtaW5pbXVtIAkAAaQAAAABBQAAABJtaW5BbW91bnRUb1JlY2VpdmUJAAUVAAAAAwUAAAAQYW1vdW50V2l0aG91dEZlZQUAAAANYW1vdW50V2l0aEZlZQUAAAAQZ292ZXJuYW5jZVJld2FyZAMJAQAAAAEhAAAAAQUAAAAIaXNBY3RpdmUJAAACAAAAAQIAAAAfREFwcCBpcyBpbmFjdGl2ZSBhdCB0aGlzIG1vbWVudAMDCQAAAAAAAAIFAAAACGJhbGFuY2VBAAAAAAAAAAAABgkAAAAAAAACBQAAAAhiYWxhbmNlQgAAAAAAAAAAAAkAAAIAAAABAgAAACBDYW4ndCBleGNoYW5nZSB3aXRoIHplcm8gYmFsYW5jZQMJAABnAAAAAgAAAAAAAAAAAAUAAAASbWluQW1vdW50VG9SZWNlaXZlCQAAAgAAAAEJAAEsAAAAAgIAAAA0TWluaW1hbCBhbW91bnQgdG8gcmVjZWl2ZSBtdXN0IGJlIHBvc2l0aXZlLiBBY3R1YWw6IAkAAaQAAAABBQAAABJtaW5BbW91bnRUb1JlY2VpdmUDCQEAAAACIT0AAAACCQABkAAAAAEIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAABCQAAAgAAAAECAAAAHU9uZSBhdHRhY2hlZCBwYXltZW50IGV4cGVjdGVkAwkBAAAAASEAAAABBQAAABBoYXNFbm91Z2hCYWxhbmNlCQAETgAAAAIJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyBQAAAAlwbXRBbW91bnQFAAAACnBtdEFzc2V0SWQFAAAAA25pbAkBAAAAEXN1c3BlbmRTdXNwaWNpb3VzAAAAAAMJAAAAAAAAAgUAAAAKcG10QXNzZXRJZAUAAAAIYXNzZXRJZEEEAAAAC2Fzc2V0SWRTZW5kBQAAAAhhc3NldElkQgQAAAANJHQwMjA0MDcyMDQ5OAkBAAAADWNhbGN1bGF0ZUZlZXMAAAACBQAAAAhiYWxhbmNlQQUAAAAIYmFsYW5jZUIEAAAAEGFtb3VudFdpdGhvdXRGZWUIBQAAAA0kdDAyMDQwNzIwNDk4AAAAAl8xBAAAAA1hbW91bnRXaXRoRmVlCAUAAAANJHQwMjA0MDcyMDQ5OAAAAAJfMgQAAAAQZ292ZXJuYW5jZVJld2FyZAgFAAAADSR0MDIwNDA3MjA0OTgAAAACXzMEAAAAC25ld0JhbGFuY2VBCQAAZAAAAAIFAAAACGJhbGFuY2VBBQAAAAlwbXRBbW91bnQEAAAAC25ld0JhbGFuY2VCCQAAZQAAAAIJAABlAAAAAgUAAAAIYmFsYW5jZUIFAAAADWFtb3VudFdpdGhGZWUFAAAAEGdvdmVybmFuY2VSZXdhcmQDAwkAAGcAAAACBQAAAA1zdGFrZWRBbW91bnRBBQAAAAtuZXdCYWxhbmNlQQYJAABnAAAAAgUAAAANc3Rha2VkQW1vdW50QgUAAAALbmV3QmFsYW5jZUIJAQAAACF0aHJvd0luc3VmZmljaWVudEF2YWlsYWJsZUJhbGFuY2UAAAADBQAAAA1hbW91bnRXaXRoRmVlBQAAABFhdmFpbGFibGVCYWxhbmNlQgUAAAAKYXNzZXROYW1lQgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAALa2V5QmFsYW5jZUEFAAAAC25ld0JhbGFuY2VBCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAtrZXlCYWxhbmNlQgUAAAALbmV3QmFsYW5jZUIJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyBQAAAA1hbW91bnRXaXRoRmVlBQAAAAthc3NldElkU2VuZAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADBQAAAA13YWxsZXRBZGRyZXNzBQAAABBnb3Zlcm5hbmNlUmV3YXJkBQAAAAthc3NldElkU2VuZAUAAAADbmlsAwkAAAAAAAACBQAAAApwbXRBc3NldElkBQAAAAhhc3NldElkQgQAAAALYXNzZXRJZFNlbmQFAAAACGFzc2V0SWRBBAAAAA0kdDAyMTMxNzIxNDA4CQEAAAANY2FsY3VsYXRlRmVlcwAAAAIFAAAACGJhbGFuY2VCBQAAAAhiYWxhbmNlQQQAAAAQYW1vdW50V2l0aG91dEZlZQgFAAAADSR0MDIxMzE3MjE0MDgAAAACXzEEAAAADWFtb3VudFdpdGhGZWUIBQAAAA0kdDAyMTMxNzIxNDA4AAAAAl8yBAAAABBnb3Zlcm5hbmNlUmV3YXJkCAUAAAANJHQwMjEzMTcyMTQwOAAAAAJfMwQAAAALbmV3QmFsYW5jZUEJAABlAAAAAgkAAGUAAAACBQAAAAhiYWxhbmNlQQUAAAANYW1vdW50V2l0aEZlZQUAAAAQZ292ZXJuYW5jZVJld2FyZAQAAAALbmV3QmFsYW5jZUIJAABkAAAAAgUAAAAIYmFsYW5jZUIFAAAACXBtdEFtb3VudAMDCQAAZwAAAAIFAAAADXN0YWtlZEFtb3VudEEFAAAAC25ld0JhbGFuY2VBBgkAAGcAAAACBQAAAA1zdGFrZWRBbW91bnRCBQAAAAtuZXdCYWxhbmNlQgkBAAAAIXRocm93SW5zdWZmaWNpZW50QXZhaWxhYmxlQmFsYW5jZQAAAAMFAAAADWFtb3VudFdpdGhGZWUFAAAAEWF2YWlsYWJsZUJhbGFuY2VBBQAAAAphc3NldE5hbWVBCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAtrZXlCYWxhbmNlQQUAAAALbmV3QmFsYW5jZUEJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAC2tleUJhbGFuY2VCBQAAAAtuZXdCYWxhbmNlQgkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAADWFtb3VudFdpdGhGZWUFAAAAC2Fzc2V0SWRTZW5kCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAADXdhbGxldEFkZHJlc3MFAAAAEGdvdmVybmFuY2VSZXdhcmQFAAAAC2Fzc2V0SWRTZW5kBQAAAANuaWwJAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAkSW5jb3JyZWN0IGFzc2V0IGF0dGFjaGVkLiBFeHBlY3RlZDogBQAAAAtzdHJBc3NldElkQQIAAAAEIG9yIAUAAAALc3RyQXNzZXRJZEIAAAABaQEAAAAIc2h1dGRvd24AAAAAAwkBAAAAASEAAAABBQAAAAhpc0FjdGl2ZQkAAAIAAAABCQABLAAAAAICAAAAIkRBcHAgaXMgYWxyZWFkeSBzdXNwZW5kZWQuIENhdXNlOiAJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQdAAAAAgUAAAAEdGhpcwUAAAAIa2V5Q2F1c2UCAAAAGnRoZSBjYXVzZSB3YXNuJ3Qgc3BlY2lmaWVkAwkBAAAAASEAAAABCQEAAAAPY29udGFpbnNFbGVtZW50AAAAAgkABEwAAAACBQAAAAxhZG1pblB1YktleTEJAARMAAAAAgUAAAAMYWRtaW5QdWJLZXkyCQAETAAAAAIFAAAADGFkbWluUHViS2V5MwkABEwAAAACBQAAABRhZG1pblB1YktleVN0YXJ0U3RvcAUAAAADbmlsCAUAAAABaQAAAA9jYWxsZXJQdWJsaWNLZXkJAAACAAAAAQIAAAAhT25seSBhZG1pbiBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uCQEAAAAHc3VzcGVuZAAAAAECAAAAD1BhdXNlZCBieSBhZG1pbgAAAAFpAQAAAAhhY3RpdmF0ZQAAAAADBQAAAAhpc0FjdGl2ZQkAAAIAAAABAgAAABZEQXBwIGlzIGFscmVhZHkgYWN0aXZlAwkBAAAAASEAAAABCQEAAAAPY29udGFpbnNFbGVtZW50AAAAAgkABEwAAAACBQAAAAxhZG1pblB1YktleTEJAARMAAAAAgUAAAAMYWRtaW5QdWJLZXkyCQAETAAAAAIFAAAADGFkbWluUHViS2V5MwkABEwAAAACBQAAABRhZG1pblB1YktleVN0YXJ0U3RvcAUAAAADbmlsCAUAAAABaQAAAA9jYWxsZXJQdWJsaWNLZXkJAAACAAAAAQIAAAAhT25seSBhZG1pbiBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uCQAETAAAAAIJAQAAAAxCb29sZWFuRW50cnkAAAACBQAAAAlrZXlBY3RpdmUGCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEFAAAACGtleUNhdXNlBQAAAANuaWwAAAABaQEAAAAZdGFrZUludG9BY2NvdW50RXh0cmFGdW5kcwAAAAEAAAALYW1vdW50TGVhdmUEAAAAHXVuY291bnRhYmxlQW1vdW50RW5yb2xsQXNzZXRBCQAAZQAAAAIFAAAAGWFjY291bnRCYWxhbmNlV2l0aFN0YWtlZEEFAAAACGJhbGFuY2VBBAAAAB11bmNvdW50YWJsZUFtb3VudEVucm9sbEFzc2V0QgkAAGUAAAACBQAAABlhY2NvdW50QmFsYW5jZVdpdGhTdGFrZWRCBQAAAAhiYWxhbmNlQgQAAAANYW1vdW50RW5yb2xsQQkAAGUAAAACBQAAAB11bmNvdW50YWJsZUFtb3VudEVucm9sbEFzc2V0QQMJAAAAAAAAAgUAAAAIYXNzZXRJZEEFAAAABHVuaXQFAAAAC2Ftb3VudExlYXZlAAAAAAAAAAAABAAAAA1hbW91bnRFbnJvbGxCCQAAZQAAAAIFAAAAHXVuY291bnRhYmxlQW1vdW50RW5yb2xsQXNzZXRCAwkAAAAAAAACBQAAAAhhc3NldElkQgUAAAAEdW5pdAUAAAALYW1vdW50TGVhdmUAAAAAAAAAAAADCQEAAAABIQAAAAEFAAAACGlzQWN0aXZlCQAAAgAAAAECAAAAH0RBcHAgaXMgaW5hY3RpdmUgYXQgdGhpcyBtb21lbnQDCQEAAAACIT0AAAACCAUAAAABaQAAAAZjYWxsZXIFAAAABHRoaXMJAAACAAAAAQIAAAArT25seSB0aGUgREFwcCBpdHNlbGYgY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgMJAABmAAAAAgAAAAAAAAAAAAUAAAALYW1vdW50TGVhdmUJAAACAAAAAQkAASwAAAACAgAAADNBcmd1bWVudCAnYW1vdW50TGVhdmUnIGNhbm5vdCBiZSBuZWdhdGl2ZS4gQWN0dWFsOiAJAAGkAAAAAQUAAAALYW1vdW50TGVhdmUDAwkAAGYAAAACAAAAAAAAAAAABQAAAB11bmNvdW50YWJsZUFtb3VudEVucm9sbEFzc2V0QQYJAABmAAAAAgAAAAAAAAAAAAUAAAAddW5jb3VudGFibGVBbW91bnRFbnJvbGxBc3NldEIJAQAAAAdzdXNwZW5kAAAAAQIAAAAWRW5yb2xsIGFtb3VudCBuZWdhdGl2ZQMDCQAAZgAAAAIAAAAAAAAAAAAFAAAADWFtb3VudEVucm9sbEEGCQAAZgAAAAIAAAAAAAAAAAAFAAAADWFtb3VudEVucm9sbEIJAAACAAAAAQIAAAAVVG9vIGxhcmdlIGFtb3VudExlYXZlCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAtrZXlCYWxhbmNlQQkAAGQAAAACBQAAAAhiYWxhbmNlQQUAAAANYW1vdW50RW5yb2xsQQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAALa2V5QmFsYW5jZUIJAABkAAAAAgUAAAAIYmFsYW5jZUIFAAAADWFtb3VudEVucm9sbEIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgIAAAAMbGFzdF9pbmNvbWVfBQAAAAtzdHJBc3NldElkQQUAAAANYW1vdW50RW5yb2xsQQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACAgAAAAxsYXN0X2luY29tZV8FAAAAC3N0ckFzc2V0SWRCBQAAAA1hbW91bnRFbnJvbGxCBQAAAANuaWwAAAABaQEAAAASZW5hYmxlRmlyc3RIYXJ2ZXN0AAAAAAkABEwAAAACCQEAAAAMQm9vbGVhbkVudHJ5AAAAAgUAAAAPa2V5Rmlyc3RIYXJ2ZXN0BgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAVa2V5Rmlyc3RIYXJ2ZXN0SGVpZ2h0CQAAZAAAAAIFAAAAC3N0YXJ0SGVpZ2h0CQAAaAAAAAIFAAAAFWZpcnN0SGFydmVzdEVuZFBlcmlvZAUAAAAMcGVyaW9kTGVuZ3RoBQAAAANuaWwAAAABAAAAAnR4AQAAAAZ2ZXJpZnkAAAAABAAAABNtdWx0aVNpZ25lZEJ5QWRtaW5zBAAAABJh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", "height": 1646539, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: DbHL2yWygMe7517Buhf8LkGTo1EDgzATCZNkZPhMt4f8 Next: C3ZFD5MvuhYXhGkZXn3KvJLy7UXnf2XtpkP3wN4itE2X Diff:
OldNewDifferences
4343
4444 let u = "first_harvest_height"
4545
46-let v = "admin_pub_1"
46+let v = "asset_priority_"
4747
48-let w = "admin_pub_2"
48+let w = "script_hash_cpmm"
4949
50-let x = "admin_pub_3"
50+let x = "init_pool_height_"
5151
52-let y = Address(base58'3NBBWfzZtZtszaXbitTKnrB2xXwv26Bn7H9')
52+let y = "admin_pub_1"
5353
54-func z (A) = {
55- let B = getString(y, A)
56- if ($isInstanceOf(B, "String"))
54+let z = "admin_pub_2"
55+
56+let A = "admin_pub_3"
57+
58+let B = Address(base58'3NBBWfzZtZtszaXbitTKnrB2xXwv26Bn7H9')
59+
60+func C (D) = {
61+ let E = getString(B, D)
62+ if ($isInstanceOf(E, "String"))
5763 then {
58- let C = B
59- fromBase58String(C)
64+ let F = E
65+ fromBase58String(F)
6066 }
6167 else {
62- let D = B
68+ let G = E
6369 throw("Admin public key is empty")
6470 }
6571 }
6672
6773
68-let E = z(v)
74+let H = C(y)
6975
70-let F = z(w)
76+let I = C(z)
7177
72-let G = z(x)
78+let J = C(A)
7379
74-let H = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
80+let K = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
7581
76-let I = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
82+let L = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
7783
78-let J = Address(base58'3NAGTtZz6WpupSN89NZD5rMZwwziZEg4Kx4')
84+let M = Address(base58'3NAGTtZz6WpupSN89NZD5rMZwwziZEg4Kx4')
7985
80-let K = Address(base58'3MrJgdL1GniipErHy44YF9idzLaUL2iX5DQ')
86+let N = Address(base58'3MrJgdL1GniipErHy44YF9idzLaUL2iX5DQ')
8187
82-let L = base58'8UrfDVd5GreeUwm7uPk7eYz1eMv376kzR52C6sANPkwS'
88+let O = base58'8UrfDVd5GreeUwm7uPk7eYz1eMv376kzR52C6sANPkwS'
8389
84-let M = base58'36mg8NZTaFRDygiVwb8uBnLR51hetJruUCZcxhaVcHj9'
90+let P = base58'36mg8NZTaFRDygiVwb8uBnLR51hetJruUCZcxhaVcHj9'
8591
86-let N = base58'2HAJrwa8q4SxBx9cHYaBTQdBjdk5wwqdof7ccpAx2uhZ'
92+let Q = base58'2HAJrwa8q4SxBx9cHYaBTQdBjdk5wwqdof7ccpAx2uhZ'
8793
88-let O = base58'ECBCkHS68DckpBrzLeoRgYbFg7sCVqR176mPqbXsj9pA'
94+let R = base58'ECBCkHS68DckpBrzLeoRgYbFg7sCVqR176mPqbXsj9pA'
8995
90-let P = Address(base58'3N6q7sCGSSLBUXDdjBdYGTJbZGZfhhh8cNg')
96+let S = Address(base58'3N6q7sCGSSLBUXDdjBdYGTJbZGZfhhh8cNg')
9197
92-let Q = Address(base58'3MyVqAbmKWh339gF6hy8faWw1jGeTV2wnGE')
98+let T = Address(base58'3MyVqAbmKWh339gF6hy8faWw1jGeTV2wnGE')
9399
94-let R = Address(base58'3N77kfPbQyjXWpDALX3xjKw3iEGMWEctV37')
100+let U = Address(base58'3N77kfPbQyjXWpDALX3xjKw3iEGMWEctV37')
95101
96-let S = Address(base58'3Mye9wVR7d2mc6Y5ZJTu11svzgUQ7o8H9dA')
102+let V = Address(base58'3Mye9wVR7d2mc6Y5ZJTu11svzgUQ7o8H9dA')
97103
98-let T = 270000
104+let W = 270000
99105
100-let U = 234000
106+let X = 234000
101107
102-let V = valueOrErrorMessage(getInteger(K, r), "Empty kBasePeriod")
108+let Y = valueOrErrorMessage(getInteger(N, r), "Empty kBasePeriod")
103109
104-let W = valueOrErrorMessage(getInteger(K, t), "Empty kStartHeight")
110+let Z = valueOrErrorMessage(getInteger(N, t), "Empty kStartHeight")
105111
106-let X = valueOrErrorMessage(getInteger(K, s), "Empty kPeriodLength")
112+let aa = valueOrErrorMessage(getInteger(N, s), "Empty kPeriodLength")
107113
108-let Y = ((V + ((height - W) / X)) + 3)
114+let ab = ((Y + ((height - Z) / aa)) + 3)
109115
110-let Z = getBooleanValue(this, c)
116+let ac = getBooleanValue(this, c)
111117
112-let aa = getStringValue(this, d)
118+let ad = getStringValue(this, d)
113119
114-let ab = getStringValue(this, e)
120+let ae = getStringValue(this, e)
115121
116-let ac = if ((aa == "WAVES"))
122+let af = if ((ad == "WAVES"))
117123 then unit
118- else fromBase58String(aa)
124+ else fromBase58String(ad)
119125
120-let ad = if ((ab == "WAVES"))
126+let ag = if ((ae == "WAVES"))
121127 then unit
122- else fromBase58String(ab)
128+ else fromBase58String(ae)
123129
124-let ae = {
125- let B = ac
126- if ($isInstanceOf(B, "ByteVector"))
130+let ah = {
131+ let E = af
132+ if ($isInstanceOf(E, "ByteVector"))
127133 then {
128- let af = B
129- value(assetInfo(af)).name
134+ let ai = E
135+ value(assetInfo(ai)).name
130136 }
131- else if ($isInstanceOf(B, "Unit"))
137+ else if ($isInstanceOf(E, "Unit"))
132138 then {
133- let ag = B
139+ let aj = E
134140 "WAVES"
135141 }
136142 else throw("Match error")
137143 }
138144
139-let ah = {
140- let B = ad
141- if ($isInstanceOf(B, "ByteVector"))
145+let ak = {
146+ let E = ag
147+ if ($isInstanceOf(E, "ByteVector"))
142148 then {
143- let af = B
144- value(assetInfo(af)).name
149+ let ai = E
150+ value(assetInfo(ai)).name
145151 }
146- else if ($isInstanceOf(B, "Unit"))
152+ else if ($isInstanceOf(E, "Unit"))
147153 then {
148- let ag = B
154+ let aj = E
149155 "WAVES"
150156 }
151157 else throw("Match error")
152158 }
153159
154-let ai = getIntegerValue(this, f)
160+let al = getIntegerValue(this, f)
155161
156-let aj = getIntegerValue(this, g)
162+let am = getIntegerValue(this, g)
157163
158-let ak = fromBase58String(getStringValue(this, j))
164+let an = fromBase58String(getStringValue(this, j))
159165
160-let al = getIntegerValue(this, k)
166+let ao = getIntegerValue(this, k)
161167
162-let am = 3000
168+let ap = 3000
163169
164-let an = 1200
170+let aq = 1200
165171
166-let ao = 1000000
172+let ar = 1000000
167173
168-let ap = 1000
174+let as = 1000
169175
170-let aq = 100000000
176+let at = 100000000
171177
172-let ar = 1000
178+let au = 1000
173179
174-let as = 8
180+let av = 8
175181
176-func at (au) = {
177- let B = au
178- if ($isInstanceOf(B, "ByteVector"))
182+let aw = 1000000000
183+
184+func ax (ay) = {
185+ let E = ay
186+ if ($isInstanceOf(E, "ByteVector"))
179187 then {
180- let af = B
181- assetBalance(this, af)
188+ let ai = E
189+ assetBalance(this, ai)
182190 }
183- else if ($isInstanceOf(B, "Unit"))
191+ else if ($isInstanceOf(E, "Unit"))
184192 then {
185- let ag = B
193+ let aj = E
186194 wavesBalance(this).available
187195 }
188196 else throw("Match error")
189197 }
190198
191199
192-func av (au) = {
193- let aw = {
194- let B = au
195- if ($isInstanceOf(B, "ByteVector"))
200+func az (ay) = {
201+ let aA = {
202+ let E = ay
203+ if ($isInstanceOf(E, "ByteVector"))
196204 then {
197- let ax = B
198- if (if ((ax == L))
205+ let aB = E
206+ if (if ((aB == O))
199207 then true
200- else (ax == M))
201- then getInteger(P, ((("rpd_balance_" + toBase58String(ax)) + "_") + toString(this)))
202- else if ((ax == O))
203- then getInteger(Q, ((("%s%s%s__stakingBalance__" + toBase58String(ax)) + "__") + toString(this)))
208+ else (aB == P))
209+ then getInteger(S, ((("rpd_balance_" + toBase58String(aB)) + "_") + toString(this)))
210+ else if ((aB == R))
211+ then getInteger(T, ((("%s%s%s__stakingBalance__" + toBase58String(aB)) + "__") + toString(this)))
204212 else 0
205213 }
206- else if ($isInstanceOf(B, "Unit"))
214+ else if ($isInstanceOf(E, "Unit"))
207215 then 0
208216 else throw("Match error")
209217 }
210- let B = aw
211- if ($isInstanceOf(B, "Int"))
218+ let E = aA
219+ if ($isInstanceOf(E, "Int"))
212220 then {
213- let ay = B
214- ay
221+ let aC = E
222+ aC
215223 }
216224 else 0
217225 }
218226
219227
220-let az = av(ac)
228+func aD (ay) = {
229+ let E = ay
230+ if ($isInstanceOf(E, "ByteVector"))
231+ then {
232+ let ai = E
233+ if (if ((ai == O))
234+ then true
235+ else (ai == Q))
236+ then true
237+ else false
238+ }
239+ else if ($isInstanceOf(E, "Unit"))
240+ then {
241+ let aj = E
242+ true
243+ }
244+ else throw("Match error")
245+ }
221246
222-let aA = av(ad)
223247
224-let aB = getIntegerValue(this, h)
248+let aE = az(af)
225249
226-let aC = getIntegerValue(this, i)
250+let aF = az(ag)
227251
228-let aD = (ai - az)
252+let aG = getIntegerValue(this, h)
229253
230-let aE = (aj - aA)
254+let aH = getIntegerValue(this, i)
231255
232-let aF = (at(ac) + az)
256+let aI = (al - aE)
233257
234-let aG = (at(ad) + aA)
258+let aJ = (am - aF)
235259
236-let aH = if ((aF >= ai))
237- then (aG >= aj)
260+let aK = (ax(af) + aE)
261+
262+let aL = (ax(ag) + aF)
263+
264+let aM = if ((aK >= al))
265+ then (aL >= am)
238266 else false
239267
240-func aI (au) = {
241- let B = au
242- if ($isInstanceOf(B, "ByteVector"))
268+func aN (ay) = {
269+ let E = ay
270+ if ($isInstanceOf(E, "ByteVector"))
243271 then {
244- let af = B
245- let aJ = toBase58String(af)
246- let aK = valueOrErrorMessage(assetInfo(af), (("Asset " + aJ) + " doesn't exist"))
247- $Tuple3(aJ, aK.name, aK.decimals)
272+ let ai = E
273+ let aO = toBase58String(ai)
274+ let aP = valueOrErrorMessage(assetInfo(ai), (("Asset " + aO) + " doesn't exist"))
275+ $Tuple3(aO, aP.name, aP.decimals)
248276 }
249- else if ($isInstanceOf(B, "Unit"))
277+ else if ($isInstanceOf(E, "Unit"))
250278 then {
251- let ag = B
279+ let aj = E
252280 $Tuple3("WAVES", "WAVES", 8)
253281 }
254282 else throw("Match error")
255283 }
256284
257285
258-func aL (aM) = if ((aM == "WAVES"))
286+func aQ (aR) = if ((aR == "WAVES"))
259287 then $Tuple3("WAVES", "WAVES", 8)
260288 else {
261- let aJ = aM
262- let af = fromBase58String(aM)
263- let aK = valueOrErrorMessage(assetInfo(af), (("Asset " + aJ) + " doesn't exist"))
264- $Tuple3(aJ, aK.name, aK.decimals)
289+ let aO = aR
290+ let ai = fromBase58String(aR)
291+ let aP = valueOrErrorMessage(assetInfo(ai), (("Asset " + aO) + " doesn't exist"))
292+ $Tuple3(aO, aP.name, aP.decimals)
265293 }
266294
267295
268-func aN (aO) = [BooleanEntry(c, false), StringEntry(n, aO)]
296+func aS (aT) = [BooleanEntry(c, false), StringEntry(n, aT)]
269297
270298
271-func aP (aQ,au,aR) = if (if ((au == L))
299+func aU (aV,ay,aW) = if (if ((ay == O))
272300 then true
273- else (au == O))
301+ else (ay == R))
274302 then {
275- let aS = if ((au == L))
276- then (T * (if ((aR == M))
303+ let aX = if ((ay == O))
304+ then (W * (if ((aW == P))
277305 then 2
278306 else 1))
279- else if ((au == O))
280- then U
307+ else if ((ay == R))
308+ then X
281309 else 0
282- let aT = (aQ - aS)
283- if ((0 >= aT))
284- then throw((((("Insufficient amount " + toString(aQ)) + " to deduct staking fee ") + toString(aS)) + "USDN/EURN"))
285- else aT
310+ let aY = (aV - aX)
311+ if ((0 >= aY))
312+ then throw((((("Insufficient amount " + toString(aV)) + " to deduct staking fee ") + toString(aX)) + "USDN/EURN"))
313+ else aY
286314 }
287- else aQ
315+ else aV
288316
289317
290-func aU (au,aR) = if ((au == L))
291- then (T * (if ((aR == M))
318+func aZ (ay,aW) = if ((ay == O))
319+ then (W * (if ((aW == P))
292320 then 2
293321 else 1))
294- else if ((au == O))
295- then U
322+ else if ((ay == R))
323+ then X
296324 else 0
297325
298326
299-func aV (aQ,aW,aX) = throw((((((((("Insufficient DApp balance to pay " + toString(aQ)) + " ") + aX) + " due to staking. Available: ") + toString(aW)) + " ") + aX) + ". Please contact support in Telegram: https://t.me/swopfisupport"))
327+func ba (aV,bb,bc) = throw((((((((("Insufficient DApp balance to pay " + toString(aV)) + " ") + bc) + " due to staking. Available: ") + toString(bb)) + " ") + bc) + ". Please contact support in Telegram: https://t.me/swopfisupport"))
300328
301329
302-func aY (aZ,ba) = throw((((((((((((((((("Insufficient DApp balance to pay " + toString(aZ)) + " ") + ae) + " and ") + toString(ba)) + " ") + ah) + " due to staking. Available: ") + toString(aD)) + " ") + ae) + " and ") + toString(aE)) + " ") + ah) + ". Please contact support in Telegram: https://t.me/swopfisupport"))
330+func bd (be,bf) = throw((((((((((((((((("Insufficient DApp balance to pay " + toString(be)) + " ") + ah) + " and ") + toString(bf)) + " ") + ak) + " due to staking. Available: ") + toString(aI)) + " ") + ah) + " and ") + toString(aJ)) + " ") + ak) + ". Please contact support in Telegram: https://t.me/swopfisupport"))
303331
304332
305-func bb () = aN(((((((((((((((("Suspicious state. Actual balances: " + toString(aF)) + " ") + ae) + ", ") + toString(aG)) + " ") + ah) + ". State: ") + toString(ai)) + " ") + ae) + ", ") + toString(aj)) + " ") + ah))
333+func bg () = aS(((((((((((((((("Suspicious state. Actual balances: " + toString(aK)) + " ") + ah) + ", ") + toString(aL)) + " ") + ak) + ". State: ") + toString(al)) + " ") + ah) + ", ") + toString(am)) + " ") + ak))
306334
307335
308-@Callable(ay)
309-func init (bc) = {
310- let bd = $Tuple2(ay.payments[0].amount, ay.payments[0].assetId)
311- let be = bd._1
312- let bf = bd._2
313- let bg = $Tuple2(ay.payments[1].amount, ay.payments[1].assetId)
314- let bh = bg._1
315- let bi = bg._2
316- let bj = aI(bf)
317- let bk = bj._1
318- let bl = bj._2
319- let bm = bj._3
320- let bn = aI(bi)
321- let bo = bn._1
322- let bp = bn._2
323- let bq = bn._3
324- if (!(containsElement([E, F, G, I], ay.callerPublicKey)))
325- then throw("Only admin can call this function")
326- else if (isDefined(getBoolean(this, c)))
327- then throw("DApp is already active")
328- else if ((bf == bi))
329- then throw("Assets must be different")
330- else {
331- let br = ((("s" + take(bl, 7)) + "_") + take(bp, 7))
332- let bs = ((((("ShareToken of SwopFi protocol for " + bl) + " and ") + bp) + " at address ") + toString(this))
333- let bt = ((bm + bq) / 2)
334- let bu = pow(be, bm, 5, 1, bm, DOWN)
335- let bv = pow(bh, bq, 5, 1, bq, DOWN)
336- let bw = pow(10, 0, bt, 0, 0, DOWN)
337- let bx = fraction(bu, bv, bw)
338- let by = Issue(br, bs, bx, bt, true)
339- let bz = calculateAssetId(by)
340- let bA = [StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, bk), StringEntry(e, bo), IntegerEntry(f, be), IntegerEntry(g, bh), IntegerEntry(l, am), IntegerEntry(m, ao), by, StringEntry(j, toBase58String(bz)), IntegerEntry(k, bx), ScriptTransfer(ay.caller, bx, bz)]
341- if (bc)
342- then (bA ++ [BooleanEntry(o, bc), IntegerEntry(p, (W + (Y * X)))])
343- else bA
344- }
336+@Callable(aC)
337+func init (bh) = {
338+ let bi = $Tuple2(aC.payments[0].amount, aC.payments[0].assetId)
339+ let bj = bi._1
340+ let bk = bi._2
341+ let bl = $Tuple2(aC.payments[1].amount, aC.payments[1].assetId)
342+ let bm = bl._1
343+ let bn = bl._2
344+ let bo = $Tuple2(aC.payments[2].amount, aC.payments[2].assetId)
345+ let bp = bo._1
346+ let bq = bo._2
347+ let br = isDataStorageUntouched(this)
348+ let bs = scriptHash(this)
349+ if ((aC.caller == this))
350+ then throw("You can't call yourself")
351+ else if (if ((bq != Q))
352+ then true
353+ else (bp != aw))
354+ then throw("You need to attach 10 SWOP tokens")
355+ else if (if (!(aD(bk)))
356+ then !(aD(bn))
357+ else false)
358+ then throw("One of assets must be USDN, WAVES or SWOP")
359+ else if (if ((bs == value(getBinary(B, w))))
360+ then true
361+ else !(br))
362+ then throw("Unexpected script was found.")
363+ else if (isDefined(getBoolean(this, c)))
364+ then throw("DApp is already active")
365+ else if ((bk == bn))
366+ then throw("Assets must be different")
367+ else {
368+ let bt = {
369+ let E = bk
370+ if ($isInstanceOf(E, "ByteVector"))
371+ then {
372+ let ai = E
373+ toBase58String(ai)
374+ }
375+ else if ($isInstanceOf(E, "Unit"))
376+ then {
377+ let aj = E
378+ "WAVES"
379+ }
380+ else throw("Match error")
381+ }
382+ let bu = {
383+ let E = bn
384+ if ($isInstanceOf(E, "ByteVector"))
385+ then {
386+ let ai = E
387+ toBase58String(ai)
388+ }
389+ else if ($isInstanceOf(E, "Unit"))
390+ then {
391+ let aj = E
392+ "WAVES"
393+ }
394+ else throw("Match error")
395+ }
396+ let bv = valueOrElse(getInteger(B, ("keyOracleAssetPriority" + bt)), 999999)
397+ let bw = valueOrElse(getInteger(B, ("keyOracleAssetPriority" + bu)), 999999)
398+ let bx = if ((bw > bv))
399+ then $Tuple4(bm, bn, bj, bk)
400+ else $Tuple4(bj, bk, bm, bn)
401+ let by = bx._1
402+ let bz = bx._2
403+ let bA = bx._3
404+ let bB = bx._4
405+ let bC = aN(bz)
406+ let bD = bC._1
407+ let bE = bC._2
408+ let bF = bC._3
409+ let bG = aN(bB)
410+ let bH = bG._1
411+ let bI = bG._2
412+ let bJ = bG._3
413+ let bK = invoke(B, "addPool", [this, ((bE + "_") + bI)], nil)
414+ if ((bK == bK))
415+ then if (!(isDefined(getString(B, ("pool_" + toString(this))))))
416+ then throw("Pool is not added")
417+ else {
418+ let bL = ((("s" + take(bE, 7)) + "_") + take(bI, 7))
419+ let bM = ((((("ShareToken of SwopFi protocol for " + bE) + " and ") + bI) + " at address ") + toString(this))
420+ let bN = ((bF + bJ) / 2)
421+ let bO = pow(by, bF, 5, 1, bF, DOWN)
422+ let bP = pow(bA, bJ, 5, 1, bJ, DOWN)
423+ let bQ = pow(10, 0, bN, 0, 0, DOWN)
424+ let bR = fraction(bO, bP, bQ)
425+ let bS = Issue(bL, bM, bR, bN, true)
426+ let bT = calculateAssetId(bS)
427+ let bU = [StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, bD), StringEntry(e, bH), IntegerEntry(f, by), IntegerEntry(g, bA), IntegerEntry(l, ap), IntegerEntry(m, ar), bS, StringEntry(j, toBase58String(bT)), IntegerEntry(k, bR), IntegerEntry(x, height), ScriptTransfer(M, bR, bT), ScriptTransfer(aC.caller, aw, Q)]
428+ bU
429+ }
430+ else throw("Strict value is not equal to itself.")
431+ }
345432 }
346433
347434
348435
349-@Callable(ay)
350-func initWithInitRatio (bB,bC,aa,ab,bc) = {
351- let bD = aL(aa)
352- let bk = bD._1
353- let bl = bD._2
354- let bm = bD._3
355- let bE = aL(ab)
356- let bo = bE._1
357- let bp = bE._2
358- let bq = bE._3
359- if (!(containsElement([E, F, G, I], ay.callerPublicKey)))
436+@Callable(aC)
437+func keepLimitForFirstHarvest (bV) = if (!(ac))
438+ then throw("DApp is inactive at this moment")
439+ else if (!(containsElement([H, I, J, L], aC.callerPublicKey)))
360440 then throw("Only admin can call this function")
361- else if (isDefined(getBoolean(this, c)))
362- then throw("DApp is already active")
363- else if ((aa == ab))
364- then throw("Assets must be different")
365- else {
366- let br = ((("s" + take(bl, 7)) + "_") + take(bp, 7))
367- let bs = ((((("ShareToken of SwopFi protocol for " + bl) + " and ") + bp) + " at address ") + toString(this))
368- let bt = ((bm + bq) / 2)
369- let bx = 0
370- let by = Issue(br, bs, bx, bt, true)
371- let bz = calculateAssetId(by)
372- let bA = [StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, bk), StringEntry(e, bo), IntegerEntry(h, bB), IntegerEntry(i, bC), IntegerEntry(f, 0), IntegerEntry(g, 0), IntegerEntry(l, am), IntegerEntry(m, ao), by, StringEntry(j, toBase58String(bz)), IntegerEntry(k, bx)]
373- if (bc)
374- then (bA ++ [BooleanEntry(o, bc), IntegerEntry(p, (W + (Y * X)))])
375- else bA
376- }
377- }
441+ else [IntegerEntry(q, bV)]
378442
379443
380444
381-@Callable(ay)
382-func keepLimitForFirstHarvest (bF) = if (!(Z))
383- then throw("DApp is inactive at this moment")
384- else if (!(containsElement([E, F, G, I], ay.callerPublicKey)))
385- then throw("Only admin can call this function")
386- else [IntegerEntry(q, bF)]
387-
388-
389-
390-@Callable(ay)
391-func replenishWithTwoTokens (bG) = {
392- let bf = ay.payments[0].assetId
393- let bi = ay.payments[1].assetId
394- let be = aP(ay.payments[0].amount, bf, bi)
395- let bh = aP(ay.payments[1].amount, bi, bf)
396- if (if ((ai == 0))
397- then (aj == 0)
445+@Callable(aC)
446+func replenishWithTwoTokens (bW) = {
447+ let bz = aC.payments[0].assetId
448+ let bB = aC.payments[1].assetId
449+ let by = aU(aC.payments[0].amount, bz, bB)
450+ let bA = aU(aC.payments[1].amount, bB, bz)
451+ if (if ((al == 0))
452+ then (am == 0)
398453 else false)
399454 then {
400- let bH = aI(bf)
401- let bk = bH._1
402- let bl = bH._2
403- let bm = bH._3
404- let bI = aI(bi)
405- let bo = bI._1
406- let bp = bI._2
407- let bq = bI._3
408- let bJ = fraction(fraction(aB, aq, be), ap, fraction(aC, aq, bh))
409- if ((bf == bi))
455+ let bX = aN(bz)
456+ let bD = bX._1
457+ let bE = bX._2
458+ let bF = bX._3
459+ let bY = aN(bB)
460+ let bH = bY._1
461+ let bI = bY._2
462+ let bJ = bY._3
463+ let bZ = fraction(fraction(aG, at, by), as, fraction(aH, at, bA))
464+ if ((bz == bB))
410465 then throw("Assets must be different")
411466 else {
412- let bt = ((bm + bq) / 2)
413- let bx = fraction(pow(be, bm, 5, 1, bm, DOWN), pow(bh, bq, 5, 1, bq, DOWN), pow(10, 0, bt, 0, 0, DOWN))
414- if (!(Z))
467+ let bN = ((bF + bJ) / 2)
468+ let bR = fraction(pow(by, bF, 5, 1, bF, DOWN), pow(bA, bJ, 5, 1, bJ, DOWN), pow(10, 0, bN, 0, 0, DOWN))
469+ if (!(ac))
415470 then throw("DApp is inactive at this moment")
416- else if (if ((0 > bG))
471+ else if (if ((0 > bW))
417472 then true
418- else (bG > ar))
419- then throw(((("Slippage tolerance must be between 0 and " + toString(ar)) + " inclusively. Actual: ") + toString(bG)))
420- else if ((size(ay.payments) != 2))
473+ else (bW > au))
474+ then throw(((("Slippage tolerance must be between 0 and " + toString(au)) + " inclusively. Actual: ") + toString(bW)))
475+ else if ((size(aC.payments) != 2))
421476 then throw("Two attached assets expected")
422- else if (if ((((ap * (ar - bG)) / ar) > bJ))
477+ else if (if ((((as * (au - bW)) / au) > bZ))
423478 then true
424- else (bJ > ((ap * (ar + bG)) / ar)))
479+ else (bZ > ((as * (au + bW)) / au)))
425480 then throw("Incorrect assets amount: amounts must have the contract ratio")
426- else if (if ((bf != ac))
481+ else if (if ((bz != af))
427482 then true
428- else (bi != ad))
429- then throw(((("Incorrect assets attached. Expected: " + aa) + " and ") + ab))
430- else if ((bx == 0))
483+ else (bB != ag))
484+ then throw(((("Incorrect assets attached. Expected: " + ad) + " and ") + ae))
485+ else if ((bR == 0))
431486 then throw("Too small amount to replenish")
432- else if (!(aH))
433- then ([ScriptTransfer(ay.caller, be, bf), ScriptTransfer(ay.caller, bh, bi)] ++ bb())
434- else [Reissue(ak, bx, true), IntegerEntry(f, be), IntegerEntry(g, bh), IntegerEntry(k, bx), ScriptTransfer(ay.caller, bx, ak)]
487+ else if (!(aM))
488+ then ([ScriptTransfer(aC.caller, by, bz), ScriptTransfer(aC.caller, bA, bB)] ++ bg())
489+ else [Reissue(an, bR, true), IntegerEntry(f, by), IntegerEntry(g, bA), IntegerEntry(k, bR), ScriptTransfer(aC.caller, bR, an)]
435490 }
436491 }
437492 else {
438- let bJ = fraction(fraction(ai, aq, be), ap, fraction(aj, aq, bh))
439- let bK = fraction(be, aq, ai)
440- let bL = fraction(bh, aq, aj)
441- let bM = fraction(min([bK, bL]), al, aq)
442- if (!(Z))
493+ let bZ = fraction(fraction(al, at, by), as, fraction(am, at, bA))
494+ let ca = fraction(by, at, al)
495+ let cb = fraction(bA, at, am)
496+ let cc = fraction(min([ca, cb]), ao, at)
497+ if (!(ac))
443498 then throw("DApp is inactive at this moment")
444- else if (if ((0 > bG))
499+ else if (if ((0 > bW))
445500 then true
446- else (bG > ar))
447- then throw(((("Slippage tolerance must be between 0 and " + toString(ar)) + " inclusively. Actual: ") + toString(bG)))
448- else if ((size(ay.payments) != 2))
501+ else (bW > au))
502+ then throw(((("Slippage tolerance must be between 0 and " + toString(au)) + " inclusively. Actual: ") + toString(bW)))
503+ else if ((size(aC.payments) != 2))
449504 then throw("Two attached assets expected")
450- else if (if ((bf != ac))
505+ else if (if ((bz != af))
451506 then true
452- else (bi != ad))
453- then throw(((("Incorrect assets attached. Expected: " + aa) + " and ") + ab))
454- else if (if ((((ap * (ar - bG)) / ar) > bJ))
507+ else (bB != ag))
508+ then throw(((("Incorrect assets attached. Expected: " + ad) + " and ") + ae))
509+ else if (if ((((as * (au - bW)) / au) > bZ))
455510 then true
456- else (bJ > ((ap * (ar + bG)) / ar)))
511+ else (bZ > ((as * (au + bW)) / au)))
457512 then throw("Incorrect assets amount: amounts must have the contract ratio")
458- else if ((bM == 0))
513+ else if ((cc == 0))
459514 then throw("Too small amount to replenish")
460- else if (!(aH))
461- then ([ScriptTransfer(ay.caller, be, bf), ScriptTransfer(ay.caller, bh, bi)] ++ bb())
462- else [IntegerEntry(f, (ai + be)), IntegerEntry(g, (aj + bh)), IntegerEntry(k, (al + bM)), Reissue(ak, bM, true), ScriptTransfer(ay.caller, bM, ak)]
515+ else if (!(aM))
516+ then ([ScriptTransfer(aC.caller, by, bz), ScriptTransfer(aC.caller, bA, bB)] ++ bg())
517+ else [IntegerEntry(f, (al + by)), IntegerEntry(g, (am + bA)), IntegerEntry(k, (ao + cc)), Reissue(an, cc, true), ScriptTransfer(aC.caller, cc, an)]
463518 }
464519 }
465520
466521
467522
468-@Callable(ay)
523+@Callable(aC)
469524 func withdraw () = {
470- let bN = $Tuple2(ay.payments[0].amount, ay.payments[0].assetId)
471- let bO = bN._1
472- let bP = bN._2
473- let bQ = aP(fraction(bO, ai, al), ac, ad)
474- let bR = aP(fraction(bO, aj, al), ad, ac)
475- if (!(Z))
525+ let cd = $Tuple2(aC.payments[0].amount, aC.payments[0].assetId)
526+ let ce = cd._1
527+ let cf = cd._2
528+ let cg = aU(fraction(ce, al, ao), af, ag)
529+ let ch = aU(fraction(ce, am, ao), ag, af)
530+ if (!(ac))
476531 then throw("DApp is inactive at this moment")
477- else if ((size(ay.payments) != 1))
532+ else if ((size(aC.payments) != 1))
478533 then throw("One attached payment expected")
479- else if ((bP != ak))
480- then throw(("Incorrect asset attached. Expected: " + toBase58String(ak)))
481- else if (!(aH))
482- then ([ScriptTransfer(ay.caller, bO, bP)] ++ bb())
483- else if (if ((bQ > aD))
534+ else if ((cf != an))
535+ then throw(("Incorrect asset attached. Expected: " + toBase58String(an)))
536+ else if (!(aM))
537+ then ([ScriptTransfer(aC.caller, ce, cf)] ++ bg())
538+ else if (if ((cg > aI))
484539 then true
485- else (bR > aE))
486- then aY(bQ, bR)
487- else [IntegerEntry(f, (ai - bQ)), IntegerEntry(g, (aj - bR)), IntegerEntry(k, (al - bO)), Burn(ak, bO), ScriptTransfer(ay.caller, bQ, ac), ScriptTransfer(ay.caller, bR, ad)]
540+ else (ch > aJ))
541+ then bd(cg, ch)
542+ else [IntegerEntry(f, (al - cg)), IntegerEntry(g, (am - ch)), IntegerEntry(k, (ao - ce)), Burn(an, ce), ScriptTransfer(aC.caller, cg, af), ScriptTransfer(aC.caller, ch, ag)]
488543 }
489544
490545
491546
492-@Callable(ay)
493-func exchange (bS) = {
494- let bT = $Tuple2(ay.payments[0].amount, ay.payments[0].assetId)
495- let bO = bT._1
496- let bP = bT._2
497- func bU (bV,bW) = {
498- let bX = fraction(bW, bO, (bO + bV))
499- let bY = fraction(bX, (ao - am), ao)
500- let bZ = fraction(bX, an, ao)
501- if ((bS > bY))
502- then throw(((("Calculated amount to receive " + toString(bY)) + " is less than specified minimum ") + toString(bS)))
503- else $Tuple3(bX, bY, bZ)
547+@Callable(aC)
548+func exchange (ci) = {
549+ let cj = $Tuple2(aC.payments[0].amount, aC.payments[0].assetId)
550+ let ce = cj._1
551+ let cf = cj._2
552+ func ck (cl,cm) = {
553+ let cn = fraction(cm, ce, (ce + cl))
554+ let co = fraction(cn, (ar - ap), ar)
555+ let cp = fraction(cn, aq, ar)
556+ if ((ci > co))
557+ then throw(((("Calculated amount to receive " + toString(co)) + " is less than specified minimum ") + toString(ci)))
558+ else $Tuple3(cn, co, cp)
504559 }
505560
506- if (!(Z))
561+ if (!(ac))
507562 then throw("DApp is inactive at this moment")
508- else if (if ((ai == 0))
563+ else if (if ((al == 0))
509564 then true
510- else (aj == 0))
565+ else (am == 0))
511566 then throw("Can't exchange with zero balance")
512- else if ((0 >= bS))
513- then throw(("Minimal amount to receive must be positive. Actual: " + toString(bS)))
514- else if ((size(ay.payments) != 1))
567+ else if ((0 >= ci))
568+ then throw(("Minimal amount to receive must be positive. Actual: " + toString(ci)))
569+ else if ((size(aC.payments) != 1))
515570 then throw("One attached payment expected")
516- else if (!(aH))
517- then ([ScriptTransfer(ay.caller, bO, bP)] ++ bb())
518- else if ((bP == ac))
571+ else if (!(aM))
572+ then ([ScriptTransfer(aC.caller, ce, cf)] ++ bg())
573+ else if ((cf == af))
519574 then {
520- let ca = ad
521- let cb = bU(ai, aj)
522- let bX = cb._1
523- let bY = cb._2
524- let bZ = cb._3
525- let cc = (ai + bO)
526- let cd = ((aj - bY) - bZ)
527- if (if ((az >= cc))
575+ let cq = ag
576+ let cr = ck(al, am)
577+ let cn = cr._1
578+ let co = cr._2
579+ let cp = cr._3
580+ let cs = (al + ce)
581+ let ct = ((am - co) - cp)
582+ if (if ((aE >= cs))
528583 then true
529- else (aA >= cd))
530- then aV(bY, aE, ah)
531- else [IntegerEntry(f, cc), IntegerEntry(g, cd), ScriptTransfer(ay.caller, bY, ca), ScriptTransfer(J, bZ, ca)]
584+ else (aF >= ct))
585+ then ba(co, aJ, ak)
586+ else [IntegerEntry(f, cs), IntegerEntry(g, ct), ScriptTransfer(aC.caller, co, cq), ScriptTransfer(M, cp, cq)]
532587 }
533- else if ((bP == ad))
588+ else if ((cf == ag))
534589 then {
535- let ca = ac
536- let ce = bU(aj, ai)
537- let bX = ce._1
538- let bY = ce._2
539- let bZ = ce._3
540- let cc = ((ai - bY) - bZ)
541- let cd = (aj + bO)
542- if (if ((az >= cc))
590+ let cq = af
591+ let cu = ck(am, al)
592+ let cn = cu._1
593+ let co = cu._2
594+ let cp = cu._3
595+ let cs = ((al - co) - cp)
596+ let ct = (am + ce)
597+ if (if ((aE >= cs))
543598 then true
544- else (aA >= cd))
545- then aV(bY, aD, ae)
546- else [IntegerEntry(f, cc), IntegerEntry(g, cd), ScriptTransfer(ay.caller, bY, ca), ScriptTransfer(J, bZ, ca)]
599+ else (aF >= ct))
600+ then ba(co, aI, ah)
601+ else [IntegerEntry(f, cs), IntegerEntry(g, ct), ScriptTransfer(aC.caller, co, cq), ScriptTransfer(M, cp, cq)]
547602 }
548- else throw(((("Incorrect asset attached. Expected: " + aa) + " or ") + ab))
603+ else throw(((("Incorrect asset attached. Expected: " + ad) + " or ") + ae))
549604 }
550605
551606
552607
553-@Callable(ay)
554-func shutdown () = if (!(Z))
608+@Callable(aC)
609+func shutdown () = if (!(ac))
555610 then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, n), "the cause wasn't specified")))
556- else if (!(containsElement([E, F, G, H], ay.callerPublicKey)))
611+ else if (!(containsElement([H, I, J, K], aC.callerPublicKey)))
557612 then throw("Only admin can call this function")
558- else aN("Paused by admin")
613+ else aS("Paused by admin")
559614
560615
561616
562-@Callable(ay)
563-func activate () = if (Z)
617+@Callable(aC)
618+func activate () = if (ac)
564619 then throw("DApp is already active")
565- else if (!(containsElement([E, F, G, H], ay.callerPublicKey)))
620+ else if (!(containsElement([H, I, J, K], aC.callerPublicKey)))
566621 then throw("Only admin can call this function")
567622 else [BooleanEntry(c, true), DeleteEntry(n)]
568623
569624
570625
571-@Callable(ay)
572-func takeIntoAccountExtraFunds (cf) = {
573- let cg = (aF - ai)
574- let ch = (aG - aj)
575- let ci = (cg - (if ((ac == unit))
576- then cf
626+@Callable(aC)
627+func takeIntoAccountExtraFunds (cv) = {
628+ let cw = (aK - al)
629+ let cx = (aL - am)
630+ let cy = (cw - (if ((af == unit))
631+ then cv
577632 else 0))
578- let cj = (ch - (if ((ad == unit))
579- then cf
633+ let cz = (cx - (if ((ag == unit))
634+ then cv
580635 else 0))
581- if (!(Z))
636+ if (!(ac))
582637 then throw("DApp is inactive at this moment")
583- else if ((ay.caller != this))
638+ else if ((aC.caller != this))
584639 then throw("Only the DApp itself can call this function")
585- else if ((0 > cf))
586- then throw(("Argument 'amountLeave' cannot be negative. Actual: " + toString(cf)))
587- else if (if ((0 > cg))
640+ else if ((0 > cv))
641+ then throw(("Argument 'amountLeave' cannot be negative. Actual: " + toString(cv)))
642+ else if (if ((0 > cw))
588643 then true
589- else (0 > ch))
590- then aN("Enroll amount negative")
591- else if (if ((0 > ci))
644+ else (0 > cx))
645+ then aS("Enroll amount negative")
646+ else if (if ((0 > cy))
592647 then true
593- else (0 > cj))
648+ else (0 > cz))
594649 then throw("Too large amountLeave")
595- else [IntegerEntry(f, (ai + ci)), IntegerEntry(g, (aj + cj)), IntegerEntry(("last_income_" + aa), ci), IntegerEntry(("last_income_" + ab), cj)]
650+ else [IntegerEntry(f, (al + cy)), IntegerEntry(g, (am + cz)), IntegerEntry(("last_income_" + ad), cy), IntegerEntry(("last_income_" + ae), cz)]
596651 }
597652
598653
599-@Verifier(ck)
600-func cl () = {
601- let B = ck
602- if ($isInstanceOf(B, "InvokeScriptTransaction"))
654+
655+@Callable(aC)
656+func enableFirstHarvest () = [BooleanEntry(o, true), IntegerEntry(p, (Z + (ab * aa)))]
657+
658+
659+@Verifier(cA)
660+func cB () = {
661+ let cC = {
662+ let cD = if (sigVerify(cA.bodyBytes, cA.proofs[0], H))
663+ then 1
664+ else 0
665+ let cE = if (sigVerify(cA.bodyBytes, cA.proofs[1], I))
666+ then 1
667+ else 0
668+ let cF = if (sigVerify(cA.bodyBytes, cA.proofs[2], J))
669+ then 1
670+ else 0
671+ (((cD + cE) + cF) >= 2)
672+ }
673+ let E = cA
674+ if ($isInstanceOf(E, "InvokeScriptTransaction"))
603675 then {
604- let cm = B
605- let cn = if ((cm.dApp == this))
606- then (cm.function == "takeIntoAccountExtraFunds")
676+ let cG = E
677+ let cH = if ((cG.dApp == this))
678+ then (cG.function == "takeIntoAccountExtraFunds")
607679 else false
608- let co = if (if ((cm.dApp == P))
609- then if (if (if ((cm.function == "lockNeutrino"))
610- then (size(cm.payments) == 1)
680+ let cI = if ((cG.dApp == this))
681+ then (cG.function == "enableFirstHarvest")
682+ else false
683+ let cJ = if (if ((cG.dApp == S))
684+ then if (if (if ((cG.function == "lockNeutrino"))
685+ then (size(cG.payments) == 1)
611686 else false)
612- then if ((cm.payments[0].assetId == L))
687+ then if ((cG.payments[0].assetId == O))
613688 then true
614- else (cm.payments[0].assetId == M)
689+ else (cG.payments[0].assetId == P)
615690 else false)
616691 then true
617- else if ((cm.function == "unlockNeutrino"))
618- then (size(cm.payments) == 0)
692+ else if ((cG.function == "unlockNeutrino"))
693+ then (size(cG.payments) == 0)
619694 else false
620695 else false)
621696 then true
622- else if ((cm.dApp == Q))
623- then if (if (if ((cm.function == "startStaking"))
624- then (size(cm.payments) == 1)
697+ else if ((cG.dApp == T))
698+ then if (if (if ((cG.function == "startStaking"))
699+ then (size(cG.payments) == 1)
625700 else false)
626- then (cm.payments[0].assetId == O)
701+ then (cG.payments[0].assetId == R)
627702 else false)
628703 then true
629- else if ((cm.function == "stopStaking"))
630- then (size(cm.payments) == 0)
704+ else if ((cG.function == "stopStaking"))
705+ then (size(cG.payments) == 0)
631706 else false
632707 else false
633- let cp = if (if (if ((cm.dApp == R))
634- then (cm.function == "exchange")
708+ let cK = if (if (if ((cG.dApp == U))
709+ then (cG.function == "exchange")
635710 else false)
636- then (ac == L)
711+ then (af == O)
637712 else false)
638713 then true
639- else if (if ((ad == L))
640- then (size(cm.payments) == 1)
714+ else if (if ((ag == O))
715+ then (size(cG.payments) == 1)
641716 else false)
642- then (cm.payments[0].assetId == L)
717+ then (cG.payments[0].assetId == O)
643718 else false
644- let cq = if (if (if ((cm.dApp == S))
645- then (cm.function == "exchange")
719+ let cL = if (if (if ((cG.dApp == V))
720+ then (cG.function == "exchange")
646721 else false)
647- then (ac == M)
722+ then (af == P)
648723 else false)
649724 then true
650- else if (if ((ad == M))
651- then (size(cm.payments) == 1)
725+ else if (if ((ag == P))
726+ then (size(cG.payments) == 1)
652727 else false)
653- then (cm.payments[0].assetId == L)
728+ then (cG.payments[0].assetId == O)
654729 else false
655- let cr = if (if (if (sigVerify(ck.bodyBytes, ck.proofs[0], E))
730+ let cM = if (if (if (sigVerify(cA.bodyBytes, cA.proofs[0], H))
656731 then true
657- else sigVerify(ck.bodyBytes, ck.proofs[0], F))
732+ else sigVerify(cA.bodyBytes, cA.proofs[0], I))
658733 then true
659- else sigVerify(ck.bodyBytes, ck.proofs[0], G))
734+ else sigVerify(cA.bodyBytes, cA.proofs[0], J))
660735 then true
661- else sigVerify(ck.bodyBytes, ck.proofs[0], I)
662- if (if (if (if (cn)
736+ else sigVerify(cA.bodyBytes, cA.proofs[0], L)
737+ if (if (if (if (if (if (cH)
663738 then true
664- else co)
739+ else cI)
665740 then true
666- else cp)
741+ else cJ)
667742 then true
668- else cq)
669- then cr
670- else false
743+ else cK)
744+ then true
745+ else cL)
746+ then cM
747+ else false)
748+ then true
749+ else cC
671750 }
672- else {
673- let cs = if (sigVerify(ck.bodyBytes, ck.proofs[0], E))
674- then 1
675- else 0
676- let ct = if (sigVerify(ck.bodyBytes, ck.proofs[1], F))
677- then 1
678- else 0
679- let cu = if (sigVerify(ck.bodyBytes, ck.proofs[2], G))
680- then 1
681- else 0
682- (((cs + ct) + cu) >= 2)
683- }
751+ else cC
684752 }
685753
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
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
1818 let h = "A_asset_init"
1919
2020 let i = "B_asset_init"
2121
2222 let j = "share_asset_id"
2323
2424 let k = "share_asset_supply"
2525
2626 let l = "commission"
2727
2828 let m = "commission_scale_delimiter"
2929
3030 let n = "shutdown_cause"
3131
3232 let o = "first_harvest"
3333
3434 let p = "first_harvest_height"
3535
3636 let q = "share_limit_on_first_harvest"
3737
3838 let r = "base_period"
3939
4040 let s = "period_length"
4141
4242 let t = "start_height"
4343
4444 let u = "first_harvest_height"
4545
46-let v = "admin_pub_1"
46+let v = "asset_priority_"
4747
48-let w = "admin_pub_2"
48+let w = "script_hash_cpmm"
4949
50-let x = "admin_pub_3"
50+let x = "init_pool_height_"
5151
52-let y = Address(base58'3NBBWfzZtZtszaXbitTKnrB2xXwv26Bn7H9')
52+let y = "admin_pub_1"
5353
54-func z (A) = {
55- let B = getString(y, A)
56- if ($isInstanceOf(B, "String"))
54+let z = "admin_pub_2"
55+
56+let A = "admin_pub_3"
57+
58+let B = Address(base58'3NBBWfzZtZtszaXbitTKnrB2xXwv26Bn7H9')
59+
60+func C (D) = {
61+ let E = getString(B, D)
62+ if ($isInstanceOf(E, "String"))
5763 then {
58- let C = B
59- fromBase58String(C)
64+ let F = E
65+ fromBase58String(F)
6066 }
6167 else {
62- let D = B
68+ let G = E
6369 throw("Admin public key is empty")
6470 }
6571 }
6672
6773
68-let E = z(v)
74+let H = C(y)
6975
70-let F = z(w)
76+let I = C(z)
7177
72-let G = z(x)
78+let J = C(A)
7379
74-let H = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
80+let K = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
7581
76-let I = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
82+let L = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
7783
78-let J = Address(base58'3NAGTtZz6WpupSN89NZD5rMZwwziZEg4Kx4')
84+let M = Address(base58'3NAGTtZz6WpupSN89NZD5rMZwwziZEg4Kx4')
7985
80-let K = Address(base58'3MrJgdL1GniipErHy44YF9idzLaUL2iX5DQ')
86+let N = Address(base58'3MrJgdL1GniipErHy44YF9idzLaUL2iX5DQ')
8187
82-let L = base58'8UrfDVd5GreeUwm7uPk7eYz1eMv376kzR52C6sANPkwS'
88+let O = base58'8UrfDVd5GreeUwm7uPk7eYz1eMv376kzR52C6sANPkwS'
8389
84-let M = base58'36mg8NZTaFRDygiVwb8uBnLR51hetJruUCZcxhaVcHj9'
90+let P = base58'36mg8NZTaFRDygiVwb8uBnLR51hetJruUCZcxhaVcHj9'
8591
86-let N = base58'2HAJrwa8q4SxBx9cHYaBTQdBjdk5wwqdof7ccpAx2uhZ'
92+let Q = base58'2HAJrwa8q4SxBx9cHYaBTQdBjdk5wwqdof7ccpAx2uhZ'
8793
88-let O = base58'ECBCkHS68DckpBrzLeoRgYbFg7sCVqR176mPqbXsj9pA'
94+let R = base58'ECBCkHS68DckpBrzLeoRgYbFg7sCVqR176mPqbXsj9pA'
8995
90-let P = Address(base58'3N6q7sCGSSLBUXDdjBdYGTJbZGZfhhh8cNg')
96+let S = Address(base58'3N6q7sCGSSLBUXDdjBdYGTJbZGZfhhh8cNg')
9197
92-let Q = Address(base58'3MyVqAbmKWh339gF6hy8faWw1jGeTV2wnGE')
98+let T = Address(base58'3MyVqAbmKWh339gF6hy8faWw1jGeTV2wnGE')
9399
94-let R = Address(base58'3N77kfPbQyjXWpDALX3xjKw3iEGMWEctV37')
100+let U = Address(base58'3N77kfPbQyjXWpDALX3xjKw3iEGMWEctV37')
95101
96-let S = Address(base58'3Mye9wVR7d2mc6Y5ZJTu11svzgUQ7o8H9dA')
102+let V = Address(base58'3Mye9wVR7d2mc6Y5ZJTu11svzgUQ7o8H9dA')
97103
98-let T = 270000
104+let W = 270000
99105
100-let U = 234000
106+let X = 234000
101107
102-let V = valueOrErrorMessage(getInteger(K, r), "Empty kBasePeriod")
108+let Y = valueOrErrorMessage(getInteger(N, r), "Empty kBasePeriod")
103109
104-let W = valueOrErrorMessage(getInteger(K, t), "Empty kStartHeight")
110+let Z = valueOrErrorMessage(getInteger(N, t), "Empty kStartHeight")
105111
106-let X = valueOrErrorMessage(getInteger(K, s), "Empty kPeriodLength")
112+let aa = valueOrErrorMessage(getInteger(N, s), "Empty kPeriodLength")
107113
108-let Y = ((V + ((height - W) / X)) + 3)
114+let ab = ((Y + ((height - Z) / aa)) + 3)
109115
110-let Z = getBooleanValue(this, c)
116+let ac = getBooleanValue(this, c)
111117
112-let aa = getStringValue(this, d)
118+let ad = getStringValue(this, d)
113119
114-let ab = getStringValue(this, e)
120+let ae = getStringValue(this, e)
115121
116-let ac = if ((aa == "WAVES"))
122+let af = if ((ad == "WAVES"))
117123 then unit
118- else fromBase58String(aa)
124+ else fromBase58String(ad)
119125
120-let ad = if ((ab == "WAVES"))
126+let ag = if ((ae == "WAVES"))
121127 then unit
122- else fromBase58String(ab)
128+ else fromBase58String(ae)
123129
124-let ae = {
125- let B = ac
126- if ($isInstanceOf(B, "ByteVector"))
130+let ah = {
131+ let E = af
132+ if ($isInstanceOf(E, "ByteVector"))
127133 then {
128- let af = B
129- value(assetInfo(af)).name
134+ let ai = E
135+ value(assetInfo(ai)).name
130136 }
131- else if ($isInstanceOf(B, "Unit"))
137+ else if ($isInstanceOf(E, "Unit"))
132138 then {
133- let ag = B
139+ let aj = E
134140 "WAVES"
135141 }
136142 else throw("Match error")
137143 }
138144
139-let ah = {
140- let B = ad
141- if ($isInstanceOf(B, "ByteVector"))
145+let ak = {
146+ let E = ag
147+ if ($isInstanceOf(E, "ByteVector"))
142148 then {
143- let af = B
144- value(assetInfo(af)).name
149+ let ai = E
150+ value(assetInfo(ai)).name
145151 }
146- else if ($isInstanceOf(B, "Unit"))
152+ else if ($isInstanceOf(E, "Unit"))
147153 then {
148- let ag = B
154+ let aj = E
149155 "WAVES"
150156 }
151157 else throw("Match error")
152158 }
153159
154-let ai = getIntegerValue(this, f)
160+let al = getIntegerValue(this, f)
155161
156-let aj = getIntegerValue(this, g)
162+let am = getIntegerValue(this, g)
157163
158-let ak = fromBase58String(getStringValue(this, j))
164+let an = fromBase58String(getStringValue(this, j))
159165
160-let al = getIntegerValue(this, k)
166+let ao = getIntegerValue(this, k)
161167
162-let am = 3000
168+let ap = 3000
163169
164-let an = 1200
170+let aq = 1200
165171
166-let ao = 1000000
172+let ar = 1000000
167173
168-let ap = 1000
174+let as = 1000
169175
170-let aq = 100000000
176+let at = 100000000
171177
172-let ar = 1000
178+let au = 1000
173179
174-let as = 8
180+let av = 8
175181
176-func at (au) = {
177- let B = au
178- if ($isInstanceOf(B, "ByteVector"))
182+let aw = 1000000000
183+
184+func ax (ay) = {
185+ let E = ay
186+ if ($isInstanceOf(E, "ByteVector"))
179187 then {
180- let af = B
181- assetBalance(this, af)
188+ let ai = E
189+ assetBalance(this, ai)
182190 }
183- else if ($isInstanceOf(B, "Unit"))
191+ else if ($isInstanceOf(E, "Unit"))
184192 then {
185- let ag = B
193+ let aj = E
186194 wavesBalance(this).available
187195 }
188196 else throw("Match error")
189197 }
190198
191199
192-func av (au) = {
193- let aw = {
194- let B = au
195- if ($isInstanceOf(B, "ByteVector"))
200+func az (ay) = {
201+ let aA = {
202+ let E = ay
203+ if ($isInstanceOf(E, "ByteVector"))
196204 then {
197- let ax = B
198- if (if ((ax == L))
205+ let aB = E
206+ if (if ((aB == O))
199207 then true
200- else (ax == M))
201- then getInteger(P, ((("rpd_balance_" + toBase58String(ax)) + "_") + toString(this)))
202- else if ((ax == O))
203- then getInteger(Q, ((("%s%s%s__stakingBalance__" + toBase58String(ax)) + "__") + toString(this)))
208+ else (aB == P))
209+ then getInteger(S, ((("rpd_balance_" + toBase58String(aB)) + "_") + toString(this)))
210+ else if ((aB == R))
211+ then getInteger(T, ((("%s%s%s__stakingBalance__" + toBase58String(aB)) + "__") + toString(this)))
204212 else 0
205213 }
206- else if ($isInstanceOf(B, "Unit"))
214+ else if ($isInstanceOf(E, "Unit"))
207215 then 0
208216 else throw("Match error")
209217 }
210- let B = aw
211- if ($isInstanceOf(B, "Int"))
218+ let E = aA
219+ if ($isInstanceOf(E, "Int"))
212220 then {
213- let ay = B
214- ay
221+ let aC = E
222+ aC
215223 }
216224 else 0
217225 }
218226
219227
220-let az = av(ac)
228+func aD (ay) = {
229+ let E = ay
230+ if ($isInstanceOf(E, "ByteVector"))
231+ then {
232+ let ai = E
233+ if (if ((ai == O))
234+ then true
235+ else (ai == Q))
236+ then true
237+ else false
238+ }
239+ else if ($isInstanceOf(E, "Unit"))
240+ then {
241+ let aj = E
242+ true
243+ }
244+ else throw("Match error")
245+ }
221246
222-let aA = av(ad)
223247
224-let aB = getIntegerValue(this, h)
248+let aE = az(af)
225249
226-let aC = getIntegerValue(this, i)
250+let aF = az(ag)
227251
228-let aD = (ai - az)
252+let aG = getIntegerValue(this, h)
229253
230-let aE = (aj - aA)
254+let aH = getIntegerValue(this, i)
231255
232-let aF = (at(ac) + az)
256+let aI = (al - aE)
233257
234-let aG = (at(ad) + aA)
258+let aJ = (am - aF)
235259
236-let aH = if ((aF >= ai))
237- then (aG >= aj)
260+let aK = (ax(af) + aE)
261+
262+let aL = (ax(ag) + aF)
263+
264+let aM = if ((aK >= al))
265+ then (aL >= am)
238266 else false
239267
240-func aI (au) = {
241- let B = au
242- if ($isInstanceOf(B, "ByteVector"))
268+func aN (ay) = {
269+ let E = ay
270+ if ($isInstanceOf(E, "ByteVector"))
243271 then {
244- let af = B
245- let aJ = toBase58String(af)
246- let aK = valueOrErrorMessage(assetInfo(af), (("Asset " + aJ) + " doesn't exist"))
247- $Tuple3(aJ, aK.name, aK.decimals)
272+ let ai = E
273+ let aO = toBase58String(ai)
274+ let aP = valueOrErrorMessage(assetInfo(ai), (("Asset " + aO) + " doesn't exist"))
275+ $Tuple3(aO, aP.name, aP.decimals)
248276 }
249- else if ($isInstanceOf(B, "Unit"))
277+ else if ($isInstanceOf(E, "Unit"))
250278 then {
251- let ag = B
279+ let aj = E
252280 $Tuple3("WAVES", "WAVES", 8)
253281 }
254282 else throw("Match error")
255283 }
256284
257285
258-func aL (aM) = if ((aM == "WAVES"))
286+func aQ (aR) = if ((aR == "WAVES"))
259287 then $Tuple3("WAVES", "WAVES", 8)
260288 else {
261- let aJ = aM
262- let af = fromBase58String(aM)
263- let aK = valueOrErrorMessage(assetInfo(af), (("Asset " + aJ) + " doesn't exist"))
264- $Tuple3(aJ, aK.name, aK.decimals)
289+ let aO = aR
290+ let ai = fromBase58String(aR)
291+ let aP = valueOrErrorMessage(assetInfo(ai), (("Asset " + aO) + " doesn't exist"))
292+ $Tuple3(aO, aP.name, aP.decimals)
265293 }
266294
267295
268-func aN (aO) = [BooleanEntry(c, false), StringEntry(n, aO)]
296+func aS (aT) = [BooleanEntry(c, false), StringEntry(n, aT)]
269297
270298
271-func aP (aQ,au,aR) = if (if ((au == L))
299+func aU (aV,ay,aW) = if (if ((ay == O))
272300 then true
273- else (au == O))
301+ else (ay == R))
274302 then {
275- let aS = if ((au == L))
276- then (T * (if ((aR == M))
303+ let aX = if ((ay == O))
304+ then (W * (if ((aW == P))
277305 then 2
278306 else 1))
279- else if ((au == O))
280- then U
307+ else if ((ay == R))
308+ then X
281309 else 0
282- let aT = (aQ - aS)
283- if ((0 >= aT))
284- then throw((((("Insufficient amount " + toString(aQ)) + " to deduct staking fee ") + toString(aS)) + "USDN/EURN"))
285- else aT
310+ let aY = (aV - aX)
311+ if ((0 >= aY))
312+ then throw((((("Insufficient amount " + toString(aV)) + " to deduct staking fee ") + toString(aX)) + "USDN/EURN"))
313+ else aY
286314 }
287- else aQ
315+ else aV
288316
289317
290-func aU (au,aR) = if ((au == L))
291- then (T * (if ((aR == M))
318+func aZ (ay,aW) = if ((ay == O))
319+ then (W * (if ((aW == P))
292320 then 2
293321 else 1))
294- else if ((au == O))
295- then U
322+ else if ((ay == R))
323+ then X
296324 else 0
297325
298326
299-func aV (aQ,aW,aX) = throw((((((((("Insufficient DApp balance to pay " + toString(aQ)) + " ") + aX) + " due to staking. Available: ") + toString(aW)) + " ") + aX) + ". Please contact support in Telegram: https://t.me/swopfisupport"))
327+func ba (aV,bb,bc) = throw((((((((("Insufficient DApp balance to pay " + toString(aV)) + " ") + bc) + " due to staking. Available: ") + toString(bb)) + " ") + bc) + ". Please contact support in Telegram: https://t.me/swopfisupport"))
300328
301329
302-func aY (aZ,ba) = throw((((((((((((((((("Insufficient DApp balance to pay " + toString(aZ)) + " ") + ae) + " and ") + toString(ba)) + " ") + ah) + " due to staking. Available: ") + toString(aD)) + " ") + ae) + " and ") + toString(aE)) + " ") + ah) + ". Please contact support in Telegram: https://t.me/swopfisupport"))
330+func bd (be,bf) = throw((((((((((((((((("Insufficient DApp balance to pay " + toString(be)) + " ") + ah) + " and ") + toString(bf)) + " ") + ak) + " due to staking. Available: ") + toString(aI)) + " ") + ah) + " and ") + toString(aJ)) + " ") + ak) + ". Please contact support in Telegram: https://t.me/swopfisupport"))
303331
304332
305-func bb () = aN(((((((((((((((("Suspicious state. Actual balances: " + toString(aF)) + " ") + ae) + ", ") + toString(aG)) + " ") + ah) + ". State: ") + toString(ai)) + " ") + ae) + ", ") + toString(aj)) + " ") + ah))
333+func bg () = aS(((((((((((((((("Suspicious state. Actual balances: " + toString(aK)) + " ") + ah) + ", ") + toString(aL)) + " ") + ak) + ". State: ") + toString(al)) + " ") + ah) + ", ") + toString(am)) + " ") + ak))
306334
307335
308-@Callable(ay)
309-func init (bc) = {
310- let bd = $Tuple2(ay.payments[0].amount, ay.payments[0].assetId)
311- let be = bd._1
312- let bf = bd._2
313- let bg = $Tuple2(ay.payments[1].amount, ay.payments[1].assetId)
314- let bh = bg._1
315- let bi = bg._2
316- let bj = aI(bf)
317- let bk = bj._1
318- let bl = bj._2
319- let bm = bj._3
320- let bn = aI(bi)
321- let bo = bn._1
322- let bp = bn._2
323- let bq = bn._3
324- if (!(containsElement([E, F, G, I], ay.callerPublicKey)))
325- then throw("Only admin can call this function")
326- else if (isDefined(getBoolean(this, c)))
327- then throw("DApp is already active")
328- else if ((bf == bi))
329- then throw("Assets must be different")
330- else {
331- let br = ((("s" + take(bl, 7)) + "_") + take(bp, 7))
332- let bs = ((((("ShareToken of SwopFi protocol for " + bl) + " and ") + bp) + " at address ") + toString(this))
333- let bt = ((bm + bq) / 2)
334- let bu = pow(be, bm, 5, 1, bm, DOWN)
335- let bv = pow(bh, bq, 5, 1, bq, DOWN)
336- let bw = pow(10, 0, bt, 0, 0, DOWN)
337- let bx = fraction(bu, bv, bw)
338- let by = Issue(br, bs, bx, bt, true)
339- let bz = calculateAssetId(by)
340- let bA = [StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, bk), StringEntry(e, bo), IntegerEntry(f, be), IntegerEntry(g, bh), IntegerEntry(l, am), IntegerEntry(m, ao), by, StringEntry(j, toBase58String(bz)), IntegerEntry(k, bx), ScriptTransfer(ay.caller, bx, bz)]
341- if (bc)
342- then (bA ++ [BooleanEntry(o, bc), IntegerEntry(p, (W + (Y * X)))])
343- else bA
344- }
336+@Callable(aC)
337+func init (bh) = {
338+ let bi = $Tuple2(aC.payments[0].amount, aC.payments[0].assetId)
339+ let bj = bi._1
340+ let bk = bi._2
341+ let bl = $Tuple2(aC.payments[1].amount, aC.payments[1].assetId)
342+ let bm = bl._1
343+ let bn = bl._2
344+ let bo = $Tuple2(aC.payments[2].amount, aC.payments[2].assetId)
345+ let bp = bo._1
346+ let bq = bo._2
347+ let br = isDataStorageUntouched(this)
348+ let bs = scriptHash(this)
349+ if ((aC.caller == this))
350+ then throw("You can't call yourself")
351+ else if (if ((bq != Q))
352+ then true
353+ else (bp != aw))
354+ then throw("You need to attach 10 SWOP tokens")
355+ else if (if (!(aD(bk)))
356+ then !(aD(bn))
357+ else false)
358+ then throw("One of assets must be USDN, WAVES or SWOP")
359+ else if (if ((bs == value(getBinary(B, w))))
360+ then true
361+ else !(br))
362+ then throw("Unexpected script was found.")
363+ else if (isDefined(getBoolean(this, c)))
364+ then throw("DApp is already active")
365+ else if ((bk == bn))
366+ then throw("Assets must be different")
367+ else {
368+ let bt = {
369+ let E = bk
370+ if ($isInstanceOf(E, "ByteVector"))
371+ then {
372+ let ai = E
373+ toBase58String(ai)
374+ }
375+ else if ($isInstanceOf(E, "Unit"))
376+ then {
377+ let aj = E
378+ "WAVES"
379+ }
380+ else throw("Match error")
381+ }
382+ let bu = {
383+ let E = bn
384+ if ($isInstanceOf(E, "ByteVector"))
385+ then {
386+ let ai = E
387+ toBase58String(ai)
388+ }
389+ else if ($isInstanceOf(E, "Unit"))
390+ then {
391+ let aj = E
392+ "WAVES"
393+ }
394+ else throw("Match error")
395+ }
396+ let bv = valueOrElse(getInteger(B, ("keyOracleAssetPriority" + bt)), 999999)
397+ let bw = valueOrElse(getInteger(B, ("keyOracleAssetPriority" + bu)), 999999)
398+ let bx = if ((bw > bv))
399+ then $Tuple4(bm, bn, bj, bk)
400+ else $Tuple4(bj, bk, bm, bn)
401+ let by = bx._1
402+ let bz = bx._2
403+ let bA = bx._3
404+ let bB = bx._4
405+ let bC = aN(bz)
406+ let bD = bC._1
407+ let bE = bC._2
408+ let bF = bC._3
409+ let bG = aN(bB)
410+ let bH = bG._1
411+ let bI = bG._2
412+ let bJ = bG._3
413+ let bK = invoke(B, "addPool", [this, ((bE + "_") + bI)], nil)
414+ if ((bK == bK))
415+ then if (!(isDefined(getString(B, ("pool_" + toString(this))))))
416+ then throw("Pool is not added")
417+ else {
418+ let bL = ((("s" + take(bE, 7)) + "_") + take(bI, 7))
419+ let bM = ((((("ShareToken of SwopFi protocol for " + bE) + " and ") + bI) + " at address ") + toString(this))
420+ let bN = ((bF + bJ) / 2)
421+ let bO = pow(by, bF, 5, 1, bF, DOWN)
422+ let bP = pow(bA, bJ, 5, 1, bJ, DOWN)
423+ let bQ = pow(10, 0, bN, 0, 0, DOWN)
424+ let bR = fraction(bO, bP, bQ)
425+ let bS = Issue(bL, bM, bR, bN, true)
426+ let bT = calculateAssetId(bS)
427+ let bU = [StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, bD), StringEntry(e, bH), IntegerEntry(f, by), IntegerEntry(g, bA), IntegerEntry(l, ap), IntegerEntry(m, ar), bS, StringEntry(j, toBase58String(bT)), IntegerEntry(k, bR), IntegerEntry(x, height), ScriptTransfer(M, bR, bT), ScriptTransfer(aC.caller, aw, Q)]
428+ bU
429+ }
430+ else throw("Strict value is not equal to itself.")
431+ }
345432 }
346433
347434
348435
349-@Callable(ay)
350-func initWithInitRatio (bB,bC,aa,ab,bc) = {
351- let bD = aL(aa)
352- let bk = bD._1
353- let bl = bD._2
354- let bm = bD._3
355- let bE = aL(ab)
356- let bo = bE._1
357- let bp = bE._2
358- let bq = bE._3
359- if (!(containsElement([E, F, G, I], ay.callerPublicKey)))
436+@Callable(aC)
437+func keepLimitForFirstHarvest (bV) = if (!(ac))
438+ then throw("DApp is inactive at this moment")
439+ else if (!(containsElement([H, I, J, L], aC.callerPublicKey)))
360440 then throw("Only admin can call this function")
361- else if (isDefined(getBoolean(this, c)))
362- then throw("DApp is already active")
363- else if ((aa == ab))
364- then throw("Assets must be different")
365- else {
366- let br = ((("s" + take(bl, 7)) + "_") + take(bp, 7))
367- let bs = ((((("ShareToken of SwopFi protocol for " + bl) + " and ") + bp) + " at address ") + toString(this))
368- let bt = ((bm + bq) / 2)
369- let bx = 0
370- let by = Issue(br, bs, bx, bt, true)
371- let bz = calculateAssetId(by)
372- let bA = [StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, bk), StringEntry(e, bo), IntegerEntry(h, bB), IntegerEntry(i, bC), IntegerEntry(f, 0), IntegerEntry(g, 0), IntegerEntry(l, am), IntegerEntry(m, ao), by, StringEntry(j, toBase58String(bz)), IntegerEntry(k, bx)]
373- if (bc)
374- then (bA ++ [BooleanEntry(o, bc), IntegerEntry(p, (W + (Y * X)))])
375- else bA
376- }
377- }
441+ else [IntegerEntry(q, bV)]
378442
379443
380444
381-@Callable(ay)
382-func keepLimitForFirstHarvest (bF) = if (!(Z))
383- then throw("DApp is inactive at this moment")
384- else if (!(containsElement([E, F, G, I], ay.callerPublicKey)))
385- then throw("Only admin can call this function")
386- else [IntegerEntry(q, bF)]
387-
388-
389-
390-@Callable(ay)
391-func replenishWithTwoTokens (bG) = {
392- let bf = ay.payments[0].assetId
393- let bi = ay.payments[1].assetId
394- let be = aP(ay.payments[0].amount, bf, bi)
395- let bh = aP(ay.payments[1].amount, bi, bf)
396- if (if ((ai == 0))
397- then (aj == 0)
445+@Callable(aC)
446+func replenishWithTwoTokens (bW) = {
447+ let bz = aC.payments[0].assetId
448+ let bB = aC.payments[1].assetId
449+ let by = aU(aC.payments[0].amount, bz, bB)
450+ let bA = aU(aC.payments[1].amount, bB, bz)
451+ if (if ((al == 0))
452+ then (am == 0)
398453 else false)
399454 then {
400- let bH = aI(bf)
401- let bk = bH._1
402- let bl = bH._2
403- let bm = bH._3
404- let bI = aI(bi)
405- let bo = bI._1
406- let bp = bI._2
407- let bq = bI._3
408- let bJ = fraction(fraction(aB, aq, be), ap, fraction(aC, aq, bh))
409- if ((bf == bi))
455+ let bX = aN(bz)
456+ let bD = bX._1
457+ let bE = bX._2
458+ let bF = bX._3
459+ let bY = aN(bB)
460+ let bH = bY._1
461+ let bI = bY._2
462+ let bJ = bY._3
463+ let bZ = fraction(fraction(aG, at, by), as, fraction(aH, at, bA))
464+ if ((bz == bB))
410465 then throw("Assets must be different")
411466 else {
412- let bt = ((bm + bq) / 2)
413- let bx = fraction(pow(be, bm, 5, 1, bm, DOWN), pow(bh, bq, 5, 1, bq, DOWN), pow(10, 0, bt, 0, 0, DOWN))
414- if (!(Z))
467+ let bN = ((bF + bJ) / 2)
468+ let bR = fraction(pow(by, bF, 5, 1, bF, DOWN), pow(bA, bJ, 5, 1, bJ, DOWN), pow(10, 0, bN, 0, 0, DOWN))
469+ if (!(ac))
415470 then throw("DApp is inactive at this moment")
416- else if (if ((0 > bG))
471+ else if (if ((0 > bW))
417472 then true
418- else (bG > ar))
419- then throw(((("Slippage tolerance must be between 0 and " + toString(ar)) + " inclusively. Actual: ") + toString(bG)))
420- else if ((size(ay.payments) != 2))
473+ else (bW > au))
474+ then throw(((("Slippage tolerance must be between 0 and " + toString(au)) + " inclusively. Actual: ") + toString(bW)))
475+ else if ((size(aC.payments) != 2))
421476 then throw("Two attached assets expected")
422- else if (if ((((ap * (ar - bG)) / ar) > bJ))
477+ else if (if ((((as * (au - bW)) / au) > bZ))
423478 then true
424- else (bJ > ((ap * (ar + bG)) / ar)))
479+ else (bZ > ((as * (au + bW)) / au)))
425480 then throw("Incorrect assets amount: amounts must have the contract ratio")
426- else if (if ((bf != ac))
481+ else if (if ((bz != af))
427482 then true
428- else (bi != ad))
429- then throw(((("Incorrect assets attached. Expected: " + aa) + " and ") + ab))
430- else if ((bx == 0))
483+ else (bB != ag))
484+ then throw(((("Incorrect assets attached. Expected: " + ad) + " and ") + ae))
485+ else if ((bR == 0))
431486 then throw("Too small amount to replenish")
432- else if (!(aH))
433- then ([ScriptTransfer(ay.caller, be, bf), ScriptTransfer(ay.caller, bh, bi)] ++ bb())
434- else [Reissue(ak, bx, true), IntegerEntry(f, be), IntegerEntry(g, bh), IntegerEntry(k, bx), ScriptTransfer(ay.caller, bx, ak)]
487+ else if (!(aM))
488+ then ([ScriptTransfer(aC.caller, by, bz), ScriptTransfer(aC.caller, bA, bB)] ++ bg())
489+ else [Reissue(an, bR, true), IntegerEntry(f, by), IntegerEntry(g, bA), IntegerEntry(k, bR), ScriptTransfer(aC.caller, bR, an)]
435490 }
436491 }
437492 else {
438- let bJ = fraction(fraction(ai, aq, be), ap, fraction(aj, aq, bh))
439- let bK = fraction(be, aq, ai)
440- let bL = fraction(bh, aq, aj)
441- let bM = fraction(min([bK, bL]), al, aq)
442- if (!(Z))
493+ let bZ = fraction(fraction(al, at, by), as, fraction(am, at, bA))
494+ let ca = fraction(by, at, al)
495+ let cb = fraction(bA, at, am)
496+ let cc = fraction(min([ca, cb]), ao, at)
497+ if (!(ac))
443498 then throw("DApp is inactive at this moment")
444- else if (if ((0 > bG))
499+ else if (if ((0 > bW))
445500 then true
446- else (bG > ar))
447- then throw(((("Slippage tolerance must be between 0 and " + toString(ar)) + " inclusively. Actual: ") + toString(bG)))
448- else if ((size(ay.payments) != 2))
501+ else (bW > au))
502+ then throw(((("Slippage tolerance must be between 0 and " + toString(au)) + " inclusively. Actual: ") + toString(bW)))
503+ else if ((size(aC.payments) != 2))
449504 then throw("Two attached assets expected")
450- else if (if ((bf != ac))
505+ else if (if ((bz != af))
451506 then true
452- else (bi != ad))
453- then throw(((("Incorrect assets attached. Expected: " + aa) + " and ") + ab))
454- else if (if ((((ap * (ar - bG)) / ar) > bJ))
507+ else (bB != ag))
508+ then throw(((("Incorrect assets attached. Expected: " + ad) + " and ") + ae))
509+ else if (if ((((as * (au - bW)) / au) > bZ))
455510 then true
456- else (bJ > ((ap * (ar + bG)) / ar)))
511+ else (bZ > ((as * (au + bW)) / au)))
457512 then throw("Incorrect assets amount: amounts must have the contract ratio")
458- else if ((bM == 0))
513+ else if ((cc == 0))
459514 then throw("Too small amount to replenish")
460- else if (!(aH))
461- then ([ScriptTransfer(ay.caller, be, bf), ScriptTransfer(ay.caller, bh, bi)] ++ bb())
462- else [IntegerEntry(f, (ai + be)), IntegerEntry(g, (aj + bh)), IntegerEntry(k, (al + bM)), Reissue(ak, bM, true), ScriptTransfer(ay.caller, bM, ak)]
515+ else if (!(aM))
516+ then ([ScriptTransfer(aC.caller, by, bz), ScriptTransfer(aC.caller, bA, bB)] ++ bg())
517+ else [IntegerEntry(f, (al + by)), IntegerEntry(g, (am + bA)), IntegerEntry(k, (ao + cc)), Reissue(an, cc, true), ScriptTransfer(aC.caller, cc, an)]
463518 }
464519 }
465520
466521
467522
468-@Callable(ay)
523+@Callable(aC)
469524 func withdraw () = {
470- let bN = $Tuple2(ay.payments[0].amount, ay.payments[0].assetId)
471- let bO = bN._1
472- let bP = bN._2
473- let bQ = aP(fraction(bO, ai, al), ac, ad)
474- let bR = aP(fraction(bO, aj, al), ad, ac)
475- if (!(Z))
525+ let cd = $Tuple2(aC.payments[0].amount, aC.payments[0].assetId)
526+ let ce = cd._1
527+ let cf = cd._2
528+ let cg = aU(fraction(ce, al, ao), af, ag)
529+ let ch = aU(fraction(ce, am, ao), ag, af)
530+ if (!(ac))
476531 then throw("DApp is inactive at this moment")
477- else if ((size(ay.payments) != 1))
532+ else if ((size(aC.payments) != 1))
478533 then throw("One attached payment expected")
479- else if ((bP != ak))
480- then throw(("Incorrect asset attached. Expected: " + toBase58String(ak)))
481- else if (!(aH))
482- then ([ScriptTransfer(ay.caller, bO, bP)] ++ bb())
483- else if (if ((bQ > aD))
534+ else if ((cf != an))
535+ then throw(("Incorrect asset attached. Expected: " + toBase58String(an)))
536+ else if (!(aM))
537+ then ([ScriptTransfer(aC.caller, ce, cf)] ++ bg())
538+ else if (if ((cg > aI))
484539 then true
485- else (bR > aE))
486- then aY(bQ, bR)
487- else [IntegerEntry(f, (ai - bQ)), IntegerEntry(g, (aj - bR)), IntegerEntry(k, (al - bO)), Burn(ak, bO), ScriptTransfer(ay.caller, bQ, ac), ScriptTransfer(ay.caller, bR, ad)]
540+ else (ch > aJ))
541+ then bd(cg, ch)
542+ else [IntegerEntry(f, (al - cg)), IntegerEntry(g, (am - ch)), IntegerEntry(k, (ao - ce)), Burn(an, ce), ScriptTransfer(aC.caller, cg, af), ScriptTransfer(aC.caller, ch, ag)]
488543 }
489544
490545
491546
492-@Callable(ay)
493-func exchange (bS) = {
494- let bT = $Tuple2(ay.payments[0].amount, ay.payments[0].assetId)
495- let bO = bT._1
496- let bP = bT._2
497- func bU (bV,bW) = {
498- let bX = fraction(bW, bO, (bO + bV))
499- let bY = fraction(bX, (ao - am), ao)
500- let bZ = fraction(bX, an, ao)
501- if ((bS > bY))
502- then throw(((("Calculated amount to receive " + toString(bY)) + " is less than specified minimum ") + toString(bS)))
503- else $Tuple3(bX, bY, bZ)
547+@Callable(aC)
548+func exchange (ci) = {
549+ let cj = $Tuple2(aC.payments[0].amount, aC.payments[0].assetId)
550+ let ce = cj._1
551+ let cf = cj._2
552+ func ck (cl,cm) = {
553+ let cn = fraction(cm, ce, (ce + cl))
554+ let co = fraction(cn, (ar - ap), ar)
555+ let cp = fraction(cn, aq, ar)
556+ if ((ci > co))
557+ then throw(((("Calculated amount to receive " + toString(co)) + " is less than specified minimum ") + toString(ci)))
558+ else $Tuple3(cn, co, cp)
504559 }
505560
506- if (!(Z))
561+ if (!(ac))
507562 then throw("DApp is inactive at this moment")
508- else if (if ((ai == 0))
563+ else if (if ((al == 0))
509564 then true
510- else (aj == 0))
565+ else (am == 0))
511566 then throw("Can't exchange with zero balance")
512- else if ((0 >= bS))
513- then throw(("Minimal amount to receive must be positive. Actual: " + toString(bS)))
514- else if ((size(ay.payments) != 1))
567+ else if ((0 >= ci))
568+ then throw(("Minimal amount to receive must be positive. Actual: " + toString(ci)))
569+ else if ((size(aC.payments) != 1))
515570 then throw("One attached payment expected")
516- else if (!(aH))
517- then ([ScriptTransfer(ay.caller, bO, bP)] ++ bb())
518- else if ((bP == ac))
571+ else if (!(aM))
572+ then ([ScriptTransfer(aC.caller, ce, cf)] ++ bg())
573+ else if ((cf == af))
519574 then {
520- let ca = ad
521- let cb = bU(ai, aj)
522- let bX = cb._1
523- let bY = cb._2
524- let bZ = cb._3
525- let cc = (ai + bO)
526- let cd = ((aj - bY) - bZ)
527- if (if ((az >= cc))
575+ let cq = ag
576+ let cr = ck(al, am)
577+ let cn = cr._1
578+ let co = cr._2
579+ let cp = cr._3
580+ let cs = (al + ce)
581+ let ct = ((am - co) - cp)
582+ if (if ((aE >= cs))
528583 then true
529- else (aA >= cd))
530- then aV(bY, aE, ah)
531- else [IntegerEntry(f, cc), IntegerEntry(g, cd), ScriptTransfer(ay.caller, bY, ca), ScriptTransfer(J, bZ, ca)]
584+ else (aF >= ct))
585+ then ba(co, aJ, ak)
586+ else [IntegerEntry(f, cs), IntegerEntry(g, ct), ScriptTransfer(aC.caller, co, cq), ScriptTransfer(M, cp, cq)]
532587 }
533- else if ((bP == ad))
588+ else if ((cf == ag))
534589 then {
535- let ca = ac
536- let ce = bU(aj, ai)
537- let bX = ce._1
538- let bY = ce._2
539- let bZ = ce._3
540- let cc = ((ai - bY) - bZ)
541- let cd = (aj + bO)
542- if (if ((az >= cc))
590+ let cq = af
591+ let cu = ck(am, al)
592+ let cn = cu._1
593+ let co = cu._2
594+ let cp = cu._3
595+ let cs = ((al - co) - cp)
596+ let ct = (am + ce)
597+ if (if ((aE >= cs))
543598 then true
544- else (aA >= cd))
545- then aV(bY, aD, ae)
546- else [IntegerEntry(f, cc), IntegerEntry(g, cd), ScriptTransfer(ay.caller, bY, ca), ScriptTransfer(J, bZ, ca)]
599+ else (aF >= ct))
600+ then ba(co, aI, ah)
601+ else [IntegerEntry(f, cs), IntegerEntry(g, ct), ScriptTransfer(aC.caller, co, cq), ScriptTransfer(M, cp, cq)]
547602 }
548- else throw(((("Incorrect asset attached. Expected: " + aa) + " or ") + ab))
603+ else throw(((("Incorrect asset attached. Expected: " + ad) + " or ") + ae))
549604 }
550605
551606
552607
553-@Callable(ay)
554-func shutdown () = if (!(Z))
608+@Callable(aC)
609+func shutdown () = if (!(ac))
555610 then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, n), "the cause wasn't specified")))
556- else if (!(containsElement([E, F, G, H], ay.callerPublicKey)))
611+ else if (!(containsElement([H, I, J, K], aC.callerPublicKey)))
557612 then throw("Only admin can call this function")
558- else aN("Paused by admin")
613+ else aS("Paused by admin")
559614
560615
561616
562-@Callable(ay)
563-func activate () = if (Z)
617+@Callable(aC)
618+func activate () = if (ac)
564619 then throw("DApp is already active")
565- else if (!(containsElement([E, F, G, H], ay.callerPublicKey)))
620+ else if (!(containsElement([H, I, J, K], aC.callerPublicKey)))
566621 then throw("Only admin can call this function")
567622 else [BooleanEntry(c, true), DeleteEntry(n)]
568623
569624
570625
571-@Callable(ay)
572-func takeIntoAccountExtraFunds (cf) = {
573- let cg = (aF - ai)
574- let ch = (aG - aj)
575- let ci = (cg - (if ((ac == unit))
576- then cf
626+@Callable(aC)
627+func takeIntoAccountExtraFunds (cv) = {
628+ let cw = (aK - al)
629+ let cx = (aL - am)
630+ let cy = (cw - (if ((af == unit))
631+ then cv
577632 else 0))
578- let cj = (ch - (if ((ad == unit))
579- then cf
633+ let cz = (cx - (if ((ag == unit))
634+ then cv
580635 else 0))
581- if (!(Z))
636+ if (!(ac))
582637 then throw("DApp is inactive at this moment")
583- else if ((ay.caller != this))
638+ else if ((aC.caller != this))
584639 then throw("Only the DApp itself can call this function")
585- else if ((0 > cf))
586- then throw(("Argument 'amountLeave' cannot be negative. Actual: " + toString(cf)))
587- else if (if ((0 > cg))
640+ else if ((0 > cv))
641+ then throw(("Argument 'amountLeave' cannot be negative. Actual: " + toString(cv)))
642+ else if (if ((0 > cw))
588643 then true
589- else (0 > ch))
590- then aN("Enroll amount negative")
591- else if (if ((0 > ci))
644+ else (0 > cx))
645+ then aS("Enroll amount negative")
646+ else if (if ((0 > cy))
592647 then true
593- else (0 > cj))
648+ else (0 > cz))
594649 then throw("Too large amountLeave")
595- else [IntegerEntry(f, (ai + ci)), IntegerEntry(g, (aj + cj)), IntegerEntry(("last_income_" + aa), ci), IntegerEntry(("last_income_" + ab), cj)]
650+ else [IntegerEntry(f, (al + cy)), IntegerEntry(g, (am + cz)), IntegerEntry(("last_income_" + ad), cy), IntegerEntry(("last_income_" + ae), cz)]
596651 }
597652
598653
599-@Verifier(ck)
600-func cl () = {
601- let B = ck
602- if ($isInstanceOf(B, "InvokeScriptTransaction"))
654+
655+@Callable(aC)
656+func enableFirstHarvest () = [BooleanEntry(o, true), IntegerEntry(p, (Z + (ab * aa)))]
657+
658+
659+@Verifier(cA)
660+func cB () = {
661+ let cC = {
662+ let cD = if (sigVerify(cA.bodyBytes, cA.proofs[0], H))
663+ then 1
664+ else 0
665+ let cE = if (sigVerify(cA.bodyBytes, cA.proofs[1], I))
666+ then 1
667+ else 0
668+ let cF = if (sigVerify(cA.bodyBytes, cA.proofs[2], J))
669+ then 1
670+ else 0
671+ (((cD + cE) + cF) >= 2)
672+ }
673+ let E = cA
674+ if ($isInstanceOf(E, "InvokeScriptTransaction"))
603675 then {
604- let cm = B
605- let cn = if ((cm.dApp == this))
606- then (cm.function == "takeIntoAccountExtraFunds")
676+ let cG = E
677+ let cH = if ((cG.dApp == this))
678+ then (cG.function == "takeIntoAccountExtraFunds")
607679 else false
608- let co = if (if ((cm.dApp == P))
609- then if (if (if ((cm.function == "lockNeutrino"))
610- then (size(cm.payments) == 1)
680+ let cI = if ((cG.dApp == this))
681+ then (cG.function == "enableFirstHarvest")
682+ else false
683+ let cJ = if (if ((cG.dApp == S))
684+ then if (if (if ((cG.function == "lockNeutrino"))
685+ then (size(cG.payments) == 1)
611686 else false)
612- then if ((cm.payments[0].assetId == L))
687+ then if ((cG.payments[0].assetId == O))
613688 then true
614- else (cm.payments[0].assetId == M)
689+ else (cG.payments[0].assetId == P)
615690 else false)
616691 then true
617- else if ((cm.function == "unlockNeutrino"))
618- then (size(cm.payments) == 0)
692+ else if ((cG.function == "unlockNeutrino"))
693+ then (size(cG.payments) == 0)
619694 else false
620695 else false)
621696 then true
622- else if ((cm.dApp == Q))
623- then if (if (if ((cm.function == "startStaking"))
624- then (size(cm.payments) == 1)
697+ else if ((cG.dApp == T))
698+ then if (if (if ((cG.function == "startStaking"))
699+ then (size(cG.payments) == 1)
625700 else false)
626- then (cm.payments[0].assetId == O)
701+ then (cG.payments[0].assetId == R)
627702 else false)
628703 then true
629- else if ((cm.function == "stopStaking"))
630- then (size(cm.payments) == 0)
704+ else if ((cG.function == "stopStaking"))
705+ then (size(cG.payments) == 0)
631706 else false
632707 else false
633- let cp = if (if (if ((cm.dApp == R))
634- then (cm.function == "exchange")
708+ let cK = if (if (if ((cG.dApp == U))
709+ then (cG.function == "exchange")
635710 else false)
636- then (ac == L)
711+ then (af == O)
637712 else false)
638713 then true
639- else if (if ((ad == L))
640- then (size(cm.payments) == 1)
714+ else if (if ((ag == O))
715+ then (size(cG.payments) == 1)
641716 else false)
642- then (cm.payments[0].assetId == L)
717+ then (cG.payments[0].assetId == O)
643718 else false
644- let cq = if (if (if ((cm.dApp == S))
645- then (cm.function == "exchange")
719+ let cL = if (if (if ((cG.dApp == V))
720+ then (cG.function == "exchange")
646721 else false)
647- then (ac == M)
722+ then (af == P)
648723 else false)
649724 then true
650- else if (if ((ad == M))
651- then (size(cm.payments) == 1)
725+ else if (if ((ag == P))
726+ then (size(cG.payments) == 1)
652727 else false)
653- then (cm.payments[0].assetId == L)
728+ then (cG.payments[0].assetId == O)
654729 else false
655- let cr = if (if (if (sigVerify(ck.bodyBytes, ck.proofs[0], E))
730+ let cM = if (if (if (sigVerify(cA.bodyBytes, cA.proofs[0], H))
656731 then true
657- else sigVerify(ck.bodyBytes, ck.proofs[0], F))
732+ else sigVerify(cA.bodyBytes, cA.proofs[0], I))
658733 then true
659- else sigVerify(ck.bodyBytes, ck.proofs[0], G))
734+ else sigVerify(cA.bodyBytes, cA.proofs[0], J))
660735 then true
661- else sigVerify(ck.bodyBytes, ck.proofs[0], I)
662- if (if (if (if (cn)
736+ else sigVerify(cA.bodyBytes, cA.proofs[0], L)
737+ if (if (if (if (if (if (cH)
663738 then true
664- else co)
739+ else cI)
665740 then true
666- else cp)
741+ else cJ)
667742 then true
668- else cq)
669- then cr
670- else false
743+ else cK)
744+ then true
745+ else cL)
746+ then cM
747+ else false)
748+ then true
749+ else cC
671750 }
672- else {
673- let cs = if (sigVerify(ck.bodyBytes, ck.proofs[0], E))
674- then 1
675- else 0
676- let ct = if (sigVerify(ck.bodyBytes, ck.proofs[1], F))
677- then 1
678- else 0
679- let cu = if (sigVerify(ck.bodyBytes, ck.proofs[2], G))
680- then 1
681- else 0
682- (((cs + ct) + cu) >= 2)
683- }
751+ else cC
684752 }
685753

github/deemru/w8io/026f985 
279.03 ms