tx · 97QJvyYm8wTcpzSosgTM79LFAFQsMD4LaDwFAqYFcEQ9

3MrrBfr6a5nDL9q6RY3JnifJDYpKXhiMzeK:  -0.03100000 Waves

2022.12.05 16:10 [2347092] smart account 3MrrBfr6a5nDL9q6RY3JnifJDYpKXhiMzeK > SELF 0.00000000 Waves

{ "type": 13, "id": "97QJvyYm8wTcpzSosgTM79LFAFQsMD4LaDwFAqYFcEQ9", "fee": 3100000, "feeAssetId": null, "timestamp": 1670245854438, "version": 1, "sender": "3MrrBfr6a5nDL9q6RY3JnifJDYpKXhiMzeK", "senderPublicKey": "AD9KZBhdGzDEZ9VsjHGcbBDzVgtUFycMe74pn3n8uYiC", "proofs": [ "4TZiDfuJo6tJbqLXouZ3RE9ZUScqPaqcPH7NjQrXVQdCZsuWFEn8mmFWZo2MyyihvDuuMy3eZWGjPyyTQ9jFHogL" ], "script": "base64:BgLgKQgCEgMKAQgSABIECgIBBBIDCgEBEgQKAgEEEgQKAggBEgQKAggBEgQKAggBEgUKAwEIARIAEgQKAgEBEgMKAQESBQoDAQEBEgQKAggIEgASABIDCgEIEgUKAwEBARIECgIBARIECgIIARIECgIICBILCgkIAQECAQIIBAQSBgoECAgBCBIAEgMKAQESAwoBARIECgIIASIKbFBkZWNpbWFscyIGc2NhbGU4IgxzY2FsZThCaWdJbnQiB3NjYWxlMTgiCnplcm9CaWdJbnQiBGJpZzAiBGJpZzEiBGJpZzIiC3dhdmVzU3RyaW5nIgNTRVAiClBvb2xBY3RpdmUiD1Bvb2xQdXREaXNhYmxlZCITUG9vbE1hdGNoZXJEaXNhYmxlZCIMUG9vbFNodXRkb3duIg5pZHhQb29sQWRkcmVzcyINaWR4UG9vbFN0YXR1cyIQaWR4UG9vbExQQXNzZXRJZCINaWR4QW10QXNzZXRJZCIPaWR4UHJpY2VBc3NldElkIg5pZHhBbXRBc3NldERjbSIQaWR4UHJpY2VBc3NldERjbSIOaWR4SUFtdEFzc2V0SWQiEGlkeElQcmljZUFzc2V0SWQiDWlkeExQQXNzZXREY20iEmlkeFBvb2xBbXRBc3NldEFtdCIUaWR4UG9vbFByaWNlQXNzZXRBbXQiEWlkeFBvb2xMUEFzc2V0QW10IhlpZHhGYWN0b3J5U3Rha2luZ0NvbnRyYWN0IhppZHhGYWN0b3J5U2xpcHBhZ2VDb250cmFjdCIFdG9YMTgiB29yaWdWYWwiDW9yaWdTY2FsZU11bHQiB2Zyb21YMTgiA3ZhbCIPcmVzdWx0U2NhbGVNdWx0Igd0b1NjYWxlIgNhbXQiCHJlc1NjYWxlIghjdXJTY2FsZSIDYWJzIglhYnNCaWdJbnQiAmZjIgNtcGsiBHBtcGsiAnBsIgJwaCIBaCIJdGltZXN0YW1wIgNwYXUiC3VzZXJBZGRyZXNzIgR0eElkIgNnYXUiAmFhIgJwYSIGa2V5RmVlIgpmZWVEZWZhdWx0IgNmZWUiBmtleUtMcCIVa2V5S0xwUmVmcmVzaGVkSGVpZ2h0IhJrZXlLTHBSZWZyZXNoRGVsYXkiFmtMcFJlZnJlc2hEZWxheURlZmF1bHQiD2tMcFJlZnJlc2hEZWxheSIQa2V5RmFjdG9yeUNvbmZpZyINa2V5TWF0Y2hlclB1YiIpa2V5TWFwcGluZ1Bvb2xDb250cmFjdEFkZHJlc3NUb1Bvb2xBc3NldHMiE3Bvb2xDb250cmFjdEFkZHJlc3MiDWtleVBvb2xDb25maWciCWlBbXRBc3NldCILaVByaWNlQXNzZXQiH2tleU1hcHBpbmdzQmFzZUFzc2V0MmludGVybmFsSWQiDGJhc2VBc3NldFN0ciITa2V5QWxsUG9vbHNTaHV0ZG93biINa2V5UG9vbFdlaWdodCIPY29udHJhY3RBZGRyZXNzIhZrZXlBbGxvd2VkTHBTY3JpcHRIYXNoIhZrZXlGZWVDb2xsZWN0b3JBZGRyZXNzIg90aHJvd09yZGVyRXJyb3IiCm9yZGVyVmFsaWQiC3NlbmRlclZhbGlkIgxtYXRjaGVyVmFsaWQiD2dldFN0cmluZ09yRmFpbCIHYWRkcmVzcyIDa2V5IgxnZXRJbnRPckZhaWwiCHRocm93RXJyIgNtc2ciBmZtdEVyciIPZmFjdG9yeUNvbnRyYWN0IhNmZWVDb2xsZWN0b3JBZGRyZXNzIhBpc0dsb2JhbFNodXRkb3duIhNnZXRNYXRjaGVyUHViT3JGYWlsIg1nZXRQb29sQ29uZmlnIghhbXRBc3NldCIKcHJpY2VBc3NldCIMcGFyc2VBc3NldElkIgVpbnB1dCIPYXNzZXRJZFRvU3RyaW5nIg9wYXJzZVBvb2xDb25maWciCnBvb2xDb25maWciEHBvb2xDb25maWdQYXJzZWQiCyR0MDc5MTU4MDgxIg5jZmdQb29sQWRkcmVzcyINY2ZnUG9vbFN0YXR1cyIMY2ZnTHBBc3NldElkIhBjZmdBbW91bnRBc3NldElkIg9jZmdQcmljZUFzc2V0SWQiFmNmZ0Ftb3VudEFzc2V0RGVjaW1hbHMiFWNmZ1ByaWNlQXNzZXREZWNpbWFscyIQZ2V0RmFjdG9yeUNvbmZpZyIPc3Rha2luZ0NvbnRyYWN0IhBzbGlwcGFnZUNvbnRyYWN0IhFkYXRhUHV0QWN0aW9uSW5mbyINaW5BbXRBc3NldEFtdCIPaW5QcmljZUFzc2V0QW10IghvdXRMcEFtdCIFcHJpY2UiHXNsaXBwYWdlVG9sZXJhbmNlUGFzc2VkQnlVc2VyIhVzbGlwcGFnZVRvbGVyYW5jZVJlYWwiCHR4SGVpZ2h0Igt0eFRpbWVzdGFtcCISc2xpcGFnZUFtdEFzc2V0QW10IhRzbGlwYWdlUHJpY2VBc3NldEFtdCIRZGF0YUdldEFjdGlvbkluZm8iDm91dEFtdEFzc2V0QW10IhBvdXRQcmljZUFzc2V0QW10IgdpbkxwQW10Ig1nZXRBY2NCYWxhbmNlIgdhc3NldElkIg9jYWxjUHJpY2VCaWdJbnQiCHByQW10WDE4IghhbUFtdFgxOCIQcHJpdmF0ZUNhbGNQcmljZSIKYW1Bc3NldERjbSIKcHJBc3NldERjbSIFYW1BbXQiBXByQW10Ig5hbXRBc3NldEFtdFgxOCIQcHJpY2VBc3NldEFtdFgxOCIKY2FsY1ByaWNlcyIFbHBBbXQiA2NmZyILYW10QXNzZXREY20iDXByaWNlQXNzZXREY20iCHByaWNlWDE4IghscEFtdFgxOCITbHBQcmljZUluQW1Bc3NldFgxOCITbHBQcmljZUluUHJBc3NldFgxOCIPY2FsY3VsYXRlUHJpY2VzIgZwcmljZXMiFGVzdGltYXRlR2V0T3BlcmF0aW9uIgZ0eElkNTgiCnBtdEFzc2V0SWQiCHBtdExwQW10IglscEFzc2V0SWQiCWFtQXNzZXRJZCIJcHJBc3NldElkIgpwb29sU3RhdHVzIgpscEVtaXNzaW9uIglhbUJhbGFuY2UiDGFtQmFsYW5jZVgxOCIJcHJCYWxhbmNlIgxwckJhbGFuY2VYMTgiC2N1clByaWNlWDE4IghjdXJQcmljZSILcG10THBBbXRYMTgiDWxwRW1pc3Npb25YMTgiC291dEFtQW10WDE4IgtvdXRQckFtdFgxOCIIb3V0QW1BbXQiCG91dFByQW10IgVzdGF0ZSIUZXN0aW1hdGVQdXRPcGVyYXRpb24iEXNsaXBwYWdlVG9sZXJhbmNlIgxpbkFtQXNzZXRBbXQiC2luQW1Bc3NldElkIgxpblByQXNzZXRBbXQiC2luUHJBc3NldElkIgppc0V2YWx1YXRlIgZlbWl0THAiDGFtQXNzZXRJZFN0ciIMcHJBc3NldElkU3RyIgtpQW10QXNzZXRJZCINaVByaWNlQXNzZXRJZCIOaW5BbUFzc2V0SWRTdHIiDmluUHJBc3NldElkU3RyIg9pbkFtQXNzZXRBbXRYMTgiD2luUHJBc3NldEFtdFgxOCIMdXNlclByaWNlWDE4IgNyZXMiC3NsaXBwYWdlWDE4IhRzbGlwcGFnZVRvbGVyYW5jZVgxOCIKcHJWaWFBbVgxOCIKYW1WaWFQclgxOCIMZXhwZWN0ZWRBbXRzIhFleHBBbXRBc3NldEFtdFgxOCITZXhwUHJpY2VBc3NldEFtdFgxOCIJY2FsY0xwQW10Ig5jYWxjQW1Bc3NldFBtdCIOY2FsY1ByQXNzZXRQbXQiDHNsaXBwYWdlQ2FsYyIJZW1pdExwQW10IgZhbURpZmYiBnByRGlmZiILY29tbW9uU3RhdGUiG3ZhbGlkYXRlTWF0Y2hlck9yZGVyQWxsb3dlZCIFb3JkZXIiCmFtdEFzc2V0SWQiDHByaWNlQXNzZXRJZCISYWNjQW10QXNzZXRCYWxhbmNlIhRhY2NQcmljZUFzc2V0QmFsYW5jZSINb3JkZXJBbXRBc3NldCIQb3JkZXJBbXRBc3NldFN0ciIPb3JkZXJQcmljZUFzc2V0IhJvcmRlclByaWNlQXNzZXRTdHIiCm9yZGVyUHJpY2UiCHByaWNlRGNtIhBjYXN0ZWRPcmRlclByaWNlIhFpc09yZGVyUHJpY2VWYWxpZCIJY29tbW9uR2V0IgFpIgNwbXQiBnBtdEFtdCIJY29tbW9uUHV0IgphbUFzc2V0UG10IgpwckFzc2V0UG10IgZlc3RQdXQiBGVtaXQiBmFtb3VudCIHZW1pdEludiINZW1pdEludkxlZ2FjeSIHJG1hdGNoMCIVbGVnYWN5RmFjdG9yeUNvbnRyYWN0Igd0YWtlRmVlIglmZWVBbW91bnQiD2NhbGNQdXRPbmVUb2tlbiIQcGF5bWVudEFtb3VudFJhdyIOcGF5bWVudEFzc2V0SWQiBmlzRXZhbCIQYW1vdW50QmFsYW5jZVJhdyIPcHJpY2VCYWxhbmNlUmF3IhRwYXltZW50SW5BbW91bnRBc3NldCINJHQwMjI5NDIyMzIzNSIQYW1vdW50QmFsYW5jZU9sZCIPcHJpY2VCYWxhbmNlT2xkIg0kdDAyMzIzOTIzMzg4IhRhbW91bnRBc3NldEFtb3VudFJhdyITcHJpY2VBc3NldEFtb3VudFJhdyIRYW1vdW50QXNzZXRBbW91bnQiEHByaWNlQXNzZXRBbW91bnQiDSR0MDIzNTEwMjM1NjkiDXBheW1lbnRBbW91bnQiEGFtb3VudEJhbGFuY2VOZXciD3ByaWNlQmFsYW5jZU5ldyILcHJpY2VOZXdYMTgiCHByaWNlTmV3Ig5wYXltZW50QmFsYW5jZSIUcGF5bWVudEJhbGFuY2VCaWdJbnQiDHN1cHBseUJpZ0ludCILY2hlY2hTdXBwbHkiDWRlcG9zaXRCaWdJbnQiC2lzc3VlQW1vdW50IgtwcmljZU9sZFgxOCIIcHJpY2VPbGQiBGxvc3MiDSR0MDI1MDQ2MjUyMTMiB2JhbGFuY2UiD2lzc3VlQW1vdW50Qm90aCIPY2FsY0dldE9uZVRva2VuIgpvdXRBc3NldElkIgZjaGVja3MiEG91dEluQW1vdW50QXNzZXQiDWJhbGFuY2VCaWdJbnQiDGFtQmFsYW5jZU9sZCIMcHJCYWxhbmNlT2xkIgpvdXRCYWxhbmNlIhBvdXRCYWxhbmNlQmlnSW50Ig5yZWRlZW1lZEJpZ0ludCIJYW1vdW50UmF3Ig0kdDAyNjc5MzI2ODQzIgt0b3RhbEFtb3VudCINJHQwMjY4NDcyNzA3MyILb3V0QW1BbW91bnQiC291dFByQW1vdW50IgxhbUJhbGFuY2VOZXciDHByQmFsYW5jZU5ldyIYYW1vdW50Qm90aEluUGF5bWVudEFzc2V0IgdjYWxjS0xwIg1hbW91bnRCYWxhbmNlIgxwcmljZUJhbGFuY2UiCnVwZGF0ZWRLTHAiEnJlZnJlc2hLTHBJbnRlcm5hbCISYW1vdW50QXNzZXRCYWxhbmNlIhFwcmljZUFzc2V0QmFsYW5jZSIHYWN0aW9ucyIWbWFuYWdlclB1YmxpY0tleU9yVW5pdCIBcyIdcGVuZGluZ01hbmFnZXJQdWJsaWNLZXlPclVuaXQiCWlzTWFuYWdlciICcGsiC211c3RNYW5hZ2VyIgJwZCIXcGVuZGluZ01hbmFnZXJQdWJsaWNLZXkiC2NoZWNrQ2FsbGVyIhVjaGVja01hbmFnZXJQdWJsaWNLZXkiAnBtIgVoYXNQTSIHY2hlY2tQTSIPc2hvdWxkQXV0b1N0YWtlIgRhbUlkIgRwcklkIgxzbGlwcGFnZUFJbnYiDHNsaXBwYWdlUEludiIKbHBUcmFuc2ZlciILc2xwU3Rha2VJbnYiC21heFNsaXBwYWdlIgxtaW5PdXRBbW91bnQiCWF1dG9TdGFrZSIgaXNQb29sT25lVG9rZW5PcGVyYXRpb25zRGlzYWJsZWQiAUAiDWlzUHV0RGlzYWJsZWQiB3BheW1lbnQiDSR0MDMyNzU0MzI4ODQiBWJvbnVzIhNlbWl0QW1vdW50RXN0aW1hdGVkIgplbWl0QW1vdW50IghzdGFrZUludiIHc2VuZEZlZSINJHQwMzM2MTMzMzc0OCINb3V0QXNzZXRJZFN0ciINaXNHZXREaXNhYmxlZCINJHQwMzQ1NTMzNDY4OCIPYW1vdW50RXN0aW1hdGVkIgdidXJuSW52Ig1hc3NldFRyYW5zZmVyIg0kdDAzNTMyMzM1NDYxIg11bnN0YWtlQW1vdW50Igp1bnN0YWtlSW52Ig0kdDAzNjI4NjM2NDE5IglvdXRBbXRBbXQiFGJ1cm5MUEFzc2V0T25GYWN0b3J5IhJub0xlc3NUaGVuQW10QXNzZXQiFG5vTGVzc1RoZW5QcmljZUFzc2V0Ig1jaGVja1BheW1lbnRzIg9jaGVja1Bvb2xTdGF0dXMiFW5vTGVzc1RoZW5BbW91bnRBc3NldCIMY2hlY2tBbW91bnRzIgthbXRBc3NldFN0ciINcHJpY2VBc3NldFN0ciIYbGFzdFJlZnJlc2hlZEJsb2NrSGVpZ2h0Ih1jaGVja0xhc3RSZWZyZXNoZWRCbG9ja0hlaWdodCINJHQwNDE0MDI0MTQ1MCINcG9vbExQQmFsYW5jZSIKcHJpY2VzTGlzdCIPbHBBbXRBc3NldFNoYXJlIhFscFByaWNlQXNzZXRTaGFyZSIKcG9vbFdlaWdodCIMY3VyUHJpY2VDYWxjIgxhbUJhbGFuY2VSYXciDHByQmFsYW5jZVJhdyIPYW1CYWxhbmNlUmF3WDE4Ig9wckJhbGFuY2VSYXdYMTgiEHBheW1lbnRMcEFzc2V0SWQiDHBheW1lbnRMcEFtdCICdHgiBnZlcmlmeSIPdGFyZ2V0UHVibGljS2V5IgptYXRjaGVyUHViIgduZXdIYXNoIgthbGxvd2VkSGFzaCILY3VycmVudEhhc2hrAAFhAAgAAWIAgMLXLwABYwkAtgIBAIDC1y8AAWQJALYCAQCAgJC7utat8A0AAWUJALYCAQAAAAFmCQC2AgEAAAABZwkAtgIBAAEAAWgJALYCAQACAAFpAgVXQVZFUwABagICX18AAWsAAQABbAACAAFtAAMAAW4ABAABbwABAAFwAAIAAXEAAwABcgAEAAFzAAUAAXQABgABdQAHAAF2AAgAAXcACQABeAAKAAF5AAEAAXoAAgABQQADAAFCAAEAAUMABwEBRAIBRQFGCQC8AgMJALYCAQUBRQUBZAkAtgIBBQFGAQFHAgFIAUkJAKADAQkAvAIDBQFICQC2AgEFAUkFAWQBAUoDAUsBTAFNCQBrAwUBSwUBTAUBTQEBTgEBSAMJAGYCAAAFAUgJAQEtAQUBSAUBSAEBTwEBSAMJAL8CAgUBZQUBSAkAvgIBBQFIBQFIAQFQAAITJXNfX2ZhY3RvcnlDb250cmFjdAEBUQACFCVzX19tYW5hZ2VyUHVibGljS2V5AQFSAAIbJXNfX3BlbmRpbmdNYW5hZ2VyUHVibGljS2V5AQFTAAIRJXMlc19fcHJpY2VfX2xhc3QBAVQCAVUBVgkAuQkCCQDMCAICGCVzJXMlZCVkX19wcmljZV9faGlzdG9yeQkAzAgCCQCkAwEFAVUJAMwIAgkApAMBBQFWBQNuaWwFAWoBAVcCAVgBWQkArAICCQCsAgIJAKwCAgILJXMlcyVzX19QX18FAVgCAl9fBQFZAQFaAgFYAVkJAKwCAgkArAICCQCsAgICCyVzJXMlc19fR19fBQFYAgJfXwUBWQECYWEAAg8lc19fYW1vdW50QXNzZXQBAmFiAAIOJXNfX3ByaWNlQXNzZXQAAmFjAgclc19fZmVlAAJhZAkAawMACgUBYgCQTgACYWUJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUCYWMFAmFkAAJhZgkAuQkCCQDMCAICAiVzCQDMCAICA2tMcAUDbmlsBQFqAAJhZwkAuQkCCQDMCAICAiVzCQDMCAICEmtMcFJlZnJlc2hlZEhlaWdodAUDbmlsBQFqAAJhaAkAuQkCCQDMCAICAiVzCQDMCAICD3JlZnJlc2hLTHBEZWxheQUDbmlsBQFqAAJhaQAeAAJhagkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQJhaAUCYWkBAmFrAAIRJXNfX2ZhY3RvcnlDb25maWcBAmFsAAIYJXMlc19fbWF0Y2hlcl9fcHVibGljS2V5AQJhbQECYW4JAKwCAgkArAICAgglcyVzJXNfXwUCYW4CIF9fbWFwcGluZ3NfX3Bvb2xDb250cmFjdDJMcEFzc2V0AQJhbwICYXACYXEJAKwCAgkArAICCQCsAgIJAKwCAgIIJWQlZCVzX18FAmFwAgJfXwUCYXECCF9fY29uZmlnAQJhcgECYXMJAKwCAgIoJXMlcyVzX19tYXBwaW5nc19fYmFzZUFzc2V0MmludGVybmFsSWRfXwUCYXMBAmF0AAIMJXNfX3NodXRkb3duAQJhdQECYXYJAKwCAgISJXMlc19fcG9vbFdlaWdodF9fBQJhdgECYXcAAhclc19fYWxsb3dlZExwU2NyaXB0SGFzaAACYXgCFyVzX19mZWVDb2xsZWN0b3JBZGRyZXNzAQJheQMCYXoCYUECYUIJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIkb3JkZXIgdmFsaWRhdGlvbiBmYWlsZWQ6IG9yZGVyVmFsaWQ9CQClAwEFAmF6Ag0gc2VuZGVyVmFsaWQ9CQClAwEFAmFBAg4gbWF0Y2hlclZhbGlkPQkApQMBBQJhQgECYUMCAmFEAmFFCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUCYUQFAmFFCQC5CQIJAMwIAgIKbWFuZGF0b3J5IAkAzAgCCQClCAEFAmFECQDMCAICAS4JAMwIAgUCYUUJAMwIAgIPIGlzIG5vdCBkZWZpbmVkBQNuaWwCAAECYUYCAmFEAmFFCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUCYUQFAmFFCQC5CQIJAMwIAgIKbWFuZGF0b3J5IAkAzAgCCQClCAEFAmFECQDMCAICAS4JAMwIAgUCYUUJAMwIAgIPIGlzIG5vdCBkZWZpbmVkBQNuaWwCAAECYUcBAmFICQACAQkAuQkCCQDMCAICCGxwLnJpZGU6CQDMCAIFAmFIBQNuaWwCASABAmFJAQJhSAkAuQkCCQDMCAICCGxwLnJpZGU6CQDMCAIFAmFIBQNuaWwCASAAAmFKCQERQGV4dHJOYXRpdmUoMTA2MikBCQECYUMCBQR0aGlzCQEBUAAAAmFLCQERQGV4dHJOYXRpdmUoMTA2MikBCQECYUMCBQJhSgUCYXgBAmFMAAkBC3ZhbHVlT3JFbHNlAgkAmwgCBQJhSgkBAmF0AAcBAmFNAAkA2QQBCQECYUMCBQJhSgkBAmFsAAECYU4ABAJhTwkBAmFDAgUEdGhpcwkBAmFhAAQCYVAJAQJhQwIFBHRoaXMJAQJhYgAEAmFxCQECYUYCBQJhSgkBAmFyAQUCYVAEAmFwCQECYUYCBQJhSgkBAmFyAQUCYU8JALUJAgkBAmFDAgUCYUoJAQJhbwIJAKQDAQUCYXAJAKQDAQUCYXEFAWoBAmFRAQJhUgMJAAACBQJhUgUBaQUEdW5pdAkA2QQBBQJhUgECYVMBAmFSAwkAAAIFAmFSBQR1bml0BQFpCQDYBAEJAQV2YWx1ZQEFAmFSAQJhVAECYVUJAJkKBwkBEUBleHRyTmF0aXZlKDEwNjIpAQkAkQMCBQJhVQUBbwkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmFVBQFwCQDZBAEJAJEDAgUCYVUFAXEJAQJhUQEJAJEDAgUCYVUFAXIJAQJhUQEJAJEDAgUCYVUFAXMJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJhVQUBdAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmFVBQF1AAJhVgkBAmFUAQkBAmFOAAACYVcFAmFWAAJhWAgFAmFXAl8xAAJhWQgFAmFXAl8yAAJhWggFAmFXAl8zAAJiYQgFAmFXAl80AAJiYggFAmFXAl81AAJiYwgFAmFXAl82AAJiZAgFAmFXAl83AQJiZQAJALUJAgkBAmFDAgUCYUoJAQJhawAFAWoAAmJmCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkAkQMCCQECYmUABQFCAhlpbmNvcnJlY3Qgc3Rha2luZyBhZGRyZXNzAAJiZwkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJAJEDAgkBAmJlAAUBQwIZaW5jb3JyZWN0IHN0YWtpbmcgYWRkcmVzcwECYmgKAmJpAmJqAmJrAmJsAmJtAmJuAmJvAmJwAmJxAmJyCQC5CQIJAMwIAgIUJWQlZCVkJWQlZCVkJWQlZCVkJWQJAMwIAgkApAMBBQJiaQkAzAgCCQCkAwEFAmJqCQDMCAIJAKQDAQUCYmsJAMwIAgkApAMBBQJibAkAzAgCCQCkAwEFAmJtCQDMCAIJAKQDAQUCYm4JAMwIAgkApAMBBQJibwkAzAgCCQCkAwEFAmJwCQDMCAIJAKQDAQUCYnEJAMwIAgkApAMBBQJicgUDbmlsBQFqAQJicwYCYnQCYnUCYnYCYmwCYm8CYnAJALkJAgkAzAgCAgwlZCVkJWQlZCVkJWQJAMwIAgkApAMBBQJidAkAzAgCCQCkAwEFAmJ1CQDMCAIJAKQDAQUCYnYJAMwIAgkApAMBBQJibAkAzAgCCQCkAwEFAmJvCQDMCAIJAKQDAQUCYnAFA25pbAUBagECYncBAmJ4AwkAAAIFAmJ4AgVXQVZFUwgJAO8HAQUEdGhpcwlhdmFpbGFibGUJAPAHAgUEdGhpcwkA2QQBBQJieAECYnkCAmJ6AmJBCQC8AgMFAmJ6BQFkBQJiQQECYkIEAmJDAmJEAmJFAmJGBAJiRwkBAUQCBQJiRQUCYkMEAmJICQEBRAIFAmJGBQJiRAkBAmJ5AgUCYkgFAmJHAQJiSQMCYkUCYkYCYkoEAmJLCQECYU4ABAJiTAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmJLBQF0BAJiTQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmJLBQF1BAJiTgkBAmJCBAUCYkwFAmJNBQJiRQUCYkYEAmJBCQEBRAIFAmJFBQJiTAQCYnoJAQFEAgUCYkYFAmJNBAJiTwkBAUQCBQJiSgUBYgQCYlAJAQJieQIFAmJBBQJiTwQCYlEJAQJieQIFAmJ6BQJiTwkAzAgCBQJiTgkAzAgCBQJiUAkAzAgCBQJiUQUDbmlsAQJiUgMCYkUCYkYCYkoEAmJTCQECYkkDBQJiRQUCYkYFAmJKCQDMCAIJAQFHAgkAkQMCBQJiUwAABQFiCQDMCAIJAQFHAgkAkQMCBQJiUwABBQFiCQDMCAIJAQFHAgkAkQMCBQJiUwACBQFiBQNuaWwBAmJUBAJiVQJiVgJiVwFYBAJiSwkBAmFOAAQCYlgJAJEDAgUCYksFAXEEAmJZCQCRAwIFAmJLBQFyBAJiWgkAkQMCBQJiSwUBcwQCYkMJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJiSwUBdAQCYkQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJiSwUBdQQCY2EJAJEDAgUCYksFAXAEAmNiCAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDsBwEJANkEAQUCYlgJAKwCAgkArAICAgZBc3NldCAFAmJYAg4gZG9lc24ndCBleGlzdAhxdWFudGl0eQMJAQIhPQIFAmJYBQJiVgkAAgECFUludmFsaWQgYXNzZXQgcGFzc2VkLgQCY2MJAQJidwEFAmJZBAJjZAkBAUQCBQJjYwUCYkMEAmNlCQECYncBBQJiWgQCY2YJAQFEAgUCY2UFAmJEBAJjZwkBAmJ5AgUCY2YFAmNkBAJjaAkBAUcCBQJjZwUBYgQCY2kJAQFEAgUCYlcFAWIEAmNqCQEBRAIFAmNiBQFiBAJjawkAvAIDBQJjZAUCY2kFAmNqBAJjbAkAvAIDBQJjZgUCY2kFAmNqBAJjbQkBAUcCBQJjawUCYkMEAmNuCQEBRwIFAmNsBQJiRAQCY28DCQAAAgUCYlUCAAUDbmlsCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFAVgFAmNtAwkAAAIFAmJZAgVXQVZFUwUEdW5pdAkA2QQBBQJiWQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQFYBQJjbgMJAAACBQJiWgIFV0FWRVMFBHVuaXQJANkEAQUCYloJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAVoCCQClCAEFAVgFAmJVCQECYnMGBQJjbQUCY24FAmJXBQJjaAUGaGVpZ2h0CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAVMABQJjaAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAVQCBQZoZWlnaHQIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQJjaAUDbmlsCQCcCgoFAmNtBQJjbgUCYlkFAmJaBQJjYwUCY2UFAmNiBQJjZwUCY2EFAmNvAQJjcAkCYlUCY3ECY3ICY3MCY3QCY3UBWAJjdgJjdwQCYksJAQJhTgAEAmJYCQDZBAEJAJEDAgUCYksFAXEEAmN4CQCRAwIFAmJLBQFyBAJjeQkAkQMCBQJiSwUBcwQCY3oJAJEDAgUCYksFAXYEAmNBCQCRAwIFAmJLBQF3BAJiTAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmJLBQF0BAJiTQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmJLBQF1BAJjYQkAkQMCBQJiSwUBcAQCY2IICQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQUCYlgJAKwCAgkArAICAgZBc3NldCAJANgEAQUCYlgCDiBkb2Vzbid0IGV4aXN0CHF1YW50aXR5BAJjQgkA2AQBCQELdmFsdWVPckVsc2UCBQJjcwkA2QQBAgVXQVZFUwQCY0MJANgEAQkBC3ZhbHVlT3JFbHNlAgUCY3UJANkEAQIFV0FWRVMDAwkBAiE9AgUCY3gFAmNCBgkBAiE9AgUCY3kFAmNDCQACAQIiSW52YWxpZCBhbXQgb3IgcHJpY2UgYXNzZXQgcGFzc2VkLgQCY2MDBQJjdgkBAmJ3AQUCY3gJAGUCCQECYncBBQJjeAUCY3IEAmNlAwUCY3YJAQJidwEFAmN5CQBlAgkBAmJ3AQUCY3kFAmN0BAJjRAkBAUQCBQJjcgUCYkwEAmNFCQEBRAIFAmN0BQJiTQQCY0YJAQJieQIFAmNFBQJjRAQCY2QJAQFEAgUCY2MFAmJMBAJjZgkBAUQCBQJjZQUCYk0EAmNHAwkAAAIFAmNiAAAEAmNnBQFlBAJjSAUBZQQCYk8JAHYGCQC5AgIFAmNEBQJjRQAACQC2AgEABQABAAAFBERPV04JAJcKBQkBAUcCBQJiTwUBYgkBAUcCBQJjRAUCYkwJAQFHAgUCY0UFAmJNCQECYnkCCQC3AgIFAmNmBQJjRQkAtwICBQJjZAUCY0QFAmNIBAJjZwkBAmJ5AgUCY2YFAmNkBAJjSAkAvAIDCQEBTwEJALgCAgUCY2cFAmNGBQFkBQJjZwQCY0kJAQFEAgUCY3EFAWIDAwkBAiE9AgUCY2cFAWUJAL8CAgUCY0gFAmNJBwkAAgEJAKwCAgkArAICCQCsAgICD1ByaWNlIHNsaXBwYWdlIAkApgMBBQJjSAIeIGV4Y2VlZGVkIHRoZSBwYXNzZWQgbGltaXQgb2YgCQCmAwEFAmNJBAJjagkBAUQCBQJjYgUBYgQCY0oJALwCAwUCY0QFAmNnBQFkBAJjSwkAvAIDBQJjRQUBZAUCY2cEAmNMAwkAvwICBQJjSgUCY0UJAJQKAgUCY0sFAmNFCQCUCgIFAmNEBQJjSgQCY00IBQJjTAJfMQQCY04IBQJjTAJfMgQCYk8JALwCAwUCY2oFAmNOBQJjZgkAlwoFCQEBRwIFAmJPBQFiCQEBRwIFAmNNBQJiTAkBAUcCBQJjTgUCYk0FAmNnBQJjSAQCY08IBQJjRwJfMQQCY1AIBQJjRwJfMgQCY1EIBQJjRwJfMwQCY2gJAQFHAggFAmNHAl80BQFiBAJjUgkBAUcCCAUCY0cCXzUFAWIDCQBnAgAABQJjTwkAAgECNkludmFsaWQgY2FsY3VsYXRpb25zLiBMUCBjYWxjdWxhdGVkIGlzIGxlc3MgdGhhbiB6ZXJvLgQCY1MDCQEBIQEFAmN3AAAFAmNPBAJjVAkAZQIFAmNyBQJjUAQCY1UJAGUCBQJjdAUCY1EEAmNWCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBUwAFAmNoCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBVAIFBmhlaWdodAgFCWxhc3RCbG9jawl0aW1lc3RhbXAFAmNoCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQFXAgUBWAUCYlUJAQJiaAoFAmNQBQJjUQUCY1MFAmNoBQJjcQUCY1IFBmhlaWdodAgFCWxhc3RCbG9jawl0aW1lc3RhbXAFAmNUBQJjVQUDbmlsCQCfCg0FAmNPBQJjUwUCY2gFAmNjBQJjZQUCY2IFAmJYBQJjYQUCY1YFAmNUBQJjVQUCY3MFAmN1AQJjVwECY1gEAmJLCQECYU4ABAJjWQkAkQMCBQJiSwUBcgQCY1oJAJEDAgUCYksFAXMEAmNhCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCYksFAXAEAmJMCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCYksFAXQEAmJNCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCYksFAXUEAmRhCQECYncBBQJjWQQCZGIJAQJidwEFAmNaBAJjZwMJAAACCAUCY1gJb3JkZXJUeXBlBQNCdXkJAQJiQgQFAmJMBQJiTQkAZAIFAmRhCAUCY1gGYW1vdW50BQJkYgkBAmJCBAUCYkwFAmJNCQBlAgUCZGEIBQJjWAZhbW91bnQFAmRiBAJjaAkBAUcCBQJjZwUBYgMDAwkBAmFMAAYJAAACBQJjYQUBbQYJAAACBQJjYQUBbgkAAgECHEV4Y2hhbmdlIG9wZXJhdGlvbnMgZGlzYWJsZWQEAmRjCAgFAmNYCWFzc2V0UGFpcgthbW91bnRBc3NldAQCZGQDCQAAAgUCZGMFBHVuaXQCBVdBVkVTCQDYBAEJAQV2YWx1ZQEFAmRjBAJkZQgIBQJjWAlhc3NldFBhaXIKcHJpY2VBc3NldAQCZGYDCQAAAgUCZGUFBHVuaXQCBVdBVkVTCQDYBAEJAQV2YWx1ZQEFAmRlAwMJAQIhPQIFAmRkBQJjWQYJAQIhPQIFAmRmBQJjWgkAAgECE1dyb25nIG9yZGVyIGFzc2V0cy4EAmRnCAUCY1gFcHJpY2UEAmRoCQBrAwUBYgUCYk0FAmJMBAJkaQkBAUoDBQJkZwUBYgUCZGgEAmRqAwkAAAIIBQJjWAlvcmRlclR5cGUFA0J1eQkAZwIFAmNoBQJkaQkAZwIFAmRpBQJjaAYBAmRrAQJkbAMJAQIhPQIJAJADAQgFAmRsCHBheW1lbnRzAAEJAAIBAh1leGFjdGx5IDEgcGF5bWVudCBpcyBleHBlY3RlZAQCZG0JAQV2YWx1ZQEJAJEDAggFAmRsCHBheW1lbnRzAAAEAmJWCQEFdmFsdWUBCAUCZG0HYXNzZXRJZAQCZG4IBQJkbQZhbW91bnQEAmNHCQECYlQECQDYBAEIBQJkbA10cmFuc2FjdGlvbklkCQDYBAEFAmJWBQJkbggFAmRsBmNhbGxlcgQCY20IBQJjRwJfMQQCY24IBQJjRwJfMgQCY2EJAQ1wYXJzZUludFZhbHVlAQgFAmNHAl85BAJjbwgFAmNHA18xMAMDCQECYUwABgkAAAIFAmNhBQFuCQACAQkArAICAixHZXQgb3BlcmF0aW9uIGlzIGJsb2NrZWQgYnkgYWRtaW4uIFN0YXR1cyA9IAkApAMBBQJjYQkAlwoFBQJjbQUCY24FAmRuBQJiVgUCY28BAmRvAwJkbAJjcQJjdwMJAQIhPQIJAJADAQgFAmRsCHBheW1lbnRzAAIJAAIBAh9leGFjdGx5IDIgcGF5bWVudHMgYXJlIGV4cGVjdGVkBAJkcAkBBXZhbHVlAQkAkQMCCAUCZGwIcGF5bWVudHMAAAQCZHEJAQV2YWx1ZQEJAJEDAggFAmRsCHBheW1lbnRzAAEEAmRyCQECY3AJCQDYBAEIBQJkbA10cmFuc2FjdGlvbklkBQJjcQgFAmRwBmFtb3VudAgFAmRwB2Fzc2V0SWQIBQJkcQZhbW91bnQIBQJkcQdhc3NldElkCQClCAEIBQJkbAZjYWxsZXIHBQJjdwQCY2EJAQ1wYXJzZUludFZhbHVlAQgFAmRyAl84AwMDCQECYUwABgkAAAIFAmNhBQFsBgkAAAIFAmNhBQFuCQACAQkArAICAixQdXQgb3BlcmF0aW9uIGlzIGJsb2NrZWQgYnkgYWRtaW4uIFN0YXR1cyA9IAkApAMBBQJjYQUCZHIBAmRzAQJkdAQCZHUJAPwHBAUCYUoCBGVtaXQJAMwIAgUCZHQFA25pbAUDbmlsAwkAAAIFAmR1BQJkdQQCZHYEAmR3BQJkdQMJAAECBQJkdwIHQWRkcmVzcwQCZHgFAmR3CQD8BwQFAmR4AgRlbWl0CQDMCAIFAmR0BQNuaWwFA25pbAUEdW5pdAMJAAACBQJkdgUCZHYFAmR0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQJkeQECZHQEAmR6CQBrAwUCZHQFAmFlBQFiCQCUCgIJAGUCBQJkdAUCZHoFAmR6AQJkQQQCZEICZEMBWAFZBAJkRAkAAAIFAVkFBHVuaXQEAmRFCQECYncBCQECYVMBBQJiYQQCZEYJAQJidwEJAQJhUwEFAmJiBAJkRwMJAAACBQJkQwUCYmEGAwkAAAIFAmRDBQJiYgcJAQJhRwECDWludmFsaWQgYXNzZXQEAmRIAwUCZEQJAJQKAgUCZEUFAmRGAwUCZEcJAJQKAgkAZQIFAmRFBQJkQgUCZEYJAJQKAgUCZEUJAGUCBQJkRgUCZEIEAmRJCAUCZEgCXzEEAmRKCAUCZEgCXzIEAmRLAwUCZEcJAJQKAgUCZEIAAAkAlAoCAAAFAmRCBAJkTAgFAmRLAl8xBAJkTQgFAmRLAl8yBAJkTggJAQJkeQEFAmRMAl8xBAJkTwgJAQJkeQEFAmRNAl8xBAJkUAkBAmR5AQUCZEIEAmRRCAUCZFACXzEEAmR6CAUCZFACXzIEAmRSCQBkAgUCZEkFAmROBAJkUwkAZAIFAmRKBQJkTwQCZFQJAQJieQIJAQFEAgUCZFMFAmJkCQEBRAIFAmRSBQJiYwQCZFUJAQFHAgUCZFQFAWIEAmRWAwUCZEcFAmRJBQJkSgQCZFcJALYCAQUCZFYEAmRYCQC2AgEICQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQUCYVoJAKwCAgkArAICAgZhc3NldCAJANgEAQUCYVoCDiBkb2Vzbid0IGV4aXN0CHF1YW50aXR5BAJkWQMJAL8CAgUCZFgFAWYGCQECYUcBAiJpbml0aWFsIGRlcG9zaXQgcmVxdWlyZXMgYWxsIGNvaW5zAwkAAAIFAmRZBQJkWQQCZFoJALYCAQUCZFEEAmVhCQCWAwEJAMwIAgAACQDMCAIJAKADAQkAugICCQC5AgIFAmRYCQC4AgIJAQpzcXJ0QmlnSW50BAkAtwICBQFkCQC6AgIJALkCAgUCZFoFAWQFAmRXABIAEgUERE9XTgUBZAUBZAUDbmlsBAJjVgMFAmREBQNuaWwJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFTAAUCZFUJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFUAgUGaGVpZ2h0CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUCZFUJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAVcCCQClCAEJAQV2YWx1ZQEFAVgJANgEAQkBBXZhbHVlAQUBWQkBAmJoCgUCZEwFAmRNBQJlYQUCZFUAAAAABQZoZWlnaHQIBQlsYXN0QmxvY2sJdGltZXN0YW1wAAAAAAUDbmlsBAJlYgkBAmJ5AgkBAUQCBQJkSgUCYmQJAQFEAgUCZEkFAmJjBAJlYwkBAUcCBQJlYgUBYgQCZWQEAmVlAwUCZEcJAJQKAgUCZEwFAmRJCQCUCgIFAmRNBQJkSgQCZHQIBQJlZQJfMQQCZWYIBQJlZQJfMgQCZWcJAKADAQkAvAIDBQJkWAkAtgIBCQBpAgUCZHQAAgkAtgIBBQJlZgkAawMJAGUCBQJlYQUCZWcFAWIFAmVnCQCWCgQFAmVhBQJjVgUCZHoFAmVkCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQJlaAUCZWkCZFECZEMBWAFZBAJkRAkAAAIFAVkFBHVuaXQEAmVqCQDMCAIDCQAAAgUCZEMFAmFaBgkBAmFHAQIQaW52YWxpZCBscCBhc3NldAUDbmlsAwkAAAIFAmVqBQJlagQCZWsDCQAAAgUCZWkFAmJhBgMJAAACBQJlaQUCYmIHCQECYUcBAg1pbnZhbGlkIGFzc2V0BAJlbAMFAmVrCQC2AgEJAQJidwEJAQJhUwEFAmJhCQC2AgEJAQJidwEJAQJhUwEFAmJiBAJlbQkBAmJ3AQkBAmFTAQUCYmEEAmVuCQECYncBCQECYVMBBQJiYgQCZW8DBQJlawUCZW0FAmVuBAJlcAkAtgIBBQJlbwQCZFgJALYCAQgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkA7AcBBQJhWgkArAICCQCsAgICBmFzc2V0IAkA2AQBBQJhWgIOIGRvZXNuJ3QgZXhpc3QIcXVhbnRpdHkEAmVxCQC2AgEFAmRRBAJlcgkAlgMBCQDMCAIAAAkAzAgCCQCgAwEJALoCAgkAuQICBQJlbAkAuAICBQFkCQB2BgkAuAICBQFkCQC6AgIJALkCAgUCZXEFAWQFAmRYABIFAWgAAAASBQRET1dOBQFkBQNuaWwEAmVzCQECZHkBBQJlcgQCZXQIBQJlcwJfMQQCZHoIBQJlcwJfMgQCZXUDBQJlawkAlgoEBQJldAAACQBlAgUCZW0FAmVyBQJlbgkAlgoEAAAFAmV0BQJlbQkAZQIFAmVuBQJlcgQCZXYIBQJldQJfMQQCZXcIBQJldQJfMgQCZXgIBQJldQJfMwQCZXkIBQJldQJfNAQCZFQJAQJieQIJAQFEAgUCZXkFAmJkCQEBRAIFAmV4BQJiYwQCZFUJAQFHAgUCZFQFAWIEAmNWAwUCZEQFA25pbAkAzAgCCQELU3RyaW5nRW50cnkCCQEBWgIJAKUIAQkBBXZhbHVlAQUBWAkA2AQBCQEFdmFsdWUBBQFZCQECYnMGBQJldgUCZXcFAmRRBQJkVQUGaGVpZ2h0CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAVMABQJkVQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAVQCBQZoZWlnaHQIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQJkVQUDbmlsBAJlYgkBAmJ5AgkBAUQCBQJlbgUCYmQJAQFEAgUCZW0FAmJjBAJlYwkBAUcCBQJlYgUBYgQCZWQEAmV6CQBoAgkAoAMBCQC8AgMFAmVsBQJlcQUCZFgAAgkAawMJAGUCBQJldAUCZXoFAWIFAmV6CQCWCgQFAmV0BQJjVgUCZHoFAmVkCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQJlQQMCZUICZUMCY2IEAmVECQC8AgMJAHYGCQC5AgIFAmVCBQJlQwAACQC2AgEABQABAAAFBERPV04FAWQFAmNiBQJlRAECZUUABAJlRgkBAmJ3AQkBAmFTAQUCYmEEAmVHCQECYncBCQECYVMBBQJiYgQCY2IICQEFdmFsdWUBCQDsBwEFAmFaCHF1YW50aXR5BAJlRAkBAmVBAwkAtgIBBQJlRgkAtgIBBQJlRwkAtgIBBQJjYgQCZUgJAMwIAgkBDEludGVnZXJFbnRyeQIFAmFnBQZoZWlnaHQJAMwIAgkBC1N0cmluZ0VudHJ5AgUCYWYJAKYDAQUCZUQFA25pbAkAlAoCBQJlSAUCZUQBAmVJAAQCZHcJAKIIAQkBAVEAAwkAAQIFAmR3AgZTdHJpbmcEAmVKBQJkdwkA2QQBBQJlSgMJAAECBQJkdwIEVW5pdAUEdW5pdAkAAgECC01hdGNoIGVycm9yAQJlSwAEAmR3CQCiCAEJAQFSAAMJAAECBQJkdwIGU3RyaW5nBAJlSgUCZHcJANkEAQUCZUoDCQABAgUCZHcCBFVuaXQFBHVuaXQJAAIBAgtNYXRjaCBlcnJvcgECZUwBAmRsBAJkdwkBAmVJAAMJAAECBQJkdwIKQnl0ZVZlY3RvcgQCZU0FAmR3CQAAAggFAmRsD2NhbGxlclB1YmxpY0tleQUCZU0DCQABAgUCZHcCBFVuaXQJAAACCAUCZGwGY2FsbGVyBQR0aGlzCQACAQILTWF0Y2ggZXJyb3IBAmVOAQJkbAQCZU8JAAIBAhFQZXJtaXNzaW9uIGRlbmllZAQCZHcJAQJlSQADCQABAgUCZHcCCkJ5dGVWZWN0b3IEAmVNBQJkdwMJAAACCAUCZGwPY2FsbGVyUHVibGljS2V5BQJlTQYFAmVPAwkAAQIFAmR3AgRVbml0AwkAAAIIBQJkbAZjYWxsZXIFBHRoaXMGBQJlTwkAAgECC01hdGNoIGVycm9yGwJkbAEKc2V0TWFuYWdlcgECZVAEAmVRCQECZU4BBQJkbAMJAAACBQJlUQUCZVEEAmVSCQDZBAEFAmVQAwkAAAIFAmVSBQJlUgkAzAgCCQELU3RyaW5nRW50cnkCCQEBUgAFAmVQBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZGwBDmNvbmZpcm1NYW5hZ2VyAAQCZVMJAQJlSwAEAmVUAwkBCWlzRGVmaW5lZAEFAmVTBgkAAgECEk5vIHBlbmRpbmcgbWFuYWdlcgMJAAACBQJlVAUCZVQEAmVVAwkAAAIIBQJkbA9jYWxsZXJQdWJsaWNLZXkJAQV2YWx1ZQEFAmVTBgkAAgECG1lvdSBhcmUgbm90IHBlbmRpbmcgbWFuYWdlcgMJAAACBQJlVQUCZVUJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAVEACQDYBAEJAQV2YWx1ZQEFAmVTCQDMCAIJAQtEZWxldGVFbnRyeQEJAQFSAAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmRsAQNwdXQCAmNxAmVWAwkAZgIAAAUCY3EJAAIBAiBJbnZhbGlkIHNsaXBwYWdlVG9sZXJhbmNlIHBhc3NlZAQCZHIJAQJkbwMFAmRsBQJjcQYEAmNTCAUCZHICXzIEAmJYCAUCZHICXzcEAmNvCAUCZHICXzkEAmNUCAUCZHIDXzEwBAJjVQgFAmRyA18xMQQCZVcIBQJkcgNfMTIEAmVYCAUCZHIDXzEzBAJkdQkA/AcEBQJhSgIEZW1pdAkAzAgCBQJjUwUDbmlsBQNuaWwDCQAAAgUCZHUFAmR1BAJkdgQCZHcFAmR1AwkAAQIFAmR3AgdBZGRyZXNzBAJkeAUCZHcJAPwHBAUCZHgCBGVtaXQJAMwIAgUCY1MFA25pbAUDbmlsBQR1bml0AwkAAAIFAmR2BQJkdgQCZVkDCQBmAgUCY1QAAAkA/AcEBQJiZwIDcHV0BQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmVXBQJjVAUDbmlsBQNuaWwDCQAAAgUCZVkFAmVZBAJlWgMJAGYCBQJjVQAACQD8BwQFAmJnAgNwdXQFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCZVgFAmNVBQNuaWwFA25pbAMJAAACBQJlWgUCZVoEAmZhAwUCZVYEAmZiCQD8BwQFAmJmAgVzdGFrZQUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQJiWAUCY1MFA25pbAMJAAACBQJmYgUCZmIFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUCZGwGY2FsbGVyBQJjUwUCYlgFA25pbAkAzggCBQJjbwUCZmEJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZGwBCnB1dEZvckZyZWUBAmZjAwkAZgIAAAUCZmMJAAIBAhRJbnZhbGlkIHZhbHVlIHBhc3NlZAQCZHIJAQJkbwMFAmRsBQJmYwcIBQJkcgJfOQJkbAEJcHV0T25lVGtuAgJmZAJmZQQCZmYKAAJmZwkA/AcEBQJhSgIoaXNQb29sT25lVG9rZW5PcGVyYXRpb25zRGlzYWJsZWRSRUFET05MWQkAzAgCCQClCAEFBHRoaXMFA25pbAUDbmlsAwkAAQIFAmZnAgdCb29sZWFuBQJmZwkAAgEJAKwCAgkAAwEFAmZnAhwgY291bGRuJ3QgYmUgY2FzdCB0byBCb29sZWFuBAJmaAMDAwkBAmFMAAYJAAACBQJhWQUBbAYJAAACBQJhWQUBbgYFAmZmBAJlagkAzAgCAwMJAQEhAQUCZmgGCQECZUwBBQJkbAYJAQJhRwECIXB1dCBvcGVyYXRpb24gaXMgYmxvY2tlZCBieSBhZG1pbgkAzAgCAwkAAAIJAJADAQgFAmRsCHBheW1lbnRzAAEGCQECYUcBAh5leGFjdGx5IDEgcGF5bWVudCBhcmUgZXhwZWN0ZWQFA25pbAMJAAACBQJlagUCZWoEAmZpCQCRAwIIBQJkbAhwYXltZW50cwAABAJkQwgFAmZpB2Fzc2V0SWQEAmRCCAUCZmkGYW1vdW50BAFYCAUCZGwGY2FsbGVyBAFZCAUCZGwNdHJhbnNhY3Rpb25JZAQCZmoJAQJkQQQFAmRCBQJkQwUBWAUBWQMJAAACBQJmagUCZmoEAmZrCAUCZmoCXzQEAmR6CAUCZmoCXzMEAmNWCAUCZmoCXzIEAmZsCAUCZmoCXzEEAmZtAwMJAGYCBQJmZAAACQBmAgUCZmQFAmZsBwkBAmFHAQkAuQkCCQDMCAICH2Ftb3VudCB0byByZWNlaXZlIGlzIGxlc3MgdGhhbiAJAMwIAgkApAMBBQJmZAUDbmlsAgAFAmZsBAJkdQkBAmRzAQUCZm0DCQAAAgUCZHUFAmR1BAJmYQMFAmZlBAJmbgkA/AcEBQJiZgIFc3Rha2UFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCYVoFAmZtBQNuaWwDCQAAAgUCZm4FAmZuBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAmRsBmNhbGxlcgUCZm0FAmFaBQNuaWwEAmZvAwkAZgIFAmR6AAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUCYUsFAmR6BQJkQwUDbmlsBQNuaWwJAJQKAgkAzggCCQDOCAIFAmNWBQJmYQUCZm8FAmZtCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmRsARFwdXRPbmVUa25SRUFET05MWQICZEMCZEIEAmZwCQECZEEEBQJkQgkBAmFRAQUCZEMFBHVuaXQFBHVuaXQEAmZsCAUCZnACXzEEAmNWCAUCZnACXzIEAmR6CAUCZnACXzMEAmZrCAUCZnACXzQJAJQKAgUDbmlsCQCVCgMFAmZsBQJkegUCZmsCZGwBCWdldE9uZVRrbgICZnECZmQEAmZmCgACZmcJAPwHBAUCYUoCKGlzUG9vbE9uZVRva2VuT3BlcmF0aW9uc0Rpc2FibGVkUkVBRE9OTFkJAMwIAgkApQgBBQR0aGlzBQNuaWwFA25pbAMJAAECBQJmZwIHQm9vbGVhbgUCZmcJAAIBCQCsAgIJAAMBBQJmZwIcIGNvdWxkbid0IGJlIGNhc3QgdG8gQm9vbGVhbgQCZnIDAwkBAmFMAAYJAAACBQJhWQUBbgYFAmZmBAJlagkAzAgCAwMJAQEhAQUCZnIGCQECZUwBBQJkbAYJAQJhRwECIWdldCBvcGVyYXRpb24gaXMgYmxvY2tlZCBieSBhZG1pbgkAzAgCAwkAAAIJAJADAQgFAmRsCHBheW1lbnRzAAEGCQECYUcBAh5leGFjdGx5IDEgcGF5bWVudCBhcmUgZXhwZWN0ZWQFA25pbAMJAAACBQJlagUCZWoEAmVpCQECYVEBBQJmcQQCZmkJAJEDAggFAmRsCHBheW1lbnRzAAAEAmRDCAUCZmkHYXNzZXRJZAQCZFEIBQJmaQZhbW91bnQEAVgIBQJkbAZjYWxsZXIEAVkIBQJkbA10cmFuc2FjdGlvbklkBAJmcwkBAmVoBQUCZWkFAmRRBQJkQwUBWAUBWQMJAAACBQJmcwUCZnMEAmZrCAUCZnMCXzQEAmR6CAUCZnMCXzMEAmNWCAUCZnMCXzIEAmZ0CAUCZnMCXzEEAmR0AwMJAGYCBQJmZAAACQBmAgUCZmQFAmZ0BwkBAmFHAQkAuQkCCQDMCAICH2Ftb3VudCB0byByZWNlaXZlIGlzIGxlc3MgdGhhbiAJAMwIAgkApAMBBQJmZAUDbmlsAgAFAmZ0BAJmdQkA/AcEBQJhSgIEYnVybgkAzAgCBQJkUQUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQJkQwUCZFEFA25pbAMJAAACBQJmdQUCZnUEAmZ2CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFAVgFAmR0BQJlaQUDbmlsBAJmbwMJAGYCBQJkegAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFAmFLBQJkegUCZWkFA25pbAUDbmlsCQCUCgIJAM4IAgkAzggCBQJjVgUCZnYFAmZvBQJkdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJkbAERZ2V0T25lVGtuUkVBRE9OTFkCAmVpAmRRBAJmdwkBAmVoBQkBAmFRAQUCZWkFAmRRBQJhWgUEdW5pdAUEdW5pdAQCZnQIBQJmdwJfMQQCY1YIBQJmdwJfMgQCZHoIBQJmdwJfMwQCZmsIBQJmdwJfNAkAlAoCBQNuaWwJAJUKAwUCZnQFAmR6BQJmawJkbAETdW5zdGFrZUFuZEdldE9uZVRrbgMCZngCZnECZmQEAmZmCgACZmcJAPwHBAUCYUoCKGlzUG9vbE9uZVRva2VuT3BlcmF0aW9uc0Rpc2FibGVkUkVBRE9OTFkJAMwIAgkApQgBBQR0aGlzBQNuaWwFA25pbAMJAAECBQJmZwIHQm9vbGVhbgUCZmcJAAIBCQCsAgIJAAMBBQJmZwIcIGNvdWxkbid0IGJlIGNhc3QgdG8gQm9vbGVhbgQCZnIDAwkBAmFMAAYJAAACBQJhWQUBbgYFAmZmBAJlagkAzAgCAwMJAQEhAQUCZnIGCQECZUwBBQJkbAYJAQJhRwECIWdldCBvcGVyYXRpb24gaXMgYmxvY2tlZCBieSBhZG1pbgkAzAgCAwkAAAIJAJADAQgFAmRsCHBheW1lbnRzAAAGCQECYUcBAhhubyBwYXltZW50cyBhcmUgZXhwZWN0ZWQFA25pbAMJAAACBQJlagUCZWoEAmVpCQECYVEBBQJmcQQBWAgFAmRsBmNhbGxlcgQBWQgFAmRsDXRyYW5zYWN0aW9uSWQEAmZ5CQD8BwQFAmJmAgd1bnN0YWtlCQDMCAIJANgEAQUCYVoJAMwIAgUCZngFA25pbAUDbmlsAwkAAAIFAmZ5BQJmeQQCZnoJAQJlaAUFAmVpBQJmeAUCYVoFAVgFAVkDCQAAAgUCZnoFAmZ6BAJmawgFAmZ6Al80BAJkeggFAmZ6Al8zBAJjVggFAmZ6Al8yBAJmdAgFAmZ6Al8xBAJkdAMDCQBmAgUCZmQAAAkAZgIFAmZkBQJmdAcJAQJhRwEJALkJAgkAzAgCAh9hbW91bnQgdG8gcmVjZWl2ZSBpcyBsZXNzIHRoYW4gCQDMCAIJAKQDAQUCZmQFA25pbAIABQJmdAQCZnUJAPwHBAUCYUoCBGJ1cm4JAMwIAgUCZngFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCYVoFAmZ4BQNuaWwDCQAAAgUCZnUFAmZ1BAJmdgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUCZGwGY2FsbGVyBQJkdAUCZWkFA25pbAQCZm8DCQBmAgUCZHoAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQJhSwUCZHoFAmVpBQNuaWwFA25pbAkAlAoCCQDOCAIJAM4IAgUCY1YFAmZ2BQJmbwUCZHQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZGwBA2dldAAEAmNHCQECZGsBBQJkbAQCZkEIBQJjRwJfMQQCY24IBQJjRwJfMgQCZG4IBQJjRwJfMwQCYlYIBQJjRwJfNAQCY28IBQJjRwJfNQQCZkIJAPwHBAUCYUoCBGJ1cm4JAMwIAgUCZG4FA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCYlYFAmRuBQNuaWwDCQAAAgUCZkIFAmZCBQJjbwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJkbAEJZ2V0Tm9MZXNzAgJmQwJmRAQCY0cJAQJkawEFAmRsBAJjbQgFAmNHAl8xBAJjbggFAmNHAl8yBAJkbggFAmNHAl8zBAJiVggFAmNHAl80BAJjbwgFAmNHAl81AwkAZgIFAmZDBQJjbQkAAgEJAKwCAgkArAICCQCsAgICHG5vTGVzc1RoZW5BbXRBc3NldCBmYWlsZWQ6ICAJAKQDAQUCY20CAyA8IAkApAMBBQJmQwMJAGYCBQJmRAUCY24JAAIBCQCsAgIJAKwCAgkArAICAh1ub0xlc3NUaGVuUHJpY2VBc3NldCBmYWlsZWQ6IAkApAMBBQJjbgIDIDwgCQCkAwEFAmZEBAJmQgkA/AcEBQJhSgIEYnVybgkAzAgCBQJkbgUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQJiVgUCZG4FA25pbAMJAAACBQJmQgUCZkIFAmNvCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmRsAQ11bnN0YWtlQW5kR2V0AQJkdAQCZkUDCQECIT0CCQCQAwEIBQJkbAhwYXltZW50cwAACQACAQIYTm8gcGF5bWVudHMgYXJlIGV4cGVjdGVkBgMJAAACBQJmRQUCZkUEAmJLCQECYU4ABAJiWAkA2QQBCQCRAwIFAmJLBQFxBAJmeQkA/AcEBQJiZgIHdW5zdGFrZQkAzAgCCQDYBAEFAmJYCQDMCAIFAmR0BQNuaWwFA25pbAMJAAACBQJmeQUCZnkEAmNHCQECYlQECQDYBAEIBQJkbA10cmFuc2FjdGlvbklkCQDYBAEFAmJYBQJkdAgFAmRsBmNhbGxlcgQCY2EJAQ1wYXJzZUludFZhbHVlAQgFAmNHAl85BAJjbwgFAmNHA18xMAQCZkYDAwkBAmFMAAYJAAACBQJjYQUBbgkAAgEJAKwCAgIsR2V0IG9wZXJhdGlvbiBpcyBibG9ja2VkIGJ5IGFkbWluLiBTdGF0dXMgPSAJAKQDAQUCY2EGAwkAAAIFAmZGBQJmRgQCZkIJAPwHBAUCYUoCBGJ1cm4JAMwIAgUCZHQFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCYlgFAmR0BQNuaWwDCQAAAgUCZkIFAmZCBQJjbwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJkbAETdW5zdGFrZUFuZEdldE5vTGVzcwMCZngCZkcCZkQEAmZyAwkBAmFMAAYJAAACBQJhWQUBbgQCZWoJAMwIAgMJAQEhAQUCZnIGCQACAQIhZ2V0IG9wZXJhdGlvbiBpcyBibG9ja2VkIGJ5IGFkbWluCQDMCAIDCQAAAgkAkAMBCAUCZGwIcGF5bWVudHMAAAYJAAIBAhhubyBwYXltZW50cyBhcmUgZXhwZWN0ZWQFA25pbAMJAAACBQJlagUCZWoEAmZ5CQD8BwQFAmJmAgd1bnN0YWtlCQDMCAIJANgEAQUCYVoJAMwIAgUCZngFA25pbAUDbmlsAwkAAAIFAmZ5BQJmeQQCY0cJAQJiVAQJANgEAQgFAmRsDXRyYW5zYWN0aW9uSWQJANgEAQUCYVoFAmZ4CAUCZGwGY2FsbGVyBAJjbQgFAmNHAl8xBAJjbggFAmNHAl8yBAJjbwgFAmNHA18xMAQCZkgJAMwIAgMJAGcCBQJjbQUCZkcGCQACAQkAuQkCCQDMCAICLGFtb3VudCBhc3NldCBhbW91bnQgdG8gcmVjZWl2ZSBpcyBsZXNzIHRoYW4gCQDMCAIJAKQDAQUCZkcFA25pbAIACQDMCAIDCQBnAgUCY24FAmZEBgkAAgEJALkJAgkAzAgCAitwcmljZSBhc3NldCBhbW91bnQgdG8gcmVjZWl2ZSBpcyBsZXNzIHRoYW4gCQDMCAIJAKQDAQUCZkQFA25pbAIABQNuaWwDCQAAAgUCZkgFAmZIBAJmQgkA/AcEBQJhSgIEYnVybgkAzAgCBQJmeAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQJhWgUCZngFA25pbAMJAAACBQJmQgUCZkIFAmNvCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmRsAQhhY3RpdmF0ZQICZkkCZkoDCQECIT0CCQClCAEIBQJkbAZjYWxsZXIJAKUIAQUCYUoJAAIBAhJwZXJtaXNzaW9ucyBkZW5pZWQJAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCCQECYWEABQJmSQkAzAgCCQELU3RyaW5nRW50cnkCCQECYWIABQJmSgUDbmlsAgdzdWNjZXNzAmRsAQpyZWZyZXNoS0xwAAQCZksJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUCYWcAAAQCZkwDCQBnAgkAZQIFBmhlaWdodAUCZksFAmFqBQR1bml0CQECYUcBCQC5CQIJAMwIAgkApAMBBQJhagkAzAgCAi8gYmxvY2tzIGhhdmUgbm90IHBhc3NlZCBzaW5jZSB0aGUgcHJldmlvdXMgY2FsbAUDbmlsAgADCQAAAgUCZkwFAmZMBAJmTQkBAmVFAAQCZUgIBQJmTQJfMQQCZUQIBQJmTQJfMgkAlAoCBQJlSAUCZUQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZGwBHGdldFBvb2xDb25maWdXcmFwcGVyUkVBRE9OTFkACQCUCgIFA25pbAkBAmFOAAJkbAEcZ2V0QWNjQmFsYW5jZVdyYXBwZXJSRUFET05MWQECYngJAJQKAgUDbmlsCQECYncBBQJieAJkbAEZY2FsY1ByaWNlc1dyYXBwZXJSRUFET05MWQMCYkUCYkYCYkoEAmJTCQECYkkDBQJiRQUCYkYFAmJKCQCUCgIFA25pbAkAzAgCCQCmAwEJAJEDAgUCYlMAAAkAzAgCCQCmAwEJAJEDAgUCYlMAAQkAzAgCCQCmAwEJAJEDAgUCYlMAAgUDbmlsAmRsARR0b1gxOFdyYXBwZXJSRUFET05MWQIBRQFGCQCUCgIFA25pbAkApgMBCQEBRAIFAUUFAUYCZGwBFmZyb21YMThXcmFwcGVyUkVBRE9OTFkCAUgBSQkAlAoCBQNuaWwJAQFHAgkApwMBBQFIBQFJAmRsAR5jYWxjUHJpY2VCaWdJbnRXcmFwcGVyUkVBRE9OTFkCAmJ6AmJBCQCUCgIFA25pbAkApgMBCQECYnkCCQCnAwEFAmJ6CQCnAwEFAmJBAmRsASNlc3RpbWF0ZVB1dE9wZXJhdGlvbldyYXBwZXJSRUFET05MWQkCYlUCY3ECY3ICY3MCY3QCY3UBWAJjdgJjdwkAlAoCBQNuaWwJAQJjcAkFAmJVBQJjcQUCY3IFAmNzBQJjdAUCY3UFAVgFAmN2BQJjdwJkbAEjZXN0aW1hdGVHZXRPcGVyYXRpb25XcmFwcGVyUkVBRE9OTFkEAmJVAmJWAmJXAVgEAmNHCQECYlQEBQJiVQUCYlYFAmJXCQERQGV4dHJOYXRpdmUoMTA2MikBBQFYCQCUCgIFA25pbAkAnAoKCAUCY0cCXzEIBQJjRwJfMggFAmNHAl8zCAUCY0cCXzQIBQJjRwJfNQgFAmNHAl82CAUCY0cCXzcJAKYDAQgFAmNHAl84CAUCY0cCXzkIBQJjRwNfMTACZGwBDXN0YXRzUkVBRE9OTFkABAJiSwkBAmFOAAQCYlgJANkEAQkAkQMCBQJiSwUBcQQCY1kJAJEDAgUCYksFAXIEAmNaCQCRAwIFAmJLBQFzBAJjegkAkQMCBQJiSwUBdgQCY0EJAJEDAgUCYksFAXcEAmJMCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCYksFAXQEAmJNCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCYksFAXUEAmZOCAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDsBwEFAmJYCQCsAgIJAKwCAgIGQXNzZXQgCQDYBAEFAmJYAg4gZG9lc24ndCBleGlzdAhxdWFudGl0eQQCZGEJAQJidwEFAmNZBAJkYgkBAmJ3AQUCY1oEAmZPAwkAAAIFAmZOAAAJAMwIAgUBZQkAzAgCBQFlCQDMCAIFAWUFA25pbAkBAmJJAwUCZGEFAmRiBQJmTgQCY2gAAAQCZlAJAQFHAgkAkQMCBQJmTwABBQFiBAJmUQkBAUcCCQCRAwIFAmZPAAIFAWIEAmZSCQEFdmFsdWUBCQCaCAIFAmFKCQECYXUBCQClCAEFBHRoaXMJAJQKAgUDbmlsCQC5CQIJAMwIAgIOJWQlZCVkJWQlZCVkJWQJAMwIAgkApAMBBQJkYQkAzAgCCQCkAwEFAmRiCQDMCAIJAKQDAQUCZk4JAMwIAgkApAMBBQJjaAkAzAgCCQCkAwEFAmZQCQDMCAIJAKQDAQUCZlEJAMwIAgkApAMBBQJmUgUDbmlsBQFqAmRsASBldmFsdWF0ZVB1dEJ5QW1vdW50QXNzZXRSRUFET05MWQECY3IEAmJLCQECYU4ABAJiWAkA2QQBCQCRAwIFAmJLBQFxBAJjeAkAkQMCBQJiSwUBcgQCYlkJANkEAQUCY3gEAmN5CQCRAwIFAmJLBQFzBAJiWgkA2QQBBQJjeQQCYkwJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJiSwUBdAQCYk0JAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJiSwUBdQQCY2EJAJEDAgUCYksFAXAEAmZOCAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDsBwEFAmJYCQCsAgIJAKwCAgIGQXNzZXQgCQDYBAEFAmJYAg4gZG9lc24ndCBleGlzdAhxdWFudGl0eQQCZGEJAQJidwEFAmN4BAJkYgkBAmJ3AQUCY3kEAmJHCQEBRAIFAmRhBQJiTAQCYkgJAQFEAgUCZGIFAmJNBAJjZwMJAAACBQJmTgAABQFlCQECYnkCBQJiSAUCYkcEAmNECQEBRAIFAmNyBQJiTAQCY0UJALwCAwUCY0QFAmNnBQFkBAJjdAkBAUcCBQJjRQUCYk0EAmRyCQECY3AJAgAAoMIeBQJjcgUCYlkFAmN0BQJiWgIABgcEAmNPCAUCZHICXzEEAmZTCAUCZHICXzMEAmNjCAUCZHICXzQEAmNlCAUCZHICXzUEAmNiCAUCZHICXzYJAJQKAgUDbmlsCQC5CQIJAMwIAgIQJWQlZCVkJWQlZCVkJWQlZAkAzAgCCQCkAwEFAmNPCQDMCAIJAKQDAQkBAUcCBQJjZwUBYgkAzAgCCQCkAwEFAmNjCQDMCAIJAKQDAQUCY2UJAMwIAgkApAMBBQJjYgkAzAgCBQJjYQkAzAgCCQCkAwEFAmNyCQDMCAIJAKQDAQUCY3QFA25pbAUBagJkbAEfZXZhbHVhdGVQdXRCeVByaWNlQXNzZXRSRUFET05MWQECY3QEAmJLCQECYU4ABAJiWAkA2QQBCQCRAwIFAmJLBQFxBAJjeAkAkQMCBQJiSwUBcgQCYlkJANkEAQUCY3gEAmN5CQCRAwIFAmJLBQFzBAJiWgkA2QQBBQJjeQQCYkwJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJiSwUBdAQCYk0JAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJiSwUBdQQCY2EJAJEDAgUCYksFAXAEAmZOCAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDsBwEFAmJYCQCsAgIJAKwCAgIGQXNzZXQgCQDYBAEFAmJYAg4gZG9lc24ndCBleGlzdAhxdWFudGl0eQQCZlQJAQJidwEFAmN4BAJmVQkBAmJ3AQUCY3kEAmZWCQEBRAIFAmZUBQJiTAQCZlcJAQFEAgUCZlUFAmJNBAJjZwMJAAACBQJmTgAABQFlCQECYnkCBQJmVwUCZlYEAmNFCQEBRAIFAmN0BQJiTQQCY0QJALwCAwUCY0UFAWQFAmNnBAJjcgkBAUcCBQJjRAUCYkwEAmRyCQECY3AJAgAAoMIeBQJjcgUCYlkFAmN0BQJiWgIABgcEAmNPCAUCZHICXzEEAmZTCAUCZHICXzMEAmNjCAUCZHICXzQEAmNlCAUCZHICXzUEAmNiCAUCZHICXzYJAJQKAgUDbmlsCQC5CQIJAMwIAgIQJWQlZCVkJWQlZCVkJWQlZAkAzAgCCQCkAwEFAmNPCQDMCAIJAKQDAQkBAUcCBQJjZwUBYgkAzAgCCQCkAwEFAmNjCQDMCAIJAKQDAQUCY2UJAMwIAgkApAMBBQJjYgkAzAgCBQJjYQkAzAgCCQCkAwEFAmNyCQDMCAIJAKQDAQUCY3QFA25pbAUBagJkbAETZXZhbHVhdGVHZXRSRUFET05MWQICZlgCZlkEAmNHCQECYlQEAgAFAmZYBQJmWQUEdGhpcwQCY20IBQJjRwJfMQQCY24IBQJjRwJfMgQCY2MIBQJjRwJfNQQCY2UIBQJjRwJfNgQCY2IIBQJjRwJfNwQCY2gIBQJjRwJfOAQCY2EJAQ1wYXJzZUludFZhbHVlAQgFAmNHAl85CQCUCgIFA25pbAkAuQkCCQDMCAICDiVkJWQlZCVkJWQlZCVkCQDMCAIJAKQDAQUCY20JAMwIAgkApAMBBQJjbgkAzAgCCQCkAwEFAmNjCQDMCAIJAKQDAQUCY2UJAMwIAgkApAMBBQJjYgkAzAgCCQCmAwEFAmNoCQDMCAIJAKQDAQUCY2EFA25pbAUBagECZloBAmdhAAQCZ2IEAmR3CQECZUkAAwkAAQIFAmR3AgpCeXRlVmVjdG9yBAJlTQUCZHcFAmVNAwkAAQIFAmR3AgRVbml0CAUCZloPc2VuZGVyUHVibGljS2V5CQACAQILTWF0Y2ggZXJyb3IEAmR3BQJmWgMJAAECBQJkdwIFT3JkZXIEAmNYBQJkdwQCZ2MJAQJhTQAEAmF6CQECY1cBBQJjWAQCYUEJAPQDAwgFAmNYCWJvZHlCeXRlcwkAkQMCCAUCY1gGcHJvb2ZzAAAIBQJjWA9zZW5kZXJQdWJsaWNLZXkEAmFCCQD0AwMIBQJjWAlib2R5Qnl0ZXMJAJEDAggFAmNYBnByb29mcwABBQJnYwMDAwUCYXoFAmFBBwUCYUIHBgkBAmF5AwUCYXoFAmFBBQJhQgMJAAECBQJkdwIUU2V0U2NyaXB0VHJhbnNhY3Rpb24EAmVKBQJkdwQCZ2QJAPYDAQkBBXZhbHVlAQgFAmVKBnNjcmlwdAQCZ2UJANsEAQkBBXZhbHVlAQkAnQgCBQJhSgkBAmF3AAQCZ2YJAPEHAQUEdGhpcwMDCQAAAgUCZ2UFAmdkCQECIT0CBQJnZgUCZ2QHBgkA9AMDCAUCZloJYm9keUJ5dGVzCQCRAwIIBQJmWgZwcm9vZnMAAAUCZ2IJAPQDAwgFAmZaCWJvZHlCeXRlcwkAkQMCCAUCZloGcHJvb2ZzAAAFAmdiUyeFdQ==", "chainId": 84, "height": 2347092, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: BmkSApUwLkGF55j3pgUoLiy9RKD9xsMSJ4aAZT6uR48D Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 6 #-}
2+{-# SCRIPT_TYPE ACCOUNT #-}
3+{-# CONTENT_TYPE DAPP #-}
4+let a = 8
5+
6+let b = 100000000
7+
8+let c = toBigInt(100000000)
9+
10+let d = toBigInt(1000000000000000000)
11+
12+let e = toBigInt(0)
13+
14+let f = toBigInt(0)
15+
16+let g = toBigInt(1)
17+
18+let h = toBigInt(2)
19+
20+let i = "WAVES"
21+
22+let j = "__"
23+
24+let k = 1
25+
26+let l = 2
27+
28+let m = 3
29+
30+let n = 4
31+
32+let o = 1
33+
34+let p = 2
35+
36+let q = 3
37+
38+let r = 4
39+
40+let s = 5
41+
42+let t = 6
43+
44+let u = 7
45+
46+let v = 8
47+
48+let w = 9
49+
50+let x = 10
51+
52+let y = 1
53+
54+let z = 2
55+
56+let A = 3
57+
58+let B = 1
59+
60+let C = 7
61+
62+func D (E,F) = fraction(toBigInt(E), d, toBigInt(F))
63+
64+
65+func G (H,I) = toInt(fraction(H, toBigInt(I), d))
66+
67+
68+func J (K,L,M) = fraction(K, L, M)
69+
70+
71+func N (H) = if ((0 > H))
72+ then -(H)
73+ else H
74+
75+
76+func O (H) = if ((e > H))
77+ then -(H)
78+ else H
79+
80+
81+func P () = "%s__factoryContract"
82+
83+
84+func Q () = "%s__managerPublicKey"
85+
86+
87+func R () = "%s__pendingManagerPublicKey"
88+
89+
90+func S () = "%s%s__price__last"
91+
92+
93+func T (U,V) = makeString(["%s%s%d%d__price__history", toString(U), toString(V)], j)
94+
95+
96+func W (X,Y) = ((("%s%s%s__P__" + X) + "__") + Y)
97+
98+
99+func Z (X,Y) = ((("%s%s%s__G__" + X) + "__") + Y)
100+
101+
102+func aa () = "%s__amountAsset"
103+
104+
105+func ab () = "%s__priceAsset"
106+
107+
108+let ac = "%s__fee"
109+
110+let ad = fraction(10, b, 10000)
111+
112+let ae = valueOrElse(getInteger(this, ac), ad)
113+
114+let af = makeString(["%s", "kLp"], j)
115+
116+let ag = makeString(["%s", "kLpRefreshedHeight"], j)
117+
118+let ah = makeString(["%s", "refreshKLpDelay"], j)
119+
120+let ai = 30
121+
122+let aj = valueOrElse(getInteger(this, ah), ai)
123+
124+func ak () = "%s__factoryConfig"
125+
126+
127+func al () = "%s%s__matcher__publicKey"
128+
129+
130+func am (an) = (("%s%s%s__" + an) + "__mappings__poolContract2LpAsset")
131+
132+
133+func ao (ap,aq) = (((("%d%d%s__" + ap) + "__") + aq) + "__config")
134+
135+
136+func ar (as) = ("%s%s%s__mappings__baseAsset2internalId__" + as)
137+
138+
139+func at () = "%s__shutdown"
140+
141+
142+func au (av) = ("%s%s__poolWeight__" + av)
143+
144+
145+func aw () = "%s__allowedLpScriptHash"
146+
147+
148+let ax = "%s__feeCollectorAddress"
149+
150+func ay (az,aA,aB) = throw(((((("order validation failed: orderValid=" + toString(az)) + " senderValid=") + toString(aA)) + " matcherValid=") + toString(aB)))
151+
152+
153+func aC (aD,aE) = valueOrErrorMessage(getString(aD, aE), makeString(["mandatory ", toString(aD), ".", aE, " is not defined"], ""))
154+
155+
156+func aF (aD,aE) = valueOrErrorMessage(getInteger(aD, aE), makeString(["mandatory ", toString(aD), ".", aE, " is not defined"], ""))
157+
158+
159+func aG (aH) = throw(makeString(["lp.ride:", aH], " "))
160+
161+
162+func aI (aH) = makeString(["lp.ride:", aH], " ")
163+
164+
165+let aJ = addressFromStringValue(aC(this, P()))
166+
167+let aK = addressFromStringValue(aC(aJ, ax))
168+
169+func aL () = valueOrElse(getBoolean(aJ, at()), false)
170+
171+
172+func aM () = fromBase58String(aC(aJ, al()))
173+
174+
175+func aN () = {
176+ let aO = aC(this, aa())
177+ let aP = aC(this, ab())
178+ let aq = aF(aJ, ar(aP))
179+ let ap = aF(aJ, ar(aO))
180+ split(aC(aJ, ao(toString(ap), toString(aq))), j)
181+ }
182+
183+
184+func aQ (aR) = if ((aR == i))
185+ then unit
186+ else fromBase58String(aR)
187+
188+
189+func aS (aR) = if ((aR == unit))
190+ then i
191+ else toBase58String(value(aR))
192+
193+
194+func aT (aU) = $Tuple7(addressFromStringValue(aU[o]), parseIntValue(aU[p]), fromBase58String(aU[q]), aQ(aU[r]), aQ(aU[s]), parseIntValue(aU[t]), parseIntValue(aU[u]))
195+
196+
197+let aV = aT(aN())
198+
199+let aW = aV
200+
201+let aX = aW._1
202+
203+let aY = aW._2
204+
205+let aZ = aW._3
206+
207+let ba = aW._4
208+
209+let bb = aW._5
210+
211+let bc = aW._6
212+
213+let bd = aW._7
214+
215+func be () = split(aC(aJ, ak()), j)
216+
217+
218+let bf = valueOrErrorMessage(addressFromString(be()[B]), "incorrect staking address")
219+
220+let bg = valueOrErrorMessage(addressFromString(be()[C]), "incorrect staking address")
221+
222+func bh (bi,bj,bk,bl,bm,bn,bo,bp,bq,br) = makeString(["%d%d%d%d%d%d%d%d%d%d", toString(bi), toString(bj), toString(bk), toString(bl), toString(bm), toString(bn), toString(bo), toString(bp), toString(bq), toString(br)], j)
223+
224+
225+func bs (bt,bu,bv,bl,bo,bp) = makeString(["%d%d%d%d%d%d", toString(bt), toString(bu), toString(bv), toString(bl), toString(bo), toString(bp)], j)
226+
227+
228+func bw (bx) = if ((bx == "WAVES"))
229+ then wavesBalance(this).available
230+ else assetBalance(this, fromBase58String(bx))
231+
232+
233+func by (bz,bA) = fraction(bz, d, bA)
234+
235+
236+func bB (bC,bD,bE,bF) = {
237+ let bG = D(bE, bC)
238+ let bH = D(bF, bD)
239+ by(bH, bG)
240+ }
241+
242+
243+func bI (bE,bF,bJ) = {
244+ let bK = aN()
245+ let bL = parseIntValue(bK[t])
246+ let bM = parseIntValue(bK[u])
247+ let bN = bB(bL, bM, bE, bF)
248+ let bA = D(bE, bL)
249+ let bz = D(bF, bM)
250+ let bO = D(bJ, b)
251+ let bP = by(bA, bO)
252+ let bQ = by(bz, bO)
253+[bN, bP, bQ]
254+ }
255+
256+
257+func bR (bE,bF,bJ) = {
258+ let bS = bI(bE, bF, bJ)
259+[G(bS[0], b), G(bS[1], b), G(bS[2], b)]
260+ }
261+
262+
263+func bT (bU,bV,bW,X) = {
264+ let bK = aN()
265+ let bX = bK[q]
266+ let bY = bK[r]
267+ let bZ = bK[s]
268+ let bC = parseIntValue(bK[t])
269+ let bD = parseIntValue(bK[u])
270+ let ca = bK[p]
271+ let cb = valueOrErrorMessage(assetInfo(fromBase58String(bX)), (("Asset " + bX) + " doesn't exist")).quantity
272+ if ((bX != bV))
273+ then throw("Invalid asset passed.")
274+ else {
275+ let cc = bw(bY)
276+ let cd = D(cc, bC)
277+ let ce = bw(bZ)
278+ let cf = D(ce, bD)
279+ let cg = by(cf, cd)
280+ let ch = G(cg, b)
281+ let ci = D(bW, b)
282+ let cj = D(cb, b)
283+ let ck = fraction(cd, ci, cj)
284+ let cl = fraction(cf, ci, cj)
285+ let cm = G(ck, bC)
286+ let cn = G(cl, bD)
287+ let co = if ((bU == ""))
288+ then nil
289+ else [ScriptTransfer(X, cm, if ((bY == "WAVES"))
290+ then unit
291+ else fromBase58String(bY)), ScriptTransfer(X, cn, if ((bZ == "WAVES"))
292+ then unit
293+ else fromBase58String(bZ)), StringEntry(Z(toString(X), bU), bs(cm, cn, bW, ch, height, lastBlock.timestamp)), IntegerEntry(S(), ch), IntegerEntry(T(height, lastBlock.timestamp), ch)]
294+ $Tuple10(cm, cn, bY, bZ, cc, ce, cb, cg, ca, co)
295+ }
296+ }
297+
298+
299+func cp (bU,cq,cr,cs,ct,cu,X,cv,cw) = {
300+ let bK = aN()
301+ let bX = fromBase58String(bK[q])
302+ let cx = bK[r]
303+ let cy = bK[s]
304+ let cz = bK[v]
305+ let cA = bK[w]
306+ let bL = parseIntValue(bK[t])
307+ let bM = parseIntValue(bK[u])
308+ let ca = bK[p]
309+ let cb = valueOrErrorMessage(assetInfo(bX), (("Asset " + toBase58String(bX)) + " doesn't exist")).quantity
310+ let cB = toBase58String(valueOrElse(cs, fromBase58String("WAVES")))
311+ let cC = toBase58String(valueOrElse(cu, fromBase58String("WAVES")))
312+ if (if ((cx != cB))
313+ then true
314+ else (cy != cC))
315+ then throw("Invalid amt or price asset passed.")
316+ else {
317+ let cc = if (cv)
318+ then bw(cx)
319+ else (bw(cx) - cr)
320+ let ce = if (cv)
321+ then bw(cy)
322+ else (bw(cy) - ct)
323+ let cD = D(cr, bL)
324+ let cE = D(ct, bM)
325+ let cF = by(cE, cD)
326+ let cd = D(cc, bL)
327+ let cf = D(ce, bM)
328+ let cG = if ((cb == 0))
329+ then {
330+ let cg = e
331+ let cH = e
332+ let bO = pow((cD * cE), 0, toBigInt(5), 1, 0, DOWN)
333+ $Tuple5(G(bO, b), G(cD, bL), G(cE, bM), by((cf + cE), (cd + cD)), cH)
334+ }
335+ else {
336+ let cg = by(cf, cd)
337+ let cH = fraction(O((cg - cF)), d, cg)
338+ let cI = D(cq, b)
339+ if (if ((cg != e))
340+ then (cH > cI)
341+ else false)
342+ then throw(((("Price slippage " + toString(cH)) + " exceeded the passed limit of ") + toString(cI)))
343+ else {
344+ let cj = D(cb, b)
345+ let cJ = fraction(cD, cg, d)
346+ let cK = fraction(cE, d, cg)
347+ let cL = if ((cJ > cE))
348+ then $Tuple2(cK, cE)
349+ else $Tuple2(cD, cJ)
350+ let cM = cL._1
351+ let cN = cL._2
352+ let bO = fraction(cj, cN, cf)
353+ $Tuple5(G(bO, b), G(cM, bL), G(cN, bM), cg, cH)
354+ }
355+ }
356+ let cO = cG._1
357+ let cP = cG._2
358+ let cQ = cG._3
359+ let ch = G(cG._4, b)
360+ let cR = G(cG._5, b)
361+ if ((0 >= cO))
362+ then throw("Invalid calculations. LP calculated is less than zero.")
363+ else {
364+ let cS = if (!(cw))
365+ then 0
366+ else cO
367+ let cT = (cr - cP)
368+ let cU = (ct - cQ)
369+ let cV = [IntegerEntry(S(), ch), IntegerEntry(T(height, lastBlock.timestamp), ch), StringEntry(W(X, bU), bh(cP, cQ, cS, ch, cq, cR, height, lastBlock.timestamp, cT, cU))]
370+ $Tuple13(cO, cS, ch, cc, ce, cb, bX, ca, cV, cT, cU, cs, cu)
371+ }
372+ }
373+ }
374+
375+
376+func cW (cX) = {
377+ let bK = aN()
378+ let cY = bK[r]
379+ let cZ = bK[s]
380+ let ca = parseIntValue(bK[p])
381+ let bL = parseIntValue(bK[t])
382+ let bM = parseIntValue(bK[u])
383+ let da = bw(cY)
384+ let db = bw(cZ)
385+ let cg = if ((cX.orderType == Buy))
386+ then bB(bL, bM, (da + cX.amount), db)
387+ else bB(bL, bM, (da - cX.amount), db)
388+ let ch = G(cg, b)
389+ if (if (if (aL())
390+ then true
391+ else (ca == m))
392+ then true
393+ else (ca == n))
394+ then throw("Exchange operations disabled")
395+ else {
396+ let dc = cX.assetPair.amountAsset
397+ let dd = if ((dc == unit))
398+ then "WAVES"
399+ else toBase58String(value(dc))
400+ let de = cX.assetPair.priceAsset
401+ let df = if ((de == unit))
402+ then "WAVES"
403+ else toBase58String(value(de))
404+ if (if ((dd != cY))
405+ then true
406+ else (df != cZ))
407+ then throw("Wrong order assets.")
408+ else {
409+ let dg = cX.price
410+ let dh = fraction(b, bM, bL)
411+ let di = J(dg, b, dh)
412+ let dj = if ((cX.orderType == Buy))
413+ then (ch >= di)
414+ else (di >= ch)
415+ true
416+ }
417+ }
418+ }
419+
420+
421+func dk (dl) = if ((size(dl.payments) != 1))
422+ then throw("exactly 1 payment is expected")
423+ else {
424+ let dm = value(dl.payments[0])
425+ let bV = value(dm.assetId)
426+ let dn = dm.amount
427+ let cG = bT(toBase58String(dl.transactionId), toBase58String(bV), dn, dl.caller)
428+ let cm = cG._1
429+ let cn = cG._2
430+ let ca = parseIntValue(cG._9)
431+ let co = cG._10
432+ if (if (aL())
433+ then true
434+ else (ca == n))
435+ then throw(("Get operation is blocked by admin. Status = " + toString(ca)))
436+ else $Tuple5(cm, cn, dn, bV, co)
437+ }
438+
439+
440+func do (dl,cq,cw) = if ((size(dl.payments) != 2))
441+ then throw("exactly 2 payments are expected")
442+ else {
443+ let dp = value(dl.payments[0])
444+ let dq = value(dl.payments[1])
445+ let dr = cp(toBase58String(dl.transactionId), cq, dp.amount, dp.assetId, dq.amount, dq.assetId, toString(dl.caller), false, cw)
446+ let ca = parseIntValue(dr._8)
447+ if (if (if (aL())
448+ then true
449+ else (ca == l))
450+ then true
451+ else (ca == n))
452+ then throw(("Put operation is blocked by admin. Status = " + toString(ca)))
453+ else dr
454+ }
455+
456+
457+func ds (dt) = {
458+ let du = invoke(aJ, "emit", [dt], nil)
459+ if ((du == du))
460+ then {
461+ let dv = {
462+ let dw = du
463+ if ($isInstanceOf(dw, "Address"))
464+ then {
465+ let dx = dw
466+ invoke(dx, "emit", [dt], nil)
467+ }
468+ else unit
469+ }
470+ if ((dv == dv))
471+ then dt
472+ else throw("Strict value is not equal to itself.")
473+ }
474+ else throw("Strict value is not equal to itself.")
475+ }
476+
477+
478+func dy (dt) = {
479+ let dz = fraction(dt, ae, b)
480+ $Tuple2((dt - dz), dz)
481+ }
482+
483+
484+func dA (dB,dC,X,Y) = {
485+ let dD = (Y == unit)
486+ let dE = bw(aS(ba))
487+ let dF = bw(aS(bb))
488+ let dG = if ((dC == ba))
489+ then true
490+ else if ((dC == bb))
491+ then false
492+ else aG("invalid asset")
493+ let dH = if (dD)
494+ then $Tuple2(dE, dF)
495+ else if (dG)
496+ then $Tuple2((dE - dB), dF)
497+ else $Tuple2(dE, (dF - dB))
498+ let dI = dH._1
499+ let dJ = dH._2
500+ let dK = if (dG)
501+ then $Tuple2(dB, 0)
502+ else $Tuple2(0, dB)
503+ let dL = dK._1
504+ let dM = dK._2
505+ let dN = dy(dL)._1
506+ let dO = dy(dM)._1
507+ let dP = dy(dB)
508+ let dQ = dP._1
509+ let dz = dP._2
510+ let dR = (dI + dN)
511+ let dS = (dJ + dO)
512+ let dT = by(D(dS, bd), D(dR, bc))
513+ let dU = G(dT, b)
514+ let dV = if (dG)
515+ then dI
516+ else dJ
517+ let dW = toBigInt(dV)
518+ let dX = toBigInt(valueOrErrorMessage(assetInfo(aZ), (("asset " + toBase58String(aZ)) + " doesn't exist")).quantity)
519+ let dY = if ((dX > f))
520+ then true
521+ else aG("initial deposit requires all coins")
522+ if ((dY == dY))
523+ then {
524+ let dZ = toBigInt(dQ)
525+ let ea = max([0, toInt(((dX * (sqrtBigInt((d + ((dZ * d) / dW)), 18, 18, DOWN) - d)) / d))])
526+ let cV = if (dD)
527+ then nil
528+ else [IntegerEntry(S(), dU), IntegerEntry(T(height, lastBlock.timestamp), dU), StringEntry(W(toString(value(X)), toBase58String(value(Y))), bh(dL, dM, ea, dU, 0, 0, height, lastBlock.timestamp, 0, 0))]
529+ let eb = by(D(dJ, bd), D(dI, bc))
530+ let ec = G(eb, b)
531+ let ed = {
532+ let ee = if (dG)
533+ then $Tuple2(dL, dI)
534+ else $Tuple2(dM, dJ)
535+ let dt = ee._1
536+ let ef = ee._2
537+ let eg = toInt(fraction(dX, toBigInt((dt / 2)), toBigInt(ef)))
538+ fraction((ea - eg), b, eg)
539+ }
540+ $Tuple4(ea, cV, dz, ed)
541+ }
542+ else throw("Strict value is not equal to itself.")
543+ }
544+
545+
546+func eh (ei,dQ,dC,X,Y) = {
547+ let dD = (Y == unit)
548+ let ej = [if ((dC == aZ))
549+ then true
550+ else aG("invalid lp asset")]
551+ if ((ej == ej))
552+ then {
553+ let ek = if ((ei == ba))
554+ then true
555+ else if ((ei == bb))
556+ then false
557+ else aG("invalid asset")
558+ let el = if (ek)
559+ then toBigInt(bw(aS(ba)))
560+ else toBigInt(bw(aS(bb)))
561+ let em = bw(aS(ba))
562+ let en = bw(aS(bb))
563+ let eo = if (ek)
564+ then em
565+ else en
566+ let ep = toBigInt(eo)
567+ let dX = toBigInt(valueOrErrorMessage(assetInfo(aZ), (("asset " + toBase58String(aZ)) + " doesn't exist")).quantity)
568+ let eq = toBigInt(dQ)
569+ let er = max([0, toInt(((el * (d - pow((d - ((eq * d) / dX)), 18, h, 0, 18, DOWN))) / d))])
570+ let es = dy(er)
571+ let et = es._1
572+ let dz = es._2
573+ let eu = if (ek)
574+ then $Tuple4(et, 0, (em - er), en)
575+ else $Tuple4(0, et, em, (en - er))
576+ let ev = eu._1
577+ let ew = eu._2
578+ let ex = eu._3
579+ let ey = eu._4
580+ let dT = by(D(ey, bd), D(ex, bc))
581+ let dU = G(dT, b)
582+ let cV = if (dD)
583+ then nil
584+ else [StringEntry(Z(toString(value(X)), toBase58String(value(Y))), bs(ev, ew, dQ, dU, height, lastBlock.timestamp)), IntegerEntry(S(), dU), IntegerEntry(T(height, lastBlock.timestamp), dU)]
585+ let eb = by(D(en, bd), D(em, bc))
586+ let ec = G(eb, b)
587+ let ed = {
588+ let ez = (toInt(fraction(el, eq, dX)) * 2)
589+ fraction((et - ez), b, ez)
590+ }
591+ $Tuple4(et, cV, dz, ed)
592+ }
593+ else throw("Strict value is not equal to itself.")
594+ }
595+
596+
597+func eA (eB,eC,cb) = {
598+ let eD = fraction(pow((eB * eC), 0, toBigInt(5), 1, 0, DOWN), d, cb)
599+ eD
600+ }
601+
602+
603+func eE () = {
604+ let eF = bw(aS(ba))
605+ let eG = bw(aS(bb))
606+ let cb = value(assetInfo(aZ)).quantity
607+ let eD = eA(toBigInt(eF), toBigInt(eG), toBigInt(cb))
608+ let eH = [IntegerEntry(ag, height), StringEntry(af, toString(eD))]
609+ $Tuple2(eH, eD)
610+ }
611+
612+
613+func eI () = {
614+ let dw = getString(Q())
615+ if ($isInstanceOf(dw, "String"))
616+ then {
617+ let eJ = dw
618+ fromBase58String(eJ)
619+ }
620+ else if ($isInstanceOf(dw, "Unit"))
621+ then unit
622+ else throw("Match error")
623+ }
624+
625+
626+func eK () = {
627+ let dw = getString(R())
628+ if ($isInstanceOf(dw, "String"))
629+ then {
630+ let eJ = dw
631+ fromBase58String(eJ)
632+ }
633+ else if ($isInstanceOf(dw, "Unit"))
634+ then unit
635+ else throw("Match error")
636+ }
637+
638+
639+func eL (dl) = {
640+ let dw = eI()
641+ if ($isInstanceOf(dw, "ByteVector"))
642+ then {
643+ let eM = dw
644+ (dl.callerPublicKey == eM)
645+ }
646+ else if ($isInstanceOf(dw, "Unit"))
647+ then (dl.caller == this)
648+ else throw("Match error")
649+ }
650+
651+
652+func eN (dl) = {
653+ let eO = throw("Permission denied")
654+ let dw = eI()
655+ if ($isInstanceOf(dw, "ByteVector"))
656+ then {
657+ let eM = dw
658+ if ((dl.callerPublicKey == eM))
659+ then true
660+ else eO
661+ }
662+ else if ($isInstanceOf(dw, "Unit"))
663+ then if ((dl.caller == this))
664+ then true
665+ else eO
666+ else throw("Match error")
667+ }
668+
669+
670+@Callable(dl)
671+func setManager (eP) = {
672+ let eQ = eN(dl)
673+ if ((eQ == eQ))
674+ then {
675+ let eR = fromBase58String(eP)
676+ if ((eR == eR))
677+ then [StringEntry(R(), eP)]
678+ else throw("Strict value is not equal to itself.")
679+ }
680+ else throw("Strict value is not equal to itself.")
681+ }
682+
683+
684+
685+@Callable(dl)
686+func confirmManager () = {
687+ let eS = eK()
688+ let eT = if (isDefined(eS))
689+ then true
690+ else throw("No pending manager")
691+ if ((eT == eT))
692+ then {
693+ let eU = if ((dl.callerPublicKey == value(eS)))
694+ then true
695+ else throw("You are not pending manager")
696+ if ((eU == eU))
697+ then [StringEntry(Q(), toBase58String(value(eS))), DeleteEntry(R())]
698+ else throw("Strict value is not equal to itself.")
699+ }
700+ else throw("Strict value is not equal to itself.")
701+ }
702+
703+
704+
705+@Callable(dl)
706+func put (cq,eV) = if ((0 > cq))
707+ then throw("Invalid slippageTolerance passed")
708+ else {
709+ let dr = do(dl, cq, true)
710+ let cS = dr._2
711+ let bX = dr._7
712+ let co = dr._9
713+ let cT = dr._10
714+ let cU = dr._11
715+ let eW = dr._12
716+ let eX = dr._13
717+ let du = invoke(aJ, "emit", [cS], nil)
718+ if ((du == du))
719+ then {
720+ let dv = {
721+ let dw = du
722+ if ($isInstanceOf(dw, "Address"))
723+ then {
724+ let dx = dw
725+ invoke(dx, "emit", [cS], nil)
726+ }
727+ else unit
728+ }
729+ if ((dv == dv))
730+ then {
731+ let eY = if ((cT > 0))
732+ then invoke(bg, "put", nil, [AttachedPayment(eW, cT)])
733+ else nil
734+ if ((eY == eY))
735+ then {
736+ let eZ = if ((cU > 0))
737+ then invoke(bg, "put", nil, [AttachedPayment(eX, cU)])
738+ else nil
739+ if ((eZ == eZ))
740+ then {
741+ let fa = if (eV)
742+ then {
743+ let fb = invoke(bf, "stake", nil, [AttachedPayment(bX, cS)])
744+ if ((fb == fb))
745+ then nil
746+ else throw("Strict value is not equal to itself.")
747+ }
748+ else [ScriptTransfer(dl.caller, cS, bX)]
749+ (co ++ fa)
750+ }
751+ else throw("Strict value is not equal to itself.")
752+ }
753+ else throw("Strict value is not equal to itself.")
754+ }
755+ else throw("Strict value is not equal to itself.")
756+ }
757+ else throw("Strict value is not equal to itself.")
758+ }
759+
760+
761+
762+@Callable(dl)
763+func putForFree (fc) = if ((0 > fc))
764+ then throw("Invalid value passed")
765+ else {
766+ let dr = do(dl, fc, false)
767+ dr._9
768+ }
769+
770+
771+
772+@Callable(dl)
773+func putOneTkn (fd,fe) = {
774+ let ff = {
775+ let fg = invoke(aJ, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
776+ if ($isInstanceOf(fg, "Boolean"))
777+ then fg
778+ else throw(($getType(fg) + " couldn't be cast to Boolean"))
779+ }
780+ let fh = if (if (if (aL())
781+ then true
782+ else (aY == l))
783+ then true
784+ else (aY == n))
785+ then true
786+ else ff
787+ let ej = [if (if (!(fh))
788+ then true
789+ else eL(dl))
790+ then true
791+ else aG("put operation is blocked by admin"), if ((size(dl.payments) == 1))
792+ then true
793+ else aG("exactly 1 payment are expected")]
794+ if ((ej == ej))
795+ then {
796+ let fi = dl.payments[0]
797+ let dC = fi.assetId
798+ let dB = fi.amount
799+ let X = dl.caller
800+ let Y = dl.transactionId
801+ let fj = dA(dB, dC, X, Y)
802+ if ((fj == fj))
803+ then {
804+ let fk = fj._4
805+ let dz = fj._3
806+ let cV = fj._2
807+ let fl = fj._1
808+ let fm = if (if ((fd > 0))
809+ then (fd > fl)
810+ else false)
811+ then aG(makeString(["amount to receive is less than ", toString(fd)], ""))
812+ else fl
813+ let du = ds(fm)
814+ if ((du == du))
815+ then {
816+ let fa = if (fe)
817+ then {
818+ let fn = invoke(bf, "stake", nil, [AttachedPayment(aZ, fm)])
819+ if ((fn == fn))
820+ then nil
821+ else throw("Strict value is not equal to itself.")
822+ }
823+ else [ScriptTransfer(dl.caller, fm, aZ)]
824+ let fo = if ((dz > 0))
825+ then [ScriptTransfer(aK, dz, dC)]
826+ else nil
827+ $Tuple2(((cV ++ fa) ++ fo), fm)
828+ }
829+ else throw("Strict value is not equal to itself.")
830+ }
831+ else throw("Strict value is not equal to itself.")
832+ }
833+ else throw("Strict value is not equal to itself.")
834+ }
835+
836+
837+
838+@Callable(dl)
839+func putOneTknREADONLY (dC,dB) = {
840+ let fp = dA(dB, aQ(dC), unit, unit)
841+ let fl = fp._1
842+ let cV = fp._2
843+ let dz = fp._3
844+ let fk = fp._4
845+ $Tuple2(nil, $Tuple3(fl, dz, fk))
846+ }
847+
848+
849+
850+@Callable(dl)
851+func getOneTkn (fq,fd) = {
852+ let ff = {
853+ let fg = invoke(aJ, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
854+ if ($isInstanceOf(fg, "Boolean"))
855+ then fg
856+ else throw(($getType(fg) + " couldn't be cast to Boolean"))
857+ }
858+ let fr = if (if (aL())
859+ then true
860+ else (aY == n))
861+ then true
862+ else ff
863+ let ej = [if (if (!(fr))
864+ then true
865+ else eL(dl))
866+ then true
867+ else aG("get operation is blocked by admin"), if ((size(dl.payments) == 1))
868+ then true
869+ else aG("exactly 1 payment are expected")]
870+ if ((ej == ej))
871+ then {
872+ let ei = aQ(fq)
873+ let fi = dl.payments[0]
874+ let dC = fi.assetId
875+ let dQ = fi.amount
876+ let X = dl.caller
877+ let Y = dl.transactionId
878+ let fs = eh(ei, dQ, dC, X, Y)
879+ if ((fs == fs))
880+ then {
881+ let fk = fs._4
882+ let dz = fs._3
883+ let cV = fs._2
884+ let ft = fs._1
885+ let dt = if (if ((fd > 0))
886+ then (fd > ft)
887+ else false)
888+ then aG(makeString(["amount to receive is less than ", toString(fd)], ""))
889+ else ft
890+ let fu = invoke(aJ, "burn", [dQ], [AttachedPayment(dC, dQ)])
891+ if ((fu == fu))
892+ then {
893+ let fv = [ScriptTransfer(X, dt, ei)]
894+ let fo = if ((dz > 0))
895+ then [ScriptTransfer(aK, dz, ei)]
896+ else nil
897+ $Tuple2(((cV ++ fv) ++ fo), dt)
898+ }
899+ else throw("Strict value is not equal to itself.")
900+ }
901+ else throw("Strict value is not equal to itself.")
902+ }
903+ else throw("Strict value is not equal to itself.")
904+ }
905+
906+
907+
908+@Callable(dl)
909+func getOneTknREADONLY (ei,dQ) = {
910+ let fw = eh(aQ(ei), dQ, aZ, unit, unit)
911+ let ft = fw._1
912+ let cV = fw._2
913+ let dz = fw._3
914+ let fk = fw._4
915+ $Tuple2(nil, $Tuple3(ft, dz, fk))
916+ }
917+
918+
919+
920+@Callable(dl)
921+func unstakeAndGetOneTkn (fx,fq,fd) = {
922+ let ff = {
923+ let fg = invoke(aJ, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
924+ if ($isInstanceOf(fg, "Boolean"))
925+ then fg
926+ else throw(($getType(fg) + " couldn't be cast to Boolean"))
927+ }
928+ let fr = if (if (aL())
929+ then true
930+ else (aY == n))
931+ then true
932+ else ff
933+ let ej = [if (if (!(fr))
934+ then true
935+ else eL(dl))
936+ then true
937+ else aG("get operation is blocked by admin"), if ((size(dl.payments) == 0))
938+ then true
939+ else aG("no payments are expected")]
940+ if ((ej == ej))
941+ then {
942+ let ei = aQ(fq)
943+ let X = dl.caller
944+ let Y = dl.transactionId
945+ let fy = invoke(bf, "unstake", [toBase58String(aZ), fx], nil)
946+ if ((fy == fy))
947+ then {
948+ let fz = eh(ei, fx, aZ, X, Y)
949+ if ((fz == fz))
950+ then {
951+ let fk = fz._4
952+ let dz = fz._3
953+ let cV = fz._2
954+ let ft = fz._1
955+ let dt = if (if ((fd > 0))
956+ then (fd > ft)
957+ else false)
958+ then aG(makeString(["amount to receive is less than ", toString(fd)], ""))
959+ else ft
960+ let fu = invoke(aJ, "burn", [fx], [AttachedPayment(aZ, fx)])
961+ if ((fu == fu))
962+ then {
963+ let fv = [ScriptTransfer(dl.caller, dt, ei)]
964+ let fo = if ((dz > 0))
965+ then [ScriptTransfer(aK, dz, ei)]
966+ else nil
967+ $Tuple2(((cV ++ fv) ++ fo), dt)
968+ }
969+ else throw("Strict value is not equal to itself.")
970+ }
971+ else throw("Strict value is not equal to itself.")
972+ }
973+ else throw("Strict value is not equal to itself.")
974+ }
975+ else throw("Strict value is not equal to itself.")
976+ }
977+
978+
979+
980+@Callable(dl)
981+func get () = {
982+ let cG = dk(dl)
983+ let fA = cG._1
984+ let cn = cG._2
985+ let dn = cG._3
986+ let bV = cG._4
987+ let co = cG._5
988+ let fB = invoke(aJ, "burn", [dn], [AttachedPayment(bV, dn)])
989+ if ((fB == fB))
990+ then co
991+ else throw("Strict value is not equal to itself.")
992+ }
993+
994+
995+
996+@Callable(dl)
997+func getNoLess (fC,fD) = {
998+ let cG = dk(dl)
999+ let cm = cG._1
1000+ let cn = cG._2
1001+ let dn = cG._3
1002+ let bV = cG._4
1003+ let co = cG._5
1004+ if ((fC > cm))
1005+ then throw(((("noLessThenAmtAsset failed: " + toString(cm)) + " < ") + toString(fC)))
1006+ else if ((fD > cn))
1007+ then throw(((("noLessThenPriceAsset failed: " + toString(cn)) + " < ") + toString(fD)))
1008+ else {
1009+ let fB = invoke(aJ, "burn", [dn], [AttachedPayment(bV, dn)])
1010+ if ((fB == fB))
1011+ then co
1012+ else throw("Strict value is not equal to itself.")
1013+ }
1014+ }
1015+
1016+
1017+
1018+@Callable(dl)
1019+func unstakeAndGet (dt) = {
1020+ let fE = if ((size(dl.payments) != 0))
1021+ then throw("No payments are expected")
1022+ else true
1023+ if ((fE == fE))
1024+ then {
1025+ let bK = aN()
1026+ let bX = fromBase58String(bK[q])
1027+ let fy = invoke(bf, "unstake", [toBase58String(bX), dt], nil)
1028+ if ((fy == fy))
1029+ then {
1030+ let cG = bT(toBase58String(dl.transactionId), toBase58String(bX), dt, dl.caller)
1031+ let ca = parseIntValue(cG._9)
1032+ let co = cG._10
1033+ let fF = if (if (aL())
1034+ then true
1035+ else (ca == n))
1036+ then throw(("Get operation is blocked by admin. Status = " + toString(ca)))
1037+ else true
1038+ if ((fF == fF))
1039+ then {
1040+ let fB = invoke(aJ, "burn", [dt], [AttachedPayment(bX, dt)])
1041+ if ((fB == fB))
1042+ then co
1043+ else throw("Strict value is not equal to itself.")
1044+ }
1045+ else throw("Strict value is not equal to itself.")
1046+ }
1047+ else throw("Strict value is not equal to itself.")
1048+ }
1049+ else throw("Strict value is not equal to itself.")
1050+ }
1051+
1052+
1053+
1054+@Callable(dl)
1055+func unstakeAndGetNoLess (fx,fG,fD) = {
1056+ let fr = if (aL())
1057+ then true
1058+ else (aY == n)
1059+ let ej = [if (!(fr))
1060+ then true
1061+ else throw("get operation is blocked by admin"), if ((size(dl.payments) == 0))
1062+ then true
1063+ else throw("no payments are expected")]
1064+ if ((ej == ej))
1065+ then {
1066+ let fy = invoke(bf, "unstake", [toBase58String(aZ), fx], nil)
1067+ if ((fy == fy))
1068+ then {
1069+ let cG = bT(toBase58String(dl.transactionId), toBase58String(aZ), fx, dl.caller)
1070+ let cm = cG._1
1071+ let cn = cG._2
1072+ let co = cG._10
1073+ let fH = [if ((cm >= fG))
1074+ then true
1075+ else throw(makeString(["amount asset amount to receive is less than ", toString(fG)], "")), if ((cn >= fD))
1076+ then true
1077+ else throw(makeString(["price asset amount to receive is less than ", toString(fD)], ""))]
1078+ if ((fH == fH))
1079+ then {
1080+ let fB = invoke(aJ, "burn", [fx], [AttachedPayment(aZ, fx)])
1081+ if ((fB == fB))
1082+ then co
1083+ else throw("Strict value is not equal to itself.")
1084+ }
1085+ else throw("Strict value is not equal to itself.")
1086+ }
1087+ else throw("Strict value is not equal to itself.")
1088+ }
1089+ else throw("Strict value is not equal to itself.")
1090+ }
1091+
1092+
1093+
1094+@Callable(dl)
1095+func activate (fI,fJ) = if ((toString(dl.caller) != toString(aJ)))
1096+ then throw("permissions denied")
1097+ else $Tuple2([StringEntry(aa(), fI), StringEntry(ab(), fJ)], "success")
1098+
1099+
1100+
1101+@Callable(dl)
1102+func refreshKLp () = {
1103+ let fK = valueOrElse(getInteger(ag), 0)
1104+ let fL = if (((height - fK) >= aj))
1105+ then unit
1106+ else aG(makeString([toString(aj), " blocks have not passed since the previous call"], ""))
1107+ if ((fL == fL))
1108+ then {
1109+ let fM = eE()
1110+ let eH = fM._1
1111+ let eD = fM._2
1112+ $Tuple2(eH, eD)
1113+ }
1114+ else throw("Strict value is not equal to itself.")
1115+ }
1116+
1117+
1118+
1119+@Callable(dl)
1120+func getPoolConfigWrapperREADONLY () = $Tuple2(nil, aN())
1121+
1122+
1123+
1124+@Callable(dl)
1125+func getAccBalanceWrapperREADONLY (bx) = $Tuple2(nil, bw(bx))
1126+
1127+
1128+
1129+@Callable(dl)
1130+func calcPricesWrapperREADONLY (bE,bF,bJ) = {
1131+ let bS = bI(bE, bF, bJ)
1132+ $Tuple2(nil, [toString(bS[0]), toString(bS[1]), toString(bS[2])])
1133+ }
1134+
1135+
1136+
1137+@Callable(dl)
1138+func toX18WrapperREADONLY (E,F) = $Tuple2(nil, toString(D(E, F)))
1139+
1140+
1141+
1142+@Callable(dl)
1143+func fromX18WrapperREADONLY (H,I) = $Tuple2(nil, G(parseBigIntValue(H), I))
1144+
1145+
1146+
1147+@Callable(dl)
1148+func calcPriceBigIntWrapperREADONLY (bz,bA) = $Tuple2(nil, toString(by(parseBigIntValue(bz), parseBigIntValue(bA))))
1149+
1150+
1151+
1152+@Callable(dl)
1153+func estimatePutOperationWrapperREADONLY (bU,cq,cr,cs,ct,cu,X,cv,cw) = $Tuple2(nil, cp(bU, cq, cr, cs, ct, cu, X, cv, cw))
1154+
1155+
1156+
1157+@Callable(dl)
1158+func estimateGetOperationWrapperREADONLY (bU,bV,bW,X) = {
1159+ let cG = bT(bU, bV, bW, addressFromStringValue(X))
1160+ $Tuple2(nil, $Tuple10(cG._1, cG._2, cG._3, cG._4, cG._5, cG._6, cG._7, toString(cG._8), cG._9, cG._10))
1161+ }
1162+
1163+
1164+
1165+@Callable(dl)
1166+func statsREADONLY () = {
1167+ let bK = aN()
1168+ let bX = fromBase58String(bK[q])
1169+ let cY = bK[r]
1170+ let cZ = bK[s]
1171+ let cz = bK[v]
1172+ let cA = bK[w]
1173+ let bL = parseIntValue(bK[t])
1174+ let bM = parseIntValue(bK[u])
1175+ let fN = valueOrErrorMessage(assetInfo(bX), (("Asset " + toBase58String(bX)) + " doesn't exist")).quantity
1176+ let da = bw(cY)
1177+ let db = bw(cZ)
1178+ let fO = if ((fN == 0))
1179+ then [e, e, e]
1180+ else bI(da, db, fN)
1181+ let ch = 0
1182+ let fP = G(fO[1], b)
1183+ let fQ = G(fO[2], b)
1184+ let fR = value(getInteger(aJ, au(toString(this))))
1185+ $Tuple2(nil, makeString(["%d%d%d%d%d%d%d", toString(da), toString(db), toString(fN), toString(ch), toString(fP), toString(fQ), toString(fR)], j))
1186+ }
1187+
1188+
1189+
1190+@Callable(dl)
1191+func evaluatePutByAmountAssetREADONLY (cr) = {
1192+ let bK = aN()
1193+ let bX = fromBase58String(bK[q])
1194+ let cx = bK[r]
1195+ let bY = fromBase58String(cx)
1196+ let cy = bK[s]
1197+ let bZ = fromBase58String(cy)
1198+ let bL = parseIntValue(bK[t])
1199+ let bM = parseIntValue(bK[u])
1200+ let ca = bK[p]
1201+ let fN = valueOrErrorMessage(assetInfo(bX), (("Asset " + toBase58String(bX)) + " doesn't exist")).quantity
1202+ let da = bw(cx)
1203+ let db = bw(cy)
1204+ let bG = D(da, bL)
1205+ let bH = D(db, bM)
1206+ let cg = if ((fN == 0))
1207+ then e
1208+ else by(bH, bG)
1209+ let cD = D(cr, bL)
1210+ let cE = fraction(cD, cg, d)
1211+ let ct = G(cE, bM)
1212+ let dr = cp("", 500000, cr, bY, ct, bZ, "", true, false)
1213+ let cO = dr._1
1214+ let fS = dr._3
1215+ let cc = dr._4
1216+ let ce = dr._5
1217+ let cb = dr._6
1218+ $Tuple2(nil, makeString(["%d%d%d%d%d%d%d%d", toString(cO), toString(G(cg, b)), toString(cc), toString(ce), toString(cb), ca, toString(cr), toString(ct)], j))
1219+ }
1220+
1221+
1222+
1223+@Callable(dl)
1224+func evaluatePutByPriceAssetREADONLY (ct) = {
1225+ let bK = aN()
1226+ let bX = fromBase58String(bK[q])
1227+ let cx = bK[r]
1228+ let bY = fromBase58String(cx)
1229+ let cy = bK[s]
1230+ let bZ = fromBase58String(cy)
1231+ let bL = parseIntValue(bK[t])
1232+ let bM = parseIntValue(bK[u])
1233+ let ca = bK[p]
1234+ let fN = valueOrErrorMessage(assetInfo(bX), (("Asset " + toBase58String(bX)) + " doesn't exist")).quantity
1235+ let fT = bw(cx)
1236+ let fU = bw(cy)
1237+ let fV = D(fT, bL)
1238+ let fW = D(fU, bM)
1239+ let cg = if ((fN == 0))
1240+ then e
1241+ else by(fW, fV)
1242+ let cE = D(ct, bM)
1243+ let cD = fraction(cE, d, cg)
1244+ let cr = G(cD, bL)
1245+ let dr = cp("", 500000, cr, bY, ct, bZ, "", true, false)
1246+ let cO = dr._1
1247+ let fS = dr._3
1248+ let cc = dr._4
1249+ let ce = dr._5
1250+ let cb = dr._6
1251+ $Tuple2(nil, makeString(["%d%d%d%d%d%d%d%d", toString(cO), toString(G(cg, b)), toString(cc), toString(ce), toString(cb), ca, toString(cr), toString(ct)], j))
1252+ }
1253+
1254+
1255+
1256+@Callable(dl)
1257+func evaluateGetREADONLY (fX,fY) = {
1258+ let cG = bT("", fX, fY, this)
1259+ let cm = cG._1
1260+ let cn = cG._2
1261+ let cc = cG._5
1262+ let ce = cG._6
1263+ let cb = cG._7
1264+ let ch = cG._8
1265+ let ca = parseIntValue(cG._9)
1266+ $Tuple2(nil, makeString(["%d%d%d%d%d%d%d", toString(cm), toString(cn), toString(cc), toString(ce), toString(cb), toString(ch), toString(ca)], j))
1267+ }
1268+
1269+
1270+@Verifier(fZ)
1271+func ga () = {
1272+ let gb = {
1273+ let dw = eI()
1274+ if ($isInstanceOf(dw, "ByteVector"))
1275+ then {
1276+ let eM = dw
1277+ eM
1278+ }
1279+ else if ($isInstanceOf(dw, "Unit"))
1280+ then fZ.senderPublicKey
1281+ else throw("Match error")
1282+ }
1283+ let dw = fZ
1284+ if ($isInstanceOf(dw, "Order"))
1285+ then {
1286+ let cX = dw
1287+ let gc = aM()
1288+ let az = cW(cX)
1289+ let aA = sigVerify(cX.bodyBytes, cX.proofs[0], cX.senderPublicKey)
1290+ let aB = sigVerify(cX.bodyBytes, cX.proofs[1], gc)
1291+ if (if (if (az)
1292+ then aA
1293+ else false)
1294+ then aB
1295+ else false)
1296+ then true
1297+ else ay(az, aA, aB)
1298+ }
1299+ else if ($isInstanceOf(dw, "SetScriptTransaction"))
1300+ then {
1301+ let eJ = dw
1302+ let gd = blake2b256(value(eJ.script))
1303+ let ge = fromBase64String(value(getString(aJ, aw())))
1304+ let gf = scriptHash(this)
1305+ if (if ((ge == gd))
1306+ then (gf != gd)
1307+ else false)
1308+ then true
1309+ else sigVerify(fZ.bodyBytes, fZ.proofs[0], gb)
1310+ }
1311+ else sigVerify(fZ.bodyBytes, fZ.proofs[0], gb)
1312+ }
1313+

github/deemru/w8io/169f3d6 
58.39 ms