tx · F6e8ouBAwFnoPun5GdjjDFb1ASmu3Wuk2HVa6qNELeSi

3MrULQRLc52GWrJF1tMcAm4M78fPe57o9Kt:  -0.04200000 Waves

2023.07.11 16:32 [2661309] smart account 3MrULQRLc52GWrJF1tMcAm4M78fPe57o9Kt > SELF 0.00000000 Waves

{ "type": 13, "id": "F6e8ouBAwFnoPun5GdjjDFb1ASmu3Wuk2HVa6qNELeSi", "fee": 4200000, "feeAssetId": null, "timestamp": 1689082357051, "version": 2, "chainId": 84, "sender": "3MrULQRLc52GWrJF1tMcAm4M78fPe57o9Kt", "senderPublicKey": "Aig94J3pRT3J41eXw33rJrs67gTCECiMVRZrbtuoARit", "proofs": [ "5ZHGVKbEcK7ayLwzy3MM1JHpfRbfihw1QfB7STFAaqwZjAdjx9d7mfDZNWfAL7h6vJbooS4nnaXHHDVmkAJmiQ6Y" ], "script": "base64:BgKYOAgCEgASBQoDAQQBEgcKBQEEAQgBEgQKAgEEEgMKAQESBAoCAQQSBAoCCAESBAoCCAESBAoCCAESBQoDAQgBEgASBAoCAQESAwoBARIFCgMBAQESBAoCCAgSABIAEgMKAQgSBQoDAQEBEgQKAgEBEgQKAggBEgQKAggIEgsKCQgBAQIBAggEBBIGCgQICAEIEgASAwoBARIDCgEBEgQKAggBIgpsUGRlY2ltYWxzIgZzY2FsZTgiDHNjYWxlOEJpZ0ludCIHc2NhbGUxOCIKemVyb0JpZ0ludCIEYmlnMCIEYmlnMSIEYmlnMiILd2F2ZXNTdHJpbmciA1NFUCIKUG9vbEFjdGl2ZSIPUG9vbFB1dERpc2FibGVkIhlQb29sUHV0QW5kTWF0Y2hlckRpc2FibGVkIgxQb29sU2h1dGRvd24iDmlkeFBvb2xBZGRyZXNzIg1pZHhQb29sU3RhdHVzIhBpZHhQb29sTFBBc3NldElkIg1pZHhBbXRBc3NldElkIg9pZHhQcmljZUFzc2V0SWQiDmlkeEFtdEFzc2V0RGNtIhBpZHhQcmljZUFzc2V0RGNtIg5pZHhJQW10QXNzZXRJZCIQaWR4SVByaWNlQXNzZXRJZCINaWR4TFBBc3NldERjbSISaWR4UG9vbEFtdEFzc2V0QW10IhRpZHhQb29sUHJpY2VBc3NldEFtdCIRaWR4UG9vbExQQXNzZXRBbXQiGWlkeEZhY3RvcnlTdGFraW5nQ29udHJhY3QiGmlkeEZhY3RvcnlTbGlwcGFnZUNvbnRyYWN0IgV0b1gxOCIHb3JpZ1ZhbCINb3JpZ1NjYWxlTXVsdCILdG9YMThCaWdJbnQiB2Zyb21YMTgiA3ZhbCIPcmVzdWx0U2NhbGVNdWx0Igxmcm9tWDE4Um91bmQiBXJvdW5kIgd0b1NjYWxlIgNhbXQiCHJlc1NjYWxlIghjdXJTY2FsZSIDYWJzIglhYnNCaWdJbnQiDHN3YXBDb250cmFjdCICZmMiE2tleU1hbmFnZXJQdWJsaWNLZXkiFmtleU1hbmFnZXJWYXVsdEFkZHJlc3MiAnBsIgJwaCIBaCIJdGltZXN0YW1wIgNwYXUiC3VzZXJBZGRyZXNzIgR0eElkIgNnYXUiAmFhIgJwYSIGa2V5RmVlIgpmZWVEZWZhdWx0IgNmZWUiBmtleUtMcCIVa2V5S0xwUmVmcmVzaGVkSGVpZ2h0IhJrZXlLTHBSZWZyZXNoRGVsYXkiFmtMcFJlZnJlc2hEZWxheURlZmF1bHQiD2tMcFJlZnJlc2hEZWxheSIUa2V5QWRkaXRpb25hbEJhbGFuY2UiB2Fzc2V0SWQiFmtleVN0YWtpbmdBc3NldEJhbGFuY2UiGmdldEFkZGl0aW9uYWxCYWxhbmNlT3JaZXJvIhxnZXRTdGFraW5nQXNzZXRCYWxhbmNlT3JaZXJvIhBrZXlGYWN0b3J5Q29uZmlnIg1rZXlNYXRjaGVyUHViIilrZXlNYXBwaW5nUG9vbENvbnRyYWN0QWRkcmVzc1RvUG9vbEFzc2V0cyITcG9vbENvbnRyYWN0QWRkcmVzcyINa2V5UG9vbENvbmZpZyIJaUFtdEFzc2V0IgtpUHJpY2VBc3NldCIfa2V5TWFwcGluZ3NCYXNlQXNzZXQyaW50ZXJuYWxJZCIMYmFzZUFzc2V0U3RyIhNrZXlBbGxQb29sc1NodXRkb3duIg1rZXlQb29sV2VpZ2h0Ig9jb250cmFjdEFkZHJlc3MiFmtleUFsbG93ZWRMcFNjcmlwdEhhc2giFmtleUZlZUNvbGxlY3RvckFkZHJlc3MiFmtleVNraXBPcmRlclZhbGlkYXRpb24iC3Bvb2xBZGRyZXNzIg90aHJvd09yZGVyRXJyb3IiCm9yZGVyVmFsaWQiDm9yZGVyVmFsaWRJbmZvIgtzZW5kZXJWYWxpZCIMbWF0Y2hlclZhbGlkIhdhZGRyZXNzRnJvbVN0cmluZ09yVGhpcyINYWRkcmVzc1N0cmluZyIHJG1hdGNoMCIBYSIcZ2V0TWFuYWdlclZhdWx0QWRkcmVzc09yVGhpcyIOZmFjdG9yeUFkZHJlc3MiA2ZjYSIBcyIPZ2V0U3RyaW5nT3JGYWlsIgdhZGRyZXNzIgNrZXkiDGdldEludE9yRmFpbCIIdGhyb3dFcnIiA21zZyIGZm10RXJyIg9mYWN0b3J5Q29udHJhY3QiE2ZlZUNvbGxlY3RvckFkZHJlc3MiBWluRmVlIgFAIgZvdXRGZWUiEGlzR2xvYmFsU2h1dGRvd24iE2dldE1hdGNoZXJQdWJPckZhaWwiDWdldFBvb2xDb25maWciCGFtdEFzc2V0IgpwcmljZUFzc2V0IgxwYXJzZUFzc2V0SWQiBWlucHV0Ig9hc3NldElkVG9TdHJpbmciD3BhcnNlUG9vbENvbmZpZyIKcG9vbENvbmZpZyIQcG9vbENvbmZpZ1BhcnNlZCILJHQwOTU0OTk3MTUiDmNmZ1Bvb2xBZGRyZXNzIg1jZmdQb29sU3RhdHVzIgxjZmdMcEFzc2V0SWQiEGNmZ0Ftb3VudEFzc2V0SWQiD2NmZ1ByaWNlQXNzZXRJZCIWY2ZnQW1vdW50QXNzZXREZWNpbWFscyIVY2ZnUHJpY2VBc3NldERlY2ltYWxzIhBnZXRGYWN0b3J5Q29uZmlnIg9zdGFraW5nQ29udHJhY3QiEHNsaXBwYWdlQ29udHJhY3QiEWRhdGFQdXRBY3Rpb25JbmZvIg1pbkFtdEFzc2V0QW10Ig9pblByaWNlQXNzZXRBbXQiCG91dExwQW10IgVwcmljZSIdc2xpcHBhZ2VUb2xlcmFuY2VQYXNzZWRCeVVzZXIiFXNsaXBwYWdlVG9sZXJhbmNlUmVhbCIIdHhIZWlnaHQiC3R4VGltZXN0YW1wIhJzbGlwYWdlQW10QXNzZXRBbXQiFHNsaXBhZ2VQcmljZUFzc2V0QW10IhFkYXRhR2V0QWN0aW9uSW5mbyIOb3V0QW10QXNzZXRBbXQiEG91dFByaWNlQXNzZXRBbXQiB2luTHBBbXQiDWdldEFjY0JhbGFuY2UiDWJhbGFuY2VPblBvb2wiDHRvdGFsQmFsYW5jZSIPY2FsY1ByaWNlQmlnSW50IghwckFtdFgxOCIIYW1BbXRYMTgiFGNhbGNQcmljZUJpZ0ludFJvdW5kIgdnZXRSYXRlIgVwcm94eSIDaW52IgFyIgdkZXBvc2l0IgZhbW91bnQiDnN0YWtpbmdBc3NldElkIhhjdXJyZW50QWRkaXRpb25hbEJhbGFuY2UiGmN1cnJlbnRTdGFraW5nQXNzZXRCYWxhbmNlIgVhc3NldCINZGVwb3NpdEludm9rZSIUcmVjZWl2ZWRTdGFraW5nQXNzZXQiFG5ld0FkZGl0aW9uYWxCYWxhbmNlIhZuZXdTdGFraW5nQXNzZXRCYWxhbmNlIgh3aXRoZHJhdyIMcHJveHlSYXRlTXVsIg1wcm9maXRBZGRyZXNzIhBjdXJyZW50UHJveHlSYXRlIgdvbGRSYXRlIgxzdGFraW5nQXNzZXQiFG9sZFNlbmRTdGFraW5nQW1vdW50IhZzZW5kU3Rha2luZ0Fzc2V0QW1vdW50Igxwcm9maXRBbW91bnQiDndpdGhkcmF3SW52b2tlIg5yZWNlaXZlZEFzc2V0cyITZ2V0TGVhc2VQcm94eUNvbmZpZyIRcmViYWxhbmNlSW50ZXJuYWwiC3RhcmdldFJhdGlvIgptaW5CYWxhbmNlIhRsZWFzYWJsZVRvdGFsQmFsYW5jZSIXdGFyZ2V0QWRkaXRpb25hbEJhbGFuY2UiBGRpZmYiD3NlbmRBc3NldEFtb3VudCIOZ2V0QXNzZXRBbW91bnQiDnJlYmFsYW5jZUFzc2V0Ig0kdDAxNTk1MTE2MDg3Igppc0xlYXNhYmxlIgtsZWFzZWRSYXRpbyIMcHJveHlBZGRyZXNzIgxwcm94eUFzc2V0SWQiFHN0YWtpbmdQcm9maXRBZGRyZXNzIhl3aXRoZHJhd0FuZFJlYmFsYW5jZUFzc2V0IglnZXRBbW91bnQiDSR0MDE2NDg2MTY2MjIiF25ld1RvdGFsTGVhc2FibGVCYWxhbmNlIg53aXRoZHJhd0Ftb3VudCIXd2l0aGRyYXdBbmRSZWJhbGFuY2VBbGwiFGFtb3VudEFzc2V0T3V0QW1vdW50IhNwcmljZUFzc2V0T3V0QW1vdW50IhJBbUFtdFdpdGhkcmF3U3RhdGUiElByQW10V2l0aGRyYXdTdGF0ZSIQcHJpdmF0ZUNhbGNQcmljZSIKYW1Bc3NldERjbSIKcHJBc3NldERjbSIFYW1BbXQiBXByQW10Ig5hbXRBc3NldEFtdFgxOCIQcHJpY2VBc3NldEFtdFgxOCIKY2FsY1ByaWNlcyIFbHBBbXQiA2NmZyILYW10QXNzZXREY20iDXByaWNlQXNzZXREY20iCHByaWNlWDE4IghscEFtdFgxOCITbHBQcmljZUluQW1Bc3NldFgxOCITbHBQcmljZUluUHJBc3NldFgxOCIPY2FsY3VsYXRlUHJpY2VzIgZwcmljZXMiFGVzdGltYXRlR2V0T3BlcmF0aW9uIgZ0eElkNTgiCnBtdEFzc2V0SWQiCHBtdExwQW10IglscEFzc2V0SWQiCWFtQXNzZXRJZCIJcHJBc3NldElkIgpwb29sU3RhdHVzIgpscEVtaXNzaW9uIglhbUJhbGFuY2UiDGFtQmFsYW5jZVgxOCIJcHJCYWxhbmNlIgxwckJhbGFuY2VYMTgiC2N1clByaWNlWDE4IghjdXJQcmljZSILcG10THBBbXRYMTgiDWxwRW1pc3Npb25YMTgiC291dEFtQW10WDE4IgtvdXRQckFtdFgxOCIIb3V0QW1BbXQiCG91dFByQW10IgVzdGF0ZSIUZXN0aW1hdGVQdXRPcGVyYXRpb24iEXNsaXBwYWdlVG9sZXJhbmNlIgxpbkFtQXNzZXRBbXQiC2luQW1Bc3NldElkIgxpblByQXNzZXRBbXQiC2luUHJBc3NldElkIgppc0V2YWx1YXRlIgZlbWl0THAiDGFtQXNzZXRJZFN0ciIMcHJBc3NldElkU3RyIgtpQW10QXNzZXRJZCINaVByaWNlQXNzZXRJZCIOaW5BbUFzc2V0SWRTdHIiDmluUHJBc3NldElkU3RyIg9pbkFtQXNzZXRBbXRYMTgiD2luUHJBc3NldEFtdFgxOCIMdXNlclByaWNlWDE4IgNyZXMiC3NsaXBwYWdlWDE4IhRzbGlwcGFnZVRvbGVyYW5jZVgxOCIKcHJWaWFBbVgxOCIKYW1WaWFQclgxOCIMZXhwZWN0ZWRBbXRzIhFleHBBbXRBc3NldEFtdFgxOCITZXhwUHJpY2VBc3NldEFtdFgxOCIJY2FsY0xwQW10Ig5jYWxjQW1Bc3NldFBtdCIOY2FsY1ByQXNzZXRQbXQiDHNsaXBwYWdlQ2FsYyIJZW1pdExwQW10IgZhbURpZmYiBnByRGlmZiILY29tbW9uU3RhdGUiB2NhbGNLTHAiDWFtb3VudEJhbGFuY2UiDHByaWNlQmFsYW5jZSIQYW1vdW50QmFsYW5jZVgxOCIPcHJpY2VCYWxhbmNlWDE4Igp1cGRhdGVkS0xwIg5jYWxjQ3VycmVudEtMcCIQYW1vdW50QXNzZXREZWx0YSIPcHJpY2VBc3NldERlbHRhIhRscEFzc2V0RW1pc3Npb25EZWx0YSISYW1vdW50QXNzZXRCYWxhbmNlIhFwcmljZUFzc2V0QmFsYW5jZSIPbHBBc3NldEVtaXNzaW9uIgpjdXJyZW50S0xwIhJyZWZyZXNoS0xwSW50ZXJuYWwiF2Ftb3VudEFzc2V0QmFsYW5jZURlbHRhIhZwcmljZUFzc2V0QmFsYW5jZURlbHRhIgdhY3Rpb25zIhNza2lwT3JkZXJWYWxpZGF0aW9uIhJ2YWxpZGF0ZVVwZGF0ZWRLTHAiBm9sZEtMcCIbdmFsaWRhdGVNYXRjaGVyT3JkZXJBbGxvd2VkIgVvcmRlciIRYW1vdW50QXNzZXRBbW91bnQiEHByaWNlQXNzZXRBbW91bnQiDSR0MDI5MDExMjkyMjMiA2tMcCINJHQwMjk2ODUyOTc4NSINdW51c2VkQWN0aW9ucyIGa0xwTmV3Igxpc09yZGVyVmFsaWQiBGluZm8iCWNvbW1vbkdldCIBaSIDcG10IgZwbXRBbXQiCWNvbW1vblB1dCIKYW1Bc3NldFBtdCIKcHJBc3NldFBtdCIGZXN0UHV0IgRlbWl0IgdlbWl0SW52Ig1lbWl0SW52TGVnYWN5IhVsZWdhY3lGYWN0b3J5Q29udHJhY3QiB3Rha2VGZWUiCWZlZUFtb3VudCIPY2FsY1B1dE9uZVRva2VuIhBwYXltZW50QW1vdW50UmF3Ig5wYXltZW50QXNzZXRJZCIGaXNFdmFsIhBhbW91bnRCYWxhbmNlUmF3Ig9wcmljZUJhbGFuY2VSYXciFHBheW1lbnRJbkFtb3VudEFzc2V0Ig0kdDAzMjk3MTMzMjY0IhBhbW91bnRCYWxhbmNlT2xkIg9wcmljZUJhbGFuY2VPbGQiDSR0MDMzMjY4MzM0MTciFGFtb3VudEFzc2V0QW1vdW50UmF3IhNwcmljZUFzc2V0QW1vdW50UmF3Ig0kdDAzMzU0OTMzNjEzIg1wYXltZW50QW1vdW50IhBhbW91bnRCYWxhbmNlTmV3Ig9wcmljZUJhbGFuY2VOZXciC3ByaWNlTmV3WDE4IghwcmljZU5ldyIOcGF5bWVudEJhbGFuY2UiFHBheW1lbnRCYWxhbmNlQmlnSW50IgxzdXBwbHlCaWdJbnQiC2NoZWNoU3VwcGx5Ig1kZXBvc2l0QmlnSW50Igtpc3N1ZUFtb3VudCILcHJpY2VPbGRYMTgiCHByaWNlT2xkIgRsb3NzIg0kdDAzNTI5NDM1NDYxIgdiYWxhbmNlIg9pc3N1ZUFtb3VudEJvdGgiD2NhbGNHZXRPbmVUb2tlbiIKb3V0QXNzZXRJZCIGY2hlY2tzIhBvdXRJbkFtb3VudEFzc2V0Ig1iYWxhbmNlQmlnSW50IhhvdXRJbkFtb3VudEFzc2V0RGVjaW1hbHMiDGFtQmFsYW5jZU9sZCIMcHJCYWxhbmNlT2xkIgpvdXRCYWxhbmNlIhBvdXRCYWxhbmNlQmlnSW50Ig5yZWRlZW1lZEJpZ0ludCIJYW1vdW50UmF3Ig0kdDAzNzUzOTM3NTk1Igt0b3RhbEFtb3VudCINJHQwMzc1OTkzNzgyNSILb3V0QW1BbW91bnQiC291dFByQW1vdW50IgxhbUJhbGFuY2VOZXciDHByQmFsYW5jZU5ldyIYYW1vdW50Qm90aEluUGF5bWVudEFzc2V0IhZtYW5hZ2VyUHVibGljS2V5T3JVbml0IhNtYW5hZ2VyVmF1bHRBZGRyZXNzIglpc01hbmFnZXIiAnBrIgttdXN0TWFuYWdlciICcGQiDWNsZWFuQW1vdW50SW4iCWlzUmV2ZXJzZSINZmVlUG9vbEFtb3VudCINJHQwMzk2ODMzOTk4OCIIYXNzZXRPdXQiB2Fzc2V0SW4iEnBvb2xBc3NldEluQmFsYW5jZSITcG9vbEFzc2V0T3V0QmFsYW5jZSIJYW1vdW50T3V0IgRvbGRLIgRuZXdLIgZjaGVja0siDGFtb3VudE91dE1pbiIJYWRkcmVzc1RvIgtzd2FwQ29udGFjdCIIY2hlY2tNaW4iDnJlYmFsYW5jZVN0YXRlIg13aXRoZHJhd1N0YXRlIg9zaG91bGRBdXRvU3Rha2UiBGFtSWQiBHBySWQiDHNsaXBwYWdlQUludiIMc2xpcHBhZ2VQSW52IgpscFRyYW5zZmVyIgtzbHBTdGFrZUludiINJHQwNDQ0OTE0NDk1MyIRcmVmcmVzaEtMcEFjdGlvbnMiEWlzVXBkYXRlZEtMcFZhbGlkIgNyZWIiC21heFNsaXBwYWdlIg0kdDA0NTU2NTQ1NjMwIgxtaW5PdXRBbW91bnQiCWF1dG9TdGFrZSIgaXNQb29sT25lVG9rZW5PcGVyYXRpb25zRGlzYWJsZWQiDWlzUHV0RGlzYWJsZWQiB3BheW1lbnQiDSR0MDQ2ODg1NDcwMzciBWJvbnVzIhNlbWl0QW1vdW50RXN0aW1hdGVkIgplbWl0QW1vdW50IghzdGFrZUludiIHc2VuZEZlZSINJHQwNDc2MjM0NzgyMCINJHQwNDc4MjM0NzkzMSINJHQwNDgyODY0ODQ0MyINb3V0QXNzZXRJZFN0ciINaXNHZXREaXNhYmxlZCINJHQwNDkzMjg0OTQ4MSIPYW1vdW50RXN0aW1hdGVkIgdidXJuSW52Ig1hc3NldFRyYW5zZmVyIg0kdDA1MDE0NTUwMzkyIhBmZWVBbW91bnRGb3JDYWxjIg0kdDA1MDM5NTUwNTAzIg0kdDA1MDc4MTUwOTM3Ig11bnN0YWtlQW1vdW50Igp1bnN0YWtlSW52Ig0kdDA1MTg0MjUxOTkzIg0kdDA1MjY1MjUyODk5Ig0kdDA1MjkwMjUzMDEwIhRidXJuTFBBc3NldE9uRmFjdG9yeSINJHQwNTQxMDU1NDE4NiISbm9MZXNzVGhlbkFtdEFzc2V0IhRub0xlc3NUaGVuUHJpY2VBc3NldCINJHQwNTUyODE1NTM2MiINY2hlY2tQYXltZW50cyIPY2hlY2tQb29sU3RhdHVzIg0kdDA1NjYzNDU2NzE1IhVub0xlc3NUaGVuQW1vdW50QXNzZXQiDGNoZWNrQW1vdW50cyINJHQwNTgxNTY1ODIzNyILYW10QXNzZXRTdHIiDXByaWNlQXNzZXRTdHIiGGxhc3RSZWZyZXNoZWRCbG9ja0hlaWdodCIdY2hlY2tMYXN0UmVmcmVzaGVkQmxvY2tIZWlnaHQiDSR0MDU5NDQxNTk1MDUiEGtMcFVwZGF0ZUFjdGlvbnMiCmFtdEFzc2V0SWQiDHByaWNlQXNzZXRJZCINcG9vbExQQmFsYW5jZSISYWNjQW10QXNzZXRCYWxhbmNlIhRhY2NQcmljZUFzc2V0QmFsYW5jZSIKcHJpY2VzTGlzdCIPbHBBbXRBc3NldFNoYXJlIhFscFByaWNlQXNzZXRTaGFyZSIKcG9vbFdlaWdodCIMY3VyUHJpY2VDYWxjIgxhbUJhbGFuY2VSYXciDHByQmFsYW5jZVJhdyIPYW1CYWxhbmNlUmF3WDE4Ig9wckJhbGFuY2VSYXdYMTgiEHBheW1lbnRMcEFzc2V0SWQiDHBheW1lbnRMcEFtdCICdHgiBnZlcmlmeSIPdGFyZ2V0UHVibGljS2V5IgptYXRjaGVyUHViIg0kdDA2ODE2NzY4Mjg0IgduZXdIYXNoIgthbGxvd2VkSGFzaCILY3VycmVudEhhc2iCAQABYQAIAAFiAIDC1y8AAWMJALYCAQCAwtcvAAFkCQC2AgEAgICQu7rWrfANAAFlCQC2AgEAAAABZgkAtgIBAAAAAWcJALYCAQABAAFoCQC2AgEAAgABaQIFV0FWRVMAAWoCAl9fAAFrAAEAAWwAAgABbQADAAFuAAQAAW8AAQABcAACAAFxAAMAAXIABAABcwAFAAF0AAYAAXUABwABdgAIAAF3AAkAAXgACgABeQABAAF6AAIAAUEAAwABQgABAAFDAAcBAUQCAUUBRgkAvAIDCQC2AgEFAUUFAWQJALYCAQUBRgEBRwIBRQFGCQC8AgMFAUUFAWQFAUYBAUgCAUkBSgkAoAMBCQC8AgMFAUkJALYCAQUBSgUBZAEBSwMBSQFKAUwJAKADAQkAvQIEBQFJCQC2AgEFAUoFAWQFAUwBAU0DAU4BTwFQCQBrAwUBTgUBTwUBUAEBUQEBSQMJAGYCAAAFAUkJAQEtAQUBSQUBSQEBUgEBSQMJAL8CAgUBZQUBSQkAvgIBBQFJBQFJAQFTAAIQJXNfX3N3YXBDb250cmFjdAEBVAACEyVzX19mYWN0b3J5Q29udHJhY3QBAVUAAhQlc19fbWFuYWdlclB1YmxpY0tleQEBVgACFyVzX19tYW5hZ2VyVmF1bHRBZGRyZXNzAQFXAAIRJXMlc19fcHJpY2VfX2xhc3QBAVgCAVkBWgkAuQkCCQDMCAICGCVzJXMlZCVkX19wcmljZV9faGlzdG9yeQkAzAgCCQCkAwEFAVkJAMwIAgkApAMBBQFaBQNuaWwFAWoBAmFhAgJhYgJhYwkArAICCQCsAgIJAKwCAgILJXMlcyVzX19QX18FAmFiAgJfXwUCYWMBAmFkAgJhYgJhYwkArAICCQCsAgIJAKwCAgILJXMlcyVzX19HX18FAmFiAgJfXwUCYWMBAmFlAAIPJXNfX2Ftb3VudEFzc2V0AQJhZgACDiVzX19wcmljZUFzc2V0AAJhZwIHJXNfX2ZlZQACYWgJAGsDAAoFAWIAkE4AAmFpCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFAmFnBQJhaAACYWoJALkJAgkAzAgCAgIlcwkAzAgCAgNrTHAFA25pbAUBagACYWsJALkJAgkAzAgCAgIlcwkAzAgCAhJrTHBSZWZyZXNoZWRIZWlnaHQFA25pbAUBagACYWwJALkJAgkAzAgCAgIlcwkAzAgCAg9yZWZyZXNoS0xwRGVsYXkFA25pbAUBagACYW0AHgACYW4JAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUCYWwFAmFtAQJhbwECYXAJALkJAgkAzAgCAgQlcyVzCQDMCAICDXN0YWtlZEJhbGFuY2UJAMwIAgUCYXAFA25pbAUBagECYXEBAmFwCQC5CQIJAMwIAgIEJXMlcwkAzAgCAhFzaGFyZUFzc2V0QmFsYW5jZQkAzAgCBQJhcAUDbmlsBQFqAQJhcgECYXAJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkBAmFvAQUCYXAAAAECYXMBAmFwCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAQJhcQEFAmFwAAABAmF0AAIRJXNfX2ZhY3RvcnlDb25maWcBAmF1AAIYJXMlc19fbWF0Y2hlcl9fcHVibGljS2V5AQJhdgECYXcJAKwCAgkArAICAgglcyVzJXNfXwUCYXcCIF9fbWFwcGluZ3NfX3Bvb2xDb250cmFjdDJMcEFzc2V0AQJheAICYXkCYXoJAKwCAgkArAICCQCsAgIJAKwCAgIIJWQlZCVzX18FAmF5AgJfXwUCYXoCCF9fY29uZmlnAQJhQQECYUIJAKwCAgIoJXMlcyVzX19tYXBwaW5nc19fYmFzZUFzc2V0MmludGVybmFsSWRfXwUCYUIBAmFDAAIMJXNfX3NodXRkb3duAQJhRAECYUUJAKwCAgISJXMlc19fcG9vbFdlaWdodF9fBQJhRQECYUYAAhclc19fYWxsb3dlZExwU2NyaXB0SGFzaAACYUcCFyVzX19mZWVDb2xsZWN0b3JBZGRyZXNzAQJhSAECYUkJAKwCAgIbJXMlc19fc2tpcE9yZGVyVmFsaWRhdGlvbl9fBQJhSQECYUoEAmFLAmFMAmFNAmFOCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICJG9yZGVyIHZhbGlkYXRpb24gZmFpbGVkOiBvcmRlclZhbGlkPQkApQMBBQJhSwICICgFAmFMAgEpAg0gc2VuZGVyVmFsaWQ9CQClAwEFAmFNAg4gbWF0Y2hlclZhbGlkPQkApQMBBQJhTgECYU8BAmFQBAJhUQkApggBBQJhUAMJAAECBQJhUQIHQWRkcmVzcwQCYVIFAmFRBQJhUgUEdGhpcwECYVMABAJhVAQCYVEJAKIIAQkBAVQAAwkAAQIFAmFRAgZTdHJpbmcEAmFVBQJhUQkBAmFPAQUCYVUFBHRoaXMEAmFRCQCdCAIFAmFUCQEBVgADCQABAgUCYVECBlN0cmluZwQCYVYFAmFRCQECYU8BBQJhVgUEdGhpcwECYVcCAmFYAmFZCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUCYVgFAmFZCQC5CQIJAMwIAgIKbWFuZGF0b3J5IAkAzAgCCQClCAEFAmFYCQDMCAICAS4JAMwIAgUCYVkJAMwIAgIPIGlzIG5vdCBkZWZpbmVkBQNuaWwCAAECYVoCAmFYAmFZCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUCYVgFAmFZCQC5CQIJAMwIAgIKbWFuZGF0b3J5IAkAzAgCCQClCAEFAmFYCQDMCAICAS4JAMwIAgUCYVkJAMwIAgIPIGlzIG5vdCBkZWZpbmVkBQNuaWwCAAECYmEBAmJiCQACAQkAuQkCCQDMCAICCGxwLnJpZGU6CQDMCAIFAmJiBQNuaWwCASABAmJjAQJiYgkAuQkCCQDMCAICCGxwLnJpZGU6CQDMCAIFAmJiBQNuaWwCASAAAmJkCQERQGV4dHJOYXRpdmUoMTA2MikBCQECYVcCBQR0aGlzCQEBVAAAAmJlCQERQGV4dHJOYXRpdmUoMTA2MikBCQECYVcCBQJiZAUCYUcAAmJmCgACYmcJAPwHBAUCYmQCEGdldEluRmVlUkVBRE9OTFkJAMwIAgkApQgBBQR0aGlzBQNuaWwFA25pbAMJAAECBQJiZwIDSW50BQJiZwkAAgEJAKwCAgkAAwEFAmJnAhggY291bGRuJ3QgYmUgY2FzdCB0byBJbnQAAmJoCgACYmcJAPwHBAUCYmQCEWdldE91dEZlZVJFQURPTkxZCQDMCAIJAKUIAQUEdGhpcwUDbmlsBQNuaWwDCQABAgUCYmcCA0ludAUCYmcJAAIBCQCsAgIJAAMBBQJiZwIYIGNvdWxkbid0IGJlIGNhc3QgdG8gSW50AQJiaQAJAQt2YWx1ZU9yRWxzZQIJAJsIAgUCYmQJAQJhQwAHAQJiagAJANkEAQkBAmFXAgUCYmQJAQJhdQABAmJrAAQCYmwJAQJhVwIFBHRoaXMJAQJhZQAEAmJtCQECYVcCBQR0aGlzCQECYWYABAJhegkBAmFaAgUCYmQJAQJhQQEFAmJtBAJheQkBAmFaAgUCYmQJAQJhQQEFAmJsCQC1CQIJAQJhVwIFAmJkCQECYXgCCQCkAwEFAmF5CQCkAwEFAmF6BQFqAQJibgECYm8DCQAAAgUCYm8FAWkFBHVuaXQJANkEAQUCYm8BAmJwAQJibwMJAAACBQJibwUEdW5pdAUBaQkA2AQBCQEFdmFsdWUBBQJibwECYnEBAmJyCQCZCgcJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAJEDAgUCYnIFAW8JAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJicgUBcAkA2QQBCQCRAwIFAmJyBQFxCQECYm4BCQCRAwIFAmJyBQFyCQECYm4BCQCRAwIFAmJyBQFzCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCYnIFAXQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJicgUBdQACYnMJAQJicQEJAQJiawAAAmJ0BQJicwACYnUIBQJidAJfMQACYnYIBQJidAJfMgACYncIBQJidAJfMwACYngIBQJidAJfNAACYnkIBQJidAJfNQACYnoIBQJidAJfNgACYkEIBQJidAJfNwECYkIACQC1CQIJAQJhVwIFAmJkCQECYXQABQFqAAJiQwkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJAJEDAgkBAmJCAAUBQgIZaW5jb3JyZWN0IHN0YWtpbmcgYWRkcmVzcwACYkQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQCRAwIJAQJiQgAFAUMCGWluY29ycmVjdCBzdGFraW5nIGFkZHJlc3MBAmJFCgJiRgJiRwJiSAJiSQJiSgJiSwJiTAJiTQJiTgJiTwkAuQkCCQDMCAICFCVkJWQlZCVkJWQlZCVkJWQlZCVkCQDMCAIJAKQDAQUCYkYJAMwIAgkApAMBBQJiRwkAzAgCCQCkAwEFAmJICQDMCAIJAKQDAQUCYkkJAMwIAgkApAMBBQJiSgkAzAgCCQCkAwEFAmJLCQDMCAIJAKQDAQUCYkwJAMwIAgkApAMBBQJiTQkAzAgCCQCkAwEFAmJOCQDMCAIJAKQDAQUCYk8FA25pbAUBagECYlAGAmJRAmJSAmJTAmJJAmJMAmJNCQC5CQIJAMwIAgIMJWQlZCVkJWQlZCVkCQDMCAIJAKQDAQUCYlEJAMwIAgkApAMBBQJiUgkAzAgCCQCkAwEFAmJTCQDMCAIJAKQDAQUCYkkJAMwIAgkApAMBBQJiTAkAzAgCCQCkAwEFAmJNBQNuaWwFAWoBAmJUAQJhcAQCYlUDCQAAAgUCYXACBVdBVkVTCAkA7wcBBQR0aGlzCWF2YWlsYWJsZQkA8AcCBQR0aGlzCQDZBAEFAmFwBAJiVgkAZQIJAGQCBQJiVQkBAmFyAQUCYXAJAQJhcwEFAmFwCQCWAwEJAMwIAgAACQDMCAIFAmJWBQNuaWwBAmJXAgJiWAJiWQkAvAIDBQJiWAUBZAUCYlkBAmJaAwJiWAJiWQFMCQC9AgQFAmJYBQFkBQJiWQUBTAECY2EBAmNiBAJjYwkA/AcEBQJjYgIHZ2V0UmF0ZQUDbmlsBQNuaWwDCQAAAgUCY2MFAmNjBAJhUQUCY2MDCQABAgUCYVECA0ludAQCY2QFAmFRBQJjZAkBAmJhAQIgcHJveHkuZ2V0UmF0ZSgpIHVuZXhwZWN0ZWQgdmFsdWUJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BAmNlBAJhcAJjZgJjZwJjYgQCY2gJAQJhcgEFAmFwAwkAAAIFAmNoBQJjaAQCY2kJAQJhcwEFAmNnAwkAAAIFAmNpBQJjaQQCY2oJAQJibgEFAmFwAwkAZgIFAmNmAAAEAmNrCQD8BwQFAmNiAgdkZXBvc2l0BQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmNqBQJjZgUDbmlsAwkAAAIFAmNrBQJjawQCYVEFAmNrAwkAAQIFAmFRAgNJbnQEAmNsBQJhUQQCY20JAGQCBQJjaAUCY2YEAmNuCQBkAgUCY2kFAmNsCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQECYW8BBQJhcAUCY20JAMwIAgkBDEludGVnZXJFbnRyeQIJAQJhcQEFAmNnBQJjbgUDbmlsBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgECY28GAmFwAmNmAmNnAmNiAmNwAmNxBAJjaAkBAmFyAQUCYXADCQAAAgUCY2gFAmNoBAJjaQkBAmFzAQUCY2cDCQAAAgUCY2kFAmNpBAJjcgkBAmNhAQUCY2IDCQAAAgUCY3IFAmNyBAJjcwkAawMFAmNwBQJjaAUCY2kEAmN0CQECYm4BBQJjZwQCY3UJAGsDBQJjcAUCY2YFAmNzBAJjdgkAawMFAmNwBQJjZgUCY3IEAmN3CQCWAwEJAMwIAgAACQDMCAIJAGUCBQJjdQUCY3YFA25pbAMJAGYCBQJjdgAABAJjeAkA/AcEBQJjYgIId2l0aGRyYXcFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCY3QFAmN2BQNuaWwDCQAAAgUCY3gFAmN4BAJhUQUCY3gDCQABAgUCYVECA0ludAQCY3kFAmFRBAJjbQkAZQIFAmNoBQJjeQQCY24JAGUCCQBlAgUCY2kFAmN2BQJjdwkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAmFvAQUCYXAFAmNtCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQECYXEBBQJjZwUCY24JAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUCY3EFAmN3CQECYm4BBQJjZwUDbmlsBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgECY3oBAmFwBAJhUQkA/AcEBQJiZAIaZ2V0UG9vbExlYXNlQ29uZmlnUkVBRE9OTFkJAMwIAgkApQgBBQR0aGlzCQDMCAIFAmFwBQNuaWwFA25pbAMJAAECBQJhUQIwKEJvb2xlYW4sIEludCwgSW50LCBTdHJpbmcsIFN0cmluZywgSW50LCBTdHJpbmcpBAJhUgUCYVEFAmFSCQECYmEBCQCsAgIJAKwCAgIBWwUCYXACHV0gZ2V0TGVhc2VQcm94eUNvbmZpZygpIGVycm9yAQJjQQcCY0ICYXACY2cCY0MCY2ICY3ACY3EEAmNoCQECYXIBBQJhcAMJAAACBQJjaAUCY2gEAmNpCQECYXMBBQJjZwMJAAACBQJjaQUCY2kEAmNECQCWAwEJAMwIAgAACQDMCAIJAGUCCQECYlQBBQJhcAUCY0MFA25pbAQCY0UJAGsDBQJjQgUCY0QAZAQCY0YJAGUCBQJjaAUCY0UDCQAAAgUCY0YAAAUDbmlsAwkAZgIAAAUCY0YEAmNHCQEBLQEFAmNGCQECY2UEBQJhcAUCY0cFAmNnBQJjYgQCY0gFAmNGCQECY28GBQJhcAUCY0gFAmNnBQJjYgUCY3AFAmNxCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQJjSQECYXAEAmNKCQECY3oBBQJhcAQCY0sIBQJjSgJfMQQCY0wIBQJjSgJfMgQCY0MIBQJjSgJfMwQCY00IBQJjSgJfNAQCY04IBQJjSgJfNQQCY3AIBQJjSgJfNgQCY08IBQJjSgJfNwMFAmNLCQECY0EHBQJjTAUCYXAFAmNOBQJjQwkBEUBleHRyTmF0aXZlKDEwNjIpAQUCY00FAmNwCQERQGV4dHJOYXRpdmUoMTA2MikBBQJjTwUDbmlsAQJjUAICYXACY1EEAmNSCQECY3oBBQJhcAQCY0sIBQJjUgJfMQQCY0wIBQJjUgJfMgQCY0MIBQJjUgJfMwQCY00IBQJjUgJfNAQCY04IBQJjUgJfNQQCY3AIBQJjUgJfNgQCY08IBQJjUgJfNwMFAmNLBAJjUwkAlgMBCQDMCAIAAAkAzAgCCQBlAgkAZQIJAQJiVAEFAmFwBQJjUQUCY0MFA25pbAMJAAACBQJjUwUCY1MEAmNtCQBrAwUCY0wFAmNTAGQDCQAAAgUCY20FAmNtBAJjVAkAZQIJAQJhcgEFAmFwBQJjbQMJAAACBQJjVAUCY1QDCQBmAgAABQJjVAkBAmNlBAUCYXAJAQEtAQUCY1QFAmNOCQERQGV4dHJOYXRpdmUoMTA2MikBBQJjTQkBAmNvBgUCYXAFAmNUBQJjTgkBEUBleHRyTmF0aXZlKDEwNjIpAQUCY00FAmNwCQERQGV4dHJOYXRpdmUoMTA2MikBBQJjTwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUDbmlsAQJjVQICY1YCY1cEAmNYCQECY1ACCQECYVcCBQR0aGlzCQECYWUABQJjVgQCY1kJAQJjUAIJAQJhVwIFBHRoaXMJAQJhZgAFAmNXCQDOCAIFAmNYBQJjWQECY1oEAmRhAmRiAmRjAmRkBAJkZQkBAUQCBQJkYwUCZGEEAmRmCQEBRAIFAmRkBQJkYgkBAmJXAgUCZGYFAmRlAQJkZwMCZGMCZGQCZGgEAmRpCQECYmsABAJkagkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmRpBQF0BAJkawkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmRpBQF1BAJkbAkBAmNaBAUCZGoFAmRrBQJkYwUCZGQEAmJZCQEBRAIFAmRjBQJkagQCYlgJAQFEAgUCZGQFAmRrBAJkbQkBAUQCBQJkaAUBYgQCZG4JAQJiVwIFAmJZBQJkbQQCZG8JAQJiVwIFAmJYBQJkbQkAzAgCBQJkbAkAzAgCBQJkbgkAzAgCBQJkbwUDbmlsAQJkcAMCZGMCZGQCZGgEAmRxCQECZGcDBQJkYwUCZGQFAmRoCQDMCAIJAQFIAgkAkQMCBQJkcQAABQFiCQDMCAIJAQFIAgkAkQMCBQJkcQABBQFiCQDMCAIJAQFIAgkAkQMCBQJkcQACBQFiBQNuaWwBAmRyBAJkcwJkdAJkdQJhYgQCZGkJAQJiawAEAmR2CQCRAwIFAmRpBQFxBAJkdwkAkQMCBQJkaQUBcgQCZHgJAJEDAgUCZGkFAXMEAmRhCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCZGkFAXQEAmRiCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCZGkFAXUEAmR5CQCRAwIFAmRpBQFwBAJkeggJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkA7AcBCQDZBAEFAmR2CQCsAgIJAKwCAgIGQXNzZXQgBQJkdgIOIGRvZXNuJ3QgZXhpc3QIcXVhbnRpdHkDCQECIT0CBQJkdgUCZHQJAAIBAhVJbnZhbGlkIGFzc2V0IHBhc3NlZC4EAmRBCQECYlQBBQJkdwQCZEIJAQFEAgUCZEEFAmRhBAJkQwkBAmJUAQUCZHgEAmRECQEBRAIFAmRDBQJkYgQCZEUJAQJiVwIFAmREBQJkQgQCZEYJAQFIAgUCZEUFAWIEAmRHCQEBRAIFAmR1BQFiBAJkSAkBAUQCBQJkegUBYgQCZEkJALwCAwUCZEIFAmRHBQJkSAQCZEoJALwCAwUCZEQFAmRHBQJkSAQCZEsJAQFLAwUCZEkFAmRhBQVGTE9PUgQCZEwJAQFLAwUCZEoFAmRiBQVGTE9PUgQCZE0DCQAAAgUCZHMCAAUDbmlsCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFAmFiBQJkSwMJAAACBQJkdwIFV0FWRVMFBHVuaXQJANkEAQUCZHcJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUCYWIFAmRMAwkAAAIFAmR4AgVXQVZFUwUEdW5pdAkA2QQBBQJkeAkAzAgCCQELU3RyaW5nRW50cnkCCQECYWQCCQClCAEFAmFiBQJkcwkBAmJQBgUCZEsFAmRMBQJkdQUCZEYFBmhlaWdodAgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFXAAUCZEYJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFYAgUGaGVpZ2h0CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUCZEYFA25pbAkAnAoKBQJkSwUCZEwFAmR3BQJkeAUCZEEFAmRDBQJkegUCZEUFAmR5BQJkTQECZE4JAmRzAmRPAmRQAmRRAmRSAmRTAmFiAmRUAmRVBAJkaQkBAmJrAAQCZHYJANkEAQkAkQMCBQJkaQUBcQQCZFYJAJEDAgUCZGkFAXIEAmRXCQCRAwIFAmRpBQFzBAJkWAkAkQMCBQJkaQUBdgQCZFkJAJEDAgUCZGkFAXcEAmRqCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCZGkFAXQEAmRrCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCZGkFAXUEAmR5CQCRAwIFAmRpBQFwBAJkeggJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkA7AcBBQJkdgkArAICCQCsAgICBkFzc2V0IAkA2AQBBQJkdgIOIGRvZXNuJ3QgZXhpc3QIcXVhbnRpdHkEAmRaCQDYBAEJAQt2YWx1ZU9yRWxzZQIFAmRRCQDZBAECBVdBVkVTBAJlYQkA2AQBCQELdmFsdWVPckVsc2UCBQJkUwkA2QQBAgVXQVZFUwMDCQECIT0CBQJkVgUCZFoGCQECIT0CBQJkVwUCZWEJAAIBAiJJbnZhbGlkIGFtdCBvciBwcmljZSBhc3NldCBwYXNzZWQuBAJkQQMFAmRUCQECYlQBBQJkVgkAZQIJAQJiVAEFAmRWBQJkUAQCZEMDBQJkVAkBAmJUAQUCZFcJAGUCCQECYlQBBQJkVwUCZFIEAmViCQEBRAIFAmRQBQJkagQCZWMJAQFEAgUCZFIFAmRrBAJlZAkBAmJXAgUCZWMFAmViBAJkQgkBAUQCBQJkQQUCZGoEAmRECQEBRAIFAmRDBQJkawQCZWUDCQAAAgUCZHoAAAQCZEUFAWUEAmVmBQFlBAJkbQkAdgYJALkCAgUCZWIFAmVjAAAJALYCAQAFAAEAAAUERE9XTgkAlwoFCQEBSAIFAmRtBQFiCQEBSAIFAmViBQJkagkBAUgCBQJlYwUCZGsJAQJiVwIJALcCAgUCZEQFAmVjCQC3AgIFAmRCBQJlYgUCZWYEAmRFCQECYlcCBQJkRAUCZEIEAmVmCQC8AgMJAQFSAQkAuAICBQJkRQUCZWQFAWQFAmRFBAJlZwkBAUQCBQJkTwUBYgMDCQECIT0CBQJkRQUBZQkAvwICBQJlZgUCZWcHCQACAQkArAICCQCsAgIJAKwCAgIPUHJpY2Ugc2xpcHBhZ2UgCQCmAwEFAmVmAh4gZXhjZWVkZWQgdGhlIHBhc3NlZCBsaW1pdCBvZiAJAKYDAQUCZWcEAmRICQEBRAIFAmR6BQFiBAJlaAkAvQIEBQJlYgkBAmJaAwUCZEQFAmRCBQdDRUlMSU5HBQFkBQdDRUlMSU5HBAJlaQkAvQIEBQJlYwUBZAkBAmJaAwUCZEQFAmRCBQVGTE9PUgUHQ0VJTElORwQCZWoDCQC/AgIFAmVoBQJlYwkAlAoCBQJlaQUCZWMJAJQKAgUCZWIFAmVoBAJlawgFAmVqAl8xBAJlbAgFAmVqAl8yBAJkbQkAvQIEBQJkSAUCZWwFAmREBQVGTE9PUgkAlwoFCQEBSwMFAmRtBQFiBQVGTE9PUgkBAUsDBQJlawUCZGoFB0NFSUxJTkcJAQFLAwUCZWwFAmRrBQdDRUlMSU5HBQJkRQUCZWYEAmVtCAUCZWUCXzEEAmVuCAUCZWUCXzIEAmVvCAUCZWUCXzMEAmRGCQEBSAIIBQJlZQJfNAUBYgQCZXAJAQFIAggFAmVlAl81BQFiAwkAZwIAAAUCZW0JAAIBAjZJbnZhbGlkIGNhbGN1bGF0aW9ucy4gTFAgY2FsY3VsYXRlZCBpcyBsZXNzIHRoYW4gemVyby4EAmVxAwkBASEBBQJkVQAABQJlbQQCZXIJAGUCBQJkUAUCZW4EAmVzCQBlAgUCZFIFAmVvBAJldAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAVcABQJkRgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAVgCBQZoZWlnaHQIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQJkRgkAzAgCCQELU3RyaW5nRW50cnkCCQECYWECBQJhYgUCZHMJAQJiRQoFAmVuBQJlbwUCZXEFAmRGBQJkTwUCZXAFBmhlaWdodAgFCWxhc3RCbG9jawl0aW1lc3RhbXAFAmVyBQJlcwUDbmlsCQCfCg0FAmVtBQJlcQUCZEYFAmRBBQJkQwUCZHoFAmR2BQJkeQUCZXQFAmVyBQJlcwUCZFEFAmRTAQJldQMCZXYCZXcCZHoEAmV4CQEBRwIFAmV2CQC2AgEFAmJ6BAJleQkBAUcCBQJldwkAtgIBBQJiQQQCZXoJALwCAwkAdgYJALkCAgUCZXgFAmV5AAAJALYCAQAFAAEAEgUERE9XTgUBZwUCZHoDCQAAAgUCZHoFAWYFAWYFAmV6AQJlQQMCZUICZUMCZUQEAmVFCQC4AgIJALYCAQkBAmJUAQkBAmJwAQUCYngFAmVCBAJlRgkAuAICCQC2AgEJAQJiVAEJAQJicAEFAmJ5BQJlQwQCZUcJALgCAgkAtgIBCAkBBXZhbHVlAQkA7AcBBQJidwhxdWFudGl0eQUCZUQEAmVICQECZXUDBQJlRQUCZUYFAmVHBQJlSAECZUkDAmVKAmVLAmVEBAJlRQkAZAIJAQJiVAEJAQJicAEFAmJ4BQJlSgQCZUYJAGQCCQECYlQBCQECYnABBQJieQUCZUsEAmVHCQBkAggJAQV2YWx1ZQEJAOwHAQUCYncIcXVhbnRpdHkFAmVEBAJlegkBAmV1AwkAtgIBBQJlRQkAtgIBBQJlRgkAtgIBBQJlRwQCZUwJAMwIAgkBDEludGVnZXJFbnRyeQIFAmFrBQZoZWlnaHQJAMwIAgkBC1N0cmluZ0VudHJ5AgUCYWoJAKYDAQUCZXoFA25pbAkAlAoCBQJlTAUCZXoBAmVNAAkBC3ZhbHVlT3JFbHNlAgkAmwgCBQJiZAkBAmFIAQkApQgBBQR0aGlzBwECZU4CAmVPAmV6AwkAwAICBQJlegUCZU8GCQECYmEBCQC5CQIJAMwIAgIidXBkYXRlZCBLTHAgbG93ZXIgdGhhbiBjdXJyZW50IEtMcAkAzAgCCQCmAwEFAmVPCQDMCAIJAKYDAQUCZXoFA25pbAIBIAECZVABAmVRBAJlRQkBAmJUAQkBAmJwAQUCYngEAmVGCQECYlQBCQECYnABBQJieQQCZVIIBQJlUQZhbW91bnQEAmVTCQBuBAgFAmVRBmFtb3VudAgFAmVRBXByaWNlBQFiBQVGTE9PUgQCZVQDCQAAAggFAmVRCW9yZGVyVHlwZQUDQnV5CQCUCgIFAmVSCQEBLQEFAmVTCQCUCgIJAQEtAQUCZVIFAmVTBAJlSggFAmVUAl8xBAJlSwgFAmVUAl8yAwMDCQECYmkABgkAAAIFAmJ2BQFtBgkAAAIFAmJ2BQFuCQACAQIcRXhjaGFuZ2Ugb3BlcmF0aW9ucyBkaXNhYmxlZAMDCQECIT0CCAgFAmVRCWFzc2V0UGFpcgthbW91bnRBc3NldAUCYngGCQECIT0CCAgFAmVRCWFzc2V0UGFpcgpwcmljZUFzc2V0BQJieQkAAgECE1dyb25nIG9yZGVyIGFzc2V0cy4EAmVVCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKgDAQkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzBQJhagIBMAkBAmJjAQILaW52YWxpZCBrTHAEAmVWCQECZUkDBQJlSgUCZUsAAAQCZVcIBQJlVgJfMQQCZVgIBQJlVgJfMgQCZVkJAMACAgUCZVgFAmVVBAJlWgkAuQkCCQDMCAICBGtMcD0JAMwIAgkApgMBBQJlVQkAzAgCAggga0xwTmV3PQkAzAgCCQCmAwEFAmVYCQDMCAICFCBhbW91bnRBc3NldEJhbGFuY2U9CQDMCAIJAKQDAQUCZUUJAMwIAgITIHByaWNlQXNzZXRCYWxhbmNlPQkAzAgCCQCkAwEFAmVGCQDMCAICGSBhbW91bnRBc3NldEJhbGFuY2VEZWx0YT0JAMwIAgkApAMBBQJlSgkAzAgCAhggcHJpY2VBc3NldEJhbGFuY2VEZWx0YT0JAMwIAgkApAMBBQJlSwkAzAgCAgggaGVpZ2h0PQkAzAgCCQCkAwEFBmhlaWdodAUDbmlsAgAJAJQKAgUCZVkFAmVaAQJmYQECZmIDCQECIT0CCQCQAwEIBQJmYghwYXltZW50cwABCQACAQIdZXhhY3RseSAxIHBheW1lbnQgaXMgZXhwZWN0ZWQEAmZjCQEFdmFsdWUBCQCRAwIIBQJmYghwYXltZW50cwAABAJkdAkBBXZhbHVlAQgFAmZjB2Fzc2V0SWQEAmZkCAUCZmMGYW1vdW50BAJlZQkBAmRyBAkA2AQBCAUCZmINdHJhbnNhY3Rpb25JZAkA2AQBBQJkdAUCZmQIBQJmYgZjYWxsZXIEAmRLCAUCZWUCXzEEAmRMCAUCZWUCXzIEAmR5CQENcGFyc2VJbnRWYWx1ZQEIBQJlZQJfOQQCZE0IBQJlZQNfMTADAwkBAmJpAAYJAAACBQJkeQUBbgkAAgEJAKwCAgIsR2V0IG9wZXJhdGlvbiBpcyBibG9ja2VkIGJ5IGFkbWluLiBTdGF0dXMgPSAJAKQDAQUCZHkJAJcKBQUCZEsFAmRMBQJmZAUCZHQFAmRNAQJmZQMCZmICZE8CZFUDCQECIT0CCQCQAwEIBQJmYghwYXltZW50cwACCQACAQIfZXhhY3RseSAyIHBheW1lbnRzIGFyZSBleHBlY3RlZAQCZmYJAQV2YWx1ZQEJAJEDAggFAmZiCHBheW1lbnRzAAAEAmZnCQEFdmFsdWUBCQCRAwIIBQJmYghwYXltZW50cwABBAJmaAkBAmROCQkA2AQBCAUCZmINdHJhbnNhY3Rpb25JZAUCZE8IBQJmZgZhbW91bnQIBQJmZgdhc3NldElkCAUCZmcGYW1vdW50CAUCZmcHYXNzZXRJZAkApQgBCAUCZmIGY2FsbGVyBwUCZFUEAmR5CQENcGFyc2VJbnRWYWx1ZQEIBQJmaAJfOAMDAwMJAQJiaQAGCQAAAgUCZHkFAWwGCQAAAgUCZHkFAW0GCQAAAgUCZHkFAW4JAAIBCQCsAgICLFB1dCBvcGVyYXRpb24gaXMgYmxvY2tlZCBieSBhZG1pbi4gU3RhdHVzID0gCQCkAwEFAmR5BQJmaAECZmkBAmNmBAJmagkA/AcEBQJiZAIEZW1pdAkAzAgCBQJjZgUDbmlsBQNuaWwDCQAAAgUCZmoFAmZqBAJmawQCYVEFAmZqAwkAAQIFAmFRAgdBZGRyZXNzBAJmbAUCYVEJAPwHBAUCZmwCBGVtaXQJAMwIAgUCY2YFA25pbAUDbmlsBQR1bml0AwkAAAIFAmZrBQJmawUCY2YJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BAmZtAgJjZgJhaQQCZm4DCQAAAgUCYWkAAAAACQBrAwUCY2YFAmFpBQFiCQCUCgIJAGUCBQJjZgUCZm4FAmZuAQJmbwQCZnACZnECYWICYWMEAmZyCQAAAgUCYWMFBHVuaXQEAmZzCQECYlQBCQECYnABBQJieAQCZnQJAQJiVAEJAQJicAEFAmJ5BAJmdQMJAAACBQJmcQUCYngGAwkAAAIFAmZxBQJieQcJAQJiYQECDWludmFsaWQgYXNzZXQEAmZ2AwUCZnIJAJQKAgUCZnMFAmZ0AwUCZnUJAJQKAgkAZQIFAmZzBQJmcAUCZnQJAJQKAgUCZnMJAGUCBQJmdAUCZnAEAmZ3CAUCZnYCXzEEAmZ4CAUCZnYCXzIEAmZ5AwUCZnUJAJQKAgUCZnAAAAkAlAoCAAAFAmZwBAJmeggFAmZ5Al8xBAJmQQgFAmZ5Al8yBAJlUggJAQJmbQIFAmZ6BQJiZgJfMQQCZVMICQECZm0CBQJmQQUCYmYCXzEEAmZCCQECZm0CBQJmcAUCYmYEAmZDCAUCZkICXzEEAmZuCAUCZkICXzIEAmZECQBkAgUCZncFAmVSBAJmRQkAZAIFAmZ4BQJlUwQCZkYJAQJiVwIJAQFEAgUCZkUFAmJBCQEBRAIFAmZEBQJiegQCZkcJAQFIAgUCZkYFAWIEAmZIAwUCZnUFAmZ3BQJmeAQCZkkJALYCAQUCZkgEAmZKCQC2AgEICQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQUCYncJAKwCAgkArAICAgZhc3NldCAJANgEAQUCYncCDiBkb2Vzbid0IGV4aXN0CHF1YW50aXR5BAJmSwMJAL8CAgUCZkoFAWYGCQECYmEBAiJpbml0aWFsIGRlcG9zaXQgcmVxdWlyZXMgYWxsIGNvaW5zAwkAAAIFAmZLBQJmSwQCZkwJALYCAQUCZkMEAmZNCQCWAwEJAMwIAgAACQDMCAIJAKADAQkAugICCQC5AgIFAmZKCQC4AgIJAQpzcXJ0QmlnSW50BAkAtwICBQFkCQC6AgIJALkCAgUCZkwFAWQFAmZJABIAEgUERE9XTgUBZAUBZAUDbmlsBAJldAMFAmZyBQNuaWwJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFXAAUCZkcJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFYAgUGaGVpZ2h0CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUCZkcJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAmFhAgkApQgBCQEFdmFsdWUBBQJhYgkA2AQBCQEFdmFsdWUBBQJhYwkBAmJFCgUCZnoFAmZBBQJmTQUCZkcAAAAABQZoZWlnaHQIBQlsYXN0QmxvY2sJdGltZXN0YW1wAAAAAAUDbmlsBAJmTgkBAmJXAgkBAUQCBQJmeAUCYkEJAQFEAgUCZncFAmJ6BAJmTwkBAUgCBQJmTgUBYgQCZlAEAmZRAwUCZnUJAJQKAgUCZnoFAmZ3CQCUCgIFAmZBBQJmeAQCY2YIBQJmUQJfMQQCZlIIBQJmUQJfMgQCZlMJAKADAQkAvAIDBQJmSgkAtgIBCQBpAgUCY2YAAgkAtgIBBQJmUgkAawMJAGUCBQJmTQUCZlMFAWIFAmZTCQCXCgUFAmZNBQJldAUCZm4FAmZQBQJmdQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgECZlQFAmZVAmZDAmZxAmFiAmFjBAJmcgkAAAIFAmFjBQR1bml0BAJkaQkBAmJrAAQCZGoJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJkaQUBdAQCZGsJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJkaQUBdQQCZlYJAMwIAgMJAAACBQJmcQUCYncGCQECYmEBAhBpbnZhbGlkIGxwIGFzc2V0BQNuaWwDCQAAAgUCZlYFAmZWBAJmVwMJAAACBQJmVQUCYngGAwkAAAIFAmZVBQJieQcJAQJiYQECDWludmFsaWQgYXNzZXQEAmZYAwUCZlcJALYCAQkBAmJUAQkBAmJwAQUCYngJALYCAQkBAmJUAQkBAmJwAQUCYnkEAmZZAwUCZlcFAmRqBQJkawQCZloJAQJiVAEJAQJicAEFAmJ4BAJnYQkBAmJUAQkBAmJwAQUCYnkEAmdiAwUCZlcFAmZaBQJnYQQCZ2MJALYCAQUCZ2IEAmZKCQC2AgEICQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQUCYncJAKwCAgkArAICAgZhc3NldCAJANgEAQUCYncCDiBkb2Vzbid0IGV4aXN0CHF1YW50aXR5BAJnZAkAtgIBBQJmQwQCZ2UJAJYDAQkAzAgCAAAJAMwIAgkAoAMBCQC6AgIJALkCAgUCZlgJALgCAgUBZAkAdgYJALgCAgUBZAkAugICCQC5AgIFAmdkBQFkBQJmSgASBQFoAAAAEgUERE9XTgUBZAUDbmlsBAJnZgkBAmZtAgUCZ2UFAmJoBAJnZwgFAmdmAl8xBAJmbggFAmdmAl8yBAJnaAMFAmZXCQCWCgQFAmdnAAAJAGUCBQJmWgUCZ2UFAmdhCQCWCgQAAAUCZ2cFAmZaCQBlAgUCZ2EFAmdlBAJnaQgFAmdoAl8xBAJnaggFAmdoAl8yBAJnawgFAmdoAl8zBAJnbAgFAmdoAl80BAJmRgkBAmJXAgkBAUQCBQJnbAUCYkEJAQFEAgUCZ2sFAmJ6BAJmRwkBAUgCBQJmRgUBYgQCZXQDBQJmcgUDbmlsCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJhZAIJAKUIAQkBBXZhbHVlAQUCYWIJANgEAQkBBXZhbHVlAQUCYWMJAQJiUAYFAmdpBQJnagUCZkMFAmZHBQZoZWlnaHQIBQlsYXN0QmxvY2sJdGltZXN0YW1wCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBVwAFAmZHCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBWAIFBmhlaWdodAgFCWxhc3RCbG9jawl0aW1lc3RhbXAFAmZHBQNuaWwEAmZOCQECYlcCCQEBRAIFAmdhBQJiQQkBAUQCBQJmWgUCYnoEAmZPCQEBSAIFAmZOBQFiBAJmUAQCZ20JAGgCCQCgAwEJALwCAwUCZlgFAmdkBQJmSgACCQBrAwkAZQIFAmdnBQJnbQUBYgUCZ20JAJcKBQUCZ2cFAmV0BQJmbgUCZlAFAmZXCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQJnbgAEAmdvCQECYVMABAJhUQkAnQgCBQJnbwkBAVUAAwkAAQIFAmFRAgZTdHJpbmcEAmFWBQJhUQkA2QQBBQJhVgMJAAECBQJhUQIEVW5pdAUEdW5pdAkAAgECC01hdGNoIGVycm9yAQJncAECZmIEAmFRCQECZ24AAwkAAQIFAmFRAgpCeXRlVmVjdG9yBAJncQUCYVEJAAACCAUCZmIPY2FsbGVyUHVibGljS2V5BQJncQMJAAECBQJhUQIEVW5pdAkAAAIIBQJmYgZjYWxsZXIFBHRoaXMJAAIBAgtNYXRjaCBlcnJvcgECZ3IBAmZiBAJncwkAAgECEVBlcm1pc3Npb24gZGVuaWVkBAJhUQkBAmduAAMJAAECBQJhUQIKQnl0ZVZlY3RvcgQCZ3EFAmFRAwkAAAIIBQJmYg9jYWxsZXJQdWJsaWNLZXkFAmdxBgUCZ3MDCQABAgUCYVECBFVuaXQDCQAAAggFAmZiBmNhbGxlcgUEdGhpcwYFAmdzCQACAQILTWF0Y2ggZXJyb3IcAmZiAQlyZWJhbGFuY2UACQDOCAIJAQJjSQEJAQJhVwIFBHRoaXMJAQJhZQAJAQJjSQEJAQJhVwIFBHRoaXMJAQJhZgACZmIBIWNhbGN1bGF0ZUFtb3VudE91dEZvclN3YXBSRUFET05MWQMCZ3QCZ3UCZ3YEAmd3AwkAAAIFAmd1BwQCZ3gJAQJhVwIFBHRoaXMJAQJhZgAEAmd5CQECYVcCBQR0aGlzCQECYWUACQCUCgIFAmd4BQJneQQCZ3gJAQJhVwIFBHRoaXMJAQJhZQAEAmd5CQECYVcCBQR0aGlzCQECYWYACQCUCgIFAmd4BQJneQQCZ3gIBQJndwJfMQQCZ3kIBQJndwJfMgQCZ3oJAQJiVAEFAmd5BAJnQQkBAmJUAQUCZ3gEAmdCCQBrAwUCZ0EFAmd0CQBkAgUCZ3oFAmd0BAJnQwkAuQICCQC2AgEFAmd6CQC2AgEFAmdBBAJnRAkAuQICCQC3AgIJALcCAgkAtgIBCQECYlQBBQJneQkAtgIBBQJndAkAtgIBBQJndgkAuAICCQC2AgEJAQJiVAEFAmd4CQC2AgEFAmdCBAJnRQMJAMACAgUCZ0QFAmdDBgkAAgECFG5ldyBLIGlzIGZld2VyIGVycm9yAwkAAAIFAmdFBQJnRQkAlAoCBQNuaWwFAmdCCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmZiASZjYWxjdWxhdGVBbW91bnRPdXRGb3JTd2FwQW5kU2VuZFRva2VucwUCZ3QCZ3UCZ0YCZ0cCZ3YEAmdICgACYmcJAPwHBAUCYmQCF2dldFN3YXBDb250cmFjdFJFQURPTkxZBQNuaWwFA25pbAMJAAECBQJiZwIGU3RyaW5nBQJiZwkAAgEJAKwCAgkAAwEFAmJnAhsgY291bGRuJ3QgYmUgY2FzdCB0byBTdHJpbmcEAmZWCQDMCAIDCQBnAggJAQV2YWx1ZQEJAJEDAggFAmZiCHBheW1lbnRzAAAGYW1vdW50BQJndAYJAQJiYQECDFdyb25nIGFtb3VudAkAzAgCAwkAAAIIBQJmYgZjYWxsZXIJARFAZXh0ck5hdGl2ZSgxMDYyKQEFAmdIBgkBAmJhAQIRUGVybWlzc2lvbiBkZW5pZWQFA25pbAMJAAACBQJmVgUCZlYEAmZjCQEFdmFsdWUBCQCRAwIIBQJmYghwYXltZW50cwAABAJneQkBAmJwAQgFAmZjB2Fzc2V0SWQEAmd4AwkAAAIFAmd1BwkBAmFXAgUEdGhpcwkBAmFmAAkBAmFXAgUEdGhpcwkBAmFlAAQCZ3oJAGUCCQBlAgkBAmJUAQUCZ3kICQEFdmFsdWUBCQCRAwIIBQJmYghwYXltZW50cwAABmFtb3VudAUCZ3YEAmdBCQECYlQBBQJneAQCZ0IJAGsDBQJnQQUCZ3QJAGQCBQJnegUCZ3QEAmdDCQC5AgIJALYCAQUCZ3oJALYCAQUCZ0EEAmdECQC5AgIJALcCAgkAtgIBCQECYlQBBQJneQkAtgIBBQJndgkAuAICCQC2AgEJAQJiVAEFAmd4CQC2AgEFAmdCBAJnRQMJAMACAgUCZ0QFAmdDBgkAAgECFG5ldyBLIGlzIGZld2VyIGVycm9yAwkAAAIFAmdFBQJnRQQCZ0kDCQBnAgUCZ0IFAmdGBgkAAgECLEV4Y2hhbmdlIHJlc3VsdCBpcyBmZXdlciBjb2lucyB0aGFuIGV4cGVjdGVkAwkAAAIFAmdJBQJnSQQCZ0oJAQJjSQEFAmd5AwkAAAIFAmdKBQJnSgQCZ0sJAQJjUAIFAmd4BQJnQgMJAAACBQJnSwUCZ0sJAJQKAgkAzggCCQDOCAIFAmdLBQJnSgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBBQJnRwUCZ0IJAQJibgEFAmd4BQNuaWwFAmdCCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmZiAQNwdXQCAmRPAmdMAwkAZgIAAAUCZE8JAAIBAiBJbnZhbGlkIHNsaXBwYWdlVG9sZXJhbmNlIHBhc3NlZAQCZmgJAQJmZQMFAmZiBQJkTwYEAmVxCAUCZmgCXzIEAmR2CAUCZmgCXzcEAmRNCAUCZmgCXzkEAmVyCAUCZmgDXzEwBAJlcwgFAmZoA18xMQQCZ00IBQJmaANfMTIEAmdOCAUCZmgDXzEzBAJmZgkAtgIBCAkBBXZhbHVlAQkAkQMCCAUCZmIIcGF5bWVudHMAAAZhbW91bnQEAmZnCQC2AgEICQEFdmFsdWUBCQCRAwIIBQJmYghwYXltZW50cwABBmFtb3VudAQCZUgJAQJlQQMFAmZmBQJmZwkAtgIBAAADCQAAAgUCZUgFAmVIBAJmagkA/AcEBQJiZAIEZW1pdAkAzAgCBQJlcQUDbmlsBQNuaWwDCQAAAgUCZmoFAmZqBAJmawQCYVEFAmZqAwkAAQIFAmFRAgdBZGRyZXNzBAJmbAUCYVEJAPwHBAUCZmwCBGVtaXQJAMwIAgUCZXEFA25pbAUDbmlsBQR1bml0AwkAAAIFAmZrBQJmawQCZ08DCQBmAgUCZXIAAAkA/AcEBQJiRAIDcHV0BQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmdNBQJlcgUDbmlsBQNuaWwDCQAAAgUCZ08FAmdPBAJnUAMJAGYCBQJlcwAACQD8BwQFAmJEAgNwdXQFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCZ04FAmVzBQNuaWwFA25pbAMJAAACBQJnUAUCZ1AEAmdRAwUCZ0wEAmdSCQD8BwQFAmJDAgVzdGFrZQUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQJkdgUCZXEFA25pbAMJAAACBQJnUgUCZ1IFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUCZmIGY2FsbGVyBQJlcQUCZHYFA25pbAQCZ1MJAQJlSQMAAAAAAAADCQAAAgUCZ1MFAmdTBAJleggFAmdTAl8yBAJnVAgFAmdTAl8xBAJnVQkBAmVOAgUCZUgFAmV6AwkAAAIFAmdVBQJnVQQCZ1YJAPwHBAUEdGhpcwIJcmViYWxhbmNlBQNuaWwFA25pbAMJAAACBQJnVgUCZ1YJAM4IAgkAzggCBQJkTQUCZ1EFAmdUCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmZiAQpwdXRGb3JGcmVlAQJnVwMJAGYCAAAFAmdXCQACAQIUSW52YWxpZCB2YWx1ZSBwYXNzZWQEAmZoCQECZmUDBQJmYgUCZ1cHBAJkTQgFAmZoAl85BAJmZgkAtgIBCAkBBXZhbHVlAQkAkQMCCAUCZmIIcGF5bWVudHMAAAZhbW91bnQEAmZnCQC2AgEICQEFdmFsdWUBCQCRAwIIBQJmYghwYXltZW50cwABBmFtb3VudAQCZUgJAQJlQQMFAmZmBQJmZwkAtgIBAAADCQAAAgUCZUgFAmVIBAJnWAkBAmVJAwAAAAAAAAQCZ1QIBQJnWAJfMQQCZXoIBQJnWAJfMgQCZ1UJAQJlTgIFAmVIBQJlegMJAAACBQJnVQUCZ1UJAM4IAgUCZE0FAmdUCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmZiAQlwdXRPbmVUa24CAmdZAmdaBAJoYQoAAmJnCQD8BwQFAmJkAihpc1Bvb2xPbmVUb2tlbk9wZXJhdGlvbnNEaXNhYmxlZFJFQURPTkxZCQDMCAIJAKUIAQUEdGhpcwUDbmlsBQNuaWwDCQABAgUCYmcCB0Jvb2xlYW4FAmJnCQACAQkArAICCQADAQUCYmcCHCBjb3VsZG4ndCBiZSBjYXN0IHRvIEJvb2xlYW4EAmhiAwMDAwkBAmJpAAYJAAACBQJidgUBbAYJAAACBQJidgUBbQYJAAACBQJidgUBbgYFAmhhBAJmVgkAzAgCAwMJAQEhAQUCaGIGCQECZ3ABBQJmYgYJAQJiYQECIXB1dCBvcGVyYXRpb24gaXMgYmxvY2tlZCBieSBhZG1pbgkAzAgCAwkAAAIJAJADAQgFAmZiCHBheW1lbnRzAAEGCQECYmEBAh5leGFjdGx5IDEgcGF5bWVudCBhcmUgZXhwZWN0ZWQFA25pbAMJAAACBQJmVgUCZlYEAmhjCQCRAwIIBQJmYghwYXltZW50cwAABAJmcQgFAmhjB2Fzc2V0SWQEAmZwCAUCaGMGYW1vdW50BAJlSAMJAAACBQJmcQUCYngJAQJlQQMJALYCAQUCZnAJALYCAQAACQC2AgEAAAMJAAACBQJmcQUCYnkJAQJlQQMJALYCAQAACQC2AgEFAmZwCQC2AgEAAAkBAmJhAQIecGF5bWVudCBhc3NldCBpcyBub3Qgc3VwcG9ydGVkAwkAAAIFAmVIBQJlSAQCYWIIBQJmYgZjYWxsZXIEAmFjCAUCZmINdHJhbnNhY3Rpb25JZAQCaGQJAQJmbwQFAmZwBQJmcQUCYWIFAmFjAwkAAAIFAmhkBQJoZAQCZnUIBQJoZAJfNQQCaGUIBQJoZAJfNAQCZm4IBQJoZAJfMwQCZXQIBQJoZAJfMgQCaGYIBQJoZAJfMQQCaGcDAwkAZgIFAmdZAAAJAGYCBQJnWQUCaGYHCQECYmEBCQC5CQIJAMwIAgIfYW1vdW50IHRvIHJlY2VpdmUgaXMgbGVzcyB0aGFuIAkAzAgCCQCkAwEFAmdZBQNuaWwCAAUCaGYEAmZqCQECZmkBBQJoZwMJAAACBQJmagUCZmoEAmdRAwUCZ1oEAmhoCQD8BwQFAmJDAgVzdGFrZQUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQJidwUCaGcFA25pbAMJAAACBQJoaAUCaGgFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUCZmIGY2FsbGVyBQJoZwUCYncFA25pbAQCaGkDCQBmAgUCZm4AAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQJiZQUCZm4FAmZxBQNuaWwFA25pbAQCaGoDCQAAAgUEdGhpcwUCYmUJAJQKAgAAAAADBQJmdQkAlAoCCQEBLQEFAmZuAAAJAJQKAgAACQEBLQEFAmZuBAJlSggFAmhqAl8xBAJlSwgFAmhqAl8yBAJoawkBAmVJAwUCZUoFAmVLAAAEAmdUCAUCaGsCXzEEAmV6CAUCaGsCXzIEAmVVCQEFdmFsdWUBCQCiCAEFAmFqBAJnVQkBAmVOAgUCZUgFAmV6AwkAAAIFAmdVBQJnVQQCZ1YJAPwHBAUEdGhpcwIJcmViYWxhbmNlBQNuaWwFA25pbAMJAAACBQJnVgUCZ1YJAJQKAgkAzggCCQDOCAIJAM4IAgUCZXQFAmdRBQJoaQUCZ1QFAmhnCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmZiARFwdXRPbmVUa25SRUFET05MWQICZnECZnAEAmhsCQECZm8EBQJmcAkBAmJuAQUCZnEFBHVuaXQFBHVuaXQEAmhmCAUCaGwCXzEEAmV0CAUCaGwCXzIEAmZuCAUCaGwCXzMEAmhlCAUCaGwCXzQEAmZ1CAUCaGwCXzUJAJQKAgUDbmlsCQCVCgMFAmhmBQJmbgUCaGUCZmIBCWdldE9uZVRrbgICaG0CZ1kEAmhhCgACYmcJAPwHBAUCYmQCKGlzUG9vbE9uZVRva2VuT3BlcmF0aW9uc0Rpc2FibGVkUkVBRE9OTFkJAMwIAgkApQgBBQR0aGlzBQNuaWwFA25pbAMJAAECBQJiZwIHQm9vbGVhbgUCYmcJAAIBCQCsAgIJAAMBBQJiZwIcIGNvdWxkbid0IGJlIGNhc3QgdG8gQm9vbGVhbgQCaG4DAwkBAmJpAAYJAAACBQJidgUBbgYFAmhhBAJmVgkAzAgCAwMJAQEhAQUCaG4GCQECZ3ABBQJmYgYJAQJiYQECIWdldCBvcGVyYXRpb24gaXMgYmxvY2tlZCBieSBhZG1pbgkAzAgCAwkAAAIJAJADAQgFAmZiCHBheW1lbnRzAAEGCQECYmEBAh5leGFjdGx5IDEgcGF5bWVudCBhcmUgZXhwZWN0ZWQFA25pbAMJAAACBQJmVgUCZlYEAmZVCQECYm4BBQJobQQCaGMJAJEDAggFAmZiCHBheW1lbnRzAAAEAmZxCAUCaGMHYXNzZXRJZAQCZkMIBQJoYwZhbW91bnQEAmVICQECZUEDCQC2AgEAAAkAtgIBAAAJALYCAQAAAwkAAAIFAmVIBQJlSAQCYWIIBQJmYgZjYWxsZXIEAmFjCAUCZmINdHJhbnNhY3Rpb25JZAQCaG8JAQJmVAUFAmZVBQJmQwUCZnEFAmFiBQJhYwMJAAACBQJobwUCaG8EAmZXCAUCaG8CXzUEAmhlCAUCaG8CXzQEAmZuCAUCaG8CXzMEAmV0CAUCaG8CXzIEAmhwCAUCaG8CXzEEAmNmAwMJAGYCBQJnWQAACQBmAgUCZ1kFAmhwBwkBAmJhAQkAuQkCCQDMCAICH2Ftb3VudCB0byByZWNlaXZlIGlzIGxlc3MgdGhhbiAJAMwIAgkApAMBBQJnWQUDbmlsAgAFAmhwBAJocQkA/AcEBQJiZAIEYnVybgkAzAgCBQJmQwUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQJmcQUCZkMFA25pbAMJAAACBQJocQUCaHEEAmdLCQECY1ACBQJobQkAZAIFAmNmCQCWAwEJAMwIAgAACQDMCAIFAmZuBQNuaWwEAmhyCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFAmFiBQJjZgUCZlUFA25pbAQCaGkDCQBmAgUCZm4AAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQJiZQUCZm4FAmZVBQNuaWwFA25pbAQCaHMEAmh0AwkAAAIFBHRoaXMFAmJlAAAFAmZuAwUCZlcJAJQKAgkBAS0BCQBkAgUCY2YFAmh0AAAJAJQKAgAACQEBLQEJAGQCBQJjZgUCaHQEAmVKCAUCaHMCXzEEAmVLCAUCaHMCXzIEAmh1CQECZUkDBQJlSgUCZUsAAAQCZ1QIBQJodQJfMQQCZXoIBQJodQJfMgQCZ1UJAQJlTgIFAmVIBQJlegMJAAACBQJnVQUCZ1UJAJQKAgkAzggCCQDOCAIJAM4IAgkAzggCBQJldAUCZ0sFAmhyBQJoaQUCZ1QFAmNmCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmZiARFnZXRPbmVUa25SRUFET05MWQICZlUCZkMEAmh2CQECZlQFCQECYm4BBQJmVQUCZkMFAmJ3BQR1bml0BQR1bml0BAJocAgFAmh2Al8xBAJldAgFAmh2Al8yBAJmbggFAmh2Al8zBAJoZQgFAmh2Al80BAJmVwgFAmh2Al81CQCUCgIFA25pbAkAlQoDBQJocAUCZm4FAmhlAmZiARN1bnN0YWtlQW5kR2V0T25lVGtuAwJodwJobQJnWQQCaGEKAAJiZwkA/AcEBQJiZAIoaXNQb29sT25lVG9rZW5PcGVyYXRpb25zRGlzYWJsZWRSRUFET05MWQkAzAgCCQClCAEFBHRoaXMFA25pbAUDbmlsAwkAAQIFAmJnAgdCb29sZWFuBQJiZwkAAgEJAKwCAgkAAwEFAmJnAhwgY291bGRuJ3QgYmUgY2FzdCB0byBCb29sZWFuBAJobgMDCQECYmkABgkAAAIFAmJ2BQFuBgUCaGEEAmZWCQDMCAIDAwkBASEBBQJobgYJAQJncAEFAmZiBgkBAmJhAQIhZ2V0IG9wZXJhdGlvbiBpcyBibG9ja2VkIGJ5IGFkbWluCQDMCAIDCQAAAgkAkAMBCAUCZmIIcGF5bWVudHMAAAYJAQJiYQECGG5vIHBheW1lbnRzIGFyZSBleHBlY3RlZAUDbmlsAwkAAAIFAmZWBQJmVgQCZlUJAQJibgEFAmhtBAJhYggFAmZiBmNhbGxlcgQCYWMIBQJmYg10cmFuc2FjdGlvbklkBAJlSAkBAmVBAwkAtgIBAAAJALYCAQAACQC2AgEAAAMJAAACBQJlSAUCZUgEAmh4CQD8BwQFAmJDAgd1bnN0YWtlCQDMCAIJANgEAQUCYncJAMwIAgUCaHcFA25pbAUDbmlsAwkAAAIFAmh4BQJoeAQCaHkJAQJmVAUFAmZVBQJodwUCYncFAmFiBQJhYwMJAAACBQJoeQUCaHkEAmZXCAUCaHkCXzUEAmhlCAUCaHkCXzQEAmZuCAUCaHkCXzMEAmV0CAUCaHkCXzIEAmhwCAUCaHkCXzEEAmNmAwMJAGYCBQJnWQAACQBmAgUCZ1kFAmhwBwkBAmJhAQkAuQkCCQDMCAICH2Ftb3VudCB0byByZWNlaXZlIGlzIGxlc3MgdGhhbiAJAMwIAgkApAMBBQJnWQUDbmlsAgAFAmhwBAJocQkA/AcEBQJiZAIEYnVybgkAzAgCBQJodwUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQJidwUCaHcFA25pbAMJAAACBQJocQUCaHEEAmdLCQECY1ACBQJobQkAZAIFAmNmCQCWAwEJAMwIAgAACQDMCAIFAmZuBQNuaWwEAmhyCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQJmYgZjYWxsZXIFAmNmBQJmVQUDbmlsBAJoaQMJAGYCBQJmbgAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFAmJlBQJmbgUCZlUFA25pbAUDbmlsBAJoegQCaHQDCQAAAgUEdGhpcwUCYmUAAAUCZm4DBQJmVwkAlAoCCQEBLQEJAGQCBQJjZgUCaHQAAAkAlAoCAAAJAQEtAQkAZAIFAmNmBQJodAQCZUoIBQJoegJfMQQCZUsIBQJoegJfMgQCaEEJAQJlSQMFAmVKBQJlSwAABAJnVAgFAmhBAl8xBAJleggFAmhBAl8yBAJnVQkBAmVOAgUCZUgFAmV6AwkAAAIFAmdVBQJnVQkAlAoCCQDOCAIJAM4IAgkAzggCCQDOCAIFAmV0BQJnSwUCaHIFAmhpBQJnVAUCY2YJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZmIBA2dldAAEAmVlCQECZmEBBQJmYgQCZEsIBQJlZQJfMQQCZEwIBQJlZQJfMgQCZmQIBQJlZQJfMwQCZHQIBQJlZQJfNAQCZE0IBQJlZQJfNQQCZ0sJAQJjVQIFAmRLBQJkTAQCZUgJAQJlQQMJALYCAQAACQC2AgEAAAkAtgIBAAADCQAAAgUCZUgFAmVIBAJoQgkA/AcEBQJiZAIEYnVybgkAzAgCBQJmZAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQJkdAUCZmQFA25pbAMJAAACBQJoQgUCaEIEAmhDCQECZUkDCQEBLQEFAmRLCQEBLQEFAmRMAAAEAmdUCAUCaEMCXzEEAmV6CAUCaEMCXzIEAmdVCQECZU4CBQJlSAUCZXoDCQAAAgUCZ1UFAmdVCQDOCAIJAM4IAgUCZ0sFAmRNBQJnVAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJmYgEJZ2V0Tm9MZXNzAgJoRAJoRQQCZWUJAQJmYQEFAmZiBAJkSwgFAmVlAl8xBAJkTAgFAmVlAl8yBAJmZAgFAmVlAl8zBAJkdAgFAmVlAl80BAJkTQgFAmVlAl81AwkAZgIFAmhEBQJkSwkAAgEJAKwCAgkArAICCQCsAgICHG5vTGVzc1RoZW5BbXRBc3NldCBmYWlsZWQ6ICAJAKQDAQUCZEsCAyA8IAkApAMBBQJoRAMJAGYCBQJoRQUCZEwJAAIBCQCsAgIJAKwCAgkArAICAh1ub0xlc3NUaGVuUHJpY2VBc3NldCBmYWlsZWQ6IAkApAMBBQJkTAIDIDwgCQCkAwEFAmhFBAJnSwkBAmNVAgUCZEsFAmRMBAJlSAkBAmVBAwkAtgIBAAAJALYCAQAACQC2AgEAAAMJAAACBQJlSAUCZUgEAmhCCQD8BwQFAmJkAgRidXJuCQDMCAIFAmZkBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmR0BQJmZAUDbmlsAwkAAAIFAmhCBQJoQgQCaEYJAQJlSQMJAQEtAQUCZEsJAQEtAQUCZEwAAAQCZ1QIBQJoRgJfMQQCZXoIBQJoRgJfMgQCZ1UJAQJlTgIFAmVIBQJlegMJAAACBQJnVQUCZ1UJAM4IAgkAzggCBQJnSwUCZE0FAmdUCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmZiAQ11bnN0YWtlQW5kR2V0AQJjZgQCaEcDCQECIT0CCQCQAwEIBQJmYghwYXltZW50cwAACQACAQIYTm8gcGF5bWVudHMgYXJlIGV4cGVjdGVkBgMJAAACBQJoRwUCaEcEAmRpCQECYmsABAJkdgkA2QQBCQCRAwIFAmRpBQFxBAJlSAkBAmVBAwkAtgIBAAAJALYCAQAACQC2AgEAAAMJAAACBQJlSAUCZUgEAmh4CQD8BwQFAmJDAgd1bnN0YWtlCQDMCAIJANgEAQUCZHYJAMwIAgUCY2YFA25pbAUDbmlsAwkAAAIFAmh4BQJoeAQCZWUJAQJkcgQJANgEAQgFAmZiDXRyYW5zYWN0aW9uSWQJANgEAQUCZHYFAmNmCAUCZmIGY2FsbGVyBAJkSwgFAmVlAl8xBAJkTAgFAmVlAl8yBAJkeQkBDXBhcnNlSW50VmFsdWUBCAUCZWUCXzkEAmRNCAUCZWUDXzEwBAJnSwkBAmNVAgUCZEsFAmRMBAJoSAMDCQECYmkABgkAAAIFAmR5BQFuCQACAQkArAICAixHZXQgb3BlcmF0aW9uIGlzIGJsb2NrZWQgYnkgYWRtaW4uIFN0YXR1cyA9IAkApAMBBQJkeQYDCQAAAgUCaEgFAmhIBAJoQgkA/AcEBQJiZAIEYnVybgkAzAgCBQJjZgUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQJkdgUCY2YFA25pbAMJAAACBQJoQgUCaEIEAmhJCQECZUkDCQEBLQEFAmRLCQEBLQEFAmRMAAAEAmdUCAUCaEkCXzEEAmV6CAUCaEkCXzIEAmdVCQECZU4CBQJlSAUCZXoDCQAAAgUCZ1UFAmdVCQDOCAIJAM4IAgUCZ0sFAmRNBQJnVAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJmYgETdW5zdGFrZUFuZEdldE5vTGVzcwMCaHcCaEoCaEUEAmhuAwkBAmJpAAYJAAACBQJidgUBbgQCZlYJAMwIAgMJAQEhAQUCaG4GCQACAQIhZ2V0IG9wZXJhdGlvbiBpcyBibG9ja2VkIGJ5IGFkbWluCQDMCAIDCQAAAgkAkAMBCAUCZmIIcGF5bWVudHMAAAYJAAIBAhhubyBwYXltZW50cyBhcmUgZXhwZWN0ZWQFA25pbAMJAAACBQJmVgUCZlYEAmVICQECZUEDCQC2AgEAAAkAtgIBAAAJALYCAQAAAwkAAAIFAmVIBQJlSAQCaHgJAPwHBAUCYkMCB3Vuc3Rha2UJAMwIAgkA2AQBBQJidwkAzAgCBQJodwUDbmlsBQNuaWwDCQAAAgUCaHgFAmh4BAJlZQkBAmRyBAkA2AQBCAUCZmINdHJhbnNhY3Rpb25JZAkA2AQBBQJidwUCaHcIBQJmYgZjYWxsZXIEAmRLCAUCZWUCXzEEAmRMCAUCZWUCXzIEAmRNCAUCZWUDXzEwBAJnSwkBAmNVAgUCZEsFAmRMBAJoSwkAzAgCAwkAZwIFAmRLBQJoSgYJAAIBCQC5CQIJAMwIAgIsYW1vdW50IGFzc2V0IGFtb3VudCB0byByZWNlaXZlIGlzIGxlc3MgdGhhbiAJAMwIAgkApAMBBQJoSgUDbmlsAgAJAMwIAgMJAGcCBQJkTAUCaEUGCQACAQkAuQkCCQDMCAICK3ByaWNlIGFzc2V0IGFtb3VudCB0byByZWNlaXZlIGlzIGxlc3MgdGhhbiAJAMwIAgkApAMBBQJoRQUDbmlsAgAFA25pbAMJAAACBQJoSwUCaEsEAmhCCQD8BwQFAmJkAgRidXJuCQDMCAIFAmh3BQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmJ3BQJodwUDbmlsAwkAAAIFAmhCBQJoQgQCaEwJAQJlSQMJAQEtAQUCZEsJAQEtAQUCZEwAAAQCZ1QIBQJoTAJfMQQCZXoIBQJoTAJfMgQCZ1UJAQJlTgIFAmVIBQJlegMJAAACBQJnVQUCZ1UJAM4IAgkAzggCBQJnSwUCZE0FAmdUCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmZiAQhhY3RpdmF0ZQICaE0CaE4DCQECIT0CCQClCAEIBQJmYgZjYWxsZXIJAKUIAQUCYmQJAAIBAhJwZXJtaXNzaW9ucyBkZW5pZWQJAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCCQECYWUABQJoTQkAzAgCCQELU3RyaW5nRW50cnkCCQECYWYABQJoTgUDbmlsAgdzdWNjZXNzAmZiAQpyZWZyZXNoS0xwAAQCaE8JAQt2YWx1ZU9yRWxzZQIJAJ8IAQUCYWsAAAQCaFADCQBnAgkAZQIFBmhlaWdodAUCaE8FAmFuBQR1bml0CQECYmEBCQC5CQIJAMwIAgkApAMBBQJhbgkAzAgCAi8gYmxvY2tzIGhhdmUgbm90IHBhc3NlZCBzaW5jZSB0aGUgcHJldmlvdXMgY2FsbAUDbmlsAgADCQAAAgUCaFAFAmhQBAJlVQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCoAwEJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwUCYWoCATAJAQJiYwECC2ludmFsaWQga0xwBAJoUQkBAmVJAwAAAAAAAAQCaFIIBQJoUQJfMQQCZXoIBQJoUQJfMgQCZUwDCQECIT0CBQJlVQUCZXoFAmhSCQECYmEBAhJub3RoaW5nIHRvIHJlZnJlc2gJAJQKAgUCZUwJAKYDAQUCZXoJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZmIBHGdldFBvb2xDb25maWdXcmFwcGVyUkVBRE9OTFkACQCUCgIFA25pbAkBAmJrAAJmYgEcZ2V0QWNjQmFsYW5jZVdyYXBwZXJSRUFET05MWQECYXAJAJQKAgUDbmlsCQECYlQBBQJhcAJmYgEZY2FsY1ByaWNlc1dyYXBwZXJSRUFET05MWQMCZGMCZGQCZGgEAmRxCQECZGcDBQJkYwUCZGQFAmRoCQCUCgIFA25pbAkAzAgCCQCmAwEJAJEDAgUCZHEAAAkAzAgCCQCmAwEJAJEDAgUCZHEAAQkAzAgCCQCmAwEJAJEDAgUCZHEAAgUDbmlsAmZiARR0b1gxOFdyYXBwZXJSRUFET05MWQIBRQFGCQCUCgIFA25pbAkApgMBCQEBRAIFAUUFAUYCZmIBFmZyb21YMThXcmFwcGVyUkVBRE9OTFkCAUkBSgkAlAoCBQNuaWwJAQFIAgkApwMBBQFJBQFKAmZiAR5jYWxjUHJpY2VCaWdJbnRXcmFwcGVyUkVBRE9OTFkCAmJYAmJZCQCUCgIFA25pbAkApgMBCQECYlcCCQCnAwEFAmJYCQCnAwEFAmJZAmZiASNlc3RpbWF0ZVB1dE9wZXJhdGlvbldyYXBwZXJSRUFET05MWQkCZHMCZE8CZFACZFECZFICZFMCYWICZFQCZFUJAJQKAgUDbmlsCQECZE4JBQJkcwUCZE8FAmRQBQJkUQUCZFIFAmRTBQJhYgUCZFQFAmRVAmZiASNlc3RpbWF0ZUdldE9wZXJhdGlvbldyYXBwZXJSRUFET05MWQQCZHMCZHQCZHUCYWIEAmVlCQECZHIEBQJkcwUCZHQFAmR1CQERQGV4dHJOYXRpdmUoMTA2MikBBQJhYgkAlAoCBQNuaWwJAJwKCggFAmVlAl8xCAUCZWUCXzIIBQJlZQJfMwgFAmVlAl80CAUCZWUCXzUIBQJlZQJfNggFAmVlAl83CQCmAwEIBQJlZQJfOAgFAmVlAl85CAUCZWUDXzEwAmZiAQ1zdGF0c1JFQURPTkxZAAQCZGkJAQJiawAEAmR2CQDZBAEJAJEDAgUCZGkFAXEEAmhTCQCRAwIFAmRpBQFyBAJoVAkAkQMCBQJkaQUBcwQCZFgJAJEDAgUCZGkFAXYEAmRZCQCRAwIFAmRpBQF3BAJkagkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmRpBQF0BAJkawkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmRpBQF1BAJoVQgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkA7AcBBQJkdgkArAICCQCsAgICBkFzc2V0IAkA2AQBBQJkdgIOIGRvZXNuJ3QgZXhpc3QIcXVhbnRpdHkEAmhWCQECYlQBBQJoUwQCaFcJAQJiVAEFAmhUBAJoWAMJAAACBQJoVQAACQDMCAIFAWUJAMwIAgUBZQkAzAgCBQFlBQNuaWwJAQJkZwMFAmhWBQJoVwUCaFUEAmRGAAAEAmhZCQEBSAIJAJEDAgUCaFgAAQUBYgQCaFoJAQFIAgkAkQMCBQJoWAACBQFiBAJpYQkBBXZhbHVlAQkAmggCBQJiZAkBAmFEAQkApQgBBQR0aGlzCQCUCgIFA25pbAkAuQkCCQDMCAICDiVkJWQlZCVkJWQlZCVkCQDMCAIJAKQDAQUCaFYJAMwIAgkApAMBBQJoVwkAzAgCCQCkAwEFAmhVCQDMCAIJAKQDAQUCZEYJAMwIAgkApAMBBQJoWQkAzAgCCQCkAwEFAmhaCQDMCAIJAKQDAQUCaWEFA25pbAUBagJmYgEgZXZhbHVhdGVQdXRCeUFtb3VudEFzc2V0UkVBRE9OTFkBAmRQBAJkaQkBAmJrAAQCZHYJANkEAQkAkQMCBQJkaQUBcQQCZFYJAJEDAgUCZGkFAXIEAmR3CQDZBAEFAmRWBAJkVwkAkQMCBQJkaQUBcwQCZHgJANkEAQUCZFcEAmRqCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCZGkFAXQEAmRrCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCZGkFAXUEAmR5CQCRAwIFAmRpBQFwBAJoVQgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkA7AcBBQJkdgkArAICCQCsAgICBkFzc2V0IAkA2AQBBQJkdgIOIGRvZXNuJ3QgZXhpc3QIcXVhbnRpdHkEAmhWCQECYlQBBQJkVgQCaFcJAQJiVAEFAmRXBAJkZQkBAUQCBQJoVgUCZGoEAmRmCQEBRAIFAmhXBQJkawQCZEUDCQAAAgUCaFUAAAUBZQkBAmJXAgUCZGYFAmRlBAJlYgkBAUQCBQJkUAUCZGoEAmVjCQC8AgMFAmViBQJkRQUBZAQCZFIJAQFIAgUCZWMFAmRrBAJmaAkBAmROCQIAAKDCHgUCZFAFAmR3BQJkUgUCZHgCAAYHBAJlbQgFAmZoAl8xBAJpYggFAmZoAl8zBAJkQQgFAmZoAl80BAJkQwgFAmZoAl81BAJkeggFAmZoAl82CQCUCgIFA25pbAkAuQkCCQDMCAICECVkJWQlZCVkJWQlZCVkJWQJAMwIAgkApAMBBQJlbQkAzAgCCQCkAwEJAQFIAgUCZEUFAWIJAMwIAgkApAMBBQJkQQkAzAgCCQCkAwEFAmRDCQDMCAIJAKQDAQUCZHoJAMwIAgUCZHkJAMwIAgkApAMBBQJkUAkAzAgCCQCkAwEFAmRSBQNuaWwFAWoCZmIBH2V2YWx1YXRlUHV0QnlQcmljZUFzc2V0UkVBRE9OTFkBAmRSBAJkaQkBAmJrAAQCZHYJANkEAQkAkQMCBQJkaQUBcQQCZFYJAJEDAgUCZGkFAXIEAmR3CQDZBAEFAmRWBAJkVwkAkQMCBQJkaQUBcwQCZHgJANkEAQUCZFcEAmRqCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCZGkFAXQEAmRrCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCZGkFAXUEAmR5CQCRAwIFAmRpBQFwBAJoVQgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkA7AcBBQJkdgkArAICCQCsAgICBkFzc2V0IAkA2AQBBQJkdgIOIGRvZXNuJ3QgZXhpc3QIcXVhbnRpdHkEAmljCQECYlQBBQJkVgQCaWQJAQJiVAEFAmRXBAJpZQkBAUQCBQJpYwUCZGoEAmlmCQEBRAIFAmlkBQJkawQCZEUDCQAAAgUCaFUAAAUBZQkBAmJXAgUCaWYFAmllBAJlYwkBAUQCBQJkUgUCZGsEAmViCQC8AgMFAmVjBQFkBQJkRQQCZFAJAQFIAgUCZWIFAmRqBAJmaAkBAmROCQIAAKDCHgUCZFAFAmR3BQJkUgUCZHgCAAYHBAJlbQgFAmZoAl8xBAJpYggFAmZoAl8zBAJkQQgFAmZoAl80BAJkQwgFAmZoAl81BAJkeggFAmZoAl82CQCUCgIFA25pbAkAuQkCCQDMCAICECVkJWQlZCVkJWQlZCVkJWQJAMwIAgkApAMBBQJlbQkAzAgCCQCkAwEJAQFIAgUCZEUFAWIJAMwIAgkApAMBBQJkQQkAzAgCCQCkAwEFAmRDCQDMCAIJAKQDAQUCZHoJAMwIAgUCZHkJAMwIAgkApAMBBQJkUAkAzAgCCQCkAwEFAmRSBQNuaWwFAWoCZmIBE2V2YWx1YXRlR2V0UkVBRE9OTFkCAmlnAmloBAJlZQkBAmRyBAIABQJpZwUCaWgFBHRoaXMEAmRLCAUCZWUCXzEEAmRMCAUCZWUCXzIEAmRBCAUCZWUCXzUEAmRDCAUCZWUCXzYEAmR6CAUCZWUCXzcEAmRGCAUCZWUCXzgEAmR5CQENcGFyc2VJbnRWYWx1ZQEIBQJlZQJfOQkAlAoCBQNuaWwJALkJAgkAzAgCAg4lZCVkJWQlZCVkJWQlZAkAzAgCCQCkAwEFAmRLCQDMCAIJAKQDAQUCZEwJAMwIAgkApAMBBQJkQQkAzAgCCQCkAwEFAmRDCQDMCAIJAKQDAQUCZHoJAMwIAgkApgMBBQJkRgkAzAgCCQCkAwEFAmR5BQNuaWwFAWoBAmlpAQJpagAEAmlrBAJhUQkBAmduAAMJAAECBQJhUQIKQnl0ZVZlY3RvcgQCZ3EFAmFRBQJncQMJAAECBQJhUQIEVW5pdAgFAmlpD3NlbmRlclB1YmxpY0tleQkAAgECC01hdGNoIGVycm9yBAJhUQUCaWkDCQABAgUCYVECBU9yZGVyBAJlUQUCYVEEAmlsCQECYmoABAJpbQMJAQJlTQAJAJQKAgYCAAkBAmVQAQUCZVEEAmFLCAUCaW0CXzEEAmFMCAUCaW0CXzIEAmFNCQD0AwMIBQJlUQlib2R5Qnl0ZXMJAJEDAggFAmVRBnByb29mcwAACAUCZVEPc2VuZGVyUHVibGljS2V5BAJhTgkA9AMDCAUCZVEJYm9keUJ5dGVzCQCRAwIIBQJlUQZwcm9vZnMAAQUCaWwDAwMFAmFLBQJhTQcFAmFOBwYJAQJhSgQFAmFLBQJhTAUCYU0FAmFOAwkAAQIFAmFRAhRTZXRTY3JpcHRUcmFuc2FjdGlvbgQCYVYFAmFRAwkA9AMDCAUCaWkJYm9keUJ5dGVzCQCRAwIIBQJpaQZwcm9vZnMAAAUCaWsGBAJpbgkA9gMBCQEFdmFsdWUBCAUCYVYGc2NyaXB0BAJpbwkA2wQBCQEFdmFsdWUBCQCdCAIFAmJkCQECYUYABAJpcAkA8QcBBQR0aGlzAwkAAAIFAmlvBQJpbgkBAiE9AgUCaXAFAmluBwkA9AMDCAUCaWkJYm9keUJ5dGVzCQCRAwIIBQJpaQZwcm9vZnMAAAUCaWsrT1WL", "height": 2661309, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: GC1jUmfVUrdd46A6FG94oZSbPKdmXxv1q9stwo7ayfrK Next: 5LhU2urW5EcxNLFVJqk84jW9WQwdb9pMUziCy3qxP9fb Diff:
OldNewDifferences
382382 if ($isInstanceOf(aQ, "Int"))
383383 then {
384384 let cy = aQ
385+ let cm = (ch - cy)
385386 let cn = ((ci - cv) - cw)
386- let cm = if ((cn == 0))
387- then 0
388- else (ch - cy)
389387 [IntegerEntry(ao(ap), cm), IntegerEntry(aq(cg), cn), ScriptTransfer(cq, cw, bn(cg))]
390388 }
391389 else nil
667665 func eM () = valueOrElse(getBoolean(bd, aH(toString(this))), false)
668666
669667
670-func eN (eO,ez) = if (if ((ez == f))
671- then true
672- else (ez >= eO))
668+func eN (eO,ez) = if ((ez >= eO))
673669 then true
674670 else ba(makeString(["updated KLp lower than current KLp", toString(eO), toString(ez)], " "))
675671
732728 let fg = value(fb.payments[1])
733729 let fh = dN(toBase58String(fb.transactionId), dO, ff.amount, ff.assetId, fg.amount, fg.assetId, toString(fb.caller), false, dU)
734730 let dy = parseIntValue(fh._8)
735- if (if (if (bi())
731+ if (if (if (if (bi())
736732 then true
737733 else (dy == l))
734+ then true
735+ else (dy == m))
738736 then true
739737 else (dy == n))
740738 then throw(("Put operation is blocked by admin. Status = " + toString(dy)))
11351133 then bg
11361134 else throw(($getType(bg) + " couldn't be cast to Boolean"))
11371135 }
1138- let hb = if (if (if (bi())
1136+ let hb = if (if (if (if (bi())
11391137 then true
11401138 else (bv == l))
1139+ then true
1140+ else (bv == m))
11411141 then true
11421142 else (bv == n))
11431143 then true
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = 8
55
66 let b = 100000000
77
88 let c = toBigInt(100000000)
99
1010 let d = toBigInt(1000000000000000000)
1111
1212 let e = toBigInt(0)
1313
1414 let f = toBigInt(0)
1515
1616 let g = toBigInt(1)
1717
1818 let h = toBigInt(2)
1919
2020 let i = "WAVES"
2121
2222 let j = "__"
2323
2424 let k = 1
2525
2626 let l = 2
2727
2828 let m = 3
2929
3030 let n = 4
3131
3232 let o = 1
3333
3434 let p = 2
3535
3636 let q = 3
3737
3838 let r = 4
3939
4040 let s = 5
4141
4242 let t = 6
4343
4444 let u = 7
4545
4646 let v = 8
4747
4848 let w = 9
4949
5050 let x = 10
5151
5252 let y = 1
5353
5454 let z = 2
5555
5656 let A = 3
5757
5858 let B = 1
5959
6060 let C = 7
6161
6262 func D (E,F) = fraction(toBigInt(E), d, toBigInt(F))
6363
6464
6565 func G (E,F) = fraction(E, d, F)
6666
6767
6868 func H (I,J) = toInt(fraction(I, toBigInt(J), d))
6969
7070
7171 func K (I,J,L) = toInt(fraction(I, toBigInt(J), d, L))
7272
7373
7474 func M (N,O,P) = fraction(N, O, P)
7575
7676
7777 func Q (I) = if ((0 > I))
7878 then -(I)
7979 else I
8080
8181
8282 func R (I) = if ((e > I))
8383 then -(I)
8484 else I
8585
8686
8787 func S () = "%s__swapContract"
8888
8989
9090 func T () = "%s__factoryContract"
9191
9292
9393 func U () = "%s__managerPublicKey"
9494
9595
9696 func V () = "%s__managerVaultAddress"
9797
9898
9999 func W () = "%s%s__price__last"
100100
101101
102102 func X (Y,Z) = makeString(["%s%s%d%d__price__history", toString(Y), toString(Z)], j)
103103
104104
105105 func aa (ab,ac) = ((("%s%s%s__P__" + ab) + "__") + ac)
106106
107107
108108 func ad (ab,ac) = ((("%s%s%s__G__" + ab) + "__") + ac)
109109
110110
111111 func ae () = "%s__amountAsset"
112112
113113
114114 func af () = "%s__priceAsset"
115115
116116
117117 let ag = "%s__fee"
118118
119119 let ah = fraction(10, b, 10000)
120120
121121 let ai = valueOrElse(getInteger(this, ag), ah)
122122
123123 let aj = makeString(["%s", "kLp"], j)
124124
125125 let ak = makeString(["%s", "kLpRefreshedHeight"], j)
126126
127127 let al = makeString(["%s", "refreshKLpDelay"], j)
128128
129129 let am = 30
130130
131131 let an = valueOrElse(getInteger(this, al), am)
132132
133133 func ao (ap) = makeString(["%s%s", "stakedBalance", ap], j)
134134
135135
136136 func aq (ap) = makeString(["%s%s", "shareAssetBalance", ap], j)
137137
138138
139139 func ar (ap) = valueOrElse(getInteger(this, ao(ap)), 0)
140140
141141
142142 func as (ap) = valueOrElse(getInteger(this, aq(ap)), 0)
143143
144144
145145 func at () = "%s__factoryConfig"
146146
147147
148148 func au () = "%s%s__matcher__publicKey"
149149
150150
151151 func av (aw) = (("%s%s%s__" + aw) + "__mappings__poolContract2LpAsset")
152152
153153
154154 func ax (ay,az) = (((("%d%d%s__" + ay) + "__") + az) + "__config")
155155
156156
157157 func aA (aB) = ("%s%s%s__mappings__baseAsset2internalId__" + aB)
158158
159159
160160 func aC () = "%s__shutdown"
161161
162162
163163 func aD (aE) = ("%s%s__poolWeight__" + aE)
164164
165165
166166 func aF () = "%s__allowedLpScriptHash"
167167
168168
169169 let aG = "%s__feeCollectorAddress"
170170
171171 func aH (aI) = ("%s%s__skipOrderValidation__" + aI)
172172
173173
174174 func aJ (aK,aL,aM,aN) = throw((((((((("order validation failed: orderValid=" + toString(aK)) + " (") + aL) + ")") + " senderValid=") + toString(aM)) + " matcherValid=") + toString(aN)))
175175
176176
177177 func aO (aP) = {
178178 let aQ = addressFromString(aP)
179179 if ($isInstanceOf(aQ, "Address"))
180180 then {
181181 let aR = aQ
182182 aR
183183 }
184184 else this
185185 }
186186
187187
188188 func aS () = {
189189 let aT = {
190190 let aQ = getString(T())
191191 if ($isInstanceOf(aQ, "String"))
192192 then {
193193 let aU = aQ
194194 aO(aU)
195195 }
196196 else this
197197 }
198198 let aQ = getString(aT, V())
199199 if ($isInstanceOf(aQ, "String"))
200200 then {
201201 let aV = aQ
202202 aO(aV)
203203 }
204204 else this
205205 }
206206
207207
208208 func aW (aX,aY) = valueOrErrorMessage(getString(aX, aY), makeString(["mandatory ", toString(aX), ".", aY, " is not defined"], ""))
209209
210210
211211 func aZ (aX,aY) = valueOrErrorMessage(getInteger(aX, aY), makeString(["mandatory ", toString(aX), ".", aY, " is not defined"], ""))
212212
213213
214214 func ba (bb) = throw(makeString(["lp.ride:", bb], " "))
215215
216216
217217 func bc (bb) = makeString(["lp.ride:", bb], " ")
218218
219219
220220 let bd = addressFromStringValue(aW(this, T()))
221221
222222 let be = addressFromStringValue(aW(bd, aG))
223223
224224 let bf = {
225225 let bg = invoke(bd, "getInFeeREADONLY", [toString(this)], nil)
226226 if ($isInstanceOf(bg, "Int"))
227227 then bg
228228 else throw(($getType(bg) + " couldn't be cast to Int"))
229229 }
230230
231231 let bh = {
232232 let bg = invoke(bd, "getOutFeeREADONLY", [toString(this)], nil)
233233 if ($isInstanceOf(bg, "Int"))
234234 then bg
235235 else throw(($getType(bg) + " couldn't be cast to Int"))
236236 }
237237
238238 func bi () = valueOrElse(getBoolean(bd, aC()), false)
239239
240240
241241 func bj () = fromBase58String(aW(bd, au()))
242242
243243
244244 func bk () = {
245245 let bl = aW(this, ae())
246246 let bm = aW(this, af())
247247 let az = aZ(bd, aA(bm))
248248 let ay = aZ(bd, aA(bl))
249249 split(aW(bd, ax(toString(ay), toString(az))), j)
250250 }
251251
252252
253253 func bn (bo) = if ((bo == i))
254254 then unit
255255 else fromBase58String(bo)
256256
257257
258258 func bp (bo) = if ((bo == unit))
259259 then i
260260 else toBase58String(value(bo))
261261
262262
263263 func bq (br) = $Tuple7(addressFromStringValue(br[o]), parseIntValue(br[p]), fromBase58String(br[q]), bn(br[r]), bn(br[s]), parseIntValue(br[t]), parseIntValue(br[u]))
264264
265265
266266 let bs = bq(bk())
267267
268268 let bt = bs
269269
270270 let bu = bt._1
271271
272272 let bv = bt._2
273273
274274 let bw = bt._3
275275
276276 let bx = bt._4
277277
278278 let by = bt._5
279279
280280 let bz = bt._6
281281
282282 let bA = bt._7
283283
284284 func bB () = split(aW(bd, at()), j)
285285
286286
287287 let bC = valueOrErrorMessage(addressFromString(bB()[B]), "incorrect staking address")
288288
289289 let bD = valueOrErrorMessage(addressFromString(bB()[C]), "incorrect staking address")
290290
291291 func bE (bF,bG,bH,bI,bJ,bK,bL,bM,bN,bO) = makeString(["%d%d%d%d%d%d%d%d%d%d", toString(bF), toString(bG), toString(bH), toString(bI), toString(bJ), toString(bK), toString(bL), toString(bM), toString(bN), toString(bO)], j)
292292
293293
294294 func bP (bQ,bR,bS,bI,bL,bM) = makeString(["%d%d%d%d%d%d", toString(bQ), toString(bR), toString(bS), toString(bI), toString(bL), toString(bM)], j)
295295
296296
297297 func bT (ap) = {
298298 let bU = if ((ap == "WAVES"))
299299 then wavesBalance(this).available
300300 else assetBalance(this, fromBase58String(ap))
301301 let bV = ((bU + ar(ap)) - as(ap))
302302 max([0, bV])
303303 }
304304
305305
306306 func bW (bX,bY) = fraction(bX, d, bY)
307307
308308
309309 func bZ (bX,bY,L) = fraction(bX, d, bY, L)
310310
311311
312312 func ca (cb) = {
313313 let cc = invoke(cb, "getRate", nil, nil)
314314 if ((cc == cc))
315315 then {
316316 let aQ = cc
317317 if ($isInstanceOf(aQ, "Int"))
318318 then {
319319 let cd = aQ
320320 cd
321321 }
322322 else ba("proxy.getRate() unexpected value")
323323 }
324324 else throw("Strict value is not equal to itself.")
325325 }
326326
327327
328328 func ce (ap,cf,cg,cb) = {
329329 let ch = ar(ap)
330330 if ((ch == ch))
331331 then {
332332 let ci = as(cg)
333333 if ((ci == ci))
334334 then {
335335 let cj = bn(ap)
336336 if ((cf > 0))
337337 then {
338338 let ck = invoke(cb, "deposit", nil, [AttachedPayment(cj, cf)])
339339 if ((ck == ck))
340340 then {
341341 let aQ = ck
342342 if ($isInstanceOf(aQ, "Int"))
343343 then {
344344 let cl = aQ
345345 let cm = (ch + cf)
346346 let cn = (ci + cl)
347347 [IntegerEntry(ao(ap), cm), IntegerEntry(aq(cg), cn)]
348348 }
349349 else nil
350350 }
351351 else throw("Strict value is not equal to itself.")
352352 }
353353 else nil
354354 }
355355 else throw("Strict value is not equal to itself.")
356356 }
357357 else throw("Strict value is not equal to itself.")
358358 }
359359
360360
361361 func co (ap,cf,cg,cb,cp,cq) = {
362362 let ch = ar(ap)
363363 if ((ch == ch))
364364 then {
365365 let ci = as(cg)
366366 if ((ci == ci))
367367 then {
368368 let cr = ca(cb)
369369 if ((cr == cr))
370370 then {
371371 let cs = fraction(cp, ch, ci)
372372 let ct = bn(cg)
373373 let cu = fraction(cp, cf, cs)
374374 let cv = fraction(cp, cf, cr)
375375 let cw = max([0, (cu - cv)])
376376 if ((cv > 0))
377377 then {
378378 let cx = invoke(cb, "withdraw", nil, [AttachedPayment(ct, cv)])
379379 if ((cx == cx))
380380 then {
381381 let aQ = cx
382382 if ($isInstanceOf(aQ, "Int"))
383383 then {
384384 let cy = aQ
385+ let cm = (ch - cy)
385386 let cn = ((ci - cv) - cw)
386- let cm = if ((cn == 0))
387- then 0
388- else (ch - cy)
389387 [IntegerEntry(ao(ap), cm), IntegerEntry(aq(cg), cn), ScriptTransfer(cq, cw, bn(cg))]
390388 }
391389 else nil
392390 }
393391 else throw("Strict value is not equal to itself.")
394392 }
395393 else nil
396394 }
397395 else throw("Strict value is not equal to itself.")
398396 }
399397 else throw("Strict value is not equal to itself.")
400398 }
401399 else throw("Strict value is not equal to itself.")
402400 }
403401
404402
405403 func cz (ap) = {
406404 let aQ = invoke(bd, "getPoolLeaseConfigREADONLY", [toString(this), ap], nil)
407405 if ($isInstanceOf(aQ, "(Boolean, Int, Int, String, String, Int, String)"))
408406 then {
409407 let aR = aQ
410408 aR
411409 }
412410 else ba((("[" + ap) + "] getLeaseProxyConfig() error"))
413411 }
414412
415413
416414 func cA (cB,ap,cg,cC,cb,cp,cq) = {
417415 let ch = ar(ap)
418416 if ((ch == ch))
419417 then {
420418 let ci = as(cg)
421419 if ((ci == ci))
422420 then {
423421 let cD = max([0, (bT(ap) - cC)])
424422 let cE = fraction(cB, cD, 100)
425423 let cF = (ch - cE)
426424 if ((cF == 0))
427425 then nil
428426 else if ((0 > cF))
429427 then {
430428 let cG = -(cF)
431429 ce(ap, cG, cg, cb)
432430 }
433431 else {
434432 let cH = cF
435433 co(ap, cH, cg, cb, cp, cq)
436434 }
437435 }
438436 else throw("Strict value is not equal to itself.")
439437 }
440438 else throw("Strict value is not equal to itself.")
441439 }
442440
443441
444442 func cI (ap) = {
445443 let cJ = cz(ap)
446444 let cK = cJ._1
447445 let cL = cJ._2
448446 let cC = cJ._3
449447 let cM = cJ._4
450448 let cN = cJ._5
451449 let cp = cJ._6
452450 let cO = cJ._7
453451 if (cK)
454452 then cA(cL, ap, cN, cC, addressFromStringValue(cM), cp, addressFromStringValue(cO))
455453 else nil
456454 }
457455
458456
459457 func cP (ap,cQ) = {
460458 let cR = cz(ap)
461459 let cK = cR._1
462460 let cL = cR._2
463461 let cC = cR._3
464462 let cM = cR._4
465463 let cN = cR._5
466464 let cp = cR._6
467465 let cO = cR._7
468466 if (cK)
469467 then {
470468 let cS = max([0, ((bT(ap) - cQ) - cC)])
471469 if ((cS == cS))
472470 then {
473471 let cm = fraction(cL, cS, 100)
474472 if ((cm == cm))
475473 then {
476474 let cT = (ar(ap) - cm)
477475 if ((cT == cT))
478476 then if ((0 > cT))
479477 then ce(ap, -(cT), cN, addressFromStringValue(cM))
480478 else co(ap, cT, cN, addressFromStringValue(cM), cp, addressFromStringValue(cO))
481479 else throw("Strict value is not equal to itself.")
482480 }
483481 else throw("Strict value is not equal to itself.")
484482 }
485483 else throw("Strict value is not equal to itself.")
486484 }
487485 else nil
488486 }
489487
490488
491489 func cU (cV,cW) = {
492490 let cX = cP(aW(this, ae()), cV)
493491 let cY = cP(aW(this, af()), cW)
494492 (cX ++ cY)
495493 }
496494
497495
498496 func cZ (da,db,dc,dd) = {
499497 let de = D(dc, da)
500498 let df = D(dd, db)
501499 bW(df, de)
502500 }
503501
504502
505503 func dg (dc,dd,dh) = {
506504 let di = bk()
507505 let dj = parseIntValue(di[t])
508506 let dk = parseIntValue(di[u])
509507 let dl = cZ(dj, dk, dc, dd)
510508 let bY = D(dc, dj)
511509 let bX = D(dd, dk)
512510 let dm = D(dh, b)
513511 let dn = bW(bY, dm)
514512 let do = bW(bX, dm)
515513 [dl, dn, do]
516514 }
517515
518516
519517 func dp (dc,dd,dh) = {
520518 let dq = dg(dc, dd, dh)
521519 [H(dq[0], b), H(dq[1], b), H(dq[2], b)]
522520 }
523521
524522
525523 func dr (ds,dt,du,ab) = {
526524 let di = bk()
527525 let dv = di[q]
528526 let dw = di[r]
529527 let dx = di[s]
530528 let da = parseIntValue(di[t])
531529 let db = parseIntValue(di[u])
532530 let dy = di[p]
533531 let dz = valueOrErrorMessage(assetInfo(fromBase58String(dv)), (("Asset " + dv) + " doesn't exist")).quantity
534532 if ((dv != dt))
535533 then throw("Invalid asset passed.")
536534 else {
537535 let dA = bT(dw)
538536 let dB = D(dA, da)
539537 let dC = bT(dx)
540538 let dD = D(dC, db)
541539 let dE = bW(dD, dB)
542540 let dF = H(dE, b)
543541 let dG = D(du, b)
544542 let dH = D(dz, b)
545543 let dI = fraction(dB, dG, dH)
546544 let dJ = fraction(dD, dG, dH)
547545 let dK = K(dI, da, FLOOR)
548546 let dL = K(dJ, db, FLOOR)
549547 let dM = if ((ds == ""))
550548 then nil
551549 else [ScriptTransfer(ab, dK, if ((dw == "WAVES"))
552550 then unit
553551 else fromBase58String(dw)), ScriptTransfer(ab, dL, if ((dx == "WAVES"))
554552 then unit
555553 else fromBase58String(dx)), StringEntry(ad(toString(ab), ds), bP(dK, dL, du, dF, height, lastBlock.timestamp)), IntegerEntry(W(), dF), IntegerEntry(X(height, lastBlock.timestamp), dF)]
556554 $Tuple10(dK, dL, dw, dx, dA, dC, dz, dE, dy, dM)
557555 }
558556 }
559557
560558
561559 func dN (ds,dO,dP,dQ,dR,dS,ab,dT,dU) = {
562560 let di = bk()
563561 let dv = fromBase58String(di[q])
564562 let dV = di[r]
565563 let dW = di[s]
566564 let dX = di[v]
567565 let dY = di[w]
568566 let dj = parseIntValue(di[t])
569567 let dk = parseIntValue(di[u])
570568 let dy = di[p]
571569 let dz = valueOrErrorMessage(assetInfo(dv), (("Asset " + toBase58String(dv)) + " doesn't exist")).quantity
572570 let dZ = toBase58String(valueOrElse(dQ, fromBase58String("WAVES")))
573571 let ea = toBase58String(valueOrElse(dS, fromBase58String("WAVES")))
574572 if (if ((dV != dZ))
575573 then true
576574 else (dW != ea))
577575 then throw("Invalid amt or price asset passed.")
578576 else {
579577 let dA = if (dT)
580578 then bT(dV)
581579 else (bT(dV) - dP)
582580 let dC = if (dT)
583581 then bT(dW)
584582 else (bT(dW) - dR)
585583 let eb = D(dP, dj)
586584 let ec = D(dR, dk)
587585 let ed = bW(ec, eb)
588586 let dB = D(dA, dj)
589587 let dD = D(dC, dk)
590588 let ee = if ((dz == 0))
591589 then {
592590 let dE = e
593591 let ef = e
594592 let dm = pow((eb * ec), 0, toBigInt(5), 1, 0, DOWN)
595593 $Tuple5(H(dm, b), H(eb, dj), H(ec, dk), bW((dD + ec), (dB + eb)), ef)
596594 }
597595 else {
598596 let dE = bW(dD, dB)
599597 let ef = fraction(R((dE - ed)), d, dE)
600598 let eg = D(dO, b)
601599 if (if ((dE != e))
602600 then (ef > eg)
603601 else false)
604602 then throw(((("Price slippage " + toString(ef)) + " exceeded the passed limit of ") + toString(eg)))
605603 else {
606604 let dH = D(dz, b)
607605 let eh = fraction(eb, bZ(dD, dB, CEILING), d, CEILING)
608606 let ei = fraction(ec, d, bZ(dD, dB, FLOOR), CEILING)
609607 let ej = if ((eh > ec))
610608 then $Tuple2(ei, ec)
611609 else $Tuple2(eb, eh)
612610 let ek = ej._1
613611 let el = ej._2
614612 let dm = fraction(dH, el, dD, FLOOR)
615613 $Tuple5(K(dm, b, FLOOR), K(ek, dj, CEILING), K(el, dk, CEILING), dE, ef)
616614 }
617615 }
618616 let em = ee._1
619617 let en = ee._2
620618 let eo = ee._3
621619 let dF = H(ee._4, b)
622620 let ep = H(ee._5, b)
623621 if ((0 >= em))
624622 then throw("Invalid calculations. LP calculated is less than zero.")
625623 else {
626624 let eq = if (!(dU))
627625 then 0
628626 else em
629627 let er = (dP - en)
630628 let es = (dR - eo)
631629 let et = [IntegerEntry(W(), dF), IntegerEntry(X(height, lastBlock.timestamp), dF), StringEntry(aa(ab, ds), bE(en, eo, eq, dF, dO, ep, height, lastBlock.timestamp, er, es))]
632630 $Tuple13(em, eq, dF, dA, dC, dz, dv, dy, et, er, es, dQ, dS)
633631 }
634632 }
635633 }
636634
637635
638636 func eu (ev,ew,dz) = {
639637 let ex = G(ev, toBigInt(bz))
640638 let ey = G(ew, toBigInt(bA))
641639 let ez = fraction(pow((ex * ey), 0, toBigInt(5), 1, 18, DOWN), g, dz)
642640 if ((dz == f))
643641 then f
644642 else ez
645643 }
646644
647645
648646 func eA (eB,eC,eD) = {
649647 let eE = (toBigInt(bT(bp(bx))) - eB)
650648 let eF = (toBigInt(bT(bp(by))) - eC)
651649 let eG = (toBigInt(value(assetInfo(bw)).quantity) - eD)
652650 let eH = eu(eE, eF, eG)
653651 eH
654652 }
655653
656654
657655 func eI (eJ,eK,eD) = {
658656 let eE = (bT(bp(bx)) + eJ)
659657 let eF = (bT(bp(by)) + eK)
660658 let eG = (value(assetInfo(bw)).quantity + eD)
661659 let ez = eu(toBigInt(eE), toBigInt(eF), toBigInt(eG))
662660 let eL = [IntegerEntry(ak, height), StringEntry(aj, toString(ez))]
663661 $Tuple2(eL, ez)
664662 }
665663
666664
667665 func eM () = valueOrElse(getBoolean(bd, aH(toString(this))), false)
668666
669667
670-func eN (eO,ez) = if (if ((ez == f))
671- then true
672- else (ez >= eO))
668+func eN (eO,ez) = if ((ez >= eO))
673669 then true
674670 else ba(makeString(["updated KLp lower than current KLp", toString(eO), toString(ez)], " "))
675671
676672
677673 func eP (eQ) = {
678674 let eE = bT(bp(bx))
679675 let eF = bT(bp(by))
680676 let eR = eQ.amount
681677 let eS = fraction(eQ.amount, eQ.price, b, FLOOR)
682678 let eT = if ((eQ.orderType == Buy))
683679 then $Tuple2(eR, -(eS))
684680 else $Tuple2(-(eR), eS)
685681 let eJ = eT._1
686682 let eK = eT._2
687683 if (if (if (bi())
688684 then true
689685 else (bv == m))
690686 then true
691687 else (bv == n))
692688 then throw("Exchange operations disabled")
693689 else if (if ((eQ.assetPair.amountAsset != bx))
694690 then true
695691 else (eQ.assetPair.priceAsset != by))
696692 then throw("Wrong order assets.")
697693 else {
698694 let eU = valueOrErrorMessage(parseBigInt(valueOrElse(getString(this, aj), "0")), bc("invalid kLp"))
699695 let eV = eI(eJ, eK, 0)
700696 let eW = eV._1
701697 let eX = eV._2
702698 let eY = (eX >= eU)
703699 let eZ = makeString(["kLp=", toString(eU), " kLpNew=", toString(eX), " amountAssetBalance=", toString(eE), " priceAssetBalance=", toString(eF), " amountAssetBalanceDelta=", toString(eJ), " priceAssetBalanceDelta=", toString(eK), " height=", toString(height)], "")
704700 $Tuple2(eY, eZ)
705701 }
706702 }
707703
708704
709705 func fa (fb) = if ((size(fb.payments) != 1))
710706 then throw("exactly 1 payment is expected")
711707 else {
712708 let fc = value(fb.payments[0])
713709 let dt = value(fc.assetId)
714710 let fd = fc.amount
715711 let ee = dr(toBase58String(fb.transactionId), toBase58String(dt), fd, fb.caller)
716712 let dK = ee._1
717713 let dL = ee._2
718714 let dy = parseIntValue(ee._9)
719715 let dM = ee._10
720716 if (if (bi())
721717 then true
722718 else (dy == n))
723719 then throw(("Get operation is blocked by admin. Status = " + toString(dy)))
724720 else $Tuple5(dK, dL, fd, dt, dM)
725721 }
726722
727723
728724 func fe (fb,dO,dU) = if ((size(fb.payments) != 2))
729725 then throw("exactly 2 payments are expected")
730726 else {
731727 let ff = value(fb.payments[0])
732728 let fg = value(fb.payments[1])
733729 let fh = dN(toBase58String(fb.transactionId), dO, ff.amount, ff.assetId, fg.amount, fg.assetId, toString(fb.caller), false, dU)
734730 let dy = parseIntValue(fh._8)
735- if (if (if (bi())
731+ if (if (if (if (bi())
736732 then true
737733 else (dy == l))
734+ then true
735+ else (dy == m))
738736 then true
739737 else (dy == n))
740738 then throw(("Put operation is blocked by admin. Status = " + toString(dy)))
741739 else fh
742740 }
743741
744742
745743 func fi (cf) = {
746744 let fj = invoke(bd, "emit", [cf], nil)
747745 if ((fj == fj))
748746 then {
749747 let fk = {
750748 let aQ = fj
751749 if ($isInstanceOf(aQ, "Address"))
752750 then {
753751 let fl = aQ
754752 invoke(fl, "emit", [cf], nil)
755753 }
756754 else unit
757755 }
758756 if ((fk == fk))
759757 then cf
760758 else throw("Strict value is not equal to itself.")
761759 }
762760 else throw("Strict value is not equal to itself.")
763761 }
764762
765763
766764 func fm (cf,ai) = {
767765 let fn = if ((ai == 0))
768766 then 0
769767 else fraction(cf, ai, b)
770768 $Tuple2((cf - fn), fn)
771769 }
772770
773771
774772 func fo (fp,fq,ab,ac) = {
775773 let fr = (ac == unit)
776774 let fs = bT(bp(bx))
777775 let ft = bT(bp(by))
778776 let fu = if ((fq == bx))
779777 then true
780778 else if ((fq == by))
781779 then false
782780 else ba("invalid asset")
783781 let fv = if (fr)
784782 then $Tuple2(fs, ft)
785783 else if (fu)
786784 then $Tuple2((fs - fp), ft)
787785 else $Tuple2(fs, (ft - fp))
788786 let fw = fv._1
789787 let fx = fv._2
790788 let fy = if (fu)
791789 then $Tuple2(fp, 0)
792790 else $Tuple2(0, fp)
793791 let fz = fy._1
794792 let fA = fy._2
795793 let eR = fm(fz, bf)._1
796794 let eS = fm(fA, bf)._1
797795 let fB = fm(fp, bf)
798796 let fC = fB._1
799797 let fn = fB._2
800798 let fD = (fw + eR)
801799 let fE = (fx + eS)
802800 let fF = bW(D(fE, bA), D(fD, bz))
803801 let fG = H(fF, b)
804802 let fH = if (fu)
805803 then fw
806804 else fx
807805 let fI = toBigInt(fH)
808806 let fJ = toBigInt(valueOrErrorMessage(assetInfo(bw), (("asset " + toBase58String(bw)) + " doesn't exist")).quantity)
809807 let fK = if ((fJ > f))
810808 then true
811809 else ba("initial deposit requires all coins")
812810 if ((fK == fK))
813811 then {
814812 let fL = toBigInt(fC)
815813 let fM = max([0, toInt(((fJ * (sqrtBigInt((d + ((fL * d) / fI)), 18, 18, DOWN) - d)) / d))])
816814 let et = if (fr)
817815 then nil
818816 else [IntegerEntry(W(), fG), IntegerEntry(X(height, lastBlock.timestamp), fG), StringEntry(aa(toString(value(ab)), toBase58String(value(ac))), bE(fz, fA, fM, fG, 0, 0, height, lastBlock.timestamp, 0, 0))]
819817 let fN = bW(D(fx, bA), D(fw, bz))
820818 let fO = H(fN, b)
821819 let fP = {
822820 let fQ = if (fu)
823821 then $Tuple2(fz, fw)
824822 else $Tuple2(fA, fx)
825823 let cf = fQ._1
826824 let fR = fQ._2
827825 let fS = toInt(fraction(fJ, toBigInt((cf / 2)), toBigInt(fR)))
828826 fraction((fM - fS), b, fS)
829827 }
830828 $Tuple5(fM, et, fn, fP, fu)
831829 }
832830 else throw("Strict value is not equal to itself.")
833831 }
834832
835833
836834 func fT (fU,fC,fq,ab,ac) = {
837835 let fr = (ac == unit)
838836 let di = bk()
839837 let dj = parseIntValue(di[t])
840838 let dk = parseIntValue(di[u])
841839 let fV = [if ((fq == bw))
842840 then true
843841 else ba("invalid lp asset")]
844842 if ((fV == fV))
845843 then {
846844 let fW = if ((fU == bx))
847845 then true
848846 else if ((fU == by))
849847 then false
850848 else ba("invalid asset")
851849 let fX = if (fW)
852850 then toBigInt(bT(bp(bx)))
853851 else toBigInt(bT(bp(by)))
854852 let fY = if (fW)
855853 then dj
856854 else dk
857855 let fZ = bT(bp(bx))
858856 let ga = bT(bp(by))
859857 let gb = if (fW)
860858 then fZ
861859 else ga
862860 let gc = toBigInt(gb)
863861 let fJ = toBigInt(valueOrErrorMessage(assetInfo(bw), (("asset " + toBase58String(bw)) + " doesn't exist")).quantity)
864862 let gd = toBigInt(fC)
865863 let ge = max([0, toInt(((fX * (d - pow((d - ((gd * d) / fJ)), 18, h, 0, 18, DOWN))) / d))])
866864 let gf = fm(ge, bh)
867865 let gg = gf._1
868866 let fn = gf._2
869867 let gh = if (fW)
870868 then $Tuple4(gg, 0, (fZ - ge), ga)
871869 else $Tuple4(0, gg, fZ, (ga - ge))
872870 let gi = gh._1
873871 let gj = gh._2
874872 let gk = gh._3
875873 let gl = gh._4
876874 let fF = bW(D(gl, bA), D(gk, bz))
877875 let fG = H(fF, b)
878876 let et = if (fr)
879877 then nil
880878 else [StringEntry(ad(toString(value(ab)), toBase58String(value(ac))), bP(gi, gj, fC, fG, height, lastBlock.timestamp)), IntegerEntry(W(), fG), IntegerEntry(X(height, lastBlock.timestamp), fG)]
881879 let fN = bW(D(ga, bA), D(fZ, bz))
882880 let fO = H(fN, b)
883881 let fP = {
884882 let gm = (toInt(fraction(fX, gd, fJ)) * 2)
885883 fraction((gg - gm), b, gm)
886884 }
887885 $Tuple5(gg, et, fn, fP, fW)
888886 }
889887 else throw("Strict value is not equal to itself.")
890888 }
891889
892890
893891 func gn () = {
894892 let go = aS()
895893 let aQ = getString(go, U())
896894 if ($isInstanceOf(aQ, "String"))
897895 then {
898896 let aV = aQ
899897 fromBase58String(aV)
900898 }
901899 else if ($isInstanceOf(aQ, "Unit"))
902900 then unit
903901 else throw("Match error")
904902 }
905903
906904
907905 func gp (fb) = {
908906 let aQ = gn()
909907 if ($isInstanceOf(aQ, "ByteVector"))
910908 then {
911909 let gq = aQ
912910 (fb.callerPublicKey == gq)
913911 }
914912 else if ($isInstanceOf(aQ, "Unit"))
915913 then (fb.caller == this)
916914 else throw("Match error")
917915 }
918916
919917
920918 func gr (fb) = {
921919 let gs = throw("Permission denied")
922920 let aQ = gn()
923921 if ($isInstanceOf(aQ, "ByteVector"))
924922 then {
925923 let gq = aQ
926924 if ((fb.callerPublicKey == gq))
927925 then true
928926 else gs
929927 }
930928 else if ($isInstanceOf(aQ, "Unit"))
931929 then if ((fb.caller == this))
932930 then true
933931 else gs
934932 else throw("Match error")
935933 }
936934
937935
938936 @Callable(fb)
939937 func rebalance () = (cI(aW(this, ae())) ++ cI(aW(this, af())))
940938
941939
942940
943941 @Callable(fb)
944942 func calculateAmountOutForSwapREADONLY (gt,gu,gv) = {
945943 let gw = if ((gu == false))
946944 then {
947945 let gx = aW(this, af())
948946 let gy = aW(this, ae())
949947 $Tuple2(gx, gy)
950948 }
951949 else {
952950 let gx = aW(this, ae())
953951 let gy = aW(this, af())
954952 $Tuple2(gx, gy)
955953 }
956954 let gx = gw._1
957955 let gy = gw._2
958956 let gz = bT(gy)
959957 let gA = bT(gx)
960958 let gB = fraction(gA, gt, (gz + gt))
961959 let gC = (toBigInt(gz) * toBigInt(gA))
962960 let gD = (((toBigInt(bT(gy)) + toBigInt(gt)) + toBigInt(gv)) * (toBigInt(bT(gx)) - toBigInt(gB)))
963961 let gE = if ((gD >= gC))
964962 then true
965963 else throw("new K is fewer error")
966964 if ((gE == gE))
967965 then $Tuple2(nil, gB)
968966 else throw("Strict value is not equal to itself.")
969967 }
970968
971969
972970
973971 @Callable(fb)
974972 func calculateAmountOutForSwapAndSendTokens (gt,gu,gF,gG,gv) = {
975973 let gH = {
976974 let bg = invoke(bd, "getSwapContractREADONLY", nil, nil)
977975 if ($isInstanceOf(bg, "String"))
978976 then bg
979977 else throw(($getType(bg) + " couldn't be cast to String"))
980978 }
981979 let fV = [if ((value(fb.payments[0]).amount >= gt))
982980 then true
983981 else ba("Wrong amount"), if ((fb.caller == addressFromStringValue(gH)))
984982 then true
985983 else ba("Permission denied")]
986984 if ((fV == fV))
987985 then {
988986 let fc = value(fb.payments[0])
989987 let gy = bp(fc.assetId)
990988 let gx = if ((gu == false))
991989 then aW(this, af())
992990 else aW(this, ae())
993991 let gz = ((bT(gy) - value(fb.payments[0]).amount) - gv)
994992 let gA = bT(gx)
995993 let gB = fraction(gA, gt, (gz + gt))
996994 let gC = (toBigInt(gz) * toBigInt(gA))
997995 let gD = ((toBigInt(bT(gy)) + toBigInt(gv)) * (toBigInt(bT(gx)) - toBigInt(gB)))
998996 let gE = if ((gD >= gC))
999997 then true
1000998 else throw("new K is fewer error")
1001999 if ((gE == gE))
10021000 then {
10031001 let gI = if ((gB >= gF))
10041002 then true
10051003 else throw("Exchange result is fewer coins than expected")
10061004 if ((gI == gI))
10071005 then {
10081006 let gJ = cI(gy)
10091007 if ((gJ == gJ))
10101008 then {
10111009 let gK = cP(gx, gB)
10121010 if ((gK == gK))
10131011 then $Tuple2(((gK ++ gJ) ++ [ScriptTransfer(addressFromStringValue(gG), gB, bn(gx))]), gB)
10141012 else throw("Strict value is not equal to itself.")
10151013 }
10161014 else throw("Strict value is not equal to itself.")
10171015 }
10181016 else throw("Strict value is not equal to itself.")
10191017 }
10201018 else throw("Strict value is not equal to itself.")
10211019 }
10221020 else throw("Strict value is not equal to itself.")
10231021 }
10241022
10251023
10261024
10271025 @Callable(fb)
10281026 func put (dO,gL) = if ((0 > dO))
10291027 then throw("Invalid slippageTolerance passed")
10301028 else {
10311029 let fh = fe(fb, dO, true)
10321030 let eq = fh._2
10331031 let dv = fh._7
10341032 let dM = fh._9
10351033 let er = fh._10
10361034 let es = fh._11
10371035 let gM = fh._12
10381036 let gN = fh._13
10391037 let ff = toBigInt(value(fb.payments[0]).amount)
10401038 let fg = toBigInt(value(fb.payments[1]).amount)
10411039 let eH = eA(ff, fg, toBigInt(0))
10421040 if ((eH == eH))
10431041 then {
10441042 let fj = invoke(bd, "emit", [eq], nil)
10451043 if ((fj == fj))
10461044 then {
10471045 let fk = {
10481046 let aQ = fj
10491047 if ($isInstanceOf(aQ, "Address"))
10501048 then {
10511049 let fl = aQ
10521050 invoke(fl, "emit", [eq], nil)
10531051 }
10541052 else unit
10551053 }
10561054 if ((fk == fk))
10571055 then {
10581056 let gO = if ((er > 0))
10591057 then invoke(bD, "put", nil, [AttachedPayment(gM, er)])
10601058 else nil
10611059 if ((gO == gO))
10621060 then {
10631061 let gP = if ((es > 0))
10641062 then invoke(bD, "put", nil, [AttachedPayment(gN, es)])
10651063 else nil
10661064 if ((gP == gP))
10671065 then {
10681066 let gQ = if (gL)
10691067 then {
10701068 let gR = invoke(bC, "stake", nil, [AttachedPayment(dv, eq)])
10711069 if ((gR == gR))
10721070 then nil
10731071 else throw("Strict value is not equal to itself.")
10741072 }
10751073 else [ScriptTransfer(fb.caller, eq, dv)]
10761074 let gS = eI(0, 0, 0)
10771075 if ((gS == gS))
10781076 then {
10791077 let ez = gS._2
10801078 let gT = gS._1
10811079 let gU = eN(eH, ez)
10821080 if ((gU == gU))
10831081 then {
10841082 let gV = invoke(this, "rebalance", nil, nil)
10851083 if ((gV == gV))
10861084 then ((dM ++ gQ) ++ gT)
10871085 else throw("Strict value is not equal to itself.")
10881086 }
10891087 else throw("Strict value is not equal to itself.")
10901088 }
10911089 else throw("Strict value is not equal to itself.")
10921090 }
10931091 else throw("Strict value is not equal to itself.")
10941092 }
10951093 else throw("Strict value is not equal to itself.")
10961094 }
10971095 else throw("Strict value is not equal to itself.")
10981096 }
10991097 else throw("Strict value is not equal to itself.")
11001098 }
11011099 else throw("Strict value is not equal to itself.")
11021100 }
11031101
11041102
11051103
11061104 @Callable(fb)
11071105 func putForFree (gW) = if ((0 > gW))
11081106 then throw("Invalid value passed")
11091107 else {
11101108 let fh = fe(fb, gW, false)
11111109 let dM = fh._9
11121110 let ff = toBigInt(value(fb.payments[0]).amount)
11131111 let fg = toBigInt(value(fb.payments[1]).amount)
11141112 let eH = eA(ff, fg, toBigInt(0))
11151113 if ((eH == eH))
11161114 then {
11171115 let gX = eI(0, 0, 0)
11181116 let gT = gX._1
11191117 let ez = gX._2
11201118 let gU = eN(eH, ez)
11211119 if ((gU == gU))
11221120 then (dM ++ gT)
11231121 else throw("Strict value is not equal to itself.")
11241122 }
11251123 else throw("Strict value is not equal to itself.")
11261124 }
11271125
11281126
11291127
11301128 @Callable(fb)
11311129 func putOneTkn (gY,gZ) = {
11321130 let ha = {
11331131 let bg = invoke(bd, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
11341132 if ($isInstanceOf(bg, "Boolean"))
11351133 then bg
11361134 else throw(($getType(bg) + " couldn't be cast to Boolean"))
11371135 }
1138- let hb = if (if (if (bi())
1136+ let hb = if (if (if (if (bi())
11391137 then true
11401138 else (bv == l))
1139+ then true
1140+ else (bv == m))
11411141 then true
11421142 else (bv == n))
11431143 then true
11441144 else ha
11451145 let fV = [if (if (!(hb))
11461146 then true
11471147 else gp(fb))
11481148 then true
11491149 else ba("put operation is blocked by admin"), if ((size(fb.payments) == 1))
11501150 then true
11511151 else ba("exactly 1 payment are expected")]
11521152 if ((fV == fV))
11531153 then {
11541154 let hc = fb.payments[0]
11551155 let fq = hc.assetId
11561156 let fp = hc.amount
11571157 let eH = if ((fq == bx))
11581158 then eA(toBigInt(fp), toBigInt(0), toBigInt(0))
11591159 else if ((fq == by))
11601160 then eA(toBigInt(0), toBigInt(fp), toBigInt(0))
11611161 else ba("payment asset is not supported")
11621162 if ((eH == eH))
11631163 then {
11641164 let ab = fb.caller
11651165 let ac = fb.transactionId
11661166 let hd = fo(fp, fq, ab, ac)
11671167 if ((hd == hd))
11681168 then {
11691169 let fu = hd._5
11701170 let he = hd._4
11711171 let fn = hd._3
11721172 let et = hd._2
11731173 let hf = hd._1
11741174 let hg = if (if ((gY > 0))
11751175 then (gY > hf)
11761176 else false)
11771177 then ba(makeString(["amount to receive is less than ", toString(gY)], ""))
11781178 else hf
11791179 let fj = fi(hg)
11801180 if ((fj == fj))
11811181 then {
11821182 let gQ = if (gZ)
11831183 then {
11841184 let hh = invoke(bC, "stake", nil, [AttachedPayment(bw, hg)])
11851185 if ((hh == hh))
11861186 then nil
11871187 else throw("Strict value is not equal to itself.")
11881188 }
11891189 else [ScriptTransfer(fb.caller, hg, bw)]
11901190 let hi = if ((fn > 0))
11911191 then [ScriptTransfer(be, fn, fq)]
11921192 else nil
11931193 let hj = if ((this == be))
11941194 then $Tuple2(0, 0)
11951195 else if (fu)
11961196 then $Tuple2(-(fn), 0)
11971197 else $Tuple2(0, -(fn))
11981198 let eJ = hj._1
11991199 let eK = hj._2
12001200 let hk = eI(eJ, eK, 0)
12011201 let gT = hk._1
12021202 let ez = hk._2
12031203 let eU = value(getString(aj))
12041204 let gU = eN(eH, ez)
12051205 if ((gU == gU))
12061206 then {
12071207 let gV = invoke(this, "rebalance", nil, nil)
12081208 if ((gV == gV))
12091209 then $Tuple2((((et ++ gQ) ++ hi) ++ gT), hg)
12101210 else throw("Strict value is not equal to itself.")
12111211 }
12121212 else throw("Strict value is not equal to itself.")
12131213 }
12141214 else throw("Strict value is not equal to itself.")
12151215 }
12161216 else throw("Strict value is not equal to itself.")
12171217 }
12181218 else throw("Strict value is not equal to itself.")
12191219 }
12201220 else throw("Strict value is not equal to itself.")
12211221 }
12221222
12231223
12241224
12251225 @Callable(fb)
12261226 func putOneTknREADONLY (fq,fp) = {
12271227 let hl = fo(fp, bn(fq), unit, unit)
12281228 let hf = hl._1
12291229 let et = hl._2
12301230 let fn = hl._3
12311231 let he = hl._4
12321232 let fu = hl._5
12331233 $Tuple2(nil, $Tuple3(hf, fn, he))
12341234 }
12351235
12361236
12371237
12381238 @Callable(fb)
12391239 func getOneTkn (hm,gY) = {
12401240 let ha = {
12411241 let bg = invoke(bd, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
12421242 if ($isInstanceOf(bg, "Boolean"))
12431243 then bg
12441244 else throw(($getType(bg) + " couldn't be cast to Boolean"))
12451245 }
12461246 let hn = if (if (bi())
12471247 then true
12481248 else (bv == n))
12491249 then true
12501250 else ha
12511251 let fV = [if (if (!(hn))
12521252 then true
12531253 else gp(fb))
12541254 then true
12551255 else ba("get operation is blocked by admin"), if ((size(fb.payments) == 1))
12561256 then true
12571257 else ba("exactly 1 payment are expected")]
12581258 if ((fV == fV))
12591259 then {
12601260 let fU = bn(hm)
12611261 let hc = fb.payments[0]
12621262 let fq = hc.assetId
12631263 let fC = hc.amount
12641264 let eH = eA(toBigInt(0), toBigInt(0), toBigInt(0))
12651265 if ((eH == eH))
12661266 then {
12671267 let ab = fb.caller
12681268 let ac = fb.transactionId
12691269 let ho = fT(fU, fC, fq, ab, ac)
12701270 if ((ho == ho))
12711271 then {
12721272 let fW = ho._5
12731273 let he = ho._4
12741274 let fn = ho._3
12751275 let et = ho._2
12761276 let hp = ho._1
12771277 let cf = if (if ((gY > 0))
12781278 then (gY > hp)
12791279 else false)
12801280 then ba(makeString(["amount to receive is less than ", toString(gY)], ""))
12811281 else hp
12821282 let hq = invoke(bd, "burn", [fC], [AttachedPayment(fq, fC)])
12831283 if ((hq == hq))
12841284 then {
12851285 let gK = cP(hm, (cf + max([0, fn])))
12861286 let hr = [ScriptTransfer(ab, cf, fU)]
12871287 let hi = if ((fn > 0))
12881288 then [ScriptTransfer(be, fn, fU)]
12891289 else nil
12901290 let hs = {
12911291 let ht = if ((this == be))
12921292 then 0
12931293 else fn
12941294 if (fW)
12951295 then $Tuple2(-((cf + ht)), 0)
12961296 else $Tuple2(0, -((cf + ht)))
12971297 }
12981298 let eJ = hs._1
12991299 let eK = hs._2
13001300 let hu = eI(eJ, eK, 0)
13011301 let gT = hu._1
13021302 let ez = hu._2
13031303 let gU = eN(eH, ez)
13041304 if ((gU == gU))
13051305 then $Tuple2(((((et ++ gK) ++ hr) ++ hi) ++ gT), cf)
13061306 else throw("Strict value is not equal to itself.")
13071307 }
13081308 else throw("Strict value is not equal to itself.")
13091309 }
13101310 else throw("Strict value is not equal to itself.")
13111311 }
13121312 else throw("Strict value is not equal to itself.")
13131313 }
13141314 else throw("Strict value is not equal to itself.")
13151315 }
13161316
13171317
13181318
13191319 @Callable(fb)
13201320 func getOneTknREADONLY (fU,fC) = {
13211321 let hv = fT(bn(fU), fC, bw, unit, unit)
13221322 let hp = hv._1
13231323 let et = hv._2
13241324 let fn = hv._3
13251325 let he = hv._4
13261326 let fW = hv._5
13271327 $Tuple2(nil, $Tuple3(hp, fn, he))
13281328 }
13291329
13301330
13311331
13321332 @Callable(fb)
13331333 func unstakeAndGetOneTkn (hw,hm,gY) = {
13341334 let ha = {
13351335 let bg = invoke(bd, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
13361336 if ($isInstanceOf(bg, "Boolean"))
13371337 then bg
13381338 else throw(($getType(bg) + " couldn't be cast to Boolean"))
13391339 }
13401340 let hn = if (if (bi())
13411341 then true
13421342 else (bv == n))
13431343 then true
13441344 else ha
13451345 let fV = [if (if (!(hn))
13461346 then true
13471347 else gp(fb))
13481348 then true
13491349 else ba("get operation is blocked by admin"), if ((size(fb.payments) == 0))
13501350 then true
13511351 else ba("no payments are expected")]
13521352 if ((fV == fV))
13531353 then {
13541354 let fU = bn(hm)
13551355 let ab = fb.caller
13561356 let ac = fb.transactionId
13571357 let eH = eA(toBigInt(0), toBigInt(0), toBigInt(0))
13581358 if ((eH == eH))
13591359 then {
13601360 let hx = invoke(bC, "unstake", [toBase58String(bw), hw], nil)
13611361 if ((hx == hx))
13621362 then {
13631363 let hy = fT(fU, hw, bw, ab, ac)
13641364 if ((hy == hy))
13651365 then {
13661366 let fW = hy._5
13671367 let he = hy._4
13681368 let fn = hy._3
13691369 let et = hy._2
13701370 let hp = hy._1
13711371 let cf = if (if ((gY > 0))
13721372 then (gY > hp)
13731373 else false)
13741374 then ba(makeString(["amount to receive is less than ", toString(gY)], ""))
13751375 else hp
13761376 let hq = invoke(bd, "burn", [hw], [AttachedPayment(bw, hw)])
13771377 if ((hq == hq))
13781378 then {
13791379 let gK = cP(hm, (cf + max([0, fn])))
13801380 let hr = [ScriptTransfer(fb.caller, cf, fU)]
13811381 let hi = if ((fn > 0))
13821382 then [ScriptTransfer(be, fn, fU)]
13831383 else nil
13841384 let hz = {
13851385 let ht = if ((this == be))
13861386 then 0
13871387 else fn
13881388 if (fW)
13891389 then $Tuple2(-((cf + ht)), 0)
13901390 else $Tuple2(0, -((cf + ht)))
13911391 }
13921392 let eJ = hz._1
13931393 let eK = hz._2
13941394 let hA = eI(eJ, eK, 0)
13951395 let gT = hA._1
13961396 let ez = hA._2
13971397 let gU = eN(eH, ez)
13981398 if ((gU == gU))
13991399 then $Tuple2(((((et ++ gK) ++ hr) ++ hi) ++ gT), cf)
14001400 else throw("Strict value is not equal to itself.")
14011401 }
14021402 else throw("Strict value is not equal to itself.")
14031403 }
14041404 else throw("Strict value is not equal to itself.")
14051405 }
14061406 else throw("Strict value is not equal to itself.")
14071407 }
14081408 else throw("Strict value is not equal to itself.")
14091409 }
14101410 else throw("Strict value is not equal to itself.")
14111411 }
14121412
14131413
14141414
14151415 @Callable(fb)
14161416 func get () = {
14171417 let ee = fa(fb)
14181418 let dK = ee._1
14191419 let dL = ee._2
14201420 let fd = ee._3
14211421 let dt = ee._4
14221422 let dM = ee._5
14231423 let gK = cU(dK, dL)
14241424 let eH = eA(toBigInt(0), toBigInt(0), toBigInt(0))
14251425 if ((eH == eH))
14261426 then {
14271427 let hB = invoke(bd, "burn", [fd], [AttachedPayment(dt, fd)])
14281428 if ((hB == hB))
14291429 then {
14301430 let hC = eI(-(dK), -(dL), 0)
14311431 let gT = hC._1
14321432 let ez = hC._2
14331433 let gU = eN(eH, ez)
14341434 if ((gU == gU))
14351435 then ((gK ++ dM) ++ gT)
14361436 else throw("Strict value is not equal to itself.")
14371437 }
14381438 else throw("Strict value is not equal to itself.")
14391439 }
14401440 else throw("Strict value is not equal to itself.")
14411441 }
14421442
14431443
14441444
14451445 @Callable(fb)
14461446 func getNoLess (hD,hE) = {
14471447 let ee = fa(fb)
14481448 let dK = ee._1
14491449 let dL = ee._2
14501450 let fd = ee._3
14511451 let dt = ee._4
14521452 let dM = ee._5
14531453 if ((hD > dK))
14541454 then throw(((("noLessThenAmtAsset failed: " + toString(dK)) + " < ") + toString(hD)))
14551455 else if ((hE > dL))
14561456 then throw(((("noLessThenPriceAsset failed: " + toString(dL)) + " < ") + toString(hE)))
14571457 else {
14581458 let gK = cU(dK, dL)
14591459 let eH = eA(toBigInt(0), toBigInt(0), toBigInt(0))
14601460 if ((eH == eH))
14611461 then {
14621462 let hB = invoke(bd, "burn", [fd], [AttachedPayment(dt, fd)])
14631463 if ((hB == hB))
14641464 then {
14651465 let hF = eI(-(dK), -(dL), 0)
14661466 let gT = hF._1
14671467 let ez = hF._2
14681468 let gU = eN(eH, ez)
14691469 if ((gU == gU))
14701470 then ((gK ++ dM) ++ gT)
14711471 else throw("Strict value is not equal to itself.")
14721472 }
14731473 else throw("Strict value is not equal to itself.")
14741474 }
14751475 else throw("Strict value is not equal to itself.")
14761476 }
14771477 }
14781478
14791479
14801480
14811481 @Callable(fb)
14821482 func unstakeAndGet (cf) = {
14831483 let hG = if ((size(fb.payments) != 0))
14841484 then throw("No payments are expected")
14851485 else true
14861486 if ((hG == hG))
14871487 then {
14881488 let di = bk()
14891489 let dv = fromBase58String(di[q])
14901490 let eH = eA(toBigInt(0), toBigInt(0), toBigInt(0))
14911491 if ((eH == eH))
14921492 then {
14931493 let hx = invoke(bC, "unstake", [toBase58String(dv), cf], nil)
14941494 if ((hx == hx))
14951495 then {
14961496 let ee = dr(toBase58String(fb.transactionId), toBase58String(dv), cf, fb.caller)
14971497 let dK = ee._1
14981498 let dL = ee._2
14991499 let dy = parseIntValue(ee._9)
15001500 let dM = ee._10
15011501 let gK = cU(dK, dL)
15021502 let hH = if (if (bi())
15031503 then true
15041504 else (dy == n))
15051505 then throw(("Get operation is blocked by admin. Status = " + toString(dy)))
15061506 else true
15071507 if ((hH == hH))
15081508 then {
15091509 let hB = invoke(bd, "burn", [cf], [AttachedPayment(dv, cf)])
15101510 if ((hB == hB))
15111511 then {
15121512 let hI = eI(-(dK), -(dL), 0)
15131513 let gT = hI._1
15141514 let ez = hI._2
15151515 let gU = eN(eH, ez)
15161516 if ((gU == gU))
15171517 then ((gK ++ dM) ++ gT)
15181518 else throw("Strict value is not equal to itself.")
15191519 }
15201520 else throw("Strict value is not equal to itself.")
15211521 }
15221522 else throw("Strict value is not equal to itself.")
15231523 }
15241524 else throw("Strict value is not equal to itself.")
15251525 }
15261526 else throw("Strict value is not equal to itself.")
15271527 }
15281528 else throw("Strict value is not equal to itself.")
15291529 }
15301530
15311531
15321532
15331533 @Callable(fb)
15341534 func unstakeAndGetNoLess (hw,hJ,hE) = {
15351535 let hn = if (bi())
15361536 then true
15371537 else (bv == n)
15381538 let fV = [if (!(hn))
15391539 then true
15401540 else throw("get operation is blocked by admin"), if ((size(fb.payments) == 0))
15411541 then true
15421542 else throw("no payments are expected")]
15431543 if ((fV == fV))
15441544 then {
15451545 let eH = eA(toBigInt(0), toBigInt(0), toBigInt(0))
15461546 if ((eH == eH))
15471547 then {
15481548 let hx = invoke(bC, "unstake", [toBase58String(bw), hw], nil)
15491549 if ((hx == hx))
15501550 then {
15511551 let ee = dr(toBase58String(fb.transactionId), toBase58String(bw), hw, fb.caller)
15521552 let dK = ee._1
15531553 let dL = ee._2
15541554 let dM = ee._10
15551555 let gK = cU(dK, dL)
15561556 let hK = [if ((dK >= hJ))
15571557 then true
15581558 else throw(makeString(["amount asset amount to receive is less than ", toString(hJ)], "")), if ((dL >= hE))
15591559 then true
15601560 else throw(makeString(["price asset amount to receive is less than ", toString(hE)], ""))]
15611561 if ((hK == hK))
15621562 then {
15631563 let hB = invoke(bd, "burn", [hw], [AttachedPayment(bw, hw)])
15641564 if ((hB == hB))
15651565 then {
15661566 let hL = eI(-(dK), -(dL), 0)
15671567 let gT = hL._1
15681568 let ez = hL._2
15691569 let gU = eN(eH, ez)
15701570 if ((gU == gU))
15711571 then ((gK ++ dM) ++ gT)
15721572 else throw("Strict value is not equal to itself.")
15731573 }
15741574 else throw("Strict value is not equal to itself.")
15751575 }
15761576 else throw("Strict value is not equal to itself.")
15771577 }
15781578 else throw("Strict value is not equal to itself.")
15791579 }
15801580 else throw("Strict value is not equal to itself.")
15811581 }
15821582 else throw("Strict value is not equal to itself.")
15831583 }
15841584
15851585
15861586
15871587 @Callable(fb)
15881588 func activate (hM,hN) = if ((toString(fb.caller) != toString(bd)))
15891589 then throw("permissions denied")
15901590 else $Tuple2([StringEntry(ae(), hM), StringEntry(af(), hN)], "success")
15911591
15921592
15931593
15941594 @Callable(fb)
15951595 func refreshKLp () = {
15961596 let hO = valueOrElse(getInteger(ak), 0)
15971597 let hP = if (((height - hO) >= an))
15981598 then unit
15991599 else ba(makeString([toString(an), " blocks have not passed since the previous call"], ""))
16001600 if ((hP == hP))
16011601 then {
16021602 let eU = valueOrErrorMessage(parseBigInt(valueOrElse(getString(this, aj), "0")), bc("invalid kLp"))
16031603 let hQ = eI(0, 0, 0)
16041604 let hR = hQ._1
16051605 let ez = hQ._2
16061606 let eL = if ((eU != ez))
16071607 then hR
16081608 else ba("nothing to refresh")
16091609 $Tuple2(eL, toString(ez))
16101610 }
16111611 else throw("Strict value is not equal to itself.")
16121612 }
16131613
16141614
16151615
16161616 @Callable(fb)
16171617 func getPoolConfigWrapperREADONLY () = $Tuple2(nil, bk())
16181618
16191619
16201620
16211621 @Callable(fb)
16221622 func getAccBalanceWrapperREADONLY (ap) = $Tuple2(nil, bT(ap))
16231623
16241624
16251625
16261626 @Callable(fb)
16271627 func calcPricesWrapperREADONLY (dc,dd,dh) = {
16281628 let dq = dg(dc, dd, dh)
16291629 $Tuple2(nil, [toString(dq[0]), toString(dq[1]), toString(dq[2])])
16301630 }
16311631
16321632
16331633
16341634 @Callable(fb)
16351635 func toX18WrapperREADONLY (E,F) = $Tuple2(nil, toString(D(E, F)))
16361636
16371637
16381638
16391639 @Callable(fb)
16401640 func fromX18WrapperREADONLY (I,J) = $Tuple2(nil, H(parseBigIntValue(I), J))
16411641
16421642
16431643
16441644 @Callable(fb)
16451645 func calcPriceBigIntWrapperREADONLY (bX,bY) = $Tuple2(nil, toString(bW(parseBigIntValue(bX), parseBigIntValue(bY))))
16461646
16471647
16481648
16491649 @Callable(fb)
16501650 func estimatePutOperationWrapperREADONLY (ds,dO,dP,dQ,dR,dS,ab,dT,dU) = $Tuple2(nil, dN(ds, dO, dP, dQ, dR, dS, ab, dT, dU))
16511651
16521652
16531653
16541654 @Callable(fb)
16551655 func estimateGetOperationWrapperREADONLY (ds,dt,du,ab) = {
16561656 let ee = dr(ds, dt, du, addressFromStringValue(ab))
16571657 $Tuple2(nil, $Tuple10(ee._1, ee._2, ee._3, ee._4, ee._5, ee._6, ee._7, toString(ee._8), ee._9, ee._10))
16581658 }
16591659
16601660
16611661
16621662 @Callable(fb)
16631663 func statsREADONLY () = {
16641664 let di = bk()
16651665 let dv = fromBase58String(di[q])
16661666 let hS = di[r]
16671667 let hT = di[s]
16681668 let dX = di[v]
16691669 let dY = di[w]
16701670 let dj = parseIntValue(di[t])
16711671 let dk = parseIntValue(di[u])
16721672 let hU = valueOrErrorMessage(assetInfo(dv), (("Asset " + toBase58String(dv)) + " doesn't exist")).quantity
16731673 let hV = bT(hS)
16741674 let hW = bT(hT)
16751675 let hX = if ((hU == 0))
16761676 then [e, e, e]
16771677 else dg(hV, hW, hU)
16781678 let dF = 0
16791679 let hY = H(hX[1], b)
16801680 let hZ = H(hX[2], b)
16811681 let ia = value(getInteger(bd, aD(toString(this))))
16821682 $Tuple2(nil, makeString(["%d%d%d%d%d%d%d", toString(hV), toString(hW), toString(hU), toString(dF), toString(hY), toString(hZ), toString(ia)], j))
16831683 }
16841684
16851685
16861686
16871687 @Callable(fb)
16881688 func evaluatePutByAmountAssetREADONLY (dP) = {
16891689 let di = bk()
16901690 let dv = fromBase58String(di[q])
16911691 let dV = di[r]
16921692 let dw = fromBase58String(dV)
16931693 let dW = di[s]
16941694 let dx = fromBase58String(dW)
16951695 let dj = parseIntValue(di[t])
16961696 let dk = parseIntValue(di[u])
16971697 let dy = di[p]
16981698 let hU = valueOrErrorMessage(assetInfo(dv), (("Asset " + toBase58String(dv)) + " doesn't exist")).quantity
16991699 let hV = bT(dV)
17001700 let hW = bT(dW)
17011701 let de = D(hV, dj)
17021702 let df = D(hW, dk)
17031703 let dE = if ((hU == 0))
17041704 then e
17051705 else bW(df, de)
17061706 let eb = D(dP, dj)
17071707 let ec = fraction(eb, dE, d)
17081708 let dR = H(ec, dk)
17091709 let fh = dN("", 500000, dP, dw, dR, dx, "", true, false)
17101710 let em = fh._1
17111711 let ib = fh._3
17121712 let dA = fh._4
17131713 let dC = fh._5
17141714 let dz = fh._6
17151715 $Tuple2(nil, makeString(["%d%d%d%d%d%d%d%d", toString(em), toString(H(dE, b)), toString(dA), toString(dC), toString(dz), dy, toString(dP), toString(dR)], j))
17161716 }
17171717
17181718
17191719
17201720 @Callable(fb)
17211721 func evaluatePutByPriceAssetREADONLY (dR) = {
17221722 let di = bk()
17231723 let dv = fromBase58String(di[q])
17241724 let dV = di[r]
17251725 let dw = fromBase58String(dV)
17261726 let dW = di[s]
17271727 let dx = fromBase58String(dW)
17281728 let dj = parseIntValue(di[t])
17291729 let dk = parseIntValue(di[u])
17301730 let dy = di[p]
17311731 let hU = valueOrErrorMessage(assetInfo(dv), (("Asset " + toBase58String(dv)) + " doesn't exist")).quantity
17321732 let ic = bT(dV)
17331733 let id = bT(dW)
17341734 let ie = D(ic, dj)
17351735 let if = D(id, dk)
17361736 let dE = if ((hU == 0))
17371737 then e
17381738 else bW(if, ie)
17391739 let ec = D(dR, dk)
17401740 let eb = fraction(ec, d, dE)
17411741 let dP = H(eb, dj)
17421742 let fh = dN("", 500000, dP, dw, dR, dx, "", true, false)
17431743 let em = fh._1
17441744 let ib = fh._3
17451745 let dA = fh._4
17461746 let dC = fh._5
17471747 let dz = fh._6
17481748 $Tuple2(nil, makeString(["%d%d%d%d%d%d%d%d", toString(em), toString(H(dE, b)), toString(dA), toString(dC), toString(dz), dy, toString(dP), toString(dR)], j))
17491749 }
17501750
17511751
17521752
17531753 @Callable(fb)
17541754 func evaluateGetREADONLY (ig,ih) = {
17551755 let ee = dr("", ig, ih, this)
17561756 let dK = ee._1
17571757 let dL = ee._2
17581758 let dA = ee._5
17591759 let dC = ee._6
17601760 let dz = ee._7
17611761 let dF = ee._8
17621762 let dy = parseIntValue(ee._9)
17631763 $Tuple2(nil, makeString(["%d%d%d%d%d%d%d", toString(dK), toString(dL), toString(dA), toString(dC), toString(dz), toString(dF), toString(dy)], j))
17641764 }
17651765
17661766
17671767 @Verifier(ii)
17681768 func ij () = {
17691769 let ik = {
17701770 let aQ = gn()
17711771 if ($isInstanceOf(aQ, "ByteVector"))
17721772 then {
17731773 let gq = aQ
17741774 gq
17751775 }
17761776 else if ($isInstanceOf(aQ, "Unit"))
17771777 then ii.senderPublicKey
17781778 else throw("Match error")
17791779 }
17801780 let aQ = ii
17811781 if ($isInstanceOf(aQ, "Order"))
17821782 then {
17831783 let eQ = aQ
17841784 let il = bj()
17851785 let im = if (eM())
17861786 then $Tuple2(true, "")
17871787 else eP(eQ)
17881788 let aK = im._1
17891789 let aL = im._2
17901790 let aM = sigVerify(eQ.bodyBytes, eQ.proofs[0], eQ.senderPublicKey)
17911791 let aN = sigVerify(eQ.bodyBytes, eQ.proofs[1], il)
17921792 if (if (if (aK)
17931793 then aM
17941794 else false)
17951795 then aN
17961796 else false)
17971797 then true
17981798 else aJ(aK, aL, aM, aN)
17991799 }
18001800 else if ($isInstanceOf(aQ, "SetScriptTransaction"))
18011801 then {
18021802 let aV = aQ
18031803 if (sigVerify(ii.bodyBytes, ii.proofs[0], ik))
18041804 then true
18051805 else {
18061806 let in = blake2b256(value(aV.script))
18071807 let io = fromBase64String(value(getString(bd, aF())))
18081808 let ip = scriptHash(this)
18091809 if ((io == in))
18101810 then (ip != in)
18111811 else false
18121812 }
18131813 }
18141814 else sigVerify(ii.bodyBytes, ii.proofs[0], ik)
18151815 }
18161816

github/deemru/w8io/3ef1775 
261.28 ms