tx · 7exsjLKnvz3qfjpTcdYXggQh48K885hb37rmxzTqsySk

3N98Ngyaszw66EakvWRCiZ771ja2RDgNaxV:  -0.02700000 Waves

2023.01.11 15:05 [2400270] smart account 3N98Ngyaszw66EakvWRCiZ771ja2RDgNaxV > SELF 0.00000000 Waves

{ "type": 13, "id": "7exsjLKnvz3qfjpTcdYXggQh48K885hb37rmxzTqsySk", "fee": 2700000, "feeAssetId": null, "timestamp": 1673438763620, "version": 1, "sender": "3N98Ngyaszw66EakvWRCiZ771ja2RDgNaxV", "senderPublicKey": "F4oaTkX67vt2MEsXLJJ8a7gaURGjW7x8fkvGfdEiH5oy", "proofs": [ "4qb9SYwKmUVjCwC3z2mmAZh4NyNn2zH3K9ySUmQjYiyJYDt7PkZ3x9EDK3zARsGXcBngVv6areYsjLh8ZL52HwGv" ], "script": "base64:BgInCAISAwoBCBIAEgcKBQgICAgIEgASBAoCCAgSABIECgIICBIDCgEIPQAJc2VwYXJhdG9yAgJfXwASc2hhcmVBc3NldERlY2ltYWxzAAgAC3dhdmVzU3RyaW5nAgVXQVZFUwAHc2NhbGUxOACAgJC7utat8A0ADXNjYWxlMThCaWdJbnQJALYCAQUHc2NhbGUxOAEHd3JhcEVycgEDbXNnCQC5CQIJAMwIAgIWbHBfc3Rha2luZ19wb29scy5yaWRlOgkAzAgCBQNtc2cFA25pbAIBIAEIdGhyb3dFcnIBA21zZwkAAgEJAQd3cmFwRXJyAQUDbXNnARJlcnJLZXlJc05vdERlZmluZWQCB2FkZHJlc3MDa2V5CQEHd3JhcEVycgEJALkJAgkAzAgCAgptYW5kYXRvcnkgCQDMCAIJAKUIAQUHYWRkcmVzcwkAzAgCAgEuCQDMCAIFA2tleQkAzAgCAg8gaXMgbm90IGRlZmluZWQFA25pbAIAAQxnZXRTdHJPckZhaWwCB2FkZHJlc3MDa2V5CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUHYWRkcmVzcwUDa2V5CQESZXJyS2V5SXNOb3REZWZpbmVkAgUHYWRkcmVzcwUDa2V5AQxnZXRJbnRPckZhaWwCB2FkZHJlc3MDa2V5CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUHYWRkcmVzcwUDa2V5CQESZXJyS2V5SXNOb3REZWZpbmVkAgUHYWRkcmVzcwUDa2V5AQxwYXJzZUFzc2V0SWQBBWlucHV0AwkAAAIFBWlucHV0BQt3YXZlc1N0cmluZwUEdW5pdAkA2QQBBQVpbnB1dAEPYXNzZXRJZFRvU3RyaW5nAQVpbnB1dAMJAAACBQVpbnB1dAUEdW5pdAULd2F2ZXNTdHJpbmcJANgEAQkBBXZhbHVlAQUFaW5wdXQBDmVuc3VyZVBvc2l0aXZlAQF2AwkAZwIFAXYAAAUBdgkBCHRocm93RXJyAQIYdmFsdWUgc2hvdWxkIGJlIHBvc2l0aXZlARJrZXlGYWN0b3J5Q29udHJhY3QACQC5CQIJAMwIAgICJXMJAMwIAgIPZmFjdG9yeUNvbnRyYWN0BQNuaWwFCXNlcGFyYXRvcgEUa2V5THBTdGFraW5nQ29udHJhY3QACQC5CQIJAMwIAgICJXMJAMwIAgIRbHBTdGFraW5nQ29udHJhY3QFA25pbAUJc2VwYXJhdG9yARJrZXlTdGFraW5nQ29udHJhY3QACQC5CQIJAMwIAgICJXMJAMwIAgIPc3Rha2luZ0NvbnRyYWN0BQNuaWwFCXNlcGFyYXRvcgETa2V5Qm9vc3RpbmdDb250cmFjdAAJALkJAgkAzAgCAgIlcwkAzAgCAhBib29zdGluZ0NvbnRyYWN0BQNuaWwFCXNlcGFyYXRvcgEPa2V5U3dhcENvbnRyYWN0AAkAuQkCCQDMCAICAiVzCQDMCAICDHN3YXBDb250cmFjdAUDbmlsBQlzZXBhcmF0b3IBFmtleUFzc2V0c1N0b3JlQ29udHJhY3QACQC5CQIJAMwIAgICJXMJAMwIAgITYXNzZXRzU3RvcmVDb250cmFjdAUDbmlsBQlzZXBhcmF0b3IBDmtleVVzZG5Bc3NldElkAAkAuQkCCQDMCAICAiVzCQDMCAICC3VzZG5Bc3NldElkBQNuaWwFCXNlcGFyYXRvcgEMa2V5V3hBc3NldElkAAkAuQkCCQDMCAICAiVzCQDMCAICCXd4QXNzZXRJZAUDbmlsBQlzZXBhcmF0b3IBC2tleVNodXRkb3duAAkAuQkCCQDMCAICAiVzCQDMCAICCHNodXRkb3duBQNuaWwFCXNlcGFyYXRvcgELa2V5TWluRGVsYXkACQC5CQIJAMwIAgICJXMJAMwIAgIIbWluRGVsYXkFA25pbAUJc2VwYXJhdG9yAQ9rZXlTaGFyZUFzc2V0SWQBC2Jhc2VBc3NldElkCQC5CQIJAMwIAgIEJXMlcwkAzAgCCQEPYXNzZXRJZFRvU3RyaW5nAQULYmFzZUFzc2V0SWQJAMwIAgIMc2hhcmVBc3NldElkBQNuaWwFCXNlcGFyYXRvcgEOa2V5QmFzZUFzc2V0SWQBDHNoYXJlQXNzZXRJZAkAuQkCCQDMCAICBCVzJXMJAMwIAgkBD2Fzc2V0SWRUb1N0cmluZwEFDHNoYXJlQXNzZXRJZAkAzAgCAgtiYXNlQXNzZXRJZAUDbmlsBQlzZXBhcmF0b3IBCWtleVBlcmlvZAELYmFzZUFzc2V0SWQJALkJAgkAzAgCAgQlcyVzCQDMCAIJAQ9hc3NldElkVG9TdHJpbmcBBQtiYXNlQXNzZXRJZAkAzAgCAgZwZXJpb2QFA25pbAUJc2VwYXJhdG9yARRrZXlQZXJpb2RTdGFydEhlaWdodAILYmFzZUFzc2V0SWQGcGVyaW9kCQC5CQIJAMwIAgIGJXMlcyVkCQDMCAIJAQ9hc3NldElkVG9TdHJpbmcBBQtiYXNlQXNzZXRJZAkAzAgCAhFwZXJpb2RTdGFydEhlaWdodAkAzAgCCQCkAwEFBnBlcmlvZAUDbmlsBQlzZXBhcmF0b3IBG2tleUJhc2VBc3NldEFtb3VudFRvQ29udmVydAELYmFzZUFzc2V0SWQJALkJAgkAzAgCAgQlcyVzCQDMCAIJAQ9hc3NldElkVG9TdHJpbmcBBQtiYXNlQXNzZXRJZAkAzAgCAhhiYXNlQXNzZXRBbW91bnRUb0NvbnZlcnQFA25pbAUJc2VwYXJhdG9yARxrZXlTaGFyZUFzc2V0QW1vdW50VG9Db252ZXJ0AQtiYXNlQXNzZXRJZAkAuQkCCQDMCAICBCVzJXMJAMwIAgkBD2Fzc2V0SWRUb1N0cmluZwEFC2Jhc2VBc3NldElkCQDMCAICGXNoYXJlQXNzZXRBbW91bnRUb0NvbnZlcnQFA25pbAUJc2VwYXJhdG9yAR9rZXlVc2VyQmFzZUFzc2V0QW1vdW50VG9Db252ZXJ0AgtiYXNlQXNzZXRJZAt1c2VyQWRkcmVzcwkAuQkCCQDMCAICBiVzJXMlcwkAzAgCCQEPYXNzZXRJZFRvU3RyaW5nAQULYmFzZUFzc2V0SWQJAMwIAgkApQgBBQt1c2VyQWRkcmVzcwkAzAgCAhhiYXNlQXNzZXRBbW91bnRUb0NvbnZlcnQFA25pbAUJc2VwYXJhdG9yASVrZXlVc2VyQmFzZUFzc2V0QW1vdW50VG9Db252ZXJ0UGVyaW9kAgtiYXNlQXNzZXRJZAt1c2VyQWRkcmVzcwkAuQkCCQDMCAICCCVzJXMlcyVzCQDMCAIJAQ9hc3NldElkVG9TdHJpbmcBBQtiYXNlQXNzZXRJZAkAzAgCCQClCAEFC3VzZXJBZGRyZXNzCQDMCAICGGJhc2VBc3NldEFtb3VudFRvQ29udmVydAkAzAgCAgZwZXJpb2QFA25pbAUJc2VwYXJhdG9yASBrZXlVc2VyU2hhcmVBc3NldEFtb3VudFRvQ29udmVydAILYmFzZUFzc2V0SWQLdXNlckFkZHJlc3MJALkJAgkAzAgCAgYlcyVzJXMJAMwIAgkBD2Fzc2V0SWRUb1N0cmluZwEFC2Jhc2VBc3NldElkCQDMCAIJAKUIAQULdXNlckFkZHJlc3MJAMwIAgIZc2hhcmVBc3NldEFtb3VudFRvQ29udmVydAUDbmlsBQlzZXBhcmF0b3IBJmtleVVzZXJTaGFyZUFzc2V0QW1vdW50VG9Db252ZXJ0UGVyaW9kAgtiYXNlQXNzZXRJZAt1c2VyQWRkcmVzcwkAuQkCCQDMCAICCCVzJXMlcyVzCQDMCAIJAQ9hc3NldElkVG9TdHJpbmcBBQtiYXNlQXNzZXRJZAkAzAgCCQClCAEFC3VzZXJBZGRyZXNzCQDMCAICGXNoYXJlQXNzZXRBbW91bnRUb0NvbnZlcnQJAMwIAgIGcGVyaW9kBQNuaWwFCXNlcGFyYXRvcgEOa2V5UHJpY2VQZXJpb2QCC2Jhc2VBc3NldElkBnBlcmlvZAkAuQkCCQDMCAICBiVzJXMlZAkAzAgCCQEPYXNzZXRJZFRvU3RyaW5nAQULYmFzZUFzc2V0SWQJAMwIAgIFcHJpY2UJAMwIAgkApAMBBQZwZXJpb2QFA25pbAUJc2VwYXJhdG9yAQ9rZXlQcmljZUhpc3RvcnkBC2Jhc2VBc3NldElkCQC5CQIJAMwIAgIKJXMlcyVzJWQlZAkAzAgCCQEPYXNzZXRJZFRvU3RyaW5nAQULYmFzZUFzc2V0SWQJAMwIAgIFcHJpY2UJAMwIAgIHaGlzdG9yeQkAzAgCCQCkAwEIBQlsYXN0QmxvY2sGaGVpZ2h0CQDMCAIJAKQDAQgFCWxhc3RCbG9jawl0aW1lc3RhbXAFA25pbAUJc2VwYXJhdG9yARFrZXlQcmljZVBlcmlvZFB1dAILYmFzZUFzc2V0SWQGcGVyaW9kCQC5CQIJAMwIAgIIJXMlcyVkJXMJAMwIAgkBD2Fzc2V0SWRUb1N0cmluZwEFC2Jhc2VBc3NldElkCQDMCAICBXByaWNlCQDMCAIJAKQDAQUGcGVyaW9kCQDMCAICA3B1dAUDbmlsBQlzZXBhcmF0b3IBEmtleVByaWNlUHV0SGlzdG9yeQELYmFzZUFzc2V0SWQJALkJAgkAzAgCAgwlcyVzJXMlcyVkJWQJAMwIAgkBD2Fzc2V0SWRUb1N0cmluZwEFC2Jhc2VBc3NldElkCQDMCAICBXByaWNlCQDMCAICB2hpc3RvcnkJAMwIAgIDcHV0CQDMCAIJAKQDAQgFCWxhc3RCbG9jawZoZWlnaHQJAMwIAgkApAMBCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUDbmlsBQlzZXBhcmF0b3IBEWtleVByaWNlUGVyaW9kR2V0AgtiYXNlQXNzZXRJZAZwZXJpb2QJALkJAgkAzAgCAgglcyVzJWQlcwkAzAgCCQEPYXNzZXRJZFRvU3RyaW5nAQULYmFzZUFzc2V0SWQJAMwIAgIFcHJpY2UJAMwIAgkApAMBBQZwZXJpb2QJAMwIAgIDZ2V0BQNuaWwFCXNlcGFyYXRvcgESa2V5UHJpY2VHZXRIaXN0b3J5AQtiYXNlQXNzZXRJZAkAuQkCCQDMCAICDCVzJXMlcyVzJWQlZAkAzAgCCQEPYXNzZXRJZFRvU3RyaW5nAQULYmFzZUFzc2V0SWQJAMwIAgIFcHJpY2UJAMwIAgIHaGlzdG9yeQkAzAgCAgNnZXQJAMwIAgkApAMBCAUJbGFzdEJsb2NrBmhlaWdodAkAzAgCCQCkAwEIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQNuaWwFCXNlcGFyYXRvcgEPa2V5SGlzdG9yeUVudHJ5BQtiYXNlQXNzZXRJZAlvcGVyYXRpb24GcGVyaW9kC3VzZXJBZGRyZXNzBHR4SWQJALkJAgkAzAgCAgglcyVzJXMlcwkAzAgCAgdoaXN0b3J5CQDMCAIFCW9wZXJhdGlvbgkAzAgCCQClCAEFC3VzZXJBZGRyZXNzCQDMCAIJANgEAQUEdHhJZAkAzAgCCQCkAwEFBmhlaWdodAUDbmlsBQlzZXBhcmF0b3IBE2tleU1hbmFnZXJQdWJsaWNLZXkAAhQlc19fbWFuYWdlclB1YmxpY0tleQEaa2V5UGVuZGluZ01hbmFnZXJQdWJsaWNLZXkAAhslc19fcGVuZGluZ01hbmFnZXJQdWJsaWNLZXkBFm1hbmFnZXJQdWJsaWNLZXlPclVuaXQABAckbWF0Y2gwCQCiCAEJARNrZXlNYW5hZ2VyUHVibGljS2V5AAMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAXMFByRtYXRjaDAJANkEAQUBcwMJAAECBQckbWF0Y2gwAgRVbml0BQR1bml0CQACAQILTWF0Y2ggZXJyb3IBHXBlbmRpbmdNYW5hZ2VyUHVibGljS2V5T3JVbml0AAQHJG1hdGNoMAkAoggBCQEaa2V5UGVuZGluZ01hbmFnZXJQdWJsaWNLZXkAAwkAAQIFByRtYXRjaDACBlN0cmluZwQBcwUHJG1hdGNoMAkA2QQBBQFzAwkAAQIFByRtYXRjaDACBFVuaXQFBHVuaXQJAAIBAgtNYXRjaCBlcnJvcgAVcGVybWlzc2lvbkRlbmllZEVycm9yCQACAQIRUGVybWlzc2lvbiBkZW5pZWQBCG11c3RUaGlzAQFpAwkAAAIIBQFpBmNhbGxlcgUEdGhpcwYFFXBlcm1pc3Npb25EZW5pZWRFcnJvcgELbXVzdE1hbmFnZXIBAWkEByRtYXRjaDAJARZtYW5hZ2VyUHVibGljS2V5T3JVbml0AAMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAJwawUHJG1hdGNoMAMJAAACCAUBaQ9jYWxsZXJQdWJsaWNLZXkFAnBrBgUVcGVybWlzc2lvbkRlbmllZEVycm9yAwkAAQIFByRtYXRjaDACBFVuaXQJAQhtdXN0VGhpcwEFAWkJAAIBAgtNYXRjaCBlcnJvcgAIc2h1dGRvd24JAQt2YWx1ZU9yRWxzZQIJAKAIAQkBC2tleVNodXRkb3duAAcBDXNodXRkb3duQ2hlY2sBAWkDAwkBASEBBQhzaHV0ZG93bgYJAQttdXN0TWFuYWdlcgEFAWkGCQACAQIVb3BlcmF0aW9uIGlzIGRpc2FibGVkAA9mYWN0b3J5Q29udHJhY3QJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQxnZXRTdHJPckZhaWwCBQR0aGlzCQESa2V5RmFjdG9yeUNvbnRyYWN0AAARbHBTdGFraW5nQ29udHJhY3QJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQxnZXRTdHJPckZhaWwCBQR0aGlzCQEUa2V5THBTdGFraW5nQ29udHJhY3QAAA9zdGFraW5nQ29udHJhY3QJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQxnZXRTdHJPckZhaWwCBQR0aGlzCQESa2V5U3Rha2luZ0NvbnRyYWN0AAAQYm9vc3RpbmdDb250cmFjdAkBEUBleHRyTmF0aXZlKDEwNjIpAQkBDGdldFN0ck9yRmFpbAIFBHRoaXMJARNrZXlCb29zdGluZ0NvbnRyYWN0AAAMc3dhcENvbnRyYWN0CQERQGV4dHJOYXRpdmUoMTA2MikBCQEMZ2V0U3RyT3JGYWlsAgUEdGhpcwkBD2tleVN3YXBDb250cmFjdAAAE2Fzc2V0c1N0b3JlQ29udHJhY3QJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQxnZXRTdHJPckZhaWwCBQR0aGlzCQEWa2V5QXNzZXRzU3RvcmVDb250cmFjdAAAC3VzZG5Bc3NldElkCQEMcGFyc2VBc3NldElkAQkBDGdldFN0ck9yRmFpbAIFBHRoaXMJAQ5rZXlVc2RuQXNzZXRJZAAACXd4QXNzZXRJZAkBDHBhcnNlQXNzZXRJZAEJAQxnZXRTdHJPckZhaWwCBQR0aGlzCQEMa2V5V3hBc3NldElkAAAPbWluRGVsYXlEZWZhdWx0AKALAAhtaW5EZWxheQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQELa2V5TWluRGVsYXkABQ9taW5EZWxheURlZmF1bHQBC2dldFBvb2xJbmZvAQ1hbW91bnRBc3NldElkBBBhbW91bnRBc3NldElkU3RyCQEPYXNzZXRJZFRvU3RyaW5nAQUNYW1vdW50QXNzZXRJZAQPcHJpY2VBc3NldElkU3RyCQEPYXNzZXRJZFRvU3RyaW5nAQULdXNkbkFzc2V0SWQEDnBvb2xJbmZvT3B0aW9uCgABQAkA/AcEBQ9mYWN0b3J5Q29udHJhY3QCEHBvb2xJbmZvUkVBRE9OTFkJAMwIAgUQYW1vdW50QXNzZXRJZFN0cgkAzAgCBQ9wcmljZUFzc2V0SWRTdHIFA25pbAUDbmlsAwkAAQIFAUACFShBZGRyZXNzLCBCeXRlVmVjdG9yKQUBQAUEdW5pdAUOcG9vbEluZm9PcHRpb24BCWNhbGNQcmljZQIJbHBBc3NldElkDHNoYXJlQXNzZXRJZAQOc2hhcmVBc3NldEluZm8JARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkA7AcBBQxzaGFyZUFzc2V0SWQCHmZhaWxlZCB0byBnZXQgc2hhcmUgYXNzZXQgaW5mbwQSc2hhcmVBc3NldEVtaXNzaW9uCAUOc2hhcmVBc3NldEluZm8IcXVhbnRpdHkEDHN0YWtlZEFtb3VudAkBDmVuc3VyZVBvc2l0aXZlAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCgABQAkA/AcEBQ9zdGFraW5nQ29udHJhY3QCFHN0YWtlZEJ5VXNlclJFQURPTkxZCQDMCAIJAQ9hc3NldElkVG9TdHJpbmcBBQlscEFzc2V0SWQJAMwIAgkApQgBBQR0aGlzBQNuaWwFA25pbAMJAAECBQFAAgNJbnQFAUAFBHVuaXQJAQd3cmFwRXJyAQIjaW52YWxpZCBzdGFrZWRCeVVzZXJSRUFET05MWSByZXN1bHQEBXByaWNlAwkAAAIFEnNoYXJlQXNzZXRFbWlzc2lvbgAABQ1zY2FsZTE4QmlnSW50CQC9AgQJALYCAQUMc3Rha2VkQW1vdW50BQ1zY2FsZTE4QmlnSW50CQC2AgEFEnNoYXJlQXNzZXRFbWlzc2lvbgUFRkxPT1IFBXByaWNlCAFpAQpzZXRNYW5hZ2VyARdwZW5kaW5nTWFuYWdlclB1YmxpY0tleQQLY2hlY2tDYWxsZXIJAQttdXN0TWFuYWdlcgEFAWkDCQAAAgULY2hlY2tDYWxsZXIFC2NoZWNrQ2FsbGVyBBVjaGVja01hbmFnZXJQdWJsaWNLZXkJANkEAQUXcGVuZGluZ01hbmFnZXJQdWJsaWNLZXkDCQAAAgUVY2hlY2tNYW5hZ2VyUHVibGljS2V5BRVjaGVja01hbmFnZXJQdWJsaWNLZXkJAMwIAgkBC1N0cmluZ0VudHJ5AgkBGmtleVBlbmRpbmdNYW5hZ2VyUHVibGljS2V5AAUXcGVuZGluZ01hbmFnZXJQdWJsaWNLZXkFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQ5jb25maXJtTWFuYWdlcgAEAnBtCQEdcGVuZGluZ01hbmFnZXJQdWJsaWNLZXlPclVuaXQABAVoYXNQTQMJAQlpc0RlZmluZWQBBQJwbQYJAQh0aHJvd0VycgECEm5vIHBlbmRpbmcgbWFuYWdlcgMJAAACBQVoYXNQTQUFaGFzUE0EB2NoZWNrUE0DCQAAAggFAWkPY2FsbGVyUHVibGljS2V5CQEFdmFsdWUBBQJwbQYJAQh0aHJvd0VycgECG3lvdSBhcmUgbm90IHBlbmRpbmcgbWFuYWdlcgMJAAACBQdjaGVja1BNBQdjaGVja1BNCQDMCAIJAQtTdHJpbmdFbnRyeQIJARNrZXlNYW5hZ2VyUHVibGljS2V5AAkA2AQBCQEFdmFsdWUBBQJwbQkAzAgCCQELRGVsZXRlRW50cnkBCQEaa2V5UGVuZGluZ01hbmFnZXJQdWJsaWNLZXkABQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEGY3JlYXRlBQ5iYXNlQXNzZXRJZFN0cg9zaGFyZUFzc2V0SWRTdHIOc2hhcmVBc3NldE5hbWUVc2hhcmVBc3NldERlc2NyaXB0aW9uDnNoYXJlQXNzZXRMb2dvBA9zaGFyZUFzc2V0TGFiZWwCEExQX1NUQUtJTkdfUE9PTFMEC2Jhc2VBc3NldElkCQEMcGFyc2VBc3NldElkAQUOYmFzZUFzc2V0SWRTdHIEBmNoZWNrcwkAzAgCCQELbXVzdE1hbmFnZXIBBQFpCQDMCAIDCQEJaXNEZWZpbmVkAQkBC2dldFBvb2xJbmZvAQULYmFzZUFzc2V0SWQGCQEIdGhyb3dFcnIBAhJpbnZhbGlkIGJhc2UgYXNzZXQFA25pbAMJAAACBQZjaGVja3MFBmNoZWNrcwQLY29tbW9uU3RhdGUJAMwIAgkBDEludGVnZXJFbnRyeQIJAQlrZXlQZXJpb2QBBQtiYXNlQXNzZXRJZAAABQNuaWwDCQAAAgUPc2hhcmVBc3NldElkU3RyAgAEFXNoYXJlQXNzZXRJc3N1ZUFtb3VudAABBBVzaGFyZUFzc2V0SXNzdWVBY3Rpb24JAMIIBQUOc2hhcmVBc3NldE5hbWUFFXNoYXJlQXNzZXREZXNjcmlwdGlvbgUVc2hhcmVBc3NldElzc3VlQW1vdW50BRJzaGFyZUFzc2V0RGVjaW1hbHMGBBZjYWxjdWxhdGVkU2hhcmVBc3NldElkCQC4CAEFFXNoYXJlQXNzZXRJc3N1ZUFjdGlvbgQUc2hhcmVBc3NldEJ1cm5BY3Rpb24JAQRCdXJuAgUWY2FsY3VsYXRlZFNoYXJlQXNzZXRJZAUVc2hhcmVBc3NldElzc3VlQW1vdW50BBljYWxjdWxhdGVkU2hhcmVBc3NldElkU3RyCQDYBAEFFmNhbGN1bGF0ZWRTaGFyZUFzc2V0SWQEDmNyZWF0ZU9yVXBkYXRlCQD8BwQFE2Fzc2V0c1N0b3JlQ29udHJhY3QCDmNyZWF0ZU9yVXBkYXRlCQDMCAIFGWNhbGN1bGF0ZWRTaGFyZUFzc2V0SWRTdHIJAMwIAgUOc2hhcmVBc3NldExvZ28JAMwIAgcFA25pbAUDbmlsAwkAAAIFDmNyZWF0ZU9yVXBkYXRlBQ5jcmVhdGVPclVwZGF0ZQQIYWRkTGFiZWwJAPwHBAUTYXNzZXRzU3RvcmVDb250cmFjdAIIYWRkTGFiZWwJAMwIAgUZY2FsY3VsYXRlZFNoYXJlQXNzZXRJZFN0cgkAzAgCBQ9zaGFyZUFzc2V0TGFiZWwFA25pbAUDbmlsAwkAAAIFCGFkZExhYmVsBQhhZGRMYWJlbAkAlAoCCQDOCAIFC2NvbW1vblN0YXRlCQDMCAIFFXNoYXJlQXNzZXRJc3N1ZUFjdGlvbgkAzAgCBRRzaGFyZUFzc2V0QnVybkFjdGlvbgkAzAgCCQELU3RyaW5nRW50cnkCCQEPa2V5U2hhcmVBc3NldElkAQULYmFzZUFzc2V0SWQFGWNhbGN1bGF0ZWRTaGFyZUFzc2V0SWRTdHIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDmtleUJhc2VBc3NldElkAQUWY2FsY3VsYXRlZFNoYXJlQXNzZXRJZAUOYmFzZUFzc2V0SWRTdHIFA25pbAUZY2FsY3VsYXRlZFNoYXJlQXNzZXRJZFN0cgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgQMc2hhcmVBc3NldElkCQDZBAEFD3NoYXJlQXNzZXRJZFN0cgQOc2hhcmVBc3NldEluZm8JARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkA7AcBBQxzaGFyZUFzc2V0SWQJAQd3cmFwRXJyAQIWaW52YWxpZCBzaGFyZSBhc3NldCBpZAQLY2hlY2tJc3N1ZXIDCQAAAggFDnNoYXJlQXNzZXRJbmZvBmlzc3VlcgURbHBTdGFraW5nQ29udHJhY3QGCQEIdGhyb3dFcnIBAh1pbnZhbGlkIHNoYXJlIGFzc2V0IGlkIGlzc3VlcgMJAAACBQtjaGVja0lzc3VlcgULY2hlY2tJc3N1ZXIJAJQKAgkAzggCBQtjb21tb25TdGF0ZQkAzAgCCQELU3RyaW5nRW50cnkCCQEPa2V5U2hhcmVBc3NldElkAQULYmFzZUFzc2V0SWQFD3NoYXJlQXNzZXRJZFN0cgkAzAgCCQELU3RyaW5nRW50cnkCCQEPa2V5U2hhcmVBc3NldElkAQUMc2hhcmVBc3NldElkBQ5iYXNlQXNzZXRJZFN0cgUDbmlsBQ9zaGFyZUFzc2V0SWRTdHIJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEDcHV0AAQDcG10AwkAAAIJAJADAQgFAWkIcGF5bWVudHMAAQkAkQMCCAUBaQhwYXltZW50cwAACQEIdGhyb3dFcnIBAh1leGFjdGx5IDEgcGF5bWVudCBpcyBleHBlY3RlZAQLYmFzZUFzc2V0SWQIBQNwbXQHYXNzZXRJZAQLdXNlckFkZHJlc3MIBQFpBmNhbGxlcgQGY2hlY2tzCQDMCAIJAQ1zaHV0ZG93bkNoZWNrAQUBaQkAzAgCAwkBCWlzRGVmaW5lZAEJAKIIAQkBD2tleVNoYXJlQXNzZXRJZAEFC2Jhc2VBc3NldElkBgkBCHRocm93RXJyAQINaW52YWxpZCBhc3NldAUDbmlsAwkAAAIFBmNoZWNrcwUGY2hlY2tzBA0kdDAxMTAzMjExMTM1CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAQtnZXRQb29sSW5mbwEFC2Jhc2VBc3NldElkCQEHd3JhcEVycgECDWludmFsaWQgYXNzZXQEC3Bvb2xBZGRyZXNzCAUNJHQwMTEwMzIxMTEzNQJfMQQJbHBBc3NldElkCAUNJHQwMTEwMzIxMTEzNQJfMgQGcGVyaW9kCQEFdmFsdWUBCQCfCAEJAQlrZXlQZXJpb2QBBQtiYXNlQXNzZXRJZAQodXNlckJhc2VBc3NldEFtb3VudFRvQ29udmVydFBlcmlvZE9wdGlvbgkAnwgBCQEla2V5VXNlckJhc2VBc3NldEFtb3VudFRvQ29udmVydFBlcmlvZAIFC2Jhc2VBc3NldElkBQt1c2VyQWRkcmVzcwQZY2xhaW1TaGFyZUFzc2V0SW52b2NhdGlvbgMJAAACBSh1c2VyQmFzZUFzc2V0QW1vdW50VG9Db252ZXJ0UGVyaW9kT3B0aW9uBQR1bml0BQR1bml0BCJ1c2VyQmFzZUFzc2V0QW1vdW50VG9Db252ZXJ0UGVyaW9kCQEFdmFsdWUBBSh1c2VyQmFzZUFzc2V0QW1vdW50VG9Db252ZXJ0UGVyaW9kT3B0aW9uAwkAAAIFInVzZXJCYXNlQXNzZXRBbW91bnRUb0NvbnZlcnRQZXJpb2QFBnBlcmlvZAUEdW5pdAkA/AcEBQR0aGlzAg9jbGFpbVNoYXJlQXNzZXQJAMwIAgkBD2Fzc2V0SWRUb1N0cmluZwEFC2Jhc2VBc3NldElkCQDMCAIJAKUIAQULdXNlckFkZHJlc3MFA25pbAUDbmlsAwkAAAIFGWNsYWltU2hhcmVBc3NldEludm9jYXRpb24FGWNsYWltU2hhcmVBc3NldEludm9jYXRpb24EGGJhc2VBc3NldEFtb3VudFRvQ29udmVydAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEba2V5QmFzZUFzc2V0QW1vdW50VG9Db252ZXJ0AQULYmFzZUFzc2V0SWQAAAQcdXNlckJhc2VBc3NldEFtb3VudFRvQ29udmVydAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEfa2V5VXNlckJhc2VBc3NldEFtb3VudFRvQ29udmVydAIFC2Jhc2VBc3NldElkBQt1c2VyQWRkcmVzcwAACQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIJARtrZXlCYXNlQXNzZXRBbW91bnRUb0NvbnZlcnQBBQtiYXNlQXNzZXRJZAkAZAIFGGJhc2VBc3NldEFtb3VudFRvQ29udmVydAgFA3BtdAZhbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIJAR9rZXlVc2VyQmFzZUFzc2V0QW1vdW50VG9Db252ZXJ0AgULYmFzZUFzc2V0SWQFC3VzZXJBZGRyZXNzCQBkAgUcdXNlckJhc2VBc3NldEFtb3VudFRvQ29udmVydAgFA3BtdAZhbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIJASVrZXlVc2VyQmFzZUFzc2V0QW1vdW50VG9Db252ZXJ0UGVyaW9kAgULYmFzZUFzc2V0SWQFC3VzZXJBZGRyZXNzBQZwZXJpb2QJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ9rZXlIaXN0b3J5RW50cnkFBQtiYXNlQXNzZXRJZAIDcHV0BQZwZXJpb2QFC3VzZXJBZGRyZXNzCAUBaQ10cmFuc2FjdGlvbklkCAUDcG10BmFtb3VudAUDbmlsBQR1bml0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBD2NsYWltU2hhcmVBc3NldAIOYmFzZUFzc2V0SWRTdHIOdXNlckFkZHJlc3NTdHIEBmNoZWNrcwkAzAgCCQENc2h1dGRvd25DaGVjawEFAWkFA25pbAMJAAACBQZjaGVja3MFBmNoZWNrcwQLdXNlckFkZHJlc3MDCQAAAgUOdXNlckFkZHJlc3NTdHICAAgFAWkGY2FsbGVyBAtjaGVja0NhbGxlcgkBCG11c3RUaGlzAQUBaQMJAAACBQtjaGVja0NhbGxlcgULY2hlY2tDYWxsZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBBQ51c2VyQWRkcmVzc1N0cgkBB3dyYXBFcnIBAhRpbnZhbGlkIHVzZXIgYWRkcmVzcwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgMJAAACBQt1c2VyQWRkcmVzcwULdXNlckFkZHJlc3MEC2Jhc2VBc3NldElkCQEMcGFyc2VBc3NldElkAQUOYmFzZUFzc2V0SWRTdHIEDHNoYXJlQXNzZXRJZAkBBXZhbHVlAQkBDHBhcnNlQXNzZXRJZAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEPa2V5U2hhcmVBc3NldElkAQULYmFzZUFzc2V0SWQJAQd3cmFwRXJyAQIVaW52YWxpZCBiYXNlIGFzc2V0IGlkAwkAAAIFDHNoYXJlQXNzZXRJZAUMc2hhcmVBc3NldElkBAZwZXJpb2QJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnwgBCQEJa2V5UGVyaW9kAQULYmFzZUFzc2V0SWQJAQd3cmFwRXJyAQIOaW52YWxpZCBwZXJpb2QDCQAAAgUGcGVyaW9kBQZwZXJpb2QEHHVzZXJCYXNlQXNzZXRBbW91bnRUb0NvbnZlcnQJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBH2tleVVzZXJCYXNlQXNzZXRBbW91bnRUb0NvbnZlcnQCBQtiYXNlQXNzZXRJZAULdXNlckFkZHJlc3MAAAQUY2hlY2tBbW91bnRUb0NvbnZlcnQDCQBmAgUcdXNlckJhc2VBc3NldEFtb3VudFRvQ29udmVydAAABgkBCHRocm93RXJyAQIQbm90aGluZyB0byBjbGFpbQMJAAACBRRjaGVja0Ftb3VudFRvQ29udmVydAUUY2hlY2tBbW91bnRUb0NvbnZlcnQEInVzZXJCYXNlQXNzZXRBbW91bnRUb0NvbnZlcnRQZXJpb2QJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnwgBCQEla2V5VXNlckJhc2VBc3NldEFtb3VudFRvQ29udmVydFBlcmlvZAIFC2Jhc2VBc3NldElkBQt1c2VyQWRkcmVzcwkBB3dyYXBFcnIBAhRmYWlsZWQgdG8gZ2V0IHBlcmlvZAQLY2hlY2tQZXJpb2QDCQBmAgUGcGVyaW9kBSJ1c2VyQmFzZUFzc2V0QW1vdW50VG9Db252ZXJ0UGVyaW9kBgkBCHRocm93RXJyAQIOaW52YWxpZCBwZXJpb2QDCQAAAgULY2hlY2tQZXJpb2QFC2NoZWNrUGVyaW9kBAVwcmljZQkAngMBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKEIAQkBEWtleVByaWNlUGVyaW9kUHV0AgULYmFzZUFzc2V0SWQFInVzZXJCYXNlQXNzZXRBbW91bnRUb0NvbnZlcnRQZXJpb2QJAQd3cmFwRXJyAQITZmFpbGVkIHRvIGdldCBwcmljZQQQc2hhcmVBc3NldEFtb3VudAkAoAMBCQC8AgMJALYCAQUcdXNlckJhc2VBc3NldEFtb3VudFRvQ29udmVydAUNc2NhbGUxOEJpZ0ludAUFcHJpY2UJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBH2tleVVzZXJCYXNlQXNzZXRBbW91bnRUb0NvbnZlcnQCBQtiYXNlQXNzZXRJZAULdXNlckFkZHJlc3MAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQt1c2VyQWRkcmVzcwUQc2hhcmVBc3NldEFtb3VudAUMc2hhcmVBc3NldElkCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEPa2V5SGlzdG9yeUVudHJ5BQULYmFzZUFzc2V0SWQCD2NsYWltU2hhcmVBc3NldAUGcGVyaW9kBQt1c2VyQWRkcmVzcwgFAWkNdHJhbnNhY3Rpb25JZAUQc2hhcmVBc3NldEFtb3VudAUDbmlsBQR1bml0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBA2dldAAEBmNoZWNrcwkAzAgCCQENc2h1dGRvd25DaGVjawEFAWkFA25pbAMJAAACBQZjaGVja3MFBmNoZWNrcwQDcG10AwkAAAIJAJADAQgFAWkIcGF5bWVudHMAAQkAkQMCCAUBaQhwYXltZW50cwAACQEIdGhyb3dFcnIBAh1leGFjdGx5IDEgcGF5bWVudCBpcyBleHBlY3RlZAQMc2hhcmVBc3NldElkCAUDcG10B2Fzc2V0SWQEC2Jhc2VBc3NldElkCQEFdmFsdWUBCQEMcGFyc2VBc3NldElkAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJAQ5rZXlCYXNlQXNzZXRJZAEFDHNoYXJlQXNzZXRJZAkBB3dyYXBFcnIBAhZpbnZhbGlkIHNoYXJlIGFzc2V0IGlkAwkAAAIFC2Jhc2VBc3NldElkBQtiYXNlQXNzZXRJZAQLdXNlckFkZHJlc3MIBQFpBmNhbGxlcgQNJHQwMTQ4MzYxNDkzOQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQELZ2V0UG9vbEluZm8BBQtiYXNlQXNzZXRJZAkBB3dyYXBFcnIBAg1pbnZhbGlkIGFzc2V0BAtwb29sQWRkcmVzcwgFDSR0MDE0ODM2MTQ5MzkCXzEECWxwQXNzZXRJZAgFDSR0MDE0ODM2MTQ5MzkCXzIEBnBlcmlvZAkBBXZhbHVlAQkAnwgBCQEJa2V5UGVyaW9kAQULYmFzZUFzc2V0SWQEKXVzZXJTaGFyZUFzc2V0QW1vdW50VG9Db252ZXJ0UGVyaW9kT3B0aW9uCQCfCAEJASZrZXlVc2VyU2hhcmVBc3NldEFtb3VudFRvQ29udmVydFBlcmlvZAIFC2Jhc2VBc3NldElkBQt1c2VyQWRkcmVzcwQYY2xhaW1CYXNlQXNzZXRJbnZvY2F0aW9uAwkAAAIFKXVzZXJTaGFyZUFzc2V0QW1vdW50VG9Db252ZXJ0UGVyaW9kT3B0aW9uBQR1bml0BQR1bml0BCN1c2VyU2hhcmVBc3NldEFtb3VudFRvQ29udmVydFBlcmlvZAkBBXZhbHVlAQUpdXNlclNoYXJlQXNzZXRBbW91bnRUb0NvbnZlcnRQZXJpb2RPcHRpb24DCQAAAgUjdXNlclNoYXJlQXNzZXRBbW91bnRUb0NvbnZlcnRQZXJpb2QFBnBlcmlvZAUEdW5pdAkA/AcEBQR0aGlzAg5jbGFpbUJhc2VBc3NldAkAzAgCBQt1c2VyQWRkcmVzcwUDbmlsBQNuaWwDCQAAAgUYY2xhaW1CYXNlQXNzZXRJbnZvY2F0aW9uBRhjbGFpbUJhc2VBc3NldEludm9jYXRpb24EGXNoYXJlQXNzZXRBbW91bnRUb0NvbnZlcnQJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBHGtleVNoYXJlQXNzZXRBbW91bnRUb0NvbnZlcnQBBQtiYXNlQXNzZXRJZAAABB11c2VyU2hhcmVBc3NldEFtb3VudFRvQ29udmVydAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEga2V5VXNlclNoYXJlQXNzZXRBbW91bnRUb0NvbnZlcnQCBQtiYXNlQXNzZXRJZAULdXNlckFkZHJlc3MAAAkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEca2V5U2hhcmVBc3NldEFtb3VudFRvQ29udmVydAEFC2Jhc2VBc3NldElkCQBkAgUZc2hhcmVBc3NldEFtb3VudFRvQ29udmVydAgFA3BtdAZhbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIJASBrZXlVc2VyU2hhcmVBc3NldEFtb3VudFRvQ29udmVydAIFC2Jhc2VBc3NldElkBQt1c2VyQWRkcmVzcwkAZAIFHXVzZXJTaGFyZUFzc2V0QW1vdW50VG9Db252ZXJ0CAUDcG10BmFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBJmtleVVzZXJTaGFyZUFzc2V0QW1vdW50VG9Db252ZXJ0UGVyaW9kAgULYmFzZUFzc2V0SWQFC3VzZXJBZGRyZXNzBQZwZXJpb2QJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ9rZXlIaXN0b3J5RW50cnkFBQtiYXNlQXNzZXRJZAIDZ2V0BQZwZXJpb2QFC3VzZXJBZGRyZXNzCAUBaQ10cmFuc2FjdGlvbklkCAUDcG10BmFtb3VudAUDbmlsBQR1bml0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBDmNsYWltQmFzZUFzc2V0Ag5iYXNlQXNzZXRJZFN0cg51c2VyQWRkcmVzc1N0cgQGY2hlY2tzCQDMCAIJAQ1zaHV0ZG93bkNoZWNrAQUBaQUDbmlsAwkAAAIFBmNoZWNrcwUGY2hlY2tzBAt1c2VyQWRkcmVzcwMJAAACBQ51c2VyQWRkcmVzc1N0cgIACAUBaQZjYWxsZXIEC2NoZWNrQ2FsbGVyCQEIbXVzdFRoaXMBBQFpAwkAAAIFC2NoZWNrQ2FsbGVyBQtjaGVja0NhbGxlcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEFDnVzZXJBZGRyZXNzU3RyCQEHd3JhcEVycgECFGludmFsaWQgdXNlciBhZGRyZXNzCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAwkAAAIFC3VzZXJBZGRyZXNzBQt1c2VyQWRkcmVzcwQLYmFzZUFzc2V0SWQJAQxwYXJzZUFzc2V0SWQBBQ5iYXNlQXNzZXRJZFN0cgQMc2hhcmVBc3NldElkCQEFdmFsdWUBCQEMcGFyc2VBc3NldElkAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJAQ9rZXlTaGFyZUFzc2V0SWQBBQtiYXNlQXNzZXRJZAkBB3dyYXBFcnIBAhVpbnZhbGlkIGJhc2UgYXNzZXQgaWQDCQAAAgUMc2hhcmVBc3NldElkBQxzaGFyZUFzc2V0SWQEBnBlcmlvZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCfCAEJAQlrZXlQZXJpb2QBBQtiYXNlQXNzZXRJZAkBB3dyYXBFcnIBAg5pbnZhbGlkIHBlcmlvZAMJAAACBQZwZXJpb2QFBnBlcmlvZAQddXNlclNoYXJlQXNzZXRBbW91bnRUb0NvbnZlcnQJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBIGtleVVzZXJTaGFyZUFzc2V0QW1vdW50VG9Db252ZXJ0AgULYmFzZUFzc2V0SWQFC3VzZXJBZGRyZXNzAAAEFGNoZWNrQW1vdW50VG9Db252ZXJ0AwkAZgIFHXVzZXJTaGFyZUFzc2V0QW1vdW50VG9Db252ZXJ0AAAGCQEIdGhyb3dFcnIBAhBub3RoaW5nIHRvIGNsYWltAwkAAAIFFGNoZWNrQW1vdW50VG9Db252ZXJ0BRRjaGVja0Ftb3VudFRvQ29udmVydAQjdXNlclNoYXJlQXNzZXRBbW91bnRUb0NvbnZlcnRQZXJpb2QJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnwgBCQEma2V5VXNlclNoYXJlQXNzZXRBbW91bnRUb0NvbnZlcnRQZXJpb2QCBQtiYXNlQXNzZXRJZAULdXNlckFkZHJlc3MJAQd3cmFwRXJyAQIUZmFpbGVkIHRvIGdldCBwZXJpb2QEC2NoZWNrUGVyaW9kAwkAZgIFBnBlcmlvZAUjdXNlclNoYXJlQXNzZXRBbW91bnRUb0NvbnZlcnRQZXJpb2QGCQEIdGhyb3dFcnIBAg5pbnZhbGlkIHBlcmlvZAMJAAACBQtjaGVja1BlcmlvZAULY2hlY2tQZXJpb2QEBXByaWNlCQCeAwEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoQgBCQERa2V5UHJpY2VQZXJpb2RHZXQCBQtiYXNlQXNzZXRJZAUjdXNlclNoYXJlQXNzZXRBbW91bnRUb0NvbnZlcnRQZXJpb2QJAQd3cmFwRXJyAQITZmFpbGVkIHRvIGdldCBwcmljZQQPYmFzZUFzc2V0QW1vdW50CQCgAwEJALwCAwkAtgIBBR11c2VyU2hhcmVBc3NldEFtb3VudFRvQ29udmVydAUFcHJpY2UFDXNjYWxlMThCaWdJbnQJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBIGtleVVzZXJTaGFyZUFzc2V0QW1vdW50VG9Db252ZXJ0AgULYmFzZUFzc2V0SWQFC3VzZXJBZGRyZXNzAAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwULdXNlckFkZHJlc3MFD2Jhc2VBc3NldEFtb3VudAULYmFzZUFzc2V0SWQJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ9rZXlIaXN0b3J5RW50cnkFBQtiYXNlQXNzZXRJZAIOY2xhaW1CYXNlQXNzZXQFBnBlcmlvZAULdXNlckFkZHJlc3MIBQFpDXRyYW5zYWN0aW9uSWQFD2Jhc2VBc3NldEFtb3VudAUDbmlsBQR1bml0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBCGZpbmFsaXplAQ5iYXNlQXNzZXRJZFN0cgQGY2hlY2tzCQDMCAIJAQ1zaHV0ZG93bkNoZWNrAQUBaQUDbmlsAwkAAAIFBmNoZWNrcwUGY2hlY2tzBAtiYXNlQXNzZXRJZAkBDHBhcnNlQXNzZXRJZAEFDmJhc2VBc3NldElkU3RyBAxzaGFyZUFzc2V0SWQJAQV2YWx1ZQEJAQxwYXJzZUFzc2V0SWQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBD2tleVNoYXJlQXNzZXRJZAEFC2Jhc2VBc3NldElkCQEHd3JhcEVycgECFWludmFsaWQgYmFzZSBhc3NldCBpZAMJAAACBQxzaGFyZUFzc2V0SWQFDHNoYXJlQXNzZXRJZAQGcGVyaW9kCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ8IAQkBCWtleVBlcmlvZAEFC2Jhc2VBc3NldElkCQEHd3JhcEVycgECDmludmFsaWQgcGVyaW9kAwkAAAIFBnBlcmlvZAUGcGVyaW9kBBdwZXJpb2RTdGFydEhlaWdodE9wdGlvbgkAnwgBCQEUa2V5UGVyaW9kU3RhcnRIZWlnaHQCBQtiYXNlQXNzZXRJZAUGcGVyaW9kBApjaGVja0RlbGF5AwkAAAIFF3BlcmlvZFN0YXJ0SGVpZ2h0T3B0aW9uBQR1bml0BQR1bml0BAVkZWxheQkAZQIFBmhlaWdodAkBBXZhbHVlAQUXcGVyaW9kU3RhcnRIZWlnaHRPcHRpb24EDGJsb2Nrc1RvV2FpdAkAlwMBCQDMCAIAAAkAzAgCCQBlAgUIbWluRGVsYXkFBWRlbGF5BQNuaWwDCQAAAgUMYmxvY2tzVG9XYWl0AAAFBHVuaXQJAQh0aHJvd0VycgEJALkJAgkAzAgCAiFmaW5hbGl6YXRpb24gd2lsbCBiZSBwb3NzaWJsZSBpbiAJAMwIAgkApAMBBQxibG9ja3NUb1dhaXQJAMwIAgIHIGJsb2NrcwUDbmlsAgADCQAAAgUKY2hlY2tEZWxheQUKY2hlY2tEZWxheQQNJHQwMTg4ODExOTA5NwkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQELZ2V0UG9vbEluZm8BBQtiYXNlQXNzZXRJZAkBB3dyYXBFcnIBAg1pbnZhbGlkIGFzc2V0BAtwb29sQWRkcmVzcwgFDSR0MDE4ODgxMTkwOTcCXzEECWxwQXNzZXRJZAgFDSR0MDE4ODgxMTkwOTcCXzIEDXN0YWtpbmdSZXdhcmQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgoAAUAJAPwHBAUPc3Rha2luZ0NvbnRyYWN0AgdjbGFpbVd4CQDMCAIJAQ9hc3NldElkVG9TdHJpbmcBBQlscEFzc2V0SWQFA25pbAUDbmlsAwkAAQIFAUACA0ludAUBQAUEdW5pdAkBB3dyYXBFcnIBAhZpbnZhbGlkIGNsYWltV3ggcmVzdWx0AwkAAAIFDXN0YWtpbmdSZXdhcmQFDXN0YWtpbmdSZXdhcmQEEHVzZVN0YWtpbmdSZXdhcmQDCQBmAgUNc3Rha2luZ1Jld2FyZAAABAhsb2NrUGFydAkAaQIFDXN0YWtpbmdSZXdhcmQAAgQLY29udmVydFBhcnQJAGUCBQ1zdGFraW5nUmV3YXJkBQhsb2NrUGFydAQBcgkA/AcEBRBib29zdGluZ0NvbnRyYWN0Ahd1c2VyTWF4RHVyYXRpb25SRUFET05MWQkAzAgCCQClCAEFBHRoaXMFA25pbAUDbmlsBARsb2NrBAckbWF0Y2gwBQFyAwMDCQABAggFByRtYXRjaDACXzECBlN0cmluZwkAAQIIBQckbWF0Y2gwAl8yAgNJbnQHCQABAgUHJG1hdGNoMAINKFN0cmluZywgSW50KQcECGZ1bmN0aW9uCAUHJG1hdGNoMAJfMQQIZHVyYXRpb24IBQckbWF0Y2gwAl8yAwkAZgIFCGxvY2tQYXJ0AAAJAPwHBAUQYm9vc3RpbmdDb250cmFjdAUIZnVuY3Rpb24JAMwIAgUIZHVyYXRpb24FA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUJd3hBc3NldElkBQhsb2NrUGFydAUDbmlsBQR1bml0CQEIdGhyb3dFcnIBAhNpbnZhbGlkIGxvY2sgcGFyYW1zAwkAAAIFBGxvY2sFBGxvY2sED2NvbnZlcnRlZEFtb3VudAQJaW5Bc3NldElkBQl3eEFzc2V0SWQEEG1pbmltdW1Ub1JlY2VpdmUAAAQNb3V0QXNzZXRJZFN0cgkBD2Fzc2V0SWRUb1N0cmluZwEFC3VzZG5Bc3NldElkBA10YXJnZXRBZGRyZXNzAgAJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgoAAUAJAPwHBAUMc3dhcENvbnRyYWN0AgRzd2FwCQDMCAIFEG1pbmltdW1Ub1JlY2VpdmUJAMwIAgUNb3V0QXNzZXRJZFN0cgkAzAgCBQ10YXJnZXRBZGRyZXNzBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFCWluQXNzZXRJZAULY29udmVydFBhcnQFA25pbAMJAAECBQFAAgNJbnQFAUAFBHVuaXQJAQd3cmFwRXJyAQITaW52YWxpZCBzd2FwIHJlc3VsdAMJAAACBQ9jb252ZXJ0ZWRBbW91bnQFD2NvbnZlcnRlZEFtb3VudAQNbHBBc3NldEFtb3VudAQMbWluT3V0QW1vdW50AAAECWF1dG9TdGFrZQYJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgoAAUAJAPwHBAULcG9vbEFkZHJlc3MCC3B1dE9uZVRrblYyCQDMCAIFDG1pbk91dEFtb3VudAkAzAgCBQlhdXRvU3Rha2UFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgULdXNkbkFzc2V0SWQFD2NvbnZlcnRlZEFtb3VudAUDbmlsAwkAAQIFAUACA0ludAUBQAUEdW5pdAkBB3dyYXBFcnIBAhppbnZhbGlkIHB1dE9uZVRrblYyIHJlc3VsdAMJAAACBQ1scEFzc2V0QW1vdW50BQ1scEFzc2V0QW1vdW50BQ1scEFzc2V0QW1vdW50CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQR1bml0AwkAAAIFEHVzZVN0YWtpbmdSZXdhcmQFEHVzZVN0YWtpbmdSZXdhcmQEGXNoYXJlQXNzZXRBbW91bnRUb0NvbnZlcnQJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBHGtleVNoYXJlQXNzZXRBbW91bnRUb0NvbnZlcnQBBQtiYXNlQXNzZXRJZAAABApnZXRBY3Rpb25zAwkAZgIFGXNoYXJlQXNzZXRBbW91bnRUb0NvbnZlcnQAAAQFcHJpY2UJAQljYWxjUHJpY2UCBQlscEFzc2V0SWQFDHNoYXJlQXNzZXRJZAMJAAACBQVwcmljZQUFcHJpY2UEDXVuc3Rha2VBbW91bnQJAKADAQkAvQIECQC2AgEFGXNoYXJlQXNzZXRBbW91bnRUb0NvbnZlcnQFBXByaWNlBQ1zY2FsZTE4QmlnSW50BQVGTE9PUgQPYmFzZUFzc2V0QW1vdW50BApvdXRBc3NldElkBQtiYXNlQXNzZXRJZAQMbWluT3V0QW1vdW50AAAJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgoAAUAJAPwHBAULcG9vbEFkZHJlc3MCFXVuc3Rha2VBbmRHZXRPbmVUa25WMgkAzAgCBQ11bnN0YWtlQW1vdW50CQDMCAIJAQ9hc3NldElkVG9TdHJpbmcBBQpvdXRBc3NldElkCQDMCAIFDG1pbk91dEFtb3VudAUDbmlsBQNuaWwDCQABAgUBQAIDSW50BQFABQR1bml0CQEHd3JhcEVycgECJGludmFsaWQgdW5zdGFrZUFuZEdldE9uZVRrblYyIHJlc3VsdAMJAAACBQ9iYXNlQXNzZXRBbW91bnQFD2Jhc2VBc3NldEFtb3VudAQVc2hhcmVBc3NldEJ1cm5BY3Rpb25zCQDMCAIJAQRCdXJuAgUMc2hhcmVBc3NldElkBRlzaGFyZUFzc2V0QW1vdW50VG9Db252ZXJ0BQNuaWwECHByaWNlR2V0CQC9AgQJALYCAQUPYmFzZUFzc2V0QW1vdW50BQ1zY2FsZTE4QmlnSW50CQC2AgEFGXNoYXJlQXNzZXRBbW91bnRUb0NvbnZlcnQFBUZMT09SBBVwcmljZUdldFVwZGF0ZUFjdGlvbnMJAMwIAgkBC0JpbmFyeUVudHJ5AgkBEWtleVByaWNlUGVyaW9kR2V0AgULYmFzZUFzc2V0SWQFBnBlcmlvZAkAnQMBBQhwcmljZUdldAkAzAgCCQELU3RyaW5nRW50cnkCCQESa2V5UHJpY2VHZXRIaXN0b3J5AQULYmFzZUFzc2V0SWQJAKYDAQUIcHJpY2VHZXQFA25pbAkAzggCBRVzaGFyZUFzc2V0QnVybkFjdGlvbnMFFXByaWNlR2V0VXBkYXRlQWN0aW9ucwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUDbmlsBBhiYXNlQXNzZXRBbW91bnRUb0NvbnZlcnQJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBG2tleUJhc2VBc3NldEFtb3VudFRvQ29udmVydAEFC2Jhc2VBc3NldElkAAAECnB1dEFjdGlvbnMDCQBmAgUYYmFzZUFzc2V0QW1vdW50VG9Db252ZXJ0AAAEDWxwQXNzZXRBbW91bnQEDG1pbk91dEFtb3VudAAABAlhdXRvU3Rha2UGCQETdmFsdWVPckVycm9yTWVzc2FnZQIKAAFACQD8BwQFC3Bvb2xBZGRyZXNzAgtwdXRPbmVUa25WMgkAzAgCBQxtaW5PdXRBbW91bnQJAMwIAgUJYXV0b1N0YWtlBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFC2Jhc2VBc3NldElkBRhiYXNlQXNzZXRBbW91bnRUb0NvbnZlcnQFA25pbAMJAAECBQFAAgNJbnQFAUAFBHVuaXQJAQd3cmFwRXJyAQIaaW52YWxpZCBwdXRPbmVUa25WMiByZXN1bHQDCQAAAgUNbHBBc3NldEFtb3VudAUNbHBBc3NldEFtb3VudAQFcHJpY2UJAQljYWxjUHJpY2UCBQlscEFzc2V0SWQFDHNoYXJlQXNzZXRJZAMJAAACBQVwcmljZQUFcHJpY2UEEHNoYXJlQXNzZXRBbW91bnQJAKADAQkAvQIECQC2AgEFDWxwQXNzZXRBbW91bnQFDXNjYWxlMThCaWdJbnQFBXByaWNlBQVGTE9PUgQMaXNSZWlzc3VhYmxlBgQYc2hhcmVBc3NldFJlaXNzdWVBY3Rpb25zCQDMCAIJAQdSZWlzc3VlAwUMc2hhcmVBc3NldElkBRBzaGFyZUFzc2V0QW1vdW50BQxpc1JlaXNzdWFibGUFA25pbAQIcHJpY2VQdXQJALwCAwkAtgIBBRhiYXNlQXNzZXRBbW91bnRUb0NvbnZlcnQFDXNjYWxlMThCaWdJbnQJALYCAQUQc2hhcmVBc3NldEFtb3VudAQVcHJpY2VQdXRVcGRhdGVBY3Rpb25zCQDMCAIJAQtCaW5hcnlFbnRyeQIJARFrZXlQcmljZVBlcmlvZFB1dAIFC2Jhc2VBc3NldElkBQZwZXJpb2QJAJ0DAQUIcHJpY2VQdXQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEmtleVByaWNlUHV0SGlzdG9yeQEFC2Jhc2VBc3NldElkCQCmAwEFCHByaWNlUHV0BQNuaWwJAM4IAgUYc2hhcmVBc3NldFJlaXNzdWVBY3Rpb25zBRVwcmljZVB1dFVwZGF0ZUFjdGlvbnMJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FA25pbAQJbmV3UGVyaW9kCQBkAgUGcGVyaW9kAAEECWxhc3RQcmljZQkBCWNhbGNQcmljZQIFCWxwQXNzZXRJZAUMc2hhcmVBc3NldElkBAdhY3Rpb25zCQDOCAIJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBCWtleVBlcmlvZAEFC2Jhc2VBc3NldElkBQluZXdQZXJpb2QJAMwIAgkBDEludGVnZXJFbnRyeQIJARRrZXlQZXJpb2RTdGFydEhlaWdodAIFC2Jhc2VBc3NldElkBQluZXdQZXJpb2QFBmhlaWdodAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBHGtleVNoYXJlQXNzZXRBbW91bnRUb0NvbnZlcnQBBQtiYXNlQXNzZXRJZAAACQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEba2V5QmFzZUFzc2V0QW1vdW50VG9Db252ZXJ0AQULYmFzZUFzc2V0SWQAAAkAzAgCCQELQmluYXJ5RW50cnkCCQEOa2V5UHJpY2VQZXJpb2QCBQtiYXNlQXNzZXRJZAUGcGVyaW9kCQCdAwEFCWxhc3RQcmljZQkAzAgCCQELU3RyaW5nRW50cnkCCQEPa2V5UHJpY2VIaXN0b3J5AQULYmFzZUFzc2V0SWQJAKYDAQUJbGFzdFByaWNlBQNuaWwFCnB1dEFjdGlvbnMFCmdldEFjdGlvbnMJAJQKAgUHYWN0aW9ucwkAnQMBBQlsYXN0UHJpY2UJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BAnR4AQZ2ZXJpZnkABA90YXJnZXRQdWJsaWNLZXkEByRtYXRjaDAJARZtYW5hZ2VyUHVibGljS2V5T3JVbml0AAMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAJwawUHJG1hdGNoMAUCcGsDCQABAgUHJG1hdGNoMAIEVW5pdAgFAnR4D3NlbmRlclB1YmxpY0tleQkAAgECC01hdGNoIGVycm9yCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAABQ90YXJnZXRQdWJsaWNLZXlftXEv", "chainId": 84, "height": 2400270, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 2bUJSF69oVgVZx6im6Av9mB7ipNMYzy67MnPmhUwpSxg Next: GHCAn7JynJZEEaSwhguPyhVcaegkiEotn52o4cXeDtuM Diff:
OldNewDifferences
512512 }
513513 if ((checkDelay == checkDelay))
514514 then {
515- let $t01888119061 = valueOrErrorMessage(getPoolInfo(baseAssetId), wrapErr("invalid asset"))
516- let poolAddress = $t01888119061._1
517- let lpAssetId = $t01888119061._2
515+ let $t01888119097 = valueOrErrorMessage(getPoolInfo(baseAssetId), wrapErr("invalid asset"))
516+ let poolAddress = $t01888119097._1
517+ let lpAssetId = $t01888119097._2
518518 let stakingReward = valueOrErrorMessage({
519519 let @ = invoke(stakingContract, "claimWx", [assetIdToString(lpAssetId)], nil)
520520 if ($isInstanceOf(@, "Int"))
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let separator = "__"
55
66 let shareAssetDecimals = 8
77
88 let wavesString = "WAVES"
99
1010 let scale18 = 1000000000000000000
1111
1212 let scale18BigInt = toBigInt(scale18)
1313
1414 func wrapErr (msg) = makeString(["lp_staking_pools.ride:", msg], " ")
1515
1616
1717 func throwErr (msg) = throw(wrapErr(msg))
1818
1919
2020 func errKeyIsNotDefined (address,key) = wrapErr(makeString(["mandatory ", toString(address), ".", key, " is not defined"], ""))
2121
2222
2323 func getStrOrFail (address,key) = valueOrErrorMessage(getString(address, key), errKeyIsNotDefined(address, key))
2424
2525
2626 func getIntOrFail (address,key) = valueOrErrorMessage(getInteger(address, key), errKeyIsNotDefined(address, key))
2727
2828
2929 func parseAssetId (input) = if ((input == wavesString))
3030 then unit
3131 else fromBase58String(input)
3232
3333
3434 func assetIdToString (input) = if ((input == unit))
3535 then wavesString
3636 else toBase58String(value(input))
3737
3838
3939 func ensurePositive (v) = if ((v >= 0))
4040 then v
4141 else throwErr("value should be positive")
4242
4343
4444 func keyFactoryContract () = makeString(["%s", "factoryContract"], separator)
4545
4646
4747 func keyLpStakingContract () = makeString(["%s", "lpStakingContract"], separator)
4848
4949
5050 func keyStakingContract () = makeString(["%s", "stakingContract"], separator)
5151
5252
5353 func keyBoostingContract () = makeString(["%s", "boostingContract"], separator)
5454
5555
5656 func keySwapContract () = makeString(["%s", "swapContract"], separator)
5757
5858
5959 func keyAssetsStoreContract () = makeString(["%s", "assetsStoreContract"], separator)
6060
6161
6262 func keyUsdnAssetId () = makeString(["%s", "usdnAssetId"], separator)
6363
6464
6565 func keyWxAssetId () = makeString(["%s", "wxAssetId"], separator)
6666
6767
6868 func keyShutdown () = makeString(["%s", "shutdown"], separator)
6969
7070
7171 func keyMinDelay () = makeString(["%s", "minDelay"], separator)
7272
7373
7474 func keyShareAssetId (baseAssetId) = makeString(["%s%s", assetIdToString(baseAssetId), "shareAssetId"], separator)
7575
7676
7777 func keyBaseAssetId (shareAssetId) = makeString(["%s%s", assetIdToString(shareAssetId), "baseAssetId"], separator)
7878
7979
8080 func keyPeriod (baseAssetId) = makeString(["%s%s", assetIdToString(baseAssetId), "period"], separator)
8181
8282
8383 func keyPeriodStartHeight (baseAssetId,period) = makeString(["%s%s%d", assetIdToString(baseAssetId), "periodStartHeight", toString(period)], separator)
8484
8585
8686 func keyBaseAssetAmountToConvert (baseAssetId) = makeString(["%s%s", assetIdToString(baseAssetId), "baseAssetAmountToConvert"], separator)
8787
8888
8989 func keyShareAssetAmountToConvert (baseAssetId) = makeString(["%s%s", assetIdToString(baseAssetId), "shareAssetAmountToConvert"], separator)
9090
9191
9292 func keyUserBaseAssetAmountToConvert (baseAssetId,userAddress) = makeString(["%s%s%s", assetIdToString(baseAssetId), toString(userAddress), "baseAssetAmountToConvert"], separator)
9393
9494
9595 func keyUserBaseAssetAmountToConvertPeriod (baseAssetId,userAddress) = makeString(["%s%s%s%s", assetIdToString(baseAssetId), toString(userAddress), "baseAssetAmountToConvert", "period"], separator)
9696
9797
9898 func keyUserShareAssetAmountToConvert (baseAssetId,userAddress) = makeString(["%s%s%s", assetIdToString(baseAssetId), toString(userAddress), "shareAssetAmountToConvert"], separator)
9999
100100
101101 func keyUserShareAssetAmountToConvertPeriod (baseAssetId,userAddress) = makeString(["%s%s%s%s", assetIdToString(baseAssetId), toString(userAddress), "shareAssetAmountToConvert", "period"], separator)
102102
103103
104104 func keyPricePeriod (baseAssetId,period) = makeString(["%s%s%d", assetIdToString(baseAssetId), "price", toString(period)], separator)
105105
106106
107107 func keyPriceHistory (baseAssetId) = makeString(["%s%s%s%d%d", assetIdToString(baseAssetId), "price", "history", toString(lastBlock.height), toString(lastBlock.timestamp)], separator)
108108
109109
110110 func keyPricePeriodPut (baseAssetId,period) = makeString(["%s%s%d%s", assetIdToString(baseAssetId), "price", toString(period), "put"], separator)
111111
112112
113113 func keyPricePutHistory (baseAssetId) = makeString(["%s%s%s%s%d%d", assetIdToString(baseAssetId), "price", "history", "put", toString(lastBlock.height), toString(lastBlock.timestamp)], separator)
114114
115115
116116 func keyPricePeriodGet (baseAssetId,period) = makeString(["%s%s%d%s", assetIdToString(baseAssetId), "price", toString(period), "get"], separator)
117117
118118
119119 func keyPriceGetHistory (baseAssetId) = makeString(["%s%s%s%s%d%d", assetIdToString(baseAssetId), "price", "history", "get", toString(lastBlock.height), toString(lastBlock.timestamp)], separator)
120120
121121
122122 func keyHistoryEntry (baseAssetId,operation,period,userAddress,txId) = makeString(["%s%s%s%s", "history", operation, toString(userAddress), toBase58String(txId), toString(height)], separator)
123123
124124
125125 func keyManagerPublicKey () = "%s__managerPublicKey"
126126
127127
128128 func keyPendingManagerPublicKey () = "%s__pendingManagerPublicKey"
129129
130130
131131 func managerPublicKeyOrUnit () = match getString(keyManagerPublicKey()) {
132132 case s: String =>
133133 fromBase58String(s)
134134 case _: Unit =>
135135 unit
136136 case _ =>
137137 throw("Match error")
138138 }
139139
140140
141141 func pendingManagerPublicKeyOrUnit () = match getString(keyPendingManagerPublicKey()) {
142142 case s: String =>
143143 fromBase58String(s)
144144 case _: Unit =>
145145 unit
146146 case _ =>
147147 throw("Match error")
148148 }
149149
150150
151151 let permissionDeniedError = throw("Permission denied")
152152
153153 func mustThis (i) = if ((i.caller == this))
154154 then true
155155 else permissionDeniedError
156156
157157
158158 func mustManager (i) = match managerPublicKeyOrUnit() {
159159 case pk: ByteVector =>
160160 if ((i.callerPublicKey == pk))
161161 then true
162162 else permissionDeniedError
163163 case _: Unit =>
164164 mustThis(i)
165165 case _ =>
166166 throw("Match error")
167167 }
168168
169169
170170 let shutdown = valueOrElse(getBoolean(keyShutdown()), false)
171171
172172 func shutdownCheck (i) = if (if (!(shutdown))
173173 then true
174174 else mustManager(i))
175175 then true
176176 else throw("operation is disabled")
177177
178178
179179 let factoryContract = addressFromStringValue(getStrOrFail(this, keyFactoryContract()))
180180
181181 let lpStakingContract = addressFromStringValue(getStrOrFail(this, keyLpStakingContract()))
182182
183183 let stakingContract = addressFromStringValue(getStrOrFail(this, keyStakingContract()))
184184
185185 let boostingContract = addressFromStringValue(getStrOrFail(this, keyBoostingContract()))
186186
187187 let swapContract = addressFromStringValue(getStrOrFail(this, keySwapContract()))
188188
189189 let assetsStoreContract = addressFromStringValue(getStrOrFail(this, keyAssetsStoreContract()))
190190
191191 let usdnAssetId = parseAssetId(getStrOrFail(this, keyUsdnAssetId()))
192192
193193 let wxAssetId = parseAssetId(getStrOrFail(this, keyWxAssetId()))
194194
195195 let minDelayDefault = 1440
196196
197197 let minDelay = valueOrElse(getInteger(this, keyMinDelay()), minDelayDefault)
198198
199199 func getPoolInfo (amountAssetId) = {
200200 let amountAssetIdStr = assetIdToString(amountAssetId)
201201 let priceAssetIdStr = assetIdToString(usdnAssetId)
202202 let poolInfoOption = {
203203 let @ = invoke(factoryContract, "poolInfoREADONLY", [amountAssetIdStr, priceAssetIdStr], nil)
204204 if ($isInstanceOf(@, "(Address, ByteVector)"))
205205 then @
206206 else unit
207207 }
208208 poolInfoOption
209209 }
210210
211211
212212 func calcPrice (lpAssetId,shareAssetId) = {
213213 let shareAssetInfo = valueOrErrorMessage(assetInfo(shareAssetId), "failed to get share asset info")
214214 let shareAssetEmission = shareAssetInfo.quantity
215215 let stakedAmount = ensurePositive(valueOrErrorMessage({
216216 let @ = invoke(stakingContract, "stakedByUserREADONLY", [assetIdToString(lpAssetId), toString(this)], nil)
217217 if ($isInstanceOf(@, "Int"))
218218 then @
219219 else unit
220220 }, wrapErr("invalid stakedByUserREADONLY result")))
221221 let price = if ((shareAssetEmission == 0))
222222 then scale18BigInt
223223 else fraction(toBigInt(stakedAmount), scale18BigInt, toBigInt(shareAssetEmission), FLOOR)
224224 price
225225 }
226226
227227
228228 @Callable(i)
229229 func setManager (pendingManagerPublicKey) = {
230230 let checkCaller = mustManager(i)
231231 if ((checkCaller == checkCaller))
232232 then {
233233 let checkManagerPublicKey = fromBase58String(pendingManagerPublicKey)
234234 if ((checkManagerPublicKey == checkManagerPublicKey))
235235 then [StringEntry(keyPendingManagerPublicKey(), pendingManagerPublicKey)]
236236 else throw("Strict value is not equal to itself.")
237237 }
238238 else throw("Strict value is not equal to itself.")
239239 }
240240
241241
242242
243243 @Callable(i)
244244 func confirmManager () = {
245245 let pm = pendingManagerPublicKeyOrUnit()
246246 let hasPM = if (isDefined(pm))
247247 then true
248248 else throwErr("no pending manager")
249249 if ((hasPM == hasPM))
250250 then {
251251 let checkPM = if ((i.callerPublicKey == value(pm)))
252252 then true
253253 else throwErr("you are not pending manager")
254254 if ((checkPM == checkPM))
255255 then [StringEntry(keyManagerPublicKey(), toBase58String(value(pm))), DeleteEntry(keyPendingManagerPublicKey())]
256256 else throw("Strict value is not equal to itself.")
257257 }
258258 else throw("Strict value is not equal to itself.")
259259 }
260260
261261
262262
263263 @Callable(i)
264264 func create (baseAssetIdStr,shareAssetIdStr,shareAssetName,shareAssetDescription,shareAssetLogo) = {
265265 let shareAssetLabel = "LP_STAKING_POOLS"
266266 let baseAssetId = parseAssetId(baseAssetIdStr)
267267 let checks = [mustManager(i), if (isDefined(getPoolInfo(baseAssetId)))
268268 then true
269269 else throwErr("invalid base asset")]
270270 if ((checks == checks))
271271 then {
272272 let commonState = [IntegerEntry(keyPeriod(baseAssetId), 0)]
273273 if ((shareAssetIdStr == ""))
274274 then {
275275 let shareAssetIssueAmount = 1
276276 let shareAssetIssueAction = Issue(shareAssetName, shareAssetDescription, shareAssetIssueAmount, shareAssetDecimals, true)
277277 let calculatedShareAssetId = calculateAssetId(shareAssetIssueAction)
278278 let shareAssetBurnAction = Burn(calculatedShareAssetId, shareAssetIssueAmount)
279279 let calculatedShareAssetIdStr = toBase58String(calculatedShareAssetId)
280280 let createOrUpdate = invoke(assetsStoreContract, "createOrUpdate", [calculatedShareAssetIdStr, shareAssetLogo, false], nil)
281281 if ((createOrUpdate == createOrUpdate))
282282 then {
283283 let addLabel = invoke(assetsStoreContract, "addLabel", [calculatedShareAssetIdStr, shareAssetLabel], nil)
284284 if ((addLabel == addLabel))
285285 then $Tuple2((commonState ++ [shareAssetIssueAction, shareAssetBurnAction, StringEntry(keyShareAssetId(baseAssetId), calculatedShareAssetIdStr), StringEntry(keyBaseAssetId(calculatedShareAssetId), baseAssetIdStr)]), calculatedShareAssetIdStr)
286286 else throw("Strict value is not equal to itself.")
287287 }
288288 else throw("Strict value is not equal to itself.")
289289 }
290290 else {
291291 let shareAssetId = fromBase58String(shareAssetIdStr)
292292 let shareAssetInfo = valueOrErrorMessage(assetInfo(shareAssetId), wrapErr("invalid share asset id"))
293293 let checkIssuer = if ((shareAssetInfo.issuer == lpStakingContract))
294294 then true
295295 else throwErr("invalid share asset id issuer")
296296 if ((checkIssuer == checkIssuer))
297297 then $Tuple2((commonState ++ [StringEntry(keyShareAssetId(baseAssetId), shareAssetIdStr), StringEntry(keyShareAssetId(shareAssetId), baseAssetIdStr)]), shareAssetIdStr)
298298 else throw("Strict value is not equal to itself.")
299299 }
300300 }
301301 else throw("Strict value is not equal to itself.")
302302 }
303303
304304
305305
306306 @Callable(i)
307307 func put () = {
308308 let pmt = if ((size(i.payments) == 1))
309309 then i.payments[0]
310310 else throwErr("exactly 1 payment is expected")
311311 let baseAssetId = pmt.assetId
312312 let userAddress = i.caller
313313 let checks = [shutdownCheck(i), if (isDefined(getString(keyShareAssetId(baseAssetId))))
314314 then true
315315 else throwErr("invalid asset")]
316316 if ((checks == checks))
317317 then {
318318 let $t01103211135 = valueOrErrorMessage(getPoolInfo(baseAssetId), wrapErr("invalid asset"))
319319 let poolAddress = $t01103211135._1
320320 let lpAssetId = $t01103211135._2
321321 let period = value(getInteger(keyPeriod(baseAssetId)))
322322 let userBaseAssetAmountToConvertPeriodOption = getInteger(keyUserBaseAssetAmountToConvertPeriod(baseAssetId, userAddress))
323323 let claimShareAssetInvocation = if ((userBaseAssetAmountToConvertPeriodOption == unit))
324324 then unit
325325 else {
326326 let userBaseAssetAmountToConvertPeriod = value(userBaseAssetAmountToConvertPeriodOption)
327327 if ((userBaseAssetAmountToConvertPeriod == period))
328328 then unit
329329 else invoke(this, "claimShareAsset", [assetIdToString(baseAssetId), toString(userAddress)], nil)
330330 }
331331 if ((claimShareAssetInvocation == claimShareAssetInvocation))
332332 then {
333333 let baseAssetAmountToConvert = valueOrElse(getInteger(keyBaseAssetAmountToConvert(baseAssetId)), 0)
334334 let userBaseAssetAmountToConvert = valueOrElse(getInteger(keyUserBaseAssetAmountToConvert(baseAssetId, userAddress)), 0)
335335 $Tuple2([IntegerEntry(keyBaseAssetAmountToConvert(baseAssetId), (baseAssetAmountToConvert + pmt.amount)), IntegerEntry(keyUserBaseAssetAmountToConvert(baseAssetId, userAddress), (userBaseAssetAmountToConvert + pmt.amount)), IntegerEntry(keyUserBaseAssetAmountToConvertPeriod(baseAssetId, userAddress), period), IntegerEntry(keyHistoryEntry(baseAssetId, "put", period, userAddress, i.transactionId), pmt.amount)], unit)
336336 }
337337 else throw("Strict value is not equal to itself.")
338338 }
339339 else throw("Strict value is not equal to itself.")
340340 }
341341
342342
343343
344344 @Callable(i)
345345 func claimShareAsset (baseAssetIdStr,userAddressStr) = {
346346 let checks = [shutdownCheck(i)]
347347 if ((checks == checks))
348348 then {
349349 let userAddress = if ((userAddressStr == ""))
350350 then i.caller
351351 else {
352352 let checkCaller = mustThis(i)
353353 if ((checkCaller == checkCaller))
354354 then valueOrErrorMessage(addressFromString(userAddressStr), wrapErr("invalid user address"))
355355 else throw("Strict value is not equal to itself.")
356356 }
357357 if ((userAddress == userAddress))
358358 then {
359359 let baseAssetId = parseAssetId(baseAssetIdStr)
360360 let shareAssetId = value(parseAssetId(valueOrErrorMessage(getString(keyShareAssetId(baseAssetId)), wrapErr("invalid base asset id"))))
361361 if ((shareAssetId == shareAssetId))
362362 then {
363363 let period = valueOrErrorMessage(getInteger(keyPeriod(baseAssetId)), wrapErr("invalid period"))
364364 if ((period == period))
365365 then {
366366 let userBaseAssetAmountToConvert = valueOrElse(getInteger(keyUserBaseAssetAmountToConvert(baseAssetId, userAddress)), 0)
367367 let checkAmountToConvert = if ((userBaseAssetAmountToConvert > 0))
368368 then true
369369 else throwErr("nothing to claim")
370370 if ((checkAmountToConvert == checkAmountToConvert))
371371 then {
372372 let userBaseAssetAmountToConvertPeriod = valueOrErrorMessage(getInteger(keyUserBaseAssetAmountToConvertPeriod(baseAssetId, userAddress)), wrapErr("failed to get period"))
373373 let checkPeriod = if ((period > userBaseAssetAmountToConvertPeriod))
374374 then true
375375 else throwErr("invalid period")
376376 if ((checkPeriod == checkPeriod))
377377 then {
378378 let price = toBigInt(valueOrErrorMessage(getBinary(keyPricePeriodPut(baseAssetId, userBaseAssetAmountToConvertPeriod)), wrapErr("failed to get price")))
379379 let shareAssetAmount = toInt(fraction(toBigInt(userBaseAssetAmountToConvert), scale18BigInt, price))
380380 $Tuple2([IntegerEntry(keyUserBaseAssetAmountToConvert(baseAssetId, userAddress), 0), ScriptTransfer(userAddress, shareAssetAmount, shareAssetId), IntegerEntry(keyHistoryEntry(baseAssetId, "claimShareAsset", period, userAddress, i.transactionId), shareAssetAmount)], unit)
381381 }
382382 else throw("Strict value is not equal to itself.")
383383 }
384384 else throw("Strict value is not equal to itself.")
385385 }
386386 else throw("Strict value is not equal to itself.")
387387 }
388388 else throw("Strict value is not equal to itself.")
389389 }
390390 else throw("Strict value is not equal to itself.")
391391 }
392392 else throw("Strict value is not equal to itself.")
393393 }
394394
395395
396396
397397 @Callable(i)
398398 func get () = {
399399 let checks = [shutdownCheck(i)]
400400 if ((checks == checks))
401401 then {
402402 let pmt = if ((size(i.payments) == 1))
403403 then i.payments[0]
404404 else throwErr("exactly 1 payment is expected")
405405 let shareAssetId = pmt.assetId
406406 let baseAssetId = value(parseAssetId(valueOrErrorMessage(getString(keyBaseAssetId(shareAssetId)), wrapErr("invalid share asset id"))))
407407 if ((baseAssetId == baseAssetId))
408408 then {
409409 let userAddress = i.caller
410410 let $t01483614939 = valueOrErrorMessage(getPoolInfo(baseAssetId), wrapErr("invalid asset"))
411411 let poolAddress = $t01483614939._1
412412 let lpAssetId = $t01483614939._2
413413 let period = value(getInteger(keyPeriod(baseAssetId)))
414414 let userShareAssetAmountToConvertPeriodOption = getInteger(keyUserShareAssetAmountToConvertPeriod(baseAssetId, userAddress))
415415 let claimBaseAssetInvocation = if ((userShareAssetAmountToConvertPeriodOption == unit))
416416 then unit
417417 else {
418418 let userShareAssetAmountToConvertPeriod = value(userShareAssetAmountToConvertPeriodOption)
419419 if ((userShareAssetAmountToConvertPeriod == period))
420420 then unit
421421 else invoke(this, "claimBaseAsset", [userAddress], nil)
422422 }
423423 if ((claimBaseAssetInvocation == claimBaseAssetInvocation))
424424 then {
425425 let shareAssetAmountToConvert = valueOrElse(getInteger(keyShareAssetAmountToConvert(baseAssetId)), 0)
426426 let userShareAssetAmountToConvert = valueOrElse(getInteger(keyUserShareAssetAmountToConvert(baseAssetId, userAddress)), 0)
427427 $Tuple2([IntegerEntry(keyShareAssetAmountToConvert(baseAssetId), (shareAssetAmountToConvert + pmt.amount)), IntegerEntry(keyUserShareAssetAmountToConvert(baseAssetId, userAddress), (userShareAssetAmountToConvert + pmt.amount)), IntegerEntry(keyUserShareAssetAmountToConvertPeriod(baseAssetId, userAddress), period), IntegerEntry(keyHistoryEntry(baseAssetId, "get", period, userAddress, i.transactionId), pmt.amount)], unit)
428428 }
429429 else throw("Strict value is not equal to itself.")
430430 }
431431 else throw("Strict value is not equal to itself.")
432432 }
433433 else throw("Strict value is not equal to itself.")
434434 }
435435
436436
437437
438438 @Callable(i)
439439 func claimBaseAsset (baseAssetIdStr,userAddressStr) = {
440440 let checks = [shutdownCheck(i)]
441441 if ((checks == checks))
442442 then {
443443 let userAddress = if ((userAddressStr == ""))
444444 then i.caller
445445 else {
446446 let checkCaller = mustThis(i)
447447 if ((checkCaller == checkCaller))
448448 then valueOrErrorMessage(addressFromString(userAddressStr), wrapErr("invalid user address"))
449449 else throw("Strict value is not equal to itself.")
450450 }
451451 if ((userAddress == userAddress))
452452 then {
453453 let baseAssetId = parseAssetId(baseAssetIdStr)
454454 let shareAssetId = value(parseAssetId(valueOrErrorMessage(getString(keyShareAssetId(baseAssetId)), wrapErr("invalid base asset id"))))
455455 if ((shareAssetId == shareAssetId))
456456 then {
457457 let period = valueOrErrorMessage(getInteger(keyPeriod(baseAssetId)), wrapErr("invalid period"))
458458 if ((period == period))
459459 then {
460460 let userShareAssetAmountToConvert = valueOrElse(getInteger(keyUserShareAssetAmountToConvert(baseAssetId, userAddress)), 0)
461461 let checkAmountToConvert = if ((userShareAssetAmountToConvert > 0))
462462 then true
463463 else throwErr("nothing to claim")
464464 if ((checkAmountToConvert == checkAmountToConvert))
465465 then {
466466 let userShareAssetAmountToConvertPeriod = valueOrErrorMessage(getInteger(keyUserShareAssetAmountToConvertPeriod(baseAssetId, userAddress)), wrapErr("failed to get period"))
467467 let checkPeriod = if ((period > userShareAssetAmountToConvertPeriod))
468468 then true
469469 else throwErr("invalid period")
470470 if ((checkPeriod == checkPeriod))
471471 then {
472472 let price = toBigInt(valueOrErrorMessage(getBinary(keyPricePeriodGet(baseAssetId, userShareAssetAmountToConvertPeriod)), wrapErr("failed to get price")))
473473 let baseAssetAmount = toInt(fraction(toBigInt(userShareAssetAmountToConvert), price, scale18BigInt))
474474 $Tuple2([IntegerEntry(keyUserShareAssetAmountToConvert(baseAssetId, userAddress), 0), ScriptTransfer(userAddress, baseAssetAmount, baseAssetId), IntegerEntry(keyHistoryEntry(baseAssetId, "claimBaseAsset", period, userAddress, i.transactionId), baseAssetAmount)], unit)
475475 }
476476 else throw("Strict value is not equal to itself.")
477477 }
478478 else throw("Strict value is not equal to itself.")
479479 }
480480 else throw("Strict value is not equal to itself.")
481481 }
482482 else throw("Strict value is not equal to itself.")
483483 }
484484 else throw("Strict value is not equal to itself.")
485485 }
486486 else throw("Strict value is not equal to itself.")
487487 }
488488
489489
490490
491491 @Callable(i)
492492 func finalize (baseAssetIdStr) = {
493493 let checks = [shutdownCheck(i)]
494494 if ((checks == checks))
495495 then {
496496 let baseAssetId = parseAssetId(baseAssetIdStr)
497497 let shareAssetId = value(parseAssetId(valueOrErrorMessage(getString(keyShareAssetId(baseAssetId)), wrapErr("invalid base asset id"))))
498498 if ((shareAssetId == shareAssetId))
499499 then {
500500 let period = valueOrErrorMessage(getInteger(keyPeriod(baseAssetId)), wrapErr("invalid period"))
501501 if ((period == period))
502502 then {
503503 let periodStartHeightOption = getInteger(keyPeriodStartHeight(baseAssetId, period))
504504 let checkDelay = if ((periodStartHeightOption == unit))
505505 then unit
506506 else {
507507 let delay = (height - value(periodStartHeightOption))
508508 let blocksToWait = min([0, (minDelay - delay)])
509509 if ((blocksToWait == 0))
510510 then unit
511511 else throwErr(makeString(["finalization will be possible in ", toString(blocksToWait), " blocks"], ""))
512512 }
513513 if ((checkDelay == checkDelay))
514514 then {
515- let $t01888119061 = valueOrErrorMessage(getPoolInfo(baseAssetId), wrapErr("invalid asset"))
516- let poolAddress = $t01888119061._1
517- let lpAssetId = $t01888119061._2
515+ let $t01888119097 = valueOrErrorMessage(getPoolInfo(baseAssetId), wrapErr("invalid asset"))
516+ let poolAddress = $t01888119097._1
517+ let lpAssetId = $t01888119097._2
518518 let stakingReward = valueOrErrorMessage({
519519 let @ = invoke(stakingContract, "claimWx", [assetIdToString(lpAssetId)], nil)
520520 if ($isInstanceOf(@, "Int"))
521521 then @
522522 else unit
523523 }, wrapErr("invalid claimWx result"))
524524 if ((stakingReward == stakingReward))
525525 then {
526526 let useStakingReward = if ((stakingReward > 0))
527527 then {
528528 let lockPart = (stakingReward / 2)
529529 let convertPart = (stakingReward - lockPart)
530530 let r = invoke(boostingContract, "userMaxDurationREADONLY", [toString(this)], nil)
531531 let lock = match r {
532532 case _ =>
533533 if (if (if ($isInstanceOf($match0._1, "String"))
534534 then $isInstanceOf($match0._2, "Int")
535535 else false)
536536 then $isInstanceOf($match0, "(String, Int)")
537537 else false)
538538 then {
539539 let function = $match0._1
540540 let duration = $match0._2
541541 if ((lockPart > 0))
542542 then invoke(boostingContract, function, [duration], [AttachedPayment(wxAssetId, lockPart)])
543543 else unit
544544 }
545545 else throwErr("invalid lock params")
546546 }
547547 if ((lock == lock))
548548 then {
549549 let convertedAmount = {
550550 let inAssetId = wxAssetId
551551 let minimumToReceive = 0
552552 let outAssetIdStr = assetIdToString(usdnAssetId)
553553 let targetAddress = ""
554554 valueOrErrorMessage({
555555 let @ = invoke(swapContract, "swap", [minimumToReceive, outAssetIdStr, targetAddress], [AttachedPayment(inAssetId, convertPart)])
556556 if ($isInstanceOf(@, "Int"))
557557 then @
558558 else unit
559559 }, wrapErr("invalid swap result"))
560560 }
561561 if ((convertedAmount == convertedAmount))
562562 then {
563563 let lpAssetAmount = {
564564 let minOutAmount = 0
565565 let autoStake = true
566566 valueOrErrorMessage({
567567 let @ = invoke(poolAddress, "putOneTknV2", [minOutAmount, autoStake], [AttachedPayment(usdnAssetId, convertedAmount)])
568568 if ($isInstanceOf(@, "Int"))
569569 then @
570570 else unit
571571 }, wrapErr("invalid putOneTknV2 result"))
572572 }
573573 if ((lpAssetAmount == lpAssetAmount))
574574 then lpAssetAmount
575575 else throw("Strict value is not equal to itself.")
576576 }
577577 else throw("Strict value is not equal to itself.")
578578 }
579579 else throw("Strict value is not equal to itself.")
580580 }
581581 else unit
582582 if ((useStakingReward == useStakingReward))
583583 then {
584584 let shareAssetAmountToConvert = valueOrElse(getInteger(keyShareAssetAmountToConvert(baseAssetId)), 0)
585585 let getActions = if ((shareAssetAmountToConvert > 0))
586586 then {
587587 let price = calcPrice(lpAssetId, shareAssetId)
588588 if ((price == price))
589589 then {
590590 let unstakeAmount = toInt(fraction(toBigInt(shareAssetAmountToConvert), price, scale18BigInt, FLOOR))
591591 let baseAssetAmount = {
592592 let outAssetId = baseAssetId
593593 let minOutAmount = 0
594594 valueOrErrorMessage({
595595 let @ = invoke(poolAddress, "unstakeAndGetOneTknV2", [unstakeAmount, assetIdToString(outAssetId), minOutAmount], nil)
596596 if ($isInstanceOf(@, "Int"))
597597 then @
598598 else unit
599599 }, wrapErr("invalid unstakeAndGetOneTknV2 result"))
600600 }
601601 if ((baseAssetAmount == baseAssetAmount))
602602 then {
603603 let shareAssetBurnActions = [Burn(shareAssetId, shareAssetAmountToConvert)]
604604 let priceGet = fraction(toBigInt(baseAssetAmount), scale18BigInt, toBigInt(shareAssetAmountToConvert), FLOOR)
605605 let priceGetUpdateActions = [BinaryEntry(keyPricePeriodGet(baseAssetId, period), toBytes(priceGet)), StringEntry(keyPriceGetHistory(baseAssetId), toString(priceGet))]
606606 (shareAssetBurnActions ++ priceGetUpdateActions)
607607 }
608608 else throw("Strict value is not equal to itself.")
609609 }
610610 else throw("Strict value is not equal to itself.")
611611 }
612612 else nil
613613 let baseAssetAmountToConvert = valueOrElse(getInteger(keyBaseAssetAmountToConvert(baseAssetId)), 0)
614614 let putActions = if ((baseAssetAmountToConvert > 0))
615615 then {
616616 let lpAssetAmount = {
617617 let minOutAmount = 0
618618 let autoStake = true
619619 valueOrErrorMessage({
620620 let @ = invoke(poolAddress, "putOneTknV2", [minOutAmount, autoStake], [AttachedPayment(baseAssetId, baseAssetAmountToConvert)])
621621 if ($isInstanceOf(@, "Int"))
622622 then @
623623 else unit
624624 }, wrapErr("invalid putOneTknV2 result"))
625625 }
626626 if ((lpAssetAmount == lpAssetAmount))
627627 then {
628628 let price = calcPrice(lpAssetId, shareAssetId)
629629 if ((price == price))
630630 then {
631631 let shareAssetAmount = toInt(fraction(toBigInt(lpAssetAmount), scale18BigInt, price, FLOOR))
632632 let isReissuable = true
633633 let shareAssetReissueActions = [Reissue(shareAssetId, shareAssetAmount, isReissuable)]
634634 let pricePut = fraction(toBigInt(baseAssetAmountToConvert), scale18BigInt, toBigInt(shareAssetAmount))
635635 let pricePutUpdateActions = [BinaryEntry(keyPricePeriodPut(baseAssetId, period), toBytes(pricePut)), StringEntry(keyPricePutHistory(baseAssetId), toString(pricePut))]
636636 (shareAssetReissueActions ++ pricePutUpdateActions)
637637 }
638638 else throw("Strict value is not equal to itself.")
639639 }
640640 else throw("Strict value is not equal to itself.")
641641 }
642642 else nil
643643 let newPeriod = (period + 1)
644644 let lastPrice = calcPrice(lpAssetId, shareAssetId)
645645 let actions = (([IntegerEntry(keyPeriod(baseAssetId), newPeriod), IntegerEntry(keyPeriodStartHeight(baseAssetId, newPeriod), height), IntegerEntry(keyShareAssetAmountToConvert(baseAssetId), 0), IntegerEntry(keyBaseAssetAmountToConvert(baseAssetId), 0), BinaryEntry(keyPricePeriod(baseAssetId, period), toBytes(lastPrice)), StringEntry(keyPriceHistory(baseAssetId), toString(lastPrice))] ++ putActions) ++ getActions)
646646 $Tuple2(actions, toBytes(lastPrice))
647647 }
648648 else throw("Strict value is not equal to itself.")
649649 }
650650 else throw("Strict value is not equal to itself.")
651651 }
652652 else throw("Strict value is not equal to itself.")
653653 }
654654 else throw("Strict value is not equal to itself.")
655655 }
656656 else throw("Strict value is not equal to itself.")
657657 }
658658 else throw("Strict value is not equal to itself.")
659659 }
660660
661661
662662 @Verifier(tx)
663663 func verify () = {
664664 let targetPublicKey = match managerPublicKeyOrUnit() {
665665 case pk: ByteVector =>
666666 pk
667667 case _: Unit =>
668668 tx.senderPublicKey
669669 case _ =>
670670 throw("Match error")
671671 }
672672 sigVerify(tx.bodyBytes, tx.proofs[0], targetPublicKey)
673673 }
674674

github/deemru/w8io/3ef1775 
113.46 ms