tx · 2t7yM7aCq8UfG36vXXnvXG9H3c6wJyZbjZwY7GMLCXb6

3N8xhCqhby2FuAxqMfNmJcoVYrkkJiVE1Jr:  -0.02900000 Waves

2022.10.24 17:09 [2286592] smart account 3N8xhCqhby2FuAxqMfNmJcoVYrkkJiVE1Jr > SELF 0.00000000 Waves

{ "type": 13, "id": "2t7yM7aCq8UfG36vXXnvXG9H3c6wJyZbjZwY7GMLCXb6", "fee": 2900000, "feeAssetId": null, "timestamp": 1666620436597, "version": 1, "sender": "3N8xhCqhby2FuAxqMfNmJcoVYrkkJiVE1Jr", "senderPublicKey": "5tCEcjM69HsRh7dRpSZ51WjznVLspnZVwPFARKC33MkF", "proofs": [ "5MfEic6fh3x4HWLCVf4QapazGsKY4NXe6TznKZchU1tTCVQDtwCuUBDeAzEAcRSue3wfQz2hq9FZq5KT9bmz7s3J" ], "script": "base64:BgKyJwgCEgMKAQgSABIECgIBBBIDCgEBEgQKAgEEEgQKAggBEgQKAggBEgQKAggBEgUKAwEIARIAEgQKAgEBEgMKAQESBAoCCAgSABIDCgEIEgUKAwEBARIECgIBARIECgIIARIECgIICBILCgkIAQECAQIIBAQSBgoECAgBCBIAEgMKAQESAwoBARIECgIIASIKbFBkZWNpbWFscyIGc2NhbGU4IgxzY2FsZThCaWdJbnQiB3NjYWxlMTgiCnplcm9CaWdJbnQiBGJpZzAiBGJpZzEiBGJpZzIiC3dhdmVzU3RyaW5nIgNTRVAiClBvb2xBY3RpdmUiD1Bvb2xQdXREaXNhYmxlZCITUG9vbE1hdGNoZXJEaXNhYmxlZCIMUG9vbFNodXRkb3duIg5pZHhQb29sQWRkcmVzcyINaWR4UG9vbFN0YXR1cyIQaWR4UG9vbExQQXNzZXRJZCINaWR4QW10QXNzZXRJZCIPaWR4UHJpY2VBc3NldElkIg5pZHhBbXRBc3NldERjbSIQaWR4UHJpY2VBc3NldERjbSIOaWR4SUFtdEFzc2V0SWQiEGlkeElQcmljZUFzc2V0SWQiDWlkeExQQXNzZXREY20iEmlkeFBvb2xBbXRBc3NldEFtdCIUaWR4UG9vbFByaWNlQXNzZXRBbXQiEWlkeFBvb2xMUEFzc2V0QW10IhlpZHhGYWN0b3J5U3Rha2luZ0NvbnRyYWN0IhppZHhGYWN0b3J5U2xpcHBhZ2VDb250cmFjdCIFdG9YMTgiB29yaWdWYWwiDW9yaWdTY2FsZU11bHQiB2Zyb21YMTgiA3ZhbCIPcmVzdWx0U2NhbGVNdWx0Igd0b1NjYWxlIgNhbXQiCHJlc1NjYWxlIghjdXJTY2FsZSIDYWJzIgJmYyIDbXBrIgRwbXBrIgJwbCICcGgiAWgiCXRpbWVzdGFtcCIDcGF1Igt1c2VyQWRkcmVzcyIEdHhJZCIDZ2F1IgJhYSICcGEiBmtleUZlZSIKZmVlRGVmYXVsdCIDZmVlIhBrZXlGYWN0b3J5Q29uZmlnIg1rZXlNYXRjaGVyUHViIilrZXlNYXBwaW5nUG9vbENvbnRyYWN0QWRkcmVzc1RvUG9vbEFzc2V0cyITcG9vbENvbnRyYWN0QWRkcmVzcyINa2V5UG9vbENvbmZpZyIJaUFtdEFzc2V0IgtpUHJpY2VBc3NldCIfa2V5TWFwcGluZ3NCYXNlQXNzZXQyaW50ZXJuYWxJZCIMYmFzZUFzc2V0U3RyIhNrZXlBbGxQb29sc1NodXRkb3duIg1rZXlQb29sV2VpZ2h0Ig9jb250cmFjdEFkZHJlc3MiFmtleUFsbG93ZWRMcFNjcmlwdEhhc2giFmtleUZlZUNvbGxlY3RvckFkZHJlc3MiD3Rocm93T3JkZXJFcnJvciIKb3JkZXJWYWxpZCILc2VuZGVyVmFsaWQiDG1hdGNoZXJWYWxpZCIPZ2V0U3RyaW5nT3JGYWlsIgdhZGRyZXNzIgNrZXkiDGdldEludE9yRmFpbCIIdGhyb3dFcnIiA21zZyIPZmFjdG9yeUNvbnRyYWN0IhNmZWVDb2xsZWN0b3JBZGRyZXNzIhBpc0dsb2JhbFNodXRkb3duIhNnZXRNYXRjaGVyUHViT3JGYWlsIg1nZXRQb29sQ29uZmlnIghhbXRBc3NldCIKcHJpY2VBc3NldCIMcGFyc2VBc3NldElkIgVpbnB1dCIPYXNzZXRJZFRvU3RyaW5nIg9wYXJzZVBvb2xDb25maWciCnBvb2xDb25maWciEHBvb2xDb25maWdQYXJzZWQiCyR0MDc0ODQ3NjUwIg5jZmdQb29sQWRkcmVzcyINY2ZnUG9vbFN0YXR1cyIMY2ZnTHBBc3NldElkIhBjZmdBbW91bnRBc3NldElkIg9jZmdQcmljZUFzc2V0SWQiFmNmZ0Ftb3VudEFzc2V0RGVjaW1hbHMiFWNmZ1ByaWNlQXNzZXREZWNpbWFscyIQZ2V0RmFjdG9yeUNvbmZpZyIPc3Rha2luZ0NvbnRyYWN0IhBzbGlwcGFnZUNvbnRyYWN0IhFkYXRhUHV0QWN0aW9uSW5mbyINaW5BbXRBc3NldEFtdCIPaW5QcmljZUFzc2V0QW10IghvdXRMcEFtdCIFcHJpY2UiHXNsaXBwYWdlVG9sZXJhbmNlUGFzc2VkQnlVc2VyIhVzbGlwcGFnZVRvbGVyYW5jZVJlYWwiCHR4SGVpZ2h0Igt0eFRpbWVzdGFtcCISc2xpcGFnZUFtdEFzc2V0QW10IhRzbGlwYWdlUHJpY2VBc3NldEFtdCIRZGF0YUdldEFjdGlvbkluZm8iDm91dEFtdEFzc2V0QW10IhBvdXRQcmljZUFzc2V0QW10IgdpbkxwQW10Ig1nZXRBY2NCYWxhbmNlIgdhc3NldElkIg9jYWxjUHJpY2VCaWdJbnQiCHByQW10WDE4IghhbUFtdFgxOCIQcHJpdmF0ZUNhbGNQcmljZSIKYW1Bc3NldERjbSIKcHJBc3NldERjbSIFYW1BbXQiBXByQW10Ig5hbXRBc3NldEFtdFgxOCIQcHJpY2VBc3NldEFtdFgxOCIKY2FsY1ByaWNlcyIFbHBBbXQiA2NmZyILYW10QXNzZXREY20iDXByaWNlQXNzZXREY20iCHByaWNlWDE4IghscEFtdFgxOCITbHBQcmljZUluQW1Bc3NldFgxOCITbHBQcmljZUluUHJBc3NldFgxOCIPY2FsY3VsYXRlUHJpY2VzIgZwcmljZXMiFGVzdGltYXRlR2V0T3BlcmF0aW9uIgZ0eElkNTgiCnBtdEFzc2V0SWQiCHBtdExwQW10IglscEFzc2V0SWQiCWFtQXNzZXRJZCIJcHJBc3NldElkIgpwb29sU3RhdHVzIgpscEVtaXNzaW9uIglhbUJhbGFuY2UiDGFtQmFsYW5jZVgxOCIJcHJCYWxhbmNlIgxwckJhbGFuY2VYMTgiC2N1clByaWNlWDE4IghjdXJQcmljZSILcG10THBBbXRYMTgiDWxwRW1pc3Npb25YMTgiC291dEFtQW10WDE4IgtvdXRQckFtdFgxOCIIb3V0QW1BbXQiCG91dFByQW10IgVzdGF0ZSIUZXN0aW1hdGVQdXRPcGVyYXRpb24iEXNsaXBwYWdlVG9sZXJhbmNlIgxpbkFtQXNzZXRBbXQiC2luQW1Bc3NldElkIgxpblByQXNzZXRBbXQiC2luUHJBc3NldElkIgppc0V2YWx1YXRlIgZlbWl0THAiDGFtQXNzZXRJZFN0ciIMcHJBc3NldElkU3RyIgtpQW10QXNzZXRJZCINaVByaWNlQXNzZXRJZCIOaW5BbUFzc2V0SWRTdHIiDmluUHJBc3NldElkU3RyIg9pbkFtQXNzZXRBbXRYMTgiD2luUHJBc3NldEFtdFgxOCIMdXNlclByaWNlWDE4IgNyZXMiC3NsaXBwYWdlWDE4IhRzbGlwcGFnZVRvbGVyYW5jZVgxOCIKcHJWaWFBbVgxOCIKYW1WaWFQclgxOCIMZXhwZWN0ZWRBbXRzIhFleHBBbXRBc3NldEFtdFgxOCITZXhwUHJpY2VBc3NldEFtdFgxOCIJY2FsY0xwQW10Ig5jYWxjQW1Bc3NldFBtdCIOY2FsY1ByQXNzZXRQbXQiDHNsaXBwYWdlQ2FsYyIJZW1pdExwQW10IgZhbURpZmYiBnByRGlmZiILY29tbW9uU3RhdGUiG3ZhbGlkYXRlTWF0Y2hlck9yZGVyQWxsb3dlZCIFb3JkZXIiCmFtdEFzc2V0SWQiDHByaWNlQXNzZXRJZCISYWNjQW10QXNzZXRCYWxhbmNlIhRhY2NQcmljZUFzc2V0QmFsYW5jZSINb3JkZXJBbXRBc3NldCIQb3JkZXJBbXRBc3NldFN0ciIPb3JkZXJQcmljZUFzc2V0IhJvcmRlclByaWNlQXNzZXRTdHIiCm9yZGVyUHJpY2UiCHByaWNlRGNtIhBjYXN0ZWRPcmRlclByaWNlIhFpc09yZGVyUHJpY2VWYWxpZCIJY29tbW9uR2V0IgFpIgNwbXQiBnBtdEFtdCIJY29tbW9uUHV0IgphbUFzc2V0UG10IgpwckFzc2V0UG10IgZlc3RQdXQiBGVtaXQiBmFtb3VudCIHZW1pdEludiINZW1pdEludkxlZ2FjeSIHJG1hdGNoMCIVbGVnYWN5RmFjdG9yeUNvbnRyYWN0Igd0YWtlRmVlIglmZWVBbW91bnQiD2NhbGNQdXRPbmVUb2tlbiIQcGF5bWVudEFtb3VudFJhdyIOcGF5bWVudEFzc2V0SWQiBmlzRXZhbCINJHQwMjIxNjcyMjM0NSILcG9vbEFkZHJlc3MiDWFtb3VudEFzc2V0SWQiE2Ftb3VudEFzc2V0RGVjaW1hbHMiEnByaWNlQXNzZXREZWNpbWFscyIQYW1vdW50QmFsYW5jZVJhdyIPcHJpY2VCYWxhbmNlUmF3IhRwYXltZW50SW5BbW91bnRBc3NldCINJHQwMjI2NzUyMjk2OCIQYW1vdW50QmFsYW5jZU9sZCIPcHJpY2VCYWxhbmNlT2xkIg0kdDAyMjk3MjIzMTIxIhRhbW91bnRBc3NldEFtb3VudFJhdyITcHJpY2VBc3NldEFtb3VudFJhdyIRYW1vdW50QXNzZXRBbW91bnQiEHByaWNlQXNzZXRBbW91bnQiDSR0MDIzMjQzMjMzMDIiDXBheW1lbnRBbW91bnQiEGFtb3VudEJhbGFuY2VOZXciD3ByaWNlQmFsYW5jZU5ldyIOcGF5bWVudEJhbGFuY2UiFHBheW1lbnRCYWxhbmNlQmlnSW50IgxzdXBwbHlCaWdJbnQiC2NoZWNoU3VwcGx5Ig1kZXBvc2l0QmlnSW50Igtpc3N1ZUFtb3VudCIOcG9vbFByb3BvcnRpb24iD2Ftb3VudEFzc2V0UGFydCIOcHJpY2VBc3NldFBhcnQiCWxwQW10Qm90aCIFYm9udXMiD2NhbGNHZXRPbmVUb2tlbiIKb3V0QXNzZXRJZCINJHQwMjUyNTYyNTQxNyIKYW1EZWNpbWFscyIKcHJEZWNpbWFscyIGY2hlY2tzIhBvdXRJbkFtb3VudEFzc2V0Ig1iYWxhbmNlQmlnSW50IgxhbUJhbGFuY2VPbGQiDHByQmFsYW5jZU9sZCIKb3V0QmFsYW5jZSIQb3V0QmFsYW5jZUJpZ0ludCIOcmVkZWVtZWRCaWdJbnQiCWFtb3VudFJhdyINJHQwMjY0ODkyNjUzOSILdG90YWxBbW91bnQiDSR0MDI2NTQzMjY3NjkiC291dEFtQW1vdW50IgtvdXRQckFtb3VudCIMYW1CYWxhbmNlTmV3IgxwckJhbGFuY2VOZXciCGN1clByWDE4IgFyIg5zdW1PZkdldEFzc2V0cyIWbWFuYWdlclB1YmxpY0tleU9yVW5pdCIBcyIdcGVuZGluZ01hbmFnZXJQdWJsaWNLZXlPclVuaXQiC211c3RNYW5hZ2VyIgJwZCICcGsiF3BlbmRpbmdNYW5hZ2VyUHVibGljS2V5IgtjaGVja0NhbGxlciIVY2hlY2tNYW5hZ2VyUHVibGljS2V5IgJwbSIFaGFzUE0iB2NoZWNrUE0iD3Nob3VsZEF1dG9TdGFrZSIEYW1JZCIEcHJJZCIMc2xpcHBhZ2VBSW52IgxzbGlwcGFnZVBJbnYiCmxwVHJhbnNmZXIiC3NscFN0YWtlSW52IgttYXhTbGlwcGFnZSIMbWluT3V0QW1vdW50IglhdXRvU3Rha2UiDWlzUHV0RGlzYWJsZWQiB3BheW1lbnQiDSR0MDMxMTEwMzEyMzciE2VtaXRBbW91bnRFc3RpbWF0ZWQiCmVtaXRBbW91bnQiCHN0YWtlSW52IgdzZW5kRmVlIg0kdDAzMTk2MzMyMDk4Ig1vdXRBc3NldElkU3RyIg1pc0dldERpc2FibGVkIg0kdDAzMjY4NjMyODE4Ig9hbW91bnRFc3RpbWF0ZWQiB2J1cm5JbnYiDWFzc2V0VHJhbnNmZXIiDSR0MDMzNDUwMzM1ODgiDXVuc3Rha2VBbW91bnQiCnVuc3Rha2VJbnYiDSR0MDM0MTM4MzQyNjEiCW91dEFtdEFtdCIUYnVybkxQQXNzZXRPbkZhY3RvcnkiEm5vTGVzc1RoZW5BbXRBc3NldCIUbm9MZXNzVGhlblByaWNlQXNzZXQiDWNoZWNrUGF5bWVudHMiD2NoZWNrUG9vbFN0YXR1cyILYW10QXNzZXRTdHIiDXByaWNlQXNzZXRTdHIiDXBvb2xMUEJhbGFuY2UiCnByaWNlc0xpc3QiD2xwQW10QXNzZXRTaGFyZSIRbHBQcmljZUFzc2V0U2hhcmUiCnBvb2xXZWlnaHQiDGN1clByaWNlQ2FsYyIMYW1CYWxhbmNlUmF3IgxwckJhbGFuY2VSYXciD2FtQmFsYW5jZVJhd1gxOCIPcHJCYWxhbmNlUmF3WDE4IhBwYXltZW50THBBc3NldElkIgxwYXltZW50THBBbXQiAnR4IgZ2ZXJpZnkiD3RhcmdldFB1YmxpY0tleSIKbWF0Y2hlclB1YiIHbmV3SGFzaCILYWxsb3dlZEhhc2giC2N1cnJlbnRIYXNoYQABYQAIAAFiAIDC1y8AAWMJALYCAQCAwtcvAAFkCQC2AgEAgICQu7rWrfANAAFlCQC2AgEAAAABZgkAtgIBAAAAAWcJALYCAQABAAFoCQC2AgEAAgABaQIFV0FWRVMAAWoCAl9fAAFrAAEAAWwAAgABbQADAAFuAAQAAW8AAQABcAACAAFxAAMAAXIABAABcwAFAAF0AAYAAXUABwABdgAIAAF3AAkAAXgACgABeQABAAF6AAIAAUEAAwABQgABAAFDAAcBAUQCAUUBRgkAvAIDCQC2AgEFAUUFAWQJALYCAQUBRgEBRwIBSAFJCQCgAwEJALwCAwUBSAkAtgIBBQFJBQFkAQFKAwFLAUwBTQkAawMFAUsFAUwFAU0BAU4BAUgDCQC/AgIFAWUFAUgJAL4CAQUBSAUBSAEBTwACEyVzX19mYWN0b3J5Q29udHJhY3QBAVAAAhQlc19fbWFuYWdlclB1YmxpY0tleQEBUQACGyVzX19wZW5kaW5nTWFuYWdlclB1YmxpY0tleQEBUgACESVzJXNfX3ByaWNlX19sYXN0AQFTAgFUAVUJALkJAgkAzAgCAhglcyVzJWQlZF9fcHJpY2VfX2hpc3RvcnkJAMwIAgkApAMBBQFUCQDMCAIJAKQDAQUBVQUDbmlsBQFqAQFWAgFXAVgJAKwCAgkArAICCQCsAgICCyVzJXMlc19fUF9fBQFXAgJfXwUBWAEBWQIBVwFYCQCsAgIJAKwCAgkArAICAgslcyVzJXNfX0dfXwUBVwICX18FAVgBAVoAAg8lc19fYW1vdW50QXNzZXQBAmFhAAIOJXNfX3ByaWNlQXNzZXQAAmFiAgclc19fZmVlAAJhYwkAawMABQUBYgCQTgACYWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUCYWIFAmFjAQJhZQACESVzX19mYWN0b3J5Q29uZmlnAQJhZgACGCVzJXNfX21hdGNoZXJfX3B1YmxpY0tleQECYWcBAmFoCQCsAgIJAKwCAgIIJXMlcyVzX18FAmFoAiBfX21hcHBpbmdzX19wb29sQ29udHJhY3QyTHBBc3NldAECYWkCAmFqAmFrCQCsAgIJAKwCAgkArAICCQCsAgICCCVkJWQlc19fBQJhagICX18FAmFrAghfX2NvbmZpZwECYWwBAmFtCQCsAgICKCVzJXMlc19fbWFwcGluZ3NfX2Jhc2VBc3NldDJpbnRlcm5hbElkX18FAmFtAQJhbgACDCVzX19zaHV0ZG93bgECYW8BAmFwCQCsAgICEiVzJXNfX3Bvb2xXZWlnaHRfXwUCYXABAmFxAAIXJXNfX2FsbG93ZWRMcFNjcmlwdEhhc2gAAmFyAhclc19fZmVlQ29sbGVjdG9yQWRkcmVzcwECYXMDAmF0AmF1AmF2CQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgICJG9yZGVyIHZhbGlkYXRpb24gZmFpbGVkOiBvcmRlclZhbGlkPQkApQMBBQJhdAINIHNlbmRlclZhbGlkPQkApQMBBQJhdQIOIG1hdGNoZXJWYWxpZD0JAKUDAQUCYXYBAmF3AgJheAJheQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFAmF4BQJheQkAuQkCCQDMCAICCm1hbmRhdG9yeSAJAMwIAgkApQgBBQJheAkAzAgCAgEuCQDMCAIFAmF5CQDMCAICDyBpcyBub3QgZGVmaW5lZAUDbmlsAgABAmF6AgJheAJheQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFAmF4BQJheQkAuQkCCQDMCAICCm1hbmRhdG9yeSAJAMwIAgkApQgBBQJheAkAzAgCAgEuCQDMCAIFAmF5CQDMCAICDyBpcyBub3QgZGVmaW5lZAUDbmlsAgABAmFBAQJhQgkAAgEJALkJAgkAzAgCAghscC5yaWRlOgkAzAgCBQJhQgUDbmlsAgEgAAJhQwkBEUBleHRyTmF0aXZlKDEwNjIpAQkBAmF3AgUEdGhpcwkBAU8AAAJhRAkBEUBleHRyTmF0aXZlKDEwNjIpAQkBAmF3AgUCYUMFAmFyAQJhRQAJAQt2YWx1ZU9yRWxzZQIJAJsIAgUCYUMJAQJhbgAHAQJhRgAJANkEAQkBAmF3AgUCYUMJAQJhZgABAmFHAAQCYUgJAQJhdwIFBHRoaXMJAQFaAAQCYUkJAQJhdwIFBHRoaXMJAQJhYQAEAmFrCQECYXoCBQJhQwkBAmFsAQUCYUkEAmFqCQECYXoCBQJhQwkBAmFsAQUCYUgJALUJAgkBAmF3AgUCYUMJAQJhaQIJAKQDAQUCYWoJAKQDAQUCYWsFAWoBAmFKAQJhSwMJAAACBQJhSwUBaQUEdW5pdAkA2QQBBQJhSwECYUwBAmFLAwkAAAIFAmFLBQR1bml0BQFpCQDYBAEJAQV2YWx1ZQEFAmFLAQJhTQECYU4JAJkKBwkBEUBleHRyTmF0aXZlKDEwNjIpAQkAkQMCBQJhTgUBbwkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmFOBQFwCQDZBAEJAJEDAgUCYU4FAXEJAQJhSgEJAJEDAgUCYU4FAXIJAQJhSgEJAJEDAgUCYU4FAXMJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJhTgUBdAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmFOBQF1AAJhTwkBAmFNAQkBAmFHAAACYVAFAmFPAAJhUQgFAmFQAl8xAAJhUggFAmFQAl8yAAJhUwgFAmFQAl8zAAJhVAgFAmFQAl80AAJhVQgFAmFQAl81AAJhVggFAmFQAl82AAJhVwgFAmFQAl83AQJhWAAJALUJAgkBAmF3AgUCYUMJAQJhZQAFAWoAAmFZCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkAkQMCCQECYVgABQFCAhlpbmNvcnJlY3Qgc3Rha2luZyBhZGRyZXNzAAJhWgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJAJEDAgkBAmFYAAUBQwIZaW5jb3JyZWN0IHN0YWtpbmcgYWRkcmVzcwECYmEKAmJiAmJjAmJkAmJlAmJmAmJnAmJoAmJpAmJqAmJrCQC5CQIJAMwIAgIUJWQlZCVkJWQlZCVkJWQlZCVkJWQJAMwIAgkApAMBBQJiYgkAzAgCCQCkAwEFAmJjCQDMCAIJAKQDAQUCYmQJAMwIAgkApAMBBQJiZQkAzAgCCQCkAwEFAmJmCQDMCAIJAKQDAQUCYmcJAMwIAgkApAMBBQJiaAkAzAgCCQCkAwEFAmJpCQDMCAIJAKQDAQUCYmoJAMwIAgkApAMBBQJiawUDbmlsBQFqAQJibAYCYm0CYm4CYm8CYmUCYmgCYmkJALkJAgkAzAgCAgwlZCVkJWQlZCVkJWQJAMwIAgkApAMBBQJibQkAzAgCCQCkAwEFAmJuCQDMCAIJAKQDAQUCYm8JAMwIAgkApAMBBQJiZQkAzAgCCQCkAwEFAmJoCQDMCAIJAKQDAQUCYmkFA25pbAUBagECYnABAmJxAwkAAAIFAmJxAgVXQVZFUwgJAO8HAQUEdGhpcwlhdmFpbGFibGUJAPAHAgUEdGhpcwkA2QQBBQJicQECYnICAmJzAmJ0CQC8AgMFAmJzBQFkBQJidAECYnUEAmJ2AmJ3AmJ4AmJ5BAJiegkBAUQCBQJieAUCYnYEAmJBCQEBRAIFAmJ5BQJidwkBAmJyAgUCYkEFAmJ6AQJiQgMCYngCYnkCYkMEAmJECQECYUcABAJiRQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmJEBQF0BAJiRgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmJEBQF1BAJiRwkBAmJ1BAUCYkUFAmJGBQJieAUCYnkEAmJ0CQEBRAIFAmJ4BQJiRQQCYnMJAQFEAgUCYnkFAmJGBAJiSAkBAUQCBQJiQwUBYgQCYkkJAQJicgIFAmJ0BQJiSAQCYkoJAQJicgIFAmJzBQJiSAkAzAgCBQJiRwkAzAgCBQJiSQkAzAgCBQJiSgUDbmlsAQJiSwMCYngCYnkCYkMEAmJMCQECYkIDBQJieAUCYnkFAmJDCQDMCAIJAQFHAgkAkQMCBQJiTAAABQFiCQDMCAIJAQFHAgkAkQMCBQJiTAABBQFiCQDMCAIJAQFHAgkAkQMCBQJiTAACBQFiBQNuaWwBAmJNBAJiTgJiTwJiUAFXBAJiRAkBAmFHAAQCYlEJAJEDAgUCYkQFAXEEAmJSCQCRAwIFAmJEBQFyBAJiUwkAkQMCBQJiRAUBcwQCYnYJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJiRAUBdAQCYncJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJiRAUBdQQCYlQJAJEDAgUCYkQFAXAEAmJVCAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDsBwEJANkEAQUCYlEJAKwCAgkArAICAgZBc3NldCAFAmJRAg4gZG9lc24ndCBleGlzdAhxdWFudGl0eQMJAQIhPQIFAmJRBQJiTwkAAgECFUludmFsaWQgYXNzZXQgcGFzc2VkLgQCYlYJAQJicAEFAmJSBAJiVwkBAUQCBQJiVgUCYnYEAmJYCQECYnABBQJiUwQCYlkJAQFEAgUCYlgFAmJ3BAJiWgkBAmJyAgUCYlkFAmJXBAJjYQkBAUcCBQJiWgUBYgQCY2IJAQFEAgUCYlAFAWIEAmNjCQEBRAIFAmJVBQFiBAJjZAkAvAIDBQJiVwUCY2IFAmNjBAJjZQkAvAIDBQJiWQUCY2IFAmNjBAJjZgkBAUcCBQJjZAUCYnYEAmNnCQEBRwIFAmNlBQJidwQCY2gDCQAAAgUCYk4CAAUDbmlsCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFAVcFAmNmAwkAAAIFAmJSAgVXQVZFUwUEdW5pdAkA2QQBBQJiUgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQFXBQJjZwMJAAACBQJiUwIFV0FWRVMFBHVuaXQJANkEAQUCYlMJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAVkCCQClCAEFAVcFAmJOCQECYmwGBQJjZgUCY2cFAmJQBQJjYQUGaGVpZ2h0CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAVIABQJjYQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAVMCBQZoZWlnaHQIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQJjYQUDbmlsCQCcCgoFAmNmBQJjZwUCYlIFAmJTBQJiVgUCYlgFAmJVBQJiWgUCYlQFAmNoAQJjaQkCYk4CY2oCY2sCY2wCY20CY24BVwJjbwJjcAQCYkQJAQJhRwAEAmJRCQDZBAEJAJEDAgUCYkQFAXEEAmNxCQCRAwIFAmJEBQFyBAJjcgkAkQMCBQJiRAUBcwQCY3MJAJEDAgUCYkQFAXYEAmN0CQCRAwIFAmJEBQF3BAJiRQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmJEBQF0BAJiRgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmJEBQF1BAJiVAkAkQMCBQJiRAUBcAQCYlUICQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQUCYlEJAKwCAgkArAICAgZBc3NldCAJANgEAQUCYlECDiBkb2Vzbid0IGV4aXN0CHF1YW50aXR5BAJjdQkA2AQBCQELdmFsdWVPckVsc2UCBQJjbAkA2QQBAgVXQVZFUwQCY3YJANgEAQkBC3ZhbHVlT3JFbHNlAgUCY24JANkEAQIFV0FWRVMDAwkBAiE9AgUCY3EFAmN1BgkBAiE9AgUCY3IFAmN2CQACAQIiSW52YWxpZCBhbXQgb3IgcHJpY2UgYXNzZXQgcGFzc2VkLgQCYlYDBQJjbwkBAmJwAQUCY3EJAGUCCQECYnABBQJjcQUCY2sEAmJYAwUCY28JAQJicAEFAmNyCQBlAgkBAmJwAQUCY3IFAmNtBAJjdwkBAUQCBQJjawUCYkUEAmN4CQEBRAIFAmNtBQJiRgQCY3kJAQJicgIFAmN4BQJjdwQCYlcJAQFEAgUCYlYFAmJFBAJiWQkBAUQCBQJiWAUCYkYEAmN6AwkAAAIFAmJVAAAEAmJaBQFlBAJjQQUBZQQCYkgJAHYGCQC5AgIFAmN3BQJjeAAACQC2AgEABQABAAAFBERPV04JAJcKBQkBAUcCBQJiSAUBYgkBAUcCBQJjdwUCYkUJAQFHAgUCY3gFAmJGCQECYnICCQC3AgIFAmJZBQJjeAkAtwICBQJiVwUCY3cFAmNBBAJiWgkBAmJyAgUCYlkFAmJXBAJjQQkAvAIDCQEBTgEJALgCAgUCYloFAmN5BQFkBQJiWgQCY0IJAQFEAgUCY2oFAWIDAwkBAiE9AgUCYloFAWUJAL8CAgUCY0EFAmNCBwkAAgEJAKwCAgkArAICCQCsAgICD1ByaWNlIHNsaXBwYWdlIAkApgMBBQJjQQIeIGV4Y2VlZGVkIHRoZSBwYXNzZWQgbGltaXQgb2YgCQCmAwEFAmNCBAJjYwkBAUQCBQJiVQUBYgQCY0MJALwCAwUCY3cFAmJaBQFkBAJjRAkAvAIDBQJjeAUBZAUCYloEAmNFAwkAvwICBQJjQwUCY3gJAJQKAgUCY0QFAmN4CQCUCgIFAmN3BQJjQwQCY0YIBQJjRQJfMQQCY0cIBQJjRQJfMgQCYkgJALwCAwUCY2MFAmNHBQJiWQkAlwoFCQEBRwIFAmJIBQFiCQEBRwIFAmNGBQJiRQkBAUcCBQJjRwUCYkYFAmJaBQJjQQQCY0gIBQJjegJfMQQCY0kIBQJjegJfMgQCY0oIBQJjegJfMwQCY2EJAQFHAggFAmN6Al80BQFiBAJjSwkBAUcCCAUCY3oCXzUFAWIDCQBnAgAABQJjSAkAAgECNkludmFsaWQgY2FsY3VsYXRpb25zLiBMUCBjYWxjdWxhdGVkIGlzIGxlc3MgdGhhbiB6ZXJvLgQCY0wDCQEBIQEFAmNwAAAFAmNIBAJjTQkAZQIFAmNrBQJjSQQCY04JAGUCBQJjbQUCY0oEAmNPCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBUgAFAmNhCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBUwIFBmhlaWdodAgFCWxhc3RCbG9jawl0aW1lc3RhbXAFAmNhCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQFWAgUBVwUCYk4JAQJiYQoFAmNJBQJjSgUCY0wFAmNhBQJjagUCY0sFBmhlaWdodAgFCWxhc3RCbG9jawl0aW1lc3RhbXAFAmNNBQJjTgUDbmlsCQCfCg0FAmNIBQJjTAUCY2EFAmJWBQJiWAUCYlUFAmJRBQJiVAUCY08FAmNNBQJjTgUCY2wFAmNuAQJjUAECY1EEAmJECQECYUcABAJjUgkAkQMCBQJiRAUBcgQCY1MJAJEDAgUCYkQFAXMEAmJUCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCYkQFAXAEAmJFCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCYkQFAXQEAmJGCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCYkQFAXUEAmNUCQECYnABBQJjUgQCY1UJAQJicAEFAmNTBAJiWgMJAAACCAUCY1EJb3JkZXJUeXBlBQNCdXkJAQJidQQFAmJFBQJiRgkAZAIFAmNUCAUCY1EGYW1vdW50BQJjVQkBAmJ1BAUCYkUFAmJGCQBlAgUCY1QIBQJjUQZhbW91bnQFAmNVBAJjYQkBAUcCBQJiWgUBYgMDAwkBAmFFAAYJAAACBQJiVAUBbQYJAAACBQJiVAUBbgkAAgECHEV4Y2hhbmdlIG9wZXJhdGlvbnMgZGlzYWJsZWQEAmNWCAgFAmNRCWFzc2V0UGFpcgthbW91bnRBc3NldAQCY1cDCQAAAgUCY1YFBHVuaXQCBVdBVkVTCQDYBAEJAQV2YWx1ZQEFAmNWBAJjWAgIBQJjUQlhc3NldFBhaXIKcHJpY2VBc3NldAQCY1kDCQAAAgUCY1gFBHVuaXQCBVdBVkVTCQDYBAEJAQV2YWx1ZQEFAmNYAwMJAQIhPQIFAmNXBQJjUgYJAQIhPQIFAmNZBQJjUwkAAgECE1dyb25nIG9yZGVyIGFzc2V0cy4EAmNaCAUCY1EFcHJpY2UEAmRhCQBrAwUBYgUCYkYFAmJFBAJkYgkBAUoDBQJjWgUBYgUCZGEEAmRjAwkAAAIIBQJjUQlvcmRlclR5cGUFA0J1eQkAZwIFAmNhBQJkYgkAZwIFAmRiBQJjYQYBAmRkAQJkZQMJAQIhPQIJAJADAQgFAmRlCHBheW1lbnRzAAEJAAIBAh1leGFjdGx5IDEgcGF5bWVudCBpcyBleHBlY3RlZAQCZGYJAQV2YWx1ZQEJAJEDAggFAmRlCHBheW1lbnRzAAAEAmJPCQEFdmFsdWUBCAUCZGYHYXNzZXRJZAQCZGcIBQJkZgZhbW91bnQEAmN6CQECYk0ECQDYBAEIBQJkZQ10cmFuc2FjdGlvbklkCQDYBAEFAmJPBQJkZwgFAmRlBmNhbGxlcgQCY2YIBQJjegJfMQQCY2cIBQJjegJfMgQCYlQJAQ1wYXJzZUludFZhbHVlAQgFAmN6Al85BAJjaAgFAmN6A18xMAMDCQECYUUABgkAAAIFAmJUBQFuCQACAQkArAICAixHZXQgb3BlcmF0aW9uIGlzIGJsb2NrZWQgYnkgYWRtaW4uIFN0YXR1cyA9IAkApAMBBQJiVAkAlwoFBQJjZgUCY2cFAmRnBQJiTwUCY2gBAmRoAwJkZQJjagJjcAMJAQIhPQIJAJADAQgFAmRlCHBheW1lbnRzAAIJAAIBAh9leGFjdGx5IDIgcGF5bWVudHMgYXJlIGV4cGVjdGVkBAJkaQkBBXZhbHVlAQkAkQMCCAUCZGUIcGF5bWVudHMAAAQCZGoJAQV2YWx1ZQEJAJEDAggFAmRlCHBheW1lbnRzAAEEAmRrCQECY2kJCQDYBAEIBQJkZQ10cmFuc2FjdGlvbklkBQJjaggFAmRpBmFtb3VudAgFAmRpB2Fzc2V0SWQIBQJkagZhbW91bnQIBQJkagdhc3NldElkCQClCAEIBQJkZQZjYWxsZXIHBQJjcAQCYlQJAQ1wYXJzZUludFZhbHVlAQgFAmRrAl84AwMDCQECYUUABgkAAAIFAmJUBQFsBgkAAAIFAmJUBQFuCQACAQkArAICAixQdXQgb3BlcmF0aW9uIGlzIGJsb2NrZWQgYnkgYWRtaW4uIFN0YXR1cyA9IAkApAMBBQJiVAUCZGsBAmRsAQJkbQQCZG4JAPwHBAUCYUMCBGVtaXQJAMwIAgUCZG0FA25pbAUDbmlsAwkAAAIFAmRuBQJkbgQCZG8EAmRwBQJkbgMJAAECBQJkcAIHQWRkcmVzcwQCZHEFAmRwCQD8BwQFAmRxAgRlbWl0CQDMCAIFAmRtBQNuaWwFA25pbAUEdW5pdAMJAAACBQJkbwUCZG8FAmRtCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQJkcgECZG0EAmRzCQBrAwUCZG0FAmFkBQFiCQCUCgIJAGUCBQJkbQUCZHMFAmRzAQJkdAQCZHUCZHYBVwFYBAJkdwkAAAIFAVgFBHVuaXQEAmR4CQECYU0BCQECYUcABAJkeQgFAmR4Al8xBAJiVAgFAmR4Al8yBAJiUQgFAmR4Al8zBAJkeggFAmR4Al80BAJjUwgFAmR4Al81BAJkQQgFAmR4Al82BAJkQggFAmR4Al83BAJkQwkBAmJwAQkBAmFMAQUCZHoEAmRECQECYnABCQECYUwBBQJjUwQCZEUDCQAAAgUCZHYFAmR6BgMJAAACBQJkdgUCY1MHCQECYUEBAg1pbnZhbGlkIGFzc2V0BAJkRgMFAmR3CQCUCgIFAmRDBQJkRAMFAmRFCQCUCgIJAGUCBQJkQwUCZHUFAmRECQCUCgIFAmRDCQBlAgUCZEQFAmR1BAJkRwgFAmRGAl8xBAJkSAgFAmRGAl8yBAJkSQMFAmRFCQCUCgIFAmR1AAAJAJQKAgAABQJkdQQCZEoIBQJkSQJfMQQCZEsIBQJkSQJfMgQCZEwICQECZHIBBQJkSgJfMQQCZE0ICQECZHIBBQJkSwJfMQQCZE4JAQJkcgEFAmR1BAJkTwgFAmROAl8xBAJkcwgFAmROAl8yBAJkUAkAZAIFAmRHBQJkTAQCZFEJAGQCBQJkSAUCZE0EAmNhCQEBRwIJAQJicgIJAQFEAgUCZFEFAmRCCQEBRAIFAmRQBQJkQQUBYgQCZFIDBQJkRQUCZEcFAmRIBAJkUwkAtgIBBQJkUgQCZFQJALYCAQgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkA7AcBBQJiUQkArAICCQCsAgICBmFzc2V0IAkA2AQBBQJiUQIOIGRvZXNuJ3QgZXhpc3QIcXVhbnRpdHkEAmRVAwkAvwICBQJkVAUBZgYJAAIBAiJpbml0aWFsIGRlcG9zaXQgcmVxdWlyZXMgYWxsIGNvaW5zAwkAAAIFAmRVBQJkVQQCZFYJALYCAQUCZE8EAmRXCQCWAwEJAMwIAgAACQDMCAIJAKADAQkAugICCQC5AgIFAmRUCQC4AgIJAQpzcXJ0QmlnSW50BAkAtwICBQFkCQC6AgIJALkCAgUCZFYFAWQFAmRTAAgAEgUERE9XTgUBZAUBZAUDbmlsBAJjTwMFAmR3BQNuaWwJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFSAAUCY2EJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFTAgUGaGVpZ2h0CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUCY2EJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAVYCCQClCAEJAQV2YWx1ZQEFAVcJANgEAQkBBXZhbHVlAQUBWAkBAmJhCgUCZEoFAmRLBQJkVwUCY2EAAAAABQZoZWlnaHQIBQlsYXN0QmxvY2sJdGltZXN0YW1wAAAAAAUDbmlsBAJkWAkAawMFAmRIBQFiBQJkRwQCZFkJAGsDBQJkdQUBYgkAZAIFAmRYBQFiBAJkWgkAZQIFAmR1BQJkWQQCZWEJALwCAwUCZFQJALYCAQUCZFoJALYCAQUCZEgEAmViCQCgAwEJALwCAwkAuAICCQC2AgEFAmRXBQJlYQUBYwUCZWEJAJYKBAUCZFcFAmNPBQJkcwUCZWIJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BAmVjBQJlZAJkTwJkdgFXAVgEAmR3CQAAAgUBWAUEdW5pdAQCZWUJAQJhTQEJAQJhRwAEAmR5CAUCZWUCXzEEAmJUCAUCZWUCXzIEAmJRCAUCZWUCXzMEAmR6CAUCZWUCXzQEAmNTCAUCZWUCXzUEAmVmCAUCZWUCXzYEAmVnCAUCZWUCXzcEAmVoCQDMCAIDCQAAAgUCZHYFAmJRBgkAAgECEGludmFsaWQgbHAgYXNzZXQFA25pbAMJAAACBQJlaAUCZWgEAmVpAwkAAAIFAmVkBQJkegYDCQAAAgUCZWQFAmNTBwkBAmFBAQINaW52YWxpZCBhc3NldAQCZWoDBQJlaQkAtgIBCQECYnABCQECYUwBBQJkegkAtgIBCQECYnABCQECYUwBBQJjUwQCZWsJAQJicAEJAQJhTAEFAmR6BAJlbAkBAmJwAQkBAmFMAQUCY1MEAmVtAwUCZWkFAmVrBQJlbAQCZW4JALYCAQUCZW0EAmRUCQC2AgEICQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQUCYlEJAKwCAgkArAICAgZhc3NldCAJANgEAQUCYlECDiBkb2Vzbid0IGV4aXN0CHF1YW50aXR5BAJlbwkAtgIBBQJkTwQCZXAJAJYDAQkAzAgCAAAJAMwIAgkAoAMBCQC6AgIJALkCAgUCZWoJALgCAgUBZAkAdgYJALgCAgUBZAkAugICCQC5AgIFAmVvBQFkBQJkVAASBQFoAAAAEgUERE9XTgUBZAUDbmlsBAJlcQkBAmRyAQUCZXAEAmVyCAUCZXECXzEEAmRzCAUCZXECXzIEAmVzAwUCZWkJAJYKBAUCZXIAAAkAZQIFAmVrBQJlcAUCZWwJAJYKBAAABQJlcgUCZWsJAGUCBQJlbAUCZXAEAmV0CAUCZXMCXzEEAmV1CAUCZXMCXzIEAmV2CAUCZXMCXzMEAmV3CAUCZXMCXzQEAmV4CQECYnICCQEBRAIFAmV3BQJlZwkBAUQCBQJldgUCZWYEAmNhCQEBRwIFAmV4BQFiBAJjTwMFAmR3BQNuaWwJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAVkCCQClCAEJAQV2YWx1ZQEFAVcJANgEAQkBBXZhbHVlAQUBWAkBAmJsBgUCZXQFAmV1BQJkTwUCY2EFBmhlaWdodAgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFSAAUCY2EJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFTAgUGaGVpZ2h0CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUCY2EFA25pbAQCZXkJAQJiTQQCAAkBAmFMAQUCYlEFAmRPBQR0aGlzBAJlegkAZAIIBQJleQJfMQgFAmV5Al8yBAJlYgkAawMJAGUCBQJlcgUCZXoFAWIFAmV6CQCWCgQFAmVyBQJjTwUCZHMFAmViCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQJlQQAEAmRwCQCiCAEJAQFQAAMJAAECBQJkcAIGU3RyaW5nBAJlQgUCZHAJANkEAQUCZUIDCQABAgUCZHACBFVuaXQFBHVuaXQJAAIBAgtNYXRjaCBlcnJvcgECZUMABAJkcAkAoggBCQEBUQADCQABAgUCZHACBlN0cmluZwQCZUIFAmRwCQDZBAEFAmVCAwkAAQIFAmRwAgRVbml0BQR1bml0CQACAQILTWF0Y2ggZXJyb3IBAmVEAQJkZQQCZUUJAAIBAhFQZXJtaXNzaW9uIGRlbmllZAQCZHAJAQJlQQADCQABAgUCZHACCkJ5dGVWZWN0b3IEAmVGBQJkcAMJAAACCAUCZGUPY2FsbGVyUHVibGljS2V5BQJlRgYFAmVFAwkAAQIFAmRwAgRVbml0AwkAAAIIBQJkZQZjYWxsZXIFBHRoaXMGBQJlRQkAAgECC01hdGNoIGVycm9yGQJkZQEKc2V0TWFuYWdlcgECZUcEAmVICQECZUQBBQJkZQMJAAACBQJlSAUCZUgEAmVJCQDZBAEFAmVHAwkAAAIFAmVJBQJlSQkAzAgCCQELU3RyaW5nRW50cnkCCQEBUQAFAmVHBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZGUBDmNvbmZpcm1NYW5hZ2VyAAQCZUoJAQJlQwAEAmVLAwkBCWlzRGVmaW5lZAEFAmVKBgkAAgECEk5vIHBlbmRpbmcgbWFuYWdlcgMJAAACBQJlSwUCZUsEAmVMAwkAAAIIBQJkZQ9jYWxsZXJQdWJsaWNLZXkJAQV2YWx1ZQEFAmVKBgkAAgECG1lvdSBhcmUgbm90IHBlbmRpbmcgbWFuYWdlcgMJAAACBQJlTAUCZUwJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAVAACQDYBAEJAQV2YWx1ZQEFAmVKCQDMCAIJAQtEZWxldGVFbnRyeQEJAQFRAAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmRlAQNwdXQCAmNqAmVNAwkAZgIAAAUCY2oJAAIBAiBJbnZhbGlkIHNsaXBwYWdlVG9sZXJhbmNlIHBhc3NlZAQCZGsJAQJkaAMFAmRlBQJjagYEAmNMCAUCZGsCXzIEAmJRCAUCZGsCXzcEAmNoCAUCZGsCXzkEAmNNCAUCZGsDXzEwBAJjTggFAmRrA18xMQQCZU4IBQJkawNfMTIEAmVPCAUCZGsDXzEzBAJkbgkA/AcEBQJhQwIEZW1pdAkAzAgCBQJjTAUDbmlsBQNuaWwDCQAAAgUCZG4FAmRuBAJkbwQCZHAFAmRuAwkAAQIFAmRwAgdBZGRyZXNzBAJkcQUCZHAJAPwHBAUCZHECBGVtaXQJAMwIAgUCY0wFA25pbAUDbmlsBQR1bml0AwkAAAIFAmRvBQJkbwQCZVADCQBmAgUCY00AAAkA/AcEBQJhWgIDcHV0BQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmVOBQJjTQUDbmlsBQNuaWwDCQAAAgUCZVAFAmVQBAJlUQMJAGYCBQJjTgAACQD8BwQFAmFaAgNwdXQFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCZU8FAmNOBQNuaWwFA25pbAMJAAACBQJlUQUCZVEEAmVSAwUCZU0EAmVTCQD8BwQFAmFZAgVzdGFrZQUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQJiUQUCY0wFA25pbAMJAAACBQJlUwUCZVMFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUCZGUGY2FsbGVyBQJjTAUCYlEFA25pbAkAzggCBQJjaAUCZVIJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZGUBCnB1dEZvckZyZWUBAmVUAwkAZgIAAAUCZVQJAAIBAhRJbnZhbGlkIHZhbHVlIHBhc3NlZAQCZGsJAQJkaAMFAmRlBQJlVAcIBQJkawJfOQJkZQEJcHV0T25lVGtuAgJlVQJlVgQCZVcDAwkBAmFFAAYJAAACBQJhUgUBbAYJAAACBQJhUgUBbgQCZWgJAMwIAgMJAQEhAQUCZVcGCQECYUEBAiFwdXQgb3BlcmF0aW9uIGlzIGJsb2NrZWQgYnkgYWRtaW4JAMwIAgMJAAACCQCQAwEIBQJkZQhwYXltZW50cwABBgkBAmFBAQIeZXhhY3RseSAxIHBheW1lbnQgYXJlIGV4cGVjdGVkBQNuaWwDCQAAAgUCZWgFAmVoBAJlWAkAkQMCCAUCZGUIcGF5bWVudHMAAAQCZHYIBQJlWAdhc3NldElkBAJkdQgFAmVYBmFtb3VudAQBVwgFAmRlBmNhbGxlcgQBWAgFAmRlDXRyYW5zYWN0aW9uSWQEAmVZCQECZHQEBQJkdQUCZHYFAVcFAVgEAmVaCAUCZVkCXzEEAmNPCAUCZVkCXzIEAmRzCAUCZVkCXzMEAmViCAUCZVkCXzQEAmZhAwMJAGYCBQJlVQAACQBmAgUCZVUFAmVaBwkAAgEJALkJAgkAzAgCAh9hbW91bnQgdG8gcmVjZWl2ZSBpcyBsZXNzIHRoYW4gCQDMCAIJAKQDAQUCZVUFA25pbAIABQJlWgQCZG4JAQJkbAEFAmZhAwkAAAIFAmRuBQJkbgQCZVIDBQJlVgQCZmIJAPwHBAUCYVkCBXN0YWtlBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmFTBQJmYQUDbmlsAwkAAAIFAmZiBQJmYgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQJkZQZjYWxsZXIFAmZhBQJhUwUDbmlsBAJmYwMJAGYCBQJkcwAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFAmFEBQJkcwUCZHYFA25pbAUDbmlsCQCUCgIJAM4IAgkAzggCBQJjTwUCZVIFAmZjBQJmYQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJkZQERcHV0T25lVGtuUkVBRE9OTFkCAmR2AmR1BAJmZAkBAmR0BAUCZHUJAQJhSgEFAmR2BQR1bml0BQR1bml0BAJlWggFAmZkAl8xBAJjTwgFAmZkAl8yBAJkcwgFAmZkAl8zBAJlYggFAmZkAl80CQCUCgIFA25pbAkAlQoDBQJlWgUCZHMFAmViAmRlAQlnZXRPbmVUa24CAmZlAmVVBAJmZgMJAQJhRQAGCQAAAgUCYVIFAW4EAmVoCQDMCAIDCQEBIQEFAmZmBgkBAmFBAQIhZ2V0IG9wZXJhdGlvbiBpcyBibG9ja2VkIGJ5IGFkbWluCQDMCAIDCQAAAgkAkAMBCAUCZGUIcGF5bWVudHMAAQYJAQJhQQECHmV4YWN0bHkgMSBwYXltZW50IGFyZSBleHBlY3RlZAUDbmlsAwkAAAIFAmVoBQJlaAQCZWQJAQJhSgEFAmZlBAJlWAkAkQMCCAUCZGUIcGF5bWVudHMAAAQCZHYIBQJlWAdhc3NldElkBAJkTwgFAmVYBmFtb3VudAQBVwgFAmRlBmNhbGxlcgQBWAgFAmRlDXRyYW5zYWN0aW9uSWQEAmZnCQECZWMFBQJlZAUCZE8FAmR2BQFXBQFYBAJmaAgFAmZnAl8xBAJjTwgFAmZnAl8yBAJkcwgFAmZnAl8zBAJlYggFAmZnAl80BAJkbQMDCQBmAgUCZVUAAAkAZgIFAmVVBQJmaAcJAAIBCQC5CQIJAMwIAgIfYW1vdW50IHRvIHJlY2VpdmUgaXMgbGVzcyB0aGFuIAkAzAgCCQCkAwEFAmVVBQNuaWwCAAUCZmgEAmZpCQD8BwQFAmFDAgRidXJuCQDMCAIFAmRPBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmR2BQJkTwUDbmlsAwkAAAIFAmZpBQJmaQQCZmoJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUBVwUCZG0FAmVkBQNuaWwEAmZjAwkAZgIFAmRzAAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUCYUQFAmRzBQJlZAUDbmlsBQNuaWwJAJQKAgkAzggCCQDOCAIFAmNPBQJmagUCZmMFAmRtCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmRlARFnZXRPbmVUa25SRUFET05MWQICZWQCZE8EAmZrCQECZWMFCQECYUoBBQJlZAUCZE8FAmFTBQR1bml0BQR1bml0BAJmaAgFAmZrAl8xBAJjTwgFAmZrAl8yBAJkcwgFAmZrAl8zBAJlYggFAmZrAl80CQCUCgIFA25pbAkAlQoDBQJmaAUCZHMFAmViAmRlARN1bnN0YWtlQW5kR2V0T25lVGtuAwJmbAJmZQJlVQQCZmYDCQECYUUABgkAAAIFAmFSBQFuBAJlaAkAzAgCAwkBASEBBQJmZgYJAQJhQQECIWdldCBvcGVyYXRpb24gaXMgYmxvY2tlZCBieSBhZG1pbgkAzAgCAwkAAAIJAJADAQgFAmRlCHBheW1lbnRzAAAGCQECYUEBAhhubyBwYXltZW50cyBhcmUgZXhwZWN0ZWQFA25pbAMJAAACBQJlaAUCZWgEAmVkCQECYUoBBQJmZQQCZm0JAPwHBAUCYVkCB3Vuc3Rha2UJAMwIAgkA2AQBBQJhUwkAzAgCBQJmbAUDbmlsBQNuaWwDCQAAAgUCZm0FAmZtBAJmbgkBAmVjBQUCZWQFAmZsBQJhUwUEdW5pdAUEdW5pdAQCZmgIBQJmbgJfMQQCY08IBQJmbgJfMgQCZHMIBQJmbgJfMwQCZWIIBQJmbgJfNAQCZG0DAwkAZgIFAmVVAAAJAGYCBQJlVQUCZmgHCQACAQkAuQkCCQDMCAICH2Ftb3VudCB0byByZWNlaXZlIGlzIGxlc3MgdGhhbiAJAMwIAgkApAMBBQJlVQUDbmlsAgAFAmZoBAJmaQkA/AcEBQJhQwIEYnVybgkAzAgCBQJmbAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQJhUwUCZmwFA25pbAMJAAACBQJmaQUCZmkEAmZqCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQJkZQZjYWxsZXIFAmRtBQJlZAUDbmlsBAJmYwMJAGYCBQJkcwAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFAmFEBQJkcwUCZWQFA25pbAUDbmlsCQCUCgIJAM4IAgkAzggCBQJjTwUCZmoFAmZjBQJkbQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJkZQEDZ2V0AAQCY3oJAQJkZAEFAmRlBAJmbwgFAmN6Al8xBAJjZwgFAmN6Al8yBAJkZwgFAmN6Al8zBAJiTwgFAmN6Al80BAJjaAgFAmN6Al81BAJmcAkA/AcEBQJhQwIEYnVybgkAzAgCBQJkZwUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQJiTwUCZGcFA25pbAMJAAACBQJmcAUCZnAFAmNoCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmRlAQlnZXROb0xlc3MCAmZxAmZyBAJjegkBAmRkAQUCZGUEAmNmCAUCY3oCXzEEAmNnCAUCY3oCXzIEAmRnCAUCY3oCXzMEAmJPCAUCY3oCXzQEAmNoCAUCY3oCXzUDCQBmAgUCZnEFAmNmCQACAQkArAICCQCsAgIJAKwCAgIcbm9MZXNzVGhlbkFtdEFzc2V0IGZhaWxlZDogIAkApAMBBQJjZgIDIDwgCQCkAwEFAmZxAwkAZgIFAmZyBQJjZwkAAgEJAKwCAgkArAICCQCsAgICHW5vTGVzc1RoZW5QcmljZUFzc2V0IGZhaWxlZDogCQCkAwEFAmNnAgMgPCAJAKQDAQUCZnIEAmZwCQD8BwQFAmFDAgRidXJuCQDMCAIFAmRnBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmJPBQJkZwUDbmlsAwkAAAIFAmZwBQJmcAUCY2gJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZGUBDXVuc3Rha2VBbmRHZXQBAmRtBAJmcwMJAQIhPQIJAJADAQgFAmRlCHBheW1lbnRzAAAJAAIBAhhObyBwYXltZW50cyBhcmUgZXhwZWN0ZWQGAwkAAAIFAmZzBQJmcwQCYkQJAQJhRwAEAmJRCQDZBAEJAJEDAgUCYkQFAXEEAmZtCQD8BwQFAmFZAgd1bnN0YWtlCQDMCAIJANgEAQUCYlEJAMwIAgUCZG0FA25pbAUDbmlsAwkAAAIFAmZtBQJmbQQCY3oJAQJiTQQJANgEAQgFAmRlDXRyYW5zYWN0aW9uSWQJANgEAQUCYlEFAmRtCAUCZGUGY2FsbGVyBAJiVAkBDXBhcnNlSW50VmFsdWUBCAUCY3oCXzkEAmNoCAUCY3oDXzEwBAJmdAMDCQECYUUABgkAAAIFAmJUBQFuCQACAQkArAICAixHZXQgb3BlcmF0aW9uIGlzIGJsb2NrZWQgYnkgYWRtaW4uIFN0YXR1cyA9IAkApAMBBQJiVAYDCQAAAgUCZnQFAmZ0BAJmcAkA/AcEBQJhQwIEYnVybgkAzAgCBQJkbQUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQJiUQUCZG0FA25pbAMJAAACBQJmcAUCZnAFAmNoCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmRlAQhhY3RpdmF0ZQICZnUCZnYDCQECIT0CCQClCAEIBQJkZQZjYWxsZXIJAKUIAQUCYUMJAAIBAhJwZXJtaXNzaW9ucyBkZW5pZWQJAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCCQEBWgAFAmZ1CQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJhYQAFAmZ2BQNuaWwCB3N1Y2Nlc3MCZGUBHGdldFBvb2xDb25maWdXcmFwcGVyUkVBRE9OTFkACQCUCgIFA25pbAkBAmFHAAJkZQEcZ2V0QWNjQmFsYW5jZVdyYXBwZXJSRUFET05MWQECYnEJAJQKAgUDbmlsCQECYnABBQJicQJkZQEZY2FsY1ByaWNlc1dyYXBwZXJSRUFET05MWQMCYngCYnkCYkMEAmJMCQECYkIDBQJieAUCYnkFAmJDCQCUCgIFA25pbAkAzAgCCQCmAwEJAJEDAgUCYkwAAAkAzAgCCQCmAwEJAJEDAgUCYkwAAQkAzAgCCQCmAwEJAJEDAgUCYkwAAgUDbmlsAmRlARR0b1gxOFdyYXBwZXJSRUFET05MWQIBRQFGCQCUCgIFA25pbAkApgMBCQEBRAIFAUUFAUYCZGUBFmZyb21YMThXcmFwcGVyUkVBRE9OTFkCAUgBSQkAlAoCBQNuaWwJAQFHAgkApwMBBQFIBQFJAmRlAR5jYWxjUHJpY2VCaWdJbnRXcmFwcGVyUkVBRE9OTFkCAmJzAmJ0CQCUCgIFA25pbAkApgMBCQECYnICCQCnAwEFAmJzCQCnAwEFAmJ0AmRlASNlc3RpbWF0ZVB1dE9wZXJhdGlvbldyYXBwZXJSRUFET05MWQkCYk4CY2oCY2sCY2wCY20CY24BVwJjbwJjcAkAlAoCBQNuaWwJAQJjaQkFAmJOBQJjagUCY2sFAmNsBQJjbQUCY24FAVcFAmNvBQJjcAJkZQEjZXN0aW1hdGVHZXRPcGVyYXRpb25XcmFwcGVyUkVBRE9OTFkEAmJOAmJPAmJQAVcEAmN6CQECYk0EBQJiTgUCYk8FAmJQCQERQGV4dHJOYXRpdmUoMTA2MikBBQFXCQCUCgIFA25pbAkAnAoKCAUCY3oCXzEIBQJjegJfMggFAmN6Al8zCAUCY3oCXzQIBQJjegJfNQgFAmN6Al82CAUCY3oCXzcJAKYDAQgFAmN6Al84CAUCY3oCXzkIBQJjegNfMTACZGUBDXN0YXRzUkVBRE9OTFkABAJiRAkBAmFHAAQCYlEJANkEAQkAkQMCBQJiRAUBcQQCY1IJAJEDAgUCYkQFAXIEAmNTCQCRAwIFAmJEBQFzBAJjcwkAkQMCBQJiRAUBdgQCY3QJAJEDAgUCYkQFAXcEAmJFCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCYkQFAXQEAmJGCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCYkQFAXUEAmZ3CAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDsBwEFAmJRCQCsAgIJAKwCAgIGQXNzZXQgCQDYBAEFAmJRAg4gZG9lc24ndCBleGlzdAhxdWFudGl0eQQCY1QJAQJicAEFAmNSBAJjVQkBAmJwAQUCY1MEAmZ4AwkAAAIFAmZ3AAAJAMwIAgUBZQkAzAgCBQFlCQDMCAIFAWUFA25pbAkBAmJCAwUCY1QFAmNVBQJmdwQCY2EAAAQCZnkJAQFHAgkAkQMCBQJmeAABBQFiBAJmegkBAUcCCQCRAwIFAmZ4AAIFAWIEAmZBCQEFdmFsdWUBCQCaCAIFAmFDCQECYW8BCQClCAEFBHRoaXMJAJQKAgUDbmlsCQC5CQIJAMwIAgIOJWQlZCVkJWQlZCVkJWQJAMwIAgkApAMBBQJjVAkAzAgCCQCkAwEFAmNVCQDMCAIJAKQDAQUCZncJAMwIAgkApAMBBQJjYQkAzAgCCQCkAwEFAmZ5CQDMCAIJAKQDAQUCZnoJAMwIAgkApAMBBQJmQQUDbmlsBQFqAmRlASBldmFsdWF0ZVB1dEJ5QW1vdW50QXNzZXRSRUFET05MWQECY2sEAmJECQECYUcABAJiUQkA2QQBCQCRAwIFAmJEBQFxBAJjcQkAkQMCBQJiRAUBcgQCYlIJANkEAQUCY3EEAmNyCQCRAwIFAmJEBQFzBAJiUwkA2QQBBQJjcgQCYkUJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJiRAUBdAQCYkYJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJiRAUBdQQCYlQJAJEDAgUCYkQFAXAEAmZ3CAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDsBwEFAmJRCQCsAgIJAKwCAgIGQXNzZXQgCQDYBAEFAmJRAg4gZG9lc24ndCBleGlzdAhxdWFudGl0eQQCY1QJAQJicAEFAmNxBAJjVQkBAmJwAQUCY3IEAmJ6CQEBRAIFAmNUBQJiRQQCYkEJAQFEAgUCY1UFAmJGBAJiWgMJAAACBQJmdwAABQFlCQECYnICBQJiQQUCYnoEAmN3CQEBRAIFAmNrBQJiRQQCY3gJALwCAwUCY3cFAmJaBQFkBAJjbQkBAUcCBQJjeAUCYkYEAmRrCQECY2kJAgAAoMIeBQJjawUCYlIFAmNtBQJiUwIABgcEAmNICAUCZGsCXzEEAmZCCAUCZGsCXzMEAmJWCAUCZGsCXzQEAmJYCAUCZGsCXzUEAmJVCAUCZGsCXzYJAJQKAgUDbmlsCQC5CQIJAMwIAgIQJWQlZCVkJWQlZCVkJWQlZAkAzAgCCQCkAwEFAmNICQDMCAIJAKQDAQkBAUcCBQJiWgUBYgkAzAgCCQCkAwEFAmJWCQDMCAIJAKQDAQUCYlgJAMwIAgkApAMBBQJiVQkAzAgCBQJiVAkAzAgCCQCkAwEFAmNrCQDMCAIJAKQDAQUCY20FA25pbAUBagJkZQEfZXZhbHVhdGVQdXRCeVByaWNlQXNzZXRSRUFET05MWQECY20EAmJECQECYUcABAJiUQkA2QQBCQCRAwIFAmJEBQFxBAJjcQkAkQMCBQJiRAUBcgQCYlIJANkEAQUCY3EEAmNyCQCRAwIFAmJEBQFzBAJiUwkA2QQBBQJjcgQCYkUJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJiRAUBdAQCYkYJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJiRAUBdQQCYlQJAJEDAgUCYkQFAXAEAmZ3CAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDsBwEFAmJRCQCsAgIJAKwCAgIGQXNzZXQgCQDYBAEFAmJRAg4gZG9lc24ndCBleGlzdAhxdWFudGl0eQQCZkMJAQJicAEFAmNxBAJmRAkBAmJwAQUCY3IEAmZFCQEBRAIFAmZDBQJiRQQCZkYJAQFEAgUCZkQFAmJGBAJiWgMJAAACBQJmdwAABQFlCQECYnICBQJmRgUCZkUEAmN4CQEBRAIFAmNtBQJiRgQCY3cJALwCAwUCY3gFAWQFAmJaBAJjawkBAUcCBQJjdwUCYkUEAmRrCQECY2kJAgAAoMIeBQJjawUCYlIFAmNtBQJiUwIABgcEAmNICAUCZGsCXzEEAmZCCAUCZGsCXzMEAmJWCAUCZGsCXzQEAmJYCAUCZGsCXzUEAmJVCAUCZGsCXzYJAJQKAgUDbmlsCQC5CQIJAMwIAgIQJWQlZCVkJWQlZCVkJWQlZAkAzAgCCQCkAwEFAmNICQDMCAIJAKQDAQkBAUcCBQJiWgUBYgkAzAgCCQCkAwEFAmJWCQDMCAIJAKQDAQUCYlgJAMwIAgkApAMBBQJiVQkAzAgCBQJiVAkAzAgCCQCkAwEFAmNrCQDMCAIJAKQDAQUCY20FA25pbAUBagJkZQETZXZhbHVhdGVHZXRSRUFET05MWQICZkcCZkgEAmN6CQECYk0EAgAFAmZHBQJmSAUEdGhpcwQCY2YIBQJjegJfMQQCY2cIBQJjegJfMgQCYlYIBQJjegJfNQQCYlgIBQJjegJfNgQCYlUIBQJjegJfNwQCY2EIBQJjegJfOAQCYlQJAQ1wYXJzZUludFZhbHVlAQgFAmN6Al85CQCUCgIFA25pbAkAuQkCCQDMCAICDiVkJWQlZCVkJWQlZCVkCQDMCAIJAKQDAQUCY2YJAMwIAgkApAMBBQJjZwkAzAgCCQCkAwEFAmJWCQDMCAIJAKQDAQUCYlgJAMwIAgkApAMBBQJiVQkAzAgCCQCmAwEFAmNhCQDMCAIJAKQDAQUCYlQFA25pbAUBagECZkkBAmZKAAQCZksEAmRwCQECZUEAAwkAAQIFAmRwAgpCeXRlVmVjdG9yBAJlRgUCZHAFAmVGAwkAAQIFAmRwAgRVbml0CAUCZkkPc2VuZGVyUHVibGljS2V5CQACAQILTWF0Y2ggZXJyb3IEAmRwBQJmSQMJAAECBQJkcAIFT3JkZXIEAmNRBQJkcAQCZkwJAQJhRgAEAmF0CQECY1ABBQJjUQQCYXUJAPQDAwgFAmNRCWJvZHlCeXRlcwkAkQMCCAUCY1EGcHJvb2ZzAAAIBQJjUQ9zZW5kZXJQdWJsaWNLZXkEAmF2CQD0AwMIBQJjUQlib2R5Qnl0ZXMJAJEDAggFAmNRBnByb29mcwABBQJmTAMDAwUCYXQFAmF1BwUCYXYHBgkBAmFzAwUCYXQFAmF1BQJhdgMJAAECBQJkcAIUU2V0U2NyaXB0VHJhbnNhY3Rpb24EAmVCBQJkcAQCZk0JAPYDAQkBBXZhbHVlAQgFAmVCBnNjcmlwdAQCZk4JANsEAQkBBXZhbHVlAQkAnQgCBQJhQwkBAmFxAAQCZk8JAPEHAQUEdGhpcwMDCQAAAgUCZk4FAmZNCQECIT0CBQJmTwUCZk0HBgkA9AMDCAUCZkkJYm9keUJ5dGVzCQCRAwIIBQJmSQZwcm9vZnMAAAUCZksJAPQDAwgFAmZJCWJvZHlCeXRlcwkAkQMCCAUCZkkGcHJvb2ZzAAAFAmZLG8FhEA==", "chainId": 84, "height": 2286592, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: GBJrJVq5HzWEWBPMwUVseGSRjR4sQkhKnH2jDak7Qfue Next: kJwWzrtMZwH4bkEaMrN61xhGzqypxSuDtiqTBHQxAKi Diff:
OldNewDifferences
511511 if ((dU == dU))
512512 then {
513513 let dV = toBigInt(dO)
514- let dW = toInt(((dT * (sqrtBigInt((d + ((dV * d) / dS)), 8, 18, DOWN) - d)) / d))
514+ 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))]
557557 let en = toBigInt(em)
558558 let dT = toBigInt(valueOrErrorMessage(assetInfo(bQ), (("asset " + toBase58String(bQ)) + " doesn't exist")).quantity)
559559 let eo = toBigInt(dO)
560- let ep = toInt(((ej * (d - pow((d - ((eo * d) / dT)), 18, h, 0, 18, DOWN))) / d))
560+ let ep = max([0, toInt(((ej * (d - pow((d - ((eo * d) / dT)), 18, h, 0, 18, DOWN))) / d))])
561561 let eq = dr(ep)
562562 let er = eq._1
563563 let ds = eq._2
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
510510 else throw("initial deposit requires all coins")
511511 if ((dU == dU))
512512 then {
513513 let dV = toBigInt(dO)
514- let dW = toInt(((dT * (sqrtBigInt((d + ((dV * d) / dS)), 8, 18, DOWN) - d)) / d))
514+ 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 = fraction(dT, toBigInt(dZ), toBigInt(dH))
522522 let eb = toInt(fraction((toBigInt(dW) - ea), c, ea))
523523 $Tuple4(dW, cO, ds, eb)
524524 }
525525 else throw("Strict value is not equal to itself.")
526526 }
527527
528528
529529 func ec (ed,dO,dv,W,X) = {
530530 let dw = (X == unit)
531531 let ee = aM(aG())
532532 let dy = ee._1
533533 let bT = ee._2
534534 let bQ = ee._3
535535 let dz = ee._4
536536 let cS = ee._5
537537 let ef = ee._6
538538 let eg = ee._7
539539 let eh = [if ((dv == bQ))
540540 then true
541541 else throw("invalid lp asset")]
542542 if ((eh == eh))
543543 then {
544544 let ei = if ((ed == dz))
545545 then true
546546 else if ((ed == cS))
547547 then false
548548 else aA("invalid asset")
549549 let ej = if (ei)
550550 then toBigInt(bp(aL(dz)))
551551 else toBigInt(bp(aL(cS)))
552552 let ek = bp(aL(dz))
553553 let el = bp(aL(cS))
554554 let em = if (ei)
555555 then ek
556556 else el
557557 let en = toBigInt(em)
558558 let dT = toBigInt(valueOrErrorMessage(assetInfo(bQ), (("asset " + toBase58String(bQ)) + " doesn't exist")).quantity)
559559 let eo = toBigInt(dO)
560- let ep = toInt(((ej * (d - pow((d - ((eo * d) / dT)), 18, h, 0, 18, DOWN))) / d))
560+ let ep = max([0, toInt(((ej * (d - pow((d - ((eo * d) / dT)), 18, h, 0, 18, DOWN))) / d))])
561561 let eq = dr(ep)
562562 let er = eq._1
563563 let ds = eq._2
564564 let es = if (ei)
565565 then $Tuple4(er, 0, (ek - ep), el)
566566 else $Tuple4(0, er, ek, (el - ep))
567567 let et = es._1
568568 let eu = es._2
569569 let ev = es._3
570570 let ew = es._4
571571 let ex = br(D(ew, eg), D(ev, ef))
572572 let ca = G(ex, b)
573573 let cO = if (dw)
574574 then nil
575575 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)]
576576 let ey = bM("", aL(bQ), dO, this)
577577 let ez = (ey._1 + ey._2)
578578 let eb = fraction((er - ez), b, ez)
579579 $Tuple4(er, cO, ds, eb)
580580 }
581581 else throw("Strict value is not equal to itself.")
582582 }
583583
584584
585585 func eA () = {
586586 let dp = getString(P())
587587 if ($isInstanceOf(dp, "String"))
588588 then {
589589 let eB = dp
590590 fromBase58String(eB)
591591 }
592592 else if ($isInstanceOf(dp, "Unit"))
593593 then unit
594594 else throw("Match error")
595595 }
596596
597597
598598 func eC () = {
599599 let dp = getString(Q())
600600 if ($isInstanceOf(dp, "String"))
601601 then {
602602 let eB = dp
603603 fromBase58String(eB)
604604 }
605605 else if ($isInstanceOf(dp, "Unit"))
606606 then unit
607607 else throw("Match error")
608608 }
609609
610610
611611 func eD (de) = {
612612 let eE = throw("Permission denied")
613613 let dp = eA()
614614 if ($isInstanceOf(dp, "ByteVector"))
615615 then {
616616 let eF = dp
617617 if ((de.callerPublicKey == eF))
618618 then true
619619 else eE
620620 }
621621 else if ($isInstanceOf(dp, "Unit"))
622622 then if ((de.caller == this))
623623 then true
624624 else eE
625625 else throw("Match error")
626626 }
627627
628628
629629 @Callable(de)
630630 func setManager (eG) = {
631631 let eH = eD(de)
632632 if ((eH == eH))
633633 then {
634634 let eI = fromBase58String(eG)
635635 if ((eI == eI))
636636 then [StringEntry(Q(), eG)]
637637 else throw("Strict value is not equal to itself.")
638638 }
639639 else throw("Strict value is not equal to itself.")
640640 }
641641
642642
643643
644644 @Callable(de)
645645 func confirmManager () = {
646646 let eJ = eC()
647647 let eK = if (isDefined(eJ))
648648 then true
649649 else throw("No pending manager")
650650 if ((eK == eK))
651651 then {
652652 let eL = if ((de.callerPublicKey == value(eJ)))
653653 then true
654654 else throw("You are not pending manager")
655655 if ((eL == eL))
656656 then [StringEntry(P(), toBase58String(value(eJ))), DeleteEntry(Q())]
657657 else throw("Strict value is not equal to itself.")
658658 }
659659 else throw("Strict value is not equal to itself.")
660660 }
661661
662662
663663
664664 @Callable(de)
665665 func put (cj,eM) = if ((0 > cj))
666666 then throw("Invalid slippageTolerance passed")
667667 else {
668668 let dk = dh(de, cj, true)
669669 let cL = dk._2
670670 let bQ = dk._7
671671 let ch = dk._9
672672 let cM = dk._10
673673 let cN = dk._11
674674 let eN = dk._12
675675 let eO = dk._13
676676 let dn = invoke(aC, "emit", [cL], nil)
677677 if ((dn == dn))
678678 then {
679679 let do = {
680680 let dp = dn
681681 if ($isInstanceOf(dp, "Address"))
682682 then {
683683 let dq = dp
684684 invoke(dq, "emit", [cL], nil)
685685 }
686686 else unit
687687 }
688688 if ((do == do))
689689 then {
690690 let eP = if ((cM > 0))
691691 then invoke(aZ, "put", nil, [AttachedPayment(eN, cM)])
692692 else nil
693693 if ((eP == eP))
694694 then {
695695 let eQ = if ((cN > 0))
696696 then invoke(aZ, "put", nil, [AttachedPayment(eO, cN)])
697697 else nil
698698 if ((eQ == eQ))
699699 then {
700700 let eR = if (eM)
701701 then {
702702 let eS = invoke(aY, "stake", nil, [AttachedPayment(bQ, cL)])
703703 if ((eS == eS))
704704 then nil
705705 else throw("Strict value is not equal to itself.")
706706 }
707707 else [ScriptTransfer(de.caller, cL, bQ)]
708708 (ch ++ eR)
709709 }
710710 else throw("Strict value is not equal to itself.")
711711 }
712712 else throw("Strict value is not equal to itself.")
713713 }
714714 else throw("Strict value is not equal to itself.")
715715 }
716716 else throw("Strict value is not equal to itself.")
717717 }
718718
719719
720720
721721 @Callable(de)
722722 func putForFree (eT) = if ((0 > eT))
723723 then throw("Invalid value passed")
724724 else {
725725 let dk = dh(de, eT, false)
726726 dk._9
727727 }
728728
729729
730730
731731 @Callable(de)
732732 func putOneTkn (eU,eV) = {
733733 let eW = if (if (aE())
734734 then true
735735 else (aR == l))
736736 then true
737737 else (aR == n)
738738 let eh = [if (!(eW))
739739 then true
740740 else aA("put operation is blocked by admin"), if ((size(de.payments) == 1))
741741 then true
742742 else aA("exactly 1 payment are expected")]
743743 if ((eh == eh))
744744 then {
745745 let eX = de.payments[0]
746746 let dv = eX.assetId
747747 let du = eX.amount
748748 let W = de.caller
749749 let X = de.transactionId
750750 let eY = dt(du, dv, W, X)
751751 let eZ = eY._1
752752 let cO = eY._2
753753 let ds = eY._3
754754 let eb = eY._4
755755 let fa = if (if ((eU > 0))
756756 then (eU > eZ)
757757 else false)
758758 then throw(makeString(["amount to receive is less than ", toString(eU)], ""))
759759 else eZ
760760 let dn = dl(fa)
761761 if ((dn == dn))
762762 then {
763763 let eR = if (eV)
764764 then {
765765 let fb = invoke(aY, "stake", nil, [AttachedPayment(aS, fa)])
766766 if ((fb == fb))
767767 then nil
768768 else throw("Strict value is not equal to itself.")
769769 }
770770 else [ScriptTransfer(de.caller, fa, aS)]
771771 let fc = if ((ds > 0))
772772 then [ScriptTransfer(aD, ds, dv)]
773773 else nil
774774 $Tuple2(((cO ++ eR) ++ fc), fa)
775775 }
776776 else throw("Strict value is not equal to itself.")
777777 }
778778 else throw("Strict value is not equal to itself.")
779779 }
780780
781781
782782
783783 @Callable(de)
784784 func putOneTknREADONLY (dv,du) = {
785785 let fd = dt(du, aJ(dv), unit, unit)
786786 let eZ = fd._1
787787 let cO = fd._2
788788 let ds = fd._3
789789 let eb = fd._4
790790 $Tuple2(nil, $Tuple3(eZ, ds, eb))
791791 }
792792
793793
794794
795795 @Callable(de)
796796 func getOneTkn (fe,eU) = {
797797 let ff = if (aE())
798798 then true
799799 else (aR == n)
800800 let eh = [if (!(ff))
801801 then true
802802 else aA("get operation is blocked by admin"), if ((size(de.payments) == 1))
803803 then true
804804 else aA("exactly 1 payment are expected")]
805805 if ((eh == eh))
806806 then {
807807 let ed = aJ(fe)
808808 let eX = de.payments[0]
809809 let dv = eX.assetId
810810 let dO = eX.amount
811811 let W = de.caller
812812 let X = de.transactionId
813813 let fg = ec(ed, dO, dv, W, X)
814814 let fh = fg._1
815815 let cO = fg._2
816816 let ds = fg._3
817817 let eb = fg._4
818818 let dm = if (if ((eU > 0))
819819 then (eU > fh)
820820 else false)
821821 then throw(makeString(["amount to receive is less than ", toString(eU)], ""))
822822 else fh
823823 let fi = invoke(aC, "burn", [dO], [AttachedPayment(dv, dO)])
824824 if ((fi == fi))
825825 then {
826826 let fj = [ScriptTransfer(W, dm, ed)]
827827 let fc = if ((ds > 0))
828828 then [ScriptTransfer(aD, ds, ed)]
829829 else nil
830830 $Tuple2(((cO ++ fj) ++ fc), dm)
831831 }
832832 else throw("Strict value is not equal to itself.")
833833 }
834834 else throw("Strict value is not equal to itself.")
835835 }
836836
837837
838838
839839 @Callable(de)
840840 func getOneTknREADONLY (ed,dO) = {
841841 let fk = ec(aJ(ed), dO, aS, unit, unit)
842842 let fh = fk._1
843843 let cO = fk._2
844844 let ds = fk._3
845845 let eb = fk._4
846846 $Tuple2(nil, $Tuple3(fh, ds, eb))
847847 }
848848
849849
850850
851851 @Callable(de)
852852 func unstakeAndGetOneTkn (fl,fe,eU) = {
853853 let ff = if (aE())
854854 then true
855855 else (aR == n)
856856 let eh = [if (!(ff))
857857 then true
858858 else aA("get operation is blocked by admin"), if ((size(de.payments) == 0))
859859 then true
860860 else aA("no payments are expected")]
861861 if ((eh == eh))
862862 then {
863863 let ed = aJ(fe)
864864 let fm = invoke(aY, "unstake", [toBase58String(aS), fl], nil)
865865 if ((fm == fm))
866866 then {
867867 let fn = ec(ed, fl, aS, unit, unit)
868868 let fh = fn._1
869869 let cO = fn._2
870870 let ds = fn._3
871871 let eb = fn._4
872872 let dm = if (if ((eU > 0))
873873 then (eU > fh)
874874 else false)
875875 then throw(makeString(["amount to receive is less than ", toString(eU)], ""))
876876 else fh
877877 let fi = invoke(aC, "burn", [fl], [AttachedPayment(aS, fl)])
878878 if ((fi == fi))
879879 then {
880880 let fj = [ScriptTransfer(de.caller, dm, ed)]
881881 let fc = if ((ds > 0))
882882 then [ScriptTransfer(aD, ds, ed)]
883883 else nil
884884 $Tuple2(((cO ++ fj) ++ fc), dm)
885885 }
886886 else throw("Strict value is not equal to itself.")
887887 }
888888 else throw("Strict value is not equal to itself.")
889889 }
890890 else throw("Strict value is not equal to itself.")
891891 }
892892
893893
894894
895895 @Callable(de)
896896 func get () = {
897897 let cz = dd(de)
898898 let fo = cz._1
899899 let cg = cz._2
900900 let dg = cz._3
901901 let bO = cz._4
902902 let ch = cz._5
903903 let fp = invoke(aC, "burn", [dg], [AttachedPayment(bO, dg)])
904904 if ((fp == fp))
905905 then ch
906906 else throw("Strict value is not equal to itself.")
907907 }
908908
909909
910910
911911 @Callable(de)
912912 func getNoLess (fq,fr) = {
913913 let cz = dd(de)
914914 let cf = cz._1
915915 let cg = cz._2
916916 let dg = cz._3
917917 let bO = cz._4
918918 let ch = cz._5
919919 if ((fq > cf))
920920 then throw(((("noLessThenAmtAsset failed: " + toString(cf)) + " < ") + toString(fq)))
921921 else if ((fr > cg))
922922 then throw(((("noLessThenPriceAsset failed: " + toString(cg)) + " < ") + toString(fr)))
923923 else {
924924 let fp = invoke(aC, "burn", [dg], [AttachedPayment(bO, dg)])
925925 if ((fp == fp))
926926 then ch
927927 else throw("Strict value is not equal to itself.")
928928 }
929929 }
930930
931931
932932
933933 @Callable(de)
934934 func unstakeAndGet (dm) = {
935935 let fs = if ((size(de.payments) != 0))
936936 then throw("No payments are expected")
937937 else true
938938 if ((fs == fs))
939939 then {
940940 let bD = aG()
941941 let bQ = fromBase58String(bD[q])
942942 let fm = invoke(aY, "unstake", [toBase58String(bQ), dm], nil)
943943 if ((fm == fm))
944944 then {
945945 let cz = bM(toBase58String(de.transactionId), toBase58String(bQ), dm, de.caller)
946946 let bT = parseIntValue(cz._9)
947947 let ch = cz._10
948948 let ft = if (if (aE())
949949 then true
950950 else (bT == n))
951951 then throw(("Get operation is blocked by admin. Status = " + toString(bT)))
952952 else true
953953 if ((ft == ft))
954954 then {
955955 let fp = invoke(aC, "burn", [dm], [AttachedPayment(bQ, dm)])
956956 if ((fp == fp))
957957 then ch
958958 else throw("Strict value is not equal to itself.")
959959 }
960960 else throw("Strict value is not equal to itself.")
961961 }
962962 else throw("Strict value is not equal to itself.")
963963 }
964964 else throw("Strict value is not equal to itself.")
965965 }
966966
967967
968968
969969 @Callable(de)
970970 func activate (fu,fv) = if ((toString(de.caller) != toString(aC)))
971971 then throw("permissions denied")
972972 else $Tuple2([StringEntry(Z(), fu), StringEntry(aa(), fv)], "success")
973973
974974
975975
976976 @Callable(de)
977977 func getPoolConfigWrapperREADONLY () = $Tuple2(nil, aG())
978978
979979
980980
981981 @Callable(de)
982982 func getAccBalanceWrapperREADONLY (bq) = $Tuple2(nil, bp(bq))
983983
984984
985985
986986 @Callable(de)
987987 func calcPricesWrapperREADONLY (bx,by,bC) = {
988988 let bL = bB(bx, by, bC)
989989 $Tuple2(nil, [toString(bL[0]), toString(bL[1]), toString(bL[2])])
990990 }
991991
992992
993993
994994 @Callable(de)
995995 func toX18WrapperREADONLY (E,F) = $Tuple2(nil, toString(D(E, F)))
996996
997997
998998
999999 @Callable(de)
10001000 func fromX18WrapperREADONLY (H,I) = $Tuple2(nil, G(parseBigIntValue(H), I))
10011001
10021002
10031003
10041004 @Callable(de)
10051005 func calcPriceBigIntWrapperREADONLY (bs,bt) = $Tuple2(nil, toString(br(parseBigIntValue(bs), parseBigIntValue(bt))))
10061006
10071007
10081008
10091009 @Callable(de)
10101010 func estimatePutOperationWrapperREADONLY (bN,cj,ck,cl,cm,cn,W,co,cp) = $Tuple2(nil, ci(bN, cj, ck, cl, cm, cn, W, co, cp))
10111011
10121012
10131013
10141014 @Callable(de)
10151015 func estimateGetOperationWrapperREADONLY (bN,bO,bP,W) = {
10161016 let cz = bM(bN, bO, bP, addressFromStringValue(W))
10171017 $Tuple2(nil, $Tuple10(cz._1, cz._2, cz._3, cz._4, cz._5, cz._6, cz._7, toString(cz._8), cz._9, cz._10))
10181018 }
10191019
10201020
10211021
10221022 @Callable(de)
10231023 func statsREADONLY () = {
10241024 let bD = aG()
10251025 let bQ = fromBase58String(bD[q])
10261026 let cR = bD[r]
10271027 let cS = bD[s]
10281028 let cs = bD[v]
10291029 let ct = bD[w]
10301030 let bE = parseIntValue(bD[t])
10311031 let bF = parseIntValue(bD[u])
10321032 let fw = valueOrErrorMessage(assetInfo(bQ), (("Asset " + toBase58String(bQ)) + " doesn't exist")).quantity
10331033 let cT = bp(cR)
10341034 let cU = bp(cS)
10351035 let fx = if ((fw == 0))
10361036 then [e, e, e]
10371037 else bB(cT, cU, fw)
10381038 let ca = 0
10391039 let fy = G(fx[1], b)
10401040 let fz = G(fx[2], b)
10411041 let fA = value(getInteger(aC, ao(toString(this))))
10421042 $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))
10431043 }
10441044
10451045
10461046
10471047 @Callable(de)
10481048 func evaluatePutByAmountAssetREADONLY (ck) = {
10491049 let bD = aG()
10501050 let bQ = fromBase58String(bD[q])
10511051 let cq = bD[r]
10521052 let bR = fromBase58String(cq)
10531053 let cr = bD[s]
10541054 let bS = fromBase58String(cr)
10551055 let bE = parseIntValue(bD[t])
10561056 let bF = parseIntValue(bD[u])
10571057 let bT = bD[p]
10581058 let fw = valueOrErrorMessage(assetInfo(bQ), (("Asset " + toBase58String(bQ)) + " doesn't exist")).quantity
10591059 let cT = bp(cq)
10601060 let cU = bp(cr)
10611061 let bz = D(cT, bE)
10621062 let bA = D(cU, bF)
10631063 let bZ = if ((fw == 0))
10641064 then e
10651065 else br(bA, bz)
10661066 let cw = D(ck, bE)
10671067 let cx = fraction(cw, bZ, d)
10681068 let cm = G(cx, bF)
10691069 let dk = ci("", 500000, ck, bR, cm, bS, "", true, false)
10701070 let cH = dk._1
10711071 let fB = dk._3
10721072 let bV = dk._4
10731073 let bX = dk._5
10741074 let bU = dk._6
10751075 $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))
10761076 }
10771077
10781078
10791079
10801080 @Callable(de)
10811081 func evaluatePutByPriceAssetREADONLY (cm) = {
10821082 let bD = aG()
10831083 let bQ = fromBase58String(bD[q])
10841084 let cq = bD[r]
10851085 let bR = fromBase58String(cq)
10861086 let cr = bD[s]
10871087 let bS = fromBase58String(cr)
10881088 let bE = parseIntValue(bD[t])
10891089 let bF = parseIntValue(bD[u])
10901090 let bT = bD[p]
10911091 let fw = valueOrErrorMessage(assetInfo(bQ), (("Asset " + toBase58String(bQ)) + " doesn't exist")).quantity
10921092 let fC = bp(cq)
10931093 let fD = bp(cr)
10941094 let fE = D(fC, bE)
10951095 let fF = D(fD, bF)
10961096 let bZ = if ((fw == 0))
10971097 then e
10981098 else br(fF, fE)
10991099 let cx = D(cm, bF)
11001100 let cw = fraction(cx, d, bZ)
11011101 let ck = G(cw, bE)
11021102 let dk = ci("", 500000, ck, bR, cm, bS, "", true, false)
11031103 let cH = dk._1
11041104 let fB = dk._3
11051105 let bV = dk._4
11061106 let bX = dk._5
11071107 let bU = dk._6
11081108 $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))
11091109 }
11101110
11111111
11121112
11131113 @Callable(de)
11141114 func evaluateGetREADONLY (fG,fH) = {
11151115 let cz = bM("", fG, fH, this)
11161116 let cf = cz._1
11171117 let cg = cz._2
11181118 let bV = cz._5
11191119 let bX = cz._6
11201120 let bU = cz._7
11211121 let ca = cz._8
11221122 let bT = parseIntValue(cz._9)
11231123 $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))
11241124 }
11251125
11261126
11271127 @Verifier(fI)
11281128 func fJ () = {
11291129 let fK = {
11301130 let dp = eA()
11311131 if ($isInstanceOf(dp, "ByteVector"))
11321132 then {
11331133 let eF = dp
11341134 eF
11351135 }
11361136 else if ($isInstanceOf(dp, "Unit"))
11371137 then fI.senderPublicKey
11381138 else throw("Match error")
11391139 }
11401140 let dp = fI
11411141 if ($isInstanceOf(dp, "Order"))
11421142 then {
11431143 let cQ = dp
11441144 let fL = aF()
11451145 let at = cP(cQ)
11461146 let au = sigVerify(cQ.bodyBytes, cQ.proofs[0], cQ.senderPublicKey)
11471147 let av = sigVerify(cQ.bodyBytes, cQ.proofs[1], fL)
11481148 if (if (if (at)
11491149 then au
11501150 else false)
11511151 then av
11521152 else false)
11531153 then true
11541154 else as(at, au, av)
11551155 }
11561156 else if ($isInstanceOf(dp, "SetScriptTransaction"))
11571157 then {
11581158 let eB = dp
11591159 let fM = blake2b256(value(eB.script))
11601160 let fN = fromBase64String(value(getString(aC, aq())))
11611161 let fO = scriptHash(this)
11621162 if (if ((fN == fM))
11631163 then (fO != fM)
11641164 else false)
11651165 then true
11661166 else sigVerify(fI.bodyBytes, fI.proofs[0], fK)
11671167 }
11681168 else sigVerify(fI.bodyBytes, fI.proofs[0], fK)
11691169 }
11701170

github/deemru/w8io/026f985 
111.40 ms