tx · 96sMmhAHfi51m3gdKZLMh7pZoqV6turm5RKwDmS82PXG

3MpaDTfGahKAdXB9PeznNThKz6Nw1G2gxJB:  -0.02900000 Waves

2022.10.24 18:10 [2286657] smart account 3MpaDTfGahKAdXB9PeznNThKz6Nw1G2gxJB > SELF 0.00000000 Waves

{ "type": 13, "id": "96sMmhAHfi51m3gdKZLMh7pZoqV6turm5RKwDmS82PXG", "fee": 2900000, "feeAssetId": null, "timestamp": 1666624207198, "version": 1, "sender": "3MpaDTfGahKAdXB9PeznNThKz6Nw1G2gxJB", "senderPublicKey": "8xq2GREVKUe7SKE2XzJzQnB97tmj2C3rmEhTseHdpgXM", "proofs": [ "3L5zqMdRNcvZKHKywhUpCcbyUeB1TnJC5pPZVN16fcXWxqjfYoBNv9tpd3BwKSk7HZeY9ASRnvMpk1uuwhTgfpyY" ], "script": "base64:BgKyJwgCEgMKAQgSABIECgIBBBIDCgEBEgQKAgEEEgQKAggBEgQKAggBEgQKAggBEgUKAwEIARIAEgQKAgEBEgMKAQESBAoCCAgSABIDCgEIEgUKAwEBARIECgIBARIECgIIARIECgIICBILCgkIAQECAQIIBAQSBgoECAgBCBIAEgMKAQESAwoBARIECgIIASIKbFBkZWNpbWFscyIGc2NhbGU4IgxzY2FsZThCaWdJbnQiB3NjYWxlMTgiCnplcm9CaWdJbnQiBGJpZzAiBGJpZzEiBGJpZzIiC3dhdmVzU3RyaW5nIgNTRVAiClBvb2xBY3RpdmUiD1Bvb2xQdXREaXNhYmxlZCITUG9vbE1hdGNoZXJEaXNhYmxlZCIMUG9vbFNodXRkb3duIg5pZHhQb29sQWRkcmVzcyINaWR4UG9vbFN0YXR1cyIQaWR4UG9vbExQQXNzZXRJZCINaWR4QW10QXNzZXRJZCIPaWR4UHJpY2VBc3NldElkIg5pZHhBbXRBc3NldERjbSIQaWR4UHJpY2VBc3NldERjbSIOaWR4SUFtdEFzc2V0SWQiEGlkeElQcmljZUFzc2V0SWQiDWlkeExQQXNzZXREY20iEmlkeFBvb2xBbXRBc3NldEFtdCIUaWR4UG9vbFByaWNlQXNzZXRBbXQiEWlkeFBvb2xMUEFzc2V0QW10IhlpZHhGYWN0b3J5U3Rha2luZ0NvbnRyYWN0IhppZHhGYWN0b3J5U2xpcHBhZ2VDb250cmFjdCIFdG9YMTgiB29yaWdWYWwiDW9yaWdTY2FsZU11bHQiB2Zyb21YMTgiA3ZhbCIPcmVzdWx0U2NhbGVNdWx0Igd0b1NjYWxlIgNhbXQiCHJlc1NjYWxlIghjdXJTY2FsZSIDYWJzIgJmYyIDbXBrIgRwbXBrIgJwbCICcGgiAWgiCXRpbWVzdGFtcCIDcGF1Igt1c2VyQWRkcmVzcyIEdHhJZCIDZ2F1IgJhYSICcGEiBmtleUZlZSIKZmVlRGVmYXVsdCIDZmVlIhBrZXlGYWN0b3J5Q29uZmlnIg1rZXlNYXRjaGVyUHViIilrZXlNYXBwaW5nUG9vbENvbnRyYWN0QWRkcmVzc1RvUG9vbEFzc2V0cyITcG9vbENvbnRyYWN0QWRkcmVzcyINa2V5UG9vbENvbmZpZyIJaUFtdEFzc2V0IgtpUHJpY2VBc3NldCIfa2V5TWFwcGluZ3NCYXNlQXNzZXQyaW50ZXJuYWxJZCIMYmFzZUFzc2V0U3RyIhNrZXlBbGxQb29sc1NodXRkb3duIg1rZXlQb29sV2VpZ2h0Ig9jb250cmFjdEFkZHJlc3MiFmtleUFsbG93ZWRMcFNjcmlwdEhhc2giFmtleUZlZUNvbGxlY3RvckFkZHJlc3MiD3Rocm93T3JkZXJFcnJvciIKb3JkZXJWYWxpZCILc2VuZGVyVmFsaWQiDG1hdGNoZXJWYWxpZCIPZ2V0U3RyaW5nT3JGYWlsIgdhZGRyZXNzIgNrZXkiDGdldEludE9yRmFpbCIIdGhyb3dFcnIiA21zZyIPZmFjdG9yeUNvbnRyYWN0IhNmZWVDb2xsZWN0b3JBZGRyZXNzIhBpc0dsb2JhbFNodXRkb3duIhNnZXRNYXRjaGVyUHViT3JGYWlsIg1nZXRQb29sQ29uZmlnIghhbXRBc3NldCIKcHJpY2VBc3NldCIMcGFyc2VBc3NldElkIgVpbnB1dCIPYXNzZXRJZFRvU3RyaW5nIg9wYXJzZVBvb2xDb25maWciCnBvb2xDb25maWciEHBvb2xDb25maWdQYXJzZWQiCyR0MDc0ODQ3NjUwIg5jZmdQb29sQWRkcmVzcyINY2ZnUG9vbFN0YXR1cyIMY2ZnTHBBc3NldElkIhBjZmdBbW91bnRBc3NldElkIg9jZmdQcmljZUFzc2V0SWQiFmNmZ0Ftb3VudEFzc2V0RGVjaW1hbHMiFWNmZ1ByaWNlQXNzZXREZWNpbWFscyIQZ2V0RmFjdG9yeUNvbmZpZyIPc3Rha2luZ0NvbnRyYWN0IhBzbGlwcGFnZUNvbnRyYWN0IhFkYXRhUHV0QWN0aW9uSW5mbyINaW5BbXRBc3NldEFtdCIPaW5QcmljZUFzc2V0QW10IghvdXRMcEFtdCIFcHJpY2UiHXNsaXBwYWdlVG9sZXJhbmNlUGFzc2VkQnlVc2VyIhVzbGlwcGFnZVRvbGVyYW5jZVJlYWwiCHR4SGVpZ2h0Igt0eFRpbWVzdGFtcCISc2xpcGFnZUFtdEFzc2V0QW10IhRzbGlwYWdlUHJpY2VBc3NldEFtdCIRZGF0YUdldEFjdGlvbkluZm8iDm91dEFtdEFzc2V0QW10IhBvdXRQcmljZUFzc2V0QW10IgdpbkxwQW10Ig1nZXRBY2NCYWxhbmNlIgdhc3NldElkIg9jYWxjUHJpY2VCaWdJbnQiCHByQW10WDE4IghhbUFtdFgxOCIQcHJpdmF0ZUNhbGNQcmljZSIKYW1Bc3NldERjbSIKcHJBc3NldERjbSIFYW1BbXQiBXByQW10Ig5hbXRBc3NldEFtdFgxOCIQcHJpY2VBc3NldEFtdFgxOCIKY2FsY1ByaWNlcyIFbHBBbXQiA2NmZyILYW10QXNzZXREY20iDXByaWNlQXNzZXREY20iCHByaWNlWDE4IghscEFtdFgxOCITbHBQcmljZUluQW1Bc3NldFgxOCITbHBQcmljZUluUHJBc3NldFgxOCIPY2FsY3VsYXRlUHJpY2VzIgZwcmljZXMiFGVzdGltYXRlR2V0T3BlcmF0aW9uIgZ0eElkNTgiCnBtdEFzc2V0SWQiCHBtdExwQW10IglscEFzc2V0SWQiCWFtQXNzZXRJZCIJcHJBc3NldElkIgpwb29sU3RhdHVzIgpscEVtaXNzaW9uIglhbUJhbGFuY2UiDGFtQmFsYW5jZVgxOCIJcHJCYWxhbmNlIgxwckJhbGFuY2VYMTgiC2N1clByaWNlWDE4IghjdXJQcmljZSILcG10THBBbXRYMTgiDWxwRW1pc3Npb25YMTgiC291dEFtQW10WDE4IgtvdXRQckFtdFgxOCIIb3V0QW1BbXQiCG91dFByQW10IgVzdGF0ZSIUZXN0aW1hdGVQdXRPcGVyYXRpb24iEXNsaXBwYWdlVG9sZXJhbmNlIgxpbkFtQXNzZXRBbXQiC2luQW1Bc3NldElkIgxpblByQXNzZXRBbXQiC2luUHJBc3NldElkIgppc0V2YWx1YXRlIgZlbWl0THAiDGFtQXNzZXRJZFN0ciIMcHJBc3NldElkU3RyIgtpQW10QXNzZXRJZCINaVByaWNlQXNzZXRJZCIOaW5BbUFzc2V0SWRTdHIiDmluUHJBc3NldElkU3RyIg9pbkFtQXNzZXRBbXRYMTgiD2luUHJBc3NldEFtdFgxOCIMdXNlclByaWNlWDE4IgNyZXMiC3NsaXBwYWdlWDE4IhRzbGlwcGFnZVRvbGVyYW5jZVgxOCIKcHJWaWFBbVgxOCIKYW1WaWFQclgxOCIMZXhwZWN0ZWRBbXRzIhFleHBBbXRBc3NldEFtdFgxOCITZXhwUHJpY2VBc3NldEFtdFgxOCIJY2FsY0xwQW10Ig5jYWxjQW1Bc3NldFBtdCIOY2FsY1ByQXNzZXRQbXQiDHNsaXBwYWdlQ2FsYyIJZW1pdExwQW10IgZhbURpZmYiBnByRGlmZiILY29tbW9uU3RhdGUiG3ZhbGlkYXRlTWF0Y2hlck9yZGVyQWxsb3dlZCIFb3JkZXIiCmFtdEFzc2V0SWQiDHByaWNlQXNzZXRJZCISYWNjQW10QXNzZXRCYWxhbmNlIhRhY2NQcmljZUFzc2V0QmFsYW5jZSINb3JkZXJBbXRBc3NldCIQb3JkZXJBbXRBc3NldFN0ciIPb3JkZXJQcmljZUFzc2V0IhJvcmRlclByaWNlQXNzZXRTdHIiCm9yZGVyUHJpY2UiCHByaWNlRGNtIhBjYXN0ZWRPcmRlclByaWNlIhFpc09yZGVyUHJpY2VWYWxpZCIJY29tbW9uR2V0IgFpIgNwbXQiBnBtdEFtdCIJY29tbW9uUHV0IgphbUFzc2V0UG10IgpwckFzc2V0UG10IgZlc3RQdXQiBGVtaXQiBmFtb3VudCIHZW1pdEludiINZW1pdEludkxlZ2FjeSIHJG1hdGNoMCIVbGVnYWN5RmFjdG9yeUNvbnRyYWN0Igd0YWtlRmVlIglmZWVBbW91bnQiD2NhbGNQdXRPbmVUb2tlbiIQcGF5bWVudEFtb3VudFJhdyIOcGF5bWVudEFzc2V0SWQiBmlzRXZhbCINJHQwMjIxNjcyMjM0NSILcG9vbEFkZHJlc3MiDWFtb3VudEFzc2V0SWQiE2Ftb3VudEFzc2V0RGVjaW1hbHMiEnByaWNlQXNzZXREZWNpbWFscyIQYW1vdW50QmFsYW5jZVJhdyIPcHJpY2VCYWxhbmNlUmF3IhRwYXltZW50SW5BbW91bnRBc3NldCINJHQwMjI2NzUyMjk2OCIQYW1vdW50QmFsYW5jZU9sZCIPcHJpY2VCYWxhbmNlT2xkIg0kdDAyMjk3MjIzMTIxIhRhbW91bnRBc3NldEFtb3VudFJhdyITcHJpY2VBc3NldEFtb3VudFJhdyIRYW1vdW50QXNzZXRBbW91bnQiEHByaWNlQXNzZXRBbW91bnQiDSR0MDIzMjQzMjMzMDIiDXBheW1lbnRBbW91bnQiEGFtb3VudEJhbGFuY2VOZXciD3ByaWNlQmFsYW5jZU5ldyIOcGF5bWVudEJhbGFuY2UiFHBheW1lbnRCYWxhbmNlQmlnSW50IgxzdXBwbHlCaWdJbnQiC2NoZWNoU3VwcGx5Ig1kZXBvc2l0QmlnSW50Igtpc3N1ZUFtb3VudCIOcG9vbFByb3BvcnRpb24iD2Ftb3VudEFzc2V0UGFydCIOcHJpY2VBc3NldFBhcnQiCWxwQW10Qm90aCIFYm9udXMiD2NhbGNHZXRPbmVUb2tlbiIKb3V0QXNzZXRJZCINJHQwMjUzNjMyNTUyNCIKYW1EZWNpbWFscyIKcHJEZWNpbWFscyIGY2hlY2tzIhBvdXRJbkFtb3VudEFzc2V0Ig1iYWxhbmNlQmlnSW50IgxhbUJhbGFuY2VPbGQiDHByQmFsYW5jZU9sZCIKb3V0QmFsYW5jZSIQb3V0QmFsYW5jZUJpZ0ludCIOcmVkZWVtZWRCaWdJbnQiCWFtb3VudFJhdyINJHQwMjY1OTkyNjY0OSILdG90YWxBbW91bnQiDSR0MDI2NjUzMjY4NzkiC291dEFtQW1vdW50IgtvdXRQckFtb3VudCIMYW1CYWxhbmNlTmV3IgxwckJhbGFuY2VOZXciCGN1clByWDE4IgFyIg5zdW1PZkdldEFzc2V0cyIWbWFuYWdlclB1YmxpY0tleU9yVW5pdCIBcyIdcGVuZGluZ01hbmFnZXJQdWJsaWNLZXlPclVuaXQiC211c3RNYW5hZ2VyIgJwZCICcGsiF3BlbmRpbmdNYW5hZ2VyUHVibGljS2V5IgtjaGVja0NhbGxlciIVY2hlY2tNYW5hZ2VyUHVibGljS2V5IgJwbSIFaGFzUE0iB2NoZWNrUE0iD3Nob3VsZEF1dG9TdGFrZSIEYW1JZCIEcHJJZCIMc2xpcHBhZ2VBSW52IgxzbGlwcGFnZVBJbnYiCmxwVHJhbnNmZXIiC3NscFN0YWtlSW52IgttYXhTbGlwcGFnZSIMbWluT3V0QW1vdW50IglhdXRvU3Rha2UiDWlzUHV0RGlzYWJsZWQiB3BheW1lbnQiDSR0MDMxMzQ2MzE0NzMiE2VtaXRBbW91bnRFc3RpbWF0ZWQiCmVtaXRBbW91bnQiCHN0YWtlSW52IgdzZW5kRmVlIg0kdDAzMjIwMjMyMzM3Ig1vdXRBc3NldElkU3RyIg1pc0dldERpc2FibGVkIg0kdDAzMjkyNTMzMDU3Ig9hbW91bnRFc3RpbWF0ZWQiB2J1cm5JbnYiDWFzc2V0VHJhbnNmZXIiDSR0MDMzNjkyMzM4MzAiDXVuc3Rha2VBbW91bnQiCnVuc3Rha2VJbnYiDSR0MDM0MzgwMzQ1MDMiCW91dEFtdEFtdCIUYnVybkxQQXNzZXRPbkZhY3RvcnkiEm5vTGVzc1RoZW5BbXRBc3NldCIUbm9MZXNzVGhlblByaWNlQXNzZXQiDWNoZWNrUGF5bWVudHMiD2NoZWNrUG9vbFN0YXR1cyILYW10QXNzZXRTdHIiDXByaWNlQXNzZXRTdHIiDXBvb2xMUEJhbGFuY2UiCnByaWNlc0xpc3QiD2xwQW10QXNzZXRTaGFyZSIRbHBQcmljZUFzc2V0U2hhcmUiCnBvb2xXZWlnaHQiDGN1clByaWNlQ2FsYyIMYW1CYWxhbmNlUmF3IgxwckJhbGFuY2VSYXciD2FtQmFsYW5jZVJhd1gxOCIPcHJCYWxhbmNlUmF3WDE4IhBwYXltZW50THBBc3NldElkIgxwYXltZW50THBBbXQiAnR4IgZ2ZXJpZnkiD3RhcmdldFB1YmxpY0tleSIKbWF0Y2hlclB1YiIHbmV3SGFzaCILYWxsb3dlZEhhc2giC2N1cnJlbnRIYXNoYQABYQAIAAFiAIDC1y8AAWMJALYCAQCAwtcvAAFkCQC2AgEAgICQu7rWrfANAAFlCQC2AgEAAAABZgkAtgIBAAAAAWcJALYCAQABAAFoCQC2AgEAAgABaQIFV0FWRVMAAWoCAl9fAAFrAAEAAWwAAgABbQADAAFuAAQAAW8AAQABcAACAAFxAAMAAXIABAABcwAFAAF0AAYAAXUABwABdgAIAAF3AAkAAXgACgABeQABAAF6AAIAAUEAAwABQgABAAFDAAcBAUQCAUUBRgkAvAIDCQC2AgEFAUUFAWQJALYCAQUBRgEBRwIBSAFJCQCgAwEJALwCAwUBSAkAtgIBBQFJBQFkAQFKAwFLAUwBTQkAawMFAUsFAUwFAU0BAU4BAUgDCQC/AgIFAWUFAUgJAL4CAQUBSAUBSAEBTwACEyVzX19mYWN0b3J5Q29udHJhY3QBAVAAAhQlc19fbWFuYWdlclB1YmxpY0tleQEBUQACGyVzX19wZW5kaW5nTWFuYWdlclB1YmxpY0tleQEBUgACESVzJXNfX3ByaWNlX19sYXN0AQFTAgFUAVUJALkJAgkAzAgCAhglcyVzJWQlZF9fcHJpY2VfX2hpc3RvcnkJAMwIAgkApAMBBQFUCQDMCAIJAKQDAQUBVQUDbmlsBQFqAQFWAgFXAVgJAKwCAgkArAICCQCsAgICCyVzJXMlc19fUF9fBQFXAgJfXwUBWAEBWQIBVwFYCQCsAgIJAKwCAgkArAICAgslcyVzJXNfX0dfXwUBVwICX18FAVgBAVoAAg8lc19fYW1vdW50QXNzZXQBAmFhAAIOJXNfX3ByaWNlQXNzZXQAAmFiAgclc19fZmVlAAJhYwkAawMABQUBYgCQTgACYWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUCYWIFAmFjAQJhZQACESVzX19mYWN0b3J5Q29uZmlnAQJhZgACGCVzJXNfX21hdGNoZXJfX3B1YmxpY0tleQECYWcBAmFoCQCsAgIJAKwCAgIIJXMlcyVzX18FAmFoAiBfX21hcHBpbmdzX19wb29sQ29udHJhY3QyTHBBc3NldAECYWkCAmFqAmFrCQCsAgIJAKwCAgkArAICCQCsAgICCCVkJWQlc19fBQJhagICX18FAmFrAghfX2NvbmZpZwECYWwBAmFtCQCsAgICKCVzJXMlc19fbWFwcGluZ3NfX2Jhc2VBc3NldDJpbnRlcm5hbElkX18FAmFtAQJhbgACDCVzX19zaHV0ZG93bgECYW8BAmFwCQCsAgICEiVzJXNfX3Bvb2xXZWlnaHRfXwUCYXABAmFxAAIXJXNfX2FsbG93ZWRMcFNjcmlwdEhhc2gAAmFyAhclc19fZmVlQ29sbGVjdG9yQWRkcmVzcwECYXMDAmF0AmF1AmF2CQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgICJG9yZGVyIHZhbGlkYXRpb24gZmFpbGVkOiBvcmRlclZhbGlkPQkApQMBBQJhdAINIHNlbmRlclZhbGlkPQkApQMBBQJhdQIOIG1hdGNoZXJWYWxpZD0JAKUDAQUCYXYBAmF3AgJheAJheQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFAmF4BQJheQkAuQkCCQDMCAICCm1hbmRhdG9yeSAJAMwIAgkApQgBBQJheAkAzAgCAgEuCQDMCAIFAmF5CQDMCAICDyBpcyBub3QgZGVmaW5lZAUDbmlsAgABAmF6AgJheAJheQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFAmF4BQJheQkAuQkCCQDMCAICCm1hbmRhdG9yeSAJAMwIAgkApQgBBQJheAkAzAgCAgEuCQDMCAIFAmF5CQDMCAICDyBpcyBub3QgZGVmaW5lZAUDbmlsAgABAmFBAQJhQgkAAgEJALkJAgkAzAgCAghscC5yaWRlOgkAzAgCBQJhQgUDbmlsAgEgAAJhQwkBEUBleHRyTmF0aXZlKDEwNjIpAQkBAmF3AgUEdGhpcwkBAU8AAAJhRAkBEUBleHRyTmF0aXZlKDEwNjIpAQkBAmF3AgUCYUMFAmFyAQJhRQAJAQt2YWx1ZU9yRWxzZQIJAJsIAgUCYUMJAQJhbgAHAQJhRgAJANkEAQkBAmF3AgUCYUMJAQJhZgABAmFHAAQCYUgJAQJhdwIFBHRoaXMJAQFaAAQCYUkJAQJhdwIFBHRoaXMJAQJhYQAEAmFrCQECYXoCBQJhQwkBAmFsAQUCYUkEAmFqCQECYXoCBQJhQwkBAmFsAQUCYUgJALUJAgkBAmF3AgUCYUMJAQJhaQIJAKQDAQUCYWoJAKQDAQUCYWsFAWoBAmFKAQJhSwMJAAACBQJhSwUBaQUEdW5pdAkA2QQBBQJhSwECYUwBAmFLAwkAAAIFAmFLBQR1bml0BQFpCQDYBAEJAQV2YWx1ZQEFAmFLAQJhTQECYU4JAJkKBwkBEUBleHRyTmF0aXZlKDEwNjIpAQkAkQMCBQJhTgUBbwkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmFOBQFwCQDZBAEJAJEDAgUCYU4FAXEJAQJhSgEJAJEDAgUCYU4FAXIJAQJhSgEJAJEDAgUCYU4FAXMJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJhTgUBdAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmFOBQF1AAJhTwkBAmFNAQkBAmFHAAACYVAFAmFPAAJhUQgFAmFQAl8xAAJhUggFAmFQAl8yAAJhUwgFAmFQAl8zAAJhVAgFAmFQAl80AAJhVQgFAmFQAl81AAJhVggFAmFQAl82AAJhVwgFAmFQAl83AQJhWAAJALUJAgkBAmF3AgUCYUMJAQJhZQAFAWoAAmFZCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkAkQMCCQECYVgABQFCAhlpbmNvcnJlY3Qgc3Rha2luZyBhZGRyZXNzAAJhWgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJAJEDAgkBAmFYAAUBQwIZaW5jb3JyZWN0IHN0YWtpbmcgYWRkcmVzcwECYmEKAmJiAmJjAmJkAmJlAmJmAmJnAmJoAmJpAmJqAmJrCQC5CQIJAMwIAgIUJWQlZCVkJWQlZCVkJWQlZCVkJWQJAMwIAgkApAMBBQJiYgkAzAgCCQCkAwEFAmJjCQDMCAIJAKQDAQUCYmQJAMwIAgkApAMBBQJiZQkAzAgCCQCkAwEFAmJmCQDMCAIJAKQDAQUCYmcJAMwIAgkApAMBBQJiaAkAzAgCCQCkAwEFAmJpCQDMCAIJAKQDAQUCYmoJAMwIAgkApAMBBQJiawUDbmlsBQFqAQJibAYCYm0CYm4CYm8CYmUCYmgCYmkJALkJAgkAzAgCAgwlZCVkJWQlZCVkJWQJAMwIAgkApAMBBQJibQkAzAgCCQCkAwEFAmJuCQDMCAIJAKQDAQUCYm8JAMwIAgkApAMBBQJiZQkAzAgCCQCkAwEFAmJoCQDMCAIJAKQDAQUCYmkFA25pbAUBagECYnABAmJxAwkAAAIFAmJxAgVXQVZFUwgJAO8HAQUEdGhpcwlhdmFpbGFibGUJAPAHAgUEdGhpcwkA2QQBBQJicQECYnICAmJzAmJ0CQC8AgMFAmJzBQFkBQJidAECYnUEAmJ2AmJ3AmJ4AmJ5BAJiegkBAUQCBQJieAUCYnYEAmJBCQEBRAIFAmJ5BQJidwkBAmJyAgUCYkEFAmJ6AQJiQgMCYngCYnkCYkMEAmJECQECYUcABAJiRQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmJEBQF0BAJiRgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmJEBQF1BAJiRwkBAmJ1BAUCYkUFAmJGBQJieAUCYnkEAmJ0CQEBRAIFAmJ4BQJiRQQCYnMJAQFEAgUCYnkFAmJGBAJiSAkBAUQCBQJiQwUBYgQCYkkJAQJicgIFAmJ0BQJiSAQCYkoJAQJicgIFAmJzBQJiSAkAzAgCBQJiRwkAzAgCBQJiSQkAzAgCBQJiSgUDbmlsAQJiSwMCYngCYnkCYkMEAmJMCQECYkIDBQJieAUCYnkFAmJDCQDMCAIJAQFHAgkAkQMCBQJiTAAABQFiCQDMCAIJAQFHAgkAkQMCBQJiTAABBQFiCQDMCAIJAQFHAgkAkQMCBQJiTAACBQFiBQNuaWwBAmJNBAJiTgJiTwJiUAFXBAJiRAkBAmFHAAQCYlEJAJEDAgUCYkQFAXEEAmJSCQCRAwIFAmJEBQFyBAJiUwkAkQMCBQJiRAUBcwQCYnYJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJiRAUBdAQCYncJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJiRAUBdQQCYlQJAJEDAgUCYkQFAXAEAmJVCAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDsBwEJANkEAQUCYlEJAKwCAgkArAICAgZBc3NldCAFAmJRAg4gZG9lc24ndCBleGlzdAhxdWFudGl0eQMJAQIhPQIFAmJRBQJiTwkAAgECFUludmFsaWQgYXNzZXQgcGFzc2VkLgQCYlYJAQJicAEFAmJSBAJiVwkBAUQCBQJiVgUCYnYEAmJYCQECYnABBQJiUwQCYlkJAQFEAgUCYlgFAmJ3BAJiWgkBAmJyAgUCYlkFAmJXBAJjYQkBAUcCBQJiWgUBYgQCY2IJAQFEAgUCYlAFAWIEAmNjCQEBRAIFAmJVBQFiBAJjZAkAvAIDBQJiVwUCY2IFAmNjBAJjZQkAvAIDBQJiWQUCY2IFAmNjBAJjZgkBAUcCBQJjZAUCYnYEAmNnCQEBRwIFAmNlBQJidwQCY2gDCQAAAgUCYk4CAAUDbmlsCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFAVcFAmNmAwkAAAIFAmJSAgVXQVZFUwUEdW5pdAkA2QQBBQJiUgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQFXBQJjZwMJAAACBQJiUwIFV0FWRVMFBHVuaXQJANkEAQUCYlMJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAVkCCQClCAEFAVcFAmJOCQECYmwGBQJjZgUCY2cFAmJQBQJjYQUGaGVpZ2h0CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAVIABQJjYQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAVMCBQZoZWlnaHQIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQJjYQUDbmlsCQCcCgoFAmNmBQJjZwUCYlIFAmJTBQJiVgUCYlgFAmJVBQJiWgUCYlQFAmNoAQJjaQkCYk4CY2oCY2sCY2wCY20CY24BVwJjbwJjcAQCYkQJAQJhRwAEAmJRCQDZBAEJAJEDAgUCYkQFAXEEAmNxCQCRAwIFAmJEBQFyBAJjcgkAkQMCBQJiRAUBcwQCY3MJAJEDAgUCYkQFAXYEAmN0CQCRAwIFAmJEBQF3BAJiRQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmJEBQF0BAJiRgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmJEBQF1BAJiVAkAkQMCBQJiRAUBcAQCYlUICQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQUCYlEJAKwCAgkArAICAgZBc3NldCAJANgEAQUCYlECDiBkb2Vzbid0IGV4aXN0CHF1YW50aXR5BAJjdQkA2AQBCQELdmFsdWVPckVsc2UCBQJjbAkA2QQBAgVXQVZFUwQCY3YJANgEAQkBC3ZhbHVlT3JFbHNlAgUCY24JANkEAQIFV0FWRVMDAwkBAiE9AgUCY3EFAmN1BgkBAiE9AgUCY3IFAmN2CQACAQIiSW52YWxpZCBhbXQgb3IgcHJpY2UgYXNzZXQgcGFzc2VkLgQCYlYDBQJjbwkBAmJwAQUCY3EJAGUCCQECYnABBQJjcQUCY2sEAmJYAwUCY28JAQJicAEFAmNyCQBlAgkBAmJwAQUCY3IFAmNtBAJjdwkBAUQCBQJjawUCYkUEAmN4CQEBRAIFAmNtBQJiRgQCY3kJAQJicgIFAmN4BQJjdwQCYlcJAQFEAgUCYlYFAmJFBAJiWQkBAUQCBQJiWAUCYkYEAmN6AwkAAAIFAmJVAAAEAmJaBQFlBAJjQQUBZQQCYkgJAHYGCQC5AgIFAmN3BQJjeAAACQC2AgEABQABAAAFBERPV04JAJcKBQkBAUcCBQJiSAUBYgkBAUcCBQJjdwUCYkUJAQFHAgUCY3gFAmJGCQECYnICCQC3AgIFAmJZBQJjeAkAtwICBQJiVwUCY3cFAmNBBAJiWgkBAmJyAgUCYlkFAmJXBAJjQQkAvAIDCQEBTgEJALgCAgUCYloFAmN5BQFkBQJiWgQCY0IJAQFEAgUCY2oFAWIDAwkBAiE9AgUCYloFAWUJAL8CAgUCY0EFAmNCBwkAAgEJAKwCAgkArAICCQCsAgICD1ByaWNlIHNsaXBwYWdlIAkApgMBBQJjQQIeIGV4Y2VlZGVkIHRoZSBwYXNzZWQgbGltaXQgb2YgCQCmAwEFAmNCBAJjYwkBAUQCBQJiVQUBYgQCY0MJALwCAwUCY3cFAmJaBQFkBAJjRAkAvAIDBQJjeAUBZAUCYloEAmNFAwkAvwICBQJjQwUCY3gJAJQKAgUCY0QFAmN4CQCUCgIFAmN3BQJjQwQCY0YIBQJjRQJfMQQCY0cIBQJjRQJfMgQCYkgJALwCAwUCY2MFAmNHBQJiWQkAlwoFCQEBRwIFAmJIBQFiCQEBRwIFAmNGBQJiRQkBAUcCBQJjRwUCYkYFAmJaBQJjQQQCY0gIBQJjegJfMQQCY0kIBQJjegJfMgQCY0oIBQJjegJfMwQCY2EJAQFHAggFAmN6Al80BQFiBAJjSwkBAUcCCAUCY3oCXzUFAWIDCQBnAgAABQJjSAkAAgECNkludmFsaWQgY2FsY3VsYXRpb25zLiBMUCBjYWxjdWxhdGVkIGlzIGxlc3MgdGhhbiB6ZXJvLgQCY0wDCQEBIQEFAmNwAAAFAmNIBAJjTQkAZQIFAmNrBQJjSQQCY04JAGUCBQJjbQUCY0oEAmNPCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBUgAFAmNhCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBUwIFBmhlaWdodAgFCWxhc3RCbG9jawl0aW1lc3RhbXAFAmNhCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQFWAgUBVwUCYk4JAQJiYQoFAmNJBQJjSgUCY0wFAmNhBQJjagUCY0sFBmhlaWdodAgFCWxhc3RCbG9jawl0aW1lc3RhbXAFAmNNBQJjTgUDbmlsCQCfCg0FAmNIBQJjTAUCY2EFAmJWBQJiWAUCYlUFAmJRBQJiVAUCY08FAmNNBQJjTgUCY2wFAmNuAQJjUAECY1EEAmJECQECYUcABAJjUgkAkQMCBQJiRAUBcgQCY1MJAJEDAgUCYkQFAXMEAmJUCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCYkQFAXAEAmJFCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCYkQFAXQEAmJGCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCYkQFAXUEAmNUCQECYnABBQJjUgQCY1UJAQJicAEFAmNTBAJiWgMJAAACCAUCY1EJb3JkZXJUeXBlBQNCdXkJAQJidQQFAmJFBQJiRgkAZAIFAmNUCAUCY1EGYW1vdW50BQJjVQkBAmJ1BAUCYkUFAmJGCQBlAgUCY1QIBQJjUQZhbW91bnQFAmNVBAJjYQkBAUcCBQJiWgUBYgMDAwkBAmFFAAYJAAACBQJiVAUBbQYJAAACBQJiVAUBbgkAAgECHEV4Y2hhbmdlIG9wZXJhdGlvbnMgZGlzYWJsZWQEAmNWCAgFAmNRCWFzc2V0UGFpcgthbW91bnRBc3NldAQCY1cDCQAAAgUCY1YFBHVuaXQCBVdBVkVTCQDYBAEJAQV2YWx1ZQEFAmNWBAJjWAgIBQJjUQlhc3NldFBhaXIKcHJpY2VBc3NldAQCY1kDCQAAAgUCY1gFBHVuaXQCBVdBVkVTCQDYBAEJAQV2YWx1ZQEFAmNYAwMJAQIhPQIFAmNXBQJjUgYJAQIhPQIFAmNZBQJjUwkAAgECE1dyb25nIG9yZGVyIGFzc2V0cy4EAmNaCAUCY1EFcHJpY2UEAmRhCQBrAwUBYgUCYkYFAmJFBAJkYgkBAUoDBQJjWgUBYgUCZGEEAmRjAwkAAAIIBQJjUQlvcmRlclR5cGUFA0J1eQkAZwIFAmNhBQJkYgkAZwIFAmRiBQJjYQYBAmRkAQJkZQMJAQIhPQIJAJADAQgFAmRlCHBheW1lbnRzAAEJAAIBAh1leGFjdGx5IDEgcGF5bWVudCBpcyBleHBlY3RlZAQCZGYJAQV2YWx1ZQEJAJEDAggFAmRlCHBheW1lbnRzAAAEAmJPCQEFdmFsdWUBCAUCZGYHYXNzZXRJZAQCZGcIBQJkZgZhbW91bnQEAmN6CQECYk0ECQDYBAEIBQJkZQ10cmFuc2FjdGlvbklkCQDYBAEFAmJPBQJkZwgFAmRlBmNhbGxlcgQCY2YIBQJjegJfMQQCY2cIBQJjegJfMgQCYlQJAQ1wYXJzZUludFZhbHVlAQgFAmN6Al85BAJjaAgFAmN6A18xMAMDCQECYUUABgkAAAIFAmJUBQFuCQACAQkArAICAixHZXQgb3BlcmF0aW9uIGlzIGJsb2NrZWQgYnkgYWRtaW4uIFN0YXR1cyA9IAkApAMBBQJiVAkAlwoFBQJjZgUCY2cFAmRnBQJiTwUCY2gBAmRoAwJkZQJjagJjcAMJAQIhPQIJAJADAQgFAmRlCHBheW1lbnRzAAIJAAIBAh9leGFjdGx5IDIgcGF5bWVudHMgYXJlIGV4cGVjdGVkBAJkaQkBBXZhbHVlAQkAkQMCCAUCZGUIcGF5bWVudHMAAAQCZGoJAQV2YWx1ZQEJAJEDAggFAmRlCHBheW1lbnRzAAEEAmRrCQECY2kJCQDYBAEIBQJkZQ10cmFuc2FjdGlvbklkBQJjaggFAmRpBmFtb3VudAgFAmRpB2Fzc2V0SWQIBQJkagZhbW91bnQIBQJkagdhc3NldElkCQClCAEIBQJkZQZjYWxsZXIHBQJjcAQCYlQJAQ1wYXJzZUludFZhbHVlAQgFAmRrAl84AwMDCQECYUUABgkAAAIFAmJUBQFsBgkAAAIFAmJUBQFuCQACAQkArAICAixQdXQgb3BlcmF0aW9uIGlzIGJsb2NrZWQgYnkgYWRtaW4uIFN0YXR1cyA9IAkApAMBBQJiVAUCZGsBAmRsAQJkbQQCZG4JAPwHBAUCYUMCBGVtaXQJAMwIAgUCZG0FA25pbAUDbmlsAwkAAAIFAmRuBQJkbgQCZG8EAmRwBQJkbgMJAAECBQJkcAIHQWRkcmVzcwQCZHEFAmRwCQD8BwQFAmRxAgRlbWl0CQDMCAIFAmRtBQNuaWwFA25pbAUEdW5pdAMJAAACBQJkbwUCZG8FAmRtCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQJkcgECZG0EAmRzCQBrAwUCZG0FAmFkBQFiCQCUCgIJAGUCBQJkbQUCZHMFAmRzAQJkdAQCZHUCZHYBVwFYBAJkdwkAAAIFAVgFBHVuaXQEAmR4CQECYU0BCQECYUcABAJkeQgFAmR4Al8xBAJiVAgFAmR4Al8yBAJiUQgFAmR4Al8zBAJkeggFAmR4Al80BAJjUwgFAmR4Al81BAJkQQgFAmR4Al82BAJkQggFAmR4Al83BAJkQwkBAmJwAQkBAmFMAQUCZHoEAmRECQECYnABCQECYUwBBQJjUwQCZEUDCQAAAgUCZHYFAmR6BgMJAAACBQJkdgUCY1MHCQECYUEBAg1pbnZhbGlkIGFzc2V0BAJkRgMFAmR3CQCUCgIFAmRDBQJkRAMFAmRFCQCUCgIJAGUCBQJkQwUCZHUFAmRECQCUCgIFAmRDCQBlAgUCZEQFAmR1BAJkRwgFAmRGAl8xBAJkSAgFAmRGAl8yBAJkSQMFAmRFCQCUCgIFAmR1AAAJAJQKAgAABQJkdQQCZEoIBQJkSQJfMQQCZEsIBQJkSQJfMgQCZEwICQECZHIBBQJkSgJfMQQCZE0ICQECZHIBBQJkSwJfMQQCZE4JAQJkcgEFAmR1BAJkTwgFAmROAl8xBAJkcwgFAmROAl8yBAJkUAkAZAIFAmRHBQJkTAQCZFEJAGQCBQJkSAUCZE0EAmNhCQEBRwIJAQJicgIJAQFEAgUCZFEFAmRCCQEBRAIFAmRQBQJkQQUBYgQCZFIDBQJkRQUCZEcFAmRIBAJkUwkAtgIBBQJkUgQCZFQJALYCAQgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkA7AcBBQJiUQkArAICCQCsAgICBmFzc2V0IAkA2AQBBQJiUQIOIGRvZXNuJ3QgZXhpc3QIcXVhbnRpdHkEAmRVAwkAvwICBQJkVAUBZgYJAQJhQQECImluaXRpYWwgZGVwb3NpdCByZXF1aXJlcyBhbGwgY29pbnMDCQAAAgUCZFUFAmRVBAJkVgkAtgIBBQJkTwQCZFcJAJYDAQkAzAgCAAAJAMwIAgkAoAMBCQC6AgIJALkCAgUCZFQJALgCAgkBCnNxcnRCaWdJbnQECQC3AgIFAWQJALoCAgkAuQICBQJkVgUBZAUCZFMACAASBQRET1dOBQFkBQFkBQNuaWwEAmNPAwUCZHcFA25pbAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAVIABQJjYQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAVMCBQZoZWlnaHQIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQJjYQkAzAgCCQELU3RyaW5nRW50cnkCCQEBVgIJAKUIAQkBBXZhbHVlAQUBVwkA2AQBCQEFdmFsdWUBBQFYCQECYmEKBQJkSgUCZEsFAmRXBQJjYQAAAAAFBmhlaWdodAgFCWxhc3RCbG9jawl0aW1lc3RhbXAAAAAABQNuaWwEAmRYCQBrAwUCZEgFAWIFAmRHBAJkWQkAawMFAmR1BQFiCQBkAgUCZFgFAWIEAmRaCQBlAgUCZHUFAmRZBAJlYQkAoAMBCQC8AgMFAmRUCQC2AgEFAmRaCQC2AgEFAmRIBAJlYgMJAAACBQJlYQAAAwkAAAIFAmRXAAAAAAkBAmFBAQIXYm9udXMgY2FsY3VsYXRpb24gZXJyb3IJAGsDCQBlAgUCZFcFAmVhBQFiBQJlYQkAlgoEBQJkVwUCY08FAmRzBQJlYgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgECZWMFAmVkAmRPAmR2AVcBWAQCZHcJAAACBQFYBQR1bml0BAJlZQkBAmFNAQkBAmFHAAQCZHkIBQJlZQJfMQQCYlQIBQJlZQJfMgQCYlEIBQJlZQJfMwQCZHoIBQJlZQJfNAQCY1MIBQJlZQJfNQQCZWYIBQJlZQJfNgQCZWcIBQJlZQJfNwQCZWgJAMwIAgMJAAACBQJkdgUCYlEGCQECYUEBAhBpbnZhbGlkIGxwIGFzc2V0BQNuaWwDCQAAAgUCZWgFAmVoBAJlaQMJAAACBQJlZAUCZHoGAwkAAAIFAmVkBQJjUwcJAQJhQQECDWludmFsaWQgYXNzZXQEAmVqAwUCZWkJALYCAQkBAmJwAQkBAmFMAQUCZHoJALYCAQkBAmJwAQkBAmFMAQUCY1MEAmVrCQECYnABCQECYUwBBQJkegQCZWwJAQJicAEJAQJhTAEFAmNTBAJlbQMFAmVpBQJlawUCZWwEAmVuCQC2AgEFAmVtBAJkVAkAtgIBCAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDsBwEFAmJRCQCsAgIJAKwCAgIGYXNzZXQgCQDYBAEFAmJRAg4gZG9lc24ndCBleGlzdAhxdWFudGl0eQQCZW8JALYCAQUCZE8EAmVwCQCWAwEJAMwIAgAACQDMCAIJAKADAQkAugICCQC5AgIFAmVqCQC4AgIFAWQJAHYGCQC4AgIFAWQJALoCAgkAuQICBQJlbwUBZAUCZFQAEgUBaAAAABIFBERPV04FAWQFA25pbAQCZXEJAQJkcgEFAmVwBAJlcggFAmVxAl8xBAJkcwgFAmVxAl8yBAJlcwMFAmVpCQCWCgQFAmVyAAAJAGUCBQJlawUCZXAFAmVsCQCWCgQAAAUCZXIFAmVrCQBlAgUCZWwFAmVwBAJldAgFAmVzAl8xBAJldQgFAmVzAl8yBAJldggFAmVzAl8zBAJldwgFAmVzAl80BAJleAkBAmJyAgkBAUQCBQJldwUCZWcJAQFEAgUCZXYFAmVmBAJjYQkBAUcCBQJleAUBYgQCY08DBQJkdwUDbmlsCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQFZAgkApQgBCQEFdmFsdWUBBQFXCQDYBAEJAQV2YWx1ZQEFAVgJAQJibAYFAmV0BQJldQUCZE8FAmNhBQZoZWlnaHQIBQlsYXN0QmxvY2sJdGltZXN0YW1wCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBUgAFAmNhCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBUwIFBmhlaWdodAgFCWxhc3RCbG9jawl0aW1lc3RhbXAFAmNhBQNuaWwEAmV5CQECYk0EAgAJAQJhTAEFAmJRBQJkTwUEdGhpcwQCZXoJAGQCCAUCZXkCXzEIBQJleQJfMgQCZWIDCQAAAgUCZXoAAAMJAAACBQJlcgAAAAAJAQJhQQECF2JvbnVzIGNhbGN1bGF0aW9uIGVycm9yCQBrAwkAZQIFAmVyBQJlegUBYgUCZXoJAJYKBAUCZXIFAmNPBQJkcwUCZWIJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BAmVBAAQCZHAJAKIIAQkBAVAAAwkAAQIFAmRwAgZTdHJpbmcEAmVCBQJkcAkA2QQBBQJlQgMJAAECBQJkcAIEVW5pdAUEdW5pdAkAAgECC01hdGNoIGVycm9yAQJlQwAEAmRwCQCiCAEJAQFRAAMJAAECBQJkcAIGU3RyaW5nBAJlQgUCZHAJANkEAQUCZUIDCQABAgUCZHACBFVuaXQFBHVuaXQJAAIBAgtNYXRjaCBlcnJvcgECZUQBAmRlBAJlRQkAAgECEVBlcm1pc3Npb24gZGVuaWVkBAJkcAkBAmVBAAMJAAECBQJkcAIKQnl0ZVZlY3RvcgQCZUYFAmRwAwkAAAIIBQJkZQ9jYWxsZXJQdWJsaWNLZXkFAmVGBgUCZUUDCQABAgUCZHACBFVuaXQDCQAAAggFAmRlBmNhbGxlcgUEdGhpcwYFAmVFCQACAQILTWF0Y2ggZXJyb3IZAmRlAQpzZXRNYW5hZ2VyAQJlRwQCZUgJAQJlRAEFAmRlAwkAAAIFAmVIBQJlSAQCZUkJANkEAQUCZUcDCQAAAgUCZUkFAmVJCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQFRAAUCZUcFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJkZQEOY29uZmlybU1hbmFnZXIABAJlSgkBAmVDAAQCZUsDCQEJaXNEZWZpbmVkAQUCZUoGCQACAQISTm8gcGVuZGluZyBtYW5hZ2VyAwkAAAIFAmVLBQJlSwQCZUwDCQAAAggFAmRlD2NhbGxlclB1YmxpY0tleQkBBXZhbHVlAQUCZUoGCQACAQIbWW91IGFyZSBub3QgcGVuZGluZyBtYW5hZ2VyAwkAAAIFAmVMBQJlTAkAzAgCCQELU3RyaW5nRW50cnkCCQEBUAAJANgEAQkBBXZhbHVlAQUCZUoJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBAVEABQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZGUBA3B1dAICY2oCZU0DCQBmAgAABQJjagkAAgECIEludmFsaWQgc2xpcHBhZ2VUb2xlcmFuY2UgcGFzc2VkBAJkawkBAmRoAwUCZGUFAmNqBgQCY0wIBQJkawJfMgQCYlEIBQJkawJfNwQCY2gIBQJkawJfOQQCY00IBQJkawNfMTAEAmNOCAUCZGsDXzExBAJlTggFAmRrA18xMgQCZU8IBQJkawNfMTMEAmRuCQD8BwQFAmFDAgRlbWl0CQDMCAIFAmNMBQNuaWwFA25pbAMJAAACBQJkbgUCZG4EAmRvBAJkcAUCZG4DCQABAgUCZHACB0FkZHJlc3MEAmRxBQJkcAkA/AcEBQJkcQIEZW1pdAkAzAgCBQJjTAUDbmlsBQNuaWwFBHVuaXQDCQAAAgUCZG8FAmRvBAJlUAMJAGYCBQJjTQAACQD8BwQFAmFaAgNwdXQFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCZU4FAmNNBQNuaWwFA25pbAMJAAACBQJlUAUCZVAEAmVRAwkAZgIFAmNOAAAJAPwHBAUCYVoCA3B1dAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQJlTwUCY04FA25pbAUDbmlsAwkAAAIFAmVRBQJlUQQCZVIDBQJlTQQCZVMJAPwHBAUCYVkCBXN0YWtlBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmJRBQJjTAUDbmlsAwkAAAIFAmVTBQJlUwUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQJkZQZjYWxsZXIFAmNMBQJiUQUDbmlsCQDOCAIFAmNoBQJlUgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJkZQEKcHV0Rm9yRnJlZQECZVQDCQBmAgAABQJlVAkAAgECFEludmFsaWQgdmFsdWUgcGFzc2VkBAJkawkBAmRoAwUCZGUFAmVUBwgFAmRrAl85AmRlAQlwdXRPbmVUa24CAmVVAmVWBAJlVwMDCQECYUUABgkAAAIFAmFSBQFsBgkAAAIFAmFSBQFuBAJlaAkAzAgCAwkBASEBBQJlVwYJAQJhQQECIXB1dCBvcGVyYXRpb24gaXMgYmxvY2tlZCBieSBhZG1pbgkAzAgCAwkAAAIJAJADAQgFAmRlCHBheW1lbnRzAAEGCQECYUEBAh5leGFjdGx5IDEgcGF5bWVudCBhcmUgZXhwZWN0ZWQFA25pbAMJAAACBQJlaAUCZWgEAmVYCQCRAwIIBQJkZQhwYXltZW50cwAABAJkdggFAmVYB2Fzc2V0SWQEAmR1CAUCZVgGYW1vdW50BAFXCAUCZGUGY2FsbGVyBAFYCAUCZGUNdHJhbnNhY3Rpb25JZAQCZVkJAQJkdAQFAmR1BQJkdgUBVwUBWAQCZVoIBQJlWQJfMQQCY08IBQJlWQJfMgQCZHMIBQJlWQJfMwQCZWIIBQJlWQJfNAQCZmEDAwkAZgIFAmVVAAAJAGYCBQJlVQUCZVoHCQECYUEBCQC5CQIJAMwIAgIfYW1vdW50IHRvIHJlY2VpdmUgaXMgbGVzcyB0aGFuIAkAzAgCCQCkAwEFAmVVBQNuaWwCAAUCZVoEAmRuCQECZGwBBQJmYQMJAAACBQJkbgUCZG4EAmVSAwUCZVYEAmZiCQD8BwQFAmFZAgVzdGFrZQUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQJhUwUCZmEFA25pbAMJAAACBQJmYgUCZmIFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUCZGUGY2FsbGVyBQJmYQUCYVMFA25pbAQCZmMDCQBmAgUCZHMAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQJhRAUCZHMFAmR2BQNuaWwFA25pbAkAlAoCCQDOCAIJAM4IAgUCY08FAmVSBQJmYwUCZmEJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZGUBEXB1dE9uZVRrblJFQURPTkxZAgJkdgJkdQQCZmQJAQJkdAQFAmR1CQECYUoBBQJkdgUEdW5pdAUEdW5pdAQCZVoIBQJmZAJfMQQCY08IBQJmZAJfMgQCZHMIBQJmZAJfMwQCZWIIBQJmZAJfNAkAlAoCBQNuaWwJAJUKAwUCZVoFAmRzBQJlYgJkZQEJZ2V0T25lVGtuAgJmZQJlVQQCZmYDCQECYUUABgkAAAIFAmFSBQFuBAJlaAkAzAgCAwkBASEBBQJmZgYJAQJhQQECIWdldCBvcGVyYXRpb24gaXMgYmxvY2tlZCBieSBhZG1pbgkAzAgCAwkAAAIJAJADAQgFAmRlCHBheW1lbnRzAAEGCQECYUEBAh5leGFjdGx5IDEgcGF5bWVudCBhcmUgZXhwZWN0ZWQFA25pbAMJAAACBQJlaAUCZWgEAmVkCQECYUoBBQJmZQQCZVgJAJEDAggFAmRlCHBheW1lbnRzAAAEAmR2CAUCZVgHYXNzZXRJZAQCZE8IBQJlWAZhbW91bnQEAVcIBQJkZQZjYWxsZXIEAVgIBQJkZQ10cmFuc2FjdGlvbklkBAJmZwkBAmVjBQUCZWQFAmRPBQJkdgUBVwUBWAQCZmgIBQJmZwJfMQQCY08IBQJmZwJfMgQCZHMIBQJmZwJfMwQCZWIIBQJmZwJfNAQCZG0DAwkAZgIFAmVVAAAJAGYCBQJlVQUCZmgHCQECYUEBCQC5CQIJAMwIAgIfYW1vdW50IHRvIHJlY2VpdmUgaXMgbGVzcyB0aGFuIAkAzAgCCQCkAwEFAmVVBQNuaWwCAAUCZmgEAmZpCQD8BwQFAmFDAgRidXJuCQDMCAIFAmRPBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmR2BQJkTwUDbmlsAwkAAAIFAmZpBQJmaQQCZmoJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUBVwUCZG0FAmVkBQNuaWwEAmZjAwkAZgIFAmRzAAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUCYUQFAmRzBQJlZAUDbmlsBQNuaWwJAJQKAgkAzggCCQDOCAIFAmNPBQJmagUCZmMFAmRtCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmRlARFnZXRPbmVUa25SRUFET05MWQICZWQCZE8EAmZrCQECZWMFCQECYUoBBQJlZAUCZE8FAmFTBQR1bml0BQR1bml0BAJmaAgFAmZrAl8xBAJjTwgFAmZrAl8yBAJkcwgFAmZrAl8zBAJlYggFAmZrAl80CQCUCgIFA25pbAkAlQoDBQJmaAUCZHMFAmViAmRlARN1bnN0YWtlQW5kR2V0T25lVGtuAwJmbAJmZQJlVQQCZmYDCQECYUUABgkAAAIFAmFSBQFuBAJlaAkAzAgCAwkBASEBBQJmZgYJAQJhQQECIWdldCBvcGVyYXRpb24gaXMgYmxvY2tlZCBieSBhZG1pbgkAzAgCAwkAAAIJAJADAQgFAmRlCHBheW1lbnRzAAAGCQECYUEBAhhubyBwYXltZW50cyBhcmUgZXhwZWN0ZWQFA25pbAMJAAACBQJlaAUCZWgEAmVkCQECYUoBBQJmZQQCZm0JAPwHBAUCYVkCB3Vuc3Rha2UJAMwIAgkA2AQBBQJhUwkAzAgCBQJmbAUDbmlsBQNuaWwDCQAAAgUCZm0FAmZtBAJmbgkBAmVjBQUCZWQFAmZsBQJhUwUEdW5pdAUEdW5pdAQCZmgIBQJmbgJfMQQCY08IBQJmbgJfMgQCZHMIBQJmbgJfMwQCZWIIBQJmbgJfNAQCZG0DAwkAZgIFAmVVAAAJAGYCBQJlVQUCZmgHCQECYUEBCQC5CQIJAMwIAgIfYW1vdW50IHRvIHJlY2VpdmUgaXMgbGVzcyB0aGFuIAkAzAgCCQCkAwEFAmVVBQNuaWwCAAUCZmgEAmZpCQD8BwQFAmFDAgRidXJuCQDMCAIFAmZsBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmFTBQJmbAUDbmlsAwkAAAIFAmZpBQJmaQQCZmoJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAmRlBmNhbGxlcgUCZG0FAmVkBQNuaWwEAmZjAwkAZgIFAmRzAAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUCYUQFAmRzBQJlZAUDbmlsBQNuaWwJAJQKAgkAzggCCQDOCAIFAmNPBQJmagUCZmMFAmRtCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmRlAQNnZXQABAJjegkBAmRkAQUCZGUEAmZvCAUCY3oCXzEEAmNnCAUCY3oCXzIEAmRnCAUCY3oCXzMEAmJPCAUCY3oCXzQEAmNoCAUCY3oCXzUEAmZwCQD8BwQFAmFDAgRidXJuCQDMCAIFAmRnBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmJPBQJkZwUDbmlsAwkAAAIFAmZwBQJmcAUCY2gJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZGUBCWdldE5vTGVzcwICZnECZnIEAmN6CQECZGQBBQJkZQQCY2YIBQJjegJfMQQCY2cIBQJjegJfMgQCZGcIBQJjegJfMwQCYk8IBQJjegJfNAQCY2gIBQJjegJfNQMJAGYCBQJmcQUCY2YJAAIBCQCsAgIJAKwCAgkArAICAhxub0xlc3NUaGVuQW10QXNzZXQgZmFpbGVkOiAgCQCkAwEFAmNmAgMgPCAJAKQDAQUCZnEDCQBmAgUCZnIFAmNnCQACAQkArAICCQCsAgIJAKwCAgIdbm9MZXNzVGhlblByaWNlQXNzZXQgZmFpbGVkOiAJAKQDAQUCY2cCAyA8IAkApAMBBQJmcgQCZnAJAPwHBAUCYUMCBGJ1cm4JAMwIAgUCZGcFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCYk8FAmRnBQNuaWwDCQAAAgUCZnAFAmZwBQJjaAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJkZQENdW5zdGFrZUFuZEdldAECZG0EAmZzAwkBAiE9AgkAkAMBCAUCZGUIcGF5bWVudHMAAAkAAgECGE5vIHBheW1lbnRzIGFyZSBleHBlY3RlZAYDCQAAAgUCZnMFAmZzBAJiRAkBAmFHAAQCYlEJANkEAQkAkQMCBQJiRAUBcQQCZm0JAPwHBAUCYVkCB3Vuc3Rha2UJAMwIAgkA2AQBBQJiUQkAzAgCBQJkbQUDbmlsBQNuaWwDCQAAAgUCZm0FAmZtBAJjegkBAmJNBAkA2AQBCAUCZGUNdHJhbnNhY3Rpb25JZAkA2AQBBQJiUQUCZG0IBQJkZQZjYWxsZXIEAmJUCQENcGFyc2VJbnRWYWx1ZQEIBQJjegJfOQQCY2gIBQJjegNfMTAEAmZ0AwMJAQJhRQAGCQAAAgUCYlQFAW4JAAIBCQCsAgICLEdldCBvcGVyYXRpb24gaXMgYmxvY2tlZCBieSBhZG1pbi4gU3RhdHVzID0gCQCkAwEFAmJUBgMJAAACBQJmdAUCZnQEAmZwCQD8BwQFAmFDAgRidXJuCQDMCAIFAmRtBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmJRBQJkbQUDbmlsAwkAAAIFAmZwBQJmcAUCY2gJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZGUBCGFjdGl2YXRlAgJmdQJmdgMJAQIhPQIJAKUIAQgFAmRlBmNhbGxlcgkApQgBBQJhQwkAAgECEnBlcm1pc3Npb25zIGRlbmllZAkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQFaAAUCZnUJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAmFhAAUCZnYFA25pbAIHc3VjY2VzcwJkZQEcZ2V0UG9vbENvbmZpZ1dyYXBwZXJSRUFET05MWQAJAJQKAgUDbmlsCQECYUcAAmRlARxnZXRBY2NCYWxhbmNlV3JhcHBlclJFQURPTkxZAQJicQkAlAoCBQNuaWwJAQJicAEFAmJxAmRlARljYWxjUHJpY2VzV3JhcHBlclJFQURPTkxZAwJieAJieQJiQwQCYkwJAQJiQgMFAmJ4BQJieQUCYkMJAJQKAgUDbmlsCQDMCAIJAKYDAQkAkQMCBQJiTAAACQDMCAIJAKYDAQkAkQMCBQJiTAABCQDMCAIJAKYDAQkAkQMCBQJiTAACBQNuaWwCZGUBFHRvWDE4V3JhcHBlclJFQURPTkxZAgFFAUYJAJQKAgUDbmlsCQCmAwEJAQFEAgUBRQUBRgJkZQEWZnJvbVgxOFdyYXBwZXJSRUFET05MWQIBSAFJCQCUCgIFA25pbAkBAUcCCQCnAwEFAUgFAUkCZGUBHmNhbGNQcmljZUJpZ0ludFdyYXBwZXJSRUFET05MWQICYnMCYnQJAJQKAgUDbmlsCQCmAwEJAQJicgIJAKcDAQUCYnMJAKcDAQUCYnQCZGUBI2VzdGltYXRlUHV0T3BlcmF0aW9uV3JhcHBlclJFQURPTkxZCQJiTgJjagJjawJjbAJjbQJjbgFXAmNvAmNwCQCUCgIFA25pbAkBAmNpCQUCYk4FAmNqBQJjawUCY2wFAmNtBQJjbgUBVwUCY28FAmNwAmRlASNlc3RpbWF0ZUdldE9wZXJhdGlvbldyYXBwZXJSRUFET05MWQQCYk4CYk8CYlABVwQCY3oJAQJiTQQFAmJOBQJiTwUCYlAJARFAZXh0ck5hdGl2ZSgxMDYyKQEFAVcJAJQKAgUDbmlsCQCcCgoIBQJjegJfMQgFAmN6Al8yCAUCY3oCXzMIBQJjegJfNAgFAmN6Al81CAUCY3oCXzYIBQJjegJfNwkApgMBCAUCY3oCXzgIBQJjegJfOQgFAmN6A18xMAJkZQENc3RhdHNSRUFET05MWQAEAmJECQECYUcABAJiUQkA2QQBCQCRAwIFAmJEBQFxBAJjUgkAkQMCBQJiRAUBcgQCY1MJAJEDAgUCYkQFAXMEAmNzCQCRAwIFAmJEBQF2BAJjdAkAkQMCBQJiRAUBdwQCYkUJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJiRAUBdAQCYkYJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJiRAUBdQQCZncICQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQUCYlEJAKwCAgkArAICAgZBc3NldCAJANgEAQUCYlECDiBkb2Vzbid0IGV4aXN0CHF1YW50aXR5BAJjVAkBAmJwAQUCY1IEAmNVCQECYnABBQJjUwQCZngDCQAAAgUCZncAAAkAzAgCBQFlCQDMCAIFAWUJAMwIAgUBZQUDbmlsCQECYkIDBQJjVAUCY1UFAmZ3BAJjYQAABAJmeQkBAUcCCQCRAwIFAmZ4AAEFAWIEAmZ6CQEBRwIJAJEDAgUCZngAAgUBYgQCZkEJAQV2YWx1ZQEJAJoIAgUCYUMJAQJhbwEJAKUIAQUEdGhpcwkAlAoCBQNuaWwJALkJAgkAzAgCAg4lZCVkJWQlZCVkJWQlZAkAzAgCCQCkAwEFAmNUCQDMCAIJAKQDAQUCY1UJAMwIAgkApAMBBQJmdwkAzAgCCQCkAwEFAmNhCQDMCAIJAKQDAQUCZnkJAMwIAgkApAMBBQJmegkAzAgCCQCkAwEFAmZBBQNuaWwFAWoCZGUBIGV2YWx1YXRlUHV0QnlBbW91bnRBc3NldFJFQURPTkxZAQJjawQCYkQJAQJhRwAEAmJRCQDZBAEJAJEDAgUCYkQFAXEEAmNxCQCRAwIFAmJEBQFyBAJiUgkA2QQBBQJjcQQCY3IJAJEDAgUCYkQFAXMEAmJTCQDZBAEFAmNyBAJiRQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmJEBQF0BAJiRgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmJEBQF1BAJiVAkAkQMCBQJiRAUBcAQCZncICQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQUCYlEJAKwCAgkArAICAgZBc3NldCAJANgEAQUCYlECDiBkb2Vzbid0IGV4aXN0CHF1YW50aXR5BAJjVAkBAmJwAQUCY3EEAmNVCQECYnABBQJjcgQCYnoJAQFEAgUCY1QFAmJFBAJiQQkBAUQCBQJjVQUCYkYEAmJaAwkAAAIFAmZ3AAAFAWUJAQJicgIFAmJBBQJiegQCY3cJAQFEAgUCY2sFAmJFBAJjeAkAvAIDBQJjdwUCYloFAWQEAmNtCQEBRwIFAmN4BQJiRgQCZGsJAQJjaQkCAACgwh4FAmNrBQJiUgUCY20FAmJTAgAGBwQCY0gIBQJkawJfMQQCZkIIBQJkawJfMwQCYlYIBQJkawJfNAQCYlgIBQJkawJfNQQCYlUIBQJkawJfNgkAlAoCBQNuaWwJALkJAgkAzAgCAhAlZCVkJWQlZCVkJWQlZCVkCQDMCAIJAKQDAQUCY0gJAMwIAgkApAMBCQEBRwIFAmJaBQFiCQDMCAIJAKQDAQUCYlYJAMwIAgkApAMBBQJiWAkAzAgCCQCkAwEFAmJVCQDMCAIFAmJUCQDMCAIJAKQDAQUCY2sJAMwIAgkApAMBBQJjbQUDbmlsBQFqAmRlAR9ldmFsdWF0ZVB1dEJ5UHJpY2VBc3NldFJFQURPTkxZAQJjbQQCYkQJAQJhRwAEAmJRCQDZBAEJAJEDAgUCYkQFAXEEAmNxCQCRAwIFAmJEBQFyBAJiUgkA2QQBBQJjcQQCY3IJAJEDAgUCYkQFAXMEAmJTCQDZBAEFAmNyBAJiRQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmJEBQF0BAJiRgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmJEBQF1BAJiVAkAkQMCBQJiRAUBcAQCZncICQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQUCYlEJAKwCAgkArAICAgZBc3NldCAJANgEAQUCYlECDiBkb2Vzbid0IGV4aXN0CHF1YW50aXR5BAJmQwkBAmJwAQUCY3EEAmZECQECYnABBQJjcgQCZkUJAQFEAgUCZkMFAmJFBAJmRgkBAUQCBQJmRAUCYkYEAmJaAwkAAAIFAmZ3AAAFAWUJAQJicgIFAmZGBQJmRQQCY3gJAQFEAgUCY20FAmJGBAJjdwkAvAIDBQJjeAUBZAUCYloEAmNrCQEBRwIFAmN3BQJiRQQCZGsJAQJjaQkCAACgwh4FAmNrBQJiUgUCY20FAmJTAgAGBwQCY0gIBQJkawJfMQQCZkIIBQJkawJfMwQCYlYIBQJkawJfNAQCYlgIBQJkawJfNQQCYlUIBQJkawJfNgkAlAoCBQNuaWwJALkJAgkAzAgCAhAlZCVkJWQlZCVkJWQlZCVkCQDMCAIJAKQDAQUCY0gJAMwIAgkApAMBCQEBRwIFAmJaBQFiCQDMCAIJAKQDAQUCYlYJAMwIAgkApAMBBQJiWAkAzAgCCQCkAwEFAmJVCQDMCAIFAmJUCQDMCAIJAKQDAQUCY2sJAMwIAgkApAMBBQJjbQUDbmlsBQFqAmRlARNldmFsdWF0ZUdldFJFQURPTkxZAgJmRwJmSAQCY3oJAQJiTQQCAAUCZkcFAmZIBQR0aGlzBAJjZggFAmN6Al8xBAJjZwgFAmN6Al8yBAJiVggFAmN6Al81BAJiWAgFAmN6Al82BAJiVQgFAmN6Al83BAJjYQgFAmN6Al84BAJiVAkBDXBhcnNlSW50VmFsdWUBCAUCY3oCXzkJAJQKAgUDbmlsCQC5CQIJAMwIAgIOJWQlZCVkJWQlZCVkJWQJAMwIAgkApAMBBQJjZgkAzAgCCQCkAwEFAmNnCQDMCAIJAKQDAQUCYlYJAMwIAgkApAMBBQJiWAkAzAgCCQCkAwEFAmJVCQDMCAIJAKYDAQUCY2EJAMwIAgkApAMBBQJiVAUDbmlsBQFqAQJmSQECZkoABAJmSwQCZHAJAQJlQQADCQABAgUCZHACCkJ5dGVWZWN0b3IEAmVGBQJkcAUCZUYDCQABAgUCZHACBFVuaXQIBQJmSQ9zZW5kZXJQdWJsaWNLZXkJAAIBAgtNYXRjaCBlcnJvcgQCZHAFAmZJAwkAAQIFAmRwAgVPcmRlcgQCY1EFAmRwBAJmTAkBAmFGAAQCYXQJAQJjUAEFAmNRBAJhdQkA9AMDCAUCY1EJYm9keUJ5dGVzCQCRAwIIBQJjUQZwcm9vZnMAAAgFAmNRD3NlbmRlclB1YmxpY0tleQQCYXYJAPQDAwgFAmNRCWJvZHlCeXRlcwkAkQMCCAUCY1EGcHJvb2ZzAAEFAmZMAwMDBQJhdAUCYXUHBQJhdgcGCQECYXMDBQJhdAUCYXUFAmF2AwkAAQIFAmRwAhRTZXRTY3JpcHRUcmFuc2FjdGlvbgQCZUIFAmRwBAJmTQkA9gMBCQEFdmFsdWUBCAUCZUIGc2NyaXB0BAJmTgkA2wQBCQEFdmFsdWUBCQCdCAIFAmFDCQECYXEABAJmTwkA8QcBBQR0aGlzAwMJAAACBQJmTgUCZk0JAQIhPQIFAmZPBQJmTQcGCQD0AwMIBQJmSQlib2R5Qnl0ZXMJAJEDAggFAmZJBnByb29mcwAABQJmSwkA9AMDCAUCZkkJYm9keUJ5dGVzCQCRAwIIBQJmSQZwcm9vZnMAAAUCZkvgp2mr", "chainId": 84, "height": 2286657, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: GjoyQGmbgdoR3ZzsXSt52oM4qUsBRkdGJxPMj98vbZu6 Next: F6LWJXjSxNMtUMUZtJkNwjYrTECZks6vkutZJqcX1hwZ Diff:
OldNewDifferences
507507 let dT = toBigInt(valueOrErrorMessage(assetInfo(bQ), (("asset " + toBase58String(bQ)) + " doesn't exist")).quantity)
508508 let dU = if ((dT > f))
509509 then true
510- else throw("initial deposit requires all coins")
510+ else aA("initial deposit requires all coins")
511511 if ((dU == dU))
512512 then {
513513 let dV = toBigInt(dO)
522522 let eb = if ((ea == 0))
523523 then if ((dW == 0))
524524 then 0
525- else throw("bonus calculation error")
525+ else aA("bonus calculation error")
526526 else fraction((dW - ea), b, ea)
527527 $Tuple4(dW, cO, ds, eb)
528528 }
542542 let eg = ee._7
543543 let eh = [if ((dv == bQ))
544544 then true
545- else throw("invalid lp asset")]
545+ else aA("invalid lp asset")]
546546 if ((eh == eh))
547547 then {
548548 let ei = if ((ed == dz))
582582 let eb = if ((ez == 0))
583583 then if ((er == 0))
584584 then 0
585- else throw("bonus calculation error")
585+ else aA("bonus calculation error")
586586 else fraction((er - ez), b, ez)
587587 $Tuple4(er, cO, ds, eb)
588588 }
763763 let fa = if (if ((eU > 0))
764764 then (eU > eZ)
765765 else false)
766- then throw(makeString(["amount to receive is less than ", toString(eU)], ""))
766+ then aA(makeString(["amount to receive is less than ", toString(eU)], ""))
767767 else eZ
768768 let dn = dl(fa)
769769 if ((dn == dn))
826826 let dm = if (if ((eU > 0))
827827 then (eU > fh)
828828 else false)
829- then throw(makeString(["amount to receive is less than ", toString(eU)], ""))
829+ then aA(makeString(["amount to receive is less than ", toString(eU)], ""))
830830 else fh
831831 let fi = invoke(aC, "burn", [dO], [AttachedPayment(dv, dO)])
832832 if ((fi == fi))
880880 let dm = if (if ((eU > 0))
881881 then (eU > fh)
882882 else false)
883- then throw(makeString(["amount to receive is less than ", toString(eU)], ""))
883+ then aA(makeString(["amount to receive is less than ", toString(eU)], ""))
884884 else fh
885885 let fi = invoke(aC, "burn", [fl], [AttachedPayment(aS, fl)])
886886 if ((fi == fi))
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 ((e > H))
7272 then -(H)
7373 else H
7474
7575
7676 func O () = "%s__factoryContract"
7777
7878
7979 func P () = "%s__managerPublicKey"
8080
8181
8282 func Q () = "%s__pendingManagerPublicKey"
8383
8484
8585 func R () = "%s%s__price__last"
8686
8787
8888 func S (T,U) = makeString(["%s%s%d%d__price__history", toString(T), toString(U)], j)
8989
9090
9191 func V (W,X) = ((("%s%s%s__P__" + W) + "__") + X)
9292
9393
9494 func Y (W,X) = ((("%s%s%s__G__" + W) + "__") + X)
9595
9696
9797 func Z () = "%s__amountAsset"
9898
9999
100100 func aa () = "%s__priceAsset"
101101
102102
103103 let ab = "%s__fee"
104104
105105 let ac = fraction(5, b, 10000)
106106
107107 let ad = valueOrElse(getInteger(this, ab), ac)
108108
109109 func ae () = "%s__factoryConfig"
110110
111111
112112 func af () = "%s%s__matcher__publicKey"
113113
114114
115115 func ag (ah) = (("%s%s%s__" + ah) + "__mappings__poolContract2LpAsset")
116116
117117
118118 func ai (aj,ak) = (((("%d%d%s__" + aj) + "__") + ak) + "__config")
119119
120120
121121 func al (am) = ("%s%s%s__mappings__baseAsset2internalId__" + am)
122122
123123
124124 func an () = "%s__shutdown"
125125
126126
127127 func ao (ap) = ("%s%s__poolWeight__" + ap)
128128
129129
130130 func aq () = "%s__allowedLpScriptHash"
131131
132132
133133 let ar = "%s__feeCollectorAddress"
134134
135135 func as (at,au,av) = throw(((((("order validation failed: orderValid=" + toString(at)) + " senderValid=") + toString(au)) + " matcherValid=") + toString(av)))
136136
137137
138138 func aw (ax,ay) = valueOrErrorMessage(getString(ax, ay), makeString(["mandatory ", toString(ax), ".", ay, " is not defined"], ""))
139139
140140
141141 func az (ax,ay) = valueOrErrorMessage(getInteger(ax, ay), makeString(["mandatory ", toString(ax), ".", ay, " is not defined"], ""))
142142
143143
144144 func aA (aB) = throw(makeString(["lp.ride:", aB], " "))
145145
146146
147147 let aC = addressFromStringValue(aw(this, O()))
148148
149149 let aD = addressFromStringValue(aw(aC, ar))
150150
151151 func aE () = valueOrElse(getBoolean(aC, an()), false)
152152
153153
154154 func aF () = fromBase58String(aw(aC, af()))
155155
156156
157157 func aG () = {
158158 let aH = aw(this, Z())
159159 let aI = aw(this, aa())
160160 let ak = az(aC, al(aI))
161161 let aj = az(aC, al(aH))
162162 split(aw(aC, ai(toString(aj), toString(ak))), j)
163163 }
164164
165165
166166 func aJ (aK) = if ((aK == i))
167167 then unit
168168 else fromBase58String(aK)
169169
170170
171171 func aL (aK) = if ((aK == unit))
172172 then i
173173 else toBase58String(value(aK))
174174
175175
176176 func aM (aN) = $Tuple7(addressFromStringValue(aN[o]), parseIntValue(aN[p]), fromBase58String(aN[q]), aJ(aN[r]), aJ(aN[s]), parseIntValue(aN[t]), parseIntValue(aN[u]))
177177
178178
179179 let aO = aM(aG())
180180
181181 let aP = aO
182182
183183 let aQ = aP._1
184184
185185 let aR = aP._2
186186
187187 let aS = aP._3
188188
189189 let aT = aP._4
190190
191191 let aU = aP._5
192192
193193 let aV = aP._6
194194
195195 let aW = aP._7
196196
197197 func aX () = split(aw(aC, ae()), j)
198198
199199
200200 let aY = valueOrErrorMessage(addressFromString(aX()[B]), "incorrect staking address")
201201
202202 let aZ = valueOrErrorMessage(addressFromString(aX()[C]), "incorrect staking address")
203203
204204 func ba (bb,bc,bd,be,bf,bg,bh,bi,bj,bk) = makeString(["%d%d%d%d%d%d%d%d%d%d", toString(bb), toString(bc), toString(bd), toString(be), toString(bf), toString(bg), toString(bh), toString(bi), toString(bj), toString(bk)], j)
205205
206206
207207 func bl (bm,bn,bo,be,bh,bi) = makeString(["%d%d%d%d%d%d", toString(bm), toString(bn), toString(bo), toString(be), toString(bh), toString(bi)], j)
208208
209209
210210 func bp (bq) = if ((bq == "WAVES"))
211211 then wavesBalance(this).available
212212 else assetBalance(this, fromBase58String(bq))
213213
214214
215215 func br (bs,bt) = fraction(bs, d, bt)
216216
217217
218218 func bu (bv,bw,bx,by) = {
219219 let bz = D(bx, bv)
220220 let bA = D(by, bw)
221221 br(bA, bz)
222222 }
223223
224224
225225 func bB (bx,by,bC) = {
226226 let bD = aG()
227227 let bE = parseIntValue(bD[t])
228228 let bF = parseIntValue(bD[u])
229229 let bG = bu(bE, bF, bx, by)
230230 let bt = D(bx, bE)
231231 let bs = D(by, bF)
232232 let bH = D(bC, b)
233233 let bI = br(bt, bH)
234234 let bJ = br(bs, bH)
235235 [bG, bI, bJ]
236236 }
237237
238238
239239 func bK (bx,by,bC) = {
240240 let bL = bB(bx, by, bC)
241241 [G(bL[0], b), G(bL[1], b), G(bL[2], b)]
242242 }
243243
244244
245245 func bM (bN,bO,bP,W) = {
246246 let bD = aG()
247247 let bQ = bD[q]
248248 let bR = bD[r]
249249 let bS = bD[s]
250250 let bv = parseIntValue(bD[t])
251251 let bw = parseIntValue(bD[u])
252252 let bT = bD[p]
253253 let bU = valueOrErrorMessage(assetInfo(fromBase58String(bQ)), (("Asset " + bQ) + " doesn't exist")).quantity
254254 if ((bQ != bO))
255255 then throw("Invalid asset passed.")
256256 else {
257257 let bV = bp(bR)
258258 let bW = D(bV, bv)
259259 let bX = bp(bS)
260260 let bY = D(bX, bw)
261261 let bZ = br(bY, bW)
262262 let ca = G(bZ, b)
263263 let cb = D(bP, b)
264264 let cc = D(bU, b)
265265 let cd = fraction(bW, cb, cc)
266266 let ce = fraction(bY, cb, cc)
267267 let cf = G(cd, bv)
268268 let cg = G(ce, bw)
269269 let ch = if ((bN == ""))
270270 then nil
271271 else [ScriptTransfer(W, cf, if ((bR == "WAVES"))
272272 then unit
273273 else fromBase58String(bR)), ScriptTransfer(W, cg, if ((bS == "WAVES"))
274274 then unit
275275 else fromBase58String(bS)), StringEntry(Y(toString(W), bN), bl(cf, cg, bP, ca, height, lastBlock.timestamp)), IntegerEntry(R(), ca), IntegerEntry(S(height, lastBlock.timestamp), ca)]
276276 $Tuple10(cf, cg, bR, bS, bV, bX, bU, bZ, bT, ch)
277277 }
278278 }
279279
280280
281281 func ci (bN,cj,ck,cl,cm,cn,W,co,cp) = {
282282 let bD = aG()
283283 let bQ = fromBase58String(bD[q])
284284 let cq = bD[r]
285285 let cr = bD[s]
286286 let cs = bD[v]
287287 let ct = bD[w]
288288 let bE = parseIntValue(bD[t])
289289 let bF = parseIntValue(bD[u])
290290 let bT = bD[p]
291291 let bU = valueOrErrorMessage(assetInfo(bQ), (("Asset " + toBase58String(bQ)) + " doesn't exist")).quantity
292292 let cu = toBase58String(valueOrElse(cl, fromBase58String("WAVES")))
293293 let cv = toBase58String(valueOrElse(cn, fromBase58String("WAVES")))
294294 if (if ((cq != cu))
295295 then true
296296 else (cr != cv))
297297 then throw("Invalid amt or price asset passed.")
298298 else {
299299 let bV = if (co)
300300 then bp(cq)
301301 else (bp(cq) - ck)
302302 let bX = if (co)
303303 then bp(cr)
304304 else (bp(cr) - cm)
305305 let cw = D(ck, bE)
306306 let cx = D(cm, bF)
307307 let cy = br(cx, cw)
308308 let bW = D(bV, bE)
309309 let bY = D(bX, bF)
310310 let cz = if ((bU == 0))
311311 then {
312312 let bZ = e
313313 let cA = e
314314 let bH = pow((cw * cx), 0, toBigInt(5), 1, 0, DOWN)
315315 $Tuple5(G(bH, b), G(cw, bE), G(cx, bF), br((bY + cx), (bW + cw)), cA)
316316 }
317317 else {
318318 let bZ = br(bY, bW)
319319 let cA = fraction(N((bZ - cy)), d, bZ)
320320 let cB = D(cj, b)
321321 if (if ((bZ != e))
322322 then (cA > cB)
323323 else false)
324324 then throw(((("Price slippage " + toString(cA)) + " exceeded the passed limit of ") + toString(cB)))
325325 else {
326326 let cc = D(bU, b)
327327 let cC = fraction(cw, bZ, d)
328328 let cD = fraction(cx, d, bZ)
329329 let cE = if ((cC > cx))
330330 then $Tuple2(cD, cx)
331331 else $Tuple2(cw, cC)
332332 let cF = cE._1
333333 let cG = cE._2
334334 let bH = fraction(cc, cG, bY)
335335 $Tuple5(G(bH, b), G(cF, bE), G(cG, bF), bZ, cA)
336336 }
337337 }
338338 let cH = cz._1
339339 let cI = cz._2
340340 let cJ = cz._3
341341 let ca = G(cz._4, b)
342342 let cK = G(cz._5, b)
343343 if ((0 >= cH))
344344 then throw("Invalid calculations. LP calculated is less than zero.")
345345 else {
346346 let cL = if (!(cp))
347347 then 0
348348 else cH
349349 let cM = (ck - cI)
350350 let cN = (cm - cJ)
351351 let cO = [IntegerEntry(R(), ca), IntegerEntry(S(height, lastBlock.timestamp), ca), StringEntry(V(W, bN), ba(cI, cJ, cL, ca, cj, cK, height, lastBlock.timestamp, cM, cN))]
352352 $Tuple13(cH, cL, ca, bV, bX, bU, bQ, bT, cO, cM, cN, cl, cn)
353353 }
354354 }
355355 }
356356
357357
358358 func cP (cQ) = {
359359 let bD = aG()
360360 let cR = bD[r]
361361 let cS = bD[s]
362362 let bT = parseIntValue(bD[p])
363363 let bE = parseIntValue(bD[t])
364364 let bF = parseIntValue(bD[u])
365365 let cT = bp(cR)
366366 let cU = bp(cS)
367367 let bZ = if ((cQ.orderType == Buy))
368368 then bu(bE, bF, (cT + cQ.amount), cU)
369369 else bu(bE, bF, (cT - cQ.amount), cU)
370370 let ca = G(bZ, b)
371371 if (if (if (aE())
372372 then true
373373 else (bT == m))
374374 then true
375375 else (bT == n))
376376 then throw("Exchange operations disabled")
377377 else {
378378 let cV = cQ.assetPair.amountAsset
379379 let cW = if ((cV == unit))
380380 then "WAVES"
381381 else toBase58String(value(cV))
382382 let cX = cQ.assetPair.priceAsset
383383 let cY = if ((cX == unit))
384384 then "WAVES"
385385 else toBase58String(value(cX))
386386 if (if ((cW != cR))
387387 then true
388388 else (cY != cS))
389389 then throw("Wrong order assets.")
390390 else {
391391 let cZ = cQ.price
392392 let da = fraction(b, bF, bE)
393393 let db = J(cZ, b, da)
394394 let dc = if ((cQ.orderType == Buy))
395395 then (ca >= db)
396396 else (db >= ca)
397397 true
398398 }
399399 }
400400 }
401401
402402
403403 func dd (de) = if ((size(de.payments) != 1))
404404 then throw("exactly 1 payment is expected")
405405 else {
406406 let df = value(de.payments[0])
407407 let bO = value(df.assetId)
408408 let dg = df.amount
409409 let cz = bM(toBase58String(de.transactionId), toBase58String(bO), dg, de.caller)
410410 let cf = cz._1
411411 let cg = cz._2
412412 let bT = parseIntValue(cz._9)
413413 let ch = cz._10
414414 if (if (aE())
415415 then true
416416 else (bT == n))
417417 then throw(("Get operation is blocked by admin. Status = " + toString(bT)))
418418 else $Tuple5(cf, cg, dg, bO, ch)
419419 }
420420
421421
422422 func dh (de,cj,cp) = if ((size(de.payments) != 2))
423423 then throw("exactly 2 payments are expected")
424424 else {
425425 let di = value(de.payments[0])
426426 let dj = value(de.payments[1])
427427 let dk = ci(toBase58String(de.transactionId), cj, di.amount, di.assetId, dj.amount, dj.assetId, toString(de.caller), false, cp)
428428 let bT = parseIntValue(dk._8)
429429 if (if (if (aE())
430430 then true
431431 else (bT == l))
432432 then true
433433 else (bT == n))
434434 then throw(("Put operation is blocked by admin. Status = " + toString(bT)))
435435 else dk
436436 }
437437
438438
439439 func dl (dm) = {
440440 let dn = invoke(aC, "emit", [dm], nil)
441441 if ((dn == dn))
442442 then {
443443 let do = {
444444 let dp = dn
445445 if ($isInstanceOf(dp, "Address"))
446446 then {
447447 let dq = dp
448448 invoke(dq, "emit", [dm], nil)
449449 }
450450 else unit
451451 }
452452 if ((do == do))
453453 then dm
454454 else throw("Strict value is not equal to itself.")
455455 }
456456 else throw("Strict value is not equal to itself.")
457457 }
458458
459459
460460 func dr (dm) = {
461461 let ds = fraction(dm, ad, b)
462462 $Tuple2((dm - ds), ds)
463463 }
464464
465465
466466 func dt (du,dv,W,X) = {
467467 let dw = (X == unit)
468468 let dx = aM(aG())
469469 let dy = dx._1
470470 let bT = dx._2
471471 let bQ = dx._3
472472 let dz = dx._4
473473 let cS = dx._5
474474 let dA = dx._6
475475 let dB = dx._7
476476 let dC = bp(aL(dz))
477477 let dD = bp(aL(cS))
478478 let dE = if ((dv == dz))
479479 then true
480480 else if ((dv == cS))
481481 then false
482482 else aA("invalid asset")
483483 let dF = if (dw)
484484 then $Tuple2(dC, dD)
485485 else if (dE)
486486 then $Tuple2((dC - du), dD)
487487 else $Tuple2(dC, (dD - du))
488488 let dG = dF._1
489489 let dH = dF._2
490490 let dI = if (dE)
491491 then $Tuple2(du, 0)
492492 else $Tuple2(0, du)
493493 let dJ = dI._1
494494 let dK = dI._2
495495 let dL = dr(dJ)._1
496496 let dM = dr(dK)._1
497497 let dN = dr(du)
498498 let dO = dN._1
499499 let ds = dN._2
500500 let dP = (dG + dL)
501501 let dQ = (dH + dM)
502502 let ca = G(br(D(dQ, dB), D(dP, dA)), b)
503503 let dR = if (dE)
504504 then dG
505505 else dH
506506 let dS = toBigInt(dR)
507507 let dT = toBigInt(valueOrErrorMessage(assetInfo(bQ), (("asset " + toBase58String(bQ)) + " doesn't exist")).quantity)
508508 let dU = if ((dT > f))
509509 then true
510- else throw("initial deposit requires all coins")
510+ else aA("initial deposit requires all coins")
511511 if ((dU == dU))
512512 then {
513513 let dV = toBigInt(dO)
514514 let dW = max([0, toInt(((dT * (sqrtBigInt((d + ((dV * d) / dS)), 8, 18, DOWN) - d)) / d))])
515515 let cO = if (dw)
516516 then nil
517517 else [IntegerEntry(R(), ca), IntegerEntry(S(height, lastBlock.timestamp), ca), StringEntry(V(toString(value(W)), toBase58String(value(X))), ba(dJ, dK, dW, ca, 0, 0, height, lastBlock.timestamp, 0, 0))]
518518 let dX = fraction(dH, b, dG)
519519 let dY = fraction(du, b, (dX + b))
520520 let dZ = (du - dY)
521521 let ea = toInt(fraction(dT, toBigInt(dZ), toBigInt(dH)))
522522 let eb = if ((ea == 0))
523523 then if ((dW == 0))
524524 then 0
525- else throw("bonus calculation error")
525+ else aA("bonus calculation error")
526526 else fraction((dW - ea), b, ea)
527527 $Tuple4(dW, cO, ds, eb)
528528 }
529529 else throw("Strict value is not equal to itself.")
530530 }
531531
532532
533533 func ec (ed,dO,dv,W,X) = {
534534 let dw = (X == unit)
535535 let ee = aM(aG())
536536 let dy = ee._1
537537 let bT = ee._2
538538 let bQ = ee._3
539539 let dz = ee._4
540540 let cS = ee._5
541541 let ef = ee._6
542542 let eg = ee._7
543543 let eh = [if ((dv == bQ))
544544 then true
545- else throw("invalid lp asset")]
545+ else aA("invalid lp asset")]
546546 if ((eh == eh))
547547 then {
548548 let ei = if ((ed == dz))
549549 then true
550550 else if ((ed == cS))
551551 then false
552552 else aA("invalid asset")
553553 let ej = if (ei)
554554 then toBigInt(bp(aL(dz)))
555555 else toBigInt(bp(aL(cS)))
556556 let ek = bp(aL(dz))
557557 let el = bp(aL(cS))
558558 let em = if (ei)
559559 then ek
560560 else el
561561 let en = toBigInt(em)
562562 let dT = toBigInt(valueOrErrorMessage(assetInfo(bQ), (("asset " + toBase58String(bQ)) + " doesn't exist")).quantity)
563563 let eo = toBigInt(dO)
564564 let ep = max([0, toInt(((ej * (d - pow((d - ((eo * d) / dT)), 18, h, 0, 18, DOWN))) / d))])
565565 let eq = dr(ep)
566566 let er = eq._1
567567 let ds = eq._2
568568 let es = if (ei)
569569 then $Tuple4(er, 0, (ek - ep), el)
570570 else $Tuple4(0, er, ek, (el - ep))
571571 let et = es._1
572572 let eu = es._2
573573 let ev = es._3
574574 let ew = es._4
575575 let ex = br(D(ew, eg), D(ev, ef))
576576 let ca = G(ex, b)
577577 let cO = if (dw)
578578 then nil
579579 else [StringEntry(Y(toString(value(W)), toBase58String(value(X))), bl(et, eu, dO, ca, height, lastBlock.timestamp)), IntegerEntry(R(), ca), IntegerEntry(S(height, lastBlock.timestamp), ca)]
580580 let ey = bM("", aL(bQ), dO, this)
581581 let ez = (ey._1 + ey._2)
582582 let eb = if ((ez == 0))
583583 then if ((er == 0))
584584 then 0
585- else throw("bonus calculation error")
585+ else aA("bonus calculation error")
586586 else fraction((er - ez), b, ez)
587587 $Tuple4(er, cO, ds, eb)
588588 }
589589 else throw("Strict value is not equal to itself.")
590590 }
591591
592592
593593 func eA () = {
594594 let dp = getString(P())
595595 if ($isInstanceOf(dp, "String"))
596596 then {
597597 let eB = dp
598598 fromBase58String(eB)
599599 }
600600 else if ($isInstanceOf(dp, "Unit"))
601601 then unit
602602 else throw("Match error")
603603 }
604604
605605
606606 func eC () = {
607607 let dp = getString(Q())
608608 if ($isInstanceOf(dp, "String"))
609609 then {
610610 let eB = dp
611611 fromBase58String(eB)
612612 }
613613 else if ($isInstanceOf(dp, "Unit"))
614614 then unit
615615 else throw("Match error")
616616 }
617617
618618
619619 func eD (de) = {
620620 let eE = throw("Permission denied")
621621 let dp = eA()
622622 if ($isInstanceOf(dp, "ByteVector"))
623623 then {
624624 let eF = dp
625625 if ((de.callerPublicKey == eF))
626626 then true
627627 else eE
628628 }
629629 else if ($isInstanceOf(dp, "Unit"))
630630 then if ((de.caller == this))
631631 then true
632632 else eE
633633 else throw("Match error")
634634 }
635635
636636
637637 @Callable(de)
638638 func setManager (eG) = {
639639 let eH = eD(de)
640640 if ((eH == eH))
641641 then {
642642 let eI = fromBase58String(eG)
643643 if ((eI == eI))
644644 then [StringEntry(Q(), eG)]
645645 else throw("Strict value is not equal to itself.")
646646 }
647647 else throw("Strict value is not equal to itself.")
648648 }
649649
650650
651651
652652 @Callable(de)
653653 func confirmManager () = {
654654 let eJ = eC()
655655 let eK = if (isDefined(eJ))
656656 then true
657657 else throw("No pending manager")
658658 if ((eK == eK))
659659 then {
660660 let eL = if ((de.callerPublicKey == value(eJ)))
661661 then true
662662 else throw("You are not pending manager")
663663 if ((eL == eL))
664664 then [StringEntry(P(), toBase58String(value(eJ))), DeleteEntry(Q())]
665665 else throw("Strict value is not equal to itself.")
666666 }
667667 else throw("Strict value is not equal to itself.")
668668 }
669669
670670
671671
672672 @Callable(de)
673673 func put (cj,eM) = if ((0 > cj))
674674 then throw("Invalid slippageTolerance passed")
675675 else {
676676 let dk = dh(de, cj, true)
677677 let cL = dk._2
678678 let bQ = dk._7
679679 let ch = dk._9
680680 let cM = dk._10
681681 let cN = dk._11
682682 let eN = dk._12
683683 let eO = dk._13
684684 let dn = invoke(aC, "emit", [cL], nil)
685685 if ((dn == dn))
686686 then {
687687 let do = {
688688 let dp = dn
689689 if ($isInstanceOf(dp, "Address"))
690690 then {
691691 let dq = dp
692692 invoke(dq, "emit", [cL], nil)
693693 }
694694 else unit
695695 }
696696 if ((do == do))
697697 then {
698698 let eP = if ((cM > 0))
699699 then invoke(aZ, "put", nil, [AttachedPayment(eN, cM)])
700700 else nil
701701 if ((eP == eP))
702702 then {
703703 let eQ = if ((cN > 0))
704704 then invoke(aZ, "put", nil, [AttachedPayment(eO, cN)])
705705 else nil
706706 if ((eQ == eQ))
707707 then {
708708 let eR = if (eM)
709709 then {
710710 let eS = invoke(aY, "stake", nil, [AttachedPayment(bQ, cL)])
711711 if ((eS == eS))
712712 then nil
713713 else throw("Strict value is not equal to itself.")
714714 }
715715 else [ScriptTransfer(de.caller, cL, bQ)]
716716 (ch ++ eR)
717717 }
718718 else throw("Strict value is not equal to itself.")
719719 }
720720 else throw("Strict value is not equal to itself.")
721721 }
722722 else throw("Strict value is not equal to itself.")
723723 }
724724 else throw("Strict value is not equal to itself.")
725725 }
726726
727727
728728
729729 @Callable(de)
730730 func putForFree (eT) = if ((0 > eT))
731731 then throw("Invalid value passed")
732732 else {
733733 let dk = dh(de, eT, false)
734734 dk._9
735735 }
736736
737737
738738
739739 @Callable(de)
740740 func putOneTkn (eU,eV) = {
741741 let eW = if (if (aE())
742742 then true
743743 else (aR == l))
744744 then true
745745 else (aR == n)
746746 let eh = [if (!(eW))
747747 then true
748748 else aA("put operation is blocked by admin"), if ((size(de.payments) == 1))
749749 then true
750750 else aA("exactly 1 payment are expected")]
751751 if ((eh == eh))
752752 then {
753753 let eX = de.payments[0]
754754 let dv = eX.assetId
755755 let du = eX.amount
756756 let W = de.caller
757757 let X = de.transactionId
758758 let eY = dt(du, dv, W, X)
759759 let eZ = eY._1
760760 let cO = eY._2
761761 let ds = eY._3
762762 let eb = eY._4
763763 let fa = if (if ((eU > 0))
764764 then (eU > eZ)
765765 else false)
766- then throw(makeString(["amount to receive is less than ", toString(eU)], ""))
766+ then aA(makeString(["amount to receive is less than ", toString(eU)], ""))
767767 else eZ
768768 let dn = dl(fa)
769769 if ((dn == dn))
770770 then {
771771 let eR = if (eV)
772772 then {
773773 let fb = invoke(aY, "stake", nil, [AttachedPayment(aS, fa)])
774774 if ((fb == fb))
775775 then nil
776776 else throw("Strict value is not equal to itself.")
777777 }
778778 else [ScriptTransfer(de.caller, fa, aS)]
779779 let fc = if ((ds > 0))
780780 then [ScriptTransfer(aD, ds, dv)]
781781 else nil
782782 $Tuple2(((cO ++ eR) ++ fc), fa)
783783 }
784784 else throw("Strict value is not equal to itself.")
785785 }
786786 else throw("Strict value is not equal to itself.")
787787 }
788788
789789
790790
791791 @Callable(de)
792792 func putOneTknREADONLY (dv,du) = {
793793 let fd = dt(du, aJ(dv), unit, unit)
794794 let eZ = fd._1
795795 let cO = fd._2
796796 let ds = fd._3
797797 let eb = fd._4
798798 $Tuple2(nil, $Tuple3(eZ, ds, eb))
799799 }
800800
801801
802802
803803 @Callable(de)
804804 func getOneTkn (fe,eU) = {
805805 let ff = if (aE())
806806 then true
807807 else (aR == n)
808808 let eh = [if (!(ff))
809809 then true
810810 else aA("get operation is blocked by admin"), if ((size(de.payments) == 1))
811811 then true
812812 else aA("exactly 1 payment are expected")]
813813 if ((eh == eh))
814814 then {
815815 let ed = aJ(fe)
816816 let eX = de.payments[0]
817817 let dv = eX.assetId
818818 let dO = eX.amount
819819 let W = de.caller
820820 let X = de.transactionId
821821 let fg = ec(ed, dO, dv, W, X)
822822 let fh = fg._1
823823 let cO = fg._2
824824 let ds = fg._3
825825 let eb = fg._4
826826 let dm = if (if ((eU > 0))
827827 then (eU > fh)
828828 else false)
829- then throw(makeString(["amount to receive is less than ", toString(eU)], ""))
829+ then aA(makeString(["amount to receive is less than ", toString(eU)], ""))
830830 else fh
831831 let fi = invoke(aC, "burn", [dO], [AttachedPayment(dv, dO)])
832832 if ((fi == fi))
833833 then {
834834 let fj = [ScriptTransfer(W, dm, ed)]
835835 let fc = if ((ds > 0))
836836 then [ScriptTransfer(aD, ds, ed)]
837837 else nil
838838 $Tuple2(((cO ++ fj) ++ fc), dm)
839839 }
840840 else throw("Strict value is not equal to itself.")
841841 }
842842 else throw("Strict value is not equal to itself.")
843843 }
844844
845845
846846
847847 @Callable(de)
848848 func getOneTknREADONLY (ed,dO) = {
849849 let fk = ec(aJ(ed), dO, aS, unit, unit)
850850 let fh = fk._1
851851 let cO = fk._2
852852 let ds = fk._3
853853 let eb = fk._4
854854 $Tuple2(nil, $Tuple3(fh, ds, eb))
855855 }
856856
857857
858858
859859 @Callable(de)
860860 func unstakeAndGetOneTkn (fl,fe,eU) = {
861861 let ff = if (aE())
862862 then true
863863 else (aR == n)
864864 let eh = [if (!(ff))
865865 then true
866866 else aA("get operation is blocked by admin"), if ((size(de.payments) == 0))
867867 then true
868868 else aA("no payments are expected")]
869869 if ((eh == eh))
870870 then {
871871 let ed = aJ(fe)
872872 let fm = invoke(aY, "unstake", [toBase58String(aS), fl], nil)
873873 if ((fm == fm))
874874 then {
875875 let fn = ec(ed, fl, aS, unit, unit)
876876 let fh = fn._1
877877 let cO = fn._2
878878 let ds = fn._3
879879 let eb = fn._4
880880 let dm = if (if ((eU > 0))
881881 then (eU > fh)
882882 else false)
883- then throw(makeString(["amount to receive is less than ", toString(eU)], ""))
883+ then aA(makeString(["amount to receive is less than ", toString(eU)], ""))
884884 else fh
885885 let fi = invoke(aC, "burn", [fl], [AttachedPayment(aS, fl)])
886886 if ((fi == fi))
887887 then {
888888 let fj = [ScriptTransfer(de.caller, dm, ed)]
889889 let fc = if ((ds > 0))
890890 then [ScriptTransfer(aD, ds, ed)]
891891 else nil
892892 $Tuple2(((cO ++ fj) ++ fc), dm)
893893 }
894894 else throw("Strict value is not equal to itself.")
895895 }
896896 else throw("Strict value is not equal to itself.")
897897 }
898898 else throw("Strict value is not equal to itself.")
899899 }
900900
901901
902902
903903 @Callable(de)
904904 func get () = {
905905 let cz = dd(de)
906906 let fo = cz._1
907907 let cg = cz._2
908908 let dg = cz._3
909909 let bO = cz._4
910910 let ch = cz._5
911911 let fp = invoke(aC, "burn", [dg], [AttachedPayment(bO, dg)])
912912 if ((fp == fp))
913913 then ch
914914 else throw("Strict value is not equal to itself.")
915915 }
916916
917917
918918
919919 @Callable(de)
920920 func getNoLess (fq,fr) = {
921921 let cz = dd(de)
922922 let cf = cz._1
923923 let cg = cz._2
924924 let dg = cz._3
925925 let bO = cz._4
926926 let ch = cz._5
927927 if ((fq > cf))
928928 then throw(((("noLessThenAmtAsset failed: " + toString(cf)) + " < ") + toString(fq)))
929929 else if ((fr > cg))
930930 then throw(((("noLessThenPriceAsset failed: " + toString(cg)) + " < ") + toString(fr)))
931931 else {
932932 let fp = invoke(aC, "burn", [dg], [AttachedPayment(bO, dg)])
933933 if ((fp == fp))
934934 then ch
935935 else throw("Strict value is not equal to itself.")
936936 }
937937 }
938938
939939
940940
941941 @Callable(de)
942942 func unstakeAndGet (dm) = {
943943 let fs = if ((size(de.payments) != 0))
944944 then throw("No payments are expected")
945945 else true
946946 if ((fs == fs))
947947 then {
948948 let bD = aG()
949949 let bQ = fromBase58String(bD[q])
950950 let fm = invoke(aY, "unstake", [toBase58String(bQ), dm], nil)
951951 if ((fm == fm))
952952 then {
953953 let cz = bM(toBase58String(de.transactionId), toBase58String(bQ), dm, de.caller)
954954 let bT = parseIntValue(cz._9)
955955 let ch = cz._10
956956 let ft = if (if (aE())
957957 then true
958958 else (bT == n))
959959 then throw(("Get operation is blocked by admin. Status = " + toString(bT)))
960960 else true
961961 if ((ft == ft))
962962 then {
963963 let fp = invoke(aC, "burn", [dm], [AttachedPayment(bQ, dm)])
964964 if ((fp == fp))
965965 then ch
966966 else throw("Strict value is not equal to itself.")
967967 }
968968 else throw("Strict value is not equal to itself.")
969969 }
970970 else throw("Strict value is not equal to itself.")
971971 }
972972 else throw("Strict value is not equal to itself.")
973973 }
974974
975975
976976
977977 @Callable(de)
978978 func activate (fu,fv) = if ((toString(de.caller) != toString(aC)))
979979 then throw("permissions denied")
980980 else $Tuple2([StringEntry(Z(), fu), StringEntry(aa(), fv)], "success")
981981
982982
983983
984984 @Callable(de)
985985 func getPoolConfigWrapperREADONLY () = $Tuple2(nil, aG())
986986
987987
988988
989989 @Callable(de)
990990 func getAccBalanceWrapperREADONLY (bq) = $Tuple2(nil, bp(bq))
991991
992992
993993
994994 @Callable(de)
995995 func calcPricesWrapperREADONLY (bx,by,bC) = {
996996 let bL = bB(bx, by, bC)
997997 $Tuple2(nil, [toString(bL[0]), toString(bL[1]), toString(bL[2])])
998998 }
999999
10001000
10011001
10021002 @Callable(de)
10031003 func toX18WrapperREADONLY (E,F) = $Tuple2(nil, toString(D(E, F)))
10041004
10051005
10061006
10071007 @Callable(de)
10081008 func fromX18WrapperREADONLY (H,I) = $Tuple2(nil, G(parseBigIntValue(H), I))
10091009
10101010
10111011
10121012 @Callable(de)
10131013 func calcPriceBigIntWrapperREADONLY (bs,bt) = $Tuple2(nil, toString(br(parseBigIntValue(bs), parseBigIntValue(bt))))
10141014
10151015
10161016
10171017 @Callable(de)
10181018 func estimatePutOperationWrapperREADONLY (bN,cj,ck,cl,cm,cn,W,co,cp) = $Tuple2(nil, ci(bN, cj, ck, cl, cm, cn, W, co, cp))
10191019
10201020
10211021
10221022 @Callable(de)
10231023 func estimateGetOperationWrapperREADONLY (bN,bO,bP,W) = {
10241024 let cz = bM(bN, bO, bP, addressFromStringValue(W))
10251025 $Tuple2(nil, $Tuple10(cz._1, cz._2, cz._3, cz._4, cz._5, cz._6, cz._7, toString(cz._8), cz._9, cz._10))
10261026 }
10271027
10281028
10291029
10301030 @Callable(de)
10311031 func statsREADONLY () = {
10321032 let bD = aG()
10331033 let bQ = fromBase58String(bD[q])
10341034 let cR = bD[r]
10351035 let cS = bD[s]
10361036 let cs = bD[v]
10371037 let ct = bD[w]
10381038 let bE = parseIntValue(bD[t])
10391039 let bF = parseIntValue(bD[u])
10401040 let fw = valueOrErrorMessage(assetInfo(bQ), (("Asset " + toBase58String(bQ)) + " doesn't exist")).quantity
10411041 let cT = bp(cR)
10421042 let cU = bp(cS)
10431043 let fx = if ((fw == 0))
10441044 then [e, e, e]
10451045 else bB(cT, cU, fw)
10461046 let ca = 0
10471047 let fy = G(fx[1], b)
10481048 let fz = G(fx[2], b)
10491049 let fA = value(getInteger(aC, ao(toString(this))))
10501050 $Tuple2(nil, makeString(["%d%d%d%d%d%d%d", toString(cT), toString(cU), toString(fw), toString(ca), toString(fy), toString(fz), toString(fA)], j))
10511051 }
10521052
10531053
10541054
10551055 @Callable(de)
10561056 func evaluatePutByAmountAssetREADONLY (ck) = {
10571057 let bD = aG()
10581058 let bQ = fromBase58String(bD[q])
10591059 let cq = bD[r]
10601060 let bR = fromBase58String(cq)
10611061 let cr = bD[s]
10621062 let bS = fromBase58String(cr)
10631063 let bE = parseIntValue(bD[t])
10641064 let bF = parseIntValue(bD[u])
10651065 let bT = bD[p]
10661066 let fw = valueOrErrorMessage(assetInfo(bQ), (("Asset " + toBase58String(bQ)) + " doesn't exist")).quantity
10671067 let cT = bp(cq)
10681068 let cU = bp(cr)
10691069 let bz = D(cT, bE)
10701070 let bA = D(cU, bF)
10711071 let bZ = if ((fw == 0))
10721072 then e
10731073 else br(bA, bz)
10741074 let cw = D(ck, bE)
10751075 let cx = fraction(cw, bZ, d)
10761076 let cm = G(cx, bF)
10771077 let dk = ci("", 500000, ck, bR, cm, bS, "", true, false)
10781078 let cH = dk._1
10791079 let fB = dk._3
10801080 let bV = dk._4
10811081 let bX = dk._5
10821082 let bU = dk._6
10831083 $Tuple2(nil, makeString(["%d%d%d%d%d%d%d%d", toString(cH), toString(G(bZ, b)), toString(bV), toString(bX), toString(bU), bT, toString(ck), toString(cm)], j))
10841084 }
10851085
10861086
10871087
10881088 @Callable(de)
10891089 func evaluatePutByPriceAssetREADONLY (cm) = {
10901090 let bD = aG()
10911091 let bQ = fromBase58String(bD[q])
10921092 let cq = bD[r]
10931093 let bR = fromBase58String(cq)
10941094 let cr = bD[s]
10951095 let bS = fromBase58String(cr)
10961096 let bE = parseIntValue(bD[t])
10971097 let bF = parseIntValue(bD[u])
10981098 let bT = bD[p]
10991099 let fw = valueOrErrorMessage(assetInfo(bQ), (("Asset " + toBase58String(bQ)) + " doesn't exist")).quantity
11001100 let fC = bp(cq)
11011101 let fD = bp(cr)
11021102 let fE = D(fC, bE)
11031103 let fF = D(fD, bF)
11041104 let bZ = if ((fw == 0))
11051105 then e
11061106 else br(fF, fE)
11071107 let cx = D(cm, bF)
11081108 let cw = fraction(cx, d, bZ)
11091109 let ck = G(cw, bE)
11101110 let dk = ci("", 500000, ck, bR, cm, bS, "", true, false)
11111111 let cH = dk._1
11121112 let fB = dk._3
11131113 let bV = dk._4
11141114 let bX = dk._5
11151115 let bU = dk._6
11161116 $Tuple2(nil, makeString(["%d%d%d%d%d%d%d%d", toString(cH), toString(G(bZ, b)), toString(bV), toString(bX), toString(bU), bT, toString(ck), toString(cm)], j))
11171117 }
11181118
11191119
11201120
11211121 @Callable(de)
11221122 func evaluateGetREADONLY (fG,fH) = {
11231123 let cz = bM("", fG, fH, this)
11241124 let cf = cz._1
11251125 let cg = cz._2
11261126 let bV = cz._5
11271127 let bX = cz._6
11281128 let bU = cz._7
11291129 let ca = cz._8
11301130 let bT = parseIntValue(cz._9)
11311131 $Tuple2(nil, makeString(["%d%d%d%d%d%d%d", toString(cf), toString(cg), toString(bV), toString(bX), toString(bU), toString(ca), toString(bT)], j))
11321132 }
11331133
11341134
11351135 @Verifier(fI)
11361136 func fJ () = {
11371137 let fK = {
11381138 let dp = eA()
11391139 if ($isInstanceOf(dp, "ByteVector"))
11401140 then {
11411141 let eF = dp
11421142 eF
11431143 }
11441144 else if ($isInstanceOf(dp, "Unit"))
11451145 then fI.senderPublicKey
11461146 else throw("Match error")
11471147 }
11481148 let dp = fI
11491149 if ($isInstanceOf(dp, "Order"))
11501150 then {
11511151 let cQ = dp
11521152 let fL = aF()
11531153 let at = cP(cQ)
11541154 let au = sigVerify(cQ.bodyBytes, cQ.proofs[0], cQ.senderPublicKey)
11551155 let av = sigVerify(cQ.bodyBytes, cQ.proofs[1], fL)
11561156 if (if (if (at)
11571157 then au
11581158 else false)
11591159 then av
11601160 else false)
11611161 then true
11621162 else as(at, au, av)
11631163 }
11641164 else if ($isInstanceOf(dp, "SetScriptTransaction"))
11651165 then {
11661166 let eB = dp
11671167 let fM = blake2b256(value(eB.script))
11681168 let fN = fromBase64String(value(getString(aC, aq())))
11691169 let fO = scriptHash(this)
11701170 if (if ((fN == fM))
11711171 then (fO != fM)
11721172 else false)
11731173 then true
11741174 else sigVerify(fI.bodyBytes, fI.proofs[0], fK)
11751175 }
11761176 else sigVerify(fI.bodyBytes, fI.proofs[0], fK)
11771177 }
11781178

github/deemru/w8io/873ac7e 
124.92 ms