tx · 13x6zJHZgeSPRUKPxZHUgcUK1fBLrxgsZxsr3oc3FB3b 3PH75p2rmMKCV2nyW4TsAdFgFtmc61mJaqA: -0.02400000 Waves 2024.03.16 22:17 [4086826] smart account 3PH75p2rmMKCV2nyW4TsAdFgFtmc61mJaqA > SELF 0.00000000 Waves
{ "type": 13, "id": "13x6zJHZgeSPRUKPxZHUgcUK1fBLrxgsZxsr3oc3FB3b", "fee": 2400000, "feeAssetId": null, "timestamp": 1710616694471, "version": 2, "chainId": 87, "sender": "3PH75p2rmMKCV2nyW4TsAdFgFtmc61mJaqA", "senderPublicKey": "3GtkwhnMmG1yeozW51o4dJ1x3BDToPaLBXyBWKGdAc2e", "proofs": [ "3jGW4ZwuiL8cZ4sVdzK7hW1MaoSaF2G9on2zL5KW6cNqELMUHnKW3nF43NWvQzHzw2BFSznLasd4HFo1e1Wzc2Kp" ], "script": "base64:BgI3CAISAwoBCBIAEgQKAggIEgQKAggIEgASABIDCgEIEgMKAQgSAwoBCBIDCgEIEgMKAQgSAwoBCEUACnBlcmNoUHJpY2UJAGgCAGQAwIQ9AAVzY2FsZQCQTgAGc2NhbGUyAMCEPQEKaXNTaWNrRHVjawEGZHVja0lkCQCsAgIFBmR1Y2tJZAIFX3NpY2sBFHRyeUdldFN0cmluZ0V4dGVybmFsAgdhZGRyZXNzA2tleQQHJG1hdGNoMAkAnQgCBQdhZGRyZXNzBQNrZXkDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFhBQckbWF0Y2gwBQFhAgABDHRyeUdldFN0cmluZwEDa2V5CQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCBQR0aGlzBQNrZXkBF3N0YXRpY0tleV9vcmFjbGVBZGRyZXNzAAIUc3RhdGljX29yYWNsZUFkZHJlc3MBFHN0YXRpY0tleV9lZ2dBc3NldElkAAIRc3RhdGljX2VnZ0Fzc2V0SWQBGnN0YXRpY0tleV9pbmN1YmF0b3JBZGRyZXNzAAIXc3RhdGljX2luY3ViYXRvckFkZHJlc3MBGHN0YXRpY0tleV9yZWJpcnRoQWRkcmVzcwACFXN0YXRpY19yZWJpcnRoQWRkcmVzcwEec3RhdGljS2V5X3R1cnRsZVJlYmlydGhBZGRyZXNzAAIbc3RhdGljX3R1cnRsZVJlYmlydGhBZGRyZXNzARhzdGF0aWNLZXlfYnJlZWRlckFkZHJlc3MAAhVzdGF0aWNfYnJlZWRlckFkZHJlc3MBHHN0YXRpY0tleV9yZWZDb250cmFjdEFkZHJlc3MAAhlzdGF0aWNfcmVmQ29udHJhY3RBZGRyZXNzARZzdGF0aWNLZXlfaXRlbXNBZGRyZXNzAAITc3RhdGljX2l0ZW1zQWRkcmVzcwEZc3RhdGljS2V5X21ldGFSYWNlQWRkcmVzcwACFnN0YXRpY19tZXRhUmFjZUFkZHJlc3MBG3N0YXRpY0tleV9hY2NCb29zdGVyQWRkcmVzcwACGHN0YXRpY19hY2NCb29zdGVyQWRkcmVzcwEfc3RhdGljS2V5X3Byb3h5U3Rha2luZ0NvbnRyYWN0cwACHHN0YXRpY19wcm94eVN0YWtpbmdDb250cmFjdHMBFXN0YXRpY0tleV9tYWludGVuYW5jZQACEnN0YXRpY19tYWludGVuYW5jZQEZc3RhdGljS2V5X2NmTWFzdGVyQWRkcmVzcwACFnN0YXRpY19jZk1hc3RlckFkZHJlc3MBFXN0YXRpY0tleV9kdWNrV3JhcHBlcgACEnN0YXRpY19kdWNrV3JhcHBlcgEYc3RhdGljS2V5X2NvdXBvbnNBZGRyZXNzAAIVc3RhdGljX2NvdXBvbnNBZGRyZXNzARVzdGF0aWNLZXlfYnVybkFkZHJlc3MAAhJzdGF0aWNfYnVybkFkZHJlc3MBEnN0YXRpY0tleV9leHRyYUZlZQACD3N0YXRpY19leHRyYUZlZQEXc3RhdGljS2V5X2ZlZUFnZ3JlZ2F0b3IAAhRzdGF0aWNfZmVlQWdncmVnYXRvcgEVc3RhdGljS2V5X2h1bnRBZGRyZXNzAAISc3RhdGljX2h1bnRBZGRyZXNzAQlnZXRPcmFjbGUACQEHQWRkcmVzcwEJANkEAQkBDHRyeUdldFN0cmluZwEJARdzdGF0aWNLZXlfb3JhY2xlQWRkcmVzcwABDWdldEVnZ0Fzc2V0SWQACQDZBAEJARR0cnlHZXRTdHJpbmdFeHRlcm5hbAIJAQlnZXRPcmFjbGUACQEUc3RhdGljS2V5X2VnZ0Fzc2V0SWQAARNnZXRJbmN1YmF0b3JBZGRyZXNzAAkBB0FkZHJlc3MBCQDZBAEJARR0cnlHZXRTdHJpbmdFeHRlcm5hbAIJAQlnZXRPcmFjbGUACQEac3RhdGljS2V5X2luY3ViYXRvckFkZHJlc3MAARFnZXRSZWJpcnRoQWRkcmVzcwAJAQdBZGRyZXNzAQkA2QQBCQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAkBGHN0YXRpY0tleV9yZWJpcnRoQWRkcmVzcwABF2dldFR1cnRsZVJlYmlydGhBZGRyZXNzAAkBB0FkZHJlc3MBCQDZBAEJARR0cnlHZXRTdHJpbmdFeHRlcm5hbAIJAQlnZXRPcmFjbGUACQEec3RhdGljS2V5X3R1cnRsZVJlYmlydGhBZGRyZXNzAAERZ2V0QnJlZWRlckFkZHJlc3MACQEHQWRkcmVzcwEJANkEAQkBFHRyeUdldFN0cmluZ0V4dGVybmFsAgkBCWdldE9yYWNsZQAJARhzdGF0aWNLZXlfYnJlZWRlckFkZHJlc3MAARVnZXRSZWZDb250cmFjdEFkZHJlc3MACQEHQWRkcmVzcwEJANkEAQkBFHRyeUdldFN0cmluZ0V4dGVybmFsAgkBCWdldE9yYWNsZQAJARxzdGF0aWNLZXlfcmVmQ29udHJhY3RBZGRyZXNzAAEPZ2V0SXRlbXNBZGRyZXNzAAkBB0FkZHJlc3MBCQDZBAEJARR0cnlHZXRTdHJpbmdFeHRlcm5hbAIJAQlnZXRPcmFjbGUACQEWc3RhdGljS2V5X2l0ZW1zQWRkcmVzcwABEmdldE1ldGFyYWNlQWRkcmVzcwAJAQdBZGRyZXNzAQkA2QQBCQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAkBGXN0YXRpY0tleV9tZXRhUmFjZUFkZHJlc3MAARRnZXRBY2NCb29zdGVyQWRkcmVzcwAJAQdBZGRyZXNzAQkA2QQBCQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAkBG3N0YXRpY0tleV9hY2NCb29zdGVyQWRkcmVzcwABD2dldFByb3h5U3Rha2luZwAJARR0cnlHZXRTdHJpbmdFeHRlcm5hbAIJAQlnZXRPcmFjbGUACQEfc3RhdGljS2V5X3Byb3h5U3Rha2luZ0NvbnRyYWN0cwABDmdldE1haW50ZW5hbmNlAAkBFHRyeUdldFN0cmluZ0V4dGVybmFsAgkBCWdldE9yYWNsZQAJARVzdGF0aWNLZXlfbWFpbnRlbmFuY2UAARJnZXRDZk1hc3RlckFkZHJlc3MACQEHQWRkcmVzcwEJANkEAQkBFHRyeUdldFN0cmluZ0V4dGVybmFsAgkBCWdldE9yYWNsZQAJARlzdGF0aWNLZXlfY2ZNYXN0ZXJBZGRyZXNzAAEQZ2V0RHVja1dyYXBwZXJTYwAJAQdBZGRyZXNzAQkA2QQBCQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAkBFXN0YXRpY0tleV9kdWNrV3JhcHBlcgABEWdldENvdXBvbnNBZGRyZXNzAAkBB0FkZHJlc3MBCQDZBAEJARR0cnlHZXRTdHJpbmdFeHRlcm5hbAIJAQlnZXRPcmFjbGUACQEYc3RhdGljS2V5X2NvdXBvbnNBZGRyZXNzAAEOZ2V0QnVybkFkZHJlc3MACQEHQWRkcmVzcwEJANkEAQkBFHRyeUdldFN0cmluZ0V4dGVybmFsAgkBCWdldE9yYWNsZQAJARVzdGF0aWNLZXlfYnVybkFkZHJlc3MAARBnZXRGZWVBZ2dyZWdhdG9yAAkBB0FkZHJlc3MBCQDZBAEJARR0cnlHZXRTdHJpbmdFeHRlcm5hbAIJAQlnZXRPcmFjbGUACQEXc3RhdGljS2V5X2ZlZUFnZ3JlZ2F0b3IAAQ5nZXRIdW50QWRkcmVzcwAJAQdBZGRyZXNzAQkA2QQBCQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAkBFXN0YXRpY0tleV9odW50QWRkcmVzcwAADVJlZmVyZXJSZXdhcmQABQEWY2hlY2tBZGRpdGlvbmFsUGF5bWVudAEHcGF5bWVudAMJAQlpc0RlZmluZWQBCAUHcGF5bWVudAdhc3NldElkCQACAQIZRkNBUDogUGxlYXNlIGF0dGFjaCB3YXZlcwQJZmVlQW1vdW50CQERQGV4dHJOYXRpdmUoMTA1MCkCCQEJZ2V0T3JhY2xlAAkBEnN0YXRpY0tleV9leHRyYUZlZQADCQECIT0CCAUHcGF5bWVudAZhbW91bnQFCWZlZUFtb3VudAkAAgEJAKwCAgkArAICAhxGQ0FQOiBQbGVhc2UgYXR0YWNoIGV4YWN0bHkgCQCkAwEFCWZlZUFtb3VudAITIGFtb3VudCBvZiB3YXZlbGV0cwkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEQZ2V0RmVlQWdncmVnYXRvcgAFCWZlZUFtb3VudAUEdW5pdAUDbmlsARFnZXRSZXdhcmRQZXJCbG9jawAAAAEIaXNMb2NrZWQAAwkBAiE9AgkBDmdldE1haW50ZW5hbmNlAAIACQACAQkBDmdldE1haW50ZW5hbmNlAAAAAQ10cnlHZXRJbnRlZ2VyAQNrZXkEByRtYXRjaDAJAJoIAgUEdGhpcwUDa2V5AwkAAQIFByRtYXRjaDACA0ludAQBYgUHJG1hdGNoMAUBYgAAAQ10cnlHZXRCb29sZWFuAQNrZXkEByRtYXRjaDAJAJsIAgUEdGhpcwUDa2V5AwkAAQIFByRtYXRjaDACB0Jvb2xlYW4EAWIFByRtYXRjaDAFAWIHARV0cnlHZXRCb29sZWFuRXh0ZXJuYWwCB2FkZHJlc3MDa2V5BAckbWF0Y2gwCQCbCAIFB2FkZHJlc3MFA2tleQMJAAECBQckbWF0Y2gwAgdCb29sZWFuBAFiBQckbWF0Y2gwBQFiBwEOZ2V0QXNzZXRPcmlnaW4BCmdlbmVyYXRpb24DCQAAAgUKZ2VuZXJhdGlvbgIBRwkBE2dldEluY3ViYXRvckFkZHJlc3MACQERZ2V0QnJlZWRlckFkZHJlc3MAAQ5nZXRBc3NldFJhcml0eQIIZ2Vub3R5cGUKZ2VuZXJhdGlvbgQIcXVhbnRpdHkJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCCQEOZ2V0QXNzZXRPcmlnaW4BBQpnZW5lcmF0aW9uCQCsAgIJAKwCAgIGc3RhdHNfBQhnZW5vdHlwZQIJX3F1YW50aXR5CQCsAgIJAKwCAgIGc3RhdHNfBQhnZW5vdHlwZQITX3F1YW50aXR5IG5vdCBmb3VuZAQFcG93ZXIJAGwGCQBpAgCQTgUIcXVhbnRpdHkABAAFAAEAAgUFRkxPT1IDCQBmAgUFcG93ZXIAAAUFcG93ZXIAAgEIYXNTdHJpbmcBBXZhbHVlBAckbWF0Y2gwBQV2YWx1ZQMJAAECBQckbWF0Y2gwAgZTdHJpbmcEBnN0cmluZwUHJG1hdGNoMAUGc3RyaW5nCQACAQIhRkFTOiB3cm9uZyB0eXBlLCBleHBlY3RlZDogU3RyaW5nAQVhc0ludAEFdmFsdWUEByRtYXRjaDAFBXZhbHVlAwkAAQIFByRtYXRjaDACA0ludAQDaW50BQckbWF0Y2gwBQNpbnQJAAIBAh5GQUk6IHdyb25nIHR5cGUsIGV4cGVjdGVkOiBJbnQBCWFzQm9vbGVhbgEFdmFsdWUEByRtYXRjaDAFBXZhbHVlAwkAAQIFByRtYXRjaDACB0Jvb2xlYW4EB2Jvb2xlYW4FByRtYXRjaDAFB2Jvb2xlYW4JAAIBAiJGQUI6IHdyb25nIHR5cGUsIGV4cGVjdGVkOiBCb29sZWFuARRnZXRBc3NldEZhcm1pbmdQb3dlcgIHYXNzZXRJZAdhZGRyZXNzAwMJAAACCAkBBXZhbHVlAQkA7AcBBQdhc3NldElkBmlzc3VlcgkBEWdldEJyZWVkZXJBZGRyZXNzAAYJAAACCAkBBXZhbHVlAQkA7AcBBQdhc3NldElkBmlzc3VlcgkBE2dldEluY3ViYXRvckFkZHJlc3MABAlmYXJtQm9vc3QJAQVhc0ludAEJAPwHBAkBD2dldEl0ZW1zQWRkcmVzcwACGmNhbGN1bGF0ZUZhcm1pbmdQb3dlckJvb3N0CQDMCAIJANgEAQUHYXNzZXRJZAkAzAgCBQdhZGRyZXNzBQNuaWwFA25pbAMJAAACBQlmYXJtQm9vc3QFCWZhcm1Cb29zdAQJYXNzZXROYW1lCAkBBXZhbHVlAQkA7AcBBQdhc3NldElkBG5hbWUECWlzSmFja3BvdAkAAAIJALICAgkBBXZhbHVlAQUJYXNzZXROYW1lAAECAVUEB2Zhcm1HZW4DBQlpc0phY2twb3QCAAkBCGFzU3RyaW5nAQkA/AcECQERZ2V0QnJlZWRlckFkZHJlc3MAAg5nZXRHZW5Gcm9tTmFtZQkAzAgCBQlhc3NldE5hbWUFA25pbAUDbmlsAwkAAAIFB2Zhcm1HZW4FB2Zhcm1HZW4EBnJhcml0eQMFCWlzSmFja3BvdABkBApnZW5lcmF0aW9uCQCvAgIJALICAgUJYXNzZXROYW1lAAIAAQkBDmdldEFzc2V0UmFyaXR5AgUHZmFybUdlbgUKZ2VuZXJhdGlvbgQRdG90YWxGYXJtaW5nUG93ZXIJAGQCBQZyYXJpdHkJAGsDBQZyYXJpdHkFCWZhcm1Cb29zdABkCQCUCgIFB2Zhcm1HZW4FEXRvdGFsRmFybWluZ1Bvd2VyCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQINbm90IHZhbGlkIE5GVAEdZ2V0TGFzdEtub3duQXNzZXRGYXJtaW5nUG93ZXICB2FkZHJlc3MHYXNzZXRJZAkBDXRyeUdldEludGVnZXIBCQCsAgIJAKwCAgkArAICCQCsAgICCGFkZHJlc3NfBQdhZGRyZXNzAgdfYXNzZXRfBQdhc3NldElkAg1fZmFybWluZ1Bvd2VyAQxjYWxjSW50ZXJlc3QDEHByZXZpb3VzSW50ZXJlc3QWcHJldmlvdXNJbnRlcmVzdEhlaWdodBF0b3RhbEZhcm1pbmdQb3dlcgkAZAIFEHByZXZpb3VzSW50ZXJlc3QJAGkCCQBoAgkAaAIFBXNjYWxlCQERZ2V0UmV3YXJkUGVyQmxvY2sACQBlAgUGaGVpZ2h0BRZwcmV2aW91c0ludGVyZXN0SGVpZ2h0BRF0b3RhbEZhcm1pbmdQb3dlcgESZ2V0Q3VycmVudEludGVyZXN0AAMJAGYCCQENdHJ5R2V0SW50ZWdlcgECEnRvdGFsX2Zhcm1pbmdQb3dlcgAABBBwcmV2aW91c0ludGVyZXN0CQENdHJ5R2V0SW50ZWdlcgECF3RvdGFsX2xhc3RDaGVja0ludGVyZXN0BBZwcmV2aW91c0ludGVyZXN0SGVpZ2h0CQENdHJ5R2V0SW50ZWdlcgECHXRvdGFsX2xhc3RDaGVja0ludGVyZXN0SGVpZ2h0BBF0b3RhbEZhcm1pbmdQb3dlcgkBDXRyeUdldEludGVnZXIBAhJ0b3RhbF9mYXJtaW5nUG93ZXIJAQxjYWxjSW50ZXJlc3QDBRBwcmV2aW91c0ludGVyZXN0BRZwcmV2aW91c0ludGVyZXN0SGVpZ2h0BRF0b3RhbEZhcm1pbmdQb3dlcgMJAQIhPQIJAQ10cnlHZXRJbnRlZ2VyAQIRdG90YWxfc3RhcnRIZWlnaHQAAAkBDXRyeUdldEludGVnZXIBAhd0b3RhbF9sYXN0Q2hlY2tJbnRlcmVzdAkAAgECHGZhcm1pbmcgaXMgbm90IGxhdW5jaGVkLCB5ZXQBFGNhbGNBc3NldFJld2FyZERlbHRhAwdhZGRyZXNzB2Fzc2V0SWQRYXNzZXRGYXJtaW5nUG93ZXIEFmxhc3RDaGVja0Fzc2V0SW50ZXJlc3QJAQ10cnlHZXRJbnRlZ2VyAQkArAICCQCsAgIJAKwCAgkArAICAghhZGRyZXNzXwUHYWRkcmVzcwIHX2Fzc2V0XwUHYXNzZXRJZAISX2xhc3RDaGVja0ludGVyZXN0BA9jdXJyZW50SW50ZXJlc3QJARJnZXRDdXJyZW50SW50ZXJlc3QACQBoAgURYXNzZXRGYXJtaW5nUG93ZXIJAGUCBQ9jdXJyZW50SW50ZXJlc3QFFmxhc3RDaGVja0Fzc2V0SW50ZXJlc3QBFGFkZEFzc2V0SWRUb0dlbkVudHJ5Agdhc3NldElkCGFzc2V0R2VuBAxjdXJyZW50VmFsdWUJAQx0cnlHZXRTdHJpbmcBCQCsAgIJAKwCAgIHYXNzZXRzXwUIYXNzZXRHZW4CB19sb2NrZWQDCQAAAgUMY3VycmVudFZhbHVlAgAFB2Fzc2V0SWQJAKwCAgkArAICBQxjdXJyZW50VmFsdWUCASwFB2Fzc2V0SWQBDmdldFN0YWtlUmVzdWx0BAdhZGRyZXNzB2Fzc2V0SWQRYXNzZXRGYXJtaW5nUG93ZXIIdW5zdGFrZXIEBWFzc2V0CQDYBAEFB2Fzc2V0SWQJAMwIAgkBDEludGVnZXJFbnRyeQICEnRvdGFsX2Zhcm1pbmdQb3dlcgkAZAIJAQ10cnlHZXRJbnRlZ2VyAQISdG90YWxfZmFybWluZ1Bvd2VyBRFhc3NldEZhcm1pbmdQb3dlcgkAzAgCCQEMSW50ZWdlckVudHJ5AgIXdG90YWxfbGFzdENoZWNrSW50ZXJlc3QJARJnZXRDdXJyZW50SW50ZXJlc3QACQDMCAIJAQxJbnRlZ2VyRW50cnkCAh10b3RhbF9sYXN0Q2hlY2tJbnRlcmVzdEhlaWdodAUGaGVpZ2h0CQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICAgZhc3NldF8FBWFzc2V0AgZfb3duZXIFB2FkZHJlc3MJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgIIYWRkcmVzc18FB2FkZHJlc3MCB19hc3NldF8FBWFzc2V0Ag1fZmFybWluZ1Bvd2VyBRFhc3NldEZhcm1pbmdQb3dlcgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgkArAICAghhZGRyZXNzXwUHYWRkcmVzcwIHX2Fzc2V0XwUFYXNzZXQCEl9sYXN0Q2hlY2tJbnRlcmVzdAkBEmdldEN1cnJlbnRJbnRlcmVzdAAJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgkArAICAghhZGRyZXNzXwUHYWRkcmVzcwIHX2Fzc2V0XwUFYXNzZXQCCV91bnN0YWtlcgUIdW5zdGFrZXIFA25pbAEQZ2V0VW5zdGFrZVJlc3VsdAYHYWRkcmVzcwdhc3NldElkBWNvbG9yBmNhbGxlcgpyZWFsQ2FsbGVyCWNsYWltRWdncwQGbG9ja2VkCQEIaXNMb2NrZWQAAwkAAAIFBmxvY2tlZAUGbG9ja2VkBAVhc3NldAkA2AQBBQdhc3NldElkBAh1bnN0YWtlcgkBDHRyeUdldFN0cmluZwEJAKwCAgkArAICCQCsAgIJAKwCAgIIYWRkcmVzc18FB2FkZHJlc3MCB19hc3NldF8FBWFzc2V0AglfdW5zdGFrZXIDAwkBAiE9AgUIdW5zdGFrZXICAAkBAiE9AgUIdW5zdGFrZXIFCnJlYWxDYWxsZXIHCQACAQJXRlVOOiBJdCBzZWVtcyBkdWNrIHdhcyBzdGFrZWQgdGhyb3VoIGEgZGFwcCwgbm90IGRpcmVjdGx5LCBwbGVhc2UgdW5zdGFrZSB0aHJvdWdoIGRhcHAhBBFhc3NldEZhcm1pbmdQb3dlcgkBHWdldExhc3RLbm93bkFzc2V0RmFybWluZ1Bvd2VyAgUHYWRkcmVzcwUFYXNzZXQDCQEBIQEJAGYCBRFhc3NldEZhcm1pbmdQb3dlcgAACQACAQIqRkdVOiBBc3NldCBmYXJtaW5nIHBvd2VyIG5vdCBiaWdnZXIgdGhlbiAwBBBhc3NldFJld2FyZERlbHRhCQEUY2FsY0Fzc2V0UmV3YXJkRGVsdGEDBQdhZGRyZXNzBQVhc3NldAURYXNzZXRGYXJtaW5nUG93ZXIEDGZhcm1lZEFtb3VudAkAZAIFEGFzc2V0UmV3YXJkRGVsdGEJAQ10cnlHZXRJbnRlZ2VyAQkArAICCQCsAgIJAKwCAgkArAICAghhZGRyZXNzXwUHYWRkcmVzcwIHX2Fzc2V0XwUFYXNzZXQCFl9sYXN0Q2hlY2tGYXJtZWRBbW91bnQED3dpdGhkcmF3bkFtb3VudAkBDXRyeUdldEludGVnZXIBCQCsAgIJAKwCAgkArAICCQCsAgICCGFkZHJlc3NfBQdhZGRyZXNzAgdfYXNzZXRfBQVhc3NldAIQX3dpdGhkcmF3bkFtb3VudAQGcmV3YXJkCQBpAgkAZQIFDGZhcm1lZEFtb3VudAUPd2l0aGRyYXduQW1vdW50CQBoAgUFc2NhbGUAZAQOaXNXaXRob3V0UGVyY2gJAQ10cnlHZXRCb29sZWFuAQkArAICCQCsAgIJAKwCAgkArAICAghhZGRyZXNzXwUHYWRkcmVzcwIHX2Fzc2V0XwUFYXNzZXQCDl93aXRob3V0X3BlcmNoBBNyZXdhcmRBZnRlclNpY2tOZXNzBQZyZXdhcmQEDWFwcGVuZFBlcmNoZXMDBQ5pc1dpdGhvdXRQZXJjaAkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIJAKwCAgkArAICCQCsAgICCGFkZHJlc3NfBQdhZGRyZXNzAgdfYXNzZXRfBQVhc3NldAIOX3dpdGhvdXRfcGVyY2gFA25pbAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgIIYWRkcmVzc18FB2FkZHJlc3MCEl9wZXJjaGVzQXZhaWxhYmxlXwUFY29sb3IJAGQCCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgkArAICCQCsAgICCGFkZHJlc3NfBQdhZGRyZXNzAhJfcGVyY2hlc0F2YWlsYWJsZV8FBWNvbG9yAAEFA25pbAQGc2VuZFR4AwUJY2xhaW1FZ2dzCQCUCgIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUGY2FsbGVyCQBoAgUTcmV3YXJkQWZ0ZXJTaWNrTmVzcwDAhD0JAQ1nZXRFZ2dBc3NldElkAAUDbmlsCQBoAgUTcmV3YXJkQWZ0ZXJTaWNrTmVzcwDAhD0JAJQKAgUDbmlsAAAJAJQKAgkAzggCCQDOCAIJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgISdG90YWxfZmFybWluZ1Bvd2VyCQBlAgkBDXRyeUdldEludGVnZXIBAhJ0b3RhbF9mYXJtaW5nUG93ZXIFEWFzc2V0RmFybWluZ1Bvd2VyCQDMCAIJAQxJbnRlZ2VyRW50cnkCAhd0b3RhbF9sYXN0Q2hlY2tJbnRlcmVzdAkBEmdldEN1cnJlbnRJbnRlcmVzdAAJAMwIAgkBDEludGVnZXJFbnRyeQICHXRvdGFsX2xhc3RDaGVja0ludGVyZXN0SGVpZ2h0BQZoZWlnaHQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICCQCsAgICBmFzc2V0XwUFYXNzZXQCBl9vd25lcgkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIJAKwCAgkArAICCQCsAgICCGFkZHJlc3NfBQdhZGRyZXNzAgdfYXNzZXRfBQVhc3NldAIJX3Vuc3Rha2VyCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgICCGFkZHJlc3NfBQdhZGRyZXNzAgdfYXNzZXRfBQVhc3NldAINX2Zhcm1pbmdQb3dlcgAACQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgICCGFkZHJlc3NfBQdhZGRyZXNzAgdfYXNzZXRfBQVhc3NldAISX2xhc3RDaGVja0ludGVyZXN0CQESZ2V0Q3VycmVudEludGVyZXN0AAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgkArAICAghhZGRyZXNzXwUHYWRkcmVzcwIHX2Fzc2V0XwUFYXNzZXQCEF93aXRoZHJhd25BbW91bnQJAGQCBQ93aXRoZHJhd25BbW91bnQJAGgCBRNyZXdhcmRBZnRlclNpY2tOZXNzBQZzY2FsZTIJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgIIYWRkcmVzc18FB2FkZHJlc3MCB19hc3NldF8FBWFzc2V0AhZfbGFzdENoZWNrRmFybWVkQW1vdW50CQBkAgkBDXRyeUdldEludGVnZXIBCQCsAgIJAKwCAgkArAICCQCsAgICCGFkZHJlc3NfBQdhZGRyZXNzAgdfYXNzZXRfBQVhc3NldAIWX2xhc3RDaGVja0Zhcm1lZEFtb3VudAUQYXNzZXRSZXdhcmREZWx0YQUDbmlsBQ1hcHBlbmRQZXJjaGVzCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFBmNhbGxlcgABBQdhc3NldElkBQNuaWwIBQZzZW5kVHgCXzEIBQZzZW5kVHgCXzIJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BE2NhbGN1bGF0ZVBlcmNoUHJpY2UBB2FkZHJlc3MEEWhhc0FydGVmYWN0U3Rha2VkCQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEUZ2V0QWNjQm9vc3RlckFkZHJlc3MACQCsAgIJAKwCAgILQVJULVhNSVNUTF8FB2FkZHJlc3MCBl9vd25lcgMJAAACBRFoYXNBcnRlZmFjdFN0YWtlZAIABQpwZXJjaFByaWNlCQBoAgkAaQIFCnBlcmNoUHJpY2UACgAJARBpc1Byb3h5U3Rha2luZ1NjAQdhZGRyZXNzBBBhbGxvd2VkQ29udHJhY3RzCQEPZ2V0UHJveHlTdGFraW5nAAQUYWxsb3dlZENvbnRyYWN0c0xpc3QJALUJAgUQYWxsb3dlZENvbnRyYWN0cwIBOwkBAiE9AgkAzwgCBRRhbGxvd2VkQ29udHJhY3RzTGlzdAUHYWRkcmVzcwUEdW5pdAESdW5zdGFrZU5GVEludGVybmFsAwVhc3NldAFpCGNsYWltRWdnBAdhc3NldElkCQDZBAEFBWFzc2V0BApyZWFsQ2FsbGVyCQClCAEIBQFpBmNhbGxlcgQHYWRkcmVzcwMJARBpc1Byb3h5U3Rha2luZ1NjAQkApQgBCAUBaQZjYWxsZXIJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyBQpyZWFsQ2FsbGVyBAVjb2xvcgkAsgICCAkBBXZhbHVlAQkA7AcBBQdhc3NldElkBG5hbWUAAQMJAAACBQVjb2xvcgIBVQkAAgECMEZVTjogdXNlIGFub3RoZXIgZnVuY3Rpb24gdG8gdW5zdGFrZSBKYWNrcG90IE5GVAQGcmVzdWx0CQEQZ2V0VW5zdGFrZVJlc3VsdAYFB2FkZHJlc3MFB2Fzc2V0SWQFBWNvbG9yCAUBaQZjYWxsZXIFCnJlYWxDYWxsZXIFCGNsYWltRWdnBQZyZXN1bHQBFnVuc3Rha2VKYWNrcG90SW50ZXJuYWwDBWFzc2V0AWkIY2xhaW1FZ2cEB2Fzc2V0SWQJANkEAQUFYXNzZXQECnJlYWxDYWxsZXIJAKUIAQgFAWkGY2FsbGVyBAdhZGRyZXNzAwkBEGlzUHJveHlTdGFraW5nU2MBCQClCAEIBQFpBmNhbGxlcgkApQgBCAUBaQxvcmlnaW5DYWxsZXIFCnJlYWxDYWxsZXIEBWNvbG9yCQEMdHJ5R2V0U3RyaW5nAQkArAICCQCsAgIJAKwCAgkArAICAghhZGRyZXNzXwUHYWRkcmVzcwIHX2Fzc2V0XwUFYXNzZXQCC19wZXJjaENvbG9yAwkBAiE9AgkAsgICCQEFdmFsdWUBCAkBBXZhbHVlAQkA7AcBBQdhc3NldElkBG5hbWUAAQIBVQkAAgECDGphY2twb3Qgb25seQQGcmVzdWx0CQEQZ2V0VW5zdGFrZVJlc3VsdAYFB2FkZHJlc3MFB2Fzc2V0SWQFBWNvbG9yCAUBaQZjYWxsZXIFCnJlYWxDYWxsZXIFCGNsYWltRWdnBQZyZXN1bHQBB2dldEJvb2wBA2tleQQHJG1hdGNoMAkAmwgCBQR0aGlzBQNrZXkDCQABAgUHJG1hdGNoMAIHQm9vbGVhbgQBYgUHJG1hdGNoMAUBYgcBCWlzVGVzdEVudgAJAQdnZXRCb29sAQIHVEVTVEVOVgwBaQEPY29uZmlndXJlT3JhY2xlAQZvcmFjbGUDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAg9GQ086IGFkbWluIG9ubHkJAMwIAgkBC1N0cmluZ0VudHJ5AgkBF3N0YXRpY0tleV9vcmFjbGVBZGRyZXNzAAUGb3JhY2xlBQNuaWwBaQEEaW5pdAADCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAg5GSTogYWRtaW4gb25seQkAzAgCCQEMSW50ZWdlckVudHJ5AgIRdG90YWxfc3RhcnRIZWlnaHQFBmhlaWdodAUDbmlsAWkBCGJ1eVBlcmNoAgZjb2xvckkOcmVmZXJlckFkZHJlc3MEBmxvY2tlZAkBCGlzTG9ja2VkAAMJAAACBQZsb2NrZWQFBmxvY2tlZAQMdmFsaWRQYXltZW50AwMJAAACCAUBaQZjYWxsZXIJAQ5nZXRIdW50QWRkcmVzcwAGCQAAAggFAWkGY2FsbGVyCQESZ2V0TWV0YXJhY2VBZGRyZXNzAAUDbmlsCQEWY2hlY2tBZGRpdGlvbmFsUGF5bWVudAEJAJEDAggFAWkIcGF5bWVudHMAAAMJAAACBQx2YWxpZFBheW1lbnQFDHZhbGlkUGF5bWVudAQFY29sb3IDCQAAAgUGY29sb3JJAgFVAgFCBQZjb2xvckkDCQBmAgAACQEFdmFsdWUBCQDPCAIJAMwIAgIBQgkAzAgCAgFSCQDMCAICAUcJAMwIAgIBWQUDbmlsBQVjb2xvcgkAAgECHnlvdSBuZWVkIHRvIHNldCBjb2xvciBwcm9wZXJseQQKZXhhY3RQcmljZQkBE2NhbGN1bGF0ZVBlcmNoUHJpY2UBCQClCAEIBQFpBmNhbGxlcgQJbGVmdFRvUGF5AwkAAAIIBQFpDG9yaWdpbkNhbGxlcggFAWkGY2FsbGVyBBNhbW91bnRQYWlkQnlDb3Vwb25zCQEFYXNJbnQBCQD8BwQJARFnZXRDb3Vwb25zQWRkcmVzcwACCnVzZUNvdXBvbnMJAMwIAgUKZXhhY3RQcmljZQUDbmlsBQNuaWwDCQAAAgUTYW1vdW50UGFpZEJ5Q291cG9ucwUTYW1vdW50UGFpZEJ5Q291cG9ucwkAZQIFCmV4YWN0UHJpY2UFE2Ftb3VudFBhaWRCeUNvdXBvbnMJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FCmV4YWN0UHJpY2UEB3BheW1lbnQDCQECIT0CBQlsZWZ0VG9QYXkAAAQMZmlyc3RQYXltZW50AwkAAAIJAJADAQgFAWkIcGF5bWVudHMAAgkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwABCQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAADCQECIT0CCAUMZmlyc3RQYXltZW50B2Fzc2V0SWQJAQ1nZXRFZ2dBc3NldElkAAkAAgEJAKwCAgJBRkJQOiBZb3UgY2FuIGF0dGFjaCBvbmx5IEVHRyB0b2tlbnMgd2l0aCB0aGUgZm9sbG93aW5nIGFzc2V0IGlkOiAJANgEAQkBDWdldEVnZ0Fzc2V0SWQAAwkBAiE9AggFDGZpcnN0UGF5bWVudAZhbW91bnQFCWxlZnRUb1BheQkAAgEJAKwCAgkArAICCQCsAgICSEZCUDogVG8gYnV5IGEgcGVyY2ggeW91IGN1cnJlbnRseSBuZWVkIHRoZSBmb2xsb3dpbmcgYW1vdW50IG9mIEVHR2xldHM6IAkApAMBBQlsZWZ0VG9QYXkCASAJAKUIAQgFAWkGY2FsbGVyBBVyZWZlcmVyUmV3YXJkRm9yUGVyY2gJAGsDBQlsZWZ0VG9QYXkFDVJlZmVyZXJSZXdhcmQAZAQHcmVmQ2FsbAkBCWFzQm9vbGVhbgEJAPwHBAkBFWdldFJlZkNvbnRyYWN0QWRkcmVzcwACCnJlZlBheW1lbnQJAMwIAgUOcmVmZXJlckFkZHJlc3MFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBDWdldEVnZ0Fzc2V0SWQABRVyZWZlcmVyUmV3YXJkRm9yUGVyY2gFA25pbAMJAAACBQdyZWZDYWxsBQdyZWZDYWxsBAZ0b0J1cm4DBQdyZWZDYWxsCQBlAgUJbGVmdFRvUGF5BRVyZWZlcmVyUmV3YXJkRm9yUGVyY2gFCWxlZnRUb1BheQQIYnVybkNhbGwJAPwHBAkBDmdldEJ1cm5BZGRyZXNzAAIUYnVybkF0dGFjaGVkUGF5bWVudHMFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBDWdldEVnZ0Fzc2V0SWQABQZ0b0J1cm4FA25pbAMJAAACBQhidXJuQ2FsbAUIYnVybkNhbGwFCWxlZnRUb1BheQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAwkAAAIFB3BheW1lbnQFB3BheW1lbnQEDnBlcmNoQW1vdW50S2V5CQCsAgIJAKwCAgkArAICAghhZGRyZXNzXwkApQgBCAUBaQZjYWxsZXICEl9wZXJjaGVzQXZhaWxhYmxlXwUFY29sb3IEC3BlcmNoQW1vdW50CQENdHJ5R2V0SW50ZWdlcgEFDnBlcmNoQW1vdW50S2V5CQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIFDnBlcmNoQW1vdW50S2V5CQBkAgULcGVyY2hBbW91bnQAAQUDbmlsBQx2YWxpZFBheW1lbnQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEMYWRkRnJlZVBlcmNoAgdhZGRyZXNzBWNvbG9yBAZsb2NrZWQJAQhpc0xvY2tlZAADCQAAAgUGbG9ja2VkBQZsb2NrZWQDCQBmAgAACQEFdmFsdWUBCQDPCAIJAMwIAgIBQgkAzAgCAgFSCQDMCAICAUcJAMwIAgIBWQUDbmlsBQVjb2xvcgkAAgECHnlvdSBuZWVkIHRvIHNldCBjb2xvciBwcm9wZXJseQMDAwkBAiE9AggFAWkGY2FsbGVyCQERZ2V0UmViaXJ0aEFkZHJlc3MACQECIT0CCAUBaQZjYWxsZXIJARdnZXRUdXJ0bGVSZWJpcnRoQWRkcmVzcwAHCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMHCQACAQIbcmViaXJ0aCBhbmQgc3dvcCBwcm9tbyBvbmx5BA5wZXJjaEFtb3VudEtleQkArAICCQCsAgIJAKwCAgIIYWRkcmVzc18FB2FkZHJlc3MCEl9wZXJjaGVzQXZhaWxhYmxlXwUFY29sb3IEC3BlcmNoQW1vdW50CQENdHJ5R2V0SW50ZWdlcgEFDnBlcmNoQW1vdW50S2V5CQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIFDnBlcmNoQW1vdW50S2V5CQBkAgULcGVyY2hBbW91bnQAAQUDbmlsAgAJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEIc3Rha2VORlQABAZsb2NrZWQJAQhpc0xvY2tlZAADCQAAAgUGbG9ja2VkBQZsb2NrZWQEDHZhbGlkUGF5bWVudAMDCQAAAggFAWkGY2FsbGVyCQEOZ2V0SHVudEFkZHJlc3MABgkAAAIIBQFpBmNhbGxlcgkBEmdldE1ldGFyYWNlQWRkcmVzcwAFA25pbAkBFmNoZWNrQWRkaXRpb25hbFBheW1lbnQBCQCRAwIIBQFpCHBheW1lbnRzAAEDCQAAAgUMdmFsaWRQYXltZW50BQx2YWxpZFBheW1lbnQEA3BtdAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAABAdhc3NldElkCQEFdmFsdWUBCAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQECnJlYWxDYWxsZXIJAKUIAQgFAWkGY2FsbGVyBAdhZGRyZXNzAwkBEGlzUHJveHlTdGFraW5nU2MBCQClCAEIBQFpBmNhbGxlcgkApQgBCAUBaQxvcmlnaW5DYWxsZXIFCnJlYWxDYWxsZXIEBWNvbG9yCQCyAgIICQEFdmFsdWUBCQDsBwEFB2Fzc2V0SWQEbmFtZQABBBBhdmFpbGFibGVQZXJjaGVzCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgkArAICCQCsAgICCGFkZHJlc3NfBQdhZGRyZXNzAhJfcGVyY2hlc0F2YWlsYWJsZV8FBWNvbG9yAwkBAiE9AggFA3BtdAZhbW91bnQAAQkAAgECE05GVCBpcyBub3QgYXR0YWNoZWQDCQBnAgAABRBhdmFpbGFibGVQZXJjaGVzCQACAQkArAICAiNubyBwZXJjaGVzIGF2YWlsYWJsZSBmb3IgdGhlIGNvbG9yIAUFY29sb3IEDSR0MDE2NjA0MTY2NzcJARRnZXRBc3NldEZhcm1pbmdQb3dlcgIFB2Fzc2V0SWQFB2FkZHJlc3MECGFzc2V0R2VuCAUNJHQwMTY2MDQxNjY3NwJfMQQRYXNzZXRGYXJtaW5nUG93ZXIIBQ0kdDAxNjYwNDE2Njc3Al8yCQDOCAIJAM4IAgkBDmdldFN0YWtlUmVzdWx0BAUHYWRkcmVzcwUHYXNzZXRJZAURYXNzZXRGYXJtaW5nUG93ZXIFCnJlYWxDYWxsZXIJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgICCGFkZHJlc3NfBQdhZGRyZXNzAhJfcGVyY2hlc0F2YWlsYWJsZV8FBWNvbG9yCQBlAgUQYXZhaWxhYmxlUGVyY2hlcwABBQNuaWwFDHZhbGlkUGF5bWVudAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARRzdGFrZU5GVFdpdGhvdXRQZXJjaAAEBmxvY2tlZAkBCGlzTG9ja2VkAAMJAAACBQZsb2NrZWQFBmxvY2tlZAQKZGFwcFRvQ2FsbAkApQgBCAUBaQZjYWxsZXIDCQEBIQEJARBpc1Byb3h5U3Rha2luZ1NjAQUKZGFwcFRvQ2FsbAkAAgECPkZTTldQOiBPbmx5IHRydXN0ZWQgc21hcnQgY29udHJhY3RzIGNhbiBzdGFrZSB3aXRob3V0IGEgcGVyY2ghBANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAQHYXNzZXRJZAkBBXZhbHVlAQgJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBAdhZGRyZXNzCQClCAEIBQFpDG9yaWdpbkNhbGxlcgMJAQIhPQIIBQNwbXQGYW1vdW50AAEJAAIBAhNORlQgaXMgbm90IGF0dGFjaGVkBA0kdDAxNzMxNTE3Mzg4CQEUZ2V0QXNzZXRGYXJtaW5nUG93ZXICBQdhc3NldElkBQdhZGRyZXNzBAhhc3NldEdlbggFDSR0MDE3MzE1MTczODgCXzEEEWFzc2V0RmFybWluZ1Bvd2VyCAUNJHQwMTczMTUxNzM4OAJfMgQFYXNzZXQJANgEAQUHYXNzZXRJZAQKcmVhbENhbGxlcgkApQgBCAUBaQZjYWxsZXIJAM4IAgkBDmdldFN0YWtlUmVzdWx0BAUHYWRkcmVzcwUHYXNzZXRJZAURYXNzZXRGYXJtaW5nUG93ZXIFCnJlYWxDYWxsZXIJAMwIAgkBDEJvb2xlYW5FbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgIIYWRkcmVzc18FB2FkZHJlc3MCB19hc3NldF8FBWFzc2V0Ag5fd2l0aG91dF9wZXJjaAYFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQp1bnN0YWtlTkZUAQVhc3NldAQMdmFsaWRQYXltZW50AwkAAAIIBQFpBmNhbGxlcgkBEmdldE1ldGFyYWNlQWRkcmVzcwAFA25pbAkBFmNoZWNrQWRkaXRpb25hbFBheW1lbnQBCQCRAwIIBQFpCHBheW1lbnRzAAADCQAAAgUMdmFsaWRQYXltZW50BQx2YWxpZFBheW1lbnQEBnJlc3VsdAkBEnVuc3Rha2VORlRJbnRlcm5hbAMFBWFzc2V0BQFpBgkAlAoCCQDOCAIIBQZyZXN1bHQCXzEFDHZhbGlkUGF5bWVudAgFBnJlc3VsdAJfMgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARZ1bnN0YWtlTkZUV2l0aG91dENsYWltAQVhc3NldAkBEnVuc3Rha2VORlRJbnRlcm5hbAMFBWFzc2V0BQFpBwFpAQxzdGFrZUphY2twb3QBBWNvbG9yBAZsb2NrZWQJAQhpc0xvY2tlZAADCQAAAgUGbG9ja2VkBQZsb2NrZWQEDHZhbGlkUGF5bWVudAMDCQAAAggFAWkGY2FsbGVyCQEOZ2V0SHVudEFkZHJlc3MABgkAAAIIBQFpBmNhbGxlcgkBEmdldE1ldGFyYWNlQWRkcmVzcwAFA25pbAkBFmNoZWNrQWRkaXRpb25hbFBheW1lbnQBCQCRAwIIBQFpCHBheW1lbnRzAAEDCQAAAgUMdmFsaWRQYXltZW50BQx2YWxpZFBheW1lbnQEA3BtdAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAABAdhc3NldElkCQEFdmFsdWUBCAUDcG10B2Fzc2V0SWQECnJlYWxDYWxsZXIJAKUIAQgFAWkGY2FsbGVyBAdhZGRyZXNzAwkBEGlzUHJveHlTdGFraW5nU2MBCQClCAEIBQFpBmNhbGxlcgkApQgBCAUBaQxvcmlnaW5DYWxsZXIFCnJlYWxDYWxsZXIEEGF2YWlsYWJsZVBlcmNoZXMJAQ10cnlHZXRJbnRlZ2VyAQkArAICCQCsAgIJAKwCAgIIYWRkcmVzc18FB2FkZHJlc3MCEl9wZXJjaGVzQXZhaWxhYmxlXwUFY29sb3IEC2Fzc2V0SXNzdWVyCAkBBXZhbHVlAQkA7AcBBQdhc3NldElkBmlzc3VlcgMJAQIhPQIIBQNwbXQGYW1vdW50AAEJAAIBAhNORlQgaXMgbm90IGF0dGFjaGVkAwMJAAACBQthc3NldElzc3VlcgkBE2dldEluY3ViYXRvckFkZHJlc3MABgkAAAIFC2Fzc2V0SXNzdWVyCQERZ2V0QnJlZWRlckFkZHJlc3MAAwkBAiE9AgkAsgICCQEFdmFsdWUBCAkBBXZhbHVlAQkA7AcBBQdhc3NldElkBG5hbWUAAQIBVQkAAgECDGphY2twb3Qgb25seQMJAGcCAAAFEGF2YWlsYWJsZVBlcmNoZXMJAAIBCQCsAgICKEZTSjogbm8gcGVyY2hlcyBhdmFpbGFibGUgZm9yIHRoZSBjb2xvciAFBWNvbG9yBAxmYXJtaW5nUG93ZXIJARRnZXRBc3NldEZhcm1pbmdQb3dlcgIFB2Fzc2V0SWQFB2FkZHJlc3MJAM4IAgkAzggCCQEOZ2V0U3Rha2VSZXN1bHQEBQdhZGRyZXNzBQdhc3NldElkCAUMZmFybWluZ1Bvd2VyAl8yBQpyZWFsQ2FsbGVyCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICAghhZGRyZXNzXwUHYWRkcmVzcwISX3BlcmNoZXNBdmFpbGFibGVfBQVjb2xvcgkAZQIFEGF2YWlsYWJsZVBlcmNoZXMAAQkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgICCGFkZHJlc3NfBQdhZGRyZXNzAgdfYXNzZXRfCQDYBAEFB2Fzc2V0SWQCC19wZXJjaENvbG9yBQVjb2xvcgUDbmlsBQx2YWxpZFBheW1lbnQJAAIBAhJhc3NldCBpcyBub3QgdmFsaWQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEOdW5zdGFrZUphY2twb3QBBWFzc2V0BAx2YWxpZFBheW1lbnQJARZjaGVja0FkZGl0aW9uYWxQYXltZW50AQkAkQMCCAUBaQhwYXltZW50cwAAAwkAAAIFDHZhbGlkUGF5bWVudAUMdmFsaWRQYXltZW50BAZyZXN1bHQJARZ1bnN0YWtlSmFja3BvdEludGVybmFsAwUFYXNzZXQFAWkGCQCUCgIJAM4IAggFBnJlc3VsdAJfMQUMdmFsaWRQYXltZW50CAUGcmVzdWx0Al8yCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBHXVuc3Rha2VKYWNrcG90V2l0aG91dENsYWltRWdnAQVhc3NldAkBFnVuc3Rha2VKYWNrcG90SW50ZXJuYWwDBQVhc3NldAUBaQcBaQELY2xhaW1SZXdhcmQBBWFzc2V0BAZsb2NrZWQJAQhpc0xvY2tlZAADCQAAAgUGbG9ja2VkBQZsb2NrZWQEDHZhbGlkUGF5bWVudAMJAAACCAUBaQxvcmlnaW5DYWxsZXIJARJnZXRDZk1hc3RlckFkZHJlc3MABQNuaWwJARZjaGVja0FkZGl0aW9uYWxQYXltZW50AQkAkQMCCAUBaQhwYXltZW50cwAAAwkAAAIFDHZhbGlkUGF5bWVudAUMdmFsaWRQYXltZW50BAdhZGRyZXNzAwkAAAIIBQFpDG9yaWdpbkNhbGxlcgkBEmdldENmTWFzdGVyQWRkcmVzcwAJAKUIAQgFAWkGY2FsbGVyCQClCAEIBQFpDG9yaWdpbkNhbGxlcgQHYXNzZXRJZAkA2QQBBQVhc3NldAQRYXNzZXRGYXJtaW5nUG93ZXIJAR1nZXRMYXN0S25vd25Bc3NldEZhcm1pbmdQb3dlcgIFB2FkZHJlc3MFBWFzc2V0BBBhc3NldFJld2FyZERlbHRhCQEUY2FsY0Fzc2V0UmV3YXJkRGVsdGEDBQdhZGRyZXNzBQVhc3NldAURYXNzZXRGYXJtaW5nUG93ZXIEDGZhcm1lZEFtb3VudAkAZAIFEGFzc2V0UmV3YXJkRGVsdGEJAQ10cnlHZXRJbnRlZ2VyAQkArAICCQCsAgIJAKwCAgkArAICAghhZGRyZXNzXwUHYWRkcmVzcwIHX2Fzc2V0XwUFYXNzZXQCFl9sYXN0Q2hlY2tGYXJtZWRBbW91bnQED3dpdGhkcmF3bkFtb3VudAkBDXRyeUdldEludGVnZXIBCQCsAgIJAKwCAgkArAICCQCsAgICCGFkZHJlc3NfBQdhZGRyZXNzAgdfYXNzZXRfBQVhc3NldAIQX3dpdGhkcmF3bkFtb3VudAQGcmV3YXJkCQBpAgkAZQIFDGZhcm1lZEFtb3VudAUPd2l0aGRyYXduQW1vdW50CQBoAgUFc2NhbGUAZAMJAGcCAAAFBnJld2FyZAkAAgECIUZDUjogeW91IGhhdmUgbm8gRUdHcyB0byB3aXRoZHJhdwkAlAoCCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgIIYWRkcmVzc18FB2FkZHJlc3MCB19hc3NldF8FBWFzc2V0AhBfd2l0aGRyYXduQW1vdW50CQBkAgkBDXRyeUdldEludGVnZXIBCQCsAgIJAKwCAgkArAICCQCsAgICCGFkZHJlc3NfBQdhZGRyZXNzAgdfYXNzZXRfBQVhc3NldAIQX3dpdGhkcmF3bkFtb3VudAkAaAIFBnJld2FyZAUGc2NhbGUyCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBBQdhZGRyZXNzCQBoAgUGcmV3YXJkAMCEPQkBDWdldEVnZ0Fzc2V0SWQABQNuaWwFDHZhbGlkUGF5bWVudAkAaAIFBnJld2FyZADAhD0JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BAnR4AQZ2ZXJpZnkAAwkBCWlzVGVzdEVudgAJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAIBQJ0eA9zZW5kZXJQdWJsaWNLZXkECWZpcnN0VXNlcgEgURzk/Wb/EmnS8VoUnzuy4vQ7f8HLaCeiNF5sONdX3W0ECnNlY29uZFVzZXIBIMFs347t041zj4ui+fqJD/R1zUQbVHJSo7Sc0lakLeB1BAl0aGlyZFVzZXIBIOdb9I6q0vlJnm6EJrj5fh/cZ6h93Cu41Op7zfJoCsElBA9maXJzdFVzZXJTaWduZWQDCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAABQlmaXJzdFVzZXIAAQMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAEFCWZpcnN0VXNlcgABAwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAgUJZmlyc3RVc2VyAAEAAAQQc2Vjb25kVXNlclNpZ25lZAMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAFCnNlY29uZFVzZXIAAQMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAEFCnNlY29uZFVzZXIAAQMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAIFCnNlY29uZFVzZXIAAQAABA90aGlyZFVzZXJTaWduZWQDCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAABQl0aGlyZFVzZXIAAQMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAEFCXRoaXJkVXNlcgABAwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAgUJdGhpcmRVc2VyAAEAAAQPc2lnbmF0dXJlc0NvdW50CQBkAgkAZAIFD2ZpcnN0VXNlclNpZ25lZAUQc2Vjb25kVXNlclNpZ25lZAUPdGhpcmRVc2VyU2lnbmVkBAckbWF0Y2gwBQJ0eAMJAAECBQckbWF0Y2gwAg9EYXRhVHJhbnNhY3Rpb24EA2R0eAUHJG1hdGNoMAkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAgFAnR4D3NlbmRlclB1YmxpY0tleQkAZwIFD3NpZ25hdHVyZXNDb3VudAACSCErKg==", "height": 4086826, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 5eST5vCxiUD2Qd1V7xpAbyo3TZ8mLKzYAoVjekzvCs2W Next: BTEUMWfctZ81YiwuiYhSQ2ibVNUWiSzWDFEUkg8myUJM Diff:
Old | New | Differences | |
---|---|---|---|
1 | - | {-# STDLIB_VERSION | |
1 | + | {-# STDLIB_VERSION 6 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let a = (100 * 1000000) | |
147 | 147 | } | |
148 | 148 | ||
149 | 149 | ||
150 | - | func aa () = | |
150 | + | func aa () = 0 | |
151 | 151 | ||
152 | 152 | ||
153 | 153 | func ab () = if ((P() != "")) | |
268 | 268 | func aB (g,au) = ac((((("address_" + g) + "_asset_") + au) + "_farmingPower")) | |
269 | 269 | ||
270 | 270 | ||
271 | - | func aC (aD) = { | |
272 | - | let aE = k(("assets_" + aD)) | |
273 | - | if ((aE == "")) | |
274 | - | then nil | |
275 | - | else split(aE, ",") | |
276 | - | } | |
271 | + | func aC (aD,aE,aA) = (aD + (((b * aa()) * (height - aE)) / aA)) | |
277 | 272 | ||
278 | 273 | ||
279 | - | func aF (aG,aH,aA) = (aG + (((b * aa()) * (height - aH)) / aA)) | |
280 | - | ||
281 | - | ||
282 | - | func aI () = if ((ac("total_farmingPower") > 0)) | |
274 | + | func aF () = if ((ac("total_farmingPower") > 0)) | |
283 | 275 | then { | |
284 | - | let | |
285 | - | let | |
276 | + | let aD = ac("total_lastCheckInterest") | |
277 | + | let aE = ac("total_lastCheckInterestHeight") | |
286 | 278 | let aA = ac("total_farmingPower") | |
287 | - | | |
279 | + | aC(aD, aE, aA) | |
288 | 280 | } | |
289 | 281 | else if ((ac("total_startHeight") != 0)) | |
290 | 282 | then ac("total_lastCheckInterest") | |
291 | 283 | else throw("farming is not launched, yet") | |
292 | 284 | ||
293 | 285 | ||
294 | - | func | |
295 | - | let | |
296 | - | let | |
297 | - | ( | |
286 | + | func aG (g,au,aH) = { | |
287 | + | let aI = ac((((("address_" + g) + "_asset_") + au) + "_lastCheckInterest")) | |
288 | + | let aJ = aF() | |
289 | + | (aH * (aJ - aI)) | |
298 | 290 | } | |
299 | 291 | ||
300 | 292 | ||
301 | - | func | |
302 | - | let | |
303 | - | if (( | |
293 | + | func aK (au,aL) = { | |
294 | + | let aM = k((("assets_" + aL) + "_locked")) | |
295 | + | if ((aM == "")) | |
304 | 296 | then au | |
305 | - | else (( | |
297 | + | else ((aM + ",") + au) | |
306 | 298 | } | |
307 | 299 | ||
308 | 300 | ||
309 | - | func | |
310 | - | let | |
311 | - | [IntegerEntry("total_farmingPower", (ac("total_farmingPower") + | |
301 | + | func aN (g,au,aH,aO) = { | |
302 | + | let aP = toBase58String(au) | |
303 | + | [IntegerEntry("total_farmingPower", (ac("total_farmingPower") + aH)), IntegerEntry("total_lastCheckInterest", aF()), IntegerEntry("total_lastCheckInterestHeight", height), StringEntry((("asset_" + aP) + "_owner"), g), IntegerEntry((((("address_" + g) + "_asset_") + aP) + "_farmingPower"), aH), IntegerEntry((((("address_" + g) + "_asset_") + aP) + "_lastCheckInterest"), aF()), StringEntry((((("address_" + g) + "_asset_") + aP) + "_unstaker"), aO)] | |
312 | 304 | } | |
313 | 305 | ||
314 | 306 | ||
315 | - | func | |
316 | - | let | |
317 | - | if (( | |
307 | + | func aQ (g,au,aR,aS,aT,aU) = { | |
308 | + | let aV = ab() | |
309 | + | if ((aV == aV)) | |
318 | 310 | then { | |
319 | - | let | |
320 | - | let | |
321 | - | if (if (( | |
322 | - | then ( | |
311 | + | let aP = toBase58String(au) | |
312 | + | let aO = k((((("address_" + g) + "_asset_") + aP) + "_unstaker")) | |
313 | + | if (if ((aO != "")) | |
314 | + | then (aO != aT) | |
323 | 315 | else false) | |
324 | 316 | then throw("FUN: It seems duck was staked throuh a dapp, not directly, please unstake through dapp!") | |
325 | 317 | else { | |
326 | - | let | |
327 | - | if (!(( | |
318 | + | let aH = aB(g, aP) | |
319 | + | if (!((aH > 0))) | |
328 | 320 | then throw("FGU: Asset farming power not bigger then 0") | |
329 | 321 | else { | |
330 | - | let | |
331 | - | let | |
332 | - | let | |
333 | - | let | |
334 | - | let | |
335 | - | let | |
336 | - | let | |
337 | - | then [DeleteEntry((((("address_" + g) + "_asset_") + | |
338 | - | else [IntegerEntry(((("address_" + g) + "_perchesAvailable_") + | |
339 | - | let | |
340 | - | then $Tuple2([ScriptTransfer( | |
322 | + | let aW = aG(g, aP, aH) | |
323 | + | let aX = (aW + ac((((("address_" + g) + "_asset_") + aP) + "_lastCheckFarmedAmount"))) | |
324 | + | let aY = ac((((("address_" + g) + "_asset_") + aP) + "_withdrawnAmount")) | |
325 | + | let aZ = ((aX - aY) / (b * 100)) | |
326 | + | let ba = ae((((("address_" + g) + "_asset_") + aP) + "_without_perch")) | |
327 | + | let bb = aZ | |
328 | + | let bc = if (ba) | |
329 | + | then [DeleteEntry((((("address_" + g) + "_asset_") + aP) + "_without_perch"))] | |
330 | + | else [IntegerEntry(((("address_" + g) + "_perchesAvailable_") + aR), (ac(((("address_" + g) + "_perchesAvailable_") + aR)) + 1))] | |
331 | + | let bd = if (aU) | |
332 | + | then $Tuple2([ScriptTransfer(aS, (bb * 1000000), F())], (bb * 1000000)) | |
341 | 333 | else $Tuple2(nil, 0) | |
342 | - | $Tuple2(((([IntegerEntry("total_farmingPower", (ac("total_farmingPower") - | |
334 | + | $Tuple2(((([IntegerEntry("total_farmingPower", (ac("total_farmingPower") - aH)), IntegerEntry("total_lastCheckInterest", aF()), IntegerEntry("total_lastCheckInterestHeight", height), DeleteEntry((("asset_" + aP) + "_owner")), DeleteEntry((((("address_" + g) + "_asset_") + aP) + "_unstaker")), IntegerEntry((((("address_" + g) + "_asset_") + aP) + "_farmingPower"), 0), IntegerEntry((((("address_" + g) + "_asset_") + aP) + "_lastCheckInterest"), aF()), IntegerEntry((((("address_" + g) + "_asset_") + aP) + "_withdrawnAmount"), (aY + (bb * c))), IntegerEntry((((("address_" + g) + "_asset_") + aP) + "_lastCheckFarmedAmount"), (ac((((("address_" + g) + "_asset_") + aP) + "_lastCheckFarmedAmount")) + aW))] ++ bc) ++ [ScriptTransfer(aS, 1, au)]) ++ bd._1), bd._2) | |
343 | 335 | } | |
344 | 336 | } | |
345 | 337 | } | |
347 | 339 | } | |
348 | 340 | ||
349 | 341 | ||
350 | - | func | |
351 | - | let | |
352 | - | if (( | |
342 | + | func be (g) = { | |
343 | + | let bf = f(N(), (("ART-XMISTL_" + g) + "_owner")) | |
344 | + | if ((bf == "")) | |
353 | 345 | then a | |
354 | 346 | else ((a / 10) * 9) | |
355 | 347 | } | |
356 | 348 | ||
357 | 349 | ||
358 | - | func | |
359 | - | let | |
360 | - | let | |
361 | - | (indexOf( | |
350 | + | func bg (g) = { | |
351 | + | let bh = O() | |
352 | + | let bi = split(bh, ";") | |
353 | + | (indexOf(bi, g) != unit) | |
362 | 354 | } | |
363 | 355 | ||
364 | 356 | ||
365 | - | func | |
366 | - | let au = fromBase58String( | |
367 | - | let | |
368 | - | let g = if ( | |
369 | - | then toString( | |
370 | - | else | |
371 | - | let | |
372 | - | if (( | |
357 | + | func bj (aP,bk,bl) = { | |
358 | + | let au = fromBase58String(aP) | |
359 | + | let aT = toString(bk.caller) | |
360 | + | let g = if (bg(toString(bk.caller))) | |
361 | + | then toString(bk.originCaller) | |
362 | + | else aT | |
363 | + | let aR = takeRight(value(assetInfo(au)).name, 1) | |
364 | + | if ((aR == "U")) | |
373 | 365 | then throw("FUN: use another function to unstake Jackpot NFT") | |
374 | 366 | else { | |
375 | - | let | |
376 | - | | |
367 | + | let bm = aQ(g, au, aR, bk.caller, aT, bl) | |
368 | + | bm | |
377 | 369 | } | |
378 | 370 | } | |
379 | 371 | ||
380 | 372 | ||
381 | - | func | |
382 | - | let au = fromBase58String( | |
383 | - | let | |
384 | - | let g = if ( | |
385 | - | then toString( | |
386 | - | else | |
387 | - | let | |
373 | + | func bn (aP,bk,bl) = { | |
374 | + | let au = fromBase58String(aP) | |
375 | + | let aT = toString(bk.caller) | |
376 | + | let g = if (bg(toString(bk.caller))) | |
377 | + | then toString(bk.originCaller) | |
378 | + | else aT | |
379 | + | let aR = k((((("address_" + g) + "_asset_") + aP) + "_perchColor")) | |
388 | 380 | if ((takeRight(value(value(assetInfo(au)).name), 1) != "U")) | |
389 | 381 | then throw("jackpot only") | |
390 | 382 | else { | |
391 | - | let | |
392 | - | | |
383 | + | let bm = aQ(g, au, aR, bk.caller, aT, bl) | |
384 | + | bm | |
393 | 385 | } | |
394 | 386 | } | |
395 | 387 | ||
396 | 388 | ||
397 | - | func | |
389 | + | func bo (h) = { | |
398 | 390 | let i = getBoolean(this, h) | |
399 | 391 | if ($isInstanceOf(i, "Boolean")) | |
400 | 392 | then { | |
405 | 397 | } | |
406 | 398 | ||
407 | 399 | ||
408 | - | func | |
400 | + | func bp () = bo("TESTENV") | |
409 | 401 | ||
410 | 402 | ||
411 | - | @Callable( | |
412 | - | func configureOracle ( | |
403 | + | @Callable(bk) | |
404 | + | func configureOracle (bq) = if ((bk.caller != this)) | |
413 | 405 | then throw("FCO: admin only") | |
414 | - | else [StringEntry(l(), | |
406 | + | else [StringEntry(l(), bq)] | |
415 | 407 | ||
416 | 408 | ||
417 | 409 | ||
418 | - | @Callable( | |
419 | - | func init () = if (( | |
410 | + | @Callable(bk) | |
411 | + | func init () = if ((bk.caller != this)) | |
420 | 412 | then throw("FI: admin only") | |
421 | 413 | else [IntegerEntry("total_startHeight", height)] | |
422 | 414 | ||
423 | 415 | ||
424 | 416 | ||
425 | - | @Callable( | |
426 | - | func buyPerch ( | |
427 | - | let | |
428 | - | if (( | |
417 | + | @Callable(bk) | |
418 | + | func buyPerch (br,bs) = { | |
419 | + | let aV = ab() | |
420 | + | if ((aV == aV)) | |
429 | 421 | then { | |
430 | - | let | |
422 | + | let bt = if (if ((bk.caller == V())) | |
431 | 423 | then true | |
432 | - | else ( | |
424 | + | else (bk.caller == M())) | |
433 | 425 | then nil | |
434 | - | else X( | |
435 | - | if (( | |
426 | + | else X(bk.payments[0]) | |
427 | + | if ((bt == bt)) | |
436 | 428 | then { | |
437 | - | let | |
429 | + | let aR = if ((br == "U")) | |
438 | 430 | then "B" | |
439 | - | else | |
440 | - | if ((0 > value(indexOf(["B", "R", "G", "Y"], | |
431 | + | else br | |
432 | + | if ((0 > value(indexOf(["B", "R", "G", "Y"], aR)))) | |
441 | 433 | then throw("you need to set color properly") | |
442 | 434 | else { | |
443 | - | let | |
444 | - | let | |
435 | + | let bu = be(toString(bk.caller)) | |
436 | + | let bv = if ((bk.originCaller == bk.caller)) | |
445 | 437 | then { | |
446 | - | let | |
447 | - | if (( | |
448 | - | then ( | |
438 | + | let bw = ap(invoke(S(), "useCoupons", [bu], nil)) | |
439 | + | if ((bw == bw)) | |
440 | + | then (bu - bw) | |
449 | 441 | else throw("Strict value is not equal to itself.") | |
450 | 442 | } | |
451 | - | else | |
452 | - | let Y = if (( | |
443 | + | else bu | |
444 | + | let Y = if ((bv != 0)) | |
453 | 445 | then { | |
454 | - | let | |
455 | - | then value( | |
456 | - | else value( | |
457 | - | if (( | |
446 | + | let bx = if ((size(bk.payments) == 2)) | |
447 | + | then value(bk.payments[1]) | |
448 | + | else value(bk.payments[0]) | |
449 | + | if ((bx.assetId != F())) | |
458 | 450 | then throw(("FBP: You can attach only EGG tokens with the following asset id: " + toBase58String(F()))) | |
459 | - | else if (( | |
460 | - | then throw(((("FBP: To buy a perch you currently need the following amount of EGGlets: " + toString( | |
451 | + | else if ((bx.amount != bv)) | |
452 | + | then throw(((("FBP: To buy a perch you currently need the following amount of EGGlets: " + toString(bv)) + " ") + toString(bk.caller))) | |
461 | 453 | else { | |
462 | - | let | |
463 | - | let | |
464 | - | if (( | |
454 | + | let by = fraction(bv, W, 100) | |
455 | + | let bz = ar(invoke(K(), "refPayment", [bs], [AttachedPayment(F(), by)])) | |
456 | + | if ((bz == bz)) | |
465 | 457 | then { | |
466 | - | let | |
467 | - | then ( | |
468 | - | else | |
469 | - | let | |
470 | - | if (( | |
471 | - | then | |
458 | + | let bA = if (bz) | |
459 | + | then (bv - by) | |
460 | + | else bv | |
461 | + | let bB = invoke(T(), "burnAttachedPayments", nil, [AttachedPayment(F(), bA)]) | |
462 | + | if ((bB == bB)) | |
463 | + | then bv | |
472 | 464 | else throw("Strict value is not equal to itself.") | |
473 | 465 | } | |
474 | 466 | else throw("Strict value is not equal to itself.") | |
477 | 469 | else 0 | |
478 | 470 | if ((Y == Y)) | |
479 | 471 | then { | |
480 | - | let | |
481 | - | let | |
482 | - | ([IntegerEntry( | |
472 | + | let bC = ((("address_" + toString(bk.caller)) + "_perchesAvailable_") + aR) | |
473 | + | let bD = ac(bC) | |
474 | + | ([IntegerEntry(bC, (bD + 1))] ++ bt) | |
483 | 475 | } | |
484 | 476 | else throw("Strict value is not equal to itself.") | |
485 | 477 | } | |
491 | 483 | ||
492 | 484 | ||
493 | 485 | ||
494 | - | @Callable( | |
495 | - | func addFreePerch (g, | |
496 | - | let | |
497 | - | if (( | |
498 | - | then if ((0 > value(indexOf(["B", "R", "G", "Y"], | |
486 | + | @Callable(bk) | |
487 | + | func addFreePerch (g,aR) = { | |
488 | + | let aV = ab() | |
489 | + | if ((aV == aV)) | |
490 | + | then if ((0 > value(indexOf(["B", "R", "G", "Y"], aR)))) | |
499 | 491 | then throw("you need to set color properly") | |
500 | - | else if (if (if (( | |
501 | - | then ( | |
492 | + | else if (if (if ((bk.caller != H())) | |
493 | + | then (bk.caller != I()) | |
502 | 494 | else false) | |
503 | - | then ( | |
495 | + | then (bk.caller != this) | |
504 | 496 | else false) | |
505 | 497 | then throw("rebirth and swop promo only") | |
506 | 498 | else { | |
507 | - | let | |
508 | - | let | |
509 | - | $Tuple2([IntegerEntry( | |
499 | + | let bC = ((("address_" + g) + "_perchesAvailable_") + aR) | |
500 | + | let bD = ac(bC) | |
501 | + | $Tuple2([IntegerEntry(bC, (bD + 1))], "") | |
510 | 502 | } | |
511 | 503 | else throw("Strict value is not equal to itself.") | |
512 | 504 | } | |
513 | 505 | ||
514 | 506 | ||
515 | 507 | ||
516 | - | @Callable( | |
508 | + | @Callable(bk) | |
517 | 509 | func stakeNFT () = { | |
518 | - | let | |
519 | - | if (( | |
510 | + | let aV = ab() | |
511 | + | if ((aV == aV)) | |
520 | 512 | then { | |
521 | - | let | |
513 | + | let bt = if (if ((bk.caller == V())) | |
522 | 514 | then true | |
523 | - | else ( | |
515 | + | else (bk.caller == M())) | |
524 | 516 | then nil | |
525 | - | else X( | |
526 | - | if (( | |
517 | + | else X(bk.payments[1]) | |
518 | + | if ((bt == bt)) | |
527 | 519 | then { | |
528 | - | let | |
529 | - | let au = value(value( | |
530 | - | let | |
531 | - | let g = if ( | |
532 | - | then toString( | |
533 | - | else | |
534 | - | let | |
535 | - | let | |
536 | - | if (( | |
520 | + | let bE = value(bk.payments[0]) | |
521 | + | let au = value(value(bk.payments[0]).assetId) | |
522 | + | let aT = toString(bk.caller) | |
523 | + | let g = if (bg(toString(bk.caller))) | |
524 | + | then toString(bk.originCaller) | |
525 | + | else aT | |
526 | + | let aR = takeRight(value(assetInfo(au)).name, 1) | |
527 | + | let bF = ac(((("address_" + g) + "_perchesAvailable_") + aR)) | |
528 | + | if ((bE.amount != 1)) | |
537 | 529 | then throw("NFT is not attached") | |
538 | - | else if ((0 >= | |
539 | - | then throw(("no perches available for the color " + | |
530 | + | else if ((0 >= bF)) | |
531 | + | then throw(("no perches available for the color " + aR)) | |
540 | 532 | else { | |
541 | - | let | |
542 | - | let | |
543 | - | let | |
544 | - | (( | |
533 | + | let bG = at(au, g) | |
534 | + | let aL = bG._1 | |
535 | + | let aH = bG._2 | |
536 | + | ((aN(g, au, aH, aT) ++ [IntegerEntry(((("address_" + g) + "_perchesAvailable_") + aR), (bF - 1))]) ++ bt) | |
545 | 537 | } | |
546 | 538 | } | |
547 | 539 | else throw("Strict value is not equal to itself.") | |
551 | 543 | ||
552 | 544 | ||
553 | 545 | ||
554 | - | @Callable( | |
546 | + | @Callable(bk) | |
555 | 547 | func stakeNFTWithoutPerch () = { | |
556 | - | let | |
557 | - | if (( | |
548 | + | let aV = ab() | |
549 | + | if ((aV == aV)) | |
558 | 550 | then { | |
559 | - | let | |
560 | - | if (!( | |
551 | + | let bH = toString(bk.caller) | |
552 | + | if (!(bg(bH))) | |
561 | 553 | then throw("FSNWP: Only trusted smart contracts can stake without a perch!") | |
562 | 554 | else { | |
563 | - | let | |
564 | - | let au = value(value( | |
565 | - | let g = toString( | |
566 | - | if (( | |
555 | + | let bE = value(bk.payments[0]) | |
556 | + | let au = value(value(bk.payments[0]).assetId) | |
557 | + | let g = toString(bk.originCaller) | |
558 | + | if ((bE.amount != 1)) | |
567 | 559 | then throw("NFT is not attached") | |
568 | 560 | else { | |
569 | - | let | |
570 | - | let | |
571 | - | let | |
572 | - | let | |
573 | - | let | |
574 | - | ( | |
561 | + | let bI = at(au, g) | |
562 | + | let aL = bI._1 | |
563 | + | let aH = bI._2 | |
564 | + | let aP = toBase58String(au) | |
565 | + | let aT = toString(bk.caller) | |
566 | + | (aN(g, au, aH, aT) ++ [BooleanEntry((((("address_" + g) + "_asset_") + aP) + "_without_perch"), true)]) | |
575 | 567 | } | |
576 | 568 | } | |
577 | 569 | } | |
580 | 572 | ||
581 | 573 | ||
582 | 574 | ||
583 | - | @Callable( | |
584 | - | func unstakeNFT ( | |
585 | - | let | |
575 | + | @Callable(bk) | |
576 | + | func unstakeNFT (aP) = { | |
577 | + | let bt = if ((bk.caller == M())) | |
586 | 578 | then nil | |
587 | - | else X( | |
588 | - | if (( | |
579 | + | else X(bk.payments[0]) | |
580 | + | if ((bt == bt)) | |
589 | 581 | then { | |
590 | - | let | |
591 | - | $Tuple2(( | |
582 | + | let bm = bj(aP, bk, true) | |
583 | + | $Tuple2((bm._1 ++ bt), bm._2) | |
592 | 584 | } | |
593 | 585 | else throw("Strict value is not equal to itself.") | |
594 | 586 | } | |
595 | 587 | ||
596 | 588 | ||
597 | 589 | ||
598 | - | @Callable( | |
599 | - | func unstakeNFTWithoutClaim ( | |
590 | + | @Callable(bk) | |
591 | + | func unstakeNFTWithoutClaim (aP) = bj(aP, bk, false) | |
600 | 592 | ||
601 | 593 | ||
602 | 594 | ||
603 | - | @Callable( | |
604 | - | func stakeJackpot ( | |
605 | - | let | |
606 | - | if (( | |
595 | + | @Callable(bk) | |
596 | + | func stakeJackpot (aR) = { | |
597 | + | let aV = ab() | |
598 | + | if ((aV == aV)) | |
607 | 599 | then { | |
608 | - | let | |
600 | + | let bt = if (if ((bk.caller == V())) | |
609 | 601 | then true | |
610 | - | else ( | |
602 | + | else (bk.caller == M())) | |
611 | 603 | then nil | |
612 | - | else X( | |
613 | - | if (( | |
604 | + | else X(bk.payments[1]) | |
605 | + | if ((bt == bt)) | |
614 | 606 | then { | |
615 | - | let | |
616 | - | let au = value( | |
617 | - | let | |
618 | - | let g = if ( | |
619 | - | then toString( | |
620 | - | else | |
621 | - | let | |
622 | - | let | |
623 | - | if (( | |
607 | + | let bE = value(bk.payments[0]) | |
608 | + | let au = value(bE.assetId) | |
609 | + | let aT = toString(bk.caller) | |
610 | + | let g = if (bg(toString(bk.caller))) | |
611 | + | then toString(bk.originCaller) | |
612 | + | else aT | |
613 | + | let bF = ac(((("address_" + g) + "_perchesAvailable_") + aR)) | |
614 | + | let bJ = value(assetInfo(au)).issuer | |
615 | + | if ((bE.amount != 1)) | |
624 | 616 | then throw("NFT is not attached") | |
625 | - | else if (if (( | |
617 | + | else if (if ((bJ == G())) | |
626 | 618 | then true | |
627 | - | else ( | |
619 | + | else (bJ == J())) | |
628 | 620 | then if ((takeRight(value(value(assetInfo(au)).name), 1) != "U")) | |
629 | 621 | then throw("jackpot only") | |
630 | - | else if ((0 >= | |
631 | - | then throw(("FSJ: no perches available for the color " + | |
622 | + | else if ((0 >= bF)) | |
623 | + | then throw(("FSJ: no perches available for the color " + aR)) | |
632 | 624 | else { | |
633 | - | let | |
634 | - | (( | |
625 | + | let bK = at(au, g) | |
626 | + | ((aN(g, au, bK._2, aT) ++ [IntegerEntry(((("address_" + g) + "_perchesAvailable_") + aR), (bF - 1)), StringEntry((((("address_" + g) + "_asset_") + toBase58String(au)) + "_perchColor"), aR)]) ++ bt) | |
635 | 627 | } | |
636 | 628 | else throw("asset is not valid") | |
637 | 629 | } | |
642 | 634 | ||
643 | 635 | ||
644 | 636 | ||
645 | - | @Callable( | |
646 | - | func unstakeJackpot ( | |
647 | - | let | |
648 | - | if (( | |
637 | + | @Callable(bk) | |
638 | + | func unstakeJackpot (aP) = { | |
639 | + | let bt = X(bk.payments[0]) | |
640 | + | if ((bt == bt)) | |
649 | 641 | then { | |
650 | - | let | |
651 | - | $Tuple2(( | |
642 | + | let bm = bn(aP, bk, true) | |
643 | + | $Tuple2((bm._1 ++ bt), bm._2) | |
652 | 644 | } | |
653 | 645 | else throw("Strict value is not equal to itself.") | |
654 | 646 | } | |
655 | 647 | ||
656 | 648 | ||
657 | 649 | ||
658 | - | @Callable( | |
659 | - | func unstakeJackpotWithoutClaimEgg ( | |
650 | + | @Callable(bk) | |
651 | + | func unstakeJackpotWithoutClaimEgg (aP) = bn(aP, bk, false) | |
660 | 652 | ||
661 | 653 | ||
662 | 654 | ||
663 | - | @Callable( | |
664 | - | func claimReward ( | |
665 | - | let | |
666 | - | if (( | |
655 | + | @Callable(bk) | |
656 | + | func claimReward (aP) = { | |
657 | + | let aV = ab() | |
658 | + | if ((aV == aV)) | |
667 | 659 | then { | |
668 | - | let | |
660 | + | let bt = if ((bk.originCaller == Q())) | |
669 | 661 | then nil | |
670 | - | else X( | |
671 | - | if (( | |
662 | + | else X(bk.payments[0]) | |
663 | + | if ((bt == bt)) | |
672 | 664 | then { | |
673 | - | let g = if (( | |
674 | - | then toString( | |
675 | - | else toString( | |
676 | - | let au = fromBase58String( | |
677 | - | let | |
678 | - | let | |
679 | - | let | |
680 | - | let | |
681 | - | let | |
682 | - | if ((0 >= | |
665 | + | let g = if ((bk.originCaller == Q())) | |
666 | + | then toString(bk.caller) | |
667 | + | else toString(bk.originCaller) | |
668 | + | let au = fromBase58String(aP) | |
669 | + | let aH = aB(g, aP) | |
670 | + | let aW = aG(g, aP, aH) | |
671 | + | let aX = (aW + ac((((("address_" + g) + "_asset_") + aP) + "_lastCheckFarmedAmount"))) | |
672 | + | let aY = ac((((("address_" + g) + "_asset_") + aP) + "_withdrawnAmount")) | |
673 | + | let aZ = ((aX - aY) / (b * 100)) | |
674 | + | if ((0 >= aZ)) | |
683 | 675 | then throw("FCR: you have no EGGs to withdraw") | |
684 | - | else $Tuple2(([IntegerEntry((((("address_" + g) + "_asset_") + | |
676 | + | else $Tuple2(([IntegerEntry((((("address_" + g) + "_asset_") + aP) + "_withdrawnAmount"), (ac((((("address_" + g) + "_asset_") + aP) + "_withdrawnAmount")) + (aZ * c))), ScriptTransfer(Address(fromBase58String(g)), (aZ * 1000000), F())] ++ bt), (aZ * 1000000)) | |
685 | 677 | } | |
686 | 678 | else throw("Strict value is not equal to itself.") | |
687 | 679 | } | |
689 | 681 | } | |
690 | 682 | ||
691 | 683 | ||
692 | - | @Verifier( | |
693 | - | func | |
694 | - | then sigVerify( | |
684 | + | @Verifier(bL) | |
685 | + | func bM () = if (bp()) | |
686 | + | then sigVerify(bL.bodyBytes, bL.proofs[0], bL.senderPublicKey) | |
695 | 687 | else { | |
696 | - | let | |
697 | - | let | |
698 | - | let | |
699 | - | let | |
688 | + | let bN = base58'6TdaXEfhnjYquvPf3yV7MFxt2CbgFmaqsvGwkKfXtKi4' | |
689 | + | let bO = base58'E23yUg8eun5nXB1nZRDf7RTyRADKxQhGNXdpTYonEvtU' | |
690 | + | let bP = base58'Ga8WEBTPXbHuoXRD355mQ6ms8PsM2RFYKeA1mEP32CFe' | |
691 | + | let bQ = if (sigVerify(bL.bodyBytes, bL.proofs[0], bN)) | |
700 | 692 | then 1 | |
701 | - | else if (sigVerify( | |
693 | + | else if (sigVerify(bL.bodyBytes, bL.proofs[1], bN)) | |
702 | 694 | then 1 | |
703 | - | else if (sigVerify( | |
695 | + | else if (sigVerify(bL.bodyBytes, bL.proofs[2], bN)) | |
704 | 696 | then 1 | |
705 | 697 | else 0 | |
706 | - | let | |
698 | + | let bR = if (sigVerify(bL.bodyBytes, bL.proofs[0], bO)) | |
707 | 699 | then 1 | |
708 | - | else if (sigVerify( | |
700 | + | else if (sigVerify(bL.bodyBytes, bL.proofs[1], bO)) | |
709 | 701 | then 1 | |
710 | - | else if (sigVerify( | |
702 | + | else if (sigVerify(bL.bodyBytes, bL.proofs[2], bO)) | |
711 | 703 | then 1 | |
712 | 704 | else 0 | |
713 | - | let | |
705 | + | let bS = if (sigVerify(bL.bodyBytes, bL.proofs[0], bP)) | |
714 | 706 | then 1 | |
715 | - | else if (sigVerify( | |
707 | + | else if (sigVerify(bL.bodyBytes, bL.proofs[1], bP)) | |
716 | 708 | then 1 | |
717 | - | else if (sigVerify( | |
709 | + | else if (sigVerify(bL.bodyBytes, bL.proofs[2], bP)) | |
718 | 710 | then 1 | |
719 | 711 | else 0 | |
720 | - | let bW = ((bT + bU) + bV) | |
721 | - | let i = bO | |
722 | - | (bW >= 2) | |
712 | + | let bT = ((bQ + bR) + bS) | |
713 | + | let i = bL | |
714 | + | if ($isInstanceOf(i, "DataTransaction")) | |
715 | + | then { | |
716 | + | let bU = i | |
717 | + | sigVerify(bL.bodyBytes, bL.proofs[0], bL.senderPublicKey) | |
718 | + | } | |
719 | + | else (bT >= 2) | |
723 | 720 | } | |
724 | 721 |
Old | New | Differences | |
---|---|---|---|
1 | - | {-# STDLIB_VERSION | |
1 | + | {-# STDLIB_VERSION 6 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let a = (100 * 1000000) | |
5 | 5 | ||
6 | 6 | let b = 10000 | |
7 | 7 | ||
8 | 8 | let c = 1000000 | |
9 | 9 | ||
10 | 10 | func d (e) = (e + "_sick") | |
11 | 11 | ||
12 | 12 | ||
13 | 13 | func f (g,h) = { | |
14 | 14 | let i = getString(g, h) | |
15 | 15 | if ($isInstanceOf(i, "String")) | |
16 | 16 | then { | |
17 | 17 | let j = i | |
18 | 18 | j | |
19 | 19 | } | |
20 | 20 | else "" | |
21 | 21 | } | |
22 | 22 | ||
23 | 23 | ||
24 | 24 | func k (h) = f(this, h) | |
25 | 25 | ||
26 | 26 | ||
27 | 27 | func l () = "static_oracleAddress" | |
28 | 28 | ||
29 | 29 | ||
30 | 30 | func m () = "static_eggAssetId" | |
31 | 31 | ||
32 | 32 | ||
33 | 33 | func n () = "static_incubatorAddress" | |
34 | 34 | ||
35 | 35 | ||
36 | 36 | func o () = "static_rebirthAddress" | |
37 | 37 | ||
38 | 38 | ||
39 | 39 | func p () = "static_turtleRebirthAddress" | |
40 | 40 | ||
41 | 41 | ||
42 | 42 | func q () = "static_breederAddress" | |
43 | 43 | ||
44 | 44 | ||
45 | 45 | func r () = "static_refContractAddress" | |
46 | 46 | ||
47 | 47 | ||
48 | 48 | func s () = "static_itemsAddress" | |
49 | 49 | ||
50 | 50 | ||
51 | 51 | func t () = "static_metaRaceAddress" | |
52 | 52 | ||
53 | 53 | ||
54 | 54 | func u () = "static_accBoosterAddress" | |
55 | 55 | ||
56 | 56 | ||
57 | 57 | func v () = "static_proxyStakingContracts" | |
58 | 58 | ||
59 | 59 | ||
60 | 60 | func w () = "static_maintenance" | |
61 | 61 | ||
62 | 62 | ||
63 | 63 | func x () = "static_cfMasterAddress" | |
64 | 64 | ||
65 | 65 | ||
66 | 66 | func y () = "static_duckWrapper" | |
67 | 67 | ||
68 | 68 | ||
69 | 69 | func z () = "static_couponsAddress" | |
70 | 70 | ||
71 | 71 | ||
72 | 72 | func A () = "static_burnAddress" | |
73 | 73 | ||
74 | 74 | ||
75 | 75 | func B () = "static_extraFee" | |
76 | 76 | ||
77 | 77 | ||
78 | 78 | func C () = "static_feeAggregator" | |
79 | 79 | ||
80 | 80 | ||
81 | 81 | func D () = "static_huntAddress" | |
82 | 82 | ||
83 | 83 | ||
84 | 84 | func E () = Address(fromBase58String(k(l()))) | |
85 | 85 | ||
86 | 86 | ||
87 | 87 | func F () = fromBase58String(f(E(), m())) | |
88 | 88 | ||
89 | 89 | ||
90 | 90 | func G () = Address(fromBase58String(f(E(), n()))) | |
91 | 91 | ||
92 | 92 | ||
93 | 93 | func H () = Address(fromBase58String(f(E(), o()))) | |
94 | 94 | ||
95 | 95 | ||
96 | 96 | func I () = Address(fromBase58String(f(E(), p()))) | |
97 | 97 | ||
98 | 98 | ||
99 | 99 | func J () = Address(fromBase58String(f(E(), q()))) | |
100 | 100 | ||
101 | 101 | ||
102 | 102 | func K () = Address(fromBase58String(f(E(), r()))) | |
103 | 103 | ||
104 | 104 | ||
105 | 105 | func L () = Address(fromBase58String(f(E(), s()))) | |
106 | 106 | ||
107 | 107 | ||
108 | 108 | func M () = Address(fromBase58String(f(E(), t()))) | |
109 | 109 | ||
110 | 110 | ||
111 | 111 | func N () = Address(fromBase58String(f(E(), u()))) | |
112 | 112 | ||
113 | 113 | ||
114 | 114 | func O () = f(E(), v()) | |
115 | 115 | ||
116 | 116 | ||
117 | 117 | func P () = f(E(), w()) | |
118 | 118 | ||
119 | 119 | ||
120 | 120 | func Q () = Address(fromBase58String(f(E(), x()))) | |
121 | 121 | ||
122 | 122 | ||
123 | 123 | func R () = Address(fromBase58String(f(E(), y()))) | |
124 | 124 | ||
125 | 125 | ||
126 | 126 | func S () = Address(fromBase58String(f(E(), z()))) | |
127 | 127 | ||
128 | 128 | ||
129 | 129 | func T () = Address(fromBase58String(f(E(), A()))) | |
130 | 130 | ||
131 | 131 | ||
132 | 132 | func U () = Address(fromBase58String(f(E(), C()))) | |
133 | 133 | ||
134 | 134 | ||
135 | 135 | func V () = Address(fromBase58String(f(E(), D()))) | |
136 | 136 | ||
137 | 137 | ||
138 | 138 | let W = 5 | |
139 | 139 | ||
140 | 140 | func X (Y) = if (isDefined(Y.assetId)) | |
141 | 141 | then throw("FCAP: Please attach waves") | |
142 | 142 | else { | |
143 | 143 | let Z = getIntegerValue(E(), B()) | |
144 | 144 | if ((Y.amount != Z)) | |
145 | 145 | then throw((("FCAP: Please attach exactly " + toString(Z)) + " amount of wavelets")) | |
146 | 146 | else [ScriptTransfer(U(), Z, unit)] | |
147 | 147 | } | |
148 | 148 | ||
149 | 149 | ||
150 | - | func aa () = | |
150 | + | func aa () = 0 | |
151 | 151 | ||
152 | 152 | ||
153 | 153 | func ab () = if ((P() != "")) | |
154 | 154 | then throw(P()) | |
155 | 155 | else 0 | |
156 | 156 | ||
157 | 157 | ||
158 | 158 | func ac (h) = { | |
159 | 159 | let i = getInteger(this, h) | |
160 | 160 | if ($isInstanceOf(i, "Int")) | |
161 | 161 | then { | |
162 | 162 | let ad = i | |
163 | 163 | ad | |
164 | 164 | } | |
165 | 165 | else 0 | |
166 | 166 | } | |
167 | 167 | ||
168 | 168 | ||
169 | 169 | func ae (h) = { | |
170 | 170 | let i = getBoolean(this, h) | |
171 | 171 | if ($isInstanceOf(i, "Boolean")) | |
172 | 172 | then { | |
173 | 173 | let ad = i | |
174 | 174 | ad | |
175 | 175 | } | |
176 | 176 | else false | |
177 | 177 | } | |
178 | 178 | ||
179 | 179 | ||
180 | 180 | func af (g,h) = { | |
181 | 181 | let i = getBoolean(g, h) | |
182 | 182 | if ($isInstanceOf(i, "Boolean")) | |
183 | 183 | then { | |
184 | 184 | let ad = i | |
185 | 185 | ad | |
186 | 186 | } | |
187 | 187 | else false | |
188 | 188 | } | |
189 | 189 | ||
190 | 190 | ||
191 | 191 | func ag (ah) = if ((ah == "G")) | |
192 | 192 | then G() | |
193 | 193 | else J() | |
194 | 194 | ||
195 | 195 | ||
196 | 196 | func ai (aj,ah) = { | |
197 | 197 | let ak = valueOrErrorMessage(getInteger(ag(ah), (("stats_" + aj) + "_quantity")), (("stats_" + aj) + "_quantity not found")) | |
198 | 198 | let al = pow((10000 / ak), 4, 5, 1, 2, FLOOR) | |
199 | 199 | if ((al > 0)) | |
200 | 200 | then al | |
201 | 201 | else 2 | |
202 | 202 | } | |
203 | 203 | ||
204 | 204 | ||
205 | 205 | func am (an) = { | |
206 | 206 | let i = an | |
207 | 207 | if ($isInstanceOf(i, "String")) | |
208 | 208 | then { | |
209 | 209 | let ao = i | |
210 | 210 | ao | |
211 | 211 | } | |
212 | 212 | else throw("FAS: wrong type, expected: String") | |
213 | 213 | } | |
214 | 214 | ||
215 | 215 | ||
216 | 216 | func ap (an) = { | |
217 | 217 | let i = an | |
218 | 218 | if ($isInstanceOf(i, "Int")) | |
219 | 219 | then { | |
220 | 220 | let aq = i | |
221 | 221 | aq | |
222 | 222 | } | |
223 | 223 | else throw("FAI: wrong type, expected: Int") | |
224 | 224 | } | |
225 | 225 | ||
226 | 226 | ||
227 | 227 | func ar (an) = { | |
228 | 228 | let i = an | |
229 | 229 | if ($isInstanceOf(i, "Boolean")) | |
230 | 230 | then { | |
231 | 231 | let as = i | |
232 | 232 | as | |
233 | 233 | } | |
234 | 234 | else throw("FAB: wrong type, expected: Boolean") | |
235 | 235 | } | |
236 | 236 | ||
237 | 237 | ||
238 | 238 | func at (au,g) = if (if ((value(assetInfo(au)).issuer == J())) | |
239 | 239 | then true | |
240 | 240 | else (value(assetInfo(au)).issuer == G())) | |
241 | 241 | then { | |
242 | 242 | let av = ap(invoke(L(), "calculateFarmingPowerBoost", [toBase58String(au), g], nil)) | |
243 | 243 | if ((av == av)) | |
244 | 244 | then { | |
245 | 245 | let aw = value(assetInfo(au)).name | |
246 | 246 | let ax = (takeRight(value(aw), 1) == "U") | |
247 | 247 | let ay = if (ax) | |
248 | 248 | then "" | |
249 | 249 | else am(invoke(J(), "getGenFromName", [aw], nil)) | |
250 | 250 | if ((ay == ay)) | |
251 | 251 | then { | |
252 | 252 | let az = if (ax) | |
253 | 253 | then 100 | |
254 | 254 | else { | |
255 | 255 | let ah = take(takeRight(aw, 2), 1) | |
256 | 256 | ai(ay, ah) | |
257 | 257 | } | |
258 | 258 | let aA = (az + fraction(az, av, 100)) | |
259 | 259 | $Tuple2(ay, aA) | |
260 | 260 | } | |
261 | 261 | else throw("Strict value is not equal to itself.") | |
262 | 262 | } | |
263 | 263 | else throw("Strict value is not equal to itself.") | |
264 | 264 | } | |
265 | 265 | else throw("not valid NFT") | |
266 | 266 | ||
267 | 267 | ||
268 | 268 | func aB (g,au) = ac((((("address_" + g) + "_asset_") + au) + "_farmingPower")) | |
269 | 269 | ||
270 | 270 | ||
271 | - | func aC (aD) = { | |
272 | - | let aE = k(("assets_" + aD)) | |
273 | - | if ((aE == "")) | |
274 | - | then nil | |
275 | - | else split(aE, ",") | |
276 | - | } | |
271 | + | func aC (aD,aE,aA) = (aD + (((b * aa()) * (height - aE)) / aA)) | |
277 | 272 | ||
278 | 273 | ||
279 | - | func aF (aG,aH,aA) = (aG + (((b * aa()) * (height - aH)) / aA)) | |
280 | - | ||
281 | - | ||
282 | - | func aI () = if ((ac("total_farmingPower") > 0)) | |
274 | + | func aF () = if ((ac("total_farmingPower") > 0)) | |
283 | 275 | then { | |
284 | - | let | |
285 | - | let | |
276 | + | let aD = ac("total_lastCheckInterest") | |
277 | + | let aE = ac("total_lastCheckInterestHeight") | |
286 | 278 | let aA = ac("total_farmingPower") | |
287 | - | | |
279 | + | aC(aD, aE, aA) | |
288 | 280 | } | |
289 | 281 | else if ((ac("total_startHeight") != 0)) | |
290 | 282 | then ac("total_lastCheckInterest") | |
291 | 283 | else throw("farming is not launched, yet") | |
292 | 284 | ||
293 | 285 | ||
294 | - | func | |
295 | - | let | |
296 | - | let | |
297 | - | ( | |
286 | + | func aG (g,au,aH) = { | |
287 | + | let aI = ac((((("address_" + g) + "_asset_") + au) + "_lastCheckInterest")) | |
288 | + | let aJ = aF() | |
289 | + | (aH * (aJ - aI)) | |
298 | 290 | } | |
299 | 291 | ||
300 | 292 | ||
301 | - | func | |
302 | - | let | |
303 | - | if (( | |
293 | + | func aK (au,aL) = { | |
294 | + | let aM = k((("assets_" + aL) + "_locked")) | |
295 | + | if ((aM == "")) | |
304 | 296 | then au | |
305 | - | else (( | |
297 | + | else ((aM + ",") + au) | |
306 | 298 | } | |
307 | 299 | ||
308 | 300 | ||
309 | - | func | |
310 | - | let | |
311 | - | [IntegerEntry("total_farmingPower", (ac("total_farmingPower") + | |
301 | + | func aN (g,au,aH,aO) = { | |
302 | + | let aP = toBase58String(au) | |
303 | + | [IntegerEntry("total_farmingPower", (ac("total_farmingPower") + aH)), IntegerEntry("total_lastCheckInterest", aF()), IntegerEntry("total_lastCheckInterestHeight", height), StringEntry((("asset_" + aP) + "_owner"), g), IntegerEntry((((("address_" + g) + "_asset_") + aP) + "_farmingPower"), aH), IntegerEntry((((("address_" + g) + "_asset_") + aP) + "_lastCheckInterest"), aF()), StringEntry((((("address_" + g) + "_asset_") + aP) + "_unstaker"), aO)] | |
312 | 304 | } | |
313 | 305 | ||
314 | 306 | ||
315 | - | func | |
316 | - | let | |
317 | - | if (( | |
307 | + | func aQ (g,au,aR,aS,aT,aU) = { | |
308 | + | let aV = ab() | |
309 | + | if ((aV == aV)) | |
318 | 310 | then { | |
319 | - | let | |
320 | - | let | |
321 | - | if (if (( | |
322 | - | then ( | |
311 | + | let aP = toBase58String(au) | |
312 | + | let aO = k((((("address_" + g) + "_asset_") + aP) + "_unstaker")) | |
313 | + | if (if ((aO != "")) | |
314 | + | then (aO != aT) | |
323 | 315 | else false) | |
324 | 316 | then throw("FUN: It seems duck was staked throuh a dapp, not directly, please unstake through dapp!") | |
325 | 317 | else { | |
326 | - | let | |
327 | - | if (!(( | |
318 | + | let aH = aB(g, aP) | |
319 | + | if (!((aH > 0))) | |
328 | 320 | then throw("FGU: Asset farming power not bigger then 0") | |
329 | 321 | else { | |
330 | - | let | |
331 | - | let | |
332 | - | let | |
333 | - | let | |
334 | - | let | |
335 | - | let | |
336 | - | let | |
337 | - | then [DeleteEntry((((("address_" + g) + "_asset_") + | |
338 | - | else [IntegerEntry(((("address_" + g) + "_perchesAvailable_") + | |
339 | - | let | |
340 | - | then $Tuple2([ScriptTransfer( | |
322 | + | let aW = aG(g, aP, aH) | |
323 | + | let aX = (aW + ac((((("address_" + g) + "_asset_") + aP) + "_lastCheckFarmedAmount"))) | |
324 | + | let aY = ac((((("address_" + g) + "_asset_") + aP) + "_withdrawnAmount")) | |
325 | + | let aZ = ((aX - aY) / (b * 100)) | |
326 | + | let ba = ae((((("address_" + g) + "_asset_") + aP) + "_without_perch")) | |
327 | + | let bb = aZ | |
328 | + | let bc = if (ba) | |
329 | + | then [DeleteEntry((((("address_" + g) + "_asset_") + aP) + "_without_perch"))] | |
330 | + | else [IntegerEntry(((("address_" + g) + "_perchesAvailable_") + aR), (ac(((("address_" + g) + "_perchesAvailable_") + aR)) + 1))] | |
331 | + | let bd = if (aU) | |
332 | + | then $Tuple2([ScriptTransfer(aS, (bb * 1000000), F())], (bb * 1000000)) | |
341 | 333 | else $Tuple2(nil, 0) | |
342 | - | $Tuple2(((([IntegerEntry("total_farmingPower", (ac("total_farmingPower") - | |
334 | + | $Tuple2(((([IntegerEntry("total_farmingPower", (ac("total_farmingPower") - aH)), IntegerEntry("total_lastCheckInterest", aF()), IntegerEntry("total_lastCheckInterestHeight", height), DeleteEntry((("asset_" + aP) + "_owner")), DeleteEntry((((("address_" + g) + "_asset_") + aP) + "_unstaker")), IntegerEntry((((("address_" + g) + "_asset_") + aP) + "_farmingPower"), 0), IntegerEntry((((("address_" + g) + "_asset_") + aP) + "_lastCheckInterest"), aF()), IntegerEntry((((("address_" + g) + "_asset_") + aP) + "_withdrawnAmount"), (aY + (bb * c))), IntegerEntry((((("address_" + g) + "_asset_") + aP) + "_lastCheckFarmedAmount"), (ac((((("address_" + g) + "_asset_") + aP) + "_lastCheckFarmedAmount")) + aW))] ++ bc) ++ [ScriptTransfer(aS, 1, au)]) ++ bd._1), bd._2) | |
343 | 335 | } | |
344 | 336 | } | |
345 | 337 | } | |
346 | 338 | else throw("Strict value is not equal to itself.") | |
347 | 339 | } | |
348 | 340 | ||
349 | 341 | ||
350 | - | func | |
351 | - | let | |
352 | - | if (( | |
342 | + | func be (g) = { | |
343 | + | let bf = f(N(), (("ART-XMISTL_" + g) + "_owner")) | |
344 | + | if ((bf == "")) | |
353 | 345 | then a | |
354 | 346 | else ((a / 10) * 9) | |
355 | 347 | } | |
356 | 348 | ||
357 | 349 | ||
358 | - | func | |
359 | - | let | |
360 | - | let | |
361 | - | (indexOf( | |
350 | + | func bg (g) = { | |
351 | + | let bh = O() | |
352 | + | let bi = split(bh, ";") | |
353 | + | (indexOf(bi, g) != unit) | |
362 | 354 | } | |
363 | 355 | ||
364 | 356 | ||
365 | - | func | |
366 | - | let au = fromBase58String( | |
367 | - | let | |
368 | - | let g = if ( | |
369 | - | then toString( | |
370 | - | else | |
371 | - | let | |
372 | - | if (( | |
357 | + | func bj (aP,bk,bl) = { | |
358 | + | let au = fromBase58String(aP) | |
359 | + | let aT = toString(bk.caller) | |
360 | + | let g = if (bg(toString(bk.caller))) | |
361 | + | then toString(bk.originCaller) | |
362 | + | else aT | |
363 | + | let aR = takeRight(value(assetInfo(au)).name, 1) | |
364 | + | if ((aR == "U")) | |
373 | 365 | then throw("FUN: use another function to unstake Jackpot NFT") | |
374 | 366 | else { | |
375 | - | let | |
376 | - | | |
367 | + | let bm = aQ(g, au, aR, bk.caller, aT, bl) | |
368 | + | bm | |
377 | 369 | } | |
378 | 370 | } | |
379 | 371 | ||
380 | 372 | ||
381 | - | func | |
382 | - | let au = fromBase58String( | |
383 | - | let | |
384 | - | let g = if ( | |
385 | - | then toString( | |
386 | - | else | |
387 | - | let | |
373 | + | func bn (aP,bk,bl) = { | |
374 | + | let au = fromBase58String(aP) | |
375 | + | let aT = toString(bk.caller) | |
376 | + | let g = if (bg(toString(bk.caller))) | |
377 | + | then toString(bk.originCaller) | |
378 | + | else aT | |
379 | + | let aR = k((((("address_" + g) + "_asset_") + aP) + "_perchColor")) | |
388 | 380 | if ((takeRight(value(value(assetInfo(au)).name), 1) != "U")) | |
389 | 381 | then throw("jackpot only") | |
390 | 382 | else { | |
391 | - | let | |
392 | - | | |
383 | + | let bm = aQ(g, au, aR, bk.caller, aT, bl) | |
384 | + | bm | |
393 | 385 | } | |
394 | 386 | } | |
395 | 387 | ||
396 | 388 | ||
397 | - | func | |
389 | + | func bo (h) = { | |
398 | 390 | let i = getBoolean(this, h) | |
399 | 391 | if ($isInstanceOf(i, "Boolean")) | |
400 | 392 | then { | |
401 | 393 | let ad = i | |
402 | 394 | ad | |
403 | 395 | } | |
404 | 396 | else false | |
405 | 397 | } | |
406 | 398 | ||
407 | 399 | ||
408 | - | func | |
400 | + | func bp () = bo("TESTENV") | |
409 | 401 | ||
410 | 402 | ||
411 | - | @Callable( | |
412 | - | func configureOracle ( | |
403 | + | @Callable(bk) | |
404 | + | func configureOracle (bq) = if ((bk.caller != this)) | |
413 | 405 | then throw("FCO: admin only") | |
414 | - | else [StringEntry(l(), | |
406 | + | else [StringEntry(l(), bq)] | |
415 | 407 | ||
416 | 408 | ||
417 | 409 | ||
418 | - | @Callable( | |
419 | - | func init () = if (( | |
410 | + | @Callable(bk) | |
411 | + | func init () = if ((bk.caller != this)) | |
420 | 412 | then throw("FI: admin only") | |
421 | 413 | else [IntegerEntry("total_startHeight", height)] | |
422 | 414 | ||
423 | 415 | ||
424 | 416 | ||
425 | - | @Callable( | |
426 | - | func buyPerch ( | |
427 | - | let | |
428 | - | if (( | |
417 | + | @Callable(bk) | |
418 | + | func buyPerch (br,bs) = { | |
419 | + | let aV = ab() | |
420 | + | if ((aV == aV)) | |
429 | 421 | then { | |
430 | - | let | |
422 | + | let bt = if (if ((bk.caller == V())) | |
431 | 423 | then true | |
432 | - | else ( | |
424 | + | else (bk.caller == M())) | |
433 | 425 | then nil | |
434 | - | else X( | |
435 | - | if (( | |
426 | + | else X(bk.payments[0]) | |
427 | + | if ((bt == bt)) | |
436 | 428 | then { | |
437 | - | let | |
429 | + | let aR = if ((br == "U")) | |
438 | 430 | then "B" | |
439 | - | else | |
440 | - | if ((0 > value(indexOf(["B", "R", "G", "Y"], | |
431 | + | else br | |
432 | + | if ((0 > value(indexOf(["B", "R", "G", "Y"], aR)))) | |
441 | 433 | then throw("you need to set color properly") | |
442 | 434 | else { | |
443 | - | let | |
444 | - | let | |
435 | + | let bu = be(toString(bk.caller)) | |
436 | + | let bv = if ((bk.originCaller == bk.caller)) | |
445 | 437 | then { | |
446 | - | let | |
447 | - | if (( | |
448 | - | then ( | |
438 | + | let bw = ap(invoke(S(), "useCoupons", [bu], nil)) | |
439 | + | if ((bw == bw)) | |
440 | + | then (bu - bw) | |
449 | 441 | else throw("Strict value is not equal to itself.") | |
450 | 442 | } | |
451 | - | else | |
452 | - | let Y = if (( | |
443 | + | else bu | |
444 | + | let Y = if ((bv != 0)) | |
453 | 445 | then { | |
454 | - | let | |
455 | - | then value( | |
456 | - | else value( | |
457 | - | if (( | |
446 | + | let bx = if ((size(bk.payments) == 2)) | |
447 | + | then value(bk.payments[1]) | |
448 | + | else value(bk.payments[0]) | |
449 | + | if ((bx.assetId != F())) | |
458 | 450 | then throw(("FBP: You can attach only EGG tokens with the following asset id: " + toBase58String(F()))) | |
459 | - | else if (( | |
460 | - | then throw(((("FBP: To buy a perch you currently need the following amount of EGGlets: " + toString( | |
451 | + | else if ((bx.amount != bv)) | |
452 | + | then throw(((("FBP: To buy a perch you currently need the following amount of EGGlets: " + toString(bv)) + " ") + toString(bk.caller))) | |
461 | 453 | else { | |
462 | - | let | |
463 | - | let | |
464 | - | if (( | |
454 | + | let by = fraction(bv, W, 100) | |
455 | + | let bz = ar(invoke(K(), "refPayment", [bs], [AttachedPayment(F(), by)])) | |
456 | + | if ((bz == bz)) | |
465 | 457 | then { | |
466 | - | let | |
467 | - | then ( | |
468 | - | else | |
469 | - | let | |
470 | - | if (( | |
471 | - | then | |
458 | + | let bA = if (bz) | |
459 | + | then (bv - by) | |
460 | + | else bv | |
461 | + | let bB = invoke(T(), "burnAttachedPayments", nil, [AttachedPayment(F(), bA)]) | |
462 | + | if ((bB == bB)) | |
463 | + | then bv | |
472 | 464 | else throw("Strict value is not equal to itself.") | |
473 | 465 | } | |
474 | 466 | else throw("Strict value is not equal to itself.") | |
475 | 467 | } | |
476 | 468 | } | |
477 | 469 | else 0 | |
478 | 470 | if ((Y == Y)) | |
479 | 471 | then { | |
480 | - | let | |
481 | - | let | |
482 | - | ([IntegerEntry( | |
472 | + | let bC = ((("address_" + toString(bk.caller)) + "_perchesAvailable_") + aR) | |
473 | + | let bD = ac(bC) | |
474 | + | ([IntegerEntry(bC, (bD + 1))] ++ bt) | |
483 | 475 | } | |
484 | 476 | else throw("Strict value is not equal to itself.") | |
485 | 477 | } | |
486 | 478 | } | |
487 | 479 | else throw("Strict value is not equal to itself.") | |
488 | 480 | } | |
489 | 481 | else throw("Strict value is not equal to itself.") | |
490 | 482 | } | |
491 | 483 | ||
492 | 484 | ||
493 | 485 | ||
494 | - | @Callable( | |
495 | - | func addFreePerch (g, | |
496 | - | let | |
497 | - | if (( | |
498 | - | then if ((0 > value(indexOf(["B", "R", "G", "Y"], | |
486 | + | @Callable(bk) | |
487 | + | func addFreePerch (g,aR) = { | |
488 | + | let aV = ab() | |
489 | + | if ((aV == aV)) | |
490 | + | then if ((0 > value(indexOf(["B", "R", "G", "Y"], aR)))) | |
499 | 491 | then throw("you need to set color properly") | |
500 | - | else if (if (if (( | |
501 | - | then ( | |
492 | + | else if (if (if ((bk.caller != H())) | |
493 | + | then (bk.caller != I()) | |
502 | 494 | else false) | |
503 | - | then ( | |
495 | + | then (bk.caller != this) | |
504 | 496 | else false) | |
505 | 497 | then throw("rebirth and swop promo only") | |
506 | 498 | else { | |
507 | - | let | |
508 | - | let | |
509 | - | $Tuple2([IntegerEntry( | |
499 | + | let bC = ((("address_" + g) + "_perchesAvailable_") + aR) | |
500 | + | let bD = ac(bC) | |
501 | + | $Tuple2([IntegerEntry(bC, (bD + 1))], "") | |
510 | 502 | } | |
511 | 503 | else throw("Strict value is not equal to itself.") | |
512 | 504 | } | |
513 | 505 | ||
514 | 506 | ||
515 | 507 | ||
516 | - | @Callable( | |
508 | + | @Callable(bk) | |
517 | 509 | func stakeNFT () = { | |
518 | - | let | |
519 | - | if (( | |
510 | + | let aV = ab() | |
511 | + | if ((aV == aV)) | |
520 | 512 | then { | |
521 | - | let | |
513 | + | let bt = if (if ((bk.caller == V())) | |
522 | 514 | then true | |
523 | - | else ( | |
515 | + | else (bk.caller == M())) | |
524 | 516 | then nil | |
525 | - | else X( | |
526 | - | if (( | |
517 | + | else X(bk.payments[1]) | |
518 | + | if ((bt == bt)) | |
527 | 519 | then { | |
528 | - | let | |
529 | - | let au = value(value( | |
530 | - | let | |
531 | - | let g = if ( | |
532 | - | then toString( | |
533 | - | else | |
534 | - | let | |
535 | - | let | |
536 | - | if (( | |
520 | + | let bE = value(bk.payments[0]) | |
521 | + | let au = value(value(bk.payments[0]).assetId) | |
522 | + | let aT = toString(bk.caller) | |
523 | + | let g = if (bg(toString(bk.caller))) | |
524 | + | then toString(bk.originCaller) | |
525 | + | else aT | |
526 | + | let aR = takeRight(value(assetInfo(au)).name, 1) | |
527 | + | let bF = ac(((("address_" + g) + "_perchesAvailable_") + aR)) | |
528 | + | if ((bE.amount != 1)) | |
537 | 529 | then throw("NFT is not attached") | |
538 | - | else if ((0 >= | |
539 | - | then throw(("no perches available for the color " + | |
530 | + | else if ((0 >= bF)) | |
531 | + | then throw(("no perches available for the color " + aR)) | |
540 | 532 | else { | |
541 | - | let | |
542 | - | let | |
543 | - | let | |
544 | - | (( | |
533 | + | let bG = at(au, g) | |
534 | + | let aL = bG._1 | |
535 | + | let aH = bG._2 | |
536 | + | ((aN(g, au, aH, aT) ++ [IntegerEntry(((("address_" + g) + "_perchesAvailable_") + aR), (bF - 1))]) ++ bt) | |
545 | 537 | } | |
546 | 538 | } | |
547 | 539 | else throw("Strict value is not equal to itself.") | |
548 | 540 | } | |
549 | 541 | else throw("Strict value is not equal to itself.") | |
550 | 542 | } | |
551 | 543 | ||
552 | 544 | ||
553 | 545 | ||
554 | - | @Callable( | |
546 | + | @Callable(bk) | |
555 | 547 | func stakeNFTWithoutPerch () = { | |
556 | - | let | |
557 | - | if (( | |
548 | + | let aV = ab() | |
549 | + | if ((aV == aV)) | |
558 | 550 | then { | |
559 | - | let | |
560 | - | if (!( | |
551 | + | let bH = toString(bk.caller) | |
552 | + | if (!(bg(bH))) | |
561 | 553 | then throw("FSNWP: Only trusted smart contracts can stake without a perch!") | |
562 | 554 | else { | |
563 | - | let | |
564 | - | let au = value(value( | |
565 | - | let g = toString( | |
566 | - | if (( | |
555 | + | let bE = value(bk.payments[0]) | |
556 | + | let au = value(value(bk.payments[0]).assetId) | |
557 | + | let g = toString(bk.originCaller) | |
558 | + | if ((bE.amount != 1)) | |
567 | 559 | then throw("NFT is not attached") | |
568 | 560 | else { | |
569 | - | let | |
570 | - | let | |
571 | - | let | |
572 | - | let | |
573 | - | let | |
574 | - | ( | |
561 | + | let bI = at(au, g) | |
562 | + | let aL = bI._1 | |
563 | + | let aH = bI._2 | |
564 | + | let aP = toBase58String(au) | |
565 | + | let aT = toString(bk.caller) | |
566 | + | (aN(g, au, aH, aT) ++ [BooleanEntry((((("address_" + g) + "_asset_") + aP) + "_without_perch"), true)]) | |
575 | 567 | } | |
576 | 568 | } | |
577 | 569 | } | |
578 | 570 | else throw("Strict value is not equal to itself.") | |
579 | 571 | } | |
580 | 572 | ||
581 | 573 | ||
582 | 574 | ||
583 | - | @Callable( | |
584 | - | func unstakeNFT ( | |
585 | - | let | |
575 | + | @Callable(bk) | |
576 | + | func unstakeNFT (aP) = { | |
577 | + | let bt = if ((bk.caller == M())) | |
586 | 578 | then nil | |
587 | - | else X( | |
588 | - | if (( | |
579 | + | else X(bk.payments[0]) | |
580 | + | if ((bt == bt)) | |
589 | 581 | then { | |
590 | - | let | |
591 | - | $Tuple2(( | |
582 | + | let bm = bj(aP, bk, true) | |
583 | + | $Tuple2((bm._1 ++ bt), bm._2) | |
592 | 584 | } | |
593 | 585 | else throw("Strict value is not equal to itself.") | |
594 | 586 | } | |
595 | 587 | ||
596 | 588 | ||
597 | 589 | ||
598 | - | @Callable( | |
599 | - | func unstakeNFTWithoutClaim ( | |
590 | + | @Callable(bk) | |
591 | + | func unstakeNFTWithoutClaim (aP) = bj(aP, bk, false) | |
600 | 592 | ||
601 | 593 | ||
602 | 594 | ||
603 | - | @Callable( | |
604 | - | func stakeJackpot ( | |
605 | - | let | |
606 | - | if (( | |
595 | + | @Callable(bk) | |
596 | + | func stakeJackpot (aR) = { | |
597 | + | let aV = ab() | |
598 | + | if ((aV == aV)) | |
607 | 599 | then { | |
608 | - | let | |
600 | + | let bt = if (if ((bk.caller == V())) | |
609 | 601 | then true | |
610 | - | else ( | |
602 | + | else (bk.caller == M())) | |
611 | 603 | then nil | |
612 | - | else X( | |
613 | - | if (( | |
604 | + | else X(bk.payments[1]) | |
605 | + | if ((bt == bt)) | |
614 | 606 | then { | |
615 | - | let | |
616 | - | let au = value( | |
617 | - | let | |
618 | - | let g = if ( | |
619 | - | then toString( | |
620 | - | else | |
621 | - | let | |
622 | - | let | |
623 | - | if (( | |
607 | + | let bE = value(bk.payments[0]) | |
608 | + | let au = value(bE.assetId) | |
609 | + | let aT = toString(bk.caller) | |
610 | + | let g = if (bg(toString(bk.caller))) | |
611 | + | then toString(bk.originCaller) | |
612 | + | else aT | |
613 | + | let bF = ac(((("address_" + g) + "_perchesAvailable_") + aR)) | |
614 | + | let bJ = value(assetInfo(au)).issuer | |
615 | + | if ((bE.amount != 1)) | |
624 | 616 | then throw("NFT is not attached") | |
625 | - | else if (if (( | |
617 | + | else if (if ((bJ == G())) | |
626 | 618 | then true | |
627 | - | else ( | |
619 | + | else (bJ == J())) | |
628 | 620 | then if ((takeRight(value(value(assetInfo(au)).name), 1) != "U")) | |
629 | 621 | then throw("jackpot only") | |
630 | - | else if ((0 >= | |
631 | - | then throw(("FSJ: no perches available for the color " + | |
622 | + | else if ((0 >= bF)) | |
623 | + | then throw(("FSJ: no perches available for the color " + aR)) | |
632 | 624 | else { | |
633 | - | let | |
634 | - | (( | |
625 | + | let bK = at(au, g) | |
626 | + | ((aN(g, au, bK._2, aT) ++ [IntegerEntry(((("address_" + g) + "_perchesAvailable_") + aR), (bF - 1)), StringEntry((((("address_" + g) + "_asset_") + toBase58String(au)) + "_perchColor"), aR)]) ++ bt) | |
635 | 627 | } | |
636 | 628 | else throw("asset is not valid") | |
637 | 629 | } | |
638 | 630 | else throw("Strict value is not equal to itself.") | |
639 | 631 | } | |
640 | 632 | else throw("Strict value is not equal to itself.") | |
641 | 633 | } | |
642 | 634 | ||
643 | 635 | ||
644 | 636 | ||
645 | - | @Callable( | |
646 | - | func unstakeJackpot ( | |
647 | - | let | |
648 | - | if (( | |
637 | + | @Callable(bk) | |
638 | + | func unstakeJackpot (aP) = { | |
639 | + | let bt = X(bk.payments[0]) | |
640 | + | if ((bt == bt)) | |
649 | 641 | then { | |
650 | - | let | |
651 | - | $Tuple2(( | |
642 | + | let bm = bn(aP, bk, true) | |
643 | + | $Tuple2((bm._1 ++ bt), bm._2) | |
652 | 644 | } | |
653 | 645 | else throw("Strict value is not equal to itself.") | |
654 | 646 | } | |
655 | 647 | ||
656 | 648 | ||
657 | 649 | ||
658 | - | @Callable( | |
659 | - | func unstakeJackpotWithoutClaimEgg ( | |
650 | + | @Callable(bk) | |
651 | + | func unstakeJackpotWithoutClaimEgg (aP) = bn(aP, bk, false) | |
660 | 652 | ||
661 | 653 | ||
662 | 654 | ||
663 | - | @Callable( | |
664 | - | func claimReward ( | |
665 | - | let | |
666 | - | if (( | |
655 | + | @Callable(bk) | |
656 | + | func claimReward (aP) = { | |
657 | + | let aV = ab() | |
658 | + | if ((aV == aV)) | |
667 | 659 | then { | |
668 | - | let | |
660 | + | let bt = if ((bk.originCaller == Q())) | |
669 | 661 | then nil | |
670 | - | else X( | |
671 | - | if (( | |
662 | + | else X(bk.payments[0]) | |
663 | + | if ((bt == bt)) | |
672 | 664 | then { | |
673 | - | let g = if (( | |
674 | - | then toString( | |
675 | - | else toString( | |
676 | - | let au = fromBase58String( | |
677 | - | let | |
678 | - | let | |
679 | - | let | |
680 | - | let | |
681 | - | let | |
682 | - | if ((0 >= | |
665 | + | let g = if ((bk.originCaller == Q())) | |
666 | + | then toString(bk.caller) | |
667 | + | else toString(bk.originCaller) | |
668 | + | let au = fromBase58String(aP) | |
669 | + | let aH = aB(g, aP) | |
670 | + | let aW = aG(g, aP, aH) | |
671 | + | let aX = (aW + ac((((("address_" + g) + "_asset_") + aP) + "_lastCheckFarmedAmount"))) | |
672 | + | let aY = ac((((("address_" + g) + "_asset_") + aP) + "_withdrawnAmount")) | |
673 | + | let aZ = ((aX - aY) / (b * 100)) | |
674 | + | if ((0 >= aZ)) | |
683 | 675 | then throw("FCR: you have no EGGs to withdraw") | |
684 | - | else $Tuple2(([IntegerEntry((((("address_" + g) + "_asset_") + | |
676 | + | else $Tuple2(([IntegerEntry((((("address_" + g) + "_asset_") + aP) + "_withdrawnAmount"), (ac((((("address_" + g) + "_asset_") + aP) + "_withdrawnAmount")) + (aZ * c))), ScriptTransfer(Address(fromBase58String(g)), (aZ * 1000000), F())] ++ bt), (aZ * 1000000)) | |
685 | 677 | } | |
686 | 678 | else throw("Strict value is not equal to itself.") | |
687 | 679 | } | |
688 | 680 | else throw("Strict value is not equal to itself.") | |
689 | 681 | } | |
690 | 682 | ||
691 | 683 | ||
692 | - | @Verifier( | |
693 | - | func | |
694 | - | then sigVerify( | |
684 | + | @Verifier(bL) | |
685 | + | func bM () = if (bp()) | |
686 | + | then sigVerify(bL.bodyBytes, bL.proofs[0], bL.senderPublicKey) | |
695 | 687 | else { | |
696 | - | let | |
697 | - | let | |
698 | - | let | |
699 | - | let | |
688 | + | let bN = base58'6TdaXEfhnjYquvPf3yV7MFxt2CbgFmaqsvGwkKfXtKi4' | |
689 | + | let bO = base58'E23yUg8eun5nXB1nZRDf7RTyRADKxQhGNXdpTYonEvtU' | |
690 | + | let bP = base58'Ga8WEBTPXbHuoXRD355mQ6ms8PsM2RFYKeA1mEP32CFe' | |
691 | + | let bQ = if (sigVerify(bL.bodyBytes, bL.proofs[0], bN)) | |
700 | 692 | then 1 | |
701 | - | else if (sigVerify( | |
693 | + | else if (sigVerify(bL.bodyBytes, bL.proofs[1], bN)) | |
702 | 694 | then 1 | |
703 | - | else if (sigVerify( | |
695 | + | else if (sigVerify(bL.bodyBytes, bL.proofs[2], bN)) | |
704 | 696 | then 1 | |
705 | 697 | else 0 | |
706 | - | let | |
698 | + | let bR = if (sigVerify(bL.bodyBytes, bL.proofs[0], bO)) | |
707 | 699 | then 1 | |
708 | - | else if (sigVerify( | |
700 | + | else if (sigVerify(bL.bodyBytes, bL.proofs[1], bO)) | |
709 | 701 | then 1 | |
710 | - | else if (sigVerify( | |
702 | + | else if (sigVerify(bL.bodyBytes, bL.proofs[2], bO)) | |
711 | 703 | then 1 | |
712 | 704 | else 0 | |
713 | - | let | |
705 | + | let bS = if (sigVerify(bL.bodyBytes, bL.proofs[0], bP)) | |
714 | 706 | then 1 | |
715 | - | else if (sigVerify( | |
707 | + | else if (sigVerify(bL.bodyBytes, bL.proofs[1], bP)) | |
716 | 708 | then 1 | |
717 | - | else if (sigVerify( | |
709 | + | else if (sigVerify(bL.bodyBytes, bL.proofs[2], bP)) | |
718 | 710 | then 1 | |
719 | 711 | else 0 | |
720 | - | let bW = ((bT + bU) + bV) | |
721 | - | let i = bO | |
722 | - | (bW >= 2) | |
712 | + | let bT = ((bQ + bR) + bS) | |
713 | + | let i = bL | |
714 | + | if ($isInstanceOf(i, "DataTransaction")) | |
715 | + | then { | |
716 | + | let bU = i | |
717 | + | sigVerify(bL.bodyBytes, bL.proofs[0], bL.senderPublicKey) | |
718 | + | } | |
719 | + | else (bT >= 2) | |
723 | 720 | } | |
724 | 721 |
github/deemru/w8io/0e76f2f 221.24 ms ◑