tx · 3Qf8kFNFnohXWtmcJFWoEHdasqhW69wZhbPNjSrL7qtX 3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm: -0.09600000 Waves 2023.08.27 20:03 [2729348] smart account 3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm > SELF 0.00000000 Waves
{ "type": 13, "id": "3Qf8kFNFnohXWtmcJFWoEHdasqhW69wZhbPNjSrL7qtX", "fee": 9600000, "feeAssetId": null, "timestamp": 1693155774397, "version": 2, "chainId": 84, "sender": "3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm", "senderPublicKey": "EVooykMNV691Venwp1dHUTBd7KWequzUcda57Wd3LQEX", "proofs": [ "2iZUfRgimSxEXD7AchG9AuKpEB2wEfF9QqCiuDMC5Y3bss4fadb95qSa1FRYciSsJu1hvN2PSsVivbVJtFbohhmP" ], "script": "base64:BgLHAQgCEgMKAQgSAwoBBBIAEgMKAQgSABIDCgEIEgQKAgEIEgQKAgEIEgQKAgICEgUKAwEBARIAEgQKAggIEgASABIECgICAhIDCgEIEgQKAggIEgMKARgSBAoCCAgSBAoCCAgSAwoBCBIDCgEYEgMKAQgSBQoDCAgIEgQKAggIEgcKBQEBAQEBEgMKAQESBQoDAQEIEgMKAQgSAwoBCBIAEgQKAggBEgQKAggBEgMKAQgSBAoCCAgSAwoBCBIAEgMKAQgSBAoCAgKFAgEUa2V5TGFzdEFyYlRpbWVCeVVzZXIBBGFkZHIJAKwCAgIQbGFzdEFyYlRpbWVVc2VyXwUEYWRkcgAGU0NBTEU4AIDC1y8ADHhwTGV2ZWxTY2FsZQCAGQAPeHBMZXZlbFJlY2lwUG93AKAfABJudW1Qb2ludHNPbkxldmVsVXAAAwAOcm9iYmVyeUNvc3RNaW4AgMLXLwAUcm9iYmVyeUNvb2xkb3duQ29lZmYAkAMADHJlcXVpcmVtZW50cwkAzAgCAghTdHJlbmd0aAkAzAgCAghBY2N1cmFjeQkAzAgCAglJbnRlbGxlY3QJAMwIAgIJRW5kdXJhbmNlCQDMCAICCURleHRlcml0eQkAzAgCAgVMZXZlbAkAzAgCAgZIZWFsdGgFA25pbAAMY2hhclN0cmVuZ3RoAAAADGNoYXJBY2N1cmFjeQABAA1jaGFySW50ZWxsZWN0AAIADWNoYXJFbmR1cmFuY2UAAwANY2hhckRleHRlcml0eQAEAAtzZWdCYWNrcGFjawAAAAtOVU1TRUdNRU5UUwAGAApOVU1NQUlOQVVYAAIACE1BWFNMT1RTAAIADU1BWFBST0RJTlNMT1QAHgAQbGFuZFJvYkNvb2xkb3ducwkAzAgCAAAJAMwIAgDAzyQJAMwIAgCg9zYJAMwIAgCA3MwUCQDMCAIAgK6mCgUDbmlsAA5NSU5fUkVTX1RPX1JPQgCA2sQJAAxyb2JJZHhMb2NrZWQAAQALZHVja0lkeEZyZWUAAAAQZHVja0lkeFByZXBhcmluZwABAQ1rZXlEdWNrSGVhbHRoAQtkdWNrQXNzZXRJZAkArAICAgtkdWNrSGVhbHRoXwULZHVja0Fzc2V0SWQBDGtleUR1Y2tDaGFycwELZHVja0Fzc2V0SWQJAKwCAgIKZHVja0NoYXJzXwULZHVja0Fzc2V0SWQBCWtleUR1Y2tYUAELZHVja0Fzc2V0SWQJAKwCAgIHZHVja1hQXwULZHVja0Fzc2V0SWQBDGtleUR1Y2tMZXZlbAELZHVja0Fzc2V0SWQJAKwCAgIKZHVja0xldmVsXwULZHVja0Fzc2V0SWQBEWtleUR1Y2tGcmVlUG9pbnRzAQtkdWNrQXNzZXRJZAkArAICAg9kdWNrRnJlZVBvaW50c18FC2R1Y2tBc3NldElkARBrZXlEdWNrRXF1aXBtZW50AQtkdWNrQXNzZXRJZAkArAICAg5kdWNrRXF1aXBtZW50XwULZHVja0Fzc2V0SWQBCWtleVVzZXJYUAEEYWRkcgkArAICAgd1c2VyWFBfBQRhZGRyAQxrZXlVc2VyTGV2ZWwBBGFkZHIJAKwCAgIKdXNlckxldmVsXwUEYWRkcgERa2V5VXNlckZyZWVQb2ludHMBBGFkZHIJAKwCAgIPdXNlckZyZWVQb2ludHNfBQRhZGRyAQ5rZXlTYXZlZEhlYWx0aAELZHVja0Fzc2V0SWQJAKwCAgIMc2F2ZWRIZWFsdGhfBQtkdWNrQXNzZXRJZAEQa2V5U2F2ZWRMb2NhdGlvbgELZHVja0Fzc2V0SWQJAKwCAgIOc2F2ZWRMb2NhdGlvbl8FC2R1Y2tBc3NldElkAQxrZXlEdWNrQnVmZnMBC2R1Y2tBc3NldElkCQCsAgICCmR1Y2tCdWZmc18FC2R1Y2tBc3NldElkARhrZXlMYXN0Um9iYmVyeVRpbWVCeUR1Y2sBC2R1Y2tBc3NldElkCQCsAgICEGxhc3RSb2JiZXJ5VGltZV8FC2R1Y2tBc3NldElkARhrZXlMYXN0Um9iYmVyeUNvc3RCeUR1Y2sBC2R1Y2tBc3NldElkCQCsAgICEGxhc3RSb2JiZXJ5Q29zdF8FC2R1Y2tBc3NldElkARNrZXlMYW5kUm9iYmVyeVN0YXRlAQtsYW5kQXNzZXRJZAkArAICAhFsYW5kUm9iYmVyeVN0YXRlXwULbGFuZEFzc2V0SWQBEmtleUxhbmRDb29sZG93bkVUQQELbGFuZEFzc2V0SWQJAKwCAgIQbGFuZENvb2xkb3duRVRBXwULbGFuZEFzc2V0SWQBE2tleUR1Y2tSb2JiZXJ5U3RhdGUBC2R1Y2tBc3NldElkCQCsAgICEWR1Y2tSb2JiZXJ5U3RhdGVfBQtkdWNrQXNzZXRJZAETa2V5TG9ja2VkTGFuZEJ5RHVjawELZHVja0Fzc2V0SWQJAKwCAgIRbG9ja2VkTGFuZEJ5RHVja18FC2R1Y2tBc3NldElkAAd4cENsYWltAJBOAA94cFN1Y2Nlc3NGbGlnaHQAkE4ADHhwRmFpbEZsaWdodADQDwAIeHBDYWxsRVMAoI0GAAx4cEN1c3RvbU5hbWUAwIQ9AAp4cE5ld1NMYW5kAMCWsQIADnhwVXBncmFkZUluZnJhAJBOAAd4cE1lcmdlAMCEPQAJeHBPbmJvYXJkAMCEPQAGeHBIZWFsAJBOAQlsZXZlbEJ5WFABAnhwCQBrAwUMeHBMZXZlbFNjYWxlCQBsBgUCeHAABAUPeHBMZXZlbFJlY2lwUG93AAQABAUERE9XTgUGU0NBTEU4AQltYXhIZWFsdGgBBWxldmVsCQBkAgBkBQVsZXZlbAEHbGV2ZWxVcAIJY3VyckxldmVsBW5ld1hQBAhuZXdMZXZlbAkBCWxldmVsQnlYUAEFBW5ld1hQCQDMCAIFCG5ld0xldmVsCQDMCAIJAGgCBRJudW1Qb2ludHNPbkxldmVsVXAJAGUCBQhuZXdMZXZlbAUJY3VyckxldmVsBQNuaWwBDGdldER1Y2tTdGF0cwQPc3Rha2luZ0NvbnRyYWN0C2R1Y2tBc3NldElkCmJ1ZmZFZmZlY3QKZm9yY2VCdWZmcwQFY2hhcnMJALUJAgkBC3ZhbHVlT3JFbHNlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJAQxrZXlEdWNrQ2hhcnMBBQtkdWNrQXNzZXRJZAIJMF8wXzBfMF8wAgFfBANsdmwJAQt2YWx1ZU9yRWxzZQIJAJoIAgUPc3Rha2luZ0NvbnRyYWN0CQEMa2V5RHVja0xldmVsAQULZHVja0Fzc2V0SWQAAAQGaGVhbHRoCQELdmFsdWVPckVsc2UCCQCaCAIFD3N0YWtpbmdDb250cmFjdAkBDWtleUR1Y2tIZWFsdGgBBQtkdWNrQXNzZXRJZAkBCW1heEhlYWx0aAEFA2x2bAQKc3RhdGVCdWZmcwkAtQkCCQELdmFsdWVPckVsc2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBDGtleUR1Y2tCdWZmcwEFC2R1Y2tBc3NldElkAgkwXzBfMF8wXzACAV8JAM4IAgkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFY2hhcnMFDGNoYXJTdHJlbmd0aAkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFY2hhcnMFDGNoYXJBY2N1cmFjeQkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFY2hhcnMFDWNoYXJJbnRlbGxlY3QJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBWNoYXJzBQ1jaGFyRW5kdXJhbmNlCQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVjaGFycwUNY2hhckRleHRlcml0eQkAzAgCBQNsdmwJAMwIAgUGaGVhbHRoBQNuaWwDBQpmb3JjZUJ1ZmZzCQDMCAIFCmJ1ZmZFZmZlY3QJAMwIAgUKYnVmZkVmZmVjdAkAzAgCBQpidWZmRWZmZWN0CQDMCAIFCmJ1ZmZFZmZlY3QJAMwIAgUKYnVmZkVmZmVjdAUDbmlsCQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQpzdGF0ZUJ1ZmZzBQxjaGFyU3RyZW5ndGgJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCnN0YXRlQnVmZnMFDGNoYXJBY2N1cmFjeQkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKc3RhdGVCdWZmcwUNY2hhckludGVsbGVjdAkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKc3RhdGVCdWZmcwUNY2hhckVuZHVyYW5jZQkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKc3RhdGVCdWZmcwUNY2hhckRleHRlcml0eQUDbmlsAQ5nZXRSb2JiZXJ5RGF0YQIPc3Rha2luZ0NvbnRyYWN0C2R1Y2tBc3NldElkBAtsYXN0Um9iQ29zdAkBC3ZhbHVlT3JFbHNlAgkAmggCBQ9zdGFraW5nQ29udHJhY3QJARhrZXlMYXN0Um9iYmVyeUNvc3RCeUR1Y2sBBQtkdWNrQXNzZXRJZAAABAtsYXN0Um9iVGltZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQ9zdGFraW5nQ29udHJhY3QJARhrZXlMYXN0Um9iYmVyeVRpbWVCeUR1Y2sBBQtkdWNrQXNzZXRJZAAABANub3cIBQlsYXN0QmxvY2sJdGltZXN0YW1wBAdyb2JDb3N0CQCWAwEJAMwIAgUOcm9iYmVyeUNvc3RNaW4JAMwIAgkAZQIFC2xhc3RSb2JDb3N0CQBoAgUUcm9iYmVyeUNvb2xkb3duQ29lZmYJAGUCBQNub3cFC2xhc3RSb2JUaW1lBQNuaWwECWR1Y2tTdGF0ZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQ9zdGFraW5nQ29udHJhY3QJARNrZXlEdWNrUm9iYmVyeVN0YXRlAQULZHVja0Fzc2V0SWQAAAQKbG9ja2VkTGFuZAkBC3ZhbHVlT3JFbHNlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARNrZXlMb2NrZWRMYW5kQnlEdWNrAQULZHVja0Fzc2V0SWQCAAQHbGFuZEVUQQkBC3ZhbHVlT3JFbHNlAgkAmggCBQ9zdGFraW5nQ29udHJhY3QJARJrZXlMYW5kQ29vbGRvd25FVEEBBQpsb2NrZWRMYW5kAAAJAJcKBQUHcm9iQ29zdAULbGFzdFJvYlRpbWUFCWR1Y2tTdGF0ZQUKbG9ja2VkTGFuZAUHbGFuZEVUQQAKTEFORFBSRUZJWAIETEFORAAKRFVDS1BSRUZJWAIERFVDSwAKQVJUUFJFU0FMRQIHUFJFU0FMRQAGTlVNUkVTAAYAGE1BWF9MQU5EU19TVEFLRURfQllfVVNFUgAZAA9EQUlMWVJFU0JZUElFQ0UAgPjSAQAJREFZTUlMTElTAIC4mSkADFdITVVMVElQTElFUgCAyK+gJQAPREVGQVVMVExPQ0FUSU9OAg9BZnJpY2FfRl9BZnJpY2EAEFJFU09VUkNFUFJJQ0VNSU4A1bUCAApFU1NFTExDT0VGAAoACXByb2RUeXBlcwkAzAgCAhBGaXJzdCBBaWQgS2l0IEwxCQDMCAICEEZpcnN0IEFpZCBLaXQgTDIJAMwIAgIQRmlyc3QgQWlkIEtpdCBMMwkAzAgCAgtCYWNrcGFjayBMMQkAzAgCAgtCYWNrcGFjayBMMgkAzAgCAgtCYWNrcGFjayBMMwkAzAgCAg5Gb29kIFJhdGlvbiBMMQkAzAgCAg5Gb29kIFJhdGlvbiBMMgkAzAgCAg5Gb29kIFJhdGlvbiBMMwkAzAgCAgtKZXQgUGFjayBMMQkAzAgCAgtKZXQgUGFjayBMMgkAzAgCAgtKZXQgUGFjayBMMwkAzAgCAglTaGllbGQgTDEJAMwIAgIJU2hpZWxkIEwyCQDMCAICCVNoaWVsZCBMMwkAzAgCAgdNaW5lIEwxCQDMCAICB01pbmUgTDIJAMwIAgIHTWluZSBMMwkAzAgCAgdUcmFwIEwxCQDMCAICB1RyYXAgTDIJAMwIAgIHVHJhcCBMMwUDbmlsAApjb250aW5lbnRzCQDMCAICCEFtZXJpY2FzCQDMCAICBkV1cm9wZQkAzAgCAgRBc2lhCQDMCAICBkFmcmljYQkAzAgCAgdPY2VhbmlhBQNuaWwACUNPRUZGMk1BVACAreIEABBmb3J0QWxsb3dlZFByb2RzCQDMCAIADwkAzAgCABAJAMwIAgARCQDMCAIAEgkAzAgCABMJAMwIAgAUBQNuaWwAEHByb2R1Y3Rpb25NYXRyaXgJAMwIAgIlOF84XzhfMTdfMTdfNDJfMTJfMF8zMF8wLDAsMCwwLDAsMCwwXwkAzAgCAiU4XzhfOF8xN18xN180Ml8yNF8wXzYwXzAsMCw1LDIsMCwwLDBfCQDMCAICJzhfOF84XzE3XzE3XzQyXzM2XzBfMTIwXzAsMCwxMCw0LDAsMCwwXwkAzAgCAik4XzE5XzE5XzhfMjdfMTlfMjZfMV8yMF8wLDAsMCwwLDAsMCwwXzAwMQkAzAgCAik4XzE5XzE5XzhfMjdfMTlfNTJfMV80MF8wLDAsMCwwLDAsMCwwXzAwMQkAzAgCAik4XzE5XzE5XzhfMjdfMTlfNzhfMV84MF8wLDAsMCwwLDAsMCwwXzAwMQkAzAgCAiU4XzhfOF84XzhfNjBfMTNfMl8yXzAsMCwwLDAsMCwwLDBfMDExCQDMCAICJThfOF84XzhfOF82MF8yNl8yXzRfMCwwLDAsMCwwLDAsMF8wMTEJAMwIAgIlOF84XzhfOF84XzYwXzM5XzJfOF8wLDAsMCwwLDAsMCwwXzAxMQkAzAgCAikzMF8zMF8zXzE3XzE3XzNfMzBfM18zMF8wLDAsMCwwLDAsMCwwXzExMQkAzAgCAikzMF8zMF8zXzE3XzE3XzNfNjBfM181MF8wLDAsMCwwLDAsMCwwXzExMQkAzAgCAikzMF8zMF8zXzE3XzE3XzNfOTBfM183MF8wLDAsMCwwLDAsMCwwXzExMQkAzAgCAisxOF8xOF8xMF8xOF8xOF8xOF8xMV80XzMwXzAsMCwwLDAsMCwwLDBfMjAxCQDMCAICKzE4XzE4XzEwXzE4XzE4XzE4XzIyXzRfNTBfMCwwLDAsMCwwLDAsMF8yMDEJAMwIAgIrMThfMThfMTBfMThfMThfMThfMzNfNF83MF8wLDAsMCwwLDAsMCwwXzIwMQkAzAgCAio0XzEzXzIyXzRfMzVfMjJfMjNfMF81MCwxLDBfMCwwLDAsMCwwLDAsMF8JAMwIAgIqNF8xM18yMl80XzM1XzIyXzQ2XzBfNTAsMSwxXzAsMiw1LDAsMCwwLDBfCQDMCAICKzRfMTNfMjJfNF8zNV8yMl82OV8wXzUwLDIsMV8wLDUsMTAsMCwwLDAsMF8JAMwIAgIqNV8yNV80MF81XzEwXzE1XzIwXzFfMzAsMSwxXzAsMCwwLDAsMCwwLDBfCQDMCAICKjVfMjVfNDBfNV8xMF8xNV80MF8xXzMwLDEsMl8yLDEsMywwLDAsMCwwXwkAzAgCAio1XzI1XzQwXzVfMTBfMTVfNjBfMV8zMCwxLDNfNSwyLDgsMCwwLDAsMF8FA25pbAAJcklkeENvZWZmAAYACnJJZHhFZmZlY3QACAAQcklkeFJlcXVpcmVtZW50cwAJAAlySWR4U2xvdHMACgAOUFJPRFVDVFBLR1NJWkUACgALd2hJZHhMZXZlbHMAAAAId2hJZHhSZXMAAQAId2hJZHhNYXQAAgAJd2hJZHhQcm9kAAMACXdoSWR4TE9GVAAEAAl2b2xMb2NrZWQAAAALdm9sT2NjdXBpZWQAAQAHdm9sRnJlZQACAAh2b2xUb3RhbAADAApicElkeExldmVsAAAACGJwSWR4UmVzAAEACGJwSWR4TWF0AAIACWJwSWR4UHJvZAADARFrZXlMYXN0VHhJZEJ5VXNlcgEEYWRkcgkArAICAg9sYXN0VHhJZEJ5VXNlcl8FBGFkZHIBFWtleUxhbmRBc3NldElkVG9Pd25lcgEHYXNzZXRJZAkArAICAgluZnRPd25lcl8FB2Fzc2V0SWQBGmtleUxhbmRBc3NldElkVG9DdXN0b21OYW1lAQdhc3NldElkCQCsAgICGGxhbmRDdXN0b21OYW1lQnlBc3NldElkXwUHYXNzZXRJZAEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEHYXNzZXRJZAkArAICAgtzdGFrZWRUaW1lXwUHYXNzZXRJZAEga2V5TGFuZEFydFN0YXR1c0J5VHlwZUFuZEFzc2V0SWQCBHR5cGUHYXNzZXRJZAkAuQkCCQDMCAICDWxhbmRBcnRTdGF0dXMJAMwIAgUEdHlwZQkAzAgCBQdhc3NldElkBQNuaWwCAV8BImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDB25mdFR5cGUHYXNzZXRJZAlvd25lckFkZHIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAiBzdGFrZWRUaW1lQnlUeXBlQXNzZXRJZEFuZE93bmVyXwUHbmZ0VHlwZQIBXwUHYXNzZXRJZAIBXwUJb3duZXJBZGRyARJrZXlXYXJlaG91c2VCeUxhbmQBC2xhbmRBc3NldElkCQCsAgICCndhcmVIb3VzZV8FC2xhbmRBc3NldElkARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQdhc3NldElkCQCsAgICC2luZnJhTGV2ZWxfBQdhc3NldElkARdrZXlGb3J0aWZpY2F0aW9uc0J5TGFuZAELbGFuZEFzc2V0SWQJAKwCAgIPZm9ydGlmaWNhdGlvbnNfBQtsYW5kQXNzZXRJZAEaa2V5RHVja0Fzc2V0SWRUb0N1c3RvbU5hbWUBB2Fzc2V0SWQJAKwCAgIYZHVja0N1c3RvbU5hbWVCeUFzc2V0SWRfBQdhc3NldElkARZrZXlBZGRyZXNzVG9DdXN0b21OYW1lAQRhZGRyCQCsAgICGGFjY291bnRDdXN0b21OYW1lQnlBZGRyXwUEYWRkcgEPa2V5QWRkcmVzc1JlZkJ5AQRhZGRyCQCsAgICCWFjY1JlZkJ5XwUEYWRkcgEca2V5T25ib2FyZEFydEFjdGl2YXRlZE9uRHVjawELZHVja0Fzc2V0SWQJAKwCAgIab25ib2FyZEFydEFjdGl2YXRlZE9uRHVja18FC2R1Y2tBc3NldElkARxrZXlPbmJvYXJkQXJ0RHVja0FjdGl2YXRlZEJ5AQRhZGRyCQCsAgICGm9uYm9hcmRBcnRBY3RpdmF0ZWREdWNrQnlfBQRhZGRyARNrZXlBZGRyZXNzUmVmZXJyYWxzAQRhZGRyCQCsAgICDWFjY1JlZmVycmFsc18FBGFkZHIBEGtleUR1Y2tJZFRvT3duZXIBB2Fzc2V0SWQJAKwCAgIKZHVja093bmVyXwUHYXNzZXRJZAEUa2V5U3Rha2VkRHVja0J5T3duZXIBCW93bmVyQWRkcgkArAICAhJzdGFrZWREdWNrQnlPd25lcl8FCW93bmVyQWRkcgERa2V5QmFja3BhY2tCeUR1Y2sBC2R1Y2tBc3NldElkCQCsAgICCWJhY2tQYWNrXwULZHVja0Fzc2V0SWQBD2tleUR1Y2tMb2NhdGlvbgELZHVja0Fzc2V0SWQJAKwCAgINZHVja0xvY2F0aW9uXwULZHVja0Fzc2V0SWQBCmtleUJsb2NrZWQAAhBjb250cmFjdHNCbG9ja2VkARVrZXlVc2VyR3dsUmVsZWFzZVRpbWUBCHVzZXJBZGRyCQCsAgICGiVzJXNfX3VzZXJHd2xSZWxlYXNlVGltZV9fBQh1c2VyQWRkcgEOa2V5RXNXYXJlaG91c2UAAhplbWVyZ2VuY3lXYXJlaG91c2VQcm9kdWN0cwANbGFzdFRvdXJJZEtleQIOJXNfX2xhc3RUb3VySWQBFWtleVRvdXJTdGF0aWNEYXRhQnlJZAEDdElkCQCsAgICFiVzJWRfX3RvdXJTdGF0aWNEYXRhX18JAKQDAQUDdElkARZrZXlUb3VyRHluYW1pY0RhdGFCeUlkAQN0SWQJAKwCAgIXJXMlZF9fdG91ckR5bmFtaWNEYXRhX18JAKQDAQUDdElkAAlpZHhTdGF0aWMAAAAKaWR4RHluYW1pYwABAQtnZXRUb3VyRGF0YQIMdG91ckNvbnRyYWN0A3RJZAQGc3RhdGljCQC1CQIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQx0b3VyQ29udHJhY3QJARVrZXlUb3VyU3RhdGljRGF0YUJ5SWQBBQN0SWQJAKwCAgkArAICAhlFcnJvciByZWFkaW5nIHRvdXJuYW1lbnQgCQCkAwEFA3RJZAIFIGRhdGECAl9fBAdkeW5hbWljCQC1CQIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQx0b3VyQ29udHJhY3QJARZrZXlUb3VyRHluYW1pY0RhdGFCeUlkAQUDdElkCQCsAgIJAKwCAgIZRXJyb3IgcmVhZGluZyB0b3VybmFtZW50IAkApAMBBQN0SWQCBSBkYXRhAgJfXwkAzAgCBQZzdGF0aWMJAMwIAgUHZHluYW1pYwUDbmlsAAp0U3RhdGljRW5kAAYADnREeW5hbWljU3RhdHVzAAEAEXREeW5hbWljV2luUmVzdWx0AAMAD2xvY0lkeENvbnRpbmVudAAAAApsb2NJZHhUeXBlAAEACGxvY0lkeElkAAIBEmdldFJlY2lwZU1hdGVyaWFscwEGcmVjaXBlCQBoAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBnJlY2lwZQUJcklkeENvZWZmBQlDT0VGRjJNQVQAFktTX1NFUEFSQVRFX1BVQkxJQ19LRVkHABhLU19BTExPV19CSUdfSU5GUkFfTUVSR0UHAAVjaGFpbgkAyQECCQDKAQIIBQR0aGlzBWJ5dGVzAAEAAQALdXNkdEFzc2V0SWQEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDABIITaerIIAz9O0bvKju6Lk7zJgt0LXfoHlqjUI/moD/+5AwkAAAIBAVQFByRtYXRjaDABIFWx2J9yh4Lv5eNbjawFq2XemkOhLxa7BfMat4el8cUYCQACAQINVW5rbm93biBjaGFpbgAVZGVmYXVsdFJlc3RBZGRyZXNzU3RyBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwAiMzUFFDdXZGYnZoNExrUFVucm5VMXozam5iQTFwOW0zV05odgMJAAACAQFUBQckbWF0Y2gwAiMzTXVta0dHenRDS0FYcFdEcXhrZGRvZnFYU1VicVFrdlNKeQkAAgECDVVua25vd24gY2hhaW4AEUluZnJhVXBncmFkZUNvc3RTBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwAIDIr6AlAwkAAAIBAVQFByRtYXRjaDAAgMLXLwkAAgECDVVua25vd24gY2hhaW4ADmFyYml0cmFnZURlbGF5BAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwAIC4mSkDCQAAAgEBVAUHJG1hdGNoMADg1AMJAAIBAg1Vbmtub3duIGNoYWluAANTRVACAl9fAAVNVUxUNgDAhD0ABU1VTFQ4AIDC1y8ABVNTSVpFABkABU1TSVpFAGQABUxTSVpFAOEBAAZYTFNJWkUAkAMAB1hYTFNJWkUA8QQABUlURVI2CQDMCAIAAAkAzAgCAAEJAMwIAgACCQDMCAIAAwkAzAgCAAQJAMwIAgAFBQNuaWwBD2dldFN0cmluZ09yRmFpbAIHYWRkcmVzcwNrZXkJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQdhZGRyZXNzBQNrZXkJALkJAgkAzAgCAgptYW5kYXRvcnkgCQDMCAIJAKUIAQUHYWRkcmVzcwkAzAgCAgEuCQDMCAIFA2tleQkAzAgCAg8gaXMgbm90IGRlZmluZWQFA25pbAIAABFJZHhDZmdTdGFraW5nRGFwcAABABFJZHhDZmdFY29ub215RGFwcAACABRJZHhDZmdHb3Zlcm5hbmNlRGFwcAADAA1JZHhDZmdXbGdEYXBwAAQAFElkeENmZ1RvdXJuYW1lbnREYXBwAAcBCmtleVJlc3RDZmcAAg4lc19fcmVzdENvbmZpZwEOa2V5UmVzdEFkZHJlc3MAAgwlc19fcmVzdEFkZHIBEXJlYWRSZXN0Q2ZnT3JGYWlsAQRyZXN0CQC8CQIJAQ9nZXRTdHJpbmdPckZhaWwCBQRyZXN0CQEKa2V5UmVzdENmZwAFA1NFUAEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgdyZXN0Q2ZnA2lkeAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJAJEDAgUHcmVzdENmZwUDaWR4CQCsAgICKlJlc3QgY2ZnIGRvZXNuJ3QgY29udGFpbiBhZGRyZXNzIGF0IGluZGV4IAkApAMBBQNpZHgADHJlc3RDb250cmFjdAkBEUBleHRyTmF0aXZlKDEwNjIpAQkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzCQEOa2V5UmVzdEFkZHJlc3MABRVkZWZhdWx0UmVzdEFkZHJlc3NTdHIAB3Jlc3RDZmcJARFyZWFkUmVzdENmZ09yRmFpbAEFDHJlc3RDb250cmFjdAAPc3Rha2luZ0NvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUHcmVzdENmZwURSWR4Q2ZnU3Rha2luZ0RhcHAAD2Vjb25vbXlDb250cmFjdAkBGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIFB3Jlc3RDZmcFEUlkeENmZ0Vjb25vbXlEYXBwAAtnb3ZDb250cmFjdAkBGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIFB3Jlc3RDZmcFFElkeENmZ0dvdmVybmFuY2VEYXBwAAt3bGdDb250cmFjdAkBGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIFB3Jlc3RDZmcFDUlkeENmZ1dsZ0RhcHAAEnRvdXJuYW1lbnRDb250cmFjdAkBGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIFB3Jlc3RDZmcFFElkeENmZ1RvdXJuYW1lbnREYXBwAApyZWNMYW5kTnVtAAAAC3JlY0xhbmRTaXplAAEAC3JlY1RlcnJhaW5zAAIADHJlY0NvbnRpbmVudAADAA13bGdBc3NldElkS2V5Agt3bGdfYXNzZXRJZAAKd2xnQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCcCAIFC3dsZ0NvbnRyYWN0BQ13bGdBc3NldElkS2V5AhNOb3QgaW5pdGlhbGl6ZWQgeWV0AAtyYW5kb21EZWxheQACAQlrZXlDb21taXQBB2FkZHJlc3MJAKwCAgITZmluaXNoQmxvY2tGb3JBZGRyXwUHYWRkcmVzcwERa2V5UmVzUHJvcG9ydGlvbnMAAhNyZXNUeXBlc1Byb3BvcnRpb25zARZrZXlSZXNUeXBlc0J5Q29udGluZW50AQljb250aW5lbnQJAKwCAgIUcmVzVHlwZXNCeUNvbnRpbmVudF8FCWNvbnRpbmVudAEVa2V5U3Rha2VkTGFuZHNCeU93bmVyAQlvd25lckFkZHIJAKwCAgITc3Rha2VkTGFuZHNCeU93bmVyXwUJb3duZXJBZGRyARZrZXlTdGFrZWRQaWVjZXNCeU93bmVyAQlvd25lckFkZHIJAKwCAgIUc3Rha2VkUGllY2VzQnlPd25lcl8FCW93bmVyQWRkcgEIYXNTdHJpbmcBAXYEByRtYXRjaDAFAXYDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFzBQckbWF0Y2gwBQFzCQACAQIYZmFpbCB0byBjYXN0IGludG8gU3RyaW5nAQVhc0ludAEBdgQHJG1hdGNoMAUBdgMJAAECBQckbWF0Y2gwAgNJbnQEAW4FByRtYXRjaDAFAW4JAAIBAhVmYWlsIHRvIGNhc3QgaW50byBJbnQBD251bVBpZWNlc0J5U2l6ZQEIbGFuZFNpemUEByRtYXRjaDAFCGxhbmRTaXplAwkAAAICAVMFByRtYXRjaDAFBVNTSVpFAwkAAAICAU0FByRtYXRjaDAFBU1TSVpFAwkAAAICAUwFByRtYXRjaDAFBUxTSVpFAwkAAAICAlhMBQckbWF0Y2gwBQZYTFNJWkUDCQAAAgIDWFhMBQckbWF0Y2gwBQdYWExTSVpFCQACAQIRVW5rbm93biBsYW5kIHNpemUBB2lzRGlnaXQBAXMJAQlpc0RlZmluZWQBCQC2CQEFAXMBD2dldFJhbmRvbU51bWJlcgMIbWF4VmFsdWUMZmluaXNoSGVpZ2h0CmF1eEVudHJvcHkED3JhbmRvbVNlZWRCbG9jawkBBXZhbHVlAQkA7QcBBQxmaW5pc2hIZWlnaHQECnJhbmRvbUhhc2gJAPcDAQkAywECCQEFdmFsdWUBCAUPcmFuZG9tU2VlZEJsb2NrA3ZyZgUKYXV4RW50cm9weQkAagIJALEJAQUKcmFuZG9tSGFzaAUIbWF4VmFsdWUADWluY3ViYXRvckFkZHIEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDAJARFAZXh0ck5hdGl2ZSgxMDYyKQECIzNQRWt0VnV4MlJoY2hTTjYzRHNEbzRiNG16NFFxektTZUR2AwkAAAIBAVQFByRtYXRjaDAFBHRoaXMJAAIBAg1Vbmtub3duIGNoYWluAAticmVlZGVyQWRkcgQHJG1hdGNoMAUFY2hhaW4DCQAAAgEBVwUHJG1hdGNoMAkBEUBleHRyTmF0aXZlKDEwNjIpAQIjM1BEVnVVNDVIN0VoNWRtdE5iblJOUlN0R3dVTEE3Tlk2SGIDCQAAAgEBVAUHJG1hdGNoMAUEdGhpcwkAAgECDVVua25vd24gY2hhaW4AA3B1YgQHJG1hdGNoMAUFY2hhaW4DCQAAAgEBVwUHJG1hdGNoMAMFFktTX1NFUEFSQVRFX1BVQkxJQ19LRVkBIKsXV48VZ+NZVEGw1nLrZpvEo9NmXtWZhlDfmDcfsgkIASBPU+IaP1So1p1SThMdRidVvbNT8yx7yVRUsP9DwbQUKAMJAAACAQFUBQckbWF0Y2gwASBPU+IaP1So1p1SThMdRidVvbNT8yx7yVRUsP9DwbQUKAkAAgECDVVua25vd24gY2hhaW4ADEVNUFRZX1BST0Q1MAGQAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEUZJVkVNSU5VVEVTTUlMTElTAOCnEgAMUkVOQU1JTkdDT1NUAMCWsQIACk1BWE5BTUVMRU4AMgAVSW5mcmFVcGdyYWRlQ29zdFNVc2R0AICt4gQADEVYUE1BVEVSSUFMUwQHJG1hdGNoMAUFY2hhaW4DCQAAAgEBVwUHJG1hdGNoMACm3YLtqwcDCQAAAgEBVAUHJG1hdGNoMACqp4GzCQkAAgECDVVua25vd24gY2hhaW4AB0VYUFVTRFQEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDAAgOWadwMJAAACAQFUBQckbWF0Y2gwAIDlmncJAAIBAg1Vbmtub3duIGNoYWluAAVGSVZFWAkAtgIBAAUAB1RXRU5UWVgJALYCAQAUAAhUV0VOVFkyWAkAtgIBCQBoAgAUABQACFRXRU5UWTNYCQC2AgEJAGgCCQBoAgAUABQAFAAIVFdFTlRZNFgJALYCAQkAaAIJAGgCCQBoAgAUABQAFAAUAAhUV0VOVFk1WAkAtgIBCQBoAgkAaAIJAGgCCQBoAgAUABQAFAAUABQAD1BSRVNBTEVOVU1MQU5EUwD0AwESa2V5TmV4dEZyZWVMYW5kTnVtAAILbmV4dExhbmROdW0BGmtleUxhbmRDdXN0b21OYW1lVG9Bc3NldElkAQRuYW1lCQCsAgICEWxhbmRCeUN1c3RvbU5hbWVfBQRuYW1lARBrZXlMYW5kVG9Bc3NldElkAQdsYW5kTnVtCQCsAgICDGxhbmRUb0Fzc2V0XwUHbGFuZE51bQEea2V5SW5mcmFMZXZlbEJ5QXNzZXRJZEFuZE93bmVyAgdhc3NldElkCW93bmVyQWRkcgkArAICCQCsAgIJAKwCAgIcaW5mcmFMZXZlbEJ5QXNzZXRJZEFuZE93bmVyXwUHYXNzZXRJZAIBXwUJb3duZXJBZGRyARFrZXlMYW5kTnVtVG9Pd25lcgEHbGFuZE51bQkArAICAgpsYW5kT3duZXJfBQdsYW5kTnVtARprZXlEdWNrQ3VzdG9tTmFtZVRvQXNzZXRJZAEEbmFtZQkArAICAhFkdWNrQnlDdXN0b21OYW1lXwUEbmFtZQEWa2V5Q3VzdG9tTmFtZVRvQWRkcmVzcwEEbmFtZQkArAICAhRhY2NvdW50QnlDdXN0b21OYW1lXwUEbmFtZQEJa2V5T2xkaWVzAAIKb2xkaWVzTGlzdAALY2xhaW1Nb2RlV2gAAAANY2xhaW1Nb2RlRHVjawABABNjbGFpbU1vZGVXaFRoZW5EdWNrAAIACGZsSGVhbHRoAAAAC2ZsVGltZXN0YW1wAAUAB2ZsQm9udXMABgALZmxQcm9kc1VzZWQABwEHbmZ0TmFtZQIHbGFuZE51bQhsYW5kU2l6ZQkArAICCQCsAgIFCkxBTkRQUkVGSVgFB2xhbmROdW0FCGxhbmRTaXplAQh0b1ZvbHVtZQIGYW1vdW50B3BrZ1NpemUEBHBrZ3MDCQBnAgUGYW1vdW50AAAJAGkCCQBlAgkAZAIFBmFtb3VudAUHcGtnU2l6ZQABBQdwa2dTaXplCQEBLQEJAGkCCQBlAgkAZAIJAQEtAQUGYW1vdW50BQdwa2dTaXplAAEFB3BrZ1NpemUJAGgCBQRwa2dzBQVNVUxUOAETZGlzdHJpYnV0ZUJ5V2VpZ2h0cwIFdG90YWwHd2VpZ2h0cwQDc3VtCQBkAgkAZAIJAGQCCQBkAgkAZAIJAJEDAgUHd2VpZ2h0cwAACQCRAwIFB3dlaWdodHMAAQkAkQMCBQd3ZWlnaHRzAAIJAJEDAgUHd2VpZ2h0cwADCQCRAwIFB3dlaWdodHMABAkAkQMCBQd3ZWlnaHRzAAUDCQBnAgAABQNzdW0JAAIBAhBaZXJvIHdlaWdodHMgc3VtBAVub3JtNgkAawMFBXRvdGFsBQVNVUxUNgUDc3VtCgEKbm9ybWFsaXplcgIDYWNjBGVsZW0JAM0IAgUDYWNjCQBrAwUEZWxlbQUFbm9ybTYFBU1VTFQ2CgACJGwFB3dlaWdodHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCm5vcm1hbGl6ZXICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYBEmdldE5lZWRlZE1hdGVyaWFscwEFdG90YWwEBXByb3BzCQC1CQIJAQV2YWx1ZQEJAKIIAQkBEWtleVJlc1Byb3BvcnRpb25zAAIBXwMJAQIhPQIJAJADAQUFcHJvcHMFBk5VTVJFUwkAAgECFldyb25nIHByb3BvcnRpb25zIGRhdGEEAXIJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBXByb3BzAAAJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBXByb3BzAAEJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBXByb3BzAAIJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBXByb3BzAAMJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBXByb3BzAAQJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBXByb3BzAAUFA25pbAkBE2Rpc3RyaWJ1dGVCeVdlaWdodHMCBQV0b3RhbAUBcgERc3VidHJhY3RNYXRlcmlhbHMDDHNob3VsZFVzZU1hdANoYXMJdG90YWxOZWVkBARuZWVkCQESZ2V0TmVlZGVkTWF0ZXJpYWxzAQUJdG90YWxOZWVkCgEKc3VidHJhY3RvcgIDYWNjA2lkeAQGcmVzdWx0CQBlAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFA2hhcwUDaWR4CQCRAwIFBG5lZWQFA2lkeAMJAGYCAAAFBnJlc3VsdAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhhOb3QgZW5vdWdoIG1hdGVyaWFsIGlkeD0JAKQDAQUDaWR4AgssIHlvdSBoYXZlIAkAkQMCBQNoYXMFA2lkeAILLCBidXQgbmVlZCAJAKQDAQkAkQMCBQRuZWVkBQNpZHgJAM0IAgUDYWNjCQCkAwEFBnJlc3VsdAMFDHNob3VsZFVzZU1hdAoAAiRsBQVJVEVSNgoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEKc3VidHJhY3RvcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgUDaGFzARFzdWJ0cmFjdEVxdWlwbWVudAIFb2xkRXEFcFVzZWQDCQAAAgUFcFVzZWQCAAkAlAoCBQVvbGRFcQcKAQdzdWJVc2VkAgNhY2MGaWR4QW10BAVwYXJ0cwkAtQkCBQZpZHhBbXQCASwDCQECIT0CCQCQAwEFBXBhcnRzAAIJAAIBAihJbmNvcnJlY3QgZm9ybWF0LCBzaG91bGQgYmUgaW5kZXgsYW1vdW50BANpZHgJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwYXJ0cwAAAwMJAGYCAAAFA2lkeAYJAGcCBQNpZHgJAJADAQUQcHJvZHVjdGlvbk1hdHJpeAkAAgECE1Vua25vd24gcHJvZHVjdCBpZHgEA2FtdAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBXBhcnRzAAEEB2VxUGFydHMJALUJAggFA2FjYwJfMQkArAICCQCRAwIFBXBhcnRzAAACAToDCQECIT0CCQCQAwEFB2VxUGFydHMAAgkAAgEJAKwCAgkArAICAg9Zb3UgZG9uJ3QgaGF2ZSAJAJEDAgUJcHJvZFR5cGVzBQNpZHgCCSBlcXVpcHBlZAQDdG1wCQCRAwIFB2VxUGFydHMAAQQGbnVtTGVuAwkBB2lzRGlnaXQBCQCvAgIJALACAgUDdG1wAAEAAQACAAEEBGN1cnIJAQ1wYXJzZUludFZhbHVlAQkArwICBQN0bXAFBm51bUxlbgQEdGFpbAkAsAICBQN0bXAFBm51bUxlbgQGbmV3QW10AwkAZwIFBGN1cnIFA2FtdAkAZQIFBGN1cnIFA2FtdAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAg1Zb3UgZXF1aXBwZWQgCQCkAwEFBGN1cnICBCBvZiAJAJEDAgUJcHJvZFR5cGVzBQNpZHgCEywgYnV0IHRyaWVkIHRvIHVzZSAJAKQDAQUDYW10CQCUCgIJAKwCAgkArAICCQCsAgIJAKwCAgkAkQMCBQdlcVBhcnRzAAAJAJEDAgUFcGFydHMAAAIBOgkApAMBBQZuZXdBbXQFBHRhaWwDCAUDYWNjAl8yBgMDCQBnAgUDaWR4AAYJAGcCAAgFA2lkeAcJAAACBQZuZXdBbXQAAAcKAAIkbAkAtQkCBQVwVXNlZAIBXwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgUFb2xkRXEHCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQdzdWJVc2VkAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAQ5wcm9kU3RyVG9CeXRlcwEHcHJvZFN0cgQFcExpc3QDCQAAAgUHcHJvZFN0cgIABQNuaWwJALwJAgUHcHJvZFN0cgIBXwoBBHRvQlYCA2FjYwZyZWNpcGUEAWoJAGkCCQDIAQEFA2FjYwAIBARjdXJyAwkAZgIJAJADAQUFcExpc3QFAWoJAQ1wYXJzZUludFZhbHVlAQkAkQMC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AgkArAICAhRDYW4ndCBwdXQgbW9yZSB0aGFuIAkApAMBBQ1NQVhQUk9ESU5TTE9UAgQgb2YgCQCRAwIFCXByb2RUeXBlcwUKcHJvZHVjdElkeAMJAAACBQVjb3VudAAACQCVCgMFBXBMaXN0BQhvY2N1cGllZAUEZnJlZQQEaGVhZAkAyQECBQVwTGlzdAkAaAIACAUKcHJvZHVjdElkeAQEY3VycgkAsQkBCQDJAQIJAMoBAgUFcExpc3QJAGgCAAgFCnByb2R1Y3RJZHgACAQEdGFpbAkAygECBQVwTGlzdAkAaAIACAkAZAIFCnByb2R1Y3RJZHgAAQQGcmVjaXBlCQC1CQIJAJEDAgUQcHJvZHVjdGlvbk1hdHJpeAUKcHJvZHVjdElkeAIBXwMDCQEBIQEFCmlzUG9zaXRpdmUJAGYCBQVjb3VudAUEY3VycgcJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIJWW91IGhhdmUgCQCkAwEFBGN1cnICBCBvZiAJAJEDAgUJcHJvZFR5cGVzBQpwcm9kdWN0SWR4AhMsIGJ1dCB0cmllZCB0byB1c2UgCQCkAwEFBWNvdW50BAZuZXdBbXQDAwkBASEBBQppc1Bvc2l0aXZlCQEVY2hlY2tTdGF0UmVxdWlyZW1lbnRzAgUJZHVja1N0YXRzCQC1CQIJAJEDAgUGcmVjaXBlBRBySWR4UmVxdWlyZW1lbnRzAgEsBwkAZQIFBGN1cnIFBWNvdW50CQBkAgUEY3VycgUFY291bnQECGRlbHRhVm9sCQBlAgkBCHRvVm9sdW1lAgUGbmV3QW10BQ5QUk9EVUNUUEtHU0laRQkBCHRvVm9sdW1lAgUEY3VycgUOUFJPRFVDVFBLR1NJWkUJAJUKAwkAywECCQDLAQIFBGhlYWQJAJoDAQUGbmV3QW10BQR0YWlsCQBkAgUIb2NjdXBpZWQFCGRlbHRhVm9sCQBlAgUEZnJlZQUIZGVsdGFWb2wBCGFkZFByb2RCBwZpZHhDbnQFcExpc3QKaXNQb3NpdGl2ZQdzZWdtZW50B21haW5BdXgEc2xvdAlkdWNrU3RhdHMEBXBhcnRzCQC1CQIFBmlkeENudAIBOgMJAQIhPQIJAJADAQUFcGFydHMAAgkAAgECKEluY29ycmVjdCBmb3JtYXQsIHNob3VsZCBiZSBpbmRleDphbW91bnQDAwkBASEBBQppc1Bvc2l0aXZlCQECIT0CCQCxAgEJAJEDAgUFcGFydHMAAAACBwkAAgECK1Byb2R1Y3QgaWR4IHNob3VsZCBiZSAyIGRpZ2l0cywgemVybyBwYWRkZWQECnByb2R1Y3RJZHgJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwYXJ0cwAABAVjb3VudAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBXBhcnRzAAEDAwkAZgIAAAUKcHJvZHVjdElkeAYJAGcCBQpwcm9kdWN0SWR4CQCQAwEFEHByb2R1Y3Rpb25NYXRyaXgJAAIBAhNVbmtub3duIHByb2R1Y3QgaWR4AwkAZgIAAAUFY291bnQJAAIBAhdDb3VudCBjYW4ndCBiZSBuZWdhdGl2ZQMJAGYCBQVjb3VudAUNTUFYUFJPRElOU0xPVAkAAgEJAKwCAgkArAICCQCsAgICFENhbid0IHB1dCBtb3JlIHRoYW4gCQCkAwEFDU1BWFBST0RJTlNMT1QCBCBvZiAJAJEDAgUJcHJvZFR5cGVzBQpwcm9kdWN0SWR4AwkAAAIFBWNvdW50AAAJAJQKAgUFcExpc3QHBARoZWFkCQDJAQIFBXBMaXN0CQBoAgAIBQpwcm9kdWN0SWR4BARjdXJyCQCxCQEJAMkBAgkAygECBQVwTGlzdAkAaAIACAUKcHJvZHVjdElkeAAIBAR0YWlsCQDKAQIFBXBMaXN0CQBoAgAICQBkAgUKcHJvZHVjdElkeAABBAZyZWNpcGUJALUJAgkAkQMCBRBwcm9kdWN0aW9uTWF0cml4BQpwcm9kdWN0SWR4AgFfAwMJAQEhAQUKaXNQb3NpdGl2ZQkAZgIFBWNvdW50BQRjdXJyBwkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAglZb3UgaGF2ZSAJAKQDAQUEY3VycgIEIG9mIAkAkQMCBQlwcm9kVHlwZXMFCnByb2R1Y3RJZHgCEywgYnV0IHRyaWVkIHRvIHVzZSAJAKQDAQUFY291bnQECWlzQmlnSXRlbQMDCQEBIQEFCmlzUG9zaXRpdmUJARVjaGVja1N0YXRSZXF1aXJlbWVudHMCBQlkdWNrU3RhdHMJALUJAgkAkQMCBQZyZWNpcGUFEHJJZHhSZXF1aXJlbWVudHMCASwHBAZjb21wYXQJAJEDAgUGcmVjaXBlBQlySWR4U2xvdHMDCQAAAgUGY29tcGF0AgAJAAIBAhdJdGVtIGNhbm5vdCBiZSBlcXVpcHBlZAQBYwkBDXBhcnNlSW50VmFsdWUBBQZjb21wYXQEBGNTZWcJAGkCBQFjAGQDCQECIT0CBQdzZWdtZW50BQRjU2VnCQACAQIUU2VnbWVudCBpbmNvbXBhdGlibGUECGNNYWluQXV4CQBpAgkAagIFAWMAZAAKAwkBAiE9AgUHbWFpbkF1eAUIY01haW5BdXgJAAIBAhFTbG90IGluY29tcGF0aWJsZQQJY051bVNsb3RzCQBqAgUBYwAKAwMJAQIhPQIFBHNsb3QAAAkAZgIFCWNOdW1TbG90cwABBwkAAgECHkJpZyBpdGVtcyBzaG91bGQgb2NjdXB5IHNsb3QgMAkAZgIFCWNOdW1TbG90cwABBwkAlAoCCQDLAQIJAMsBAgUEaGVhZAkAmgMBCQBkAgUEY3VycgMFCmlzUG9zaXRpdmUFBWNvdW50CQEBLQEFBWNvdW50BQR0YWlsBQlpc0JpZ0l0ZW0BC3Nsb3RzR3JvdXBCBgFnBGJwSW4KaXNQb3NpdGl2ZQdzZWdtZW50B21haW5BdXgFc3RhdHMDCQECIT0CBQFnAgAEBXNsb3RzCQC1CQIFAWcCASwDCQBmAgkAkAMBBQVzbG90cwUITUFYU0xPVFMJAAIBAhJXcm9uZyBzbG90cyBmb3JtYXQEAnMwCQCRAwIFBXNsb3RzAAAEAnMxAwkAZgIJAJADAQUFc2xvdHMAAQkAkQMCBQVzbG90cwABAgADAwkAAAIFAnMwAgAJAAACBQJzMQIABwUEYnBJbgQFdG1wUzADCQECIT0CBQJzMAIACQEIYWRkUHJvZEIHBQJzMAUEYnBJbgUKaXNQb3NpdGl2ZQUHc2VnbWVudAUHbWFpbkF1eAAABQVzdGF0cwkAlAoCBQRicEluBwMJAQIhPQIFAnMxAgADCAUFdG1wUzACXzIJAAIBAh5CaWcgaXRlbSBhbHJlYWR5IG9jY3VwaWVzIHNsb3QICQEIYWRkUHJvZEIHBQJzMQgFBXRtcFMwAl8xBQppc1Bvc2l0aXZlBQdzZWdtZW50BQdtYWluQXV4AAEFBXN0YXRzAl8xCAUFdG1wUzACXzEF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dHJpeAkBDXBhcnNlSW50VmFsdWUBBQNpZHgCAV8FCnJJZHhFZmZlY3QAAAQFc3RhdHMJAQxnZXREdWNrU3RhdHMEBQR0aGlzBQtkdWNrQXNzZXRJZAUKYnVmZkVmZmVjdAYECG5ld1Byb2RCCQEGZHJlc3NCBAUGY3VyckVxBQl0ZW1wUHJvZEIHBQVzdGF0cwkAAAIFCG5ld1Byb2RCBQhuZXdQcm9kQgEZdXBkYXRlUHJvcG9ydGlvbnNJbnRlcm5hbAQIcHJvcExpc3QNdGVycmFpbkNvdW50cw1sYW5kU2l6ZUluZGV4BHNpZ24DCQECIT0CCQCQAwEFCHByb3BMaXN0BQZOVU1SRVMJAAIBAhZXcm9uZyBwcm9wb3J0aW9ucyBkYXRhCgEHdXBkYXRlcgIDYWNjAWkEBnJlc3VsdAkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQhwcm9wTGlzdAUBaQkAaAIJAGgCBQRzaWduCQCRAwIFDXRlcnJhaW5Db3VudHMFAWkFDWxhbmRTaXplSW5kZXgDCQBmAgAABQZyZXN1bHQJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICFlBhbmljISBQaWVjZXMgb2YgdHlwZT0JAKQDAQUBaQIHLCBzaWduPQkApAMBBQRzaWduAhMsIHRlcnJhaW5Db3VudHNbaV09CQCkAwEJAJEDAgUNdGVycmFpbkNvdW50cwUBaQIQLCBsYW5kU2l6ZUluZGV4PQkApAMBBQ1sYW5kU2l6ZUluZGV4CQDNCAIFA2FjYwkApAMBBQZyZXN1bHQKAAIkbAUFSVRFUjYKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBB3VwZGF0ZXICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYBEXVwZGF0ZVByb3BvcnRpb25zAw10ZXJyYWluQ291bnRzDWxhbmRTaXplSW5kZXgEc2lnbgQIcHJvcExpc3QJALUJAgkBC3ZhbHVlT3JFbHNlAgkAoggBCQERa2V5UmVzUHJvcG9ydGlvbnMAAgswXzBfMF8wXzBfMAIBXwkAuQkCCQEZdXBkYXRlUHJvcG9ydGlvbnNJbnRlcm5hbAQFCHByb3BMaXN0BQ10ZXJyYWluQ291bnRzBQ1sYW5kU2l6ZUluZGV4BQRzaWduAgFfAQ1jb3VudFRlcnJhaW5zAQh0ZXJyYWlucwkAzAgCCQBlAgkAkAMBCQC1CQIFCHRlcnJhaW5zAgFBAAEJAMwIAgkAZQIJAJADAQkAtQkCBQh0ZXJyYWlucwIBQgABCQDMCAIJAGUCCQCQAwEJALUJAgUIdGVycmFpbnMCAUMAAQkAzAgCCQBlAgkAkAMBCQC1CQIFCHRlcnJhaW5zAgFEAAEJAMwIAgkAZQIJAJADAQkAtQkCBQh0ZXJyYWlucwIBRQABCQDMCAIJAGUCCQCQAwEJALUJAgUIdGVycmFpbnMCAUYAAQUDbmlsAQZhZGRSZXMFCmN1cnJlbnRSZXMNdGVycmFpbkNvdW50cwlkZWx0YVRpbWUNbGFuZFNpemVJbmRleBdkYWlseUJ5UGllY2VXaXRoQm9udXNlcwoBBWFkZGVyAgNhY2MBaQQJcmVzT2ZUeXBlCQBoAgkAaAIJAGsDBQlkZWx0YVRpbWUFF2RhaWx5QnlQaWVjZVdpdGhCb251c2VzBQlEQVlNSUxMSVMJAJEDAgUNdGVycmFpbkNvdW50cwUBaQUNbGFuZFNpemVJbmRleAkAzQgCBQNhY2MJAKQDAQkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQpjdXJyZW50UmVzBQFpBQlyZXNPZlR5cGUEAXIKAAIkbAUFSVRFUjYKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBBWFkZGVyAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGCQC5CQIFAXICAV8BCXZpcnRDbGFpbQQNdGVycmFpbkNvdW50cwlkZWx0YVRpbWUNbGFuZFNpemVJbmRleBdkYWlseUJ5UGllY2VXaXRoQm9udXNlcwoBBWFkZGVyAgNhY2MBaQQJcmVzT2ZUeXBlCQBoAgkAaAIJAGsDBQlkZWx0YVRpbWUFF2RhaWx5QnlQaWVjZVdpdGhCb251c2VzBQlEQVlNSUxMSVMJAJEDAgUNdGVycmFpbkNvdW50cwUBaQUNbGFuZFNpemVJbmRleAkAlAoCCQDNCAIIBQNhY2MCXzEFCXJlc09mVHlwZQkAZAIIBQNhY2MCXzIFCXJlc09mVHlwZQoAAiRsBQVJVEVSNgoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgUDbmlsAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBBWFkZGVyAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAQ1kaXN0cmlidXRlUmVzBAxjdXJyZW50V2hSZXMOY3VycmVudFBhY2tSZXMKcmVzVG9DbGFpbQt3aFNwYWNlTGVmdAQOcmVzTGlzdFRvQ2xhaW0IBQpyZXNUb0NsYWltAl8xBAxyZXNBbVRvQ2xhaW0IBQpyZXNUb0NsYWltAl8yAwkAAAIFDHJlc0FtVG9DbGFpbQAACQCUCgIJALkJAgUMY3VycmVudFdoUmVzAgFfCQC5CQIFDmN1cnJlbnRQYWNrUmVzAgFfAwkAZwIFC3doU3BhY2VMZWZ0BQxyZXNBbVRvQ2xhaW0KAQhhZGRMaXN0cwIDYWNjAWkJAM0IAgUDYWNjCQCkAwEJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUMY3VycmVudFdoUmVzBQFpCQCRAwIFDnJlc0xpc3RUb0NsYWltBQFpBAFyCgACJGwFBUlURVI2CgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQhhZGRMaXN0cwIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgkAlAoCCQC5CQIFAXICAV8JALkJAgUOY3VycmVudFBhY2tSZXMCAV8KAQxhZGRQYXJ0TGlzdHMCA2FjYwFpBAZ3aFBhcnQJAGsDCQCRAwIFDnJlc0xpc3RUb0NsYWltBQFpBQt3aFNwYWNlTGVmdAUMcmVzQW1Ub0NsYWltCQCUCgIJAM0IAggFA2FjYwJfMQkApAMBCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDGN1cnJlbnRXaFJlcwUBaQUGd2hQYXJ0CQDNCAIIBQNhY2MCXzIJAKQDAQkAZQIJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUOY3VycmVudFBhY2tSZXMFAWkJAJEDAgUOcmVzTGlzdFRvQ2xhaW0FAWkFBndoUGFydAQBcgoAAiRsBQVJVEVSNgoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgUDbmlsBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBDGFkZFBhcnRMaXN0cwIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgkAlAoCCQC5CQIIBQFyAl8xAgFfCQC5CQIIBQFyAl8yAgFfAQNhYnMBAXgDCQDAAgIFAXgJALYCAQAABQF4CQC+AgEFAXgABGZyZXEJAMwIAgkAzAgCAAYJAMwIAgAJCQDMCAIADgkAzAgCAA8JAMwIAgAQBQNuaWwJAMwIAgkAzAgCAAUJAMwIAgAICQDMCAIADQkAzAgCAA4JAMwIAgAPBQNuaWwJAMwIAgkAzAgCAAEJAMwIAgAECQDMCAIACQkAzAgCAAoJAMwIAgAPBQNuaWwJAMwIAgkAzAgCAAEJAMwIAgAGCQDMCAIABwkAzAgCAA8JAMwIAgATBQNuaWwJAMwIAgkAzAgCAAQJAMwIAgAHCQDMCAIACAkAzAgCAA0JAMwIAgASBQNuaWwFA25pbAEHZ2VuQ2hhcgIBbgVmcmVxcwQDcmVtCQCgAwEJALsCAgUBbgUHVFdFTlRZWAQGbGV0dGVyAwkAZgIJAJEDAgUFZnJlcXMAAAUDcmVtAgFBAwkAZgIJAJEDAgUFZnJlcXMAAQUDcmVtAgFCAwkAZgIJAJEDAgUFZnJlcXMAAgUDcmVtAgFDAwkAZgIJAJEDAgUFZnJlcXMAAwUDcmVtAgFEAwkAZgIJAJEDAgUFZnJlcXMABAUDcmVtAgFFAgFGBQZsZXR0ZXIBC2dlblRlcnJhaW5zAgRzZWVkDGNvbnRpbmVudElkeAQBZgkAkQMCBQRmcmVxBQxjb250aW5lbnRJZHgKARB0ZXJyYWluR2VuZXJhdG9yAgNhY2MEZWxlbQkAlAoCCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAggFA2FjYwJfMQkBB2dlbkNoYXICCAUDYWNjAl8yBQFmCQEHZ2VuQ2hhcgIJALoCAggFA2FjYwJfMgUHVFdFTlRZWAUBZgkBB2dlbkNoYXICCQC6AgIIBQNhY2MCXzIFCFRXRU5UWTJYBQFmCQEHZ2VuQ2hhcgIJALoCAggFA2FjYwJfMgUIVFdFTlRZM1gFAWYJAQdnZW5DaGFyAgkAugICCAUDYWNjAl8yBQhUV0VOVFk0WAUBZgkAugICCAUDYWNjAl8yBQhUV0VOVFk1WAQBdAoAAiRsCQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUFA25pbAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgIACQC6AgIFBHNlZWQFBUZJVkVYCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJARB0ZXJyYWluR2VuZXJhdG9yAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNM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bmRJbmRleAppbmZyYUxldmVsBAl2b2xQcmVmaXgJAKwCAgkArAICCQCkAwEFCWxhbmRJbmRleAIBXwkApAMBBQppbmZyYUxldmVsBAd3aFRvdGFsCQEXZ2V0V2FyZWhvdXNlVG90YWxWb2x1bWUBBQl2b2xQcmVmaXgEBXdoU3RyCQELdmFsdWVPckVsc2UCCQCiCAEFBXdoS2V5CQCsAgIFCXZvbFByZWZpeAIbOjBfMF8wXzBfMF8wOjBfMF8wXzBfMF8wOjowBAJ3aAkAvAkCBQV3aFN0cgIBOgQKd2hPY2N1cGllZAkBF2dldFdhcmVob3VzZU9jY3VwaWVkVm9sAQUCd2gEBndoTG9mdAMJAGYCAAUJAJADAQUCd2gJALkJAgkAzAgCAgEwCQDMCAIJAKQDAQUKd2hPY2N1cGllZAkAzAgCCQCkAwEJAGUCBQd3aFRvdGFsBQp3aE9jY3VwaWVkCQDMCAIJAKQDAQUHd2hUb3RhbAUDbmlsAgFfBARsb2Z0CQC1CQIJAJEDAgUCd2gFCXdoSWR4TE9GVAIBXwQId2hMb2NrZWQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQl2b2xMb2NrZWQEA29jYwMJAGYCCQCQAwEFBGxvZnQAAQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFC3ZvbE9jY3VwaWVkBQp3aE9jY3VwaWVkCQC5CQIJAMwIAgkApAMBBQh3aExvY2tlZAkAzAgCCQCkAwEFA29jYwkAzAgCCQCkAwEJAGUCCQBlAgUHd2hUb3RhbAUId2hMb2NrZWQFA29jYwkAzAgCCQCkAwEFB3doVG90YWwFA25pbAIBXwkAzAgCCQCRAwIFAndoBQt3aElkeExldmVscwkAzAgCAwkAAAIJAJADAQkAtQkCCQCRAwIFAndoBQh3aElkeFJlcwIBXwUGTlVNUkVTCQCRAwIFAndoBQh3aElkeFJlcwILMF8wXzBfMF8wXzAJAMwIAgMJAAACCQCQAwEJALUJAgkAkQMCBQJ3aAUId2hJZHhNYXQCAV8FBk5VTVJFUwkAkQMCBQJ3aAUId2hJZHhNYXQCCzBfMF8wXzBfMF8wCQDMCAIJAJEDAgUCd2gFCXdoSWR4UHJvZAkAzAgCBQZ3aExvZnQFA25pbAEVZ2V0V2FyZWhvdXNlU3BhY2VMZWZ0AQljdXJyZW50V2gEC29jY3VwaWVkVm9sCQEXZ2V0V2FyZWhvdXNlT2NjdXBpZWRWb2wBBQljdXJyZW50V2gED2N1cnJXaExvY2tlZFZvbAkBDXBhcnNlSW50VmFsdWUBCQCRAwIJALUJAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4TE9GVAIBXwUJdm9sTG9ja2VkCQBlAgkAZQIJARdnZXRXYXJlaG91c2VUb3RhbFZvbHVtZQEJAJEDAgUJY3VycmVudFdoBQt3aElkeExldmVscwULb2NjdXBpZWRWb2wFD2N1cnJXaExvY2tlZFZvbAEJbW92ZVN0dWZmAwpjYXJnb1BhcnRzCWN1cnJlbnRXaAtjdXJyZW50UGFjawMJAQIhPQIJAJADAQUKY2FyZ29QYXJ0cwADCQACAQI0Y2FyZ29MaXN0U3RyIHNob3VsZCBjb250YWluIGV4YWN0bHkgMiAnOicgc2VwYXJhdG9ycwQIcmVzUGFydHMJALUJAgkAkQMCBQpjYXJnb1BhcnRzAAACAV8ECG1hdFBhcnRzCQC1CQIJAJEDAgUKY2FyZ29QYXJ0cwABAgFfBAlwcm9kUGFydHMDCQAAAgkAkQMCBQpjYXJnb1BhcnRzAAICAAUDbmlsCQC8CQIJAJEDAgUKY2FyZ29QYXJ0cwACAgFfAwkBAiE9AgkAkAMBBQhyZXNQYXJ0cwUGTlVNUkVTCQACAQIgQWxsIDYgcmVzb3VyY2VzIHNob3VsZCBiZSBwYXNzZWQDCQECIT0CCQCQAwEFCG1hdFBhcnRzBQZOVU1SRVMJAAIBAiBBbGwgNiBtYXRlcmlhbHMgc2hvdWxkIGJlIHBhc3NlZAQLd2hTcGFjZUxlZnQJARVnZXRXYXJlaG91c2VTcGFjZUxlZnQBBQljdXJyZW50V2gECWN1cnJXaFJlcwkAtQkCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhSZXMCAV8ECWN1cnJXaE1hdAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhNYXQCAV8ECmN1cnJXaFByb2QDCQAAAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4UHJvZAIABQNuaWwJALwJAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4UHJvZAIBXwQOY3VycmVudFBhY2tSZXMJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMCAV8EDmN1cnJlbnRQYWNrTWF0CQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0AgFfBA9jdXJyZW50UGFja1Byb2QDCQAAAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kAgAFA25pbAkAvAkCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QCAV8KAQNtdlICA2FjYwRpdGVtBAFpCAUDYWNjAl8xBAJhbQkBDXBhcnNlSW50VmFsdWUBBQRpdGVtBAN3aHIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQljdXJyV2hSZXMFAWkEA2JwcgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDmN1cnJlbnRQYWNrUmVzBQFpAwkAAAIFAmFtAAAJAJYKBAkAZAIFAWkAAQkAzQgCCAUDYWNjAl8yCQCRAwIFCWN1cnJXaFJlcwUBaQkAzQgCCAUDYWNjAl8zCQCRAwIFDmN1cnJlbnRQYWNrUmVzBQFpCAUDYWNjAl80AwkAZgIFAmFtAAADCQBmAgUCYW0FA2JwcgkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgIQQXR0ZW1wdCB0byB0YWtlIAUEaXRlbQIZIGZyb20gYmFja3BhY2ssIGJ1dCBvbmx5IAkApAMBBQNicHICCiBhdmFpbGFibGUJAJYKBAkAZAIFAWkAAQkAzQgCCAUDYWNjAl8yCQCkAwEJAGQCBQN3aHIFAmFtCQDNCAIIBQNhY2MCXzMJAKQDAQkAZQIFA2JwcgUCYW0JAGQCCAUDYWNjAl80BQJhbQMJAGYCCQEBLQEFAmFtBQN3aHIJAAIBCQCsAgIJAKwCAgkArAICCQCsAgICEEF0dGVtcHQgdG8gdGFrZSAJAKQDAQkBAS0BBQJhbQIaIGZyb20gd2FyZWhvdXNlLCBidXQgb25seSAJAKQDAQUDd2hyAgogYXZhaWxhYmxlCQCWCgQJAGQCBQFpAAEJAM0IAggFA2FjYwJfMgkApAMBCQBkAgUDd2hyBQJhbQkAzQgCCAUDYWNjAl8zCQCkAwEJAGUCBQNicHIFAmFtCQBkAggFA2FjYwJfNAUCYW0EAXIKAAIkbAUIcmVzUGFydHMKAAIkcwkAkAMBBQIkbAoA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aWQJANgEAQUHYXNzZXRJZAkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQESa2V5TmV4dEZyZWVMYW5kTnVtAAkAZAIFB2ZyZWVOdW0AAQkAzAgCBQVpc3N1ZQkAzAgCCQELU3RyaW5nRW50cnkCCQEQa2V5TGFuZFRvQXNzZXRJZAEFB2xhbmROdW0FAmlkCQDMCAIJAQtTdHJpbmdFbnRyeQIJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQJpZAUIdXNlckFkZHIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEWtleUxhbmROdW1Ub093bmVyAQUHbGFuZE51bQUIdXNlckFkZHIJAMwIAgkBDEludGVnZXJFbnRyeQIJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQUCaWQAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBHmtleUluZnJhTGV2ZWxCeUFzc2V0SWRBbmRPd25lcgIFAmlkBQh1c2VyQWRkcgAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFBmNhbGxlcgABBQdhc3NldElkBQNuaWwJAJQKAgUCaWQFCWNvbnRpbmVudAEMZmxpZ2h0Q29tbW9uAwh1c2VyQWRkcgdtZXNzYWdlA3NpZwMJAQEhAQkAxBMDBQdtZXNzYWdlBQNzaWcFA3B1YgkAAgECGHNpZ25hdHVyZSBkb2VzIG5vdCBtYXRjaAQFcGFydHMJALUJAgkAsAkBBQdtZXNzYWdlAgE7BAlmbGlnaHRMb2cJALUJAgkAkQMCBQVwYXJ0cwAAAgF8BAJocAkAtQkCCQCRAwIFCWZsaWdodExvZwUIZmxIZWFsdGgCAV8EBWN1ckhQCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCaHAAAAQFbmV3SFAJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJocAABBAtuZXdMb2NUeFZlcgkAtQkCCQCRAwIFBXBhcnRzAAECAToEC25ld0xvY2F0aW9uCQCRAwIFC25ld0xvY1R4VmVyAAAEBHRpbWUJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQlmbGlnaHRMb2cFC2ZsVGltZXN0YW1wAwMJAGYCBQR0aW1lCQBkAggFCWxhc3RCbG9jawl0aW1lc3RhbXAFEUZJVkVNSU5VVEVTTUlMTElTBgkAZgIJAGUCCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAURRklWRU1JTlVURVNNSUxMSVMFBHRpbWUJAAIBCQCsAgIJAKwCAgkArAICAhxzaWduYXR1cmUgb3V0ZGF0ZWQ6IGxvZ1RpbWU9CQCkAwEFBHRpbWUCCSwgYmNUaW1lPQkApAMBCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQJdHhGcm9tTXNnCQCRAwIFC25ld0xvY1R4VmVyAAEEBmxhc3RUeAkBC3ZhbHVlT3JFbHNlAgkAoggBCQERa2V5TGFzdFR4SWRCeVVzZXIBBQh1c2VyQWRkcgIAAwkBAiE9AgUGbGFzdFR4BQl0eEZyb21Nc2cJAAIBCQCsAgIJAKwCAgkArAICAh5UeCBpZHMgZG9uJ3QgbWF0Y2ghIEluIHN0YXRlOiAFBmxhc3RUeAIKLCBpbiBtc2c6IAUJdHhGcm9tTXNnBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFCHVzZXJBZGRyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkBAlrZXlIZWFsdGgJAQ1rZXlEdWNrSGVhbHRoAQULZHVja0Fzc2V0SWQEBW1heEhQCQEJbWF4SGVhbHRoAQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEMa2V5RHVja0xldmVsAQULZHVja0Fzc2V0SWQAAAQMb2xkRnJvbVN0YXRlCQELdmFsdWVPckVsc2UCCQCfCAEFCWtleUhlYWx0aAUFbWF4SFADCQECIT0CBQxvbGRGcm9tU3RhdGUFBWN1ckhQCQACAQkArAICCQCsAgIJAKwCAgIKb2xkSGVhbHRoPQkApAMBBQxvbGRGcm9tU3RhdGUCLyBmcm9tIHN0YXRlIGRvZXMgbm90IG1hdGNoIG9uZSBmcm9tIGZsaWdodCBsb2c9CQCkAwEFBWN1ckhQAwkAZwIAAAUFY3VySFAJAAIBAh5Zb3UgY2FuJ3QgZmx5IHdpdGggemVybyBoZWFsdGgDCQEBIQEJARdjYW5XZWFyQ3VycmVudEVxdWlwbWVudAEFC2R1Y2tBc3NldElkCQACAQIWRXF1aXBtZW50IGluY29tcGF0aWJsZQQFYm9udXMDCQBmAgkAkAMBBQlmbGlnaHRMb2cFB2ZsQm9udXMJAJEDAgUJZmxpZ2h0TG9nBQdmbEJvbnVzAgAECHByb2RVc2VkAwkAZgIJAJADAQUJZmxpZ2h0TG9nBQtmbFByb2RzVXNlZAkAkQMCBQlmbGlnaHRMb2cFC2ZsUHJvZHNVc2VkAgAECnNlbnRBbW91bnQDAwkAZgIFBW5ld0hQAAAJAAACBQVib251cwIBJAcJAQVhc0ludAEJAPwHBAUMcmVzdENvbnRyYWN0Ag1zZW5kVXNkdFByaXplCQDMCAIFCHVzZXJBZGRyBQNuaWwFA25pbAAACQCXCgUFBW5ld0hQBQtkdWNrQXNzZXRJZAUKc2VudEFtb3VudAULbmV3TG9jYXRpb24FCHByb2RVc2VkARBleHBlZGl0aW9uQ29tbW9uBAZjYWxsZXIEdHhJZAdtZXNzYWdlA3NpZwQIdXNlckFkZHIJAKUIAQUGY2FsbGVyBAFmCQEMZmxpZ2h0Q29tbW9uAwUIdXNlckFkZHIFB21lc3NhZ2UFA3NpZwQLZHVja0Fzc2V0SWQIBQFmAl8yBAlrZXlIZWFsdGgJAQ1rZXlEdWNrSGVhbHRoAQULZHVja0Fzc2V0SWQEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BAVtTGlzdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAIBXwQGbmV3TWF0CQC5CQIJARFzdWJ0cmFjdE1hdGVyaWFscwMGBQVtTGlzdAUMRVhQTUFURVJJQUxTAgFfBAVlcUtleQkBEGtleUR1Y2tFcXVpcG1lbnQBBQtkdWNrQXNzZXRJZAQJY3VycmVudEVxCQELdmFsdWVPckVsc2UCCQCiCAEFBWVxS2V5AhcsOyxfLDssXyw7LF8sOyxfLDssXyw7LAQNJHQwMzM5MDMzNDAwMAkBEXN1YnRyYWN0RXF1aXBtZW50AgUJY3VycmVudEVxCAUBZgJfNQQFbmV3RXEIBQ0kdDAzMzkwMzM0MDAwAl8xBA9zaG91bGRaZXJvQnVmZnMIBQ0kdDAzMzkwMzM0MDAwAl8yAwkAZwIAAAgFAWYCXzEJAJUKAwkAzAgCCQEMSW50ZWdlckVudHJ5AgUJa2V5SGVhbHRoAAAJAMwIAgkBC1N0cmluZ0VudHJ5AgUFZXFLZXkFBW5ld0VxBQNuaWwCAAAABAFlCQESZXhwZWRpdGlvbkludGVybmFsAgUGY2FsbGVyBQR0eElkBAJpZAgIBQFlAl8yAl8xCQCVCgMJAM4IAggFAWUCXzEDBQ9zaG91bGRaZXJvQnVmZnMJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDGtleUR1Y2tCdWZmcwEFC2R1Y2tBc3NldElkAgkwXzBfMF8wXzAFA25pbAkAzQgCCQDNCAIJAM0IAgkAzQgCBQNuaWwJAQtTdHJpbmdFbnRyeQIJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAkAuQkCCQDMCAIICAUBZQJfMgJfMgkAzAgCAgFMCQDMCAIFAmlkBQNuaWwCAV8JAQxJbnRlZ2VyRW50cnkCBQlrZXlIZWFsdGgIBQFmAl8xCQELU3RyaW5nRW50cnkCBQVlcUtleQUFbmV3RXEJAQtTdHJpbmdFbnRyeQIFBWJwS2V5CQC5CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwkAzAgCBQZuZXdNYXQJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kBQNuaWwCAToFAmlkCAUBZgJfMwEMYXBwbHlCb251c2VzAgtsYW5kQXNzZXRJZAZwaWVjZXMECmluZnJhTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAAABAlhcnRQaWVjZXMJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBIGtleUxhbmRBcnRTdGF0dXNCeVR5cGVBbmRBc3NldElkAgUKQVJUUFJFU0FMRQULbGFuZEFzc2V0SWQAAAQEYWRkNgkAaQIFCmluZnJhTGV2ZWwABgQEYWRkNwkAaQIFCmluZnJhTGV2ZWwABwkAZAIJAGQCBQ9EQUlMWVJFU0JZUElFQ0UJAGsDBQ9EQUlMWVJFU0JZUElFQ0UJAGQCCQBkAgUKaW5mcmFMZXZlbAUEYWRkNgkAaAIAAgUEYWRkNwAFCQBrAwUPREFJTFlSRVNCWVBJRUNFBQlhcnRQaWVjZXMJAGgCBQZwaWVjZXMABQEUY2hlY2tDbGFpbUNvbmRpdGlvbnMDBGFkZHIJY2xhaW1Nb2RlDWxhbmRBc3NldElkSW4EDSR0MDM1MjIwMzU3NTkDCQAAAgUJY2xhaW1Nb2RlBQtjbGFpbU1vZGVXaAkAlAoCBQ1sYW5kQXNzZXRJZEluCQELdmFsdWVPckVsc2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFBGFkZHICAAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkBAtjdXJMb2NhdGlvbgkBC3ZhbHVlT3JFbHNlAgkAoggBCQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQFD0RFRkFVTFRMT0NBVElPTgQDbG9jCQC1CQIJAQV2YWx1ZQEFC2N1ckxvY2F0aW9uAgFfAwkBAiE9AgkAkQMCBQNsb2MFCmxvY0lkeFR5cGUCAUwJAAIBCQCsAgIJAKwCAgIWRHVjayBsb2NhdGlvbiB0eXBlIGlzIAkAkQMCBQNsb2MFCmxvY0lkeFR5cGUCESwgYnV0IHNob3VsZCBiZSBMCQCUCgIJAJEDAgUDbG9jBQhsb2NJZHhJZAULZHVja0Fzc2V0SWQEC2xhbmRBc3NldElkCAUNJHQwMzUyMjAzNTc1OQJfMQQGZHVja0lkCAUNJHQwMzUyMjAzNTc1OQJfMgQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQtsYW5kQXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAQJc2F2ZWRUaW1lCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ8IAQUHdGltZUtleQkArAICCQCsAgICBUxhbmQgCAUFYXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQEBW93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFC2xhbmRBc3NldElkCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDCBpcyBvcnBoYW5lZAMJAQIhPQIFBW93bmVyBQRhZGRyCQACAQkArAICBQpMQU5EUFJFRklYAg0gaXMgbm90IHlvdXJzBAFkCQC1CQIIBQVhc3NldAtkZXNjcmlwdGlvbgIBXwkAlgoEBQZkdWNrSWQFC2xhbmRBc3NldElkBQFkBQlzYXZlZFRpbWUBEGNsYWltUmVzSW50ZXJuYWwEBGFkZHIGYW1vdW50CWNsYWltTW9kZQ1sYW5kQXNzZXRJZEluAwkAZgIAAAUGYW1vdW50CQACAQIPTmVnYXRpdmUgYW1vdW50BAFjCQEUY2hlY2tDbGFpbUNvbmRpdGlvbnMDBQRhZGRyBQljbGFpbU1vZGUFDWxhbmRBc3NldElkSW4ECGxhbmRTaXplCQCRAwIIBQFjAl8zBQtyZWNMYW5kU2l6ZQQNdGVycmFpbkNvdW50cwkBDWNvdW50VGVycmFpbnMBCQCRAwIIBQFjAl8zBQtyZWNUZXJyYWlucwQJZGVsdGFUaW1lCQBlAggFCWxhc3RCbG9jawl0aW1lc3RhbXAIBQFjAl80AwkAZgIAAAUJZGVsdGFUaW1lCQACAQkArAICCQCsAgIJAKwCAgImU2F2ZWQgdGltZXN0YW1wIGlzIGluIGZ1dHVyZSwgc2F2ZWQgPSAJAKQDAQgFAWMCXzQCDCwgY3VycmVudCA9IAkApAMBCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQGcGllY2VzCQEPbnVtUGllY2VzQnlTaXplAQUIbGFuZFNpemUEFmRhaWx5UHJvZHVjdGlvbkJ5UGllY2UJAQxhcHBseUJvbnVzZXMCCAUBYwJfMgUGcGllY2VzBAhhdmFpbFJlcwkAawMFCWRlbHRhVGltZQkAaAIFFmRhaWx5UHJvZHVjdGlvbkJ5UGllY2UFBnBpZWNlcwUJREFZTUlMTElTAwkAZgIFBmFtb3VudAUIYXZhaWxSZXMJAAIBCQCsAgIJAKwCAgkArAICAiJOb3QgZW5vdWdoIHJlc291cmNlcywgYXZhaWxhYmxlID0gCQCkAwEFCGF2YWlsUmVzAg4sIHJlcXVlc3RlZCA9IAkApAMBBQZhbW91bnQEDG5ld0RlbHRhVGltZQkAawMJAGUCBQhhdmFpbFJlcwUGYW1vdW50BQlEQVlNSUxMSVMJAGgCBRZkYWlseVByb2R1Y3Rpb25CeVBpZWNlBQZwaWVjZXMEDG5ld1RpbWVzdGFtcAkAZQIIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQxuZXdEZWx0YVRpbWUECWxhbmRJbmRleAkAaQIFBnBpZWNlcwUFU1NJWkUECnJlc1RvQ2xhaW0JAQl2aXJ0Q2xhaW0EBQ10ZXJyYWluQ291bnRzCQBlAgUJZGVsdGFUaW1lBQxuZXdEZWx0YVRpbWUFCWxhbmRJbmRleAUWZGFpbHlQcm9kdWN0aW9uQnlQaWVjZQQFd2hLZXkJARJrZXlXYXJlaG91c2VCeUxhbmQBCAUBYwJfMgQKaW5mcmFMZXZlbAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEIBQFjAl8yAAAECWN1cnJlbnRXaAkBDGdldFdhcmVob3VzZQMFBXdoS2V5BQlsYW5kSW5kZXgFCmluZnJhTGV2ZWwEBGxvZnQJALUJAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4TE9GVAIBXwQLd2hTcGFjZUxlZnQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQd2b2xGcmVlAwMJAAACBQljbGFpbU1vZGUFC2NsYWltTW9kZVdoCQBmAgUGYW1vdW50BQt3aFNwYWNlTGVmdAcJAAIBCQCsAgIJAKwCAgIFT25seSAJAKQDAQULd2hTcGFjZUxlZnQCGCBzcGFjZSBsZWZ0IGluIHdhcmVob3VzZQQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEIBQFjAl8xBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkEDmN1cnJlbnRQYWNrUmVzCQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzAgFfBAxjdXJyZW50V2hSZXMJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4UmVzAgFfBA0kdDAzODEzMzM5MDA0AwkAAAIFCWNsYWltTW9kZQULY2xhaW1Nb2RlV2gJAJYKBAkBBmFkZFJlcwUFDGN1cnJlbnRXaFJlcwUNdGVycmFpbkNvdW50cwkAZQIFCWRlbHRhVGltZQUMbmV3RGVsdGFUaW1lBQlsYW5kSW5kZXgFFmRhaWx5UHJvZHVjdGlvbkJ5UGllY2UJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFC3ZvbE9jY3VwaWVkCAUKcmVzVG9DbGFpbQJfMgkAZQIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQd2b2xGcmVlCAUKcmVzVG9DbGFpbQJfMgMJAAACBQljbGFpbU1vZGUFDWNsYWltTW9kZUR1Y2sJAJYKBAkAkQMCBQljdXJyZW50V2gFCHdoSWR4UmVzCQEGYWRkUmVzBQUOY3VycmVudFBhY2tSZXMFDXRlcnJhaW5Db3VudHMJAGUCBQlkZWx0YVRpbWUFDG5ld0RlbHRhVGltZQUJbGFuZEluZGV4BRZkYWlseVByb2R1Y3Rpb25CeVBpZWNlCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAULdm9sT2NjdXBpZWQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQd2b2xGcmVlBAVkaXN0cgkBDWRpc3RyaWJ1dGVSZXMEBQxjdXJyZW50V2hSZXMFDmN1cnJlbnRQYWNrUmVzBQpyZXNUb0NsYWltBQt3aFNwYWNlTGVmdAQEd2hBbQkAlwMBCQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQd2b2xGcmVlCQDMCAIIBQpyZXNUb0NsYWltAl8yBQNuaWwJAJYKBAgFBWRpc3RyAl8xCAUFZGlzdHICXzIJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAULdm9sT2NjdXBpZWQFBHdoQW0JAGUCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAUHdm9sRnJlZQUEd2hBbQQFd2hSZXMIBQ0kdDAzODEzMzM5MDA0Al8xBAVicFJlcwgFDSR0MDM4MTMzMzkwMDQCXzIEBWxvZnRPCAUNJHQwMzgxMzMzOTAwNAJfMwQFbG9mdEYIBQ0kdDAzODEzMzM5MDA0Al80CQCXCgUJAMwIAgkBDEludGVnZXJFbnRyeQIJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQgFAWMCXzIFDG5ld1RpbWVzdGFtcAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDBQpMQU5EUFJFRklYCAUBYwJfMgUEYWRkcgUMbmV3VGltZXN0YW1wBQNuaWwFBWJwS2V5CQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgUFYnBSZXMJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kBQNuaWwFBXdoS2V5CQDMCAIJAJEDAgUJY3VycmVudFdoBQt3aElkeExldmVscwkAzAgCBQV3aFJlcwkAzAgCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhNYXQJAMwIAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4UHJvZAkAzAgCCQC5CQIJAMwIAgkAkQMCBQRsb2Z0BQl2b2xMb2NrZWQJAMwIAgkApAMBBQVsb2Z0TwkAzAgCCQCkAwEFBWxvZnRGCQDMCAIJAJEDAgUEbG9mdAUIdm9sVG90YWwFA25pbAIBXwUDbmlsAQhjbGFpbUFsbAQEYWRkcgtsYW5kQXNzZXRJZAZwaWVjZXMJY2xhaW1Nb2RlBAd0aW1lS2V5CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkBAlzYXZlZFRpbWUJAQV2YWx1ZQEJAJ8IAQUHdGltZUtleQQIYXZhaWxSZXMJAGgCCQBrAwkAZQIIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQlzYXZlZFRpbWUJAQxhcHBseUJvbnVzZXMCBQtsYW5kQXNzZXRJZAUGcGllY2VzBQlEQVlNSUxMSVMFBnBpZWNlcwkBEGNsYWltUmVzSW50ZXJuYWwEBQRhZGRyBQhhdmFpbFJlcwUJY2xhaW1Nb2RlBQtsYW5kQXNzZXRJZAENdXBJbmZyYUNvbW1vbgQMc2hvdWxkVXNlTWF0BmNhbGxlcg1wYXltZW50QW1vdW50C2xhbmRBc3NldElkBARhZGRyCQClCAEFBmNhbGxlcgQBYwkBFGNoZWNrQ2xhaW1Db25kaXRpb25zAwUEYWRkcgUTY2xhaW1Nb2RlV2hUaGVuRHVjawULbGFuZEFzc2V0SWQEBnBpZWNlcwkBD251bVBpZWNlc0J5U2l6ZQEJAJEDAggFAWMCXzMFC3JlY0xhbmRTaXplBAhpbmZyYUtleQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBCAUBYwJfMgQIY3VyTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUIaW5mcmFLZXkAAAMDCQEBIQEFGEtTX0FMTE9XX0JJR19JTkZSQV9NRVJHRQkAZwIFCGN1ckxldmVsAAMHCQACAQImQ3VycmVudGx5IG1heCBpbmZyYXN0cnVjdHVyZSBsZXZlbCA9IDMECG1heEluZnJhCQBkAgkAaQIJAQRzcXJ0BAUGcGllY2VzAAAAAAUERE9XTgAFAAIECG5ld0xldmVsCQBkAgUIY3VyTGV2ZWwAAQMDBRhLU19BTExPV19CSUdfSU5GUkFfTUVSR0UJAGYCBQhuZXdMZXZlbAUIbWF4SW5mcmEHCQACAQkArAICAiVDdXJyZW50bHkgbWF4IGluZnJhc3RydWN0dXJlIGxldmVsID0gCQCkAwEFCG1heEluZnJhBARjb3N0CQBrAwUVSW5mcmFVcGdyYWRlQ29zdFNVc2R0CQBoAgUGcGllY2VzBQhuZXdMZXZlbAUFU1NJWkUDAwkBASEBBQxzaG91bGRVc2VNYXQJAQIhPQIFDXBheW1lbnRBbW91bnQFBGNvc3QHCQACAQkArAICAhtQYXltZW50IGF0dGFjaGVkIHNob3VsZCBiZSAJAKQDAQUEY29zdAQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEIBQFjAl8xBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkEBW1MaXN0CQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0AgFfBAdtYXRVc2VkCQBrAwURSW5mcmFVcGdyYWRlQ29zdFMJAGgCBQZwaWVjZXMFCG5ld0xldmVsBQVTU0laRQQGbmV3TWF0CQC5CQIJARFzdWJ0cmFjdE1hdGVyaWFscwMFDHNob3VsZFVzZU1hdAUFbUxpc3QFB21hdFVzZWQCAV8EC2NsYWltUmVzdWx0CQEIY2xhaW1BbGwEBQRhZGRyCAUBYwJfMgUGcGllY2VzBRNjbGFpbU1vZGVXaFRoZW5EdWNrBAZ3aERhdGEIBQtjbGFpbVJlc3VsdAJfNQQGb2xkVm9sCQEXZ2V0V2FyZWhvdXNlVG90YWxWb2x1bWUBCQCRAwIFBndoRGF0YQULd2hJZHhMZXZlbHMECm5ld1ZvbERhdGEJALkJAgkAzAgCCQCRAwIJALUJAgkAkQMCBQZ3aERhdGEFC3doSWR4TGV2ZWxzAgFfAAAJAMwIAgkApAMBBQhuZXdMZXZlbAUDbmlsAgFfBAZuZXdWb2wJARdnZXRXYXJlaG91c2VUb3RhbFZvbHVtZQEFCm5ld1ZvbERhdGEEBGxvZnQJALUJAgkAkQMCBQZ3aERhdGEFCXdoSWR4TE9GVAIBXwQKbmV3TG9mdFN0cgkAuQkCCQDMCAIJAJEDAgUEbG9mdAUJdm9sTG9ja2VkCQDMCAIJAJEDAgUEbG9mdAULdm9sT2NjdXBpZWQJAMwIAgkApAMBCQBlAgkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQd2b2xGcmVlBQZuZXdWb2wFBm9sZFZvbAkAzAgCCQCkAwEFBm5ld1ZvbAUDbmlsAgFfCQCVCgMJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUIaW5mcmFLZXkFCG5ld0xldmVsCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEea2V5SW5mcmFMZXZlbEJ5QXNzZXRJZEFuZE93bmVyAggFAWMCXzIFBGFkZHIFCG5ld0xldmVsCQDMCAIJAQtTdHJpbmdFbnRyeQIFBWJwS2V5CQC5CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCQCRAwIIBQtjbGFpbVJlc3VsdAJfMwUIYnBJZHhSZXMJAMwIAgUGbmV3TWF0CQDMCAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAUDbmlsAgE6CQDMCAIJAQtTdHJpbmdFbnRyeQIIBQtjbGFpbVJlc3VsdAJfNAkAuQkCCQDMCAIFCm5ld1ZvbERhdGEJAMwIAgkAkQMCBQZ3aERhdGEFCHdoSWR4UmVzCQDMCAIJAJEDAgUGd2hEYXRhBQh3aElkeE1hdAkAzAgCCQCRAwIFBndoRGF0YQUJd2hJZHhQcm9kCQDMCAIFCm5ld0xvZnRTdHIFA25pbAIBOgUDbmlsCAULY2xhaW1SZXN1bHQCXzEFCG5ld0xldmVsBQdtYXRVc2VkARd1cGRhdGVEdWNrU3RhdHNJbnRlcm5hbAILZHVja0Fzc2V0SWQHZGVsdGFYUAQGbHZsS2V5CQEMa2V5RHVja0xldmVsAQULZHVja0Fzc2V0SWQEBXhwS2V5CQEJa2V5RHVja1hQAQULZHVja0Fzc2V0SWQEAnhwCQELdmFsdWVPckVsc2UCCQCaCAIFD3N0YWtpbmdDb250cmFjdAUFeHBLZXkAAAQFbmV3WFAJAGQCBQJ4cAUHZGVsdGFYUAQJbHZsUG9pbnRzCQEHbGV2ZWxVcAIJAQt2YWx1ZU9yRWxzZQIJAJoIAgUPc3Rha2luZ0NvbnRyYWN0BQZsdmxLZXkAAAUFbmV3WFAECWtleVBvaW50cwkBEWtleUR1Y2tGcmVlUG9pbnRzAQULZHVja0Fzc2V0SWQJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUGbHZsS2V5CQCRAwIFCWx2bFBvaW50cwAACQDMCAIJAQxJbnRlZ2VyRW50cnkCBQV4cEtleQUFbmV3WFAJAMwIAgkBDEludGVnZXJFbnRyeQIFCWtleVBvaW50cwkAZAIJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJa2V5UG9pbnRzAAAJAJEDAgUJbHZsUG9pbnRzAAEFA25pbAUFbmV3WFABFnVwZGF0ZUFjY1N0YXRzSW50ZXJuYWwCBGFkZHIHZGVsdGFYUAQGbHZsS2V5CQEMa2V5VXNlckxldmVsAQUEYWRkcgQFeHBLZXkJAQlrZXlVc2VyWFABBQRhZGRyBAJ4cAkBC3ZhbHVlT3JFbHNlAgkAmggCBQ9zdGFraW5nQ29udHJhY3QFBXhwS2V5AAAEBW5ld1hQCQBkAgUCeHAFB2RlbHRhWFAECWx2bFBvaW50cwkBB2xldmVsVXACCQELdmFsdWVPckVsc2UCCQCaCAIFD3N0YWtpbmdDb250cmFjdAUGbHZsS2V5AAAFBW5ld1hQBAlrZXlQb2ludHMJARFrZXlVc2VyRnJlZVBvaW50cwEFBGFkZHIJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUGbHZsS2V5CQCRAwIFCWx2bFBvaW50cwAACQDMCAIJAQxJbnRlZ2VyRW50cnkCBQV4cEtleQUFbmV3WFAJAMwIAgkBDEludGVnZXJFbnRyeQIFCWtleVBvaW50cwkAZAIJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJa2V5UG9pbnRzAAAJAJEDAgUJbHZsUG9pbnRzAAEFA25pbAUFbmV3WFABEmFjdGl2YXRlT25ib2FyZEFydAEEYWRkcgQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkBAhyZWZCeUtleQkBD2tleUFkZHJlc3NSZWZCeQEFBGFkZHIEBXJlZkJ5CQCiCAEFCHJlZkJ5S2V5AwkBASEBCQEJaXNEZWZpbmVkAQUFcmVmQnkJAAIBAilZb3UgYXJlIG5vdCBlbGlnaWJsZSBmb3IgT05CT0FSRCBhcnRpZmFjdAQGYXJ0S2V5CQEca2V5T25ib2FyZEFydER1Y2tBY3RpdmF0ZWRCeQEFBGFkZHIEB2FydER1Y2sJAKIIAQUGYXJ0S2V5AwkBCWlzRGVmaW5lZAEFB2FydER1Y2sJAAIBCQCsAgICL1lvdSBhbHJlYWR5IHVzZWQgeW91ciBPTkJPQVJEIGFydGlmYWN0IG9uIGR1Y2sgCQEFdmFsdWUBBQdhcnREdWNrBBBkdWNrQWN0aXZhdG9yS2V5CQEca2V5T25ib2FyZEFydEFjdGl2YXRlZE9uRHVjawEFC2R1Y2tBc3NldElkBA1kdWNrQWN0aXZhdG9yCQCiCAEFEGR1Y2tBY3RpdmF0b3JLZXkDCQEJaXNEZWZpbmVkAQUNZHVja0FjdGl2YXRvcgkAAgEJAKwCAgkArAICCQCsAgICCVRoZSBkdWNrIAULZHVja0Fzc2V0SWQCNCBhbHJlYWR5IGdvdCBwb2ludHMgZnJvbSBPTkJPQVJEIGFydGlmYWN0IGZyb20gdXNlciAJAQV2YWx1ZQEFDWR1Y2tBY3RpdmF0b3IJAM4IAgkAzAgCCQELU3RyaW5nRW50cnkCBQZhcnRLZXkFC2R1Y2tBc3NldElkCQDMCAIJAQtTdHJpbmdFbnRyeQIFEGR1Y2tBY3RpdmF0b3JLZXkFBGFkZHIFA25pbAgJARd1cGRhdGVEdWNrU3RhdHNJbnRlcm5hbAIFC2R1Y2tBc3NldElkBQl4cE9uYm9hcmQCXzEBEmFjdGl2YXRlUHJlc2FsZUFydAIEYWRkcg1sYW5kQXNzZXRJZEluBAFjCQEUY2hlY2tDbGFpbUNvbmRpdGlvbnMDBQRhZGRyBRNjbGFpbU1vZGVXaFRoZW5EdWNrBQ1sYW5kQXNzZXRJZEluBAtsYW5kQXNzZXRJZAgFAWMCXzIEBnBpZWNlcwkBD251bVBpZWNlc0J5U2l6ZQEJAJEDAggFAWMCXzMFC3JlY0xhbmRTaXplBA1hY3RpdmF0aW9uS2V5CQEga2V5TGFuZEFydFN0YXR1c0J5VHlwZUFuZEFzc2V0SWQCBQpBUlRQUkVTQUxFBQtsYW5kQXNzZXRJZAMJAGYCCQELdmFsdWVPckVsc2UCCQCfCAEFDWFjdGl2YXRpb25LZXkAAAAACQACAQIlUHJlc2FsZSBhcnRpZmFjdCBpcyBhbHJlYWR5IGFjdGl2YXRlZAMJAGYCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAggFAWMCXzMFCnJlY0xhbmROdW0FD1BSRVNBTEVOVU1MQU5EUwkAAgEJAKwCAgkArAICCQCsAgIFCkxBTkRQUkVGSVgCASAFC2xhbmRBc3NldElkAiUgaXMgbm90IGVsaWdpYmxlIGZvciBwcmVzYWxlIGFydGlmYWN0BAtjbGFpbVJlc3VsdAkBCGNsYWltQWxsBAUEYWRkcgULbGFuZEFzc2V0SWQFBnBpZWNlcwUTY2xhaW1Nb2RlV2hUaGVuRHVjawkAzQgCCQDNCAIJAM0IAggFC2NsYWltUmVzdWx0Al8xCQEMSW50ZWdlckVudHJ5AgUNYWN0aXZhdGlvbktleQUGcGllY2VzCQELU3RyaW5nRW50cnkCCAULY2xhaW1SZXN1bHQCXzIJALkJAggFC2NsYWltUmVzdWx0Al8zAgE6CQELU3RyaW5nRW50cnkCCAULY2xhaW1SZXN1bHQCXzQJALkJAggFC2NsYWltUmVzdWx0Al81AgE6AQ9jaGVja1RvdXJuYW1lbnQBC2R1Y2tBc3NldElkBAZsYXN0SWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUSdG91cm5hbWVudENvbnRyYWN0BQ1sYXN0VG91cklkS2V5AAAEC2N1ckxvY2F0aW9uCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAKIIAQkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkBQ9ERUZBVUxUTE9DQVRJT04CAV8EA25vdwgFCWxhc3RCbG9jawl0aW1lc3RhbXAEBXREYXRhCQELZ2V0VG91ckRhdGECBRJ0b3VybmFtZW50Q29udHJhY3QFBmxhc3RJZAQGc3RhdGljCQCRAwIFBXREYXRhBQlpZHhTdGF0aWMEB2R5bmFtaWMJAJEDAgUFdERhdGEFCmlkeER5bmFtaWMDCQECIT0CCQCRAwIFC2N1ckxvY2F0aW9uBQpsb2NJZHhUeXBlAgFUBwQGcmVzdWx0AwMDCQAAAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFC2N1ckxvY2F0aW9uBQ9sb2NJZHhDb250aW5lbnQFBmxhc3RJZAkAAAIJAJEDAgUHZHluYW1pYwUOdER5bmFtaWNTdGF0dXMCCklOUFJPR1JFU1MHCQBmAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBnN0YXRpYwUKdFN0YXRpY0VuZAUDbm93BwkAAgECKllvdXIgZHVjayBpcyB0YWtpbmcgcGFydCBpbiB0aGUgdG91cm5hbWVudAkA/AcEBQR0aGlzAhZleGl0VG91cm5hbWVudEludGVybmFsCQDMCAIFC2R1Y2tBc3NldElkBQNuaWwFA25pbAMJAAACBQZyZXN1bHQFBnJlc3VsdAcJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BDW1lcmdlSW50ZXJuYWwGC25ld0xhbmRTaXplCG5ld0xldmVsB2Zvcm11bGEEYWRkcgxsYW5kQXNzZXRJZHMHbmVlZE1hdAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkAwkBD2NoZWNrVG91cm5hbWVudAEFC2R1Y2tBc3NldElkCQACAQIdbWVyZ2VJbnRlcm5hbF9jaGVja1RvdXJuYW1lbnQKAQpjaGVja01lcmdlAgNhY2MLbGFuZEFzc2V0SWQEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQULbGFuZEFzc2V0SWQEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQULbGFuZEFzc2V0SWQECXNhdmVkVGltZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCfCAEFB3RpbWVLZXkJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQEBW93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFC2xhbmRBc3NldElkCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDCBpcyBvcnBoYW5lZAMJAQIhPQIFBW93bmVyBQRhZGRyCQACAQkArAICBQpMQU5EUFJFRklYAg0gaXMgbm90IHlvdXJzBAFkCQC1CQIIBQVhc3NldAtkZXNjcmlwdGlvbgIBXwQJY29udGluZW50CQCRAwIFAWQFDHJlY0NvbnRpbmVudAMDCQECIT0CCAUDYWNjAl8zAgAJAQIhPQIIBQNhY2MCXzMFCWNvbnRpbmVudAcJAAIBAi5MYW5kcyBzaG91bGQgYmUgb24gdGhlIHNhbWUgY29udGluZW50IHRvIG1lcmdlBAhsYW5kU2l6ZQkAkQMCBQFkBQtyZWNMYW5kU2l6ZQQHc2l6ZXNJbggFA2FjYwJfMQQBaQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCzCQIFB3NpemVzSW4FCGxhbmRTaXplAidZb3UgaGF2ZW4ndCBwYXNzZWQgYWxsIHRoZSBsYW5kcyBuZWVkZWQECHNpemVzT3V0CQCsAgIJAK8CAgUHc2l6ZXNJbgUBaQkAsAICBQdzaXplc0luCQBkAgUBaQABBAZwaWVjZXMJAQ9udW1QaWVjZXNCeVNpemUBBQhsYW5kU2l6ZQQEYXJ0cwkAZAIIBQNhY2MCXzIJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBIGtleUxhbmRBcnRTdGF0dXNCeVR5cGVBbmRBc3NldElkAgUKQVJUUFJFU0FMRQULbGFuZEFzc2V0SWQAAAQKaW5mcmFMZXZlbAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEFC2xhbmRBc3NldElkAAAECHJlcUxldmVsBAckbWF0Y2gwBQhsYW5kU2l6ZQMJAAACAgFTBQckbWF0Y2gwAAMDCQAAAgIBTQUHJG1hdGNoMAAEAwkAAAICAUwFByRtYXRjaDAABQMJAAACAgJYTAUHJG1hdGNoMAAGCQACAQIaT25seSBTLCBNLCBMLCBYTCBjYW4gbWVyZ2UDCQECIT0CBQppbmZyYUxldmVsBQhyZXFMZXZlbAkAAgECIkFsbCBsYW5kcyBzaG91bGQgYmUgbWF4ZWQgdG8gbWVyZ2UEB2xhbmROdW0JAJEDAgUBZAUKcmVjTGFuZE51bQQNdGVycmFpbkNvdW50cwkBDWNvdW50VGVycmFpbnMBCQCRAwIFAWQFC3JlY1RlcnJhaW5zBAlkZWx0YVRpbWUJAGUCCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUJc2F2ZWRUaW1lAwkAZgIAAAUJZGVsdGFUaW1lCQACAQkArAICCQCsAgIJAKwCAgImU2F2ZWQgdGltZXN0YW1wIGlzIGluIGZ1dHVyZSwgc2F2ZWQgPSAJAKQDAQUJc2F2ZWRUaW1lAgwsIGN1cnJlbnQgPSAJAKQDAQgFCWxhc3RCbG9jawl0aW1lc3RhbXAEFmRhaWx5UHJvZHVjdGlvbkJ5UGllY2UJAQxhcHBseUJvbnVzZXMCBQtsYW5kQXNzZXRJZAUGcGllY2VzBAlsYW5kSW5kZXgJAGkCBQZwaWVjZXMFBVNTSVpFBAVicFJlcwkBBmFkZFJlcwUJALUJAggFA2FjYwJfNAIBXwUNdGVycmFpbkNvdW50cwUJZGVsdGFUaW1lBQlsYW5kSW5kZXgFFmRhaWx5UHJvZHVjdGlvbkJ5UGllY2UEBXByb3BzCQEZdXBkYXRlUHJvcG9ydGlvbnNJbnRlcm5hbAQIBQNhY2MCXzYFDXRlcnJhaW5Db3VudHMFCWxhbmRJbmRleAD///////////8BBAZjUHJvcHMJARl1cGRhdGVQcm9wb3J0aW9uc0ludGVybmFsBAgFA2FjYwNfMTAFDXRlcnJhaW5Db3VudHMFCWxhbmRJbmRleAD///////////8BBAtzdW1UZXJyYWlucwkBGXVwZGF0ZVByb3BvcnRpb25zSW50ZXJuYWwECAUDYWNjAl85BQ10ZXJyYWluQ291bnRzBQlsYW5kSW5kZXgAAQQFbGFuZHMIBQNhY2MCXzcEA2lkeAkAzwgCBQVsYW5kcwULbGFuZEFzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBBQNpZHgJAAIBCQCsAgICIFlvdXIgc3Rha2VkIGxhbmRzIGRvbid0IGNvbnRhaW4gBQtsYW5kQXNzZXRJZAQJY3VzdG9tS2V5CQEaa2V5TGFuZEFzc2V0SWRUb0N1c3RvbU5hbWUBBQtsYW5kQXNzZXRJZAQKY3VzdG9tTmFtZQkBC3ZhbHVlT3JFbHNlAgkAoggBBQljdXN0b21LZXkCAAkAnAoKBQhzaXplc091dAUEYXJ0cwUJY29udGluZW50BQVicFJlcwkAzggCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAggFA2FjYwJfNQkBC0RlbGV0ZUVudHJ5AQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAkBC0RlbGV0ZUVudHJ5AQkBImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDBQpMQU5EUFJFRklYBQtsYW5kQXNzZXRJZAUEYWRkcgkBC0RlbGV0ZUVudHJ5AQkBEGtleUxhbmRUb0Fzc2V0SWQBBQdsYW5kTnVtCQELRGVsZXRlRW50cnkBCQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQULbGFuZEFzc2V0SWQJAQtEZWxldGVFbnRyeQEJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQULbGFuZEFzc2V0SWQJAQtEZWxldGVFbnRyeQEJAR5rZXlJbmZyYUxldmVsQnlBc3NldElkQW5kT3duZXICBQtsYW5kQXNzZXRJZAUEYWRkcgkBC0RlbGV0ZUVudHJ5AQkBIGtleUxhbmRBcnRTdGF0dXNCeVR5cGVBbmRBc3NldElkAgUKQVJUUFJFU0FMRQULbGFuZEFzc2V0SWQJAQtEZWxldGVFbnRyeQEJARFrZXlMYW5kTnVtVG9Pd25lcgEFB2xhbmROdW0JAQtEZWxldGVFbnRyeQEJARJrZXlXYXJlaG91c2VCeUxhbmQBBQtsYW5kQXNzZXRJZAkBC0RlbGV0ZUVudHJ5AQUJY3VzdG9tS2V5CQEEQnVybgIJANkEAQULbGFuZEFzc2V0SWQAAQMJAQIhPQIFCmN1c3RvbU5hbWUCAAkAzAgCCQELRGVsZXRlRW50cnkBCQEaa2V5TGFuZEN1c3RvbU5hbWVUb0Fzc2V0SWQBBQpjdXN0b21OYW1lBQNuaWwFA25pbAUFcHJvcHMJANEIAgUFbGFuZHMJAQV2YWx1ZQEFA2lkeAkAZAIIBQNhY2MCXzgFBnBpZWNlcwULc3VtVGVycmFpbnMFBmNQcm9wcwQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkECHByb3BMaXN0CQC1CQIJAQt2YWx1ZU9yRWxzZQIJAKIIAQkBEWtleVJlc1Byb3BvcnRpb25zAAILMF8wXzBfMF8wXzACAV8ECGxhbmRzS2V5CQEVa2V5U3Rha2VkTGFuZHNCeU93bmVyAQUEYWRkcgQIbGFuZHNTdHIJAKIIAQUIbGFuZHNLZXkEB2xhbmRzSW4DCQEJaXNEZWZpbmVkAQUIbGFuZHNTdHIJAL0JAgkBBXZhbHVlAQUIbGFuZHNTdHICAV8FA25pbAQFY29udDAJAJEDAgkAtQkCCAkBBXZhbHVlAQkA7AcBCQDZBAEJAJEDAgUMbGFuZEFzc2V0SWRzAAALZGVzY3JpcHRpb24CAV8FDHJlY0NvbnRpbmVudAQJY29udFByb3BzCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAKIIAQkBFmtleVJlc1R5cGVzQnlDb250aW5lbnQBBQVjb250MAILMF8wXzBfMF8wXzACAV8EAXIKAAIkbAUMbGFuZEFzc2V0SWRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAnAoKBQdmb3JtdWxhAAACAAkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMFA25pbAUIcHJvcExpc3QFB2xhbmRzSW4AAAkAtQkCAgswXzBfMF8wXzBfMAIBXwUJY29udFByb3BzCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQpjaGVja01lcmdlAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA1CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQQJY29udGluZW50CAUBcgJfMwQMY29udGluZW50SWR4CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAM8IAgUKY29udGluZW50cwUJY29udGluZW50CQCsAgICE1Vua25vd24gY29udGluZW50OiAFCWNvbnRpbmVudAQIdGVycmFpbnMJARNnZW5UZXJyYWluc0Zvck1lcmdlAggFAXICXzkJAGkCCQEPbnVtUGllY2VzQnlTaXplAQULbmV3TGFuZFNpemUFBVNTSVpFBAdmcmVlTnVtCQELdmFsdWVPckVsc2UCCQCfCAEJARJrZXlOZXh0RnJlZUxhbmROdW0ACQBkAgUPUFJFU0FMRU5VTUxBTkRTAAEECm5ld0xhbmROdW0JAKQDAQUHZnJlZU51bQQFaXNzdWUJAMIIBQkBB25mdE5hbWUCBQpuZXdMYW5kTnVtBQtuZXdMYW5kU2l6ZQkAuQkCCQDMCAIFCm5ld0xhbmROdW0JAMwIAgULbmV3TGFuZFNpemUJAMwIAgUIdGVycmFpbnMJAMwIAgUJY29udGluZW50BQNuaWwCAV8AAQAABwQHYXNzZXRJZAkAuAgBBQVpc3N1ZQQObmV3TGFuZEFzc2V0SWQJANgEAQUHYXNzZXRJZAQGbmV3TWF0CQC5CQIJARFzdWJ0cmFjdE1hdGVyaWFscwMJAGYCBQduZWVkTWF0AAAJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQCAV8FB25lZWRNYXQCAV8ECXBpZWNlc0tleQkBFmtleVN0YWtlZFBpZWNlc0J5T3duZXIBBQRhZGRyBAxzdGFrZWRQaWVjZXMJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJcGllY2VzS2V5AAAJAJQKAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAggFAXICXzUDCQBmAgkAkAMBCAUBcgJfNwAACQELU3RyaW5nRW50cnkCBQhsYW5kc0tleQkAuwkCCAUBcgJfNwIBXwkBC0RlbGV0ZUVudHJ5AQUIbGFuZHNLZXkJAQxJbnRlZ2VyRW50cnkCBQlwaWVjZXNLZXkDCQBmAggFAXICXzgFDHN0YWtlZFBpZWNlcwAACQBlAgUMc3Rha2VkUGllY2VzCAUBcgJfOAkBDEludGVnZXJFbnRyeQIJARJrZXlOZXh0RnJlZUxhbmROdW0ACQBkAgUHZnJlZU51bQABBQVpc3N1ZQkBC1N0cmluZ0VudHJ5AgkBEGtleUxhbmRUb0Fzc2V0SWQBBQpuZXdMYW5kTnVtBQ5uZXdMYW5kQXNzZXRJZAkBC1N0cmluZ0VudHJ5AgkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFDm5ld0xhbmRBc3NldElkBQRhZGRyCQELU3RyaW5nRW50cnkCCQERa2V5TGFuZE51bVRvT3duZXIBBQpuZXdMYW5kTnVtBQRhZGRyCQEMSW50ZWdlckVudHJ5AgkBIGtleUxhbmRBcnRTdGF0dXNCeVR5cGVBbmRBc3NldElkAgUKQVJUUFJFU0FMRQUObmV3TGFuZEFzc2V0SWQIBQFyAl8yCQEMSW50ZWdlckVudHJ5AgkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQ5uZXdMYW5kQXNzZXRJZAUIbmV3TGV2ZWwJAQxJbnRlZ2VyRW50cnkCCQEea2V5SW5mcmFMZXZlbEJ5QXNzZXRJZEFuZE93bmVyAgUObmV3TGFuZEFzc2V0SWQFBGFkZHIFCG5ld0xldmVsCQELU3RyaW5nRW50cnkCBQVicEtleQkAuQkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAggFAXICXzQJAMwIAgUGbmV3TWF0CQDMCAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAUDbmlsAgE6CQELU3RyaW5nRW50cnkCCQERa2V5UmVzUHJvcG9ydGlvbnMACQC5CQIIBQFyAl82AgFfCQELU3RyaW5nRW50cnkCCQEWa2V5UmVzVHlwZXNCeUNvbnRpbmVudAEFCWNvbnRpbmVudAkAuQkCCAUBcgNfMTACAV8JAQtTdHJpbmdFbnRyeQIJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAkAuQkCCQDMCAIFCWNvbnRpbmVudAkAzAgCAgFMCQDMCAIFDm5ld0xhbmRBc3NldElkBQNuaWwCAV8JAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEFBGFkZHIAAQUHYXNzZXRJZAUObmV3TGFuZEFzc2V0SWQBA3MybQIEYWRkcgxsYW5kQXNzZXRJZHMJAQ1tZXJnZUludGVybmFsBgIBTQADAgRTU1NTBQRhZGRyBQxsYW5kQXNzZXRJZHMAAAEDbTJsAgRhZGRyDGxhbmRBc3NldElkcwkBDW1lcmdlSW50ZXJuYWwGAgFMAAQCA1NNTQUEYWRkcgUMbGFuZEFzc2V0SWRzCQBoAgURSW5mcmFVcGdyYWRlQ29zdFMABAEEbDJ4bAIEYWRkcgxsYW5kQXNzZXRJZHMJAQ1tZXJnZUludGVybmFsBgICWEwABQIFU1NTTUwFBGFkZHIFDGxhbmRBc3NldElkcwkAaAIFEUluZnJhVXBncmFkZUNvc3RTAC8BBnhsMnh4bAIEYWRkcgxsYW5kQXNzZXRJZHMJAQ1tZXJnZUludGVybmFsBgIDWFhMAAYCA0xYTAUEYWRkcgUMbGFuZEFzc2V0SWRzCQBoAgURSW5mcmFVcGdyYWRlQ29zdFMANgELbWVyZ2VDb21tb24CBGFkZHIMbGFuZEFzc2V0SWRzBAckbWF0Y2gwCQCQAwEFDGxhbmRBc3NldElkcwMJAAACAAQFByRtYXRjaDAJAQNzMm0CBQRhZGRyBQxsYW5kQXNzZXRJZHMDCQAAAgADBQckbWF0Y2gwCQEDbTJsAgUEYWRkcgUMbGFuZEFzc2V0SWRzAwkAAAIABQUHJG1hdGNoMAkBBGwyeGwCBQRhZGRyBQxsYW5kQXNzZXRJZHMDCQAAAgACBQckbWF0Y2gwCQEGeGwyeHhsAgUEYWRkcgUMbGFuZEFzc2V0SWRzCQACAQINVW5rbm93biBtZXJnZQEGcHJvbG9nAQFpAwMJAQIhPQIIBQFpDG9yaWdpbkNhbGxlcgUMcmVzdENvbnRyYWN0CQELdmFsdWVPckVsc2UCCQCgCAEJAQprZXlCbG9ja2VkAAcHCQACAQIfQ29udHJhY3RzIGFyZSB1bmRlciBtYWludGVuYW5jZQkBC1N0cmluZ0VudHJ5AgkBEWtleUxhc3RUeElkQnlVc2VyAQkApQgBCAUBaQxvcmlnaW5DYWxsZXIJANgEAQgFAWkNdHJhbnNhY3Rpb25JZCcBaQENY29uc3RydWN0b3JWMQEIcmVzdEFkZHIDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAhFQZXJtaXNzaW9uIGRlbmllZAkAzAgCCQELU3RyaW5nRW50cnkCCQEOa2V5UmVzdEFkZHJlc3MABQhyZXN0QWRkcgUDbmlsAWkBCnNldEJsb2NrZWQBCWlzQmxvY2tlZAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECEXBlcm1pc3Npb24gZGVuaWVkCQDMCAIJAQxCb29sZWFuRW50cnkCCQEKa2V5QmxvY2tlZAAFCWlzQmxvY2tlZAUDbmlsAWkBCXN0YWtlTGFuZAAEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhxFeGFjdGx5IG9uZSBwYXltZW50IHJlcXVpcmVkBANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAQHYXNzZXRJZAkBBXZhbHVlAQgFA3BtdAdhc3NldElkBAdhZGRyZXNzCQClCAEIBQFpBmNhbGxlcgMJAQIhPQIIBQNwbXQGYW1vdW50AAEJAAIBCQCsAgIJAKwCAgIETkZUIAUKTEFORFBSRUZJWAIkIHRva2VuIHNob3VsZCBiZSBhdHRhY2hlZCBhcyBwYXltZW50BAVhc3NldAkBBXZhbHVlAQkA7AcBBQdhc3NldElkAwkBAiE9AggFBWFzc2V0Bmlzc3VlcgUEdGhpcwkAAgECF1Vua25vd24gaXNzdWVyIG9mIHRva2VuAwkBASEBCQEIY29udGFpbnMCCAUFYXNzZXQEbmFtZQUKTEFORFBSRUZJWAkAAgEJAKwCAgkArAICAglPbmx5IE5GVCAFCkxBTkRQUkVGSVgCFCB0b2tlbnMgYXJlIGFjY2VwdGVkBAtsYW5kTnVtU2l6ZQkAsAICCAUFYXNzZXQEbmFtZQAEBAdsYW5kTnVtAwkBCGNvbnRhaW5zAgULbGFuZE51bVNpemUCA1hYTAkAswICBQtsYW5kTnVtU2l6ZQADAwkBCGNvbnRhaW5zAgULbGFuZE51bVNpemUCAlhMCQCzAgIFC2xhbmROdW1TaXplAAIJALMCAgULbGFuZE51bVNpemUAAQMJAQEhAQkBCWlzRGVmaW5lZAEJALYJAQUHbGFuZE51bQkAAgEJAKwCAgIeQ2Fubm90IHBhcnNlIGxhbmQgbnVtYmVyIGZyb20gCAUFYXNzZXQEbmFtZQQLbGFuZEFzc2V0SWQJANgEAQUHYXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAMJAQlpc0RlZmluZWQBCQCfCAEFB3RpbWVLZXkJAAIBCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCEiBpcyBhbHJlYWR5IHN0YWtlZAQBZAkAtQkCCAUFYXNzZXQLZGVzY3JpcHRpb24CAV8EDXRlcnJhaW5Db3VudHMJAQ1jb3VudFRlcnJhaW5zAQkAkQMCBQFkBQtyZWNUZXJyYWlucwQGcGllY2VzCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCBQFkBQtyZWNMYW5kU2l6ZQQJbGFuZEluZGV4CQBpAgUGcGllY2VzBQVTU0laRQQFcHJvcHMJARF1cGRhdGVQcm9wb3J0aW9ucwMFDXRlcnJhaW5Db3VudHMFCWxhbmRJbmRleAABBAxyZXNCeUNvbnRLZXkJARZrZXlSZXNUeXBlc0J5Q29udGluZW50AQkAkQMCBQFkBQxyZWNDb250aW5lbnQECWNvbnRQcm9wcwkAtQkCCQELdmFsdWVPckVsc2UCCQCiCAEFDHJlc0J5Q29udEtleQILMF8wXzBfMF8wXzACAV8EEHVwZGF0ZWRDb250UHJvcHMJALkJAgkBGXVwZGF0ZVByb3BvcnRpb25zSW50ZXJuYWwEBQljb250UHJvcHMFDXRlcnJhaW5Db3VudHMFCWxhbmRJbmRleAABAgFfBAhsYW5kc0tleQkBFWtleVN0YWtlZExhbmRzQnlPd25lcgEFB2FkZHJlc3MECGxhbmRzU3RyCQCiCAEFCGxhbmRzS2V5BAVsYW5kcwMJAQlpc0RlZmluZWQBBQhsYW5kc1N0cgkAvQkCCQEFdmFsdWUBBQhsYW5kc1N0cgIBXwUDbmlsAwkBD2NvbnRhaW5zRWxlbWVudAIFBWxhbmRzBQtsYW5kQXNzZXRJZAkAAgEJAKwCAgIiWW91ciBzdGFrZWQgbGFuZHMgYWxyZWFkeSBjb250YWluIAULbGFuZEFzc2V0SWQDCQBnAgkAkAMBBQVsYW5kcwUYTUFYX0xBTkRTX1NUQUtFRF9CWV9VU0VSCQACAQkArAICCQCsAgICGVlvdXIgYWxyZWFkeSBzdGFrZWQgbWF4ICgJAKQDAQUYTUFYX0xBTkRTX1NUQUtFRF9CWV9VU0VSAgcpIGxhbmRzBAppbmZyYUxldmVsCQELdmFsdWVPckVsc2UCCQCfCAEJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQULbGFuZEFzc2V0SWQAAAQJcGllY2VzS2V5CQEWa2V5U3Rha2VkUGllY2VzQnlPd25lcgEFB2FkZHJlc3MECW9sZFBpZWNlcwkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlwaWVjZXNLZXkAAAQJd2xnUmVzdWx0CQD8BwQFC3dsZ0NvbnRyYWN0AhJvblN0YWtlVW5zdGFrZUxhbmQJAMwIAgUHYWRkcmVzcwUDbmlsBQNuaWwJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUHdGltZUtleQgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAMwIAgkBDEludGVnZXJFbnRyeQIJASJrZXlTdGFrZWRUaW1lQnlUeXBlQXNzZXRJZEFuZE93bmVyAwUKTEFORFBSRUZJWAULbGFuZEFzc2V0SWQFB2FkZHJlc3MIBQlsYXN0QmxvY2sJdGltZXN0YW1wCQDMCAIJAQtTdHJpbmdFbnRyeQIFCGxhbmRzS2V5CQC7CQIJAM0IAgUFbGFuZHMFC2xhbmRBc3NldElkAgFfCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlwaWVjZXNLZXkJAGQCBQlvbGRQaWVjZXMFBnBpZWNlcwkAzAgCCQELU3RyaW5nRW50cnkCCQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQULbGFuZEFzc2V0SWQFB2FkZHJlc3MJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEWtleUxhbmROdW1Ub093bmVyAQUHbGFuZE51bQUHYWRkcmVzcwkAzAgCCQEMSW50ZWdlckVudHJ5AgkBHmtleUluZnJhTGV2ZWxCeUFzc2V0SWRBbmRPd25lcgIFC2xhbmRBc3NldElkBQdhZGRyZXNzBQppbmZyYUxldmVsCQDMCAIJAQtTdHJpbmdFbnRyeQIJARFrZXlSZXNQcm9wb3J0aW9ucwAFBXByb3BzCQDMCAIJAQtTdHJpbmdFbnRyeQIFDHJlc0J5Q29udEtleQUQdXBkYXRlZENvbnRQcm9wcwkAzAgCBQxwcm9sb2dBY3Rpb24FA25pbAUJd2xnUmVzdWx0AWkBC3Vuc3Rha2VMYW5kAQ1sYW5kQXNzZXRJZEluBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBGFkZHIJAKUIAQgFAWkGY2FsbGVyBAFjCQEUY2hlY2tDbGFpbUNvbmRpdGlvbnMDBQRhZGRyBQ1jbGFpbU1vZGVEdWNrBQ1sYW5kQXNzZXRJZEluBAtsYW5kQXNzZXRJZAgFAWMCXzIEAWQIBQFjAl8zBAhsYW5kc0tleQkBFWtleVN0YWtlZExhbmRzQnlPd25lcgEFBGFkZHIEDXRlcnJhaW5Db3VudHMJAQ1jb3VudFRlcnJhaW5zAQkAkQMCBQFkBQtyZWNUZXJyYWlucwQGcGllY2VzCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCBQFkBQtyZWNMYW5kU2l6ZQQJbGFuZEluZGV4CQBpAgUGcGllY2VzBQVTU0laRQQFcHJvcHMJARF1cGRhdGVQcm9wb3J0aW9ucwMFDXRlcnJhaW5Db3VudHMFCWxhbmRJbmRleAD///////////8BBAxyZXNCeUNvbnRLZXkJARZrZXlSZXNUeXBlc0J5Q29udGluZW50AQkAkQMCBQFkBQxyZWNDb250aW5lbnQECWNvbnRQcm9wcwkAtQkCCQELdmFsdWVPckVsc2UCCQCiCAEFDHJlc0J5Q29udEtleQILMF8wXzBfMF8wXzACAV8EEHVwZGF0ZWRDb250UHJvcHMJALkJAgkBGXVwZGF0ZVByb3BvcnRpb25zSW50ZXJuYWwEBQljb250UHJvcHMFDXRlcnJhaW5Db3VudHMFCWxhbmRJbmRleAD///////////8BAgFfBAtjbGFpbVJlc3VsdAkBCGNsYWltQWxsBAUEYWRkcgULbGFuZEFzc2V0SWQFBnBpZWNlcwUNY2xhaW1Nb2RlRHVjawQFbGFuZHMJAL0JAgkBC3ZhbHVlT3JFbHNlAgkAoggBBQhsYW5kc0tleQIAAgFfBANpZHgJAM8IAgUFbGFuZHMFC2xhbmRBc3NldElkAwkBASEBCQEJaXNEZWZpbmVkAQUDaWR4CQACAQkArAICAiBZb3VyIHN0YWtlZCBsYW5kcyBkb24ndCBjb250YWluIAULbGFuZEFzc2V0SWQEA25vdwgFCWxhc3RCbG9jawl0aW1lc3RhbXAEDmdvdlJlbGVhc2VUaW1lCQELdmFsdWVPckVsc2UCCQCaCAIFC2dvdkNvbnRyYWN0CQEVa2V5VXNlckd3bFJlbGVhc2VUaW1lAQUEYWRkcgAAAwkAZwIFDmdvdlJlbGVhc2VUaW1lBQNub3cJAAIBCQCsAgICOVlvdXIgZ1dMIGFyZSB0YWtpbmcgcGFydCBpbiB2b3RpbmcsIGNhbm5vdCB1bnN0YWtlIHVudGlsIAkApAMBBQ5nb3ZSZWxlYXNlVGltZQQOYXJiUmVsZWFzZVRpbWUJAGQCCQELdmFsdWVPckVsc2UCCQCaCAIFC3dsZ0NvbnRyYWN0CQEUa2V5TGFzdEFyYlRpbWVCeVVzZXIBBQRhZGRyAAAFDmFyYml0cmFnZURlbGF5AwkAZgIFDmFyYlJlbGVhc2VUaW1lBQNub3cJAAIBCQCsAgICP1lvdXIgc3Rha2VkIGxhbmRzIHRvb2sgcGFydCBpbiBhcmJpdHJhZ2UsIGNhbm5vdCB1bnN0YWtlIHVudGlsIAkApAMBBQ5hcmJSZWxlYXNlVGltZQQJcGllY2VzS2V5CQEWa2V5U3Rha2VkUGllY2VzQnlPd25lcgEFBGFkZHIEDHN0YWtlZFBpZWNlcwkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlwaWVjZXNLZXkAAAQJbmV3UGllY2VzAwkAZgIFBnBpZWNlcwUMc3Rha2VkUGllY2VzAAAJAGUCBQxzdGFrZWRQaWVjZXMFBnBpZWNlcwQJd2xnUmVzdWx0CQD8BwQFC3dsZ0NvbnRyYWN0AhJvblN0YWtlVW5zdGFrZUxhbmQJAMwIAgUEYWRkcgUDbmlsBQNuaWwJAJQKAgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIAAQkA2QQBBQtsYW5kQXNzZXRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkCQDMCAIJAQtEZWxldGVFbnRyeQEJASJrZXlTdGFrZWRUaW1lQnlUeXBlQXNzZXRJZEFuZE93bmVyAwUKTEFORFBSRUZJWAULbGFuZEFzc2V0SWQFBGFkZHIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEWtleVJlc1Byb3BvcnRpb25zAAUFcHJvcHMJAMwIAgkBC1N0cmluZ0VudHJ5AgUMcmVzQnlDb250S2V5BRB1cGRhdGVkQ29udFByb3BzCQDMCAIJAQtTdHJpbmdFbnRyeQIIBQtjbGFpbVJlc3VsdAJfMgkAuQkCCAULY2xhaW1SZXN1bHQCXzMCAToJAMwIAgMJAGYCCQCQAwEFBWxhbmRzAAEJAQtTdHJpbmdFbnRyeQIFCGxhbmRzS2V5CQC7CQIJANEIAgUFbGFuZHMJAQV2YWx1ZQEFA2lkeAIBXwkBC0RlbGV0ZUVudHJ5AQUIbGFuZHNLZXkJAMwIAgkBDEludGVnZXJFbnRyeQIFCXBpZWNlc0tleQUJbmV3UGllY2VzCQDMCAIFDHByb2xvZ0FjdGlvbgUDbmlsBQl3bGdSZXN1bHQBaQEJc3Rha2VEdWNrAAQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECHEV4YWN0bHkgb25lIHBheW1lbnQgcmVxdWlyZWQEA3BtdAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAABAdhc3NldElkCQEFdmFsdWUBCAUDcG10B2Fzc2V0SWQEB2FkZHJlc3MJAKUIAQgFAWkGY2FsbGVyAwkBAiE9AggFA3BtdAZhbW91bnQAAQkAAgEJAKwCAgkArAICAgRORlQgBQpEVUNLUFJFRklYAiQgdG9rZW4gc2hvdWxkIGJlIGF0dGFjaGVkIGFzIHBheW1lbnQEBWFzc2V0CQEFdmFsdWUBCQDsBwEFB2Fzc2V0SWQDAwkBAiE9AggFBWFzc2V0Bmlzc3VlcgUNaW5jdWJhdG9yQWRkcgkBAiE9AggFBWFzc2V0Bmlzc3VlcgULYnJlZWRlckFkZHIHCQACAQkArAICCQCsAgICElVua25vd24gaXNzdWVyIG9mIAUKRFVDS1BSRUZJWAIGIHRva2VuAwkBASEBCQEIY29udGFpbnMCCAUFYXNzZXQEbmFtZQUKRFVDS1BSRUZJWAkAAgEJAKwCAgkArAICAglPbmx5IE5GVCAFCkRVQ0tQUkVGSVgCFCB0b2tlbnMgYXJlIGFjY2VwdGVkBAphc3NldElkU3RyCQDYBAEFB2Fzc2V0SWQEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQUKYXNzZXRJZFN0cgMJAQlpc0RlZmluZWQBCQCfCAEFB3RpbWVLZXkJAAIBCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCEiBpcyBhbHJlYWR5IHN0YWtlZAMJAQlpc0RlZmluZWQBCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFB2FkZHJlc3MJAAIBCQCsAgICHVlvdSBhbHJlYWR5IHN0YWtlZCBvbmUgZHVjazogCAUFYXNzZXQEbmFtZQMJAQ9jaGVja1RvdXJuYW1lbnQBBQphc3NldElkU3RyCQACAQIZc3Rha2VEdWNrX2NoZWNrVG91cm5hbWVudAQGbG9jS2V5CQEPa2V5RHVja0xvY2F0aW9uAQUKYXNzZXRJZFN0cgQIbG9jYXRpb24JAKIIAQUGbG9jS2V5BAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQUKYXNzZXRJZFN0cgQIYmFja3BhY2sJAKIIAQUFYnBLZXkECWtleUhlYWx0aAkBDWtleUR1Y2tIZWFsdGgBBQphc3NldElkU3RyBAVtYXhIUAkBCW1heEhlYWx0aAEJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBDGtleUR1Y2tMZXZlbAEFCmFzc2V0SWRTdHIAAAQJY3VySGVhbHRoCQELdmFsdWVPckVsc2UCCQCfCAEFCWtleUhlYWx0aAUFbWF4SFAJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUHdGltZUtleQgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAMwIAgkBDEludGVnZXJFbnRyeQIJASJrZXlTdGFrZWRUaW1lQnlUeXBlQXNzZXRJZEFuZE93bmVyAwUKRFVDS1BSRUZJWAkA2AQBBQdhc3NldElkBQdhZGRyZXNzCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAzAgCCQELU3RyaW5nRW50cnkCCQEQa2V5RHVja0lkVG9Pd25lcgEFCmFzc2V0SWRTdHIFB2FkZHJlc3MJAMwIAgkBC1N0cmluZ0VudHJ5AgkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUHYWRkcmVzcwUKYXNzZXRJZFN0cgUDbmlsAwkBCWlzRGVmaW5lZAEFCGxvY2F0aW9uBQNuaWwJAM4IAgkAzAgCCQELU3RyaW5nRW50cnkCBQZsb2NLZXkFD0RFRkFVTFRMT0NBVElPTgUDbmlsAwkBCWlzRGVmaW5lZAEFCGJhY2twYWNrBQNuaWwJAM0IAgkAzQgCCQDMCAIJAQtTdHJpbmdFbnRyeQIFBWJwS2V5AhowOjBfMF8wXzBfMF8wOjBfMF8wXzBfMF8wOgUDbmlsCQEMSW50ZWdlckVudHJ5AgUJa2V5SGVhbHRoBQljdXJIZWFsdGgFDHByb2xvZ0FjdGlvbgFpAQt1bnN0YWtlRHVjawEKYXNzZXRJZFN0cgQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBAdhc3NldElkCQDZBAEFCmFzc2V0SWRTdHIEB2FkZHJlc3MJAKUIAQgFAWkGY2FsbGVyBAVhc3NldAkBBXZhbHVlAQkA7AcBBQdhc3NldElkBAd0aW1lS2V5CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFCmFzc2V0SWRTdHIDCQEBIQEJAQlpc0RlZmluZWQBCQCfCAEFB3RpbWVLZXkJAAIBCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkAwkBASEBCQEJaXNEZWZpbmVkAQkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQdhZGRyZXNzCQACAQkArAICCQCsAgICCVRoZSBkdWNrIAgFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkBAVvd25lcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARBrZXlEdWNrSWRUb093bmVyAQUKYXNzZXRJZFN0cgkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDCQECIT0CBQVvd25lcgUHYWRkcmVzcwkAAgECF1N0YWtlZCBORlQgaXMgbm90IHlvdXJzAwkBD2NoZWNrVG91cm5hbWVudAEFCmFzc2V0SWRTdHIJAAIBAht1bnN0YWtlRHVja19jaGVja1RvdXJuYW1lbnQECWtleUhlYWx0aAkBDWtleUR1Y2tIZWFsdGgBBQphc3NldElkU3RyBAVtYXhIUAkBCW1heEhlYWx0aAEJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBDGtleUR1Y2tMZXZlbAEFCmFzc2V0SWRTdHIAAAQGaGVhbHRoCQELdmFsdWVPckVsc2UCCQCfCAEFCWtleUhlYWx0aAUFbWF4SFADCQBmAgUFbWF4SFAFBmhlYWx0aAkAAgEJAKwCAgkArAICAhlQbGVhc2UgaGVhbCB5b3VyIGR1Y2sgdG8gCQCkAwEFBW1heEhQAhNocCBiZWZvcmUgdW5zdGFraW5nCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgABBQdhc3NldElkCQDMCAIJAQtEZWxldGVFbnRyeQEFB3RpbWVLZXkJAMwIAgkBC0RlbGV0ZUVudHJ5AQUJa2V5SGVhbHRoCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ9rZXlEdWNrTG9jYXRpb24BBQphc3NldElkU3RyCQDMCAIJAQtEZWxldGVFbnRyeQEJARBrZXlEdWNrSWRUb093bmVyAQUKYXNzZXRJZFN0cgkAzAgCCQELRGVsZXRlRW50cnkBCQEia2V5U3Rha2VkVGltZUJ5VHlwZUFzc2V0SWRBbmRPd25lcgMFCkRVQ0tQUkVGSVgFCmFzc2V0SWRTdHIFB2FkZHJlc3MJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUHYWRkcmVzcwkAzAgCBQxwcm9sb2dBY3Rpb24FA25pbAFpAQhjbGFpbVJlcwIGYW1vdW50DmxhbmRBc3NldElkU3RyBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBGFkZHIJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyBAZyZXN1bHQJARBjbGFpbVJlc0ludGVybmFsBAUEYWRkcgUGYW1vdW50BQ1jbGFpbU1vZGVEdWNrBQ5sYW5kQXNzZXRJZFN0cgQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkCQCUCgIJAM0IAgkAzQgCCQDNCAIJAM4IAggFBnJlc3VsdAJfMQgJARd1cGRhdGVEdWNrU3RhdHNJbnRlcm5hbAIFC2R1Y2tBc3NldElkCQBrAwUHeHBDbGFpbQUGYW1vdW50BQVNVUxUOAJfMQkBC1N0cmluZ0VudHJ5AggFBnJlc3VsdAJfMgkAuQkCCAUGcmVzdWx0Al8zAgE6CQELU3RyaW5nRW50cnkCCAUGcmVzdWx0Al80CQC5CQIIBQZyZXN1bHQCXzUCAToFDHByb2xvZ0FjdGlvbgkAkQMCCAUGcmVzdWx0Al8zBQhicElkeFJlcwFpAQxjbGFpbVJlc1RvV0gCBmFtb3VudA5sYW5kQXNzZXRJZFN0cgQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBARhZGRyCQClCAEIBQFpDG9yaWdpbkNhbGxlcgQGcmVzdWx0CQEQY2xhaW1SZXNJbnRlcm5hbAQFBGFkZHIFBmFtb3VudAULY2xhaW1Nb2RlV2gFDmxhbmRBc3NldElkU3RyCQCUCgIJAM0IAgkAzQgCCQDNCAIJAM4IAggFBnJlc3VsdAJfMQgJARZ1cGRhdGVBY2NTdGF0c0ludGVybmFsAgUEYWRkcgkAawMFB3hwQ2xhaW0FBmFtb3VudAUFTVVMVDgCXzEJAQtTdHJpbmdFbnRyeQIIBQZyZXN1bHQCXzIJALkJAggFBnJlc3VsdAJfMwIBOgkBC1N0cmluZ0VudHJ5AggFBnJlc3VsdAJfNAkAuQkCCAUGcmVzdWx0Al81AgE6BQxwcm9sb2dBY3Rpb24JAJEDAggFBnJlc3VsdAJfNQUId2hJZHhSZXMBaQEGZmxpZ2h0AgdtZXNzYWdlA3NpZwQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBAh1c2VyQWRkcgkApQgBCAUBaQZjYWxsZXIEAWYJAQxmbGlnaHRDb21tb24DBQh1c2VyQWRkcgUHbWVzc2FnZQUDc2lnBAtkdWNrQXNzZXRJZAgFAWYCXzIEC25ld0xvY2F0aW9uCAUBZgJfNAQGbmV3TG9jCQC1CQIFC25ld0xvY2F0aW9uAgFfBAZpc1RvdXIJAAACCQCRAwIFBm5ld0xvYwUKbG9jSWR4VHlwZQIBVAMDCQEBIQEFBmlzVG91cgkBD2NoZWNrVG91cm5hbWVudAEFC2R1Y2tBc3NldElkBwkAAgECFmZsaWdodF9jaGVja1RvdXJuYW1lbnQECXRvdXJTdHVmZgMFBmlzVG91cgQGbGFzdElkCQELdmFsdWVPckVsc2UCCQCaCAIFEnRvdXJuYW1lbnRDb250cmFjdAUNbGFzdFRvdXJJZEtleQAABANub3cIBQlsYXN0QmxvY2sJdGltZXN0YW1wBAV0RGF0YQkBC2dldFRvdXJEYXRhAgUSdG91cm5hbWVudENvbnRyYWN0BQZsYXN0SWQEBnN0YXRpYwkAkQMCBQV0RGF0YQUJaWR4U3RhdGljBAdkeW5hbWljCQCRAwIFBXREYXRhBQppZHhEeW5hbWljAwMDCQECIT0CCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUGbmV3TG9jBQ9sb2NJZHhDb250aW5lbnQFBmxhc3RJZAYJAQIhPQIJAJEDAgUHZHluYW1pYwUOdER5bmFtaWNTdGF0dXMCCklOUFJPR1JFU1MGCQBmAgUDbm93CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUGc3RhdGljBQp0U3RhdGljRW5kBQR1bml0BAVzY29yZQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBm5ld0xvYwUIbG9jSWR4SWQECmdsb2JhbEJlc3QJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdkeW5hbWljBRF0RHluYW1pY1dpblJlc3VsdAMJAGcCBQpnbG9iYWxCZXN0BQVzY29yZQUEdW5pdAkA/AcEBRJ0b3VybmFtZW50Q29udHJhY3QCEXVwZGF0ZUR5bmFtaWNEYXRhCQDMCAIFC2R1Y2tBc3NldElkCQDMCAIFBXNjb3JlBQNuaWwFA25pbAUEdW5pdAMJAAACBQl0b3VyU3R1ZmYFCXRvdXJTdHVmZgQGbG9jS2V5CQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQEC2N1ckxvY2F0aW9uCQELdmFsdWVPckVsc2UCCQCiCAEFBmxvY0tleQUPREVGQVVMVExPQ0FUSU9OAwkAAAIFC25ld0xvY2F0aW9uBQtjdXJMb2NhdGlvbgkAAgECIllvdSBjYW4ndCBmbHkgdG8gdGhlIHNhbWUgbG9jYXRpb24EBWVxS2V5CQEQa2V5RHVja0VxdWlwbWVudAEFC2R1Y2tBc3NldElkBAljdXJyZW50RXEJAQt2YWx1ZU9yRWxzZQIJAKIIAQUFZXFLZXkCFyw7LF8sOyxfLDssXyw7LF8sOyxfLDssBA0kdDA2ODMwMzY4NDc5CQERc3VidHJhY3RFcXVpcG1lbnQCBQljdXJyZW50RXEIBQFmAl81BAVuZXdFcQgFDSR0MDY4MzAzNjg0NzkCXzEED3Nob3VsZFplcm9CdWZmcwgFDSR0MDY4MzAzNjg0NzkCXzIJAJQKAgkAzggCCQDMCAIJAQtTdHJpbmdFbnRyeQIFBmxvY0tleQMJAGYCCAUBZgJfMQAABQtuZXdMb2NhdGlvbgULY3VyTG9jYXRpb24JAMwIAgkBC1N0cmluZ0VudHJ5AgUFZXFLZXkFBW5ld0VxCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkCAUBZgJfMQkAzAgCBQxwcm9sb2dBY3Rpb24FA25pbAMFD3Nob3VsZFplcm9CdWZmcwkAzAgCCQELU3RyaW5nRW50cnkCCQEMa2V5RHVja0J1ZmZzAQULZHVja0Fzc2V0SWQCCTBfMF8wXzBfMAUDbmlsCQDOCAIFA25pbAgJARd1cGRhdGVEdWNrU3RhdHNJbnRlcm5hbAIFC2R1Y2tBc3NldElkAwkAZgIIBQFmAl8xAAAFD3hwU3VjY2Vzc0ZsaWdodAUMeHBGYWlsRmxpZ2h0Al8xCAUBZgJfMwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQRoZWFsAwpxdWFudGl0eUwxCnF1YW50aXR5TDIKcXVhbnRpdHlMMwQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMDAwkAZgIAAAUKcXVhbnRpdHlMMQYJAGYCAAAFCnF1YW50aXR5TDIGCQBmAgAABQpxdWFudGl0eUwzCQACAQIbUXVhbnRpdHkgY2Fubm90IGJlIG5lZ2F0aXZlBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkAwkBD2NoZWNrVG91cm5hbWVudAEFC2R1Y2tBc3NldElkCQACAQIUaGVhbF9jaGVja1RvdXJuYW1lbnQEA3F0cwkAzAgCBQpxdWFudGl0eUwxCQDMCAIFCnF1YW50aXR5TDIJAMwIAgUKcXVhbnRpdHlMMwUDbmlsBAlrZXlIZWFsdGgJAQ1rZXlEdWNrSGVhbHRoAQULZHVja0Fzc2V0SWQEBW1heEhQCQEJbWF4SGVhbHRoAQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEMa2V5RHVja0xldmVsAQULZHVja0Fzc2V0SWQAAAQJb2xkSGVhbHRoCQELdmFsdWVPckVsc2UCCQCfCAEFCWtleUhlYWx0aAUFbWF4SFADCQBnAgUJb2xkSGVhbHRoBQVtYXhIUAkAAgEJAKwCAgkArAICAg9IUCBzaG91bGQgYmUgPCAJAKQDAQUFbWF4SFACCCB0byBoZWFsBAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQIcHJvZExpc3QDCQAAAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kAgAFA25pbAkAvAkCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QCAV8KAQtpdGVyYXRlUHJvZAIDYWNjBnJlY2lwZQQBbggFA2FjYwJfMgQBeAMJAGYCCQCQAwEFCHByb2RMaXN0BQFuCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUIcHJvZExpc3QFAW4AAAMJAGYCAAMFAW4EAXEJAJEDAgUDcXRzBQFuAwkAZgIFAXEFAXgJAAIBCQCsAgIJAKwCAgkArAICAg5Zb3UgaGF2ZSBvbmx5IAkApAMBBQF4AgQgb2YgCQCRAwIFCXByb2RUeXBlcwUBbgkAlQoDCQDNCAIIBQNhY2MCXzEJAKQDAQkAZQIFAXgFAXEJAGQCBQFuAAEJAGQCCAUDYWNjAl8zCQBoAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIJALUJAgUGcmVjaXBlAgFfBQpySWR4RWZmZWN0BQFxCQCVCgMJAM0IAggFA2FjYwJfMQkApAMBBQF4CQBkAgUBbgABCAUDYWNjAl8zBAZyZXN1bHQKAAIkbAUQcHJvZHVjdGlvbk1hdHJpeAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJUKAwUDbmlsAAAAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQELaXRlcmF0ZVByb2QCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDUwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkAGgAbABwAHQAeAB8AIAAhACIAIwAkACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgQJbmV3SGVhbHRoCQCXAwEJAMwIAgUFbWF4SFAJAMwIAgkAZAIFCW9sZEhlYWx0aAgFBnJlc3VsdAJfMwUDbmlsCQCUCgIJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUJa2V5SGVhbHRoBQluZXdIZWFsdGgJAMwIAgkBC1N0cmluZ0VudHJ5AgUFYnBLZXkJALoJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0CQDMCAIJALkJAggFBnJlc3VsdAJfMQIBXwUDbmlsAgE6CQDMCAIFDHByb2xvZ0FjdGlvbgUDbmlsCAkBF3VwZGF0ZUR1Y2tTdGF0c0ludGVybmFsAgULZHVja0Fzc2V0SWQJAGgCBQZ4cEhlYWwJAGQCCQBkAgUKcXVhbnRpdHlMMQUKcXVhbnRpdHlMMgUKcXVhbnRpdHlMMwJfMQUJbmV3SGVhbHRoAWkBBmhlYWxFUwAEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhxFeGFjdGx5IG9uZSBwYXltZW50IHJlcXVpcmVkBANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAMJAQIhPQIIBQNwbXQHYXNzZXRJZAULdXNkdEFzc2V0SWQJAAIBAhpBbGxvd2VkIFVTRFQgcGF5bWVudCBvbmx5IQQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBCQClCAEIBQFpBmNhbGxlcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAMJAQ9jaGVja1RvdXJuYW1lbnQBBQtkdWNrQXNzZXRJZAkAAgECFmhlYWxFU19jaGVja1RvdXJuYW1lbnQECWtleUhlYWx0aAkBDWtleUR1Y2tIZWFsdGgBBQtkdWNrQXNzZXRJZAQFbWF4SFAJAQltYXhIZWFsdGgBCQELdmFsdWVPckVsc2UCCQCfCAEJAQxrZXlEdWNrTGV2ZWwBBQtkdWNrQXNzZXRJZAAABAlvbGRIZWFsdGgJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJa2V5SGVhbHRoBQVtYXhIUAMJAGYCBQlvbGRIZWFsdGgAAAkAAgECKEhQIHNob3VsZCBiZSAwIHRvIGNhbGwgRW1lcmdlbmN5IFNlcnZpY2UEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BAhwcm9kTGlzdAMJAAACCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QCAAUDbmlsCQC8CQIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAIBXwQNbWVkS2l0QW1vdW50MQMJAGYCCQCQAwEFCHByb2RMaXN0AAAJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQhwcm9kTGlzdAAAAAAEDW1lZEtpdEFtb3VudDIDCQBmAgkAkAMBBQhwcm9kTGlzdAABCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUIcHJvZExpc3QAAQAABA1tZWRLaXRBbW91bnQzAwkAZgIJAJADAQUIcHJvZExpc3QAAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCHByb2RMaXN0AAIAAAMDAwkAZgIFDW1lZEtpdEFtb3VudDEAAAYJAGYCBQ1tZWRLaXRBbW91bnQyAAAGCQBmAgUNbWVkS2l0QW1vdW50MwAACQACAQIfWW91IGhhdmUgdG8gdXNlIG93biBNZWRpY2FsIEtpdAQIZXhpc3RTdHIJAJ0IAgUPZWNvbm9teUNvbnRyYWN0CQEOa2V5RXNXYXJlaG91c2UABAxleGlzdEFtb3VudHMDCQEJaXNEZWZpbmVkAQUIZXhpc3RTdHIJALwJAgkBBXZhbHVlAQUIZXhpc3RTdHICAV8FA25pbAQLZXhpc3RBbW91bnQDCQBmAgkAkAMBBQxleGlzdEFtb3VudHMAAAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDGV4aXN0QW1vdW50cwAAAAADCQBnAgAABQtleGlzdEFtb3VudAkAAgECOVRoZXJlIGFyZSBubyBNZWRpY2FsIEtpdHMgTDEgYXQgRW1lcmdlbmN5IFNlcnZpY2Ugc3RvcmFnZQQJbmV3SGVhbHRoCQBkAgUJb2xkSGVhbHRoCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgkAtQkCCQCRAwIFEHByb2R1Y3Rpb25NYXRyaXgAAAIBXwUKcklkeEVmZmVjdAQFbmV3RVMJALkJAgkAzAgCCQCkAwEJAGUCBQtleGlzdEFtb3VudAABCQDRCAIFDGV4aXN0QW1vdW50cwAAAgFfBAZyZWNpcGUJALUJAgkAkQMCBRBwcm9kdWN0aW9uTWF0cml4AAACAV8ECHRvdGFsTWF0CQESZ2V0UmVjaXBlTWF0ZXJpYWxzAQUGcmVjaXBlBAlzZWxsUHJpY2UJAGsDCQBoAgUIdG90YWxNYXQFCkVTU0VMTENPRUYFEFJFU09VUkNFUFJJQ0VNSU4JAGgCBQVNVUxUOAUOUFJPRFVDVFBLR1NJWkUDCQECIT0CCAUDcG10BmFtb3VudAUJc2VsbFByaWNlCQACAQkArAICAhtQYXltZW50IGF0dGFjaGVkIHNob3VsZCBiZSAJAKQDAQUJc2VsbFByaWNlBAZyZXN1bHQJAQhhc1N0cmluZwEJAPwHBAUPZWNvbm9teUNvbnRyYWN0Ag91cGRhdGVFc1N0b3JhZ2UJAMwIAgUFbmV3RVMFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgULdXNkdEFzc2V0SWQFCXNlbGxQcmljZQUDbmlsCQCUCgIJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUJa2V5SGVhbHRoBQluZXdIZWFsdGgJAMwIAgUMcHJvbG9nQWN0aW9uBQNuaWwICQEXdXBkYXRlRHVja1N0YXRzSW50ZXJuYWwCBQtkdWNrQXNzZXRJZAUIeHBDYWxsRVMCXzEFBnJlc3VsdAFpAQ51cGRhdGVCYWNrcGFjawILZHVja0Fzc2V0SWQHbmV3UGFjawMJAQIhPQIIBQFpBmNhbGxlcgUPZWNvbm9teUNvbnRyYWN0CQACAQIRcGVybWlzc2lvbiBkZW5pZWQJAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCCQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAUHbmV3UGFjawUDbmlsBQduZXdQYWNrAWkBD2NvbW1pdEZvclJhbmRvbQAEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkEC2ZpbmlzaEJsb2NrCQBkAgUGaGVpZ2h0BQtyYW5kb21EZWxheQQEYWRkcgkApQgBCAUBaQZjYWxsZXIJAJQKAgkAzQgCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEJa2V5Q29tbWl0AQUEYWRkcgULZmluaXNoQmxvY2sFA25pbAUMcHJvbG9nQWN0aW9uBQtmaW5pc2hCbG9jawFpAQhidXlTTGFuZAAEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhxFeGFjdGx5IG9uZSBwYXltZW50IHJlcXVpcmVkBANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAMJAQIhPQIIBQNwbXQHYXNzZXRJZAULdXNkdEFzc2V0SWQJAAIBAhpBbGxvd2VkIFVTRFQgcGF5bWVudCBvbmx5IQMJAQIhPQIIBQNwbXQGYW1vdW50BQdFWFBVU0RUCQACAQkArAICAhtQYXltZW50IGF0dGFjaGVkIHNob3VsZCBiZSAJAKQDAQUHRVhQVVNEVAQGcmVzdWx0CQESZXhwZWRpdGlvbkludGVybmFsAggFAWkGY2FsbGVyCAUBaQ10cmFuc2FjdGlvbklkCQCUCgIJAM0IAgkAzggCCQDNCAIIBQZyZXN1bHQCXzEJAQ5TY3JpcHRUcmFuc2ZlcgMFD2Vjb25vbXlDb250cmFjdAgFA3BtdAZhbW91bnQFC3VzZHRBc3NldElkCAkBFnVwZGF0ZUFjY1N0YXRzSW50ZXJuYWwCCQClCAEIBQFpBmNhbGxlcgUKeHBOZXdTTGFuZAJfMQUMcHJvbG9nQWN0aW9uCAgFBnJlc3VsdAJfMgJfMQFpAQpleHBlZGl0aW9uAgdtZXNzYWdlA3NpZwQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBAZyZXN1bHQJARBleHBlZGl0aW9uQ29tbW9uBAgFAWkGY2FsbGVyCAUBaQ10cmFuc2FjdGlvbklkBQdtZXNzYWdlBQNzaWcEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQkApQgBCAUBaQZjYWxsZXICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQDCQEPY2hlY2tUb3VybmFtZW50AQULZHVja0Fzc2V0SWQJAAIBAhpleHBlZGl0aW9uX2NoZWNrVG91cm5hbWVudAkAlAoCCQDNCAIJAM4IAggFBnJlc3VsdAJfMQgJARd1cGRhdGVEdWNrU3RhdHNJbnRlcm5hbAIFC2R1Y2tBc3NldElkBQp4cE5ld1NMYW5kAl8xBQxwcm9sb2dBY3Rpb24JAJQKAggFBnJlc3VsdAJfMggFBnJlc3VsdAJfMwFpAQx1cGdyYWRlSW5mcmEBC2xhbmRBc3NldElkBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBnJlc3VsdAkBDXVwSW5mcmFDb21tb24EBggFAWkGY2FsbGVyAAAFC2xhbmRBc3NldElkBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkCQCUCgIJAM4IAgkAzQgCCAUGcmVzdWx0Al8xBQxwcm9sb2dBY3Rpb24ICQEXdXBkYXRlRHVja1N0YXRzSW50ZXJuYWwCBQtkdWNrQXNzZXRJZAkAawMFDnhwVXBncmFkZUluZnJhCAUGcmVzdWx0Al8zBQVNVUxUOAJfMQgFBnJlc3VsdAJfMgFpARBhY3RpdmF0ZUFydGlmYWN0AgdhcnROYW1lDmxhbmRBc3NldElkT3B0BAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBGFkZHIJAKUIAQgFAWkGY2FsbGVyBAZyZXN1bHQEByRtYXRjaDAFB2FydE5hbWUDCQAAAgIHUFJFU0FMRQUHJG1hdGNoMAkBEmFjdGl2YXRlUHJlc2FsZUFydAIFBGFkZHIFDmxhbmRBc3NldElkT3B0AwkAAAICB09OQk9BUkQFByRtYXRjaDAJARJhY3RpdmF0ZU9uYm9hcmRBcnQBBQRhZGRyCQACAQIQVW5rbm93biBhcnRpZmFjdAkAzQgCBQZyZXN1bHQFDHByb2xvZ0FjdGlvbgFpAQptZXJnZUxhbmRzAQxsYW5kQXNzZXRJZHMEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQGcmVzdWx0CQELbWVyZ2VDb21tb24CCQClCAEIBQFpBmNhbGxlcgUMbGFuZEFzc2V0SWRzCQCUCgIJAM4IAgkAzQgCCAUGcmVzdWx0Al8xBQxwcm9sb2dBY3Rpb24ICQEWdXBkYXRlQWNjU3RhdHNJbnRlcm5hbAIJAKUIAQgFAWkGY2FsbGVyBQd4cE1lcmdlAl8xCAUGcmVzdWx0Al8yAWkBDWNhcmdvRXhjaGFuZ2UCDGNhcmdvTGlzdFN0cgtsYW5kQXNzZXRJZAQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBApjYXJnb1BhcnRzCQC8CQIFDGNhcmdvTGlzdFN0cgIBOgQEYWRkcgkApQgBCAUBaQxvcmlnaW5DYWxsZXIEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQULbGFuZEFzc2V0SWQEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQULbGFuZEFzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBCQCfCAEFB3RpbWVLZXkJAAIBCQCsAgIIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAQFb3duZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQULbGFuZEFzc2V0SWQJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwkBAiE9AgUFb3duZXIFBGFkZHIJAAIBCQCsAgIFCkxBTkRQUkVGSVgCDSBpcyBub3QgeW91cnMECWxhbmRJbmRleAkAaQIJAQ9udW1QaWVjZXNCeVNpemUBCQCRAwIJALUJAggFBWFzc2V0C2Rlc2NyaXB0aW9uAgFfBQtyZWNMYW5kU2l6ZQUFU1NJWkUECmluZnJhTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAAABAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFBGFkZHICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQEC2N1ckxvY2F0aW9uCQELdmFsdWVPckVsc2UCCQCiCAEJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAUPREVGQVVMVExPQ0FUSU9OBANsb2MJALUJAgkBBXZhbHVlAQULY3VyTG9jYXRpb24CAV8DCQECIT0CCQCRAwIFA2xvYwUKbG9jSWR4VHlwZQIBTAkAAgEJAKwCAgkArAICAhZEdWNrIGxvY2F0aW9uIHR5cGUgaXMgCQCRAwIFA2xvYwUKbG9jSWR4VHlwZQIRLCBidXQgc2hvdWxkIGJlIEwDCQECIT0CCQCRAwIFA2xvYwUIbG9jSWR4SWQFC2xhbmRBc3NldElkCQACAQkArAICAhtEdWNrIHNob3VsZCBiZSBvbiB0aGUgbGFuZCAFC2xhbmRBc3NldElkBAV3aEtleQkBEmtleVdhcmVob3VzZUJ5TGFuZAEFC2xhbmRBc3NldElkBAljdXJyZW50V2gJAQxnZXRXYXJlaG91c2UDBQV3aEtleQUJbGFuZEluZGV4BQppbmZyYUxldmVsBAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQGcmVzdWx0CQEJbW92ZVN0dWZmAwUKY2FyZ29QYXJ0cwUJY3VycmVudFdoBQtjdXJyZW50UGFjawQEbG9mdAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhMT0ZUAgFfBAVsb2Z0TwkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQt2b2xPY2N1cGllZAgFBnJlc3VsdAJfNwQFbG9mdEYJAGUCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAUHdm9sRnJlZQgFBnJlc3VsdAJfNwkAzAgCCQELU3RyaW5nRW50cnkCBQVicEtleQkAugkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAggFBnJlc3VsdAJfNAkAzAgCCAUGcmVzdWx0Al81CQDMCAIIBQZyZXN1bHQCXzYFA25pbAIBOgkAzAgCCQELU3RyaW5nRW50cnkCBQV3aEtleQkAugkCCQDMCAIJAJEDAgUJY3VycmVudFdoBQt3aElkeExldmVscwkAzAgCCAUGcmVzdWx0Al8xCQDMCAIIBQZyZXN1bHQCXzIJAMwIAggFBnJlc3VsdAJfMwkAzAgCCQC5CQIJAMwIAgkAkQMCBQRsb2Z0BQl2b2xMb2NrZWQJAMwIAgkApAMBBQVsb2Z0TwkAzAgCCQCkAwEFBWxvZnRGCQDMCAIJAJEDAgUEbG9mdAUIdm9sVG90YWwFA25pbAIBXwUDbmlsAgE6CQDMCAIFDHByb2xvZ0FjdGlvbgUDbmlsAWkBDXNhdmVXYXJlaG91c2UCBXdoU3RyC2xhbmRBc3NldElkAwkBAiE9AggFAWkGY2FsbGVyBQ9lY29ub215Q29udHJhY3QJAAIBAg1BY2Nlc3MgZGVuaWVkBAV3aEtleQkBEmtleVdhcmVob3VzZUJ5TGFuZAEFC2xhbmRBc3NldElkBAJ3aAkAvAkCBQV3aFN0cgIBOgMJAQIhPQIJAJADAQUCd2gABQkAAgECMHdhcmVob3VzZSBzdHJpbmcgc2hvdWxkIGNvbnRhaW4gNCAnOicgc2VwYXJhdG9ycwQFbG9mdEwJAJEDAgkAtQkCCQCRAwIFAndoBQl3aElkeExPRlQCAV8FCXZvbExvY2tlZAQFbG9mdE8JARdnZXRXYXJlaG91c2VPY2N1cGllZFZvbAEFAndoBAVsb2Z0VAkBF2dldFdhcmVob3VzZVRvdGFsVm9sdW1lAQkAkQMCBQJ3aAULd2hJZHhMZXZlbHMEBWxvZnRGCQBlAgkAZQIFBWxvZnRUCQENcGFyc2VJbnRWYWx1ZQEFBWxvZnRMBQVsb2Z0TwQIbmV3V2hTdHIJALoJAgkAzAgCCQCRAwIFAndoBQt3aElkeExldmVscwkAzAgCCQCRAwIFAndoBQh3aElkeFJlcwkAzAgCCQCRAwIFAndoBQh3aElkeE1hdAkAzAgCCQCRAwIFAndoBQl3aElkeFByb2QJAMwIAgkAuQkCCQDMCAIFBWxvZnRMCQDMCAIJAKQDAQUFbG9mdE8JAMwIAgkApAMBBQVsb2Z0RgkAzAgCCQCkAwEFBWxvZnRUBQNuaWwCAV8FA25pbAIBOgkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIFBXdoS2V5BQhuZXdXaFN0cgUDbmlsBQhuZXdXaFN0cgFpARJmaXhXYXJlaG91c2VGb3JtYXQBC2xhbmRBc3NldElkAwkBAiE9AggFAWkGY2FsbGVyBQxyZXN0Q29udHJhY3QJAAIBAg1BY2Nlc3MgZGVuaWVkBAV3aEtleQkBEmtleVdhcmVob3VzZUJ5TGFuZAEFC2xhbmRBc3NldElkBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFC2xhbmRBc3NldElkBAlsYW5kSW5kZXgJAGkCCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCCQC1CQIIBQVhc3NldAtkZXNjcmlwdGlvbgIBXwULcmVjTGFuZFNpemUFBVNTSVpFBAppbmZyYUxldmVsCQELdmFsdWVPckVsc2UCCQCfCAEJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQULbGFuZEFzc2V0SWQAAAQCd2gJAQxnZXRXYXJlaG91c2UDBQV3aEtleQUJbGFuZEluZGV4BQppbmZyYUxldmVsBAVsb2Z0TAkBBWFzSW50AQkA/AcEBQ9lY29ub215Q29udHJhY3QCGnJlY2FsY0xvY2tlZFZvbHVtZVJFQURPTkxZCQDMCAIFC2xhbmRBc3NldElkCQDMCAIFAndoBQNuaWwFA25pbAQFbG9mdE8JARdnZXRXYXJlaG91c2VPY2N1cGllZFZvbAEFAndoBAVsb2Z0VAkBF2dldFdhcmVob3VzZVRvdGFsVm9sdW1lAQkAkQMCBQJ3aAULd2hJZHhMZXZlbHMEBWxvZnRGCQBlAgkAZQIFBWxvZnRUBQVsb2Z0TAUFbG9mdE8ECG5ld1doU3RyCQC6CQIJAMwIAgkAkQMCBQJ3aAULd2hJZHhMZXZlbHMJAMwIAgkAkQMCBQJ3aAUId2hJZHhSZXMJAMwIAgkAkQMCBQJ3aAUId2hJZHhNYXQJAMwIAgkAkQMCBQJ3aAUJd2hJZHhQcm9kCQDMCAIJALkJAgkAzAgCCQCkAwEFBWxvZnRMCQDMCAIJAKQDAQUFbG9mdE8JAMwIAgkApAMBBQVsb2Z0RgkAzAgCCQCkAwEFBWxvZnRUBQNuaWwCAV8FA25pbAIBOgkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIFBXdoS2V5BQhuZXdXaFN0cgUDbmlsBQhuZXdXaFN0cgFpARdmaXhDb250aW5lbnRQcm9wb3J0aW9ucwEMbGFuZEFzc2V0SWRzAwkBAiE9AggFAWkGY2FsbGVyBQxyZXN0Q29udHJhY3QJAAIBAg1BY2Nlc3MgZGVuaWVkCgEIZ2V0UHJvcHMCA2FjYwRjb250CQDNCAIFA2FjYwkBC3ZhbHVlT3JFbHNlAgkAoggBCQEWa2V5UmVzVHlwZXNCeUNvbnRpbmVudAEFBGNvbnQCCzBfMF8wXzBfMF8wBAFwCgACJGwFCmNvbnRpbmVudHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCGdldFByb3BzAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA1CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQoBCXByb2Nlc3NvcgIDYWNjC2xhbmRBc3NldElkBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFC2xhbmRBc3NldElkBAFkCQC1CQIIBQVhc3NldAtkZXNjcmlwdGlvbgIBXwQJbGFuZEluZGV4CQBpAgkBD251bVBpZWNlc0J5U2l6ZQEJAJEDAgUBZAULcmVjTGFuZFNpemUFBVNTSVpFBARjb250CQCRAwIFAWQFDHJlY0NvbnRpbmVudAQNdGVycmFpbkNvdW50cwkBDWNvdW50VGVycmFpbnMBCQCRAwIFAWQFC3JlY1RlcnJhaW5zBAxjb250aW5lbnRJZHgJAQV2YWx1ZQEJAM8IAgUKY29udGluZW50cwUEY29udAQJY29udFByb3BzCQC1CQIJAJEDAgUDYWNjBQxjb250aW5lbnRJZHgCAV8EB3VwZGF0ZWQJALkJAgkBGXVwZGF0ZVByb3BvcnRpb25zSW50ZXJuYWwEBQljb250UHJvcHMFDXRlcnJhaW5Db3VudHMFCWxhbmRJbmRleAABAgFfBAckbWF0Y2gwBQRjb250AwkAAAICCEFtZXJpY2FzBQckbWF0Y2gwCQDMCAIFB3VwZGF0ZWQJAMwIAgkAkQMCBQNhY2MAAQkAzAgCCQCRAwIFA2FjYwACCQDMCAIJAJEDAgUDYWNjAAMJAMwIAgkAkQMCBQNhY2MABAUDbmlsAwkAAAICBkV1cm9wZQUHJG1hdGNoMAkAzAgCCQCRAwIFA2FjYwAACQDMCAIFB3VwZGF0ZWQJAMwIAgkAkQMCBQNhY2MAAgkAzAgCCQCRAwIFA2FjYwADCQDMCAIJAJEDAgUDYWNjAAQFA25pbAMJAAACAgRBc2lhBQckbWF0Y2gwCQDMCAIJAJEDAgUDYWNjAAAJAMwIAgkAkQMCBQNhY2MAAQkAzAgCBQd1cGRhdGVkCQDMCAIJAJEDAgUDYWNjAAMJAMwIAgkAkQMCBQNhY2MABAUDbmlsAwkAAAICBkFmcmljYQUHJG1hdGNoMAkAzAgCCQCRAwIFA2FjYwAACQDMCAIJAJEDAgUDYWNjAAEJAMwIAgkAkQMCBQNhY2MAAgkAzAgCBQd1cGRhdGVkCQDMCAIJAJEDAgUDYWNjAAQFA25pbAMJAAACAgdPY2VhbmlhBQckbWF0Y2gwCQDMCAIJAJEDAgUDYWNjAAAJAMwIAgkAkQMCBQNhY2MAAQkAzAgCCQCRAwIFA2FjYwACCQDMCAIJAJEDAgUDYWNjAAMJAMwIAgUHdXBkYXRlZAUDbmlsCQACAQIPd3JvbmcgY29udGluZW50BAFyCgACJGwFDGxhbmRBc3NldElkcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFAXAKAQUkZjFfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCXByb2Nlc3NvcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMV8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIVTGlzdCBzaXplIGV4Y2VlZHMgMTAwCQEFJGYxXzICCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEF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aG91bGQgbm90IGNvbnRhaW4gJ19fJzogBQpjdXN0b21OYW1lAwkAZgIJALECAQUKY3VzdG9tTmFtZQUKTUFYTkFNRUxFTgkAAgEJAKwCAgIZTmFtZSB0b28gbG9uZywgbWF4TGVuZ3RoPQkApAMBBQpNQVhOQU1FTEVOBARhZGRyCQClCAEIBQFpDG9yaWdpbkNhbGxlcgQHYWN0aW9ucwQHJG1hdGNoMAUEdHlwZQMJAAACAgdBQ0NPVU5UBQckbWF0Y2gwBApyZXZlcnNlS2V5CQEWa2V5Q3VzdG9tTmFtZVRvQWRkcmVzcwEFCmN1c3RvbU5hbWUECW5hbWVPd25lcgkAoggBBQpyZXZlcnNlS2V5AwkBCWlzRGVmaW5lZAEFCW5hbWVPd25lcgkAAgEJAKwCAgIZTmFtZSBhbHJlYWR5IHJlZ2lzdGVyZWQ6IAUKY3VzdG9tTmFtZQQNYWRkclRvTmFtZUtleQkBFmtleUFkZHJlc3NUb0N1c3RvbU5hbWUBBQRhZGRyBAdvbGROYW1lCQCiCAEFDWFkZHJUb05hbWVLZXkEB2ZyZWVPbGQDCQEJaXNEZWZpbmVkAQUHb2xkTmFtZQkAzAgCCQELRGVsZXRlRW50cnkBCQEWa2V5Q3VzdG9tTmFtZVRvQWRkcmVzcwEJAQV2YWx1ZQEFB29sZE5hbWUFA25pbAUDbmlsCQDOCAIJAM0IAgkAzQgCBQdmcmVlT2xkCQELU3RyaW5nRW50cnkCBQ1hZGRyVG9OYW1lS2V5BQpjdXN0b21OYW1lCQELU3RyaW5nRW50cnkCBQpyZXZlcnNlS2V5BQRhZGRyCAkBFnVwZGF0ZUFjY1N0YXRzSW50ZXJuYWwCBQRhZGRyBQx4cEN1c3RvbU5hbWUCXzEDCQAAAgIETEFORAUHJG1hdGNoMAQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQdhc3NldElkBAd0aW1lS2V5CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFB2Fzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBCQCfCAEFB3RpbWVLZXkJAAIBCQCsAgIIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAQFb3duZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQUHYXNzZXRJZAkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDCQECIT0CBQVvd25lcgUEYWRkcgkAAgEJAKwCAgUKTEFORFBSRUZJWAINIGlzIG5vdCB5b3VycwQKcmV2ZXJzZUtleQkBGmtleUxhbmRDdXN0b21OYW1lVG9Bc3NldElkAQUKY3VzdG9tTmFtZQQJbmFtZU93bmVyCQCiCAEFCnJldmVyc2VLZXkDCQEJaXNEZWZpbmVkAQUJbmFtZU93bmVyCQACAQkArAICAhlOYW1lIGFscmVhZHkgcmVnaXN0ZXJlZDogBQpjdXN0b21OYW1lBA5hc3NldFRvTmFtZUtleQkBGmtleUxhbmRBc3NldElkVG9DdXN0b21OYW1lAQUHYXNzZXRJZAQHb2xkTmFtZQkAoggBBQ5hc3NldFRvTmFtZUtleQQHZnJlZU9sZAMJAQlpc0RlZmluZWQBBQdvbGROYW1lCQDMCAIJAQtEZWxldGVFbnRyeQEJARprZXlMYW5kQ3VzdG9tTmFtZVRvQXNzZXRJZAEJAQV2YWx1ZQEFB29sZE5hbWUFA25pbAUDbmlsCQDOCAIJAM0IAgkAzQgCBQdmcmVlT2xkCQELU3RyaW5nRW50cnkCBQ5hc3NldFRvTmFtZUtleQUKY3VzdG9tTmFtZQkBC1N0cmluZ0VudHJ5AgUKcmV2ZXJzZUtleQUHYXNzZXRJZAgJARZ1cGRhdGVBY2NTdGF0c0ludGVybmFsAgUEYWRkcgUMeHBDdXN0b21OYW1lAl8xAwkAAAICBERVQ0sFByRtYXRjaDAEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQUHYXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQdhc3NldElkAwMJAQEhAQkBCWlzRGVmaW5lZAEJAJ8IAQUHdGltZUtleQYJAQEhAQkBCWlzRGVmaW5lZAEJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgkAAgEJAKwCAggFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkBAVvd25lcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARBrZXlEdWNrSWRUb093bmVyAQUHYXNzZXRJZAkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDCQECIT0CBQVvd25lcgUEYWRkcgkAAgEJAKwCAgUKRFVDS1BSRUZJWAINIGlzIG5vdCB5b3VycwQKcmV2ZXJzZUtleQkBGmtleUR1Y2tDdXN0b21OYW1lVG9Bc3NldElkAQUKY3VzdG9tTmFtZQQJbmFtZU93bmVyCQCiCAEFCnJldmVyc2VLZXkDCQEJaXNEZWZpbmVkAQUJbmFtZU93bmVyCQACAQkArAICAhlOYW1lIGFscmVhZHkgcmVnaXN0ZXJlZDogBQpjdXN0b21OYW1lBA5hc3NldFRvTmFtZUtleQkBGmtleUR1Y2tBc3NldElkVG9DdXN0b21OYW1lAQUHYXNzZXRJZAQHb2xkTmFtZQkAoggBBQ5hc3NldFRvTmFtZUtleQQHZnJlZU9sZAMJAQlpc0RlZmluZWQBBQdvbGROYW1lCQDMCAIJAQtEZWxldGVFbnRyeQEJARprZXlEdWNrQ3VzdG9tTmFtZVRvQXNzZXRJZAEJAQV2YWx1ZQEFB29sZE5hbWUFA25pbAUDbmlsCQDOCAIJAM0IAgkAzQgCBQdmcmVlT2xkCQELU3RyaW5nRW50cnkCBQ5hc3NldFRvTmFtZUtleQUKY3VzdG9tTmFtZQkBC1N0cmluZ0VudHJ5AgUKcmV2ZXJzZUtleQUHYXNzZXRJZAgJARd1cGRhdGVEdWNrU3RhdHNJbnRlcm5hbAIFB2Fzc2V0SWQFDHhwQ3VzdG9tTmFtZQJfMQkAAgECE1Vua25vd24gZW50aXR5IHR5cGUJAJQKAgkAzQgCCQDNCAIFB2FjdGlvbnMJAQ5TY3JpcHRUcmFuc2ZlcgMFD2Vjb25vbXlDb250cmFjdAgFA3BtdAZhbW91bnQFC3VzZHRBc3NldElkBQxwcm9sb2dBY3Rpb24AAAFpAQxzZXRSZWZlcnJhbHMCCW9sZFBsYXllcgluZXdQbGF5ZXIDCQECIT0CCAUBaQ9jYWxsZXJQdWJsaWNLZXkFA3B1YgkAAgECEVBlcm1pc3Npb24gZGVuaWVkBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQDCQEBIQEJAQlpc0RlZmluZWQBCQCmCAEFCW9sZFBsYXllcgkAAgEJAKwCAgIRSW52YWxpZCBhZGRyZXNzOiAFCW9sZFBsYXllcgMJAQEhAQkBCWlzRGVmaW5lZAEJAKYIAQUJbmV3UGxheWVyCQACAQkArAICAhFJbnZhbGlkIGFkZHJlc3M6IAUJbmV3UGxheWVyBAdvbGRzS2V5CQEJa2V5T2xkaWVzAAQEb2xkcwkAoggBBQdvbGRzS2V5BAZvbGRpZXMDCQEJaXNEZWZpbmVkAQUEb2xkcwkAvAkCCQEFdmFsdWUBBQRvbGRzAgFfBQNuaWwDCQEPY29udGFpbnNFbGVtZW50AgUGb2xkaWVzBQluZXdQbGF5ZXIJAAIBCQCsAgIFCW5ld1BsYXllcgImIGlzIG5vdCBuZXdiaWUgKGFscmVhZHkgaGFzIHJlZmVycmFscykECHJlZkJ5S2V5CQEPa2V5QWRkcmVzc1JlZkJ5AQUJbmV3UGxheWVyBAVyZWZCeQkAoggBBQhyZWZCeUtleQMDCQEJaXNEZWZpbmVkAQUFcmVmQnkJAQlpc0RlZmluZWQBCQCmCAEJAQV2YWx1ZQEFBXJlZkJ5BwkAAgEJAKwCAgkArAICBQluZXdQbGF5ZXICFCBhbHJlYWR5IGhhcyByZWZCeTogCQEFdmFsdWUBBQVyZWZCeQQHcmVmc0tleQkBE2tleUFkZHJlc3NSZWZlcnJhbHMBBQlvbGRQbGF5ZXIEBHJlZnMJAKIIAQUHcmVmc0tleQQJcmVmc0FycmF5AwkBCWlzRGVmaW5lZAEFBHJlZnMJALwJAgkBBXZhbHVlAQUEcmVmcwIBXwUDbmlsAwkBD2NvbnRhaW5zRWxlbWVudAIFCXJlZnNBcnJheQUJbmV3UGxheWVyCQACAQkArAICCQCsAgIJAKwCAgUJb2xkUGxheWVyAhIgYWxyZWFkeSBjb250YWlucyAFCW5ld1BsYXllcgIRIHdpdGhpbiByZWZlcnJhbHMEB25ld1JlZnMJALoJAgkAzQgCBQlyZWZzQXJyYXkFCW5ld1BsYXllcgIBXwQHbmV3T2xkcwMJAQ9jb250YWluc0VsZW1lbnQCBQZvbGRpZXMFCW9sZFBsYXllcgkBBXZhbHVlAQUEb2xkcwkAugkCCQDNCAIFBm9sZGllcwUJb2xkUGxheWVyAgFfCQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgUIcmVmQnlLZXkFCW9sZFBsYXllcgkAzAgCCQELU3RyaW5nRW50cnkCBQdyZWZzS2V5BQduZXdSZWZzCQDMCAIJAQtTdHJpbmdFbnRyeQIFB29sZHNLZXkFB25ld09sZHMJAMwIAgUMcHJvbG9nQWN0aW9uBQNuaWwAAAFpARBkaXN0cmlidXRlUG9pbnRzBQhzdHJlbmd0aAhhY2N1cmFjeQlpbnRlbGxlY3QJZW5kdXJhbmNlCWRleHRlcml0eQQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBARhZGRyCQClCAEIBQFpDG9yaWdpbkNhbGxlcgQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkBApmcmVlS2V5QWNjCQERa2V5VXNlckZyZWVQb2ludHMBBQRhZGRyBA1mcmVlUG9pbnRzQWNjCQELdmFsdWVPckVsc2UCCQCaCAIFD3N0YWtpbmdDb250cmFjdAUKZnJlZUtleUFjYwAABAtmcmVlS2V5RHVjawkBEWtleUR1Y2tGcmVlUG9pbnRzAQULZHVja0Fzc2V0SWQEDmZyZWVQb2ludHNEdWNrCQELdmFsdWVPckVsc2UCCQCaCAIFD3N0YWtpbmdDb250cmFjdAULZnJlZUtleUR1Y2sAAAQHc3VtRnJlZQkAZAIFDWZyZWVQb2ludHNBY2MFDmZyZWVQb2ludHNEdWNrBA9zdW1Ub0Rpc3RyaWJ1dGUJAGQCCQBkAgkAZAIJAGQCBQhzdHJlbmd0aAUIYWNjdXJhY3kFCWludGVsbGVjdAUJZW5kdXJhbmNlBQlkZXh0ZXJpdHkDCQBmAgUPc3VtVG9EaXN0cmlidXRlBQdzdW1GcmVlCQACAQkArAICCQCsAgICD1RoZXJlIGFyZSBvbmx5IAkApAMBBQdzdW1GcmVlAhogZnJlZSBwb2ludHMgdG8gZGlzdHJpYnV0ZQQIY2hhcnNLZXkJAQxrZXlEdWNrQ2hhcnMBBQtkdWNrQXNzZXRJZAQFY2hhcnMJALUJAgkBC3ZhbHVlT3JFbHNlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QFCGNoYXJzS2V5AgkwXzBfMF8wXzACAV8EBm5ld0FjYwkAZQIFDWZyZWVQb2ludHNBY2MFD3N1bVRvRGlzdHJpYnV0ZQkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQpmcmVlS2V5QWNjAwkAZgIAAAUGbmV3QWNjAAAFBm5ld0FjYwkAzAgCCQEMSW50ZWdlckVudHJ5AgULZnJlZUtleUR1Y2sDCQBmAgAABQZuZXdBY2MJAGQCBQ5mcmVlUG9pbnRzRHVjawUGbmV3QWNjBQ5mcmVlUG9pbnRzRHVjawkAzAgCCQELU3RyaW5nRW50cnkCBQhjaGFyc0tleQkAuQkCCQDMCAIJAKQDAQkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVjaGFycwUMY2hhclN0cmVuZ3RoBQhzdHJlbmd0aAkAzAgCCQCkAwEJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFY2hhcnMFDGNoYXJBY2N1cmFjeQUIYWNjdXJhY3kJAMwIAgkApAMBCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBWNoYXJzBQ1jaGFySW50ZWxsZWN0BQlpbnRlbGxlY3QJAMwIAgkApAMBCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBWNoYXJzBQ1jaGFyRW5kdXJhbmNlBQllbmR1cmFuY2UJAMwIAgkApAMBCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBWNoYXJzBQ1jaGFyRGV4dGVyaXR5BQlkZXh0ZXJpdHkFA25pbAIBXwkAzAgCBQxwcm9sb2dBY3Rpb24FA25pbAAAAWkBHHNwbGl0QnlHbG9iYWxXZWlnaHRzUkVBRE9OTFkBBmFtb3VudAkAlAoCBQNuaWwJARJnZXROZWVkZWRNYXRlcmlhbHMBBQZhbW91bnQBaQEkc3BsaXRCeUdsb2JhbEFuZExvY2FsV2VpZ2h0c1JFQURPTkxZAwltYXRBbW91bnQJcmVzQW1vdW50CHRlcnJhaW5zBA10ZXJyYWluQ291bnRzCQENY291bnRUZXJyYWlucwEFCHRlcnJhaW5zCQCUCgIFA25pbAkAlAoCCQESZ2V0TmVlZGVkTWF0ZXJpYWxzAQUJbWF0QW1vdW50CQETZGlzdHJpYnV0ZUJ5V2VpZ2h0cwIFCXJlc0Ftb3VudAUNdGVycmFpbkNvdW50cwFpARNnZXRCYWNrcGFja1JFQURPTkxZAQtkdWNrQXNzZXRJZAkAlAoCBQNuaWwJALkJAgkBC2dldEJhY2twYWNrAQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQCAToBaQEUZ2V0V2FyZWhvdXNlUkVBRE9OTFkBC2xhbmRBc3NldElkBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFC2xhbmRBc3NldElkBAlsYW5kSW5kZXgJAGkCCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCCQC1CQIIBQVhc3NldAtkZXNjcmlwdGlvbgIBXwULcmVjTGFuZFNpemUFBVNTSVpFBAppbmZyYUxldmVsCQELdmFsdWVPckVsc2UCCQCfCAEJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQULbGFuZEFzc2V0SWQAAAkAlAoCBQNuaWwJALoJAgkBDGdldFdhcmVob3VzZQMJARJrZXlXYXJlaG91c2VCeUxhbmQBBQtsYW5kQXNzZXRJZAUJbGFuZEluZGV4BQppbmZyYUxldmVsAgE6AWkBCnNhdmVMYXN0VHgABAZjYWxsZXIIBQFpBmNhbGxlcgMDAwkBAiE9AgUGY2FsbGVyBQt3bGdDb250cmFjdAkBAiE9AgUGY2FsbGVyBQ9lY29ub215Q29udHJhY3QHCQECIT0CBQZjYWxsZXIFEnRvdXJuYW1lbnRDb250cmFjdAcJAAIBAg1BY2Nlc3MgZGVuaWVkCQCUCgIJAMwIAgkBBnByb2xvZwEFAWkFA25pbAAqAWkBD3VwZGF0ZUR1Y2tTdGF0cwILZHVja0Fzc2V0SWQHZGVsdGFYUAMJAQIhPQIIBQFpBmNhbGxlcgUPZWNvbm9teUNvbnRyYWN0CQACAQINQWNjZXNzIGRlbmllZAkBF3VwZGF0ZUR1Y2tTdGF0c0ludGVybmFsAgULZHVja0Fzc2V0SWQFB2RlbHRhWFABaQEOdXBkYXRlQWNjU3RhdHMCBGFkZHIHZGVsdGFYUAMJAQIhPQIIBQFpBmNhbGxlcgUPZWNvbm9teUNvbnRyYWN0CQACAQINQWNjZXNzIGRlbmllZAkBFnVwZGF0ZUFjY1N0YXRzSW50ZXJuYWwCBQRhZGRyBQdkZWx0YVhQAWkBCWVxdWlwRHVjawEJZXF1aXBtZW50BAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBGFkZHIJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFBGFkZHICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQDCQEPY2hlY2tUb3VybmFtZW50AQULZHVja0Fzc2V0SWQJAAIBAhllcXVpcER1Y2tfY2hlY2tUb3VybmFtZW50BAVlcUtleQkBEGtleUR1Y2tFcXVpcG1lbnQBBQtkdWNrQXNzZXRJZAQLY3VycmVudFNlZ3MJALUJAgkBC3ZhbHVlT3JFbHNlAgkAoggBBQVlcUtleQIXLDssXyw7LF8sOyxfLDssXyw7LF8sOywCAV8EBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BAVuZXdFcQkAtQkCBQllcXVpcG1lbnQCAV8DCQECIT0CCQCQAwEFBW5ld0VxBQtOVU1TRUdNRU5UUwkAAgECFldyb25nIGVxdWlwbWVudCBzdHJpbmcECXRlbXBQcm9kQgkBBmRyZXNzQgQFC2N1cnJlbnRTZWdzCQEOcHJvZFN0clRvQnl0ZXMBCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QGBQNuaWwECHNlZ0JwQXV4CQCRAwIJALUJAgkAkQMCBQVuZXdFcQULc2VnQmFja3BhY2sCATsAAQQKYnVmZkVmZmVjdAMJAAACBQhzZWdCcEF1eAIAAAAEBGF1eDAJAJEDAgkAtQkCBQhzZWdCcEF1eAIBLAAAAwkAAAIFBGF1eDACAAAABAZpZHhDbnQJALUJAgUEYXV4MAIBOgQDaWR4CQCRAwIFBmlkeENudAAABANjbnQJAJEDAgUGaWR4Q250AAEDAwMDAwkAAAIFA2lkeAICMDYGCQAAAgUDaWR4AgIwNwYJAAACBQNpZHgCAjA4CQECIT0CBQNjbnQCAAcJAGYCCQENcGFyc2VJbnRWYWx1ZQEFA2NudAAABwkBDXBhcnNlSW50VmFsdWUBCQCRAwIJALUJAgkAkQMCBRBwcm9kdWN0aW9uTWF0cml4CQENcGFyc2VJbnRWYWx1ZQEFA2lkeAIBXwUKcklkeEVmZmVjdAAABAVzdGF0cwkBDGdldER1Y2tTdGF0cwQFBHRoaXMFC2R1Y2tBc3NldElkBQpidWZmRWZmZWN0BgQIbmV3UHJvZEIJAQZkcmVzc0IEBQVuZXdFcQUJdGVtcFByb2RCBwUFc3RhdHMECm5ld1Byb2RTdHIJAQ5ieXRlc1RvUHJvZFN0cgEFCG5ld1Byb2RCCQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgUFZXFLZXkFCWVxdWlwbWVudAkAzAgCCQELU3RyaW5nRW50cnkCBQVicEtleQkAugkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQJAMwIAgUKbmV3UHJvZFN0cgUDbmlsAgE6CQDMCAIJAQtTdHJpbmdFbnRyeQIJAQxrZXlEdWNrQnVmZnMBBQtkdWNrQXNzZXRJZAkAuQkCCQDMCAIJAKQDAQkAkQMCBQVzdGF0cwAHCQDMCAIJAKQDAQkAkQMCBQVzdGF0cwAICQDMCAIJAKQDAQkAkQMCBQVzdGF0cwAJCQDMCAIJAKQDAQkAkQMCBQVzdGF0cwAKCQDMCAIJAKQDAQkAkQMCBQVzdGF0cwALBQNuaWwCAV8JAMwIAgUMcHJvbG9nQWN0aW9uBQNuaWwAAAFpAQ9mb3J0aWZpY2F0ZUxhbmQCC2xhbmRBc3NldElkBHBsYW4EDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQEYWRkcgkApQgBCAUBaQxvcmlnaW5DYWxsZXIEC2R1Y2tBc3NldElkCQELdmFsdWVPckVsc2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFBGFkZHICAAQJZHVja1N0YXRzCQEMZ2V0RHVja1N0YXRzBAUEdGhpcwULZHVja0Fzc2V0SWQAAAcEB2ZvcnRLZXkJARdrZXlGb3J0aWZpY2F0aW9uc0J5TGFuZAEFC2xhbmRBc3NldElkBAxjdXJyZW50Rm9ydHMJALUJAgkBC3ZhbHVlT3JFbHNlAgkAoggBBQdmb3J0S2V5Agw6MF8xNTowXzE4OjACAV8EBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQULbGFuZEFzc2V0SWQECWxhbmRJbmRleAkAaQIJAQ9udW1QaWVjZXNCeVNpemUBCQCRAwIJALUJAggFBWFzc2V0C2Rlc2NyaXB0aW9uAgFfBQtyZWNMYW5kU2l6ZQUFU1NJWkUECmluZnJhTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAAABAV3aEtleQkBEmtleVdhcmVob3VzZUJ5TGFuZAEFC2xhbmRBc3NldElkBAJ3aAkBDGdldFdhcmVob3VzZQMFBXdoS2V5BQlsYW5kSW5kZXgFCmluZnJhTGV2ZWwEB2N1ckxvZnQJALUJAgkAkQMCBQJ3aAUJd2hJZHhMT0ZUAgFfBARjdXJPCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHY3VyTG9mdAULdm9sT2NjdXBpZWQEBGN1ckYJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdjdXJMb2Z0BQd2b2xGcmVlBAhuZXdGb3J0cwkAtQkCBQRwbGFuAgFfBA0kdDA5NTMyNTk1NDQwCQEFZm9ydEIGBQxjdXJyZW50Rm9ydHMJAQ5wcm9kU3RyVG9CeXRlcwEJAJEDAgUCd2gFCXdoSWR4UHJvZAUEY3VyTwUEY3VyRgYFA25pbAQJdGVtcFByb2RCCAUNJHQwOTUzMjU5NTQ0MAJfMQQFdGVtcE8IBQ0kdDA5NTMyNTk1NDQwAl8yBAV0ZW1wRggFDSR0MDk1MzI1OTU0NDACXzMEDSR0MDk1NDQzOTU1MzkJAQVmb3J0QgYFCG5ld0ZvcnRzBQl0ZW1wUHJvZEIFBXRlbXBPBQV0ZW1wRgcFCWR1Y2tTdGF0cwQIbmV3UHJvZEIIBQ0kdDA5NTQ0Mzk1NTM5Al8xBARuZXdPCAUNJHQwOTU0NDM5NTUzOQJfMgQEbmV3RggFDSR0MDk1NDQzOTU1MzkCXzMECm5ld1Byb2RTdHIJAQ5ieXRlc1RvUHJvZFN0cgEFCG5ld1Byb2RCBApuZXdMb2Z0U3RyCQC5CQIJAMwIAgkAkQMCBQdjdXJMb2Z0BQl2b2xMb2NrZWQJAMwIAgkApAMBBQRuZXdPCQDMCAIJAKQDAQUEbmV3RgkAzAgCCQCRAwIFB2N1ckxvZnQFCHZvbFRvdGFsBQNuaWwCAV8JAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCBQdmb3J0S2V5BQRwbGFuCQDMCAIJAQtTdHJpbmdFbnRyeQIFBXdoS2V5CQC6CQIJAMwIAgkAkQMCBQJ3aAULd2hJZHhMZXZlbHMJAMwIAgkAkQMCBQJ3aAUId2hJZHhSZXMJAMwIAgkAkQMCBQJ3aAUId2hJZHhNYXQJAMwIAgUKbmV3UHJvZFN0cgkAzAgCBQpuZXdMb2Z0U3RyBQNuaWwCAToJAMwIAgUMcHJvbG9nQWN0aW9uBQNuaWwAAAFpARNpbml0RHVja1RvdXJBdHRlbXB0AQtkdWNrQXNzZXRJZAMJAQIhPQIIBQFpBmNhbGxlcgUSdG91cm5hbWVudENvbnRyYWN0CQACAQINQWNjZXNzIGRlbmllZAQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQQJa2V5SGVhbHRoCQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkBAVtYXhIUAkBCW1heEhlYWx0aAEJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBDGtleUR1Y2tMZXZlbAEFC2R1Y2tBc3NldElkAAAECWN1ckhlYWx0aAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlrZXlIZWFsdGgFBW1heEhQBAljdXJMb2NLZXkJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAQLY3VyTG9jYXRpb24JAQt2YWx1ZU9yRWxzZQIJAKIIAQUJY3VyTG9jS2V5BQ9ERUZBVUxUTE9DQVRJT04EBmxhc3RJZAkBC3ZhbHVlT3JFbHNlAgkAmggCBRJ0b3VybmFtZW50Q29udHJhY3QFDWxhc3RUb3VySWRLZXkAAAQMdG91ckxvY2F0aW9uCQCsAgIJAKQDAQUGbGFzdElkAgRfVF8wCQCUCgIJAMwIAgUMcHJvbG9nQWN0aW9uCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOa2V5U2F2ZWRIZWFsdGgBBQtkdWNrQXNzZXRJZAUJY3VySGVhbHRoCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlrZXlIZWFsdGgFBW1heEhQCQDMCAIJAQtTdHJpbmdFbnRyeQIJARBrZXlTYXZlZExvY2F0aW9uAQULZHVja0Fzc2V0SWQFC2N1ckxvY2F0aW9uCQDMCAIJAQtTdHJpbmdFbnRyeQIFCWN1ckxvY0tleQUMdG91ckxvY2F0aW9uBQNuaWwFDHRvdXJMb2NhdGlvbgFpAQxicmVha0F0dGVtcHQABAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkBAljdXJMb2NLZXkJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAQLY3VyTG9jYXRpb24JAQt2YWx1ZU9yRWxzZQIJAKIIAQUJY3VyTG9jS2V5BQ9ERUZBVUxUTE9DQVRJT04DCQECIT0CCQCRAwIJALUJAgULY3VyTG9jYXRpb24CAV8FCmxvY0lkeFR5cGUCAVQJAAIBAiJZb3VyIGR1Y2sgaXMgbm90IGluIHRoZSB0b3VybmFtZW50BAtzYXZlZEhlYWx0aAkBEUBleHRyTmF0aXZlKDEwNTUpAQkBDmtleVNhdmVkSGVhbHRoAQULZHVja0Fzc2V0SWQEDXNhdmVkTG9jYXRpb24JARFAZXh0ck5hdGl2ZSgxMDU4KQEJARBrZXlTYXZlZExvY2F0aW9uAQULZHVja0Fzc2V0SWQJAJQKAgkAzAgCBQxwcm9sb2dBY3Rpb24JAMwIAgkBDEludGVnZXJFbnRyeQIJAQ1rZXlEdWNrSGVhbHRoAQULZHVja0Fzc2V0SWQFC3NhdmVkSGVhbHRoCQDMCAIJAQtTdHJpbmdFbnRyeQIFCWN1ckxvY0tleQUNc2F2ZWRMb2NhdGlvbgUDbmlsBQtjdXJMb2NhdGlvbgFpARZleGl0VG91cm5hbWVudEludGVybmFsAQtkdWNrQXNzZXRJZAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECDUFjY2VzcyBkZW5pZWQEC3NhdmVkSGVhbHRoCQERQGV4dHJOYXRpdmUoMTA1NSkBCQEOa2V5U2F2ZWRIZWFsdGgBBQtkdWNrQXNzZXRJZAQNc2F2ZWRMb2NhdGlvbgkBEUBleHRyTmF0aXZlKDEwNTgpAQkBEGtleVNhdmVkTG9jYXRpb24BBQtkdWNrQXNzZXRJZAkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkBQtzYXZlZEhlYWx0aAkAzAgCCQELU3RyaW5nRW50cnkCCQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQFDXNhdmVkTG9jYXRpb24FA25pbAAAAWkBDnByZXBhcmVSb2JiZXJ5AgdtZXNzYWdlA3NpZwQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQEhAQkAxBMDBQdtZXNzYWdlBQNzaWcFA3B1YgkAAgECGHNpZ25hdHVyZSBkb2VzIG5vdCBtYXRjaAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECImV4YWN0bHkgMSBwYXltZW50IG11c3QgYmUgYXR0YWNoZWQEA3BtdAkAkQMCCAUBaQhwYXltZW50cwAABAZ3bGdBbXQIBQNwbXQGYW1vdW50AwMJAQEhAQkBCWlzRGVmaW5lZAEIBQNwbXQHYXNzZXRJZAYJAQIhPQIJAQV2YWx1ZQEIBQNwbXQHYXNzZXRJZAUKd2xnQXNzZXRJZAkAAgECFVdMR09MRCBwYXltZW50cyBvbmx5IQQFcGFydHMJALUJAgkAsAkBBQdtZXNzYWdlAgF8AwkBAiE9AgkAkAMBBQVwYXJ0cwACCQACAQIUV3JvbmcgbWVzc2FnZSBmb3JtYXQEC2R1Y2tBc3NldElkCQCRAwIFBXBhcnRzAAAEB3JvYkNvc3QICQEOZ2V0Um9iYmVyeURhdGECBQR0aGlzBQtkdWNrQXNzZXRJZAJfMQMJAGYCBQdyb2JDb3N0BQZ3bGdBbXQJAAIBCQCsAgIJAKwCAgkArAICAghQYXltZW50IAkApAMBBQZ3bGdBbXQCDCA8IHJlcXVpcmVkIAkApAMBBQdyb2JDb3N0BApjYW5kaWRhdGVzCQC1CQIJAJEDAgUFcGFydHMAAQIBXwQDbm93CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQJZHVja1N0YXRlCQELdmFsdWVPckVsc2UCCQCfCAEJARNrZXlEdWNrUm9iYmVyeVN0YXRlAQULZHVja0Fzc2V0SWQAAAQKbG9ja2VkTGFuZAkBC3ZhbHVlT3JFbHNlAgkAoggBCQETa2V5TG9ja2VkTGFuZEJ5RHVjawEFC2R1Y2tBc3NldElkAgAEB2xhbmRFVEEJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBEmtleUxhbmRDb29sZG93bkVUQQEFCmxvY2tlZExhbmQAAAMDCQECIT0CBQlkdWNrU3RhdGUFC2R1Y2tJZHhGcmVlCQBmAgUHbGFuZEVUQQUDbm93BwkAAgEJAKwCAgInWW91IGFscmVhZHkgc3RhcnRlZCByb2JiaW5nLCB3YWl0IHRpbGwgCQCkAwEFB2xhbmRFVEEKAQdjaGVja2VyAgNhY2MLbGFuZEFzc2V0SWQEBXN0YXRlCQELdmFsdWVPckVsc2UCCQCfCAEJARNrZXlMYW5kUm9iYmVyeVN0YXRlAQULbGFuZEFzc2V0SWQAAAQLY29vbGRvd25FVEEJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBEmtleUxhbmRDb29sZG93bkVUQQEFC2xhbmRBc3NldElkAAADCQBmAgUFc3RhdGUJAJADAQUQbGFuZFJvYkNvb2xkb3ducwkAAgECDUludmFsaWQgc3RhdGUDCQBmAgUDbm93BQtjb29sZG93bkVUQQQKc3Rha2VkVGltZQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkAAADCQBnAgAABQpzdGFrZWRUaW1lBQNhY2MEAWEJAQV2YWx1ZQEJAOwHAQkA2QQBBQtsYW5kQXNzZXRJZAQBZAkAtQkCCAUBYQtkZXNjcmlwdGlvbgIBXwQGcGllY2VzCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCBQFkBQtyZWNMYW5kU2l6ZQQMcHJvZHVjdGl2aXR5CQEMYXBwbHlCb251c2VzAgULbGFuZEFzc2V0SWQFBnBpZWNlcwQJZGVsdGFUaW1lCQBlAgUDbm93BQpzdGFrZWRUaW1lBAhhdmFpbFJlcwkAawMFCWRlbHRhVGltZQkAaAIFDHByb2R1Y3Rpdml0eQUGcGllY2VzBQlEQVlNSUxMSVMDCQBmAgUOTUlOX1JFU19UT19ST0IFCGF2YWlsUmVzBQNhY2MJAM0IAgUDYWNjBQtsYW5kQXNzZXRJZAUDYWNjBAhmaWx0ZXJlZAoAAiRsBQpjYW5kaWRhdGVzCgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQdjaGVja2VyAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAwkAAAIJAJADAQUIZmlsdGVyZWQAAAkAAgECGU5vIGNhbmRpZGF0ZXMgZm9yIHJvYmJlcnkEBnJuZElkeAkBD2dldFJhbmRvbU51bWJlcgMJAJADAQUIZmlsdGVyZWQFBmhlaWdodAkAywECBQNzaWcIBQFpDXRyYW5zYWN0aW9uSWQEC2xhbmRBc3NldElkCQCRAwIFCGZpbHRlcmVkBQZybmRJZHgJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBE2tleUxhbmRSb2JiZXJ5U3RhdGUBBQtsYW5kQXNzZXRJZAUMcm9iSWR4TG9ja2VkCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQESa2V5TGFuZENvb2xkb3duRVRBAQULbGFuZEFzc2V0SWQJAGQCBQNub3cJAJEDAgUQbGFuZFJvYkNvb2xkb3ducwUMcm9iSWR4TG9ja2VkCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQETa2V5RHVja1JvYmJlcnlTdGF0ZQEFC2R1Y2tBc3NldElkBRBkdWNrSWR4UHJlcGFyaW5nCQDMCAIJAQtTdHJpbmdFbnRyeQIJARNrZXlMb2NrZWRMYW5kQnlEdWNrAQULZHVja0Fzc2V0SWQFC2xhbmRBc3NldElkCQDMCAIFDHByb2xvZ0FjdGlvbgUDbmlsBQtsYW5kQXNzZXRJZACjpCtu", "height": 2729348, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 75nWtPxRXwVz43cS7bjSoVAMGsVxBY4aiLMRxU297fUF Next: ExHCXk3siyLGC5MAn48MckLCiryUuSVKwCNo8ZhnwVLR Diff:
Old | New | Differences | |
---|---|---|---|
44 | 44 | ||
45 | 45 | let v = 1 | |
46 | 46 | ||
47 | - | func w (x) = ("duckHealth_" + x) | |
48 | - | ||
49 | - | ||
50 | - | func y (x) = ("duckChars_" + x) | |
51 | - | ||
52 | - | ||
53 | - | func z (x) = ("duckXP_" + x) | |
54 | - | ||
55 | - | ||
56 | - | func A (x) = ("duckLevel_" + x) | |
57 | - | ||
58 | - | ||
59 | - | func B (x) = ("duckFreePoints_" + x) | |
60 | - | ||
61 | - | ||
62 | - | func C (x) = ("duckEquipment_" + x) | |
63 | - | ||
64 | - | ||
65 | - | func D (b) = ("userXP_" + b) | |
66 | - | ||
67 | - | ||
68 | - | func E (b) = ("userLevel_" + b) | |
69 | - | ||
70 | - | ||
71 | - | func F (b) = ("userFreePoints_" + b) | |
72 | - | ||
73 | - | ||
74 | - | func G (x) = ("savedHealth_" + x) | |
75 | - | ||
76 | - | ||
77 | - | func H (x) = ("savedLocation_" + x) | |
78 | - | ||
79 | - | ||
80 | - | func I (x) = ("duckBuffs_" + x) | |
81 | - | ||
82 | - | ||
83 | - | func J (x) = ("lastRobberyTime_" + x) | |
84 | - | ||
85 | - | ||
86 | - | func K (x) = ("lastRobberyCost_" + x) | |
87 | - | ||
88 | - | ||
89 | - | func L (M) = ("landRobberyState_" + M) | |
90 | - | ||
91 | - | ||
92 | - | func N (M) = ("landCooldownETA_" + M) | |
93 | - | ||
94 | - | ||
95 | - | let O = 10000 | |
96 | - | ||
97 | - | let P = 10000 | |
98 | - | ||
99 | - | let Q = 2000 | |
100 | - | ||
101 | - | let R = 100000 | |
102 | - | ||
103 | - | let S = 1000000 | |
104 | - | ||
105 | - | let T = 5000000 | |
106 | - | ||
107 | - | let U = 10000 | |
108 | - | ||
109 | - | let V = 1000000 | |
47 | + | let w = 0 | |
48 | + | ||
49 | + | let x = 1 | |
50 | + | ||
51 | + | func y (z) = ("duckHealth_" + z) | |
52 | + | ||
53 | + | ||
54 | + | func A (z) = ("duckChars_" + z) | |
55 | + | ||
56 | + | ||
57 | + | func B (z) = ("duckXP_" + z) | |
58 | + | ||
59 | + | ||
60 | + | func C (z) = ("duckLevel_" + z) | |
61 | + | ||
62 | + | ||
63 | + | func D (z) = ("duckFreePoints_" + z) | |
64 | + | ||
65 | + | ||
66 | + | func E (z) = ("duckEquipment_" + z) | |
67 | + | ||
68 | + | ||
69 | + | func F (b) = ("userXP_" + b) | |
70 | + | ||
71 | + | ||
72 | + | func G (b) = ("userLevel_" + b) | |
73 | + | ||
74 | + | ||
75 | + | func H (b) = ("userFreePoints_" + b) | |
76 | + | ||
77 | + | ||
78 | + | func I (z) = ("savedHealth_" + z) | |
79 | + | ||
80 | + | ||
81 | + | func J (z) = ("savedLocation_" + z) | |
82 | + | ||
83 | + | ||
84 | + | func K (z) = ("duckBuffs_" + z) | |
85 | + | ||
86 | + | ||
87 | + | func L (z) = ("lastRobberyTime_" + z) | |
88 | + | ||
89 | + | ||
90 | + | func M (z) = ("lastRobberyCost_" + z) | |
91 | + | ||
92 | + | ||
93 | + | func N (O) = ("landRobberyState_" + O) | |
94 | + | ||
95 | + | ||
96 | + | func P (O) = ("landCooldownETA_" + O) | |
97 | + | ||
98 | + | ||
99 | + | func Q (z) = ("duckRobberyState_" + z) | |
100 | + | ||
101 | + | ||
102 | + | func R (z) = ("lockedLandByDuck_" + z) | |
103 | + | ||
104 | + | ||
105 | + | let S = 10000 | |
106 | + | ||
107 | + | let T = 10000 | |
108 | + | ||
109 | + | let U = 2000 | |
110 | + | ||
111 | + | let V = 100000 | |
110 | 112 | ||
111 | 113 | let W = 1000000 | |
112 | 114 | ||
113 | - | let X = 10000 | |
114 | - | ||
115 | - | func Y (Z) = fraction(d, pow(Z, 4, e, 4, 4, DOWN), c) | |
116 | - | ||
117 | - | ||
118 | - | func aa (ab) = (100 + ab) | |
119 | - | ||
120 | - | ||
121 | - | func ac (ad,ae) = { | |
122 | - | let af = Y(ae) | |
123 | - | [af, (f * (af - ad))] | |
124 | - | } | |
125 | - | ||
126 | - | ||
127 | - | func ag (ah,x,ai,aj) = { | |
128 | - | let ak = split(valueOrElse(getString(ah, y(x)), "0_0_0_0_0"), "_") | |
129 | - | let al = valueOrElse(getInteger(ah, A(x)), 0) | |
130 | - | let am = valueOrElse(getInteger(ah, w(x)), aa(al)) | |
131 | - | let an = split(valueOrElse(getString(ah, I(x)), "0_0_0_0_0"), "_") | |
132 | - | ([parseIntValue(ak[j]), parseIntValue(ak[k]), parseIntValue(ak[l]), parseIntValue(ak[m]), parseIntValue(ak[n]), al, am] ++ (if (aj) | |
133 | - | then [ai, ai, ai, ai, ai] | |
134 | - | else [parseIntValue(an[j]), parseIntValue(an[k]), parseIntValue(an[l]), parseIntValue(an[m]), parseIntValue(an[n])])) | |
135 | - | } | |
136 | - | ||
137 | - | ||
138 | - | func ao (ah,x) = { | |
139 | - | let ap = valueOrElse(getInteger(ah, K(x)), 0) | |
140 | - | let aq = valueOrElse(getInteger(ah, J(x)), 0) | |
141 | - | let ar = lastBlock.timestamp | |
142 | - | let as = max([g, (ap - (h * (ar - aq)))]) | |
143 | - | $Tuple2(as, aq) | |
144 | - | } | |
145 | - | ||
146 | - | ||
147 | - | let at = "LAND" | |
148 | - | ||
149 | - | let au = "DUCK" | |
150 | - | ||
151 | - | let av = "PRESALE" | |
152 | - | ||
153 | - | let aw = 6 | |
154 | - | ||
155 | - | let ax = 25 | |
156 | - | ||
157 | - | let ay = 3456000 | |
158 | - | ||
159 | - | let az = 86400000 | |
160 | - | ||
161 | - | let aA = 10000000000 | |
162 | - | ||
163 | - | let aB = "Africa_F_Africa" | |
164 | - | ||
165 | - | let aC = 39637 | |
166 | - | ||
167 | - | let aD = 10 | |
168 | - | ||
169 | - | let aE = ["First Aid Kit L1", "First Aid Kit L2", "First Aid Kit L3", "Backpack L1", "Backpack L2", "Backpack L3", "Food Ration L1", "Food Ration L2", "Food Ration L3", "Jet Pack L1", "Jet Pack L2", "Jet Pack L3", "Shield L1", "Shield L2", "Shield L3", "Mine L1", "Mine L2", "Mine L3", "Trap L1", "Trap L2", "Trap L3"] | |
170 | - | ||
171 | - | let aF = ["Americas", "Europe", "Asia", "Africa", "Oceania"] | |
172 | - | ||
173 | - | let aG = 10000000 | |
174 | - | ||
175 | - | let aH = [15, 16, 17, 18, 19, 20] | |
176 | - | ||
177 | - | let aI = ["8_8_8_17_17_42_12_0_30_0,0,0,0,0,0,0_", "8_8_8_17_17_42_24_0_60_0,0,5,2,0,0,0_", "8_8_8_17_17_42_36_0_120_0,0,10,4,0,0,0_", "8_19_19_8_27_19_26_1_20_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_52_1_40_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_78_1_80_0,0,0,0,0,0,0_001", "8_8_8_8_8_60_13_2_2_0,0,0,0,0,0,0_011", "8_8_8_8_8_60_26_2_4_0,0,0,0,0,0,0_011", "8_8_8_8_8_60_39_2_8_0,0,0,0,0,0,0_011", "30_30_3_17_17_3_30_3_30_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_60_3_50_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_90_3_70_0,0,0,0,0,0,0_111", "18_18_10_18_18_18_11_4_30_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_22_4_50_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_33_4_70_0,0,0,0,0,0,0_201", "4_13_22_4_35_22_23_0_50,1,0_0,0,0,0,0,0,0_", "4_13_22_4_35_22_46_0_50,1,1_0,2,5,0,0,0,0_", "4_13_22_4_35_22_69_0_50,2,1_0,5,10,0,0,0,0_", "5_25_40_5_10_15_20_1_30,1,1_0,0,0,0,0,0,0_", "5_25_40_5_10_15_40_1_30,1,2_2,1,3,0,0,0,0_", "5_25_40_5_10_15_60_1_30,1,3_5,2,8,0,0,0,0_"] | |
178 | - | ||
179 | - | let aJ = 6 | |
180 | - | ||
181 | - | let aK = 8 | |
182 | - | ||
183 | - | let aL = 9 | |
184 | - | ||
185 | - | let aM = 10 | |
186 | - | ||
187 | - | let aN = 10 | |
188 | - | ||
189 | - | let aO = 0 | |
190 | - | ||
191 | - | let aP = 1 | |
192 | - | ||
193 | - | let aQ = 2 | |
194 | - | ||
195 | - | let aR = 3 | |
196 | - | ||
197 | - | let aS = 4 | |
198 | - | ||
199 | - | let aT = 0 | |
200 | - | ||
201 | - | let aU = 1 | |
202 | - | ||
203 | - | let aV = 2 | |
204 | - | ||
205 | - | let aW = 3 | |
206 | - | ||
207 | - | let aX = 0 | |
208 | - | ||
209 | - | let aY = 1 | |
210 | - | ||
211 | - | let aZ = 2 | |
212 | - | ||
213 | - | let ba = 3 | |
214 | - | ||
215 | - | func bb (b) = ("lastTxIdByUser_" + b) | |
216 | - | ||
217 | - | ||
218 | - | func bc (bd) = ("nftOwner_" + bd) | |
219 | - | ||
220 | - | ||
221 | - | func be (bd) = ("landCustomNameByAssetId_" + bd) | |
222 | - | ||
223 | - | ||
224 | - | func bf (bd) = ("stakedTime_" + bd) | |
225 | - | ||
226 | - | ||
227 | - | func bg (bh,bd) = makeString(["landArtStatus", bh, bd], "_") | |
228 | - | ||
229 | - | ||
230 | - | func bi (bj,bd,bk) = ((((("stakedTimeByTypeAssetIdAndOwner_" + bj) + "_") + bd) + "_") + bk) | |
231 | - | ||
232 | - | ||
233 | - | func bl (M) = ("wareHouse_" + M) | |
234 | - | ||
235 | - | ||
236 | - | func bm (bd) = ("infraLevel_" + bd) | |
237 | - | ||
238 | - | ||
239 | - | func bn (M) = ("fortifications_" + M) | |
240 | - | ||
241 | - | ||
242 | - | func bo (bd) = ("duckCustomNameByAssetId_" + bd) | |
243 | - | ||
244 | - | ||
245 | - | func bp (b) = ("accountCustomNameByAddr_" + b) | |
246 | - | ||
247 | - | ||
248 | - | func bq (b) = ("accRefBy_" + b) | |
249 | - | ||
250 | - | ||
251 | - | func br (x) = ("onboardArtActivatedOnDuck_" + x) | |
252 | - | ||
253 | - | ||
254 | - | func bs (b) = ("onboardArtActivatedDuckBy_" + b) | |
255 | - | ||
256 | - | ||
257 | - | func bt (b) = ("accReferrals_" + b) | |
258 | - | ||
259 | - | ||
260 | - | func bu (bd) = ("duckOwner_" + bd) | |
261 | - | ||
262 | - | ||
263 | - | func bv (bk) = ("stakedDuckByOwner_" + bk) | |
264 | - | ||
265 | - | ||
266 | - | func bw (x) = ("backPack_" + x) | |
267 | - | ||
268 | - | ||
269 | - | func bx (x) = ("duckLocation_" + x) | |
270 | - | ||
271 | - | ||
272 | - | func by () = "contractsBlocked" | |
273 | - | ||
274 | - | ||
275 | - | func bz (bA) = ("%s%s__userGwlReleaseTime__" + bA) | |
276 | - | ||
277 | - | ||
278 | - | func bB () = "emergencyWarehouseProducts" | |
279 | - | ||
280 | - | ||
281 | - | let bC = "%s__lastTourId" | |
282 | - | ||
283 | - | func bD (bE) = ("%s%d__tourStaticData__" + toString(bE)) | |
284 | - | ||
285 | - | ||
286 | - | func bF (bE) = ("%s%d__tourDynamicData__" + toString(bE)) | |
287 | - | ||
288 | - | ||
289 | - | let bG = 0 | |
290 | - | ||
291 | - | let bH = 1 | |
292 | - | ||
293 | - | func bI (bJ,bE) = { | |
294 | - | let bK = split(valueOrErrorMessage(getString(bJ, bD(bE)), (("Error reading tournament " + toString(bE)) + " data")), "__") | |
295 | - | let bL = split(valueOrErrorMessage(getString(bJ, bF(bE)), (("Error reading tournament " + toString(bE)) + " data")), "__") | |
296 | - | [bK, bL] | |
297 | - | } | |
298 | - | ||
299 | - | ||
300 | - | let bM = 6 | |
301 | - | ||
302 | - | let bN = 1 | |
303 | - | ||
304 | - | let bO = 3 | |
305 | - | ||
306 | - | let bP = 0 | |
307 | - | ||
308 | - | let bQ = 1 | |
309 | - | ||
310 | - | let bR = 2 | |
311 | - | ||
312 | - | func bS (bT) = (parseIntValue(bT[aJ]) * aG) | |
313 | - | ||
314 | - | ||
315 | - | let bU = false | |
316 | - | ||
317 | - | let bV = false | |
318 | - | ||
319 | - | let bW = take(drop(this.bytes, 1), 1) | |
320 | - | ||
321 | - | let bX = { | |
322 | - | let bY = bW | |
323 | - | if ((base58'2W' == bY)) | |
115 | + | let X = 5000000 | |
116 | + | ||
117 | + | let Y = 10000 | |
118 | + | ||
119 | + | let Z = 1000000 | |
120 | + | ||
121 | + | let aa = 1000000 | |
122 | + | ||
123 | + | let ab = 10000 | |
124 | + | ||
125 | + | func ac (ad) = fraction(d, pow(ad, 4, e, 4, 4, DOWN), c) | |
126 | + | ||
127 | + | ||
128 | + | func ae (af) = (100 + af) | |
129 | + | ||
130 | + | ||
131 | + | func ag (ah,ai) = { | |
132 | + | let aj = ac(ai) | |
133 | + | [aj, (f * (aj - ah))] | |
134 | + | } | |
135 | + | ||
136 | + | ||
137 | + | func ak (al,z,am,an) = { | |
138 | + | let ao = split(valueOrElse(getString(al, A(z)), "0_0_0_0_0"), "_") | |
139 | + | let ap = valueOrElse(getInteger(al, C(z)), 0) | |
140 | + | let aq = valueOrElse(getInteger(al, y(z)), ae(ap)) | |
141 | + | let ar = split(valueOrElse(getString(al, K(z)), "0_0_0_0_0"), "_") | |
142 | + | ([parseIntValue(ao[j]), parseIntValue(ao[k]), parseIntValue(ao[l]), parseIntValue(ao[m]), parseIntValue(ao[n]), ap, aq] ++ (if (an) | |
143 | + | then [am, am, am, am, am] | |
144 | + | else [parseIntValue(ar[j]), parseIntValue(ar[k]), parseIntValue(ar[l]), parseIntValue(ar[m]), parseIntValue(ar[n])])) | |
145 | + | } | |
146 | + | ||
147 | + | ||
148 | + | func as (al,z) = { | |
149 | + | let at = valueOrElse(getInteger(al, M(z)), 0) | |
150 | + | let au = valueOrElse(getInteger(al, L(z)), 0) | |
151 | + | let av = lastBlock.timestamp | |
152 | + | let aw = max([g, (at - (h * (av - au)))]) | |
153 | + | let ax = valueOrElse(getInteger(al, Q(z)), 0) | |
154 | + | let ay = valueOrElse(getString(al, R(z)), "") | |
155 | + | let az = valueOrElse(getInteger(al, P(ay)), 0) | |
156 | + | $Tuple5(aw, au, ax, ay, az) | |
157 | + | } | |
158 | + | ||
159 | + | ||
160 | + | let aA = "LAND" | |
161 | + | ||
162 | + | let aB = "DUCK" | |
163 | + | ||
164 | + | let aC = "PRESALE" | |
165 | + | ||
166 | + | let aD = 6 | |
167 | + | ||
168 | + | let aE = 25 | |
169 | + | ||
170 | + | let aF = 3456000 | |
171 | + | ||
172 | + | let aG = 86400000 | |
173 | + | ||
174 | + | let aH = 10000000000 | |
175 | + | ||
176 | + | let aI = "Africa_F_Africa" | |
177 | + | ||
178 | + | let aJ = 39637 | |
179 | + | ||
180 | + | let aK = 10 | |
181 | + | ||
182 | + | let aL = ["First Aid Kit L1", "First Aid Kit L2", "First Aid Kit L3", "Backpack L1", "Backpack L2", "Backpack L3", "Food Ration L1", "Food Ration L2", "Food Ration L3", "Jet Pack L1", "Jet Pack L2", "Jet Pack L3", "Shield L1", "Shield L2", "Shield L3", "Mine L1", "Mine L2", "Mine L3", "Trap L1", "Trap L2", "Trap L3"] | |
183 | + | ||
184 | + | let aM = ["Americas", "Europe", "Asia", "Africa", "Oceania"] | |
185 | + | ||
186 | + | let aN = 10000000 | |
187 | + | ||
188 | + | let aO = [15, 16, 17, 18, 19, 20] | |
189 | + | ||
190 | + | let aP = ["8_8_8_17_17_42_12_0_30_0,0,0,0,0,0,0_", "8_8_8_17_17_42_24_0_60_0,0,5,2,0,0,0_", "8_8_8_17_17_42_36_0_120_0,0,10,4,0,0,0_", "8_19_19_8_27_19_26_1_20_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_52_1_40_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_78_1_80_0,0,0,0,0,0,0_001", "8_8_8_8_8_60_13_2_2_0,0,0,0,0,0,0_011", "8_8_8_8_8_60_26_2_4_0,0,0,0,0,0,0_011", "8_8_8_8_8_60_39_2_8_0,0,0,0,0,0,0_011", "30_30_3_17_17_3_30_3_30_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_60_3_50_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_90_3_70_0,0,0,0,0,0,0_111", "18_18_10_18_18_18_11_4_30_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_22_4_50_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_33_4_70_0,0,0,0,0,0,0_201", "4_13_22_4_35_22_23_0_50,1,0_0,0,0,0,0,0,0_", "4_13_22_4_35_22_46_0_50,1,1_0,2,5,0,0,0,0_", "4_13_22_4_35_22_69_0_50,2,1_0,5,10,0,0,0,0_", "5_25_40_5_10_15_20_1_30,1,1_0,0,0,0,0,0,0_", "5_25_40_5_10_15_40_1_30,1,2_2,1,3,0,0,0,0_", "5_25_40_5_10_15_60_1_30,1,3_5,2,8,0,0,0,0_"] | |
191 | + | ||
192 | + | let aQ = 6 | |
193 | + | ||
194 | + | let aR = 8 | |
195 | + | ||
196 | + | let aS = 9 | |
197 | + | ||
198 | + | let aT = 10 | |
199 | + | ||
200 | + | let aU = 10 | |
201 | + | ||
202 | + | let aV = 0 | |
203 | + | ||
204 | + | let aW = 1 | |
205 | + | ||
206 | + | let aX = 2 | |
207 | + | ||
208 | + | let aY = 3 | |
209 | + | ||
210 | + | let aZ = 4 | |
211 | + | ||
212 | + | let ba = 0 | |
213 | + | ||
214 | + | let bb = 1 | |
215 | + | ||
216 | + | let bc = 2 | |
217 | + | ||
218 | + | let bd = 3 | |
219 | + | ||
220 | + | let be = 0 | |
221 | + | ||
222 | + | let bf = 1 | |
223 | + | ||
224 | + | let bg = 2 | |
225 | + | ||
226 | + | let bh = 3 | |
227 | + | ||
228 | + | func bi (b) = ("lastTxIdByUser_" + b) | |
229 | + | ||
230 | + | ||
231 | + | func bj (bk) = ("nftOwner_" + bk) | |
232 | + | ||
233 | + | ||
234 | + | func bl (bk) = ("landCustomNameByAssetId_" + bk) | |
235 | + | ||
236 | + | ||
237 | + | func bm (bk) = ("stakedTime_" + bk) | |
238 | + | ||
239 | + | ||
240 | + | func bn (bo,bk) = makeString(["landArtStatus", bo, bk], "_") | |
241 | + | ||
242 | + | ||
243 | + | func bp (bq,bk,br) = ((((("stakedTimeByTypeAssetIdAndOwner_" + bq) + "_") + bk) + "_") + br) | |
244 | + | ||
245 | + | ||
246 | + | func bs (O) = ("wareHouse_" + O) | |
247 | + | ||
248 | + | ||
249 | + | func bt (bk) = ("infraLevel_" + bk) | |
250 | + | ||
251 | + | ||
252 | + | func bu (O) = ("fortifications_" + O) | |
253 | + | ||
254 | + | ||
255 | + | func bv (bk) = ("duckCustomNameByAssetId_" + bk) | |
256 | + | ||
257 | + | ||
258 | + | func bw (b) = ("accountCustomNameByAddr_" + b) | |
259 | + | ||
260 | + | ||
261 | + | func bx (b) = ("accRefBy_" + b) | |
262 | + | ||
263 | + | ||
264 | + | func by (z) = ("onboardArtActivatedOnDuck_" + z) | |
265 | + | ||
266 | + | ||
267 | + | func bz (b) = ("onboardArtActivatedDuckBy_" + b) | |
268 | + | ||
269 | + | ||
270 | + | func bA (b) = ("accReferrals_" + b) | |
271 | + | ||
272 | + | ||
273 | + | func bB (bk) = ("duckOwner_" + bk) | |
274 | + | ||
275 | + | ||
276 | + | func bC (br) = ("stakedDuckByOwner_" + br) | |
277 | + | ||
278 | + | ||
279 | + | func bD (z) = ("backPack_" + z) | |
280 | + | ||
281 | + | ||
282 | + | func bE (z) = ("duckLocation_" + z) | |
283 | + | ||
284 | + | ||
285 | + | func bF () = "contractsBlocked" | |
286 | + | ||
287 | + | ||
288 | + | func bG (bH) = ("%s%s__userGwlReleaseTime__" + bH) | |
289 | + | ||
290 | + | ||
291 | + | func bI () = "emergencyWarehouseProducts" | |
292 | + | ||
293 | + | ||
294 | + | let bJ = "%s__lastTourId" | |
295 | + | ||
296 | + | func bK (bL) = ("%s%d__tourStaticData__" + toString(bL)) | |
297 | + | ||
298 | + | ||
299 | + | func bM (bL) = ("%s%d__tourDynamicData__" + toString(bL)) | |
300 | + | ||
301 | + | ||
302 | + | let bN = 0 | |
303 | + | ||
304 | + | let bO = 1 | |
305 | + | ||
306 | + | func bP (bQ,bL) = { | |
307 | + | let bR = split(valueOrErrorMessage(getString(bQ, bK(bL)), (("Error reading tournament " + toString(bL)) + " data")), "__") | |
308 | + | let bS = split(valueOrErrorMessage(getString(bQ, bM(bL)), (("Error reading tournament " + toString(bL)) + " data")), "__") | |
309 | + | [bR, bS] | |
310 | + | } | |
311 | + | ||
312 | + | ||
313 | + | let bT = 6 | |
314 | + | ||
315 | + | let bU = 1 | |
316 | + | ||
317 | + | let bV = 3 | |
318 | + | ||
319 | + | let bW = 0 | |
320 | + | ||
321 | + | let bX = 1 | |
322 | + | ||
323 | + | let bY = 2 | |
324 | + | ||
325 | + | func bZ (ca) = (parseIntValue(ca[aQ]) * aN) | |
326 | + | ||
327 | + | ||
328 | + | let cb = false | |
329 | + | ||
330 | + | let cc = false | |
331 | + | ||
332 | + | let cd = take(drop(this.bytes, 1), 1) | |
333 | + | ||
334 | + | let ce = { | |
335 | + | let cf = cd | |
336 | + | if ((base58'2W' == cf)) | |
324 | 337 | then base58'9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi' | |
325 | - | else if ((base58'2T' == | |
338 | + | else if ((base58'2T' == cf)) | |
326 | 339 | then base58'6mWwf9mZBjVgkC54idpyaZLQfAosD914wT8fGf2iiY63' | |
327 | 340 | else throw("Unknown chain") | |
328 | 341 | } | |
329 | 342 | ||
330 | - | let | |
331 | - | let | |
332 | - | if ((base58'2W' == | |
343 | + | let cg = { | |
344 | + | let cf = cd | |
345 | + | if ((base58'2W' == cf)) | |
333 | 346 | then "3PQCuvFbvh4LkPUnrnU1z3jnbA1p9m3WNhv" | |
334 | - | else if ((base58'2T' == | |
347 | + | else if ((base58'2T' == cf)) | |
335 | 348 | then "3MumkGGztCKAXpWDqxkddofqXSUbqQkvSJy" | |
336 | 349 | else throw("Unknown chain") | |
337 | 350 | } | |
338 | 351 | ||
339 | - | let | |
340 | - | let | |
341 | - | if ((base58'2W' == | |
352 | + | let ch = { | |
353 | + | let cf = cd | |
354 | + | if ((base58'2W' == cf)) | |
342 | 355 | then 10000000000 | |
343 | - | else if ((base58'2T' == | |
356 | + | else if ((base58'2T' == cf)) | |
344 | 357 | then 100000000 | |
345 | 358 | else throw("Unknown chain") | |
346 | 359 | } | |
347 | 360 | ||
348 | - | let | |
349 | - | let | |
350 | - | if ((base58'2W' == | |
361 | + | let ci = { | |
362 | + | let cf = cd | |
363 | + | if ((base58'2W' == cf)) | |
351 | 364 | then 86400000 | |
352 | - | else if ((base58'2T' == | |
365 | + | else if ((base58'2T' == cf)) | |
353 | 366 | then 60000 | |
354 | 367 | else throw("Unknown chain") | |
355 | 368 | } | |
356 | 369 | ||
357 | - | let | |
358 | - | ||
359 | - | let | |
360 | - | ||
361 | - | let | |
362 | - | ||
363 | - | let | |
364 | - | ||
365 | - | let | |
366 | - | ||
367 | - | let | |
368 | - | ||
369 | - | let | |
370 | - | ||
371 | - | let | |
372 | - | ||
373 | - | let | |
374 | - | ||
375 | - | func | |
376 | - | ||
377 | - | ||
378 | - | let | |
379 | - | ||
380 | - | let | |
381 | - | ||
382 | - | let | |
383 | - | ||
384 | - | let | |
385 | - | ||
386 | - | let | |
387 | - | ||
388 | - | func | |
389 | - | ||
390 | - | ||
391 | - | func | |
392 | - | ||
393 | - | ||
394 | - | func | |
395 | - | ||
396 | - | ||
397 | - | func | |
398 | - | ||
399 | - | ||
400 | - | let | |
401 | - | ||
402 | - | let | |
403 | - | ||
404 | - | let | |
405 | - | ||
406 | - | let | |
407 | - | ||
408 | - | let | |
409 | - | ||
410 | - | let | |
411 | - | ||
412 | - | let | |
413 | - | ||
414 | - | let | |
415 | - | ||
416 | - | let | |
417 | - | ||
418 | - | let | |
419 | - | ||
420 | - | let | |
421 | - | ||
422 | - | let | |
423 | - | ||
424 | - | let | |
425 | - | ||
426 | - | let | |
427 | - | ||
428 | - | func | |
429 | - | ||
430 | - | ||
431 | - | func | |
432 | - | ||
433 | - | ||
434 | - | func | |
435 | - | ||
436 | - | ||
437 | - | func | |
438 | - | ||
439 | - | ||
440 | - | func | |
441 | - | ||
442 | - | ||
443 | - | func | |
444 | - | let | |
445 | - | if ($isInstanceOf( | |
370 | + | let cj = "__" | |
371 | + | ||
372 | + | let ck = 1000000 | |
373 | + | ||
374 | + | let cl = 100000000 | |
375 | + | ||
376 | + | let cm = 25 | |
377 | + | ||
378 | + | let cn = 100 | |
379 | + | ||
380 | + | let co = 225 | |
381 | + | ||
382 | + | let cp = 400 | |
383 | + | ||
384 | + | let cq = 625 | |
385 | + | ||
386 | + | let cr = [0, 1, 2, 3, 4, 5] | |
387 | + | ||
388 | + | func cs (ct,cu) = valueOrErrorMessage(getString(ct, cu), makeString(["mandatory ", toString(ct), ".", cu, " is not defined"], "")) | |
389 | + | ||
390 | + | ||
391 | + | let cv = 1 | |
392 | + | ||
393 | + | let cw = 2 | |
394 | + | ||
395 | + | let cx = 3 | |
396 | + | ||
397 | + | let cy = 4 | |
398 | + | ||
399 | + | let cz = 7 | |
400 | + | ||
401 | + | func cA () = "%s__restConfig" | |
402 | + | ||
403 | + | ||
404 | + | func cB () = "%s__restAddr" | |
405 | + | ||
406 | + | ||
407 | + | func cC (cD) = split_4C(cs(cD, cA()), cj) | |
408 | + | ||
409 | + | ||
410 | + | func cE (cF,cG) = valueOrErrorMessage(addressFromString(cF[cG]), ("Rest cfg doesn't contain address at index " + toString(cG))) | |
411 | + | ||
412 | + | ||
413 | + | let cH = addressFromStringValue(valueOrElse(getString(this, cB()), cg)) | |
414 | + | ||
415 | + | let cF = cC(cH) | |
416 | + | ||
417 | + | let al = cE(cF, cv) | |
418 | + | ||
419 | + | let cI = cE(cF, cw) | |
420 | + | ||
421 | + | let cJ = cE(cF, cx) | |
422 | + | ||
423 | + | let cK = cE(cF, cy) | |
424 | + | ||
425 | + | let cL = cE(cF, cz) | |
426 | + | ||
427 | + | let cM = 0 | |
428 | + | ||
429 | + | let cN = 1 | |
430 | + | ||
431 | + | let cO = 2 | |
432 | + | ||
433 | + | let cP = 3 | |
434 | + | ||
435 | + | let cQ = "wlg_assetId" | |
436 | + | ||
437 | + | let cR = valueOrErrorMessage(getBinary(cK, cQ), "Not initialized yet") | |
438 | + | ||
439 | + | let cS = 2 | |
440 | + | ||
441 | + | func cT (ct) = ("finishBlockForAddr_" + ct) | |
442 | + | ||
443 | + | ||
444 | + | func cU () = "resTypesProportions" | |
445 | + | ||
446 | + | ||
447 | + | func cV (cW) = ("resTypesByContinent_" + cW) | |
448 | + | ||
449 | + | ||
450 | + | func cX (br) = ("stakedLandsByOwner_" + br) | |
451 | + | ||
452 | + | ||
453 | + | func cY (br) = ("stakedPiecesByOwner_" + br) | |
454 | + | ||
455 | + | ||
456 | + | func cZ (da) = { | |
457 | + | let cf = da | |
458 | + | if ($isInstanceOf(cf, "String")) | |
446 | 459 | then { | |
447 | - | let | |
448 | - | | |
460 | + | let db = cf | |
461 | + | db | |
449 | 462 | } | |
450 | 463 | else throw("fail to cast into String") | |
451 | 464 | } | |
452 | 465 | ||
453 | 466 | ||
454 | - | func | |
455 | - | let | |
456 | - | if ($isInstanceOf( | |
467 | + | func dc (da) = { | |
468 | + | let cf = da | |
469 | + | if ($isInstanceOf(cf, "Int")) | |
457 | 470 | then { | |
458 | - | let | |
459 | - | | |
471 | + | let dd = cf | |
472 | + | dd | |
460 | 473 | } | |
461 | 474 | else throw("fail to cast into Int") | |
462 | 475 | } | |
463 | 476 | ||
464 | 477 | ||
465 | - | func | |
466 | - | let | |
467 | - | if (("S" == | |
468 | - | then | |
469 | - | else if (("M" == | |
470 | - | then | |
471 | - | else if (("L" == | |
472 | - | then | |
473 | - | else if (("XL" == | |
474 | - | then | |
475 | - | else if (("XXL" == | |
476 | - | then | |
478 | + | func de (df) = { | |
479 | + | let cf = df | |
480 | + | if (("S" == cf)) | |
481 | + | then cm | |
482 | + | else if (("M" == cf)) | |
483 | + | then cn | |
484 | + | else if (("L" == cf)) | |
485 | + | then co | |
486 | + | else if (("XL" == cf)) | |
487 | + | then cp | |
488 | + | else if (("XXL" == cf)) | |
489 | + | then cq | |
477 | 490 | else throw("Unknown land size") | |
478 | 491 | } | |
479 | 492 | ||
480 | 493 | ||
481 | - | func | |
482 | - | ||
483 | - | ||
484 | - | func | |
485 | - | let | |
486 | - | let | |
487 | - | (toInt( | |
488 | - | } | |
489 | - | ||
490 | - | ||
491 | - | let | |
492 | - | let | |
493 | - | if ((base58'2W' == | |
494 | + | func dg (db) = isDefined(parseInt(db)) | |
495 | + | ||
496 | + | ||
497 | + | func dh (di,dj,dk) = { | |
498 | + | let dl = value(blockInfoByHeight(dj)) | |
499 | + | let dm = sha256((value(dl.vrf) + dk)) | |
500 | + | (toInt(dm) % di) | |
501 | + | } | |
502 | + | ||
503 | + | ||
504 | + | let dn = { | |
505 | + | let cf = cd | |
506 | + | if ((base58'2W' == cf)) | |
494 | 507 | then addressFromStringValue("3PEktVux2RhchSN63DsDo4b4mz4QqzKSeDv") | |
495 | - | else if ((base58'2T' == | |
508 | + | else if ((base58'2T' == cf)) | |
496 | 509 | then this | |
497 | 510 | else throw("Unknown chain") | |
498 | 511 | } | |
499 | 512 | ||
500 | - | let | |
501 | - | let | |
502 | - | if ((base58'2W' == | |
513 | + | let do = { | |
514 | + | let cf = cd | |
515 | + | if ((base58'2W' == cf)) | |
503 | 516 | then addressFromStringValue("3PDVuU45H7Eh5dmtNbnRNRStGwULA7NY6Hb") | |
504 | - | else if ((base58'2T' == | |
517 | + | else if ((base58'2T' == cf)) | |
505 | 518 | then this | |
506 | 519 | else throw("Unknown chain") | |
507 | 520 | } | |
508 | 521 | ||
509 | - | let | |
510 | - | let | |
511 | - | if ((base58'2W' == | |
512 | - | then if ( | |
522 | + | let dp = { | |
523 | + | let cf = cd | |
524 | + | if ((base58'2W' == cf)) | |
525 | + | then if (cb) | |
513 | 526 | then base58'CWsMtTZC5BjjoL4Q1ayW4Wwb1ehGACQB6DrKyPgotKfm' | |
514 | 527 | else base58'6LfPuKJjLgekmncBhMg2LZyMTNVzZBccXR28ySXm9uXD' | |
515 | - | else if ((base58'2T' == | |
528 | + | else if ((base58'2T' == cf)) | |
516 | 529 | then base58'6LfPuKJjLgekmncBhMg2LZyMTNVzZBccXR28ySXm9uXD' | |
517 | 530 | else throw("Unknown chain") | |
518 | 531 | } | |
519 | 532 | ||
520 | - | let | |
521 | - | ||
522 | - | let | |
523 | - | ||
524 | - | let | |
525 | - | ||
526 | - | let | |
527 | - | ||
528 | - | let | |
529 | - | ||
530 | - | let | |
531 | - | let | |
532 | - | if ((base58'2W' == | |
533 | + | let dq = base64'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==' | |
534 | + | ||
535 | + | let dr = 300000 | |
536 | + | ||
537 | + | let ds = 5000000 | |
538 | + | ||
539 | + | let dt = 50 | |
540 | + | ||
541 | + | let du = 10000000 | |
542 | + | ||
543 | + | let dv = { | |
544 | + | let cf = cd | |
545 | + | if ((base58'2W' == cf)) | |
533 | 546 | then 252289527462 | |
534 | - | else if ((base58'2T' == | |
547 | + | else if ((base58'2T' == cf)) | |
535 | 548 | then 2522895274 | |
536 | 549 | else throw("Unknown chain") | |
537 | 550 | } | |
538 | 551 | ||
539 | - | let | |
540 | - | let | |
541 | - | if ((base58'2W' == | |
552 | + | let dw = { | |
553 | + | let cf = cd | |
554 | + | if ((base58'2W' == cf)) | |
542 | 555 | then 250000000 | |
543 | - | else if ((base58'2T' == | |
556 | + | else if ((base58'2T' == cf)) | |
544 | 557 | then 250000000 | |
545 | 558 | else throw("Unknown chain") | |
546 | 559 | } | |
547 | 560 | ||
548 | - | let | |
549 | - | ||
550 | - | let | |
551 | - | ||
552 | - | let | |
553 | - | ||
554 | - | let | |
555 | - | ||
556 | - | let | |
557 | - | ||
558 | - | let | |
559 | - | ||
560 | - | let | |
561 | - | ||
562 | - | func | |
563 | - | ||
564 | - | ||
565 | - | func | |
566 | - | ||
567 | - | ||
568 | - | func | |
569 | - | ||
570 | - | ||
571 | - | func | |
572 | - | ||
573 | - | ||
574 | - | func | |
575 | - | ||
576 | - | ||
577 | - | func | |
578 | - | ||
579 | - | ||
580 | - | func | |
581 | - | ||
582 | - | ||
583 | - | func | |
584 | - | ||
585 | - | ||
586 | - | let | |
587 | - | ||
588 | - | let | |
589 | - | ||
590 | - | let | |
591 | - | ||
592 | - | let | |
593 | - | ||
594 | - | let | |
595 | - | ||
596 | - | let | |
597 | - | ||
598 | - | let | |
599 | - | ||
600 | - | func | |
601 | - | ||
602 | - | ||
603 | - | func | |
604 | - | let | |
605 | - | then ((( | |
606 | - | else -((((-( | |
607 | - | ( | |
608 | - | } | |
609 | - | ||
610 | - | ||
611 | - | func | |
612 | - | let | |
613 | - | if ((0 >= | |
561 | + | let dx = toBigInt(5) | |
562 | + | ||
563 | + | let dy = toBigInt(20) | |
564 | + | ||
565 | + | let dz = toBigInt((20 * 20)) | |
566 | + | ||
567 | + | let dA = toBigInt(((20 * 20) * 20)) | |
568 | + | ||
569 | + | let dB = toBigInt((((20 * 20) * 20) * 20)) | |
570 | + | ||
571 | + | let dC = toBigInt(((((20 * 20) * 20) * 20) * 20)) | |
572 | + | ||
573 | + | let dD = 500 | |
574 | + | ||
575 | + | func dE () = "nextLandNum" | |
576 | + | ||
577 | + | ||
578 | + | func dF (dG) = ("landByCustomName_" + dG) | |
579 | + | ||
580 | + | ||
581 | + | func dH (dI) = ("landToAsset_" + dI) | |
582 | + | ||
583 | + | ||
584 | + | func dJ (bk,br) = ((("infraLevelByAssetIdAndOwner_" + bk) + "_") + br) | |
585 | + | ||
586 | + | ||
587 | + | func dK (dI) = ("landOwner_" + dI) | |
588 | + | ||
589 | + | ||
590 | + | func dL (dG) = ("duckByCustomName_" + dG) | |
591 | + | ||
592 | + | ||
593 | + | func dM (dG) = ("accountByCustomName_" + dG) | |
594 | + | ||
595 | + | ||
596 | + | func dN () = "oldiesList" | |
597 | + | ||
598 | + | ||
599 | + | let dO = 0 | |
600 | + | ||
601 | + | let dP = 1 | |
602 | + | ||
603 | + | let dQ = 2 | |
604 | + | ||
605 | + | let dR = 0 | |
606 | + | ||
607 | + | let dS = 5 | |
608 | + | ||
609 | + | let dT = 6 | |
610 | + | ||
611 | + | let dU = 7 | |
612 | + | ||
613 | + | func dV (dI,df) = ((aA + dI) + df) | |
614 | + | ||
615 | + | ||
616 | + | func dW (dX,dY) = { | |
617 | + | let dZ = if ((dX >= 0)) | |
618 | + | then (((dX + dY) - 1) / dY) | |
619 | + | else -((((-(dX) + dY) - 1) / dY)) | |
620 | + | (dZ * cl) | |
621 | + | } | |
622 | + | ||
623 | + | ||
624 | + | func ea (eb,ec) = { | |
625 | + | let ed = (((((ec[0] + ec[1]) + ec[2]) + ec[3]) + ec[4]) + ec[5]) | |
626 | + | if ((0 >= ed)) | |
614 | 627 | then throw("Zero weights sum") | |
615 | 628 | else { | |
616 | - | let | |
617 | - | func | |
618 | - | ||
619 | - | let | |
620 | - | let | |
621 | - | let | |
622 | - | func | |
623 | - | then | |
624 | - | else | |
625 | - | ||
626 | - | func | |
627 | - | then | |
629 | + | let ee = fraction(eb, ck, ed) | |
630 | + | func ef (eg,eh) = (eg :+ fraction(eh, ee, ck)) | |
631 | + | ||
632 | + | let ei = ec | |
633 | + | let ej = size(ei) | |
634 | + | let ek = nil | |
635 | + | func el (em,en) = if ((en >= ej)) | |
636 | + | then em | |
637 | + | else ef(em, ei[en]) | |
638 | + | ||
639 | + | func eo (em,en) = if ((en >= ej)) | |
640 | + | then em | |
628 | 641 | else throw("List size exceeds 6") | |
629 | 642 | ||
630 | - | | |
631 | - | } | |
632 | - | } | |
633 | - | ||
634 | - | ||
635 | - | func | |
636 | - | let | |
637 | - | if ((size( | |
643 | + | eo(el(el(el(el(el(el(ek, 0), 1), 2), 3), 4), 5), 6) | |
644 | + | } | |
645 | + | } | |
646 | + | ||
647 | + | ||
648 | + | func ep (eb) = { | |
649 | + | let eq = split(value(getString(cU())), "_") | |
650 | + | if ((size(eq) != aD)) | |
638 | 651 | then throw("Wrong proportions data") | |
639 | 652 | else { | |
640 | - | let | |
641 | - | | |
642 | - | } | |
643 | - | } | |
644 | - | ||
645 | - | ||
646 | - | func | |
647 | - | let | |
648 | - | func | |
649 | - | let | |
650 | - | if ((0 > | |
651 | - | then throw(((((("Not enough material idx=" + toString( | |
652 | - | else ( | |
653 | + | let er = [parseIntValue(eq[0]), parseIntValue(eq[1]), parseIntValue(eq[2]), parseIntValue(eq[3]), parseIntValue(eq[4]), parseIntValue(eq[5])] | |
654 | + | ea(eb, er) | |
655 | + | } | |
656 | + | } | |
657 | + | ||
658 | + | ||
659 | + | func es (et,eu,ev) = { | |
660 | + | let ew = ep(ev) | |
661 | + | func ex (eg,cG) = { | |
662 | + | let ey = (parseIntValue(eu[cG]) - ew[cG]) | |
663 | + | if ((0 > ey)) | |
664 | + | then throw(((((("Not enough material idx=" + toString(cG)) + ", you have ") + eu[cG]) + ", but need ") + toString(ew[cG]))) | |
665 | + | else (eg :+ toString(ey)) | |
653 | 666 | } | |
654 | 667 | ||
655 | - | if ( | |
668 | + | if (et) | |
656 | 669 | then { | |
657 | - | let | |
658 | - | let | |
659 | - | let | |
660 | - | func | |
661 | - | then | |
662 | - | else | |
663 | - | ||
664 | - | func | |
665 | - | then | |
670 | + | let ei = cr | |
671 | + | let ej = size(ei) | |
672 | + | let ek = nil | |
673 | + | func el (em,en) = if ((en >= ej)) | |
674 | + | then em | |
675 | + | else ex(em, ei[en]) | |
676 | + | ||
677 | + | func eo (em,en) = if ((en >= ej)) | |
678 | + | then em | |
666 | 679 | else throw("List size exceeds 6") | |
667 | 680 | ||
668 | - | | |
669 | - | } | |
670 | - | else | |
671 | - | } | |
672 | - | ||
673 | - | ||
674 | - | func | |
675 | - | then $Tuple2( | |
681 | + | eo(el(el(el(el(el(el(ek, 0), 1), 2), 3), 4), 5), 6) | |
682 | + | } | |
683 | + | else eu | |
684 | + | } | |
685 | + | ||
686 | + | ||
687 | + | func ez (eA,eB) = if ((eB == "")) | |
688 | + | then $Tuple2(eA, false) | |
676 | 689 | else { | |
677 | - | func | |
678 | - | let | |
679 | - | if ((size( | |
690 | + | func eC (eg,eD) = { | |
691 | + | let eE = split(eD, ",") | |
692 | + | if ((size(eE) != 2)) | |
680 | 693 | then throw("Incorrect format, should be index,amount") | |
681 | 694 | else { | |
682 | - | let | |
683 | - | if (if ((0 > | |
695 | + | let cG = parseIntValue(eE[0]) | |
696 | + | if (if ((0 > cG)) | |
684 | 697 | then true | |
685 | - | else ( | |
698 | + | else (cG >= size(aP))) | |
686 | 699 | then throw("Unknown product idx") | |
687 | 700 | else { | |
688 | - | let | |
689 | - | let | |
690 | - | if ((size( | |
691 | - | then throw((("You don't have " + | |
701 | + | let eF = parseIntValue(eE[1]) | |
702 | + | let eG = split(eg._1, (eE[0] + ":")) | |
703 | + | if ((size(eG) != 2)) | |
704 | + | then throw((("You don't have " + aL[cG]) + " equipped")) | |
692 | 705 | else { | |
693 | - | let | |
694 | - | let | |
706 | + | let eH = eG[1] | |
707 | + | let eI = if (dg(take(drop(eH, 1), 1))) | |
695 | 708 | then 2 | |
696 | 709 | else 1 | |
697 | - | let | |
698 | - | let | |
699 | - | let | |
700 | - | then ( | |
701 | - | else throw(((((("You equipped " + toString( | |
702 | - | $Tuple2((((( | |
710 | + | let eJ = parseIntValue(take(eH, eI)) | |
711 | + | let eK = drop(eH, eI) | |
712 | + | let eL = if ((eJ >= eF)) | |
713 | + | then (eJ - eF) | |
714 | + | else throw(((((("You equipped " + toString(eJ)) + " of ") + aL[cG]) + ", but tried to use ") + toString(eF))) | |
715 | + | $Tuple2(((((eG[0] + eE[0]) + ":") + toString(eL)) + eK), if (eg._2) | |
703 | 716 | then true | |
704 | - | else if (if (( | |
705 | - | then (8 >= | |
717 | + | else if (if ((cG >= 6)) | |
718 | + | then (8 >= cG) | |
706 | 719 | else false) | |
707 | - | then ( | |
720 | + | then (eL == 0) | |
708 | 721 | else false) | |
709 | 722 | } | |
710 | 723 | } | |
711 | 724 | } | |
712 | 725 | } | |
713 | 726 | ||
714 | - | let | |
715 | - | let | |
716 | - | let | |
717 | - | func | |
718 | - | then | |
719 | - | else | |
720 | - | ||
721 | - | func | |
722 | - | then | |
727 | + | let ei = split(eB, "_") | |
728 | + | let ej = size(ei) | |
729 | + | let ek = $Tuple2(eA, false) | |
730 | + | func el (em,en) = if ((en >= ej)) | |
731 | + | then em | |
732 | + | else eC(em, ei[en]) | |
733 | + | ||
734 | + | func eo (em,en) = if ((en >= ej)) | |
735 | + | then em | |
723 | 736 | else throw("List size exceeds 10") | |
724 | 737 | ||
725 | - | | |
738 | + | eo(el(el(el(el(el(el(el(el(el(el(ek, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10) | |
726 | 739 | } | |
727 | 740 | ||
728 | 741 | ||
729 | - | func | |
730 | - | let | |
742 | + | func eM (eN) = { | |
743 | + | let eO = if ((eN == "")) | |
731 | 744 | then nil | |
732 | - | else split_4C( | |
733 | - | func | |
734 | - | let | |
735 | - | let | |
736 | - | then parseIntValue( | |
745 | + | else split_4C(eN, "_") | |
746 | + | func eP (eg,ca) = { | |
747 | + | let eQ = (size(eg) / 8) | |
748 | + | let eJ = if ((size(eO) > eQ)) | |
749 | + | then parseIntValue(eO[eQ]) | |
737 | 750 | else 0 | |
738 | - | ( | |
751 | + | (eg + toBytes(eJ)) | |
739 | 752 | } | |
740 | 753 | ||
741 | - | let | |
742 | - | let | |
743 | - | let | |
744 | - | func | |
745 | - | then | |
746 | - | else | |
747 | - | ||
748 | - | func | |
749 | - | then | |
754 | + | let ei = aP | |
755 | + | let ej = size(ei) | |
756 | + | let ek = base58'' | |
757 | + | func el (em,en) = if ((en >= ej)) | |
758 | + | then em | |
759 | + | else eP(em, ei[en]) | |
760 | + | ||
761 | + | func eo (em,en) = if ((en >= ej)) | |
762 | + | then em | |
750 | 763 | else throw("List size exceeds 50") | |
751 | 764 | ||
752 | - | | |
753 | - | } | |
754 | - | ||
755 | - | ||
756 | - | func | |
757 | - | func | |
758 | - | let | |
759 | - | let | |
760 | - | ( | |
765 | + | eo(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(ek, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50) | |
766 | + | } | |
767 | + | ||
768 | + | ||
769 | + | func eR (eS) = { | |
770 | + | func eT (eg,ca) = { | |
771 | + | let eQ = size(eg) | |
772 | + | let eU = take(drop(eS, (8 * eQ)), 8) | |
773 | + | (eg :+ toString(toInt(eU))) | |
761 | 774 | } | |
762 | 775 | ||
763 | 776 | makeString_2C({ | |
764 | - | let | |
765 | - | let | |
766 | - | let | |
767 | - | func | |
768 | - | then | |
769 | - | else | |
770 | - | ||
771 | - | func | |
772 | - | then | |
777 | + | let ei = aP | |
778 | + | let ej = size(ei) | |
779 | + | let ek = nil | |
780 | + | func el (em,en) = if ((en >= ej)) | |
781 | + | then em | |
782 | + | else eT(em, ei[en]) | |
783 | + | ||
784 | + | func eo (em,en) = if ((en >= ej)) | |
785 | + | then em | |
773 | 786 | else throw("List size exceeds 50") | |
774 | 787 | ||
775 | - | | |
788 | + | eo(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(ek, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50) | |
776 | 789 | }, "_") | |
777 | 790 | } | |
778 | 791 | ||
779 | 792 | ||
780 | - | func | |
781 | - | func | |
782 | - | let | |
783 | - | then | |
793 | + | func eV (eW,eX) = { | |
794 | + | func eY (eg,eQ) = { | |
795 | + | let eZ = if ((size(eW) > (7 + eQ))) | |
796 | + | then eW[(7 + eQ)] | |
784 | 797 | else 0 | |
785 | - | if ((parseIntValue(eQ | |
786 | - | then throw(("Requirement not satisfied: " + i[ | |
798 | + | if ((parseIntValue(eX[eQ]) > (eW[eQ] + eZ))) | |
799 | + | then throw(("Requirement not satisfied: " + i[eQ])) | |
787 | 800 | else true | |
788 | 801 | } | |
789 | 802 | ||
790 | - | let | |
791 | - | let | |
792 | - | let | |
793 | - | func | |
794 | - | then | |
795 | - | else | |
796 | - | ||
797 | - | func | |
798 | - | then | |
803 | + | let ei = [0, 1, 2, 3, 4, 5, 6] | |
804 | + | let ej = size(ei) | |
805 | + | let ek = false | |
806 | + | func el (em,en) = if ((en >= ej)) | |
807 | + | then em | |
808 | + | else eY(em, ei[en]) | |
809 | + | ||
810 | + | func eo (em,en) = if ((en >= ej)) | |
811 | + | then em | |
799 | 812 | else throw("List size exceeds 7") | |
800 | 813 | ||
801 | - | | |
802 | - | } | |
803 | - | ||
804 | - | ||
805 | - | func | |
806 | - | let | |
807 | - | if ((size( | |
814 | + | eo(el(el(el(el(el(el(el(ek, 0), 1), 2), 3), 4), 5), 6), 7) | |
815 | + | } | |
816 | + | ||
817 | + | ||
818 | + | func fa (fb,eO,fc,eW,fd,fe) = { | |
819 | + | let eE = split(fb, ":") | |
820 | + | if ((size(eE) != 2)) | |
808 | 821 | then throw("Incorrect format, should be index:amount") | |
809 | - | else if (if (!( | |
810 | - | then (size( | |
822 | + | else if (if (!(fc)) | |
823 | + | then (size(eE[0]) != 2) | |
811 | 824 | else false) | |
812 | 825 | then throw("Product idx should be 2 digits, zero padded") | |
813 | 826 | else { | |
814 | - | let | |
815 | - | let | |
816 | - | if (!(containsElement( | |
817 | - | then throw((("Product '" + | |
818 | - | else if ((0 > | |
827 | + | let ff = parseIntValue(eE[0]) | |
828 | + | let fg = parseIntValue(eE[1]) | |
829 | + | if (!(containsElement(aO, ff))) | |
830 | + | then throw((("Product '" + aL[ff]) + "' cannot be used for land defense")) | |
831 | + | else if ((0 > fg)) | |
819 | 832 | then throw("Count can't be negative") | |
820 | - | else if (( | |
821 | - | then throw(((("Can't put more than " + toString(s)) + " of ") + | |
822 | - | else if (( | |
823 | - | then $Tuple3( | |
833 | + | else if ((fg > s)) | |
834 | + | then throw(((("Can't put more than " + toString(s)) + " of ") + aL[ff])) | |
835 | + | else if ((fg == 0)) | |
836 | + | then $Tuple3(eO, fd, fe) | |
824 | 837 | else { | |
825 | - | let | |
826 | - | let | |
827 | - | let | |
828 | - | let | |
829 | - | if (if (!( | |
830 | - | then ( | |
838 | + | let fh = take(eO, (8 * ff)) | |
839 | + | let eJ = toInt(take(drop(eO, (8 * ff)), 8)) | |
840 | + | let eK = drop(eO, (8 * (ff + 1))) | |
841 | + | let ca = split(aP[ff], "_") | |
842 | + | if (if (!(fc)) | |
843 | + | then (fg > eJ) | |
831 | 844 | else false) | |
832 | - | then throw(((((("You have " + toString( | |
845 | + | then throw(((((("You have " + toString(eJ)) + " of ") + aL[ff]) + ", but tried to use ") + toString(fg))) | |
833 | 846 | else { | |
834 | - | let | |
835 | - | then | |
847 | + | let eL = if (if (!(fc)) | |
848 | + | then eV(eW, split(ca[aS], ",")) | |
836 | 849 | else false) | |
837 | - | then ( | |
838 | - | else ( | |
839 | - | let | |
840 | - | $Tuple3((( | |
850 | + | then (eJ - fg) | |
851 | + | else (eJ + fg) | |
852 | + | let fi = (dW(eL, aU) - dW(eJ, aU)) | |
853 | + | $Tuple3(((fh + toBytes(eL)) + eK), (fd + fi), (fe - fi)) | |
841 | 854 | } | |
842 | 855 | } | |
843 | 856 | } | |
844 | 857 | } | |
845 | 858 | ||
846 | 859 | ||
847 | - | func | |
848 | - | let | |
849 | - | if ((size( | |
860 | + | func fj (fb,eO,fc,fk,fl,fm,eW) = { | |
861 | + | let eE = split(fb, ":") | |
862 | + | if ((size(eE) != 2)) | |
850 | 863 | then throw("Incorrect format, should be index:amount") | |
851 | - | else if (if (!( | |
852 | - | then (size( | |
864 | + | else if (if (!(fc)) | |
865 | + | then (size(eE[0]) != 2) | |
853 | 866 | else false) | |
854 | 867 | then throw("Product idx should be 2 digits, zero padded") | |
855 | 868 | else { | |
856 | - | let | |
857 | - | let | |
858 | - | if (if ((0 > | |
869 | + | let ff = parseIntValue(eE[0]) | |
870 | + | let fg = parseIntValue(eE[1]) | |
871 | + | if (if ((0 > ff)) | |
859 | 872 | then true | |
860 | - | else ( | |
873 | + | else (ff >= size(aP))) | |
861 | 874 | then throw("Unknown product idx") | |
862 | - | else if ((0 > | |
875 | + | else if ((0 > fg)) | |
863 | 876 | then throw("Count can't be negative") | |
864 | - | else if (( | |
865 | - | then throw(((("Can't put more than " + toString(s)) + " of ") + | |
866 | - | else if (( | |
867 | - | then $Tuple2( | |
877 | + | else if ((fg > s)) | |
878 | + | then throw(((("Can't put more than " + toString(s)) + " of ") + aL[ff])) | |
879 | + | else if ((fg == 0)) | |
880 | + | then $Tuple2(eO, false) | |
868 | 881 | else { | |
869 | - | let | |
870 | - | let | |
871 | - | let | |
872 | - | let | |
873 | - | if (if (!( | |
874 | - | then ( | |
882 | + | let fh = take(eO, (8 * ff)) | |
883 | + | let eJ = toInt(take(drop(eO, (8 * ff)), 8)) | |
884 | + | let eK = drop(eO, (8 * (ff + 1))) | |
885 | + | let ca = split(aP[ff], "_") | |
886 | + | if (if (!(fc)) | |
887 | + | then (fg > eJ) | |
875 | 888 | else false) | |
876 | - | then throw(((((("You have " + toString( | |
889 | + | then throw(((((("You have " + toString(eJ)) + " of ") + aL[ff]) + ", but tried to use ") + toString(fg))) | |
877 | 890 | else { | |
878 | - | let | |
879 | - | then | |
891 | + | let fn = if (if (!(fc)) | |
892 | + | then eV(eW, split(ca[aS], ",")) | |
880 | 893 | else false) | |
881 | 894 | then { | |
882 | - | let | |
883 | - | if (( | |
895 | + | let fo = ca[aT] | |
896 | + | if ((fo == "")) | |
884 | 897 | then throw("Item cannot be equipped") | |
885 | 898 | else { | |
886 | - | let | |
887 | - | let | |
888 | - | if (( | |
899 | + | let fp = parseIntValue(fo) | |
900 | + | let fq = (fp / 100) | |
901 | + | if ((fk != fq)) | |
889 | 902 | then throw("Segment incompatible") | |
890 | 903 | else { | |
891 | - | let | |
892 | - | if (( | |
904 | + | let fr = ((fp % 100) / 10) | |
905 | + | if ((fl != fr)) | |
893 | 906 | then throw("Slot incompatible") | |
894 | 907 | else { | |
895 | - | let | |
896 | - | if (if (( | |
897 | - | then ( | |
908 | + | let fs = (fp % 10) | |
909 | + | if (if ((fm != 0)) | |
910 | + | then (fs > 1) | |
898 | 911 | else false) | |
899 | 912 | then throw("Big items should occupy slot 0") | |
900 | - | else ( | |
913 | + | else (fs > 1) | |
901 | 914 | } | |
902 | 915 | } | |
903 | 916 | } | |
904 | 917 | } | |
905 | 918 | else false | |
906 | - | $Tuple2((( | |
907 | - | then | |
908 | - | else -( | |
919 | + | $Tuple2(((fh + toBytes((eJ + (if (fc) | |
920 | + | then fg | |
921 | + | else -(fg))))) + eK), fn) | |
909 | 922 | } | |
910 | 923 | } | |
911 | 924 | } | |
912 | 925 | } | |
913 | 926 | ||
914 | 927 | ||
915 | - | func | |
928 | + | func ft (fu,fv,fc,fk,fl,fw) = if ((fu != "")) | |
916 | 929 | then { | |
917 | - | let | |
918 | - | if ((size( | |
930 | + | let fx = split(fu, ",") | |
931 | + | if ((size(fx) > r)) | |
919 | 932 | then throw("Wrong slots format") | |
920 | 933 | else { | |
921 | - | let | |
922 | - | let | |
923 | - | then | |
934 | + | let fy = fx[0] | |
935 | + | let fz = if ((size(fx) > 1)) | |
936 | + | then fx[1] | |
924 | 937 | else "" | |
925 | - | if (if (( | |
926 | - | then ( | |
938 | + | if (if ((fy == "")) | |
939 | + | then (fz == "") | |
927 | 940 | else false) | |
928 | - | then | |
941 | + | then fv | |
929 | 942 | else { | |
930 | - | let | |
931 | - | then | |
932 | - | else $Tuple2( | |
933 | - | if (( | |
934 | - | then if ( | |
943 | + | let fA = if ((fy != "")) | |
944 | + | then fj(fy, fv, fc, fk, fl, 0, fw) | |
945 | + | else $Tuple2(fv, false) | |
946 | + | if ((fz != "")) | |
947 | + | then if (fA._2) | |
935 | 948 | then throw("Big item already occupies slot") | |
936 | - | else | |
937 | - | else | |
949 | + | else fj(fz, fA._1, fc, fk, fl, 1, fw)._1 | |
950 | + | else fA._1 | |
938 | 951 | } | |
939 | 952 | } | |
940 | 953 | } | |
941 | - | else | |
942 | - | ||
943 | - | ||
944 | - | func | |
945 | - | func | |
946 | - | let | |
947 | - | let | |
948 | - | if ((size( | |
954 | + | else fv | |
955 | + | ||
956 | + | ||
957 | + | func fB (fC,fD,fc,fw) = { | |
958 | + | func fk (eg,fE) = { | |
959 | + | let eQ = eg._1 | |
960 | + | let fl = split(fE, ";") | |
961 | + | if ((size(fl) != q)) | |
949 | 962 | then throw("Wrong segment format") | |
950 | 963 | else { | |
951 | - | let | |
952 | - | let | |
953 | - | if (if (( | |
954 | - | then ( | |
964 | + | let fF = fl[0] | |
965 | + | let fG = fl[1] | |
966 | + | if (if ((fF == "")) | |
967 | + | then (fG == "") | |
955 | 968 | else false) | |
956 | - | then $Tuple2(( | |
969 | + | then $Tuple2((eQ + 1), eg._2) | |
957 | 970 | else { | |
958 | - | let | |
959 | - | $Tuple2(( | |
971 | + | let fH = ft(fF, eg._2, fc, eQ, 0, fw) | |
972 | + | $Tuple2((eQ + 1), ft(fG, fH, fc, eQ, 1, fw)) | |
960 | 973 | } | |
961 | 974 | } | |
962 | 975 | } | |
963 | 976 | ||
964 | - | ( let | |
965 | - | let | |
966 | - | let | |
967 | - | func | |
968 | - | then | |
969 | - | else | |
970 | - | ||
971 | - | func | |
972 | - | then | |
977 | + | ( let ei = fC | |
978 | + | let ej = size(ei) | |
979 | + | let ek = $Tuple2(0, fD) | |
980 | + | func el (em,en) = if ((en >= ej)) | |
981 | + | then em | |
982 | + | else fk(em, ei[en]) | |
983 | + | ||
984 | + | func eo (em,en) = if ((en >= ej)) | |
985 | + | then em | |
973 | 986 | else throw("List size exceeds 6") | |
974 | 987 | ||
975 | - | | |
976 | - | } | |
977 | - | ||
978 | - | ||
979 | - | func | |
988 | + | eo(el(el(el(el(el(el(ek, 0), 1), 2), 3), 4), 5), 6))._2 | |
989 | + | } | |
990 | + | ||
991 | + | ||
992 | + | func fI (fC,fD,fd,fe,fc,eW) = if ((3 > size(fC))) | |
980 | 993 | then throw("At least duck, mines and traps parts are required") | |
981 | 994 | else { | |
982 | - | func | |
983 | - | let | |
984 | - | if (( | |
985 | - | then $Tuple4(( | |
995 | + | func fk (eg,fE) = { | |
996 | + | let eQ = eg._1 | |
997 | + | if ((eQ == 0)) | |
998 | + | then $Tuple4((eQ + 1), eg._2, eg._3, eg._4) | |
986 | 999 | else { | |
987 | - | let | |
988 | - | $Tuple4(( | |
1000 | + | let fJ = fa(fE, eg._2, fc, eW, eg._3, eg._4) | |
1001 | + | $Tuple4((eQ + 1), fJ._1, fJ._2, fJ._3) | |
989 | 1002 | } | |
990 | 1003 | } | |
991 | 1004 | ||
992 | - | let | |
993 | - | let | |
994 | - | let | |
995 | - | let | |
996 | - | func | |
997 | - | then | |
998 | - | else | |
999 | - | ||
1000 | - | func | |
1001 | - | then | |
1005 | + | let fK = { | |
1006 | + | let ei = fC | |
1007 | + | let ej = size(ei) | |
1008 | + | let ek = $Tuple4(0, fD, fd, fe) | |
1009 | + | func el (em,en) = if ((en >= ej)) | |
1010 | + | then em | |
1011 | + | else fk(em, ei[en]) | |
1012 | + | ||
1013 | + | func eo (em,en) = if ((en >= ej)) | |
1014 | + | then em | |
1002 | 1015 | else throw("List size exceeds 10") | |
1003 | 1016 | ||
1004 | - | | |
1005 | - | } | |
1006 | - | $Tuple3( | |
1017 | + | eo(el(el(el(el(el(el(el(el(el(el(ek, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10) | |
1018 | + | } | |
1019 | + | $Tuple3(fK._2, fK._3, fK._4) | |
1007 | 1020 | } | |
1008 | 1021 | ||
1009 | 1022 | ||
1010 | - | func | |
1011 | - | let | |
1012 | - | let | |
1013 | - | let | |
1014 | - | let | |
1015 | - | let | |
1023 | + | func fL (z) = { | |
1024 | + | let fM = E(z) | |
1025 | + | let fN = split(valueOrElse(getString(fM), ",;,_,;,_,;,_,;,_,;,_,;,"), "_") | |
1026 | + | let fO = fB(fN, dq, true, nil) | |
1027 | + | let fP = split(fN[o], ";")[1] | |
1028 | + | let am = if ((fP == "")) | |
1016 | 1029 | then 0 | |
1017 | 1030 | else { | |
1018 | - | let | |
1019 | - | if (( | |
1031 | + | let fQ = split(fP, ",")[0] | |
1032 | + | if ((fQ == "")) | |
1020 | 1033 | then 0 | |
1021 | 1034 | else { | |
1022 | - | let | |
1023 | - | let | |
1024 | - | let | |
1025 | - | if (if (if (if (if (( | |
1035 | + | let fb = split(fQ, ":") | |
1036 | + | let cG = fb[0] | |
1037 | + | let fR = fb[1] | |
1038 | + | if (if (if (if (if ((cG == "06")) | |
1026 | 1039 | then true | |
1027 | - | else ( | |
1040 | + | else (cG == "07")) | |
1028 | 1041 | then true | |
1029 | - | else ( | |
1030 | - | then ( | |
1042 | + | else (cG == "08")) | |
1043 | + | then (fR != "") | |
1031 | 1044 | else false) | |
1032 | - | then (parseIntValue( | |
1045 | + | then (parseIntValue(fR) > 0) | |
1033 | 1046 | else false) | |
1034 | - | then parseIntValue(split( | |
1047 | + | then parseIntValue(split(aP[parseIntValue(cG)], "_")[aR]) | |
1035 | 1048 | else 0 | |
1036 | 1049 | } | |
1037 | 1050 | } | |
1038 | - | let | |
1039 | - | let | |
1040 | - | ( | |
1041 | - | } | |
1042 | - | ||
1043 | - | ||
1044 | - | func | |
1051 | + | let fw = ak(this, z, am, true) | |
1052 | + | let fS = fB(fN, fO, false, fw) | |
1053 | + | (fS == fS) | |
1054 | + | } | |
1055 | + | ||
1056 | + | ||
1057 | + | func fT (fU,fV,fW,fX) = if ((size(fU) != aD)) | |
1045 | 1058 | then throw("Wrong proportions data") | |
1046 | 1059 | else { | |
1047 | - | func | |
1048 | - | let | |
1049 | - | if ((0 > | |
1050 | - | then throw(((((((("Panic! Pieces of type=" + toString( | |
1051 | - | else ( | |
1052 | - | } | |
1053 | - | ||
1054 | - | let | |
1055 | - | let | |
1056 | - | let | |
1057 | - | func | |
1058 | - | then | |
1059 | - | else | |
1060 | - | ||
1061 | - | func | |
1062 | - | then | |
1060 | + | func fY (eg,fZ) = { | |
1061 | + | let ey = (parseIntValue(fU[fZ]) + ((fX * fV[fZ]) * fW)) | |
1062 | + | if ((0 > ey)) | |
1063 | + | then throw(((((((("Panic! Pieces of type=" + toString(fZ)) + ", sign=") + toString(fX)) + ", terrainCounts[i]=") + toString(fV[fZ])) + ", landSizeIndex=") + toString(fW))) | |
1064 | + | else (eg :+ toString(ey)) | |
1065 | + | } | |
1066 | + | ||
1067 | + | let ei = cr | |
1068 | + | let ej = size(ei) | |
1069 | + | let ek = nil | |
1070 | + | func el (em,en) = if ((en >= ej)) | |
1071 | + | then em | |
1072 | + | else fY(em, ei[en]) | |
1073 | + | ||
1074 | + | func eo (em,en) = if ((en >= ej)) | |
1075 | + | then em | |
1063 | 1076 | else throw("List size exceeds 6") | |
1064 | 1077 | ||
1065 | - | | |
1078 | + | eo(el(el(el(el(el(el(ek, 0), 1), 2), 3), 4), 5), 6) | |
1066 | 1079 | } | |
1067 | 1080 | ||
1068 | 1081 | ||
1069 | - | func | |
1070 | - | let | |
1071 | - | makeString( | |
1072 | - | } | |
1073 | - | ||
1074 | - | ||
1075 | - | func | |
1076 | - | ||
1077 | - | ||
1078 | - | func | |
1079 | - | func | |
1080 | - | let | |
1081 | - | ( | |
1082 | + | func ga (fV,fW,fX) = { | |
1083 | + | let fU = split(valueOrElse(getString(cU()), "0_0_0_0_0_0"), "_") | |
1084 | + | makeString(fT(fU, fV, fW, fX), "_") | |
1085 | + | } | |
1086 | + | ||
1087 | + | ||
1088 | + | func gb (gc) = [(size(split(gc, "A")) - 1), (size(split(gc, "B")) - 1), (size(split(gc, "C")) - 1), (size(split(gc, "D")) - 1), (size(split(gc, "E")) - 1), (size(split(gc, "F")) - 1)] | |
1089 | + | ||
1090 | + | ||
1091 | + | func gd (ge,fV,gf,fW,gg) = { | |
1092 | + | func gh (eg,fZ) = { | |
1093 | + | let gi = ((fraction(gf, gg, aG) * fV[fZ]) * fW) | |
1094 | + | (eg :+ toString((parseIntValue(ge[fZ]) + gi))) | |
1082 | 1095 | } | |
1083 | 1096 | ||
1084 | - | let | |
1085 | - | let | |
1086 | - | let | |
1087 | - | let | |
1088 | - | func | |
1089 | - | then | |
1090 | - | else | |
1091 | - | ||
1092 | - | func | |
1093 | - | then | |
1097 | + | let er = { | |
1098 | + | let ei = cr | |
1099 | + | let ej = size(ei) | |
1100 | + | let ek = nil | |
1101 | + | func el (em,en) = if ((en >= ej)) | |
1102 | + | then em | |
1103 | + | else gh(em, ei[en]) | |
1104 | + | ||
1105 | + | func eo (em,en) = if ((en >= ej)) | |
1106 | + | then em | |
1094 | 1107 | else throw("List size exceeds 6") | |
1095 | 1108 | ||
1096 | - | | |
1109 | + | eo(el(el(el(el(el(el(ek, 0), 1), 2), 3), 4), 5), 6) | |
1097 | 1110 | } | |
1098 | - | makeString( | |
1099 | - | } | |
1100 | - | ||
1101 | - | ||
1102 | - | func | |
1103 | - | func | |
1104 | - | let | |
1105 | - | $Tuple2(( | |
1111 | + | makeString(er, "_") | |
1112 | + | } | |
1113 | + | ||
1114 | + | ||
1115 | + | func gj (fV,gf,fW,gg) = { | |
1116 | + | func gh (eg,fZ) = { | |
1117 | + | let gi = ((fraction(gf, gg, aG) * fV[fZ]) * fW) | |
1118 | + | $Tuple2((eg._1 :+ gi), (eg._2 + gi)) | |
1106 | 1119 | } | |
1107 | 1120 | ||
1108 | - | let | |
1109 | - | let | |
1110 | - | let | |
1111 | - | func | |
1112 | - | then | |
1113 | - | else | |
1114 | - | ||
1115 | - | func | |
1116 | - | then | |
1121 | + | let ei = cr | |
1122 | + | let ej = size(ei) | |
1123 | + | let ek = $Tuple2(nil, 0) | |
1124 | + | func el (em,en) = if ((en >= ej)) | |
1125 | + | then em | |
1126 | + | else gh(em, ei[en]) | |
1127 | + | ||
1128 | + | func eo (em,en) = if ((en >= ej)) | |
1129 | + | then em | |
1117 | 1130 | else throw("List size exceeds 6") | |
1118 | 1131 | ||
1119 | - | | |
1120 | - | } | |
1121 | - | ||
1122 | - | ||
1123 | - | func | |
1124 | - | let | |
1125 | - | let | |
1126 | - | if (( | |
1127 | - | then $Tuple2(makeString( | |
1128 | - | else if (( | |
1132 | + | eo(el(el(el(el(el(el(ek, 0), 1), 2), 3), 4), 5), 6) | |
1133 | + | } | |
1134 | + | ||
1135 | + | ||
1136 | + | func gk (gl,gm,gn,go) = { | |
1137 | + | let gp = gn._1 | |
1138 | + | let gq = gn._2 | |
1139 | + | if ((gq == 0)) | |
1140 | + | then $Tuple2(makeString(gl, "_"), makeString(gm, "_")) | |
1141 | + | else if ((go >= gq)) | |
1129 | 1142 | then { | |
1130 | - | func | |
1131 | - | ||
1132 | - | let | |
1133 | - | let | |
1134 | - | let | |
1135 | - | let | |
1136 | - | func | |
1137 | - | then | |
1138 | - | else | |
1139 | - | ||
1140 | - | func | |
1141 | - | then | |
1143 | + | func gr (eg,fZ) = (eg :+ toString((parseIntValue(gl[fZ]) + gp[fZ]))) | |
1144 | + | ||
1145 | + | let er = { | |
1146 | + | let ei = cr | |
1147 | + | let ej = size(ei) | |
1148 | + | let ek = nil | |
1149 | + | func el (em,en) = if ((en >= ej)) | |
1150 | + | then em | |
1151 | + | else gr(em, ei[en]) | |
1152 | + | ||
1153 | + | func eo (em,en) = if ((en >= ej)) | |
1154 | + | then em | |
1142 | 1155 | else throw("List size exceeds 6") | |
1143 | 1156 | ||
1144 | - | | |
1157 | + | eo(el(el(el(el(el(el(ek, 0), 1), 2), 3), 4), 5), 6) | |
1145 | 1158 | } | |
1146 | - | $Tuple2(makeString( | |
1159 | + | $Tuple2(makeString(er, "_"), makeString(gm, "_")) | |
1147 | 1160 | } | |
1148 | 1161 | else { | |
1149 | - | func | |
1150 | - | let | |
1151 | - | $Tuple2(( | |
1162 | + | func gs (eg,fZ) = { | |
1163 | + | let gt = fraction(gp[fZ], go, gq) | |
1164 | + | $Tuple2((eg._1 :+ toString((parseIntValue(gl[fZ]) + gt))), (eg._2 :+ toString(((parseIntValue(gm[fZ]) + gp[fZ]) - gt)))) | |
1152 | 1165 | } | |
1153 | 1166 | ||
1154 | - | let | |
1155 | - | let | |
1156 | - | let | |
1157 | - | let | |
1158 | - | func | |
1159 | - | then | |
1160 | - | else | |
1161 | - | ||
1162 | - | func | |
1163 | - | then | |
1167 | + | let er = { | |
1168 | + | let ei = cr | |
1169 | + | let ej = size(ei) | |
1170 | + | let ek = $Tuple2(nil, nil) | |
1171 | + | func el (em,en) = if ((en >= ej)) | |
1172 | + | then em | |
1173 | + | else gs(em, ei[en]) | |
1174 | + | ||
1175 | + | func eo (em,en) = if ((en >= ej)) | |
1176 | + | then em | |
1164 | 1177 | else throw("List size exceeds 6") | |
1165 | 1178 | ||
1166 | - | | |
1179 | + | eo(el(el(el(el(el(el(ek, 0), 1), 2), 3), 4), 5), 6) | |
1167 | 1180 | } | |
1168 | - | $Tuple2(makeString( | |
1181 | + | $Tuple2(makeString(er._1, "_"), makeString(er._2, "_")) | |
1169 | 1182 | } | |
1170 | 1183 | } | |
1171 | 1184 | ||
1172 | 1185 | ||
1173 | - | func | |
1174 | - | then | |
1175 | - | else -( | |
1176 | - | ||
1177 | - | ||
1178 | - | let | |
1179 | - | ||
1180 | - | func | |
1181 | - | let | |
1182 | - | let | |
1186 | + | func gu (gv) = if ((gv >= toBigInt(0))) | |
1187 | + | then gv | |
1188 | + | else -(gv) | |
1189 | + | ||
1190 | + | ||
1191 | + | let gw = [[6, 9, 14, 15, 16], [5, 8, 13, 14, 15], [1, 4, 9, 10, 15], [1, 6, 7, 15, 19], [4, 7, 8, 13, 18]] | |
1192 | + | ||
1193 | + | func gx (dd,gy) = { | |
1194 | + | let gz = toInt((dd % dy)) | |
1195 | + | let gA = if ((gy[0] > gz)) | |
1183 | 1196 | then "A" | |
1184 | - | else if (( | |
1197 | + | else if ((gy[1] > gz)) | |
1185 | 1198 | then "B" | |
1186 | - | else if (( | |
1199 | + | else if ((gy[2] > gz)) | |
1187 | 1200 | then "C" | |
1188 | - | else if (( | |
1201 | + | else if ((gy[3] > gz)) | |
1189 | 1202 | then "D" | |
1190 | - | else if (( | |
1203 | + | else if ((gy[4] > gz)) | |
1191 | 1204 | then "E" | |
1192 | 1205 | else "F" | |
1193 | - | | |
1194 | - | } | |
1195 | - | ||
1196 | - | ||
1197 | - | func | |
1198 | - | let | |
1199 | - | func | |
1200 | - | ||
1201 | - | let | |
1202 | - | let | |
1203 | - | let | |
1204 | - | let | |
1205 | - | func | |
1206 | - | then | |
1207 | - | else | |
1208 | - | ||
1209 | - | func | |
1210 | - | then | |
1206 | + | gA | |
1207 | + | } | |
1208 | + | ||
1209 | + | ||
1210 | + | func gB (gC,gD) = { | |
1211 | + | let gE = gw[gD] | |
1212 | + | func gF (eg,eh) = $Tuple2((((((eg._1 + gx(eg._2, gE)) + gx((eg._2 / dy), gE)) + gx((eg._2 / dz), gE)) + gx((eg._2 / dA), gE)) + gx((eg._2 / dB), gE)), (eg._2 / dC)) | |
1213 | + | ||
1214 | + | let fK = { | |
1215 | + | let ei = [1, 2, 3, 4, 5] | |
1216 | + | let ej = size(ei) | |
1217 | + | let ek = $Tuple2("", (gC / dx)) | |
1218 | + | func el (em,en) = if ((en >= ej)) | |
1219 | + | then em | |
1220 | + | else gF(em, ei[en]) | |
1221 | + | ||
1222 | + | func eo (em,en) = if ((en >= ej)) | |
1223 | + | then em | |
1211 | 1224 | else throw("List size exceeds 5") | |
1212 | 1225 | ||
1213 | - | | |
1226 | + | eo(el(el(el(el(el(ek, 0), 1), 2), 3), 4), 5) | |
1214 | 1227 | } | |
1215 | - | | |
1216 | - | } | |
1217 | - | ||
1218 | - | ||
1219 | - | let | |
1220 | - | ||
1221 | - | let | |
1222 | - | ||
1223 | - | func | |
1224 | - | func | |
1225 | - | let | |
1226 | - | let | |
1227 | - | let | |
1228 | + | fK._1 | |
1229 | + | } | |
1230 | + | ||
1231 | + | ||
1232 | + | let gG = [7, 2, 15, 19, 8, 24, 1, 21, 16, 5, 0, 22, 20, 23, 11, 4, 18, 12, 6, 10, 3, 17, 13, 9, 14] | |
1233 | + | ||
1234 | + | let gH = ["A", "B", "C", "D", "E", "F"] | |
1235 | + | ||
1236 | + | func gI (gJ,fW) = { | |
1237 | + | func gK (eg,db) = { | |
1238 | + | let eQ = eg._2 | |
1239 | + | let gL = parseIntValue(db) | |
1240 | + | let gv = if ((gL == 0)) | |
1228 | 1241 | then 0 | |
1229 | - | else if (( | |
1230 | - | then ( | |
1231 | - | else if (( | |
1242 | + | else if ((gL >= (4 * fW))) | |
1243 | + | then (gL / fW) | |
1244 | + | else if ((gL > (3 * fW))) | |
1232 | 1245 | then 3 | |
1233 | - | else ((( | |
1234 | - | $Tuple3(( | |
1246 | + | else (((gL - 1) / fW) + 1) | |
1247 | + | $Tuple3((eg._1 :+ gv), (eg._2 + 1), (eg._3 + gv)) | |
1235 | 1248 | } | |
1236 | 1249 | ||
1237 | - | let | |
1238 | - | let | |
1239 | - | let | |
1240 | - | let | |
1241 | - | func | |
1242 | - | then | |
1243 | - | else | |
1244 | - | ||
1245 | - | func | |
1246 | - | then | |
1250 | + | let fK = { | |
1251 | + | let ei = gJ | |
1252 | + | let ej = size(ei) | |
1253 | + | let ek = $Tuple3(nil, 0, 0) | |
1254 | + | func el (em,en) = if ((en >= ej)) | |
1255 | + | then em | |
1256 | + | else gK(em, ei[en]) | |
1257 | + | ||
1258 | + | func eo (em,en) = if ((en >= ej)) | |
1259 | + | then em | |
1247 | 1260 | else throw("List size exceeds 6") | |
1248 | 1261 | ||
1249 | - | | |
1262 | + | eo(el(el(el(el(el(el(ek, 0), 1), 2), 3), 4), 5), 6) | |
1250 | 1263 | } | |
1251 | - | let | |
1252 | - | let | |
1253 | - | let | |
1254 | - | func | |
1255 | - | let | |
1256 | - | then ( | |
1257 | - | else | |
1258 | - | let | |
1264 | + | let gM = fK._1 | |
1265 | + | let gN = value(indexOf(gM, max(gM))) | |
1266 | + | let gO = (fK._3 - 25) | |
1267 | + | func gP (eg,cG) = { | |
1268 | + | let gQ = if ((cG == gN)) | |
1269 | + | then (gM[cG] - gO) | |
1270 | + | else gM[cG] | |
1271 | + | let gR = if ((gQ == 0)) | |
1259 | 1272 | then nil | |
1260 | - | else split(drop(toString(pow(10, 0, | |
1261 | - | let | |
1262 | - | func | |
1263 | - | ||
1264 | - | let | |
1265 | - | let | |
1266 | - | let | |
1267 | - | let | |
1268 | - | func | |
1269 | - | then | |
1270 | - | else | |
1271 | - | ||
1272 | - | func | |
1273 | - | then | |
1273 | + | else split(drop(toString(pow(10, 0, gQ, 0, 0, DOWN)), 1), "") | |
1274 | + | let fp = gH[cG] | |
1275 | + | func gS (gT,gU) = (gT :+ fp) | |
1276 | + | ||
1277 | + | let gV = { | |
1278 | + | let ei = gR | |
1279 | + | let ej = size(ei) | |
1280 | + | let ek = nil | |
1281 | + | func gW (em,en) = if ((en >= ej)) | |
1282 | + | then em | |
1283 | + | else gS(em, ei[en]) | |
1284 | + | ||
1285 | + | func gX (em,en) = if ((en >= ej)) | |
1286 | + | then em | |
1274 | 1287 | else throw("List size exceeds 25") | |
1275 | 1288 | ||
1276 | - | | |
1277 | - | } | |
1278 | - | ( | |
1289 | + | gX(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(ek, 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) | |
1290 | + | } | |
1291 | + | (eg ++ gV) | |
1279 | 1292 | } | |
1280 | 1293 | ||
1281 | - | let | |
1282 | - | let | |
1283 | - | let | |
1284 | - | let | |
1285 | - | func | |
1286 | - | then | |
1287 | - | else | |
1288 | - | ||
1289 | - | func | |
1290 | - | then | |
1294 | + | let er = { | |
1295 | + | let ei = cr | |
1296 | + | let ej = size(ei) | |
1297 | + | let ek = nil | |
1298 | + | func gW (em,en) = if ((en >= ej)) | |
1299 | + | then em | |
1300 | + | else gP(em, ei[en]) | |
1301 | + | ||
1302 | + | func gX (em,en) = if ((en >= ej)) | |
1303 | + | then em | |
1291 | 1304 | else throw("List size exceeds 6") | |
1292 | 1305 | ||
1293 | - | | |
1306 | + | gX(gW(gW(gW(gW(gW(gW(ek, 0), 1), 2), 3), 4), 5), 6) | |
1294 | 1307 | } | |
1295 | - | func | |
1296 | - | ||
1297 | - | let | |
1298 | - | let | |
1299 | - | let | |
1300 | - | func | |
1301 | - | then | |
1302 | - | else | |
1303 | - | ||
1304 | - | func | |
1305 | - | then | |
1308 | + | func gY (eg,eQ) = (eg + er[eQ]) | |
1309 | + | ||
1310 | + | let ei = gG | |
1311 | + | let ej = size(ei) | |
1312 | + | let ek = "" | |
1313 | + | func gZ (em,en) = if ((en >= ej)) | |
1314 | + | then em | |
1315 | + | else gY(em, ei[en]) | |
1316 | + | ||
1317 | + | func ha (em,en) = if ((en >= ej)) | |
1318 | + | then em | |
1306 | 1319 | else throw("List size exceeds 25") | |
1307 | 1320 | ||
1308 | - | | |
1309 | - | } | |
1310 | - | ||
1311 | - | ||
1312 | - | func | |
1313 | - | let | |
1314 | - | [toString(valueOrElse(parseInt( | |
1315 | - | then | |
1316 | - | else "0_0_0_0_0_0", if ((size(split( | |
1317 | - | then | |
1318 | - | else "0_0_0_0_0_0", | |
1319 | - | } | |
1320 | - | ||
1321 | - | ||
1322 | - | func | |
1323 | - | let | |
1324 | - | (( | |
1325 | - | } | |
1326 | - | ||
1327 | - | ||
1328 | - | func | |
1329 | - | let | |
1330 | - | func | |
1331 | - | ||
1332 | - | func | |
1333 | - | let | |
1334 | - | let | |
1335 | - | $Tuple2(( | |
1321 | + | ha(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(ek, 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) | |
1322 | + | } | |
1323 | + | ||
1324 | + | ||
1325 | + | func hb (hc) = { | |
1326 | + | let fJ = split(valueOrElse(getString(hc), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":") | |
1327 | + | [toString(valueOrElse(parseInt(fJ[be]), 0)), if ((size(split(fJ[bf], "_")) == aD)) | |
1328 | + | then fJ[bf] | |
1329 | + | else "0_0_0_0_0_0", if ((size(split(fJ[bg], "_")) == aD)) | |
1330 | + | then fJ[bg] | |
1331 | + | else "0_0_0_0_0_0", fJ[bh]] | |
1332 | + | } | |
1333 | + | ||
1334 | + | ||
1335 | + | func hd (he) = { | |
1336 | + | let eE = split(he, "_") | |
1337 | + | ((aH * (parseIntValue(eE[1]) + 1)) * parseIntValue(eE[0])) | |
1338 | + | } | |
1339 | + | ||
1340 | + | ||
1341 | + | func hf (hg) = { | |
1342 | + | let hh = hg[aY] | |
1343 | + | func hi (eg,hj) = (eg + parseIntValue(hj)) | |
1344 | + | ||
1345 | + | func hk (eg,hj) = { | |
1346 | + | let cG = eg._1 | |
1347 | + | let dZ = (((parseIntValue(hj) + aU) - 1) / aU) | |
1348 | + | $Tuple2((cG + 1), (eg._2 + (dZ * cl))) | |
1336 | 1349 | } | |
1337 | 1350 | ||
1338 | - | let | |
1339 | - | let | |
1340 | - | let | |
1341 | - | let | |
1342 | - | func | |
1343 | - | then | |
1344 | - | else | |
1345 | - | ||
1346 | - | func | |
1347 | - | then | |
1351 | + | let hl = { | |
1352 | + | let ei = split(hg[aW], "_") | |
1353 | + | let ej = size(ei) | |
1354 | + | let ek = 0 | |
1355 | + | func el (em,en) = if ((en >= ej)) | |
1356 | + | then em | |
1357 | + | else hi(em, ei[en]) | |
1358 | + | ||
1359 | + | func eo (em,en) = if ((en >= ej)) | |
1360 | + | then em | |
1348 | 1361 | else throw("List size exceeds 6") | |
1349 | 1362 | ||
1350 | - | | |
1363 | + | eo(el(el(el(el(el(el(ek, 0), 1), 2), 3), 4), 5), 6) | |
1351 | 1364 | } | |
1352 | - | let | |
1353 | - | let | |
1354 | - | let | |
1355 | - | let | |
1356 | - | func | |
1357 | - | then | |
1358 | - | else | |
1359 | - | ||
1360 | - | func | |
1361 | - | then | |
1365 | + | let hm = { | |
1366 | + | let ei = split(hg[aX], "_") | |
1367 | + | let ej = size(ei) | |
1368 | + | let ek = 0 | |
1369 | + | func gW (em,en) = if ((en >= ej)) | |
1370 | + | then em | |
1371 | + | else hi(em, ei[en]) | |
1372 | + | ||
1373 | + | func gX (em,en) = if ((en >= ej)) | |
1374 | + | then em | |
1362 | 1375 | else throw("List size exceeds 6") | |
1363 | 1376 | ||
1364 | - | | |
1377 | + | gX(gW(gW(gW(gW(gW(gW(ek, 0), 1), 2), 3), 4), 5), 6) | |
1365 | 1378 | } | |
1366 | - | let | |
1379 | + | let hn = if ((hh == "")) | |
1367 | 1380 | then 0 | |
1368 | - | else ( let | |
1369 | - | let | |
1370 | - | let | |
1371 | - | func | |
1372 | - | then | |
1373 | - | else | |
1374 | - | ||
1375 | - | func | |
1376 | - | then | |
1381 | + | else ( let ei = split_4C(hh, "_") | |
1382 | + | let ej = size(ei) | |
1383 | + | let ek = $Tuple2(0, 0) | |
1384 | + | func gZ (em,en) = if ((en >= ej)) | |
1385 | + | then em | |
1386 | + | else hk(em, ei[en]) | |
1387 | + | ||
1388 | + | func ha (em,en) = if ((en >= ej)) | |
1389 | + | then em | |
1377 | 1390 | else throw("List size exceeds 50") | |
1378 | 1391 | ||
1379 | - | | |
1380 | - | (( | |
1381 | - | } | |
1382 | - | ||
1383 | - | ||
1384 | - | func | |
1385 | - | let | |
1386 | - | let | |
1387 | - | let | |
1388 | - | let | |
1389 | - | let | |
1390 | - | let | |
1391 | - | then makeString(["0", toString( | |
1392 | + | ha(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(ek, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50))._2 | |
1393 | + | ((hl + hm) + hn) | |
1394 | + | } | |
1395 | + | ||
1396 | + | ||
1397 | + | func ho (hp,hq,hr) = { | |
1398 | + | let he = ((toString(hq) + "_") + toString(hr)) | |
1399 | + | let hs = hd(he) | |
1400 | + | let ht = valueOrElse(getString(hp), (he + ":0_0_0_0_0_0:0_0_0_0_0_0::0")) | |
1401 | + | let hu = split_4C(ht, ":") | |
1402 | + | let hv = hf(hu) | |
1403 | + | let hw = if ((5 > size(hu))) | |
1404 | + | then makeString(["0", toString(hv), toString((hs - hv)), toString(hs)], "_") | |
1392 | 1405 | else { | |
1393 | - | let | |
1394 | - | let | |
1395 | - | let | |
1396 | - | then parseIntValue( | |
1397 | - | else | |
1398 | - | makeString([toString( | |
1399 | - | } | |
1400 | - | [ | |
1401 | - | then | |
1402 | - | else "0_0_0_0_0_0", if ((size(split( | |
1403 | - | then | |
1404 | - | else "0_0_0_0_0_0", | |
1405 | - | } | |
1406 | - | ||
1407 | - | ||
1408 | - | func | |
1409 | - | let | |
1410 | - | let | |
1411 | - | (( | |
1412 | - | } | |
1413 | - | ||
1414 | - | ||
1415 | - | func | |
1406 | + | let hx = split(hu[aZ], "_") | |
1407 | + | let hy = parseIntValue(hx[ba]) | |
1408 | + | let hz = if ((size(hx) > 1)) | |
1409 | + | then parseIntValue(hx[bb]) | |
1410 | + | else hv | |
1411 | + | makeString([toString(hy), toString(hz), toString(((hs - hy) - hz)), toString(hs)], "_") | |
1412 | + | } | |
1413 | + | [hu[aV], if ((size(split(hu[aW], "_")) == aD)) | |
1414 | + | then hu[aW] | |
1415 | + | else "0_0_0_0_0_0", if ((size(split(hu[aX], "_")) == aD)) | |
1416 | + | then hu[aX] | |
1417 | + | else "0_0_0_0_0_0", hu[aY], hw] | |
1418 | + | } | |
1419 | + | ||
1420 | + | ||
1421 | + | func hA (hg) = { | |
1422 | + | let hB = hf(hg) | |
1423 | + | let hC = parseIntValue(split(hg[aZ], "_")[ba]) | |
1424 | + | ((hd(hg[aV]) - hB) - hC) | |
1425 | + | } | |
1426 | + | ||
1427 | + | ||
1428 | + | func hD (hE,hg,hF) = if ((size(hE) != 3)) | |
1416 | 1429 | then throw("cargoListStr should contain exactly 2 ':' separators") | |
1417 | 1430 | else { | |
1418 | - | let | |
1419 | - | let | |
1420 | - | let | |
1431 | + | let hG = split(hE[0], "_") | |
1432 | + | let hH = split(hE[1], "_") | |
1433 | + | let hI = if ((hE[2] == "")) | |
1421 | 1434 | then nil | |
1422 | - | else split_4C( | |
1423 | - | if ((size( | |
1435 | + | else split_4C(hE[2], "_") | |
1436 | + | if ((size(hG) != aD)) | |
1424 | 1437 | then throw("All 6 resources should be passed") | |
1425 | - | else if ((size( | |
1438 | + | else if ((size(hH) != aD)) | |
1426 | 1439 | then throw("All 6 materials should be passed") | |
1427 | 1440 | else { | |
1428 | - | let | |
1429 | - | let | |
1430 | - | let | |
1431 | - | let | |
1441 | + | let go = hA(hg) | |
1442 | + | let hJ = split(hg[aW], "_") | |
1443 | + | let hK = split(hg[aX], "_") | |
1444 | + | let hL = if ((hg[aY] == "")) | |
1432 | 1445 | then nil | |
1433 | - | else split_4C( | |
1434 | - | let | |
1435 | - | let | |
1436 | - | let | |
1446 | + | else split_4C(hg[aY], "_") | |
1447 | + | let gm = split(hF[bf], "_") | |
1448 | + | let hM = split(hF[bg], "_") | |
1449 | + | let hN = if ((hF[bh] == "")) | |
1437 | 1450 | then nil | |
1438 | - | else split_4C( | |
1439 | - | func | |
1440 | - | let | |
1441 | - | let | |
1442 | - | let | |
1443 | - | let | |
1444 | - | if (( | |
1445 | - | then $Tuple4(( | |
1446 | - | else if (( | |
1447 | - | then if (( | |
1448 | - | then throw((((("Attempt to take " + | |
1449 | - | else $Tuple4(( | |
1450 | - | else if ((-( | |
1451 | - | then throw((((("Attempt to take " + toString(-( | |
1452 | - | else $Tuple4(( | |
1451 | + | else split_4C(hF[bh], "_") | |
1452 | + | func hO (eg,hj) = { | |
1453 | + | let fZ = eg._1 | |
1454 | + | let hP = parseIntValue(hj) | |
1455 | + | let hQ = parseIntValue(hJ[fZ]) | |
1456 | + | let hR = parseIntValue(gm[fZ]) | |
1457 | + | if ((hP == 0)) | |
1458 | + | then $Tuple4((fZ + 1), (eg._2 :+ hJ[fZ]), (eg._3 :+ gm[fZ]), eg._4) | |
1459 | + | else if ((hP > 0)) | |
1460 | + | then if ((hP > hR)) | |
1461 | + | then throw((((("Attempt to take " + hj) + " from backpack, but only ") + toString(hR)) + " available")) | |
1462 | + | else $Tuple4((fZ + 1), (eg._2 :+ toString((hQ + hP))), (eg._3 :+ toString((hR - hP))), (eg._4 + hP)) | |
1463 | + | else if ((-(hP) > hQ)) | |
1464 | + | then throw((((("Attempt to take " + toString(-(hP))) + " from warehouse, but only ") + toString(hQ)) + " available")) | |
1465 | + | else $Tuple4((fZ + 1), (eg._2 :+ toString((hQ + hP))), (eg._3 :+ toString((hR - hP))), (eg._4 + hP)) | |
1453 | 1466 | } | |
1454 | 1467 | ||
1455 | - | let | |
1456 | - | let | |
1457 | - | let | |
1458 | - | let | |
1459 | - | func | |
1460 | - | then | |
1461 | - | else | |
1462 | - | ||
1463 | - | func | |
1464 | - | then | |
1468 | + | let er = { | |
1469 | + | let ei = hG | |
1470 | + | let ej = size(ei) | |
1471 | + | let ek = $Tuple4(0, nil, nil, 0) | |
1472 | + | func el (em,en) = if ((en >= ej)) | |
1473 | + | then em | |
1474 | + | else hO(em, ei[en]) | |
1475 | + | ||
1476 | + | func eo (em,en) = if ((en >= ej)) | |
1477 | + | then em | |
1465 | 1478 | else throw("List size exceeds 6") | |
1466 | 1479 | ||
1467 | - | | |
1480 | + | eo(el(el(el(el(el(el(ek, 0), 1), 2), 3), 4), 5), 6) | |
1468 | 1481 | } | |
1469 | - | func | |
1470 | - | let | |
1471 | - | let | |
1472 | - | let | |
1473 | - | let | |
1474 | - | if (( | |
1475 | - | then $Tuple4(( | |
1476 | - | else if (( | |
1477 | - | then if (( | |
1478 | - | then throw((((("Attempt to take " + | |
1479 | - | else $Tuple4(( | |
1480 | - | else if ((-( | |
1481 | - | then throw((((("Attempt to take " + toString(-( | |
1482 | - | else $Tuple4(( | |
1482 | + | func hS (eg,hj) = { | |
1483 | + | let fZ = eg._1 | |
1484 | + | let hP = parseIntValue(hj) | |
1485 | + | let hT = parseIntValue(hK[fZ]) | |
1486 | + | let hU = parseIntValue(hM[fZ]) | |
1487 | + | if ((hP == 0)) | |
1488 | + | then $Tuple4((fZ + 1), (eg._2 :+ hK[fZ]), (eg._3 :+ hM[fZ]), eg._4) | |
1489 | + | else if ((hP > 0)) | |
1490 | + | then if ((hP > hU)) | |
1491 | + | then throw((((("Attempt to take " + hj) + " from backpack, but only ") + toString(hU)) + " available")) | |
1492 | + | else $Tuple4((fZ + 1), (eg._2 :+ toString((hT + hP))), (eg._3 :+ toString((hU - hP))), (eg._4 + hP)) | |
1493 | + | else if ((-(hP) > hT)) | |
1494 | + | then throw((((("Attempt to take " + toString(-(hP))) + " from warehouse, but only ") + toString(hT)) + " available")) | |
1495 | + | else $Tuple4((fZ + 1), (eg._2 :+ toString((hT + hP))), (eg._3 :+ toString((hU - hP))), (eg._4 + hP)) | |
1483 | 1496 | } | |
1484 | 1497 | ||
1485 | - | let | |
1486 | - | let | |
1487 | - | let | |
1488 | - | let | |
1489 | - | func | |
1490 | - | then | |
1491 | - | else | |
1492 | - | ||
1493 | - | func | |
1494 | - | then | |
1498 | + | let fF = { | |
1499 | + | let ei = hH | |
1500 | + | let ej = size(ei) | |
1501 | + | let ek = $Tuple4(0, nil, nil, er._4) | |
1502 | + | func gW (em,en) = if ((en >= ej)) | |
1503 | + | then em | |
1504 | + | else hS(em, ei[en]) | |
1505 | + | ||
1506 | + | func gX (em,en) = if ((en >= ej)) | |
1507 | + | then em | |
1495 | 1508 | else throw("List size exceeds 6") | |
1496 | 1509 | ||
1497 | - | | |
1510 | + | gX(gW(gW(gW(gW(gW(gW(ek, 0), 1), 2), 3), 4), 5), 6) | |
1498 | 1511 | } | |
1499 | - | func | |
1500 | - | let | |
1501 | - | let | |
1502 | - | let | |
1503 | - | then parseIntValue( | |
1512 | + | func hV (eg,hj) = { | |
1513 | + | let fZ = eg._1 | |
1514 | + | let hP = parseIntValue(hj) | |
1515 | + | let hW = if ((size(hL) > fZ)) | |
1516 | + | then parseIntValue(hL[fZ]) | |
1504 | 1517 | else 0 | |
1505 | - | let | |
1506 | - | then parseIntValue( | |
1518 | + | let hX = if ((size(hN) > fZ)) | |
1519 | + | then parseIntValue(hN[fZ]) | |
1507 | 1520 | else 0 | |
1508 | - | if (( | |
1509 | - | then $Tuple4(( | |
1510 | - | else if (( | |
1511 | - | then if (( | |
1512 | - | then throw((((("Attempt to take " + | |
1521 | + | if ((hP == 0)) | |
1522 | + | then $Tuple4((fZ + 1), (eg._2 :+ toString(hW)), (eg._3 :+ toString(hX)), eg._4) | |
1523 | + | else if ((hP > 0)) | |
1524 | + | then if ((hP > hX)) | |
1525 | + | then throw((((("Attempt to take " + hj) + " from backpack, but only ") + toString(hX)) + " available")) | |
1513 | 1526 | else { | |
1514 | - | let | |
1515 | - | $Tuple4(( | |
1527 | + | let fi = (dW((hW + hP), aU) - dW(hW, aU)) | |
1528 | + | $Tuple4((fZ + 1), (eg._2 :+ toString((hW + hP))), (eg._3 :+ toString((hX - hP))), (eg._4 + fi)) | |
1516 | 1529 | } | |
1517 | - | else if ((-( | |
1518 | - | then throw((((("Attempt to take " + toString(-( | |
1530 | + | else if ((-(hP) > hW)) | |
1531 | + | then throw((((("Attempt to take " + toString(-(hP))) + " from warehouse, but only ") + toString(hW)) + " available")) | |
1519 | 1532 | else { | |
1520 | - | let | |
1521 | - | $Tuple4(( | |
1533 | + | let fi = (dW((hW + hP), aU) - dW(hW, aU)) | |
1534 | + | $Tuple4((fZ + 1), (eg._2 :+ toString((hW + hP))), (eg._3 :+ toString((hX - hP))), (eg._4 + fi)) | |
1522 | 1535 | } | |
1523 | 1536 | } | |
1524 | 1537 | ||
1525 | - | let | |
1538 | + | let fJ = if ((size(hI) != 0)) | |
1526 | 1539 | then { | |
1527 | - | let | |
1528 | - | let | |
1529 | - | let | |
1530 | - | func | |
1531 | - | then | |
1532 | - | else | |
1533 | - | ||
1534 | - | func | |
1535 | - | then | |
1540 | + | let ei = hI | |
1541 | + | let ej = size(ei) | |
1542 | + | let ek = $Tuple4(0, nil, nil, fF._4) | |
1543 | + | func gZ (em,en) = if ((en >= ej)) | |
1544 | + | then em | |
1545 | + | else hV(em, ei[en]) | |
1546 | + | ||
1547 | + | func ha (em,en) = if ((en >= ej)) | |
1548 | + | then em | |
1536 | 1549 | else throw("List size exceeds 50") | |
1537 | 1550 | ||
1538 | - | | |
1551 | + | ha(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(ek, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50) | |
1539 | 1552 | } | |
1540 | - | else $Tuple4(0, | |
1541 | - | let | |
1542 | - | if (( | |
1543 | - | then throw((((("Attempt to put total " + toString( | |
1544 | - | else $Tuple7(makeString( | |
1553 | + | else $Tuple4(0, hL, hN, fF._4) | |
1554 | + | let hY = fJ._4 | |
1555 | + | if ((hY > go)) | |
1556 | + | then throw((((("Attempt to put total " + toString(hY)) + " stuff, but only ") + toString(go)) + " warehouse space left")) | |
1557 | + | else $Tuple7(makeString(er._2, "_"), makeString(fF._2, "_"), makeString_2C(fJ._2, "_"), makeString(er._3, "_"), makeString(fF._3, "_"), makeString_2C(fJ._3, "_"), hY) | |
1545 | 1558 | } | |
1546 | 1559 | } | |
1547 | 1560 | ||
1548 | 1561 | ||
1549 | - | func | |
1550 | - | let | |
1551 | - | let | |
1552 | - | let | |
1553 | - | let | |
1554 | - | let | |
1555 | - | let | |
1556 | - | let | |
1557 | - | let | |
1558 | - | let | |
1559 | - | let | |
1560 | - | $Tuple2([IntegerEntry( | |
1561 | - | } | |
1562 | - | ||
1563 | - | ||
1564 | - | func | |
1562 | + | func hZ (ia,ib) = { | |
1563 | + | let bH = toString(ia) | |
1564 | + | let ic = gu(toBigInt(ib)) | |
1565 | + | let id = valueOrElse(getInteger(dE()), (dD + 1)) | |
1566 | + | let dI = toString(id) | |
1567 | + | let gD = toInt((ic % dx)) | |
1568 | + | let gc = gB(ic, gD) | |
1569 | + | let cW = aM[gD] | |
1570 | + | let ie = Issue(dV(dI, "S"), makeString([dI, "S", gc, cW], "_"), 1, 0, false) | |
1571 | + | let bk = calculateAssetId(ie) | |
1572 | + | let if = toBase58String(bk) | |
1573 | + | $Tuple2([IntegerEntry(dE(), (id + 1)), ie, StringEntry(dH(dI), if), StringEntry(bj(if), bH), StringEntry(dK(dI), bH), IntegerEntry(bt(if), 0), IntegerEntry(dJ(if, bH), 0), ScriptTransfer(ia, 1, bk)], $Tuple2(if, cW)) | |
1574 | + | } | |
1575 | + | ||
1576 | + | ||
1577 | + | func ig (bH,ih,ii) = if (!(sigVerify_8Kb(ih, ii, dp))) | |
1565 | 1578 | then throw("signature does not match") | |
1566 | 1579 | else { | |
1567 | - | let | |
1568 | - | let | |
1569 | - | let | |
1570 | - | let | |
1571 | - | let | |
1572 | - | let | |
1573 | - | let | |
1574 | - | let | |
1575 | - | if (if (( | |
1580 | + | let eE = split(toUtf8String(ih), ";") | |
1581 | + | let ij = split(eE[0], "|") | |
1582 | + | let ik = split(ij[dR], "_") | |
1583 | + | let il = parseIntValue(ik[0]) | |
1584 | + | let im = parseIntValue(ik[1]) | |
1585 | + | let in = split(eE[1], ":") | |
1586 | + | let io = in[0] | |
1587 | + | let ip = parseIntValue(ij[dS]) | |
1588 | + | if (if ((ip > (lastBlock.timestamp + dr))) | |
1576 | 1589 | then true | |
1577 | - | else ((lastBlock.timestamp - | |
1578 | - | then throw(((("signature outdated: logTime=" + toString( | |
1590 | + | else ((lastBlock.timestamp - dr) > ip)) | |
1591 | + | then throw(((("signature outdated: logTime=" + toString(ip)) + ", bcTime=") + toString(lastBlock.timestamp))) | |
1579 | 1592 | else { | |
1580 | - | let | |
1581 | - | let | |
1582 | - | if (( | |
1583 | - | then throw(((("Tx ids don't match! In state: " + | |
1593 | + | let iq = in[1] | |
1594 | + | let ir = valueOrElse(getString(bi(bH)), "") | |
1595 | + | if ((ir != iq)) | |
1596 | + | then throw(((("Tx ids don't match! In state: " + ir) + ", in msg: ") + iq)) | |
1584 | 1597 | else { | |
1585 | - | let | |
1586 | - | let | |
1587 | - | let | |
1588 | - | let | |
1589 | - | if (( | |
1590 | - | then throw(((("oldHealth=" + toString( | |
1591 | - | else if ((0 >= | |
1598 | + | let z = valueOrErrorMessage(getString(bC(bH)), "You don't have a duck staked") | |
1599 | + | let is = y(z) | |
1600 | + | let it = ae(valueOrElse(getInteger(C(z)), 0)) | |
1601 | + | let iu = valueOrElse(getInteger(is), it) | |
1602 | + | if ((iu != il)) | |
1603 | + | then throw(((("oldHealth=" + toString(iu)) + " from state does not match one from flight log=") + toString(il))) | |
1604 | + | else if ((0 >= il)) | |
1592 | 1605 | then throw("You can't fly with zero health") | |
1593 | - | else if (!( | |
1606 | + | else if (!(fL(z))) | |
1594 | 1607 | then throw("Equipment incompatible") | |
1595 | 1608 | else { | |
1596 | - | let | |
1597 | - | then | |
1609 | + | let iv = if ((size(ij) > dT)) | |
1610 | + | then ij[dT] | |
1598 | 1611 | else "" | |
1599 | - | let | |
1600 | - | then | |
1612 | + | let iw = if ((size(ij) > dU)) | |
1613 | + | then ij[dU] | |
1601 | 1614 | else "" | |
1602 | - | let | |
1603 | - | then ( | |
1615 | + | let ix = if (if ((im > 0)) | |
1616 | + | then (iv == "$") | |
1604 | 1617 | else false) | |
1605 | - | then | |
1618 | + | then dc(invoke(cH, "sendUsdtPrize", [bH], nil)) | |
1606 | 1619 | else 0 | |
1607 | - | $Tuple5( | |
1620 | + | $Tuple5(im, z, ix, io, iw) | |
1608 | 1621 | } | |
1609 | 1622 | } | |
1610 | 1623 | } | |
1611 | 1624 | } | |
1612 | 1625 | ||
1613 | 1626 | ||
1614 | - | func | |
1615 | - | let | |
1616 | - | let | |
1617 | - | let | |
1618 | - | let | |
1619 | - | let | |
1620 | - | let | |
1621 | - | let | |
1622 | - | let | |
1623 | - | let | |
1624 | - | let | |
1625 | - | let | |
1626 | - | let | |
1627 | - | let | |
1628 | - | if ((0 >= | |
1629 | - | then $Tuple3([IntegerEntry( | |
1627 | + | func iy (ia,ib,ih,ii) = { | |
1628 | + | let bH = toString(ia) | |
1629 | + | let gE = ig(bH, ih, ii) | |
1630 | + | let z = gE._2 | |
1631 | + | let is = y(z) | |
1632 | + | let hc = bD(z) | |
1633 | + | let hF = hb(hc) | |
1634 | + | let iz = split(hF[bg], "_") | |
1635 | + | let iA = makeString(es(true, iz, dv), "_") | |
1636 | + | let fM = E(z) | |
1637 | + | let iB = valueOrElse(getString(fM), ",;,_,;,_,;,_,;,_,;,_,;,") | |
1638 | + | let iC = ez(iB, gE._5) | |
1639 | + | let iD = iC._1 | |
1640 | + | let iE = iC._2 | |
1641 | + | if ((0 >= gE._1)) | |
1642 | + | then $Tuple3([IntegerEntry(is, 0), StringEntry(fM, iD)], "", 0) | |
1630 | 1643 | else { | |
1631 | - | let | |
1632 | - | let | |
1633 | - | $Tuple3(( | |
1634 | - | then [StringEntry( | |
1635 | - | else ((((nil :+ StringEntry( | |
1636 | - | } | |
1637 | - | } | |
1638 | - | ||
1639 | - | ||
1640 | - | func | |
1641 | - | let | |
1642 | - | let | |
1643 | - | let | |
1644 | - | let | |
1645 | - | (( | |
1646 | - | } | |
1647 | - | ||
1648 | - | ||
1649 | - | func | |
1650 | - | let | |
1651 | - | then $Tuple2( | |
1644 | + | let iF = hZ(ia, ib) | |
1645 | + | let if = iF._2._1 | |
1646 | + | $Tuple3((iF._1 ++ (if (iE) | |
1647 | + | then [StringEntry(K(z), "0_0_0_0_0")] | |
1648 | + | else ((((nil :+ StringEntry(bE(z), makeString([iF._2._2, "L", if], "_"))) :+ IntegerEntry(is, gE._1)) :+ StringEntry(fM, iD)) :+ StringEntry(hc, makeString([hF[be], hF[bf], iA, hF[bh]], ":"))))), if, gE._3) | |
1649 | + | } | |
1650 | + | } | |
1651 | + | ||
1652 | + | ||
1653 | + | func iG (O,iH) = { | |
1654 | + | let hr = valueOrElse(getInteger(bt(O)), 0) | |
1655 | + | let iI = valueOrElse(getInteger(bn(aC, O)), 0) | |
1656 | + | let iJ = (hr / 6) | |
1657 | + | let iK = (hr / 7) | |
1658 | + | ((aF + fraction(aF, ((hr + iJ) + (2 * iK)), 5)) + fraction(aF, iI, (iH * 5))) | |
1659 | + | } | |
1660 | + | ||
1661 | + | ||
1662 | + | func iL (b,iM,iN) = { | |
1663 | + | let iO = if ((iM == dO)) | |
1664 | + | then $Tuple2(iN, valueOrElse(getString(bC(b)), "")) | |
1652 | 1665 | else { | |
1653 | - | let | |
1654 | - | let | |
1655 | - | let | |
1656 | - | if (( | |
1657 | - | then throw((("Duck location type is " + | |
1658 | - | else $Tuple2( | |
1659 | - | } | |
1660 | - | let | |
1661 | - | let | |
1662 | - | let | |
1663 | - | let | |
1664 | - | let | |
1665 | - | let | |
1666 | - | if (( | |
1667 | - | then throw(( | |
1666 | + | let z = valueOrErrorMessage(getString(bC(b)), "You don't have a duck staked") | |
1667 | + | let iP = valueOrElse(getString(bE(z)), aI) | |
1668 | + | let iQ = split(value(iP), "_") | |
1669 | + | if ((iQ[bX] != "L")) | |
1670 | + | then throw((("Duck location type is " + iQ[bX]) + ", but should be L")) | |
1671 | + | else $Tuple2(iQ[bY], z) | |
1672 | + | } | |
1673 | + | let O = iO._1 | |
1674 | + | let iR = iO._2 | |
1675 | + | let iS = value(assetInfo(fromBase58String(O))) | |
1676 | + | let iT = bm(O) | |
1677 | + | let iU = valueOrErrorMessage(getInteger(iT), (("Land " + iS.name) + " is not staked")) | |
1678 | + | let iV = valueOrErrorMessage(getString(bj(O)), (("NFT " + iS.name) + " is orphaned")) | |
1679 | + | if ((iV != b)) | |
1680 | + | then throw((aA + " is not yours")) | |
1668 | 1681 | else { | |
1669 | - | let | |
1670 | - | $Tuple4( | |
1671 | - | } | |
1672 | - | } | |
1673 | - | ||
1674 | - | ||
1675 | - | func | |
1682 | + | let iW = split(iS.description, "_") | |
1683 | + | $Tuple4(iR, O, iW, iU) | |
1684 | + | } | |
1685 | + | } | |
1686 | + | ||
1687 | + | ||
1688 | + | func iX (b,dX,iM,iN) = if ((0 > dX)) | |
1676 | 1689 | then throw("Negative amount") | |
1677 | 1690 | else { | |
1678 | - | let | |
1679 | - | let | |
1680 | - | let | |
1681 | - | let | |
1682 | - | if ((0 > | |
1683 | - | then throw(((("Saved timestamp is in future, saved = " + toString( | |
1691 | + | let fp = iL(b, iM, iN) | |
1692 | + | let df = fp._3[cN] | |
1693 | + | let fV = gb(fp._3[cO]) | |
1694 | + | let gf = (lastBlock.timestamp - fp._4) | |
1695 | + | if ((0 > gf)) | |
1696 | + | then throw(((("Saved timestamp is in future, saved = " + toString(fp._4)) + ", current = ") + toString(lastBlock.timestamp))) | |
1684 | 1697 | else { | |
1685 | - | let | |
1686 | - | let | |
1687 | - | let | |
1688 | - | if (( | |
1689 | - | then throw(((("Not enough resources, available = " + toString( | |
1698 | + | let iH = de(df) | |
1699 | + | let iY = iG(fp._2, iH) | |
1700 | + | let iZ = fraction(gf, (iY * iH), aG) | |
1701 | + | if ((dX > iZ)) | |
1702 | + | then throw(((("Not enough resources, available = " + toString(iZ)) + ", requested = ") + toString(dX))) | |
1690 | 1703 | else { | |
1691 | - | let | |
1692 | - | let | |
1693 | - | let | |
1694 | - | let | |
1695 | - | let | |
1696 | - | let | |
1697 | - | let | |
1698 | - | let | |
1699 | - | let | |
1700 | - | if (if (( | |
1701 | - | then ( | |
1704 | + | let ja = fraction((iZ - dX), aG, (iY * iH)) | |
1705 | + | let jb = (lastBlock.timestamp - ja) | |
1706 | + | let hq = (iH / cm) | |
1707 | + | let gn = gj(fV, (gf - ja), hq, iY) | |
1708 | + | let hp = bs(fp._2) | |
1709 | + | let hr = valueOrElse(getInteger(bt(fp._2)), 0) | |
1710 | + | let hg = ho(hp, hq, hr) | |
1711 | + | let hx = split(hg[aZ], "_") | |
1712 | + | let go = parseIntValue(hx[bc]) | |
1713 | + | if (if ((iM == dO)) | |
1714 | + | then (dX > go) | |
1702 | 1715 | else false) | |
1703 | - | then throw((("Only " + toString( | |
1716 | + | then throw((("Only " + toString(go)) + " space left in warehouse")) | |
1704 | 1717 | else { | |
1705 | - | let | |
1706 | - | let | |
1707 | - | let | |
1708 | - | let | |
1709 | - | let | |
1710 | - | then $Tuple4( | |
1711 | - | else if (( | |
1712 | - | then $Tuple4( | |
1718 | + | let hc = bD(fp._1) | |
1719 | + | let hF = hb(hc) | |
1720 | + | let gm = split(hF[bf], "_") | |
1721 | + | let gl = split(hg[aW], "_") | |
1722 | + | let jc = if ((iM == dO)) | |
1723 | + | then $Tuple4(gd(gl, fV, (gf - ja), hq, iY), hF[bf], (parseIntValue(hx[bb]) + gn._2), (parseIntValue(hx[bc]) - gn._2)) | |
1724 | + | else if ((iM == dP)) | |
1725 | + | then $Tuple4(hg[aW], gd(gm, fV, (gf - ja), hq, iY), parseIntValue(hx[bb]), parseIntValue(hx[bc])) | |
1713 | 1726 | else { | |
1714 | - | let | |
1715 | - | let | |
1716 | - | $Tuple4( | |
1727 | + | let jd = gk(gl, gm, gn, go) | |
1728 | + | let je = min([parseIntValue(hx[bc]), gn._2]) | |
1729 | + | $Tuple4(jd._1, jd._2, (parseIntValue(hx[bb]) + je), (parseIntValue(hx[bc]) - je)) | |
1717 | 1730 | } | |
1718 | - | let | |
1719 | - | let | |
1720 | - | let | |
1721 | - | let | |
1722 | - | $Tuple5([IntegerEntry( | |
1731 | + | let jf = jc._1 | |
1732 | + | let jg = jc._2 | |
1733 | + | let jh = jc._3 | |
1734 | + | let ji = jc._4 | |
1735 | + | $Tuple5([IntegerEntry(bm(fp._2), jb), IntegerEntry(bp(aA, fp._2, b), jb)], hc, [hF[be], jg, hF[bg], hF[bh]], hp, [hg[aV], jf, hg[aX], hg[aY], makeString([hx[ba], toString(jh), toString(ji), hx[bd]], "_")]) | |
1723 | 1736 | } | |
1724 | 1737 | } | |
1725 | 1738 | } | |
1726 | 1739 | } | |
1727 | 1740 | ||
1728 | 1741 | ||
1729 | - | func | |
1730 | - | let | |
1731 | - | let | |
1732 | - | let | |
1733 | - | | |
1734 | - | } | |
1735 | - | ||
1736 | - | ||
1737 | - | func | |
1738 | - | let b = toString( | |
1739 | - | let | |
1740 | - | let | |
1741 | - | let | |
1742 | - | let | |
1743 | - | if (if (!( | |
1744 | - | then ( | |
1742 | + | func jj (b,O,iH,iM) = { | |
1743 | + | let iT = bm(O) | |
1744 | + | let iU = value(getInteger(iT)) | |
1745 | + | let iZ = (fraction((lastBlock.timestamp - iU), iG(O, iH), aG) * iH) | |
1746 | + | iX(b, iZ, iM, O) | |
1747 | + | } | |
1748 | + | ||
1749 | + | ||
1750 | + | func jk (et,ia,jl,O) = { | |
1751 | + | let b = toString(ia) | |
1752 | + | let fp = iL(b, dQ, O) | |
1753 | + | let iH = de(fp._3[cN]) | |
1754 | + | let jm = bt(fp._2) | |
1755 | + | let jn = valueOrElse(getInteger(jm), 0) | |
1756 | + | if (if (!(cc)) | |
1757 | + | then (jn >= 3) | |
1745 | 1758 | else false) | |
1746 | 1759 | then throw("Currently max infrastructure level = 3") | |
1747 | 1760 | else { | |
1748 | - | let | |
1749 | - | let | |
1750 | - | if (if ( | |
1751 | - | then ( | |
1761 | + | let jo = ((sqrt(iH, 0, 0, DOWN) / 5) + 2) | |
1762 | + | let aj = (jn + 1) | |
1763 | + | if (if (cc) | |
1764 | + | then (aj > jo) | |
1752 | 1765 | else false) | |
1753 | - | then throw(("Currently max infrastructure level = " + toString( | |
1766 | + | then throw(("Currently max infrastructure level = " + toString(jo))) | |
1754 | 1767 | else { | |
1755 | - | let | |
1756 | - | if (if (!( | |
1757 | - | then ( | |
1768 | + | let jp = fraction(du, (iH * aj), cm) | |
1769 | + | if (if (!(et)) | |
1770 | + | then (jl != jp) | |
1758 | 1771 | else false) | |
1759 | - | then throw(("Payment attached should be " + toString( | |
1772 | + | then throw(("Payment attached should be " + toString(jp))) | |
1760 | 1773 | else { | |
1761 | - | let | |
1762 | - | let | |
1763 | - | let | |
1764 | - | let | |
1765 | - | let | |
1766 | - | let | |
1767 | - | let | |
1768 | - | let | |
1769 | - | let | |
1770 | - | let | |
1771 | - | let | |
1772 | - | let | |
1773 | - | $Tuple3(([IntegerEntry( | |
1774 | + | let hc = bD(fp._1) | |
1775 | + | let hF = hb(hc) | |
1776 | + | let iz = split(hF[bg], "_") | |
1777 | + | let jq = fraction(ch, (iH * aj), cm) | |
1778 | + | let iA = makeString(es(et, iz, jq), "_") | |
1779 | + | let jr = jj(b, fp._2, iH, dQ) | |
1780 | + | let js = jr._5 | |
1781 | + | let jt = hd(js[aV]) | |
1782 | + | let ju = makeString([split(js[aV], "_")[0], toString(aj)], "_") | |
1783 | + | let jv = hd(ju) | |
1784 | + | let hx = split(js[aZ], "_") | |
1785 | + | let jw = makeString([hx[ba], hx[bb], toString(((parseIntValue(hx[bc]) + jv) - jt)), toString(jv)], "_") | |
1786 | + | $Tuple3(([IntegerEntry(jm, aj), IntegerEntry(dJ(fp._2, b), aj), StringEntry(hc, makeString([hF[be], jr._3[bf], iA, hF[bh]], ":")), StringEntry(jr._4, makeString([ju, js[aW], js[aX], js[aY], jw], ":"))] ++ jr._1), aj, jq) | |
1774 | 1787 | } | |
1775 | 1788 | } | |
1776 | 1789 | } | |
1777 | 1790 | } | |
1778 | 1791 | ||
1779 | 1792 | ||
1780 | - | func | |
1781 | - | let | |
1782 | - | let | |
1783 | - | let | |
1784 | - | let | |
1785 | - | let | |
1786 | - | let | |
1787 | - | $Tuple2([IntegerEntry( | |
1788 | - | } | |
1789 | - | ||
1790 | - | ||
1791 | - | func | |
1792 | - | let | |
1793 | - | let | |
1794 | - | let | |
1795 | - | let | |
1796 | - | let | |
1797 | - | let | |
1798 | - | $Tuple2([IntegerEntry( | |
1799 | - | } | |
1800 | - | ||
1801 | - | ||
1802 | - | func | |
1803 | - | let | |
1804 | - | let | |
1805 | - | let | |
1806 | - | if (!(isDefined( | |
1793 | + | func jx (z,jy) = { | |
1794 | + | let jz = C(z) | |
1795 | + | let jA = B(z) | |
1796 | + | let ad = valueOrElse(getInteger(al, jA), 0) | |
1797 | + | let ai = (ad + jy) | |
1798 | + | let jB = ag(valueOrElse(getInteger(al, jz), 0), ai) | |
1799 | + | let jC = D(z) | |
1800 | + | $Tuple2([IntegerEntry(jz, jB[0]), IntegerEntry(jA, ai), IntegerEntry(jC, (valueOrElse(getInteger(jC), 0) + jB[1]))], ai) | |
1801 | + | } | |
1802 | + | ||
1803 | + | ||
1804 | + | func jD (b,jy) = { | |
1805 | + | let jz = G(b) | |
1806 | + | let jA = F(b) | |
1807 | + | let ad = valueOrElse(getInteger(al, jA), 0) | |
1808 | + | let ai = (ad + jy) | |
1809 | + | let jB = ag(valueOrElse(getInteger(al, jz), 0), ai) | |
1810 | + | let jC = H(b) | |
1811 | + | $Tuple2([IntegerEntry(jz, jB[0]), IntegerEntry(jA, ai), IntegerEntry(jC, (valueOrElse(getInteger(jC), 0) + jB[1]))], ai) | |
1812 | + | } | |
1813 | + | ||
1814 | + | ||
1815 | + | func jE (b) = { | |
1816 | + | let z = valueOrErrorMessage(getString(bC(b)), "You don't have a duck staked") | |
1817 | + | let jF = bx(b) | |
1818 | + | let jG = getString(jF) | |
1819 | + | if (!(isDefined(jG))) | |
1807 | 1820 | then throw("You are not eligible for ONBOARD artifact") | |
1808 | 1821 | else { | |
1809 | - | let | |
1810 | - | let | |
1811 | - | if (isDefined( | |
1812 | - | then throw(("You already used your ONBOARD artifact on duck " + value( | |
1822 | + | let jH = bz(b) | |
1823 | + | let jI = getString(jH) | |
1824 | + | if (isDefined(jI)) | |
1825 | + | then throw(("You already used your ONBOARD artifact on duck " + value(jI))) | |
1813 | 1826 | else { | |
1814 | - | let | |
1815 | - | let | |
1816 | - | if (isDefined( | |
1817 | - | then throw(((("The duck " + | |
1818 | - | else ([StringEntry( | |
1827 | + | let jJ = by(z) | |
1828 | + | let jK = getString(jJ) | |
1829 | + | if (isDefined(jK)) | |
1830 | + | then throw(((("The duck " + z) + " already got points from ONBOARD artifact from user ") + value(jK))) | |
1831 | + | else ([StringEntry(jH, z), StringEntry(jJ, b)] ++ jx(z, aa)._1) | |
1819 | 1832 | } | |
1820 | 1833 | } | |
1821 | 1834 | } | |
1822 | 1835 | ||
1823 | 1836 | ||
1824 | - | func | |
1825 | - | let | |
1826 | - | let | |
1827 | - | let | |
1828 | - | let | |
1829 | - | if ((valueOrElse(getInteger( | |
1837 | + | func jL (b,iN) = { | |
1838 | + | let fp = iL(b, dQ, iN) | |
1839 | + | let O = fp._2 | |
1840 | + | let iH = de(fp._3[cN]) | |
1841 | + | let jM = bn(aC, O) | |
1842 | + | if ((valueOrElse(getInteger(jM), 0) > 0)) | |
1830 | 1843 | then throw("Presale artifact is already activated") | |
1831 | - | else if ((parseIntValue( | |
1832 | - | then throw(((( | |
1844 | + | else if ((parseIntValue(fp._3[cM]) > dD)) | |
1845 | + | then throw((((aA + " ") + O) + " is not eligible for presale artifact")) | |
1833 | 1846 | else { | |
1834 | - | let | |
1835 | - | ((( | |
1847 | + | let jr = jj(b, O, iH, dQ) | |
1848 | + | (((jr._1 :+ IntegerEntry(jM, iH)) :+ StringEntry(jr._2, makeString(jr._3, ":"))) :+ StringEntry(jr._4, makeString(jr._5, ":"))) | |
1836 | 1849 | } | |
1837 | 1850 | } | |
1838 | 1851 | ||
1839 | 1852 | ||
1840 | - | func | |
1841 | - | let | |
1842 | - | let | |
1843 | - | let | |
1844 | - | let | |
1845 | - | let | |
1846 | - | let | |
1847 | - | if (( | |
1853 | + | func jN (z) = { | |
1854 | + | let jO = valueOrElse(getInteger(cL, bJ), 0) | |
1855 | + | let iP = split(valueOrElse(getString(bE(z)), aI), "_") | |
1856 | + | let av = lastBlock.timestamp | |
1857 | + | let jP = bP(cL, jO) | |
1858 | + | let bR = jP[bN] | |
1859 | + | let bS = jP[bO] | |
1860 | + | if ((iP[bX] != "T")) | |
1848 | 1861 | then false | |
1849 | 1862 | else { | |
1850 | - | let | |
1851 | - | then ( | |
1863 | + | let ey = if (if (if ((parseIntValue(iP[bW]) == jO)) | |
1864 | + | then (bS[bU] == "INPROGRESS") | |
1852 | 1865 | else false) | |
1853 | - | then (parseIntValue( | |
1866 | + | then (parseIntValue(bR[bT]) > av) | |
1854 | 1867 | else false) | |
1855 | 1868 | then throw("Your duck is taking part in the tournament") | |
1856 | - | else invoke(this, "exitTournamentInternal", [ | |
1857 | - | if (( | |
1869 | + | else invoke(this, "exitTournamentInternal", [z], nil) | |
1870 | + | if ((ey == ey)) | |
1858 | 1871 | then false | |
1859 | 1872 | else throw("Strict value is not equal to itself.") | |
1860 | 1873 | } | |
1861 | 1874 | } | |
1862 | 1875 | ||
1863 | 1876 | ||
1864 | - | func | |
1865 | - | let | |
1866 | - | if ( | |
1877 | + | func jQ (jR,aj,jS,b,jT,jU) = { | |
1878 | + | let z = valueOrErrorMessage(getString(bC(b)), "You don't have a duck staked") | |
1879 | + | if (jN(z)) | |
1867 | 1880 | then throw("mergeInternal_checkTournament") | |
1868 | 1881 | else { | |
1869 | - | func | |
1870 | - | let | |
1871 | - | let | |
1872 | - | let | |
1873 | - | let | |
1874 | - | if (( | |
1875 | - | then throw(( | |
1882 | + | func jV (eg,O) = { | |
1883 | + | let iS = value(assetInfo(fromBase58String(O))) | |
1884 | + | let iT = bm(O) | |
1885 | + | let iU = valueOrErrorMessage(getInteger(iT), (("NFT " + iS.name) + " is not staked")) | |
1886 | + | let iV = valueOrErrorMessage(getString(bj(O)), (("NFT " + iS.name) + " is orphaned")) | |
1887 | + | if ((iV != b)) | |
1888 | + | then throw((aA + " is not yours")) | |
1876 | 1889 | else { | |
1877 | - | let | |
1878 | - | let | |
1879 | - | if (if (( | |
1880 | - | then ( | |
1890 | + | let iW = split(iS.description, "_") | |
1891 | + | let cW = iW[cP] | |
1892 | + | if (if ((eg._3 != "")) | |
1893 | + | then (eg._3 != cW) | |
1881 | 1894 | else false) | |
1882 | 1895 | then throw("Lands should be on the same continent to merge") | |
1883 | 1896 | else { | |
1884 | - | let | |
1885 | - | let | |
1886 | - | let | |
1887 | - | let | |
1888 | - | let | |
1889 | - | let | |
1890 | - | let | |
1891 | - | let | |
1892 | - | let | |
1893 | - | if (("S" == | |
1897 | + | let df = iW[cN] | |
1898 | + | let jW = eg._1 | |
1899 | + | let fZ = valueOrErrorMessage(indexOf(jW, df), "You haven't passed all the lands needed") | |
1900 | + | let jX = (take(jW, fZ) + drop(jW, (fZ + 1))) | |
1901 | + | let iH = de(df) | |
1902 | + | let jY = (eg._2 + valueOrElse(getInteger(bn(aC, O)), 0)) | |
1903 | + | let hr = valueOrElse(getInteger(bt(O)), 0) | |
1904 | + | let jZ = { | |
1905 | + | let cf = df | |
1906 | + | if (("S" == cf)) | |
1894 | 1907 | then 3 | |
1895 | - | else if (("M" == | |
1908 | + | else if (("M" == cf)) | |
1896 | 1909 | then 4 | |
1897 | - | else if (("L" == | |
1910 | + | else if (("L" == cf)) | |
1898 | 1911 | then 5 | |
1899 | - | else if (("XL" == | |
1912 | + | else if (("XL" == cf)) | |
1900 | 1913 | then 6 | |
1901 | 1914 | else throw("Only S, M, L, XL can merge") | |
1902 | 1915 | } | |
1903 | - | if (( | |
1916 | + | if ((hr != jZ)) | |
1904 | 1917 | then throw("All lands should be maxed to merge") | |
1905 | 1918 | else { | |
1906 | - | let | |
1907 | - | let | |
1908 | - | let | |
1909 | - | if ((0 > | |
1910 | - | then throw(((("Saved timestamp is in future, saved = " + toString( | |
1919 | + | let dI = iW[cM] | |
1920 | + | let fV = gb(iW[cO]) | |
1921 | + | let gf = (lastBlock.timestamp - iU) | |
1922 | + | if ((0 > gf)) | |
1923 | + | then throw(((("Saved timestamp is in future, saved = " + toString(iU)) + ", current = ") + toString(lastBlock.timestamp))) | |
1911 | 1924 | else { | |
1912 | - | let | |
1913 | - | let | |
1914 | - | let | |
1915 | - | let | |
1916 | - | let | |
1917 | - | let | |
1918 | - | let | |
1919 | - | let | |
1920 | - | if (!(isDefined( | |
1921 | - | then throw(("Your staked lands don't contain " + | |
1925 | + | let iY = iG(O, iH) | |
1926 | + | let hq = (iH / cm) | |
1927 | + | let jg = gd(split(eg._4, "_"), fV, gf, hq, iY) | |
1928 | + | let eq = fT(eg._6, fV, hq, -1) | |
1929 | + | let ka = fT(eg._10, fV, hq, -1) | |
1930 | + | let gJ = fT(eg._9, fV, hq, 1) | |
1931 | + | let kb = eg._7 | |
1932 | + | let cG = indexOf(kb, O) | |
1933 | + | if (!(isDefined(cG))) | |
1934 | + | then throw(("Your staked lands don't contain " + O)) | |
1922 | 1935 | else { | |
1923 | - | let | |
1924 | - | let | |
1925 | - | $Tuple10( | |
1926 | - | then [DeleteEntry( | |
1927 | - | else nil)), | |
1936 | + | let kc = bl(O) | |
1937 | + | let kd = valueOrElse(getString(kc), "") | |
1938 | + | $Tuple10(jX, jY, cW, jg, ((((((((((((eg._5 :+ DeleteEntry(bm(O))) :+ DeleteEntry(bp(aA, O, b))) :+ DeleteEntry(dH(dI))) :+ DeleteEntry(bj(O))) :+ DeleteEntry(bt(O))) :+ DeleteEntry(dJ(O, b))) :+ DeleteEntry(bn(aC, O))) :+ DeleteEntry(dK(dI))) :+ DeleteEntry(bs(O))) :+ DeleteEntry(kc)) :+ Burn(fromBase58String(O), 1)) ++ (if ((kd != "")) | |
1939 | + | then [DeleteEntry(dF(kd))] | |
1940 | + | else nil)), eq, removeByIndex(kb, value(cG)), (eg._8 + iH), gJ, ka) | |
1928 | 1941 | } | |
1929 | 1942 | } | |
1930 | 1943 | } | |
1932 | 1945 | } | |
1933 | 1946 | } | |
1934 | 1947 | ||
1935 | - | let | |
1936 | - | let | |
1937 | - | let | |
1938 | - | let | |
1939 | - | let | |
1940 | - | let | |
1941 | - | then split_51C(value( | |
1948 | + | let hc = bD(z) | |
1949 | + | let hF = hb(hc) | |
1950 | + | let fU = split(valueOrElse(getString(cU()), "0_0_0_0_0_0"), "_") | |
1951 | + | let ke = cX(b) | |
1952 | + | let kf = getString(ke) | |
1953 | + | let kg = if (isDefined(kf)) | |
1954 | + | then split_51C(value(kf), "_") | |
1942 | 1955 | else nil | |
1943 | - | let | |
1944 | - | let | |
1945 | - | let | |
1946 | - | let | |
1947 | - | let | |
1948 | - | let | |
1949 | - | func | |
1950 | - | then | |
1951 | - | else | |
1952 | - | ||
1953 | - | func | |
1954 | - | then | |
1956 | + | let kh = split(value(assetInfo(fromBase58String(jT[0]))).description, "_")[cP] | |
1957 | + | let ki = split(valueOrElse(getString(cV(kh)), "0_0_0_0_0_0"), "_") | |
1958 | + | let er = { | |
1959 | + | let ei = jT | |
1960 | + | let ej = size(ei) | |
1961 | + | let ek = $Tuple10(jS, 0, "", hF[bf], nil, fU, kg, 0, split("0_0_0_0_0_0", "_"), ki) | |
1962 | + | func el (em,en) = if ((en >= ej)) | |
1963 | + | then em | |
1964 | + | else jV(em, ei[en]) | |
1965 | + | ||
1966 | + | func eo (em,en) = if ((en >= ej)) | |
1967 | + | then em | |
1955 | 1968 | else throw("List size exceeds 5") | |
1956 | 1969 | ||
1957 | - | | |
1970 | + | eo(el(el(el(el(el(ek, 0), 1), 2), 3), 4), 5) | |
1958 | 1971 | } | |
1959 | - | let | |
1960 | - | let | |
1961 | - | let | |
1962 | - | let | |
1963 | - | let | |
1964 | - | let | |
1965 | - | let | |
1966 | - | let | |
1967 | - | let | |
1968 | - | let | |
1969 | - | let | |
1970 | - | $Tuple2(((((((((((((((( | |
1971 | - | then StringEntry( | |
1972 | - | else DeleteEntry( | |
1972 | + | let cW = er._3 | |
1973 | + | let gD = valueOrErrorMessage(indexOf(aM, cW), ("Unknown continent: " + cW)) | |
1974 | + | let gc = gI(er._9, (de(jR) / cm)) | |
1975 | + | let id = valueOrElse(getInteger(dE()), (dD + 1)) | |
1976 | + | let kj = toString(id) | |
1977 | + | let ie = Issue(dV(kj, jR), makeString([kj, jR, gc, cW], "_"), 1, 0, false) | |
1978 | + | let bk = calculateAssetId(ie) | |
1979 | + | let kk = toBase58String(bk) | |
1980 | + | let iA = makeString(es((jU > 0), split(hF[bg], "_"), jU), "_") | |
1981 | + | let kl = cY(b) | |
1982 | + | let km = valueOrElse(getInteger(kl), 0) | |
1983 | + | $Tuple2((((((((((((((((er._5 :+ (if ((size(er._7) > 0)) | |
1984 | + | then StringEntry(ke, makeString_11C(er._7, "_")) | |
1985 | + | else DeleteEntry(ke))) :+ IntegerEntry(kl, if ((er._8 > km)) | |
1973 | 1986 | then 0 | |
1974 | - | else ( | |
1975 | - | } | |
1976 | - | } | |
1977 | - | ||
1978 | - | ||
1979 | - | func | |
1980 | - | ||
1981 | - | ||
1982 | - | func | |
1983 | - | ||
1984 | - | ||
1985 | - | func | |
1986 | - | ||
1987 | - | ||
1988 | - | func | |
1989 | - | ||
1990 | - | ||
1991 | - | func | |
1992 | - | let | |
1993 | - | if ((4 == | |
1994 | - | then | |
1995 | - | else if ((3 == | |
1996 | - | then | |
1997 | - | else if ((5 == | |
1998 | - | then | |
1999 | - | else if ((2 == | |
2000 | - | then | |
1987 | + | else (km - er._8))) :+ IntegerEntry(dE(), (id + 1))) :+ ie) :+ StringEntry(dH(kj), kk)) :+ StringEntry(bj(kk), b)) :+ StringEntry(dK(kj), b)) :+ IntegerEntry(bn(aC, kk), er._2)) :+ IntegerEntry(bt(kk), aj)) :+ IntegerEntry(dJ(kk, b), aj)) :+ StringEntry(hc, makeString([hF[be], er._4, iA, hF[bh]], ":"))) :+ StringEntry(cU(), makeString(er._6, "_"))) :+ StringEntry(cV(cW), makeString(er._10, "_"))) :+ StringEntry(bE(z), makeString([cW, "L", kk], "_"))) :+ ScriptTransfer(addressFromStringValue(b), 1, bk)), kk) | |
1988 | + | } | |
1989 | + | } | |
1990 | + | ||
1991 | + | ||
1992 | + | func kn (b,jT) = jQ("M", 3, "SSSS", b, jT, 0) | |
1993 | + | ||
1994 | + | ||
1995 | + | func ko (b,jT) = jQ("L", 4, "SMM", b, jT, (ch * 4)) | |
1996 | + | ||
1997 | + | ||
1998 | + | func kp (b,jT) = jQ("XL", 5, "SSSML", b, jT, (ch * 47)) | |
1999 | + | ||
2000 | + | ||
2001 | + | func kq (b,jT) = jQ("XXL", 6, "LXL", b, jT, (ch * 54)) | |
2002 | + | ||
2003 | + | ||
2004 | + | func kr (b,jT) = { | |
2005 | + | let cf = size(jT) | |
2006 | + | if ((4 == cf)) | |
2007 | + | then kn(b, jT) | |
2008 | + | else if ((3 == cf)) | |
2009 | + | then ko(b, jT) | |
2010 | + | else if ((5 == cf)) | |
2011 | + | then kp(b, jT) | |
2012 | + | else if ((2 == cf)) | |
2013 | + | then kq(b, jT) | |
2001 | 2014 | else throw("Unknown merge") | |
2002 | 2015 | } | |
2003 | 2016 | ||
2004 | 2017 | ||
2005 | - | func | |
2006 | - | then valueOrElse(getBoolean( | |
2018 | + | func ks (fZ) = if (if ((fZ.originCaller != cH)) | |
2019 | + | then valueOrElse(getBoolean(bF()), false) | |
2007 | 2020 | else false) | |
2008 | 2021 | then throw("Contracts are under maintenance") | |
2009 | - | else StringEntry( | |
2010 | - | ||
2011 | - | ||
2012 | - | @Callable( | |
2013 | - | func constructorV1 ( | |
2022 | + | else StringEntry(bi(toString(fZ.originCaller)), toBase58String(fZ.transactionId)) | |
2023 | + | ||
2024 | + | ||
2025 | + | @Callable(fZ) | |
2026 | + | func constructorV1 (kt) = if ((fZ.caller != this)) | |
2014 | 2027 | then throw("Permission denied") | |
2015 | - | else [StringEntry( | |
2016 | - | ||
2017 | - | ||
2018 | - | ||
2019 | - | @Callable( | |
2020 | - | func setBlocked ( | |
2028 | + | else [StringEntry(cB(), kt)] | |
2029 | + | ||
2030 | + | ||
2031 | + | ||
2032 | + | @Callable(fZ) | |
2033 | + | func setBlocked (ku) = if ((fZ.caller != this)) | |
2021 | 2034 | then throw("permission denied") | |
2022 | - | else [BooleanEntry( | |
2023 | - | ||
2024 | - | ||
2025 | - | ||
2026 | - | @Callable( | |
2035 | + | else [BooleanEntry(bF(), ku)] | |
2036 | + | ||
2037 | + | ||
2038 | + | ||
2039 | + | @Callable(fZ) | |
2027 | 2040 | func stakeLand () = { | |
2028 | - | let | |
2029 | - | if ((size( | |
2041 | + | let kv = ks(fZ) | |
2042 | + | if ((size(fZ.payments) != 1)) | |
2030 | 2043 | then throw("Exactly one payment required") | |
2031 | 2044 | else { | |
2032 | - | let | |
2033 | - | let | |
2034 | - | let | |
2035 | - | if (( | |
2036 | - | then throw((("NFT " + | |
2045 | + | let kw = value(fZ.payments[0]) | |
2046 | + | let bk = value(kw.assetId) | |
2047 | + | let ct = toString(fZ.caller) | |
2048 | + | if ((kw.amount != 1)) | |
2049 | + | then throw((("NFT " + aA) + " token should be attached as payment")) | |
2037 | 2050 | else { | |
2038 | - | let | |
2039 | - | if (( | |
2051 | + | let iS = value(assetInfo(bk)) | |
2052 | + | if ((iS.issuer != this)) | |
2040 | 2053 | then throw("Unknown issuer of token") | |
2041 | - | else if (!(contains( | |
2042 | - | then throw((("Only NFT " + | |
2054 | + | else if (!(contains(iS.name, aA))) | |
2055 | + | then throw((("Only NFT " + aA) + " tokens are accepted")) | |
2043 | 2056 | else { | |
2044 | - | let | |
2045 | - | let | |
2046 | - | then dropRight( | |
2047 | - | else if (contains( | |
2048 | - | then dropRight( | |
2049 | - | else dropRight( | |
2050 | - | if (!(isDefined(parseInt( | |
2051 | - | then throw(("Cannot parse land number from " + | |
2057 | + | let kx = drop(iS.name, 4) | |
2058 | + | let dI = if (contains(kx, "XXL")) | |
2059 | + | then dropRight(kx, 3) | |
2060 | + | else if (contains(kx, "XL")) | |
2061 | + | then dropRight(kx, 2) | |
2062 | + | else dropRight(kx, 1) | |
2063 | + | if (!(isDefined(parseInt(dI)))) | |
2064 | + | then throw(("Cannot parse land number from " + iS.name)) | |
2052 | 2065 | else { | |
2053 | - | let | |
2054 | - | let | |
2055 | - | if (isDefined(getInteger( | |
2056 | - | then throw((("NFT " + | |
2066 | + | let O = toBase58String(bk) | |
2067 | + | let iT = bm(O) | |
2068 | + | if (isDefined(getInteger(iT))) | |
2069 | + | then throw((("NFT " + iS.name) + " is already staked")) | |
2057 | 2070 | else { | |
2058 | - | let | |
2059 | - | let | |
2060 | - | let | |
2061 | - | let | |
2062 | - | let | |
2063 | - | let | |
2064 | - | let | |
2065 | - | let | |
2066 | - | let | |
2067 | - | let | |
2068 | - | let | |
2069 | - | then split_51C(value( | |
2071 | + | let iW = split(iS.description, "_") | |
2072 | + | let fV = gb(iW[cO]) | |
2073 | + | let iH = de(iW[cN]) | |
2074 | + | let hq = (iH / cm) | |
2075 | + | let eq = ga(fV, hq, 1) | |
2076 | + | let ky = cV(iW[cP]) | |
2077 | + | let ki = split(valueOrElse(getString(ky), "0_0_0_0_0_0"), "_") | |
2078 | + | let kz = makeString(fT(ki, fV, hq, 1), "_") | |
2079 | + | let ke = cX(ct) | |
2080 | + | let kf = getString(ke) | |
2081 | + | let kb = if (isDefined(kf)) | |
2082 | + | then split_51C(value(kf), "_") | |
2070 | 2083 | else nil | |
2071 | - | if (containsElement( | |
2072 | - | then throw(("Your staked lands already contain " + | |
2073 | - | else if ((size( | |
2074 | - | then throw((("Your already staked max (" + toString( | |
2084 | + | if (containsElement(kb, O)) | |
2085 | + | then throw(("Your staked lands already contain " + O)) | |
2086 | + | else if ((size(kb) >= aE)) | |
2087 | + | then throw((("Your already staked max (" + toString(aE)) + ") lands")) | |
2075 | 2088 | else { | |
2076 | - | let | |
2077 | - | let | |
2078 | - | let | |
2079 | - | let | |
2080 | - | $Tuple2([IntegerEntry( | |
2089 | + | let hr = valueOrElse(getInteger(bt(O)), 0) | |
2090 | + | let kl = cY(ct) | |
2091 | + | let kA = valueOrElse(getInteger(kl), 0) | |
2092 | + | let kB = invoke(cK, "onStakeUnstakeLand", [ct], nil) | |
2093 | + | $Tuple2([IntegerEntry(iT, lastBlock.timestamp), IntegerEntry(bp(aA, O, ct), lastBlock.timestamp), StringEntry(ke, makeString_11C((kb :+ O), "_")), IntegerEntry(kl, (kA + iH)), StringEntry(bj(O), ct), StringEntry(dK(dI), ct), IntegerEntry(dJ(O, ct), hr), StringEntry(cU(), eq), StringEntry(ky, kz), kv], kB) | |
2081 | 2094 | } | |
2082 | 2095 | } | |
2083 | 2096 | } | |
2088 | 2101 | ||
2089 | 2102 | ||
2090 | 2103 | ||
2091 | - | @Callable( | |
2092 | - | func unstakeLand ( | |
2093 | - | let | |
2094 | - | if ((size( | |
2104 | + | @Callable(fZ) | |
2105 | + | func unstakeLand (iN) = { | |
2106 | + | let kv = ks(fZ) | |
2107 | + | if ((size(fZ.payments) != 0)) | |
2095 | 2108 | then throw("No payments required") | |
2096 | 2109 | else { | |
2097 | - | let b = toString( | |
2098 | - | let | |
2099 | - | let | |
2100 | - | let | |
2101 | - | let | |
2102 | - | let | |
2103 | - | let | |
2104 | - | let | |
2105 | - | let | |
2106 | - | let | |
2107 | - | let | |
2108 | - | let | |
2109 | - | let | |
2110 | - | let | |
2111 | - | let | |
2112 | - | if (!(isDefined( | |
2113 | - | then throw(("Your staked lands don't contain " + | |
2110 | + | let b = toString(fZ.caller) | |
2111 | + | let fp = iL(b, dP, iN) | |
2112 | + | let O = fp._2 | |
2113 | + | let iW = fp._3 | |
2114 | + | let ke = cX(b) | |
2115 | + | let fV = gb(iW[cO]) | |
2116 | + | let iH = de(iW[cN]) | |
2117 | + | let hq = (iH / cm) | |
2118 | + | let eq = ga(fV, hq, -1) | |
2119 | + | let ky = cV(iW[cP]) | |
2120 | + | let ki = split(valueOrElse(getString(ky), "0_0_0_0_0_0"), "_") | |
2121 | + | let kz = makeString(fT(ki, fV, hq, -1), "_") | |
2122 | + | let jr = jj(b, O, iH, dP) | |
2123 | + | let kb = split_51C(valueOrElse(getString(ke), ""), "_") | |
2124 | + | let cG = indexOf(kb, O) | |
2125 | + | if (!(isDefined(cG))) | |
2126 | + | then throw(("Your staked lands don't contain " + O)) | |
2114 | 2127 | else { | |
2115 | - | let | |
2116 | - | let | |
2117 | - | if (( | |
2118 | - | then throw(("Your gWL are taking part in voting, cannot unstake until " + toString( | |
2128 | + | let av = lastBlock.timestamp | |
2129 | + | let kC = valueOrElse(getInteger(cJ, bG(b)), 0) | |
2130 | + | if ((kC >= av)) | |
2131 | + | then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(kC))) | |
2119 | 2132 | else { | |
2120 | - | let | |
2121 | - | if (( | |
2122 | - | then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString( | |
2133 | + | let kD = (valueOrElse(getInteger(cK, a(b)), 0) + ci) | |
2134 | + | if ((kD > av)) | |
2135 | + | then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString(kD))) | |
2123 | 2136 | else { | |
2124 | - | let | |
2125 | - | let | |
2126 | - | let | |
2137 | + | let kl = cY(b) | |
2138 | + | let km = valueOrElse(getInteger(kl), 0) | |
2139 | + | let kE = if ((iH > km)) | |
2127 | 2140 | then 0 | |
2128 | - | else ( | |
2129 | - | let | |
2130 | - | $Tuple2([ScriptTransfer( | |
2131 | - | then StringEntry( | |
2132 | - | else DeleteEntry( | |
2141 | + | else (km - iH) | |
2142 | + | let kB = invoke(cK, "onStakeUnstakeLand", [b], nil) | |
2143 | + | $Tuple2([ScriptTransfer(fZ.caller, 1, fromBase58String(O)), DeleteEntry(bm(O)), DeleteEntry(bp(aA, O, b)), StringEntry(cU(), eq), StringEntry(ky, kz), StringEntry(jr._2, makeString(jr._3, ":")), if ((size(kb) > 1)) | |
2144 | + | then StringEntry(ke, makeString_11C(removeByIndex(kb, value(cG)), "_")) | |
2145 | + | else DeleteEntry(ke), IntegerEntry(kl, kE), kv], kB) | |
2133 | 2146 | } | |
2134 | 2147 | } | |
2135 | 2148 | } | |
2138 | 2151 | ||
2139 | 2152 | ||
2140 | 2153 | ||
2141 | - | @Callable( | |
2154 | + | @Callable(fZ) | |
2142 | 2155 | func stakeDuck () = { | |
2143 | - | let | |
2144 | - | if ((size( | |
2156 | + | let kv = ks(fZ) | |
2157 | + | if ((size(fZ.payments) != 1)) | |
2145 | 2158 | then throw("Exactly one payment required") | |
2146 | 2159 | else { | |
2147 | - | let | |
2148 | - | let | |
2149 | - | let | |
2150 | - | if (( | |
2151 | - | then throw((("NFT " + | |
2160 | + | let kw = value(fZ.payments[0]) | |
2161 | + | let bk = value(kw.assetId) | |
2162 | + | let ct = toString(fZ.caller) | |
2163 | + | if ((kw.amount != 1)) | |
2164 | + | then throw((("NFT " + aB) + " token should be attached as payment")) | |
2152 | 2165 | else { | |
2153 | - | let | |
2154 | - | if (if (( | |
2155 | - | then ( | |
2166 | + | let iS = value(assetInfo(bk)) | |
2167 | + | if (if ((iS.issuer != dn)) | |
2168 | + | then (iS.issuer != do) | |
2156 | 2169 | else false) | |
2157 | - | then throw((("Unknown issuer of " + | |
2158 | - | else if (!(contains( | |
2159 | - | then throw((("Only NFT " + | |
2170 | + | then throw((("Unknown issuer of " + aB) + " token")) | |
2171 | + | else if (!(contains(iS.name, aB))) | |
2172 | + | then throw((("Only NFT " + aB) + " tokens are accepted")) | |
2160 | 2173 | else { | |
2161 | - | let | |
2162 | - | let | |
2163 | - | if (isDefined(getInteger( | |
2164 | - | then throw((("NFT " + | |
2165 | - | else if (isDefined(getString( | |
2166 | - | then throw(("You already staked one duck: " + | |
2167 | - | else if ( | |
2174 | + | let kF = toBase58String(bk) | |
2175 | + | let iT = bm(kF) | |
2176 | + | if (isDefined(getInteger(iT))) | |
2177 | + | then throw((("NFT " + iS.name) + " is already staked")) | |
2178 | + | else if (isDefined(getString(bC(ct)))) | |
2179 | + | then throw(("You already staked one duck: " + iS.name)) | |
2180 | + | else if (jN(kF)) | |
2168 | 2181 | then throw("stakeDuck_checkTournament") | |
2169 | 2182 | else { | |
2170 | - | let | |
2171 | - | let | |
2172 | - | let | |
2173 | - | let | |
2174 | - | let | |
2175 | - | let | |
2176 | - | let | |
2177 | - | ([IntegerEntry( | |
2183 | + | let kG = bE(kF) | |
2184 | + | let kH = getString(kG) | |
2185 | + | let hc = bD(kF) | |
2186 | + | let kI = getString(hc) | |
2187 | + | let is = y(kF) | |
2188 | + | let it = ae(valueOrElse(getInteger(C(kF)), 0)) | |
2189 | + | let kJ = valueOrElse(getInteger(is), it) | |
2190 | + | ([IntegerEntry(iT, lastBlock.timestamp), IntegerEntry(bp(aB, toBase58String(bk), ct), lastBlock.timestamp), StringEntry(bB(kF), ct), StringEntry(bC(ct), kF)] ++ (if (isDefined(kH)) | |
2178 | 2191 | then nil | |
2179 | - | else ([StringEntry( | |
2192 | + | else ([StringEntry(kG, aI)] ++ (if (isDefined(kI)) | |
2180 | 2193 | then nil | |
2181 | - | else (([StringEntry( | |
2194 | + | else (([StringEntry(hc, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(is, kJ)) :+ kv))))) | |
2182 | 2195 | } | |
2183 | 2196 | } | |
2184 | 2197 | } | |
2187 | 2200 | ||
2188 | 2201 | ||
2189 | 2202 | ||
2190 | - | @Callable( | |
2191 | - | func unstakeDuck ( | |
2192 | - | let | |
2193 | - | if ((size( | |
2203 | + | @Callable(fZ) | |
2204 | + | func unstakeDuck (kF) = { | |
2205 | + | let kv = ks(fZ) | |
2206 | + | if ((size(fZ.payments) != 0)) | |
2194 | 2207 | then throw("No payments required") | |
2195 | 2208 | else { | |
2196 | - | let | |
2197 | - | let | |
2198 | - | let | |
2199 | - | let | |
2200 | - | if (!(isDefined(getInteger( | |
2201 | - | then throw((("NFT " + | |
2202 | - | else if (!(isDefined(getString( | |
2203 | - | then throw((("The duck " + | |
2209 | + | let bk = fromBase58String(kF) | |
2210 | + | let ct = toString(fZ.caller) | |
2211 | + | let iS = value(assetInfo(bk)) | |
2212 | + | let iT = bm(kF) | |
2213 | + | if (!(isDefined(getInteger(iT)))) | |
2214 | + | then throw((("NFT " + iS.name) + " is not staked")) | |
2215 | + | else if (!(isDefined(getString(bC(ct))))) | |
2216 | + | then throw((("The duck " + iS.name) + " is not staked")) | |
2204 | 2217 | else { | |
2205 | - | let | |
2206 | - | if (( | |
2218 | + | let iV = valueOrErrorMessage(getString(bB(kF)), (("NFT " + iS.name) + " is orphaned")) | |
2219 | + | if ((iV != ct)) | |
2207 | 2220 | then throw("Staked NFT is not yours") | |
2208 | - | else if ( | |
2221 | + | else if (jN(kF)) | |
2209 | 2222 | then throw("unstakeDuck_checkTournament") | |
2210 | 2223 | else { | |
2211 | - | let | |
2212 | - | let | |
2213 | - | let | |
2214 | - | if (( | |
2215 | - | then throw((("Please heal your duck to " + toString( | |
2216 | - | else [ScriptTransfer( | |
2224 | + | let is = y(kF) | |
2225 | + | let it = ae(valueOrElse(getInteger(C(kF)), 0)) | |
2226 | + | let aq = valueOrElse(getInteger(is), it) | |
2227 | + | if ((it > aq)) | |
2228 | + | then throw((("Please heal your duck to " + toString(it)) + "hp before unstaking")) | |
2229 | + | else [ScriptTransfer(fZ.caller, 1, bk), DeleteEntry(iT), DeleteEntry(is), DeleteEntry(bE(kF)), DeleteEntry(bB(kF)), DeleteEntry(bp(aB, kF, ct)), DeleteEntry(bC(ct)), kv] | |
2217 | 2230 | } | |
2218 | 2231 | } | |
2219 | 2232 | } | |
2221 | 2234 | ||
2222 | 2235 | ||
2223 | 2236 | ||
2224 | - | @Callable( | |
2225 | - | func claimRes ( | |
2226 | - | let | |
2227 | - | if ((size( | |
2237 | + | @Callable(fZ) | |
2238 | + | func claimRes (dX,kK) = { | |
2239 | + | let kv = ks(fZ) | |
2240 | + | if ((size(fZ.payments) != 0)) | |
2228 | 2241 | then throw("No payments required") | |
2229 | 2242 | else { | |
2230 | - | let b = toString( | |
2231 | - | let | |
2232 | - | let | |
2233 | - | $Tuple2((((( | |
2234 | - | } | |
2235 | - | } | |
2236 | - | ||
2237 | - | ||
2238 | - | ||
2239 | - | @Callable( | |
2240 | - | func claimResToWH ( | |
2241 | - | let | |
2242 | - | if ((size( | |
2243 | + | let b = toString(fZ.originCaller) | |
2244 | + | let ey = iX(b, dX, dP, kK) | |
2245 | + | let z = valueOrErrorMessage(getString(bC(b)), "You don't have a duck staked") | |
2246 | + | $Tuple2(((((ey._1 ++ jx(z, fraction(S, dX, cl))._1) :+ StringEntry(ey._2, makeString(ey._3, ":"))) :+ StringEntry(ey._4, makeString(ey._5, ":"))) :+ kv), ey._3[bf]) | |
2247 | + | } | |
2248 | + | } | |
2249 | + | ||
2250 | + | ||
2251 | + | ||
2252 | + | @Callable(fZ) | |
2253 | + | func claimResToWH (dX,kK) = { | |
2254 | + | let kv = ks(fZ) | |
2255 | + | if ((size(fZ.payments) != 0)) | |
2243 | 2256 | then throw("No payments required") | |
2244 | 2257 | else { | |
2245 | - | let b = toString( | |
2246 | - | let | |
2247 | - | $Tuple2((((( | |
2248 | - | } | |
2249 | - | } | |
2250 | - | ||
2251 | - | ||
2252 | - | ||
2253 | - | @Callable( | |
2254 | - | func flight ( | |
2255 | - | let | |
2256 | - | if ((size( | |
2258 | + | let b = toString(fZ.originCaller) | |
2259 | + | let ey = iX(b, dX, dO, kK) | |
2260 | + | $Tuple2(((((ey._1 ++ jD(b, fraction(S, dX, cl))._1) :+ StringEntry(ey._2, makeString(ey._3, ":"))) :+ StringEntry(ey._4, makeString(ey._5, ":"))) :+ kv), ey._5[aW]) | |
2261 | + | } | |
2262 | + | } | |
2263 | + | ||
2264 | + | ||
2265 | + | ||
2266 | + | @Callable(fZ) | |
2267 | + | func flight (ih,ii) = { | |
2268 | + | let kv = ks(fZ) | |
2269 | + | if ((size(fZ.payments) != 0)) | |
2257 | 2270 | then throw("No payments required") | |
2258 | 2271 | else { | |
2259 | - | let | |
2260 | - | let | |
2261 | - | let | |
2262 | - | let | |
2263 | - | let | |
2264 | - | let | |
2265 | - | if (if (!( | |
2266 | - | then | |
2272 | + | let bH = toString(fZ.caller) | |
2273 | + | let gE = ig(bH, ih, ii) | |
2274 | + | let z = gE._2 | |
2275 | + | let io = gE._4 | |
2276 | + | let kL = split(io, "_") | |
2277 | + | let kM = (kL[bX] == "T") | |
2278 | + | if (if (!(kM)) | |
2279 | + | then jN(z) | |
2267 | 2280 | else false) | |
2268 | 2281 | then throw("flight_checkTournament") | |
2269 | 2282 | else { | |
2270 | - | let | |
2283 | + | let kN = if (kM) | |
2271 | 2284 | then { | |
2272 | - | let | |
2273 | - | let | |
2274 | - | let | |
2275 | - | let | |
2276 | - | let | |
2277 | - | if (if (if ((parseIntValue( | |
2285 | + | let jO = valueOrElse(getInteger(cL, bJ), 0) | |
2286 | + | let av = lastBlock.timestamp | |
2287 | + | let jP = bP(cL, jO) | |
2288 | + | let bR = jP[bN] | |
2289 | + | let bS = jP[bO] | |
2290 | + | if (if (if ((parseIntValue(kL[bW]) != jO)) | |
2278 | 2291 | then true | |
2279 | - | else ( | |
2292 | + | else (bS[bU] != "INPROGRESS")) | |
2280 | 2293 | then true | |
2281 | - | else ( | |
2294 | + | else (av > parseIntValue(bR[bT]))) | |
2282 | 2295 | then unit | |
2283 | 2296 | else { | |
2284 | - | let | |
2285 | - | let | |
2286 | - | if (( | |
2297 | + | let kO = parseIntValue(kL[bY]) | |
2298 | + | let kP = parseIntValue(bS[bV]) | |
2299 | + | if ((kP >= kO)) | |
2287 | 2300 | then unit | |
2288 | - | else invoke( | |
2301 | + | else invoke(cL, "updateDynamicData", [z, kO], nil) | |
2289 | 2302 | } | |
2290 | 2303 | } | |
2291 | 2304 | else unit | |
2292 | - | if (( | |
2305 | + | if ((kN == kN)) | |
2293 | 2306 | then { | |
2294 | - | let | |
2295 | - | let | |
2296 | - | if (( | |
2307 | + | let kG = bE(z) | |
2308 | + | let iP = valueOrElse(getString(kG), aI) | |
2309 | + | if ((io == iP)) | |
2297 | 2310 | then throw("You can't fly to the same location") | |
2298 | 2311 | else { | |
2299 | - | let | |
2300 | - | let | |
2301 | - | let | |
2302 | - | let | |
2303 | - | let | |
2304 | - | $Tuple2(([StringEntry( | |
2305 | - | then | |
2306 | - | else | |
2307 | - | then [StringEntry( | |
2308 | - | else (nil ++ | |
2309 | - | then | |
2310 | - | else | |
2312 | + | let fM = E(z) | |
2313 | + | let iB = valueOrElse(getString(fM), ",;,_,;,_,;,_,;,_,;,_,;,") | |
2314 | + | let kQ = ez(iB, gE._5) | |
2315 | + | let iD = kQ._1 | |
2316 | + | let iE = kQ._2 | |
2317 | + | $Tuple2(([StringEntry(kG, if ((gE._1 > 0)) | |
2318 | + | then io | |
2319 | + | else iP), StringEntry(fM, iD), IntegerEntry(y(z), gE._1), kv] ++ (if (iE) | |
2320 | + | then [StringEntry(K(z), "0_0_0_0_0")] | |
2321 | + | else (nil ++ jx(z, if ((gE._1 > 0)) | |
2322 | + | then T | |
2323 | + | else U)._1))), gE._3) | |
2311 | 2324 | } | |
2312 | 2325 | } | |
2313 | 2326 | else throw("Strict value is not equal to itself.") | |
2317 | 2330 | ||
2318 | 2331 | ||
2319 | 2332 | ||
2320 | - | @Callable( | |
2321 | - | func heal ( | |
2322 | - | let | |
2323 | - | if (if (if ((0 > | |
2333 | + | @Callable(fZ) | |
2334 | + | func heal (kR,kS,kT) = { | |
2335 | + | let kv = ks(fZ) | |
2336 | + | if (if (if ((0 > kR)) | |
2324 | 2337 | then true | |
2325 | - | else (0 > | |
2338 | + | else (0 > kS)) | |
2326 | 2339 | then true | |
2327 | - | else (0 > | |
2340 | + | else (0 > kT)) | |
2328 | 2341 | then throw("Quantity cannot be negative") | |
2329 | 2342 | else { | |
2330 | - | let | |
2331 | - | if ( | |
2343 | + | let z = valueOrErrorMessage(getString(bC(toString(fZ.caller))), "You don't have a duck staked") | |
2344 | + | if (jN(z)) | |
2332 | 2345 | then throw("heal_checkTournament") | |
2333 | 2346 | else { | |
2334 | - | let | |
2335 | - | let | |
2336 | - | let | |
2337 | - | let | |
2338 | - | if (( | |
2339 | - | then throw((("HP should be < " + toString( | |
2347 | + | let kU = [kR, kS, kT] | |
2348 | + | let is = y(z) | |
2349 | + | let it = ae(valueOrElse(getInteger(C(z)), 0)) | |
2350 | + | let kV = valueOrElse(getInteger(is), it) | |
2351 | + | if ((kV >= it)) | |
2352 | + | then throw((("HP should be < " + toString(it)) + " to heal")) | |
2340 | 2353 | else { | |
2341 | - | let | |
2342 | - | let | |
2343 | - | let | |
2354 | + | let hc = bD(z) | |
2355 | + | let hF = hb(hc) | |
2356 | + | let kW = if ((hF[bh] == "")) | |
2344 | 2357 | then nil | |
2345 | - | else split_4C( | |
2346 | - | func | |
2347 | - | let | |
2348 | - | let | |
2349 | - | then parseIntValue( | |
2358 | + | else split_4C(hF[bh], "_") | |
2359 | + | func kX (eg,ca) = { | |
2360 | + | let dd = eg._2 | |
2361 | + | let gv = if ((size(kW) > dd)) | |
2362 | + | then parseIntValue(kW[dd]) | |
2350 | 2363 | else 0 | |
2351 | - | if ((3 > | |
2364 | + | if ((3 > dd)) | |
2352 | 2365 | then { | |
2353 | - | let | |
2354 | - | if (( | |
2355 | - | then throw(((("You have only " + toString( | |
2356 | - | else $Tuple3(( | |
2366 | + | let kY = kU[dd] | |
2367 | + | if ((kY > gv)) | |
2368 | + | then throw(((("You have only " + toString(gv)) + " of ") + aL[dd])) | |
2369 | + | else $Tuple3((eg._1 :+ toString((gv - kY))), (dd + 1), (eg._3 + (parseIntValue(split(ca, "_")[aR]) * kY))) | |
2357 | 2370 | } | |
2358 | - | else $Tuple3(( | |
2371 | + | else $Tuple3((eg._1 :+ toString(gv)), (dd + 1), eg._3) | |
2359 | 2372 | } | |
2360 | 2373 | ||
2361 | - | let | |
2362 | - | let | |
2363 | - | let | |
2364 | - | let | |
2365 | - | func | |
2366 | - | then | |
2367 | - | else | |
2368 | - | ||
2369 | - | func | |
2370 | - | then | |
2374 | + | let ey = { | |
2375 | + | let ei = aP | |
2376 | + | let ej = size(ei) | |
2377 | + | let ek = $Tuple3(nil, 0, 0) | |
2378 | + | func el (em,en) = if ((en >= ej)) | |
2379 | + | then em | |
2380 | + | else kX(em, ei[en]) | |
2381 | + | ||
2382 | + | func eo (em,en) = if ((en >= ej)) | |
2383 | + | then em | |
2371 | 2384 | else throw("List size exceeds 50") | |
2372 | 2385 | ||
2373 | - | | |
2386 | + | eo(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(ek, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50) | |
2374 | 2387 | } | |
2375 | - | let | |
2376 | - | $Tuple2(([IntegerEntry( | |
2388 | + | let kZ = min([it, (kV + ey._3)]) | |
2389 | + | $Tuple2(([IntegerEntry(is, kZ), StringEntry(hc, makeString_2C([hF[be], hF[bf], hF[bg], makeString(ey._1, "_")], ":")), kv] ++ jx(z, (ab * ((kR + kS) + kT)))._1), kZ) | |
2377 | 2390 | } | |
2378 | 2391 | } | |
2379 | 2392 | } | |
2381 | 2394 | ||
2382 | 2395 | ||
2383 | 2396 | ||
2384 | - | @Callable( | |
2397 | + | @Callable(fZ) | |
2385 | 2398 | func healES () = { | |
2386 | - | let | |
2387 | - | if ((size( | |
2399 | + | let kv = ks(fZ) | |
2400 | + | if ((size(fZ.payments) != 1)) | |
2388 | 2401 | then throw("Exactly one payment required") | |
2389 | 2402 | else { | |
2390 | - | let | |
2391 | - | if (( | |
2403 | + | let kw = value(fZ.payments[0]) | |
2404 | + | if ((kw.assetId != ce)) | |
2392 | 2405 | then throw("Allowed USDT payment only!") | |
2393 | 2406 | else { | |
2394 | - | let | |
2395 | - | if ( | |
2407 | + | let z = valueOrErrorMessage(getString(bC(toString(fZ.caller))), "You don't have a duck staked") | |
2408 | + | if (jN(z)) | |
2396 | 2409 | then throw("healES_checkTournament") | |
2397 | 2410 | else { | |
2398 | - | let | |
2399 | - | let | |
2400 | - | let | |
2401 | - | if (( | |
2411 | + | let is = y(z) | |
2412 | + | let it = ae(valueOrElse(getInteger(C(z)), 0)) | |
2413 | + | let kV = valueOrElse(getInteger(is), it) | |
2414 | + | if ((kV > 0)) | |
2402 | 2415 | then throw("HP should be 0 to call Emergency Service") | |
2403 | 2416 | else { | |
2404 | - | let | |
2405 | - | let | |
2406 | - | let | |
2417 | + | let hc = bD(z) | |
2418 | + | let hF = hb(hc) | |
2419 | + | let kW = if ((hF[bh] == "")) | |
2407 | 2420 | then nil | |
2408 | - | else split_4C( | |
2409 | - | let | |
2410 | - | then parseIntValue( | |
2421 | + | else split_4C(hF[bh], "_") | |
2422 | + | let la = if ((size(kW) > 0)) | |
2423 | + | then parseIntValue(kW[0]) | |
2411 | 2424 | else 0 | |
2412 | - | let | |
2413 | - | then parseIntValue( | |
2425 | + | let lb = if ((size(kW) > 1)) | |
2426 | + | then parseIntValue(kW[1]) | |
2414 | 2427 | else 0 | |
2415 | - | let | |
2416 | - | then parseIntValue( | |
2428 | + | let lc = if ((size(kW) > 2)) | |
2429 | + | then parseIntValue(kW[2]) | |
2417 | 2430 | else 0 | |
2418 | - | if (if (if (( | |
2431 | + | if (if (if ((la > 0)) | |
2419 | 2432 | then true | |
2420 | - | else ( | |
2433 | + | else (lb > 0)) | |
2421 | 2434 | then true | |
2422 | - | else ( | |
2435 | + | else (lc > 0)) | |
2423 | 2436 | then throw("You have to use own Medical Kit") | |
2424 | 2437 | else { | |
2425 | - | let | |
2426 | - | let | |
2427 | - | then split_4C(value( | |
2438 | + | let ld = getString(cI, bI()) | |
2439 | + | let le = if (isDefined(ld)) | |
2440 | + | then split_4C(value(ld), "_") | |
2428 | 2441 | else nil | |
2429 | - | let | |
2430 | - | then parseIntValue( | |
2442 | + | let lf = if ((size(le) > 0)) | |
2443 | + | then parseIntValue(le[0]) | |
2431 | 2444 | else 0 | |
2432 | - | if ((0 >= | |
2445 | + | if ((0 >= lf)) | |
2433 | 2446 | then throw("There are no Medical Kits L1 at Emergency Service storage") | |
2434 | 2447 | else { | |
2435 | - | let | |
2436 | - | let | |
2437 | - | let | |
2438 | - | let | |
2439 | - | let | |
2440 | - | if (( | |
2441 | - | then throw(("Payment attached should be " + toString( | |
2448 | + | let kZ = (kV + parseIntValue(split(aP[0], "_")[aR])) | |
2449 | + | let lg = makeString([toString((lf - 1)), removeByIndex(le, 0)], "_") | |
2450 | + | let ca = split(aP[0], "_") | |
2451 | + | let lh = bZ(ca) | |
2452 | + | let li = fraction((lh * aK), aJ, (cl * aU)) | |
2453 | + | if ((kw.amount != li)) | |
2454 | + | then throw(("Payment attached should be " + toString(li))) | |
2442 | 2455 | else { | |
2443 | - | let | |
2444 | - | $Tuple2(([IntegerEntry( | |
2456 | + | let ey = cZ(invoke(cI, "updateEsStorage", [lg], [AttachedPayment(ce, li)])) | |
2457 | + | $Tuple2(([IntegerEntry(is, kZ), kv] ++ jx(z, V)._1), ey) | |
2445 | 2458 | } | |
2446 | 2459 | } | |
2447 | 2460 | } | |
2453 | 2466 | ||
2454 | 2467 | ||
2455 | 2468 | ||
2456 | - | @Callable( | |
2457 | - | func updateBackpack ( | |
2469 | + | @Callable(fZ) | |
2470 | + | func updateBackpack (z,lj) = if ((fZ.caller != cI)) | |
2458 | 2471 | then throw("permission denied") | |
2459 | - | else $Tuple2([StringEntry( | |
2460 | - | ||
2461 | - | ||
2462 | - | ||
2463 | - | @Callable( | |
2472 | + | else $Tuple2([StringEntry(bD(z), lj)], lj) | |
2473 | + | ||
2474 | + | ||
2475 | + | ||
2476 | + | @Callable(fZ) | |
2464 | 2477 | func commitForRandom () = { | |
2465 | - | let | |
2466 | - | let | |
2467 | - | let b = toString( | |
2468 | - | $Tuple2(([IntegerEntry( | |
2469 | - | } | |
2470 | - | ||
2471 | - | ||
2472 | - | ||
2473 | - | @Callable( | |
2478 | + | let kv = ks(fZ) | |
2479 | + | let lk = (height + cS) | |
2480 | + | let b = toString(fZ.caller) | |
2481 | + | $Tuple2(([IntegerEntry(cT(b), lk)] :+ kv), lk) | |
2482 | + | } | |
2483 | + | ||
2484 | + | ||
2485 | + | ||
2486 | + | @Callable(fZ) | |
2474 | 2487 | func buySLand () = { | |
2475 | - | let | |
2476 | - | if ((size( | |
2488 | + | let kv = ks(fZ) | |
2489 | + | if ((size(fZ.payments) != 1)) | |
2477 | 2490 | then throw("Exactly one payment required") | |
2478 | 2491 | else { | |
2479 | - | let | |
2480 | - | if (( | |
2492 | + | let kw = value(fZ.payments[0]) | |
2493 | + | if ((kw.assetId != ce)) | |
2481 | 2494 | then throw("Allowed USDT payment only!") | |
2482 | - | else if (( | |
2483 | - | then throw(("Payment attached should be " + toString( | |
2495 | + | else if ((kw.amount != dw)) | |
2496 | + | then throw(("Payment attached should be " + toString(dw))) | |
2484 | 2497 | else { | |
2485 | - | let | |
2486 | - | $Tuple2(((( | |
2498 | + | let ey = hZ(fZ.caller, fZ.transactionId) | |
2499 | + | $Tuple2((((ey._1 :+ ScriptTransfer(cI, kw.amount, ce)) ++ jD(toString(fZ.caller), X)._1) :+ kv), ey._2._1) | |
2487 | 2500 | } | |
2488 | 2501 | } | |
2489 | 2502 | } | |
2490 | 2503 | ||
2491 | 2504 | ||
2492 | 2505 | ||
2493 | - | @Callable( | |
2494 | - | func expedition ( | |
2495 | - | let | |
2496 | - | if ((size( | |
2506 | + | @Callable(fZ) | |
2507 | + | func expedition (ih,ii) = { | |
2508 | + | let kv = ks(fZ) | |
2509 | + | if ((size(fZ.payments) != 0)) | |
2497 | 2510 | then throw("No payments required") | |
2498 | 2511 | else { | |
2499 | - | let | |
2500 | - | let | |
2501 | - | if ( | |
2512 | + | let ey = iy(fZ.caller, fZ.transactionId, ih, ii) | |
2513 | + | let z = valueOrErrorMessage(getString(bC(toString(fZ.caller))), "You don't have a duck staked") | |
2514 | + | if (jN(z)) | |
2502 | 2515 | then throw("expedition_checkTournament") | |
2503 | - | else $Tuple2((( | |
2504 | - | } | |
2505 | - | } | |
2506 | - | ||
2507 | - | ||
2508 | - | ||
2509 | - | @Callable( | |
2510 | - | func upgradeInfra ( | |
2511 | - | let | |
2512 | - | if ((size( | |
2516 | + | else $Tuple2(((ey._1 ++ jx(z, X)._1) :+ kv), $Tuple2(ey._2, ey._3)) | |
2517 | + | } | |
2518 | + | } | |
2519 | + | ||
2520 | + | ||
2521 | + | ||
2522 | + | @Callable(fZ) | |
2523 | + | func upgradeInfra (O) = { | |
2524 | + | let kv = ks(fZ) | |
2525 | + | if ((size(fZ.payments) != 0)) | |
2513 | 2526 | then throw("No payments required") | |
2514 | 2527 | else { | |
2515 | - | let | |
2516 | - | let | |
2517 | - | $Tuple2((( | |
2518 | - | } | |
2519 | - | } | |
2520 | - | ||
2521 | - | ||
2522 | - | ||
2523 | - | @Callable( | |
2524 | - | func activateArtifact ( | |
2525 | - | let | |
2526 | - | if ((size( | |
2528 | + | let ey = jk(true, fZ.caller, 0, O) | |
2529 | + | let z = valueOrErrorMessage(getString(bC(toString(fZ.caller))), "You don't have a duck staked") | |
2530 | + | $Tuple2(((ey._1 :+ kv) ++ jx(z, fraction(Y, ey._3, cl))._1), ey._2) | |
2531 | + | } | |
2532 | + | } | |
2533 | + | ||
2534 | + | ||
2535 | + | ||
2536 | + | @Callable(fZ) | |
2537 | + | func activateArtifact (ll,lm) = { | |
2538 | + | let kv = ks(fZ) | |
2539 | + | if ((size(fZ.payments) != 0)) | |
2527 | 2540 | then throw("No payments required") | |
2528 | 2541 | else { | |
2529 | - | let b = toString( | |
2530 | - | let | |
2531 | - | let | |
2532 | - | if (("PRESALE" == | |
2533 | - | then | |
2534 | - | else if (("ONBOARD" == | |
2535 | - | then | |
2542 | + | let b = toString(fZ.caller) | |
2543 | + | let ey = { | |
2544 | + | let cf = ll | |
2545 | + | if (("PRESALE" == cf)) | |
2546 | + | then jL(b, lm) | |
2547 | + | else if (("ONBOARD" == cf)) | |
2548 | + | then jE(b) | |
2536 | 2549 | else throw("Unknown artifact") | |
2537 | 2550 | } | |
2538 | - | ( | |
2539 | - | } | |
2540 | - | } | |
2541 | - | ||
2542 | - | ||
2543 | - | ||
2544 | - | @Callable( | |
2545 | - | func mergeLands ( | |
2546 | - | let | |
2547 | - | if ((size( | |
2551 | + | (ey :+ kv) | |
2552 | + | } | |
2553 | + | } | |
2554 | + | ||
2555 | + | ||
2556 | + | ||
2557 | + | @Callable(fZ) | |
2558 | + | func mergeLands (jT) = { | |
2559 | + | let kv = ks(fZ) | |
2560 | + | if ((size(fZ.payments) != 0)) | |
2548 | 2561 | then throw("No payments required") | |
2549 | 2562 | else { | |
2550 | - | let | |
2551 | - | $Tuple2((( | |
2552 | - | } | |
2553 | - | } | |
2554 | - | ||
2555 | - | ||
2556 | - | ||
2557 | - | @Callable( | |
2558 | - | func cargoExchange ( | |
2559 | - | let | |
2560 | - | if ((size( | |
2563 | + | let ey = kr(toString(fZ.caller), jT) | |
2564 | + | $Tuple2(((ey._1 :+ kv) ++ jD(toString(fZ.caller), Z)._1), ey._2) | |
2565 | + | } | |
2566 | + | } | |
2567 | + | ||
2568 | + | ||
2569 | + | ||
2570 | + | @Callable(fZ) | |
2571 | + | func cargoExchange (ln,O) = { | |
2572 | + | let kv = ks(fZ) | |
2573 | + | if ((size(fZ.payments) != 0)) | |
2561 | 2574 | then throw("No payments required") | |
2562 | 2575 | else { | |
2563 | - | let | |
2564 | - | let b = toString( | |
2565 | - | let | |
2566 | - | let | |
2567 | - | if (!(isDefined(getInteger( | |
2568 | - | then throw(( | |
2576 | + | let hE = split_4C(ln, ":") | |
2577 | + | let b = toString(fZ.originCaller) | |
2578 | + | let iS = value(assetInfo(fromBase58String(O))) | |
2579 | + | let iT = bm(O) | |
2580 | + | if (!(isDefined(getInteger(iT)))) | |
2581 | + | then throw((iS.name + " is not staked")) | |
2569 | 2582 | else { | |
2570 | - | let | |
2571 | - | if (( | |
2572 | - | then throw(( | |
2583 | + | let iV = valueOrErrorMessage(getString(bj(O)), (("NFT " + iS.name) + " is orphaned")) | |
2584 | + | if ((iV != b)) | |
2585 | + | then throw((aA + " is not yours")) | |
2573 | 2586 | else { | |
2574 | - | let | |
2575 | - | let | |
2576 | - | let | |
2577 | - | let | |
2578 | - | let | |
2579 | - | if (( | |
2580 | - | then throw((("Duck location type is " + | |
2581 | - | else if (( | |
2582 | - | then throw(("Duck should be on the land " + | |
2587 | + | let hq = (de(split(iS.description, "_")[cN]) / cm) | |
2588 | + | let hr = valueOrElse(getInteger(bt(O)), 0) | |
2589 | + | let z = valueOrErrorMessage(getString(bC(b)), "You don't have a duck staked") | |
2590 | + | let iP = valueOrElse(getString(bE(z)), aI) | |
2591 | + | let iQ = split(value(iP), "_") | |
2592 | + | if ((iQ[bX] != "L")) | |
2593 | + | then throw((("Duck location type is " + iQ[bX]) + ", but should be L")) | |
2594 | + | else if ((iQ[bY] != O)) | |
2595 | + | then throw(("Duck should be on the land " + O)) | |
2583 | 2596 | else { | |
2584 | - | let | |
2585 | - | let | |
2586 | - | let | |
2587 | - | let | |
2588 | - | let | |
2589 | - | let | |
2590 | - | let | |
2591 | - | let | |
2592 | - | [StringEntry( | |
2597 | + | let hp = bs(O) | |
2598 | + | let hg = ho(hp, hq, hr) | |
2599 | + | let hc = bD(z) | |
2600 | + | let hF = hb(hc) | |
2601 | + | let ey = hD(hE, hg, hF) | |
2602 | + | let hx = split(hg[aZ], "_") | |
2603 | + | let jh = (parseIntValue(hx[bb]) + ey._7) | |
2604 | + | let ji = (parseIntValue(hx[bc]) - ey._7) | |
2605 | + | [StringEntry(hc, makeString_2C([hF[be], ey._4, ey._5, ey._6], ":")), StringEntry(hp, makeString_2C([hg[aV], ey._1, ey._2, ey._3, makeString([hx[ba], toString(jh), toString(ji), hx[bd]], "_")], ":")), kv] | |
2593 | 2606 | } | |
2594 | 2607 | } | |
2595 | 2608 | } | |
2598 | 2611 | ||
2599 | 2612 | ||
2600 | 2613 | ||
2601 | - | @Callable( | |
2602 | - | func saveWarehouse ( | |
2614 | + | @Callable(fZ) | |
2615 | + | func saveWarehouse (ht,O) = if ((fZ.caller != cI)) | |
2603 | 2616 | then throw("Access denied") | |
2604 | 2617 | else { | |
2605 | - | let | |
2606 | - | let | |
2607 | - | if ((size( | |
2618 | + | let hp = bs(O) | |
2619 | + | let hu = split_4C(ht, ":") | |
2620 | + | if ((size(hu) != 5)) | |
2608 | 2621 | then throw("warehouse string should contain 4 ':' separators") | |
2609 | 2622 | else { | |
2610 | - | let | |
2611 | - | let | |
2612 | - | let | |
2613 | - | let | |
2614 | - | let | |
2615 | - | $Tuple2([StringEntry( | |
2623 | + | let lo = split(hu[aZ], "_")[ba] | |
2624 | + | let jh = hf(hu) | |
2625 | + | let lp = hd(hu[aV]) | |
2626 | + | let ji = ((lp - parseIntValue(lo)) - jh) | |
2627 | + | let lq = makeString_2C([hu[aV], hu[aW], hu[aX], hu[aY], makeString([lo, toString(jh), toString(ji), toString(lp)], "_")], ":") | |
2628 | + | $Tuple2([StringEntry(hp, lq)], lq) | |
2616 | 2629 | } | |
2617 | 2630 | } | |
2618 | 2631 | ||
2619 | 2632 | ||
2620 | 2633 | ||
2621 | - | @Callable( | |
2622 | - | func fixWarehouseFormat ( | |
2634 | + | @Callable(fZ) | |
2635 | + | func fixWarehouseFormat (O) = if ((fZ.caller != cH)) | |
2623 | 2636 | then throw("Access denied") | |
2624 | 2637 | else { | |
2625 | - | let | |
2626 | - | let | |
2627 | - | let | |
2628 | - | let | |
2629 | - | let | |
2630 | - | let | |
2631 | - | let | |
2632 | - | let | |
2633 | - | let | |
2634 | - | let | |
2635 | - | $Tuple2([StringEntry( | |
2638 | + | let hp = bs(O) | |
2639 | + | let iS = value(assetInfo(fromBase58String(O))) | |
2640 | + | let hq = (de(split(iS.description, "_")[cN]) / cm) | |
2641 | + | let hr = valueOrElse(getInteger(bt(O)), 0) | |
2642 | + | let hu = ho(hp, hq, hr) | |
2643 | + | let lo = dc(invoke(cI, "recalcLockedVolumeREADONLY", [O, hu], nil)) | |
2644 | + | let jh = hf(hu) | |
2645 | + | let lp = hd(hu[aV]) | |
2646 | + | let ji = ((lp - lo) - jh) | |
2647 | + | let lq = makeString_2C([hu[aV], hu[aW], hu[aX], hu[aY], makeString([toString(lo), toString(jh), toString(ji), toString(lp)], "_")], ":") | |
2648 | + | $Tuple2([StringEntry(hp, lq)], lq) | |
2636 | 2649 | } | |
2637 | 2650 | ||
2638 | 2651 | ||
2639 | 2652 | ||
2640 | - | @Callable( | |
2641 | - | func fixContinentProportions ( | |
2653 | + | @Callable(fZ) | |
2654 | + | func fixContinentProportions (jT) = if ((fZ.caller != cH)) | |
2642 | 2655 | then throw("Access denied") | |
2643 | 2656 | else { | |
2644 | - | func | |
2645 | - | ||
2646 | - | let | |
2647 | - | let | |
2648 | - | let | |
2649 | - | let | |
2650 | - | func | |
2651 | - | then | |
2652 | - | else | |
2653 | - | ||
2654 | - | func | |
2655 | - | then | |
2657 | + | func lr (eg,ls) = (eg :+ valueOrElse(getString(cV(ls)), "0_0_0_0_0_0")) | |
2658 | + | ||
2659 | + | let fJ = { | |
2660 | + | let ei = aM | |
2661 | + | let ej = size(ei) | |
2662 | + | let ek = nil | |
2663 | + | func el (em,en) = if ((en >= ej)) | |
2664 | + | then em | |
2665 | + | else lr(em, ei[en]) | |
2666 | + | ||
2667 | + | func eo (em,en) = if ((en >= ej)) | |
2668 | + | then em | |
2656 | 2669 | else throw("List size exceeds 5") | |
2657 | 2670 | ||
2658 | - | | |
2659 | - | } | |
2660 | - | func | |
2661 | - | let | |
2662 | - | let | |
2663 | - | let | |
2664 | - | let | |
2665 | - | let | |
2666 | - | let | |
2667 | - | let | |
2668 | - | let | |
2669 | - | let | |
2670 | - | if (("Americas" == | |
2671 | - | then [ | |
2672 | - | else if (("Europe" == | |
2673 | - | then [ | |
2674 | - | else if (("Asia" == | |
2675 | - | then [ | |
2676 | - | else if (("Africa" == | |
2677 | - | then [ | |
2678 | - | else if (("Oceania" == | |
2679 | - | then [ | |
2671 | + | eo(el(el(el(el(el(ek, 0), 1), 2), 3), 4), 5) | |
2672 | + | } | |
2673 | + | func lt (eg,O) = { | |
2674 | + | let iS = value(assetInfo(fromBase58String(O))) | |
2675 | + | let iW = split(iS.description, "_") | |
2676 | + | let hq = (de(iW[cN]) / cm) | |
2677 | + | let ls = iW[cP] | |
2678 | + | let fV = gb(iW[cO]) | |
2679 | + | let gD = value(indexOf(aM, ls)) | |
2680 | + | let ki = split(eg[gD], "_") | |
2681 | + | let lu = makeString(fT(ki, fV, hq, 1), "_") | |
2682 | + | let cf = ls | |
2683 | + | if (("Americas" == cf)) | |
2684 | + | then [lu, eg[1], eg[2], eg[3], eg[4]] | |
2685 | + | else if (("Europe" == cf)) | |
2686 | + | then [eg[0], lu, eg[2], eg[3], eg[4]] | |
2687 | + | else if (("Asia" == cf)) | |
2688 | + | then [eg[0], eg[1], lu, eg[3], eg[4]] | |
2689 | + | else if (("Africa" == cf)) | |
2690 | + | then [eg[0], eg[1], eg[2], lu, eg[4]] | |
2691 | + | else if (("Oceania" == cf)) | |
2692 | + | then [eg[0], eg[1], eg[2], eg[3], lu] | |
2680 | 2693 | else throw("wrong continent") | |
2681 | 2694 | } | |
2682 | 2695 | ||
2683 | - | let | |
2684 | - | let | |
2685 | - | let | |
2686 | - | let | |
2687 | - | func | |
2688 | - | then | |
2689 | - | else | |
2690 | - | ||
2691 | - | func | |
2692 | - | then | |
2696 | + | let er = { | |
2697 | + | let ei = jT | |
2698 | + | let ej = size(ei) | |
2699 | + | let ek = fJ | |
2700 | + | func gW (em,en) = if ((en >= ej)) | |
2701 | + | then em | |
2702 | + | else lt(em, ei[en]) | |
2703 | + | ||
2704 | + | func gX (em,en) = if ((en >= ej)) | |
2705 | + | then em | |
2693 | 2706 | else throw("List size exceeds 100") | |
2694 | 2707 | ||
2695 | - | | |
2696 | - | } | |
2697 | - | $Tuple2([StringEntry( | |
2708 | + | gX(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(ek, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100) | |
2709 | + | } | |
2710 | + | $Tuple2([StringEntry(cV("Americas"), er[0]), StringEntry(cV("Europe"), er[1]), StringEntry(cV("Asia"), er[2]), StringEntry(cV("Africa"), er[3]), StringEntry(cV("Oceania"), er[4])], 0) | |
2698 | 2711 | } | |
2699 | 2712 | ||
2700 | 2713 | ||
2701 | 2714 | ||
2702 | - | @Callable( | |
2703 | - | func fixStakedPieces ( | |
2715 | + | @Callable(fZ) | |
2716 | + | func fixStakedPieces (ct) = if ((fZ.caller != cH)) | |
2704 | 2717 | then throw("Access denied") | |
2705 | 2718 | else { | |
2706 | - | let | |
2719 | + | let km = if ((ct == "")) | |
2707 | 2720 | then 0 | |
2708 | 2721 | else { | |
2709 | - | let | |
2710 | - | let | |
2711 | - | then split_51C(value( | |
2722 | + | let kf = getString(al, cX(ct)) | |
2723 | + | let kb = if (isDefined(kf)) | |
2724 | + | then split_51C(value(kf), "_") | |
2712 | 2725 | else nil | |
2713 | - | func | |
2714 | - | let | |
2715 | - | let | |
2716 | - | ( | |
2726 | + | func lv (eg,O) = { | |
2727 | + | let iS = value(assetInfo(fromBase58String(O))) | |
2728 | + | let df = split(iS.description, "_")[cN] | |
2729 | + | (eg + de(df)) | |
2717 | 2730 | } | |
2718 | 2731 | ||
2719 | - | let | |
2720 | - | let | |
2721 | - | let | |
2722 | - | func | |
2723 | - | then | |
2724 | - | else | |
2725 | - | ||
2726 | - | func | |
2727 | - | then | |
2732 | + | let ei = kb | |
2733 | + | let ej = size(ei) | |
2734 | + | let ek = 0 | |
2735 | + | func el (em,en) = if ((en >= ej)) | |
2736 | + | then em | |
2737 | + | else lv(em, ei[en]) | |
2738 | + | ||
2739 | + | func eo (em,en) = if ((en >= ej)) | |
2740 | + | then em | |
2728 | 2741 | else throw("List size exceeds 100") | |
2729 | 2742 | ||
2730 | - | | |
2743 | + | eo(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(ek, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100) | |
2731 | 2744 | } | |
2732 | - | $Tuple2([IntegerEntry( | |
2745 | + | $Tuple2([IntegerEntry(cY(ct), km)], km) | |
2733 | 2746 | } | |
2734 | 2747 | ||
2735 | 2748 | ||
2736 | 2749 | ||
2737 | - | @Callable( | |
2738 | - | func setCustomName ( | |
2739 | - | let | |
2740 | - | if ((size( | |
2750 | + | @Callable(fZ) | |
2751 | + | func setCustomName (bk,kd,bo) = { | |
2752 | + | let kv = ks(fZ) | |
2753 | + | if ((size(fZ.payments) != 1)) | |
2741 | 2754 | then throw("Exactly one payment required") | |
2742 | 2755 | else { | |
2743 | - | let | |
2744 | - | if (( | |
2756 | + | let kw = value(fZ.payments[0]) | |
2757 | + | if ((kw.assetId != ce)) | |
2745 | 2758 | then throw("Allowed USDT payment only!") | |
2746 | - | else if (( | |
2747 | - | then throw(("Payment should be " + toString( | |
2748 | - | else if (contains( | |
2749 | - | then throw(("Name should not contain '__': " + | |
2750 | - | else if ((size( | |
2751 | - | then throw(("Name too long, maxLength=" + toString( | |
2759 | + | else if ((kw.amount != ds)) | |
2760 | + | then throw(("Payment should be " + toString(ds))) | |
2761 | + | else if (contains(kd, "__")) | |
2762 | + | then throw(("Name should not contain '__': " + kd)) | |
2763 | + | else if ((size(kd) > dt)) | |
2764 | + | then throw(("Name too long, maxLength=" + toString(dt))) | |
2752 | 2765 | else { | |
2753 | - | let b = toString( | |
2754 | - | let | |
2755 | - | let | |
2756 | - | if (("ACCOUNT" == | |
2766 | + | let b = toString(fZ.originCaller) | |
2767 | + | let lw = { | |
2768 | + | let cf = bo | |
2769 | + | if (("ACCOUNT" == cf)) | |
2757 | 2770 | then { | |
2758 | - | let | |
2759 | - | let | |
2760 | - | if (isDefined( | |
2761 | - | then throw(("Name already registered: " + | |
2771 | + | let lx = dM(kd) | |
2772 | + | let ly = getString(lx) | |
2773 | + | if (isDefined(ly)) | |
2774 | + | then throw(("Name already registered: " + kd)) | |
2762 | 2775 | else { | |
2763 | - | let | |
2764 | - | let | |
2765 | - | let | |
2766 | - | then [DeleteEntry( | |
2776 | + | let lz = bw(b) | |
2777 | + | let lA = getString(lz) | |
2778 | + | let lB = if (isDefined(lA)) | |
2779 | + | then [DeleteEntry(dM(value(lA)))] | |
2767 | 2780 | else nil | |
2768 | - | ((( | |
2781 | + | (((lB :+ StringEntry(lz, kd)) :+ StringEntry(lx, b)) ++ jD(b, W)._1) | |
2769 | 2782 | } | |
2770 | 2783 | } | |
2771 | - | else if (("LAND" == | |
2784 | + | else if (("LAND" == cf)) | |
2772 | 2785 | then { | |
2773 | - | let | |
2774 | - | let | |
2775 | - | if (!(isDefined(getInteger( | |
2776 | - | then throw(( | |
2786 | + | let iS = value(assetInfo(fromBase58String(bk))) | |
2787 | + | let iT = bm(bk) | |
2788 | + | if (!(isDefined(getInteger(iT)))) | |
2789 | + | then throw((iS.name + " is not staked")) | |
2777 | 2790 | else { | |
2778 | - | let | |
2779 | - | if (( | |
2780 | - | then throw(( | |
2791 | + | let iV = valueOrErrorMessage(getString(bj(bk)), (("NFT " + iS.name) + " is orphaned")) | |
2792 | + | if ((iV != b)) | |
2793 | + | then throw((aA + " is not yours")) | |
2781 | 2794 | else { | |
2782 | - | let | |
2783 | - | let | |
2784 | - | if (isDefined( | |
2785 | - | then throw(("Name already registered: " + | |
2795 | + | let lx = dF(kd) | |
2796 | + | let ly = getString(lx) | |
2797 | + | if (isDefined(ly)) | |
2798 | + | then throw(("Name already registered: " + kd)) | |
2786 | 2799 | else { | |
2787 | - | let | |
2788 | - | let | |
2789 | - | let | |
2790 | - | then [DeleteEntry( | |
2800 | + | let lC = bl(bk) | |
2801 | + | let lA = getString(lC) | |
2802 | + | let lB = if (isDefined(lA)) | |
2803 | + | then [DeleteEntry(dF(value(lA)))] | |
2791 | 2804 | else nil | |
2792 | - | ((( | |
2805 | + | (((lB :+ StringEntry(lC, kd)) :+ StringEntry(lx, bk)) ++ jD(b, W)._1) | |
2793 | 2806 | } | |
2794 | 2807 | } | |
2795 | 2808 | } | |
2796 | 2809 | } | |
2797 | - | else if (("DUCK" == | |
2810 | + | else if (("DUCK" == cf)) | |
2798 | 2811 | then { | |
2799 | - | let | |
2800 | - | let | |
2801 | - | if (if (!(isDefined(getInteger( | |
2812 | + | let iS = value(assetInfo(fromBase58String(bk))) | |
2813 | + | let iT = bm(bk) | |
2814 | + | if (if (!(isDefined(getInteger(iT)))) | |
2802 | 2815 | then true | |
2803 | - | else !(isDefined(getString( | |
2804 | - | then throw(( | |
2816 | + | else !(isDefined(getString(bC(b))))) | |
2817 | + | then throw((iS.name + " is not staked")) | |
2805 | 2818 | else { | |
2806 | - | let | |
2807 | - | if (( | |
2808 | - | then throw(( | |
2819 | + | let iV = valueOrErrorMessage(getString(bB(bk)), (("NFT " + iS.name) + " is orphaned")) | |
2820 | + | if ((iV != b)) | |
2821 | + | then throw((aB + " is not yours")) | |
2809 | 2822 | else { | |
2810 | - | let | |
2811 | - | let | |
2812 | - | if (isDefined( | |
2813 | - | then throw(("Name already registered: " + | |
2823 | + | let lx = dL(kd) | |
2824 | + | let ly = getString(lx) | |
2825 | + | if (isDefined(ly)) | |
2826 | + | then throw(("Name already registered: " + kd)) | |
2814 | 2827 | else { | |
2815 | - | let | |
2816 | - | let | |
2817 | - | let | |
2818 | - | then [DeleteEntry( | |
2828 | + | let lC = bv(bk) | |
2829 | + | let lA = getString(lC) | |
2830 | + | let lB = if (isDefined(lA)) | |
2831 | + | then [DeleteEntry(dL(value(lA)))] | |
2819 | 2832 | else nil | |
2820 | - | ((( | |
2833 | + | (((lB :+ StringEntry(lC, kd)) :+ StringEntry(lx, bk)) ++ jx(bk, W)._1) | |
2821 | 2834 | } | |
2822 | 2835 | } | |
2823 | 2836 | } | |
2824 | 2837 | } | |
2825 | 2838 | else throw("Unknown entity type") | |
2826 | 2839 | } | |
2827 | - | $Tuple2((( | |
2840 | + | $Tuple2(((lw :+ ScriptTransfer(cI, kw.amount, ce)) :+ kv), 0) | |
2828 | 2841 | } | |
2829 | 2842 | } | |
2830 | 2843 | } | |
2831 | 2844 | ||
2832 | 2845 | ||
2833 | 2846 | ||
2834 | - | @Callable( | |
2835 | - | func setReferrals ( | |
2847 | + | @Callable(fZ) | |
2848 | + | func setReferrals (lD,lE) = if ((fZ.callerPublicKey != dp)) | |
2836 | 2849 | then throw("Permission denied") | |
2837 | 2850 | else { | |
2838 | - | let | |
2839 | - | if ((size( | |
2851 | + | let kv = ks(fZ) | |
2852 | + | if ((size(fZ.payments) != 0)) | |
2840 | 2853 | then throw("No payments required") | |
2841 | - | else if (!(isDefined(addressFromString( | |
2842 | - | then throw(("Invalid address: " + | |
2843 | - | else if (!(isDefined(addressFromString( | |
2844 | - | then throw(("Invalid address: " + | |
2854 | + | else if (!(isDefined(addressFromString(lD)))) | |
2855 | + | then throw(("Invalid address: " + lD)) | |
2856 | + | else if (!(isDefined(addressFromString(lE)))) | |
2857 | + | then throw(("Invalid address: " + lE)) | |
2845 | 2858 | else { | |
2846 | - | let | |
2847 | - | let | |
2848 | - | let | |
2849 | - | then split_4C(value( | |
2859 | + | let lF = dN() | |
2860 | + | let lG = getString(lF) | |
2861 | + | let lH = if (isDefined(lG)) | |
2862 | + | then split_4C(value(lG), "_") | |
2850 | 2863 | else nil | |
2851 | - | if (containsElement( | |
2852 | - | then throw(( | |
2864 | + | if (containsElement(lH, lE)) | |
2865 | + | then throw((lE + " is not newbie (already has referrals)")) | |
2853 | 2866 | else { | |
2854 | - | let | |
2855 | - | let | |
2856 | - | if (if (isDefined( | |
2857 | - | then isDefined(addressFromString(value( | |
2867 | + | let jF = bx(lE) | |
2868 | + | let jG = getString(jF) | |
2869 | + | if (if (isDefined(jG)) | |
2870 | + | then isDefined(addressFromString(value(jG))) | |
2858 | 2871 | else false) | |
2859 | - | then throw((( | |
2872 | + | then throw(((lE + " already has refBy: ") + value(jG))) | |
2860 | 2873 | else { | |
2861 | - | let | |
2862 | - | let | |
2863 | - | let | |
2864 | - | then split_4C(value( | |
2874 | + | let lI = bA(lD) | |
2875 | + | let lJ = getString(lI) | |
2876 | + | let lK = if (isDefined(lJ)) | |
2877 | + | then split_4C(value(lJ), "_") | |
2865 | 2878 | else nil | |
2866 | - | if (containsElement( | |
2867 | - | then throw(((( | |
2879 | + | if (containsElement(lK, lE)) | |
2880 | + | then throw((((lD + " already contains ") + lE) + " within referrals")) | |
2868 | 2881 | else { | |
2869 | - | let | |
2870 | - | let | |
2871 | - | then value( | |
2872 | - | else makeString_2C(( | |
2873 | - | $Tuple2([StringEntry( | |
2882 | + | let lL = makeString_2C((lK :+ lE), "_") | |
2883 | + | let lM = if (containsElement(lH, lD)) | |
2884 | + | then value(lG) | |
2885 | + | else makeString_2C((lH :+ lD), "_") | |
2886 | + | $Tuple2([StringEntry(jF, lD), StringEntry(lI, lL), StringEntry(lF, lM), kv], 0) | |
2874 | 2887 | } | |
2875 | 2888 | } | |
2876 | 2889 | } | |
2879 | 2892 | ||
2880 | 2893 | ||
2881 | 2894 | ||
2882 | - | @Callable( | |
2883 | - | func distributePoints ( | |
2884 | - | let | |
2885 | - | if ((size( | |
2895 | + | @Callable(fZ) | |
2896 | + | func distributePoints (lN,lO,lP,lQ,lR) = { | |
2897 | + | let kv = ks(fZ) | |
2898 | + | if ((size(fZ.payments) != 0)) | |
2886 | 2899 | then throw("No payments required") | |
2887 | 2900 | else { | |
2888 | - | let b = toString( | |
2889 | - | let | |
2890 | - | let | |
2891 | - | let | |
2892 | - | let | |
2893 | - | let | |
2894 | - | let | |
2895 | - | let | |
2896 | - | if (( | |
2897 | - | then throw((("There are only " + toString( | |
2901 | + | let b = toString(fZ.originCaller) | |
2902 | + | let z = valueOrErrorMessage(getString(bC(b)), "You don't have a duck staked") | |
2903 | + | let lS = H(b) | |
2904 | + | let lT = valueOrElse(getInteger(al, lS), 0) | |
2905 | + | let lU = D(z) | |
2906 | + | let lV = valueOrElse(getInteger(al, lU), 0) | |
2907 | + | let lW = (lT + lV) | |
2908 | + | let lX = ((((lN + lO) + lP) + lQ) + lR) | |
2909 | + | if ((lX > lW)) | |
2910 | + | then throw((("There are only " + toString(lW)) + " free points to distribute")) | |
2898 | 2911 | else { | |
2899 | - | let | |
2900 | - | let | |
2901 | - | let | |
2902 | - | $Tuple2([IntegerEntry( | |
2912 | + | let lY = A(z) | |
2913 | + | let ao = split(valueOrElse(getString(al, lY), "0_0_0_0_0"), "_") | |
2914 | + | let lZ = (lT - lX) | |
2915 | + | $Tuple2([IntegerEntry(lS, if ((0 > lZ)) | |
2903 | 2916 | then 0 | |
2904 | - | else | |
2905 | - | then ( | |
2906 | - | else | |
2917 | + | else lZ), IntegerEntry(lU, if ((0 > lZ)) | |
2918 | + | then (lV + lZ) | |
2919 | + | else lV), StringEntry(lY, makeString([toString((parseIntValue(ao[j]) + lN)), toString((parseIntValue(ao[k]) + lO)), toString((parseIntValue(ao[l]) + lP)), toString((parseIntValue(ao[m]) + lQ)), toString((parseIntValue(ao[n]) + lR))], "_")), kv], 0) | |
2907 | 2920 | } | |
2908 | 2921 | } | |
2909 | 2922 | } | |
2910 | 2923 | ||
2911 | 2924 | ||
2912 | 2925 | ||
2913 | - | @Callable( | |
2914 | - | func splitByGlobalWeightsREADONLY ( | |
2915 | - | ||
2916 | - | ||
2917 | - | ||
2918 | - | @Callable( | |
2919 | - | func splitByGlobalAndLocalWeightsREADONLY ( | |
2920 | - | let | |
2921 | - | $Tuple2(nil, $Tuple2( | |
2922 | - | } | |
2923 | - | ||
2924 | - | ||
2925 | - | ||
2926 | - | @Callable( | |
2927 | - | func getBackpackREADONLY ( | |
2928 | - | ||
2929 | - | ||
2930 | - | ||
2931 | - | @Callable( | |
2932 | - | func getWarehouseREADONLY ( | |
2933 | - | let | |
2934 | - | let | |
2935 | - | let | |
2936 | - | $Tuple2(nil, makeString_2C( | |
2937 | - | } | |
2938 | - | ||
2939 | - | ||
2940 | - | ||
2941 | - | @Callable( | |
2926 | + | @Callable(fZ) | |
2927 | + | func splitByGlobalWeightsREADONLY (dX) = $Tuple2(nil, ep(dX)) | |
2928 | + | ||
2929 | + | ||
2930 | + | ||
2931 | + | @Callable(fZ) | |
2932 | + | func splitByGlobalAndLocalWeightsREADONLY (ma,mb,gc) = { | |
2933 | + | let fV = gb(gc) | |
2934 | + | $Tuple2(nil, $Tuple2(ep(ma), ea(mb, fV))) | |
2935 | + | } | |
2936 | + | ||
2937 | + | ||
2938 | + | ||
2939 | + | @Callable(fZ) | |
2940 | + | func getBackpackREADONLY (z) = $Tuple2(nil, makeString(hb(bD(z)), ":")) | |
2941 | + | ||
2942 | + | ||
2943 | + | ||
2944 | + | @Callable(fZ) | |
2945 | + | func getWarehouseREADONLY (O) = { | |
2946 | + | let iS = value(assetInfo(fromBase58String(O))) | |
2947 | + | let hq = (de(split(iS.description, "_")[cN]) / cm) | |
2948 | + | let hr = valueOrElse(getInteger(bt(O)), 0) | |
2949 | + | $Tuple2(nil, makeString_2C(ho(bs(O), hq, hr), ":")) | |
2950 | + | } | |
2951 | + | ||
2952 | + | ||
2953 | + | ||
2954 | + | @Callable(fZ) | |
2942 | 2955 | func saveLastTx () = { | |
2943 | - | let | |
2944 | - | if (if (if (( | |
2945 | - | then ( | |
2956 | + | let ia = fZ.caller | |
2957 | + | if (if (if ((ia != cK)) | |
2958 | + | then (ia != cI) | |
2946 | 2959 | else false) | |
2947 | - | then ( | |
2960 | + | then (ia != cL) | |
2948 | 2961 | else false) | |
2949 | 2962 | then throw("Access denied") | |
2950 | - | else $Tuple2([ | |
2951 | - | } | |
2952 | - | ||
2953 | - | ||
2954 | - | ||
2955 | - | @Callable( | |
2956 | - | func updateDuckStats ( | |
2963 | + | else $Tuple2([ks(fZ)], 42) | |
2964 | + | } | |
2965 | + | ||
2966 | + | ||
2967 | + | ||
2968 | + | @Callable(fZ) | |
2969 | + | func updateDuckStats (z,jy) = if ((fZ.caller != cI)) | |
2957 | 2970 | then throw("Access denied") | |
2958 | - | else | |
2959 | - | ||
2960 | - | ||
2961 | - | ||
2962 | - | @Callable( | |
2963 | - | func updateAccStats (b, | |
2971 | + | else jx(z, jy) | |
2972 | + | ||
2973 | + | ||
2974 | + | ||
2975 | + | @Callable(fZ) | |
2976 | + | func updateAccStats (b,jy) = if ((fZ.caller != cI)) | |
2964 | 2977 | then throw("Access denied") | |
2965 | - | else | |
2966 | - | ||
2967 | - | ||
2968 | - | ||
2969 | - | @Callable( | |
2970 | - | func equipDuck ( | |
2971 | - | let | |
2972 | - | if ((size( | |
2978 | + | else jD(b, jy) | |
2979 | + | ||
2980 | + | ||
2981 | + | ||
2982 | + | @Callable(fZ) | |
2983 | + | func equipDuck (mc) = { | |
2984 | + | let kv = ks(fZ) | |
2985 | + | if ((size(fZ.payments) != 0)) | |
2973 | 2986 | then throw("No payments required") | |
2974 | 2987 | else { | |
2975 | - | let b = toString( | |
2976 | - | let | |
2977 | - | if ( | |
2988 | + | let b = toString(fZ.originCaller) | |
2989 | + | let z = valueOrErrorMessage(getString(bC(b)), "You don't have a duck staked") | |
2990 | + | if (jN(z)) | |
2978 | 2991 | then throw("equipDuck_checkTournament") | |
2979 | 2992 | else { | |
2980 | - | let | |
2981 | - | let | |
2982 | - | let | |
2983 | - | let | |
2984 | - | let | |
2985 | - | if ((size( | |
2993 | + | let fM = E(z) | |
2994 | + | let md = split(valueOrElse(getString(fM), ",;,_,;,_,;,_,;,_,;,_,;,"), "_") | |
2995 | + | let hc = bD(z) | |
2996 | + | let hF = hb(hc) | |
2997 | + | let iD = split(mc, "_") | |
2998 | + | if ((size(iD) != p)) | |
2986 | 2999 | then throw("Wrong equipment string") | |
2987 | 3000 | else { | |
2988 | - | let | |
2989 | - | let | |
2990 | - | let | |
3001 | + | let fO = fB(md, eM(hF[bh]), true, nil) | |
3002 | + | let fP = split(iD[o], ";")[1] | |
3003 | + | let am = if ((fP == "")) | |
2991 | 3004 | then 0 | |
2992 | 3005 | else { | |
2993 | - | let | |
2994 | - | if (( | |
3006 | + | let fQ = split(fP, ",")[0] | |
3007 | + | if ((fQ == "")) | |
2995 | 3008 | then 0 | |
2996 | 3009 | else { | |
2997 | - | let | |
2998 | - | let | |
2999 | - | let | |
3000 | - | if (if (if (if (if (( | |
3010 | + | let fb = split(fQ, ":") | |
3011 | + | let cG = fb[0] | |
3012 | + | let fR = fb[1] | |
3013 | + | if (if (if (if (if ((cG == "06")) | |
3001 | 3014 | then true | |
3002 | - | else ( | |
3015 | + | else (cG == "07")) | |
3003 | 3016 | then true | |
3004 | - | else ( | |
3005 | - | then ( | |
3017 | + | else (cG == "08")) | |
3018 | + | then (fR != "") | |
3006 | 3019 | else false) | |
3007 | - | then (parseIntValue( | |
3020 | + | then (parseIntValue(fR) > 0) | |
3008 | 3021 | else false) | |
3009 | - | then parseIntValue(split( | |
3022 | + | then parseIntValue(split(aP[parseIntValue(cG)], "_")[aR]) | |
3010 | 3023 | else 0 | |
3011 | 3024 | } | |
3012 | 3025 | } | |
3013 | - | let | |
3014 | - | let | |
3015 | - | let | |
3016 | - | $Tuple2([StringEntry( | |
3026 | + | let fw = ak(this, z, am, true) | |
3027 | + | let fS = fB(iD, fO, false, fw) | |
3028 | + | let me = eR(fS) | |
3029 | + | $Tuple2([StringEntry(fM, mc), StringEntry(hc, makeString_2C([hF[be], hF[bf], hF[bg], me], ":")), StringEntry(K(z), makeString([toString(fw[7]), toString(fw[8]), toString(fw[9]), toString(fw[10]), toString(fw[11])], "_")), kv], 0) | |
3017 | 3030 | } | |
3018 | 3031 | } | |
3019 | 3032 | } | |
3021 | 3034 | ||
3022 | 3035 | ||
3023 | 3036 | ||
3024 | - | @Callable( | |
3025 | - | func fortificateLand ( | |
3026 | - | let | |
3027 | - | if ((size( | |
3037 | + | @Callable(fZ) | |
3038 | + | func fortificateLand (O,mf) = { | |
3039 | + | let kv = ks(fZ) | |
3040 | + | if ((size(fZ.payments) != 0)) | |
3028 | 3041 | then throw("No payments required") | |
3029 | 3042 | else { | |
3030 | - | let b = toString( | |
3031 | - | let | |
3032 | - | let | |
3033 | - | let | |
3034 | - | let | |
3035 | - | let | |
3036 | - | let | |
3037 | - | let | |
3038 | - | let | |
3039 | - | let | |
3040 | - | let | |
3041 | - | let | |
3042 | - | let | |
3043 | - | let | |
3044 | - | let | |
3045 | - | let | |
3046 | - | let | |
3047 | - | let | |
3048 | - | let | |
3049 | - | let | |
3050 | - | let | |
3051 | - | let | |
3052 | - | let | |
3053 | - | let | |
3054 | - | $Tuple2([StringEntry( | |
3055 | - | } | |
3056 | - | } | |
3057 | - | ||
3058 | - | ||
3059 | - | ||
3060 | - | @Callable( | |
3061 | - | func initDuckTourAttempt ( | |
3043 | + | let b = toString(fZ.originCaller) | |
3044 | + | let z = valueOrElse(getString(bC(b)), "") | |
3045 | + | let eW = ak(this, z, 0, false) | |
3046 | + | let mg = bu(O) | |
3047 | + | let mh = split(valueOrElse(getString(mg), ":0_15:0_18:0"), "_") | |
3048 | + | let iS = value(assetInfo(fromBase58String(O))) | |
3049 | + | let hq = (de(split(iS.description, "_")[cN]) / cm) | |
3050 | + | let hr = valueOrElse(getInteger(bt(O)), 0) | |
3051 | + | let hp = bs(O) | |
3052 | + | let hu = ho(hp, hq, hr) | |
3053 | + | let mi = split(hu[aZ], "_") | |
3054 | + | let mj = parseIntValue(mi[bb]) | |
3055 | + | let mk = parseIntValue(mi[bc]) | |
3056 | + | let ml = split(mf, "_") | |
3057 | + | let mm = fI(mh, eM(hu[aY]), mj, mk, true, nil) | |
3058 | + | let fO = mm._1 | |
3059 | + | let mn = mm._2 | |
3060 | + | let mo = mm._3 | |
3061 | + | let mp = fI(ml, fO, mn, mo, false, eW) | |
3062 | + | let fS = mp._1 | |
3063 | + | let mq = mp._2 | |
3064 | + | let mr = mp._3 | |
3065 | + | let me = eR(fS) | |
3066 | + | let jw = makeString([mi[ba], toString(mq), toString(mr), mi[bd]], "_") | |
3067 | + | $Tuple2([StringEntry(mg, mf), StringEntry(hp, makeString_2C([hu[aV], hu[aW], hu[aX], me, jw], ":")), kv], 0) | |
3068 | + | } | |
3069 | + | } | |
3070 | + | ||
3071 | + | ||
3072 | + | ||
3073 | + | @Callable(fZ) | |
3074 | + | func initDuckTourAttempt (z) = if ((fZ.caller != cL)) | |
3062 | 3075 | then throw("Access denied") | |
3063 | 3076 | else { | |
3064 | - | let | |
3065 | - | let | |
3066 | - | let | |
3067 | - | let | |
3068 | - | let | |
3069 | - | let | |
3070 | - | let | |
3071 | - | let | |
3072 | - | $Tuple2([ | |
3077 | + | let kv = ks(fZ) | |
3078 | + | let is = y(z) | |
3079 | + | let it = ae(valueOrElse(getInteger(C(z)), 0)) | |
3080 | + | let kJ = valueOrElse(getInteger(is), it) | |
3081 | + | let ms = bE(z) | |
3082 | + | let iP = valueOrElse(getString(ms), aI) | |
3083 | + | let jO = valueOrElse(getInteger(cL, bJ), 0) | |
3084 | + | let mt = (toString(jO) + "_T_0") | |
3085 | + | $Tuple2([kv, IntegerEntry(I(z), kJ), IntegerEntry(is, it), StringEntry(J(z), iP), StringEntry(ms, mt)], mt) | |
3073 | 3086 | } | |
3074 | 3087 | ||
3075 | 3088 | ||
3076 | 3089 | ||
3077 | - | @Callable( | |
3090 | + | @Callable(fZ) | |
3078 | 3091 | func breakAttempt () = { | |
3079 | - | let | |
3080 | - | let | |
3081 | - | let | |
3082 | - | let | |
3083 | - | if ((split( | |
3092 | + | let kv = ks(fZ) | |
3093 | + | let z = valueOrErrorMessage(getString(bC(toString(fZ.caller))), "You don't have a duck staked") | |
3094 | + | let ms = bE(z) | |
3095 | + | let iP = valueOrElse(getString(ms), aI) | |
3096 | + | if ((split(iP, "_")[bX] != "T")) | |
3084 | 3097 | then throw("Your duck is not in the tournament") | |
3085 | 3098 | else { | |
3086 | - | let | |
3087 | - | let | |
3088 | - | $Tuple2([ | |
3089 | - | } | |
3090 | - | } | |
3091 | - | ||
3092 | - | ||
3093 | - | ||
3094 | - | @Callable( | |
3095 | - | func exitTournamentInternal ( | |
3099 | + | let mu = getIntegerValue(I(z)) | |
3100 | + | let mv = getStringValue(J(z)) | |
3101 | + | $Tuple2([kv, IntegerEntry(y(z), mu), StringEntry(ms, mv)], iP) | |
3102 | + | } | |
3103 | + | } | |
3104 | + | ||
3105 | + | ||
3106 | + | ||
3107 | + | @Callable(fZ) | |
3108 | + | func exitTournamentInternal (z) = if ((fZ.caller != this)) | |
3096 | 3109 | then throw("Access denied") | |
3097 | 3110 | else { | |
3098 | - | let | |
3099 | - | let | |
3100 | - | $Tuple2([IntegerEntry( | |
3111 | + | let mu = getIntegerValue(I(z)) | |
3112 | + | let mv = getStringValue(J(z)) | |
3113 | + | $Tuple2([IntegerEntry(y(z), mu), StringEntry(bE(z), mv)], 0) | |
3101 | 3114 | } | |
3102 | 3115 | ||
3103 | 3116 | ||
3104 | 3117 | ||
3105 | - | @Callable( | |
3106 | - | func prepareRobbery ( | |
3107 | - | let | |
3108 | - | if (!(sigVerify_8Kb( | |
3118 | + | @Callable(fZ) | |
3119 | + | func prepareRobbery (ih,ii) = { | |
3120 | + | let kv = ks(fZ) | |
3121 | + | if (!(sigVerify_8Kb(ih, ii, dp))) | |
3109 | 3122 | then throw("signature does not match") | |
3110 | - | else if ((size( | |
3123 | + | else if ((size(fZ.payments) != 1)) | |
3111 | 3124 | then throw("exactly 1 payment must be attached") | |
3112 | 3125 | else { | |
3113 | - | let | |
3114 | - | let | |
3115 | - | if (if (!(isDefined( | |
3126 | + | let kw = fZ.payments[0] | |
3127 | + | let mw = kw.amount | |
3128 | + | if (if (!(isDefined(kw.assetId))) | |
3116 | 3129 | then true | |
3117 | - | else (value( | |
3130 | + | else (value(kw.assetId) != cR)) | |
3118 | 3131 | then throw("WLGOLD payments only!") | |
3119 | 3132 | else { | |
3120 | - | let | |
3121 | - | if ((size( | |
3133 | + | let eE = split(toUtf8String(ih), "|") | |
3134 | + | if ((size(eE) != 2)) | |
3122 | 3135 | then throw("Wrong message format") | |
3123 | 3136 | else { | |
3124 | - | let x = ex[0] | |
3125 | - | let mq = ao(this, x) | |
3126 | - | let as = mq._1 | |
3127 | - | let aq = mq._2 | |
3128 | - | if ((as > mp)) | |
3129 | - | then throw(((("Payment " + toString(mp)) + " < required ") + toString(as))) | |
3137 | + | let z = eE[0] | |
3138 | + | let aw = as(this, z)._1 | |
3139 | + | if ((aw > mw)) | |
3140 | + | then throw(((("Payment " + toString(mw)) + " < required ") + toString(aw))) | |
3130 | 3141 | else { | |
3131 | - | let mr = split(ex[1], "_") | |
3132 | - | let ar = lastBlock.timestamp | |
3133 | - | func ms (dZ,M) = { | |
3134 | - | let mt = valueOrElse(getInteger(L(M)), 0) | |
3135 | - | let mu = valueOrElse(getInteger(N(M)), 0) | |
3136 | - | if ((mt > size(t))) | |
3137 | - | then throw("Invalid state") | |
3138 | - | else if ((ar > mu)) | |
3139 | - | then { | |
3140 | - | let mv = valueOrElse(getInteger(bf(M)), 0) | |
3141 | - | if ((0 >= mv)) | |
3142 | - | then dZ | |
3143 | - | else { | |
3144 | - | let fz = value(assetInfo(fromBase58String(M))) | |
3145 | - | let iP = split(fz.description, "_") | |
3146 | - | let iA = cX(iP[cG]) | |
3147 | - | let mw = iz(M, iA) | |
3148 | - | let fY = (ar - mv) | |
3149 | - | let iS = fraction(fY, (mw * iA), az) | |
3150 | - | if ((u > iS)) | |
3151 | - | then dZ | |
3152 | - | else (dZ :+ M) | |
3142 | + | let mx = split(eE[1], "_") | |
3143 | + | let av = lastBlock.timestamp | |
3144 | + | let ax = valueOrElse(getInteger(Q(z)), 0) | |
3145 | + | let ay = valueOrElse(getString(R(z)), "") | |
3146 | + | let az = valueOrElse(getInteger(P(ay)), 0) | |
3147 | + | if (if ((ax != w)) | |
3148 | + | then (az > av) | |
3149 | + | else false) | |
3150 | + | then throw(("You already started robbing, wait till " + toString(az))) | |
3151 | + | else { | |
3152 | + | func my (eg,O) = { | |
3153 | + | let mz = valueOrElse(getInteger(N(O)), 0) | |
3154 | + | let mA = valueOrElse(getInteger(P(O)), 0) | |
3155 | + | if ((mz > size(t))) | |
3156 | + | then throw("Invalid state") | |
3157 | + | else if ((av > mA)) | |
3158 | + | then { | |
3159 | + | let mB = valueOrElse(getInteger(bm(O)), 0) | |
3160 | + | if ((0 >= mB)) | |
3161 | + | then eg | |
3162 | + | else { | |
3163 | + | let fG = value(assetInfo(fromBase58String(O))) | |
3164 | + | let iW = split(fG.description, "_") | |
3165 | + | let iH = de(iW[cN]) | |
3166 | + | let mC = iG(O, iH) | |
3167 | + | let gf = (av - mB) | |
3168 | + | let iZ = fraction(gf, (mC * iH), aG) | |
3169 | + | if ((u > iZ)) | |
3170 | + | then eg | |
3171 | + | else (eg :+ O) | |
3172 | + | } | |
3153 | 3173 | } | |
3174 | + | else eg | |
3175 | + | } | |
3176 | + | ||
3177 | + | let mD = { | |
3178 | + | let ei = mx | |
3179 | + | let ej = size(ei) | |
3180 | + | let ek = nil | |
3181 | + | func el (em,en) = if ((en >= ej)) | |
3182 | + | then em | |
3183 | + | else my(em, ei[en]) | |
3184 | + | ||
3185 | + | func eo (em,en) = if ((en >= ej)) | |
3186 | + | then em | |
3187 | + | else throw("List size exceeds 10") | |
3188 | + | ||
3189 | + | eo(el(el(el(el(el(el(el(el(el(el(ek, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10) | |
3190 | + | } | |
3191 | + | if ((size(mD) == 0)) | |
3192 | + | then throw("No candidates for robbery") | |
3193 | + | else { | |
3194 | + | let mE = dh(size(mD), height, (ii + fZ.transactionId)) | |
3195 | + | let O = mD[mE] | |
3196 | + | $Tuple2([IntegerEntry(N(O), v), IntegerEntry(P(O), (av + t[v])), IntegerEntry(Q(z), x), StringEntry(R(z), O), kv], O) | |
3154 | 3197 | } | |
3155 | - | else dZ | |
3156 | - | } | |
3157 | - | ||
3158 | - | let mx = { | |
3159 | - | let eb = mr | |
3160 | - | let ec = size(eb) | |
3161 | - | let ed = nil | |
3162 | - | func ee (ef,eg) = if ((eg >= ec)) | |
3163 | - | then ef | |
3164 | - | else ms(ef, eb[eg]) | |
3165 | - | ||
3166 | - | func eh (ef,eg) = if ((eg >= ec)) | |
3167 | - | then ef | |
3168 | - | else throw("List size exceeds 10") | |
3169 | - | ||
3170 | - | eh(ee(ee(ee(ee(ee(ee(ee(ee(ee(ee(ed, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10) | |
3171 | - | } | |
3172 | - | if ((size(mx) == 0)) | |
3173 | - | then throw("No candidates for robbery") | |
3174 | - | else { | |
3175 | - | let my = da(size(mx), height, (ib + fS.transactionId)) | |
3176 | - | let M = mx[my] | |
3177 | - | $Tuple2([IntegerEntry(L(M), v), IntegerEntry(N(M), (ar + t[v])), ko], M) | |
3178 | 3198 | } | |
3179 | 3199 | } | |
3180 | 3200 | } |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 6 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | func a (b) = ("lastArbTimeUser_" + b) | |
5 | 5 | ||
6 | 6 | ||
7 | 7 | let c = 100000000 | |
8 | 8 | ||
9 | 9 | let d = 3200 | |
10 | 10 | ||
11 | 11 | let e = 4000 | |
12 | 12 | ||
13 | 13 | let f = 3 | |
14 | 14 | ||
15 | 15 | let g = 100000000 | |
16 | 16 | ||
17 | 17 | let h = 400 | |
18 | 18 | ||
19 | 19 | let i = ["Strength", "Accuracy", "Intellect", "Endurance", "Dexterity", "Level", "Health"] | |
20 | 20 | ||
21 | 21 | let j = 0 | |
22 | 22 | ||
23 | 23 | let k = 1 | |
24 | 24 | ||
25 | 25 | let l = 2 | |
26 | 26 | ||
27 | 27 | let m = 3 | |
28 | 28 | ||
29 | 29 | let n = 4 | |
30 | 30 | ||
31 | 31 | let o = 0 | |
32 | 32 | ||
33 | 33 | let p = 6 | |
34 | 34 | ||
35 | 35 | let q = 2 | |
36 | 36 | ||
37 | 37 | let r = 2 | |
38 | 38 | ||
39 | 39 | let s = 30 | |
40 | 40 | ||
41 | 41 | let t = [0, 600000, 900000, 43200000, 21600000] | |
42 | 42 | ||
43 | 43 | let u = 20000000 | |
44 | 44 | ||
45 | 45 | let v = 1 | |
46 | 46 | ||
47 | - | func w (x) = ("duckHealth_" + x) | |
48 | - | ||
49 | - | ||
50 | - | func y (x) = ("duckChars_" + x) | |
51 | - | ||
52 | - | ||
53 | - | func z (x) = ("duckXP_" + x) | |
54 | - | ||
55 | - | ||
56 | - | func A (x) = ("duckLevel_" + x) | |
57 | - | ||
58 | - | ||
59 | - | func B (x) = ("duckFreePoints_" + x) | |
60 | - | ||
61 | - | ||
62 | - | func C (x) = ("duckEquipment_" + x) | |
63 | - | ||
64 | - | ||
65 | - | func D (b) = ("userXP_" + b) | |
66 | - | ||
67 | - | ||
68 | - | func E (b) = ("userLevel_" + b) | |
69 | - | ||
70 | - | ||
71 | - | func F (b) = ("userFreePoints_" + b) | |
72 | - | ||
73 | - | ||
74 | - | func G (x) = ("savedHealth_" + x) | |
75 | - | ||
76 | - | ||
77 | - | func H (x) = ("savedLocation_" + x) | |
78 | - | ||
79 | - | ||
80 | - | func I (x) = ("duckBuffs_" + x) | |
81 | - | ||
82 | - | ||
83 | - | func J (x) = ("lastRobberyTime_" + x) | |
84 | - | ||
85 | - | ||
86 | - | func K (x) = ("lastRobberyCost_" + x) | |
87 | - | ||
88 | - | ||
89 | - | func L (M) = ("landRobberyState_" + M) | |
90 | - | ||
91 | - | ||
92 | - | func N (M) = ("landCooldownETA_" + M) | |
93 | - | ||
94 | - | ||
95 | - | let O = 10000 | |
96 | - | ||
97 | - | let P = 10000 | |
98 | - | ||
99 | - | let Q = 2000 | |
100 | - | ||
101 | - | let R = 100000 | |
102 | - | ||
103 | - | let S = 1000000 | |
104 | - | ||
105 | - | let T = 5000000 | |
106 | - | ||
107 | - | let U = 10000 | |
108 | - | ||
109 | - | let V = 1000000 | |
47 | + | let w = 0 | |
48 | + | ||
49 | + | let x = 1 | |
50 | + | ||
51 | + | func y (z) = ("duckHealth_" + z) | |
52 | + | ||
53 | + | ||
54 | + | func A (z) = ("duckChars_" + z) | |
55 | + | ||
56 | + | ||
57 | + | func B (z) = ("duckXP_" + z) | |
58 | + | ||
59 | + | ||
60 | + | func C (z) = ("duckLevel_" + z) | |
61 | + | ||
62 | + | ||
63 | + | func D (z) = ("duckFreePoints_" + z) | |
64 | + | ||
65 | + | ||
66 | + | func E (z) = ("duckEquipment_" + z) | |
67 | + | ||
68 | + | ||
69 | + | func F (b) = ("userXP_" + b) | |
70 | + | ||
71 | + | ||
72 | + | func G (b) = ("userLevel_" + b) | |
73 | + | ||
74 | + | ||
75 | + | func H (b) = ("userFreePoints_" + b) | |
76 | + | ||
77 | + | ||
78 | + | func I (z) = ("savedHealth_" + z) | |
79 | + | ||
80 | + | ||
81 | + | func J (z) = ("savedLocation_" + z) | |
82 | + | ||
83 | + | ||
84 | + | func K (z) = ("duckBuffs_" + z) | |
85 | + | ||
86 | + | ||
87 | + | func L (z) = ("lastRobberyTime_" + z) | |
88 | + | ||
89 | + | ||
90 | + | func M (z) = ("lastRobberyCost_" + z) | |
91 | + | ||
92 | + | ||
93 | + | func N (O) = ("landRobberyState_" + O) | |
94 | + | ||
95 | + | ||
96 | + | func P (O) = ("landCooldownETA_" + O) | |
97 | + | ||
98 | + | ||
99 | + | func Q (z) = ("duckRobberyState_" + z) | |
100 | + | ||
101 | + | ||
102 | + | func R (z) = ("lockedLandByDuck_" + z) | |
103 | + | ||
104 | + | ||
105 | + | let S = 10000 | |
106 | + | ||
107 | + | let T = 10000 | |
108 | + | ||
109 | + | let U = 2000 | |
110 | + | ||
111 | + | let V = 100000 | |
110 | 112 | ||
111 | 113 | let W = 1000000 | |
112 | 114 | ||
113 | - | let X = 10000 | |
114 | - | ||
115 | - | func Y (Z) = fraction(d, pow(Z, 4, e, 4, 4, DOWN), c) | |
116 | - | ||
117 | - | ||
118 | - | func aa (ab) = (100 + ab) | |
119 | - | ||
120 | - | ||
121 | - | func ac (ad,ae) = { | |
122 | - | let af = Y(ae) | |
123 | - | [af, (f * (af - ad))] | |
124 | - | } | |
125 | - | ||
126 | - | ||
127 | - | func ag (ah,x,ai,aj) = { | |
128 | - | let ak = split(valueOrElse(getString(ah, y(x)), "0_0_0_0_0"), "_") | |
129 | - | let al = valueOrElse(getInteger(ah, A(x)), 0) | |
130 | - | let am = valueOrElse(getInteger(ah, w(x)), aa(al)) | |
131 | - | let an = split(valueOrElse(getString(ah, I(x)), "0_0_0_0_0"), "_") | |
132 | - | ([parseIntValue(ak[j]), parseIntValue(ak[k]), parseIntValue(ak[l]), parseIntValue(ak[m]), parseIntValue(ak[n]), al, am] ++ (if (aj) | |
133 | - | then [ai, ai, ai, ai, ai] | |
134 | - | else [parseIntValue(an[j]), parseIntValue(an[k]), parseIntValue(an[l]), parseIntValue(an[m]), parseIntValue(an[n])])) | |
135 | - | } | |
136 | - | ||
137 | - | ||
138 | - | func ao (ah,x) = { | |
139 | - | let ap = valueOrElse(getInteger(ah, K(x)), 0) | |
140 | - | let aq = valueOrElse(getInteger(ah, J(x)), 0) | |
141 | - | let ar = lastBlock.timestamp | |
142 | - | let as = max([g, (ap - (h * (ar - aq)))]) | |
143 | - | $Tuple2(as, aq) | |
144 | - | } | |
145 | - | ||
146 | - | ||
147 | - | let at = "LAND" | |
148 | - | ||
149 | - | let au = "DUCK" | |
150 | - | ||
151 | - | let av = "PRESALE" | |
152 | - | ||
153 | - | let aw = 6 | |
154 | - | ||
155 | - | let ax = 25 | |
156 | - | ||
157 | - | let ay = 3456000 | |
158 | - | ||
159 | - | let az = 86400000 | |
160 | - | ||
161 | - | let aA = 10000000000 | |
162 | - | ||
163 | - | let aB = "Africa_F_Africa" | |
164 | - | ||
165 | - | let aC = 39637 | |
166 | - | ||
167 | - | let aD = 10 | |
168 | - | ||
169 | - | let aE = ["First Aid Kit L1", "First Aid Kit L2", "First Aid Kit L3", "Backpack L1", "Backpack L2", "Backpack L3", "Food Ration L1", "Food Ration L2", "Food Ration L3", "Jet Pack L1", "Jet Pack L2", "Jet Pack L3", "Shield L1", "Shield L2", "Shield L3", "Mine L1", "Mine L2", "Mine L3", "Trap L1", "Trap L2", "Trap L3"] | |
170 | - | ||
171 | - | let aF = ["Americas", "Europe", "Asia", "Africa", "Oceania"] | |
172 | - | ||
173 | - | let aG = 10000000 | |
174 | - | ||
175 | - | let aH = [15, 16, 17, 18, 19, 20] | |
176 | - | ||
177 | - | let aI = ["8_8_8_17_17_42_12_0_30_0,0,0,0,0,0,0_", "8_8_8_17_17_42_24_0_60_0,0,5,2,0,0,0_", "8_8_8_17_17_42_36_0_120_0,0,10,4,0,0,0_", "8_19_19_8_27_19_26_1_20_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_52_1_40_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_78_1_80_0,0,0,0,0,0,0_001", "8_8_8_8_8_60_13_2_2_0,0,0,0,0,0,0_011", "8_8_8_8_8_60_26_2_4_0,0,0,0,0,0,0_011", "8_8_8_8_8_60_39_2_8_0,0,0,0,0,0,0_011", "30_30_3_17_17_3_30_3_30_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_60_3_50_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_90_3_70_0,0,0,0,0,0,0_111", "18_18_10_18_18_18_11_4_30_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_22_4_50_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_33_4_70_0,0,0,0,0,0,0_201", "4_13_22_4_35_22_23_0_50,1,0_0,0,0,0,0,0,0_", "4_13_22_4_35_22_46_0_50,1,1_0,2,5,0,0,0,0_", "4_13_22_4_35_22_69_0_50,2,1_0,5,10,0,0,0,0_", "5_25_40_5_10_15_20_1_30,1,1_0,0,0,0,0,0,0_", "5_25_40_5_10_15_40_1_30,1,2_2,1,3,0,0,0,0_", "5_25_40_5_10_15_60_1_30,1,3_5,2,8,0,0,0,0_"] | |
178 | - | ||
179 | - | let aJ = 6 | |
180 | - | ||
181 | - | let aK = 8 | |
182 | - | ||
183 | - | let aL = 9 | |
184 | - | ||
185 | - | let aM = 10 | |
186 | - | ||
187 | - | let aN = 10 | |
188 | - | ||
189 | - | let aO = 0 | |
190 | - | ||
191 | - | let aP = 1 | |
192 | - | ||
193 | - | let aQ = 2 | |
194 | - | ||
195 | - | let aR = 3 | |
196 | - | ||
197 | - | let aS = 4 | |
198 | - | ||
199 | - | let aT = 0 | |
200 | - | ||
201 | - | let aU = 1 | |
202 | - | ||
203 | - | let aV = 2 | |
204 | - | ||
205 | - | let aW = 3 | |
206 | - | ||
207 | - | let aX = 0 | |
208 | - | ||
209 | - | let aY = 1 | |
210 | - | ||
211 | - | let aZ = 2 | |
212 | - | ||
213 | - | let ba = 3 | |
214 | - | ||
215 | - | func bb (b) = ("lastTxIdByUser_" + b) | |
216 | - | ||
217 | - | ||
218 | - | func bc (bd) = ("nftOwner_" + bd) | |
219 | - | ||
220 | - | ||
221 | - | func be (bd) = ("landCustomNameByAssetId_" + bd) | |
222 | - | ||
223 | - | ||
224 | - | func bf (bd) = ("stakedTime_" + bd) | |
225 | - | ||
226 | - | ||
227 | - | func bg (bh,bd) = makeString(["landArtStatus", bh, bd], "_") | |
228 | - | ||
229 | - | ||
230 | - | func bi (bj,bd,bk) = ((((("stakedTimeByTypeAssetIdAndOwner_" + bj) + "_") + bd) + "_") + bk) | |
231 | - | ||
232 | - | ||
233 | - | func bl (M) = ("wareHouse_" + M) | |
234 | - | ||
235 | - | ||
236 | - | func bm (bd) = ("infraLevel_" + bd) | |
237 | - | ||
238 | - | ||
239 | - | func bn (M) = ("fortifications_" + M) | |
240 | - | ||
241 | - | ||
242 | - | func bo (bd) = ("duckCustomNameByAssetId_" + bd) | |
243 | - | ||
244 | - | ||
245 | - | func bp (b) = ("accountCustomNameByAddr_" + b) | |
246 | - | ||
247 | - | ||
248 | - | func bq (b) = ("accRefBy_" + b) | |
249 | - | ||
250 | - | ||
251 | - | func br (x) = ("onboardArtActivatedOnDuck_" + x) | |
252 | - | ||
253 | - | ||
254 | - | func bs (b) = ("onboardArtActivatedDuckBy_" + b) | |
255 | - | ||
256 | - | ||
257 | - | func bt (b) = ("accReferrals_" + b) | |
258 | - | ||
259 | - | ||
260 | - | func bu (bd) = ("duckOwner_" + bd) | |
261 | - | ||
262 | - | ||
263 | - | func bv (bk) = ("stakedDuckByOwner_" + bk) | |
264 | - | ||
265 | - | ||
266 | - | func bw (x) = ("backPack_" + x) | |
267 | - | ||
268 | - | ||
269 | - | func bx (x) = ("duckLocation_" + x) | |
270 | - | ||
271 | - | ||
272 | - | func by () = "contractsBlocked" | |
273 | - | ||
274 | - | ||
275 | - | func bz (bA) = ("%s%s__userGwlReleaseTime__" + bA) | |
276 | - | ||
277 | - | ||
278 | - | func bB () = "emergencyWarehouseProducts" | |
279 | - | ||
280 | - | ||
281 | - | let bC = "%s__lastTourId" | |
282 | - | ||
283 | - | func bD (bE) = ("%s%d__tourStaticData__" + toString(bE)) | |
284 | - | ||
285 | - | ||
286 | - | func bF (bE) = ("%s%d__tourDynamicData__" + toString(bE)) | |
287 | - | ||
288 | - | ||
289 | - | let bG = 0 | |
290 | - | ||
291 | - | let bH = 1 | |
292 | - | ||
293 | - | func bI (bJ,bE) = { | |
294 | - | let bK = split(valueOrErrorMessage(getString(bJ, bD(bE)), (("Error reading tournament " + toString(bE)) + " data")), "__") | |
295 | - | let bL = split(valueOrErrorMessage(getString(bJ, bF(bE)), (("Error reading tournament " + toString(bE)) + " data")), "__") | |
296 | - | [bK, bL] | |
297 | - | } | |
298 | - | ||
299 | - | ||
300 | - | let bM = 6 | |
301 | - | ||
302 | - | let bN = 1 | |
303 | - | ||
304 | - | let bO = 3 | |
305 | - | ||
306 | - | let bP = 0 | |
307 | - | ||
308 | - | let bQ = 1 | |
309 | - | ||
310 | - | let bR = 2 | |
311 | - | ||
312 | - | func bS (bT) = (parseIntValue(bT[aJ]) * aG) | |
313 | - | ||
314 | - | ||
315 | - | let bU = false | |
316 | - | ||
317 | - | let bV = false | |
318 | - | ||
319 | - | let bW = take(drop(this.bytes, 1), 1) | |
320 | - | ||
321 | - | let bX = { | |
322 | - | let bY = bW | |
323 | - | if ((base58'2W' == bY)) | |
115 | + | let X = 5000000 | |
116 | + | ||
117 | + | let Y = 10000 | |
118 | + | ||
119 | + | let Z = 1000000 | |
120 | + | ||
121 | + | let aa = 1000000 | |
122 | + | ||
123 | + | let ab = 10000 | |
124 | + | ||
125 | + | func ac (ad) = fraction(d, pow(ad, 4, e, 4, 4, DOWN), c) | |
126 | + | ||
127 | + | ||
128 | + | func ae (af) = (100 + af) | |
129 | + | ||
130 | + | ||
131 | + | func ag (ah,ai) = { | |
132 | + | let aj = ac(ai) | |
133 | + | [aj, (f * (aj - ah))] | |
134 | + | } | |
135 | + | ||
136 | + | ||
137 | + | func ak (al,z,am,an) = { | |
138 | + | let ao = split(valueOrElse(getString(al, A(z)), "0_0_0_0_0"), "_") | |
139 | + | let ap = valueOrElse(getInteger(al, C(z)), 0) | |
140 | + | let aq = valueOrElse(getInteger(al, y(z)), ae(ap)) | |
141 | + | let ar = split(valueOrElse(getString(al, K(z)), "0_0_0_0_0"), "_") | |
142 | + | ([parseIntValue(ao[j]), parseIntValue(ao[k]), parseIntValue(ao[l]), parseIntValue(ao[m]), parseIntValue(ao[n]), ap, aq] ++ (if (an) | |
143 | + | then [am, am, am, am, am] | |
144 | + | else [parseIntValue(ar[j]), parseIntValue(ar[k]), parseIntValue(ar[l]), parseIntValue(ar[m]), parseIntValue(ar[n])])) | |
145 | + | } | |
146 | + | ||
147 | + | ||
148 | + | func as (al,z) = { | |
149 | + | let at = valueOrElse(getInteger(al, M(z)), 0) | |
150 | + | let au = valueOrElse(getInteger(al, L(z)), 0) | |
151 | + | let av = lastBlock.timestamp | |
152 | + | let aw = max([g, (at - (h * (av - au)))]) | |
153 | + | let ax = valueOrElse(getInteger(al, Q(z)), 0) | |
154 | + | let ay = valueOrElse(getString(al, R(z)), "") | |
155 | + | let az = valueOrElse(getInteger(al, P(ay)), 0) | |
156 | + | $Tuple5(aw, au, ax, ay, az) | |
157 | + | } | |
158 | + | ||
159 | + | ||
160 | + | let aA = "LAND" | |
161 | + | ||
162 | + | let aB = "DUCK" | |
163 | + | ||
164 | + | let aC = "PRESALE" | |
165 | + | ||
166 | + | let aD = 6 | |
167 | + | ||
168 | + | let aE = 25 | |
169 | + | ||
170 | + | let aF = 3456000 | |
171 | + | ||
172 | + | let aG = 86400000 | |
173 | + | ||
174 | + | let aH = 10000000000 | |
175 | + | ||
176 | + | let aI = "Africa_F_Africa" | |
177 | + | ||
178 | + | let aJ = 39637 | |
179 | + | ||
180 | + | let aK = 10 | |
181 | + | ||
182 | + | let aL = ["First Aid Kit L1", "First Aid Kit L2", "First Aid Kit L3", "Backpack L1", "Backpack L2", "Backpack L3", "Food Ration L1", "Food Ration L2", "Food Ration L3", "Jet Pack L1", "Jet Pack L2", "Jet Pack L3", "Shield L1", "Shield L2", "Shield L3", "Mine L1", "Mine L2", "Mine L3", "Trap L1", "Trap L2", "Trap L3"] | |
183 | + | ||
184 | + | let aM = ["Americas", "Europe", "Asia", "Africa", "Oceania"] | |
185 | + | ||
186 | + | let aN = 10000000 | |
187 | + | ||
188 | + | let aO = [15, 16, 17, 18, 19, 20] | |
189 | + | ||
190 | + | let aP = ["8_8_8_17_17_42_12_0_30_0,0,0,0,0,0,0_", "8_8_8_17_17_42_24_0_60_0,0,5,2,0,0,0_", "8_8_8_17_17_42_36_0_120_0,0,10,4,0,0,0_", "8_19_19_8_27_19_26_1_20_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_52_1_40_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_78_1_80_0,0,0,0,0,0,0_001", "8_8_8_8_8_60_13_2_2_0,0,0,0,0,0,0_011", "8_8_8_8_8_60_26_2_4_0,0,0,0,0,0,0_011", "8_8_8_8_8_60_39_2_8_0,0,0,0,0,0,0_011", "30_30_3_17_17_3_30_3_30_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_60_3_50_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_90_3_70_0,0,0,0,0,0,0_111", "18_18_10_18_18_18_11_4_30_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_22_4_50_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_33_4_70_0,0,0,0,0,0,0_201", "4_13_22_4_35_22_23_0_50,1,0_0,0,0,0,0,0,0_", "4_13_22_4_35_22_46_0_50,1,1_0,2,5,0,0,0,0_", "4_13_22_4_35_22_69_0_50,2,1_0,5,10,0,0,0,0_", "5_25_40_5_10_15_20_1_30,1,1_0,0,0,0,0,0,0_", "5_25_40_5_10_15_40_1_30,1,2_2,1,3,0,0,0,0_", "5_25_40_5_10_15_60_1_30,1,3_5,2,8,0,0,0,0_"] | |
191 | + | ||
192 | + | let aQ = 6 | |
193 | + | ||
194 | + | let aR = 8 | |
195 | + | ||
196 | + | let aS = 9 | |
197 | + | ||
198 | + | let aT = 10 | |
199 | + | ||
200 | + | let aU = 10 | |
201 | + | ||
202 | + | let aV = 0 | |
203 | + | ||
204 | + | let aW = 1 | |
205 | + | ||
206 | + | let aX = 2 | |
207 | + | ||
208 | + | let aY = 3 | |
209 | + | ||
210 | + | let aZ = 4 | |
211 | + | ||
212 | + | let ba = 0 | |
213 | + | ||
214 | + | let bb = 1 | |
215 | + | ||
216 | + | let bc = 2 | |
217 | + | ||
218 | + | let bd = 3 | |
219 | + | ||
220 | + | let be = 0 | |
221 | + | ||
222 | + | let bf = 1 | |
223 | + | ||
224 | + | let bg = 2 | |
225 | + | ||
226 | + | let bh = 3 | |
227 | + | ||
228 | + | func bi (b) = ("lastTxIdByUser_" + b) | |
229 | + | ||
230 | + | ||
231 | + | func bj (bk) = ("nftOwner_" + bk) | |
232 | + | ||
233 | + | ||
234 | + | func bl (bk) = ("landCustomNameByAssetId_" + bk) | |
235 | + | ||
236 | + | ||
237 | + | func bm (bk) = ("stakedTime_" + bk) | |
238 | + | ||
239 | + | ||
240 | + | func bn (bo,bk) = makeString(["landArtStatus", bo, bk], "_") | |
241 | + | ||
242 | + | ||
243 | + | func bp (bq,bk,br) = ((((("stakedTimeByTypeAssetIdAndOwner_" + bq) + "_") + bk) + "_") + br) | |
244 | + | ||
245 | + | ||
246 | + | func bs (O) = ("wareHouse_" + O) | |
247 | + | ||
248 | + | ||
249 | + | func bt (bk) = ("infraLevel_" + bk) | |
250 | + | ||
251 | + | ||
252 | + | func bu (O) = ("fortifications_" + O) | |
253 | + | ||
254 | + | ||
255 | + | func bv (bk) = ("duckCustomNameByAssetId_" + bk) | |
256 | + | ||
257 | + | ||
258 | + | func bw (b) = ("accountCustomNameByAddr_" + b) | |
259 | + | ||
260 | + | ||
261 | + | func bx (b) = ("accRefBy_" + b) | |
262 | + | ||
263 | + | ||
264 | + | func by (z) = ("onboardArtActivatedOnDuck_" + z) | |
265 | + | ||
266 | + | ||
267 | + | func bz (b) = ("onboardArtActivatedDuckBy_" + b) | |
268 | + | ||
269 | + | ||
270 | + | func bA (b) = ("accReferrals_" + b) | |
271 | + | ||
272 | + | ||
273 | + | func bB (bk) = ("duckOwner_" + bk) | |
274 | + | ||
275 | + | ||
276 | + | func bC (br) = ("stakedDuckByOwner_" + br) | |
277 | + | ||
278 | + | ||
279 | + | func bD (z) = ("backPack_" + z) | |
280 | + | ||
281 | + | ||
282 | + | func bE (z) = ("duckLocation_" + z) | |
283 | + | ||
284 | + | ||
285 | + | func bF () = "contractsBlocked" | |
286 | + | ||
287 | + | ||
288 | + | func bG (bH) = ("%s%s__userGwlReleaseTime__" + bH) | |
289 | + | ||
290 | + | ||
291 | + | func bI () = "emergencyWarehouseProducts" | |
292 | + | ||
293 | + | ||
294 | + | let bJ = "%s__lastTourId" | |
295 | + | ||
296 | + | func bK (bL) = ("%s%d__tourStaticData__" + toString(bL)) | |
297 | + | ||
298 | + | ||
299 | + | func bM (bL) = ("%s%d__tourDynamicData__" + toString(bL)) | |
300 | + | ||
301 | + | ||
302 | + | let bN = 0 | |
303 | + | ||
304 | + | let bO = 1 | |
305 | + | ||
306 | + | func bP (bQ,bL) = { | |
307 | + | let bR = split(valueOrErrorMessage(getString(bQ, bK(bL)), (("Error reading tournament " + toString(bL)) + " data")), "__") | |
308 | + | let bS = split(valueOrErrorMessage(getString(bQ, bM(bL)), (("Error reading tournament " + toString(bL)) + " data")), "__") | |
309 | + | [bR, bS] | |
310 | + | } | |
311 | + | ||
312 | + | ||
313 | + | let bT = 6 | |
314 | + | ||
315 | + | let bU = 1 | |
316 | + | ||
317 | + | let bV = 3 | |
318 | + | ||
319 | + | let bW = 0 | |
320 | + | ||
321 | + | let bX = 1 | |
322 | + | ||
323 | + | let bY = 2 | |
324 | + | ||
325 | + | func bZ (ca) = (parseIntValue(ca[aQ]) * aN) | |
326 | + | ||
327 | + | ||
328 | + | let cb = false | |
329 | + | ||
330 | + | let cc = false | |
331 | + | ||
332 | + | let cd = take(drop(this.bytes, 1), 1) | |
333 | + | ||
334 | + | let ce = { | |
335 | + | let cf = cd | |
336 | + | if ((base58'2W' == cf)) | |
324 | 337 | then base58'9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi' | |
325 | - | else if ((base58'2T' == | |
338 | + | else if ((base58'2T' == cf)) | |
326 | 339 | then base58'6mWwf9mZBjVgkC54idpyaZLQfAosD914wT8fGf2iiY63' | |
327 | 340 | else throw("Unknown chain") | |
328 | 341 | } | |
329 | 342 | ||
330 | - | let | |
331 | - | let | |
332 | - | if ((base58'2W' == | |
343 | + | let cg = { | |
344 | + | let cf = cd | |
345 | + | if ((base58'2W' == cf)) | |
333 | 346 | then "3PQCuvFbvh4LkPUnrnU1z3jnbA1p9m3WNhv" | |
334 | - | else if ((base58'2T' == | |
347 | + | else if ((base58'2T' == cf)) | |
335 | 348 | then "3MumkGGztCKAXpWDqxkddofqXSUbqQkvSJy" | |
336 | 349 | else throw("Unknown chain") | |
337 | 350 | } | |
338 | 351 | ||
339 | - | let | |
340 | - | let | |
341 | - | if ((base58'2W' == | |
352 | + | let ch = { | |
353 | + | let cf = cd | |
354 | + | if ((base58'2W' == cf)) | |
342 | 355 | then 10000000000 | |
343 | - | else if ((base58'2T' == | |
356 | + | else if ((base58'2T' == cf)) | |
344 | 357 | then 100000000 | |
345 | 358 | else throw("Unknown chain") | |
346 | 359 | } | |
347 | 360 | ||
348 | - | let | |
349 | - | let | |
350 | - | if ((base58'2W' == | |
361 | + | let ci = { | |
362 | + | let cf = cd | |
363 | + | if ((base58'2W' == cf)) | |
351 | 364 | then 86400000 | |
352 | - | else if ((base58'2T' == | |
365 | + | else if ((base58'2T' == cf)) | |
353 | 366 | then 60000 | |
354 | 367 | else throw("Unknown chain") | |
355 | 368 | } | |
356 | 369 | ||
357 | - | let | |
358 | - | ||
359 | - | let | |
360 | - | ||
361 | - | let | |
362 | - | ||
363 | - | let | |
364 | - | ||
365 | - | let | |
366 | - | ||
367 | - | let | |
368 | - | ||
369 | - | let | |
370 | - | ||
371 | - | let | |
372 | - | ||
373 | - | let | |
374 | - | ||
375 | - | func | |
376 | - | ||
377 | - | ||
378 | - | let | |
379 | - | ||
380 | - | let | |
381 | - | ||
382 | - | let | |
383 | - | ||
384 | - | let | |
385 | - | ||
386 | - | let | |
387 | - | ||
388 | - | func | |
389 | - | ||
390 | - | ||
391 | - | func | |
392 | - | ||
393 | - | ||
394 | - | func | |
395 | - | ||
396 | - | ||
397 | - | func | |
398 | - | ||
399 | - | ||
400 | - | let | |
401 | - | ||
402 | - | let | |
403 | - | ||
404 | - | let | |
405 | - | ||
406 | - | let | |
407 | - | ||
408 | - | let | |
409 | - | ||
410 | - | let | |
411 | - | ||
412 | - | let | |
413 | - | ||
414 | - | let | |
415 | - | ||
416 | - | let | |
417 | - | ||
418 | - | let | |
419 | - | ||
420 | - | let | |
421 | - | ||
422 | - | let | |
423 | - | ||
424 | - | let | |
425 | - | ||
426 | - | let | |
427 | - | ||
428 | - | func | |
429 | - | ||
430 | - | ||
431 | - | func | |
432 | - | ||
433 | - | ||
434 | - | func | |
435 | - | ||
436 | - | ||
437 | - | func | |
438 | - | ||
439 | - | ||
440 | - | func | |
441 | - | ||
442 | - | ||
443 | - | func | |
444 | - | let | |
445 | - | if ($isInstanceOf( | |
370 | + | let cj = "__" | |
371 | + | ||
372 | + | let ck = 1000000 | |
373 | + | ||
374 | + | let cl = 100000000 | |
375 | + | ||
376 | + | let cm = 25 | |
377 | + | ||
378 | + | let cn = 100 | |
379 | + | ||
380 | + | let co = 225 | |
381 | + | ||
382 | + | let cp = 400 | |
383 | + | ||
384 | + | let cq = 625 | |
385 | + | ||
386 | + | let cr = [0, 1, 2, 3, 4, 5] | |
387 | + | ||
388 | + | func cs (ct,cu) = valueOrErrorMessage(getString(ct, cu), makeString(["mandatory ", toString(ct), ".", cu, " is not defined"], "")) | |
389 | + | ||
390 | + | ||
391 | + | let cv = 1 | |
392 | + | ||
393 | + | let cw = 2 | |
394 | + | ||
395 | + | let cx = 3 | |
396 | + | ||
397 | + | let cy = 4 | |
398 | + | ||
399 | + | let cz = 7 | |
400 | + | ||
401 | + | func cA () = "%s__restConfig" | |
402 | + | ||
403 | + | ||
404 | + | func cB () = "%s__restAddr" | |
405 | + | ||
406 | + | ||
407 | + | func cC (cD) = split_4C(cs(cD, cA()), cj) | |
408 | + | ||
409 | + | ||
410 | + | func cE (cF,cG) = valueOrErrorMessage(addressFromString(cF[cG]), ("Rest cfg doesn't contain address at index " + toString(cG))) | |
411 | + | ||
412 | + | ||
413 | + | let cH = addressFromStringValue(valueOrElse(getString(this, cB()), cg)) | |
414 | + | ||
415 | + | let cF = cC(cH) | |
416 | + | ||
417 | + | let al = cE(cF, cv) | |
418 | + | ||
419 | + | let cI = cE(cF, cw) | |
420 | + | ||
421 | + | let cJ = cE(cF, cx) | |
422 | + | ||
423 | + | let cK = cE(cF, cy) | |
424 | + | ||
425 | + | let cL = cE(cF, cz) | |
426 | + | ||
427 | + | let cM = 0 | |
428 | + | ||
429 | + | let cN = 1 | |
430 | + | ||
431 | + | let cO = 2 | |
432 | + | ||
433 | + | let cP = 3 | |
434 | + | ||
435 | + | let cQ = "wlg_assetId" | |
436 | + | ||
437 | + | let cR = valueOrErrorMessage(getBinary(cK, cQ), "Not initialized yet") | |
438 | + | ||
439 | + | let cS = 2 | |
440 | + | ||
441 | + | func cT (ct) = ("finishBlockForAddr_" + ct) | |
442 | + | ||
443 | + | ||
444 | + | func cU () = "resTypesProportions" | |
445 | + | ||
446 | + | ||
447 | + | func cV (cW) = ("resTypesByContinent_" + cW) | |
448 | + | ||
449 | + | ||
450 | + | func cX (br) = ("stakedLandsByOwner_" + br) | |
451 | + | ||
452 | + | ||
453 | + | func cY (br) = ("stakedPiecesByOwner_" + br) | |
454 | + | ||
455 | + | ||
456 | + | func cZ (da) = { | |
457 | + | let cf = da | |
458 | + | if ($isInstanceOf(cf, "String")) | |
446 | 459 | then { | |
447 | - | let | |
448 | - | | |
460 | + | let db = cf | |
461 | + | db | |
449 | 462 | } | |
450 | 463 | else throw("fail to cast into String") | |
451 | 464 | } | |
452 | 465 | ||
453 | 466 | ||
454 | - | func | |
455 | - | let | |
456 | - | if ($isInstanceOf( | |
467 | + | func dc (da) = { | |
468 | + | let cf = da | |
469 | + | if ($isInstanceOf(cf, "Int")) | |
457 | 470 | then { | |
458 | - | let | |
459 | - | | |
471 | + | let dd = cf | |
472 | + | dd | |
460 | 473 | } | |
461 | 474 | else throw("fail to cast into Int") | |
462 | 475 | } | |
463 | 476 | ||
464 | 477 | ||
465 | - | func | |
466 | - | let | |
467 | - | if (("S" == | |
468 | - | then | |
469 | - | else if (("M" == | |
470 | - | then | |
471 | - | else if (("L" == | |
472 | - | then | |
473 | - | else if (("XL" == | |
474 | - | then | |
475 | - | else if (("XXL" == | |
476 | - | then | |
478 | + | func de (df) = { | |
479 | + | let cf = df | |
480 | + | if (("S" == cf)) | |
481 | + | then cm | |
482 | + | else if (("M" == cf)) | |
483 | + | then cn | |
484 | + | else if (("L" == cf)) | |
485 | + | then co | |
486 | + | else if (("XL" == cf)) | |
487 | + | then cp | |
488 | + | else if (("XXL" == cf)) | |
489 | + | then cq | |
477 | 490 | else throw("Unknown land size") | |
478 | 491 | } | |
479 | 492 | ||
480 | 493 | ||
481 | - | func | |
482 | - | ||
483 | - | ||
484 | - | func | |
485 | - | let | |
486 | - | let | |
487 | - | (toInt( | |
488 | - | } | |
489 | - | ||
490 | - | ||
491 | - | let | |
492 | - | let | |
493 | - | if ((base58'2W' == | |
494 | + | func dg (db) = isDefined(parseInt(db)) | |
495 | + | ||
496 | + | ||
497 | + | func dh (di,dj,dk) = { | |
498 | + | let dl = value(blockInfoByHeight(dj)) | |
499 | + | let dm = sha256((value(dl.vrf) + dk)) | |
500 | + | (toInt(dm) % di) | |
501 | + | } | |
502 | + | ||
503 | + | ||
504 | + | let dn = { | |
505 | + | let cf = cd | |
506 | + | if ((base58'2W' == cf)) | |
494 | 507 | then addressFromStringValue("3PEktVux2RhchSN63DsDo4b4mz4QqzKSeDv") | |
495 | - | else if ((base58'2T' == | |
508 | + | else if ((base58'2T' == cf)) | |
496 | 509 | then this | |
497 | 510 | else throw("Unknown chain") | |
498 | 511 | } | |
499 | 512 | ||
500 | - | let | |
501 | - | let | |
502 | - | if ((base58'2W' == | |
513 | + | let do = { | |
514 | + | let cf = cd | |
515 | + | if ((base58'2W' == cf)) | |
503 | 516 | then addressFromStringValue("3PDVuU45H7Eh5dmtNbnRNRStGwULA7NY6Hb") | |
504 | - | else if ((base58'2T' == | |
517 | + | else if ((base58'2T' == cf)) | |
505 | 518 | then this | |
506 | 519 | else throw("Unknown chain") | |
507 | 520 | } | |
508 | 521 | ||
509 | - | let | |
510 | - | let | |
511 | - | if ((base58'2W' == | |
512 | - | then if ( | |
522 | + | let dp = { | |
523 | + | let cf = cd | |
524 | + | if ((base58'2W' == cf)) | |
525 | + | then if (cb) | |
513 | 526 | then base58'CWsMtTZC5BjjoL4Q1ayW4Wwb1ehGACQB6DrKyPgotKfm' | |
514 | 527 | else base58'6LfPuKJjLgekmncBhMg2LZyMTNVzZBccXR28ySXm9uXD' | |
515 | - | else if ((base58'2T' == | |
528 | + | else if ((base58'2T' == cf)) | |
516 | 529 | then base58'6LfPuKJjLgekmncBhMg2LZyMTNVzZBccXR28ySXm9uXD' | |
517 | 530 | else throw("Unknown chain") | |
518 | 531 | } | |
519 | 532 | ||
520 | - | let | |
521 | - | ||
522 | - | let | |
523 | - | ||
524 | - | let | |
525 | - | ||
526 | - | let | |
527 | - | ||
528 | - | let | |
529 | - | ||
530 | - | let | |
531 | - | let | |
532 | - | if ((base58'2W' == | |
533 | + | let dq = base64'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==' | |
534 | + | ||
535 | + | let dr = 300000 | |
536 | + | ||
537 | + | let ds = 5000000 | |
538 | + | ||
539 | + | let dt = 50 | |
540 | + | ||
541 | + | let du = 10000000 | |
542 | + | ||
543 | + | let dv = { | |
544 | + | let cf = cd | |
545 | + | if ((base58'2W' == cf)) | |
533 | 546 | then 252289527462 | |
534 | - | else if ((base58'2T' == | |
547 | + | else if ((base58'2T' == cf)) | |
535 | 548 | then 2522895274 | |
536 | 549 | else throw("Unknown chain") | |
537 | 550 | } | |
538 | 551 | ||
539 | - | let | |
540 | - | let | |
541 | - | if ((base58'2W' == | |
552 | + | let dw = { | |
553 | + | let cf = cd | |
554 | + | if ((base58'2W' == cf)) | |
542 | 555 | then 250000000 | |
543 | - | else if ((base58'2T' == | |
556 | + | else if ((base58'2T' == cf)) | |
544 | 557 | then 250000000 | |
545 | 558 | else throw("Unknown chain") | |
546 | 559 | } | |
547 | 560 | ||
548 | - | let | |
549 | - | ||
550 | - | let | |
551 | - | ||
552 | - | let | |
553 | - | ||
554 | - | let | |
555 | - | ||
556 | - | let | |
557 | - | ||
558 | - | let | |
559 | - | ||
560 | - | let | |
561 | - | ||
562 | - | func | |
563 | - | ||
564 | - | ||
565 | - | func | |
566 | - | ||
567 | - | ||
568 | - | func | |
569 | - | ||
570 | - | ||
571 | - | func | |
572 | - | ||
573 | - | ||
574 | - | func | |
575 | - | ||
576 | - | ||
577 | - | func | |
578 | - | ||
579 | - | ||
580 | - | func | |
581 | - | ||
582 | - | ||
583 | - | func | |
584 | - | ||
585 | - | ||
586 | - | let | |
587 | - | ||
588 | - | let | |
589 | - | ||
590 | - | let | |
591 | - | ||
592 | - | let | |
593 | - | ||
594 | - | let | |
595 | - | ||
596 | - | let | |
597 | - | ||
598 | - | let | |
599 | - | ||
600 | - | func | |
601 | - | ||
602 | - | ||
603 | - | func | |
604 | - | let | |
605 | - | then ((( | |
606 | - | else -((((-( | |
607 | - | ( | |
608 | - | } | |
609 | - | ||
610 | - | ||
611 | - | func | |
612 | - | let | |
613 | - | if ((0 >= | |
561 | + | let dx = toBigInt(5) | |
562 | + | ||
563 | + | let dy = toBigInt(20) | |
564 | + | ||
565 | + | let dz = toBigInt((20 * 20)) | |
566 | + | ||
567 | + | let dA = toBigInt(((20 * 20) * 20)) | |
568 | + | ||
569 | + | let dB = toBigInt((((20 * 20) * 20) * 20)) | |
570 | + | ||
571 | + | let dC = toBigInt(((((20 * 20) * 20) * 20) * 20)) | |
572 | + | ||
573 | + | let dD = 500 | |
574 | + | ||
575 | + | func dE () = "nextLandNum" | |
576 | + | ||
577 | + | ||
578 | + | func dF (dG) = ("landByCustomName_" + dG) | |
579 | + | ||
580 | + | ||
581 | + | func dH (dI) = ("landToAsset_" + dI) | |
582 | + | ||
583 | + | ||
584 | + | func dJ (bk,br) = ((("infraLevelByAssetIdAndOwner_" + bk) + "_") + br) | |
585 | + | ||
586 | + | ||
587 | + | func dK (dI) = ("landOwner_" + dI) | |
588 | + | ||
589 | + | ||
590 | + | func dL (dG) = ("duckByCustomName_" + dG) | |
591 | + | ||
592 | + | ||
593 | + | func dM (dG) = ("accountByCustomName_" + dG) | |
594 | + | ||
595 | + | ||
596 | + | func dN () = "oldiesList" | |
597 | + | ||
598 | + | ||
599 | + | let dO = 0 | |
600 | + | ||
601 | + | let dP = 1 | |
602 | + | ||
603 | + | let dQ = 2 | |
604 | + | ||
605 | + | let dR = 0 | |
606 | + | ||
607 | + | let dS = 5 | |
608 | + | ||
609 | + | let dT = 6 | |
610 | + | ||
611 | + | let dU = 7 | |
612 | + | ||
613 | + | func dV (dI,df) = ((aA + dI) + df) | |
614 | + | ||
615 | + | ||
616 | + | func dW (dX,dY) = { | |
617 | + | let dZ = if ((dX >= 0)) | |
618 | + | then (((dX + dY) - 1) / dY) | |
619 | + | else -((((-(dX) + dY) - 1) / dY)) | |
620 | + | (dZ * cl) | |
621 | + | } | |
622 | + | ||
623 | + | ||
624 | + | func ea (eb,ec) = { | |
625 | + | let ed = (((((ec[0] + ec[1]) + ec[2]) + ec[3]) + ec[4]) + ec[5]) | |
626 | + | if ((0 >= ed)) | |
614 | 627 | then throw("Zero weights sum") | |
615 | 628 | else { | |
616 | - | let | |
617 | - | func | |
618 | - | ||
619 | - | let | |
620 | - | let | |
621 | - | let | |
622 | - | func | |
623 | - | then | |
624 | - | else | |
625 | - | ||
626 | - | func | |
627 | - | then | |
629 | + | let ee = fraction(eb, ck, ed) | |
630 | + | func ef (eg,eh) = (eg :+ fraction(eh, ee, ck)) | |
631 | + | ||
632 | + | let ei = ec | |
633 | + | let ej = size(ei) | |
634 | + | let ek = nil | |
635 | + | func el (em,en) = if ((en >= ej)) | |
636 | + | then em | |
637 | + | else ef(em, ei[en]) | |
638 | + | ||
639 | + | func eo (em,en) = if ((en >= ej)) | |
640 | + | then em | |
628 | 641 | else throw("List size exceeds 6") | |
629 | 642 | ||
630 | - | | |
631 | - | } | |
632 | - | } | |
633 | - | ||
634 | - | ||
635 | - | func | |
636 | - | let | |
637 | - | if ((size( | |
643 | + | eo(el(el(el(el(el(el(ek, 0), 1), 2), 3), 4), 5), 6) | |
644 | + | } | |
645 | + | } | |
646 | + | ||
647 | + | ||
648 | + | func ep (eb) = { | |
649 | + | let eq = split(value(getString(cU())), "_") | |
650 | + | if ((size(eq) != aD)) | |
638 | 651 | then throw("Wrong proportions data") | |
639 | 652 | else { | |
640 | - | let | |
641 | - | | |
642 | - | } | |
643 | - | } | |
644 | - | ||
645 | - | ||
646 | - | func | |
647 | - | let | |
648 | - | func | |
649 | - | let | |
650 | - | if ((0 > | |
651 | - | then throw(((((("Not enough material idx=" + toString( | |
652 | - | else ( | |
653 | + | let er = [parseIntValue(eq[0]), parseIntValue(eq[1]), parseIntValue(eq[2]), parseIntValue(eq[3]), parseIntValue(eq[4]), parseIntValue(eq[5])] | |
654 | + | ea(eb, er) | |
655 | + | } | |
656 | + | } | |
657 | + | ||
658 | + | ||
659 | + | func es (et,eu,ev) = { | |
660 | + | let ew = ep(ev) | |
661 | + | func ex (eg,cG) = { | |
662 | + | let ey = (parseIntValue(eu[cG]) - ew[cG]) | |
663 | + | if ((0 > ey)) | |
664 | + | then throw(((((("Not enough material idx=" + toString(cG)) + ", you have ") + eu[cG]) + ", but need ") + toString(ew[cG]))) | |
665 | + | else (eg :+ toString(ey)) | |
653 | 666 | } | |
654 | 667 | ||
655 | - | if ( | |
668 | + | if (et) | |
656 | 669 | then { | |
657 | - | let | |
658 | - | let | |
659 | - | let | |
660 | - | func | |
661 | - | then | |
662 | - | else | |
663 | - | ||
664 | - | func | |
665 | - | then | |
670 | + | let ei = cr | |
671 | + | let ej = size(ei) | |
672 | + | let ek = nil | |
673 | + | func el (em,en) = if ((en >= ej)) | |
674 | + | then em | |
675 | + | else ex(em, ei[en]) | |
676 | + | ||
677 | + | func eo (em,en) = if ((en >= ej)) | |
678 | + | then em | |
666 | 679 | else throw("List size exceeds 6") | |
667 | 680 | ||
668 | - | | |
669 | - | } | |
670 | - | else | |
671 | - | } | |
672 | - | ||
673 | - | ||
674 | - | func | |
675 | - | then $Tuple2( | |
681 | + | eo(el(el(el(el(el(el(ek, 0), 1), 2), 3), 4), 5), 6) | |
682 | + | } | |
683 | + | else eu | |
684 | + | } | |
685 | + | ||
686 | + | ||
687 | + | func ez (eA,eB) = if ((eB == "")) | |
688 | + | then $Tuple2(eA, false) | |
676 | 689 | else { | |
677 | - | func | |
678 | - | let | |
679 | - | if ((size( | |
690 | + | func eC (eg,eD) = { | |
691 | + | let eE = split(eD, ",") | |
692 | + | if ((size(eE) != 2)) | |
680 | 693 | then throw("Incorrect format, should be index,amount") | |
681 | 694 | else { | |
682 | - | let | |
683 | - | if (if ((0 > | |
695 | + | let cG = parseIntValue(eE[0]) | |
696 | + | if (if ((0 > cG)) | |
684 | 697 | then true | |
685 | - | else ( | |
698 | + | else (cG >= size(aP))) | |
686 | 699 | then throw("Unknown product idx") | |
687 | 700 | else { | |
688 | - | let | |
689 | - | let | |
690 | - | if ((size( | |
691 | - | then throw((("You don't have " + | |
701 | + | let eF = parseIntValue(eE[1]) | |
702 | + | let eG = split(eg._1, (eE[0] + ":")) | |
703 | + | if ((size(eG) != 2)) | |
704 | + | then throw((("You don't have " + aL[cG]) + " equipped")) | |
692 | 705 | else { | |
693 | - | let | |
694 | - | let | |
706 | + | let eH = eG[1] | |
707 | + | let eI = if (dg(take(drop(eH, 1), 1))) | |
695 | 708 | then 2 | |
696 | 709 | else 1 | |
697 | - | let | |
698 | - | let | |
699 | - | let | |
700 | - | then ( | |
701 | - | else throw(((((("You equipped " + toString( | |
702 | - | $Tuple2((((( | |
710 | + | let eJ = parseIntValue(take(eH, eI)) | |
711 | + | let eK = drop(eH, eI) | |
712 | + | let eL = if ((eJ >= eF)) | |
713 | + | then (eJ - eF) | |
714 | + | else throw(((((("You equipped " + toString(eJ)) + " of ") + aL[cG]) + ", but tried to use ") + toString(eF))) | |
715 | + | $Tuple2(((((eG[0] + eE[0]) + ":") + toString(eL)) + eK), if (eg._2) | |
703 | 716 | then true | |
704 | - | else if (if (( | |
705 | - | then (8 >= | |
717 | + | else if (if ((cG >= 6)) | |
718 | + | then (8 >= cG) | |
706 | 719 | else false) | |
707 | - | then ( | |
720 | + | then (eL == 0) | |
708 | 721 | else false) | |
709 | 722 | } | |
710 | 723 | } | |
711 | 724 | } | |
712 | 725 | } | |
713 | 726 | ||
714 | - | let | |
715 | - | let | |
716 | - | let | |
717 | - | func | |
718 | - | then | |
719 | - | else | |
720 | - | ||
721 | - | func | |
722 | - | then | |
727 | + | let ei = split(eB, "_") | |
728 | + | let ej = size(ei) | |
729 | + | let ek = $Tuple2(eA, false) | |
730 | + | func el (em,en) = if ((en >= ej)) | |
731 | + | then em | |
732 | + | else eC(em, ei[en]) | |
733 | + | ||
734 | + | func eo (em,en) = if ((en >= ej)) | |
735 | + | then em | |
723 | 736 | else throw("List size exceeds 10") | |
724 | 737 | ||
725 | - | | |
738 | + | eo(el(el(el(el(el(el(el(el(el(el(ek, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10) | |
726 | 739 | } | |
727 | 740 | ||
728 | 741 | ||
729 | - | func | |
730 | - | let | |
742 | + | func eM (eN) = { | |
743 | + | let eO = if ((eN == "")) | |
731 | 744 | then nil | |
732 | - | else split_4C( | |
733 | - | func | |
734 | - | let | |
735 | - | let | |
736 | - | then parseIntValue( | |
745 | + | else split_4C(eN, "_") | |
746 | + | func eP (eg,ca) = { | |
747 | + | let eQ = (size(eg) / 8) | |
748 | + | let eJ = if ((size(eO) > eQ)) | |
749 | + | then parseIntValue(eO[eQ]) | |
737 | 750 | else 0 | |
738 | - | ( | |
751 | + | (eg + toBytes(eJ)) | |
739 | 752 | } | |
740 | 753 | ||
741 | - | let | |
742 | - | let | |
743 | - | let | |
744 | - | func | |
745 | - | then | |
746 | - | else | |
747 | - | ||
748 | - | func | |
749 | - | then | |
754 | + | let ei = aP | |
755 | + | let ej = size(ei) | |
756 | + | let ek = base58'' | |
757 | + | func el (em,en) = if ((en >= ej)) | |
758 | + | then em | |
759 | + | else eP(em, ei[en]) | |
760 | + | ||
761 | + | func eo (em,en) = if ((en >= ej)) | |
762 | + | then em | |
750 | 763 | else throw("List size exceeds 50") | |
751 | 764 | ||
752 | - | | |
753 | - | } | |
754 | - | ||
755 | - | ||
756 | - | func | |
757 | - | func | |
758 | - | let | |
759 | - | let | |
760 | - | ( | |
765 | + | eo(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(ek, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50) | |
766 | + | } | |
767 | + | ||
768 | + | ||
769 | + | func eR (eS) = { | |
770 | + | func eT (eg,ca) = { | |
771 | + | let eQ = size(eg) | |
772 | + | let eU = take(drop(eS, (8 * eQ)), 8) | |
773 | + | (eg :+ toString(toInt(eU))) | |
761 | 774 | } | |
762 | 775 | ||
763 | 776 | makeString_2C({ | |
764 | - | let | |
765 | - | let | |
766 | - | let | |
767 | - | func | |
768 | - | then | |
769 | - | else | |
770 | - | ||
771 | - | func | |
772 | - | then | |
777 | + | let ei = aP | |
778 | + | let ej = size(ei) | |
779 | + | let ek = nil | |
780 | + | func el (em,en) = if ((en >= ej)) | |
781 | + | then em | |
782 | + | else eT(em, ei[en]) | |
783 | + | ||
784 | + | func eo (em,en) = if ((en >= ej)) | |
785 | + | then em | |
773 | 786 | else throw("List size exceeds 50") | |
774 | 787 | ||
775 | - | | |
788 | + | eo(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(ek, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50) | |
776 | 789 | }, "_") | |
777 | 790 | } | |
778 | 791 | ||
779 | 792 | ||
780 | - | func | |
781 | - | func | |
782 | - | let | |
783 | - | then | |
793 | + | func eV (eW,eX) = { | |
794 | + | func eY (eg,eQ) = { | |
795 | + | let eZ = if ((size(eW) > (7 + eQ))) | |
796 | + | then eW[(7 + eQ)] | |
784 | 797 | else 0 | |
785 | - | if ((parseIntValue(eQ | |
786 | - | then throw(("Requirement not satisfied: " + i[ | |
798 | + | if ((parseIntValue(eX[eQ]) > (eW[eQ] + eZ))) | |
799 | + | then throw(("Requirement not satisfied: " + i[eQ])) | |
787 | 800 | else true | |
788 | 801 | } | |
789 | 802 | ||
790 | - | let | |
791 | - | let | |
792 | - | let | |
793 | - | func | |
794 | - | then | |
795 | - | else | |
796 | - | ||
797 | - | func | |
798 | - | then | |
803 | + | let ei = [0, 1, 2, 3, 4, 5, 6] | |
804 | + | let ej = size(ei) | |
805 | + | let ek = false | |
806 | + | func el (em,en) = if ((en >= ej)) | |
807 | + | then em | |
808 | + | else eY(em, ei[en]) | |
809 | + | ||
810 | + | func eo (em,en) = if ((en >= ej)) | |
811 | + | then em | |
799 | 812 | else throw("List size exceeds 7") | |
800 | 813 | ||
801 | - | | |
802 | - | } | |
803 | - | ||
804 | - | ||
805 | - | func | |
806 | - | let | |
807 | - | if ((size( | |
814 | + | eo(el(el(el(el(el(el(el(ek, 0), 1), 2), 3), 4), 5), 6), 7) | |
815 | + | } | |
816 | + | ||
817 | + | ||
818 | + | func fa (fb,eO,fc,eW,fd,fe) = { | |
819 | + | let eE = split(fb, ":") | |
820 | + | if ((size(eE) != 2)) | |
808 | 821 | then throw("Incorrect format, should be index:amount") | |
809 | - | else if (if (!( | |
810 | - | then (size( | |
822 | + | else if (if (!(fc)) | |
823 | + | then (size(eE[0]) != 2) | |
811 | 824 | else false) | |
812 | 825 | then throw("Product idx should be 2 digits, zero padded") | |
813 | 826 | else { | |
814 | - | let | |
815 | - | let | |
816 | - | if (!(containsElement( | |
817 | - | then throw((("Product '" + | |
818 | - | else if ((0 > | |
827 | + | let ff = parseIntValue(eE[0]) | |
828 | + | let fg = parseIntValue(eE[1]) | |
829 | + | if (!(containsElement(aO, ff))) | |
830 | + | then throw((("Product '" + aL[ff]) + "' cannot be used for land defense")) | |
831 | + | else if ((0 > fg)) | |
819 | 832 | then throw("Count can't be negative") | |
820 | - | else if (( | |
821 | - | then throw(((("Can't put more than " + toString(s)) + " of ") + | |
822 | - | else if (( | |
823 | - | then $Tuple3( | |
833 | + | else if ((fg > s)) | |
834 | + | then throw(((("Can't put more than " + toString(s)) + " of ") + aL[ff])) | |
835 | + | else if ((fg == 0)) | |
836 | + | then $Tuple3(eO, fd, fe) | |
824 | 837 | else { | |
825 | - | let | |
826 | - | let | |
827 | - | let | |
828 | - | let | |
829 | - | if (if (!( | |
830 | - | then ( | |
838 | + | let fh = take(eO, (8 * ff)) | |
839 | + | let eJ = toInt(take(drop(eO, (8 * ff)), 8)) | |
840 | + | let eK = drop(eO, (8 * (ff + 1))) | |
841 | + | let ca = split(aP[ff], "_") | |
842 | + | if (if (!(fc)) | |
843 | + | then (fg > eJ) | |
831 | 844 | else false) | |
832 | - | then throw(((((("You have " + toString( | |
845 | + | then throw(((((("You have " + toString(eJ)) + " of ") + aL[ff]) + ", but tried to use ") + toString(fg))) | |
833 | 846 | else { | |
834 | - | let | |
835 | - | then | |
847 | + | let eL = if (if (!(fc)) | |
848 | + | then eV(eW, split(ca[aS], ",")) | |
836 | 849 | else false) | |
837 | - | then ( | |
838 | - | else ( | |
839 | - | let | |
840 | - | $Tuple3((( | |
850 | + | then (eJ - fg) | |
851 | + | else (eJ + fg) | |
852 | + | let fi = (dW(eL, aU) - dW(eJ, aU)) | |
853 | + | $Tuple3(((fh + toBytes(eL)) + eK), (fd + fi), (fe - fi)) | |
841 | 854 | } | |
842 | 855 | } | |
843 | 856 | } | |
844 | 857 | } | |
845 | 858 | ||
846 | 859 | ||
847 | - | func | |
848 | - | let | |
849 | - | if ((size( | |
860 | + | func fj (fb,eO,fc,fk,fl,fm,eW) = { | |
861 | + | let eE = split(fb, ":") | |
862 | + | if ((size(eE) != 2)) | |
850 | 863 | then throw("Incorrect format, should be index:amount") | |
851 | - | else if (if (!( | |
852 | - | then (size( | |
864 | + | else if (if (!(fc)) | |
865 | + | then (size(eE[0]) != 2) | |
853 | 866 | else false) | |
854 | 867 | then throw("Product idx should be 2 digits, zero padded") | |
855 | 868 | else { | |
856 | - | let | |
857 | - | let | |
858 | - | if (if ((0 > | |
869 | + | let ff = parseIntValue(eE[0]) | |
870 | + | let fg = parseIntValue(eE[1]) | |
871 | + | if (if ((0 > ff)) | |
859 | 872 | then true | |
860 | - | else ( | |
873 | + | else (ff >= size(aP))) | |
861 | 874 | then throw("Unknown product idx") | |
862 | - | else if ((0 > | |
875 | + | else if ((0 > fg)) | |
863 | 876 | then throw("Count can't be negative") | |
864 | - | else if (( | |
865 | - | then throw(((("Can't put more than " + toString(s)) + " of ") + | |
866 | - | else if (( | |
867 | - | then $Tuple2( | |
877 | + | else if ((fg > s)) | |
878 | + | then throw(((("Can't put more than " + toString(s)) + " of ") + aL[ff])) | |
879 | + | else if ((fg == 0)) | |
880 | + | then $Tuple2(eO, false) | |
868 | 881 | else { | |
869 | - | let | |
870 | - | let | |
871 | - | let | |
872 | - | let | |
873 | - | if (if (!( | |
874 | - | then ( | |
882 | + | let fh = take(eO, (8 * ff)) | |
883 | + | let eJ = toInt(take(drop(eO, (8 * ff)), 8)) | |
884 | + | let eK = drop(eO, (8 * (ff + 1))) | |
885 | + | let ca = split(aP[ff], "_") | |
886 | + | if (if (!(fc)) | |
887 | + | then (fg > eJ) | |
875 | 888 | else false) | |
876 | - | then throw(((((("You have " + toString( | |
889 | + | then throw(((((("You have " + toString(eJ)) + " of ") + aL[ff]) + ", but tried to use ") + toString(fg))) | |
877 | 890 | else { | |
878 | - | let | |
879 | - | then | |
891 | + | let fn = if (if (!(fc)) | |
892 | + | then eV(eW, split(ca[aS], ",")) | |
880 | 893 | else false) | |
881 | 894 | then { | |
882 | - | let | |
883 | - | if (( | |
895 | + | let fo = ca[aT] | |
896 | + | if ((fo == "")) | |
884 | 897 | then throw("Item cannot be equipped") | |
885 | 898 | else { | |
886 | - | let | |
887 | - | let | |
888 | - | if (( | |
899 | + | let fp = parseIntValue(fo) | |
900 | + | let fq = (fp / 100) | |
901 | + | if ((fk != fq)) | |
889 | 902 | then throw("Segment incompatible") | |
890 | 903 | else { | |
891 | - | let | |
892 | - | if (( | |
904 | + | let fr = ((fp % 100) / 10) | |
905 | + | if ((fl != fr)) | |
893 | 906 | then throw("Slot incompatible") | |
894 | 907 | else { | |
895 | - | let | |
896 | - | if (if (( | |
897 | - | then ( | |
908 | + | let fs = (fp % 10) | |
909 | + | if (if ((fm != 0)) | |
910 | + | then (fs > 1) | |
898 | 911 | else false) | |
899 | 912 | then throw("Big items should occupy slot 0") | |
900 | - | else ( | |
913 | + | else (fs > 1) | |
901 | 914 | } | |
902 | 915 | } | |
903 | 916 | } | |
904 | 917 | } | |
905 | 918 | else false | |
906 | - | $Tuple2((( | |
907 | - | then | |
908 | - | else -( | |
919 | + | $Tuple2(((fh + toBytes((eJ + (if (fc) | |
920 | + | then fg | |
921 | + | else -(fg))))) + eK), fn) | |
909 | 922 | } | |
910 | 923 | } | |
911 | 924 | } | |
912 | 925 | } | |
913 | 926 | ||
914 | 927 | ||
915 | - | func | |
928 | + | func ft (fu,fv,fc,fk,fl,fw) = if ((fu != "")) | |
916 | 929 | then { | |
917 | - | let | |
918 | - | if ((size( | |
930 | + | let fx = split(fu, ",") | |
931 | + | if ((size(fx) > r)) | |
919 | 932 | then throw("Wrong slots format") | |
920 | 933 | else { | |
921 | - | let | |
922 | - | let | |
923 | - | then | |
934 | + | let fy = fx[0] | |
935 | + | let fz = if ((size(fx) > 1)) | |
936 | + | then fx[1] | |
924 | 937 | else "" | |
925 | - | if (if (( | |
926 | - | then ( | |
938 | + | if (if ((fy == "")) | |
939 | + | then (fz == "") | |
927 | 940 | else false) | |
928 | - | then | |
941 | + | then fv | |
929 | 942 | else { | |
930 | - | let | |
931 | - | then | |
932 | - | else $Tuple2( | |
933 | - | if (( | |
934 | - | then if ( | |
943 | + | let fA = if ((fy != "")) | |
944 | + | then fj(fy, fv, fc, fk, fl, 0, fw) | |
945 | + | else $Tuple2(fv, false) | |
946 | + | if ((fz != "")) | |
947 | + | then if (fA._2) | |
935 | 948 | then throw("Big item already occupies slot") | |
936 | - | else | |
937 | - | else | |
949 | + | else fj(fz, fA._1, fc, fk, fl, 1, fw)._1 | |
950 | + | else fA._1 | |
938 | 951 | } | |
939 | 952 | } | |
940 | 953 | } | |
941 | - | else | |
942 | - | ||
943 | - | ||
944 | - | func | |
945 | - | func | |
946 | - | let | |
947 | - | let | |
948 | - | if ((size( | |
954 | + | else fv | |
955 | + | ||
956 | + | ||
957 | + | func fB (fC,fD,fc,fw) = { | |
958 | + | func fk (eg,fE) = { | |
959 | + | let eQ = eg._1 | |
960 | + | let fl = split(fE, ";") | |
961 | + | if ((size(fl) != q)) | |
949 | 962 | then throw("Wrong segment format") | |
950 | 963 | else { | |
951 | - | let | |
952 | - | let | |
953 | - | if (if (( | |
954 | - | then ( | |
964 | + | let fF = fl[0] | |
965 | + | let fG = fl[1] | |
966 | + | if (if ((fF == "")) | |
967 | + | then (fG == "") | |
955 | 968 | else false) | |
956 | - | then $Tuple2(( | |
969 | + | then $Tuple2((eQ + 1), eg._2) | |
957 | 970 | else { | |
958 | - | let | |
959 | - | $Tuple2(( | |
971 | + | let fH = ft(fF, eg._2, fc, eQ, 0, fw) | |
972 | + | $Tuple2((eQ + 1), ft(fG, fH, fc, eQ, 1, fw)) | |
960 | 973 | } | |
961 | 974 | } | |
962 | 975 | } | |
963 | 976 | ||
964 | - | ( let | |
965 | - | let | |
966 | - | let | |
967 | - | func | |
968 | - | then | |
969 | - | else | |
970 | - | ||
971 | - | func | |
972 | - | then | |
977 | + | ( let ei = fC | |
978 | + | let ej = size(ei) | |
979 | + | let ek = $Tuple2(0, fD) | |
980 | + | func el (em,en) = if ((en >= ej)) | |
981 | + | then em | |
982 | + | else fk(em, ei[en]) | |
983 | + | ||
984 | + | func eo (em,en) = if ((en >= ej)) | |
985 | + | then em | |
973 | 986 | else throw("List size exceeds 6") | |
974 | 987 | ||
975 | - | | |
976 | - | } | |
977 | - | ||
978 | - | ||
979 | - | func | |
988 | + | eo(el(el(el(el(el(el(ek, 0), 1), 2), 3), 4), 5), 6))._2 | |
989 | + | } | |
990 | + | ||
991 | + | ||
992 | + | func fI (fC,fD,fd,fe,fc,eW) = if ((3 > size(fC))) | |
980 | 993 | then throw("At least duck, mines and traps parts are required") | |
981 | 994 | else { | |
982 | - | func | |
983 | - | let | |
984 | - | if (( | |
985 | - | then $Tuple4(( | |
995 | + | func fk (eg,fE) = { | |
996 | + | let eQ = eg._1 | |
997 | + | if ((eQ == 0)) | |
998 | + | then $Tuple4((eQ + 1), eg._2, eg._3, eg._4) | |
986 | 999 | else { | |
987 | - | let | |
988 | - | $Tuple4(( | |
1000 | + | let fJ = fa(fE, eg._2, fc, eW, eg._3, eg._4) | |
1001 | + | $Tuple4((eQ + 1), fJ._1, fJ._2, fJ._3) | |
989 | 1002 | } | |
990 | 1003 | } | |
991 | 1004 | ||
992 | - | let | |
993 | - | let | |
994 | - | let | |
995 | - | let | |
996 | - | func | |
997 | - | then | |
998 | - | else | |
999 | - | ||
1000 | - | func | |
1001 | - | then | |
1005 | + | let fK = { | |
1006 | + | let ei = fC | |
1007 | + | let ej = size(ei) | |
1008 | + | let ek = $Tuple4(0, fD, fd, fe) | |
1009 | + | func el (em,en) = if ((en >= ej)) | |
1010 | + | then em | |
1011 | + | else fk(em, ei[en]) | |
1012 | + | ||
1013 | + | func eo (em,en) = if ((en >= ej)) | |
1014 | + | then em | |
1002 | 1015 | else throw("List size exceeds 10") | |
1003 | 1016 | ||
1004 | - | | |
1005 | - | } | |
1006 | - | $Tuple3( | |
1017 | + | eo(el(el(el(el(el(el(el(el(el(el(ek, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10) | |
1018 | + | } | |
1019 | + | $Tuple3(fK._2, fK._3, fK._4) | |
1007 | 1020 | } | |
1008 | 1021 | ||
1009 | 1022 | ||
1010 | - | func | |
1011 | - | let | |
1012 | - | let | |
1013 | - | let | |
1014 | - | let | |
1015 | - | let | |
1023 | + | func fL (z) = { | |
1024 | + | let fM = E(z) | |
1025 | + | let fN = split(valueOrElse(getString(fM), ",;,_,;,_,;,_,;,_,;,_,;,"), "_") | |
1026 | + | let fO = fB(fN, dq, true, nil) | |
1027 | + | let fP = split(fN[o], ";")[1] | |
1028 | + | let am = if ((fP == "")) | |
1016 | 1029 | then 0 | |
1017 | 1030 | else { | |
1018 | - | let | |
1019 | - | if (( | |
1031 | + | let fQ = split(fP, ",")[0] | |
1032 | + | if ((fQ == "")) | |
1020 | 1033 | then 0 | |
1021 | 1034 | else { | |
1022 | - | let | |
1023 | - | let | |
1024 | - | let | |
1025 | - | if (if (if (if (if (( | |
1035 | + | let fb = split(fQ, ":") | |
1036 | + | let cG = fb[0] | |
1037 | + | let fR = fb[1] | |
1038 | + | if (if (if (if (if ((cG == "06")) | |
1026 | 1039 | then true | |
1027 | - | else ( | |
1040 | + | else (cG == "07")) | |
1028 | 1041 | then true | |
1029 | - | else ( | |
1030 | - | then ( | |
1042 | + | else (cG == "08")) | |
1043 | + | then (fR != "") | |
1031 | 1044 | else false) | |
1032 | - | then (parseIntValue( | |
1045 | + | then (parseIntValue(fR) > 0) | |
1033 | 1046 | else false) | |
1034 | - | then parseIntValue(split( | |
1047 | + | then parseIntValue(split(aP[parseIntValue(cG)], "_")[aR]) | |
1035 | 1048 | else 0 | |
1036 | 1049 | } | |
1037 | 1050 | } | |
1038 | - | let | |
1039 | - | let | |
1040 | - | ( | |
1041 | - | } | |
1042 | - | ||
1043 | - | ||
1044 | - | func | |
1051 | + | let fw = ak(this, z, am, true) | |
1052 | + | let fS = fB(fN, fO, false, fw) | |
1053 | + | (fS == fS) | |
1054 | + | } | |
1055 | + | ||
1056 | + | ||
1057 | + | func fT (fU,fV,fW,fX) = if ((size(fU) != aD)) | |
1045 | 1058 | then throw("Wrong proportions data") | |
1046 | 1059 | else { | |
1047 | - | func | |
1048 | - | let | |
1049 | - | if ((0 > | |
1050 | - | then throw(((((((("Panic! Pieces of type=" + toString( | |
1051 | - | else ( | |
1052 | - | } | |
1053 | - | ||
1054 | - | let | |
1055 | - | let | |
1056 | - | let | |
1057 | - | func | |
1058 | - | then | |
1059 | - | else | |
1060 | - | ||
1061 | - | func | |
1062 | - | then | |
1060 | + | func fY (eg,fZ) = { | |
1061 | + | let ey = (parseIntValue(fU[fZ]) + ((fX * fV[fZ]) * fW)) | |
1062 | + | if ((0 > ey)) | |
1063 | + | then throw(((((((("Panic! Pieces of type=" + toString(fZ)) + ", sign=") + toString(fX)) + ", terrainCounts[i]=") + toString(fV[fZ])) + ", landSizeIndex=") + toString(fW))) | |
1064 | + | else (eg :+ toString(ey)) | |
1065 | + | } | |
1066 | + | ||
1067 | + | let ei = cr | |
1068 | + | let ej = size(ei) | |
1069 | + | let ek = nil | |
1070 | + | func el (em,en) = if ((en >= ej)) | |
1071 | + | then em | |
1072 | + | else fY(em, ei[en]) | |
1073 | + | ||
1074 | + | func eo (em,en) = if ((en >= ej)) | |
1075 | + | then em | |
1063 | 1076 | else throw("List size exceeds 6") | |
1064 | 1077 | ||
1065 | - | | |
1078 | + | eo(el(el(el(el(el(el(ek, 0), 1), 2), 3), 4), 5), 6) | |
1066 | 1079 | } | |
1067 | 1080 | ||
1068 | 1081 | ||
1069 | - | func | |
1070 | - | let | |
1071 | - | makeString( | |
1072 | - | } | |
1073 | - | ||
1074 | - | ||
1075 | - | func | |
1076 | - | ||
1077 | - | ||
1078 | - | func | |
1079 | - | func | |
1080 | - | let | |
1081 | - | ( | |
1082 | + | func ga (fV,fW,fX) = { | |
1083 | + | let fU = split(valueOrElse(getString(cU()), "0_0_0_0_0_0"), "_") | |
1084 | + | makeString(fT(fU, fV, fW, fX), "_") | |
1085 | + | } | |
1086 | + | ||
1087 | + | ||
1088 | + | func gb (gc) = [(size(split(gc, "A")) - 1), (size(split(gc, "B")) - 1), (size(split(gc, "C")) - 1), (size(split(gc, "D")) - 1), (size(split(gc, "E")) - 1), (size(split(gc, "F")) - 1)] | |
1089 | + | ||
1090 | + | ||
1091 | + | func gd (ge,fV,gf,fW,gg) = { | |
1092 | + | func gh (eg,fZ) = { | |
1093 | + | let gi = ((fraction(gf, gg, aG) * fV[fZ]) * fW) | |
1094 | + | (eg :+ toString((parseIntValue(ge[fZ]) + gi))) | |
1082 | 1095 | } | |
1083 | 1096 | ||
1084 | - | let | |
1085 | - | let | |
1086 | - | let | |
1087 | - | let | |
1088 | - | func | |
1089 | - | then | |
1090 | - | else | |
1091 | - | ||
1092 | - | func | |
1093 | - | then | |
1097 | + | let er = { | |
1098 | + | let ei = cr | |
1099 | + | let ej = size(ei) | |
1100 | + | let ek = nil | |
1101 | + | func el (em,en) = if ((en >= ej)) | |
1102 | + | then em | |
1103 | + | else gh(em, ei[en]) | |
1104 | + | ||
1105 | + | func eo (em,en) = if ((en >= ej)) | |
1106 | + | then em | |
1094 | 1107 | else throw("List size exceeds 6") | |
1095 | 1108 | ||
1096 | - | | |
1109 | + | eo(el(el(el(el(el(el(ek, 0), 1), 2), 3), 4), 5), 6) | |
1097 | 1110 | } | |
1098 | - | makeString( | |
1099 | - | } | |
1100 | - | ||
1101 | - | ||
1102 | - | func | |
1103 | - | func | |
1104 | - | let | |
1105 | - | $Tuple2(( | |
1111 | + | makeString(er, "_") | |
1112 | + | } | |
1113 | + | ||
1114 | + | ||
1115 | + | func gj (fV,gf,fW,gg) = { | |
1116 | + | func gh (eg,fZ) = { | |
1117 | + | let gi = ((fraction(gf, gg, aG) * fV[fZ]) * fW) | |
1118 | + | $Tuple2((eg._1 :+ gi), (eg._2 + gi)) | |
1106 | 1119 | } | |
1107 | 1120 | ||
1108 | - | let | |
1109 | - | let | |
1110 | - | let | |
1111 | - | func | |
1112 | - | then | |
1113 | - | else | |
1114 | - | ||
1115 | - | func | |
1116 | - | then | |
1121 | + | let ei = cr | |
1122 | + | let ej = size(ei) | |
1123 | + | let ek = $Tuple2(nil, 0) | |
1124 | + | func el (em,en) = if ((en >= ej)) | |
1125 | + | then em | |
1126 | + | else gh(em, ei[en]) | |
1127 | + | ||
1128 | + | func eo (em,en) = if ((en >= ej)) | |
1129 | + | then em | |
1117 | 1130 | else throw("List size exceeds 6") | |
1118 | 1131 | ||
1119 | - | | |
1120 | - | } | |
1121 | - | ||
1122 | - | ||
1123 | - | func | |
1124 | - | let | |
1125 | - | let | |
1126 | - | if (( | |
1127 | - | then $Tuple2(makeString( | |
1128 | - | else if (( | |
1132 | + | eo(el(el(el(el(el(el(ek, 0), 1), 2), 3), 4), 5), 6) | |
1133 | + | } | |
1134 | + | ||
1135 | + | ||
1136 | + | func gk (gl,gm,gn,go) = { | |
1137 | + | let gp = gn._1 | |
1138 | + | let gq = gn._2 | |
1139 | + | if ((gq == 0)) | |
1140 | + | then $Tuple2(makeString(gl, "_"), makeString(gm, "_")) | |
1141 | + | else if ((go >= gq)) | |
1129 | 1142 | then { | |
1130 | - | func | |
1131 | - | ||
1132 | - | let | |
1133 | - | let | |
1134 | - | let | |
1135 | - | let | |
1136 | - | func | |
1137 | - | then | |
1138 | - | else | |
1139 | - | ||
1140 | - | func | |
1141 | - | then | |
1143 | + | func gr (eg,fZ) = (eg :+ toString((parseIntValue(gl[fZ]) + gp[fZ]))) | |
1144 | + | ||
1145 | + | let er = { | |
1146 | + | let ei = cr | |
1147 | + | let ej = size(ei) | |
1148 | + | let ek = nil | |
1149 | + | func el (em,en) = if ((en >= ej)) | |
1150 | + | then em | |
1151 | + | else gr(em, ei[en]) | |
1152 | + | ||
1153 | + | func eo (em,en) = if ((en >= ej)) | |
1154 | + | then em | |
1142 | 1155 | else throw("List size exceeds 6") | |
1143 | 1156 | ||
1144 | - | | |
1157 | + | eo(el(el(el(el(el(el(ek, 0), 1), 2), 3), 4), 5), 6) | |
1145 | 1158 | } | |
1146 | - | $Tuple2(makeString( | |
1159 | + | $Tuple2(makeString(er, "_"), makeString(gm, "_")) | |
1147 | 1160 | } | |
1148 | 1161 | else { | |
1149 | - | func | |
1150 | - | let | |
1151 | - | $Tuple2(( | |
1162 | + | func gs (eg,fZ) = { | |
1163 | + | let gt = fraction(gp[fZ], go, gq) | |
1164 | + | $Tuple2((eg._1 :+ toString((parseIntValue(gl[fZ]) + gt))), (eg._2 :+ toString(((parseIntValue(gm[fZ]) + gp[fZ]) - gt)))) | |
1152 | 1165 | } | |
1153 | 1166 | ||
1154 | - | let | |
1155 | - | let | |
1156 | - | let | |
1157 | - | let | |
1158 | - | func | |
1159 | - | then | |
1160 | - | else | |
1161 | - | ||
1162 | - | func | |
1163 | - | then | |
1167 | + | let er = { | |
1168 | + | let ei = cr | |
1169 | + | let ej = size(ei) | |
1170 | + | let ek = $Tuple2(nil, nil) | |
1171 | + | func el (em,en) = if ((en >= ej)) | |
1172 | + | then em | |
1173 | + | else gs(em, ei[en]) | |
1174 | + | ||
1175 | + | func eo (em,en) = if ((en >= ej)) | |
1176 | + | then em | |
1164 | 1177 | else throw("List size exceeds 6") | |
1165 | 1178 | ||
1166 | - | | |
1179 | + | eo(el(el(el(el(el(el(ek, 0), 1), 2), 3), 4), 5), 6) | |
1167 | 1180 | } | |
1168 | - | $Tuple2(makeString( | |
1181 | + | $Tuple2(makeString(er._1, "_"), makeString(er._2, "_")) | |
1169 | 1182 | } | |
1170 | 1183 | } | |
1171 | 1184 | ||
1172 | 1185 | ||
1173 | - | func | |
1174 | - | then | |
1175 | - | else -( | |
1176 | - | ||
1177 | - | ||
1178 | - | let | |
1179 | - | ||
1180 | - | func | |
1181 | - | let | |
1182 | - | let | |
1186 | + | func gu (gv) = if ((gv >= toBigInt(0))) | |
1187 | + | then gv | |
1188 | + | else -(gv) | |
1189 | + | ||
1190 | + | ||
1191 | + | let gw = [[6, 9, 14, 15, 16], [5, 8, 13, 14, 15], [1, 4, 9, 10, 15], [1, 6, 7, 15, 19], [4, 7, 8, 13, 18]] | |
1192 | + | ||
1193 | + | func gx (dd,gy) = { | |
1194 | + | let gz = toInt((dd % dy)) | |
1195 | + | let gA = if ((gy[0] > gz)) | |
1183 | 1196 | then "A" | |
1184 | - | else if (( | |
1197 | + | else if ((gy[1] > gz)) | |
1185 | 1198 | then "B" | |
1186 | - | else if (( | |
1199 | + | else if ((gy[2] > gz)) | |
1187 | 1200 | then "C" | |
1188 | - | else if (( | |
1201 | + | else if ((gy[3] > gz)) | |
1189 | 1202 | then "D" | |
1190 | - | else if (( | |
1203 | + | else if ((gy[4] > gz)) | |
1191 | 1204 | then "E" | |
1192 | 1205 | else "F" | |
1193 | - | | |
1194 | - | } | |
1195 | - | ||
1196 | - | ||
1197 | - | func | |
1198 | - | let | |
1199 | - | func | |
1200 | - | ||
1201 | - | let | |
1202 | - | let | |
1203 | - | let | |
1204 | - | let | |
1205 | - | func | |
1206 | - | then | |
1207 | - | else | |
1208 | - | ||
1209 | - | func | |
1210 | - | then | |
1206 | + | gA | |
1207 | + | } | |
1208 | + | ||
1209 | + | ||
1210 | + | func gB (gC,gD) = { | |
1211 | + | let gE = gw[gD] | |
1212 | + | func gF (eg,eh) = $Tuple2((((((eg._1 + gx(eg._2, gE)) + gx((eg._2 / dy), gE)) + gx((eg._2 / dz), gE)) + gx((eg._2 / dA), gE)) + gx((eg._2 / dB), gE)), (eg._2 / dC)) | |
1213 | + | ||
1214 | + | let fK = { | |
1215 | + | let ei = [1, 2, 3, 4, 5] | |
1216 | + | let ej = size(ei) | |
1217 | + | let ek = $Tuple2("", (gC / dx)) | |
1218 | + | func el (em,en) = if ((en >= ej)) | |
1219 | + | then em | |
1220 | + | else gF(em, ei[en]) | |
1221 | + | ||
1222 | + | func eo (em,en) = if ((en >= ej)) | |
1223 | + | then em | |
1211 | 1224 | else throw("List size exceeds 5") | |
1212 | 1225 | ||
1213 | - | | |
1226 | + | eo(el(el(el(el(el(ek, 0), 1), 2), 3), 4), 5) | |
1214 | 1227 | } | |
1215 | - | | |
1216 | - | } | |
1217 | - | ||
1218 | - | ||
1219 | - | let | |
1220 | - | ||
1221 | - | let | |
1222 | - | ||
1223 | - | func | |
1224 | - | func | |
1225 | - | let | |
1226 | - | let | |
1227 | - | let | |
1228 | + | fK._1 | |
1229 | + | } | |
1230 | + | ||
1231 | + | ||
1232 | + | let gG = [7, 2, 15, 19, 8, 24, 1, 21, 16, 5, 0, 22, 20, 23, 11, 4, 18, 12, 6, 10, 3, 17, 13, 9, 14] | |
1233 | + | ||
1234 | + | let gH = ["A", "B", "C", "D", "E", "F"] | |
1235 | + | ||
1236 | + | func gI (gJ,fW) = { | |
1237 | + | func gK (eg,db) = { | |
1238 | + | let eQ = eg._2 | |
1239 | + | let gL = parseIntValue(db) | |
1240 | + | let gv = if ((gL == 0)) | |
1228 | 1241 | then 0 | |
1229 | - | else if (( | |
1230 | - | then ( | |
1231 | - | else if (( | |
1242 | + | else if ((gL >= (4 * fW))) | |
1243 | + | then (gL / fW) | |
1244 | + | else if ((gL > (3 * fW))) | |
1232 | 1245 | then 3 | |
1233 | - | else ((( | |
1234 | - | $Tuple3(( | |
1246 | + | else (((gL - 1) / fW) + 1) | |
1247 | + | $Tuple3((eg._1 :+ gv), (eg._2 + 1), (eg._3 + gv)) | |
1235 | 1248 | } | |
1236 | 1249 | ||
1237 | - | let | |
1238 | - | let | |
1239 | - | let | |
1240 | - | let | |
1241 | - | func | |
1242 | - | then | |
1243 | - | else | |
1244 | - | ||
1245 | - | func | |
1246 | - | then | |
1250 | + | let fK = { | |
1251 | + | let ei = gJ | |
1252 | + | let ej = size(ei) | |
1253 | + | let ek = $Tuple3(nil, 0, 0) | |
1254 | + | func el (em,en) = if ((en >= ej)) | |
1255 | + | then em | |
1256 | + | else gK(em, ei[en]) | |
1257 | + | ||
1258 | + | func eo (em,en) = if ((en >= ej)) | |
1259 | + | then em | |
1247 | 1260 | else throw("List size exceeds 6") | |
1248 | 1261 | ||
1249 | - | | |
1262 | + | eo(el(el(el(el(el(el(ek, 0), 1), 2), 3), 4), 5), 6) | |
1250 | 1263 | } | |
1251 | - | let | |
1252 | - | let | |
1253 | - | let | |
1254 | - | func | |
1255 | - | let | |
1256 | - | then ( | |
1257 | - | else | |
1258 | - | let | |
1264 | + | let gM = fK._1 | |
1265 | + | let gN = value(indexOf(gM, max(gM))) | |
1266 | + | let gO = (fK._3 - 25) | |
1267 | + | func gP (eg,cG) = { | |
1268 | + | let gQ = if ((cG == gN)) | |
1269 | + | then (gM[cG] - gO) | |
1270 | + | else gM[cG] | |
1271 | + | let gR = if ((gQ == 0)) | |
1259 | 1272 | then nil | |
1260 | - | else split(drop(toString(pow(10, 0, | |
1261 | - | let | |
1262 | - | func | |
1263 | - | ||
1264 | - | let | |
1265 | - | let | |
1266 | - | let | |
1267 | - | let | |
1268 | - | func | |
1269 | - | then | |
1270 | - | else | |
1271 | - | ||
1272 | - | func | |
1273 | - | then | |
1273 | + | else split(drop(toString(pow(10, 0, gQ, 0, 0, DOWN)), 1), "") | |
1274 | + | let fp = gH[cG] | |
1275 | + | func gS (gT,gU) = (gT :+ fp) | |
1276 | + | ||
1277 | + | let gV = { | |
1278 | + | let ei = gR | |
1279 | + | let ej = size(ei) | |
1280 | + | let ek = nil | |
1281 | + | func gW (em,en) = if ((en >= ej)) | |
1282 | + | then em | |
1283 | + | else gS(em, ei[en]) | |
1284 | + | ||
1285 | + | func gX (em,en) = if ((en >= ej)) | |
1286 | + | then em | |
1274 | 1287 | else throw("List size exceeds 25") | |
1275 | 1288 | ||
1276 | - | | |
1277 | - | } | |
1278 | - | ( | |
1289 | + | gX(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(ek, 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) | |
1290 | + | } | |
1291 | + | (eg ++ gV) | |
1279 | 1292 | } | |
1280 | 1293 | ||
1281 | - | let | |
1282 | - | let | |
1283 | - | let | |
1284 | - | let | |
1285 | - | func | |
1286 | - | then | |
1287 | - | else | |
1288 | - | ||
1289 | - | func | |
1290 | - | then | |
1294 | + | let er = { | |
1295 | + | let ei = cr | |
1296 | + | let ej = size(ei) | |
1297 | + | let ek = nil | |
1298 | + | func gW (em,en) = if ((en >= ej)) | |
1299 | + | then em | |
1300 | + | else gP(em, ei[en]) | |
1301 | + | ||
1302 | + | func gX (em,en) = if ((en >= ej)) | |
1303 | + | then em | |
1291 | 1304 | else throw("List size exceeds 6") | |
1292 | 1305 | ||
1293 | - | | |
1306 | + | gX(gW(gW(gW(gW(gW(gW(ek, 0), 1), 2), 3), 4), 5), 6) | |
1294 | 1307 | } | |
1295 | - | func | |
1296 | - | ||
1297 | - | let | |
1298 | - | let | |
1299 | - | let | |
1300 | - | func | |
1301 | - | then | |
1302 | - | else | |
1303 | - | ||
1304 | - | func | |
1305 | - | then | |
1308 | + | func gY (eg,eQ) = (eg + er[eQ]) | |
1309 | + | ||
1310 | + | let ei = gG | |
1311 | + | let ej = size(ei) | |
1312 | + | let ek = "" | |
1313 | + | func gZ (em,en) = if ((en >= ej)) | |
1314 | + | then em | |
1315 | + | else gY(em, ei[en]) | |
1316 | + | ||
1317 | + | func ha (em,en) = if ((en >= ej)) | |
1318 | + | then em | |
1306 | 1319 | else throw("List size exceeds 25") | |
1307 | 1320 | ||
1308 | - | | |
1309 | - | } | |
1310 | - | ||
1311 | - | ||
1312 | - | func | |
1313 | - | let | |
1314 | - | [toString(valueOrElse(parseInt( | |
1315 | - | then | |
1316 | - | else "0_0_0_0_0_0", if ((size(split( | |
1317 | - | then | |
1318 | - | else "0_0_0_0_0_0", | |
1319 | - | } | |
1320 | - | ||
1321 | - | ||
1322 | - | func | |
1323 | - | let | |
1324 | - | (( | |
1325 | - | } | |
1326 | - | ||
1327 | - | ||
1328 | - | func | |
1329 | - | let | |
1330 | - | func | |
1331 | - | ||
1332 | - | func | |
1333 | - | let | |
1334 | - | let | |
1335 | - | $Tuple2(( | |
1321 | + | ha(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(ek, 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) | |
1322 | + | } | |
1323 | + | ||
1324 | + | ||
1325 | + | func hb (hc) = { | |
1326 | + | let fJ = split(valueOrElse(getString(hc), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":") | |
1327 | + | [toString(valueOrElse(parseInt(fJ[be]), 0)), if ((size(split(fJ[bf], "_")) == aD)) | |
1328 | + | then fJ[bf] | |
1329 | + | else "0_0_0_0_0_0", if ((size(split(fJ[bg], "_")) == aD)) | |
1330 | + | then fJ[bg] | |
1331 | + | else "0_0_0_0_0_0", fJ[bh]] | |
1332 | + | } | |
1333 | + | ||
1334 | + | ||
1335 | + | func hd (he) = { | |
1336 | + | let eE = split(he, "_") | |
1337 | + | ((aH * (parseIntValue(eE[1]) + 1)) * parseIntValue(eE[0])) | |
1338 | + | } | |
1339 | + | ||
1340 | + | ||
1341 | + | func hf (hg) = { | |
1342 | + | let hh = hg[aY] | |
1343 | + | func hi (eg,hj) = (eg + parseIntValue(hj)) | |
1344 | + | ||
1345 | + | func hk (eg,hj) = { | |
1346 | + | let cG = eg._1 | |
1347 | + | let dZ = (((parseIntValue(hj) + aU) - 1) / aU) | |
1348 | + | $Tuple2((cG + 1), (eg._2 + (dZ * cl))) | |
1336 | 1349 | } | |
1337 | 1350 | ||
1338 | - | let | |
1339 | - | let | |
1340 | - | let | |
1341 | - | let | |
1342 | - | func | |
1343 | - | then | |
1344 | - | else | |
1345 | - | ||
1346 | - | func | |
1347 | - | then | |
1351 | + | let hl = { | |
1352 | + | let ei = split(hg[aW], "_") | |
1353 | + | let ej = size(ei) | |
1354 | + | let ek = 0 | |
1355 | + | func el (em,en) = if ((en >= ej)) | |
1356 | + | then em | |
1357 | + | else hi(em, ei[en]) | |
1358 | + | ||
1359 | + | func eo (em,en) = if ((en >= ej)) | |
1360 | + | then em | |
1348 | 1361 | else throw("List size exceeds 6") | |
1349 | 1362 | ||
1350 | - | | |
1363 | + | eo(el(el(el(el(el(el(ek, 0), 1), 2), 3), 4), 5), 6) | |
1351 | 1364 | } | |
1352 | - | let | |
1353 | - | let | |
1354 | - | let | |
1355 | - | let | |
1356 | - | func | |
1357 | - | then | |
1358 | - | else | |
1359 | - | ||
1360 | - | func | |
1361 | - | then | |
1365 | + | let hm = { | |
1366 | + | let ei = split(hg[aX], "_") | |
1367 | + | let ej = size(ei) | |
1368 | + | let ek = 0 | |
1369 | + | func gW (em,en) = if ((en >= ej)) | |
1370 | + | then em | |
1371 | + | else hi(em, ei[en]) | |
1372 | + | ||
1373 | + | func gX (em,en) = if ((en >= ej)) | |
1374 | + | then em | |
1362 | 1375 | else throw("List size exceeds 6") | |
1363 | 1376 | ||
1364 | - | | |
1377 | + | gX(gW(gW(gW(gW(gW(gW(ek, 0), 1), 2), 3), 4), 5), 6) | |
1365 | 1378 | } | |
1366 | - | let | |
1379 | + | let hn = if ((hh == "")) | |
1367 | 1380 | then 0 | |
1368 | - | else ( let | |
1369 | - | let | |
1370 | - | let | |
1371 | - | func | |
1372 | - | then | |
1373 | - | else | |
1374 | - | ||
1375 | - | func | |
1376 | - | then | |
1381 | + | else ( let ei = split_4C(hh, "_") | |
1382 | + | let ej = size(ei) | |
1383 | + | let ek = $Tuple2(0, 0) | |
1384 | + | func gZ (em,en) = if ((en >= ej)) | |
1385 | + | then em | |
1386 | + | else hk(em, ei[en]) | |
1387 | + | ||
1388 | + | func ha (em,en) = if ((en >= ej)) | |
1389 | + | then em | |
1377 | 1390 | else throw("List size exceeds 50") | |
1378 | 1391 | ||
1379 | - | | |
1380 | - | (( | |
1381 | - | } | |
1382 | - | ||
1383 | - | ||
1384 | - | func | |
1385 | - | let | |
1386 | - | let | |
1387 | - | let | |
1388 | - | let | |
1389 | - | let | |
1390 | - | let | |
1391 | - | then makeString(["0", toString( | |
1392 | + | ha(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(ek, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50))._2 | |
1393 | + | ((hl + hm) + hn) | |
1394 | + | } | |
1395 | + | ||
1396 | + | ||
1397 | + | func ho (hp,hq,hr) = { | |
1398 | + | let he = ((toString(hq) + "_") + toString(hr)) | |
1399 | + | let hs = hd(he) | |
1400 | + | let ht = valueOrElse(getString(hp), (he + ":0_0_0_0_0_0:0_0_0_0_0_0::0")) | |
1401 | + | let hu = split_4C(ht, ":") | |
1402 | + | let hv = hf(hu) | |
1403 | + | let hw = if ((5 > size(hu))) | |
1404 | + | then makeString(["0", toString(hv), toString((hs - hv)), toString(hs)], "_") | |
1392 | 1405 | else { | |
1393 | - | let | |
1394 | - | let | |
1395 | - | let | |
1396 | - | then parseIntValue( | |
1397 | - | else | |
1398 | - | makeString([toString( | |
1399 | - | } | |
1400 | - | [ | |
1401 | - | then | |
1402 | - | else "0_0_0_0_0_0", if ((size(split( | |
1403 | - | then | |
1404 | - | else "0_0_0_0_0_0", | |
1405 | - | } | |
1406 | - | ||
1407 | - | ||
1408 | - | func | |
1409 | - | let | |
1410 | - | let | |
1411 | - | (( | |
1412 | - | } | |
1413 | - | ||
1414 | - | ||
1415 | - | func | |
1406 | + | let hx = split(hu[aZ], "_") | |
1407 | + | let hy = parseIntValue(hx[ba]) | |
1408 | + | let hz = if ((size(hx) > 1)) | |
1409 | + | then parseIntValue(hx[bb]) | |
1410 | + | else hv | |
1411 | + | makeString([toString(hy), toString(hz), toString(((hs - hy) - hz)), toString(hs)], "_") | |
1412 | + | } | |
1413 | + | [hu[aV], if ((size(split(hu[aW], "_")) == aD)) | |
1414 | + | then hu[aW] | |
1415 | + | else "0_0_0_0_0_0", if ((size(split(hu[aX], "_")) == aD)) | |
1416 | + | then hu[aX] | |
1417 | + | else "0_0_0_0_0_0", hu[aY], hw] | |
1418 | + | } | |
1419 | + | ||
1420 | + | ||
1421 | + | func hA (hg) = { | |
1422 | + | let hB = hf(hg) | |
1423 | + | let hC = parseIntValue(split(hg[aZ], "_")[ba]) | |
1424 | + | ((hd(hg[aV]) - hB) - hC) | |
1425 | + | } | |
1426 | + | ||
1427 | + | ||
1428 | + | func hD (hE,hg,hF) = if ((size(hE) != 3)) | |
1416 | 1429 | then throw("cargoListStr should contain exactly 2 ':' separators") | |
1417 | 1430 | else { | |
1418 | - | let | |
1419 | - | let | |
1420 | - | let | |
1431 | + | let hG = split(hE[0], "_") | |
1432 | + | let hH = split(hE[1], "_") | |
1433 | + | let hI = if ((hE[2] == "")) | |
1421 | 1434 | then nil | |
1422 | - | else split_4C( | |
1423 | - | if ((size( | |
1435 | + | else split_4C(hE[2], "_") | |
1436 | + | if ((size(hG) != aD)) | |
1424 | 1437 | then throw("All 6 resources should be passed") | |
1425 | - | else if ((size( | |
1438 | + | else if ((size(hH) != aD)) | |
1426 | 1439 | then throw("All 6 materials should be passed") | |
1427 | 1440 | else { | |
1428 | - | let | |
1429 | - | let | |
1430 | - | let | |
1431 | - | let | |
1441 | + | let go = hA(hg) | |
1442 | + | let hJ = split(hg[aW], "_") | |
1443 | + | let hK = split(hg[aX], "_") | |
1444 | + | let hL = if ((hg[aY] == "")) | |
1432 | 1445 | then nil | |
1433 | - | else split_4C( | |
1434 | - | let | |
1435 | - | let | |
1436 | - | let | |
1446 | + | else split_4C(hg[aY], "_") | |
1447 | + | let gm = split(hF[bf], "_") | |
1448 | + | let hM = split(hF[bg], "_") | |
1449 | + | let hN = if ((hF[bh] == "")) | |
1437 | 1450 | then nil | |
1438 | - | else split_4C( | |
1439 | - | func | |
1440 | - | let | |
1441 | - | let | |
1442 | - | let | |
1443 | - | let | |
1444 | - | if (( | |
1445 | - | then $Tuple4(( | |
1446 | - | else if (( | |
1447 | - | then if (( | |
1448 | - | then throw((((("Attempt to take " + | |
1449 | - | else $Tuple4(( | |
1450 | - | else if ((-( | |
1451 | - | then throw((((("Attempt to take " + toString(-( | |
1452 | - | else $Tuple4(( | |
1451 | + | else split_4C(hF[bh], "_") | |
1452 | + | func hO (eg,hj) = { | |
1453 | + | let fZ = eg._1 | |
1454 | + | let hP = parseIntValue(hj) | |
1455 | + | let hQ = parseIntValue(hJ[fZ]) | |
1456 | + | let hR = parseIntValue(gm[fZ]) | |
1457 | + | if ((hP == 0)) | |
1458 | + | then $Tuple4((fZ + 1), (eg._2 :+ hJ[fZ]), (eg._3 :+ gm[fZ]), eg._4) | |
1459 | + | else if ((hP > 0)) | |
1460 | + | then if ((hP > hR)) | |
1461 | + | then throw((((("Attempt to take " + hj) + " from backpack, but only ") + toString(hR)) + " available")) | |
1462 | + | else $Tuple4((fZ + 1), (eg._2 :+ toString((hQ + hP))), (eg._3 :+ toString((hR - hP))), (eg._4 + hP)) | |
1463 | + | else if ((-(hP) > hQ)) | |
1464 | + | then throw((((("Attempt to take " + toString(-(hP))) + " from warehouse, but only ") + toString(hQ)) + " available")) | |
1465 | + | else $Tuple4((fZ + 1), (eg._2 :+ toString((hQ + hP))), (eg._3 :+ toString((hR - hP))), (eg._4 + hP)) | |
1453 | 1466 | } | |
1454 | 1467 | ||
1455 | - | let | |
1456 | - | let | |
1457 | - | let | |
1458 | - | let | |
1459 | - | func | |
1460 | - | then | |
1461 | - | else | |
1462 | - | ||
1463 | - | func | |
1464 | - | then | |
1468 | + | let er = { | |
1469 | + | let ei = hG | |
1470 | + | let ej = size(ei) | |
1471 | + | let ek = $Tuple4(0, nil, nil, 0) | |
1472 | + | func el (em,en) = if ((en >= ej)) | |
1473 | + | then em | |
1474 | + | else hO(em, ei[en]) | |
1475 | + | ||
1476 | + | func eo (em,en) = if ((en >= ej)) | |
1477 | + | then em | |
1465 | 1478 | else throw("List size exceeds 6") | |
1466 | 1479 | ||
1467 | - | | |
1480 | + | eo(el(el(el(el(el(el(ek, 0), 1), 2), 3), 4), 5), 6) | |
1468 | 1481 | } | |
1469 | - | func | |
1470 | - | let | |
1471 | - | let | |
1472 | - | let | |
1473 | - | let | |
1474 | - | if (( | |
1475 | - | then $Tuple4(( | |
1476 | - | else if (( | |
1477 | - | then if (( | |
1478 | - | then throw((((("Attempt to take " + | |
1479 | - | else $Tuple4(( | |
1480 | - | else if ((-( | |
1481 | - | then throw((((("Attempt to take " + toString(-( | |
1482 | - | else $Tuple4(( | |
1482 | + | func hS (eg,hj) = { | |
1483 | + | let fZ = eg._1 | |
1484 | + | let hP = parseIntValue(hj) | |
1485 | + | let hT = parseIntValue(hK[fZ]) | |
1486 | + | let hU = parseIntValue(hM[fZ]) | |
1487 | + | if ((hP == 0)) | |
1488 | + | then $Tuple4((fZ + 1), (eg._2 :+ hK[fZ]), (eg._3 :+ hM[fZ]), eg._4) | |
1489 | + | else if ((hP > 0)) | |
1490 | + | then if ((hP > hU)) | |
1491 | + | then throw((((("Attempt to take " + hj) + " from backpack, but only ") + toString(hU)) + " available")) | |
1492 | + | else $Tuple4((fZ + 1), (eg._2 :+ toString((hT + hP))), (eg._3 :+ toString((hU - hP))), (eg._4 + hP)) | |
1493 | + | else if ((-(hP) > hT)) | |
1494 | + | then throw((((("Attempt to take " + toString(-(hP))) + " from warehouse, but only ") + toString(hT)) + " available")) | |
1495 | + | else $Tuple4((fZ + 1), (eg._2 :+ toString((hT + hP))), (eg._3 :+ toString((hU - hP))), (eg._4 + hP)) | |
1483 | 1496 | } | |
1484 | 1497 | ||
1485 | - | let | |
1486 | - | let | |
1487 | - | let | |
1488 | - | let | |
1489 | - | func | |
1490 | - | then | |
1491 | - | else | |
1492 | - | ||
1493 | - | func | |
1494 | - | then | |
1498 | + | let fF = { | |
1499 | + | let ei = hH | |
1500 | + | let ej = size(ei) | |
1501 | + | let ek = $Tuple4(0, nil, nil, er._4) | |
1502 | + | func gW (em,en) = if ((en >= ej)) | |
1503 | + | then em | |
1504 | + | else hS(em, ei[en]) | |
1505 | + | ||
1506 | + | func gX (em,en) = if ((en >= ej)) | |
1507 | + | then em | |
1495 | 1508 | else throw("List size exceeds 6") | |
1496 | 1509 | ||
1497 | - | | |
1510 | + | gX(gW(gW(gW(gW(gW(gW(ek, 0), 1), 2), 3), 4), 5), 6) | |
1498 | 1511 | } | |
1499 | - | func | |
1500 | - | let | |
1501 | - | let | |
1502 | - | let | |
1503 | - | then parseIntValue( | |
1512 | + | func hV (eg,hj) = { | |
1513 | + | let fZ = eg._1 | |
1514 | + | let hP = parseIntValue(hj) | |
1515 | + | let hW = if ((size(hL) > fZ)) | |
1516 | + | then parseIntValue(hL[fZ]) | |
1504 | 1517 | else 0 | |
1505 | - | let | |
1506 | - | then parseIntValue( | |
1518 | + | let hX = if ((size(hN) > fZ)) | |
1519 | + | then parseIntValue(hN[fZ]) | |
1507 | 1520 | else 0 | |
1508 | - | if (( | |
1509 | - | then $Tuple4(( | |
1510 | - | else if (( | |
1511 | - | then if (( | |
1512 | - | then throw((((("Attempt to take " + | |
1521 | + | if ((hP == 0)) | |
1522 | + | then $Tuple4((fZ + 1), (eg._2 :+ toString(hW)), (eg._3 :+ toString(hX)), eg._4) | |
1523 | + | else if ((hP > 0)) | |
1524 | + | then if ((hP > hX)) | |
1525 | + | then throw((((("Attempt to take " + hj) + " from backpack, but only ") + toString(hX)) + " available")) | |
1513 | 1526 | else { | |
1514 | - | let | |
1515 | - | $Tuple4(( | |
1527 | + | let fi = (dW((hW + hP), aU) - dW(hW, aU)) | |
1528 | + | $Tuple4((fZ + 1), (eg._2 :+ toString((hW + hP))), (eg._3 :+ toString((hX - hP))), (eg._4 + fi)) | |
1516 | 1529 | } | |
1517 | - | else if ((-( | |
1518 | - | then throw((((("Attempt to take " + toString(-( | |
1530 | + | else if ((-(hP) > hW)) | |
1531 | + | then throw((((("Attempt to take " + toString(-(hP))) + " from warehouse, but only ") + toString(hW)) + " available")) | |
1519 | 1532 | else { | |
1520 | - | let | |
1521 | - | $Tuple4(( | |
1533 | + | let fi = (dW((hW + hP), aU) - dW(hW, aU)) | |
1534 | + | $Tuple4((fZ + 1), (eg._2 :+ toString((hW + hP))), (eg._3 :+ toString((hX - hP))), (eg._4 + fi)) | |
1522 | 1535 | } | |
1523 | 1536 | } | |
1524 | 1537 | ||
1525 | - | let | |
1538 | + | let fJ = if ((size(hI) != 0)) | |
1526 | 1539 | then { | |
1527 | - | let | |
1528 | - | let | |
1529 | - | let | |
1530 | - | func | |
1531 | - | then | |
1532 | - | else | |
1533 | - | ||
1534 | - | func | |
1535 | - | then | |
1540 | + | let ei = hI | |
1541 | + | let ej = size(ei) | |
1542 | + | let ek = $Tuple4(0, nil, nil, fF._4) | |
1543 | + | func gZ (em,en) = if ((en >= ej)) | |
1544 | + | then em | |
1545 | + | else hV(em, ei[en]) | |
1546 | + | ||
1547 | + | func ha (em,en) = if ((en >= ej)) | |
1548 | + | then em | |
1536 | 1549 | else throw("List size exceeds 50") | |
1537 | 1550 | ||
1538 | - | | |
1551 | + | ha(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(gZ(ek, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50) | |
1539 | 1552 | } | |
1540 | - | else $Tuple4(0, | |
1541 | - | let | |
1542 | - | if (( | |
1543 | - | then throw((((("Attempt to put total " + toString( | |
1544 | - | else $Tuple7(makeString( | |
1553 | + | else $Tuple4(0, hL, hN, fF._4) | |
1554 | + | let hY = fJ._4 | |
1555 | + | if ((hY > go)) | |
1556 | + | then throw((((("Attempt to put total " + toString(hY)) + " stuff, but only ") + toString(go)) + " warehouse space left")) | |
1557 | + | else $Tuple7(makeString(er._2, "_"), makeString(fF._2, "_"), makeString_2C(fJ._2, "_"), makeString(er._3, "_"), makeString(fF._3, "_"), makeString_2C(fJ._3, "_"), hY) | |
1545 | 1558 | } | |
1546 | 1559 | } | |
1547 | 1560 | ||
1548 | 1561 | ||
1549 | - | func | |
1550 | - | let | |
1551 | - | let | |
1552 | - | let | |
1553 | - | let | |
1554 | - | let | |
1555 | - | let | |
1556 | - | let | |
1557 | - | let | |
1558 | - | let | |
1559 | - | let | |
1560 | - | $Tuple2([IntegerEntry( | |
1561 | - | } | |
1562 | - | ||
1563 | - | ||
1564 | - | func | |
1562 | + | func hZ (ia,ib) = { | |
1563 | + | let bH = toString(ia) | |
1564 | + | let ic = gu(toBigInt(ib)) | |
1565 | + | let id = valueOrElse(getInteger(dE()), (dD + 1)) | |
1566 | + | let dI = toString(id) | |
1567 | + | let gD = toInt((ic % dx)) | |
1568 | + | let gc = gB(ic, gD) | |
1569 | + | let cW = aM[gD] | |
1570 | + | let ie = Issue(dV(dI, "S"), makeString([dI, "S", gc, cW], "_"), 1, 0, false) | |
1571 | + | let bk = calculateAssetId(ie) | |
1572 | + | let if = toBase58String(bk) | |
1573 | + | $Tuple2([IntegerEntry(dE(), (id + 1)), ie, StringEntry(dH(dI), if), StringEntry(bj(if), bH), StringEntry(dK(dI), bH), IntegerEntry(bt(if), 0), IntegerEntry(dJ(if, bH), 0), ScriptTransfer(ia, 1, bk)], $Tuple2(if, cW)) | |
1574 | + | } | |
1575 | + | ||
1576 | + | ||
1577 | + | func ig (bH,ih,ii) = if (!(sigVerify_8Kb(ih, ii, dp))) | |
1565 | 1578 | then throw("signature does not match") | |
1566 | 1579 | else { | |
1567 | - | let | |
1568 | - | let | |
1569 | - | let | |
1570 | - | let | |
1571 | - | let | |
1572 | - | let | |
1573 | - | let | |
1574 | - | let | |
1575 | - | if (if (( | |
1580 | + | let eE = split(toUtf8String(ih), ";") | |
1581 | + | let ij = split(eE[0], "|") | |
1582 | + | let ik = split(ij[dR], "_") | |
1583 | + | let il = parseIntValue(ik[0]) | |
1584 | + | let im = parseIntValue(ik[1]) | |
1585 | + | let in = split(eE[1], ":") | |
1586 | + | let io = in[0] | |
1587 | + | let ip = parseIntValue(ij[dS]) | |
1588 | + | if (if ((ip > (lastBlock.timestamp + dr))) | |
1576 | 1589 | then true | |
1577 | - | else ((lastBlock.timestamp - | |
1578 | - | then throw(((("signature outdated: logTime=" + toString( | |
1590 | + | else ((lastBlock.timestamp - dr) > ip)) | |
1591 | + | then throw(((("signature outdated: logTime=" + toString(ip)) + ", bcTime=") + toString(lastBlock.timestamp))) | |
1579 | 1592 | else { | |
1580 | - | let | |
1581 | - | let | |
1582 | - | if (( | |
1583 | - | then throw(((("Tx ids don't match! In state: " + | |
1593 | + | let iq = in[1] | |
1594 | + | let ir = valueOrElse(getString(bi(bH)), "") | |
1595 | + | if ((ir != iq)) | |
1596 | + | then throw(((("Tx ids don't match! In state: " + ir) + ", in msg: ") + iq)) | |
1584 | 1597 | else { | |
1585 | - | let | |
1586 | - | let | |
1587 | - | let | |
1588 | - | let | |
1589 | - | if (( | |
1590 | - | then throw(((("oldHealth=" + toString( | |
1591 | - | else if ((0 >= | |
1598 | + | let z = valueOrErrorMessage(getString(bC(bH)), "You don't have a duck staked") | |
1599 | + | let is = y(z) | |
1600 | + | let it = ae(valueOrElse(getInteger(C(z)), 0)) | |
1601 | + | let iu = valueOrElse(getInteger(is), it) | |
1602 | + | if ((iu != il)) | |
1603 | + | then throw(((("oldHealth=" + toString(iu)) + " from state does not match one from flight log=") + toString(il))) | |
1604 | + | else if ((0 >= il)) | |
1592 | 1605 | then throw("You can't fly with zero health") | |
1593 | - | else if (!( | |
1606 | + | else if (!(fL(z))) | |
1594 | 1607 | then throw("Equipment incompatible") | |
1595 | 1608 | else { | |
1596 | - | let | |
1597 | - | then | |
1609 | + | let iv = if ((size(ij) > dT)) | |
1610 | + | then ij[dT] | |
1598 | 1611 | else "" | |
1599 | - | let | |
1600 | - | then | |
1612 | + | let iw = if ((size(ij) > dU)) | |
1613 | + | then ij[dU] | |
1601 | 1614 | else "" | |
1602 | - | let | |
1603 | - | then ( | |
1615 | + | let ix = if (if ((im > 0)) | |
1616 | + | then (iv == "$") | |
1604 | 1617 | else false) | |
1605 | - | then | |
1618 | + | then dc(invoke(cH, "sendUsdtPrize", [bH], nil)) | |
1606 | 1619 | else 0 | |
1607 | - | $Tuple5( | |
1620 | + | $Tuple5(im, z, ix, io, iw) | |
1608 | 1621 | } | |
1609 | 1622 | } | |
1610 | 1623 | } | |
1611 | 1624 | } | |
1612 | 1625 | ||
1613 | 1626 | ||
1614 | - | func | |
1615 | - | let | |
1616 | - | let | |
1617 | - | let | |
1618 | - | let | |
1619 | - | let | |
1620 | - | let | |
1621 | - | let | |
1622 | - | let | |
1623 | - | let | |
1624 | - | let | |
1625 | - | let | |
1626 | - | let | |
1627 | - | let | |
1628 | - | if ((0 >= | |
1629 | - | then $Tuple3([IntegerEntry( | |
1627 | + | func iy (ia,ib,ih,ii) = { | |
1628 | + | let bH = toString(ia) | |
1629 | + | let gE = ig(bH, ih, ii) | |
1630 | + | let z = gE._2 | |
1631 | + | let is = y(z) | |
1632 | + | let hc = bD(z) | |
1633 | + | let hF = hb(hc) | |
1634 | + | let iz = split(hF[bg], "_") | |
1635 | + | let iA = makeString(es(true, iz, dv), "_") | |
1636 | + | let fM = E(z) | |
1637 | + | let iB = valueOrElse(getString(fM), ",;,_,;,_,;,_,;,_,;,_,;,") | |
1638 | + | let iC = ez(iB, gE._5) | |
1639 | + | let iD = iC._1 | |
1640 | + | let iE = iC._2 | |
1641 | + | if ((0 >= gE._1)) | |
1642 | + | then $Tuple3([IntegerEntry(is, 0), StringEntry(fM, iD)], "", 0) | |
1630 | 1643 | else { | |
1631 | - | let | |
1632 | - | let | |
1633 | - | $Tuple3(( | |
1634 | - | then [StringEntry( | |
1635 | - | else ((((nil :+ StringEntry( | |
1636 | - | } | |
1637 | - | } | |
1638 | - | ||
1639 | - | ||
1640 | - | func | |
1641 | - | let | |
1642 | - | let | |
1643 | - | let | |
1644 | - | let | |
1645 | - | (( | |
1646 | - | } | |
1647 | - | ||
1648 | - | ||
1649 | - | func | |
1650 | - | let | |
1651 | - | then $Tuple2( | |
1644 | + | let iF = hZ(ia, ib) | |
1645 | + | let if = iF._2._1 | |
1646 | + | $Tuple3((iF._1 ++ (if (iE) | |
1647 | + | then [StringEntry(K(z), "0_0_0_0_0")] | |
1648 | + | else ((((nil :+ StringEntry(bE(z), makeString([iF._2._2, "L", if], "_"))) :+ IntegerEntry(is, gE._1)) :+ StringEntry(fM, iD)) :+ StringEntry(hc, makeString([hF[be], hF[bf], iA, hF[bh]], ":"))))), if, gE._3) | |
1649 | + | } | |
1650 | + | } | |
1651 | + | ||
1652 | + | ||
1653 | + | func iG (O,iH) = { | |
1654 | + | let hr = valueOrElse(getInteger(bt(O)), 0) | |
1655 | + | let iI = valueOrElse(getInteger(bn(aC, O)), 0) | |
1656 | + | let iJ = (hr / 6) | |
1657 | + | let iK = (hr / 7) | |
1658 | + | ((aF + fraction(aF, ((hr + iJ) + (2 * iK)), 5)) + fraction(aF, iI, (iH * 5))) | |
1659 | + | } | |
1660 | + | ||
1661 | + | ||
1662 | + | func iL (b,iM,iN) = { | |
1663 | + | let iO = if ((iM == dO)) | |
1664 | + | then $Tuple2(iN, valueOrElse(getString(bC(b)), "")) | |
1652 | 1665 | else { | |
1653 | - | let | |
1654 | - | let | |
1655 | - | let | |
1656 | - | if (( | |
1657 | - | then throw((("Duck location type is " + | |
1658 | - | else $Tuple2( | |
1659 | - | } | |
1660 | - | let | |
1661 | - | let | |
1662 | - | let | |
1663 | - | let | |
1664 | - | let | |
1665 | - | let | |
1666 | - | if (( | |
1667 | - | then throw(( | |
1666 | + | let z = valueOrErrorMessage(getString(bC(b)), "You don't have a duck staked") | |
1667 | + | let iP = valueOrElse(getString(bE(z)), aI) | |
1668 | + | let iQ = split(value(iP), "_") | |
1669 | + | if ((iQ[bX] != "L")) | |
1670 | + | then throw((("Duck location type is " + iQ[bX]) + ", but should be L")) | |
1671 | + | else $Tuple2(iQ[bY], z) | |
1672 | + | } | |
1673 | + | let O = iO._1 | |
1674 | + | let iR = iO._2 | |
1675 | + | let iS = value(assetInfo(fromBase58String(O))) | |
1676 | + | let iT = bm(O) | |
1677 | + | let iU = valueOrErrorMessage(getInteger(iT), (("Land " + iS.name) + " is not staked")) | |
1678 | + | let iV = valueOrErrorMessage(getString(bj(O)), (("NFT " + iS.name) + " is orphaned")) | |
1679 | + | if ((iV != b)) | |
1680 | + | then throw((aA + " is not yours")) | |
1668 | 1681 | else { | |
1669 | - | let | |
1670 | - | $Tuple4( | |
1671 | - | } | |
1672 | - | } | |
1673 | - | ||
1674 | - | ||
1675 | - | func | |
1682 | + | let iW = split(iS.description, "_") | |
1683 | + | $Tuple4(iR, O, iW, iU) | |
1684 | + | } | |
1685 | + | } | |
1686 | + | ||
1687 | + | ||
1688 | + | func iX (b,dX,iM,iN) = if ((0 > dX)) | |
1676 | 1689 | then throw("Negative amount") | |
1677 | 1690 | else { | |
1678 | - | let | |
1679 | - | let | |
1680 | - | let | |
1681 | - | let | |
1682 | - | if ((0 > | |
1683 | - | then throw(((("Saved timestamp is in future, saved = " + toString( | |
1691 | + | let fp = iL(b, iM, iN) | |
1692 | + | let df = fp._3[cN] | |
1693 | + | let fV = gb(fp._3[cO]) | |
1694 | + | let gf = (lastBlock.timestamp - fp._4) | |
1695 | + | if ((0 > gf)) | |
1696 | + | then throw(((("Saved timestamp is in future, saved = " + toString(fp._4)) + ", current = ") + toString(lastBlock.timestamp))) | |
1684 | 1697 | else { | |
1685 | - | let | |
1686 | - | let | |
1687 | - | let | |
1688 | - | if (( | |
1689 | - | then throw(((("Not enough resources, available = " + toString( | |
1698 | + | let iH = de(df) | |
1699 | + | let iY = iG(fp._2, iH) | |
1700 | + | let iZ = fraction(gf, (iY * iH), aG) | |
1701 | + | if ((dX > iZ)) | |
1702 | + | then throw(((("Not enough resources, available = " + toString(iZ)) + ", requested = ") + toString(dX))) | |
1690 | 1703 | else { | |
1691 | - | let | |
1692 | - | let | |
1693 | - | let | |
1694 | - | let | |
1695 | - | let | |
1696 | - | let | |
1697 | - | let | |
1698 | - | let | |
1699 | - | let | |
1700 | - | if (if (( | |
1701 | - | then ( | |
1704 | + | let ja = fraction((iZ - dX), aG, (iY * iH)) | |
1705 | + | let jb = (lastBlock.timestamp - ja) | |
1706 | + | let hq = (iH / cm) | |
1707 | + | let gn = gj(fV, (gf - ja), hq, iY) | |
1708 | + | let hp = bs(fp._2) | |
1709 | + | let hr = valueOrElse(getInteger(bt(fp._2)), 0) | |
1710 | + | let hg = ho(hp, hq, hr) | |
1711 | + | let hx = split(hg[aZ], "_") | |
1712 | + | let go = parseIntValue(hx[bc]) | |
1713 | + | if (if ((iM == dO)) | |
1714 | + | then (dX > go) | |
1702 | 1715 | else false) | |
1703 | - | then throw((("Only " + toString( | |
1716 | + | then throw((("Only " + toString(go)) + " space left in warehouse")) | |
1704 | 1717 | else { | |
1705 | - | let | |
1706 | - | let | |
1707 | - | let | |
1708 | - | let | |
1709 | - | let | |
1710 | - | then $Tuple4( | |
1711 | - | else if (( | |
1712 | - | then $Tuple4( | |
1718 | + | let hc = bD(fp._1) | |
1719 | + | let hF = hb(hc) | |
1720 | + | let gm = split(hF[bf], "_") | |
1721 | + | let gl = split(hg[aW], "_") | |
1722 | + | let jc = if ((iM == dO)) | |
1723 | + | then $Tuple4(gd(gl, fV, (gf - ja), hq, iY), hF[bf], (parseIntValue(hx[bb]) + gn._2), (parseIntValue(hx[bc]) - gn._2)) | |
1724 | + | else if ((iM == dP)) | |
1725 | + | then $Tuple4(hg[aW], gd(gm, fV, (gf - ja), hq, iY), parseIntValue(hx[bb]), parseIntValue(hx[bc])) | |
1713 | 1726 | else { | |
1714 | - | let | |
1715 | - | let | |
1716 | - | $Tuple4( | |
1727 | + | let jd = gk(gl, gm, gn, go) | |
1728 | + | let je = min([parseIntValue(hx[bc]), gn._2]) | |
1729 | + | $Tuple4(jd._1, jd._2, (parseIntValue(hx[bb]) + je), (parseIntValue(hx[bc]) - je)) | |
1717 | 1730 | } | |
1718 | - | let | |
1719 | - | let | |
1720 | - | let | |
1721 | - | let | |
1722 | - | $Tuple5([IntegerEntry( | |
1731 | + | let jf = jc._1 | |
1732 | + | let jg = jc._2 | |
1733 | + | let jh = jc._3 | |
1734 | + | let ji = jc._4 | |
1735 | + | $Tuple5([IntegerEntry(bm(fp._2), jb), IntegerEntry(bp(aA, fp._2, b), jb)], hc, [hF[be], jg, hF[bg], hF[bh]], hp, [hg[aV], jf, hg[aX], hg[aY], makeString([hx[ba], toString(jh), toString(ji), hx[bd]], "_")]) | |
1723 | 1736 | } | |
1724 | 1737 | } | |
1725 | 1738 | } | |
1726 | 1739 | } | |
1727 | 1740 | ||
1728 | 1741 | ||
1729 | - | func | |
1730 | - | let | |
1731 | - | let | |
1732 | - | let | |
1733 | - | | |
1734 | - | } | |
1735 | - | ||
1736 | - | ||
1737 | - | func | |
1738 | - | let b = toString( | |
1739 | - | let | |
1740 | - | let | |
1741 | - | let | |
1742 | - | let | |
1743 | - | if (if (!( | |
1744 | - | then ( | |
1742 | + | func jj (b,O,iH,iM) = { | |
1743 | + | let iT = bm(O) | |
1744 | + | let iU = value(getInteger(iT)) | |
1745 | + | let iZ = (fraction((lastBlock.timestamp - iU), iG(O, iH), aG) * iH) | |
1746 | + | iX(b, iZ, iM, O) | |
1747 | + | } | |
1748 | + | ||
1749 | + | ||
1750 | + | func jk (et,ia,jl,O) = { | |
1751 | + | let b = toString(ia) | |
1752 | + | let fp = iL(b, dQ, O) | |
1753 | + | let iH = de(fp._3[cN]) | |
1754 | + | let jm = bt(fp._2) | |
1755 | + | let jn = valueOrElse(getInteger(jm), 0) | |
1756 | + | if (if (!(cc)) | |
1757 | + | then (jn >= 3) | |
1745 | 1758 | else false) | |
1746 | 1759 | then throw("Currently max infrastructure level = 3") | |
1747 | 1760 | else { | |
1748 | - | let | |
1749 | - | let | |
1750 | - | if (if ( | |
1751 | - | then ( | |
1761 | + | let jo = ((sqrt(iH, 0, 0, DOWN) / 5) + 2) | |
1762 | + | let aj = (jn + 1) | |
1763 | + | if (if (cc) | |
1764 | + | then (aj > jo) | |
1752 | 1765 | else false) | |
1753 | - | then throw(("Currently max infrastructure level = " + toString( | |
1766 | + | then throw(("Currently max infrastructure level = " + toString(jo))) | |
1754 | 1767 | else { | |
1755 | - | let | |
1756 | - | if (if (!( | |
1757 | - | then ( | |
1768 | + | let jp = fraction(du, (iH * aj), cm) | |
1769 | + | if (if (!(et)) | |
1770 | + | then (jl != jp) | |
1758 | 1771 | else false) | |
1759 | - | then throw(("Payment attached should be " + toString( | |
1772 | + | then throw(("Payment attached should be " + toString(jp))) | |
1760 | 1773 | else { | |
1761 | - | let | |
1762 | - | let | |
1763 | - | let | |
1764 | - | let | |
1765 | - | let | |
1766 | - | let | |
1767 | - | let | |
1768 | - | let | |
1769 | - | let | |
1770 | - | let | |
1771 | - | let | |
1772 | - | let | |
1773 | - | $Tuple3(([IntegerEntry( | |
1774 | + | let hc = bD(fp._1) | |
1775 | + | let hF = hb(hc) | |
1776 | + | let iz = split(hF[bg], "_") | |
1777 | + | let jq = fraction(ch, (iH * aj), cm) | |
1778 | + | let iA = makeString(es(et, iz, jq), "_") | |
1779 | + | let jr = jj(b, fp._2, iH, dQ) | |
1780 | + | let js = jr._5 | |
1781 | + | let jt = hd(js[aV]) | |
1782 | + | let ju = makeString([split(js[aV], "_")[0], toString(aj)], "_") | |
1783 | + | let jv = hd(ju) | |
1784 | + | let hx = split(js[aZ], "_") | |
1785 | + | let jw = makeString([hx[ba], hx[bb], toString(((parseIntValue(hx[bc]) + jv) - jt)), toString(jv)], "_") | |
1786 | + | $Tuple3(([IntegerEntry(jm, aj), IntegerEntry(dJ(fp._2, b), aj), StringEntry(hc, makeString([hF[be], jr._3[bf], iA, hF[bh]], ":")), StringEntry(jr._4, makeString([ju, js[aW], js[aX], js[aY], jw], ":"))] ++ jr._1), aj, jq) | |
1774 | 1787 | } | |
1775 | 1788 | } | |
1776 | 1789 | } | |
1777 | 1790 | } | |
1778 | 1791 | ||
1779 | 1792 | ||
1780 | - | func | |
1781 | - | let | |
1782 | - | let | |
1783 | - | let | |
1784 | - | let | |
1785 | - | let | |
1786 | - | let | |
1787 | - | $Tuple2([IntegerEntry( | |
1788 | - | } | |
1789 | - | ||
1790 | - | ||
1791 | - | func | |
1792 | - | let | |
1793 | - | let | |
1794 | - | let | |
1795 | - | let | |
1796 | - | let | |
1797 | - | let | |
1798 | - | $Tuple2([IntegerEntry( | |
1799 | - | } | |
1800 | - | ||
1801 | - | ||
1802 | - | func | |
1803 | - | let | |
1804 | - | let | |
1805 | - | let | |
1806 | - | if (!(isDefined( | |
1793 | + | func jx (z,jy) = { | |
1794 | + | let jz = C(z) | |
1795 | + | let jA = B(z) | |
1796 | + | let ad = valueOrElse(getInteger(al, jA), 0) | |
1797 | + | let ai = (ad + jy) | |
1798 | + | let jB = ag(valueOrElse(getInteger(al, jz), 0), ai) | |
1799 | + | let jC = D(z) | |
1800 | + | $Tuple2([IntegerEntry(jz, jB[0]), IntegerEntry(jA, ai), IntegerEntry(jC, (valueOrElse(getInteger(jC), 0) + jB[1]))], ai) | |
1801 | + | } | |
1802 | + | ||
1803 | + | ||
1804 | + | func jD (b,jy) = { | |
1805 | + | let jz = G(b) | |
1806 | + | let jA = F(b) | |
1807 | + | let ad = valueOrElse(getInteger(al, jA), 0) | |
1808 | + | let ai = (ad + jy) | |
1809 | + | let jB = ag(valueOrElse(getInteger(al, jz), 0), ai) | |
1810 | + | let jC = H(b) | |
1811 | + | $Tuple2([IntegerEntry(jz, jB[0]), IntegerEntry(jA, ai), IntegerEntry(jC, (valueOrElse(getInteger(jC), 0) + jB[1]))], ai) | |
1812 | + | } | |
1813 | + | ||
1814 | + | ||
1815 | + | func jE (b) = { | |
1816 | + | let z = valueOrErrorMessage(getString(bC(b)), "You don't have a duck staked") | |
1817 | + | let jF = bx(b) | |
1818 | + | let jG = getString(jF) | |
1819 | + | if (!(isDefined(jG))) | |
1807 | 1820 | then throw("You are not eligible for ONBOARD artifact") | |
1808 | 1821 | else { | |
1809 | - | let | |
1810 | - | let | |
1811 | - | if (isDefined( | |
1812 | - | then throw(("You already used your ONBOARD artifact on duck " + value( | |
1822 | + | let jH = bz(b) | |
1823 | + | let jI = getString(jH) | |
1824 | + | if (isDefined(jI)) | |
1825 | + | then throw(("You already used your ONBOARD artifact on duck " + value(jI))) | |
1813 | 1826 | else { | |
1814 | - | let | |
1815 | - | let | |
1816 | - | if (isDefined( | |
1817 | - | then throw(((("The duck " + | |
1818 | - | else ([StringEntry( | |
1827 | + | let jJ = by(z) | |
1828 | + | let jK = getString(jJ) | |
1829 | + | if (isDefined(jK)) | |
1830 | + | then throw(((("The duck " + z) + " already got points from ONBOARD artifact from user ") + value(jK))) | |
1831 | + | else ([StringEntry(jH, z), StringEntry(jJ, b)] ++ jx(z, aa)._1) | |
1819 | 1832 | } | |
1820 | 1833 | } | |
1821 | 1834 | } | |
1822 | 1835 | ||
1823 | 1836 | ||
1824 | - | func | |
1825 | - | let | |
1826 | - | let | |
1827 | - | let | |
1828 | - | let | |
1829 | - | if ((valueOrElse(getInteger( | |
1837 | + | func jL (b,iN) = { | |
1838 | + | let fp = iL(b, dQ, iN) | |
1839 | + | let O = fp._2 | |
1840 | + | let iH = de(fp._3[cN]) | |
1841 | + | let jM = bn(aC, O) | |
1842 | + | if ((valueOrElse(getInteger(jM), 0) > 0)) | |
1830 | 1843 | then throw("Presale artifact is already activated") | |
1831 | - | else if ((parseIntValue( | |
1832 | - | then throw(((( | |
1844 | + | else if ((parseIntValue(fp._3[cM]) > dD)) | |
1845 | + | then throw((((aA + " ") + O) + " is not eligible for presale artifact")) | |
1833 | 1846 | else { | |
1834 | - | let | |
1835 | - | ((( | |
1847 | + | let jr = jj(b, O, iH, dQ) | |
1848 | + | (((jr._1 :+ IntegerEntry(jM, iH)) :+ StringEntry(jr._2, makeString(jr._3, ":"))) :+ StringEntry(jr._4, makeString(jr._5, ":"))) | |
1836 | 1849 | } | |
1837 | 1850 | } | |
1838 | 1851 | ||
1839 | 1852 | ||
1840 | - | func | |
1841 | - | let | |
1842 | - | let | |
1843 | - | let | |
1844 | - | let | |
1845 | - | let | |
1846 | - | let | |
1847 | - | if (( | |
1853 | + | func jN (z) = { | |
1854 | + | let jO = valueOrElse(getInteger(cL, bJ), 0) | |
1855 | + | let iP = split(valueOrElse(getString(bE(z)), aI), "_") | |
1856 | + | let av = lastBlock.timestamp | |
1857 | + | let jP = bP(cL, jO) | |
1858 | + | let bR = jP[bN] | |
1859 | + | let bS = jP[bO] | |
1860 | + | if ((iP[bX] != "T")) | |
1848 | 1861 | then false | |
1849 | 1862 | else { | |
1850 | - | let | |
1851 | - | then ( | |
1863 | + | let ey = if (if (if ((parseIntValue(iP[bW]) == jO)) | |
1864 | + | then (bS[bU] == "INPROGRESS") | |
1852 | 1865 | else false) | |
1853 | - | then (parseIntValue( | |
1866 | + | then (parseIntValue(bR[bT]) > av) | |
1854 | 1867 | else false) | |
1855 | 1868 | then throw("Your duck is taking part in the tournament") | |
1856 | - | else invoke(this, "exitTournamentInternal", [ | |
1857 | - | if (( | |
1869 | + | else invoke(this, "exitTournamentInternal", [z], nil) | |
1870 | + | if ((ey == ey)) | |
1858 | 1871 | then false | |
1859 | 1872 | else throw("Strict value is not equal to itself.") | |
1860 | 1873 | } | |
1861 | 1874 | } | |
1862 | 1875 | ||
1863 | 1876 | ||
1864 | - | func | |
1865 | - | let | |
1866 | - | if ( | |
1877 | + | func jQ (jR,aj,jS,b,jT,jU) = { | |
1878 | + | let z = valueOrErrorMessage(getString(bC(b)), "You don't have a duck staked") | |
1879 | + | if (jN(z)) | |
1867 | 1880 | then throw("mergeInternal_checkTournament") | |
1868 | 1881 | else { | |
1869 | - | func | |
1870 | - | let | |
1871 | - | let | |
1872 | - | let | |
1873 | - | let | |
1874 | - | if (( | |
1875 | - | then throw(( | |
1882 | + | func jV (eg,O) = { | |
1883 | + | let iS = value(assetInfo(fromBase58String(O))) | |
1884 | + | let iT = bm(O) | |
1885 | + | let iU = valueOrErrorMessage(getInteger(iT), (("NFT " + iS.name) + " is not staked")) | |
1886 | + | let iV = valueOrErrorMessage(getString(bj(O)), (("NFT " + iS.name) + " is orphaned")) | |
1887 | + | if ((iV != b)) | |
1888 | + | then throw((aA + " is not yours")) | |
1876 | 1889 | else { | |
1877 | - | let | |
1878 | - | let | |
1879 | - | if (if (( | |
1880 | - | then ( | |
1890 | + | let iW = split(iS.description, "_") | |
1891 | + | let cW = iW[cP] | |
1892 | + | if (if ((eg._3 != "")) | |
1893 | + | then (eg._3 != cW) | |
1881 | 1894 | else false) | |
1882 | 1895 | then throw("Lands should be on the same continent to merge") | |
1883 | 1896 | else { | |
1884 | - | let | |
1885 | - | let | |
1886 | - | let | |
1887 | - | let | |
1888 | - | let | |
1889 | - | let | |
1890 | - | let | |
1891 | - | let | |
1892 | - | let | |
1893 | - | if (("S" == | |
1897 | + | let df = iW[cN] | |
1898 | + | let jW = eg._1 | |
1899 | + | let fZ = valueOrErrorMessage(indexOf(jW, df), "You haven't passed all the lands needed") | |
1900 | + | let jX = (take(jW, fZ) + drop(jW, (fZ + 1))) | |
1901 | + | let iH = de(df) | |
1902 | + | let jY = (eg._2 + valueOrElse(getInteger(bn(aC, O)), 0)) | |
1903 | + | let hr = valueOrElse(getInteger(bt(O)), 0) | |
1904 | + | let jZ = { | |
1905 | + | let cf = df | |
1906 | + | if (("S" == cf)) | |
1894 | 1907 | then 3 | |
1895 | - | else if (("M" == | |
1908 | + | else if (("M" == cf)) | |
1896 | 1909 | then 4 | |
1897 | - | else if (("L" == | |
1910 | + | else if (("L" == cf)) | |
1898 | 1911 | then 5 | |
1899 | - | else if (("XL" == | |
1912 | + | else if (("XL" == cf)) | |
1900 | 1913 | then 6 | |
1901 | 1914 | else throw("Only S, M, L, XL can merge") | |
1902 | 1915 | } | |
1903 | - | if (( | |
1916 | + | if ((hr != jZ)) | |
1904 | 1917 | then throw("All lands should be maxed to merge") | |
1905 | 1918 | else { | |
1906 | - | let | |
1907 | - | let | |
1908 | - | let | |
1909 | - | if ((0 > | |
1910 | - | then throw(((("Saved timestamp is in future, saved = " + toString( | |
1919 | + | let dI = iW[cM] | |
1920 | + | let fV = gb(iW[cO]) | |
1921 | + | let gf = (lastBlock.timestamp - iU) | |
1922 | + | if ((0 > gf)) | |
1923 | + | then throw(((("Saved timestamp is in future, saved = " + toString(iU)) + ", current = ") + toString(lastBlock.timestamp))) | |
1911 | 1924 | else { | |
1912 | - | let | |
1913 | - | let | |
1914 | - | let | |
1915 | - | let | |
1916 | - | let | |
1917 | - | let | |
1918 | - | let | |
1919 | - | let | |
1920 | - | if (!(isDefined( | |
1921 | - | then throw(("Your staked lands don't contain " + | |
1925 | + | let iY = iG(O, iH) | |
1926 | + | let hq = (iH / cm) | |
1927 | + | let jg = gd(split(eg._4, "_"), fV, gf, hq, iY) | |
1928 | + | let eq = fT(eg._6, fV, hq, -1) | |
1929 | + | let ka = fT(eg._10, fV, hq, -1) | |
1930 | + | let gJ = fT(eg._9, fV, hq, 1) | |
1931 | + | let kb = eg._7 | |
1932 | + | let cG = indexOf(kb, O) | |
1933 | + | if (!(isDefined(cG))) | |
1934 | + | then throw(("Your staked lands don't contain " + O)) | |
1922 | 1935 | else { | |
1923 | - | let | |
1924 | - | let | |
1925 | - | $Tuple10( | |
1926 | - | then [DeleteEntry( | |
1927 | - | else nil)), | |
1936 | + | let kc = bl(O) | |
1937 | + | let kd = valueOrElse(getString(kc), "") | |
1938 | + | $Tuple10(jX, jY, cW, jg, ((((((((((((eg._5 :+ DeleteEntry(bm(O))) :+ DeleteEntry(bp(aA, O, b))) :+ DeleteEntry(dH(dI))) :+ DeleteEntry(bj(O))) :+ DeleteEntry(bt(O))) :+ DeleteEntry(dJ(O, b))) :+ DeleteEntry(bn(aC, O))) :+ DeleteEntry(dK(dI))) :+ DeleteEntry(bs(O))) :+ DeleteEntry(kc)) :+ Burn(fromBase58String(O), 1)) ++ (if ((kd != "")) | |
1939 | + | then [DeleteEntry(dF(kd))] | |
1940 | + | else nil)), eq, removeByIndex(kb, value(cG)), (eg._8 + iH), gJ, ka) | |
1928 | 1941 | } | |
1929 | 1942 | } | |
1930 | 1943 | } | |
1931 | 1944 | } | |
1932 | 1945 | } | |
1933 | 1946 | } | |
1934 | 1947 | ||
1935 | - | let | |
1936 | - | let | |
1937 | - | let | |
1938 | - | let | |
1939 | - | let | |
1940 | - | let | |
1941 | - | then split_51C(value( | |
1948 | + | let hc = bD(z) | |
1949 | + | let hF = hb(hc) | |
1950 | + | let fU = split(valueOrElse(getString(cU()), "0_0_0_0_0_0"), "_") | |
1951 | + | let ke = cX(b) | |
1952 | + | let kf = getString(ke) | |
1953 | + | let kg = if (isDefined(kf)) | |
1954 | + | then split_51C(value(kf), "_") | |
1942 | 1955 | else nil | |
1943 | - | let | |
1944 | - | let | |
1945 | - | let | |
1946 | - | let | |
1947 | - | let | |
1948 | - | let | |
1949 | - | func | |
1950 | - | then | |
1951 | - | else | |
1952 | - | ||
1953 | - | func | |
1954 | - | then | |
1956 | + | let kh = split(value(assetInfo(fromBase58String(jT[0]))).description, "_")[cP] | |
1957 | + | let ki = split(valueOrElse(getString(cV(kh)), "0_0_0_0_0_0"), "_") | |
1958 | + | let er = { | |
1959 | + | let ei = jT | |
1960 | + | let ej = size(ei) | |
1961 | + | let ek = $Tuple10(jS, 0, "", hF[bf], nil, fU, kg, 0, split("0_0_0_0_0_0", "_"), ki) | |
1962 | + | func el (em,en) = if ((en >= ej)) | |
1963 | + | then em | |
1964 | + | else jV(em, ei[en]) | |
1965 | + | ||
1966 | + | func eo (em,en) = if ((en >= ej)) | |
1967 | + | then em | |
1955 | 1968 | else throw("List size exceeds 5") | |
1956 | 1969 | ||
1957 | - | | |
1970 | + | eo(el(el(el(el(el(ek, 0), 1), 2), 3), 4), 5) | |
1958 | 1971 | } | |
1959 | - | let | |
1960 | - | let | |
1961 | - | let | |
1962 | - | let | |
1963 | - | let | |
1964 | - | let | |
1965 | - | let | |
1966 | - | let | |
1967 | - | let | |
1968 | - | let | |
1969 | - | let | |
1970 | - | $Tuple2(((((((((((((((( | |
1971 | - | then StringEntry( | |
1972 | - | else DeleteEntry( | |
1972 | + | let cW = er._3 | |
1973 | + | let gD = valueOrErrorMessage(indexOf(aM, cW), ("Unknown continent: " + cW)) | |
1974 | + | let gc = gI(er._9, (de(jR) / cm)) | |
1975 | + | let id = valueOrElse(getInteger(dE()), (dD + 1)) | |
1976 | + | let kj = toString(id) | |
1977 | + | let ie = Issue(dV(kj, jR), makeString([kj, jR, gc, cW], "_"), 1, 0, false) | |
1978 | + | let bk = calculateAssetId(ie) | |
1979 | + | let kk = toBase58String(bk) | |
1980 | + | let iA = makeString(es((jU > 0), split(hF[bg], "_"), jU), "_") | |
1981 | + | let kl = cY(b) | |
1982 | + | let km = valueOrElse(getInteger(kl), 0) | |
1983 | + | $Tuple2((((((((((((((((er._5 :+ (if ((size(er._7) > 0)) | |
1984 | + | then StringEntry(ke, makeString_11C(er._7, "_")) | |
1985 | + | else DeleteEntry(ke))) :+ IntegerEntry(kl, if ((er._8 > km)) | |
1973 | 1986 | then 0 | |
1974 | - | else ( | |
1975 | - | } | |
1976 | - | } | |
1977 | - | ||
1978 | - | ||
1979 | - | func | |
1980 | - | ||
1981 | - | ||
1982 | - | func | |
1983 | - | ||
1984 | - | ||
1985 | - | func | |
1986 | - | ||
1987 | - | ||
1988 | - | func | |
1989 | - | ||
1990 | - | ||
1991 | - | func | |
1992 | - | let | |
1993 | - | if ((4 == | |
1994 | - | then | |
1995 | - | else if ((3 == | |
1996 | - | then | |
1997 | - | else if ((5 == | |
1998 | - | then | |
1999 | - | else if ((2 == | |
2000 | - | then | |
1987 | + | else (km - er._8))) :+ IntegerEntry(dE(), (id + 1))) :+ ie) :+ StringEntry(dH(kj), kk)) :+ StringEntry(bj(kk), b)) :+ StringEntry(dK(kj), b)) :+ IntegerEntry(bn(aC, kk), er._2)) :+ IntegerEntry(bt(kk), aj)) :+ IntegerEntry(dJ(kk, b), aj)) :+ StringEntry(hc, makeString([hF[be], er._4, iA, hF[bh]], ":"))) :+ StringEntry(cU(), makeString(er._6, "_"))) :+ StringEntry(cV(cW), makeString(er._10, "_"))) :+ StringEntry(bE(z), makeString([cW, "L", kk], "_"))) :+ ScriptTransfer(addressFromStringValue(b), 1, bk)), kk) | |
1988 | + | } | |
1989 | + | } | |
1990 | + | ||
1991 | + | ||
1992 | + | func kn (b,jT) = jQ("M", 3, "SSSS", b, jT, 0) | |
1993 | + | ||
1994 | + | ||
1995 | + | func ko (b,jT) = jQ("L", 4, "SMM", b, jT, (ch * 4)) | |
1996 | + | ||
1997 | + | ||
1998 | + | func kp (b,jT) = jQ("XL", 5, "SSSML", b, jT, (ch * 47)) | |
1999 | + | ||
2000 | + | ||
2001 | + | func kq (b,jT) = jQ("XXL", 6, "LXL", b, jT, (ch * 54)) | |
2002 | + | ||
2003 | + | ||
2004 | + | func kr (b,jT) = { | |
2005 | + | let cf = size(jT) | |
2006 | + | if ((4 == cf)) | |
2007 | + | then kn(b, jT) | |
2008 | + | else if ((3 == cf)) | |
2009 | + | then ko(b, jT) | |
2010 | + | else if ((5 == cf)) | |
2011 | + | then kp(b, jT) | |
2012 | + | else if ((2 == cf)) | |
2013 | + | then kq(b, jT) | |
2001 | 2014 | else throw("Unknown merge") | |
2002 | 2015 | } | |
2003 | 2016 | ||
2004 | 2017 | ||
2005 | - | func | |
2006 | - | then valueOrElse(getBoolean( | |
2018 | + | func ks (fZ) = if (if ((fZ.originCaller != cH)) | |
2019 | + | then valueOrElse(getBoolean(bF()), false) | |
2007 | 2020 | else false) | |
2008 | 2021 | then throw("Contracts are under maintenance") | |
2009 | - | else StringEntry( | |
2010 | - | ||
2011 | - | ||
2012 | - | @Callable( | |
2013 | - | func constructorV1 ( | |
2022 | + | else StringEntry(bi(toString(fZ.originCaller)), toBase58String(fZ.transactionId)) | |
2023 | + | ||
2024 | + | ||
2025 | + | @Callable(fZ) | |
2026 | + | func constructorV1 (kt) = if ((fZ.caller != this)) | |
2014 | 2027 | then throw("Permission denied") | |
2015 | - | else [StringEntry( | |
2016 | - | ||
2017 | - | ||
2018 | - | ||
2019 | - | @Callable( | |
2020 | - | func setBlocked ( | |
2028 | + | else [StringEntry(cB(), kt)] | |
2029 | + | ||
2030 | + | ||
2031 | + | ||
2032 | + | @Callable(fZ) | |
2033 | + | func setBlocked (ku) = if ((fZ.caller != this)) | |
2021 | 2034 | then throw("permission denied") | |
2022 | - | else [BooleanEntry( | |
2023 | - | ||
2024 | - | ||
2025 | - | ||
2026 | - | @Callable( | |
2035 | + | else [BooleanEntry(bF(), ku)] | |
2036 | + | ||
2037 | + | ||
2038 | + | ||
2039 | + | @Callable(fZ) | |
2027 | 2040 | func stakeLand () = { | |
2028 | - | let | |
2029 | - | if ((size( | |
2041 | + | let kv = ks(fZ) | |
2042 | + | if ((size(fZ.payments) != 1)) | |
2030 | 2043 | then throw("Exactly one payment required") | |
2031 | 2044 | else { | |
2032 | - | let | |
2033 | - | let | |
2034 | - | let | |
2035 | - | if (( | |
2036 | - | then throw((("NFT " + | |
2045 | + | let kw = value(fZ.payments[0]) | |
2046 | + | let bk = value(kw.assetId) | |
2047 | + | let ct = toString(fZ.caller) | |
2048 | + | if ((kw.amount != 1)) | |
2049 | + | then throw((("NFT " + aA) + " token should be attached as payment")) | |
2037 | 2050 | else { | |
2038 | - | let | |
2039 | - | if (( | |
2051 | + | let iS = value(assetInfo(bk)) | |
2052 | + | if ((iS.issuer != this)) | |
2040 | 2053 | then throw("Unknown issuer of token") | |
2041 | - | else if (!(contains( | |
2042 | - | then throw((("Only NFT " + | |
2054 | + | else if (!(contains(iS.name, aA))) | |
2055 | + | then throw((("Only NFT " + aA) + " tokens are accepted")) | |
2043 | 2056 | else { | |
2044 | - | let | |
2045 | - | let | |
2046 | - | then dropRight( | |
2047 | - | else if (contains( | |
2048 | - | then dropRight( | |
2049 | - | else dropRight( | |
2050 | - | if (!(isDefined(parseInt( | |
2051 | - | then throw(("Cannot parse land number from " + | |
2057 | + | let kx = drop(iS.name, 4) | |
2058 | + | let dI = if (contains(kx, "XXL")) | |
2059 | + | then dropRight(kx, 3) | |
2060 | + | else if (contains(kx, "XL")) | |
2061 | + | then dropRight(kx, 2) | |
2062 | + | else dropRight(kx, 1) | |
2063 | + | if (!(isDefined(parseInt(dI)))) | |
2064 | + | then throw(("Cannot parse land number from " + iS.name)) | |
2052 | 2065 | else { | |
2053 | - | let | |
2054 | - | let | |
2055 | - | if (isDefined(getInteger( | |
2056 | - | then throw((("NFT " + | |
2066 | + | let O = toBase58String(bk) | |
2067 | + | let iT = bm(O) | |
2068 | + | if (isDefined(getInteger(iT))) | |
2069 | + | then throw((("NFT " + iS.name) + " is already staked")) | |
2057 | 2070 | else { | |
2058 | - | let | |
2059 | - | let | |
2060 | - | let | |
2061 | - | let | |
2062 | - | let | |
2063 | - | let | |
2064 | - | let | |
2065 | - | let | |
2066 | - | let | |
2067 | - | let | |
2068 | - | let | |
2069 | - | then split_51C(value( | |
2071 | + | let iW = split(iS.description, "_") | |
2072 | + | let fV = gb(iW[cO]) | |
2073 | + | let iH = de(iW[cN]) | |
2074 | + | let hq = (iH / cm) | |
2075 | + | let eq = ga(fV, hq, 1) | |
2076 | + | let ky = cV(iW[cP]) | |
2077 | + | let ki = split(valueOrElse(getString(ky), "0_0_0_0_0_0"), "_") | |
2078 | + | let kz = makeString(fT(ki, fV, hq, 1), "_") | |
2079 | + | let ke = cX(ct) | |
2080 | + | let kf = getString(ke) | |
2081 | + | let kb = if (isDefined(kf)) | |
2082 | + | then split_51C(value(kf), "_") | |
2070 | 2083 | else nil | |
2071 | - | if (containsElement( | |
2072 | - | then throw(("Your staked lands already contain " + | |
2073 | - | else if ((size( | |
2074 | - | then throw((("Your already staked max (" + toString( | |
2084 | + | if (containsElement(kb, O)) | |
2085 | + | then throw(("Your staked lands already contain " + O)) | |
2086 | + | else if ((size(kb) >= aE)) | |
2087 | + | then throw((("Your already staked max (" + toString(aE)) + ") lands")) | |
2075 | 2088 | else { | |
2076 | - | let | |
2077 | - | let | |
2078 | - | let | |
2079 | - | let | |
2080 | - | $Tuple2([IntegerEntry( | |
2089 | + | let hr = valueOrElse(getInteger(bt(O)), 0) | |
2090 | + | let kl = cY(ct) | |
2091 | + | let kA = valueOrElse(getInteger(kl), 0) | |
2092 | + | let kB = invoke(cK, "onStakeUnstakeLand", [ct], nil) | |
2093 | + | $Tuple2([IntegerEntry(iT, lastBlock.timestamp), IntegerEntry(bp(aA, O, ct), lastBlock.timestamp), StringEntry(ke, makeString_11C((kb :+ O), "_")), IntegerEntry(kl, (kA + iH)), StringEntry(bj(O), ct), StringEntry(dK(dI), ct), IntegerEntry(dJ(O, ct), hr), StringEntry(cU(), eq), StringEntry(ky, kz), kv], kB) | |
2081 | 2094 | } | |
2082 | 2095 | } | |
2083 | 2096 | } | |
2084 | 2097 | } | |
2085 | 2098 | } | |
2086 | 2099 | } | |
2087 | 2100 | } | |
2088 | 2101 | ||
2089 | 2102 | ||
2090 | 2103 | ||
2091 | - | @Callable( | |
2092 | - | func unstakeLand ( | |
2093 | - | let | |
2094 | - | if ((size( | |
2104 | + | @Callable(fZ) | |
2105 | + | func unstakeLand (iN) = { | |
2106 | + | let kv = ks(fZ) | |
2107 | + | if ((size(fZ.payments) != 0)) | |
2095 | 2108 | then throw("No payments required") | |
2096 | 2109 | else { | |
2097 | - | let b = toString( | |
2098 | - | let | |
2099 | - | let | |
2100 | - | let | |
2101 | - | let | |
2102 | - | let | |
2103 | - | let | |
2104 | - | let | |
2105 | - | let | |
2106 | - | let | |
2107 | - | let | |
2108 | - | let | |
2109 | - | let | |
2110 | - | let | |
2111 | - | let | |
2112 | - | if (!(isDefined( | |
2113 | - | then throw(("Your staked lands don't contain " + | |
2110 | + | let b = toString(fZ.caller) | |
2111 | + | let fp = iL(b, dP, iN) | |
2112 | + | let O = fp._2 | |
2113 | + | let iW = fp._3 | |
2114 | + | let ke = cX(b) | |
2115 | + | let fV = gb(iW[cO]) | |
2116 | + | let iH = de(iW[cN]) | |
2117 | + | let hq = (iH / cm) | |
2118 | + | let eq = ga(fV, hq, -1) | |
2119 | + | let ky = cV(iW[cP]) | |
2120 | + | let ki = split(valueOrElse(getString(ky), "0_0_0_0_0_0"), "_") | |
2121 | + | let kz = makeString(fT(ki, fV, hq, -1), "_") | |
2122 | + | let jr = jj(b, O, iH, dP) | |
2123 | + | let kb = split_51C(valueOrElse(getString(ke), ""), "_") | |
2124 | + | let cG = indexOf(kb, O) | |
2125 | + | if (!(isDefined(cG))) | |
2126 | + | then throw(("Your staked lands don't contain " + O)) | |
2114 | 2127 | else { | |
2115 | - | let | |
2116 | - | let | |
2117 | - | if (( | |
2118 | - | then throw(("Your gWL are taking part in voting, cannot unstake until " + toString( | |
2128 | + | let av = lastBlock.timestamp | |
2129 | + | let kC = valueOrElse(getInteger(cJ, bG(b)), 0) | |
2130 | + | if ((kC >= av)) | |
2131 | + | then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(kC))) | |
2119 | 2132 | else { | |
2120 | - | let | |
2121 | - | if (( | |
2122 | - | then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString( | |
2133 | + | let kD = (valueOrElse(getInteger(cK, a(b)), 0) + ci) | |
2134 | + | if ((kD > av)) | |
2135 | + | then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString(kD))) | |
2123 | 2136 | else { | |
2124 | - | let | |
2125 | - | let | |
2126 | - | let | |
2137 | + | let kl = cY(b) | |
2138 | + | let km = valueOrElse(getInteger(kl), 0) | |
2139 | + | let kE = if ((iH > km)) | |
2127 | 2140 | then 0 | |
2128 | - | else ( | |
2129 | - | let | |
2130 | - | $Tuple2([ScriptTransfer( | |
2131 | - | then StringEntry( | |
2132 | - | else DeleteEntry( | |
2141 | + | else (km - iH) | |
2142 | + | let kB = invoke(cK, "onStakeUnstakeLand", [b], nil) | |
2143 | + | $Tuple2([ScriptTransfer(fZ.caller, 1, fromBase58String(O)), DeleteEntry(bm(O)), DeleteEntry(bp(aA, O, b)), StringEntry(cU(), eq), StringEntry(ky, kz), StringEntry(jr._2, makeString(jr._3, ":")), if ((size(kb) > 1)) | |
2144 | + | then StringEntry(ke, makeString_11C(removeByIndex(kb, value(cG)), "_")) | |
2145 | + | else DeleteEntry(ke), IntegerEntry(kl, kE), kv], kB) | |
2133 | 2146 | } | |
2134 | 2147 | } | |
2135 | 2148 | } | |
2136 | 2149 | } | |
2137 | 2150 | } | |
2138 | 2151 | ||
2139 | 2152 | ||
2140 | 2153 | ||
2141 | - | @Callable( | |
2154 | + | @Callable(fZ) | |
2142 | 2155 | func stakeDuck () = { | |
2143 | - | let | |
2144 | - | if ((size( | |
2156 | + | let kv = ks(fZ) | |
2157 | + | if ((size(fZ.payments) != 1)) | |
2145 | 2158 | then throw("Exactly one payment required") | |
2146 | 2159 | else { | |
2147 | - | let | |
2148 | - | let | |
2149 | - | let | |
2150 | - | if (( | |
2151 | - | then throw((("NFT " + | |
2160 | + | let kw = value(fZ.payments[0]) | |
2161 | + | let bk = value(kw.assetId) | |
2162 | + | let ct = toString(fZ.caller) | |
2163 | + | if ((kw.amount != 1)) | |
2164 | + | then throw((("NFT " + aB) + " token should be attached as payment")) | |
2152 | 2165 | else { | |
2153 | - | let | |
2154 | - | if (if (( | |
2155 | - | then ( | |
2166 | + | let iS = value(assetInfo(bk)) | |
2167 | + | if (if ((iS.issuer != dn)) | |
2168 | + | then (iS.issuer != do) | |
2156 | 2169 | else false) | |
2157 | - | then throw((("Unknown issuer of " + | |
2158 | - | else if (!(contains( | |
2159 | - | then throw((("Only NFT " + | |
2170 | + | then throw((("Unknown issuer of " + aB) + " token")) | |
2171 | + | else if (!(contains(iS.name, aB))) | |
2172 | + | then throw((("Only NFT " + aB) + " tokens are accepted")) | |
2160 | 2173 | else { | |
2161 | - | let | |
2162 | - | let | |
2163 | - | if (isDefined(getInteger( | |
2164 | - | then throw((("NFT " + | |
2165 | - | else if (isDefined(getString( | |
2166 | - | then throw(("You already staked one duck: " + | |
2167 | - | else if ( | |
2174 | + | let kF = toBase58String(bk) | |
2175 | + | let iT = bm(kF) | |
2176 | + | if (isDefined(getInteger(iT))) | |
2177 | + | then throw((("NFT " + iS.name) + " is already staked")) | |
2178 | + | else if (isDefined(getString(bC(ct)))) | |
2179 | + | then throw(("You already staked one duck: " + iS.name)) | |
2180 | + | else if (jN(kF)) | |
2168 | 2181 | then throw("stakeDuck_checkTournament") | |
2169 | 2182 | else { | |
2170 | - | let | |
2171 | - | let | |
2172 | - | let | |
2173 | - | let | |
2174 | - | let | |
2175 | - | let | |
2176 | - | let | |
2177 | - | ([IntegerEntry( | |
2183 | + | let kG = bE(kF) | |
2184 | + | let kH = getString(kG) | |
2185 | + | let hc = bD(kF) | |
2186 | + | let kI = getString(hc) | |
2187 | + | let is = y(kF) | |
2188 | + | let it = ae(valueOrElse(getInteger(C(kF)), 0)) | |
2189 | + | let kJ = valueOrElse(getInteger(is), it) | |
2190 | + | ([IntegerEntry(iT, lastBlock.timestamp), IntegerEntry(bp(aB, toBase58String(bk), ct), lastBlock.timestamp), StringEntry(bB(kF), ct), StringEntry(bC(ct), kF)] ++ (if (isDefined(kH)) | |
2178 | 2191 | then nil | |
2179 | - | else ([StringEntry( | |
2192 | + | else ([StringEntry(kG, aI)] ++ (if (isDefined(kI)) | |
2180 | 2193 | then nil | |
2181 | - | else (([StringEntry( | |
2194 | + | else (([StringEntry(hc, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(is, kJ)) :+ kv))))) | |
2182 | 2195 | } | |
2183 | 2196 | } | |
2184 | 2197 | } | |
2185 | 2198 | } | |
2186 | 2199 | } | |
2187 | 2200 | ||
2188 | 2201 | ||
2189 | 2202 | ||
2190 | - | @Callable( | |
2191 | - | func unstakeDuck ( | |
2192 | - | let | |
2193 | - | if ((size( | |
2203 | + | @Callable(fZ) | |
2204 | + | func unstakeDuck (kF) = { | |
2205 | + | let kv = ks(fZ) | |
2206 | + | if ((size(fZ.payments) != 0)) | |
2194 | 2207 | then throw("No payments required") | |
2195 | 2208 | else { | |
2196 | - | let | |
2197 | - | let | |
2198 | - | let | |
2199 | - | let | |
2200 | - | if (!(isDefined(getInteger( | |
2201 | - | then throw((("NFT " + | |
2202 | - | else if (!(isDefined(getString( | |
2203 | - | then throw((("The duck " + | |
2209 | + | let bk = fromBase58String(kF) | |
2210 | + | let ct = toString(fZ.caller) | |
2211 | + | let iS = value(assetInfo(bk)) | |
2212 | + | let iT = bm(kF) | |
2213 | + | if (!(isDefined(getInteger(iT)))) | |
2214 | + | then throw((("NFT " + iS.name) + " is not staked")) | |
2215 | + | else if (!(isDefined(getString(bC(ct))))) | |
2216 | + | then throw((("The duck " + iS.name) + " is not staked")) | |
2204 | 2217 | else { | |
2205 | - | let | |
2206 | - | if (( | |
2218 | + | let iV = valueOrErrorMessage(getString(bB(kF)), (("NFT " + iS.name) + " is orphaned")) | |
2219 | + | if ((iV != ct)) | |
2207 | 2220 | then throw("Staked NFT is not yours") | |
2208 | - | else if ( | |
2221 | + | else if (jN(kF)) | |
2209 | 2222 | then throw("unstakeDuck_checkTournament") | |
2210 | 2223 | else { | |
2211 | - | let | |
2212 | - | let | |
2213 | - | let | |
2214 | - | if (( | |
2215 | - | then throw((("Please heal your duck to " + toString( | |
2216 | - | else [ScriptTransfer( | |
2224 | + | let is = y(kF) | |
2225 | + | let it = ae(valueOrElse(getInteger(C(kF)), 0)) | |
2226 | + | let aq = valueOrElse(getInteger(is), it) | |
2227 | + | if ((it > aq)) | |
2228 | + | then throw((("Please heal your duck to " + toString(it)) + "hp before unstaking")) | |
2229 | + | else [ScriptTransfer(fZ.caller, 1, bk), DeleteEntry(iT), DeleteEntry(is), DeleteEntry(bE(kF)), DeleteEntry(bB(kF)), DeleteEntry(bp(aB, kF, ct)), DeleteEntry(bC(ct)), kv] | |
2217 | 2230 | } | |
2218 | 2231 | } | |
2219 | 2232 | } | |
2220 | 2233 | } | |
2221 | 2234 | ||
2222 | 2235 | ||
2223 | 2236 | ||
2224 | - | @Callable( | |
2225 | - | func claimRes ( | |
2226 | - | let | |
2227 | - | if ((size( | |
2237 | + | @Callable(fZ) | |
2238 | + | func claimRes (dX,kK) = { | |
2239 | + | let kv = ks(fZ) | |
2240 | + | if ((size(fZ.payments) != 0)) | |
2228 | 2241 | then throw("No payments required") | |
2229 | 2242 | else { | |
2230 | - | let b = toString( | |
2231 | - | let | |
2232 | - | let | |
2233 | - | $Tuple2((((( | |
2234 | - | } | |
2235 | - | } | |
2236 | - | ||
2237 | - | ||
2238 | - | ||
2239 | - | @Callable( | |
2240 | - | func claimResToWH ( | |
2241 | - | let | |
2242 | - | if ((size( | |
2243 | + | let b = toString(fZ.originCaller) | |
2244 | + | let ey = iX(b, dX, dP, kK) | |
2245 | + | let z = valueOrErrorMessage(getString(bC(b)), "You don't have a duck staked") | |
2246 | + | $Tuple2(((((ey._1 ++ jx(z, fraction(S, dX, cl))._1) :+ StringEntry(ey._2, makeString(ey._3, ":"))) :+ StringEntry(ey._4, makeString(ey._5, ":"))) :+ kv), ey._3[bf]) | |
2247 | + | } | |
2248 | + | } | |
2249 | + | ||
2250 | + | ||
2251 | + | ||
2252 | + | @Callable(fZ) | |
2253 | + | func claimResToWH (dX,kK) = { | |
2254 | + | let kv = ks(fZ) | |
2255 | + | if ((size(fZ.payments) != 0)) | |
2243 | 2256 | then throw("No payments required") | |
2244 | 2257 | else { | |
2245 | - | let b = toString( | |
2246 | - | let | |
2247 | - | $Tuple2((((( | |
2248 | - | } | |
2249 | - | } | |
2250 | - | ||
2251 | - | ||
2252 | - | ||
2253 | - | @Callable( | |
2254 | - | func flight ( | |
2255 | - | let | |
2256 | - | if ((size( | |
2258 | + | let b = toString(fZ.originCaller) | |
2259 | + | let ey = iX(b, dX, dO, kK) | |
2260 | + | $Tuple2(((((ey._1 ++ jD(b, fraction(S, dX, cl))._1) :+ StringEntry(ey._2, makeString(ey._3, ":"))) :+ StringEntry(ey._4, makeString(ey._5, ":"))) :+ kv), ey._5[aW]) | |
2261 | + | } | |
2262 | + | } | |
2263 | + | ||
2264 | + | ||
2265 | + | ||
2266 | + | @Callable(fZ) | |
2267 | + | func flight (ih,ii) = { | |
2268 | + | let kv = ks(fZ) | |
2269 | + | if ((size(fZ.payments) != 0)) | |
2257 | 2270 | then throw("No payments required") | |
2258 | 2271 | else { | |
2259 | - | let | |
2260 | - | let | |
2261 | - | let | |
2262 | - | let | |
2263 | - | let | |
2264 | - | let | |
2265 | - | if (if (!( | |
2266 | - | then | |
2272 | + | let bH = toString(fZ.caller) | |
2273 | + | let gE = ig(bH, ih, ii) | |
2274 | + | let z = gE._2 | |
2275 | + | let io = gE._4 | |
2276 | + | let kL = split(io, "_") | |
2277 | + | let kM = (kL[bX] == "T") | |
2278 | + | if (if (!(kM)) | |
2279 | + | then jN(z) | |
2267 | 2280 | else false) | |
2268 | 2281 | then throw("flight_checkTournament") | |
2269 | 2282 | else { | |
2270 | - | let | |
2283 | + | let kN = if (kM) | |
2271 | 2284 | then { | |
2272 | - | let | |
2273 | - | let | |
2274 | - | let | |
2275 | - | let | |
2276 | - | let | |
2277 | - | if (if (if ((parseIntValue( | |
2285 | + | let jO = valueOrElse(getInteger(cL, bJ), 0) | |
2286 | + | let av = lastBlock.timestamp | |
2287 | + | let jP = bP(cL, jO) | |
2288 | + | let bR = jP[bN] | |
2289 | + | let bS = jP[bO] | |
2290 | + | if (if (if ((parseIntValue(kL[bW]) != jO)) | |
2278 | 2291 | then true | |
2279 | - | else ( | |
2292 | + | else (bS[bU] != "INPROGRESS")) | |
2280 | 2293 | then true | |
2281 | - | else ( | |
2294 | + | else (av > parseIntValue(bR[bT]))) | |
2282 | 2295 | then unit | |
2283 | 2296 | else { | |
2284 | - | let | |
2285 | - | let | |
2286 | - | if (( | |
2297 | + | let kO = parseIntValue(kL[bY]) | |
2298 | + | let kP = parseIntValue(bS[bV]) | |
2299 | + | if ((kP >= kO)) | |
2287 | 2300 | then unit | |
2288 | - | else invoke( | |
2301 | + | else invoke(cL, "updateDynamicData", [z, kO], nil) | |
2289 | 2302 | } | |
2290 | 2303 | } | |
2291 | 2304 | else unit | |
2292 | - | if (( | |
2305 | + | if ((kN == kN)) | |
2293 | 2306 | then { | |
2294 | - | let | |
2295 | - | let | |
2296 | - | if (( | |
2307 | + | let kG = bE(z) | |
2308 | + | let iP = valueOrElse(getString(kG), aI) | |
2309 | + | if ((io == iP)) | |
2297 | 2310 | then throw("You can't fly to the same location") | |
2298 | 2311 | else { | |
2299 | - | let | |
2300 | - | let | |
2301 | - | let | |
2302 | - | let | |
2303 | - | let | |
2304 | - | $Tuple2(([StringEntry( | |
2305 | - | then | |
2306 | - | else | |
2307 | - | then [StringEntry( | |
2308 | - | else (nil ++ | |
2309 | - | then | |
2310 | - | else | |
2312 | + | let fM = E(z) | |
2313 | + | let iB = valueOrElse(getString(fM), ",;,_,;,_,;,_,;,_,;,_,;,") | |
2314 | + | let kQ = ez(iB, gE._5) | |
2315 | + | let iD = kQ._1 | |
2316 | + | let iE = kQ._2 | |
2317 | + | $Tuple2(([StringEntry(kG, if ((gE._1 > 0)) | |
2318 | + | then io | |
2319 | + | else iP), StringEntry(fM, iD), IntegerEntry(y(z), gE._1), kv] ++ (if (iE) | |
2320 | + | then [StringEntry(K(z), "0_0_0_0_0")] | |
2321 | + | else (nil ++ jx(z, if ((gE._1 > 0)) | |
2322 | + | then T | |
2323 | + | else U)._1))), gE._3) | |
2311 | 2324 | } | |
2312 | 2325 | } | |
2313 | 2326 | else throw("Strict value is not equal to itself.") | |
2314 | 2327 | } | |
2315 | 2328 | } | |
2316 | 2329 | } | |
2317 | 2330 | ||
2318 | 2331 | ||
2319 | 2332 | ||
2320 | - | @Callable( | |
2321 | - | func heal ( | |
2322 | - | let | |
2323 | - | if (if (if ((0 > | |
2333 | + | @Callable(fZ) | |
2334 | + | func heal (kR,kS,kT) = { | |
2335 | + | let kv = ks(fZ) | |
2336 | + | if (if (if ((0 > kR)) | |
2324 | 2337 | then true | |
2325 | - | else (0 > | |
2338 | + | else (0 > kS)) | |
2326 | 2339 | then true | |
2327 | - | else (0 > | |
2340 | + | else (0 > kT)) | |
2328 | 2341 | then throw("Quantity cannot be negative") | |
2329 | 2342 | else { | |
2330 | - | let | |
2331 | - | if ( | |
2343 | + | let z = valueOrErrorMessage(getString(bC(toString(fZ.caller))), "You don't have a duck staked") | |
2344 | + | if (jN(z)) | |
2332 | 2345 | then throw("heal_checkTournament") | |
2333 | 2346 | else { | |
2334 | - | let | |
2335 | - | let | |
2336 | - | let | |
2337 | - | let | |
2338 | - | if (( | |
2339 | - | then throw((("HP should be < " + toString( | |
2347 | + | let kU = [kR, kS, kT] | |
2348 | + | let is = y(z) | |
2349 | + | let it = ae(valueOrElse(getInteger(C(z)), 0)) | |
2350 | + | let kV = valueOrElse(getInteger(is), it) | |
2351 | + | if ((kV >= it)) | |
2352 | + | then throw((("HP should be < " + toString(it)) + " to heal")) | |
2340 | 2353 | else { | |
2341 | - | let | |
2342 | - | let | |
2343 | - | let | |
2354 | + | let hc = bD(z) | |
2355 | + | let hF = hb(hc) | |
2356 | + | let kW = if ((hF[bh] == "")) | |
2344 | 2357 | then nil | |
2345 | - | else split_4C( | |
2346 | - | func | |
2347 | - | let | |
2348 | - | let | |
2349 | - | then parseIntValue( | |
2358 | + | else split_4C(hF[bh], "_") | |
2359 | + | func kX (eg,ca) = { | |
2360 | + | let dd = eg._2 | |
2361 | + | let gv = if ((size(kW) > dd)) | |
2362 | + | then parseIntValue(kW[dd]) | |
2350 | 2363 | else 0 | |
2351 | - | if ((3 > | |
2364 | + | if ((3 > dd)) | |
2352 | 2365 | then { | |
2353 | - | let | |
2354 | - | if (( | |
2355 | - | then throw(((("You have only " + toString( | |
2356 | - | else $Tuple3(( | |
2366 | + | let kY = kU[dd] | |
2367 | + | if ((kY > gv)) | |
2368 | + | then throw(((("You have only " + toString(gv)) + " of ") + aL[dd])) | |
2369 | + | else $Tuple3((eg._1 :+ toString((gv - kY))), (dd + 1), (eg._3 + (parseIntValue(split(ca, "_")[aR]) * kY))) | |
2357 | 2370 | } | |
2358 | - | else $Tuple3(( | |
2371 | + | else $Tuple3((eg._1 :+ toString(gv)), (dd + 1), eg._3) | |
2359 | 2372 | } | |
2360 | 2373 | ||
2361 | - | let | |
2362 | - | let | |
2363 | - | let | |
2364 | - | let | |
2365 | - | func | |
2366 | - | then | |
2367 | - | else | |
2368 | - | ||
2369 | - | func | |
2370 | - | then | |
2374 | + | let ey = { | |
2375 | + | let ei = aP | |
2376 | + | let ej = size(ei) | |
2377 | + | let ek = $Tuple3(nil, 0, 0) | |
2378 | + | func el (em,en) = if ((en >= ej)) | |
2379 | + | then em | |
2380 | + | else kX(em, ei[en]) | |
2381 | + | ||
2382 | + | func eo (em,en) = if ((en >= ej)) | |
2383 | + | then em | |
2371 | 2384 | else throw("List size exceeds 50") | |
2372 | 2385 | ||
2373 | - | | |
2386 | + | eo(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(ek, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50) | |
2374 | 2387 | } | |
2375 | - | let | |
2376 | - | $Tuple2(([IntegerEntry( | |
2388 | + | let kZ = min([it, (kV + ey._3)]) | |
2389 | + | $Tuple2(([IntegerEntry(is, kZ), StringEntry(hc, makeString_2C([hF[be], hF[bf], hF[bg], makeString(ey._1, "_")], ":")), kv] ++ jx(z, (ab * ((kR + kS) + kT)))._1), kZ) | |
2377 | 2390 | } | |
2378 | 2391 | } | |
2379 | 2392 | } | |
2380 | 2393 | } | |
2381 | 2394 | ||
2382 | 2395 | ||
2383 | 2396 | ||
2384 | - | @Callable( | |
2397 | + | @Callable(fZ) | |
2385 | 2398 | func healES () = { | |
2386 | - | let | |
2387 | - | if ((size( | |
2399 | + | let kv = ks(fZ) | |
2400 | + | if ((size(fZ.payments) != 1)) | |
2388 | 2401 | then throw("Exactly one payment required") | |
2389 | 2402 | else { | |
2390 | - | let | |
2391 | - | if (( | |
2403 | + | let kw = value(fZ.payments[0]) | |
2404 | + | if ((kw.assetId != ce)) | |
2392 | 2405 | then throw("Allowed USDT payment only!") | |
2393 | 2406 | else { | |
2394 | - | let | |
2395 | - | if ( | |
2407 | + | let z = valueOrErrorMessage(getString(bC(toString(fZ.caller))), "You don't have a duck staked") | |
2408 | + | if (jN(z)) | |
2396 | 2409 | then throw("healES_checkTournament") | |
2397 | 2410 | else { | |
2398 | - | let | |
2399 | - | let | |
2400 | - | let | |
2401 | - | if (( | |
2411 | + | let is = y(z) | |
2412 | + | let it = ae(valueOrElse(getInteger(C(z)), 0)) | |
2413 | + | let kV = valueOrElse(getInteger(is), it) | |
2414 | + | if ((kV > 0)) | |
2402 | 2415 | then throw("HP should be 0 to call Emergency Service") | |
2403 | 2416 | else { | |
2404 | - | let | |
2405 | - | let | |
2406 | - | let | |
2417 | + | let hc = bD(z) | |
2418 | + | let hF = hb(hc) | |
2419 | + | let kW = if ((hF[bh] == "")) | |
2407 | 2420 | then nil | |
2408 | - | else split_4C( | |
2409 | - | let | |
2410 | - | then parseIntValue( | |
2421 | + | else split_4C(hF[bh], "_") | |
2422 | + | let la = if ((size(kW) > 0)) | |
2423 | + | then parseIntValue(kW[0]) | |
2411 | 2424 | else 0 | |
2412 | - | let | |
2413 | - | then parseIntValue( | |
2425 | + | let lb = if ((size(kW) > 1)) | |
2426 | + | then parseIntValue(kW[1]) | |
2414 | 2427 | else 0 | |
2415 | - | let | |
2416 | - | then parseIntValue( | |
2428 | + | let lc = if ((size(kW) > 2)) | |
2429 | + | then parseIntValue(kW[2]) | |
2417 | 2430 | else 0 | |
2418 | - | if (if (if (( | |
2431 | + | if (if (if ((la > 0)) | |
2419 | 2432 | then true | |
2420 | - | else ( | |
2433 | + | else (lb > 0)) | |
2421 | 2434 | then true | |
2422 | - | else ( | |
2435 | + | else (lc > 0)) | |
2423 | 2436 | then throw("You have to use own Medical Kit") | |
2424 | 2437 | else { | |
2425 | - | let | |
2426 | - | let | |
2427 | - | then split_4C(value( | |
2438 | + | let ld = getString(cI, bI()) | |
2439 | + | let le = if (isDefined(ld)) | |
2440 | + | then split_4C(value(ld), "_") | |
2428 | 2441 | else nil | |
2429 | - | let | |
2430 | - | then parseIntValue( | |
2442 | + | let lf = if ((size(le) > 0)) | |
2443 | + | then parseIntValue(le[0]) | |
2431 | 2444 | else 0 | |
2432 | - | if ((0 >= | |
2445 | + | if ((0 >= lf)) | |
2433 | 2446 | then throw("There are no Medical Kits L1 at Emergency Service storage") | |
2434 | 2447 | else { | |
2435 | - | let | |
2436 | - | let | |
2437 | - | let | |
2438 | - | let | |
2439 | - | let | |
2440 | - | if (( | |
2441 | - | then throw(("Payment attached should be " + toString( | |
2448 | + | let kZ = (kV + parseIntValue(split(aP[0], "_")[aR])) | |
2449 | + | let lg = makeString([toString((lf - 1)), removeByIndex(le, 0)], "_") | |
2450 | + | let ca = split(aP[0], "_") | |
2451 | + | let lh = bZ(ca) | |
2452 | + | let li = fraction((lh * aK), aJ, (cl * aU)) | |
2453 | + | if ((kw.amount != li)) | |
2454 | + | then throw(("Payment attached should be " + toString(li))) | |
2442 | 2455 | else { | |
2443 | - | let | |
2444 | - | $Tuple2(([IntegerEntry( | |
2456 | + | let ey = cZ(invoke(cI, "updateEsStorage", [lg], [AttachedPayment(ce, li)])) | |
2457 | + | $Tuple2(([IntegerEntry(is, kZ), kv] ++ jx(z, V)._1), ey) | |
2445 | 2458 | } | |
2446 | 2459 | } | |
2447 | 2460 | } | |
2448 | 2461 | } | |
2449 | 2462 | } | |
2450 | 2463 | } | |
2451 | 2464 | } | |
2452 | 2465 | } | |
2453 | 2466 | ||
2454 | 2467 | ||
2455 | 2468 | ||
2456 | - | @Callable( | |
2457 | - | func updateBackpack ( | |
2469 | + | @Callable(fZ) | |
2470 | + | func updateBackpack (z,lj) = if ((fZ.caller != cI)) | |
2458 | 2471 | then throw("permission denied") | |
2459 | - | else $Tuple2([StringEntry( | |
2460 | - | ||
2461 | - | ||
2462 | - | ||
2463 | - | @Callable( | |
2472 | + | else $Tuple2([StringEntry(bD(z), lj)], lj) | |
2473 | + | ||
2474 | + | ||
2475 | + | ||
2476 | + | @Callable(fZ) | |
2464 | 2477 | func commitForRandom () = { | |
2465 | - | let | |
2466 | - | let | |
2467 | - | let b = toString( | |
2468 | - | $Tuple2(([IntegerEntry( | |
2469 | - | } | |
2470 | - | ||
2471 | - | ||
2472 | - | ||
2473 | - | @Callable( | |
2478 | + | let kv = ks(fZ) | |
2479 | + | let lk = (height + cS) | |
2480 | + | let b = toString(fZ.caller) | |
2481 | + | $Tuple2(([IntegerEntry(cT(b), lk)] :+ kv), lk) | |
2482 | + | } | |
2483 | + | ||
2484 | + | ||
2485 | + | ||
2486 | + | @Callable(fZ) | |
2474 | 2487 | func buySLand () = { | |
2475 | - | let | |
2476 | - | if ((size( | |
2488 | + | let kv = ks(fZ) | |
2489 | + | if ((size(fZ.payments) != 1)) | |
2477 | 2490 | then throw("Exactly one payment required") | |
2478 | 2491 | else { | |
2479 | - | let | |
2480 | - | if (( | |
2492 | + | let kw = value(fZ.payments[0]) | |
2493 | + | if ((kw.assetId != ce)) | |
2481 | 2494 | then throw("Allowed USDT payment only!") | |
2482 | - | else if (( | |
2483 | - | then throw(("Payment attached should be " + toString( | |
2495 | + | else if ((kw.amount != dw)) | |
2496 | + | then throw(("Payment attached should be " + toString(dw))) | |
2484 | 2497 | else { | |
2485 | - | let | |
2486 | - | $Tuple2(((( | |
2498 | + | let ey = hZ(fZ.caller, fZ.transactionId) | |
2499 | + | $Tuple2((((ey._1 :+ ScriptTransfer(cI, kw.amount, ce)) ++ jD(toString(fZ.caller), X)._1) :+ kv), ey._2._1) | |
2487 | 2500 | } | |
2488 | 2501 | } | |
2489 | 2502 | } | |
2490 | 2503 | ||
2491 | 2504 | ||
2492 | 2505 | ||
2493 | - | @Callable( | |
2494 | - | func expedition ( | |
2495 | - | let | |
2496 | - | if ((size( | |
2506 | + | @Callable(fZ) | |
2507 | + | func expedition (ih,ii) = { | |
2508 | + | let kv = ks(fZ) | |
2509 | + | if ((size(fZ.payments) != 0)) | |
2497 | 2510 | then throw("No payments required") | |
2498 | 2511 | else { | |
2499 | - | let | |
2500 | - | let | |
2501 | - | if ( | |
2512 | + | let ey = iy(fZ.caller, fZ.transactionId, ih, ii) | |
2513 | + | let z = valueOrErrorMessage(getString(bC(toString(fZ.caller))), "You don't have a duck staked") | |
2514 | + | if (jN(z)) | |
2502 | 2515 | then throw("expedition_checkTournament") | |
2503 | - | else $Tuple2((( | |
2504 | - | } | |
2505 | - | } | |
2506 | - | ||
2507 | - | ||
2508 | - | ||
2509 | - | @Callable( | |
2510 | - | func upgradeInfra ( | |
2511 | - | let | |
2512 | - | if ((size( | |
2516 | + | else $Tuple2(((ey._1 ++ jx(z, X)._1) :+ kv), $Tuple2(ey._2, ey._3)) | |
2517 | + | } | |
2518 | + | } | |
2519 | + | ||
2520 | + | ||
2521 | + | ||
2522 | + | @Callable(fZ) | |
2523 | + | func upgradeInfra (O) = { | |
2524 | + | let kv = ks(fZ) | |
2525 | + | if ((size(fZ.payments) != 0)) | |
2513 | 2526 | then throw("No payments required") | |
2514 | 2527 | else { | |
2515 | - | let | |
2516 | - | let | |
2517 | - | $Tuple2((( | |
2518 | - | } | |
2519 | - | } | |
2520 | - | ||
2521 | - | ||
2522 | - | ||
2523 | - | @Callable( | |
2524 | - | func activateArtifact ( | |
2525 | - | let | |
2526 | - | if ((size( | |
2528 | + | let ey = jk(true, fZ.caller, 0, O) | |
2529 | + | let z = valueOrErrorMessage(getString(bC(toString(fZ.caller))), "You don't have a duck staked") | |
2530 | + | $Tuple2(((ey._1 :+ kv) ++ jx(z, fraction(Y, ey._3, cl))._1), ey._2) | |
2531 | + | } | |
2532 | + | } | |
2533 | + | ||
2534 | + | ||
2535 | + | ||
2536 | + | @Callable(fZ) | |
2537 | + | func activateArtifact (ll,lm) = { | |
2538 | + | let kv = ks(fZ) | |
2539 | + | if ((size(fZ.payments) != 0)) | |
2527 | 2540 | then throw("No payments required") | |
2528 | 2541 | else { | |
2529 | - | let b = toString( | |
2530 | - | let | |
2531 | - | let | |
2532 | - | if (("PRESALE" == | |
2533 | - | then | |
2534 | - | else if (("ONBOARD" == | |
2535 | - | then | |
2542 | + | let b = toString(fZ.caller) | |
2543 | + | let ey = { | |
2544 | + | let cf = ll | |
2545 | + | if (("PRESALE" == cf)) | |
2546 | + | then jL(b, lm) | |
2547 | + | else if (("ONBOARD" == cf)) | |
2548 | + | then jE(b) | |
2536 | 2549 | else throw("Unknown artifact") | |
2537 | 2550 | } | |
2538 | - | ( | |
2539 | - | } | |
2540 | - | } | |
2541 | - | ||
2542 | - | ||
2543 | - | ||
2544 | - | @Callable( | |
2545 | - | func mergeLands ( | |
2546 | - | let | |
2547 | - | if ((size( | |
2551 | + | (ey :+ kv) | |
2552 | + | } | |
2553 | + | } | |
2554 | + | ||
2555 | + | ||
2556 | + | ||
2557 | + | @Callable(fZ) | |
2558 | + | func mergeLands (jT) = { | |
2559 | + | let kv = ks(fZ) | |
2560 | + | if ((size(fZ.payments) != 0)) | |
2548 | 2561 | then throw("No payments required") | |
2549 | 2562 | else { | |
2550 | - | let | |
2551 | - | $Tuple2((( | |
2552 | - | } | |
2553 | - | } | |
2554 | - | ||
2555 | - | ||
2556 | - | ||
2557 | - | @Callable( | |
2558 | - | func cargoExchange ( | |
2559 | - | let | |
2560 | - | if ((size( | |
2563 | + | let ey = kr(toString(fZ.caller), jT) | |
2564 | + | $Tuple2(((ey._1 :+ kv) ++ jD(toString(fZ.caller), Z)._1), ey._2) | |
2565 | + | } | |
2566 | + | } | |
2567 | + | ||
2568 | + | ||
2569 | + | ||
2570 | + | @Callable(fZ) | |
2571 | + | func cargoExchange (ln,O) = { | |
2572 | + | let kv = ks(fZ) | |
2573 | + | if ((size(fZ.payments) != 0)) | |
2561 | 2574 | then throw("No payments required") | |
2562 | 2575 | else { | |
2563 | - | let | |
2564 | - | let b = toString( | |
2565 | - | let | |
2566 | - | let | |
2567 | - | if (!(isDefined(getInteger( | |
2568 | - | then throw(( | |
2576 | + | let hE = split_4C(ln, ":") | |
2577 | + | let b = toString(fZ.originCaller) | |
2578 | + | let iS = value(assetInfo(fromBase58String(O))) | |
2579 | + | let iT = bm(O) | |
2580 | + | if (!(isDefined(getInteger(iT)))) | |
2581 | + | then throw((iS.name + " is not staked")) | |
2569 | 2582 | else { | |
2570 | - | let | |
2571 | - | if (( | |
2572 | - | then throw(( | |
2583 | + | let iV = valueOrErrorMessage(getString(bj(O)), (("NFT " + iS.name) + " is orphaned")) | |
2584 | + | if ((iV != b)) | |
2585 | + | then throw((aA + " is not yours")) | |
2573 | 2586 | else { | |
2574 | - | let | |
2575 | - | let | |
2576 | - | let | |
2577 | - | let | |
2578 | - | let | |
2579 | - | if (( | |
2580 | - | then throw((("Duck location type is " + | |
2581 | - | else if (( | |
2582 | - | then throw(("Duck should be on the land " + | |
2587 | + | let hq = (de(split(iS.description, "_")[cN]) / cm) | |
2588 | + | let hr = valueOrElse(getInteger(bt(O)), 0) | |
2589 | + | let z = valueOrErrorMessage(getString(bC(b)), "You don't have a duck staked") | |
2590 | + | let iP = valueOrElse(getString(bE(z)), aI) | |
2591 | + | let iQ = split(value(iP), "_") | |
2592 | + | if ((iQ[bX] != "L")) | |
2593 | + | then throw((("Duck location type is " + iQ[bX]) + ", but should be L")) | |
2594 | + | else if ((iQ[bY] != O)) | |
2595 | + | then throw(("Duck should be on the land " + O)) | |
2583 | 2596 | else { | |
2584 | - | let | |
2585 | - | let | |
2586 | - | let | |
2587 | - | let | |
2588 | - | let | |
2589 | - | let | |
2590 | - | let | |
2591 | - | let | |
2592 | - | [StringEntry( | |
2597 | + | let hp = bs(O) | |
2598 | + | let hg = ho(hp, hq, hr) | |
2599 | + | let hc = bD(z) | |
2600 | + | let hF = hb(hc) | |
2601 | + | let ey = hD(hE, hg, hF) | |
2602 | + | let hx = split(hg[aZ], "_") | |
2603 | + | let jh = (parseIntValue(hx[bb]) + ey._7) | |
2604 | + | let ji = (parseIntValue(hx[bc]) - ey._7) | |
2605 | + | [StringEntry(hc, makeString_2C([hF[be], ey._4, ey._5, ey._6], ":")), StringEntry(hp, makeString_2C([hg[aV], ey._1, ey._2, ey._3, makeString([hx[ba], toString(jh), toString(ji), hx[bd]], "_")], ":")), kv] | |
2593 | 2606 | } | |
2594 | 2607 | } | |
2595 | 2608 | } | |
2596 | 2609 | } | |
2597 | 2610 | } | |
2598 | 2611 | ||
2599 | 2612 | ||
2600 | 2613 | ||
2601 | - | @Callable( | |
2602 | - | func saveWarehouse ( | |
2614 | + | @Callable(fZ) | |
2615 | + | func saveWarehouse (ht,O) = if ((fZ.caller != cI)) | |
2603 | 2616 | then throw("Access denied") | |
2604 | 2617 | else { | |
2605 | - | let | |
2606 | - | let | |
2607 | - | if ((size( | |
2618 | + | let hp = bs(O) | |
2619 | + | let hu = split_4C(ht, ":") | |
2620 | + | if ((size(hu) != 5)) | |
2608 | 2621 | then throw("warehouse string should contain 4 ':' separators") | |
2609 | 2622 | else { | |
2610 | - | let | |
2611 | - | let | |
2612 | - | let | |
2613 | - | let | |
2614 | - | let | |
2615 | - | $Tuple2([StringEntry( | |
2623 | + | let lo = split(hu[aZ], "_")[ba] | |
2624 | + | let jh = hf(hu) | |
2625 | + | let lp = hd(hu[aV]) | |
2626 | + | let ji = ((lp - parseIntValue(lo)) - jh) | |
2627 | + | let lq = makeString_2C([hu[aV], hu[aW], hu[aX], hu[aY], makeString([lo, toString(jh), toString(ji), toString(lp)], "_")], ":") | |
2628 | + | $Tuple2([StringEntry(hp, lq)], lq) | |
2616 | 2629 | } | |
2617 | 2630 | } | |
2618 | 2631 | ||
2619 | 2632 | ||
2620 | 2633 | ||
2621 | - | @Callable( | |
2622 | - | func fixWarehouseFormat ( | |
2634 | + | @Callable(fZ) | |
2635 | + | func fixWarehouseFormat (O) = if ((fZ.caller != cH)) | |
2623 | 2636 | then throw("Access denied") | |
2624 | 2637 | else { | |
2625 | - | let | |
2626 | - | let | |
2627 | - | let | |
2628 | - | let | |
2629 | - | let | |
2630 | - | let | |
2631 | - | let | |
2632 | - | let | |
2633 | - | let | |
2634 | - | let | |
2635 | - | $Tuple2([StringEntry( | |
2638 | + | let hp = bs(O) | |
2639 | + | let iS = value(assetInfo(fromBase58String(O))) | |
2640 | + | let hq = (de(split(iS.description, "_")[cN]) / cm) | |
2641 | + | let hr = valueOrElse(getInteger(bt(O)), 0) | |
2642 | + | let hu = ho(hp, hq, hr) | |
2643 | + | let lo = dc(invoke(cI, "recalcLockedVolumeREADONLY", [O, hu], nil)) | |
2644 | + | let jh = hf(hu) | |
2645 | + | let lp = hd(hu[aV]) | |
2646 | + | let ji = ((lp - lo) - jh) | |
2647 | + | let lq = makeString_2C([hu[aV], hu[aW], hu[aX], hu[aY], makeString([toString(lo), toString(jh), toString(ji), toString(lp)], "_")], ":") | |
2648 | + | $Tuple2([StringEntry(hp, lq)], lq) | |
2636 | 2649 | } | |
2637 | 2650 | ||
2638 | 2651 | ||
2639 | 2652 | ||
2640 | - | @Callable( | |
2641 | - | func fixContinentProportions ( | |
2653 | + | @Callable(fZ) | |
2654 | + | func fixContinentProportions (jT) = if ((fZ.caller != cH)) | |
2642 | 2655 | then throw("Access denied") | |
2643 | 2656 | else { | |
2644 | - | func | |
2645 | - | ||
2646 | - | let | |
2647 | - | let | |
2648 | - | let | |
2649 | - | let | |
2650 | - | func | |
2651 | - | then | |
2652 | - | else | |
2653 | - | ||
2654 | - | func | |
2655 | - | then | |
2657 | + | func lr (eg,ls) = (eg :+ valueOrElse(getString(cV(ls)), "0_0_0_0_0_0")) | |
2658 | + | ||
2659 | + | let fJ = { | |
2660 | + | let ei = aM | |
2661 | + | let ej = size(ei) | |
2662 | + | let ek = nil | |
2663 | + | func el (em,en) = if ((en >= ej)) | |
2664 | + | then em | |
2665 | + | else lr(em, ei[en]) | |
2666 | + | ||
2667 | + | func eo (em,en) = if ((en >= ej)) | |
2668 | + | then em | |
2656 | 2669 | else throw("List size exceeds 5") | |
2657 | 2670 | ||
2658 | - | | |
2659 | - | } | |
2660 | - | func | |
2661 | - | let | |
2662 | - | let | |
2663 | - | let | |
2664 | - | let | |
2665 | - | let | |
2666 | - | let | |
2667 | - | let | |
2668 | - | let | |
2669 | - | let | |
2670 | - | if (("Americas" == | |
2671 | - | then [ | |
2672 | - | else if (("Europe" == | |
2673 | - | then [ | |
2674 | - | else if (("Asia" == | |
2675 | - | then [ | |
2676 | - | else if (("Africa" == | |
2677 | - | then [ | |
2678 | - | else if (("Oceania" == | |
2679 | - | then [ | |
2671 | + | eo(el(el(el(el(el(ek, 0), 1), 2), 3), 4), 5) | |
2672 | + | } | |
2673 | + | func lt (eg,O) = { | |
2674 | + | let iS = value(assetInfo(fromBase58String(O))) | |
2675 | + | let iW = split(iS.description, "_") | |
2676 | + | let hq = (de(iW[cN]) / cm) | |
2677 | + | let ls = iW[cP] | |
2678 | + | let fV = gb(iW[cO]) | |
2679 | + | let gD = value(indexOf(aM, ls)) | |
2680 | + | let ki = split(eg[gD], "_") | |
2681 | + | let lu = makeString(fT(ki, fV, hq, 1), "_") | |
2682 | + | let cf = ls | |
2683 | + | if (("Americas" == cf)) | |
2684 | + | then [lu, eg[1], eg[2], eg[3], eg[4]] | |
2685 | + | else if (("Europe" == cf)) | |
2686 | + | then [eg[0], lu, eg[2], eg[3], eg[4]] | |
2687 | + | else if (("Asia" == cf)) | |
2688 | + | then [eg[0], eg[1], lu, eg[3], eg[4]] | |
2689 | + | else if (("Africa" == cf)) | |
2690 | + | then [eg[0], eg[1], eg[2], lu, eg[4]] | |
2691 | + | else if (("Oceania" == cf)) | |
2692 | + | then [eg[0], eg[1], eg[2], eg[3], lu] | |
2680 | 2693 | else throw("wrong continent") | |
2681 | 2694 | } | |
2682 | 2695 | ||
2683 | - | let | |
2684 | - | let | |
2685 | - | let | |
2686 | - | let | |
2687 | - | func | |
2688 | - | then | |
2689 | - | else | |
2690 | - | ||
2691 | - | func | |
2692 | - | then | |
2696 | + | let er = { | |
2697 | + | let ei = jT | |
2698 | + | let ej = size(ei) | |
2699 | + | let ek = fJ | |
2700 | + | func gW (em,en) = if ((en >= ej)) | |
2701 | + | then em | |
2702 | + | else lt(em, ei[en]) | |
2703 | + | ||
2704 | + | func gX (em,en) = if ((en >= ej)) | |
2705 | + | then em | |
2693 | 2706 | else throw("List size exceeds 100") | |
2694 | 2707 | ||
2695 | - | | |
2696 | - | } | |
2697 | - | $Tuple2([StringEntry( | |
2708 | + | gX(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(gW(ek, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100) | |
2709 | + | } | |
2710 | + | $Tuple2([StringEntry(cV("Americas"), er[0]), StringEntry(cV("Europe"), er[1]), StringEntry(cV("Asia"), er[2]), StringEntry(cV("Africa"), er[3]), StringEntry(cV("Oceania"), er[4])], 0) | |
2698 | 2711 | } | |
2699 | 2712 | ||
2700 | 2713 | ||
2701 | 2714 | ||
2702 | - | @Callable( | |
2703 | - | func fixStakedPieces ( | |
2715 | + | @Callable(fZ) | |
2716 | + | func fixStakedPieces (ct) = if ((fZ.caller != cH)) | |
2704 | 2717 | then throw("Access denied") | |
2705 | 2718 | else { | |
2706 | - | let | |
2719 | + | let km = if ((ct == "")) | |
2707 | 2720 | then 0 | |
2708 | 2721 | else { | |
2709 | - | let | |
2710 | - | let | |
2711 | - | then split_51C(value( | |
2722 | + | let kf = getString(al, cX(ct)) | |
2723 | + | let kb = if (isDefined(kf)) | |
2724 | + | then split_51C(value(kf), "_") | |
2712 | 2725 | else nil | |
2713 | - | func | |
2714 | - | let | |
2715 | - | let | |
2716 | - | ( | |
2726 | + | func lv (eg,O) = { | |
2727 | + | let iS = value(assetInfo(fromBase58String(O))) | |
2728 | + | let df = split(iS.description, "_")[cN] | |
2729 | + | (eg + de(df)) | |
2717 | 2730 | } | |
2718 | 2731 | ||
2719 | - | let | |
2720 | - | let | |
2721 | - | let | |
2722 | - | func | |
2723 | - | then | |
2724 | - | else | |
2725 | - | ||
2726 | - | func | |
2727 | - | then | |
2732 | + | let ei = kb | |
2733 | + | let ej = size(ei) | |
2734 | + | let ek = 0 | |
2735 | + | func el (em,en) = if ((en >= ej)) | |
2736 | + | then em | |
2737 | + | else lv(em, ei[en]) | |
2738 | + | ||
2739 | + | func eo (em,en) = if ((en >= ej)) | |
2740 | + | then em | |
2728 | 2741 | else throw("List size exceeds 100") | |
2729 | 2742 | ||
2730 | - | | |
2743 | + | eo(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(el(ek, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100) | |
2731 | 2744 | } | |
2732 | - | $Tuple2([IntegerEntry( | |
2745 | + | $Tuple2([IntegerEntry(cY(ct), km)], km) | |
2733 | 2746 | } | |
2734 | 2747 | ||
2735 | 2748 | ||
2736 | 2749 | ||
2737 | - | @Callable( | |
2738 | - | func setCustomName ( | |
2739 | - | let | |
2740 | - | if ((size( | |
2750 | + | @Callable(fZ) | |
2751 | + | func setCustomName (bk,kd,bo) = { | |
2752 | + | let kv = ks(fZ) | |
2753 | + | if ((size(fZ.payments) != 1)) | |
2741 | 2754 | then throw("Exactly one payment required") | |
2742 | 2755 | else { | |
2743 | - | let | |
2744 | - | if (( | |
2756 | + | let kw = value(fZ.payments[0]) | |
2757 | + | if ((kw.assetId != ce)) | |
2745 | 2758 | then throw("Allowed USDT payment only!") | |
2746 | - | else if (( | |
2747 | - | then throw(("Payment should be " + toString( | |
2748 | - | else if (contains( | |
2749 | - | then throw(("Name should not contain '__': " + | |
2750 | - | else if ((size( | |
2751 | - | then throw(("Name too long, maxLength=" + toString( | |
2759 | + | else if ((kw.amount != ds)) | |
2760 | + | then throw(("Payment should be " + toString(ds))) | |
2761 | + | else if (contains(kd, "__")) | |
2762 | + | then throw(("Name should not contain '__': " + kd)) | |
2763 | + | else if ((size(kd) > dt)) | |
2764 | + | then throw(("Name too long, maxLength=" + toString(dt))) | |
2752 | 2765 | else { | |
2753 | - | let b = toString( | |
2754 | - | let | |
2755 | - | let | |
2756 | - | if (("ACCOUNT" == | |
2766 | + | let b = toString(fZ.originCaller) | |
2767 | + | let lw = { | |
2768 | + | let cf = bo | |
2769 | + | if (("ACCOUNT" == cf)) | |
2757 | 2770 | then { | |
2758 | - | let | |
2759 | - | let | |
2760 | - | if (isDefined( | |
2761 | - | then throw(("Name already registered: " + | |
2771 | + | let lx = dM(kd) | |
2772 | + | let ly = getString(lx) | |
2773 | + | if (isDefined(ly)) | |
2774 | + | then throw(("Name already registered: " + kd)) | |
2762 | 2775 | else { | |
2763 | - | let | |
2764 | - | let | |
2765 | - | let | |
2766 | - | then [DeleteEntry( | |
2776 | + | let lz = bw(b) | |
2777 | + | let lA = getString(lz) | |
2778 | + | let lB = if (isDefined(lA)) | |
2779 | + | then [DeleteEntry(dM(value(lA)))] | |
2767 | 2780 | else nil | |
2768 | - | ((( | |
2781 | + | (((lB :+ StringEntry(lz, kd)) :+ StringEntry(lx, b)) ++ jD(b, W)._1) | |
2769 | 2782 | } | |
2770 | 2783 | } | |
2771 | - | else if (("LAND" == | |
2784 | + | else if (("LAND" == cf)) | |
2772 | 2785 | then { | |
2773 | - | let | |
2774 | - | let | |
2775 | - | if (!(isDefined(getInteger( | |
2776 | - | then throw(( | |
2786 | + | let iS = value(assetInfo(fromBase58String(bk))) | |
2787 | + | let iT = bm(bk) | |
2788 | + | if (!(isDefined(getInteger(iT)))) | |
2789 | + | then throw((iS.name + " is not staked")) | |
2777 | 2790 | else { | |
2778 | - | let | |
2779 | - | if (( | |
2780 | - | then throw(( | |
2791 | + | let iV = valueOrErrorMessage(getString(bj(bk)), (("NFT " + iS.name) + " is orphaned")) | |
2792 | + | if ((iV != b)) | |
2793 | + | then throw((aA + " is not yours")) | |
2781 | 2794 | else { | |
2782 | - | let | |
2783 | - | let | |
2784 | - | if (isDefined( | |
2785 | - | then throw(("Name already registered: " + | |
2795 | + | let lx = dF(kd) | |
2796 | + | let ly = getString(lx) | |
2797 | + | if (isDefined(ly)) | |
2798 | + | then throw(("Name already registered: " + kd)) | |
2786 | 2799 | else { | |
2787 | - | let | |
2788 | - | let | |
2789 | - | let | |
2790 | - | then [DeleteEntry( | |
2800 | + | let lC = bl(bk) | |
2801 | + | let lA = getString(lC) | |
2802 | + | let lB = if (isDefined(lA)) | |
2803 | + | then [DeleteEntry(dF(value(lA)))] | |
2791 | 2804 | else nil | |
2792 | - | ((( | |
2805 | + | (((lB :+ StringEntry(lC, kd)) :+ StringEntry(lx, bk)) ++ jD(b, W)._1) | |
2793 | 2806 | } | |
2794 | 2807 | } | |
2795 | 2808 | } | |
2796 | 2809 | } | |
2797 | - | else if (("DUCK" == | |
2810 | + | else if (("DUCK" == cf)) | |
2798 | 2811 | then { | |
2799 | - | let | |
2800 | - | let | |
2801 | - | if (if (!(isDefined(getInteger( | |
2812 | + | let iS = value(assetInfo(fromBase58String(bk))) | |
2813 | + | let iT = bm(bk) | |
2814 | + | if (if (!(isDefined(getInteger(iT)))) | |
2802 | 2815 | then true | |
2803 | - | else !(isDefined(getString( | |
2804 | - | then throw(( | |
2816 | + | else !(isDefined(getString(bC(b))))) | |
2817 | + | then throw((iS.name + " is not staked")) | |
2805 | 2818 | else { | |
2806 | - | let | |
2807 | - | if (( | |
2808 | - | then throw(( | |
2819 | + | let iV = valueOrErrorMessage(getString(bB(bk)), (("NFT " + iS.name) + " is orphaned")) | |
2820 | + | if ((iV != b)) | |
2821 | + | then throw((aB + " is not yours")) | |
2809 | 2822 | else { | |
2810 | - | let | |
2811 | - | let | |
2812 | - | if (isDefined( | |
2813 | - | then throw(("Name already registered: " + | |
2823 | + | let lx = dL(kd) | |
2824 | + | let ly = getString(lx) | |
2825 | + | if (isDefined(ly)) | |
2826 | + | then throw(("Name already registered: " + kd)) | |
2814 | 2827 | else { | |
2815 | - | let | |
2816 | - | let | |
2817 | - | let | |
2818 | - | then [DeleteEntry( | |
2828 | + | let lC = bv(bk) | |
2829 | + | let lA = getString(lC) | |
2830 | + | let lB = if (isDefined(lA)) | |
2831 | + | then [DeleteEntry(dL(value(lA)))] | |
2819 | 2832 | else nil | |
2820 | - | ((( | |
2833 | + | (((lB :+ StringEntry(lC, kd)) :+ StringEntry(lx, bk)) ++ jx(bk, W)._1) | |
2821 | 2834 | } | |
2822 | 2835 | } | |
2823 | 2836 | } | |
2824 | 2837 | } | |
2825 | 2838 | else throw("Unknown entity type") | |
2826 | 2839 | } | |
2827 | - | $Tuple2((( | |
2840 | + | $Tuple2(((lw :+ ScriptTransfer(cI, kw.amount, ce)) :+ kv), 0) | |
2828 | 2841 | } | |
2829 | 2842 | } | |
2830 | 2843 | } | |
2831 | 2844 | ||
2832 | 2845 | ||
2833 | 2846 | ||
2834 | - | @Callable( | |
2835 | - | func setReferrals ( | |
2847 | + | @Callable(fZ) | |
2848 | + | func setReferrals (lD,lE) = if ((fZ.callerPublicKey != dp)) | |
2836 | 2849 | then throw("Permission denied") | |
2837 | 2850 | else { | |
2838 | - | let | |
2839 | - | if ((size( | |
2851 | + | let kv = ks(fZ) | |
2852 | + | if ((size(fZ.payments) != 0)) | |
2840 | 2853 | then throw("No payments required") | |
2841 | - | else if (!(isDefined(addressFromString( | |
2842 | - | then throw(("Invalid address: " + | |
2843 | - | else if (!(isDefined(addressFromString( | |
2844 | - | then throw(("Invalid address: " + | |
2854 | + | else if (!(isDefined(addressFromString(lD)))) | |
2855 | + | then throw(("Invalid address: " + lD)) | |
2856 | + | else if (!(isDefined(addressFromString(lE)))) | |
2857 | + | then throw(("Invalid address: " + lE)) | |
2845 | 2858 | else { | |
2846 | - | let | |
2847 | - | let | |
2848 | - | let | |
2849 | - | then split_4C(value( | |
2859 | + | let lF = dN() | |
2860 | + | let lG = getString(lF) | |
2861 | + | let lH = if (isDefined(lG)) | |
2862 | + | then split_4C(value(lG), "_") | |
2850 | 2863 | else nil | |
2851 | - | if (containsElement( | |
2852 | - | then throw(( | |
2864 | + | if (containsElement(lH, lE)) | |
2865 | + | then throw((lE + " is not newbie (already has referrals)")) | |
2853 | 2866 | else { | |
2854 | - | let | |
2855 | - | let | |
2856 | - | if (if (isDefined( | |
2857 | - | then isDefined(addressFromString(value( | |
2867 | + | let jF = bx(lE) | |
2868 | + | let jG = getString(jF) | |
2869 | + | if (if (isDefined(jG)) | |
2870 | + | then isDefined(addressFromString(value(jG))) | |
2858 | 2871 | else false) | |
2859 | - | then throw((( | |
2872 | + | then throw(((lE + " already has refBy: ") + value(jG))) | |
2860 | 2873 | else { | |
2861 | - | let | |
2862 | - | let | |
2863 | - | let | |
2864 | - | then split_4C(value( | |
2874 | + | let lI = bA(lD) | |
2875 | + | let lJ = getString(lI) | |
2876 | + | let lK = if (isDefined(lJ)) | |
2877 | + | then split_4C(value(lJ), "_") | |
2865 | 2878 | else nil | |
2866 | - | if (containsElement( | |
2867 | - | then throw(((( | |
2879 | + | if (containsElement(lK, lE)) | |
2880 | + | then throw((((lD + " already contains ") + lE) + " within referrals")) | |
2868 | 2881 | else { | |
2869 | - | let | |
2870 | - | let | |
2871 | - | then value( | |
2872 | - | else makeString_2C(( | |
2873 | - | $Tuple2([StringEntry( | |
2882 | + | let lL = makeString_2C((lK :+ lE), "_") | |
2883 | + | let lM = if (containsElement(lH, lD)) | |
2884 | + | then value(lG) | |
2885 | + | else makeString_2C((lH :+ lD), "_") | |
2886 | + | $Tuple2([StringEntry(jF, lD), StringEntry(lI, lL), StringEntry(lF, lM), kv], 0) | |
2874 | 2887 | } | |
2875 | 2888 | } | |
2876 | 2889 | } | |
2877 | 2890 | } | |
2878 | 2891 | } | |
2879 | 2892 | ||
2880 | 2893 | ||
2881 | 2894 | ||
2882 | - | @Callable( | |
2883 | - | func distributePoints ( | |
2884 | - | let | |
2885 | - | if ((size( | |
2895 | + | @Callable(fZ) | |
2896 | + | func distributePoints (lN,lO,lP,lQ,lR) = { | |
2897 | + | let kv = ks(fZ) | |
2898 | + | if ((size(fZ.payments) != 0)) | |
2886 | 2899 | then throw("No payments required") | |
2887 | 2900 | else { | |
2888 | - | let b = toString( | |
2889 | - | let | |
2890 | - | let | |
2891 | - | let | |
2892 | - | let | |
2893 | - | let | |
2894 | - | let | |
2895 | - | let | |
2896 | - | if (( | |
2897 | - | then throw((("There are only " + toString( | |
2901 | + | let b = toString(fZ.originCaller) | |
2902 | + | let z = valueOrErrorMessage(getString(bC(b)), "You don't have a duck staked") | |
2903 | + | let lS = H(b) | |
2904 | + | let lT = valueOrElse(getInteger(al, lS), 0) | |
2905 | + | let lU = D(z) | |
2906 | + | let lV = valueOrElse(getInteger(al, lU), 0) | |
2907 | + | let lW = (lT + lV) | |
2908 | + | let lX = ((((lN + lO) + lP) + lQ) + lR) | |
2909 | + | if ((lX > lW)) | |
2910 | + | then throw((("There are only " + toString(lW)) + " free points to distribute")) | |
2898 | 2911 | else { | |
2899 | - | let | |
2900 | - | let | |
2901 | - | let | |
2902 | - | $Tuple2([IntegerEntry( | |
2912 | + | let lY = A(z) | |
2913 | + | let ao = split(valueOrElse(getString(al, lY), "0_0_0_0_0"), "_") | |
2914 | + | let lZ = (lT - lX) | |
2915 | + | $Tuple2([IntegerEntry(lS, if ((0 > lZ)) | |
2903 | 2916 | then 0 | |
2904 | - | else | |
2905 | - | then ( | |
2906 | - | else | |
2917 | + | else lZ), IntegerEntry(lU, if ((0 > lZ)) | |
2918 | + | then (lV + lZ) | |
2919 | + | else lV), StringEntry(lY, makeString([toString((parseIntValue(ao[j]) + lN)), toString((parseIntValue(ao[k]) + lO)), toString((parseIntValue(ao[l]) + lP)), toString((parseIntValue(ao[m]) + lQ)), toString((parseIntValue(ao[n]) + lR))], "_")), kv], 0) | |
2907 | 2920 | } | |
2908 | 2921 | } | |
2909 | 2922 | } | |
2910 | 2923 | ||
2911 | 2924 | ||
2912 | 2925 | ||
2913 | - | @Callable( | |
2914 | - | func splitByGlobalWeightsREADONLY ( | |
2915 | - | ||
2916 | - | ||
2917 | - | ||
2918 | - | @Callable( | |
2919 | - | func splitByGlobalAndLocalWeightsREADONLY ( | |
2920 | - | let | |
2921 | - | $Tuple2(nil, $Tuple2( | |
2922 | - | } | |
2923 | - | ||
2924 | - | ||
2925 | - | ||
2926 | - | @Callable( | |
2927 | - | func getBackpackREADONLY ( | |
2928 | - | ||
2929 | - | ||
2930 | - | ||
2931 | - | @Callable( | |
2932 | - | func getWarehouseREADONLY ( | |
2933 | - | let | |
2934 | - | let | |
2935 | - | let | |
2936 | - | $Tuple2(nil, makeString_2C( | |
2937 | - | } | |
2938 | - | ||
2939 | - | ||
2940 | - | ||
2941 | - | @Callable( | |
2926 | + | @Callable(fZ) | |
2927 | + | func splitByGlobalWeightsREADONLY (dX) = $Tuple2(nil, ep(dX)) | |
2928 | + | ||
2929 | + | ||
2930 | + | ||
2931 | + | @Callable(fZ) | |
2932 | + | func splitByGlobalAndLocalWeightsREADONLY (ma,mb,gc) = { | |
2933 | + | let fV = gb(gc) | |
2934 | + | $Tuple2(nil, $Tuple2(ep(ma), ea(mb, fV))) | |
2935 | + | } | |
2936 | + | ||
2937 | + | ||
2938 | + | ||
2939 | + | @Callable(fZ) | |
2940 | + | func getBackpackREADONLY (z) = $Tuple2(nil, makeString(hb(bD(z)), ":")) | |
2941 | + | ||
2942 | + | ||
2943 | + | ||
2944 | + | @Callable(fZ) | |
2945 | + | func getWarehouseREADONLY (O) = { | |
2946 | + | let iS = value(assetInfo(fromBase58String(O))) | |
2947 | + | let hq = (de(split(iS.description, "_")[cN]) / cm) | |
2948 | + | let hr = valueOrElse(getInteger(bt(O)), 0) | |
2949 | + | $Tuple2(nil, makeString_2C(ho(bs(O), hq, hr), ":")) | |
2950 | + | } | |
2951 | + | ||
2952 | + | ||
2953 | + | ||
2954 | + | @Callable(fZ) | |
2942 | 2955 | func saveLastTx () = { | |
2943 | - | let | |
2944 | - | if (if (if (( | |
2945 | - | then ( | |
2956 | + | let ia = fZ.caller | |
2957 | + | if (if (if ((ia != cK)) | |
2958 | + | then (ia != cI) | |
2946 | 2959 | else false) | |
2947 | - | then ( | |
2960 | + | then (ia != cL) | |
2948 | 2961 | else false) | |
2949 | 2962 | then throw("Access denied") | |
2950 | - | else $Tuple2([ | |
2951 | - | } | |
2952 | - | ||
2953 | - | ||
2954 | - | ||
2955 | - | @Callable( | |
2956 | - | func updateDuckStats ( | |
2963 | + | else $Tuple2([ks(fZ)], 42) | |
2964 | + | } | |
2965 | + | ||
2966 | + | ||
2967 | + | ||
2968 | + | @Callable(fZ) | |
2969 | + | func updateDuckStats (z,jy) = if ((fZ.caller != cI)) | |
2957 | 2970 | then throw("Access denied") | |
2958 | - | else | |
2959 | - | ||
2960 | - | ||
2961 | - | ||
2962 | - | @Callable( | |
2963 | - | func updateAccStats (b, | |
2971 | + | else jx(z, jy) | |
2972 | + | ||
2973 | + | ||
2974 | + | ||
2975 | + | @Callable(fZ) | |
2976 | + | func updateAccStats (b,jy) = if ((fZ.caller != cI)) | |
2964 | 2977 | then throw("Access denied") | |
2965 | - | else | |
2966 | - | ||
2967 | - | ||
2968 | - | ||
2969 | - | @Callable( | |
2970 | - | func equipDuck ( | |
2971 | - | let | |
2972 | - | if ((size( | |
2978 | + | else jD(b, jy) | |
2979 | + | ||
2980 | + | ||
2981 | + | ||
2982 | + | @Callable(fZ) | |
2983 | + | func equipDuck (mc) = { | |
2984 | + | let kv = ks(fZ) | |
2985 | + | if ((size(fZ.payments) != 0)) | |
2973 | 2986 | then throw("No payments required") | |
2974 | 2987 | else { | |
2975 | - | let b = toString( | |
2976 | - | let | |
2977 | - | if ( | |
2988 | + | let b = toString(fZ.originCaller) | |
2989 | + | let z = valueOrErrorMessage(getString(bC(b)), "You don't have a duck staked") | |
2990 | + | if (jN(z)) | |
2978 | 2991 | then throw("equipDuck_checkTournament") | |
2979 | 2992 | else { | |
2980 | - | let | |
2981 | - | let | |
2982 | - | let | |
2983 | - | let | |
2984 | - | let | |
2985 | - | if ((size( | |
2993 | + | let fM = E(z) | |
2994 | + | let md = split(valueOrElse(getString(fM), ",;,_,;,_,;,_,;,_,;,_,;,"), "_") | |
2995 | + | let hc = bD(z) | |
2996 | + | let hF = hb(hc) | |
2997 | + | let iD = split(mc, "_") | |
2998 | + | if ((size(iD) != p)) | |
2986 | 2999 | then throw("Wrong equipment string") | |
2987 | 3000 | else { | |
2988 | - | let | |
2989 | - | let | |
2990 | - | let | |
3001 | + | let fO = fB(md, eM(hF[bh]), true, nil) | |
3002 | + | let fP = split(iD[o], ";")[1] | |
3003 | + | let am = if ((fP == "")) | |
2991 | 3004 | then 0 | |
2992 | 3005 | else { | |
2993 | - | let | |
2994 | - | if (( | |
3006 | + | let fQ = split(fP, ",")[0] | |
3007 | + | if ((fQ == "")) | |
2995 | 3008 | then 0 | |
2996 | 3009 | else { | |
2997 | - | let | |
2998 | - | let | |
2999 | - | let | |
3000 | - | if (if (if (if (if (( | |
3010 | + | let fb = split(fQ, ":") | |
3011 | + | let cG = fb[0] | |
3012 | + | let fR = fb[1] | |
3013 | + | if (if (if (if (if ((cG == "06")) | |
3001 | 3014 | then true | |
3002 | - | else ( | |
3015 | + | else (cG == "07")) | |
3003 | 3016 | then true | |
3004 | - | else ( | |
3005 | - | then ( | |
3017 | + | else (cG == "08")) | |
3018 | + | then (fR != "") | |
3006 | 3019 | else false) | |
3007 | - | then (parseIntValue( | |
3020 | + | then (parseIntValue(fR) > 0) | |
3008 | 3021 | else false) | |
3009 | - | then parseIntValue(split( | |
3022 | + | then parseIntValue(split(aP[parseIntValue(cG)], "_")[aR]) | |
3010 | 3023 | else 0 | |
3011 | 3024 | } | |
3012 | 3025 | } | |
3013 | - | let | |
3014 | - | let | |
3015 | - | let | |
3016 | - | $Tuple2([StringEntry( | |
3026 | + | let fw = ak(this, z, am, true) | |
3027 | + | let fS = fB(iD, fO, false, fw) | |
3028 | + | let me = eR(fS) | |
3029 | + | $Tuple2([StringEntry(fM, mc), StringEntry(hc, makeString_2C([hF[be], hF[bf], hF[bg], me], ":")), StringEntry(K(z), makeString([toString(fw[7]), toString(fw[8]), toString(fw[9]), toString(fw[10]), toString(fw[11])], "_")), kv], 0) | |
3017 | 3030 | } | |
3018 | 3031 | } | |
3019 | 3032 | } | |
3020 | 3033 | } | |
3021 | 3034 | ||
3022 | 3035 | ||
3023 | 3036 | ||
3024 | - | @Callable( | |
3025 | - | func fortificateLand ( | |
3026 | - | let | |
3027 | - | if ((size( | |
3037 | + | @Callable(fZ) | |
3038 | + | func fortificateLand (O,mf) = { | |
3039 | + | let kv = ks(fZ) | |
3040 | + | if ((size(fZ.payments) != 0)) | |
3028 | 3041 | then throw("No payments required") | |
3029 | 3042 | else { | |
3030 | - | let b = toString( | |
3031 | - | let | |
3032 | - | let | |
3033 | - | let | |
3034 | - | let | |
3035 | - | let | |
3036 | - | let | |
3037 | - | let | |
3038 | - | let | |
3039 | - | let | |
3040 | - | let | |
3041 | - | let | |
3042 | - | let | |
3043 | - | let | |
3044 | - | let | |
3045 | - | let | |
3046 | - | let | |
3047 | - | let | |
3048 | - | let | |
3049 | - | let | |
3050 | - | let | |
3051 | - | let | |
3052 | - | let | |
3053 | - | let | |
3054 | - | $Tuple2([StringEntry( | |
3055 | - | } | |
3056 | - | } | |
3057 | - | ||
3058 | - | ||
3059 | - | ||
3060 | - | @Callable( | |
3061 | - | func initDuckTourAttempt ( | |
3043 | + | let b = toString(fZ.originCaller) | |
3044 | + | let z = valueOrElse(getString(bC(b)), "") | |
3045 | + | let eW = ak(this, z, 0, false) | |
3046 | + | let mg = bu(O) | |
3047 | + | let mh = split(valueOrElse(getString(mg), ":0_15:0_18:0"), "_") | |
3048 | + | let iS = value(assetInfo(fromBase58String(O))) | |
3049 | + | let hq = (de(split(iS.description, "_")[cN]) / cm) | |
3050 | + | let hr = valueOrElse(getInteger(bt(O)), 0) | |
3051 | + | let hp = bs(O) | |
3052 | + | let hu = ho(hp, hq, hr) | |
3053 | + | let mi = split(hu[aZ], "_") | |
3054 | + | let mj = parseIntValue(mi[bb]) | |
3055 | + | let mk = parseIntValue(mi[bc]) | |
3056 | + | let ml = split(mf, "_") | |
3057 | + | let mm = fI(mh, eM(hu[aY]), mj, mk, true, nil) | |
3058 | + | let fO = mm._1 | |
3059 | + | let mn = mm._2 | |
3060 | + | let mo = mm._3 | |
3061 | + | let mp = fI(ml, fO, mn, mo, false, eW) | |
3062 | + | let fS = mp._1 | |
3063 | + | let mq = mp._2 | |
3064 | + | let mr = mp._3 | |
3065 | + | let me = eR(fS) | |
3066 | + | let jw = makeString([mi[ba], toString(mq), toString(mr), mi[bd]], "_") | |
3067 | + | $Tuple2([StringEntry(mg, mf), StringEntry(hp, makeString_2C([hu[aV], hu[aW], hu[aX], me, jw], ":")), kv], 0) | |
3068 | + | } | |
3069 | + | } | |
3070 | + | ||
3071 | + | ||
3072 | + | ||
3073 | + | @Callable(fZ) | |
3074 | + | func initDuckTourAttempt (z) = if ((fZ.caller != cL)) | |
3062 | 3075 | then throw("Access denied") | |
3063 | 3076 | else { | |
3064 | - | let | |
3065 | - | let | |
3066 | - | let | |
3067 | - | let | |
3068 | - | let | |
3069 | - | let | |
3070 | - | let | |
3071 | - | let | |
3072 | - | $Tuple2([ | |
3077 | + | let kv = ks(fZ) | |
3078 | + | let is = y(z) | |
3079 | + | let it = ae(valueOrElse(getInteger(C(z)), 0)) | |
3080 | + | let kJ = valueOrElse(getInteger(is), it) | |
3081 | + | let ms = bE(z) | |
3082 | + | let iP = valueOrElse(getString(ms), aI) | |
3083 | + | let jO = valueOrElse(getInteger(cL, bJ), 0) | |
3084 | + | let mt = (toString(jO) + "_T_0") | |
3085 | + | $Tuple2([kv, IntegerEntry(I(z), kJ), IntegerEntry(is, it), StringEntry(J(z), iP), StringEntry(ms, mt)], mt) | |
3073 | 3086 | } | |
3074 | 3087 | ||
3075 | 3088 | ||
3076 | 3089 | ||
3077 | - | @Callable( | |
3090 | + | @Callable(fZ) | |
3078 | 3091 | func breakAttempt () = { | |
3079 | - | let | |
3080 | - | let | |
3081 | - | let | |
3082 | - | let | |
3083 | - | if ((split( | |
3092 | + | let kv = ks(fZ) | |
3093 | + | let z = valueOrErrorMessage(getString(bC(toString(fZ.caller))), "You don't have a duck staked") | |
3094 | + | let ms = bE(z) | |
3095 | + | let iP = valueOrElse(getString(ms), aI) | |
3096 | + | if ((split(iP, "_")[bX] != "T")) | |
3084 | 3097 | then throw("Your duck is not in the tournament") | |
3085 | 3098 | else { | |
3086 | - | let | |
3087 | - | let | |
3088 | - | $Tuple2([ | |
3089 | - | } | |
3090 | - | } | |
3091 | - | ||
3092 | - | ||
3093 | - | ||
3094 | - | @Callable( | |
3095 | - | func exitTournamentInternal ( | |
3099 | + | let mu = getIntegerValue(I(z)) | |
3100 | + | let mv = getStringValue(J(z)) | |
3101 | + | $Tuple2([kv, IntegerEntry(y(z), mu), StringEntry(ms, mv)], iP) | |
3102 | + | } | |
3103 | + | } | |
3104 | + | ||
3105 | + | ||
3106 | + | ||
3107 | + | @Callable(fZ) | |
3108 | + | func exitTournamentInternal (z) = if ((fZ.caller != this)) | |
3096 | 3109 | then throw("Access denied") | |
3097 | 3110 | else { | |
3098 | - | let | |
3099 | - | let | |
3100 | - | $Tuple2([IntegerEntry( | |
3111 | + | let mu = getIntegerValue(I(z)) | |
3112 | + | let mv = getStringValue(J(z)) | |
3113 | + | $Tuple2([IntegerEntry(y(z), mu), StringEntry(bE(z), mv)], 0) | |
3101 | 3114 | } | |
3102 | 3115 | ||
3103 | 3116 | ||
3104 | 3117 | ||
3105 | - | @Callable( | |
3106 | - | func prepareRobbery ( | |
3107 | - | let | |
3108 | - | if (!(sigVerify_8Kb( | |
3118 | + | @Callable(fZ) | |
3119 | + | func prepareRobbery (ih,ii) = { | |
3120 | + | let kv = ks(fZ) | |
3121 | + | if (!(sigVerify_8Kb(ih, ii, dp))) | |
3109 | 3122 | then throw("signature does not match") | |
3110 | - | else if ((size( | |
3123 | + | else if ((size(fZ.payments) != 1)) | |
3111 | 3124 | then throw("exactly 1 payment must be attached") | |
3112 | 3125 | else { | |
3113 | - | let | |
3114 | - | let | |
3115 | - | if (if (!(isDefined( | |
3126 | + | let kw = fZ.payments[0] | |
3127 | + | let mw = kw.amount | |
3128 | + | if (if (!(isDefined(kw.assetId))) | |
3116 | 3129 | then true | |
3117 | - | else (value( | |
3130 | + | else (value(kw.assetId) != cR)) | |
3118 | 3131 | then throw("WLGOLD payments only!") | |
3119 | 3132 | else { | |
3120 | - | let | |
3121 | - | if ((size( | |
3133 | + | let eE = split(toUtf8String(ih), "|") | |
3134 | + | if ((size(eE) != 2)) | |
3122 | 3135 | then throw("Wrong message format") | |
3123 | 3136 | else { | |
3124 | - | let x = ex[0] | |
3125 | - | let mq = ao(this, x) | |
3126 | - | let as = mq._1 | |
3127 | - | let aq = mq._2 | |
3128 | - | if ((as > mp)) | |
3129 | - | then throw(((("Payment " + toString(mp)) + " < required ") + toString(as))) | |
3137 | + | let z = eE[0] | |
3138 | + | let aw = as(this, z)._1 | |
3139 | + | if ((aw > mw)) | |
3140 | + | then throw(((("Payment " + toString(mw)) + " < required ") + toString(aw))) | |
3130 | 3141 | else { | |
3131 | - | let mr = split(ex[1], "_") | |
3132 | - | let ar = lastBlock.timestamp | |
3133 | - | func ms (dZ,M) = { | |
3134 | - | let mt = valueOrElse(getInteger(L(M)), 0) | |
3135 | - | let mu = valueOrElse(getInteger(N(M)), 0) | |
3136 | - | if ((mt > size(t))) | |
3137 | - | then throw("Invalid state") | |
3138 | - | else if ((ar > mu)) | |
3139 | - | then { | |
3140 | - | let mv = valueOrElse(getInteger(bf(M)), 0) | |
3141 | - | if ((0 >= mv)) | |
3142 | - | then dZ | |
3143 | - | else { | |
3144 | - | let fz = value(assetInfo(fromBase58String(M))) | |
3145 | - | let iP = split(fz.description, "_") | |
3146 | - | let iA = cX(iP[cG]) | |
3147 | - | let mw = iz(M, iA) | |
3148 | - | let fY = (ar - mv) | |
3149 | - | let iS = fraction(fY, (mw * iA), az) | |
3150 | - | if ((u > iS)) | |
3151 | - | then dZ | |
3152 | - | else (dZ :+ M) | |
3142 | + | let mx = split(eE[1], "_") | |
3143 | + | let av = lastBlock.timestamp | |
3144 | + | let ax = valueOrElse(getInteger(Q(z)), 0) | |
3145 | + | let ay = valueOrElse(getString(R(z)), "") | |
3146 | + | let az = valueOrElse(getInteger(P(ay)), 0) | |
3147 | + | if (if ((ax != w)) | |
3148 | + | then (az > av) | |
3149 | + | else false) | |
3150 | + | then throw(("You already started robbing, wait till " + toString(az))) | |
3151 | + | else { | |
3152 | + | func my (eg,O) = { | |
3153 | + | let mz = valueOrElse(getInteger(N(O)), 0) | |
3154 | + | let mA = valueOrElse(getInteger(P(O)), 0) | |
3155 | + | if ((mz > size(t))) | |
3156 | + | then throw("Invalid state") | |
3157 | + | else if ((av > mA)) | |
3158 | + | then { | |
3159 | + | let mB = valueOrElse(getInteger(bm(O)), 0) | |
3160 | + | if ((0 >= mB)) | |
3161 | + | then eg | |
3162 | + | else { | |
3163 | + | let fG = value(assetInfo(fromBase58String(O))) | |
3164 | + | let iW = split(fG.description, "_") | |
3165 | + | let iH = de(iW[cN]) | |
3166 | + | let mC = iG(O, iH) | |
3167 | + | let gf = (av - mB) | |
3168 | + | let iZ = fraction(gf, (mC * iH), aG) | |
3169 | + | if ((u > iZ)) | |
3170 | + | then eg | |
3171 | + | else (eg :+ O) | |
3172 | + | } | |
3153 | 3173 | } | |
3174 | + | else eg | |
3175 | + | } | |
3176 | + | ||
3177 | + | let mD = { | |
3178 | + | let ei = mx | |
3179 | + | let ej = size(ei) | |
3180 | + | let ek = nil | |
3181 | + | func el (em,en) = if ((en >= ej)) | |
3182 | + | then em | |
3183 | + | else my(em, ei[en]) | |
3184 | + | ||
3185 | + | func eo (em,en) = if ((en >= ej)) | |
3186 | + | then em | |
3187 | + | else throw("List size exceeds 10") | |
3188 | + | ||
3189 | + | eo(el(el(el(el(el(el(el(el(el(el(ek, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10) | |
3190 | + | } | |
3191 | + | if ((size(mD) == 0)) | |
3192 | + | then throw("No candidates for robbery") | |
3193 | + | else { | |
3194 | + | let mE = dh(size(mD), height, (ii + fZ.transactionId)) | |
3195 | + | let O = mD[mE] | |
3196 | + | $Tuple2([IntegerEntry(N(O), v), IntegerEntry(P(O), (av + t[v])), IntegerEntry(Q(z), x), StringEntry(R(z), O), kv], O) | |
3154 | 3197 | } | |
3155 | - | else dZ | |
3156 | - | } | |
3157 | - | ||
3158 | - | let mx = { | |
3159 | - | let eb = mr | |
3160 | - | let ec = size(eb) | |
3161 | - | let ed = nil | |
3162 | - | func ee (ef,eg) = if ((eg >= ec)) | |
3163 | - | then ef | |
3164 | - | else ms(ef, eb[eg]) | |
3165 | - | ||
3166 | - | func eh (ef,eg) = if ((eg >= ec)) | |
3167 | - | then ef | |
3168 | - | else throw("List size exceeds 10") | |
3169 | - | ||
3170 | - | eh(ee(ee(ee(ee(ee(ee(ee(ee(ee(ee(ed, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10) | |
3171 | - | } | |
3172 | - | if ((size(mx) == 0)) | |
3173 | - | then throw("No candidates for robbery") | |
3174 | - | else { | |
3175 | - | let my = da(size(mx), height, (ib + fS.transactionId)) | |
3176 | - | let M = mx[my] | |
3177 | - | $Tuple2([IntegerEntry(L(M), v), IntegerEntry(N(M), (ar + t[v])), ko], M) | |
3178 | 3198 | } | |
3179 | 3199 | } | |
3180 | 3200 | } | |
3181 | 3201 | } | |
3182 | 3202 | } | |
3183 | 3203 | } | |
3184 | 3204 | ||
3185 | 3205 |
github/deemru/w8io/169f3d6 1516.88 ms ◑