tx · DDcidiwvRopooNb6KPA5bzJxz5JBZPoB2Wu5Z2aRrujh

3N7HtrKeFFLz5oy6PfGv1Lg3GwPk4gCPdGy:  -0.02200000 Waves

2024.11.16 17:03 [3374095] smart account 3N7HtrKeFFLz5oy6PfGv1Lg3GwPk4gCPdGy > SELF 0.00000000 Waves

{ "type": 13, "id": "DDcidiwvRopooNb6KPA5bzJxz5JBZPoB2Wu5Z2aRrujh", "fee": 2200000, "feeAssetId": null, "timestamp": 1731765849258, "version": 2, "chainId": 84, "sender": "3N7HtrKeFFLz5oy6PfGv1Lg3GwPk4gCPdGy", "senderPublicKey": "FsR18761ZAsUqsTd7TK3XmR6bhihs1UXVmpHYxz5JzQ1", "proofs": [ "5xCcxNZFto3sCTfCEugC5dZrWzinczq9e7vci6ZZgDqgE8oMNfZCY8c8q2JpJ1vfA8Z6b5bQKj37BmrrQzFTNAiL" ], "script": "base64:BgJCCAISBgoECAgICBIDCgEIEgMKAQESBAoCCAESAwoBARIECgIIARIAEgMKAQgSAwoBARIDCgEBEgASAwoBCBIDCgEIggEACkRBWV9NSUxMSVMAgLiZKQAFY2hhaW4JAMkBAgkAygECCAUEdGhpcwVieXRlcwABAAEAC3VzZHRBc3NldElkBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwASCE2nqyCAM/TtG7yo7ui5O8yYLdC136B5ao1CP5qA//uQMJAAACAQFUBQckbWF0Y2gwASBVsdifcoeC7+XjW42sBatl3ppDoS8WuwXzGreHpfHFGAkAAgECDVVua25vd24gY2hhaW4AFWRlZmF1bHRSZXN0QWRkcmVzc1N0cgQHJG1hdGNoMAUFY2hhaW4DCQAAAgEBVwUHJG1hdGNoMAIjM1BRQ3V2RmJ2aDRMa1BVbnJuVTF6M2puYkExcDltM1dOaHYDCQAAAgEBVAUHJG1hdGNoMAIjM011bWtHR3p0Q0tBWHBXRHF4a2Rkb2ZxWFNVYnFRa3ZTSnkJAAIBAg1Vbmtub3duIGNoYWluABBhY3JlczJBZGRyZXNzU3RyBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwAiMzUDRVSDNUOW5YcE1OcFVtU21RalBtRXozRzg1dDN6bjZlQQMJAAACAQFUBQckbWF0Y2gwAiMzTkJQeDFGY2l1M0pRTkVHWjIxalNuVGR1dExOR0dCVVNYaAkAAgECDVVua25vd24gY2hhaW4ADmFyYml0cmFnZURlbGF5BAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwBQpEQVlfTUlMTElTAwkAAAIBAVQFByRtYXRjaDAA4NQDCQACAQINVW5rbm93biBjaGFpbgADU0VQAgJfXwAFTVVMVDYAwIQ9AAVNVUxUOACAwtcvAA5NSU5TSE9QUEFZTUVOVACgjQYBD2dldFN0cmluZ09yRmFpbAIHYWRkcmVzcwNrZXkJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQdhZGRyZXNzBQNrZXkJALkJAgkAzAgCAgptYW5kYXRvcnkgCQDMCAIJAKUIAQUHYWRkcmVzcwkAzAgCAgEuCQDMCAIFA2tleQkAzAgCAg8gaXMgbm90IGRlZmluZWQFA25pbAIAABFJZHhDZmdTdGFraW5nRGFwcAABAA1JZHhDZmdXbGdEYXBwAAQAFElkeENmZ1B1enpsZVBvb2xEYXBwAAUAFElkeENmZ0ludmVzdEZ1bmREYXBwAAYAD0lkeENmZ0FjcmVzRGFwcAAIAQprZXlSZXN0Q2ZnAAIOJXNfX3Jlc3RDb25maWcBDmtleVJlc3RBZGRyZXNzAAIMJXNfX3Jlc3RBZGRyAQ9rZXlSZXN0MkFkZHJlc3MAAg0lc19fcmVzdDJBZGRyARFyZWFkUmVzdENmZ09yRmFpbAEEcmVzdAkAvAkCCQEPZ2V0U3RyaW5nT3JGYWlsAgUEcmVzdAkBCmtleVJlc3RDZmcABQNTRVABGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIHcmVzdENmZwNpZHgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQCRAwIFB3Jlc3RDZmcFA2lkeAkArAICAipSZXN0IGNmZyBkb2Vzbid0IGNvbnRhaW4gYWRkcmVzcyBhdCBpbmRleCAJAKQDAQUDaWR4AAxyZXN0Q29udHJhY3QJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwkBDmtleVJlc3RBZGRyZXNzAAUVZGVmYXVsdFJlc3RBZGRyZXNzU3RyAAdyZXN0Q2ZnCQERcmVhZFJlc3RDZmdPckZhaWwBBQxyZXN0Q29udHJhY3QAD3N0YWtpbmdDb250cmFjdAkBGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIFB3Jlc3RDZmcFEUlkeENmZ1N0YWtpbmdEYXBwAAt3bGdDb250cmFjdAkBGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIFB3Jlc3RDZmcFDUlkeENmZ1dsZ0RhcHAAEnB1enpsZVBvb2xDb250cmFjdAkBGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIFB3Jlc3RDZmcFFElkeENmZ1B1enpsZVBvb2xEYXBwABJpbnZlc3RGdW5kQ29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQdyZXN0Q2ZnBRRJZHhDZmdJbnZlc3RGdW5kRGFwcAANYWNyZXNDb250cmFjdAkBGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIFB3Jlc3RDZmcFD0lkeENmZ0FjcmVzRGFwcAANd2xnQXNzZXRJZEtleQILd2xnX2Fzc2V0SWQACndsZ0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnAgCBQt3bGdDb250cmFjdAUNd2xnQXNzZXRJZEtleQIYV0xHT0xEIGlzIG5vdCBpc3N1ZWQgeWV0AQVhc0ludAEBdgQHJG1hdGNoMAUBdgMJAAECBQckbWF0Y2gwAgNJbnQEAW4FByRtYXRjaDAFAW4JAAIBAhVmYWlsIHRvIGNhc3QgaW50byBJbnQBCmZpeGVkUG9pbnQCA3ZhbAhkZWNpbWFscwQGdGVuUG93CQBsBgAKAAAFCGRlY2ltYWxzAAAAAAUERE9XTgQHbG93UGFydAkApAMBCQBqAgUDdmFsBQZ0ZW5Qb3cEBnplcm9lcwkAsAICCQCkAwEFBnRlblBvdwkAZAIAAQkAsQIBBQdsb3dQYXJ0CQCsAgIJAKwCAgkArAICCQCkAwEJAGkCBQN2YWwFBnRlblBvdwIBLgUGemVyb2VzBQdsb3dQYXJ0AAZTQ0FMRTgAgMLXLwAMeHBMZXZlbFNjYWxlAIAZAA94cExldmVsUmVjaXBQb3cAoB8AEm51bVBvaW50c09uTGV2ZWxVcAADAA93bGdCYXNlQW1vdW50WHAAgNDbw/QCAQlrZXlVc2VyWFABBGFkZHIJAKwCAgIHdXNlclhQXwUEYWRkcgEMa2V5VXNlckxldmVsAQRhZGRyCQCsAgICCnVzZXJMZXZlbF8FBGFkZHIABXhwV2xnAJBOAQlsZXZlbEJ5WFABAnhwCQBrAwUMeHBMZXZlbFNjYWxlCQBsBgUCeHAABAUPeHBMZXZlbFJlY2lwUG93AAQABAUERE9XTgUGU0NBTEU4AQdsZXZlbFVwAgljdXJyTGV2ZWwFbmV3WFAECG5ld0xldmVsCQEJbGV2ZWxCeVhQAQUFbmV3WFAJAMwIAgUIbmV3TGV2ZWwJAMwIAgkAaAIFEm51bVBvaW50c09uTGV2ZWxVcAkAZQIFCG5ld0xldmVsBQljdXJyTGV2ZWwFA25pbAAITUlMTElPTjYAgIDpg7HeFgALUExBWUVSU0hBUkUAgLUYAAlEQVlNSUxMSVMAgLiZKQALdGVhbUFkZHJLZXkCCHRlYW1BZGRyAA9sYXN0VGVhbVRpbWVLZXkCFGxhc3RDbGFpbWVkVGltZV90ZWFtABF0ZWFtQW1vdW50TGVmdEtleQIOdGVhbUFtb3VudExlZnQAFWxhc3RBY3Rpdml0aWVzVGltZUtleQIabGFzdENsYWltZWRUaW1lX2FjdGl2aXRpZXMAEGFjdEFtb3VudExlZnRLZXkCFGFjdGl2aXRpZXNBbW91bnRMZWZ0ABRzdGFrZXJzQW1vdW50TGVmdEtleQIRc3Rha2Vyc0Ftb3VudExlZnQBFGtleUxhc3RBcmJUaW1lQnlVc2VyAQRhZGRyCQCsAgICEGxhc3RBcmJUaW1lVXNlcl8FBGFkZHIAD3dsZ0lzc3VlVGltZUtleQINd2xnX2lzc3VlVGltZQASd2xnSXNzdWVkQW1vdW50S2V5AhB3bGdfaXNzdWVkQW1vdW50ARprZXlBY3Jlc1N0YWtlZEFtb3VudEJ5VXNlcgEEYWRkcgkArAICAhhhY3Jlc1N0YWtlZEFtb3VudEJ5VXNlcl8FBGFkZHIBGGtleVdsZ1N0YWtlZEFtb3VudEJ5VXNlcgEEYWRkcgkArAICAhZ3bGdTdGFrZWRBbW91bnRCeVVzZXJfBQRhZGRyABF3bGdTdGFrZWRUb3RhbEtleQIUd2xnU3Rha2VkQW1vdW50VG90YWwBFmtleVdsZ1N0YWtlZFRpbWVCeVVzZXIBBGFkZHIJAKwCAgIUd2xnU3Rha2VkVGltZUJ5VXNlcl8FBGFkZHIAA002XwDAhD0AA004XwCAwtcvAApURUFNX1NIQVJFAMCaDAAOQUNUSVZJVFlfU0hBUkUAoI0GAAxQTEFZRVJfU0hBUkUAgLUYAAtZRUFSX01JTExJUwCAhuvHdQAGREFZX01TAIC4mSkACkRBWV9CTE9DS1MAoAsAB0lTU1VFMTAAgJTr3AMAD1BMQVlFUlMxMF9TSEFSRQCA6jAAEU1BUktFVElORzEwX1NIQVJFAKCNBgAMVEVBTTEwX1NIQVJFAKCNBgARTkVXX1NUQUtJTkdfU1RBUlQAgPO4wrEyABBtYXJrZXRpbmdBZGRyS2V5Ag1tYXJrZXRpbmdBZGRyAAp0ZWFtQWRyS2V5Agh0ZWFtQWRkcgAObGFzdFRlYW1UaW1LZXkCFGxhc3RDbGFpbWVkVGltZV90ZWFtAA50ZWFtQW10TGVmdEtleQIOdGVhbUFtb3VudExlZnQAFGxhc3RBY3Rpdml0aWVzVGltS2V5AhpsYXN0Q2xhaW1lZFRpbWVfYWN0aXZpdGllcwANYWN0QW10TGVmdEtleQIUYWN0aXZpdGllc0Ftb3VudExlZnQAEXN0YWtlcnNBbXRMZWZ0S2V5AhFzdGFrZXJzQW1vdW50TGVmdAEWa2V5TGFzdENsYWltVGltZUJ5VXNlcgEEYWRkcgkArAICAhRsYXN0Q2xhaW1lZFRpbWVVc2VyXwUEYWRkcgENZGlzdHJCeVBlcmlvZAIMaXNzdWVkQW1vdW50BnBlcmlvZAkAawMFDGlzc3VlZEFtb3VudAkAaAIFDFBMQVlFUl9TSEFSRQkAZAIFBnBlcmlvZAABCQBoAgAGBQNNNl8AEXdsZ0lzc3VlMTBUaW1lS2V5Ag93bGdfaXNzdWUxMFRpbWUADndsZ0lzc3VlVGltS2V5Ag13bGdfaXNzdWVUaW1lAA93bGdJc3N1ZWRBbXRLZXkCEHdsZ19pc3N1ZWRBbW91bnQADnpiSXNzdWVkQW10S2V5AhJ6YmlsbF9pc3N1ZWRBbW91bnQBF2tleUFjcmVzU3Rha2VkQW10QnlVc2VyAQRhZGRyCQCsAgICGGFjcmVzU3Rha2VkQW1vdW50QnlVc2VyXwUEYWRkcgAUdG90YWxGYXJtaW5nUG93ZXJLZXkCEXRvdGFsRmFybWluZ1Bvd2VyAAlkYXBwMlJlc3QAAAAMZGFwcDJTdGFraW5nAAEACGRhcHAyV2xnAAIAC2RhcHAyUHV6emxlAAMAD2RhcHAySW52ZXN0RnVuZAAEAApsZXZlbEFjcmVzCQDMCAIAAAkAzAgCAAoJAMwIAgAUCQDMCAIAKAkAzAgCAFAJAMwIAgCWAQkAzAgCAPoBCQDMCAIAkAMJAMwIAgC8BQkAzAgCAOgHBQNuaWwBD2dldExldmVsQnlBY3JlcwEFYWNyZXMEA2FjcgkAaQIJAGQCBQVhY3JlcwD/wdcvBQNNOF8KAQdjaGVja2VyAgNhY2MEaXRlbQMJAGcCBQRpdGVtBQNhY3IFA2FjYwkAZAIFA2FjYwABCgACJGwFCmxldmVsQWNyZXMKAAIkcwkAkAMBBQIkbAoABSRhY2MwAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBB2NoZWNrZXICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoBFmdldEZhcm1pbmdQb3dlckJ5QWNyZXMBBWFjcmVzCQBoAgkAaAIFBWFjcmVzABQJAGQCCQEPZ2V0TGV2ZWxCeUFjcmVzAQUFYWNyZXMABAEQZ2V0RmFybWluZ1Bvd2VycwISdXNlckFkZHJTdHJPckVtcHR5DmFjcmVzMkNvbnRyYWN0BAd0b3RhbEZQCQELdmFsdWVPckVsc2UCCQCaCAIFDmFjcmVzMkNvbnRyYWN0BRR0b3RhbEZhcm1pbmdQb3dlcktleQAABAl1c2VyQWNyZXMJAQt2YWx1ZU9yRWxzZQIJAJoIAgUOYWNyZXMyQ29udHJhY3QJARdrZXlBY3Jlc1N0YWtlZEFtdEJ5VXNlcgEFEnVzZXJBZGRyU3RyT3JFbXB0eQAABAZ1c2VyRlAJARZnZXRGYXJtaW5nUG93ZXJCeUFjcmVzAQUJdXNlckFjcmVzCQDMCAIFB3RvdGFsRlAJAMwIAgUGdXNlckZQBQNuaWwBCmtleVVzZXJCZXQBBGFkZHIJAKwCAgIIdXNlckJldF8FBGFkZHIBDmtleVVzZXJUaWNrZXRzAQRhZGRyCQCsAgICDHVzZXJUaWNrZXRzXwUEYWRkcgAPa2V5VG90YWxUaWNrZXRzAgx0b3RhbFRpY2tldHMBCndpbm5pbmdCZXQBA2RheQkAagIJALEJAQkBBXZhbHVlAQgJAQV2YWx1ZQEJAO0HAQkAaAIFA2RheQUKREFZX0JMT0NLUwN2cmYABAAKaWR4VG90YWxGUAAAAAlpZHhVc2VyRlAAAQALaXhXbGdBbW91bnQAAAAIaXhXbGdXbGcAAQAKaXhXbGdQcmljZQACAA5peFdsZ0lzc3VlVGltZQAIAA9peFdsZ1RlYW1BbUxlZnQACwATaXhXbGdUZWFtQW1BdmFpbE5vdwAMAA5peFdsZ0FjdEFtTGVmdAAPABJpeFdsZ0FjdEFtQXZhaWxOb3cAEAAQaXhXbGdBbUxlZnRUb3RhbAATABNpeFdsZ1VzZXJBbUF2YWlsTm93ABcAEGl4V2xnRWZmVXNlclRpbWUAGAASaXhXbGdJc3N1ZTEwQW1vdW50ABkAG2l4V2xnTWFya2V0aW5nSXNzdWUxMEFtb3VudAAaABZpeFdsZ1RlYW1Jc3N1ZTEwQW1vdW50ABsAD2l4V2xnVXNlcjEwcGFydAAcABBpeFdsZ0lzc3VlMTBUaW1lAB0BDGdldFdsZ1N0YXRzMgQLdXNlckFkZHJPcHQJY29udHJhY3RzBnVzZHRJZBV1c2R0QmFsYW5jZUNvcnJlY3Rpb24EDGlzc3VlZEFtb3VudAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIJAJEDAgUJY29udHJhY3RzBQhkYXBwMldsZwUPd2xnSXNzdWVkQW10S2V5AhhXTEdPTEQgaXMgbm90IGlzc3VlZCB5ZXQEB3Jlc3RVc2QJAPAHAgkAkQMCBQljb250cmFjdHMFCWRhcHAyUmVzdAUGdXNkdElkBAZ3bGdVc2QJAGUCCQDwBwIJAJEDAgUJY29udHJhY3RzBQhkYXBwMldsZwUGdXNkdElkBRV1c2R0QmFsYW5jZUNvcnJlY3Rpb24ECXB1enpsZVVzZAkA8AcCCQCRAwIFCWNvbnRyYWN0cwULZGFwcDJQdXp6bGUFBnVzZHRJZAQJYWNyZXMyVXNkCQDwBwIJAJEDAgUJY29udHJhY3RzBQxkYXBwMlN0YWtpbmcFBnVzZHRJZAQRaW52ZXN0Rm5kQ29udHJhY3QJAJEDAgUJY29udHJhY3RzBQ9kYXBwMkludmVzdEZ1bmQED2ludmVzdEZ1bmRUb3RhbAkAZAIJAPAHAgURaW52ZXN0Rm5kQ29udHJhY3QFBnVzZHRJZAkBC3ZhbHVlT3JFbHNlAgkAmggCBRFpbnZlc3RGbmRDb250cmFjdAUOemJJc3N1ZWRBbXRLZXkAAAQNdG90YWxGdW5kc1VzZAkAZAIJAGQCBQlhY3JlczJVc2QFBndsZ1VzZAUPaW52ZXN0RnVuZFRvdGFsBAV3bGdJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCcCAIJAJEDAgUJY29udHJhY3RzBQhkYXBwMldsZwILd2xnX2Fzc2V0SWQCE05vdCBpbml0aWFsaXplZCB5ZXQEA25vdwgFCWxhc3RCbG9jawl0aW1lc3RhbXAECWlzc3VlVGltZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIJAJEDAgUJY29udHJhY3RzBQhkYXBwMldsZwUOd2xnSXNzdWVUaW1LZXkCD05vdCBpbml0aWFsaXplZAQGd2xnV2xnCQDwBwIJAJEDAgUJY29udHJhY3RzBQhkYXBwMldsZwUFd2xnSWQECXRlYW1Ub3RhbAkAawMFDGlzc3VlZEFtb3VudAUKVEVBTV9TSEFSRQUDTTZfBA50ZWFtQW1vdW50TGVmdAkBC3ZhbHVlT3JFbHNlAgkAmggCCQCRAwIFCWNvbnRyYWN0cwUIZGFwcDJXbGcFDnRlYW1BbXRMZWZ0S2V5BQl0ZWFtVG90YWwEDGxhc3RUZWFtVGltZQkBC3ZhbHVlT3JFbHNlAgkAmggCCQCRAwIFCWNvbnRyYWN0cwUIZGFwcDJXbGcFDmxhc3RUZWFtVGltS2V5BQlpc3N1ZVRpbWUECHRlYW1BZGRyCQERQGV4dHJOYXRpdmUoMTA2MikBCQEFdmFsdWUBCQCdCAIJAJEDAgUJY29udHJhY3RzBQhkYXBwMldsZwUKdGVhbUFkcktleQQWdGVhbUFtb3VudEF2YWlsYWJsZU5vdwkAlwMBCQDMCAIJAGsDBQl0ZWFtVG90YWwJAGUCBQNub3cFDGxhc3RUZWFtVGltZQkAaAIAAwULWUVBUl9NSUxMSVMJAMwIAgUOdGVhbUFtb3VudExlZnQFA25pbAQKdGVhbVdsZ29sZAkA8AcCBQh0ZWFtQWRkcgUFd2xnSWQECGFjdFRvdGFsCQBrAwUMaXNzdWVkQW1vdW50BQ5BQ1RJVklUWV9TSEFSRQUDTTZfBA1hY3RBbW91bnRMZWZ0CQELdmFsdWVPckVsc2UCCQCaCAIJAJEDAgUJY29udHJhY3RzBQhkYXBwMldsZwUNYWN0QW10TGVmdEtleQUIYWN0VG90YWwEEmxhc3RBY3Rpdml0aWVzVGltZQkBC3ZhbHVlT3JFbHNlAgkAmggCCQCRAwIFCWNvbnRyYWN0cwUIZGFwcDJXbGcFFGxhc3RBY3Rpdml0aWVzVGltS2V5BQlpc3N1ZVRpbWUEFWFjdEFtb3VudEF2YWlsYWJsZU5vdwkAlwMBCQDMCAIJAGsDBQhhY3RUb3RhbAkAZQIFA25vdwUSbGFzdEFjdGl2aXRpZXNUaW1lCQBoAgADBQtZRUFSX01JTExJUwkAzAgCBQ1hY3RBbW91bnRMZWZ0BQNuaWwECWFjdFdsZ29sZAkA8AcCCQCRAwIFCWNvbnRyYWN0cwUJZGFwcDJSZXN0BQV3bGdJZAQMbGFzdFVzZXJUaW1lCQELdmFsdWVPckVsc2UCCQCaCAIJAJEDAgUJY29udHJhY3RzBQhkYXBwMldsZwkBFmtleUxhc3RDbGFpbVRpbWVCeVVzZXIBBQt1c2VyQWRkck9wdAUJaXNzdWVUaW1lBA5sYXN0VXNlclBlcmlvZAkAaQIJAGUCBQxsYXN0VXNlclRpbWUFCWlzc3VlVGltZQULWUVBUl9NSUxMSVMECm5vd0xpbWl0ZWQJAJcDAQkAzAgCBQNub3cJAMwIAgkAZAIFCWlzc3VlVGltZQkAaAIAAwULWUVBUl9NSUxMSVMFA25pbAQJY3VyUGVyaW9kCQCXAwEJAMwIAgkAaQIJAGUCBQNub3cFCWlzc3VlVGltZQULWUVBUl9NSUxMSVMJAMwIAgACBQNuaWwEA2VmZgkBEGdldEZhcm1pbmdQb3dlcnMCBQt1c2VyQWRkck9wdAkAkQMCBQljb250cmFjdHMFDGRhcHAyU3Rha2luZwQVY3VyUGVyaW9kRGlzdHJpYnV0aW9uCQENZGlzdHJCeVBlcmlvZAIFDGlzc3VlZEFtb3VudAUJY3VyUGVyaW9kBA1wcmV2UGVyaW9kRW5kCQBkAgUJaXNzdWVUaW1lCQBoAgULWUVBUl9NSUxMSVMFCWN1clBlcmlvZAQRcHJldlByZXZQZXJpb2RFbmQJAGQCBQlpc3N1ZVRpbWUJAGgCBQtZRUFSX01JTExJUwkAZQIFCWN1clBlcmlvZAABBAJhMAkAawMFFWN1clBlcmlvZERpc3RyaWJ1dGlvbgkAZQIFCm5vd0xpbWl0ZWQFDGxhc3RVc2VyVGltZQULWUVBUl9NSUxMSVMEDXVzZXJBdmFpbGFibGUDCQAAAgUObGFzdFVzZXJQZXJpb2QFCWN1clBlcmlvZAUCYTADCQAAAgUObGFzdFVzZXJQZXJpb2QJAGUCBQljdXJQZXJpb2QAAQQCYTEJAGsDCQENZGlzdHJCeVBlcmlvZAIFDGlzc3VlZEFtb3VudAkAZQIFCWN1clBlcmlvZAABCQBlAgUNcHJldlBlcmlvZEVuZAUMbGFzdFVzZXJUaW1lBQtZRUFSX01JTExJUwkAZAIFAmExBQJhMAQCYTIJAGsDCQENZGlzdHJCeVBlcmlvZAIFDGlzc3VlZEFtb3VudAkAZQIFCWN1clBlcmlvZAACCQBlAgURcHJldlByZXZQZXJpb2RFbmQFDGxhc3RVc2VyVGltZQULWUVBUl9NSUxMSVMEAmExCQENZGlzdHJCeVBlcmlvZAIFDGlzc3VlZEFtb3VudAkAZQIFCWN1clBlcmlvZAABCQBkAgkAZAIFAmEyBQJhMQUCYTAED2Ftb3VudExlZnRUb3RhbAkBC3ZhbHVlT3JFbHNlAgkAmggCCQCRAwIFCWNvbnRyYWN0cwUIZGFwcDJXbGcFEXN0YWtlcnNBbXRMZWZ0S2V5AAAECnVzZXJBbW91bnQDCQECIT0CCQCRAwIFA2VmZgUKaWR4VG90YWxGUAAACQBrAwUNdXNlckF2YWlsYWJsZQkAkQMCBQNlZmYFCWlkeFVzZXJGUAkAkQMCBQNlZmYFCmlkeFRvdGFsRlAAAAQPbGFzdElzc3VlMTBUaW1lCQELdmFsdWVPckVsc2UCCQCaCAIJAJEDAgUJY29udHJhY3RzBQhkYXBwMldsZwURd2xnSXNzdWUxMFRpbWVLZXkFEU5FV19TVEFLSU5HX1NUQVJUBA1pc3N1ZTEwQW1vdW50CQBrAwUHSVNTVUUxMAkAlgMBCQDMCAIJAGUCBQNub3cFD2xhc3RJc3N1ZTEwVGltZQkAzAgCAAAFA25pbAUGREFZX01TBBZtYXJrZXRpbmdJc3N1ZTEwQW1vdW50CQBrAwUNaXNzdWUxMEFtb3VudAURTUFSS0VUSU5HMTBfU0hBUkUFA002XwQRdGVhbUlzc3VlMTBBbW91bnQJAGsDBQ1pc3N1ZTEwQW1vdW50BQxURUFNMTBfU0hBUkUFA002XwQOdXNlcjEwSW50ZXJ2YWwJAJYDAQkAzAgCCQBlAgUDbm93CQCWAwEJAMwIAgURTkVXX1NUQUtJTkdfU1RBUlQJAMwIAgUMbGFzdFVzZXJUaW1lBQNuaWwJAMwIAgAABQNuaWwECnVzZXIxMHBhcnQDCQECIT0CCQCRAwIFA2VmZgUKaWR4VG90YWxGUAAACQBrAwkAawMJAGsDBQdJU1NVRTEwBQ51c2VyMTBJbnRlcnZhbAUGREFZX01TCQCRAwIFA2VmZgUJaWR4VXNlckZQCQCRAwIFA2VmZgUKaWR4VG90YWxGUAUPUExBWUVSUzEwX1NIQVJFBQNNNl8AAAQObmV3SXNzdWUxMFRpbWUJAJYDAQkAzAgCBRFORVdfU1RBS0lOR19TVEFSVAkAzAgCBQNub3cFA25pbAkAzAgCBQxpc3N1ZWRBbW91bnQJAMwIAgUGd2xnV2xnCQDMCAIJAGsDBQ10b3RhbEZ1bmRzVXNkBQNNOF8FDGlzc3VlZEFtb3VudAkAzAgCBQ10b3RhbEZ1bmRzVXNkCQDMCAIFB3Jlc3RVc2QJAMwIAgUJYWNyZXMyVXNkCQDMCAIFBndsZ1VzZAkAzAgCBQlwdXp6bGVVc2QJAMwIAgUJaXNzdWVUaW1lCQDMCAIFDGxhc3RUZWFtVGltZQkAzAgCBQl0ZWFtVG90YWwJAMwIAgUOdGVhbUFtb3VudExlZnQJAMwIAgUWdGVhbUFtb3VudEF2YWlsYWJsZU5vdwkAzAgCBQp0ZWFtV2xnb2xkCQDMCAIFCGFjdFRvdGFsCQDMCAIFDWFjdEFtb3VudExlZnQJAMwIAgUVYWN0QW1vdW50QXZhaWxhYmxlTm93CQDMCAIFCWFjdFdsZ29sZAkAzAgCBQljdXJQZXJpb2QJAMwIAgUPYW1vdW50TGVmdFRvdGFsCQDMCAIFFWN1clBlcmlvZERpc3RyaWJ1dGlvbgkAzAgCBQxsYXN0VXNlclRpbWUJAMwIAgUPaW52ZXN0RnVuZFRvdGFsCQDMCAIFCnVzZXJBbW91bnQJAMwIAgUKbm93TGltaXRlZAkAzAgCBQ1pc3N1ZTEwQW1vdW50CQDMCAIFFm1hcmtldGluZ0lzc3VlMTBBbW91bnQJAMwIAgURdGVhbUlzc3VlMTBBbW91bnQJAMwIAgUKdXNlcjEwcGFydAkAzAgCBQ5uZXdJc3N1ZTEwVGltZQkAzAgCCQCRAwIFA2VmZgUKaWR4VG90YWxGUAUDbmlsAANuZXQJAMkBAgkAygECCAUEdGhpcwVieXRlcwABAAEAFmRlZmF1bHRSZXN0MkFkZHJlc3NTdHIEByRtYXRjaDAFA25ldAMJAAACAQFXBQckbWF0Y2gwAiMzUEZ3WXRhOGJpRXozMXpwZUZlNURKSzh3RTV0clNwUVZGOAMJAAACAQFUBQckbWF0Y2gwAiMzTjdVdVlhcjYyNjRQNThGQmhWV0tQUUFoNFl1YTJoZ25ndgkAAgECDVVua25vd24gY2hhaW4ADXByb2ZpdEFkZHJLZXkCCnByb2ZpdEFkZHIAGXN0YWtlcnNBbW91bnRQYWlkVG90YWxLZXkCFnN0YWtlcnNBbW91bnRQYWlkVG90YWwBGGtleVN0YWtlcnNBbW91bnRQYWlkVXNlcgEEYWRkcgkArAICAhZzdGFrZXJzQW1vdW50UGFpZFVzZXJfBQRhZGRyAA1yZXN0MkNvbnRyYWN0CQERQGV4dHJOYXRpdmUoMTA2MikBCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMJAQ9rZXlSZXN0MkFkZHJlc3MABRZkZWZhdWx0UmVzdDJBZGRyZXNzU3RyAA5hY3JlczJDb250cmFjdAkBEUBleHRyTmF0aXZlKDEwNjIpAQUQYWNyZXMyQWRkcmVzc1N0cgEHcHJvbG9nMgAJAQVhc0ludAEJAP0HBAUOYWNyZXMyQ29udHJhY3QCCnNhdmVMYXN0VHgFA25pbAUDbmlsAQ9nZXRTd2FwTGltaXRXbGcBBGFkZHIECGxhc3RUaW1lCQELdmFsdWVPckVsc2UCCQCfCAEJARRrZXlMYXN0QXJiVGltZUJ5VXNlcgEFBGFkZHIAAAQDbm93CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAMJAGYCBQ5hcmJpdHJhZ2VEZWxheQkAZQIFA25vdwUIbGFzdFRpbWUJAAIBCQCsAgIJAKwCAgIfQXJiaXRyYWdlcyBhcmUgcG9zc2libGUgb25jZSBhIAkApAMBCQBpAgUOYXJiaXRyYWdlRGVsYXkA4NQDAgNtaW4JAQt2YWx1ZU9yRWxzZQIJAJoIAgUOYWNyZXMyQ29udHJhY3QJARprZXlBY3Jlc1N0YWtlZEFtb3VudEJ5VXNlcgEFBGFkZHIAAAEOY2xhaW1JbnRlcm5hbDIBBGFkZHIECGN1clN0YXRzCQEMZ2V0V2xnU3RhdHMyBAUEYWRkcgkAzAgCBQ1yZXN0MkNvbnRyYWN0CQDMCAIFDmFjcmVzMkNvbnRyYWN0CQDMCAIFC3dsZ0NvbnRyYWN0CQDMCAIFEnB1enpsZVBvb2xDb250cmFjdAkAzAgCBRJpbnZlc3RGdW5kQ29udHJhY3QFA25pbAULdXNkdEFzc2V0SWQAAAQLdXNlclRpbWVLZXkJARZrZXlMYXN0Q2xhaW1UaW1lQnlVc2VyAQUEYWRkcgQMbGFzdFVzZXJUaW1lCQELdmFsdWVPckVsc2UCCQCfCAEFC3VzZXJUaW1lS2V5AAAEC3VzZXJFZmZUaW1lCQCRAwIFCGN1clN0YXRzBRBpeFdsZ0VmZlVzZXJUaW1lAwkAAAIFDGxhc3RVc2VyVGltZQULdXNlckVmZlRpbWUJAJQKAgUDbmlsAAAEA25vdwgFCWxhc3RCbG9jawl0aW1lc3RhbXAECWlzc3VlVGltZQkAkQMCBQhjdXJTdGF0cwUOaXhXbGdJc3N1ZVRpbWUEDnRlYW1BbW91bnRMZWZ0CQCRAwIFCGN1clN0YXRzBQ9peFdsZ1RlYW1BbUxlZnQECnRlYW1BbW91bnQJAGQCCQCRAwIFCGN1clN0YXRzBRNpeFdsZ1RlYW1BbUF2YWlsTm93CQCRAwIFCGN1clN0YXRzBRZpeFdsZ1RlYW1Jc3N1ZTEwQW1vdW50BAx0ZWFtVHJhbnNmZXIDCQBmAgUKdGVhbUFtb3VudAAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQV2YWx1ZQEJAKIIAQULdGVhbUFkZHJLZXkFCnRlYW1BbW91bnQFCndsZ0Fzc2V0SWQFA25pbAUDbmlsBA1hY3RBbW91bnRMZWZ0CQCRAwIFCGN1clN0YXRzBQ5peFdsZ0FjdEFtTGVmdAQJYWN0QW1vdW50CQCRAwIFCGN1clN0YXRzBRJpeFdsZ0FjdEFtQXZhaWxOb3cEC2FjdFRyYW5zZmVyAwkAZgIFCWFjdEFtb3VudAAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFDHJlc3RDb250cmFjdAUJYWN0QW1vdW50BQp3bGdBc3NldElkBQNuaWwFA25pbAQPbWFya2V0aW5nQW1vdW50CQCRAwIFCGN1clN0YXRzBRtpeFdsZ01hcmtldGluZ0lzc3VlMTBBbW91bnQEEW1hcmtldGluZ1RyYW5zZmVyAwkAZgIFD21hcmtldGluZ0Ftb3VudAAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQV2YWx1ZQEJAKIIAQUQbWFya2V0aW5nQWRkcktleQUPbWFya2V0aW5nQW1vdW50BQp3bGdBc3NldElkBQNuaWwFA25pbAQKdXNlckFtb3VudAkAkQMCBQhjdXJTdGF0cwUTaXhXbGdVc2VyQW1BdmFpbE5vdwQHdXNlcktleQkBGGtleVN0YWtlcnNBbW91bnRQYWlkVXNlcgEFBGFkZHIECXVzZXJUb3RhbAkAZAIFCnVzZXJBbW91bnQJAJEDAgUIY3VyU3RhdHMFD2l4V2xnVXNlcjEwcGFydAQOaXNzdWVkMTBBbW91bnQJAJEDAgUIY3VyU3RhdHMFEml4V2xnSXNzdWUxMEFtb3VudAkAlAoCCQDOCAIJAM4IAgkAzggCCQDMCAIJAQdSZWlzc3VlAwUKd2xnQXNzZXRJZAUOaXNzdWVkMTBBbW91bnQGCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRJ3bGdJc3N1ZWRBbW91bnRLZXkJAGQCCQCRAwIFCGN1clN0YXRzBQtpeFdsZ0Ftb3VudAUOaXNzdWVkMTBBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIFEXdsZ0lzc3VlMTBUaW1lS2V5CQCRAwIFCGN1clN0YXRzBRBpeFdsZ0lzc3VlMTBUaW1lCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQd1c2VyS2V5CQBkAgkBC3ZhbHVlT3JFbHNlAgkAnwgBBQd1c2VyS2V5AAAFCnVzZXJBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIFGXN0YWtlcnNBbW91bnRQYWlkVG90YWxLZXkJAGQCCQELdmFsdWVPckVsc2UCCQCfCAEFGXN0YWtlcnNBbW91bnRQYWlkVG90YWxLZXkAAAUKdXNlckFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgUUc3Rha2Vyc0Ftb3VudExlZnRLZXkJAGUCCQCRAwIFCGN1clN0YXRzBRBpeFdsZ0FtTGVmdFRvdGFsBQp1c2VyQW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRF0ZWFtQW1vdW50TGVmdEtleQkAZAIJAGUCBQ50ZWFtQW1vdW50TGVmdAUKdGVhbUFtb3VudAkAkQMCBQhjdXJTdGF0cwUWaXhXbGdUZWFtSXNzdWUxMEFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgUPbGFzdFRlYW1UaW1lS2V5BQNub3cJAMwIAgkBDEludGVnZXJFbnRyeQIFEGFjdEFtb3VudExlZnRLZXkJAGUCBQ1hY3RBbW91bnRMZWZ0BQlhY3RBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIFFWxhc3RBY3Rpdml0aWVzVGltZUtleQUDbm93CQDMCAIJAQxJbnRlZ2VyRW50cnkCBQt1c2VyVGltZUtleQULdXNlckVmZlRpbWUFA25pbAUMdGVhbVRyYW5zZmVyBQthY3RUcmFuc2ZlcgURbWFya2V0aW5nVHJhbnNmZXIFCXVzZXJUb3RhbAEOdGFrZVhwSW50ZXJuYWwCBGFkZHIFZGVsdGEEA25vdwgFCWxhc3RCbG9jawl0aW1lc3RhbXAEB3RpbWVLZXkJARZrZXlXbGdTdGFrZWRUaW1lQnlVc2VyAQUEYWRkcgQJYW1vdW50S2V5CQEYa2V5V2xnU3Rha2VkQW1vdW50QnlVc2VyAQUEYWRkcgQIbGFzdFRpbWUJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUHdGltZUtleQAABAdvbGRVc2VyCQELdmFsdWVPckVsc2UCCQCfCAEFCWFtb3VudEtleQAABAhvbGRUb3RhbAkBC3ZhbHVlT3JFbHNlAgkAnwgBBRF3bGdTdGFrZWRUb3RhbEtleQAABAJ4cAkAawMJAGsDBQV4cFdsZwUHb2xkVXNlcgUPd2xnQmFzZUFtb3VudFhwCQBlAgUIbGFzdFRpbWUFA25vdwUJREFZTUlMTElTCQCVCgMJAMwIAgkBDEludGVnZXJFbnRyeQIFB3RpbWVLZXkFA25vdwkAzAgCCQEMSW50ZWdlckVudHJ5AgUJYW1vdW50S2V5CQBkAgUHb2xkVXNlcgUFZGVsdGEJAMwIAgkBDEludGVnZXJFbnRyeQIFEXdsZ1N0YWtlZFRvdGFsS2V5CQBkAgUIb2xkVG90YWwFBWRlbHRhBQNuaWwFAnhwBQdvbGRVc2VyARRjbGFpbVRpY2tldHNJbnRlcm5hbAIEYWRkcgp1c2VyQmV0U3RyBA90b3RhbFRpY2tldHNLZXkFD2tleVRvdGFsVGlja2V0cwQKdGlja2V0c0tleQkBDmtleVVzZXJUaWNrZXRzAQUEYWRkcgQGYmV0S2V5CQEKa2V5VXNlckJldAEFBGFkZHIEBmRheUJldAkAtQkCBQp1c2VyQmV0U3RyAgFfBA9vbGRUb3RhbFRpY2tldHMJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUPdG90YWxUaWNrZXRzS2V5AAAECm9sZFRpY2tldHMJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUKdGlja2V0c0tleQAABAxkZWx0YVRpY2tldHMDCQAAAgkBCndpbm5pbmdCZXQBCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUGZGF5QmV0AAAJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQZkYXlCZXQAAQABAAAJAJUKAwMJAAACBQxkZWx0YVRpY2tldHMAAAUDbmlsCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQp0aWNrZXRzS2V5CQBkAgUKb2xkVGlja2V0cwUMZGVsdGFUaWNrZXRzCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ90b3RhbFRpY2tldHNLZXkJAGQCBQ9vbGRUb3RhbFRpY2tldHMFDGRlbHRhVGlja2V0cwUDbmlsCQELRGVsZXRlRW50cnkBBQZiZXRLZXkFDGRlbHRhVGlja2V0cw0BaQENY29uc3RydWN0b3JWMQQIcmVzdEFkZHINbWFya2V0aW5nQWRkcgh0ZWFtQWRkcgpwcm9maXRBZGRyAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIRUGVybWlzc2lvbiBkZW5pZWQDCQEJaXNEZWZpbmVkAQkAoQgBBQ13bGdBc3NldElkS2V5CQACAQITQWxyZWFkeSBpbml0aWFsaXplZAQMaXNzdWVkQW1vdW50BQhNSUxMSU9ONgQFaXNzdWUJAMMIBwIGV0xHT0xEAiBXYXZlc0xhbmRzIEdvbGQgaW52ZXN0bWVudCB0b2tlbgUMaXNzdWVkQW1vdW50AAgGBQR1bml0AAAEB2Fzc2V0SWQJALgIAQUFaXNzdWUJAMwIAgUFaXNzdWUJAMwIAgkBDEludGVnZXJFbnRyeQIFD3dsZ0lzc3VlVGltZUtleQgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAMwIAgkBDEludGVnZXJFbnRyeQIFEndsZ0lzc3VlZEFtb3VudEtleQUMaXNzdWVkQW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRlzdGFrZXJzQW1vdW50UGFpZFRvdGFsS2V5AAAJAMwIAgkBDEludGVnZXJFbnRyeQIFFHN0YWtlcnNBbW91bnRMZWZ0S2V5CQBrAwUITUlMTElPTjYFC1BMQVlFUlNIQVJFBQVNVUxUNgkAzAgCCQELQmluYXJ5RW50cnkCBQ13bGdBc3NldElkS2V5BQdhc3NldElkCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ5rZXlSZXN0QWRkcmVzcwAFCHJlc3RBZGRyCQDMCAIJAQtTdHJpbmdFbnRyeQIFEG1hcmtldGluZ0FkZHJLZXkFDW1hcmtldGluZ0FkZHIJAMwIAgkBC1N0cmluZ0VudHJ5AgULdGVhbUFkZHJLZXkFCHRlYW1BZGRyCQDMCAIJAQtTdHJpbmdFbnRyeQIFDXByb2ZpdEFkZHJLZXkFCnByb2ZpdEFkZHIFA25pbAFpAQ1jb25zdHJ1Y3RvclYyAQlyZXN0MkFkZHIDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAhFQZXJtaXNzaW9uIGRlbmllZAkAzAgCCQELU3RyaW5nRW50cnkCCQEPa2V5UmVzdDJBZGRyZXNzAAUJcmVzdDJBZGRyBQNuaWwBaQEGYnV5V2xnAQltaW5BbW91bnQEDHByb2xvZ1Jlc3VsdAkBB3Byb2xvZzIAAwkAAAIFDHByb2xvZ1Jlc3VsdAUMcHJvbG9nUmVzdWx0AwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIiZXhhY3RseSAxIHBheW1lbnQgbXVzdCBiZSBhdHRhY2hlZAQDcG10CQCRAwIIBQFpCHBheW1lbnRzAAAEB3VzZHRBbXQIBQNwbXQGYW1vdW50AwMJAQEhAQkBCWlzRGVmaW5lZAEIBQNwbXQHYXNzZXRJZAYJAQIhPQIJAQV2YWx1ZQEIBQNwbXQHYXNzZXRJZAULdXNkdEFzc2V0SWQJAAIBAhNVU0RUIHBheW1lbnRzIG9ubHkhBAZjYWxsZXIIBQFpBmNhbGxlcgQEYWRkcgkApQgBBQZjYWxsZXIDCQBmAgUOTUlOU0hPUFBBWU1FTlQFB3VzZHRBbXQJAAIBCQCsAgIJAKwCAgISWW91IGNhbiB0cmFkZSBtaW4gCQEKZml4ZWRQb2ludAIFDk1JTlNIT1BQQVlNRU5UAAYCBSBVU0RUBAhjdXJTdGF0cwkBDGdldFdsZ1N0YXRzMgQCAAkAzAgCBQ1yZXN0MkNvbnRyYWN0CQDMCAIFDmFjcmVzMkNvbnRyYWN0CQDMCAIFC3dsZ0NvbnRyYWN0CQDMCAIFEnB1enpsZVBvb2xDb250cmFjdAkAzAgCBRJpbnZlc3RGdW5kQ29udHJhY3QFA25pbAULdXNkdEFzc2V0SWQFB3VzZHRBbXQEDGN1cldsZ0Ftb3VudAkAkQMCBQhjdXJTdGF0cwULaXhXbGdBbW91bnQECHdsZ1ByaWNlCQCRAwIFCGN1clN0YXRzBQppeFdsZ1ByaWNlBAhidXlQcmljZQkAawMFCHdsZ1ByaWNlAAYABQQJd2xnQW1vdW50CQBrAwUHdXNkdEFtdAUFTVVMVDgFCGJ1eVByaWNlBAZtYXhXbGcJAQ9nZXRTd2FwTGltaXRXbGcBBQRhZGRyAwkAZgIFCXdsZ0Ftb3VudAUGbWF4V2xnCQACAQkArAICCQCsAgICEFlvdSBjYW4gZ2V0IG1heCAJAQpmaXhlZFBvaW50AgUGbWF4V2xnAAgCByBXTEdPTEQDCQBmAgUJbWluQW1vdW50BQl3bGdBbW91bnQJAAIBAjBQcmljZSBjaGFuZ2VkIGR1cmluZyBvcGVyYXRpb24sIHBsZWFzZSB0cnkgYWdhaW4EDHByb2ZpdEFtb3VudAkAaQIFB3VzZHRBbXQABgkAlAoCCQDMCAIJAQdSZWlzc3VlAwUKd2xnQXNzZXRJZAUJd2xnQW1vdW50BgkAzAgCCQEMSW50ZWdlckVudHJ5AgUSd2xnSXNzdWVkQW1vdW50S2V5CQBkAgUMY3VyV2xnQW1vdW50BQl3bGdBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIJARRrZXlMYXN0QXJiVGltZUJ5VXNlcgEFBGFkZHIIBQlsYXN0QmxvY2sJdGltZXN0YW1wCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQV2YWx1ZQEJAKIIAQUNcHJvZml0QWRkcktleQUMcHJvZml0QW1vdW50BQt1c2R0QXNzZXRJZAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQZjYWxsZXIFCXdsZ0Ftb3VudAUKd2xnQXNzZXRJZAUDbmlsBQxwcm9sb2dSZXN1bHQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEOYnV5V2xnUkVBRE9OTFkCB2FkZHJlc3MHdXNkdEFtdAQIY3VyU3RhdHMJAQxnZXRXbGdTdGF0czIEAgAJAMwIAgUNcmVzdDJDb250cmFjdAkAzAgCBQ5hY3JlczJDb250cmFjdAkAzAgCBQt3bGdDb250cmFjdAkAzAgCBRJwdXp6bGVQb29sQ29udHJhY3QJAMwIAgUSaW52ZXN0RnVuZENvbnRyYWN0BQNuaWwFC3VzZHRBc3NldElkBQd1c2R0QW10BAxjdXJXbGdBbW91bnQJAJEDAgUIY3VyU3RhdHMFC2l4V2xnQW1vdW50BAh3bGdQcmljZQkAkQMCBQhjdXJTdGF0cwUKaXhXbGdQcmljZQQIYnV5UHJpY2UJAGsDBQh3bGdQcmljZQAGAAUECXdsZ0Ftb3VudAkAawMFB3VzZHRBbXQFBU1VTFQ4BQhidXlQcmljZQQGbWF4V2xnCQEPZ2V0U3dhcExpbWl0V2xnAQUHYWRkcmVzcwQHbWF4VXNkdAkAawMFBm1heFdsZwUIYnV5UHJpY2UFBU1VTFQ4BAxwcm9maXRBbW91bnQJAGkCBQd1c2R0QW10AAYJAJQKAgUDbmlsCQDMCAIFCXdsZ0Ftb3VudAkAzAgCBQ5NSU5TSE9QUEFZTUVOVAkAzAgCBQdtYXhVc2R0CQDMCAIFDHByb2ZpdEFtb3VudAUDbmlsAWkBB3NlbGxXbGcBCW1pbkFtb3VudAQMcHJvbG9nUmVzdWx0CQEHcHJvbG9nMgADCQAAAgUMcHJvbG9nUmVzdWx0BQxwcm9sb2dSZXN1bHQDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAiJleGFjdGx5IDEgcGF5bWVudCBtdXN0IGJlIGF0dGFjaGVkBANwbXQJAJEDAggFAWkIcGF5bWVudHMAAAQGd2xnQW10CAUDcG10BmFtb3VudAQGY2FsbGVyCAUBaQZjYWxsZXIEBGFkZHIJAKUIAQUGY2FsbGVyBAZtYXhXbGcJAQ9nZXRTd2FwTGltaXRXbGcBBQRhZGRyAwkAZgIFBndsZ0FtdAUGbWF4V2xnCQACAQkArAICCQCsAgICEllvdSBjYW4gc3BlbmQgbWF4IAkBCmZpeGVkUG9pbnQCBQZtYXhXbGcACAIHIFdMR09MRAMDCQEBIQEJAQlpc0RlZmluZWQBCAUDcG10B2Fzc2V0SWQGCQECIT0CCQEFdmFsdWUBCAUDcG10B2Fzc2V0SWQFCndsZ0Fzc2V0SWQJAAIBAhVXTEdPTEQgcGF5bWVudHMgb25seSEECGN1clN0YXRzCQEMZ2V0V2xnU3RhdHMyBAIACQDMCAIFDXJlc3QyQ29udHJhY3QJAMwIAgUOYWNyZXMyQ29udHJhY3QJAMwIAgULd2xnQ29udHJhY3QJAMwIAgUScHV6emxlUG9vbENvbnRyYWN0CQDMCAIFEmludmVzdEZ1bmRDb250cmFjdAUDbmlsBQt1c2R0QXNzZXRJZAAABAxjdXJXbGdBbW91bnQJAJEDAgUIY3VyU3RhdHMFC2l4V2xnQW1vdW50BAlzZWxsUHJpY2UJAGkCCQCRAwIFCGN1clN0YXRzBQppeFdsZ1ByaWNlAAIEB3VzZHRBbXQJAGsDBQZ3bGdBbXQFCXNlbGxQcmljZQUFTVVMVDgDCQBmAgUOTUlOU0hPUFBBWU1FTlQFB3VzZHRBbXQJAAIBCQCsAgIJAKwCAgISWW91IGNhbiB0cmFkZSBtaW4gCQEKZml4ZWRQb2ludAIFDk1JTlNIT1BQQVlNRU5UAAYCBSBVU0RUAwkAZgIFCW1pbkFtb3VudAUHdXNkdEFtdAkAAgECMFByaWNlIGNoYW5nZWQgZHVyaW5nIG9wZXJhdGlvbiwgcGxlYXNlIHRyeSBhZ2FpbgQMcHJvZml0QW1vdW50CQBpAgUHdXNkdEFtdAAFCQCUCgIJAMwIAgkBBEJ1cm4CBQp3bGdBc3NldElkBQZ3bGdBbXQJAMwIAgkBDEludGVnZXJFbnRyeQIFEndsZ0lzc3VlZEFtb3VudEtleQkAZQIFDGN1cldsZ0Ftb3VudAUGd2xnQW10CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEUa2V5TGFzdEFyYlRpbWVCeVVzZXIBBQRhZGRyCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBCQEFdmFsdWUBCQCiCAEFDXByb2ZpdEFkZHJLZXkFDHByb2ZpdEFtb3VudAULdXNkdEFzc2V0SWQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUGY2FsbGVyBQd1c2R0QW10BQt1c2R0QXNzZXRJZAUDbmlsBQxwcm9sb2dSZXN1bHQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEPc2VsbFdsZ1JFQURPTkxZAgdhZGRyZXNzBndsZ0FtdAQGbWF4V2xnCQEPZ2V0U3dhcExpbWl0V2xnAQUHYWRkcmVzcwQIY3VyU3RhdHMJAQxnZXRXbGdTdGF0czIEAgAJAMwIAgUNcmVzdDJDb250cmFjdAkAzAgCBQ5hY3JlczJDb250cmFjdAkAzAgCBQt3bGdDb250cmFjdAkAzAgCBRJwdXp6bGVQb29sQ29udHJhY3QJAMwIAgUSaW52ZXN0RnVuZENvbnRyYWN0BQNuaWwFC3VzZHRBc3NldElkAAAEDGN1cldsZ0Ftb3VudAkAkQMCBQhjdXJTdGF0cwULaXhXbGdBbW91bnQECXNlbGxQcmljZQkAaQIJAJEDAgUIY3VyU3RhdHMFCml4V2xnUHJpY2UAAgQHdXNkdEFtdAkAawMFBndsZ0FtdAUJc2VsbFByaWNlBQVNVUxUOAQGbWluV2xnCQBrAwUOTUlOU0hPUFBBWU1FTlQFBU1VTFQ4BQlzZWxsUHJpY2UEDHByb2ZpdEFtb3VudAkAaQIFB3VzZHRBbXQABQkAlAoCBQNuaWwJAMwIAgUHdXNkdEFtdAkAzAgCBQZtaW5XbGcJAMwIAgUGbWF4V2xnCQDMCAIFDHByb2ZpdEFtb3VudAUDbmlsAWkBBWNsYWltAAQMcHJvbG9nUmVzdWx0CQEHcHJvbG9nMgADCQAAAgUMcHJvbG9nUmVzdWx0BQxwcm9sb2dSZXN1bHQDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQNJHQwMTEyODUxMTM1NAkBDmNsYWltSW50ZXJuYWwyAQkApQgBCAUBaQZjYWxsZXIEB2FjdGlvbnMIBQ0kdDAxMTI4NTExMzU0Al8xBBB3bGdDbGFpbWVkQW1vdW50CAUNJHQwMTEyODUxMTM1NAJfMgkAlAoCCQDNCAIFB2FjdGlvbnMJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgUQd2xnQ2xhaW1lZEFtb3VudAUKd2xnQXNzZXRJZAUMcHJvbG9nUmVzdWx0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBEm9uU3Rha2VVbnN0YWtlTGFuZAEEYWRkcgMDAwkBAiE9AggFAWkGY2FsbGVyBQ9zdGFraW5nQ29udHJhY3QJAQIhPQIIBQFpBmNhbGxlcgUNYWNyZXNDb250cmFjdAcJAQIhPQIIBQFpBmNhbGxlcgUOYWNyZXMyQ29udHJhY3QHCQACAQIRUGVybWlzc2lvbiBkZW5pZWQEDSR0MDExNjczMTE3MjcJAQ5jbGFpbUludGVybmFsMgEFBGFkZHIEB2FjdGlvbnMIBQ0kdDAxMTY3MzExNzI3Al8xBBB3bGdDbGFpbWVkQW1vdW50CAUNJHQwMTE2NzMxMTcyNwJfMgkAlAoCAwkAZgIFEHdsZ0NsYWltZWRBbW91bnQAAAkAzQgCBQdhY3Rpb25zCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBBQRhZGRyBRB3bGdDbGFpbWVkQW1vdW50BQp3bGdBc3NldElkBQdhY3Rpb25zBRB3bGdDbGFpbWVkQW1vdW50AWkBCmJ1cm5XbGdvbGQBBndsZ0FtdAMJAQIhPQIIBQFpBmNhbGxlcgUOYWNyZXMyQ29udHJhY3QJAAIBAhFQZXJtaXNzaW9uIGRlbmllZAQIY3VyU3RhdHMJAQxnZXRXbGdTdGF0czIEAgAJAMwIAgUNcmVzdDJDb250cmFjdAkAzAgCBQ5hY3JlczJDb250cmFjdAkAzAgCBQt3bGdDb250cmFjdAkAzAgCBRJwdXp6bGVQb29sQ29udHJhY3QJAMwIAgUSaW52ZXN0RnVuZENvbnRyYWN0BQNuaWwFC3VzZHRBc3NldElkAAADCQBmAgUGd2xnQW10CQCRAwIFCGN1clN0YXRzBQhpeFdsZ1dsZwkAAgEJAKwCAgkArAICCQCsAgICBU9ubHkgCQEKZml4ZWRQb2ludAIJAJEDAgUIY3VyU3RhdHMFCGl4V2xnV2xnAAgCJSBXTEdPTEQgbGVmdCBvbiBjb250cmFjdCwgY2FuJ3QgYnVybiAJAQpmaXhlZFBvaW50AgUGd2xnQW10AAgEDXdsZ0Ftb3VudExlZnQJAGUCCQCRAwIFCGN1clN0YXRzBQtpeFdsZ0Ftb3VudAUGd2xnQW10CQCUCgIJAMwIAgkBBEJ1cm4CBQp3bGdBc3NldElkBQZ3bGdBbXQJAMwIAgkBDEludGVnZXJFbnRyeQIFEndsZ0lzc3VlZEFtb3VudEtleQUNd2xnQW1vdW50TGVmdAUDbmlsBQ13bGdBbW91bnRMZWZ0AWkBDGJldEZvclRpY2tldAEDYmV0BAxwcm9sb2dSZXN1bHQJAQdwcm9sb2cyAAMJAAACBQxwcm9sb2dSZXN1bHQFDHByb2xvZ1Jlc3VsdAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkAwkBAiE9AgkAaQIFA2JldAAEAAAJAAIBAhtJbnZhbGlkIGJldDogc2hvdWxkIGJlIDAuLjMEBm1vbWVudAkAagIFBmhlaWdodAUKREFZX0JMT0NLUwMJAGYCBQZtb21lbnQJAGUCBQpEQVlfQkxPQ0tTAAMJAAIBCQCsAgIJAKwCAgIxQ2Fubm90IGJldDogdGhlIGRheSBpcyBhbG1vc3QgZW5kZWQsIHBsZWFzZSB3YWl0IAkApAMBCQBlAgUKREFZX0JMT0NLUwUGbW9tZW50AgcgYmxvY2tzBARhZGRyCQClCAEIBQFpBmNhbGxlcgQLc3Rha2VkQWNyZXMJAQt2YWx1ZU9yRWxzZQIJAJoIAgUOYWNyZXMyQ29udHJhY3QJARdrZXlBY3Jlc1N0YWtlZEFtdEJ5VXNlcgEFBGFkZHIAAAQDbHZsCQEPZ2V0TGV2ZWxCeUFjcmVzAQULc3Rha2VkQWNyZXMDCQAAAgUDbHZsAAAJAAIBAiNZb3UgbmVlZCB0byBzdGFrZSBzb21lIEFDUkVTIHRvIGJldAQIdG9tb3Jyb3cJAGQCCQBpAgUGaGVpZ2h0BQpEQVlfQkxPQ0tTAAEEBmJldEtleQkBCmtleVVzZXJCZXQBBQRhZGRyBAp1c2VyQmV0U3RyCQCiCAEFBmJldEtleQQLbmV3QmV0RW50cnkJAQtTdHJpbmdFbnRyeQIFBmJldEtleQkArAICCQCsAgIJAKQDAQUIdG9tb3Jyb3cCAV8JAKQDAQUDYmV0AwkBCWlzRGVmaW5lZAEFCnVzZXJCZXRTdHIEB3VzZXJCZXQJAQV2YWx1ZQEFCnVzZXJCZXRTdHIDCQAAAgkAkQMCCQC1CQIFB3VzZXJCZXQCAV8AAAkApAMBBQh0b21vcnJvdwkAAgECHFlvdSBhbHJlYWR5IGJldCBmb3IgdG9tb3Jyb3cEAXIJARRjbGFpbVRpY2tldHNJbnRlcm5hbAIFBGFkZHIFB3VzZXJCZXQJAJQKAgkAzQgCCQDNCAIIBQFyAl8xCAUBcgJfMgULbmV3QmV0RW50cnkIBQFyAl8yCQCUCgIJAMwIAgULbmV3QmV0RW50cnkFA25pbAAACQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBDGNsYWltVGlja2V0cwAEDHByb2xvZ1Jlc3VsdAkBB3Byb2xvZzIAAwkAAAIFDHByb2xvZ1Jlc3VsdAUMcHJvbG9nUmVzdWx0AwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBGFkZHIJAKUIAQgFAWkGY2FsbGVyBAp1c2VyQmV0U3RyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBCmtleVVzZXJCZXQBBQRhZGRyAhxZb3UgaGF2ZSBubyB0aWNrZXRzIHRvIGNsYWltBAFyCQEUY2xhaW1UaWNrZXRzSW50ZXJuYWwCBQRhZGRyBQp1c2VyQmV0U3RyCQCUCgIJAM0IAggFAXICXzEIBQFyAl8yCAUBcgJfMwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQl0YWtlV2xnWHABBGFkZHIDCQECIT0CCAUBaQZjYWxsZXIFD3N0YWtpbmdDb250cmFjdAkAAgECEVBlcm1pc3Npb24gZGVuaWVkBA0kdDAxOTc5MTE5ODM0CQEOdGFrZVhwSW50ZXJuYWwCBQRhZGRyAAAEB2FjdGlvbnMIBQ0kdDAxOTc5MTE5ODM0Al8xBAJ4cAgFDSR0MDE5NzkxMTk4MzQCXzIJAJQKAgUHYWN0aW9ucwUCeHABaQESY2hlY2tXbGdYcFJFQURPTkxZAQRhZGRyBA0kdDAxOTkxMTE5OTU5CQEOdGFrZVhwSW50ZXJuYWwCBQRhZGRyAAAEB2lnbm9yZWQIBQ0kdDAxOTkxMTE5OTU5Al8xBAdkZWx0YVhQCAUNJHQwMTk5MTExOTk1OQJfMgQFbmV3WFAJAGQCCQELdmFsdWVPckVsc2UCCQCaCAIFD3N0YWtpbmdDb250cmFjdAkBCWtleVVzZXJYUAEFBGFkZHIAAAUHZGVsdGFYUAQJbHZsUG9pbnRzCQEHbGV2ZWxVcAIJAQt2YWx1ZU9yRWxzZQIJAJoIAgUPc3Rha2luZ0NvbnRyYWN0CQEMa2V5VXNlckxldmVsAQUEYWRkcgAABQVuZXdYUAkAlAoCBQNuaWwJAM0IAgUJbHZsUG9pbnRzBQVuZXdYUABgCm41", "height": 3374095, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: CnCZyy1jWFitChw5icgWi3gRVQtwFKAWdDptdrPKhm4g Next: 7gbRoMG6CsZTqFywwXtMe34zNTsC9zBwsdNrq7Fny9n7 Diff:
OldNewDifferences
475475 let deltaTickets = if ((winningBet(parseIntValue(dayBet[0])) == parseIntValue(dayBet[1])))
476476 then 1
477477 else 0
478- $Tuple2(((if ((deltaTickets == 0))
478+ $Tuple3(if ((deltaTickets == 0))
479479 then nil
480- else [IntegerEntry(ticketsKey, (oldTickets + deltaTickets)), IntegerEntry(totalTicketsKey, (oldTotalTickets + deltaTickets))]) :+ DeleteEntry(betKey)), deltaTickets)
480+ else [IntegerEntry(ticketsKey, (oldTickets + deltaTickets)), IntegerEntry(totalTicketsKey, (oldTotalTickets + deltaTickets))], DeleteEntry(betKey), deltaTickets)
481481 }
482482
483483
617617 then if ((size(i.payments) != 0))
618618 then throw("No payments required")
619619 else {
620- let $t01132411393 = claimInternal2(toString(i.caller))
621- let actions = $t01132411393._1
622- let wlgClaimedAmount = $t01132411393._2
620+ let $t01128511354 = claimInternal2(toString(i.caller))
621+ let actions = $t01128511354._1
622+ let wlgClaimedAmount = $t01128511354._2
623623 $Tuple2((actions :+ ScriptTransfer(i.caller, wlgClaimedAmount, wlgAssetId)), prologResult)
624624 }
625625 else throw("Strict value is not equal to itself.")
635635 else false)
636636 then throw("Permission denied")
637637 else {
638- let $t01171211766 = claimInternal2(addr)
639- let actions = $t01171211766._1
640- let wlgClaimedAmount = $t01171211766._2
638+ let $t01167311727 = claimInternal2(addr)
639+ let actions = $t01167311727._1
640+ let wlgClaimedAmount = $t01167311727._2
641641 $Tuple2(if ((wlgClaimedAmount > 0))
642642 then (actions :+ ScriptTransfer(addressFromStringValue(addr), wlgClaimedAmount, wlgAssetId))
643643 else actions, wlgClaimedAmount)
690690 then throw("You already bet for tomorrow")
691691 else {
692692 let r = claimTicketsInternal(addr, userBet)
693- $Tuple2([r._1[0], r._1[1], newBetEntry], r._2)
693+ $Tuple2(((r._1 :+ r._2) :+ newBetEntry), r._2)
694694 }
695695 }
696696 else $Tuple2([newBetEntry], 0)
711711 else {
712712 let addr = toString(i.caller)
713713 let userBetStr = valueOrErrorMessage(getString(keyUserBet(addr)), "You have no tickets to claim")
714- claimTicketsInternal(addr, userBetStr)
714+ let r = claimTicketsInternal(addr, userBetStr)
715+ $Tuple2((r._1 :+ r._2), r._3)
715716 }
716717 else throw("Strict value is not equal to itself.")
717718 }
722723 func takeWlgXp (addr) = if ((i.caller != stakingContract))
723724 then throw("Permission denied")
724725 else {
725- let $t01984419887 = takeXpInternal(addr, 0)
726- let actions = $t01984419887._1
727- let xp = $t01984419887._2
726+ let $t01979119834 = takeXpInternal(addr, 0)
727+ let actions = $t01979119834._1
728+ let xp = $t01979119834._2
728729 $Tuple2(actions, xp)
729730 }
730731
732733
733734 @Callable(i)
734735 func checkWlgXpREADONLY (addr) = {
735- let $t01996420012 = takeXpInternal(addr, 0)
736- let ignored = $t01996420012._1
737- let deltaXP = $t01996420012._2
736+ let $t01991119959 = takeXpInternal(addr, 0)
737+ let ignored = $t01991119959._1
738+ let deltaXP = $t01991119959._2
738739 let newXP = (valueOrElse(getInteger(stakingContract, keyUserXP(addr)), 0) + deltaXP)
739740 let lvlPoints = levelUp(valueOrElse(getInteger(stakingContract, keyUserLevel(addr)), 0), newXP)
740741 $Tuple2(nil, (lvlPoints :+ newXP))
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let DAY_MILLIS = 86400000
55
66 let chain = take(drop(this.bytes, 1), 1)
77
88 let usdtAssetId = match chain {
99 case _ =>
1010 if ((base58'2W' == $match0))
1111 then base58'9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi'
1212 else if ((base58'2T' == $match0))
1313 then base58'6mWwf9mZBjVgkC54idpyaZLQfAosD914wT8fGf2iiY63'
1414 else throw("Unknown chain")
1515 }
1616
1717 let defaultRestAddressStr = match chain {
1818 case _ =>
1919 if ((base58'2W' == $match0))
2020 then "3PQCuvFbvh4LkPUnrnU1z3jnbA1p9m3WNhv"
2121 else if ((base58'2T' == $match0))
2222 then "3MumkGGztCKAXpWDqxkddofqXSUbqQkvSJy"
2323 else throw("Unknown chain")
2424 }
2525
2626 let acres2AddressStr = match chain {
2727 case _ =>
2828 if ((base58'2W' == $match0))
2929 then "3P4UH3T9nXpMNpUmSmQjPmEz3G85t3zn6eA"
3030 else if ((base58'2T' == $match0))
3131 then "3NBPx1Fciu3JQNEGZ21jSnTdutLNGGBUSXh"
3232 else throw("Unknown chain")
3333 }
3434
3535 let arbitrageDelay = match chain {
3636 case _ =>
3737 if ((base58'2W' == $match0))
3838 then DAY_MILLIS
3939 else if ((base58'2T' == $match0))
4040 then 60000
4141 else throw("Unknown chain")
4242 }
4343
4444 let SEP = "__"
4545
4646 let MULT6 = 1000000
4747
4848 let MULT8 = 100000000
4949
5050 let MINSHOPPAYMENT = 100000
5151
5252 func getStringOrFail (address,key) = valueOrErrorMessage(getString(address, key), makeString(["mandatory ", toString(address), ".", key, " is not defined"], ""))
5353
5454
5555 let IdxCfgStakingDapp = 1
5656
5757 let IdxCfgWlgDapp = 4
5858
5959 let IdxCfgPuzzlePoolDapp = 5
6060
6161 let IdxCfgInvestFundDapp = 6
6262
6363 let IdxCfgAcresDapp = 8
6464
6565 func keyRestCfg () = "%s__restConfig"
6666
6767
6868 func keyRestAddress () = "%s__restAddr"
6969
7070
7171 func keyRest2Address () = "%s__rest2Addr"
7272
7373
7474 func readRestCfgOrFail (rest) = split_4C(getStringOrFail(rest, keyRestCfg()), SEP)
7575
7676
7777 func getContractAddressOrFail (restCfg,idx) = valueOrErrorMessage(addressFromString(restCfg[idx]), ("Rest cfg doesn't contain address at index " + toString(idx)))
7878
7979
8080 let restContract = addressFromStringValue(valueOrElse(getString(this, keyRestAddress()), defaultRestAddressStr))
8181
8282 let restCfg = readRestCfgOrFail(restContract)
8383
8484 let stakingContract = getContractAddressOrFail(restCfg, IdxCfgStakingDapp)
8585
8686 let wlgContract = getContractAddressOrFail(restCfg, IdxCfgWlgDapp)
8787
8888 let puzzlePoolContract = getContractAddressOrFail(restCfg, IdxCfgPuzzlePoolDapp)
8989
9090 let investFundContract = getContractAddressOrFail(restCfg, IdxCfgInvestFundDapp)
9191
9292 let acresContract = getContractAddressOrFail(restCfg, IdxCfgAcresDapp)
9393
9494 let wlgAssetIdKey = "wlg_assetId"
9595
9696 let wlgAssetId = valueOrErrorMessage(getBinary(wlgContract, wlgAssetIdKey), "WLGOLD is not issued yet")
9797
9898 func asInt (v) = match v {
9999 case n: Int =>
100100 n
101101 case _ =>
102102 throw("fail to cast into Int")
103103 }
104104
105105
106106 func fixedPoint (val,decimals) = {
107107 let tenPow = pow(10, 0, decimals, 0, 0, DOWN)
108108 let lowPart = toString((val % tenPow))
109109 let zeroes = drop(toString(tenPow), (1 + size(lowPart)))
110110 (((toString((val / tenPow)) + ".") + zeroes) + lowPart)
111111 }
112112
113113
114114 let SCALE8 = 100000000
115115
116116 let xpLevelScale = 3200
117117
118118 let xpLevelRecipPow = 4000
119119
120120 let numPointsOnLevelUp = 3
121121
122122 let wlgBaseAmountXp = 100000000000
123123
124124 func keyUserXP (addr) = ("userXP_" + addr)
125125
126126
127127 func keyUserLevel (addr) = ("userLevel_" + addr)
128128
129129
130130 let xpWlg = 10000
131131
132132 func levelByXP (xp) = fraction(xpLevelScale, pow(xp, 4, xpLevelRecipPow, 4, 4, DOWN), SCALE8)
133133
134134
135135 func levelUp (currLevel,newXP) = {
136136 let newLevel = levelByXP(newXP)
137137 [newLevel, (numPointsOnLevelUp * (newLevel - currLevel))]
138138 }
139139
140140
141141 let MILLION6 = 100000000000000
142142
143143 let PLAYERSHARE = 400000
144144
145145 let DAYMILLIS = 86400000
146146
147147 let teamAddrKey = "teamAddr"
148148
149149 let lastTeamTimeKey = "lastClaimedTime_team"
150150
151151 let teamAmountLeftKey = "teamAmountLeft"
152152
153153 let lastActivitiesTimeKey = "lastClaimedTime_activities"
154154
155155 let actAmountLeftKey = "activitiesAmountLeft"
156156
157157 let stakersAmountLeftKey = "stakersAmountLeft"
158158
159159 func keyLastArbTimeByUser (addr) = ("lastArbTimeUser_" + addr)
160160
161161
162162 let wlgIssueTimeKey = "wlg_issueTime"
163163
164164 let wlgIssuedAmountKey = "wlg_issuedAmount"
165165
166166 func keyAcresStakedAmountByUser (addr) = ("acresStakedAmountByUser_" + addr)
167167
168168
169169 func keyWlgStakedAmountByUser (addr) = ("wlgStakedAmountByUser_" + addr)
170170
171171
172172 let wlgStakedTotalKey = "wlgStakedAmountTotal"
173173
174174 func keyWlgStakedTimeByUser (addr) = ("wlgStakedTimeByUser_" + addr)
175175
176176
177177 let M6_ = 1000000
178178
179179 let M8_ = 100000000
180180
181181 let TEAM_SHARE = 200000
182182
183183 let ACTIVITY_SHARE = 100000
184184
185185 let PLAYER_SHARE = 400000
186186
187187 let YEAR_MILLIS = 31557600000
188188
189189 let DAY_MS = 86400000
190190
191191 let DAY_BLOCKS = 1440
192192
193193 let ISSUE10 = 1000000000
194194
195195 let PLAYERS10_SHARE = 800000
196196
197197 let MARKETING10_SHARE = 100000
198198
199199 let TEAM10_SHARE = 100000
200200
201201 let NEW_STAKING_START = 1731279600000
202202
203203 let marketingAddrKey = "marketingAddr"
204204
205205 let teamAdrKey = "teamAddr"
206206
207207 let lastTeamTimKey = "lastClaimedTime_team"
208208
209209 let teamAmtLeftKey = "teamAmountLeft"
210210
211211 let lastActivitiesTimKey = "lastClaimedTime_activities"
212212
213213 let actAmtLeftKey = "activitiesAmountLeft"
214214
215215 let stakersAmtLeftKey = "stakersAmountLeft"
216216
217217 func keyLastClaimTimeByUser (addr) = ("lastClaimedTimeUser_" + addr)
218218
219219
220220 func distrByPeriod (issuedAmount,period) = fraction(issuedAmount, (PLAYER_SHARE * (period + 1)), (6 * M6_))
221221
222222
223223 let wlgIssue10TimeKey = "wlg_issue10Time"
224224
225225 let wlgIssueTimKey = "wlg_issueTime"
226226
227227 let wlgIssuedAmtKey = "wlg_issuedAmount"
228228
229229 let zbIssuedAmtKey = "zbill_issuedAmount"
230230
231231 func keyAcresStakedAmtByUser (addr) = ("acresStakedAmountByUser_" + addr)
232232
233233
234234 let totalFarmingPowerKey = "totalFarmingPower"
235235
236236 let dapp2Rest = 0
237237
238238 let dapp2Staking = 1
239239
240240 let dapp2Wlg = 2
241241
242242 let dapp2Puzzle = 3
243243
244244 let dapp2InvestFund = 4
245245
246246 let levelAcres = [0, 10, 20, 40, 80, 150, 250, 400, 700, 1000]
247247
248248 func getLevelByAcres (acres) = {
249249 let acr = ((acres + 99999999) / M8_)
250250 func checker (acc,item) = if ((item >= acr))
251251 then acc
252252 else (acc + 1)
253253
254254 let $l = levelAcres
255255 let $s = size($l)
256256 let $acc0 = 0
257257 func $f0_1 ($a,$i) = if (($i >= $s))
258258 then $a
259259 else checker($a, $l[$i])
260260
261261 func $f0_2 ($a,$i) = if (($i >= $s))
262262 then $a
263263 else throw("List size exceeds 10")
264264
265265 $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)
266266 }
267267
268268
269269 func getFarmingPowerByAcres (acres) = ((acres * 20) * (getLevelByAcres(acres) + 4))
270270
271271
272272 func getFarmingPowers (userAddrStrOrEmpty,acres2Contract) = {
273273 let totalFP = valueOrElse(getInteger(acres2Contract, totalFarmingPowerKey), 0)
274274 let userAcres = valueOrElse(getInteger(acres2Contract, keyAcresStakedAmtByUser(userAddrStrOrEmpty)), 0)
275275 let userFP = getFarmingPowerByAcres(userAcres)
276276 [totalFP, userFP]
277277 }
278278
279279
280280 func keyUserBet (addr) = ("userBet_" + addr)
281281
282282
283283 func keyUserTickets (addr) = ("userTickets_" + addr)
284284
285285
286286 let keyTotalTickets = "totalTickets"
287287
288288 func winningBet (day) = (toInt(value(value(blockInfoByHeight((day * DAY_BLOCKS))).vrf)) % 4)
289289
290290
291291 let idxTotalFP = 0
292292
293293 let idxUserFP = 1
294294
295295 let ixWlgAmount = 0
296296
297297 let ixWlgWlg = 1
298298
299299 let ixWlgPrice = 2
300300
301301 let ixWlgIssueTime = 8
302302
303303 let ixWlgTeamAmLeft = 11
304304
305305 let ixWlgTeamAmAvailNow = 12
306306
307307 let ixWlgActAmLeft = 15
308308
309309 let ixWlgActAmAvailNow = 16
310310
311311 let ixWlgAmLeftTotal = 19
312312
313313 let ixWlgUserAmAvailNow = 23
314314
315315 let ixWlgEffUserTime = 24
316316
317317 let ixWlgIssue10Amount = 25
318318
319319 let ixWlgMarketingIssue10Amount = 26
320320
321321 let ixWlgTeamIssue10Amount = 27
322322
323323 let ixWlgUser10part = 28
324324
325325 let ixWlgIssue10Time = 29
326326
327327 func getWlgStats2 (userAddrOpt,contracts,usdtId,usdtBalanceCorrection) = {
328328 let issuedAmount = valueOrErrorMessage(getInteger(contracts[dapp2Wlg], wlgIssuedAmtKey), "WLGOLD is not issued yet")
329329 let restUsd = assetBalance(contracts[dapp2Rest], usdtId)
330330 let wlgUsd = (assetBalance(contracts[dapp2Wlg], usdtId) - usdtBalanceCorrection)
331331 let puzzleUsd = assetBalance(contracts[dapp2Puzzle], usdtId)
332332 let acres2Usd = assetBalance(contracts[dapp2Staking], usdtId)
333333 let investFndContract = contracts[dapp2InvestFund]
334334 let investFundTotal = (assetBalance(investFndContract, usdtId) + valueOrElse(getInteger(investFndContract, zbIssuedAmtKey), 0))
335335 let totalFundsUsd = ((acres2Usd + wlgUsd) + investFundTotal)
336336 let wlgId = valueOrErrorMessage(getBinary(contracts[dapp2Wlg], "wlg_assetId"), "Not initialized yet")
337337 let now = lastBlock.timestamp
338338 let issueTime = valueOrErrorMessage(getInteger(contracts[dapp2Wlg], wlgIssueTimKey), "Not initialized")
339339 let wlgWlg = assetBalance(contracts[dapp2Wlg], wlgId)
340340 let teamTotal = fraction(issuedAmount, TEAM_SHARE, M6_)
341341 let teamAmountLeft = valueOrElse(getInteger(contracts[dapp2Wlg], teamAmtLeftKey), teamTotal)
342342 let lastTeamTime = valueOrElse(getInteger(contracts[dapp2Wlg], lastTeamTimKey), issueTime)
343343 let teamAddr = addressFromStringValue(value(getString(contracts[dapp2Wlg], teamAdrKey)))
344344 let teamAmountAvailableNow = min([fraction(teamTotal, (now - lastTeamTime), (3 * YEAR_MILLIS)), teamAmountLeft])
345345 let teamWlgold = assetBalance(teamAddr, wlgId)
346346 let actTotal = fraction(issuedAmount, ACTIVITY_SHARE, M6_)
347347 let actAmountLeft = valueOrElse(getInteger(contracts[dapp2Wlg], actAmtLeftKey), actTotal)
348348 let lastActivitiesTime = valueOrElse(getInteger(contracts[dapp2Wlg], lastActivitiesTimKey), issueTime)
349349 let actAmountAvailableNow = min([fraction(actTotal, (now - lastActivitiesTime), (3 * YEAR_MILLIS)), actAmountLeft])
350350 let actWlgold = assetBalance(contracts[dapp2Rest], wlgId)
351351 let lastUserTime = valueOrElse(getInteger(contracts[dapp2Wlg], keyLastClaimTimeByUser(userAddrOpt)), issueTime)
352352 let lastUserPeriod = ((lastUserTime - issueTime) / YEAR_MILLIS)
353353 let nowLimited = min([now, (issueTime + (3 * YEAR_MILLIS))])
354354 let curPeriod = min([((now - issueTime) / YEAR_MILLIS), 2])
355355 let eff = getFarmingPowers(userAddrOpt, contracts[dapp2Staking])
356356 let curPeriodDistribution = distrByPeriod(issuedAmount, curPeriod)
357357 let prevPeriodEnd = (issueTime + (YEAR_MILLIS * curPeriod))
358358 let prevPrevPeriodEnd = (issueTime + (YEAR_MILLIS * (curPeriod - 1)))
359359 let a0 = fraction(curPeriodDistribution, (nowLimited - lastUserTime), YEAR_MILLIS)
360360 let userAvailable = if ((lastUserPeriod == curPeriod))
361361 then a0
362362 else if ((lastUserPeriod == (curPeriod - 1)))
363363 then {
364364 let a1 = fraction(distrByPeriod(issuedAmount, (curPeriod - 1)), (prevPeriodEnd - lastUserTime), YEAR_MILLIS)
365365 (a1 + a0)
366366 }
367367 else {
368368 let a2 = fraction(distrByPeriod(issuedAmount, (curPeriod - 2)), (prevPrevPeriodEnd - lastUserTime), YEAR_MILLIS)
369369 let a1 = distrByPeriod(issuedAmount, (curPeriod - 1))
370370 ((a2 + a1) + a0)
371371 }
372372 let amountLeftTotal = valueOrElse(getInteger(contracts[dapp2Wlg], stakersAmtLeftKey), 0)
373373 let userAmount = if ((eff[idxTotalFP] != 0))
374374 then fraction(userAvailable, eff[idxUserFP], eff[idxTotalFP])
375375 else 0
376376 let lastIssue10Time = valueOrElse(getInteger(contracts[dapp2Wlg], wlgIssue10TimeKey), NEW_STAKING_START)
377377 let issue10Amount = fraction(ISSUE10, max([(now - lastIssue10Time), 0]), DAY_MS)
378378 let marketingIssue10Amount = fraction(issue10Amount, MARKETING10_SHARE, M6_)
379379 let teamIssue10Amount = fraction(issue10Amount, TEAM10_SHARE, M6_)
380380 let user10Interval = max([(now - max([NEW_STAKING_START, lastUserTime])), 0])
381381 let user10part = if ((eff[idxTotalFP] != 0))
382382 then fraction(fraction(fraction(ISSUE10, user10Interval, DAY_MS), eff[idxUserFP], eff[idxTotalFP]), PLAYERS10_SHARE, M6_)
383383 else 0
384384 let newIssue10Time = max([NEW_STAKING_START, now])
385385 [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]]
386386 }
387387
388388
389389 let net = take(drop(this.bytes, 1), 1)
390390
391391 let defaultRest2AddressStr = match net {
392392 case _ =>
393393 if ((base58'2W' == $match0))
394394 then "3PFwYta8biEz31zpeFe5DJK8wE5trSpQVF8"
395395 else if ((base58'2T' == $match0))
396396 then "3N7UuYar6264P58FBhVWKPQAh4Yua2hgngv"
397397 else throw("Unknown chain")
398398 }
399399
400400 let profitAddrKey = "profitAddr"
401401
402402 let stakersAmountPaidTotalKey = "stakersAmountPaidTotal"
403403
404404 func keyStakersAmountPaidUser (addr) = ("stakersAmountPaidUser_" + addr)
405405
406406
407407 let rest2Contract = addressFromStringValue(valueOrElse(getString(this, keyRest2Address()), defaultRest2AddressStr))
408408
409409 let acres2Contract = addressFromStringValue(acres2AddressStr)
410410
411411 func prolog2 () = asInt(reentrantInvoke(acres2Contract, "saveLastTx", nil, nil))
412412
413413
414414 func getSwapLimitWlg (addr) = {
415415 let lastTime = valueOrElse(getInteger(keyLastArbTimeByUser(addr)), 0)
416416 let now = lastBlock.timestamp
417417 if ((arbitrageDelay > (now - lastTime)))
418418 then throw((("Arbitrages are possible once a " + toString((arbitrageDelay / 60000))) + "min"))
419419 else valueOrElse(getInteger(acres2Contract, keyAcresStakedAmountByUser(addr)), 0)
420420 }
421421
422422
423423 func claimInternal2 (addr) = {
424424 let curStats = getWlgStats2(addr, [rest2Contract, acres2Contract, wlgContract, puzzlePoolContract, investFundContract], usdtAssetId, 0)
425425 let userTimeKey = keyLastClaimTimeByUser(addr)
426426 let lastUserTime = valueOrElse(getInteger(userTimeKey), 0)
427427 let userEffTime = curStats[ixWlgEffUserTime]
428428 if ((lastUserTime == userEffTime))
429429 then $Tuple2(nil, 0)
430430 else {
431431 let now = lastBlock.timestamp
432432 let issueTime = curStats[ixWlgIssueTime]
433433 let teamAmountLeft = curStats[ixWlgTeamAmLeft]
434434 let teamAmount = (curStats[ixWlgTeamAmAvailNow] + curStats[ixWlgTeamIssue10Amount])
435435 let teamTransfer = if ((teamAmount > 0))
436436 then [ScriptTransfer(addressFromStringValue(value(getString(teamAddrKey))), teamAmount, wlgAssetId)]
437437 else nil
438438 let actAmountLeft = curStats[ixWlgActAmLeft]
439439 let actAmount = curStats[ixWlgActAmAvailNow]
440440 let actTransfer = if ((actAmount > 0))
441441 then [ScriptTransfer(restContract, actAmount, wlgAssetId)]
442442 else nil
443443 let marketingAmount = curStats[ixWlgMarketingIssue10Amount]
444444 let marketingTransfer = if ((marketingAmount > 0))
445445 then [ScriptTransfer(addressFromStringValue(value(getString(marketingAddrKey))), marketingAmount, wlgAssetId)]
446446 else nil
447447 let userAmount = curStats[ixWlgUserAmAvailNow]
448448 let userKey = keyStakersAmountPaidUser(addr)
449449 let userTotal = (userAmount + curStats[ixWlgUser10part])
450450 let issued10Amount = curStats[ixWlgIssue10Amount]
451451 $Tuple2(((([Reissue(wlgAssetId, issued10Amount, true), IntegerEntry(wlgIssuedAmountKey, (curStats[ixWlgAmount] + issued10Amount)), IntegerEntry(wlgIssue10TimeKey, curStats[ixWlgIssue10Time]), IntegerEntry(userKey, (valueOrElse(getInteger(userKey), 0) + userAmount)), IntegerEntry(stakersAmountPaidTotalKey, (valueOrElse(getInteger(stakersAmountPaidTotalKey), 0) + userAmount)), IntegerEntry(stakersAmountLeftKey, (curStats[ixWlgAmLeftTotal] - userAmount)), IntegerEntry(teamAmountLeftKey, ((teamAmountLeft - teamAmount) + curStats[ixWlgTeamIssue10Amount])), IntegerEntry(lastTeamTimeKey, now), IntegerEntry(actAmountLeftKey, (actAmountLeft - actAmount)), IntegerEntry(lastActivitiesTimeKey, now), IntegerEntry(userTimeKey, userEffTime)] ++ teamTransfer) ++ actTransfer) ++ marketingTransfer), userTotal)
452452 }
453453 }
454454
455455
456456 func takeXpInternal (addr,delta) = {
457457 let now = lastBlock.timestamp
458458 let timeKey = keyWlgStakedTimeByUser(addr)
459459 let amountKey = keyWlgStakedAmountByUser(addr)
460460 let lastTime = valueOrElse(getInteger(timeKey), 0)
461461 let oldUser = valueOrElse(getInteger(amountKey), 0)
462462 let oldTotal = valueOrElse(getInteger(wlgStakedTotalKey), 0)
463463 let xp = fraction(fraction(xpWlg, oldUser, wlgBaseAmountXp), (lastTime - now), DAYMILLIS)
464464 $Tuple3([IntegerEntry(timeKey, now), IntegerEntry(amountKey, (oldUser + delta)), IntegerEntry(wlgStakedTotalKey, (oldTotal + delta))], xp, oldUser)
465465 }
466466
467467
468468 func claimTicketsInternal (addr,userBetStr) = {
469469 let totalTicketsKey = keyTotalTickets
470470 let ticketsKey = keyUserTickets(addr)
471471 let betKey = keyUserBet(addr)
472472 let dayBet = split(userBetStr, "_")
473473 let oldTotalTickets = valueOrElse(getInteger(totalTicketsKey), 0)
474474 let oldTickets = valueOrElse(getInteger(ticketsKey), 0)
475475 let deltaTickets = if ((winningBet(parseIntValue(dayBet[0])) == parseIntValue(dayBet[1])))
476476 then 1
477477 else 0
478- $Tuple2(((if ((deltaTickets == 0))
478+ $Tuple3(if ((deltaTickets == 0))
479479 then nil
480- else [IntegerEntry(ticketsKey, (oldTickets + deltaTickets)), IntegerEntry(totalTicketsKey, (oldTotalTickets + deltaTickets))]) :+ DeleteEntry(betKey)), deltaTickets)
480+ else [IntegerEntry(ticketsKey, (oldTickets + deltaTickets)), IntegerEntry(totalTicketsKey, (oldTotalTickets + deltaTickets))], DeleteEntry(betKey), deltaTickets)
481481 }
482482
483483
484484 @Callable(i)
485485 func constructorV1 (restAddr,marketingAddr,teamAddr,profitAddr) = if ((i.caller != this))
486486 then throw("Permission denied")
487487 else if (isDefined(getBinary(wlgAssetIdKey)))
488488 then throw("Already initialized")
489489 else {
490490 let issuedAmount = MILLION6
491491 let issue = Issue("WLGOLD", "WavesLands Gold investment token", issuedAmount, 8, true, unit, 0)
492492 let assetId = calculateAssetId(issue)
493493 [issue, IntegerEntry(wlgIssueTimeKey, lastBlock.timestamp), IntegerEntry(wlgIssuedAmountKey, issuedAmount), IntegerEntry(stakersAmountPaidTotalKey, 0), IntegerEntry(stakersAmountLeftKey, fraction(MILLION6, PLAYERSHARE, MULT6)), BinaryEntry(wlgAssetIdKey, assetId), StringEntry(keyRestAddress(), restAddr), StringEntry(marketingAddrKey, marketingAddr), StringEntry(teamAddrKey, teamAddr), StringEntry(profitAddrKey, profitAddr)]
494494 }
495495
496496
497497
498498 @Callable(i)
499499 func constructorV2 (rest2Addr) = if ((i.caller != this))
500500 then throw("Permission denied")
501501 else [StringEntry(keyRest2Address(), rest2Addr)]
502502
503503
504504
505505 @Callable(i)
506506 func buyWlg (minAmount) = {
507507 let prologResult = prolog2()
508508 if ((prologResult == prologResult))
509509 then if ((size(i.payments) != 1))
510510 then throw("exactly 1 payment must be attached")
511511 else {
512512 let pmt = i.payments[0]
513513 let usdtAmt = pmt.amount
514514 if (if (!(isDefined(pmt.assetId)))
515515 then true
516516 else (value(pmt.assetId) != usdtAssetId))
517517 then throw("USDT payments only!")
518518 else {
519519 let caller = i.caller
520520 let addr = toString(caller)
521521 if ((MINSHOPPAYMENT > usdtAmt))
522522 then throw((("You can trade min " + fixedPoint(MINSHOPPAYMENT, 6)) + " USDT"))
523523 else {
524524 let curStats = getWlgStats2("", [rest2Contract, acres2Contract, wlgContract, puzzlePoolContract, investFundContract], usdtAssetId, usdtAmt)
525525 let curWlgAmount = curStats[ixWlgAmount]
526526 let wlgPrice = curStats[ixWlgPrice]
527527 let buyPrice = fraction(wlgPrice, 6, 5)
528528 let wlgAmount = fraction(usdtAmt, MULT8, buyPrice)
529529 let maxWlg = getSwapLimitWlg(addr)
530530 if ((wlgAmount > maxWlg))
531531 then throw((("You can get max " + fixedPoint(maxWlg, 8)) + " WLGOLD"))
532532 else if ((minAmount > wlgAmount))
533533 then throw("Price changed during operation, please try again")
534534 else {
535535 let profitAmount = (usdtAmt / 6)
536536 $Tuple2([Reissue(wlgAssetId, wlgAmount, true), IntegerEntry(wlgIssuedAmountKey, (curWlgAmount + wlgAmount)), IntegerEntry(keyLastArbTimeByUser(addr), lastBlock.timestamp), ScriptTransfer(addressFromStringValue(value(getString(profitAddrKey))), profitAmount, usdtAssetId), ScriptTransfer(caller, wlgAmount, wlgAssetId)], prologResult)
537537 }
538538 }
539539 }
540540 }
541541 else throw("Strict value is not equal to itself.")
542542 }
543543
544544
545545
546546 @Callable(i)
547547 func buyWlgREADONLY (address,usdtAmt) = {
548548 let curStats = getWlgStats2("", [rest2Contract, acres2Contract, wlgContract, puzzlePoolContract, investFundContract], usdtAssetId, usdtAmt)
549549 let curWlgAmount = curStats[ixWlgAmount]
550550 let wlgPrice = curStats[ixWlgPrice]
551551 let buyPrice = fraction(wlgPrice, 6, 5)
552552 let wlgAmount = fraction(usdtAmt, MULT8, buyPrice)
553553 let maxWlg = getSwapLimitWlg(address)
554554 let maxUsdt = fraction(maxWlg, buyPrice, MULT8)
555555 let profitAmount = (usdtAmt / 6)
556556 $Tuple2(nil, [wlgAmount, MINSHOPPAYMENT, maxUsdt, profitAmount])
557557 }
558558
559559
560560
561561 @Callable(i)
562562 func sellWlg (minAmount) = {
563563 let prologResult = prolog2()
564564 if ((prologResult == prologResult))
565565 then if ((size(i.payments) != 1))
566566 then throw("exactly 1 payment must be attached")
567567 else {
568568 let pmt = i.payments[0]
569569 let wlgAmt = pmt.amount
570570 let caller = i.caller
571571 let addr = toString(caller)
572572 let maxWlg = getSwapLimitWlg(addr)
573573 if ((wlgAmt > maxWlg))
574574 then throw((("You can spend max " + fixedPoint(maxWlg, 8)) + " WLGOLD"))
575575 else if (if (!(isDefined(pmt.assetId)))
576576 then true
577577 else (value(pmt.assetId) != wlgAssetId))
578578 then throw("WLGOLD payments only!")
579579 else {
580580 let curStats = getWlgStats2("", [rest2Contract, acres2Contract, wlgContract, puzzlePoolContract, investFundContract], usdtAssetId, 0)
581581 let curWlgAmount = curStats[ixWlgAmount]
582582 let sellPrice = (curStats[ixWlgPrice] / 2)
583583 let usdtAmt = fraction(wlgAmt, sellPrice, MULT8)
584584 if ((MINSHOPPAYMENT > usdtAmt))
585585 then throw((("You can trade min " + fixedPoint(MINSHOPPAYMENT, 6)) + " USDT"))
586586 else if ((minAmount > usdtAmt))
587587 then throw("Price changed during operation, please try again")
588588 else {
589589 let profitAmount = (usdtAmt / 5)
590590 $Tuple2([Burn(wlgAssetId, wlgAmt), IntegerEntry(wlgIssuedAmountKey, (curWlgAmount - wlgAmt)), IntegerEntry(keyLastArbTimeByUser(addr), lastBlock.timestamp), ScriptTransfer(addressFromStringValue(value(getString(profitAddrKey))), profitAmount, usdtAssetId), ScriptTransfer(caller, usdtAmt, usdtAssetId)], prologResult)
591591 }
592592 }
593593 }
594594 else throw("Strict value is not equal to itself.")
595595 }
596596
597597
598598
599599 @Callable(i)
600600 func sellWlgREADONLY (address,wlgAmt) = {
601601 let maxWlg = getSwapLimitWlg(address)
602602 let curStats = getWlgStats2("", [rest2Contract, acres2Contract, wlgContract, puzzlePoolContract, investFundContract], usdtAssetId, 0)
603603 let curWlgAmount = curStats[ixWlgAmount]
604604 let sellPrice = (curStats[ixWlgPrice] / 2)
605605 let usdtAmt = fraction(wlgAmt, sellPrice, MULT8)
606606 let minWlg = fraction(MINSHOPPAYMENT, MULT8, sellPrice)
607607 let profitAmount = (usdtAmt / 5)
608608 $Tuple2(nil, [usdtAmt, minWlg, maxWlg, profitAmount])
609609 }
610610
611611
612612
613613 @Callable(i)
614614 func claim () = {
615615 let prologResult = prolog2()
616616 if ((prologResult == prologResult))
617617 then if ((size(i.payments) != 0))
618618 then throw("No payments required")
619619 else {
620- let $t01132411393 = claimInternal2(toString(i.caller))
621- let actions = $t01132411393._1
622- let wlgClaimedAmount = $t01132411393._2
620+ let $t01128511354 = claimInternal2(toString(i.caller))
621+ let actions = $t01128511354._1
622+ let wlgClaimedAmount = $t01128511354._2
623623 $Tuple2((actions :+ ScriptTransfer(i.caller, wlgClaimedAmount, wlgAssetId)), prologResult)
624624 }
625625 else throw("Strict value is not equal to itself.")
626626 }
627627
628628
629629
630630 @Callable(i)
631631 func onStakeUnstakeLand (addr) = if (if (if ((i.caller != stakingContract))
632632 then (i.caller != acresContract)
633633 else false)
634634 then (i.caller != acres2Contract)
635635 else false)
636636 then throw("Permission denied")
637637 else {
638- let $t01171211766 = claimInternal2(addr)
639- let actions = $t01171211766._1
640- let wlgClaimedAmount = $t01171211766._2
638+ let $t01167311727 = claimInternal2(addr)
639+ let actions = $t01167311727._1
640+ let wlgClaimedAmount = $t01167311727._2
641641 $Tuple2(if ((wlgClaimedAmount > 0))
642642 then (actions :+ ScriptTransfer(addressFromStringValue(addr), wlgClaimedAmount, wlgAssetId))
643643 else actions, wlgClaimedAmount)
644644 }
645645
646646
647647
648648 @Callable(i)
649649 func burnWlgold (wlgAmt) = if ((i.caller != acres2Contract))
650650 then throw("Permission denied")
651651 else {
652652 let curStats = getWlgStats2("", [rest2Contract, acres2Contract, wlgContract, puzzlePoolContract, investFundContract], usdtAssetId, 0)
653653 if ((wlgAmt > curStats[ixWlgWlg]))
654654 then throw(((("Only " + fixedPoint(curStats[ixWlgWlg], 8)) + " WLGOLD left on contract, can't burn ") + fixedPoint(wlgAmt, 8)))
655655 else {
656656 let wlgAmountLeft = (curStats[ixWlgAmount] - wlgAmt)
657657 $Tuple2([Burn(wlgAssetId, wlgAmt), IntegerEntry(wlgIssuedAmountKey, wlgAmountLeft)], wlgAmountLeft)
658658 }
659659 }
660660
661661
662662
663663 @Callable(i)
664664 func betForTicket (bet) = {
665665 let prologResult = prolog2()
666666 if ((prologResult == prologResult))
667667 then if ((size(i.payments) != 0))
668668 then throw("No payments required")
669669 else if (((bet / 4) != 0))
670670 then throw("Invalid bet: should be 0..3")
671671 else {
672672 let moment = (height % DAY_BLOCKS)
673673 if ((moment > (DAY_BLOCKS - 3)))
674674 then throw((("Cannot bet: the day is almost ended, please wait " + toString((DAY_BLOCKS - moment))) + " blocks"))
675675 else {
676676 let addr = toString(i.caller)
677677 let stakedAcres = valueOrElse(getInteger(acres2Contract, keyAcresStakedAmtByUser(addr)), 0)
678678 let lvl = getLevelByAcres(stakedAcres)
679679 if ((lvl == 0))
680680 then throw("You need to stake some ACRES to bet")
681681 else {
682682 let tomorrow = ((height / DAY_BLOCKS) + 1)
683683 let betKey = keyUserBet(addr)
684684 let userBetStr = getString(betKey)
685685 let newBetEntry = StringEntry(betKey, ((toString(tomorrow) + "_") + toString(bet)))
686686 if (isDefined(userBetStr))
687687 then {
688688 let userBet = value(userBetStr)
689689 if ((split(userBet, "_")[0] == toString(tomorrow)))
690690 then throw("You already bet for tomorrow")
691691 else {
692692 let r = claimTicketsInternal(addr, userBet)
693- $Tuple2([r._1[0], r._1[1], newBetEntry], r._2)
693+ $Tuple2(((r._1 :+ r._2) :+ newBetEntry), r._2)
694694 }
695695 }
696696 else $Tuple2([newBetEntry], 0)
697697 }
698698 }
699699 }
700700 else throw("Strict value is not equal to itself.")
701701 }
702702
703703
704704
705705 @Callable(i)
706706 func claimTickets () = {
707707 let prologResult = prolog2()
708708 if ((prologResult == prologResult))
709709 then if ((size(i.payments) != 0))
710710 then throw("No payments required")
711711 else {
712712 let addr = toString(i.caller)
713713 let userBetStr = valueOrErrorMessage(getString(keyUserBet(addr)), "You have no tickets to claim")
714- claimTicketsInternal(addr, userBetStr)
714+ let r = claimTicketsInternal(addr, userBetStr)
715+ $Tuple2((r._1 :+ r._2), r._3)
715716 }
716717 else throw("Strict value is not equal to itself.")
717718 }
718719
719720
720721
721722 @Callable(i)
722723 func takeWlgXp (addr) = if ((i.caller != stakingContract))
723724 then throw("Permission denied")
724725 else {
725- let $t01984419887 = takeXpInternal(addr, 0)
726- let actions = $t01984419887._1
727- let xp = $t01984419887._2
726+ let $t01979119834 = takeXpInternal(addr, 0)
727+ let actions = $t01979119834._1
728+ let xp = $t01979119834._2
728729 $Tuple2(actions, xp)
729730 }
730731
731732
732733
733734 @Callable(i)
734735 func checkWlgXpREADONLY (addr) = {
735- let $t01996420012 = takeXpInternal(addr, 0)
736- let ignored = $t01996420012._1
737- let deltaXP = $t01996420012._2
736+ let $t01991119959 = takeXpInternal(addr, 0)
737+ let ignored = $t01991119959._1
738+ let deltaXP = $t01991119959._2
738739 let newXP = (valueOrElse(getInteger(stakingContract, keyUserXP(addr)), 0) + deltaXP)
739740 let lvlPoints = levelUp(valueOrElse(getInteger(stakingContract, keyUserLevel(addr)), 0), newXP)
740741 $Tuple2(nil, (lvlPoints :+ newXP))
741742 }
742743
743744

github/deemru/w8io/169f3d6 
105.15 ms