tx · EFMzGNnetgUYgG2FEKJa5NhikD2n4zd7CZcrJ3iVycu1

3NBPx1Fciu3JQNEGZ21jSnTdutLNGGBUSXh:  -0.03800000 Waves

2024.12.15 01:46 [3414876] smart account 3NBPx1Fciu3JQNEGZ21jSnTdutLNGGBUSXh > SELF 0.00000000 Waves

{ "type": 13, "id": "EFMzGNnetgUYgG2FEKJa5NhikD2n4zd7CZcrJ3iVycu1", "fee": 3800000, "feeAssetId": null, "timestamp": 1734216404463, "version": 2, "chainId": 84, "sender": "3NBPx1Fciu3JQNEGZ21jSnTdutLNGGBUSXh", "senderPublicKey": "3QtfC1XbLZXdeawMDeSERy9vvjUmj1XYd2GFmrvx7pWQ", "proofs": [ "4pzmrBvY7JLAoJRjnxweHqVpFXgHQhFCBojNJaUpmb5pufwS2kqK6ibpWF15yiVpmzBGUtZKYmfcq63XNKPMHsLy" ], "script": "base64:BgJaCAISABIECgIICBIDCgEEEgMKAQESABIFCgMIAQQSABIDCgEBEgASBAoCCAESABIDCgEIEgMKAQgSBAoCCAESAwoBCBIDCgEIEgASAwoBCBIAEgASABIDCgEBjwEAA1NFUAICX18ABU1VTFQ2AMCEPQAFTVVMVDcAgK3iBAAFTVVMVDgAgMLXLwAGTVVMVDE0AICA6YOx3hYACkRBWV9NSUxMSVMAgLiZKQAVVVNEVDJBQ1JFU19NVUxUSVBMSUVSAAoAE09ORV9QRVJDRU5UX0RJVklTT1IAZAAMUkFORE9NX0RFTEFZAAIAFE5GVF9DSEVTVF9QUklDRV9VU0RUAMCWsQIABWNoYWluCQDJAQIJAMoBAggFBHRoaXMFYnl0ZXMAAQABABdEQUlMWV9QUk9NT19TVEFSVF9CTE9DSwQHJG1hdGNoMAUFY2hhaW4DCQAAAgEBVwUHJG1hdGNoMACA75ECAwkAAAIBAVQFByRtYXRjaDAAwKbQAQkAAgECDVVua25vd24gY2hhaW4AFURBSUxZX1BST01PX0VORF9CTE9DSwQHJG1hdGNoMAUFY2hhaW4DCQAAAgEBVwUHJG1hdGNoMACg25MCAwkAAAIBAVQFByRtYXRjaDAA4JLSAQkAAgECDVVua25vd24gY2hhaW4ACkRBWV9CTE9DS1MEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDAAoAsDCQAAAgEBVAUHJG1hdGNoMAA8CQACAQINVW5rbm93biBjaGFpbgALV0VFS19CTE9DS1MEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDAA4E4DCQAAAgEBVAUHJG1hdGNoMAC0AQkAAgECDVVua25vd24gY2hhaW4AClZSRl9PRkZTRVQEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDAAAAMJAAACAQFUBQckbWF0Y2gwAJD5RQkAAgECDVVua25vd24gY2hhaW4AC3VzZHRBc3NldElkBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwASCE2nqyCAM/TtG7yo7ui5O8yYLdC136B5ao1CP5qA//uQMJAAACAQFUBQckbWF0Y2gwASBVsdifcoeC7+XjW42sBatl3ppDoS8WuwXzGreHpfHFGAkAAgECDVVua25vd24gY2hhaW4AFmRlZmF1bHRSZXN0MkFkZHJlc3NTdHIEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDACIzNQRndZdGE4YmlFejMxenBlRmU1REpLOHdFNXRyU3BRVkY4AwkAAAIBAVQFByRtYXRjaDACIzNON1V1WWFyNjI2NFA1OEZCaFZXS1BRQWg0WXVhMmhnbmd2CQACAQINVW5rbm93biBjaGFpbgAOYXJiaXRyYWdlRGVsYXkEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDAFCkRBWV9NSUxMSVMDCQAAAgEBVAUHJG1hdGNoMADg1AMJAAIBAg1Vbmtub3duIGNoYWluABVvbGRTdGFraW5nQ29udHJhY3RTdHIEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDACIzNQTG5jWHRTMVU4M0Q2Y1FiRkQzSDhyQkhQTGd6eFNGS1oxAwkAAAIBAVQFByRtYXRjaDACIzNOREN5Qkc1cTg1SnVhUmlpZ1VlRXRhaW55akNRVDNYcFptCQACAQINVW5rbm93biBjaGFpbgEPZ2V0U3RyaW5nT3JGYWlsAgdhZGRyZXNzA2tleQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFB2FkZHJlc3MFA2tleQkAuQkCCQDMCAICCm1hbmRhdG9yeSAJAMwIAgkApQgBBQdhZGRyZXNzCQDMCAICAS4JAMwIAgUDa2V5CQDMCAICDyBpcyBub3QgZGVmaW5lZAUDbmlsAgAAEElkeENmZ0FjcmVzMkRhcHAAAQANSWR4Q2ZnV2xnRGFwcAACABRJZHhDZmdJbnZlc3RGdW5kRGFwcAAFABBJZHhDZmdNYXJrZXREYXBwAAYBCmtleVJlc3RDZmcAAg4lc19fcmVzdENvbmZpZwEPa2V5UmVzdDJBZGRyZXNzAAINJXNfX3Jlc3QyQWRkcgERcmVhZFJlc3RDZmdPckZhaWwBBHJlc3QJALwJAgkBD2dldFN0cmluZ09yRmFpbAIFBHJlc3QJAQprZXlSZXN0Q2ZnAAUDU0VQARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCCHJlc3QyQ2ZnA2lkeAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJAJEDAgUIcmVzdDJDZmcFA2lkeAkArAICAipSZXN0IGNmZyBkb2Vzbid0IGNvbnRhaW4gYWRkcmVzcyBhdCBpbmRleCAJAKQDAQUDaWR4AA1yZXN0MkNvbnRyYWN0CQERQGV4dHJOYXRpdmUoMTA2MikBCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMJAQ9rZXlSZXN0MkFkZHJlc3MABRZkZWZhdWx0UmVzdDJBZGRyZXNzU3RyAAhyZXN0MkNmZwkBEXJlYWRSZXN0Q2ZnT3JGYWlsAQUNcmVzdDJDb250cmFjdAAOYWNyZXMyQ29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQhyZXN0MkNmZwUQSWR4Q2ZnQWNyZXMyRGFwcAALd2xnQ29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQhyZXN0MkNmZwUNSWR4Q2ZnV2xnRGFwcAASaW52ZXN0RnVuZENvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUIcmVzdDJDZmcFFElkeENmZ0ludmVzdEZ1bmREYXBwAA5tYXJrZXRDb250cmFjdAkBGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIFCHJlc3QyQ2ZnBRBJZHhDZmdNYXJrZXREYXBwABNvbGRBY3Jlc0NvbnRyYWN0S2V5AhBvbGRBY3Jlc0NvbnRyYWN0AQprZXlCbG9ja2VkAAIQY29udHJhY3RzQmxvY2tlZAEVa2V5TGFzdFdlZWtUeElkQnlVc2VyAQRhZGRyCQCsAgICE2xhc3RXZWVrVHhJZEJ5VXNlcl8FBGFkZHIBFGtleUN1cldlZWtUeElkQnlVc2VyAQRhZGRyCQCsAgICEmN1cldlZWtUeElkQnlVc2VyXwUEYWRkcgEJa2V5Q29tbWl0AQdhZGRyZXNzCQCsAgICD2ZpbmlzaEJsb2NrRm9yXwUHYWRkcmVzcwANd2xnQXNzZXRJZEtleQILd2xnX2Fzc2V0SWQACndsZ0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnAgCBQt3bGdDb250cmFjdAUNd2xnQXNzZXRJZEtleQIYV0xHT0xEIGlzIG5vdCBpc3N1ZWQgeWV0ABRhY3Jlc0lzc3VlZEFtb3VudEtleQIRYWNyZXNJc3N1ZWRBbW91bnQAD2FjcmVzQXNzZXRJZEtleQIMYWNyZXNBc3NldElkAAxhY3Jlc0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnAgCBQ5hY3JlczJDb250cmFjdAUPYWNyZXNBc3NldElkS2V5AhdBQ1JFUyBpcyBub3QgaXNzdWVkIHlldAEYa2V5QWNyZXNTdGFrZWRUaW1lQnlVc2VyAQRhZGRyCQCsAgICFmFjcmVzU3Rha2VkVGltZUJ5VXNlcl8FBGFkZHIBFWtleVN0YWtlZExhbmRzQnlPd25lcgEJb3duZXJBZGRyCQCsAgICE3N0YWtlZExhbmRzQnlPd25lcl8FCW93bmVyQWRkcgEUa2V5U3Rha2VkRHVja0J5T3duZXIBCW93bmVyQWRkcgkArAICAhJzdGFrZWREdWNrQnlPd25lcl8FCW93bmVyQWRkcgEea2V5U3Rha2VkVGltZUJ5QXNzZXRJZEFuZE93bmVyAgdhc3NldElkBGFkZHIJAKwCAgkArAICCQCsAgICA3N0XwUHYXNzZXRJZAIBXwUEYWRkcgEUa2V5U3Rha2VkTkZUc0J5T3duZXIBCW93bmVyQWRkcgkArAICAhJzdGFrZWRORlRzQnlPd25lcl8FCW93bmVyQWRkcgERa2V5VXNlclByb21vQWNyZXMBB2FkZHJlc3MJAKwCAgILcHJvbW9BY3Jlc18FB2FkZHJlc3MBE2tleVVzZXJQcm9tb1RpY2tldHMBB2FkZHJlc3MJAKwCAgINcHJvbW9UaWNrZXRzXwUHYWRkcmVzcwAUa2V5VG90YWxQcm9tb1RpY2tldHMCEXRvdGFsUHJvbW9UaWNrZXRzAAtrZXlQcm9tb01hcAIIcHJvbW9NYXABFGtleVByb21vUm91bmRXaW5uZXJzAQNkYXkJAKwCAgINZGFpbHlXaW5uZXJzXwkApAMBBQNkYXkAEnByb21vQXdhcmRQZXJSb3VuZAkAzAgCAAAJAMwIAgCAyrXuAQkAzAgCAIDC1y8JAMwIAgCAwtcvCQDMCAIAgMLXLwkAzAgCAIDC1y8FA25pbAEFYXNJbnQBAXYEByRtYXRjaDAFAXYDCQABAgUHJG1hdGNoMAIDSW50BAFuBQckbWF0Y2gwBQFuCQACAQIVZmFpbCB0byBjYXN0IGludG8gSW50AQxhc1R1cGxlNUludHMBA3ZhbAQHJG1hdGNoMAUDdmFsAwkAAQIFByRtYXRjaDACGShJbnQsIEludCwgSW50LCBJbnQsIEludCkEAXQFByRtYXRjaDAFAXQJAAIBAitmYWlsIHRvIGNhc3QgaW50byAoSW50LCBJbnQsIEludCwgSW50LCBJbnQpAQxhc1R1cGxlNEludHMBA3ZhbAQHJG1hdGNoMAUDdmFsAwkAAQIFByRtYXRjaDACFChJbnQsIEludCwgSW50LCBJbnQpBAF0BQckbWF0Y2gwBQF0CQACAQImZmFpbCB0byBjYXN0IGludG8gKEludCwgSW50LCBJbnQsIEludCkBDGFzVHVwbGUzSW50cwEDdmFsBAckbWF0Y2gwBQN2YWwDCQABAgUHJG1hdGNoMAIPKEludCwgSW50LCBJbnQpBAF0BQckbWF0Y2gwBQF0CQACAQIhZmFpbCB0byBjYXN0IGludG8gKEludCwgSW50LCBJbnQpAQxhc1R1cGxlMkludHMBA3ZhbAQHJG1hdGNoMAUDdmFsAwkAAQIFByRtYXRjaDACCihJbnQsIEludCkEAXQFByRtYXRjaDAFAXQJAAIBAhxmYWlsIHRvIGNhc3QgaW50byAoSW50LCBJbnQpAQpmaXhlZFBvaW50AgN2YWwIZGVjaW1hbHMEBnRlblBvdwkAbAYACgAABQhkZWNpbWFscwAAAAAFBERPV04EB2xvd1BhcnQJAKQDAQkAagIFA3ZhbAUGdGVuUG93BAZ6ZXJvZXMJALACAgkApAMBBQZ0ZW5Qb3cJAGQCAAEJALECAQUHbG93UGFydAkArAICCQCsAgIJAKwCAgkApAMBCQBpAgUDdmFsBQZ0ZW5Qb3cCAS4FBnplcm9lcwUHbG93UGFydAEPZ2V0UmFuZG9tTnVtYmVyAwhtYXhWYWx1ZQRzYWx0B2VudHJvcHkDCQBnAgAABQhtYXhWYWx1ZQkAAgECFm1heFZhbHVlIHNob3VsZCBiZSA+IDAECnJhbmRvbUhhc2gJANQWAQkAywECBQRzYWx0BQdlbnRyb3B5CQBqAgkAsQkBBQpyYW5kb21IYXNoBQhtYXhWYWx1ZQEEcGFkTAIDdmFsA2xlbgQEdmFsUwkApAMBBQN2YWwEBnplcm9lcwkAsAICCQCkAwEJAGwGAAoAAAkAZQIFA2xlbgkAsQIBBQR2YWxTAAAAAAUERE9XTgABCQCsAgIFBnplcm9lcwUEdmFsUwADTTZfAMCEPQADTThfAIDC1y8AD3dsZ0lzc3VlZEFtdEtleQIQd2xnX2lzc3VlZEFtb3VudAAOemJJc3N1ZWRBbXRLZXkCEnpiaWxsX2lzc3VlZEFtb3VudAEXa2V5QWNyZXNTdGFrZWRBbXRCeVVzZXIBBGFkZHIJAKwCAgIYYWNyZXNTdGFrZWRBbW91bnRCeVVzZXJfBQRhZGRyARVrZXlGYXJtaW5nUG93ZXJCeVVzZXIBBGFkZHIJAKwCAgITZmFybWluZ1Bvd2VyQnlVc2VyXwUEYWRkcgASYWNyZXNTdGFrZFRvdGFsS2V5AhZhY3Jlc1N0YWtlZEFtb3VudFRvdGFsABR0b3RhbEZhcm1pbmdQb3dlcktleQIRdG90YWxGYXJtaW5nUG93ZXIAC01BWF9XTF9ORlRTAAMADE1BWF9BUktfTkZUUwABAA1BUktfTkZUX0JPTlVTAIgnABdNQVhfTkZUU19TVEFLRURfQllfVVNFUgAEABFrZXlOZnRUb3RhbElzc3VlZAIObmZ0VG90YWxJc3N1ZWQAEWtleU5mdFRvdGFsQnVybmVkAg5uZnRUb3RhbEJ1cm5lZAATa2V5V2xOZnRUb3RhbFN0YWtlZAIQV2xOZnRUb3RhbFN0YWtlZAAUa2V5QXJrTmZ0VG90YWxTdGFrZWQCEUFya05mdFRvdGFsU3Rha2VkARVrZXlOZnROdW1iZXJCeUFzc2V0SWQBB2Fzc2V0SWQJAKwCAgITbmZ0TnVtYmVyQnlBc3NldElkXwUHYXNzZXRJZAESa2V5VXNlcldsTmZ0TnVtYmVyAQRhZGRyCQCsAgICEHVzZXJXbE5mdE51bWJlcl8FBGFkZHIBE2tleVVzZXJBcmtOZnROdW1iZXIBBGFkZHIJAKwCAgIRdXNlckFya05mdE51bWJlcl8FBGFkZHIBEGtleVVzZXJGdWxsQm9udXMBBGFkZHIJAKwCAgIOdXNlckZ1bGxCb251c18FBGFkZHIACmxldmVsQWNyZXMJAMwIAgAACQDMCAIACgkAzAgCABQJAMwIAgAoCQDMCAIAUAkAzAgCAJYBCQDMCAIA+gEJAMwIAgCQAwkAzAgCALwFCQDMCAIA6AcFA25pbAEPZ2V0TGV2ZWxCeUFjcmVzAQVhY3JlcwQDYWNyCQBpAgkAZAIFBWFjcmVzAP/B1y8FA004XwoBB2NoZWNrZXICA2FjYwRpdGVtAwkAZwIFBGl0ZW0FA2FjcgUDYWNjCQBkAgUDYWNjAAEKAAIkbAUKbGV2ZWxBY3JlcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEHY2hlY2tlcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgEWZ2V0RmFybWluZ1Bvd2VyQnlBY3JlcwEFYWNyZXMJAGgCCQBoAgUFYWNyZXMAFAkAZAIJAQ9nZXRMZXZlbEJ5QWNyZXMBBQVhY3JlcwAEAR5nZXRGYXJtaW5nUG93ZXJCeUFjcmVzQW5kQm9udXMCBWFjcmVzBmJvbnVzNgQKbm90Qm9udXNlZAkBFmdldEZhcm1pbmdQb3dlckJ5QWNyZXMBBQVhY3JlcwkAlAoCCQBrAwUKbm90Qm9udXNlZAkAZAIFA002XwUGYm9udXM2BQNNNl8FCm5vdEJvbnVzZWQAC3RlYW1BZGRyS2V5Agh0ZWFtQWRkcgEZa2V5TGFzdFdsZ1RyYWRlVGltZUJ5VXNlcgEEYWRkcgkArAICAhBsYXN0QXJiVGltZVVzZXJfBQRhZGRyABFPTERfU1RBS0lOR19ERUFETACA+eObuTIAFE1BWF9MQU5EU19UT19DT05WRVJUAA4AFGtleUxhc3RBY3Jlc1NlbGxUaW1lAhFsYXN0QWNyZXNTZWxsVGltZQAQa2V5TGFzdExpbWl0TGVmdAINbGFzdExpbWl0TGVmdAAFbmFtZXMJAMwIAgILR29sZCBzaG92ZWwJAMwIAgIHUGlja2F4ZQkAzAgCAg5TYW50YSdzIG1pdHRlbgUDbmlsAAxkZXNjcmlwdGlvbnMJAMwIAgIWUmV3YXJkIGZvciBlYXJseSBiaXJkcwkAzAgCAhNJbmNyZWFzZXMgRmFybVBvd2VyCQDMCAICFU5ldyBZZWFyIHByb21vIHJld2FyZAUDbmlsAA5pZHhEZXNjclNob3ZlbAAAAA9pZHhEZXNjclBpY2theGUAAQAOaWR4RGVzY3JNaXR0ZW4AAgAQcmFyaXR5VGhyZXNob2xkcwkAzAgCAAUJAMwIAgAKCQDMCAIAFAUDbmlsAA1pZHhUaHJlc2hvbGRDAAAADWlkeFRocmVzaG9sZFUAAQANaWR4VGhyZXNob2xkTAACAAVuYW1legkAzAgCAgZTSE9WRUwJAMwIAgIHUElDS0FYRQkAzAgCAgZNSVRURU4FA25pbAANaWR4TmFtZVNob3ZlbAAAAA5pZHhOYW1lUGlja2F4ZQABAA1pZHhOYW1lTWl0dGVuAAIAC2NvbnRlbnRLZXl6CQDMCAICD2NvbnRlbnRQaWNrYXhlQwkAzAgCAg9jb250ZW50UGlja2F4ZVUJAMwIAgIPY29udGVudFBpY2theGVMCQDMCAICD2NvbnRlbnRQaWNrYXhlRQkAzAgCAg5jb250ZW50U2hvdmVsUAkAzAgCAg5jb250ZW50TWl0dGVuUAUDbmlsAAdpZHhLZXlDAAAACGlkeEtleVNQAAQACGlkeEtleU1QAAUAC3Jhcml0eU5hbWVzCQDMCAICBkNvbW1vbgkAzAgCAghVbmNvbW1vbgkAzAgCAglMZWdlbmRhcnkJAMwIAgIERXBpYwkAzAgCAgVQcm9tbwUDbmlsAAppZHhSYXJpdHlDAAAACmlkeFJhcml0eVUAAQAKaWR4UmFyaXR5TAACAAppZHhSYXJpdHlFAAMACmlkeFJhcml0eVAABAALY29sbGVjdGlvbnoJAMwIAgINRGlnZ2luZyB0b29scwkAzAgCAg5OZXcgWWVhciBnaWZ0cwUDbmlsAAppZHhDb2xsRGlnAAAADmlkeENvbGxOZXdZZWFyAAEACmJvbnVzVHlwZXoJAMwIAgIJRmFybVBvd2VyBQNuaWwADmlkeEJvbnVzVHlwZUZwAAABBnByb2xvZwEBaQMDCQECIT0CCAUBaQxvcmlnaW5DYWxsZXIFDXJlc3QyQ29udHJhY3QJAQt2YWx1ZU9yRWxzZQIJAKAIAQkBCmtleUJsb2NrZWQABwcJAAIBAh9Db250cmFjdHMgYXJlIHVuZGVyIG1haW50ZW5hbmNlBARhZGRyCQClCAEIBQFpDG9yaWdpbkNhbGxlcgQEd2VlawkAaQIFBmhlaWdodAULV0VFS19CTE9DS1MEC2xhc3RXZWVrS2V5CQEVa2V5TGFzdFdlZWtUeElkQnlVc2VyAQUEYWRkcgQSbGFzdFdlZWtUeElkQnlVc2VyCQCiCAEFC2xhc3RXZWVrS2V5BAR0eElkCQDYBAEIBQFpDXRyYW5zYWN0aW9uSWQEA3d0eAkArAICCQCsAgIJAKQDAQUEd2VlawIBXwUEdHhJZAQKY3VyV2Vla0tleQkBFGtleUN1cldlZWtUeElkQnlVc2VyAQUEYWRkcgMJAQlpc0RlZmluZWQBBRJsYXN0V2Vla1R4SWRCeVVzZXIECmxhc3RXZWVrVHgJALUJAgkBBXZhbHVlAQUSbGFzdFdlZWtUeElkQnlVc2VyAgFfAwkAAAIJAJEDAgUKbGFzdFdlZWtUeAAACQCkAwEFBHdlZWsJAMwIAgkBC1N0cmluZ0VudHJ5AgULbGFzdFdlZWtLZXkFA3d0eAkAzAgCCQELU3RyaW5nRW50cnkCBQpjdXJXZWVrS2V5BQN3dHgFA25pbAMJAAACCQCRAwIFCmxhc3RXZWVrVHgAAAkApAMBCQBlAgUEd2VlawABCQDMCAIJAQtTdHJpbmdFbnRyeQIFCmN1cldlZWtLZXkFA3d0eAUDbmlsBBFjdXJXZWVrVHhJZEJ5VXNlcgkBEUBleHRyTmF0aXZlKDEwNTgpAQUKY3VyV2Vla0tleQQJY3VyV2Vla1R4CQC1CQIFEWN1cldlZWtUeElkQnlVc2VyAgFfAwkAAAIJAJEDAgUJY3VyV2Vla1R4AAAJAKQDAQUEd2VlawkAzAgCCQELU3RyaW5nRW50cnkCBQpjdXJXZWVrS2V5BQN3dHgFA25pbAkAzAgCCQELU3RyaW5nRW50cnkCBQtsYXN0V2Vla0tleQURY3VyV2Vla1R4SWRCeVVzZXIJAMwIAgkBC1N0cmluZ0VudHJ5AgUKY3VyV2Vla0tleQUDd3R4BQNuaWwJAMwIAgkBC1N0cmluZ0VudHJ5AgULbGFzdFdlZWtLZXkFA3d0eAkAzAgCCQELU3RyaW5nRW50cnkCBQpjdXJXZWVrS2V5BQN3dHgFA25pbAEUY3JlYXRlTmZ0RGVzY3JDdXN0b20IB2NvbnRLZXkJbmZ0U2VyaWFsCmNvbGxlY3Rpb24EbmFtZQVkZXNjcgZyYXJpdHkFYm9udXMJYm9udXNUeXBlCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAiJ7InVybCI6ICJodHRwczovL3dhdmVzbGFuZHMuY29tIiwgAg8iY29udGVudEtleSI6ICIFB2NvbnRLZXkCAyIsIAIKIm51bWJlciI6IAkApAMBBQluZnRTZXJpYWwCAiwgAg8iY29sbGVjdGlvbiI6ICIFCmNvbGxlY3Rpb24CAyIsIAIJIm5hbWUiOiAiBQRuYW1lAgMiLCACECJkZXNjcmlwdGlvbiI6ICIFBWRlc2NyAgMiLCACCSJyYXJlIjogIgUGcmFyaXR5AgMiLCACCSJib251cyI6IAkApAMBBQVib251cwICLCACDiJib251c1R5cGUiOiAiBQlib251c1R5cGUCAiJ9AQ5pc3N1ZU5mdEN1c3RvbQgHbmFtZUlkeApjb250S2V5SWR4B2NvbGxJZHgJcmFyaXR5SWR4CWJvbnVzUGVyYwhkZXNjcklkeAxib251c1R5cGVJZHgEYWRkcgQJbmZ0U2VyaWFsCQELdmFsdWVPckVsc2UCCQCfCAEFEWtleU5mdFRvdGFsSXNzdWVkAAAEBnJhcml0eQkAkQMCBQtyYXJpdHlOYW1lcwUJcmFyaXR5SWR4BARuYW1lCQCsAgIJAKwCAgkArAICCQCRAwIFBW5hbWV6BQduYW1lSWR4AgEtCQCvAgIFBnJhcml0eQABCQCkAwEFCWJvbnVzUGVyYwQFaXNzdWUJAMIIBQUEbmFtZQkBFGNyZWF0ZU5mdERlc2NyQ3VzdG9tCAkAkQMCBQtjb250ZW50S2V5egUKY29udEtleUlkeAUJbmZ0U2VyaWFsCQCRAwIFC2NvbGxlY3Rpb256BQdjb2xsSWR4CQCRAwIFBW5hbWVzBQduYW1lSWR4CQCRAwIFDGRlc2NyaXB0aW9ucwUIZGVzY3JJZHgJAJEDAgULcmFyaXR5TmFtZXMFCXJhcml0eUlkeAUJYm9udXNQZXJjCQCRAwIFCmJvbnVzVHlwZXoFDGJvbnVzVHlwZUlkeAABAAAHBApuZnRBc3NldElkCQC4CAEFBWlzc3VlCQCUCgIJAMwIAgUFaXNzdWUJAMwIAgkBDEludGVnZXJFbnRyeQIFEWtleU5mdFRvdGFsSXNzdWVkCQBkAgUJbmZ0U2VyaWFsAAEJAMwIAgkBDEludGVnZXJFbnRyeQIJARVrZXlOZnROdW1iZXJCeUFzc2V0SWQBCQDYBAEFCm5mdEFzc2V0SWQFCW5mdFNlcmlhbAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQRhZGRyAAEFCm5mdEFzc2V0SWQFA25pbAUKbmZ0QXNzZXRJZAESYm9udXNCeURlc2NyaXB0aW9uAQVkZXNjcgMJAQEhAQkBCGNvbnRhaW5zAgUFZGVzY3ICGCJib251c1R5cGUiOiAiRmFybVBvd2VyIgkAAgEJAKwCAgIWTkZUIGlzIG5vdCBzdXBwb3J0ZWQ6IAUFZGVzY3IECGJvbnVzU3RyCQCRAwIJALwJAgkAkQMCCQC8CQIFBWRlc2NyAggiYm9udXMiOgABAgEsAAAJAQ1wYXJzZUludFZhbHVlAQkAsAICBQhib251c1N0cgkAZAIJAQt2YWx1ZU9yRWxzZQIJALcJAgUIYm9udXNTdHICASAA////////////AQABARZyYXJpdHlJZHhCeURlc2NyaXByaW9uAQVkZXNjcgMJAQEhAQkBCGNvbnRhaW5zAgUFZGVzY3ICBiJyYXJlIgkAAgEJAKwCAgIWTkZUIGlzIG5vdCBzdXBwb3J0ZWQ6IAUFZGVzY3IECXJhcml0eVN0cgkAkQMCCQC8CQIJAJEDAgkAvAkCCQCRAwIJALwJAgUFZGVzY3ICBiJyYXJlIgABAgEsAAACASIAAQkBBXZhbHVlAQkAzwgCBQtyYXJpdHlOYW1lcwUJcmFyaXR5U3RyARlzdGFrZVVuc3Rha2VBY3Jlc0ludGVybmFsAwNhbXQHYWRkcmVzcwpib251c0RlbHRhAwMJAAACBQNhbXQAAAkAAAIFCmJvbnVzRGVsdGEAAAcJAAIBAg1Ob3RoaW5nIHRvIGRvBAl3bGdSZXN1bHQJAPwHBAULd2xnQ29udHJhY3QCEm9uU3Rha2VVbnN0YWtlTGFuZAkAzAgCBQdhZGRyZXNzBQNuaWwFA25pbAMJAAACBQl3bGdSZXN1bHQFCXdsZ1Jlc3VsdAQDbm93CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQHdGltZUtleQkBGGtleUFjcmVzU3Rha2VkVGltZUJ5VXNlcgEFB2FkZHJlc3MECWFtb3VudEtleQkBF2tleUFjcmVzU3Rha2VkQW10QnlVc2VyAQUHYWRkcmVzcwQOb2xkQWNyZXNBbW91bnQJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJYW1vdW50S2V5AAADAwkAZgIAAAUDYW10CQBmAgAACQBkAgUOb2xkQWNyZXNBbW91bnQFA2FtdAcJAAIBCQCsAgIJAKwCAgkArAICAg5Zb3UgaGF2ZSBvbmx5IAkBCmZpeGVkUG9pbnQCBQ5vbGRBY3Jlc0Ftb3VudAAIAiAgQUNSRVMgc3Rha2VkLCB0cmllZCB0byB1bnN0YWtlIAkBCmZpeGVkUG9pbnQCCQEBLQEFA2FtdAAIBA5uZXdBY3Jlc0Ftb3VudAkAZAIFDm9sZEFjcmVzQW1vdW50BQNhbXQECG9sZFRvdGFsCQELdmFsdWVPckVsc2UCCQCfCAEFEmFjcmVzU3Rha2RUb3RhbEtleQAABAl1c2VyRnBLZXkJARVrZXlGYXJtaW5nUG93ZXJCeVVzZXIBBQdhZGRyZXNzBAVvbGRGcAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQl1c2VyRnBLZXkAAAQIYm9udXNLZXkJARBrZXlVc2VyRnVsbEJvbnVzAQUHYWRkcmVzcwQIb2xkQm9udXMJAQt2YWx1ZU9yRWxzZQIJAJoIAgUOYWNyZXMyQ29udHJhY3QFCGJvbnVzS2V5AAADAwkAZgIAAAUKYm9udXNEZWx0YQkAZgIAAAkAZAIFCG9sZEJvbnVzBQpib251c0RlbHRhBwkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgIOWW91IGhhdmUgb25seSAJAQpmaXhlZFBvaW50AgUIb2xkQm9udXMABAIeJSBib251cywgYW5kIHRyaWVkIHRvIHVuc3Rha2UgCQEKZml4ZWRQb2ludAIJAQEtAQUKYm9udXNEZWx0YQAEAgElBAskdDA2NjMxNjczMAkBHmdldEZhcm1pbmdQb3dlckJ5QWNyZXNBbmRCb251cwIFDm5ld0FjcmVzQW1vdW50CQBkAgUIb2xkQm9udXMFCmJvbnVzRGVsdGEEDG5ld0JvbnVzZWRGcAgFCyR0MDY2MzE2NzMwAl8xBAdpZ25vcmVkCAULJHQwNjYzMTY3MzACXzIECm9sZFRvdGFsRnAJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUUdG90YWxGYXJtaW5nUG93ZXJLZXkAAAQMYWNyZXNBY3Rpb25zAwkAAAIFA2FtdAAABQNuaWwJAMwIAgkBDEludGVnZXJFbnRyeQIFCWFtb3VudEtleQUObmV3QWNyZXNBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIFEmFjcmVzU3Rha2RUb3RhbEtleQkAZAIFCG9sZFRvdGFsBQNhbXQFA25pbAQMYm9udXNBY3Rpb25zAwkAAAIFCmJvbnVzRGVsdGEAAAUDbmlsCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQhib251c0tleQkAZAIFCG9sZEJvbnVzBQpib251c0RlbHRhBQNuaWwJAJQKAgkAzQgCCQDNCAIJAM0IAgkAzggCBQxhY3Jlc0FjdGlvbnMFDGJvbnVzQWN0aW9ucwkBDEludGVnZXJFbnRyeQIFB3RpbWVLZXkIBQlsYXN0QmxvY2sJdGltZXN0YW1wCQEMSW50ZWdlckVudHJ5AgUJdXNlckZwS2V5BQxuZXdCb251c2VkRnAJAQxJbnRlZ2VyRW50cnkCBRR0b3RhbEZhcm1pbmdQb3dlcktleQkAZQIJAGQCBQpvbGRUb3RhbEZwBQxuZXdCb251c2VkRnAFBW9sZEZwBQl3bGdSZXN1bHQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BC2dldFdsZ1ByaWNlARV1c2R0QmFsYW5jZUNvcnJlY3Rpb24EDGlzc3VlZEFtb3VudAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFC3dsZ0NvbnRyYWN0BQ93bGdJc3N1ZWRBbXRLZXkCGFdMR09MRCBpcyBub3QgaXNzdWVkIHlldAQGd2xnVXNkCQDwBwIFC3dsZ0NvbnRyYWN0BQt1c2R0QXNzZXRJZAQJYWNyZXMyVXNkCQBlAgkA8AcCBQ5hY3JlczJDb250cmFjdAULdXNkdEFzc2V0SWQFFXVzZHRCYWxhbmNlQ29ycmVjdGlvbgQPaW52ZXN0RnVuZFRvdGFsCQBkAgkA8AcCBRJpbnZlc3RGdW5kQ29udHJhY3QFC3VzZHRBc3NldElkCQELdmFsdWVPckVsc2UCCQCaCAIFEmludmVzdEZ1bmRDb250cmFjdAUOemJJc3N1ZWRBbXRLZXkAAAQNdG90YWxGdW5kc1VzZAkAZAIJAGQCBQlhY3JlczJVc2QFBndsZ1VzZAUPaW52ZXN0RnVuZFRvdGFsCQBrAwUNdG90YWxGdW5kc1VzZAUFTVVMVDgFDGlzc3VlZEFtb3VudAERZ2V0U3dhcExpbWl0QWNyZXMABAZ3bGdVc2QJAPAHAgULd2xnQ29udHJhY3QFC3VzZHRBc3NldElkBAlhY3JlczJVc2QJAPAHAgUEdGhpcwULdXNkdEFzc2V0SWQED2ludmVzdEZ1bmRUb3RhbAkAZAIJAPAHAgUSaW52ZXN0RnVuZENvbnRyYWN0BQt1c2R0QXNzZXRJZAkBC3ZhbHVlT3JFbHNlAgkAmggCBRJpbnZlc3RGdW5kQ29udHJhY3QFDnpiSXNzdWVkQW10S2V5AAAEDGRlZmF1bHRMaW1pdAkAaQIJAGQCCQBkAgUJYWNyZXMyVXNkBQZ3bGdVc2QFD2ludmVzdEZ1bmRUb3RhbAUTT05FX1BFUkNFTlRfRElWSVNPUgQNbGFzdExpbWl0TGVmdAkBC3ZhbHVlT3JFbHNlAgkAnwgBBRBrZXlMYXN0TGltaXRMZWZ0BQxkZWZhdWx0TGltaXQECGxhc3RUaW1lCQELdmFsdWVPckVsc2UCCQCfCAEFFGtleUxhc3RBY3Jlc1NlbGxUaW1lAAAEA25vdwgFCWxhc3RCbG9jawl0aW1lc3RhbXAEDGN1cnJlbnRMaW1pdAkAZAIFDWxhc3RMaW1pdExlZnQJAGsDBQxkZWZhdWx0TGltaXQJAGUCBQNub3cFCGxhc3RUaW1lBQpEQVlfTUlMTElTBA1saW1pdExlZnRVc2R0CQCXAwEJAMwIAgUMY3VycmVudExpbWl0CQDMCAIFDGRlZmF1bHRMaW1pdAUDbmlsCQCUCgIJAQxJbnRlZ2VyRW50cnkCBRRrZXlMYXN0QWNyZXNTZWxsVGltZQUDbm93BQ1saW1pdExlZnRVc2R0AAlhcmtPcmFjbGUJARFAZXh0ck5hdGl2ZSgxMDYyKQECIzNQSmdaNkFLMVdWQ3BkQ21FWnBlc0htYUt2clFEZFhHNW9nAAlpbmN1YmF0b3IJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUJYXJrT3JhY2xlAhdzdGF0aWNfaW5jdWJhdG9yQWRkcmVzcwIAAAdicmVlZGVyCQELdmFsdWVPckVsc2UCCQCdCAIFCWFya09yYWNsZQIVc3RhdGljX2JyZWVkZXJBZGRyZXNzAgAAD3R1cnRsZUluY3ViYXRvcgkBC3ZhbHVlT3JFbHNlAgkAnQgCBQlhcmtPcmFjbGUCHXN0YXRpY190dXJ0bGVJbmN1YmF0b3JBZGRyZXNzAgAADXR1cnRsZUJyZWVkZXIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUJYXJrT3JhY2xlAhtzdGF0aWNfdHVydGxlQnJlZWRlckFkZHJlc3MCAAAPY2FuaW5lSW5jdWJhdG9yCQELdmFsdWVPckVsc2UCCQCdCAIFCWFya09yYWNsZQIdc3RhdGljX2NhbmluZUluY3ViYXRvckFkZHJlc3MCAAANY2FuaW5lQnJlZWRlcgkBC3ZhbHVlT3JFbHNlAgkAnQgCBQlhcmtPcmFjbGUCG3N0YXRpY19jYW5pbmVCcmVlZGVyQWRkcmVzcwIAAA9mZWxpbmVJbmN1YmF0b3IJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUJYXJrT3JhY2xlAh1zdGF0aWNfZmVsaW5lSW5jdWJhdG9yQWRkcmVzcwIAAA1mZWxpbmVCcmVlZGVyCQELdmFsdWVPckVsc2UCCQCdCAIFCWFya09yYWNsZQIbc3RhdGljX2ZlbGluZUJyZWVkZXJBZGRyZXNzAgAADW11dGFudEJyZWVkZXIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUJYXJrT3JhY2xlAh1zdGF0aWNfbXV0YW50SW5jdWJhdG9yQWRkcmVzcwIAAQ9pc0Fya2ltYWxJc3N1ZWQBA25mbwQGaXNzdWVyCQClCAEIBQNuZm8GaXNzdWVyAwMDAwMDAwMDAwkAAAIFBWNoYWluAQFUCQAAAgUGaXNzdWVyBRVvbGRTdGFraW5nQ29udHJhY3RTdHIHBgkAAAIFBmlzc3VlcgUJaW5jdWJhdG9yBgkAAAIFBmlzc3VlcgUHYnJlZWRlcgYJAAACBQZpc3N1ZXIFD3R1cnRsZUluY3ViYXRvcgYJAAACBQZpc3N1ZXIFDXR1cnRsZUJyZWVkZXIGCQAAAgUGaXNzdWVyBQ9jYW5pbmVJbmN1YmF0b3IGCQAAAgUGaXNzdWVyBQ1jYW5pbmVCcmVlZGVyBgkAAAIFBmlzc3VlcgUPZmVsaW5lSW5jdWJhdG9yBgkAAAIFBmlzc3VlcgUNZmVsaW5lQnJlZWRlcggFA25mbwRuYW1lAwkAAAIFBmlzc3VlcgUNbXV0YW50QnJlZWRlcggFA25mbwtkZXNjcmlwdGlvbgIAARBzdGFrZU5mdEludGVybmFsBgRhZGRyCmFzc2V0SWRTdHIGYm9udXM2CnVzZXJOdW1LZXkLdG90YWxOdW1LZXkFbGltaXQECW5mdE51bWJlcgkBC3ZhbHVlT3JFbHNlAgkAnwgBBQp1c2VyTnVtS2V5AAADCQBnAgUJbmZ0TnVtYmVyBQVsaW1pdAkAAgEJAKwCAgkArAICAhJZb3UgY2FuIHN0YWtlIG1heCAJAKQDAQUFbGltaXQCDSBvZiBzdWNoIE5GVHMEDSR0MDExMDA5MTEwODUJARlzdGFrZVVuc3Rha2VBY3Jlc0ludGVybmFsAwAABQRhZGRyBQZib251czYEB2FjdGlvbnMIBQ0kdDAxMTAwOTExMDg1Al8xBBB3bGdDbGFpbWVkQW1vdW50CAUNJHQwMTEwMDkxMTA4NQJfMgkAlAoCCQDNCAIJAM0IAgkAzQgCBQdhY3Rpb25zCQEMSW50ZWdlckVudHJ5AgUKdXNlck51bUtleQkAZAIFCW5mdE51bWJlcgABCQEMSW50ZWdlckVudHJ5AgULdG90YWxOdW1LZXkJAGQCCQELdmFsdWVPckVsc2UCCQCfCAEFC3RvdGFsTnVtS2V5AAAAAQkBDEludGVnZXJFbnRyeQIJAR5rZXlTdGFrZWRUaW1lQnlBc3NldElkQW5kT3duZXICBQphc3NldElkU3RyBQRhZGRyCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUQd2xnQ2xhaW1lZEFtb3VudAEVc3Rha2VBY3Jlc0ZvckludGVybmFsAwdhZGRyZXNzA2FtdBBzaG91bGRDbGVhblByb21vBA0kdDAxMTQyMDExNDk2CQEZc3Rha2VVbnN0YWtlQWNyZXNJbnRlcm5hbAMFA2FtdAUHYWRkcmVzcwAABAdhY3Rpb25zCAUNJHQwMTE0MjAxMTQ5NgJfMQQQd2xnQ2xhaW1lZEFtb3VudAgFDSR0MDExNDIwMTE0OTYCXzIEDHByb21vQWN0aW9ucwMDCQBnAgUGaGVpZ2h0BRdEQUlMWV9QUk9NT19TVEFSVF9CTE9DSwkAZgIFFURBSUxZX1BST01PX0VORF9CTE9DSwUGaGVpZ2h0BwQNcHJvbW9BY3Jlc0tleQkBEWtleVVzZXJQcm9tb0FjcmVzAQUHYWRkcmVzcwQKcHJvbW9BY3JlcwkAZAIDBRBzaG91bGRDbGVhblByb21vAAAJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUNcHJvbW9BY3Jlc0tleQAABQNhbXQEB3RpY2tldHMJAGkCBQpwcm9tb0FjcmVzBQVNVUxUOAQKdGlja2V0c0tleQkBE2tleVVzZXJQcm9tb1RpY2tldHMBBQdhZGRyZXNzBAxkZWx0YVRpY2tldHMJAGUCBQd0aWNrZXRzCQELdmFsdWVPckVsc2UCCQCfCAEFCnRpY2tldHNLZXkAAAQMdG90YWxUaWNrZXRzCQBkAgkBC3ZhbHVlT3JFbHNlAgkAnwgBBRRrZXlUb3RhbFByb21vVGlja2V0cwAABQxkZWx0YVRpY2tldHMDAwUQc2hvdWxkQ2xlYW5Qcm9tbwYJAGYCBQxkZWx0YVRpY2tldHMAAAQIcHJvbW9NYXAJAQt2YWx1ZU9yRWxzZQIJAKIIAQULa2V5UHJvbW9NYXACAAQKdXNlclJlY29yZAkArAICCQCsAgIFB2FkZHJlc3MCAToJAQRwYWRMAgUHdGlja2V0cwADBAZuZXdNYXADCQEIY29udGFpbnMCBQhwcm9tb01hcAUHYWRkcmVzcwQIbWFwUGFydHMJAL0JAgUIcHJvbW9NYXAFB2FkZHJlc3MDCQAAAgkAkQMCBQhtYXBQYXJ0cwAAAgAEAXIJALACAgkAkQMCBQhtYXBQYXJ0cwABAAQDCQAAAgUBcgIAAwkAAAIFB3RpY2tldHMAAAIABQp1c2VyUmVjb3JkAwkAAAIFB3RpY2tldHMAAAkAsAICBQFyAAEJAKwCAgUKdXNlclJlY29yZAUBcgQBcgkAsAICCQCRAwIFCG1hcFBhcnRzAAEABAMJAAACBQFyAgADCQAAAgUHdGlja2V0cwAACQCzAgIJAJEDAgUIbWFwUGFydHMAAAABCQCsAgIJAJEDAgUIbWFwUGFydHMAAAUKdXNlclJlY29yZAMJAAACBQd0aWNrZXRzAAAJAKwCAgkAkQMCBQhtYXBQYXJ0cwAACQCwAgIFAXIAAQkArAICCQCsAgIJAJEDAgUIbWFwUGFydHMAAAUKdXNlclJlY29yZAUBcgMJAAACBQd0aWNrZXRzAAAFCHByb21vTWFwAwkAAAIFCHByb21vTWFwAgAFCnVzZXJSZWNvcmQJAKwCAgkArAICBQhwcm9tb01hcAIBXwUKdXNlclJlY29yZAkAzAgCCQEMSW50ZWdlckVudHJ5AgUNcHJvbW9BY3Jlc0tleQUKcHJvbW9BY3JlcwkAzAgCCQEMSW50ZWdlckVudHJ5AgUKdGlja2V0c0tleQUHdGlja2V0cwkAzAgCCQEMSW50ZWdlckVudHJ5AgUUa2V5VG90YWxQcm9tb1RpY2tldHMFDHRvdGFsVGlja2V0cwkAzAgCCQELU3RyaW5nRW50cnkCBQtrZXlQcm9tb01hcAUGbmV3TWFwBQNuaWwJAMwIAgkBDEludGVnZXJFbnRyeQIFDXByb21vQWNyZXNLZXkFCnByb21vQWNyZXMFA25pbAUDbmlsCQCUCgIJAM4IAgUHYWN0aW9ucwUMcHJvbW9BY3Rpb25zBRB3bGdDbGFpbWVkQW1vdW50FgFpAQpzYXZlTGFzdFR4AAMJAQEhAQkBD2NvbnRhaW5zRWxlbWVudAIJAMwIAgULd2xnQ29udHJhY3QJAMwIAgUObWFya2V0Q29udHJhY3QFA25pbAgFAWkGY2FsbGVyCQACAQINQWNjZXNzIGRlbmllZAkAlAoCCQEGcHJvbG9nAQUBaQAqAWkBDWNvbnN0cnVjdG9yVjECCXJlc3QyQWRkcg5vbGRBY3JDb250cmFjdAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECEVBlcm1pc3Npb24gZGVuaWVkBA5vbGRBY3JDb250QWRkcgkBEUBleHRyTmF0aXZlKDEwNjIpAQUOb2xkQWNyQ29udHJhY3QJAMwIAgkBDEludGVnZXJFbnRyeQIFFGFjcmVzSXNzdWVkQW1vdW50S2V5CQERQGV4dHJOYXRpdmUoMTA1MCkCBQ5vbGRBY3JDb250QWRkcgUUYWNyZXNJc3N1ZWRBbW91bnRLZXkJAMwIAgkBC0JpbmFyeUVudHJ5AgUPYWNyZXNBc3NldElkS2V5CQERQGV4dHJOYXRpdmUoMTA1MikCBQ5vbGRBY3JDb250QWRkcgUPYWNyZXNBc3NldElkS2V5CQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ9rZXlSZXN0MkFkZHJlc3MABQlyZXN0MkFkZHIJAMwIAgkBC1N0cmluZ0VudHJ5AgUTb2xkQWNyZXNDb250cmFjdEtleQUOb2xkQWNyQ29udHJhY3QFA25pbAFpAQpzZXRCbG9ja2VkAQlpc0Jsb2NrZWQDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAhFwZXJtaXNzaW9uIGRlbmllZAkAzAgCCQEMQm9vbGVhbkVudHJ5AgkBCmtleUJsb2NrZWQABQlpc0Jsb2NrZWQFA25pbAFpAQx1bnN0YWtlQWNyZXMBBmFtb3VudAQNcHJvbG9nQWN0aW9ucwkBBnByb2xvZwEFAWkDAwkAZwIFBmhlaWdodAUXREFJTFlfUFJPTU9fU1RBUlRfQkxPQ0sJAGYCBRVEQUlMWV9QUk9NT19FTkRfQkxPQ0sFBmhlaWdodAcJAAIBAipZb3UgY2FuJ3QgdW5zdGFrZSBkdXJpbmcgWG1hcyBwcm9tbyBwZXJpb2QDCQBnAgAABQZhbW91bnQJAAIBAhlBbW91bnQgc2hvdWxkIGJlIHBvc2l0aXZlBAdhZGRyZXNzCQClCAEIBQFpBmNhbGxlcgMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBA5hcmJSZWxlYXNlVGltZQkAZAIJAQt2YWx1ZU9yRWxzZQIJAJoIAgULd2xnQ29udHJhY3QJARlrZXlMYXN0V2xnVHJhZGVUaW1lQnlVc2VyAQUHYWRkcmVzcwAABQ5hcmJpdHJhZ2VEZWxheQMJAGYCBQ5hcmJSZWxlYXNlVGltZQgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAAIBCQCsAgICLVlvdSB0cmFkZWQgc29tZSBXTEdPTEQsIGNhbm5vdCB1bnN0YWtlIHVudGlsIAkApAMBBQ5hcmJSZWxlYXNlVGltZQQNJHQwMTU0OTkxNTU3OQkBGXN0YWtlVW5zdGFrZUFjcmVzSW50ZXJuYWwDCQEBLQEFBmFtb3VudAUHYWRkcmVzcwAABAdhY3Rpb25zCAUNJHQwMTU0OTkxNTU3OQJfMQQQd2xnQ2xhaW1lZEFtb3VudAgFDSR0MDE1NDk5MTU1NzkCXzIJAJQKAgkAzggCCQDNCAIFB2FjdGlvbnMJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgUGYW1vdW50BQxhY3Jlc0Fzc2V0SWQFDXByb2xvZ0FjdGlvbnMFEHdsZ0NsYWltZWRBbW91bnQBaQEKc3Rha2VBY3JlcwAEDXByb2xvZ0FjdGlvbnMJAQZwcm9sb2cBBQFpBAdhZGRyZXNzCQClCAEIBQFpBmNhbGxlcgMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECImV4YWN0bHkgMSBwYXltZW50IG11c3QgYmUgYXR0YWNoZWQEA3BtdAkAkQMCCAUBaQhwYXltZW50cwAABANhbXQIBQNwbXQGYW1vdW50AwMJAQEhAQkBCWlzRGVmaW5lZAEIBQNwbXQHYXNzZXRJZAYJAQIhPQIJAQV2YWx1ZQEIBQNwbXQHYXNzZXRJZAUMYWNyZXNBc3NldElkCQACAQIUQUNSRVMgcGF5bWVudHMgb25seSEEDSR0MDE2MDMwMTYxMTEJARVzdGFrZUFjcmVzRm9ySW50ZXJuYWwDBQdhZGRyZXNzBQNhbXQHBAxzdGFrZUFjdGlvbnMIBQ0kdDAxNjAzMDE2MTExAl8xBBB3bGdDbGFpbWVkQW1vdW50CAUNJHQwMTYwMzAxNjExMQJfMgkAlAoCCQDOCAIFDHN0YWtlQWN0aW9ucwUNcHJvbG9nQWN0aW9ucwUQd2xnQ2xhaW1lZEFtb3VudAFpAQ1zdGFrZUFjcmVzRm9yAwdhZGRyZXNzA2FtdBBzaG91bGRDbGVhblByb21vAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIRUGVybWlzc2lvbiBkZW5pZWQJARVzdGFrZUFjcmVzRm9ySW50ZXJuYWwDBQdhZGRyZXNzBQNhbXQFEHNob3VsZENsZWFuUHJvbW8BaQEIYnV5QWNyZXMABA1wcm9sb2dBY3Rpb25zCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECImV4YWN0bHkgMSBwYXltZW50IG11c3QgYmUgYXR0YWNoZWQEA3BtdAkAkQMCCAUBaQhwYXltZW50cwAABAp1c2R0QW1vdW50CAUDcG10BmFtb3VudAMDCQEBIQEJAQlpc0RlZmluZWQBCAUDcG10B2Fzc2V0SWQGCQECIT0CCQEFdmFsdWUBCAUDcG10B2Fzc2V0SWQFC3VzZHRBc3NldElkCQACAQITVVNEVCBwYXltZW50cyBvbmx5IQMJAGYCBQVNVUxUNgUKdXNkdEFtb3VudAkAAgEJAKwCAgkArAICAhZNaW4gcGF5bWVudCBzaG91bGQgYmUgCQEKZml4ZWRQb2ludAIFBU1VTFQ2AAYCBSBVU0RUBAthY3Jlc0Ftb3VudAkAaAIFCnVzZHRBbW91bnQFFVVTRFQyQUNSRVNfTVVMVElQTElFUgQJd2xnQW1vdW50CQBrAwUKdXNkdEFtb3VudAUFTVVMVDgJAQtnZXRXbGdQcmljZQEFCnVzZHRBbW91bnQED29sZEFjcmVzQWRkcmVzcwkBEUBleHRyTmF0aXZlKDEwNjIpAQkBEUBleHRyTmF0aXZlKDEwNTgpAQUTb2xkQWNyZXNDb250cmFjdEtleQQDcmVxCQD8BwQFD29sZEFjcmVzQWRkcmVzcwIUcmVxdWVzdEFjcmVzQ2FsbGJhY2sJAMwIAgULYWNyZXNBbW91bnQFA25pbAUDbmlsAwkAAAIFA3JlcQUDcmVxBAl3bGdSZW1haW4JAQVhc0ludAEJAPwHBAULd2xnQ29udHJhY3QCCmJ1cm5XbGdvbGQJAMwIAgUJd2xnQW1vdW50BQNuaWwFA25pbAkAlAoCCQDOCAIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQthY3Jlc0Ftb3VudAUMYWNyZXNBc3NldElkBQNuaWwFDXByb2xvZ0FjdGlvbnMFCXdsZ1JlbWFpbgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARBidXlBY3Jlc1JFQURPTkxZAQp1c2R0QW1vdW50BAthY3Jlc0Ftb3VudAkAaAIFCnVzZHRBbW91bnQFFVVTRFQyQUNSRVNfTVVMVElQTElFUgQJd2xnVG9CdXJuCQBrAwUKdXNkdEFtb3VudAUFTVVMVDgJAQtnZXRXbGdQcmljZQEFCnVzZHRBbW91bnQJAJQKAgUDbmlsCQDMCAIFC2FjcmVzQW1vdW50CQDMCAIFBU1VTFQ2CQDMCAIFC2FjcmVzQW1vdW50CQDMCAIFCXdsZ1RvQnVybgUDbmlsAWkBCXNlbGxBY3JlcwAEDXByb2xvZ0FjdGlvbnMJAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIiZXhhY3RseSAxIHBheW1lbnQgbXVzdCBiZSBhdHRhY2hlZAQDcG10CQCRAwIIBQFpCHBheW1lbnRzAAAEC2FjcmVzQW1vdW50CAUDcG10BmFtb3VudAMDCQEBIQEJAQlpc0RlZmluZWQBCAUDcG10B2Fzc2V0SWQGCQECIT0CCQEFdmFsdWUBCAUDcG10B2Fzc2V0SWQFDGFjcmVzQXNzZXRJZAkAAgECFEFDUkVTIHBheW1lbnRzIG9ubHkhAwkAZgIFBU1VTFQ3BQthY3Jlc0Ftb3VudAkAAgEJAKwCAgkArAICAhZNaW4gcGF5bWVudCBzaG91bGQgYmUgCQEKZml4ZWRQb2ludAIFBU1VTFQ3AAgCBiBBQ1JFUwQEYWRkcgkApQgBCAUBaQZjYWxsZXIEDSR0MDE4MTgzMTgyMzEJARFnZXRTd2FwTGltaXRBY3JlcwAEC2xpbWl0QWN0aW9uCAUNJHQwMTgxODMxODIzMQJfMQQHbWF4VXNkdAgFDSR0MDE4MTgzMTgyMzECXzIECG1heEFjcmVzCQBoAgUHbWF4VXNkdAUVVVNEVDJBQ1JFU19NVUxUSVBMSUVSAwkAZgIFC2FjcmVzQW1vdW50BQhtYXhBY3JlcwkAAgEJAKwCAgkArAICAhFZb3UgY2FuIHNlbGwgbWF4IAkBCmZpeGVkUG9pbnQCBQhtYXhBY3JlcwAIAgYgQUNSRVMECnVzZHRBbW91bnQJAGkCCQBpAgULYWNyZXNBbW91bnQFFVVTRFQyQUNSRVNfTVVMVElQTElFUgACCQCUCgIJAM4IAgkAzAgCBQtsaW1pdEFjdGlvbgkAzAgCCQEMSW50ZWdlckVudHJ5AgUQa2V5TGFzdExpbWl0TGVmdAkAZQIFB21heFVzZHQFCnVzZHRBbW91bnQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQp1c2R0QW1vdW50BQt1c2R0QXNzZXRJZAUDbmlsBQ1wcm9sb2dBY3Rpb25zBQp1c2R0QW1vdW50AWkBEXNlbGxBY3Jlc1JFQURPTkxZAgdhZGRyZXNzC2FjcmVzQW1vdW50BA0kdDAxODcyNzE4Nzc1CQERZ2V0U3dhcExpbWl0QWNyZXMABAtsaW1pdEFjdGlvbggFDSR0MDE4NzI3MTg3NzUCXzEEB21heFVzZHQIBQ0kdDAxODcyNzE4Nzc1Al8yBAp1c2R0QW1vdW50CQBpAgkAaQIFC2FjcmVzQW1vdW50BRVVU0RUMkFDUkVTX01VTFRJUExJRVIAAgkAlAoCBQNuaWwJAMwIAgUKdXNkdEFtb3VudAkAzAgCBQVNVUxUNwkAzAgCCQBoAgUHbWF4VXNkdAUVVVNEVDJBQ1JFU19NVUxUSVBMSUVSCQDMCAIAAAUDbmlsAWkBEGNvbnZlcnRPbGRTdGFrZXMABA1wcm9sb2dBY3Rpb25zCQEGcHJvbG9nAQUBaQMJAGYCBRFPTERfU1RBS0lOR19ERUFETAgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAAIBCQCsAgICD0Rpc2FibGVkIHVudGlsIAkApAMBCQBpAgURT0xEX1NUQUtJTkdfREVBREwA6AcEB2FkZHJlc3MJAKUIAQgFAWkGY2FsbGVyAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQED29sZEFjcmVzQWRkcmVzcwkBEUBleHRyTmF0aXZlKDEwNjIpAQkBEUBleHRyTmF0aXZlKDEwNTgpAQUTb2xkQWNyZXNDb250cmFjdEtleQQGYW1vdW50CQELdmFsdWVPckVsc2UCCQCaCAIFD29sZEFjcmVzQWRkcmVzcwkBF2tleUFjcmVzU3Rha2VkQW10QnlVc2VyAQUHYWRkcmVzcwAABAlnb3RBY3JlczADCQBmAgUGYW1vdW50AAAJAQxhc1R1cGxlMkludHMBCQD8BwQFD29sZEFjcmVzQWRkcmVzcwIUdW5zdGFrZUFjcmVzQ2FsbGJhY2sJAMwIAgUGYW1vdW50CQDMCAIFB2FkZHJlc3MFA25pbAUDbmlsCQCUCgIAAAAABBFvbGRTdGFraW5nQWRkcmVzcwkBEUBleHRyTmF0aXZlKDEwNjIpAQUVb2xkU3Rha2luZ0NvbnRyYWN0U3RyBAhsYW5kc1N0cgkAnQgCBRFvbGRTdGFraW5nQWRkcmVzcwkBFWtleVN0YWtlZExhbmRzQnlPd25lcgEFB2FkZHJlc3MEC2xhbmRzUmVzdWx0AwkBCWlzRGVmaW5lZAEFCGxhbmRzU3RyBAVsYW5kcwkAvQkCCQEFdmFsdWUBBQhsYW5kc1N0cgIBXwMJAGYCCQCQAwEFBWxhbmRzBRRNQVhfTEFORFNfVE9fQ09OVkVSVAkAAgEJAKwCAgkArAICAhNZb3UgaGF2ZSBtb3JlIHRoYW4gCQCkAwEFFE1BWF9MQU5EU19UT19DT05WRVJUAkcgbGFuZHMgc3Rha2VkLCBwbGVhc2UgY29udGFjdCBzdXBwb3J0LCB3ZSdsbCBwcm9jZXNzIHlvdXIgY2FzZSBtYW51YWxseQoBB29uZUxhbmQCA2FjYwtsYW5kQXNzZXRJZAMJAAACBQtsYW5kQXNzZXRJZAIACQACAQIXbGFuZEFzc2V0SWQgaXMgcmVxdWlyZWQEAXIJAQxhc1R1cGxlNUludHMBCQD8BwQFEW9sZFN0YWtpbmdBZGRyZXNzAhN1bnN0YWtlTGFuZENhbGxiYWNrCQDMCAIFC2xhbmRBc3NldElkCQDMCAIFB2FkZHJlc3MFA25pbAUDbmlsAwkAAAIFAXIFAXIJAJcKBQkAZAIIBQNhY2MCXzEIBQFyAl8xCQBkAggFA2FjYwJfMggFAXICXzIJAGQCCAUDYWNjAl8zCAUBcgJfMwkAZAIIBQNhY2MCXzQIBQFyAl80CQBkAggFA2FjYwJfNQgFAXICXzUJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4EAnJyCgACJGwFBWxhbmRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlwoFAAAAAAAAAAAAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEHb25lTGFuZAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTQJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAwkAAAIFAnJyBQJycgQIZmluYWxpemUJAPwHBAURb2xkU3Rha2luZ0FkZHJlc3MCHHVuc3Rha2VMYW5kc0ZpbmFsaXplQ2FsbGJhY2sJAMwIAgUHYWRkcmVzcwUDbmlsBQNuaWwDCQAAAgUIZmluYWxpemUFCGZpbmFsaXplBANyZXEJAPwHBAUPb2xkQWNyZXNBZGRyZXNzAhRyZXF1ZXN0QWNyZXNDYWxsYmFjawkAzAgCCQBkAgkAZAIJAGQCCAUCcnICXzEIBQJycgJfMggFAnJyAl8zCAUCcnICXzQFA25pbAUDbmlsAwkAAAIFA3JlcQUDcmVxBA0kdDAyMTI4OTIxNDI4CQEOaXNzdWVOZnRDdXN0b20IBQ1pZHhOYW1lU2hvdmVsBQhpZHhLZXlTUAUKaWR4Q29sbERpZwUKaWR4UmFyaXR5UAADBQ5pZHhEZXNjclNob3ZlbAUOaWR4Qm9udXNUeXBlRnAIBQFpBmNhbGxlcgQKbmZ0QWN0aW9ucwgFDSR0MDIxMjg5MjE0MjgCXzEECm5mdEFzc2V0SWQIBQ0kdDAyMTI4OTIxNDI4Al8yCQCYCgYIBQJycgJfMQgFAnJyAl8yCAUCcnICXzMIBQJycgJfNAgFAnJyAl81BQpuZnRBY3Rpb25zCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQCYCgYAAAAAAAAAAAAABQNuaWwEC2R1Y2tBc3NldElkCQELdmFsdWVPckVsc2UCCQCdCAIFEW9sZFN0YWtpbmdBZGRyZXNzCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQdhZGRyZXNzAgAECmR1Y2tSZXN1bHQDCQECIT0CBQtkdWNrQXNzZXRJZAIACQEMYXNUdXBsZTNJbnRzAQkA/AcEBRFvbGRTdGFraW5nQWRkcmVzcwITdW5zdGFrZUR1Y2tDYWxsYmFjawkAzAgCBQtkdWNrQXNzZXRJZAkAzAgCBQdhZGRyZXNzBQNuaWwFA25pbAkAlQoDAAAAAAAABAF4CQEZc3Rha2VVbnN0YWtlQWNyZXNJbnRlcm5hbAMJAGQCCQBkAgkAZAIJAGQCCQBkAgkAZAIJAGQCCAUJZ290QWNyZXMwAl8xCAULbGFuZHNSZXN1bHQCXzEIBQtsYW5kc1Jlc3VsdAJfMggFC2xhbmRzUmVzdWx0Al8zCAULbGFuZHNSZXN1bHQCXzQIBQpkdWNrUmVzdWx0Al8xCAUKZHVja1Jlc3VsdAJfMggFCmR1Y2tSZXN1bHQCXzMFB2FkZHJlc3MAAAkAlAoCCQDOCAIJAM4IAggFC2xhbmRzUmVzdWx0Al82CAUBeAJfMQUNcHJvbG9nQWN0aW9ucwkAlQoDCAUJZ290QWNyZXMwAl8yCAULbGFuZHNSZXN1bHQCXzUIBQF4Al8yAWkBFHVuc3Rha2VMYW5kc1JFQURPTkxZAQdhZGRyZXNzBBFvbGRTdGFraW5nQWRkcmVzcwkBEUBleHRyTmF0aXZlKDEwNjIpAQUVb2xkU3Rha2luZ0NvbnRyYWN0U3RyBAhsYW5kc1N0cgkAnQgCBRFvbGRTdGFraW5nQWRkcmVzcwkBFWtleVN0YWtlZExhbmRzQnlPd25lcgEFB2FkZHJlc3MEC2xhbmRzUmVzdWx0AwkBCWlzRGVmaW5lZAEFCGxhbmRzU3RyBAVsYW5kcwkAvQkCCQEFdmFsdWUBBQhsYW5kc1N0cgIBXwoBB29uZUxhbmQCA2FjYwtsYW5kQXNzZXRJZAMJAAACBQtsYW5kQXNzZXRJZAIACQACAQIXbGFuZEFzc2V0SWQgaXMgcmVxdWlyZWQEAXIJAQxhc1R1cGxlNEludHMBCQD8BwQFEW9sZFN0YWtpbmdBZGRyZXNzAhN1bnN0YWtlTGFuZFJFQURPTkxZCQDMCAIFC2xhbmRBc3NldElkCQDMCAIFB2FkZHJlc3MFA25pbAUDbmlsCQCWCgQJAGQCCAUDYWNjAl8xCAUBcgJfMQkAZAIIBQNhY2MCXzIIBQFyAl8yCQBkAggFA2FjYwJfMwgFAXICXzMJAGQCCAUDYWNjAl80CAUBcgJfNAoAAiRsBQVsYW5kcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJYKBAAAAAAAAAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQdvbmVMYW5kAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhVMaXN0IHNpemUgZXhjZWVkcyAxMDAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUABUAFgAXABgAGQAaABsAHAAdAB4AHwAgACEAIgAjACQAJQAmACcAKAApACoAKwAsAC0ALgAvADAAMQAyADMANAA1ADYANwA4ADkAOgA7ADwAPQA+AD8AQABBAEIAQwBEAEUARgBHAEgASQBKAEsATABNAE4ATwBQAFEAUgBTAFQAVQBWAFcAWABZAFoAWwBcAF0AXgBfAGAAYQBiAGMAZAkAlgoEAAAAAAAAAAAJAJQKAgUDbmlsBQtsYW5kc1Jlc3VsdAFpARJzdGFrZUFjcmVzQ2FsbGJhY2sBBGFkZHIDCQECIT0CCAUBaQZjYWxsZXIJARFAZXh0ck5hdGl2ZSgxMDYyKQEFFW9sZFN0YWtpbmdDb250cmFjdFN0cgkAAgECEVBlcm1pc3Npb24gZGVuaWVkCQEZc3Rha2VVbnN0YWtlQWNyZXNJbnRlcm5hbAMICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BQRhZGRyAAABaQEac2ltdWxhdGVTdGFrZUFjcmVzUkVBRE9OTFkCB2FkZHJlc3MLYWRkZWRBbW91bnQECWFtb3VudEtleQkBF2tleUFjcmVzU3Rha2VkQW10QnlVc2VyAQUHYWRkcmVzcwQObmV3QWNyZXNBbW91bnQJAGQCCQELdmFsdWVPckVsc2UCCQCfCAEFCWFtb3VudEtleQAABQthZGRlZEFtb3VudAQIb2xkVG90YWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUSYWNyZXNTdGFrZFRvdGFsS2V5AAAECXVzZXJGcEtleQkBFWtleUZhcm1pbmdQb3dlckJ5VXNlcgEFB2FkZHJlc3MEBW9sZEZwCQELdmFsdWVPckVsc2UCCQCfCAEFCXVzZXJGcEtleQAABAl1c2VyQm9udXMJAQt2YWx1ZU9yRWxzZQIJAJoIAgUOYWNyZXMyQ29udHJhY3QJARBrZXlVc2VyRnVsbEJvbnVzAQUHYWRkcmVzcwAABA0kdDAyMzY5OTIzNzg2CQEeZ2V0RmFybWluZ1Bvd2VyQnlBY3Jlc0FuZEJvbnVzAgUObmV3QWNyZXNBbW91bnQFCXVzZXJCb251cwQMbmV3Qm9udXNlZEZwCAUNJHQwMjM2OTkyMzc4NgJfMQQHaWdub3JlZAgFDSR0MDIzNjk5MjM3ODYCXzIECm9sZFRvdGFsRnAJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUUdG90YWxGYXJtaW5nUG93ZXJLZXkAAAQKbmV3VG90YWxGcAkAZQIJAGQCBQpvbGRUb3RhbEZwBQxuZXdCb251c2VkRnAFBW9sZEZwCQCUCgIFA25pbAkAzAgCBQVvbGRGcAkAzAgCBQxuZXdCb251c2VkRnAJAMwIAgUKb2xkVG90YWxGcAkAzAgCBQpuZXdUb3RhbEZwBQNuaWwBaQELaXNzdWVQaWNrQzEBCmZvckFkZHJlc3MDCQECIT0CCAUBaQZjYWxsZXIFC3dsZ0NvbnRyYWN0CQACAQIRUGVybWlzc2lvbiBkZW5pZWQJAQ5pc3N1ZU5mdEN1c3RvbQgFDmlkeE5hbWVQaWNrYXhlBQdpZHhLZXlDBQppZHhDb2xsRGlnBQppZHhSYXJpdHlDAAEFD2lkeERlc2NyUGlja2F4ZQUOaWR4Qm9udXNUeXBlRnAJARFAZXh0ck5hdGl2ZSgxMDYyKQEFCmZvckFkZHJlc3MBaQEMaXNzdWVNaXR0ZW5QAQpmb3JBZGRyZXNzAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIRUGVybWlzc2lvbiBkZW5pZWQJAQ5pc3N1ZU5mdEN1c3RvbQgFDWlkeE5hbWVNaXR0ZW4FCGlkeEtleU1QBQ5pZHhDb2xsTmV3WWVhcgUKaWR4UmFyaXR5UAADBQ5pZHhEZXNjck1pdHRlbgUOaWR4Qm9udXNUeXBlRnAJARFAZXh0ck5hdGl2ZSgxMDYyKQEFCmZvckFkZHJlc3MBaQEIc3Rha2VORlQABA1wcm9sb2dBY3Rpb25zCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECHEV4YWN0bHkgb25lIHBheW1lbnQgcmVxdWlyZWQEA3BtdAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAAAwkBAiE9AggFA3BtdAZhbW91bnQAAQkAAgECJ05GVCB0b2tlbiBzaG91bGQgYmUgYXR0YWNoZWQgYXMgcGF5bWVudAQHYXNzZXRJZAkBBXZhbHVlAQgFA3BtdAdhc3NldElkBAVhc3NldAkBBXZhbHVlAQkA7AcBBQdhc3NldElkBAphc3NldElkU3RyCQDYBAEFB2Fzc2V0SWQEBGFkZHIJAKUIAQgFAWkGY2FsbGVyBAduZnRzS2V5CQEUa2V5U3Rha2VkTkZUc0J5T3duZXIBBQRhZGRyBAduZnRzU3RyCQCiCAEFB25mdHNLZXkEBG5mdHMDCQEJaXNEZWZpbmVkAQUHbmZ0c1N0cgkAvAkCCQEFdmFsdWUBBQduZnRzU3RyAgFfBQNuaWwDCQEPY29udGFpbnNFbGVtZW50AgUEbmZ0cwUKYXNzZXRJZFN0cgkAAgEJAKwCAgIhWW91ciBzdGFrZWQgTkZUcyBhbHJlYWR5IGNvbnRhaW4gBQphc3NldElkU3RyAwkAZwIJAJADAQUEbmZ0cwUXTUFYX05GVFNfU1RBS0VEX0JZX1VTRVIJAAIBCQCsAgIJAKwCAgIZWW91ciBhbHJlYWR5IHN0YWtlZCBtYXggKAkApAMBBRdNQVhfTkZUU19TVEFLRURfQllfVVNFUgIGKSBORlRzBApsaXN0QWN0aW9uCQELU3RyaW5nRW50cnkCBQduZnRzS2V5CQC6CQIJAM0IAgUEbmZ0cwUKYXNzZXRJZFN0cgIBXwMJAAACCAUFYXNzZXQGaXNzdWVyBQR0aGlzBA0kdDAyNTQ4NTI1Njc1CQEQc3Rha2VOZnRJbnRlcm5hbAYFBGFkZHIFCmFzc2V0SWRTdHIJAGgCCQESYm9udXNCeURlc2NyaXB0aW9uAQkBBXZhbHVlAQgFBWFzc2V0C2Rlc2NyaXB0aW9uAJBOCQESa2V5VXNlcldsTmZ0TnVtYmVyAQUEYWRkcgUTa2V5V2xOZnRUb3RhbFN0YWtlZAULTUFYX1dMX05GVFMEB2FjdGlvbnMIBQ0kdDAyNTQ4NTI1Njc1Al8xBBB3bGdDbGFpbWVkQW1vdW50CAUNJHQwMjU0ODUyNTY3NQJfMgkAlAoCCQDNCAIJAM4IAgUNcHJvbG9nQWN0aW9ucwUHYWN0aW9ucwUKbGlzdEFjdGlvbgUQd2xnQ2xhaW1lZEFtb3VudAMJAAACCQEPaXNBcmtpbWFsSXNzdWVkAQUFYXNzZXQCAAkAAgECNE9ubHkgV2F2ZXNMYW5kcyBhbmQgQXJraW1hbHMgTkZUIHRva2VucyBhcmUgYWNjZXB0ZWQEDSR0MDI1ODU2MjYwMDcJARBzdGFrZU5mdEludGVybmFsBgUEYWRkcgUKYXNzZXRJZFN0cgUNQVJLX05GVF9CT05VUwkBE2tleVVzZXJBcmtOZnROdW1iZXIBBQRhZGRyBRRrZXlBcmtOZnRUb3RhbFN0YWtlZAUMTUFYX0FSS19ORlRTBAdhY3Rpb25zCAUNJHQwMjU4NTYyNjAwNwJfMQQQd2xnQ2xhaW1lZEFtb3VudAgFDSR0MDI1ODU2MjYwMDcCXzIJAJQKAgkAzQgCCQDOCAIFDXByb2xvZ0FjdGlvbnMFB2FjdGlvbnMFCmxpc3RBY3Rpb24FEHdsZ0NsYWltZWRBbW91bnQBaQEKdW5zdGFrZU5GVAEKYXNzZXRJZFN0cgQNcHJvbG9nQWN0aW9ucwkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQHYXNzZXRJZAkA2QQBBQphc3NldElkU3RyBARhZGRyCQClCAEIBQFpBmNhbGxlcgQFYXNzZXQJAQV2YWx1ZQEJAOwHAQUHYXNzZXRJZAQHdGltZUtleQkBHmtleVN0YWtlZFRpbWVCeUFzc2V0SWRBbmRPd25lcgIFCmFzc2V0SWRTdHIFBGFkZHIDCQEBIQEJAQlpc0RlZmluZWQBCQCfCAEFB3RpbWVLZXkJAAIBCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCFSBpcyBub3Qgc3Rha2VkIGJ5IHlvdQQHbmZ0c0tleQkBFGtleVN0YWtlZE5GVHNCeU93bmVyAQUEYWRkcgQEbmZ0cwkAvAkCCQELdmFsdWVPckVsc2UCCQCiCAEFB25mdHNLZXkCAAIBXwQDaWR4CQDPCAIFBG5mdHMFCmFzc2V0SWRTdHIDCQEBIQEJAQlpc0RlZmluZWQBBQNpZHgJAAIBCQCsAgICH1lvdXIgc3Rha2VkIE5GVHMgZG9uJ3QgY29udGFpbiAFCmFzc2V0SWRTdHIECmxpc3RBY3Rpb24DCQBmAgkAkAMBBQRuZnRzAAEJAQtTdHJpbmdFbnRyeQIFB25mdHNLZXkJALoJAgkA0QgCBQRuZnRzCQEFdmFsdWUBBQNpZHgCAV8JAQtEZWxldGVFbnRyeQEFB25mdHNLZXkEBGlzV0wJAAACCAUFYXNzZXQGaXNzdWVyBQR0aGlzAwUEaXNXTAQLd2xOZnROdW1iZXIJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBEmtleVVzZXJXbE5mdE51bWJlcgEFBGFkZHIAAAQIYm9udXNWYWwJAGgCCQESYm9udXNCeURlc2NyaXB0aW9uAQkBBXZhbHVlAQgFBWFzc2V0C2Rlc2NyaXB0aW9uAJBOBA0kdDAyNzE3MjI3MjUxCQEZc3Rha2VVbnN0YWtlQWNyZXNJbnRlcm5hbAMAAAUEYWRkcgkBAS0BBQhib251c1ZhbAQHYWN0aW9ucwgFDSR0MDI3MTcyMjcyNTECXzEEEHdsZ0NsYWltZWRBbW91bnQIBQ0kdDAyNzE3MjI3MjUxAl8yCQCUCgIJAM4IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIFB2FjdGlvbnMFCmxpc3RBY3Rpb24JAQxJbnRlZ2VyRW50cnkCCQESa2V5VXNlcldsTmZ0TnVtYmVyAQUEYWRkcgkAZQIFC3dsTmZ0TnVtYmVyAAEJAQxJbnRlZ2VyRW50cnkCBRNrZXlXbE5mdFRvdGFsU3Rha2VkCQCWAwEJAMwIAgAACQDMCAIJAGUCCQELdmFsdWVPckVsc2UCCQCfCAEFE2tleVdsTmZ0VG90YWxTdGFrZWQAAAABBQNuaWwJAQtEZWxldGVFbnRyeQEJAR5rZXlTdGFrZWRUaW1lQnlBc3NldElkQW5kT3duZXICCQDYBAEFB2Fzc2V0SWQFBGFkZHIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgABBQdhc3NldElkBQ1wcm9sb2dBY3Rpb25zBRB3bGdDbGFpbWVkQW1vdW50BAthcmtpbWFsTmFtZQkBD2lzQXJraW1hbElzc3VlZAEFBWFzc2V0AwkAAAIFC2Fya2ltYWxOYW1lAgAJAAIBAjRPbmx5IFdhdmVzTGFuZHMgYW5kIEFya2ltYWxzIE5GVCB0b2tlbnMgYXJlIGFjY2VwdGVkBAxhcmtOZnROdW1iZXIJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBE2tleVVzZXJBcmtOZnROdW1iZXIBBQRhZGRyAAAEDSR0MDI3OTExMjc5OTUJARlzdGFrZVVuc3Rha2VBY3Jlc0ludGVybmFsAwAABQRhZGRyCQEBLQEFDUFSS19ORlRfQk9OVVMEB2FjdGlvbnMIBQ0kdDAyNzkxMTI3OTk1Al8xBBB3bGdDbGFpbWVkQW1vdW50CAUNJHQwMjc5MTEyNzk5NQJfMgkAlAoCCQDOCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgUHYWN0aW9ucwUKbGlzdEFjdGlvbgkBDEludGVnZXJFbnRyeQIJARNrZXlVc2VyQXJrTmZ0TnVtYmVyAQUEYWRkcgkAZQIFDGFya05mdE51bWJlcgABCQELRGVsZXRlRW50cnkBCQEea2V5U3Rha2VkVGltZUJ5QXNzZXRJZEFuZE93bmVyAgkA2AQBBQdhc3NldElkBQRhZGRyCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIAAQUHYXNzZXRJZAUNcHJvbG9nQWN0aW9ucwUQd2xnQ2xhaW1lZEFtb3VudAFpAQxleGNoYW5nZU5GVHMAAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQISVGVtcG9yYXJ5IGRpc2FibGVkBA1wcm9sb2dBY3Rpb25zCQEGcHJvbG9nAQUBaQMJAGYCAAMJAJADAQgFAWkIcGF5bWVudHMJAAIBAilNaW4gb25lIFdMR09MRCBhbmQgMiBORlQgcGF5bWVudHMgYWxsb3dlZAMJAGYCCQCQAwEIBQFpCHBheW1lbnRzAAoJAAIBAilNYXggb25lIFdMR09MRCBhbmQgOSBORlQgcGF5bWVudHMgYWxsb3dlZAQEYWRkcgkApQgBCAUBaQZjYWxsZXIKAQVhZGRVcAIDYWNjA3BtdAQHYXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCAUDcG10B2Fzc2V0SWQCGldBVkVTIHBheW1lbnRzIG5vdCBhbGxvd2VkAwkAAAIFB2Fzc2V0SWQFCndsZ0Fzc2V0SWQJAJYKBAkAZAIIBQNhY2MCXzEIBQNwbXQGYW1vdW50CAUDYWNjAl8yCAUDYWNjAl8zCAUDYWNjAl80BAVhc3NldAkBBXZhbHVlAQkA7AcBBQdhc3NldElkAwkBAiE9AggFBWFzc2V0Bmlzc3VlcgUEdGhpcwkAAgECG09ubHkgV0wtaXNzdWVkIE5GVHMgYWxsb3dlZAQIcmFyaXR5SXgJARZyYXJpdHlJZHhCeURlc2NyaXByaW9uAQkBBXZhbHVlAQgFBWFzc2V0C2Rlc2NyaXB0aW9uAwMJAGYCCAUDYWNjAl80AAAJAQIhPQIFCHJhcml0eUl4CAUDYWNjAl80BwkAAgECLVlvdSBjYW4gZXhjaGFuZ2Ugb25seSBORlRzIG9mIHRoZSBzYW1lIHJhcml0eQQJYm9udXNQZXJjCQESYm9udXNCeURlc2NyaXB0aW9uAQkBBXZhbHVlAQgFBWFzc2V0C2Rlc2NyaXB0aW9uCQCWCgQIBQNhY2MCXzEJAGQCCAUDYWNjAl8yBQlib251c1BlcmMJAM0IAggFA2FjYwJfMwkBBEJ1cm4CBQdhc3NldElkAAEFCHJhcml0eUl4BA0kdDAyOTQ0NjI5NjYyCgACJGwIBQFpCHBheW1lbnRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlgoEAAAAAAUDbmlsAP///////////wEKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBBWFkZFVwAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKBAZ3bGdGZWUIBQ0kdDAyOTQ0NjI5NjYyAl8xBAp0b3RhbEJvbnVzCAUNJHQwMjk0NDYyOTY2MgJfMgQLYnVybkFjdGlvbnMIBQ0kdDAyOTQ0NjI5NjYyAl8zBAlyYXJpdHlJZHgIBQ0kdDAyOTQ0NjI5NjYyAl80BAxuZXdSYXJpdHlJZHgDCQAAAgUJcmFyaXR5SWR4BQppZHhSYXJpdHlDAwkAZgIJAJEDAgUQcmFyaXR5VGhyZXNob2xkcwUNaWR4VGhyZXNob2xkQwUKdG90YWxCb251cwUKaWR4UmFyaXR5QwMJAGYCCQCRAwIFEHJhcml0eVRocmVzaG9sZHMFDWlkeFRocmVzaG9sZFUFCnRvdGFsQm9udXMFCmlkeFJhcml0eVUJAAIBCQCsAgIJAKwCAgI6WW91IGNhbiBhZHZhbmNlIG9ubHkgb25lIGxldmVsIG9mIHJhcml0eSwgbWF4IHRvdGFsIGJvbnVzIAkApAMBCQCRAwIFEHJhcml0eVRocmVzaG9sZHMFDWlkeFRocmVzaG9sZFUCASUDCQAAAgUJcmFyaXR5SWR4BQppZHhSYXJpdHlVAwkAZgIJAJEDAgUQcmFyaXR5VGhyZXNob2xkcwUNaWR4VGhyZXNob2xkVQUKdG90YWxCb251cwUKaWR4UmFyaXR5VQMJAGYCCQCRAwIFEHJhcml0eVRocmVzaG9sZHMFDWlkeFRocmVzaG9sZEwFCnRvdGFsQm9udXMFCmlkeFJhcml0eUwJAAIBCQCsAgIJAKwCAgI6WW91IGNhbiBhZHZhbmNlIG9ubHkgb25lIGxldmVsIG9mIHJhcml0eSwgbWF4IHRvdGFsIGJvbnVzIAkApAMBCQCRAwIFEHJhcml0eVRocmVzaG9sZHMFDWlkeFRocmVzaG9sZEwCASUDCQAAAgUJcmFyaXR5SWR4BQppZHhSYXJpdHlMAwkAZgIJAJEDAgUQcmFyaXR5VGhyZXNob2xkcwUNaWR4VGhyZXNob2xkTAUKdG90YWxCb251cwUKaWR4UmFyaXR5TAUKaWR4UmFyaXR5RQMJAAACBQlyYXJpdHlJZHgFCmlkeFJhcml0eUUFCmlkeFJhcml0eUUDCQAAAgUJcmFyaXR5SWR4BQppZHhSYXJpdHlQCQACAQImWW91IGNhbid0IGV4Y2hhbmdlIE5GVHMgb2YgdGhpcyByYXJpdHkJAAIBAg5Vbmtub3duIHJhcml0eQQJbWluV2xnRmVlCQBrAwUKdG90YWxCb251cwUGTVVMVDE0CQELZ2V0V2xnUHJpY2UBAAAEBmNoYW5nZQkAZQIFBndsZ0ZlZQUJbWluV2xnRmVlBAdmb3JUZWFtCQBpAgUJbWluV2xnRmVlAAIECXdsZ1JlbWFpbgkBBWFzSW50AQkA/AcEBQt3bGdDb250cmFjdAIKYnVybldsZ29sZAkAzAgCCQBlAgUJbWluV2xnRmVlBQdmb3JUZWFtBQNuaWwFA25pbAMJAGYCAAAFBmNoYW5nZQkAAgEJAKwCAgkArAICAhNZb3UgbmVlZCB0byBhdHRhY2ggCQEKZml4ZWRQb2ludAIFCW1pbldsZ0ZlZQAIAg4gV0xHT0xEIGFzIGZlZQQNY2hhbmdlQWN0aW9ucwMJAGYCBQZjaGFuZ2UAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFBmNoYW5nZQUKd2xnQXNzZXRJZAUDbmlsBQNuaWwEDSR0MDMxMTk5MzEzNjAJAQ5pc3N1ZU5mdEN1c3RvbQgFDmlkeE5hbWVQaWNrYXhlBQxuZXdSYXJpdHlJZHgFCmlkeENvbGxEaWcFDG5ld1Jhcml0eUlkeAUKdG90YWxCb251cwUPaWR4RGVzY3JQaWNrYXhlBQ5pZHhCb251c1R5cGVGcAgFAWkGY2FsbGVyBA9pc3N1ZU5mdEFjdGlvbnMIBQ0kdDAzMTE5OTMxMzYwAl8xBApuZnRBc3NldElkCAUNJHQwMzExOTkzMTM2MAJfMgQGYnVybmVkCQCQAwEFC2J1cm5BY3Rpb25zBBJidXJuQ291bnRlckFjdGlvbnMDCQAAAgUGYnVybmVkAAAFA25pbAkAzAgCCQEMSW50ZWdlckVudHJ5AgURa2V5TmZ0VG90YWxCdXJuZWQJAGQCCQELdmFsdWVPckVsc2UCCQCfCAEFEWtleU5mdFRvdGFsQnVybmVkAAAFBmJ1cm5lZAUDbmlsCQCUCgIJAM0IAgkAzggCCQDOCAIJAM4IAgkAzggCBQ9pc3N1ZU5mdEFjdGlvbnMFC2J1cm5BY3Rpb25zBRJidXJuQ291bnRlckFjdGlvbnMFDXByb2xvZ0FjdGlvbnMFDWNoYW5nZUFjdGlvbnMJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEJARFAZXh0ck5hdGl2ZSgxMDUzKQIFC3dsZ0NvbnRyYWN0BQt0ZWFtQWRkcktleQUHZm9yVGVhbQUKd2xnQXNzZXRJZAkAlAoCBQpuZnRBc3NldElkBQl3bGdSZW1haW4BaQEMb3Blbk5mdENoZXN0AAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECElRlbXBvcmFyeSBkaXNhYmxlZAQNcHJvbG9nQWN0aW9ucwkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAiJleGFjdGx5IDEgcGF5bWVudCBtdXN0IGJlIGF0dGFjaGVkBANwbXQJAJEDAggFAWkIcGF5bWVudHMAAAQJd2xnQW1vdW50CAUDcG10BmFtb3VudAMDCQEBIQEJAQlpc0RlZmluZWQBCAUDcG10B2Fzc2V0SWQGCQECIT0CCQEFdmFsdWUBCAUDcG10B2Fzc2V0SWQFCndsZ0Fzc2V0SWQJAAIBAhVXTEdPTEQgcGF5bWVudHMgb25seSEECW1pbldsZ0ZlZQkAawMFFE5GVF9DSEVTVF9QUklDRV9VU0RUBQVNVUxUOAkBC2dldFdsZ1ByaWNlAQAABAZjaGFuZ2UJAGUCBQl3bGdBbW91bnQFCW1pbldsZ0ZlZQQHZm9yVGVhbQkAaQIFCW1pbldsZ0ZlZQACBAl3bGdSZW1haW4JAQVhc0ludAEJAPwHBAULd2xnQ29udHJhY3QCCmJ1cm5XbGdvbGQJAMwIAgkAZQIFCW1pbldsZ0ZlZQUHZm9yVGVhbQUDbmlsBQNuaWwDCQBmAgAABQZjaGFuZ2UJAAIBCQCsAgIJAKwCAgITWW91IG5lZWQgdG8gYXR0YWNoIAkBCmZpeGVkUG9pbnQCBQltaW5XbGdGZWUACAIOIFdMR09MRCBhcyBmZWUEDWNoYW5nZUFjdGlvbnMDCQBmAgUGY2hhbmdlAAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQZjaGFuZ2UFCndsZ0Fzc2V0SWQFA25pbAUDbmlsBARhZGRyCQClCAEIBQFpBmNhbGxlcgQJZmluaXNoS2V5CQEJa2V5Q29tbWl0AQUEYWRkcgQLZmluaXNoQmxvY2sJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnwgBBQlmaW5pc2hLZXkCJFlvdSBoYXZlIHRvIGNvbW1pdEZvclJhbmRvbSgpIGZpcnN0IQMJAGYCBQtmaW5pc2hCbG9jawUGaGVpZ2h0CQACAQkArAICAjRSYW5kb20gbnVtYmVyIGlzIG5vdCByZWFkeSB5ZXQsIHdhaXQgdW50aWwgaGVpZ2h0ID0gCQCkAwEFC2ZpbmlzaEJsb2NrBAdlbnRyb3B5CQEFdmFsdWUBCAkBBXZhbHVlAQkA7QcBBQtmaW5pc2hCbG9jawN2cmYEBHNhbHQJANkEAQkAkQMCCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAKIIAQkBFGtleUN1cldlZWtUeElkQnlVc2VyAQUEYWRkcgIKNDJfREVGQVVMVAIBXwABBARyYW5kCQEPZ2V0UmFuZG9tTnVtYmVyAwBkBQRzYWx0BQdlbnRyb3B5BA0kdDAzMzQ0MTMzNzEzAwkAZgIAVAUEcmFuZAkAlAoCAAEFCmlkeFJhcml0eUMDCQBmAgBiBQRyYW5kCQCUCgIABQUKaWR4UmFyaXR5VQkAlAoCAAoFCmlkeFJhcml0eUwEBWJvbnVzCAUNJHQwMzM0NDEzMzcxMwJfMQQJcmFyaXR5SWR4CAUNJHQwMzM0NDEzMzcxMwJfMgQNJHQwMzM3MTYzMzg2NgkBDmlzc3VlTmZ0Q3VzdG9tCAUOaWR4TmFtZVBpY2theGUFCXJhcml0eUlkeAUKaWR4Q29sbERpZwUJcmFyaXR5SWR4BQVib251cwUPaWR4RGVzY3JQaWNrYXhlBQ5pZHhCb251c1R5cGVGcAgFAWkGY2FsbGVyBA9pc3N1ZU5mdEFjdGlvbnMIBQ0kdDAzMzcxNjMzODY2Al8xBApuZnRBc3NldElkCAUNJHQwMzM3MTYzMzg2NgJfMgkAlAoCCQDNCAIJAM0IAgkAzggCCQDOCAIFD2lzc3VlTmZ0QWN0aW9ucwUNcHJvbG9nQWN0aW9ucwUNY2hhbmdlQWN0aW9ucwkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQkBEUBleHRyTmF0aXZlKDEwNTMpAgULd2xnQ29udHJhY3QFC3RlYW1BZGRyS2V5BQdmb3JUZWFtBQp3bGdBc3NldElkCQELRGVsZXRlRW50cnkBBQlmaW5pc2hLZXkJAJQKAgUKbmZ0QXNzZXRJZAUJd2xnUmVtYWluAWkBD2NvbW1pdEZvclJhbmRvbQADCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAhJUZW1wb3JhcnkgZGlzYWJsZWQEDXByb2xvZ0FjdGlvbnMJAQZwcm9sb2cBBQFpBARhZGRyCQClCAEIBQFpBmNhbGxlcgQJZmluaXNoS2V5CQEJa2V5Q29tbWl0AQUEYWRkcgMJAQlpc0RlZmluZWQBCQCfCAEFCWZpbmlzaEtleQkAAgECLllvdSBhbHJlYWR5IGNvbW1pdGVkIGZvciByYW5kb20sIHBsZWFzZSB1c2UgaXQEC2ZpbmlzaEJsb2NrCQBkAgUGaGVpZ2h0BQxSQU5ET01fREVMQVkJAJQKAgkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlmaW5pc2hLZXkFC2ZpbmlzaEJsb2NrBQNuaWwFDXByb2xvZ0FjdGlvbnMFC2ZpbmlzaEJsb2NrAWkBDmRyYXdQcm9tb1JvdW5kAQdyb3VuZElkAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIRUGVybWlzc2lvbiBkZW5pZWQEBXRvZGF5CQBpAgUGaGVpZ2h0BQpEQVlfQkxPQ0tTBAhtYXhWYWx1ZQkBC3ZhbHVlT3JFbHNlAgkAnwgBBRRrZXlUb3RhbFByb21vVGlja2V0cwAAAwkAAAIFCG1heFZhbHVlAAAJAAIBAhJObyB0aWNrZXRzIHRvIGRyYXcEAWIJAGgCBQV0b2RheQUKREFZX0JMT0NLUwQBaAMJAGYCBQFiBQpWUkZfT0ZGU0VUBQFiCQBkAgUBYgUKVlJGX09GRlNFVAQHZW50cm9weQkBBXZhbHVlAQgJAQV2YWx1ZQEJAO0HAQUBaAN2cmYECHByb21vTWFwCQELdmFsdWVPckVsc2UCCQCiCAEFC2tleVByb21vTWFwAgADCQAAAgUIcHJvbW9NYXACAAkAAgECD05vIHBhcnRpY2lwYW50cwoBCnNpbmdsZURyYXcCAmFjAWoECXByb21vTGlzdAMJAAACCAUCYWMCXzMCAAUDbmlsCQC9CQIIBQJhYwJfMwIBXwMJAGcCBQFqCQCQAwEFCXByb21vTGlzdAUCYWMEBHJhbmQJAQ9nZXRSYW5kb21OdW1iZXIDCAUCYWMCXzEIBQJhYwJfMgUHZW50cm9weQoBDGNvdW50VGlja2V0cwIDYWNjAmVsBAVwYXJ0cwkAtQkCBQJlbAIBOgQEYWRkcgkAkQMCBQVwYXJ0cwAABAd0aWNrZXRzCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcGFydHMAAQQIbmV3VG90YWwJAGQCCAUDYWNjAl8xBQd0aWNrZXRzAwMJAAACCAUDYWNjAl8zAgAJAGYCBQhuZXdUb3RhbAUEcmFuZAcJAJUKAwUIbmV3VG90YWwFB3RpY2tldHMFBGFkZHIJAJUKAwUIbmV3VG90YWwIBQNhY2MCXzIIBQNhY2MCXzMEAXIKAAIkbAUJcHJvbW9MaXN0CgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlQoDAAAAAAIACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQxjb3VudFRpY2tldHMCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFUxpc3Qgc2l6ZSBleGNlZWRzIDIwMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAAZABoAGwAcAB0AHgAfACAAIQAiACMAJAAlACYAJwAoACkAKgArACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQA6ADsAPAA9AD4APwBAAEEAQgBDAEQARQBGAEcASABJAEoASwBMAE0ATgBPAFAAUQBSAFMAVABVAFYAVwBYAFkAWgBbAFwAXQBeAF8AYABhAGIAYwBkAGUAZgBnAGgAaQBqAGsAbABtAG4AbwBwAHEAcgBzAHQAdQB2AHcAeAB5AHoAewB8AH0AfgB/AIABAIEBAIIBAIMBAIQBAIUBAIYBAIcBAIgBAIkBAIoBAIsBAIwBAI0BAI4BAI8BAJABAJEBAJIBAJMBAJQBAJUBAJYBAJcBAJgBAJkBAJoBAJsBAJwBAJ0BAJ4BAJ8BAKABAKEBAKIBAKMBAKQBAKUBAKYBAKcBAKgBAKkBAKoBAKsBAKwBAK0BAK4BAK8BALABALEBALIBALMBALQBALUBALYBALcBALgBALkBALoBALsBALwBAL0BAL4BAL8BAMABAMEBAMIBAMMBAMQBAMUBAMYBAMcBAMgBBAZ3aW5uZXIIBQFyAl8zAwkAAAIFBndpbm5lcgIABQJhYwQIbWFwUGFydHMJAL0JAggFAmFjAl8zBQZ3aW5uZXIEBm5ld01hcAMJAAACCQCRAwIFCG1hcFBhcnRzAAACAAkAsAICCQCRAwIFCG1hcFBhcnRzAAEABQkArAICCQCzAgIJAJEDAgUIbWFwUGFydHMAAAABCQCwAgIJAJEDAgUIbWFwUGFydHMAAQAEBAp3aW5BY3Rpb25zAwkAAAIFAWoAAAkA/AcEBQR0aGlzAgxpc3N1ZU1pdHRlblAJAMwIAgUGd2lubmVyBQNuaWwFA25pbAkA/AcEBQR0aGlzAg1zdGFrZUFjcmVzRm9yCQDMCAIFBndpbm5lcgkAzAgCCQCRAwIFEnByb21vQXdhcmRQZXJSb3VuZAUBagkAzAgCBgUDbmlsBQNuaWwDCQAAAgUKd2luQWN0aW9ucwUKd2luQWN0aW9ucwQHbmV3U2FsdAkA2QQBCQCRAwIJALUJAgkBC3ZhbHVlT3JFbHNlAgkAoggBCQEUa2V5Q3VyV2Vla1R4SWRCeVVzZXIBBQZ3aW5uZXICCTBfREVGQVVMVAIBXwABCQCWCgQJAGUCCAUCYWMCXzEIBQFyAl8yBQduZXdTYWx0BQZuZXdNYXAJAM0IAggFAmFjAl80BQZ3aW5uZXIJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4EBWRyYXdzCgACJGwJAMwIAgAACQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUFA25pbAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJYKBAUIbWF4VmFsdWUIBQFpDXRyYW5zYWN0aW9uSWQFCHByb21vTWFwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCnNpbmdsZURyYXcCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYJAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCBQtrZXlQcm9tb01hcAgFBWRyYXdzAl8zCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRRrZXlUb3RhbFByb21vVGlja2V0cwgFBWRyYXdzAl8xCQDMCAIJAQtTdHJpbmdFbnRyeQIJARRrZXlQcm9tb1JvdW5kV2lubmVycwEFB3JvdW5kSWQJALkJAggFBWRyYXdzAl80AgFfBQNuaWwAAADsH4rI", "height": 3414876, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 9t8hCM8sS1frREDQzwnbhsjFE9YMnvQPYPy5rL3hqGFF Next: 9rzB6GGAFMAuJ1jLX4VbRdJGtrGjhMRCLz1cKKGkETws Diff:
OldNewDifferences
347347
348348 let keyLastLimitLeft = "lastLimitLeft"
349349
350-let names = ["Gold shovel", "Pickaxe"]
350+let names = ["Gold shovel", "Pickaxe", "Santa's mitten"]
351351
352352 let descriptions = ["Reward for early birds", "Increases FarmPower", "New Year promo reward"]
353353
491491 else false)
492492 then throw((((("You have only " + fixedPoint(oldBonus, 4)) + "% bonus, and tried to unstake ") + fixedPoint(-(bonusDelta), 4)) + "%"))
493493 else {
494- let $t066116710 = getFarmingPowerByAcresAndBonus(newAcresAmount, (oldBonus + bonusDelta))
495- let newBonusedFp = $t066116710._1
496- let ignored = $t066116710._2
494+ let $t066316730 = getFarmingPowerByAcresAndBonus(newAcresAmount, (oldBonus + bonusDelta))
495+ let newBonusedFp = $t066316730._1
496+ let ignored = $t066316730._2
497497 let oldTotalFp = valueOrElse(getInteger(totalFarmingPowerKey), 0)
498498 let acresActions = if ((amt == 0))
499499 then nil
586586 if ((nftNumber >= limit))
587587 then throw((("You can stake max " + toString(limit)) + " of such NFTs"))
588588 else {
589- let $t01098911065 = stakeUnstakeAcresInternal(0, addr, bonus6)
590- let actions = $t01098911065._1
591- let wlgClaimedAmount = $t01098911065._2
589+ let $t01100911085 = stakeUnstakeAcresInternal(0, addr, bonus6)
590+ let actions = $t01100911085._1
591+ let wlgClaimedAmount = $t01100911085._2
592592 $Tuple2((((actions :+ IntegerEntry(userNumKey, (nftNumber + 1))) :+ IntegerEntry(totalNumKey, (valueOrElse(getInteger(totalNumKey), 0) + 1))) :+ IntegerEntry(keyStakedTimeByAssetIdAndOwner(assetIdStr, addr), lastBlock.timestamp)), wlgClaimedAmount)
593593 }
594594 }
595595
596596
597597 func stakeAcresForInternal (address,amt,shouldCleanPromo) = {
598- let $t01140011476 = stakeUnstakeAcresInternal(amt, address, 0)
599- let actions = $t01140011476._1
600- let wlgClaimedAmount = $t01140011476._2
598+ let $t01142011496 = stakeUnstakeAcresInternal(amt, address, 0)
599+ let actions = $t01142011496._1
600+ let wlgClaimedAmount = $t01142011496._2
601601 let promoActions = if (if ((height >= DAILY_PROMO_START_BLOCK))
602602 then (DAILY_PROMO_END_BLOCK > height)
603603 else false)
697697 if ((arbReleaseTime > lastBlock.timestamp))
698698 then throw(("You traded some WLGOLD, cannot unstake until " + toString(arbReleaseTime)))
699699 else {
700- let $t01547915559 = stakeUnstakeAcresInternal(-(amount), address, 0)
701- let actions = $t01547915559._1
702- let wlgClaimedAmount = $t01547915559._2
700+ let $t01549915579 = stakeUnstakeAcresInternal(-(amount), address, 0)
701+ let actions = $t01549915579._1
702+ let wlgClaimedAmount = $t01549915579._2
703703 $Tuple2(((actions :+ ScriptTransfer(i.caller, amount, acresAssetId)) ++ prologActions), wlgClaimedAmount)
704704 }
705705 }
722722 else (value(pmt.assetId) != acresAssetId))
723723 then throw("ACRES payments only!")
724724 else {
725- let $t01601016091 = stakeAcresForInternal(address, amt, false)
726- let stakeActions = $t01601016091._1
727- let wlgClaimedAmount = $t01601016091._2
725+ let $t01603016111 = stakeAcresForInternal(address, amt, false)
726+ let stakeActions = $t01603016111._1
727+ let wlgClaimedAmount = $t01603016111._2
728728 $Tuple2((stakeActions ++ prologActions), wlgClaimedAmount)
729729 }
730730 }
795795 then throw((("Min payment should be " + fixedPoint(MULT7, 8)) + " ACRES"))
796796 else {
797797 let addr = toString(i.caller)
798- let $t01816318211 = getSwapLimitAcres()
799- let limitAction = $t01816318211._1
800- let maxUsdt = $t01816318211._2
798+ let $t01818318231 = getSwapLimitAcres()
799+ let limitAction = $t01818318231._1
800+ let maxUsdt = $t01818318231._2
801801 let maxAcres = (maxUsdt * USDT2ACRES_MULTIPLIER)
802802 if ((acresAmount > maxAcres))
803803 then throw((("You can sell max " + fixedPoint(maxAcres, 8)) + " ACRES"))
813813
814814 @Callable(i)
815815 func sellAcresREADONLY (address,acresAmount) = {
816- let $t01870718755 = getSwapLimitAcres()
817- let limitAction = $t01870718755._1
818- let maxUsdt = $t01870718755._2
816+ let $t01872718775 = getSwapLimitAcres()
817+ let limitAction = $t01872718775._1
818+ let maxUsdt = $t01872718775._2
819819 let usdtAmount = ((acresAmount / USDT2ACRES_MULTIPLIER) / 2)
820820 $Tuple2(nil, [usdtAmount, MULT7, (maxUsdt * USDT2ACRES_MULTIPLIER), 0])
821821 }
876876 let req = invoke(oldAcresAddress, "requestAcresCallback", [(((rr._1 + rr._2) + rr._3) + rr._4)], nil)
877877 if ((req == req))
878878 then {
879- let $t02126921408 = issueNftCustom(idxNameShovel, idxKeySP, idxCollDig, idxRarityP, 3, idxDescrShovel, idxBonusTypeFp, i.caller)
880- let nftActions = $t02126921408._1
881- let nftAssetId = $t02126921408._2
879+ let $t02128921428 = issueNftCustom(idxNameShovel, idxKeySP, idxCollDig, idxRarityP, 3, idxDescrShovel, idxBonusTypeFp, i.caller)
880+ let nftActions = $t02128921428._1
881+ let nftAssetId = $t02128921428._2
882882 $Tuple6(rr._1, rr._2, rr._3, rr._4, rr._5, nftActions)
883883 }
884884 else throw("Strict value is not equal to itself.")
949949 let userFpKey = keyFarmingPowerByUser(address)
950950 let oldFp = valueOrElse(getInteger(userFpKey), 0)
951951 let userBonus = valueOrElse(getInteger(acres2Contract, keyUserFullBonus(address)), 0)
952- let $t02367923766 = getFarmingPowerByAcresAndBonus(newAcresAmount, userBonus)
953- let newBonusedFp = $t02367923766._1
954- let ignored = $t02367923766._2
952+ let $t02369923786 = getFarmingPowerByAcresAndBonus(newAcresAmount, userBonus)
953+ let newBonusedFp = $t02369923786._1
954+ let ignored = $t02369923786._2
955955 let oldTotalFp = valueOrElse(getInteger(totalFarmingPowerKey), 0)
956956 let newTotalFp = ((oldTotalFp + newBonusedFp) - oldFp)
957957 $Tuple2(nil, [oldFp, newBonusedFp, oldTotalFp, newTotalFp])
10001000 let listAction = StringEntry(nftsKey, makeString_2C((nfts :+ assetIdStr), "_"))
10011001 if ((asset.issuer == this))
10021002 then {
1003- let $t02546525655 = stakeNftInternal(addr, assetIdStr, (bonusByDescription(value(asset.description)) * 10000), keyUserWlNftNumber(addr), keyWlNftTotalStaked, MAX_WL_NFTS)
1004- let actions = $t02546525655._1
1005- let wlgClaimedAmount = $t02546525655._2
1003+ let $t02548525675 = stakeNftInternal(addr, assetIdStr, (bonusByDescription(value(asset.description)) * 10000), keyUserWlNftNumber(addr), keyWlNftTotalStaked, MAX_WL_NFTS)
1004+ let actions = $t02548525675._1
1005+ let wlgClaimedAmount = $t02548525675._2
10061006 $Tuple2(((prologActions ++ actions) :+ listAction), wlgClaimedAmount)
10071007 }
10081008 else if ((isArkimalIssued(asset) == ""))
10091009 then throw("Only WavesLands and Arkimals NFT tokens are accepted")
10101010 else {
1011- let $t02583625987 = stakeNftInternal(addr, assetIdStr, ARK_NFT_BONUS, keyUserArkNftNumber(addr), keyArkNftTotalStaked, MAX_ARK_NFTS)
1012- let actions = $t02583625987._1
1013- let wlgClaimedAmount = $t02583625987._2
1011+ let $t02585626007 = stakeNftInternal(addr, assetIdStr, ARK_NFT_BONUS, keyUserArkNftNumber(addr), keyArkNftTotalStaked, MAX_ARK_NFTS)
1012+ let actions = $t02585626007._1
1013+ let wlgClaimedAmount = $t02585626007._2
10141014 $Tuple2(((prologActions ++ actions) :+ listAction), wlgClaimedAmount)
10151015 }
10161016 }
10471047 then {
10481048 let wlNftNumber = valueOrElse(getInteger(keyUserWlNftNumber(addr)), 0)
10491049 let bonusVal = (bonusByDescription(value(asset.description)) * 10000)
1050- let $t02715227231 = stakeUnstakeAcresInternal(0, addr, -(bonusVal))
1051- let actions = $t02715227231._1
1052- let wlgClaimedAmount = $t02715227231._2
1050+ let $t02717227251 = stakeUnstakeAcresInternal(0, addr, -(bonusVal))
1051+ let actions = $t02717227251._1
1052+ let wlgClaimedAmount = $t02717227251._2
10531053 $Tuple2(((((((actions :+ listAction) :+ IntegerEntry(keyUserWlNftNumber(addr), (wlNftNumber - 1))) :+ IntegerEntry(keyWlNftTotalStaked, max([0, (valueOrElse(getInteger(keyWlNftTotalStaked), 0) - 1)]))) :+ DeleteEntry(keyStakedTimeByAssetIdAndOwner(toBase58String(assetId), addr))) :+ ScriptTransfer(i.caller, 1, assetId)) ++ prologActions), wlgClaimedAmount)
10541054 }
10551055 else {
10581058 then throw("Only WavesLands and Arkimals NFT tokens are accepted")
10591059 else {
10601060 let arkNftNumber = valueOrElse(getInteger(keyUserArkNftNumber(addr)), 0)
1061- let $t02789127975 = stakeUnstakeAcresInternal(0, addr, -(ARK_NFT_BONUS))
1062- let actions = $t02789127975._1
1063- let wlgClaimedAmount = $t02789127975._2
1061+ let $t02791127995 = stakeUnstakeAcresInternal(0, addr, -(ARK_NFT_BONUS))
1062+ let actions = $t02791127995._1
1063+ let wlgClaimedAmount = $t02791127995._2
10641064 $Tuple2((((((actions :+ listAction) :+ IntegerEntry(keyUserArkNftNumber(addr), (arkNftNumber - 1))) :+ DeleteEntry(keyStakedTimeByAssetIdAndOwner(toBase58String(assetId), addr))) :+ ScriptTransfer(i.caller, 1, assetId)) ++ prologActions), wlgClaimedAmount)
10651065 }
10661066 }
11041104 }
11051105 }
11061106
1107- let $t02942629642 = {
1107+ let $t02944629662 = {
11081108 let $l = i.payments
11091109 let $s = size($l)
11101110 let $acc0 = $Tuple4(0, 0, nil, -1)
11181118
11191119 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
11201120 }
1121- let wlgFee = $t02942629642._1
1122- let totalBonus = $t02942629642._2
1123- let burnActions = $t02942629642._3
1124- let rarityIdx = $t02942629642._4
1121+ let wlgFee = $t02944629662._1
1122+ let totalBonus = $t02944629662._2
1123+ let burnActions = $t02944629662._3
1124+ let rarityIdx = $t02944629662._4
11251125 let newRarityIdx = if ((rarityIdx == idxRarityC))
11261126 then if ((rarityThresholds[idxThresholdC] > totalBonus))
11271127 then idxRarityC
11531153 let changeActions = if ((change > 0))
11541154 then [ScriptTransfer(i.caller, change, wlgAssetId)]
11551155 else nil
1156- let $t03117931340 = issueNftCustom(idxNamePickaxe, newRarityIdx, idxCollDig, newRarityIdx, totalBonus, idxDescrPickaxe, idxBonusTypeFp, i.caller)
1157- let issueNftActions = $t03117931340._1
1158- let nftAssetId = $t03117931340._2
1156+ let $t03119931360 = issueNftCustom(idxNamePickaxe, newRarityIdx, idxCollDig, newRarityIdx, totalBonus, idxDescrPickaxe, idxBonusTypeFp, i.caller)
1157+ let issueNftActions = $t03119931360._1
1158+ let nftAssetId = $t03119931360._2
11591159 let burned = size(burnActions)
11601160 let burnCounterActions = if ((burned == 0))
11611161 then nil
12011201 let entropy = value(value(blockInfoByHeight(finishBlock)).vrf)
12021202 let salt = fromBase58String(split(valueOrElse(getString(keyCurWeekTxIdByUser(addr)), "42_DEFAULT"), "_")[1])
12031203 let rand = getRandomNumber(100, salt, entropy)
1204- let $t03342133693 = if ((84 > rand))
1204+ let $t03344133713 = if ((84 > rand))
12051205 then $Tuple2(1, idxRarityC)
12061206 else if ((98 > rand))
12071207 then $Tuple2(5, idxRarityU)
12081208 else $Tuple2(10, idxRarityL)
1209- let bonus = $t03342133693._1
1210- let rarityIdx = $t03342133693._2
1211- let $t03369633846 = issueNftCustom(idxNamePickaxe, rarityIdx, idxCollDig, rarityIdx, bonus, idxDescrPickaxe, idxBonusTypeFp, i.caller)
1212- let issueNftActions = $t03369633846._1
1213- let nftAssetId = $t03369633846._2
1209+ let bonus = $t03344133713._1
1210+ let rarityIdx = $t03344133713._2
1211+ let $t03371633866 = issueNftCustom(idxNamePickaxe, rarityIdx, idxCollDig, rarityIdx, bonus, idxDescrPickaxe, idxBonusTypeFp, i.caller)
1212+ let issueNftActions = $t03371633866._1
1213+ let nftAssetId = $t03371633866._2
12141214 $Tuple2(((((issueNftActions ++ prologActions) ++ changeActions) :+ ScriptTransfer(addressFromStringValue(getStringValue(wlgContract, teamAddrKey)), forTeam, wlgAssetId)) :+ DeleteEntry(finishKey)), $Tuple2(nftAssetId, wlgRemain))
12151215 }
12161216 }
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let SEP = "__"
55
66 let MULT6 = 1000000
77
88 let MULT7 = 10000000
99
1010 let MULT8 = 100000000
1111
1212 let MULT14 = 100000000000000
1313
1414 let DAY_MILLIS = 86400000
1515
1616 let USDT2ACRES_MULTIPLIER = 10
1717
1818 let ONE_PERCENT_DIVISOR = 100
1919
2020 let RANDOM_DELAY = 2
2121
2222 let NFT_CHEST_PRICE_USDT = 5000000
2323
2424 let chain = take(drop(this.bytes, 1), 1)
2525
2626 let DAILY_PROMO_START_BLOCK = match chain {
2727 case _ =>
2828 if ((base58'2W' == $match0))
2929 then 4487040
3030 else if ((base58'2T' == $match0))
3131 then 3412800
3232 else throw("Unknown chain")
3333 }
3434
3535 let DAILY_PROMO_END_BLOCK = match chain {
3636 case _ =>
3737 if ((base58'2W' == $match0))
3838 then 4517280
3939 else if ((base58'2T' == $match0))
4040 then 3443040
4141 else throw("Unknown chain")
4242 }
4343
4444 let DAY_BLOCKS = match chain {
4545 case _ =>
4646 if ((base58'2W' == $match0))
4747 then 1440
4848 else if ((base58'2T' == $match0))
4949 then 60
5050 else throw("Unknown chain")
5151 }
5252
5353 let WEEK_BLOCKS = match chain {
5454 case _ =>
5555 if ((base58'2W' == $match0))
5656 then 10080
5757 else if ((base58'2T' == $match0))
5858 then 180
5959 else throw("Unknown chain")
6060 }
6161
6262 let VRF_OFFSET = match chain {
6363 case _ =>
6464 if ((base58'2W' == $match0))
6565 then 0
6666 else if ((base58'2T' == $match0))
6767 then 1146000
6868 else throw("Unknown chain")
6969 }
7070
7171 let usdtAssetId = match chain {
7272 case _ =>
7373 if ((base58'2W' == $match0))
7474 then base58'9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi'
7575 else if ((base58'2T' == $match0))
7676 then base58'6mWwf9mZBjVgkC54idpyaZLQfAosD914wT8fGf2iiY63'
7777 else throw("Unknown chain")
7878 }
7979
8080 let defaultRest2AddressStr = match chain {
8181 case _ =>
8282 if ((base58'2W' == $match0))
8383 then "3PFwYta8biEz31zpeFe5DJK8wE5trSpQVF8"
8484 else if ((base58'2T' == $match0))
8585 then "3N7UuYar6264P58FBhVWKPQAh4Yua2hgngv"
8686 else throw("Unknown chain")
8787 }
8888
8989 let arbitrageDelay = match chain {
9090 case _ =>
9191 if ((base58'2W' == $match0))
9292 then DAY_MILLIS
9393 else if ((base58'2T' == $match0))
9494 then 60000
9595 else throw("Unknown chain")
9696 }
9797
9898 let oldStakingContractStr = match chain {
9999 case _ =>
100100 if ((base58'2W' == $match0))
101101 then "3PLncXtS1U83D6cQbFD3H8rBHPLgzxSFKZ1"
102102 else if ((base58'2T' == $match0))
103103 then "3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm"
104104 else throw("Unknown chain")
105105 }
106106
107107 func getStringOrFail (address,key) = valueOrErrorMessage(getString(address, key), makeString(["mandatory ", toString(address), ".", key, " is not defined"], ""))
108108
109109
110110 let IdxCfgAcres2Dapp = 1
111111
112112 let IdxCfgWlgDapp = 2
113113
114114 let IdxCfgInvestFundDapp = 5
115115
116116 let IdxCfgMarketDapp = 6
117117
118118 func keyRestCfg () = "%s__restConfig"
119119
120120
121121 func keyRest2Address () = "%s__rest2Addr"
122122
123123
124124 func readRestCfgOrFail (rest) = split_4C(getStringOrFail(rest, keyRestCfg()), SEP)
125125
126126
127127 func getContractAddressOrFail (rest2Cfg,idx) = valueOrErrorMessage(addressFromString(rest2Cfg[idx]), ("Rest cfg doesn't contain address at index " + toString(idx)))
128128
129129
130130 let rest2Contract = addressFromStringValue(valueOrElse(getString(this, keyRest2Address()), defaultRest2AddressStr))
131131
132132 let rest2Cfg = readRestCfgOrFail(rest2Contract)
133133
134134 let acres2Contract = getContractAddressOrFail(rest2Cfg, IdxCfgAcres2Dapp)
135135
136136 let wlgContract = getContractAddressOrFail(rest2Cfg, IdxCfgWlgDapp)
137137
138138 let investFundContract = getContractAddressOrFail(rest2Cfg, IdxCfgInvestFundDapp)
139139
140140 let marketContract = getContractAddressOrFail(rest2Cfg, IdxCfgMarketDapp)
141141
142142 let oldAcresContractKey = "oldAcresContract"
143143
144144 func keyBlocked () = "contractsBlocked"
145145
146146
147147 func keyLastWeekTxIdByUser (addr) = ("lastWeekTxIdByUser_" + addr)
148148
149149
150150 func keyCurWeekTxIdByUser (addr) = ("curWeekTxIdByUser_" + addr)
151151
152152
153153 func keyCommit (address) = ("finishBlockFor_" + address)
154154
155155
156156 let wlgAssetIdKey = "wlg_assetId"
157157
158158 let wlgAssetId = valueOrErrorMessage(getBinary(wlgContract, wlgAssetIdKey), "WLGOLD is not issued yet")
159159
160160 let acresIssuedAmountKey = "acresIssuedAmount"
161161
162162 let acresAssetIdKey = "acresAssetId"
163163
164164 let acresAssetId = valueOrErrorMessage(getBinary(acres2Contract, acresAssetIdKey), "ACRES is not issued yet")
165165
166166 func keyAcresStakedTimeByUser (addr) = ("acresStakedTimeByUser_" + addr)
167167
168168
169169 func keyStakedLandsByOwner (ownerAddr) = ("stakedLandsByOwner_" + ownerAddr)
170170
171171
172172 func keyStakedDuckByOwner (ownerAddr) = ("stakedDuckByOwner_" + ownerAddr)
173173
174174
175175 func keyStakedTimeByAssetIdAndOwner (assetId,addr) = ((("st_" + assetId) + "_") + addr)
176176
177177
178178 func keyStakedNFTsByOwner (ownerAddr) = ("stakedNFTsByOwner_" + ownerAddr)
179179
180180
181181 func keyUserPromoAcres (address) = ("promoAcres_" + address)
182182
183183
184184 func keyUserPromoTickets (address) = ("promoTickets_" + address)
185185
186186
187187 let keyTotalPromoTickets = "totalPromoTickets"
188188
189189 let keyPromoMap = "promoMap"
190190
191191 func keyPromoRoundWinners (day) = ("dailyWinners_" + toString(day))
192192
193193
194194 let promoAwardPerRound = [0, 500000000, 100000000, 100000000, 100000000, 100000000]
195195
196196 func asInt (v) = match v {
197197 case n: Int =>
198198 n
199199 case _ =>
200200 throw("fail to cast into Int")
201201 }
202202
203203
204204 func asTuple5Ints (val) = match val {
205205 case t: (Int, Int, Int, Int, Int) =>
206206 t
207207 case _ =>
208208 throw("fail to cast into (Int, Int, Int, Int, Int)")
209209 }
210210
211211
212212 func asTuple4Ints (val) = match val {
213213 case t: (Int, Int, Int, Int) =>
214214 t
215215 case _ =>
216216 throw("fail to cast into (Int, Int, Int, Int)")
217217 }
218218
219219
220220 func asTuple3Ints (val) = match val {
221221 case t: (Int, Int, Int) =>
222222 t
223223 case _ =>
224224 throw("fail to cast into (Int, Int, Int)")
225225 }
226226
227227
228228 func asTuple2Ints (val) = match val {
229229 case t: (Int, Int) =>
230230 t
231231 case _ =>
232232 throw("fail to cast into (Int, Int)")
233233 }
234234
235235
236236 func fixedPoint (val,decimals) = {
237237 let tenPow = pow(10, 0, decimals, 0, 0, DOWN)
238238 let lowPart = toString((val % tenPow))
239239 let zeroes = drop(toString(tenPow), (1 + size(lowPart)))
240240 (((toString((val / tenPow)) + ".") + zeroes) + lowPart)
241241 }
242242
243243
244244 func getRandomNumber (maxValue,salt,entropy) = if ((0 >= maxValue))
245245 then throw("maxValue should be > 0")
246246 else {
247247 let randomHash = sha256_16Kb((salt + entropy))
248248 (toInt(randomHash) % maxValue)
249249 }
250250
251251
252252 func padL (val,len) = {
253253 let valS = toString(val)
254254 let zeroes = drop(toString(pow(10, 0, (len - size(valS)), 0, 0, DOWN)), 1)
255255 (zeroes + valS)
256256 }
257257
258258
259259 let M6_ = 1000000
260260
261261 let M8_ = 100000000
262262
263263 let wlgIssuedAmtKey = "wlg_issuedAmount"
264264
265265 let zbIssuedAmtKey = "zbill_issuedAmount"
266266
267267 func keyAcresStakedAmtByUser (addr) = ("acresStakedAmountByUser_" + addr)
268268
269269
270270 func keyFarmingPowerByUser (addr) = ("farmingPowerByUser_" + addr)
271271
272272
273273 let acresStakdTotalKey = "acresStakedAmountTotal"
274274
275275 let totalFarmingPowerKey = "totalFarmingPower"
276276
277277 let MAX_WL_NFTS = 3
278278
279279 let MAX_ARK_NFTS = 1
280280
281281 let ARK_NFT_BONUS = 5000
282282
283283 let MAX_NFTS_STAKED_BY_USER = 4
284284
285285 let keyNftTotalIssued = "nftTotalIssued"
286286
287287 let keyNftTotalBurned = "nftTotalBurned"
288288
289289 let keyWlNftTotalStaked = "WlNftTotalStaked"
290290
291291 let keyArkNftTotalStaked = "ArkNftTotalStaked"
292292
293293 func keyNftNumberByAssetId (assetId) = ("nftNumberByAssetId_" + assetId)
294294
295295
296296 func keyUserWlNftNumber (addr) = ("userWlNftNumber_" + addr)
297297
298298
299299 func keyUserArkNftNumber (addr) = ("userArkNftNumber_" + addr)
300300
301301
302302 func keyUserFullBonus (addr) = ("userFullBonus_" + addr)
303303
304304
305305 let levelAcres = [0, 10, 20, 40, 80, 150, 250, 400, 700, 1000]
306306
307307 func getLevelByAcres (acres) = {
308308 let acr = ((acres + 99999999) / M8_)
309309 func checker (acc,item) = if ((item >= acr))
310310 then acc
311311 else (acc + 1)
312312
313313 let $l = levelAcres
314314 let $s = size($l)
315315 let $acc0 = 0
316316 func $f0_1 ($a,$i) = if (($i >= $s))
317317 then $a
318318 else checker($a, $l[$i])
319319
320320 func $f0_2 ($a,$i) = if (($i >= $s))
321321 then $a
322322 else throw("List size exceeds 10")
323323
324324 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
325325 }
326326
327327
328328 func getFarmingPowerByAcres (acres) = ((acres * 20) * (getLevelByAcres(acres) + 4))
329329
330330
331331 func getFarmingPowerByAcresAndBonus (acres,bonus6) = {
332332 let notBonused = getFarmingPowerByAcres(acres)
333333 $Tuple2(fraction(notBonused, (M6_ + bonus6), M6_), notBonused)
334334 }
335335
336336
337337 let teamAddrKey = "teamAddr"
338338
339339 func keyLastWlgTradeTimeByUser (addr) = ("lastArbTimeUser_" + addr)
340340
341341
342342 let OLD_STAKING_DEADL = 1733346000000
343343
344344 let MAX_LANDS_TO_CONVERT = 14
345345
346346 let keyLastAcresSellTime = "lastAcresSellTime"
347347
348348 let keyLastLimitLeft = "lastLimitLeft"
349349
350-let names = ["Gold shovel", "Pickaxe"]
350+let names = ["Gold shovel", "Pickaxe", "Santa's mitten"]
351351
352352 let descriptions = ["Reward for early birds", "Increases FarmPower", "New Year promo reward"]
353353
354354 let idxDescrShovel = 0
355355
356356 let idxDescrPickaxe = 1
357357
358358 let idxDescrMitten = 2
359359
360360 let rarityThresholds = [5, 10, 20]
361361
362362 let idxThresholdC = 0
363363
364364 let idxThresholdU = 1
365365
366366 let idxThresholdL = 2
367367
368368 let namez = ["SHOVEL", "PICKAXE", "MITTEN"]
369369
370370 let idxNameShovel = 0
371371
372372 let idxNamePickaxe = 1
373373
374374 let idxNameMitten = 2
375375
376376 let contentKeyz = ["contentPickaxeC", "contentPickaxeU", "contentPickaxeL", "contentPickaxeE", "contentShovelP", "contentMittenP"]
377377
378378 let idxKeyC = 0
379379
380380 let idxKeySP = 4
381381
382382 let idxKeyMP = 5
383383
384384 let rarityNames = ["Common", "Uncommon", "Legendary", "Epic", "Promo"]
385385
386386 let idxRarityC = 0
387387
388388 let idxRarityU = 1
389389
390390 let idxRarityL = 2
391391
392392 let idxRarityE = 3
393393
394394 let idxRarityP = 4
395395
396396 let collectionz = ["Digging tools", "New Year gifts"]
397397
398398 let idxCollDig = 0
399399
400400 let idxCollNewYear = 1
401401
402402 let bonusTypez = ["FarmPower"]
403403
404404 let idxBonusTypeFp = 0
405405
406406 func prolog (i) = if (if ((i.originCaller != rest2Contract))
407407 then valueOrElse(getBoolean(keyBlocked()), false)
408408 else false)
409409 then throw("Contracts are under maintenance")
410410 else {
411411 let addr = toString(i.originCaller)
412412 let week = (height / WEEK_BLOCKS)
413413 let lastWeekKey = keyLastWeekTxIdByUser(addr)
414414 let lastWeekTxIdByUser = getString(lastWeekKey)
415415 let txId = toBase58String(i.transactionId)
416416 let wtx = ((toString(week) + "_") + txId)
417417 let curWeekKey = keyCurWeekTxIdByUser(addr)
418418 if (isDefined(lastWeekTxIdByUser))
419419 then {
420420 let lastWeekTx = split(value(lastWeekTxIdByUser), "_")
421421 if ((lastWeekTx[0] == toString(week)))
422422 then [StringEntry(lastWeekKey, wtx), StringEntry(curWeekKey, wtx)]
423423 else if ((lastWeekTx[0] == toString((week - 1))))
424424 then [StringEntry(curWeekKey, wtx)]
425425 else {
426426 let curWeekTxIdByUser = getStringValue(curWeekKey)
427427 let curWeekTx = split(curWeekTxIdByUser, "_")
428428 if ((curWeekTx[0] == toString(week)))
429429 then [StringEntry(curWeekKey, wtx)]
430430 else [StringEntry(lastWeekKey, curWeekTxIdByUser), StringEntry(curWeekKey, wtx)]
431431 }
432432 }
433433 else [StringEntry(lastWeekKey, wtx), StringEntry(curWeekKey, wtx)]
434434 }
435435
436436
437437 func createNftDescrCustom (contKey,nftSerial,collection,name,descr,rarity,bonus,bonusType) = (((((((((((((((((((((((("{\"url\": \"https://waveslands.com\", " + "\"contentKey\": \"") + contKey) + "\", ") + "\"number\": ") + toString(nftSerial)) + ", ") + "\"collection\": \"") + collection) + "\", ") + "\"name\": \"") + name) + "\", ") + "\"description\": \"") + descr) + "\", ") + "\"rare\": \"") + rarity) + "\", ") + "\"bonus\": ") + toString(bonus)) + ", ") + "\"bonusType\": \"") + bonusType) + "\"}")
438438
439439
440440 func issueNftCustom (nameIdx,contKeyIdx,collIdx,rarityIdx,bonusPerc,descrIdx,bonusTypeIdx,addr) = {
441441 let nftSerial = valueOrElse(getInteger(keyNftTotalIssued), 0)
442442 let rarity = rarityNames[rarityIdx]
443443 let name = (((namez[nameIdx] + "-") + take(rarity, 1)) + toString(bonusPerc))
444444 let issue = Issue(name, createNftDescrCustom(contentKeyz[contKeyIdx], nftSerial, collectionz[collIdx], names[nameIdx], descriptions[descrIdx], rarityNames[rarityIdx], bonusPerc, bonusTypez[bonusTypeIdx]), 1, 0, false)
445445 let nftAssetId = calculateAssetId(issue)
446446 $Tuple2([issue, IntegerEntry(keyNftTotalIssued, (nftSerial + 1)), IntegerEntry(keyNftNumberByAssetId(toBase58String(nftAssetId)), nftSerial), ScriptTransfer(addr, 1, nftAssetId)], nftAssetId)
447447 }
448448
449449
450450 func bonusByDescription (descr) = if (!(contains(descr, "\"bonusType\": \"FarmPower\"")))
451451 then throw(("NFT is not supported: " + descr))
452452 else {
453453 let bonusStr = split_4C(split_4C(descr, "\"bonus\":")[1], ",")[0]
454454 parseIntValue(drop(bonusStr, (valueOrElse(lastIndexOf(bonusStr, " "), -1) + 1)))
455455 }
456456
457457
458458 func rarityIdxByDescriprion (descr) = if (!(contains(descr, "\"rare\"")))
459459 then throw(("NFT is not supported: " + descr))
460460 else {
461461 let rarityStr = split_4C(split_4C(split_4C(descr, "\"rare\"")[1], ",")[0], "\"")[1]
462462 value(indexOf(rarityNames, rarityStr))
463463 }
464464
465465
466466 func stakeUnstakeAcresInternal (amt,address,bonusDelta) = if (if ((amt == 0))
467467 then (bonusDelta == 0)
468468 else false)
469469 then throw("Nothing to do")
470470 else {
471471 let wlgResult = invoke(wlgContract, "onStakeUnstakeLand", [address], nil)
472472 if ((wlgResult == wlgResult))
473473 then {
474474 let now = lastBlock.timestamp
475475 let timeKey = keyAcresStakedTimeByUser(address)
476476 let amountKey = keyAcresStakedAmtByUser(address)
477477 let oldAcresAmount = valueOrElse(getInteger(amountKey), 0)
478478 if (if ((0 > amt))
479479 then (0 > (oldAcresAmount + amt))
480480 else false)
481481 then throw(((("You have only " + fixedPoint(oldAcresAmount, 8)) + " ACRES staked, tried to unstake ") + fixedPoint(-(amt), 8)))
482482 else {
483483 let newAcresAmount = (oldAcresAmount + amt)
484484 let oldTotal = valueOrElse(getInteger(acresStakdTotalKey), 0)
485485 let userFpKey = keyFarmingPowerByUser(address)
486486 let oldFp = valueOrElse(getInteger(userFpKey), 0)
487487 let bonusKey = keyUserFullBonus(address)
488488 let oldBonus = valueOrElse(getInteger(acres2Contract, bonusKey), 0)
489489 if (if ((0 > bonusDelta))
490490 then (0 > (oldBonus + bonusDelta))
491491 else false)
492492 then throw((((("You have only " + fixedPoint(oldBonus, 4)) + "% bonus, and tried to unstake ") + fixedPoint(-(bonusDelta), 4)) + "%"))
493493 else {
494- let $t066116710 = getFarmingPowerByAcresAndBonus(newAcresAmount, (oldBonus + bonusDelta))
495- let newBonusedFp = $t066116710._1
496- let ignored = $t066116710._2
494+ let $t066316730 = getFarmingPowerByAcresAndBonus(newAcresAmount, (oldBonus + bonusDelta))
495+ let newBonusedFp = $t066316730._1
496+ let ignored = $t066316730._2
497497 let oldTotalFp = valueOrElse(getInteger(totalFarmingPowerKey), 0)
498498 let acresActions = if ((amt == 0))
499499 then nil
500500 else [IntegerEntry(amountKey, newAcresAmount), IntegerEntry(acresStakdTotalKey, (oldTotal + amt))]
501501 let bonusActions = if ((bonusDelta == 0))
502502 then nil
503503 else [IntegerEntry(bonusKey, (oldBonus + bonusDelta))]
504504 $Tuple2(((((acresActions ++ bonusActions) :+ IntegerEntry(timeKey, lastBlock.timestamp)) :+ IntegerEntry(userFpKey, newBonusedFp)) :+ IntegerEntry(totalFarmingPowerKey, ((oldTotalFp + newBonusedFp) - oldFp))), wlgResult)
505505 }
506506 }
507507 }
508508 else throw("Strict value is not equal to itself.")
509509 }
510510
511511
512512 func getWlgPrice (usdtBalanceCorrection) = {
513513 let issuedAmount = valueOrErrorMessage(getInteger(wlgContract, wlgIssuedAmtKey), "WLGOLD is not issued yet")
514514 let wlgUsd = assetBalance(wlgContract, usdtAssetId)
515515 let acres2Usd = (assetBalance(acres2Contract, usdtAssetId) - usdtBalanceCorrection)
516516 let investFundTotal = (assetBalance(investFundContract, usdtAssetId) + valueOrElse(getInteger(investFundContract, zbIssuedAmtKey), 0))
517517 let totalFundsUsd = ((acres2Usd + wlgUsd) + investFundTotal)
518518 fraction(totalFundsUsd, MULT8, issuedAmount)
519519 }
520520
521521
522522 func getSwapLimitAcres () = {
523523 let wlgUsd = assetBalance(wlgContract, usdtAssetId)
524524 let acres2Usd = assetBalance(this, usdtAssetId)
525525 let investFundTotal = (assetBalance(investFundContract, usdtAssetId) + valueOrElse(getInteger(investFundContract, zbIssuedAmtKey), 0))
526526 let defaultLimit = (((acres2Usd + wlgUsd) + investFundTotal) / ONE_PERCENT_DIVISOR)
527527 let lastLimitLeft = valueOrElse(getInteger(keyLastLimitLeft), defaultLimit)
528528 let lastTime = valueOrElse(getInteger(keyLastAcresSellTime), 0)
529529 let now = lastBlock.timestamp
530530 let currentLimit = (lastLimitLeft + fraction(defaultLimit, (now - lastTime), DAY_MILLIS))
531531 let limitLeftUsdt = min([currentLimit, defaultLimit])
532532 $Tuple2(IntegerEntry(keyLastAcresSellTime, now), limitLeftUsdt)
533533 }
534534
535535
536536 let arkOracle = addressFromStringValue("3PJgZ6AK1WVCpdCmEZpesHmaKvrQDdXG5og")
537537
538538 let incubator = valueOrElse(getString(arkOracle, "static_incubatorAddress"), "")
539539
540540 let breeder = valueOrElse(getString(arkOracle, "static_breederAddress"), "")
541541
542542 let turtleIncubator = valueOrElse(getString(arkOracle, "static_turtleIncubatorAddress"), "")
543543
544544 let turtleBreeder = valueOrElse(getString(arkOracle, "static_turtleBreederAddress"), "")
545545
546546 let canineIncubator = valueOrElse(getString(arkOracle, "static_canineIncubatorAddress"), "")
547547
548548 let canineBreeder = valueOrElse(getString(arkOracle, "static_canineBreederAddress"), "")
549549
550550 let felineIncubator = valueOrElse(getString(arkOracle, "static_felineIncubatorAddress"), "")
551551
552552 let felineBreeder = valueOrElse(getString(arkOracle, "static_felineBreederAddress"), "")
553553
554554 let mutantBreeder = valueOrElse(getString(arkOracle, "static_mutantIncubatorAddress"), "")
555555
556556 func isArkimalIssued (nfo) = {
557557 let issuer = toString(nfo.issuer)
558558 if (if (if (if (if (if (if (if (if (if ((chain == base58'2T'))
559559 then (issuer == oldStakingContractStr)
560560 else false)
561561 then true
562562 else (issuer == incubator))
563563 then true
564564 else (issuer == breeder))
565565 then true
566566 else (issuer == turtleIncubator))
567567 then true
568568 else (issuer == turtleBreeder))
569569 then true
570570 else (issuer == canineIncubator))
571571 then true
572572 else (issuer == canineBreeder))
573573 then true
574574 else (issuer == felineIncubator))
575575 then true
576576 else (issuer == felineBreeder))
577577 then nfo.name
578578 else if ((issuer == mutantBreeder))
579579 then nfo.description
580580 else ""
581581 }
582582
583583
584584 func stakeNftInternal (addr,assetIdStr,bonus6,userNumKey,totalNumKey,limit) = {
585585 let nftNumber = valueOrElse(getInteger(userNumKey), 0)
586586 if ((nftNumber >= limit))
587587 then throw((("You can stake max " + toString(limit)) + " of such NFTs"))
588588 else {
589- let $t01098911065 = stakeUnstakeAcresInternal(0, addr, bonus6)
590- let actions = $t01098911065._1
591- let wlgClaimedAmount = $t01098911065._2
589+ let $t01100911085 = stakeUnstakeAcresInternal(0, addr, bonus6)
590+ let actions = $t01100911085._1
591+ let wlgClaimedAmount = $t01100911085._2
592592 $Tuple2((((actions :+ IntegerEntry(userNumKey, (nftNumber + 1))) :+ IntegerEntry(totalNumKey, (valueOrElse(getInteger(totalNumKey), 0) + 1))) :+ IntegerEntry(keyStakedTimeByAssetIdAndOwner(assetIdStr, addr), lastBlock.timestamp)), wlgClaimedAmount)
593593 }
594594 }
595595
596596
597597 func stakeAcresForInternal (address,amt,shouldCleanPromo) = {
598- let $t01140011476 = stakeUnstakeAcresInternal(amt, address, 0)
599- let actions = $t01140011476._1
600- let wlgClaimedAmount = $t01140011476._2
598+ let $t01142011496 = stakeUnstakeAcresInternal(amt, address, 0)
599+ let actions = $t01142011496._1
600+ let wlgClaimedAmount = $t01142011496._2
601601 let promoActions = if (if ((height >= DAILY_PROMO_START_BLOCK))
602602 then (DAILY_PROMO_END_BLOCK > height)
603603 else false)
604604 then {
605605 let promoAcresKey = keyUserPromoAcres(address)
606606 let promoAcres = ((if (shouldCleanPromo)
607607 then 0
608608 else valueOrElse(getInteger(promoAcresKey), 0)) + amt)
609609 let tickets = (promoAcres / MULT8)
610610 let ticketsKey = keyUserPromoTickets(address)
611611 let deltaTickets = (tickets - valueOrElse(getInteger(ticketsKey), 0))
612612 let totalTickets = (valueOrElse(getInteger(keyTotalPromoTickets), 0) + deltaTickets)
613613 if (if (shouldCleanPromo)
614614 then true
615615 else (deltaTickets > 0))
616616 then {
617617 let promoMap = valueOrElse(getString(keyPromoMap), "")
618618 let userRecord = ((address + ":") + padL(tickets, 3))
619619 let newMap = if (contains(promoMap, address))
620620 then {
621621 let mapParts = split_51C(promoMap, address)
622622 if ((mapParts[0] == ""))
623623 then {
624624 let r = drop(mapParts[1], 4)
625625 if ((r == ""))
626626 then if ((tickets == 0))
627627 then ""
628628 else userRecord
629629 else if ((tickets == 0))
630630 then drop(r, 1)
631631 else (userRecord + r)
632632 }
633633 else {
634634 let r = drop(mapParts[1], 4)
635635 if ((r == ""))
636636 then if ((tickets == 0))
637637 then dropRight(mapParts[0], 1)
638638 else (mapParts[0] + userRecord)
639639 else if ((tickets == 0))
640640 then (mapParts[0] + drop(r, 1))
641641 else ((mapParts[0] + userRecord) + r)
642642 }
643643 }
644644 else if ((tickets == 0))
645645 then promoMap
646646 else if ((promoMap == ""))
647647 then userRecord
648648 else ((promoMap + "_") + userRecord)
649649 [IntegerEntry(promoAcresKey, promoAcres), IntegerEntry(ticketsKey, tickets), IntegerEntry(keyTotalPromoTickets, totalTickets), StringEntry(keyPromoMap, newMap)]
650650 }
651651 else [IntegerEntry(promoAcresKey, promoAcres)]
652652 }
653653 else nil
654654 $Tuple2((actions ++ promoActions), wlgClaimedAmount)
655655 }
656656
657657
658658 @Callable(i)
659659 func saveLastTx () = if (!(containsElement([wlgContract, marketContract], i.caller)))
660660 then throw("Access denied")
661661 else $Tuple2(prolog(i), 42)
662662
663663
664664
665665 @Callable(i)
666666 func constructorV1 (rest2Addr,oldAcrContract) = if ((i.caller != this))
667667 then throw("Permission denied")
668668 else {
669669 let oldAcrContAddr = addressFromStringValue(oldAcrContract)
670670 [IntegerEntry(acresIssuedAmountKey, getIntegerValue(oldAcrContAddr, acresIssuedAmountKey)), BinaryEntry(acresAssetIdKey, getBinaryValue(oldAcrContAddr, acresAssetIdKey)), StringEntry(keyRest2Address(), rest2Addr), StringEntry(oldAcresContractKey, oldAcrContract)]
671671 }
672672
673673
674674
675675 @Callable(i)
676676 func setBlocked (isBlocked) = if ((i.caller != this))
677677 then throw("permission denied")
678678 else [BooleanEntry(keyBlocked(), isBlocked)]
679679
680680
681681
682682 @Callable(i)
683683 func unstakeAcres (amount) = {
684684 let prologActions = prolog(i)
685685 if (if ((height >= DAILY_PROMO_START_BLOCK))
686686 then (DAILY_PROMO_END_BLOCK > height)
687687 else false)
688688 then throw("You can't unstake during Xmas promo period")
689689 else if ((0 >= amount))
690690 then throw("Amount should be positive")
691691 else {
692692 let address = toString(i.caller)
693693 if ((size(i.payments) != 0))
694694 then throw("No payments required")
695695 else {
696696 let arbReleaseTime = (valueOrElse(getInteger(wlgContract, keyLastWlgTradeTimeByUser(address)), 0) + arbitrageDelay)
697697 if ((arbReleaseTime > lastBlock.timestamp))
698698 then throw(("You traded some WLGOLD, cannot unstake until " + toString(arbReleaseTime)))
699699 else {
700- let $t01547915559 = stakeUnstakeAcresInternal(-(amount), address, 0)
701- let actions = $t01547915559._1
702- let wlgClaimedAmount = $t01547915559._2
700+ let $t01549915579 = stakeUnstakeAcresInternal(-(amount), address, 0)
701+ let actions = $t01549915579._1
702+ let wlgClaimedAmount = $t01549915579._2
703703 $Tuple2(((actions :+ ScriptTransfer(i.caller, amount, acresAssetId)) ++ prologActions), wlgClaimedAmount)
704704 }
705705 }
706706 }
707707 }
708708
709709
710710
711711 @Callable(i)
712712 func stakeAcres () = {
713713 let prologActions = prolog(i)
714714 let address = toString(i.caller)
715715 if ((size(i.payments) != 1))
716716 then throw("exactly 1 payment must be attached")
717717 else {
718718 let pmt = i.payments[0]
719719 let amt = pmt.amount
720720 if (if (!(isDefined(pmt.assetId)))
721721 then true
722722 else (value(pmt.assetId) != acresAssetId))
723723 then throw("ACRES payments only!")
724724 else {
725- let $t01601016091 = stakeAcresForInternal(address, amt, false)
726- let stakeActions = $t01601016091._1
727- let wlgClaimedAmount = $t01601016091._2
725+ let $t01603016111 = stakeAcresForInternal(address, amt, false)
726+ let stakeActions = $t01603016111._1
727+ let wlgClaimedAmount = $t01603016111._2
728728 $Tuple2((stakeActions ++ prologActions), wlgClaimedAmount)
729729 }
730730 }
731731 }
732732
733733
734734
735735 @Callable(i)
736736 func stakeAcresFor (address,amt,shouldCleanPromo) = if ((i.caller != this))
737737 then throw("Permission denied")
738738 else stakeAcresForInternal(address, amt, shouldCleanPromo)
739739
740740
741741
742742 @Callable(i)
743743 func buyAcres () = {
744744 let prologActions = prolog(i)
745745 if ((size(i.payments) != 1))
746746 then throw("exactly 1 payment must be attached")
747747 else {
748748 let pmt = i.payments[0]
749749 let usdtAmount = pmt.amount
750750 if (if (!(isDefined(pmt.assetId)))
751751 then true
752752 else (value(pmt.assetId) != usdtAssetId))
753753 then throw("USDT payments only!")
754754 else if ((MULT6 > usdtAmount))
755755 then throw((("Min payment should be " + fixedPoint(MULT6, 6)) + " USDT"))
756756 else {
757757 let acresAmount = (usdtAmount * USDT2ACRES_MULTIPLIER)
758758 let wlgAmount = fraction(usdtAmount, MULT8, getWlgPrice(usdtAmount))
759759 let oldAcresAddress = addressFromStringValue(getStringValue(oldAcresContractKey))
760760 let req = invoke(oldAcresAddress, "requestAcresCallback", [acresAmount], nil)
761761 if ((req == req))
762762 then {
763763 let wlgRemain = asInt(invoke(wlgContract, "burnWlgold", [wlgAmount], nil))
764764 $Tuple2(([ScriptTransfer(i.caller, acresAmount, acresAssetId)] ++ prologActions), wlgRemain)
765765 }
766766 else throw("Strict value is not equal to itself.")
767767 }
768768 }
769769 }
770770
771771
772772
773773 @Callable(i)
774774 func buyAcresREADONLY (usdtAmount) = {
775775 let acresAmount = (usdtAmount * USDT2ACRES_MULTIPLIER)
776776 let wlgToBurn = fraction(usdtAmount, MULT8, getWlgPrice(usdtAmount))
777777 $Tuple2(nil, [acresAmount, MULT6, acresAmount, wlgToBurn])
778778 }
779779
780780
781781
782782 @Callable(i)
783783 func sellAcres () = {
784784 let prologActions = prolog(i)
785785 if ((size(i.payments) != 1))
786786 then throw("exactly 1 payment must be attached")
787787 else {
788788 let pmt = i.payments[0]
789789 let acresAmount = pmt.amount
790790 if (if (!(isDefined(pmt.assetId)))
791791 then true
792792 else (value(pmt.assetId) != acresAssetId))
793793 then throw("ACRES payments only!")
794794 else if ((MULT7 > acresAmount))
795795 then throw((("Min payment should be " + fixedPoint(MULT7, 8)) + " ACRES"))
796796 else {
797797 let addr = toString(i.caller)
798- let $t01816318211 = getSwapLimitAcres()
799- let limitAction = $t01816318211._1
800- let maxUsdt = $t01816318211._2
798+ let $t01818318231 = getSwapLimitAcres()
799+ let limitAction = $t01818318231._1
800+ let maxUsdt = $t01818318231._2
801801 let maxAcres = (maxUsdt * USDT2ACRES_MULTIPLIER)
802802 if ((acresAmount > maxAcres))
803803 then throw((("You can sell max " + fixedPoint(maxAcres, 8)) + " ACRES"))
804804 else {
805805 let usdtAmount = ((acresAmount / USDT2ACRES_MULTIPLIER) / 2)
806806 $Tuple2(([limitAction, IntegerEntry(keyLastLimitLeft, (maxUsdt - usdtAmount)), ScriptTransfer(i.caller, usdtAmount, usdtAssetId)] ++ prologActions), usdtAmount)
807807 }
808808 }
809809 }
810810 }
811811
812812
813813
814814 @Callable(i)
815815 func sellAcresREADONLY (address,acresAmount) = {
816- let $t01870718755 = getSwapLimitAcres()
817- let limitAction = $t01870718755._1
818- let maxUsdt = $t01870718755._2
816+ let $t01872718775 = getSwapLimitAcres()
817+ let limitAction = $t01872718775._1
818+ let maxUsdt = $t01872718775._2
819819 let usdtAmount = ((acresAmount / USDT2ACRES_MULTIPLIER) / 2)
820820 $Tuple2(nil, [usdtAmount, MULT7, (maxUsdt * USDT2ACRES_MULTIPLIER), 0])
821821 }
822822
823823
824824
825825 @Callable(i)
826826 func convertOldStakes () = {
827827 let prologActions = prolog(i)
828828 if ((OLD_STAKING_DEADL > lastBlock.timestamp))
829829 then throw(("Disabled until " + toString((OLD_STAKING_DEADL / 1000))))
830830 else {
831831 let address = toString(i.caller)
832832 if ((size(i.payments) != 0))
833833 then throw("No payments required")
834834 else {
835835 let oldAcresAddress = addressFromStringValue(getStringValue(oldAcresContractKey))
836836 let amount = valueOrElse(getInteger(oldAcresAddress, keyAcresStakedAmtByUser(address)), 0)
837837 let gotAcres0 = if ((amount > 0))
838838 then asTuple2Ints(invoke(oldAcresAddress, "unstakeAcresCallback", [amount, address], nil))
839839 else $Tuple2(0, 0)
840840 let oldStakingAddress = addressFromStringValue(oldStakingContractStr)
841841 let landsStr = getString(oldStakingAddress, keyStakedLandsByOwner(address))
842842 let landsResult = if (isDefined(landsStr))
843843 then {
844844 let lands = split_51C(value(landsStr), "_")
845845 if ((size(lands) > MAX_LANDS_TO_CONVERT))
846846 then throw((("You have more than " + toString(MAX_LANDS_TO_CONVERT)) + " lands staked, please contact support, we'll process your case manually"))
847847 else {
848848 func oneLand (acc,landAssetId) = if ((landAssetId == ""))
849849 then throw("landAssetId is required")
850850 else {
851851 let r = asTuple5Ints(invoke(oldStakingAddress, "unstakeLandCallback", [landAssetId, address], nil))
852852 if ((r == r))
853853 then $Tuple5((acc._1 + r._1), (acc._2 + r._2), (acc._3 + r._3), (acc._4 + r._4), (acc._5 + r._5))
854854 else throw("Strict value is not equal to itself.")
855855 }
856856
857857 let rr = {
858858 let $l = lands
859859 let $s = size($l)
860860 let $acc0 = $Tuple5(0, 0, 0, 0, 0)
861861 func $f0_1 ($a,$i) = if (($i >= $s))
862862 then $a
863863 else oneLand($a, $l[$i])
864864
865865 func $f0_2 ($a,$i) = if (($i >= $s))
866866 then $a
867867 else throw("List size exceeds 14")
868868
869869 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14)
870870 }
871871 if ((rr == rr))
872872 then {
873873 let finalize = invoke(oldStakingAddress, "unstakeLandsFinalizeCallback", [address], nil)
874874 if ((finalize == finalize))
875875 then {
876876 let req = invoke(oldAcresAddress, "requestAcresCallback", [(((rr._1 + rr._2) + rr._3) + rr._4)], nil)
877877 if ((req == req))
878878 then {
879- let $t02126921408 = issueNftCustom(idxNameShovel, idxKeySP, idxCollDig, idxRarityP, 3, idxDescrShovel, idxBonusTypeFp, i.caller)
880- let nftActions = $t02126921408._1
881- let nftAssetId = $t02126921408._2
879+ let $t02128921428 = issueNftCustom(idxNameShovel, idxKeySP, idxCollDig, idxRarityP, 3, idxDescrShovel, idxBonusTypeFp, i.caller)
880+ let nftActions = $t02128921428._1
881+ let nftAssetId = $t02128921428._2
882882 $Tuple6(rr._1, rr._2, rr._3, rr._4, rr._5, nftActions)
883883 }
884884 else throw("Strict value is not equal to itself.")
885885 }
886886 else throw("Strict value is not equal to itself.")
887887 }
888888 else throw("Strict value is not equal to itself.")
889889 }
890890 }
891891 else $Tuple6(0, 0, 0, 0, 0, nil)
892892 let duckAssetId = valueOrElse(getString(oldStakingAddress, keyStakedDuckByOwner(address)), "")
893893 let duckResult = if ((duckAssetId != ""))
894894 then asTuple3Ints(invoke(oldStakingAddress, "unstakeDuckCallback", [duckAssetId, address], nil))
895895 else $Tuple3(0, 0, 0)
896896 let x = stakeUnstakeAcresInternal((((((((gotAcres0._1 + landsResult._1) + landsResult._2) + landsResult._3) + landsResult._4) + duckResult._1) + duckResult._2) + duckResult._3), address, 0)
897897 $Tuple2(((landsResult._6 ++ x._1) ++ prologActions), $Tuple3(gotAcres0._2, landsResult._5, x._2))
898898 }
899899 }
900900 }
901901
902902
903903
904904 @Callable(i)
905905 func unstakeLandsREADONLY (address) = {
906906 let oldStakingAddress = addressFromStringValue(oldStakingContractStr)
907907 let landsStr = getString(oldStakingAddress, keyStakedLandsByOwner(address))
908908 let landsResult = if (isDefined(landsStr))
909909 then {
910910 let lands = split_51C(value(landsStr), "_")
911911 func oneLand (acc,landAssetId) = if ((landAssetId == ""))
912912 then throw("landAssetId is required")
913913 else {
914914 let r = asTuple4Ints(invoke(oldStakingAddress, "unstakeLandREADONLY", [landAssetId, address], nil))
915915 $Tuple4((acc._1 + r._1), (acc._2 + r._2), (acc._3 + r._3), (acc._4 + r._4))
916916 }
917917
918918 let $l = lands
919919 let $s = size($l)
920920 let $acc0 = $Tuple4(0, 0, 0, 0)
921921 func $f0_1 ($a,$i) = if (($i >= $s))
922922 then $a
923923 else oneLand($a, $l[$i])
924924
925925 func $f0_2 ($a,$i) = if (($i >= $s))
926926 then $a
927927 else throw("List size exceeds 100")
928928
929929 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100)
930930 }
931931 else $Tuple4(0, 0, 0, 0)
932932 $Tuple2(nil, landsResult)
933933 }
934934
935935
936936
937937 @Callable(i)
938938 func stakeAcresCallback (addr) = if ((i.caller != addressFromStringValue(oldStakingContractStr)))
939939 then throw("Permission denied")
940940 else stakeUnstakeAcresInternal(i.payments[0].amount, addr, 0)
941941
942942
943943
944944 @Callable(i)
945945 func simulateStakeAcresREADONLY (address,addedAmount) = {
946946 let amountKey = keyAcresStakedAmtByUser(address)
947947 let newAcresAmount = (valueOrElse(getInteger(amountKey), 0) + addedAmount)
948948 let oldTotal = valueOrElse(getInteger(acresStakdTotalKey), 0)
949949 let userFpKey = keyFarmingPowerByUser(address)
950950 let oldFp = valueOrElse(getInteger(userFpKey), 0)
951951 let userBonus = valueOrElse(getInteger(acres2Contract, keyUserFullBonus(address)), 0)
952- let $t02367923766 = getFarmingPowerByAcresAndBonus(newAcresAmount, userBonus)
953- let newBonusedFp = $t02367923766._1
954- let ignored = $t02367923766._2
952+ let $t02369923786 = getFarmingPowerByAcresAndBonus(newAcresAmount, userBonus)
953+ let newBonusedFp = $t02369923786._1
954+ let ignored = $t02369923786._2
955955 let oldTotalFp = valueOrElse(getInteger(totalFarmingPowerKey), 0)
956956 let newTotalFp = ((oldTotalFp + newBonusedFp) - oldFp)
957957 $Tuple2(nil, [oldFp, newBonusedFp, oldTotalFp, newTotalFp])
958958 }
959959
960960
961961
962962 @Callable(i)
963963 func issuePickC1 (forAddress) = if ((i.caller != wlgContract))
964964 then throw("Permission denied")
965965 else issueNftCustom(idxNamePickaxe, idxKeyC, idxCollDig, idxRarityC, 1, idxDescrPickaxe, idxBonusTypeFp, addressFromStringValue(forAddress))
966966
967967
968968
969969 @Callable(i)
970970 func issueMittenP (forAddress) = if ((i.caller != this))
971971 then throw("Permission denied")
972972 else issueNftCustom(idxNameMitten, idxKeyMP, idxCollNewYear, idxRarityP, 3, idxDescrMitten, idxBonusTypeFp, addressFromStringValue(forAddress))
973973
974974
975975
976976 @Callable(i)
977977 func stakeNFT () = {
978978 let prologActions = prolog(i)
979979 if ((size(i.payments) != 1))
980980 then throw("Exactly one payment required")
981981 else {
982982 let pmt = value(i.payments[0])
983983 if ((pmt.amount != 1))
984984 then throw("NFT token should be attached as payment")
985985 else {
986986 let assetId = value(pmt.assetId)
987987 let asset = value(assetInfo(assetId))
988988 let assetIdStr = toBase58String(assetId)
989989 let addr = toString(i.caller)
990990 let nftsKey = keyStakedNFTsByOwner(addr)
991991 let nftsStr = getString(nftsKey)
992992 let nfts = if (isDefined(nftsStr))
993993 then split_4C(value(nftsStr), "_")
994994 else nil
995995 if (containsElement(nfts, assetIdStr))
996996 then throw(("Your staked NFTs already contain " + assetIdStr))
997997 else if ((size(nfts) >= MAX_NFTS_STAKED_BY_USER))
998998 then throw((("Your already staked max (" + toString(MAX_NFTS_STAKED_BY_USER)) + ") NFTs"))
999999 else {
10001000 let listAction = StringEntry(nftsKey, makeString_2C((nfts :+ assetIdStr), "_"))
10011001 if ((asset.issuer == this))
10021002 then {
1003- let $t02546525655 = stakeNftInternal(addr, assetIdStr, (bonusByDescription(value(asset.description)) * 10000), keyUserWlNftNumber(addr), keyWlNftTotalStaked, MAX_WL_NFTS)
1004- let actions = $t02546525655._1
1005- let wlgClaimedAmount = $t02546525655._2
1003+ let $t02548525675 = stakeNftInternal(addr, assetIdStr, (bonusByDescription(value(asset.description)) * 10000), keyUserWlNftNumber(addr), keyWlNftTotalStaked, MAX_WL_NFTS)
1004+ let actions = $t02548525675._1
1005+ let wlgClaimedAmount = $t02548525675._2
10061006 $Tuple2(((prologActions ++ actions) :+ listAction), wlgClaimedAmount)
10071007 }
10081008 else if ((isArkimalIssued(asset) == ""))
10091009 then throw("Only WavesLands and Arkimals NFT tokens are accepted")
10101010 else {
1011- let $t02583625987 = stakeNftInternal(addr, assetIdStr, ARK_NFT_BONUS, keyUserArkNftNumber(addr), keyArkNftTotalStaked, MAX_ARK_NFTS)
1012- let actions = $t02583625987._1
1013- let wlgClaimedAmount = $t02583625987._2
1011+ let $t02585626007 = stakeNftInternal(addr, assetIdStr, ARK_NFT_BONUS, keyUserArkNftNumber(addr), keyArkNftTotalStaked, MAX_ARK_NFTS)
1012+ let actions = $t02585626007._1
1013+ let wlgClaimedAmount = $t02585626007._2
10141014 $Tuple2(((prologActions ++ actions) :+ listAction), wlgClaimedAmount)
10151015 }
10161016 }
10171017 }
10181018 }
10191019 }
10201020
10211021
10221022
10231023 @Callable(i)
10241024 func unstakeNFT (assetIdStr) = {
10251025 let prologActions = prolog(i)
10261026 if ((size(i.payments) != 0))
10271027 then throw("No payments required")
10281028 else {
10291029 let assetId = fromBase58String(assetIdStr)
10301030 let addr = toString(i.caller)
10311031 let asset = value(assetInfo(assetId))
10321032 let timeKey = keyStakedTimeByAssetIdAndOwner(assetIdStr, addr)
10331033 if (!(isDefined(getInteger(timeKey))))
10341034 then throw((("NFT " + asset.name) + " is not staked by you"))
10351035 else {
10361036 let nftsKey = keyStakedNFTsByOwner(addr)
10371037 let nfts = split_4C(valueOrElse(getString(nftsKey), ""), "_")
10381038 let idx = indexOf(nfts, assetIdStr)
10391039 if (!(isDefined(idx)))
10401040 then throw(("Your staked NFTs don't contain " + assetIdStr))
10411041 else {
10421042 let listAction = if ((size(nfts) > 1))
10431043 then StringEntry(nftsKey, makeString_2C(removeByIndex(nfts, value(idx)), "_"))
10441044 else DeleteEntry(nftsKey)
10451045 let isWL = (asset.issuer == this)
10461046 if (isWL)
10471047 then {
10481048 let wlNftNumber = valueOrElse(getInteger(keyUserWlNftNumber(addr)), 0)
10491049 let bonusVal = (bonusByDescription(value(asset.description)) * 10000)
1050- let $t02715227231 = stakeUnstakeAcresInternal(0, addr, -(bonusVal))
1051- let actions = $t02715227231._1
1052- let wlgClaimedAmount = $t02715227231._2
1050+ let $t02717227251 = stakeUnstakeAcresInternal(0, addr, -(bonusVal))
1051+ let actions = $t02717227251._1
1052+ let wlgClaimedAmount = $t02717227251._2
10531053 $Tuple2(((((((actions :+ listAction) :+ IntegerEntry(keyUserWlNftNumber(addr), (wlNftNumber - 1))) :+ IntegerEntry(keyWlNftTotalStaked, max([0, (valueOrElse(getInteger(keyWlNftTotalStaked), 0) - 1)]))) :+ DeleteEntry(keyStakedTimeByAssetIdAndOwner(toBase58String(assetId), addr))) :+ ScriptTransfer(i.caller, 1, assetId)) ++ prologActions), wlgClaimedAmount)
10541054 }
10551055 else {
10561056 let arkimalName = isArkimalIssued(asset)
10571057 if ((arkimalName == ""))
10581058 then throw("Only WavesLands and Arkimals NFT tokens are accepted")
10591059 else {
10601060 let arkNftNumber = valueOrElse(getInteger(keyUserArkNftNumber(addr)), 0)
1061- let $t02789127975 = stakeUnstakeAcresInternal(0, addr, -(ARK_NFT_BONUS))
1062- let actions = $t02789127975._1
1063- let wlgClaimedAmount = $t02789127975._2
1061+ let $t02791127995 = stakeUnstakeAcresInternal(0, addr, -(ARK_NFT_BONUS))
1062+ let actions = $t02791127995._1
1063+ let wlgClaimedAmount = $t02791127995._2
10641064 $Tuple2((((((actions :+ listAction) :+ IntegerEntry(keyUserArkNftNumber(addr), (arkNftNumber - 1))) :+ DeleteEntry(keyStakedTimeByAssetIdAndOwner(toBase58String(assetId), addr))) :+ ScriptTransfer(i.caller, 1, assetId)) ++ prologActions), wlgClaimedAmount)
10651065 }
10661066 }
10671067 }
10681068 }
10691069 }
10701070 }
10711071
10721072
10731073
10741074 @Callable(i)
10751075 func exchangeNFTs () = if ((i.caller != this))
10761076 then throw("Temporary disabled")
10771077 else {
10781078 let prologActions = prolog(i)
10791079 if ((3 > size(i.payments)))
10801080 then throw("Min one WLGOLD and 2 NFT payments allowed")
10811081 else if ((size(i.payments) > 10))
10821082 then throw("Max one WLGOLD and 9 NFT payments allowed")
10831083 else {
10841084 let addr = toString(i.caller)
10851085 func addUp (acc,pmt) = {
10861086 let assetId = valueOrErrorMessage(pmt.assetId, "WAVES payments not allowed")
10871087 if ((assetId == wlgAssetId))
10881088 then $Tuple4((acc._1 + pmt.amount), acc._2, acc._3, acc._4)
10891089 else {
10901090 let asset = value(assetInfo(assetId))
10911091 if ((asset.issuer != this))
10921092 then throw("Only WL-issued NFTs allowed")
10931093 else {
10941094 let rarityIx = rarityIdxByDescriprion(value(asset.description))
10951095 if (if ((acc._4 > 0))
10961096 then (rarityIx != acc._4)
10971097 else false)
10981098 then throw("You can exchange only NFTs of the same rarity")
10991099 else {
11001100 let bonusPerc = bonusByDescription(value(asset.description))
11011101 $Tuple4(acc._1, (acc._2 + bonusPerc), (acc._3 :+ Burn(assetId, 1)), rarityIx)
11021102 }
11031103 }
11041104 }
11051105 }
11061106
1107- let $t02942629642 = {
1107+ let $t02944629662 = {
11081108 let $l = i.payments
11091109 let $s = size($l)
11101110 let $acc0 = $Tuple4(0, 0, nil, -1)
11111111 func $f0_1 ($a,$i) = if (($i >= $s))
11121112 then $a
11131113 else addUp($a, $l[$i])
11141114
11151115 func $f0_2 ($a,$i) = if (($i >= $s))
11161116 then $a
11171117 else throw("List size exceeds 10")
11181118
11191119 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
11201120 }
1121- let wlgFee = $t02942629642._1
1122- let totalBonus = $t02942629642._2
1123- let burnActions = $t02942629642._3
1124- let rarityIdx = $t02942629642._4
1121+ let wlgFee = $t02944629662._1
1122+ let totalBonus = $t02944629662._2
1123+ let burnActions = $t02944629662._3
1124+ let rarityIdx = $t02944629662._4
11251125 let newRarityIdx = if ((rarityIdx == idxRarityC))
11261126 then if ((rarityThresholds[idxThresholdC] > totalBonus))
11271127 then idxRarityC
11281128 else if ((rarityThresholds[idxThresholdU] > totalBonus))
11291129 then idxRarityU
11301130 else throw((("You can advance only one level of rarity, max total bonus " + toString(rarityThresholds[idxThresholdU])) + "%"))
11311131 else if ((rarityIdx == idxRarityU))
11321132 then if ((rarityThresholds[idxThresholdU] > totalBonus))
11331133 then idxRarityU
11341134 else if ((rarityThresholds[idxThresholdL] > totalBonus))
11351135 then idxRarityL
11361136 else throw((("You can advance only one level of rarity, max total bonus " + toString(rarityThresholds[idxThresholdL])) + "%"))
11371137 else if ((rarityIdx == idxRarityL))
11381138 then if ((rarityThresholds[idxThresholdL] > totalBonus))
11391139 then idxRarityL
11401140 else idxRarityE
11411141 else if ((rarityIdx == idxRarityE))
11421142 then idxRarityE
11431143 else if ((rarityIdx == idxRarityP))
11441144 then throw("You can't exchange NFTs of this rarity")
11451145 else throw("Unknown rarity")
11461146 let minWlgFee = fraction(totalBonus, MULT14, getWlgPrice(0))
11471147 let change = (wlgFee - minWlgFee)
11481148 let forTeam = (minWlgFee / 2)
11491149 let wlgRemain = asInt(invoke(wlgContract, "burnWlgold", [(minWlgFee - forTeam)], nil))
11501150 if ((0 > change))
11511151 then throw((("You need to attach " + fixedPoint(minWlgFee, 8)) + " WLGOLD as fee"))
11521152 else {
11531153 let changeActions = if ((change > 0))
11541154 then [ScriptTransfer(i.caller, change, wlgAssetId)]
11551155 else nil
1156- let $t03117931340 = issueNftCustom(idxNamePickaxe, newRarityIdx, idxCollDig, newRarityIdx, totalBonus, idxDescrPickaxe, idxBonusTypeFp, i.caller)
1157- let issueNftActions = $t03117931340._1
1158- let nftAssetId = $t03117931340._2
1156+ let $t03119931360 = issueNftCustom(idxNamePickaxe, newRarityIdx, idxCollDig, newRarityIdx, totalBonus, idxDescrPickaxe, idxBonusTypeFp, i.caller)
1157+ let issueNftActions = $t03119931360._1
1158+ let nftAssetId = $t03119931360._2
11591159 let burned = size(burnActions)
11601160 let burnCounterActions = if ((burned == 0))
11611161 then nil
11621162 else [IntegerEntry(keyNftTotalBurned, (valueOrElse(getInteger(keyNftTotalBurned), 0) + burned))]
11631163 $Tuple2((((((issueNftActions ++ burnActions) ++ burnCounterActions) ++ prologActions) ++ changeActions) :+ ScriptTransfer(addressFromStringValue(getStringValue(wlgContract, teamAddrKey)), forTeam, wlgAssetId)), $Tuple2(nftAssetId, wlgRemain))
11641164 }
11651165 }
11661166 }
11671167
11681168
11691169
11701170 @Callable(i)
11711171 func openNftChest () = if ((i.caller != this))
11721172 then throw("Temporary disabled")
11731173 else {
11741174 let prologActions = prolog(i)
11751175 if ((size(i.payments) != 1))
11761176 then throw("exactly 1 payment must be attached")
11771177 else {
11781178 let pmt = i.payments[0]
11791179 let wlgAmount = pmt.amount
11801180 if (if (!(isDefined(pmt.assetId)))
11811181 then true
11821182 else (value(pmt.assetId) != wlgAssetId))
11831183 then throw("WLGOLD payments only!")
11841184 else {
11851185 let minWlgFee = fraction(NFT_CHEST_PRICE_USDT, MULT8, getWlgPrice(0))
11861186 let change = (wlgAmount - minWlgFee)
11871187 let forTeam = (minWlgFee / 2)
11881188 let wlgRemain = asInt(invoke(wlgContract, "burnWlgold", [(minWlgFee - forTeam)], nil))
11891189 if ((0 > change))
11901190 then throw((("You need to attach " + fixedPoint(minWlgFee, 8)) + " WLGOLD as fee"))
11911191 else {
11921192 let changeActions = if ((change > 0))
11931193 then [ScriptTransfer(i.caller, change, wlgAssetId)]
11941194 else nil
11951195 let addr = toString(i.caller)
11961196 let finishKey = keyCommit(addr)
11971197 let finishBlock = valueOrErrorMessage(getInteger(finishKey), "You have to commitForRandom() first!")
11981198 if ((finishBlock > height))
11991199 then throw(("Random number is not ready yet, wait until height = " + toString(finishBlock)))
12001200 else {
12011201 let entropy = value(value(blockInfoByHeight(finishBlock)).vrf)
12021202 let salt = fromBase58String(split(valueOrElse(getString(keyCurWeekTxIdByUser(addr)), "42_DEFAULT"), "_")[1])
12031203 let rand = getRandomNumber(100, salt, entropy)
1204- let $t03342133693 = if ((84 > rand))
1204+ let $t03344133713 = if ((84 > rand))
12051205 then $Tuple2(1, idxRarityC)
12061206 else if ((98 > rand))
12071207 then $Tuple2(5, idxRarityU)
12081208 else $Tuple2(10, idxRarityL)
1209- let bonus = $t03342133693._1
1210- let rarityIdx = $t03342133693._2
1211- let $t03369633846 = issueNftCustom(idxNamePickaxe, rarityIdx, idxCollDig, rarityIdx, bonus, idxDescrPickaxe, idxBonusTypeFp, i.caller)
1212- let issueNftActions = $t03369633846._1
1213- let nftAssetId = $t03369633846._2
1209+ let bonus = $t03344133713._1
1210+ let rarityIdx = $t03344133713._2
1211+ let $t03371633866 = issueNftCustom(idxNamePickaxe, rarityIdx, idxCollDig, rarityIdx, bonus, idxDescrPickaxe, idxBonusTypeFp, i.caller)
1212+ let issueNftActions = $t03371633866._1
1213+ let nftAssetId = $t03371633866._2
12141214 $Tuple2(((((issueNftActions ++ prologActions) ++ changeActions) :+ ScriptTransfer(addressFromStringValue(getStringValue(wlgContract, teamAddrKey)), forTeam, wlgAssetId)) :+ DeleteEntry(finishKey)), $Tuple2(nftAssetId, wlgRemain))
12151215 }
12161216 }
12171217 }
12181218 }
12191219 }
12201220
12211221
12221222
12231223 @Callable(i)
12241224 func commitForRandom () = if ((i.caller != this))
12251225 then throw("Temporary disabled")
12261226 else {
12271227 let prologActions = prolog(i)
12281228 let addr = toString(i.caller)
12291229 let finishKey = keyCommit(addr)
12301230 if (isDefined(getInteger(finishKey)))
12311231 then throw("You already commited for random, please use it")
12321232 else {
12331233 let finishBlock = (height + RANDOM_DELAY)
12341234 $Tuple2(([IntegerEntry(finishKey, finishBlock)] ++ prologActions), finishBlock)
12351235 }
12361236 }
12371237
12381238
12391239
12401240 @Callable(i)
12411241 func drawPromoRound (roundId) = if ((i.caller != this))
12421242 then throw("Permission denied")
12431243 else {
12441244 let today = (height / DAY_BLOCKS)
12451245 let maxValue = valueOrElse(getInteger(keyTotalPromoTickets), 0)
12461246 if ((maxValue == 0))
12471247 then throw("No tickets to draw")
12481248 else {
12491249 let b = (today * DAY_BLOCKS)
12501250 let h = if ((b > VRF_OFFSET))
12511251 then b
12521252 else (b + VRF_OFFSET)
12531253 let entropy = value(value(blockInfoByHeight(h)).vrf)
12541254 let promoMap = valueOrElse(getString(keyPromoMap), "")
12551255 if ((promoMap == ""))
12561256 then throw("No participants")
12571257 else {
12581258 func singleDraw (ac,j) = {
12591259 let promoList = if ((ac._3 == ""))
12601260 then nil
12611261 else split_51C(ac._3, "_")
12621262 if ((j >= size(promoList)))
12631263 then ac
12641264 else {
12651265 let rand = getRandomNumber(ac._1, ac._2, entropy)
12661266 func countTickets (acc,el) = {
12671267 let parts = split(el, ":")
12681268 let addr = parts[0]
12691269 let tickets = parseIntValue(parts[1])
12701270 let newTotal = (acc._1 + tickets)
12711271 if (if ((acc._3 == ""))
12721272 then (newTotal > rand)
12731273 else false)
12741274 then $Tuple3(newTotal, tickets, addr)
12751275 else $Tuple3(newTotal, acc._2, acc._3)
12761276 }
12771277
12781278 let r = {
12791279 let $l = promoList
12801280 let $s = size($l)
12811281 let $acc0 = $Tuple3(0, 0, "")
12821282 func $f0_1 ($a,$i) = if (($i >= $s))
12831283 then $a
12841284 else countTickets($a, $l[$i])
12851285
12861286 func $f0_2 ($a,$i) = if (($i >= $s))
12871287 then $a
12881288 else throw("List size exceeds 200")
12891289
12901290 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100), 101), 102), 103), 104), 105), 106), 107), 108), 109), 110), 111), 112), 113), 114), 115), 116), 117), 118), 119), 120), 121), 122), 123), 124), 125), 126), 127), 128), 129), 130), 131), 132), 133), 134), 135), 136), 137), 138), 139), 140), 141), 142), 143), 144), 145), 146), 147), 148), 149), 150), 151), 152), 153), 154), 155), 156), 157), 158), 159), 160), 161), 162), 163), 164), 165), 166), 167), 168), 169), 170), 171), 172), 173), 174), 175), 176), 177), 178), 179), 180), 181), 182), 183), 184), 185), 186), 187), 188), 189), 190), 191), 192), 193), 194), 195), 196), 197), 198), 199), 200)
12911291 }
12921292 let winner = r._3
12931293 if ((winner == ""))
12941294 then ac
12951295 else {
12961296 let mapParts = split_51C(ac._3, winner)
12971297 let newMap = if ((mapParts[0] == ""))
12981298 then drop(mapParts[1], 5)
12991299 else (dropRight(mapParts[0], 1) + drop(mapParts[1], 4))
13001300 let winActions = if ((j == 0))
13011301 then invoke(this, "issueMittenP", [winner], nil)
13021302 else invoke(this, "stakeAcresFor", [winner, promoAwardPerRound[j], true], nil)
13031303 if ((winActions == winActions))
13041304 then {
13051305 let newSalt = fromBase58String(split(valueOrElse(getString(keyCurWeekTxIdByUser(winner)), "0_DEFAULT"), "_")[1])
13061306 $Tuple4((ac._1 - r._2), newSalt, newMap, (ac._4 :+ winner))
13071307 }
13081308 else throw("Strict value is not equal to itself.")
13091309 }
13101310 }
13111311 }
13121312
13131313 let draws = {
13141314 let $l = [0, 1, 2, 3, 4, 5]
13151315 let $s = size($l)
13161316 let $acc0 = $Tuple4(maxValue, i.transactionId, promoMap, nil)
13171317 func $f0_1 ($a,$i) = if (($i >= $s))
13181318 then $a
13191319 else singleDraw($a, $l[$i])
13201320
13211321 func $f0_2 ($a,$i) = if (($i >= $s))
13221322 then $a
13231323 else throw("List size exceeds 6")
13241324
13251325 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6)
13261326 }
13271327 $Tuple2([StringEntry(keyPromoMap, draws._3), IntegerEntry(keyTotalPromoTickets, draws._1), StringEntry(keyPromoRoundWinners(roundId), makeString(draws._4, "_"))], 0)
13281328 }
13291329 }
13301330 }
13311331
13321332

github/deemru/w8io/169f3d6 
173.84 ms