tx · 2SEzJRmshq3ZAwwXwNDk4XD7jhWDUXABeVqgpxXvd6eQ

3Mx85sUMQFaaTcAjiQpd5sGUAdaCrNKxv7a:  -0.12600000 Waves

2023.04.25 14:24 [2550011] smart account 3Mx85sUMQFaaTcAjiQpd5sGUAdaCrNKxv7a > SELF 0.00000000 Waves

{ "type": 13, "id": "2SEzJRmshq3ZAwwXwNDk4XD7jhWDUXABeVqgpxXvd6eQ", "fee": 12600000, "feeAssetId": null, "timestamp": 1682421537153, "version": 2, "chainId": 84, "sender": "3Mx85sUMQFaaTcAjiQpd5sGUAdaCrNKxv7a", "senderPublicKey": "6f5UpEaYxvWL2FTjo4b6CUu3VwSHJ9BvuodtSaSb5tJ8", "proofs": [ "4HjjXXSGgAVZ2eabGUFxQWHkaSvVetAAANxo8bdtvwCSnPe6prb3QeVqu2BHUyRatDPqAfAJ17FGk889oSxKx9Gd" ], "script": "base64:BgKoAQgCEgASBQoDAQQBEgcKBQEEAQgBEgMKAQgSABIECgIBBBIDCgEBEgQKAgEEEgQKAggBEgQKAggBEgQKAggBEgUKAwEIARIAEgQKAgEBEgMKAQESBQoDAQEBEgQKAggIEgASABIDCgEIEgUKAwEBARIECgIBARIECgIIARIECgIICBILCgkIAQECAQIIBAQSBgoECAgBCBIAEgMKAQESAwoBARIECgIIAYEBAApsUGRlY2ltYWxzAAgABnNjYWxlOACAwtcvAAxzY2FsZThCaWdJbnQJALYCAQCAwtcvAAdzY2FsZTE4CQC2AgEAgICQu7rWrfANAAp6ZXJvQmlnSW50CQC2AgEAAAAEYmlnMAkAtgIBAAAABGJpZzEJALYCAQABAARiaWcyCQC2AgEAAgALd2F2ZXNTdHJpbmcCBVdBVkVTAANTRVACAl9fAApQb29sQWN0aXZlAAEAD1Bvb2xQdXREaXNhYmxlZAACABNQb29sTWF0Y2hlckRpc2FibGVkAAMADFBvb2xTaHV0ZG93bgAEAA5pZHhQb29sQWRkcmVzcwABAA1pZHhQb29sU3RhdHVzAAIAEGlkeFBvb2xMUEFzc2V0SWQAAwANaWR4QW10QXNzZXRJZAAEAA9pZHhQcmljZUFzc2V0SWQABQAOaWR4QW10QXNzZXREY20ABgAQaWR4UHJpY2VBc3NldERjbQAHAA5pZHhJQW10QXNzZXRJZAAIABBpZHhJUHJpY2VBc3NldElkAAkADWlkeExQQXNzZXREY20ACgASaWR4UG9vbEFtdEFzc2V0QW10AAEAFGlkeFBvb2xQcmljZUFzc2V0QW10AAIAEWlkeFBvb2xMUEFzc2V0QW10AAMAGWlkeEZhY3RvcnlTdGFraW5nQ29udHJhY3QAAQAaaWR4RmFjdG9yeVNsaXBwYWdlQ29udHJhY3QABwEFdG9YMTgCB29yaWdWYWwNb3JpZ1NjYWxlTXVsdAkAvAIDCQC2AgEFB29yaWdWYWwFB3NjYWxlMTgJALYCAQUNb3JpZ1NjYWxlTXVsdAELdG9YMThCaWdJbnQCB29yaWdWYWwNb3JpZ1NjYWxlTXVsdAkAvAIDBQdvcmlnVmFsBQdzY2FsZTE4BQ1vcmlnU2NhbGVNdWx0AQdmcm9tWDE4AgN2YWwPcmVzdWx0U2NhbGVNdWx0CQCgAwEJALwCAwUDdmFsCQC2AgEFD3Jlc3VsdFNjYWxlTXVsdAUHc2NhbGUxOAEMZnJvbVgxOFJvdW5kAwN2YWwPcmVzdWx0U2NhbGVNdWx0BXJvdW5kCQCgAwEJAL0CBAUDdmFsCQC2AgEFD3Jlc3VsdFNjYWxlTXVsdAUHc2NhbGUxOAUFcm91bmQBB3RvU2NhbGUDA2FtdAhyZXNTY2FsZQhjdXJTY2FsZQkAawMFA2FtdAUIcmVzU2NhbGUFCGN1clNjYWxlAQNhYnMBA3ZhbAMJAGYCAAAFA3ZhbAkBAS0BBQN2YWwFA3ZhbAEJYWJzQmlnSW50AQN2YWwDCQC/AgIFCnplcm9CaWdJbnQFA3ZhbAkAvgIBBQN2YWwFA3ZhbAEMc3dhcENvbnRyYWN0AAIQJXNfX3N3YXBDb250cmFjdAECZmMAAhMlc19fZmFjdG9yeUNvbnRyYWN0AQNtcGsAAhQlc19fbWFuYWdlclB1YmxpY0tleQEEcG1wawACGyVzX19wZW5kaW5nTWFuYWdlclB1YmxpY0tleQECcGwAAhElcyVzX19wcmljZV9fbGFzdAECcGgCAWgJdGltZXN0YW1wCQC5CQIJAMwIAgIYJXMlcyVkJWRfX3ByaWNlX19oaXN0b3J5CQDMCAIJAKQDAQUBaAkAzAgCCQCkAwEFCXRpbWVzdGFtcAUDbmlsBQNTRVABA3BhdQILdXNlckFkZHJlc3MEdHhJZAkArAICCQCsAgIJAKwCAgILJXMlcyVzX19QX18FC3VzZXJBZGRyZXNzAgJfXwUEdHhJZAEDZ2F1Agt1c2VyQWRkcmVzcwR0eElkCQCsAgIJAKwCAgkArAICAgslcyVzJXNfX0dfXwULdXNlckFkZHJlc3MCAl9fBQR0eElkAQJhYQACDyVzX19hbW91bnRBc3NldAECcGEAAg4lc19fcHJpY2VBc3NldAAGa2V5RmVlAgclc19fZmVlAApmZWVEZWZhdWx0CQBrAwAKBQZzY2FsZTgAkE4AA2ZlZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQZrZXlGZWUFCmZlZURlZmF1bHQABmtleUtMcAkAuQkCCQDMCAICAiVzCQDMCAICA2tMcAUDbmlsBQNTRVAAFWtleUtMcFJlZnJlc2hlZEhlaWdodAkAuQkCCQDMCAICAiVzCQDMCAICEmtMcFJlZnJlc2hlZEhlaWdodAUDbmlsBQNTRVAAEmtleUtMcFJlZnJlc2hEZWxheQkAuQkCCQDMCAICAiVzCQDMCAICD3JlZnJlc2hLTHBEZWxheQUDbmlsBQNTRVAAFmtMcFJlZnJlc2hEZWxheURlZmF1bHQAHgAPa0xwUmVmcmVzaERlbGF5CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFEmtleUtMcFJlZnJlc2hEZWxheQUWa0xwUmVmcmVzaERlbGF5RGVmYXVsdAEUa2V5QWRkaXRpb25hbEJhbGFuY2UBB2Fzc2V0SWQJALkJAgkAzAgCAgQlcyVzCQDMCAICDXN0YWtlZEJhbGFuY2UJAMwIAgUHYXNzZXRJZAUDbmlsBQNTRVABFmtleVN0YWtpbmdBc3NldEJhbGFuY2UBB2Fzc2V0SWQJALkJAgkAzAgCAgQlcyVzCQDMCAICEXNoYXJlQXNzZXRCYWxhbmNlCQDMCAIFB2Fzc2V0SWQFA25pbAUDU0VQARpnZXRBZGRpdGlvbmFsQmFsYW5jZU9yWmVybwEHYXNzZXRJZAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQEUa2V5QWRkaXRpb25hbEJhbGFuY2UBBQdhc3NldElkAAABHGdldFN0YWtpbmdBc3NldEJhbGFuY2VPclplcm8BB2Fzc2V0SWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkBFmtleVN0YWtpbmdBc3NldEJhbGFuY2UBBQdhc3NldElkAAABEGtleUZhY3RvcnlDb25maWcAAhElc19fZmFjdG9yeUNvbmZpZwENa2V5TWF0Y2hlclB1YgACGCVzJXNfX21hdGNoZXJfX3B1YmxpY0tleQEpa2V5TWFwcGluZ1Bvb2xDb250cmFjdEFkZHJlc3NUb1Bvb2xBc3NldHMBE3Bvb2xDb250cmFjdEFkZHJlc3MJAKwCAgkArAICAgglcyVzJXNfXwUTcG9vbENvbnRyYWN0QWRkcmVzcwIgX19tYXBwaW5nc19fcG9vbENvbnRyYWN0MkxwQXNzZXQBDWtleVBvb2xDb25maWcCCWlBbXRBc3NldAtpUHJpY2VBc3NldAkArAICCQCsAgIJAKwCAgkArAICAgglZCVkJXNfXwUJaUFtdEFzc2V0AgJfXwULaVByaWNlQXNzZXQCCF9fY29uZmlnAR9rZXlNYXBwaW5nc0Jhc2VBc3NldDJpbnRlcm5hbElkAQxiYXNlQXNzZXRTdHIJAKwCAgIoJXMlcyVzX19tYXBwaW5nc19fYmFzZUFzc2V0MmludGVybmFsSWRfXwUMYmFzZUFzc2V0U3RyARNrZXlBbGxQb29sc1NodXRkb3duAAIMJXNfX3NodXRkb3duAQ1rZXlQb29sV2VpZ2h0AQ9jb250cmFjdEFkZHJlc3MJAKwCAgISJXMlc19fcG9vbFdlaWdodF9fBQ9jb250cmFjdEFkZHJlc3MBFmtleUFsbG93ZWRMcFNjcmlwdEhhc2gAAhclc19fYWxsb3dlZExwU2NyaXB0SGFzaAAWa2V5RmVlQ29sbGVjdG9yQWRkcmVzcwIXJXNfX2ZlZUNvbGxlY3RvckFkZHJlc3MBFmtleVNraXBPcmRlclZhbGlkYXRpb24BC3Bvb2xBZGRyZXNzCQCsAgICGyVzJXNfX3NraXBPcmRlclZhbGlkYXRpb25fXwULcG9vbEFkZHJlc3MBD3Rocm93T3JkZXJFcnJvcgQKb3JkZXJWYWxpZA5vcmRlclZhbGlkSW5mbwtzZW5kZXJWYWxpZAxtYXRjaGVyVmFsaWQJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIkb3JkZXIgdmFsaWRhdGlvbiBmYWlsZWQ6IG9yZGVyVmFsaWQ9CQClAwEFCm9yZGVyVmFsaWQCAiAoBQ5vcmRlclZhbGlkSW5mbwIBKQINIHNlbmRlclZhbGlkPQkApQMBBQtzZW5kZXJWYWxpZAIOIG1hdGNoZXJWYWxpZD0JAKUDAQUMbWF0Y2hlclZhbGlkAQ9nZXRTdHJpbmdPckZhaWwCB2FkZHJlc3MDa2V5CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUHYWRkcmVzcwUDa2V5CQC5CQIJAMwIAgIKbWFuZGF0b3J5IAkAzAgCCQClCAEFB2FkZHJlc3MJAMwIAgIBLgkAzAgCBQNrZXkJAMwIAgIPIGlzIG5vdCBkZWZpbmVkBQNuaWwCAAEMZ2V0SW50T3JGYWlsAgdhZGRyZXNzA2tleQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFB2FkZHJlc3MFA2tleQkAuQkCCQDMCAICCm1hbmRhdG9yeSAJAMwIAgkApQgBBQdhZGRyZXNzCQDMCAICAS4JAMwIAgUDa2V5CQDMCAICDyBpcyBub3QgZGVmaW5lZAUDbmlsAgABCHRocm93RXJyAQNtc2cJAAIBCQC5CQIJAMwIAgIIbHAucmlkZToJAMwIAgUDbXNnBQNuaWwCASABBmZtdEVycgEDbXNnCQC5CQIJAMwIAgIIbHAucmlkZToJAMwIAgUDbXNnBQNuaWwCASAAD2ZhY3RvcnlDb250cmFjdAkBEUBleHRyTmF0aXZlKDEwNjIpAQkBD2dldFN0cmluZ09yRmFpbAIFBHRoaXMJAQJmYwAAE2ZlZUNvbGxlY3RvckFkZHJlc3MJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQ9nZXRTdHJpbmdPckZhaWwCBQ9mYWN0b3J5Q29udHJhY3QFFmtleUZlZUNvbGxlY3RvckFkZHJlc3MABWluRmVlCgABQAkA/AcEBQ9mYWN0b3J5Q29udHJhY3QCEGdldEluRmVlUkVBRE9OTFkJAMwIAgkApQgBBQR0aGlzBQNuaWwFA25pbAMJAAECBQFAAgNJbnQFAUAJAAIBCQCsAgIJAAMBBQFAAhggY291bGRuJ3QgYmUgY2FzdCB0byBJbnQABm91dEZlZQoAAUAJAPwHBAUPZmFjdG9yeUNvbnRyYWN0AhFnZXRPdXRGZWVSRUFET05MWQkAzAgCCQClCAEFBHRoaXMFA25pbAUDbmlsAwkAAQIFAUACA0ludAUBQAkAAgEJAKwCAgkAAwEFAUACGCBjb3VsZG4ndCBiZSBjYXN0IHRvIEludAEQaXNHbG9iYWxTaHV0ZG93bgAJAQt2YWx1ZU9yRWxzZQIJAJsIAgUPZmFjdG9yeUNvbnRyYWN0CQETa2V5QWxsUG9vbHNTaHV0ZG93bgAHARNnZXRNYXRjaGVyUHViT3JGYWlsAAkA2QQBCQEPZ2V0U3RyaW5nT3JGYWlsAgUPZmFjdG9yeUNvbnRyYWN0CQENa2V5TWF0Y2hlclB1YgABDWdldFBvb2xDb25maWcABAhhbXRBc3NldAkBD2dldFN0cmluZ09yRmFpbAIFBHRoaXMJAQJhYQAECnByaWNlQXNzZXQJAQ9nZXRTdHJpbmdPckZhaWwCBQR0aGlzCQECcGEABAtpUHJpY2VBc3NldAkBDGdldEludE9yRmFpbAIFD2ZhY3RvcnlDb250cmFjdAkBH2tleU1hcHBpbmdzQmFzZUFzc2V0MmludGVybmFsSWQBBQpwcmljZUFzc2V0BAlpQW10QXNzZXQJAQxnZXRJbnRPckZhaWwCBQ9mYWN0b3J5Q29udHJhY3QJAR9rZXlNYXBwaW5nc0Jhc2VBc3NldDJpbnRlcm5hbElkAQUIYW10QXNzZXQJALUJAgkBD2dldFN0cmluZ09yRmFpbAIFD2ZhY3RvcnlDb250cmFjdAkBDWtleVBvb2xDb25maWcCCQCkAwEFCWlBbXRBc3NldAkApAMBBQtpUHJpY2VBc3NldAUDU0VQAQxwYXJzZUFzc2V0SWQBBWlucHV0AwkAAAIFBWlucHV0BQt3YXZlc1N0cmluZwUEdW5pdAkA2QQBBQVpbnB1dAEPYXNzZXRJZFRvU3RyaW5nAQVpbnB1dAMJAAACBQVpbnB1dAUEdW5pdAULd2F2ZXNTdHJpbmcJANgEAQkBBXZhbHVlAQUFaW5wdXQBD3BhcnNlUG9vbENvbmZpZwEKcG9vbENvbmZpZwkAmQoHCQERQGV4dHJOYXRpdmUoMTA2MikBCQCRAwIFCnBvb2xDb25maWcFDmlkeFBvb2xBZGRyZXNzCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKcG9vbENvbmZpZwUNaWR4UG9vbFN0YXR1cwkA2QQBCQCRAwIFCnBvb2xDb25maWcFEGlkeFBvb2xMUEFzc2V0SWQJAQxwYXJzZUFzc2V0SWQBCQCRAwIFCnBvb2xDb25maWcFDWlkeEFtdEFzc2V0SWQJAQxwYXJzZUFzc2V0SWQBCQCRAwIFCnBvb2xDb25maWcFD2lkeFByaWNlQXNzZXRJZAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCnBvb2xDb25maWcFDmlkeEFtdEFzc2V0RGNtCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKcG9vbENvbmZpZwUQaWR4UHJpY2VBc3NldERjbQAQcG9vbENvbmZpZ1BhcnNlZAkBD3BhcnNlUG9vbENvbmZpZwEJAQ1nZXRQb29sQ29uZmlnAAALJHQwOTA1ODkyMjQFEHBvb2xDb25maWdQYXJzZWQADmNmZ1Bvb2xBZGRyZXNzCAULJHQwOTA1ODkyMjQCXzEADWNmZ1Bvb2xTdGF0dXMIBQskdDA5MDU4OTIyNAJfMgAMY2ZnTHBBc3NldElkCAULJHQwOTA1ODkyMjQCXzMAEGNmZ0Ftb3VudEFzc2V0SWQIBQskdDA5MDU4OTIyNAJfNAAPY2ZnUHJpY2VBc3NldElkCAULJHQwOTA1ODkyMjQCXzUAFmNmZ0Ftb3VudEFzc2V0RGVjaW1hbHMIBQskdDA5MDU4OTIyNAJfNgAVY2ZnUHJpY2VBc3NldERlY2ltYWxzCAULJHQwOTA1ODkyMjQCXzcBEGdldEZhY3RvcnlDb25maWcACQC1CQIJAQ9nZXRTdHJpbmdPckZhaWwCBQ9mYWN0b3J5Q29udHJhY3QJARBrZXlGYWN0b3J5Q29uZmlnAAUDU0VQAA9zdGFraW5nQ29udHJhY3QJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQCRAwIJARBnZXRGYWN0b3J5Q29uZmlnAAUZaWR4RmFjdG9yeVN0YWtpbmdDb250cmFjdAIZaW5jb3JyZWN0IHN0YWtpbmcgYWRkcmVzcwAQc2xpcHBhZ2VDb250cmFjdAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJAJEDAgkBEGdldEZhY3RvcnlDb25maWcABRppZHhGYWN0b3J5U2xpcHBhZ2VDb250cmFjdAIZaW5jb3JyZWN0IHN0YWtpbmcgYWRkcmVzcwERZGF0YVB1dEFjdGlvbkluZm8KDWluQW10QXNzZXRBbXQPaW5QcmljZUFzc2V0QW10CG91dExwQW10BXByaWNlHXNsaXBwYWdlVG9sZXJhbmNlUGFzc2VkQnlVc2VyFXNsaXBwYWdlVG9sZXJhbmNlUmVhbAh0eEhlaWdodAt0eFRpbWVzdGFtcBJzbGlwYWdlQW10QXNzZXRBbXQUc2xpcGFnZVByaWNlQXNzZXRBbXQJALkJAgkAzAgCAhQlZCVkJWQlZCVkJWQlZCVkJWQlZAkAzAgCCQCkAwEFDWluQW10QXNzZXRBbXQJAMwIAgkApAMBBQ9pblByaWNlQXNzZXRBbXQJAMwIAgkApAMBBQhvdXRMcEFtdAkAzAgCCQCkAwEFBXByaWNlCQDMCAIJAKQDAQUdc2xpcHBhZ2VUb2xlcmFuY2VQYXNzZWRCeVVzZXIJAMwIAgkApAMBBRVzbGlwcGFnZVRvbGVyYW5jZVJlYWwJAMwIAgkApAMBBQh0eEhlaWdodAkAzAgCCQCkAwEFC3R4VGltZXN0YW1wCQDMCAIJAKQDAQUSc2xpcGFnZUFtdEFzc2V0QW10CQDMCAIJAKQDAQUUc2xpcGFnZVByaWNlQXNzZXRBbXQFA25pbAUDU0VQARFkYXRhR2V0QWN0aW9uSW5mbwYOb3V0QW10QXNzZXRBbXQQb3V0UHJpY2VBc3NldEFtdAdpbkxwQW10BXByaWNlCHR4SGVpZ2h0C3R4VGltZXN0YW1wCQC5CQIJAMwIAgIMJWQlZCVkJWQlZCVkCQDMCAIJAKQDAQUOb3V0QW10QXNzZXRBbXQJAMwIAgkApAMBBRBvdXRQcmljZUFzc2V0QW10CQDMCAIJAKQDAQUHaW5McEFtdAkAzAgCCQCkAwEFBXByaWNlCQDMCAIJAKQDAQUIdHhIZWlnaHQJAMwIAgkApAMBBQt0eFRpbWVzdGFtcAUDbmlsBQNTRVABDWdldEFjY0JhbGFuY2UBB2Fzc2V0SWQEDWJhbGFuY2VPblBvb2wDCQAAAgUHYXNzZXRJZAIFV0FWRVMICQDvBwEFBHRoaXMJYXZhaWxhYmxlCQDwBwIFBHRoaXMJANkEAQUHYXNzZXRJZAQMdG90YWxCYWxhbmNlCQBlAgkAZAIFDWJhbGFuY2VPblBvb2wJARpnZXRBZGRpdGlvbmFsQmFsYW5jZU9yWmVybwEFB2Fzc2V0SWQJARxnZXRTdGFraW5nQXNzZXRCYWxhbmNlT3JaZXJvAQUHYXNzZXRJZAkAlgMBCQDMCAIAAAkAzAgCBQx0b3RhbEJhbGFuY2UFA25pbAEPY2FsY1ByaWNlQmlnSW50AghwckFtdFgxOAhhbUFtdFgxOAkAvAIDBQhwckFtdFgxOAUHc2NhbGUxOAUIYW1BbXRYMTgBFGNhbGNQcmljZUJpZ0ludFJvdW5kAwhwckFtdFgxOAhhbUFtdFgxOAVyb3VuZAkAvQIEBQhwckFtdFgxOAUHc2NhbGUxOAUIYW1BbXRYMTgFBXJvdW5kAQdnZXRSYXRlAQVwcm94eQQDaW52CQD8BwQFBXByb3h5AgdnZXRSYXRlBQNuaWwFA25pbAMJAAACBQNpbnYFA2ludgQHJG1hdGNoMAUDaW52AwkAAQIFByRtYXRjaDACA0ludAQBcgUHJG1hdGNoMAUBcgkBCHRocm93RXJyAQIgcHJveHkuZ2V0UmF0ZSgpIHVuZXhwZWN0ZWQgdmFsdWUJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BB2RlcG9zaXQEB2Fzc2V0SWQGYW1vdW50DnN0YWtpbmdBc3NldElkBXByb3h5BBhjdXJyZW50QWRkaXRpb25hbEJhbGFuY2UJARpnZXRBZGRpdGlvbmFsQmFsYW5jZU9yWmVybwEFB2Fzc2V0SWQDCQAAAgUYY3VycmVudEFkZGl0aW9uYWxCYWxhbmNlBRhjdXJyZW50QWRkaXRpb25hbEJhbGFuY2UEGmN1cnJlbnRTdGFraW5nQXNzZXRCYWxhbmNlCQEcZ2V0U3Rha2luZ0Fzc2V0QmFsYW5jZU9yWmVybwEFDnN0YWtpbmdBc3NldElkAwkAAAIFGmN1cnJlbnRTdGFraW5nQXNzZXRCYWxhbmNlBRpjdXJyZW50U3Rha2luZ0Fzc2V0QmFsYW5jZQQFYXNzZXQJAQxwYXJzZUFzc2V0SWQBBQdhc3NldElkAwkAZgIFBmFtb3VudAAABA1kZXBvc2l0SW52b2tlCQD8BwQFBXByb3h5AgdkZXBvc2l0BQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFBWFzc2V0BQZhbW91bnQFA25pbAMJAAACBQ1kZXBvc2l0SW52b2tlBQ1kZXBvc2l0SW52b2tlBAckbWF0Y2gwBQ1kZXBvc2l0SW52b2tlAwkAAQIFByRtYXRjaDACA0ludAQUcmVjZWl2ZWRTdGFraW5nQXNzZXQFByRtYXRjaDAEFG5ld0FkZGl0aW9uYWxCYWxhbmNlCQBkAgUYY3VycmVudEFkZGl0aW9uYWxCYWxhbmNlBQZhbW91bnQEFm5ld1N0YWtpbmdBc3NldEJhbGFuY2UJAGQCBRpjdXJyZW50U3Rha2luZ0Fzc2V0QmFsYW5jZQUUcmVjZWl2ZWRTdGFraW5nQXNzZXQJAMwIAgkBDEludGVnZXJFbnRyeQIJARRrZXlBZGRpdGlvbmFsQmFsYW5jZQEFB2Fzc2V0SWQFFG5ld0FkZGl0aW9uYWxCYWxhbmNlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEWa2V5U3Rha2luZ0Fzc2V0QmFsYW5jZQEFDnN0YWtpbmdBc3NldElkBRZuZXdTdGFraW5nQXNzZXRCYWxhbmNlBQNuaWwFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQh3aXRoZHJhdwYHYXNzZXRJZAZhbW91bnQOc3Rha2luZ0Fzc2V0SWQFcHJveHkMcHJveHlSYXRlTXVsDXByb2ZpdEFkZHJlc3MEGGN1cnJlbnRBZGRpdGlvbmFsQmFsYW5jZQkBGmdldEFkZGl0aW9uYWxCYWxhbmNlT3JaZXJvAQUHYXNzZXRJZAMJAAACBRhjdXJyZW50QWRkaXRpb25hbEJhbGFuY2UFGGN1cnJlbnRBZGRpdGlvbmFsQmFsYW5jZQQaY3VycmVudFN0YWtpbmdBc3NldEJhbGFuY2UJARxnZXRTdGFraW5nQXNzZXRCYWxhbmNlT3JaZXJvAQUOc3Rha2luZ0Fzc2V0SWQDCQAAAgUaY3VycmVudFN0YWtpbmdBc3NldEJhbGFuY2UFGmN1cnJlbnRTdGFraW5nQXNzZXRCYWxhbmNlBBBjdXJyZW50UHJveHlSYXRlCQEHZ2V0UmF0ZQEFBXByb3h5AwkAAAIFEGN1cnJlbnRQcm94eVJhdGUFEGN1cnJlbnRQcm94eVJhdGUEB29sZFJhdGUJAGsDBQxwcm94eVJhdGVNdWwFGGN1cnJlbnRBZGRpdGlvbmFsQmFsYW5jZQUaY3VycmVudFN0YWtpbmdBc3NldEJhbGFuY2UEDHN0YWtpbmdBc3NldAkBDHBhcnNlQXNzZXRJZAEFDnN0YWtpbmdBc3NldElkBBRvbGRTZW5kU3Rha2luZ0Ftb3VudAkAawMFDHByb3h5UmF0ZU11bAUGYW1vdW50BQdvbGRSYXRlBBZzZW5kU3Rha2luZ0Fzc2V0QW1vdW50CQBrAwUMcHJveHlSYXRlTXVsBQZhbW91bnQFEGN1cnJlbnRQcm94eVJhdGUEDHByb2ZpdEFtb3VudAkAlgMBCQDMCAIAAAkAzAgCCQBlAgUUb2xkU2VuZFN0YWtpbmdBbW91bnQFFnNlbmRTdGFraW5nQXNzZXRBbW91bnQFA25pbAMJAGYCBRZzZW5kU3Rha2luZ0Fzc2V0QW1vdW50AAAEDndpdGhkcmF3SW52b2tlCQD8BwQFBXByb3h5Agh3aXRoZHJhdwUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQxzdGFraW5nQXNzZXQFFnNlbmRTdGFraW5nQXNzZXRBbW91bnQFA25pbAMJAAACBQ53aXRoZHJhd0ludm9rZQUOd2l0aGRyYXdJbnZva2UEByRtYXRjaDAFDndpdGhkcmF3SW52b2tlAwkAAQIFByRtYXRjaDACA0ludAQOcmVjZWl2ZWRBc3NldHMFByRtYXRjaDAEFG5ld0FkZGl0aW9uYWxCYWxhbmNlCQBlAgUYY3VycmVudEFkZGl0aW9uYWxCYWxhbmNlBQ5yZWNlaXZlZEFzc2V0cwQWbmV3U3Rha2luZ0Fzc2V0QmFsYW5jZQkAZQIJAGUCBRpjdXJyZW50U3Rha2luZ0Fzc2V0QmFsYW5jZQUWc2VuZFN0YWtpbmdBc3NldEFtb3VudAUMcHJvZml0QW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEUa2V5QWRkaXRpb25hbEJhbGFuY2UBBQdhc3NldElkBRRuZXdBZGRpdGlvbmFsQmFsYW5jZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBFmtleVN0YWtpbmdBc3NldEJhbGFuY2UBBQ5zdGFraW5nQXNzZXRJZAUWbmV3U3Rha2luZ0Fzc2V0QmFsYW5jZQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQ1wcm9maXRBZGRyZXNzBQxwcm9maXRBbW91bnQJAQxwYXJzZUFzc2V0SWQBBQ5zdGFraW5nQXNzZXRJZAUDbmlsBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgETZ2V0TGVhc2VQcm94eUNvbmZpZwEHYXNzZXRJZAQHJG1hdGNoMAkA/AcEBQ9mYWN0b3J5Q29udHJhY3QCGmdldFBvb2xMZWFzZUNvbmZpZ1JFQURPTkxZCQDMCAIJAKUIAQUEdGhpcwkAzAgCBQdhc3NldElkBQNuaWwFA25pbAMJAAECBQckbWF0Y2gwAjAoQm9vbGVhbiwgSW50LCBJbnQsIFN0cmluZywgU3RyaW5nLCBJbnQsIFN0cmluZykEAWEFByRtYXRjaDAFAWEJAQh0aHJvd0VycgEJAKwCAgkArAICAgFbBQdhc3NldElkAh1dIGdldExlYXNlUHJveHlDb25maWcoKSBlcnJvcgERcmViYWxhbmNlSW50ZXJuYWwHC3RhcmdldFJhdGlvB2Fzc2V0SWQOc3Rha2luZ0Fzc2V0SWQKbWluQmFsYW5jZQVwcm94eQxwcm94eVJhdGVNdWwNcHJvZml0QWRkcmVzcwQYY3VycmVudEFkZGl0aW9uYWxCYWxhbmNlCQEaZ2V0QWRkaXRpb25hbEJhbGFuY2VPclplcm8BBQdhc3NldElkAwkAAAIFGGN1cnJlbnRBZGRpdGlvbmFsQmFsYW5jZQUYY3VycmVudEFkZGl0aW9uYWxCYWxhbmNlBBpjdXJyZW50U3Rha2luZ0Fzc2V0QmFsYW5jZQkBHGdldFN0YWtpbmdBc3NldEJhbGFuY2VPclplcm8BBQ5zdGFraW5nQXNzZXRJZAMJAAACBRpjdXJyZW50U3Rha2luZ0Fzc2V0QmFsYW5jZQUaY3VycmVudFN0YWtpbmdBc3NldEJhbGFuY2UEFGxlYXNhYmxlVG90YWxCYWxhbmNlCQCWAwEJAMwIAgAACQDMCAIJAGUCCQENZ2V0QWNjQmFsYW5jZQEFB2Fzc2V0SWQFCm1pbkJhbGFuY2UFA25pbAQXdGFyZ2V0QWRkaXRpb25hbEJhbGFuY2UJAGsDBQt0YXJnZXRSYXRpbwUUbGVhc2FibGVUb3RhbEJhbGFuY2UAZAQEZGlmZgkAZQIFGGN1cnJlbnRBZGRpdGlvbmFsQmFsYW5jZQUXdGFyZ2V0QWRkaXRpb25hbEJhbGFuY2UDCQAAAgUEZGlmZgAABQNuaWwDCQBmAgAABQRkaWZmBA9zZW5kQXNzZXRBbW91bnQJAQEtAQUEZGlmZgkBB2RlcG9zaXQEBQdhc3NldElkBQ9zZW5kQXNzZXRBbW91bnQFDnN0YWtpbmdBc3NldElkBQVwcm94eQQOZ2V0QXNzZXRBbW91bnQFBGRpZmYJAQh3aXRoZHJhdwYFB2Fzc2V0SWQFDmdldEFzc2V0QW1vdW50BQ5zdGFraW5nQXNzZXRJZAUFcHJveHkFDHByb3h5UmF0ZU11bAUNcHJvZml0QWRkcmVzcwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgEOcmViYWxhbmNlQXNzZXQBB2Fzc2V0SWQEDSR0MDE1NDYwMTU1OTYJARNnZXRMZWFzZVByb3h5Q29uZmlnAQUHYXNzZXRJZAQKaXNMZWFzYWJsZQgFDSR0MDE1NDYwMTU1OTYCXzEEC2xlYXNlZFJhdGlvCAUNJHQwMTU0NjAxNTU5NgJfMgQKbWluQmFsYW5jZQgFDSR0MDE1NDYwMTU1OTYCXzMEDHByb3h5QWRkcmVzcwgFDSR0MDE1NDYwMTU1OTYCXzQEDHByb3h5QXNzZXRJZAgFDSR0MDE1NDYwMTU1OTYCXzUEDHByb3h5UmF0ZU11bAgFDSR0MDE1NDYwMTU1OTYCXzYEFHN0YWtpbmdQcm9maXRBZGRyZXNzCAUNJHQwMTU0NjAxNTU5NgJfNwMFCmlzTGVhc2FibGUJARFyZWJhbGFuY2VJbnRlcm5hbAcFC2xlYXNlZFJhdGlvBQdhc3NldElkBQxwcm94eUFzc2V0SWQFCm1pbkJhbGFuY2UJARFAZXh0ck5hdGl2ZSgxMDYyKQEFDHByb3h5QWRkcmVzcwUMcHJveHlSYXRlTXVsCQERQGV4dHJOYXRpdmUoMTA2MikBBRRzdGFraW5nUHJvZml0QWRkcmVzcwUDbmlsARl3aXRoZHJhd0FuZFJlYmFsYW5jZUFzc2V0Agdhc3NldElkCWdldEFtb3VudAQNJHQwMTU5OTUxNjEzMQkBE2dldExlYXNlUHJveHlDb25maWcBBQdhc3NldElkBAppc0xlYXNhYmxlCAUNJHQwMTU5OTUxNjEzMQJfMQQLbGVhc2VkUmF0aW8IBQ0kdDAxNTk5NTE2MTMxAl8yBAptaW5CYWxhbmNlCAUNJHQwMTU5OTUxNjEzMQJfMwQMcHJveHlBZGRyZXNzCAUNJHQwMTU5OTUxNjEzMQJfNAQMcHJveHlBc3NldElkCAUNJHQwMTU5OTUxNjEzMQJfNQQMcHJveHlSYXRlTXVsCAUNJHQwMTU5OTUxNjEzMQJfNgQUc3Rha2luZ1Byb2ZpdEFkZHJlc3MIBQ0kdDAxNTk5NTE2MTMxAl83AwUKaXNMZWFzYWJsZQQXbmV3VG90YWxMZWFzYWJsZUJhbGFuY2UJAJYDAQkAzAgCAAAJAMwIAgkAZQIJAGUCCQENZ2V0QWNjQmFsYW5jZQEFB2Fzc2V0SWQFCWdldEFtb3VudAUKbWluQmFsYW5jZQUDbmlsAwkAAAIFF25ld1RvdGFsTGVhc2FibGVCYWxhbmNlBRduZXdUb3RhbExlYXNhYmxlQmFsYW5jZQQUbmV3QWRkaXRpb25hbEJhbGFuY2UJAGsDBQtsZWFzZWRSYXRpbwUXbmV3VG90YWxMZWFzYWJsZUJhbGFuY2UAZAMJAAACBRRuZXdBZGRpdGlvbmFsQmFsYW5jZQUUbmV3QWRkaXRpb25hbEJhbGFuY2UEDndpdGhkcmF3QW1vdW50CQBlAgkBGmdldEFkZGl0aW9uYWxCYWxhbmNlT3JaZXJvAQUHYXNzZXRJZAUUbmV3QWRkaXRpb25hbEJhbGFuY2UDCQAAAgUOd2l0aGRyYXdBbW91bnQFDndpdGhkcmF3QW1vdW50AwkAZgIAAAUOd2l0aGRyYXdBbW91bnQJAQdkZXBvc2l0BAUHYXNzZXRJZAkBAS0BBQ53aXRoZHJhd0Ftb3VudAUMcHJveHlBc3NldElkCQERQGV4dHJOYXRpdmUoMTA2MikBBQxwcm94eUFkZHJlc3MJAQh3aXRoZHJhdwYFB2Fzc2V0SWQFDndpdGhkcmF3QW1vdW50BQxwcm94eUFzc2V0SWQJARFAZXh0ck5hdGl2ZSgxMDYyKQEFDHByb3h5QWRkcmVzcwUMcHJveHlSYXRlTXVsCQERQGV4dHJOYXRpdmUoMTA2MikBBRRzdGFraW5nUHJvZml0QWRkcmVzcwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUDbmlsARd3aXRoZHJhd0FuZFJlYmFsYW5jZUFsbAIUYW1vdW50QXNzZXRPdXRBbW91bnQTcHJpY2VBc3NldE91dEFtb3VudAQSQW1BbXRXaXRoZHJhd1N0YXRlCQEZd2l0aGRyYXdBbmRSZWJhbGFuY2VBc3NldAIJAQ9nZXRTdHJpbmdPckZhaWwCBQR0aGlzCQECYWEABRRhbW91bnRBc3NldE91dEFtb3VudAQSUHJBbXRXaXRoZHJhd1N0YXRlCQEZd2l0aGRyYXdBbmRSZWJhbGFuY2VBc3NldAIJAQ9nZXRTdHJpbmdPckZhaWwCBQR0aGlzCQECcGEABRNwcmljZUFzc2V0T3V0QW1vdW50CQDOCAIFEkFtQW10V2l0aGRyYXdTdGF0ZQUSUHJBbXRXaXRoZHJhd1N0YXRlARBwcml2YXRlQ2FsY1ByaWNlBAphbUFzc2V0RGNtCnByQXNzZXREY20FYW1BbXQFcHJBbXQEDmFtdEFzc2V0QW10WDE4CQEFdG9YMTgCBQVhbUFtdAUKYW1Bc3NldERjbQQQcHJpY2VBc3NldEFtdFgxOAkBBXRvWDE4AgUFcHJBbXQFCnByQXNzZXREY20JAQ9jYWxjUHJpY2VCaWdJbnQCBRBwcmljZUFzc2V0QW10WDE4BQ5hbXRBc3NldEFtdFgxOAEKY2FsY1ByaWNlcwMFYW1BbXQFcHJBbXQFbHBBbXQEA2NmZwkBDWdldFBvb2xDb25maWcABAthbXRBc3NldERjbQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFA2NmZwUOaWR4QW10QXNzZXREY20EDXByaWNlQXNzZXREY20JAQ1wYXJzZUludFZhbHVlAQkAkQMCBQNjZmcFEGlkeFByaWNlQXNzZXREY20ECHByaWNlWDE4CQEQcHJpdmF0ZUNhbGNQcmljZQQFC2FtdEFzc2V0RGNtBQ1wcmljZUFzc2V0RGNtBQVhbUFtdAUFcHJBbXQECGFtQW10WDE4CQEFdG9YMTgCBQVhbUFtdAULYW10QXNzZXREY20ECHByQW10WDE4CQEFdG9YMTgCBQVwckFtdAUNcHJpY2VBc3NldERjbQQIbHBBbXRYMTgJAQV0b1gxOAIFBWxwQW10BQZzY2FsZTgEE2xwUHJpY2VJbkFtQXNzZXRYMTgJAQ9jYWxjUHJpY2VCaWdJbnQCBQhhbUFtdFgxOAUIbHBBbXRYMTgEE2xwUHJpY2VJblByQXNzZXRYMTgJAQ9jYWxjUHJpY2VCaWdJbnQCBQhwckFtdFgxOAUIbHBBbXRYMTgJAMwIAgUIcHJpY2VYMTgJAMwIAgUTbHBQcmljZUluQW1Bc3NldFgxOAkAzAgCBRNscFByaWNlSW5QckFzc2V0WDE4BQNuaWwBD2NhbGN1bGF0ZVByaWNlcwMFYW1BbXQFcHJBbXQFbHBBbXQEBnByaWNlcwkBCmNhbGNQcmljZXMDBQVhbUFtdAUFcHJBbXQFBWxwQW10CQDMCAIJAQdmcm9tWDE4AgkAkQMCBQZwcmljZXMAAAUGc2NhbGU4CQDMCAIJAQdmcm9tWDE4AgkAkQMCBQZwcmljZXMAAQUGc2NhbGU4CQDMCAIJAQdmcm9tWDE4AgkAkQMCBQZwcmljZXMAAgUGc2NhbGU4BQNuaWwBFGVzdGltYXRlR2V0T3BlcmF0aW9uBAZ0eElkNTgKcG10QXNzZXRJZAhwbXRMcEFtdAt1c2VyQWRkcmVzcwQDY2ZnCQENZ2V0UG9vbENvbmZpZwAECWxwQXNzZXRJZAkAkQMCBQNjZmcFEGlkeFBvb2xMUEFzc2V0SWQECWFtQXNzZXRJZAkAkQMCBQNjZmcFDWlkeEFtdEFzc2V0SWQECXByQXNzZXRJZAkAkQMCBQNjZmcFD2lkeFByaWNlQXNzZXRJZAQKYW1Bc3NldERjbQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFA2NmZwUOaWR4QW10QXNzZXREY20ECnByQXNzZXREY20JAQ1wYXJzZUludFZhbHVlAQkAkQMCBQNjZmcFEGlkeFByaWNlQXNzZXREY20ECnBvb2xTdGF0dXMJAJEDAgUDY2ZnBQ1pZHhQb29sU3RhdHVzBApscEVtaXNzaW9uCAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDsBwEJANkEAQUJbHBBc3NldElkCQCsAgIJAKwCAgIGQXNzZXQgBQlscEFzc2V0SWQCDiBkb2Vzbid0IGV4aXN0CHF1YW50aXR5AwkBAiE9AgUJbHBBc3NldElkBQpwbXRBc3NldElkCQACAQIVSW52YWxpZCBhc3NldCBwYXNzZWQuBAlhbUJhbGFuY2UJAQ1nZXRBY2NCYWxhbmNlAQUJYW1Bc3NldElkBAxhbUJhbGFuY2VYMTgJAQV0b1gxOAIFCWFtQmFsYW5jZQUKYW1Bc3NldERjbQQJcHJCYWxhbmNlCQENZ2V0QWNjQmFsYW5jZQEFCXByQXNzZXRJZAQMcHJCYWxhbmNlWDE4CQEFdG9YMTgCBQlwckJhbGFuY2UFCnByQXNzZXREY20EC2N1clByaWNlWDE4CQEPY2FsY1ByaWNlQmlnSW50AgUMcHJCYWxhbmNlWDE4BQxhbUJhbGFuY2VYMTgECGN1clByaWNlCQEHZnJvbVgxOAIFC2N1clByaWNlWDE4BQZzY2FsZTgEC3BtdExwQW10WDE4CQEFdG9YMTgCBQhwbXRMcEFtdAUGc2NhbGU4BA1scEVtaXNzaW9uWDE4CQEFdG9YMTgCBQpscEVtaXNzaW9uBQZzY2FsZTgEC291dEFtQW10WDE4CQC8AgMFDGFtQmFsYW5jZVgxOAULcG10THBBbXRYMTgFDWxwRW1pc3Npb25YMTgEC291dFByQW10WDE4CQC8AgMFDHByQmFsYW5jZVgxOAULcG10THBBbXRYMTgFDWxwRW1pc3Npb25YMTgECG91dEFtQW10CQEMZnJvbVgxOFJvdW5kAwULb3V0QW1BbXRYMTgFCmFtQXNzZXREY20FBUZMT09SBAhvdXRQckFtdAkBDGZyb21YMThSb3VuZAMFC291dFByQW10WDE4BQpwckFzc2V0RGNtBQVGTE9PUgQFc3RhdGUDCQAAAgUGdHhJZDU4AgAFA25pbAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQt1c2VyQWRkcmVzcwUIb3V0QW1BbXQDCQAAAgUJYW1Bc3NldElkAgVXQVZFUwUEdW5pdAkA2QQBBQlhbUFzc2V0SWQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwULdXNlckFkZHJlc3MFCG91dFByQW10AwkAAAIFCXByQXNzZXRJZAIFV0FWRVMFBHVuaXQJANkEAQUJcHJBc3NldElkCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQNnYXUCCQClCAEFC3VzZXJBZGRyZXNzBQZ0eElkNTgJARFkYXRhR2V0QWN0aW9uSW5mbwYFCG91dEFtQW10BQhvdXRQckFtdAUIcG10THBBbXQFCGN1clByaWNlBQZoZWlnaHQIBQlsYXN0QmxvY2sJdGltZXN0YW1wCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQECcGwABQhjdXJQcmljZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAnBoAgUGaGVpZ2h0CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUIY3VyUHJpY2UFA25pbAkAnAoKBQhvdXRBbUFtdAUIb3V0UHJBbXQFCWFtQXNzZXRJZAUJcHJBc3NldElkBQlhbUJhbGFuY2UFCXByQmFsYW5jZQUKbHBFbWlzc2lvbgULY3VyUHJpY2VYMTgFCnBvb2xTdGF0dXMFBXN0YXRlARRlc3RpbWF0ZVB1dE9wZXJhdGlvbgkGdHhJZDU4EXNsaXBwYWdlVG9sZXJhbmNlDGluQW1Bc3NldEFtdAtpbkFtQXNzZXRJZAxpblByQXNzZXRBbXQLaW5QckFzc2V0SWQLdXNlckFkZHJlc3MKaXNFdmFsdWF0ZQZlbWl0THAEA2NmZwkBDWdldFBvb2xDb25maWcABAlscEFzc2V0SWQJANkEAQkAkQMCBQNjZmcFEGlkeFBvb2xMUEFzc2V0SWQEDGFtQXNzZXRJZFN0cgkAkQMCBQNjZmcFDWlkeEFtdEFzc2V0SWQEDHByQXNzZXRJZFN0cgkAkQMCBQNjZmcFD2lkeFByaWNlQXNzZXRJZAQLaUFtdEFzc2V0SWQJAJEDAgUDY2ZnBQ5pZHhJQW10QXNzZXRJZAQNaVByaWNlQXNzZXRJZAkAkQMCBQNjZmcFEGlkeElQcmljZUFzc2V0SWQEC2FtdEFzc2V0RGNtCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUDY2ZnBQ5pZHhBbXRBc3NldERjbQQNcHJpY2VBc3NldERjbQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFA2NmZwUQaWR4UHJpY2VBc3NldERjbQQKcG9vbFN0YXR1cwkAkQMCBQNjZmcFDWlkeFBvb2xTdGF0dXMECmxwRW1pc3Npb24ICQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQUJbHBBc3NldElkCQCsAgIJAKwCAgIGQXNzZXQgCQDYBAEFCWxwQXNzZXRJZAIOIGRvZXNuJ3QgZXhpc3QIcXVhbnRpdHkEDmluQW1Bc3NldElkU3RyCQDYBAEJAQt2YWx1ZU9yRWxzZQIFC2luQW1Bc3NldElkCQDZBAECBVdBVkVTBA5pblByQXNzZXRJZFN0cgkA2AQBCQELdmFsdWVPckVsc2UCBQtpblByQXNzZXRJZAkA2QQBAgVXQVZFUwMDCQECIT0CBQxhbUFzc2V0SWRTdHIFDmluQW1Bc3NldElkU3RyBgkBAiE9AgUMcHJBc3NldElkU3RyBQ5pblByQXNzZXRJZFN0cgkAAgECIkludmFsaWQgYW10IG9yIHByaWNlIGFzc2V0IHBhc3NlZC4ECWFtQmFsYW5jZQMFCmlzRXZhbHVhdGUJAQ1nZXRBY2NCYWxhbmNlAQUMYW1Bc3NldElkU3RyCQBlAgkBDWdldEFjY0JhbGFuY2UBBQxhbUFzc2V0SWRTdHIFDGluQW1Bc3NldEFtdAQJcHJCYWxhbmNlAwUKaXNFdmFsdWF0ZQkBDWdldEFjY0JhbGFuY2UBBQxwckFzc2V0SWRTdHIJAGUCCQENZ2V0QWNjQmFsYW5jZQEFDHByQXNzZXRJZFN0cgUMaW5QckFzc2V0QW10BA9pbkFtQXNzZXRBbXRYMTgJAQV0b1gxOAIFDGluQW1Bc3NldEFtdAULYW10QXNzZXREY20ED2luUHJBc3NldEFtdFgxOAkBBXRvWDE4AgUMaW5QckFzc2V0QW10BQ1wcmljZUFzc2V0RGNtBAx1c2VyUHJpY2VYMTgJAQ9jYWxjUHJpY2VCaWdJbnQCBQ9pblByQXNzZXRBbXRYMTgFD2luQW1Bc3NldEFtdFgxOAQMYW1CYWxhbmNlWDE4CQEFdG9YMTgCBQlhbUJhbGFuY2UFC2FtdEFzc2V0RGNtBAxwckJhbGFuY2VYMTgJAQV0b1gxOAIFCXByQmFsYW5jZQUNcHJpY2VBc3NldERjbQQDcmVzAwkAAAIFCmxwRW1pc3Npb24AAAQLY3VyUHJpY2VYMTgFCnplcm9CaWdJbnQEC3NsaXBwYWdlWDE4BQp6ZXJvQmlnSW50BAhscEFtdFgxOAkAdgYJALkCAgUPaW5BbUFzc2V0QW10WDE4BQ9pblByQXNzZXRBbXRYMTgAAAkAtgIBAAUAAQAABQRET1dOCQCXCgUJAQdmcm9tWDE4AgUIbHBBbXRYMTgFBnNjYWxlOAkBB2Zyb21YMTgCBQ9pbkFtQXNzZXRBbXRYMTgFC2FtdEFzc2V0RGNtCQEHZnJvbVgxOAIFD2luUHJBc3NldEFtdFgxOAUNcHJpY2VBc3NldERjbQkBD2NhbGNQcmljZUJpZ0ludAIJALcCAgUMcHJCYWxhbmNlWDE4BQ9pblByQXNzZXRBbXRYMTgJALcCAgUMYW1CYWxhbmNlWDE4BQ9pbkFtQXNzZXRBbXRYMTgFC3NsaXBwYWdlWDE4BAtjdXJQcmljZVgxOAkBD2NhbGNQcmljZUJpZ0ludAIFDHByQmFsYW5jZVgxOAUMYW1CYWxhbmNlWDE4BAtzbGlwcGFnZVgxOAkAvAIDCQEJYWJzQmlnSW50AQkAuAICBQtjdXJQcmljZVgxOAUMdXNlclByaWNlWDE4BQdzY2FsZTE4BQtjdXJQcmljZVgxOAQUc2xpcHBhZ2VUb2xlcmFuY2VYMTgJAQV0b1gxOAIFEXNsaXBwYWdlVG9sZXJhbmNlBQZzY2FsZTgDAwkBAiE9AgULY3VyUHJpY2VYMTgFCnplcm9CaWdJbnQJAL8CAgULc2xpcHBhZ2VYMTgFFHNsaXBwYWdlVG9sZXJhbmNlWDE4BwkAAgEJAKwCAgkArAICCQCsAgICD1ByaWNlIHNsaXBwYWdlIAkApgMBBQtzbGlwcGFnZVgxOAIeIGV4Y2VlZGVkIHRoZSBwYXNzZWQgbGltaXQgb2YgCQCmAwEFFHNsaXBwYWdlVG9sZXJhbmNlWDE4BA1scEVtaXNzaW9uWDE4CQEFdG9YMTgCBQpscEVtaXNzaW9uBQZzY2FsZTgECnByVmlhQW1YMTgJAL0CBAUPaW5BbUFzc2V0QW10WDE4CQEUY2FsY1ByaWNlQmlnSW50Um91bmQDBQxwckJhbGFuY2VYMTgFDGFtQmFsYW5jZVgxOAUHQ0VJTElORwUHc2NhbGUxOAUHQ0VJTElORwQKYW1WaWFQclgxOAkAvQIEBQ9pblByQXNzZXRBbXRYMTgFB3NjYWxlMTgJARRjYWxjUHJpY2VCaWdJbnRSb3VuZAMFDHByQmFsYW5jZVgxOAUMYW1CYWxhbmNlWDE4BQVGTE9PUgUHQ0VJTElORwQMZXhwZWN0ZWRBbXRzAwkAvwICBQpwclZpYUFtWDE4BQ9pblByQXNzZXRBbXRYMTgJAJQKAgUKYW1WaWFQclgxOAUPaW5QckFzc2V0QW10WDE4CQCUCgIFD2luQW1Bc3NldEFtdFgxOAUKcHJWaWFBbVgxOAQRZXhwQW10QXNzZXRBbXRYMTgIBQxleHBlY3RlZEFtdHMCXzEEE2V4cFByaWNlQXNzZXRBbXRYMTgIBQxleHBlY3RlZEFtdHMCXzIECGxwQW10WDE4CQC9AgQFDWxwRW1pc3Npb25YMTgFE2V4cFByaWNlQXNzZXRBbXRYMTgFDHByQmFsYW5jZVgxOAUFRkxPT1IJAJcKBQkBDGZyb21YMThSb3VuZAMFCGxwQW10WDE4BQZzY2FsZTgFBUZMT09SCQEMZnJvbVgxOFJvdW5kAwURZXhwQW10QXNzZXRBbXRYMTgFC2FtdEFzc2V0RGNtBQdDRUlMSU5HCQEMZnJvbVgxOFJvdW5kAwUTZXhwUHJpY2VBc3NldEFtdFgxOAUNcHJpY2VBc3NldERjbQUHQ0VJTElORwULY3VyUHJpY2VYMTgFC3NsaXBwYWdlWDE4BAljYWxjTHBBbXQIBQNyZXMCXzEEDmNhbGNBbUFzc2V0UG10CAUDcmVzAl8yBA5jYWxjUHJBc3NldFBtdAgFA3JlcwJfMwQIY3VyUHJpY2UJAQdmcm9tWDE4AggFA3JlcwJfNAUGc2NhbGU4BAxzbGlwcGFnZUNhbGMJAQdmcm9tWDE4AggFA3JlcwJfNQUGc2NhbGU4AwkAZwIAAAUJY2FsY0xwQW10CQACAQI2SW52YWxpZCBjYWxjdWxhdGlvbnMuIExQIGNhbGN1bGF0ZWQgaXMgbGVzcyB0aGFuIHplcm8uBAllbWl0THBBbXQDCQEBIQEFBmVtaXRMcAAABQljYWxjTHBBbXQEBmFtRGlmZgkAZQIFDGluQW1Bc3NldEFtdAUOY2FsY0FtQXNzZXRQbXQEBnByRGlmZgkAZQIFDGluUHJBc3NldEFtdAUOY2FsY1ByQXNzZXRQbXQEC2NvbW1vblN0YXRlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQECcGwABQhjdXJQcmljZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAnBoAgUGaGVpZ2h0CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUIY3VyUHJpY2UJAMwIAgkBC1N0cmluZ0VudHJ5AgkBA3BhdQIFC3VzZXJBZGRyZXNzBQZ0eElkNTgJARFkYXRhUHV0QWN0aW9uSW5mbwoFDmNhbGNBbUFzc2V0UG10BQ5jYWxjUHJBc3NldFBtdAUJZW1pdExwQW10BQhjdXJQcmljZQURc2xpcHBhZ2VUb2xlcmFuY2UFDHNsaXBwYWdlQ2FsYwUGaGVpZ2h0CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUGYW1EaWZmBQZwckRpZmYFA25pbAkAnwoNBQljYWxjTHBBbXQFCWVtaXRMcEFtdAUIY3VyUHJpY2UFCWFtQmFsYW5jZQUJcHJCYWxhbmNlBQpscEVtaXNzaW9uBQlscEFzc2V0SWQFCnBvb2xTdGF0dXMFC2NvbW1vblN0YXRlBQZhbURpZmYFBnByRGlmZgULaW5BbUFzc2V0SWQFC2luUHJBc3NldElkAQdjYWxjS0xwAw1hbW91bnRCYWxhbmNlDHByaWNlQmFsYW5jZQpscEVtaXNzaW9uBBBhbW91bnRCYWxhbmNlWDE4CQELdG9YMThCaWdJbnQCBQ1hbW91bnRCYWxhbmNlCQC2AgEFFmNmZ0Ftb3VudEFzc2V0RGVjaW1hbHMED3ByaWNlQmFsYW5jZVgxOAkBC3RvWDE4QmlnSW50AgUMcHJpY2VCYWxhbmNlCQC2AgEFFWNmZ1ByaWNlQXNzZXREZWNpbWFscwQKdXBkYXRlZEtMcAkAvAIDCQB2BgkAuQICBRBhbW91bnRCYWxhbmNlWDE4BQ9wcmljZUJhbGFuY2VYMTgAAAkAtgIBAAUAAQASBQRET1dOBQRiaWcxBQpscEVtaXNzaW9uAwkAAAIFCmxwRW1pc3Npb24FBGJpZzAFBGJpZzAFCnVwZGF0ZWRLTHABDmNhbGNDdXJyZW50S0xwAxBhbW91bnRBc3NldERlbHRhD3ByaWNlQXNzZXREZWx0YRRscEFzc2V0RW1pc3Npb25EZWx0YQQSYW1vdW50QXNzZXRCYWxhbmNlCQC4AgIJALYCAQkBDWdldEFjY0JhbGFuY2UBCQEPYXNzZXRJZFRvU3RyaW5nAQUQY2ZnQW1vdW50QXNzZXRJZAUQYW1vdW50QXNzZXREZWx0YQQRcHJpY2VBc3NldEJhbGFuY2UJALgCAgkAtgIBCQENZ2V0QWNjQmFsYW5jZQEJAQ9hc3NldElkVG9TdHJpbmcBBQ9jZmdQcmljZUFzc2V0SWQFD3ByaWNlQXNzZXREZWx0YQQPbHBBc3NldEVtaXNzaW9uCQC4AgIJALYCAQgJAQV2YWx1ZQEJAOwHAQUMY2ZnTHBBc3NldElkCHF1YW50aXR5BRRscEFzc2V0RW1pc3Npb25EZWx0YQQKY3VycmVudEtMcAkBB2NhbGNLTHADBRJhbW91bnRBc3NldEJhbGFuY2UFEXByaWNlQXNzZXRCYWxhbmNlBQ9scEFzc2V0RW1pc3Npb24FCmN1cnJlbnRLTHABEnJlZnJlc2hLTHBJbnRlcm5hbAMXYW1vdW50QXNzZXRCYWxhbmNlRGVsdGEWcHJpY2VBc3NldEJhbGFuY2VEZWx0YRRscEFzc2V0RW1pc3Npb25EZWx0YQQSYW1vdW50QXNzZXRCYWxhbmNlCQBkAgkBDWdldEFjY0JhbGFuY2UBCQEPYXNzZXRJZFRvU3RyaW5nAQUQY2ZnQW1vdW50QXNzZXRJZAUXYW1vdW50QXNzZXRCYWxhbmNlRGVsdGEEEXByaWNlQXNzZXRCYWxhbmNlCQBkAgkBDWdldEFjY0JhbGFuY2UBCQEPYXNzZXRJZFRvU3RyaW5nAQUPY2ZnUHJpY2VBc3NldElkBRZwcmljZUFzc2V0QmFsYW5jZURlbHRhBA9scEFzc2V0RW1pc3Npb24JAGQCCAkBBXZhbHVlAQkA7AcBBQxjZmdMcEFzc2V0SWQIcXVhbnRpdHkFFGxwQXNzZXRFbWlzc2lvbkRlbHRhBAp1cGRhdGVkS0xwCQEHY2FsY0tMcAMJALYCAQUSYW1vdW50QXNzZXRCYWxhbmNlCQC2AgEFEXByaWNlQXNzZXRCYWxhbmNlCQC2AgEFD2xwQXNzZXRFbWlzc2lvbgQHYWN0aW9ucwkAzAgCCQEMSW50ZWdlckVudHJ5AgUVa2V5S0xwUmVmcmVzaGVkSGVpZ2h0BQZoZWlnaHQJAMwIAgkBC1N0cmluZ0VudHJ5AgUGa2V5S0xwCQCmAwEFCnVwZGF0ZWRLTHAFA25pbAkAlAoCBQdhY3Rpb25zBQp1cGRhdGVkS0xwARNza2lwT3JkZXJWYWxpZGF0aW9uAAkBC3ZhbHVlT3JFbHNlAgkAmwgCBQ9mYWN0b3J5Q29udHJhY3QJARZrZXlTa2lwT3JkZXJWYWxpZGF0aW9uAQkApQgBBQR0aGlzBwESdmFsaWRhdGVVcGRhdGVkS0xwAgZvbGRLTHAKdXBkYXRlZEtMcAMJAMACAgUKdXBkYXRlZEtMcAUGb2xkS0xwBgkBCHRocm93RXJyAQkAuQkCCQDMCAICInVwZGF0ZWQgS0xwIGxvd2VyIHRoYW4gY3VycmVudCBLTHAJAMwIAgkApgMBBQZvbGRLTHAJAMwIAgkApgMBBQp1cGRhdGVkS0xwBQNuaWwCASABG3ZhbGlkYXRlTWF0Y2hlck9yZGVyQWxsb3dlZAEFb3JkZXIEEmFtb3VudEFzc2V0QmFsYW5jZQkBDWdldEFjY0JhbGFuY2UBCQEPYXNzZXRJZFRvU3RyaW5nAQUQY2ZnQW1vdW50QXNzZXRJZAQRcHJpY2VBc3NldEJhbGFuY2UJAQ1nZXRBY2NCYWxhbmNlAQkBD2Fzc2V0SWRUb1N0cmluZwEFD2NmZ1ByaWNlQXNzZXRJZAQRYW1vdW50QXNzZXRBbW91bnQIBQVvcmRlcgZhbW91bnQEEHByaWNlQXNzZXRBbW91bnQJAG4ECAUFb3JkZXIGYW1vdW50CAUFb3JkZXIFcHJpY2UFBnNjYWxlOAUFRkxPT1IEDSR0MDI4NTIwMjg3MzIDCQAAAggFBW9yZGVyCW9yZGVyVHlwZQUDQnV5CQCUCgIFEWFtb3VudEFzc2V0QW1vdW50CQEBLQEFEHByaWNlQXNzZXRBbW91bnQJAJQKAgkBAS0BBRFhbW91bnRBc3NldEFtb3VudAUQcHJpY2VBc3NldEFtb3VudAQXYW1vdW50QXNzZXRCYWxhbmNlRGVsdGEIBQ0kdDAyODUyMDI4NzMyAl8xBBZwcmljZUFzc2V0QmFsYW5jZURlbHRhCAUNJHQwMjg1MjAyODczMgJfMgMDAwkBEGlzR2xvYmFsU2h1dGRvd24ABgkAAAIFDWNmZ1Bvb2xTdGF0dXMFE1Bvb2xNYXRjaGVyRGlzYWJsZWQGCQAAAgUNY2ZnUG9vbFN0YXR1cwUMUG9vbFNodXRkb3duCQACAQIcRXhjaGFuZ2Ugb3BlcmF0aW9ucyBkaXNhYmxlZAMDCQECIT0CCAgFBW9yZGVyCWFzc2V0UGFpcgthbW91bnRBc3NldAUQY2ZnQW1vdW50QXNzZXRJZAYJAQIhPQIICAUFb3JkZXIJYXNzZXRQYWlyCnByaWNlQXNzZXQFD2NmZ1ByaWNlQXNzZXRJZAkAAgECE1dyb25nIG9yZGVyIGFzc2V0cy4EA2tMcAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCoAwEJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwUGa2V5S0xwAgEwCQEGZm10RXJyAQILaW52YWxpZCBrTHAEDSR0MDI5MTcyMjkyNzIJARJyZWZyZXNoS0xwSW50ZXJuYWwDBRdhbW91bnRBc3NldEJhbGFuY2VEZWx0YQUWcHJpY2VBc3NldEJhbGFuY2VEZWx0YQAABA11bnVzZWRBY3Rpb25zCAUNJHQwMjkxNzIyOTI3MgJfMQQGa0xwTmV3CAUNJHQwMjkxNzIyOTI3MgJfMgQMaXNPcmRlclZhbGlkCQDAAgIFBmtMcE5ldwUDa0xwBARpbmZvCQC5CQIJAMwIAgIEa0xwPQkAzAgCCQCmAwEFA2tMcAkAzAgCAggga0xwTmV3PQkAzAgCCQCmAwEFBmtMcE5ldwkAzAgCAhQgYW1vdW50QXNzZXRCYWxhbmNlPQkAzAgCCQCkAwEFEmFtb3VudEFzc2V0QmFsYW5jZQkAzAgCAhMgcHJpY2VBc3NldEJhbGFuY2U9CQDMCAIJAKQDAQURcHJpY2VBc3NldEJhbGFuY2UJAMwIAgIZIGFtb3VudEFzc2V0QmFsYW5jZURlbHRhPQkAzAgCCQCkAwEFF2Ftb3VudEFzc2V0QmFsYW5jZURlbHRhCQDMCAICGCBwcmljZUFzc2V0QmFsYW5jZURlbHRhPQkAzAgCCQCkAwEFFnByaWNlQXNzZXRCYWxhbmNlRGVsdGEJAMwIAgIIIGhlaWdodD0JAMwIAgkApAMBBQZoZWlnaHQFA25pbAIACQCUCgIFDGlzT3JkZXJWYWxpZAUEaW5mbwEJY29tbW9uR2V0AQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIdZXhhY3RseSAxIHBheW1lbnQgaXMgZXhwZWN0ZWQEA3BtdAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAABApwbXRBc3NldElkCQEFdmFsdWUBCAUDcG10B2Fzc2V0SWQEBnBtdEFtdAgFA3BtdAZhbW91bnQEA3JlcwkBFGVzdGltYXRlR2V0T3BlcmF0aW9uBAkA2AQBCAUBaQ10cmFuc2FjdGlvbklkCQDYBAEFCnBtdEFzc2V0SWQFBnBtdEFtdAgFAWkGY2FsbGVyBAhvdXRBbUFtdAgFA3JlcwJfMQQIb3V0UHJBbXQIBQNyZXMCXzIECnBvb2xTdGF0dXMJAQ1wYXJzZUludFZhbHVlAQgFA3JlcwJfOQQFc3RhdGUIBQNyZXMDXzEwAwMJARBpc0dsb2JhbFNodXRkb3duAAYJAAACBQpwb29sU3RhdHVzBQxQb29sU2h1dGRvd24JAAIBCQCsAgICLEdldCBvcGVyYXRpb24gaXMgYmxvY2tlZCBieSBhZG1pbi4gU3RhdHVzID0gCQCkAwEFCnBvb2xTdGF0dXMJAJcKBQUIb3V0QW1BbXQFCG91dFByQW10BQZwbXRBbXQFCnBtdEFzc2V0SWQFBXN0YXRlAQljb21tb25QdXQDAWkRc2xpcHBhZ2VUb2xlcmFuY2UGZW1pdExwAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwACCQACAQIfZXhhY3RseSAyIHBheW1lbnRzIGFyZSBleHBlY3RlZAQKYW1Bc3NldFBtdAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAABApwckFzc2V0UG10CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAEEBmVzdFB1dAkBFGVzdGltYXRlUHV0T3BlcmF0aW9uCQkA2AQBCAUBaQ10cmFuc2FjdGlvbklkBRFzbGlwcGFnZVRvbGVyYW5jZQgFCmFtQXNzZXRQbXQGYW1vdW50CAUKYW1Bc3NldFBtdAdhc3NldElkCAUKcHJBc3NldFBtdAZhbW91bnQIBQpwckFzc2V0UG10B2Fzc2V0SWQJAKUIAQgFAWkGY2FsbGVyBwUGZW1pdExwBApwb29sU3RhdHVzCQENcGFyc2VJbnRWYWx1ZQEIBQZlc3RQdXQCXzgDAwMJARBpc0dsb2JhbFNodXRkb3duAAYJAAACBQpwb29sU3RhdHVzBQ9Qb29sUHV0RGlzYWJsZWQGCQAAAgUKcG9vbFN0YXR1cwUMUG9vbFNodXRkb3duCQACAQkArAICAixQdXQgb3BlcmF0aW9uIGlzIGJsb2NrZWQgYnkgYWRtaW4uIFN0YXR1cyA9IAkApAMBBQpwb29sU3RhdHVzBQZlc3RQdXQBBGVtaXQBBmFtb3VudAQHZW1pdEludgkA/AcEBQ9mYWN0b3J5Q29udHJhY3QCBGVtaXQJAMwIAgUGYW1vdW50BQNuaWwFA25pbAMJAAACBQdlbWl0SW52BQdlbWl0SW52BA1lbWl0SW52TGVnYWN5BAckbWF0Y2gwBQdlbWl0SW52AwkAAQIFByRtYXRjaDACB0FkZHJlc3MEFWxlZ2FjeUZhY3RvcnlDb250cmFjdAUHJG1hdGNoMAkA/AcEBRVsZWdhY3lGYWN0b3J5Q29udHJhY3QCBGVtaXQJAMwIAgUGYW1vdW50BQNuaWwFA25pbAUEdW5pdAMJAAACBQ1lbWl0SW52TGVnYWN5BQ1lbWl0SW52TGVnYWN5BQZhbW91bnQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BB3Rha2VGZWUCBmFtb3VudANmZWUECWZlZUFtb3VudAMJAAACBQNmZWUAAAAACQBrAwUGYW1vdW50BQNmZWUFBnNjYWxlOAkAlAoCCQBlAgUGYW1vdW50BQlmZWVBbW91bnQFCWZlZUFtb3VudAEPY2FsY1B1dE9uZVRva2VuBBBwYXltZW50QW1vdW50UmF3DnBheW1lbnRBc3NldElkC3VzZXJBZGRyZXNzBHR4SWQEBmlzRXZhbAkAAAIFBHR4SWQFBHVuaXQEEGFtb3VudEJhbGFuY2VSYXcJAQ1nZXRBY2NCYWxhbmNlAQkBD2Fzc2V0SWRUb1N0cmluZwEFEGNmZ0Ftb3VudEFzc2V0SWQED3ByaWNlQmFsYW5jZVJhdwkBDWdldEFjY0JhbGFuY2UBCQEPYXNzZXRJZFRvU3RyaW5nAQUPY2ZnUHJpY2VBc3NldElkBBRwYXltZW50SW5BbW91bnRBc3NldAMJAAACBQ5wYXltZW50QXNzZXRJZAUQY2ZnQW1vdW50QXNzZXRJZAYDCQAAAgUOcGF5bWVudEFzc2V0SWQFD2NmZ1ByaWNlQXNzZXRJZAcJAQh0aHJvd0VycgECDWludmFsaWQgYXNzZXQEDSR0MDMyMzg1MzI2NzgDBQZpc0V2YWwJAJQKAgUQYW1vdW50QmFsYW5jZVJhdwUPcHJpY2VCYWxhbmNlUmF3AwUUcGF5bWVudEluQW1vdW50QXNzZXQJAJQKAgkAZQIFEGFtb3VudEJhbGFuY2VSYXcFEHBheW1lbnRBbW91bnRSYXcFD3ByaWNlQmFsYW5jZVJhdwkAlAoCBRBhbW91bnRCYWxhbmNlUmF3CQBlAgUPcHJpY2VCYWxhbmNlUmF3BRBwYXltZW50QW1vdW50UmF3BBBhbW91bnRCYWxhbmNlT2xkCAUNJHQwMzIzODUzMjY3OAJfMQQPcHJpY2VCYWxhbmNlT2xkCAUNJHQwMzIzODUzMjY3OAJfMgQNJHQwMzI2ODIzMjgzMQMFFHBheW1lbnRJbkFtb3VudEFzc2V0CQCUCgIFEHBheW1lbnRBbW91bnRSYXcAAAkAlAoCAAAFEHBheW1lbnRBbW91bnRSYXcEFGFtb3VudEFzc2V0QW1vdW50UmF3CAUNJHQwMzI2ODIzMjgzMQJfMQQTcHJpY2VBc3NldEFtb3VudFJhdwgFDSR0MDMyNjgyMzI4MzECXzIEEWFtb3VudEFzc2V0QW1vdW50CAkBB3Rha2VGZWUCBRRhbW91bnRBc3NldEFtb3VudFJhdwUFaW5GZWUCXzEEEHByaWNlQXNzZXRBbW91bnQICQEHdGFrZUZlZQIFE3ByaWNlQXNzZXRBbW91bnRSYXcFBWluRmVlAl8xBA0kdDAzMjk2MzMzMDI3CQEHdGFrZUZlZQIFEHBheW1lbnRBbW91bnRSYXcFBWluRmVlBA1wYXltZW50QW1vdW50CAUNJHQwMzI5NjMzMzAyNwJfMQQJZmVlQW1vdW50CAUNJHQwMzI5NjMzMzAyNwJfMgQQYW1vdW50QmFsYW5jZU5ldwkAZAIFEGFtb3VudEJhbGFuY2VPbGQFEWFtb3VudEFzc2V0QW1vdW50BA9wcmljZUJhbGFuY2VOZXcJAGQCBQ9wcmljZUJhbGFuY2VPbGQFEHByaWNlQXNzZXRBbW91bnQEC3ByaWNlTmV3WDE4CQEPY2FsY1ByaWNlQmlnSW50AgkBBXRvWDE4AgUPcHJpY2VCYWxhbmNlTmV3BRVjZmdQcmljZUFzc2V0RGVjaW1hbHMJAQV0b1gxOAIFEGFtb3VudEJhbGFuY2VOZXcFFmNmZ0Ftb3VudEFzc2V0RGVjaW1hbHMECHByaWNlTmV3CQEHZnJvbVgxOAIFC3ByaWNlTmV3WDE4BQZzY2FsZTgEDnBheW1lbnRCYWxhbmNlAwUUcGF5bWVudEluQW1vdW50QXNzZXQFEGFtb3VudEJhbGFuY2VPbGQFD3ByaWNlQmFsYW5jZU9sZAQUcGF5bWVudEJhbGFuY2VCaWdJbnQJALYCAQUOcGF5bWVudEJhbGFuY2UEDHN1cHBseUJpZ0ludAkAtgIBCAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDsBwEFDGNmZ0xwQXNzZXRJZAkArAICCQCsAgICBmFzc2V0IAkA2AQBBQxjZmdMcEFzc2V0SWQCDiBkb2Vzbid0IGV4aXN0CHF1YW50aXR5BAtjaGVjaFN1cHBseQMJAL8CAgUMc3VwcGx5QmlnSW50BQRiaWcwBgkBCHRocm93RXJyAQIiaW5pdGlhbCBkZXBvc2l0IHJlcXVpcmVzIGFsbCBjb2lucwMJAAACBQtjaGVjaFN1cHBseQULY2hlY2hTdXBwbHkEDWRlcG9zaXRCaWdJbnQJALYCAQUNcGF5bWVudEFtb3VudAQLaXNzdWVBbW91bnQJAJYDAQkAzAgCAAAJAMwIAgkAoAMBCQC6AgIJALkCAgUMc3VwcGx5QmlnSW50CQC4AgIJAQpzcXJ0QmlnSW50BAkAtwICBQdzY2FsZTE4CQC6AgIJALkCAgUNZGVwb3NpdEJpZ0ludAUHc2NhbGUxOAUUcGF5bWVudEJhbGFuY2VCaWdJbnQAEgASBQRET1dOBQdzY2FsZTE4BQdzY2FsZTE4BQNuaWwEC2NvbW1vblN0YXRlAwUGaXNFdmFsBQNuaWwJAMwIAgkBDEludGVnZXJFbnRyeQIJAQJwbAAFCHByaWNlTmV3CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQECcGgCBQZoZWlnaHQIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQhwcmljZU5ldwkAzAgCCQELU3RyaW5nRW50cnkCCQEDcGF1AgkApQgBCQEFdmFsdWUBBQt1c2VyQWRkcmVzcwkA2AQBCQEFdmFsdWUBBQR0eElkCQERZGF0YVB1dEFjdGlvbkluZm8KBRRhbW91bnRBc3NldEFtb3VudFJhdwUTcHJpY2VBc3NldEFtb3VudFJhdwULaXNzdWVBbW91bnQFCHByaWNlTmV3AAAAAAUGaGVpZ2h0CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAAAAAAFA25pbAQLcHJpY2VPbGRYMTgJAQ9jYWxjUHJpY2VCaWdJbnQCCQEFdG9YMTgCBQ9wcmljZUJhbGFuY2VPbGQFFWNmZ1ByaWNlQXNzZXREZWNpbWFscwkBBXRvWDE4AgUQYW1vdW50QmFsYW5jZU9sZAUWY2ZnQW1vdW50QXNzZXREZWNpbWFscwQIcHJpY2VPbGQJAQdmcm9tWDE4AgULcHJpY2VPbGRYMTgFBnNjYWxlOAQEbG9zcwQNJHQwMzQ3MDgzNDg3NQMFFHBheW1lbnRJbkFtb3VudEFzc2V0CQCUCgIFFGFtb3VudEFzc2V0QW1vdW50UmF3BRBhbW91bnRCYWxhbmNlT2xkCQCUCgIFE3ByaWNlQXNzZXRBbW91bnRSYXcFD3ByaWNlQmFsYW5jZU9sZAQGYW1vdW50CAUNJHQwMzQ3MDgzNDg3NQJfMQQHYmFsYW5jZQgFDSR0MDM0NzA4MzQ4NzUCXzIED2lzc3VlQW1vdW50Qm90aAkAoAMBCQC8AgMFDHN1cHBseUJpZ0ludAkAtgIBCQBpAgUGYW1vdW50AAIJALYCAQUHYmFsYW5jZQkAawMJAGUCBQtpc3N1ZUFtb3VudAUPaXNzdWVBbW91bnRCb3RoBQZzY2FsZTgFD2lzc3VlQW1vdW50Qm90aAkAlwoFBQtpc3N1ZUFtb3VudAULY29tbW9uU3RhdGUFCWZlZUFtb3VudAUEbG9zcwUUcGF5bWVudEluQW1vdW50QXNzZXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BD2NhbGNHZXRPbmVUb2tlbgUKb3V0QXNzZXRJZA1wYXltZW50QW1vdW50DnBheW1lbnRBc3NldElkC3VzZXJBZGRyZXNzBHR4SWQEBmlzRXZhbAkAAAIFBHR4SWQFBHVuaXQEA2NmZwkBDWdldFBvb2xDb25maWcABAthbXRBc3NldERjbQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFA2NmZwUOaWR4QW10QXNzZXREY20EDXByaWNlQXNzZXREY20JAQ1wYXJzZUludFZhbHVlAQkAkQMCBQNjZmcFEGlkeFByaWNlQXNzZXREY20EBmNoZWNrcwkAzAgCAwkAAAIFDnBheW1lbnRBc3NldElkBQxjZmdMcEFzc2V0SWQGCQEIdGhyb3dFcnIBAhBpbnZhbGlkIGxwIGFzc2V0BQNuaWwDCQAAAgUGY2hlY2tzBQZjaGVja3MEEG91dEluQW1vdW50QXNzZXQDCQAAAgUKb3V0QXNzZXRJZAUQY2ZnQW1vdW50QXNzZXRJZAYDCQAAAgUKb3V0QXNzZXRJZAUPY2ZnUHJpY2VBc3NldElkBwkBCHRocm93RXJyAQINaW52YWxpZCBhc3NldAQNYmFsYW5jZUJpZ0ludAMFEG91dEluQW1vdW50QXNzZXQJALYCAQkBDWdldEFjY0JhbGFuY2UBCQEPYXNzZXRJZFRvU3RyaW5nAQUQY2ZnQW1vdW50QXNzZXRJZAkAtgIBCQENZ2V0QWNjQmFsYW5jZQEJAQ9hc3NldElkVG9TdHJpbmcBBQ9jZmdQcmljZUFzc2V0SWQEGG91dEluQW1vdW50QXNzZXREZWNpbWFscwMFEG91dEluQW1vdW50QXNzZXQFC2FtdEFzc2V0RGNtBQ1wcmljZUFzc2V0RGNtBAxhbUJhbGFuY2VPbGQJAQ1nZXRBY2NCYWxhbmNlAQkBD2Fzc2V0SWRUb1N0cmluZwEFEGNmZ0Ftb3VudEFzc2V0SWQEDHByQmFsYW5jZU9sZAkBDWdldEFjY0JhbGFuY2UBCQEPYXNzZXRJZFRvU3RyaW5nAQUPY2ZnUHJpY2VBc3NldElkBApvdXRCYWxhbmNlAwUQb3V0SW5BbW91bnRBc3NldAUMYW1CYWxhbmNlT2xkBQxwckJhbGFuY2VPbGQEEG91dEJhbGFuY2VCaWdJbnQJALYCAQUKb3V0QmFsYW5jZQQMc3VwcGx5QmlnSW50CQC2AgEICQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQUMY2ZnTHBBc3NldElkCQCsAgIJAKwCAgIGYXNzZXQgCQDYBAEFDGNmZ0xwQXNzZXRJZAIOIGRvZXNuJ3QgZXhpc3QIcXVhbnRpdHkEDnJlZGVlbWVkQmlnSW50CQC2AgEFDXBheW1lbnRBbW91bnQECWFtb3VudFJhdwkAlgMBCQDMCAIAAAkAzAgCCQCgAwEJALoCAgkAuQICBQ1iYWxhbmNlQmlnSW50CQC4AgIFB3NjYWxlMTgJAHYGCQC4AgIFB3NjYWxlMTgJALoCAgkAuQICBQ5yZWRlZW1lZEJpZ0ludAUHc2NhbGUxOAUMc3VwcGx5QmlnSW50ABIFBGJpZzIAAAASBQRET1dOBQdzY2FsZTE4BQNuaWwEDSR0MDM2OTUzMzcwMDkJAQd0YWtlRmVlAgUJYW1vdW50UmF3BQZvdXRGZWUEC3RvdGFsQW1vdW50CAUNJHQwMzY5NTMzNzAwOQJfMQQJZmVlQW1vdW50CAUNJHQwMzY5NTMzNzAwOQJfMgQNJHQwMzcwMTMzNzIzOQMFEG91dEluQW1vdW50QXNzZXQJAJYKBAULdG90YWxBbW91bnQAAAkAZQIFDGFtQmFsYW5jZU9sZAUJYW1vdW50UmF3BQxwckJhbGFuY2VPbGQJAJYKBAAABQt0b3RhbEFtb3VudAUMYW1CYWxhbmNlT2xkCQBlAgUMcHJCYWxhbmNlT2xkBQlhbW91bnRSYXcEC291dEFtQW1vdW50CAUNJHQwMzcwMTMzNzIzOQJfMQQLb3V0UHJBbW91bnQIBQ0kdDAzNzAxMzM3MjM5Al8yBAxhbUJhbGFuY2VOZXcIBQ0kdDAzNzAxMzM3MjM5Al8zBAxwckJhbGFuY2VOZXcIBQ0kdDAzNzAxMzM3MjM5Al80BAtwcmljZU5ld1gxOAkBD2NhbGNQcmljZUJpZ0ludAIJAQV0b1gxOAIFDHByQmFsYW5jZU5ldwUVY2ZnUHJpY2VBc3NldERlY2ltYWxzCQEFdG9YMTgCBQxhbUJhbGFuY2VOZXcFFmNmZ0Ftb3VudEFzc2V0RGVjaW1hbHMECHByaWNlTmV3CQEHZnJvbVgxOAIFC3ByaWNlTmV3WDE4BQZzY2FsZTgEC2NvbW1vblN0YXRlAwUGaXNFdmFsBQNuaWwJAMwIAgkBC1N0cmluZ0VudHJ5AgkBA2dhdQIJAKUIAQkBBXZhbHVlAQULdXNlckFkZHJlc3MJANgEAQkBBXZhbHVlAQUEdHhJZAkBEWRhdGFHZXRBY3Rpb25JbmZvBgULb3V0QW1BbW91bnQFC291dFByQW1vdW50BQ1wYXltZW50QW1vdW50BQhwcmljZU5ldwUGaGVpZ2h0CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAnBsAAUIcHJpY2VOZXcJAMwIAgkBDEludGVnZXJFbnRyeQIJAQJwaAIFBmhlaWdodAgFCWxhc3RCbG9jawl0aW1lc3RhbXAFCHByaWNlTmV3BQNuaWwEC3ByaWNlT2xkWDE4CQEPY2FsY1ByaWNlQmlnSW50AgkBBXRvWDE4AgUMcHJCYWxhbmNlT2xkBRVjZmdQcmljZUFzc2V0RGVjaW1hbHMJAQV0b1gxOAIFDGFtQmFsYW5jZU9sZAUWY2ZnQW1vdW50QXNzZXREZWNpbWFscwQIcHJpY2VPbGQJAQdmcm9tWDE4AgULcHJpY2VPbGRYMTgFBnNjYWxlOAQEbG9zcwQYYW1vdW50Qm90aEluUGF5bWVudEFzc2V0CQBoAgkAoAMBCQC8AgMFDWJhbGFuY2VCaWdJbnQFDnJlZGVlbWVkQmlnSW50BQxzdXBwbHlCaWdJbnQAAgkAawMJAGUCBQt0b3RhbEFtb3VudAUYYW1vdW50Qm90aEluUGF5bWVudEFzc2V0BQZzY2FsZTgFGGFtb3VudEJvdGhJblBheW1lbnRBc3NldAkAlwoFBQt0b3RhbEFtb3VudAULY29tbW9uU3RhdGUFCWZlZUFtb3VudAUEbG9zcwUQb3V0SW5BbW91bnRBc3NldAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgEWbWFuYWdlclB1YmxpY0tleU9yVW5pdAAEByRtYXRjaDAJAKIIAQkBA21wawADCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFzBQckbWF0Y2gwCQDZBAEFAXMDCQABAgUHJG1hdGNoMAIEVW5pdAUEdW5pdAkAAgECC01hdGNoIGVycm9yAR1wZW5kaW5nTWFuYWdlclB1YmxpY0tleU9yVW5pdAAEByRtYXRjaDAJAKIIAQkBBHBtcGsAAwkAAQIFByRtYXRjaDACBlN0cmluZwQBcwUHJG1hdGNoMAkA2QQBBQFzAwkAAQIFByRtYXRjaDACBFVuaXQFBHVuaXQJAAIBAgtNYXRjaCBlcnJvcgEJaXNNYW5hZ2VyAQFpBAckbWF0Y2gwCQEWbWFuYWdlclB1YmxpY0tleU9yVW5pdAADCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQCcGsFByRtYXRjaDAJAAACCAUBaQ9jYWxsZXJQdWJsaWNLZXkFAnBrAwkAAQIFByRtYXRjaDACBFVuaXQJAAACCAUBaQZjYWxsZXIFBHRoaXMJAAIBAgtNYXRjaCBlcnJvcgELbXVzdE1hbmFnZXIBAWkEAnBkCQACAQIRUGVybWlzc2lvbiBkZW5pZWQEByRtYXRjaDAJARZtYW5hZ2VyUHVibGljS2V5T3JVbml0AAMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAJwawUHJG1hdGNoMAMJAAACCAUBaQ9jYWxsZXJQdWJsaWNLZXkFAnBrBgUCcGQDCQABAgUHJG1hdGNoMAIEVW5pdAMJAAACCAUBaQZjYWxsZXIFBHRoaXMGBQJwZAkAAgECC01hdGNoIGVycm9yHgFpAQlyZWJhbGFuY2UACQDOCAIJAQ5yZWJhbGFuY2VBc3NldAEJAQ9nZXRTdHJpbmdPckZhaWwCBQR0aGlzCQECYWEACQEOcmViYWxhbmNlQXNzZXQBCQEPZ2V0U3RyaW5nT3JGYWlsAgUEdGhpcwkBAnBhAAFpASFjYWxjdWxhdGVBbW91bnRPdXRGb3JTd2FwUkVBRE9OTFkDDWNsZWFuQW1vdW50SW4JaXNSZXZlcnNlDWZlZVBvb2xBbW91bnQEDSR0MDM5MTI1Mzk0MzADCQAAAgUJaXNSZXZlcnNlBwQIYXNzZXRPdXQJAQ9nZXRTdHJpbmdPckZhaWwCBQR0aGlzCQECcGEABAdhc3NldEluCQEPZ2V0U3RyaW5nT3JGYWlsAgUEdGhpcwkBAmFhAAkAlAoCBQhhc3NldE91dAUHYXNzZXRJbgQIYXNzZXRPdXQJAQ9nZXRTdHJpbmdPckZhaWwCBQR0aGlzCQECYWEABAdhc3NldEluCQEPZ2V0U3RyaW5nT3JGYWlsAgUEdGhpcwkBAnBhAAkAlAoCBQhhc3NldE91dAUHYXNzZXRJbgQIYXNzZXRPdXQIBQ0kdDAzOTEyNTM5NDMwAl8xBAdhc3NldEluCAUNJHQwMzkxMjUzOTQzMAJfMgQScG9vbEFzc2V0SW5CYWxhbmNlCQENZ2V0QWNjQmFsYW5jZQEFB2Fzc2V0SW4EE3Bvb2xBc3NldE91dEJhbGFuY2UJAQ1nZXRBY2NCYWxhbmNlAQUIYXNzZXRPdXQECWFtb3VudE91dAkAawMFE3Bvb2xBc3NldE91dEJhbGFuY2UFDWNsZWFuQW1vdW50SW4JAGQCBRJwb29sQXNzZXRJbkJhbGFuY2UFDWNsZWFuQW1vdW50SW4EBG9sZEsJALkCAgkAtgIBBRJwb29sQXNzZXRJbkJhbGFuY2UJALYCAQUTcG9vbEFzc2V0T3V0QmFsYW5jZQQEbmV3SwkAuQICCQC3AgIJALcCAgkAtgIBCQENZ2V0QWNjQmFsYW5jZQEFB2Fzc2V0SW4JALYCAQUNY2xlYW5BbW91bnRJbgkAtgIBBQ1mZWVQb29sQW1vdW50CQC4AgIJALYCAQkBDWdldEFjY0JhbGFuY2UBBQhhc3NldE91dAkAtgIBBQlhbW91bnRPdXQEBmNoZWNrSwMJAMACAgUEbmV3SwUEb2xkSwYJAAIBAhRuZXcgSyBpcyBmZXdlciBlcnJvcgMJAAACBQZjaGVja0sFBmNoZWNrSwkAlAoCBQNuaWwFCWFtb3VudE91dAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpASZjYWxjdWxhdGVBbW91bnRPdXRGb3JTd2FwQW5kU2VuZFRva2VucwUNY2xlYW5BbW91bnRJbglpc1JldmVyc2UMYW1vdW50T3V0TWluCWFkZHJlc3NUbw1mZWVQb29sQW1vdW50BAtzd2FwQ29udGFjdAoAAUAJAPwHBAUPZmFjdG9yeUNvbnRyYWN0AhdnZXRTd2FwQ29udHJhY3RSRUFET05MWQUDbmlsBQNuaWwDCQABAgUBQAIGU3RyaW5nBQFACQACAQkArAICCQADAQUBQAIbIGNvdWxkbid0IGJlIGNhc3QgdG8gU3RyaW5nBAZjaGVja3MJAMwIAgMJAGcCCAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAUNY2xlYW5BbW91bnRJbgYJAQh0aHJvd0VycgECDFdyb25nIGFtb3VudAkAzAgCAwkAAAIIBQFpBmNhbGxlcgkBEUBleHRyTmF0aXZlKDEwNjIpAQULc3dhcENvbnRhY3QGCQEIdGhyb3dFcnIBAhFQZXJtaXNzaW9uIGRlbmllZAUDbmlsAwkAAAIFBmNoZWNrcwUGY2hlY2tzBANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAQHYXNzZXRJbgkBD2Fzc2V0SWRUb1N0cmluZwEIBQNwbXQHYXNzZXRJZAQIYXNzZXRPdXQDCQAAAgUJaXNSZXZlcnNlBwkBD2dldFN0cmluZ09yRmFpbAIFBHRoaXMJAQJwYQAJAQ9nZXRTdHJpbmdPckZhaWwCBQR0aGlzCQECYWEABBJwb29sQXNzZXRJbkJhbGFuY2UJAGUCCQENZ2V0QWNjQmFsYW5jZQEFB2Fzc2V0SW4ICQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BBNwb29sQXNzZXRPdXRCYWxhbmNlCQENZ2V0QWNjQmFsYW5jZQEFCGFzc2V0T3V0BAlhbW91bnRPdXQJAGsDBRNwb29sQXNzZXRPdXRCYWxhbmNlBQ1jbGVhbkFtb3VudEluCQBkAgUScG9vbEFzc2V0SW5CYWxhbmNlBQ1jbGVhbkFtb3VudEluBARvbGRLCQC5AgIJALYCAQUScG9vbEFzc2V0SW5CYWxhbmNlCQC2AgEFE3Bvb2xBc3NldE91dEJhbGFuY2UEBG5ld0sJALkCAgkAtwICCQC2AgEJAQ1nZXRBY2NCYWxhbmNlAQUHYXNzZXRJbgkAtgIBBQ1mZWVQb29sQW1vdW50CQC4AgIJALYCAQkBDWdldEFjY0JhbGFuY2UBBQhhc3NldE91dAkAtgIBBQlhbW91bnRPdXQEBmNoZWNrSwMJAMACAgUEbmV3SwUEb2xkSwYJAAIBAhRuZXcgSyBpcyBmZXdlciBlcnJvcgMJAAACBQZjaGVja0sFBmNoZWNrSwQIY2hlY2tNaW4DCQBnAgUJYW1vdW50T3V0BQxhbW91bnRPdXRNaW4GCQACAQIsRXhjaGFuZ2UgcmVzdWx0IGlzIGZld2VyIGNvaW5zIHRoYW4gZXhwZWN0ZWQDCQAAAgUIY2hlY2tNaW4FCGNoZWNrTWluBA5yZWJhbGFuY2VTdGF0ZQkBDnJlYmFsYW5jZUFzc2V0AQUHYXNzZXRJbgMJAAACBQ5yZWJhbGFuY2VTdGF0ZQUOcmViYWxhbmNlU3RhdGUEDXdpdGhkcmF3U3RhdGUJARl3aXRoZHJhd0FuZFJlYmFsYW5jZUFzc2V0AgUIYXNzZXRPdXQFCWFtb3VudE91dAMJAAACBQ13aXRoZHJhd1N0YXRlBQ13aXRoZHJhd1N0YXRlCQCUCgIJAM4IAgkAzggCBQ13aXRoZHJhd1N0YXRlBQ5yZWJhbGFuY2VTdGF0ZQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBBQlhZGRyZXNzVG8FCWFtb3VudE91dAkBDHBhcnNlQXNzZXRJZAEFCGFzc2V0T3V0BQNuaWwFCWFtb3VudE91dAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQpzZXRNYW5hZ2VyARdwZW5kaW5nTWFuYWdlclB1YmxpY0tleQQLY2hlY2tDYWxsZXIJAQttdXN0TWFuYWdlcgEFAWkDCQAAAgULY2hlY2tDYWxsZXIFC2NoZWNrQ2FsbGVyBBVjaGVja01hbmFnZXJQdWJsaWNLZXkJANkEAQUXcGVuZGluZ01hbmFnZXJQdWJsaWNLZXkDCQAAAgUVY2hlY2tNYW5hZ2VyUHVibGljS2V5BRVjaGVja01hbmFnZXJQdWJsaWNLZXkJAMwIAgkBC1N0cmluZ0VudHJ5AgkBBHBtcGsABRdwZW5kaW5nTWFuYWdlclB1YmxpY0tleQUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBDmNvbmZpcm1NYW5hZ2VyAAQCcG0JAR1wZW5kaW5nTWFuYWdlclB1YmxpY0tleU9yVW5pdAAEBWhhc1BNAwkBCWlzRGVmaW5lZAEFAnBtBgkAAgECEk5vIHBlbmRpbmcgbWFuYWdlcgMJAAACBQVoYXNQTQUFaGFzUE0EB2NoZWNrUE0DCQAAAggFAWkPY2FsbGVyUHVibGljS2V5CQEFdmFsdWUBBQJwbQYJAAIBAhtZb3UgYXJlIG5vdCBwZW5kaW5nIG1hbmFnZXIDCQAAAgUHY2hlY2tQTQUHY2hlY2tQTQkAzAgCCQELU3RyaW5nRW50cnkCCQEDbXBrAAkA2AQBCQEFdmFsdWUBBQJwbQkAzAgCCQELRGVsZXRlRW50cnkBCQEEcG1wawAFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQNwdXQCEXNsaXBwYWdlVG9sZXJhbmNlD3Nob3VsZEF1dG9TdGFrZQMJAGYCAAAFEXNsaXBwYWdlVG9sZXJhbmNlCQACAQIgSW52YWxpZCBzbGlwcGFnZVRvbGVyYW5jZSBwYXNzZWQEBmVzdFB1dAkBCWNvbW1vblB1dAMFAWkFEXNsaXBwYWdlVG9sZXJhbmNlBgQJZW1pdExwQW10CAUGZXN0UHV0Al8yBAlscEFzc2V0SWQIBQZlc3RQdXQCXzcEBXN0YXRlCAUGZXN0UHV0Al85BAZhbURpZmYIBQZlc3RQdXQDXzEwBAZwckRpZmYIBQZlc3RQdXQDXzExBARhbUlkCAUGZXN0UHV0A18xMgQEcHJJZAgFBmVzdFB1dANfMTMECmFtQXNzZXRQbXQJALYCAQgJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQECnByQXNzZXRQbXQJALYCAQgJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAQZhbW91bnQECmN1cnJlbnRLTHAJAQ5jYWxjQ3VycmVudEtMcAMFCmFtQXNzZXRQbXQFCnByQXNzZXRQbXQJALYCAQAAAwkAAAIFCmN1cnJlbnRLTHAFCmN1cnJlbnRLTHAEB2VtaXRJbnYJAPwHBAUPZmFjdG9yeUNvbnRyYWN0AgRlbWl0CQDMCAIFCWVtaXRMcEFtdAUDbmlsBQNuaWwDCQAAAgUHZW1pdEludgUHZW1pdEludgQNZW1pdEludkxlZ2FjeQQHJG1hdGNoMAUHZW1pdEludgMJAAECBQckbWF0Y2gwAgdBZGRyZXNzBBVsZWdhY3lGYWN0b3J5Q29udHJhY3QFByRtYXRjaDAJAPwHBAUVbGVnYWN5RmFjdG9yeUNvbnRyYWN0AgRlbWl0CQDMCAIFCWVtaXRMcEFtdAUDbmlsBQNuaWwFBHVuaXQDCQAAAgUNZW1pdEludkxlZ2FjeQUNZW1pdEludkxlZ2FjeQQMc2xpcHBhZ2VBSW52AwkAZgIFBmFtRGlmZgAACQD8BwQFEHNsaXBwYWdlQ29udHJhY3QCA3B1dAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQRhbUlkBQZhbURpZmYFA25pbAUDbmlsAwkAAAIFDHNsaXBwYWdlQUludgUMc2xpcHBhZ2VBSW52BAxzbGlwcGFnZVBJbnYDCQBmAgUGcHJEaWZmAAAJAPwHBAUQc2xpcHBhZ2VDb250cmFjdAIDcHV0BQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFBHBySWQFBnByRGlmZgUDbmlsBQNuaWwDCQAAAgUMc2xpcHBhZ2VQSW52BQxzbGlwcGFnZVBJbnYECmxwVHJhbnNmZXIDBQ9zaG91bGRBdXRvU3Rha2UEC3NscFN0YWtlSW52CQD8BwQFD3N0YWtpbmdDb250cmFjdAIFc3Rha2UFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUJbHBBc3NldElkBQllbWl0THBBbXQFA25pbAMJAAACBQtzbHBTdGFrZUludgULc2xwU3Rha2VJbnYFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFCWVtaXRMcEFtdAUJbHBBc3NldElkBQNuaWwEDSR0MDQ0NDc2NDQ5MzgJARJyZWZyZXNoS0xwSW50ZXJuYWwDAAAAAAAAAwkAAAIFDSR0MDQ0NDc2NDQ5MzgFDSR0MDQ0NDc2NDQ5MzgECnVwZGF0ZWRLTHAIBQ0kdDA0NDQ3NjQ0OTM4Al8yBBFyZWZyZXNoS0xwQWN0aW9ucwgFDSR0MDQ0NDc2NDQ5MzgCXzEEEWlzVXBkYXRlZEtMcFZhbGlkCQESdmFsaWRhdGVVcGRhdGVkS0xwAgUKY3VycmVudEtMcAUKdXBkYXRlZEtMcAMJAAACBRFpc1VwZGF0ZWRLTHBWYWxpZAURaXNVcGRhdGVkS0xwVmFsaWQEA3JlYgkA/AcEBQR0aGlzAglyZWJhbGFuY2UFA25pbAUDbmlsAwkAAAIFA3JlYgUDcmViCQDOCAIJAM4IAgUFc3RhdGUFCmxwVHJhbnNmZXIFEXJlZnJlc2hLTHBBY3Rpb25zCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBCnB1dEZvckZyZWUBC21heFNsaXBwYWdlAwkAZgIAAAULbWF4U2xpcHBhZ2UJAAIBAhRJbnZhbGlkIHZhbHVlIHBhc3NlZAQGZXN0UHV0CQEJY29tbW9uUHV0AwUBaQULbWF4U2xpcHBhZ2UHBAVzdGF0ZQgFBmVzdFB1dAJfOQQKYW1Bc3NldFBtdAkAtgIBCAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAQKcHJBc3NldFBtdAkAtgIBCAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwABBmFtb3VudAQKY3VycmVudEtMcAkBDmNhbGNDdXJyZW50S0xwAwUKYW1Bc3NldFBtdAUKcHJBc3NldFBtdAkAtgIBAAADCQAAAgUKY3VycmVudEtMcAUKY3VycmVudEtMcAQNJHQwNDU1NTA0NTYxNQkBEnJlZnJlc2hLTHBJbnRlcm5hbAMAAAAAAAAEEXJlZnJlc2hLTHBBY3Rpb25zCAUNJHQwNDU1NTA0NTYxNQJfMQQKdXBkYXRlZEtMcAgFDSR0MDQ1NTUwNDU2MTUCXzIEEWlzVXBkYXRlZEtMcFZhbGlkCQESdmFsaWRhdGVVcGRhdGVkS0xwAgUKY3VycmVudEtMcAUKdXBkYXRlZEtMcAMJAAACBRFpc1VwZGF0ZWRLTHBWYWxpZAURaXNVcGRhdGVkS0xwVmFsaWQJAM4IAgUFc3RhdGUFEXJlZnJlc2hLTHBBY3Rpb25zCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBCXB1dE9uZVRrbgIMbWluT3V0QW1vdW50CWF1dG9TdGFrZQQgaXNQb29sT25lVG9rZW5PcGVyYXRpb25zRGlzYWJsZWQKAAFACQD8BwQFD2ZhY3RvcnlDb250cmFjdAIoaXNQb29sT25lVG9rZW5PcGVyYXRpb25zRGlzYWJsZWRSRUFET05MWQkAzAgCCQClCAEFBHRoaXMFA25pbAUDbmlsAwkAAQIFAUACB0Jvb2xlYW4FAUAJAAIBCQCsAgIJAAMBBQFAAhwgY291bGRuJ3QgYmUgY2FzdCB0byBCb29sZWFuBA1pc1B1dERpc2FibGVkAwMDCQEQaXNHbG9iYWxTaHV0ZG93bgAGCQAAAgUNY2ZnUG9vbFN0YXR1cwUPUG9vbFB1dERpc2FibGVkBgkAAAIFDWNmZ1Bvb2xTdGF0dXMFDFBvb2xTaHV0ZG93bgYFIGlzUG9vbE9uZVRva2VuT3BlcmF0aW9uc0Rpc2FibGVkBAZjaGVja3MJAMwIAgMDCQEBIQEFDWlzUHV0RGlzYWJsZWQGCQEJaXNNYW5hZ2VyAQUBaQYJAQh0aHJvd0VycgECIXB1dCBvcGVyYXRpb24gaXMgYmxvY2tlZCBieSBhZG1pbgkAzAgCAwkAAAIJAJADAQgFAWkIcGF5bWVudHMAAQYJAQh0aHJvd0VycgECHmV4YWN0bHkgMSBwYXltZW50IGFyZSBleHBlY3RlZAUDbmlsAwkAAAIFBmNoZWNrcwUGY2hlY2tzBAdwYXltZW50CQCRAwIIBQFpCHBheW1lbnRzAAAEDnBheW1lbnRBc3NldElkCAUHcGF5bWVudAdhc3NldElkBBBwYXltZW50QW1vdW50UmF3CAUHcGF5bWVudAZhbW91bnQECmN1cnJlbnRLTHADCQAAAgUOcGF5bWVudEFzc2V0SWQFEGNmZ0Ftb3VudEFzc2V0SWQJAQ5jYWxjQ3VycmVudEtMcAMJALYCAQUQcGF5bWVudEFtb3VudFJhdwkAtgIBAAAJALYCAQAAAwkAAAIFDnBheW1lbnRBc3NldElkBQ9jZmdQcmljZUFzc2V0SWQJAQ5jYWxjQ3VycmVudEtMcAMJALYCAQAACQC2AgEFEHBheW1lbnRBbW91bnRSYXcJALYCAQAACQEIdGhyb3dFcnIBAh5wYXltZW50IGFzc2V0IGlzIG5vdCBzdXBwb3J0ZWQDCQAAAgUKY3VycmVudEtMcAUKY3VycmVudEtMcAQLdXNlckFkZHJlc3MIBQFpBmNhbGxlcgQEdHhJZAgFAWkNdHJhbnNhY3Rpb25JZAQNJHQwNDY4MDM0Njk1NQkBD2NhbGNQdXRPbmVUb2tlbgQFEHBheW1lbnRBbW91bnRSYXcFDnBheW1lbnRBc3NldElkBQt1c2VyQWRkcmVzcwUEdHhJZAMJAAACBQ0kdDA0NjgwMzQ2OTU1BQ0kdDA0NjgwMzQ2OTU1BBRwYXltZW50SW5BbW91bnRBc3NldAgFDSR0MDQ2ODAzNDY5NTUCXzUEBWJvbnVzCAUNJHQwNDY4MDM0Njk1NQJfNAQJZmVlQW1vdW50CAUNJHQwNDY4MDM0Njk1NQJfMwQLY29tbW9uU3RhdGUIBQ0kdDA0NjgwMzQ2OTU1Al8yBBNlbWl0QW1vdW50RXN0aW1hdGVkCAUNJHQwNDY4MDM0Njk1NQJfMQQKZW1pdEFtb3VudAMDCQBmAgUMbWluT3V0QW1vdW50AAAJAGYCBQxtaW5PdXRBbW91bnQFE2VtaXRBbW91bnRFc3RpbWF0ZWQHCQEIdGhyb3dFcnIBCQC5CQIJAMwIAgIfYW1vdW50IHRvIHJlY2VpdmUgaXMgbGVzcyB0aGFuIAkAzAgCCQCkAwEFDG1pbk91dEFtb3VudAUDbmlsAgAFE2VtaXRBbW91bnRFc3RpbWF0ZWQEB2VtaXRJbnYJAQRlbWl0AQUKZW1pdEFtb3VudAMJAAACBQdlbWl0SW52BQdlbWl0SW52BApscFRyYW5zZmVyAwUJYXV0b1N0YWtlBAhzdGFrZUludgkA/AcEBQ9zdGFraW5nQ29udHJhY3QCBXN0YWtlBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFDGNmZ0xwQXNzZXRJZAUKZW1pdEFtb3VudAUDbmlsAwkAAAIFCHN0YWtlSW52BQhzdGFrZUludgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgUKZW1pdEFtb3VudAUMY2ZnTHBBc3NldElkBQNuaWwEB3NlbmRGZWUDCQBmAgUJZmVlQW1vdW50AAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUTZmVlQ29sbGVjdG9yQWRkcmVzcwUJZmVlQW1vdW50BQ5wYXltZW50QXNzZXRJZAUDbmlsBQNuaWwEDSR0MDQ3NTQxNDc3MzgDCQAAAgUEdGhpcwUTZmVlQ29sbGVjdG9yQWRkcmVzcwkAlAoCAAAAAAMFFHBheW1lbnRJbkFtb3VudEFzc2V0CQCUCgIJAQEtAQUJZmVlQW1vdW50AAAJAJQKAgAACQEBLQEFCWZlZUFtb3VudAQXYW1vdW50QXNzZXRCYWxhbmNlRGVsdGEIBQ0kdDA0NzU0MTQ3NzM4Al8xBBZwcmljZUFzc2V0QmFsYW5jZURlbHRhCAUNJHQwNDc1NDE0NzczOAJfMgQNJHQwNDc3NDE0Nzg0OQkBEnJlZnJlc2hLTHBJbnRlcm5hbAMFF2Ftb3VudEFzc2V0QmFsYW5jZURlbHRhBRZwcmljZUFzc2V0QmFsYW5jZURlbHRhAAAEEXJlZnJlc2hLTHBBY3Rpb25zCAUNJHQwNDc3NDE0Nzg0OQJfMQQKdXBkYXRlZEtMcAgFDSR0MDQ3NzQxNDc4NDkCXzIEA2tMcAkBBXZhbHVlAQkAoggBBQZrZXlLTHAEEWlzVXBkYXRlZEtMcFZhbGlkCQESdmFsaWRhdGVVcGRhdGVkS0xwAgUKY3VycmVudEtMcAUKdXBkYXRlZEtMcAMJAAACBRFpc1VwZGF0ZWRLTHBWYWxpZAURaXNVcGRhdGVkS0xwVmFsaWQEA3JlYgkA/AcEBQR0aGlzAglyZWJhbGFuY2UFA25pbAUDbmlsAwkAAAIFA3JlYgUDcmViCQCUCgIJAM4IAgkAzggCCQDOCAIFC2NvbW1vblN0YXRlBQpscFRyYW5zZmVyBQdzZW5kRmVlBRFyZWZyZXNoS0xwQWN0aW9ucwUKZW1pdEFtb3VudAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARFwdXRPbmVUa25SRUFET05MWQIOcGF5bWVudEFzc2V0SWQQcGF5bWVudEFtb3VudFJhdwQNJHQwNDgyMDQ0ODM2MQkBD2NhbGNQdXRPbmVUb2tlbgQFEHBheW1lbnRBbW91bnRSYXcJAQxwYXJzZUFzc2V0SWQBBQ5wYXltZW50QXNzZXRJZAUEdW5pdAUEdW5pdAQTZW1pdEFtb3VudEVzdGltYXRlZAgFDSR0MDQ4MjA0NDgzNjECXzEEC2NvbW1vblN0YXRlCAUNJHQwNDgyMDQ0ODM2MQJfMgQJZmVlQW1vdW50CAUNJHQwNDgyMDQ0ODM2MQJfMwQFYm9udXMIBQ0kdDA0ODIwNDQ4MzYxAl80BBRwYXltZW50SW5BbW91bnRBc3NldAgFDSR0MDQ4MjA0NDgzNjECXzUJAJQKAgUDbmlsCQCVCgMFE2VtaXRBbW91bnRFc3RpbWF0ZWQFCWZlZUFtb3VudAUFYm9udXMBaQEJZ2V0T25lVGtuAg1vdXRBc3NldElkU3RyDG1pbk91dEFtb3VudAQgaXNQb29sT25lVG9rZW5PcGVyYXRpb25zRGlzYWJsZWQKAAFACQD8BwQFD2ZhY3RvcnlDb250cmFjdAIoaXNQb29sT25lVG9rZW5PcGVyYXRpb25zRGlzYWJsZWRSRUFET05MWQkAzAgCCQClCAEFBHRoaXMFA25pbAUDbmlsAwkAAQIFAUACB0Jvb2xlYW4FAUAJAAIBCQCsAgIJAAMBBQFAAhwgY291bGRuJ3QgYmUgY2FzdCB0byBCb29sZWFuBA1pc0dldERpc2FibGVkAwMJARBpc0dsb2JhbFNodXRkb3duAAYJAAACBQ1jZmdQb29sU3RhdHVzBQxQb29sU2h1dGRvd24GBSBpc1Bvb2xPbmVUb2tlbk9wZXJhdGlvbnNEaXNhYmxlZAQGY2hlY2tzCQDMCAIDAwkBASEBBQ1pc0dldERpc2FibGVkBgkBCWlzTWFuYWdlcgEFAWkGCQEIdGhyb3dFcnIBAiFnZXQgb3BlcmF0aW9uIGlzIGJsb2NrZWQgYnkgYWRtaW4JAMwIAgMJAAACCQCQAwEIBQFpCHBheW1lbnRzAAEGCQEIdGhyb3dFcnIBAh5leGFjdGx5IDEgcGF5bWVudCBhcmUgZXhwZWN0ZWQFA25pbAMJAAACBQZjaGVja3MFBmNoZWNrcwQKb3V0QXNzZXRJZAkBDHBhcnNlQXNzZXRJZAEFDW91dEFzc2V0SWRTdHIEB3BheW1lbnQJAJEDAggFAWkIcGF5bWVudHMAAAQOcGF5bWVudEFzc2V0SWQIBQdwYXltZW50B2Fzc2V0SWQEDXBheW1lbnRBbW91bnQIBQdwYXltZW50BmFtb3VudAQKY3VycmVudEtMcAkBDmNhbGNDdXJyZW50S0xwAwkAtgIBAAAJALYCAQAACQC2AgEAAAMJAAACBQpjdXJyZW50S0xwBQpjdXJyZW50S0xwBAt1c2VyQWRkcmVzcwgFAWkGY2FsbGVyBAR0eElkCAUBaQ10cmFuc2FjdGlvbklkBA0kdDA0OTI0NjQ5Mzk5CQEPY2FsY0dldE9uZVRva2VuBQUKb3V0QXNzZXRJZAUNcGF5bWVudEFtb3VudAUOcGF5bWVudEFzc2V0SWQFC3VzZXJBZGRyZXNzBQR0eElkAwkAAAIFDSR0MDQ5MjQ2NDkzOTkFDSR0MDQ5MjQ2NDkzOTkEEG91dEluQW1vdW50QXNzZXQIBQ0kdDA0OTI0NjQ5Mzk5Al81BAVib251cwgFDSR0MDQ5MjQ2NDkzOTkCXzQECWZlZUFtb3VudAgFDSR0MDQ5MjQ2NDkzOTkCXzMEC2NvbW1vblN0YXRlCAUNJHQwNDkyNDY0OTM5OQJfMgQPYW1vdW50RXN0aW1hdGVkCAUNJHQwNDkyNDY0OTM5OQJfMQQGYW1vdW50AwMJAGYCBQxtaW5PdXRBbW91bnQAAAkAZgIFDG1pbk91dEFtb3VudAUPYW1vdW50RXN0aW1hdGVkBwkBCHRocm93RXJyAQkAuQkCCQDMCAICH2Ftb3VudCB0byByZWNlaXZlIGlzIGxlc3MgdGhhbiAJAMwIAgkApAMBBQxtaW5PdXRBbW91bnQFA25pbAIABQ9hbW91bnRFc3RpbWF0ZWQEB2J1cm5JbnYJAPwHBAUPZmFjdG9yeUNvbnRyYWN0AgRidXJuCQDMCAIFDXBheW1lbnRBbW91bnQFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUOcGF5bWVudEFzc2V0SWQFDXBheW1lbnRBbW91bnQFA25pbAMJAAACBQdidXJuSW52BQdidXJuSW52BA13aXRoZHJhd1N0YXRlCQEZd2l0aGRyYXdBbmRSZWJhbGFuY2VBc3NldAIFDW91dEFzc2V0SWRTdHIJAGQCBQZhbW91bnQJAJYDAQkAzAgCAAAJAMwIAgUJZmVlQW1vdW50BQNuaWwEDWFzc2V0VHJhbnNmZXIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwULdXNlckFkZHJlc3MFBmFtb3VudAUKb3V0QXNzZXRJZAUDbmlsBAdzZW5kRmVlAwkAZgIFCWZlZUFtb3VudAAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFE2ZlZUNvbGxlY3RvckFkZHJlc3MFCWZlZUFtb3VudAUKb3V0QXNzZXRJZAUDbmlsBQNuaWwEDSR0MDUwMDYzNTAzMTAEEGZlZUFtb3VudEZvckNhbGMDCQAAAgUEdGhpcwUTZmVlQ29sbGVjdG9yQWRkcmVzcwAABQlmZWVBbW91bnQDBRBvdXRJbkFtb3VudEFzc2V0CQCUCgIJAQEtAQkAZAIFBmFtb3VudAUQZmVlQW1vdW50Rm9yQ2FsYwAACQCUCgIAAAkBAS0BCQBkAgUGYW1vdW50BRBmZWVBbW91bnRGb3JDYWxjBBdhbW91bnRBc3NldEJhbGFuY2VEZWx0YQgFDSR0MDUwMDYzNTAzMTACXzEEFnByaWNlQXNzZXRCYWxhbmNlRGVsdGEIBQ0kdDA1MDA2MzUwMzEwAl8yBA0kdDA1MDMxMzUwNDIxCQEScmVmcmVzaEtMcEludGVybmFsAwUXYW1vdW50QXNzZXRCYWxhbmNlRGVsdGEFFnByaWNlQXNzZXRCYWxhbmNlRGVsdGEAAAQRcmVmcmVzaEtMcEFjdGlvbnMIBQ0kdDA1MDMxMzUwNDIxAl8xBAp1cGRhdGVkS0xwCAUNJHQwNTAzMTM1MDQyMQJfMgQRaXNVcGRhdGVkS0xwVmFsaWQJARJ2YWxpZGF0ZVVwZGF0ZWRLTHACBQpjdXJyZW50S0xwBQp1cGRhdGVkS0xwAwkAAAIFEWlzVXBkYXRlZEtMcFZhbGlkBRFpc1VwZGF0ZWRLTHBWYWxpZAkAlAoCCQDOCAIJAM4IAgkAzggCCQDOCAIFC2NvbW1vblN0YXRlBQ13aXRoZHJhd1N0YXRlBQ1hc3NldFRyYW5zZmVyBQdzZW5kRmVlBRFyZWZyZXNoS0xwQWN0aW9ucwUGYW1vdW50CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBEWdldE9uZVRrblJFQURPTkxZAgpvdXRBc3NldElkDXBheW1lbnRBbW91bnQEDSR0MDUwNjk5NTA4NTUJAQ9jYWxjR2V0T25lVG9rZW4FCQEMcGFyc2VBc3NldElkAQUKb3V0QXNzZXRJZAUNcGF5bWVudEFtb3VudAUMY2ZnTHBBc3NldElkBQR1bml0BQR1bml0BA9hbW91bnRFc3RpbWF0ZWQIBQ0kdDA1MDY5OTUwODU1Al8xBAtjb21tb25TdGF0ZQgFDSR0MDUwNjk5NTA4NTUCXzIECWZlZUFtb3VudAgFDSR0MDUwNjk5NTA4NTUCXzMEBWJvbnVzCAUNJHQwNTA2OTk1MDg1NQJfNAQQb3V0SW5BbW91bnRBc3NldAgFDSR0MDUwNjk5NTA4NTUCXzUJAJQKAgUDbmlsCQCVCgMFD2Ftb3VudEVzdGltYXRlZAUJZmVlQW1vdW50BQVib251cwFpARN1bnN0YWtlQW5kR2V0T25lVGtuAw11bnN0YWtlQW1vdW50DW91dEFzc2V0SWRTdHIMbWluT3V0QW1vdW50BCBpc1Bvb2xPbmVUb2tlbk9wZXJhdGlvbnNEaXNhYmxlZAoAAUAJAPwHBAUPZmFjdG9yeUNvbnRyYWN0Aihpc1Bvb2xPbmVUb2tlbk9wZXJhdGlvbnNEaXNhYmxlZFJFQURPTkxZCQDMCAIJAKUIAQUEdGhpcwUDbmlsBQNuaWwDCQABAgUBQAIHQm9vbGVhbgUBQAkAAgEJAKwCAgkAAwEFAUACHCBjb3VsZG4ndCBiZSBjYXN0IHRvIEJvb2xlYW4EDWlzR2V0RGlzYWJsZWQDAwkBEGlzR2xvYmFsU2h1dGRvd24ABgkAAAIFDWNmZ1Bvb2xTdGF0dXMFDFBvb2xTaHV0ZG93bgYFIGlzUG9vbE9uZVRva2VuT3BlcmF0aW9uc0Rpc2FibGVkBAZjaGVja3MJAMwIAgMDCQEBIQEFDWlzR2V0RGlzYWJsZWQGCQEJaXNNYW5hZ2VyAQUBaQYJAQh0aHJvd0VycgECIWdldCBvcGVyYXRpb24gaXMgYmxvY2tlZCBieSBhZG1pbgkAzAgCAwkAAAIJAJADAQgFAWkIcGF5bWVudHMAAAYJAQh0aHJvd0VycgECGG5vIHBheW1lbnRzIGFyZSBleHBlY3RlZAUDbmlsAwkAAAIFBmNoZWNrcwUGY2hlY2tzBApvdXRBc3NldElkCQEMcGFyc2VBc3NldElkAQUNb3V0QXNzZXRJZFN0cgQLdXNlckFkZHJlc3MIBQFpBmNhbGxlcgQEdHhJZAgFAWkNdHJhbnNhY3Rpb25JZAQKY3VycmVudEtMcAkBDmNhbGNDdXJyZW50S0xwAwkAtgIBAAAJALYCAQAACQC2AgEAAAMJAAACBQpjdXJyZW50S0xwBQpjdXJyZW50S0xwBAp1bnN0YWtlSW52CQD8BwQFD3N0YWtpbmdDb250cmFjdAIHdW5zdGFrZQkAzAgCCQDYBAEFDGNmZ0xwQXNzZXRJZAkAzAgCBQ11bnN0YWtlQW1vdW50BQNuaWwFA25pbAMJAAACBQp1bnN0YWtlSW52BQp1bnN0YWtlSW52BA0kdDA1MTc2MDUxOTExCQEPY2FsY0dldE9uZVRva2VuBQUKb3V0QXNzZXRJZAUNdW5zdGFrZUFtb3VudAUMY2ZnTHBBc3NldElkBQt1c2VyQWRkcmVzcwUEdHhJZAMJAAACBQ0kdDA1MTc2MDUxOTExBQ0kdDA1MTc2MDUxOTExBBBvdXRJbkFtb3VudEFzc2V0CAUNJHQwNTE3NjA1MTkxMQJfNQQFYm9udXMIBQ0kdDA1MTc2MDUxOTExAl80BAlmZWVBbW91bnQIBQ0kdDA1MTc2MDUxOTExAl8zBAtjb21tb25TdGF0ZQgFDSR0MDUxNzYwNTE5MTECXzIED2Ftb3VudEVzdGltYXRlZAgFDSR0MDUxNzYwNTE5MTECXzEEBmFtb3VudAMDCQBmAgUMbWluT3V0QW1vdW50AAAJAGYCBQxtaW5PdXRBbW91bnQFD2Ftb3VudEVzdGltYXRlZAcJAQh0aHJvd0VycgEJALkJAgkAzAgCAh9hbW91bnQgdG8gcmVjZWl2ZSBpcyBsZXNzIHRoYW4gCQDMCAIJAKQDAQUMbWluT3V0QW1vdW50BQNuaWwCAAUPYW1vdW50RXN0aW1hdGVkBAdidXJuSW52CQD8BwQFD2ZhY3RvcnlDb250cmFjdAIEYnVybgkAzAgCBQ11bnN0YWtlQW1vdW50BQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFDGNmZ0xwQXNzZXRJZAUNdW5zdGFrZUFtb3VudAUDbmlsAwkAAAIFB2J1cm5JbnYFB2J1cm5JbnYEDXdpdGhkcmF3U3RhdGUJARl3aXRoZHJhd0FuZFJlYmFsYW5jZUFzc2V0AgUNb3V0QXNzZXRJZFN0cgkAZAIFBmFtb3VudAkAlgMBCQDMCAIAAAkAzAgCBQlmZWVBbW91bnQFA25pbAQNYXNzZXRUcmFuc2ZlcgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFBmFtb3VudAUKb3V0QXNzZXRJZAUDbmlsBAdzZW5kRmVlAwkAZgIFCWZlZUFtb3VudAAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFE2ZlZUNvbGxlY3RvckFkZHJlc3MFCWZlZUFtb3VudAUKb3V0QXNzZXRJZAUDbmlsBQNuaWwEDSR0MDUyNTcwNTI4MTcEEGZlZUFtb3VudEZvckNhbGMDCQAAAgUEdGhpcwUTZmVlQ29sbGVjdG9yQWRkcmVzcwAABQlmZWVBbW91bnQDBRBvdXRJbkFtb3VudEFzc2V0CQCUCgIJAQEtAQkAZAIFBmFtb3VudAUQZmVlQW1vdW50Rm9yQ2FsYwAACQCUCgIAAAkBAS0BCQBkAgUGYW1vdW50BRBmZWVBbW91bnRGb3JDYWxjBBdhbW91bnRBc3NldEJhbGFuY2VEZWx0YQgFDSR0MDUyNTcwNTI4MTcCXzEEFnByaWNlQXNzZXRCYWxhbmNlRGVsdGEIBQ0kdDA1MjU3MDUyODE3Al8yBA0kdDA1MjgyMDUyOTI4CQEScmVmcmVzaEtMcEludGVybmFsAwUXYW1vdW50QXNzZXRCYWxhbmNlRGVsdGEFFnByaWNlQXNzZXRCYWxhbmNlRGVsdGEAAAQRcmVmcmVzaEtMcEFjdGlvbnMIBQ0kdDA1MjgyMDUyOTI4Al8xBAp1cGRhdGVkS0xwCAUNJHQwNTI4MjA1MjkyOAJfMgQRaXNVcGRhdGVkS0xwVmFsaWQJARJ2YWxpZGF0ZVVwZGF0ZWRLTHACBQpjdXJyZW50S0xwBQp1cGRhdGVkS0xwAwkAAAIFEWlzVXBkYXRlZEtMcFZhbGlkBRFpc1VwZGF0ZWRLTHBWYWxpZAkAlAoCCQDOCAIJAM4IAgkAzggCCQDOCAIFC2NvbW1vblN0YXRlBQ13aXRoZHJhd1N0YXRlBQ1hc3NldFRyYW5zZmVyBQdzZW5kRmVlBRFyZWZyZXNoS0xwQWN0aW9ucwUGYW1vdW50CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBA2dldAAEA3JlcwkBCWNvbW1vbkdldAEFAWkECG91dEFtQW10CAUDcmVzAl8xBAhvdXRQckFtdAgFA3JlcwJfMgQGcG10QW10CAUDcmVzAl8zBApwbXRBc3NldElkCAUDcmVzAl80BAVzdGF0ZQgFA3JlcwJfNQQNd2l0aGRyYXdTdGF0ZQkBF3dpdGhkcmF3QW5kUmViYWxhbmNlQWxsAgUIb3V0QW1BbXQFCG91dFByQW10BApjdXJyZW50S0xwCQEOY2FsY0N1cnJlbnRLTHADCQC2AgEAAAkAtgIBAAAJALYCAQAAAwkAAAIFCmN1cnJlbnRLTHAFCmN1cnJlbnRLTHAEFGJ1cm5MUEFzc2V0T25GYWN0b3J5CQD8BwQFD2ZhY3RvcnlDb250cmFjdAIEYnVybgkAzAgCBQZwbXRBbXQFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUKcG10QXNzZXRJZAUGcG10QW10BQNuaWwDCQAAAgUUYnVybkxQQXNzZXRPbkZhY3RvcnkFFGJ1cm5MUEFzc2V0T25GYWN0b3J5BA0kdDA1NDAyMzU0MTA0CQEScmVmcmVzaEtMcEludGVybmFsAwkBAS0BBQhvdXRBbUFtdAkBAS0BBQhvdXRQckFtdAAABBFyZWZyZXNoS0xwQWN0aW9ucwgFDSR0MDU0MDIzNTQxMDQCXzEECnVwZGF0ZWRLTHAIBQ0kdDA1NDAyMzU0MTA0Al8yBBFpc1VwZGF0ZWRLTHBWYWxpZAkBEnZhbGlkYXRlVXBkYXRlZEtMcAIFCmN1cnJlbnRLTHAFCnVwZGF0ZWRLTHADCQAAAgURaXNVcGRhdGVkS0xwVmFsaWQFEWlzVXBkYXRlZEtMcFZhbGlkCQDOCAIJAM4IAgUNd2l0aGRyYXdTdGF0ZQUFc3RhdGUFEXJlZnJlc2hLTHBBY3Rpb25zCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBCWdldE5vTGVzcwISbm9MZXNzVGhlbkFtdEFzc2V0FG5vTGVzc1RoZW5QcmljZUFzc2V0BANyZXMJAQljb21tb25HZXQBBQFpBAhvdXRBbUFtdAgFA3JlcwJfMQQIb3V0UHJBbXQIBQNyZXMCXzIEBnBtdEFtdAgFA3JlcwJfMwQKcG10QXNzZXRJZAgFA3JlcwJfNAQFc3RhdGUIBQNyZXMCXzUDCQBmAgUSbm9MZXNzVGhlbkFtdEFzc2V0BQhvdXRBbUFtdAkAAgEJAKwCAgkArAICCQCsAgICHG5vTGVzc1RoZW5BbXRBc3NldCBmYWlsZWQ6ICAJAKQDAQUIb3V0QW1BbXQCAyA8IAkApAMBBRJub0xlc3NUaGVuQW10QXNzZXQDCQBmAgUUbm9MZXNzVGhlblByaWNlQXNzZXQFCG91dFByQW10CQACAQkArAICCQCsAgIJAKwCAgIdbm9MZXNzVGhlblByaWNlQXNzZXQgZmFpbGVkOiAJAKQDAQUIb3V0UHJBbXQCAyA8IAkApAMBBRRub0xlc3NUaGVuUHJpY2VBc3NldAQNd2l0aGRyYXdTdGF0ZQkBF3dpdGhkcmF3QW5kUmViYWxhbmNlQWxsAgUIb3V0QW1BbXQFCG91dFByQW10BApjdXJyZW50S0xwCQEOY2FsY0N1cnJlbnRLTHADCQC2AgEAAAkAtgIBAAAJALYCAQAAAwkAAAIFCmN1cnJlbnRLTHAFCmN1cnJlbnRLTHAEFGJ1cm5MUEFzc2V0T25GYWN0b3J5CQD8BwQFD2ZhY3RvcnlDb250cmFjdAIEYnVybgkAzAgCBQZwbXRBbXQFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUKcG10QXNzZXRJZAUGcG10QW10BQNuaWwDCQAAAgUUYnVybkxQQXNzZXRPbkZhY3RvcnkFFGJ1cm5MUEFzc2V0T25GYWN0b3J5BA0kdDA1NTE5OTU1MjgwCQEScmVmcmVzaEtMcEludGVybmFsAwkBAS0BBQhvdXRBbUFtdAkBAS0BBQhvdXRQckFtdAAABBFyZWZyZXNoS0xwQWN0aW9ucwgFDSR0MDU1MTk5NTUyODACXzEECnVwZGF0ZWRLTHAIBQ0kdDA1NTE5OTU1MjgwAl8yBBFpc1VwZGF0ZWRLTHBWYWxpZAkBEnZhbGlkYXRlVXBkYXRlZEtMcAIFCmN1cnJlbnRLTHAFCnVwZGF0ZWRLTHADCQAAAgURaXNVcGRhdGVkS0xwVmFsaWQFEWlzVXBkYXRlZEtMcFZhbGlkCQDOCAIJAM4IAgUNd2l0aGRyYXdTdGF0ZQUFc3RhdGUFEXJlZnJlc2hLTHBBY3Rpb25zCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBDXVuc3Rha2VBbmRHZXQBBmFtb3VudAQNY2hlY2tQYXltZW50cwMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECGE5vIHBheW1lbnRzIGFyZSBleHBlY3RlZAYDCQAAAgUNY2hlY2tQYXltZW50cwUNY2hlY2tQYXltZW50cwQDY2ZnCQENZ2V0UG9vbENvbmZpZwAECWxwQXNzZXRJZAkA2QQBCQCRAwIFA2NmZwUQaWR4UG9vbExQQXNzZXRJZAQKY3VycmVudEtMcAkBDmNhbGNDdXJyZW50S0xwAwkAtgIBAAAJALYCAQAACQC2AgEAAAMJAAACBQpjdXJyZW50S0xwBQpjdXJyZW50S0xwBAp1bnN0YWtlSW52CQD8BwQFD3N0YWtpbmdDb250cmFjdAIHdW5zdGFrZQkAzAgCCQDYBAEFCWxwQXNzZXRJZAkAzAgCBQZhbW91bnQFA25pbAUDbmlsAwkAAAIFCnVuc3Rha2VJbnYFCnVuc3Rha2VJbnYEA3JlcwkBFGVzdGltYXRlR2V0T3BlcmF0aW9uBAkA2AQBCAUBaQ10cmFuc2FjdGlvbklkCQDYBAEFCWxwQXNzZXRJZAUGYW1vdW50CAUBaQZjYWxsZXIECG91dEFtQW10CAUDcmVzAl8xBAhvdXRQckFtdAgFA3JlcwJfMgQKcG9vbFN0YXR1cwkBDXBhcnNlSW50VmFsdWUBCAUDcmVzAl85BAVzdGF0ZQgFA3JlcwNfMTAEDXdpdGhkcmF3U3RhdGUJARd3aXRoZHJhd0FuZFJlYmFsYW5jZUFsbAIFCG91dEFtQW10BQhvdXRQckFtdAQPY2hlY2tQb29sU3RhdHVzAwMJARBpc0dsb2JhbFNodXRkb3duAAYJAAACBQpwb29sU3RhdHVzBQxQb29sU2h1dGRvd24JAAIBCQCsAgICLEdldCBvcGVyYXRpb24gaXMgYmxvY2tlZCBieSBhZG1pbi4gU3RhdHVzID0gCQCkAwEFCnBvb2xTdGF0dXMGAwkAAAIFD2NoZWNrUG9vbFN0YXR1cwUPY2hlY2tQb29sU3RhdHVzBBRidXJuTFBBc3NldE9uRmFjdG9yeQkA/AcEBQ9mYWN0b3J5Q29udHJhY3QCBGJ1cm4JAMwIAgUGYW1vdW50BQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFCWxwQXNzZXRJZAUGYW1vdW50BQNuaWwDCQAAAgUUYnVybkxQQXNzZXRPbkZhY3RvcnkFFGJ1cm5MUEFzc2V0T25GYWN0b3J5BA0kdDA1NjU1MjU2NjMzCQEScmVmcmVzaEtMcEludGVybmFsAwkBAS0BBQhvdXRBbUFtdAkBAS0BBQhvdXRQckFtdAAABBFyZWZyZXNoS0xwQWN0aW9ucwgFDSR0MDU2NTUyNTY2MzMCXzEECnVwZGF0ZWRLTHAIBQ0kdDA1NjU1MjU2NjMzAl8yBBFpc1VwZGF0ZWRLTHBWYWxpZAkBEnZhbGlkYXRlVXBkYXRlZEtMcAIFCmN1cnJlbnRLTHAFCnVwZGF0ZWRLTHADCQAAAgURaXNVcGRhdGVkS0xwVmFsaWQFEWlzVXBkYXRlZEtMcFZhbGlkCQDOCAIJAM4IAgUNd2l0aGRyYXdTdGF0ZQUFc3RhdGUFEXJlZnJlc2hLTHBBY3Rpb25zCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBE3Vuc3Rha2VBbmRHZXROb0xlc3MDDXVuc3Rha2VBbW91bnQVbm9MZXNzVGhlbkFtb3VudEFzc2V0FG5vTGVzc1RoZW5QcmljZUFzc2V0BA1pc0dldERpc2FibGVkAwkBEGlzR2xvYmFsU2h1dGRvd24ABgkAAAIFDWNmZ1Bvb2xTdGF0dXMFDFBvb2xTaHV0ZG93bgQGY2hlY2tzCQDMCAIDCQEBIQEFDWlzR2V0RGlzYWJsZWQGCQACAQIhZ2V0IG9wZXJhdGlvbiBpcyBibG9ja2VkIGJ5IGFkbWluCQDMCAIDCQAAAgkAkAMBCAUBaQhwYXltZW50cwAABgkAAgECGG5vIHBheW1lbnRzIGFyZSBleHBlY3RlZAUDbmlsAwkAAAIFBmNoZWNrcwUGY2hlY2tzBApjdXJyZW50S0xwCQEOY2FsY0N1cnJlbnRLTHADCQC2AgEAAAkAtgIBAAAJALYCAQAAAwkAAAIFCmN1cnJlbnRLTHAFCmN1cnJlbnRLTHAECnVuc3Rha2VJbnYJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Agd1bnN0YWtlCQDMCAIJANgEAQUMY2ZnTHBBc3NldElkCQDMCAIFDXVuc3Rha2VBbW91bnQFA25pbAUDbmlsAwkAAAIFCnVuc3Rha2VJbnYFCnVuc3Rha2VJbnYEA3JlcwkBFGVzdGltYXRlR2V0T3BlcmF0aW9uBAkA2AQBCAUBaQ10cmFuc2FjdGlvbklkCQDYBAEFDGNmZ0xwQXNzZXRJZAUNdW5zdGFrZUFtb3VudAgFAWkGY2FsbGVyBAhvdXRBbUFtdAgFA3JlcwJfMQQIb3V0UHJBbXQIBQNyZXMCXzIEBXN0YXRlCAUDcmVzA18xMAQNd2l0aGRyYXdTdGF0ZQkBF3dpdGhkcmF3QW5kUmViYWxhbmNlQWxsAgUIb3V0QW1BbXQFCG91dFByQW10BAxjaGVja0Ftb3VudHMJAMwIAgMJAGcCBQhvdXRBbUFtdAUVbm9MZXNzVGhlbkFtb3VudEFzc2V0BgkAAgEJALkJAgkAzAgCAixhbW91bnQgYXNzZXQgYW1vdW50IHRvIHJlY2VpdmUgaXMgbGVzcyB0aGFuIAkAzAgCCQCkAwEFFW5vTGVzc1RoZW5BbW91bnRBc3NldAUDbmlsAgAJAMwIAgMJAGcCBQhvdXRQckFtdAUUbm9MZXNzVGhlblByaWNlQXNzZXQGCQACAQkAuQkCCQDMCAICK3ByaWNlIGFzc2V0IGFtb3VudCB0byByZWNlaXZlIGlzIGxlc3MgdGhhbiAJAMwIAgkApAMBBRRub0xlc3NUaGVuUHJpY2VBc3NldAUDbmlsAgAFA25pbAMJAAACBQxjaGVja0Ftb3VudHMFDGNoZWNrQW1vdW50cwQUYnVybkxQQXNzZXRPbkZhY3RvcnkJAPwHBAUPZmFjdG9yeUNvbnRyYWN0AgRidXJuCQDMCAIFDXVuc3Rha2VBbW91bnQFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUMY2ZnTHBBc3NldElkBQ11bnN0YWtlQW1vdW50BQNuaWwDCQAAAgUUYnVybkxQQXNzZXRPbkZhY3RvcnkFFGJ1cm5MUEFzc2V0T25GYWN0b3J5BA0kdDA1ODA3NDU4MTU1CQEScmVmcmVzaEtMcEludGVybmFsAwkBAS0BBQhvdXRBbUFtdAkBAS0BBQhvdXRQckFtdAAABBFyZWZyZXNoS0xwQWN0aW9ucwgFDSR0MDU4MDc0NTgxNTUCXzEECnVwZGF0ZWRLTHAIBQ0kdDA1ODA3NDU4MTU1Al8yBBFpc1VwZGF0ZWRLTHBWYWxpZAkBEnZhbGlkYXRlVXBkYXRlZEtMcAIFCmN1cnJlbnRLTHAFCnVwZGF0ZWRLTHADCQAAAgURaXNVcGRhdGVkS0xwVmFsaWQFEWlzVXBkYXRlZEtMcFZhbGlkCQDOCAIJAM4IAgUNd2l0aGRyYXdTdGF0ZQUFc3RhdGUFEXJlZnJlc2hLTHBBY3Rpb25zCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBCGFjdGl2YXRlAgthbXRBc3NldFN0cg1wcmljZUFzc2V0U3RyAwkBAiE9AgkApQgBCAUBaQZjYWxsZXIJAKUIAQUPZmFjdG9yeUNvbnRyYWN0CQACAQIScGVybWlzc2lvbnMgZGVuaWVkCQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAmFhAAULYW10QXNzZXRTdHIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAnBhAAUNcHJpY2VBc3NldFN0cgUDbmlsAgdzdWNjZXNzAWkBCnJlZnJlc2hLTHAABBhsYXN0UmVmcmVzaGVkQmxvY2tIZWlnaHQJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUVa2V5S0xwUmVmcmVzaGVkSGVpZ2h0AAAEHWNoZWNrTGFzdFJlZnJlc2hlZEJsb2NrSGVpZ2h0AwkAZwIJAGUCBQZoZWlnaHQFGGxhc3RSZWZyZXNoZWRCbG9ja0hlaWdodAUPa0xwUmVmcmVzaERlbGF5BQR1bml0CQEIdGhyb3dFcnIBCQC5CQIJAMwIAgkApAMBBQ9rTHBSZWZyZXNoRGVsYXkJAMwIAgIvIGJsb2NrcyBoYXZlIG5vdCBwYXNzZWQgc2luY2UgdGhlIHByZXZpb3VzIGNhbGwFA25pbAIAAwkAAAIFHWNoZWNrTGFzdFJlZnJlc2hlZEJsb2NrSGVpZ2h0BR1jaGVja0xhc3RSZWZyZXNoZWRCbG9ja0hlaWdodAQDa0xwCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKgDAQkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzBQZrZXlLTHACATAJAQZmbXRFcnIBAgtpbnZhbGlkIGtMcAQNJHQwNTkzNTk1OTQyMwkBEnJlZnJlc2hLTHBJbnRlcm5hbAMAAAAAAAAEEGtMcFVwZGF0ZUFjdGlvbnMIBQ0kdDA1OTM1OTU5NDIzAl8xBAp1cGRhdGVkS0xwCAUNJHQwNTkzNTk1OTQyMwJfMgQHYWN0aW9ucwMJAQIhPQIFA2tMcAUKdXBkYXRlZEtMcAUQa0xwVXBkYXRlQWN0aW9ucwkBCHRocm93RXJyAQISbm90aGluZyB0byByZWZyZXNoCQCUCgIFB2FjdGlvbnMJAKYDAQUKdXBkYXRlZEtMcAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARxnZXRQb29sQ29uZmlnV3JhcHBlclJFQURPTkxZAAkAlAoCBQNuaWwJAQ1nZXRQb29sQ29uZmlnAAFpARxnZXRBY2NCYWxhbmNlV3JhcHBlclJFQURPTkxZAQdhc3NldElkCQCUCgIFA25pbAkBDWdldEFjY0JhbGFuY2UBBQdhc3NldElkAWkBGWNhbGNQcmljZXNXcmFwcGVyUkVBRE9OTFkDBWFtQW10BXByQW10BWxwQW10BAZwcmljZXMJAQpjYWxjUHJpY2VzAwUFYW1BbXQFBXByQW10BQVscEFtdAkAlAoCBQNuaWwJAMwIAgkApgMBCQCRAwIFBnByaWNlcwAACQDMCAIJAKYDAQkAkQMCBQZwcmljZXMAAQkAzAgCCQCmAwEJAJEDAgUGcHJpY2VzAAIFA25pbAFpARR0b1gxOFdyYXBwZXJSRUFET05MWQIHb3JpZ1ZhbA1vcmlnU2NhbGVNdWx0CQCUCgIFA25pbAkApgMBCQEFdG9YMTgCBQdvcmlnVmFsBQ1vcmlnU2NhbGVNdWx0AWkBFmZyb21YMThXcmFwcGVyUkVBRE9OTFkCA3ZhbA9yZXN1bHRTY2FsZU11bHQJAJQKAgUDbmlsCQEHZnJvbVgxOAIJAKcDAQUDdmFsBQ9yZXN1bHRTY2FsZU11bHQBaQEeY2FsY1ByaWNlQmlnSW50V3JhcHBlclJFQURPTkxZAghwckFtdFgxOAhhbUFtdFgxOAkAlAoCBQNuaWwJAKYDAQkBD2NhbGNQcmljZUJpZ0ludAIJAKcDAQUIcHJBbXRYMTgJAKcDAQUIYW1BbXRYMTgBaQEjZXN0aW1hdGVQdXRPcGVyYXRpb25XcmFwcGVyUkVBRE9OTFkJBnR4SWQ1OBFzbGlwcGFnZVRvbGVyYW5jZQxpbkFtQXNzZXRBbXQLaW5BbUFzc2V0SWQMaW5QckFzc2V0QW10C2luUHJBc3NldElkC3VzZXJBZGRyZXNzCmlzRXZhbHVhdGUGZW1pdExwCQCUCgIFA25pbAkBFGVzdGltYXRlUHV0T3BlcmF0aW9uCQUGdHhJZDU4BRFzbGlwcGFnZVRvbGVyYW5jZQUMaW5BbUFzc2V0QW10BQtpbkFtQXNzZXRJZAUMaW5QckFzc2V0QW10BQtpblByQXNzZXRJZAULdXNlckFkZHJlc3MFCmlzRXZhbHVhdGUFBmVtaXRMcAFpASNlc3RpbWF0ZUdldE9wZXJhdGlvbldyYXBwZXJSRUFET05MWQQGdHhJZDU4CnBtdEFzc2V0SWQIcG10THBBbXQLdXNlckFkZHJlc3MEA3JlcwkBFGVzdGltYXRlR2V0T3BlcmF0aW9uBAUGdHhJZDU4BQpwbXRBc3NldElkBQhwbXRMcEFtdAkBEUBleHRyTmF0aXZlKDEwNjIpAQULdXNlckFkZHJlc3MJAJQKAgUDbmlsCQCcCgoIBQNyZXMCXzEIBQNyZXMCXzIIBQNyZXMCXzMIBQNyZXMCXzQIBQNyZXMCXzUIBQNyZXMCXzYIBQNyZXMCXzcJAKYDAQgFA3JlcwJfOAgFA3JlcwJfOQgFA3JlcwNfMTABaQENc3RhdHNSRUFET05MWQAEA2NmZwkBDWdldFBvb2xDb25maWcABAlscEFzc2V0SWQJANkEAQkAkQMCBQNjZmcFEGlkeFBvb2xMUEFzc2V0SWQECmFtdEFzc2V0SWQJAJEDAgUDY2ZnBQ1pZHhBbXRBc3NldElkBAxwcmljZUFzc2V0SWQJAJEDAgUDY2ZnBQ9pZHhQcmljZUFzc2V0SWQEC2lBbXRBc3NldElkCQCRAwIFA2NmZwUOaWR4SUFtdEFzc2V0SWQEDWlQcmljZUFzc2V0SWQJAJEDAgUDY2ZnBRBpZHhJUHJpY2VBc3NldElkBAthbXRBc3NldERjbQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFA2NmZwUOaWR4QW10QXNzZXREY20EDXByaWNlQXNzZXREY20JAQ1wYXJzZUludFZhbHVlAQkAkQMCBQNjZmcFEGlkeFByaWNlQXNzZXREY20EDXBvb2xMUEJhbGFuY2UICQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQUJbHBBc3NldElkCQCsAgIJAKwCAgIGQXNzZXQgCQDYBAEFCWxwQXNzZXRJZAIOIGRvZXNuJ3QgZXhpc3QIcXVhbnRpdHkEEmFjY0FtdEFzc2V0QmFsYW5jZQkBDWdldEFjY0JhbGFuY2UBBQphbXRBc3NldElkBBRhY2NQcmljZUFzc2V0QmFsYW5jZQkBDWdldEFjY0JhbGFuY2UBBQxwcmljZUFzc2V0SWQECnByaWNlc0xpc3QDCQAAAgUNcG9vbExQQmFsYW5jZQAACQDMCAIFCnplcm9CaWdJbnQJAMwIAgUKemVyb0JpZ0ludAkAzAgCBQp6ZXJvQmlnSW50BQNuaWwJAQpjYWxjUHJpY2VzAwUSYWNjQW10QXNzZXRCYWxhbmNlBRRhY2NQcmljZUFzc2V0QmFsYW5jZQUNcG9vbExQQmFsYW5jZQQIY3VyUHJpY2UAAAQPbHBBbXRBc3NldFNoYXJlCQEHZnJvbVgxOAIJAJEDAgUKcHJpY2VzTGlzdAABBQZzY2FsZTgEEWxwUHJpY2VBc3NldFNoYXJlCQEHZnJvbVgxOAIJAJEDAgUKcHJpY2VzTGlzdAACBQZzY2FsZTgECnBvb2xXZWlnaHQJAQV2YWx1ZQEJAJoIAgUPZmFjdG9yeUNvbnRyYWN0CQENa2V5UG9vbFdlaWdodAEJAKUIAQUEdGhpcwkAlAoCBQNuaWwJALkJAgkAzAgCAg4lZCVkJWQlZCVkJWQlZAkAzAgCCQCkAwEFEmFjY0FtdEFzc2V0QmFsYW5jZQkAzAgCCQCkAwEFFGFjY1ByaWNlQXNzZXRCYWxhbmNlCQDMCAIJAKQDAQUNcG9vbExQQmFsYW5jZQkAzAgCCQCkAwEFCGN1clByaWNlCQDMCAIJAKQDAQUPbHBBbXRBc3NldFNoYXJlCQDMCAIJAKQDAQURbHBQcmljZUFzc2V0U2hhcmUJAMwIAgkApAMBBQpwb29sV2VpZ2h0BQNuaWwFA1NFUAFpASBldmFsdWF0ZVB1dEJ5QW1vdW50QXNzZXRSRUFET05MWQEMaW5BbUFzc2V0QW10BANjZmcJAQ1nZXRQb29sQ29uZmlnAAQJbHBBc3NldElkCQDZBAEJAJEDAgUDY2ZnBRBpZHhQb29sTFBBc3NldElkBAxhbUFzc2V0SWRTdHIJAJEDAgUDY2ZnBQ1pZHhBbXRBc3NldElkBAlhbUFzc2V0SWQJANkEAQUMYW1Bc3NldElkU3RyBAxwckFzc2V0SWRTdHIJAJEDAgUDY2ZnBQ9pZHhQcmljZUFzc2V0SWQECXByQXNzZXRJZAkA2QQBBQxwckFzc2V0SWRTdHIEC2FtdEFzc2V0RGNtCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUDY2ZnBQ5pZHhBbXRBc3NldERjbQQNcHJpY2VBc3NldERjbQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFA2NmZwUQaWR4UHJpY2VBc3NldERjbQQKcG9vbFN0YXR1cwkAkQMCBQNjZmcFDWlkeFBvb2xTdGF0dXMEDXBvb2xMUEJhbGFuY2UICQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQUJbHBBc3NldElkCQCsAgIJAKwCAgIGQXNzZXQgCQDYBAEFCWxwQXNzZXRJZAIOIGRvZXNuJ3QgZXhpc3QIcXVhbnRpdHkEEmFjY0FtdEFzc2V0QmFsYW5jZQkBDWdldEFjY0JhbGFuY2UBBQxhbUFzc2V0SWRTdHIEFGFjY1ByaWNlQXNzZXRCYWxhbmNlCQENZ2V0QWNjQmFsYW5jZQEFDHByQXNzZXRJZFN0cgQOYW10QXNzZXRBbXRYMTgJAQV0b1gxOAIFEmFjY0FtdEFzc2V0QmFsYW5jZQULYW10QXNzZXREY20EEHByaWNlQXNzZXRBbXRYMTgJAQV0b1gxOAIFFGFjY1ByaWNlQXNzZXRCYWxhbmNlBQ1wcmljZUFzc2V0RGNtBAtjdXJQcmljZVgxOAMJAAACBQ1wb29sTFBCYWxhbmNlAAAFCnplcm9CaWdJbnQJAQ9jYWxjUHJpY2VCaWdJbnQCBRBwcmljZUFzc2V0QW10WDE4BQ5hbXRBc3NldEFtdFgxOAQPaW5BbUFzc2V0QW10WDE4CQEFdG9YMTgCBQxpbkFtQXNzZXRBbXQFC2FtdEFzc2V0RGNtBA9pblByQXNzZXRBbXRYMTgJALwCAwUPaW5BbUFzc2V0QW10WDE4BQtjdXJQcmljZVgxOAUHc2NhbGUxOAQMaW5QckFzc2V0QW10CQEHZnJvbVgxOAIFD2luUHJBc3NldEFtdFgxOAUNcHJpY2VBc3NldERjbQQGZXN0UHV0CQEUZXN0aW1hdGVQdXRPcGVyYXRpb24JAgAAoMIeBQxpbkFtQXNzZXRBbXQFCWFtQXNzZXRJZAUMaW5QckFzc2V0QW10BQlwckFzc2V0SWQCAAYHBAljYWxjTHBBbXQIBQZlc3RQdXQCXzEEDGN1clByaWNlQ2FsYwgFBmVzdFB1dAJfMwQJYW1CYWxhbmNlCAUGZXN0UHV0Al80BAlwckJhbGFuY2UIBQZlc3RQdXQCXzUECmxwRW1pc3Npb24IBQZlc3RQdXQCXzYJAJQKAgUDbmlsCQC5CQIJAMwIAgIQJWQlZCVkJWQlZCVkJWQlZAkAzAgCCQCkAwEFCWNhbGNMcEFtdAkAzAgCCQCkAwEJAQdmcm9tWDE4AgULY3VyUHJpY2VYMTgFBnNjYWxlOAkAzAgCCQCkAwEFCWFtQmFsYW5jZQkAzAgCCQCkAwEFCXByQmFsYW5jZQkAzAgCCQCkAwEFCmxwRW1pc3Npb24JAMwIAgUKcG9vbFN0YXR1cwkAzAgCCQCkAwEFDGluQW1Bc3NldEFtdAkAzAgCCQCkAwEFDGluUHJBc3NldEFtdAUDbmlsBQNTRVABaQEfZXZhbHVhdGVQdXRCeVByaWNlQXNzZXRSRUFET05MWQEMaW5QckFzc2V0QW10BANjZmcJAQ1nZXRQb29sQ29uZmlnAAQJbHBBc3NldElkCQDZBAEJAJEDAgUDY2ZnBRBpZHhQb29sTFBBc3NldElkBAxhbUFzc2V0SWRTdHIJAJEDAgUDY2ZnBQ1pZHhBbXRBc3NldElkBAlhbUFzc2V0SWQJANkEAQUMYW1Bc3NldElkU3RyBAxwckFzc2V0SWRTdHIJAJEDAgUDY2ZnBQ9pZHhQcmljZUFzc2V0SWQECXByQXNzZXRJZAkA2QQBBQxwckFzc2V0SWRTdHIEC2FtdEFzc2V0RGNtCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUDY2ZnBQ5pZHhBbXRBc3NldERjbQQNcHJpY2VBc3NldERjbQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFA2NmZwUQaWR4UHJpY2VBc3NldERjbQQKcG9vbFN0YXR1cwkAkQMCBQNjZmcFDWlkeFBvb2xTdGF0dXMEDXBvb2xMUEJhbGFuY2UICQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQUJbHBBc3NldElkCQCsAgIJAKwCAgIGQXNzZXQgCQDYBAEFCWxwQXNzZXRJZAIOIGRvZXNuJ3QgZXhpc3QIcXVhbnRpdHkEDGFtQmFsYW5jZVJhdwkBDWdldEFjY0JhbGFuY2UBBQxhbUFzc2V0SWRTdHIEDHByQmFsYW5jZVJhdwkBDWdldEFjY0JhbGFuY2UBBQxwckFzc2V0SWRTdHIED2FtQmFsYW5jZVJhd1gxOAkBBXRvWDE4AgUMYW1CYWxhbmNlUmF3BQthbXRBc3NldERjbQQPcHJCYWxhbmNlUmF3WDE4CQEFdG9YMTgCBQxwckJhbGFuY2VSYXcFDXByaWNlQXNzZXREY20EC2N1clByaWNlWDE4AwkAAAIFDXBvb2xMUEJhbGFuY2UAAAUKemVyb0JpZ0ludAkBD2NhbGNQcmljZUJpZ0ludAIFD3ByQmFsYW5jZVJhd1gxOAUPYW1CYWxhbmNlUmF3WDE4BA9pblByQXNzZXRBbXRYMTgJAQV0b1gxOAIFDGluUHJBc3NldEFtdAUNcHJpY2VBc3NldERjbQQPaW5BbUFzc2V0QW10WDE4CQC8AgMFD2luUHJBc3NldEFtdFgxOAUHc2NhbGUxOAULY3VyUHJpY2VYMTgEDGluQW1Bc3NldEFtdAkBB2Zyb21YMTgCBQ9pbkFtQXNzZXRBbXRYMTgFC2FtdEFzc2V0RGNtBAZlc3RQdXQJARRlc3RpbWF0ZVB1dE9wZXJhdGlvbgkCAACgwh4FDGluQW1Bc3NldEFtdAUJYW1Bc3NldElkBQxpblByQXNzZXRBbXQFCXByQXNzZXRJZAIABgcECWNhbGNMcEFtdAgFBmVzdFB1dAJfMQQMY3VyUHJpY2VDYWxjCAUGZXN0UHV0Al8zBAlhbUJhbGFuY2UIBQZlc3RQdXQCXzQECXByQmFsYW5jZQgFBmVzdFB1dAJfNQQKbHBFbWlzc2lvbggFBmVzdFB1dAJfNgkAlAoCBQNuaWwJALkJAgkAzAgCAhAlZCVkJWQlZCVkJWQlZCVkCQDMCAIJAKQDAQUJY2FsY0xwQW10CQDMCAIJAKQDAQkBB2Zyb21YMTgCBQtjdXJQcmljZVgxOAUGc2NhbGU4CQDMCAIJAKQDAQUJYW1CYWxhbmNlCQDMCAIJAKQDAQUJcHJCYWxhbmNlCQDMCAIJAKQDAQUKbHBFbWlzc2lvbgkAzAgCBQpwb29sU3RhdHVzCQDMCAIJAKQDAQUMaW5BbUFzc2V0QW10CQDMCAIJAKQDAQUMaW5QckFzc2V0QW10BQNuaWwFA1NFUAFpARNldmFsdWF0ZUdldFJFQURPTkxZAhBwYXltZW50THBBc3NldElkDHBheW1lbnRMcEFtdAQDcmVzCQEUZXN0aW1hdGVHZXRPcGVyYXRpb24EAgAFEHBheW1lbnRMcEFzc2V0SWQFDHBheW1lbnRMcEFtdAUEdGhpcwQIb3V0QW1BbXQIBQNyZXMCXzEECG91dFByQW10CAUDcmVzAl8yBAlhbUJhbGFuY2UIBQNyZXMCXzUECXByQmFsYW5jZQgFA3JlcwJfNgQKbHBFbWlzc2lvbggFA3JlcwJfNwQIY3VyUHJpY2UIBQNyZXMCXzgECnBvb2xTdGF0dXMJAQ1wYXJzZUludFZhbHVlAQgFA3JlcwJfOQkAlAoCBQNuaWwJALkJAgkAzAgCAg4lZCVkJWQlZCVkJWQlZAkAzAgCCQCkAwEFCG91dEFtQW10CQDMCAIJAKQDAQUIb3V0UHJBbXQJAMwIAgkApAMBBQlhbUJhbGFuY2UJAMwIAgkApAMBBQlwckJhbGFuY2UJAMwIAgkApAMBBQpscEVtaXNzaW9uCQDMCAIJAKYDAQUIY3VyUHJpY2UJAMwIAgkApAMBBQpwb29sU3RhdHVzBQNuaWwFA1NFUAECdHgBBnZlcmlmeQAED3RhcmdldFB1YmxpY0tleQQHJG1hdGNoMAkBFm1hbmFnZXJQdWJsaWNLZXlPclVuaXQAAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEAnBrBQckbWF0Y2gwBQJwawMJAAECBQckbWF0Y2gwAgRVbml0CAUCdHgPc2VuZGVyUHVibGljS2V5CQACAQILTWF0Y2ggZXJyb3IEByRtYXRjaDAFAnR4AwkAAQIFByRtYXRjaDACBU9yZGVyBAVvcmRlcgUHJG1hdGNoMAQKbWF0Y2hlclB1YgkBE2dldE1hdGNoZXJQdWJPckZhaWwABA0kdDA2ODA4NTY4MjAyAwkBE3NraXBPcmRlclZhbGlkYXRpb24ACQCUCgIGAgAJARt2YWxpZGF0ZU1hdGNoZXJPcmRlckFsbG93ZWQBBQVvcmRlcgQKb3JkZXJWYWxpZAgFDSR0MDY4MDg1NjgyMDICXzEEDm9yZGVyVmFsaWRJbmZvCAUNJHQwNjgwODU2ODIwMgJfMgQLc2VuZGVyVmFsaWQJAPQDAwgFBW9yZGVyCWJvZHlCeXRlcwkAkQMCCAUFb3JkZXIGcHJvb2ZzAAAIBQVvcmRlcg9zZW5kZXJQdWJsaWNLZXkEDG1hdGNoZXJWYWxpZAkA9AMDCAUFb3JkZXIJYm9keUJ5dGVzCQCRAwIIBQVvcmRlcgZwcm9vZnMAAQUKbWF0Y2hlclB1YgMDAwUKb3JkZXJWYWxpZAULc2VuZGVyVmFsaWQHBQxtYXRjaGVyVmFsaWQHBgkBD3Rocm93T3JkZXJFcnJvcgQFCm9yZGVyVmFsaWQFDm9yZGVyVmFsaWRJbmZvBQtzZW5kZXJWYWxpZAUMbWF0Y2hlclZhbGlkAwkAAQIFByRtYXRjaDACFFNldFNjcmlwdFRyYW5zYWN0aW9uBAFzBQckbWF0Y2gwAwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAUPdGFyZ2V0UHVibGljS2V5BgQHbmV3SGFzaAkA9gMBCQEFdmFsdWUBCAUBcwZzY3JpcHQEC2FsbG93ZWRIYXNoCQDbBAEJAQV2YWx1ZQEJAJ0IAgUPZmFjdG9yeUNvbnRyYWN0CQEWa2V5QWxsb3dlZExwU2NyaXB0SGFzaAAEC2N1cnJlbnRIYXNoCQDxBwEFBHRoaXMDCQAAAgULYWxsb3dlZEhhc2gFB25ld0hhc2gJAQIhPQIFC2N1cnJlbnRIYXNoBQduZXdIYXNoBwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAUPdGFyZ2V0UHVibGljS2V55ILv3A==", "height": 2550011, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: E55pebjKENxbPi7q4LKoGgR5TdNaFg7kkBwB5ggDxLC8 Next: none Diff:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let a = "__"
4+let a = 8
55
6-let b = 8
6+let b = 100000000
77
8-let c = "WAVES"
8+let c = toBigInt(100000000)
99
10-let d = 1000000000000000000
10+let d = toBigInt(1000000000000000000)
1111
12-let e = toBigInt(d)
12+let e = toBigInt(0)
1313
14-func f (g) = makeString(["lp_staking_pools.ride:", g], " ")
14+let f = toBigInt(0)
15+
16+let g = toBigInt(1)
17+
18+let h = toBigInt(2)
19+
20+let i = "WAVES"
21+
22+let j = "__"
23+
24+let k = 1
25+
26+let l = 2
27+
28+let m = 3
29+
30+let n = 4
31+
32+let o = 1
33+
34+let p = 2
35+
36+let q = 3
37+
38+let r = 4
39+
40+let s = 5
41+
42+let t = 6
43+
44+let u = 7
45+
46+let v = 8
47+
48+let w = 9
49+
50+let x = 10
51+
52+let y = 1
53+
54+let z = 2
55+
56+let A = 3
57+
58+let B = 1
59+
60+let C = 7
61+
62+func D (E,F) = fraction(toBigInt(E), d, toBigInt(F))
1563
1664
17-func h (g) = throw(f(g))
65+func G (E,F) = fraction(E, d, F)
1866
1967
20-func i (j,k) = f(makeString(["mandatory ", toString(j), ".", k, " is not defined"], ""))
68+func H (I,J) = toInt(fraction(I, toBigInt(J), d))
2169
2270
23-func l (j,k) = valueOrErrorMessage(getString(j, k), i(j, k))
71+func K (I,J,L) = toInt(fraction(I, toBigInt(J), d, L))
2472
2573
26-func m (j,k) = valueOrErrorMessage(getInteger(j, k), i(j, k))
74+func M (N,O,P) = fraction(N, O, P)
2775
2876
29-func n (o) = if ((o == c))
30- then unit
31- else fromBase58String(o)
77+func Q (I) = if ((0 > I))
78+ then -(I)
79+ else I
3280
3381
34-func p (o) = if ((o == unit))
35- then c
36- else toBase58String(value(o))
82+func R (I) = if ((e > I))
83+ then -(I)
84+ else I
3785
3886
39-func q (r) = if ((r >= 0))
40- then r
41- else h("value should be positive")
87+func S () = "%s__swapContract"
4288
4389
44-func s () = makeString(["%s", "factoryContract"], a)
90+func T () = "%s__factoryContract"
4591
4692
47-func t () = makeString(["%s", "lpStakingContract"], a)
93+func U () = "%s__managerPublicKey"
4894
4995
50-func u () = makeString(["%s", "stakingContract"], a)
96+func V () = "%s__pendingManagerPublicKey"
5197
5298
53-func v () = makeString(["%s", "boostingContract"], a)
99+func W () = "%s%s__price__last"
54100
55101
56-func w () = makeString(["%s", "swapContract"], a)
102+func X (Y,Z) = makeString(["%s%s%d%d__price__history", toString(Y), toString(Z)], j)
57103
58104
59-func x () = makeString(["%s", "assetsStoreContract"], a)
105+func aa (ab,ac) = ((("%s%s%s__P__" + ab) + "__") + ac)
60106
61107
62-func y () = makeString(["%s", "usdtAssetId"], a)
108+func ad (ab,ac) = ((("%s%s%s__G__" + ab) + "__") + ac)
63109
64110
65-func z () = makeString(["%s", "wxAssetId"], a)
111+func ae () = "%s__amountAsset"
66112
67113
68-func A () = makeString(["%s", "shutdown"], a)
114+func af () = "%s__priceAsset"
69115
70116
71-func B () = makeString(["%s", "minDelay"], a)
117+let ag = "%s__fee"
118+
119+let ah = fraction(10, b, 10000)
120+
121+let ai = valueOrElse(getInteger(this, ag), ah)
122+
123+let aj = makeString(["%s", "kLp"], j)
124+
125+let ak = makeString(["%s", "kLpRefreshedHeight"], j)
126+
127+let al = makeString(["%s", "refreshKLpDelay"], j)
128+
129+let am = 30
130+
131+let an = valueOrElse(getInteger(this, al), am)
132+
133+func ao (ap) = makeString(["%s%s", "stakedBalance", ap], j)
72134
73135
74-func C () = makeString(["%s", "lockFraction"], a)
136+func aq (ap) = makeString(["%s%s", "shareAssetBalance", ap], j)
75137
76138
77-func D (E) = makeString(["%s%s", p(E), "shareAssetId"], a)
139+func ar (ap) = valueOrElse(getInteger(this, ao(ap)), 0)
78140
79141
80-func F (G) = makeString(["%s%s", p(G), "baseAssetId"], a)
142+func as (ap) = valueOrElse(getInteger(this, aq(ap)), 0)
81143
82144
83-func H (E) = makeString(["%s%s", p(E), "period"], a)
145+func at () = "%s__factoryConfig"
84146
85147
86-func I (E,J) = makeString(["%s%s%d", p(E), "periodStartHeight", toString(J)], a)
148+func au () = "%s%s__matcher__publicKey"
87149
88150
89-func K (E) = makeString(["%s%s", p(E), "baseAssetAmountToConvert"], a)
151+func av (aw) = (("%s%s%s__" + aw) + "__mappings__poolContract2LpAsset")
90152
91153
92-func L (E) = makeString(["%s%s", p(E), "shareAssetAmountToConvert"], a)
154+func ax (ay,az) = (((("%d%d%s__" + ay) + "__") + az) + "__config")
93155
94156
95-func M (E,N) = makeString(["%s%s%s", p(E), toString(N), "baseAssetAmountToConvert"], a)
157+func aA (aB) = ("%s%s%s__mappings__baseAsset2internalId__" + aB)
96158
97159
98-func O (E,N) = makeString(["%s%s%s%s", p(E), toString(N), "baseAssetAmountToConvert", "period"], a)
160+func aC () = "%s__shutdown"
99161
100162
101-func P (E,N) = makeString(["%s%s%s", p(E), toString(N), "shareAssetAmountToConvert"], a)
163+func aD (aE) = ("%s%s__poolWeight__" + aE)
102164
103165
104-func Q (E,N) = makeString(["%s%s%s%s", p(E), toString(N), "shareAssetAmountToConvert", "period"], a)
166+func aF () = "%s__allowedLpScriptHash"
105167
106168
107-func R (E,J) = makeString(["%s%s%d", p(E), "price", toString(J)], a)
169+let aG = "%s__feeCollectorAddress"
170+
171+func aH (aI) = ("%s%s__skipOrderValidation__" + aI)
108172
109173
110-func S (E) = makeString(["%s%s%s%d%d", p(E), "price", "history", toString(lastBlock.height), toString(lastBlock.timestamp)], a)
174+func aJ (aK,aL,aM,aN) = throw((((((((("order validation failed: orderValid=" + toString(aK)) + " (") + aL) + ")") + " senderValid=") + toString(aM)) + " matcherValid=") + toString(aN)))
111175
112176
113-func T (E,J) = makeString(["%s%s%d%s", p(E), "price", toString(J), "put"], a)
177+func aO (aP,aQ) = valueOrErrorMessage(getString(aP, aQ), makeString(["mandatory ", toString(aP), ".", aQ, " is not defined"], ""))
114178
115179
116-func U (E) = makeString(["%s%s%s%s%d%d", p(E), "price", "history", "put", toString(lastBlock.height), toString(lastBlock.timestamp)], a)
180+func aR (aP,aQ) = valueOrErrorMessage(getInteger(aP, aQ), makeString(["mandatory ", toString(aP), ".", aQ, " is not defined"], ""))
117181
118182
119-func V (E,J) = makeString(["%s%s%d%s", p(E), "price", toString(J), "get"], a)
183+func aS (aT) = throw(makeString(["lp.ride:", aT], " "))
120184
121185
122-func W (E) = makeString(["%s%s%s%s%d%d", p(E), "price", "history", "get", toString(lastBlock.height), toString(lastBlock.timestamp)], a)
186+func aU (aT) = makeString(["lp.ride:", aT], " ")
123187
124188
125-func X (E,Y,J,N,Z) = makeString(["%s%s%s%s", "history", toUtf8String(value(E)), Y, toString(N), toBase58String(Z), toString(height)], a)
189+let aV = addressFromStringValue(aO(this, T()))
190+
191+let aW = addressFromStringValue(aO(aV, aG))
192+
193+let aX = {
194+ let aY = invoke(aV, "getInFeeREADONLY", [toString(this)], nil)
195+ if ($isInstanceOf(aY, "Int"))
196+ then aY
197+ else throw(($getType(aY) + " couldn't be cast to Int"))
198+ }
199+
200+let aZ = {
201+ let aY = invoke(aV, "getOutFeeREADONLY", [toString(this)], nil)
202+ if ($isInstanceOf(aY, "Int"))
203+ then aY
204+ else throw(($getType(aY) + " couldn't be cast to Int"))
205+ }
206+
207+func ba () = valueOrElse(getBoolean(aV, aC()), false)
126208
127209
128-func aa () = "%s__managerPublicKey"
210+func bb () = fromBase58String(aO(aV, au()))
129211
130212
131-func ab () = "%s__pendingManagerPublicKey"
132-
133-
134-func ac () = {
135- let ad = getString(aa())
136- if ($isInstanceOf(ad, "String"))
137- then {
138- let ae = ad
139- fromBase58String(ae)
140- }
141- else if ($isInstanceOf(ad, "Unit"))
142- then unit
143- else throw("Match error")
213+func bc () = {
214+ let bd = aO(this, ae())
215+ let be = aO(this, af())
216+ let az = aR(aV, aA(be))
217+ let ay = aR(aV, aA(bd))
218+ split(aO(aV, ax(toString(ay), toString(az))), j)
144219 }
145220
146221
147-func af () = {
148- let ad = getString(ab())
149- if ($isInstanceOf(ad, "String"))
150- then {
151- let ae = ad
152- fromBase58String(ae)
153- }
154- else if ($isInstanceOf(ad, "Unit"))
155- then unit
156- else throw("Match error")
222+func bf (bg) = if ((bg == i))
223+ then unit
224+ else fromBase58String(bg)
225+
226+
227+func bh (bg) = if ((bg == unit))
228+ then i
229+ else toBase58String(value(bg))
230+
231+
232+func bi (bj) = $Tuple7(addressFromStringValue(bj[o]), parseIntValue(bj[p]), fromBase58String(bj[q]), bf(bj[r]), bf(bj[s]), parseIntValue(bj[t]), parseIntValue(bj[u]))
233+
234+
235+let bk = bi(bc())
236+
237+let bl = bk
238+
239+let bm = bl._1
240+
241+let bn = bl._2
242+
243+let bo = bl._3
244+
245+let bp = bl._4
246+
247+let bq = bl._5
248+
249+let br = bl._6
250+
251+let bs = bl._7
252+
253+func bt () = split(aO(aV, at()), j)
254+
255+
256+let bu = valueOrErrorMessage(addressFromString(bt()[B]), "incorrect staking address")
257+
258+let bv = valueOrErrorMessage(addressFromString(bt()[C]), "incorrect staking address")
259+
260+func bw (bx,by,bz,bA,bB,bC,bD,bE,bF,bG) = makeString(["%d%d%d%d%d%d%d%d%d%d", toString(bx), toString(by), toString(bz), toString(bA), toString(bB), toString(bC), toString(bD), toString(bE), toString(bF), toString(bG)], j)
261+
262+
263+func bH (bI,bJ,bK,bA,bD,bE) = makeString(["%d%d%d%d%d%d", toString(bI), toString(bJ), toString(bK), toString(bA), toString(bD), toString(bE)], j)
264+
265+
266+func bL (ap) = {
267+ let bM = if ((ap == "WAVES"))
268+ then wavesBalance(this).available
269+ else assetBalance(this, fromBase58String(ap))
270+ let bN = ((bM + ar(ap)) - as(ap))
271+ max([0, bN])
157272 }
158273
159274
160-let ag = throw("Permission denied")
161-
162-func ah (ai) = if ((ai.caller == this))
163- then true
164- else ag
275+func bO (bP,bQ) = fraction(bP, d, bQ)
165276
166277
167-func aj (ai) = {
168- let ad = ac()
169- if ($isInstanceOf(ad, "ByteVector"))
278+func bR (bP,bQ,L) = fraction(bP, d, bQ, L)
279+
280+
281+func bS (bT) = {
282+ let bU = invoke(bT, "getRate", nil, nil)
283+ if ((bU == bU))
170284 then {
171- let ak = ad
172- if ((ai.callerPublicKey == ak))
173- then true
174- else ag
285+ let bV = bU
286+ if ($isInstanceOf(bV, "Int"))
287+ then {
288+ let bW = bV
289+ bW
290+ }
291+ else aS("proxy.getRate() unexpected value")
175292 }
176- else if ($isInstanceOf(ad, "Unit"))
177- then ah(ai)
178- else throw("Match error")
293+ else throw("Strict value is not equal to itself.")
179294 }
180295
181296
182-let al = valueOrElse(getBoolean(A()), false)
183-
184-func am (ai) = if (if (!(al))
185- then true
186- else aj(ai))
187- then true
188- else throw("operation is disabled")
189-
190-
191-let an = addressFromStringValue(l(this, s()))
192-
193-let ao = addressFromStringValue(l(this, t()))
194-
195-let ap = addressFromStringValue(l(this, u()))
196-
197-let aq = addressFromStringValue(l(this, v()))
198-
199-let ar = addressFromStringValue(l(this, w()))
200-
201-let as = addressFromStringValue(l(this, x()))
202-
203-let at = n(l(this, y()))
204-
205-let au = n(l(this, z()))
206-
207-let av = 1440
208-
209-let aw = valueOrElse(getInteger(this, B()), av)
210-
211-let ax = 100000000
212-
213-let ay = fraction(1, ax, 2)
214-
215-let az = valueOrElse(getInteger(this, C()), ay)
216-
217-func aA (aB) = {
218- let aC = p(aB)
219- let aD = p(at)
220- let aE = {
221- let aF = invoke(an, "poolInfoREADONLY", [aC, aD], nil)
222- if ($isInstanceOf(aF, "(Address, ByteVector)"))
223- then aF
224- else unit
225- }
226- aE
227- }
228-
229-
230-func aG (aH,G) = {
231- let aI = valueOrErrorMessage(assetInfo(G), "failed to get share asset info")
232- let aJ = aI.quantity
233- let aK = q(valueOrErrorMessage({
234- let aF = invoke(ap, "stakedByUserREADONLY", [p(aH), toString(this)], nil)
235- if ($isInstanceOf(aF, "Int"))
236- then aF
237- else unit
238- }, f("invalid stakedByUserREADONLY result")))
239- let aL = if ((aJ == 0))
240- then e
241- else fraction(toBigInt(aK), e, toBigInt(aJ), FLOOR)
242- aL
243- }
244-
245-
246-@Callable(ai)
247-func setManager (aM) = {
248- let aN = aj(ai)
249- if ((aN == aN))
297+func bX (ap,bY,bZ,bT) = {
298+ let ca = ar(ap)
299+ if ((ca == ca))
250300 then {
251- let aO = fromBase58String(aM)
252- if ((aO == aO))
253- then [StringEntry(ab(), aM)]
301+ let cb = as(bZ)
302+ if ((cb == cb))
303+ then {
304+ let cc = bf(ap)
305+ if ((bY > 0))
306+ then {
307+ let cd = invoke(bT, "deposit", nil, [AttachedPayment(cc, bY)])
308+ if ((cd == cd))
309+ then {
310+ let bV = cd
311+ if ($isInstanceOf(bV, "Int"))
312+ then {
313+ let ce = bV
314+ let cf = (ca + bY)
315+ let cg = (cb + ce)
316+[IntegerEntry(ao(ap), cf), IntegerEntry(aq(bZ), cg)]
317+ }
318+ else nil
319+ }
320+ else throw("Strict value is not equal to itself.")
321+ }
322+ else nil
323+ }
254324 else throw("Strict value is not equal to itself.")
255325 }
256326 else throw("Strict value is not equal to itself.")
257327 }
258328
259329
260-
261-@Callable(ai)
262-func confirmManager () = {
263- let aP = af()
264- let aQ = if (isDefined(aP))
265- then true
266- else h("no pending manager")
267- if ((aQ == aQ))
330+func ch (ap,bY,bZ,bT,ci,cj) = {
331+ let ca = ar(ap)
332+ if ((ca == ca))
268333 then {
269- let aR = if ((ai.callerPublicKey == value(aP)))
270- then true
271- else h("you are not pending manager")
272- if ((aR == aR))
273- then [StringEntry(aa(), toBase58String(value(aP))), DeleteEntry(ab())]
334+ let cb = as(bZ)
335+ if ((cb == cb))
336+ then {
337+ let ck = bS(bT)
338+ if ((ck == ck))
339+ then {
340+ let cl = fraction(ci, ca, cb)
341+ let cm = bf(bZ)
342+ let cn = fraction(ci, bY, cl)
343+ let co = fraction(ci, bY, ck)
344+ let cp = max([0, (cn - co)])
345+ if ((co > 0))
346+ then {
347+ let cq = invoke(bT, "withdraw", nil, [AttachedPayment(cm, co)])
348+ if ((cq == cq))
349+ then {
350+ let bV = cq
351+ if ($isInstanceOf(bV, "Int"))
352+ then {
353+ let cr = bV
354+ let cf = (ca - cr)
355+ let cg = ((cb - co) - cp)
356+[IntegerEntry(ao(ap), cf), IntegerEntry(aq(bZ), cg), ScriptTransfer(cj, cp, bf(bZ))]
357+ }
358+ else nil
359+ }
360+ else throw("Strict value is not equal to itself.")
361+ }
362+ else nil
363+ }
364+ else throw("Strict value is not equal to itself.")
365+ }
274366 else throw("Strict value is not equal to itself.")
275367 }
276368 else throw("Strict value is not equal to itself.")
277369 }
278370
279371
372+func cs (ap) = {
373+ let bV = invoke(aV, "getPoolLeaseConfigREADONLY", [toString(this), ap], nil)
374+ if ($isInstanceOf(bV, "(Boolean, Int, Int, String, String, Int, String)"))
375+ then {
376+ let ct = bV
377+ ct
378+ }
379+ else aS((("[" + ap) + "] getLeaseProxyConfig() error"))
380+ }
280381
281-@Callable(ai)
282-func emit (aS,aT) = {
283- let aN = ah(ai)
284- if ((aN == aN))
382+
383+func cu (cv,ap,bZ,cw,bT,ci,cj) = {
384+ let ca = ar(ap)
385+ if ((ca == ca))
285386 then {
286- let aU = true
287- $Tuple2([Reissue(aS, aT, aU)], aT)
387+ let cb = as(bZ)
388+ if ((cb == cb))
389+ then {
390+ let cx = max([0, (bL(ap) - cw)])
391+ let cy = fraction(cv, cx, 100)
392+ let cz = (ca - cy)
393+ if ((cz == 0))
394+ then nil
395+ else if ((0 > cz))
396+ then {
397+ let cA = -(cz)
398+ bX(ap, cA, bZ, bT)
399+ }
400+ else {
401+ let cB = cz
402+ ch(ap, cB, bZ, bT, ci, cj)
403+ }
404+ }
405+ else throw("Strict value is not equal to itself.")
288406 }
289407 else throw("Strict value is not equal to itself.")
290408 }
291409
292410
411+func cC (ap) = {
412+ let cD = cs(ap)
413+ let cE = cD._1
414+ let cF = cD._2
415+ let cw = cD._3
416+ let cG = cD._4
417+ let cH = cD._5
418+ let ci = cD._6
419+ let cI = cD._7
420+ if (cE)
421+ then cu(cF, ap, cH, cw, addressFromStringValue(cG), ci, addressFromStringValue(cI))
422+ else nil
423+ }
293424
294-@Callable(ai)
295-func burn (aS,aT) = {
296- let aN = ah(ai)
297- if ((aN == aN))
298- then $Tuple2([Burn(aS, aT)], aT)
425+
426+func cJ (ap,cK) = {
427+ let cL = cs(ap)
428+ let cE = cL._1
429+ let cF = cL._2
430+ let cw = cL._3
431+ let cG = cL._4
432+ let cH = cL._5
433+ let ci = cL._6
434+ let cI = cL._7
435+ if (cE)
436+ then {
437+ let cM = max([0, ((bL(ap) - cK) - cw)])
438+ if ((cM == cM))
439+ then {
440+ let cf = fraction(cF, cM, 100)
441+ if ((cf == cf))
442+ then {
443+ let cN = (ar(ap) - cf)
444+ if ((cN == cN))
445+ then if ((0 > cN))
446+ then bX(ap, -(cN), cH, addressFromStringValue(cG))
447+ else ch(ap, cN, cH, addressFromStringValue(cG), ci, addressFromStringValue(cI))
448+ else throw("Strict value is not equal to itself.")
449+ }
450+ else throw("Strict value is not equal to itself.")
451+ }
452+ else throw("Strict value is not equal to itself.")
453+ }
454+ else nil
455+ }
456+
457+
458+func cO (cP,cQ) = {
459+ let cR = cJ(aO(this, ae()), cP)
460+ let cS = cJ(aO(this, af()), cQ)
461+ (cR ++ cS)
462+ }
463+
464+
465+func cT (cU,cV,cW,cX) = {
466+ let cY = D(cW, cU)
467+ let cZ = D(cX, cV)
468+ bO(cZ, cY)
469+ }
470+
471+
472+func da (cW,cX,db) = {
473+ let dc = bc()
474+ let dd = parseIntValue(dc[t])
475+ let de = parseIntValue(dc[u])
476+ let df = cT(dd, de, cW, cX)
477+ let bQ = D(cW, dd)
478+ let bP = D(cX, de)
479+ let dg = D(db, b)
480+ let dh = bO(bQ, dg)
481+ let di = bO(bP, dg)
482+[df, dh, di]
483+ }
484+
485+
486+func dj (cW,cX,db) = {
487+ let dk = da(cW, cX, db)
488+[H(dk[0], b), H(dk[1], b), H(dk[2], b)]
489+ }
490+
491+
492+func dl (dm,dn,do,ab) = {
493+ let dc = bc()
494+ let dp = dc[q]
495+ let dq = dc[r]
496+ let dr = dc[s]
497+ let cU = parseIntValue(dc[t])
498+ let cV = parseIntValue(dc[u])
499+ let ds = dc[p]
500+ let dt = valueOrErrorMessage(assetInfo(fromBase58String(dp)), (("Asset " + dp) + " doesn't exist")).quantity
501+ if ((dp != dn))
502+ then throw("Invalid asset passed.")
503+ else {
504+ let du = bL(dq)
505+ let dv = D(du, cU)
506+ let dw = bL(dr)
507+ let dx = D(dw, cV)
508+ let dy = bO(dx, dv)
509+ let dz = H(dy, b)
510+ let dA = D(do, b)
511+ let dB = D(dt, b)
512+ let dC = fraction(dv, dA, dB)
513+ let dD = fraction(dx, dA, dB)
514+ let dE = K(dC, cU, FLOOR)
515+ let dF = K(dD, cV, FLOOR)
516+ let dG = if ((dm == ""))
517+ then nil
518+ else [ScriptTransfer(ab, dE, if ((dq == "WAVES"))
519+ then unit
520+ else fromBase58String(dq)), ScriptTransfer(ab, dF, if ((dr == "WAVES"))
521+ then unit
522+ else fromBase58String(dr)), StringEntry(ad(toString(ab), dm), bH(dE, dF, do, dz, height, lastBlock.timestamp)), IntegerEntry(W(), dz), IntegerEntry(X(height, lastBlock.timestamp), dz)]
523+ $Tuple10(dE, dF, dq, dr, du, dw, dt, dy, ds, dG)
524+ }
525+ }
526+
527+
528+func dH (dm,dI,dJ,dK,dL,dM,ab,dN,dO) = {
529+ let dc = bc()
530+ let dp = fromBase58String(dc[q])
531+ let dP = dc[r]
532+ let dQ = dc[s]
533+ let dR = dc[v]
534+ let dS = dc[w]
535+ let dd = parseIntValue(dc[t])
536+ let de = parseIntValue(dc[u])
537+ let ds = dc[p]
538+ let dt = valueOrErrorMessage(assetInfo(dp), (("Asset " + toBase58String(dp)) + " doesn't exist")).quantity
539+ let dT = toBase58String(valueOrElse(dK, fromBase58String("WAVES")))
540+ let dU = toBase58String(valueOrElse(dM, fromBase58String("WAVES")))
541+ if (if ((dP != dT))
542+ then true
543+ else (dQ != dU))
544+ then throw("Invalid amt or price asset passed.")
545+ else {
546+ let du = if (dN)
547+ then bL(dP)
548+ else (bL(dP) - dJ)
549+ let dw = if (dN)
550+ then bL(dQ)
551+ else (bL(dQ) - dL)
552+ let dV = D(dJ, dd)
553+ let dW = D(dL, de)
554+ let dX = bO(dW, dV)
555+ let dv = D(du, dd)
556+ let dx = D(dw, de)
557+ let dY = if ((dt == 0))
558+ then {
559+ let dy = e
560+ let dZ = e
561+ let dg = pow((dV * dW), 0, toBigInt(5), 1, 0, DOWN)
562+ $Tuple5(H(dg, b), H(dV, dd), H(dW, de), bO((dx + dW), (dv + dV)), dZ)
563+ }
564+ else {
565+ let dy = bO(dx, dv)
566+ let dZ = fraction(R((dy - dX)), d, dy)
567+ let ea = D(dI, b)
568+ if (if ((dy != e))
569+ then (dZ > ea)
570+ else false)
571+ then throw(((("Price slippage " + toString(dZ)) + " exceeded the passed limit of ") + toString(ea)))
572+ else {
573+ let dB = D(dt, b)
574+ let eb = fraction(dV, bR(dx, dv, CEILING), d, CEILING)
575+ let ec = fraction(dW, d, bR(dx, dv, FLOOR), CEILING)
576+ let ed = if ((eb > dW))
577+ then $Tuple2(ec, dW)
578+ else $Tuple2(dV, eb)
579+ let ee = ed._1
580+ let ef = ed._2
581+ let dg = fraction(dB, ef, dx, FLOOR)
582+ $Tuple5(K(dg, b, FLOOR), K(ee, dd, CEILING), K(ef, de, CEILING), dy, dZ)
583+ }
584+ }
585+ let eg = dY._1
586+ let eh = dY._2
587+ let ei = dY._3
588+ let dz = H(dY._4, b)
589+ let ej = H(dY._5, b)
590+ if ((0 >= eg))
591+ then throw("Invalid calculations. LP calculated is less than zero.")
592+ else {
593+ let ek = if (!(dO))
594+ then 0
595+ else eg
596+ let el = (dJ - eh)
597+ let em = (dL - ei)
598+ let en = [IntegerEntry(W(), dz), IntegerEntry(X(height, lastBlock.timestamp), dz), StringEntry(aa(ab, dm), bw(eh, ei, ek, dz, dI, ej, height, lastBlock.timestamp, el, em))]
599+ $Tuple13(eg, ek, dz, du, dw, dt, dp, ds, en, el, em, dK, dM)
600+ }
601+ }
602+ }
603+
604+
605+func eo (ep,eq,dt) = {
606+ let er = G(ep, toBigInt(br))
607+ let es = G(eq, toBigInt(bs))
608+ let et = fraction(pow((er * es), 0, toBigInt(5), 1, 18, DOWN), g, dt)
609+ if ((dt == f))
610+ then f
611+ else et
612+ }
613+
614+
615+func eu (ev,ew,ex) = {
616+ let ey = (toBigInt(bL(bh(bp))) - ev)
617+ let ez = (toBigInt(bL(bh(bq))) - ew)
618+ let eA = (toBigInt(value(assetInfo(bo)).quantity) - ex)
619+ let eB = eo(ey, ez, eA)
620+ eB
621+ }
622+
623+
624+func eC (eD,eE,ex) = {
625+ let ey = (bL(bh(bp)) + eD)
626+ let ez = (bL(bh(bq)) + eE)
627+ let eA = (value(assetInfo(bo)).quantity + ex)
628+ let et = eo(toBigInt(ey), toBigInt(ez), toBigInt(eA))
629+ let eF = [IntegerEntry(ak, height), StringEntry(aj, toString(et))]
630+ $Tuple2(eF, et)
631+ }
632+
633+
634+func eG () = valueOrElse(getBoolean(aV, aH(toString(this))), false)
635+
636+
637+func eH (eI,et) = if ((et >= eI))
638+ then true
639+ else aS(makeString(["updated KLp lower than current KLp", toString(eI), toString(et)], " "))
640+
641+
642+func eJ (eK) = {
643+ let ey = bL(bh(bp))
644+ let ez = bL(bh(bq))
645+ let eL = eK.amount
646+ let eM = fraction(eK.amount, eK.price, b, FLOOR)
647+ let eN = if ((eK.orderType == Buy))
648+ then $Tuple2(eL, -(eM))
649+ else $Tuple2(-(eL), eM)
650+ let eD = eN._1
651+ let eE = eN._2
652+ if (if (if (ba())
653+ then true
654+ else (bn == m))
655+ then true
656+ else (bn == n))
657+ then throw("Exchange operations disabled")
658+ else if (if ((eK.assetPair.amountAsset != bp))
659+ then true
660+ else (eK.assetPair.priceAsset != bq))
661+ then throw("Wrong order assets.")
662+ else {
663+ let eO = valueOrErrorMessage(parseBigInt(valueOrElse(getString(this, aj), "0")), aU("invalid kLp"))
664+ let eP = eC(eD, eE, 0)
665+ let eQ = eP._1
666+ let eR = eP._2
667+ let eS = (eR >= eO)
668+ let eT = makeString(["kLp=", toString(eO), " kLpNew=", toString(eR), " amountAssetBalance=", toString(ey), " priceAssetBalance=", toString(ez), " amountAssetBalanceDelta=", toString(eD), " priceAssetBalanceDelta=", toString(eE), " height=", toString(height)], "")
669+ $Tuple2(eS, eT)
670+ }
671+ }
672+
673+
674+func eU (eV) = if ((size(eV.payments) != 1))
675+ then throw("exactly 1 payment is expected")
676+ else {
677+ let eW = value(eV.payments[0])
678+ let dn = value(eW.assetId)
679+ let eX = eW.amount
680+ let dY = dl(toBase58String(eV.transactionId), toBase58String(dn), eX, eV.caller)
681+ let dE = dY._1
682+ let dF = dY._2
683+ let ds = parseIntValue(dY._9)
684+ let dG = dY._10
685+ if (if (ba())
686+ then true
687+ else (ds == n))
688+ then throw(("Get operation is blocked by admin. Status = " + toString(ds)))
689+ else $Tuple5(dE, dF, eX, dn, dG)
690+ }
691+
692+
693+func eY (eV,dI,dO) = if ((size(eV.payments) != 2))
694+ then throw("exactly 2 payments are expected")
695+ else {
696+ let eZ = value(eV.payments[0])
697+ let fa = value(eV.payments[1])
698+ let fb = dH(toBase58String(eV.transactionId), dI, eZ.amount, eZ.assetId, fa.amount, fa.assetId, toString(eV.caller), false, dO)
699+ let ds = parseIntValue(fb._8)
700+ if (if (if (ba())
701+ then true
702+ else (ds == l))
703+ then true
704+ else (ds == n))
705+ then throw(("Put operation is blocked by admin. Status = " + toString(ds)))
706+ else fb
707+ }
708+
709+
710+func fc (bY) = {
711+ let fd = invoke(aV, "emit", [bY], nil)
712+ if ((fd == fd))
713+ then {
714+ let fe = {
715+ let bV = fd
716+ if ($isInstanceOf(bV, "Address"))
717+ then {
718+ let ff = bV
719+ invoke(ff, "emit", [bY], nil)
720+ }
721+ else unit
722+ }
723+ if ((fe == fe))
724+ then bY
725+ else throw("Strict value is not equal to itself.")
726+ }
727+ else throw("Strict value is not equal to itself.")
728+ }
729+
730+
731+func fg (bY,ai) = {
732+ let fh = if ((ai == 0))
733+ then 0
734+ else fraction(bY, ai, b)
735+ $Tuple2((bY - fh), fh)
736+ }
737+
738+
739+func fi (fj,fk,ab,ac) = {
740+ let fl = (ac == unit)
741+ let fm = bL(bh(bp))
742+ let fn = bL(bh(bq))
743+ let fo = if ((fk == bp))
744+ then true
745+ else if ((fk == bq))
746+ then false
747+ else aS("invalid asset")
748+ let fp = if (fl)
749+ then $Tuple2(fm, fn)
750+ else if (fo)
751+ then $Tuple2((fm - fj), fn)
752+ else $Tuple2(fm, (fn - fj))
753+ let fq = fp._1
754+ let fr = fp._2
755+ let fs = if (fo)
756+ then $Tuple2(fj, 0)
757+ else $Tuple2(0, fj)
758+ let ft = fs._1
759+ let fu = fs._2
760+ let eL = fg(ft, aX)._1
761+ let eM = fg(fu, aX)._1
762+ let fv = fg(fj, aX)
763+ let fw = fv._1
764+ let fh = fv._2
765+ let fx = (fq + eL)
766+ let fy = (fr + eM)
767+ let fz = bO(D(fy, bs), D(fx, br))
768+ let fA = H(fz, b)
769+ let fB = if (fo)
770+ then fq
771+ else fr
772+ let fC = toBigInt(fB)
773+ let fD = toBigInt(valueOrErrorMessage(assetInfo(bo), (("asset " + toBase58String(bo)) + " doesn't exist")).quantity)
774+ let fE = if ((fD > f))
775+ then true
776+ else aS("initial deposit requires all coins")
777+ if ((fE == fE))
778+ then {
779+ let fF = toBigInt(fw)
780+ let fG = max([0, toInt(((fD * (sqrtBigInt((d + ((fF * d) / fC)), 18, 18, DOWN) - d)) / d))])
781+ let en = if (fl)
782+ then nil
783+ else [IntegerEntry(W(), fA), IntegerEntry(X(height, lastBlock.timestamp), fA), StringEntry(aa(toString(value(ab)), toBase58String(value(ac))), bw(ft, fu, fG, fA, 0, 0, height, lastBlock.timestamp, 0, 0))]
784+ let fH = bO(D(fr, bs), D(fq, br))
785+ let fI = H(fH, b)
786+ let fJ = {
787+ let fK = if (fo)
788+ then $Tuple2(ft, fq)
789+ else $Tuple2(fu, fr)
790+ let bY = fK._1
791+ let fL = fK._2
792+ let fM = toInt(fraction(fD, toBigInt((bY / 2)), toBigInt(fL)))
793+ fraction((fG - fM), b, fM)
794+ }
795+ $Tuple5(fG, en, fh, fJ, fo)
796+ }
797+ else throw("Strict value is not equal to itself.")
798+ }
799+
800+
801+func fN (fO,fw,fk,ab,ac) = {
802+ let fl = (ac == unit)
803+ let dc = bc()
804+ let dd = parseIntValue(dc[t])
805+ let de = parseIntValue(dc[u])
806+ let fP = [if ((fk == bo))
807+ then true
808+ else aS("invalid lp asset")]
809+ if ((fP == fP))
810+ then {
811+ let fQ = if ((fO == bp))
812+ then true
813+ else if ((fO == bq))
814+ then false
815+ else aS("invalid asset")
816+ let fR = if (fQ)
817+ then toBigInt(bL(bh(bp)))
818+ else toBigInt(bL(bh(bq)))
819+ let fS = if (fQ)
820+ then dd
821+ else de
822+ let fT = bL(bh(bp))
823+ let fU = bL(bh(bq))
824+ let fV = if (fQ)
825+ then fT
826+ else fU
827+ let fW = toBigInt(fV)
828+ let fD = toBigInt(valueOrErrorMessage(assetInfo(bo), (("asset " + toBase58String(bo)) + " doesn't exist")).quantity)
829+ let fX = toBigInt(fw)
830+ let fY = max([0, toInt(((fR * (d - pow((d - ((fX * d) / fD)), 18, h, 0, 18, DOWN))) / d))])
831+ let fZ = fg(fY, aZ)
832+ let ga = fZ._1
833+ let fh = fZ._2
834+ let gb = if (fQ)
835+ then $Tuple4(ga, 0, (fT - fY), fU)
836+ else $Tuple4(0, ga, fT, (fU - fY))
837+ let gc = gb._1
838+ let gd = gb._2
839+ let ge = gb._3
840+ let gf = gb._4
841+ let fz = bO(D(gf, bs), D(ge, br))
842+ let fA = H(fz, b)
843+ let en = if (fl)
844+ then nil
845+ else [StringEntry(ad(toString(value(ab)), toBase58String(value(ac))), bH(gc, gd, fw, fA, height, lastBlock.timestamp)), IntegerEntry(W(), fA), IntegerEntry(X(height, lastBlock.timestamp), fA)]
846+ let fH = bO(D(fU, bs), D(fT, br))
847+ let fI = H(fH, b)
848+ let fJ = {
849+ let gg = (toInt(fraction(fR, fX, fD)) * 2)
850+ fraction((ga - gg), b, gg)
851+ }
852+ $Tuple5(ga, en, fh, fJ, fQ)
853+ }
854+ else throw("Strict value is not equal to itself.")
855+ }
856+
857+
858+func gh () = {
859+ let bV = getString(U())
860+ if ($isInstanceOf(bV, "String"))
861+ then {
862+ let gi = bV
863+ fromBase58String(gi)
864+ }
865+ else if ($isInstanceOf(bV, "Unit"))
866+ then unit
867+ else throw("Match error")
868+ }
869+
870+
871+func gj () = {
872+ let bV = getString(V())
873+ if ($isInstanceOf(bV, "String"))
874+ then {
875+ let gi = bV
876+ fromBase58String(gi)
877+ }
878+ else if ($isInstanceOf(bV, "Unit"))
879+ then unit
880+ else throw("Match error")
881+ }
882+
883+
884+func gk (eV) = {
885+ let bV = gh()
886+ if ($isInstanceOf(bV, "ByteVector"))
887+ then {
888+ let gl = bV
889+ (eV.callerPublicKey == gl)
890+ }
891+ else if ($isInstanceOf(bV, "Unit"))
892+ then (eV.caller == this)
893+ else throw("Match error")
894+ }
895+
896+
897+func gm (eV) = {
898+ let gn = throw("Permission denied")
899+ let bV = gh()
900+ if ($isInstanceOf(bV, "ByteVector"))
901+ then {
902+ let gl = bV
903+ if ((eV.callerPublicKey == gl))
904+ then true
905+ else gn
906+ }
907+ else if ($isInstanceOf(bV, "Unit"))
908+ then if ((eV.caller == this))
909+ then true
910+ else gn
911+ else throw("Match error")
912+ }
913+
914+
915+@Callable(eV)
916+func rebalance () = (cC(aO(this, ae())) ++ cC(aO(this, af())))
917+
918+
919+
920+@Callable(eV)
921+func calculateAmountOutForSwapREADONLY (go,gp,gq) = {
922+ let gr = if ((gp == false))
923+ then {
924+ let gs = aO(this, af())
925+ let gt = aO(this, ae())
926+ $Tuple2(gs, gt)
927+ }
928+ else {
929+ let gs = aO(this, ae())
930+ let gt = aO(this, af())
931+ $Tuple2(gs, gt)
932+ }
933+ let gs = gr._1
934+ let gt = gr._2
935+ let gu = bL(gt)
936+ let gv = bL(gs)
937+ let gw = fraction(gv, go, (gu + go))
938+ let gx = (toBigInt(gu) * toBigInt(gv))
939+ let gy = (((toBigInt(bL(gt)) + toBigInt(go)) + toBigInt(gq)) * (toBigInt(bL(gs)) - toBigInt(gw)))
940+ let gz = if ((gy >= gx))
941+ then true
942+ else throw("new K is fewer error")
943+ if ((gz == gz))
944+ then $Tuple2(nil, gw)
299945 else throw("Strict value is not equal to itself.")
300946 }
301947
302948
303949
304-@Callable(ai)
305-func create (aV,aW,aX,aY,aZ) = {
306- let ba = "STAKING_LP"
307- let E = n(aV)
308- let bb = [aj(ai), if (isDefined(aA(E)))
950+@Callable(eV)
951+func calculateAmountOutForSwapAndSendTokens (go,gp,gA,gB,gq) = {
952+ let gC = {
953+ let aY = invoke(aV, "getSwapContractREADONLY", nil, nil)
954+ if ($isInstanceOf(aY, "String"))
955+ then aY
956+ else throw(($getType(aY) + " couldn't be cast to String"))
957+ }
958+ let fP = [if ((value(eV.payments[0]).amount >= go))
309959 then true
310- else h("invalid base asset")]
311- if ((bb == bb))
960+ else aS("Wrong amount"), if ((eV.caller == addressFromStringValue(gC)))
961+ then true
962+ else aS("Permission denied")]
963+ if ((fP == fP))
312964 then {
313- let bc = [IntegerEntry(H(E), 0)]
314- if ((aW == ""))
965+ let eW = value(eV.payments[0])
966+ let gt = bh(eW.assetId)
967+ let gs = if ((gp == false))
968+ then aO(this, af())
969+ else aO(this, ae())
970+ let gu = (bL(gt) - value(eV.payments[0]).amount)
971+ let gv = bL(gs)
972+ let gw = fraction(gv, go, (gu + go))
973+ let gx = (toBigInt(gu) * toBigInt(gv))
974+ let gy = ((toBigInt(bL(gt)) + toBigInt(gq)) * (toBigInt(bL(gs)) - toBigInt(gw)))
975+ let gz = if ((gy >= gx))
976+ then true
977+ else throw("new K is fewer error")
978+ if ((gz == gz))
315979 then {
316- let bd = 1
317- let be = Issue(aX, aY, bd, b, true)
318- let bf = calculateAssetId(be)
319- let bg = Burn(bf, bd)
320- let bh = toBase58String(bf)
321- let bi = invoke(as, "createOrUpdate", [bh, aZ, false], nil)
322- if ((bi == bi))
980+ let gD = if ((gw >= gA))
981+ then true
982+ else throw("Exchange result is fewer coins than expected")
983+ if ((gD == gD))
323984 then {
324- let bj = invoke(as, "addLabel", [bh, ba], nil)
325- if ((bj == bj))
326- then $Tuple2((bc ++ [be, bg, StringEntry(D(E), bh), StringEntry(F(bf), aV)]), bh)
985+ let gE = cC(gt)
986+ if ((gE == gE))
987+ then {
988+ let gF = cJ(gs, gw)
989+ if ((gF == gF))
990+ then $Tuple2(((gF ++ gE) ++ [ScriptTransfer(addressFromStringValue(gB), gw, bf(gs))]), gw)
991+ else throw("Strict value is not equal to itself.")
992+ }
327993 else throw("Strict value is not equal to itself.")
328994 }
329995 else throw("Strict value is not equal to itself.")
330- }
331- else {
332- let G = fromBase58String(aW)
333- let aI = valueOrErrorMessage(assetInfo(G), f("invalid share asset id"))
334- let bk = if ((aI.issuer == ao))
335- then true
336- else h("invalid share asset id issuer")
337- if ((bk == bk))
338- then $Tuple2((bc ++ [StringEntry(D(E), aW), StringEntry(F(G), aV)]), aW)
339- else throw("Strict value is not equal to itself.")
340- }
341- }
342- else throw("Strict value is not equal to itself.")
343- }
344-
345-
346-
347-@Callable(ai)
348-func put () = {
349- let bl = if ((size(ai.payments) == 1))
350- then ai.payments[0]
351- else h("exactly 1 payment is expected")
352- let E = bl.assetId
353- let N = ai.caller
354- let bb = [am(ai), if (isDefined(getString(D(E))))
355- then true
356- else h("invalid asset")]
357- if ((bb == bb))
358- then {
359- let bm = valueOrErrorMessage(aA(E), f("invalid asset"))
360- let bn = bm._1
361- let aH = bm._2
362- let J = value(getInteger(H(E)))
363- let bo = getInteger(O(E, N))
364- let bp = if ((bo == unit))
365- then unit
366- else {
367- let bq = value(bo)
368- if ((bq == J))
369- then unit
370- else invoke(this, "claimShareAsset", [p(E), toString(N)], nil)
371- }
372- if ((bp == bp))
373- then {
374- let br = valueOrElse(getInteger(K(E)), 0)
375- let bs = valueOrElse(parseInt(split(value(getString(M(E, N))), a)[1]), 0)
376- $Tuple2([IntegerEntry(K(E), (br + bl.amount)), StringEntry(M(E, N), makeString(["%d%d", toString((bs + bl.amount)), toString(lastBlock.timestamp)], a)), IntegerEntry(O(E, N), J), StringEntry(X(E, "put", J, N, ai.transactionId), makeString(["%d%d%d", toString(bl.amount), toString(lastBlock.timestamp), toString(bs)], a))], unit)
377996 }
378997 else throw("Strict value is not equal to itself.")
379998 }
3821001
3831002
3841003
385-@Callable(ai)
386-func claimShareAsset (aV,bt) = {
387- let bb = [am(ai)]
388- if ((bb == bb))
1004+@Callable(eV)
1005+func setManager (gG) = {
1006+ let gH = gm(eV)
1007+ if ((gH == gH))
3891008 then {
390- let N = if ((bt == ""))
391- then ai.caller
392- else {
393- let aN = ah(ai)
394- if ((aN == aN))
395- then valueOrErrorMessage(addressFromString(bt), f("invalid user address"))
396- else throw("Strict value is not equal to itself.")
397- }
398- if ((N == N))
1009+ let gI = fromBase58String(gG)
1010+ if ((gI == gI))
1011+ then [StringEntry(V(), gG)]
1012+ else throw("Strict value is not equal to itself.")
1013+ }
1014+ else throw("Strict value is not equal to itself.")
1015+ }
1016+
1017+
1018+
1019+@Callable(eV)
1020+func confirmManager () = {
1021+ let gJ = gj()
1022+ let gK = if (isDefined(gJ))
1023+ then true
1024+ else throw("No pending manager")
1025+ if ((gK == gK))
1026+ then {
1027+ let gL = if ((eV.callerPublicKey == value(gJ)))
1028+ then true
1029+ else throw("You are not pending manager")
1030+ if ((gL == gL))
1031+ then [StringEntry(U(), toBase58String(value(gJ))), DeleteEntry(V())]
1032+ else throw("Strict value is not equal to itself.")
1033+ }
1034+ else throw("Strict value is not equal to itself.")
1035+ }
1036+
1037+
1038+
1039+@Callable(eV)
1040+func put (dI,gM) = if ((0 > dI))
1041+ then throw("Invalid slippageTolerance passed")
1042+ else {
1043+ let fb = eY(eV, dI, true)
1044+ let ek = fb._2
1045+ let dp = fb._7
1046+ let dG = fb._9
1047+ let el = fb._10
1048+ let em = fb._11
1049+ let gN = fb._12
1050+ let gO = fb._13
1051+ let eZ = toBigInt(value(eV.payments[0]).amount)
1052+ let fa = toBigInt(value(eV.payments[1]).amount)
1053+ let eB = eu(eZ, fa, toBigInt(0))
1054+ if ((eB == eB))
1055+ then {
1056+ let fd = invoke(aV, "emit", [ek], nil)
1057+ if ((fd == fd))
1058+ then {
1059+ let fe = {
1060+ let bV = fd
1061+ if ($isInstanceOf(bV, "Address"))
1062+ then {
1063+ let ff = bV
1064+ invoke(ff, "emit", [ek], nil)
1065+ }
1066+ else unit
1067+ }
1068+ if ((fe == fe))
1069+ then {
1070+ let gP = if ((el > 0))
1071+ then invoke(bv, "put", nil, [AttachedPayment(gN, el)])
1072+ else nil
1073+ if ((gP == gP))
1074+ then {
1075+ let gQ = if ((em > 0))
1076+ then invoke(bv, "put", nil, [AttachedPayment(gO, em)])
1077+ else nil
1078+ if ((gQ == gQ))
1079+ then {
1080+ let gR = if (gM)
1081+ then {
1082+ let gS = invoke(bu, "stake", nil, [AttachedPayment(dp, ek)])
1083+ if ((gS == gS))
1084+ then nil
1085+ else throw("Strict value is not equal to itself.")
1086+ }
1087+ else [ScriptTransfer(eV.caller, ek, dp)]
1088+ let gT = eC(0, 0, 0)
1089+ if ((gT == gT))
1090+ then {
1091+ let et = gT._2
1092+ let gU = gT._1
1093+ let gV = eH(eB, et)
1094+ if ((gV == gV))
1095+ then {
1096+ let gW = invoke(this, "rebalance", nil, nil)
1097+ if ((gW == gW))
1098+ then ((dG ++ gR) ++ gU)
1099+ else throw("Strict value is not equal to itself.")
1100+ }
1101+ else throw("Strict value is not equal to itself.")
1102+ }
1103+ else throw("Strict value is not equal to itself.")
1104+ }
1105+ else throw("Strict value is not equal to itself.")
1106+ }
1107+ else throw("Strict value is not equal to itself.")
1108+ }
1109+ else throw("Strict value is not equal to itself.")
1110+ }
1111+ else throw("Strict value is not equal to itself.")
1112+ }
1113+ else throw("Strict value is not equal to itself.")
1114+ }
1115+
1116+
1117+
1118+@Callable(eV)
1119+func putForFree (gX) = if ((0 > gX))
1120+ then throw("Invalid value passed")
1121+ else {
1122+ let fb = eY(eV, gX, false)
1123+ let dG = fb._9
1124+ let eZ = toBigInt(value(eV.payments[0]).amount)
1125+ let fa = toBigInt(value(eV.payments[1]).amount)
1126+ let eB = eu(eZ, fa, toBigInt(0))
1127+ if ((eB == eB))
1128+ then {
1129+ let gY = eC(0, 0, 0)
1130+ let gU = gY._1
1131+ let et = gY._2
1132+ let gV = eH(eB, et)
1133+ if ((gV == gV))
1134+ then (dG ++ gU)
1135+ else throw("Strict value is not equal to itself.")
1136+ }
1137+ else throw("Strict value is not equal to itself.")
1138+ }
1139+
1140+
1141+
1142+@Callable(eV)
1143+func putOneTkn (gZ,ha) = {
1144+ let hb = {
1145+ let aY = invoke(aV, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
1146+ if ($isInstanceOf(aY, "Boolean"))
1147+ then aY
1148+ else throw(($getType(aY) + " couldn't be cast to Boolean"))
1149+ }
1150+ let hc = if (if (if (ba())
1151+ then true
1152+ else (bn == l))
1153+ then true
1154+ else (bn == n))
1155+ then true
1156+ else hb
1157+ let fP = [if (if (!(hc))
1158+ then true
1159+ else gk(eV))
1160+ then true
1161+ else aS("put operation is blocked by admin"), if ((size(eV.payments) == 1))
1162+ then true
1163+ else aS("exactly 1 payment are expected")]
1164+ if ((fP == fP))
1165+ then {
1166+ let hd = eV.payments[0]
1167+ let fk = hd.assetId
1168+ let fj = hd.amount
1169+ let eB = if ((fk == bp))
1170+ then eu(toBigInt(fj), toBigInt(0), toBigInt(0))
1171+ else if ((fk == bq))
1172+ then eu(toBigInt(0), toBigInt(fj), toBigInt(0))
1173+ else aS("payment asset is not supported")
1174+ if ((eB == eB))
3991175 then {
400- let E = n(aV)
401- let G = value(n(valueOrErrorMessage(getString(D(E)), f("invalid base asset id"))))
402- if ((G == G))
1176+ let ab = eV.caller
1177+ let ac = eV.transactionId
1178+ let he = fi(fj, fk, ab, ac)
1179+ if ((he == he))
4031180 then {
404- let J = valueOrErrorMessage(getInteger(H(E)), f("invalid period"))
405- if ((J == J))
1181+ let fo = he._5
1182+ let hf = he._4
1183+ let fh = he._3
1184+ let en = he._2
1185+ let hg = he._1
1186+ let hh = if (if ((gZ > 0))
1187+ then (gZ > hg)
1188+ else false)
1189+ then aS(makeString(["amount to receive is less than ", toString(gZ)], ""))
1190+ else hg
1191+ let fd = fc(hh)
1192+ if ((fd == fd))
4061193 then {
407- let bs = valueOrElse(parseInt(split(value(getString(M(E, N))), a)[1]), 0)
408- let bu = if ((bs > 0))
409- then true
410- else h("nothing to claim")
411- if ((bu == bu))
1194+ let gR = if (ha)
4121195 then {
413- let bq = valueOrErrorMessage(getInteger(O(E, N)), f("failed to get period"))
414- let bv = if ((J > bq))
415- then true
416- else h("invalid period")
417- if ((bv == bv))
418- then {
419- let aL = toBigInt(valueOrErrorMessage(getBinary(T(E, bq)), f("failed to get price")))
420- let bw = toInt(fraction(toBigInt(bs), e, aL))
421- $Tuple2([StringEntry(M(E, N), makeString(["%d%d", toString(0), toString(lastBlock.timestamp)], a)), DeleteEntry(O(E, N)), ScriptTransfer(N, bw, G), StringEntry(X(E, "claimShareAsset", J, N, ai.transactionId), makeString(["%d%d%d%d", toString(bw), toString(lastBlock.timestamp), toString(aL), toString(bs)], a))], unit)
422- }
1196+ let hi = invoke(bu, "stake", nil, [AttachedPayment(bo, hh)])
1197+ if ((hi == hi))
1198+ then nil
1199+ else throw("Strict value is not equal to itself.")
1200+ }
1201+ else [ScriptTransfer(eV.caller, hh, bo)]
1202+ let hj = if ((fh > 0))
1203+ then [ScriptTransfer(aW, fh, fk)]
1204+ else nil
1205+ let hk = if ((this == aW))
1206+ then $Tuple2(0, 0)
1207+ else if (fo)
1208+ then $Tuple2(-(fh), 0)
1209+ else $Tuple2(0, -(fh))
1210+ let eD = hk._1
1211+ let eE = hk._2
1212+ let hl = eC(eD, eE, 0)
1213+ let gU = hl._1
1214+ let et = hl._2
1215+ let eO = value(getString(aj))
1216+ let gV = eH(eB, et)
1217+ if ((gV == gV))
1218+ then {
1219+ let gW = invoke(this, "rebalance", nil, nil)
1220+ if ((gW == gW))
1221+ then $Tuple2((((en ++ gR) ++ hj) ++ gU), hh)
4231222 else throw("Strict value is not equal to itself.")
4241223 }
4251224 else throw("Strict value is not equal to itself.")
4351234
4361235
4371236
438-@Callable(ai)
439-func get () = {
440- let bb = [am(ai)]
441- if ((bb == bb))
1237+@Callable(eV)
1238+func putOneTknREADONLY (fk,fj) = {
1239+ let hm = fi(fj, bf(fk), unit, unit)
1240+ let hg = hm._1
1241+ let en = hm._2
1242+ let fh = hm._3
1243+ let hf = hm._4
1244+ let fo = hm._5
1245+ $Tuple2(nil, $Tuple3(hg, fh, hf))
1246+ }
1247+
1248+
1249+
1250+@Callable(eV)
1251+func getOneTkn (hn,gZ) = {
1252+ let hb = {
1253+ let aY = invoke(aV, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
1254+ if ($isInstanceOf(aY, "Boolean"))
1255+ then aY
1256+ else throw(($getType(aY) + " couldn't be cast to Boolean"))
1257+ }
1258+ let ho = if (if (ba())
1259+ then true
1260+ else (bn == n))
1261+ then true
1262+ else hb
1263+ let fP = [if (if (!(ho))
1264+ then true
1265+ else gk(eV))
1266+ then true
1267+ else aS("get operation is blocked by admin"), if ((size(eV.payments) == 1))
1268+ then true
1269+ else aS("exactly 1 payment are expected")]
1270+ if ((fP == fP))
4421271 then {
443- let bl = if ((size(ai.payments) == 1))
444- then ai.payments[0]
445- else h("exactly 1 payment is expected")
446- let G = bl.assetId
447- let E = value(n(valueOrErrorMessage(getString(F(G)), f("invalid share asset id"))))
448- if ((E == E))
1272+ let fO = bf(hn)
1273+ let hd = eV.payments[0]
1274+ let fk = hd.assetId
1275+ let fw = hd.amount
1276+ let eB = eu(toBigInt(0), toBigInt(0), toBigInt(0))
1277+ if ((eB == eB))
4491278 then {
450- let N = ai.caller
451- let bx = valueOrErrorMessage(aA(E), f("invalid asset"))
452- let bn = bx._1
453- let aH = bx._2
454- let J = value(getInteger(H(E)))
455- let by = getInteger(Q(E, N))
456- let bz = if ((by == unit))
457- then unit
458- else {
459- let bA = value(by)
460- if ((bA == J))
461- then unit
462- else invoke(this, "claimBaseAsset", [p(E), toString(N)], nil)
463- }
464- if ((bz == bz))
1279+ let ab = eV.caller
1280+ let ac = eV.transactionId
1281+ let hp = fN(fO, fw, fk, ab, ac)
1282+ if ((hp == hp))
4651283 then {
466- let bB = valueOrElse(getInteger(L(E)), 0)
467- let bC = valueOrElse(parseInt(split(value(getString(P(E, N))), a)[1]), 0)
468- $Tuple2([IntegerEntry(L(E), (bB + bl.amount)), StringEntry(P(E, N), makeString(["%d%d", toString((bC + bl.amount)), toString(lastBlock.timestamp)], a)), IntegerEntry(Q(E, N), J), StringEntry(X(E, "get", J, N, ai.transactionId), makeString(["%d%d%d", toString(bl.amount), toString(lastBlock.timestamp), toString(bC)], a))], unit)
1284+ let fQ = hp._5
1285+ let hf = hp._4
1286+ let fh = hp._3
1287+ let en = hp._2
1288+ let hq = hp._1
1289+ let bY = if (if ((gZ > 0))
1290+ then (gZ > hq)
1291+ else false)
1292+ then aS(makeString(["amount to receive is less than ", toString(gZ)], ""))
1293+ else hq
1294+ let hr = invoke(aV, "burn", [fw], [AttachedPayment(fk, fw)])
1295+ if ((hr == hr))
1296+ then {
1297+ let gF = cJ(hn, (bY + max([0, fh])))
1298+ let hs = [ScriptTransfer(ab, bY, fO)]
1299+ let hj = if ((fh > 0))
1300+ then [ScriptTransfer(aW, fh, fO)]
1301+ else nil
1302+ let ht = {
1303+ let hu = if ((this == aW))
1304+ then 0
1305+ else fh
1306+ if (fQ)
1307+ then $Tuple2(-((bY + hu)), 0)
1308+ else $Tuple2(0, -((bY + hu)))
1309+ }
1310+ let eD = ht._1
1311+ let eE = ht._2
1312+ let hv = eC(eD, eE, 0)
1313+ let gU = hv._1
1314+ let et = hv._2
1315+ let gV = eH(eB, et)
1316+ if ((gV == gV))
1317+ then $Tuple2(((((en ++ gF) ++ hs) ++ hj) ++ gU), bY)
1318+ else throw("Strict value is not equal to itself.")
1319+ }
1320+ else throw("Strict value is not equal to itself.")
4691321 }
4701322 else throw("Strict value is not equal to itself.")
4711323 }
4761328
4771329
4781330
479-@Callable(ai)
480-func claimBaseAsset (aV,bt) = {
481- let bb = [am(ai)]
482- if ((bb == bb))
1331+@Callable(eV)
1332+func getOneTknREADONLY (fO,fw) = {
1333+ let hw = fN(bf(fO), fw, bo, unit, unit)
1334+ let hq = hw._1
1335+ let en = hw._2
1336+ let fh = hw._3
1337+ let hf = hw._4
1338+ let fQ = hw._5
1339+ $Tuple2(nil, $Tuple3(hq, fh, hf))
1340+ }
1341+
1342+
1343+
1344+@Callable(eV)
1345+func unstakeAndGetOneTkn (hx,hn,gZ) = {
1346+ let hb = {
1347+ let aY = invoke(aV, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
1348+ if ($isInstanceOf(aY, "Boolean"))
1349+ then aY
1350+ else throw(($getType(aY) + " couldn't be cast to Boolean"))
1351+ }
1352+ let ho = if (if (ba())
1353+ then true
1354+ else (bn == n))
1355+ then true
1356+ else hb
1357+ let fP = [if (if (!(ho))
1358+ then true
1359+ else gk(eV))
1360+ then true
1361+ else aS("get operation is blocked by admin"), if ((size(eV.payments) == 0))
1362+ then true
1363+ else aS("no payments are expected")]
1364+ if ((fP == fP))
4831365 then {
484- let N = if ((bt == ""))
485- then ai.caller
486- else {
487- let aN = ah(ai)
488- if ((aN == aN))
489- then valueOrErrorMessage(addressFromString(bt), f("invalid user address"))
490- else throw("Strict value is not equal to itself.")
491- }
492- if ((N == N))
1366+ let fO = bf(hn)
1367+ let ab = eV.caller
1368+ let ac = eV.transactionId
1369+ let eB = eu(toBigInt(0), toBigInt(0), toBigInt(0))
1370+ if ((eB == eB))
4931371 then {
494- let E = n(aV)
495- let G = value(n(valueOrErrorMessage(getString(D(E)), f("invalid base asset id"))))
496- if ((G == G))
1372+ let hy = invoke(bu, "unstake", [toBase58String(bo), hx], nil)
1373+ if ((hy == hy))
4971374 then {
498- let J = valueOrErrorMessage(getInteger(H(E)), f("invalid period"))
499- if ((J == J))
1375+ let hz = fN(fO, hx, bo, ab, ac)
1376+ if ((hz == hz))
5001377 then {
501- let bC = valueOrElse(parseInt(split(value(getString(P(E, N))), a)[1]), 0)
502- let bA = valueOrErrorMessage(getInteger(Q(E, N)), f("failed to get period"))
503- let bv = if ((J > bA))
504- then true
505- else h("invalid period")
506- if ((bv == bv))
1378+ let fQ = hz._5
1379+ let hf = hz._4
1380+ let fh = hz._3
1381+ let en = hz._2
1382+ let hq = hz._1
1383+ let bY = if (if ((gZ > 0))
1384+ then (gZ > hq)
1385+ else false)
1386+ then aS(makeString(["amount to receive is less than ", toString(gZ)], ""))
1387+ else hq
1388+ let hr = invoke(aV, "burn", [hx], [AttachedPayment(bo, hx)])
1389+ if ((hr == hr))
5071390 then {
508- let aL = toBigInt(valueOrErrorMessage(getBinary(V(E, bA)), f("failed to get price")))
509- let bD = toInt(fraction(toBigInt(bC), aL, e))
510- $Tuple2([StringEntry(P(E, N), makeString(["%d%d", toString(0), toString(lastBlock.timestamp)], a)), DeleteEntry(Q(E, N)), ScriptTransfer(N, bD, E), StringEntry(X(E, "claimBaseAsset", J, N, ai.transactionId), makeString(["%d%d%d%d", toString(bD), toString(lastBlock.timestamp), toString(aL), toString(bA)], a))], unit)
1391+ let gF = cJ(hn, (bY + max([0, fh])))
1392+ let hs = [ScriptTransfer(eV.caller, bY, fO)]
1393+ let hj = if ((fh > 0))
1394+ then [ScriptTransfer(aW, fh, fO)]
1395+ else nil
1396+ let hA = {
1397+ let hu = if ((this == aW))
1398+ then 0
1399+ else fh
1400+ if (fQ)
1401+ then $Tuple2(-((bY + hu)), 0)
1402+ else $Tuple2(0, -((bY + hu)))
1403+ }
1404+ let eD = hA._1
1405+ let eE = hA._2
1406+ let hB = eC(eD, eE, 0)
1407+ let gU = hB._1
1408+ let et = hB._2
1409+ let gV = eH(eB, et)
1410+ if ((gV == gV))
1411+ then $Tuple2(((((en ++ gF) ++ hs) ++ hj) ++ gU), bY)
1412+ else throw("Strict value is not equal to itself.")
5111413 }
5121414 else throw("Strict value is not equal to itself.")
5131415 }
5221424
5231425
5241426
525-@Callable(ai)
526-func finalize (aV) = {
527- let bb = [am(ai)]
528- if ((bb == bb))
1427+@Callable(eV)
1428+func get () = {
1429+ let dY = eU(eV)
1430+ let dE = dY._1
1431+ let dF = dY._2
1432+ let eX = dY._3
1433+ let dn = dY._4
1434+ let dG = dY._5
1435+ let gF = cO(dE, dF)
1436+ let eB = eu(toBigInt(0), toBigInt(0), toBigInt(0))
1437+ if ((eB == eB))
5291438 then {
530- let E = n(aV)
531- let G = value(n(valueOrErrorMessage(getString(D(E)), f("invalid base asset id"))))
532- if ((G == G))
1439+ let hC = invoke(aV, "burn", [eX], [AttachedPayment(dn, eX)])
1440+ if ((hC == hC))
5331441 then {
534- let aI = valueOrErrorMessage(assetInfo(G), f("invalid share asset id"))
535- let J = valueOrErrorMessage(getInteger(H(E)), f("invalid period"))
536- if ((J == J))
1442+ let hD = eC(-(dE), -(dF), 0)
1443+ let gU = hD._1
1444+ let et = hD._2
1445+ let gV = eH(eB, et)
1446+ if ((gV == gV))
1447+ then ((gF ++ dG) ++ gU)
1448+ else throw("Strict value is not equal to itself.")
1449+ }
1450+ else throw("Strict value is not equal to itself.")
1451+ }
1452+ else throw("Strict value is not equal to itself.")
1453+ }
1454+
1455+
1456+
1457+@Callable(eV)
1458+func getNoLess (hE,hF) = {
1459+ let dY = eU(eV)
1460+ let dE = dY._1
1461+ let dF = dY._2
1462+ let eX = dY._3
1463+ let dn = dY._4
1464+ let dG = dY._5
1465+ if ((hE > dE))
1466+ then throw(((("noLessThenAmtAsset failed: " + toString(dE)) + " < ") + toString(hE)))
1467+ else if ((hF > dF))
1468+ then throw(((("noLessThenPriceAsset failed: " + toString(dF)) + " < ") + toString(hF)))
1469+ else {
1470+ let gF = cO(dE, dF)
1471+ let eB = eu(toBigInt(0), toBigInt(0), toBigInt(0))
1472+ if ((eB == eB))
1473+ then {
1474+ let hC = invoke(aV, "burn", [eX], [AttachedPayment(dn, eX)])
1475+ if ((hC == hC))
1476+ then {
1477+ let hG = eC(-(dE), -(dF), 0)
1478+ let gU = hG._1
1479+ let et = hG._2
1480+ let gV = eH(eB, et)
1481+ if ((gV == gV))
1482+ then ((gF ++ dG) ++ gU)
1483+ else throw("Strict value is not equal to itself.")
1484+ }
1485+ else throw("Strict value is not equal to itself.")
1486+ }
1487+ else throw("Strict value is not equal to itself.")
1488+ }
1489+ }
1490+
1491+
1492+
1493+@Callable(eV)
1494+func unstakeAndGet (bY) = {
1495+ let hH = if ((size(eV.payments) != 0))
1496+ then throw("No payments are expected")
1497+ else true
1498+ if ((hH == hH))
1499+ then {
1500+ let dc = bc()
1501+ let dp = fromBase58String(dc[q])
1502+ let eB = eu(toBigInt(0), toBigInt(0), toBigInt(0))
1503+ if ((eB == eB))
1504+ then {
1505+ let hy = invoke(bu, "unstake", [toBase58String(dp), bY], nil)
1506+ if ((hy == hy))
5371507 then {
538- let bE = getInteger(I(E, J))
539- let bF = if ((bE == unit))
540- then unit
541- else {
542- let bG = (height - value(bE))
543- let bH = max([0, (aw - bG)])
544- if ((bH == 0))
545- then unit
546- else h(makeString(["finalization will be possible in ", toString(bH), " blocks"], ""))
547- }
548- if ((bF == bF))
1508+ let dY = dl(toBase58String(eV.transactionId), toBase58String(dp), bY, eV.caller)
1509+ let dE = dY._1
1510+ let dF = dY._2
1511+ let ds = parseIntValue(dY._9)
1512+ let dG = dY._10
1513+ let gF = cO(dE, dF)
1514+ let hI = if (if (ba())
1515+ then true
1516+ else (ds == n))
1517+ then throw(("Get operation is blocked by admin. Status = " + toString(ds)))
1518+ else true
1519+ if ((hI == hI))
5491520 then {
550- let bI = valueOrErrorMessage(aA(E), f("invalid asset"))
551- let bn = bI._1
552- let aH = bI._2
553- let bJ = valueOrErrorMessage({
554- let aF = invoke(ap, "claimWxDoNotThrow", [p(aH)], nil)
555- if ($isInstanceOf(aF, "Int"))
556- then aF
557- else unit
558- }, f("invalid claimWx result"))
559- if ((bJ == bJ))
1521+ let hC = invoke(aV, "burn", [bY], [AttachedPayment(dp, bY)])
1522+ if ((hC == hC))
5601523 then {
561- let br = valueOrElse(getInteger(K(E)), 0)
562- let bB = valueOrElse(getInteger(L(E)), 0)
563- let bK = {
564- let bL = if (if ((bJ > 0))
565- then true
566- else (br > 0))
567- then true
568- else (bB > 0)
569- if (bL)
570- then true
571- else h("nothing to finalize")
572- }
573- if ((bK == bK))
574- then {
575- let bM = if ((bJ > 0))
576- then {
577- let bN = fraction(bJ, az, ax)
578- let bO = (bJ - bN)
579- let bP = invoke(aq, "userMaxDurationREADONLY", [toString(this)], nil)
580- let bQ = if ((bN > 0))
581- then {
582- let ad = bP
583- if (if (if ($isInstanceOf(ad._1, "String"))
584- then $isInstanceOf(ad._2, "Int")
585- else false)
586- then $isInstanceOf(ad, "(String, Int)")
587- else false)
588- then {
589- let bR = ad._1
590- let bS = ad._2
591- if ((bN > 0))
592- then invoke(aq, bR, [bS], [AttachedPayment(au, bN)])
593- else unit
594- }
595- else h("invalid lock params")
596- }
597- else unit
598- if ((bQ == bQ))
599- then {
600- let bT = if ((bO > 0))
601- then {
602- let bU = au
603- let bV = 0
604- let bW = p(at)
605- let bX = toString(this)
606- valueOrErrorMessage({
607- let aF = invoke(ar, "swap", [bV, bW, bX], [AttachedPayment(bU, bO)])
608- if ($isInstanceOf(aF, "Int"))
609- then aF
610- else unit
611- }, f("invalid swap result"))
612- }
613- else 0
614- if ((bT == bT))
615- then {
616- let bY = if ((bT > 0))
617- then {
618- let bZ = 0
619- let ca = true
620- valueOrErrorMessage({
621- let aF = invoke(bn, "putOneTknV2", [bZ, ca], [AttachedPayment(at, bT)])
622- if ($isInstanceOf(aF, "Int"))
623- then aF
624- else unit
625- }, f("invalid putOneTknV2 result"))
626- }
627- else 0
628- if ((bY == bY))
629- then bY
630- else throw("Strict value is not equal to itself.")
631- }
632- else throw("Strict value is not equal to itself.")
633- }
634- else throw("Strict value is not equal to itself.")
635- }
636- else unit
637- if ((bM == bM))
638- then {
639- let cb = if ((bB > 0))
640- then {
641- let aL = aG(aH, G)
642- if ((aL == aL))
643- then {
644- let cc = toInt(fraction(toBigInt(bB), aL, e, FLOOR))
645- let bD = {
646- let cd = E
647- let bZ = 0
648- valueOrErrorMessage({
649- let aF = invoke(bn, "unstakeAndGetOneTknV2", [cc, p(cd), bZ], nil)
650- if ($isInstanceOf(aF, "Int"))
651- then aF
652- else unit
653- }, f("invalid unstakeAndGetOneTknV2 result"))
654- }
655- if ((bD == bD))
656- then {
657- let ce = if ((aI.issuer == this))
658- then invoke(this, "burn", [G, bB], nil)
659- else h("invalid share asset issuer")
660- if ((ce == ce))
661- then {
662- let cf = fraction(toBigInt(bD), e, toBigInt(bB), FLOOR)
663- let cg = [BinaryEntry(V(E, J), toBytes(cf)), StringEntry(W(E), toString(cf))]
664- cg
665- }
666- else throw("Strict value is not equal to itself.")
667- }
668- else throw("Strict value is not equal to itself.")
669- }
670- else throw("Strict value is not equal to itself.")
671- }
672- else nil
673- if ((cb == cb))
674- then {
675- let ch = if ((br > 0))
676- then {
677- let bY = {
678- let bZ = 0
679- let ca = true
680- valueOrErrorMessage({
681- let aF = invoke(bn, "putOneTknV2", [bZ, ca], [AttachedPayment(E, br)])
682- if ($isInstanceOf(aF, "Int"))
683- then aF
684- else unit
685- }, f("invalid putOneTknV2 result"))
686- }
687- if ((bY == bY))
688- then {
689- let aL = aG(aH, G)
690- if ((aL == aL))
691- then {
692- let ci = if ((value(toInt(aL)) != 0))
693- then true
694- else throw("price is ZERO")
695- if ((ci == ci))
696- then {
697- let bw = toInt(fraction(toBigInt(bY), e, aL, FLOOR))
698- let cj = if ((value(toInt(aL)) != 0))
699- then true
700- else throw("shareAssetAmount is ZERO")
701- if ((cj == cj))
702- then {
703- let ck = if ((aI.issuer == this))
704- then invoke(this, "emit", [G, bw], nil)
705- else h("invalid share asset issuer")
706- if ((ck == ck))
707- then {
708- let cl = fraction(toBigInt(br), e, toBigInt(bw))
709- let cm = [BinaryEntry(T(E, J), toBytes(cl)), StringEntry(U(E), toString(cl))]
710- cm
711- }
712- else throw("Strict value is not equal to itself.")
713- }
714- else throw("Strict value is not equal to itself.")
715- }
716- else throw("Strict value is not equal to itself.")
717- }
718- else throw("Strict value is not equal to itself.")
719- }
720- else throw("Strict value is not equal to itself.")
721- }
722- else nil
723- if ((ch == ch))
724- then {
725- let cn = (J + 1)
726- let co = aG(aH, G)
727- let cp = (([IntegerEntry(H(E), cn), IntegerEntry(I(E, cn), height), IntegerEntry(L(E), 0), IntegerEntry(K(E), 0), BinaryEntry(R(E, J), toBytes(co)), StringEntry(S(E), toString(co))] ++ ch) ++ cb)
728- $Tuple2(cp, toBytes(co))
729- }
730- else throw("Strict value is not equal to itself.")
731- }
732- else throw("Strict value is not equal to itself.")
733- }
734- else throw("Strict value is not equal to itself.")
735- }
1524+ let hJ = eC(-(dE), -(dF), 0)
1525+ let gU = hJ._1
1526+ let et = hJ._2
1527+ let gV = eH(eB, et)
1528+ if ((gV == gV))
1529+ then ((gF ++ dG) ++ gU)
7361530 else throw("Strict value is not equal to itself.")
7371531 }
7381532 else throw("Strict value is not equal to itself.")
7471541 }
7481542
7491543
750-@Verifier(cq)
751-func cr () = {
752- let cs = {
753- let ad = ac()
754- if ($isInstanceOf(ad, "ByteVector"))
1544+
1545+@Callable(eV)
1546+func unstakeAndGetNoLess (hx,hK,hF) = {
1547+ let ho = if (ba())
1548+ then true
1549+ else (bn == n)
1550+ let fP = [if (!(ho))
1551+ then true
1552+ else throw("get operation is blocked by admin"), if ((size(eV.payments) == 0))
1553+ then true
1554+ else throw("no payments are expected")]
1555+ if ((fP == fP))
1556+ then {
1557+ let eB = eu(toBigInt(0), toBigInt(0), toBigInt(0))
1558+ if ((eB == eB))
1559+ then {
1560+ let hy = invoke(bu, "unstake", [toBase58String(bo), hx], nil)
1561+ if ((hy == hy))
1562+ then {
1563+ let dY = dl(toBase58String(eV.transactionId), toBase58String(bo), hx, eV.caller)
1564+ let dE = dY._1
1565+ let dF = dY._2
1566+ let dG = dY._10
1567+ let gF = cO(dE, dF)
1568+ let hL = [if ((dE >= hK))
1569+ then true
1570+ else throw(makeString(["amount asset amount to receive is less than ", toString(hK)], "")), if ((dF >= hF))
1571+ then true
1572+ else throw(makeString(["price asset amount to receive is less than ", toString(hF)], ""))]
1573+ if ((hL == hL))
1574+ then {
1575+ let hC = invoke(aV, "burn", [hx], [AttachedPayment(bo, hx)])
1576+ if ((hC == hC))
1577+ then {
1578+ let hM = eC(-(dE), -(dF), 0)
1579+ let gU = hM._1
1580+ let et = hM._2
1581+ let gV = eH(eB, et)
1582+ if ((gV == gV))
1583+ then ((gF ++ dG) ++ gU)
1584+ else throw("Strict value is not equal to itself.")
1585+ }
1586+ else throw("Strict value is not equal to itself.")
1587+ }
1588+ else throw("Strict value is not equal to itself.")
1589+ }
1590+ else throw("Strict value is not equal to itself.")
1591+ }
1592+ else throw("Strict value is not equal to itself.")
1593+ }
1594+ else throw("Strict value is not equal to itself.")
1595+ }
1596+
1597+
1598+
1599+@Callable(eV)
1600+func activate (hN,hO) = if ((toString(eV.caller) != toString(aV)))
1601+ then throw("permissions denied")
1602+ else $Tuple2([StringEntry(ae(), hN), StringEntry(af(), hO)], "success")
1603+
1604+
1605+
1606+@Callable(eV)
1607+func refreshKLp () = {
1608+ let hP = valueOrElse(getInteger(ak), 0)
1609+ let hQ = if (((height - hP) >= an))
1610+ then unit
1611+ else aS(makeString([toString(an), " blocks have not passed since the previous call"], ""))
1612+ if ((hQ == hQ))
1613+ then {
1614+ let eO = valueOrErrorMessage(parseBigInt(valueOrElse(getString(this, aj), "0")), aU("invalid kLp"))
1615+ let hR = eC(0, 0, 0)
1616+ let hS = hR._1
1617+ let et = hR._2
1618+ let eF = if ((eO != et))
1619+ then hS
1620+ else aS("nothing to refresh")
1621+ $Tuple2(eF, toString(et))
1622+ }
1623+ else throw("Strict value is not equal to itself.")
1624+ }
1625+
1626+
1627+
1628+@Callable(eV)
1629+func getPoolConfigWrapperREADONLY () = $Tuple2(nil, bc())
1630+
1631+
1632+
1633+@Callable(eV)
1634+func getAccBalanceWrapperREADONLY (ap) = $Tuple2(nil, bL(ap))
1635+
1636+
1637+
1638+@Callable(eV)
1639+func calcPricesWrapperREADONLY (cW,cX,db) = {
1640+ let dk = da(cW, cX, db)
1641+ $Tuple2(nil, [toString(dk[0]), toString(dk[1]), toString(dk[2])])
1642+ }
1643+
1644+
1645+
1646+@Callable(eV)
1647+func toX18WrapperREADONLY (E,F) = $Tuple2(nil, toString(D(E, F)))
1648+
1649+
1650+
1651+@Callable(eV)
1652+func fromX18WrapperREADONLY (I,J) = $Tuple2(nil, H(parseBigIntValue(I), J))
1653+
1654+
1655+
1656+@Callable(eV)
1657+func calcPriceBigIntWrapperREADONLY (bP,bQ) = $Tuple2(nil, toString(bO(parseBigIntValue(bP), parseBigIntValue(bQ))))
1658+
1659+
1660+
1661+@Callable(eV)
1662+func estimatePutOperationWrapperREADONLY (dm,dI,dJ,dK,dL,dM,ab,dN,dO) = $Tuple2(nil, dH(dm, dI, dJ, dK, dL, dM, ab, dN, dO))
1663+
1664+
1665+
1666+@Callable(eV)
1667+func estimateGetOperationWrapperREADONLY (dm,dn,do,ab) = {
1668+ let dY = dl(dm, dn, do, addressFromStringValue(ab))
1669+ $Tuple2(nil, $Tuple10(dY._1, dY._2, dY._3, dY._4, dY._5, dY._6, dY._7, toString(dY._8), dY._9, dY._10))
1670+ }
1671+
1672+
1673+
1674+@Callable(eV)
1675+func statsREADONLY () = {
1676+ let dc = bc()
1677+ let dp = fromBase58String(dc[q])
1678+ let hT = dc[r]
1679+ let hU = dc[s]
1680+ let dR = dc[v]
1681+ let dS = dc[w]
1682+ let dd = parseIntValue(dc[t])
1683+ let de = parseIntValue(dc[u])
1684+ let hV = valueOrErrorMessage(assetInfo(dp), (("Asset " + toBase58String(dp)) + " doesn't exist")).quantity
1685+ let hW = bL(hT)
1686+ let hX = bL(hU)
1687+ let hY = if ((hV == 0))
1688+ then [e, e, e]
1689+ else da(hW, hX, hV)
1690+ let dz = 0
1691+ let hZ = H(hY[1], b)
1692+ let ia = H(hY[2], b)
1693+ let ib = value(getInteger(aV, aD(toString(this))))
1694+ $Tuple2(nil, makeString(["%d%d%d%d%d%d%d", toString(hW), toString(hX), toString(hV), toString(dz), toString(hZ), toString(ia), toString(ib)], j))
1695+ }
1696+
1697+
1698+
1699+@Callable(eV)
1700+func evaluatePutByAmountAssetREADONLY (dJ) = {
1701+ let dc = bc()
1702+ let dp = fromBase58String(dc[q])
1703+ let dP = dc[r]
1704+ let dq = fromBase58String(dP)
1705+ let dQ = dc[s]
1706+ let dr = fromBase58String(dQ)
1707+ let dd = parseIntValue(dc[t])
1708+ let de = parseIntValue(dc[u])
1709+ let ds = dc[p]
1710+ let hV = valueOrErrorMessage(assetInfo(dp), (("Asset " + toBase58String(dp)) + " doesn't exist")).quantity
1711+ let hW = bL(dP)
1712+ let hX = bL(dQ)
1713+ let cY = D(hW, dd)
1714+ let cZ = D(hX, de)
1715+ let dy = if ((hV == 0))
1716+ then e
1717+ else bO(cZ, cY)
1718+ let dV = D(dJ, dd)
1719+ let dW = fraction(dV, dy, d)
1720+ let dL = H(dW, de)
1721+ let fb = dH("", 500000, dJ, dq, dL, dr, "", true, false)
1722+ let eg = fb._1
1723+ let ic = fb._3
1724+ let du = fb._4
1725+ let dw = fb._5
1726+ let dt = fb._6
1727+ $Tuple2(nil, makeString(["%d%d%d%d%d%d%d%d", toString(eg), toString(H(dy, b)), toString(du), toString(dw), toString(dt), ds, toString(dJ), toString(dL)], j))
1728+ }
1729+
1730+
1731+
1732+@Callable(eV)
1733+func evaluatePutByPriceAssetREADONLY (dL) = {
1734+ let dc = bc()
1735+ let dp = fromBase58String(dc[q])
1736+ let dP = dc[r]
1737+ let dq = fromBase58String(dP)
1738+ let dQ = dc[s]
1739+ let dr = fromBase58String(dQ)
1740+ let dd = parseIntValue(dc[t])
1741+ let de = parseIntValue(dc[u])
1742+ let ds = dc[p]
1743+ let hV = valueOrErrorMessage(assetInfo(dp), (("Asset " + toBase58String(dp)) + " doesn't exist")).quantity
1744+ let id = bL(dP)
1745+ let ie = bL(dQ)
1746+ let if = D(id, dd)
1747+ let ig = D(ie, de)
1748+ let dy = if ((hV == 0))
1749+ then e
1750+ else bO(ig, if)
1751+ let dW = D(dL, de)
1752+ let dV = fraction(dW, d, dy)
1753+ let dJ = H(dV, dd)
1754+ let fb = dH("", 500000, dJ, dq, dL, dr, "", true, false)
1755+ let eg = fb._1
1756+ let ic = fb._3
1757+ let du = fb._4
1758+ let dw = fb._5
1759+ let dt = fb._6
1760+ $Tuple2(nil, makeString(["%d%d%d%d%d%d%d%d", toString(eg), toString(H(dy, b)), toString(du), toString(dw), toString(dt), ds, toString(dJ), toString(dL)], j))
1761+ }
1762+
1763+
1764+
1765+@Callable(eV)
1766+func evaluateGetREADONLY (ih,ii) = {
1767+ let dY = dl("", ih, ii, this)
1768+ let dE = dY._1
1769+ let dF = dY._2
1770+ let du = dY._5
1771+ let dw = dY._6
1772+ let dt = dY._7
1773+ let dz = dY._8
1774+ let ds = parseIntValue(dY._9)
1775+ $Tuple2(nil, makeString(["%d%d%d%d%d%d%d", toString(dE), toString(dF), toString(du), toString(dw), toString(dt), toString(dz), toString(ds)], j))
1776+ }
1777+
1778+
1779+@Verifier(ij)
1780+func ik () = {
1781+ let il = {
1782+ let bV = gh()
1783+ if ($isInstanceOf(bV, "ByteVector"))
7551784 then {
756- let ak = ad
757- ak
1785+ let gl = bV
1786+ gl
7581787 }
759- else if ($isInstanceOf(ad, "Unit"))
760- then cq.senderPublicKey
1788+ else if ($isInstanceOf(bV, "Unit"))
1789+ then ij.senderPublicKey
7611790 else throw("Match error")
7621791 }
763- sigVerify(cq.bodyBytes, cq.proofs[0], cs)
1792+ let bV = ij
1793+ if ($isInstanceOf(bV, "Order"))
1794+ then {
1795+ let eK = bV
1796+ let im = bb()
1797+ let in = if (eG())
1798+ then $Tuple2(true, "")
1799+ else eJ(eK)
1800+ let aK = in._1
1801+ let aL = in._2
1802+ let aM = sigVerify(eK.bodyBytes, eK.proofs[0], eK.senderPublicKey)
1803+ let aN = sigVerify(eK.bodyBytes, eK.proofs[1], im)
1804+ if (if (if (aK)
1805+ then aM
1806+ else false)
1807+ then aN
1808+ else false)
1809+ then true
1810+ else aJ(aK, aL, aM, aN)
1811+ }
1812+ else if ($isInstanceOf(bV, "SetScriptTransaction"))
1813+ then {
1814+ let gi = bV
1815+ if (sigVerify(ij.bodyBytes, ij.proofs[0], il))
1816+ then true
1817+ else {
1818+ let io = blake2b256(value(gi.script))
1819+ let ip = fromBase64String(value(getString(aV, aF())))
1820+ let iq = scriptHash(this)
1821+ if ((ip == io))
1822+ then (iq != io)
1823+ else false
1824+ }
1825+ }
1826+ else sigVerify(ij.bodyBytes, ij.proofs[0], il)
7641827 }
7651828
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let a = "__"
4+let a = 8
55
6-let b = 8
6+let b = 100000000
77
8-let c = "WAVES"
8+let c = toBigInt(100000000)
99
10-let d = 1000000000000000000
10+let d = toBigInt(1000000000000000000)
1111
12-let e = toBigInt(d)
12+let e = toBigInt(0)
1313
14-func f (g) = makeString(["lp_staking_pools.ride:", g], " ")
14+let f = toBigInt(0)
15+
16+let g = toBigInt(1)
17+
18+let h = toBigInt(2)
19+
20+let i = "WAVES"
21+
22+let j = "__"
23+
24+let k = 1
25+
26+let l = 2
27+
28+let m = 3
29+
30+let n = 4
31+
32+let o = 1
33+
34+let p = 2
35+
36+let q = 3
37+
38+let r = 4
39+
40+let s = 5
41+
42+let t = 6
43+
44+let u = 7
45+
46+let v = 8
47+
48+let w = 9
49+
50+let x = 10
51+
52+let y = 1
53+
54+let z = 2
55+
56+let A = 3
57+
58+let B = 1
59+
60+let C = 7
61+
62+func D (E,F) = fraction(toBigInt(E), d, toBigInt(F))
1563
1664
17-func h (g) = throw(f(g))
65+func G (E,F) = fraction(E, d, F)
1866
1967
20-func i (j,k) = f(makeString(["mandatory ", toString(j), ".", k, " is not defined"], ""))
68+func H (I,J) = toInt(fraction(I, toBigInt(J), d))
2169
2270
23-func l (j,k) = valueOrErrorMessage(getString(j, k), i(j, k))
71+func K (I,J,L) = toInt(fraction(I, toBigInt(J), d, L))
2472
2573
26-func m (j,k) = valueOrErrorMessage(getInteger(j, k), i(j, k))
74+func M (N,O,P) = fraction(N, O, P)
2775
2876
29-func n (o) = if ((o == c))
30- then unit
31- else fromBase58String(o)
77+func Q (I) = if ((0 > I))
78+ then -(I)
79+ else I
3280
3381
34-func p (o) = if ((o == unit))
35- then c
36- else toBase58String(value(o))
82+func R (I) = if ((e > I))
83+ then -(I)
84+ else I
3785
3886
39-func q (r) = if ((r >= 0))
40- then r
41- else h("value should be positive")
87+func S () = "%s__swapContract"
4288
4389
44-func s () = makeString(["%s", "factoryContract"], a)
90+func T () = "%s__factoryContract"
4591
4692
47-func t () = makeString(["%s", "lpStakingContract"], a)
93+func U () = "%s__managerPublicKey"
4894
4995
50-func u () = makeString(["%s", "stakingContract"], a)
96+func V () = "%s__pendingManagerPublicKey"
5197
5298
53-func v () = makeString(["%s", "boostingContract"], a)
99+func W () = "%s%s__price__last"
54100
55101
56-func w () = makeString(["%s", "swapContract"], a)
102+func X (Y,Z) = makeString(["%s%s%d%d__price__history", toString(Y), toString(Z)], j)
57103
58104
59-func x () = makeString(["%s", "assetsStoreContract"], a)
105+func aa (ab,ac) = ((("%s%s%s__P__" + ab) + "__") + ac)
60106
61107
62-func y () = makeString(["%s", "usdtAssetId"], a)
108+func ad (ab,ac) = ((("%s%s%s__G__" + ab) + "__") + ac)
63109
64110
65-func z () = makeString(["%s", "wxAssetId"], a)
111+func ae () = "%s__amountAsset"
66112
67113
68-func A () = makeString(["%s", "shutdown"], a)
114+func af () = "%s__priceAsset"
69115
70116
71-func B () = makeString(["%s", "minDelay"], a)
117+let ag = "%s__fee"
118+
119+let ah = fraction(10, b, 10000)
120+
121+let ai = valueOrElse(getInteger(this, ag), ah)
122+
123+let aj = makeString(["%s", "kLp"], j)
124+
125+let ak = makeString(["%s", "kLpRefreshedHeight"], j)
126+
127+let al = makeString(["%s", "refreshKLpDelay"], j)
128+
129+let am = 30
130+
131+let an = valueOrElse(getInteger(this, al), am)
132+
133+func ao (ap) = makeString(["%s%s", "stakedBalance", ap], j)
72134
73135
74-func C () = makeString(["%s", "lockFraction"], a)
136+func aq (ap) = makeString(["%s%s", "shareAssetBalance", ap], j)
75137
76138
77-func D (E) = makeString(["%s%s", p(E), "shareAssetId"], a)
139+func ar (ap) = valueOrElse(getInteger(this, ao(ap)), 0)
78140
79141
80-func F (G) = makeString(["%s%s", p(G), "baseAssetId"], a)
142+func as (ap) = valueOrElse(getInteger(this, aq(ap)), 0)
81143
82144
83-func H (E) = makeString(["%s%s", p(E), "period"], a)
145+func at () = "%s__factoryConfig"
84146
85147
86-func I (E,J) = makeString(["%s%s%d", p(E), "periodStartHeight", toString(J)], a)
148+func au () = "%s%s__matcher__publicKey"
87149
88150
89-func K (E) = makeString(["%s%s", p(E), "baseAssetAmountToConvert"], a)
151+func av (aw) = (("%s%s%s__" + aw) + "__mappings__poolContract2LpAsset")
90152
91153
92-func L (E) = makeString(["%s%s", p(E), "shareAssetAmountToConvert"], a)
154+func ax (ay,az) = (((("%d%d%s__" + ay) + "__") + az) + "__config")
93155
94156
95-func M (E,N) = makeString(["%s%s%s", p(E), toString(N), "baseAssetAmountToConvert"], a)
157+func aA (aB) = ("%s%s%s__mappings__baseAsset2internalId__" + aB)
96158
97159
98-func O (E,N) = makeString(["%s%s%s%s", p(E), toString(N), "baseAssetAmountToConvert", "period"], a)
160+func aC () = "%s__shutdown"
99161
100162
101-func P (E,N) = makeString(["%s%s%s", p(E), toString(N), "shareAssetAmountToConvert"], a)
163+func aD (aE) = ("%s%s__poolWeight__" + aE)
102164
103165
104-func Q (E,N) = makeString(["%s%s%s%s", p(E), toString(N), "shareAssetAmountToConvert", "period"], a)
166+func aF () = "%s__allowedLpScriptHash"
105167
106168
107-func R (E,J) = makeString(["%s%s%d", p(E), "price", toString(J)], a)
169+let aG = "%s__feeCollectorAddress"
170+
171+func aH (aI) = ("%s%s__skipOrderValidation__" + aI)
108172
109173
110-func S (E) = makeString(["%s%s%s%d%d", p(E), "price", "history", toString(lastBlock.height), toString(lastBlock.timestamp)], a)
174+func aJ (aK,aL,aM,aN) = throw((((((((("order validation failed: orderValid=" + toString(aK)) + " (") + aL) + ")") + " senderValid=") + toString(aM)) + " matcherValid=") + toString(aN)))
111175
112176
113-func T (E,J) = makeString(["%s%s%d%s", p(E), "price", toString(J), "put"], a)
177+func aO (aP,aQ) = valueOrErrorMessage(getString(aP, aQ), makeString(["mandatory ", toString(aP), ".", aQ, " is not defined"], ""))
114178
115179
116-func U (E) = makeString(["%s%s%s%s%d%d", p(E), "price", "history", "put", toString(lastBlock.height), toString(lastBlock.timestamp)], a)
180+func aR (aP,aQ) = valueOrErrorMessage(getInteger(aP, aQ), makeString(["mandatory ", toString(aP), ".", aQ, " is not defined"], ""))
117181
118182
119-func V (E,J) = makeString(["%s%s%d%s", p(E), "price", toString(J), "get"], a)
183+func aS (aT) = throw(makeString(["lp.ride:", aT], " "))
120184
121185
122-func W (E) = makeString(["%s%s%s%s%d%d", p(E), "price", "history", "get", toString(lastBlock.height), toString(lastBlock.timestamp)], a)
186+func aU (aT) = makeString(["lp.ride:", aT], " ")
123187
124188
125-func X (E,Y,J,N,Z) = makeString(["%s%s%s%s", "history", toUtf8String(value(E)), Y, toString(N), toBase58String(Z), toString(height)], a)
189+let aV = addressFromStringValue(aO(this, T()))
190+
191+let aW = addressFromStringValue(aO(aV, aG))
192+
193+let aX = {
194+ let aY = invoke(aV, "getInFeeREADONLY", [toString(this)], nil)
195+ if ($isInstanceOf(aY, "Int"))
196+ then aY
197+ else throw(($getType(aY) + " couldn't be cast to Int"))
198+ }
199+
200+let aZ = {
201+ let aY = invoke(aV, "getOutFeeREADONLY", [toString(this)], nil)
202+ if ($isInstanceOf(aY, "Int"))
203+ then aY
204+ else throw(($getType(aY) + " couldn't be cast to Int"))
205+ }
206+
207+func ba () = valueOrElse(getBoolean(aV, aC()), false)
126208
127209
128-func aa () = "%s__managerPublicKey"
210+func bb () = fromBase58String(aO(aV, au()))
129211
130212
131-func ab () = "%s__pendingManagerPublicKey"
132-
133-
134-func ac () = {
135- let ad = getString(aa())
136- if ($isInstanceOf(ad, "String"))
137- then {
138- let ae = ad
139- fromBase58String(ae)
140- }
141- else if ($isInstanceOf(ad, "Unit"))
142- then unit
143- else throw("Match error")
213+func bc () = {
214+ let bd = aO(this, ae())
215+ let be = aO(this, af())
216+ let az = aR(aV, aA(be))
217+ let ay = aR(aV, aA(bd))
218+ split(aO(aV, ax(toString(ay), toString(az))), j)
144219 }
145220
146221
147-func af () = {
148- let ad = getString(ab())
149- if ($isInstanceOf(ad, "String"))
150- then {
151- let ae = ad
152- fromBase58String(ae)
153- }
154- else if ($isInstanceOf(ad, "Unit"))
155- then unit
156- else throw("Match error")
222+func bf (bg) = if ((bg == i))
223+ then unit
224+ else fromBase58String(bg)
225+
226+
227+func bh (bg) = if ((bg == unit))
228+ then i
229+ else toBase58String(value(bg))
230+
231+
232+func bi (bj) = $Tuple7(addressFromStringValue(bj[o]), parseIntValue(bj[p]), fromBase58String(bj[q]), bf(bj[r]), bf(bj[s]), parseIntValue(bj[t]), parseIntValue(bj[u]))
233+
234+
235+let bk = bi(bc())
236+
237+let bl = bk
238+
239+let bm = bl._1
240+
241+let bn = bl._2
242+
243+let bo = bl._3
244+
245+let bp = bl._4
246+
247+let bq = bl._5
248+
249+let br = bl._6
250+
251+let bs = bl._7
252+
253+func bt () = split(aO(aV, at()), j)
254+
255+
256+let bu = valueOrErrorMessage(addressFromString(bt()[B]), "incorrect staking address")
257+
258+let bv = valueOrErrorMessage(addressFromString(bt()[C]), "incorrect staking address")
259+
260+func bw (bx,by,bz,bA,bB,bC,bD,bE,bF,bG) = makeString(["%d%d%d%d%d%d%d%d%d%d", toString(bx), toString(by), toString(bz), toString(bA), toString(bB), toString(bC), toString(bD), toString(bE), toString(bF), toString(bG)], j)
261+
262+
263+func bH (bI,bJ,bK,bA,bD,bE) = makeString(["%d%d%d%d%d%d", toString(bI), toString(bJ), toString(bK), toString(bA), toString(bD), toString(bE)], j)
264+
265+
266+func bL (ap) = {
267+ let bM = if ((ap == "WAVES"))
268+ then wavesBalance(this).available
269+ else assetBalance(this, fromBase58String(ap))
270+ let bN = ((bM + ar(ap)) - as(ap))
271+ max([0, bN])
157272 }
158273
159274
160-let ag = throw("Permission denied")
161-
162-func ah (ai) = if ((ai.caller == this))
163- then true
164- else ag
275+func bO (bP,bQ) = fraction(bP, d, bQ)
165276
166277
167-func aj (ai) = {
168- let ad = ac()
169- if ($isInstanceOf(ad, "ByteVector"))
278+func bR (bP,bQ,L) = fraction(bP, d, bQ, L)
279+
280+
281+func bS (bT) = {
282+ let bU = invoke(bT, "getRate", nil, nil)
283+ if ((bU == bU))
170284 then {
171- let ak = ad
172- if ((ai.callerPublicKey == ak))
173- then true
174- else ag
285+ let bV = bU
286+ if ($isInstanceOf(bV, "Int"))
287+ then {
288+ let bW = bV
289+ bW
290+ }
291+ else aS("proxy.getRate() unexpected value")
175292 }
176- else if ($isInstanceOf(ad, "Unit"))
177- then ah(ai)
178- else throw("Match error")
293+ else throw("Strict value is not equal to itself.")
179294 }
180295
181296
182-let al = valueOrElse(getBoolean(A()), false)
183-
184-func am (ai) = if (if (!(al))
185- then true
186- else aj(ai))
187- then true
188- else throw("operation is disabled")
189-
190-
191-let an = addressFromStringValue(l(this, s()))
192-
193-let ao = addressFromStringValue(l(this, t()))
194-
195-let ap = addressFromStringValue(l(this, u()))
196-
197-let aq = addressFromStringValue(l(this, v()))
198-
199-let ar = addressFromStringValue(l(this, w()))
200-
201-let as = addressFromStringValue(l(this, x()))
202-
203-let at = n(l(this, y()))
204-
205-let au = n(l(this, z()))
206-
207-let av = 1440
208-
209-let aw = valueOrElse(getInteger(this, B()), av)
210-
211-let ax = 100000000
212-
213-let ay = fraction(1, ax, 2)
214-
215-let az = valueOrElse(getInteger(this, C()), ay)
216-
217-func aA (aB) = {
218- let aC = p(aB)
219- let aD = p(at)
220- let aE = {
221- let aF = invoke(an, "poolInfoREADONLY", [aC, aD], nil)
222- if ($isInstanceOf(aF, "(Address, ByteVector)"))
223- then aF
224- else unit
225- }
226- aE
227- }
228-
229-
230-func aG (aH,G) = {
231- let aI = valueOrErrorMessage(assetInfo(G), "failed to get share asset info")
232- let aJ = aI.quantity
233- let aK = q(valueOrErrorMessage({
234- let aF = invoke(ap, "stakedByUserREADONLY", [p(aH), toString(this)], nil)
235- if ($isInstanceOf(aF, "Int"))
236- then aF
237- else unit
238- }, f("invalid stakedByUserREADONLY result")))
239- let aL = if ((aJ == 0))
240- then e
241- else fraction(toBigInt(aK), e, toBigInt(aJ), FLOOR)
242- aL
243- }
244-
245-
246-@Callable(ai)
247-func setManager (aM) = {
248- let aN = aj(ai)
249- if ((aN == aN))
297+func bX (ap,bY,bZ,bT) = {
298+ let ca = ar(ap)
299+ if ((ca == ca))
250300 then {
251- let aO = fromBase58String(aM)
252- if ((aO == aO))
253- then [StringEntry(ab(), aM)]
301+ let cb = as(bZ)
302+ if ((cb == cb))
303+ then {
304+ let cc = bf(ap)
305+ if ((bY > 0))
306+ then {
307+ let cd = invoke(bT, "deposit", nil, [AttachedPayment(cc, bY)])
308+ if ((cd == cd))
309+ then {
310+ let bV = cd
311+ if ($isInstanceOf(bV, "Int"))
312+ then {
313+ let ce = bV
314+ let cf = (ca + bY)
315+ let cg = (cb + ce)
316+[IntegerEntry(ao(ap), cf), IntegerEntry(aq(bZ), cg)]
317+ }
318+ else nil
319+ }
320+ else throw("Strict value is not equal to itself.")
321+ }
322+ else nil
323+ }
254324 else throw("Strict value is not equal to itself.")
255325 }
256326 else throw("Strict value is not equal to itself.")
257327 }
258328
259329
260-
261-@Callable(ai)
262-func confirmManager () = {
263- let aP = af()
264- let aQ = if (isDefined(aP))
265- then true
266- else h("no pending manager")
267- if ((aQ == aQ))
330+func ch (ap,bY,bZ,bT,ci,cj) = {
331+ let ca = ar(ap)
332+ if ((ca == ca))
268333 then {
269- let aR = if ((ai.callerPublicKey == value(aP)))
270- then true
271- else h("you are not pending manager")
272- if ((aR == aR))
273- then [StringEntry(aa(), toBase58String(value(aP))), DeleteEntry(ab())]
334+ let cb = as(bZ)
335+ if ((cb == cb))
336+ then {
337+ let ck = bS(bT)
338+ if ((ck == ck))
339+ then {
340+ let cl = fraction(ci, ca, cb)
341+ let cm = bf(bZ)
342+ let cn = fraction(ci, bY, cl)
343+ let co = fraction(ci, bY, ck)
344+ let cp = max([0, (cn - co)])
345+ if ((co > 0))
346+ then {
347+ let cq = invoke(bT, "withdraw", nil, [AttachedPayment(cm, co)])
348+ if ((cq == cq))
349+ then {
350+ let bV = cq
351+ if ($isInstanceOf(bV, "Int"))
352+ then {
353+ let cr = bV
354+ let cf = (ca - cr)
355+ let cg = ((cb - co) - cp)
356+[IntegerEntry(ao(ap), cf), IntegerEntry(aq(bZ), cg), ScriptTransfer(cj, cp, bf(bZ))]
357+ }
358+ else nil
359+ }
360+ else throw("Strict value is not equal to itself.")
361+ }
362+ else nil
363+ }
364+ else throw("Strict value is not equal to itself.")
365+ }
274366 else throw("Strict value is not equal to itself.")
275367 }
276368 else throw("Strict value is not equal to itself.")
277369 }
278370
279371
372+func cs (ap) = {
373+ let bV = invoke(aV, "getPoolLeaseConfigREADONLY", [toString(this), ap], nil)
374+ if ($isInstanceOf(bV, "(Boolean, Int, Int, String, String, Int, String)"))
375+ then {
376+ let ct = bV
377+ ct
378+ }
379+ else aS((("[" + ap) + "] getLeaseProxyConfig() error"))
380+ }
280381
281-@Callable(ai)
282-func emit (aS,aT) = {
283- let aN = ah(ai)
284- if ((aN == aN))
382+
383+func cu (cv,ap,bZ,cw,bT,ci,cj) = {
384+ let ca = ar(ap)
385+ if ((ca == ca))
285386 then {
286- let aU = true
287- $Tuple2([Reissue(aS, aT, aU)], aT)
387+ let cb = as(bZ)
388+ if ((cb == cb))
389+ then {
390+ let cx = max([0, (bL(ap) - cw)])
391+ let cy = fraction(cv, cx, 100)
392+ let cz = (ca - cy)
393+ if ((cz == 0))
394+ then nil
395+ else if ((0 > cz))
396+ then {
397+ let cA = -(cz)
398+ bX(ap, cA, bZ, bT)
399+ }
400+ else {
401+ let cB = cz
402+ ch(ap, cB, bZ, bT, ci, cj)
403+ }
404+ }
405+ else throw("Strict value is not equal to itself.")
288406 }
289407 else throw("Strict value is not equal to itself.")
290408 }
291409
292410
411+func cC (ap) = {
412+ let cD = cs(ap)
413+ let cE = cD._1
414+ let cF = cD._2
415+ let cw = cD._3
416+ let cG = cD._4
417+ let cH = cD._5
418+ let ci = cD._6
419+ let cI = cD._7
420+ if (cE)
421+ then cu(cF, ap, cH, cw, addressFromStringValue(cG), ci, addressFromStringValue(cI))
422+ else nil
423+ }
293424
294-@Callable(ai)
295-func burn (aS,aT) = {
296- let aN = ah(ai)
297- if ((aN == aN))
298- then $Tuple2([Burn(aS, aT)], aT)
425+
426+func cJ (ap,cK) = {
427+ let cL = cs(ap)
428+ let cE = cL._1
429+ let cF = cL._2
430+ let cw = cL._3
431+ let cG = cL._4
432+ let cH = cL._5
433+ let ci = cL._6
434+ let cI = cL._7
435+ if (cE)
436+ then {
437+ let cM = max([0, ((bL(ap) - cK) - cw)])
438+ if ((cM == cM))
439+ then {
440+ let cf = fraction(cF, cM, 100)
441+ if ((cf == cf))
442+ then {
443+ let cN = (ar(ap) - cf)
444+ if ((cN == cN))
445+ then if ((0 > cN))
446+ then bX(ap, -(cN), cH, addressFromStringValue(cG))
447+ else ch(ap, cN, cH, addressFromStringValue(cG), ci, addressFromStringValue(cI))
448+ else throw("Strict value is not equal to itself.")
449+ }
450+ else throw("Strict value is not equal to itself.")
451+ }
452+ else throw("Strict value is not equal to itself.")
453+ }
454+ else nil
455+ }
456+
457+
458+func cO (cP,cQ) = {
459+ let cR = cJ(aO(this, ae()), cP)
460+ let cS = cJ(aO(this, af()), cQ)
461+ (cR ++ cS)
462+ }
463+
464+
465+func cT (cU,cV,cW,cX) = {
466+ let cY = D(cW, cU)
467+ let cZ = D(cX, cV)
468+ bO(cZ, cY)
469+ }
470+
471+
472+func da (cW,cX,db) = {
473+ let dc = bc()
474+ let dd = parseIntValue(dc[t])
475+ let de = parseIntValue(dc[u])
476+ let df = cT(dd, de, cW, cX)
477+ let bQ = D(cW, dd)
478+ let bP = D(cX, de)
479+ let dg = D(db, b)
480+ let dh = bO(bQ, dg)
481+ let di = bO(bP, dg)
482+[df, dh, di]
483+ }
484+
485+
486+func dj (cW,cX,db) = {
487+ let dk = da(cW, cX, db)
488+[H(dk[0], b), H(dk[1], b), H(dk[2], b)]
489+ }
490+
491+
492+func dl (dm,dn,do,ab) = {
493+ let dc = bc()
494+ let dp = dc[q]
495+ let dq = dc[r]
496+ let dr = dc[s]
497+ let cU = parseIntValue(dc[t])
498+ let cV = parseIntValue(dc[u])
499+ let ds = dc[p]
500+ let dt = valueOrErrorMessage(assetInfo(fromBase58String(dp)), (("Asset " + dp) + " doesn't exist")).quantity
501+ if ((dp != dn))
502+ then throw("Invalid asset passed.")
503+ else {
504+ let du = bL(dq)
505+ let dv = D(du, cU)
506+ let dw = bL(dr)
507+ let dx = D(dw, cV)
508+ let dy = bO(dx, dv)
509+ let dz = H(dy, b)
510+ let dA = D(do, b)
511+ let dB = D(dt, b)
512+ let dC = fraction(dv, dA, dB)
513+ let dD = fraction(dx, dA, dB)
514+ let dE = K(dC, cU, FLOOR)
515+ let dF = K(dD, cV, FLOOR)
516+ let dG = if ((dm == ""))
517+ then nil
518+ else [ScriptTransfer(ab, dE, if ((dq == "WAVES"))
519+ then unit
520+ else fromBase58String(dq)), ScriptTransfer(ab, dF, if ((dr == "WAVES"))
521+ then unit
522+ else fromBase58String(dr)), StringEntry(ad(toString(ab), dm), bH(dE, dF, do, dz, height, lastBlock.timestamp)), IntegerEntry(W(), dz), IntegerEntry(X(height, lastBlock.timestamp), dz)]
523+ $Tuple10(dE, dF, dq, dr, du, dw, dt, dy, ds, dG)
524+ }
525+ }
526+
527+
528+func dH (dm,dI,dJ,dK,dL,dM,ab,dN,dO) = {
529+ let dc = bc()
530+ let dp = fromBase58String(dc[q])
531+ let dP = dc[r]
532+ let dQ = dc[s]
533+ let dR = dc[v]
534+ let dS = dc[w]
535+ let dd = parseIntValue(dc[t])
536+ let de = parseIntValue(dc[u])
537+ let ds = dc[p]
538+ let dt = valueOrErrorMessage(assetInfo(dp), (("Asset " + toBase58String(dp)) + " doesn't exist")).quantity
539+ let dT = toBase58String(valueOrElse(dK, fromBase58String("WAVES")))
540+ let dU = toBase58String(valueOrElse(dM, fromBase58String("WAVES")))
541+ if (if ((dP != dT))
542+ then true
543+ else (dQ != dU))
544+ then throw("Invalid amt or price asset passed.")
545+ else {
546+ let du = if (dN)
547+ then bL(dP)
548+ else (bL(dP) - dJ)
549+ let dw = if (dN)
550+ then bL(dQ)
551+ else (bL(dQ) - dL)
552+ let dV = D(dJ, dd)
553+ let dW = D(dL, de)
554+ let dX = bO(dW, dV)
555+ let dv = D(du, dd)
556+ let dx = D(dw, de)
557+ let dY = if ((dt == 0))
558+ then {
559+ let dy = e
560+ let dZ = e
561+ let dg = pow((dV * dW), 0, toBigInt(5), 1, 0, DOWN)
562+ $Tuple5(H(dg, b), H(dV, dd), H(dW, de), bO((dx + dW), (dv + dV)), dZ)
563+ }
564+ else {
565+ let dy = bO(dx, dv)
566+ let dZ = fraction(R((dy - dX)), d, dy)
567+ let ea = D(dI, b)
568+ if (if ((dy != e))
569+ then (dZ > ea)
570+ else false)
571+ then throw(((("Price slippage " + toString(dZ)) + " exceeded the passed limit of ") + toString(ea)))
572+ else {
573+ let dB = D(dt, b)
574+ let eb = fraction(dV, bR(dx, dv, CEILING), d, CEILING)
575+ let ec = fraction(dW, d, bR(dx, dv, FLOOR), CEILING)
576+ let ed = if ((eb > dW))
577+ then $Tuple2(ec, dW)
578+ else $Tuple2(dV, eb)
579+ let ee = ed._1
580+ let ef = ed._2
581+ let dg = fraction(dB, ef, dx, FLOOR)
582+ $Tuple5(K(dg, b, FLOOR), K(ee, dd, CEILING), K(ef, de, CEILING), dy, dZ)
583+ }
584+ }
585+ let eg = dY._1
586+ let eh = dY._2
587+ let ei = dY._3
588+ let dz = H(dY._4, b)
589+ let ej = H(dY._5, b)
590+ if ((0 >= eg))
591+ then throw("Invalid calculations. LP calculated is less than zero.")
592+ else {
593+ let ek = if (!(dO))
594+ then 0
595+ else eg
596+ let el = (dJ - eh)
597+ let em = (dL - ei)
598+ let en = [IntegerEntry(W(), dz), IntegerEntry(X(height, lastBlock.timestamp), dz), StringEntry(aa(ab, dm), bw(eh, ei, ek, dz, dI, ej, height, lastBlock.timestamp, el, em))]
599+ $Tuple13(eg, ek, dz, du, dw, dt, dp, ds, en, el, em, dK, dM)
600+ }
601+ }
602+ }
603+
604+
605+func eo (ep,eq,dt) = {
606+ let er = G(ep, toBigInt(br))
607+ let es = G(eq, toBigInt(bs))
608+ let et = fraction(pow((er * es), 0, toBigInt(5), 1, 18, DOWN), g, dt)
609+ if ((dt == f))
610+ then f
611+ else et
612+ }
613+
614+
615+func eu (ev,ew,ex) = {
616+ let ey = (toBigInt(bL(bh(bp))) - ev)
617+ let ez = (toBigInt(bL(bh(bq))) - ew)
618+ let eA = (toBigInt(value(assetInfo(bo)).quantity) - ex)
619+ let eB = eo(ey, ez, eA)
620+ eB
621+ }
622+
623+
624+func eC (eD,eE,ex) = {
625+ let ey = (bL(bh(bp)) + eD)
626+ let ez = (bL(bh(bq)) + eE)
627+ let eA = (value(assetInfo(bo)).quantity + ex)
628+ let et = eo(toBigInt(ey), toBigInt(ez), toBigInt(eA))
629+ let eF = [IntegerEntry(ak, height), StringEntry(aj, toString(et))]
630+ $Tuple2(eF, et)
631+ }
632+
633+
634+func eG () = valueOrElse(getBoolean(aV, aH(toString(this))), false)
635+
636+
637+func eH (eI,et) = if ((et >= eI))
638+ then true
639+ else aS(makeString(["updated KLp lower than current KLp", toString(eI), toString(et)], " "))
640+
641+
642+func eJ (eK) = {
643+ let ey = bL(bh(bp))
644+ let ez = bL(bh(bq))
645+ let eL = eK.amount
646+ let eM = fraction(eK.amount, eK.price, b, FLOOR)
647+ let eN = if ((eK.orderType == Buy))
648+ then $Tuple2(eL, -(eM))
649+ else $Tuple2(-(eL), eM)
650+ let eD = eN._1
651+ let eE = eN._2
652+ if (if (if (ba())
653+ then true
654+ else (bn == m))
655+ then true
656+ else (bn == n))
657+ then throw("Exchange operations disabled")
658+ else if (if ((eK.assetPair.amountAsset != bp))
659+ then true
660+ else (eK.assetPair.priceAsset != bq))
661+ then throw("Wrong order assets.")
662+ else {
663+ let eO = valueOrErrorMessage(parseBigInt(valueOrElse(getString(this, aj), "0")), aU("invalid kLp"))
664+ let eP = eC(eD, eE, 0)
665+ let eQ = eP._1
666+ let eR = eP._2
667+ let eS = (eR >= eO)
668+ let eT = makeString(["kLp=", toString(eO), " kLpNew=", toString(eR), " amountAssetBalance=", toString(ey), " priceAssetBalance=", toString(ez), " amountAssetBalanceDelta=", toString(eD), " priceAssetBalanceDelta=", toString(eE), " height=", toString(height)], "")
669+ $Tuple2(eS, eT)
670+ }
671+ }
672+
673+
674+func eU (eV) = if ((size(eV.payments) != 1))
675+ then throw("exactly 1 payment is expected")
676+ else {
677+ let eW = value(eV.payments[0])
678+ let dn = value(eW.assetId)
679+ let eX = eW.amount
680+ let dY = dl(toBase58String(eV.transactionId), toBase58String(dn), eX, eV.caller)
681+ let dE = dY._1
682+ let dF = dY._2
683+ let ds = parseIntValue(dY._9)
684+ let dG = dY._10
685+ if (if (ba())
686+ then true
687+ else (ds == n))
688+ then throw(("Get operation is blocked by admin. Status = " + toString(ds)))
689+ else $Tuple5(dE, dF, eX, dn, dG)
690+ }
691+
692+
693+func eY (eV,dI,dO) = if ((size(eV.payments) != 2))
694+ then throw("exactly 2 payments are expected")
695+ else {
696+ let eZ = value(eV.payments[0])
697+ let fa = value(eV.payments[1])
698+ let fb = dH(toBase58String(eV.transactionId), dI, eZ.amount, eZ.assetId, fa.amount, fa.assetId, toString(eV.caller), false, dO)
699+ let ds = parseIntValue(fb._8)
700+ if (if (if (ba())
701+ then true
702+ else (ds == l))
703+ then true
704+ else (ds == n))
705+ then throw(("Put operation is blocked by admin. Status = " + toString(ds)))
706+ else fb
707+ }
708+
709+
710+func fc (bY) = {
711+ let fd = invoke(aV, "emit", [bY], nil)
712+ if ((fd == fd))
713+ then {
714+ let fe = {
715+ let bV = fd
716+ if ($isInstanceOf(bV, "Address"))
717+ then {
718+ let ff = bV
719+ invoke(ff, "emit", [bY], nil)
720+ }
721+ else unit
722+ }
723+ if ((fe == fe))
724+ then bY
725+ else throw("Strict value is not equal to itself.")
726+ }
727+ else throw("Strict value is not equal to itself.")
728+ }
729+
730+
731+func fg (bY,ai) = {
732+ let fh = if ((ai == 0))
733+ then 0
734+ else fraction(bY, ai, b)
735+ $Tuple2((bY - fh), fh)
736+ }
737+
738+
739+func fi (fj,fk,ab,ac) = {
740+ let fl = (ac == unit)
741+ let fm = bL(bh(bp))
742+ let fn = bL(bh(bq))
743+ let fo = if ((fk == bp))
744+ then true
745+ else if ((fk == bq))
746+ then false
747+ else aS("invalid asset")
748+ let fp = if (fl)
749+ then $Tuple2(fm, fn)
750+ else if (fo)
751+ then $Tuple2((fm - fj), fn)
752+ else $Tuple2(fm, (fn - fj))
753+ let fq = fp._1
754+ let fr = fp._2
755+ let fs = if (fo)
756+ then $Tuple2(fj, 0)
757+ else $Tuple2(0, fj)
758+ let ft = fs._1
759+ let fu = fs._2
760+ let eL = fg(ft, aX)._1
761+ let eM = fg(fu, aX)._1
762+ let fv = fg(fj, aX)
763+ let fw = fv._1
764+ let fh = fv._2
765+ let fx = (fq + eL)
766+ let fy = (fr + eM)
767+ let fz = bO(D(fy, bs), D(fx, br))
768+ let fA = H(fz, b)
769+ let fB = if (fo)
770+ then fq
771+ else fr
772+ let fC = toBigInt(fB)
773+ let fD = toBigInt(valueOrErrorMessage(assetInfo(bo), (("asset " + toBase58String(bo)) + " doesn't exist")).quantity)
774+ let fE = if ((fD > f))
775+ then true
776+ else aS("initial deposit requires all coins")
777+ if ((fE == fE))
778+ then {
779+ let fF = toBigInt(fw)
780+ let fG = max([0, toInt(((fD * (sqrtBigInt((d + ((fF * d) / fC)), 18, 18, DOWN) - d)) / d))])
781+ let en = if (fl)
782+ then nil
783+ else [IntegerEntry(W(), fA), IntegerEntry(X(height, lastBlock.timestamp), fA), StringEntry(aa(toString(value(ab)), toBase58String(value(ac))), bw(ft, fu, fG, fA, 0, 0, height, lastBlock.timestamp, 0, 0))]
784+ let fH = bO(D(fr, bs), D(fq, br))
785+ let fI = H(fH, b)
786+ let fJ = {
787+ let fK = if (fo)
788+ then $Tuple2(ft, fq)
789+ else $Tuple2(fu, fr)
790+ let bY = fK._1
791+ let fL = fK._2
792+ let fM = toInt(fraction(fD, toBigInt((bY / 2)), toBigInt(fL)))
793+ fraction((fG - fM), b, fM)
794+ }
795+ $Tuple5(fG, en, fh, fJ, fo)
796+ }
797+ else throw("Strict value is not equal to itself.")
798+ }
799+
800+
801+func fN (fO,fw,fk,ab,ac) = {
802+ let fl = (ac == unit)
803+ let dc = bc()
804+ let dd = parseIntValue(dc[t])
805+ let de = parseIntValue(dc[u])
806+ let fP = [if ((fk == bo))
807+ then true
808+ else aS("invalid lp asset")]
809+ if ((fP == fP))
810+ then {
811+ let fQ = if ((fO == bp))
812+ then true
813+ else if ((fO == bq))
814+ then false
815+ else aS("invalid asset")
816+ let fR = if (fQ)
817+ then toBigInt(bL(bh(bp)))
818+ else toBigInt(bL(bh(bq)))
819+ let fS = if (fQ)
820+ then dd
821+ else de
822+ let fT = bL(bh(bp))
823+ let fU = bL(bh(bq))
824+ let fV = if (fQ)
825+ then fT
826+ else fU
827+ let fW = toBigInt(fV)
828+ let fD = toBigInt(valueOrErrorMessage(assetInfo(bo), (("asset " + toBase58String(bo)) + " doesn't exist")).quantity)
829+ let fX = toBigInt(fw)
830+ let fY = max([0, toInt(((fR * (d - pow((d - ((fX * d) / fD)), 18, h, 0, 18, DOWN))) / d))])
831+ let fZ = fg(fY, aZ)
832+ let ga = fZ._1
833+ let fh = fZ._2
834+ let gb = if (fQ)
835+ then $Tuple4(ga, 0, (fT - fY), fU)
836+ else $Tuple4(0, ga, fT, (fU - fY))
837+ let gc = gb._1
838+ let gd = gb._2
839+ let ge = gb._3
840+ let gf = gb._4
841+ let fz = bO(D(gf, bs), D(ge, br))
842+ let fA = H(fz, b)
843+ let en = if (fl)
844+ then nil
845+ else [StringEntry(ad(toString(value(ab)), toBase58String(value(ac))), bH(gc, gd, fw, fA, height, lastBlock.timestamp)), IntegerEntry(W(), fA), IntegerEntry(X(height, lastBlock.timestamp), fA)]
846+ let fH = bO(D(fU, bs), D(fT, br))
847+ let fI = H(fH, b)
848+ let fJ = {
849+ let gg = (toInt(fraction(fR, fX, fD)) * 2)
850+ fraction((ga - gg), b, gg)
851+ }
852+ $Tuple5(ga, en, fh, fJ, fQ)
853+ }
854+ else throw("Strict value is not equal to itself.")
855+ }
856+
857+
858+func gh () = {
859+ let bV = getString(U())
860+ if ($isInstanceOf(bV, "String"))
861+ then {
862+ let gi = bV
863+ fromBase58String(gi)
864+ }
865+ else if ($isInstanceOf(bV, "Unit"))
866+ then unit
867+ else throw("Match error")
868+ }
869+
870+
871+func gj () = {
872+ let bV = getString(V())
873+ if ($isInstanceOf(bV, "String"))
874+ then {
875+ let gi = bV
876+ fromBase58String(gi)
877+ }
878+ else if ($isInstanceOf(bV, "Unit"))
879+ then unit
880+ else throw("Match error")
881+ }
882+
883+
884+func gk (eV) = {
885+ let bV = gh()
886+ if ($isInstanceOf(bV, "ByteVector"))
887+ then {
888+ let gl = bV
889+ (eV.callerPublicKey == gl)
890+ }
891+ else if ($isInstanceOf(bV, "Unit"))
892+ then (eV.caller == this)
893+ else throw("Match error")
894+ }
895+
896+
897+func gm (eV) = {
898+ let gn = throw("Permission denied")
899+ let bV = gh()
900+ if ($isInstanceOf(bV, "ByteVector"))
901+ then {
902+ let gl = bV
903+ if ((eV.callerPublicKey == gl))
904+ then true
905+ else gn
906+ }
907+ else if ($isInstanceOf(bV, "Unit"))
908+ then if ((eV.caller == this))
909+ then true
910+ else gn
911+ else throw("Match error")
912+ }
913+
914+
915+@Callable(eV)
916+func rebalance () = (cC(aO(this, ae())) ++ cC(aO(this, af())))
917+
918+
919+
920+@Callable(eV)
921+func calculateAmountOutForSwapREADONLY (go,gp,gq) = {
922+ let gr = if ((gp == false))
923+ then {
924+ let gs = aO(this, af())
925+ let gt = aO(this, ae())
926+ $Tuple2(gs, gt)
927+ }
928+ else {
929+ let gs = aO(this, ae())
930+ let gt = aO(this, af())
931+ $Tuple2(gs, gt)
932+ }
933+ let gs = gr._1
934+ let gt = gr._2
935+ let gu = bL(gt)
936+ let gv = bL(gs)
937+ let gw = fraction(gv, go, (gu + go))
938+ let gx = (toBigInt(gu) * toBigInt(gv))
939+ let gy = (((toBigInt(bL(gt)) + toBigInt(go)) + toBigInt(gq)) * (toBigInt(bL(gs)) - toBigInt(gw)))
940+ let gz = if ((gy >= gx))
941+ then true
942+ else throw("new K is fewer error")
943+ if ((gz == gz))
944+ then $Tuple2(nil, gw)
299945 else throw("Strict value is not equal to itself.")
300946 }
301947
302948
303949
304-@Callable(ai)
305-func create (aV,aW,aX,aY,aZ) = {
306- let ba = "STAKING_LP"
307- let E = n(aV)
308- let bb = [aj(ai), if (isDefined(aA(E)))
950+@Callable(eV)
951+func calculateAmountOutForSwapAndSendTokens (go,gp,gA,gB,gq) = {
952+ let gC = {
953+ let aY = invoke(aV, "getSwapContractREADONLY", nil, nil)
954+ if ($isInstanceOf(aY, "String"))
955+ then aY
956+ else throw(($getType(aY) + " couldn't be cast to String"))
957+ }
958+ let fP = [if ((value(eV.payments[0]).amount >= go))
309959 then true
310- else h("invalid base asset")]
311- if ((bb == bb))
960+ else aS("Wrong amount"), if ((eV.caller == addressFromStringValue(gC)))
961+ then true
962+ else aS("Permission denied")]
963+ if ((fP == fP))
312964 then {
313- let bc = [IntegerEntry(H(E), 0)]
314- if ((aW == ""))
965+ let eW = value(eV.payments[0])
966+ let gt = bh(eW.assetId)
967+ let gs = if ((gp == false))
968+ then aO(this, af())
969+ else aO(this, ae())
970+ let gu = (bL(gt) - value(eV.payments[0]).amount)
971+ let gv = bL(gs)
972+ let gw = fraction(gv, go, (gu + go))
973+ let gx = (toBigInt(gu) * toBigInt(gv))
974+ let gy = ((toBigInt(bL(gt)) + toBigInt(gq)) * (toBigInt(bL(gs)) - toBigInt(gw)))
975+ let gz = if ((gy >= gx))
976+ then true
977+ else throw("new K is fewer error")
978+ if ((gz == gz))
315979 then {
316- let bd = 1
317- let be = Issue(aX, aY, bd, b, true)
318- let bf = calculateAssetId(be)
319- let bg = Burn(bf, bd)
320- let bh = toBase58String(bf)
321- let bi = invoke(as, "createOrUpdate", [bh, aZ, false], nil)
322- if ((bi == bi))
980+ let gD = if ((gw >= gA))
981+ then true
982+ else throw("Exchange result is fewer coins than expected")
983+ if ((gD == gD))
323984 then {
324- let bj = invoke(as, "addLabel", [bh, ba], nil)
325- if ((bj == bj))
326- then $Tuple2((bc ++ [be, bg, StringEntry(D(E), bh), StringEntry(F(bf), aV)]), bh)
985+ let gE = cC(gt)
986+ if ((gE == gE))
987+ then {
988+ let gF = cJ(gs, gw)
989+ if ((gF == gF))
990+ then $Tuple2(((gF ++ gE) ++ [ScriptTransfer(addressFromStringValue(gB), gw, bf(gs))]), gw)
991+ else throw("Strict value is not equal to itself.")
992+ }
327993 else throw("Strict value is not equal to itself.")
328994 }
329995 else throw("Strict value is not equal to itself.")
330- }
331- else {
332- let G = fromBase58String(aW)
333- let aI = valueOrErrorMessage(assetInfo(G), f("invalid share asset id"))
334- let bk = if ((aI.issuer == ao))
335- then true
336- else h("invalid share asset id issuer")
337- if ((bk == bk))
338- then $Tuple2((bc ++ [StringEntry(D(E), aW), StringEntry(F(G), aV)]), aW)
339- else throw("Strict value is not equal to itself.")
340- }
341- }
342- else throw("Strict value is not equal to itself.")
343- }
344-
345-
346-
347-@Callable(ai)
348-func put () = {
349- let bl = if ((size(ai.payments) == 1))
350- then ai.payments[0]
351- else h("exactly 1 payment is expected")
352- let E = bl.assetId
353- let N = ai.caller
354- let bb = [am(ai), if (isDefined(getString(D(E))))
355- then true
356- else h("invalid asset")]
357- if ((bb == bb))
358- then {
359- let bm = valueOrErrorMessage(aA(E), f("invalid asset"))
360- let bn = bm._1
361- let aH = bm._2
362- let J = value(getInteger(H(E)))
363- let bo = getInteger(O(E, N))
364- let bp = if ((bo == unit))
365- then unit
366- else {
367- let bq = value(bo)
368- if ((bq == J))
369- then unit
370- else invoke(this, "claimShareAsset", [p(E), toString(N)], nil)
371- }
372- if ((bp == bp))
373- then {
374- let br = valueOrElse(getInteger(K(E)), 0)
375- let bs = valueOrElse(parseInt(split(value(getString(M(E, N))), a)[1]), 0)
376- $Tuple2([IntegerEntry(K(E), (br + bl.amount)), StringEntry(M(E, N), makeString(["%d%d", toString((bs + bl.amount)), toString(lastBlock.timestamp)], a)), IntegerEntry(O(E, N), J), StringEntry(X(E, "put", J, N, ai.transactionId), makeString(["%d%d%d", toString(bl.amount), toString(lastBlock.timestamp), toString(bs)], a))], unit)
377996 }
378997 else throw("Strict value is not equal to itself.")
379998 }
380999 else throw("Strict value is not equal to itself.")
3811000 }
3821001
3831002
3841003
385-@Callable(ai)
386-func claimShareAsset (aV,bt) = {
387- let bb = [am(ai)]
388- if ((bb == bb))
1004+@Callable(eV)
1005+func setManager (gG) = {
1006+ let gH = gm(eV)
1007+ if ((gH == gH))
3891008 then {
390- let N = if ((bt == ""))
391- then ai.caller
392- else {
393- let aN = ah(ai)
394- if ((aN == aN))
395- then valueOrErrorMessage(addressFromString(bt), f("invalid user address"))
396- else throw("Strict value is not equal to itself.")
397- }
398- if ((N == N))
1009+ let gI = fromBase58String(gG)
1010+ if ((gI == gI))
1011+ then [StringEntry(V(), gG)]
1012+ else throw("Strict value is not equal to itself.")
1013+ }
1014+ else throw("Strict value is not equal to itself.")
1015+ }
1016+
1017+
1018+
1019+@Callable(eV)
1020+func confirmManager () = {
1021+ let gJ = gj()
1022+ let gK = if (isDefined(gJ))
1023+ then true
1024+ else throw("No pending manager")
1025+ if ((gK == gK))
1026+ then {
1027+ let gL = if ((eV.callerPublicKey == value(gJ)))
1028+ then true
1029+ else throw("You are not pending manager")
1030+ if ((gL == gL))
1031+ then [StringEntry(U(), toBase58String(value(gJ))), DeleteEntry(V())]
1032+ else throw("Strict value is not equal to itself.")
1033+ }
1034+ else throw("Strict value is not equal to itself.")
1035+ }
1036+
1037+
1038+
1039+@Callable(eV)
1040+func put (dI,gM) = if ((0 > dI))
1041+ then throw("Invalid slippageTolerance passed")
1042+ else {
1043+ let fb = eY(eV, dI, true)
1044+ let ek = fb._2
1045+ let dp = fb._7
1046+ let dG = fb._9
1047+ let el = fb._10
1048+ let em = fb._11
1049+ let gN = fb._12
1050+ let gO = fb._13
1051+ let eZ = toBigInt(value(eV.payments[0]).amount)
1052+ let fa = toBigInt(value(eV.payments[1]).amount)
1053+ let eB = eu(eZ, fa, toBigInt(0))
1054+ if ((eB == eB))
1055+ then {
1056+ let fd = invoke(aV, "emit", [ek], nil)
1057+ if ((fd == fd))
1058+ then {
1059+ let fe = {
1060+ let bV = fd
1061+ if ($isInstanceOf(bV, "Address"))
1062+ then {
1063+ let ff = bV
1064+ invoke(ff, "emit", [ek], nil)
1065+ }
1066+ else unit
1067+ }
1068+ if ((fe == fe))
1069+ then {
1070+ let gP = if ((el > 0))
1071+ then invoke(bv, "put", nil, [AttachedPayment(gN, el)])
1072+ else nil
1073+ if ((gP == gP))
1074+ then {
1075+ let gQ = if ((em > 0))
1076+ then invoke(bv, "put", nil, [AttachedPayment(gO, em)])
1077+ else nil
1078+ if ((gQ == gQ))
1079+ then {
1080+ let gR = if (gM)
1081+ then {
1082+ let gS = invoke(bu, "stake", nil, [AttachedPayment(dp, ek)])
1083+ if ((gS == gS))
1084+ then nil
1085+ else throw("Strict value is not equal to itself.")
1086+ }
1087+ else [ScriptTransfer(eV.caller, ek, dp)]
1088+ let gT = eC(0, 0, 0)
1089+ if ((gT == gT))
1090+ then {
1091+ let et = gT._2
1092+ let gU = gT._1
1093+ let gV = eH(eB, et)
1094+ if ((gV == gV))
1095+ then {
1096+ let gW = invoke(this, "rebalance", nil, nil)
1097+ if ((gW == gW))
1098+ then ((dG ++ gR) ++ gU)
1099+ else throw("Strict value is not equal to itself.")
1100+ }
1101+ else throw("Strict value is not equal to itself.")
1102+ }
1103+ else throw("Strict value is not equal to itself.")
1104+ }
1105+ else throw("Strict value is not equal to itself.")
1106+ }
1107+ else throw("Strict value is not equal to itself.")
1108+ }
1109+ else throw("Strict value is not equal to itself.")
1110+ }
1111+ else throw("Strict value is not equal to itself.")
1112+ }
1113+ else throw("Strict value is not equal to itself.")
1114+ }
1115+
1116+
1117+
1118+@Callable(eV)
1119+func putForFree (gX) = if ((0 > gX))
1120+ then throw("Invalid value passed")
1121+ else {
1122+ let fb = eY(eV, gX, false)
1123+ let dG = fb._9
1124+ let eZ = toBigInt(value(eV.payments[0]).amount)
1125+ let fa = toBigInt(value(eV.payments[1]).amount)
1126+ let eB = eu(eZ, fa, toBigInt(0))
1127+ if ((eB == eB))
1128+ then {
1129+ let gY = eC(0, 0, 0)
1130+ let gU = gY._1
1131+ let et = gY._2
1132+ let gV = eH(eB, et)
1133+ if ((gV == gV))
1134+ then (dG ++ gU)
1135+ else throw("Strict value is not equal to itself.")
1136+ }
1137+ else throw("Strict value is not equal to itself.")
1138+ }
1139+
1140+
1141+
1142+@Callable(eV)
1143+func putOneTkn (gZ,ha) = {
1144+ let hb = {
1145+ let aY = invoke(aV, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
1146+ if ($isInstanceOf(aY, "Boolean"))
1147+ then aY
1148+ else throw(($getType(aY) + " couldn't be cast to Boolean"))
1149+ }
1150+ let hc = if (if (if (ba())
1151+ then true
1152+ else (bn == l))
1153+ then true
1154+ else (bn == n))
1155+ then true
1156+ else hb
1157+ let fP = [if (if (!(hc))
1158+ then true
1159+ else gk(eV))
1160+ then true
1161+ else aS("put operation is blocked by admin"), if ((size(eV.payments) == 1))
1162+ then true
1163+ else aS("exactly 1 payment are expected")]
1164+ if ((fP == fP))
1165+ then {
1166+ let hd = eV.payments[0]
1167+ let fk = hd.assetId
1168+ let fj = hd.amount
1169+ let eB = if ((fk == bp))
1170+ then eu(toBigInt(fj), toBigInt(0), toBigInt(0))
1171+ else if ((fk == bq))
1172+ then eu(toBigInt(0), toBigInt(fj), toBigInt(0))
1173+ else aS("payment asset is not supported")
1174+ if ((eB == eB))
3991175 then {
400- let E = n(aV)
401- let G = value(n(valueOrErrorMessage(getString(D(E)), f("invalid base asset id"))))
402- if ((G == G))
1176+ let ab = eV.caller
1177+ let ac = eV.transactionId
1178+ let he = fi(fj, fk, ab, ac)
1179+ if ((he == he))
4031180 then {
404- let J = valueOrErrorMessage(getInteger(H(E)), f("invalid period"))
405- if ((J == J))
1181+ let fo = he._5
1182+ let hf = he._4
1183+ let fh = he._3
1184+ let en = he._2
1185+ let hg = he._1
1186+ let hh = if (if ((gZ > 0))
1187+ then (gZ > hg)
1188+ else false)
1189+ then aS(makeString(["amount to receive is less than ", toString(gZ)], ""))
1190+ else hg
1191+ let fd = fc(hh)
1192+ if ((fd == fd))
4061193 then {
407- let bs = valueOrElse(parseInt(split(value(getString(M(E, N))), a)[1]), 0)
408- let bu = if ((bs > 0))
409- then true
410- else h("nothing to claim")
411- if ((bu == bu))
1194+ let gR = if (ha)
4121195 then {
413- let bq = valueOrErrorMessage(getInteger(O(E, N)), f("failed to get period"))
414- let bv = if ((J > bq))
415- then true
416- else h("invalid period")
417- if ((bv == bv))
418- then {
419- let aL = toBigInt(valueOrErrorMessage(getBinary(T(E, bq)), f("failed to get price")))
420- let bw = toInt(fraction(toBigInt(bs), e, aL))
421- $Tuple2([StringEntry(M(E, N), makeString(["%d%d", toString(0), toString(lastBlock.timestamp)], a)), DeleteEntry(O(E, N)), ScriptTransfer(N, bw, G), StringEntry(X(E, "claimShareAsset", J, N, ai.transactionId), makeString(["%d%d%d%d", toString(bw), toString(lastBlock.timestamp), toString(aL), toString(bs)], a))], unit)
422- }
1196+ let hi = invoke(bu, "stake", nil, [AttachedPayment(bo, hh)])
1197+ if ((hi == hi))
1198+ then nil
1199+ else throw("Strict value is not equal to itself.")
1200+ }
1201+ else [ScriptTransfer(eV.caller, hh, bo)]
1202+ let hj = if ((fh > 0))
1203+ then [ScriptTransfer(aW, fh, fk)]
1204+ else nil
1205+ let hk = if ((this == aW))
1206+ then $Tuple2(0, 0)
1207+ else if (fo)
1208+ then $Tuple2(-(fh), 0)
1209+ else $Tuple2(0, -(fh))
1210+ let eD = hk._1
1211+ let eE = hk._2
1212+ let hl = eC(eD, eE, 0)
1213+ let gU = hl._1
1214+ let et = hl._2
1215+ let eO = value(getString(aj))
1216+ let gV = eH(eB, et)
1217+ if ((gV == gV))
1218+ then {
1219+ let gW = invoke(this, "rebalance", nil, nil)
1220+ if ((gW == gW))
1221+ then $Tuple2((((en ++ gR) ++ hj) ++ gU), hh)
4231222 else throw("Strict value is not equal to itself.")
4241223 }
4251224 else throw("Strict value is not equal to itself.")
4261225 }
4271226 else throw("Strict value is not equal to itself.")
4281227 }
4291228 else throw("Strict value is not equal to itself.")
4301229 }
4311230 else throw("Strict value is not equal to itself.")
4321231 }
4331232 else throw("Strict value is not equal to itself.")
4341233 }
4351234
4361235
4371236
438-@Callable(ai)
439-func get () = {
440- let bb = [am(ai)]
441- if ((bb == bb))
1237+@Callable(eV)
1238+func putOneTknREADONLY (fk,fj) = {
1239+ let hm = fi(fj, bf(fk), unit, unit)
1240+ let hg = hm._1
1241+ let en = hm._2
1242+ let fh = hm._3
1243+ let hf = hm._4
1244+ let fo = hm._5
1245+ $Tuple2(nil, $Tuple3(hg, fh, hf))
1246+ }
1247+
1248+
1249+
1250+@Callable(eV)
1251+func getOneTkn (hn,gZ) = {
1252+ let hb = {
1253+ let aY = invoke(aV, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
1254+ if ($isInstanceOf(aY, "Boolean"))
1255+ then aY
1256+ else throw(($getType(aY) + " couldn't be cast to Boolean"))
1257+ }
1258+ let ho = if (if (ba())
1259+ then true
1260+ else (bn == n))
1261+ then true
1262+ else hb
1263+ let fP = [if (if (!(ho))
1264+ then true
1265+ else gk(eV))
1266+ then true
1267+ else aS("get operation is blocked by admin"), if ((size(eV.payments) == 1))
1268+ then true
1269+ else aS("exactly 1 payment are expected")]
1270+ if ((fP == fP))
4421271 then {
443- let bl = if ((size(ai.payments) == 1))
444- then ai.payments[0]
445- else h("exactly 1 payment is expected")
446- let G = bl.assetId
447- let E = value(n(valueOrErrorMessage(getString(F(G)), f("invalid share asset id"))))
448- if ((E == E))
1272+ let fO = bf(hn)
1273+ let hd = eV.payments[0]
1274+ let fk = hd.assetId
1275+ let fw = hd.amount
1276+ let eB = eu(toBigInt(0), toBigInt(0), toBigInt(0))
1277+ if ((eB == eB))
4491278 then {
450- let N = ai.caller
451- let bx = valueOrErrorMessage(aA(E), f("invalid asset"))
452- let bn = bx._1
453- let aH = bx._2
454- let J = value(getInteger(H(E)))
455- let by = getInteger(Q(E, N))
456- let bz = if ((by == unit))
457- then unit
458- else {
459- let bA = value(by)
460- if ((bA == J))
461- then unit
462- else invoke(this, "claimBaseAsset", [p(E), toString(N)], nil)
463- }
464- if ((bz == bz))
1279+ let ab = eV.caller
1280+ let ac = eV.transactionId
1281+ let hp = fN(fO, fw, fk, ab, ac)
1282+ if ((hp == hp))
4651283 then {
466- let bB = valueOrElse(getInteger(L(E)), 0)
467- let bC = valueOrElse(parseInt(split(value(getString(P(E, N))), a)[1]), 0)
468- $Tuple2([IntegerEntry(L(E), (bB + bl.amount)), StringEntry(P(E, N), makeString(["%d%d", toString((bC + bl.amount)), toString(lastBlock.timestamp)], a)), IntegerEntry(Q(E, N), J), StringEntry(X(E, "get", J, N, ai.transactionId), makeString(["%d%d%d", toString(bl.amount), toString(lastBlock.timestamp), toString(bC)], a))], unit)
1284+ let fQ = hp._5
1285+ let hf = hp._4
1286+ let fh = hp._3
1287+ let en = hp._2
1288+ let hq = hp._1
1289+ let bY = if (if ((gZ > 0))
1290+ then (gZ > hq)
1291+ else false)
1292+ then aS(makeString(["amount to receive is less than ", toString(gZ)], ""))
1293+ else hq
1294+ let hr = invoke(aV, "burn", [fw], [AttachedPayment(fk, fw)])
1295+ if ((hr == hr))
1296+ then {
1297+ let gF = cJ(hn, (bY + max([0, fh])))
1298+ let hs = [ScriptTransfer(ab, bY, fO)]
1299+ let hj = if ((fh > 0))
1300+ then [ScriptTransfer(aW, fh, fO)]
1301+ else nil
1302+ let ht = {
1303+ let hu = if ((this == aW))
1304+ then 0
1305+ else fh
1306+ if (fQ)
1307+ then $Tuple2(-((bY + hu)), 0)
1308+ else $Tuple2(0, -((bY + hu)))
1309+ }
1310+ let eD = ht._1
1311+ let eE = ht._2
1312+ let hv = eC(eD, eE, 0)
1313+ let gU = hv._1
1314+ let et = hv._2
1315+ let gV = eH(eB, et)
1316+ if ((gV == gV))
1317+ then $Tuple2(((((en ++ gF) ++ hs) ++ hj) ++ gU), bY)
1318+ else throw("Strict value is not equal to itself.")
1319+ }
1320+ else throw("Strict value is not equal to itself.")
4691321 }
4701322 else throw("Strict value is not equal to itself.")
4711323 }
4721324 else throw("Strict value is not equal to itself.")
4731325 }
4741326 else throw("Strict value is not equal to itself.")
4751327 }
4761328
4771329
4781330
479-@Callable(ai)
480-func claimBaseAsset (aV,bt) = {
481- let bb = [am(ai)]
482- if ((bb == bb))
1331+@Callable(eV)
1332+func getOneTknREADONLY (fO,fw) = {
1333+ let hw = fN(bf(fO), fw, bo, unit, unit)
1334+ let hq = hw._1
1335+ let en = hw._2
1336+ let fh = hw._3
1337+ let hf = hw._4
1338+ let fQ = hw._5
1339+ $Tuple2(nil, $Tuple3(hq, fh, hf))
1340+ }
1341+
1342+
1343+
1344+@Callable(eV)
1345+func unstakeAndGetOneTkn (hx,hn,gZ) = {
1346+ let hb = {
1347+ let aY = invoke(aV, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
1348+ if ($isInstanceOf(aY, "Boolean"))
1349+ then aY
1350+ else throw(($getType(aY) + " couldn't be cast to Boolean"))
1351+ }
1352+ let ho = if (if (ba())
1353+ then true
1354+ else (bn == n))
1355+ then true
1356+ else hb
1357+ let fP = [if (if (!(ho))
1358+ then true
1359+ else gk(eV))
1360+ then true
1361+ else aS("get operation is blocked by admin"), if ((size(eV.payments) == 0))
1362+ then true
1363+ else aS("no payments are expected")]
1364+ if ((fP == fP))
4831365 then {
484- let N = if ((bt == ""))
485- then ai.caller
486- else {
487- let aN = ah(ai)
488- if ((aN == aN))
489- then valueOrErrorMessage(addressFromString(bt), f("invalid user address"))
490- else throw("Strict value is not equal to itself.")
491- }
492- if ((N == N))
1366+ let fO = bf(hn)
1367+ let ab = eV.caller
1368+ let ac = eV.transactionId
1369+ let eB = eu(toBigInt(0), toBigInt(0), toBigInt(0))
1370+ if ((eB == eB))
4931371 then {
494- let E = n(aV)
495- let G = value(n(valueOrErrorMessage(getString(D(E)), f("invalid base asset id"))))
496- if ((G == G))
1372+ let hy = invoke(bu, "unstake", [toBase58String(bo), hx], nil)
1373+ if ((hy == hy))
4971374 then {
498- let J = valueOrErrorMessage(getInteger(H(E)), f("invalid period"))
499- if ((J == J))
1375+ let hz = fN(fO, hx, bo, ab, ac)
1376+ if ((hz == hz))
5001377 then {
501- let bC = valueOrElse(parseInt(split(value(getString(P(E, N))), a)[1]), 0)
502- let bA = valueOrErrorMessage(getInteger(Q(E, N)), f("failed to get period"))
503- let bv = if ((J > bA))
504- then true
505- else h("invalid period")
506- if ((bv == bv))
1378+ let fQ = hz._5
1379+ let hf = hz._4
1380+ let fh = hz._3
1381+ let en = hz._2
1382+ let hq = hz._1
1383+ let bY = if (if ((gZ > 0))
1384+ then (gZ > hq)
1385+ else false)
1386+ then aS(makeString(["amount to receive is less than ", toString(gZ)], ""))
1387+ else hq
1388+ let hr = invoke(aV, "burn", [hx], [AttachedPayment(bo, hx)])
1389+ if ((hr == hr))
5071390 then {
508- let aL = toBigInt(valueOrErrorMessage(getBinary(V(E, bA)), f("failed to get price")))
509- let bD = toInt(fraction(toBigInt(bC), aL, e))
510- $Tuple2([StringEntry(P(E, N), makeString(["%d%d", toString(0), toString(lastBlock.timestamp)], a)), DeleteEntry(Q(E, N)), ScriptTransfer(N, bD, E), StringEntry(X(E, "claimBaseAsset", J, N, ai.transactionId), makeString(["%d%d%d%d", toString(bD), toString(lastBlock.timestamp), toString(aL), toString(bA)], a))], unit)
1391+ let gF = cJ(hn, (bY + max([0, fh])))
1392+ let hs = [ScriptTransfer(eV.caller, bY, fO)]
1393+ let hj = if ((fh > 0))
1394+ then [ScriptTransfer(aW, fh, fO)]
1395+ else nil
1396+ let hA = {
1397+ let hu = if ((this == aW))
1398+ then 0
1399+ else fh
1400+ if (fQ)
1401+ then $Tuple2(-((bY + hu)), 0)
1402+ else $Tuple2(0, -((bY + hu)))
1403+ }
1404+ let eD = hA._1
1405+ let eE = hA._2
1406+ let hB = eC(eD, eE, 0)
1407+ let gU = hB._1
1408+ let et = hB._2
1409+ let gV = eH(eB, et)
1410+ if ((gV == gV))
1411+ then $Tuple2(((((en ++ gF) ++ hs) ++ hj) ++ gU), bY)
1412+ else throw("Strict value is not equal to itself.")
5111413 }
5121414 else throw("Strict value is not equal to itself.")
5131415 }
5141416 else throw("Strict value is not equal to itself.")
5151417 }
5161418 else throw("Strict value is not equal to itself.")
5171419 }
5181420 else throw("Strict value is not equal to itself.")
5191421 }
5201422 else throw("Strict value is not equal to itself.")
5211423 }
5221424
5231425
5241426
525-@Callable(ai)
526-func finalize (aV) = {
527- let bb = [am(ai)]
528- if ((bb == bb))
1427+@Callable(eV)
1428+func get () = {
1429+ let dY = eU(eV)
1430+ let dE = dY._1
1431+ let dF = dY._2
1432+ let eX = dY._3
1433+ let dn = dY._4
1434+ let dG = dY._5
1435+ let gF = cO(dE, dF)
1436+ let eB = eu(toBigInt(0), toBigInt(0), toBigInt(0))
1437+ if ((eB == eB))
5291438 then {
530- let E = n(aV)
531- let G = value(n(valueOrErrorMessage(getString(D(E)), f("invalid base asset id"))))
532- if ((G == G))
1439+ let hC = invoke(aV, "burn", [eX], [AttachedPayment(dn, eX)])
1440+ if ((hC == hC))
5331441 then {
534- let aI = valueOrErrorMessage(assetInfo(G), f("invalid share asset id"))
535- let J = valueOrErrorMessage(getInteger(H(E)), f("invalid period"))
536- if ((J == J))
1442+ let hD = eC(-(dE), -(dF), 0)
1443+ let gU = hD._1
1444+ let et = hD._2
1445+ let gV = eH(eB, et)
1446+ if ((gV == gV))
1447+ then ((gF ++ dG) ++ gU)
1448+ else throw("Strict value is not equal to itself.")
1449+ }
1450+ else throw("Strict value is not equal to itself.")
1451+ }
1452+ else throw("Strict value is not equal to itself.")
1453+ }
1454+
1455+
1456+
1457+@Callable(eV)
1458+func getNoLess (hE,hF) = {
1459+ let dY = eU(eV)
1460+ let dE = dY._1
1461+ let dF = dY._2
1462+ let eX = dY._3
1463+ let dn = dY._4
1464+ let dG = dY._5
1465+ if ((hE > dE))
1466+ then throw(((("noLessThenAmtAsset failed: " + toString(dE)) + " < ") + toString(hE)))
1467+ else if ((hF > dF))
1468+ then throw(((("noLessThenPriceAsset failed: " + toString(dF)) + " < ") + toString(hF)))
1469+ else {
1470+ let gF = cO(dE, dF)
1471+ let eB = eu(toBigInt(0), toBigInt(0), toBigInt(0))
1472+ if ((eB == eB))
1473+ then {
1474+ let hC = invoke(aV, "burn", [eX], [AttachedPayment(dn, eX)])
1475+ if ((hC == hC))
1476+ then {
1477+ let hG = eC(-(dE), -(dF), 0)
1478+ let gU = hG._1
1479+ let et = hG._2
1480+ let gV = eH(eB, et)
1481+ if ((gV == gV))
1482+ then ((gF ++ dG) ++ gU)
1483+ else throw("Strict value is not equal to itself.")
1484+ }
1485+ else throw("Strict value is not equal to itself.")
1486+ }
1487+ else throw("Strict value is not equal to itself.")
1488+ }
1489+ }
1490+
1491+
1492+
1493+@Callable(eV)
1494+func unstakeAndGet (bY) = {
1495+ let hH = if ((size(eV.payments) != 0))
1496+ then throw("No payments are expected")
1497+ else true
1498+ if ((hH == hH))
1499+ then {
1500+ let dc = bc()
1501+ let dp = fromBase58String(dc[q])
1502+ let eB = eu(toBigInt(0), toBigInt(0), toBigInt(0))
1503+ if ((eB == eB))
1504+ then {
1505+ let hy = invoke(bu, "unstake", [toBase58String(dp), bY], nil)
1506+ if ((hy == hy))
5371507 then {
538- let bE = getInteger(I(E, J))
539- let bF = if ((bE == unit))
540- then unit
541- else {
542- let bG = (height - value(bE))
543- let bH = max([0, (aw - bG)])
544- if ((bH == 0))
545- then unit
546- else h(makeString(["finalization will be possible in ", toString(bH), " blocks"], ""))
547- }
548- if ((bF == bF))
1508+ let dY = dl(toBase58String(eV.transactionId), toBase58String(dp), bY, eV.caller)
1509+ let dE = dY._1
1510+ let dF = dY._2
1511+ let ds = parseIntValue(dY._9)
1512+ let dG = dY._10
1513+ let gF = cO(dE, dF)
1514+ let hI = if (if (ba())
1515+ then true
1516+ else (ds == n))
1517+ then throw(("Get operation is blocked by admin. Status = " + toString(ds)))
1518+ else true
1519+ if ((hI == hI))
5491520 then {
550- let bI = valueOrErrorMessage(aA(E), f("invalid asset"))
551- let bn = bI._1
552- let aH = bI._2
553- let bJ = valueOrErrorMessage({
554- let aF = invoke(ap, "claimWxDoNotThrow", [p(aH)], nil)
555- if ($isInstanceOf(aF, "Int"))
556- then aF
557- else unit
558- }, f("invalid claimWx result"))
559- if ((bJ == bJ))
1521+ let hC = invoke(aV, "burn", [bY], [AttachedPayment(dp, bY)])
1522+ if ((hC == hC))
5601523 then {
561- let br = valueOrElse(getInteger(K(E)), 0)
562- let bB = valueOrElse(getInteger(L(E)), 0)
563- let bK = {
564- let bL = if (if ((bJ > 0))
565- then true
566- else (br > 0))
567- then true
568- else (bB > 0)
569- if (bL)
570- then true
571- else h("nothing to finalize")
572- }
573- if ((bK == bK))
574- then {
575- let bM = if ((bJ > 0))
576- then {
577- let bN = fraction(bJ, az, ax)
578- let bO = (bJ - bN)
579- let bP = invoke(aq, "userMaxDurationREADONLY", [toString(this)], nil)
580- let bQ = if ((bN > 0))
581- then {
582- let ad = bP
583- if (if (if ($isInstanceOf(ad._1, "String"))
584- then $isInstanceOf(ad._2, "Int")
585- else false)
586- then $isInstanceOf(ad, "(String, Int)")
587- else false)
588- then {
589- let bR = ad._1
590- let bS = ad._2
591- if ((bN > 0))
592- then invoke(aq, bR, [bS], [AttachedPayment(au, bN)])
593- else unit
594- }
595- else h("invalid lock params")
596- }
597- else unit
598- if ((bQ == bQ))
599- then {
600- let bT = if ((bO > 0))
601- then {
602- let bU = au
603- let bV = 0
604- let bW = p(at)
605- let bX = toString(this)
606- valueOrErrorMessage({
607- let aF = invoke(ar, "swap", [bV, bW, bX], [AttachedPayment(bU, bO)])
608- if ($isInstanceOf(aF, "Int"))
609- then aF
610- else unit
611- }, f("invalid swap result"))
612- }
613- else 0
614- if ((bT == bT))
615- then {
616- let bY = if ((bT > 0))
617- then {
618- let bZ = 0
619- let ca = true
620- valueOrErrorMessage({
621- let aF = invoke(bn, "putOneTknV2", [bZ, ca], [AttachedPayment(at, bT)])
622- if ($isInstanceOf(aF, "Int"))
623- then aF
624- else unit
625- }, f("invalid putOneTknV2 result"))
626- }
627- else 0
628- if ((bY == bY))
629- then bY
630- else throw("Strict value is not equal to itself.")
631- }
632- else throw("Strict value is not equal to itself.")
633- }
634- else throw("Strict value is not equal to itself.")
635- }
636- else unit
637- if ((bM == bM))
638- then {
639- let cb = if ((bB > 0))
640- then {
641- let aL = aG(aH, G)
642- if ((aL == aL))
643- then {
644- let cc = toInt(fraction(toBigInt(bB), aL, e, FLOOR))
645- let bD = {
646- let cd = E
647- let bZ = 0
648- valueOrErrorMessage({
649- let aF = invoke(bn, "unstakeAndGetOneTknV2", [cc, p(cd), bZ], nil)
650- if ($isInstanceOf(aF, "Int"))
651- then aF
652- else unit
653- }, f("invalid unstakeAndGetOneTknV2 result"))
654- }
655- if ((bD == bD))
656- then {
657- let ce = if ((aI.issuer == this))
658- then invoke(this, "burn", [G, bB], nil)
659- else h("invalid share asset issuer")
660- if ((ce == ce))
661- then {
662- let cf = fraction(toBigInt(bD), e, toBigInt(bB), FLOOR)
663- let cg = [BinaryEntry(V(E, J), toBytes(cf)), StringEntry(W(E), toString(cf))]
664- cg
665- }
666- else throw("Strict value is not equal to itself.")
667- }
668- else throw("Strict value is not equal to itself.")
669- }
670- else throw("Strict value is not equal to itself.")
671- }
672- else nil
673- if ((cb == cb))
674- then {
675- let ch = if ((br > 0))
676- then {
677- let bY = {
678- let bZ = 0
679- let ca = true
680- valueOrErrorMessage({
681- let aF = invoke(bn, "putOneTknV2", [bZ, ca], [AttachedPayment(E, br)])
682- if ($isInstanceOf(aF, "Int"))
683- then aF
684- else unit
685- }, f("invalid putOneTknV2 result"))
686- }
687- if ((bY == bY))
688- then {
689- let aL = aG(aH, G)
690- if ((aL == aL))
691- then {
692- let ci = if ((value(toInt(aL)) != 0))
693- then true
694- else throw("price is ZERO")
695- if ((ci == ci))
696- then {
697- let bw = toInt(fraction(toBigInt(bY), e, aL, FLOOR))
698- let cj = if ((value(toInt(aL)) != 0))
699- then true
700- else throw("shareAssetAmount is ZERO")
701- if ((cj == cj))
702- then {
703- let ck = if ((aI.issuer == this))
704- then invoke(this, "emit", [G, bw], nil)
705- else h("invalid share asset issuer")
706- if ((ck == ck))
707- then {
708- let cl = fraction(toBigInt(br), e, toBigInt(bw))
709- let cm = [BinaryEntry(T(E, J), toBytes(cl)), StringEntry(U(E), toString(cl))]
710- cm
711- }
712- else throw("Strict value is not equal to itself.")
713- }
714- else throw("Strict value is not equal to itself.")
715- }
716- else throw("Strict value is not equal to itself.")
717- }
718- else throw("Strict value is not equal to itself.")
719- }
720- else throw("Strict value is not equal to itself.")
721- }
722- else nil
723- if ((ch == ch))
724- then {
725- let cn = (J + 1)
726- let co = aG(aH, G)
727- let cp = (([IntegerEntry(H(E), cn), IntegerEntry(I(E, cn), height), IntegerEntry(L(E), 0), IntegerEntry(K(E), 0), BinaryEntry(R(E, J), toBytes(co)), StringEntry(S(E), toString(co))] ++ ch) ++ cb)
728- $Tuple2(cp, toBytes(co))
729- }
730- else throw("Strict value is not equal to itself.")
731- }
732- else throw("Strict value is not equal to itself.")
733- }
734- else throw("Strict value is not equal to itself.")
735- }
1524+ let hJ = eC(-(dE), -(dF), 0)
1525+ let gU = hJ._1
1526+ let et = hJ._2
1527+ let gV = eH(eB, et)
1528+ if ((gV == gV))
1529+ then ((gF ++ dG) ++ gU)
7361530 else throw("Strict value is not equal to itself.")
7371531 }
7381532 else throw("Strict value is not equal to itself.")
7391533 }
7401534 else throw("Strict value is not equal to itself.")
7411535 }
7421536 else throw("Strict value is not equal to itself.")
7431537 }
7441538 else throw("Strict value is not equal to itself.")
7451539 }
7461540 else throw("Strict value is not equal to itself.")
7471541 }
7481542
7491543
750-@Verifier(cq)
751-func cr () = {
752- let cs = {
753- let ad = ac()
754- if ($isInstanceOf(ad, "ByteVector"))
1544+
1545+@Callable(eV)
1546+func unstakeAndGetNoLess (hx,hK,hF) = {
1547+ let ho = if (ba())
1548+ then true
1549+ else (bn == n)
1550+ let fP = [if (!(ho))
1551+ then true
1552+ else throw("get operation is blocked by admin"), if ((size(eV.payments) == 0))
1553+ then true
1554+ else throw("no payments are expected")]
1555+ if ((fP == fP))
1556+ then {
1557+ let eB = eu(toBigInt(0), toBigInt(0), toBigInt(0))
1558+ if ((eB == eB))
1559+ then {
1560+ let hy = invoke(bu, "unstake", [toBase58String(bo), hx], nil)
1561+ if ((hy == hy))
1562+ then {
1563+ let dY = dl(toBase58String(eV.transactionId), toBase58String(bo), hx, eV.caller)
1564+ let dE = dY._1
1565+ let dF = dY._2
1566+ let dG = dY._10
1567+ let gF = cO(dE, dF)
1568+ let hL = [if ((dE >= hK))
1569+ then true
1570+ else throw(makeString(["amount asset amount to receive is less than ", toString(hK)], "")), if ((dF >= hF))
1571+ then true
1572+ else throw(makeString(["price asset amount to receive is less than ", toString(hF)], ""))]
1573+ if ((hL == hL))
1574+ then {
1575+ let hC = invoke(aV, "burn", [hx], [AttachedPayment(bo, hx)])
1576+ if ((hC == hC))
1577+ then {
1578+ let hM = eC(-(dE), -(dF), 0)
1579+ let gU = hM._1
1580+ let et = hM._2
1581+ let gV = eH(eB, et)
1582+ if ((gV == gV))
1583+ then ((gF ++ dG) ++ gU)
1584+ else throw("Strict value is not equal to itself.")
1585+ }
1586+ else throw("Strict value is not equal to itself.")
1587+ }
1588+ else throw("Strict value is not equal to itself.")
1589+ }
1590+ else throw("Strict value is not equal to itself.")
1591+ }
1592+ else throw("Strict value is not equal to itself.")
1593+ }
1594+ else throw("Strict value is not equal to itself.")
1595+ }
1596+
1597+
1598+
1599+@Callable(eV)
1600+func activate (hN,hO) = if ((toString(eV.caller) != toString(aV)))
1601+ then throw("permissions denied")
1602+ else $Tuple2([StringEntry(ae(), hN), StringEntry(af(), hO)], "success")
1603+
1604+
1605+
1606+@Callable(eV)
1607+func refreshKLp () = {
1608+ let hP = valueOrElse(getInteger(ak), 0)
1609+ let hQ = if (((height - hP) >= an))
1610+ then unit
1611+ else aS(makeString([toString(an), " blocks have not passed since the previous call"], ""))
1612+ if ((hQ == hQ))
1613+ then {
1614+ let eO = valueOrErrorMessage(parseBigInt(valueOrElse(getString(this, aj), "0")), aU("invalid kLp"))
1615+ let hR = eC(0, 0, 0)
1616+ let hS = hR._1
1617+ let et = hR._2
1618+ let eF = if ((eO != et))
1619+ then hS
1620+ else aS("nothing to refresh")
1621+ $Tuple2(eF, toString(et))
1622+ }
1623+ else throw("Strict value is not equal to itself.")
1624+ }
1625+
1626+
1627+
1628+@Callable(eV)
1629+func getPoolConfigWrapperREADONLY () = $Tuple2(nil, bc())
1630+
1631+
1632+
1633+@Callable(eV)
1634+func getAccBalanceWrapperREADONLY (ap) = $Tuple2(nil, bL(ap))
1635+
1636+
1637+
1638+@Callable(eV)
1639+func calcPricesWrapperREADONLY (cW,cX,db) = {
1640+ let dk = da(cW, cX, db)
1641+ $Tuple2(nil, [toString(dk[0]), toString(dk[1]), toString(dk[2])])
1642+ }
1643+
1644+
1645+
1646+@Callable(eV)
1647+func toX18WrapperREADONLY (E,F) = $Tuple2(nil, toString(D(E, F)))
1648+
1649+
1650+
1651+@Callable(eV)
1652+func fromX18WrapperREADONLY (I,J) = $Tuple2(nil, H(parseBigIntValue(I), J))
1653+
1654+
1655+
1656+@Callable(eV)
1657+func calcPriceBigIntWrapperREADONLY (bP,bQ) = $Tuple2(nil, toString(bO(parseBigIntValue(bP), parseBigIntValue(bQ))))
1658+
1659+
1660+
1661+@Callable(eV)
1662+func estimatePutOperationWrapperREADONLY (dm,dI,dJ,dK,dL,dM,ab,dN,dO) = $Tuple2(nil, dH(dm, dI, dJ, dK, dL, dM, ab, dN, dO))
1663+
1664+
1665+
1666+@Callable(eV)
1667+func estimateGetOperationWrapperREADONLY (dm,dn,do,ab) = {
1668+ let dY = dl(dm, dn, do, addressFromStringValue(ab))
1669+ $Tuple2(nil, $Tuple10(dY._1, dY._2, dY._3, dY._4, dY._5, dY._6, dY._7, toString(dY._8), dY._9, dY._10))
1670+ }
1671+
1672+
1673+
1674+@Callable(eV)
1675+func statsREADONLY () = {
1676+ let dc = bc()
1677+ let dp = fromBase58String(dc[q])
1678+ let hT = dc[r]
1679+ let hU = dc[s]
1680+ let dR = dc[v]
1681+ let dS = dc[w]
1682+ let dd = parseIntValue(dc[t])
1683+ let de = parseIntValue(dc[u])
1684+ let hV = valueOrErrorMessage(assetInfo(dp), (("Asset " + toBase58String(dp)) + " doesn't exist")).quantity
1685+ let hW = bL(hT)
1686+ let hX = bL(hU)
1687+ let hY = if ((hV == 0))
1688+ then [e, e, e]
1689+ else da(hW, hX, hV)
1690+ let dz = 0
1691+ let hZ = H(hY[1], b)
1692+ let ia = H(hY[2], b)
1693+ let ib = value(getInteger(aV, aD(toString(this))))
1694+ $Tuple2(nil, makeString(["%d%d%d%d%d%d%d", toString(hW), toString(hX), toString(hV), toString(dz), toString(hZ), toString(ia), toString(ib)], j))
1695+ }
1696+
1697+
1698+
1699+@Callable(eV)
1700+func evaluatePutByAmountAssetREADONLY (dJ) = {
1701+ let dc = bc()
1702+ let dp = fromBase58String(dc[q])
1703+ let dP = dc[r]
1704+ let dq = fromBase58String(dP)
1705+ let dQ = dc[s]
1706+ let dr = fromBase58String(dQ)
1707+ let dd = parseIntValue(dc[t])
1708+ let de = parseIntValue(dc[u])
1709+ let ds = dc[p]
1710+ let hV = valueOrErrorMessage(assetInfo(dp), (("Asset " + toBase58String(dp)) + " doesn't exist")).quantity
1711+ let hW = bL(dP)
1712+ let hX = bL(dQ)
1713+ let cY = D(hW, dd)
1714+ let cZ = D(hX, de)
1715+ let dy = if ((hV == 0))
1716+ then e
1717+ else bO(cZ, cY)
1718+ let dV = D(dJ, dd)
1719+ let dW = fraction(dV, dy, d)
1720+ let dL = H(dW, de)
1721+ let fb = dH("", 500000, dJ, dq, dL, dr, "", true, false)
1722+ let eg = fb._1
1723+ let ic = fb._3
1724+ let du = fb._4
1725+ let dw = fb._5
1726+ let dt = fb._6
1727+ $Tuple2(nil, makeString(["%d%d%d%d%d%d%d%d", toString(eg), toString(H(dy, b)), toString(du), toString(dw), toString(dt), ds, toString(dJ), toString(dL)], j))
1728+ }
1729+
1730+
1731+
1732+@Callable(eV)
1733+func evaluatePutByPriceAssetREADONLY (dL) = {
1734+ let dc = bc()
1735+ let dp = fromBase58String(dc[q])
1736+ let dP = dc[r]
1737+ let dq = fromBase58String(dP)
1738+ let dQ = dc[s]
1739+ let dr = fromBase58String(dQ)
1740+ let dd = parseIntValue(dc[t])
1741+ let de = parseIntValue(dc[u])
1742+ let ds = dc[p]
1743+ let hV = valueOrErrorMessage(assetInfo(dp), (("Asset " + toBase58String(dp)) + " doesn't exist")).quantity
1744+ let id = bL(dP)
1745+ let ie = bL(dQ)
1746+ let if = D(id, dd)
1747+ let ig = D(ie, de)
1748+ let dy = if ((hV == 0))
1749+ then e
1750+ else bO(ig, if)
1751+ let dW = D(dL, de)
1752+ let dV = fraction(dW, d, dy)
1753+ let dJ = H(dV, dd)
1754+ let fb = dH("", 500000, dJ, dq, dL, dr, "", true, false)
1755+ let eg = fb._1
1756+ let ic = fb._3
1757+ let du = fb._4
1758+ let dw = fb._5
1759+ let dt = fb._6
1760+ $Tuple2(nil, makeString(["%d%d%d%d%d%d%d%d", toString(eg), toString(H(dy, b)), toString(du), toString(dw), toString(dt), ds, toString(dJ), toString(dL)], j))
1761+ }
1762+
1763+
1764+
1765+@Callable(eV)
1766+func evaluateGetREADONLY (ih,ii) = {
1767+ let dY = dl("", ih, ii, this)
1768+ let dE = dY._1
1769+ let dF = dY._2
1770+ let du = dY._5
1771+ let dw = dY._6
1772+ let dt = dY._7
1773+ let dz = dY._8
1774+ let ds = parseIntValue(dY._9)
1775+ $Tuple2(nil, makeString(["%d%d%d%d%d%d%d", toString(dE), toString(dF), toString(du), toString(dw), toString(dt), toString(dz), toString(ds)], j))
1776+ }
1777+
1778+
1779+@Verifier(ij)
1780+func ik () = {
1781+ let il = {
1782+ let bV = gh()
1783+ if ($isInstanceOf(bV, "ByteVector"))
7551784 then {
756- let ak = ad
757- ak
1785+ let gl = bV
1786+ gl
7581787 }
759- else if ($isInstanceOf(ad, "Unit"))
760- then cq.senderPublicKey
1788+ else if ($isInstanceOf(bV, "Unit"))
1789+ then ij.senderPublicKey
7611790 else throw("Match error")
7621791 }
763- sigVerify(cq.bodyBytes, cq.proofs[0], cs)
1792+ let bV = ij
1793+ if ($isInstanceOf(bV, "Order"))
1794+ then {
1795+ let eK = bV
1796+ let im = bb()
1797+ let in = if (eG())
1798+ then $Tuple2(true, "")
1799+ else eJ(eK)
1800+ let aK = in._1
1801+ let aL = in._2
1802+ let aM = sigVerify(eK.bodyBytes, eK.proofs[0], eK.senderPublicKey)
1803+ let aN = sigVerify(eK.bodyBytes, eK.proofs[1], im)
1804+ if (if (if (aK)
1805+ then aM
1806+ else false)
1807+ then aN
1808+ else false)
1809+ then true
1810+ else aJ(aK, aL, aM, aN)
1811+ }
1812+ else if ($isInstanceOf(bV, "SetScriptTransaction"))
1813+ then {
1814+ let gi = bV
1815+ if (sigVerify(ij.bodyBytes, ij.proofs[0], il))
1816+ then true
1817+ else {
1818+ let io = blake2b256(value(gi.script))
1819+ let ip = fromBase64String(value(getString(aV, aF())))
1820+ let iq = scriptHash(this)
1821+ if ((ip == io))
1822+ then (iq != io)
1823+ else false
1824+ }
1825+ }
1826+ else sigVerify(ij.bodyBytes, ij.proofs[0], il)
7641827 }
7651828

github/deemru/w8io/169f3d6 
228.01 ms