tx · 22jnY4xZt5ykZAXK9yFgh2GLynb2F6mAx3Uh8s3xV1wM

3MyF6FrSHK3ikwhoNEWEw8EGGURTGYsLfAj:  -0.04300000 Waves

2024.04.17 09:34 [3066419] smart account 3MyF6FrSHK3ikwhoNEWEw8EGGURTGYsLfAj > SELF 0.00000000 Waves

{ "type": 13, "id": "22jnY4xZt5ykZAXK9yFgh2GLynb2F6mAx3Uh8s3xV1wM", "fee": 4300000, "feeAssetId": null, "timestamp": 1713335650706, "version": 2, "chainId": 84, "sender": "3MyF6FrSHK3ikwhoNEWEw8EGGURTGYsLfAj", "senderPublicKey": "mjXzoQNvEPehcF5Zp5ycTQRjAZqnfFUnHNoH6DNtmSg", "proofs": [ "K37ef4hMzFYEEyxVWh5K5m5vHp915kBAAHhWrjGYLYsAfTLHrPS72kkZrexGqvaW1ggNP7BbAN7YPUSh4zAQZ5Y" ], "script": "base64:BgLjOAgCEgASBQoDAQQBEgcKBQEEAQgBEgQKAgEEEgMKAQESBAoCAQQSBAoCCAESBAoCCAESBAoCCAESBQoDAQgBEgASBAoCAQESAwoBARIFCgMBAQESBAoCCAgSABIAEgMKAQgSBQoDAQEBEgQKAgEBEgQKAggBEgQKAggIEgsKCQgBAQIBAggEBBIGCgQICAEIEgASAwoBARIDCgEBEgQKAggBIgpsUGRlY2ltYWxzIgZzY2FsZTgiDHNjYWxlOEJpZ0ludCIHc2NhbGUxOCIKemVyb0JpZ0ludCIEYmlnMCIEYmlnMSIEYmlnMiILd2F2ZXNTdHJpbmciA1NFUCIKUG9vbEFjdGl2ZSIPUG9vbFB1dERpc2FibGVkIhNQb29sTWF0Y2hlckRpc2FibGVkIgxQb29sU2h1dGRvd24iDmlkeFBvb2xBZGRyZXNzIg1pZHhQb29sU3RhdHVzIhBpZHhQb29sTFBBc3NldElkIg1pZHhBbXRBc3NldElkIg9pZHhQcmljZUFzc2V0SWQiDmlkeEFtdEFzc2V0RGNtIhBpZHhQcmljZUFzc2V0RGNtIg5pZHhJQW10QXNzZXRJZCIQaWR4SVByaWNlQXNzZXRJZCINaWR4TFBBc3NldERjbSISaWR4UG9vbEFtdEFzc2V0QW10IhRpZHhQb29sUHJpY2VBc3NldEFtdCIRaWR4UG9vbExQQXNzZXRBbXQiGWlkeEZhY3RvcnlTdGFraW5nQ29udHJhY3QiGmlkeEZhY3RvcnlTbGlwcGFnZUNvbnRyYWN0IgV0b1gxOCIHb3JpZ1ZhbCINb3JpZ1NjYWxlTXVsdCILdG9YMThCaWdJbnQiB2Zyb21YMTgiA3ZhbCIPcmVzdWx0U2NhbGVNdWx0Igxmcm9tWDE4Um91bmQiBXJvdW5kIgd0b1NjYWxlIgNhbXQiCHJlc1NjYWxlIghjdXJTY2FsZSIDYWJzIglhYnNCaWdJbnQiDHN3YXBDb250cmFjdCICZmMiE2tleU1hbmFnZXJQdWJsaWNLZXkiFmtleU1hbmFnZXJWYXVsdEFkZHJlc3MiAnBsIgJwaCIBaCIJdGltZXN0YW1wIgNwYXUiC3VzZXJBZGRyZXNzIgR0eElkIgNnYXUiAmFhIgJwYSIGa2V5RmVlIgpmZWVEZWZhdWx0IgNmZWUiBmtleUtMcCIVa2V5S0xwUmVmcmVzaGVkSGVpZ2h0IhJrZXlLTHBSZWZyZXNoRGVsYXkiFmtMcFJlZnJlc2hEZWxheURlZmF1bHQiD2tMcFJlZnJlc2hEZWxheSIUa2V5QWRkaXRpb25hbEJhbGFuY2UiB2Fzc2V0SWQiFmtleVN0YWtpbmdBc3NldEJhbGFuY2UiGmdldEFkZGl0aW9uYWxCYWxhbmNlT3JaZXJvIhxnZXRTdGFraW5nQXNzZXRCYWxhbmNlT3JaZXJvIhBrZXlGYWN0b3J5Q29uZmlnIg1rZXlNYXRjaGVyUHViIilrZXlNYXBwaW5nUG9vbENvbnRyYWN0QWRkcmVzc1RvUG9vbEFzc2V0cyITcG9vbENvbnRyYWN0QWRkcmVzcyINa2V5UG9vbENvbmZpZyIJaUFtdEFzc2V0IgtpUHJpY2VBc3NldCIfa2V5TWFwcGluZ3NCYXNlQXNzZXQyaW50ZXJuYWxJZCIMYmFzZUFzc2V0U3RyIhNrZXlBbGxQb29sc1NodXRkb3duIg1rZXlQb29sV2VpZ2h0Ig9jb250cmFjdEFkZHJlc3MiFmtleUFsbG93ZWRMcFNjcmlwdEhhc2giFmtleUZlZUNvbGxlY3RvckFkZHJlc3MiFmtleVNraXBPcmRlclZhbGlkYXRpb24iC3Bvb2xBZGRyZXNzIg90aHJvd09yZGVyRXJyb3IiCm9yZGVyVmFsaWQiDm9yZGVyVmFsaWRJbmZvIgtzZW5kZXJWYWxpZCIMbWF0Y2hlclZhbGlkIhdhZGRyZXNzRnJvbVN0cmluZ09yVGhpcyINYWRkcmVzc1N0cmluZyIHJG1hdGNoMCIBYSIcZ2V0TWFuYWdlclZhdWx0QWRkcmVzc09yVGhpcyIOZmFjdG9yeUFkZHJlc3MiA2ZjYSIBcyIPZ2V0U3RyaW5nT3JGYWlsIgdhZGRyZXNzIgNrZXkiDGdldEludE9yRmFpbCIIdGhyb3dFcnIiA21zZyIGZm10RXJyIg9mYWN0b3J5Q29udHJhY3QiE2ZlZUNvbGxlY3RvckFkZHJlc3MiBWluRmVlIgFAIgZvdXRGZWUiFWtleUFkZHJlc3NXaGl0ZWxpc3RlZCIUaXNBZGRyZXNzV2hpdGVsaXN0ZWQiEGlzR2xvYmFsU2h1dGRvd24iE2dldE1hdGNoZXJQdWJPckZhaWwiDWdldFBvb2xDb25maWciCGFtdEFzc2V0IgpwcmljZUFzc2V0IgxwYXJzZUFzc2V0SWQiBWlucHV0Ig9hc3NldElkVG9TdHJpbmciD3BhcnNlUG9vbENvbmZpZyIKcG9vbENvbmZpZyIQcG9vbENvbmZpZ1BhcnNlZCILJHQwOTc2OTk5MzUiDmNmZ1Bvb2xBZGRyZXNzIg1jZmdQb29sU3RhdHVzIgxjZmdMcEFzc2V0SWQiEGNmZ0Ftb3VudEFzc2V0SWQiD2NmZ1ByaWNlQXNzZXRJZCIWY2ZnQW1vdW50QXNzZXREZWNpbWFscyIVY2ZnUHJpY2VBc3NldERlY2ltYWxzIhBnZXRGYWN0b3J5Q29uZmlnIg9zdGFraW5nQ29udHJhY3QiEHNsaXBwYWdlQ29udHJhY3QiEWRhdGFQdXRBY3Rpb25JbmZvIg1pbkFtdEFzc2V0QW10Ig9pblByaWNlQXNzZXRBbXQiCG91dExwQW10IgVwcmljZSIdc2xpcHBhZ2VUb2xlcmFuY2VQYXNzZWRCeVVzZXIiFXNsaXBwYWdlVG9sZXJhbmNlUmVhbCIIdHhIZWlnaHQiC3R4VGltZXN0YW1wIhJzbGlwYWdlQW10QXNzZXRBbXQiFHNsaXBhZ2VQcmljZUFzc2V0QW10IhFkYXRhR2V0QWN0aW9uSW5mbyIOb3V0QW10QXNzZXRBbXQiEG91dFByaWNlQXNzZXRBbXQiB2luTHBBbXQiDWdldEFjY0JhbGFuY2UiDWJhbGFuY2VPblBvb2wiDHRvdGFsQmFsYW5jZSIPY2FsY1ByaWNlQmlnSW50IghwckFtdFgxOCIIYW1BbXRYMTgiFGNhbGNQcmljZUJpZ0ludFJvdW5kIgdnZXRSYXRlIgVwcm94eSIDaW52IgFyIgdkZXBvc2l0IgZhbW91bnQiDnN0YWtpbmdBc3NldElkIhhjdXJyZW50QWRkaXRpb25hbEJhbGFuY2UiGmN1cnJlbnRTdGFraW5nQXNzZXRCYWxhbmNlIgVhc3NldCINZGVwb3NpdEludm9rZSIUcmVjZWl2ZWRTdGFraW5nQXNzZXQiFG5ld0FkZGl0aW9uYWxCYWxhbmNlIhZuZXdTdGFraW5nQXNzZXRCYWxhbmNlIgh3aXRoZHJhdyIMcHJveHlSYXRlTXVsIg1wcm9maXRBZGRyZXNzIhBjdXJyZW50UHJveHlSYXRlIgdvbGRSYXRlIgxzdGFraW5nQXNzZXQiFG9sZFNlbmRTdGFraW5nQW1vdW50IhZzZW5kU3Rha2luZ0Fzc2V0QW1vdW50Igxwcm9maXRBbW91bnQiDndpdGhkcmF3SW52b2tlIg5yZWNlaXZlZEFzc2V0cyITZ2V0TGVhc2VQcm94eUNvbmZpZyIRcmViYWxhbmNlSW50ZXJuYWwiC3RhcmdldFJhdGlvIgptaW5CYWxhbmNlIhRsZWFzYWJsZVRvdGFsQmFsYW5jZSIXdGFyZ2V0QWRkaXRpb25hbEJhbGFuY2UiBGRpZmYiD3NlbmRBc3NldEFtb3VudCIOZ2V0QXNzZXRBbW91bnQiDnJlYmFsYW5jZUFzc2V0Ig0kdDAxNjIyMDE2MzU2Igppc0xlYXNhYmxlIgtsZWFzZWRSYXRpbyIMcHJveHlBZGRyZXNzIgxwcm94eUFzc2V0SWQiFHN0YWtpbmdQcm9maXRBZGRyZXNzIhl3aXRoZHJhd0FuZFJlYmFsYW5jZUFzc2V0IglnZXRBbW91bnQiDSR0MDE2NzU1MTY4OTEiF25ld1RvdGFsTGVhc2FibGVCYWxhbmNlIg53aXRoZHJhd0Ftb3VudCIXd2l0aGRyYXdBbmRSZWJhbGFuY2VBbGwiFGFtb3VudEFzc2V0T3V0QW1vdW50IhNwcmljZUFzc2V0T3V0QW1vdW50IhJBbUFtdFdpdGhkcmF3U3RhdGUiElByQW10V2l0aGRyYXdTdGF0ZSIQcHJpdmF0ZUNhbGNQcmljZSIKYW1Bc3NldERjbSIKcHJBc3NldERjbSIFYW1BbXQiBXByQW10Ig5hbXRBc3NldEFtdFgxOCIQcHJpY2VBc3NldEFtdFgxOCIKY2FsY1ByaWNlcyIFbHBBbXQiA2NmZyILYW10QXNzZXREY20iDXByaWNlQXNzZXREY20iCHByaWNlWDE4IghscEFtdFgxOCITbHBQcmljZUluQW1Bc3NldFgxOCITbHBQcmljZUluUHJBc3NldFgxOCIPY2FsY3VsYXRlUHJpY2VzIgZwcmljZXMiFGVzdGltYXRlR2V0T3BlcmF0aW9uIgZ0eElkNTgiCnBtdEFzc2V0SWQiCHBtdExwQW10IglscEFzc2V0SWQiCWFtQXNzZXRJZCIJcHJBc3NldElkIgpwb29sU3RhdHVzIgpscEVtaXNzaW9uIglhbUJhbGFuY2UiDGFtQmFsYW5jZVgxOCIJcHJCYWxhbmNlIgxwckJhbGFuY2VYMTgiC2N1clByaWNlWDE4IghjdXJQcmljZSILcG10THBBbXRYMTgiDWxwRW1pc3Npb25YMTgiC291dEFtQW10WDE4IgtvdXRQckFtdFgxOCIIb3V0QW1BbXQiCG91dFByQW10IgVzdGF0ZSIUZXN0aW1hdGVQdXRPcGVyYXRpb24iEXNsaXBwYWdlVG9sZXJhbmNlIgxpbkFtQXNzZXRBbXQiC2luQW1Bc3NldElkIgxpblByQXNzZXRBbXQiC2luUHJBc3NldElkIgppc0V2YWx1YXRlIgZlbWl0THAiDGFtQXNzZXRJZFN0ciIMcHJBc3NldElkU3RyIgtpQW10QXNzZXRJZCINaVByaWNlQXNzZXRJZCIOaW5BbUFzc2V0SWRTdHIiDmluUHJBc3NldElkU3RyIg9pbkFtQXNzZXRBbXRYMTgiD2luUHJBc3NldEFtdFgxOCIMdXNlclByaWNlWDE4IgNyZXMiC3NsaXBwYWdlWDE4IhRzbGlwcGFnZVRvbGVyYW5jZVgxOCIKcHJWaWFBbVgxOCIKYW1WaWFQclgxOCIMZXhwZWN0ZWRBbXRzIhFleHBBbXRBc3NldEFtdFgxOCITZXhwUHJpY2VBc3NldEFtdFgxOCIJY2FsY0xwQW10Ig5jYWxjQW1Bc3NldFBtdCIOY2FsY1ByQXNzZXRQbXQiDHNsaXBwYWdlQ2FsYyIJZW1pdExwQW10IgZhbURpZmYiBnByRGlmZiILY29tbW9uU3RhdGUiB2NhbGNLTHAiDWFtb3VudEJhbGFuY2UiDHByaWNlQmFsYW5jZSIQYW1vdW50QmFsYW5jZVgxOCIPcHJpY2VCYWxhbmNlWDE4Igp1cGRhdGVkS0xwIg5jYWxjQ3VycmVudEtMcCIQYW1vdW50QXNzZXREZWx0YSIPcHJpY2VBc3NldERlbHRhIhRscEFzc2V0RW1pc3Npb25EZWx0YSISYW1vdW50QXNzZXRCYWxhbmNlIhFwcmljZUFzc2V0QmFsYW5jZSIPbHBBc3NldEVtaXNzaW9uIgpjdXJyZW50S0xwIhJyZWZyZXNoS0xwSW50ZXJuYWwiF2Ftb3VudEFzc2V0QmFsYW5jZURlbHRhIhZwcmljZUFzc2V0QmFsYW5jZURlbHRhIgdhY3Rpb25zIhNza2lwT3JkZXJWYWxpZGF0aW9uIhJ2YWxpZGF0ZVVwZGF0ZWRLTHAiBm9sZEtMcCIbdmFsaWRhdGVNYXRjaGVyT3JkZXJBbGxvd2VkIgVvcmRlciIRYW1vdW50QXNzZXRBbW91bnQiEHByaWNlQXNzZXRBbW91bnQiDSR0MDI5NTE3Mjk3MjkiA2tMcCINJHQwMzAxNjkzMDI2OSINdW51c2VkQWN0aW9ucyIGa0xwTmV3Igxpc09yZGVyVmFsaWQiBGluZm8iCWNvbW1vbkdldCIBaSIDcG10IgZwbXRBbXQiDWlzR2V0RGlzYWJsZWQiCWNvbW1vblB1dCIKYW1Bc3NldFBtdCIKcHJBc3NldFBtdCIGZXN0UHV0Ig1pc1B1dERpc2FibGVkIgRlbWl0IgdlbWl0SW52Ig1lbWl0SW52TGVnYWN5IhVsZWdhY3lGYWN0b3J5Q29udHJhY3QiB3Rha2VGZWUiCWZlZUFtb3VudCIPY2FsY1B1dE9uZVRva2VuIhBwYXltZW50QW1vdW50UmF3Ig5wYXltZW50QXNzZXRJZCIGaXNFdmFsIhBhbW91bnRCYWxhbmNlUmF3Ig9wcmljZUJhbGFuY2VSYXciFHBheW1lbnRJbkFtb3VudEFzc2V0Ig0kdDAzMzQ1NTMzNzQ4IhBhbW91bnRCYWxhbmNlT2xkIg9wcmljZUJhbGFuY2VPbGQiDSR0MDMzNzUyMzM5MDEiFGFtb3VudEFzc2V0QW1vdW50UmF3IhNwcmljZUFzc2V0QW1vdW50UmF3Ig0kdDAzNDAzMzM0MDk3Ig1wYXltZW50QW1vdW50IhBhbW91bnRCYWxhbmNlTmV3Ig9wcmljZUJhbGFuY2VOZXciC3ByaWNlTmV3WDE4IghwcmljZU5ldyIOcGF5bWVudEJhbGFuY2UiFHBheW1lbnRCYWxhbmNlQmlnSW50IgxzdXBwbHlCaWdJbnQiC2NoZWNoU3VwcGx5Ig1kZXBvc2l0QmlnSW50Igtpc3N1ZUFtb3VudCILcHJpY2VPbGRYMTgiCHByaWNlT2xkIgRsb3NzIg0kdDAzNTc3ODM1OTQ1IgdiYWxhbmNlIg9pc3N1ZUFtb3VudEJvdGgiD2NhbGNHZXRPbmVUb2tlbiIKb3V0QXNzZXRJZCIGY2hlY2tzIhBvdXRJbkFtb3VudEFzc2V0Ig1iYWxhbmNlQmlnSW50IhhvdXRJbkFtb3VudEFzc2V0RGVjaW1hbHMiDGFtQmFsYW5jZU9sZCIMcHJCYWxhbmNlT2xkIgpvdXRCYWxhbmNlIhBvdXRCYWxhbmNlQmlnSW50Ig5yZWRlZW1lZEJpZ0ludCIJYW1vdW50UmF3Ig0kdDAzODAyMzM4MDc5Igt0b3RhbEFtb3VudCINJHQwMzgwODMzODMwOSILb3V0QW1BbW91bnQiC291dFByQW1vdW50IgxhbUJhbGFuY2VOZXciDHByQmFsYW5jZU5ldyIYYW1vdW50Qm90aEluUGF5bWVudEFzc2V0IhZtYW5hZ2VyUHVibGljS2V5T3JVbml0IhNtYW5hZ2VyVmF1bHRBZGRyZXNzIglpc01hbmFnZXIiAnBrIgttdXN0TWFuYWdlciICcGQiDWNsZWFuQW1vdW50SW4iCWlzUmV2ZXJzZSINZmVlUG9vbEFtb3VudCINJHQwNDAxNjc0MDQ3MiIIYXNzZXRPdXQiB2Fzc2V0SW4iEnBvb2xBc3NldEluQmFsYW5jZSITcG9vbEFzc2V0T3V0QmFsYW5jZSIJYW1vdW50T3V0IgRvbGRLIgRuZXdLIgZjaGVja0siDGFtb3VudE91dE1pbiIJYWRkcmVzc1RvIgtzd2FwQ29udGFjdCISaXNQb29sU3dhcERpc2FibGVkIg5pc1N3YXBEaXNhYmxlZCIIY2hlY2tNaW4iEXJlZnJlc2hLTHBBY3Rpb25zIg5yZWJhbGFuY2VTdGF0ZSINd2l0aGRyYXdTdGF0ZSIPc2hvdWxkQXV0b1N0YWtlIgRhbUlkIgRwcklkIgxzbGlwcGFnZUFJbnYiDHNsaXBwYWdlUEludiIKbHBUcmFuc2ZlciILc2xwU3Rha2VJbnYiDSR0MDQ1NjQ4NDYxMTAiEWlzVXBkYXRlZEtMcFZhbGlkIgNyZWIiC21heFNsaXBwYWdlIg0kdDA0NjcyMjQ2Nzg3IgxtaW5PdXRBbW91bnQiCWF1dG9TdGFrZSIgaXNQb29sT25lVG9rZW5PcGVyYXRpb25zRGlzYWJsZWQiB3BheW1lbnQiDSR0MDQ4MDE2NDgxNjgiBWJvbnVzIhNlbWl0QW1vdW50RXN0aW1hdGVkIgplbWl0QW1vdW50IghzdGFrZUludiIHc2VuZEZlZSINJHQwNDg3NTQ0ODk1MSINJHQwNDg5NTQ0OTA2MiINJHQwNDk0MTc0OTU3NCINb3V0QXNzZXRJZFN0ciINJHQwNTA0OTY1MDY0OSIPYW1vdW50RXN0aW1hdGVkIgdidXJuSW52Ig1hc3NldFRyYW5zZmVyIg0kdDA1MTMxMzUxNTYwIhBmZWVBbW91bnRGb3JDYWxjIg0kdDA1MTU2MzUxNjcxIg0kdDA1MTk0OTUyMTA1Ig11bnN0YWtlQW1vdW50Igp1bnN0YWtlSW52Ig0kdDA1MzA0NzUzMTk4Ig0kdDA1Mzg1NzU0MTA0Ig0kdDA1NDEwNzU0MjE1IhRidXJuTFBBc3NldE9uRmFjdG9yeSINJHQwNTUzMTA1NTM5MSISbm9MZXNzVGhlbkFtdEFzc2V0IhRub0xlc3NUaGVuUHJpY2VBc3NldCINJHQwNTY0ODY1NjU2NyINY2hlY2tQYXltZW50cyIPY2hlY2tQb29sU3RhdHVzIg0kdDA1NzkxNTU3OTk2IhVub0xlc3NUaGVuQW1vdW50QXNzZXQiDGNoZWNrQW1vdW50cyINJHQwNTk0NzQ1OTU1NSILYW10QXNzZXRTdHIiDXByaWNlQXNzZXRTdHIiGGxhc3RSZWZyZXNoZWRCbG9ja0hlaWdodCIdY2hlY2tMYXN0UmVmcmVzaGVkQmxvY2tIZWlnaHQiDSR0MDYwNzU5NjA4MjMiEGtMcFVwZGF0ZUFjdGlvbnMiCmFtdEFzc2V0SWQiDHByaWNlQXNzZXRJZCINcG9vbExQQmFsYW5jZSISYWNjQW10QXNzZXRCYWxhbmNlIhRhY2NQcmljZUFzc2V0QmFsYW5jZSIKcHJpY2VzTGlzdCIPbHBBbXRBc3NldFNoYXJlIhFscFByaWNlQXNzZXRTaGFyZSIKcG9vbFdlaWdodCIMY3VyUHJpY2VDYWxjIgxhbUJhbGFuY2VSYXciDHByQmFsYW5jZVJhdyIPYW1CYWxhbmNlUmF3WDE4Ig9wckJhbGFuY2VSYXdYMTgiEHBheW1lbnRMcEFzc2V0SWQiDHBheW1lbnRMcEFtdCICdHgiBnZlcmlmeSIPdGFyZ2V0UHVibGljS2V5IgptYXRjaGVyUHViIg0kdDA2OTQ4NTY5NjAyIgduZXdIYXNoIgthbGxvd2VkSGFzaCILY3VycmVudEhhc2iEAQABYQAIAAFiAIDC1y8AAWMJALYCAQCAwtcvAAFkCQC2AgEAgICQu7rWrfANAAFlCQC2AgEAAAABZgkAtgIBAAAAAWcJALYCAQABAAFoCQC2AgEAAgABaQIFV0FWRVMAAWoCAl9fAAFrAAEAAWwAAgABbQADAAFuAAQAAW8AAQABcAACAAFxAAMAAXIABAABcwAFAAF0AAYAAXUABwABdgAIAAF3AAkAAXgACgABeQABAAF6AAIAAUEAAwABQgABAAFDAAcBAUQCAUUBRgkAvAIDCQC2AgEFAUUFAWQJALYCAQUBRgEBRwIBRQFGCQC8AgMFAUUFAWQFAUYBAUgCAUkBSgkAoAMBCQC8AgMFAUkJALYCAQUBSgUBZAEBSwMBSQFKAUwJAKADAQkAvQIEBQFJCQC2AgEFAUoFAWQFAUwBAU0DAU4BTwFQCQBrAwUBTgUBTwUBUAEBUQEBSQMJAGYCAAAFAUkJAQEtAQUBSQUBSQEBUgEBSQMJAL8CAgUBZQUBSQkAvgIBBQFJBQFJAQFTAAIQJXNfX3N3YXBDb250cmFjdAEBVAACEyVzX19mYWN0b3J5Q29udHJhY3QBAVUAAhQlc19fbWFuYWdlclB1YmxpY0tleQEBVgACFyVzX19tYW5hZ2VyVmF1bHRBZGRyZXNzAQFXAAIRJXMlc19fcHJpY2VfX2xhc3QBAVgCAVkBWgkAuQkCCQDMCAICGCVzJXMlZCVkX19wcmljZV9faGlzdG9yeQkAzAgCCQCkAwEFAVkJAMwIAgkApAMBBQFaBQNuaWwFAWoBAmFhAgJhYgJhYwkArAICCQCsAgIJAKwCAgILJXMlcyVzX19QX18FAmFiAgJfXwUCYWMBAmFkAgJhYgJhYwkArAICCQCsAgIJAKwCAgILJXMlcyVzX19HX18FAmFiAgJfXwUCYWMBAmFlAAIPJXNfX2Ftb3VudEFzc2V0AQJhZgACDiVzX19wcmljZUFzc2V0AAJhZwIHJXNfX2ZlZQACYWgJAGsDAAoFAWIAkE4AAmFpCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFAmFnBQJhaAACYWoJALkJAgkAzAgCAgIlcwkAzAgCAgNrTHAFA25pbAUBagACYWsJALkJAgkAzAgCAgIlcwkAzAgCAhJrTHBSZWZyZXNoZWRIZWlnaHQFA25pbAUBagACYWwJALkJAgkAzAgCAgIlcwkAzAgCAg9yZWZyZXNoS0xwRGVsYXkFA25pbAUBagACYW0AHgACYW4JAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUCYWwFAmFtAQJhbwECYXAJALkJAgkAzAgCAgQlcyVzCQDMCAICDXN0YWtlZEJhbGFuY2UJAMwIAgUCYXAFA25pbAUBagECYXEBAmFwCQC5CQIJAMwIAgIEJXMlcwkAzAgCAhFzaGFyZUFzc2V0QmFsYW5jZQkAzAgCBQJhcAUDbmlsBQFqAQJhcgECYXAJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkBAmFvAQUCYXAAAAECYXMBAmFwCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAQJhcQEFAmFwAAABAmF0AAIRJXNfX2ZhY3RvcnlDb25maWcBAmF1AAIYJXMlc19fbWF0Y2hlcl9fcHVibGljS2V5AQJhdgECYXcJAKwCAgkArAICAgglcyVzJXNfXwUCYXcCIF9fbWFwcGluZ3NfX3Bvb2xDb250cmFjdDJMcEFzc2V0AQJheAICYXkCYXoJAKwCAgkArAICCQCsAgIJAKwCAgIIJWQlZCVzX18FAmF5AgJfXwUCYXoCCF9fY29uZmlnAQJhQQECYUIJAKwCAgIoJXMlcyVzX19tYXBwaW5nc19fYmFzZUFzc2V0MmludGVybmFsSWRfXwUCYUIBAmFDAAIMJXNfX3NodXRkb3duAQJhRAECYUUJAKwCAgISJXMlc19fcG9vbFdlaWdodF9fBQJhRQECYUYAAhclc19fYWxsb3dlZExwU2NyaXB0SGFzaAACYUcCFyVzX19mZWVDb2xsZWN0b3JBZGRyZXNzAQJhSAECYUkJAKwCAgIbJXMlc19fc2tpcE9yZGVyVmFsaWRhdGlvbl9fBQJhSQECYUoEAmFLAmFMAmFNAmFOCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICJG9yZGVyIHZhbGlkYXRpb24gZmFpbGVkOiBvcmRlclZhbGlkPQkApQMBBQJhSwICICgFAmFMAgEpAg0gc2VuZGVyVmFsaWQ9CQClAwEFAmFNAg4gbWF0Y2hlclZhbGlkPQkApQMBBQJhTgECYU8BAmFQBAJhUQkApggBBQJhUAMJAAECBQJhUQIHQWRkcmVzcwQCYVIFAmFRBQJhUgUEdGhpcwECYVMABAJhVAQCYVEJAKIIAQkBAVQAAwkAAQIFAmFRAgZTdHJpbmcEAmFVBQJhUQkBAmFPAQUCYVUFBHRoaXMEAmFRCQCdCAIFAmFUCQEBVgADCQABAgUCYVECBlN0cmluZwQCYVYFAmFRCQECYU8BBQJhVgUEdGhpcwECYVcCAmFYAmFZCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUCYVgFAmFZCQC5CQIJAMwIAgIKbWFuZGF0b3J5IAkAzAgCCQClCAEFAmFYCQDMCAICAS4JAMwIAgUCYVkJAMwIAgIPIGlzIG5vdCBkZWZpbmVkBQNuaWwCAAECYVoCAmFYAmFZCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUCYVgFAmFZCQC5CQIJAMwIAgIKbWFuZGF0b3J5IAkAzAgCCQClCAEFAmFYCQDMCAICAS4JAMwIAgUCYVkJAMwIAgIPIGlzIG5vdCBkZWZpbmVkBQNuaWwCAAECYmEBAmJiCQACAQkAuQkCCQDMCAICCGxwLnJpZGU6CQDMCAIFAmJiBQNuaWwCASABAmJjAQJiYgkAuQkCCQDMCAICCGxwLnJpZGU6CQDMCAIFAmJiBQNuaWwCASAAAmJkCQERQGV4dHJOYXRpdmUoMTA2MikBCQECYVcCBQR0aGlzCQEBVAAAAmJlCQERQGV4dHJOYXRpdmUoMTA2MikBCQECYVcCBQJiZAUCYUcAAmJmCgACYmcJAPwHBAUCYmQCEGdldEluRmVlUkVBRE9OTFkJAMwIAgkApQgBBQR0aGlzBQNuaWwFA25pbAMJAAECBQJiZwIDSW50BQJiZwkAAgEJAKwCAgkAAwEFAmJnAhggY291bGRuJ3QgYmUgY2FzdCB0byBJbnQAAmJoCgACYmcJAPwHBAUCYmQCEWdldE91dEZlZVJFQURPTkxZCQDMCAIJAKUIAQUEdGhpcwUDbmlsBQNuaWwDCQABAgUCYmcCA0ludAUCYmcJAAIBCQCsAgIJAAMBBQJiZwIYIGNvdWxkbid0IGJlIGNhc3QgdG8gSW50AQJiaQECYVgJALkJAgkAzAgCAgQlcyVzCQDMCAICC3doaXRlbGlzdGVkCQDMCAIJAKUIAQUCYVgFA25pbAUBagECYmoBAmFYCQELdmFsdWVPckVsc2UCCQCbCAIFAmJkCQECYmkBBQJhWAcBAmJrAAkBC3ZhbHVlT3JFbHNlAgkAmwgCBQJiZAkBAmFDAAcBAmJsAAkA2QQBCQECYVcCBQJiZAkBAmF1AAECYm0ABAJibgkBAmFXAgUEdGhpcwkBAmFlAAQCYm8JAQJhVwIFBHRoaXMJAQJhZgAEAmF6CQECYVoCBQJiZAkBAmFBAQUCYm8EAmF5CQECYVoCBQJiZAkBAmFBAQUCYm4JALUJAgkBAmFXAgUCYmQJAQJheAIJAKQDAQUCYXkJAKQDAQUCYXoFAWoBAmJwAQJicQMJAAACBQJicQUBaQUEdW5pdAkA2QQBBQJicQECYnIBAmJxAwkAAAIFAmJxBQR1bml0BQFpCQDYBAEJAQV2YWx1ZQEFAmJxAQJicwECYnQJAJkKBwkBEUBleHRyTmF0aXZlKDEwNjIpAQkAkQMCBQJidAUBbwkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmJ0BQFwCQDZBAEJAJEDAgUCYnQFAXEJAQJicAEJAJEDAgUCYnQFAXIJAQJicAEJAJEDAgUCYnQFAXMJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJidAUBdAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmJ0BQF1AAJidQkBAmJzAQkBAmJtAAACYnYFAmJ1AAJidwgFAmJ2Al8xAAJieAgFAmJ2Al8yAAJieQgFAmJ2Al8zAAJieggFAmJ2Al80AAJiQQgFAmJ2Al81AAJiQggFAmJ2Al82AAJiQwgFAmJ2Al83AQJiRAAJALUJAgkBAmFXAgUCYmQJAQJhdAAFAWoAAmJFCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkAkQMCCQECYkQABQFCAhlpbmNvcnJlY3Qgc3Rha2luZyBhZGRyZXNzAAJiRgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJAJEDAgkBAmJEAAUBQwIZaW5jb3JyZWN0IHN0YWtpbmcgYWRkcmVzcwECYkcKAmJIAmJJAmJKAmJLAmJMAmJNAmJOAmJPAmJQAmJRCQC5CQIJAMwIAgIUJWQlZCVkJWQlZCVkJWQlZCVkJWQJAMwIAgkApAMBBQJiSAkAzAgCCQCkAwEFAmJJCQDMCAIJAKQDAQUCYkoJAMwIAgkApAMBBQJiSwkAzAgCCQCkAwEFAmJMCQDMCAIJAKQDAQUCYk0JAMwIAgkApAMBBQJiTgkAzAgCCQCkAwEFAmJPCQDMCAIJAKQDAQUCYlAJAMwIAgkApAMBBQJiUQUDbmlsBQFqAQJiUgYCYlMCYlQCYlUCYksCYk4CYk8JALkJAgkAzAgCAgwlZCVkJWQlZCVkJWQJAMwIAgkApAMBBQJiUwkAzAgCCQCkAwEFAmJUCQDMCAIJAKQDAQUCYlUJAMwIAgkApAMBBQJiSwkAzAgCCQCkAwEFAmJOCQDMCAIJAKQDAQUCYk8FA25pbAUBagECYlYBAmFwBAJiVwMJAAACBQJhcAIFV0FWRVMICQDvBwEFBHRoaXMJYXZhaWxhYmxlCQDwBwIFBHRoaXMJANkEAQUCYXAEAmJYCQBlAgkAZAIFAmJXCQECYXIBBQJhcAkBAmFzAQUCYXAJAJYDAQkAzAgCAAAJAMwIAgUCYlgFA25pbAECYlkCAmJaAmNhCQC8AgMFAmJaBQFkBQJjYQECY2IDAmJaAmNhAUwJAL0CBAUCYloFAWQFAmNhBQFMAQJjYwECY2QEAmNlCQD8BwQFAmNkAgdnZXRSYXRlBQNuaWwFA25pbAMJAAACBQJjZQUCY2UEAmFRBQJjZQMJAAECBQJhUQIDSW50BAJjZgUCYVEFAmNmCQECYmEBAiBwcm94eS5nZXRSYXRlKCkgdW5leHBlY3RlZCB2YWx1ZQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgECY2cEAmFwAmNoAmNpAmNkBAJjagkBAmFyAQUCYXADCQAAAgUCY2oFAmNqBAJjawkBAmFzAQUCY2kDCQAAAgUCY2sFAmNrBAJjbAkBAmJwAQUCYXADCQBmAgUCY2gAAAQCY20JAPwHBAUCY2QCB2RlcG9zaXQFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCY2wFAmNoBQNuaWwDCQAAAgUCY20FAmNtBAJhUQUCY20DCQABAgUCYVECA0ludAQCY24FAmFRBAJjbwkAZAIFAmNqBQJjaAQCY3AJAGQCBQJjawUCY24JAMwIAgkBDEludGVnZXJFbnRyeQIJAQJhbwEFAmFwBQJjbwkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAmFxAQUCY2kFAmNwBQNuaWwFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQJjcQYCYXACY2gCY2kCY2QCY3ICY3MEAmNqCQECYXIBBQJhcAMJAAACBQJjagUCY2oEAmNrCQECYXMBBQJjaQMJAAACBQJjawUCY2sEAmN0CQECY2MBBQJjZAMJAAACBQJjdAUCY3QEAmN1CQBrAwUCY3IFAmNqBQJjawQCY3YJAQJicAEFAmNpBAJjdwkAawMFAmNyBQJjaAUCY3UEAmN4CQBrAwUCY3IFAmNoBQJjdAQCY3kJAJYDAQkAzAgCAAAJAMwIAgkAZQIFAmN3BQJjeAUDbmlsAwkAZgIFAmN4AAAEAmN6CQD8BwQFAmNkAgh3aXRoZHJhdwUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQJjdgUCY3gFA25pbAMJAAACBQJjegUCY3oEAmFRBQJjegMJAAECBQJhUQIDSW50BAJjQQUCYVEEAmNvCQBlAgUCY2oFAmNBBAJjcAkAZQIJAGUCBQJjawUCY3gFAmN5CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQECYW8BBQJhcAUCY28JAMwIAgkBDEludGVnZXJFbnRyeQIJAQJhcQEFAmNpBQJjcAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQJjcwUCY3kJAQJicAEFAmNpBQNuaWwFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQJjQgECYXAEAmFRCQD8BwQFAmJkAhpnZXRQb29sTGVhc2VDb25maWdSRUFET05MWQkAzAgCCQClCAEFBHRoaXMJAMwIAgUCYXAFA25pbAUDbmlsAwkAAQIFAmFRAjAoQm9vbGVhbiwgSW50LCBJbnQsIFN0cmluZywgU3RyaW5nLCBJbnQsIFN0cmluZykEAmFSBQJhUQUCYVIJAQJiYQEJAKwCAgkArAICAgFbBQJhcAIdXSBnZXRMZWFzZVByb3h5Q29uZmlnKCkgZXJyb3IBAmNDBwJjRAJhcAJjaQJjRQJjZAJjcgJjcwQCY2sJAQJhcwEFAmNpAwkAAAIFAmNrBQJjawQCY2oDCQECIT0CBQJjawAACQECYXIBBQJhcAAAAwkAAAIFAmNqBQJjagQCY0YJAJYDAQkAzAgCAAAJAMwIAgkAZQIJAQJiVgEFAmFwBQJjRQUDbmlsBAJjRwkAawMFAmNEBQJjRgBkBAJjSAkAZQIFAmNqBQJjRwMJAAACBQJjSAAABQNuaWwDCQBmAgAABQJjSAQCY0kJAQEtAQUCY0gJAQJjZwQFAmFwBQJjSQUCY2kFAmNkBAJjSgUCY0gJAQJjcQYFAmFwBQJjSgUCY2kFAmNkBQJjcgUCY3MJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BAmNLAQJhcAQCY0wJAQJjQgEFAmFwBAJjTQgFAmNMAl8xBAJjTggFAmNMAl8yBAJjRQgFAmNMAl8zBAJjTwgFAmNMAl80BAJjUAgFAmNMAl81BAJjcggFAmNMAl82BAJjUQgFAmNMAl83AwUCY00JAQJjQwcFAmNOBQJhcAUCY1AFAmNFCQERQGV4dHJOYXRpdmUoMTA2MikBBQJjTwUCY3IJARFAZXh0ck5hdGl2ZSgxMDYyKQEFAmNRBQNuaWwBAmNSAgJhcAJjUwQCY1QJAQJjQgEFAmFwBAJjTQgFAmNUAl8xBAJjTggFAmNUAl8yBAJjRQgFAmNUAl8zBAJjTwgFAmNUAl80BAJjUAgFAmNUAl81BAJjcggFAmNUAl82BAJjUQgFAmNUAl83AwUCY00EAmNrCQECYXMBBQJjUAMJAAACBQJjawUCY2sEAmNqAwkBAiE9AgUCY2sAAAkBAmFyAQUCYXAAAAMJAAACBQJjagUCY2oEAmNVCQCWAwEJAMwIAgAACQDMCAIJAGUCCQBlAgkBAmJWAQUCYXAFAmNTBQJjRQUDbmlsAwkAAAIFAmNVBQJjVQQCY28JAGsDBQJjTgUCY1UAZAMJAAACBQJjbwUCY28EAmNWCQBlAgUCY2oFAmNvAwkAAAIFAmNWBQJjVgMJAAACBQJjVgAABQNuaWwDCQBmAgAABQJjVgkBAmNnBAUCYXAJAQEtAQUCY1YFAmNQCQERQGV4dHJOYXRpdmUoMTA2MikBBQJjTwkBAmNxBgUCYXAFAmNWBQJjUAkBEUBleHRyTmF0aXZlKDEwNjIpAQUCY08FAmNyCQERQGV4dHJOYXRpdmUoMTA2MikBBQJjUQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUDbmlsAQJjVwICY1gCY1kEAmNaCQECY1ICCQECYVcCBQR0aGlzCQECYWUABQJjWAQCZGEJAQJjUgIJAQJhVwIFBHRoaXMJAQJhZgAFAmNZCQDOCAIFAmNaBQJkYQECZGIEAmRjAmRkAmRlAmRmBAJkZwkBAUQCBQJkZQUCZGMEAmRoCQEBRAIFAmRmBQJkZAkBAmJZAgUCZGgFAmRnAQJkaQMCZGUCZGYCZGoEAmRrCQECYm0ABAJkbAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmRrBQF0BAJkbQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmRrBQF1BAJkbgkBAmRiBAUCZGwFAmRtBQJkZQUCZGYEAmNhCQEBRAIFAmRlBQJkbAQCYloJAQFEAgUCZGYFAmRtBAJkbwkBAUQCBQJkagUBYgQCZHAJAQJiWQIFAmNhBQJkbwQCZHEJAQJiWQIFAmJaBQJkbwkAzAgCBQJkbgkAzAgCBQJkcAkAzAgCBQJkcQUDbmlsAQJkcgMCZGUCZGYCZGoEAmRzCQECZGkDBQJkZQUCZGYFAmRqCQDMCAIJAQFIAgkAkQMCBQJkcwAABQFiCQDMCAIJAQFIAgkAkQMCBQJkcwABBQFiCQDMCAIJAQFIAgkAkQMCBQJkcwACBQFiBQNuaWwBAmR0BAJkdQJkdgJkdwJhYgQCZGsJAQJibQAEAmR4CQCRAwIFAmRrBQFxBAJkeQkAkQMCBQJkawUBcgQCZHoJAJEDAgUCZGsFAXMEAmRjCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCZGsFAXQEAmRkCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCZGsFAXUEAmRBCQCRAwIFAmRrBQFwBAJkQggJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkA7AcBCQDZBAEFAmR4CQCsAgIJAKwCAgIGQXNzZXQgBQJkeAIOIGRvZXNuJ3QgZXhpc3QIcXVhbnRpdHkDCQECIT0CBQJkeAUCZHYJAAIBAhVJbnZhbGlkIGFzc2V0IHBhc3NlZC4EAmRDCQECYlYBBQJkeQQCZEQJAQFEAgUCZEMFAmRjBAJkRQkBAmJWAQUCZHoEAmRGCQEBRAIFAmRFBQJkZAQCZEcJAQJiWQIFAmRGBQJkRAQCZEgJAQFIAgUCZEcFAWIEAmRJCQEBRAIFAmR3BQFiBAJkSgkBAUQCBQJkQgUBYgQCZEsJALwCAwUCZEQFAmRJBQJkSgQCZEwJALwCAwUCZEYFAmRJBQJkSgQCZE0JAQFLAwUCZEsFAmRjBQVGTE9PUgQCZE4JAQFLAwUCZEwFAmRkBQVGTE9PUgQCZE8DCQAAAgUCZHUCAAUDbmlsCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFAmFiBQJkTQMJAAACBQJkeQIFV0FWRVMFBHVuaXQJANkEAQUCZHkJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUCYWIFAmROAwkAAAIFAmR6AgVXQVZFUwUEdW5pdAkA2QQBBQJkegkAzAgCCQELU3RyaW5nRW50cnkCCQECYWQCCQClCAEFAmFiBQJkdQkBAmJSBgUCZE0FAmROBQJkdwUCZEgFBmhlaWdodAgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFXAAUCZEgJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFYAgUGaGVpZ2h0CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUCZEgFA25pbAkAnAoKBQJkTQUCZE4FAmR5BQJkegUCZEMFAmRFBQJkQgUCZEcFAmRBBQJkTwECZFAJAmR1AmRRAmRSAmRTAmRUAmRVAmFiAmRWAmRXBAJkawkBAmJtAAQCZHgJANkEAQkAkQMCBQJkawUBcQQCZFgJAJEDAgUCZGsFAXIEAmRZCQCRAwIFAmRrBQFzBAJkWgkAkQMCBQJkawUBdgQCZWEJAJEDAgUCZGsFAXcEAmRsCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCZGsFAXQEAmRtCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCZGsFAXUEAmRBCQCRAwIFAmRrBQFwBAJkQggJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkA7AcBBQJkeAkArAICCQCsAgICBkFzc2V0IAkA2AQBBQJkeAIOIGRvZXNuJ3QgZXhpc3QIcXVhbnRpdHkEAmViCQDYBAEJAQt2YWx1ZU9yRWxzZQIFAmRTCQDZBAECBVdBVkVTBAJlYwkA2AQBCQELdmFsdWVPckVsc2UCBQJkVQkA2QQBAgVXQVZFUwMDCQECIT0CBQJkWAUCZWIGCQECIT0CBQJkWQUCZWMJAAIBAiJJbnZhbGlkIGFtdCBvciBwcmljZSBhc3NldCBwYXNzZWQuBAJkQwMFAmRWCQECYlYBBQJkWAkAZQIJAQJiVgEFAmRYBQJkUgQCZEUDBQJkVgkBAmJWAQUCZFkJAGUCCQECYlYBBQJkWQUCZFQEAmVkCQEBRAIFAmRSBQJkbAQCZWUJAQFEAgUCZFQFAmRtBAJlZgkBAmJZAgUCZWUFAmVkBAJkRAkBAUQCBQJkQwUCZGwEAmRGCQEBRAIFAmRFBQJkbQQCZWcDCQAAAgUCZEIAAAQCZEcFAWUEAmVoBQFlBAJkbwkAdgYJALkCAgUCZWQFAmVlAAAJALYCAQAFAAEAAAUERE9XTgkAlwoFCQEBSAIFAmRvBQFiCQEBSAIFAmVkBQJkbAkBAUgCBQJlZQUCZG0JAQJiWQIJALcCAgUCZEYFAmVlCQC3AgIFAmREBQJlZAUCZWgEAmRHCQECYlkCBQJkRgUCZEQEAmVoCQC8AgMJAQFSAQkAuAICBQJkRwUCZWYFAWQFAmRHBAJlaQkBAUQCBQJkUQUBYgMDCQECIT0CBQJkRwUBZQkAvwICBQJlaAUCZWkHCQACAQkArAICCQCsAgIJAKwCAgIPUHJpY2Ugc2xpcHBhZ2UgCQCmAwEFAmVoAh4gZXhjZWVkZWQgdGhlIHBhc3NlZCBsaW1pdCBvZiAJAKYDAQUCZWkEAmRKCQEBRAIFAmRCBQFiBAJlagkAvQIEBQJlZAkBAmNiAwUCZEYFAmREBQdDRUlMSU5HBQFkBQdDRUlMSU5HBAJlawkAvQIEBQJlZQUBZAkBAmNiAwUCZEYFAmREBQVGTE9PUgUHQ0VJTElORwQCZWwDCQC/AgIFAmVqBQJlZQkAlAoCBQJlawUCZWUJAJQKAgUCZWQFAmVqBAJlbQgFAmVsAl8xBAJlbggFAmVsAl8yBAJkbwkAvQIEBQJkSgUCZW4FAmRGBQVGTE9PUgkAlwoFCQEBSwMFAmRvBQFiBQVGTE9PUgkBAUsDBQJlbQUCZGwFB0NFSUxJTkcJAQFLAwUCZW4FAmRtBQdDRUlMSU5HBQJkRwUCZWgEAmVvCAUCZWcCXzEEAmVwCAUCZWcCXzIEAmVxCAUCZWcCXzMEAmRICQEBSAIIBQJlZwJfNAUBYgQCZXIJAQFIAggFAmVnAl81BQFiAwkAZwIAAAUCZW8JAAIBAjZJbnZhbGlkIGNhbGN1bGF0aW9ucy4gTFAgY2FsY3VsYXRlZCBpcyBsZXNzIHRoYW4gemVyby4EAmVzAwkBASEBBQJkVwAABQJlbwQCZXQJAGUCBQJkUgUCZXAEAmV1CQBlAgUCZFQFAmVxBAJldgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAVcABQJkSAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAVgCBQZoZWlnaHQIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQJkSAkAzAgCCQELU3RyaW5nRW50cnkCCQECYWECBQJhYgUCZHUJAQJiRwoFAmVwBQJlcQUCZXMFAmRIBQJkUQUCZXIFBmhlaWdodAgFCWxhc3RCbG9jawl0aW1lc3RhbXAFAmV0BQJldQUDbmlsCQCfCg0FAmVvBQJlcwUCZEgFAmRDBQJkRQUCZEIFAmR4BQJkQQUCZXYFAmV0BQJldQUCZFMFAmRVAQJldwMCZXgCZXkCZEIEAmV6CQEBRwIFAmV4CQC2AgEFAmJCBAJlQQkBAUcCBQJleQkAtgIBBQJiQwQCZUIJALwCAwkAdgYJALkCAgUCZXoFAmVBAAAJALYCAQAFAAEAEgUERE9XTgUBZwUCZEIDCQAAAgUCZEIFAWYFAWYFAmVCAQJlQwMCZUQCZUUCZUYEAmVHCQC4AgIJALYCAQkBAmJWAQkBAmJyAQUCYnoFAmVEBAJlSAkAuAICCQC2AgEJAQJiVgEJAQJicgEFAmJBBQJlRQQCZUkJALgCAgkAtgIBCAkBBXZhbHVlAQkA7AcBBQJieQhxdWFudGl0eQUCZUYEAmVKCQECZXcDBQJlRwUCZUgFAmVJBQJlSgECZUsDAmVMAmVNAmVGBAJlRwkAZAIJAQJiVgEJAQJicgEFAmJ6BQJlTAQCZUgJAGQCCQECYlYBCQECYnIBBQJiQQUCZU0EAmVJCQBkAggJAQV2YWx1ZQEJAOwHAQUCYnkIcXVhbnRpdHkFAmVGBAJlQgkBAmV3AwkAtgIBBQJlRwkAtgIBBQJlSAkAtgIBBQJlSQQCZU4JAMwIAgkBDEludGVnZXJFbnRyeQIFAmFrBQZoZWlnaHQJAMwIAgkBC1N0cmluZ0VudHJ5AgUCYWoJAKYDAQUCZUIFA25pbAkAlAoCBQJlTgUCZUIBAmVPAAkBC3ZhbHVlT3JFbHNlAgkAmwgCBQJiZAkBAmFIAQkApQgBBQR0aGlzBwECZVACAmVRAmVCAwkAwAICBQJlQgUCZVEGCQECYmEBCQC5CQIJAMwIAgIidXBkYXRlZCBLTHAgbG93ZXIgdGhhbiBjdXJyZW50IEtMcAkAzAgCCQCmAwEFAmVRCQDMCAIJAKYDAQUCZUIFA25pbAIBIAECZVIBAmVTBAJlRwkBAmJWAQkBAmJyAQUCYnoEAmVICQECYlYBCQECYnIBBQJiQQQCZVQIBQJlUwZhbW91bnQEAmVVCQBuBAgFAmVTBmFtb3VudAgFAmVTBXByaWNlBQFiBQVGTE9PUgQCZVYDCQAAAggFAmVTCW9yZGVyVHlwZQUDQnV5CQCUCgIFAmVUCQEBLQEFAmVVCQCUCgIJAQEtAQUCZVQFAmVVBAJlTAgFAmVWAl8xBAJlTQgFAmVWAl8yAwMDCQECYmsABgkAAAIFAmJ4BQFtBgkAAAIFAmJ4BQFuCQACAQIcRXhjaGFuZ2Ugb3BlcmF0aW9ucyBkaXNhYmxlZAMDCQECIT0CCAgFAmVTCWFzc2V0UGFpcgthbW91bnRBc3NldAUCYnoGCQECIT0CCAgFAmVTCWFzc2V0UGFpcgpwcmljZUFzc2V0BQJiQQkAAgECE1dyb25nIG9yZGVyIGFzc2V0cy4EAmVXCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKgDAQkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzBQJhagIBMAkBAmJjAQILaW52YWxpZCBrTHAEAmVYCQECZUsDBQJlTAUCZU0AAAQCZVkIBQJlWAJfMQQCZVoIBQJlWAJfMgQCZmEJAMACAgUCZVoFAmVXBAJmYgkAuQkCCQDMCAICBGtMcD0JAMwIAgkApgMBBQJlVwkAzAgCAggga0xwTmV3PQkAzAgCCQCmAwEFAmVaCQDMCAICFCBhbW91bnRBc3NldEJhbGFuY2U9CQDMCAIJAKQDAQUCZUcJAMwIAgITIHByaWNlQXNzZXRCYWxhbmNlPQkAzAgCCQCkAwEFAmVICQDMCAICGSBhbW91bnRBc3NldEJhbGFuY2VEZWx0YT0JAMwIAgkApAMBBQJlTAkAzAgCAhggcHJpY2VBc3NldEJhbGFuY2VEZWx0YT0JAMwIAgkApAMBBQJlTQkAzAgCAgggaGVpZ2h0PQkAzAgCCQCkAwEFBmhlaWdodAUDbmlsAgAJAJQKAgUCZmEFAmZiAQJmYwECZmQDCQECIT0CCQCQAwEIBQJmZAhwYXltZW50cwABCQACAQIdZXhhY3RseSAxIHBheW1lbnQgaXMgZXhwZWN0ZWQEAmZlCQEFdmFsdWUBCQCRAwIIBQJmZAhwYXltZW50cwAABAJkdgkBBXZhbHVlAQgFAmZlB2Fzc2V0SWQEAmZmCAUCZmUGYW1vdW50BAJlZwkBAmR0BAkA2AQBCAUCZmQNdHJhbnNhY3Rpb25JZAkA2AQBBQJkdgUCZmYIBQJmZAZjYWxsZXIEAmRNCAUCZWcCXzEEAmROCAUCZWcCXzIEAmRPCAUCZWcDXzEwBAJmZwMJAQEhAQkBAmJqAQgFAmZkBmNhbGxlcgMJAQJiawAGCQAAAgUCYngFAW4HAwUCZmcJAAIBCQCsAgICLEdldCBvcGVyYXRpb24gaXMgYmxvY2tlZCBieSBhZG1pbi4gU3RhdHVzID0gCQCkAwEFAmJ4CQCXCgUFAmRNBQJkTgUCZmYFAmR2BQJkTwECZmgDAmZkAmRRAmRXAwkBAiE9AgkAkAMBCAUCZmQIcGF5bWVudHMAAgkAAgECH2V4YWN0bHkgMiBwYXltZW50cyBhcmUgZXhwZWN0ZWQEAmZpCQEFdmFsdWUBCQCRAwIIBQJmZAhwYXltZW50cwAABAJmagkBBXZhbHVlAQkAkQMCCAUCZmQIcGF5bWVudHMAAQQCZmsJAQJkUAkJANgEAQgFAmZkDXRyYW5zYWN0aW9uSWQFAmRRCAUCZmkGYW1vdW50CAUCZmkHYXNzZXRJZAgFAmZqBmFtb3VudAgFAmZqB2Fzc2V0SWQJAKUIAQgFAmZkBmNhbGxlcgcFAmRXBAJmbAMJAQEhAQkBAmJqAQgFAmZkBmNhbGxlcgMDCQECYmsABgkAAAIFAmJ4BQFsBgkAAAIFAmJ4BQFuBwMFAmZsCQACAQkArAICAixQdXQgb3BlcmF0aW9uIGlzIGJsb2NrZWQgYnkgYWRtaW4uIFN0YXR1cyA9IAkApAMBBQJieAUCZmsBAmZtAQJjaAQCZm4JAPwHBAUCYmQCBGVtaXQJAMwIAgUCY2gFA25pbAUDbmlsAwkAAAIFAmZuBQJmbgQCZm8EAmFRBQJmbgMJAAECBQJhUQIHQWRkcmVzcwQCZnAFAmFRCQD8BwQFAmZwAgRlbWl0CQDMCAIFAmNoBQNuaWwFA25pbAUEdW5pdAMJAAACBQJmbwUCZm8FAmNoCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQJmcQICY2gCYWkEAmZyAwkAAAIFAmFpAAAAAAkAawMFAmNoBQJhaQUBYgkAlAoCCQBlAgUCY2gFAmZyBQJmcgECZnMEAmZ0AmZ1AmFiAmFjBAJmdgkAAAIFAmFjBQR1bml0BAJmdwkBAmJWAQkBAmJyAQUCYnoEAmZ4CQECYlYBCQECYnIBBQJiQQQCZnkDCQAAAgUCZnUFAmJ6BgMJAAACBQJmdQUCYkEHCQECYmEBAg1pbnZhbGlkIGFzc2V0BAJmegMFAmZ2CQCUCgIFAmZ3BQJmeAMFAmZ5CQCUCgIJAGUCBQJmdwUCZnQFAmZ4CQCUCgIFAmZ3CQBlAgUCZngFAmZ0BAJmQQgFAmZ6Al8xBAJmQggFAmZ6Al8yBAJmQwMFAmZ5CQCUCgIFAmZ0AAAJAJQKAgAABQJmdAQCZkQIBQJmQwJfMQQCZkUIBQJmQwJfMgQCZVQICQECZnECBQJmRAUCYmYCXzEEAmVVCAkBAmZxAgUCZkUFAmJmAl8xBAJmRgkBAmZxAgUCZnQFAmJmBAJmRwgFAmZGAl8xBAJmcggFAmZGAl8yBAJmSAkAZAIFAmZBBQJlVAQCZkkJAGQCBQJmQgUCZVUEAmZKCQECYlkCCQEBRAIFAmZJBQJiQwkBAUQCBQJmSAUCYkIEAmZLCQEBSAIFAmZKBQFiBAJmTAMFAmZ5BQJmQQUCZkIEAmZNCQC2AgEFAmZMBAJmTgkAtgIBCAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDsBwEFAmJ5CQCsAgIJAKwCAgIGYXNzZXQgCQDYBAEFAmJ5Ag4gZG9lc24ndCBleGlzdAhxdWFudGl0eQQCZk8DCQC/AgIFAmZOBQFmBgkBAmJhAQIiaW5pdGlhbCBkZXBvc2l0IHJlcXVpcmVzIGFsbCBjb2lucwMJAAACBQJmTwUCZk8EAmZQCQC2AgEFAmZHBAJmUQkAlgMBCQDMCAIAAAkAzAgCCQCgAwEJALoCAgkAuQICBQJmTgkAuAICCQEKc3FydEJpZ0ludAQJALcCAgUBZAkAugICCQC5AgIFAmZQBQFkBQJmTQASABIFBERPV04FAWQFAWQFA25pbAQCZXYDBQJmdgUDbmlsCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBVwAFAmZLCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBWAIFBmhlaWdodAgFCWxhc3RCbG9jawl0aW1lc3RhbXAFAmZLCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJhYQIJAKUIAQkBBXZhbHVlAQUCYWIJANgEAQkBBXZhbHVlAQUCYWMJAQJiRwoFAmZEBQJmRQUCZlEFAmZLAAAAAAUGaGVpZ2h0CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAAAAAAFA25pbAQCZlIJAQJiWQIJAQFEAgUCZkIFAmJDCQEBRAIFAmZBBQJiQgQCZlMJAQFIAgUCZlIFAWIEAmZUBAJmVQMFAmZ5CQCUCgIFAmZEBQJmQQkAlAoCBQJmRQUCZkIEAmNoCAUCZlUCXzEEAmZWCAUCZlUCXzIEAmZXCQCgAwEJALwCAwUCZk4JALYCAQkAaQIFAmNoAAIJALYCAQUCZlYJAGsDCQBlAgUCZlEFAmZXBQFiBQJmVwkAlwoFBQJmUQUCZXYFAmZyBQJmVAUCZnkJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BAmZYBQJmWQJmRwJmdQJhYgJhYwQCZnYJAAACBQJhYwUEdW5pdAQCZGsJAQJibQAEAmRsCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCZGsFAXQEAmRtCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCZGsFAXUEAmZaCQDMCAIDCQAAAgUCZnUFAmJ5BgkBAmJhAQIQaW52YWxpZCBscCBhc3NldAUDbmlsAwkAAAIFAmZaBQJmWgQCZ2EDCQAAAgUCZlkFAmJ6BgMJAAACBQJmWQUCYkEHCQECYmEBAg1pbnZhbGlkIGFzc2V0BAJnYgMFAmdhCQC2AgEJAQJiVgEJAQJicgEFAmJ6CQC2AgEJAQJiVgEJAQJicgEFAmJBBAJnYwMFAmdhBQJkbAUCZG0EAmdkCQECYlYBCQECYnIBBQJiegQCZ2UJAQJiVgEJAQJicgEFAmJBBAJnZgMFAmdhBQJnZAUCZ2UEAmdnCQC2AgEFAmdmBAJmTgkAtgIBCAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDsBwEFAmJ5CQCsAgIJAKwCAgIGYXNzZXQgCQDYBAEFAmJ5Ag4gZG9lc24ndCBleGlzdAhxdWFudGl0eQQCZ2gJALYCAQUCZkcEAmdpCQCWAwEJAMwIAgAACQDMCAIJAKADAQkAugICCQC5AgIFAmdiCQC4AgIFAWQJAHYGCQC4AgIFAWQJALoCAgkAuQICBQJnaAUBZAUCZk4AEgUBaAAAABIFBERPV04FAWQFA25pbAQCZ2oJAQJmcQIFAmdpBQJiaAQCZ2sIBQJnagJfMQQCZnIIBQJnagJfMgQCZ2wDBQJnYQkAlgoEBQJnawAACQBlAgUCZ2QFAmdpBQJnZQkAlgoEAAAFAmdrBQJnZAkAZQIFAmdlBQJnaQQCZ20IBQJnbAJfMQQCZ24IBQJnbAJfMgQCZ28IBQJnbAJfMwQCZ3AIBQJnbAJfNAQCZkoJAQJiWQIJAQFEAgUCZ3AFAmJDCQEBRAIFAmdvBQJiQgQCZksJAQFIAgUCZkoFAWIEAmV2AwUCZnYFA25pbAkAzAgCCQELU3RyaW5nRW50cnkCCQECYWQCCQClCAEJAQV2YWx1ZQEFAmFiCQDYBAEJAQV2YWx1ZQEFAmFjCQECYlIGBQJnbQUCZ24FAmZHBQJmSwUGaGVpZ2h0CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAVcABQJmSwkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAVgCBQZoZWlnaHQIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQJmSwUDbmlsBAJmUgkBAmJZAgkBAUQCBQJnZQUCYkMJAQFEAgUCZ2QFAmJCBAJmUwkBAUgCBQJmUgUBYgQCZlQEAmdxCQBoAgkAoAMBCQC8AgMFAmdiBQJnaAUCZk4AAgkAawMJAGUCBQJnawUCZ3EFAWIFAmdxCQCXCgUFAmdrBQJldgUCZnIFAmZUBQJnYQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgECZ3IABAJncwkBAmFTAAQCYVEJAJ0IAgUCZ3MJAQFVAAMJAAECBQJhUQIGU3RyaW5nBAJhVgUCYVEJANkEAQUCYVYDCQABAgUCYVECBFVuaXQFBHVuaXQJAAIBAgtNYXRjaCBlcnJvcgECZ3QBAmZkBAJhUQkBAmdyAAMJAAECBQJhUQIKQnl0ZVZlY3RvcgQCZ3UFAmFRCQAAAggFAmZkD2NhbGxlclB1YmxpY0tleQUCZ3UDCQABAgUCYVECBFVuaXQJAAACCAUCZmQGY2FsbGVyBQR0aGlzCQACAQILTWF0Y2ggZXJyb3IBAmd2AQJmZAQCZ3cJAAIBAhFQZXJtaXNzaW9uIGRlbmllZAQCYVEJAQJncgADCQABAgUCYVECCkJ5dGVWZWN0b3IEAmd1BQJhUQMJAAACCAUCZmQPY2FsbGVyUHVibGljS2V5BQJndQYFAmd3AwkAAQIFAmFRAgRVbml0AwkAAAIIBQJmZAZjYWxsZXIFBHRoaXMGBQJndwkAAgECC01hdGNoIGVycm9yHAJmZAEJcmViYWxhbmNlAAkAzggCCQECY0sBCQECYVcCBQR0aGlzCQECYWUACQECY0sBCQECYVcCBQR0aGlzCQECYWYAAmZkASFjYWxjdWxhdGVBbW91bnRPdXRGb3JTd2FwUkVBRE9OTFkDAmd4Amd5Amd6BAJnQQMJAAACBQJneQcEAmdCCQECYVcCBQR0aGlzCQECYWYABAJnQwkBAmFXAgUEdGhpcwkBAmFlAAkAlAoCBQJnQgUCZ0MEAmdCCQECYVcCBQR0aGlzCQECYWUABAJnQwkBAmFXAgUEdGhpcwkBAmFmAAkAlAoCBQJnQgUCZ0MEAmdCCAUCZ0ECXzEEAmdDCAUCZ0ECXzIEAmdECQECYlYBBQJnQwQCZ0UJAQJiVgEFAmdCBAJnRgkAawMFAmdFBQJneAkAZAIFAmdEBQJneAQCZ0cJALkCAgkAtgIBBQJnRAkAtgIBBQJnRQQCZ0gJALkCAgkAtwICCQC3AgIJALYCAQkBAmJWAQUCZ0MJALYCAQUCZ3gJALYCAQUCZ3oJALgCAgkAtgIBCQECYlYBBQJnQgkAtgIBBQJnRgQCZ0kDCQDAAgIFAmdIBQJnRwYJAAIBAhRuZXcgSyBpcyBmZXdlciBlcnJvcgMJAAACBQJnSQUCZ0kJAJQKAgUDbmlsBQJnRgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJmZAEmY2FsY3VsYXRlQW1vdW50T3V0Rm9yU3dhcEFuZFNlbmRUb2tlbnMFAmd4Amd5AmdKAmdLAmd6BAJnTAoAAmJnCQD8BwQFAmJkAhdnZXRTd2FwQ29udHJhY3RSRUFET05MWQUDbmlsBQNuaWwDCQABAgUCYmcCBlN0cmluZwUCYmcJAAIBCQCsAgIJAAMBBQJiZwIbIGNvdWxkbid0IGJlIGNhc3QgdG8gU3RyaW5nBAJnTQoAAmJnCQD8BwQFAmJkAhppc1Bvb2xTd2FwRGlzYWJsZWRSRUFET05MWQkAzAgCCQClCAEFBHRoaXMFA25pbAUDbmlsAwkAAQIFAmJnAgdCb29sZWFuBQJiZwkAAgEJAKwCAgkAAwEFAmJnAhwgY291bGRuJ3QgYmUgY2FzdCB0byBCb29sZWFuBAJnTgMJAQEhAQkBAmJqAQgFAmZkBmNhbGxlcgMDCQECYmsABgkAAAIFAmJ4BQFuBgUCZ00HBAJmWgkAzAgCAwMJAQEhAQUCZ04GCQECZ3QBBQJmZAYJAQJiYQECInN3YXAgb3BlcmF0aW9uIGlzIGJsb2NrZWQgYnkgYWRtaW4JAMwIAgMJAGcCCAkBBXZhbHVlAQkAkQMCCAUCZmQIcGF5bWVudHMAAAZhbW91bnQFAmd4BgkBAmJhAQIMV3JvbmcgYW1vdW50CQDMCAIDCQAAAggFAmZkBmNhbGxlcgkBEUBleHRyTmF0aXZlKDEwNjIpAQUCZ0wGCQECYmEBAhFQZXJtaXNzaW9uIGRlbmllZAUDbmlsAwkAAAIFAmZaBQJmWgQCZmUJAQV2YWx1ZQEJAJEDAggFAmZkCHBheW1lbnRzAAAEAmdDCQECYnIBCAUCZmUHYXNzZXRJZAQCZ0IDCQAAAgUCZ3kHCQECYVcCBQR0aGlzCQECYWYACQECYVcCBQR0aGlzCQECYWUABAJnRAkAZQIJAGUCCQECYlYBBQJnQwgJAQV2YWx1ZQEJAJEDAggFAmZkCHBheW1lbnRzAAAGYW1vdW50BQJnegQCZ0UJAQJiVgEFAmdCBAJnRgkAawMFAmdFBQJneAkAZAIFAmdEBQJneAQCZ0cJALkCAgkAtgIBBQJnRAkAtgIBBQJnRQQCZ0gJALkCAgkAtwICCQC2AgEJAQJiVgEFAmdDCQC2AgEFAmd6CQC4AgIJALYCAQkBAmJWAQUCZ0IJALYCAQUCZ0YEAmdJAwkAwAICBQJnSAUCZ0cGCQACAQIUbmV3IEsgaXMgZmV3ZXIgZXJyb3IDCQAAAgUCZ0kFAmdJBAJnTwMJAGcCBQJnRgUCZ0oGCQACAQIsRXhjaGFuZ2UgcmVzdWx0IGlzIGZld2VyIGNvaW5zIHRoYW4gZXhwZWN0ZWQDCQAAAgUCZ08FAmdPBAJlTAMFAmd5CQEBLQEFAmdGBQJnegQCZU0DBQJneQUCZ3oJAQEtAQUCZ0YEAmdQCAkBAmVLAwUCZUwFAmVNAAACXzEDCQAAAgUCZ1AFAmdQBAJnUQkBAmNLAQUCZ0MDCQAAAgUCZ1EFAmdRBAJnUgkBAmNSAgUCZ0IFAmdGAwkAAAIFAmdSBQJnUgkAlAoCCQDOCAIJAM4IAgUCZ1IFAmdRCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEFAmdLBQJnRgkBAmJwAQUCZ0IFA25pbAUCZ0YJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZmQBA3B1dAICZFECZ1MDCQBmAgAABQJkUQkAAgECIEludmFsaWQgc2xpcHBhZ2VUb2xlcmFuY2UgcGFzc2VkBAJmawkBAmZoAwUCZmQFAmRRBgQCZXMIBQJmawJfMgQCZHgIBQJmawJfNwQCZE8IBQJmawJfOQQCZXQIBQJmawNfMTAEAmV1CAUCZmsDXzExBAJnVAgFAmZrA18xMgQCZ1UIBQJmawNfMTMEAmZpCQC2AgEICQEFdmFsdWUBCQCRAwIIBQJmZAhwYXltZW50cwAABmFtb3VudAQCZmoJALYCAQgJAQV2YWx1ZQEJAJEDAggFAmZkCHBheW1lbnRzAAEGYW1vdW50BAJlSgkBAmVDAwUCZmkFAmZqCQC2AgEAAAMJAAACBQJlSgUCZUoEAmZuCQD8BwQFAmJkAgRlbWl0CQDMCAIFAmVzBQNuaWwFA25pbAMJAAACBQJmbgUCZm4EAmZvBAJhUQUCZm4DCQABAgUCYVECB0FkZHJlc3MEAmZwBQJhUQkA/AcEBQJmcAIEZW1pdAkAzAgCBQJlcwUDbmlsBQNuaWwFBHVuaXQDCQAAAgUCZm8FAmZvBAJnVgMJAGYCBQJldAAACQD8BwQFAmJGAgNwdXQFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCZ1QFAmV0BQNuaWwFA25pbAMJAAACBQJnVgUCZ1YEAmdXAwkAZgIFAmV1AAAJAPwHBAUCYkYCA3B1dAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQJnVQUCZXUFA25pbAUDbmlsAwkAAAIFAmdXBQJnVwQCZ1gDBQJnUwQCZ1kJAPwHBAUCYkUCBXN0YWtlBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmR4BQJlcwUDbmlsAwkAAAIFAmdZBQJnWQUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQJmZAZjYWxsZXIFAmVzBQJkeAUDbmlsBAJnWgkBAmVLAwAAAAAAAAMJAAACBQJnWgUCZ1oEAmVCCAUCZ1oCXzIEAmdQCAUCZ1oCXzEEAmhhCQECZVACBQJlSgUCZUIDCQAAAgUCaGEFAmhhBAJoYgkA/AcEBQR0aGlzAglyZWJhbGFuY2UFA25pbAUDbmlsAwkAAAIFAmhiBQJoYgkAzggCCQDOCAIFAmRPBQJnWAUCZ1AJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZmQBCnB1dEZvckZyZWUBAmhjAwkAZgIAAAUCaGMJAAIBAhRJbnZhbGlkIHZhbHVlIHBhc3NlZAQCZmsJAQJmaAMFAmZkBQJoYwcEAmRPCAUCZmsCXzkEAmZpCQC2AgEICQEFdmFsdWUBCQCRAwIIBQJmZAhwYXltZW50cwAABmFtb3VudAQCZmoJALYCAQgJAQV2YWx1ZQEJAJEDAggFAmZkCHBheW1lbnRzAAEGYW1vdW50BAJlSgkBAmVDAwUCZmkFAmZqCQC2AgEAAAMJAAACBQJlSgUCZUoEAmhkCQECZUsDAAAAAAAABAJnUAgFAmhkAl8xBAJlQggFAmhkAl8yBAJoYQkBAmVQAgUCZUoFAmVCAwkAAAIFAmhhBQJoYQkAzggCBQJkTwUCZ1AJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZmQBCXB1dE9uZVRrbgICaGUCaGYEAmhnCgACYmcJAPwHBAUCYmQCKGlzUG9vbE9uZVRva2VuT3BlcmF0aW9uc0Rpc2FibGVkUkVBRE9OTFkJAMwIAgkApQgBBQR0aGlzBQNuaWwFA25pbAMJAAECBQJiZwIHQm9vbGVhbgUCYmcJAAIBCQCsAgIJAAMBBQJiZwIcIGNvdWxkbid0IGJlIGNhc3QgdG8gQm9vbGVhbgQCZmwDCQEBIQEJAQJiagEIBQJmZAZjYWxsZXIDAwMJAQJiawAGCQAAAgUCYngFAWwGCQAAAgUCYngFAW4GBQJoZwcEAmZaCQDMCAIDAwkBASEBBQJmbAYJAQJndAEFAmZkBgkBAmJhAQIhcHV0IG9wZXJhdGlvbiBpcyBibG9ja2VkIGJ5IGFkbWluCQDMCAIDCQAAAgkAkAMBCAUCZmQIcGF5bWVudHMAAQYJAQJiYQECHmV4YWN0bHkgMSBwYXltZW50IGFyZSBleHBlY3RlZAUDbmlsAwkAAAIFAmZaBQJmWgQCaGgJAJEDAggFAmZkCHBheW1lbnRzAAAEAmZ1CAUCaGgHYXNzZXRJZAQCZnQIBQJoaAZhbW91bnQEAmVKAwkAAAIFAmZ1BQJiegkBAmVDAwkAtgIBBQJmdAkAtgIBAAAJALYCAQAAAwkAAAIFAmZ1BQJiQQkBAmVDAwkAtgIBAAAJALYCAQUCZnQJALYCAQAACQECYmEBAh5wYXltZW50IGFzc2V0IGlzIG5vdCBzdXBwb3J0ZWQDCQAAAgUCZUoFAmVKBAJhYggFAmZkBmNhbGxlcgQCYWMIBQJmZA10cmFuc2FjdGlvbklkBAJoaQkBAmZzBAUCZnQFAmZ1BQJhYgUCYWMDCQAAAgUCaGkFAmhpBAJmeQgFAmhpAl81BAJoaggFAmhpAl80BAJmcggFAmhpAl8zBAJldggFAmhpAl8yBAJoawgFAmhpAl8xBAJobAMDCQBmAgUCaGUAAAkAZgIFAmhlBQJoawcJAQJiYQEJALkJAgkAzAgCAh9hbW91bnQgdG8gcmVjZWl2ZSBpcyBsZXNzIHRoYW4gCQDMCAIJAKQDAQUCaGUFA25pbAIABQJoawQCZm4JAQJmbQEFAmhsAwkAAAIFAmZuBQJmbgQCZ1gDBQJoZgQCaG0JAPwHBAUCYkUCBXN0YWtlBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmJ5BQJobAUDbmlsAwkAAAIFAmhtBQJobQUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQJmZAZjYWxsZXIFAmhsBQJieQUDbmlsBAJobgMJAGYCBQJmcgAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFAmJlBQJmcgUCZnUFA25pbAUDbmlsBAJobwMJAAACBQR0aGlzBQJiZQkAlAoCAAAAAAMFAmZ5CQCUCgIJAQEtAQUCZnIAAAkAlAoCAAAJAQEtAQUCZnIEAmVMCAUCaG8CXzEEAmVNCAUCaG8CXzIEAmhwCQECZUsDBQJlTAUCZU0AAAQCZ1AIBQJocAJfMQQCZUIIBQJocAJfMgQCZVcJAQV2YWx1ZQEJAKIIAQUCYWoEAmhhCQECZVACBQJlSgUCZUIDCQAAAgUCaGEFAmhhBAJoYgkA/AcEBQR0aGlzAglyZWJhbGFuY2UFA25pbAUDbmlsAwkAAAIFAmhiBQJoYgkAlAoCCQDOCAIJAM4IAgkAzggCBQJldgUCZ1gFAmhuBQJnUAUCaGwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZmQBEXB1dE9uZVRrblJFQURPTkxZAgJmdQJmdAQCaHEJAQJmcwQFAmZ0CQECYnABBQJmdQUEdW5pdAUEdW5pdAQCaGsIBQJocQJfMQQCZXYIBQJocQJfMgQCZnIIBQJocQJfMwQCaGoIBQJocQJfNAQCZnkIBQJocQJfNQkAlAoCBQNuaWwJAJUKAwUCaGsFAmZyBQJoagJmZAEJZ2V0T25lVGtuAgJocgJoZQQCaGcKAAJiZwkA/AcEBQJiZAIoaXNQb29sT25lVG9rZW5PcGVyYXRpb25zRGlzYWJsZWRSRUFET05MWQkAzAgCCQClCAEFBHRoaXMFA25pbAUDbmlsAwkAAQIFAmJnAgdCb29sZWFuBQJiZwkAAgEJAKwCAgkAAwEFAmJnAhwgY291bGRuJ3QgYmUgY2FzdCB0byBCb29sZWFuBAJmZwMJAQEhAQkBAmJqAQgFAmZkBmNhbGxlcgMDCQECYmsABgkAAAIFAmJ4BQFuBgUCaGcHBAJmWgkAzAgCAwMJAQEhAQUCZmcGCQECZ3QBBQJmZAYJAQJiYQECIWdldCBvcGVyYXRpb24gaXMgYmxvY2tlZCBieSBhZG1pbgkAzAgCAwkAAAIJAJADAQgFAmZkCHBheW1lbnRzAAEGCQECYmEBAh5leGFjdGx5IDEgcGF5bWVudCBhcmUgZXhwZWN0ZWQFA25pbAMJAAACBQJmWgUCZloEAmZZCQECYnABBQJocgQCaGgJAJEDAggFAmZkCHBheW1lbnRzAAAEAmZ1CAUCaGgHYXNzZXRJZAQCZkcIBQJoaAZhbW91bnQEAmVKCQECZUMDCQC2AgEAAAkAtgIBAAAJALYCAQAAAwkAAAIFAmVKBQJlSgQCYWIIBQJmZAZjYWxsZXIEAmFjCAUCZmQNdHJhbnNhY3Rpb25JZAQCaHMJAQJmWAUFAmZZBQJmRwUCZnUFAmFiBQJhYwMJAAACBQJocwUCaHMEAmdhCAUCaHMCXzUEAmhqCAUCaHMCXzQEAmZyCAUCaHMCXzMEAmV2CAUCaHMCXzIEAmh0CAUCaHMCXzEEAmNoAwMJAGYCBQJoZQAACQBmAgUCaGUFAmh0BwkBAmJhAQkAuQkCCQDMCAICH2Ftb3VudCB0byByZWNlaXZlIGlzIGxlc3MgdGhhbiAJAMwIAgkApAMBBQJoZQUDbmlsAgAFAmh0BAJodQkA/AcEBQJiZAIEYnVybgkAzAgCBQJmRwUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQJmdQUCZkcFA25pbAMJAAACBQJodQUCaHUEAmdSCQECY1ICBQJocgkAZAIFAmNoCQCWAwEJAMwIAgAACQDMCAIFAmZyBQNuaWwEAmh2CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFAmFiBQJjaAUCZlkFA25pbAQCaG4DCQBmAgUCZnIAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQJiZQUCZnIFAmZZBQNuaWwFA25pbAQCaHcEAmh4AwkAAAIFBHRoaXMFAmJlAAAFAmZyAwUCZ2EJAJQKAgkBAS0BCQBkAgUCY2gFAmh4AAAJAJQKAgAACQEBLQEJAGQCBQJjaAUCaHgEAmVMCAUCaHcCXzEEAmVNCAUCaHcCXzIEAmh5CQECZUsDBQJlTAUCZU0AAAQCZ1AIBQJoeQJfMQQCZUIIBQJoeQJfMgQCaGEJAQJlUAIFAmVKBQJlQgMJAAACBQJoYQUCaGEJAJQKAgkAzggCCQDOCAIJAM4IAgkAzggCBQJldgUCZ1IFAmh2BQJobgUCZ1AFAmNoCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmZkARFnZXRPbmVUa25SRUFET05MWQICZlkCZkcEAmh6CQECZlgFCQECYnABBQJmWQUCZkcFAmJ5BQR1bml0BQR1bml0BAJodAgFAmh6Al8xBAJldggFAmh6Al8yBAJmcggFAmh6Al8zBAJoaggFAmh6Al80BAJnYQgFAmh6Al81CQCUCgIFA25pbAkAlQoDBQJodAUCZnIFAmhqAmZkARN1bnN0YWtlQW5kR2V0T25lVGtuAwJoQQJocgJoZQQCaGcKAAJiZwkA/AcEBQJiZAIoaXNQb29sT25lVG9rZW5PcGVyYXRpb25zRGlzYWJsZWRSRUFET05MWQkAzAgCCQClCAEFBHRoaXMFA25pbAUDbmlsAwkAAQIFAmJnAgdCb29sZWFuBQJiZwkAAgEJAKwCAgkAAwEFAmJnAhwgY291bGRuJ3QgYmUgY2FzdCB0byBCb29sZWFuBAJmZwMJAQEhAQkBAmJqAQgFAmZkBmNhbGxlcgMDCQECYmsABgkAAAIFAmJ4BQFuBgUCaGcHBAJmWgkAzAgCAwMJAQEhAQUCZmcGCQECZ3QBBQJmZAYJAQJiYQECIWdldCBvcGVyYXRpb24gaXMgYmxvY2tlZCBieSBhZG1pbgkAzAgCAwkAAAIJAJADAQgFAmZkCHBheW1lbnRzAAAGCQECYmEBAhhubyBwYXltZW50cyBhcmUgZXhwZWN0ZWQFA25pbAMJAAACBQJmWgUCZloEAmZZCQECYnABBQJocgQCYWIIBQJmZAZjYWxsZXIEAmFjCAUCZmQNdHJhbnNhY3Rpb25JZAQCZUoJAQJlQwMJALYCAQAACQC2AgEAAAkAtgIBAAADCQAAAgUCZUoFAmVKBAJoQgkA/AcEBQJiRQIHdW5zdGFrZQkAzAgCCQDYBAEFAmJ5CQDMCAIFAmhBBQNuaWwFA25pbAMJAAACBQJoQgUCaEIEAmhDCQECZlgFBQJmWQUCaEEFAmJ5BQJhYgUCYWMDCQAAAgUCaEMFAmhDBAJnYQgFAmhDAl81BAJoaggFAmhDAl80BAJmcggFAmhDAl8zBAJldggFAmhDAl8yBAJodAgFAmhDAl8xBAJjaAMDCQBmAgUCaGUAAAkAZgIFAmhlBQJodAcJAQJiYQEJALkJAgkAzAgCAh9hbW91bnQgdG8gcmVjZWl2ZSBpcyBsZXNzIHRoYW4gCQDMCAIJAKQDAQUCaGUFA25pbAIABQJodAQCaHUJAPwHBAUCYmQCBGJ1cm4JAMwIAgUCaEEFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCYnkFAmhBBQNuaWwDCQAAAgUCaHUFAmh1BAJnUgkBAmNSAgUCaHIJAGQCBQJjaAkAlgMBCQDMCAIAAAkAzAgCBQJmcgUDbmlsBAJodgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUCZmQGY2FsbGVyBQJjaAUCZlkFA25pbAQCaG4DCQBmAgUCZnIAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQJiZQUCZnIFAmZZBQNuaWwFA25pbAQCaEQEAmh4AwkAAAIFBHRoaXMFAmJlAAAFAmZyAwUCZ2EJAJQKAgkBAS0BCQBkAgUCY2gFAmh4AAAJAJQKAgAACQEBLQEJAGQCBQJjaAUCaHgEAmVMCAUCaEQCXzEEAmVNCAUCaEQCXzIEAmhFCQECZUsDBQJlTAUCZU0AAAQCZ1AIBQJoRQJfMQQCZUIIBQJoRQJfMgQCaGEJAQJlUAIFAmVKBQJlQgMJAAACBQJoYQUCaGEJAJQKAgkAzggCCQDOCAIJAM4IAgkAzggCBQJldgUCZ1IFAmh2BQJobgUCZ1AFAmNoCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmZkAQNnZXQABAJlZwkBAmZjAQUCZmQEAmRNCAUCZWcCXzEEAmROCAUCZWcCXzIEAmZmCAUCZWcCXzMEAmR2CAUCZWcCXzQEAmRPCAUCZWcCXzUEAmdSCQECY1cCBQJkTQUCZE4EAmVKCQECZUMDCQC2AgEAAAkAtgIBAAAJALYCAQAAAwkAAAIFAmVKBQJlSgQCaEYJAPwHBAUCYmQCBGJ1cm4JAMwIAgUCZmYFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCZHYFAmZmBQNuaWwDCQAAAgUCaEYFAmhGBAJoRwkBAmVLAwkBAS0BBQJkTQkBAS0BBQJkTgAABAJnUAgFAmhHAl8xBAJlQggFAmhHAl8yBAJoYQkBAmVQAgUCZUoFAmVCAwkAAAIFAmhhBQJoYQkAzggCCQDOCAIFAmdSBQJkTwUCZ1AJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZmQBCWdldE5vTGVzcwICaEgCaEkEAmVnCQECZmMBBQJmZAQCZE0IBQJlZwJfMQQCZE4IBQJlZwJfMgQCZmYIBQJlZwJfMwQCZHYIBQJlZwJfNAQCZE8IBQJlZwJfNQMJAGYCBQJoSAUCZE0JAAIBCQCsAgIJAKwCAgkArAICAhxub0xlc3NUaGVuQW10QXNzZXQgZmFpbGVkOiAgCQCkAwEFAmRNAgMgPCAJAKQDAQUCaEgDCQBmAgUCaEkFAmROCQACAQkArAICCQCsAgIJAKwCAgIdbm9MZXNzVGhlblByaWNlQXNzZXQgZmFpbGVkOiAJAKQDAQUCZE4CAyA8IAkApAMBBQJoSQQCZ1IJAQJjVwIFAmRNBQJkTgQCZUoJAQJlQwMJALYCAQAACQC2AgEAAAkAtgIBAAADCQAAAgUCZUoFAmVKBAJoRgkA/AcEBQJiZAIEYnVybgkAzAgCBQJmZgUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQJkdgUCZmYFA25pbAMJAAACBQJoRgUCaEYEAmhKCQECZUsDCQEBLQEFAmRNCQEBLQEFAmROAAAEAmdQCAUCaEoCXzEEAmVCCAUCaEoCXzIEAmhhCQECZVACBQJlSgUCZUIDCQAAAgUCaGEFAmhhCQDOCAIJAM4IAgUCZ1IFAmRPBQJnUAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJmZAENdW5zdGFrZUFuZEdldAECY2gEAmhLAwkBAiE9AgkAkAMBCAUCZmQIcGF5bWVudHMAAAkAAgECGE5vIHBheW1lbnRzIGFyZSBleHBlY3RlZAYDCQAAAgUCaEsFAmhLBAJkawkBAmJtAAQCZHgJANkEAQkAkQMCBQJkawUBcQQCZUoJAQJlQwMJALYCAQAACQC2AgEAAAkAtgIBAAADCQAAAgUCZUoFAmVKBAJoQgkA/AcEBQJiRQIHdW5zdGFrZQkAzAgCCQDYBAEFAmR4CQDMCAIFAmNoBQNuaWwFA25pbAMJAAACBQJoQgUCaEIEAmVnCQECZHQECQDYBAEIBQJmZA10cmFuc2FjdGlvbklkCQDYBAEFAmR4BQJjaAgFAmZkBmNhbGxlcgQCZE0IBQJlZwJfMQQCZE4IBQJlZwJfMgQCZEEJAQ1wYXJzZUludFZhbHVlAQgFAmVnAl85BAJkTwgFAmVnA18xMAQCZ1IJAQJjVwIFAmRNBQJkTgQCZmcDCQEBIQEJAQJiagEIBQJmZAZjYWxsZXIDCQECYmsABgkAAAIFAmJ4BQFuBwQCaEwDBQJmZwkAAgEJAKwCAgIsR2V0IG9wZXJhdGlvbiBpcyBibG9ja2VkIGJ5IGFkbWluLiBTdGF0dXMgPSAJAKQDAQUCZEEGAwkAAAIFAmhMBQJoTAQCaEYJAPwHBAUCYmQCBGJ1cm4JAMwIAgUCY2gFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCZHgFAmNoBQNuaWwDCQAAAgUCaEYFAmhGBAJoTQkBAmVLAwkBAS0BBQJkTQkBAS0BBQJkTgAABAJnUAgFAmhNAl8xBAJlQggFAmhNAl8yBAJoYQkBAmVQAgUCZUoFAmVCAwkAAAIFAmhhBQJoYQkAzggCCQDOCAIFAmdSBQJkTwUCZ1AJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZmQBE3Vuc3Rha2VBbmRHZXROb0xlc3MDAmhBAmhOAmhJBAJmZwMJAQEhAQkBAmJqAQgFAmZkBmNhbGxlcgMJAQJiawAGCQAAAgUCYngFAW4HBAJmWgkAzAgCAwkBASEBBQJmZwYJAAIBAiFnZXQgb3BlcmF0aW9uIGlzIGJsb2NrZWQgYnkgYWRtaW4JAMwIAgMJAAACCQCQAwEIBQJmZAhwYXltZW50cwAABgkAAgECGG5vIHBheW1lbnRzIGFyZSBleHBlY3RlZAUDbmlsAwkAAAIFAmZaBQJmWgQCZUoJAQJlQwMJALYCAQAACQC2AgEAAAkAtgIBAAADCQAAAgUCZUoFAmVKBAJoQgkA/AcEBQJiRQIHdW5zdGFrZQkAzAgCCQDYBAEFAmJ5CQDMCAIFAmhBBQNuaWwFA25pbAMJAAACBQJoQgUCaEIEAmVnCQECZHQECQDYBAEIBQJmZA10cmFuc2FjdGlvbklkCQDYBAEFAmJ5BQJoQQgFAmZkBmNhbGxlcgQCZE0IBQJlZwJfMQQCZE4IBQJlZwJfMgQCZE8IBQJlZwNfMTAEAmdSCQECY1cCBQJkTQUCZE4EAmhPCQDMCAIDCQBnAgUCZE0FAmhOBgkAAgEJALkJAgkAzAgCAixhbW91bnQgYXNzZXQgYW1vdW50IHRvIHJlY2VpdmUgaXMgbGVzcyB0aGFuIAkAzAgCCQCkAwEFAmhOBQNuaWwCAAkAzAgCAwkAZwIFAmROBQJoSQYJAAIBCQC5CQIJAMwIAgIrcHJpY2UgYXNzZXQgYW1vdW50IHRvIHJlY2VpdmUgaXMgbGVzcyB0aGFuIAkAzAgCCQCkAwEFAmhJBQNuaWwCAAUDbmlsAwkAAAIFAmhPBQJoTwQCaEYJAPwHBAUCYmQCBGJ1cm4JAMwIAgUCaEEFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCYnkFAmhBBQNuaWwDCQAAAgUCaEYFAmhGBAJoUAkBAmVLAwkBAS0BBQJkTQkBAS0BBQJkTgAABAJnUAgFAmhQAl8xBAJlQggFAmhQAl8yBAJoYQkBAmVQAgUCZUoFAmVCAwkAAAIFAmhhBQJoYQkAzggCCQDOCAIFAmdSBQJkTwUCZ1AJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZmQBCGFjdGl2YXRlAgJoUQJoUgMJAQIhPQIJAKUIAQgFAmZkBmNhbGxlcgkApQgBBQJiZAkAAgECEnBlcm1pc3Npb25zIGRlbmllZAkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJhZQAFAmhRCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJhZgAFAmhSBQNuaWwCB3N1Y2Nlc3MCZmQBCnJlZnJlc2hLTHAABAJoUwkBC3ZhbHVlT3JFbHNlAgkAnwgBBQJhawAABAJoVAMJAGcCCQBlAgUGaGVpZ2h0BQJoUwUCYW4FBHVuaXQJAQJiYQEJALkJAgkAzAgCCQCkAwEFAmFuCQDMCAICLyBibG9ja3MgaGF2ZSBub3QgcGFzc2VkIHNpbmNlIHRoZSBwcmV2aW91cyBjYWxsBQNuaWwCAAMJAAACBQJoVAUCaFQEAmVXCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKgDAQkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzBQJhagIBMAkBAmJjAQILaW52YWxpZCBrTHAEAmhVCQECZUsDAAAAAAAABAJoVggFAmhVAl8xBAJlQggFAmhVAl8yBAJlTgMJAQIhPQIFAmVXBQJlQgUCaFYJAQJiYQECEm5vdGhpbmcgdG8gcmVmcmVzaAkAlAoCBQJlTgkApgMBBQJlQgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJmZAEcZ2V0UG9vbENvbmZpZ1dyYXBwZXJSRUFET05MWQAJAJQKAgUDbmlsCQECYm0AAmZkARxnZXRBY2NCYWxhbmNlV3JhcHBlclJFQURPTkxZAQJhcAkAlAoCBQNuaWwJAQJiVgEFAmFwAmZkARljYWxjUHJpY2VzV3JhcHBlclJFQURPTkxZAwJkZQJkZgJkagQCZHMJAQJkaQMFAmRlBQJkZgUCZGoJAJQKAgUDbmlsCQDMCAIJAKYDAQkAkQMCBQJkcwAACQDMCAIJAKYDAQkAkQMCBQJkcwABCQDMCAIJAKYDAQkAkQMCBQJkcwACBQNuaWwCZmQBFHRvWDE4V3JhcHBlclJFQURPTkxZAgFFAUYJAJQKAgUDbmlsCQCmAwEJAQFEAgUBRQUBRgJmZAEWZnJvbVgxOFdyYXBwZXJSRUFET05MWQIBSQFKCQCUCgIFA25pbAkBAUgCCQCnAwEFAUkFAUoCZmQBHmNhbGNQcmljZUJpZ0ludFdyYXBwZXJSRUFET05MWQICYloCY2EJAJQKAgUDbmlsCQCmAwEJAQJiWQIJAKcDAQUCYloJAKcDAQUCY2ECZmQBI2VzdGltYXRlUHV0T3BlcmF0aW9uV3JhcHBlclJFQURPTkxZCQJkdQJkUQJkUgJkUwJkVAJkVQJhYgJkVgJkVwkAlAoCBQNuaWwJAQJkUAkFAmR1BQJkUQUCZFIFAmRTBQJkVAUCZFUFAmFiBQJkVgUCZFcCZmQBI2VzdGltYXRlR2V0T3BlcmF0aW9uV3JhcHBlclJFQURPTkxZBAJkdQJkdgJkdwJhYgQCZWcJAQJkdAQFAmR1BQJkdgUCZHcJARFAZXh0ck5hdGl2ZSgxMDYyKQEFAmFiCQCUCgIFA25pbAkAnAoKCAUCZWcCXzEIBQJlZwJfMggFAmVnAl8zCAUCZWcCXzQIBQJlZwJfNQgFAmVnAl82CAUCZWcCXzcJAKYDAQgFAmVnAl84CAUCZWcCXzkIBQJlZwNfMTACZmQBDXN0YXRzUkVBRE9OTFkABAJkawkBAmJtAAQCZHgJANkEAQkAkQMCBQJkawUBcQQCaFcJAJEDAgUCZGsFAXIEAmhYCQCRAwIFAmRrBQFzBAJkWgkAkQMCBQJkawUBdgQCZWEJAJEDAgUCZGsFAXcEAmRsCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCZGsFAXQEAmRtCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCZGsFAXUEAmhZCAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDsBwEFAmR4CQCsAgIJAKwCAgIGQXNzZXQgCQDYBAEFAmR4Ag4gZG9lc24ndCBleGlzdAhxdWFudGl0eQQCaFoJAQJiVgEFAmhXBAJpYQkBAmJWAQUCaFgEAmliAwkAAAIFAmhZAAAJAMwIAgUBZQkAzAgCBQFlCQDMCAIFAWUFA25pbAkBAmRpAwUCaFoFAmlhBQJoWQQCZEgAAAQCaWMJAQFIAgkAkQMCBQJpYgABBQFiBAJpZAkBAUgCCQCRAwIFAmliAAIFAWIEAmllCQEFdmFsdWUBCQCaCAIFAmJkCQECYUQBCQClCAEFBHRoaXMJAJQKAgUDbmlsCQC5CQIJAMwIAgIOJWQlZCVkJWQlZCVkJWQJAMwIAgkApAMBBQJoWgkAzAgCCQCkAwEFAmlhCQDMCAIJAKQDAQUCaFkJAMwIAgkApAMBBQJkSAkAzAgCCQCkAwEFAmljCQDMCAIJAKQDAQUCaWQJAMwIAgkApAMBBQJpZQUDbmlsBQFqAmZkASBldmFsdWF0ZVB1dEJ5QW1vdW50QXNzZXRSRUFET05MWQECZFIEAmRrCQECYm0ABAJkeAkA2QQBCQCRAwIFAmRrBQFxBAJkWAkAkQMCBQJkawUBcgQCZHkJANkEAQUCZFgEAmRZCQCRAwIFAmRrBQFzBAJkegkA2QQBBQJkWQQCZGwJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJkawUBdAQCZG0JAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJkawUBdQQCZEEJAJEDAgUCZGsFAXAEAmhZCAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDsBwEFAmR4CQCsAgIJAKwCAgIGQXNzZXQgCQDYBAEFAmR4Ag4gZG9lc24ndCBleGlzdAhxdWFudGl0eQQCaFoJAQJiVgEFAmRYBAJpYQkBAmJWAQUCZFkEAmRnCQEBRAIFAmhaBQJkbAQCZGgJAQFEAgUCaWEFAmRtBAJkRwMJAAACBQJoWQAABQFlCQECYlkCBQJkaAUCZGcEAmVkCQEBRAIFAmRSBQJkbAQCZWUJALwCAwUCZWQFAmRHBQFkBAJkVAkBAUgCBQJlZQUCZG0EAmZrCQECZFAJAgAAoMIeBQJkUgUCZHkFAmRUBQJkegIABgcEAmVvCAUCZmsCXzEEAmlmCAUCZmsCXzMEAmRDCAUCZmsCXzQEAmRFCAUCZmsCXzUEAmRCCAUCZmsCXzYJAJQKAgUDbmlsCQC5CQIJAMwIAgIQJWQlZCVkJWQlZCVkJWQlZAkAzAgCCQCkAwEFAmVvCQDMCAIJAKQDAQkBAUgCBQJkRwUBYgkAzAgCCQCkAwEFAmRDCQDMCAIJAKQDAQUCZEUJAMwIAgkApAMBBQJkQgkAzAgCBQJkQQkAzAgCCQCkAwEFAmRSCQDMCAIJAKQDAQUCZFQFA25pbAUBagJmZAEfZXZhbHVhdGVQdXRCeVByaWNlQXNzZXRSRUFET05MWQECZFQEAmRrCQECYm0ABAJkeAkA2QQBCQCRAwIFAmRrBQFxBAJkWAkAkQMCBQJkawUBcgQCZHkJANkEAQUCZFgEAmRZCQCRAwIFAmRrBQFzBAJkegkA2QQBBQJkWQQCZGwJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJkawUBdAQCZG0JAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJkawUBdQQCZEEJAJEDAgUCZGsFAXAEAmhZCAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDsBwEFAmR4CQCsAgIJAKwCAgIGQXNzZXQgCQDYBAEFAmR4Ag4gZG9lc24ndCBleGlzdAhxdWFudGl0eQQCaWcJAQJiVgEFAmRYBAJpaAkBAmJWAQUCZFkEAmlpCQEBRAIFAmlnBQJkbAQCaWoJAQFEAgUCaWgFAmRtBAJkRwMJAAACBQJoWQAABQFlCQECYlkCBQJpagUCaWkEAmVlCQEBRAIFAmRUBQJkbQQCZWQJALwCAwUCZWUFAWQFAmRHBAJkUgkBAUgCBQJlZAUCZGwEAmZrCQECZFAJAgAAoMIeBQJkUgUCZHkFAmRUBQJkegIABgcEAmVvCAUCZmsCXzEEAmlmCAUCZmsCXzMEAmRDCAUCZmsCXzQEAmRFCAUCZmsCXzUEAmRCCAUCZmsCXzYJAJQKAgUDbmlsCQC5CQIJAMwIAgIQJWQlZCVkJWQlZCVkJWQlZAkAzAgCCQCkAwEFAmVvCQDMCAIJAKQDAQkBAUgCBQJkRwUBYgkAzAgCCQCkAwEFAmRDCQDMCAIJAKQDAQUCZEUJAMwIAgkApAMBBQJkQgkAzAgCBQJkQQkAzAgCCQCkAwEFAmRSCQDMCAIJAKQDAQUCZFQFA25pbAUBagJmZAETZXZhbHVhdGVHZXRSRUFET05MWQICaWsCaWwEAmVnCQECZHQEAgAFAmlrBQJpbAUEdGhpcwQCZE0IBQJlZwJfMQQCZE4IBQJlZwJfMgQCZEMIBQJlZwJfNQQCZEUIBQJlZwJfNgQCZEIIBQJlZwJfNwQCZEgIBQJlZwJfOAQCZEEJAQ1wYXJzZUludFZhbHVlAQgFAmVnAl85CQCUCgIFA25pbAkAuQkCCQDMCAICDiVkJWQlZCVkJWQlZCVkCQDMCAIJAKQDAQUCZE0JAMwIAgkApAMBBQJkTgkAzAgCCQCkAwEFAmRDCQDMCAIJAKQDAQUCZEUJAMwIAgkApAMBBQJkQgkAzAgCCQCmAwEFAmRICQDMCAIJAKQDAQUCZEEFA25pbAUBagECaW0BAmluAAQCaW8EAmFRCQECZ3IAAwkAAQIFAmFRAgpCeXRlVmVjdG9yBAJndQUCYVEFAmd1AwkAAQIFAmFRAgRVbml0CAUCaW0Pc2VuZGVyUHVibGljS2V5CQACAQILTWF0Y2ggZXJyb3IEAmFRBQJpbQMJAAECBQJhUQIFT3JkZXIEAmVTBQJhUQQCaXAJAQJibAAEAmlxAwkBAmVPAAkAlAoCBgIACQECZVIBBQJlUwQCYUsIBQJpcQJfMQQCYUwIBQJpcQJfMgQCYU0JAPQDAwgFAmVTCWJvZHlCeXRlcwkAkQMCCAUCZVMGcHJvb2ZzAAAIBQJlUw9zZW5kZXJQdWJsaWNLZXkEAmFOCQD0AwMIBQJlUwlib2R5Qnl0ZXMJAJEDAggFAmVTBnByb29mcwABBQJpcAMDAwUCYUsFAmFNBwUCYU4HBgkBAmFKBAUCYUsFAmFMBQJhTQUCYU4DCQABAgUCYVECFFNldFNjcmlwdFRyYW5zYWN0aW9uBAJhVgUCYVEDCQD0AwMIBQJpbQlib2R5Qnl0ZXMJAJEDAggFAmltBnByb29mcwAABQJpbwYEAmlyCQD2AwEJAQV2YWx1ZQEIBQJhVgZzY3JpcHQEAmlzCQDbBAEJAQV2YWx1ZQEJAJ0IAgUCYmQJAQJhRgAEAml0CQDxBwEFBHRoaXMDCQAAAgUCaXMFAmlyCQECIT0CBQJpdAUCaXIHCQD0AwMIBQJpbQlib2R5Qnl0ZXMJAJEDAggFAmltBnByb29mcwAABQJpb6uQlhc=", "height": 3066419, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 8KsujzXtLvhdjADRJUpMU4oyYbXsMTTuhWdkzfpyAyGb Next: GMwcUTMVVHErnXFL9e1nmcEZqWk4nE95P79K4A1K7raa Diff:
OldNewDifferences
418418
419419
420420 func cC (cD,ap,ci,cE,cd,cr,cs) = {
421- let cj = ar(ap)
422- if ((cj == cj))
421+ let ck = as(ci)
422+ if ((ck == ck))
423423 then {
424- let ck = as(ci)
425- if ((ck == ck))
424+ let cj = if ((ck != 0))
425+ then ar(ap)
426+ else 0
427+ if ((cj == cj))
426428 then {
427429 let cF = max([0, (bV(ap) - cE)])
428430 let cG = fraction(cD, cF, 100)
471473 let cQ = cT._7
472474 if (cM)
473475 then {
474- let cU = max([0, ((bV(ap) - cS) - cE)])
475- if ((cU == cU))
476+ let ck = as(cP)
477+ if ((ck == ck))
476478 then {
477- let co = fraction(cN, cU, 100)
478- if ((co == co))
479+ let cj = if ((ck != 0))
480+ then ar(ap)
481+ else 0
482+ if ((cj == cj))
479483 then {
480- let cV = (ar(ap) - co)
481- if ((cV == cV))
482- then if ((0 > cV))
483- then cg(ap, -(cV), cP, addressFromStringValue(cO))
484- else cq(ap, cV, cP, addressFromStringValue(cO), cr, addressFromStringValue(cQ))
484+ let cU = max([0, ((bV(ap) - cS) - cE)])
485+ if ((cU == cU))
486+ then {
487+ let co = fraction(cN, cU, 100)
488+ if ((co == co))
489+ then {
490+ let cV = (cj - co)
491+ if ((cV == cV))
492+ then if ((cV == 0))
493+ then nil
494+ else if ((0 > cV))
495+ then cg(ap, -(cV), cP, addressFromStringValue(cO))
496+ else cq(ap, cV, cP, addressFromStringValue(cO), cr, addressFromStringValue(cQ))
497+ else throw("Strict value is not equal to itself.")
498+ }
499+ else throw("Strict value is not equal to itself.")
500+ }
485501 else throw("Strict value is not equal to itself.")
486502 }
487503 else throw("Strict value is not equal to itself.")
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 (aX) = makeString(["%s%s", "whitelisted", toString(aX)], j)
239239
240240
241241 func bj (aX) = valueOrElse(getBoolean(bd, bi(aX)), false)
242242
243243
244244 func bk () = valueOrElse(getBoolean(bd, aC()), false)
245245
246246
247247 func bl () = fromBase58String(aW(bd, au()))
248248
249249
250250 func bm () = {
251251 let bn = aW(this, ae())
252252 let bo = aW(this, af())
253253 let az = aZ(bd, aA(bo))
254254 let ay = aZ(bd, aA(bn))
255255 split(aW(bd, ax(toString(ay), toString(az))), j)
256256 }
257257
258258
259259 func bp (bq) = if ((bq == i))
260260 then unit
261261 else fromBase58String(bq)
262262
263263
264264 func br (bq) = if ((bq == unit))
265265 then i
266266 else toBase58String(value(bq))
267267
268268
269269 func bs (bt) = $Tuple7(addressFromStringValue(bt[o]), parseIntValue(bt[p]), fromBase58String(bt[q]), bp(bt[r]), bp(bt[s]), parseIntValue(bt[t]), parseIntValue(bt[u]))
270270
271271
272272 let bu = bs(bm())
273273
274274 let bv = bu
275275
276276 let bw = bv._1
277277
278278 let bx = bv._2
279279
280280 let by = bv._3
281281
282282 let bz = bv._4
283283
284284 let bA = bv._5
285285
286286 let bB = bv._6
287287
288288 let bC = bv._7
289289
290290 func bD () = split(aW(bd, at()), j)
291291
292292
293293 let bE = valueOrErrorMessage(addressFromString(bD()[B]), "incorrect staking address")
294294
295295 let bF = valueOrErrorMessage(addressFromString(bD()[C]), "incorrect staking address")
296296
297297 func bG (bH,bI,bJ,bK,bL,bM,bN,bO,bP,bQ) = makeString(["%d%d%d%d%d%d%d%d%d%d", toString(bH), toString(bI), toString(bJ), toString(bK), toString(bL), toString(bM), toString(bN), toString(bO), toString(bP), toString(bQ)], j)
298298
299299
300300 func bR (bS,bT,bU,bK,bN,bO) = makeString(["%d%d%d%d%d%d", toString(bS), toString(bT), toString(bU), toString(bK), toString(bN), toString(bO)], j)
301301
302302
303303 func bV (ap) = {
304304 let bW = if ((ap == "WAVES"))
305305 then wavesBalance(this).available
306306 else assetBalance(this, fromBase58String(ap))
307307 let bX = ((bW + ar(ap)) - as(ap))
308308 max([0, bX])
309309 }
310310
311311
312312 func bY (bZ,ca) = fraction(bZ, d, ca)
313313
314314
315315 func cb (bZ,ca,L) = fraction(bZ, d, ca, L)
316316
317317
318318 func cc (cd) = {
319319 let ce = invoke(cd, "getRate", nil, nil)
320320 if ((ce == ce))
321321 then {
322322 let aQ = ce
323323 if ($isInstanceOf(aQ, "Int"))
324324 then {
325325 let cf = aQ
326326 cf
327327 }
328328 else ba("proxy.getRate() unexpected value")
329329 }
330330 else throw("Strict value is not equal to itself.")
331331 }
332332
333333
334334 func cg (ap,ch,ci,cd) = {
335335 let cj = ar(ap)
336336 if ((cj == cj))
337337 then {
338338 let ck = as(ci)
339339 if ((ck == ck))
340340 then {
341341 let cl = bp(ap)
342342 if ((ch > 0))
343343 then {
344344 let cm = invoke(cd, "deposit", nil, [AttachedPayment(cl, ch)])
345345 if ((cm == cm))
346346 then {
347347 let aQ = cm
348348 if ($isInstanceOf(aQ, "Int"))
349349 then {
350350 let cn = aQ
351351 let co = (cj + ch)
352352 let cp = (ck + cn)
353353 [IntegerEntry(ao(ap), co), IntegerEntry(aq(ci), cp)]
354354 }
355355 else nil
356356 }
357357 else throw("Strict value is not equal to itself.")
358358 }
359359 else nil
360360 }
361361 else throw("Strict value is not equal to itself.")
362362 }
363363 else throw("Strict value is not equal to itself.")
364364 }
365365
366366
367367 func cq (ap,ch,ci,cd,cr,cs) = {
368368 let cj = ar(ap)
369369 if ((cj == cj))
370370 then {
371371 let ck = as(ci)
372372 if ((ck == ck))
373373 then {
374374 let ct = cc(cd)
375375 if ((ct == ct))
376376 then {
377377 let cu = fraction(cr, cj, ck)
378378 let cv = bp(ci)
379379 let cw = fraction(cr, ch, cu)
380380 let cx = fraction(cr, ch, ct)
381381 let cy = max([0, (cw - cx)])
382382 if ((cx > 0))
383383 then {
384384 let cz = invoke(cd, "withdraw", nil, [AttachedPayment(cv, cx)])
385385 if ((cz == cz))
386386 then {
387387 let aQ = cz
388388 if ($isInstanceOf(aQ, "Int"))
389389 then {
390390 let cA = aQ
391391 let co = (cj - cA)
392392 let cp = ((ck - cx) - cy)
393393 [IntegerEntry(ao(ap), co), IntegerEntry(aq(ci), cp), ScriptTransfer(cs, cy, bp(ci))]
394394 }
395395 else nil
396396 }
397397 else throw("Strict value is not equal to itself.")
398398 }
399399 else nil
400400 }
401401 else throw("Strict value is not equal to itself.")
402402 }
403403 else throw("Strict value is not equal to itself.")
404404 }
405405 else throw("Strict value is not equal to itself.")
406406 }
407407
408408
409409 func cB (ap) = {
410410 let aQ = invoke(bd, "getPoolLeaseConfigREADONLY", [toString(this), ap], nil)
411411 if ($isInstanceOf(aQ, "(Boolean, Int, Int, String, String, Int, String)"))
412412 then {
413413 let aR = aQ
414414 aR
415415 }
416416 else ba((("[" + ap) + "] getLeaseProxyConfig() error"))
417417 }
418418
419419
420420 func cC (cD,ap,ci,cE,cd,cr,cs) = {
421- let cj = ar(ap)
422- if ((cj == cj))
421+ let ck = as(ci)
422+ if ((ck == ck))
423423 then {
424- let ck = as(ci)
425- if ((ck == ck))
424+ let cj = if ((ck != 0))
425+ then ar(ap)
426+ else 0
427+ if ((cj == cj))
426428 then {
427429 let cF = max([0, (bV(ap) - cE)])
428430 let cG = fraction(cD, cF, 100)
429431 let cH = (cj - cG)
430432 if ((cH == 0))
431433 then nil
432434 else if ((0 > cH))
433435 then {
434436 let cI = -(cH)
435437 cg(ap, cI, ci, cd)
436438 }
437439 else {
438440 let cJ = cH
439441 cq(ap, cJ, ci, cd, cr, cs)
440442 }
441443 }
442444 else throw("Strict value is not equal to itself.")
443445 }
444446 else throw("Strict value is not equal to itself.")
445447 }
446448
447449
448450 func cK (ap) = {
449451 let cL = cB(ap)
450452 let cM = cL._1
451453 let cN = cL._2
452454 let cE = cL._3
453455 let cO = cL._4
454456 let cP = cL._5
455457 let cr = cL._6
456458 let cQ = cL._7
457459 if (cM)
458460 then cC(cN, ap, cP, cE, addressFromStringValue(cO), cr, addressFromStringValue(cQ))
459461 else nil
460462 }
461463
462464
463465 func cR (ap,cS) = {
464466 let cT = cB(ap)
465467 let cM = cT._1
466468 let cN = cT._2
467469 let cE = cT._3
468470 let cO = cT._4
469471 let cP = cT._5
470472 let cr = cT._6
471473 let cQ = cT._7
472474 if (cM)
473475 then {
474- let cU = max([0, ((bV(ap) - cS) - cE)])
475- if ((cU == cU))
476+ let ck = as(cP)
477+ if ((ck == ck))
476478 then {
477- let co = fraction(cN, cU, 100)
478- if ((co == co))
479+ let cj = if ((ck != 0))
480+ then ar(ap)
481+ else 0
482+ if ((cj == cj))
479483 then {
480- let cV = (ar(ap) - co)
481- if ((cV == cV))
482- then if ((0 > cV))
483- then cg(ap, -(cV), cP, addressFromStringValue(cO))
484- else cq(ap, cV, cP, addressFromStringValue(cO), cr, addressFromStringValue(cQ))
484+ let cU = max([0, ((bV(ap) - cS) - cE)])
485+ if ((cU == cU))
486+ then {
487+ let co = fraction(cN, cU, 100)
488+ if ((co == co))
489+ then {
490+ let cV = (cj - co)
491+ if ((cV == cV))
492+ then if ((cV == 0))
493+ then nil
494+ else if ((0 > cV))
495+ then cg(ap, -(cV), cP, addressFromStringValue(cO))
496+ else cq(ap, cV, cP, addressFromStringValue(cO), cr, addressFromStringValue(cQ))
497+ else throw("Strict value is not equal to itself.")
498+ }
499+ else throw("Strict value is not equal to itself.")
500+ }
485501 else throw("Strict value is not equal to itself.")
486502 }
487503 else throw("Strict value is not equal to itself.")
488504 }
489505 else throw("Strict value is not equal to itself.")
490506 }
491507 else nil
492508 }
493509
494510
495511 func cW (cX,cY) = {
496512 let cZ = cR(aW(this, ae()), cX)
497513 let da = cR(aW(this, af()), cY)
498514 (cZ ++ da)
499515 }
500516
501517
502518 func db (dc,dd,de,df) = {
503519 let dg = D(de, dc)
504520 let dh = D(df, dd)
505521 bY(dh, dg)
506522 }
507523
508524
509525 func di (de,df,dj) = {
510526 let dk = bm()
511527 let dl = parseIntValue(dk[t])
512528 let dm = parseIntValue(dk[u])
513529 let dn = db(dl, dm, de, df)
514530 let ca = D(de, dl)
515531 let bZ = D(df, dm)
516532 let do = D(dj, b)
517533 let dp = bY(ca, do)
518534 let dq = bY(bZ, do)
519535 [dn, dp, dq]
520536 }
521537
522538
523539 func dr (de,df,dj) = {
524540 let ds = di(de, df, dj)
525541 [H(ds[0], b), H(ds[1], b), H(ds[2], b)]
526542 }
527543
528544
529545 func dt (du,dv,dw,ab) = {
530546 let dk = bm()
531547 let dx = dk[q]
532548 let dy = dk[r]
533549 let dz = dk[s]
534550 let dc = parseIntValue(dk[t])
535551 let dd = parseIntValue(dk[u])
536552 let dA = dk[p]
537553 let dB = valueOrErrorMessage(assetInfo(fromBase58String(dx)), (("Asset " + dx) + " doesn't exist")).quantity
538554 if ((dx != dv))
539555 then throw("Invalid asset passed.")
540556 else {
541557 let dC = bV(dy)
542558 let dD = D(dC, dc)
543559 let dE = bV(dz)
544560 let dF = D(dE, dd)
545561 let dG = bY(dF, dD)
546562 let dH = H(dG, b)
547563 let dI = D(dw, b)
548564 let dJ = D(dB, b)
549565 let dK = fraction(dD, dI, dJ)
550566 let dL = fraction(dF, dI, dJ)
551567 let dM = K(dK, dc, FLOOR)
552568 let dN = K(dL, dd, FLOOR)
553569 let dO = if ((du == ""))
554570 then nil
555571 else [ScriptTransfer(ab, dM, if ((dy == "WAVES"))
556572 then unit
557573 else fromBase58String(dy)), ScriptTransfer(ab, dN, if ((dz == "WAVES"))
558574 then unit
559575 else fromBase58String(dz)), StringEntry(ad(toString(ab), du), bR(dM, dN, dw, dH, height, lastBlock.timestamp)), IntegerEntry(W(), dH), IntegerEntry(X(height, lastBlock.timestamp), dH)]
560576 $Tuple10(dM, dN, dy, dz, dC, dE, dB, dG, dA, dO)
561577 }
562578 }
563579
564580
565581 func dP (du,dQ,dR,dS,dT,dU,ab,dV,dW) = {
566582 let dk = bm()
567583 let dx = fromBase58String(dk[q])
568584 let dX = dk[r]
569585 let dY = dk[s]
570586 let dZ = dk[v]
571587 let ea = dk[w]
572588 let dl = parseIntValue(dk[t])
573589 let dm = parseIntValue(dk[u])
574590 let dA = dk[p]
575591 let dB = valueOrErrorMessage(assetInfo(dx), (("Asset " + toBase58String(dx)) + " doesn't exist")).quantity
576592 let eb = toBase58String(valueOrElse(dS, fromBase58String("WAVES")))
577593 let ec = toBase58String(valueOrElse(dU, fromBase58String("WAVES")))
578594 if (if ((dX != eb))
579595 then true
580596 else (dY != ec))
581597 then throw("Invalid amt or price asset passed.")
582598 else {
583599 let dC = if (dV)
584600 then bV(dX)
585601 else (bV(dX) - dR)
586602 let dE = if (dV)
587603 then bV(dY)
588604 else (bV(dY) - dT)
589605 let ed = D(dR, dl)
590606 let ee = D(dT, dm)
591607 let ef = bY(ee, ed)
592608 let dD = D(dC, dl)
593609 let dF = D(dE, dm)
594610 let eg = if ((dB == 0))
595611 then {
596612 let dG = e
597613 let eh = e
598614 let do = pow((ed * ee), 0, toBigInt(5), 1, 0, DOWN)
599615 $Tuple5(H(do, b), H(ed, dl), H(ee, dm), bY((dF + ee), (dD + ed)), eh)
600616 }
601617 else {
602618 let dG = bY(dF, dD)
603619 let eh = fraction(R((dG - ef)), d, dG)
604620 let ei = D(dQ, b)
605621 if (if ((dG != e))
606622 then (eh > ei)
607623 else false)
608624 then throw(((("Price slippage " + toString(eh)) + " exceeded the passed limit of ") + toString(ei)))
609625 else {
610626 let dJ = D(dB, b)
611627 let ej = fraction(ed, cb(dF, dD, CEILING), d, CEILING)
612628 let ek = fraction(ee, d, cb(dF, dD, FLOOR), CEILING)
613629 let el = if ((ej > ee))
614630 then $Tuple2(ek, ee)
615631 else $Tuple2(ed, ej)
616632 let em = el._1
617633 let en = el._2
618634 let do = fraction(dJ, en, dF, FLOOR)
619635 $Tuple5(K(do, b, FLOOR), K(em, dl, CEILING), K(en, dm, CEILING), dG, eh)
620636 }
621637 }
622638 let eo = eg._1
623639 let ep = eg._2
624640 let eq = eg._3
625641 let dH = H(eg._4, b)
626642 let er = H(eg._5, b)
627643 if ((0 >= eo))
628644 then throw("Invalid calculations. LP calculated is less than zero.")
629645 else {
630646 let es = if (!(dW))
631647 then 0
632648 else eo
633649 let et = (dR - ep)
634650 let eu = (dT - eq)
635651 let ev = [IntegerEntry(W(), dH), IntegerEntry(X(height, lastBlock.timestamp), dH), StringEntry(aa(ab, du), bG(ep, eq, es, dH, dQ, er, height, lastBlock.timestamp, et, eu))]
636652 $Tuple13(eo, es, dH, dC, dE, dB, dx, dA, ev, et, eu, dS, dU)
637653 }
638654 }
639655 }
640656
641657
642658 func ew (ex,ey,dB) = {
643659 let ez = G(ex, toBigInt(bB))
644660 let eA = G(ey, toBigInt(bC))
645661 let eB = fraction(pow((ez * eA), 0, toBigInt(5), 1, 18, DOWN), g, dB)
646662 if ((dB == f))
647663 then f
648664 else eB
649665 }
650666
651667
652668 func eC (eD,eE,eF) = {
653669 let eG = (toBigInt(bV(br(bz))) - eD)
654670 let eH = (toBigInt(bV(br(bA))) - eE)
655671 let eI = (toBigInt(value(assetInfo(by)).quantity) - eF)
656672 let eJ = ew(eG, eH, eI)
657673 eJ
658674 }
659675
660676
661677 func eK (eL,eM,eF) = {
662678 let eG = (bV(br(bz)) + eL)
663679 let eH = (bV(br(bA)) + eM)
664680 let eI = (value(assetInfo(by)).quantity + eF)
665681 let eB = ew(toBigInt(eG), toBigInt(eH), toBigInt(eI))
666682 let eN = [IntegerEntry(ak, height), StringEntry(aj, toString(eB))]
667683 $Tuple2(eN, eB)
668684 }
669685
670686
671687 func eO () = valueOrElse(getBoolean(bd, aH(toString(this))), false)
672688
673689
674690 func eP (eQ,eB) = if ((eB >= eQ))
675691 then true
676692 else ba(makeString(["updated KLp lower than current KLp", toString(eQ), toString(eB)], " "))
677693
678694
679695 func eR (eS) = {
680696 let eG = bV(br(bz))
681697 let eH = bV(br(bA))
682698 let eT = eS.amount
683699 let eU = fraction(eS.amount, eS.price, b, FLOOR)
684700 let eV = if ((eS.orderType == Buy))
685701 then $Tuple2(eT, -(eU))
686702 else $Tuple2(-(eT), eU)
687703 let eL = eV._1
688704 let eM = eV._2
689705 if (if (if (bk())
690706 then true
691707 else (bx == m))
692708 then true
693709 else (bx == n))
694710 then throw("Exchange operations disabled")
695711 else if (if ((eS.assetPair.amountAsset != bz))
696712 then true
697713 else (eS.assetPair.priceAsset != bA))
698714 then throw("Wrong order assets.")
699715 else {
700716 let eW = valueOrErrorMessage(parseBigInt(valueOrElse(getString(this, aj), "0")), bc("invalid kLp"))
701717 let eX = eK(eL, eM, 0)
702718 let eY = eX._1
703719 let eZ = eX._2
704720 let fa = (eZ >= eW)
705721 let fb = makeString(["kLp=", toString(eW), " kLpNew=", toString(eZ), " amountAssetBalance=", toString(eG), " priceAssetBalance=", toString(eH), " amountAssetBalanceDelta=", toString(eL), " priceAssetBalanceDelta=", toString(eM), " height=", toString(height)], "")
706722 $Tuple2(fa, fb)
707723 }
708724 }
709725
710726
711727 func fc (fd) = if ((size(fd.payments) != 1))
712728 then throw("exactly 1 payment is expected")
713729 else {
714730 let fe = value(fd.payments[0])
715731 let dv = value(fe.assetId)
716732 let ff = fe.amount
717733 let eg = dt(toBase58String(fd.transactionId), toBase58String(dv), ff, fd.caller)
718734 let dM = eg._1
719735 let dN = eg._2
720736 let dO = eg._10
721737 let fg = if (!(bj(fd.caller)))
722738 then if (bk())
723739 then true
724740 else (bx == n)
725741 else false
726742 if (fg)
727743 then throw(("Get operation is blocked by admin. Status = " + toString(bx)))
728744 else $Tuple5(dM, dN, ff, dv, dO)
729745 }
730746
731747
732748 func fh (fd,dQ,dW) = if ((size(fd.payments) != 2))
733749 then throw("exactly 2 payments are expected")
734750 else {
735751 let fi = value(fd.payments[0])
736752 let fj = value(fd.payments[1])
737753 let fk = dP(toBase58String(fd.transactionId), dQ, fi.amount, fi.assetId, fj.amount, fj.assetId, toString(fd.caller), false, dW)
738754 let fl = if (!(bj(fd.caller)))
739755 then if (if (bk())
740756 then true
741757 else (bx == l))
742758 then true
743759 else (bx == n)
744760 else false
745761 if (fl)
746762 then throw(("Put operation is blocked by admin. Status = " + toString(bx)))
747763 else fk
748764 }
749765
750766
751767 func fm (ch) = {
752768 let fn = invoke(bd, "emit", [ch], nil)
753769 if ((fn == fn))
754770 then {
755771 let fo = {
756772 let aQ = fn
757773 if ($isInstanceOf(aQ, "Address"))
758774 then {
759775 let fp = aQ
760776 invoke(fp, "emit", [ch], nil)
761777 }
762778 else unit
763779 }
764780 if ((fo == fo))
765781 then ch
766782 else throw("Strict value is not equal to itself.")
767783 }
768784 else throw("Strict value is not equal to itself.")
769785 }
770786
771787
772788 func fq (ch,ai) = {
773789 let fr = if ((ai == 0))
774790 then 0
775791 else fraction(ch, ai, b)
776792 $Tuple2((ch - fr), fr)
777793 }
778794
779795
780796 func fs (ft,fu,ab,ac) = {
781797 let fv = (ac == unit)
782798 let fw = bV(br(bz))
783799 let fx = bV(br(bA))
784800 let fy = if ((fu == bz))
785801 then true
786802 else if ((fu == bA))
787803 then false
788804 else ba("invalid asset")
789805 let fz = if (fv)
790806 then $Tuple2(fw, fx)
791807 else if (fy)
792808 then $Tuple2((fw - ft), fx)
793809 else $Tuple2(fw, (fx - ft))
794810 let fA = fz._1
795811 let fB = fz._2
796812 let fC = if (fy)
797813 then $Tuple2(ft, 0)
798814 else $Tuple2(0, ft)
799815 let fD = fC._1
800816 let fE = fC._2
801817 let eT = fq(fD, bf)._1
802818 let eU = fq(fE, bf)._1
803819 let fF = fq(ft, bf)
804820 let fG = fF._1
805821 let fr = fF._2
806822 let fH = (fA + eT)
807823 let fI = (fB + eU)
808824 let fJ = bY(D(fI, bC), D(fH, bB))
809825 let fK = H(fJ, b)
810826 let fL = if (fy)
811827 then fA
812828 else fB
813829 let fM = toBigInt(fL)
814830 let fN = toBigInt(valueOrErrorMessage(assetInfo(by), (("asset " + toBase58String(by)) + " doesn't exist")).quantity)
815831 let fO = if ((fN > f))
816832 then true
817833 else ba("initial deposit requires all coins")
818834 if ((fO == fO))
819835 then {
820836 let fP = toBigInt(fG)
821837 let fQ = max([0, toInt(((fN * (sqrtBigInt((d + ((fP * d) / fM)), 18, 18, DOWN) - d)) / d))])
822838 let ev = if (fv)
823839 then nil
824840 else [IntegerEntry(W(), fK), IntegerEntry(X(height, lastBlock.timestamp), fK), StringEntry(aa(toString(value(ab)), toBase58String(value(ac))), bG(fD, fE, fQ, fK, 0, 0, height, lastBlock.timestamp, 0, 0))]
825841 let fR = bY(D(fB, bC), D(fA, bB))
826842 let fS = H(fR, b)
827843 let fT = {
828844 let fU = if (fy)
829845 then $Tuple2(fD, fA)
830846 else $Tuple2(fE, fB)
831847 let ch = fU._1
832848 let fV = fU._2
833849 let fW = toInt(fraction(fN, toBigInt((ch / 2)), toBigInt(fV)))
834850 fraction((fQ - fW), b, fW)
835851 }
836852 $Tuple5(fQ, ev, fr, fT, fy)
837853 }
838854 else throw("Strict value is not equal to itself.")
839855 }
840856
841857
842858 func fX (fY,fG,fu,ab,ac) = {
843859 let fv = (ac == unit)
844860 let dk = bm()
845861 let dl = parseIntValue(dk[t])
846862 let dm = parseIntValue(dk[u])
847863 let fZ = [if ((fu == by))
848864 then true
849865 else ba("invalid lp asset")]
850866 if ((fZ == fZ))
851867 then {
852868 let ga = if ((fY == bz))
853869 then true
854870 else if ((fY == bA))
855871 then false
856872 else ba("invalid asset")
857873 let gb = if (ga)
858874 then toBigInt(bV(br(bz)))
859875 else toBigInt(bV(br(bA)))
860876 let gc = if (ga)
861877 then dl
862878 else dm
863879 let gd = bV(br(bz))
864880 let ge = bV(br(bA))
865881 let gf = if (ga)
866882 then gd
867883 else ge
868884 let gg = toBigInt(gf)
869885 let fN = toBigInt(valueOrErrorMessage(assetInfo(by), (("asset " + toBase58String(by)) + " doesn't exist")).quantity)
870886 let gh = toBigInt(fG)
871887 let gi = max([0, toInt(((gb * (d - pow((d - ((gh * d) / fN)), 18, h, 0, 18, DOWN))) / d))])
872888 let gj = fq(gi, bh)
873889 let gk = gj._1
874890 let fr = gj._2
875891 let gl = if (ga)
876892 then $Tuple4(gk, 0, (gd - gi), ge)
877893 else $Tuple4(0, gk, gd, (ge - gi))
878894 let gm = gl._1
879895 let gn = gl._2
880896 let go = gl._3
881897 let gp = gl._4
882898 let fJ = bY(D(gp, bC), D(go, bB))
883899 let fK = H(fJ, b)
884900 let ev = if (fv)
885901 then nil
886902 else [StringEntry(ad(toString(value(ab)), toBase58String(value(ac))), bR(gm, gn, fG, fK, height, lastBlock.timestamp)), IntegerEntry(W(), fK), IntegerEntry(X(height, lastBlock.timestamp), fK)]
887903 let fR = bY(D(ge, bC), D(gd, bB))
888904 let fS = H(fR, b)
889905 let fT = {
890906 let gq = (toInt(fraction(gb, gh, fN)) * 2)
891907 fraction((gk - gq), b, gq)
892908 }
893909 $Tuple5(gk, ev, fr, fT, ga)
894910 }
895911 else throw("Strict value is not equal to itself.")
896912 }
897913
898914
899915 func gr () = {
900916 let gs = aS()
901917 let aQ = getString(gs, U())
902918 if ($isInstanceOf(aQ, "String"))
903919 then {
904920 let aV = aQ
905921 fromBase58String(aV)
906922 }
907923 else if ($isInstanceOf(aQ, "Unit"))
908924 then unit
909925 else throw("Match error")
910926 }
911927
912928
913929 func gt (fd) = {
914930 let aQ = gr()
915931 if ($isInstanceOf(aQ, "ByteVector"))
916932 then {
917933 let gu = aQ
918934 (fd.callerPublicKey == gu)
919935 }
920936 else if ($isInstanceOf(aQ, "Unit"))
921937 then (fd.caller == this)
922938 else throw("Match error")
923939 }
924940
925941
926942 func gv (fd) = {
927943 let gw = throw("Permission denied")
928944 let aQ = gr()
929945 if ($isInstanceOf(aQ, "ByteVector"))
930946 then {
931947 let gu = aQ
932948 if ((fd.callerPublicKey == gu))
933949 then true
934950 else gw
935951 }
936952 else if ($isInstanceOf(aQ, "Unit"))
937953 then if ((fd.caller == this))
938954 then true
939955 else gw
940956 else throw("Match error")
941957 }
942958
943959
944960 @Callable(fd)
945961 func rebalance () = (cK(aW(this, ae())) ++ cK(aW(this, af())))
946962
947963
948964
949965 @Callable(fd)
950966 func calculateAmountOutForSwapREADONLY (gx,gy,gz) = {
951967 let gA = if ((gy == false))
952968 then {
953969 let gB = aW(this, af())
954970 let gC = aW(this, ae())
955971 $Tuple2(gB, gC)
956972 }
957973 else {
958974 let gB = aW(this, ae())
959975 let gC = aW(this, af())
960976 $Tuple2(gB, gC)
961977 }
962978 let gB = gA._1
963979 let gC = gA._2
964980 let gD = bV(gC)
965981 let gE = bV(gB)
966982 let gF = fraction(gE, gx, (gD + gx))
967983 let gG = (toBigInt(gD) * toBigInt(gE))
968984 let gH = (((toBigInt(bV(gC)) + toBigInt(gx)) + toBigInt(gz)) * (toBigInt(bV(gB)) - toBigInt(gF)))
969985 let gI = if ((gH >= gG))
970986 then true
971987 else throw("new K is fewer error")
972988 if ((gI == gI))
973989 then $Tuple2(nil, gF)
974990 else throw("Strict value is not equal to itself.")
975991 }
976992
977993
978994
979995 @Callable(fd)
980996 func calculateAmountOutForSwapAndSendTokens (gx,gy,gJ,gK,gz) = {
981997 let gL = {
982998 let bg = invoke(bd, "getSwapContractREADONLY", nil, nil)
983999 if ($isInstanceOf(bg, "String"))
9841000 then bg
9851001 else throw(($getType(bg) + " couldn't be cast to String"))
9861002 }
9871003 let gM = {
9881004 let bg = invoke(bd, "isPoolSwapDisabledREADONLY", [toString(this)], nil)
9891005 if ($isInstanceOf(bg, "Boolean"))
9901006 then bg
9911007 else throw(($getType(bg) + " couldn't be cast to Boolean"))
9921008 }
9931009 let gN = if (!(bj(fd.caller)))
9941010 then if (if (bk())
9951011 then true
9961012 else (bx == n))
9971013 then true
9981014 else gM
9991015 else false
10001016 let fZ = [if (if (!(gN))
10011017 then true
10021018 else gt(fd))
10031019 then true
10041020 else ba("swap operation is blocked by admin"), if ((value(fd.payments[0]).amount >= gx))
10051021 then true
10061022 else ba("Wrong amount"), if ((fd.caller == addressFromStringValue(gL)))
10071023 then true
10081024 else ba("Permission denied")]
10091025 if ((fZ == fZ))
10101026 then {
10111027 let fe = value(fd.payments[0])
10121028 let gC = br(fe.assetId)
10131029 let gB = if ((gy == false))
10141030 then aW(this, af())
10151031 else aW(this, ae())
10161032 let gD = ((bV(gC) - value(fd.payments[0]).amount) - gz)
10171033 let gE = bV(gB)
10181034 let gF = fraction(gE, gx, (gD + gx))
10191035 let gG = (toBigInt(gD) * toBigInt(gE))
10201036 let gH = ((toBigInt(bV(gC)) + toBigInt(gz)) * (toBigInt(bV(gB)) - toBigInt(gF)))
10211037 let gI = if ((gH >= gG))
10221038 then true
10231039 else throw("new K is fewer error")
10241040 if ((gI == gI))
10251041 then {
10261042 let gO = if ((gF >= gJ))
10271043 then true
10281044 else throw("Exchange result is fewer coins than expected")
10291045 if ((gO == gO))
10301046 then {
10311047 let eL = if (gy)
10321048 then -(gF)
10331049 else gz
10341050 let eM = if (gy)
10351051 then gz
10361052 else -(gF)
10371053 let gP = eK(eL, eM, 0)._1
10381054 if ((gP == gP))
10391055 then {
10401056 let gQ = cK(gC)
10411057 if ((gQ == gQ))
10421058 then {
10431059 let gR = cR(gB, gF)
10441060 if ((gR == gR))
10451061 then $Tuple2(((gR ++ gQ) ++ [ScriptTransfer(addressFromStringValue(gK), gF, bp(gB))]), gF)
10461062 else throw("Strict value is not equal to itself.")
10471063 }
10481064 else throw("Strict value is not equal to itself.")
10491065 }
10501066 else throw("Strict value is not equal to itself.")
10511067 }
10521068 else throw("Strict value is not equal to itself.")
10531069 }
10541070 else throw("Strict value is not equal to itself.")
10551071 }
10561072 else throw("Strict value is not equal to itself.")
10571073 }
10581074
10591075
10601076
10611077 @Callable(fd)
10621078 func put (dQ,gS) = if ((0 > dQ))
10631079 then throw("Invalid slippageTolerance passed")
10641080 else {
10651081 let fk = fh(fd, dQ, true)
10661082 let es = fk._2
10671083 let dx = fk._7
10681084 let dO = fk._9
10691085 let et = fk._10
10701086 let eu = fk._11
10711087 let gT = fk._12
10721088 let gU = fk._13
10731089 let fi = toBigInt(value(fd.payments[0]).amount)
10741090 let fj = toBigInt(value(fd.payments[1]).amount)
10751091 let eJ = eC(fi, fj, toBigInt(0))
10761092 if ((eJ == eJ))
10771093 then {
10781094 let fn = invoke(bd, "emit", [es], nil)
10791095 if ((fn == fn))
10801096 then {
10811097 let fo = {
10821098 let aQ = fn
10831099 if ($isInstanceOf(aQ, "Address"))
10841100 then {
10851101 let fp = aQ
10861102 invoke(fp, "emit", [es], nil)
10871103 }
10881104 else unit
10891105 }
10901106 if ((fo == fo))
10911107 then {
10921108 let gV = if ((et > 0))
10931109 then invoke(bF, "put", nil, [AttachedPayment(gT, et)])
10941110 else nil
10951111 if ((gV == gV))
10961112 then {
10971113 let gW = if ((eu > 0))
10981114 then invoke(bF, "put", nil, [AttachedPayment(gU, eu)])
10991115 else nil
11001116 if ((gW == gW))
11011117 then {
11021118 let gX = if (gS)
11031119 then {
11041120 let gY = invoke(bE, "stake", nil, [AttachedPayment(dx, es)])
11051121 if ((gY == gY))
11061122 then nil
11071123 else throw("Strict value is not equal to itself.")
11081124 }
11091125 else [ScriptTransfer(fd.caller, es, dx)]
11101126 let gZ = eK(0, 0, 0)
11111127 if ((gZ == gZ))
11121128 then {
11131129 let eB = gZ._2
11141130 let gP = gZ._1
11151131 let ha = eP(eJ, eB)
11161132 if ((ha == ha))
11171133 then {
11181134 let hb = invoke(this, "rebalance", nil, nil)
11191135 if ((hb == hb))
11201136 then ((dO ++ gX) ++ gP)
11211137 else throw("Strict value is not equal to itself.")
11221138 }
11231139 else throw("Strict value is not equal to itself.")
11241140 }
11251141 else throw("Strict value is not equal to itself.")
11261142 }
11271143 else throw("Strict value is not equal to itself.")
11281144 }
11291145 else throw("Strict value is not equal to itself.")
11301146 }
11311147 else throw("Strict value is not equal to itself.")
11321148 }
11331149 else throw("Strict value is not equal to itself.")
11341150 }
11351151 else throw("Strict value is not equal to itself.")
11361152 }
11371153
11381154
11391155
11401156 @Callable(fd)
11411157 func putForFree (hc) = if ((0 > hc))
11421158 then throw("Invalid value passed")
11431159 else {
11441160 let fk = fh(fd, hc, false)
11451161 let dO = fk._9
11461162 let fi = toBigInt(value(fd.payments[0]).amount)
11471163 let fj = toBigInt(value(fd.payments[1]).amount)
11481164 let eJ = eC(fi, fj, toBigInt(0))
11491165 if ((eJ == eJ))
11501166 then {
11511167 let hd = eK(0, 0, 0)
11521168 let gP = hd._1
11531169 let eB = hd._2
11541170 let ha = eP(eJ, eB)
11551171 if ((ha == ha))
11561172 then (dO ++ gP)
11571173 else throw("Strict value is not equal to itself.")
11581174 }
11591175 else throw("Strict value is not equal to itself.")
11601176 }
11611177
11621178
11631179
11641180 @Callable(fd)
11651181 func putOneTkn (he,hf) = {
11661182 let hg = {
11671183 let bg = invoke(bd, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
11681184 if ($isInstanceOf(bg, "Boolean"))
11691185 then bg
11701186 else throw(($getType(bg) + " couldn't be cast to Boolean"))
11711187 }
11721188 let fl = if (!(bj(fd.caller)))
11731189 then if (if (if (bk())
11741190 then true
11751191 else (bx == l))
11761192 then true
11771193 else (bx == n))
11781194 then true
11791195 else hg
11801196 else false
11811197 let fZ = [if (if (!(fl))
11821198 then true
11831199 else gt(fd))
11841200 then true
11851201 else ba("put operation is blocked by admin"), if ((size(fd.payments) == 1))
11861202 then true
11871203 else ba("exactly 1 payment are expected")]
11881204 if ((fZ == fZ))
11891205 then {
11901206 let hh = fd.payments[0]
11911207 let fu = hh.assetId
11921208 let ft = hh.amount
11931209 let eJ = if ((fu == bz))
11941210 then eC(toBigInt(ft), toBigInt(0), toBigInt(0))
11951211 else if ((fu == bA))
11961212 then eC(toBigInt(0), toBigInt(ft), toBigInt(0))
11971213 else ba("payment asset is not supported")
11981214 if ((eJ == eJ))
11991215 then {
12001216 let ab = fd.caller
12011217 let ac = fd.transactionId
12021218 let hi = fs(ft, fu, ab, ac)
12031219 if ((hi == hi))
12041220 then {
12051221 let fy = hi._5
12061222 let hj = hi._4
12071223 let fr = hi._3
12081224 let ev = hi._2
12091225 let hk = hi._1
12101226 let hl = if (if ((he > 0))
12111227 then (he > hk)
12121228 else false)
12131229 then ba(makeString(["amount to receive is less than ", toString(he)], ""))
12141230 else hk
12151231 let fn = fm(hl)
12161232 if ((fn == fn))
12171233 then {
12181234 let gX = if (hf)
12191235 then {
12201236 let hm = invoke(bE, "stake", nil, [AttachedPayment(by, hl)])
12211237 if ((hm == hm))
12221238 then nil
12231239 else throw("Strict value is not equal to itself.")
12241240 }
12251241 else [ScriptTransfer(fd.caller, hl, by)]
12261242 let hn = if ((fr > 0))
12271243 then [ScriptTransfer(be, fr, fu)]
12281244 else nil
12291245 let ho = if ((this == be))
12301246 then $Tuple2(0, 0)
12311247 else if (fy)
12321248 then $Tuple2(-(fr), 0)
12331249 else $Tuple2(0, -(fr))
12341250 let eL = ho._1
12351251 let eM = ho._2
12361252 let hp = eK(eL, eM, 0)
12371253 let gP = hp._1
12381254 let eB = hp._2
12391255 let eW = value(getString(aj))
12401256 let ha = eP(eJ, eB)
12411257 if ((ha == ha))
12421258 then {
12431259 let hb = invoke(this, "rebalance", nil, nil)
12441260 if ((hb == hb))
12451261 then $Tuple2((((ev ++ gX) ++ hn) ++ gP), hl)
12461262 else throw("Strict value is not equal to itself.")
12471263 }
12481264 else throw("Strict value is not equal to itself.")
12491265 }
12501266 else throw("Strict value is not equal to itself.")
12511267 }
12521268 else throw("Strict value is not equal to itself.")
12531269 }
12541270 else throw("Strict value is not equal to itself.")
12551271 }
12561272 else throw("Strict value is not equal to itself.")
12571273 }
12581274
12591275
12601276
12611277 @Callable(fd)
12621278 func putOneTknREADONLY (fu,ft) = {
12631279 let hq = fs(ft, bp(fu), unit, unit)
12641280 let hk = hq._1
12651281 let ev = hq._2
12661282 let fr = hq._3
12671283 let hj = hq._4
12681284 let fy = hq._5
12691285 $Tuple2(nil, $Tuple3(hk, fr, hj))
12701286 }
12711287
12721288
12731289
12741290 @Callable(fd)
12751291 func getOneTkn (hr,he) = {
12761292 let hg = {
12771293 let bg = invoke(bd, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
12781294 if ($isInstanceOf(bg, "Boolean"))
12791295 then bg
12801296 else throw(($getType(bg) + " couldn't be cast to Boolean"))
12811297 }
12821298 let fg = if (!(bj(fd.caller)))
12831299 then if (if (bk())
12841300 then true
12851301 else (bx == n))
12861302 then true
12871303 else hg
12881304 else false
12891305 let fZ = [if (if (!(fg))
12901306 then true
12911307 else gt(fd))
12921308 then true
12931309 else ba("get operation is blocked by admin"), if ((size(fd.payments) == 1))
12941310 then true
12951311 else ba("exactly 1 payment are expected")]
12961312 if ((fZ == fZ))
12971313 then {
12981314 let fY = bp(hr)
12991315 let hh = fd.payments[0]
13001316 let fu = hh.assetId
13011317 let fG = hh.amount
13021318 let eJ = eC(toBigInt(0), toBigInt(0), toBigInt(0))
13031319 if ((eJ == eJ))
13041320 then {
13051321 let ab = fd.caller
13061322 let ac = fd.transactionId
13071323 let hs = fX(fY, fG, fu, ab, ac)
13081324 if ((hs == hs))
13091325 then {
13101326 let ga = hs._5
13111327 let hj = hs._4
13121328 let fr = hs._3
13131329 let ev = hs._2
13141330 let ht = hs._1
13151331 let ch = if (if ((he > 0))
13161332 then (he > ht)
13171333 else false)
13181334 then ba(makeString(["amount to receive is less than ", toString(he)], ""))
13191335 else ht
13201336 let hu = invoke(bd, "burn", [fG], [AttachedPayment(fu, fG)])
13211337 if ((hu == hu))
13221338 then {
13231339 let gR = cR(hr, (ch + max([0, fr])))
13241340 let hv = [ScriptTransfer(ab, ch, fY)]
13251341 let hn = if ((fr > 0))
13261342 then [ScriptTransfer(be, fr, fY)]
13271343 else nil
13281344 let hw = {
13291345 let hx = if ((this == be))
13301346 then 0
13311347 else fr
13321348 if (ga)
13331349 then $Tuple2(-((ch + hx)), 0)
13341350 else $Tuple2(0, -((ch + hx)))
13351351 }
13361352 let eL = hw._1
13371353 let eM = hw._2
13381354 let hy = eK(eL, eM, 0)
13391355 let gP = hy._1
13401356 let eB = hy._2
13411357 let ha = eP(eJ, eB)
13421358 if ((ha == ha))
13431359 then $Tuple2(((((ev ++ gR) ++ hv) ++ hn) ++ gP), ch)
13441360 else throw("Strict value is not equal to itself.")
13451361 }
13461362 else throw("Strict value is not equal to itself.")
13471363 }
13481364 else throw("Strict value is not equal to itself.")
13491365 }
13501366 else throw("Strict value is not equal to itself.")
13511367 }
13521368 else throw("Strict value is not equal to itself.")
13531369 }
13541370
13551371
13561372
13571373 @Callable(fd)
13581374 func getOneTknREADONLY (fY,fG) = {
13591375 let hz = fX(bp(fY), fG, by, unit, unit)
13601376 let ht = hz._1
13611377 let ev = hz._2
13621378 let fr = hz._3
13631379 let hj = hz._4
13641380 let ga = hz._5
13651381 $Tuple2(nil, $Tuple3(ht, fr, hj))
13661382 }
13671383
13681384
13691385
13701386 @Callable(fd)
13711387 func unstakeAndGetOneTkn (hA,hr,he) = {
13721388 let hg = {
13731389 let bg = invoke(bd, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
13741390 if ($isInstanceOf(bg, "Boolean"))
13751391 then bg
13761392 else throw(($getType(bg) + " couldn't be cast to Boolean"))
13771393 }
13781394 let fg = if (!(bj(fd.caller)))
13791395 then if (if (bk())
13801396 then true
13811397 else (bx == n))
13821398 then true
13831399 else hg
13841400 else false
13851401 let fZ = [if (if (!(fg))
13861402 then true
13871403 else gt(fd))
13881404 then true
13891405 else ba("get operation is blocked by admin"), if ((size(fd.payments) == 0))
13901406 then true
13911407 else ba("no payments are expected")]
13921408 if ((fZ == fZ))
13931409 then {
13941410 let fY = bp(hr)
13951411 let ab = fd.caller
13961412 let ac = fd.transactionId
13971413 let eJ = eC(toBigInt(0), toBigInt(0), toBigInt(0))
13981414 if ((eJ == eJ))
13991415 then {
14001416 let hB = invoke(bE, "unstake", [toBase58String(by), hA], nil)
14011417 if ((hB == hB))
14021418 then {
14031419 let hC = fX(fY, hA, by, ab, ac)
14041420 if ((hC == hC))
14051421 then {
14061422 let ga = hC._5
14071423 let hj = hC._4
14081424 let fr = hC._3
14091425 let ev = hC._2
14101426 let ht = hC._1
14111427 let ch = if (if ((he > 0))
14121428 then (he > ht)
14131429 else false)
14141430 then ba(makeString(["amount to receive is less than ", toString(he)], ""))
14151431 else ht
14161432 let hu = invoke(bd, "burn", [hA], [AttachedPayment(by, hA)])
14171433 if ((hu == hu))
14181434 then {
14191435 let gR = cR(hr, (ch + max([0, fr])))
14201436 let hv = [ScriptTransfer(fd.caller, ch, fY)]
14211437 let hn = if ((fr > 0))
14221438 then [ScriptTransfer(be, fr, fY)]
14231439 else nil
14241440 let hD = {
14251441 let hx = if ((this == be))
14261442 then 0
14271443 else fr
14281444 if (ga)
14291445 then $Tuple2(-((ch + hx)), 0)
14301446 else $Tuple2(0, -((ch + hx)))
14311447 }
14321448 let eL = hD._1
14331449 let eM = hD._2
14341450 let hE = eK(eL, eM, 0)
14351451 let gP = hE._1
14361452 let eB = hE._2
14371453 let ha = eP(eJ, eB)
14381454 if ((ha == ha))
14391455 then $Tuple2(((((ev ++ gR) ++ hv) ++ hn) ++ gP), ch)
14401456 else throw("Strict value is not equal to itself.")
14411457 }
14421458 else throw("Strict value is not equal to itself.")
14431459 }
14441460 else throw("Strict value is not equal to itself.")
14451461 }
14461462 else throw("Strict value is not equal to itself.")
14471463 }
14481464 else throw("Strict value is not equal to itself.")
14491465 }
14501466 else throw("Strict value is not equal to itself.")
14511467 }
14521468
14531469
14541470
14551471 @Callable(fd)
14561472 func get () = {
14571473 let eg = fc(fd)
14581474 let dM = eg._1
14591475 let dN = eg._2
14601476 let ff = eg._3
14611477 let dv = eg._4
14621478 let dO = eg._5
14631479 let gR = cW(dM, dN)
14641480 let eJ = eC(toBigInt(0), toBigInt(0), toBigInt(0))
14651481 if ((eJ == eJ))
14661482 then {
14671483 let hF = invoke(bd, "burn", [ff], [AttachedPayment(dv, ff)])
14681484 if ((hF == hF))
14691485 then {
14701486 let hG = eK(-(dM), -(dN), 0)
14711487 let gP = hG._1
14721488 let eB = hG._2
14731489 let ha = eP(eJ, eB)
14741490 if ((ha == ha))
14751491 then ((gR ++ dO) ++ gP)
14761492 else throw("Strict value is not equal to itself.")
14771493 }
14781494 else throw("Strict value is not equal to itself.")
14791495 }
14801496 else throw("Strict value is not equal to itself.")
14811497 }
14821498
14831499
14841500
14851501 @Callable(fd)
14861502 func getNoLess (hH,hI) = {
14871503 let eg = fc(fd)
14881504 let dM = eg._1
14891505 let dN = eg._2
14901506 let ff = eg._3
14911507 let dv = eg._4
14921508 let dO = eg._5
14931509 if ((hH > dM))
14941510 then throw(((("noLessThenAmtAsset failed: " + toString(dM)) + " < ") + toString(hH)))
14951511 else if ((hI > dN))
14961512 then throw(((("noLessThenPriceAsset failed: " + toString(dN)) + " < ") + toString(hI)))
14971513 else {
14981514 let gR = cW(dM, dN)
14991515 let eJ = eC(toBigInt(0), toBigInt(0), toBigInt(0))
15001516 if ((eJ == eJ))
15011517 then {
15021518 let hF = invoke(bd, "burn", [ff], [AttachedPayment(dv, ff)])
15031519 if ((hF == hF))
15041520 then {
15051521 let hJ = eK(-(dM), -(dN), 0)
15061522 let gP = hJ._1
15071523 let eB = hJ._2
15081524 let ha = eP(eJ, eB)
15091525 if ((ha == ha))
15101526 then ((gR ++ dO) ++ gP)
15111527 else throw("Strict value is not equal to itself.")
15121528 }
15131529 else throw("Strict value is not equal to itself.")
15141530 }
15151531 else throw("Strict value is not equal to itself.")
15161532 }
15171533 }
15181534
15191535
15201536
15211537 @Callable(fd)
15221538 func unstakeAndGet (ch) = {
15231539 let hK = if ((size(fd.payments) != 0))
15241540 then throw("No payments are expected")
15251541 else true
15261542 if ((hK == hK))
15271543 then {
15281544 let dk = bm()
15291545 let dx = fromBase58String(dk[q])
15301546 let eJ = eC(toBigInt(0), toBigInt(0), toBigInt(0))
15311547 if ((eJ == eJ))
15321548 then {
15331549 let hB = invoke(bE, "unstake", [toBase58String(dx), ch], nil)
15341550 if ((hB == hB))
15351551 then {
15361552 let eg = dt(toBase58String(fd.transactionId), toBase58String(dx), ch, fd.caller)
15371553 let dM = eg._1
15381554 let dN = eg._2
15391555 let dA = parseIntValue(eg._9)
15401556 let dO = eg._10
15411557 let gR = cW(dM, dN)
15421558 let fg = if (!(bj(fd.caller)))
15431559 then if (bk())
15441560 then true
15451561 else (bx == n)
15461562 else false
15471563 let hL = if (fg)
15481564 then throw(("Get operation is blocked by admin. Status = " + toString(dA)))
15491565 else true
15501566 if ((hL == hL))
15511567 then {
15521568 let hF = invoke(bd, "burn", [ch], [AttachedPayment(dx, ch)])
15531569 if ((hF == hF))
15541570 then {
15551571 let hM = eK(-(dM), -(dN), 0)
15561572 let gP = hM._1
15571573 let eB = hM._2
15581574 let ha = eP(eJ, eB)
15591575 if ((ha == ha))
15601576 then ((gR ++ dO) ++ gP)
15611577 else throw("Strict value is not equal to itself.")
15621578 }
15631579 else throw("Strict value is not equal to itself.")
15641580 }
15651581 else throw("Strict value is not equal to itself.")
15661582 }
15671583 else throw("Strict value is not equal to itself.")
15681584 }
15691585 else throw("Strict value is not equal to itself.")
15701586 }
15711587 else throw("Strict value is not equal to itself.")
15721588 }
15731589
15741590
15751591
15761592 @Callable(fd)
15771593 func unstakeAndGetNoLess (hA,hN,hI) = {
15781594 let fg = if (!(bj(fd.caller)))
15791595 then if (bk())
15801596 then true
15811597 else (bx == n)
15821598 else false
15831599 let fZ = [if (!(fg))
15841600 then true
15851601 else throw("get operation is blocked by admin"), if ((size(fd.payments) == 0))
15861602 then true
15871603 else throw("no payments are expected")]
15881604 if ((fZ == fZ))
15891605 then {
15901606 let eJ = eC(toBigInt(0), toBigInt(0), toBigInt(0))
15911607 if ((eJ == eJ))
15921608 then {
15931609 let hB = invoke(bE, "unstake", [toBase58String(by), hA], nil)
15941610 if ((hB == hB))
15951611 then {
15961612 let eg = dt(toBase58String(fd.transactionId), toBase58String(by), hA, fd.caller)
15971613 let dM = eg._1
15981614 let dN = eg._2
15991615 let dO = eg._10
16001616 let gR = cW(dM, dN)
16011617 let hO = [if ((dM >= hN))
16021618 then true
16031619 else throw(makeString(["amount asset amount to receive is less than ", toString(hN)], "")), if ((dN >= hI))
16041620 then true
16051621 else throw(makeString(["price asset amount to receive is less than ", toString(hI)], ""))]
16061622 if ((hO == hO))
16071623 then {
16081624 let hF = invoke(bd, "burn", [hA], [AttachedPayment(by, hA)])
16091625 if ((hF == hF))
16101626 then {
16111627 let hP = eK(-(dM), -(dN), 0)
16121628 let gP = hP._1
16131629 let eB = hP._2
16141630 let ha = eP(eJ, eB)
16151631 if ((ha == ha))
16161632 then ((gR ++ dO) ++ gP)
16171633 else throw("Strict value is not equal to itself.")
16181634 }
16191635 else throw("Strict value is not equal to itself.")
16201636 }
16211637 else throw("Strict value is not equal to itself.")
16221638 }
16231639 else throw("Strict value is not equal to itself.")
16241640 }
16251641 else throw("Strict value is not equal to itself.")
16261642 }
16271643 else throw("Strict value is not equal to itself.")
16281644 }
16291645
16301646
16311647
16321648 @Callable(fd)
16331649 func activate (hQ,hR) = if ((toString(fd.caller) != toString(bd)))
16341650 then throw("permissions denied")
16351651 else $Tuple2([StringEntry(ae(), hQ), StringEntry(af(), hR)], "success")
16361652
16371653
16381654
16391655 @Callable(fd)
16401656 func refreshKLp () = {
16411657 let hS = valueOrElse(getInteger(ak), 0)
16421658 let hT = if (((height - hS) >= an))
16431659 then unit
16441660 else ba(makeString([toString(an), " blocks have not passed since the previous call"], ""))
16451661 if ((hT == hT))
16461662 then {
16471663 let eW = valueOrErrorMessage(parseBigInt(valueOrElse(getString(this, aj), "0")), bc("invalid kLp"))
16481664 let hU = eK(0, 0, 0)
16491665 let hV = hU._1
16501666 let eB = hU._2
16511667 let eN = if ((eW != eB))
16521668 then hV
16531669 else ba("nothing to refresh")
16541670 $Tuple2(eN, toString(eB))
16551671 }
16561672 else throw("Strict value is not equal to itself.")
16571673 }
16581674
16591675
16601676
16611677 @Callable(fd)
16621678 func getPoolConfigWrapperREADONLY () = $Tuple2(nil, bm())
16631679
16641680
16651681
16661682 @Callable(fd)
16671683 func getAccBalanceWrapperREADONLY (ap) = $Tuple2(nil, bV(ap))
16681684
16691685
16701686
16711687 @Callable(fd)
16721688 func calcPricesWrapperREADONLY (de,df,dj) = {
16731689 let ds = di(de, df, dj)
16741690 $Tuple2(nil, [toString(ds[0]), toString(ds[1]), toString(ds[2])])
16751691 }
16761692
16771693
16781694
16791695 @Callable(fd)
16801696 func toX18WrapperREADONLY (E,F) = $Tuple2(nil, toString(D(E, F)))
16811697
16821698
16831699
16841700 @Callable(fd)
16851701 func fromX18WrapperREADONLY (I,J) = $Tuple2(nil, H(parseBigIntValue(I), J))
16861702
16871703
16881704
16891705 @Callable(fd)
16901706 func calcPriceBigIntWrapperREADONLY (bZ,ca) = $Tuple2(nil, toString(bY(parseBigIntValue(bZ), parseBigIntValue(ca))))
16911707
16921708
16931709
16941710 @Callable(fd)
16951711 func estimatePutOperationWrapperREADONLY (du,dQ,dR,dS,dT,dU,ab,dV,dW) = $Tuple2(nil, dP(du, dQ, dR, dS, dT, dU, ab, dV, dW))
16961712
16971713
16981714
16991715 @Callable(fd)
17001716 func estimateGetOperationWrapperREADONLY (du,dv,dw,ab) = {
17011717 let eg = dt(du, dv, dw, addressFromStringValue(ab))
17021718 $Tuple2(nil, $Tuple10(eg._1, eg._2, eg._3, eg._4, eg._5, eg._6, eg._7, toString(eg._8), eg._9, eg._10))
17031719 }
17041720
17051721
17061722
17071723 @Callable(fd)
17081724 func statsREADONLY () = {
17091725 let dk = bm()
17101726 let dx = fromBase58String(dk[q])
17111727 let hW = dk[r]
17121728 let hX = dk[s]
17131729 let dZ = dk[v]
17141730 let ea = dk[w]
17151731 let dl = parseIntValue(dk[t])
17161732 let dm = parseIntValue(dk[u])
17171733 let hY = valueOrErrorMessage(assetInfo(dx), (("Asset " + toBase58String(dx)) + " doesn't exist")).quantity
17181734 let hZ = bV(hW)
17191735 let ia = bV(hX)
17201736 let ib = if ((hY == 0))
17211737 then [e, e, e]
17221738 else di(hZ, ia, hY)
17231739 let dH = 0
17241740 let ic = H(ib[1], b)
17251741 let id = H(ib[2], b)
17261742 let ie = value(getInteger(bd, aD(toString(this))))
17271743 $Tuple2(nil, makeString(["%d%d%d%d%d%d%d", toString(hZ), toString(ia), toString(hY), toString(dH), toString(ic), toString(id), toString(ie)], j))
17281744 }
17291745
17301746
17311747
17321748 @Callable(fd)
17331749 func evaluatePutByAmountAssetREADONLY (dR) = {
17341750 let dk = bm()
17351751 let dx = fromBase58String(dk[q])
17361752 let dX = dk[r]
17371753 let dy = fromBase58String(dX)
17381754 let dY = dk[s]
17391755 let dz = fromBase58String(dY)
17401756 let dl = parseIntValue(dk[t])
17411757 let dm = parseIntValue(dk[u])
17421758 let dA = dk[p]
17431759 let hY = valueOrErrorMessage(assetInfo(dx), (("Asset " + toBase58String(dx)) + " doesn't exist")).quantity
17441760 let hZ = bV(dX)
17451761 let ia = bV(dY)
17461762 let dg = D(hZ, dl)
17471763 let dh = D(ia, dm)
17481764 let dG = if ((hY == 0))
17491765 then e
17501766 else bY(dh, dg)
17511767 let ed = D(dR, dl)
17521768 let ee = fraction(ed, dG, d)
17531769 let dT = H(ee, dm)
17541770 let fk = dP("", 500000, dR, dy, dT, dz, "", true, false)
17551771 let eo = fk._1
17561772 let if = fk._3
17571773 let dC = fk._4
17581774 let dE = fk._5
17591775 let dB = fk._6
17601776 $Tuple2(nil, makeString(["%d%d%d%d%d%d%d%d", toString(eo), toString(H(dG, b)), toString(dC), toString(dE), toString(dB), dA, toString(dR), toString(dT)], j))
17611777 }
17621778
17631779
17641780
17651781 @Callable(fd)
17661782 func evaluatePutByPriceAssetREADONLY (dT) = {
17671783 let dk = bm()
17681784 let dx = fromBase58String(dk[q])
17691785 let dX = dk[r]
17701786 let dy = fromBase58String(dX)
17711787 let dY = dk[s]
17721788 let dz = fromBase58String(dY)
17731789 let dl = parseIntValue(dk[t])
17741790 let dm = parseIntValue(dk[u])
17751791 let dA = dk[p]
17761792 let hY = valueOrErrorMessage(assetInfo(dx), (("Asset " + toBase58String(dx)) + " doesn't exist")).quantity
17771793 let ig = bV(dX)
17781794 let ih = bV(dY)
17791795 let ii = D(ig, dl)
17801796 let ij = D(ih, dm)
17811797 let dG = if ((hY == 0))
17821798 then e
17831799 else bY(ij, ii)
17841800 let ee = D(dT, dm)
17851801 let ed = fraction(ee, d, dG)
17861802 let dR = H(ed, dl)
17871803 let fk = dP("", 500000, dR, dy, dT, dz, "", true, false)
17881804 let eo = fk._1
17891805 let if = fk._3
17901806 let dC = fk._4
17911807 let dE = fk._5
17921808 let dB = fk._6
17931809 $Tuple2(nil, makeString(["%d%d%d%d%d%d%d%d", toString(eo), toString(H(dG, b)), toString(dC), toString(dE), toString(dB), dA, toString(dR), toString(dT)], j))
17941810 }
17951811
17961812
17971813
17981814 @Callable(fd)
17991815 func evaluateGetREADONLY (ik,il) = {
18001816 let eg = dt("", ik, il, this)
18011817 let dM = eg._1
18021818 let dN = eg._2
18031819 let dC = eg._5
18041820 let dE = eg._6
18051821 let dB = eg._7
18061822 let dH = eg._8
18071823 let dA = parseIntValue(eg._9)
18081824 $Tuple2(nil, makeString(["%d%d%d%d%d%d%d", toString(dM), toString(dN), toString(dC), toString(dE), toString(dB), toString(dH), toString(dA)], j))
18091825 }
18101826
18111827
18121828 @Verifier(im)
18131829 func in () = {
18141830 let io = {
18151831 let aQ = gr()
18161832 if ($isInstanceOf(aQ, "ByteVector"))
18171833 then {
18181834 let gu = aQ
18191835 gu
18201836 }
18211837 else if ($isInstanceOf(aQ, "Unit"))
18221838 then im.senderPublicKey
18231839 else throw("Match error")
18241840 }
18251841 let aQ = im
18261842 if ($isInstanceOf(aQ, "Order"))
18271843 then {
18281844 let eS = aQ
18291845 let ip = bl()
18301846 let iq = if (eO())
18311847 then $Tuple2(true, "")
18321848 else eR(eS)
18331849 let aK = iq._1
18341850 let aL = iq._2
18351851 let aM = sigVerify(eS.bodyBytes, eS.proofs[0], eS.senderPublicKey)
18361852 let aN = sigVerify(eS.bodyBytes, eS.proofs[1], ip)
18371853 if (if (if (aK)
18381854 then aM
18391855 else false)
18401856 then aN
18411857 else false)
18421858 then true
18431859 else aJ(aK, aL, aM, aN)
18441860 }
18451861 else if ($isInstanceOf(aQ, "SetScriptTransaction"))
18461862 then {
18471863 let aV = aQ
18481864 if (sigVerify(im.bodyBytes, im.proofs[0], io))
18491865 then true
18501866 else {
18511867 let ir = blake2b256(value(aV.script))
18521868 let is = fromBase64String(value(getString(bd, aF())))
18531869 let it = scriptHash(this)
18541870 if ((is == ir))
18551871 then (it != ir)
18561872 else false
18571873 }
18581874 }
18591875 else sigVerify(im.bodyBytes, im.proofs[0], io)
18601876 }
18611877

github/deemru/w8io/026f985 
197.32 ms