tx · 7V72EkJi1M22EZhULDwi13Dp9aFMmWaQFrv7koQDabyM

3PCENpEKe8atwELZ7oCSmcdEfcRuKTrUx99:  -0.03000000 Waves

2022.11.07 18:13 [3372236] smart account 3PCENpEKe8atwELZ7oCSmcdEfcRuKTrUx99 > SELF 0.00000000 Waves

{ "type": 13, "id": "7V72EkJi1M22EZhULDwi13Dp9aFMmWaQFrv7koQDabyM", "fee": 3000000, "feeAssetId": null, "timestamp": 1667834000838, "version": 1, "sender": "3PCENpEKe8atwELZ7oCSmcdEfcRuKTrUx99", "senderPublicKey": "24dorn126Pv4mGCgUu61v1RLxqW4VNXbuHjmCHh7tc3K", "proofs": [ "XTKwhvYK7zqPRp9Jx5tfGmMV1GG4KVK24EH7nb3wiq8p5TVyK3pibcrcqnF8gcEcnKZSH5cKQPVCqs6MVWNcPM2" ], "script": "base64:BgKxJwgCEgMKAQgSABIECgIBBBIDCgEBEgQKAgEEEgQKAggBEgQKAggBEgQKAggBEgUKAwEIARIAEgQKAgEBEgMKAQESBQoDAQEBEgQKAggIEgASAwoBCBIFCgMBAQESBAoCAQESBAoCCAESBAoCCAgSCwoJCAEBAgECCAQEEgYKBAgIAQgSABIDCgEBEgMKAQESBAoCCAEiCmxQZGVjaW1hbHMiBnNjYWxlOCIMc2NhbGU4QmlnSW50IgdzY2FsZTE4Igp6ZXJvQmlnSW50IgRiaWcwIgRiaWcxIgRiaWcyIgt3YXZlc1N0cmluZyIDU0VQIgpQb29sQWN0aXZlIg9Qb29sUHV0RGlzYWJsZWQiE1Bvb2xNYXRjaGVyRGlzYWJsZWQiDFBvb2xTaHV0ZG93biIOaWR4UG9vbEFkZHJlc3MiDWlkeFBvb2xTdGF0dXMiEGlkeFBvb2xMUEFzc2V0SWQiDWlkeEFtdEFzc2V0SWQiD2lkeFByaWNlQXNzZXRJZCIOaWR4QW10QXNzZXREY20iEGlkeFByaWNlQXNzZXREY20iDmlkeElBbXRBc3NldElkIhBpZHhJUHJpY2VBc3NldElkIg1pZHhMUEFzc2V0RGNtIhJpZHhQb29sQW10QXNzZXRBbXQiFGlkeFBvb2xQcmljZUFzc2V0QW10IhFpZHhQb29sTFBBc3NldEFtdCIZaWR4RmFjdG9yeVN0YWtpbmdDb250cmFjdCIaaWR4RmFjdG9yeVNsaXBwYWdlQ29udHJhY3QiBXRvWDE4IgdvcmlnVmFsIg1vcmlnU2NhbGVNdWx0Igdmcm9tWDE4IgN2YWwiD3Jlc3VsdFNjYWxlTXVsdCIHdG9TY2FsZSIDYW10IghyZXNTY2FsZSIIY3VyU2NhbGUiA2FicyIJYWJzQmlnSW50IgJmYyIDbXBrIgRwbXBrIgJwbCICcGgiAWgiCXRpbWVzdGFtcCIDcGF1Igt1c2VyQWRkcmVzcyIEdHhJZCIDZ2F1IgJhYSICcGEiBmtleUZlZSIKZmVlRGVmYXVsdCIDZmVlIhBrZXlGYWN0b3J5Q29uZmlnIg1rZXlNYXRjaGVyUHViIilrZXlNYXBwaW5nUG9vbENvbnRyYWN0QWRkcmVzc1RvUG9vbEFzc2V0cyITcG9vbENvbnRyYWN0QWRkcmVzcyINa2V5UG9vbENvbmZpZyIJaUFtdEFzc2V0IgtpUHJpY2VBc3NldCIfa2V5TWFwcGluZ3NCYXNlQXNzZXQyaW50ZXJuYWxJZCIMYmFzZUFzc2V0U3RyIhNrZXlBbGxQb29sc1NodXRkb3duIg1rZXlQb29sV2VpZ2h0Ig9jb250cmFjdEFkZHJlc3MiFmtleUFsbG93ZWRMcFNjcmlwdEhhc2giFmtleUZlZUNvbGxlY3RvckFkZHJlc3MiD3Rocm93T3JkZXJFcnJvciIKb3JkZXJWYWxpZCILc2VuZGVyVmFsaWQiDG1hdGNoZXJWYWxpZCIPZ2V0U3RyaW5nT3JGYWlsIgdhZGRyZXNzIgNrZXkiDGdldEludE9yRmFpbCIIdGhyb3dFcnIiA21zZyIPZmFjdG9yeUNvbnRyYWN0IhNmZWVDb2xsZWN0b3JBZGRyZXNzIhBpc0dsb2JhbFNodXRkb3duIhNnZXRNYXRjaGVyUHViT3JGYWlsIg1nZXRQb29sQ29uZmlnIghhbXRBc3NldCIKcHJpY2VBc3NldCIMcGFyc2VBc3NldElkIgVpbnB1dCIPYXNzZXRJZFRvU3RyaW5nIg9wYXJzZVBvb2xDb25maWciCnBvb2xDb25maWciEHBvb2xDb25maWdQYXJzZWQiCyR0MDc1NDQ3NzEwIg5jZmdQb29sQWRkcmVzcyINY2ZnUG9vbFN0YXR1cyIMY2ZnTHBBc3NldElkIhBjZmdBbW91bnRBc3NldElkIg9jZmdQcmljZUFzc2V0SWQiFmNmZ0Ftb3VudEFzc2V0RGVjaW1hbHMiFWNmZ1ByaWNlQXNzZXREZWNpbWFscyIQZ2V0RmFjdG9yeUNvbmZpZyIPc3Rha2luZ0NvbnRyYWN0IhBzbGlwcGFnZUNvbnRyYWN0IhFkYXRhUHV0QWN0aW9uSW5mbyINaW5BbXRBc3NldEFtdCIPaW5QcmljZUFzc2V0QW10IghvdXRMcEFtdCIFcHJpY2UiHXNsaXBwYWdlVG9sZXJhbmNlUGFzc2VkQnlVc2VyIhVzbGlwcGFnZVRvbGVyYW5jZVJlYWwiCHR4SGVpZ2h0Igt0eFRpbWVzdGFtcCISc2xpcGFnZUFtdEFzc2V0QW10IhRzbGlwYWdlUHJpY2VBc3NldEFtdCIRZGF0YUdldEFjdGlvbkluZm8iDm91dEFtdEFzc2V0QW10IhBvdXRQcmljZUFzc2V0QW10IgdpbkxwQW10Ig1nZXRBY2NCYWxhbmNlIgdhc3NldElkIg9jYWxjUHJpY2VCaWdJbnQiCHByQW10WDE4IghhbUFtdFgxOCIQcHJpdmF0ZUNhbGNQcmljZSIKYW1Bc3NldERjbSIKcHJBc3NldERjbSIFYW1BbXQiBXByQW10Ig5hbXRBc3NldEFtdFgxOCIQcHJpY2VBc3NldEFtdFgxOCIKY2FsY1ByaWNlcyIFbHBBbXQiA2NmZyILYW10QXNzZXREY20iDXByaWNlQXNzZXREY20iCHByaWNlWDE4IghscEFtdFgxOCITbHBQcmljZUluQW1Bc3NldFgxOCITbHBQcmljZUluUHJBc3NldFgxOCIPY2FsY3VsYXRlUHJpY2VzIgZwcmljZXMiFGVzdGltYXRlR2V0T3BlcmF0aW9uIgZ0eElkNTgiCnBtdEFzc2V0SWQiCHBtdExwQW10IglscEFzc2V0SWQiCWFtQXNzZXRJZCIJcHJBc3NldElkIgpwb29sU3RhdHVzIgpscEVtaXNzaW9uIglhbUJhbGFuY2UiDGFtQmFsYW5jZVgxOCIJcHJCYWxhbmNlIgxwckJhbGFuY2VYMTgiC2N1clByaWNlWDE4IghjdXJQcmljZSILcG10THBBbXRYMTgiDWxwRW1pc3Npb25YMTgiC291dEFtQW10WDE4IgtvdXRQckFtdFgxOCIIb3V0QW1BbXQiCG91dFByQW10IgVzdGF0ZSIUZXN0aW1hdGVQdXRPcGVyYXRpb24iEXNsaXBwYWdlVG9sZXJhbmNlIgxpbkFtQXNzZXRBbXQiC2luQW1Bc3NldElkIgxpblByQXNzZXRBbXQiC2luUHJBc3NldElkIgppc0V2YWx1YXRlIgZlbWl0THAiDGFtQXNzZXRJZFN0ciIMcHJBc3NldElkU3RyIgtpQW10QXNzZXRJZCINaVByaWNlQXNzZXRJZCIOaW5BbUFzc2V0SWRTdHIiDmluUHJBc3NldElkU3RyIg9pbkFtQXNzZXRBbXRYMTgiD2luUHJBc3NldEFtdFgxOCIMdXNlclByaWNlWDE4IgNyZXMiC3NsaXBwYWdlWDE4IhRzbGlwcGFnZVRvbGVyYW5jZVgxOCIKcHJWaWFBbVgxOCIKYW1WaWFQclgxOCIMZXhwZWN0ZWRBbXRzIhFleHBBbXRBc3NldEFtdFgxOCITZXhwUHJpY2VBc3NldEFtdFgxOCIJY2FsY0xwQW10Ig5jYWxjQW1Bc3NldFBtdCIOY2FsY1ByQXNzZXRQbXQiDHNsaXBwYWdlQ2FsYyIJZW1pdExwQW10IgZhbURpZmYiBnByRGlmZiILY29tbW9uU3RhdGUiG3ZhbGlkYXRlTWF0Y2hlck9yZGVyQWxsb3dlZCIFb3JkZXIiCmFtdEFzc2V0SWQiDHByaWNlQXNzZXRJZCISYWNjQW10QXNzZXRCYWxhbmNlIhRhY2NQcmljZUFzc2V0QmFsYW5jZSINb3JkZXJBbXRBc3NldCIQb3JkZXJBbXRBc3NldFN0ciIPb3JkZXJQcmljZUFzc2V0IhJvcmRlclByaWNlQXNzZXRTdHIiCm9yZGVyUHJpY2UiCHByaWNlRGNtIhBjYXN0ZWRPcmRlclByaWNlIhFpc09yZGVyUHJpY2VWYWxpZCIJY29tbW9uR2V0IgFpIgNwbXQiBnBtdEFtdCIJY29tbW9uUHV0IgphbUFzc2V0UG10IgpwckFzc2V0UG10IgZlc3RQdXQiBGVtaXQiBmFtb3VudCIHZW1pdEludiINZW1pdEludkxlZ2FjeSIHJG1hdGNoMCIVbGVnYWN5RmFjdG9yeUNvbnRyYWN0Igd0YWtlRmVlIglmZWVBbW91bnQiD2NhbGNQdXRPbmVUb2tlbiIQcGF5bWVudEFtb3VudFJhdyIOcGF5bWVudEFzc2V0SWQiBmlzRXZhbCIQYW1vdW50QmFsYW5jZVJhdyIPcHJpY2VCYWxhbmNlUmF3IhRwYXltZW50SW5BbW91bnRBc3NldCINJHQwMjI1NzEyMjg2NCIQYW1vdW50QmFsYW5jZU9sZCIPcHJpY2VCYWxhbmNlT2xkIg0kdDAyMjg2ODIzMDE3IhRhbW91bnRBc3NldEFtb3VudFJhdyITcHJpY2VBc3NldEFtb3VudFJhdyIRYW1vdW50QXNzZXRBbW91bnQiEHByaWNlQXNzZXRBbW91bnQiDSR0MDIzMTM5MjMxOTgiDXBheW1lbnRBbW91bnQiEGFtb3VudEJhbGFuY2VOZXciD3ByaWNlQmFsYW5jZU5ldyILcHJpY2VOZXdYMTgiCHByaWNlTmV3Ig5wYXltZW50QmFsYW5jZSIUcGF5bWVudEJhbGFuY2VCaWdJbnQiDHN1cHBseUJpZ0ludCILY2hlY2hTdXBwbHkiDWRlcG9zaXRCaWdJbnQiC2lzc3VlQW1vdW50IgtwcmljZU9sZFgxOCIIcHJpY2VPbGQiBGxvc3MiDSR0MDI0Njc1MjQ4NDIiB2JhbGFuY2UiD2lzc3VlQW1vdW50Qm90aCIPY2FsY0dldE9uZVRva2VuIgpvdXRBc3NldElkIgZjaGVja3MiEG91dEluQW1vdW50QXNzZXQiDWJhbGFuY2VCaWdJbnQiDGFtQmFsYW5jZU9sZCIMcHJCYWxhbmNlT2xkIgpvdXRCYWxhbmNlIhBvdXRCYWxhbmNlQmlnSW50Ig5yZWRlZW1lZEJpZ0ludCIJYW1vdW50UmF3Ig0kdDAyNjQyMjI2NDcyIgt0b3RhbEFtb3VudCINJHQwMjY0NzYyNjcwMiILb3V0QW1BbW91bnQiC291dFByQW1vdW50IgxhbUJhbGFuY2VOZXciDHByQmFsYW5jZU5ldyIYYW1vdW50Qm90aEluUGF5bWVudEFzc2V0IhZtYW5hZ2VyUHVibGljS2V5T3JVbml0IgFzIh1wZW5kaW5nTWFuYWdlclB1YmxpY0tleU9yVW5pdCILbXVzdE1hbmFnZXIiAnBkIgJwayIXcGVuZGluZ01hbmFnZXJQdWJsaWNLZXkiC2NoZWNrQ2FsbGVyIhVjaGVja01hbmFnZXJQdWJsaWNLZXkiAnBtIgVoYXNQTSIHY2hlY2tQTSIPc2hvdWxkQXV0b1N0YWtlIgRhbUlkIgRwcklkIgxzbGlwcGFnZUFJbnYiDHNsaXBwYWdlUEludiIKbHBUcmFuc2ZlciILc2xwU3Rha2VJbnYiC21heFNsaXBwYWdlIgxtaW5PdXRBbW91bnQiCWF1dG9TdGFrZSIgaXNQb29sT25lVG9rZW5PcGVyYXRpb25zRGlzYWJsZWQiAUAiDWlzUHV0RGlzYWJsZWQiB3BheW1lbnQiDSR0MDMxNDEyMzE1MzkiE2VtaXRBbW91bnRFc3RpbWF0ZWQiBWJvbnVzIgplbWl0QW1vdW50IghzdGFrZUludiIHc2VuZEZlZSINJHQwMzIyNjgzMjQwMyINb3V0QXNzZXRJZFN0ciINaXNHZXREaXNhYmxlZCINJHQwMzMxNzUzMzMwNyIPYW1vdW50RXN0aW1hdGVkIgdidXJuSW52Ig1hc3NldFRyYW5zZmVyIg0kdDAzMzk0MjM0MDgwIg11bnN0YWtlQW1vdW50Igp1bnN0YWtlSW52Ig0kdDAzNDg3MjM1MDAyIglvdXRBbXRBbXQiFGJ1cm5MUEFzc2V0T25GYWN0b3J5IhJub0xlc3NUaGVuQW10QXNzZXQiFG5vTGVzc1RoZW5QcmljZUFzc2V0Ig1jaGVja1BheW1lbnRzIg9jaGVja1Bvb2xTdGF0dXMiFW5vTGVzc1RoZW5BbW91bnRBc3NldCIMY2hlY2tBbW91bnRzIgthbXRBc3NldFN0ciINcHJpY2VBc3NldFN0ciINcG9vbExQQmFsYW5jZSIKcHJpY2VzTGlzdCIPbHBBbXRBc3NldFNoYXJlIhFscFByaWNlQXNzZXRTaGFyZSIKcG9vbFdlaWdodCIMY3VyUHJpY2VDYWxjIgxhbUJhbGFuY2VSYXciDHByQmFsYW5jZVJhdyIPYW1CYWxhbmNlUmF3WDE4Ig9wckJhbGFuY2VSYXdYMTgiEHBheW1lbnRMcEFzc2V0SWQiDHBheW1lbnRMcEFtdCICdHgiBnZlcmlmeSIPdGFyZ2V0UHVibGljS2V5IgptYXRjaGVyUHViIgduZXdIYXNoIgthbGxvd2VkSGFzaCILY3VycmVudEhhc2hiAAFhAAgAAWIAgMLXLwABYwkAtgIBAIDC1y8AAWQJALYCAQCAgJC7utat8A0AAWUJALYCAQAAAAFmCQC2AgEAAAABZwkAtgIBAAEAAWgJALYCAQACAAFpAgVXQVZFUwABagICX18AAWsAAQABbAACAAFtAAMAAW4ABAABbwABAAFwAAIAAXEAAwABcgAEAAFzAAUAAXQABgABdQAHAAF2AAgAAXcACQABeAAKAAF5AAEAAXoAAgABQQADAAFCAAEAAUMABwEBRAIBRQFGCQC8AgMJALYCAQUBRQUBZAkAtgIBBQFGAQFHAgFIAUkJAKADAQkAvAIDBQFICQC2AgEFAUkFAWQBAUoDAUsBTAFNCQBrAwUBSwUBTAUBTQEBTgEBSAMJAGYCAAAFAUgJAQEtAQUBSAUBSAEBTwEBSAMJAL8CAgUBZQUBSAkAvgIBBQFIBQFIAQFQAAITJXNfX2ZhY3RvcnlDb250cmFjdAEBUQACFCVzX19tYW5hZ2VyUHVibGljS2V5AQFSAAIbJXNfX3BlbmRpbmdNYW5hZ2VyUHVibGljS2V5AQFTAAIRJXMlc19fcHJpY2VfX2xhc3QBAVQCAVUBVgkAuQkCCQDMCAICGCVzJXMlZCVkX19wcmljZV9faGlzdG9yeQkAzAgCCQCkAwEFAVUJAMwIAgkApAMBBQFWBQNuaWwFAWoBAVcCAVgBWQkArAICCQCsAgIJAKwCAgILJXMlcyVzX19QX18FAVgCAl9fBQFZAQFaAgFYAVkJAKwCAgkArAICCQCsAgICCyVzJXMlc19fR19fBQFYAgJfXwUBWQECYWEAAg8lc19fYW1vdW50QXNzZXQBAmFiAAIOJXNfX3ByaWNlQXNzZXQAAmFjAgclc19fZmVlAAJhZAkAawMACgUBYgCQTgACYWUJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUCYWMFAmFkAQJhZgACESVzX19mYWN0b3J5Q29uZmlnAQJhZwACGCVzJXNfX21hdGNoZXJfX3B1YmxpY0tleQECYWgBAmFpCQCsAgIJAKwCAgIIJXMlcyVzX18FAmFpAiBfX21hcHBpbmdzX19wb29sQ29udHJhY3QyTHBBc3NldAECYWoCAmFrAmFsCQCsAgIJAKwCAgkArAICCQCsAgICCCVkJWQlc19fBQJhawICX18FAmFsAghfX2NvbmZpZwECYW0BAmFuCQCsAgICKCVzJXMlc19fbWFwcGluZ3NfX2Jhc2VBc3NldDJpbnRlcm5hbElkX18FAmFuAQJhbwACDCVzX19zaHV0ZG93bgECYXABAmFxCQCsAgICEiVzJXNfX3Bvb2xXZWlnaHRfXwUCYXEBAmFyAAIXJXNfX2FsbG93ZWRMcFNjcmlwdEhhc2gAAmFzAhclc19fZmVlQ29sbGVjdG9yQWRkcmVzcwECYXQDAmF1AmF2AmF3CQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgICJG9yZGVyIHZhbGlkYXRpb24gZmFpbGVkOiBvcmRlclZhbGlkPQkApQMBBQJhdQINIHNlbmRlclZhbGlkPQkApQMBBQJhdgIOIG1hdGNoZXJWYWxpZD0JAKUDAQUCYXcBAmF4AgJheQJhegkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFAmF5BQJhegkAuQkCCQDMCAICCm1hbmRhdG9yeSAJAMwIAgkApQgBBQJheQkAzAgCAgEuCQDMCAIFAmF6CQDMCAICDyBpcyBub3QgZGVmaW5lZAUDbmlsAgABAmFBAgJheQJhegkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFAmF5BQJhegkAuQkCCQDMCAICCm1hbmRhdG9yeSAJAMwIAgkApQgBBQJheQkAzAgCAgEuCQDMCAIFAmF6CQDMCAICDyBpcyBub3QgZGVmaW5lZAUDbmlsAgABAmFCAQJhQwkAAgEJALkJAgkAzAgCAghscC5yaWRlOgkAzAgCBQJhQwUDbmlsAgEgAAJhRAkBEUBleHRyTmF0aXZlKDEwNjIpAQkBAmF4AgUEdGhpcwkBAVAAAAJhRQkBEUBleHRyTmF0aXZlKDEwNjIpAQkBAmF4AgUCYUQFAmFzAQJhRgAJAQt2YWx1ZU9yRWxzZQIJAJsIAgUCYUQJAQJhbwAHAQJhRwAJANkEAQkBAmF4AgUCYUQJAQJhZwABAmFIAAQCYUkJAQJheAIFBHRoaXMJAQJhYQAEAmFKCQECYXgCBQR0aGlzCQECYWIABAJhbAkBAmFBAgUCYUQJAQJhbQEFAmFKBAJhawkBAmFBAgUCYUQJAQJhbQEFAmFJCQC1CQIJAQJheAIFAmFECQECYWoCCQCkAwEFAmFrCQCkAwEFAmFsBQFqAQJhSwECYUwDCQAAAgUCYUwFAWkFBHVuaXQJANkEAQUCYUwBAmFNAQJhTAMJAAACBQJhTAUEdW5pdAUBaQkA2AQBCQEFdmFsdWUBBQJhTAECYU4BAmFPCQCZCgcJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAJEDAgUCYU8FAW8JAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJhTwUBcAkA2QQBCQCRAwIFAmFPBQFxCQECYUsBCQCRAwIFAmFPBQFyCQECYUsBCQCRAwIFAmFPBQFzCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCYU8FAXQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJhTwUBdQACYVAJAQJhTgEJAQJhSAAAAmFRBQJhUAACYVIIBQJhUQJfMQACYVMIBQJhUQJfMgACYVQIBQJhUQJfMwACYVUIBQJhUQJfNAACYVYIBQJhUQJfNQACYVcIBQJhUQJfNgACYVgIBQJhUQJfNwECYVkACQC1CQIJAQJheAIFAmFECQECYWYABQFqAAJhWgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJAJEDAgkBAmFZAAUBQgIZaW5jb3JyZWN0IHN0YWtpbmcgYWRkcmVzcwACYmEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQCRAwIJAQJhWQAFAUMCGWluY29ycmVjdCBzdGFraW5nIGFkZHJlc3MBAmJiCgJiYwJiZAJiZQJiZgJiZwJiaAJiaQJiagJiawJibAkAuQkCCQDMCAICFCVkJWQlZCVkJWQlZCVkJWQlZCVkCQDMCAIJAKQDAQUCYmMJAMwIAgkApAMBBQJiZAkAzAgCCQCkAwEFAmJlCQDMCAIJAKQDAQUCYmYJAMwIAgkApAMBBQJiZwkAzAgCCQCkAwEFAmJoCQDMCAIJAKQDAQUCYmkJAMwIAgkApAMBBQJiagkAzAgCCQCkAwEFAmJrCQDMCAIJAKQDAQUCYmwFA25pbAUBagECYm0GAmJuAmJvAmJwAmJmAmJpAmJqCQC5CQIJAMwIAgIMJWQlZCVkJWQlZCVkCQDMCAIJAKQDAQUCYm4JAMwIAgkApAMBBQJibwkAzAgCCQCkAwEFAmJwCQDMCAIJAKQDAQUCYmYJAMwIAgkApAMBBQJiaQkAzAgCCQCkAwEFAmJqBQNuaWwFAWoBAmJxAQJicgMJAAACBQJicgIFV0FWRVMICQDvBwEFBHRoaXMJYXZhaWxhYmxlCQDwBwIFBHRoaXMJANkEAQUCYnIBAmJzAgJidAJidQkAvAIDBQJidAUBZAUCYnUBAmJ2BAJidwJieAJieQJiegQCYkEJAQFEAgUCYnkFAmJ3BAJiQgkBAUQCBQJiegUCYngJAQJicwIFAmJCBQJiQQECYkMDAmJ5AmJ6AmJEBAJiRQkBAmFIAAQCYkYJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJiRQUBdAQCYkcJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJiRQUBdQQCYkgJAQJidgQFAmJGBQJiRwUCYnkFAmJ6BAJidQkBAUQCBQJieQUCYkYEAmJ0CQEBRAIFAmJ6BQJiRwQCYkkJAQFEAgUCYkQFAWIEAmJKCQECYnMCBQJidQUCYkkEAmJLCQECYnMCBQJidAUCYkkJAMwIAgUCYkgJAMwIAgUCYkoJAMwIAgUCYksFA25pbAECYkwDAmJ5AmJ6AmJEBAJiTQkBAmJDAwUCYnkFAmJ6BQJiRAkAzAgCCQEBRwIJAJEDAgUCYk0AAAUBYgkAzAgCCQEBRwIJAJEDAgUCYk0AAQUBYgkAzAgCCQEBRwIJAJEDAgUCYk0AAgUBYgUDbmlsAQJiTgQCYk8CYlACYlEBWAQCYkUJAQJhSAAEAmJSCQCRAwIFAmJFBQFxBAJiUwkAkQMCBQJiRQUBcgQCYlQJAJEDAgUCYkUFAXMEAmJ3CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCYkUFAXQEAmJ4CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCYkUFAXUEAmJVCQCRAwIFAmJFBQFwBAJiVggJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkA7AcBCQDZBAEFAmJSCQCsAgIJAKwCAgIGQXNzZXQgBQJiUgIOIGRvZXNuJ3QgZXhpc3QIcXVhbnRpdHkDCQECIT0CBQJiUgUCYlAJAAIBAhVJbnZhbGlkIGFzc2V0IHBhc3NlZC4EAmJXCQECYnEBBQJiUwQCYlgJAQFEAgUCYlcFAmJ3BAJiWQkBAmJxAQUCYlQEAmJaCQEBRAIFAmJZBQJieAQCY2EJAQJicwIFAmJaBQJiWAQCY2IJAQFHAgUCY2EFAWIEAmNjCQEBRAIFAmJRBQFiBAJjZAkBAUQCBQJiVgUBYgQCY2UJALwCAwUCYlgFAmNjBQJjZAQCY2YJALwCAwUCYloFAmNjBQJjZAQCY2cJAQFHAgUCY2UFAmJ3BAJjaAkBAUcCBQJjZgUCYngEAmNpAwkAAAIFAmJPAgAFA25pbAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQFYBQJjZwMJAAACBQJiUwIFV0FWRVMFBHVuaXQJANkEAQUCYlMJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUBWAUCY2gDCQAAAgUCYlQCBVdBVkVTBQR1bml0CQDZBAEFAmJUCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQFaAgkApQgBBQFYBQJiTwkBAmJtBgUCY2cFAmNoBQJiUQUCY2IFBmhlaWdodAgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFTAAUCY2IJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFUAgUGaGVpZ2h0CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUCY2IFA25pbAkAnAoKBQJjZwUCY2gFAmJTBQJiVAUCYlcFAmJZBQJiVgUCY2EFAmJVBQJjaQECY2oJAmJPAmNrAmNsAmNtAmNuAmNvAVgCY3ACY3EEAmJFCQECYUgABAJiUgkA2QQBCQCRAwIFAmJFBQFxBAJjcgkAkQMCBQJiRQUBcgQCY3MJAJEDAgUCYkUFAXMEAmN0CQCRAwIFAmJFBQF2BAJjdQkAkQMCBQJiRQUBdwQCYkYJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJiRQUBdAQCYkcJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJiRQUBdQQCYlUJAJEDAgUCYkUFAXAEAmJWCAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDsBwEFAmJSCQCsAgIJAKwCAgIGQXNzZXQgCQDYBAEFAmJSAg4gZG9lc24ndCBleGlzdAhxdWFudGl0eQQCY3YJANgEAQkBC3ZhbHVlT3JFbHNlAgUCY20JANkEAQIFV0FWRVMEAmN3CQDYBAEJAQt2YWx1ZU9yRWxzZQIFAmNvCQDZBAECBVdBVkVTAwMJAQIhPQIFAmNyBQJjdgYJAQIhPQIFAmNzBQJjdwkAAgECIkludmFsaWQgYW10IG9yIHByaWNlIGFzc2V0IHBhc3NlZC4EAmJXAwUCY3AJAQJicQEFAmNyCQBlAgkBAmJxAQUCY3IFAmNsBAJiWQMFAmNwCQECYnEBBQJjcwkAZQIJAQJicQEFAmNzBQJjbgQCY3gJAQFEAgUCY2wFAmJGBAJjeQkBAUQCBQJjbgUCYkcEAmN6CQECYnMCBQJjeQUCY3gEAmJYCQEBRAIFAmJXBQJiRgQCYloJAQFEAgUCYlkFAmJHBAJjQQMJAAACBQJiVgAABAJjYQUBZQQCY0IFAWUEAmJJCQB2BgkAuQICBQJjeAUCY3kAAAkAtgIBAAUAAQAABQRET1dOCQCXCgUJAQFHAgUCYkkFAWIJAQFHAgUCY3gFAmJGCQEBRwIFAmN5BQJiRwkBAmJzAgkAtwICBQJiWgUCY3kJALcCAgUCYlgFAmN4BQJjQgQCY2EJAQJicwIFAmJaBQJiWAQCY0IJALwCAwkBAU8BCQC4AgIFAmNhBQJjegUBZAUCY2EEAmNDCQEBRAIFAmNrBQFiAwMJAQIhPQIFAmNhBQFlCQC/AgIFAmNCBQJjQwcJAAIBCQCsAgIJAKwCAgkArAICAg9QcmljZSBzbGlwcGFnZSAJAKYDAQUCY0ICHiBleGNlZWRlZCB0aGUgcGFzc2VkIGxpbWl0IG9mIAkApgMBBQJjQwQCY2QJAQFEAgUCYlYFAWIEAmNECQC8AgMFAmN4BQJjYQUBZAQCY0UJALwCAwUCY3kFAWQFAmNhBAJjRgMJAL8CAgUCY0QFAmN5CQCUCgIFAmNFBQJjeQkAlAoCBQJjeAUCY0QEAmNHCAUCY0YCXzEEAmNICAUCY0YCXzIEAmJJCQC8AgMFAmNkBQJjSAUCYloJAJcKBQkBAUcCBQJiSQUBYgkBAUcCBQJjRwUCYkYJAQFHAgUCY0gFAmJHBQJjYQUCY0IEAmNJCAUCY0ECXzEEAmNKCAUCY0ECXzIEAmNLCAUCY0ECXzMEAmNiCQEBRwIIBQJjQQJfNAUBYgQCY0wJAQFHAggFAmNBAl81BQFiAwkAZwIAAAUCY0kJAAIBAjZJbnZhbGlkIGNhbGN1bGF0aW9ucy4gTFAgY2FsY3VsYXRlZCBpcyBsZXNzIHRoYW4gemVyby4EAmNNAwkBASEBBQJjcQAABQJjSQQCY04JAGUCBQJjbAUCY0oEAmNPCQBlAgUCY24FAmNLBAJjUAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAVMABQJjYgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAVQCBQZoZWlnaHQIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQJjYgkAzAgCCQELU3RyaW5nRW50cnkCCQEBVwIFAVgFAmJPCQECYmIKBQJjSgUCY0sFAmNNBQJjYgUCY2sFAmNMBQZoZWlnaHQIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQJjTgUCY08FA25pbAkAnwoNBQJjSQUCY00FAmNiBQJiVwUCYlkFAmJWBQJiUgUCYlUFAmNQBQJjTgUCY08FAmNtBQJjbwECY1EBAmNSBAJiRQkBAmFIAAQCY1MJAJEDAgUCYkUFAXIEAmNUCQCRAwIFAmJFBQFzBAJiVQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmJFBQFwBAJiRgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmJFBQF0BAJiRwkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmJFBQF1BAJjVQkBAmJxAQUCY1MEAmNWCQECYnEBBQJjVAQCY2EDCQAAAggFAmNSCW9yZGVyVHlwZQUDQnV5CQECYnYEBQJiRgUCYkcJAGQCBQJjVQgFAmNSBmFtb3VudAUCY1YJAQJidgQFAmJGBQJiRwkAZQIFAmNVCAUCY1IGYW1vdW50BQJjVgQCY2IJAQFHAgUCY2EFAWIDAwMJAQJhRgAGCQAAAgUCYlUFAW0GCQAAAgUCYlUFAW4JAAIBAhxFeGNoYW5nZSBvcGVyYXRpb25zIGRpc2FibGVkBAJjVwgIBQJjUglhc3NldFBhaXILYW1vdW50QXNzZXQEAmNYAwkAAAIFAmNXBQR1bml0AgVXQVZFUwkA2AQBCQEFdmFsdWUBBQJjVwQCY1kICAUCY1IJYXNzZXRQYWlyCnByaWNlQXNzZXQEAmNaAwkAAAIFAmNZBQR1bml0AgVXQVZFUwkA2AQBCQEFdmFsdWUBBQJjWQMDCQECIT0CBQJjWAUCY1MGCQECIT0CBQJjWgUCY1QJAAIBAhNXcm9uZyBvcmRlciBhc3NldHMuBAJkYQgFAmNSBXByaWNlBAJkYgkAawMFAWIFAmJHBQJiRgQCZGMJAQFKAwUCZGEFAWIFAmRiBAJkZAMJAAACCAUCY1IJb3JkZXJUeXBlBQNCdXkJAGcCBQJjYgUCZGMJAGcCBQJkYwUCY2IGAQJkZQECZGYDCQECIT0CCQCQAwEIBQJkZghwYXltZW50cwABCQACAQIdZXhhY3RseSAxIHBheW1lbnQgaXMgZXhwZWN0ZWQEAmRnCQEFdmFsdWUBCQCRAwIIBQJkZghwYXltZW50cwAABAJiUAkBBXZhbHVlAQgFAmRnB2Fzc2V0SWQEAmRoCAUCZGcGYW1vdW50BAJjQQkBAmJOBAkA2AQBCAUCZGYNdHJhbnNhY3Rpb25JZAkA2AQBBQJiUAUCZGgIBQJkZgZjYWxsZXIEAmNnCAUCY0ECXzEEAmNoCAUCY0ECXzIEAmJVCQENcGFyc2VJbnRWYWx1ZQEIBQJjQQJfOQQCY2kIBQJjQQNfMTADAwkBAmFGAAYJAAACBQJiVQUBbgkAAgEJAKwCAgIsR2V0IG9wZXJhdGlvbiBpcyBibG9ja2VkIGJ5IGFkbWluLiBTdGF0dXMgPSAJAKQDAQUCYlUJAJcKBQUCY2cFAmNoBQJkaAUCYlAFAmNpAQJkaQMCZGYCY2sCY3EDCQECIT0CCQCQAwEIBQJkZghwYXltZW50cwACCQACAQIfZXhhY3RseSAyIHBheW1lbnRzIGFyZSBleHBlY3RlZAQCZGoJAQV2YWx1ZQEJAJEDAggFAmRmCHBheW1lbnRzAAAEAmRrCQEFdmFsdWUBCQCRAwIIBQJkZghwYXltZW50cwABBAJkbAkBAmNqCQkA2AQBCAUCZGYNdHJhbnNhY3Rpb25JZAUCY2sIBQJkagZhbW91bnQIBQJkagdhc3NldElkCAUCZGsGYW1vdW50CAUCZGsHYXNzZXRJZAkApQgBCAUCZGYGY2FsbGVyBwUCY3EEAmJVCQENcGFyc2VJbnRWYWx1ZQEIBQJkbAJfOAMDAwkBAmFGAAYJAAACBQJiVQUBbAYJAAACBQJiVQUBbgkAAgEJAKwCAgIsUHV0IG9wZXJhdGlvbiBpcyBibG9ja2VkIGJ5IGFkbWluLiBTdGF0dXMgPSAJAKQDAQUCYlUFAmRsAQJkbQECZG4EAmRvCQD8BwQFAmFEAgRlbWl0CQDMCAIFAmRuBQNuaWwFA25pbAMJAAACBQJkbwUCZG8EAmRwBAJkcQUCZG8DCQABAgUCZHECB0FkZHJlc3MEAmRyBQJkcQkA/AcEBQJkcgIEZW1pdAkAzAgCBQJkbgUDbmlsBQNuaWwFBHVuaXQDCQAAAgUCZHAFAmRwBQJkbgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgECZHMBAmRuBAJkdAkAawMFAmRuBQJhZQUBYgkAlAoCCQBlAgUCZG4FAmR0BQJkdAECZHUEAmR2AmR3AVgBWQQCZHgJAAACBQFZBQR1bml0BAJkeQkBAmJxAQkBAmFNAQUCYVUEAmR6CQECYnEBCQECYU0BBQJhVgQCZEEDCQAAAgUCZHcFAmFVBgMJAAACBQJkdwUCYVYHCQECYUIBAg1pbnZhbGlkIGFzc2V0BAJkQgMFAmR4CQCUCgIFAmR5BQJkegMFAmRBCQCUCgIJAGUCBQJkeQUCZHYFAmR6CQCUCgIFAmR5CQBlAgUCZHoFAmR2BAJkQwgFAmRCAl8xBAJkRAgFAmRCAl8yBAJkRQMFAmRBCQCUCgIFAmR2AAAJAJQKAgAABQJkdgQCZEYIBQJkRQJfMQQCZEcIBQJkRQJfMgQCZEgICQECZHMBBQJkRgJfMQQCZEkICQECZHMBBQJkRwJfMQQCZEoJAQJkcwEFAmR2BAJkSwgFAmRKAl8xBAJkdAgFAmRKAl8yBAJkTAkAZAIFAmRDBQJkSAQCZE0JAGQCBQJkRAUCZEkEAmROCQECYnMCCQEBRAIFAmRNBQJhWAkBAUQCBQJkTAUCYVcEAmRPCQEBRwIFAmROBQFiBAJkUAMFAmRBBQJkQwUCZEQEAmRRCQC2AgEFAmRQBAJkUgkAtgIBCAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDsBwEFAmFUCQCsAgIJAKwCAgIGYXNzZXQgCQDYBAEFAmFUAg4gZG9lc24ndCBleGlzdAhxdWFudGl0eQQCZFMDCQC/AgIFAmRSBQFmBgkBAmFCAQIiaW5pdGlhbCBkZXBvc2l0IHJlcXVpcmVzIGFsbCBjb2lucwMJAAACBQJkUwUCZFMEAmRUCQC2AgEFAmRLBAJkVQkAlgMBCQDMCAIAAAkAzAgCCQCgAwEJALoCAgkAuQICBQJkUgkAuAICCQEKc3FydEJpZ0ludAQJALcCAgUBZAkAugICCQC5AgIFAmRUBQFkBQJkUQASABIFBERPV04FAWQFAWQFA25pbAQCY1ADBQJkeAUDbmlsCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBUwAFAmRPCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBVAIFBmhlaWdodAgFCWxhc3RCbG9jawl0aW1lc3RhbXAFAmRPCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQFXAgkApQgBCQEFdmFsdWUBBQFYCQDYBAEJAQV2YWx1ZQEFAVkJAQJiYgoFAmRGBQJkRwUCZFUFAmRPAAAAAAUGaGVpZ2h0CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAAAAAAFA25pbAQCZFYJAQJicwIJAQFEAgUCZEQFAmFYCQEBRAIFAmRDBQJhVwQCZFcJAQFHAgUCZFYFAWIEAmRYBAJkWQMFAmRBCQCUCgIFAmRGBQJkQwkAlAoCBQJkRwUCZEQEAmRuCAUCZFkCXzEEAmRaCAUCZFkCXzIEAmVhCQCgAwEJALwCAwUCZFIJALYCAQkAaQIFAmRuAAIJALYCAQUCZFoJAGsDCQBlAgUCZFUFAmVhBQFiBQJlYQkAlgoEBQJkVQUCY1AFAmR0BQJkWAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgECZWIFAmVjAmRLAmR3AVgBWQQCZHgJAAACBQFZBQR1bml0BAJlZAkAzAgCAwkAAAIFAmR3BQJhVAYJAQJhQgECEGludmFsaWQgbHAgYXNzZXQFA25pbAMJAAACBQJlZAUCZWQEAmVlAwkAAAIFAmVjBQJhVQYDCQAAAgUCZWMFAmFWBwkBAmFCAQINaW52YWxpZCBhc3NldAQCZWYDBQJlZQkAtgIBCQECYnEBCQECYU0BBQJhVQkAtgIBCQECYnEBCQECYU0BBQJhVgQCZWcJAQJicQEJAQJhTQEFAmFVBAJlaAkBAmJxAQkBAmFNAQUCYVYEAmVpAwUCZWUFAmVnBQJlaAQCZWoJALYCAQUCZWkEAmRSCQC2AgEICQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQUCYVQJAKwCAgkArAICAgZhc3NldCAJANgEAQUCYVQCDiBkb2Vzbid0IGV4aXN0CHF1YW50aXR5BAJlawkAtgIBBQJkSwQCZWwJAJYDAQkAzAgCAAAJAMwIAgkAoAMBCQC6AgIJALkCAgUCZWYJALgCAgUBZAkAdgYJALgCAgUBZAkAugICCQC5AgIFAmVrBQFkBQJkUgASBQFoAAAAEgUERE9XTgUBZAUDbmlsBAJlbQkBAmRzAQUCZWwEAmVuCAUCZW0CXzEEAmR0CAUCZW0CXzIEAmVvAwUCZWUJAJYKBAUCZW4AAAkAZQIFAmVnBQJlbAUCZWgJAJYKBAAABQJlbgUCZWcJAGUCBQJlaAUCZWwEAmVwCAUCZW8CXzEEAmVxCAUCZW8CXzIEAmVyCAUCZW8CXzMEAmVzCAUCZW8CXzQEAmROCQECYnMCCQEBRAIFAmVzBQJhWAkBAUQCBQJlcgUCYVcEAmRPCQEBRwIFAmROBQFiBAJjUAMFAmR4BQNuaWwJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAVoCCQClCAEJAQV2YWx1ZQEFAVgJANgEAQkBBXZhbHVlAQUBWQkBAmJtBgUCZXAFAmVxBQJkSwUCZE8FBmhlaWdodAgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFTAAUCZE8JAMwIAgkBDEludGVnZXJFbnRyeQIJAQFUAgUGaGVpZ2h0CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUCZE8FA25pbAQCZFYJAQJicwIJAQFEAgUCZWgFAmFYCQEBRAIFAmVnBQJhVwQCZFcJAQFHAgUCZFYFAWIEAmRYBAJldAkAaAIJAKADAQkAvAIDBQJlZgUCZWsFAmRSAAIJAGsDCQBlAgUCZW4FAmV0BQFiBQJldAkAlgoEBQJlbgUCY1AFAmR0BQJkWAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgECZXUABAJkcQkAoggBCQEBUQADCQABAgUCZHECBlN0cmluZwQCZXYFAmRxCQDZBAEFAmV2AwkAAQIFAmRxAgRVbml0BQR1bml0CQACAQILTWF0Y2ggZXJyb3IBAmV3AAQCZHEJAKIIAQkBAVIAAwkAAQIFAmRxAgZTdHJpbmcEAmV2BQJkcQkA2QQBBQJldgMJAAECBQJkcQIEVW5pdAUEdW5pdAkAAgECC01hdGNoIGVycm9yAQJleAECZGYEAmV5CQACAQIRUGVybWlzc2lvbiBkZW5pZWQEAmRxCQECZXUAAwkAAQIFAmRxAgpCeXRlVmVjdG9yBAJlegUCZHEDCQAAAggFAmRmD2NhbGxlclB1YmxpY0tleQUCZXoGBQJleQMJAAECBQJkcQIEVW5pdAMJAAACCAUCZGYGY2FsbGVyBQR0aGlzBgUCZXkJAAIBAgtNYXRjaCBlcnJvchoCZGYBCnNldE1hbmFnZXIBAmVBBAJlQgkBAmV4AQUCZGYDCQAAAgUCZUIFAmVCBAJlQwkA2QQBBQJlQQMJAAACBQJlQwUCZUMJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAVIABQJlQQUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmRmAQ5jb25maXJtTWFuYWdlcgAEAmVECQECZXcABAJlRQMJAQlpc0RlZmluZWQBBQJlRAYJAAIBAhJObyBwZW5kaW5nIG1hbmFnZXIDCQAAAgUCZUUFAmVFBAJlRgMJAAACCAUCZGYPY2FsbGVyUHVibGljS2V5CQEFdmFsdWUBBQJlRAYJAAIBAhtZb3UgYXJlIG5vdCBwZW5kaW5nIG1hbmFnZXIDCQAAAgUCZUYFAmVGCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQFRAAkA2AQBCQEFdmFsdWUBBQJlRAkAzAgCCQELRGVsZXRlRW50cnkBCQEBUgAFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJkZgEDcHV0AgJjawJlRwMJAGYCAAAFAmNrCQACAQIgSW52YWxpZCBzbGlwcGFnZVRvbGVyYW5jZSBwYXNzZWQEAmRsCQECZGkDBQJkZgUCY2sGBAJjTQgFAmRsAl8yBAJiUggFAmRsAl83BAJjaQgFAmRsAl85BAJjTggFAmRsA18xMAQCY08IBQJkbANfMTEEAmVICAUCZGwDXzEyBAJlSQgFAmRsA18xMwQCZG8JAPwHBAUCYUQCBGVtaXQJAMwIAgUCY00FA25pbAUDbmlsAwkAAAIFAmRvBQJkbwQCZHAEAmRxBQJkbwMJAAECBQJkcQIHQWRkcmVzcwQCZHIFAmRxCQD8BwQFAmRyAgRlbWl0CQDMCAIFAmNNBQNuaWwFA25pbAUEdW5pdAMJAAACBQJkcAUCZHAEAmVKAwkAZgIFAmNOAAAJAPwHBAUCYmECA3B1dAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQJlSAUCY04FA25pbAUDbmlsAwkAAAIFAmVKBQJlSgQCZUsDCQBmAgUCY08AAAkA/AcEBQJiYQIDcHV0BQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmVJBQJjTwUDbmlsBQNuaWwDCQAAAgUCZUsFAmVLBAJlTAMFAmVHBAJlTQkA/AcEBQJhWgIFc3Rha2UFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCYlIFAmNNBQNuaWwDCQAAAgUCZU0FAmVNBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAmRmBmNhbGxlcgUCY00FAmJSBQNuaWwJAM4IAgUCY2kFAmVMCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmRmAQpwdXRGb3JGcmVlAQJlTgMJAGYCAAAFAmVOCQACAQIUSW52YWxpZCB2YWx1ZSBwYXNzZWQEAmRsCQECZGkDBQJkZgUCZU4HCAUCZGwCXzkCZGYBCXB1dE9uZVRrbgICZU8CZVAEAmVRCgACZVIJAPwHBAUCYUQCKGlzUG9vbE9uZVRva2VuT3BlcmF0aW9uc0Rpc2FibGVkUkVBRE9OTFkJAMwIAgkApQgBBQR0aGlzBQNuaWwFA25pbAMJAAECBQJlUgIHQm9vbGVhbgUCZVIJAAIBCQCsAgIJAAMBBQJlUgIcIGNvdWxkbid0IGJlIGNhc3QgdG8gQm9vbGVhbgQCZVMDAwMJAQJhRgAGCQAAAgUCYVMFAWwGCQAAAgUCYVMFAW4GBQJlUQQCZWQJAMwIAgMJAQEhAQUCZVMGCQECYUIBAiFwdXQgb3BlcmF0aW9uIGlzIGJsb2NrZWQgYnkgYWRtaW4JAMwIAgMJAAACCQCQAwEIBQJkZghwYXltZW50cwABBgkBAmFCAQIeZXhhY3RseSAxIHBheW1lbnQgYXJlIGV4cGVjdGVkBQNuaWwDCQAAAgUCZWQFAmVkBAJlVAkAkQMCCAUCZGYIcGF5bWVudHMAAAQCZHcIBQJlVAdhc3NldElkBAJkdggFAmVUBmFtb3VudAQBWAgFAmRmBmNhbGxlcgQBWQgFAmRmDXRyYW5zYWN0aW9uSWQEAmVVCQECZHUEBQJkdgUCZHcFAVgFAVkEAmVWCAUCZVUCXzEEAmNQCAUCZVUCXzIEAmR0CAUCZVUCXzMEAmVXCAUCZVUCXzQEAmVYAwMJAGYCBQJlTwAACQBmAgUCZU8FAmVWBwkBAmFCAQkAuQkCCQDMCAICH2Ftb3VudCB0byByZWNlaXZlIGlzIGxlc3MgdGhhbiAJAMwIAgkApAMBBQJlTwUDbmlsAgAFAmVWBAJkbwkBAmRtAQUCZVgDCQAAAgUCZG8FAmRvBAJlTAMFAmVQBAJlWQkA/AcEBQJhWgIFc3Rha2UFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCYVQFAmVYBQNuaWwDCQAAAgUCZVkFAmVZBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAmRmBmNhbGxlcgUCZVgFAmFUBQNuaWwEAmVaAwkAZgIFAmR0AAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUCYUUFAmR0BQJkdwUDbmlsBQNuaWwJAJQKAgkAzggCCQDOCAIFAmNQBQJlTAUCZVoFAmVYCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmRmARFwdXRPbmVUa25SRUFET05MWQICZHcCZHYEAmZhCQECZHUEBQJkdgkBAmFLAQUCZHcFBHVuaXQFBHVuaXQEAmVWCAUCZmECXzEEAmNQCAUCZmECXzIEAmR0CAUCZmECXzMEAmVXCAUCZmECXzQJAJQKAgUDbmlsCQCVCgMFAmVWBQJkdAUCZVcCZGYBCWdldE9uZVRrbgICZmICZU8EAmVRCgACZVIJAPwHBAUCYUQCKGlzUG9vbE9uZVRva2VuT3BlcmF0aW9uc0Rpc2FibGVkUkVBRE9OTFkJAMwIAgkApQgBBQR0aGlzBQNuaWwFA25pbAMJAAECBQJlUgIHQm9vbGVhbgUCZVIJAAIBCQCsAgIJAAMBBQJlUgIcIGNvdWxkbid0IGJlIGNhc3QgdG8gQm9vbGVhbgQCZmMDAwkBAmFGAAYJAAACBQJhUwUBbgYFAmVRBAJlZAkAzAgCAwkBASEBBQJmYwYJAQJhQgECIWdldCBvcGVyYXRpb24gaXMgYmxvY2tlZCBieSBhZG1pbgkAzAgCAwkAAAIJAJADAQgFAmRmCHBheW1lbnRzAAEGCQECYUIBAh5leGFjdGx5IDEgcGF5bWVudCBhcmUgZXhwZWN0ZWQFA25pbAMJAAACBQJlZAUCZWQEAmVjCQECYUsBBQJmYgQCZVQJAJEDAggFAmRmCHBheW1lbnRzAAAEAmR3CAUCZVQHYXNzZXRJZAQCZEsIBQJlVAZhbW91bnQEAVgIBQJkZgZjYWxsZXIEAVkIBQJkZg10cmFuc2FjdGlvbklkBAJmZAkBAmViBQUCZWMFAmRLBQJkdwUBWAUBWQQCZmUIBQJmZAJfMQQCY1AIBQJmZAJfMgQCZHQIBQJmZAJfMwQCZVcIBQJmZAJfNAQCZG4DAwkAZgIFAmVPAAAJAGYCBQJlTwUCZmUHCQECYUIBCQC5CQIJAMwIAgIfYW1vdW50IHRvIHJlY2VpdmUgaXMgbGVzcyB0aGFuIAkAzAgCCQCkAwEFAmVPBQNuaWwCAAUCZmUEAmZmCQD8BwQFAmFEAgRidXJuCQDMCAIFAmRLBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmR3BQJkSwUDbmlsAwkAAAIFAmZmBQJmZgQCZmcJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUBWAUCZG4FAmVjBQNuaWwEAmVaAwkAZgIFAmR0AAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUCYUUFAmR0BQJlYwUDbmlsBQNuaWwJAJQKAgkAzggCCQDOCAIFAmNQBQJmZwUCZVoFAmRuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmRmARFnZXRPbmVUa25SRUFET05MWQICZWMCZEsEAmZoCQECZWIFCQECYUsBBQJlYwUCZEsFAmFUBQR1bml0BQR1bml0BAJmZQgFAmZoAl8xBAJjUAgFAmZoAl8yBAJkdAgFAmZoAl8zBAJlVwgFAmZoAl80CQCUCgIFA25pbAkAlQoDBQJmZQUCZHQFAmVXAmRmARN1bnN0YWtlQW5kR2V0T25lVGtuAwJmaQJmYgJlTwQCZVEKAAJlUgkA/AcEBQJhRAIoaXNQb29sT25lVG9rZW5PcGVyYXRpb25zRGlzYWJsZWRSRUFET05MWQkAzAgCCQClCAEFBHRoaXMFA25pbAUDbmlsAwkAAQIFAmVSAgdCb29sZWFuBQJlUgkAAgEJAKwCAgkAAwEFAmVSAhwgY291bGRuJ3QgYmUgY2FzdCB0byBCb29sZWFuBAJmYwMDCQECYUYABgkAAAIFAmFTBQFuBgUCZVEEAmVkCQDMCAIDCQEBIQEFAmZjBgkBAmFCAQIhZ2V0IG9wZXJhdGlvbiBpcyBibG9ja2VkIGJ5IGFkbWluCQDMCAIDCQAAAgkAkAMBCAUCZGYIcGF5bWVudHMAAAYJAQJhQgECGG5vIHBheW1lbnRzIGFyZSBleHBlY3RlZAUDbmlsAwkAAAIFAmVkBQJlZAQCZWMJAQJhSwEFAmZiBAFYCAUCZGYGY2FsbGVyBAFZCAUCZGYNdHJhbnNhY3Rpb25JZAQCZmoJAPwHBAUCYVoCB3Vuc3Rha2UJAMwIAgkA2AQBBQJhVAkAzAgCBQJmaQUDbmlsBQNuaWwDCQAAAgUCZmoFAmZqBAJmawkBAmViBQUCZWMFAmZpBQJhVAUBWAUBWQQCZmUIBQJmawJfMQQCY1AIBQJmawJfMgQCZHQIBQJmawJfMwQCZVcIBQJmawJfNAQCZG4DAwkAZgIFAmVPAAAJAGYCBQJlTwUCZmUHCQECYUIBCQC5CQIJAMwIAgIfYW1vdW50IHRvIHJlY2VpdmUgaXMgbGVzcyB0aGFuIAkAzAgCCQCkAwEFAmVPBQNuaWwCAAUCZmUEAmZmCQD8BwQFAmFEAgRidXJuCQDMCAIFAmZpBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmFUBQJmaQUDbmlsAwkAAAIFAmZmBQJmZgQCZmcJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAmRmBmNhbGxlcgUCZG4FAmVjBQNuaWwEAmVaAwkAZgIFAmR0AAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUCYUUFAmR0BQJlYwUDbmlsBQNuaWwJAJQKAgkAzggCCQDOCAIFAmNQBQJmZwUCZVoFAmRuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmRmAQNnZXQABAJjQQkBAmRlAQUCZGYEAmZsCAUCY0ECXzEEAmNoCAUCY0ECXzIEAmRoCAUCY0ECXzMEAmJQCAUCY0ECXzQEAmNpCAUCY0ECXzUEAmZtCQD8BwQFAmFEAgRidXJuCQDMCAIFAmRoBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmJQBQJkaAUDbmlsAwkAAAIFAmZtBQJmbQUCY2kJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZGYBCWdldE5vTGVzcwICZm4CZm8EAmNBCQECZGUBBQJkZgQCY2cIBQJjQQJfMQQCY2gIBQJjQQJfMgQCZGgIBQJjQQJfMwQCYlAIBQJjQQJfNAQCY2kIBQJjQQJfNQMJAGYCBQJmbgUCY2cJAAIBCQCsAgIJAKwCAgkArAICAhxub0xlc3NUaGVuQW10QXNzZXQgZmFpbGVkOiAgCQCkAwEFAmNnAgMgPCAJAKQDAQUCZm4DCQBmAgUCZm8FAmNoCQACAQkArAICCQCsAgIJAKwCAgIdbm9MZXNzVGhlblByaWNlQXNzZXQgZmFpbGVkOiAJAKQDAQUCY2gCAyA8IAkApAMBBQJmbwQCZm0JAPwHBAUCYUQCBGJ1cm4JAMwIAgUCZGgFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCYlAFAmRoBQNuaWwDCQAAAgUCZm0FAmZtBQJjaQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJkZgENdW5zdGFrZUFuZEdldAECZG4EAmZwAwkBAiE9AgkAkAMBCAUCZGYIcGF5bWVudHMAAAkAAgECGE5vIHBheW1lbnRzIGFyZSBleHBlY3RlZAYDCQAAAgUCZnAFAmZwBAJiRQkBAmFIAAQCYlIJANkEAQkAkQMCBQJiRQUBcQQCZmoJAPwHBAUCYVoCB3Vuc3Rha2UJAMwIAgkA2AQBBQJiUgkAzAgCBQJkbgUDbmlsBQNuaWwDCQAAAgUCZmoFAmZqBAJjQQkBAmJOBAkA2AQBCAUCZGYNdHJhbnNhY3Rpb25JZAkA2AQBBQJiUgUCZG4IBQJkZgZjYWxsZXIEAmJVCQENcGFyc2VJbnRWYWx1ZQEIBQJjQQJfOQQCY2kIBQJjQQNfMTAEAmZxAwMJAQJhRgAGCQAAAgUCYlUFAW4JAAIBCQCsAgICLEdldCBvcGVyYXRpb24gaXMgYmxvY2tlZCBieSBhZG1pbi4gU3RhdHVzID0gCQCkAwEFAmJVBgMJAAACBQJmcQUCZnEEAmZtCQD8BwQFAmFEAgRidXJuCQDMCAIFAmRuBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmJSBQJkbgUDbmlsAwkAAAIFAmZtBQJmbQUCY2kJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZGYBE3Vuc3Rha2VBbmRHZXROb0xlc3MDAmZpAmZyAmZvBAJmYwMJAQJhRgAGCQAAAgUCYVMFAW4EAmVkCQDMCAIDCQEBIQEFAmZjBgkAAgECIWdldCBvcGVyYXRpb24gaXMgYmxvY2tlZCBieSBhZG1pbgkAzAgCAwkAAAIJAJADAQgFAmRmCHBheW1lbnRzAAAGCQACAQIYbm8gcGF5bWVudHMgYXJlIGV4cGVjdGVkBQNuaWwDCQAAAgUCZWQFAmVkBAJmagkA/AcEBQJhWgIHdW5zdGFrZQkAzAgCCQDYBAEFAmFUCQDMCAIFAmZpBQNuaWwFA25pbAMJAAACBQJmagUCZmoEAmNBCQECYk4ECQDYBAEIBQJkZg10cmFuc2FjdGlvbklkCQDYBAEFAmFUBQJmaQgFAmRmBmNhbGxlcgQCY2cIBQJjQQJfMQQCY2gIBQJjQQJfMgQCY2kIBQJjQQNfMTAEAmZzCQDMCAIDCQBnAgUCY2cFAmZyBgkAAgEJALkJAgkAzAgCAixhbW91bnQgYXNzZXQgYW1vdW50IHRvIHJlY2VpdmUgaXMgbGVzcyB0aGFuIAkAzAgCCQCkAwEFAmZyBQNuaWwCAAkAzAgCAwkAZwIFAmNoBQJmbwYJAAIBCQC5CQIJAMwIAgIrcHJpY2UgYXNzZXQgYW1vdW50IHRvIHJlY2VpdmUgaXMgbGVzcyB0aGFuIAkAzAgCCQCkAwEFAmZvBQNuaWwCAAUDbmlsAwkAAAIFAmZzBQJmcwQCZm0JAPwHBAUCYUQCBGJ1cm4JAMwIAgUCZmkFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCYVQFAmZpBQNuaWwDCQAAAgUCZm0FAmZtBQJjaQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJkZgEIYWN0aXZhdGUCAmZ0AmZ1AwkBAiE9AgkApQgBCAUCZGYGY2FsbGVyCQClCAEFAmFECQACAQIScGVybWlzc2lvbnMgZGVuaWVkCQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAmFhAAUCZnQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAmFiAAUCZnUFA25pbAIHc3VjY2VzcwJkZgEcZ2V0UG9vbENvbmZpZ1dyYXBwZXJSRUFET05MWQAJAJQKAgUDbmlsCQECYUgAAmRmARxnZXRBY2NCYWxhbmNlV3JhcHBlclJFQURPTkxZAQJicgkAlAoCBQNuaWwJAQJicQEFAmJyAmRmARljYWxjUHJpY2VzV3JhcHBlclJFQURPTkxZAwJieQJiegJiRAQCYk0JAQJiQwMFAmJ5BQJiegUCYkQJAJQKAgUDbmlsCQDMCAIJAKYDAQkAkQMCBQJiTQAACQDMCAIJAKYDAQkAkQMCBQJiTQABCQDMCAIJAKYDAQkAkQMCBQJiTQACBQNuaWwCZGYBFHRvWDE4V3JhcHBlclJFQURPTkxZAgFFAUYJAJQKAgUDbmlsCQCmAwEJAQFEAgUBRQUBRgJkZgEWZnJvbVgxOFdyYXBwZXJSRUFET05MWQIBSAFJCQCUCgIFA25pbAkBAUcCCQCnAwEFAUgFAUkCZGYBHmNhbGNQcmljZUJpZ0ludFdyYXBwZXJSRUFET05MWQICYnQCYnUJAJQKAgUDbmlsCQCmAwEJAQJicwIJAKcDAQUCYnQJAKcDAQUCYnUCZGYBI2VzdGltYXRlUHV0T3BlcmF0aW9uV3JhcHBlclJFQURPTkxZCQJiTwJjawJjbAJjbQJjbgJjbwFYAmNwAmNxCQCUCgIFA25pbAkBAmNqCQUCYk8FAmNrBQJjbAUCY20FAmNuBQJjbwUBWAUCY3AFAmNxAmRmASNlc3RpbWF0ZUdldE9wZXJhdGlvbldyYXBwZXJSRUFET05MWQQCYk8CYlACYlEBWAQCY0EJAQJiTgQFAmJPBQJiUAUCYlEJARFAZXh0ck5hdGl2ZSgxMDYyKQEFAVgJAJQKAgUDbmlsCQCcCgoIBQJjQQJfMQgFAmNBAl8yCAUCY0ECXzMIBQJjQQJfNAgFAmNBAl81CAUCY0ECXzYIBQJjQQJfNwkApgMBCAUCY0ECXzgIBQJjQQJfOQgFAmNBA18xMAJkZgENc3RhdHNSRUFET05MWQAEAmJFCQECYUgABAJiUgkA2QQBCQCRAwIFAmJFBQFxBAJjUwkAkQMCBQJiRQUBcgQCY1QJAJEDAgUCYkUFAXMEAmN0CQCRAwIFAmJFBQF2BAJjdQkAkQMCBQJiRQUBdwQCYkYJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJiRQUBdAQCYkcJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJiRQUBdQQCZnYICQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQUCYlIJAKwCAgkArAICAgZBc3NldCAJANgEAQUCYlICDiBkb2Vzbid0IGV4aXN0CHF1YW50aXR5BAJjVQkBAmJxAQUCY1MEAmNWCQECYnEBBQJjVAQCZncDCQAAAgUCZnYAAAkAzAgCBQFlCQDMCAIFAWUJAMwIAgUBZQUDbmlsCQECYkMDBQJjVQUCY1YFAmZ2BAJjYgAABAJmeAkBAUcCCQCRAwIFAmZ3AAEFAWIEAmZ5CQEBRwIJAJEDAgUCZncAAgUBYgQCZnoJAQV2YWx1ZQEJAJoIAgUCYUQJAQJhcAEJAKUIAQUEdGhpcwkAlAoCBQNuaWwJALkJAgkAzAgCAg4lZCVkJWQlZCVkJWQlZAkAzAgCCQCkAwEFAmNVCQDMCAIJAKQDAQUCY1YJAMwIAgkApAMBBQJmdgkAzAgCCQCkAwEFAmNiCQDMCAIJAKQDAQUCZngJAMwIAgkApAMBBQJmeQkAzAgCCQCkAwEFAmZ6BQNuaWwFAWoCZGYBIGV2YWx1YXRlUHV0QnlBbW91bnRBc3NldFJFQURPTkxZAQJjbAQCYkUJAQJhSAAEAmJSCQDZBAEJAJEDAgUCYkUFAXEEAmNyCQCRAwIFAmJFBQFyBAJiUwkA2QQBBQJjcgQCY3MJAJEDAgUCYkUFAXMEAmJUCQDZBAEFAmNzBAJiRgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmJFBQF0BAJiRwkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmJFBQF1BAJiVQkAkQMCBQJiRQUBcAQCZnYICQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQUCYlIJAKwCAgkArAICAgZBc3NldCAJANgEAQUCYlICDiBkb2Vzbid0IGV4aXN0CHF1YW50aXR5BAJjVQkBAmJxAQUCY3IEAmNWCQECYnEBBQJjcwQCYkEJAQFEAgUCY1UFAmJGBAJiQgkBAUQCBQJjVgUCYkcEAmNhAwkAAAIFAmZ2AAAFAWUJAQJicwIFAmJCBQJiQQQCY3gJAQFEAgUCY2wFAmJGBAJjeQkAvAIDBQJjeAUCY2EFAWQEAmNuCQEBRwIFAmN5BQJiRwQCZGwJAQJjagkCAACgwh4FAmNsBQJiUwUCY24FAmJUAgAGBwQCY0kIBQJkbAJfMQQCZkEIBQJkbAJfMwQCYlcIBQJkbAJfNAQCYlkIBQJkbAJfNQQCYlYIBQJkbAJfNgkAlAoCBQNuaWwJALkJAgkAzAgCAhAlZCVkJWQlZCVkJWQlZCVkCQDMCAIJAKQDAQUCY0kJAMwIAgkApAMBCQEBRwIFAmNhBQFiCQDMCAIJAKQDAQUCYlcJAMwIAgkApAMBBQJiWQkAzAgCCQCkAwEFAmJWCQDMCAIFAmJVCQDMCAIJAKQDAQUCY2wJAMwIAgkApAMBBQJjbgUDbmlsBQFqAmRmAR9ldmFsdWF0ZVB1dEJ5UHJpY2VBc3NldFJFQURPTkxZAQJjbgQCYkUJAQJhSAAEAmJSCQDZBAEJAJEDAgUCYkUFAXEEAmNyCQCRAwIFAmJFBQFyBAJiUwkA2QQBBQJjcgQCY3MJAJEDAgUCYkUFAXMEAmJUCQDZBAEFAmNzBAJiRgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmJFBQF0BAJiRwkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmJFBQF1BAJiVQkAkQMCBQJiRQUBcAQCZnYICQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQUCYlIJAKwCAgkArAICAgZBc3NldCAJANgEAQUCYlICDiBkb2Vzbid0IGV4aXN0CHF1YW50aXR5BAJmQgkBAmJxAQUCY3IEAmZDCQECYnEBBQJjcwQCZkQJAQFEAgUCZkIFAmJGBAJmRQkBAUQCBQJmQwUCYkcEAmNhAwkAAAIFAmZ2AAAFAWUJAQJicwIFAmZFBQJmRAQCY3kJAQFEAgUCY24FAmJHBAJjeAkAvAIDBQJjeQUBZAUCY2EEAmNsCQEBRwIFAmN4BQJiRgQCZGwJAQJjagkCAACgwh4FAmNsBQJiUwUCY24FAmJUAgAGBwQCY0kIBQJkbAJfMQQCZkEIBQJkbAJfMwQCYlcIBQJkbAJfNAQCYlkIBQJkbAJfNQQCYlYIBQJkbAJfNgkAlAoCBQNuaWwJALkJAgkAzAgCAhAlZCVkJWQlZCVkJWQlZCVkCQDMCAIJAKQDAQUCY0kJAMwIAgkApAMBCQEBRwIFAmNhBQFiCQDMCAIJAKQDAQUCYlcJAMwIAgkApAMBBQJiWQkAzAgCCQCkAwEFAmJWCQDMCAIFAmJVCQDMCAIJAKQDAQUCY2wJAMwIAgkApAMBBQJjbgUDbmlsBQFqAmRmARNldmFsdWF0ZUdldFJFQURPTkxZAgJmRgJmRwQCY0EJAQJiTgQCAAUCZkYFAmZHBQR0aGlzBAJjZwgFAmNBAl8xBAJjaAgFAmNBAl8yBAJiVwgFAmNBAl81BAJiWQgFAmNBAl82BAJiVggFAmNBAl83BAJjYggFAmNBAl84BAJiVQkBDXBhcnNlSW50VmFsdWUBCAUCY0ECXzkJAJQKAgUDbmlsCQC5CQIJAMwIAgIOJWQlZCVkJWQlZCVkJWQJAMwIAgkApAMBBQJjZwkAzAgCCQCkAwEFAmNoCQDMCAIJAKQDAQUCYlcJAMwIAgkApAMBBQJiWQkAzAgCCQCkAwEFAmJWCQDMCAIJAKYDAQUCY2IJAMwIAgkApAMBBQJiVQUDbmlsBQFqAQJmSAECZkkABAJmSgQCZHEJAQJldQADCQABAgUCZHECCkJ5dGVWZWN0b3IEAmV6BQJkcQUCZXoDCQABAgUCZHECBFVuaXQIBQJmSA9zZW5kZXJQdWJsaWNLZXkJAAIBAgtNYXRjaCBlcnJvcgQCZHEFAmZIAwkAAQIFAmRxAgVPcmRlcgQCY1IFAmRxBAJmSwkBAmFHAAQCYXUJAQJjUQEFAmNSBAJhdgkA9AMDCAUCY1IJYm9keUJ5dGVzCQCRAwIIBQJjUgZwcm9vZnMAAAgFAmNSD3NlbmRlclB1YmxpY0tleQQCYXcJAPQDAwgFAmNSCWJvZHlCeXRlcwkAkQMCCAUCY1IGcHJvb2ZzAAEFAmZLAwMDBQJhdQUCYXYHBQJhdwcGCQECYXQDBQJhdQUCYXYFAmF3AwkAAQIFAmRxAhRTZXRTY3JpcHRUcmFuc2FjdGlvbgQCZXYFAmRxBAJmTAkA9gMBCQEFdmFsdWUBCAUCZXYGc2NyaXB0BAJmTQkA2wQBCQEFdmFsdWUBCQCdCAIFAmFECQECYXIABAJmTgkA8QcBBQR0aGlzAwMJAAACBQJmTQUCZkwJAQIhPQIFAmZOBQJmTAcGCQD0AwMIBQJmSAlib2R5Qnl0ZXMJAJEDAggFAmZIBnByb29mcwAABQJmSgkA9AMDCAUCZkgJYm9keUJ5dGVzCQCRAwIIBQJmSAZwcm9vZnMAAAUCZkrGvHs8", "chainId": 87, "height": 3372236, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: G8dpwx2E4j6WXWcv87w82Qa77EdqfEhX4khqaHEw7TSg Next: Eun4LS2bMmtSA1JerGAFTM7LTWGMJD5yT1Hk3dEbL377 Diff:
OldNewDifferences
515515 else [IntegerEntry(S(), dO), IntegerEntry(T(height, lastBlock.timestamp), dO), StringEntry(W(toString(value(X)), toBase58String(value(Y))), bb(dF, dG, dU, dO, 0, 0, height, lastBlock.timestamp, 0, 0))]
516516 let dV = bs(D(dD, aX), D(dC, aW))
517517 let dW = G(dV, b)
518- let dX = N((((dO - dW) * b) / dW))
518+ let dX = {
519+ let dY = if (dA)
520+ then $Tuple2(dF, dC)
521+ else $Tuple2(dG, dD)
522+ let dn = dY._1
523+ let dZ = dY._2
524+ let ea = toInt(fraction(dR, toBigInt((dn / 2)), toBigInt(dZ)))
525+ fraction((dU - ea), b, ea)
526+ }
519527 $Tuple4(dU, cP, dt, dX)
520528 }
521529 else throw("Strict value is not equal to itself.")
522530 }
523531
524532
525-func dY (dZ,dK,dw,X,Y) = {
533+func eb (ec,dK,dw,X,Y) = {
526534 let dx = (Y == unit)
527- let ea = [if ((dw == aT))
535+ let ed = [if ((dw == aT))
528536 then true
529537 else aB("invalid lp asset")]
530- if ((ea == ea))
538+ if ((ed == ed))
531539 then {
532- let eb = if ((dZ == aU))
540+ let ee = if ((ec == aU))
533541 then true
534- else if ((dZ == aV))
542+ else if ((ec == aV))
535543 then false
536544 else aB("invalid asset")
537- let ec = if (eb)
545+ let ef = if (ee)
538546 then toBigInt(bq(aM(aU)))
539547 else toBigInt(bq(aM(aV)))
540- let ed = bq(aM(aU))
541- let ee = bq(aM(aV))
542- let ef = if (eb)
543- then ed
544- else ee
545- let eg = toBigInt(ef)
548+ let eg = bq(aM(aU))
549+ let eh = bq(aM(aV))
550+ let ei = if (ee)
551+ then eg
552+ else eh
553+ let ej = toBigInt(ei)
546554 let dR = toBigInt(valueOrErrorMessage(assetInfo(aT), (("asset " + toBase58String(aT)) + " doesn't exist")).quantity)
547- let eh = toBigInt(dK)
548- let ei = max([0, toInt(((ec * (d - pow((d - ((eh * d) / dR)), 18, h, 0, 18, DOWN))) / d))])
549- let ej = ds(ei)
550- let ek = ej._1
551- let dt = ej._2
552- let el = if (eb)
553- then $Tuple4(ek, 0, (ed - ei), ee)
554- else $Tuple4(0, ek, ed, (ee - ei))
555- let em = el._1
556- let en = el._2
557- let eo = el._3
558- let ep = el._4
559- let dN = bs(D(ep, aX), D(eo, aW))
555+ let ek = toBigInt(dK)
556+ let el = max([0, toInt(((ef * (d - pow((d - ((ek * d) / dR)), 18, h, 0, 18, DOWN))) / d))])
557+ let em = ds(el)
558+ let en = em._1
559+ let dt = em._2
560+ let eo = if (ee)
561+ then $Tuple4(en, 0, (eg - el), eh)
562+ else $Tuple4(0, en, eg, (eh - el))
563+ let ep = eo._1
564+ let eq = eo._2
565+ let er = eo._3
566+ let es = eo._4
567+ let dN = bs(D(es, aX), D(er, aW))
560568 let dO = G(dN, b)
561569 let cP = if (dx)
562570 then nil
563- else [StringEntry(Z(toString(value(X)), toBase58String(value(Y))), bm(em, en, dK, dO, height, lastBlock.timestamp)), IntegerEntry(S(), dO), IntegerEntry(T(height, lastBlock.timestamp), dO)]
564- let dV = bs(D(ee, aX), D(ed, aW))
571+ else [StringEntry(Z(toString(value(X)), toBase58String(value(Y))), bm(ep, eq, dK, dO, height, lastBlock.timestamp)), IntegerEntry(S(), dO), IntegerEntry(T(height, lastBlock.timestamp), dO)]
572+ let dV = bs(D(eh, aX), D(eg, aW))
565573 let dW = G(dV, b)
566- let dX = N((((dO - dW) * b) / dW))
567- $Tuple4(ek, cP, dt, dX)
574+ let dX = {
575+ let et = (toInt(fraction(ef, ek, dR)) * 2)
576+ fraction((en - et), b, et)
577+ }
578+ $Tuple4(en, cP, dt, dX)
568579 }
569580 else throw("Strict value is not equal to itself.")
570581 }
571582
572583
573-func eq () = {
584+func eu () = {
574585 let dq = getString(Q())
575586 if ($isInstanceOf(dq, "String"))
576587 then {
577- let er = dq
578- fromBase58String(er)
588+ let ev = dq
589+ fromBase58String(ev)
579590 }
580591 else if ($isInstanceOf(dq, "Unit"))
581592 then unit
583594 }
584595
585596
586-func es () = {
597+func ew () = {
587598 let dq = getString(R())
588599 if ($isInstanceOf(dq, "String"))
589600 then {
590- let er = dq
591- fromBase58String(er)
601+ let ev = dq
602+ fromBase58String(ev)
592603 }
593604 else if ($isInstanceOf(dq, "Unit"))
594605 then unit
596607 }
597608
598609
599-func et (df) = {
600- let eu = throw("Permission denied")
601- let dq = eq()
610+func ex (df) = {
611+ let ey = throw("Permission denied")
612+ let dq = eu()
602613 if ($isInstanceOf(dq, "ByteVector"))
603614 then {
604- let ev = dq
605- if ((df.callerPublicKey == ev))
615+ let ez = dq
616+ if ((df.callerPublicKey == ez))
606617 then true
607- else eu
618+ else ey
608619 }
609620 else if ($isInstanceOf(dq, "Unit"))
610621 then if ((df.caller == this))
611622 then true
612- else eu
623+ else ey
613624 else throw("Match error")
614625 }
615626
616627
617628 @Callable(df)
618-func setManager (ew) = {
619- let ex = et(df)
620- if ((ex == ex))
629+func setManager (eA) = {
630+ let eB = ex(df)
631+ if ((eB == eB))
621632 then {
622- let ey = fromBase58String(ew)
623- if ((ey == ey))
624- then [StringEntry(R(), ew)]
633+ let eC = fromBase58String(eA)
634+ if ((eC == eC))
635+ then [StringEntry(R(), eA)]
625636 else throw("Strict value is not equal to itself.")
626637 }
627638 else throw("Strict value is not equal to itself.")
631642
632643 @Callable(df)
633644 func confirmManager () = {
634- let ez = es()
635- let eA = if (isDefined(ez))
645+ let eD = ew()
646+ let eE = if (isDefined(eD))
636647 then true
637648 else throw("No pending manager")
638- if ((eA == eA))
649+ if ((eE == eE))
639650 then {
640- let eB = if ((df.callerPublicKey == value(ez)))
651+ let eF = if ((df.callerPublicKey == value(eD)))
641652 then true
642653 else throw("You are not pending manager")
643- if ((eB == eB))
644- then [StringEntry(Q(), toBase58String(value(ez))), DeleteEntry(R())]
654+ if ((eF == eF))
655+ then [StringEntry(Q(), toBase58String(value(eD))), DeleteEntry(R())]
645656 else throw("Strict value is not equal to itself.")
646657 }
647658 else throw("Strict value is not equal to itself.")
650661
651662
652663 @Callable(df)
653-func put (ck,eC) = if ((0 > ck))
664+func put (ck,eG) = if ((0 > ck))
654665 then throw("Invalid slippageTolerance passed")
655666 else {
656667 let dl = di(df, ck, true)
659670 let ci = dl._9
660671 let cN = dl._10
661672 let cO = dl._11
662- let eD = dl._12
663- let eE = dl._13
673+ let eH = dl._12
674+ let eI = dl._13
664675 let do = invoke(aD, "emit", [cM], nil)
665676 if ((do == do))
666677 then {
675686 }
676687 if ((dp == dp))
677688 then {
678- let eF = if ((cN > 0))
679- then invoke(ba, "put", nil, [AttachedPayment(eD, cN)])
689+ let eJ = if ((cN > 0))
690+ then invoke(ba, "put", nil, [AttachedPayment(eH, cN)])
680691 else nil
681- if ((eF == eF))
692+ if ((eJ == eJ))
682693 then {
683- let eG = if ((cO > 0))
684- then invoke(ba, "put", nil, [AttachedPayment(eE, cO)])
694+ let eK = if ((cO > 0))
695+ then invoke(ba, "put", nil, [AttachedPayment(eI, cO)])
685696 else nil
686- if ((eG == eG))
697+ if ((eK == eK))
687698 then {
688- let eH = if (eC)
699+ let eL = if (eG)
689700 then {
690- let eI = invoke(aZ, "stake", nil, [AttachedPayment(bR, cM)])
691- if ((eI == eI))
701+ let eM = invoke(aZ, "stake", nil, [AttachedPayment(bR, cM)])
702+ if ((eM == eM))
692703 then nil
693704 else throw("Strict value is not equal to itself.")
694705 }
695706 else [ScriptTransfer(df.caller, cM, bR)]
696- (ci ++ eH)
707+ (ci ++ eL)
697708 }
698709 else throw("Strict value is not equal to itself.")
699710 }
707718
708719
709720 @Callable(df)
710-func putForFree (eJ) = if ((0 > eJ))
721+func putForFree (eN) = if ((0 > eN))
711722 then throw("Invalid value passed")
712723 else {
713- let dl = di(df, eJ, false)
724+ let dl = di(df, eN, false)
714725 dl._9
715726 }
716727
717728
718729
719730 @Callable(df)
720-func putOneTkn (eK,eL) = {
721- let eM = {
722- let eN = invoke(aD, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
723- if ($isInstanceOf(eN, "Boolean"))
724- then eN
725- else throw(($getType(eN) + " couldn't be cast to Boolean"))
731+func putOneTkn (eO,eP) = {
732+ let eQ = {
733+ let eR = invoke(aD, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
734+ if ($isInstanceOf(eR, "Boolean"))
735+ then eR
736+ else throw(($getType(eR) + " couldn't be cast to Boolean"))
726737 }
727- let eO = if (if (if (aF())
738+ let eS = if (if (if (aF())
728739 then true
729740 else (aS == l))
730741 then true
731742 else (aS == n))
732743 then true
733- else eM
734- let ea = [if (!(eO))
744+ else eQ
745+ let ed = [if (!(eS))
735746 then true
736747 else aB("put operation is blocked by admin"), if ((size(df.payments) == 1))
737748 then true
738749 else aB("exactly 1 payment are expected")]
739- if ((ea == ea))
750+ if ((ed == ed))
740751 then {
741- let eP = df.payments[0]
742- let dw = eP.assetId
743- let dv = eP.amount
752+ let eT = df.payments[0]
753+ let dw = eT.assetId
754+ let dv = eT.amount
744755 let X = df.caller
745756 let Y = df.transactionId
746- let eQ = du(dv, dw, X, Y)
747- let eR = eQ._1
748- let cP = eQ._2
749- let dt = eQ._3
750- let eS = eQ._4
751- let eT = if (if ((eK > 0))
752- then (eK > eR)
757+ let eU = du(dv, dw, X, Y)
758+ let eV = eU._1
759+ let cP = eU._2
760+ let dt = eU._3
761+ let eW = eU._4
762+ let eX = if (if ((eO > 0))
763+ then (eO > eV)
753764 else false)
754- then aB(makeString(["amount to receive is less than ", toString(eK)], ""))
755- else eR
756- let do = dm(eT)
765+ then aB(makeString(["amount to receive is less than ", toString(eO)], ""))
766+ else eV
767+ let do = dm(eX)
757768 if ((do == do))
758769 then {
759- let eH = if (eL)
770+ let eL = if (eP)
760771 then {
761- let eU = invoke(aZ, "stake", nil, [AttachedPayment(aT, eT)])
762- if ((eU == eU))
772+ let eY = invoke(aZ, "stake", nil, [AttachedPayment(aT, eX)])
773+ if ((eY == eY))
763774 then nil
764775 else throw("Strict value is not equal to itself.")
765776 }
766- else [ScriptTransfer(df.caller, eT, aT)]
767- let eV = if ((dt > 0))
777+ else [ScriptTransfer(df.caller, eX, aT)]
778+ let eZ = if ((dt > 0))
768779 then [ScriptTransfer(aE, dt, dw)]
769780 else nil
770- $Tuple2(((cP ++ eH) ++ eV), eT)
781+ $Tuple2(((cP ++ eL) ++ eZ), eX)
771782 }
772783 else throw("Strict value is not equal to itself.")
773784 }
778789
779790 @Callable(df)
780791 func putOneTknREADONLY (dw,dv) = {
781- let eW = du(dv, aK(dw), unit, unit)
782- let eR = eW._1
783- let cP = eW._2
784- let dt = eW._3
785- let eS = eW._4
786- $Tuple2(nil, $Tuple3(eR, dt, eS))
792+ let fa = du(dv, aK(dw), unit, unit)
793+ let eV = fa._1
794+ let cP = fa._2
795+ let dt = fa._3
796+ let eW = fa._4
797+ $Tuple2(nil, $Tuple3(eV, dt, eW))
787798 }
788799
789800
790801
791802 @Callable(df)
792-func getOneTkn (eX,eK) = {
793- let eM = {
794- let eN = invoke(aD, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
795- if ($isInstanceOf(eN, "Boolean"))
796- then eN
797- else throw(($getType(eN) + " couldn't be cast to Boolean"))
803+func getOneTkn (fb,eO) = {
804+ let eQ = {
805+ let eR = invoke(aD, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
806+ if ($isInstanceOf(eR, "Boolean"))
807+ then eR
808+ else throw(($getType(eR) + " couldn't be cast to Boolean"))
798809 }
799- let eY = if (if (aF())
810+ let fc = if (if (aF())
800811 then true
801812 else (aS == n))
802813 then true
803- else eM
804- let ea = [if (!(eY))
814+ else eQ
815+ let ed = [if (!(fc))
805816 then true
806817 else aB("get operation is blocked by admin"), if ((size(df.payments) == 1))
807818 then true
808819 else aB("exactly 1 payment are expected")]
809- if ((ea == ea))
820+ if ((ed == ed))
810821 then {
811- let dZ = aK(eX)
812- let eP = df.payments[0]
813- let dw = eP.assetId
814- let dK = eP.amount
822+ let ec = aK(fb)
823+ let eT = df.payments[0]
824+ let dw = eT.assetId
825+ let dK = eT.amount
815826 let X = df.caller
816827 let Y = df.transactionId
817- let eZ = dY(dZ, dK, dw, X, Y)
818- let fa = eZ._1
819- let cP = eZ._2
820- let dt = eZ._3
821- let eS = eZ._4
822- let dn = if (if ((eK > 0))
823- then (eK > fa)
828+ let fd = eb(ec, dK, dw, X, Y)
829+ let fe = fd._1
830+ let cP = fd._2
831+ let dt = fd._3
832+ let eW = fd._4
833+ let dn = if (if ((eO > 0))
834+ then (eO > fe)
824835 else false)
825- then aB(makeString(["amount to receive is less than ", toString(eK)], ""))
826- else fa
827- let fb = invoke(aD, "burn", [dK], [AttachedPayment(dw, dK)])
828- if ((fb == fb))
836+ then aB(makeString(["amount to receive is less than ", toString(eO)], ""))
837+ else fe
838+ let ff = invoke(aD, "burn", [dK], [AttachedPayment(dw, dK)])
839+ if ((ff == ff))
829840 then {
830- let fc = [ScriptTransfer(X, dn, dZ)]
831- let eV = if ((dt > 0))
832- then [ScriptTransfer(aE, dt, dZ)]
841+ let fg = [ScriptTransfer(X, dn, ec)]
842+ let eZ = if ((dt > 0))
843+ then [ScriptTransfer(aE, dt, ec)]
833844 else nil
834- $Tuple2(((cP ++ fc) ++ eV), dn)
845+ $Tuple2(((cP ++ fg) ++ eZ), dn)
835846 }
836847 else throw("Strict value is not equal to itself.")
837848 }
841852
842853
843854 @Callable(df)
844-func getOneTknREADONLY (dZ,dK) = {
845- let fd = dY(aK(dZ), dK, aT, unit, unit)
846- let fa = fd._1
847- let cP = fd._2
848- let dt = fd._3
849- let eS = fd._4
850- $Tuple2(nil, $Tuple3(fa, dt, eS))
855+func getOneTknREADONLY (ec,dK) = {
856+ let fh = eb(aK(ec), dK, aT, unit, unit)
857+ let fe = fh._1
858+ let cP = fh._2
859+ let dt = fh._3
860+ let eW = fh._4
861+ $Tuple2(nil, $Tuple3(fe, dt, eW))
851862 }
852863
853864
854865
855866 @Callable(df)
856-func unstakeAndGetOneTkn (fe,eX,eK) = {
857- let eM = {
858- let eN = invoke(aD, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
859- if ($isInstanceOf(eN, "Boolean"))
860- then eN
861- else throw(($getType(eN) + " couldn't be cast to Boolean"))
867+func unstakeAndGetOneTkn (fi,fb,eO) = {
868+ let eQ = {
869+ let eR = invoke(aD, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
870+ if ($isInstanceOf(eR, "Boolean"))
871+ then eR
872+ else throw(($getType(eR) + " couldn't be cast to Boolean"))
862873 }
863- let eY = if (if (aF())
874+ let fc = if (if (aF())
864875 then true
865876 else (aS == n))
866877 then true
867- else eM
868- let ea = [if (!(eY))
878+ else eQ
879+ let ed = [if (!(fc))
869880 then true
870881 else aB("get operation is blocked by admin"), if ((size(df.payments) == 0))
871882 then true
872883 else aB("no payments are expected")]
873- if ((ea == ea))
884+ if ((ed == ed))
874885 then {
875- let dZ = aK(eX)
886+ let ec = aK(fb)
876887 let X = df.caller
877888 let Y = df.transactionId
878- let ff = invoke(aZ, "unstake", [toBase58String(aT), fe], nil)
879- if ((ff == ff))
889+ let fj = invoke(aZ, "unstake", [toBase58String(aT), fi], nil)
890+ if ((fj == fj))
880891 then {
881- let fg = dY(dZ, fe, aT, X, Y)
882- let fa = fg._1
883- let cP = fg._2
884- let dt = fg._3
885- let eS = fg._4
886- let dn = if (if ((eK > 0))
887- then (eK > fa)
892+ let fk = eb(ec, fi, aT, X, Y)
893+ let fe = fk._1
894+ let cP = fk._2
895+ let dt = fk._3
896+ let eW = fk._4
897+ let dn = if (if ((eO > 0))
898+ then (eO > fe)
888899 else false)
889- then aB(makeString(["amount to receive is less than ", toString(eK)], ""))
890- else fa
891- let fb = invoke(aD, "burn", [fe], [AttachedPayment(aT, fe)])
892- if ((fb == fb))
900+ then aB(makeString(["amount to receive is less than ", toString(eO)], ""))
901+ else fe
902+ let ff = invoke(aD, "burn", [fi], [AttachedPayment(aT, fi)])
903+ if ((ff == ff))
893904 then {
894- let fc = [ScriptTransfer(df.caller, dn, dZ)]
895- let eV = if ((dt > 0))
896- then [ScriptTransfer(aE, dt, dZ)]
905+ let fg = [ScriptTransfer(df.caller, dn, ec)]
906+ let eZ = if ((dt > 0))
907+ then [ScriptTransfer(aE, dt, ec)]
897908 else nil
898- $Tuple2(((cP ++ fc) ++ eV), dn)
909+ $Tuple2(((cP ++ fg) ++ eZ), dn)
899910 }
900911 else throw("Strict value is not equal to itself.")
901912 }
909920 @Callable(df)
910921 func get () = {
911922 let cA = de(df)
912- let fh = cA._1
923+ let fl = cA._1
913924 let ch = cA._2
914925 let dh = cA._3
915926 let bP = cA._4
916927 let ci = cA._5
917- let fi = invoke(aD, "burn", [dh], [AttachedPayment(bP, dh)])
918- if ((fi == fi))
928+ let fm = invoke(aD, "burn", [dh], [AttachedPayment(bP, dh)])
929+ if ((fm == fm))
919930 then ci
920931 else throw("Strict value is not equal to itself.")
921932 }
923934
924935
925936 @Callable(df)
926-func getNoLess (fj,fk) = {
937+func getNoLess (fn,fo) = {
927938 let cA = de(df)
928939 let cg = cA._1
929940 let ch = cA._2
930941 let dh = cA._3
931942 let bP = cA._4
932943 let ci = cA._5
933- if ((fj > cg))
934- then throw(((("noLessThenAmtAsset failed: " + toString(cg)) + " < ") + toString(fj)))
935- else if ((fk > ch))
936- then throw(((("noLessThenPriceAsset failed: " + toString(ch)) + " < ") + toString(fk)))
944+ if ((fn > cg))
945+ then throw(((("noLessThenAmtAsset failed: " + toString(cg)) + " < ") + toString(fn)))
946+ else if ((fo > ch))
947+ then throw(((("noLessThenPriceAsset failed: " + toString(ch)) + " < ") + toString(fo)))
937948 else {
938- let fi = invoke(aD, "burn", [dh], [AttachedPayment(bP, dh)])
939- if ((fi == fi))
949+ let fm = invoke(aD, "burn", [dh], [AttachedPayment(bP, dh)])
950+ if ((fm == fm))
940951 then ci
941952 else throw("Strict value is not equal to itself.")
942953 }
946957
947958 @Callable(df)
948959 func unstakeAndGet (dn) = {
949- let fl = if ((size(df.payments) != 0))
960+ let fp = if ((size(df.payments) != 0))
950961 then throw("No payments are expected")
951962 else true
952- if ((fl == fl))
963+ if ((fp == fp))
953964 then {
954965 let bE = aH()
955966 let bR = fromBase58String(bE[q])
956- let ff = invoke(aZ, "unstake", [toBase58String(bR), dn], nil)
957- if ((ff == ff))
967+ let fj = invoke(aZ, "unstake", [toBase58String(bR), dn], nil)
968+ if ((fj == fj))
958969 then {
959970 let cA = bN(toBase58String(df.transactionId), toBase58String(bR), dn, df.caller)
960971 let bU = parseIntValue(cA._9)
961972 let ci = cA._10
962- let fm = if (if (aF())
973+ let fq = if (if (aF())
963974 then true
964975 else (bU == n))
965976 then throw(("Get operation is blocked by admin. Status = " + toString(bU)))
966977 else true
967- if ((fm == fm))
978+ if ((fq == fq))
968979 then {
969- let fi = invoke(aD, "burn", [dn], [AttachedPayment(bR, dn)])
970- if ((fi == fi))
980+ let fm = invoke(aD, "burn", [dn], [AttachedPayment(bR, dn)])
981+ if ((fm == fm))
971982 then ci
972983 else throw("Strict value is not equal to itself.")
973984 }
981992
982993
983994 @Callable(df)
984-func activate (fn,fo) = if ((toString(df.caller) != toString(aD)))
995+func unstakeAndGetNoLess (fi,fr,fo) = {
996+ let fc = if (aF())
997+ then true
998+ else (aS == n)
999+ let ed = [if (!(fc))
1000+ then true
1001+ else throw("get operation is blocked by admin"), if ((size(df.payments) == 0))
1002+ then true
1003+ else throw("no payments are expected")]
1004+ if ((ed == ed))
1005+ then {
1006+ let fj = invoke(aZ, "unstake", [toBase58String(aT), fi], nil)
1007+ if ((fj == fj))
1008+ then {
1009+ let cA = bN(toBase58String(df.transactionId), toBase58String(aT), fi, df.caller)
1010+ let cg = cA._1
1011+ let ch = cA._2
1012+ let ci = cA._10
1013+ let fs = [if ((cg >= fr))
1014+ then true
1015+ else throw(makeString(["amount asset amount to receive is less than ", toString(fr)], "")), if ((ch >= fo))
1016+ then true
1017+ else throw(makeString(["price asset amount to receive is less than ", toString(fo)], ""))]
1018+ if ((fs == fs))
1019+ then {
1020+ let fm = invoke(aD, "burn", [fi], [AttachedPayment(aT, fi)])
1021+ if ((fm == fm))
1022+ then ci
1023+ else throw("Strict value is not equal to itself.")
1024+ }
1025+ else throw("Strict value is not equal to itself.")
1026+ }
1027+ else throw("Strict value is not equal to itself.")
1028+ }
1029+ else throw("Strict value is not equal to itself.")
1030+ }
1031+
1032+
1033+
1034+@Callable(df)
1035+func activate (ft,fu) = if ((toString(df.caller) != toString(aD)))
9851036 then throw("permissions denied")
986- else $Tuple2([StringEntry(aa(), fn), StringEntry(ab(), fo)], "success")
1037+ else $Tuple2([StringEntry(aa(), ft), StringEntry(ab(), fu)], "success")
9871038
9881039
9891040
10431094 let cu = bE[w]
10441095 let bF = parseIntValue(bE[t])
10451096 let bG = parseIntValue(bE[u])
1046- let fp = valueOrErrorMessage(assetInfo(bR), (("Asset " + toBase58String(bR)) + " doesn't exist")).quantity
1097+ let fv = valueOrErrorMessage(assetInfo(bR), (("Asset " + toBase58String(bR)) + " doesn't exist")).quantity
10471098 let cU = bq(cS)
10481099 let cV = bq(cT)
1049- let fq = if ((fp == 0))
1100+ let fw = if ((fv == 0))
10501101 then [e, e, e]
1051- else bC(cU, cV, fp)
1102+ else bC(cU, cV, fv)
10521103 let cb = 0
1053- let fr = G(fq[1], b)
1054- let fs = G(fq[2], b)
1055- let ft = value(getInteger(aD, ap(toString(this))))
1056- $Tuple2(nil, makeString(["%d%d%d%d%d%d%d", toString(cU), toString(cV), toString(fp), toString(cb), toString(fr), toString(fs), toString(ft)], j))
1104+ let fx = G(fw[1], b)
1105+ let fy = G(fw[2], b)
1106+ let fz = value(getInteger(aD, ap(toString(this))))
1107+ $Tuple2(nil, makeString(["%d%d%d%d%d%d%d", toString(cU), toString(cV), toString(fv), toString(cb), toString(fx), toString(fy), toString(fz)], j))
10571108 }
10581109
10591110
10691120 let bF = parseIntValue(bE[t])
10701121 let bG = parseIntValue(bE[u])
10711122 let bU = bE[p]
1072- let fp = valueOrErrorMessage(assetInfo(bR), (("Asset " + toBase58String(bR)) + " doesn't exist")).quantity
1123+ let fv = valueOrErrorMessage(assetInfo(bR), (("Asset " + toBase58String(bR)) + " doesn't exist")).quantity
10731124 let cU = bq(cr)
10741125 let cV = bq(cs)
10751126 let bA = D(cU, bF)
10761127 let bB = D(cV, bG)
1077- let ca = if ((fp == 0))
1128+ let ca = if ((fv == 0))
10781129 then e
10791130 else bs(bB, bA)
10801131 let cx = D(cl, bF)
10821133 let cn = G(cy, bG)
10831134 let dl = cj("", 500000, cl, bS, cn, bT, "", true, false)
10841135 let cI = dl._1
1085- let fu = dl._3
1136+ let fA = dl._3
10861137 let bW = dl._4
10871138 let bY = dl._5
10881139 let bV = dl._6
11021153 let bF = parseIntValue(bE[t])
11031154 let bG = parseIntValue(bE[u])
11041155 let bU = bE[p]
1105- let fp = valueOrErrorMessage(assetInfo(bR), (("Asset " + toBase58String(bR)) + " doesn't exist")).quantity
1106- let fv = bq(cr)
1107- let fw = bq(cs)
1108- let fx = D(fv, bF)
1109- let fy = D(fw, bG)
1110- let ca = if ((fp == 0))
1156+ let fv = valueOrErrorMessage(assetInfo(bR), (("Asset " + toBase58String(bR)) + " doesn't exist")).quantity
1157+ let fB = bq(cr)
1158+ let fC = bq(cs)
1159+ let fD = D(fB, bF)
1160+ let fE = D(fC, bG)
1161+ let ca = if ((fv == 0))
11111162 then e
1112- else bs(fy, fx)
1163+ else bs(fE, fD)
11131164 let cy = D(cn, bG)
11141165 let cx = fraction(cy, d, ca)
11151166 let cl = G(cx, bF)
11161167 let dl = cj("", 500000, cl, bS, cn, bT, "", true, false)
11171168 let cI = dl._1
1118- let fu = dl._3
1169+ let fA = dl._3
11191170 let bW = dl._4
11201171 let bY = dl._5
11211172 let bV = dl._6
11251176
11261177
11271178 @Callable(df)
1128-func evaluateGetREADONLY (fz,fA) = {
1129- let cA = bN("", fz, fA, this)
1179+func evaluateGetREADONLY (fF,fG) = {
1180+ let cA = bN("", fF, fG, this)
11301181 let cg = cA._1
11311182 let ch = cA._2
11321183 let bW = cA._5
11381189 }
11391190
11401191
1141-@Verifier(fB)
1142-func fC () = {
1143- let fD = {
1144- let dq = eq()
1192+@Verifier(fH)
1193+func fI () = {
1194+ let fJ = {
1195+ let dq = eu()
11451196 if ($isInstanceOf(dq, "ByteVector"))
11461197 then {
1147- let ev = dq
1148- ev
1198+ let ez = dq
1199+ ez
11491200 }
11501201 else if ($isInstanceOf(dq, "Unit"))
1151- then fB.senderPublicKey
1202+ then fH.senderPublicKey
11521203 else throw("Match error")
11531204 }
1154- let dq = fB
1205+ let dq = fH
11551206 if ($isInstanceOf(dq, "Order"))
11561207 then {
11571208 let cR = dq
1158- let fE = aG()
1209+ let fK = aG()
11591210 let au = cQ(cR)
11601211 let av = sigVerify(cR.bodyBytes, cR.proofs[0], cR.senderPublicKey)
1161- let aw = sigVerify(cR.bodyBytes, cR.proofs[1], fE)
1212+ let aw = sigVerify(cR.bodyBytes, cR.proofs[1], fK)
11621213 if (if (if (au)
11631214 then av
11641215 else false)
11691220 }
11701221 else if ($isInstanceOf(dq, "SetScriptTransaction"))
11711222 then {
1172- let er = dq
1173- let fF = blake2b256(value(er.script))
1174- let fG = fromBase64String(value(getString(aD, ar())))
1175- let fH = scriptHash(this)
1176- if (if ((fG == fF))
1177- then (fH != fF)
1223+ let ev = dq
1224+ let fL = blake2b256(value(ev.script))
1225+ let fM = fromBase64String(value(getString(aD, ar())))
1226+ let fN = scriptHash(this)
1227+ if (if ((fM == fL))
1228+ then (fN != fL)
11781229 else false)
11791230 then true
1180- else sigVerify(fB.bodyBytes, fB.proofs[0], fD)
1231+ else sigVerify(fH.bodyBytes, fH.proofs[0], fJ)
11811232 }
1182- else sigVerify(fB.bodyBytes, fB.proofs[0], fD)
1233+ else sigVerify(fH.bodyBytes, fH.proofs[0], fJ)
11831234 }
11841235
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = 8
55
66 let b = 100000000
77
88 let c = toBigInt(100000000)
99
1010 let d = toBigInt(1000000000000000000)
1111
1212 let e = toBigInt(0)
1313
1414 let f = toBigInt(0)
1515
1616 let g = toBigInt(1)
1717
1818 let h = toBigInt(2)
1919
2020 let i = "WAVES"
2121
2222 let j = "__"
2323
2424 let k = 1
2525
2626 let l = 2
2727
2828 let m = 3
2929
3030 let n = 4
3131
3232 let o = 1
3333
3434 let p = 2
3535
3636 let q = 3
3737
3838 let r = 4
3939
4040 let s = 5
4141
4242 let t = 6
4343
4444 let u = 7
4545
4646 let v = 8
4747
4848 let w = 9
4949
5050 let x = 10
5151
5252 let y = 1
5353
5454 let z = 2
5555
5656 let A = 3
5757
5858 let B = 1
5959
6060 let C = 7
6161
6262 func D (E,F) = fraction(toBigInt(E), d, toBigInt(F))
6363
6464
6565 func G (H,I) = toInt(fraction(H, toBigInt(I), d))
6666
6767
6868 func J (K,L,M) = fraction(K, L, M)
6969
7070
7171 func N (H) = if ((0 > H))
7272 then -(H)
7373 else H
7474
7575
7676 func O (H) = if ((e > H))
7777 then -(H)
7878 else H
7979
8080
8181 func P () = "%s__factoryContract"
8282
8383
8484 func Q () = "%s__managerPublicKey"
8585
8686
8787 func R () = "%s__pendingManagerPublicKey"
8888
8989
9090 func S () = "%s%s__price__last"
9191
9292
9393 func T (U,V) = makeString(["%s%s%d%d__price__history", toString(U), toString(V)], j)
9494
9595
9696 func W (X,Y) = ((("%s%s%s__P__" + X) + "__") + Y)
9797
9898
9999 func Z (X,Y) = ((("%s%s%s__G__" + X) + "__") + Y)
100100
101101
102102 func aa () = "%s__amountAsset"
103103
104104
105105 func ab () = "%s__priceAsset"
106106
107107
108108 let ac = "%s__fee"
109109
110110 let ad = fraction(10, b, 10000)
111111
112112 let ae = valueOrElse(getInteger(this, ac), ad)
113113
114114 func af () = "%s__factoryConfig"
115115
116116
117117 func ag () = "%s%s__matcher__publicKey"
118118
119119
120120 func ah (ai) = (("%s%s%s__" + ai) + "__mappings__poolContract2LpAsset")
121121
122122
123123 func aj (ak,al) = (((("%d%d%s__" + ak) + "__") + al) + "__config")
124124
125125
126126 func am (an) = ("%s%s%s__mappings__baseAsset2internalId__" + an)
127127
128128
129129 func ao () = "%s__shutdown"
130130
131131
132132 func ap (aq) = ("%s%s__poolWeight__" + aq)
133133
134134
135135 func ar () = "%s__allowedLpScriptHash"
136136
137137
138138 let as = "%s__feeCollectorAddress"
139139
140140 func at (au,av,aw) = throw(((((("order validation failed: orderValid=" + toString(au)) + " senderValid=") + toString(av)) + " matcherValid=") + toString(aw)))
141141
142142
143143 func ax (ay,az) = valueOrErrorMessage(getString(ay, az), makeString(["mandatory ", toString(ay), ".", az, " is not defined"], ""))
144144
145145
146146 func aA (ay,az) = valueOrErrorMessage(getInteger(ay, az), makeString(["mandatory ", toString(ay), ".", az, " is not defined"], ""))
147147
148148
149149 func aB (aC) = throw(makeString(["lp.ride:", aC], " "))
150150
151151
152152 let aD = addressFromStringValue(ax(this, P()))
153153
154154 let aE = addressFromStringValue(ax(aD, as))
155155
156156 func aF () = valueOrElse(getBoolean(aD, ao()), false)
157157
158158
159159 func aG () = fromBase58String(ax(aD, ag()))
160160
161161
162162 func aH () = {
163163 let aI = ax(this, aa())
164164 let aJ = ax(this, ab())
165165 let al = aA(aD, am(aJ))
166166 let ak = aA(aD, am(aI))
167167 split(ax(aD, aj(toString(ak), toString(al))), j)
168168 }
169169
170170
171171 func aK (aL) = if ((aL == i))
172172 then unit
173173 else fromBase58String(aL)
174174
175175
176176 func aM (aL) = if ((aL == unit))
177177 then i
178178 else toBase58String(value(aL))
179179
180180
181181 func aN (aO) = $Tuple7(addressFromStringValue(aO[o]), parseIntValue(aO[p]), fromBase58String(aO[q]), aK(aO[r]), aK(aO[s]), parseIntValue(aO[t]), parseIntValue(aO[u]))
182182
183183
184184 let aP = aN(aH())
185185
186186 let aQ = aP
187187
188188 let aR = aQ._1
189189
190190 let aS = aQ._2
191191
192192 let aT = aQ._3
193193
194194 let aU = aQ._4
195195
196196 let aV = aQ._5
197197
198198 let aW = aQ._6
199199
200200 let aX = aQ._7
201201
202202 func aY () = split(ax(aD, af()), j)
203203
204204
205205 let aZ = valueOrErrorMessage(addressFromString(aY()[B]), "incorrect staking address")
206206
207207 let ba = valueOrErrorMessage(addressFromString(aY()[C]), "incorrect staking address")
208208
209209 func bb (bc,bd,be,bf,bg,bh,bi,bj,bk,bl) = makeString(["%d%d%d%d%d%d%d%d%d%d", toString(bc), toString(bd), toString(be), toString(bf), toString(bg), toString(bh), toString(bi), toString(bj), toString(bk), toString(bl)], j)
210210
211211
212212 func bm (bn,bo,bp,bf,bi,bj) = makeString(["%d%d%d%d%d%d", toString(bn), toString(bo), toString(bp), toString(bf), toString(bi), toString(bj)], j)
213213
214214
215215 func bq (br) = if ((br == "WAVES"))
216216 then wavesBalance(this).available
217217 else assetBalance(this, fromBase58String(br))
218218
219219
220220 func bs (bt,bu) = fraction(bt, d, bu)
221221
222222
223223 func bv (bw,bx,by,bz) = {
224224 let bA = D(by, bw)
225225 let bB = D(bz, bx)
226226 bs(bB, bA)
227227 }
228228
229229
230230 func bC (by,bz,bD) = {
231231 let bE = aH()
232232 let bF = parseIntValue(bE[t])
233233 let bG = parseIntValue(bE[u])
234234 let bH = bv(bF, bG, by, bz)
235235 let bu = D(by, bF)
236236 let bt = D(bz, bG)
237237 let bI = D(bD, b)
238238 let bJ = bs(bu, bI)
239239 let bK = bs(bt, bI)
240240 [bH, bJ, bK]
241241 }
242242
243243
244244 func bL (by,bz,bD) = {
245245 let bM = bC(by, bz, bD)
246246 [G(bM[0], b), G(bM[1], b), G(bM[2], b)]
247247 }
248248
249249
250250 func bN (bO,bP,bQ,X) = {
251251 let bE = aH()
252252 let bR = bE[q]
253253 let bS = bE[r]
254254 let bT = bE[s]
255255 let bw = parseIntValue(bE[t])
256256 let bx = parseIntValue(bE[u])
257257 let bU = bE[p]
258258 let bV = valueOrErrorMessage(assetInfo(fromBase58String(bR)), (("Asset " + bR) + " doesn't exist")).quantity
259259 if ((bR != bP))
260260 then throw("Invalid asset passed.")
261261 else {
262262 let bW = bq(bS)
263263 let bX = D(bW, bw)
264264 let bY = bq(bT)
265265 let bZ = D(bY, bx)
266266 let ca = bs(bZ, bX)
267267 let cb = G(ca, b)
268268 let cc = D(bQ, b)
269269 let cd = D(bV, b)
270270 let ce = fraction(bX, cc, cd)
271271 let cf = fraction(bZ, cc, cd)
272272 let cg = G(ce, bw)
273273 let ch = G(cf, bx)
274274 let ci = if ((bO == ""))
275275 then nil
276276 else [ScriptTransfer(X, cg, if ((bS == "WAVES"))
277277 then unit
278278 else fromBase58String(bS)), ScriptTransfer(X, ch, if ((bT == "WAVES"))
279279 then unit
280280 else fromBase58String(bT)), StringEntry(Z(toString(X), bO), bm(cg, ch, bQ, cb, height, lastBlock.timestamp)), IntegerEntry(S(), cb), IntegerEntry(T(height, lastBlock.timestamp), cb)]
281281 $Tuple10(cg, ch, bS, bT, bW, bY, bV, ca, bU, ci)
282282 }
283283 }
284284
285285
286286 func cj (bO,ck,cl,cm,cn,co,X,cp,cq) = {
287287 let bE = aH()
288288 let bR = fromBase58String(bE[q])
289289 let cr = bE[r]
290290 let cs = bE[s]
291291 let ct = bE[v]
292292 let cu = bE[w]
293293 let bF = parseIntValue(bE[t])
294294 let bG = parseIntValue(bE[u])
295295 let bU = bE[p]
296296 let bV = valueOrErrorMessage(assetInfo(bR), (("Asset " + toBase58String(bR)) + " doesn't exist")).quantity
297297 let cv = toBase58String(valueOrElse(cm, fromBase58String("WAVES")))
298298 let cw = toBase58String(valueOrElse(co, fromBase58String("WAVES")))
299299 if (if ((cr != cv))
300300 then true
301301 else (cs != cw))
302302 then throw("Invalid amt or price asset passed.")
303303 else {
304304 let bW = if (cp)
305305 then bq(cr)
306306 else (bq(cr) - cl)
307307 let bY = if (cp)
308308 then bq(cs)
309309 else (bq(cs) - cn)
310310 let cx = D(cl, bF)
311311 let cy = D(cn, bG)
312312 let cz = bs(cy, cx)
313313 let bX = D(bW, bF)
314314 let bZ = D(bY, bG)
315315 let cA = if ((bV == 0))
316316 then {
317317 let ca = e
318318 let cB = e
319319 let bI = pow((cx * cy), 0, toBigInt(5), 1, 0, DOWN)
320320 $Tuple5(G(bI, b), G(cx, bF), G(cy, bG), bs((bZ + cy), (bX + cx)), cB)
321321 }
322322 else {
323323 let ca = bs(bZ, bX)
324324 let cB = fraction(O((ca - cz)), d, ca)
325325 let cC = D(ck, b)
326326 if (if ((ca != e))
327327 then (cB > cC)
328328 else false)
329329 then throw(((("Price slippage " + toString(cB)) + " exceeded the passed limit of ") + toString(cC)))
330330 else {
331331 let cd = D(bV, b)
332332 let cD = fraction(cx, ca, d)
333333 let cE = fraction(cy, d, ca)
334334 let cF = if ((cD > cy))
335335 then $Tuple2(cE, cy)
336336 else $Tuple2(cx, cD)
337337 let cG = cF._1
338338 let cH = cF._2
339339 let bI = fraction(cd, cH, bZ)
340340 $Tuple5(G(bI, b), G(cG, bF), G(cH, bG), ca, cB)
341341 }
342342 }
343343 let cI = cA._1
344344 let cJ = cA._2
345345 let cK = cA._3
346346 let cb = G(cA._4, b)
347347 let cL = G(cA._5, b)
348348 if ((0 >= cI))
349349 then throw("Invalid calculations. LP calculated is less than zero.")
350350 else {
351351 let cM = if (!(cq))
352352 then 0
353353 else cI
354354 let cN = (cl - cJ)
355355 let cO = (cn - cK)
356356 let cP = [IntegerEntry(S(), cb), IntegerEntry(T(height, lastBlock.timestamp), cb), StringEntry(W(X, bO), bb(cJ, cK, cM, cb, ck, cL, height, lastBlock.timestamp, cN, cO))]
357357 $Tuple13(cI, cM, cb, bW, bY, bV, bR, bU, cP, cN, cO, cm, co)
358358 }
359359 }
360360 }
361361
362362
363363 func cQ (cR) = {
364364 let bE = aH()
365365 let cS = bE[r]
366366 let cT = bE[s]
367367 let bU = parseIntValue(bE[p])
368368 let bF = parseIntValue(bE[t])
369369 let bG = parseIntValue(bE[u])
370370 let cU = bq(cS)
371371 let cV = bq(cT)
372372 let ca = if ((cR.orderType == Buy))
373373 then bv(bF, bG, (cU + cR.amount), cV)
374374 else bv(bF, bG, (cU - cR.amount), cV)
375375 let cb = G(ca, b)
376376 if (if (if (aF())
377377 then true
378378 else (bU == m))
379379 then true
380380 else (bU == n))
381381 then throw("Exchange operations disabled")
382382 else {
383383 let cW = cR.assetPair.amountAsset
384384 let cX = if ((cW == unit))
385385 then "WAVES"
386386 else toBase58String(value(cW))
387387 let cY = cR.assetPair.priceAsset
388388 let cZ = if ((cY == unit))
389389 then "WAVES"
390390 else toBase58String(value(cY))
391391 if (if ((cX != cS))
392392 then true
393393 else (cZ != cT))
394394 then throw("Wrong order assets.")
395395 else {
396396 let da = cR.price
397397 let db = fraction(b, bG, bF)
398398 let dc = J(da, b, db)
399399 let dd = if ((cR.orderType == Buy))
400400 then (cb >= dc)
401401 else (dc >= cb)
402402 true
403403 }
404404 }
405405 }
406406
407407
408408 func de (df) = if ((size(df.payments) != 1))
409409 then throw("exactly 1 payment is expected")
410410 else {
411411 let dg = value(df.payments[0])
412412 let bP = value(dg.assetId)
413413 let dh = dg.amount
414414 let cA = bN(toBase58String(df.transactionId), toBase58String(bP), dh, df.caller)
415415 let cg = cA._1
416416 let ch = cA._2
417417 let bU = parseIntValue(cA._9)
418418 let ci = cA._10
419419 if (if (aF())
420420 then true
421421 else (bU == n))
422422 then throw(("Get operation is blocked by admin. Status = " + toString(bU)))
423423 else $Tuple5(cg, ch, dh, bP, ci)
424424 }
425425
426426
427427 func di (df,ck,cq) = if ((size(df.payments) != 2))
428428 then throw("exactly 2 payments are expected")
429429 else {
430430 let dj = value(df.payments[0])
431431 let dk = value(df.payments[1])
432432 let dl = cj(toBase58String(df.transactionId), ck, dj.amount, dj.assetId, dk.amount, dk.assetId, toString(df.caller), false, cq)
433433 let bU = parseIntValue(dl._8)
434434 if (if (if (aF())
435435 then true
436436 else (bU == l))
437437 then true
438438 else (bU == n))
439439 then throw(("Put operation is blocked by admin. Status = " + toString(bU)))
440440 else dl
441441 }
442442
443443
444444 func dm (dn) = {
445445 let do = invoke(aD, "emit", [dn], nil)
446446 if ((do == do))
447447 then {
448448 let dp = {
449449 let dq = do
450450 if ($isInstanceOf(dq, "Address"))
451451 then {
452452 let dr = dq
453453 invoke(dr, "emit", [dn], nil)
454454 }
455455 else unit
456456 }
457457 if ((dp == dp))
458458 then dn
459459 else throw("Strict value is not equal to itself.")
460460 }
461461 else throw("Strict value is not equal to itself.")
462462 }
463463
464464
465465 func ds (dn) = {
466466 let dt = fraction(dn, ae, b)
467467 $Tuple2((dn - dt), dt)
468468 }
469469
470470
471471 func du (dv,dw,X,Y) = {
472472 let dx = (Y == unit)
473473 let dy = bq(aM(aU))
474474 let dz = bq(aM(aV))
475475 let dA = if ((dw == aU))
476476 then true
477477 else if ((dw == aV))
478478 then false
479479 else aB("invalid asset")
480480 let dB = if (dx)
481481 then $Tuple2(dy, dz)
482482 else if (dA)
483483 then $Tuple2((dy - dv), dz)
484484 else $Tuple2(dy, (dz - dv))
485485 let dC = dB._1
486486 let dD = dB._2
487487 let dE = if (dA)
488488 then $Tuple2(dv, 0)
489489 else $Tuple2(0, dv)
490490 let dF = dE._1
491491 let dG = dE._2
492492 let dH = ds(dF)._1
493493 let dI = ds(dG)._1
494494 let dJ = ds(dv)
495495 let dK = dJ._1
496496 let dt = dJ._2
497497 let dL = (dC + dH)
498498 let dM = (dD + dI)
499499 let dN = bs(D(dM, aX), D(dL, aW))
500500 let dO = G(dN, b)
501501 let dP = if (dA)
502502 then dC
503503 else dD
504504 let dQ = toBigInt(dP)
505505 let dR = toBigInt(valueOrErrorMessage(assetInfo(aT), (("asset " + toBase58String(aT)) + " doesn't exist")).quantity)
506506 let dS = if ((dR > f))
507507 then true
508508 else aB("initial deposit requires all coins")
509509 if ((dS == dS))
510510 then {
511511 let dT = toBigInt(dK)
512512 let dU = max([0, toInt(((dR * (sqrtBigInt((d + ((dT * d) / dQ)), 18, 18, DOWN) - d)) / d))])
513513 let cP = if (dx)
514514 then nil
515515 else [IntegerEntry(S(), dO), IntegerEntry(T(height, lastBlock.timestamp), dO), StringEntry(W(toString(value(X)), toBase58String(value(Y))), bb(dF, dG, dU, dO, 0, 0, height, lastBlock.timestamp, 0, 0))]
516516 let dV = bs(D(dD, aX), D(dC, aW))
517517 let dW = G(dV, b)
518- let dX = N((((dO - dW) * b) / dW))
518+ let dX = {
519+ let dY = if (dA)
520+ then $Tuple2(dF, dC)
521+ else $Tuple2(dG, dD)
522+ let dn = dY._1
523+ let dZ = dY._2
524+ let ea = toInt(fraction(dR, toBigInt((dn / 2)), toBigInt(dZ)))
525+ fraction((dU - ea), b, ea)
526+ }
519527 $Tuple4(dU, cP, dt, dX)
520528 }
521529 else throw("Strict value is not equal to itself.")
522530 }
523531
524532
525-func dY (dZ,dK,dw,X,Y) = {
533+func eb (ec,dK,dw,X,Y) = {
526534 let dx = (Y == unit)
527- let ea = [if ((dw == aT))
535+ let ed = [if ((dw == aT))
528536 then true
529537 else aB("invalid lp asset")]
530- if ((ea == ea))
538+ if ((ed == ed))
531539 then {
532- let eb = if ((dZ == aU))
540+ let ee = if ((ec == aU))
533541 then true
534- else if ((dZ == aV))
542+ else if ((ec == aV))
535543 then false
536544 else aB("invalid asset")
537- let ec = if (eb)
545+ let ef = if (ee)
538546 then toBigInt(bq(aM(aU)))
539547 else toBigInt(bq(aM(aV)))
540- let ed = bq(aM(aU))
541- let ee = bq(aM(aV))
542- let ef = if (eb)
543- then ed
544- else ee
545- let eg = toBigInt(ef)
548+ let eg = bq(aM(aU))
549+ let eh = bq(aM(aV))
550+ let ei = if (ee)
551+ then eg
552+ else eh
553+ let ej = toBigInt(ei)
546554 let dR = toBigInt(valueOrErrorMessage(assetInfo(aT), (("asset " + toBase58String(aT)) + " doesn't exist")).quantity)
547- let eh = toBigInt(dK)
548- let ei = max([0, toInt(((ec * (d - pow((d - ((eh * d) / dR)), 18, h, 0, 18, DOWN))) / d))])
549- let ej = ds(ei)
550- let ek = ej._1
551- let dt = ej._2
552- let el = if (eb)
553- then $Tuple4(ek, 0, (ed - ei), ee)
554- else $Tuple4(0, ek, ed, (ee - ei))
555- let em = el._1
556- let en = el._2
557- let eo = el._3
558- let ep = el._4
559- let dN = bs(D(ep, aX), D(eo, aW))
555+ let ek = toBigInt(dK)
556+ let el = max([0, toInt(((ef * (d - pow((d - ((ek * d) / dR)), 18, h, 0, 18, DOWN))) / d))])
557+ let em = ds(el)
558+ let en = em._1
559+ let dt = em._2
560+ let eo = if (ee)
561+ then $Tuple4(en, 0, (eg - el), eh)
562+ else $Tuple4(0, en, eg, (eh - el))
563+ let ep = eo._1
564+ let eq = eo._2
565+ let er = eo._3
566+ let es = eo._4
567+ let dN = bs(D(es, aX), D(er, aW))
560568 let dO = G(dN, b)
561569 let cP = if (dx)
562570 then nil
563- else [StringEntry(Z(toString(value(X)), toBase58String(value(Y))), bm(em, en, dK, dO, height, lastBlock.timestamp)), IntegerEntry(S(), dO), IntegerEntry(T(height, lastBlock.timestamp), dO)]
564- let dV = bs(D(ee, aX), D(ed, aW))
571+ else [StringEntry(Z(toString(value(X)), toBase58String(value(Y))), bm(ep, eq, dK, dO, height, lastBlock.timestamp)), IntegerEntry(S(), dO), IntegerEntry(T(height, lastBlock.timestamp), dO)]
572+ let dV = bs(D(eh, aX), D(eg, aW))
565573 let dW = G(dV, b)
566- let dX = N((((dO - dW) * b) / dW))
567- $Tuple4(ek, cP, dt, dX)
574+ let dX = {
575+ let et = (toInt(fraction(ef, ek, dR)) * 2)
576+ fraction((en - et), b, et)
577+ }
578+ $Tuple4(en, cP, dt, dX)
568579 }
569580 else throw("Strict value is not equal to itself.")
570581 }
571582
572583
573-func eq () = {
584+func eu () = {
574585 let dq = getString(Q())
575586 if ($isInstanceOf(dq, "String"))
576587 then {
577- let er = dq
578- fromBase58String(er)
588+ let ev = dq
589+ fromBase58String(ev)
579590 }
580591 else if ($isInstanceOf(dq, "Unit"))
581592 then unit
582593 else throw("Match error")
583594 }
584595
585596
586-func es () = {
597+func ew () = {
587598 let dq = getString(R())
588599 if ($isInstanceOf(dq, "String"))
589600 then {
590- let er = dq
591- fromBase58String(er)
601+ let ev = dq
602+ fromBase58String(ev)
592603 }
593604 else if ($isInstanceOf(dq, "Unit"))
594605 then unit
595606 else throw("Match error")
596607 }
597608
598609
599-func et (df) = {
600- let eu = throw("Permission denied")
601- let dq = eq()
610+func ex (df) = {
611+ let ey = throw("Permission denied")
612+ let dq = eu()
602613 if ($isInstanceOf(dq, "ByteVector"))
603614 then {
604- let ev = dq
605- if ((df.callerPublicKey == ev))
615+ let ez = dq
616+ if ((df.callerPublicKey == ez))
606617 then true
607- else eu
618+ else ey
608619 }
609620 else if ($isInstanceOf(dq, "Unit"))
610621 then if ((df.caller == this))
611622 then true
612- else eu
623+ else ey
613624 else throw("Match error")
614625 }
615626
616627
617628 @Callable(df)
618-func setManager (ew) = {
619- let ex = et(df)
620- if ((ex == ex))
629+func setManager (eA) = {
630+ let eB = ex(df)
631+ if ((eB == eB))
621632 then {
622- let ey = fromBase58String(ew)
623- if ((ey == ey))
624- then [StringEntry(R(), ew)]
633+ let eC = fromBase58String(eA)
634+ if ((eC == eC))
635+ then [StringEntry(R(), eA)]
625636 else throw("Strict value is not equal to itself.")
626637 }
627638 else throw("Strict value is not equal to itself.")
628639 }
629640
630641
631642
632643 @Callable(df)
633644 func confirmManager () = {
634- let ez = es()
635- let eA = if (isDefined(ez))
645+ let eD = ew()
646+ let eE = if (isDefined(eD))
636647 then true
637648 else throw("No pending manager")
638- if ((eA == eA))
649+ if ((eE == eE))
639650 then {
640- let eB = if ((df.callerPublicKey == value(ez)))
651+ let eF = if ((df.callerPublicKey == value(eD)))
641652 then true
642653 else throw("You are not pending manager")
643- if ((eB == eB))
644- then [StringEntry(Q(), toBase58String(value(ez))), DeleteEntry(R())]
654+ if ((eF == eF))
655+ then [StringEntry(Q(), toBase58String(value(eD))), DeleteEntry(R())]
645656 else throw("Strict value is not equal to itself.")
646657 }
647658 else throw("Strict value is not equal to itself.")
648659 }
649660
650661
651662
652663 @Callable(df)
653-func put (ck,eC) = if ((0 > ck))
664+func put (ck,eG) = if ((0 > ck))
654665 then throw("Invalid slippageTolerance passed")
655666 else {
656667 let dl = di(df, ck, true)
657668 let cM = dl._2
658669 let bR = dl._7
659670 let ci = dl._9
660671 let cN = dl._10
661672 let cO = dl._11
662- let eD = dl._12
663- let eE = dl._13
673+ let eH = dl._12
674+ let eI = dl._13
664675 let do = invoke(aD, "emit", [cM], nil)
665676 if ((do == do))
666677 then {
667678 let dp = {
668679 let dq = do
669680 if ($isInstanceOf(dq, "Address"))
670681 then {
671682 let dr = dq
672683 invoke(dr, "emit", [cM], nil)
673684 }
674685 else unit
675686 }
676687 if ((dp == dp))
677688 then {
678- let eF = if ((cN > 0))
679- then invoke(ba, "put", nil, [AttachedPayment(eD, cN)])
689+ let eJ = if ((cN > 0))
690+ then invoke(ba, "put", nil, [AttachedPayment(eH, cN)])
680691 else nil
681- if ((eF == eF))
692+ if ((eJ == eJ))
682693 then {
683- let eG = if ((cO > 0))
684- then invoke(ba, "put", nil, [AttachedPayment(eE, cO)])
694+ let eK = if ((cO > 0))
695+ then invoke(ba, "put", nil, [AttachedPayment(eI, cO)])
685696 else nil
686- if ((eG == eG))
697+ if ((eK == eK))
687698 then {
688- let eH = if (eC)
699+ let eL = if (eG)
689700 then {
690- let eI = invoke(aZ, "stake", nil, [AttachedPayment(bR, cM)])
691- if ((eI == eI))
701+ let eM = invoke(aZ, "stake", nil, [AttachedPayment(bR, cM)])
702+ if ((eM == eM))
692703 then nil
693704 else throw("Strict value is not equal to itself.")
694705 }
695706 else [ScriptTransfer(df.caller, cM, bR)]
696- (ci ++ eH)
707+ (ci ++ eL)
697708 }
698709 else throw("Strict value is not equal to itself.")
699710 }
700711 else throw("Strict value is not equal to itself.")
701712 }
702713 else throw("Strict value is not equal to itself.")
703714 }
704715 else throw("Strict value is not equal to itself.")
705716 }
706717
707718
708719
709720 @Callable(df)
710-func putForFree (eJ) = if ((0 > eJ))
721+func putForFree (eN) = if ((0 > eN))
711722 then throw("Invalid value passed")
712723 else {
713- let dl = di(df, eJ, false)
724+ let dl = di(df, eN, false)
714725 dl._9
715726 }
716727
717728
718729
719730 @Callable(df)
720-func putOneTkn (eK,eL) = {
721- let eM = {
722- let eN = invoke(aD, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
723- if ($isInstanceOf(eN, "Boolean"))
724- then eN
725- else throw(($getType(eN) + " couldn't be cast to Boolean"))
731+func putOneTkn (eO,eP) = {
732+ let eQ = {
733+ let eR = invoke(aD, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
734+ if ($isInstanceOf(eR, "Boolean"))
735+ then eR
736+ else throw(($getType(eR) + " couldn't be cast to Boolean"))
726737 }
727- let eO = if (if (if (aF())
738+ let eS = if (if (if (aF())
728739 then true
729740 else (aS == l))
730741 then true
731742 else (aS == n))
732743 then true
733- else eM
734- let ea = [if (!(eO))
744+ else eQ
745+ let ed = [if (!(eS))
735746 then true
736747 else aB("put operation is blocked by admin"), if ((size(df.payments) == 1))
737748 then true
738749 else aB("exactly 1 payment are expected")]
739- if ((ea == ea))
750+ if ((ed == ed))
740751 then {
741- let eP = df.payments[0]
742- let dw = eP.assetId
743- let dv = eP.amount
752+ let eT = df.payments[0]
753+ let dw = eT.assetId
754+ let dv = eT.amount
744755 let X = df.caller
745756 let Y = df.transactionId
746- let eQ = du(dv, dw, X, Y)
747- let eR = eQ._1
748- let cP = eQ._2
749- let dt = eQ._3
750- let eS = eQ._4
751- let eT = if (if ((eK > 0))
752- then (eK > eR)
757+ let eU = du(dv, dw, X, Y)
758+ let eV = eU._1
759+ let cP = eU._2
760+ let dt = eU._3
761+ let eW = eU._4
762+ let eX = if (if ((eO > 0))
763+ then (eO > eV)
753764 else false)
754- then aB(makeString(["amount to receive is less than ", toString(eK)], ""))
755- else eR
756- let do = dm(eT)
765+ then aB(makeString(["amount to receive is less than ", toString(eO)], ""))
766+ else eV
767+ let do = dm(eX)
757768 if ((do == do))
758769 then {
759- let eH = if (eL)
770+ let eL = if (eP)
760771 then {
761- let eU = invoke(aZ, "stake", nil, [AttachedPayment(aT, eT)])
762- if ((eU == eU))
772+ let eY = invoke(aZ, "stake", nil, [AttachedPayment(aT, eX)])
773+ if ((eY == eY))
763774 then nil
764775 else throw("Strict value is not equal to itself.")
765776 }
766- else [ScriptTransfer(df.caller, eT, aT)]
767- let eV = if ((dt > 0))
777+ else [ScriptTransfer(df.caller, eX, aT)]
778+ let eZ = if ((dt > 0))
768779 then [ScriptTransfer(aE, dt, dw)]
769780 else nil
770- $Tuple2(((cP ++ eH) ++ eV), eT)
781+ $Tuple2(((cP ++ eL) ++ eZ), eX)
771782 }
772783 else throw("Strict value is not equal to itself.")
773784 }
774785 else throw("Strict value is not equal to itself.")
775786 }
776787
777788
778789
779790 @Callable(df)
780791 func putOneTknREADONLY (dw,dv) = {
781- let eW = du(dv, aK(dw), unit, unit)
782- let eR = eW._1
783- let cP = eW._2
784- let dt = eW._3
785- let eS = eW._4
786- $Tuple2(nil, $Tuple3(eR, dt, eS))
792+ let fa = du(dv, aK(dw), unit, unit)
793+ let eV = fa._1
794+ let cP = fa._2
795+ let dt = fa._3
796+ let eW = fa._4
797+ $Tuple2(nil, $Tuple3(eV, dt, eW))
787798 }
788799
789800
790801
791802 @Callable(df)
792-func getOneTkn (eX,eK) = {
793- let eM = {
794- let eN = invoke(aD, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
795- if ($isInstanceOf(eN, "Boolean"))
796- then eN
797- else throw(($getType(eN) + " couldn't be cast to Boolean"))
803+func getOneTkn (fb,eO) = {
804+ let eQ = {
805+ let eR = invoke(aD, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
806+ if ($isInstanceOf(eR, "Boolean"))
807+ then eR
808+ else throw(($getType(eR) + " couldn't be cast to Boolean"))
798809 }
799- let eY = if (if (aF())
810+ let fc = if (if (aF())
800811 then true
801812 else (aS == n))
802813 then true
803- else eM
804- let ea = [if (!(eY))
814+ else eQ
815+ let ed = [if (!(fc))
805816 then true
806817 else aB("get operation is blocked by admin"), if ((size(df.payments) == 1))
807818 then true
808819 else aB("exactly 1 payment are expected")]
809- if ((ea == ea))
820+ if ((ed == ed))
810821 then {
811- let dZ = aK(eX)
812- let eP = df.payments[0]
813- let dw = eP.assetId
814- let dK = eP.amount
822+ let ec = aK(fb)
823+ let eT = df.payments[0]
824+ let dw = eT.assetId
825+ let dK = eT.amount
815826 let X = df.caller
816827 let Y = df.transactionId
817- let eZ = dY(dZ, dK, dw, X, Y)
818- let fa = eZ._1
819- let cP = eZ._2
820- let dt = eZ._3
821- let eS = eZ._4
822- let dn = if (if ((eK > 0))
823- then (eK > fa)
828+ let fd = eb(ec, dK, dw, X, Y)
829+ let fe = fd._1
830+ let cP = fd._2
831+ let dt = fd._3
832+ let eW = fd._4
833+ let dn = if (if ((eO > 0))
834+ then (eO > fe)
824835 else false)
825- then aB(makeString(["amount to receive is less than ", toString(eK)], ""))
826- else fa
827- let fb = invoke(aD, "burn", [dK], [AttachedPayment(dw, dK)])
828- if ((fb == fb))
836+ then aB(makeString(["amount to receive is less than ", toString(eO)], ""))
837+ else fe
838+ let ff = invoke(aD, "burn", [dK], [AttachedPayment(dw, dK)])
839+ if ((ff == ff))
829840 then {
830- let fc = [ScriptTransfer(X, dn, dZ)]
831- let eV = if ((dt > 0))
832- then [ScriptTransfer(aE, dt, dZ)]
841+ let fg = [ScriptTransfer(X, dn, ec)]
842+ let eZ = if ((dt > 0))
843+ then [ScriptTransfer(aE, dt, ec)]
833844 else nil
834- $Tuple2(((cP ++ fc) ++ eV), dn)
845+ $Tuple2(((cP ++ fg) ++ eZ), dn)
835846 }
836847 else throw("Strict value is not equal to itself.")
837848 }
838849 else throw("Strict value is not equal to itself.")
839850 }
840851
841852
842853
843854 @Callable(df)
844-func getOneTknREADONLY (dZ,dK) = {
845- let fd = dY(aK(dZ), dK, aT, unit, unit)
846- let fa = fd._1
847- let cP = fd._2
848- let dt = fd._3
849- let eS = fd._4
850- $Tuple2(nil, $Tuple3(fa, dt, eS))
855+func getOneTknREADONLY (ec,dK) = {
856+ let fh = eb(aK(ec), dK, aT, unit, unit)
857+ let fe = fh._1
858+ let cP = fh._2
859+ let dt = fh._3
860+ let eW = fh._4
861+ $Tuple2(nil, $Tuple3(fe, dt, eW))
851862 }
852863
853864
854865
855866 @Callable(df)
856-func unstakeAndGetOneTkn (fe,eX,eK) = {
857- let eM = {
858- let eN = invoke(aD, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
859- if ($isInstanceOf(eN, "Boolean"))
860- then eN
861- else throw(($getType(eN) + " couldn't be cast to Boolean"))
867+func unstakeAndGetOneTkn (fi,fb,eO) = {
868+ let eQ = {
869+ let eR = invoke(aD, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
870+ if ($isInstanceOf(eR, "Boolean"))
871+ then eR
872+ else throw(($getType(eR) + " couldn't be cast to Boolean"))
862873 }
863- let eY = if (if (aF())
874+ let fc = if (if (aF())
864875 then true
865876 else (aS == n))
866877 then true
867- else eM
868- let ea = [if (!(eY))
878+ else eQ
879+ let ed = [if (!(fc))
869880 then true
870881 else aB("get operation is blocked by admin"), if ((size(df.payments) == 0))
871882 then true
872883 else aB("no payments are expected")]
873- if ((ea == ea))
884+ if ((ed == ed))
874885 then {
875- let dZ = aK(eX)
886+ let ec = aK(fb)
876887 let X = df.caller
877888 let Y = df.transactionId
878- let ff = invoke(aZ, "unstake", [toBase58String(aT), fe], nil)
879- if ((ff == ff))
889+ let fj = invoke(aZ, "unstake", [toBase58String(aT), fi], nil)
890+ if ((fj == fj))
880891 then {
881- let fg = dY(dZ, fe, aT, X, Y)
882- let fa = fg._1
883- let cP = fg._2
884- let dt = fg._3
885- let eS = fg._4
886- let dn = if (if ((eK > 0))
887- then (eK > fa)
892+ let fk = eb(ec, fi, aT, X, Y)
893+ let fe = fk._1
894+ let cP = fk._2
895+ let dt = fk._3
896+ let eW = fk._4
897+ let dn = if (if ((eO > 0))
898+ then (eO > fe)
888899 else false)
889- then aB(makeString(["amount to receive is less than ", toString(eK)], ""))
890- else fa
891- let fb = invoke(aD, "burn", [fe], [AttachedPayment(aT, fe)])
892- if ((fb == fb))
900+ then aB(makeString(["amount to receive is less than ", toString(eO)], ""))
901+ else fe
902+ let ff = invoke(aD, "burn", [fi], [AttachedPayment(aT, fi)])
903+ if ((ff == ff))
893904 then {
894- let fc = [ScriptTransfer(df.caller, dn, dZ)]
895- let eV = if ((dt > 0))
896- then [ScriptTransfer(aE, dt, dZ)]
905+ let fg = [ScriptTransfer(df.caller, dn, ec)]
906+ let eZ = if ((dt > 0))
907+ then [ScriptTransfer(aE, dt, ec)]
897908 else nil
898- $Tuple2(((cP ++ fc) ++ eV), dn)
909+ $Tuple2(((cP ++ fg) ++ eZ), dn)
899910 }
900911 else throw("Strict value is not equal to itself.")
901912 }
902913 else throw("Strict value is not equal to itself.")
903914 }
904915 else throw("Strict value is not equal to itself.")
905916 }
906917
907918
908919
909920 @Callable(df)
910921 func get () = {
911922 let cA = de(df)
912- let fh = cA._1
923+ let fl = cA._1
913924 let ch = cA._2
914925 let dh = cA._3
915926 let bP = cA._4
916927 let ci = cA._5
917- let fi = invoke(aD, "burn", [dh], [AttachedPayment(bP, dh)])
918- if ((fi == fi))
928+ let fm = invoke(aD, "burn", [dh], [AttachedPayment(bP, dh)])
929+ if ((fm == fm))
919930 then ci
920931 else throw("Strict value is not equal to itself.")
921932 }
922933
923934
924935
925936 @Callable(df)
926-func getNoLess (fj,fk) = {
937+func getNoLess (fn,fo) = {
927938 let cA = de(df)
928939 let cg = cA._1
929940 let ch = cA._2
930941 let dh = cA._3
931942 let bP = cA._4
932943 let ci = cA._5
933- if ((fj > cg))
934- then throw(((("noLessThenAmtAsset failed: " + toString(cg)) + " < ") + toString(fj)))
935- else if ((fk > ch))
936- then throw(((("noLessThenPriceAsset failed: " + toString(ch)) + " < ") + toString(fk)))
944+ if ((fn > cg))
945+ then throw(((("noLessThenAmtAsset failed: " + toString(cg)) + " < ") + toString(fn)))
946+ else if ((fo > ch))
947+ then throw(((("noLessThenPriceAsset failed: " + toString(ch)) + " < ") + toString(fo)))
937948 else {
938- let fi = invoke(aD, "burn", [dh], [AttachedPayment(bP, dh)])
939- if ((fi == fi))
949+ let fm = invoke(aD, "burn", [dh], [AttachedPayment(bP, dh)])
950+ if ((fm == fm))
940951 then ci
941952 else throw("Strict value is not equal to itself.")
942953 }
943954 }
944955
945956
946957
947958 @Callable(df)
948959 func unstakeAndGet (dn) = {
949- let fl = if ((size(df.payments) != 0))
960+ let fp = if ((size(df.payments) != 0))
950961 then throw("No payments are expected")
951962 else true
952- if ((fl == fl))
963+ if ((fp == fp))
953964 then {
954965 let bE = aH()
955966 let bR = fromBase58String(bE[q])
956- let ff = invoke(aZ, "unstake", [toBase58String(bR), dn], nil)
957- if ((ff == ff))
967+ let fj = invoke(aZ, "unstake", [toBase58String(bR), dn], nil)
968+ if ((fj == fj))
958969 then {
959970 let cA = bN(toBase58String(df.transactionId), toBase58String(bR), dn, df.caller)
960971 let bU = parseIntValue(cA._9)
961972 let ci = cA._10
962- let fm = if (if (aF())
973+ let fq = if (if (aF())
963974 then true
964975 else (bU == n))
965976 then throw(("Get operation is blocked by admin. Status = " + toString(bU)))
966977 else true
967- if ((fm == fm))
978+ if ((fq == fq))
968979 then {
969- let fi = invoke(aD, "burn", [dn], [AttachedPayment(bR, dn)])
970- if ((fi == fi))
980+ let fm = invoke(aD, "burn", [dn], [AttachedPayment(bR, dn)])
981+ if ((fm == fm))
971982 then ci
972983 else throw("Strict value is not equal to itself.")
973984 }
974985 else throw("Strict value is not equal to itself.")
975986 }
976987 else throw("Strict value is not equal to itself.")
977988 }
978989 else throw("Strict value is not equal to itself.")
979990 }
980991
981992
982993
983994 @Callable(df)
984-func activate (fn,fo) = if ((toString(df.caller) != toString(aD)))
995+func unstakeAndGetNoLess (fi,fr,fo) = {
996+ let fc = if (aF())
997+ then true
998+ else (aS == n)
999+ let ed = [if (!(fc))
1000+ then true
1001+ else throw("get operation is blocked by admin"), if ((size(df.payments) == 0))
1002+ then true
1003+ else throw("no payments are expected")]
1004+ if ((ed == ed))
1005+ then {
1006+ let fj = invoke(aZ, "unstake", [toBase58String(aT), fi], nil)
1007+ if ((fj == fj))
1008+ then {
1009+ let cA = bN(toBase58String(df.transactionId), toBase58String(aT), fi, df.caller)
1010+ let cg = cA._1
1011+ let ch = cA._2
1012+ let ci = cA._10
1013+ let fs = [if ((cg >= fr))
1014+ then true
1015+ else throw(makeString(["amount asset amount to receive is less than ", toString(fr)], "")), if ((ch >= fo))
1016+ then true
1017+ else throw(makeString(["price asset amount to receive is less than ", toString(fo)], ""))]
1018+ if ((fs == fs))
1019+ then {
1020+ let fm = invoke(aD, "burn", [fi], [AttachedPayment(aT, fi)])
1021+ if ((fm == fm))
1022+ then ci
1023+ else throw("Strict value is not equal to itself.")
1024+ }
1025+ else throw("Strict value is not equal to itself.")
1026+ }
1027+ else throw("Strict value is not equal to itself.")
1028+ }
1029+ else throw("Strict value is not equal to itself.")
1030+ }
1031+
1032+
1033+
1034+@Callable(df)
1035+func activate (ft,fu) = if ((toString(df.caller) != toString(aD)))
9851036 then throw("permissions denied")
986- else $Tuple2([StringEntry(aa(), fn), StringEntry(ab(), fo)], "success")
1037+ else $Tuple2([StringEntry(aa(), ft), StringEntry(ab(), fu)], "success")
9871038
9881039
9891040
9901041 @Callable(df)
9911042 func getPoolConfigWrapperREADONLY () = $Tuple2(nil, aH())
9921043
9931044
9941045
9951046 @Callable(df)
9961047 func getAccBalanceWrapperREADONLY (br) = $Tuple2(nil, bq(br))
9971048
9981049
9991050
10001051 @Callable(df)
10011052 func calcPricesWrapperREADONLY (by,bz,bD) = {
10021053 let bM = bC(by, bz, bD)
10031054 $Tuple2(nil, [toString(bM[0]), toString(bM[1]), toString(bM[2])])
10041055 }
10051056
10061057
10071058
10081059 @Callable(df)
10091060 func toX18WrapperREADONLY (E,F) = $Tuple2(nil, toString(D(E, F)))
10101061
10111062
10121063
10131064 @Callable(df)
10141065 func fromX18WrapperREADONLY (H,I) = $Tuple2(nil, G(parseBigIntValue(H), I))
10151066
10161067
10171068
10181069 @Callable(df)
10191070 func calcPriceBigIntWrapperREADONLY (bt,bu) = $Tuple2(nil, toString(bs(parseBigIntValue(bt), parseBigIntValue(bu))))
10201071
10211072
10221073
10231074 @Callable(df)
10241075 func estimatePutOperationWrapperREADONLY (bO,ck,cl,cm,cn,co,X,cp,cq) = $Tuple2(nil, cj(bO, ck, cl, cm, cn, co, X, cp, cq))
10251076
10261077
10271078
10281079 @Callable(df)
10291080 func estimateGetOperationWrapperREADONLY (bO,bP,bQ,X) = {
10301081 let cA = bN(bO, bP, bQ, addressFromStringValue(X))
10311082 $Tuple2(nil, $Tuple10(cA._1, cA._2, cA._3, cA._4, cA._5, cA._6, cA._7, toString(cA._8), cA._9, cA._10))
10321083 }
10331084
10341085
10351086
10361087 @Callable(df)
10371088 func statsREADONLY () = {
10381089 let bE = aH()
10391090 let bR = fromBase58String(bE[q])
10401091 let cS = bE[r]
10411092 let cT = bE[s]
10421093 let ct = bE[v]
10431094 let cu = bE[w]
10441095 let bF = parseIntValue(bE[t])
10451096 let bG = parseIntValue(bE[u])
1046- let fp = valueOrErrorMessage(assetInfo(bR), (("Asset " + toBase58String(bR)) + " doesn't exist")).quantity
1097+ let fv = valueOrErrorMessage(assetInfo(bR), (("Asset " + toBase58String(bR)) + " doesn't exist")).quantity
10471098 let cU = bq(cS)
10481099 let cV = bq(cT)
1049- let fq = if ((fp == 0))
1100+ let fw = if ((fv == 0))
10501101 then [e, e, e]
1051- else bC(cU, cV, fp)
1102+ else bC(cU, cV, fv)
10521103 let cb = 0
1053- let fr = G(fq[1], b)
1054- let fs = G(fq[2], b)
1055- let ft = value(getInteger(aD, ap(toString(this))))
1056- $Tuple2(nil, makeString(["%d%d%d%d%d%d%d", toString(cU), toString(cV), toString(fp), toString(cb), toString(fr), toString(fs), toString(ft)], j))
1104+ let fx = G(fw[1], b)
1105+ let fy = G(fw[2], b)
1106+ let fz = value(getInteger(aD, ap(toString(this))))
1107+ $Tuple2(nil, makeString(["%d%d%d%d%d%d%d", toString(cU), toString(cV), toString(fv), toString(cb), toString(fx), toString(fy), toString(fz)], j))
10571108 }
10581109
10591110
10601111
10611112 @Callable(df)
10621113 func evaluatePutByAmountAssetREADONLY (cl) = {
10631114 let bE = aH()
10641115 let bR = fromBase58String(bE[q])
10651116 let cr = bE[r]
10661117 let bS = fromBase58String(cr)
10671118 let cs = bE[s]
10681119 let bT = fromBase58String(cs)
10691120 let bF = parseIntValue(bE[t])
10701121 let bG = parseIntValue(bE[u])
10711122 let bU = bE[p]
1072- let fp = valueOrErrorMessage(assetInfo(bR), (("Asset " + toBase58String(bR)) + " doesn't exist")).quantity
1123+ let fv = valueOrErrorMessage(assetInfo(bR), (("Asset " + toBase58String(bR)) + " doesn't exist")).quantity
10731124 let cU = bq(cr)
10741125 let cV = bq(cs)
10751126 let bA = D(cU, bF)
10761127 let bB = D(cV, bG)
1077- let ca = if ((fp == 0))
1128+ let ca = if ((fv == 0))
10781129 then e
10791130 else bs(bB, bA)
10801131 let cx = D(cl, bF)
10811132 let cy = fraction(cx, ca, d)
10821133 let cn = G(cy, bG)
10831134 let dl = cj("", 500000, cl, bS, cn, bT, "", true, false)
10841135 let cI = dl._1
1085- let fu = dl._3
1136+ let fA = dl._3
10861137 let bW = dl._4
10871138 let bY = dl._5
10881139 let bV = dl._6
10891140 $Tuple2(nil, makeString(["%d%d%d%d%d%d%d%d", toString(cI), toString(G(ca, b)), toString(bW), toString(bY), toString(bV), bU, toString(cl), toString(cn)], j))
10901141 }
10911142
10921143
10931144
10941145 @Callable(df)
10951146 func evaluatePutByPriceAssetREADONLY (cn) = {
10961147 let bE = aH()
10971148 let bR = fromBase58String(bE[q])
10981149 let cr = bE[r]
10991150 let bS = fromBase58String(cr)
11001151 let cs = bE[s]
11011152 let bT = fromBase58String(cs)
11021153 let bF = parseIntValue(bE[t])
11031154 let bG = parseIntValue(bE[u])
11041155 let bU = bE[p]
1105- let fp = valueOrErrorMessage(assetInfo(bR), (("Asset " + toBase58String(bR)) + " doesn't exist")).quantity
1106- let fv = bq(cr)
1107- let fw = bq(cs)
1108- let fx = D(fv, bF)
1109- let fy = D(fw, bG)
1110- let ca = if ((fp == 0))
1156+ let fv = valueOrErrorMessage(assetInfo(bR), (("Asset " + toBase58String(bR)) + " doesn't exist")).quantity
1157+ let fB = bq(cr)
1158+ let fC = bq(cs)
1159+ let fD = D(fB, bF)
1160+ let fE = D(fC, bG)
1161+ let ca = if ((fv == 0))
11111162 then e
1112- else bs(fy, fx)
1163+ else bs(fE, fD)
11131164 let cy = D(cn, bG)
11141165 let cx = fraction(cy, d, ca)
11151166 let cl = G(cx, bF)
11161167 let dl = cj("", 500000, cl, bS, cn, bT, "", true, false)
11171168 let cI = dl._1
1118- let fu = dl._3
1169+ let fA = dl._3
11191170 let bW = dl._4
11201171 let bY = dl._5
11211172 let bV = dl._6
11221173 $Tuple2(nil, makeString(["%d%d%d%d%d%d%d%d", toString(cI), toString(G(ca, b)), toString(bW), toString(bY), toString(bV), bU, toString(cl), toString(cn)], j))
11231174 }
11241175
11251176
11261177
11271178 @Callable(df)
1128-func evaluateGetREADONLY (fz,fA) = {
1129- let cA = bN("", fz, fA, this)
1179+func evaluateGetREADONLY (fF,fG) = {
1180+ let cA = bN("", fF, fG, this)
11301181 let cg = cA._1
11311182 let ch = cA._2
11321183 let bW = cA._5
11331184 let bY = cA._6
11341185 let bV = cA._7
11351186 let cb = cA._8
11361187 let bU = parseIntValue(cA._9)
11371188 $Tuple2(nil, makeString(["%d%d%d%d%d%d%d", toString(cg), toString(ch), toString(bW), toString(bY), toString(bV), toString(cb), toString(bU)], j))
11381189 }
11391190
11401191
1141-@Verifier(fB)
1142-func fC () = {
1143- let fD = {
1144- let dq = eq()
1192+@Verifier(fH)
1193+func fI () = {
1194+ let fJ = {
1195+ let dq = eu()
11451196 if ($isInstanceOf(dq, "ByteVector"))
11461197 then {
1147- let ev = dq
1148- ev
1198+ let ez = dq
1199+ ez
11491200 }
11501201 else if ($isInstanceOf(dq, "Unit"))
1151- then fB.senderPublicKey
1202+ then fH.senderPublicKey
11521203 else throw("Match error")
11531204 }
1154- let dq = fB
1205+ let dq = fH
11551206 if ($isInstanceOf(dq, "Order"))
11561207 then {
11571208 let cR = dq
1158- let fE = aG()
1209+ let fK = aG()
11591210 let au = cQ(cR)
11601211 let av = sigVerify(cR.bodyBytes, cR.proofs[0], cR.senderPublicKey)
1161- let aw = sigVerify(cR.bodyBytes, cR.proofs[1], fE)
1212+ let aw = sigVerify(cR.bodyBytes, cR.proofs[1], fK)
11621213 if (if (if (au)
11631214 then av
11641215 else false)
11651216 then aw
11661217 else false)
11671218 then true
11681219 else at(au, av, aw)
11691220 }
11701221 else if ($isInstanceOf(dq, "SetScriptTransaction"))
11711222 then {
1172- let er = dq
1173- let fF = blake2b256(value(er.script))
1174- let fG = fromBase64String(value(getString(aD, ar())))
1175- let fH = scriptHash(this)
1176- if (if ((fG == fF))
1177- then (fH != fF)
1223+ let ev = dq
1224+ let fL = blake2b256(value(ev.script))
1225+ let fM = fromBase64String(value(getString(aD, ar())))
1226+ let fN = scriptHash(this)
1227+ if (if ((fM == fL))
1228+ then (fN != fL)
11781229 else false)
11791230 then true
1180- else sigVerify(fB.bodyBytes, fB.proofs[0], fD)
1231+ else sigVerify(fH.bodyBytes, fH.proofs[0], fJ)
11811232 }
1182- else sigVerify(fB.bodyBytes, fB.proofs[0], fD)
1233+ else sigVerify(fH.bodyBytes, fH.proofs[0], fJ)
11831234 }
11841235

github/deemru/w8io/6500d08 
205.09 ms