tx · 7xcNHzGsiPJoyDnsiuaofjp366X2PNDR2q6nMST4VncS

3N7UuYar6264P58FBhVWKPQAh4Yua2hgngv:  -0.02200000 Waves

2024.12.15 17:43 [3415815] smart account 3N7UuYar6264P58FBhVWKPQAh4Yua2hgngv > SELF 0.00000000 Waves

{ "type": 13, "id": "7xcNHzGsiPJoyDnsiuaofjp366X2PNDR2q6nMST4VncS", "fee": 2200000, "feeAssetId": null, "timestamp": 1734273913174, "version": 2, "chainId": 84, "sender": "3N7UuYar6264P58FBhVWKPQAh4Yua2hgngv", "senderPublicKey": "2fNSk5gmWbXBDTkSYSKd66xSgVvAYzrJnP9YSAFNvTwC", "proofs": [ "2HR6GdAECmJsBTYbpW3XZXkc66nw7earYLXaJ9JCmn5HQ1o7UhSYwA51Anty255nguu2qNnmLH7uNJAURgqnPXu3" ], "script": "base64:BgIqCAISAwoBGBIDCgEIEgMKAQgSAwoBCBIDCgEIEgMKAQgSAwoBCBIDCgEIiAEAA1NFUAICX18ABWNoYWluCQDJAQIJAMoBAggFBHRoaXMFYnl0ZXMAAQABABdEQUlMWV9QUk9NT19TVEFSVF9CTE9DSwQHJG1hdGNoMAUFY2hhaW4DCQAAAgEBVwUHJG1hdGNoMACA75ECAwkAAAIBAVQFByRtYXRjaDAAwKbQAQkAAgECDVVua25vd24gY2hhaW4ACkRBWV9CTE9DS1MEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDAAoAsDCQAAAgEBVAUHJG1hdGNoMAA8CQACAQINVW5rbm93biBjaGFpbgALV0VFS19CTE9DS1MEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDAA4E4DCQAAAgEBVAUHJG1hdGNoMAC0AQkAAgECDVVua25vd24gY2hhaW4AClZSRl9PRkZTRVQEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDAAAAMJAAACAQFUBQckbWF0Y2gwAJD5RQkAAgECDVVua25vd24gY2hhaW4AC3VzZHRBc3NldElkBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwASCE2nqyCAM/TtG7yo7ui5O8yYLdC136B5ao1CP5qA//uQMJAAACAQFUBQckbWF0Y2gwASBVsdifcoeC7+XjW42sBatl3ppDoS8WuwXzGreHpfHFGAkAAgECDVVua25vd24gY2hhaW4AFmRlZmF1bHRSZXN0MkFkZHJlc3NTdHIEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDACIzNQRndZdGE4YmlFejMxenBlRmU1REpLOHdFNXRyU3BRVkY4AwkAAAIBAVQFByRtYXRjaDACIzNON1V1WWFyNjI2NFA1OEZCaFZXS1BRQWg0WXVhMmhnbmd2CQACAQINVW5rbm93biBjaGFpbgAVb2xkU3Rha2luZ0NvbnRyYWN0U3RyBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwAiMzUExuY1h0UzFVODNENmNRYkZEM0g4ckJIUExnenhTRktaMQMJAAACAQFUBQckbWF0Y2gwAiMzTkRDeUJHNXE4NUp1YVJpaWdVZUV0YWlueWpDUVQzWHBabQkAAgECDVVua25vd24gY2hhaW4BD2dldFN0cmluZ09yRmFpbAIHYWRkcmVzcwNrZXkJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQdhZGRyZXNzBQNrZXkJALkJAgkAzAgCAgptYW5kYXRvcnkgCQDMCAIJAKUIAQUHYWRkcmVzcwkAzAgCAgEuCQDMCAIFA2tleQkAzAgCAg8gaXMgbm90IGRlZmluZWQFA25pbAIAABBJZHhDZmdBY3JlczJEYXBwAAEADUlkeENmZ1dsZ0RhcHAAAgAUSWR4Q2ZnUHV6emxlUG9vbERhcHAABAAUSWR4Q2ZnSW52ZXN0RnVuZERhcHAABQAQSWR4Q2ZnTWFya2V0RGFwcAAGAQprZXlSZXN0Q2ZnAAIOJXNfX3Jlc3RDb25maWcBD2tleVJlc3QyQWRkcmVzcwACDSVzX19yZXN0MkFkZHIBEXJlYWRSZXN0Q2ZnT3JGYWlsAQRyZXN0CQC8CQIJAQ9nZXRTdHJpbmdPckZhaWwCBQRyZXN0CQEKa2V5UmVzdENmZwAFA1NFUAEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAghyZXN0MkNmZwNpZHgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQCRAwIFCHJlc3QyQ2ZnBQNpZHgJAKwCAgIqUmVzdCBjZmcgZG9lc24ndCBjb250YWluIGFkZHJlc3MgYXQgaW5kZXggCQCkAwEFA2lkeAANcmVzdDJDb250cmFjdAkBEUBleHRyTmF0aXZlKDEwNjIpAQkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzCQEPa2V5UmVzdDJBZGRyZXNzAAUWZGVmYXVsdFJlc3QyQWRkcmVzc1N0cgAIcmVzdDJDZmcJARFyZWFkUmVzdENmZ09yRmFpbAEFDXJlc3QyQ29udHJhY3QADmFjcmVzMkNvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUIcmVzdDJDZmcFEElkeENmZ0FjcmVzMkRhcHAAC3dsZ0NvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUIcmVzdDJDZmcFDUlkeENmZ1dsZ0RhcHAAEnB1enpsZVBvb2xDb250cmFjdAkBGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIFCHJlc3QyQ2ZnBRRJZHhDZmdQdXp6bGVQb29sRGFwcAASaW52ZXN0RnVuZENvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUIcmVzdDJDZmcFFElkeENmZ0ludmVzdEZ1bmREYXBwAA5tYXJrZXRDb250cmFjdAkBGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIFCHJlc3QyQ2ZnBRBJZHhDZmdNYXJrZXREYXBwABNvbGRBY3Jlc0NvbnRyYWN0S2V5AhBvbGRBY3Jlc0NvbnRyYWN0ARVrZXlMYXN0V2Vla1R4SWRCeVVzZXIBBGFkZHIJAKwCAgITbGFzdFdlZWtUeElkQnlVc2VyXwUEYWRkcgEUa2V5Q3VyV2Vla1R4SWRCeVVzZXIBBGFkZHIJAKwCAgISY3VyV2Vla1R4SWRCeVVzZXJfBQRhZGRyAA13bGdBc3NldElkS2V5Agt3bGdfYXNzZXRJZAAKd2xnQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCcCAIFC3dsZ0NvbnRyYWN0BQ13bGdBc3NldElkS2V5AhhXTEdPTEQgaXMgbm90IGlzc3VlZCB5ZXQAD2FjcmVzQXNzZXRJZEtleQIMYWNyZXNBc3NldElkAAxhY3Jlc0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnAgCBQ5hY3JlczJDb250cmFjdAUPYWNyZXNBc3NldElkS2V5AhdBQ1JFUyBpcyBub3QgaXNzdWVkIHlldAEUa2V5U3Rha2VkRHVja0J5T3duZXIBCW93bmVyQWRkcgkArAICAhJzdGFrZWREdWNrQnlPd25lcl8FCW93bmVyQWRkcgEUa2V5U3Rha2VkTkZUc0J5T3duZXIBCW93bmVyQWRkcgkArAICAhJzdGFrZWRORlRzQnlPd25lcl8FCW93bmVyQWRkcgEWa2V5QWRkcmVzc1RvQ3VzdG9tTmFtZQEEYWRkcgkArAICAhhhY2NvdW50Q3VzdG9tTmFtZUJ5QWRkcl8FBGFkZHIBD2tleUFkZHJlc3NSZWZCeQEEYWRkcgkArAICAglhY2NSZWZCeV8FBGFkZHIBE2tleUFkZHJlc3NSZWZlcnJhbHMBBGFkZHIJAKwCAgINYWNjUmVmZXJyYWxzXwUEYWRkcgEKa2V5VXNlckJldAEEYWRkcgkArAICAgh1c2VyQmV0XwUEYWRkcgESa2V5VXNlcldlZWtUaWNrZXRzAgRhZGRyBHdlZWsJAKwCAgkArAICCQCsAgICEHVzZXJXZWVrVGlja2V0c18FBGFkZHICAV8JAKQDAQUEd2VlawETa2V5VG90YWxXZWVrVGlja2V0cwEEd2VlawkArAICAhF0b3RhbFdlZWtUaWNrZXRzXwkApAMBBQR3ZWVrAQp3aW5uaW5nQmV0AQNkYXkEAWIJAGgCBQNkYXkFCkRBWV9CTE9DS1MEAWgDCQBmAgUBYgUKVlJGX09GRlNFVAUBYgkAZAIFAWIFClZSRl9PRkZTRVQJAGoCCQCxCQEJAQV2YWx1ZQEICQEFdmFsdWUBCQDtBwEFAWgDdnJmAAQBEmtleVNlbGxlckJ5QXNzZXRJZAEHYXNzZXRJZAkArAICAgdzZWxsZXJfBQdhc3NldElkARFrZXlQcmljZUJ5QXNzZXRJZAEHYXNzZXRJZAkArAICAgZwcmljZV8FB2Fzc2V0SWQBE2tleUFzc2V0SWRzQnlTZWxsZXIBBGFkZHIJAKwCAgIJYXNzZXRJZHNfBQRhZGRyARNrZXlVc2VyUHJvbW9UaWNrZXRzAQdhZGRyZXNzCQCsAgICDXByb21vVGlja2V0c18FB2FkZHJlc3MAFGtleVRvdGFsUHJvbW9UaWNrZXRzAhF0b3RhbFByb21vVGlja2V0cwALa2V5UHJvbW9NYXACCHByb21vTWFwARRrZXlQcm9tb1JvdW5kV2lubmVycwEDZGF5CQCsAgICDWRhaWx5V2lubmVyc18JAKQDAQUDZGF5ABJwcm9tb0F3YXJkUGVyUm91bmQJAMwIAgAACQDMCAIAgMq17gEJAMwIAgCAwtcvCQDMCAIAgMLXLwkAzAgCAIDC1y8JAMwIAgCAwtcvBQNuaWwAC2l4V2xnQW1vdW50AAAACGl4V2xnV2xnAAEACml4V2xnUHJpY2UAAgAKaXhXbGdGdW5kcwADAA1peFdsZ0FjdGl2aXR5AAQAC2l4V2xnQWNyZXMyAAUADml4V2xnQXJiaXRyYWdlAAYACWl4V2xnUG9vbAAHAA5peFdsZ0lzc3VlVGltZQAIABRpeFdsZ0xhc3RUZWFtQWN0VGltZQAJAA5peFdsZ1RlYW1Ub3RhbAAKAA9peFdsZ1RlYW1BbUxlZnQACwATaXhXbGdUZWFtQW1BdmFpbE5vdwAMAA9peFdsZ1RlYW1XbGdvbGQADQANaXhXbGdBY3RUb3RhbAAOAA5peFdsZ0FjdEFtTGVmdAAPABJpeFdsZ0FjdEFtQXZhaWxOb3cAEAAOaXhXbGdBY3RXbGdvbGQAEQAOaXhXbGdDdXJQZXJpb2QAEgAQaXhXbGdBbUxlZnRUb3RhbAATABppeFdsZ0N1clBlcmlvZERpc3RyaWJ1dGlvbgAUABFpeFdsZ0xhc3RVc2VyVGltZQAVABVpeFdsZ0ludmVzdEZ1bmRBbW91bnQAFgATaXhXbGdVc2VyQW1BdmFpbE5vdwAXABBpeFdsZ0VmZlVzZXJUaW1lABgAEml4V2xnSXNzdWUxMEFtb3VudAAZABtpeFdsZ01hcmtldGluZ0lzc3VlMTBBbW91bnQAGgAWaXhXbGdUZWFtSXNzdWUxMEFtb3VudAAbAA9peFdsZ1VzZXIxMHBhcnQAHAAQaXhXbGdJc3N1ZTEwVGltZQAdABZpeFdsZ1RvdGFsRmFybWluZ1Bvd2VyAB4AFWl4V2xnQWNyZXNTdGFrZWRUb3RhbAAfABNpeFdsZ05mdFRvdGFsSXNzdWVkACAAE2l4V2xnTmZ0VG90YWxCdXJuZWQAIQAVaXhXbGdXbE5mdFRvdGFsU3Rha2VkACIAFGl4V2xnV2xOZnRVc2VyU3Rha2VkACMBDGFzVHVwbGU0SW50cwEDdmFsBAckbWF0Y2gwBQN2YWwDCQABAgUHJG1hdGNoMAIUKEludCwgSW50LCBJbnQsIEludCkEAXQFByRtYXRjaDAFAXQJAAIBAiZmYWlsIHRvIGNhc3QgaW50byAoSW50LCBJbnQsIEludCwgSW50KQEMYXNUdXBsZTNJbnRzAQN2YWwEByRtYXRjaDAFA3ZhbAMJAAECBQckbWF0Y2gwAg8oSW50LCBJbnQsIEludCkEAXQFByRtYXRjaDAFAXQJAAIBAiFmYWlsIHRvIGNhc3QgaW50byAoSW50LCBJbnQsIEludCkBDGFzVHVwbGUySW50cwEDdmFsBAckbWF0Y2gwBQN2YWwDCQABAgUHJG1hdGNoMAIKKEludCwgSW50KQQBdAUHJG1hdGNoMAUBdAkAAgECHGZhaWwgdG8gY2FzdCBpbnRvIChJbnQsIEludCkAA002XwDAhD0AA004XwCAwtcvAApURUFNX1NIQVJFAMCaDAAOQUNUSVZJVFlfU0hBUkUAoI0GAAxQTEFZRVJfU0hBUkUAgLUYAAtZRUFSX01JTExJUwCAhuvHdQAGREFZX01TAIC4mSkAB0lTU1VFMTAAgJTr3AMAD1BMQVlFUlMxMF9TSEFSRQCA6jAAEU1BUktFVElORzEwX1NIQVJFAKCNBgAMVEVBTTEwX1NIQVJFAKCNBgARTkVXX1NUQUtJTkdfU1RBUlQAgPO4wrEyAAp0ZWFtQWRyS2V5Agh0ZWFtQWRkcgAObGFzdFRlYW1UaW1LZXkCFGxhc3RDbGFpbWVkVGltZV90ZWFtAA50ZWFtQW10TGVmdEtleQIOdGVhbUFtb3VudExlZnQAFGxhc3RBY3Rpdml0aWVzVGltS2V5AhpsYXN0Q2xhaW1lZFRpbWVfYWN0aXZpdGllcwANYWN0QW10TGVmdEtleQIUYWN0aXZpdGllc0Ftb3VudExlZnQAEXN0YWtlcnNBbXRMZWZ0S2V5AhFzdGFrZXJzQW1vdW50TGVmdAEWa2V5TGFzdENsYWltVGltZUJ5VXNlcgEEYWRkcgkArAICAhRsYXN0Q2xhaW1lZFRpbWVVc2VyXwUEYWRkcgENZGlzdHJCeVBlcmlvZAIMaXNzdWVkQW1vdW50BnBlcmlvZAkAawMFDGlzc3VlZEFtb3VudAkAaAIFDFBMQVlFUl9TSEFSRQkAZAIFBnBlcmlvZAABCQBoAgAGBQNNNl8AEXdsZ0lzc3VlMTBUaW1lS2V5Ag93bGdfaXNzdWUxMFRpbWUADndsZ0lzc3VlVGltS2V5Ag13bGdfaXNzdWVUaW1lAA93bGdJc3N1ZWRBbXRLZXkCEHdsZ19pc3N1ZWRBbW91bnQADnpiSXNzdWVkQW10S2V5AhJ6YmlsbF9pc3N1ZWRBbW91bnQBF2tleUFjcmVzU3Rha2VkQW10QnlVc2VyAQRhZGRyCQCsAgICGGFjcmVzU3Rha2VkQW1vdW50QnlVc2VyXwUEYWRkcgASYWNyZXNTdGFrZFRvdGFsS2V5AhZhY3Jlc1N0YWtlZEFtb3VudFRvdGFsABR0b3RhbEZhcm1pbmdQb3dlcktleQIRdG90YWxGYXJtaW5nUG93ZXIACWRhcHAyUmVzdAAAAAxkYXBwMlN0YWtpbmcAAQAIZGFwcDJXbGcAAgALZGFwcDJQdXp6bGUAAwAPZGFwcDJJbnZlc3RGdW5kAAQAEWtleU5mdFRvdGFsSXNzdWVkAg5uZnRUb3RhbElzc3VlZAARa2V5TmZ0VG90YWxCdXJuZWQCDm5mdFRvdGFsQnVybmVkABNrZXlXbE5mdFRvdGFsU3Rha2VkAhBXbE5mdFRvdGFsU3Rha2VkARJrZXlVc2VyV2xOZnROdW1iZXIBBGFkZHIJAKwCAgIQdXNlcldsTmZ0TnVtYmVyXwUEYWRkcgEQa2V5VXNlckZ1bGxCb251cwEEYWRkcgkArAICAg51c2VyRnVsbEJvbnVzXwUEYWRkcgAKbGV2ZWxBY3JlcwkAzAgCAAAJAMwIAgAKCQDMCAIAFAkAzAgCACgJAMwIAgBQCQDMCAIAlgEJAMwIAgD6AQkAzAgCAJADCQDMCAIAvAUJAMwIAgDoBwUDbmlsAQ9nZXRMZXZlbEJ5QWNyZXMBBWFjcmVzBANhY3IJAGkCCQBkAgUFYWNyZXMA/8HXLwUDTThfCgEHY2hlY2tlcgIDYWNjBGl0ZW0DCQBnAgUEaXRlbQUDYWNyBQNhY2MJAGQCBQNhY2MAAQoAAiRsBQpsZXZlbEFjcmVzCgACJHMJAJADAQUCJGwKAAUkYWNjMAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQdjaGVja2VyAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKARZnZXRGYXJtaW5nUG93ZXJCeUFjcmVzAQVhY3JlcwkAaAIJAGgCBQVhY3JlcwAUCQBkAgkBD2dldExldmVsQnlBY3JlcwEFBWFjcmVzAAQBHmdldEZhcm1pbmdQb3dlckJ5QWNyZXNBbmRCb251cwIFYWNyZXMGYm9udXM2BApub3RCb251c2VkCQEWZ2V0RmFybWluZ1Bvd2VyQnlBY3JlcwEFBWFjcmVzCQCUCgIJAGsDBQpub3RCb251c2VkCQBkAgUDTTZfBQZib251czYFA002XwUKbm90Qm9udXNlZAEQZ2V0RmFybWluZ1Bvd2VycwISdXNlckFkZHJTdHJPckVtcHR5DmFjcmVzMkNvbnRyYWN0BAd0b3RhbEZQCQELdmFsdWVPckVsc2UCCQCaCAIFDmFjcmVzMkNvbnRyYWN0BRR0b3RhbEZhcm1pbmdQb3dlcktleQAABAl1c2VyQWNyZXMJAQt2YWx1ZU9yRWxzZQIJAJoIAgUOYWNyZXMyQ29udHJhY3QJARdrZXlBY3Jlc1N0YWtlZEFtdEJ5VXNlcgEFEnVzZXJBZGRyU3RyT3JFbXB0eQAABAl1c2VyQm9udXMJAQt2YWx1ZU9yRWxzZQIJAJoIAgUOYWNyZXMyQ29udHJhY3QJARBrZXlVc2VyRnVsbEJvbnVzAQUSdXNlckFkZHJTdHJPckVtcHR5AAAECCR0MDc5MTE5CQEeZ2V0RmFybWluZ1Bvd2VyQnlBY3Jlc0FuZEJvbnVzAgUJdXNlckFjcmVzBQl1c2VyQm9udXMEDXVzZXJGUGJvbnVzZWQIBQgkdDA3OTExOQJfMQQQdXNlckZQbm90Qm9udXNlZAgFCCR0MDc5MTE5Al8yCQDMCAIFB3RvdGFsRlAJAMwIAgUNdXNlckZQYm9udXNlZAkAzAgCBRB1c2VyRlBub3RCb251c2VkCQDMCAIFCXVzZXJCb251cwUDbmlsAAppZHhUb3RhbEZQAAAAEGlkeFVzZXJGUGJvbnVzZWQAAQATaWR4VXNlckZQbm90Qm9udXNlZAACAQxnZXRXbGdTdGF0czIEC3VzZXJBZGRyT3B0CWNvbnRyYWN0cwZ1c2R0SWQVdXNkdEJhbGFuY2VDb3JyZWN0aW9uBAxpc3N1ZWRBbW91bnQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCCQCRAwIFCWNvbnRyYWN0cwUIZGFwcDJXbGcFD3dsZ0lzc3VlZEFtdEtleQIYV0xHT0xEIGlzIG5vdCBpc3N1ZWQgeWV0BAdyZXN0VXNkCQDwBwIJAJEDAgUJY29udHJhY3RzBQlkYXBwMlJlc3QFBnVzZHRJZAQGd2xnVXNkCQBlAgkA8AcCCQCRAwIFCWNvbnRyYWN0cwUIZGFwcDJXbGcFBnVzZHRJZAUVdXNkdEJhbGFuY2VDb3JyZWN0aW9uBAlwdXp6bGVVc2QJAPAHAgkAkQMCBQljb250cmFjdHMFC2RhcHAyUHV6emxlBQZ1c2R0SWQECWFjcmVzMlVzZAkA8AcCCQCRAwIFCWNvbnRyYWN0cwUMZGFwcDJTdGFraW5nBQZ1c2R0SWQEEWludmVzdEZuZENvbnRyYWN0CQCRAwIFCWNvbnRyYWN0cwUPZGFwcDJJbnZlc3RGdW5kBA9pbnZlc3RGdW5kVG90YWwJAGQCCQDwBwIFEWludmVzdEZuZENvbnRyYWN0BQZ1c2R0SWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgURaW52ZXN0Rm5kQ29udHJhY3QFDnpiSXNzdWVkQW10S2V5AAAEDXRvdGFsRnVuZHNVc2QJAGQCCQBkAgUJYWNyZXMyVXNkBQZ3bGdVc2QFD2ludmVzdEZ1bmRUb3RhbAQFd2xnSWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnAgCCQCRAwIFCWNvbnRyYWN0cwUIZGFwcDJXbGcCC3dsZ19hc3NldElkAhNOb3QgaW5pdGlhbGl6ZWQgeWV0BANub3cIBQlsYXN0QmxvY2sJdGltZXN0YW1wBAlpc3N1ZVRpbWUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCCQCRAwIFCWNvbnRyYWN0cwUIZGFwcDJXbGcFDndsZ0lzc3VlVGltS2V5Ag9Ob3QgaW5pdGlhbGl6ZWQEBndsZ1dsZwkA8AcCCQCRAwIFCWNvbnRyYWN0cwUIZGFwcDJXbGcFBXdsZ0lkBAl0ZWFtVG90YWwJAGsDBQxpc3N1ZWRBbW91bnQFClRFQU1fU0hBUkUFA002XwQOdGVhbUFtb3VudExlZnQJAQt2YWx1ZU9yRWxzZQIJAJoIAgkAkQMCBQljb250cmFjdHMFCGRhcHAyV2xnBQ50ZWFtQW10TGVmdEtleQUJdGVhbVRvdGFsBAxsYXN0VGVhbVRpbWUJAQt2YWx1ZU9yRWxzZQIJAJoIAgkAkQMCBQljb250cmFjdHMFCGRhcHAyV2xnBQ5sYXN0VGVhbVRpbUtleQUJaXNzdWVUaW1lBAh0ZWFtQWRkcgkBEUBleHRyTmF0aXZlKDEwNjIpAQkBBXZhbHVlAQkAnQgCCQCRAwIFCWNvbnRyYWN0cwUIZGFwcDJXbGcFCnRlYW1BZHJLZXkEFnRlYW1BbW91bnRBdmFpbGFibGVOb3cJAJcDAQkAzAgCCQBrAwUJdGVhbVRvdGFsCQBlAgUDbm93BQxsYXN0VGVhbVRpbWUJAGgCAAMFC1lFQVJfTUlMTElTCQDMCAIFDnRlYW1BbW91bnRMZWZ0BQNuaWwECnRlYW1XbGdvbGQJAPAHAgUIdGVhbUFkZHIFBXdsZ0lkBAhhY3RUb3RhbAkAawMFDGlzc3VlZEFtb3VudAUOQUNUSVZJVFlfU0hBUkUFA002XwQNYWN0QW1vdW50TGVmdAkBC3ZhbHVlT3JFbHNlAgkAmggCCQCRAwIFCWNvbnRyYWN0cwUIZGFwcDJXbGcFDWFjdEFtdExlZnRLZXkFCGFjdFRvdGFsBBJsYXN0QWN0aXZpdGllc1RpbWUJAQt2YWx1ZU9yRWxzZQIJAJoIAgkAkQMCBQljb250cmFjdHMFCGRhcHAyV2xnBRRsYXN0QWN0aXZpdGllc1RpbUtleQUJaXNzdWVUaW1lBBVhY3RBbW91bnRBdmFpbGFibGVOb3cJAJcDAQkAzAgCCQBrAwUIYWN0VG90YWwJAGUCBQNub3cFEmxhc3RBY3Rpdml0aWVzVGltZQkAaAIAAwULWUVBUl9NSUxMSVMJAMwIAgUNYWN0QW1vdW50TGVmdAUDbmlsBAlhY3RXbGdvbGQJAPAHAgkAkQMCBQljb250cmFjdHMFCWRhcHAyUmVzdAUFd2xnSWQEDGxhc3RVc2VyVGltZQkBC3ZhbHVlT3JFbHNlAgkAmggCCQCRAwIFCWNvbnRyYWN0cwUIZGFwcDJXbGcJARZrZXlMYXN0Q2xhaW1UaW1lQnlVc2VyAQULdXNlckFkZHJPcHQFCWlzc3VlVGltZQQObGFzdFVzZXJQZXJpb2QJAGkCCQBlAgUMbGFzdFVzZXJUaW1lBQlpc3N1ZVRpbWUFC1lFQVJfTUlMTElTBApub3dMaW1pdGVkCQCXAwEJAMwIAgUDbm93CQDMCAIJAGQCBQlpc3N1ZVRpbWUJAGgCAAMFC1lFQVJfTUlMTElTBQNuaWwECWN1clBlcmlvZAkAlwMBCQDMCAIJAGkCCQBlAgUDbm93BQlpc3N1ZVRpbWUFC1lFQVJfTUlMTElTCQDMCAIAAgUDbmlsBANlZmYJARBnZXRGYXJtaW5nUG93ZXJzAgULdXNlckFkZHJPcHQJAJEDAgUJY29udHJhY3RzBQxkYXBwMlN0YWtpbmcEFWN1clBlcmlvZERpc3RyaWJ1dGlvbgkBDWRpc3RyQnlQZXJpb2QCBQxpc3N1ZWRBbW91bnQFCWN1clBlcmlvZAQNcHJldlBlcmlvZEVuZAkAZAIFCWlzc3VlVGltZQkAaAIFC1lFQVJfTUlMTElTBQljdXJQZXJpb2QEEXByZXZQcmV2UGVyaW9kRW5kCQBkAgUJaXNzdWVUaW1lCQBoAgULWUVBUl9NSUxMSVMJAGUCBQljdXJQZXJpb2QAAQQCYTAJAGsDBRVjdXJQZXJpb2REaXN0cmlidXRpb24JAGUCBQpub3dMaW1pdGVkBQxsYXN0VXNlclRpbWUFC1lFQVJfTUlMTElTBA11c2VyQXZhaWxhYmxlAwkAAAIFDmxhc3RVc2VyUGVyaW9kBQljdXJQZXJpb2QFAmEwAwkAAAIFDmxhc3RVc2VyUGVyaW9kCQBlAgUJY3VyUGVyaW9kAAEEAmExCQBrAwkBDWRpc3RyQnlQZXJpb2QCBQxpc3N1ZWRBbW91bnQJAGUCBQljdXJQZXJpb2QAAQkAZQIFDXByZXZQZXJpb2RFbmQFDGxhc3RVc2VyVGltZQULWUVBUl9NSUxMSVMJAGQCBQJhMQUCYTAEAmEyCQBrAwkBDWRpc3RyQnlQZXJpb2QCBQxpc3N1ZWRBbW91bnQJAGUCBQljdXJQZXJpb2QAAgkAZQIFEXByZXZQcmV2UGVyaW9kRW5kBQxsYXN0VXNlclRpbWUFC1lFQVJfTUlMTElTBAJhMQkBDWRpc3RyQnlQZXJpb2QCBQxpc3N1ZWRBbW91bnQJAGUCBQljdXJQZXJpb2QAAQkAZAIJAGQCBQJhMgUCYTEFAmEwBA9hbW91bnRMZWZ0VG90YWwJAQt2YWx1ZU9yRWxzZQIJAJoIAgkAkQMCBQljb250cmFjdHMFCGRhcHAyV2xnBRFzdGFrZXJzQW10TGVmdEtleQAABAp1c2VyQW1vdW50AwkBAiE9AgkAkQMCBQNlZmYFCmlkeFRvdGFsRlAAAAkAawMFDXVzZXJBdmFpbGFibGUJAJEDAgUDZWZmBRBpZHhVc2VyRlBib251c2VkCQCRAwIFA2VmZgUKaWR4VG90YWxGUAAABA9sYXN0SXNzdWUxMFRpbWUJAQt2YWx1ZU9yRWxzZQIJAJoIAgkAkQMCBQljb250cmFjdHMFCGRhcHAyV2xnBRF3bGdJc3N1ZTEwVGltZUtleQURTkVXX1NUQUtJTkdfU1RBUlQEDWlzc3VlMTBBbW91bnQJAGsDBQdJU1NVRTEwCQCWAwEJAMwIAgkAZQIFA25vdwUPbGFzdElzc3VlMTBUaW1lCQDMCAIAAAUDbmlsBQZEQVlfTVMEFm1hcmtldGluZ0lzc3VlMTBBbW91bnQJAGsDBQ1pc3N1ZTEwQW1vdW50BRFNQVJLRVRJTkcxMF9TSEFSRQUDTTZfBBF0ZWFtSXNzdWUxMEFtb3VudAkAawMFDWlzc3VlMTBBbW91bnQFDFRFQU0xMF9TSEFSRQUDTTZfBA51c2VyMTBJbnRlcnZhbAkAlgMBCQDMCAIJAGUCBQNub3cJAJYDAQkAzAgCBRFORVdfU1RBS0lOR19TVEFSVAkAzAgCBQxsYXN0VXNlclRpbWUFA25pbAkAzAgCAAAFA25pbAQKdXNlcjEwcGFydAMJAQIhPQIJAJEDAgUDZWZmBQppZHhUb3RhbEZQAAAJAGsDCQBrAwkAawMFB0lTU1VFMTAFDnVzZXIxMEludGVydmFsBQZEQVlfTVMJAJEDAgUDZWZmBRBpZHhVc2VyRlBib251c2VkCQCRAwIFA2VmZgUKaWR4VG90YWxGUAUPUExBWUVSUzEwX1NIQVJFBQNNNl8AAAQObmV3SXNzdWUxMFRpbWUJAJYDAQkAzAgCBRFORVdfU1RBS0lOR19TVEFSVAkAzAgCBQNub3cFA25pbAQQYWNyZXNTdGFrZWRUb3RhbAkBC3ZhbHVlT3JFbHNlAgkAmggCCQCRAwIFCWNvbnRyYWN0cwUMZGFwcDJTdGFraW5nBRJhY3Jlc1N0YWtkVG90YWxLZXkAAAQObmZ0VG90YWxJc3N1ZWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgkAkQMCBQljb250cmFjdHMFDGRhcHAyU3Rha2luZwURa2V5TmZ0VG90YWxJc3N1ZWQAAAQObmZ0VG90YWxCdXJuZWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgkAkQMCBQljb250cmFjdHMFDGRhcHAyU3Rha2luZwURa2V5TmZ0VG90YWxCdXJuZWQAAAQQd2xOZnRUb3RhbFN0YWtlZAkBC3ZhbHVlT3JFbHNlAgkAmggCCQCRAwIFCWNvbnRyYWN0cwUMZGFwcDJTdGFraW5nBRNrZXlXbE5mdFRvdGFsU3Rha2VkAAAED3dsTmZ0VXNlclN0YWtlZAkBC3ZhbHVlT3JFbHNlAgkAmggCCQCRAwIFCWNvbnRyYWN0cwUMZGFwcDJTdGFraW5nCQESa2V5VXNlcldsTmZ0TnVtYmVyAQkBC3ZhbHVlT3JFbHNlAgULdXNlckFkZHJPcHQCAAAACQDMCAIFDGlzc3VlZEFtb3VudAkAzAgCBQZ3bGdXbGcJAMwIAgkAawMFDXRvdGFsRnVuZHNVc2QFA004XwUMaXNzdWVkQW1vdW50CQDMCAIFDXRvdGFsRnVuZHNVc2QJAMwIAgUHcmVzdFVzZAkAzAgCBQlhY3JlczJVc2QJAMwIAgUGd2xnVXNkCQDMCAIFCXB1enpsZVVzZAkAzAgCBQlpc3N1ZVRpbWUJAMwIAgUMbGFzdFRlYW1UaW1lCQDMCAIFCXRlYW1Ub3RhbAkAzAgCBQ50ZWFtQW1vdW50TGVmdAkAzAgCBRZ0ZWFtQW1vdW50QXZhaWxhYmxlTm93CQDMCAIFCnRlYW1XbGdvbGQJAMwIAgUIYWN0VG90YWwJAMwIAgUNYWN0QW1vdW50TGVmdAkAzAgCBRVhY3RBbW91bnRBdmFpbGFibGVOb3cJAMwIAgUJYWN0V2xnb2xkCQDMCAIFCWN1clBlcmlvZAkAzAgCBQ9hbW91bnRMZWZ0VG90YWwJAMwIAgUVY3VyUGVyaW9kRGlzdHJpYnV0aW9uCQDMCAIFDGxhc3RVc2VyVGltZQkAzAgCBQ9pbnZlc3RGdW5kVG90YWwJAMwIAgUKdXNlckFtb3VudAkAzAgCBQpub3dMaW1pdGVkCQDMCAIFDWlzc3VlMTBBbW91bnQJAMwIAgUWbWFya2V0aW5nSXNzdWUxMEFtb3VudAkAzAgCBRF0ZWFtSXNzdWUxMEFtb3VudAkAzAgCBQp1c2VyMTBwYXJ0CQDMCAIFDm5ld0lzc3VlMTBUaW1lCQDMCAIJAJEDAgUDZWZmBQppZHhUb3RhbEZQCQDMCAIFEGFjcmVzU3Rha2VkVG90YWwJAMwIAgUObmZ0VG90YWxJc3N1ZWQJAMwIAgUObmZ0VG90YWxCdXJuZWQJAMwIAgUQd2xOZnRUb3RhbFN0YWtlZAkAzAgCBQ93bE5mdFVzZXJTdGFrZWQFA25pbAEOd2FsbGV0SW50ZXJuYWwBDnVzZXJBZGRyZXNzT3B0BARhZGRyCQCmCAEFDnVzZXJBZGRyZXNzT3B0BAdiYWxhbmNlAwkBCWlzRGVmaW5lZAEFBGFkZHIJAO8HAQkBBXZhbHVlAQUEYWRkcgkBDkJhbGFuY2VEZXRhaWxzBAAAAAAAAAAABAt1c2R0QmFsYW5jZQMJAQlpc0RlZmluZWQBBQRhZGRyCQDwBwIJAQV2YWx1ZQEFBGFkZHIFC3VzZHRBc3NldElkAAAEDXdsZ29sZEJhbGFuY2UDCQEJaXNEZWZpbmVkAQUEYWRkcgkA8AcCCQEFdmFsdWUBBQRhZGRyBQp3bGdBc3NldElkAAAECmN1c3RvbU5hbWUJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUOYWNyZXMyQ29udHJhY3QJARZrZXlBZGRyZXNzVG9DdXN0b21OYW1lAQUOdXNlckFkZHJlc3NPcHQFDnVzZXJBZGRyZXNzT3B0BAhyZWZCeUtleQkBD2tleUFkZHJlc3NSZWZCeQEFDnVzZXJBZGRyZXNzT3B0BAVyZWZCeQkAnQgCBQ5hY3JlczJDb250cmFjdAUIcmVmQnlLZXkEBHJlZnMJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUOYWNyZXMyQ29udHJhY3QJARNrZXlBZGRyZXNzUmVmZXJyYWxzAQUOdXNlckFkZHJlc3NPcHQCAAQIbGFzdFR4SWQJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUOYWNyZXMyQ29udHJhY3QJARVrZXlMYXN0V2Vla1R4SWRCeVVzZXIBBQ51c2VyQWRkcmVzc09wdAIABAdjdXJUeElkCQELdmFsdWVPckVsc2UCCQCdCAIFDmFjcmVzMkNvbnRyYWN0CQEUa2V5Q3VyV2Vla1R4SWRCeVVzZXIBBQ51c2VyQWRkcmVzc09wdAIABAxhY3Jlc0JhbGFuY2UDCQEJaXNEZWZpbmVkAQUEYWRkcgkA8AcCCQEFdmFsdWUBBQRhZGRyBQxhY3Jlc0Fzc2V0SWQAAAQLc3Rha2VkQWNyZXMJAQt2YWx1ZU9yRWxzZQIJAJoIAgUOYWNyZXMyQ29udHJhY3QJARdrZXlBY3Jlc1N0YWtlZEFtdEJ5VXNlcgEFDnVzZXJBZGRyZXNzT3B0AAAEA2x2bAkBD2dldExldmVsQnlBY3JlcwEFC3N0YWtlZEFjcmVzBAJmcAkBEGdldEZhcm1pbmdQb3dlcnMCBQ51c2VyQWRkcmVzc09wdAUOYWNyZXMyQ29udHJhY3QEDmFjcmVzVG9OZXh0THZsAwkAZwIFA2x2bAkAkAMBBQpsZXZlbEFjcmVzAAAJAGUCCQBkAgkAaAIJAJEDAgUKbGV2ZWxBY3JlcwUDbHZsBQNNOF8AAQULc3Rha2VkQWNyZXMEBG5mdHMJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUOYWNyZXMyQ29udHJhY3QJARRrZXlTdGFrZWRORlRzQnlPd25lcgEFDnVzZXJBZGRyZXNzT3B0AgAEBWJvbnVzCQELdmFsdWVPckVsc2UCCQCaCAIFDmFjcmVzMkNvbnRyYWN0CQEQa2V5VXNlckZ1bGxCb251cwEFDnVzZXJBZGRyZXNzT3B0AAAJAMwIAgkArAICAhIlcyVzX19jdXN0b21OYW1lX18FCmN1c3RvbU5hbWUJAMwIAgkArAICAhIlcyVzX19yZWZlcnJlZEJ5X18JAQt2YWx1ZU9yRWxzZQIFBXJlZkJ5AgAJAMwIAgkArAICAhElcyVzX19yZWZlcnJhbHNfXwUEcmVmcwkAzAgCCQCsAgICFCVzJXNfX2xhc3RXZWVrVHhJZF9fBQhsYXN0VHhJZAkAzAgCCQCsAgICEyVzJXNfX2N1cldlZWtUeElkX18FCGxhc3RUeElkCQDMCAIJAKwCAgIUJXMlZF9fd2F2ZXNCYWxhbmNlX18JAKQDAQgFB2JhbGFuY2UJYXZhaWxhYmxlCQDMCAIJAKwCAgITJXMlZF9fdXNkdEJhbGFuY2VfXwkApAMBBQt1c2R0QmFsYW5jZQkAzAgCCQCsAgICFSVzJWRfX3dsZ29sZEJhbGFuY2VfXwkApAMBBQ13bGdvbGRCYWxhbmNlCQDMCAIJAKwCAgIUJXMlZF9fYWNyZXNCYWxhbmNlX18JAKQDAQUMYWNyZXNCYWxhbmNlCQDMCAIJAKwCAgITJXMlZF9fc3Rha2VkQWNyZXNfXwkApAMBBQtzdGFrZWRBY3JlcwkAzAgCCQCsAgICEiVzJWRfX2N1cnJlbnRMdmxfXwkApAMBBQNsdmwJAMwIAgkArAICAhYlcyVkX19hY3Jlc1RvTmV4dEx2bF9fCQCkAwEFDmFjcmVzVG9OZXh0THZsCQDMCAIJAKwCAgIQJXMlc19fdXNlck5GVHNfXwUEbmZ0cwkAzAgCCQCsAgICESVzJWRfX3VzZXJCb251c19fCQCkAwEFBWJvbnVzCQDMCAIJAKwCAgIcJXMlZF9fdXNlckJhc2VGYXJtaW5nUG93ZXJfXwkApAMBCQCRAwIFAmZwBRNpZHhVc2VyRlBub3RCb251c2VkCQDMCAIJAKwCAgIYJXMlZF9fdXNlckZhcm1pbmdQb3dlcl9fCQCkAwEJAJEDAgUCZnAFEGlkeFVzZXJGUGJvbnVzZWQJAMwIAgkArAICAhklcyVkX190b3RhbEZhcm1pbmdQb3dlcl9fCQCkAwEJAJEDAgUCZnAFCmlkeFRvdGFsRlAFA25pbAgBaQENY29uc3RydWN0b3JWMQEJY29udHJhY3RzAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIScGVybWlzc2lvbnMgZGVuaWVkCgEKZGVzY3JpcHRvcgIDYWNjC2lnbm9yZWRJdGVtCQCsAgIFA2FjYwICJXMEBWRlc2NyCgACJGwFCWNvbnRyYWN0cwoAAiRzCQCQAwEFAiRsCgAFJGFjYzACAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEKZGVzY3JpcHRvcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgkAzAgCCQELU3RyaW5nRW50cnkCCQEKa2V5UmVzdENmZwAJALkJAgkAzAgCBQVkZXNjcgUJY29udHJhY3RzBQNTRVAJAMwIAgkBC1N0cmluZ0VudHJ5AgkBD2tleVJlc3QyQWRkcmVzcwAJAKUIAQUEdGhpcwUDbmlsAWkBEndhbGxldEluZm9SRUFET05MWQEOdXNlckFkZHJlc3NPcHQJAJQKAgUDbmlsCQEOd2FsbGV0SW50ZXJuYWwBBQ51c2VyQWRkcmVzc09wdAFpARZjb252ZXJzaW9uSW5mb1JFQURPTkxZAQ51c2VyQWRkcmVzc09wdAQPb2xkQWNyZXNBZGRyZXNzCQERQGV4dHJOYXRpdmUoMTA2MikBCQERQGV4dHJOYXRpdmUoMTA1MykCBQ5hY3JlczJDb250cmFjdAUTb2xkQWNyZXNDb250cmFjdEtleQQLJHQwNTA1MTUxNzMJAQxhc1R1cGxlMkludHMBCQD8BwQFD29sZEFjcmVzQWRkcmVzcwIXdW5zdGFrZUFsbEFjcmVzUkVBRE9OTFkJAMwIAgUOdXNlckFkZHJlc3NPcHQFA25pbAUDbmlsBA11bnN0YWtlZEFjcmVzCAULJHQwNTA1MTUxNzMCXzEEDGNsYWltZWRBY3JlcwgFCyR0MDUwNTE1MTczAl8yBAskdDA1MTc2NTMyNQkBDGFzVHVwbGU0SW50cwEJAPwHBAUOYWNyZXMyQ29udHJhY3QCFHVuc3Rha2VMYW5kc1JFQURPTkxZCQDMCAIFDnVzZXJBZGRyZXNzT3B0BQNuaWwFA25pbAQPYWNyZXNGcm9tUGllY2VzCAULJHQwNTE3NjUzMjUCXzEEDGFjcmVzRnJvbVJlcwgFCyR0MDUxNzY1MzI1Al8yBAxhY3Jlc0Zyb21NYXQIBQskdDA1MTc2NTMyNQJfMwQNYWNyZXNGcm9tUHJvZAgFCyR0MDUxNzY1MzI1Al80BBFvbGRTdGFraW5nQWRkcmVzcwkBEUBleHRyTmF0aXZlKDEwNjIpAQUVb2xkU3Rha2luZ0NvbnRyYWN0U3RyBAtkdWNrQXNzZXRJZAkBC3ZhbHVlT3JFbHNlAgkAnQgCBRFvbGRTdGFraW5nQWRkcmVzcwkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUOdXNlckFkZHJlc3NPcHQCAAQLJHQwNTUwMzU3MjUDCQECIT0CBQtkdWNrQXNzZXRJZAIACQEMYXNUdXBsZTNJbnRzAQkA/AcEBRFvbGRTdGFraW5nQWRkcmVzcwITdW5zdGFrZUR1Y2tSRUFET05MWQkAzAgCBQtkdWNrQXNzZXRJZAkAzAgCBQ51c2VyQWRkcmVzc09wdAUDbmlsBQNuaWwJAJUKAwAAAAAAAAQQYWNyZXNGcm9tRHVja1JlcwgFCyR0MDU1MDM1NzI1Al8xBBBhY3Jlc0Zyb21EdWNrTWF0CAULJHQwNTUwMzU3MjUCXzIEEWFjcmVzRnJvbUR1Y2tQcm9kCAULJHQwNTUwMzU3MjUCXzMJAJQKAgUDbmlsCQDMCAIJAKwCAgIVJXMlZF9fdW5zdGFrZWRBY3Jlc19fCQCkAwEFDXVuc3Rha2VkQWNyZXMJAMwIAgkArAICAhQlcyVkX19jbGFpbWVkQWNyZXNfXwkApAMBBQxjbGFpbWVkQWNyZXMJAMwIAgkArAICAhclcyVkX19hY3Jlc0Zyb21QaWVjZXNfXwkApAMBBQ9hY3Jlc0Zyb21QaWVjZXMJAMwIAgkArAICAhQlcyVkX19hY3Jlc0Zyb21SZXNfXwkApAMBBQxhY3Jlc0Zyb21SZXMJAMwIAgkArAICAhQlcyVkX19hY3Jlc0Zyb21NYXRfXwkApAMBBQxhY3Jlc0Zyb21NYXQJAMwIAgkArAICAhUlcyVkX19hY3Jlc0Zyb21Qcm9kX18JAKQDAQUNYWNyZXNGcm9tUHJvZAkAzAgCCQCsAgICGCVzJWRfX2FjcmVzRnJvbUR1Y2tSZXNfXwkApAMBBRBhY3Jlc0Zyb21EdWNrUmVzCQDMCAIJAKwCAgIYJXMlZF9fYWNyZXNGcm9tRHVja01hdF9fCQCkAwEFEGFjcmVzRnJvbUR1Y2tNYXQJAMwIAgkArAICAhklcyVkX19hY3Jlc0Zyb21EdWNrUHJvZF9fCQCkAwEFEWFjcmVzRnJvbUR1Y2tQcm9kBQNuaWwBaQEQd2xnU3RhdHNSRUFET05MWQELdXNlckFkZHJPcHQECGN1clN0YXRzCQEMZ2V0V2xnU3RhdHMyBAULdXNlckFkZHJPcHQJAMwIAgUNcmVzdDJDb250cmFjdAkAzAgCBQ5hY3JlczJDb250cmFjdAkAzAgCBQt3bGdDb250cmFjdAkAzAgCBRJwdXp6bGVQb29sQ29udHJhY3QJAMwIAgUSaW52ZXN0RnVuZENvbnRyYWN0BQNuaWwFC3VzZHRBc3NldElkAAAJAJQKAgUDbmlsCQDMCAIJAKwCAgIRJXMlZF9fd2xnQW1vdW50X18JAKQDAQkAkQMCBQhjdXJTdGF0cwULaXhXbGdBbW91bnQJAMwIAgkArAICAg4lcyVkX193bGdXbGdfXwkApAMBCQCRAwIFCGN1clN0YXRzBQhpeFdsZ1dsZwkAzAgCCQCsAgICECVzJWRfX3dsZ1ByaWNlX18JAKQDAQkAkQMCBQhjdXJTdGF0cwUKaXhXbGdQcmljZQkAzAgCCQCsAgICESVzJWRfX3VzZHRGdW5kc19fCQCkAwEJAJEDAgUIY3VyU3RhdHMFCml4V2xnRnVuZHMJAMwIAgkArAICAhQlcyVkX191c2R0QWN0aXZpdHlfXwkApAMBCQCRAwIFCGN1clN0YXRzBQ1peFdsZ0FjdGl2aXR5CQDMCAIJAKwCAgITJXMlZF9fdXNkdFN0YWtpbmdfXwkApAMBCQCRAwIFCGN1clN0YXRzBQtpeFdsZ0FjcmVzMgkAzAgCCQCsAgICFSVzJWRfX3VzZHRBcmJpdHJhZ2VfXwkApAMBCQCRAwIFCGN1clN0YXRzBQ5peFdsZ0FyYml0cmFnZQkAzAgCCQCsAgICECVzJWRfX3VzZHRQb29sX18JAKQDAQkAkQMCBQhjdXJTdGF0cwUJaXhXbGdQb29sCQDMCAIJAKwCAgIUJXMlZF9fd2xnSXNzdWVUaW1lX18JAKQDAQkAkQMCBQhjdXJTdGF0cwUOaXhXbGdJc3N1ZVRpbWUJAMwIAgkArAICAholcyVkX193bGdMYXN0VGVhbUFjdFRpbWVfXwkApAMBCQCRAwIFCGN1clN0YXRzBRRpeFdsZ0xhc3RUZWFtQWN0VGltZQkAzAgCCQCsAgICFCVzJWRfX3dsZ1RlYW1Ub3RhbF9fCQCkAwEJAJEDAgUIY3VyU3RhdHMFDml4V2xnVGVhbVRvdGFsCQDMCAIJAKwCAgIVJXMlZF9fd2xnVGVhbUFtTGVmdF9fCQCkAwEJAJEDAgUIY3VyU3RhdHMFD2l4V2xnVGVhbUFtTGVmdAkAzAgCCQCsAgICGSVzJWRfX3dsZ1RlYW1BbUF2YWlsTm93X18JAKQDAQkAkQMCBQhjdXJTdGF0cwUTaXhXbGdUZWFtQW1BdmFpbE5vdwkAzAgCCQCsAgICFSVzJWRfX3dsZ1RlYW1XbGdvbGRfXwkApAMBCQCRAwIFCGN1clN0YXRzBQ9peFdsZ1RlYW1XbGdvbGQJAMwIAgkArAICAhMlcyVkX193bGdBY3RUb3RhbF9fCQCkAwEJAJEDAgUIY3VyU3RhdHMFDWl4V2xnQWN0VG90YWwJAMwIAgkArAICAhQlcyVkX193bGdBY3RBbUxlZnRfXwkApAMBCQCRAwIFCGN1clN0YXRzBQ5peFdsZ0FjdEFtTGVmdAkAzAgCCQCsAgICGCVzJWRfX3dsZ0FjdEFtQXZhaWxOb3dfXwkApAMBCQCRAwIFCGN1clN0YXRzBRJpeFdsZ0FjdEFtQXZhaWxOb3cJAMwIAgkArAICAhQlcyVkX193bGdBY3RXbGdvbGRfXwkApAMBCQCRAwIFCGN1clN0YXRzBQ5peFdsZ0FjdFdsZ29sZAkAzAgCCQCsAgICFCVzJWRfX3dsZ0N1clBlcmlvZF9fCQCkAwEJAJEDAgUIY3VyU3RhdHMFDml4V2xnQ3VyUGVyaW9kCQDMCAIJAKwCAgIWJXMlZF9fd2xnQW1MZWZ0VG90YWxfXwkApAMBCQCRAwIFCGN1clN0YXRzBRBpeFdsZ0FtTGVmdFRvdGFsCQDMCAIJAKwCAgIgJXMlZF9fd2xnQ3VyUGVyaW9kRGlzdHJpYnV0aW9uX18JAKQDAQkAkQMCBQhjdXJTdGF0cwUaaXhXbGdDdXJQZXJpb2REaXN0cmlidXRpb24JAMwIAgkArAICAhclcyVkX193bGdMYXN0VXNlclRpbWVfXwkApAMBCQCRAwIFCGN1clN0YXRzBRFpeFdsZ0xhc3RVc2VyVGltZQkAzAgCCQCsAgICGiVzJWRfX3dsZ0ludmVzdEZ1bmRUb3RhbF9fCQCkAwEJAJEDAgUIY3VyU3RhdHMFFWl4V2xnSW52ZXN0RnVuZEFtb3VudAkAzAgCCQCsAgICGSVzJWRfX3dsZ1VzZXJBbUF2YWlsTm93X18JAKQDAQkAkQMCBQhjdXJTdGF0cwUTaXhXbGdVc2VyQW1BdmFpbE5vdwkAzAgCCQCsAgICFiVzJWRfX3dsZ0VmZlVzZXJUaW1lX18JAKQDAQkAkQMCBQhjdXJTdGF0cwUQaXhXbGdFZmZVc2VyVGltZQkAzAgCCQCsAgICGiVzJWRfX3dsZ0lzc3VlMTBBdmFpbE5vd19fCQCkAwEJAJEDAgUIY3VyU3RhdHMFEml4V2xnSXNzdWUxMEFtb3VudAkAzAgCCQCsAgICIyVzJWRfX3dsZ01hcmtldGluZ0lzc3VlMTBBdmFpbE5vd19fCQCkAwEJAJEDAgUIY3VyU3RhdHMFG2l4V2xnTWFya2V0aW5nSXNzdWUxMEFtb3VudAkAzAgCCQCsAgICHiVzJWRfX3dsZ1RlYW1Jc3N1ZTEwQXZhaWxOb3dfXwkApAMBCQCRAwIFCGN1clN0YXRzBRZpeFdsZ1RlYW1Jc3N1ZTEwQW1vdW50CQDMCAIJAKwCAgIeJXMlZF9fd2xnVXNlcklzc3VlMTBBdmFpbE5vd19fCQCkAwEJAJEDAgUIY3VyU3RhdHMFD2l4V2xnVXNlcjEwcGFydAkAzAgCCQCsAgICGiVzJWRfX3dsZ0xhc3RJc3N1ZTEwVGltZV9fCQCkAwEJAJEDAgUIY3VyU3RhdHMFEGl4V2xnSXNzdWUxMFRpbWUJAMwIAgkArAICAhwlcyVkX193bGdUb3RhbEZhcm1pbmdQb3dlcl9fCQCkAwEJAJEDAgUIY3VyU3RhdHMFFml4V2xnVG90YWxGYXJtaW5nUG93ZXIJAMwIAgkArAICAhslcyVkX193bGdBY3Jlc1N0YWtlZFRvdGFsX18JAKQDAQkAkQMCBQhjdXJTdGF0cwUVaXhXbGdBY3Jlc1N0YWtlZFRvdGFsCQDMCAIJAKwCAgIWJXMlZF9fbmZ0VG90YWxJc3N1ZWRfXwkApAMBCQCRAwIFCGN1clN0YXRzBRNpeFdsZ05mdFRvdGFsSXNzdWVkCQDMCAIJAKwCAgIWJXMlZF9fbmZ0VG90YWxCdXJuZWRfXwkApAMBCQCRAwIFCGN1clN0YXRzBRNpeFdsZ05mdFRvdGFsQnVybmVkCQDMCAIJAKwCAgIYJXMlZF9fd2xOZnRUb3RhbFN0YWtlZF9fCQCkAwEJAJEDAgUIY3VyU3RhdHMFFWl4V2xnV2xOZnRUb3RhbFN0YWtlZAkAzAgCCQCsAgICFyVzJWRfX3dsTmZ0VXNlclN0YWtlZF9fCQCkAwEJAJEDAgUIY3VyU3RhdHMFFGl4V2xnV2xOZnRVc2VyU3Rha2VkBQNuaWwBaQEUbG90dGVyeVN0YXRzUkVBRE9OTFkBC3VzZXJBZGRyT3B0BAV0b2RheQkAaQIFBmhlaWdodAUKREFZX0JMT0NLUwQEd2VlawkAaQIFBmhlaWdodAULV0VFS19CTE9DS1MECGxhc3RXZWVrCQBlAgUEd2VlawABBA5jdXJXZWVrVGlja2V0cwkBC3ZhbHVlT3JFbHNlAgkAmggCBQt3bGdDb250cmFjdAkBEmtleVVzZXJXZWVrVGlja2V0cwIFC3VzZXJBZGRyT3B0BQR3ZWVrAAAED2xhc3RXZWVrVGlja2V0cwkBC3ZhbHVlT3JFbHNlAgkAmggCBQt3bGdDb250cmFjdAkBEmtleVVzZXJXZWVrVGlja2V0cwIFC3VzZXJBZGRyT3B0BQhsYXN0V2VlawAABBNjdXJXZWVrVG90YWxUaWNrZXRzCQELdmFsdWVPckVsc2UCCQCaCAIFC3dsZ0NvbnRyYWN0CQETa2V5VG90YWxXZWVrVGlja2V0cwEFBHdlZWsAAAQUbGFzdFdlZWtUb3RhbFRpY2tldHMJAQt2YWx1ZU9yRWxzZQIJAJoIAgULd2xnQ29udHJhY3QJARNrZXlUb3RhbFdlZWtUaWNrZXRzAQUIbGFzdFdlZWsAAAQIdXNlcnNCZXQJAQt2YWx1ZU9yRWxzZQIJAJ0IAgULd2xnQ29udHJhY3QJAQprZXlVc2VyQmV0AQULdXNlckFkZHJPcHQCAAkAlAoCBQNuaWwJAMwIAgkArAICCQCsAgIJAKwCAgIWJXMlZCVkX190b3RhbFRpY2tldHNfXwkApAMBBRRsYXN0V2Vla1RvdGFsVGlja2V0cwUDU0VQCQCkAwEFE2N1cldlZWtUb3RhbFRpY2tldHMJAMwIAgkArAICCQCsAgIJAKwCAgIVJXMlZCVkX191c2VyVGlja2V0c19fCQCkAwEFD2xhc3RXZWVrVGlja2V0cwUDU0VQCQCkAwEFDmN1cldlZWtUaWNrZXRzCQDMCAIJAKwCAgIWJXMlZF9fYmxvY2tjaGFpbldlZWtfXwkApAMBBQR3ZWVrCQDMCAIJAKwCAgIVJXMlZF9fYmxvY2tjaGFpbkRheV9fCQCkAwEFBXRvZGF5CQDMCAIJAKwCAgIYJXMlZF9fYmxvY2tjaGFpbk1pbnV0ZV9fCQCkAwEJAGoCBQZoZWlnaHQFCkRBWV9CTE9DS1MJAMwIAgkArAICAhclcyVkX193aW5uaW5nQmV0VG9kYXlfXwkApAMBCQEKd2lubmluZ0JldAEFBXRvZGF5CQDMCAIJAKwCAgIQJXMlc19fdXNlcnNCZXRfXwUIdXNlcnNCZXQFA25pbAFpARJ1c2VyT3JkZXJzUkVBRE9OTFkBC3VzZXJBZGRyT3B0BAduZnRzS2V5CQETa2V5QXNzZXRJZHNCeVNlbGxlcgEFC3VzZXJBZGRyT3B0BAduZnRzU3RyCQELdmFsdWVPckVsc2UCCQCdCAIFDm1hcmtldENvbnRyYWN0BQduZnRzS2V5AgAJAJQKAgUDbmlsCQDMCAIJAKwCAgIUJXMlc19fdXNlclNhbGVOZnRzX18FB25mdHNTdHIFA25pbAFpARFvcmRlckluZm9SRUFET05MWQEKYXNzZXRJZE9wdAQFcHJpY2UJAQt2YWx1ZU9yRWxzZQIJAJoIAgUObWFya2V0Q29udHJhY3QJARFrZXlQcmljZUJ5QXNzZXRJZAEFCmFzc2V0SWRPcHQAAAQGc2VsbGVyCQELdmFsdWVPckVsc2UCCQCdCAIFDm1hcmtldENvbnRyYWN0CQESa2V5U2VsbGVyQnlBc3NldElkAQUKYXNzZXRJZE9wdAIACQCUCgIFA25pbAkAzAgCCQCsAgICFiVzJWRfX21hcmtldE5mdFByaWNlX18JAKQDAQUFcHJpY2UJAMwIAgkArAICAhclcyVzX19tYXJrZXROZnRTZWxsZXJfXwUGc2VsbGVyBQNuaWwBaQEScHJvbW9TdGF0c1JFQURPTkxZAQt1c2VyQWRkck9wdAQFdG9kYXkJAGkCBQZoZWlnaHQFCkRBWV9CTE9DS1MEC3VzZXJUaWNrZXRzCQELdmFsdWVPckVsc2UCCQCaCAIFDmFjcmVzMkNvbnRyYWN0CQETa2V5VXNlclByb21vVGlja2V0cwEFC3VzZXJBZGRyT3B0AAAEDHRvdGFsVGlja2V0cwkBC3ZhbHVlT3JFbHNlAgkAmggCBQ5hY3JlczJDb250cmFjdAUUa2V5VG90YWxQcm9tb1RpY2tldHMAAAQIcHJvbW9NYXAJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUOYWNyZXMyQ29udHJhY3QFC2tleVByb21vTWFwAgAEDHdpbm5lcnNUb2RheQkBC3ZhbHVlT3JFbHNlAgkAnQgCBQ5hY3JlczJDb250cmFjdAkBFGtleVByb21vUm91bmRXaW5uZXJzAQUFdG9kYXkCAAoBA3N1bQIDYWNjAWoEA2RheQkAZAIJAGkCBRdEQUlMWV9QUk9NT19TVEFSVF9CTE9DSwUKREFZX0JMT0NLUwUBagMJAGYCBQNkYXkFBXRvZGF5BQNhY2MEB3dpbm5lcnMJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUOYWNyZXMyQ29udHJhY3QJARRrZXlQcm9tb1JvdW5kV2lubmVycwEFA2RheQIAAwkAAAIFB3dpbm5lcnMCAAUDYWNjBAt3aW5uZXJzTGlzdAkAtQkCBQd3aW5uZXJzAgFfBANpZHgJAM8IAgULd2lubmVyc0xpc3QFC3VzZXJBZGRyT3B0AwkBCWlzRGVmaW5lZAEFA2lkeAkAlAoCCQBkAggFA2FjYwJfMQABCQBkAggFA2FjYwJfMgkAkQMCBRJwcm9tb0F3YXJkUGVyUm91bmQJAQV2YWx1ZQEFA2lkeAUDYWNjBA0kdDAxMTg1OTEyMDI3CgACJGwJAMwIAgAACQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUJAMwIAgAGCQDMCAIABwkAzAgCAAgJAMwIAgAJCQDMCAIACgkAzAgCAAsJAMwIAgAMCQDMCAIADQkAzAgCAA4JAMwIAgAPCQDMCAIAEAkAzAgCABEJAMwIAgASCQDMCAIAEwkAzAgCABQJAMwIAgAVCQDMCAIAFgkAzAgCABcJAMwIAgAYCQDMCAIAGQkAzAgCABoJAMwIAgAbCQDMCAIAHAkAzAgCAB0FA25pbAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgAAAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBA3N1bQIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMzAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUABUAFgAXABgAGQAaABsAHAAdAB4ECnVzZXJQcml6ZXMIBQ0kdDAxMTg1OTEyMDI3Al8xBAl1c2VyQWNyZXMIBQ0kdDAxMTg1OTEyMDI3Al8yCQCUCgIFA25pbAkAzAgCCQCsAgICGSVzJWRfX3RvdGFsUHJvbW9UaWNrZXRzX18JAKQDAQUMdG90YWxUaWNrZXRzCQDMCAIJAKwCAgIYJXMlZF9fdXNlclByb21vVGlja2V0c19fCQCkAwEFC3VzZXJUaWNrZXRzCQDMCAIJAKwCAgIVJXMlZF9fYmxvY2tjaGFpbkRheV9fCQCkAwEFBXRvZGF5CQDMCAIJAKwCAgIZJXMlc19fcHJvbW9XaW5uZXJzVG9kYXlfXwUMd2lubmVyc1RvZGF5CQDMCAIJAKwCAgkArAICCQCsAgICIyVzJWQlZF9fdXNlclByb21vUHJpemVzQWNyZXNTb0Zhcl9fCQCkAwEFCnVzZXJQcml6ZXMFA1NFUAkApAMBBQl1c2VyQWNyZXMFA25pbABmIq9l", "height": 3415815, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 5u95bF9psWTYrMARzu8HXgUcbCs5fPJtnTFMHpgwkLYN Next: F2awhYBrUQEwZzFCogY57dpFn8dvCMc4zZvvoGwNL4d1 Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let SEP = "__"
55
66 let chain = take(drop(this.bytes, 1), 1)
77
88 let DAILY_PROMO_START_BLOCK = match chain {
99 case _ =>
1010 if ((base58'2W' == $match0))
1111 then 4487040
1212 else if ((base58'2T' == $match0))
1313 then 3412800
1414 else throw("Unknown chain")
1515 }
1616
1717 let DAY_BLOCKS = match chain {
1818 case _ =>
1919 if ((base58'2W' == $match0))
2020 then 1440
2121 else if ((base58'2T' == $match0))
2222 then 60
2323 else throw("Unknown chain")
2424 }
2525
2626 let WEEK_BLOCKS = match chain {
2727 case _ =>
2828 if ((base58'2W' == $match0))
2929 then 10080
3030 else if ((base58'2T' == $match0))
3131 then 180
3232 else throw("Unknown chain")
3333 }
3434
3535 let VRF_OFFSET = match chain {
3636 case _ =>
3737 if ((base58'2W' == $match0))
3838 then 0
3939 else if ((base58'2T' == $match0))
4040 then 1146000
4141 else throw("Unknown chain")
4242 }
4343
4444 let usdtAssetId = match chain {
4545 case _ =>
4646 if ((base58'2W' == $match0))
4747 then base58'9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi'
4848 else if ((base58'2T' == $match0))
4949 then base58'6mWwf9mZBjVgkC54idpyaZLQfAosD914wT8fGf2iiY63'
5050 else throw("Unknown chain")
5151 }
5252
5353 let defaultRest2AddressStr = match chain {
5454 case _ =>
5555 if ((base58'2W' == $match0))
5656 then "3PFwYta8biEz31zpeFe5DJK8wE5trSpQVF8"
5757 else if ((base58'2T' == $match0))
5858 then "3N7UuYar6264P58FBhVWKPQAh4Yua2hgngv"
5959 else throw("Unknown chain")
6060 }
6161
6262 let oldStakingContractStr = match chain {
6363 case _ =>
6464 if ((base58'2W' == $match0))
6565 then "3PLncXtS1U83D6cQbFD3H8rBHPLgzxSFKZ1"
6666 else if ((base58'2T' == $match0))
6767 then "3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm"
6868 else throw("Unknown chain")
6969 }
7070
7171 func getStringOrFail (address,key) = valueOrErrorMessage(getString(address, key), makeString(["mandatory ", toString(address), ".", key, " is not defined"], ""))
7272
7373
7474 let IdxCfgAcres2Dapp = 1
7575
7676 let IdxCfgWlgDapp = 2
7777
7878 let IdxCfgPuzzlePoolDapp = 4
7979
8080 let IdxCfgInvestFundDapp = 5
8181
8282 let IdxCfgMarketDapp = 6
8383
8484 func keyRestCfg () = "%s__restConfig"
8585
8686
8787 func keyRest2Address () = "%s__rest2Addr"
8888
8989
9090 func readRestCfgOrFail (rest) = split_4C(getStringOrFail(rest, keyRestCfg()), SEP)
9191
9292
9393 func getContractAddressOrFail (rest2Cfg,idx) = valueOrErrorMessage(addressFromString(rest2Cfg[idx]), ("Rest cfg doesn't contain address at index " + toString(idx)))
9494
9595
9696 let rest2Contract = addressFromStringValue(valueOrElse(getString(this, keyRest2Address()), defaultRest2AddressStr))
9797
9898 let rest2Cfg = readRestCfgOrFail(rest2Contract)
9999
100100 let acres2Contract = getContractAddressOrFail(rest2Cfg, IdxCfgAcres2Dapp)
101101
102102 let wlgContract = getContractAddressOrFail(rest2Cfg, IdxCfgWlgDapp)
103103
104104 let puzzlePoolContract = getContractAddressOrFail(rest2Cfg, IdxCfgPuzzlePoolDapp)
105105
106106 let investFundContract = getContractAddressOrFail(rest2Cfg, IdxCfgInvestFundDapp)
107107
108108 let marketContract = getContractAddressOrFail(rest2Cfg, IdxCfgMarketDapp)
109109
110110 let oldAcresContractKey = "oldAcresContract"
111111
112112 func keyLastWeekTxIdByUser (addr) = ("lastWeekTxIdByUser_" + addr)
113113
114114
115115 func keyCurWeekTxIdByUser (addr) = ("curWeekTxIdByUser_" + addr)
116116
117117
118118 let wlgAssetIdKey = "wlg_assetId"
119119
120120 let wlgAssetId = valueOrErrorMessage(getBinary(wlgContract, wlgAssetIdKey), "WLGOLD is not issued yet")
121121
122122 let acresAssetIdKey = "acresAssetId"
123123
124124 let acresAssetId = valueOrErrorMessage(getBinary(acres2Contract, acresAssetIdKey), "ACRES is not issued yet")
125125
126126 func keyStakedDuckByOwner (ownerAddr) = ("stakedDuckByOwner_" + ownerAddr)
127127
128128
129129 func keyStakedNFTsByOwner (ownerAddr) = ("stakedNFTsByOwner_" + ownerAddr)
130130
131131
132132 func keyAddressToCustomName (addr) = ("accountCustomNameByAddr_" + addr)
133133
134134
135135 func keyAddressRefBy (addr) = ("accRefBy_" + addr)
136136
137137
138138 func keyAddressReferrals (addr) = ("accReferrals_" + addr)
139139
140140
141141 func keyUserBet (addr) = ("userBet_" + addr)
142142
143143
144144 func keyUserWeekTickets (addr,week) = ((("userWeekTickets_" + addr) + "_") + toString(week))
145145
146146
147147 func keyTotalWeekTickets (week) = ("totalWeekTickets_" + toString(week))
148148
149149
150150 func winningBet (day) = {
151151 let b = (day * DAY_BLOCKS)
152152 let h = if ((b > VRF_OFFSET))
153153 then b
154154 else (b + VRF_OFFSET)
155155 (toInt(value(value(blockInfoByHeight(h)).vrf)) % 4)
156156 }
157157
158158
159159 func keySellerByAssetId (assetId) = ("seller_" + assetId)
160160
161161
162162 func keyPriceByAssetId (assetId) = ("price_" + assetId)
163163
164164
165165 func keyAssetIdsBySeller (addr) = ("assetIds_" + addr)
166166
167167
168168 func keyUserPromoTickets (address) = ("promoTickets_" + address)
169169
170170
171171 let keyTotalPromoTickets = "totalPromoTickets"
172172
173173 let keyPromoMap = "promoMap"
174174
175175 func keyPromoRoundWinners (day) = ("dailyWinners_" + toString(day))
176176
177177
178178 let promoAwardPerRound = [0, 500000000, 100000000, 100000000, 100000000, 100000000]
179179
180180 let ixWlgAmount = 0
181181
182182 let ixWlgWlg = 1
183183
184184 let ixWlgPrice = 2
185185
186186 let ixWlgFunds = 3
187187
188188 let ixWlgActivity = 4
189189
190190 let ixWlgAcres2 = 5
191191
192192 let ixWlgArbitrage = 6
193193
194194 let ixWlgPool = 7
195195
196196 let ixWlgIssueTime = 8
197197
198198 let ixWlgLastTeamActTime = 9
199199
200200 let ixWlgTeamTotal = 10
201201
202202 let ixWlgTeamAmLeft = 11
203203
204204 let ixWlgTeamAmAvailNow = 12
205205
206206 let ixWlgTeamWlgold = 13
207207
208208 let ixWlgActTotal = 14
209209
210210 let ixWlgActAmLeft = 15
211211
212212 let ixWlgActAmAvailNow = 16
213213
214214 let ixWlgActWlgold = 17
215215
216216 let ixWlgCurPeriod = 18
217217
218218 let ixWlgAmLeftTotal = 19
219219
220220 let ixWlgCurPeriodDistribution = 20
221221
222222 let ixWlgLastUserTime = 21
223223
224224 let ixWlgInvestFundAmount = 22
225225
226226 let ixWlgUserAmAvailNow = 23
227227
228228 let ixWlgEffUserTime = 24
229229
230230 let ixWlgIssue10Amount = 25
231231
232232 let ixWlgMarketingIssue10Amount = 26
233233
234234 let ixWlgTeamIssue10Amount = 27
235235
236236 let ixWlgUser10part = 28
237237
238238 let ixWlgIssue10Time = 29
239239
240240 let ixWlgTotalFarmingPower = 30
241241
242242 let ixWlgAcresStakedTotal = 31
243243
244244 let ixWlgNftTotalIssued = 32
245245
246246 let ixWlgNftTotalBurned = 33
247247
248248 let ixWlgWlNftTotalStaked = 34
249249
250250 let ixWlgWlNftUserStaked = 35
251251
252252 func asTuple4Ints (val) = match val {
253253 case t: (Int, Int, Int, Int) =>
254254 t
255255 case _ =>
256256 throw("fail to cast into (Int, Int, Int, Int)")
257257 }
258258
259259
260260 func asTuple3Ints (val) = match val {
261261 case t: (Int, Int, Int) =>
262262 t
263263 case _ =>
264264 throw("fail to cast into (Int, Int, Int)")
265265 }
266266
267267
268268 func asTuple2Ints (val) = match val {
269269 case t: (Int, Int) =>
270270 t
271271 case _ =>
272272 throw("fail to cast into (Int, Int)")
273273 }
274274
275275
276276 let M6_ = 1000000
277277
278278 let M8_ = 100000000
279279
280280 let TEAM_SHARE = 200000
281281
282282 let ACTIVITY_SHARE = 100000
283283
284284 let PLAYER_SHARE = 400000
285285
286286 let YEAR_MILLIS = 31557600000
287287
288288 let DAY_MS = 86400000
289289
290290 let ISSUE10 = 1000000000
291291
292292 let PLAYERS10_SHARE = 800000
293293
294294 let MARKETING10_SHARE = 100000
295295
296296 let TEAM10_SHARE = 100000
297297
298298 let NEW_STAKING_START = 1731279600000
299299
300300 let teamAdrKey = "teamAddr"
301301
302302 let lastTeamTimKey = "lastClaimedTime_team"
303303
304304 let teamAmtLeftKey = "teamAmountLeft"
305305
306306 let lastActivitiesTimKey = "lastClaimedTime_activities"
307307
308308 let actAmtLeftKey = "activitiesAmountLeft"
309309
310310 let stakersAmtLeftKey = "stakersAmountLeft"
311311
312312 func keyLastClaimTimeByUser (addr) = ("lastClaimedTimeUser_" + addr)
313313
314314
315315 func distrByPeriod (issuedAmount,period) = fraction(issuedAmount, (PLAYER_SHARE * (period + 1)), (6 * M6_))
316316
317317
318318 let wlgIssue10TimeKey = "wlg_issue10Time"
319319
320320 let wlgIssueTimKey = "wlg_issueTime"
321321
322322 let wlgIssuedAmtKey = "wlg_issuedAmount"
323323
324324 let zbIssuedAmtKey = "zbill_issuedAmount"
325325
326326 func keyAcresStakedAmtByUser (addr) = ("acresStakedAmountByUser_" + addr)
327327
328328
329329 let acresStakdTotalKey = "acresStakedAmountTotal"
330330
331331 let totalFarmingPowerKey = "totalFarmingPower"
332332
333333 let dapp2Rest = 0
334334
335335 let dapp2Staking = 1
336336
337337 let dapp2Wlg = 2
338338
339339 let dapp2Puzzle = 3
340340
341341 let dapp2InvestFund = 4
342342
343343 let keyNftTotalIssued = "nftTotalIssued"
344344
345345 let keyNftTotalBurned = "nftTotalBurned"
346346
347347 let keyWlNftTotalStaked = "WlNftTotalStaked"
348348
349349 func keyUserWlNftNumber (addr) = ("userWlNftNumber_" + addr)
350350
351351
352352 func keyUserFullBonus (addr) = ("userFullBonus_" + addr)
353353
354354
355355 let levelAcres = [0, 10, 20, 40, 80, 150, 250, 400, 700, 1000]
356356
357357 func getLevelByAcres (acres) = {
358358 let acr = ((acres + 99999999) / M8_)
359359 func checker (acc,item) = if ((item >= acr))
360360 then acc
361361 else (acc + 1)
362362
363363 let $l = levelAcres
364364 let $s = size($l)
365365 let $acc0 = 0
366366 func $f0_1 ($a,$i) = if (($i >= $s))
367367 then $a
368368 else checker($a, $l[$i])
369369
370370 func $f0_2 ($a,$i) = if (($i >= $s))
371371 then $a
372372 else throw("List size exceeds 10")
373373
374374 $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)
375375 }
376376
377377
378378 func getFarmingPowerByAcres (acres) = ((acres * 20) * (getLevelByAcres(acres) + 4))
379379
380380
381381 func getFarmingPowerByAcresAndBonus (acres,bonus6) = {
382382 let notBonused = getFarmingPowerByAcres(acres)
383383 $Tuple2(fraction(notBonused, (M6_ + bonus6), M6_), notBonused)
384384 }
385385
386386
387387 func getFarmingPowers (userAddrStrOrEmpty,acres2Contract) = {
388388 let totalFP = valueOrElse(getInteger(acres2Contract, totalFarmingPowerKey), 0)
389389 let userAcres = valueOrElse(getInteger(acres2Contract, keyAcresStakedAmtByUser(userAddrStrOrEmpty)), 0)
390390 let userBonus = valueOrElse(getInteger(acres2Contract, keyUserFullBonus(userAddrStrOrEmpty)), 0)
391391 let $t079119 = getFarmingPowerByAcresAndBonus(userAcres, userBonus)
392392 let userFPbonused = $t079119._1
393393 let userFPnotBonused = $t079119._2
394394 [totalFP, userFPbonused, userFPnotBonused, userBonus]
395395 }
396396
397397
398398 let idxTotalFP = 0
399399
400400 let idxUserFPbonused = 1
401401
402402 let idxUserFPnotBonused = 2
403403
404404 func getWlgStats2 (userAddrOpt,contracts,usdtId,usdtBalanceCorrection) = {
405405 let issuedAmount = valueOrErrorMessage(getInteger(contracts[dapp2Wlg], wlgIssuedAmtKey), "WLGOLD is not issued yet")
406406 let restUsd = assetBalance(contracts[dapp2Rest], usdtId)
407407 let wlgUsd = (assetBalance(contracts[dapp2Wlg], usdtId) - usdtBalanceCorrection)
408408 let puzzleUsd = assetBalance(contracts[dapp2Puzzle], usdtId)
409409 let acres2Usd = assetBalance(contracts[dapp2Staking], usdtId)
410410 let investFndContract = contracts[dapp2InvestFund]
411411 let investFundTotal = (assetBalance(investFndContract, usdtId) + valueOrElse(getInteger(investFndContract, zbIssuedAmtKey), 0))
412412 let totalFundsUsd = ((acres2Usd + wlgUsd) + investFundTotal)
413413 let wlgId = valueOrErrorMessage(getBinary(contracts[dapp2Wlg], "wlg_assetId"), "Not initialized yet")
414414 let now = lastBlock.timestamp
415415 let issueTime = valueOrErrorMessage(getInteger(contracts[dapp2Wlg], wlgIssueTimKey), "Not initialized")
416416 let wlgWlg = assetBalance(contracts[dapp2Wlg], wlgId)
417417 let teamTotal = fraction(issuedAmount, TEAM_SHARE, M6_)
418418 let teamAmountLeft = valueOrElse(getInteger(contracts[dapp2Wlg], teamAmtLeftKey), teamTotal)
419419 let lastTeamTime = valueOrElse(getInteger(contracts[dapp2Wlg], lastTeamTimKey), issueTime)
420420 let teamAddr = addressFromStringValue(value(getString(contracts[dapp2Wlg], teamAdrKey)))
421421 let teamAmountAvailableNow = min([fraction(teamTotal, (now - lastTeamTime), (3 * YEAR_MILLIS)), teamAmountLeft])
422422 let teamWlgold = assetBalance(teamAddr, wlgId)
423423 let actTotal = fraction(issuedAmount, ACTIVITY_SHARE, M6_)
424424 let actAmountLeft = valueOrElse(getInteger(contracts[dapp2Wlg], actAmtLeftKey), actTotal)
425425 let lastActivitiesTime = valueOrElse(getInteger(contracts[dapp2Wlg], lastActivitiesTimKey), issueTime)
426426 let actAmountAvailableNow = min([fraction(actTotal, (now - lastActivitiesTime), (3 * YEAR_MILLIS)), actAmountLeft])
427427 let actWlgold = assetBalance(contracts[dapp2Rest], wlgId)
428428 let lastUserTime = valueOrElse(getInteger(contracts[dapp2Wlg], keyLastClaimTimeByUser(userAddrOpt)), issueTime)
429429 let lastUserPeriod = ((lastUserTime - issueTime) / YEAR_MILLIS)
430430 let nowLimited = min([now, (issueTime + (3 * YEAR_MILLIS))])
431431 let curPeriod = min([((now - issueTime) / YEAR_MILLIS), 2])
432432 let eff = getFarmingPowers(userAddrOpt, contracts[dapp2Staking])
433433 let curPeriodDistribution = distrByPeriod(issuedAmount, curPeriod)
434434 let prevPeriodEnd = (issueTime + (YEAR_MILLIS * curPeriod))
435435 let prevPrevPeriodEnd = (issueTime + (YEAR_MILLIS * (curPeriod - 1)))
436436 let a0 = fraction(curPeriodDistribution, (nowLimited - lastUserTime), YEAR_MILLIS)
437437 let userAvailable = if ((lastUserPeriod == curPeriod))
438438 then a0
439439 else if ((lastUserPeriod == (curPeriod - 1)))
440440 then {
441441 let a1 = fraction(distrByPeriod(issuedAmount, (curPeriod - 1)), (prevPeriodEnd - lastUserTime), YEAR_MILLIS)
442442 (a1 + a0)
443443 }
444444 else {
445445 let a2 = fraction(distrByPeriod(issuedAmount, (curPeriod - 2)), (prevPrevPeriodEnd - lastUserTime), YEAR_MILLIS)
446446 let a1 = distrByPeriod(issuedAmount, (curPeriod - 1))
447447 ((a2 + a1) + a0)
448448 }
449449 let amountLeftTotal = valueOrElse(getInteger(contracts[dapp2Wlg], stakersAmtLeftKey), 0)
450450 let userAmount = if ((eff[idxTotalFP] != 0))
451451 then fraction(userAvailable, eff[idxUserFPbonused], eff[idxTotalFP])
452452 else 0
453453 let lastIssue10Time = valueOrElse(getInteger(contracts[dapp2Wlg], wlgIssue10TimeKey), NEW_STAKING_START)
454454 let issue10Amount = fraction(ISSUE10, max([(now - lastIssue10Time), 0]), DAY_MS)
455455 let marketingIssue10Amount = fraction(issue10Amount, MARKETING10_SHARE, M6_)
456456 let teamIssue10Amount = fraction(issue10Amount, TEAM10_SHARE, M6_)
457457 let user10Interval = max([(now - max([NEW_STAKING_START, lastUserTime])), 0])
458458 let user10part = if ((eff[idxTotalFP] != 0))
459459 then fraction(fraction(fraction(ISSUE10, user10Interval, DAY_MS), eff[idxUserFPbonused], eff[idxTotalFP]), PLAYERS10_SHARE, M6_)
460460 else 0
461461 let newIssue10Time = max([NEW_STAKING_START, now])
462462 let acresStakedTotal = valueOrElse(getInteger(contracts[dapp2Staking], acresStakdTotalKey), 0)
463463 let nftTotalIssued = valueOrElse(getInteger(contracts[dapp2Staking], keyNftTotalIssued), 0)
464464 let nftTotalBurned = valueOrElse(getInteger(contracts[dapp2Staking], keyNftTotalBurned), 0)
465465 let wlNftTotalStaked = valueOrElse(getInteger(contracts[dapp2Staking], keyWlNftTotalStaked), 0)
466466 let wlNftUserStaked = valueOrElse(getInteger(contracts[dapp2Staking], keyUserWlNftNumber(valueOrElse(userAddrOpt, ""))), 0)
467467 [issuedAmount, wlgWlg, fraction(totalFundsUsd, M8_, issuedAmount), totalFundsUsd, restUsd, acres2Usd, wlgUsd, puzzleUsd, issueTime, lastTeamTime, teamTotal, teamAmountLeft, teamAmountAvailableNow, teamWlgold, actTotal, actAmountLeft, actAmountAvailableNow, actWlgold, curPeriod, amountLeftTotal, curPeriodDistribution, lastUserTime, investFundTotal, userAmount, nowLimited, issue10Amount, marketingIssue10Amount, teamIssue10Amount, user10part, newIssue10Time, eff[idxTotalFP], acresStakedTotal, nftTotalIssued, nftTotalBurned, wlNftTotalStaked, wlNftUserStaked]
468468 }
469469
470470
471471 func walletInternal (userAddressOpt) = {
472472 let addr = addressFromString(userAddressOpt)
473473 let balance = if (isDefined(addr))
474474 then wavesBalance(value(addr))
475475 else BalanceDetails(0, 0, 0, 0)
476476 let usdtBalance = if (isDefined(addr))
477477 then assetBalance(value(addr), usdtAssetId)
478478 else 0
479479 let wlgoldBalance = if (isDefined(addr))
480480 then assetBalance(value(addr), wlgAssetId)
481481 else 0
482482 let customName = valueOrElse(getString(acres2Contract, keyAddressToCustomName(userAddressOpt)), userAddressOpt)
483483 let refByKey = keyAddressRefBy(userAddressOpt)
484484 let refBy = getString(acres2Contract, refByKey)
485485 let refs = valueOrElse(getString(acres2Contract, keyAddressReferrals(userAddressOpt)), "")
486486 let lastTxId = valueOrElse(getString(acres2Contract, keyLastWeekTxIdByUser(userAddressOpt)), "")
487487 let curTxId = valueOrElse(getString(acres2Contract, keyCurWeekTxIdByUser(userAddressOpt)), "")
488488 let acresBalance = if (isDefined(addr))
489489 then assetBalance(value(addr), acresAssetId)
490490 else 0
491491 let stakedAcres = valueOrElse(getInteger(acres2Contract, keyAcresStakedAmtByUser(userAddressOpt)), 0)
492492 let lvl = getLevelByAcres(stakedAcres)
493493 let fp = getFarmingPowers(userAddressOpt, acres2Contract)
494494 let acresToNextLvl = if ((lvl >= size(levelAcres)))
495495 then 0
496496 else (((levelAcres[lvl] * M8_) + 1) - stakedAcres)
497497 let nfts = valueOrElse(getString(acres2Contract, keyStakedNFTsByOwner(userAddressOpt)), "")
498498 let bonus = valueOrElse(getInteger(acres2Contract, keyUserFullBonus(userAddressOpt)), 0)
499499 [("%s%s__customName__" + customName), ("%s%s__referredBy__" + valueOrElse(refBy, "")), ("%s%s__referrals__" + refs), ("%s%s__lastWeekTxId__" + lastTxId), ("%s%s__curWeekTxId__" + lastTxId), ("%s%d__wavesBalance__" + toString(balance.available)), ("%s%d__usdtBalance__" + toString(usdtBalance)), ("%s%d__wlgoldBalance__" + toString(wlgoldBalance)), ("%s%d__acresBalance__" + toString(acresBalance)), ("%s%d__stakedAcres__" + toString(stakedAcres)), ("%s%d__currentLvl__" + toString(lvl)), ("%s%d__acresToNextLvl__" + toString(acresToNextLvl)), ("%s%s__userNFTs__" + nfts), ("%s%d__userBonus__" + toString(bonus)), ("%s%d__userBaseFarmingPower__" + toString(fp[idxUserFPnotBonused])), ("%s%d__userFarmingPower__" + toString(fp[idxUserFPbonused])), ("%s%d__totalFarmingPower__" + toString(fp[idxTotalFP]))]
500500 }
501501
502502
503503 @Callable(i)
504504 func constructorV1 (contracts) = if ((i.caller != this))
505505 then throw("permissions denied")
506506 else {
507507 func descriptor (acc,ignoredItem) = (acc + "%s")
508508
509509 let descr = {
510510 let $l = contracts
511511 let $s = size($l)
512512 let $acc0 = ""
513513 func $f0_1 ($a,$i) = if (($i >= $s))
514514 then $a
515515 else descriptor($a, $l[$i])
516516
517517 func $f0_2 ($a,$i) = if (($i >= $s))
518518 then $a
519519 else throw("List size exceeds 10")
520520
521521 $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)
522522 }
523523 [StringEntry(keyRestCfg(), makeString(descr :: contracts, SEP)), StringEntry(keyRest2Address(), toString(this))]
524524 }
525525
526526
527527
528528 @Callable(i)
529529 func walletInfoREADONLY (userAddressOpt) = $Tuple2(nil, walletInternal(userAddressOpt))
530530
531531
532532
533533 @Callable(i)
534534 func conversionInfoREADONLY (userAddressOpt) = {
535535 let oldAcresAddress = addressFromStringValue(getStringValue(acres2Contract, oldAcresContractKey))
536536 let $t050515173 = asTuple2Ints(invoke(oldAcresAddress, "unstakeAllAcresREADONLY", [userAddressOpt], nil))
537537 let unstakedAcres = $t050515173._1
538538 let claimedAcres = $t050515173._2
539539 let $t051765325 = asTuple4Ints(invoke(acres2Contract, "unstakeLandsREADONLY", [userAddressOpt], nil))
540540 let acresFromPieces = $t051765325._1
541541 let acresFromRes = $t051765325._2
542542 let acresFromMat = $t051765325._3
543543 let acresFromProd = $t051765325._4
544544 let oldStakingAddress = addressFromStringValue(oldStakingContractStr)
545545 let duckAssetId = valueOrElse(getString(oldStakingAddress, keyStakedDuckByOwner(userAddressOpt)), "")
546546 let $t055035725 = if ((duckAssetId != ""))
547547 then asTuple3Ints(invoke(oldStakingAddress, "unstakeDuckREADONLY", [duckAssetId, userAddressOpt], nil))
548548 else $Tuple3(0, 0, 0)
549549 let acresFromDuckRes = $t055035725._1
550550 let acresFromDuckMat = $t055035725._2
551551 let acresFromDuckProd = $t055035725._3
552552 $Tuple2(nil, [("%s%d__unstakedAcres__" + toString(unstakedAcres)), ("%s%d__claimedAcres__" + toString(claimedAcres)), ("%s%d__acresFromPieces__" + toString(acresFromPieces)), ("%s%d__acresFromRes__" + toString(acresFromRes)), ("%s%d__acresFromMat__" + toString(acresFromMat)), ("%s%d__acresFromProd__" + toString(acresFromProd)), ("%s%d__acresFromDuckRes__" + toString(acresFromDuckRes)), ("%s%d__acresFromDuckMat__" + toString(acresFromDuckMat)), ("%s%d__acresFromDuckProd__" + toString(acresFromDuckProd))])
553553 }
554554
555555
556556
557557 @Callable(i)
558558 func wlgStatsREADONLY (userAddrOpt) = {
559559 let curStats = getWlgStats2(userAddrOpt, [rest2Contract, acres2Contract, wlgContract, puzzlePoolContract, investFundContract], usdtAssetId, 0)
560560 $Tuple2(nil, [("%s%d__wlgAmount__" + toString(curStats[ixWlgAmount])), ("%s%d__wlgWlg__" + toString(curStats[ixWlgWlg])), ("%s%d__wlgPrice__" + toString(curStats[ixWlgPrice])), ("%s%d__usdtFunds__" + toString(curStats[ixWlgFunds])), ("%s%d__usdtActivity__" + toString(curStats[ixWlgActivity])), ("%s%d__usdtStaking__" + toString(curStats[ixWlgAcres2])), ("%s%d__usdtArbitrage__" + toString(curStats[ixWlgArbitrage])), ("%s%d__usdtPool__" + toString(curStats[ixWlgPool])), ("%s%d__wlgIssueTime__" + toString(curStats[ixWlgIssueTime])), ("%s%d__wlgLastTeamActTime__" + toString(curStats[ixWlgLastTeamActTime])), ("%s%d__wlgTeamTotal__" + toString(curStats[ixWlgTeamTotal])), ("%s%d__wlgTeamAmLeft__" + toString(curStats[ixWlgTeamAmLeft])), ("%s%d__wlgTeamAmAvailNow__" + toString(curStats[ixWlgTeamAmAvailNow])), ("%s%d__wlgTeamWlgold__" + toString(curStats[ixWlgTeamWlgold])), ("%s%d__wlgActTotal__" + toString(curStats[ixWlgActTotal])), ("%s%d__wlgActAmLeft__" + toString(curStats[ixWlgActAmLeft])), ("%s%d__wlgActAmAvailNow__" + toString(curStats[ixWlgActAmAvailNow])), ("%s%d__wlgActWlgold__" + toString(curStats[ixWlgActWlgold])), ("%s%d__wlgCurPeriod__" + toString(curStats[ixWlgCurPeriod])), ("%s%d__wlgAmLeftTotal__" + toString(curStats[ixWlgAmLeftTotal])), ("%s%d__wlgCurPeriodDistribution__" + toString(curStats[ixWlgCurPeriodDistribution])), ("%s%d__wlgLastUserTime__" + toString(curStats[ixWlgLastUserTime])), ("%s%d__wlgInvestFundTotal__" + toString(curStats[ixWlgInvestFundAmount])), ("%s%d__wlgUserAmAvailNow__" + toString(curStats[ixWlgUserAmAvailNow])), ("%s%d__wlgEffUserTime__" + toString(curStats[ixWlgEffUserTime])), ("%s%d__wlgIssue10AvailNow__" + toString(curStats[ixWlgIssue10Amount])), ("%s%d__wlgMarketingIssue10AvailNow__" + toString(curStats[ixWlgMarketingIssue10Amount])), ("%s%d__wlgTeamIssue10AvailNow__" + toString(curStats[ixWlgTeamIssue10Amount])), ("%s%d__wlgUserIssue10AvailNow__" + toString(curStats[ixWlgUser10part])), ("%s%d__wlgLastIssue10Time__" + toString(curStats[ixWlgIssue10Time])), ("%s%d__wlgTotalFarmingPower__" + toString(curStats[ixWlgTotalFarmingPower])), ("%s%d__wlgAcresStakedTotal__" + toString(curStats[ixWlgAcresStakedTotal])), ("%s%d__nftTotalIssued__" + toString(curStats[ixWlgNftTotalIssued])), ("%s%d__nftTotalBurned__" + toString(curStats[ixWlgNftTotalBurned])), ("%s%d__wlNftTotalStaked__" + toString(curStats[ixWlgWlNftTotalStaked])), ("%s%d__wlNftUserStaked__" + toString(curStats[ixWlgWlNftUserStaked]))])
561561 }
562562
563563
564564
565565 @Callable(i)
566566 func lotteryStatsREADONLY (userAddrOpt) = {
567567 let today = (height / DAY_BLOCKS)
568568 let week = (height / WEEK_BLOCKS)
569569 let lastWeek = (week - 1)
570570 let curWeekTickets = valueOrElse(getInteger(wlgContract, keyUserWeekTickets(userAddrOpt, week)), 0)
571571 let lastWeekTickets = valueOrElse(getInteger(wlgContract, keyUserWeekTickets(userAddrOpt, lastWeek)), 0)
572572 let curWeekTotalTickets = valueOrElse(getInteger(wlgContract, keyTotalWeekTickets(week)), 0)
573573 let lastWeekTotalTickets = valueOrElse(getInteger(wlgContract, keyTotalWeekTickets(lastWeek)), 0)
574574 let usersBet = valueOrElse(getString(wlgContract, keyUserBet(userAddrOpt)), "")
575575 $Tuple2(nil, [((("%s%d%d__totalTickets__" + toString(lastWeekTotalTickets)) + SEP) + toString(curWeekTotalTickets)), ((("%s%d%d__userTickets__" + toString(lastWeekTickets)) + SEP) + toString(curWeekTickets)), ("%s%d__blockchainWeek__" + toString(week)), ("%s%d__blockchainDay__" + toString(today)), ("%s%d__blockchainMinute__" + toString((height % DAY_BLOCKS))), ("%s%d__winningBetToday__" + toString(winningBet(today))), ("%s%s__usersBet__" + usersBet)])
576576 }
577577
578578
579579
580580 @Callable(i)
581581 func userOrdersREADONLY (userAddrOpt) = {
582582 let nftsKey = keyAssetIdsBySeller(userAddrOpt)
583583 let nftsStr = valueOrElse(getString(marketContract, nftsKey), "")
584584 $Tuple2(nil, [("%s%s__userSaleNfts__" + nftsStr)])
585585 }
586586
587587
588588
589589 @Callable(i)
590590 func orderInfoREADONLY (assetIdOpt) = {
591591 let price = valueOrElse(getInteger(marketContract, keyPriceByAssetId(assetIdOpt)), 0)
592592 let seller = valueOrElse(getString(marketContract, keySellerByAssetId(assetIdOpt)), "")
593593 $Tuple2(nil, [("%s%d__marketNftPrice__" + toString(price)), ("%s%s__marketNftSeller__" + seller)])
594594 }
595595
596596
597597
598598 @Callable(i)
599599 func promoStatsREADONLY (userAddrOpt) = {
600600 let today = (height / DAY_BLOCKS)
601601 let userTickets = valueOrElse(getInteger(acres2Contract, keyUserPromoTickets(userAddrOpt)), 0)
602602 let totalTickets = valueOrElse(getInteger(acres2Contract, keyTotalPromoTickets), 0)
603603 let promoMap = valueOrElse(getString(acres2Contract, keyPromoMap), "")
604604 let winnersToday = valueOrElse(getString(acres2Contract, keyPromoRoundWinners(today)), "")
605605 func sum (acc,j) = {
606606 let day = ((DAILY_PROMO_START_BLOCK / DAY_BLOCKS) + j)
607607 if ((day > today))
608608 then acc
609609 else {
610610 let winners = valueOrElse(getString(acres2Contract, keyPromoRoundWinners(day)), "")
611611 if ((winners == ""))
612612 then acc
613613 else {
614614 let winnersList = split(winners, "_")
615615 let idx = indexOf(winnersList, userAddrOpt)
616616 if (isDefined(idx))
617617 then $Tuple2((acc._1 + 1), (acc._2 + promoAwardPerRound[value(idx)]))
618618 else acc
619619 }
620620 }
621621 }
622622
623623 let $t01185912027 = {
624624 let $l = [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]
625625 let $s = size($l)
626626 let $acc0 = $Tuple2(0, 0)
627627 func $f0_1 ($a,$i) = if (($i >= $s))
628628 then $a
629629 else sum($a, $l[$i])
630630
631631 func $f0_2 ($a,$i) = if (($i >= $s))
632632 then $a
633633 else throw("List size exceeds 30")
634634
635635 $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($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)
636636 }
637637 let userPrizes = $t01185912027._1
638638 let userAcres = $t01185912027._2
639639 $Tuple2(nil, [("%s%d__totalPromoTickets__" + toString(totalTickets)), ("%s%d__userPromoTickets__" + toString(userTickets)), ("%s%d__blockchainDay__" + toString(today)), ("%s%s__promoWinnersToday__" + winnersToday), ((("%s%d%d__userPromoPrizesAcresSoFar__" + toString(userPrizes)) + SEP) + toString(userAcres))])
640640 }
641641
642642

github/deemru/w8io/169f3d6 
53.24 ms