tx · GeE4KG5d4Hrq1FxkHiryNNZkcTWzx7DUdmah2zzt8wNN

3NAefciWv6f9fWvEXdGgpHfanJFG8HqfjuT:  -0.03900000 Waves

2023.02.09 12:51 [2441946] smart account 3NAefciWv6f9fWvEXdGgpHfanJFG8HqfjuT > SELF 0.00000000 Waves

{ "type": 13, "id": "GeE4KG5d4Hrq1FxkHiryNNZkcTWzx7DUdmah2zzt8wNN", "fee": 3900000, "feeAssetId": null, "timestamp": 1675936262002, "version": 2, "chainId": 84, "sender": "3NAefciWv6f9fWvEXdGgpHfanJFG8HqfjuT", "senderPublicKey": "D1BL65meykxFZTCuq7jq9HSGLLnWvQamQPUNrguW5w39", "proofs": [ "tA17RTegwngLv4CJmhz5hAfFB6sc67eLkk8p73CpLxHpGCytTnQLE1MUt9ynEyNZoyNBuoh5PUDgys7pZ21j2UL" ], "script": "base64:BgLYKggCEgQKAgEEEgYKBAEEAQgSAwoBCBIDCgEIEgASBAoCAQQSBAoCAQQSAwoBARIAEgQKAggBEgASBAoCCAESBAoCCAESBAoCAQESAwoBARIFCgMBAQESBQoDAQgBEgQKAgEIEgQKAgEIEgQKAggIEgQKAggIEgQKAggBEgASAwoBCBIFCgMBAQESBAoCCAESBAoCAQESBAoCCAgSCwoJCAEBAgECCAQEEgYKBAgIAQgiBnNjYWxlOCIMc2NhbGU4QmlnSW50IgdzY2FsZTE4Igp6ZXJvQmlnSW50IgRiaWcwIgRiaWcxIgRiaWcyIgRiaWczIgRiaWc0IgpzbGlwcGFnZTREIgt3YXZlc1N0cmluZyIFQW11bHQiBURjb252IgNTRVAiBUVNUFRZIgpQb29sQWN0aXZlIgpQb29sUHV0RGlzIg5Qb29sTWF0Y2hlckRpcyIMUG9vbFNodXRkb3duIg5pZHhQb29sQWRkcmVzcyIJaWR4UG9vbFN0IglpZHhMUEFzSWQiCWlkeEFtQXNJZCIJaWR4UHJBc0lkIgtpZHhBbXRBc0RjbSINaWR4UHJpY2VBc0RjbSILaWR4SUFtdEFzSWQiDWlkeElQcmljZUFzSWQiD2lkeEZhY3RTdGFrQ250ciISaWR4RmFjdG9yeVJlc3RDbnRyIhBpZHhGYWN0U2xpcHBDbnRyIhFpZHhGYWN0R3d4UmV3Q250ciIKZmVlRGVmYXVsdCICdDEiB29yaWdWYWwiDW9yaWdTY2FsZU11bHQiCHQxQmlnSW50IgJmMSIDdmFsIg9yZXN1bHRTY2FsZU11bHQiDGZyb21YMThSb3VuZCIFcm91bmQiAnQyIgJmMiICdHMiA2FtdCIIcmVzU2NhbGUiCGN1clNjYWxlIgNhYnMiCWFic0JpZ0ludCICZmMiA21wayIEcG1wayICcGwiAnBoIgFoIgF0IgNwYXUiAnVhIgR0eElkIgNnYXUiAmFhIgJwYSIDYW1wIgNhZGEiBmtleUZlZSIDZmVlIgZrZXlETHAiFWtleURMcFJlZnJlc2hlZEhlaWdodCISa2V5RExwUmVmcmVzaERlbGF5IhZkTHBSZWZyZXNoRGVsYXlEZWZhdWx0Ig9kTHBSZWZyZXNoRGVsYXkiBGZjZmciBG10cGsiAnBjIgZpQW10QXMiBWlQckFzIgNtYmEiBWJBU3RyIgNhcHMiHGtleUFsbG93ZWRMcFN0YWJsZVNjcmlwdEhhc2giFmtleUZlZUNvbGxlY3RvckFkZHJlc3MiD3Rocm93T3JkZXJFcnJvciIKb3JkZXJWYWxpZCIOb3JkZXJWYWxpZEluZm8iC3NlbmRlclZhbGlkIgxtYXRjaGVyVmFsaWQiBHN0cmYiBGFkZHIiA2tleSIEaW50ZiIIdGhyb3dFcnIiA21zZyIGZm10RXJyIgNmY2EiBWluRmVlIgFAIgZvdXRGZWUiAUEiA2lncyICbXAiE2ZlZUNvbGxlY3RvckFkZHJlc3MiA2dwYyIFYW10QXMiB3ByaWNlQXMiCGlQcmljZUFzIgxwYXJzZUFzc2V0SWQiBWlucHV0Ig9hc3NldElkVG9TdHJpbmciD3BhcnNlUG9vbENvbmZpZyIKcG9vbENvbmZpZyIQcG9vbENvbmZpZ1BhcnNlZCILJHQwNzk2NTgxOTQiDmNmZ1Bvb2xBZGRyZXNzIg1jZmdQb29sU3RhdHVzIgxjZmdMcEFzc2V0SWQiEGNmZ0Ftb3VudEFzc2V0SWQiD2NmZ1ByaWNlQXNzZXRJZCIWY2ZnQW1vdW50QXNzZXREZWNpbWFscyIVY2ZnUHJpY2VBc3NldERlY2ltYWxzIhJjZmdJbkFtb3VudEFzc2VkSWQiEWNmZ0luUHJpY2VBc3NldElkIgNnZmMiDWZhY3RvcnlDb25maWciD3N0YWtpbmdDb250cmFjdCIPc2xpcGFnZUNvbnRyYWN0Igtnd3hDb250cmFjdCIMcmVzdENvbnRyYWN0IhFkYXRhUHV0QWN0aW9uSW5mbyINaW5BbXRBc3NldEFtdCIPaW5QcmljZUFzc2V0QW10IghvdXRMcEFtdCIFcHJpY2UiCnNsaXBCeVVzZXIiDHNsaXBwYWdlUmVhbCIIdHhIZWlnaHQiC3R4VGltZXN0YW1wIgxzbGlwYWdlQW1BbXQiDHNsaXBhZ2VQckFtdCIRZGF0YUdldEFjdGlvbkluZm8iDm91dEFtdEFzc2V0QW10IhBvdXRQcmljZUFzc2V0QW10IgdpbkxwQW10Ig1nZXRBY2NCYWxhbmNlIgdhc3NldElkIgRjcGJpIghwckFtdFgxOCIIYW1BbXRYMTgiBWNwYmlyIgN2YWQiAkExIgJBMiIIc2xpcHBhZ2UiBGRpZmYiBHBhc3MiAnZkIgJEMSICRDAiBHNscGciBGZhaWwiA3BjcCIKYW1Bc3NldERjbSIKcHJBc3NldERjbSIFYW1BbXQiBXByQW10IgthbXRBc0FtdFgxOCIKcHJBc0FtdFgxOCIKY2FsY1ByaWNlcyIFbHBBbXQiCGFtdEFzRGNtIgdwckFzRGNtIghwcmljZVgxOCIIbHBBbXRYMTgiDWxwUHJJbkFtQXNYMTgiDWxwUHJJblByQXNYMTgiD2NhbGN1bGF0ZVByaWNlcyIBcCIHdGFrZUZlZSIGYW1vdW50IglmZWVBbW91bnQiBGdldEQiAnhwIgN4cDAiA3hwMSIBcyIBYSIDYW5uIgt4cDBfeHAxX25fbiIFYW5uX3MiBWFubl8xIgljYWxjRE5leHQiAWQiAmRkIgNkZGQiAmRwIgRjYWxjIgNhY2MiAWkiBWROZXh0IghkRGlmZlJhdyIFZERpZmYiA2FyciINJHQwMTI2OTExMjczOSICJGwiAiRzIgUkYWNjMCIFJGYwXzEiAiRhIgIkaSIFJGYwXzIiBWZvdW5kIgNlZ28iBnR4SWQ1OCIKcG10QXNzZXRJZCIIcG10THBBbXQiC3VzZXJBZGRyZXNzIgRscElkIgRhbUlkIgRwcklkIgVhbURjbSIFcHJEY20iA3N0cyIHbHBFbWlzcyIJYW1CYWxhbmNlIgxhbUJhbGFuY2VYMTgiCXByQmFsYW5jZSIMcHJCYWxhbmNlWDE4IgtjdXJQcmljZVgxOCIIY3VyUHJpY2UiC3BtdExwQW10WDE4IgpscEVtaXNzWDE4IgtvdXRBbUFtdFgxOCILb3V0UHJBbXRYMTgiCG91dEFtQW10IghvdXRQckFtdCIFc3RhdGUiA2VwbyIHaW5BbUFtdCIGaW5BbUlkIgdpblByQW10IgZpblBySWQiBmlzRXZhbCIGZW1pdExwIgppc09uZUFzc2V0IhB2YWxpZGF0ZVNsaXBwYWdlIgZwbXRBbXQiBXBtdElkIgdhbUlkU3RyIgdwcklkU3RyIglpbkFtSWRTdHIiCWluUHJJZFN0ciIGYW10RGNtIghwcmljZURjbSIEbHBFbSIPaW5BbUFzc2V0QW10WDE4Ig9pblByQXNzZXRBbXRYMTgiDHVzZXJQcmljZVgxOCIBciIGY2hlY2tEIgtzbGlwcGFnZVgxOCIPc2xpcHBhZ2VSZWFsWDE4Ig1scEVtaXNzaW9uWDE4IgpwclZpYUFtWDE4IgphbVZpYVByWDE4IgxleHBlY3RlZEFtdHMiEWV4cEFtdEFzc2V0QW10WDE4IhNleHBQcmljZUFzc2V0QW10WDE4IgljYWxjTHBBbXQiDmNhbGNBbUFzc2V0UG10Ig5jYWxjUHJBc3NldFBtdCIMc2xpcHBhZ2VDYWxjIgllbWl0THBBbXQiBmFtRGlmZiIGcHJEaWZmIg0kdDAyMDU3ODIwOTIzIgp3cml0ZUFtQW10Igp3cml0ZVByQW10Igtjb21tb25TdGF0ZSIFZ2V0WUQiAUQiAW4iAXgiCmFQcmVjaXNpb24iAWMiAWIiA2N1ciINJHQwMjIxMTgyMjEzOCIBeSIFeU5leHQiBXlEaWZmIg0kdDAyMjQ0NTIyNDkyIgdjYWxjRExwIg1hbW91bnRCYWxhbmNlIgxwcmljZUJhbGFuY2UiCmxwRW1pc3Npb24iCnVwZGF0ZWRETHAiDmNhbGNDdXJyZW50RExwIhBhbW91bnRBc3NldERlbHRhIg9wcmljZUFzc2V0RGVsdGEiFGxwQXNzZXRFbWlzc2lvbkRlbHRhIhJhbW91bnRBc3NldEJhbGFuY2UiEXByaWNlQXNzZXRCYWxhbmNlIg9scEFzc2V0RW1pc3Npb24iCmN1cnJlbnRETHAiEnJlZnJlc2hETHBJbnRlcm5hbCIXYW1vdW50QXNzZXRCYWxhbmNlRGVsdGEiFnByaWNlQXNzZXRCYWxhbmNlRGVsdGEiB2FjdGlvbnMiEnZhbGlkYXRlVXBkYXRlZERMcCIGb2xkRExwIht2YWxpZGF0ZU1hdGNoZXJPcmRlckFsbG93ZWQiBW9yZGVyIhFhbW91bnRBc3NldEFtb3VudCIQcHJpY2VBc3NldEFtb3VudCINJHQwMjQ2OTAyNDkwMiIDZExwIg0kdDAyNTI0NDI1MzQ0Ig11bnVzZWRBY3Rpb25zIgZkTHBOZXciDGlzT3JkZXJWYWxpZCIEaW5mbyICY2ciA3BtdCICY3AiBmNhbGxlciIHYW1Bc1BtdCIHcHJBc1BtdCINY2FsY1B1dE9uZVRrbiIJcG10QW10UmF3Igt3aXRoVGFrZUZlZSINY2hlY2hFbWlzc2lvbiINJHQwMjgwMDAyODQ2MiIMYW1CYWxhbmNlT2xkIgxwckJhbGFuY2VPbGQiDSR0MDI4NDY4Mjg2NDQiC2FtQW1vdW50UmF3IgtwckFtb3VudFJhdyINJHQwMjg2NDgyODkwMiIIYW1BbW91bnQiCHByQW1vdW50IgxhbUJhbGFuY2VOZXciDHByQmFsYW5jZU5ldyIIbHBBbW91bnQiDnBvb2xQcm9wb3J0aW9uIg9hbW91bnRBc3NldFBhcnQiDnByaWNlQXNzZXRQYXJ0IglscEFtdEJvdGgiBWJvbnVzIhNnZXRPbmVUa25WMkludGVybmFsIgpvdXRBc3NldElkIgxtaW5PdXRBbW91bnQiCHBheW1lbnRzIgxvcmlnaW5DYWxsZXIiDXRyYW5zYWN0aW9uSWQiCmFtRGVjaW1hbHMiCnByRGVjaW1hbHMiCnBvb2xTdGF0dXMiDSR0MDMxMDE0MzExMjUiCHRvdGFsR2V0Igt0b3RhbEFtb3VudCINJHQwMzEzMTUzMTYyMiIFb3V0QW0iBW91dFByIghjdXJQclgxOCIFY3VyUHIiEW91dEFzc2V0SWRPcldhdmVzIhBzZW5kRmVlVG9NYXRjaGVyIgRidXJuIg0kdDAzMjQwNzMyNzU3IhBmZWVBbW91bnRGb3JDYWxjIhBvdXRJbkFtb3VudEFzc2V0Ig0kdDAzMjc2MDMyODY4IhFyZWZyZXNoRExwQWN0aW9ucyIRaXNVcGRhdGVkRExwVmFsaWQiAW0iByRtYXRjaDAiAnBtIgJwZCIJaXNNYW5hZ2VyIgJwayICbW0iBGdldFkiCWlzUmV2ZXJzZSITcG9vbEFtb3VudEluQmFsYW5jZSINJHQwMzQzMTUzNDMzNSINJHQwMzQ2NjYzNDcxMyINY2xlYW5BbW91bnRJbiINJHQwMzQ5MzQzNTM1OCIIYXNzZXRPdXQiAmR5Igt0b3RhbEdldFJhdyIFbmV3WHAiBG5ld0QiDGFtb3VudE91dE1pbiIJYWRkcmVzc1RvIgtzd2FwQ29udGFjdCIGY2hlY2tzIgdhc3NldEluIg0kdDAzNjgyMTM3MjE1IghjaGVja01pbiIXcGVuZGluZ01hbmFnZXJQdWJsaWNLZXkiAmNtIgNocG0iA2NwbSIEc2xpcCIJYXV0b1N0YWtlIgdmYWN0Q2ZnIgtzdGFraW5nQ250ciIIc2xpcENudHIiCmFtQXNzZXRQbXQiCnByQXNzZXRQbXQiAWUiCWxwQXNzZXRJZCICZWwiBmxlZ2FjeSICc2EiAnNwIghscFRybnNmciICc3MiDSR0MDQyMDc2NDIyMTgiBWNoZWNrIhRscEFzc2V0RW1pc3Npb25BZnRlciIgaXNQb29sT25lVG9rZW5PcGVyYXRpb25zRGlzYWJsZWQiDWlzUHV0RGlzYWJsZWQiDSR0MDQzODU5NDQwMTciB2VzdGltTFAiDSR0MDQ0ODMyNDUxODEiFHBheW1lbnRJbkFtb3VudEFzc2V0Ig0kdDA0NTE4NDQ1MjkyIgdtYXhTbHBnIgZlc3RQdXQiDSR0MDQ2MzIyNDYzODciCW91dEFtdEFtdCINJHQwNDc1NjA0NzY0MiINaXNHZXREaXNhYmxlZCINJHQwNDgyNjA0ODQxNSIYbGFzdFJlZnJlc2hlZEJsb2NrSGVpZ2h0Ih1jaGVja0xhc3RSZWZyZXNoZWRCbG9ja0hlaWdodCINJHQwNDg5Mzk0OTAwMyIQZExwVXBkYXRlQWN0aW9ucyINbHBBc3NldEFtb3VudCIFaW5kZXgiBG5ld1kiDSR0MDUwMDEzNTAwNjgiDSR0MDUwNDQzNTA1NTgiDnN1bU9mR2V0QXNzZXRzIhJub0xlc3NUaGVuQW10QXNzZXQiFG5vTGVzc1RoZW5QcmljZUFzc2V0IhRidXJuTFBBc3NldE9uRmFjdG9yeSINJHQwNTE3MjQ1MTgwNSINY2hlY2tQYXltZW50cyIKZmFjdG9yeUNmZyIHc3Rha2luZyIKdW5zdGFrZUludiIBdiIFYnVybkEiDSR0MDUyODMyNTI5MTMiDXVuc3Rha2VBbW91bnQiFW5vTGVzc1RoZW5BbW91bnRBc3NldCIDcmVzIgxjaGVja0Ftb3VudHMiDSR0MDU0MTY0NTQyNDUiDSR0MDU1MTQwNTUzMjgiEHBheW1lbnRBbW91bnRSYXciDnBheW1lbnRBc3NldElkIg0kdDA1NTQ1NjU1NTU5Ig0kdDA1NTcwNzU1ODExIghhbXRBc1N0ciIHcHJBc1N0ciIBayICcHIiDHJlc1NjYWxlTXVsdCIHdXNyQWRkciIHcG10QXNJZCICdHgiBnZlcmlmeSIPdGFyZ2V0UHVibGljS2V5IgptYXRjaGVyUHViIg0kdDA1ODYwMzU4NjcyIgduZXdIYXNoIgthbGxvd2VkSGFzaCILY3VycmVudEhhc2iCAQABYQCAwtcvAAFiCQC2AgEAgMLXLwABYwkAtgIBAICAkLu61q3wDQABZAkAtgIBAAAAAWUJALYCAQAAAAFmCQC2AgEAAQABZwkAtgIBAAIAAWgJALYCAQADAAFpCQC2AgEABAABagkAtgIBCQBlAgUBYQkAaQIJAGgCBQFhAAEFAWEAAWsCBVdBVkVTAAFsAgMxMDAAAW0CATEAAW4CAl9fAAFvAgAAAXAAAQABcQACAAFyAAMAAXMABAABdAABAAF1AAIAAXYAAwABdwAEAAF4AAUAAXkABgABegAHAAFBAAgAAUIACQABQwABAAFEAAYAAUUABwABRgAKAAFHCQBrAwAKBQFhAJBOAQFIAgFJAUoJALwCAwkAtgIBBQFJBQFjCQC2AgEFAUoBAUsCAUkBSgkAvAIDBQFJBQFjBQFKAQFMAgFNAU4JAKADAQkAvAIDBQFNCQC2AgEFAU4FAWMBAU8DAU0BTgFQCQCgAwEJAL0CBAUBTQkAtgIBBQFOBQFjBQFQAQFRAgFJAUoJALwCAwUBSQUBYwkAtgIBBQFKAQFSAgFNAU4JALwCAwUBTQkAtgIBBQFOBQFjAQFTAwFUAVUBVgkAawMFAVQFAVUFAVYBAVcBAU0DCQC/AgIFAWQFAU0JAL4CAQUBTQUBTQEBWAEBTQMJAL8CAgUBZAUBTQkAvgIBBQFNBQFNAQFZAAITJXNfX2ZhY3RvcnlDb250cmFjdAEBWgACFCVzX19tYW5hZ2VyUHVibGljS2V5AQJhYQACGyVzX19wZW5kaW5nTWFuYWdlclB1YmxpY0tleQECYWIAAhElcyVzX19wcmljZV9fbGFzdAECYWMCAmFkAmFlCQC5CQIJAMwIAgIYJXMlcyVkJWRfX3ByaWNlX19oaXN0b3J5CQDMCAIJAKQDAQUCYWQJAMwIAgkApAMBBQJhZQUDbmlsBQFuAQJhZgICYWcCYWgJAKwCAgkArAICCQCsAgICCyVzJXMlc19fUF9fBQJhZwICX18FAmFoAQJhaQICYWcCYWgJAKwCAgkArAICCQCsAgICCyVzJXMlc19fR19fBQJhZwICX18FAmFoAQJhagACDyVzX19hbW91bnRBc3NldAECYWsAAg4lc19fcHJpY2VBc3NldAECYWwAAgclc19fYW1wAQJhbQACDSVzX19hZGRvbkFkZHIAAmFuAgclc19fZmVlAAJhbwkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQJhbgUBRwACYXAJALkJAgkAzAgCAgIlcwkAzAgCAgNkTHAFA25pbAUBbgACYXEJALkJAgkAzAgCAgIlcwkAzAgCAhJkTHBSZWZyZXNoZWRIZWlnaHQFA25pbAUBbgACYXIJALkJAgkAzAgCAgIlcwkAzAgCAg9yZWZyZXNoRExwRGVsYXkFA25pbAUBbgACYXMAHgACYXQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUCYXIFAmFzAQJhdQACESVzX19mYWN0b3J5Q29uZmlnAQJhdgACGCVzJXNfX21hdGNoZXJfX3B1YmxpY0tleQECYXcCAmF4AmF5CQCsAgIJAKwCAgkArAICCQCsAgICCCVkJWQlc19fBQJheAICX18FAmF5AghfX2NvbmZpZwECYXoBAmFBCQCsAgICKCVzJXMlc19fbWFwcGluZ3NfX2Jhc2VBc3NldDJpbnRlcm5hbElkX18FAmFBAQJhQgACDCVzX19zaHV0ZG93bgECYUMAAh0lc19fYWxsb3dlZExwU3RhYmxlU2NyaXB0SGFzaAECYUQAAhclc19fZmVlQ29sbGVjdG9yQWRkcmVzcwECYUUEAmFGAmFHAmFIAmFJCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICJG9yZGVyIHZhbGlkYXRpb24gZmFpbGVkOiBvcmRlclZhbGlkPQkApQMBBQJhRgICICgFAmFHAgEpAg0gc2VuZGVyVmFsaWQ9CQClAwEFAmFIAg4gbWF0Y2hlclZhbGlkPQkApQMBBQJhSQECYUoCAmFLAmFMCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUCYUsFAmFMCQC5CQIJAMwIAgIKbWFuZGF0b3J5IAkAzAgCCQClCAEFAmFLCQDMCAICAS4JAMwIAgUCYUwJAMwIAgIMIG5vdCBkZWZpbmVkBQNuaWwCAAECYU0CAmFLAmFMCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUCYUsFAmFMCQC5CQIJAMwIAgIKbWFuZGF0b3J5IAkAzAgCCQClCAEFAmFLCQDMCAICAS4JAMwIAgUCYUwJAMwIAgIMIG5vdCBkZWZpbmVkBQNuaWwCAAECYU4BAmFPCQACAQkAuQkCCQDMCAICD2xwX3N0YWJsZS5yaWRlOgkAzAgCBQJhTwUDbmlsAgEgAQJhUAECYU8JALkJAgkAzAgCAg9scF9zdGFibGUucmlkZToJAMwIAgUCYU8FA25pbAIBIAACYVEJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQJhSgIFBHRoaXMJAQFZAAACYVIKAAJhUwkA/AcEBQJhUQIQZ2V0SW5GZWVSRUFET05MWQkAzAgCCQClCAEFBHRoaXMFA25pbAUDbmlsAwkAAQIFAmFTAgNJbnQFAmFTCQACAQkArAICCQADAQUCYVMCGCBjb3VsZG4ndCBiZSBjYXN0IHRvIEludAACYVQKAAJhUwkA/AcEBQJhUQIRZ2V0T3V0RmVlUkVBRE9OTFkJAMwIAgkApQgBBQR0aGlzBQNuaWwFA25pbAMJAAECBQJhUwIDSW50BQJhUwkAAgEJAKwCAgkAAwEFAmFTAhggY291bGRuJ3QgYmUgY2FzdCB0byBJbnQAAmFVCQECYUoCBQR0aGlzCQECYWwAAQJhVgAJAQt2YWx1ZU9yRWxzZQIJAJsIAgUCYVEJAQJhQgAHAQJhVwAJANkEAQkBAmFKAgUCYVEJAQJhdgAAAmFYCQERQGV4dHJOYXRpdmUoMTA2MikBCQECYUoCBQJhUQkBAmFEAAECYVkABAJhWgkBAmFKAgUEdGhpcwkBAmFqAAQCYmEJAQJhSgIFBHRoaXMJAQJhawAEAmJiCQECYU0CBQJhUQkBAmF6AQUCYmEEAmF4CQECYU0CBQJhUQkBAmF6AQUCYVoJALUJAgkBAmFKAgUCYVEJAQJhdwIJAKQDAQUCYXgJAKQDAQUCYmIFAW4BAmJjAQJiZAMJAAACBQJiZAUBawUEdW5pdAkA2QQBBQJiZAECYmUBAmJkAwkAAAIFAmJkBQR1bml0BQFrCQDYBAEJAQV2YWx1ZQEFAmJkAQJiZgECYmcJAJsKCQkBEUBleHRyTmF0aXZlKDEwNjIpAQkAkQMCBQJiZwUBdAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmJnBQF1CQDZBAEJAJEDAgUCYmcFAXYJAQJiYwEJAJEDAgUCYmcFAXcJAQJiYwEJAJEDAgUCYmcFAXgJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJiZwUBeQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmJnBQF6CQDZBAEJAJEDAgUCYmcFAUEJANkEAQkAkQMCBQJiZwUBQgACYmgJAQJiZgEJAQJhWQAAAmJpBQJiaAACYmoIBQJiaQJfMQACYmsIBQJiaQJfMgACYmwIBQJiaQJfMwACYm0IBQJiaQJfNAACYm4IBQJiaQJfNQACYm8IBQJiaQJfNgACYnAIBQJiaQJfNwACYnEIBQJiaQJfOAACYnIIBQJiaQJfOQECYnMACQC1CQIJAQJhSgIFAmFRCQECYXUABQFuAAJidAkBAmJzAAACYnUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQCRAwIFAmJ0BQFDAiBJbnZhbGlkIHN0YWtpbmcgY29udHJhY3QgYWRkcmVzcwACYnYJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQCRAwIFAmJ0BQFFAiBJbnZhbGlkIHNsaXBhZ2UgY29udHJhY3QgYWRkcmVzcwACYncJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQCRAwIFAmJ0BQFGAhxJbnZhbGlkIGd3eCBjb250cmFjdCBhZGRyZXNzAAJieAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJAJEDAgUCYnQFAUQCHEludmFsaWQgZ3d4IGNvbnRyYWN0IGFkZHJlc3MBAmJ5CgJiegJiQQJiQgJiQwJiRAJiRQJiRgJiRwJiSAJiSQkAuQkCCQDMCAICFCVkJWQlZCVkJWQlZCVkJWQlZCVkCQDMCAIJAKQDAQUCYnoJAMwIAgkApAMBBQJiQQkAzAgCCQCkAwEFAmJCCQDMCAIJAKQDAQUCYkMJAMwIAgkApAMBBQJiRAkAzAgCCQCkAwEFAmJFCQDMCAIJAKQDAQUCYkYJAMwIAgkApAMBBQJiRwkAzAgCCQCkAwEFAmJICQDMCAIJAKQDAQUCYkkFA25pbAUBbgECYkoGAmJLAmJMAmJNAmJDAmJGAmJHCQC5CQIJAMwIAgIMJWQlZCVkJWQlZCVkCQDMCAIJAKQDAQUCYksJAMwIAgkApAMBBQJiTAkAzAgCCQCkAwEFAmJNCQDMCAIJAKQDAQUCYkMJAMwIAgkApAMBBQJiRgkAzAgCCQCkAwEFAmJHBQNuaWwFAW4BAmJOAQJiTwMJAAACBQJiTwIFV0FWRVMICQDvBwEFBHRoaXMJYXZhaWxhYmxlCQDwBwIFBHRoaXMJANkEAQUCYk8BAmJQAgJiUQJiUgkAvAIDBQJiUQUBYwUCYlIBAmJTAwJiUQJiUgFQCQC9AgQFAmJRBQFjBQJiUgUBUAECYlQDAmJVAmJWAmJXBAJiWAkAvAIDCQC4AgIFAmJVBQJiVgUBYgUCYlYEAmJZCQC/AgIJALgCAgUCYlcJAQFXAQUCYlgFAWQDCQEBIQEFAmJZCQACAQkArAICAgpCaWcgc2xwZzogCQCmAwEFAmJYCQCUCgIFAmJZCQCZAwEJAMwIAgUCYlUJAMwIAgUCYlYFA25pbAECYloDAmNhAmNiAmNjBAJiWAkAvAIDBQJjYgUBYgUCY2EEAmNkCQC/AgIFAmNjBQJiWAMDBQJjZAYJAL8CAgUCY2IFAmNhCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkApgMBBQJjYgIBIAkApgMBBQJjYQIBIAkApgMBBQJiWAIBIAkApgMBBQJjYwUCY2QBAmNlBAJjZgJjZwJjaAJjaQQCY2oJAQFIAgUCY2gFAmNmBAJjawkBAUgCBQJjaQUCY2cJAQJiUAIFAmNrBQJjagECY2wDAmNoAmNpAmNtBAJjbgUCYm8EAmNvBQJicAQCY3AJAQJjZQQFAmNuBQJjbwUCY2gFAmNpBAJiUgkBAUgCBQJjaAUCY24EAmJRCQEBSAIFAmNpBQJjbwQCY3EJAQFIAgUCY20FAWEEAmNyCQECYlACBQJiUgUCY3EEAmNzCQECYlACBQJiUQUCY3EJAMwIAgUCY3AJAMwIAgUCY3IJAMwIAgUCY3MFA25pbAECY3QDAmNoAmNpAmNtBAJjdQkBAmNsAwUCY2gFAmNpBQJjbQkAzAgCCQEBTAIJAJEDAgUCY3UAAAUBYQkAzAgCCQEBTAIJAJEDAgUCY3UAAQUBYQkAzAgCCQEBTAIJAJEDAgUCY3UAAgUBYQUDbmlsAQJjdgICY3cCYW8EAmN4AwkAAAIFAmFvAAAAAAkAawMFAmN3BQJhbwUBYQkAlAoCCQBlAgUCY3cFAmN4BQJjeAECY3kBAmN6BAJjQQkAkQMCBQJjegAABAJjQgkAkQMCBQJjegABBAJjQwkAtwICBQJjQQUCY0IDCQAAAgUCY0MFAWUFAWUEAmNECQENcGFyc2VJbnRWYWx1ZQEFAmFVBAJjRQkAaAIFAmNEAAIEAmN1CQC8AgMFAmNBBQJjQgUBZgQCY0YJALwCAwUCY3UFAWkFAWYEAmNHCQC8AgMJALYCAQUCY0UFAmNDBQFmBAJjSAkAtgIBCQBlAgUCY0UAAQoBAmNJAQJjSgQCY0sJALwCAwUCY0oFAmNKBQFmBAJjTAkAvAIDBQJjSwUCY0oFAWYEAmNNCQC8AgMFAmNMBQFmBQJjRgkAvAIDCQC3AgIFAmNHCQC8AgMFAmNNBQFnBQFmBQJjSgkAtwICCQC8AgMFAmNIBQJjSgUBZgkAvAIDBQFoBQJjTQUBZgoBAmNOAgJjTwJjUAMIBQJjTwJfMgUCY08EAmNKCAUCY08CXzEEAmNRCQECY0kBBQJjSgQCY1IJALgCAgUCY1EJAQV2YWx1ZQEFAmNKBAJjUwMJAL8CAgUBZQUCY1IJAL4CAQUCY1IFAmNSAwkAwAICBQFmBQJjUwkAlAoCBQJjUQYJAJQKAgUCY1EHBAJjVAkAzAgCAAAJAMwIAgABCQDMCAIAAgkAzAgCAAMJAMwIAgAECQDMCAIABQkAzAgCAAYJAMwIAgAHCQDMCAIACAkAzAgCAAkJAMwIAgAKCQDMCAIACwkAzAgCAAwJAMwIAgANCQDMCAIADgUDbmlsBAJjVQoAAmNWBQJjVAoAAmNXCQCQAwEFAmNWCgACY1gJAJQKAgUCY0MHCgECY1kCAmNaAmRhAwkAZwIFAmRhBQJjVwUCY1oJAQJjTgIFAmNaCQCRAwIFAmNWBQJkYQoBAmRiAgJjWgJkYQMJAGcCBQJkYQUCY1cFAmNaCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTUJAQJkYgIJAQJjWQIJAQJjWQIJAQJjWQIJAQJjWQIJAQJjWQIJAQJjWQIJAQJjWQIJAQJjWQIJAQJjWQIJAQJjWQIJAQJjWQIJAQJjWQIJAQJjWQIJAQJjWQIJAQJjWQIFAmNYAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8EAmNKCAUCY1UCXzEEAmRjCAUCY1UCXzIDBQJkYwUCY0oJAAIBCQCsAgICGUQgY2FsY3VsYXRpb24gZXJyb3IsIEQgPSAJAKYDAQUCY0oBAmRkBAJkZQJkZgJkZwJkaAQCZGkFAmJsBAJkagkA2AQBCQEFdmFsdWUBBQJibQQCZGsJANgEAQkBBXZhbHVlAQUCYm4EAmRsBQJibwQCZG0FAmJwBAJkbgkApAMBBQJiawQCZG8ICQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQUCZGkCC1dyb25nIExQIGlkCHF1YW50aXR5AwkBAiE9AgkA2AQBBQJkaQUCZGYJAAIBAg9Xcm9uZyBwbXQgYXNzZXQEAmRwCQECYk4BBQJkagQCZHEJAQFIAgUCZHAFAmRsBAJkcgkBAmJOAQUCZGsEAmRzCQEBSAIFAmRyBQJkbQQCZHQJAQJiUAIFAmRzBQJkcQQCZHUJAQFMAgUCZHQFAWEEAmR2CQEBSAIFAmRnBQFhBAJkdwkBAUgCBQJkbwUBYQQCZHgJALwCAwUCZHEFAmR2BQJkdwQCZHkJALwCAwUCZHMFAmR2BQJkdwQCZHoJAQFPAwUCZHgFAmRsBQVGTE9PUgQCZEEJAQFPAwUCZHkFAmRtBQVGTE9PUgQCZEIDCQAAAgUCZGUCAAUDbmlsCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFAmRoBQJkegMJAAACBQJkagIFV0FWRVMFBHVuaXQJANkEAQUCZGoJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUCZGgFAmRBAwkAAAIFAmRrAgVXQVZFUwUEdW5pdAkA2QQBBQJkawkAzAgCCQELU3RyaW5nRW50cnkCCQECYWkCCQClCAEFAmRoBQJkZQkBAmJKBgUCZHoFAmRBBQJkZwUCZHUFBmhlaWdodAgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAMwIAgkBDEludGVnZXJFbnRyeQIJAQJhYgAFAmR1CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQECYWMCBQZoZWlnaHQIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQJkdQUDbmlsCQCcCgoFAmR6BQJkQQUCZGoFAmRrBQJkcAUCZHIFAmRvBQJkdAUCZG4FAmRCAQJkQw0CZGUCYlcCZEQCZEUCZEYCZEcCZGgCZEgCZEkCZEoCZEsCZEwCZE0EAmRpBQJibAQCZE4JANgEAQkBBXZhbHVlAQUCYm0EAmRPCQDYBAEJAQV2YWx1ZQEFAmJuBAJkUAUCYnEEAmRRBQJicgQCZFIFAmJvBAJkUwUCYnAEAmRuCQCkAwEFAmJrBAJkVAgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkA7AcBBQJkaQIIV3IgbHAgYXMIcXVhbnRpdHkEAmRwAwUCZEgJAQJiTgEFAmROAwMFAmRKCQAAAgUCZE0FAmROBwkAZQIJAQJiTgEFAmROBQJkTAMFAmRKCQECYk4BBQJkTgkAZQIJAQJiTgEFAmROBQJkRAQCZHIDBQJkSAkBAmJOAQUCZE8DAwUCZEoJAAACBQJkTQUCZE8HCQBlAgkBAmJOAQUCZE8FAmRMAwUCZEoJAQJiTgEFAmRPCQBlAgkBAmJOAQUCZE8FAmRGBAJkVQkBAUgCBQJkRAUCZFIEAmRWCQEBSAIFAmRGBQJkUwQCZFcJAQJiUAIFAmRWBQJkVQQCZHEJAQFIAgUCZHAFAmRSBAJkcwkBAUgCBQJkcgUCZFMEAmNiCQECY3kBCQDMCAIFAmRxCQDMCAIFAmRzBQNuaWwEAmRYAwkAAAIFAmRUAAAEAmNhCQECY3kBCQDMCAIJALcCAgUCZHEFAmRVCQDMCAIJALcCAgUCZHMFAmRWBQNuaWwEAmRZAwkAvwICBQJjYQUCY2IGCQACAQIcRDEgc2hvdWxkIGJlIGdyZWF0ZXIgdGhhbiBEMAMJAAACBQJkWQUCZFkEAmR0BQFkBAJkWgUBZAQCY3EFAmNhCQCXCgUJAQFMAgUCY3EFAWEJAQFMAgUCZFUFAmRSCQEBTAIFAmRWBQJkUwkBAmJQAgkAtwICBQJkcwUCZFYJALcCAgUCZHEFAmRVBQJkWgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgQCZHQJAQJiUAIFAmRzBQJkcQQCZWEJALwCAwkBAVcBCQC4AgIFAmR0BQJkVwUBYwUCZHQEAmRaCQEBSAIFAmJXBQFhAwMDBQJkSwkBAiE9AgUCZHQFAWQHCQC/AgIFAmVhBQJkWgcJAAIBCQCsAgIJAKwCAgkArAICAg9QcmljZSBzbGlwcGFnZSAJAKYDAQUCZWECAyA+IAkApgMBBQJkWgQCZWIJAQFIAgUCZFQFAWEEAmVjCQC9AgQFAmRVCQECYlMDBQJkcwUCZHEFB0NFSUxJTkcFAWMFB0NFSUxJTkcEAmVkCQC9AgQFAmRWBQFjCQECYlMDBQJkcwUCZHEFBUZMT09SBQdDRUlMSU5HBAJlZQMJAL8CAgUCZWMFAmRWCQCUCgIFAmVkBQJkVgkAlAoCBQJkVQUCZWMEAmVmCAUCZWUCXzEEAmVnCAUCZWUCXzIEAmNhCQECY3kBCQDMCAIJALcCAgUCZHEFAmVmCQDMCAIJALcCAgUCZHMFAmVnBQNuaWwEAmRZAwkAvwICBQJjYQUCY2IGCQACAQIcRDEgc2hvdWxkIGJlIGdyZWF0ZXIgdGhhbiBEMAMJAAACBQJkWQUCZFkEAmNxCQC8AgMFAmViCQC4AgIFAmNhBQJjYgUCY2IJAJcKBQkBAU8DBQJjcQUBYQUFRkxPT1IJAQFPAwUCZWYFAmRSBQdDRUlMSU5HCQEBTwMFAmVnBQJkUwUHQ0VJTElORwUCZHQFAmRaCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBAJlaAgFAmRYAl8xBAJlaQgFAmRYAl8yBAJlaggFAmRYAl8zBAJkdQkBAUwCCAUCZFgCXzQFAWEEAmVrCQEBTAIIBQJkWAJfNQUBYQMJAGcCAAAFAmVoCQACAQIHTFAgPD0gMAQCZWwDCQEBIQEFAmRJAAAFAmVoBAJlbQkAZQIFAmREBQJlaQQCZW4JAGUCBQJkRgUCZWoEAmVvAwMFAmRKCQAAAgUCZE0FAmROBwkAlAoCBQJkTAAAAwMFAmRKCQAAAgUCZE0FAmRPBwkAlAoCAAAFAmRMCQCUCgIFAmVpBQJlagQCZXAIBQJlbwJfMQQCZXEIBQJlbwJfMgQCZXIJAMwIAgkBDEludGVnZXJFbnRyeQIJAQJhYgAFAmR1CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQECYWMCBQZoZWlnaHQIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQJkdQkAzAgCCQELU3RyaW5nRW50cnkCCQECYWYCBQJkaAUCZGUJAQJieQoFAmVwBQJlcQUCZWwFAmR1BQJiVwUCZWsFBmhlaWdodAgFCWxhc3RCbG9jawl0aW1lc3RhbXAFAmVtBQJlbgUDbmlsCQCfCg0FAmVoBQJlbAUCZHUFAmRwBQJkcgUCZFQFAmRpBQJkbgUCZXIFAmVtBQJlbgUCZEUFAmRHAQJlcwMCY3oCY1ACZXQEAmV1BQFnBAJldgkAkQMCBQJjegMJAAACBQJjUAAAAAEAAAQCZXcJAKcDAQUBbAQCY0QJALkCAgkApwMBBQJhVQUCZXcEAmNDBQJldgQCY0UJALkCAgUCY0QFAmV1BAJleAkAugICCQC5AgIJALkCAgkAugICCQC5AgIFAmV0BQJldAkAuQICBQJldgUCZXUFAmV0BQJldwkAuQICBQJjRQUCZXUEAmV5CQC4AgIJALcCAgUCY0MJALoCAgkAuQICBQJldAUCZXcFAmNFBQJldAoBAmNOAgJjTwJlegQCZUEFAmNPBAJlQggFAmVBAl8xBAJkYwgFAmVBAl8yAwkBAiE9AgUCZGMFBHVuaXQFAmNPBAJlQwkAugICCQC3AgIJALkCAgUCZUIFAmVCBQJleAkAtwICCQC5AgIFAWcFAmVCBQJleQQCZUQJAQFYAQkAuAICBQJlQwkBBXZhbHVlAQUCZUIDCQDAAgIFAWYFAmVECQCUCgIFAmVDBQJlegkAlAoCBQJlQwUEdW5pdAQCY1QJAMwIAgAACQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUJAMwIAgAGCQDMCAIABwkAzAgCAAgJAMwIAgAJCQDMCAIACgkAzAgCAAsJAMwIAgAMCQDMCAIADQkAzAgCAA4FA25pbAQCZUUKAAJjVgUCY1QKAAJjVwkAkAMBBQJjVgoAAmNYCQCUCgIFAmV0BQR1bml0CgECY1kCAmNaAmRhAwkAZwIFAmRhBQJjVwUCY1oJAQJjTgIFAmNaCQCRAwIFAmNWBQJkYQoBAmRiAgJjWgJkYQMJAGcCBQJkYQUCY1cFAmNaCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTUJAQJkYgIJAQJjWQIJAQJjWQIJAQJjWQIJAQJjWQIJAQJjWQIJAQJjWQIJAQJjWQIJAQJjWQIJAQJjWQIJAQJjWQIJAQJjWQIJAQJjWQIJAQJjWQIJAQJjWQIJAQJjWQIFAmNYAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8EAmVCCAUCZUUCXzEEAmRjCAUCZUUCXzIDCQECIT0CBQJkYwUEdW5pdAUCZUIJAAIBCQCsAgICGVkgY2FsY3VsYXRpb24gZXJyb3IsIFkgPSAJAKYDAQUCZUIBAmVGAwJlRwJlSAJlSQQCZUoJALwCAwkBAmN5AQkAzAgCCQEBSwIFAmVHCQC2AgEFAmJvCQDMCAIJAQFLAgUCZUgJALYCAQUCYnAFA25pbAUBYwUCZUkDCQAAAgUCZUkFAWUFAWUFAmVKAQJlSwMCZUwCZU0CZU4EAmVPCQC4AgIJALYCAQkBAmJOAQkBAmJlAQUCYm0FAmVMBAJlUAkAuAICCQC2AgEJAQJiTgEJAQJiZQEFAmJuBQJlTQQCZVEJALgCAgkAtgIBCAkBBXZhbHVlAQkA7AcBBQJibAhxdWFudGl0eQUCZU4EAmVSCQECZUYDBQJlTwUCZVAFAmVRBQJlUgECZVMDAmVUAmVVAmVOBAJlTwkAZAIJAQJiTgEJAQJiZQEFAmJtBQJlVAQCZVAJAGQCCQECYk4BCQECYmUBBQJibgUCZVUEAmVRCQBkAggJAQV2YWx1ZQEJAOwHAQUCYmwIcXVhbnRpdHkFAmVOBAJlSgkBAmVGAwkAtgIBBQJlTwkAtgIBBQJlUAkAtgIBBQJlUQQCZVYJAMwIAgkBDEludGVnZXJFbnRyeQIFAmFxBQZoZWlnaHQJAMwIAgkBC1N0cmluZ0VudHJ5AgUCYXAJAKYDAQUCZUoFA25pbAkAlAoCBQJlVgUCZUoBAmVXAgJlWAJlSgMJAMACAgUCZUoFAmVYBgkBAmFOAQIidXBkYXRlZCBETHAgbG93ZXIgdGhhbiBjdXJyZW50IERMcAECZVkBAmVaBAJlTwkBAmJOAQkBAmJlAQUCYm0EAmVQCQECYk4BCQECYmUBBQJibgQCZmEIBQJlWgZhbW91bnQEAmZiCQBuBAgFAmVaBmFtb3VudAgFAmVaBXByaWNlBQFhBQVGTE9PUgQCZmMDCQAAAggFAmVaCW9yZGVyVHlwZQUDQnV5CQCUCgIFAmZhCQEBLQEFAmZiCQCUCgIJAQEtAQUCZmEFAmZiBAJlVAgFAmZjAl8xBAJlVQgFAmZjAl8yAwMDCQECYVYABgkAAAIFAmJrBQFyBgkAAAIFAmJrBQFzCQACAQINQWRtaW4gYmxvY2tlZAMDCQECIT0CCAgFAmVaCWFzc2V0UGFpcgthbW91bnRBc3NldAUCYm0GCQECIT0CCAgFAmVaCWFzc2V0UGFpcgpwcmljZUFzc2V0BQJibgkAAgECCVdyIGFzc2V0cwQCZmQJAKcDAQkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzBQJhcAIBMAQCZmUJAQJlUwMFAmVUBQJlVQAABAJmZggFAmZlAl8xBAJmZwgFAmZlAl8yBAJmaAkAwAICBQJmZwUCZmQEAmZpCQC5CQIJAMwIAgIEZExwPQkAzAgCCQCmAwEFAmZkCQDMCAICCCBkTHBOZXc9CQDMCAIJAKYDAQUCZmcJAMwIAgIUIGFtb3VudEFzc2V0QmFsYW5jZT0JAMwIAgkApAMBBQJlTwkAzAgCAhMgcHJpY2VBc3NldEJhbGFuY2U9CQDMCAIJAKQDAQUCZVAJAMwIAgIZIGFtb3VudEFzc2V0QmFsYW5jZURlbHRhPQkAzAgCCQCkAwEFAmVUCQDMCAICGCBwcmljZUFzc2V0QmFsYW5jZURlbHRhPQkAzAgCCQCkAwEFAmVVCQDMCAICCCBoZWlnaHQ9CQDMCAIJAKQDAQUGaGVpZ2h0BQNuaWwCAAkAlAoCBQJmaAUCZmkBAmZqAQJjUAMJAQIhPQIJAJADAQgFAmNQCHBheW1lbnRzAAEJAAIBAgoxIHBtbnQgZXhwBAJmawkBBXZhbHVlAQkAkQMCCAUCY1AIcGF5bWVudHMAAAQCZGYJAQV2YWx1ZQEIBQJmawdhc3NldElkBAJkTAgFAmZrBmFtb3VudAQCZFgJAQJkZAQJANgEAQgFAmNQDXRyYW5zYWN0aW9uSWQJANgEAQUCZGYFAmRMCAUCY1AGY2FsbGVyBAJkeggFAmRYAl8xBAJkQQgFAmRYAl8yBAJkbgkBDXBhcnNlSW50VmFsdWUBCAUCZFgCXzkEAmRCCAUCZFgDXzEwAwMJAQJhVgAGCQAAAgUCZG4FAXMJAAIBCQCsAgICD0FkbWluIGJsb2NrZWQ6IAkApAMBBQJkbgkAlwoFBQJkegUCZEEFAmRMBQJkZgUCZEIBAmZsCgJmbQJhaAJmbgJmbwJiVwJkSQJkSgJkSwJkTAJkTQQCZFgJAQJkQw0FAmFoBQJiVwgJAQV2YWx1ZQEFAmZuBmFtb3VudAgJAQV2YWx1ZQEFAmZuB2Fzc2V0SWQICQEFdmFsdWUBBQJmbwZhbW91bnQICQEFdmFsdWUBBQJmbwdhc3NldElkBQJmbQkAAAIFAmFoAgAFAmRJBQJkSgUCZEsFAmRMBQJkTQQCZG4JAQ1wYXJzZUludFZhbHVlAQgFAmRYAl84AwMDCQECYVYABgkAAAIFAmRuBQFxBgkAAAIFAmRuBQFzCQACAQkArAICAghCbG9ja2VkOgkApAMBBQJkbgUCZFgBAmZwBQJmcQJkZgJkaAJhaAJmcgQCZGoJANgEAQkBBXZhbHVlAQUCYm0EAmRrCQDYBAEJAQV2YWx1ZQEFAmJuBAJkaQUCYmwEAmRSBQJibwQCZFMFAmJwBAJlUQkAtgIBCAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDsBwEFAmRpAhBpbnZhbGlkIGxwIGFzc2V0CHF1YW50aXR5BAJmcwMJAL8CAgUCZVEFAWUGCQACAQIiaW5pdGlhbCBkZXBvc2l0IHJlcXVpcmVzIGFsbCBjb2lucwMJAAACBQJmcwUCZnMEAmRwCQECYk4BBQJkagQCZHIJAQJiTgEFAmRrBAJmdAMJAAACBQJhaAIACQCUCgIFAmRwBQJkcgMJAAACBQJkZgUCZGoDCQBmAgUCZnEFAmRwCQACAQIWaW52YWxpZCBwYXltZW50IGFtb3VudAkAlAoCCQBlAgUCZHAFAmZxBQJkcgMJAAACBQJkZgUCZGsDCQBmAgUCZnEFAmRyCQACAQIWaW52YWxpZCBwYXltZW50IGFtb3VudAkAlAoCBQJkcAkAZQIFAmRyBQJmcQkAAgECEHdyb25nIHBtdEFzc2V0SWQEAmZ1CAUCZnQCXzEEAmZ2CAUCZnQCXzIEAmZ3AwkAAAIFAmRmBQJkagkAlAoCBQJmcQAAAwkAAAIFAmRmBQJkawkAlAoCAAAFAmZxCQACAQIPaW52YWxpZCBwYXltZW50BAJmeAgFAmZ3Al8xBAJmeQgFAmZ3Al8yBAJmegMFAmZyCQCVCgMICQECY3YCBQJmeAUCYVICXzEICQECY3YCBQJmeQUCYVICXzEICQECY3YCBQJmcQUCYVICXzIJAJUKAwUCZngFAmZ5AAAEAmZBCAUCZnoCXzEEAmZCCAUCZnoCXzIEAmN4CAUCZnoCXzMEAmZDCQBkAgUCZnUFAmZBBAJmRAkAZAIFAmZ2BQJmQgQCY2IJAQJjeQEJAMwIAgkBAUgCBQJmdQUCYm8JAMwIAgkBAUgCBQJmdgUCYnAFA25pbAQCY2EJAQJjeQEJAMwIAgkBAUgCBQJmQwUCYm8JAMwIAgkBAUgCBQJmRAUCYnAFA25pbAQCZFkDCQC/AgIFAmNhBQJjYgYJAQV0aHJvdwADCQAAAgUCZFkFAmRZBAJmRQkAvQIEBQJlUQkAuAICBQJjYQUCY2IFAmNiBQVGTE9PUgQCZHUJAQFMAgkBAmJQAgkBAUgCBQJmRAUCZFMJAQFIAgUCZkMFAmRSBQFhBAJlcgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAmFiAAUCZHUJAMwIAgkBDEludGVnZXJFbnRyeQIJAQJhYwIFBmhlaWdodAgFCWxhc3RCbG9jawl0aW1lc3RhbXAFAmR1CQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJhZgIFAmRoBQJhaAkBAmJ5CgUCZngFAmZ5CQCgAwEFAmZFBQJkdQAAAAAFBmhlaWdodAgFCWxhc3RCbG9jawl0aW1lc3RhbXAAAAAABQNuaWwEAmZGCQBrAwUCZnYFAWEFAmZ1BAJmRwkAawMFAmZxBQFhCQBkAgUCZkYFAWEEAmZICQBlAgUCZnEFAmZHBAJmSQkAvAIDBQJlUQkAtgIBBQJmSAkAtgIBBQJmdgQCZkoJAKADAQkAvAIDCQC4AgIFAmZFBQJmSQUBYgUCZkkJAJYKBAkAoAMBBQJmRQUCZXIFAmN4BQJmSgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgECZksGAmZMAmZNAmZOAmZtAmZPAmZQBAJkaQkA2AQBCQEFdmFsdWUBBQJibAQCZGoJANgEAQkBBXZhbHVlAQUCYm0EAmRrCQDYBAEJAQV2YWx1ZQEFAmJuBAJmUQUCYm8EAmZSBQJicAQCZlMFAmJrBAJkaAMJAAACBQJmbQUCYngFAmZPBQJmbQQCZmsJAQV2YWx1ZQEJAJEDAgUCZk4AAAQCZGYJAQV2YWx1ZQEIBQJmawdhc3NldElkBAJkTAgFAmZrBmFtb3VudAQCZVIJAQJlSwMFAWUFAWUFAWUDCQAAAgUCZVIFAmVSBAJkZQkA2AQBBQJmUAMJAQIhPQIFAmRpCQDYBAEFAmRmCQACAQIIV3JvbmcgTFAEAmRwCQECYk4BBQJkagQCZHIJAQJiTgEFAmRrBAJmVAoAAmFTCQD8BwQFBHRoaXMCE2dldE9uZVRrblYyUkVBRE9OTFkJAMwIAgUCZkwJAMwIAgUCZEwFA25pbAUDbmlsAwkAAQIFAmFTAgooSW50LCBJbnQpBQJhUwkAAgEJAKwCAgkAAwEFAmFTAh8gY291bGRuJ3QgYmUgY2FzdCB0byAoSW50LCBJbnQpAwkAAAIFAmZUBQJmVAQCY3gIBQJmVAJfMgQCZlUIBQJmVAJfMQQCZlYDAwkAZgIFAmZNAAAJAGYCBQJmTQUCZlUHCQECYU4BCQC5CQIJAMwIAgIfYW1vdW50IHRvIHJlY2VpdmUgaXMgbGVzcyB0aGFuIAkAzAgCCQCkAwEFAmZNBQNuaWwCAAUCZlUEAmZXAwkAAAIFAmZMBQJkagkAlgoEBQJmVgAACQBlAgkAZQIFAmRwBQJmVgUCY3gFAmRyAwkAAAIFAmZMBQJkawkAlgoEAAAFAmZWBQJkcAkAZQIJAGUCBQJkcgUCZlYFAmN4CQACAQIUaW52YWxpZCBvdXQgYXNzZXQgaWQEAmZYCAUCZlcCXzEEAmZZCAUCZlcCXzIEAmZDCAUCZlcCXzMEAmZECAUCZlcCXzQEAmZaCQECYlACCQEBSAIFAmZEBQJmUgkBAUgCBQJmQwUCZlEEAmdhCQEBTAIFAmZaBQFhBAJnYgMJAAACBQJmTAIFV0FWRVMFBHVuaXQJANkEAQUCZkwEAmdjAwkAZgIFAmN4AAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUCYVgFAmN4BQJnYgUDbmlsBQNuaWwEAmRCCQDOCAIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUCZGgFAmZWBQJnYgkAzAgCCQELU3RyaW5nRW50cnkCCQECYWkCCQClCAEFAmRoBQJkZQkBAmJKBgUCZlgFAmZZBQJkTAUCZ2EFBmhlaWdodAgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAMwIAgkBDEludGVnZXJFbnRyeQIJAQJhYgAFAmdhCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQECYWMCBQZoZWlnaHQIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQJnYQUDbmlsBQJnYwMJAAACBQJkQgUCZEIEAmdkCQD8BwQFAmFRAgRidXJuCQDMCAIFAmRMBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmRmBQJkTAUDbmlsAwkAAAIFAmdkBQJnZAQCZ2UEAmdmAwkAAAIFBHRoaXMFAmFYAAAFAmN4BAJnZwMJAAACCQECYmMBBQJmTAUCYm0GBwMFAmdnCQCUCgIJAQEtAQkAZAIFAmZVBQJnZgAACQCUCgIAAAkBAS0BCQBkAgUCZlUFAmdmBAJlVAgFAmdlAl8xBAJlVQgFAmdlAl8yBAJnaAkBAmVTAwUCZVQFAmVVAAAEAmdpCAUCZ2gCXzEEAmVKCAUCZ2gCXzIEAmdqCQECZVcCBQJlUgUCZUoDCQAAAgUCZ2oFAmdqCQCUCgIJAM4IAgUCZEIFAmdpBQJmVgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgECZ2sABAJnbAkAoggBCQEBWgADCQABAgUCZ2wCBlN0cmluZwQCY0MFAmdsCQDZBAEFAmNDAwkAAQIFAmdsAgRVbml0BQR1bml0CQACAQILTWF0Y2ggZXJyb3IBAmdtAAQCZ2wJAKIIAQkBAmFhAAMJAAECBQJnbAIGU3RyaW5nBAJjQwUCZ2wJANkEAQUCY0MDCQABAgUCZ2wCBFVuaXQFBHVuaXQJAAIBAgtNYXRjaCBlcnJvcgACZ24JAAIBAhFQZXJtaXNzaW9uIGRlbmllZAECZ28BAmNQBAJnbAkBAmdrAAMJAAECBQJnbAIKQnl0ZVZlY3RvcgQCZ3AFAmdsCQAAAggFAmNQD2NhbGxlclB1YmxpY0tleQUCZ3ADCQABAgUCZ2wCBFVuaXQJAAACCAUCY1AGY2FsbGVyBQR0aGlzCQACAQILTWF0Y2ggZXJyb3IBAmdxAQJjUAQCZ2wJAQJnawADCQABAgUCZ2wCCkJ5dGVWZWN0b3IEAmdwBQJnbAMJAAACCAUCY1APY2FsbGVyUHVibGljS2V5BQJncAYFAmduAwkAAQIFAmdsAgRVbml0AwkAAAIIBQJjUAZjYWxsZXIFBHRoaXMGBQJnbgkAAgECC01hdGNoIGVycm9yAQJncgMCZ3MCZXQCZ3QEAmJnCQECYVkABAJkagkAkQMCBQJiZwUBdwQCZGsJAJEDAgUCYmcFAXgEAmV1BQFnBAJldwkApwMBBQFsBAJjRAkAuQICCQCnAwEFAmFVBQJldwQCY3oDCQAAAgUCZ3MHCQDMCAIJALcCAgkAtgIBCQECYk4BBQJkagUCZ3QJAMwIAgkAtgIBCQECYk4BBQJkawUDbmlsCQDMCAIJALcCAgkAtgIBCQECYk4BBQJkawUCZ3QJAMwIAgkAtgIBCQECYk4BBQJkagUDbmlsBAJldgkAkQMCBQJjegAABAJjQwUCZXYEAmNFCQC5AgIFAmNEBQJldQQCZXgJALoCAgkAuQICCQC5AgIJALoCAgkAuQICBQJldAUCZXQJALkCAgUCZXYFAmV1BQJldAUCZXcJALkCAgUCY0UFAmV1BAJleQkAuAICCQC3AgIFAmNDCQC6AgIJALkCAgUCZXQFAmV3BQJjRQUCZXQKAQJjTgICY08CZXoEAmd1BQJjTwQCZUIIBQJndQJfMQQCZGMIBQJndQJfMgMJAQIhPQIFAmRjBQR1bml0BQJjTwQCZUMJALoCAgkAtwICCQC5AgIFAmVCBQJlQgUCZXgJALcCAgkAuQICBQFnBQJlQgUCZXkEAmVECQEBWAEJALgCAgUCZUMJAQV2YWx1ZQEFAmVCAwkAwAICBQFmBQJlRAkAlAoCBQJlQwUCZXoJAJQKAgUCZUMFBHVuaXQEAmNUCQDMCAIAAAkAzAgCAAEJAMwIAgACCQDMCAIAAwkAzAgCAAQJAMwIAgAFCQDMCAIABgkAzAgCAAcJAMwIAgAICQDMCAIACQkAzAgCAAoJAMwIAgALCQDMCAIADAkAzAgCAA0JAMwIAgAOBQNuaWwEAmd2CgACY1YFAmNUCgACY1cJAJADAQUCY1YKAAJjWAkAlAoCBQJldAUEdW5pdAoBAmNZAgJjWgJkYQMJAGcCBQJkYQUCY1cFAmNaCQECY04CBQJjWgkAkQMCBQJjVgUCZGEKAQJkYgICY1oCZGEDCQBnAgUCZGEFAmNXBQJjWgkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDE1CQECZGICCQECY1kCCQECY1kCCQECY1kCCQECY1kCCQECY1kCCQECY1kCCQECY1kCCQECY1kCCQECY1kCCQECY1kCCQECY1kCCQECY1kCCQECY1kCCQECY1kCCQECY1kCBQJjWAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPBAJlQggFAmd2Al8xBAJkYwgFAmd2Al8yAwkBAiE9AgUCZGMFBHVuaXQFAmVCCQACAQkArAICAhlZIGNhbGN1bGF0aW9uIGVycm9yLCBZID0gCQCmAwEFAmVCHgJjUAEhY2FsY3VsYXRlQW1vdW50T3V0Rm9yU3dhcFJFQURPTkxZAgJndwJncwQCZ3gDCQAAAgUCZ3MHBAJneQkBAmFKAgUEdGhpcwkBAmFrAAQCZ3QJALcCAgkAtgIBCQECYk4BCQECYUoCBQR0aGlzCQECYWoACQC2AgEFAmd3CQCUCgIFAmd5BQJndAQCZ3kJAQJhSgIFBHRoaXMJAQJhagAEAmd0CQC3AgIJALYCAQkBAmJOAQkBAmFKAgUEdGhpcwkBAmFrAAkAtgIBBQJndwkAlAoCBQJneQUCZ3QEAmd5CAUCZ3gCXzEEAmd0CAUCZ3gCXzIEAmJnCQECYVkABAJkagkAkQMCBQJiZwUBdwQCZGsJAJEDAgUCYmcFAXgEAmN6CQDMCAIJALYCAQkBAmJOAQUCZGoJAMwIAgkAtgIBCQECYk4BBQJkawUDbmlsBAJldAkBAmN5AQUCY3oEAmVCCQECZ3IDBQJncwUCZXQJALYCAQUCZ3cEAmd6CQC4AgIJALgCAgkAtgIBCQECYk4BBQJneQUCZUIJALYCAQABBAJnQQkAlgMBCQDMCAIAAAkAzAgCCQCgAwEFAmd6BQNuaWwEAmdCAwkAAAIFAmdzBwkAzAgCCQC3AgIJALYCAQkBAmJOAQUCZGoJALYCAQUCZ3cJAMwIAgkAuAICCQC2AgEJAQJiTgEFAmRrBQJnegUDbmlsCQDMCAIJALgCAgkAtgIBCQECYk4BBQJkagUCZ3oJAMwIAgkAtwICCQC2AgEJAQJiTgEFAmRrCQC2AgEFAmd3BQNuaWwEAmdDCQECY3kBBQJnQgQCZFkDCQDAAgIFAmdDBQJldAYJAAIBCQC5CQIJAMwIAgIUbmV3IEQgaXMgZmV3ZXIgZXJyb3IJAMwIAgkApgMBBQJldAkAzAgCCQCmAwEFAmdDBQNuaWwCAl9fAwkAAAIFAmRZBQJkWQkAlAoCBQNuaWwFAmdBCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmNQASZjYWxjdWxhdGVBbW91bnRPdXRGb3JTd2FwQW5kU2VuZFRva2VucwQCZ3cCZ3MCZ0QCZ0UEAmdGCgACYVMJAPwHBAkBEUBleHRyTmF0aXZlKDEwNjIpAQkBAVkAAhdnZXRTd2FwQ29udHJhY3RSRUFET05MWQUDbmlsBQNuaWwDCQABAgUCYVMCBlN0cmluZwUCYVMJAAIBCQCsAgIJAAMBBQJhUwIbIGNvdWxkbid0IGJlIGNhc3QgdG8gU3RyaW5nBAJnRwkAzAgCAwkAZwIICQEFdmFsdWUBCQCRAwIIBQJjUAhwYXltZW50cwAABmFtb3VudAUCZ3cGCQECYU4BAgxXcm9uZyBhbW91bnQJAMwIAgMJAAACCAUCY1AGY2FsbGVyCQERQGV4dHJOYXRpdmUoMTA2MikBBQJnRgYJAQJhTgECEVBlcm1pc3Npb24gZGVuaWVkBQNuaWwDCQAAAgUCZ0cFAmdHBAJmawkBBXZhbHVlAQkAkQMCCAUCY1AIcGF5bWVudHMAAAQCZ0gDCQAAAggFAmZrB2Fzc2V0SWQFBHVuaXQJANgEAQkAmwMBAgVXQVZFUwkA2AQBCQEFdmFsdWUBCAUCZmsHYXNzZXRJZAQCZ0kDCQAAAgUCZ3MHBAJneQkBAmFKAgUEdGhpcwkBAmFrAAQCZ3QJAGUCCQECYk4BBQJnSAgJAQV2YWx1ZQEJAJEDAggFAmNQCHBheW1lbnRzAAAGYW1vdW50CQCUCgIFAmd5BQJndAQCZ3kJAQJhSgIFBHRoaXMJAQJhagAEAmd0CQBlAgkBAmJOAQUCZ0gICQEFdmFsdWUBCQCRAwIIBQJjUAhwYXltZW50cwAABmFtb3VudAkAlAoCBQJneQUCZ3QEAmd5CAUCZ0kCXzEEAmd0CAUCZ0kCXzIEAmJnCQECYVkABAJkagkAkQMCBQJiZwUBdwQCZGsJAJEDAgUCYmcFAXgEAmN6AwkAAAIFAmdzBwkAzAgCCQC4AgIJALYCAQkBAmJOAQUCZGoJALYCAQgJAQV2YWx1ZQEJAJEDAggFAmNQCHBheW1lbnRzAAAGYW1vdW50CQDMCAIJALYCAQkBAmJOAQUCZGsFA25pbAkAzAgCCQC2AgEJAQJiTgEFAmRqCQDMCAIJALgCAgkAtgIBCQECYk4BBQJkawkAtgIBCAkBBXZhbHVlAQkAkQMCCAUCY1AIcGF5bWVudHMAAAZhbW91bnQFA25pbAQCZXQJAQJjeQEFAmN6BAJlQgkBAmdyAwUCZ3MFAmV0CQC2AgEAAAQCZ3oJALgCAgkAuAICCQC2AgEJAQJiTgEFAmd5BQJlQgkAtgIBAAEEAmdBCQCWAwEJAMwIAgAACQDMCAIJAKADAQUCZ3oFA25pbAQCZ0oDCQBnAgUCZ0EFAmdEBgkAAgECLEV4Y2hhbmdlIHJlc3VsdCBpcyBmZXdlciBjb2lucyB0aGFuIGV4cGVjdGVkAwkAAAIFAmdKBQJnSgQCZ0IDCQAAAgUCZ3MHCQDMCAIJALYCAQkBAmJOAQUCZGoJAMwIAgkAuAICCQC2AgEJAQJiTgEFAmRrBQJnegUDbmlsCQDMCAIJALgCAgkAtgIBCQECYk4BBQJkagUCZ3oJAMwIAgkAtgIBCQECYk4BBQJkawUDbmlsBAJnQwkBAmN5AQUCZ0IEAmRZAwkAwAICBQJnQwUCZXQGCQACAQIUbmV3IEQgaXMgZmV3ZXIgZXJyb3IDCQAAAgUCZFkFAmRZCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEFAmdFBQJnQQMJAAACBQJnSAIFV0FWRVMFBHVuaXQJANkEAQUCZ3kFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJjUAELY29uc3RydWN0b3IBAVkEAmV4CQECZ3EBBQJjUAMJAAACBQJleAUCZXgJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAVkABQFZBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CY1ABCnNldE1hbmFnZXIBAmdLBAJleAkBAmdxAQUCY1ADCQAAAgUCZXgFAmV4BAJnTAkA2QQBBQJnSwMJAAACBQJnTAUCZ0wJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAmFhAAUCZ0sFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJjUAEOY29uZmlybU1hbmFnZXIABAJjdQkBAmdtAAQCZ00DCQEJaXNEZWZpbmVkAQUCY3UGCQACAQISTm8gcGVuZGluZyBtYW5hZ2VyAwkAAAIFAmdNBQJnTQQCZ04DCQAAAggFAmNQD2NhbGxlclB1YmxpY0tleQkBBXZhbHVlAQUCY3UGCQACAQIbWW91IGFyZSBub3QgcGVuZGluZyBtYW5hZ2VyAwkAAAIFAmdOBQJnTgkAzAgCCQELU3RyaW5nRW50cnkCCQEBWgAJANgEAQkBBXZhbHVlAQUCY3UJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBAmFhAAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmNQAQNwdXQCAmdPAmdQBAJnUQkBAmJzAAQCZ1IJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQCRAwIFAmdRBQFDAgpXciBzdCBhZGRyBAJnUwkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJAJEDAgUCZ1EFAUUCCldyIHNsIGFkZHIDCQBmAgAABQJnTwkAAgECDldyb25nIHNsaXBwYWdlAwkBAiE9AgkAkAMBCAUCY1AIcGF5bWVudHMAAgkAAgECDDIgcG1udHMgZXhwZAQCZ1QJALYCAQgJAQV2YWx1ZQEJAJEDAggFAmNQCHBheW1lbnRzAAAGYW1vdW50BAJnVQkAtgIBCAkBBXZhbHVlAQkAkQMCCAUCY1AIcGF5bWVudHMAAQZhbW91bnQEAmVPCQC4AgIJALYCAQkBAmJOAQkBAmJlAQUCYm0FAmdUAwkAAAIFAmVPBQJlTwQCZVAJALgCAgkAtgIBCQECYk4BCQECYmUBBQJibgUCZ1UDCQAAAgUCZVAFAmVQBAJlUQkAtgIBCAkBBXZhbHVlAQkA7AcBBQJibAhxdWFudGl0eQMJAAACBQJlUQUCZVEEAmVSCQECZUsDBQJnVAUCZ1UJALYCAQAAAwkAAAIFAmVSBQJlUgQCZ1YJAQJmbAoJAKUIAQgFAmNQBmNhbGxlcgkA2AQBCAUCY1ANdHJhbnNhY3Rpb25JZAkBD0F0dGFjaGVkUGF5bWVudAIICQEFdmFsdWUBCQCRAwIIBQJjUAhwYXltZW50cwAAB2Fzc2V0SWQICQEFdmFsdWUBCQCRAwIIBQJjUAhwYXltZW50cwAABmFtb3VudAkAkQMCCAUCY1AIcGF5bWVudHMAAQUCZ08GBwYAAAIABAJlbAgFAmdWAl8yBAJnVwgFAmdWAl83BAJkQggFAmdWAl85BAJlbQgFAmdWA18xMAQCZW4IBQJnVgNfMTEEAmRqCAUCZ1YDXzEyBAJkawgFAmdWA18xMwQCZFgJAPwHBAUCYVECBGVtaXQJAMwIAgUCZWwFA25pbAUDbmlsAwkAAAIFAmRYBQJkWAQCZ1gEAmdsBQJkWAMJAAECBQJnbAIHQWRkcmVzcwQCZ1kFAmdsCQD8BwQFAmdZAgRlbWl0CQDMCAIFAmVsBQNuaWwFA25pbAUEdW5pdAMJAAACBQJnWAUCZ1gEAmdaAwkAZgIFAmVtAAAJAPwHBAUCZ1MCA3B1dAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQJkagUCZW0FA25pbAUDbmlsAwkAAAIFAmdaBQJnWgQCaGEDCQBmAgUCZW4AAAkA/AcEBQJnUwIDcHV0BQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmRrBQJlbgUDbmlsBQNuaWwDCQAAAgUCaGEFAmhhBAJoYgMFAmdQBAJoYwkA/AcEBQJnUgIFc3Rha2UFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCZ1cFAmVsBQNuaWwDCQAAAgUCaGMFAmhjBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAmNQBmNhbGxlcgUCZWwFAmdXBQNuaWwEAmhkCQECZVMDAAAAAAAABAJnaQgFAmhkAl8xBAJlSggFAmhkAl8yBAJoZQMJAMACAgUCZUoFAmVSBgkBAmFOAQkAuQkCCQDMCAICInVwZGF0ZWQgRExwIGxvd2VyIHRoYW4gY3VycmVudCBETHAJAMwIAgkApgMBBQJlTwkAzAgCCQCmAwEFAmVQCQDMCAIJAKYDAQUCZVEJAMwIAgkApgMBBQJlUgkAzAgCCQCmAwEFAmVKCQDMCAIJAKQDAQUCZW0JAMwIAgkApAMBBQJlbgUDbmlsAgEgAwkAAAIFAmhlBQJoZQQCaGYICQEFdmFsdWUBCQDsBwEFAmJsCHF1YW50aXR5AwkAAAIFAmhmBQJoZgkAzggCCQDOCAIFAmRCBQJoYgUCZ2kJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CY1ABC3B1dE9uZVRrblYyAgJmTQJnUAQCaGcKAAJhUwkA/AcEBQJhUQIoaXNQb29sT25lVG9rZW5PcGVyYXRpb25zRGlzYWJsZWRSRUFET05MWQkAzAgCCQClCAEFBHRoaXMFA25pbAUDbmlsAwkAAQIFAmFTAgdCb29sZWFuBQJhUwkAAgEJAKwCAgkAAwEFAmFTAhwgY291bGRuJ3QgYmUgY2FzdCB0byBCb29sZWFuBAJoaAMDAwkBAmFWAAYJAAACBQJiawUBcQYJAAACBQJiawUBcwYFAmhnBAJnRwkAzAgCAwMJAQEhAQUCaGgGCQECZ28BBQJjUAYJAQJhTgECIXB1dCBvcGVyYXRpb24gaXMgYmxvY2tlZCBieSBhZG1pbgkAzAgCAwkAAAIJAJADAQgFAmNQCHBheW1lbnRzAAEGCQECYU4BAh5leGFjdGx5IDEgcGF5bWVudCBhcmUgZXhwZWN0ZWQFA25pbAMJAAACBQJnRwUCZ0cEAmRqCQDYBAEJAQV2YWx1ZQEFAmJtBAJkawkA2AQBCQEFdmFsdWUBBQJibgQCZGkFAmJsBAJmUQUCYm8EAmZSBQJicAQCZGgDCQAAAggFAmNQBmNhbGxlcgUEdGhpcwgFAmNQDG9yaWdpbkNhbGxlcggFAmNQBmNhbGxlcgQCZmsJAQV2YWx1ZQEJAJEDAggFAmNQCHBheW1lbnRzAAAEAmRmCQDYBAEJAQV2YWx1ZQEIBQJmawdhc3NldElkBAJkTAgFAmZrBmFtb3VudAQCZVIDCQAAAggFAmZrB2Fzc2V0SWQFAmJtCQECZUsDCQC2AgEFAmRMCQC2AgEAAAkAtgIBAAAJAQJlSwMJALYCAQAACQC2AgEFAmRMCQC2AgEAAAMJAAACBQJlUgUCZVIEAmhpCQECZnAFBQJkTAUCZGYJAKUIAQUCZGgJANgEAQgFAmNQDXRyYW5zYWN0aW9uSWQGAwkAAAIFAmhpBQJoaQQCY3gIBQJoaQJfMwQCZEIIBQJoaQJfMgQCaGoIBQJoaQJfMQQCZWwDAwkAZgIFAmZNAAAJAGYCBQJmTQUCaGoHCQECYU4BCQC5CQIJAMwIAgIfYW1vdW50IHRvIHJlY2VpdmUgaXMgbGVzcyB0aGFuIAkAzAgCCQCkAwEFAmZNBQNuaWwCAAUCaGoEAmdWCQD8BwQFAmFRAgRlbWl0CQDMCAIFAmVsBQNuaWwFA25pbAMJAAACBQJnVgUCZ1YEAmdYBAJnbAUCZ1YDCQABAgUCZ2wCB0FkZHJlc3MEAmdZBQJnbAkA/AcEBQJnWQIEZW1pdAkAzAgCBQJlbAUDbmlsBQNuaWwFBHVuaXQDCQAAAgUCZ1gFAmdYBAJoYgMFAmdQBAJoYwkA/AcEBQJidQIFc3Rha2UFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCZGkFAmVsBQNuaWwDCQAAAgUCaGMFAmhjBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAmNQBmNhbGxlcgUCZWwFAmRpBQNuaWwEAmdjAwkAZgIFAmN4AAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUCYVgFAmN4CQDZBAEFAmRmBQNuaWwFA25pbAQCaGsDCQAAAgUEdGhpcwUCYVgJAJQKAgAAAAAEAmhsAwkAAAIIBQJmawdhc3NldElkBQJibQYHAwUCaGwJAJQKAgkBAS0BBQJjeAAACQCUCgIAAAkBAS0BBQJjeAQCZVQIBQJoawJfMQQCZVUIBQJoawJfMgQCaG0JAQJlUwMFAmVUBQJlVQAABAJnaQgFAmhtAl8xBAJlSggFAmhtAl8yBAJnagkBAmVXAgUCZVIFAmVKAwkAAAIFAmdqBQJnagkAlAoCCQDOCAIJAM4IAgkAzggCBQJkQgUCaGIFAmdjBQJnaQUCZWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CY1ABCnB1dEZvckZyZWUBAmhuAwkAZgIAAAUCaG4JAAIBAgpXcm9uZyBzbHBnAwkBAiE9AgkAkAMBCAUCY1AIcGF5bWVudHMAAgkAAgECDDIgcG1udHMgZXhwZAQCaG8JAQJmbAoJAKUIAQgFAmNQBmNhbGxlcgkA2AQBCAUCY1ANdHJhbnNhY3Rpb25JZAkBD0F0dGFjaGVkUGF5bWVudAIICQEFdmFsdWUBCQCRAwIIBQJjUAhwYXltZW50cwAAB2Fzc2V0SWQICQEFdmFsdWUBCQCRAwIIBQJjUAhwYXltZW50cwAABmFtb3VudAkAkQMCCAUCY1AIcGF5bWVudHMAAQUCaG4HBwYAAAIABAJkQggFAmhvAl85BAJnVAkAtgIBCAkBBXZhbHVlAQkAkQMCCAUCY1AIcGF5bWVudHMAAAZhbW91bnQEAmdVCQC2AgEICQEFdmFsdWUBCQCRAwIIBQJjUAhwYXltZW50cwABBmFtb3VudAQCZVIJAQJlSwMFAmdUBQJnVQkAtgIBAAADCQAAAgUCZVIFAmVSBAJocAkBAmVTAwAAAAAAAAQCZ2kIBQJocAJfMQQCZUoIBQJocAJfMgQCZ2oJAQJlVwIFAmVSBQJlSgMJAAACBQJnagUCZ2oJAM4IAgUCZEIFAmdpCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmNQAQNnZXQABAJlUgkBAmVLAwkAtgIBAAAJALYCAQAACQC2AgEAAAMJAAACBQJlUgUCZVIEAmRYCQECZmoBBQJjUAQCaHEIBQJkWAJfMQQCZEEIBQJkWAJfMgQCZEwIBQJkWAJfMwQCZGYIBQJkWAJfNAQCZEIIBQJkWAJfNQQCZXkJAPwHBAUCYVECBGJ1cm4JAMwIAgUCZEwFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCZGYFAmRMBQNuaWwDCQAAAgUCZXkFAmV5BAJocgkBAmVTAwkBAS0BBQJocQkBAS0BBQJkQQAABAJnaQgFAmhyAl8xBAJlSggFAmhyAl8yBAJnagkBAmVXAgUCZVIFAmVKAwkAAAIFAmdqBQJnagkAzggCBQJkQgUCZ2kJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CY1ABC2dldE9uZVRrblYyAgJmTAJmTQQCaGcKAAJhUwkA/AcEBQJhUQIoaXNQb29sT25lVG9rZW5PcGVyYXRpb25zRGlzYWJsZWRSRUFET05MWQkAzAgCCQClCAEFBHRoaXMFA25pbAUDbmlsAwkAAQIFAmFTAgdCb29sZWFuBQJhUwkAAgEJAKwCAgkAAwEFAmFTAhwgY291bGRuJ3QgYmUgY2FzdCB0byBCb29sZWFuBAJocwMDCQECYVYABgkAAAIFAmJrBQFzBgUCaGcEAmdHCQDMCAIDAwkBASEBBQJocwYJAQJnbwEFAmNQBgkBAmFOAQIhZ2V0IG9wZXJhdGlvbiBpcyBibG9ja2VkIGJ5IGFkbWluCQDMCAIDCQAAAgkAkAMBCAUCY1AIcGF5bWVudHMAAQYJAQJhTgECHmV4YWN0bHkgMSBwYXltZW50IGFyZSBleHBlY3RlZAUDbmlsAwkAAAIFAmdHBQJnRwQCaHQJAQJmSwYFAmZMBQJmTQgFAmNQCHBheW1lbnRzCAUCY1AGY2FsbGVyCAUCY1AMb3JpZ2luQ2FsbGVyCAUCY1ANdHJhbnNhY3Rpb25JZAQCZEIIBQJodAJfMQQCZlYIBQJodAJfMgkAlAoCBQJkQgUCZlYJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CY1ABCnJlZnJlc2hETHAABAJodQkBC3ZhbHVlT3JFbHNlAgkAnwgBBQJhcQAABAJodgMJAGcCCQBlAgUGaGVpZ2h0BQJodQUCYXQFBHVuaXQJAQJhTgEJALkJAgkAzAgCCQCkAwEFAmF0CQDMCAICLyBibG9ja3MgaGF2ZSBub3QgcGFzc2VkIHNpbmNlIHRoZSBwcmV2aW91cyBjYWxsBQNuaWwCAAMJAAACBQJodgUCaHYEAmZkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKgDAQkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzBQJhcAIBMAkBAmFQAQILaW52YWxpZCBkTHAEAmh3CQECZVMDAAAAAAAABAJoeAgFAmh3Al8xBAJlSggFAmh3Al8yBAJlVgMJAQIhPQIFAmZkBQJlSgUCaHgJAQJhTgECEm5vdGhpbmcgdG8gcmVmcmVzaAkAlAoCBQJlVgkApgMBBQJlSgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJjUAETZ2V0T25lVGtuVjJSRUFET05MWQICZkwCaHkEAmRqCQDYBAEJAQV2YWx1ZQEFAmJtBAJkawkA2AQBCQEFdmFsdWUBBQJibgQCZGkJANgEAQkBBXZhbHVlAQUCYmwEAmN6CQDMCAIJALYCAQkBAmJOAQUCZGoJAMwIAgkAtgIBCQECYk4BBQJkawUDbmlsBAJlSQkAtgIBCAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDsBwEJANkEAQUCZGkCEGludmFsaWQgbHAgYXNzZXQIcXVhbnRpdHkEAmNiCQECY3kBBQJjegQCY2EJALgCAgUCY2IJALwCAwkAtgIBBQJoeQUCY2IFAmVJBAJoegMJAAACBQJmTAUCZGoAAAMJAAACBQJmTAUCZGsAAQkAAgECFGludmFsaWQgb3V0IGFzc2V0IGlkBAJoQQkBAmVzAwUCY3oFAmh6BQJjYQQCZ3oJALgCAgkAkQMCBQJjegUCaHoFAmhBBAJnQQkAlgMBCQDMCAIAAAkAzAgCCQCgAwEJALgCAgUCZ3oFAWYFA25pbAQCaEIJAQJjdgIFAmdBBQJhVAQCZlUIBQJoQgJfMQQCY3gIBQJoQgJfMgkAlAoCBQNuaWwJAJQKAgUCZlUFAmN4AmNQARxnZXRPbmVUa25WMldpdGhCb251c1JFQURPTkxZAgJmTAJoeQQCZGoJANgEAQkBBXZhbHVlAQUCYm0EAmRrCQDYBAEJAQV2YWx1ZQEFAmJuBAJkaQkA2AQBCQEFdmFsdWUBBQJibAQCZHAJAQJiTgEFAmRqBAJkcgkBAmJOAQUCZGsEAmhDCgACYVMJAPwHBAUEdGhpcwITZ2V0T25lVGtuVjJSRUFET05MWQkAzAgCBQJmTAkAzAgCBQJoeQUDbmlsBQNuaWwDCQABAgUCYVMCCihJbnQsIEludCkFAmFTCQACAQkArAICCQADAQUCYVMCHyBjb3VsZG4ndCBiZSBjYXN0IHRvIChJbnQsIEludCkEAmZVCAUCaEMCXzEEAmN4CAUCaEMCXzIEAmRYCQECZGQEAgAFAmRpBQJoeQUEdGhpcwQCZHoIBQJkWAJfMQQCZEEIBQJkWAJfMgQCaEQJAGQCBQJkegUCZEEEAmZKAwkAAAIFAmhEAAADCQAAAgUCZlUAAAAACQACAQIXYm9udXMgY2FsY3VsYXRpb24gZXJyb3IJAGsDCQBlAgUCZlUFAmhEBQFhBQJoRAkAlAoCBQNuaWwJAJUKAwUCZlUFAmN4BQJmSgJjUAEJZ2V0Tm9MZXNzAgJoRQJoRgQCZFgJAQJmagEFAmNQBAJkeggFAmRYAl8xBAJkQQgFAmRYAl8yBAJkTAgFAmRYAl8zBAJkZggFAmRYAl80BAJkQggFAmRYAl81AwkAZgIFAmhFBQJkegkAAgEJAKwCAgkArAICCQCsAgICCUZhaWxlZDogIAkApAMBBQJkegIDIDwgCQCkAwEFAmhFAwkAZgIFAmhGBQJkQQkAAgEJAKwCAgkArAICCQCsAgICCEZhaWxlZDogCQCkAwEFAmRBAgMgPCAJAKQDAQUCaEYEAmVSCQECZUsDCQC2AgEAAAkAtgIBAAAJALYCAQAAAwkAAAIFAmVSBQJlUgQCaEcJAPwHBAUCYVECBGJ1cm4JAMwIAgUCZEwFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCZGYFAmRMBQNuaWwDCQAAAgUCaEcFAmhHBAJoSAkBAmVTAwkBAS0BBQJkegkBAS0BBQJkQQAABAJnaQgFAmhIAl8xBAJlSggFAmhIAl8yBAJnagkBAmVXAgUCZVIFAmVKAwkAAAIFAmdqBQJnagkAzggCBQJkQgUCZ2kJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CY1ABDXVuc3Rha2VBbmRHZXQBAmN3BAJoSQMJAQIhPQIJAJADAQgFAmNQCHBheW1lbnRzAAAJAAIBAg1ObyBwbW50cyBleHBkBgMJAAACBQJoSQUCaEkEAmhKCQECYnMABAJnVwUCYmwEAmhLCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkAkQMCBQJoSgUBQwIKV3Igc3QgYWRkcgQCZVIJAQJlSwMJALYCAQAACQC2AgEAAAkAtgIBAAADCQAAAgUCZVIFAmVSBAJoTAkA/AcEBQJoSwIHdW5zdGFrZQkAzAgCCQDYBAEFAmdXCQDMCAIFAmN3BQNuaWwFA25pbAMJAAACBQJoTAUCaEwEAmRYCQECZGQECQDYBAEIBQJjUA10cmFuc2FjdGlvbklkCQDYBAEFAmdXBQJjdwgFAmNQBmNhbGxlcgQCZHoIBQJkWAJfMQQCZEEIBQJkWAJfMgQCZG4JAQ1wYXJzZUludFZhbHVlAQgFAmRYAl85BAJkQggFAmRYA18xMAQCaE0DAwkBAmFWAAYJAAACBQJkbgUBcwkAAgEJAKwCAgIJQmxvY2tlZDogCQCkAwEFAmRuBgMJAAACBQJoTQUCaE0EAmhOCQD8BwQFAmFRAgRidXJuCQDMCAIFAmN3BQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmdXBQJjdwUDbmlsAwkAAAIFAmhOBQJoTgQCaE8JAQJlUwMJAQEtAQUCZHoJAQEtAQUCZEEAAAQCZ2kIBQJoTwJfMQQCZUoIBQJoTwJfMgQCZ2oJAQJlVwIFAmVSBQJlSgMJAAACBQJnagUCZ2oJAM4IAgUCZEIFAmdpCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmNQARN1bnN0YWtlQW5kR2V0Tm9MZXNzAwJoUAJoUQJoRgQCaHMDCQECYVYABgkAAAIFAmJrBQFzBAJnRwkAzAgCAwkBASEBBQJocwYJAAIBAiFnZXQgb3BlcmF0aW9uIGlzIGJsb2NrZWQgYnkgYWRtaW4JAMwIAgMJAAACCQCQAwEIBQJjUAhwYXltZW50cwAABgkAAgECGG5vIHBheW1lbnRzIGFyZSBleHBlY3RlZAUDbmlsAwkAAAIFAmdHBQJnRwQCZVIJAQJlSwMJALYCAQAACQC2AgEAAAkAtgIBAAADCQAAAgUCZVIFAmVSBAJoTAkA/AcEBQJidQIHdW5zdGFrZQkAzAgCCQDYBAEFAmJsCQDMCAIFAmhQBQNuaWwFA25pbAMJAAACBQJoTAUCaEwEAmhSCQECZGQECQDYBAEIBQJjUA10cmFuc2FjdGlvbklkCQDYBAEFAmJsBQJoUAgFAmNQBmNhbGxlcgQCZHoIBQJoUgJfMQQCZEEIBQJoUgJfMgQCZEIIBQJoUgNfMTAEAmhTCQDMCAIDCQBnAgUCZHoFAmhRBgkAAgEJALkJAgkAzAgCAixhbW91bnQgYXNzZXQgYW1vdW50IHRvIHJlY2VpdmUgaXMgbGVzcyB0aGFuIAkAzAgCCQCkAwEFAmhRBQNuaWwCAAkAzAgCAwkAZwIFAmRBBQJoRgYJAAIBCQC5CQIJAMwIAgIrcHJpY2UgYXNzZXQgYW1vdW50IHRvIHJlY2VpdmUgaXMgbGVzcyB0aGFuIAkAzAgCCQCkAwEFAmhGBQNuaWwCAAUDbmlsAwkAAAIFAmhTBQJoUwQCaEcJAPwHBAUCYVECBGJ1cm4JAMwIAgUCaFAFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCYmwFAmhQBQNuaWwDCQAAAgUCaEcFAmhHBAJoVAkBAmVTAwkBAS0BBQJkegkBAS0BBQJkQQAABAJnaQgFAmhUAl8xBAJlSggFAmhUAl8yBAJnagkBAmVXAgUCZVIFAmVKAwkAAAIFAmdqBQJnagkAzggCBQJkQgUCZ2kJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CY1ABFXVuc3Rha2VBbmRHZXRPbmVUa25WMgMCaFACZkwCZk0EAmhnCgACYVMJAPwHBAUCYVECKGlzUG9vbE9uZVRva2VuT3BlcmF0aW9uc0Rpc2FibGVkUkVBRE9OTFkJAMwIAgkApQgBBQR0aGlzBQNuaWwFA25pbAMJAAECBQJhUwIHQm9vbGVhbgUCYVMJAAIBCQCsAgIJAAMBBQJhUwIcIGNvdWxkbid0IGJlIGNhc3QgdG8gQm9vbGVhbgQCaHMDAwkBAmFWAAYJAAACBQJiawUBcwYFAmhnBAJnRwkAzAgCAwMJAQEhAQUCaHMGCQECZ28BBQJjUAYJAQJhTgECIWdldCBvcGVyYXRpb24gaXMgYmxvY2tlZCBieSBhZG1pbgkAzAgCAwkAAAIJAJADAQgFAmNQCHBheW1lbnRzAAAGCQECYU4BAhhubyBwYXltZW50cyBhcmUgZXhwZWN0ZWQFA25pbAMJAAACBQJnRwUCZ0cEAmhKCQECYnMABAJnVwUCYmwEAmhLCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkAkQMCBQJoSgUBQwIKV3Igc3QgYWRkcgQCaEwJAPwHBAUCaEsCB3Vuc3Rha2UJAMwIAgkA2AQBBQJnVwkAzAgCBQJoUAUDbmlsBQNuaWwDCQAAAgUCaEwFAmhMBAJoVQkBAmZLBgUCZkwFAmZNCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQJnVwUCaFAFA25pbAgFAmNQBmNhbGxlcggFAmNQDG9yaWdpbkNhbGxlcggFAmNQDXRyYW5zYWN0aW9uSWQEAmRCCAUCaFUCXzEEAmZWCAUCaFUCXzIJAJQKAgUCZEIFAmZWCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmNQARxwdXRPbmVUa25WMldpdGhCb251c1JFQURPTkxZAgJoVgJoVwQCaFgJAQJmcAUFAmhWBQJoVwIAAgAGBAJmRQgFAmhYAl8xBAJkQggFAmhYAl8yBAJjeAgFAmhYAl8zBAJmSggFAmhYAl80CQCUCgIFA25pbAkAlQoDBQJmRQUCY3gFAmZKAmNQASFwdXRPbmVUa25WMldpdGhvdXRUYWtlRmVlUkVBRE9OTFkCAmhWAmhXBAJoWQkBAmZwBQUCaFYFAmhXAgACAAcEAmZFCAUCaFkCXzEEAmRCCAUCaFkCXzIEAmN4CAUCaFkCXzMEAmZKCAUCaFkCXzQJAJQKAgUDbmlsCQCVCgMFAmZFBQJjeAUCZkoCY1ABCGFjdGl2YXRlAgJoWgJpYQMJAQIhPQIJAKUIAQgFAmNQBmNhbGxlcgkApQgBBQJhUQkAAgECBmRlbmllZAkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJhagAFAmhaCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJhawAFAmlhBQNuaWwCB3N1Y2Nlc3MCY1ABBHNldFMCAmliAmhNAwkBAiE9AgkApQgBCAUCY1AGY2FsbGVyCQECYUoCBQR0aGlzCQECYW0ABQJnbgkAzAgCCQELU3RyaW5nRW50cnkCBQJpYgUCaE0FA25pbAJjUAEEc2V0SQICaWICaE0DCQECIT0CCQClCAEIBQJjUAZjYWxsZXIJAQJhSgIFBHRoaXMJAQJhbQAFAmduCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQJpYgUCaE0FA25pbAJjUAEcZ2V0UG9vbENvbmZpZ1dyYXBwZXJSRUFET05MWQAJAJQKAgUDbmlsCQECYVkAAmNQARxnZXRBY2NCYWxhbmNlV3JhcHBlclJFQURPTkxZAQJiTwkAlAoCBQNuaWwJAQJiTgEFAmJPAmNQARljYWxjUHJpY2VzV3JhcHBlclJFQURPTkxZAwJjaAJjaQJjbQQCaWMJAQJjbAMFAmNoBQJjaQUCY20JAJQKAgUDbmlsCQDMCAIJAKYDAQkAkQMCBQJpYwAACQDMCAIJAKYDAQkAkQMCBQJpYwABCQDMCAIJAKYDAQkAkQMCBQJpYwACBQNuaWwCY1ABFmZyb21YMThXcmFwcGVyUkVBRE9OTFkCAU0CaWQJAJQKAgUDbmlsCQEBTAIJAKcDAQUBTQUCaWQCY1ABFHRvWDE4V3JhcHBlclJFQURPTkxZAgFJAUoJAJQKAgUDbmlsCQCmAwEJAQFIAgUBSQUBSgJjUAEeY2FsY1ByaWNlQmlnSW50V3JhcHBlclJFQURPTkxZAgJiUQJiUgkAlAoCBQNuaWwJAKYDAQkBAmJQAgkApwMBBQJiUQkApwMBBQJiUgJjUAEjZXN0aW1hdGVQdXRPcGVyYXRpb25XcmFwcGVyUkVBRE9OTFkJAmRlAmJXAmREAmRFAmRGAmRHAmllAmRIAmRJCQCUCgIFA25pbAkBAmRDDQUCZGUFAmJXBQJkRAUCZEUFAmRGBQJkRwUCaWUFAmRIBQJkSQYHAAACAAJjUAEjZXN0aW1hdGVHZXRPcGVyYXRpb25XcmFwcGVyUkVBRE9OTFkEAmRlAmlmAmRnAmllBAJkWAkBAmRkBAUCZGUFAmlmBQJkZwkBEUBleHRyTmF0aXZlKDEwNjIpAQUCaWUJAJQKAgUDbmlsCQCcCgoIBQJkWAJfMQgFAmRYAl8yCAUCZFgCXzMIBQJkWAJfNAgFAmRYAl81CAUCZFgCXzYIBQJkWAJfNwkApgMBCAUCZFgCXzgIBQJkWAJfOQgFAmRYA18xMAECaWcBAmloAAQCaWkEAmdsCQECZ2sAAwkAAQIFAmdsAgpCeXRlVmVjdG9yBAJncAUCZ2wFAmdwAwkAAQIFAmdsAgRVbml0CAUCaWcPc2VuZGVyUHVibGljS2V5CQACAQILTWF0Y2ggZXJyb3IEAmdsBQJpZwMJAAECBQJnbAIFT3JkZXIEAmVaBQJnbAQCaWoJAQJhVwAEAmlrCQECZVkBBQJlWgQCYUYIBQJpawJfMQQCYUcIBQJpawJfMgQCYUgJAPQDAwgFAmVaCWJvZHlCeXRlcwkAkQMCCAUCZVoGcHJvb2ZzAAAIBQJlWg9zZW5kZXJQdWJsaWNLZXkEAmFJCQD0AwMIBQJlWglib2R5Qnl0ZXMJAJEDAggFAmVaBnByb29mcwABBQJpagMDAwUCYUYFAmFIBwUCYUkHBgkBAmFFBAUCYUYFAmFHBQJhSAUCYUkDCQABAgUCZ2wCFFNldFNjcmlwdFRyYW5zYWN0aW9uBAJjQwUCZ2wDCQD0AwMIBQJpZwlib2R5Qnl0ZXMJAJEDAggFAmlnBnByb29mcwAABQJpaQYEAmlsCQD2AwEJAQV2YWx1ZQEIBQJjQwZzY3JpcHQEAmltCQDbBAEJAQV2YWx1ZQEJAJ0IAgUCYVEJAQJhQwAEAmluCQDxBwEFBHRoaXMDCQAAAgUCaW0FAmlsCQECIT0CBQJpbgUCaWwHCQD0AwMIBQJpZwlib2R5Qnl0ZXMJAJEDAggFAmlnBnByb29mcwAABQJpaV4cxMs=", "height": 2441946, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 7CLV6ivn8wgpx7bfYAuMh4ycvfpSikVdh6soTQ2fLCd8 Next: 84vGc8UaLAsvFNuz7VVRUTbGsSib6ifQjqANt5P4bRMC Diff:
OldNewDifferences
1515
1616 let g = toBigInt(2)
1717
18-let h = toBigInt((a - ((a * 1) / a)))
18+let h = toBigInt(3)
1919
20-let i = "WAVES"
20+let i = toBigInt(4)
2121
22-let j = "100"
22+let j = toBigInt((a - ((a * 1) / a)))
2323
24-let k = "1"
24+let k = "WAVES"
2525
26-let l = "__"
26+let l = "100"
2727
28-let m = ""
28+let m = "1"
2929
30-let n = 1
30+let n = "__"
3131
32-let o = 2
32+let o = ""
3333
34-let p = 3
34+let p = 1
3535
36-let q = 4
36+let q = 2
3737
38-let r = 1
38+let r = 3
3939
40-let s = 2
40+let s = 4
4141
42-let t = 3
42+let t = 1
4343
44-let u = 4
44+let u = 2
4545
46-let v = 5
46+let v = 3
4747
48-let w = 6
48+let w = 4
4949
50-let x = 7
50+let x = 5
5151
52-let y = 8
52+let y = 6
5353
54-let z = 9
54+let z = 7
5555
56-let A = 1
56+let A = 8
5757
58-let B = 6
58+let B = 9
5959
60-let C = 7
60+let C = 1
6161
62-let D = 10
62+let D = 6
6363
64-let E = fraction(10, a, 10000)
64+let E = 7
6565
66-func F (G,H) = fraction(toBigInt(G), c, toBigInt(H))
66+let F = 10
67+
68+let G = fraction(10, a, 10000)
69+
70+func H (I,J) = fraction(toBigInt(I), c, toBigInt(J))
6771
6872
69-func I (J,K) = toInt(fraction(J, toBigInt(K), c))
73+func K (I,J) = fraction(I, c, J)
7074
7175
72-func L (M,N,O) = fraction(M, N, O)
76+func L (M,N) = toInt(fraction(M, toBigInt(N), c))
7377
7478
75-func P (J) = if ((d > J))
76- then -(J)
77- else J
79+func O (M,N,P) = toInt(fraction(M, toBigInt(N), c, P))
7880
7981
80-func Q (J) = if ((d > J))
81- then -(J)
82- else J
82+func Q (I,J) = fraction(I, c, toBigInt(J))
8383
8484
85-func R () = "%s__factoryContract"
85+func R (M,N) = fraction(M, toBigInt(N), c)
8686
8787
88-func S () = "%s__managerPublicKey"
88+func S (T,U,V) = fraction(T, U, V)
8989
9090
91-func T () = "%s__pendingManagerPublicKey"
91+func W (M) = if ((d > M))
92+ then -(M)
93+ else M
9294
9395
94-func U () = "%s%s__price__last"
96+func X (M) = if ((d > M))
97+ then -(M)
98+ else M
9599
96100
97-func V (W,X) = makeString(["%s%s%d%d__price__history", toString(W), toString(X)], l)
101+func Y () = "%s__factoryContract"
98102
99103
100-func Y (Z,aa) = ((("%s%s%s__P__" + Z) + "__") + aa)
104+func Z () = "%s__managerPublicKey"
101105
102106
103-func ab (Z,aa) = ((("%s%s%s__G__" + Z) + "__") + aa)
107+func aa () = "%s__pendingManagerPublicKey"
104108
105109
106-func ac () = "%s__amountAsset"
110+func ab () = "%s%s__price__last"
107111
108112
109-func ad () = "%s__priceAsset"
113+func ac (ad,ae) = makeString(["%s%s%d%d__price__history", toString(ad), toString(ae)], n)
110114
111115
112-func ae () = "%s__amp"
116+func af (ag,ah) = ((("%s%s%s__P__" + ag) + "__") + ah)
113117
114118
115-func af () = "%s__addonAddr"
119+func ai (ag,ah) = ((("%s%s%s__G__" + ag) + "__") + ah)
116120
117121
118-func ag () = "%s__swapContract"
122+func aj () = "%s__amountAsset"
119123
120124
121-func ah () = "%s__factoryConfig"
125+func ak () = "%s__priceAsset"
122126
123127
124-func ai () = "%s%s__matcher__publicKey"
128+func al () = "%s__amp"
125129
126130
127-func aj (ak,al) = (((("%d%d%s__" + ak) + "__") + al) + "__config")
131+func am () = "%s__addonAddr"
128132
129133
130-func am (an) = ("%s%s%s__mappings__baseAsset2internalId__" + an)
134+let an = "%s__fee"
135+
136+let ao = valueOrElse(getInteger(this, an), G)
137+
138+let ap = makeString(["%s", "dLp"], n)
139+
140+let aq = makeString(["%s", "dLpRefreshedHeight"], n)
141+
142+let ar = makeString(["%s", "refreshDLpDelay"], n)
143+
144+let as = 30
145+
146+let at = valueOrElse(getInteger(this, ar), as)
147+
148+func au () = "%s__factoryConfig"
131149
132150
133-func ao () = "%s__shutdown"
151+func av () = "%s%s__matcher__publicKey"
134152
135153
136-func ap () = "%s__allowedLpStableScriptHash"
154+func aw (ax,ay) = (((("%d%d%s__" + ax) + "__") + ay) + "__config")
137155
138156
139-func aq () = "%s__feeCollectorAddress"
157+func az (aA) = ("%s%s%s__mappings__baseAsset2internalId__" + aA)
140158
141159
142-func ar (as,at,au) = throw(((((("Failed: ordValid=" + toString(as)) + " sndrValid=") + toString(at)) + " mtchrValid=") + toString(au)))
160+func aB () = "%s__shutdown"
143161
144162
145-func av (J) = {
146- let aw = J
147- if ($isInstanceOf(aw, "String"))
148- then {
149- let ax = aw
150- ax
151- }
152- else throw("fail cast to String")
163+func aC () = "%s__allowedLpStableScriptHash"
164+
165+
166+func aD () = "%s__feeCollectorAddress"
167+
168+
169+func aE (aF,aG,aH,aI) = throw((((((((("order validation failed: orderValid=" + toString(aF)) + " (") + aG) + ")") + " senderValid=") + toString(aH)) + " matcherValid=") + toString(aI)))
170+
171+
172+func aJ (aK,aL) = valueOrErrorMessage(getString(aK, aL), makeString(["mandatory ", toString(aK), ".", aL, " not defined"], ""))
173+
174+
175+func aM (aK,aL) = valueOrErrorMessage(getInteger(aK, aL), makeString(["mandatory ", toString(aK), ".", aL, " not defined"], ""))
176+
177+
178+func aN (aO) = throw(makeString(["lp_stable.ride:", aO], " "))
179+
180+
181+func aP (aO) = makeString(["lp_stable.ride:", aO], " ")
182+
183+
184+let aQ = addressFromStringValue(aJ(this, Y()))
185+
186+let aR = {
187+ let aS = invoke(aQ, "getInFeeREADONLY", [toString(this)], nil)
188+ if ($isInstanceOf(aS, "Int"))
189+ then aS
190+ else throw(($getType(aS) + " couldn't be cast to Int"))
191+ }
192+
193+let aT = {
194+ let aS = invoke(aQ, "getOutFeeREADONLY", [toString(this)], nil)
195+ if ($isInstanceOf(aS, "Int"))
196+ then aS
197+ else throw(($getType(aS) + " couldn't be cast to Int"))
198+ }
199+
200+let aU = aJ(this, al())
201+
202+func aV () = valueOrElse(getBoolean(aQ, aB()), false)
203+
204+
205+func aW () = fromBase58String(aJ(aQ, av()))
206+
207+
208+let aX = addressFromStringValue(aJ(aQ, aD()))
209+
210+func aY () = {
211+ let aZ = aJ(this, aj())
212+ let ba = aJ(this, ak())
213+ let bb = aM(aQ, az(ba))
214+ let ax = aM(aQ, az(aZ))
215+ split(aJ(aQ, aw(toString(ax), toString(bb))), n)
153216 }
154217
155218
156-func ay (az,aA) = valueOrErrorMessage(getString(az, aA), makeString(["mandatory ", toString(az), ".", aA, " not defined"], ""))
219+func bc (bd) = if ((bd == k))
220+ then unit
221+ else fromBase58String(bd)
157222
158223
159-func aB (az,aA) = valueOrErrorMessage(getInteger(az, aA), makeString(["mandatory ", toString(az), ".", aA, " not defined"], ""))
224+func be (bd) = if ((bd == unit))
225+ then k
226+ else toBase58String(value(bd))
160227
161228
162-func aC (aD) = throw(makeString(["lp_stable.ride:", aD], " "))
229+func bf (bg) = $Tuple9(addressFromStringValue(bg[t]), parseIntValue(bg[u]), fromBase58String(bg[v]), bc(bg[w]), bc(bg[x]), parseIntValue(bg[y]), parseIntValue(bg[z]), fromBase58String(bg[A]), fromBase58String(bg[B]))
163230
164231
165-let aE = addressFromStringValue(ay(this, R()))
232+let bh = bf(aY())
166233
167-let aF = {
168- let aG = invoke(aE, "getInFeeREADONLY", [toString(this)], nil)
169- if ($isInstanceOf(aG, "Int"))
170- then aG
171- else throw(($getType(aG) + " couldn't be cast to Int"))
172- }
234+let bi = bh
173235
174-let aH = {
175- let aG = invoke(aE, "getOutFeeREADONLY", [toString(this)], nil)
176- if ($isInstanceOf(aG, "Int"))
177- then aG
178- else throw(($getType(aG) + " couldn't be cast to Int"))
179- }
236+let bj = bi._1
180237
181-let aI = ay(this, ae())
238+let bk = bi._2
182239
183-func aJ () = valueOrElse(getBoolean(aE, ao()), false)
240+let bl = bi._3
241+
242+let bm = bi._4
243+
244+let bn = bi._5
245+
246+let bo = bi._6
247+
248+let bp = bi._7
249+
250+let bq = bi._8
251+
252+let br = bi._9
253+
254+func bs () = split(aJ(aQ, au()), n)
184255
185256
186-func aK () = fromBase58String(ay(aE, ai()))
257+let bt = bs()
258+
259+let bu = valueOrErrorMessage(addressFromString(bt[C]), "Invalid staking contract address")
260+
261+let bv = valueOrErrorMessage(addressFromString(bt[E]), "Invalid slipage contract address")
262+
263+let bw = valueOrErrorMessage(addressFromString(bt[F]), "Invalid gwx contract address")
264+
265+let bx = valueOrErrorMessage(addressFromString(bt[D]), "Invalid gwx contract address")
266+
267+func by (bz,bA,bB,bC,bD,bE,bF,bG,bH,bI) = makeString(["%d%d%d%d%d%d%d%d%d%d", toString(bz), toString(bA), toString(bB), toString(bC), toString(bD), toString(bE), toString(bF), toString(bG), toString(bH), toString(bI)], n)
187268
188269
189-let aL = addressFromStringValue(ay(aE, aq()))
270+func bJ (bK,bL,bM,bC,bF,bG) = makeString(["%d%d%d%d%d%d", toString(bK), toString(bL), toString(bM), toString(bC), toString(bF), toString(bG)], n)
190271
191-func aM () = {
192- let aN = ay(this, ac())
193- let aO = ay(this, ad())
194- let aP = aB(aE, am(aO))
195- let ak = aB(aE, am(aN))
196- split(ay(aE, aj(toString(ak), toString(aP))), l)
272+
273+func bN (bO) = if ((bO == "WAVES"))
274+ then wavesBalance(this).available
275+ else assetBalance(this, fromBase58String(bO))
276+
277+
278+func bP (bQ,bR) = fraction(bQ, c, bR)
279+
280+
281+func bS (bQ,bR,P) = fraction(bQ, c, bR, P)
282+
283+
284+func bT (bU,bV,bW) = {
285+ let bX = fraction((bU - bV), b, bV)
286+ let bY = ((bW - W(bX)) > d)
287+ if (!(bY))
288+ then throw(("Big slpg: " + toString(bX)))
289+ else $Tuple2(bY, min([bU, bV]))
197290 }
198291
199292
200-func aQ (aR) = if ((aR == i))
201- then unit
202- else fromBase58String(aR)
203-
204-
205-func aS (aR) = if ((aR == unit))
206- then i
207- else toBase58String(value(aR))
208-
209-
210-func aT (aU) = $Tuple7(addressFromStringValue(aU[r]), parseIntValue(aU[s]), fromBase58String(aU[t]), aQ(aU[u]), aQ(aU[v]), parseIntValue(aU[w]), parseIntValue(aU[x]))
211-
212-
213-let aV = aT(aM())
214-
215-let aW = aV
216-
217-let aX = aW._1
218-
219-let aY = aW._2
220-
221-let aZ = aW._3
222-
223-let ba = aW._4
224-
225-let bb = aW._5
226-
227-let bc = aW._6
228-
229-let bd = aW._7
230-
231-func be () = split(ay(aE, ah()), l)
232-
233-
234-let bf = be()
235-
236-let bg = valueOrErrorMessage(addressFromString(bf[A]), "Invalid staking contract address")
237-
238-let bh = valueOrErrorMessage(addressFromString(bf[C]), "Invalid slipage contract address")
239-
240-let bi = valueOrErrorMessage(addressFromString(bf[D]), "Invalid gwx contract address")
241-
242-let bj = valueOrErrorMessage(addressFromString(bf[B]), "Invalid gwx contract address")
243-
244-func bk (bl,bm,bn,bo,bp,bq,br,bs,bt,bu) = makeString(["%d%d%d%d%d%d%d%d%d%d", toString(bl), toString(bm), toString(bn), toString(bo), toString(bp), toString(bq), toString(br), toString(bs), toString(bt), toString(bu)], l)
245-
246-
247-func bv (bw,bx,by,bo,br,bs) = makeString(["%d%d%d%d%d%d", toString(bw), toString(bx), toString(by), toString(bo), toString(br), toString(bs)], l)
248-
249-
250-func bz (bA) = if ((bA == "WAVES"))
251- then wavesBalance(this).available
252- else assetBalance(this, fromBase58String(bA))
253-
254-
255-func bB (bC,bD) = fraction(bC, c, bD)
256-
257-
258-func bE (bF,bG,bH) = {
259- let bI = fraction((bF - bG), b, bG)
260- let bJ = ((bH - P(bI)) > d)
261- if (!(bJ))
262- then throw(("Big slpg: " + toString(bI)))
263- else $Tuple2(bJ, min([bF, bG]))
293+func bZ (ca,cb,cc) = {
294+ let bX = fraction(cb, b, ca)
295+ let cd = (cc > bX)
296+ if (if (cd)
297+ then true
298+ else (cb > ca))
299+ then throw(((((((toString(cb) + " ") + toString(ca)) + " ") + toString(bX)) + " ") + toString(cc)))
300+ else cd
264301 }
265302
266303
267-func bK (bL,bM,bN) = {
268- let bI = fraction(bM, b, bL)
269- let bO = (bN > bI)
270- if (if (bO)
271- then true
272- else (bM > bL))
273- then throw(((((((toString(bM) + " ") + toString(bL)) + " ") + toString(bI)) + " ") + toString(bN)))
274- else bO
304+func ce (cf,cg,ch,ci) = {
305+ let cj = H(ch, cf)
306+ let ck = H(ci, cg)
307+ bP(ck, cj)
275308 }
276309
277310
278-func bP (bQ,bR,bS,bT) = {
279- let bU = F(bS, bQ)
280- let bV = F(bT, bR)
281- bB(bV, bU)
311+func cl (ch,ci,cm) = {
312+ let cn = bo
313+ let co = bp
314+ let cp = ce(cn, co, ch, ci)
315+ let bR = H(ch, cn)
316+ let bQ = H(ci, co)
317+ let cq = H(cm, a)
318+ let cr = bP(bR, cq)
319+ let cs = bP(bQ, cq)
320+[cp, cr, cs]
282321 }
283322
284323
285-func bW (bS,bT,bX) = {
286- let bY = aM()
287- let bZ = parseIntValue(bY[w])
288- let ca = parseIntValue(bY[x])
289- let cb = bP(bZ, ca, bS, bT)
290- let bD = F(bS, bZ)
291- let bC = F(bT, ca)
292- let cc = F(bX, a)
293- let cd = bB(bD, cc)
294- let ce = bB(bC, cc)
295-[cb, cd, ce]
324+func ct (ch,ci,cm) = {
325+ let cu = cl(ch, ci, cm)
326+[L(cu[0], a), L(cu[1], a), L(cu[2], a)]
296327 }
297328
298329
299-func cf (bS,bT,bX) = {
300- let cg = bW(bS, bT, bX)
301-[I(cg[0], a), I(cg[1], a), I(cg[2], a)]
330+func cv (cw,ao) = {
331+ let cx = if ((ao == 0))
332+ then 0
333+ else fraction(cw, ao, a)
334+ $Tuple2((cw - cx), cx)
302335 }
303336
304337
305-func ch (ci,cj) = {
306- let ck = if ((cj == 0))
307- then 0
308- else fraction(ci, cj, a)
309- $Tuple2((ci - ck), ck)
310- }
338+func cy (cz) = {
339+ let cA = cz[0]
340+ let cB = cz[1]
341+ let cC = (cA + cB)
342+ if ((cC == e))
343+ then e
344+ else {
345+ let cD = parseIntValue(aU)
346+ let cE = (cD * 2)
347+ let cu = fraction(cA, cB, f)
348+ let cF = fraction(cu, i, f)
349+ let cG = fraction(toBigInt(cE), cC, f)
350+ let cH = toBigInt((cE - 1))
351+ func cI (cJ) = {
352+ let cK = fraction(cJ, cJ, f)
353+ let cL = fraction(cK, cJ, f)
354+ let cM = fraction(cL, f, cF)
355+ fraction((cG + fraction(cM, g, f)), cJ, (fraction(cH, cJ, f) + fraction(h, cM, f)))
356+ }
311357
358+ func cN (cO,cP) = if (cO._2)
359+ then cO
360+ else {
361+ let cJ = cO._1
362+ let cQ = cI(cJ)
363+ let cR = (cQ - value(cJ))
364+ let cS = if ((e > cR))
365+ then -(cR)
366+ else cR
367+ if ((f >= cS))
368+ then $Tuple2(cQ, true)
369+ else $Tuple2(cQ, false)
370+ }
312371
313-func cl (cm,cn,co,cp) = {
314- let bY = aM()
315- let cq = bY[t]
316- let cr = bY[u]
317- let cs = bY[v]
318- let ct = parseIntValue(bY[w])
319- let cu = parseIntValue(bY[x])
320- let cv = bY[s]
321- let cw = valueOrErrorMessage(assetInfo(fromBase58String(cq)), "Wrong LP id").quantity
322- if ((cq != cn))
323- then throw("Wrong pmt asset")
324- else {
325- let cx = bz(cr)
326- let cy = F(cx, ct)
327- let cz = bz(cs)
328- let cA = F(cz, cu)
329- let cB = bB(cA, cy)
330- let cC = I(cB, a)
331- let cD = F(co, a)
332- let cE = F(cw, a)
333- let cF = fraction(cy, cD, cE)
334- let cG = fraction(cA, cD, cE)
335- let cH = I(cF, ct)
336- let cI = I(cG, cu)
337- let cJ = if ((cm == ""))
338- then nil
339- else [ScriptTransfer(cp, cH, if ((cr == "WAVES"))
340- then unit
341- else fromBase58String(cr)), ScriptTransfer(cp, cI, if ((cs == "WAVES"))
342- then unit
343- else fromBase58String(cs)), StringEntry(ab(toString(cp), cm), bv(cH, cI, co, cC, height, lastBlock.timestamp)), IntegerEntry(U(), cC), IntegerEntry(V(height, lastBlock.timestamp), cC)]
344- $Tuple10(cH, cI, cr, cs, cx, cz, cw, cB, cv, cJ)
372+ let cT = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
373+ let cU = {
374+ let cV = cT
375+ let cW = size(cV)
376+ let cX = $Tuple2(cC, false)
377+ func cY (cZ,da) = if ((da >= cW))
378+ then cZ
379+ else cN(cZ, cV[da])
380+
381+ func db (cZ,da) = if ((da >= cW))
382+ then cZ
383+ else throw("List size exceeds 15")
384+
385+ db(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cX, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
386+ }
387+ let cJ = cU._1
388+ let dc = cU._2
389+ if (dc)
390+ then cJ
391+ else throw(("D calculation error, D = " + toString(cJ)))
345392 }
346393 }
347394
348395
349-func cK (cm,bH,cL,cM,cN,cO,cp,cP,cQ,cR,cS,cT,cU) = {
350- let bY = aM()
351- let cq = fromBase58String(bY[t])
352- let cV = bY[u]
353- let cW = bY[v]
354- let cX = bY[y]
355- let cY = bY[z]
356- let cZ = parseIntValue(bY[w])
357- let da = parseIntValue(bY[x])
358- let cv = bY[s]
359- let db = valueOrErrorMessage(assetInfo(cq), "Wr lp as").quantity
360- let cx = if (cP)
361- then bz(cV)
362- else if (if (cR)
363- then (cU == cV)
364- else false)
365- then (bz(cV) - cT)
366- else if (cR)
367- then bz(cV)
368- else (bz(cV) - cL)
369- let cz = if (cP)
370- then bz(cW)
371- else if (if (cR)
372- then (cU == cW)
373- else false)
374- then (bz(cW) - cT)
375- else if (cR)
376- then bz(cW)
377- else (bz(cW) - cN)
378- let dc = F(cL, cZ)
379- let dd = F(cN, da)
380- let de = bB(dd, dc)
381- let cy = F(cx, cZ)
382- let cA = F(cz, da)
383- let df = if ((db == 0))
384- then {
385- let cB = d
386- let dg = d
387- let cc = pow((dc * dd), 0, toBigInt(5), 1, 0, DOWN)
388- $Tuple5(I(cc, a), I(dc, cZ), I(dd, da), bB((cA + dd), (cy + dc)), dg)
389- }
396+func dd (de,df,dg,dh) = {
397+ let di = bl
398+ let dj = toBase58String(value(bm))
399+ let dk = toBase58String(value(bn))
400+ let dl = bo
401+ let dm = bp
402+ let dn = toString(bk)
403+ let do = valueOrErrorMessage(assetInfo(di), "Wrong LP id").quantity
404+ if ((toBase58String(di) != df))
405+ then throw("Wrong pmt asset")
390406 else {
391- let cB = bB(cA, cy)
392- let dh = fraction(P((cB - de)), c, cB)
393- let dg = F(bH, a)
394- if (if (if (cS)
395- then (cB != d)
396- else false)
397- then (dh > dg)
398- else false)
399- then throw(((("Price slippage " + toString(dh)) + " > ") + toString(dg)))
400- else {
401- let di = F(db, a)
402- let dj = fraction(dc, cB, c)
403- let dk = fraction(dd, c, cB)
404- let dl = if ((dj > dd))
405- then $Tuple2(dk, dd)
406- else $Tuple2(dc, dj)
407- let dm = dl._1
408- let dn = dl._2
409- let cc = fraction(di, dn, cA)
410- $Tuple5(I(cc, a), I(dm, cZ), I(dn, da), cB, dg)
411- }
412- }
413- let do = df._1
414- let dp = df._2
415- let dq = df._3
416- let cC = I(df._4, a)
417- let dr = I(df._5, a)
418- if ((0 >= do))
419- then throw("LP <= 0")
420- else {
421- let ds = if (!(cQ))
422- then 0
423- else do
424- let dt = (cL - dp)
425- let du = (cN - dq)
426- let dv = if (if (cR)
427- then (cU == cV)
428- else false)
429- then $Tuple2(cT, 0)
430- else if (if (cR)
431- then (cU == cW)
432- else false)
433- then $Tuple2(0, cT)
434- else $Tuple2(dp, dq)
435- let dw = dv._1
436- let dx = dv._2
437- let dy = [IntegerEntry(U(), cC), IntegerEntry(V(height, lastBlock.timestamp), cC), StringEntry(Y(cp, cm), bk(dw, dx, ds, cC, bH, dr, height, lastBlock.timestamp, dt, du))]
438- $Tuple13(do, ds, cC, cx, cz, db, cq, cv, dy, dt, du, cM, cO)
407+ let dp = bN(dj)
408+ let dq = H(dp, dl)
409+ let dr = bN(dk)
410+ let ds = H(dr, dm)
411+ let dt = bP(ds, dq)
412+ let du = L(dt, a)
413+ let dv = H(dg, a)
414+ let dw = H(do, a)
415+ let dx = fraction(dq, dv, dw)
416+ let dy = fraction(ds, dv, dw)
417+ let dz = O(dx, dl, FLOOR)
418+ let dA = O(dy, dm, FLOOR)
419+ let dB = if ((de == ""))
420+ then nil
421+ else [ScriptTransfer(dh, dz, if ((dj == "WAVES"))
422+ then unit
423+ else fromBase58String(dj)), ScriptTransfer(dh, dA, if ((dk == "WAVES"))
424+ then unit
425+ else fromBase58String(dk)), StringEntry(ai(toString(dh), de), bJ(dz, dA, dg, du, height, lastBlock.timestamp)), IntegerEntry(ab(), du), IntegerEntry(ac(height, lastBlock.timestamp), du)]
426+ $Tuple10(dz, dA, dj, dk, dp, dr, do, dt, dn, dB)
439427 }
440428 }
441429
442430
443-func dz (dA) = {
444- let bY = aM()
445- let dB = bY[u]
446- let dC = bY[v]
447- let cv = parseIntValue(bY[s])
448- let bZ = parseIntValue(bY[w])
449- let ca = parseIntValue(bY[x])
450- let dD = bz(dB)
451- let dE = bz(dC)
452- let cB = if ((dA.orderType == Buy))
453- then bP(bZ, ca, (dD + dA.amount), dE)
454- else bP(bZ, ca, (dD - dA.amount), dE)
455- let cC = I(cB, a)
456- if (if (if (aJ())
457- then true
458- else (cv == p))
459- then true
460- else (cv == q))
461- then throw("Admin blocked")
431+func dC (de,bW,dD,dE,dF,dG,dh,dH,dI,dJ,dK,dL,dM) = {
432+ let di = bl
433+ let dN = toBase58String(value(bm))
434+ let dO = toBase58String(value(bn))
435+ let dP = bq
436+ let dQ = br
437+ let dR = bo
438+ let dS = bp
439+ let dn = toString(bk)
440+ let dT = valueOrErrorMessage(assetInfo(di), "Wr lp as").quantity
441+ let dp = if (dH)
442+ then bN(dN)
443+ else if (if (dJ)
444+ then (dM == dN)
445+ else false)
446+ then (bN(dN) - dL)
447+ else if (dJ)
448+ then bN(dN)
449+ else (bN(dN) - dD)
450+ let dr = if (dH)
451+ then bN(dO)
452+ else if (if (dJ)
453+ then (dM == dO)
454+ else false)
455+ then (bN(dO) - dL)
456+ else if (dJ)
457+ then bN(dO)
458+ else (bN(dO) - dF)
459+ let dU = H(dD, dR)
460+ let dV = H(dF, dS)
461+ let dW = bP(dV, dU)
462+ let dq = H(dp, dR)
463+ let ds = H(dr, dS)
464+ let cb = cy([dq, ds])
465+ let dX = if ((dT == 0))
466+ then {
467+ let ca = cy([(dq + dU), (ds + dV)])
468+ let dY = if ((ca > cb))
469+ then true
470+ else throw("D1 should be greater than D0")
471+ if ((dY == dY))
472+ then {
473+ let dt = d
474+ let dZ = d
475+ let cq = ca
476+ $Tuple5(L(cq, a), L(dU, dR), L(dV, dS), bP((ds + dV), (dq + dU)), dZ)
477+ }
478+ else throw("Strict value is not equal to itself.")
479+ }
462480 else {
463- let dF = dA.assetPair.amountAsset
464- let dG = if ((dF == unit))
465- then "WAVES"
466- else toBase58String(value(dF))
467- let dH = dA.assetPair.priceAsset
468- let dI = if ((dH == unit))
469- then "WAVES"
470- else toBase58String(value(dH))
471- if (if ((dG != dB))
472- then true
473- else (dI != dC))
474- then throw("Wr assets")
481+ let dt = bP(ds, dq)
482+ let ea = fraction(W((dt - dW)), c, dt)
483+ let dZ = H(bW, a)
484+ if (if (if (dK)
485+ then (dt != d)
486+ else false)
487+ then (ea > dZ)
488+ else false)
489+ then throw(((("Price slippage " + toString(ea)) + " > ") + toString(dZ)))
475490 else {
476- let dJ = dA.price
477- let da = fraction(a, ca, bZ)
478- let dK = L(dJ, a, da)
479- let dL = if ((dA.orderType == Buy))
480- then (cC >= dK)
481- else (dK >= cC)
482- true
491+ let eb = H(dT, a)
492+ let ec = fraction(dU, bS(ds, dq, CEILING), c, CEILING)
493+ let ed = fraction(dV, c, bS(ds, dq, FLOOR), CEILING)
494+ let ee = if ((ec > dV))
495+ then $Tuple2(ed, dV)
496+ else $Tuple2(dU, ec)
497+ let ef = ee._1
498+ let eg = ee._2
499+ let ca = cy([(dq + ef), (ds + eg)])
500+ let dY = if ((ca > cb))
501+ then true
502+ else throw("D1 should be greater than D0")
503+ if ((dY == dY))
504+ then {
505+ let cq = fraction(eb, (ca - cb), cb)
506+ $Tuple5(O(cq, a, FLOOR), O(ef, dR, CEILING), O(eg, dS, CEILING), dt, dZ)
507+ }
508+ else throw("Strict value is not equal to itself.")
483509 }
510+ }
511+ let eh = dX._1
512+ let ei = dX._2
513+ let ej = dX._3
514+ let du = L(dX._4, a)
515+ let ek = L(dX._5, a)
516+ if ((0 >= eh))
517+ then throw("LP <= 0")
518+ else {
519+ let el = if (!(dI))
520+ then 0
521+ else eh
522+ let em = (dD - ei)
523+ let en = (dF - ej)
524+ let eo = if (if (dJ)
525+ then (dM == dN)
526+ else false)
527+ then $Tuple2(dL, 0)
528+ else if (if (dJ)
529+ then (dM == dO)
530+ else false)
531+ then $Tuple2(0, dL)
532+ else $Tuple2(ei, ej)
533+ let ep = eo._1
534+ let eq = eo._2
535+ let er = [IntegerEntry(ab(), du), IntegerEntry(ac(height, lastBlock.timestamp), du), StringEntry(af(dh, de), by(ep, eq, el, du, bW, ek, height, lastBlock.timestamp, em, en))]
536+ $Tuple13(eh, el, du, dp, dr, dT, di, dn, er, em, en, dE, dG)
484537 }
485538 }
486539
487540
488-func dM (dN) = if ((size(dN.payments) != 1))
541+func es (cz,cP,et) = {
542+ let eu = g
543+ let ev = cz[if ((cP == 0))
544+ then 1
545+ else 0]
546+ let ew = parseBigIntValue(l)
547+ let cD = (parseBigIntValue(aU) * ew)
548+ let cC = ev
549+ let cE = (cD * eu)
550+ let ex = (((((et * et) / (ev * eu)) * et) * ew) / (cE * eu))
551+ let ey = ((cC + ((et * ew) / cE)) - et)
552+ func cN (cO,ez) = {
553+ let eA = cO
554+ let eB = eA._1
555+ let dc = eA._2
556+ if ((dc != unit))
557+ then cO
558+ else {
559+ let eC = (((eB * eB) + ex) / ((g * eB) + ey))
560+ let eD = X((eC - value(eB)))
561+ if ((f >= eD))
562+ then $Tuple2(eC, ez)
563+ else $Tuple2(eC, unit)
564+ }
565+ }
566+
567+ let cT = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
568+ let eE = {
569+ let cV = cT
570+ let cW = size(cV)
571+ let cX = $Tuple2(et, unit)
572+ func cY (cZ,da) = if ((da >= cW))
573+ then cZ
574+ else cN(cZ, cV[da])
575+
576+ func db (cZ,da) = if ((da >= cW))
577+ then cZ
578+ else throw("List size exceeds 15")
579+
580+ db(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cX, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
581+ }
582+ let eB = eE._1
583+ let dc = eE._2
584+ if ((dc != unit))
585+ then eB
586+ else throw(("Y calculation error, Y = " + toString(eB)))
587+ }
588+
589+
590+func eF (eG,eH,eI) = {
591+ let eJ = fraction(cy([K(eG, toBigInt(bo)), K(eH, toBigInt(bp))]), c, eI)
592+ if ((eI == e))
593+ then e
594+ else eJ
595+ }
596+
597+
598+func eK (eL,eM,eN) = {
599+ let eO = (toBigInt(bN(be(bm))) - eL)
600+ let eP = (toBigInt(bN(be(bn))) - eM)
601+ let eQ = (toBigInt(value(assetInfo(bl)).quantity) - eN)
602+ let eR = eF(eO, eP, eQ)
603+ eR
604+ }
605+
606+
607+func eS (eT,eU,eN) = {
608+ let eO = (bN(be(bm)) + eT)
609+ let eP = (bN(be(bn)) + eU)
610+ let eQ = (value(assetInfo(bl)).quantity + eN)
611+ let eJ = eF(toBigInt(eO), toBigInt(eP), toBigInt(eQ))
612+ let eV = [IntegerEntry(aq, height), StringEntry(ap, toString(eJ))]
613+ $Tuple2(eV, eJ)
614+ }
615+
616+
617+func eW (eX,eJ) = if ((eJ >= eX))
618+ then true
619+ else aN("updated DLp lower than current DLp")
620+
621+
622+func eY (eZ) = {
623+ let eO = bN(be(bm))
624+ let eP = bN(be(bn))
625+ let fa = eZ.amount
626+ let fb = fraction(eZ.amount, eZ.price, a, FLOOR)
627+ let fc = if ((eZ.orderType == Buy))
628+ then $Tuple2(fa, -(fb))
629+ else $Tuple2(-(fa), fb)
630+ let eT = fc._1
631+ let eU = fc._2
632+ if (if (if (aV())
633+ then true
634+ else (bk == r))
635+ then true
636+ else (bk == s))
637+ then throw("Admin blocked")
638+ else if (if ((eZ.assetPair.amountAsset != bm))
639+ then true
640+ else (eZ.assetPair.priceAsset != bn))
641+ then throw("Wr assets")
642+ else {
643+ let fd = parseBigIntValue(valueOrElse(getString(this, ap), "0"))
644+ let fe = eS(eT, eU, 0)
645+ let ff = fe._1
646+ let fg = fe._2
647+ let fh = (fg >= fd)
648+ let fi = makeString(["dLp=", toString(fd), " dLpNew=", toString(fg), " amountAssetBalance=", toString(eO), " priceAssetBalance=", toString(eP), " amountAssetBalanceDelta=", toString(eT), " priceAssetBalanceDelta=", toString(eU), " height=", toString(height)], "")
649+ $Tuple2(fh, fi)
650+ }
651+ }
652+
653+
654+func fj (cP) = if ((size(cP.payments) != 1))
489655 then throw("1 pmnt exp")
490656 else {
491- let dO = value(dN.payments[0])
492- let cn = value(dO.assetId)
493- let cT = dO.amount
494- let df = cl(toBase58String(dN.transactionId), toBase58String(cn), cT, dN.caller)
495- let cH = df._1
496- let cI = df._2
497- let cv = parseIntValue(df._9)
498- let cJ = df._10
499- if (if (aJ())
657+ let fk = value(cP.payments[0])
658+ let df = value(fk.assetId)
659+ let dL = fk.amount
660+ let dX = dd(toBase58String(cP.transactionId), toBase58String(df), dL, cP.caller)
661+ let dz = dX._1
662+ let dA = dX._2
663+ let dn = parseIntValue(dX._9)
664+ let dB = dX._10
665+ if (if (aV())
500666 then true
501- else (cv == q))
502- then throw(("Admin blocked: " + toString(cv)))
503- else $Tuple5(cH, cI, cT, cn, cJ)
667+ else (dn == s))
668+ then throw(("Admin blocked: " + toString(dn)))
669+ else $Tuple5(dz, dA, dL, df, dB)
504670 }
505671
506672
507-func dP (dQ,aa,dR,dS,bH,cQ,cR,cS,cT,cU) = {
508- let df = cK(aa, bH, value(dR).amount, value(dR).assetId, value(dS).amount, value(dS).assetId, dQ, (aa == ""), cQ, cR, cS, cT, cU)
509- let cv = parseIntValue(df._8)
510- if (if (if (aJ())
673+func fl (fm,ah,fn,fo,bW,dI,dJ,dK,dL,dM) = {
674+ let dX = dC(ah, bW, value(fn).amount, value(fn).assetId, value(fo).amount, value(fo).assetId, fm, (ah == ""), dI, dJ, dK, dL, dM)
675+ let dn = parseIntValue(dX._8)
676+ if (if (if (aV())
511677 then true
512- else (cv == o))
678+ else (dn == q))
513679 then true
514- else (cv == q))
515- then throw(("Blocked:" + toString(cv)))
516- else df
680+ else (dn == s))
681+ then throw(("Blocked:" + toString(dn)))
682+ else dX
517683 }
518684
519685
520-func dT (dU) = {
521- let dV = g
522- let dW = dU[0]
523- let dX = dU[1]
524- let dY = parseBigIntValue(j)
525- let dZ = (parseBigIntValue(aI) * dY)
526- let ea = (dW + dX)
527- if ((ea == e))
528- then e
529- else {
530- let eb = (dZ * dV)
531- let ec = (((dW * dX) * dV) * dV)
532- let ed = ((eb * ea) / dY)
533- let ee = (eb - dY)
534- let ef = (dV + f)
535- func eg (eh,ei) = {
536- let ej = eh
537- let ek = ej._1
538- let el = ej._2
539- if ((el != unit))
540- then eh
541- else {
542- let em = (((ek * ek) * ek) / ec)
543- let en = (((ed + (em * dV)) * ek) / (((ee * ek) / dY) + (ef * em)))
544- let eo = Q((en - value(ek)))
545- if ((f >= eo))
546- then $Tuple2(en, ei)
547- else $Tuple2(en, unit)
548- }
549- }
550-
551- let ep = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24]
552- let eq = {
553- let er = ep
554- let es = size(er)
555- let et = $Tuple2(ea, unit)
556- func eu (ev,ew) = if ((ew >= es))
557- then ev
558- else eg(ev, er[ew])
559-
560- func ex (ev,ew) = if ((ew >= es))
561- then ev
562- else throw("List size exceeds 25")
563-
564- ex(eu(eu(eu(eu(eu(eu(eu(eu(eu(eu(eu(eu(eu(eu(eu(eu(eu(eu(eu(eu(eu(eu(eu(eu(eu(et, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25)
565- }
566- let ek = eq._1
567- let el = eq._2
568- if ((el != unit))
569- then ek
570- else throw(("D calculation error, D = " + toString(ek)))
571- }
572- }
573-
574-
575-func ey (dU,dN,ez) = {
576- let dV = g
577- let eA = dU[if ((dN == 0))
578- then 1
579- else 0]
580- let dY = parseBigIntValue(j)
581- let dZ = (parseBigIntValue(aI) * dY)
582- let ea = eA
583- let eb = (dZ * dV)
584- let eB = (((((ez * ez) / (eA * dV)) * ez) * dY) / (eb * dV))
585- let eC = ((ea + ((ez * dY) / eb)) - ez)
586- func eg (eh,ei) = {
587- let eD = eh
588- let eE = eD._1
589- let el = eD._2
590- if ((el != unit))
591- then eh
592- else {
593- let eF = (((eE * eE) + eB) / ((g * eE) + eC))
594- let eG = Q((eF - value(eE)))
595- if ((f >= eG))
596- then $Tuple2(eF, ei)
597- else $Tuple2(eF, unit)
598- }
599- }
600-
601- let ep = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
602- let eH = {
603- let er = ep
604- let es = size(er)
605- let et = $Tuple2(ez, unit)
606- func eu (ev,ew) = if ((ew >= es))
607- then ev
608- else eg(ev, er[ew])
609-
610- func ex (ev,ew) = if ((ew >= es))
611- then ev
612- else throw("List size exceeds 15")
613-
614- ex(eu(eu(eu(eu(eu(eu(eu(eu(eu(eu(eu(eu(eu(eu(eu(et, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
615- }
616- let eE = eH._1
617- let el = eH._2
618- if ((el != unit))
619- then eE
620- else throw(("Y calculation error, Y = " + toString(eE)))
621- }
622-
623-
624-func eI (eJ,cn,cp,aa,eK) = {
625- let aU = aM()
626- let cr = aU[u]
627- let cs = aU[v]
628- let cq = aU[t]
629- let cZ = parseIntValue(aU[w])
630- let da = parseIntValue(aU[x])
631- let eL = toBigInt(valueOrErrorMessage(assetInfo(fromBase58String(cq)), "invalid lp asset").quantity)
632- let eM = if ((eL > e))
686+func fp (fq,df,dh,ah,fr) = {
687+ let dj = toBase58String(value(bm))
688+ let dk = toBase58String(value(bn))
689+ let di = bl
690+ let dR = bo
691+ let dS = bp
692+ let eQ = toBigInt(valueOrErrorMessage(assetInfo(di), "invalid lp asset").quantity)
693+ let fs = if ((eQ > e))
633694 then true
634695 else throw("initial deposit requires all coins")
635- if ((eM == eM))
696+ if ((fs == fs))
636697 then {
637- let cx = bz(cr)
638- let cz = bz(cs)
639- let eN = if ((aa == ""))
640- then $Tuple2(cx, cz)
641- else if ((cn == cr))
642- then if ((eJ > cx))
698+ let dp = bN(dj)
699+ let dr = bN(dk)
700+ let ft = if ((ah == ""))
701+ then $Tuple2(dp, dr)
702+ else if ((df == dj))
703+ then if ((fq > dp))
643704 then throw("invalid payment amount")
644- else $Tuple2((cx - eJ), cz)
645- else if ((cn == cs))
646- then if ((eJ > cz))
705+ else $Tuple2((dp - fq), dr)
706+ else if ((df == dk))
707+ then if ((fq > dr))
647708 then throw("invalid payment amount")
648- else $Tuple2(cx, (cz - eJ))
709+ else $Tuple2(dp, (dr - fq))
649710 else throw("wrong pmtAssetId")
650- let eO = eN._1
651- let eP = eN._2
652- let eQ = if ((cn == cr))
653- then $Tuple2(eJ, 0)
654- else if ((cn == cs))
655- then $Tuple2(0, eJ)
711+ let fu = ft._1
712+ let fv = ft._2
713+ let fw = if ((df == dj))
714+ then $Tuple2(fq, 0)
715+ else if ((df == dk))
716+ then $Tuple2(0, fq)
656717 else throw("invalid payment")
657- let eR = eQ._1
658- let eS = eQ._2
659- let eT = if (eK)
660- then $Tuple3(ch(eR, aF)._1, ch(eS, aF)._1, ch(eJ, aF)._2)
661- else $Tuple3(eR, eS, 0)
662- let eU = eT._1
663- let eV = eT._2
664- let ck = eT._3
665- let eW = (eO + eU)
666- let eX = (eP + eV)
667- let bM = dT([toBigInt(eO), toBigInt(eP)])
668- let bL = dT([toBigInt(eW), toBigInt(eX)])
669- let eY = if ((bL > bM))
718+ let fx = fw._1
719+ let fy = fw._2
720+ let fz = if (fr)
721+ then $Tuple3(cv(fx, aR)._1, cv(fy, aR)._1, cv(fq, aR)._2)
722+ else $Tuple3(fx, fy, 0)
723+ let fA = fz._1
724+ let fB = fz._2
725+ let cx = fz._3
726+ let fC = (fu + fA)
727+ let fD = (fv + fB)
728+ let cb = cy([H(fu, bo), H(fv, bp)])
729+ let ca = cy([H(fC, bo), H(fD, bp)])
730+ let dY = if ((ca > cb))
670731 then true
671732 else throw()
672- if ((eY == eY))
733+ if ((dY == dY))
673734 then {
674- let eZ = fraction(eL, (bL - bM), bM)
675- let cC = I(bB(F(eX, da), F(eW, cZ)), a)
676- let dy = [IntegerEntry(U(), cC), IntegerEntry(V(height, lastBlock.timestamp), cC), StringEntry(Y(cp, aa), bk(eR, eS, toInt(eZ), cC, 0, 0, height, lastBlock.timestamp, 0, 0))]
677- let fa = fraction(eP, a, eO)
678- let fb = fraction(eJ, a, (fa + a))
679- let fc = (eJ - fb)
680- let fd = fraction(eL, toBigInt(fc), toBigInt(eP))
681- let fe = toInt(fraction((eZ - fd), b, fd))
682- $Tuple4(toInt(eZ), dy, ck, fe)
735+ let fE = fraction(eQ, (ca - cb), cb, FLOOR)
736+ let du = L(bP(H(fD, dS), H(fC, dR)), a)
737+ let er = [IntegerEntry(ab(), du), IntegerEntry(ac(height, lastBlock.timestamp), du), StringEntry(af(dh, ah), by(fx, fy, toInt(fE), du, 0, 0, height, lastBlock.timestamp, 0, 0))]
738+ let fF = fraction(fv, a, fu)
739+ let fG = fraction(fq, a, (fF + a))
740+ let fH = (fq - fG)
741+ let fI = fraction(eQ, toBigInt(fH), toBigInt(fv))
742+ let fJ = toInt(fraction((fE - fI), b, fI))
743+ $Tuple4(toInt(fE), er, cx, fJ)
683744 }
684745 else throw("Strict value is not equal to itself.")
685746 }
687748 }
688749
689750
690-func ff (fg,fh,fi,dQ,fj,fk) = {
691- let aU = aM()
692- let cq = aU[t]
693- let cr = aU[u]
694- let cs = aU[v]
695- let fl = parseIntValue(aU[w])
696- let fm = parseIntValue(aU[x])
697- let fn = aU[s]
698- let cp = if ((dQ == bj))
699- then fj
700- else dQ
701- let dO = value(fi[0])
702- let cn = value(dO.assetId)
703- let cT = dO.amount
704- let cm = toBase58String(fk)
705- if ((cq != toBase58String(cn)))
706- then throw("Wrong LP")
707- else {
708- let cx = bz(cr)
709- let cz = bz(cs)
710- let fo = {
711- let aG = invoke(this, "getOneTknV2READONLY", [fg, cT], nil)
712- if ($isInstanceOf(aG, "(Int, Int)"))
713- then aG
714- else throw(($getType(aG) + " couldn't be cast to (Int, Int)"))
715- }
716- if ((fo == fo))
717- then {
718- let ck = fo._2
719- let fp = fo._1
720- let fq = if (if ((fh > 0))
721- then (fh > fp)
722- else false)
723- then aC(makeString(["amount to receive is less than ", toString(fh)], ""))
724- else fp
725- let fr = if ((fg == cr))
726- then $Tuple4(fq, 0, ((cx - fq) - ck), cz)
727- else if ((fg == cs))
728- then $Tuple4(0, fq, cx, ((cz - fq) - ck))
729- else throw("invalid out asset id")
730- let fs = fr._1
731- let ft = fr._2
732- let eW = fr._3
733- let eX = fr._4
734- let fu = bB(F(eX, fm), F(eW, fl))
735- let fv = I(fu, a)
736- let fw = if ((fg == "WAVES"))
737- then unit
738- else fromBase58String(fg)
739- let fx = if ((ck > 0))
740- then [ScriptTransfer(aL, ck, fw)]
741- else nil
742- let cJ = ([ScriptTransfer(cp, fq, fw), StringEntry(ab(toString(cp), cm), bv(fs, ft, cT, fv, height, lastBlock.timestamp)), IntegerEntry(U(), fv), IntegerEntry(V(height, lastBlock.timestamp), fv)] ++ fx)
743- if ((cJ == cJ))
751+func fK (fL,fM,fN,fm,fO,fP) = {
752+ let di = toBase58String(value(bl))
753+ let dj = toBase58String(value(bm))
754+ let dk = toBase58String(value(bn))
755+ let fQ = bo
756+ let fR = bp
757+ let fS = bk
758+ let dh = if ((fm == bx))
759+ then fO
760+ else fm
761+ let fk = value(fN[0])
762+ let df = value(fk.assetId)
763+ let dL = fk.amount
764+ let eR = eK(e, e, e)
765+ if ((eR == eR))
766+ then {
767+ let de = toBase58String(fP)
768+ if ((di != toBase58String(df)))
769+ then throw("Wrong LP")
770+ else {
771+ let dp = bN(dj)
772+ let dr = bN(dk)
773+ let fT = {
774+ let aS = invoke(this, "getOneTknV2READONLY", [fL, dL], nil)
775+ if ($isInstanceOf(aS, "(Int, Int)"))
776+ then aS
777+ else throw(($getType(aS) + " couldn't be cast to (Int, Int)"))
778+ }
779+ if ((fT == fT))
744780 then {
745- let fy = invoke(aE, "burn", [cT], [AttachedPayment(cn, cT)])
746- if ((fy == fy))
747- then $Tuple2(cJ, fq)
781+ let cx = fT._2
782+ let fU = fT._1
783+ let fV = if (if ((fM > 0))
784+ then (fM > fU)
785+ else false)
786+ then aN(makeString(["amount to receive is less than ", toString(fM)], ""))
787+ else fU
788+ let fW = if ((fL == dj))
789+ then $Tuple4(fV, 0, ((dp - fV) - cx), dr)
790+ else if ((fL == dk))
791+ then $Tuple4(0, fV, dp, ((dr - fV) - cx))
792+ else throw("invalid out asset id")
793+ let fX = fW._1
794+ let fY = fW._2
795+ let fC = fW._3
796+ let fD = fW._4
797+ let fZ = bP(H(fD, fR), H(fC, fQ))
798+ let ga = L(fZ, a)
799+ let gb = if ((fL == "WAVES"))
800+ then unit
801+ else fromBase58String(fL)
802+ let gc = if ((cx > 0))
803+ then [ScriptTransfer(aX, cx, gb)]
804+ else nil
805+ let dB = ([ScriptTransfer(dh, fV, gb), StringEntry(ai(toString(dh), de), bJ(fX, fY, dL, ga, height, lastBlock.timestamp)), IntegerEntry(ab(), ga), IntegerEntry(ac(height, lastBlock.timestamp), ga)] ++ gc)
806+ if ((dB == dB))
807+ then {
808+ let gd = invoke(aQ, "burn", [dL], [AttachedPayment(df, dL)])
809+ if ((gd == gd))
810+ then {
811+ let ge = {
812+ let gf = if ((this == aX))
813+ then 0
814+ else cx
815+ let gg = if ((bc(fL) == bm))
816+ then true
817+ else false
818+ if (gg)
819+ then $Tuple2(-((fU + gf)), 0)
820+ else $Tuple2(0, -((fU + gf)))
821+ }
822+ let eT = ge._1
823+ let eU = ge._2
824+ let gh = eS(eT, eU, 0)
825+ let gi = gh._1
826+ let eJ = gh._2
827+ let gj = eW(eR, eJ)
828+ if ((gj == gj))
829+ then $Tuple2((dB ++ gi), fV)
830+ else throw("Strict value is not equal to itself.")
831+ }
832+ else throw("Strict value is not equal to itself.")
833+ }
748834 else throw("Strict value is not equal to itself.")
749835 }
750836 else throw("Strict value is not equal to itself.")
751837 }
752- else throw("Strict value is not equal to itself.")
753838 }
839+ else throw("Strict value is not equal to itself.")
754840 }
755841
756842
757-func fz () = {
758- let aw = getString(S())
759- if ($isInstanceOf(aw, "String"))
843+func gk () = {
844+ let gl = getString(Z())
845+ if ($isInstanceOf(gl, "String"))
760846 then {
761- let ea = aw
762- fromBase58String(ea)
847+ let cC = gl
848+ fromBase58String(cC)
763849 }
764- else if ($isInstanceOf(aw, "Unit"))
850+ else if ($isInstanceOf(gl, "Unit"))
765851 then unit
766852 else throw("Match error")
767853 }
768854
769855
770-func fA () = {
771- let aw = getString(T())
772- if ($isInstanceOf(aw, "String"))
856+func gm () = {
857+ let gl = getString(aa())
858+ if ($isInstanceOf(gl, "String"))
773859 then {
774- let ea = aw
775- fromBase58String(ea)
860+ let cC = gl
861+ fromBase58String(cC)
776862 }
777- else if ($isInstanceOf(aw, "Unit"))
863+ else if ($isInstanceOf(gl, "Unit"))
778864 then unit
779865 else throw("Match error")
780866 }
781867
782868
783-let fB = throw("Permission denied")
869+let gn = throw("Permission denied")
784870
785-func fC (dN) = {
786- let aw = fz()
787- if ($isInstanceOf(aw, "ByteVector"))
871+func go (cP) = {
872+ let gl = gk()
873+ if ($isInstanceOf(gl, "ByteVector"))
788874 then {
789- let fD = aw
790- (dN.callerPublicKey == fD)
875+ let gp = gl
876+ (cP.callerPublicKey == gp)
791877 }
792- else if ($isInstanceOf(aw, "Unit"))
793- then (dN.caller == this)
878+ else if ($isInstanceOf(gl, "Unit"))
879+ then (cP.caller == this)
794880 else throw("Match error")
795881 }
796882
797883
798-func fE (dN) = {
799- let aw = fz()
800- if ($isInstanceOf(aw, "ByteVector"))
884+func gq (cP) = {
885+ let gl = gk()
886+ if ($isInstanceOf(gl, "ByteVector"))
801887 then {
802- let fD = aw
803- if ((dN.callerPublicKey == fD))
888+ let gp = gl
889+ if ((cP.callerPublicKey == gp))
804890 then true
805- else fB
891+ else gn
806892 }
807- else if ($isInstanceOf(aw, "Unit"))
808- then if ((dN.caller == this))
893+ else if ($isInstanceOf(gl, "Unit"))
894+ then if ((cP.caller == this))
809895 then true
810- else fB
896+ else gn
811897 else throw("Match error")
812898 }
813899
814900
815-func fF (fG,ez,fH) = {
816- let aU = aM()
817- let cr = aU[u]
818- let cs = aU[v]
819- let dV = g
820- let dY = parseBigIntValue(j)
821- let dZ = (parseBigIntValue(aI) * dY)
822- let dU = if ((fG == false))
823- then [(toBigInt(bz(cr)) + fH), toBigInt(bz(cs))]
824- else [(toBigInt(bz(cs)) + fH), toBigInt(bz(cr))]
825- let eA = dU[0]
826- let ea = eA
827- let eb = (dZ * dV)
828- let eB = (((((ez * ez) / (eA * dV)) * ez) * dY) / (eb * dV))
829- let eC = ((ea + ((ez * dY) / eb)) - ez)
830- func eg (eh,ei) = {
831- let fI = eh
832- let eE = fI._1
833- let el = fI._2
834- if ((el != unit))
835- then eh
901+func gr (gs,et,gt) = {
902+ let bg = aY()
903+ let dj = bg[w]
904+ let dk = bg[x]
905+ let eu = g
906+ let ew = parseBigIntValue(l)
907+ let cD = (parseBigIntValue(aU) * ew)
908+ let cz = if ((gs == false))
909+ then [(toBigInt(bN(dj)) + gt), toBigInt(bN(dk))]
910+ else [(toBigInt(bN(dk)) + gt), toBigInt(bN(dj))]
911+ let ev = cz[0]
912+ let cC = ev
913+ let cE = (cD * eu)
914+ let ex = (((((et * et) / (ev * eu)) * et) * ew) / (cE * eu))
915+ let ey = ((cC + ((et * ew) / cE)) - et)
916+ func cN (cO,ez) = {
917+ let gu = cO
918+ let eB = gu._1
919+ let dc = gu._2
920+ if ((dc != unit))
921+ then cO
836922 else {
837- let eF = (((eE * eE) + eB) / ((g * eE) + eC))
838- let eG = Q((eF - value(eE)))
839- if ((f >= eG))
840- then $Tuple2(eF, ei)
841- else $Tuple2(eF, unit)
923+ let eC = (((eB * eB) + ex) / ((g * eB) + ey))
924+ let eD = X((eC - value(eB)))
925+ if ((f >= eD))
926+ then $Tuple2(eC, ez)
927+ else $Tuple2(eC, unit)
842928 }
843929 }
844930
845- let ep = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
846- let fJ = {
847- let er = ep
848- let es = size(er)
849- let et = $Tuple2(ez, unit)
850- func eu (ev,ew) = if ((ew >= es))
851- then ev
852- else eg(ev, er[ew])
931+ let cT = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
932+ let gv = {
933+ let cV = cT
934+ let cW = size(cV)
935+ let cX = $Tuple2(et, unit)
936+ func cY (cZ,da) = if ((da >= cW))
937+ then cZ
938+ else cN(cZ, cV[da])
853939
854- func ex (ev,ew) = if ((ew >= es))
855- then ev
940+ func db (cZ,da) = if ((da >= cW))
941+ then cZ
856942 else throw("List size exceeds 15")
857943
858- ex(eu(eu(eu(eu(eu(eu(eu(eu(eu(eu(eu(eu(eu(eu(eu(et, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
944+ db(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cX, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
859945 }
860- let eE = fJ._1
861- let el = fJ._2
862- if ((el != unit))
863- then eE
864- else throw(("Y calculation error, Y = " + toString(eE)))
946+ let eB = gv._1
947+ let dc = gv._2
948+ if ((dc != unit))
949+ then eB
950+ else throw(("Y calculation error, Y = " + toString(eB)))
865951 }
866952
867953
868-@Callable(dN)
869-func calculateAmountOutForSwapREADONLY (fK,fG) = {
870- let fL = if ((fG == false))
954+@Callable(cP)
955+func calculateAmountOutForSwapREADONLY (gw,gs) = {
956+ let gx = if ((gs == false))
871957 then {
872- let fM = ay(this, ad())
873- let fH = (toBigInt(bz(ay(this, ac()))) + toBigInt(fK))
874- $Tuple2(fM, fH)
958+ let gy = aJ(this, ak())
959+ let gt = (toBigInt(bN(aJ(this, aj()))) + toBigInt(gw))
960+ $Tuple2(gy, gt)
875961 }
876962 else {
877- let fM = ay(this, ac())
878- let fH = (toBigInt(bz(ay(this, ad()))) + toBigInt(fK))
879- $Tuple2(fM, fH)
963+ let gy = aJ(this, aj())
964+ let gt = (toBigInt(bN(aJ(this, ak()))) + toBigInt(gw))
965+ $Tuple2(gy, gt)
880966 }
881- let fM = fL._1
882- let fH = fL._2
883- let aU = aM()
884- let cr = aU[u]
885- let cs = aU[v]
886- let dU = [toBigInt(bz(cr)), toBigInt(bz(cs))]
887- let ez = dT(dU)
888- let eE = fF(fG, ez, toBigInt(fK))
889- let fN = ((toBigInt(bz(fM)) - eE) - toBigInt(1))
890- let fO = max([0, toInt(fN)])
891- let fP = if ((fG == false))
892- then [(toBigInt(bz(cr)) + toBigInt(fK)), (toBigInt(bz(cs)) - fN)]
893- else [(toBigInt(bz(cr)) - fN), (toBigInt(bz(cs)) + toBigInt(fK))]
894- let fQ = dT(fP)
895- let eY = if ((fQ >= ez))
967+ let gy = gx._1
968+ let gt = gx._2
969+ let bg = aY()
970+ let dj = bg[w]
971+ let dk = bg[x]
972+ let cz = [toBigInt(bN(dj)), toBigInt(bN(dk))]
973+ let et = cy(cz)
974+ let eB = gr(gs, et, toBigInt(gw))
975+ let gz = ((toBigInt(bN(gy)) - eB) - toBigInt(1))
976+ let gA = max([0, toInt(gz)])
977+ let gB = if ((gs == false))
978+ then [(toBigInt(bN(dj)) + toBigInt(gw)), (toBigInt(bN(dk)) - gz)]
979+ else [(toBigInt(bN(dj)) - gz), (toBigInt(bN(dk)) + toBigInt(gw))]
980+ let gC = cy(gB)
981+ let dY = if ((gC >= et))
896982 then true
897- else throw(makeString(["new D is fewer error", toString(ez), toString(fQ)], "__"))
898- if ((eY == eY))
899- then $Tuple2(nil, fO)
983+ else throw(makeString(["new D is fewer error", toString(et), toString(gC)], "__"))
984+ if ((dY == dY))
985+ then $Tuple2(nil, gA)
900986 else throw("Strict value is not equal to itself.")
901987 }
902988
903989
904990
905-@Callable(dN)
906-func calculateAmountOutForSwapAndSendTokens (fK,fG,fR,fS) = {
907- let fT = [if ((value(dN.payments[0]).amount >= fK))
991+@Callable(cP)
992+func calculateAmountOutForSwapAndSendTokens (gw,gs,gD,gE) = {
993+ let gF = {
994+ let aS = invoke(addressFromStringValue(Y()), "getSwapContractREADONLY", nil, nil)
995+ if ($isInstanceOf(aS, "String"))
996+ then aS
997+ else throw(($getType(aS) + " couldn't be cast to String"))
998+ }
999+ let gG = [if ((value(cP.payments[0]).amount >= gw))
9081000 then true
909- else aC("Wrong amount"), if ((dN.caller == addressFromStringValue(ay(this, ag()))))
1001+ else aN("Wrong amount"), if ((cP.caller == addressFromStringValue(gF)))
9101002 then true
911- else aC("Permission denied")]
912- if ((fT == fT))
1003+ else aN("Permission denied")]
1004+ if ((gG == gG))
9131005 then {
914- let dO = value(dN.payments[0])
915- let fU = if ((dO.assetId == unit))
1006+ let fk = value(cP.payments[0])
1007+ let gH = if ((fk.assetId == unit))
9161008 then toBase58String(toBytes("WAVES"))
917- else toBase58String(value(dO.assetId))
918- let fV = if ((fG == false))
1009+ else toBase58String(value(fk.assetId))
1010+ let gI = if ((gs == false))
9191011 then {
920- let fM = ay(this, ad())
921- let fH = (bz(fU) - value(dN.payments[0]).amount)
922- $Tuple2(fM, fH)
1012+ let gy = aJ(this, ak())
1013+ let gt = (bN(gH) - value(cP.payments[0]).amount)
1014+ $Tuple2(gy, gt)
9231015 }
9241016 else {
925- let fM = ay(this, ac())
926- let fH = (bz(fU) - value(dN.payments[0]).amount)
927- $Tuple2(fM, fH)
1017+ let gy = aJ(this, aj())
1018+ let gt = (bN(gH) - value(cP.payments[0]).amount)
1019+ $Tuple2(gy, gt)
9281020 }
929- let fM = fV._1
930- let fH = fV._2
931- let aU = aM()
932- let cr = aU[u]
933- let cs = aU[v]
934- let dU = if ((fG == false))
935- then [(toBigInt(bz(cr)) - toBigInt(value(dN.payments[0]).amount)), toBigInt(bz(cs))]
936- else [toBigInt(bz(cr)), (toBigInt(bz(cs)) - toBigInt(value(dN.payments[0]).amount))]
937- let ez = dT(dU)
938- let eE = fF(fG, ez, toBigInt(0))
939- let fN = ((toBigInt(bz(fM)) - eE) - toBigInt(1))
940- let fO = max([0, toInt(fN)])
941- let fW = if ((fO >= fR))
1021+ let gy = gI._1
1022+ let gt = gI._2
1023+ let bg = aY()
1024+ let dj = bg[w]
1025+ let dk = bg[x]
1026+ let cz = if ((gs == false))
1027+ then [(toBigInt(bN(dj)) - toBigInt(value(cP.payments[0]).amount)), toBigInt(bN(dk))]
1028+ else [toBigInt(bN(dj)), (toBigInt(bN(dk)) - toBigInt(value(cP.payments[0]).amount))]
1029+ let et = cy(cz)
1030+ let eB = gr(gs, et, toBigInt(0))
1031+ let gz = ((toBigInt(bN(gy)) - eB) - toBigInt(1))
1032+ let gA = max([0, toInt(gz)])
1033+ let gJ = if ((gA >= gD))
9421034 then true
9431035 else throw("Exchange result is fewer coins than expected")
944- if ((fW == fW))
1036+ if ((gJ == gJ))
9451037 then {
946- let fP = if ((fG == false))
947- then [toBigInt(bz(cr)), (toBigInt(bz(cs)) - fN)]
948- else [(toBigInt(bz(cr)) - fN), toBigInt(bz(cs))]
949- let fQ = dT(fP)
950- let eY = if ((fQ >= ez))
1038+ let gB = if ((gs == false))
1039+ then [toBigInt(bN(dj)), (toBigInt(bN(dk)) - gz)]
1040+ else [(toBigInt(bN(dj)) - gz), toBigInt(bN(dk))]
1041+ let gC = cy(gB)
1042+ let dY = if ((gC >= et))
9511043 then true
9521044 else throw("new D is fewer error")
953- if ((eY == eY))
954- then [ScriptTransfer(addressFromStringValue(fS), fO, if ((fU == "WAVES"))
1045+ if ((dY == dY))
1046+ then [ScriptTransfer(addressFromStringValue(gE), gA, if ((gH == "WAVES"))
9551047 then unit
956- else fromBase58String(fM))]
1048+ else fromBase58String(gy))]
9571049 else throw("Strict value is not equal to itself.")
9581050 }
9591051 else throw("Strict value is not equal to itself.")
9631055
9641056
9651057
966-@Callable(dN)
967-func constructor (R) = {
968- let eB = fE(dN)
969- if ((eB == eB))
970- then [StringEntry(R(), R)]
1058+@Callable(cP)
1059+func constructor (Y) = {
1060+ let ex = gq(cP)
1061+ if ((ex == ex))
1062+ then [StringEntry(Y(), Y)]
9711063 else throw("Strict value is not equal to itself.")
9721064 }
9731065
9741066
9751067
976-@Callable(dN)
977-func setManager (fX) = {
978- let eB = fE(dN)
979- if ((eB == eB))
1068+@Callable(cP)
1069+func setManager (gK) = {
1070+ let ex = gq(cP)
1071+ if ((ex == ex))
9801072 then {
981- let fY = fromBase58String(fX)
982- if ((fY == fY))
983- then [StringEntry(T(), fX)]
1073+ let gL = fromBase58String(gK)
1074+ if ((gL == gL))
1075+ then [StringEntry(aa(), gK)]
9841076 else throw("Strict value is not equal to itself.")
9851077 }
9861078 else throw("Strict value is not equal to itself.")
9881080
9891081
9901082
991-@Callable(dN)
1083+@Callable(cP)
9921084 func confirmManager () = {
993- let cg = fA()
994- let fZ = if (isDefined(cg))
1085+ let cu = gm()
1086+ let gM = if (isDefined(cu))
9951087 then true
9961088 else throw("No pending manager")
997- if ((fZ == fZ))
1089+ if ((gM == gM))
9981090 then {
999- let ga = if ((dN.callerPublicKey == value(cg)))
1091+ let gN = if ((cP.callerPublicKey == value(cu)))
10001092 then true
10011093 else throw("You are not pending manager")
1002- if ((ga == ga))
1003- then [StringEntry(S(), toBase58String(value(cg))), DeleteEntry(T())]
1094+ if ((gN == gN))
1095+ then [StringEntry(Z(), toBase58String(value(cu))), DeleteEntry(aa())]
10041096 else throw("Strict value is not equal to itself.")
10051097 }
10061098 else throw("Strict value is not equal to itself.")
10081100
10091101
10101102
1011-@Callable(dN)
1012-func put (gb,gc) = {
1013- let gd = be()
1014- let ge = valueOrErrorMessage(addressFromString(gd[A]), "Wr st addr")
1015- let gf = valueOrErrorMessage(addressFromString(gd[C]), "Wr sl addr")
1016- if ((0 > gb))
1103+@Callable(cP)
1104+func put (gO,gP) = {
1105+ let gQ = bs()
1106+ let gR = valueOrErrorMessage(addressFromString(gQ[C]), "Wr st addr")
1107+ let gS = valueOrErrorMessage(addressFromString(gQ[E]), "Wr sl addr")
1108+ if ((0 > gO))
10171109 then throw("Wrong slippage")
1018- else if ((size(dN.payments) != 2))
1110+ else if ((size(cP.payments) != 2))
10191111 then throw("2 pmnts expd")
10201112 else {
1021- let gg = dP(toString(dN.caller), toBase58String(dN.transactionId), AttachedPayment(value(dN.payments[0]).assetId, value(dN.payments[0]).amount), dN.payments[1], gb, true, false, true, 0, "")
1022- let ds = gg._2
1023- let gh = gg._7
1024- let cJ = gg._9
1025- let dt = gg._10
1026- let du = gg._11
1027- let cr = gg._12
1028- let cs = gg._13
1029- let df = invoke(aE, "emit", [ds], nil)
1030- if ((df == df))
1113+ let gT = toBigInt(value(cP.payments[0]).amount)
1114+ let gU = toBigInt(value(cP.payments[1]).amount)
1115+ let eO = (toBigInt(bN(be(bm))) - gT)
1116+ if ((eO == eO))
10311117 then {
1032- let gi = {
1033- let aw = df
1034- if ($isInstanceOf(aw, "Address"))
1035- then {
1036- let gj = aw
1037- invoke(gj, "emit", [ds], nil)
1038- }
1039- else unit
1040- }
1041- if ((gi == gi))
1118+ let eP = (toBigInt(bN(be(bn))) - gU)
1119+ if ((eP == eP))
10421120 then {
1043- let gk = if ((dt > 0))
1044- then invoke(gf, "put", nil, [AttachedPayment(cr, dt)])
1045- else nil
1046- if ((gk == gk))
1121+ let eQ = toBigInt(value(assetInfo(bl)).quantity)
1122+ if ((eQ == eQ))
10471123 then {
1048- let gl = if ((du > 0))
1049- then invoke(gf, "put", nil, [AttachedPayment(cs, du)])
1050- else nil
1051- if ((gl == gl))
1124+ let eR = eK(gT, gU, toBigInt(0))
1125+ if ((eR == eR))
10521126 then {
1053- let gm = if (gc)
1127+ let gV = fl(toString(cP.caller), toBase58String(cP.transactionId), AttachedPayment(value(cP.payments[0]).assetId, value(cP.payments[0]).amount), cP.payments[1], gO, true, false, true, 0, "")
1128+ let el = gV._2
1129+ let gW = gV._7
1130+ let dB = gV._9
1131+ let em = gV._10
1132+ let en = gV._11
1133+ let dj = gV._12
1134+ let dk = gV._13
1135+ let dX = invoke(aQ, "emit", [el], nil)
1136+ if ((dX == dX))
10541137 then {
1055- let gn = invoke(ge, "stake", nil, [AttachedPayment(gh, ds)])
1056- if ((gn == gn))
1057- then nil
1138+ let gX = {
1139+ let gl = dX
1140+ if ($isInstanceOf(gl, "Address"))
1141+ then {
1142+ let gY = gl
1143+ invoke(gY, "emit", [el], nil)
1144+ }
1145+ else unit
1146+ }
1147+ if ((gX == gX))
1148+ then {
1149+ let gZ = if ((em > 0))
1150+ then invoke(gS, "put", nil, [AttachedPayment(dj, em)])
1151+ else nil
1152+ if ((gZ == gZ))
1153+ then {
1154+ let ha = if ((en > 0))
1155+ then invoke(gS, "put", nil, [AttachedPayment(dk, en)])
1156+ else nil
1157+ if ((ha == ha))
1158+ then {
1159+ let hb = if (gP)
1160+ then {
1161+ let hc = invoke(gR, "stake", nil, [AttachedPayment(gW, el)])
1162+ if ((hc == hc))
1163+ then nil
1164+ else throw("Strict value is not equal to itself.")
1165+ }
1166+ else [ScriptTransfer(cP.caller, el, gW)]
1167+ let hd = eS(0, 0, 0)
1168+ let gi = hd._1
1169+ let eJ = hd._2
1170+ let he = if ((eJ >= eR))
1171+ then true
1172+ else aN(makeString(["updated DLp lower than current DLp", toString(eO), toString(eP), toString(eQ), toString(eR), toString(eJ), toString(em), toString(en)], " "))
1173+ if ((he == he))
1174+ then {
1175+ let hf = value(assetInfo(bl)).quantity
1176+ if ((hf == hf))
1177+ then ((dB ++ hb) ++ gi)
1178+ else throw("Strict value is not equal to itself.")
1179+ }
1180+ else throw("Strict value is not equal to itself.")
1181+ }
1182+ else throw("Strict value is not equal to itself.")
1183+ }
1184+ else throw("Strict value is not equal to itself.")
1185+ }
10581186 else throw("Strict value is not equal to itself.")
10591187 }
1060- else [ScriptTransfer(dN.caller, ds, gh)]
1061- (cJ ++ gm)
1188+ else throw("Strict value is not equal to itself.")
10621189 }
10631190 else throw("Strict value is not equal to itself.")
10641191 }
10721199
10731200
10741201
1075-@Callable(dN)
1076-func putOneTknV2 (fh,gc) = {
1077- let go = {
1078- let aG = invoke(aE, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
1079- if ($isInstanceOf(aG, "Boolean"))
1080- then aG
1081- else throw(($getType(aG) + " couldn't be cast to Boolean"))
1202+@Callable(cP)
1203+func putOneTknV2 (fM,gP) = {
1204+ let hg = {
1205+ let aS = invoke(aQ, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
1206+ if ($isInstanceOf(aS, "Boolean"))
1207+ then aS
1208+ else throw(($getType(aS) + " couldn't be cast to Boolean"))
10821209 }
1083- let gp = if (if (if (aJ())
1210+ let hh = if (if (if (aV())
10841211 then true
1085- else (aY == o))
1212+ else (bk == q))
10861213 then true
1087- else (aY == q))
1214+ else (bk == s))
10881215 then true
1089- else go
1090- let fT = [if (if (!(gp))
1216+ else hg
1217+ let gG = [if (if (!(hh))
10911218 then true
1092- else fC(dN))
1219+ else go(cP))
10931220 then true
1094- else aC("put operation is blocked by admin"), if ((size(dN.payments) == 1))
1221+ else aN("put operation is blocked by admin"), if ((size(cP.payments) == 1))
10951222 then true
1096- else aC("exactly 1 payment are expected")]
1097- if ((fT == fT))
1223+ else aN("exactly 1 payment are expected")]
1224+ if ((gG == gG))
10981225 then {
1099- let aU = aM()
1100- let cr = aU[u]
1101- let cs = aU[v]
1102- let cq = fromBase58String(aU[t])
1103- let fl = parseIntValue(aU[w])
1104- let fm = parseIntValue(aU[x])
1105- let cp = if ((dN.caller == this))
1106- then dN.originCaller
1107- else dN.caller
1108- let dO = value(dN.payments[0])
1109- let cn = toBase58String(value(dO.assetId))
1110- let cT = dO.amount
1111- let gq = eI(cT, cn, toString(cp), toBase58String(dN.transactionId), true)
1112- if ((gq == gq))
1226+ let dj = toBase58String(value(bm))
1227+ let dk = toBase58String(value(bn))
1228+ let di = bl
1229+ let fQ = bo
1230+ let fR = bp
1231+ let dh = if ((cP.caller == this))
1232+ then cP.originCaller
1233+ else cP.caller
1234+ let fk = value(cP.payments[0])
1235+ let df = toBase58String(value(fk.assetId))
1236+ let dL = fk.amount
1237+ let eR = if ((fk.assetId == bm))
1238+ then eK(toBigInt(dL), toBigInt(0), toBigInt(0))
1239+ else eK(toBigInt(0), toBigInt(dL), toBigInt(0))
1240+ if ((eR == eR))
11131241 then {
1114- let ck = gq._3
1115- let cJ = gq._2
1116- let gr = gq._1
1117- let ds = if (if ((fh > 0))
1118- then (fh > gr)
1119- else false)
1120- then aC(makeString(["amount to receive is less than ", toString(fh)], ""))
1121- else gr
1122- let gg = invoke(aE, "emit", [ds], nil)
1123- if ((gg == gg))
1242+ let hi = fp(dL, df, toString(dh), toBase58String(cP.transactionId), true)
1243+ if ((hi == hi))
11241244 then {
1125- let gi = {
1126- let aw = gg
1127- if ($isInstanceOf(aw, "Address"))
1128- then {
1129- let gj = aw
1130- invoke(gj, "emit", [ds], nil)
1245+ let cx = hi._3
1246+ let dB = hi._2
1247+ let hj = hi._1
1248+ let el = if (if ((fM > 0))
1249+ then (fM > hj)
1250+ else false)
1251+ then aN(makeString(["amount to receive is less than ", toString(fM)], ""))
1252+ else hj
1253+ let gV = invoke(aQ, "emit", [el], nil)
1254+ if ((gV == gV))
1255+ then {
1256+ let gX = {
1257+ let gl = gV
1258+ if ($isInstanceOf(gl, "Address"))
1259+ then {
1260+ let gY = gl
1261+ invoke(gY, "emit", [el], nil)
1262+ }
1263+ else unit
11311264 }
1132- else unit
1133- }
1134- if ((gi == gi))
1135- then {
1136- let gm = if (gc)
1265+ if ((gX == gX))
11371266 then {
1138- let gn = invoke(bg, "stake", nil, [AttachedPayment(cq, ds)])
1139- if ((gn == gn))
1140- then nil
1267+ let hb = if (gP)
1268+ then {
1269+ let hc = invoke(bu, "stake", nil, [AttachedPayment(di, el)])
1270+ if ((hc == hc))
1271+ then nil
1272+ else throw("Strict value is not equal to itself.")
1273+ }
1274+ else [ScriptTransfer(cP.caller, el, di)]
1275+ let gc = if ((cx > 0))
1276+ then [ScriptTransfer(aX, cx, fromBase58String(df))]
1277+ else nil
1278+ let hk = if ((this == aX))
1279+ then $Tuple2(0, 0)
1280+ else {
1281+ let hl = if ((fk.assetId == bm))
1282+ then true
1283+ else false
1284+ if (hl)
1285+ then $Tuple2(-(cx), 0)
1286+ else $Tuple2(0, -(cx))
1287+ }
1288+ let eT = hk._1
1289+ let eU = hk._2
1290+ let hm = eS(eT, eU, 0)
1291+ let gi = hm._1
1292+ let eJ = hm._2
1293+ let gj = eW(eR, eJ)
1294+ if ((gj == gj))
1295+ then $Tuple2((((dB ++ hb) ++ gc) ++ gi), el)
11411296 else throw("Strict value is not equal to itself.")
11421297 }
1143- else [ScriptTransfer(dN.caller, ds, cq)]
1144- let fx = if ((ck > 0))
1145- then [ScriptTransfer(aL, ck, fromBase58String(cn))]
1146- else nil
1147- $Tuple2(((cJ ++ gm) ++ fx), ds)
1298+ else throw("Strict value is not equal to itself.")
11481299 }
11491300 else throw("Strict value is not equal to itself.")
11501301 }
11571308
11581309
11591310
1160-@Callable(dN)
1161-func putForFree (gs) = if ((0 > gs))
1311+@Callable(cP)
1312+func putForFree (hn) = if ((0 > hn))
11621313 then throw("Wrong slpg")
1163- else if ((size(dN.payments) != 2))
1314+ else if ((size(cP.payments) != 2))
11641315 then throw("2 pmnts expd")
11651316 else {
1166- let gt = dP(toString(dN.caller), toBase58String(dN.transactionId), AttachedPayment(value(dN.payments[0]).assetId, value(dN.payments[0]).amount), dN.payments[1], gs, false, false, true, 0, "")
1167- gt._9
1317+ let ho = fl(toString(cP.caller), toBase58String(cP.transactionId), AttachedPayment(value(cP.payments[0]).assetId, value(cP.payments[0]).amount), cP.payments[1], hn, false, false, true, 0, "")
1318+ let dB = ho._9
1319+ let gT = toBigInt(value(cP.payments[0]).amount)
1320+ let gU = toBigInt(value(cP.payments[1]).amount)
1321+ let eR = eK(gT, gU, toBigInt(0))
1322+ if ((eR == eR))
1323+ then {
1324+ let hp = eS(0, 0, 0)
1325+ let gi = hp._1
1326+ let eJ = hp._2
1327+ let gj = eW(eR, eJ)
1328+ if ((gj == gj))
1329+ then (dB ++ gi)
1330+ else throw("Strict value is not equal to itself.")
1331+ }
1332+ else throw("Strict value is not equal to itself.")
11681333 }
11691334
11701335
11711336
1172-@Callable(dN)
1337+@Callable(cP)
11731338 func get () = {
1174- let df = dM(dN)
1175- let gu = df._1
1176- let cI = df._2
1177- let cT = df._3
1178- let cn = df._4
1179- let cJ = df._5
1180- let eC = invoke(aE, "burn", [cT], [AttachedPayment(cn, cT)])
1181- if ((eC == eC))
1182- then cJ
1183- else throw("Strict value is not equal to itself.")
1184- }
1185-
1186-
1187-
1188-@Callable(dN)
1189-func getOneTknV2 (fg,fh) = {
1190- let go = {
1191- let aG = invoke(aE, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
1192- if ($isInstanceOf(aG, "Boolean"))
1193- then aG
1194- else throw(($getType(aG) + " couldn't be cast to Boolean"))
1195- }
1196- let gv = if (if (aJ())
1197- then true
1198- else (aY == q))
1199- then true
1200- else go
1201- let fT = [if (if (!(gv))
1202- then true
1203- else fC(dN))
1204- then true
1205- else aC("get operation is blocked by admin"), if ((size(dN.payments) == 1))
1206- then true
1207- else aC("exactly 1 payment are expected")]
1208- if ((fT == fT))
1339+ let eR = eK(toBigInt(0), toBigInt(0), toBigInt(0))
1340+ if ((eR == eR))
12091341 then {
1210- let gw = ff(fg, fh, dN.payments, dN.caller, dN.originCaller, dN.transactionId)
1211- let cJ = gw._1
1212- let fq = gw._2
1213- $Tuple2(cJ, fq)
1342+ let dX = fj(cP)
1343+ let hq = dX._1
1344+ let dA = dX._2
1345+ let dL = dX._3
1346+ let df = dX._4
1347+ let dB = dX._5
1348+ let ey = invoke(aQ, "burn", [dL], [AttachedPayment(df, dL)])
1349+ if ((ey == ey))
1350+ then {
1351+ let hr = eS(-(hq), -(dA), 0)
1352+ let gi = hr._1
1353+ let eJ = hr._2
1354+ let gj = eW(eR, eJ)
1355+ if ((gj == gj))
1356+ then (dB ++ gi)
1357+ else throw("Strict value is not equal to itself.")
1358+ }
1359+ else throw("Strict value is not equal to itself.")
12141360 }
12151361 else throw("Strict value is not equal to itself.")
12161362 }
12171363
12181364
12191365
1220-@Callable(dN)
1221-func getOneTknV2READONLY (fg,gx) = {
1222- let aU = aM()
1223- let cr = aU[u]
1224- let cs = aU[v]
1225- let cq = aU[t]
1226- let dU = [toBigInt(bz(cr)), toBigInt(bz(cs))]
1227- let gy = toBigInt(valueOrErrorMessage(assetInfo(fromBase58String(cq)), "invalid lp asset").quantity)
1228- let bM = dT(dU)
1229- let bL = (bM - fraction(toBigInt(gx), bM, gy))
1230- let gz = if ((fg == cr))
1231- then 0
1232- else if ((fg == cs))
1233- then 1
1234- else throw("invalid out asset id")
1235- let gA = ey(dU, gz, bL)
1236- let fN = (dU[gz] - gA)
1237- let fO = max([0, toInt((fN - f))])
1238- let gB = ch(fO, aH)
1239- let fp = gB._1
1240- let ck = gB._2
1241- $Tuple2(nil, $Tuple2(fp, ck))
1366+@Callable(cP)
1367+func getOneTknV2 (fL,fM) = {
1368+ let hg = {
1369+ let aS = invoke(aQ, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
1370+ if ($isInstanceOf(aS, "Boolean"))
1371+ then aS
1372+ else throw(($getType(aS) + " couldn't be cast to Boolean"))
1373+ }
1374+ let hs = if (if (aV())
1375+ then true
1376+ else (bk == s))
1377+ then true
1378+ else hg
1379+ let gG = [if (if (!(hs))
1380+ then true
1381+ else go(cP))
1382+ then true
1383+ else aN("get operation is blocked by admin"), if ((size(cP.payments) == 1))
1384+ then true
1385+ else aN("exactly 1 payment are expected")]
1386+ if ((gG == gG))
1387+ then {
1388+ let ht = fK(fL, fM, cP.payments, cP.caller, cP.originCaller, cP.transactionId)
1389+ let dB = ht._1
1390+ let fV = ht._2
1391+ $Tuple2(dB, fV)
1392+ }
1393+ else throw("Strict value is not equal to itself.")
12421394 }
12431395
12441396
12451397
1246-@Callable(dN)
1247-func getOneTknV2WithBonusREADONLY (fg,gx) = {
1248- let aU = aM()
1249- let cr = aU[u]
1250- let cs = aU[v]
1251- let cq = aU[t]
1252- let cx = bz(cr)
1253- let cz = bz(cs)
1254- let gC = {
1255- let aG = invoke(this, "getOneTknV2READONLY", [fg, gx], nil)
1256- if ($isInstanceOf(aG, "(Int, Int)"))
1257- then aG
1258- else throw(($getType(aG) + " couldn't be cast to (Int, Int)"))
1259- }
1260- let fp = gC._1
1261- let ck = gC._2
1262- let df = cl("", cq, gx, this)
1263- let cH = df._1
1264- let cI = df._2
1265- let gD = (cH + cI)
1266- let fe = if ((gD == 0))
1267- then if ((fp == 0))
1268- then 0
1269- else throw("bonus calculation error")
1270- else fraction((fp - gD), a, gD)
1271- $Tuple2(nil, $Tuple3(fp, ck, fe))
1398+@Callable(cP)
1399+func refreshDLp () = {
1400+ let hu = valueOrElse(getInteger(aq), 0)
1401+ let hv = if (((height - hu) >= at))
1402+ then unit
1403+ else aN(makeString([toString(at), " blocks have not passed since the previous call"], ""))
1404+ if ((hv == hv))
1405+ then {
1406+ let fd = valueOrErrorMessage(parseBigInt(valueOrElse(getString(this, ap), "0")), aP("invalid dLp"))
1407+ let hw = eS(0, 0, 0)
1408+ let hx = hw._1
1409+ let eJ = hw._2
1410+ let eV = if ((fd != eJ))
1411+ then hx
1412+ else aN("nothing to refresh")
1413+ $Tuple2(eV, toString(eJ))
1414+ }
1415+ else throw("Strict value is not equal to itself.")
12721416 }
12731417
12741418
12751419
1276-@Callable(dN)
1277-func getNoLess (gE,gF) = {
1278- let df = dM(dN)
1279- let cH = df._1
1280- let cI = df._2
1281- let cT = df._3
1282- let cn = df._4
1283- let cJ = df._5
1284- if ((gE > cH))
1285- then throw(((("Failed: " + toString(cH)) + " < ") + toString(gE)))
1286- else if ((gF > cI))
1287- then throw(((("Failed: " + toString(cI)) + " < ") + toString(gF)))
1420+@Callable(cP)
1421+func getOneTknV2READONLY (fL,hy) = {
1422+ let dj = toBase58String(value(bm))
1423+ let dk = toBase58String(value(bn))
1424+ let di = toBase58String(value(bl))
1425+ let cz = [toBigInt(bN(dj)), toBigInt(bN(dk))]
1426+ let eI = toBigInt(valueOrErrorMessage(assetInfo(fromBase58String(di)), "invalid lp asset").quantity)
1427+ let cb = cy(cz)
1428+ let ca = (cb - fraction(toBigInt(hy), cb, eI))
1429+ let hz = if ((fL == dj))
1430+ then 0
1431+ else if ((fL == dk))
1432+ then 1
1433+ else throw("invalid out asset id")
1434+ let hA = es(cz, hz, ca)
1435+ let gz = (cz[hz] - hA)
1436+ let gA = max([0, toInt((gz - f))])
1437+ let hB = cv(gA, aT)
1438+ let fU = hB._1
1439+ let cx = hB._2
1440+ $Tuple2(nil, $Tuple2(fU, cx))
1441+ }
1442+
1443+
1444+
1445+@Callable(cP)
1446+func getOneTknV2WithBonusREADONLY (fL,hy) = {
1447+ let dj = toBase58String(value(bm))
1448+ let dk = toBase58String(value(bn))
1449+ let di = toBase58String(value(bl))
1450+ let dp = bN(dj)
1451+ let dr = bN(dk)
1452+ let hC = {
1453+ let aS = invoke(this, "getOneTknV2READONLY", [fL, hy], nil)
1454+ if ($isInstanceOf(aS, "(Int, Int)"))
1455+ then aS
1456+ else throw(($getType(aS) + " couldn't be cast to (Int, Int)"))
1457+ }
1458+ let fU = hC._1
1459+ let cx = hC._2
1460+ let dX = dd("", di, hy, this)
1461+ let dz = dX._1
1462+ let dA = dX._2
1463+ let hD = (dz + dA)
1464+ let fJ = if ((hD == 0))
1465+ then if ((fU == 0))
1466+ then 0
1467+ else throw("bonus calculation error")
1468+ else fraction((fU - hD), a, hD)
1469+ $Tuple2(nil, $Tuple3(fU, cx, fJ))
1470+ }
1471+
1472+
1473+
1474+@Callable(cP)
1475+func getNoLess (hE,hF) = {
1476+ let dX = fj(cP)
1477+ let dz = dX._1
1478+ let dA = dX._2
1479+ let dL = dX._3
1480+ let df = dX._4
1481+ let dB = dX._5
1482+ if ((hE > dz))
1483+ then throw(((("Failed: " + toString(dz)) + " < ") + toString(hE)))
1484+ else if ((hF > dA))
1485+ then throw(((("Failed: " + toString(dA)) + " < ") + toString(hF)))
12881486 else {
1289- let gG = invoke(aE, "burn", [cT], [AttachedPayment(cn, cT)])
1290- if ((gG == gG))
1291- then cJ
1487+ let eR = eK(toBigInt(0), toBigInt(0), toBigInt(0))
1488+ if ((eR == eR))
1489+ then {
1490+ let hG = invoke(aQ, "burn", [dL], [AttachedPayment(df, dL)])
1491+ if ((hG == hG))
1492+ then {
1493+ let hH = eS(-(dz), -(dA), 0)
1494+ let gi = hH._1
1495+ let eJ = hH._2
1496+ let gj = eW(eR, eJ)
1497+ if ((gj == gj))
1498+ then (dB ++ gi)
1499+ else throw("Strict value is not equal to itself.")
1500+ }
1501+ else throw("Strict value is not equal to itself.")
1502+ }
12921503 else throw("Strict value is not equal to itself.")
12931504 }
12941505 }
12951506
12961507
12971508
1298-@Callable(dN)
1299-func unstakeAndGet (ci) = {
1300- let gH = if ((size(dN.payments) != 0))
1509+@Callable(cP)
1510+func unstakeAndGet (cw) = {
1511+ let hI = if ((size(cP.payments) != 0))
13011512 then throw("No pmnts expd")
13021513 else true
1303- if ((gH == gH))
1514+ if ((hI == hI))
13041515 then {
1305- let bY = aM()
1306- let gI = be()
1307- let gh = fromBase58String(bY[t])
1308- let gJ = valueOrErrorMessage(addressFromString(gI[A]), "Wr st addr")
1309- let gK = invoke(gJ, "unstake", [toBase58String(gh), ci], nil)
1310- if ((gK == gK))
1516+ let hJ = bs()
1517+ let gW = bl
1518+ let hK = valueOrErrorMessage(addressFromString(hJ[C]), "Wr st addr")
1519+ let eR = eK(toBigInt(0), toBigInt(0), toBigInt(0))
1520+ if ((eR == eR))
13111521 then {
1312- let df = cl(toBase58String(dN.transactionId), toBase58String(gh), ci, dN.caller)
1313- let cv = parseIntValue(df._9)
1314- let cJ = df._10
1315- let gL = if (if (aJ())
1316- then true
1317- else (cv == q))
1318- then throw(("Blocked: " + toString(cv)))
1319- else true
1320- if ((gL == gL))
1522+ let hL = invoke(hK, "unstake", [toBase58String(gW), cw], nil)
1523+ if ((hL == hL))
13211524 then {
1322- let gM = invoke(aE, "burn", [ci], [AttachedPayment(gh, ci)])
1323- if ((gM == gM))
1324- then cJ
1525+ let dX = dd(toBase58String(cP.transactionId), toBase58String(gW), cw, cP.caller)
1526+ let dz = dX._1
1527+ let dA = dX._2
1528+ let dn = parseIntValue(dX._9)
1529+ let dB = dX._10
1530+ let hM = if (if (aV())
1531+ then true
1532+ else (dn == s))
1533+ then throw(("Blocked: " + toString(dn)))
1534+ else true
1535+ if ((hM == hM))
1536+ then {
1537+ let hN = invoke(aQ, "burn", [cw], [AttachedPayment(gW, cw)])
1538+ if ((hN == hN))
1539+ then {
1540+ let hO = eS(-(dz), -(dA), 0)
1541+ let gi = hO._1
1542+ let eJ = hO._2
1543+ let gj = eW(eR, eJ)
1544+ if ((gj == gj))
1545+ then (dB ++ gi)
1546+ else throw("Strict value is not equal to itself.")
1547+ }
1548+ else throw("Strict value is not equal to itself.")
1549+ }
13251550 else throw("Strict value is not equal to itself.")
13261551 }
13271552 else throw("Strict value is not equal to itself.")
13331558
13341559
13351560
1336-@Callable(dN)
1337-func unstakeAndGetNoLess (gN,gO,gF) = {
1338- let gv = if (aJ())
1561+@Callable(cP)
1562+func unstakeAndGetNoLess (hP,hQ,hF) = {
1563+ let hs = if (aV())
13391564 then true
1340- else (aY == q)
1341- let fT = [if (!(gv))
1565+ else (bk == s)
1566+ let gG = [if (!(hs))
13421567 then true
1343- else throw("get operation is blocked by admin"), if ((size(dN.payments) == 0))
1568+ else throw("get operation is blocked by admin"), if ((size(cP.payments) == 0))
13441569 then true
13451570 else throw("no payments are expected")]
1346- if ((fT == fT))
1571+ if ((gG == gG))
13471572 then {
1348- let gK = invoke(bg, "unstake", [toBase58String(aZ), gN], nil)
1349- if ((gK == gK))
1573+ let eR = eK(toBigInt(0), toBigInt(0), toBigInt(0))
1574+ if ((eR == eR))
13501575 then {
1351- let gP = cl(toBase58String(dN.transactionId), toBase58String(aZ), gN, dN.caller)
1352- let cH = gP._1
1353- let cI = gP._2
1354- let cJ = gP._10
1355- let gQ = [if ((cH >= gO))
1356- then true
1357- else throw(makeString(["amount asset amount to receive is less than ", toString(gO)], "")), if ((cI >= gF))
1358- then true
1359- else throw(makeString(["price asset amount to receive is less than ", toString(gF)], ""))]
1360- if ((gQ == gQ))
1576+ let hL = invoke(bu, "unstake", [toBase58String(bl), hP], nil)
1577+ if ((hL == hL))
13611578 then {
1362- let gG = invoke(aE, "burn", [gN], [AttachedPayment(aZ, gN)])
1363- if ((gG == gG))
1364- then cJ
1579+ let hR = dd(toBase58String(cP.transactionId), toBase58String(bl), hP, cP.caller)
1580+ let dz = hR._1
1581+ let dA = hR._2
1582+ let dB = hR._10
1583+ let hS = [if ((dz >= hQ))
1584+ then true
1585+ else throw(makeString(["amount asset amount to receive is less than ", toString(hQ)], "")), if ((dA >= hF))
1586+ then true
1587+ else throw(makeString(["price asset amount to receive is less than ", toString(hF)], ""))]
1588+ if ((hS == hS))
1589+ then {
1590+ let hG = invoke(aQ, "burn", [hP], [AttachedPayment(bl, hP)])
1591+ if ((hG == hG))
1592+ then {
1593+ let hT = eS(-(dz), -(dA), 0)
1594+ let gi = hT._1
1595+ let eJ = hT._2
1596+ let gj = eW(eR, eJ)
1597+ if ((gj == gj))
1598+ then (dB ++ gi)
1599+ else throw("Strict value is not equal to itself.")
1600+ }
1601+ else throw("Strict value is not equal to itself.")
1602+ }
13651603 else throw("Strict value is not equal to itself.")
13661604 }
13671605 else throw("Strict value is not equal to itself.")
13731611
13741612
13751613
1376-@Callable(dN)
1377-func unstakeAndGetOneTknV2 (gN,fg,fh) = {
1378- let go = {
1379- let aG = invoke(aE, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
1380- if ($isInstanceOf(aG, "Boolean"))
1381- then aG
1382- else throw(($getType(aG) + " couldn't be cast to Boolean"))
1614+@Callable(cP)
1615+func unstakeAndGetOneTknV2 (hP,fL,fM) = {
1616+ let hg = {
1617+ let aS = invoke(aQ, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
1618+ if ($isInstanceOf(aS, "Boolean"))
1619+ then aS
1620+ else throw(($getType(aS) + " couldn't be cast to Boolean"))
13831621 }
1384- let gv = if (if (aJ())
1622+ let hs = if (if (aV())
13851623 then true
1386- else (aY == q))
1624+ else (bk == s))
13871625 then true
1388- else go
1389- let fT = [if (if (!(gv))
1626+ else hg
1627+ let gG = [if (if (!(hs))
13901628 then true
1391- else fC(dN))
1629+ else go(cP))
13921630 then true
1393- else aC("get operation is blocked by admin"), if ((size(dN.payments) == 0))
1631+ else aN("get operation is blocked by admin"), if ((size(cP.payments) == 0))
13941632 then true
1395- else aC("no payments are expected")]
1396- if ((fT == fT))
1633+ else aN("no payments are expected")]
1634+ if ((gG == gG))
13971635 then {
1398- let bY = aM()
1399- let gI = be()
1400- let gh = fromBase58String(bY[t])
1401- let gJ = valueOrErrorMessage(addressFromString(gI[A]), "Wr st addr")
1402- let gK = invoke(gJ, "unstake", [toBase58String(gh), gN], nil)
1403- if ((gK == gK))
1636+ let hJ = bs()
1637+ let gW = bl
1638+ let hK = valueOrErrorMessage(addressFromString(hJ[C]), "Wr st addr")
1639+ let hL = invoke(hK, "unstake", [toBase58String(gW), hP], nil)
1640+ if ((hL == hL))
14041641 then {
1405- let gR = ff(fg, fh, [AttachedPayment(gh, gN)], dN.caller, dN.originCaller, dN.transactionId)
1406- let cJ = gR._1
1407- let fq = gR._2
1408- $Tuple2(cJ, fq)
1642+ let hU = fK(fL, fM, [AttachedPayment(gW, hP)], cP.caller, cP.originCaller, cP.transactionId)
1643+ let dB = hU._1
1644+ let fV = hU._2
1645+ $Tuple2(dB, fV)
14091646 }
14101647 else throw("Strict value is not equal to itself.")
14111648 }
14141651
14151652
14161653
1417-@Callable(dN)
1418-func putOneTknV2WithBonusREADONLY (gS,gT) = {
1419- let aU = aM()
1420- let cr = aU[u]
1421- let cs = aU[v]
1422- let cq = aU[t]
1423- let gU = eI(gS, gT, "", "", true)
1424- let eZ = gU._1
1425- let cJ = gU._2
1426- let ck = gU._3
1427- let fe = gU._4
1428- $Tuple2(nil, $Tuple3(eZ, ck, fe))
1654+@Callable(cP)
1655+func putOneTknV2WithBonusREADONLY (hV,hW) = {
1656+ let hX = fp(hV, hW, "", "", true)
1657+ let fE = hX._1
1658+ let dB = hX._2
1659+ let cx = hX._3
1660+ let fJ = hX._4
1661+ $Tuple2(nil, $Tuple3(fE, cx, fJ))
14291662 }
14301663
14311664
14321665
1433-@Callable(dN)
1434-func putOneTknV2WithoutTakeFeeREADONLY (gS,gT) = {
1435- let aU = aM()
1436- let cr = aU[u]
1437- let cs = aU[v]
1438- let cq = aU[t]
1439- let gV = eI(gS, gT, "", "", false)
1440- let eZ = gV._1
1441- let cJ = gV._2
1442- let ck = gV._3
1443- let fe = gV._4
1444- $Tuple2(nil, $Tuple3(eZ, ck, fe))
1666+@Callable(cP)
1667+func putOneTknV2WithoutTakeFeeREADONLY (hV,hW) = {
1668+ let hY = fp(hV, hW, "", "", false)
1669+ let fE = hY._1
1670+ let dB = hY._2
1671+ let cx = hY._3
1672+ let fJ = hY._4
1673+ $Tuple2(nil, $Tuple3(fE, cx, fJ))
14451674 }
14461675
14471676
14481677
1449-@Callable(dN)
1450-func activate (gW,gX) = if ((toString(dN.caller) != toString(aE)))
1678+@Callable(cP)
1679+func activate (hZ,ia) = if ((toString(cP.caller) != toString(aQ)))
14511680 then throw("denied")
1452- else $Tuple2([StringEntry(ac(), gW), StringEntry(ad(), gX)], "success")
1681+ else $Tuple2([StringEntry(aj(), hZ), StringEntry(ak(), ia)], "success")
14531682
14541683
14551684
1456-@Callable(dN)
1457-func setS (gY,gL) = if ((toString(dN.caller) != ay(this, af())))
1458- then fB
1459- else [StringEntry(gY, gL)]
1685+@Callable(cP)
1686+func setS (ib,hM) = if ((toString(cP.caller) != aJ(this, am())))
1687+ then gn
1688+ else [StringEntry(ib, hM)]
14601689
14611690
14621691
1463-@Callable(dN)
1464-func setI (gY,gL) = if ((toString(dN.caller) != ay(this, af())))
1465- then fB
1466- else [IntegerEntry(gY, gL)]
1692+@Callable(cP)
1693+func setI (ib,hM) = if ((toString(cP.caller) != aJ(this, am())))
1694+ then gn
1695+ else [IntegerEntry(ib, hM)]
14671696
14681697
14691698
1470-@Callable(dN)
1471-func getPoolConfigWrapperREADONLY () = $Tuple2(nil, aM())
1699+@Callable(cP)
1700+func getPoolConfigWrapperREADONLY () = $Tuple2(nil, aY())
14721701
14731702
14741703
1475-@Callable(dN)
1476-func getAccBalanceWrapperREADONLY (bA) = $Tuple2(nil, bz(bA))
1704+@Callable(cP)
1705+func getAccBalanceWrapperREADONLY (bO) = $Tuple2(nil, bN(bO))
14771706
14781707
14791708
1480-@Callable(dN)
1481-func calcPricesWrapperREADONLY (bS,bT,bX) = {
1482- let gZ = bW(bS, bT, bX)
1483- $Tuple2(nil, [toString(gZ[0]), toString(gZ[1]), toString(gZ[2])])
1709+@Callable(cP)
1710+func calcPricesWrapperREADONLY (ch,ci,cm) = {
1711+ let ic = cl(ch, ci, cm)
1712+ $Tuple2(nil, [toString(ic[0]), toString(ic[1]), toString(ic[2])])
14841713 }
14851714
14861715
14871716
1488-@Callable(dN)
1489-func fromX18WrapperREADONLY (J,ha) = $Tuple2(nil, I(parseBigIntValue(J), ha))
1717+@Callable(cP)
1718+func fromX18WrapperREADONLY (M,id) = $Tuple2(nil, L(parseBigIntValue(M), id))
14901719
14911720
14921721
1493-@Callable(dN)
1494-func toX18WrapperREADONLY (G,H) = $Tuple2(nil, toString(F(G, H)))
1722+@Callable(cP)
1723+func toX18WrapperREADONLY (I,J) = $Tuple2(nil, toString(H(I, J)))
14951724
14961725
14971726
1498-@Callable(dN)
1499-func calcPriceBigIntWrapperREADONLY (bC,bD) = $Tuple2(nil, toString(bB(parseBigIntValue(bC), parseBigIntValue(bD))))
1727+@Callable(cP)
1728+func calcPriceBigIntWrapperREADONLY (bQ,bR) = $Tuple2(nil, toString(bP(parseBigIntValue(bQ), parseBigIntValue(bR))))
15001729
15011730
15021731
1503-@Callable(dN)
1504-func estimatePutOperationWrapperREADONLY (cm,bH,cL,cM,cN,cO,hb,cP,cQ) = $Tuple2(nil, cK(cm, bH, cL, cM, cN, cO, hb, cP, cQ, true, false, 0, ""))
1732+@Callable(cP)
1733+func estimatePutOperationWrapperREADONLY (de,bW,dD,dE,dF,dG,ie,dH,dI) = $Tuple2(nil, dC(de, bW, dD, dE, dF, dG, ie, dH, dI, true, false, 0, ""))
15051734
15061735
15071736
1508-@Callable(dN)
1509-func estimateGetOperationWrapperREADONLY (cm,hc,co,hb) = {
1510- let df = cl(cm, hc, co, addressFromStringValue(hb))
1511- $Tuple2(nil, $Tuple10(df._1, df._2, df._3, df._4, df._5, df._6, df._7, toString(df._8), df._9, df._10))
1737+@Callable(cP)
1738+func estimateGetOperationWrapperREADONLY (de,if,dg,ie) = {
1739+ let dX = dd(de, if, dg, addressFromStringValue(ie))
1740+ $Tuple2(nil, $Tuple10(dX._1, dX._2, dX._3, dX._4, dX._5, dX._6, dX._7, toString(dX._8), dX._9, dX._10))
15121741 }
15131742
15141743
1515-@Verifier(hd)
1516-func he () = {
1517- let hf = {
1518- let aw = fz()
1519- if ($isInstanceOf(aw, "ByteVector"))
1744+@Verifier(ig)
1745+func ih () = {
1746+ let ii = {
1747+ let gl = gk()
1748+ if ($isInstanceOf(gl, "ByteVector"))
15201749 then {
1521- let fD = aw
1522- fD
1750+ let gp = gl
1751+ gp
15231752 }
1524- else if ($isInstanceOf(aw, "Unit"))
1525- then hd.senderPublicKey
1753+ else if ($isInstanceOf(gl, "Unit"))
1754+ then ig.senderPublicKey
15261755 else throw("Match error")
15271756 }
1528- let aw = hd
1529- if ($isInstanceOf(aw, "Order"))
1757+ let gl = ig
1758+ if ($isInstanceOf(gl, "Order"))
15301759 then {
1531- let dA = aw
1532- let hg = aK()
1533- let hh = dz(dA)
1534- let hi = sigVerify(dA.bodyBytes, dA.proofs[0], dA.senderPublicKey)
1535- let hj = sigVerify(dA.bodyBytes, dA.proofs[1], hg)
1536- if (if (if (hh)
1537- then hi
1760+ let eZ = gl
1761+ let ij = aW()
1762+ let ik = eY(eZ)
1763+ let aF = ik._1
1764+ let aG = ik._2
1765+ let aH = sigVerify(eZ.bodyBytes, eZ.proofs[0], eZ.senderPublicKey)
1766+ let aI = sigVerify(eZ.bodyBytes, eZ.proofs[1], ij)
1767+ if (if (if (aF)
1768+ then aH
15381769 else false)
1539- then hj
1770+ then aI
15401771 else false)
15411772 then true
1542- else ar(hh, hi, hj)
1773+ else aE(aF, aG, aH, aI)
15431774 }
1544- else if ($isInstanceOf(aw, "SetScriptTransaction"))
1775+ else if ($isInstanceOf(gl, "SetScriptTransaction"))
15451776 then {
1546- let ea = aw
1547- let hk = blake2b256(value(ea.script))
1548- let hl = fromBase64String(value(getString(aE, ap())))
1549- let hm = scriptHash(this)
1550- if (if ((hl == hk))
1551- then (hm != hk)
1552- else false)
1777+ let cC = gl
1778+ if (sigVerify(ig.bodyBytes, ig.proofs[0], ii))
15531779 then true
1554- else sigVerify(hd.bodyBytes, hd.proofs[0], hf)
1780+ else {
1781+ let il = blake2b256(value(cC.script))
1782+ let im = fromBase64String(value(getString(aQ, aC())))
1783+ let in = scriptHash(this)
1784+ if ((im == il))
1785+ then (in != il)
1786+ else false
1787+ }
15551788 }
1556- else sigVerify(hd.bodyBytes, hd.proofs[0], hf)
1789+ else sigVerify(ig.bodyBytes, ig.proofs[0], ii)
15571790 }
15581791
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = 100000000
55
66 let b = toBigInt(100000000)
77
88 let c = toBigInt(1000000000000000000)
99
1010 let d = toBigInt(0)
1111
1212 let e = toBigInt(0)
1313
1414 let f = toBigInt(1)
1515
1616 let g = toBigInt(2)
1717
18-let h = toBigInt((a - ((a * 1) / a)))
18+let h = toBigInt(3)
1919
20-let i = "WAVES"
20+let i = toBigInt(4)
2121
22-let j = "100"
22+let j = toBigInt((a - ((a * 1) / a)))
2323
24-let k = "1"
24+let k = "WAVES"
2525
26-let l = "__"
26+let l = "100"
2727
28-let m = ""
28+let m = "1"
2929
30-let n = 1
30+let n = "__"
3131
32-let o = 2
32+let o = ""
3333
34-let p = 3
34+let p = 1
3535
36-let q = 4
36+let q = 2
3737
38-let r = 1
38+let r = 3
3939
40-let s = 2
40+let s = 4
4141
42-let t = 3
42+let t = 1
4343
44-let u = 4
44+let u = 2
4545
46-let v = 5
46+let v = 3
4747
48-let w = 6
48+let w = 4
4949
50-let x = 7
50+let x = 5
5151
52-let y = 8
52+let y = 6
5353
54-let z = 9
54+let z = 7
5555
56-let A = 1
56+let A = 8
5757
58-let B = 6
58+let B = 9
5959
60-let C = 7
60+let C = 1
6161
62-let D = 10
62+let D = 6
6363
64-let E = fraction(10, a, 10000)
64+let E = 7
6565
66-func F (G,H) = fraction(toBigInt(G), c, toBigInt(H))
66+let F = 10
67+
68+let G = fraction(10, a, 10000)
69+
70+func H (I,J) = fraction(toBigInt(I), c, toBigInt(J))
6771
6872
69-func I (J,K) = toInt(fraction(J, toBigInt(K), c))
73+func K (I,J) = fraction(I, c, J)
7074
7175
72-func L (M,N,O) = fraction(M, N, O)
76+func L (M,N) = toInt(fraction(M, toBigInt(N), c))
7377
7478
75-func P (J) = if ((d > J))
76- then -(J)
77- else J
79+func O (M,N,P) = toInt(fraction(M, toBigInt(N), c, P))
7880
7981
80-func Q (J) = if ((d > J))
81- then -(J)
82- else J
82+func Q (I,J) = fraction(I, c, toBigInt(J))
8383
8484
85-func R () = "%s__factoryContract"
85+func R (M,N) = fraction(M, toBigInt(N), c)
8686
8787
88-func S () = "%s__managerPublicKey"
88+func S (T,U,V) = fraction(T, U, V)
8989
9090
91-func T () = "%s__pendingManagerPublicKey"
91+func W (M) = if ((d > M))
92+ then -(M)
93+ else M
9294
9395
94-func U () = "%s%s__price__last"
96+func X (M) = if ((d > M))
97+ then -(M)
98+ else M
9599
96100
97-func V (W,X) = makeString(["%s%s%d%d__price__history", toString(W), toString(X)], l)
101+func Y () = "%s__factoryContract"
98102
99103
100-func Y (Z,aa) = ((("%s%s%s__P__" + Z) + "__") + aa)
104+func Z () = "%s__managerPublicKey"
101105
102106
103-func ab (Z,aa) = ((("%s%s%s__G__" + Z) + "__") + aa)
107+func aa () = "%s__pendingManagerPublicKey"
104108
105109
106-func ac () = "%s__amountAsset"
110+func ab () = "%s%s__price__last"
107111
108112
109-func ad () = "%s__priceAsset"
113+func ac (ad,ae) = makeString(["%s%s%d%d__price__history", toString(ad), toString(ae)], n)
110114
111115
112-func ae () = "%s__amp"
116+func af (ag,ah) = ((("%s%s%s__P__" + ag) + "__") + ah)
113117
114118
115-func af () = "%s__addonAddr"
119+func ai (ag,ah) = ((("%s%s%s__G__" + ag) + "__") + ah)
116120
117121
118-func ag () = "%s__swapContract"
122+func aj () = "%s__amountAsset"
119123
120124
121-func ah () = "%s__factoryConfig"
125+func ak () = "%s__priceAsset"
122126
123127
124-func ai () = "%s%s__matcher__publicKey"
128+func al () = "%s__amp"
125129
126130
127-func aj (ak,al) = (((("%d%d%s__" + ak) + "__") + al) + "__config")
131+func am () = "%s__addonAddr"
128132
129133
130-func am (an) = ("%s%s%s__mappings__baseAsset2internalId__" + an)
134+let an = "%s__fee"
135+
136+let ao = valueOrElse(getInteger(this, an), G)
137+
138+let ap = makeString(["%s", "dLp"], n)
139+
140+let aq = makeString(["%s", "dLpRefreshedHeight"], n)
141+
142+let ar = makeString(["%s", "refreshDLpDelay"], n)
143+
144+let as = 30
145+
146+let at = valueOrElse(getInteger(this, ar), as)
147+
148+func au () = "%s__factoryConfig"
131149
132150
133-func ao () = "%s__shutdown"
151+func av () = "%s%s__matcher__publicKey"
134152
135153
136-func ap () = "%s__allowedLpStableScriptHash"
154+func aw (ax,ay) = (((("%d%d%s__" + ax) + "__") + ay) + "__config")
137155
138156
139-func aq () = "%s__feeCollectorAddress"
157+func az (aA) = ("%s%s%s__mappings__baseAsset2internalId__" + aA)
140158
141159
142-func ar (as,at,au) = throw(((((("Failed: ordValid=" + toString(as)) + " sndrValid=") + toString(at)) + " mtchrValid=") + toString(au)))
160+func aB () = "%s__shutdown"
143161
144162
145-func av (J) = {
146- let aw = J
147- if ($isInstanceOf(aw, "String"))
148- then {
149- let ax = aw
150- ax
151- }
152- else throw("fail cast to String")
163+func aC () = "%s__allowedLpStableScriptHash"
164+
165+
166+func aD () = "%s__feeCollectorAddress"
167+
168+
169+func aE (aF,aG,aH,aI) = throw((((((((("order validation failed: orderValid=" + toString(aF)) + " (") + aG) + ")") + " senderValid=") + toString(aH)) + " matcherValid=") + toString(aI)))
170+
171+
172+func aJ (aK,aL) = valueOrErrorMessage(getString(aK, aL), makeString(["mandatory ", toString(aK), ".", aL, " not defined"], ""))
173+
174+
175+func aM (aK,aL) = valueOrErrorMessage(getInteger(aK, aL), makeString(["mandatory ", toString(aK), ".", aL, " not defined"], ""))
176+
177+
178+func aN (aO) = throw(makeString(["lp_stable.ride:", aO], " "))
179+
180+
181+func aP (aO) = makeString(["lp_stable.ride:", aO], " ")
182+
183+
184+let aQ = addressFromStringValue(aJ(this, Y()))
185+
186+let aR = {
187+ let aS = invoke(aQ, "getInFeeREADONLY", [toString(this)], nil)
188+ if ($isInstanceOf(aS, "Int"))
189+ then aS
190+ else throw(($getType(aS) + " couldn't be cast to Int"))
191+ }
192+
193+let aT = {
194+ let aS = invoke(aQ, "getOutFeeREADONLY", [toString(this)], nil)
195+ if ($isInstanceOf(aS, "Int"))
196+ then aS
197+ else throw(($getType(aS) + " couldn't be cast to Int"))
198+ }
199+
200+let aU = aJ(this, al())
201+
202+func aV () = valueOrElse(getBoolean(aQ, aB()), false)
203+
204+
205+func aW () = fromBase58String(aJ(aQ, av()))
206+
207+
208+let aX = addressFromStringValue(aJ(aQ, aD()))
209+
210+func aY () = {
211+ let aZ = aJ(this, aj())
212+ let ba = aJ(this, ak())
213+ let bb = aM(aQ, az(ba))
214+ let ax = aM(aQ, az(aZ))
215+ split(aJ(aQ, aw(toString(ax), toString(bb))), n)
153216 }
154217
155218
156-func ay (az,aA) = valueOrErrorMessage(getString(az, aA), makeString(["mandatory ", toString(az), ".", aA, " not defined"], ""))
219+func bc (bd) = if ((bd == k))
220+ then unit
221+ else fromBase58String(bd)
157222
158223
159-func aB (az,aA) = valueOrErrorMessage(getInteger(az, aA), makeString(["mandatory ", toString(az), ".", aA, " not defined"], ""))
224+func be (bd) = if ((bd == unit))
225+ then k
226+ else toBase58String(value(bd))
160227
161228
162-func aC (aD) = throw(makeString(["lp_stable.ride:", aD], " "))
229+func bf (bg) = $Tuple9(addressFromStringValue(bg[t]), parseIntValue(bg[u]), fromBase58String(bg[v]), bc(bg[w]), bc(bg[x]), parseIntValue(bg[y]), parseIntValue(bg[z]), fromBase58String(bg[A]), fromBase58String(bg[B]))
163230
164231
165-let aE = addressFromStringValue(ay(this, R()))
232+let bh = bf(aY())
166233
167-let aF = {
168- let aG = invoke(aE, "getInFeeREADONLY", [toString(this)], nil)
169- if ($isInstanceOf(aG, "Int"))
170- then aG
171- else throw(($getType(aG) + " couldn't be cast to Int"))
172- }
234+let bi = bh
173235
174-let aH = {
175- let aG = invoke(aE, "getOutFeeREADONLY", [toString(this)], nil)
176- if ($isInstanceOf(aG, "Int"))
177- then aG
178- else throw(($getType(aG) + " couldn't be cast to Int"))
179- }
236+let bj = bi._1
180237
181-let aI = ay(this, ae())
238+let bk = bi._2
182239
183-func aJ () = valueOrElse(getBoolean(aE, ao()), false)
240+let bl = bi._3
241+
242+let bm = bi._4
243+
244+let bn = bi._5
245+
246+let bo = bi._6
247+
248+let bp = bi._7
249+
250+let bq = bi._8
251+
252+let br = bi._9
253+
254+func bs () = split(aJ(aQ, au()), n)
184255
185256
186-func aK () = fromBase58String(ay(aE, ai()))
257+let bt = bs()
258+
259+let bu = valueOrErrorMessage(addressFromString(bt[C]), "Invalid staking contract address")
260+
261+let bv = valueOrErrorMessage(addressFromString(bt[E]), "Invalid slipage contract address")
262+
263+let bw = valueOrErrorMessage(addressFromString(bt[F]), "Invalid gwx contract address")
264+
265+let bx = valueOrErrorMessage(addressFromString(bt[D]), "Invalid gwx contract address")
266+
267+func by (bz,bA,bB,bC,bD,bE,bF,bG,bH,bI) = makeString(["%d%d%d%d%d%d%d%d%d%d", toString(bz), toString(bA), toString(bB), toString(bC), toString(bD), toString(bE), toString(bF), toString(bG), toString(bH), toString(bI)], n)
187268
188269
189-let aL = addressFromStringValue(ay(aE, aq()))
270+func bJ (bK,bL,bM,bC,bF,bG) = makeString(["%d%d%d%d%d%d", toString(bK), toString(bL), toString(bM), toString(bC), toString(bF), toString(bG)], n)
190271
191-func aM () = {
192- let aN = ay(this, ac())
193- let aO = ay(this, ad())
194- let aP = aB(aE, am(aO))
195- let ak = aB(aE, am(aN))
196- split(ay(aE, aj(toString(ak), toString(aP))), l)
272+
273+func bN (bO) = if ((bO == "WAVES"))
274+ then wavesBalance(this).available
275+ else assetBalance(this, fromBase58String(bO))
276+
277+
278+func bP (bQ,bR) = fraction(bQ, c, bR)
279+
280+
281+func bS (bQ,bR,P) = fraction(bQ, c, bR, P)
282+
283+
284+func bT (bU,bV,bW) = {
285+ let bX = fraction((bU - bV), b, bV)
286+ let bY = ((bW - W(bX)) > d)
287+ if (!(bY))
288+ then throw(("Big slpg: " + toString(bX)))
289+ else $Tuple2(bY, min([bU, bV]))
197290 }
198291
199292
200-func aQ (aR) = if ((aR == i))
201- then unit
202- else fromBase58String(aR)
203-
204-
205-func aS (aR) = if ((aR == unit))
206- then i
207- else toBase58String(value(aR))
208-
209-
210-func aT (aU) = $Tuple7(addressFromStringValue(aU[r]), parseIntValue(aU[s]), fromBase58String(aU[t]), aQ(aU[u]), aQ(aU[v]), parseIntValue(aU[w]), parseIntValue(aU[x]))
211-
212-
213-let aV = aT(aM())
214-
215-let aW = aV
216-
217-let aX = aW._1
218-
219-let aY = aW._2
220-
221-let aZ = aW._3
222-
223-let ba = aW._4
224-
225-let bb = aW._5
226-
227-let bc = aW._6
228-
229-let bd = aW._7
230-
231-func be () = split(ay(aE, ah()), l)
232-
233-
234-let bf = be()
235-
236-let bg = valueOrErrorMessage(addressFromString(bf[A]), "Invalid staking contract address")
237-
238-let bh = valueOrErrorMessage(addressFromString(bf[C]), "Invalid slipage contract address")
239-
240-let bi = valueOrErrorMessage(addressFromString(bf[D]), "Invalid gwx contract address")
241-
242-let bj = valueOrErrorMessage(addressFromString(bf[B]), "Invalid gwx contract address")
243-
244-func bk (bl,bm,bn,bo,bp,bq,br,bs,bt,bu) = makeString(["%d%d%d%d%d%d%d%d%d%d", toString(bl), toString(bm), toString(bn), toString(bo), toString(bp), toString(bq), toString(br), toString(bs), toString(bt), toString(bu)], l)
245-
246-
247-func bv (bw,bx,by,bo,br,bs) = makeString(["%d%d%d%d%d%d", toString(bw), toString(bx), toString(by), toString(bo), toString(br), toString(bs)], l)
248-
249-
250-func bz (bA) = if ((bA == "WAVES"))
251- then wavesBalance(this).available
252- else assetBalance(this, fromBase58String(bA))
253-
254-
255-func bB (bC,bD) = fraction(bC, c, bD)
256-
257-
258-func bE (bF,bG,bH) = {
259- let bI = fraction((bF - bG), b, bG)
260- let bJ = ((bH - P(bI)) > d)
261- if (!(bJ))
262- then throw(("Big slpg: " + toString(bI)))
263- else $Tuple2(bJ, min([bF, bG]))
293+func bZ (ca,cb,cc) = {
294+ let bX = fraction(cb, b, ca)
295+ let cd = (cc > bX)
296+ if (if (cd)
297+ then true
298+ else (cb > ca))
299+ then throw(((((((toString(cb) + " ") + toString(ca)) + " ") + toString(bX)) + " ") + toString(cc)))
300+ else cd
264301 }
265302
266303
267-func bK (bL,bM,bN) = {
268- let bI = fraction(bM, b, bL)
269- let bO = (bN > bI)
270- if (if (bO)
271- then true
272- else (bM > bL))
273- then throw(((((((toString(bM) + " ") + toString(bL)) + " ") + toString(bI)) + " ") + toString(bN)))
274- else bO
304+func ce (cf,cg,ch,ci) = {
305+ let cj = H(ch, cf)
306+ let ck = H(ci, cg)
307+ bP(ck, cj)
275308 }
276309
277310
278-func bP (bQ,bR,bS,bT) = {
279- let bU = F(bS, bQ)
280- let bV = F(bT, bR)
281- bB(bV, bU)
311+func cl (ch,ci,cm) = {
312+ let cn = bo
313+ let co = bp
314+ let cp = ce(cn, co, ch, ci)
315+ let bR = H(ch, cn)
316+ let bQ = H(ci, co)
317+ let cq = H(cm, a)
318+ let cr = bP(bR, cq)
319+ let cs = bP(bQ, cq)
320+[cp, cr, cs]
282321 }
283322
284323
285-func bW (bS,bT,bX) = {
286- let bY = aM()
287- let bZ = parseIntValue(bY[w])
288- let ca = parseIntValue(bY[x])
289- let cb = bP(bZ, ca, bS, bT)
290- let bD = F(bS, bZ)
291- let bC = F(bT, ca)
292- let cc = F(bX, a)
293- let cd = bB(bD, cc)
294- let ce = bB(bC, cc)
295-[cb, cd, ce]
324+func ct (ch,ci,cm) = {
325+ let cu = cl(ch, ci, cm)
326+[L(cu[0], a), L(cu[1], a), L(cu[2], a)]
296327 }
297328
298329
299-func cf (bS,bT,bX) = {
300- let cg = bW(bS, bT, bX)
301-[I(cg[0], a), I(cg[1], a), I(cg[2], a)]
330+func cv (cw,ao) = {
331+ let cx = if ((ao == 0))
332+ then 0
333+ else fraction(cw, ao, a)
334+ $Tuple2((cw - cx), cx)
302335 }
303336
304337
305-func ch (ci,cj) = {
306- let ck = if ((cj == 0))
307- then 0
308- else fraction(ci, cj, a)
309- $Tuple2((ci - ck), ck)
310- }
338+func cy (cz) = {
339+ let cA = cz[0]
340+ let cB = cz[1]
341+ let cC = (cA + cB)
342+ if ((cC == e))
343+ then e
344+ else {
345+ let cD = parseIntValue(aU)
346+ let cE = (cD * 2)
347+ let cu = fraction(cA, cB, f)
348+ let cF = fraction(cu, i, f)
349+ let cG = fraction(toBigInt(cE), cC, f)
350+ let cH = toBigInt((cE - 1))
351+ func cI (cJ) = {
352+ let cK = fraction(cJ, cJ, f)
353+ let cL = fraction(cK, cJ, f)
354+ let cM = fraction(cL, f, cF)
355+ fraction((cG + fraction(cM, g, f)), cJ, (fraction(cH, cJ, f) + fraction(h, cM, f)))
356+ }
311357
358+ func cN (cO,cP) = if (cO._2)
359+ then cO
360+ else {
361+ let cJ = cO._1
362+ let cQ = cI(cJ)
363+ let cR = (cQ - value(cJ))
364+ let cS = if ((e > cR))
365+ then -(cR)
366+ else cR
367+ if ((f >= cS))
368+ then $Tuple2(cQ, true)
369+ else $Tuple2(cQ, false)
370+ }
312371
313-func cl (cm,cn,co,cp) = {
314- let bY = aM()
315- let cq = bY[t]
316- let cr = bY[u]
317- let cs = bY[v]
318- let ct = parseIntValue(bY[w])
319- let cu = parseIntValue(bY[x])
320- let cv = bY[s]
321- let cw = valueOrErrorMessage(assetInfo(fromBase58String(cq)), "Wrong LP id").quantity
322- if ((cq != cn))
323- then throw("Wrong pmt asset")
324- else {
325- let cx = bz(cr)
326- let cy = F(cx, ct)
327- let cz = bz(cs)
328- let cA = F(cz, cu)
329- let cB = bB(cA, cy)
330- let cC = I(cB, a)
331- let cD = F(co, a)
332- let cE = F(cw, a)
333- let cF = fraction(cy, cD, cE)
334- let cG = fraction(cA, cD, cE)
335- let cH = I(cF, ct)
336- let cI = I(cG, cu)
337- let cJ = if ((cm == ""))
338- then nil
339- else [ScriptTransfer(cp, cH, if ((cr == "WAVES"))
340- then unit
341- else fromBase58String(cr)), ScriptTransfer(cp, cI, if ((cs == "WAVES"))
342- then unit
343- else fromBase58String(cs)), StringEntry(ab(toString(cp), cm), bv(cH, cI, co, cC, height, lastBlock.timestamp)), IntegerEntry(U(), cC), IntegerEntry(V(height, lastBlock.timestamp), cC)]
344- $Tuple10(cH, cI, cr, cs, cx, cz, cw, cB, cv, cJ)
372+ let cT = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
373+ let cU = {
374+ let cV = cT
375+ let cW = size(cV)
376+ let cX = $Tuple2(cC, false)
377+ func cY (cZ,da) = if ((da >= cW))
378+ then cZ
379+ else cN(cZ, cV[da])
380+
381+ func db (cZ,da) = if ((da >= cW))
382+ then cZ
383+ else throw("List size exceeds 15")
384+
385+ db(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cX, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
386+ }
387+ let cJ = cU._1
388+ let dc = cU._2
389+ if (dc)
390+ then cJ
391+ else throw(("D calculation error, D = " + toString(cJ)))
345392 }
346393 }
347394
348395
349-func cK (cm,bH,cL,cM,cN,cO,cp,cP,cQ,cR,cS,cT,cU) = {
350- let bY = aM()
351- let cq = fromBase58String(bY[t])
352- let cV = bY[u]
353- let cW = bY[v]
354- let cX = bY[y]
355- let cY = bY[z]
356- let cZ = parseIntValue(bY[w])
357- let da = parseIntValue(bY[x])
358- let cv = bY[s]
359- let db = valueOrErrorMessage(assetInfo(cq), "Wr lp as").quantity
360- let cx = if (cP)
361- then bz(cV)
362- else if (if (cR)
363- then (cU == cV)
364- else false)
365- then (bz(cV) - cT)
366- else if (cR)
367- then bz(cV)
368- else (bz(cV) - cL)
369- let cz = if (cP)
370- then bz(cW)
371- else if (if (cR)
372- then (cU == cW)
373- else false)
374- then (bz(cW) - cT)
375- else if (cR)
376- then bz(cW)
377- else (bz(cW) - cN)
378- let dc = F(cL, cZ)
379- let dd = F(cN, da)
380- let de = bB(dd, dc)
381- let cy = F(cx, cZ)
382- let cA = F(cz, da)
383- let df = if ((db == 0))
384- then {
385- let cB = d
386- let dg = d
387- let cc = pow((dc * dd), 0, toBigInt(5), 1, 0, DOWN)
388- $Tuple5(I(cc, a), I(dc, cZ), I(dd, da), bB((cA + dd), (cy + dc)), dg)
389- }
396+func dd (de,df,dg,dh) = {
397+ let di = bl
398+ let dj = toBase58String(value(bm))
399+ let dk = toBase58String(value(bn))
400+ let dl = bo
401+ let dm = bp
402+ let dn = toString(bk)
403+ let do = valueOrErrorMessage(assetInfo(di), "Wrong LP id").quantity
404+ if ((toBase58String(di) != df))
405+ then throw("Wrong pmt asset")
390406 else {
391- let cB = bB(cA, cy)
392- let dh = fraction(P((cB - de)), c, cB)
393- let dg = F(bH, a)
394- if (if (if (cS)
395- then (cB != d)
396- else false)
397- then (dh > dg)
398- else false)
399- then throw(((("Price slippage " + toString(dh)) + " > ") + toString(dg)))
400- else {
401- let di = F(db, a)
402- let dj = fraction(dc, cB, c)
403- let dk = fraction(dd, c, cB)
404- let dl = if ((dj > dd))
405- then $Tuple2(dk, dd)
406- else $Tuple2(dc, dj)
407- let dm = dl._1
408- let dn = dl._2
409- let cc = fraction(di, dn, cA)
410- $Tuple5(I(cc, a), I(dm, cZ), I(dn, da), cB, dg)
411- }
412- }
413- let do = df._1
414- let dp = df._2
415- let dq = df._3
416- let cC = I(df._4, a)
417- let dr = I(df._5, a)
418- if ((0 >= do))
419- then throw("LP <= 0")
420- else {
421- let ds = if (!(cQ))
422- then 0
423- else do
424- let dt = (cL - dp)
425- let du = (cN - dq)
426- let dv = if (if (cR)
427- then (cU == cV)
428- else false)
429- then $Tuple2(cT, 0)
430- else if (if (cR)
431- then (cU == cW)
432- else false)
433- then $Tuple2(0, cT)
434- else $Tuple2(dp, dq)
435- let dw = dv._1
436- let dx = dv._2
437- let dy = [IntegerEntry(U(), cC), IntegerEntry(V(height, lastBlock.timestamp), cC), StringEntry(Y(cp, cm), bk(dw, dx, ds, cC, bH, dr, height, lastBlock.timestamp, dt, du))]
438- $Tuple13(do, ds, cC, cx, cz, db, cq, cv, dy, dt, du, cM, cO)
407+ let dp = bN(dj)
408+ let dq = H(dp, dl)
409+ let dr = bN(dk)
410+ let ds = H(dr, dm)
411+ let dt = bP(ds, dq)
412+ let du = L(dt, a)
413+ let dv = H(dg, a)
414+ let dw = H(do, a)
415+ let dx = fraction(dq, dv, dw)
416+ let dy = fraction(ds, dv, dw)
417+ let dz = O(dx, dl, FLOOR)
418+ let dA = O(dy, dm, FLOOR)
419+ let dB = if ((de == ""))
420+ then nil
421+ else [ScriptTransfer(dh, dz, if ((dj == "WAVES"))
422+ then unit
423+ else fromBase58String(dj)), ScriptTransfer(dh, dA, if ((dk == "WAVES"))
424+ then unit
425+ else fromBase58String(dk)), StringEntry(ai(toString(dh), de), bJ(dz, dA, dg, du, height, lastBlock.timestamp)), IntegerEntry(ab(), du), IntegerEntry(ac(height, lastBlock.timestamp), du)]
426+ $Tuple10(dz, dA, dj, dk, dp, dr, do, dt, dn, dB)
439427 }
440428 }
441429
442430
443-func dz (dA) = {
444- let bY = aM()
445- let dB = bY[u]
446- let dC = bY[v]
447- let cv = parseIntValue(bY[s])
448- let bZ = parseIntValue(bY[w])
449- let ca = parseIntValue(bY[x])
450- let dD = bz(dB)
451- let dE = bz(dC)
452- let cB = if ((dA.orderType == Buy))
453- then bP(bZ, ca, (dD + dA.amount), dE)
454- else bP(bZ, ca, (dD - dA.amount), dE)
455- let cC = I(cB, a)
456- if (if (if (aJ())
457- then true
458- else (cv == p))
459- then true
460- else (cv == q))
461- then throw("Admin blocked")
431+func dC (de,bW,dD,dE,dF,dG,dh,dH,dI,dJ,dK,dL,dM) = {
432+ let di = bl
433+ let dN = toBase58String(value(bm))
434+ let dO = toBase58String(value(bn))
435+ let dP = bq
436+ let dQ = br
437+ let dR = bo
438+ let dS = bp
439+ let dn = toString(bk)
440+ let dT = valueOrErrorMessage(assetInfo(di), "Wr lp as").quantity
441+ let dp = if (dH)
442+ then bN(dN)
443+ else if (if (dJ)
444+ then (dM == dN)
445+ else false)
446+ then (bN(dN) - dL)
447+ else if (dJ)
448+ then bN(dN)
449+ else (bN(dN) - dD)
450+ let dr = if (dH)
451+ then bN(dO)
452+ else if (if (dJ)
453+ then (dM == dO)
454+ else false)
455+ then (bN(dO) - dL)
456+ else if (dJ)
457+ then bN(dO)
458+ else (bN(dO) - dF)
459+ let dU = H(dD, dR)
460+ let dV = H(dF, dS)
461+ let dW = bP(dV, dU)
462+ let dq = H(dp, dR)
463+ let ds = H(dr, dS)
464+ let cb = cy([dq, ds])
465+ let dX = if ((dT == 0))
466+ then {
467+ let ca = cy([(dq + dU), (ds + dV)])
468+ let dY = if ((ca > cb))
469+ then true
470+ else throw("D1 should be greater than D0")
471+ if ((dY == dY))
472+ then {
473+ let dt = d
474+ let dZ = d
475+ let cq = ca
476+ $Tuple5(L(cq, a), L(dU, dR), L(dV, dS), bP((ds + dV), (dq + dU)), dZ)
477+ }
478+ else throw("Strict value is not equal to itself.")
479+ }
462480 else {
463- let dF = dA.assetPair.amountAsset
464- let dG = if ((dF == unit))
465- then "WAVES"
466- else toBase58String(value(dF))
467- let dH = dA.assetPair.priceAsset
468- let dI = if ((dH == unit))
469- then "WAVES"
470- else toBase58String(value(dH))
471- if (if ((dG != dB))
472- then true
473- else (dI != dC))
474- then throw("Wr assets")
481+ let dt = bP(ds, dq)
482+ let ea = fraction(W((dt - dW)), c, dt)
483+ let dZ = H(bW, a)
484+ if (if (if (dK)
485+ then (dt != d)
486+ else false)
487+ then (ea > dZ)
488+ else false)
489+ then throw(((("Price slippage " + toString(ea)) + " > ") + toString(dZ)))
475490 else {
476- let dJ = dA.price
477- let da = fraction(a, ca, bZ)
478- let dK = L(dJ, a, da)
479- let dL = if ((dA.orderType == Buy))
480- then (cC >= dK)
481- else (dK >= cC)
482- true
491+ let eb = H(dT, a)
492+ let ec = fraction(dU, bS(ds, dq, CEILING), c, CEILING)
493+ let ed = fraction(dV, c, bS(ds, dq, FLOOR), CEILING)
494+ let ee = if ((ec > dV))
495+ then $Tuple2(ed, dV)
496+ else $Tuple2(dU, ec)
497+ let ef = ee._1
498+ let eg = ee._2
499+ let ca = cy([(dq + ef), (ds + eg)])
500+ let dY = if ((ca > cb))
501+ then true
502+ else throw("D1 should be greater than D0")
503+ if ((dY == dY))
504+ then {
505+ let cq = fraction(eb, (ca - cb), cb)
506+ $Tuple5(O(cq, a, FLOOR), O(ef, dR, CEILING), O(eg, dS, CEILING), dt, dZ)
507+ }
508+ else throw("Strict value is not equal to itself.")
483509 }
510+ }
511+ let eh = dX._1
512+ let ei = dX._2
513+ let ej = dX._3
514+ let du = L(dX._4, a)
515+ let ek = L(dX._5, a)
516+ if ((0 >= eh))
517+ then throw("LP <= 0")
518+ else {
519+ let el = if (!(dI))
520+ then 0
521+ else eh
522+ let em = (dD - ei)
523+ let en = (dF - ej)
524+ let eo = if (if (dJ)
525+ then (dM == dN)
526+ else false)
527+ then $Tuple2(dL, 0)
528+ else if (if (dJ)
529+ then (dM == dO)
530+ else false)
531+ then $Tuple2(0, dL)
532+ else $Tuple2(ei, ej)
533+ let ep = eo._1
534+ let eq = eo._2
535+ let er = [IntegerEntry(ab(), du), IntegerEntry(ac(height, lastBlock.timestamp), du), StringEntry(af(dh, de), by(ep, eq, el, du, bW, ek, height, lastBlock.timestamp, em, en))]
536+ $Tuple13(eh, el, du, dp, dr, dT, di, dn, er, em, en, dE, dG)
484537 }
485538 }
486539
487540
488-func dM (dN) = if ((size(dN.payments) != 1))
541+func es (cz,cP,et) = {
542+ let eu = g
543+ let ev = cz[if ((cP == 0))
544+ then 1
545+ else 0]
546+ let ew = parseBigIntValue(l)
547+ let cD = (parseBigIntValue(aU) * ew)
548+ let cC = ev
549+ let cE = (cD * eu)
550+ let ex = (((((et * et) / (ev * eu)) * et) * ew) / (cE * eu))
551+ let ey = ((cC + ((et * ew) / cE)) - et)
552+ func cN (cO,ez) = {
553+ let eA = cO
554+ let eB = eA._1
555+ let dc = eA._2
556+ if ((dc != unit))
557+ then cO
558+ else {
559+ let eC = (((eB * eB) + ex) / ((g * eB) + ey))
560+ let eD = X((eC - value(eB)))
561+ if ((f >= eD))
562+ then $Tuple2(eC, ez)
563+ else $Tuple2(eC, unit)
564+ }
565+ }
566+
567+ let cT = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
568+ let eE = {
569+ let cV = cT
570+ let cW = size(cV)
571+ let cX = $Tuple2(et, unit)
572+ func cY (cZ,da) = if ((da >= cW))
573+ then cZ
574+ else cN(cZ, cV[da])
575+
576+ func db (cZ,da) = if ((da >= cW))
577+ then cZ
578+ else throw("List size exceeds 15")
579+
580+ db(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cX, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
581+ }
582+ let eB = eE._1
583+ let dc = eE._2
584+ if ((dc != unit))
585+ then eB
586+ else throw(("Y calculation error, Y = " + toString(eB)))
587+ }
588+
589+
590+func eF (eG,eH,eI) = {
591+ let eJ = fraction(cy([K(eG, toBigInt(bo)), K(eH, toBigInt(bp))]), c, eI)
592+ if ((eI == e))
593+ then e
594+ else eJ
595+ }
596+
597+
598+func eK (eL,eM,eN) = {
599+ let eO = (toBigInt(bN(be(bm))) - eL)
600+ let eP = (toBigInt(bN(be(bn))) - eM)
601+ let eQ = (toBigInt(value(assetInfo(bl)).quantity) - eN)
602+ let eR = eF(eO, eP, eQ)
603+ eR
604+ }
605+
606+
607+func eS (eT,eU,eN) = {
608+ let eO = (bN(be(bm)) + eT)
609+ let eP = (bN(be(bn)) + eU)
610+ let eQ = (value(assetInfo(bl)).quantity + eN)
611+ let eJ = eF(toBigInt(eO), toBigInt(eP), toBigInt(eQ))
612+ let eV = [IntegerEntry(aq, height), StringEntry(ap, toString(eJ))]
613+ $Tuple2(eV, eJ)
614+ }
615+
616+
617+func eW (eX,eJ) = if ((eJ >= eX))
618+ then true
619+ else aN("updated DLp lower than current DLp")
620+
621+
622+func eY (eZ) = {
623+ let eO = bN(be(bm))
624+ let eP = bN(be(bn))
625+ let fa = eZ.amount
626+ let fb = fraction(eZ.amount, eZ.price, a, FLOOR)
627+ let fc = if ((eZ.orderType == Buy))
628+ then $Tuple2(fa, -(fb))
629+ else $Tuple2(-(fa), fb)
630+ let eT = fc._1
631+ let eU = fc._2
632+ if (if (if (aV())
633+ then true
634+ else (bk == r))
635+ then true
636+ else (bk == s))
637+ then throw("Admin blocked")
638+ else if (if ((eZ.assetPair.amountAsset != bm))
639+ then true
640+ else (eZ.assetPair.priceAsset != bn))
641+ then throw("Wr assets")
642+ else {
643+ let fd = parseBigIntValue(valueOrElse(getString(this, ap), "0"))
644+ let fe = eS(eT, eU, 0)
645+ let ff = fe._1
646+ let fg = fe._2
647+ let fh = (fg >= fd)
648+ let fi = makeString(["dLp=", toString(fd), " dLpNew=", toString(fg), " amountAssetBalance=", toString(eO), " priceAssetBalance=", toString(eP), " amountAssetBalanceDelta=", toString(eT), " priceAssetBalanceDelta=", toString(eU), " height=", toString(height)], "")
649+ $Tuple2(fh, fi)
650+ }
651+ }
652+
653+
654+func fj (cP) = if ((size(cP.payments) != 1))
489655 then throw("1 pmnt exp")
490656 else {
491- let dO = value(dN.payments[0])
492- let cn = value(dO.assetId)
493- let cT = dO.amount
494- let df = cl(toBase58String(dN.transactionId), toBase58String(cn), cT, dN.caller)
495- let cH = df._1
496- let cI = df._2
497- let cv = parseIntValue(df._9)
498- let cJ = df._10
499- if (if (aJ())
657+ let fk = value(cP.payments[0])
658+ let df = value(fk.assetId)
659+ let dL = fk.amount
660+ let dX = dd(toBase58String(cP.transactionId), toBase58String(df), dL, cP.caller)
661+ let dz = dX._1
662+ let dA = dX._2
663+ let dn = parseIntValue(dX._9)
664+ let dB = dX._10
665+ if (if (aV())
500666 then true
501- else (cv == q))
502- then throw(("Admin blocked: " + toString(cv)))
503- else $Tuple5(cH, cI, cT, cn, cJ)
667+ else (dn == s))
668+ then throw(("Admin blocked: " + toString(dn)))
669+ else $Tuple5(dz, dA, dL, df, dB)
504670 }
505671
506672
507-func dP (dQ,aa,dR,dS,bH,cQ,cR,cS,cT,cU) = {
508- let df = cK(aa, bH, value(dR).amount, value(dR).assetId, value(dS).amount, value(dS).assetId, dQ, (aa == ""), cQ, cR, cS, cT, cU)
509- let cv = parseIntValue(df._8)
510- if (if (if (aJ())
673+func fl (fm,ah,fn,fo,bW,dI,dJ,dK,dL,dM) = {
674+ let dX = dC(ah, bW, value(fn).amount, value(fn).assetId, value(fo).amount, value(fo).assetId, fm, (ah == ""), dI, dJ, dK, dL, dM)
675+ let dn = parseIntValue(dX._8)
676+ if (if (if (aV())
511677 then true
512- else (cv == o))
678+ else (dn == q))
513679 then true
514- else (cv == q))
515- then throw(("Blocked:" + toString(cv)))
516- else df
680+ else (dn == s))
681+ then throw(("Blocked:" + toString(dn)))
682+ else dX
517683 }
518684
519685
520-func dT (dU) = {
521- let dV = g
522- let dW = dU[0]
523- let dX = dU[1]
524- let dY = parseBigIntValue(j)
525- let dZ = (parseBigIntValue(aI) * dY)
526- let ea = (dW + dX)
527- if ((ea == e))
528- then e
529- else {
530- let eb = (dZ * dV)
531- let ec = (((dW * dX) * dV) * dV)
532- let ed = ((eb * ea) / dY)
533- let ee = (eb - dY)
534- let ef = (dV + f)
535- func eg (eh,ei) = {
536- let ej = eh
537- let ek = ej._1
538- let el = ej._2
539- if ((el != unit))
540- then eh
541- else {
542- let em = (((ek * ek) * ek) / ec)
543- let en = (((ed + (em * dV)) * ek) / (((ee * ek) / dY) + (ef * em)))
544- let eo = Q((en - value(ek)))
545- if ((f >= eo))
546- then $Tuple2(en, ei)
547- else $Tuple2(en, unit)
548- }
549- }
550-
551- let ep = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24]
552- let eq = {
553- let er = ep
554- let es = size(er)
555- let et = $Tuple2(ea, unit)
556- func eu (ev,ew) = if ((ew >= es))
557- then ev
558- else eg(ev, er[ew])
559-
560- func ex (ev,ew) = if ((ew >= es))
561- then ev
562- else throw("List size exceeds 25")
563-
564- ex(eu(eu(eu(eu(eu(eu(eu(eu(eu(eu(eu(eu(eu(eu(eu(eu(eu(eu(eu(eu(eu(eu(eu(eu(eu(et, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25)
565- }
566- let ek = eq._1
567- let el = eq._2
568- if ((el != unit))
569- then ek
570- else throw(("D calculation error, D = " + toString(ek)))
571- }
572- }
573-
574-
575-func ey (dU,dN,ez) = {
576- let dV = g
577- let eA = dU[if ((dN == 0))
578- then 1
579- else 0]
580- let dY = parseBigIntValue(j)
581- let dZ = (parseBigIntValue(aI) * dY)
582- let ea = eA
583- let eb = (dZ * dV)
584- let eB = (((((ez * ez) / (eA * dV)) * ez) * dY) / (eb * dV))
585- let eC = ((ea + ((ez * dY) / eb)) - ez)
586- func eg (eh,ei) = {
587- let eD = eh
588- let eE = eD._1
589- let el = eD._2
590- if ((el != unit))
591- then eh
592- else {
593- let eF = (((eE * eE) + eB) / ((g * eE) + eC))
594- let eG = Q((eF - value(eE)))
595- if ((f >= eG))
596- then $Tuple2(eF, ei)
597- else $Tuple2(eF, unit)
598- }
599- }
600-
601- let ep = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
602- let eH = {
603- let er = ep
604- let es = size(er)
605- let et = $Tuple2(ez, unit)
606- func eu (ev,ew) = if ((ew >= es))
607- then ev
608- else eg(ev, er[ew])
609-
610- func ex (ev,ew) = if ((ew >= es))
611- then ev
612- else throw("List size exceeds 15")
613-
614- ex(eu(eu(eu(eu(eu(eu(eu(eu(eu(eu(eu(eu(eu(eu(eu(et, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
615- }
616- let eE = eH._1
617- let el = eH._2
618- if ((el != unit))
619- then eE
620- else throw(("Y calculation error, Y = " + toString(eE)))
621- }
622-
623-
624-func eI (eJ,cn,cp,aa,eK) = {
625- let aU = aM()
626- let cr = aU[u]
627- let cs = aU[v]
628- let cq = aU[t]
629- let cZ = parseIntValue(aU[w])
630- let da = parseIntValue(aU[x])
631- let eL = toBigInt(valueOrErrorMessage(assetInfo(fromBase58String(cq)), "invalid lp asset").quantity)
632- let eM = if ((eL > e))
686+func fp (fq,df,dh,ah,fr) = {
687+ let dj = toBase58String(value(bm))
688+ let dk = toBase58String(value(bn))
689+ let di = bl
690+ let dR = bo
691+ let dS = bp
692+ let eQ = toBigInt(valueOrErrorMessage(assetInfo(di), "invalid lp asset").quantity)
693+ let fs = if ((eQ > e))
633694 then true
634695 else throw("initial deposit requires all coins")
635- if ((eM == eM))
696+ if ((fs == fs))
636697 then {
637- let cx = bz(cr)
638- let cz = bz(cs)
639- let eN = if ((aa == ""))
640- then $Tuple2(cx, cz)
641- else if ((cn == cr))
642- then if ((eJ > cx))
698+ let dp = bN(dj)
699+ let dr = bN(dk)
700+ let ft = if ((ah == ""))
701+ then $Tuple2(dp, dr)
702+ else if ((df == dj))
703+ then if ((fq > dp))
643704 then throw("invalid payment amount")
644- else $Tuple2((cx - eJ), cz)
645- else if ((cn == cs))
646- then if ((eJ > cz))
705+ else $Tuple2((dp - fq), dr)
706+ else if ((df == dk))
707+ then if ((fq > dr))
647708 then throw("invalid payment amount")
648- else $Tuple2(cx, (cz - eJ))
709+ else $Tuple2(dp, (dr - fq))
649710 else throw("wrong pmtAssetId")
650- let eO = eN._1
651- let eP = eN._2
652- let eQ = if ((cn == cr))
653- then $Tuple2(eJ, 0)
654- else if ((cn == cs))
655- then $Tuple2(0, eJ)
711+ let fu = ft._1
712+ let fv = ft._2
713+ let fw = if ((df == dj))
714+ then $Tuple2(fq, 0)
715+ else if ((df == dk))
716+ then $Tuple2(0, fq)
656717 else throw("invalid payment")
657- let eR = eQ._1
658- let eS = eQ._2
659- let eT = if (eK)
660- then $Tuple3(ch(eR, aF)._1, ch(eS, aF)._1, ch(eJ, aF)._2)
661- else $Tuple3(eR, eS, 0)
662- let eU = eT._1
663- let eV = eT._2
664- let ck = eT._3
665- let eW = (eO + eU)
666- let eX = (eP + eV)
667- let bM = dT([toBigInt(eO), toBigInt(eP)])
668- let bL = dT([toBigInt(eW), toBigInt(eX)])
669- let eY = if ((bL > bM))
718+ let fx = fw._1
719+ let fy = fw._2
720+ let fz = if (fr)
721+ then $Tuple3(cv(fx, aR)._1, cv(fy, aR)._1, cv(fq, aR)._2)
722+ else $Tuple3(fx, fy, 0)
723+ let fA = fz._1
724+ let fB = fz._2
725+ let cx = fz._3
726+ let fC = (fu + fA)
727+ let fD = (fv + fB)
728+ let cb = cy([H(fu, bo), H(fv, bp)])
729+ let ca = cy([H(fC, bo), H(fD, bp)])
730+ let dY = if ((ca > cb))
670731 then true
671732 else throw()
672- if ((eY == eY))
733+ if ((dY == dY))
673734 then {
674- let eZ = fraction(eL, (bL - bM), bM)
675- let cC = I(bB(F(eX, da), F(eW, cZ)), a)
676- let dy = [IntegerEntry(U(), cC), IntegerEntry(V(height, lastBlock.timestamp), cC), StringEntry(Y(cp, aa), bk(eR, eS, toInt(eZ), cC, 0, 0, height, lastBlock.timestamp, 0, 0))]
677- let fa = fraction(eP, a, eO)
678- let fb = fraction(eJ, a, (fa + a))
679- let fc = (eJ - fb)
680- let fd = fraction(eL, toBigInt(fc), toBigInt(eP))
681- let fe = toInt(fraction((eZ - fd), b, fd))
682- $Tuple4(toInt(eZ), dy, ck, fe)
735+ let fE = fraction(eQ, (ca - cb), cb, FLOOR)
736+ let du = L(bP(H(fD, dS), H(fC, dR)), a)
737+ let er = [IntegerEntry(ab(), du), IntegerEntry(ac(height, lastBlock.timestamp), du), StringEntry(af(dh, ah), by(fx, fy, toInt(fE), du, 0, 0, height, lastBlock.timestamp, 0, 0))]
738+ let fF = fraction(fv, a, fu)
739+ let fG = fraction(fq, a, (fF + a))
740+ let fH = (fq - fG)
741+ let fI = fraction(eQ, toBigInt(fH), toBigInt(fv))
742+ let fJ = toInt(fraction((fE - fI), b, fI))
743+ $Tuple4(toInt(fE), er, cx, fJ)
683744 }
684745 else throw("Strict value is not equal to itself.")
685746 }
686747 else throw("Strict value is not equal to itself.")
687748 }
688749
689750
690-func ff (fg,fh,fi,dQ,fj,fk) = {
691- let aU = aM()
692- let cq = aU[t]
693- let cr = aU[u]
694- let cs = aU[v]
695- let fl = parseIntValue(aU[w])
696- let fm = parseIntValue(aU[x])
697- let fn = aU[s]
698- let cp = if ((dQ == bj))
699- then fj
700- else dQ
701- let dO = value(fi[0])
702- let cn = value(dO.assetId)
703- let cT = dO.amount
704- let cm = toBase58String(fk)
705- if ((cq != toBase58String(cn)))
706- then throw("Wrong LP")
707- else {
708- let cx = bz(cr)
709- let cz = bz(cs)
710- let fo = {
711- let aG = invoke(this, "getOneTknV2READONLY", [fg, cT], nil)
712- if ($isInstanceOf(aG, "(Int, Int)"))
713- then aG
714- else throw(($getType(aG) + " couldn't be cast to (Int, Int)"))
715- }
716- if ((fo == fo))
717- then {
718- let ck = fo._2
719- let fp = fo._1
720- let fq = if (if ((fh > 0))
721- then (fh > fp)
722- else false)
723- then aC(makeString(["amount to receive is less than ", toString(fh)], ""))
724- else fp
725- let fr = if ((fg == cr))
726- then $Tuple4(fq, 0, ((cx - fq) - ck), cz)
727- else if ((fg == cs))
728- then $Tuple4(0, fq, cx, ((cz - fq) - ck))
729- else throw("invalid out asset id")
730- let fs = fr._1
731- let ft = fr._2
732- let eW = fr._3
733- let eX = fr._4
734- let fu = bB(F(eX, fm), F(eW, fl))
735- let fv = I(fu, a)
736- let fw = if ((fg == "WAVES"))
737- then unit
738- else fromBase58String(fg)
739- let fx = if ((ck > 0))
740- then [ScriptTransfer(aL, ck, fw)]
741- else nil
742- let cJ = ([ScriptTransfer(cp, fq, fw), StringEntry(ab(toString(cp), cm), bv(fs, ft, cT, fv, height, lastBlock.timestamp)), IntegerEntry(U(), fv), IntegerEntry(V(height, lastBlock.timestamp), fv)] ++ fx)
743- if ((cJ == cJ))
751+func fK (fL,fM,fN,fm,fO,fP) = {
752+ let di = toBase58String(value(bl))
753+ let dj = toBase58String(value(bm))
754+ let dk = toBase58String(value(bn))
755+ let fQ = bo
756+ let fR = bp
757+ let fS = bk
758+ let dh = if ((fm == bx))
759+ then fO
760+ else fm
761+ let fk = value(fN[0])
762+ let df = value(fk.assetId)
763+ let dL = fk.amount
764+ let eR = eK(e, e, e)
765+ if ((eR == eR))
766+ then {
767+ let de = toBase58String(fP)
768+ if ((di != toBase58String(df)))
769+ then throw("Wrong LP")
770+ else {
771+ let dp = bN(dj)
772+ let dr = bN(dk)
773+ let fT = {
774+ let aS = invoke(this, "getOneTknV2READONLY", [fL, dL], nil)
775+ if ($isInstanceOf(aS, "(Int, Int)"))
776+ then aS
777+ else throw(($getType(aS) + " couldn't be cast to (Int, Int)"))
778+ }
779+ if ((fT == fT))
744780 then {
745- let fy = invoke(aE, "burn", [cT], [AttachedPayment(cn, cT)])
746- if ((fy == fy))
747- then $Tuple2(cJ, fq)
781+ let cx = fT._2
782+ let fU = fT._1
783+ let fV = if (if ((fM > 0))
784+ then (fM > fU)
785+ else false)
786+ then aN(makeString(["amount to receive is less than ", toString(fM)], ""))
787+ else fU
788+ let fW = if ((fL == dj))
789+ then $Tuple4(fV, 0, ((dp - fV) - cx), dr)
790+ else if ((fL == dk))
791+ then $Tuple4(0, fV, dp, ((dr - fV) - cx))
792+ else throw("invalid out asset id")
793+ let fX = fW._1
794+ let fY = fW._2
795+ let fC = fW._3
796+ let fD = fW._4
797+ let fZ = bP(H(fD, fR), H(fC, fQ))
798+ let ga = L(fZ, a)
799+ let gb = if ((fL == "WAVES"))
800+ then unit
801+ else fromBase58String(fL)
802+ let gc = if ((cx > 0))
803+ then [ScriptTransfer(aX, cx, gb)]
804+ else nil
805+ let dB = ([ScriptTransfer(dh, fV, gb), StringEntry(ai(toString(dh), de), bJ(fX, fY, dL, ga, height, lastBlock.timestamp)), IntegerEntry(ab(), ga), IntegerEntry(ac(height, lastBlock.timestamp), ga)] ++ gc)
806+ if ((dB == dB))
807+ then {
808+ let gd = invoke(aQ, "burn", [dL], [AttachedPayment(df, dL)])
809+ if ((gd == gd))
810+ then {
811+ let ge = {
812+ let gf = if ((this == aX))
813+ then 0
814+ else cx
815+ let gg = if ((bc(fL) == bm))
816+ then true
817+ else false
818+ if (gg)
819+ then $Tuple2(-((fU + gf)), 0)
820+ else $Tuple2(0, -((fU + gf)))
821+ }
822+ let eT = ge._1
823+ let eU = ge._2
824+ let gh = eS(eT, eU, 0)
825+ let gi = gh._1
826+ let eJ = gh._2
827+ let gj = eW(eR, eJ)
828+ if ((gj == gj))
829+ then $Tuple2((dB ++ gi), fV)
830+ else throw("Strict value is not equal to itself.")
831+ }
832+ else throw("Strict value is not equal to itself.")
833+ }
748834 else throw("Strict value is not equal to itself.")
749835 }
750836 else throw("Strict value is not equal to itself.")
751837 }
752- else throw("Strict value is not equal to itself.")
753838 }
839+ else throw("Strict value is not equal to itself.")
754840 }
755841
756842
757-func fz () = {
758- let aw = getString(S())
759- if ($isInstanceOf(aw, "String"))
843+func gk () = {
844+ let gl = getString(Z())
845+ if ($isInstanceOf(gl, "String"))
760846 then {
761- let ea = aw
762- fromBase58String(ea)
847+ let cC = gl
848+ fromBase58String(cC)
763849 }
764- else if ($isInstanceOf(aw, "Unit"))
850+ else if ($isInstanceOf(gl, "Unit"))
765851 then unit
766852 else throw("Match error")
767853 }
768854
769855
770-func fA () = {
771- let aw = getString(T())
772- if ($isInstanceOf(aw, "String"))
856+func gm () = {
857+ let gl = getString(aa())
858+ if ($isInstanceOf(gl, "String"))
773859 then {
774- let ea = aw
775- fromBase58String(ea)
860+ let cC = gl
861+ fromBase58String(cC)
776862 }
777- else if ($isInstanceOf(aw, "Unit"))
863+ else if ($isInstanceOf(gl, "Unit"))
778864 then unit
779865 else throw("Match error")
780866 }
781867
782868
783-let fB = throw("Permission denied")
869+let gn = throw("Permission denied")
784870
785-func fC (dN) = {
786- let aw = fz()
787- if ($isInstanceOf(aw, "ByteVector"))
871+func go (cP) = {
872+ let gl = gk()
873+ if ($isInstanceOf(gl, "ByteVector"))
788874 then {
789- let fD = aw
790- (dN.callerPublicKey == fD)
875+ let gp = gl
876+ (cP.callerPublicKey == gp)
791877 }
792- else if ($isInstanceOf(aw, "Unit"))
793- then (dN.caller == this)
878+ else if ($isInstanceOf(gl, "Unit"))
879+ then (cP.caller == this)
794880 else throw("Match error")
795881 }
796882
797883
798-func fE (dN) = {
799- let aw = fz()
800- if ($isInstanceOf(aw, "ByteVector"))
884+func gq (cP) = {
885+ let gl = gk()
886+ if ($isInstanceOf(gl, "ByteVector"))
801887 then {
802- let fD = aw
803- if ((dN.callerPublicKey == fD))
888+ let gp = gl
889+ if ((cP.callerPublicKey == gp))
804890 then true
805- else fB
891+ else gn
806892 }
807- else if ($isInstanceOf(aw, "Unit"))
808- then if ((dN.caller == this))
893+ else if ($isInstanceOf(gl, "Unit"))
894+ then if ((cP.caller == this))
809895 then true
810- else fB
896+ else gn
811897 else throw("Match error")
812898 }
813899
814900
815-func fF (fG,ez,fH) = {
816- let aU = aM()
817- let cr = aU[u]
818- let cs = aU[v]
819- let dV = g
820- let dY = parseBigIntValue(j)
821- let dZ = (parseBigIntValue(aI) * dY)
822- let dU = if ((fG == false))
823- then [(toBigInt(bz(cr)) + fH), toBigInt(bz(cs))]
824- else [(toBigInt(bz(cs)) + fH), toBigInt(bz(cr))]
825- let eA = dU[0]
826- let ea = eA
827- let eb = (dZ * dV)
828- let eB = (((((ez * ez) / (eA * dV)) * ez) * dY) / (eb * dV))
829- let eC = ((ea + ((ez * dY) / eb)) - ez)
830- func eg (eh,ei) = {
831- let fI = eh
832- let eE = fI._1
833- let el = fI._2
834- if ((el != unit))
835- then eh
901+func gr (gs,et,gt) = {
902+ let bg = aY()
903+ let dj = bg[w]
904+ let dk = bg[x]
905+ let eu = g
906+ let ew = parseBigIntValue(l)
907+ let cD = (parseBigIntValue(aU) * ew)
908+ let cz = if ((gs == false))
909+ then [(toBigInt(bN(dj)) + gt), toBigInt(bN(dk))]
910+ else [(toBigInt(bN(dk)) + gt), toBigInt(bN(dj))]
911+ let ev = cz[0]
912+ let cC = ev
913+ let cE = (cD * eu)
914+ let ex = (((((et * et) / (ev * eu)) * et) * ew) / (cE * eu))
915+ let ey = ((cC + ((et * ew) / cE)) - et)
916+ func cN (cO,ez) = {
917+ let gu = cO
918+ let eB = gu._1
919+ let dc = gu._2
920+ if ((dc != unit))
921+ then cO
836922 else {
837- let eF = (((eE * eE) + eB) / ((g * eE) + eC))
838- let eG = Q((eF - value(eE)))
839- if ((f >= eG))
840- then $Tuple2(eF, ei)
841- else $Tuple2(eF, unit)
923+ let eC = (((eB * eB) + ex) / ((g * eB) + ey))
924+ let eD = X((eC - value(eB)))
925+ if ((f >= eD))
926+ then $Tuple2(eC, ez)
927+ else $Tuple2(eC, unit)
842928 }
843929 }
844930
845- let ep = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
846- let fJ = {
847- let er = ep
848- let es = size(er)
849- let et = $Tuple2(ez, unit)
850- func eu (ev,ew) = if ((ew >= es))
851- then ev
852- else eg(ev, er[ew])
931+ let cT = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
932+ let gv = {
933+ let cV = cT
934+ let cW = size(cV)
935+ let cX = $Tuple2(et, unit)
936+ func cY (cZ,da) = if ((da >= cW))
937+ then cZ
938+ else cN(cZ, cV[da])
853939
854- func ex (ev,ew) = if ((ew >= es))
855- then ev
940+ func db (cZ,da) = if ((da >= cW))
941+ then cZ
856942 else throw("List size exceeds 15")
857943
858- ex(eu(eu(eu(eu(eu(eu(eu(eu(eu(eu(eu(eu(eu(eu(eu(et, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
944+ db(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cX, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
859945 }
860- let eE = fJ._1
861- let el = fJ._2
862- if ((el != unit))
863- then eE
864- else throw(("Y calculation error, Y = " + toString(eE)))
946+ let eB = gv._1
947+ let dc = gv._2
948+ if ((dc != unit))
949+ then eB
950+ else throw(("Y calculation error, Y = " + toString(eB)))
865951 }
866952
867953
868-@Callable(dN)
869-func calculateAmountOutForSwapREADONLY (fK,fG) = {
870- let fL = if ((fG == false))
954+@Callable(cP)
955+func calculateAmountOutForSwapREADONLY (gw,gs) = {
956+ let gx = if ((gs == false))
871957 then {
872- let fM = ay(this, ad())
873- let fH = (toBigInt(bz(ay(this, ac()))) + toBigInt(fK))
874- $Tuple2(fM, fH)
958+ let gy = aJ(this, ak())
959+ let gt = (toBigInt(bN(aJ(this, aj()))) + toBigInt(gw))
960+ $Tuple2(gy, gt)
875961 }
876962 else {
877- let fM = ay(this, ac())
878- let fH = (toBigInt(bz(ay(this, ad()))) + toBigInt(fK))
879- $Tuple2(fM, fH)
963+ let gy = aJ(this, aj())
964+ let gt = (toBigInt(bN(aJ(this, ak()))) + toBigInt(gw))
965+ $Tuple2(gy, gt)
880966 }
881- let fM = fL._1
882- let fH = fL._2
883- let aU = aM()
884- let cr = aU[u]
885- let cs = aU[v]
886- let dU = [toBigInt(bz(cr)), toBigInt(bz(cs))]
887- let ez = dT(dU)
888- let eE = fF(fG, ez, toBigInt(fK))
889- let fN = ((toBigInt(bz(fM)) - eE) - toBigInt(1))
890- let fO = max([0, toInt(fN)])
891- let fP = if ((fG == false))
892- then [(toBigInt(bz(cr)) + toBigInt(fK)), (toBigInt(bz(cs)) - fN)]
893- else [(toBigInt(bz(cr)) - fN), (toBigInt(bz(cs)) + toBigInt(fK))]
894- let fQ = dT(fP)
895- let eY = if ((fQ >= ez))
967+ let gy = gx._1
968+ let gt = gx._2
969+ let bg = aY()
970+ let dj = bg[w]
971+ let dk = bg[x]
972+ let cz = [toBigInt(bN(dj)), toBigInt(bN(dk))]
973+ let et = cy(cz)
974+ let eB = gr(gs, et, toBigInt(gw))
975+ let gz = ((toBigInt(bN(gy)) - eB) - toBigInt(1))
976+ let gA = max([0, toInt(gz)])
977+ let gB = if ((gs == false))
978+ then [(toBigInt(bN(dj)) + toBigInt(gw)), (toBigInt(bN(dk)) - gz)]
979+ else [(toBigInt(bN(dj)) - gz), (toBigInt(bN(dk)) + toBigInt(gw))]
980+ let gC = cy(gB)
981+ let dY = if ((gC >= et))
896982 then true
897- else throw(makeString(["new D is fewer error", toString(ez), toString(fQ)], "__"))
898- if ((eY == eY))
899- then $Tuple2(nil, fO)
983+ else throw(makeString(["new D is fewer error", toString(et), toString(gC)], "__"))
984+ if ((dY == dY))
985+ then $Tuple2(nil, gA)
900986 else throw("Strict value is not equal to itself.")
901987 }
902988
903989
904990
905-@Callable(dN)
906-func calculateAmountOutForSwapAndSendTokens (fK,fG,fR,fS) = {
907- let fT = [if ((value(dN.payments[0]).amount >= fK))
991+@Callable(cP)
992+func calculateAmountOutForSwapAndSendTokens (gw,gs,gD,gE) = {
993+ let gF = {
994+ let aS = invoke(addressFromStringValue(Y()), "getSwapContractREADONLY", nil, nil)
995+ if ($isInstanceOf(aS, "String"))
996+ then aS
997+ else throw(($getType(aS) + " couldn't be cast to String"))
998+ }
999+ let gG = [if ((value(cP.payments[0]).amount >= gw))
9081000 then true
909- else aC("Wrong amount"), if ((dN.caller == addressFromStringValue(ay(this, ag()))))
1001+ else aN("Wrong amount"), if ((cP.caller == addressFromStringValue(gF)))
9101002 then true
911- else aC("Permission denied")]
912- if ((fT == fT))
1003+ else aN("Permission denied")]
1004+ if ((gG == gG))
9131005 then {
914- let dO = value(dN.payments[0])
915- let fU = if ((dO.assetId == unit))
1006+ let fk = value(cP.payments[0])
1007+ let gH = if ((fk.assetId == unit))
9161008 then toBase58String(toBytes("WAVES"))
917- else toBase58String(value(dO.assetId))
918- let fV = if ((fG == false))
1009+ else toBase58String(value(fk.assetId))
1010+ let gI = if ((gs == false))
9191011 then {
920- let fM = ay(this, ad())
921- let fH = (bz(fU) - value(dN.payments[0]).amount)
922- $Tuple2(fM, fH)
1012+ let gy = aJ(this, ak())
1013+ let gt = (bN(gH) - value(cP.payments[0]).amount)
1014+ $Tuple2(gy, gt)
9231015 }
9241016 else {
925- let fM = ay(this, ac())
926- let fH = (bz(fU) - value(dN.payments[0]).amount)
927- $Tuple2(fM, fH)
1017+ let gy = aJ(this, aj())
1018+ let gt = (bN(gH) - value(cP.payments[0]).amount)
1019+ $Tuple2(gy, gt)
9281020 }
929- let fM = fV._1
930- let fH = fV._2
931- let aU = aM()
932- let cr = aU[u]
933- let cs = aU[v]
934- let dU = if ((fG == false))
935- then [(toBigInt(bz(cr)) - toBigInt(value(dN.payments[0]).amount)), toBigInt(bz(cs))]
936- else [toBigInt(bz(cr)), (toBigInt(bz(cs)) - toBigInt(value(dN.payments[0]).amount))]
937- let ez = dT(dU)
938- let eE = fF(fG, ez, toBigInt(0))
939- let fN = ((toBigInt(bz(fM)) - eE) - toBigInt(1))
940- let fO = max([0, toInt(fN)])
941- let fW = if ((fO >= fR))
1021+ let gy = gI._1
1022+ let gt = gI._2
1023+ let bg = aY()
1024+ let dj = bg[w]
1025+ let dk = bg[x]
1026+ let cz = if ((gs == false))
1027+ then [(toBigInt(bN(dj)) - toBigInt(value(cP.payments[0]).amount)), toBigInt(bN(dk))]
1028+ else [toBigInt(bN(dj)), (toBigInt(bN(dk)) - toBigInt(value(cP.payments[0]).amount))]
1029+ let et = cy(cz)
1030+ let eB = gr(gs, et, toBigInt(0))
1031+ let gz = ((toBigInt(bN(gy)) - eB) - toBigInt(1))
1032+ let gA = max([0, toInt(gz)])
1033+ let gJ = if ((gA >= gD))
9421034 then true
9431035 else throw("Exchange result is fewer coins than expected")
944- if ((fW == fW))
1036+ if ((gJ == gJ))
9451037 then {
946- let fP = if ((fG == false))
947- then [toBigInt(bz(cr)), (toBigInt(bz(cs)) - fN)]
948- else [(toBigInt(bz(cr)) - fN), toBigInt(bz(cs))]
949- let fQ = dT(fP)
950- let eY = if ((fQ >= ez))
1038+ let gB = if ((gs == false))
1039+ then [toBigInt(bN(dj)), (toBigInt(bN(dk)) - gz)]
1040+ else [(toBigInt(bN(dj)) - gz), toBigInt(bN(dk))]
1041+ let gC = cy(gB)
1042+ let dY = if ((gC >= et))
9511043 then true
9521044 else throw("new D is fewer error")
953- if ((eY == eY))
954- then [ScriptTransfer(addressFromStringValue(fS), fO, if ((fU == "WAVES"))
1045+ if ((dY == dY))
1046+ then [ScriptTransfer(addressFromStringValue(gE), gA, if ((gH == "WAVES"))
9551047 then unit
956- else fromBase58String(fM))]
1048+ else fromBase58String(gy))]
9571049 else throw("Strict value is not equal to itself.")
9581050 }
9591051 else throw("Strict value is not equal to itself.")
9601052 }
9611053 else throw("Strict value is not equal to itself.")
9621054 }
9631055
9641056
9651057
966-@Callable(dN)
967-func constructor (R) = {
968- let eB = fE(dN)
969- if ((eB == eB))
970- then [StringEntry(R(), R)]
1058+@Callable(cP)
1059+func constructor (Y) = {
1060+ let ex = gq(cP)
1061+ if ((ex == ex))
1062+ then [StringEntry(Y(), Y)]
9711063 else throw("Strict value is not equal to itself.")
9721064 }
9731065
9741066
9751067
976-@Callable(dN)
977-func setManager (fX) = {
978- let eB = fE(dN)
979- if ((eB == eB))
1068+@Callable(cP)
1069+func setManager (gK) = {
1070+ let ex = gq(cP)
1071+ if ((ex == ex))
9801072 then {
981- let fY = fromBase58String(fX)
982- if ((fY == fY))
983- then [StringEntry(T(), fX)]
1073+ let gL = fromBase58String(gK)
1074+ if ((gL == gL))
1075+ then [StringEntry(aa(), gK)]
9841076 else throw("Strict value is not equal to itself.")
9851077 }
9861078 else throw("Strict value is not equal to itself.")
9871079 }
9881080
9891081
9901082
991-@Callable(dN)
1083+@Callable(cP)
9921084 func confirmManager () = {
993- let cg = fA()
994- let fZ = if (isDefined(cg))
1085+ let cu = gm()
1086+ let gM = if (isDefined(cu))
9951087 then true
9961088 else throw("No pending manager")
997- if ((fZ == fZ))
1089+ if ((gM == gM))
9981090 then {
999- let ga = if ((dN.callerPublicKey == value(cg)))
1091+ let gN = if ((cP.callerPublicKey == value(cu)))
10001092 then true
10011093 else throw("You are not pending manager")
1002- if ((ga == ga))
1003- then [StringEntry(S(), toBase58String(value(cg))), DeleteEntry(T())]
1094+ if ((gN == gN))
1095+ then [StringEntry(Z(), toBase58String(value(cu))), DeleteEntry(aa())]
10041096 else throw("Strict value is not equal to itself.")
10051097 }
10061098 else throw("Strict value is not equal to itself.")
10071099 }
10081100
10091101
10101102
1011-@Callable(dN)
1012-func put (gb,gc) = {
1013- let gd = be()
1014- let ge = valueOrErrorMessage(addressFromString(gd[A]), "Wr st addr")
1015- let gf = valueOrErrorMessage(addressFromString(gd[C]), "Wr sl addr")
1016- if ((0 > gb))
1103+@Callable(cP)
1104+func put (gO,gP) = {
1105+ let gQ = bs()
1106+ let gR = valueOrErrorMessage(addressFromString(gQ[C]), "Wr st addr")
1107+ let gS = valueOrErrorMessage(addressFromString(gQ[E]), "Wr sl addr")
1108+ if ((0 > gO))
10171109 then throw("Wrong slippage")
1018- else if ((size(dN.payments) != 2))
1110+ else if ((size(cP.payments) != 2))
10191111 then throw("2 pmnts expd")
10201112 else {
1021- let gg = dP(toString(dN.caller), toBase58String(dN.transactionId), AttachedPayment(value(dN.payments[0]).assetId, value(dN.payments[0]).amount), dN.payments[1], gb, true, false, true, 0, "")
1022- let ds = gg._2
1023- let gh = gg._7
1024- let cJ = gg._9
1025- let dt = gg._10
1026- let du = gg._11
1027- let cr = gg._12
1028- let cs = gg._13
1029- let df = invoke(aE, "emit", [ds], nil)
1030- if ((df == df))
1113+ let gT = toBigInt(value(cP.payments[0]).amount)
1114+ let gU = toBigInt(value(cP.payments[1]).amount)
1115+ let eO = (toBigInt(bN(be(bm))) - gT)
1116+ if ((eO == eO))
10311117 then {
1032- let gi = {
1033- let aw = df
1034- if ($isInstanceOf(aw, "Address"))
1035- then {
1036- let gj = aw
1037- invoke(gj, "emit", [ds], nil)
1038- }
1039- else unit
1040- }
1041- if ((gi == gi))
1118+ let eP = (toBigInt(bN(be(bn))) - gU)
1119+ if ((eP == eP))
10421120 then {
1043- let gk = if ((dt > 0))
1044- then invoke(gf, "put", nil, [AttachedPayment(cr, dt)])
1045- else nil
1046- if ((gk == gk))
1121+ let eQ = toBigInt(value(assetInfo(bl)).quantity)
1122+ if ((eQ == eQ))
10471123 then {
1048- let gl = if ((du > 0))
1049- then invoke(gf, "put", nil, [AttachedPayment(cs, du)])
1050- else nil
1051- if ((gl == gl))
1124+ let eR = eK(gT, gU, toBigInt(0))
1125+ if ((eR == eR))
10521126 then {
1053- let gm = if (gc)
1127+ let gV = fl(toString(cP.caller), toBase58String(cP.transactionId), AttachedPayment(value(cP.payments[0]).assetId, value(cP.payments[0]).amount), cP.payments[1], gO, true, false, true, 0, "")
1128+ let el = gV._2
1129+ let gW = gV._7
1130+ let dB = gV._9
1131+ let em = gV._10
1132+ let en = gV._11
1133+ let dj = gV._12
1134+ let dk = gV._13
1135+ let dX = invoke(aQ, "emit", [el], nil)
1136+ if ((dX == dX))
10541137 then {
1055- let gn = invoke(ge, "stake", nil, [AttachedPayment(gh, ds)])
1056- if ((gn == gn))
1057- then nil
1138+ let gX = {
1139+ let gl = dX
1140+ if ($isInstanceOf(gl, "Address"))
1141+ then {
1142+ let gY = gl
1143+ invoke(gY, "emit", [el], nil)
1144+ }
1145+ else unit
1146+ }
1147+ if ((gX == gX))
1148+ then {
1149+ let gZ = if ((em > 0))
1150+ then invoke(gS, "put", nil, [AttachedPayment(dj, em)])
1151+ else nil
1152+ if ((gZ == gZ))
1153+ then {
1154+ let ha = if ((en > 0))
1155+ then invoke(gS, "put", nil, [AttachedPayment(dk, en)])
1156+ else nil
1157+ if ((ha == ha))
1158+ then {
1159+ let hb = if (gP)
1160+ then {
1161+ let hc = invoke(gR, "stake", nil, [AttachedPayment(gW, el)])
1162+ if ((hc == hc))
1163+ then nil
1164+ else throw("Strict value is not equal to itself.")
1165+ }
1166+ else [ScriptTransfer(cP.caller, el, gW)]
1167+ let hd = eS(0, 0, 0)
1168+ let gi = hd._1
1169+ let eJ = hd._2
1170+ let he = if ((eJ >= eR))
1171+ then true
1172+ else aN(makeString(["updated DLp lower than current DLp", toString(eO), toString(eP), toString(eQ), toString(eR), toString(eJ), toString(em), toString(en)], " "))
1173+ if ((he == he))
1174+ then {
1175+ let hf = value(assetInfo(bl)).quantity
1176+ if ((hf == hf))
1177+ then ((dB ++ hb) ++ gi)
1178+ else throw("Strict value is not equal to itself.")
1179+ }
1180+ else throw("Strict value is not equal to itself.")
1181+ }
1182+ else throw("Strict value is not equal to itself.")
1183+ }
1184+ else throw("Strict value is not equal to itself.")
1185+ }
10581186 else throw("Strict value is not equal to itself.")
10591187 }
1060- else [ScriptTransfer(dN.caller, ds, gh)]
1061- (cJ ++ gm)
1188+ else throw("Strict value is not equal to itself.")
10621189 }
10631190 else throw("Strict value is not equal to itself.")
10641191 }
10651192 else throw("Strict value is not equal to itself.")
10661193 }
10671194 else throw("Strict value is not equal to itself.")
10681195 }
10691196 else throw("Strict value is not equal to itself.")
10701197 }
10711198 }
10721199
10731200
10741201
1075-@Callable(dN)
1076-func putOneTknV2 (fh,gc) = {
1077- let go = {
1078- let aG = invoke(aE, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
1079- if ($isInstanceOf(aG, "Boolean"))
1080- then aG
1081- else throw(($getType(aG) + " couldn't be cast to Boolean"))
1202+@Callable(cP)
1203+func putOneTknV2 (fM,gP) = {
1204+ let hg = {
1205+ let aS = invoke(aQ, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
1206+ if ($isInstanceOf(aS, "Boolean"))
1207+ then aS
1208+ else throw(($getType(aS) + " couldn't be cast to Boolean"))
10821209 }
1083- let gp = if (if (if (aJ())
1210+ let hh = if (if (if (aV())
10841211 then true
1085- else (aY == o))
1212+ else (bk == q))
10861213 then true
1087- else (aY == q))
1214+ else (bk == s))
10881215 then true
1089- else go
1090- let fT = [if (if (!(gp))
1216+ else hg
1217+ let gG = [if (if (!(hh))
10911218 then true
1092- else fC(dN))
1219+ else go(cP))
10931220 then true
1094- else aC("put operation is blocked by admin"), if ((size(dN.payments) == 1))
1221+ else aN("put operation is blocked by admin"), if ((size(cP.payments) == 1))
10951222 then true
1096- else aC("exactly 1 payment are expected")]
1097- if ((fT == fT))
1223+ else aN("exactly 1 payment are expected")]
1224+ if ((gG == gG))
10981225 then {
1099- let aU = aM()
1100- let cr = aU[u]
1101- let cs = aU[v]
1102- let cq = fromBase58String(aU[t])
1103- let fl = parseIntValue(aU[w])
1104- let fm = parseIntValue(aU[x])
1105- let cp = if ((dN.caller == this))
1106- then dN.originCaller
1107- else dN.caller
1108- let dO = value(dN.payments[0])
1109- let cn = toBase58String(value(dO.assetId))
1110- let cT = dO.amount
1111- let gq = eI(cT, cn, toString(cp), toBase58String(dN.transactionId), true)
1112- if ((gq == gq))
1226+ let dj = toBase58String(value(bm))
1227+ let dk = toBase58String(value(bn))
1228+ let di = bl
1229+ let fQ = bo
1230+ let fR = bp
1231+ let dh = if ((cP.caller == this))
1232+ then cP.originCaller
1233+ else cP.caller
1234+ let fk = value(cP.payments[0])
1235+ let df = toBase58String(value(fk.assetId))
1236+ let dL = fk.amount
1237+ let eR = if ((fk.assetId == bm))
1238+ then eK(toBigInt(dL), toBigInt(0), toBigInt(0))
1239+ else eK(toBigInt(0), toBigInt(dL), toBigInt(0))
1240+ if ((eR == eR))
11131241 then {
1114- let ck = gq._3
1115- let cJ = gq._2
1116- let gr = gq._1
1117- let ds = if (if ((fh > 0))
1118- then (fh > gr)
1119- else false)
1120- then aC(makeString(["amount to receive is less than ", toString(fh)], ""))
1121- else gr
1122- let gg = invoke(aE, "emit", [ds], nil)
1123- if ((gg == gg))
1242+ let hi = fp(dL, df, toString(dh), toBase58String(cP.transactionId), true)
1243+ if ((hi == hi))
11241244 then {
1125- let gi = {
1126- let aw = gg
1127- if ($isInstanceOf(aw, "Address"))
1128- then {
1129- let gj = aw
1130- invoke(gj, "emit", [ds], nil)
1245+ let cx = hi._3
1246+ let dB = hi._2
1247+ let hj = hi._1
1248+ let el = if (if ((fM > 0))
1249+ then (fM > hj)
1250+ else false)
1251+ then aN(makeString(["amount to receive is less than ", toString(fM)], ""))
1252+ else hj
1253+ let gV = invoke(aQ, "emit", [el], nil)
1254+ if ((gV == gV))
1255+ then {
1256+ let gX = {
1257+ let gl = gV
1258+ if ($isInstanceOf(gl, "Address"))
1259+ then {
1260+ let gY = gl
1261+ invoke(gY, "emit", [el], nil)
1262+ }
1263+ else unit
11311264 }
1132- else unit
1133- }
1134- if ((gi == gi))
1135- then {
1136- let gm = if (gc)
1265+ if ((gX == gX))
11371266 then {
1138- let gn = invoke(bg, "stake", nil, [AttachedPayment(cq, ds)])
1139- if ((gn == gn))
1140- then nil
1267+ let hb = if (gP)
1268+ then {
1269+ let hc = invoke(bu, "stake", nil, [AttachedPayment(di, el)])
1270+ if ((hc == hc))
1271+ then nil
1272+ else throw("Strict value is not equal to itself.")
1273+ }
1274+ else [ScriptTransfer(cP.caller, el, di)]
1275+ let gc = if ((cx > 0))
1276+ then [ScriptTransfer(aX, cx, fromBase58String(df))]
1277+ else nil
1278+ let hk = if ((this == aX))
1279+ then $Tuple2(0, 0)
1280+ else {
1281+ let hl = if ((fk.assetId == bm))
1282+ then true
1283+ else false
1284+ if (hl)
1285+ then $Tuple2(-(cx), 0)
1286+ else $Tuple2(0, -(cx))
1287+ }
1288+ let eT = hk._1
1289+ let eU = hk._2
1290+ let hm = eS(eT, eU, 0)
1291+ let gi = hm._1
1292+ let eJ = hm._2
1293+ let gj = eW(eR, eJ)
1294+ if ((gj == gj))
1295+ then $Tuple2((((dB ++ hb) ++ gc) ++ gi), el)
11411296 else throw("Strict value is not equal to itself.")
11421297 }
1143- else [ScriptTransfer(dN.caller, ds, cq)]
1144- let fx = if ((ck > 0))
1145- then [ScriptTransfer(aL, ck, fromBase58String(cn))]
1146- else nil
1147- $Tuple2(((cJ ++ gm) ++ fx), ds)
1298+ else throw("Strict value is not equal to itself.")
11481299 }
11491300 else throw("Strict value is not equal to itself.")
11501301 }
11511302 else throw("Strict value is not equal to itself.")
11521303 }
11531304 else throw("Strict value is not equal to itself.")
11541305 }
11551306 else throw("Strict value is not equal to itself.")
11561307 }
11571308
11581309
11591310
1160-@Callable(dN)
1161-func putForFree (gs) = if ((0 > gs))
1311+@Callable(cP)
1312+func putForFree (hn) = if ((0 > hn))
11621313 then throw("Wrong slpg")
1163- else if ((size(dN.payments) != 2))
1314+ else if ((size(cP.payments) != 2))
11641315 then throw("2 pmnts expd")
11651316 else {
1166- let gt = dP(toString(dN.caller), toBase58String(dN.transactionId), AttachedPayment(value(dN.payments[0]).assetId, value(dN.payments[0]).amount), dN.payments[1], gs, false, false, true, 0, "")
1167- gt._9
1317+ let ho = fl(toString(cP.caller), toBase58String(cP.transactionId), AttachedPayment(value(cP.payments[0]).assetId, value(cP.payments[0]).amount), cP.payments[1], hn, false, false, true, 0, "")
1318+ let dB = ho._9
1319+ let gT = toBigInt(value(cP.payments[0]).amount)
1320+ let gU = toBigInt(value(cP.payments[1]).amount)
1321+ let eR = eK(gT, gU, toBigInt(0))
1322+ if ((eR == eR))
1323+ then {
1324+ let hp = eS(0, 0, 0)
1325+ let gi = hp._1
1326+ let eJ = hp._2
1327+ let gj = eW(eR, eJ)
1328+ if ((gj == gj))
1329+ then (dB ++ gi)
1330+ else throw("Strict value is not equal to itself.")
1331+ }
1332+ else throw("Strict value is not equal to itself.")
11681333 }
11691334
11701335
11711336
1172-@Callable(dN)
1337+@Callable(cP)
11731338 func get () = {
1174- let df = dM(dN)
1175- let gu = df._1
1176- let cI = df._2
1177- let cT = df._3
1178- let cn = df._4
1179- let cJ = df._5
1180- let eC = invoke(aE, "burn", [cT], [AttachedPayment(cn, cT)])
1181- if ((eC == eC))
1182- then cJ
1183- else throw("Strict value is not equal to itself.")
1184- }
1185-
1186-
1187-
1188-@Callable(dN)
1189-func getOneTknV2 (fg,fh) = {
1190- let go = {
1191- let aG = invoke(aE, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
1192- if ($isInstanceOf(aG, "Boolean"))
1193- then aG
1194- else throw(($getType(aG) + " couldn't be cast to Boolean"))
1195- }
1196- let gv = if (if (aJ())
1197- then true
1198- else (aY == q))
1199- then true
1200- else go
1201- let fT = [if (if (!(gv))
1202- then true
1203- else fC(dN))
1204- then true
1205- else aC("get operation is blocked by admin"), if ((size(dN.payments) == 1))
1206- then true
1207- else aC("exactly 1 payment are expected")]
1208- if ((fT == fT))
1339+ let eR = eK(toBigInt(0), toBigInt(0), toBigInt(0))
1340+ if ((eR == eR))
12091341 then {
1210- let gw = ff(fg, fh, dN.payments, dN.caller, dN.originCaller, dN.transactionId)
1211- let cJ = gw._1
1212- let fq = gw._2
1213- $Tuple2(cJ, fq)
1342+ let dX = fj(cP)
1343+ let hq = dX._1
1344+ let dA = dX._2
1345+ let dL = dX._3
1346+ let df = dX._4
1347+ let dB = dX._5
1348+ let ey = invoke(aQ, "burn", [dL], [AttachedPayment(df, dL)])
1349+ if ((ey == ey))
1350+ then {
1351+ let hr = eS(-(hq), -(dA), 0)
1352+ let gi = hr._1
1353+ let eJ = hr._2
1354+ let gj = eW(eR, eJ)
1355+ if ((gj == gj))
1356+ then (dB ++ gi)
1357+ else throw("Strict value is not equal to itself.")
1358+ }
1359+ else throw("Strict value is not equal to itself.")
12141360 }
12151361 else throw("Strict value is not equal to itself.")
12161362 }
12171363
12181364
12191365
1220-@Callable(dN)
1221-func getOneTknV2READONLY (fg,gx) = {
1222- let aU = aM()
1223- let cr = aU[u]
1224- let cs = aU[v]
1225- let cq = aU[t]
1226- let dU = [toBigInt(bz(cr)), toBigInt(bz(cs))]
1227- let gy = toBigInt(valueOrErrorMessage(assetInfo(fromBase58String(cq)), "invalid lp asset").quantity)
1228- let bM = dT(dU)
1229- let bL = (bM - fraction(toBigInt(gx), bM, gy))
1230- let gz = if ((fg == cr))
1231- then 0
1232- else if ((fg == cs))
1233- then 1
1234- else throw("invalid out asset id")
1235- let gA = ey(dU, gz, bL)
1236- let fN = (dU[gz] - gA)
1237- let fO = max([0, toInt((fN - f))])
1238- let gB = ch(fO, aH)
1239- let fp = gB._1
1240- let ck = gB._2
1241- $Tuple2(nil, $Tuple2(fp, ck))
1366+@Callable(cP)
1367+func getOneTknV2 (fL,fM) = {
1368+ let hg = {
1369+ let aS = invoke(aQ, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
1370+ if ($isInstanceOf(aS, "Boolean"))
1371+ then aS
1372+ else throw(($getType(aS) + " couldn't be cast to Boolean"))
1373+ }
1374+ let hs = if (if (aV())
1375+ then true
1376+ else (bk == s))
1377+ then true
1378+ else hg
1379+ let gG = [if (if (!(hs))
1380+ then true
1381+ else go(cP))
1382+ then true
1383+ else aN("get operation is blocked by admin"), if ((size(cP.payments) == 1))
1384+ then true
1385+ else aN("exactly 1 payment are expected")]
1386+ if ((gG == gG))
1387+ then {
1388+ let ht = fK(fL, fM, cP.payments, cP.caller, cP.originCaller, cP.transactionId)
1389+ let dB = ht._1
1390+ let fV = ht._2
1391+ $Tuple2(dB, fV)
1392+ }
1393+ else throw("Strict value is not equal to itself.")
12421394 }
12431395
12441396
12451397
1246-@Callable(dN)
1247-func getOneTknV2WithBonusREADONLY (fg,gx) = {
1248- let aU = aM()
1249- let cr = aU[u]
1250- let cs = aU[v]
1251- let cq = aU[t]
1252- let cx = bz(cr)
1253- let cz = bz(cs)
1254- let gC = {
1255- let aG = invoke(this, "getOneTknV2READONLY", [fg, gx], nil)
1256- if ($isInstanceOf(aG, "(Int, Int)"))
1257- then aG
1258- else throw(($getType(aG) + " couldn't be cast to (Int, Int)"))
1259- }
1260- let fp = gC._1
1261- let ck = gC._2
1262- let df = cl("", cq, gx, this)
1263- let cH = df._1
1264- let cI = df._2
1265- let gD = (cH + cI)
1266- let fe = if ((gD == 0))
1267- then if ((fp == 0))
1268- then 0
1269- else throw("bonus calculation error")
1270- else fraction((fp - gD), a, gD)
1271- $Tuple2(nil, $Tuple3(fp, ck, fe))
1398+@Callable(cP)
1399+func refreshDLp () = {
1400+ let hu = valueOrElse(getInteger(aq), 0)
1401+ let hv = if (((height - hu) >= at))
1402+ then unit
1403+ else aN(makeString([toString(at), " blocks have not passed since the previous call"], ""))
1404+ if ((hv == hv))
1405+ then {
1406+ let fd = valueOrErrorMessage(parseBigInt(valueOrElse(getString(this, ap), "0")), aP("invalid dLp"))
1407+ let hw = eS(0, 0, 0)
1408+ let hx = hw._1
1409+ let eJ = hw._2
1410+ let eV = if ((fd != eJ))
1411+ then hx
1412+ else aN("nothing to refresh")
1413+ $Tuple2(eV, toString(eJ))
1414+ }
1415+ else throw("Strict value is not equal to itself.")
12721416 }
12731417
12741418
12751419
1276-@Callable(dN)
1277-func getNoLess (gE,gF) = {
1278- let df = dM(dN)
1279- let cH = df._1
1280- let cI = df._2
1281- let cT = df._3
1282- let cn = df._4
1283- let cJ = df._5
1284- if ((gE > cH))
1285- then throw(((("Failed: " + toString(cH)) + " < ") + toString(gE)))
1286- else if ((gF > cI))
1287- then throw(((("Failed: " + toString(cI)) + " < ") + toString(gF)))
1420+@Callable(cP)
1421+func getOneTknV2READONLY (fL,hy) = {
1422+ let dj = toBase58String(value(bm))
1423+ let dk = toBase58String(value(bn))
1424+ let di = toBase58String(value(bl))
1425+ let cz = [toBigInt(bN(dj)), toBigInt(bN(dk))]
1426+ let eI = toBigInt(valueOrErrorMessage(assetInfo(fromBase58String(di)), "invalid lp asset").quantity)
1427+ let cb = cy(cz)
1428+ let ca = (cb - fraction(toBigInt(hy), cb, eI))
1429+ let hz = if ((fL == dj))
1430+ then 0
1431+ else if ((fL == dk))
1432+ then 1
1433+ else throw("invalid out asset id")
1434+ let hA = es(cz, hz, ca)
1435+ let gz = (cz[hz] - hA)
1436+ let gA = max([0, toInt((gz - f))])
1437+ let hB = cv(gA, aT)
1438+ let fU = hB._1
1439+ let cx = hB._2
1440+ $Tuple2(nil, $Tuple2(fU, cx))
1441+ }
1442+
1443+
1444+
1445+@Callable(cP)
1446+func getOneTknV2WithBonusREADONLY (fL,hy) = {
1447+ let dj = toBase58String(value(bm))
1448+ let dk = toBase58String(value(bn))
1449+ let di = toBase58String(value(bl))
1450+ let dp = bN(dj)
1451+ let dr = bN(dk)
1452+ let hC = {
1453+ let aS = invoke(this, "getOneTknV2READONLY", [fL, hy], nil)
1454+ if ($isInstanceOf(aS, "(Int, Int)"))
1455+ then aS
1456+ else throw(($getType(aS) + " couldn't be cast to (Int, Int)"))
1457+ }
1458+ let fU = hC._1
1459+ let cx = hC._2
1460+ let dX = dd("", di, hy, this)
1461+ let dz = dX._1
1462+ let dA = dX._2
1463+ let hD = (dz + dA)
1464+ let fJ = if ((hD == 0))
1465+ then if ((fU == 0))
1466+ then 0
1467+ else throw("bonus calculation error")
1468+ else fraction((fU - hD), a, hD)
1469+ $Tuple2(nil, $Tuple3(fU, cx, fJ))
1470+ }
1471+
1472+
1473+
1474+@Callable(cP)
1475+func getNoLess (hE,hF) = {
1476+ let dX = fj(cP)
1477+ let dz = dX._1
1478+ let dA = dX._2
1479+ let dL = dX._3
1480+ let df = dX._4
1481+ let dB = dX._5
1482+ if ((hE > dz))
1483+ then throw(((("Failed: " + toString(dz)) + " < ") + toString(hE)))
1484+ else if ((hF > dA))
1485+ then throw(((("Failed: " + toString(dA)) + " < ") + toString(hF)))
12881486 else {
1289- let gG = invoke(aE, "burn", [cT], [AttachedPayment(cn, cT)])
1290- if ((gG == gG))
1291- then cJ
1487+ let eR = eK(toBigInt(0), toBigInt(0), toBigInt(0))
1488+ if ((eR == eR))
1489+ then {
1490+ let hG = invoke(aQ, "burn", [dL], [AttachedPayment(df, dL)])
1491+ if ((hG == hG))
1492+ then {
1493+ let hH = eS(-(dz), -(dA), 0)
1494+ let gi = hH._1
1495+ let eJ = hH._2
1496+ let gj = eW(eR, eJ)
1497+ if ((gj == gj))
1498+ then (dB ++ gi)
1499+ else throw("Strict value is not equal to itself.")
1500+ }
1501+ else throw("Strict value is not equal to itself.")
1502+ }
12921503 else throw("Strict value is not equal to itself.")
12931504 }
12941505 }
12951506
12961507
12971508
1298-@Callable(dN)
1299-func unstakeAndGet (ci) = {
1300- let gH = if ((size(dN.payments) != 0))
1509+@Callable(cP)
1510+func unstakeAndGet (cw) = {
1511+ let hI = if ((size(cP.payments) != 0))
13011512 then throw("No pmnts expd")
13021513 else true
1303- if ((gH == gH))
1514+ if ((hI == hI))
13041515 then {
1305- let bY = aM()
1306- let gI = be()
1307- let gh = fromBase58String(bY[t])
1308- let gJ = valueOrErrorMessage(addressFromString(gI[A]), "Wr st addr")
1309- let gK = invoke(gJ, "unstake", [toBase58String(gh), ci], nil)
1310- if ((gK == gK))
1516+ let hJ = bs()
1517+ let gW = bl
1518+ let hK = valueOrErrorMessage(addressFromString(hJ[C]), "Wr st addr")
1519+ let eR = eK(toBigInt(0), toBigInt(0), toBigInt(0))
1520+ if ((eR == eR))
13111521 then {
1312- let df = cl(toBase58String(dN.transactionId), toBase58String(gh), ci, dN.caller)
1313- let cv = parseIntValue(df._9)
1314- let cJ = df._10
1315- let gL = if (if (aJ())
1316- then true
1317- else (cv == q))
1318- then throw(("Blocked: " + toString(cv)))
1319- else true
1320- if ((gL == gL))
1522+ let hL = invoke(hK, "unstake", [toBase58String(gW), cw], nil)
1523+ if ((hL == hL))
13211524 then {
1322- let gM = invoke(aE, "burn", [ci], [AttachedPayment(gh, ci)])
1323- if ((gM == gM))
1324- then cJ
1525+ let dX = dd(toBase58String(cP.transactionId), toBase58String(gW), cw, cP.caller)
1526+ let dz = dX._1
1527+ let dA = dX._2
1528+ let dn = parseIntValue(dX._9)
1529+ let dB = dX._10
1530+ let hM = if (if (aV())
1531+ then true
1532+ else (dn == s))
1533+ then throw(("Blocked: " + toString(dn)))
1534+ else true
1535+ if ((hM == hM))
1536+ then {
1537+ let hN = invoke(aQ, "burn", [cw], [AttachedPayment(gW, cw)])
1538+ if ((hN == hN))
1539+ then {
1540+ let hO = eS(-(dz), -(dA), 0)
1541+ let gi = hO._1
1542+ let eJ = hO._2
1543+ let gj = eW(eR, eJ)
1544+ if ((gj == gj))
1545+ then (dB ++ gi)
1546+ else throw("Strict value is not equal to itself.")
1547+ }
1548+ else throw("Strict value is not equal to itself.")
1549+ }
13251550 else throw("Strict value is not equal to itself.")
13261551 }
13271552 else throw("Strict value is not equal to itself.")
13281553 }
13291554 else throw("Strict value is not equal to itself.")
13301555 }
13311556 else throw("Strict value is not equal to itself.")
13321557 }
13331558
13341559
13351560
1336-@Callable(dN)
1337-func unstakeAndGetNoLess (gN,gO,gF) = {
1338- let gv = if (aJ())
1561+@Callable(cP)
1562+func unstakeAndGetNoLess (hP,hQ,hF) = {
1563+ let hs = if (aV())
13391564 then true
1340- else (aY == q)
1341- let fT = [if (!(gv))
1565+ else (bk == s)
1566+ let gG = [if (!(hs))
13421567 then true
1343- else throw("get operation is blocked by admin"), if ((size(dN.payments) == 0))
1568+ else throw("get operation is blocked by admin"), if ((size(cP.payments) == 0))
13441569 then true
13451570 else throw("no payments are expected")]
1346- if ((fT == fT))
1571+ if ((gG == gG))
13471572 then {
1348- let gK = invoke(bg, "unstake", [toBase58String(aZ), gN], nil)
1349- if ((gK == gK))
1573+ let eR = eK(toBigInt(0), toBigInt(0), toBigInt(0))
1574+ if ((eR == eR))
13501575 then {
1351- let gP = cl(toBase58String(dN.transactionId), toBase58String(aZ), gN, dN.caller)
1352- let cH = gP._1
1353- let cI = gP._2
1354- let cJ = gP._10
1355- let gQ = [if ((cH >= gO))
1356- then true
1357- else throw(makeString(["amount asset amount to receive is less than ", toString(gO)], "")), if ((cI >= gF))
1358- then true
1359- else throw(makeString(["price asset amount to receive is less than ", toString(gF)], ""))]
1360- if ((gQ == gQ))
1576+ let hL = invoke(bu, "unstake", [toBase58String(bl), hP], nil)
1577+ if ((hL == hL))
13611578 then {
1362- let gG = invoke(aE, "burn", [gN], [AttachedPayment(aZ, gN)])
1363- if ((gG == gG))
1364- then cJ
1579+ let hR = dd(toBase58String(cP.transactionId), toBase58String(bl), hP, cP.caller)
1580+ let dz = hR._1
1581+ let dA = hR._2
1582+ let dB = hR._10
1583+ let hS = [if ((dz >= hQ))
1584+ then true
1585+ else throw(makeString(["amount asset amount to receive is less than ", toString(hQ)], "")), if ((dA >= hF))
1586+ then true
1587+ else throw(makeString(["price asset amount to receive is less than ", toString(hF)], ""))]
1588+ if ((hS == hS))
1589+ then {
1590+ let hG = invoke(aQ, "burn", [hP], [AttachedPayment(bl, hP)])
1591+ if ((hG == hG))
1592+ then {
1593+ let hT = eS(-(dz), -(dA), 0)
1594+ let gi = hT._1
1595+ let eJ = hT._2
1596+ let gj = eW(eR, eJ)
1597+ if ((gj == gj))
1598+ then (dB ++ gi)
1599+ else throw("Strict value is not equal to itself.")
1600+ }
1601+ else throw("Strict value is not equal to itself.")
1602+ }
13651603 else throw("Strict value is not equal to itself.")
13661604 }
13671605 else throw("Strict value is not equal to itself.")
13681606 }
13691607 else throw("Strict value is not equal to itself.")
13701608 }
13711609 else throw("Strict value is not equal to itself.")
13721610 }
13731611
13741612
13751613
1376-@Callable(dN)
1377-func unstakeAndGetOneTknV2 (gN,fg,fh) = {
1378- let go = {
1379- let aG = invoke(aE, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
1380- if ($isInstanceOf(aG, "Boolean"))
1381- then aG
1382- else throw(($getType(aG) + " couldn't be cast to Boolean"))
1614+@Callable(cP)
1615+func unstakeAndGetOneTknV2 (hP,fL,fM) = {
1616+ let hg = {
1617+ let aS = invoke(aQ, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
1618+ if ($isInstanceOf(aS, "Boolean"))
1619+ then aS
1620+ else throw(($getType(aS) + " couldn't be cast to Boolean"))
13831621 }
1384- let gv = if (if (aJ())
1622+ let hs = if (if (aV())
13851623 then true
1386- else (aY == q))
1624+ else (bk == s))
13871625 then true
1388- else go
1389- let fT = [if (if (!(gv))
1626+ else hg
1627+ let gG = [if (if (!(hs))
13901628 then true
1391- else fC(dN))
1629+ else go(cP))
13921630 then true
1393- else aC("get operation is blocked by admin"), if ((size(dN.payments) == 0))
1631+ else aN("get operation is blocked by admin"), if ((size(cP.payments) == 0))
13941632 then true
1395- else aC("no payments are expected")]
1396- if ((fT == fT))
1633+ else aN("no payments are expected")]
1634+ if ((gG == gG))
13971635 then {
1398- let bY = aM()
1399- let gI = be()
1400- let gh = fromBase58String(bY[t])
1401- let gJ = valueOrErrorMessage(addressFromString(gI[A]), "Wr st addr")
1402- let gK = invoke(gJ, "unstake", [toBase58String(gh), gN], nil)
1403- if ((gK == gK))
1636+ let hJ = bs()
1637+ let gW = bl
1638+ let hK = valueOrErrorMessage(addressFromString(hJ[C]), "Wr st addr")
1639+ let hL = invoke(hK, "unstake", [toBase58String(gW), hP], nil)
1640+ if ((hL == hL))
14041641 then {
1405- let gR = ff(fg, fh, [AttachedPayment(gh, gN)], dN.caller, dN.originCaller, dN.transactionId)
1406- let cJ = gR._1
1407- let fq = gR._2
1408- $Tuple2(cJ, fq)
1642+ let hU = fK(fL, fM, [AttachedPayment(gW, hP)], cP.caller, cP.originCaller, cP.transactionId)
1643+ let dB = hU._1
1644+ let fV = hU._2
1645+ $Tuple2(dB, fV)
14091646 }
14101647 else throw("Strict value is not equal to itself.")
14111648 }
14121649 else throw("Strict value is not equal to itself.")
14131650 }
14141651
14151652
14161653
1417-@Callable(dN)
1418-func putOneTknV2WithBonusREADONLY (gS,gT) = {
1419- let aU = aM()
1420- let cr = aU[u]
1421- let cs = aU[v]
1422- let cq = aU[t]
1423- let gU = eI(gS, gT, "", "", true)
1424- let eZ = gU._1
1425- let cJ = gU._2
1426- let ck = gU._3
1427- let fe = gU._4
1428- $Tuple2(nil, $Tuple3(eZ, ck, fe))
1654+@Callable(cP)
1655+func putOneTknV2WithBonusREADONLY (hV,hW) = {
1656+ let hX = fp(hV, hW, "", "", true)
1657+ let fE = hX._1
1658+ let dB = hX._2
1659+ let cx = hX._3
1660+ let fJ = hX._4
1661+ $Tuple2(nil, $Tuple3(fE, cx, fJ))
14291662 }
14301663
14311664
14321665
1433-@Callable(dN)
1434-func putOneTknV2WithoutTakeFeeREADONLY (gS,gT) = {
1435- let aU = aM()
1436- let cr = aU[u]
1437- let cs = aU[v]
1438- let cq = aU[t]
1439- let gV = eI(gS, gT, "", "", false)
1440- let eZ = gV._1
1441- let cJ = gV._2
1442- let ck = gV._3
1443- let fe = gV._4
1444- $Tuple2(nil, $Tuple3(eZ, ck, fe))
1666+@Callable(cP)
1667+func putOneTknV2WithoutTakeFeeREADONLY (hV,hW) = {
1668+ let hY = fp(hV, hW, "", "", false)
1669+ let fE = hY._1
1670+ let dB = hY._2
1671+ let cx = hY._3
1672+ let fJ = hY._4
1673+ $Tuple2(nil, $Tuple3(fE, cx, fJ))
14451674 }
14461675
14471676
14481677
1449-@Callable(dN)
1450-func activate (gW,gX) = if ((toString(dN.caller) != toString(aE)))
1678+@Callable(cP)
1679+func activate (hZ,ia) = if ((toString(cP.caller) != toString(aQ)))
14511680 then throw("denied")
1452- else $Tuple2([StringEntry(ac(), gW), StringEntry(ad(), gX)], "success")
1681+ else $Tuple2([StringEntry(aj(), hZ), StringEntry(ak(), ia)], "success")
14531682
14541683
14551684
1456-@Callable(dN)
1457-func setS (gY,gL) = if ((toString(dN.caller) != ay(this, af())))
1458- then fB
1459- else [StringEntry(gY, gL)]
1685+@Callable(cP)
1686+func setS (ib,hM) = if ((toString(cP.caller) != aJ(this, am())))
1687+ then gn
1688+ else [StringEntry(ib, hM)]
14601689
14611690
14621691
1463-@Callable(dN)
1464-func setI (gY,gL) = if ((toString(dN.caller) != ay(this, af())))
1465- then fB
1466- else [IntegerEntry(gY, gL)]
1692+@Callable(cP)
1693+func setI (ib,hM) = if ((toString(cP.caller) != aJ(this, am())))
1694+ then gn
1695+ else [IntegerEntry(ib, hM)]
14671696
14681697
14691698
1470-@Callable(dN)
1471-func getPoolConfigWrapperREADONLY () = $Tuple2(nil, aM())
1699+@Callable(cP)
1700+func getPoolConfigWrapperREADONLY () = $Tuple2(nil, aY())
14721701
14731702
14741703
1475-@Callable(dN)
1476-func getAccBalanceWrapperREADONLY (bA) = $Tuple2(nil, bz(bA))
1704+@Callable(cP)
1705+func getAccBalanceWrapperREADONLY (bO) = $Tuple2(nil, bN(bO))
14771706
14781707
14791708
1480-@Callable(dN)
1481-func calcPricesWrapperREADONLY (bS,bT,bX) = {
1482- let gZ = bW(bS, bT, bX)
1483- $Tuple2(nil, [toString(gZ[0]), toString(gZ[1]), toString(gZ[2])])
1709+@Callable(cP)
1710+func calcPricesWrapperREADONLY (ch,ci,cm) = {
1711+ let ic = cl(ch, ci, cm)
1712+ $Tuple2(nil, [toString(ic[0]), toString(ic[1]), toString(ic[2])])
14841713 }
14851714
14861715
14871716
1488-@Callable(dN)
1489-func fromX18WrapperREADONLY (J,ha) = $Tuple2(nil, I(parseBigIntValue(J), ha))
1717+@Callable(cP)
1718+func fromX18WrapperREADONLY (M,id) = $Tuple2(nil, L(parseBigIntValue(M), id))
14901719
14911720
14921721
1493-@Callable(dN)
1494-func toX18WrapperREADONLY (G,H) = $Tuple2(nil, toString(F(G, H)))
1722+@Callable(cP)
1723+func toX18WrapperREADONLY (I,J) = $Tuple2(nil, toString(H(I, J)))
14951724
14961725
14971726
1498-@Callable(dN)
1499-func calcPriceBigIntWrapperREADONLY (bC,bD) = $Tuple2(nil, toString(bB(parseBigIntValue(bC), parseBigIntValue(bD))))
1727+@Callable(cP)
1728+func calcPriceBigIntWrapperREADONLY (bQ,bR) = $Tuple2(nil, toString(bP(parseBigIntValue(bQ), parseBigIntValue(bR))))
15001729
15011730
15021731
1503-@Callable(dN)
1504-func estimatePutOperationWrapperREADONLY (cm,bH,cL,cM,cN,cO,hb,cP,cQ) = $Tuple2(nil, cK(cm, bH, cL, cM, cN, cO, hb, cP, cQ, true, false, 0, ""))
1732+@Callable(cP)
1733+func estimatePutOperationWrapperREADONLY (de,bW,dD,dE,dF,dG,ie,dH,dI) = $Tuple2(nil, dC(de, bW, dD, dE, dF, dG, ie, dH, dI, true, false, 0, ""))
15051734
15061735
15071736
1508-@Callable(dN)
1509-func estimateGetOperationWrapperREADONLY (cm,hc,co,hb) = {
1510- let df = cl(cm, hc, co, addressFromStringValue(hb))
1511- $Tuple2(nil, $Tuple10(df._1, df._2, df._3, df._4, df._5, df._6, df._7, toString(df._8), df._9, df._10))
1737+@Callable(cP)
1738+func estimateGetOperationWrapperREADONLY (de,if,dg,ie) = {
1739+ let dX = dd(de, if, dg, addressFromStringValue(ie))
1740+ $Tuple2(nil, $Tuple10(dX._1, dX._2, dX._3, dX._4, dX._5, dX._6, dX._7, toString(dX._8), dX._9, dX._10))
15121741 }
15131742
15141743
1515-@Verifier(hd)
1516-func he () = {
1517- let hf = {
1518- let aw = fz()
1519- if ($isInstanceOf(aw, "ByteVector"))
1744+@Verifier(ig)
1745+func ih () = {
1746+ let ii = {
1747+ let gl = gk()
1748+ if ($isInstanceOf(gl, "ByteVector"))
15201749 then {
1521- let fD = aw
1522- fD
1750+ let gp = gl
1751+ gp
15231752 }
1524- else if ($isInstanceOf(aw, "Unit"))
1525- then hd.senderPublicKey
1753+ else if ($isInstanceOf(gl, "Unit"))
1754+ then ig.senderPublicKey
15261755 else throw("Match error")
15271756 }
1528- let aw = hd
1529- if ($isInstanceOf(aw, "Order"))
1757+ let gl = ig
1758+ if ($isInstanceOf(gl, "Order"))
15301759 then {
1531- let dA = aw
1532- let hg = aK()
1533- let hh = dz(dA)
1534- let hi = sigVerify(dA.bodyBytes, dA.proofs[0], dA.senderPublicKey)
1535- let hj = sigVerify(dA.bodyBytes, dA.proofs[1], hg)
1536- if (if (if (hh)
1537- then hi
1760+ let eZ = gl
1761+ let ij = aW()
1762+ let ik = eY(eZ)
1763+ let aF = ik._1
1764+ let aG = ik._2
1765+ let aH = sigVerify(eZ.bodyBytes, eZ.proofs[0], eZ.senderPublicKey)
1766+ let aI = sigVerify(eZ.bodyBytes, eZ.proofs[1], ij)
1767+ if (if (if (aF)
1768+ then aH
15381769 else false)
1539- then hj
1770+ then aI
15401771 else false)
15411772 then true
1542- else ar(hh, hi, hj)
1773+ else aE(aF, aG, aH, aI)
15431774 }
1544- else if ($isInstanceOf(aw, "SetScriptTransaction"))
1775+ else if ($isInstanceOf(gl, "SetScriptTransaction"))
15451776 then {
1546- let ea = aw
1547- let hk = blake2b256(value(ea.script))
1548- let hl = fromBase64String(value(getString(aE, ap())))
1549- let hm = scriptHash(this)
1550- if (if ((hl == hk))
1551- then (hm != hk)
1552- else false)
1777+ let cC = gl
1778+ if (sigVerify(ig.bodyBytes, ig.proofs[0], ii))
15531779 then true
1554- else sigVerify(hd.bodyBytes, hd.proofs[0], hf)
1780+ else {
1781+ let il = blake2b256(value(cC.script))
1782+ let im = fromBase64String(value(getString(aQ, aC())))
1783+ let in = scriptHash(this)
1784+ if ((im == il))
1785+ then (in != il)
1786+ else false
1787+ }
15551788 }
1556- else sigVerify(hd.bodyBytes, hd.proofs[0], hf)
1789+ else sigVerify(ig.bodyBytes, ig.proofs[0], ii)
15571790 }
15581791

github/deemru/w8io/169f3d6 
389.43 ms