tx · AdZyetDQHzA1mV1Ub2ViNqAgtLJJWZp1hL4L5LegRPbL 3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm: -0.06000000 Waves 2023.06.08 21:15 [2614047] smart account 3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm > SELF 0.00000000 Waves
{ "type": 13, "id": "AdZyetDQHzA1mV1Ub2ViNqAgtLJJWZp1hL4L5LegRPbL", "fee": 6000000, "feeAssetId": null, "timestamp": 1686248198839, "version": 2, "chainId": 84, "sender": "3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm", "senderPublicKey": "EVooykMNV691Venwp1dHUTBd7KWequzUcda57Wd3LQEX", "proofs": [ "4fGVYu4F4kXyPtrkE1ACLadgq94Jw17ATHoopLGu4U93ET3o1QES6x9FQLh3qe5FsXM45ryy7jiMAGEmYJYgUq3G" ], "script": "base64:BgKWAQgCEgMKAQgSAwoBBBIAEgMKAQgSABIDCgEIEgQKAgEIEgQKAgEIEgQKAgICEgQKAgEIEgQKAgEBEgASBAoCCAgSABIECgICAhIDCgEIEgMKAQgSBAoCCAgSAwoBGBIDCgEYEgQKAggIEgQKAggIEgMKAQgSBQoDCAgIEgQKAggIEgMKAQESBQoDAQEIEgMKAQgSAwoBCJcBAAVjaGFpbgkAyQECCQDKAQIIBQR0aGlzBWJ5dGVzAAEAAQALdXNkdEFzc2V0SWQEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDABIITaerIIAz9O0bvKju6Lk7zJgt0LXfoHlqjUI/moD/+5AwkAAAIBAVQFByRtYXRjaDABIFWx2J9yh4Lv5eNbjawFq2XemkOhLxa7BfMat4el8cUYCQACAQINVW5rbm93biBjaGFpbgAVZGVmYXVsdFJlc3RBZGRyZXNzU3RyBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwAiMzUFFDdXZGYnZoNExrUFVucm5VMXozam5iQTFwOW0zV05odgMJAAACAQFUBQckbWF0Y2gwAiMzTXVta0dHenRDS0FYcFdEcXhrZGRvZnFYU1VicVFrdlNKeQkAAgECDVVua25vd24gY2hhaW4AEUluZnJhVXBncmFkZUNvc3RTBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwAIDIr6AlAwkAAAIBAVQFByRtYXRjaDAAgMLXLwkAAgECDVVua25vd24gY2hhaW4AA1NFUAICX18ABU1VTFQ2AMCEPQAFTVVMVDgAgMLXLwAKTEFORFBSRUZJWAIETEFORAAKRFVDS1BSRUZJWAIERFVDSwAKQVJUUFJFU0FMRQIHUFJFU0FMRQAGTlVNUkVTAAYABVNTSVpFABkABU1TSVpFAGQABUxTSVpFAOEBAAZYTFNJWkUAkAMAB1hYTFNJWkUA8QQAD0RBSUxZUkVTQllQSUVDRQCA+NIBAAlEQVlNSUxMSVMAgLiZKQAMV0hNVUxUSVBMSUVSAIDIr6AlAA9ERUZBVUxUTE9DQVRJT04CD0FmcmljYV9GX0FmcmljYQAQUkVTT1VSQ0VQUklDRU1JTgDVtQIACkVTU0VMTENPRUYACgAJcHJvZFR5cGVzCQDMCAICEEZpcnN0IEFpZCBLaXQgTDEJAMwIAgIQRmlyc3QgQWlkIEtpdCBMMgkAzAgCAhBGaXJzdCBBaWQgS2l0IEwzCQDMCAICC0JhY2twYWNrIEwxCQDMCAICC0JhY2twYWNrIEwyCQDMCAICC0JhY2twYWNrIEwzCQDMCAICDkZvb2QgUmF0aW9uIEwxCQDMCAICDkZvb2QgUmF0aW9uIEwyCQDMCAICDkZvb2QgUmF0aW9uIEwzCQDMCAICC0pldCBQYWNrIEwxCQDMCAICC0pldCBQYWNrIEwyCQDMCAICC0pldCBQYWNrIEwzCQDMCAICCVNoaWVsZCBMMQkAzAgCAglTaGllbGQgTDIJAMwIAgIJU2hpZWxkIEwzBQNuaWwACmNvbnRpbmVudHMJAMwIAgIIQW1lcmljYXMJAMwIAgIGRXVyb3BlCQDMCAICBEFzaWEJAMwIAgIGQWZyaWNhCQDMCAICB09jZWFuaWEFA25pbAAQcHJvZHVjdGlvbk1hdHJpeAkAzAgCAhIxXzFfMV8yXzJfNV8xXzEwXzAJAMwIAgITMl8yXzJfNF80XzEwXzFfMTBfMAkAzAgCAhMzXzNfM182XzZfMTVfMV8xMF8wCQDMCAICEzJfNV81XzJfN181XzJfMTAwXzEJAMwIAgIXNF8xMF8xMF80XzE0XzEwXzJfMTAwXzEJAMwIAgIXNl8xNV8xNV82XzIxXzE1XzJfMTAwXzEJAMwIAgISMV8xXzFfMV8xXzhfMV8xMF8yCQDMCAICEzJfMl8yXzJfMl8xNl8xXzEwXzIJAMwIAgITM18zXzNfM18zXzI0XzFfMTBfMgkAzAgCAhM5XzlfMV81XzVfMV81XzEwMF8zCQDMCAICFzE4XzE4XzJfMTBfMTBfMl81XzEwMF8zCQDMCAICFzI3XzI3XzNfMTVfMTVfM181XzEwMF8zCQDMCAICEjJfMl8xXzJfMl8yXzFfMTBfNAkAzAgCAhI0XzRfMl80XzRfNF8xXzEwXzQJAMwIAgISNl82XzNfNl82XzZfMV8xMF80BQNuaWwAEXJlY2lwZUlkeFBhY2tzaXplAAcACnJlY0xhbmROdW0AAAALcmVjTGFuZFNpemUAAQALcmVjVGVycmFpbnMAAgAMcmVjQ29udGluZW50AAMAC3doSWR4TGV2ZWxzAAAACHdoSWR4UmVzAAEACHdoSWR4TWF0AAIACXdoSWR4UHJvZAADAAl3aElkeExPRlQABAAJdm9sTG9ja2VkAAAAC3ZvbE9jY3VwaWVkAAEAB3ZvbEZyZWUAAgAIdm9sVG90YWwAAwAKYnBJZHhMZXZlbAAAAAhicElkeFJlcwABAAhicElkeE1hdAACAAlicElkeFByb2QAAwEKZ2V0UGtnU2l6ZQEHcHJvZElkeAkBDXBhcnNlSW50VmFsdWUBCQCRAwIJALUJAgkAkQMCBRBwcm9kdWN0aW9uTWF0cml4BQdwcm9kSWR4AgFfBRFyZWNpcGVJZHhQYWNrc2l6ZQEPZ2V0U3RyaW5nT3JGYWlsAgdhZGRyZXNzA2tleQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFB2FkZHJlc3MFA2tleQkAuQkCCQDMCAICCm1hbmRhdG9yeSAJAMwIAgkApQgBBQdhZGRyZXNzCQDMCAICAS4JAMwIAgUDa2V5CQDMCAICDyBpcyBub3QgZGVmaW5lZAUDbmlsAgAAEUlkeENmZ0Vjb25vbXlEYXBwAAIAFElkeENmZ0dvdmVybmFuY2VEYXBwAAMBCmtleVJlc3RDZmcAAg4lc19fcmVzdENvbmZpZwEOa2V5UmVzdEFkZHJlc3MAAgwlc19fcmVzdEFkZHIBEXJlYWRSZXN0Q2ZnT3JGYWlsAQRyZXN0CQC8CQIJAQ9nZXRTdHJpbmdPckZhaWwCBQRyZXN0CQEKa2V5UmVzdENmZwAFA1NFUAEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgdyZXN0Q2ZnA2lkeAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJAJEDAgUHcmVzdENmZwUDaWR4CQCsAgICKlJlc3QgY2ZnIGRvZXNuJ3QgY29udGFpbiBhZGRyZXNzIGF0IGluZGV4IAkApAMBBQNpZHgADHJlc3RDb250cmFjdAkBEUBleHRyTmF0aXZlKDEwNjIpAQkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzCQEOa2V5UmVzdEFkZHJlc3MABRVkZWZhdWx0UmVzdEFkZHJlc3NTdHIAB3Jlc3RDZmcJARFyZWFkUmVzdENmZ09yRmFpbAEFDHJlc3RDb250cmFjdAAPZWNvbm9teUNvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUHcmVzdENmZwURSWR4Q2ZnRWNvbm9teURhcHAAC2dvdkNvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUHcmVzdENmZwUUSWR4Q2ZnR292ZXJuYW5jZURhcHABEWtleUxhc3RUeElkQnlVc2VyAQRhZGRyCQCsAgICD2xhc3RUeElkQnlVc2VyXwUEYWRkcgEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQdhc3NldElkCQCsAgICCW5mdE93bmVyXwUHYXNzZXRJZAEaa2V5TGFuZEFzc2V0SWRUb0N1c3RvbU5hbWUBB2Fzc2V0SWQJAKwCAgIYbGFuZEN1c3RvbU5hbWVCeUFzc2V0SWRfBQdhc3NldElkARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQdhc3NldElkCQCsAgICC3N0YWtlZFRpbWVfBQdhc3NldElkARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQdhc3NldElkCQCsAgICC2luZnJhTGV2ZWxfBQdhc3NldElkASBrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQW5kQXNzZXRJZAIEdHlwZQdhc3NldElkCQC5CQIJAMwIAgINbGFuZEFydFN0YXR1cwkAzAgCBQR0eXBlCQDMCAIFB2Fzc2V0SWQFA25pbAIBXwEia2V5U3Rha2VkVGltZUJ5VHlwZUFzc2V0SWRBbmRPd25lcgMHbmZ0VHlwZQdhc3NldElkCW93bmVyQWRkcgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICIHN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXJfBQduZnRUeXBlAgFfBQdhc3NldElkAgFfBQlvd25lckFkZHIBEmtleVdhcmVob3VzZUJ5TGFuZAELbGFuZEFzc2V0SWQJAKwCAgIKd2FyZUhvdXNlXwULbGFuZEFzc2V0SWQBFWtleVN0YWtlZExhbmRzQnlPd25lcgEJb3duZXJBZGRyCQCsAgICE3N0YWtlZExhbmRzQnlPd25lcl8FCW93bmVyQWRkcgEaa2V5RHVja0Fzc2V0SWRUb0N1c3RvbU5hbWUBB2Fzc2V0SWQJAKwCAgIYZHVja0N1c3RvbU5hbWVCeUFzc2V0SWRfBQdhc3NldElkARZrZXlBZGRyZXNzVG9DdXN0b21OYW1lAQRhZGRyCQCsAgICGGFjY291bnRDdXN0b21OYW1lQnlBZGRyXwUEYWRkcgEPa2V5QWRkcmVzc1JlZkJ5AQRhZGRyCQCsAgICCWFjY1JlZkJ5XwUEYWRkcgETa2V5QWRkcmVzc1JlZmVycmFscwEEYWRkcgkArAICAg1hY2NSZWZlcnJhbHNfBQRhZGRyARBrZXlEdWNrSWRUb093bmVyAQdhc3NldElkCQCsAgICCmR1Y2tPd25lcl8FB2Fzc2V0SWQBFGtleVN0YWtlZER1Y2tCeU93bmVyAQlvd25lckFkZHIJAKwCAgISc3Rha2VkRHVja0J5T3duZXJfBQlvd25lckFkZHIBEWtleUJhY2twYWNrQnlEdWNrAQtkdWNrQXNzZXRJZAkArAICAgliYWNrUGFja18FC2R1Y2tBc3NldElkAQ9rZXlEdWNrTG9jYXRpb24BC2R1Y2tBc3NldElkCQCsAgICDWR1Y2tMb2NhdGlvbl8FC2R1Y2tBc3NldElkAQ1rZXlEdWNrSGVhbHRoAQtkdWNrQXNzZXRJZAkArAICAgtkdWNrSGVhbHRoXwULZHVja0Fzc2V0SWQBEWtleVJlc1Byb3BvcnRpb25zAAITcmVzVHlwZXNQcm9wb3J0aW9ucwEKa2V5QmxvY2tlZAACEGNvbnRyYWN0c0Jsb2NrZWQBFWtleVVzZXJHd2xSZWxlYXNlVGltZQEIdXNlckFkZHIJAKwCAgIaJXMlc19fdXNlckd3bFJlbGVhc2VUaW1lX18FCHVzZXJBZGRyAQ5rZXlFc1dhcmVob3VzZQACGmVtZXJnZW5jeVdhcmVob3VzZVByb2R1Y3RzAApsb2NJZHhUeXBlAAEACGxvY0lkeElkAAIBCGFzU3RyaW5nAQF2BAckbWF0Y2gwBQF2AwkAAQIFByRtYXRjaDACBlN0cmluZwQBcwUHJG1hdGNoMAUBcwkAAgECGGZhaWwgdG8gY2FzdCBpbnRvIFN0cmluZwEFYXNJbnQBAXYEByRtYXRjaDAFAXYDCQABAgUHJG1hdGNoMAIDSW50BAFuBQckbWF0Y2gwBQFuCQACAQIVZmFpbCB0byBjYXN0IGludG8gSW50AQ9udW1QaWVjZXNCeVNpemUBCGxhbmRTaXplBAckbWF0Y2gwBQhsYW5kU2l6ZQMJAAACAgFTBQckbWF0Y2gwBQVTU0laRQMJAAACAgFNBQckbWF0Y2gwBQVNU0laRQMJAAACAgFMBQckbWF0Y2gwBQVMU0laRQMJAAACAgJYTAUHJG1hdGNoMAUGWExTSVpFAwkAAAICA1hYTAUHJG1hdGNoMAUHWFhMU0laRQkAAgECEVVua25vd24gbGFuZCBzaXplARJnZXRSZWNpcGVNYXRlcmlhbHMBBnJlY2lwZQoBBmFkZE1hdAICYWMBagkAZAIFAmFjCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUGcmVjaXBlBQFqCgACJGwJAMwIAgAACQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUFA25pbAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEGYWRkTWF0AgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAA1pbmN1YmF0b3JBZGRyBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwCQERQGV4dHJOYXRpdmUoMTA2MikBAiMzUEVrdFZ1eDJSaGNoU042M0RzRG80YjRtejRRcXpLU2VEdgMJAAACAQFUBQckbWF0Y2gwBQR0aGlzCQACAQINVW5rbm93biBjaGFpbgALYnJlZWRlckFkZHIEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDAJARFAZXh0ck5hdGl2ZSgxMDYyKQECIzNQRFZ1VTQ1SDdFaDVkbXROYm5STlJTdEd3VUxBN05ZNkhiAwkAAAIBAVQFByRtYXRjaDAFBHRoaXMJAAIBAg1Vbmtub3duIGNoYWluAANwdWIBIE9T4ho/VKjWnVJOEx1GJ1W9s1PzLHvJVFSw/0PBtBQoAAhtZWRLaXRIcAkAzAgCAB4JAMwIAgA8CQDMCAIAeAUDbmlsABFGSVZFTUlOVVRFU01JTExJUwDgpxIADFJFTkFNSU5HQ09TVADAlrECAApNQVhOQU1FTEVOADIAFUluZnJhVXBncmFkZUNvc3RTVXNkdACAreIEAAxFWFBNQVRFUklBTFMEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDAApt2C7asHAwkAAAIBAVQFByRtYXRjaDAAqqeBswkJAAIBAg1Vbmtub3duIGNoYWluAAdFWFBVU0RUBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwAIDlmncDCQAAAgEBVAUHJG1hdGNoMACA5Zp3CQACAQINVW5rbm93biBjaGFpbgAFRklWRVgJALYCAQAFAAdUV0VOVFlYCQC2AgEAFAAIVFdFTlRZMlgJALYCAQkAaAIAFAAUAAhUV0VOVFkzWAkAtgIBCQBoAgkAaAIAFAAUABQACFRXRU5UWTRYCQC2AgEJAGgCCQBoAgkAaAIAFAAUABQAFAAIVFdFTlRZNVgJALYCAQkAaAIJAGgCCQBoAgkAaAIAFAAUABQAFAAUAA9QUkVTQUxFTlVNTEFORFMA9AMBEmtleU5leHRGcmVlTGFuZE51bQACC25leHRMYW5kTnVtARBrZXlMYW5kVG9Bc3NldElkAQdsYW5kTnVtCQCsAgICDGxhbmRUb0Fzc2V0XwUHbGFuZE51bQEaa2V5TGFuZEN1c3RvbU5hbWVUb0Fzc2V0SWQBBG5hbWUJAKwCAgIRbGFuZEJ5Q3VzdG9tTmFtZV8FBG5hbWUBHmtleUluZnJhTGV2ZWxCeUFzc2V0SWRBbmRPd25lcgIHYXNzZXRJZAlvd25lckFkZHIJAKwCAgkArAICCQCsAgICHGluZnJhTGV2ZWxCeUFzc2V0SWRBbmRPd25lcl8FB2Fzc2V0SWQCAV8FCW93bmVyQWRkcgEla2V5TGFuZEFydFN0YXR1c0J5VHlwZUFzc2V0SWRBbmRPd25lcgMEdHlwZQdhc3NldElkCW93bmVyQWRkcgkAuQkCCQDMCAICImxhbmRBcnRTdGF0dXNCeVR5cGVBc3NldElkQW5kT3duZXIJAMwIAgUEdHlwZQkAzAgCBQdhc3NldElkCQDMCAIFCW93bmVyQWRkcgUDbmlsAgFfARFrZXlMYW5kTnVtVG9Pd25lcgEHbGFuZE51bQkArAICAgpsYW5kT3duZXJfBQdsYW5kTnVtARprZXlEdWNrQ3VzdG9tTmFtZVRvQXNzZXRJZAEEbmFtZQkArAICAhFkdWNrQnlDdXN0b21OYW1lXwUEbmFtZQEWa2V5Q3VzdG9tTmFtZVRvQWRkcmVzcwEEbmFtZQkArAICAhRhY2NvdW50QnlDdXN0b21OYW1lXwUEbmFtZQEJa2V5T2xkaWVzAAIKb2xkaWVzTGlzdAALY2xhaW1Nb2RlV2gAAAANY2xhaW1Nb2RlRHVjawABABNjbGFpbU1vZGVXaFRoZW5EdWNrAAIACGZsSGVhbHRoAAAAC2ZsVGltZXN0YW1wAAUAB2ZsQm9udXMABgEHbmZ0TmFtZQIHbGFuZE51bQhsYW5kU2l6ZQkArAICCQCsAgIFCkxBTkRQUkVGSVgFB2xhbmROdW0FCGxhbmRTaXplARNkaXN0cmlidXRlQnlXZWlnaHRzAgV0b3RhbAd3ZWlnaHRzBANzdW0JAGQCCQBkAgkAZAIJAGQCCQBkAgkAkQMCBQd3ZWlnaHRzAAAJAJEDAgUHd2VpZ2h0cwABCQCRAwIFB3dlaWdodHMAAgkAkQMCBQd3ZWlnaHRzAAMJAJEDAgUHd2VpZ2h0cwAECQCRAwIFB3dlaWdodHMABQMJAGcCAAAFA3N1bQkAAgECEFplcm8gd2VpZ2h0cyBzdW0EBW5vcm02CQBrAwUFdG90YWwFBU1VTFQ2BQNzdW0KAQpub3JtYWxpemVyAgNhY2MEZWxlbQkAzQgCBQNhY2MJAGsDBQRlbGVtBQVub3JtNgUFTVVMVDYKAAIkbAUHd2VpZ2h0cwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEKbm9ybWFsaXplcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgESZ2V0TmVlZGVkTWF0ZXJpYWxzAQV0b3RhbAQFcHJvcHMJALUJAgkBBXZhbHVlAQkAoggBCQERa2V5UmVzUHJvcG9ydGlvbnMAAgFfAwkBAiE9AgkAkAMBBQVwcm9wcwUGTlVNUkVTCQACAQIWV3JvbmcgcHJvcG9ydGlvbnMgZGF0YQQBcgkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcHJvcHMAAAkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcHJvcHMAAQkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcHJvcHMAAgkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcHJvcHMAAwkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcHJvcHMABAkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcHJvcHMABQUDbmlsCQETZGlzdHJpYnV0ZUJ5V2VpZ2h0cwIFBXRvdGFsBQFyARFzdWJ0cmFjdE1hdGVyaWFscwMMc2hvdWxkVXNlTWF0A2hhcwl0b3RhbE5lZWQEBG5lZWQJARJnZXROZWVkZWRNYXRlcmlhbHMBBQl0b3RhbE5lZWQKAQpzdWJ0cmFjdG9yAgNhY2MDaWR4BAZyZXN1bHQJAGUCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUDaGFzBQNpZHgJAJEDAgUEbmVlZAUDaWR4AwkAZgIAAAUGcmVzdWx0CQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgICGE5vdCBlbm91Z2ggbWF0ZXJpYWwgaWR4PQkApAMBBQNpZHgCCywgeW91IGhhdmUgCQCRAwIFA2hhcwUDaWR4AgssIGJ1dCBuZWVkIAkApAMBCQCRAwIFBG5lZWQFA2lkeAkAzQgCBQNhY2MJAKQDAQUGcmVzdWx0AwUMc2hvdWxkVXNlTWF0CgACJGwJAMwIAgAACQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUFA25pbAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEKc3VidHJhY3RvcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgUDaGFzARl1cGRhdGVQcm9wb3J0aW9uc0ludGVybmFsBAhwcm9wTGlzdA10ZXJyYWluQ291bnRzDWxhbmRTaXplSW5kZXgEc2lnbgMJAQIhPQIJAJADAQUIcHJvcExpc3QFBk5VTVJFUwkAAgECFldyb25nIHByb3BvcnRpb25zIGRhdGEKAQd1cGRhdGVyAgNhY2MBaQQGcmVzdWx0CQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCHByb3BMaXN0BQFpCQBoAgkAaAIFBHNpZ24JAJEDAgUNdGVycmFpbkNvdW50cwUBaQUNbGFuZFNpemVJbmRleAMJAGYCAAAFBnJlc3VsdAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIWUGFuaWMhIFBpZWNlcyBvZiB0eXBlPQkApAMBBQFpAgcsIHNpZ249CQCkAwEFBHNpZ24CFCwgIHRlcnJhaW5Db3VudHNbaV09CQCkAwEJAJEDAgUNdGVycmFpbkNvdW50cwUBaQIQLCBsYW5kU2l6ZUluZGV4PQkApAMBBQ1sYW5kU2l6ZUluZGV4CQDNCAIFA2FjYwkApAMBBQZyZXN1bHQEAXIKAAIkbAkAzAgCAAAJAMwIAgABCQDMCAIAAgkAzAgCAAMJAMwIAgAECQDMCAIABQUDbmlsCgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQd1cGRhdGVyAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGCQC5CQIFAXICAV8BEXVwZGF0ZVByb3BvcnRpb25zAw10ZXJyYWluQ291bnRzDWxhbmRTaXplSW5kZXgEc2lnbgQIcHJvcExpc3QJALUJAgkBC3ZhbHVlT3JFbHNlAgkAoggBCQERa2V5UmVzUHJvcG9ydGlvbnMAAgswXzBfMF8wXzBfMAIBXwkBGXVwZGF0ZVByb3BvcnRpb25zSW50ZXJuYWwEBQhwcm9wTGlzdAUNdGVycmFpbkNvdW50cwUNbGFuZFNpemVJbmRleAUEc2lnbgENY291bnRUZXJyYWlucwEIdGVycmFpbnMJAMwIAgkAZQIJAJADAQkAtQkCBQh0ZXJyYWlucwIBQQABCQDMCAIJAGUCCQCQAwEJALUJAgUIdGVycmFpbnMCAUIAAQkAzAgCCQBlAgkAkAMBCQC1CQIFCHRlcnJhaW5zAgFDAAEJAMwIAgkAZQIJAJADAQkAtQkCBQh0ZXJyYWlucwIBRAABCQDMCAIJAGUCCQCQAwEJALUJAgUIdGVycmFpbnMCAUUAAQkAzAgCCQBlAgkAkAMBCQC1CQIFCHRlcnJhaW5zAgFGAAEFA25pbAEGYWRkUmVzBQpjdXJyZW50UmVzDXRlcnJhaW5Db3VudHMJZGVsdGFUaW1lDWxhbmRTaXplSW5kZXgXZGFpbHlCeVBpZWNlV2l0aEJvbnVzZXMKAQVhZGRlcgIDYWNjAWkECXJlc09mVHlwZQkAaAIJAGgCCQBrAwUJZGVsdGFUaW1lBRdkYWlseUJ5UGllY2VXaXRoQm9udXNlcwUJREFZTUlMTElTCQCRAwIFDXRlcnJhaW5Db3VudHMFAWkFDWxhbmRTaXplSW5kZXgJAM0IAgUDYWNjCQCkAwEJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKY3VycmVudFJlcwUBaQUJcmVzT2ZUeXBlBAFyCgACJGwJAMwIAgAACQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUFA25pbAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEFYWRkZXICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYJALkJAgUBcgIBXwEJdmlydENsYWltBA10ZXJyYWluQ291bnRzCWRlbHRhVGltZQ1sYW5kU2l6ZUluZGV4F2RhaWx5QnlQaWVjZVdpdGhCb251c2VzCgEFYWRkZXICA2FjYwFpBAlyZXNPZlR5cGUJAGgCCQBoAgkAawMFCWRlbHRhVGltZQUXZGFpbHlCeVBpZWNlV2l0aEJvbnVzZXMFCURBWU1JTExJUwkAkQMCBQ10ZXJyYWluQ291bnRzBQFpBQ1sYW5kU2l6ZUluZGV4CQCUCgIJAM0IAggFA2FjYwJfMQUJcmVzT2ZUeXBlCQBkAggFA2FjYwJfMgUJcmVzT2ZUeXBlCgACJGwJAMwIAgAACQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUFA25pbAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgUDbmlsAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBBWFkZGVyAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAQ1kaXN0cmlidXRlUmVzBAxjdXJyZW50V2hSZXMOY3VycmVudFBhY2tSZXMKcmVzVG9DbGFpbQt3aFNwYWNlTGVmdAQOcmVzTGlzdFRvQ2xhaW0IBQpyZXNUb0NsYWltAl8xBAxyZXNBbVRvQ2xhaW0IBQpyZXNUb0NsYWltAl8yAwkAAAIFDHJlc0FtVG9DbGFpbQAACQCUCgIJALkJAgUMY3VycmVudFdoUmVzAgFfCQC5CQIFDmN1cnJlbnRQYWNrUmVzAgFfAwkAZwIFC3doU3BhY2VMZWZ0BQxyZXNBbVRvQ2xhaW0KAQhhZGRMaXN0cwIDYWNjAWkJAM0IAgUDYWNjCQCkAwEJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUMY3VycmVudFdoUmVzBQFpCQCRAwIFDnJlc0xpc3RUb0NsYWltBQFpBAFyCgACJGwJAMwIAgAACQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUFA25pbAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEIYWRkTGlzdHMCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYJAJQKAgkAuQkCBQFyAgFfCQC5CQIFDmN1cnJlbnRQYWNrUmVzAgFfCgEMYWRkUGFydExpc3RzAgNhY2MBaQQGd2hQYXJ0CQBrAwkAkQMCBQ5yZXNMaXN0VG9DbGFpbQUBaQULd2hTcGFjZUxlZnQFDHJlc0FtVG9DbGFpbQkAlAoCCQDNCAIIBQNhY2MCXzEJAKQDAQkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQxjdXJyZW50V2hSZXMFAWkFBndoUGFydAkAzQgCCAUDYWNjAl8yCQCkAwEJAGUCCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDmN1cnJlbnRQYWNrUmVzBQFpCQCRAwIFDnJlc0xpc3RUb0NsYWltBQFpBQZ3aFBhcnQEAXIKAAIkbAkAzAgCAAAJAMwIAgABCQDMCAIAAgkAzAgCAAMJAMwIAgAECQDMCAIABQUDbmlsCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCBQNuaWwFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEMYWRkUGFydExpc3RzAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGCQCUCgIJALkJAggFAXICXzECAV8JALkJAggFAXICXzICAV8BA2FicwEBeAMJAMACAgUBeAkAtgIBAAAFAXgJAL4CAQUBeAAEZnJlcQkAzAgCCQDMCAIABgkAzAgCAAkJAMwIAgAOCQDMCAIADwkAzAgCABAFA25pbAkAzAgCCQDMCAIABQkAzAgCAAgJAMwIAgANCQDMCAIADgkAzAgCAA8FA25pbAkAzAgCCQDMCAIAAQkAzAgCAAQJAMwIAgAJCQDMCAIACgkAzAgCAA8FA25pbAkAzAgCCQDMCAIAAQkAzAgCAAYJAMwIAgAHCQDMCAIADwkAzAgCABMFA25pbAkAzAgCCQDMCAIABAkAzAgCAAcJAMwIAgAICQDMCAIADQkAzAgCABIFA25pbAUDbmlsAQdnZW5DaGFyAgFuBWZyZXFzBANyZW0JAKADAQkAuwICBQFuBQdUV0VOVFlYBAZsZXR0ZXIDCQBmAgkAkQMCBQVmcmVxcwAABQNyZW0CAUEDCQBmAgkAkQMCBQVmcmVxcwABBQNyZW0CAUIDCQBmAgkAkQMCBQVmcmVxcwACBQNyZW0CAUMDCQBmAgkAkQMCBQVmcmVxcwADBQNyZW0CAUQDCQBmAgkAkQMCBQVmcmVxcwAEBQNyZW0CAUUCAUYFBmxldHRlcgELZ2VuVGVycmFpbnMCBHNlZWQMY29udGluZW50SWR4BAFmCQCRAwIFBGZyZXEFDGNvbnRpbmVudElkeAoBEHRlcnJhaW5HZW5lcmF0b3ICA2FjYwRlbGVtCQCUCgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCAUDYWNjAl8xCQEHZ2VuQ2hhcgIIBQNhY2MCXzIFAWYJAQdnZW5DaGFyAgkAugICCAUDYWNjAl8yBQdUV0VOVFlYBQFmCQEHZ2VuQ2hhcgIJALoCAggFA2FjYwJfMgUIVFdFTlRZMlgFAWYJAQdnZW5DaGFyAgkAugICCAUDYWNjAl8yBQhUV0VOVFkzWAUBZgkBB2dlbkNoYXICCQC6AgIIBQNhY2MCXzIFCFRXRU5UWTRYBQFmCQC6AgIIBQNhY2MCXzIFCFRXRU5UWTVYBAF0CgACJGwJAMwIAgABCQDMCAIAAgkAzAgCAAMJAMwIAgAECQDMCAIABQUDbmlsCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCAgAJALoCAgUEc2VlZAUFRklWRVgKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBEHRlcnJhaW5HZW5lcmF0b3ICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDUJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFCAUBdAJfMQELZ2V0QmFja3BhY2sBBWJwS2V5BAFwCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAKIIAQUFYnBLZXkCGjA6MF8wXzBfMF8wXzA6MF8wXzBfMF8wXzA6AgE6CQDMCAIJAKQDAQkBC3ZhbHVlT3JFbHNlAgkAtgkBCQCRAwIFAXAFCmJwSWR4TGV2ZWwAAAkAzAgCAwkAAAIJAJADAQkAtQkCCQCRAwIFAXAFCGJwSWR4UmVzAgFfBQZOVU1SRVMJAJEDAgUBcAUIYnBJZHhSZXMCCzBfMF8wXzBfMF8wCQDMCAIDCQAAAgkAkAMBCQC1CQIJAJEDAgUBcAUIYnBJZHhNYXQCAV8FBk5VTVJFUwkAkQMCBQFwBQhicElkeE1hdAILMF8wXzBfMF8wXzAJAMwIAgkAkQMCBQFwBQlicElkeFByb2QFA25pbAEXZ2V0V2FyZWhvdXNlVG90YWxWb2x1bWUBCXZvbFByZWZpeAQFcGFydHMJALUJAgUJdm9sUHJlZml4AgFfCQBoAgkAaAIFDFdITVVMVElQTElFUgkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwYXJ0cwABAAEJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwYXJ0cwAAARdnZXRXYXJlaG91c2VPY2N1cGllZFZvbAEJY3VycmVudFdoBAVnb29kcwkAkQMCBQljdXJyZW50V2gFCXdoSWR4UHJvZAoBCXN1bVJlc01hdAIDYWNjBGl0ZW0JAGQCBQNhY2MJAQ1wYXJzZUludFZhbHVlAQUEaXRlbQoBB3N1bVByb2QCA2FjYwRpdGVtBANpZHgIBQNhY2MCXzEEB3BrZ1NpemUJAQpnZXRQa2dTaXplAQUDaWR4BARwa2dzCQBpAgkAZQIJAGQCCQENcGFyc2VJbnRWYWx1ZQEFBGl0ZW0FB3BrZ1NpemUAAQUHcGtnU2l6ZQkAlAoCCQBkAgUDaWR4AAEJAGQCCAUDYWNjAl8yCQBoAgUEcGtncwUFTVVMVDgECHdoUmVzVm9sCgACJGwJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4UmVzAgFfCgACJHMJAJADAQUCJGwKAAUkYWNjMAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQlzdW1SZXNNYXQCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYECHdoTWF0Vm9sCgACJGwJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4TWF0AgFfCgACJHMJAJADAQUCJGwKAAUkYWNjMAAACgEFJGYxXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQlzdW1SZXNNYXQCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjFfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjFfMgIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYECndoR29vZHNWb2wDCQAAAgUFZ29vZHMCAAAACAoAAiRsCQC8CQIFBWdvb2RzAgFfCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCAAAAAAoBBSRmMl8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEHc3VtUHJvZAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMl8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgNTAJAQUkZjJfMgIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUABUAFgAXABgAGQAaABsAHAAdAB4AHwAgACEAIgAjACQAJQAmACcAKAApACoAKwAsAC0ALgAvADAAMQAyAl8yCQBkAgkAZAIFCHdoUmVzVm9sBQh3aE1hdFZvbAUKd2hHb29kc1ZvbAEMZ2V0V2FyZWhvdXNlAwV3aEtleQlsYW5kSW5kZXgKaW5mcmFMZXZlbAQJdm9sUHJlZml4CQCsAgIJAKwCAgkApAMBBQlsYW5kSW5kZXgCAV8JAKQDAQUKaW5mcmFMZXZlbAQHd2hUb3RhbAkBF2dldFdhcmVob3VzZVRvdGFsVm9sdW1lAQUJdm9sUHJlZml4BAV3aFN0cgkBC3ZhbHVlT3JFbHNlAgkAoggBBQV3aEtleQkArAICBQl2b2xQcmVmaXgCGzowXzBfMF8wXzBfMDowXzBfMF8wXzBfMDo6MAQCd2gJALwJAgUFd2hTdHICAToECndoT2NjdXBpZWQJARdnZXRXYXJlaG91c2VPY2N1cGllZFZvbAEFAndoBAZ3aExvZnQDCQBmAgAFCQCQAwEFAndoCQC5CQIJAMwIAgIBMAkAzAgCCQCkAwEFCndoT2NjdXBpZWQJAMwIAgkApAMBCQBlAgUHd2hUb3RhbAUKd2hPY2N1cGllZAkAzAgCCQCkAwEFB3doVG90YWwFA25pbAIBXwQEbG9mdAkAtQkCCQCRAwIFAndoBQl3aElkeExPRlQCAV8ECHdoTG9ja2VkCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAUJdm9sTG9ja2VkBANvY2MDCQBmAgkAkAMBBQRsb2Z0AAEJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQt2b2xPY2N1cGllZAUKd2hPY2N1cGllZAkAuQkCCQDMCAIJAKQDAQUId2hMb2NrZWQJAMwIAgkApAMBBQNvY2MJAMwIAgkApAMBCQBlAgkAZQIFB3doVG90YWwFCHdoTG9ja2VkBQNvY2MJAMwIAgkApAMBBQd3aFRvdGFsBQNuaWwCAV8JAMwIAgkAkQMCBQJ3aAULd2hJZHhMZXZlbHMJAMwIAgMJAAACCQCQAwEJALUJAgkAkQMCBQJ3aAUId2hJZHhSZXMCAV8FBk5VTVJFUwkAkQMCBQJ3aAUId2hJZHhSZXMCCzBfMF8wXzBfMF8wCQDMCAIDCQAAAgkAkAMBCQC1CQIJAJEDAgUCd2gFCHdoSWR4TWF0AgFfBQZOVU1SRVMJAJEDAgUCd2gFCHdoSWR4TWF0AgswXzBfMF8wXzBfMAkAzAgCCQCRAwIFAndoBQl3aElkeFByb2QJAMwIAgUGd2hMb2Z0BQNuaWwBFWdldFdhcmVob3VzZVNwYWNlTGVmdAEJY3VycmVudFdoBAtvY2N1cGllZFZvbAkBF2dldFdhcmVob3VzZU9jY3VwaWVkVm9sAQUJY3VycmVudFdoBA9jdXJyV2hMb2NrZWRWb2wJAQ1wYXJzZUludFZhbHVlAQkAkQMCCQC1CQIJAJEDAgUJY3VycmVudFdoBQl3aElkeExPRlQCAV8FCXZvbExvY2tlZAkAZQIJAGUCCQEXZ2V0V2FyZWhvdXNlVG90YWxWb2x1bWUBCQCRAwIFCWN1cnJlbnRXaAULd2hJZHhMZXZlbHMFC29jY3VwaWVkVm9sBQ9jdXJyV2hMb2NrZWRWb2wBCHRvVm9sdW1lAgZhbW91bnQHcGtnU2l6ZQQEcGtncwMJAGcCBQZhbW91bnQAAAkAaQIJAGUCCQBkAgUGYW1vdW50BQdwa2dTaXplAAEFB3BrZ1NpemUJAQEtAQkAaQIJAGUCCQBkAgkBAS0BBQZhbW91bnQFB3BrZ1NpemUAAQUHcGtnU2l6ZQkAaAIFBHBrZ3MFBU1VTFQ4AQltb3ZlU3R1ZmYDCmNhcmdvUGFydHMJY3VycmVudFdoC2N1cnJlbnRQYWNrAwkBAiE9AgkAkAMBBQpjYXJnb1BhcnRzAAMJAAIBAjRjYXJnb0xpc3RTdHIgc2hvdWxkIGNvbnRhaW4gZXhhY3RseSAyICc6JyBzZXBhcmF0b3JzBAhyZXNQYXJ0cwkAtQkCCQCRAwIFCmNhcmdvUGFydHMAAAIBXwQIbWF0UGFydHMJALUJAgkAkQMCBQpjYXJnb1BhcnRzAAECAV8ECXByb2RQYXJ0cwMJAAACCQCRAwIFCmNhcmdvUGFydHMAAgIABQNuaWwJALUJAgkAkQMCBQpjYXJnb1BhcnRzAAICAV8DCQECIT0CCQCQAwEFCHJlc1BhcnRzBQZOVU1SRVMJAAIBAiBBbGwgNiByZXNvdXJjZXMgc2hvdWxkIGJlIHBhc3NlZAMJAQIhPQIJAJADAQUIbWF0UGFydHMFBk5VTVJFUwkAAgECIEFsbCA2IG1hdGVyaWFscyBzaG91bGQgYmUgcGFzc2VkBAt3aFNwYWNlTGVmdAkBFWdldFdhcmVob3VzZVNwYWNlTGVmdAEFCWN1cnJlbnRXaAQJY3VycldoUmVzCQC1CQIJAJEDAgUJY3VycmVudFdoBQh3aElkeFJlcwIBXwQJY3VycldoTWF0CQC1CQIJAJEDAgUJY3VycmVudFdoBQh3aElkeE1hdAIBXwQKY3VycldoUHJvZAMJAAACCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhQcm9kAgAFA25pbAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhQcm9kAgFfBA5jdXJyZW50UGFja1JlcwkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwIBXwQOY3VycmVudFBhY2tNYXQJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQCAV8ED2N1cnJlbnRQYWNrUHJvZAMJAAACCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QCAAUDbmlsCQC1CQIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAIBXwoBA212UgIDYWNjBGl0ZW0EAWkIBQNhY2MCXzEEAmFtCQENcGFyc2VJbnRWYWx1ZQEFBGl0ZW0EA3docgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCWN1cnJXaFJlcwUBaQQDYnByCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUOY3VycmVudFBhY2tSZXMFAWkDCQAAAgUCYW0AAAkAlgoECQBkAgUBaQABCQDNCAIIBQNhY2MCXzIJAJEDAgUJY3VycldoUmVzBQFpCQDNCAIIBQNhY2MCXzMJAJEDAgUOY3VycmVudFBhY2tSZXMFAWkIBQNhY2MCXzQDCQBmAgUCYW0AAAMJAGYCBQJhbQUDYnByCQACAQkArAICCQCsAgIJAKwCAgkArAICAhBBdHRlbXB0IHRvIHRha2UgBQRpdGVtAhkgZnJvbSBiYWNrcGFjaywgYnV0IG9ubHkgCQCkAwEFA2JwcgIKIGF2YWlsYWJsZQkAlgoECQBkAgUBaQABCQDNCAIIBQNhY2MCXzIJAKQDAQkAZAIFA3docgUCYW0JAM0IAggFA2FjYwJfMwkApAMBCQBlAgUDYnByBQJhbQkAZAIIBQNhY2MCXzQFAmFtAwkAZgIJAQEtAQUCYW0FA3docgkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgIQQXR0ZW1wdCB0byB0YWtlIAkApAMBCQEBLQEFAmFtAhogZnJvbSB3YXJlaG91c2UsIGJ1dCBvbmx5IAkApAMBBQN3aHICCiBhdmFpbGFibGUJAJYKBAkAZAIFAWkAAQkAzQgCCAUDYWNjAl8yCQCkAwEJAGQCBQN3aHIFAmFtCQDNCAIIBQNhY2MCXzMJAKQDAQkAZQIFA2JwcgUCYW0JAGQCCAUDYWNjAl80BQJhbQQBcgoAAiRsBQhyZXNQYXJ0cwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJYKBAAABQNuaWwFA25pbAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQNtdlICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYKAQNtdk0CA2FjYwRpdGVtBAFpCAUDYWNjAl8xBAJhbQkBDXBhcnNlSW50VmFsdWUBBQRpdGVtBAN3aG0JAQ1wYXJzZUludFZhbHVlAQkAkQMCBQljdXJyV2hNYXQFAWkEA2JwbQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDmN1cnJlbnRQYWNrTWF0BQFpAwkAAAIFAmFtAAAJAJYKBAkAZAIFAWkAAQkAzQgCCAUDYWNjAl8yCQCRAwIFCWN1cnJXaE1hdAUBaQkAzQgCCAUDYWNjAl8zCQCRAwIFDmN1cnJlbnRQYWNrTWF0BQFpCAUDYWNjAl80AwkAZgIFAmFtAAADCQBmAgUCYW0FA2JwbQkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgIQQXR0ZW1wdCB0byB0YWtlIAUEaXRlbQIZIGZyb20gYmFja3BhY2ssIGJ1dCBvbmx5IAkApAMBBQNicG0CCiBhdmFpbGFibGUJAJYKBAkAZAIFAWkAAQkAzQgCCAUDYWNjAl8yCQCkAwEJAGQCBQN3aG0FAmFtCQDNCAIIBQNhY2MCXzMJAKQDAQkAZQIFA2JwbQUCYW0JAGQCCAUDYWNjAl80BQJhbQMJAGYCCQEBLQEFAmFtBQN3aG0JAAIBCQCsAgIJAKwCAgkArAICCQCsAgICEEF0dGVtcHQgdG8gdGFrZSAJAKQDAQkBAS0BBQJhbQIaIGZyb20gd2FyZWhvdXNlLCBidXQgb25seSAJAKQDAQUDd2htAgogYXZhaWxhYmxlCQCWCgQJAGQCBQFpAAEJAM0IAggFA2FjYwJfMgkApAMBCQBkAgUDd2htBQJhbQkAzQgCCAUDYWNjAl8zCQCkAwEJAGUCBQNicG0FAmFtCQBkAggFA2FjYwJfNAUCYW0EAW0KAAIkbAUIbWF0UGFydHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCWCgQAAAUDbmlsBQNuaWwIBQFyAl80CgEFJGYxXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQNtdk0CBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjFfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjFfMgIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYKAQNtdlACA2FjYwRpdGVtBAFpCAUDYWNjAl8xBAdwa2dTaXplCQEKZ2V0UGtnU2l6ZQEFAWkEAmFtCQENcGFyc2VJbnRWYWx1ZQEFBGl0ZW0EA3docAMJAGYCCQCQAwEFCmN1cnJXaFByb2QFAWkJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQpjdXJyV2hQcm9kBQFpAAAEA2JwcAMJAGYCCQCQAwEFD2N1cnJlbnRQYWNrUHJvZAUBaQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFD2N1cnJlbnRQYWNrUHJvZAUBaQAAAwkAAAIFAmFtAAAJAJYKBAkAZAIFAWkAAQkAzQgCCAUDYWNjAl8yCQCkAwEFA3docAkAzQgCCAUDYWNjAl8zCQCkAwEFA2JwcAgFA2FjYwJfNAMJAGYCBQJhbQAAAwkAZgIFAmFtBQNicHAJAAIBCQCsAgIJAKwCAgkArAICCQCsAgICEEF0dGVtcHQgdG8gdGFrZSAFBGl0ZW0CGSBmcm9tIGJhY2twYWNrLCBidXQgb25seSAJAKQDAQUDYnBwAgogYXZhaWxhYmxlBAhkZWx0YVZvbAkAZQIJAQh0b1ZvbHVtZQIJAGQCBQN3aHAFAmFtBQdwa2dTaXplCQEIdG9Wb2x1bWUCBQN3aHAFB3BrZ1NpemUJAJYKBAkAZAIFAWkAAQkAzQgCCAUDYWNjAl8yCQCkAwEJAGQCBQN3aHAFAmFtCQDNCAIIBQNhY2MCXzMJAKQDAQkAZQIFA2JwcAUCYW0JAGQCCAUDYWNjAl80BQhkZWx0YVZvbAMJAGYCCQEBLQEFAmFtBQN3aHAJAAIBCQCsAgIJAKwCAgkArAICCQCsAgICEEF0dGVtcHQgdG8gdGFrZSAJAKQDAQkBAS0BBQJhbQIaIGZyb20gd2FyZWhvdXNlLCBidXQgb25seSAJAKQDAQUDd2hwAgogYXZhaWxhYmxlBAhkZWx0YVZvbAkAZQIJAQh0b1ZvbHVtZQIJAGQCBQN3aHAFAmFtBQdwa2dTaXplCQEIdG9Wb2x1bWUCBQN3aHAFB3BrZ1NpemUJAJYKBAkAZAIFAWkAAQkAzQgCCAUDYWNjAl8yCQCkAwEJAGQCBQN3aHAFAmFtCQDNCAIIBQNhY2MCXzMJAKQDAQkAZQIFA2JwcAUCYW0JAGQCCAUDYWNjAl80BQhkZWx0YVZvbAQBcAMJAQIhPQIJAJADAQUJcHJvZFBhcnRzAAAKAAIkbAUJcHJvZFBhcnRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlgoEAAAFA25pbAUDbmlsCAUBbQJfNAoBBSRmMl8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEDbXZQAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYyXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyA1MAkBBSRmMl8yAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAAZABoAGwAcAB0AHgAfACAAIQAiACMAJAAlACYAJwAoACkAKgArACwALQAuAC8AMAAxADIJAJYKBAAABQpjdXJyV2hQcm9kBQ9jdXJyZW50UGFja1Byb2QIBQFtAl80BAh2b2xTYWxkbwgFAXACXzQDCQBmAgUIdm9sU2FsZG8FC3doU3BhY2VMZWZ0CQACAQkArAICCQCsAgIJAKwCAgkArAICAhVBdHRlbXB0IHRvIHB1dCB0b3RhbCAJAKQDAQUIdm9sU2FsZG8CESBzdHVmZiwgYnV0IG9ubHkgCQCkAwEFC3doU3BhY2VMZWZ0AhUgd2FyZWhvdXNlIHNwYWNlIGxlZnQJAJkKBwkAuQkCCAUBcgJfMgIBXwkAuQkCCAUBbQJfMgIBXwkAuQkCCAUBcAJfMgIBXwkAuQkCCAUBcgJfMwIBXwkAuQkCCAUBbQJfMwIBXwkAuQkCCAUBcAJfMwIBXwUIdm9sU2FsZG8BEmV4cGVkaXRpb25JbnRlcm5hbAIGY2FsbGVyBHR4SWQECHVzZXJBZGRyCQClCAEFBmNhbGxlcgQGYmlnTnVtCQEDYWJzAQkAngMBBQR0eElkBAdmcmVlTnVtCQELdmFsdWVPckVsc2UCCQCfCAEJARJrZXlOZXh0RnJlZUxhbmROdW0ACQBkAgUPUFJFU0FMRU5VTUxBTkRTAAEEB2xhbmROdW0JAKQDAQUHZnJlZU51bQQMY29udGluZW50SWR4CQCgAwEJALsCAgUGYmlnTnVtBQVGSVZFWAQIdGVycmFpbnMJAQtnZW5UZXJyYWlucwIFBmJpZ051bQUMY29udGluZW50SWR4BAljb250aW5lbnQJAJEDAgUKY29udGluZW50cwUMY29udGluZW50SWR4BAVpc3N1ZQkAwggFCQEHbmZ0TmFtZQIFB2xhbmROdW0CAVMJALkJAgkAzAgCBQdsYW5kTnVtCQDMCAICAVMJAMwIAgUIdGVycmFpbnMJAMwIAgUJY29udGluZW50BQNuaWwCAV8AAQAABwQHYXNzZXRJZAkAuAgBBQVpc3N1ZQQCaWQJANgEAQUHYXNzZXRJZAkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQESa2V5TmV4dEZyZWVMYW5kTnVtAAkAZAIFB2ZyZWVOdW0AAQkAzAgCBQVpc3N1ZQkAzAgCCQELU3RyaW5nRW50cnkCCQEQa2V5TGFuZFRvQXNzZXRJZAEFB2xhbmROdW0FAmlkCQDMCAIJAQtTdHJpbmdFbnRyeQIJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQJpZAUIdXNlckFkZHIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEWtleUxhbmROdW1Ub093bmVyAQUHbGFuZE51bQUIdXNlckFkZHIJAMwIAgkBDEludGVnZXJFbnRyeQIJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQUCaWQAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBHmtleUluZnJhTGV2ZWxCeUFzc2V0SWRBbmRPd25lcgIFAmlkBQh1c2VyQWRkcgAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFBmNhbGxlcgABBQdhc3NldElkBQNuaWwJAJQKAgUCaWQFCWNvbnRpbmVudAEQZXhwZWRpdGlvbkNvbW1vbgUMc2hvdWxkVXNlTWF0BmNhbGxlcgR0eElkB21lc3NhZ2UDc2lnAwkBASEBCQDEEwMFB21lc3NhZ2UFA3NpZwUDcHViCQACAQIYc2lnbmF0dXJlIGRvZXMgbm90IG1hdGNoBAVwYXJ0cwkAtQkCCQCwCQEFB21lc3NhZ2UCATsECWZsaWdodExvZwkAtQkCCQCRAwIFBXBhcnRzAAACAXwEAmhwCQC1CQIJAJEDAgUJZmxpZ2h0TG9nBQhmbEhlYWx0aAIBXwQFY3VySFAJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJocAAABAVuZXdIUAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmhwAAEEC25ld0xvY1R4VmVyCQC1CQIJAJEDAgUFcGFydHMAAQIBOgQLbmV3TG9jYXRpb24JAJEDAgULbmV3TG9jVHhWZXIAAAQEdGltZQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCWZsaWdodExvZwULZmxUaW1lc3RhbXADAwkAZgIFBHRpbWUJAGQCCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAURRklWRU1JTlVURVNNSUxMSVMGCQBmAgkAZQIIBQlsYXN0QmxvY2sJdGltZXN0YW1wBRFGSVZFTUlOVVRFU01JTExJUwUEdGltZQkAAgECEnNpZ25hdHVyZSBvdXRkYXRlZAQJdHhGcm9tTXNnCQCRAwIFC25ld0xvY1R4VmVyAAEECHVzZXJBZGRyCQClCAEFBmNhbGxlcgQGbGFzdFR4CQELdmFsdWVPckVsc2UCCQCiCAEJARFrZXlMYXN0VHhJZEJ5VXNlcgEFCHVzZXJBZGRyAgADCQECIT0CBQZsYXN0VHgFCXR4RnJvbU1zZwkAAgEJAKwCAgkArAICCQCsAgICHlR4IGlkcyBkb24ndCBtYXRjaCEgSW4gc3RhdGU6IAUGbGFzdFR4AgosIGluIG1zZzogBQl0eEZyb21Nc2cEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUIdXNlckFkZHICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQECWtleUhlYWx0aAkBDWtleUR1Y2tIZWFsdGgBBQtkdWNrQXNzZXRJZAQMb2xkRnJvbVN0YXRlCQELdmFsdWVPckVsc2UCCQCfCAEFCWtleUhlYWx0aABkAwkBAiE9AgUMb2xkRnJvbVN0YXRlBQVjdXJIUAkAAgEJAKwCAgkArAICCQCsAgICCm9sZEhlYWx0aD0JAKQDAQkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlrZXlIZWFsdGgAZAIvIGZyb20gc3RhdGUgZG9lcyBub3QgbWF0Y2ggb25lIGZyb20gZmxpZ2h0IGxvZz0JAKQDAQUFY3VySFADCQBnAgAABQVjdXJIUAkAAgECHllvdSBjYW4ndCBmbHkgd2l0aCB6ZXJvIGhlYWx0aAMJAGcCAAAFBW5ld0hQCQCVCgMJAM0IAgMJAQEhAQUMc2hvdWxkVXNlTWF0CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFBmNhbGxlcgUHRVhQVVNEVAULdXNkdEFzc2V0SWQFA25pbAUDbmlsCQEMSW50ZWdlckVudHJ5AgUJa2V5SGVhbHRoAAACAAAABAVib251cwMJAGYCCQCQAwEFCWZsaWdodExvZwUHZmxCb251cwkAkQMCBQlmbGlnaHRMb2cFB2ZsQm9udXMCAAQKc2VudEFtb3VudAMJAAACBQVib251cwIBJAkBBWFzSW50AQkA/AcEBQxyZXN0Q29udHJhY3QCDXNlbmRVc2R0UHJpemUJAMwIAgUIdXNlckFkZHIFA25pbAUDbmlsAAAEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BAVtTGlzdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAIBXwQGbmV3TWF0CQC5CQIJARFzdWJ0cmFjdE1hdGVyaWFscwMFDHNob3VsZFVzZU1hdAUFbUxpc3QFDEVYUE1BVEVSSUFMUwIBXwQBZQkBEmV4cGVkaXRpb25JbnRlcm5hbAIFBmNhbGxlcgUEdHhJZAQCaWQICAUBZQJfMgJfMQkAlQoDCQDNCAIJAM0IAgkAzQgCCAUBZQJfMQkBC1N0cmluZ0VudHJ5AgkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkCQC5CQIJAMwIAggIBQFlAl8yAl8yCQDMCAICAUwJAMwIAgUCaWQFA25pbAIBXwkBDEludGVnZXJFbnRyeQIFCWtleUhlYWx0aAUFbmV3SFAJAQtTdHJpbmdFbnRyeQIFBWJwS2V5CQC5CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwkAzAgCBQZuZXdNYXQJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kBQNuaWwCAToFAmlkBQpzZW50QW1vdW50AQxhcHBseUJvbnVzZXMCC2xhbmRBc3NldElkBnBpZWNlcwQKaW5mcmFMZXZlbAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEFC2xhbmRBc3NldElkAAAECWFydFBpZWNlcwkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEga2V5TGFuZEFydFN0YXR1c0J5VHlwZUFuZEFzc2V0SWQCBQpBUlRQUkVTQUxFBQtsYW5kQXNzZXRJZAAABARhZGQ2CQBpAgUKaW5mcmFMZXZlbAAGBARhZGQ3CQBpAgUKaW5mcmFMZXZlbAAHCQBkAgkAZAIFD0RBSUxZUkVTQllQSUVDRQkAawMFD0RBSUxZUkVTQllQSUVDRQkAZAIJAGQCBQppbmZyYUxldmVsBQRhZGQ2CQBoAgACBQRhZGQ3AAUJAGsDBQ9EQUlMWVJFU0JZUElFQ0UFCWFydFBpZWNlcwkAaAIFBnBpZWNlcwAFARRjaGVja0NsYWltQ29uZGl0aW9ucwMEYWRkcgljbGFpbU1vZGUNbGFuZEFzc2V0SWRJbgQNJHQwMzE4OTYzMjQzNQMJAAACBQljbGFpbU1vZGUFC2NsYWltTW9kZVdoCQCUCgIFDWxhbmRBc3NldElkSW4JAQt2YWx1ZU9yRWxzZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgIABAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFBGFkZHICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQEC2N1ckxvY2F0aW9uCQELdmFsdWVPckVsc2UCCQCiCAEJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAUPREVGQVVMVExPQ0FUSU9OBANsb2MJALUJAgkBBXZhbHVlAQULY3VyTG9jYXRpb24CAV8DCQECIT0CCQCRAwIFA2xvYwUKbG9jSWR4VHlwZQIBTAkAAgEJAKwCAgkArAICAhZEdWNrIGxvY2F0aW9uIHR5cGUgaXMgCQCRAwIFA2xvYwUKbG9jSWR4VHlwZQIRLCBidXQgc2hvdWxkIGJlIEwJAJQKAgkAkQMCBQNsb2MFCGxvY0lkeElkBQtkdWNrQXNzZXRJZAQLbGFuZEFzc2V0SWQIBQ0kdDAzMTg5NjMyNDM1Al8xBAZkdWNrSWQIBQ0kdDAzMTg5NjMyNDM1Al8yBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFC2xhbmRBc3NldElkBAd0aW1lS2V5CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkBAlzYXZlZFRpbWUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnwgBBQd0aW1lS2V5CQCsAgIJAKwCAgIFTGFuZCAIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAQFb3duZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQULbGFuZEFzc2V0SWQJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwkBAiE9AgUFb3duZXIFBGFkZHIJAAIBCQCsAgIFCkxBTkRQUkVGSVgCDSBpcyBub3QgeW91cnMEAWQJALUJAggFBWFzc2V0C2Rlc2NyaXB0aW9uAgFfCQCWCgQFBmR1Y2tJZAULbGFuZEFzc2V0SWQFAWQFCXNhdmVkVGltZQEQY2xhaW1SZXNJbnRlcm5hbAQEYWRkcgZhbW91bnQJY2xhaW1Nb2RlDWxhbmRBc3NldElkSW4DCQBmAgAABQZhbW91bnQJAAIBAg9OZWdhdGl2ZSBhbW91bnQEAWMJARRjaGVja0NsYWltQ29uZGl0aW9ucwMFBGFkZHIFCWNsYWltTW9kZQUNbGFuZEFzc2V0SWRJbgQIbGFuZFNpemUJAJEDAggFAWMCXzMFC3JlY0xhbmRTaXplBA10ZXJyYWluQ291bnRzCQENY291bnRUZXJyYWlucwEJAJEDAggFAWMCXzMFC3JlY1RlcnJhaW5zBAlkZWx0YVRpbWUJAGUCCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAgFAWMCXzQDCQBmAgAABQlkZWx0YVRpbWUJAAIBCQCsAgIJAKwCAgkArAICAiZTYXZlZCB0aW1lc3RhbXAgaXMgaW4gZnV0dXJlLCBzYXZlZCA9IAkApAMBCAUBYwJfNAIMLCBjdXJyZW50ID0gCQCkAwEIBQlsYXN0QmxvY2sJdGltZXN0YW1wBAZwaWVjZXMJAQ9udW1QaWVjZXNCeVNpemUBBQhsYW5kU2l6ZQQWZGFpbHlQcm9kdWN0aW9uQnlQaWVjZQkBDGFwcGx5Qm9udXNlcwIIBQFjAl8yBQZwaWVjZXMECGF2YWlsUmVzCQBrAwUJZGVsdGFUaW1lCQBoAgUWZGFpbHlQcm9kdWN0aW9uQnlQaWVjZQUGcGllY2VzBQlEQVlNSUxMSVMDCQBmAgUGYW1vdW50BQhhdmFpbFJlcwkAAgEJAKwCAgkArAICCQCsAgICIk5vdCBlbm91Z2ggcmVzb3VyY2VzLCBhdmFpbGFibGUgPSAJAKQDAQUIYXZhaWxSZXMCDiwgcmVxdWVzdGVkID0gCQCkAwEFBmFtb3VudAQMbmV3RGVsdGFUaW1lCQBrAwkAZQIFCGF2YWlsUmVzBQZhbW91bnQFCURBWU1JTExJUwkAaAIFFmRhaWx5UHJvZHVjdGlvbkJ5UGllY2UFBnBpZWNlcwQMbmV3VGltZXN0YW1wCQBlAggFCWxhc3RCbG9jawl0aW1lc3RhbXAFDG5ld0RlbHRhVGltZQQJbGFuZEluZGV4CQBpAgUGcGllY2VzBQVTU0laRQQKcmVzVG9DbGFpbQkBCXZpcnRDbGFpbQQFDXRlcnJhaW5Db3VudHMJAGUCBQlkZWx0YVRpbWUFDG5ld0RlbHRhVGltZQUJbGFuZEluZGV4BRZkYWlseVByb2R1Y3Rpb25CeVBpZWNlBAV3aEtleQkBEmtleVdhcmVob3VzZUJ5TGFuZAEIBQFjAl8yBAppbmZyYUxldmVsCQELdmFsdWVPckVsc2UCCQCfCAEJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQgFAWMCXzIAAAQJY3VycmVudFdoCQEMZ2V0V2FyZWhvdXNlAwUFd2hLZXkFCWxhbmRJbmRleAUKaW5mcmFMZXZlbAQEbG9mdAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhMT0ZUAgFfBAt3aFNwYWNlTGVmdAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFB3ZvbEZyZWUDAwkAAAIFCWNsYWltTW9kZQULY2xhaW1Nb2RlV2gJAGYCBQZhbW91bnQFC3doU3BhY2VMZWZ0BwkAAgEJAKwCAgkArAICAgVPbmx5IAkApAMBBQt3aFNwYWNlTGVmdAIYIHNwYWNlIGxlZnQgaW4gd2FyZWhvdXNlBAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQgFAWMCXzEEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQOY3VycmVudFBhY2tSZXMJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMCAV8EDGN1cnJlbnRXaFJlcwkAtQkCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhSZXMCAV8EDSR0MDM0ODA5MzU2ODADCQAAAgUJY2xhaW1Nb2RlBQtjbGFpbU1vZGVXaAkAlgoECQEGYWRkUmVzBQUMY3VycmVudFdoUmVzBQ10ZXJyYWluQ291bnRzCQBlAgUJZGVsdGFUaW1lBQxuZXdEZWx0YVRpbWUFCWxhbmRJbmRleAUWZGFpbHlQcm9kdWN0aW9uQnlQaWVjZQkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAULdm9sT2NjdXBpZWQIBQpyZXNUb0NsYWltAl8yCQBlAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFB3ZvbEZyZWUIBQpyZXNUb0NsYWltAl8yAwkAAAIFCWNsYWltTW9kZQUNY2xhaW1Nb2RlRHVjawkAlgoECQCRAwIFCWN1cnJlbnRXaAUId2hJZHhSZXMJAQZhZGRSZXMFBQ5jdXJyZW50UGFja1JlcwUNdGVycmFpbkNvdW50cwkAZQIFCWRlbHRhVGltZQUMbmV3RGVsdGFUaW1lBQlsYW5kSW5kZXgFFmRhaWx5UHJvZHVjdGlvbkJ5UGllY2UJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQt2b2xPY2N1cGllZAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFB3ZvbEZyZWUEBWRpc3RyCQENZGlzdHJpYnV0ZVJlcwQFDGN1cnJlbnRXaFJlcwUOY3VycmVudFBhY2tSZXMFCnJlc1RvQ2xhaW0FC3doU3BhY2VMZWZ0BAR3aEFtCQCXAwEJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFB3ZvbEZyZWUJAMwIAggFCnJlc1RvQ2xhaW0CXzIFA25pbAkAlgoECAUFZGlzdHICXzEIBQVkaXN0cgJfMgkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQt2b2xPY2N1cGllZAUEd2hBbQkAZQIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQd2b2xGcmVlBQR3aEFtBAV3aFJlcwgFDSR0MDM0ODA5MzU2ODACXzEEBWJwUmVzCAUNJHQwMzQ4MDkzNTY4MAJfMgQFbG9mdE8IBQ0kdDAzNDgwOTM1NjgwAl8zBAVsb2Z0RggFDSR0MDM0ODA5MzU2ODACXzQJAJcKBQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBCAUBYwJfMgUMbmV3VGltZXN0YW1wCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEia2V5U3Rha2VkVGltZUJ5VHlwZUFzc2V0SWRBbmRPd25lcgMFCkxBTkRQUkVGSVgIBQFjAl8yBQRhZGRyBQxuZXdUaW1lc3RhbXAFA25pbAUFYnBLZXkJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCBQVicFJlcwkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QFA25pbAUFd2hLZXkJAMwIAgkAkQMCBQljdXJyZW50V2gFC3doSWR4TGV2ZWxzCQDMCAIFBXdoUmVzCQDMCAIJAJEDAgUJY3VycmVudFdoBQh3aElkeE1hdAkAzAgCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhQcm9kCQDMCAIJALkJAgkAzAgCCQCRAwIFBGxvZnQFCXZvbExvY2tlZAkAzAgCCQCkAwEFBWxvZnRPCQDMCAIJAKQDAQUFbG9mdEYJAMwIAgkAkQMCBQRsb2Z0BQh2b2xUb3RhbAUDbmlsAgFfBQNuaWwBCGNsYWltQWxsBARhZGRyC2xhbmRBc3NldElkBnBpZWNlcwljbGFpbU1vZGUEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQULbGFuZEFzc2V0SWQECXNhdmVkVGltZQkBBXZhbHVlAQkAnwgBBQd0aW1lS2V5BAhhdmFpbFJlcwkAaAIJAGsDCQBlAggFCWxhc3RCbG9jawl0aW1lc3RhbXAFCXNhdmVkVGltZQkBDGFwcGx5Qm9udXNlcwIFC2xhbmRBc3NldElkBQZwaWVjZXMFCURBWU1JTExJUwUGcGllY2VzCQEQY2xhaW1SZXNJbnRlcm5hbAQFBGFkZHIFCGF2YWlsUmVzBQljbGFpbU1vZGUFC2xhbmRBc3NldElkAQ11cEluZnJhQ29tbW9uBAxzaG91bGRVc2VNYXQGY2FsbGVyDXBheW1lbnRBbW91bnQLbGFuZEFzc2V0SWQEBGFkZHIJAKUIAQUGY2FsbGVyBAFjCQEUY2hlY2tDbGFpbUNvbmRpdGlvbnMDBQRhZGRyBRNjbGFpbU1vZGVXaFRoZW5EdWNrBQtsYW5kQXNzZXRJZAQGcGllY2VzCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCCAUBYwJfMwULcmVjTGFuZFNpemUECGluZnJhS2V5CQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEIBQFjAl8yBAhjdXJMZXZlbAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQhpbmZyYUtleQAAAwkAZwIFCGN1ckxldmVsAAMJAAIBAiZDdXJyZW50bHkgbWF4IGluZnJhc3RydWN0dXJlIGxldmVsID0gMwQIbmV3TGV2ZWwJAGQCBQhjdXJMZXZlbAABBARjb3N0CQBrAwUVSW5mcmFVcGdyYWRlQ29zdFNVc2R0CQBoAgUGcGllY2VzBQhuZXdMZXZlbAUFU1NJWkUDAwkBASEBBQxzaG91bGRVc2VNYXQJAQIhPQIFDXBheW1lbnRBbW91bnQFBGNvc3QHCQACAQkArAICAhtQYXltZW50IGF0dGFjaGVkIHNob3VsZCBiZSAJAKQDAQUEY29zdAQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEIBQFjAl8xBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkEBW1MaXN0CQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0AgFfBAZuZXdNYXQJALkJAgkBEXN1YnRyYWN0TWF0ZXJpYWxzAwUMc2hvdWxkVXNlTWF0BQVtTGlzdAkAawMFEUluZnJhVXBncmFkZUNvc3RTCQBoAgUGcGllY2VzBQhuZXdMZXZlbAUFU1NJWkUCAV8EC2NsYWltUmVzdWx0CQEIY2xhaW1BbGwEBQRhZGRyCAUBYwJfMgUGcGllY2VzBRNjbGFpbU1vZGVXaFRoZW5EdWNrBAZ3aERhdGEIBQtjbGFpbVJlc3VsdAJfNQQGb2xkVm9sCQEXZ2V0V2FyZWhvdXNlVG90YWxWb2x1bWUBCQCRAwIFBndoRGF0YQULd2hJZHhMZXZlbHMECm5ld1ZvbERhdGEJALkJAgkAzAgCCQCRAwIJALUJAgkAkQMCBQZ3aERhdGEFC3doSWR4TGV2ZWxzAgFfAAAJAMwIAgkApAMBBQhuZXdMZXZlbAUDbmlsAgFfBAZuZXdWb2wJARdnZXRXYXJlaG91c2VUb3RhbFZvbHVtZQEFCm5ld1ZvbERhdGEEBGxvZnQJALUJAgkAkQMCBQZ3aERhdGEFCXdoSWR4TE9GVAIBXwQKbmV3TG9mdFN0cgkAuQkCCQDMCAIJAJEDAgUEbG9mdAUJdm9sTG9ja2VkCQDMCAIJAJEDAgUEbG9mdAULdm9sT2NjdXBpZWQJAMwIAgkApAMBCQBlAgkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQd2b2xGcmVlBQZuZXdWb2wFBm9sZFZvbAkAzAgCCQCkAwEFBm5ld1ZvbAUDbmlsAgFfCQCUCgIJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUIaW5mcmFLZXkFCG5ld0xldmVsCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEea2V5SW5mcmFMZXZlbEJ5QXNzZXRJZEFuZE93bmVyAggFAWMCXzIFBGFkZHIFCG5ld0xldmVsCQDMCAIJAQtTdHJpbmdFbnRyeQIFBWJwS2V5CQC5CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCQCRAwIIBQtjbGFpbVJlc3VsdAJfMwUIYnBJZHhSZXMJAMwIAgUGbmV3TWF0CQDMCAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAUDbmlsAgE6CQDMCAIJAQtTdHJpbmdFbnRyeQIIBQtjbGFpbVJlc3VsdAJfNAkAuQkCCQDMCAIFCm5ld1ZvbERhdGEJAMwIAgkAkQMCBQZ3aERhdGEFCHdoSWR4UmVzCQDMCAIJAJEDAgUGd2hEYXRhBQh3aElkeE1hdAkAzAgCCQCRAwIFBndoRGF0YQUJd2hJZHhQcm9kCQDMCAIFCm5ld0xvZnRTdHIFA25pbAIBOgUDbmlsCAULY2xhaW1SZXN1bHQCXzEFCG5ld0xldmVsARJhY3RpdmF0ZVByZXNhbGVBcnQCBGFkZHINbGFuZEFzc2V0SWRJbgQBYwkBFGNoZWNrQ2xhaW1Db25kaXRpb25zAwUEYWRkcgUTY2xhaW1Nb2RlV2hUaGVuRHVjawUNbGFuZEFzc2V0SWRJbgQLbGFuZEFzc2V0SWQIBQFjAl8yBAZwaWVjZXMJAQ9udW1QaWVjZXNCeVNpemUBCQCRAwIIBQFjAl8zBQtyZWNMYW5kU2l6ZQQNYWN0aXZhdGlvbktleQkBIGtleUxhbmRBcnRTdGF0dXNCeVR5cGVBbmRBc3NldElkAgUKQVJUUFJFU0FMRQULbGFuZEFzc2V0SWQDCQBmAgkBC3ZhbHVlT3JFbHNlAgkAnwgBBQ1hY3RpdmF0aW9uS2V5AAAAAAkAAgECJVByZXNhbGUgYXJ0aWZhY3QgaXMgYWxyZWFkeSBhY3RpdmF0ZWQDCQBmAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIIBQFjAl8zBQpyZWNMYW5kTnVtBQ9QUkVTQUxFTlVNTEFORFMJAAIBCQCsAgIJAKwCAgkArAICBQpMQU5EUFJFRklYAgEgBQtsYW5kQXNzZXRJZAIlIGlzIG5vdCBlbGlnaWJsZSBmb3IgcHJlc2FsZSBhcnRpZmFjdAQLY2xhaW1SZXN1bHQJAQhjbGFpbUFsbAQFBGFkZHIFC2xhbmRBc3NldElkBQZwaWVjZXMFE2NsYWltTW9kZVdoVGhlbkR1Y2sJAM0IAgkAzQgCCQDNCAIJAM0IAggFC2NsYWltUmVzdWx0Al8xCQEMSW50ZWdlckVudHJ5AgUNYWN0aXZhdGlvbktleQUGcGllY2VzCQEMSW50ZWdlckVudHJ5AgkBJWtleUxhbmRBcnRTdGF0dXNCeVR5cGVBc3NldElkQW5kT3duZXIDBQpBUlRQUkVTQUxFBQtsYW5kQXNzZXRJZAUEYWRkcgUGcGllY2VzCQELU3RyaW5nRW50cnkCCAULY2xhaW1SZXN1bHQCXzIJALkJAggFC2NsYWltUmVzdWx0Al8zAgE6CQELU3RyaW5nRW50cnkCCAULY2xhaW1SZXN1bHQCXzQJALkJAggFC2NsYWltUmVzdWx0Al81AgE6AQ1tZXJnZUludGVybmFsBwtuZXdMYW5kU2l6ZQhuZXdMZXZlbAdmb3JtdWxhBGFkZHIMbGFuZEFzc2V0SWRzBHR4SWQHbmVlZE1hdAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkCgEKY2hlY2tNZXJnZQIDYWNjC2xhbmRBc3NldElkBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFC2xhbmRBc3NldElkBAd0aW1lS2V5CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkBAlzYXZlZFRpbWUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnwgBBQd0aW1lS2V5CQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkBAVvd25lcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQtsYW5kQXNzZXRJZAkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDCQECIT0CBQVvd25lcgUEYWRkcgkAAgEJAKwCAgUKTEFORFBSRUZJWAINIGlzIG5vdCB5b3VycwQBZAkAtQkCCAUFYXNzZXQLZGVzY3JpcHRpb24CAV8ECWNvbnRpbmVudAkAkQMCBQFkBQxyZWNDb250aW5lbnQDAwkBAiE9AggFA2FjYwJfMwIACQECIT0CCAUDYWNjAl8zBQljb250aW5lbnQHCQACAQIuTGFuZHMgc2hvdWxkIGJlIG9uIHRoZSBzYW1lIGNvbnRpbmVudCB0byBtZXJnZQQIbGFuZFNpemUJAJEDAgUBZAULcmVjTGFuZFNpemUEB3NpemVzSW4IBQNhY2MCXzEEAWkJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAswkCBQdzaXplc0luBQhsYW5kU2l6ZQInWW91IGhhdmVuJ3QgcGFzc2VkIGFsbCB0aGUgbGFuZHMgbmVlZGVkBAhzaXplc091dAkArAICCQCvAgIFB3NpemVzSW4FAWkJALACAgUHc2l6ZXNJbgkAZAIFAWkAAQQGcGllY2VzCQEPbnVtUGllY2VzQnlTaXplAQUIbGFuZFNpemUEBGFydHMJAGQCCAUDYWNjAl8yCQELdmFsdWVPckVsc2UCCQCfCAEJASBrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQW5kQXNzZXRJZAIFCkFSVFBSRVNBTEUFC2xhbmRBc3NldElkAAAECmluZnJhTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAAABAhyZXFMZXZlbAQHJG1hdGNoMAUIbGFuZFNpemUDCQAAAgIBUwUHJG1hdGNoMAADAwkAAAICAU0FByRtYXRjaDAABAMJAAACAgFMBQckbWF0Y2gwAAUDCQAAAgICWEwFByRtYXRjaDAABgkAAgECGk9ubHkgUywgTSwgTCwgWEwgY2FuIG1lcmdlAwkBAiE9AgUKaW5mcmFMZXZlbAUIcmVxTGV2ZWwJAAIBAiJBbGwgbGFuZHMgc2hvdWxkIGJlIG1heGVkIHRvIG1lcmdlBAdsYW5kTnVtCQCRAwIFAWQFCnJlY0xhbmROdW0EDXRlcnJhaW5Db3VudHMJAQ1jb3VudFRlcnJhaW5zAQkAkQMCBQFkBQtyZWNUZXJyYWlucwQJZGVsdGFUaW1lCQBlAggFCWxhc3RCbG9jawl0aW1lc3RhbXAFCXNhdmVkVGltZQMJAGYCAAAFCWRlbHRhVGltZQkAAgEJAKwCAgkArAICCQCsAgICJlNhdmVkIHRpbWVzdGFtcCBpcyBpbiBmdXR1cmUsIHNhdmVkID0gCQCkAwEFCXNhdmVkVGltZQIMLCBjdXJyZW50ID0gCQCkAwEIBQlsYXN0QmxvY2sJdGltZXN0YW1wBBZkYWlseVByb2R1Y3Rpb25CeVBpZWNlCQEMYXBwbHlCb251c2VzAgULbGFuZEFzc2V0SWQFBnBpZWNlcwQJbGFuZEluZGV4CQBpAgUGcGllY2VzBQVTU0laRQQFYnBSZXMJAQZhZGRSZXMFCQC1CQIIBQNhY2MCXzQCAV8FDXRlcnJhaW5Db3VudHMFCWRlbHRhVGltZQUJbGFuZEluZGV4BRZkYWlseVByb2R1Y3Rpb25CeVBpZWNlBAVwcm9wcwkBGXVwZGF0ZVByb3BvcnRpb25zSW50ZXJuYWwECQC1CQIIBQNhY2MCXzYCAV8FDXRlcnJhaW5Db3VudHMFCWxhbmRJbmRleAD///////////8BBAVsYW5kcwgFA2FjYwJfNwQDaWR4CQDPCAIFBWxhbmRzBQtsYW5kQXNzZXRJZAMJAQEhAQkBCWlzRGVmaW5lZAEFA2lkeAkAAgEJAKwCAgIgWW91ciBzdGFrZWQgbGFuZHMgZG9uJ3QgY29udGFpbiAFC2xhbmRBc3NldElkBAljdXN0b21LZXkJARprZXlMYW5kQXNzZXRJZFRvQ3VzdG9tTmFtZQEFC2xhbmRBc3NldElkBApjdXN0b21OYW1lCQELdmFsdWVPckVsc2UCCQCiCAEFCWN1c3RvbUtleQIACQCZCgcFCHNpemVzT3V0BQRhcnRzBQljb250aW5lbnQFBWJwUmVzCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIIBQNhY2MCXzUJAQtEZWxldGVFbnRyeQEJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQULbGFuZEFzc2V0SWQJAQtEZWxldGVFbnRyeQEJASJrZXlTdGFrZWRUaW1lQnlUeXBlQXNzZXRJZEFuZE93bmVyAwUKTEFORFBSRUZJWAULbGFuZEFzc2V0SWQFBGFkZHIJAQtEZWxldGVFbnRyeQEJARBrZXlMYW5kVG9Bc3NldElkAQUHbGFuZE51bQkBC0RlbGV0ZUVudHJ5AQkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFC2xhbmRBc3NldElkCQELRGVsZXRlRW50cnkBCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEFC2xhbmRBc3NldElkCQELRGVsZXRlRW50cnkBCQEea2V5SW5mcmFMZXZlbEJ5QXNzZXRJZEFuZE93bmVyAgULbGFuZEFzc2V0SWQFBGFkZHIJAQtEZWxldGVFbnRyeQEJASBrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQW5kQXNzZXRJZAIFCkFSVFBSRVNBTEUFC2xhbmRBc3NldElkCQELRGVsZXRlRW50cnkBCQEla2V5TGFuZEFydFN0YXR1c0J5VHlwZUFzc2V0SWRBbmRPd25lcgMFCkFSVFBSRVNBTEUFC2xhbmRBc3NldElkBQRhZGRyCQELRGVsZXRlRW50cnkBCQERa2V5TGFuZE51bVRvT3duZXIBBQdsYW5kTnVtCQELRGVsZXRlRW50cnkBCQESa2V5V2FyZWhvdXNlQnlMYW5kAQULbGFuZEFzc2V0SWQJAQtEZWxldGVFbnRyeQEFCWN1c3RvbUtleQkBC0RlbGV0ZUVudHJ5AQkBGmtleUxhbmRDdXN0b21OYW1lVG9Bc3NldElkAQUKY3VzdG9tTmFtZQkBBEJ1cm4CCQDZBAEFC2xhbmRBc3NldElkAAEFBXByb3BzCQDRCAIFBWxhbmRzCQEFdmFsdWUBBQNpZHgEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BAdwcm9wU3RyCQELdmFsdWVPckVsc2UCCQCiCAEJARFrZXlSZXNQcm9wb3J0aW9ucwACCzBfMF8wXzBfMF8wBAhsYW5kc0tleQkBFWtleVN0YWtlZExhbmRzQnlPd25lcgEFBGFkZHIECGxhbmRzU3RyCQCiCAEFCGxhbmRzS2V5BAdsYW5kc0luAwkBCWlzRGVmaW5lZAEFCGxhbmRzU3RyCQC9CQIJAQV2YWx1ZQEFCGxhbmRzU3RyAgFfBQNuaWwEAXIKAAIkbAUMbGFuZEFzc2V0SWRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAmQoHBQdmb3JtdWxhAAACAAkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMFA25pbAUHcHJvcFN0cgUHbGFuZHNJbgoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEKY2hlY2tNZXJnZQIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNQkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUECWNvbnRpbmVudAgFAXICXzMEDGNvbnRpbmVudElkeAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDPCAIFCmNvbnRpbmVudHMFCWNvbnRpbmVudAkArAICAhNVbmtub3duIGNvbnRpbmVudDogBQljb250aW5lbnQECHRlcnJhaW5zCQELZ2VuVGVycmFpbnMCCQEDYWJzAQkAngMBBQR0eElkBQxjb250aW5lbnRJZHgEB2ZyZWVOdW0JAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBEmtleU5leHRGcmVlTGFuZE51bQAJAGQCBQ9QUkVTQUxFTlVNTEFORFMAAQQKbmV3TGFuZE51bQkApAMBBQdmcmVlTnVtBAVpc3N1ZQkAwggFCQEHbmZ0TmFtZQIFCm5ld0xhbmROdW0FC25ld0xhbmRTaXplCQC5CQIJAMwIAgUKbmV3TGFuZE51bQkAzAgCBQtuZXdMYW5kU2l6ZQkAzAgCBQh0ZXJyYWlucwkAzAgCBQljb250aW5lbnQFA25pbAIBXwABAAAHBAdhc3NldElkCQC4CAEFBWlzc3VlBA5uZXdMYW5kQXNzZXRJZAkA2AQBBQdhc3NldElkBAZuZXdNYXQJALkJAgkBEXN1YnRyYWN0TWF0ZXJpYWxzAwkAZgIFB25lZWRNYXQAAAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAIBXwUHbmVlZE1hdAIBXwkAlAoCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAggFAXICXzUDCQBmAgkAkAMBCAUBcgJfNwAACQELU3RyaW5nRW50cnkCBQhsYW5kc0tleQkAuwkCCAUBcgJfNwIBXwkBC0RlbGV0ZUVudHJ5AQUIbGFuZHNLZXkJAQxJbnRlZ2VyRW50cnkCCQESa2V5TmV4dEZyZWVMYW5kTnVtAAkAZAIFB2ZyZWVOdW0AAQUFaXNzdWUJAQtTdHJpbmdFbnRyeQIJARBrZXlMYW5kVG9Bc3NldElkAQUKbmV3TGFuZE51bQUObmV3TGFuZEFzc2V0SWQJAQtTdHJpbmdFbnRyeQIJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQ5uZXdMYW5kQXNzZXRJZAUEYWRkcgkBC1N0cmluZ0VudHJ5AgkBEWtleUxhbmROdW1Ub093bmVyAQUKbmV3TGFuZE51bQUEYWRkcgkBDEludGVnZXJFbnRyeQIJASBrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQW5kQXNzZXRJZAIFCkFSVFBSRVNBTEUFDm5ld0xhbmRBc3NldElkCAUBcgJfMgkBDEludGVnZXJFbnRyeQIJASVrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQXNzZXRJZEFuZE93bmVyAwUKQVJUUFJFU0FMRQUObmV3TGFuZEFzc2V0SWQFBGFkZHIIBQFyAl8yCQEMSW50ZWdlckVudHJ5AgkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQ5uZXdMYW5kQXNzZXRJZAUIbmV3TGV2ZWwJAQxJbnRlZ2VyRW50cnkCCQEea2V5SW5mcmFMZXZlbEJ5QXNzZXRJZEFuZE93bmVyAgUObmV3TGFuZEFzc2V0SWQFBGFkZHIFCG5ld0xldmVsCQELU3RyaW5nRW50cnkCBQVicEtleQkAuQkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAggFAXICXzQJAMwIAgUGbmV3TWF0CQDMCAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAUDbmlsAgE6CQELU3RyaW5nRW50cnkCCQERa2V5UmVzUHJvcG9ydGlvbnMACAUBcgJfNgkBC1N0cmluZ0VudHJ5AgkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkCQC5CQIJAMwIAgUJY29udGluZW50CQDMCAICAUwJAMwIAgUObmV3TGFuZEFzc2V0SWQFA25pbAIBXwkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQUEYWRkcgABBQdhc3NldElkBQ5uZXdMYW5kQXNzZXRJZAEDczJtAwRhZGRyDGxhbmRBc3NldElkcwR0eElkCQENbWVyZ2VJbnRlcm5hbAcCAU0AAwIEU1NTUwUEYWRkcgUMbGFuZEFzc2V0SWRzBQR0eElkAAABA20ybAUEYWRkcgxsYW5kQXNzZXRJZHMEdHhJZAxzaG91bGRVc2VNYXQNcGF5bWVudEFtb3VudAQEY29zdAkAaAIFFUluZnJhVXBncmFkZUNvc3RTVXNkdAAEAwMJAQEhAQUMc2hvdWxkVXNlTWF0CQECIT0CBQ1wYXltZW50QW1vdW50BQRjb3N0BwkAAgEJAKwCAgIbUGF5bWVudCBhdHRhY2hlZCBzaG91bGQgYmUgCQCkAwEFBGNvc3QJAQ1tZXJnZUludGVybmFsBwIBTAAEAgNTTU0FBGFkZHIFDGxhbmRBc3NldElkcwUEdHhJZAkAaAIFEUluZnJhVXBncmFkZUNvc3RTAAQBBGwyeGwFBGFkZHIMbGFuZEFzc2V0SWRzBHR4SWQMc2hvdWxkVXNlTWF0DXBheW1lbnRBbW91bnQEBGNvc3QJAGgCBRVJbmZyYVVwZ3JhZGVDb3N0U1VzZHQALwMDCQEBIQEFDHNob3VsZFVzZU1hdAkBAiE9AgUNcGF5bWVudEFtb3VudAUEY29zdAcJAAIBCQCsAgICG1BheW1lbnQgYXR0YWNoZWQgc2hvdWxkIGJlIAkApAMBBQRjb3N0CQENbWVyZ2VJbnRlcm5hbAcCAlhMAAUCBVNTU01MBQRhZGRyBQxsYW5kQXNzZXRJZHMFBHR4SWQJAGgCBRFJbmZyYVVwZ3JhZGVDb3N0UwAvAQZ4bDJ4eGwFBGFkZHIMbGFuZEFzc2V0SWRzBHR4SWQMc2hvdWxkVXNlTWF0DXBheW1lbnRBbW91bnQEBGNvc3QJAGgCBRVJbmZyYVVwZ3JhZGVDb3N0U1VzZHQANgMDCQEBIQEFDHNob3VsZFVzZU1hdAkBAiE9AgUNcGF5bWVudEFtb3VudAUEY29zdAcJAAIBCQCsAgICG1BheW1lbnQgYXR0YWNoZWQgc2hvdWxkIGJlIAkApAMBBQRjb3N0CQENbWVyZ2VJbnRlcm5hbAcCA1hYTAAGAgNMWEwFBGFkZHIFDGxhbmRBc3NldElkcwUEdHhJZAkAaAIFEUluZnJhVXBncmFkZUNvc3RTADYBC21lcmdlQ29tbW9uBQxzaG91bGRVc2VNYXQEYWRkcg1wYXltZW50QW1vdW50DGxhbmRBc3NldElkcwR0eElkBAttZXJnZVJlc3VsdAQHJG1hdGNoMAkAkAMBBQxsYW5kQXNzZXRJZHMDCQAAAgAEBQckbWF0Y2gwCQEDczJtAwUEYWRkcgUMbGFuZEFzc2V0SWRzBQR0eElkAwkAAAIAAwUHJG1hdGNoMAkBA20ybAUFBGFkZHIFDGxhbmRBc3NldElkcwUEdHhJZAUMc2hvdWxkVXNlTWF0BQ1wYXltZW50QW1vdW50AwkAAAIABQUHJG1hdGNoMAkBBGwyeGwFBQRhZGRyBQxsYW5kQXNzZXRJZHMFBHR4SWQFDHNob3VsZFVzZU1hdAUNcGF5bWVudEFtb3VudAMJAAACAAIFByRtYXRjaDAJAQZ4bDJ4eGwFBQRhZGRyBQxsYW5kQXNzZXRJZHMFBHR4SWQFDHNob3VsZFVzZU1hdAUNcGF5bWVudEFtb3VudAkAAgECDVVua25vd24gbWVyZ2UFC21lcmdlUmVzdWx0AQZwcm9sb2cBAWkDAwkBAiE9AggFAWkMb3JpZ2luQ2FsbGVyBQxyZXN0Q29udHJhY3QJAQt2YWx1ZU9yRWxzZQIJAKAIAQkBCmtleUJsb2NrZWQABwcJAAIBAh9Db250cmFjdHMgYXJlIHVuZGVyIG1haW50ZW5hbmNlCQELU3RyaW5nRW50cnkCCQERa2V5TGFzdFR4SWRCeVVzZXIBCQClCAEIBQFpDG9yaWdpbkNhbGxlcgkA2AQBCAUBaQ10cmFuc2FjdGlvbklkHQFpAQ1jb25zdHJ1Y3RvclYxAQhyZXN0QWRkcgMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECEVBlcm1pc3Npb24gZGVuaWVkCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ5rZXlSZXN0QWRkcmVzcwAFCHJlc3RBZGRyBQNuaWwBaQEKc2V0QmxvY2tlZAEJaXNCbG9ja2VkAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIRcGVybWlzc2lvbiBkZW5pZWQJAMwIAgkBDEJvb2xlYW5FbnRyeQIJAQprZXlCbG9ja2VkAAUJaXNCbG9ja2VkBQNuaWwBaQEJc3Rha2VMYW5kAAQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECHEV4YWN0bHkgb25lIHBheW1lbnQgcmVxdWlyZWQEA3BtdAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAABAdhc3NldElkCQEFdmFsdWUBCAUDcG10B2Fzc2V0SWQEB2FkZHJlc3MJAKUIAQgFAWkGY2FsbGVyAwkBAiE9AggFA3BtdAZhbW91bnQAAQkAAgEJAKwCAgkArAICAgRORlQgBQpMQU5EUFJFRklYAiQgdG9rZW4gc2hvdWxkIGJlIGF0dGFjaGVkIGFzIHBheW1lbnQEBWFzc2V0CQEFdmFsdWUBCQDsBwEFB2Fzc2V0SWQDCQECIT0CCAUFYXNzZXQGaXNzdWVyBQR0aGlzCQACAQIXVW5rbm93biBpc3N1ZXIgb2YgdG9rZW4DCQEBIQEJAQhjb250YWlucwIIBQVhc3NldARuYW1lBQpMQU5EUFJFRklYCQACAQkArAICCQCsAgICCU9ubHkgTkZUIAUKTEFORFBSRUZJWAIUIHRva2VucyBhcmUgYWNjZXB0ZWQEC2xhbmROdW1TaXplCQCwAgIIBQVhc3NldARuYW1lAAQEB2xhbmROdW0DCQEIY29udGFpbnMCBQtsYW5kTnVtU2l6ZQIDWFhMCQCzAgIFC2xhbmROdW1TaXplAAMDCQEIY29udGFpbnMCBQtsYW5kTnVtU2l6ZQICWEwJALMCAgULbGFuZE51bVNpemUAAgkAswICBQtsYW5kTnVtU2l6ZQABAwkBASEBCQEJaXNEZWZpbmVkAQkAtgkBBQdsYW5kTnVtCQACAQkArAICAh5DYW5ub3QgcGFyc2UgbGFuZCBudW1iZXIgZnJvbSAIBQVhc3NldARuYW1lBAtsYW5kQXNzZXRJZAkA2AQBBQdhc3NldElkBAd0aW1lS2V5CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkAwkBCWlzRGVmaW5lZAEJAJ8IAQUHdGltZUtleQkAAgEJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQISIGlzIGFscmVhZHkgc3Rha2VkBAFkCQC1CQIIBQVhc3NldAtkZXNjcmlwdGlvbgIBXwQNdGVycmFpbkNvdW50cwkBDWNvdW50VGVycmFpbnMBCQCRAwIFAWQFC3JlY1RlcnJhaW5zBAZwaWVjZXMJAQ9udW1QaWVjZXNCeVNpemUBCQCRAwIFAWQFC3JlY0xhbmRTaXplBAVwcm9wcwkBEXVwZGF0ZVByb3BvcnRpb25zAwUNdGVycmFpbkNvdW50cwkAaQIFBnBpZWNlcwUFU1NJWkUAAQQJYXJ0UGllY2VzCQELdmFsdWVPckVsc2UCCQCfCAEJASBrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQW5kQXNzZXRJZAIFCkFSVFBSRVNBTEUFC2xhbmRBc3NldElkAAAECGxhbmRzU3RyCQCiCAEJARVrZXlTdGFrZWRMYW5kc0J5T3duZXIBBQdhZGRyZXNzBAVsYW5kcwMJAQlpc0RlZmluZWQBBQhsYW5kc1N0cgkAvQkCCQEFdmFsdWUBBQhsYW5kc1N0cgIBXwUDbmlsAwkBD2NvbnRhaW5zRWxlbWVudAIFBWxhbmRzBQtsYW5kQXNzZXRJZAkAAgEJAKwCAgIiWW91ciBzdGFrZWQgbGFuZHMgYWxyZWFkeSBjb250YWluIAULbGFuZEFzc2V0SWQECmluZnJhTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAAACQDMCAIJAQxJbnRlZ2VyRW50cnkCBQd0aW1lS2V5CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDBQpMQU5EUFJFRklYBQtsYW5kQXNzZXRJZAUHYWRkcmVzcwgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAMwIAgkBC1N0cmluZ0VudHJ5AgkBFWtleVN0YWtlZExhbmRzQnlPd25lcgEFB2FkZHJlc3MJALsJAgkAzQgCBQVsYW5kcwULbGFuZEFzc2V0SWQCAV8JAMwIAgkBC1N0cmluZ0VudHJ5AgkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFC2xhbmRBc3NldElkBQdhZGRyZXNzCQDMCAIJAQtTdHJpbmdFbnRyeQIJARFrZXlMYW5kTnVtVG9Pd25lcgEFB2xhbmROdW0FB2FkZHJlc3MJAMwIAgkBDEludGVnZXJFbnRyeQIJASVrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQXNzZXRJZEFuZE93bmVyAwUKQVJUUFJFU0FMRQULbGFuZEFzc2V0SWQFB2FkZHJlc3MFCWFydFBpZWNlcwkAzAgCCQEMSW50ZWdlckVudHJ5AgkBHmtleUluZnJhTGV2ZWxCeUFzc2V0SWRBbmRPd25lcgIFC2xhbmRBc3NldElkBQdhZGRyZXNzBQppbmZyYUxldmVsCQDMCAIJAQtTdHJpbmdFbnRyeQIJARFrZXlSZXNQcm9wb3J0aW9ucwAFBXByb3BzCQDMCAIFDHByb2xvZ0FjdGlvbgUDbmlsAWkBC3Vuc3Rha2VMYW5kAQ1sYW5kQXNzZXRJZEluBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBGFkZHIJAKUIAQgFAWkGY2FsbGVyBAFjCQEUY2hlY2tDbGFpbUNvbmRpdGlvbnMDBQRhZGRyBQ1jbGFpbU1vZGVEdWNrBQ1sYW5kQXNzZXRJZEluBAtsYW5kQXNzZXRJZAgFAWMCXzIECGxhbmRzS2V5CQEVa2V5U3Rha2VkTGFuZHNCeU93bmVyAQUEYWRkcgQNdGVycmFpbkNvdW50cwkBDWNvdW50VGVycmFpbnMBCQCRAwIIBQFjAl8zBQtyZWNUZXJyYWlucwQGcGllY2VzCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCCAUBYwJfMwULcmVjTGFuZFNpemUEBXByb3BzCQERdXBkYXRlUHJvcG9ydGlvbnMDBQ10ZXJyYWluQ291bnRzCQBpAgUGcGllY2VzBQVTU0laRQD///////////8BBAtjbGFpbVJlc3VsdAkBCGNsYWltQWxsBAUEYWRkcgULbGFuZEFzc2V0SWQFBnBpZWNlcwUNY2xhaW1Nb2RlRHVjawQFbGFuZHMJAL0JAgkBC3ZhbHVlT3JFbHNlAgkAoggBBQhsYW5kc0tleQIAAgFfBANpZHgJAM8IAgUFbGFuZHMFC2xhbmRBc3NldElkAwkBASEBCQEJaXNEZWZpbmVkAQUDaWR4CQACAQkArAICAiBZb3VyIHN0YWtlZCBsYW5kcyBkb24ndCBjb250YWluIAULbGFuZEFzc2V0SWQEAXQICQEFdmFsdWUBCQDtBwEFBmhlaWdodAl0aW1lc3RhbXAEC3JlbGVhc2VUaW1lCQELdmFsdWVPckVsc2UCCQCaCAIFC2dvdkNvbnRyYWN0CQEVa2V5VXNlckd3bFJlbGVhc2VUaW1lAQUEYWRkcgAAAwkAZwIFC3JlbGVhc2VUaW1lBQF0CQACAQkArAICAjlZb3VyIGdXTCBhcmUgdGFraW5nIHBhcnQgaW4gdm90aW5nLCBjYW5ub3QgdW5zdGFrZSB1bnRpbCAJAKQDAQULcmVsZWFzZVRpbWUJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyAAEJANkEAQULbGFuZEFzc2V0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEia2V5U3Rha2VkVGltZUJ5VHlwZUFzc2V0SWRBbmRPd25lcgMFCkxBTkRQUkVGSVgFC2xhbmRBc3NldElkBQRhZGRyCQDMCAIJAQtTdHJpbmdFbnRyeQIJARFrZXlSZXNQcm9wb3J0aW9ucwAFBXByb3BzCQDMCAIJAQtTdHJpbmdFbnRyeQIIBQtjbGFpbVJlc3VsdAJfMgkAuQkCCAULY2xhaW1SZXN1bHQCXzMCAToJAMwIAgMJAGYCCQCQAwEFBWxhbmRzAAEJAQtTdHJpbmdFbnRyeQIFCGxhbmRzS2V5CQC7CQIJANEIAgUFbGFuZHMJAQV2YWx1ZQEFA2lkeAIBXwkBC0RlbGV0ZUVudHJ5AQUIbGFuZHNLZXkJAMwIAgUMcHJvbG9nQWN0aW9uBQNuaWwBaQEJc3Rha2VEdWNrAAQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECHEV4YWN0bHkgb25lIHBheW1lbnQgcmVxdWlyZWQEA3BtdAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAABAdhc3NldElkCQEFdmFsdWUBCAUDcG10B2Fzc2V0SWQEB2FkZHJlc3MJAKUIAQgFAWkGY2FsbGVyAwkBAiE9AggFA3BtdAZhbW91bnQAAQkAAgEJAKwCAgkArAICAgRORlQgBQpEVUNLUFJFRklYAiQgdG9rZW4gc2hvdWxkIGJlIGF0dGFjaGVkIGFzIHBheW1lbnQEBWFzc2V0CQEFdmFsdWUBCQDsBwEFB2Fzc2V0SWQDAwkBAiE9AggFBWFzc2V0Bmlzc3VlcgUNaW5jdWJhdG9yQWRkcgkBAiE9AggFBWFzc2V0Bmlzc3VlcgULYnJlZWRlckFkZHIHCQACAQkArAICCQCsAgICElVua25vd24gaXNzdWVyIG9mIAUKRFVDS1BSRUZJWAIGIHRva2VuAwkBASEBCQEIY29udGFpbnMCCAUFYXNzZXQEbmFtZQUKRFVDS1BSRUZJWAkAAgEJAKwCAgkArAICAglPbmx5IE5GVCAFCkRVQ0tQUkVGSVgCFCB0b2tlbnMgYXJlIGFjY2VwdGVkBAphc3NldElkU3RyCQDYBAEFB2Fzc2V0SWQEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQUKYXNzZXRJZFN0cgMJAQlpc0RlZmluZWQBCQCfCAEFB3RpbWVLZXkJAAIBCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCEiBpcyBhbHJlYWR5IHN0YWtlZAMJAQlpc0RlZmluZWQBCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFB2FkZHJlc3MJAAIBCQCsAgICHVlvdSBhbHJlYWR5IHN0YWtlZCBvbmUgZHVjazogCAUFYXNzZXQEbmFtZQQGbG9jS2V5CQEPa2V5RHVja0xvY2F0aW9uAQUKYXNzZXRJZFN0cgQIbG9jYXRpb24JAKIIAQUGbG9jS2V5BAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQUKYXNzZXRJZFN0cgQIYmFja3BhY2sJAKIIAQUFYnBLZXkJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUHdGltZUtleQgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAMwIAgkBDEludGVnZXJFbnRyeQIJASJrZXlTdGFrZWRUaW1lQnlUeXBlQXNzZXRJZEFuZE93bmVyAwUKRFVDS1BSRUZJWAkA2AQBBQdhc3NldElkBQdhZGRyZXNzCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAzAgCCQELU3RyaW5nRW50cnkCCQEQa2V5RHVja0lkVG9Pd25lcgEFCmFzc2V0SWRTdHIFB2FkZHJlc3MJAMwIAgkBC1N0cmluZ0VudHJ5AgkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUHYWRkcmVzcwUKYXNzZXRJZFN0cgUDbmlsAwkBCWlzRGVmaW5lZAEFCGxvY2F0aW9uBQNuaWwJAM4IAgkAzAgCCQELU3RyaW5nRW50cnkCBQZsb2NLZXkFD0RFRkFVTFRMT0NBVElPTgUDbmlsAwkBCWlzRGVmaW5lZAEFCGJhY2twYWNrBQNuaWwJAM0IAgkAzQgCCQDMCAIJAQtTdHJpbmdFbnRyeQIFBWJwS2V5AhowOjBfMF8wXzBfMF8wOjBfMF8wXzBfMF8wOgUDbmlsCQEMSW50ZWdlckVudHJ5AgkBDWtleUR1Y2tIZWFsdGgBBQphc3NldElkU3RyAGQFDHByb2xvZ0FjdGlvbgFpAQt1bnN0YWtlRHVjawEKYXNzZXRJZFN0cgQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBAdhc3NldElkCQDZBAEFCmFzc2V0SWRTdHIEB2FkZHJlc3MJAKUIAQgFAWkGY2FsbGVyBAVhc3NldAkBBXZhbHVlAQkA7AcBBQdhc3NldElkBAd0aW1lS2V5CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEJANgEAQUHYXNzZXRJZAMJAQEhAQkBCWlzRGVmaW5lZAEJAJ8IAQUHdGltZUtleQkAAgEJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQDCQEBIQEJAQlpc0RlZmluZWQBCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFB2FkZHJlc3MJAAIBCQCsAgIJAKwCAgIJVGhlIGR1Y2sgCAUFYXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQEBW93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBEGtleUR1Y2tJZFRvT3duZXIBCQDYBAEFB2Fzc2V0SWQJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwkBAiE9AgUFb3duZXIFB2FkZHJlc3MJAAIBAhdTdGFrZWQgTkZUIGlzIG5vdCB5b3VycwQJa2V5SGVhbHRoCQENa2V5RHVja0hlYWx0aAEFCmFzc2V0SWRTdHIEBmhlYWx0aAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlrZXlIZWFsdGgAZAMJAGYCAGQFBmhlYWx0aAkAAgECJlBsZWFzZSBoZWFsIHlvdXIgZHVjayBiZWZvcmUgdW5zdGFraW5nCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgABBQdhc3NldElkCQDMCAIJAQtEZWxldGVFbnRyeQEFB3RpbWVLZXkJAMwIAgkBC0RlbGV0ZUVudHJ5AQUJa2V5SGVhbHRoCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ9rZXlEdWNrTG9jYXRpb24BBQphc3NldElkU3RyCQDMCAIJAQtEZWxldGVFbnRyeQEJARBrZXlEdWNrSWRUb093bmVyAQUKYXNzZXRJZFN0cgkAzAgCCQELRGVsZXRlRW50cnkBCQEia2V5U3Rha2VkVGltZUJ5VHlwZUFzc2V0SWRBbmRPd25lcgMFCkRVQ0tQUkVGSVgFCmFzc2V0SWRTdHIFB2FkZHJlc3MJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUHYWRkcmVzcwkAzAgCBQxwcm9sb2dBY3Rpb24FA25pbAFpAQhjbGFpbVJlcwIGYW1vdW50DmxhbmRBc3NldElkU3RyBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBGFkZHIJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyBAZyZXN1bHQJARBjbGFpbVJlc0ludGVybmFsBAUEYWRkcgUGYW1vdW50BQ1jbGFpbU1vZGVEdWNrBQ5sYW5kQXNzZXRJZFN0cgkAlAoCCQDNCAIJAM0IAgkAzQgCCAUGcmVzdWx0Al8xCQELU3RyaW5nRW50cnkCCAUGcmVzdWx0Al8yCQC5CQIIBQZyZXN1bHQCXzMCAToJAQtTdHJpbmdFbnRyeQIIBQZyZXN1bHQCXzQJALkJAggFBnJlc3VsdAJfNQIBOgUMcHJvbG9nQWN0aW9uCQCRAwIIBQZyZXN1bHQCXzMFCGJwSWR4UmVzAWkBDGNsYWltUmVzVG9XSAIGYW1vdW50DmxhbmRBc3NldElkU3RyBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBGFkZHIJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyBAZyZXN1bHQJARBjbGFpbVJlc0ludGVybmFsBAUEYWRkcgUGYW1vdW50BQtjbGFpbU1vZGVXaAUObGFuZEFzc2V0SWRTdHIJAJQKAgkAzQgCCQDNCAIJAM0IAggFBnJlc3VsdAJfMQkBC1N0cmluZ0VudHJ5AggFBnJlc3VsdAJfMgkAuQkCCAUGcmVzdWx0Al8zAgE6CQELU3RyaW5nRW50cnkCCAUGcmVzdWx0Al80CQC5CQIIBQZyZXN1bHQCXzUCAToFDHByb2xvZ0FjdGlvbgkAkQMCCAUGcmVzdWx0Al81BQh3aElkeFJlcwFpAQZmbGlnaHQCB21lc3NhZ2UDc2lnBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBASEBCQDEEwMFB21lc3NhZ2UFA3NpZwUDcHViCQACAQIYc2lnbmF0dXJlIGRvZXMgbm90IG1hdGNoAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBXBhcnRzCQC1CQIJALAJAQUHbWVzc2FnZQIBOwQJZmxpZ2h0TG9nCQC1CQIJAJEDAgUFcGFydHMAAAIBfAQCaHAJALUJAgkAkQMCBQlmbGlnaHRMb2cFCGZsSGVhbHRoAgFfBAVjdXJIUAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmhwAAAEBW5ld0hQCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCaHAAAQQLbmV3TG9jVHhWZXIJALUJAgkAkQMCBQVwYXJ0cwABAgE6BAtuZXdMb2NhdGlvbgkAkQMCBQtuZXdMb2NUeFZlcgAABAR0aW1lCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUJZmxpZ2h0TG9nBQtmbFRpbWVzdGFtcAMDCQBmAgUEdGltZQkAZAIIBQlsYXN0QmxvY2sJdGltZXN0YW1wBRFGSVZFTUlOVVRFU01JTExJUwYJAGYCCQBlAggFCWxhc3RCbG9jawl0aW1lc3RhbXAFEUZJVkVNSU5VVEVTTUlMTElTBQR0aW1lCQACAQISc2lnbmF0dXJlIG91dGRhdGVkBAl0eEZyb21Nc2cJAJEDAgULbmV3TG9jVHhWZXIAAQQGbGFzdFR4CQELdmFsdWVPckVsc2UCCQCiCAEJARFrZXlMYXN0VHhJZEJ5VXNlcgEJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyAgADCQECIT0CBQZsYXN0VHgFCXR4RnJvbU1zZwkAAgEJAKwCAgkArAICCQCsAgICHlR4IGlkcyBkb24ndCBtYXRjaCEgSW4gc3RhdGU6IAUGbGFzdFR4AgosIGluIG1zZzogBQl0eEZyb21Nc2cECHVzZXJBZGRyCQClCAEIBQFpBmNhbGxlcgQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQh1c2VyQWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQJa2V5SGVhbHRoCQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkBAxvbGRGcm9tU3RhdGUJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJa2V5SGVhbHRoAGQDCQECIT0CBQxvbGRGcm9tU3RhdGUFBWN1ckhQCQACAQkArAICCQCsAgIJAKwCAgIKb2xkSGVhbHRoPQkApAMBCQELdmFsdWVPckVsc2UCCQCfCAEFCWtleUhlYWx0aABkAi8gZnJvbSBzdGF0ZSBkb2VzIG5vdCBtYXRjaCBvbmUgZnJvbSBmbGlnaHQgbG9nPQkApAMBBQVjdXJIUAMJAGcCAAAFBWN1ckhQCQACAQIeWW91IGNhbid0IGZseSB3aXRoIHplcm8gaGVhbHRoBAZsb2NLZXkJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAQLY3VyTG9jYXRpb24JAQt2YWx1ZU9yRWxzZQIJAKIIAQUGbG9jS2V5BQ9ERUZBVUxUTE9DQVRJT04DCQAAAgULbmV3TG9jYXRpb24FC2N1ckxvY2F0aW9uCQACAQIiWW91IGNhbid0IGZseSB0byB0aGUgc2FtZSBsb2NhdGlvbgQFYm9udXMDCQBmAgkAkAMBBQlmbGlnaHRMb2cFB2ZsQm9udXMJAJEDAgUJZmxpZ2h0TG9nBQdmbEJvbnVzAgAECnNlbnRBbW91bnQDAwkAZgIFBW5ld0hQAAAJAAACBQVib251cwIBJAcJAQVhc0ludAEJAPwHBAUMcmVzdENvbnRyYWN0Ag1zZW5kVXNkdFByaXplCQDMCAIFCHVzZXJBZGRyBQNuaWwFA25pbAAACQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgUGbG9jS2V5AwkAZgIFBW5ld0hQAAAFC25ld0xvY2F0aW9uBQtjdXJMb2NhdGlvbgkAzAgCCQEMSW50ZWdlckVudHJ5AgUJa2V5SGVhbHRoBQVuZXdIUAkAzAgCBQxwcm9sb2dBY3Rpb24FA25pbAUKc2VudEFtb3VudAFpAQlzZXRIZWFsdGgCBmhlYWx0aAtkdWNrQXNzZXRJZAQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMDCQBmAgAABQZoZWFsdGgGCQBmAgUGaGVhbHRoAGQJAAIBAhpIUCBzaG91bGQgYmUgd2l0aGluIDAuLjEwMAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDWtleUR1Y2tIZWFsdGgBBQtkdWNrQXNzZXRJZAUGaGVhbHRoCQDMCAIFDHByb2xvZ0FjdGlvbgUDbmlsAWkBBGhlYWwCC21lZEtpdExldmVsCHF1YW50aXR5BAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwMJAGYCAAEFC21lZEtpdExldmVsBgkAZgIFC21lZEtpdExldmVsAAMJAAIBAhdNZWRLaXQgbGV2ZWxzIDEuLjMgb25seQMJAGcCAAAFCHF1YW50aXR5CQACAQkArAICAh1RdWFudGl0eSBzaG91bGQgYmUgcG9zaXRpdmUhIAkApAMBBQhxdWFudGl0eQQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBCQClCAEIBQFpBmNhbGxlcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQJa2V5SGVhbHRoCQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkBAlvbGRIZWFsdGgJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJa2V5SGVhbHRoAGQDCQBnAgUJb2xkSGVhbHRoAGQJAAIBAhpIUCBzaG91bGQgYmUgPCAxMDAgdG8gaGVhbAQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkECnByb2R1Y3RJZHgJAGUCBQttZWRLaXRMZXZlbAABBAhwcm9kTGlzdAMJAAACCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QCAAUDbmlsCQC1CQIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAIBXwQMYnBQcm9kQW1vdW50AwkAZgIJAJADAQUIcHJvZExpc3QFCnByb2R1Y3RJZHgJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQhwcm9kTGlzdAUKcHJvZHVjdElkeAAAAwkAZgIFCHF1YW50aXR5BQxicFByb2RBbW91bnQJAAIBCQCsAgIJAKwCAgkArAICAg5Zb3UgaGF2ZSBvbmx5IAkApAMBBQxicFByb2RBbW91bnQCBCBvZiAJAJEDAgUJcHJvZFR5cGVzBQpwcm9kdWN0SWR4CgEMc3VidHJhY3RQcm9kAgNhY2MLaWdub3JlZEl0ZW0EAW4IBQNhY2MCXzIEAXgDCQBmAgkAkAMBBQhwcm9kTGlzdAUBbgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCHByb2RMaXN0BQFuAAAEAXkJAKQDAQMJAAACBQFuBQpwcm9kdWN0SWR4CQBlAgUBeAUIcXVhbnRpdHkFAXgJAJQKAgkAzQgCCAUDYWNjAl8xBQF5CQBkAgUBbgABBAtuZXdQcm9kTGlzdAgKAAIkbAUQcHJvZHVjdGlvbk1hdHJpeAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgUDbmlsAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBDHN1YnRyYWN0UHJvZAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgNTAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUABUAFgAXABgAGQAaABsAHAAdAB4AHwAgACEAIgAjACQAJQAmACcAKAApACoAKwAsAC0ALgAvADAAMQAyAl8xBAluZXdIZWFsdGgJAGQCBQlvbGRIZWFsdGgJAJEDAgUIbWVkS2l0SHAJAGUCBQttZWRLaXRMZXZlbAABCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIFCWtleUhlYWx0aAUJbmV3SGVhbHRoCQDMCAIJAQtTdHJpbmdFbnRyeQIFBWJwS2V5CQC6CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAkAzAgCCQC5CQIFC25ld1Byb2RMaXN0AgFfBQNuaWwCAToJAMwIAgUMcHJvbG9nQWN0aW9uBQNuaWwFCW5ld0hlYWx0aAFpAQZoZWFsRVMABAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIcRXhhY3RseSBvbmUgcGF5bWVudCByZXF1aXJlZAQDcG10CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAADCQECIT0CCAUDcG10B2Fzc2V0SWQFC3VzZHRBc3NldElkCQACAQIaQWxsb3dlZCBVU0RUIHBheW1lbnQgb25seSEEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQkApQgBCAUBaQZjYWxsZXICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQECWtleUhlYWx0aAkBDWtleUR1Y2tIZWFsdGgBBQtkdWNrQXNzZXRJZAQJb2xkSGVhbHRoCQELdmFsdWVPckVsc2UCCQCfCAEFCWtleUhlYWx0aABkAwkAZgIFCW9sZEhlYWx0aAAACQACAQIoSFAgc2hvdWxkIGJlIDAgdG8gY2FsbCBFbWVyZ2VuY3kgU2VydmljZQQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkECHByb2RMaXN0AwkAAAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAIABQNuaWwJALUJAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kAgFfBA1tZWRLaXRBbW91bnQxAwkAZgIJAJADAQUIcHJvZExpc3QAAAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCHByb2RMaXN0AAAAAAQNbWVkS2l0QW1vdW50MgMJAGYCCQCQAwEFCHByb2RMaXN0AAEJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQhwcm9kTGlzdAABAAAEDW1lZEtpdEFtb3VudDMDCQBmAgkAkAMBBQhwcm9kTGlzdAACCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUIcHJvZExpc3QAAgAAAwMDCQBmAgUNbWVkS2l0QW1vdW50MQAABgkAZgIFDW1lZEtpdEFtb3VudDIAAAYJAGYCBQ1tZWRLaXRBbW91bnQzAAAJAAIBAh9Zb3UgaGF2ZSB0byB1c2Ugb3duIE1lZGljYWwgS2l0BAhleGlzdFN0cgkAnQgCBQ9lY29ub215Q29udHJhY3QJAQ5rZXlFc1dhcmVob3VzZQAEDGV4aXN0QW1vdW50cwMJAQlpc0RlZmluZWQBBQhleGlzdFN0cgkAtQkCCQEFdmFsdWUBBQhleGlzdFN0cgIBXwUDbmlsBAtleGlzdEFtb3VudAMJAGYCCQCQAwEFDGV4aXN0QW1vdW50cwAACQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUMZXhpc3RBbW91bnRzAAAAAAMJAGcCAAAFC2V4aXN0QW1vdW50CQACAQI5VGhlcmUgYXJlIG5vIE1lZGljYWwgS2l0cyBMMSBhdCBFbWVyZ2VuY3kgU2VydmljZSBzdG9yYWdlBAluZXdIZWFsdGgJAGQCBQlvbGRIZWFsdGgJAJEDAgUIbWVkS2l0SHAAAAQFbmV3RVMJALkJAgkAzAgCCQCkAwEJAGUCBQtleGlzdEFtb3VudAABCQDRCAIFDGV4aXN0QW1vdW50cwAAAgFfBAZyZWNpcGUJALUJAgkAkQMCBRBwcm9kdWN0aW9uTWF0cml4AAACAV8ECHRvdGFsTWF0CQESZ2V0UmVjaXBlTWF0ZXJpYWxzAQUGcmVjaXBlBAlzZWxsUHJpY2UJAGsDCQBoAgUIdG90YWxNYXQFCkVTU0VMTENPRUYFEFJFU09VUkNFUFJJQ0VNSU4ACgMJAQIhPQIIBQNwbXQGYW1vdW50BQlzZWxsUHJpY2UJAAIBCQCsAgICG1BheW1lbnQgYXR0YWNoZWQgc2hvdWxkIGJlIAkApAMBBQlzZWxsUHJpY2UEBnJlc3VsdAkBCGFzU3RyaW5nAQkA/AcEBQ9lY29ub215Q29udHJhY3QCD3VwZGF0ZUVzU3RvcmFnZQkAzAgCBQVuZXdFUwUDbmlsBQNuaWwJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUJa2V5SGVhbHRoBQluZXdIZWFsdGgJAMwIAgUMcHJvbG9nQWN0aW9uBQNuaWwFBnJlc3VsdAFpAQ51cGRhdGVCYWNrcGFjawILZHVja0Fzc2V0SWQHbmV3UGFjawQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIIBQFpBmNhbGxlcgUPZWNvbm9teUNvbnRyYWN0CQACAQIRcGVybWlzc2lvbiBkZW5pZWQJAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCCQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAUHbmV3UGFjawkAzAgCBQxwcm9sb2dBY3Rpb24FA25pbAUHbmV3UGFjawFpAQhidXlTTGFuZAAEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhxFeGFjdGx5IG9uZSBwYXltZW50IHJlcXVpcmVkBANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAMJAQIhPQIIBQNwbXQHYXNzZXRJZAULdXNkdEFzc2V0SWQJAAIBAhpBbGxvd2VkIFVTRFQgcGF5bWVudCBvbmx5IQMJAQIhPQIIBQNwbXQGYW1vdW50BQdFWFBVU0RUCQACAQkArAICAhtQYXltZW50IGF0dGFjaGVkIHNob3VsZCBiZSAJAKQDAQUHRVhQVVNEVAQGcmVzdWx0CQESZXhwZWRpdGlvbkludGVybmFsAggFAWkGY2FsbGVyCAUBaQ10cmFuc2FjdGlvbklkCQCUCgIJAM0IAgkAzQgCCAUGcmVzdWx0Al8xCQEOU2NyaXB0VHJhbnNmZXIDBQ9lY29ub215Q29udHJhY3QIBQNwbXQGYW1vdW50BQt1c2R0QXNzZXRJZAUMcHJvbG9nQWN0aW9uCAgFBnJlc3VsdAJfMgJfMQFpAQpleHBlZGl0aW9uAgdtZXNzYWdlA3NpZwQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBAZyZXN1bHQJARBleHBlZGl0aW9uQ29tbW9uBQYIBQFpBmNhbGxlcggFAWkNdHJhbnNhY3Rpb25JZAUHbWVzc2FnZQUDc2lnCQCUCgIJAM0IAggFBnJlc3VsdAJfMQUMcHJvbG9nQWN0aW9uCQCUCgIIBQZyZXN1bHQCXzIIBQZyZXN1bHQCXzMBaQEMdXBncmFkZUluZnJhAQtsYW5kQXNzZXRJZAQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBAZyZXN1bHQJAQ11cEluZnJhQ29tbW9uBAYIBQFpBmNhbGxlcgAABQtsYW5kQXNzZXRJZAkAlAoCCQDNCAIIBQZyZXN1bHQCXzEFDHByb2xvZ0FjdGlvbggFBnJlc3VsdAJfMgFpARB1cGdyYWRlSW5mcmFVc2R0AQtsYW5kQXNzZXRJZAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECEVBlcm1pc3Npb24gZGVuaWVkBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIcRXhhY3RseSBvbmUgcGF5bWVudCByZXF1aXJlZAQDcG10CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAADCQECIT0CCAUDcG10B2Fzc2V0SWQFC3VzZHRBc3NldElkCQACAQIaQWxsb3dlZCBVU0RUIHBheW1lbnQgb25seSEEBnJlc3VsdAkBDXVwSW5mcmFDb21tb24EBwgFAWkGY2FsbGVyCAUDcG10BmFtb3VudAULbGFuZEFzc2V0SWQJAJQKAgkAzQgCCQDNCAIIBQZyZXN1bHQCXzEJAQ5TY3JpcHRUcmFuc2ZlcgMFD2Vjb25vbXlDb250cmFjdAgFA3BtdAZhbW91bnQFC3VzZHRBc3NldElkBQxwcm9sb2dBY3Rpb24IBQZyZXN1bHQCXzIBaQEQYWN0aXZhdGVBcnRpZmFjdAIHYXJ0TmFtZQtsYW5kQXNzZXRJZAQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBAZyZXN1bHQEByRtYXRjaDAFB2FydE5hbWUDCQAAAgIHUFJFU0FMRQUHJG1hdGNoMAkBEmFjdGl2YXRlUHJlc2FsZUFydAIJAKUIAQgFAWkGY2FsbGVyBQtsYW5kQXNzZXRJZAkAAgECEFVua25vd24gYXJ0aWZhY3QJAM0IAgUGcmVzdWx0BQxwcm9sb2dBY3Rpb24BaQEKbWVyZ2VMYW5kcwEMbGFuZEFzc2V0SWRzBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBnJlc3VsdAkBC21lcmdlQ29tbW9uBQYJAKUIAQgFAWkGY2FsbGVyAAAFDGxhbmRBc3NldElkcwgFAWkNdHJhbnNhY3Rpb25JZAkAlAoCCQDNCAIIBQZyZXN1bHQCXzEFDHByb2xvZ0FjdGlvbggFBnJlc3VsdAJfMgFpAQ5tZXJnZUxhbmRzVXNkdAEMbGFuZEFzc2V0SWRzBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIcRXhhY3RseSBvbmUgcGF5bWVudCByZXF1aXJlZAQDcG10CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAADCQECIT0CCAUDcG10B2Fzc2V0SWQFC3VzZHRBc3NldElkCQACAQIaQWxsb3dlZCBVU0RUIHBheW1lbnQgb25seSEEBnJlc3VsdAkBC21lcmdlQ29tbW9uBQcJAKUIAQgFAWkGY2FsbGVyCAUDcG10BmFtb3VudAUMbGFuZEFzc2V0SWRzCAUBaQ10cmFuc2FjdGlvbklkCQCUCgIJAM0IAgkAzQgCCAUGcmVzdWx0Al8xCQEOU2NyaXB0VHJhbnNmZXIDBQ9lY29ub215Q29udHJhY3QIBQNwbXQGYW1vdW50BQt1c2R0QXNzZXRJZAUMcHJvbG9nQWN0aW9uCAUGcmVzdWx0Al8yAWkBDWNhcmdvRXhjaGFuZ2UCDGNhcmdvTGlzdFN0cgtsYW5kQXNzZXRJZAQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBApjYXJnb1BhcnRzCQC8CQIFDGNhcmdvTGlzdFN0cgIBOgQEYWRkcgkApQgBCAUBaQxvcmlnaW5DYWxsZXIEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQULbGFuZEFzc2V0SWQEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQULbGFuZEFzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBCQCfCAEFB3RpbWVLZXkJAAIBCQCsAgIIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAQFb3duZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQULbGFuZEFzc2V0SWQJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwkBAiE9AgUFb3duZXIFBGFkZHIJAAIBCQCsAgIFCkxBTkRQUkVGSVgCDSBpcyBub3QgeW91cnMECWxhbmRJbmRleAkAaQIJAQ9udW1QaWVjZXNCeVNpemUBCQCRAwIJALUJAggFBWFzc2V0C2Rlc2NyaXB0aW9uAgFfBQtyZWNMYW5kU2l6ZQUFU1NJWkUECmluZnJhTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAAABAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFBGFkZHICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQEC2N1ckxvY2F0aW9uCQELdmFsdWVPckVsc2UCCQCiCAEJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAUPREVGQVVMVExPQ0FUSU9OBANsb2MJALUJAgkBBXZhbHVlAQULY3VyTG9jYXRpb24CAV8DCQECIT0CCQCRAwIFA2xvYwUKbG9jSWR4VHlwZQIBTAkAAgEJAKwCAgkArAICAhZEdWNrIGxvY2F0aW9uIHR5cGUgaXMgCQCRAwIFA2xvYwUKbG9jSWR4VHlwZQIRLCBidXQgc2hvdWxkIGJlIEwDCQECIT0CCQCRAwIFA2xvYwUIbG9jSWR4SWQFC2xhbmRBc3NldElkCQACAQkArAICAhtEdWNrIHNob3VsZCBiZSBvbiB0aGUgbGFuZCAFC2xhbmRBc3NldElkBAV3aEtleQkBEmtleVdhcmVob3VzZUJ5TGFuZAEFC2xhbmRBc3NldElkBAljdXJyZW50V2gJAQxnZXRXYXJlaG91c2UDBQV3aEtleQUJbGFuZEluZGV4BQppbmZyYUxldmVsBAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQGcmVzdWx0CQEJbW92ZVN0dWZmAwUKY2FyZ29QYXJ0cwUJY3VycmVudFdoBQtjdXJyZW50UGFjawQEbG9mdAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhMT0ZUAgFfBAVsb2Z0TwkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQt2b2xPY2N1cGllZAgFBnJlc3VsdAJfNwQFbG9mdEYJAGUCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAUHdm9sRnJlZQgFBnJlc3VsdAJfNwkAzAgCCQELU3RyaW5nRW50cnkCBQVicEtleQkAugkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAggFBnJlc3VsdAJfNAkAzAgCCAUGcmVzdWx0Al81CQDMCAIIBQZyZXN1bHQCXzYFA25pbAIBOgkAzAgCCQELU3RyaW5nRW50cnkCBQV3aEtleQkAugkCCQDMCAIJAJEDAgUJY3VycmVudFdoBQt3aElkeExldmVscwkAzAgCCAUGcmVzdWx0Al8xCQDMCAIIBQZyZXN1bHQCXzIJAMwIAggFBnJlc3VsdAJfMwkAzAgCCQC5CQIJAMwIAgkAkQMCBQRsb2Z0BQl2b2xMb2NrZWQJAMwIAgkApAMBBQVsb2Z0TwkAzAgCCQCkAwEFBWxvZnRGCQDMCAIJAJEDAgUEbG9mdAUIdm9sVG90YWwFA25pbAIBXwUDbmlsAgE6CQDMCAIFDHByb2xvZ0FjdGlvbgUDbmlsAWkBDXNhdmVXYXJlaG91c2UCBXdoU3RyC2xhbmRBc3NldElkBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AggFAWkGY2FsbGVyBQ9lY29ub215Q29udHJhY3QJAAIBAg1BY2Nlc3MgZGVuaWVkBAV3aEtleQkBEmtleVdhcmVob3VzZUJ5TGFuZAEFC2xhbmRBc3NldElkBAJ3aAkAvAkCBQV3aFN0cgIBOgMJAQIhPQIJAJADAQUCd2gABQkAAgECMHdhcmVob3VzZSBzdHJpbmcgc2hvdWxkIGNvbnRhaW4gNCAnOicgc2VwYXJhdG9ycwQFbG9mdEwJAJEDAgkAtQkCCQCRAwIFAndoBQl3aElkeExPRlQCAV8FCXZvbExvY2tlZAQFbG9mdE8JARdnZXRXYXJlaG91c2VPY2N1cGllZFZvbAEFAndoBAVsb2Z0VAkBF2dldFdhcmVob3VzZVRvdGFsVm9sdW1lAQkAkQMCBQJ3aAULd2hJZHhMZXZlbHMEBWxvZnRGCQBlAgkAZQIFBWxvZnRUCQENcGFyc2VJbnRWYWx1ZQEFBWxvZnRMBQVsb2Z0TwQIbmV3V2hTdHIJALoJAgkAzAgCCQCRAwIFAndoBQt3aElkeExldmVscwkAzAgCCQCRAwIFAndoBQh3aElkeFJlcwkAzAgCCQCRAwIFAndoBQh3aElkeE1hdAkAzAgCCQCRAwIFAndoBQl3aElkeFByb2QJAMwIAgkAuQkCCQDMCAIFBWxvZnRMCQDMCAIJAKQDAQUFbG9mdE8JAMwIAgkApAMBBQVsb2Z0RgkAzAgCCQCkAwEFBWxvZnRUBQNuaWwCAV8FA25pbAIBOgkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIFBXdoS2V5BQhuZXdXaFN0cgkAzAgCBQxwcm9sb2dBY3Rpb24FA25pbAUIbmV3V2hTdHIBaQESZml4V2FyZWhvdXNlRm9ybWF0AQtsYW5kQXNzZXRJZAMJAQIhPQIIBQFpBmNhbGxlcgUMcmVzdENvbnRyYWN0CQACAQINQWNjZXNzIGRlbmllZAQFd2hLZXkJARJrZXlXYXJlaG91c2VCeUxhbmQBBQtsYW5kQXNzZXRJZAQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQtsYW5kQXNzZXRJZAQJbGFuZEluZGV4CQBpAgkBD251bVBpZWNlc0J5U2l6ZQEJAJEDAgkAtQkCCAUFYXNzZXQLZGVzY3JpcHRpb24CAV8FC3JlY0xhbmRTaXplBQVTU0laRQQKaW5mcmFMZXZlbAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEFC2xhbmRBc3NldElkAAAEAndoCQEMZ2V0V2FyZWhvdXNlAwUFd2hLZXkFCWxhbmRJbmRleAUKaW5mcmFMZXZlbAQFbG9mdEwJAQVhc0ludAEJAPwHBAUPZWNvbm9teUNvbnRyYWN0AhpyZWNhbGNMb2NrZWRWb2x1bWVSRUFET05MWQkAzAgCBQtsYW5kQXNzZXRJZAkAzAgCBQJ3aAUDbmlsBQNuaWwEBWxvZnRPCQEXZ2V0V2FyZWhvdXNlT2NjdXBpZWRWb2wBBQJ3aAQFbG9mdFQJARdnZXRXYXJlaG91c2VUb3RhbFZvbHVtZQEJAJEDAgUCd2gFC3doSWR4TGV2ZWxzBAVsb2Z0RgkAZQIJAGUCBQVsb2Z0VAUFbG9mdEwFBWxvZnRPBAhuZXdXaFN0cgkAugkCCQDMCAIJAJEDAgUCd2gFC3doSWR4TGV2ZWxzCQDMCAIJAJEDAgUCd2gFCHdoSWR4UmVzCQDMCAIJAJEDAgUCd2gFCHdoSWR4TWF0CQDMCAIJAJEDAgUCd2gFCXdoSWR4UHJvZAkAzAgCCQC5CQIJAMwIAgkApAMBBQVsb2Z0TAkAzAgCCQCkAwEFBWxvZnRPCQDMCAIJAKQDAQUFbG9mdEYJAMwIAgkApAMBBQVsb2Z0VAUDbmlsAgFfBQNuaWwCAToJAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCBQV3aEtleQUIbmV3V2hTdHIFA25pbAUIbmV3V2hTdHIBaQENc2V0Q3VzdG9tTmFtZQMHYXNzZXRJZApjdXN0b21OYW1lBHR5cGUEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhxFeGFjdGx5IG9uZSBwYXltZW50IHJlcXVpcmVkBANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAMJAQIhPQIIBQNwbXQHYXNzZXRJZAULdXNkdEFzc2V0SWQJAAIBAhpBbGxvd2VkIFVTRFQgcGF5bWVudCBvbmx5IQMJAQIhPQIIBQNwbXQGYW1vdW50BQxSRU5BTUlOR0NPU1QJAAIBCQCsAgICElBheW1lbnQgc2hvdWxkIGJlIAkApAMBBQxSRU5BTUlOR0NPU1QDCQEIY29udGFpbnMCBQpjdXN0b21OYW1lAgJfXwkAAgEJAKwCAgIeTmFtZSBzaG91bGQgbm90IGNvbnRhaW4gJ19fJzogBQpjdXN0b21OYW1lAwkAZgIJALECAQUKY3VzdG9tTmFtZQUKTUFYTkFNRUxFTgkAAgEJAKwCAgIZTmFtZSB0b28gbG9uZywgbWF4TGVuZ3RoPQkApAMBBQpNQVhOQU1FTEVOBARhZGRyCQClCAEIBQFpDG9yaWdpbkNhbGxlcgQHYWN0aW9ucwQHJG1hdGNoMAUEdHlwZQMJAAACAgdBQ0NPVU5UBQckbWF0Y2gwBApyZXZlcnNlS2V5CQEWa2V5Q3VzdG9tTmFtZVRvQWRkcmVzcwEFCmN1c3RvbU5hbWUECW5hbWVPd25lcgkAoggBBQpyZXZlcnNlS2V5AwkBCWlzRGVmaW5lZAEFCW5hbWVPd25lcgkAAgEJAKwCAgIZTmFtZSBhbHJlYWR5IHJlZ2lzdGVyZWQ6IAUKY3VzdG9tTmFtZQQNYWRkclRvTmFtZUtleQkBFmtleUFkZHJlc3NUb0N1c3RvbU5hbWUBBQRhZGRyBAdvbGROYW1lCQCiCAEFDWFkZHJUb05hbWVLZXkEB2ZyZWVPbGQDCQEJaXNEZWZpbmVkAQUHb2xkTmFtZQkAzAgCCQELRGVsZXRlRW50cnkBCQEWa2V5Q3VzdG9tTmFtZVRvQWRkcmVzcwEJAQV2YWx1ZQEFB29sZE5hbWUFA25pbAUDbmlsCQDNCAIJAM0IAgUHZnJlZU9sZAkBC1N0cmluZ0VudHJ5AgUNYWRkclRvTmFtZUtleQUKY3VzdG9tTmFtZQkBC1N0cmluZ0VudHJ5AgUKcmV2ZXJzZUtleQUEYWRkcgMJAAACAgRMQU5EBQckbWF0Y2gwBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFB2Fzc2V0SWQEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQUHYXNzZXRJZAMJAQEhAQkBCWlzRGVmaW5lZAEJAJ8IAQUHdGltZUtleQkAAgEJAKwCAggFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkBAVvd25lcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQdhc3NldElkCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDCBpcyBvcnBoYW5lZAMJAQIhPQIFBW93bmVyBQRhZGRyCQACAQkArAICBQpMQU5EUFJFRklYAg0gaXMgbm90IHlvdXJzBApyZXZlcnNlS2V5CQEaa2V5TGFuZEN1c3RvbU5hbWVUb0Fzc2V0SWQBBQpjdXN0b21OYW1lBAluYW1lT3duZXIJAKIIAQUKcmV2ZXJzZUtleQMJAQlpc0RlZmluZWQBBQluYW1lT3duZXIJAAIBCQCsAgICGU5hbWUgYWxyZWFkeSByZWdpc3RlcmVkOiAFCmN1c3RvbU5hbWUEDmFzc2V0VG9OYW1lS2V5CQEaa2V5TGFuZEFzc2V0SWRUb0N1c3RvbU5hbWUBBQdhc3NldElkBAdvbGROYW1lCQCiCAEFDmFzc2V0VG9OYW1lS2V5BAdmcmVlT2xkAwkBCWlzRGVmaW5lZAEFB29sZE5hbWUJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBGmtleUxhbmRDdXN0b21OYW1lVG9Bc3NldElkAQkBBXZhbHVlAQUHb2xkTmFtZQUDbmlsBQNuaWwJAM0IAgkAzQgCBQdmcmVlT2xkCQELU3RyaW5nRW50cnkCBQ5hc3NldFRvTmFtZUtleQUKY3VzdG9tTmFtZQkBC1N0cmluZ0VudHJ5AgUKcmV2ZXJzZUtleQUHYXNzZXRJZAMJAAACAgREVUNLBQckbWF0Y2gwBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFB2Fzc2V0SWQEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQUHYXNzZXRJZAMDCQEBIQEJAQlpc0RlZmluZWQBCQCfCAEFB3RpbWVLZXkGCQEBIQEJAQlpc0RlZmluZWQBCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFBGFkZHIJAAIBCQCsAgIIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAQFb3duZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEQa2V5RHVja0lkVG9Pd25lcgEFB2Fzc2V0SWQJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwkBAiE9AgUFb3duZXIFBGFkZHIJAAIBCQCsAgIFCkRVQ0tQUkVGSVgCDSBpcyBub3QgeW91cnMECnJldmVyc2VLZXkJARprZXlEdWNrQ3VzdG9tTmFtZVRvQXNzZXRJZAEFCmN1c3RvbU5hbWUECW5hbWVPd25lcgkAoggBBQpyZXZlcnNlS2V5AwkBCWlzRGVmaW5lZAEFCW5hbWVPd25lcgkAAgEJAKwCAgIZTmFtZSBhbHJlYWR5IHJlZ2lzdGVyZWQ6IAUKY3VzdG9tTmFtZQQOYXNzZXRUb05hbWVLZXkJARprZXlEdWNrQXNzZXRJZFRvQ3VzdG9tTmFtZQEFB2Fzc2V0SWQEB29sZE5hbWUJAKIIAQUOYXNzZXRUb05hbWVLZXkEB2ZyZWVPbGQDCQEJaXNEZWZpbmVkAQUHb2xkTmFtZQkAzAgCCQELRGVsZXRlRW50cnkBCQEaa2V5RHVja0N1c3RvbU5hbWVUb0Fzc2V0SWQBCQEFdmFsdWUBBQdvbGROYW1lBQNuaWwFA25pbAkAzQgCCQDNCAIFB2ZyZWVPbGQJAQtTdHJpbmdFbnRyeQIFDmFzc2V0VG9OYW1lS2V5BQpjdXN0b21OYW1lCQELU3RyaW5nRW50cnkCBQpyZXZlcnNlS2V5BQdhc3NldElkCQACAQITVW5rbm93biBlbnRpdHkgdHlwZQkAlAoCCQDNCAIJAM0IAgUHYWN0aW9ucwkBDlNjcmlwdFRyYW5zZmVyAwUPZWNvbm9teUNvbnRyYWN0CAUDcG10BmFtb3VudAULdXNkdEFzc2V0SWQFDHByb2xvZ0FjdGlvbgAAAWkBDHNldFJlZmVycmFscwIJb2xkUGxheWVyCW5ld1BsYXllcgMJAQIhPQIIBQFpD2NhbGxlclB1YmxpY0tleQUDcHViCQACAQIRUGVybWlzc2lvbiBkZW5pZWQEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAMJAQEhAQkBCWlzRGVmaW5lZAEJAKYIAQUJb2xkUGxheWVyCQACAQkArAICAhFJbnZhbGlkIGFkZHJlc3M6IAUJb2xkUGxheWVyAwkBASEBCQEJaXNEZWZpbmVkAQkApggBBQluZXdQbGF5ZXIJAAIBCQCsAgICEUludmFsaWQgYWRkcmVzczogBQluZXdQbGF5ZXIEB29sZHNLZXkJAQlrZXlPbGRpZXMABARvbGRzCQCiCAEFB29sZHNLZXkEBm9sZGllcwMJAQlpc0RlZmluZWQBBQRvbGRzCQC8CQIJAQV2YWx1ZQEFBG9sZHMCAV8FA25pbAMJAQ9jb250YWluc0VsZW1lbnQCBQZvbGRpZXMFCW5ld1BsYXllcgkAAgEJAKwCAgUJbmV3UGxheWVyAiYgaXMgbm90IG5ld2JpZSAoYWxyZWFkeSBoYXMgcmVmZXJyYWxzKQQIcmVmQnlLZXkJAQ9rZXlBZGRyZXNzUmVmQnkBBQluZXdQbGF5ZXIEBXJlZkJ5CQCiCAEFCHJlZkJ5S2V5AwMJAQlpc0RlZmluZWQBBQVyZWZCeQkBCWlzRGVmaW5lZAEJAKYIAQkBBXZhbHVlAQUFcmVmQnkHCQACAQkArAICCQCsAgIFCW5ld1BsYXllcgIUIGFscmVhZHkgaGFzIHJlZkJ5OiAJAQV2YWx1ZQEFBXJlZkJ5BAdyZWZzS2V5CQETa2V5QWRkcmVzc1JlZmVycmFscwEFCW9sZFBsYXllcgQEcmVmcwkAoggBBQdyZWZzS2V5BAlyZWZzQXJyYXkDCQEJaXNEZWZpbmVkAQUEcmVmcwkAvAkCCQEFdmFsdWUBBQRyZWZzAgFfBQNuaWwDCQEPY29udGFpbnNFbGVtZW50AgUJcmVmc0FycmF5BQluZXdQbGF5ZXIJAAIBCQCsAgIJAKwCAgkArAICBQlvbGRQbGF5ZXICEiBhbHJlYWR5IGNvbnRhaW5zIAUJbmV3UGxheWVyAhEgd2l0aGluIHJlZmVycmFscwQHbmV3UmVmcwkAugkCCQDNCAIFCXJlZnNBcnJheQUJbmV3UGxheWVyAgFfBAduZXdPbGRzCQC6CQIJAM0IAgUGb2xkaWVzBQlvbGRQbGF5ZXICAV8JAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCBQhyZWZCeUtleQUJb2xkUGxheWVyCQDMCAIJAQtTdHJpbmdFbnRyeQIFB3JlZnNLZXkFB25ld1JlZnMJAMwIAgkBC1N0cmluZ0VudHJ5AgUHb2xkc0tleQUHbmV3T2xkcwkAzAgCBQxwcm9sb2dBY3Rpb24FA25pbAAAAWkBHHNwbGl0QnlHbG9iYWxXZWlnaHRzUkVBRE9OTFkBBmFtb3VudAkAlAoCBQNuaWwJARJnZXROZWVkZWRNYXRlcmlhbHMBBQZhbW91bnQBaQEkc3BsaXRCeUdsb2JhbEFuZExvY2FsV2VpZ2h0c1JFQURPTkxZAwltYXRBbW91bnQJcmVzQW1vdW50CHRlcnJhaW5zBA10ZXJyYWluQ291bnRzCQENY291bnRUZXJyYWlucwEFCHRlcnJhaW5zCQCUCgIFA25pbAkAlAoCCQESZ2V0TmVlZGVkTWF0ZXJpYWxzAQUJbWF0QW1vdW50CQETZGlzdHJpYnV0ZUJ5V2VpZ2h0cwIFCXJlc0Ftb3VudAUNdGVycmFpbkNvdW50cwFpARNnZXRCYWNrcGFja1JFQURPTkxZAQtkdWNrQXNzZXRJZAkAlAoCBQNuaWwJALkJAgkBC2dldEJhY2twYWNrAQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQCAToBaQEUZ2V0V2FyZWhvdXNlUkVBRE9OTFkBC2xhbmRBc3NldElkBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFC2xhbmRBc3NldElkBAlsYW5kSW5kZXgJAGkCCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCCQC1CQIIBQVhc3NldAtkZXNjcmlwdGlvbgIBXwULcmVjTGFuZFNpemUFBVNTSVpFBAppbmZyYUxldmVsCQELdmFsdWVPckVsc2UCCQCfCAEJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQULbGFuZEFzc2V0SWQAAAkAlAoCBQNuaWwJALoJAgkBDGdldFdhcmVob3VzZQMJARJrZXlXYXJlaG91c2VCeUxhbmQBBQtsYW5kQXNzZXRJZAUJbGFuZEluZGV4BQppbmZyYUxldmVsAgE6AK1oktE=", "height": 2614047, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: EwAf4iHzMFaopRxmMcHubW67YQzWxpHAuhjFjehHoSgA Next: AbdkkurWE4w3L9aAashDwqj8ymv99ipfxZiDgiAgBZ9d Diff:
Old | New | Differences | |
---|---|---|---|
62 | 62 | ||
63 | 63 | let u = "Africa_F_Africa" | |
64 | 64 | ||
65 | - | let v = ["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"] | |
66 | - | ||
67 | - | let w = ["Americas", "Europe", "Asia", "Africa", "Oceania"] | |
68 | - | ||
69 | - | let x = ["1_1_1_2_2_5_1_10_0", "2_2_2_4_4_10_1_10_0", "3_3_3_6_6_15_1_10_0", "2_5_5_2_7_5_2_100_1", "4_10_10_4_14_10_2_100_1", "6_15_15_6_21_15_2_100_1", "1_1_1_1_1_8_1_10_2", "2_2_2_2_2_16_1_10_2", "3_3_3_3_3_24_1_10_2", "9_9_1_5_5_1_5_100_3", "18_18_2_10_10_2_5_100_3", "27_27_3_15_15_3_5_100_3", "2_2_1_2_2_2_1_10_4", "4_4_2_4_4_4_1_10_4", "6_6_3_6_6_6_1_10_4"] | |
70 | - | ||
71 | - | let y = 7 | |
72 | - | ||
73 | - | let z = 0 | |
74 | - | ||
75 | - | let A = 1 | |
76 | - | ||
77 | - | let B = 2 | |
78 | - | ||
79 | - | let C = 3 | |
80 | - | ||
81 | - | let D = 0 | |
82 | - | ||
83 | - | let E = 1 | |
84 | - | ||
85 | - | let F = 2 | |
86 | - | ||
87 | - | let G = 3 | |
88 | - | ||
89 | - | let H = 4 | |
90 | - | ||
91 | - | let I = 0 | |
92 | - | ||
93 | - | let J = 1 | |
94 | - | ||
95 | - | let K = 2 | |
96 | - | ||
97 | - | let L = 3 | |
98 | - | ||
99 | - | let M = 0 | |
100 | - | ||
101 | - | let N = 1 | |
102 | - | ||
103 | - | let O = 2 | |
104 | - | ||
105 | - | let P = 3 | |
106 | - | ||
107 | - | func Q (R) = parseIntValue(split(x[R], "_")[y]) | |
108 | - | ||
109 | - | ||
110 | - | func S (T,U) = valueOrErrorMessage(getString(T, U), makeString(["mandatory ", toString(T), ".", U, " is not defined"], "")) | |
111 | - | ||
112 | - | ||
113 | - | let V = 2 | |
114 | - | ||
115 | - | let W = 3 | |
116 | - | ||
117 | - | func X () = "%s__restConfig" | |
118 | - | ||
119 | - | ||
120 | - | func Y () = "%s__restAddr" | |
121 | - | ||
122 | - | ||
123 | - | func Z (aa) = split_4C(S(aa, X()), f) | |
124 | - | ||
125 | - | ||
126 | - | func ab (ac,ad) = valueOrErrorMessage(addressFromString(ac[ad]), ("Rest cfg doesn't contain address at index " + toString(ad))) | |
127 | - | ||
128 | - | ||
129 | - | let ae = addressFromStringValue(valueOrElse(getString(this, Y()), d)) | |
130 | - | ||
131 | - | let ac = Z(ae) | |
132 | - | ||
133 | - | let af = ab(ac, V) | |
134 | - | ||
135 | - | let ag = ab(ac, W) | |
136 | - | ||
137 | - | func ah (ai) = ("lastTxIdByUser_" + ai) | |
138 | - | ||
139 | - | ||
140 | - | func aj (ak) = ("nftOwner_" + ak) | |
141 | - | ||
142 | - | ||
143 | - | func al (ak) = ("landCustomNameByAssetId_" + ak) | |
144 | - | ||
145 | - | ||
146 | - | func am (ak) = ("stakedTime_" + ak) | |
147 | - | ||
148 | - | ||
149 | - | func an (ak) = ("infraLevel_" + ak) | |
150 | - | ||
151 | - | ||
152 | - | func ao (ap,ak) = makeString(["landArtStatus", ap, ak], "_") | |
153 | - | ||
154 | - | ||
155 | - | func aq (ar,ak,as) = ((((("stakedTimeByTypeAssetIdAndOwner_" + ar) + "_") + ak) + "_") + as) | |
156 | - | ||
157 | - | ||
158 | - | func at (au) = ("wareHouse_" + au) | |
159 | - | ||
160 | - | ||
161 | - | func av (as) = ("stakedLandsByOwner_" + as) | |
162 | - | ||
163 | - | ||
164 | - | func aw (ak) = ("duckCustomNameByAssetId_" + ak) | |
165 | - | ||
166 | - | ||
167 | - | func ax (ai) = ("accountCustomNameByAddr_" + ai) | |
168 | - | ||
169 | - | ||
170 | - | func ay (ai) = ("accRefBy_" + ai) | |
171 | - | ||
172 | - | ||
173 | - | func az (ai) = ("accReferrals_" + ai) | |
174 | - | ||
175 | - | ||
176 | - | func aA (ak) = ("duckOwner_" + ak) | |
177 | - | ||
178 | - | ||
179 | - | func aB (as) = ("stakedDuckByOwner_" + as) | |
180 | - | ||
181 | - | ||
182 | - | func aC (aD) = ("backPack_" + aD) | |
183 | - | ||
184 | - | ||
185 | - | func aE (aD) = ("duckLocation_" + aD) | |
186 | - | ||
187 | - | ||
188 | - | func aF (aD) = ("duckHealth_" + aD) | |
189 | - | ||
190 | - | ||
191 | - | func aG () = "resTypesProportions" | |
192 | - | ||
193 | - | ||
194 | - | func aH () = "contractsBlocked" | |
195 | - | ||
196 | - | ||
197 | - | func aI (aJ) = ("%s%s__userGwlReleaseTime__" + aJ) | |
198 | - | ||
199 | - | ||
200 | - | let aK = 1 | |
201 | - | ||
202 | - | let aL = 2 | |
203 | - | ||
204 | - | func aM (aN) = { | |
205 | - | let c = aN | |
65 | + | let v = 39637 | |
66 | + | ||
67 | + | let w = 10 | |
68 | + | ||
69 | + | let x = ["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"] | |
70 | + | ||
71 | + | let y = ["Americas", "Europe", "Asia", "Africa", "Oceania"] | |
72 | + | ||
73 | + | let z = ["1_1_1_2_2_5_1_10_0", "2_2_2_4_4_10_1_10_0", "3_3_3_6_6_15_1_10_0", "2_5_5_2_7_5_2_100_1", "4_10_10_4_14_10_2_100_1", "6_15_15_6_21_15_2_100_1", "1_1_1_1_1_8_1_10_2", "2_2_2_2_2_16_1_10_2", "3_3_3_3_3_24_1_10_2", "9_9_1_5_5_1_5_100_3", "18_18_2_10_10_2_5_100_3", "27_27_3_15_15_3_5_100_3", "2_2_1_2_2_2_1_10_4", "4_4_2_4_4_4_1_10_4", "6_6_3_6_6_6_1_10_4"] | |
74 | + | ||
75 | + | let A = 7 | |
76 | + | ||
77 | + | let B = 0 | |
78 | + | ||
79 | + | let C = 1 | |
80 | + | ||
81 | + | let D = 2 | |
82 | + | ||
83 | + | let E = 3 | |
84 | + | ||
85 | + | let F = 0 | |
86 | + | ||
87 | + | let G = 1 | |
88 | + | ||
89 | + | let H = 2 | |
90 | + | ||
91 | + | let I = 3 | |
92 | + | ||
93 | + | let J = 4 | |
94 | + | ||
95 | + | let K = 0 | |
96 | + | ||
97 | + | let L = 1 | |
98 | + | ||
99 | + | let M = 2 | |
100 | + | ||
101 | + | let N = 3 | |
102 | + | ||
103 | + | let O = 0 | |
104 | + | ||
105 | + | let P = 1 | |
106 | + | ||
107 | + | let Q = 2 | |
108 | + | ||
109 | + | let R = 3 | |
110 | + | ||
111 | + | func S (T) = parseIntValue(split(z[T], "_")[A]) | |
112 | + | ||
113 | + | ||
114 | + | func U (V,W) = valueOrErrorMessage(getString(V, W), makeString(["mandatory ", toString(V), ".", W, " is not defined"], "")) | |
115 | + | ||
116 | + | ||
117 | + | let X = 2 | |
118 | + | ||
119 | + | let Y = 3 | |
120 | + | ||
121 | + | func Z () = "%s__restConfig" | |
122 | + | ||
123 | + | ||
124 | + | func aa () = "%s__restAddr" | |
125 | + | ||
126 | + | ||
127 | + | func ab (ac) = split_4C(U(ac, Z()), f) | |
128 | + | ||
129 | + | ||
130 | + | func ad (ae,af) = valueOrErrorMessage(addressFromString(ae[af]), ("Rest cfg doesn't contain address at index " + toString(af))) | |
131 | + | ||
132 | + | ||
133 | + | let ag = addressFromStringValue(valueOrElse(getString(this, aa()), d)) | |
134 | + | ||
135 | + | let ae = ab(ag) | |
136 | + | ||
137 | + | let ah = ad(ae, X) | |
138 | + | ||
139 | + | let ai = ad(ae, Y) | |
140 | + | ||
141 | + | func aj (ak) = ("lastTxIdByUser_" + ak) | |
142 | + | ||
143 | + | ||
144 | + | func al (am) = ("nftOwner_" + am) | |
145 | + | ||
146 | + | ||
147 | + | func an (am) = ("landCustomNameByAssetId_" + am) | |
148 | + | ||
149 | + | ||
150 | + | func ao (am) = ("stakedTime_" + am) | |
151 | + | ||
152 | + | ||
153 | + | func ap (am) = ("infraLevel_" + am) | |
154 | + | ||
155 | + | ||
156 | + | func aq (ar,am) = makeString(["landArtStatus", ar, am], "_") | |
157 | + | ||
158 | + | ||
159 | + | func as (at,am,au) = ((((("stakedTimeByTypeAssetIdAndOwner_" + at) + "_") + am) + "_") + au) | |
160 | + | ||
161 | + | ||
162 | + | func av (aw) = ("wareHouse_" + aw) | |
163 | + | ||
164 | + | ||
165 | + | func ax (au) = ("stakedLandsByOwner_" + au) | |
166 | + | ||
167 | + | ||
168 | + | func ay (am) = ("duckCustomNameByAssetId_" + am) | |
169 | + | ||
170 | + | ||
171 | + | func az (ak) = ("accountCustomNameByAddr_" + ak) | |
172 | + | ||
173 | + | ||
174 | + | func aA (ak) = ("accRefBy_" + ak) | |
175 | + | ||
176 | + | ||
177 | + | func aB (ak) = ("accReferrals_" + ak) | |
178 | + | ||
179 | + | ||
180 | + | func aC (am) = ("duckOwner_" + am) | |
181 | + | ||
182 | + | ||
183 | + | func aD (au) = ("stakedDuckByOwner_" + au) | |
184 | + | ||
185 | + | ||
186 | + | func aE (aF) = ("backPack_" + aF) | |
187 | + | ||
188 | + | ||
189 | + | func aG (aF) = ("duckLocation_" + aF) | |
190 | + | ||
191 | + | ||
192 | + | func aH (aF) = ("duckHealth_" + aF) | |
193 | + | ||
194 | + | ||
195 | + | func aI () = "resTypesProportions" | |
196 | + | ||
197 | + | ||
198 | + | func aJ () = "contractsBlocked" | |
199 | + | ||
200 | + | ||
201 | + | func aK (aL) = ("%s%s__userGwlReleaseTime__" + aL) | |
202 | + | ||
203 | + | ||
204 | + | func aM () = "emergencyWarehouseProducts" | |
205 | + | ||
206 | + | ||
207 | + | let aN = 1 | |
208 | + | ||
209 | + | let aO = 2 | |
210 | + | ||
211 | + | func aP (aQ) = { | |
212 | + | let c = aQ | |
213 | + | if ($isInstanceOf(c, "String")) | |
214 | + | then { | |
215 | + | let aR = c | |
216 | + | aR | |
217 | + | } | |
218 | + | else throw("fail to cast into String") | |
219 | + | } | |
220 | + | ||
221 | + | ||
222 | + | func aS (aQ) = { | |
223 | + | let c = aQ | |
206 | 224 | if ($isInstanceOf(c, "Int")) | |
207 | 225 | then { | |
208 | - | let | |
209 | - | | |
226 | + | let aT = c | |
227 | + | aT | |
210 | 228 | } | |
211 | 229 | else throw("fail to cast into Int") | |
212 | 230 | } | |
213 | 231 | ||
214 | 232 | ||
215 | - | func | |
216 | - | let c = | |
233 | + | func aU (aV) = { | |
234 | + | let c = aV | |
217 | 235 | if (("S" == c)) | |
218 | 236 | then m | |
219 | 237 | else if (("M" == c)) | |
228 | 246 | } | |
229 | 247 | ||
230 | 248 | ||
231 | - | let aR = { | |
249 | + | func aW (aX) = { | |
250 | + | func aY (aZ,ba) = (aZ + parseIntValue(aX[ba])) | |
251 | + | ||
252 | + | let bb = [0, 1, 2, 3, 4, 5] | |
253 | + | let bc = size(bb) | |
254 | + | let bd = 0 | |
255 | + | func be (bf,bg) = if ((bg >= bc)) | |
256 | + | then bf | |
257 | + | else aY(bf, bb[bg]) | |
258 | + | ||
259 | + | func bh (bf,bg) = if ((bg >= bc)) | |
260 | + | then bf | |
261 | + | else throw("List size exceeds 6") | |
262 | + | ||
263 | + | bh(be(be(be(be(be(be(bd, 0), 1), 2), 3), 4), 5), 6) | |
264 | + | } | |
265 | + | ||
266 | + | ||
267 | + | let bi = { | |
232 | 268 | let c = a | |
233 | 269 | if ((base58'2W' == c)) | |
234 | 270 | then addressFromStringValue("3PEktVux2RhchSN63DsDo4b4mz4QqzKSeDv") | |
237 | 273 | else throw("Unknown chain") | |
238 | 274 | } | |
239 | 275 | ||
240 | - | let | |
276 | + | let bj = { | |
241 | 277 | let c = a | |
242 | 278 | if ((base58'2W' == c)) | |
243 | 279 | then addressFromStringValue("3PDVuU45H7Eh5dmtNbnRNRStGwULA7NY6Hb") | |
246 | 282 | else throw("Unknown chain") | |
247 | 283 | } | |
248 | 284 | ||
249 | - | let | |
250 | - | ||
251 | - | let | |
252 | - | ||
253 | - | let | |
254 | - | ||
255 | - | let | |
256 | - | ||
257 | - | let | |
258 | - | ||
259 | - | let | |
260 | - | ||
261 | - | let | |
285 | + | let bk = base58'6LfPuKJjLgekmncBhMg2LZyMTNVzZBccXR28ySXm9uXD' | |
286 | + | ||
287 | + | let bl = [30, 60, 120] | |
288 | + | ||
289 | + | let bm = 300000 | |
290 | + | ||
291 | + | let bn = 5000000 | |
292 | + | ||
293 | + | let bo = 50 | |
294 | + | ||
295 | + | let bp = 10000000 | |
296 | + | ||
297 | + | let bq = { | |
262 | 298 | let c = a | |
263 | 299 | if ((base58'2W' == c)) | |
264 | 300 | then 252289527462 | |
267 | 303 | else throw("Unknown chain") | |
268 | 304 | } | |
269 | 305 | ||
270 | - | let | |
306 | + | let br = { | |
271 | 307 | let c = a | |
272 | 308 | if ((base58'2W' == c)) | |
273 | 309 | then 250000000 | |
276 | 312 | else throw("Unknown chain") | |
277 | 313 | } | |
278 | 314 | ||
279 | - | let | |
280 | - | ||
281 | - | let | |
282 | - | ||
283 | - | let | |
284 | - | ||
285 | - | let | |
286 | - | ||
287 | - | let | |
288 | - | ||
289 | - | let | |
290 | - | ||
291 | - | let | |
292 | - | ||
293 | - | func | |
294 | - | ||
295 | - | ||
296 | - | func | |
297 | - | ||
298 | - | ||
299 | - | func | |
300 | - | ||
301 | - | ||
302 | - | func | |
303 | - | ||
304 | - | ||
305 | - | func | |
306 | - | ||
307 | - | ||
308 | - | func | |
309 | - | ||
310 | - | ||
311 | - | func | |
312 | - | ||
313 | - | ||
314 | - | func | |
315 | - | ||
316 | - | ||
317 | - | func | |
318 | - | ||
319 | - | ||
320 | - | let | |
321 | - | ||
322 | - | let | |
323 | - | ||
324 | - | let | |
325 | - | ||
326 | - | let | |
327 | - | ||
328 | - | let | |
329 | - | ||
330 | - | let | |
331 | - | ||
332 | - | func | |
333 | - | ||
334 | - | ||
335 | - | func | |
336 | - | let | |
337 | - | if ((0 >= | |
315 | + | let bs = toBigInt(5) | |
316 | + | ||
317 | + | let bt = toBigInt(20) | |
318 | + | ||
319 | + | let bu = toBigInt((20 * 20)) | |
320 | + | ||
321 | + | let bv = toBigInt(((20 * 20) * 20)) | |
322 | + | ||
323 | + | let bw = toBigInt((((20 * 20) * 20) * 20)) | |
324 | + | ||
325 | + | let bx = toBigInt(((((20 * 20) * 20) * 20) * 20)) | |
326 | + | ||
327 | + | let by = 500 | |
328 | + | ||
329 | + | func bz () = "nextLandNum" | |
330 | + | ||
331 | + | ||
332 | + | func bA (bB) = ("landToAsset_" + bB) | |
333 | + | ||
334 | + | ||
335 | + | func bC (bD) = ("landByCustomName_" + bD) | |
336 | + | ||
337 | + | ||
338 | + | func bE (am,au) = ((("infraLevelByAssetIdAndOwner_" + am) + "_") + au) | |
339 | + | ||
340 | + | ||
341 | + | func bF (ar,am,au) = makeString(["landArtStatusByTypeAssetIdAndOwner", ar, am, au], "_") | |
342 | + | ||
343 | + | ||
344 | + | func bG (bB) = ("landOwner_" + bB) | |
345 | + | ||
346 | + | ||
347 | + | func bH (bD) = ("duckByCustomName_" + bD) | |
348 | + | ||
349 | + | ||
350 | + | func bI (bD) = ("accountByCustomName_" + bD) | |
351 | + | ||
352 | + | ||
353 | + | func bJ () = "oldiesList" | |
354 | + | ||
355 | + | ||
356 | + | let bK = 0 | |
357 | + | ||
358 | + | let bL = 1 | |
359 | + | ||
360 | + | let bM = 2 | |
361 | + | ||
362 | + | let bN = 0 | |
363 | + | ||
364 | + | let bO = 5 | |
365 | + | ||
366 | + | let bP = 6 | |
367 | + | ||
368 | + | func bQ (bB,aV) = ((i + bB) + aV) | |
369 | + | ||
370 | + | ||
371 | + | func bR (bS,bT) = { | |
372 | + | let bU = (((((bT[0] + bT[1]) + bT[2]) + bT[3]) + bT[4]) + bT[5]) | |
373 | + | if ((0 >= bU)) | |
338 | 374 | then throw("Zero weights sum") | |
339 | 375 | else { | |
340 | - | let | |
341 | - | func | |
342 | - | ||
343 | - | let | |
344 | - | let | |
345 | - | let | |
346 | - | func | |
347 | - | then | |
348 | - | else | |
349 | - | ||
350 | - | func | |
351 | - | then | |
376 | + | let bV = fraction(bS, g, bU) | |
377 | + | func bW (bX,bY) = (bX :+ fraction(bY, bV, g)) | |
378 | + | ||
379 | + | let bb = bT | |
380 | + | let bc = size(bb) | |
381 | + | let bd = nil | |
382 | + | func be (bf,bg) = if ((bg >= bc)) | |
383 | + | then bf | |
384 | + | else bW(bf, bb[bg]) | |
385 | + | ||
386 | + | func bh (bf,bg) = if ((bg >= bc)) | |
387 | + | then bf | |
352 | 388 | else throw("List size exceeds 6") | |
353 | 389 | ||
354 | - | | |
355 | - | } | |
356 | - | } | |
357 | - | ||
358 | - | ||
359 | - | func | |
360 | - | let | |
361 | - | if ((size( | |
390 | + | bh(be(be(be(be(be(be(bd, 0), 1), 2), 3), 4), 5), 6) | |
391 | + | } | |
392 | + | } | |
393 | + | ||
394 | + | ||
395 | + | func bZ (bS) = { | |
396 | + | let ca = split(value(getString(aI())), "_") | |
397 | + | if ((size(ca) != l)) | |
362 | 398 | then throw("Wrong proportions data") | |
363 | 399 | else { | |
364 | - | let | |
365 | - | | |
366 | - | } | |
367 | - | } | |
368 | - | ||
369 | - | ||
370 | - | func | |
371 | - | let | |
372 | - | func | |
373 | - | let | |
374 | - | if ((0 > | |
375 | - | then throw(((((("Not enough material idx=" + toString( | |
376 | - | else ( | |
400 | + | let cb = [parseIntValue(ca[0]), parseIntValue(ca[1]), parseIntValue(ca[2]), parseIntValue(ca[3]), parseIntValue(ca[4]), parseIntValue(ca[5])] | |
401 | + | bR(bS, cb) | |
402 | + | } | |
403 | + | } | |
404 | + | ||
405 | + | ||
406 | + | func cc (cd,ce,cf) = { | |
407 | + | let cg = bZ(cf) | |
408 | + | func ch (bX,af) = { | |
409 | + | let ci = (parseIntValue(ce[af]) - cg[af]) | |
410 | + | if ((0 > ci)) | |
411 | + | then throw(((((("Not enough material idx=" + toString(af)) + ", you have ") + ce[af]) + ", but need ") + toString(cg[af]))) | |
412 | + | else (bX :+ toString(ci)) | |
377 | 413 | } | |
378 | 414 | ||
379 | - | if ( | |
415 | + | if (cd) | |
380 | 416 | then { | |
381 | - | let | |
382 | - | let | |
383 | - | let | |
384 | - | func | |
385 | - | then | |
386 | - | else | |
387 | - | ||
388 | - | func | |
389 | - | then | |
417 | + | let bb = [0, 1, 2, 3, 4, 5] | |
418 | + | let bc = size(bb) | |
419 | + | let bd = nil | |
420 | + | func be (bf,bg) = if ((bg >= bc)) | |
421 | + | then bf | |
422 | + | else ch(bf, bb[bg]) | |
423 | + | ||
424 | + | func bh (bf,bg) = if ((bg >= bc)) | |
425 | + | then bf | |
390 | 426 | else throw("List size exceeds 6") | |
391 | 427 | ||
392 | - | | |
393 | - | } | |
394 | - | else | |
395 | - | } | |
396 | - | ||
397 | - | ||
398 | - | func | |
428 | + | bh(be(be(be(be(be(be(bd, 0), 1), 2), 3), 4), 5), 6) | |
429 | + | } | |
430 | + | else ce | |
431 | + | } | |
432 | + | ||
433 | + | ||
434 | + | func cj (ck,cl,cm,cn) = if ((size(ck) != l)) | |
399 | 435 | then throw("Wrong proportions data") | |
400 | 436 | else { | |
401 | - | func | |
402 | - | let | |
403 | - | if ((0 > | |
404 | - | then throw(((((((("Panic! Pieces of type=" + toString( | |
405 | - | else ( | |
406 | - | } | |
407 | - | ||
408 | - | let | |
409 | - | let | |
410 | - | let | |
411 | - | let | |
412 | - | func | |
413 | - | then | |
414 | - | else | |
415 | - | ||
416 | - | func | |
417 | - | then | |
437 | + | func co (bX,cp) = { | |
438 | + | let ci = (parseIntValue(ck[cp]) + ((cn * cl[cp]) * cm)) | |
439 | + | if ((0 > ci)) | |
440 | + | then throw(((((((("Panic! Pieces of type=" + toString(cp)) + ", sign=") + toString(cn)) + ", terrainCounts[i]=") + toString(cl[cp])) + ", landSizeIndex=") + toString(cm))) | |
441 | + | else (bX :+ toString(ci)) | |
442 | + | } | |
443 | + | ||
444 | + | let cb = { | |
445 | + | let bb = [0, 1, 2, 3, 4, 5] | |
446 | + | let bc = size(bb) | |
447 | + | let bd = nil | |
448 | + | func be (bf,bg) = if ((bg >= bc)) | |
449 | + | then bf | |
450 | + | else co(bf, bb[bg]) | |
451 | + | ||
452 | + | func bh (bf,bg) = if ((bg >= bc)) | |
453 | + | then bf | |
418 | 454 | else throw("List size exceeds 6") | |
419 | 455 | ||
420 | - | | |
421 | - | } | |
422 | - | makeString( | |
456 | + | bh(be(be(be(be(be(be(bd, 0), 1), 2), 3), 4), 5), 6) | |
457 | + | } | |
458 | + | makeString(cb, "_") | |
423 | 459 | } | |
424 | 460 | ||
425 | 461 | ||
426 | - | func | |
427 | - | let | |
428 | - | | |
429 | - | } | |
430 | - | ||
431 | - | ||
432 | - | func | |
433 | - | ||
434 | - | ||
435 | - | func | |
436 | - | func | |
437 | - | let | |
438 | - | ( | |
462 | + | func cq (cl,cm,cn) = { | |
463 | + | let ck = split(valueOrElse(getString(aI()), "0_0_0_0_0_0"), "_") | |
464 | + | cj(ck, cl, cm, cn) | |
465 | + | } | |
466 | + | ||
467 | + | ||
468 | + | func cr (cs) = [(size(split(cs, "A")) - 1), (size(split(cs, "B")) - 1), (size(split(cs, "C")) - 1), (size(split(cs, "D")) - 1), (size(split(cs, "E")) - 1), (size(split(cs, "F")) - 1)] | |
469 | + | ||
470 | + | ||
471 | + | func ct (cu,cl,cv,cm,cw) = { | |
472 | + | func cx (bX,cp) = { | |
473 | + | let cy = ((fraction(cv, cw, s) * cl[cp]) * cm) | |
474 | + | (bX :+ toString((parseIntValue(cu[cp]) + cy))) | |
439 | 475 | } | |
440 | 476 | ||
441 | - | let | |
442 | - | let | |
443 | - | let | |
444 | - | let | |
445 | - | func | |
446 | - | then | |
447 | - | else | |
448 | - | ||
449 | - | func | |
450 | - | then | |
477 | + | let cb = { | |
478 | + | let bb = [0, 1, 2, 3, 4, 5] | |
479 | + | let bc = size(bb) | |
480 | + | let bd = nil | |
481 | + | func be (bf,bg) = if ((bg >= bc)) | |
482 | + | then bf | |
483 | + | else cx(bf, bb[bg]) | |
484 | + | ||
485 | + | func bh (bf,bg) = if ((bg >= bc)) | |
486 | + | then bf | |
451 | 487 | else throw("List size exceeds 6") | |
452 | 488 | ||
453 | - | | |
489 | + | bh(be(be(be(be(be(be(bd, 0), 1), 2), 3), 4), 5), 6) | |
454 | 490 | } | |
455 | - | makeString( | |
456 | - | } | |
457 | - | ||
458 | - | ||
459 | - | func | |
460 | - | func | |
461 | - | let | |
462 | - | $Tuple2(( | |
491 | + | makeString(cb, "_") | |
492 | + | } | |
493 | + | ||
494 | + | ||
495 | + | func cz (cl,cv,cm,cw) = { | |
496 | + | func cx (bX,cp) = { | |
497 | + | let cy = ((fraction(cv, cw, s) * cl[cp]) * cm) | |
498 | + | $Tuple2((bX._1 :+ cy), (bX._2 + cy)) | |
463 | 499 | } | |
464 | 500 | ||
465 | - | let | |
466 | - | let | |
467 | - | let | |
468 | - | func | |
469 | - | then | |
470 | - | else | |
471 | - | ||
472 | - | func | |
473 | - | then | |
501 | + | let bb = [0, 1, 2, 3, 4, 5] | |
502 | + | let bc = size(bb) | |
503 | + | let bd = $Tuple2(nil, 0) | |
504 | + | func be (bf,bg) = if ((bg >= bc)) | |
505 | + | then bf | |
506 | + | else cx(bf, bb[bg]) | |
507 | + | ||
508 | + | func bh (bf,bg) = if ((bg >= bc)) | |
509 | + | then bf | |
474 | 510 | else throw("List size exceeds 6") | |
475 | 511 | ||
476 | - | | |
477 | - | } | |
478 | - | ||
479 | - | ||
480 | - | func | |
481 | - | let | |
482 | - | let | |
483 | - | if (( | |
484 | - | then $Tuple2(makeString( | |
485 | - | else if (( | |
512 | + | bh(be(be(be(be(be(be(bd, 0), 1), 2), 3), 4), 5), 6) | |
513 | + | } | |
514 | + | ||
515 | + | ||
516 | + | func cA (cB,cC,cD,cE) = { | |
517 | + | let cF = cD._1 | |
518 | + | let cG = cD._2 | |
519 | + | if ((cG == 0)) | |
520 | + | then $Tuple2(makeString(cB, "_"), makeString(cC, "_")) | |
521 | + | else if ((cE >= cG)) | |
486 | 522 | then { | |
487 | - | func | |
488 | - | ||
489 | - | let | |
490 | - | let | |
491 | - | let | |
492 | - | let | |
493 | - | func | |
494 | - | then | |
495 | - | else | |
496 | - | ||
497 | - | func | |
498 | - | then | |
523 | + | func cH (bX,cp) = (bX :+ toString((parseIntValue(cB[cp]) + cF[cp]))) | |
524 | + | ||
525 | + | let cb = { | |
526 | + | let bb = [0, 1, 2, 3, 4, 5] | |
527 | + | let bc = size(bb) | |
528 | + | let bd = nil | |
529 | + | func be (bf,bg) = if ((bg >= bc)) | |
530 | + | then bf | |
531 | + | else cH(bf, bb[bg]) | |
532 | + | ||
533 | + | func bh (bf,bg) = if ((bg >= bc)) | |
534 | + | then bf | |
499 | 535 | else throw("List size exceeds 6") | |
500 | 536 | ||
501 | - | | |
537 | + | bh(be(be(be(be(be(be(bd, 0), 1), 2), 3), 4), 5), 6) | |
502 | 538 | } | |
503 | - | $Tuple2(makeString( | |
539 | + | $Tuple2(makeString(cb, "_"), makeString(cC, "_")) | |
504 | 540 | } | |
505 | 541 | else { | |
506 | - | func | |
507 | - | let | |
508 | - | $Tuple2(( | |
542 | + | func cI (bX,cp) = { | |
543 | + | let cJ = fraction(cF[cp], cE, cG) | |
544 | + | $Tuple2((bX._1 :+ toString((parseIntValue(cB[cp]) + cJ))), (bX._2 :+ toString(((parseIntValue(cC[cp]) + cF[cp]) - cJ)))) | |
509 | 545 | } | |
510 | 546 | ||
511 | - | let | |
512 | - | let | |
513 | - | let | |
514 | - | let | |
515 | - | func | |
516 | - | then | |
517 | - | else | |
518 | - | ||
519 | - | func | |
520 | - | then | |
547 | + | let cb = { | |
548 | + | let bb = [0, 1, 2, 3, 4, 5] | |
549 | + | let bc = size(bb) | |
550 | + | let bd = $Tuple2(nil, nil) | |
551 | + | func be (bf,bg) = if ((bg >= bc)) | |
552 | + | then bf | |
553 | + | else cI(bf, bb[bg]) | |
554 | + | ||
555 | + | func bh (bf,bg) = if ((bg >= bc)) | |
556 | + | then bf | |
521 | 557 | else throw("List size exceeds 6") | |
522 | 558 | ||
523 | - | | |
559 | + | bh(be(be(be(be(be(be(bd, 0), 1), 2), 3), 4), 5), 6) | |
524 | 560 | } | |
525 | - | $Tuple2(makeString( | |
561 | + | $Tuple2(makeString(cb._1, "_"), makeString(cb._2, "_")) | |
526 | 562 | } | |
527 | 563 | } | |
528 | 564 | ||
529 | 565 | ||
530 | - | func | |
531 | - | then | |
532 | - | else -( | |
533 | - | ||
534 | - | ||
535 | - | let | |
536 | - | ||
537 | - | func | |
538 | - | let | |
539 | - | let | |
566 | + | func cK (cL) = if ((cL >= toBigInt(0))) | |
567 | + | then cL | |
568 | + | else -(cL) | |
569 | + | ||
570 | + | ||
571 | + | let cM = [[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]] | |
572 | + | ||
573 | + | func cN (aT,cO) = { | |
574 | + | let cP = toInt((aT % bt)) | |
575 | + | let cQ = if ((cO[0] > cP)) | |
540 | 576 | then "A" | |
541 | - | else if (( | |
577 | + | else if ((cO[1] > cP)) | |
542 | 578 | then "B" | |
543 | - | else if (( | |
579 | + | else if ((cO[2] > cP)) | |
544 | 580 | then "C" | |
545 | - | else if (( | |
581 | + | else if ((cO[3] > cP)) | |
546 | 582 | then "D" | |
547 | - | else if (( | |
583 | + | else if ((cO[4] > cP)) | |
548 | 584 | then "E" | |
549 | 585 | else "F" | |
550 | - | | |
551 | - | } | |
552 | - | ||
553 | - | ||
554 | - | func | |
555 | - | let | |
556 | - | func | |
557 | - | ||
558 | - | let | |
559 | - | let | |
560 | - | let | |
561 | - | let | |
562 | - | func | |
563 | - | then | |
564 | - | else | |
565 | - | ||
566 | - | func | |
567 | - | then | |
586 | + | cQ | |
587 | + | } | |
588 | + | ||
589 | + | ||
590 | + | func cR (cS,cT) = { | |
591 | + | let cU = cM[cT] | |
592 | + | func cV (bX,bY) = $Tuple2((((((bX._1 + cN(bX._2, cU)) + cN((bX._2 / bt), cU)) + cN((bX._2 / bu), cU)) + cN((bX._2 / bv), cU)) + cN((bX._2 / bw), cU)), (bX._2 / bx)) | |
593 | + | ||
594 | + | let cW = { | |
595 | + | let bb = [1, 2, 3, 4, 5] | |
596 | + | let bc = size(bb) | |
597 | + | let bd = $Tuple2("", (cS / bs)) | |
598 | + | func be (bf,bg) = if ((bg >= bc)) | |
599 | + | then bf | |
600 | + | else cV(bf, bb[bg]) | |
601 | + | ||
602 | + | func bh (bf,bg) = if ((bg >= bc)) | |
603 | + | then bf | |
568 | 604 | else throw("List size exceeds 5") | |
569 | 605 | ||
570 | - | | |
606 | + | bh(be(be(be(be(be(bd, 0), 1), 2), 3), 4), 5) | |
571 | 607 | } | |
572 | - | | |
573 | - | } | |
574 | - | ||
575 | - | ||
576 | - | func | |
577 | - | let | |
578 | - | [toString(valueOrElse(parseInt( | |
579 | - | then | |
580 | - | else "0_0_0_0_0_0", if ((size(split( | |
581 | - | then | |
582 | - | else "0_0_0_0_0_0", | |
583 | - | } | |
584 | - | ||
585 | - | ||
586 | - | func | |
587 | - | let | |
588 | - | ((t * (parseIntValue( | |
589 | - | } | |
590 | - | ||
591 | - | ||
592 | - | func | |
593 | - | let | |
594 | - | func | |
595 | - | ||
596 | - | func | |
597 | - | let | |
598 | - | let | |
599 | - | let | |
600 | - | $Tuple2(( | |
608 | + | cW._1 | |
609 | + | } | |
610 | + | ||
611 | + | ||
612 | + | func cX (cY) = { | |
613 | + | let cZ = split(valueOrElse(getString(cY), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":") | |
614 | + | [toString(valueOrElse(parseInt(cZ[O]), 0)), if ((size(split(cZ[P], "_")) == l)) | |
615 | + | then cZ[P] | |
616 | + | else "0_0_0_0_0_0", if ((size(split(cZ[Q], "_")) == l)) | |
617 | + | then cZ[Q] | |
618 | + | else "0_0_0_0_0_0", cZ[R]] | |
619 | + | } | |
620 | + | ||
621 | + | ||
622 | + | func da (db) = { | |
623 | + | let dc = split(db, "_") | |
624 | + | ((t * (parseIntValue(dc[1]) + 1)) * parseIntValue(dc[0])) | |
625 | + | } | |
626 | + | ||
627 | + | ||
628 | + | func dd (de) = { | |
629 | + | let df = de[I] | |
630 | + | func dg (bX,dh) = (bX + parseIntValue(dh)) | |
631 | + | ||
632 | + | func di (bX,dh) = { | |
633 | + | let af = bX._1 | |
634 | + | let dj = S(af) | |
635 | + | let dk = (((parseIntValue(dh) + dj) - 1) / dj) | |
636 | + | $Tuple2((af + 1), (bX._2 + (dk * h))) | |
601 | 637 | } | |
602 | 638 | ||
603 | - | let | |
604 | - | let | |
605 | - | let | |
606 | - | let | |
607 | - | func | |
608 | - | then | |
609 | - | else | |
610 | - | ||
611 | - | func | |
612 | - | then | |
639 | + | let dl = { | |
640 | + | let bb = split(de[G], "_") | |
641 | + | let bc = size(bb) | |
642 | + | let bd = 0 | |
643 | + | func be (bf,bg) = if ((bg >= bc)) | |
644 | + | then bf | |
645 | + | else dg(bf, bb[bg]) | |
646 | + | ||
647 | + | func bh (bf,bg) = if ((bg >= bc)) | |
648 | + | then bf | |
613 | 649 | else throw("List size exceeds 6") | |
614 | 650 | ||
615 | - | | |
651 | + | bh(be(be(be(be(be(be(bd, 0), 1), 2), 3), 4), 5), 6) | |
616 | 652 | } | |
617 | - | let | |
618 | - | let | |
619 | - | let | |
620 | - | let | |
621 | - | func | |
622 | - | then | |
623 | - | else | |
624 | - | ||
625 | - | func | |
626 | - | then | |
653 | + | let dm = { | |
654 | + | let bb = split(de[H], "_") | |
655 | + | let bc = size(bb) | |
656 | + | let bd = 0 | |
657 | + | func dn (bf,bg) = if ((bg >= bc)) | |
658 | + | then bf | |
659 | + | else dg(bf, bb[bg]) | |
660 | + | ||
661 | + | func do (bf,bg) = if ((bg >= bc)) | |
662 | + | then bf | |
627 | 663 | else throw("List size exceeds 6") | |
628 | 664 | ||
629 | - | | |
665 | + | do(dn(dn(dn(dn(dn(dn(bd, 0), 1), 2), 3), 4), 5), 6) | |
630 | 666 | } | |
631 | - | let | |
667 | + | let dp = if ((df == "")) | |
632 | 668 | then 0 | |
633 | - | else ( let | |
634 | - | let | |
635 | - | let | |
636 | - | func | |
637 | - | then | |
638 | - | else | |
639 | - | ||
640 | - | func | |
641 | - | then | |
669 | + | else ( let bb = split_4C(df, "_") | |
670 | + | let bc = size(bb) | |
671 | + | let bd = $Tuple2(0, 0) | |
672 | + | func dq (bf,bg) = if ((bg >= bc)) | |
673 | + | then bf | |
674 | + | else di(bf, bb[bg]) | |
675 | + | ||
676 | + | func dr (bf,bg) = if ((bg >= bc)) | |
677 | + | then bf | |
642 | 678 | else throw("List size exceeds 50") | |
643 | 679 | ||
644 | - | | |
645 | - | (( | |
646 | - | } | |
647 | - | ||
648 | - | ||
649 | - | func | |
650 | - | let | |
651 | - | let | |
652 | - | let | |
653 | - | let | |
654 | - | let | |
655 | - | let | |
656 | - | then makeString(["0", toString( | |
657 | - | else { | |
658 | - | let | |
659 | - | let | |
660 | - | let | |
661 | - | then parseIntValue( | |
662 | - | else | |
663 | - | makeString([toString( | |
664 | - | } | |
665 | - | [ | |
666 | - | then | |
667 | - | else "0_0_0_0_0_0", if ((size(split( | |
668 | - | then | |
669 | - | else "0_0_0_0_0_0", | |
670 | - | } | |
671 | - | ||
672 | - | ||
673 | - | func | |
674 | - | let | |
675 | - | let | |
676 | - | (( | |
677 | - | } | |
678 | - | ||
679 | - | ||
680 | - | func | |
681 | - | let | |
682 | - | then ((( | |
683 | - | else -((((-( | |
684 | - | ( | |
685 | - | } | |
686 | - | ||
687 | - | ||
688 | - | func | |
680 | + | dr(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(bd, 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 | |
681 | + | ((dl + dm) + dp) | |
682 | + | } | |
683 | + | ||
684 | + | ||
685 | + | func ds (dt,du,dv) = { | |
686 | + | let db = ((toString(du) + "_") + toString(dv)) | |
687 | + | let dw = da(db) | |
688 | + | let dx = valueOrElse(getString(dt), (db + ":0_0_0_0_0_0:0_0_0_0_0_0::0")) | |
689 | + | let dy = split_4C(dx, ":") | |
690 | + | let dz = dd(dy) | |
691 | + | let dA = if ((5 > size(dy))) | |
692 | + | then makeString(["0", toString(dz), toString((dw - dz)), toString(dw)], "_") | |
693 | + | else { | |
694 | + | let dB = split(dy[J], "_") | |
695 | + | let dC = parseIntValue(dB[K]) | |
696 | + | let dD = if ((size(dB) > 1)) | |
697 | + | then parseIntValue(dB[L]) | |
698 | + | else dz | |
699 | + | makeString([toString(dC), toString(dD), toString(((dw - dC) - dD)), toString(dw)], "_") | |
700 | + | } | |
701 | + | [dy[F], if ((size(split(dy[G], "_")) == l)) | |
702 | + | then dy[G] | |
703 | + | else "0_0_0_0_0_0", if ((size(split(dy[H], "_")) == l)) | |
704 | + | then dy[H] | |
705 | + | else "0_0_0_0_0_0", dy[I], dA] | |
706 | + | } | |
707 | + | ||
708 | + | ||
709 | + | func dE (de) = { | |
710 | + | let dF = dd(de) | |
711 | + | let dG = parseIntValue(split(de[J], "_")[K]) | |
712 | + | ((da(de[F]) - dF) - dG) | |
713 | + | } | |
714 | + | ||
715 | + | ||
716 | + | func dH (dI,dj) = { | |
717 | + | let dk = if ((dI >= 0)) | |
718 | + | then (((dI + dj) - 1) / dj) | |
719 | + | else -((((-(dI) + dj) - 1) / dj)) | |
720 | + | (dk * h) | |
721 | + | } | |
722 | + | ||
723 | + | ||
724 | + | func dJ (dK,de,dL) = if ((size(dK) != 3)) | |
689 | 725 | then throw("cargoListStr should contain exactly 2 ':' separators") | |
690 | 726 | else { | |
691 | - | let | |
692 | - | let | |
693 | - | let | |
727 | + | let dM = split(dK[0], "_") | |
728 | + | let dN = split(dK[1], "_") | |
729 | + | let dO = if ((dK[2] == "")) | |
694 | 730 | then nil | |
695 | - | else split( | |
696 | - | if ((size( | |
731 | + | else split(dK[2], "_") | |
732 | + | if ((size(dM) != l)) | |
697 | 733 | then throw("All 6 resources should be passed") | |
698 | - | else if ((size( | |
734 | + | else if ((size(dN) != l)) | |
699 | 735 | then throw("All 6 materials should be passed") | |
700 | 736 | else { | |
701 | - | let | |
702 | - | let | |
703 | - | let | |
704 | - | let | |
737 | + | let cE = dE(de) | |
738 | + | let dP = split(de[G], "_") | |
739 | + | let dQ = split(de[H], "_") | |
740 | + | let dR = if ((de[I] == "")) | |
705 | 741 | then nil | |
706 | - | else split( | |
707 | - | let | |
708 | - | let | |
709 | - | let | |
742 | + | else split(de[I], "_") | |
743 | + | let cC = split(dL[P], "_") | |
744 | + | let dS = split(dL[Q], "_") | |
745 | + | let dT = if ((dL[R] == "")) | |
710 | 746 | then nil | |
711 | - | else split( | |
712 | - | func | |
713 | - | let | |
714 | - | let | |
715 | - | let | |
716 | - | let | |
717 | - | if (( | |
718 | - | then $Tuple4(( | |
719 | - | else if (( | |
720 | - | then if (( | |
721 | - | then throw((((("Attempt to take " + | |
722 | - | else $Tuple4(( | |
723 | - | else if ((-( | |
724 | - | then throw((((("Attempt to take " + toString(-( | |
725 | - | else $Tuple4(( | |
747 | + | else split(dL[R], "_") | |
748 | + | func dU (bX,dh) = { | |
749 | + | let cp = bX._1 | |
750 | + | let dV = parseIntValue(dh) | |
751 | + | let dW = parseIntValue(dP[cp]) | |
752 | + | let dX = parseIntValue(cC[cp]) | |
753 | + | if ((dV == 0)) | |
754 | + | then $Tuple4((cp + 1), (bX._2 :+ dP[cp]), (bX._3 :+ cC[cp]), bX._4) | |
755 | + | else if ((dV > 0)) | |
756 | + | then if ((dV > dX)) | |
757 | + | then throw((((("Attempt to take " + dh) + " from backpack, but only ") + toString(dX)) + " available")) | |
758 | + | else $Tuple4((cp + 1), (bX._2 :+ toString((dW + dV))), (bX._3 :+ toString((dX - dV))), (bX._4 + dV)) | |
759 | + | else if ((-(dV) > dW)) | |
760 | + | then throw((((("Attempt to take " + toString(-(dV))) + " from warehouse, but only ") + toString(dW)) + " available")) | |
761 | + | else $Tuple4((cp + 1), (bX._2 :+ toString((dW + dV))), (bX._3 :+ toString((dX - dV))), (bX._4 + dV)) | |
726 | 762 | } | |
727 | 763 | ||
728 | - | let | |
729 | - | let | |
730 | - | let | |
731 | - | let | |
732 | - | func | |
733 | - | then | |
734 | - | else | |
735 | - | ||
736 | - | func | |
737 | - | then | |
764 | + | let cb = { | |
765 | + | let bb = dM | |
766 | + | let bc = size(bb) | |
767 | + | let bd = $Tuple4(0, nil, nil, 0) | |
768 | + | func be (bf,bg) = if ((bg >= bc)) | |
769 | + | then bf | |
770 | + | else dU(bf, bb[bg]) | |
771 | + | ||
772 | + | func bh (bf,bg) = if ((bg >= bc)) | |
773 | + | then bf | |
738 | 774 | else throw("List size exceeds 6") | |
739 | 775 | ||
740 | - | | |
776 | + | bh(be(be(be(be(be(be(bd, 0), 1), 2), 3), 4), 5), 6) | |
741 | 777 | } | |
742 | - | func | |
743 | - | let | |
744 | - | let | |
745 | - | let | |
746 | - | let | |
747 | - | if (( | |
748 | - | then $Tuple4(( | |
749 | - | else if (( | |
750 | - | then if (( | |
751 | - | then throw((((("Attempt to take " + | |
752 | - | else $Tuple4(( | |
753 | - | else if ((-( | |
754 | - | then throw((((("Attempt to take " + toString(-( | |
755 | - | else $Tuple4(( | |
778 | + | func dY (bX,dh) = { | |
779 | + | let cp = bX._1 | |
780 | + | let dV = parseIntValue(dh) | |
781 | + | let dZ = parseIntValue(dQ[cp]) | |
782 | + | let ea = parseIntValue(dS[cp]) | |
783 | + | if ((dV == 0)) | |
784 | + | then $Tuple4((cp + 1), (bX._2 :+ dQ[cp]), (bX._3 :+ dS[cp]), bX._4) | |
785 | + | else if ((dV > 0)) | |
786 | + | then if ((dV > ea)) | |
787 | + | then throw((((("Attempt to take " + dh) + " from backpack, but only ") + toString(ea)) + " available")) | |
788 | + | else $Tuple4((cp + 1), (bX._2 :+ toString((dZ + dV))), (bX._3 :+ toString((ea - dV))), (bX._4 + dV)) | |
789 | + | else if ((-(dV) > dZ)) | |
790 | + | then throw((((("Attempt to take " + toString(-(dV))) + " from warehouse, but only ") + toString(dZ)) + " available")) | |
791 | + | else $Tuple4((cp + 1), (bX._2 :+ toString((dZ + dV))), (bX._3 :+ toString((ea - dV))), (bX._4 + dV)) | |
756 | 792 | } | |
757 | 793 | ||
758 | - | let | |
759 | - | let | |
760 | - | let | |
761 | - | let | |
762 | - | func | |
763 | - | then | |
764 | - | else | |
765 | - | ||
766 | - | func | |
767 | - | then | |
794 | + | let eb = { | |
795 | + | let bb = dN | |
796 | + | let bc = size(bb) | |
797 | + | let bd = $Tuple4(0, nil, nil, cb._4) | |
798 | + | func dn (bf,bg) = if ((bg >= bc)) | |
799 | + | then bf | |
800 | + | else dY(bf, bb[bg]) | |
801 | + | ||
802 | + | func do (bf,bg) = if ((bg >= bc)) | |
803 | + | then bf | |
768 | 804 | else throw("List size exceeds 6") | |
769 | 805 | ||
770 | - | | |
806 | + | do(dn(dn(dn(dn(dn(dn(bd, 0), 1), 2), 3), 4), 5), 6) | |
771 | 807 | } | |
772 | - | func | |
773 | - | let | |
774 | - | let | |
775 | - | let | |
776 | - | let | |
777 | - | then parseIntValue( | |
808 | + | func ec (bX,dh) = { | |
809 | + | let cp = bX._1 | |
810 | + | let dj = S(cp) | |
811 | + | let dV = parseIntValue(dh) | |
812 | + | let ed = if ((size(dR) > cp)) | |
813 | + | then parseIntValue(dR[cp]) | |
778 | 814 | else 0 | |
779 | - | let | |
780 | - | then parseIntValue( | |
815 | + | let ee = if ((size(dT) > cp)) | |
816 | + | then parseIntValue(dT[cp]) | |
781 | 817 | else 0 | |
782 | - | if (( | |
783 | - | then $Tuple4(( | |
784 | - | else if (( | |
785 | - | then if (( | |
786 | - | then throw((((("Attempt to take " + | |
818 | + | if ((dV == 0)) | |
819 | + | then $Tuple4((cp + 1), (bX._2 :+ toString(ed)), (bX._3 :+ toString(ee)), bX._4) | |
820 | + | else if ((dV > 0)) | |
821 | + | then if ((dV > ee)) | |
822 | + | then throw((((("Attempt to take " + dh) + " from backpack, but only ") + toString(ee)) + " available")) | |
787 | 823 | else { | |
788 | - | let | |
789 | - | $Tuple4(( | |
824 | + | let ef = (dH((ed + dV), dj) - dH(ed, dj)) | |
825 | + | $Tuple4((cp + 1), (bX._2 :+ toString((ed + dV))), (bX._3 :+ toString((ee - dV))), (bX._4 + ef)) | |
790 | 826 | } | |
791 | - | else if ((-( | |
792 | - | then throw((((("Attempt to take " + toString(-( | |
827 | + | else if ((-(dV) > ed)) | |
828 | + | then throw((((("Attempt to take " + toString(-(dV))) + " from warehouse, but only ") + toString(ed)) + " available")) | |
793 | 829 | else { | |
794 | - | let | |
795 | - | $Tuple4(( | |
830 | + | let ef = (dH((ed + dV), dj) - dH(ed, dj)) | |
831 | + | $Tuple4((cp + 1), (bX._2 :+ toString((ed + dV))), (bX._3 :+ toString((ee - dV))), (bX._4 + ef)) | |
796 | 832 | } | |
797 | 833 | } | |
798 | 834 | ||
799 | - | let | |
835 | + | let cZ = if ((size(dO) != 0)) | |
800 | 836 | then { | |
801 | - | let | |
802 | - | let | |
803 | - | let | |
804 | - | func | |
805 | - | then | |
806 | - | else | |
807 | - | ||
808 | - | func | |
809 | - | then | |
837 | + | let bb = dO | |
838 | + | let bc = size(bb) | |
839 | + | let bd = $Tuple4(0, nil, nil, eb._4) | |
840 | + | func dq (bf,bg) = if ((bg >= bc)) | |
841 | + | then bf | |
842 | + | else ec(bf, bb[bg]) | |
843 | + | ||
844 | + | func dr (bf,bg) = if ((bg >= bc)) | |
845 | + | then bf | |
810 | 846 | else throw("List size exceeds 50") | |
811 | 847 | ||
812 | - | | |
848 | + | dr(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(bd, 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) | |
813 | 849 | } | |
814 | - | else $Tuple4(0, | |
815 | - | let | |
816 | - | if (( | |
817 | - | then throw((((("Attempt to put total " + toString( | |
818 | - | else $Tuple7(makeString( | |
850 | + | else $Tuple4(0, dR, dT, eb._4) | |
851 | + | let eg = cZ._4 | |
852 | + | if ((eg > cE)) | |
853 | + | then throw((((("Attempt to put total " + toString(eg)) + " stuff, but only ") + toString(cE)) + " warehouse space left")) | |
854 | + | else $Tuple7(makeString(cb._2, "_"), makeString(eb._2, "_"), makeString(cZ._2, "_"), makeString(cb._3, "_"), makeString(eb._3, "_"), makeString(cZ._3, "_"), eg) | |
819 | 855 | } | |
820 | 856 | } | |
821 | 857 | ||
822 | 858 | ||
823 | - | func | |
824 | - | let | |
825 | - | let | |
826 | - | let | |
827 | - | let | |
828 | - | let | |
829 | - | let | |
830 | - | let | |
831 | - | let | |
832 | - | let | |
833 | - | let | |
834 | - | $Tuple2([IntegerEntry( | |
835 | - | } | |
836 | - | ||
837 | - | ||
838 | - | func | |
859 | + | func eh (ei,ej) = { | |
860 | + | let aL = toString(ei) | |
861 | + | let ek = cK(toBigInt(ej)) | |
862 | + | let el = valueOrElse(getInteger(bz()), (by + 1)) | |
863 | + | let bB = toString(el) | |
864 | + | let cT = toInt((ek % bs)) | |
865 | + | let cs = cR(ek, cT) | |
866 | + | let em = y[cT] | |
867 | + | let en = Issue(bQ(bB, "S"), makeString([bB, "S", cs, em], "_"), 1, 0, false) | |
868 | + | let am = calculateAssetId(en) | |
869 | + | let eo = toBase58String(am) | |
870 | + | $Tuple2([IntegerEntry(bz(), (el + 1)), en, StringEntry(bA(bB), eo), StringEntry(al(eo), aL), StringEntry(bG(bB), aL), IntegerEntry(ap(eo), 0), IntegerEntry(bE(eo, aL), 0), ScriptTransfer(ei, 1, am)], $Tuple2(eo, em)) | |
871 | + | } | |
872 | + | ||
873 | + | ||
874 | + | func ep (cd,ei,ej,eq,er) = if (!(sigVerify_8Kb(eq, er, bk))) | |
839 | 875 | then throw("signature does not match") | |
840 | 876 | else { | |
841 | - | let | |
842 | - | let | |
843 | - | let | |
844 | - | let | |
845 | - | let | |
846 | - | let | |
847 | - | let | |
848 | - | let | |
849 | - | if (if (( | |
877 | + | let dc = split(toUtf8String(eq), ";") | |
878 | + | let es = split(dc[0], "|") | |
879 | + | let et = split(es[bN], "_") | |
880 | + | let eu = parseIntValue(et[0]) | |
881 | + | let ev = parseIntValue(et[1]) | |
882 | + | let ew = split(dc[1], ":") | |
883 | + | let ex = ew[0] | |
884 | + | let ey = parseIntValue(es[bO]) | |
885 | + | if (if ((ey > (lastBlock.timestamp + bm))) | |
850 | 886 | then true | |
851 | - | else ((lastBlock.timestamp - | |
887 | + | else ((lastBlock.timestamp - bm) > ey)) | |
852 | 888 | then throw("signature outdated") | |
853 | 889 | else { | |
854 | - | let | |
855 | - | let | |
856 | - | let | |
857 | - | if (( | |
858 | - | then throw(((("Tx ids don't match! In state: " + | |
890 | + | let ez = ew[1] | |
891 | + | let aL = toString(ei) | |
892 | + | let eA = valueOrElse(getString(aj(aL)), "") | |
893 | + | if ((eA != ez)) | |
894 | + | then throw(((("Tx ids don't match! In state: " + eA) + ", in msg: ") + ez)) | |
859 | 895 | else { | |
860 | - | let | |
861 | - | let | |
862 | - | let | |
863 | - | if (( | |
864 | - | then throw(((("oldHealth=" + toString(valueOrElse(getInteger( | |
865 | - | else if ((0 >= | |
896 | + | let aF = valueOrErrorMessage(getString(aD(aL)), "You don't have a duck staked") | |
897 | + | let eB = aH(aF) | |
898 | + | let eC = valueOrElse(getInteger(eB), 100) | |
899 | + | if ((eC != eu)) | |
900 | + | then throw(((("oldHealth=" + toString(valueOrElse(getInteger(eB), 100))) + " from state does not match one from flight log=") + toString(eu))) | |
901 | + | else if ((0 >= eu)) | |
866 | 902 | then throw("You can't fly with zero health") | |
867 | - | else if ((0 >= | |
868 | - | then $Tuple3(((if (!( | |
869 | - | then [ScriptTransfer( | |
870 | - | else nil) :+ IntegerEntry( | |
903 | + | else if ((0 >= ev)) | |
904 | + | then $Tuple3(((if (!(cd)) | |
905 | + | then [ScriptTransfer(ei, br, b)] | |
906 | + | else nil) :+ IntegerEntry(eB, 0)), "", 0) | |
871 | 907 | else { | |
872 | - | let | |
873 | - | then | |
908 | + | let eD = if ((size(es) > bP)) | |
909 | + | then es[bP] | |
874 | 910 | else "" | |
875 | - | let | |
876 | - | then | |
911 | + | let eE = if ((eD == "$")) | |
912 | + | then aS(invoke(ag, "sendUsdtPrize", [aL], nil)) | |
877 | 913 | else 0 | |
878 | - | let | |
879 | - | let | |
880 | - | let | |
881 | - | let | |
882 | - | let | |
883 | - | let | |
884 | - | $Tuple3(((( | |
914 | + | let cY = aE(aF) | |
915 | + | let dL = cX(cY) | |
916 | + | let eF = split(dL[Q], "_") | |
917 | + | let eG = makeString(cc(cd, eF, bq), "_") | |
918 | + | let eH = eh(ei, ej) | |
919 | + | let eo = eH._2._1 | |
920 | + | $Tuple3((((eH._1 :+ StringEntry(aG(aF), makeString([eH._2._2, "L", eo], "_"))) :+ IntegerEntry(eB, ev)) :+ StringEntry(cY, makeString([dL[O], dL[P], eG, dL[R]], ":"))), eo, eE) | |
885 | 921 | } | |
886 | 922 | } | |
887 | 923 | } | |
888 | 924 | } | |
889 | 925 | ||
890 | 926 | ||
891 | - | func | |
892 | - | let | |
893 | - | let | |
894 | - | let | |
895 | - | let | |
896 | - | ((r + fraction(r, (( | |
897 | - | } | |
898 | - | ||
899 | - | ||
900 | - | func | |
901 | - | let | |
902 | - | then $Tuple2( | |
903 | - | else { | |
904 | - | let | |
905 | - | let | |
906 | - | let | |
907 | - | if (( | |
908 | - | then throw((("Duck location type is " + | |
909 | - | else $Tuple2( | |
910 | - | } | |
911 | - | let | |
912 | - | let | |
913 | - | let | |
914 | - | let | |
915 | - | let | |
916 | - | let | |
917 | - | if (( | |
927 | + | func eI (aw,eJ) = { | |
928 | + | let dv = valueOrElse(getInteger(ap(aw)), 0) | |
929 | + | let eK = valueOrElse(getInteger(aq(k, aw)), 0) | |
930 | + | let eL = (dv / 6) | |
931 | + | let eM = (dv / 7) | |
932 | + | ((r + fraction(r, ((dv + eL) + (2 * eM)), 5)) + fraction(r, eK, (eJ * 5))) | |
933 | + | } | |
934 | + | ||
935 | + | ||
936 | + | func eN (ak,eO,eP) = { | |
937 | + | let eQ = if ((eO == bK)) | |
938 | + | then $Tuple2(eP, valueOrElse(getString(aD(ak)), "")) | |
939 | + | else { | |
940 | + | let aF = valueOrErrorMessage(getString(aD(ak)), "You don't have a duck staked") | |
941 | + | let eR = valueOrElse(getString(aG(aF)), u) | |
942 | + | let eS = split(value(eR), "_") | |
943 | + | if ((eS[aN] != "L")) | |
944 | + | then throw((("Duck location type is " + eS[aN]) + ", but should be L")) | |
945 | + | else $Tuple2(eS[aO], aF) | |
946 | + | } | |
947 | + | let aw = eQ._1 | |
948 | + | let eT = eQ._2 | |
949 | + | let eU = value(assetInfo(fromBase58String(aw))) | |
950 | + | let eV = ao(aw) | |
951 | + | let eW = valueOrErrorMessage(getInteger(eV), (("Land " + eU.name) + " is not staked")) | |
952 | + | let eX = valueOrErrorMessage(getString(al(aw)), (("NFT " + eU.name) + " is orphaned")) | |
953 | + | if ((eX != ak)) | |
918 | 954 | then throw((i + " is not yours")) | |
919 | 955 | else { | |
920 | - | let | |
921 | - | $Tuple4( | |
922 | - | } | |
923 | - | } | |
924 | - | ||
925 | - | ||
926 | - | func | |
956 | + | let eY = split(eU.description, "_") | |
957 | + | $Tuple4(eT, aw, eY, eW) | |
958 | + | } | |
959 | + | } | |
960 | + | ||
961 | + | ||
962 | + | func eZ (ak,dI,eO,eP) = if ((0 > dI)) | |
927 | 963 | then throw("Negative amount") | |
928 | 964 | else { | |
929 | - | let | |
930 | - | let | |
931 | - | let | |
932 | - | let | |
933 | - | if ((0 > | |
934 | - | then throw(((("Saved timestamp is in future, saved = " + toString( | |
965 | + | let fa = eN(ak, eO, eP) | |
966 | + | let aV = fa._3[C] | |
967 | + | let cl = cr(fa._3[D]) | |
968 | + | let cv = (lastBlock.timestamp - fa._4) | |
969 | + | if ((0 > cv)) | |
970 | + | then throw(((("Saved timestamp is in future, saved = " + toString(fa._4)) + ", current = ") + toString(lastBlock.timestamp))) | |
935 | 971 | else { | |
936 | - | let | |
937 | - | let | |
938 | - | let | |
939 | - | if (( | |
940 | - | then throw(((("Not enough resources, available = " + toString( | |
972 | + | let eJ = aU(aV) | |
973 | + | let fb = eI(fa._2, eJ) | |
974 | + | let fc = fraction(cv, (fb * eJ), s) | |
975 | + | if ((dI > fc)) | |
976 | + | then throw(((("Not enough resources, available = " + toString(fc)) + ", requested = ") + toString(dI))) | |
941 | 977 | else { | |
942 | - | let | |
943 | - | let | |
944 | - | let | |
945 | - | let | |
946 | - | let | |
947 | - | let | |
948 | - | let | |
949 | - | let | |
950 | - | let | |
951 | - | if (if (( | |
952 | - | then ( | |
978 | + | let fd = fraction((fc - dI), s, (fb * eJ)) | |
979 | + | let fe = (lastBlock.timestamp - fd) | |
980 | + | let du = (eJ / m) | |
981 | + | let cD = cz(cl, (cv - fd), du, fb) | |
982 | + | let dt = av(fa._2) | |
983 | + | let dv = valueOrElse(getInteger(ap(fa._2)), 0) | |
984 | + | let de = ds(dt, du, dv) | |
985 | + | let dB = split(de[J], "_") | |
986 | + | let cE = parseIntValue(dB[M]) | |
987 | + | if (if ((eO == bK)) | |
988 | + | then (dI > cE) | |
953 | 989 | else false) | |
954 | - | then throw((("Only " + toString( | |
990 | + | then throw((("Only " + toString(cE)) + " space left in warehouse")) | |
955 | 991 | else { | |
956 | - | let | |
957 | - | let | |
958 | - | let | |
959 | - | let | |
960 | - | let | |
961 | - | then $Tuple4( | |
962 | - | else if (( | |
963 | - | then $Tuple4( | |
992 | + | let cY = aE(fa._1) | |
993 | + | let dL = cX(cY) | |
994 | + | let cC = split(dL[P], "_") | |
995 | + | let cB = split(de[G], "_") | |
996 | + | let ff = if ((eO == bK)) | |
997 | + | then $Tuple4(ct(cB, cl, (cv - fd), du, fb), dL[P], (parseIntValue(dB[L]) + cD._2), (parseIntValue(dB[M]) - cD._2)) | |
998 | + | else if ((eO == bL)) | |
999 | + | then $Tuple4(de[G], ct(cC, cl, (cv - fd), du, fb), parseIntValue(dB[L]), parseIntValue(dB[M])) | |
964 | 1000 | else { | |
965 | - | let | |
966 | - | let | |
967 | - | $Tuple4( | |
1001 | + | let fg = cA(cB, cC, cD, cE) | |
1002 | + | let fh = min([parseIntValue(dB[M]), cD._2]) | |
1003 | + | $Tuple4(fg._1, fg._2, (parseIntValue(dB[L]) + fh), (parseIntValue(dB[M]) - fh)) | |
968 | 1004 | } | |
969 | - | let | |
970 | - | let | |
971 | - | let | |
972 | - | let | |
973 | - | $Tuple5([IntegerEntry( | |
1005 | + | let fi = ff._1 | |
1006 | + | let fj = ff._2 | |
1007 | + | let fk = ff._3 | |
1008 | + | let fl = ff._4 | |
1009 | + | $Tuple5([IntegerEntry(ao(fa._2), fe), IntegerEntry(as(i, fa._2, ak), fe)], cY, [dL[O], fj, dL[Q], dL[R]], dt, [de[F], fi, de[H], de[I], makeString([dB[K], toString(fk), toString(fl), dB[N]], "_")]) | |
974 | 1010 | } | |
975 | 1011 | } | |
976 | 1012 | } | |
977 | 1013 | } | |
978 | 1014 | ||
979 | 1015 | ||
980 | - | func | |
981 | - | let | |
982 | - | let | |
983 | - | let | |
984 | - | | |
985 | - | } | |
986 | - | ||
987 | - | ||
988 | - | func | |
989 | - | let | |
990 | - | let | |
991 | - | let | |
992 | - | let | |
993 | - | let | |
994 | - | if (( | |
1016 | + | func fm (ak,aw,eJ,eO) = { | |
1017 | + | let eV = ao(aw) | |
1018 | + | let eW = value(getInteger(eV)) | |
1019 | + | let fc = (fraction((lastBlock.timestamp - eW), eI(aw, eJ), s) * eJ) | |
1020 | + | eZ(ak, fc, eO, aw) | |
1021 | + | } | |
1022 | + | ||
1023 | + | ||
1024 | + | func fn (cd,ei,fo,aw) = { | |
1025 | + | let ak = toString(ei) | |
1026 | + | let fa = eN(ak, bM, aw) | |
1027 | + | let eJ = aU(fa._3[C]) | |
1028 | + | let fp = ap(fa._2) | |
1029 | + | let fq = valueOrElse(getInteger(fp), 0) | |
1030 | + | if ((fq >= 3)) | |
995 | 1031 | then throw("Currently max infrastructure level = 3") | |
996 | 1032 | else { | |
997 | - | let | |
998 | - | let | |
999 | - | if (if (!( | |
1000 | - | then ( | |
1033 | + | let fr = (fq + 1) | |
1034 | + | let fs = fraction(bp, (eJ * fr), m) | |
1035 | + | if (if (!(cd)) | |
1036 | + | then (fo != fs) | |
1001 | 1037 | else false) | |
1002 | - | then throw(("Payment attached should be " + toString( | |
1038 | + | then throw(("Payment attached should be " + toString(fs))) | |
1003 | 1039 | else { | |
1004 | - | let | |
1005 | - | let | |
1006 | - | let | |
1007 | - | let | |
1008 | - | let | |
1009 | - | let | |
1010 | - | let | |
1011 | - | let | |
1012 | - | let | |
1013 | - | let | |
1014 | - | let | |
1015 | - | $Tuple2(([IntegerEntry( | |
1040 | + | let cY = aE(fa._1) | |
1041 | + | let dL = cX(cY) | |
1042 | + | let eF = split(dL[Q], "_") | |
1043 | + | let eG = makeString(cc(cd, eF, fraction(e, (eJ * fr), m)), "_") | |
1044 | + | let ft = fm(ak, fa._2, eJ, bM) | |
1045 | + | let fu = ft._5 | |
1046 | + | let fv = da(fu[F]) | |
1047 | + | let fw = makeString([split(fu[F], "_")[0], toString(fr)], "_") | |
1048 | + | let fx = da(fw) | |
1049 | + | let dB = split(fu[J], "_") | |
1050 | + | let fy = makeString([dB[K], dB[L], toString(((parseIntValue(dB[M]) + fx) - fv)), toString(fx)], "_") | |
1051 | + | $Tuple2(([IntegerEntry(fp, fr), IntegerEntry(bE(fa._2, ak), fr), StringEntry(cY, makeString([dL[O], ft._3[P], eG, dL[R]], ":")), StringEntry(ft._4, makeString([fw, fu[G], fu[H], fu[I], fy], ":"))] ++ ft._1), fr) | |
1016 | 1052 | } | |
1017 | 1053 | } | |
1018 | 1054 | } | |
1019 | 1055 | ||
1020 | 1056 | ||
1021 | - | func | |
1022 | - | let | |
1023 | - | let | |
1024 | - | let | |
1025 | - | let | |
1026 | - | if ((valueOrElse(getInteger( | |
1057 | + | func fz (ak,eP) = { | |
1058 | + | let fa = eN(ak, bM, eP) | |
1059 | + | let aw = fa._2 | |
1060 | + | let eJ = aU(fa._3[C]) | |
1061 | + | let fA = aq(k, aw) | |
1062 | + | if ((valueOrElse(getInteger(fA), 0) > 0)) | |
1027 | 1063 | then throw("Presale artifact is already activated") | |
1028 | - | else if ((parseIntValue( | |
1029 | - | then throw((((i + " ") + | |
1064 | + | else if ((parseIntValue(fa._3[B]) > by)) | |
1065 | + | then throw((((i + " ") + aw) + " is not eligible for presale artifact")) | |
1030 | 1066 | else { | |
1031 | - | let | |
1032 | - | (((( | |
1067 | + | let ft = fm(ak, aw, eJ, bM) | |
1068 | + | ((((ft._1 :+ IntegerEntry(fA, eJ)) :+ IntegerEntry(bF(k, aw, ak), eJ)) :+ StringEntry(ft._2, makeString(ft._3, ":"))) :+ StringEntry(ft._4, makeString(ft._5, ":"))) | |
1033 | 1069 | } | |
1034 | 1070 | } | |
1035 | 1071 | ||
1036 | 1072 | ||
1037 | - | func | |
1038 | - | let | |
1039 | - | func | |
1040 | - | let | |
1041 | - | let | |
1042 | - | let | |
1043 | - | let | |
1044 | - | if (( | |
1073 | + | func fB (fC,fr,fD,ak,fE,ej,fF) = { | |
1074 | + | let aF = valueOrErrorMessage(getString(aD(ak)), "You don't have a duck staked") | |
1075 | + | func fG (bX,aw) = { | |
1076 | + | let eU = value(assetInfo(fromBase58String(aw))) | |
1077 | + | let eV = ao(aw) | |
1078 | + | let eW = valueOrErrorMessage(getInteger(eV), (("NFT " + eU.name) + " is not staked")) | |
1079 | + | let eX = valueOrErrorMessage(getString(al(aw)), (("NFT " + eU.name) + " is orphaned")) | |
1080 | + | if ((eX != ak)) | |
1045 | 1081 | then throw((i + " is not yours")) | |
1046 | 1082 | else { | |
1047 | - | let | |
1048 | - | let | |
1049 | - | if (if (( | |
1050 | - | then ( | |
1083 | + | let eY = split(eU.description, "_") | |
1084 | + | let em = eY[E] | |
1085 | + | if (if ((bX._3 != "")) | |
1086 | + | then (bX._3 != em) | |
1051 | 1087 | else false) | |
1052 | 1088 | then throw("Lands should be on the same continent to merge") | |
1053 | 1089 | else { | |
1054 | - | let | |
1055 | - | let | |
1056 | - | let | |
1057 | - | let | |
1058 | - | let | |
1059 | - | let | |
1060 | - | let | |
1061 | - | let | |
1062 | - | let c = | |
1090 | + | let aV = eY[C] | |
1091 | + | let fH = bX._1 | |
1092 | + | let cp = valueOrErrorMessage(indexOf(fH, aV), "You haven't passed all the lands needed") | |
1093 | + | let fI = (take(fH, cp) + drop(fH, (cp + 1))) | |
1094 | + | let eJ = aU(aV) | |
1095 | + | let fJ = (bX._2 + valueOrElse(getInteger(aq(k, aw)), 0)) | |
1096 | + | let dv = valueOrElse(getInteger(ap(aw)), 0) | |
1097 | + | let fK = { | |
1098 | + | let c = aV | |
1063 | 1099 | if (("S" == c)) | |
1064 | 1100 | then 3 | |
1065 | 1101 | else if (("M" == c)) | |
1070 | 1106 | then 6 | |
1071 | 1107 | else throw("Only S, M, L, XL can merge") | |
1072 | 1108 | } | |
1073 | - | if (( | |
1109 | + | if ((dv != fK)) | |
1074 | 1110 | then throw("All lands should be maxed to merge") | |
1075 | 1111 | else { | |
1076 | - | let | |
1077 | - | let | |
1078 | - | let | |
1079 | - | if ((0 > | |
1080 | - | then throw(((("Saved timestamp is in future, saved = " + toString( | |
1112 | + | let bB = eY[B] | |
1113 | + | let cl = cr(eY[D]) | |
1114 | + | let cv = (lastBlock.timestamp - eW) | |
1115 | + | if ((0 > cv)) | |
1116 | + | then throw(((("Saved timestamp is in future, saved = " + toString(eW)) + ", current = ") + toString(lastBlock.timestamp))) | |
1081 | 1117 | else { | |
1082 | - | let | |
1083 | - | let | |
1084 | - | let | |
1085 | - | let | |
1086 | - | let | |
1087 | - | let | |
1088 | - | if (!(isDefined( | |
1089 | - | then throw(("Your staked lands don't contain " + | |
1118 | + | let fb = eI(aw, eJ) | |
1119 | + | let du = (eJ / m) | |
1120 | + | let fj = ct(split(bX._4, "_"), cl, cv, du, fb) | |
1121 | + | let ca = cj(split(bX._6, "_"), cl, du, -1) | |
1122 | + | let fL = bX._7 | |
1123 | + | let af = indexOf(fL, aw) | |
1124 | + | if (!(isDefined(af))) | |
1125 | + | then throw(("Your staked lands don't contain " + aw)) | |
1090 | 1126 | else { | |
1091 | - | let | |
1092 | - | let | |
1093 | - | $Tuple7( | |
1127 | + | let fM = an(aw) | |
1128 | + | let fN = valueOrElse(getString(fM), "") | |
1129 | + | $Tuple7(fI, fJ, em, fj, (((((((((((((bX._5 :+ DeleteEntry(ao(aw))) :+ DeleteEntry(as(i, aw, ak))) :+ DeleteEntry(bA(bB))) :+ DeleteEntry(al(aw))) :+ DeleteEntry(ap(aw))) :+ DeleteEntry(bE(aw, ak))) :+ DeleteEntry(aq(k, aw))) :+ DeleteEntry(bF(k, aw, ak))) :+ DeleteEntry(bG(bB))) :+ DeleteEntry(av(aw))) :+ DeleteEntry(fM)) :+ DeleteEntry(bC(fN))) :+ Burn(fromBase58String(aw), 1)), ca, removeByIndex(fL, value(af))) | |
1094 | 1130 | } | |
1095 | 1131 | } | |
1096 | 1132 | } | |
1098 | 1134 | } | |
1099 | 1135 | } | |
1100 | 1136 | ||
1101 | - | let | |
1102 | - | let | |
1103 | - | let | |
1104 | - | let | |
1105 | - | let | |
1106 | - | let | |
1107 | - | then split_51C(value( | |
1137 | + | let cY = aE(aF) | |
1138 | + | let dL = cX(cY) | |
1139 | + | let fO = valueOrElse(getString(aI()), "0_0_0_0_0_0") | |
1140 | + | let fP = ax(ak) | |
1141 | + | let fQ = getString(fP) | |
1142 | + | let fR = if (isDefined(fQ)) | |
1143 | + | then split_51C(value(fQ), "_") | |
1108 | 1144 | else nil | |
1109 | - | let | |
1110 | - | let | |
1111 | - | let | |
1112 | - | let | |
1113 | - | func | |
1114 | - | then | |
1115 | - | else | |
1116 | - | ||
1117 | - | func | |
1118 | - | then | |
1145 | + | let cb = { | |
1146 | + | let bb = fE | |
1147 | + | let bc = size(bb) | |
1148 | + | let bd = $Tuple7(fD, 0, "", dL[P], nil, fO, fR) | |
1149 | + | func be (bf,bg) = if ((bg >= bc)) | |
1150 | + | then bf | |
1151 | + | else fG(bf, bb[bg]) | |
1152 | + | ||
1153 | + | func bh (bf,bg) = if ((bg >= bc)) | |
1154 | + | then bf | |
1119 | 1155 | else throw("List size exceeds 5") | |
1120 | 1156 | ||
1121 | - | | |
1157 | + | bh(be(be(be(be(be(bd, 0), 1), 2), 3), 4), 5) | |
1122 | 1158 | } | |
1123 | - | let | |
1124 | - | let | |
1125 | - | let | |
1126 | - | let | |
1127 | - | let | |
1128 | - | let | |
1129 | - | let | |
1130 | - | let | |
1131 | - | let | |
1132 | - | $Tuple2((((((((((((((( | |
1133 | - | then StringEntry( | |
1134 | - | else DeleteEntry( | |
1135 | - | } | |
1136 | - | ||
1137 | - | ||
1138 | - | func | |
1139 | - | ||
1140 | - | ||
1141 | - | func | |
1142 | - | let | |
1143 | - | if (if (!( | |
1144 | - | then ( | |
1159 | + | let em = cb._3 | |
1160 | + | let cT = valueOrErrorMessage(indexOf(y, em), ("Unknown continent: " + em)) | |
1161 | + | let cs = cR(cK(toBigInt(ej)), cT) | |
1162 | + | let el = valueOrElse(getInteger(bz()), (by + 1)) | |
1163 | + | let fS = toString(el) | |
1164 | + | let en = Issue(bQ(fS, fC), makeString([fS, fC, cs, em], "_"), 1, 0, false) | |
1165 | + | let am = calculateAssetId(en) | |
1166 | + | let fT = toBase58String(am) | |
1167 | + | let eG = makeString(cc((fF > 0), split(dL[Q], "_"), fF), "_") | |
1168 | + | $Tuple2(((((((((((((((cb._5 :+ (if ((size(cb._7) > 0)) | |
1169 | + | then StringEntry(fP, makeString_11C(cb._7, "_")) | |
1170 | + | else DeleteEntry(fP))) :+ IntegerEntry(bz(), (el + 1))) :+ en) :+ StringEntry(bA(fS), fT)) :+ StringEntry(al(fT), ak)) :+ StringEntry(bG(fS), ak)) :+ IntegerEntry(aq(k, fT), cb._2)) :+ IntegerEntry(bF(k, fT, ak), cb._2)) :+ IntegerEntry(ap(fT), fr)) :+ IntegerEntry(bE(fT, ak), fr)) :+ StringEntry(cY, makeString([dL[O], cb._4, eG, dL[R]], ":"))) :+ StringEntry(aI(), cb._6)) :+ StringEntry(aG(aF), makeString([em, "L", fT], "_"))) :+ ScriptTransfer(addressFromStringValue(ak), 1, am)), fT) | |
1171 | + | } | |
1172 | + | ||
1173 | + | ||
1174 | + | func fU (ak,fE,ej) = fB("M", 3, "SSSS", ak, fE, ej, 0) | |
1175 | + | ||
1176 | + | ||
1177 | + | func fV (ak,fE,ej,cd,fo) = { | |
1178 | + | let fs = (bp * 4) | |
1179 | + | if (if (!(cd)) | |
1180 | + | then (fo != fs) | |
1145 | 1181 | else false) | |
1146 | - | then throw(("Payment attached should be " + toString( | |
1147 | - | else | |
1148 | - | } | |
1149 | - | ||
1150 | - | ||
1151 | - | func | |
1152 | - | let | |
1153 | - | if (if (!( | |
1154 | - | then ( | |
1182 | + | then throw(("Payment attached should be " + toString(fs))) | |
1183 | + | else fB("L", 4, "SMM", ak, fE, ej, (e * 4)) | |
1184 | + | } | |
1185 | + | ||
1186 | + | ||
1187 | + | func fW (ak,fE,ej,cd,fo) = { | |
1188 | + | let fs = (bp * 47) | |
1189 | + | if (if (!(cd)) | |
1190 | + | then (fo != fs) | |
1155 | 1191 | else false) | |
1156 | - | then throw(("Payment attached should be " + toString( | |
1157 | - | else | |
1158 | - | } | |
1159 | - | ||
1160 | - | ||
1161 | - | func | |
1162 | - | let | |
1163 | - | if (if (!( | |
1164 | - | then ( | |
1192 | + | then throw(("Payment attached should be " + toString(fs))) | |
1193 | + | else fB("XL", 5, "SSSML", ak, fE, ej, (e * 47)) | |
1194 | + | } | |
1195 | + | ||
1196 | + | ||
1197 | + | func fX (ak,fE,ej,cd,fo) = { | |
1198 | + | let fs = (bp * 54) | |
1199 | + | if (if (!(cd)) | |
1200 | + | then (fo != fs) | |
1165 | 1201 | else false) | |
1166 | - | then throw(("Payment attached should be " + toString( | |
1167 | - | else | |
1168 | - | } | |
1169 | - | ||
1170 | - | ||
1171 | - | func | |
1172 | - | let | |
1173 | - | let c = size( | |
1202 | + | then throw(("Payment attached should be " + toString(fs))) | |
1203 | + | else fB("XXL", 6, "LXL", ak, fE, ej, (e * 54)) | |
1204 | + | } | |
1205 | + | ||
1206 | + | ||
1207 | + | func fY (cd,ak,fo,fE,ej) = { | |
1208 | + | let fZ = { | |
1209 | + | let c = size(fE) | |
1174 | 1210 | if ((4 == c)) | |
1175 | - | then | |
1211 | + | then fU(ak, fE, ej) | |
1176 | 1212 | else if ((3 == c)) | |
1177 | - | then | |
1213 | + | then fV(ak, fE, ej, cd, fo) | |
1178 | 1214 | else if ((5 == c)) | |
1179 | - | then | |
1215 | + | then fW(ak, fE, ej, cd, fo) | |
1180 | 1216 | else if ((2 == c)) | |
1181 | - | then | |
1217 | + | then fX(ak, fE, ej, cd, fo) | |
1182 | 1218 | else throw("Unknown merge") | |
1183 | 1219 | } | |
1184 | - | | |
1185 | - | } | |
1186 | - | ||
1187 | - | ||
1188 | - | func | |
1189 | - | then valueOrElse(getBoolean( | |
1220 | + | fZ | |
1221 | + | } | |
1222 | + | ||
1223 | + | ||
1224 | + | func ga (cp) = if (if ((cp.originCaller != ag)) | |
1225 | + | then valueOrElse(getBoolean(aJ()), false) | |
1190 | 1226 | else false) | |
1191 | 1227 | then throw("Contracts are under maintenance") | |
1192 | - | else StringEntry( | |
1193 | - | ||
1194 | - | ||
1195 | - | @Callable( | |
1196 | - | func constructorV1 ( | |
1228 | + | else StringEntry(aj(toString(cp.originCaller)), toBase58String(cp.transactionId)) | |
1229 | + | ||
1230 | + | ||
1231 | + | @Callable(cp) | |
1232 | + | func constructorV1 (gb) = if ((cp.caller != this)) | |
1197 | 1233 | then throw("Permission denied") | |
1198 | - | else [StringEntry( | |
1199 | - | ||
1200 | - | ||
1201 | - | ||
1202 | - | @Callable( | |
1203 | - | func setBlocked ( | |
1234 | + | else [StringEntry(aa(), gb)] | |
1235 | + | ||
1236 | + | ||
1237 | + | ||
1238 | + | @Callable(cp) | |
1239 | + | func setBlocked (gc) = if ((cp.caller != this)) | |
1204 | 1240 | then throw("permission denied") | |
1205 | - | else [BooleanEntry( | |
1206 | - | ||
1207 | - | ||
1208 | - | ||
1209 | - | @Callable( | |
1241 | + | else [BooleanEntry(aJ(), gc)] | |
1242 | + | ||
1243 | + | ||
1244 | + | ||
1245 | + | @Callable(cp) | |
1210 | 1246 | func stakeLand () = { | |
1211 | - | let | |
1212 | - | if ((size( | |
1247 | + | let gd = ga(cp) | |
1248 | + | if ((size(cp.payments) != 1)) | |
1213 | 1249 | then throw("Exactly one payment required") | |
1214 | 1250 | else { | |
1215 | - | let | |
1216 | - | let | |
1217 | - | let | |
1218 | - | if (( | |
1251 | + | let ge = value(cp.payments[0]) | |
1252 | + | let am = value(ge.assetId) | |
1253 | + | let V = toString(cp.caller) | |
1254 | + | if ((ge.amount != 1)) | |
1219 | 1255 | then throw((("NFT " + i) + " token should be attached as payment")) | |
1220 | 1256 | else { | |
1221 | - | let | |
1222 | - | if (( | |
1257 | + | let eU = value(assetInfo(am)) | |
1258 | + | if ((eU.issuer != this)) | |
1223 | 1259 | then throw("Unknown issuer of token") | |
1224 | - | else if (!(contains( | |
1260 | + | else if (!(contains(eU.name, i))) | |
1225 | 1261 | then throw((("Only NFT " + i) + " tokens are accepted")) | |
1226 | 1262 | else { | |
1227 | - | let | |
1228 | - | let | |
1229 | - | then dropRight( | |
1230 | - | else if (contains( | |
1231 | - | then dropRight( | |
1232 | - | else dropRight( | |
1233 | - | if (!(isDefined(parseInt( | |
1234 | - | then throw(("Cannot parse land number from " + | |
1263 | + | let gf = drop(eU.name, 4) | |
1264 | + | let bB = if (contains(gf, "XXL")) | |
1265 | + | then dropRight(gf, 3) | |
1266 | + | else if (contains(gf, "XL")) | |
1267 | + | then dropRight(gf, 2) | |
1268 | + | else dropRight(gf, 1) | |
1269 | + | if (!(isDefined(parseInt(bB)))) | |
1270 | + | then throw(("Cannot parse land number from " + eU.name)) | |
1235 | 1271 | else { | |
1236 | - | let | |
1237 | - | let | |
1238 | - | if (isDefined(getInteger( | |
1239 | - | then throw((("NFT " + | |
1272 | + | let aw = toBase58String(am) | |
1273 | + | let eV = ao(aw) | |
1274 | + | if (isDefined(getInteger(eV))) | |
1275 | + | then throw((("NFT " + eU.name) + " is already staked")) | |
1240 | 1276 | else { | |
1241 | - | let | |
1242 | - | let | |
1243 | - | let | |
1244 | - | let | |
1245 | - | let | |
1246 | - | let | |
1247 | - | let | |
1248 | - | then split_51C(value( | |
1277 | + | let eY = split(eU.description, "_") | |
1278 | + | let cl = cr(eY[D]) | |
1279 | + | let eJ = aU(eY[C]) | |
1280 | + | let ca = cq(cl, (eJ / m), 1) | |
1281 | + | let eK = valueOrElse(getInteger(aq(k, aw)), 0) | |
1282 | + | let fQ = getString(ax(V)) | |
1283 | + | let fL = if (isDefined(fQ)) | |
1284 | + | then split_51C(value(fQ), "_") | |
1249 | 1285 | else nil | |
1250 | - | if (containsElement( | |
1251 | - | then throw(("Your staked lands already contain " + | |
1286 | + | if (containsElement(fL, aw)) | |
1287 | + | then throw(("Your staked lands already contain " + aw)) | |
1252 | 1288 | else { | |
1253 | - | let | |
1254 | - | [IntegerEntry( | |
1289 | + | let dv = valueOrElse(getInteger(ap(aw)), 0) | |
1290 | + | [IntegerEntry(eV, lastBlock.timestamp), IntegerEntry(as(i, aw, V), lastBlock.timestamp), StringEntry(ax(V), makeString_11C((fL :+ aw), "_")), StringEntry(al(aw), V), StringEntry(bG(bB), V), IntegerEntry(bF(k, aw, V), eK), IntegerEntry(bE(aw, V), dv), StringEntry(aI(), ca), gd] | |
1255 | 1291 | } | |
1256 | 1292 | } | |
1257 | 1293 | } | |
1262 | 1298 | ||
1263 | 1299 | ||
1264 | 1300 | ||
1265 | - | @Callable( | |
1266 | - | func unstakeLand ( | |
1267 | - | let | |
1268 | - | if ((size( | |
1301 | + | @Callable(cp) | |
1302 | + | func unstakeLand (eP) = { | |
1303 | + | let gd = ga(cp) | |
1304 | + | if ((size(cp.payments) != 0)) | |
1269 | 1305 | then throw("No payments required") | |
1270 | 1306 | else { | |
1271 | - | let | |
1272 | - | let | |
1273 | - | let | |
1274 | - | let | |
1275 | - | let | |
1276 | - | let | |
1277 | - | let | |
1278 | - | let | |
1279 | - | let | |
1280 | - | let | |
1281 | - | if (!(isDefined( | |
1282 | - | then throw(("Your staked lands don't contain " + | |
1307 | + | let ak = toString(cp.caller) | |
1308 | + | let fa = eN(ak, bL, eP) | |
1309 | + | let aw = fa._2 | |
1310 | + | let fP = ax(ak) | |
1311 | + | let cl = cr(fa._3[D]) | |
1312 | + | let eJ = aU(fa._3[C]) | |
1313 | + | let ca = cq(cl, (eJ / m), -1) | |
1314 | + | let ft = fm(ak, aw, eJ, bL) | |
1315 | + | let fL = split_51C(valueOrElse(getString(fP), ""), "_") | |
1316 | + | let af = indexOf(fL, aw) | |
1317 | + | if (!(isDefined(af))) | |
1318 | + | then throw(("Your staked lands don't contain " + aw)) | |
1283 | 1319 | else { | |
1284 | - | let | |
1285 | - | let | |
1286 | - | if (( | |
1287 | - | then throw(("Your gWL are taking part in voting, cannot unstake until " + toString( | |
1288 | - | else [ScriptTransfer( | |
1289 | - | then StringEntry( | |
1290 | - | else DeleteEntry( | |
1320 | + | let cW = value(blockInfoByHeight(height)).timestamp | |
1321 | + | let gg = valueOrElse(getInteger(ai, aK(ak)), 0) | |
1322 | + | if ((gg >= cW)) | |
1323 | + | then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(gg))) | |
1324 | + | else [ScriptTransfer(cp.caller, 1, fromBase58String(aw)), DeleteEntry(ao(aw)), DeleteEntry(as(i, aw, ak)), StringEntry(aI(), ca), StringEntry(ft._2, makeString(ft._3, ":")), if ((size(fL) > 1)) | |
1325 | + | then StringEntry(fP, makeString_11C(removeByIndex(fL, value(af)), "_")) | |
1326 | + | else DeleteEntry(fP), gd] | |
1291 | 1327 | } | |
1292 | 1328 | } | |
1293 | 1329 | } | |
1294 | 1330 | ||
1295 | 1331 | ||
1296 | 1332 | ||
1297 | - | @Callable( | |
1333 | + | @Callable(cp) | |
1298 | 1334 | func stakeDuck () = { | |
1299 | - | let | |
1300 | - | if ((size( | |
1335 | + | let gd = ga(cp) | |
1336 | + | if ((size(cp.payments) != 1)) | |
1301 | 1337 | then throw("Exactly one payment required") | |
1302 | 1338 | else { | |
1303 | - | let | |
1304 | - | let | |
1305 | - | let | |
1306 | - | if (( | |
1339 | + | let ge = value(cp.payments[0]) | |
1340 | + | let am = value(ge.assetId) | |
1341 | + | let V = toString(cp.caller) | |
1342 | + | if ((ge.amount != 1)) | |
1307 | 1343 | then throw((("NFT " + j) + " token should be attached as payment")) | |
1308 | 1344 | else { | |
1309 | - | let | |
1310 | - | if (if (( | |
1311 | - | then ( | |
1345 | + | let eU = value(assetInfo(am)) | |
1346 | + | if (if ((eU.issuer != bi)) | |
1347 | + | then (eU.issuer != bj) | |
1312 | 1348 | else false) | |
1313 | 1349 | then throw((("Unknown issuer of " + j) + " token")) | |
1314 | - | else if (!(contains( | |
1350 | + | else if (!(contains(eU.name, j))) | |
1315 | 1351 | then throw((("Only NFT " + j) + " tokens are accepted")) | |
1316 | 1352 | else { | |
1317 | - | let | |
1318 | - | let | |
1319 | - | if (isDefined(getInteger( | |
1320 | - | then throw((("NFT " + | |
1321 | - | else if (isDefined(getString( | |
1322 | - | then throw(("You already staked one duck: " + | |
1353 | + | let gh = toBase58String(am) | |
1354 | + | let eV = ao(gh) | |
1355 | + | if (isDefined(getInteger(eV))) | |
1356 | + | then throw((("NFT " + eU.name) + " is already staked")) | |
1357 | + | else if (isDefined(getString(aD(V)))) | |
1358 | + | then throw(("You already staked one duck: " + eU.name)) | |
1323 | 1359 | else { | |
1324 | - | let | |
1325 | - | let | |
1326 | - | let | |
1327 | - | let | |
1328 | - | ([IntegerEntry( | |
1360 | + | let gi = aG(gh) | |
1361 | + | let gj = getString(gi) | |
1362 | + | let cY = aE(gh) | |
1363 | + | let gk = getString(cY) | |
1364 | + | ([IntegerEntry(eV, lastBlock.timestamp), IntegerEntry(as(j, toBase58String(am), V), lastBlock.timestamp), StringEntry(aC(gh), V), StringEntry(aD(V), gh)] ++ (if (isDefined(gj)) | |
1329 | 1365 | then nil | |
1330 | - | else ([StringEntry( | |
1366 | + | else ([StringEntry(gi, u)] ++ (if (isDefined(gk)) | |
1331 | 1367 | then nil | |
1332 | - | else (([StringEntry( | |
1368 | + | else (([StringEntry(cY, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(aH(gh), 100)) :+ gd))))) | |
1333 | 1369 | } | |
1334 | 1370 | } | |
1335 | 1371 | } | |
1338 | 1374 | ||
1339 | 1375 | ||
1340 | 1376 | ||
1341 | - | @Callable( | |
1342 | - | func unstakeDuck ( | |
1343 | - | let | |
1344 | - | if ((size( | |
1377 | + | @Callable(cp) | |
1378 | + | func unstakeDuck (gh) = { | |
1379 | + | let gd = ga(cp) | |
1380 | + | if ((size(cp.payments) != 0)) | |
1345 | 1381 | then throw("No payments required") | |
1346 | 1382 | else { | |
1347 | - | let | |
1348 | - | let | |
1349 | - | let | |
1350 | - | let | |
1351 | - | if (!(isDefined(getInteger( | |
1352 | - | then throw((("NFT " + | |
1353 | - | else if (!(isDefined(getString( | |
1354 | - | then throw((("The duck " + | |
1383 | + | let am = fromBase58String(gh) | |
1384 | + | let V = toString(cp.caller) | |
1385 | + | let eU = value(assetInfo(am)) | |
1386 | + | let eV = ao(toBase58String(am)) | |
1387 | + | if (!(isDefined(getInteger(eV)))) | |
1388 | + | then throw((("NFT " + eU.name) + " is not staked")) | |
1389 | + | else if (!(isDefined(getString(aD(V))))) | |
1390 | + | then throw((("The duck " + eU.name) + " is not staked")) | |
1355 | 1391 | else { | |
1356 | - | let | |
1357 | - | if (( | |
1392 | + | let eX = valueOrErrorMessage(getString(aC(toBase58String(am))), (("NFT " + eU.name) + " is orphaned")) | |
1393 | + | if ((eX != V)) | |
1358 | 1394 | then throw("Staked NFT is not yours") | |
1359 | 1395 | else { | |
1360 | - | let | |
1361 | - | let | |
1362 | - | if ((100 > | |
1396 | + | let eB = aH(gh) | |
1397 | + | let gl = valueOrElse(getInteger(eB), 100) | |
1398 | + | if ((100 > gl)) | |
1363 | 1399 | then throw("Please heal your duck before unstaking") | |
1364 | - | else [ScriptTransfer( | |
1400 | + | else [ScriptTransfer(cp.caller, 1, am), DeleteEntry(eV), DeleteEntry(eB), DeleteEntry(aG(gh)), DeleteEntry(aC(gh)), DeleteEntry(as(j, gh, V)), DeleteEntry(aD(V)), gd] | |
1365 | 1401 | } | |
1366 | 1402 | } | |
1367 | 1403 | } | |
1369 | 1405 | ||
1370 | 1406 | ||
1371 | 1407 | ||
1372 | - | @Callable( | |
1373 | - | func claimRes ( | |
1374 | - | let | |
1375 | - | if ((size( | |
1408 | + | @Callable(cp) | |
1409 | + | func claimRes (dI,gm) = { | |
1410 | + | let gd = ga(cp) | |
1411 | + | if ((size(cp.payments) != 0)) | |
1376 | 1412 | then throw("No payments required") | |
1377 | 1413 | else { | |
1378 | - | let | |
1379 | - | let | |
1380 | - | $Tuple2(((( | |
1381 | - | } | |
1382 | - | } | |
1383 | - | ||
1384 | - | ||
1385 | - | ||
1386 | - | @Callable( | |
1387 | - | func claimResToWH ( | |
1388 | - | let | |
1389 | - | if ((size( | |
1414 | + | let ak = toString(cp.originCaller) | |
1415 | + | let ci = eZ(ak, dI, bL, gm) | |
1416 | + | $Tuple2((((ci._1 :+ StringEntry(ci._2, makeString(ci._3, ":"))) :+ StringEntry(ci._4, makeString(ci._5, ":"))) :+ gd), ci._3[P]) | |
1417 | + | } | |
1418 | + | } | |
1419 | + | ||
1420 | + | ||
1421 | + | ||
1422 | + | @Callable(cp) | |
1423 | + | func claimResToWH (dI,gm) = { | |
1424 | + | let gd = ga(cp) | |
1425 | + | if ((size(cp.payments) != 0)) | |
1390 | 1426 | then throw("No payments required") | |
1391 | 1427 | else { | |
1392 | - | let | |
1393 | - | let | |
1394 | - | $Tuple2(((( | |
1395 | - | } | |
1396 | - | } | |
1397 | - | ||
1398 | - | ||
1399 | - | ||
1400 | - | @Callable( | |
1401 | - | func flight ( | |
1402 | - | let | |
1403 | - | if (!(sigVerify_8Kb( | |
1428 | + | let ak = toString(cp.originCaller) | |
1429 | + | let ci = eZ(ak, dI, bK, gm) | |
1430 | + | $Tuple2((((ci._1 :+ StringEntry(ci._2, makeString(ci._3, ":"))) :+ StringEntry(ci._4, makeString(ci._5, ":"))) :+ gd), ci._5[G]) | |
1431 | + | } | |
1432 | + | } | |
1433 | + | ||
1434 | + | ||
1435 | + | ||
1436 | + | @Callable(cp) | |
1437 | + | func flight (eq,er) = { | |
1438 | + | let gd = ga(cp) | |
1439 | + | if (!(sigVerify_8Kb(eq, er, bk))) | |
1404 | 1440 | then throw("signature does not match") | |
1405 | - | else if ((size( | |
1441 | + | else if ((size(cp.payments) != 0)) | |
1406 | 1442 | then throw("No payments required") | |
1407 | 1443 | else { | |
1408 | - | let | |
1409 | - | let | |
1410 | - | let | |
1411 | - | let | |
1412 | - | let | |
1413 | - | let | |
1414 | - | let | |
1415 | - | let | |
1416 | - | if (if (( | |
1444 | + | let dc = split(toUtf8String(eq), ";") | |
1445 | + | let es = split(dc[0], "|") | |
1446 | + | let et = split(es[bN], "_") | |
1447 | + | let eu = parseIntValue(et[0]) | |
1448 | + | let ev = parseIntValue(et[1]) | |
1449 | + | let ew = split(dc[1], ":") | |
1450 | + | let ex = ew[0] | |
1451 | + | let ey = parseIntValue(es[bO]) | |
1452 | + | if (if ((ey > (lastBlock.timestamp + bm))) | |
1417 | 1453 | then true | |
1418 | - | else ((lastBlock.timestamp - | |
1454 | + | else ((lastBlock.timestamp - bm) > ey)) | |
1419 | 1455 | then throw("signature outdated") | |
1420 | 1456 | else { | |
1421 | - | let | |
1422 | - | let | |
1423 | - | if (( | |
1424 | - | then throw(((("Tx ids don't match! In state: " + | |
1457 | + | let ez = ew[1] | |
1458 | + | let eA = valueOrElse(getString(aj(toString(cp.originCaller))), "") | |
1459 | + | if ((eA != ez)) | |
1460 | + | then throw(((("Tx ids don't match! In state: " + eA) + ", in msg: ") + ez)) | |
1425 | 1461 | else { | |
1426 | - | let | |
1427 | - | let | |
1428 | - | let | |
1429 | - | let | |
1430 | - | if (( | |
1431 | - | then throw(((("oldHealth=" + toString(valueOrElse(getInteger( | |
1432 | - | else if ((0 >= | |
1462 | + | let aL = toString(cp.caller) | |
1463 | + | let aF = valueOrErrorMessage(getString(aD(aL)), "You don't have a duck staked") | |
1464 | + | let eB = aH(aF) | |
1465 | + | let eC = valueOrElse(getInteger(eB), 100) | |
1466 | + | if ((eC != eu)) | |
1467 | + | then throw(((("oldHealth=" + toString(valueOrElse(getInteger(eB), 100))) + " from state does not match one from flight log=") + toString(eu))) | |
1468 | + | else if ((0 >= eu)) | |
1433 | 1469 | then throw("You can't fly with zero health") | |
1434 | 1470 | else { | |
1435 | - | let | |
1436 | - | let | |
1437 | - | if (( | |
1471 | + | let gi = aG(aF) | |
1472 | + | let eR = valueOrElse(getString(gi), u) | |
1473 | + | if ((ex == eR)) | |
1438 | 1474 | then throw("You can't fly to the same location") | |
1439 | 1475 | else { | |
1440 | - | let | |
1441 | - | then | |
1476 | + | let eD = if ((size(es) > bP)) | |
1477 | + | then es[bP] | |
1442 | 1478 | else "" | |
1443 | - | let | |
1444 | - | then ( | |
1479 | + | let eE = if (if ((ev > 0)) | |
1480 | + | then (eD == "$") | |
1445 | 1481 | else false) | |
1446 | - | then | |
1482 | + | then aS(invoke(ag, "sendUsdtPrize", [aL], nil)) | |
1447 | 1483 | else 0 | |
1448 | - | $Tuple2([StringEntry( | |
1449 | - | then | |
1450 | - | else | |
1484 | + | $Tuple2([StringEntry(gi, if ((ev > 0)) | |
1485 | + | then ex | |
1486 | + | else eR), IntegerEntry(eB, ev), gd], eE) | |
1451 | 1487 | } | |
1452 | 1488 | } | |
1453 | 1489 | } | |
1457 | 1493 | ||
1458 | 1494 | ||
1459 | 1495 | ||
1460 | - | @Callable( | |
1461 | - | func setHealth ( | |
1462 | - | let | |
1463 | - | if (if ((0 > | |
1496 | + | @Callable(cp) | |
1497 | + | func setHealth (gl,aF) = { | |
1498 | + | let gd = ga(cp) | |
1499 | + | if (if ((0 > gl)) | |
1464 | 1500 | then true | |
1465 | - | else ( | |
1501 | + | else (gl > 100)) | |
1466 | 1502 | then throw("HP should be within 0..100") | |
1467 | - | else [IntegerEntry(aF | |
1468 | - | } | |
1469 | - | ||
1470 | - | ||
1471 | - | ||
1472 | - | @Callable( | |
1473 | - | func heal ( | |
1474 | - | let | |
1475 | - | if (if ((1 > | |
1503 | + | else [IntegerEntry(aH(aF), gl), gd] | |
1504 | + | } | |
1505 | + | ||
1506 | + | ||
1507 | + | ||
1508 | + | @Callable(cp) | |
1509 | + | func heal (gn,go) = { | |
1510 | + | let gd = ga(cp) | |
1511 | + | if (if ((1 > gn)) | |
1476 | 1512 | then true | |
1477 | - | else ( | |
1513 | + | else (gn > 3)) | |
1478 | 1514 | then throw("MedKit levels 1..3 only") | |
1479 | - | else if ((0 >= | |
1480 | - | then throw(("Quantity should be positive! " + toString( | |
1515 | + | else if ((0 >= go)) | |
1516 | + | then throw(("Quantity should be positive! " + toString(go))) | |
1481 | 1517 | else { | |
1482 | - | let | |
1483 | - | let | |
1484 | - | let | |
1485 | - | if (( | |
1518 | + | let aF = valueOrErrorMessage(getString(aD(toString(cp.caller))), "You don't have a duck staked") | |
1519 | + | let eB = aH(aF) | |
1520 | + | let gp = valueOrElse(getInteger(eB), 100) | |
1521 | + | if ((gp >= 100)) | |
1486 | 1522 | then throw("HP should be < 100 to heal") | |
1487 | 1523 | else { | |
1488 | - | let | |
1489 | - | let | |
1490 | - | let | |
1491 | - | let | |
1524 | + | let cY = aE(aF) | |
1525 | + | let dL = cX(cY) | |
1526 | + | let gq = (gn - 1) | |
1527 | + | let gr = if ((dL[R] == "")) | |
1492 | 1528 | then nil | |
1493 | - | else split( | |
1494 | - | let | |
1495 | - | then parseIntValue( | |
1529 | + | else split(dL[R], "_") | |
1530 | + | let gs = if ((size(gr) > gq)) | |
1531 | + | then parseIntValue(gr[gq]) | |
1496 | 1532 | else 0 | |
1497 | - | if (( | |
1498 | - | then throw(((("You have only " + toString( | |
1533 | + | if ((go > gs)) | |
1534 | + | then throw(((("You have only " + toString(gs)) + " of ") + x[gq])) | |
1499 | 1535 | else { | |
1500 | - | func | |
1501 | - | let | |
1502 | - | let | |
1503 | - | then parseIntValue( | |
1536 | + | func gt (bX,gu) = { | |
1537 | + | let aT = bX._2 | |
1538 | + | let cL = if ((size(gr) > aT)) | |
1539 | + | then parseIntValue(gr[aT]) | |
1504 | 1540 | else 0 | |
1505 | - | let | |
1506 | - | then ( | |
1507 | - | else | |
1508 | - | $Tuple2(( | |
1541 | + | let gv = toString(if ((aT == gq)) | |
1542 | + | then (cL - go) | |
1543 | + | else cL) | |
1544 | + | $Tuple2((bX._1 :+ gv), (aT + 1)) | |
1509 | 1545 | } | |
1510 | 1546 | ||
1511 | - | let | |
1512 | - | let | |
1513 | - | let | |
1514 | - | func | |
1515 | - | then | |
1516 | - | else | |
1517 | - | ||
1518 | - | func | |
1519 | - | then | |
1547 | + | let gw = ( let bb = z | |
1548 | + | let bc = size(bb) | |
1549 | + | let bd = $Tuple2(nil, 0) | |
1550 | + | func be (bf,bg) = if ((bg >= bc)) | |
1551 | + | then bf | |
1552 | + | else gt(bf, bb[bg]) | |
1553 | + | ||
1554 | + | func bh (bf,bg) = if ((bg >= bc)) | |
1555 | + | then bf | |
1520 | 1556 | else throw("List size exceeds 50") | |
1521 | 1557 | ||
1522 | - | | |
1523 | - | let | |
1524 | - | $Tuple2([IntegerEntry( | |
1558 | + | bh(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(bd, 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))._1 | |
1559 | + | let gx = (gp + bl[(gn - 1)]) | |
1560 | + | $Tuple2([IntegerEntry(eB, gx), StringEntry(cY, makeString_2C([dL[O], dL[P], dL[Q], makeString(gw, "_")], ":")), gd], gx) | |
1525 | 1561 | } | |
1526 | 1562 | } | |
1527 | 1563 | } | |
1529 | 1565 | ||
1530 | 1566 | ||
1531 | 1567 | ||
1532 | - | @Callable(cf) | |
1533 | - | func healES (gd,ge) = { | |
1534 | - | let fT = fQ(cf) | |
1535 | - | $Tuple2([fT], 0) | |
1536 | - | } | |
1537 | - | ||
1538 | - | ||
1539 | - | ||
1540 | - | @Callable(cf) | |
1541 | - | func updateBackpack (aD,go) = { | |
1542 | - | let fT = fQ(cf) | |
1543 | - | if ((cf.caller != af)) | |
1568 | + | @Callable(cp) | |
1569 | + | func healES () = { | |
1570 | + | let gd = ga(cp) | |
1571 | + | if ((size(cp.payments) != 1)) | |
1572 | + | then throw("Exactly one payment required") | |
1573 | + | else { | |
1574 | + | let ge = value(cp.payments[0]) | |
1575 | + | if ((ge.assetId != b)) | |
1576 | + | then throw("Allowed USDT payment only!") | |
1577 | + | else { | |
1578 | + | let aF = valueOrErrorMessage(getString(aD(toString(cp.caller))), "You don't have a duck staked") | |
1579 | + | let eB = aH(aF) | |
1580 | + | let gp = valueOrElse(getInteger(eB), 100) | |
1581 | + | if ((gp > 0)) | |
1582 | + | then throw("HP should be 0 to call Emergency Service") | |
1583 | + | else { | |
1584 | + | let cY = aE(aF) | |
1585 | + | let dL = cX(cY) | |
1586 | + | let gr = if ((dL[R] == "")) | |
1587 | + | then nil | |
1588 | + | else split(dL[R], "_") | |
1589 | + | let gy = if ((size(gr) > 0)) | |
1590 | + | then parseIntValue(gr[0]) | |
1591 | + | else 0 | |
1592 | + | let gz = if ((size(gr) > 1)) | |
1593 | + | then parseIntValue(gr[1]) | |
1594 | + | else 0 | |
1595 | + | let gA = if ((size(gr) > 2)) | |
1596 | + | then parseIntValue(gr[2]) | |
1597 | + | else 0 | |
1598 | + | if (if (if ((gy > 0)) | |
1599 | + | then true | |
1600 | + | else (gz > 0)) | |
1601 | + | then true | |
1602 | + | else (gA > 0)) | |
1603 | + | then throw("You have to use own Medical Kit") | |
1604 | + | else { | |
1605 | + | let gB = getString(ah, aM()) | |
1606 | + | let gC = if (isDefined(gB)) | |
1607 | + | then split(value(gB), "_") | |
1608 | + | else nil | |
1609 | + | let gD = if ((size(gC) > 0)) | |
1610 | + | then parseIntValue(gC[0]) | |
1611 | + | else 0 | |
1612 | + | if ((0 >= gD)) | |
1613 | + | then throw("There are no Medical Kits L1 at Emergency Service storage") | |
1614 | + | else { | |
1615 | + | let gx = (gp + bl[0]) | |
1616 | + | let gE = makeString([toString((gD - 1)), removeByIndex(gC, 0)], "_") | |
1617 | + | let aX = split(z[0], "_") | |
1618 | + | let gF = aW(aX) | |
1619 | + | let gG = fraction((gF * w), v, 10) | |
1620 | + | if ((ge.amount != gG)) | |
1621 | + | then throw(("Payment attached should be " + toString(gG))) | |
1622 | + | else { | |
1623 | + | let ci = aP(invoke(ah, "updateEsStorage", [gE], nil)) | |
1624 | + | $Tuple2([IntegerEntry(eB, gx), gd], ci) | |
1625 | + | } | |
1626 | + | } | |
1627 | + | } | |
1628 | + | } | |
1629 | + | } | |
1630 | + | } | |
1631 | + | } | |
1632 | + | ||
1633 | + | ||
1634 | + | ||
1635 | + | @Callable(cp) | |
1636 | + | func updateBackpack (aF,gH) = { | |
1637 | + | let gd = ga(cp) | |
1638 | + | if ((cp.caller != ah)) | |
1544 | 1639 | then throw("permission denied") | |
1545 | - | else $Tuple2([StringEntry( | |
1546 | - | } | |
1547 | - | ||
1548 | - | ||
1549 | - | ||
1550 | - | @Callable( | |
1640 | + | else $Tuple2([StringEntry(aE(aF), gH), gd], gH) | |
1641 | + | } | |
1642 | + | ||
1643 | + | ||
1644 | + | ||
1645 | + | @Callable(cp) | |
1551 | 1646 | func buySLand () = { | |
1552 | - | let | |
1553 | - | if ((size( | |
1647 | + | let gd = ga(cp) | |
1648 | + | if ((size(cp.payments) != 1)) | |
1554 | 1649 | then throw("Exactly one payment required") | |
1555 | 1650 | else { | |
1556 | - | let | |
1557 | - | if (( | |
1651 | + | let ge = value(cp.payments[0]) | |
1652 | + | if ((ge.assetId != b)) | |
1558 | 1653 | then throw("Allowed USDT payment only!") | |
1559 | - | else if (( | |
1560 | - | then throw(("Payment attached should be " + toString( | |
1654 | + | else if ((ge.amount != br)) | |
1655 | + | then throw(("Payment attached should be " + toString(br))) | |
1561 | 1656 | else { | |
1562 | - | let | |
1563 | - | $Tuple2((( | |
1657 | + | let ci = eh(cp.caller, cp.transactionId) | |
1658 | + | $Tuple2(((ci._1 :+ ScriptTransfer(ah, ge.amount, b)) :+ gd), ci._2._1) | |
1564 | 1659 | } | |
1565 | 1660 | } | |
1566 | 1661 | } | |
1567 | 1662 | ||
1568 | 1663 | ||
1569 | 1664 | ||
1570 | - | @Callable( | |
1571 | - | func expedition ( | |
1572 | - | let | |
1573 | - | if ((size( | |
1665 | + | @Callable(cp) | |
1666 | + | func expedition (eq,er) = { | |
1667 | + | let gd = ga(cp) | |
1668 | + | if ((size(cp.payments) != 0)) | |
1574 | 1669 | then throw("No payments required") | |
1575 | 1670 | else { | |
1576 | - | let | |
1577 | - | $Tuple2(( | |
1578 | - | } | |
1579 | - | } | |
1580 | - | ||
1581 | - | ||
1582 | - | ||
1583 | - | @Callable( | |
1584 | - | func upgradeInfra ( | |
1585 | - | let | |
1586 | - | if ((size( | |
1671 | + | let ci = ep(true, cp.caller, cp.transactionId, eq, er) | |
1672 | + | $Tuple2((ci._1 :+ gd), $Tuple2(ci._2, ci._3)) | |
1673 | + | } | |
1674 | + | } | |
1675 | + | ||
1676 | + | ||
1677 | + | ||
1678 | + | @Callable(cp) | |
1679 | + | func upgradeInfra (aw) = { | |
1680 | + | let gd = ga(cp) | |
1681 | + | if ((size(cp.payments) != 0)) | |
1587 | 1682 | then throw("No payments required") | |
1588 | 1683 | else { | |
1589 | - | let | |
1590 | - | $Tuple2(( | |
1591 | - | } | |
1592 | - | } | |
1593 | - | ||
1594 | - | ||
1595 | - | ||
1596 | - | @Callable( | |
1597 | - | func upgradeInfraUsdt ( | |
1684 | + | let ci = fn(true, cp.caller, 0, aw) | |
1685 | + | $Tuple2((ci._1 :+ gd), ci._2) | |
1686 | + | } | |
1687 | + | } | |
1688 | + | ||
1689 | + | ||
1690 | + | ||
1691 | + | @Callable(cp) | |
1692 | + | func upgradeInfraUsdt (aw) = if ((cp.caller != this)) | |
1598 | 1693 | then throw("Permission denied") | |
1599 | 1694 | else { | |
1600 | - | let | |
1601 | - | if ((size( | |
1695 | + | let gd = ga(cp) | |
1696 | + | if ((size(cp.payments) != 1)) | |
1602 | 1697 | then throw("Exactly one payment required") | |
1603 | 1698 | else { | |
1604 | - | let | |
1605 | - | if (( | |
1699 | + | let ge = value(cp.payments[0]) | |
1700 | + | if ((ge.assetId != b)) | |
1606 | 1701 | then throw("Allowed USDT payment only!") | |
1607 | 1702 | else { | |
1608 | - | let | |
1609 | - | $Tuple2((( | |
1703 | + | let ci = fn(false, cp.caller, ge.amount, aw) | |
1704 | + | $Tuple2(((ci._1 :+ ScriptTransfer(ah, ge.amount, b)) :+ gd), ci._2) | |
1610 | 1705 | } | |
1611 | 1706 | } | |
1612 | 1707 | } | |
1613 | 1708 | ||
1614 | 1709 | ||
1615 | 1710 | ||
1616 | - | @Callable( | |
1617 | - | func activateArtifact ( | |
1618 | - | let | |
1619 | - | if ((size( | |
1711 | + | @Callable(cp) | |
1712 | + | func activateArtifact (gI,aw) = { | |
1713 | + | let gd = ga(cp) | |
1714 | + | if ((size(cp.payments) != 0)) | |
1620 | 1715 | then throw("No payments required") | |
1621 | 1716 | else { | |
1622 | - | let | |
1623 | - | let c = | |
1717 | + | let ci = { | |
1718 | + | let c = gI | |
1624 | 1719 | if (("PRESALE" == c)) | |
1625 | - | then | |
1720 | + | then fz(toString(cp.caller), aw) | |
1626 | 1721 | else throw("Unknown artifact") | |
1627 | 1722 | } | |
1628 | - | ( | |
1629 | - | } | |
1630 | - | } | |
1631 | - | ||
1632 | - | ||
1633 | - | ||
1634 | - | @Callable( | |
1635 | - | func mergeLands ( | |
1636 | - | let | |
1637 | - | if ((size( | |
1723 | + | (ci :+ gd) | |
1724 | + | } | |
1725 | + | } | |
1726 | + | ||
1727 | + | ||
1728 | + | ||
1729 | + | @Callable(cp) | |
1730 | + | func mergeLands (fE) = { | |
1731 | + | let gd = ga(cp) | |
1732 | + | if ((size(cp.payments) != 0)) | |
1638 | 1733 | then throw("No payments required") | |
1639 | 1734 | else { | |
1640 | - | let | |
1641 | - | $Tuple2(( | |
1642 | - | } | |
1643 | - | } | |
1644 | - | ||
1645 | - | ||
1646 | - | ||
1647 | - | @Callable( | |
1648 | - | func mergeLandsUsdt ( | |
1649 | - | let | |
1650 | - | if ((size( | |
1735 | + | let ci = fY(true, toString(cp.caller), 0, fE, cp.transactionId) | |
1736 | + | $Tuple2((ci._1 :+ gd), ci._2) | |
1737 | + | } | |
1738 | + | } | |
1739 | + | ||
1740 | + | ||
1741 | + | ||
1742 | + | @Callable(cp) | |
1743 | + | func mergeLandsUsdt (fE) = { | |
1744 | + | let gd = ga(cp) | |
1745 | + | if ((size(cp.payments) != 1)) | |
1651 | 1746 | then throw("Exactly one payment required") | |
1652 | 1747 | else { | |
1653 | - | let | |
1654 | - | if (( | |
1748 | + | let ge = value(cp.payments[0]) | |
1749 | + | if ((ge.assetId != b)) | |
1655 | 1750 | then throw("Allowed USDT payment only!") | |
1656 | 1751 | else { | |
1657 | - | let | |
1658 | - | $Tuple2((( | |
1752 | + | let ci = fY(false, toString(cp.caller), ge.amount, fE, cp.transactionId) | |
1753 | + | $Tuple2(((ci._1 :+ ScriptTransfer(ah, ge.amount, b)) :+ gd), ci._2) | |
1659 | 1754 | } | |
1660 | 1755 | } | |
1661 | 1756 | } | |
1662 | 1757 | ||
1663 | 1758 | ||
1664 | 1759 | ||
1665 | - | @Callable( | |
1666 | - | func cargoExchange ( | |
1667 | - | let | |
1668 | - | if ((size( | |
1760 | + | @Callable(cp) | |
1761 | + | func cargoExchange (gJ,aw) = { | |
1762 | + | let gd = ga(cp) | |
1763 | + | if ((size(cp.payments) != 0)) | |
1669 | 1764 | then throw("No payments required") | |
1670 | 1765 | else { | |
1671 | - | let | |
1672 | - | let | |
1673 | - | let | |
1674 | - | let | |
1675 | - | if (!(isDefined(getInteger( | |
1676 | - | then throw(( | |
1766 | + | let dK = split_4C(gJ, ":") | |
1767 | + | let ak = toString(cp.originCaller) | |
1768 | + | let eU = value(assetInfo(fromBase58String(aw))) | |
1769 | + | let eV = ao(aw) | |
1770 | + | if (!(isDefined(getInteger(eV)))) | |
1771 | + | then throw((eU.name + " is not staked")) | |
1677 | 1772 | else { | |
1678 | - | let | |
1679 | - | if (( | |
1773 | + | let eX = valueOrErrorMessage(getString(al(aw)), (("NFT " + eU.name) + " is orphaned")) | |
1774 | + | if ((eX != ak)) | |
1680 | 1775 | then throw((i + " is not yours")) | |
1681 | 1776 | else { | |
1682 | - | let | |
1683 | - | let | |
1684 | - | let | |
1685 | - | let | |
1686 | - | let | |
1687 | - | if (( | |
1688 | - | then throw((("Duck location type is " + | |
1689 | - | else if (( | |
1690 | - | then throw(("Duck should be on the land " + | |
1777 | + | let du = (aU(split(eU.description, "_")[C]) / m) | |
1778 | + | let dv = valueOrElse(getInteger(ap(aw)), 0) | |
1779 | + | let aF = valueOrErrorMessage(getString(aD(ak)), "You don't have a duck staked") | |
1780 | + | let eR = valueOrElse(getString(aG(aF)), u) | |
1781 | + | let eS = split(value(eR), "_") | |
1782 | + | if ((eS[aN] != "L")) | |
1783 | + | then throw((("Duck location type is " + eS[aN]) + ", but should be L")) | |
1784 | + | else if ((eS[aO] != aw)) | |
1785 | + | then throw(("Duck should be on the land " + aw)) | |
1691 | 1786 | else { | |
1692 | - | let | |
1693 | - | let | |
1694 | - | let | |
1695 | - | let | |
1696 | - | let | |
1697 | - | let | |
1698 | - | let | |
1699 | - | let | |
1700 | - | [StringEntry( | |
1787 | + | let dt = av(aw) | |
1788 | + | let de = ds(dt, du, dv) | |
1789 | + | let cY = aE(aF) | |
1790 | + | let dL = cX(cY) | |
1791 | + | let ci = dJ(dK, de, dL) | |
1792 | + | let dB = split(de[J], "_") | |
1793 | + | let fk = (parseIntValue(dB[L]) + ci._7) | |
1794 | + | let fl = (parseIntValue(dB[M]) - ci._7) | |
1795 | + | [StringEntry(cY, makeString_2C([dL[O], ci._4, ci._5, ci._6], ":")), StringEntry(dt, makeString_2C([de[F], ci._1, ci._2, ci._3, makeString([dB[K], toString(fk), toString(fl), dB[N]], "_")], ":")), gd] | |
1701 | 1796 | } | |
1702 | 1797 | } | |
1703 | 1798 | } | |
1706 | 1801 | ||
1707 | 1802 | ||
1708 | 1803 | ||
1709 | - | @Callable( | |
1710 | - | func saveWarehouse ( | |
1711 | - | let | |
1712 | - | if (( | |
1804 | + | @Callable(cp) | |
1805 | + | func saveWarehouse (dx,aw) = { | |
1806 | + | let gd = ga(cp) | |
1807 | + | if ((cp.caller != ah)) | |
1713 | 1808 | then throw("Access denied") | |
1714 | 1809 | else { | |
1715 | - | let | |
1716 | - | let | |
1717 | - | if ((size( | |
1810 | + | let dt = av(aw) | |
1811 | + | let dy = split_4C(dx, ":") | |
1812 | + | if ((size(dy) != 5)) | |
1718 | 1813 | then throw("warehouse string should contain 4 ':' separators") | |
1719 | 1814 | else { | |
1720 | - | let | |
1721 | - | let | |
1722 | - | let | |
1723 | - | let | |
1724 | - | let | |
1725 | - | $Tuple2([StringEntry( | |
1815 | + | let gK = split(dy[J], "_")[K] | |
1816 | + | let fk = dd(dy) | |
1817 | + | let gL = da(dy[F]) | |
1818 | + | let fl = ((gL - parseIntValue(gK)) - fk) | |
1819 | + | let gM = makeString_2C([dy[F], dy[G], dy[H], dy[I], makeString([gK, toString(fk), toString(fl), toString(gL)], "_")], ":") | |
1820 | + | $Tuple2([StringEntry(dt, gM), gd], gM) | |
1726 | 1821 | } | |
1727 | 1822 | } | |
1728 | 1823 | } | |
1729 | 1824 | ||
1730 | 1825 | ||
1731 | 1826 | ||
1732 | - | @Callable( | |
1733 | - | func fixWarehouseFormat ( | |
1827 | + | @Callable(cp) | |
1828 | + | func fixWarehouseFormat (aw) = if ((cp.caller != ag)) | |
1734 | 1829 | then throw("Access denied") | |
1735 | 1830 | else { | |
1736 | - | let | |
1737 | - | let | |
1738 | - | let | |
1739 | - | let | |
1740 | - | let | |
1741 | - | let | |
1742 | - | let | |
1743 | - | let | |
1744 | - | let | |
1745 | - | let | |
1746 | - | $Tuple2([StringEntry( | |
1831 | + | let dt = av(aw) | |
1832 | + | let eU = value(assetInfo(fromBase58String(aw))) | |
1833 | + | let du = (aU(split(eU.description, "_")[C]) / m) | |
1834 | + | let dv = valueOrElse(getInteger(ap(aw)), 0) | |
1835 | + | let dy = ds(dt, du, dv) | |
1836 | + | let gK = aS(invoke(ah, "recalcLockedVolumeREADONLY", [aw, dy], nil)) | |
1837 | + | let fk = dd(dy) | |
1838 | + | let gL = da(dy[F]) | |
1839 | + | let fl = ((gL - gK) - fk) | |
1840 | + | let gM = makeString_2C([dy[F], dy[G], dy[H], dy[I], makeString([toString(gK), toString(fk), toString(fl), toString(gL)], "_")], ":") | |
1841 | + | $Tuple2([StringEntry(dt, gM)], gM) | |
1747 | 1842 | } | |
1748 | 1843 | ||
1749 | 1844 | ||
1750 | 1845 | ||
1751 | - | @Callable( | |
1752 | - | func setCustomName ( | |
1753 | - | let | |
1754 | - | if ((size( | |
1846 | + | @Callable(cp) | |
1847 | + | func setCustomName (am,fN,ar) = { | |
1848 | + | let gd = ga(cp) | |
1849 | + | if ((size(cp.payments) != 1)) | |
1755 | 1850 | then throw("Exactly one payment required") | |
1756 | 1851 | else { | |
1757 | - | let | |
1758 | - | if (( | |
1852 | + | let ge = value(cp.payments[0]) | |
1853 | + | if ((ge.assetId != b)) | |
1759 | 1854 | then throw("Allowed USDT payment only!") | |
1760 | - | else if (( | |
1761 | - | then throw(("Payment should be " + toString( | |
1762 | - | else if (contains( | |
1763 | - | then throw(("Name should not contain '__': " + | |
1764 | - | else if ((size( | |
1765 | - | then throw(("Name too long, maxLength=" + toString( | |
1855 | + | else if ((ge.amount != bn)) | |
1856 | + | then throw(("Payment should be " + toString(bn))) | |
1857 | + | else if (contains(fN, "__")) | |
1858 | + | then throw(("Name should not contain '__': " + fN)) | |
1859 | + | else if ((size(fN) > bo)) | |
1860 | + | then throw(("Name too long, maxLength=" + toString(bo))) | |
1766 | 1861 | else { | |
1767 | - | let | |
1768 | - | let | |
1769 | - | let c = | |
1862 | + | let ak = toString(cp.originCaller) | |
1863 | + | let gN = { | |
1864 | + | let c = ar | |
1770 | 1865 | if (("ACCOUNT" == c)) | |
1771 | 1866 | then { | |
1772 | - | let | |
1773 | - | let | |
1774 | - | if (isDefined( | |
1775 | - | then throw(("Name already registered: " + | |
1867 | + | let gO = bI(fN) | |
1868 | + | let gP = getString(gO) | |
1869 | + | if (isDefined(gP)) | |
1870 | + | then throw(("Name already registered: " + fN)) | |
1776 | 1871 | else { | |
1777 | - | let | |
1778 | - | let | |
1779 | - | let | |
1780 | - | then [DeleteEntry( | |
1872 | + | let gQ = az(ak) | |
1873 | + | let gR = getString(gQ) | |
1874 | + | let gS = if (isDefined(gR)) | |
1875 | + | then [DeleteEntry(bI(value(gR)))] | |
1781 | 1876 | else nil | |
1782 | - | (( | |
1877 | + | ((gS :+ StringEntry(gQ, fN)) :+ StringEntry(gO, ak)) | |
1783 | 1878 | } | |
1784 | 1879 | } | |
1785 | 1880 | else if (("LAND" == c)) | |
1786 | 1881 | then { | |
1787 | - | let | |
1788 | - | let | |
1789 | - | if (!(isDefined(getInteger( | |
1790 | - | then throw(( | |
1882 | + | let eU = value(assetInfo(fromBase58String(am))) | |
1883 | + | let eV = ao(am) | |
1884 | + | if (!(isDefined(getInteger(eV)))) | |
1885 | + | then throw((eU.name + " is not staked")) | |
1791 | 1886 | else { | |
1792 | - | let | |
1793 | - | if (( | |
1887 | + | let eX = valueOrErrorMessage(getString(al(am)), (("NFT " + eU.name) + " is orphaned")) | |
1888 | + | if ((eX != ak)) | |
1794 | 1889 | then throw((i + " is not yours")) | |
1795 | 1890 | else { | |
1796 | - | let | |
1797 | - | let | |
1798 | - | if (isDefined( | |
1799 | - | then throw(("Name already registered: " + | |
1891 | + | let gO = bC(fN) | |
1892 | + | let gP = getString(gO) | |
1893 | + | if (isDefined(gP)) | |
1894 | + | then throw(("Name already registered: " + fN)) | |
1800 | 1895 | else { | |
1801 | - | let | |
1802 | - | let | |
1803 | - | let | |
1804 | - | then [DeleteEntry( | |
1896 | + | let gT = an(am) | |
1897 | + | let gR = getString(gT) | |
1898 | + | let gS = if (isDefined(gR)) | |
1899 | + | then [DeleteEntry(bC(value(gR)))] | |
1805 | 1900 | else nil | |
1806 | - | (( | |
1901 | + | ((gS :+ StringEntry(gT, fN)) :+ StringEntry(gO, am)) | |
1807 | 1902 | } | |
1808 | 1903 | } | |
1809 | 1904 | } | |
1810 | 1905 | } | |
1811 | 1906 | else if (("DUCK" == c)) | |
1812 | 1907 | then { | |
1813 | - | let | |
1814 | - | let | |
1815 | - | if (if (!(isDefined(getInteger( | |
1908 | + | let eU = value(assetInfo(fromBase58String(am))) | |
1909 | + | let eV = ao(am) | |
1910 | + | if (if (!(isDefined(getInteger(eV)))) | |
1816 | 1911 | then true | |
1817 | - | else !(isDefined(getString( | |
1818 | - | then throw(( | |
1912 | + | else !(isDefined(getString(aD(ak))))) | |
1913 | + | then throw((eU.name + " is not staked")) | |
1819 | 1914 | else { | |
1820 | - | let | |
1821 | - | if (( | |
1915 | + | let eX = valueOrErrorMessage(getString(aC(am)), (("NFT " + eU.name) + " is orphaned")) | |
1916 | + | if ((eX != ak)) | |
1822 | 1917 | then throw((j + " is not yours")) | |
1823 | 1918 | else { | |
1824 | - | let | |
1825 | - | let | |
1826 | - | if (isDefined( | |
1827 | - | then throw(("Name already registered: " + | |
1919 | + | let gO = bH(fN) | |
1920 | + | let gP = getString(gO) | |
1921 | + | if (isDefined(gP)) | |
1922 | + | then throw(("Name already registered: " + fN)) | |
1828 | 1923 | else { | |
1829 | - | let | |
1830 | - | let | |
1831 | - | let | |
1832 | - | then [DeleteEntry( | |
1924 | + | let gT = ay(am) | |
1925 | + | let gR = getString(gT) | |
1926 | + | let gS = if (isDefined(gR)) | |
1927 | + | then [DeleteEntry(bH(value(gR)))] | |
1833 | 1928 | else nil | |
1834 | - | (( | |
1929 | + | ((gS :+ StringEntry(gT, fN)) :+ StringEntry(gO, am)) | |
1835 | 1930 | } | |
1836 | 1931 | } | |
1837 | 1932 | } | |
1838 | 1933 | } | |
1839 | 1934 | else throw("Unknown entity type") | |
1840 | 1935 | } | |
1841 | - | $Tuple2((( | |
1936 | + | $Tuple2(((gN :+ ScriptTransfer(ah, ge.amount, b)) :+ gd), 0) | |
1842 | 1937 | } | |
1843 | 1938 | } | |
1844 | 1939 | } | |
1845 | 1940 | ||
1846 | 1941 | ||
1847 | 1942 | ||
1848 | - | @Callable( | |
1849 | - | func setReferrals ( | |
1943 | + | @Callable(cp) | |
1944 | + | func setReferrals (gU,gV) = if ((cp.callerPublicKey != bk)) | |
1850 | 1945 | then throw("Permission denied") | |
1851 | 1946 | else { | |
1852 | - | let | |
1853 | - | if ((size( | |
1947 | + | let gd = ga(cp) | |
1948 | + | if ((size(cp.payments) != 0)) | |
1854 | 1949 | then throw("No payments required") | |
1855 | - | else if (!(isDefined(addressFromString( | |
1856 | - | then throw(("Invalid address: " + | |
1857 | - | else if (!(isDefined(addressFromString( | |
1858 | - | then throw(("Invalid address: " + | |
1950 | + | else if (!(isDefined(addressFromString(gU)))) | |
1951 | + | then throw(("Invalid address: " + gU)) | |
1952 | + | else if (!(isDefined(addressFromString(gV)))) | |
1953 | + | then throw(("Invalid address: " + gV)) | |
1859 | 1954 | else { | |
1860 | - | let | |
1861 | - | let | |
1862 | - | let | |
1863 | - | then split_4C(value( | |
1955 | + | let gW = bJ() | |
1956 | + | let gX = getString(gW) | |
1957 | + | let gY = if (isDefined(gX)) | |
1958 | + | then split_4C(value(gX), "_") | |
1864 | 1959 | else nil | |
1865 | - | if (containsElement( | |
1866 | - | then throw(( | |
1960 | + | if (containsElement(gY, gV)) | |
1961 | + | then throw((gV + " is not newbie (already has referrals)")) | |
1867 | 1962 | else { | |
1868 | - | let | |
1869 | - | let | |
1870 | - | if (if (isDefined( | |
1871 | - | then isDefined(addressFromString(value( | |
1963 | + | let gZ = aA(gV) | |
1964 | + | let ha = getString(gZ) | |
1965 | + | if (if (isDefined(ha)) | |
1966 | + | then isDefined(addressFromString(value(ha))) | |
1872 | 1967 | else false) | |
1873 | - | then throw((( | |
1968 | + | then throw(((gV + " already has refBy: ") + value(ha))) | |
1874 | 1969 | else { | |
1875 | - | let | |
1876 | - | let | |
1877 | - | let | |
1878 | - | then split_4C(value( | |
1970 | + | let hb = aB(gU) | |
1971 | + | let hc = getString(hb) | |
1972 | + | let hd = if (isDefined(hc)) | |
1973 | + | then split_4C(value(hc), "_") | |
1879 | 1974 | else nil | |
1880 | - | if (containsElement( | |
1881 | - | then throw(((( | |
1975 | + | if (containsElement(hd, gV)) | |
1976 | + | then throw((((gU + " already contains ") + gV) + " within referrals")) | |
1882 | 1977 | else { | |
1883 | - | let | |
1884 | - | let | |
1885 | - | $Tuple2([StringEntry( | |
1978 | + | let he = makeString_2C((hd :+ gV), "_") | |
1979 | + | let hf = makeString_2C((gY :+ gU), "_") | |
1980 | + | $Tuple2([StringEntry(gZ, gU), StringEntry(hb, he), StringEntry(gW, hf), gd], 0) | |
1886 | 1981 | } | |
1887 | 1982 | } | |
1888 | 1983 | } | |
1891 | 1986 | ||
1892 | 1987 | ||
1893 | 1988 | ||
1894 | - | @Callable( | |
1895 | - | func splitByGlobalWeightsREADONLY ( | |
1896 | - | ||
1897 | - | ||
1898 | - | ||
1899 | - | @Callable( | |
1900 | - | func splitByGlobalAndLocalWeightsREADONLY ( | |
1901 | - | let | |
1902 | - | $Tuple2(nil, $Tuple2( | |
1903 | - | } | |
1904 | - | ||
1905 | - | ||
1906 | - | ||
1907 | - | @Callable( | |
1908 | - | func getBackpackREADONLY ( | |
1909 | - | ||
1910 | - | ||
1911 | - | ||
1912 | - | @Callable( | |
1913 | - | func getWarehouseREADONLY ( | |
1914 | - | let | |
1915 | - | let | |
1916 | - | let | |
1917 | - | $Tuple2(nil, makeString_2C( | |
1989 | + | @Callable(cp) | |
1990 | + | func splitByGlobalWeightsREADONLY (dI) = $Tuple2(nil, bZ(dI)) | |
1991 | + | ||
1992 | + | ||
1993 | + | ||
1994 | + | @Callable(cp) | |
1995 | + | func splitByGlobalAndLocalWeightsREADONLY (hg,hh,cs) = { | |
1996 | + | let cl = cr(cs) | |
1997 | + | $Tuple2(nil, $Tuple2(bZ(hg), bR(hh, cl))) | |
1998 | + | } | |
1999 | + | ||
2000 | + | ||
2001 | + | ||
2002 | + | @Callable(cp) | |
2003 | + | func getBackpackREADONLY (aF) = $Tuple2(nil, makeString(cX(aE(aF)), ":")) | |
2004 | + | ||
2005 | + | ||
2006 | + | ||
2007 | + | @Callable(cp) | |
2008 | + | func getWarehouseREADONLY (aw) = { | |
2009 | + | let eU = value(assetInfo(fromBase58String(aw))) | |
2010 | + | let du = (aU(split(eU.description, "_")[C]) / m) | |
2011 | + | let dv = valueOrElse(getInteger(ap(aw)), 0) | |
2012 | + | $Tuple2(nil, makeString_2C(ds(av(aw), du, dv), ":")) | |
1918 | 2013 | } | |
1919 | 2014 | ||
1920 | 2015 |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 6 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let a = take(drop(this.bytes, 1), 1) | |
5 | 5 | ||
6 | 6 | let b = { | |
7 | 7 | let c = a | |
8 | 8 | if ((base58'2W' == c)) | |
9 | 9 | then base58'9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi' | |
10 | 10 | else if ((base58'2T' == c)) | |
11 | 11 | then base58'6mWwf9mZBjVgkC54idpyaZLQfAosD914wT8fGf2iiY63' | |
12 | 12 | else throw("Unknown chain") | |
13 | 13 | } | |
14 | 14 | ||
15 | 15 | let d = { | |
16 | 16 | let c = a | |
17 | 17 | if ((base58'2W' == c)) | |
18 | 18 | then "3PQCuvFbvh4LkPUnrnU1z3jnbA1p9m3WNhv" | |
19 | 19 | else if ((base58'2T' == c)) | |
20 | 20 | then "3MumkGGztCKAXpWDqxkddofqXSUbqQkvSJy" | |
21 | 21 | else throw("Unknown chain") | |
22 | 22 | } | |
23 | 23 | ||
24 | 24 | let e = { | |
25 | 25 | let c = a | |
26 | 26 | if ((base58'2W' == c)) | |
27 | 27 | then 10000000000 | |
28 | 28 | else if ((base58'2T' == c)) | |
29 | 29 | then 100000000 | |
30 | 30 | else throw("Unknown chain") | |
31 | 31 | } | |
32 | 32 | ||
33 | 33 | let f = "__" | |
34 | 34 | ||
35 | 35 | let g = 1000000 | |
36 | 36 | ||
37 | 37 | let h = 100000000 | |
38 | 38 | ||
39 | 39 | let i = "LAND" | |
40 | 40 | ||
41 | 41 | let j = "DUCK" | |
42 | 42 | ||
43 | 43 | let k = "PRESALE" | |
44 | 44 | ||
45 | 45 | let l = 6 | |
46 | 46 | ||
47 | 47 | let m = 25 | |
48 | 48 | ||
49 | 49 | let n = 100 | |
50 | 50 | ||
51 | 51 | let o = 225 | |
52 | 52 | ||
53 | 53 | let p = 400 | |
54 | 54 | ||
55 | 55 | let q = 625 | |
56 | 56 | ||
57 | 57 | let r = 3456000 | |
58 | 58 | ||
59 | 59 | let s = 86400000 | |
60 | 60 | ||
61 | 61 | let t = 10000000000 | |
62 | 62 | ||
63 | 63 | let u = "Africa_F_Africa" | |
64 | 64 | ||
65 | - | let v = ["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"] | |
66 | - | ||
67 | - | let w = ["Americas", "Europe", "Asia", "Africa", "Oceania"] | |
68 | - | ||
69 | - | let x = ["1_1_1_2_2_5_1_10_0", "2_2_2_4_4_10_1_10_0", "3_3_3_6_6_15_1_10_0", "2_5_5_2_7_5_2_100_1", "4_10_10_4_14_10_2_100_1", "6_15_15_6_21_15_2_100_1", "1_1_1_1_1_8_1_10_2", "2_2_2_2_2_16_1_10_2", "3_3_3_3_3_24_1_10_2", "9_9_1_5_5_1_5_100_3", "18_18_2_10_10_2_5_100_3", "27_27_3_15_15_3_5_100_3", "2_2_1_2_2_2_1_10_4", "4_4_2_4_4_4_1_10_4", "6_6_3_6_6_6_1_10_4"] | |
70 | - | ||
71 | - | let y = 7 | |
72 | - | ||
73 | - | let z = 0 | |
74 | - | ||
75 | - | let A = 1 | |
76 | - | ||
77 | - | let B = 2 | |
78 | - | ||
79 | - | let C = 3 | |
80 | - | ||
81 | - | let D = 0 | |
82 | - | ||
83 | - | let E = 1 | |
84 | - | ||
85 | - | let F = 2 | |
86 | - | ||
87 | - | let G = 3 | |
88 | - | ||
89 | - | let H = 4 | |
90 | - | ||
91 | - | let I = 0 | |
92 | - | ||
93 | - | let J = 1 | |
94 | - | ||
95 | - | let K = 2 | |
96 | - | ||
97 | - | let L = 3 | |
98 | - | ||
99 | - | let M = 0 | |
100 | - | ||
101 | - | let N = 1 | |
102 | - | ||
103 | - | let O = 2 | |
104 | - | ||
105 | - | let P = 3 | |
106 | - | ||
107 | - | func Q (R) = parseIntValue(split(x[R], "_")[y]) | |
108 | - | ||
109 | - | ||
110 | - | func S (T,U) = valueOrErrorMessage(getString(T, U), makeString(["mandatory ", toString(T), ".", U, " is not defined"], "")) | |
111 | - | ||
112 | - | ||
113 | - | let V = 2 | |
114 | - | ||
115 | - | let W = 3 | |
116 | - | ||
117 | - | func X () = "%s__restConfig" | |
118 | - | ||
119 | - | ||
120 | - | func Y () = "%s__restAddr" | |
121 | - | ||
122 | - | ||
123 | - | func Z (aa) = split_4C(S(aa, X()), f) | |
124 | - | ||
125 | - | ||
126 | - | func ab (ac,ad) = valueOrErrorMessage(addressFromString(ac[ad]), ("Rest cfg doesn't contain address at index " + toString(ad))) | |
127 | - | ||
128 | - | ||
129 | - | let ae = addressFromStringValue(valueOrElse(getString(this, Y()), d)) | |
130 | - | ||
131 | - | let ac = Z(ae) | |
132 | - | ||
133 | - | let af = ab(ac, V) | |
134 | - | ||
135 | - | let ag = ab(ac, W) | |
136 | - | ||
137 | - | func ah (ai) = ("lastTxIdByUser_" + ai) | |
138 | - | ||
139 | - | ||
140 | - | func aj (ak) = ("nftOwner_" + ak) | |
141 | - | ||
142 | - | ||
143 | - | func al (ak) = ("landCustomNameByAssetId_" + ak) | |
144 | - | ||
145 | - | ||
146 | - | func am (ak) = ("stakedTime_" + ak) | |
147 | - | ||
148 | - | ||
149 | - | func an (ak) = ("infraLevel_" + ak) | |
150 | - | ||
151 | - | ||
152 | - | func ao (ap,ak) = makeString(["landArtStatus", ap, ak], "_") | |
153 | - | ||
154 | - | ||
155 | - | func aq (ar,ak,as) = ((((("stakedTimeByTypeAssetIdAndOwner_" + ar) + "_") + ak) + "_") + as) | |
156 | - | ||
157 | - | ||
158 | - | func at (au) = ("wareHouse_" + au) | |
159 | - | ||
160 | - | ||
161 | - | func av (as) = ("stakedLandsByOwner_" + as) | |
162 | - | ||
163 | - | ||
164 | - | func aw (ak) = ("duckCustomNameByAssetId_" + ak) | |
165 | - | ||
166 | - | ||
167 | - | func ax (ai) = ("accountCustomNameByAddr_" + ai) | |
168 | - | ||
169 | - | ||
170 | - | func ay (ai) = ("accRefBy_" + ai) | |
171 | - | ||
172 | - | ||
173 | - | func az (ai) = ("accReferrals_" + ai) | |
174 | - | ||
175 | - | ||
176 | - | func aA (ak) = ("duckOwner_" + ak) | |
177 | - | ||
178 | - | ||
179 | - | func aB (as) = ("stakedDuckByOwner_" + as) | |
180 | - | ||
181 | - | ||
182 | - | func aC (aD) = ("backPack_" + aD) | |
183 | - | ||
184 | - | ||
185 | - | func aE (aD) = ("duckLocation_" + aD) | |
186 | - | ||
187 | - | ||
188 | - | func aF (aD) = ("duckHealth_" + aD) | |
189 | - | ||
190 | - | ||
191 | - | func aG () = "resTypesProportions" | |
192 | - | ||
193 | - | ||
194 | - | func aH () = "contractsBlocked" | |
195 | - | ||
196 | - | ||
197 | - | func aI (aJ) = ("%s%s__userGwlReleaseTime__" + aJ) | |
198 | - | ||
199 | - | ||
200 | - | let aK = 1 | |
201 | - | ||
202 | - | let aL = 2 | |
203 | - | ||
204 | - | func aM (aN) = { | |
205 | - | let c = aN | |
65 | + | let v = 39637 | |
66 | + | ||
67 | + | let w = 10 | |
68 | + | ||
69 | + | let x = ["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"] | |
70 | + | ||
71 | + | let y = ["Americas", "Europe", "Asia", "Africa", "Oceania"] | |
72 | + | ||
73 | + | let z = ["1_1_1_2_2_5_1_10_0", "2_2_2_4_4_10_1_10_0", "3_3_3_6_6_15_1_10_0", "2_5_5_2_7_5_2_100_1", "4_10_10_4_14_10_2_100_1", "6_15_15_6_21_15_2_100_1", "1_1_1_1_1_8_1_10_2", "2_2_2_2_2_16_1_10_2", "3_3_3_3_3_24_1_10_2", "9_9_1_5_5_1_5_100_3", "18_18_2_10_10_2_5_100_3", "27_27_3_15_15_3_5_100_3", "2_2_1_2_2_2_1_10_4", "4_4_2_4_4_4_1_10_4", "6_6_3_6_6_6_1_10_4"] | |
74 | + | ||
75 | + | let A = 7 | |
76 | + | ||
77 | + | let B = 0 | |
78 | + | ||
79 | + | let C = 1 | |
80 | + | ||
81 | + | let D = 2 | |
82 | + | ||
83 | + | let E = 3 | |
84 | + | ||
85 | + | let F = 0 | |
86 | + | ||
87 | + | let G = 1 | |
88 | + | ||
89 | + | let H = 2 | |
90 | + | ||
91 | + | let I = 3 | |
92 | + | ||
93 | + | let J = 4 | |
94 | + | ||
95 | + | let K = 0 | |
96 | + | ||
97 | + | let L = 1 | |
98 | + | ||
99 | + | let M = 2 | |
100 | + | ||
101 | + | let N = 3 | |
102 | + | ||
103 | + | let O = 0 | |
104 | + | ||
105 | + | let P = 1 | |
106 | + | ||
107 | + | let Q = 2 | |
108 | + | ||
109 | + | let R = 3 | |
110 | + | ||
111 | + | func S (T) = parseIntValue(split(z[T], "_")[A]) | |
112 | + | ||
113 | + | ||
114 | + | func U (V,W) = valueOrErrorMessage(getString(V, W), makeString(["mandatory ", toString(V), ".", W, " is not defined"], "")) | |
115 | + | ||
116 | + | ||
117 | + | let X = 2 | |
118 | + | ||
119 | + | let Y = 3 | |
120 | + | ||
121 | + | func Z () = "%s__restConfig" | |
122 | + | ||
123 | + | ||
124 | + | func aa () = "%s__restAddr" | |
125 | + | ||
126 | + | ||
127 | + | func ab (ac) = split_4C(U(ac, Z()), f) | |
128 | + | ||
129 | + | ||
130 | + | func ad (ae,af) = valueOrErrorMessage(addressFromString(ae[af]), ("Rest cfg doesn't contain address at index " + toString(af))) | |
131 | + | ||
132 | + | ||
133 | + | let ag = addressFromStringValue(valueOrElse(getString(this, aa()), d)) | |
134 | + | ||
135 | + | let ae = ab(ag) | |
136 | + | ||
137 | + | let ah = ad(ae, X) | |
138 | + | ||
139 | + | let ai = ad(ae, Y) | |
140 | + | ||
141 | + | func aj (ak) = ("lastTxIdByUser_" + ak) | |
142 | + | ||
143 | + | ||
144 | + | func al (am) = ("nftOwner_" + am) | |
145 | + | ||
146 | + | ||
147 | + | func an (am) = ("landCustomNameByAssetId_" + am) | |
148 | + | ||
149 | + | ||
150 | + | func ao (am) = ("stakedTime_" + am) | |
151 | + | ||
152 | + | ||
153 | + | func ap (am) = ("infraLevel_" + am) | |
154 | + | ||
155 | + | ||
156 | + | func aq (ar,am) = makeString(["landArtStatus", ar, am], "_") | |
157 | + | ||
158 | + | ||
159 | + | func as (at,am,au) = ((((("stakedTimeByTypeAssetIdAndOwner_" + at) + "_") + am) + "_") + au) | |
160 | + | ||
161 | + | ||
162 | + | func av (aw) = ("wareHouse_" + aw) | |
163 | + | ||
164 | + | ||
165 | + | func ax (au) = ("stakedLandsByOwner_" + au) | |
166 | + | ||
167 | + | ||
168 | + | func ay (am) = ("duckCustomNameByAssetId_" + am) | |
169 | + | ||
170 | + | ||
171 | + | func az (ak) = ("accountCustomNameByAddr_" + ak) | |
172 | + | ||
173 | + | ||
174 | + | func aA (ak) = ("accRefBy_" + ak) | |
175 | + | ||
176 | + | ||
177 | + | func aB (ak) = ("accReferrals_" + ak) | |
178 | + | ||
179 | + | ||
180 | + | func aC (am) = ("duckOwner_" + am) | |
181 | + | ||
182 | + | ||
183 | + | func aD (au) = ("stakedDuckByOwner_" + au) | |
184 | + | ||
185 | + | ||
186 | + | func aE (aF) = ("backPack_" + aF) | |
187 | + | ||
188 | + | ||
189 | + | func aG (aF) = ("duckLocation_" + aF) | |
190 | + | ||
191 | + | ||
192 | + | func aH (aF) = ("duckHealth_" + aF) | |
193 | + | ||
194 | + | ||
195 | + | func aI () = "resTypesProportions" | |
196 | + | ||
197 | + | ||
198 | + | func aJ () = "contractsBlocked" | |
199 | + | ||
200 | + | ||
201 | + | func aK (aL) = ("%s%s__userGwlReleaseTime__" + aL) | |
202 | + | ||
203 | + | ||
204 | + | func aM () = "emergencyWarehouseProducts" | |
205 | + | ||
206 | + | ||
207 | + | let aN = 1 | |
208 | + | ||
209 | + | let aO = 2 | |
210 | + | ||
211 | + | func aP (aQ) = { | |
212 | + | let c = aQ | |
213 | + | if ($isInstanceOf(c, "String")) | |
214 | + | then { | |
215 | + | let aR = c | |
216 | + | aR | |
217 | + | } | |
218 | + | else throw("fail to cast into String") | |
219 | + | } | |
220 | + | ||
221 | + | ||
222 | + | func aS (aQ) = { | |
223 | + | let c = aQ | |
206 | 224 | if ($isInstanceOf(c, "Int")) | |
207 | 225 | then { | |
208 | - | let | |
209 | - | | |
226 | + | let aT = c | |
227 | + | aT | |
210 | 228 | } | |
211 | 229 | else throw("fail to cast into Int") | |
212 | 230 | } | |
213 | 231 | ||
214 | 232 | ||
215 | - | func | |
216 | - | let c = | |
233 | + | func aU (aV) = { | |
234 | + | let c = aV | |
217 | 235 | if (("S" == c)) | |
218 | 236 | then m | |
219 | 237 | else if (("M" == c)) | |
220 | 238 | then n | |
221 | 239 | else if (("L" == c)) | |
222 | 240 | then o | |
223 | 241 | else if (("XL" == c)) | |
224 | 242 | then p | |
225 | 243 | else if (("XXL" == c)) | |
226 | 244 | then q | |
227 | 245 | else throw("Unknown land size") | |
228 | 246 | } | |
229 | 247 | ||
230 | 248 | ||
231 | - | let aR = { | |
249 | + | func aW (aX) = { | |
250 | + | func aY (aZ,ba) = (aZ + parseIntValue(aX[ba])) | |
251 | + | ||
252 | + | let bb = [0, 1, 2, 3, 4, 5] | |
253 | + | let bc = size(bb) | |
254 | + | let bd = 0 | |
255 | + | func be (bf,bg) = if ((bg >= bc)) | |
256 | + | then bf | |
257 | + | else aY(bf, bb[bg]) | |
258 | + | ||
259 | + | func bh (bf,bg) = if ((bg >= bc)) | |
260 | + | then bf | |
261 | + | else throw("List size exceeds 6") | |
262 | + | ||
263 | + | bh(be(be(be(be(be(be(bd, 0), 1), 2), 3), 4), 5), 6) | |
264 | + | } | |
265 | + | ||
266 | + | ||
267 | + | let bi = { | |
232 | 268 | let c = a | |
233 | 269 | if ((base58'2W' == c)) | |
234 | 270 | then addressFromStringValue("3PEktVux2RhchSN63DsDo4b4mz4QqzKSeDv") | |
235 | 271 | else if ((base58'2T' == c)) | |
236 | 272 | then this | |
237 | 273 | else throw("Unknown chain") | |
238 | 274 | } | |
239 | 275 | ||
240 | - | let | |
276 | + | let bj = { | |
241 | 277 | let c = a | |
242 | 278 | if ((base58'2W' == c)) | |
243 | 279 | then addressFromStringValue("3PDVuU45H7Eh5dmtNbnRNRStGwULA7NY6Hb") | |
244 | 280 | else if ((base58'2T' == c)) | |
245 | 281 | then this | |
246 | 282 | else throw("Unknown chain") | |
247 | 283 | } | |
248 | 284 | ||
249 | - | let | |
250 | - | ||
251 | - | let | |
252 | - | ||
253 | - | let | |
254 | - | ||
255 | - | let | |
256 | - | ||
257 | - | let | |
258 | - | ||
259 | - | let | |
260 | - | ||
261 | - | let | |
285 | + | let bk = base58'6LfPuKJjLgekmncBhMg2LZyMTNVzZBccXR28ySXm9uXD' | |
286 | + | ||
287 | + | let bl = [30, 60, 120] | |
288 | + | ||
289 | + | let bm = 300000 | |
290 | + | ||
291 | + | let bn = 5000000 | |
292 | + | ||
293 | + | let bo = 50 | |
294 | + | ||
295 | + | let bp = 10000000 | |
296 | + | ||
297 | + | let bq = { | |
262 | 298 | let c = a | |
263 | 299 | if ((base58'2W' == c)) | |
264 | 300 | then 252289527462 | |
265 | 301 | else if ((base58'2T' == c)) | |
266 | 302 | then 2522895274 | |
267 | 303 | else throw("Unknown chain") | |
268 | 304 | } | |
269 | 305 | ||
270 | - | let | |
306 | + | let br = { | |
271 | 307 | let c = a | |
272 | 308 | if ((base58'2W' == c)) | |
273 | 309 | then 250000000 | |
274 | 310 | else if ((base58'2T' == c)) | |
275 | 311 | then 250000000 | |
276 | 312 | else throw("Unknown chain") | |
277 | 313 | } | |
278 | 314 | ||
279 | - | let | |
280 | - | ||
281 | - | let | |
282 | - | ||
283 | - | let | |
284 | - | ||
285 | - | let | |
286 | - | ||
287 | - | let | |
288 | - | ||
289 | - | let | |
290 | - | ||
291 | - | let | |
292 | - | ||
293 | - | func | |
294 | - | ||
295 | - | ||
296 | - | func | |
297 | - | ||
298 | - | ||
299 | - | func | |
300 | - | ||
301 | - | ||
302 | - | func | |
303 | - | ||
304 | - | ||
305 | - | func | |
306 | - | ||
307 | - | ||
308 | - | func | |
309 | - | ||
310 | - | ||
311 | - | func | |
312 | - | ||
313 | - | ||
314 | - | func | |
315 | - | ||
316 | - | ||
317 | - | func | |
318 | - | ||
319 | - | ||
320 | - | let | |
321 | - | ||
322 | - | let | |
323 | - | ||
324 | - | let | |
325 | - | ||
326 | - | let | |
327 | - | ||
328 | - | let | |
329 | - | ||
330 | - | let | |
331 | - | ||
332 | - | func | |
333 | - | ||
334 | - | ||
335 | - | func | |
336 | - | let | |
337 | - | if ((0 >= | |
315 | + | let bs = toBigInt(5) | |
316 | + | ||
317 | + | let bt = toBigInt(20) | |
318 | + | ||
319 | + | let bu = toBigInt((20 * 20)) | |
320 | + | ||
321 | + | let bv = toBigInt(((20 * 20) * 20)) | |
322 | + | ||
323 | + | let bw = toBigInt((((20 * 20) * 20) * 20)) | |
324 | + | ||
325 | + | let bx = toBigInt(((((20 * 20) * 20) * 20) * 20)) | |
326 | + | ||
327 | + | let by = 500 | |
328 | + | ||
329 | + | func bz () = "nextLandNum" | |
330 | + | ||
331 | + | ||
332 | + | func bA (bB) = ("landToAsset_" + bB) | |
333 | + | ||
334 | + | ||
335 | + | func bC (bD) = ("landByCustomName_" + bD) | |
336 | + | ||
337 | + | ||
338 | + | func bE (am,au) = ((("infraLevelByAssetIdAndOwner_" + am) + "_") + au) | |
339 | + | ||
340 | + | ||
341 | + | func bF (ar,am,au) = makeString(["landArtStatusByTypeAssetIdAndOwner", ar, am, au], "_") | |
342 | + | ||
343 | + | ||
344 | + | func bG (bB) = ("landOwner_" + bB) | |
345 | + | ||
346 | + | ||
347 | + | func bH (bD) = ("duckByCustomName_" + bD) | |
348 | + | ||
349 | + | ||
350 | + | func bI (bD) = ("accountByCustomName_" + bD) | |
351 | + | ||
352 | + | ||
353 | + | func bJ () = "oldiesList" | |
354 | + | ||
355 | + | ||
356 | + | let bK = 0 | |
357 | + | ||
358 | + | let bL = 1 | |
359 | + | ||
360 | + | let bM = 2 | |
361 | + | ||
362 | + | let bN = 0 | |
363 | + | ||
364 | + | let bO = 5 | |
365 | + | ||
366 | + | let bP = 6 | |
367 | + | ||
368 | + | func bQ (bB,aV) = ((i + bB) + aV) | |
369 | + | ||
370 | + | ||
371 | + | func bR (bS,bT) = { | |
372 | + | let bU = (((((bT[0] + bT[1]) + bT[2]) + bT[3]) + bT[4]) + bT[5]) | |
373 | + | if ((0 >= bU)) | |
338 | 374 | then throw("Zero weights sum") | |
339 | 375 | else { | |
340 | - | let | |
341 | - | func | |
342 | - | ||
343 | - | let | |
344 | - | let | |
345 | - | let | |
346 | - | func | |
347 | - | then | |
348 | - | else | |
349 | - | ||
350 | - | func | |
351 | - | then | |
376 | + | let bV = fraction(bS, g, bU) | |
377 | + | func bW (bX,bY) = (bX :+ fraction(bY, bV, g)) | |
378 | + | ||
379 | + | let bb = bT | |
380 | + | let bc = size(bb) | |
381 | + | let bd = nil | |
382 | + | func be (bf,bg) = if ((bg >= bc)) | |
383 | + | then bf | |
384 | + | else bW(bf, bb[bg]) | |
385 | + | ||
386 | + | func bh (bf,bg) = if ((bg >= bc)) | |
387 | + | then bf | |
352 | 388 | else throw("List size exceeds 6") | |
353 | 389 | ||
354 | - | | |
355 | - | } | |
356 | - | } | |
357 | - | ||
358 | - | ||
359 | - | func | |
360 | - | let | |
361 | - | if ((size( | |
390 | + | bh(be(be(be(be(be(be(bd, 0), 1), 2), 3), 4), 5), 6) | |
391 | + | } | |
392 | + | } | |
393 | + | ||
394 | + | ||
395 | + | func bZ (bS) = { | |
396 | + | let ca = split(value(getString(aI())), "_") | |
397 | + | if ((size(ca) != l)) | |
362 | 398 | then throw("Wrong proportions data") | |
363 | 399 | else { | |
364 | - | let | |
365 | - | | |
366 | - | } | |
367 | - | } | |
368 | - | ||
369 | - | ||
370 | - | func | |
371 | - | let | |
372 | - | func | |
373 | - | let | |
374 | - | if ((0 > | |
375 | - | then throw(((((("Not enough material idx=" + toString( | |
376 | - | else ( | |
400 | + | let cb = [parseIntValue(ca[0]), parseIntValue(ca[1]), parseIntValue(ca[2]), parseIntValue(ca[3]), parseIntValue(ca[4]), parseIntValue(ca[5])] | |
401 | + | bR(bS, cb) | |
402 | + | } | |
403 | + | } | |
404 | + | ||
405 | + | ||
406 | + | func cc (cd,ce,cf) = { | |
407 | + | let cg = bZ(cf) | |
408 | + | func ch (bX,af) = { | |
409 | + | let ci = (parseIntValue(ce[af]) - cg[af]) | |
410 | + | if ((0 > ci)) | |
411 | + | then throw(((((("Not enough material idx=" + toString(af)) + ", you have ") + ce[af]) + ", but need ") + toString(cg[af]))) | |
412 | + | else (bX :+ toString(ci)) | |
377 | 413 | } | |
378 | 414 | ||
379 | - | if ( | |
415 | + | if (cd) | |
380 | 416 | then { | |
381 | - | let | |
382 | - | let | |
383 | - | let | |
384 | - | func | |
385 | - | then | |
386 | - | else | |
387 | - | ||
388 | - | func | |
389 | - | then | |
417 | + | let bb = [0, 1, 2, 3, 4, 5] | |
418 | + | let bc = size(bb) | |
419 | + | let bd = nil | |
420 | + | func be (bf,bg) = if ((bg >= bc)) | |
421 | + | then bf | |
422 | + | else ch(bf, bb[bg]) | |
423 | + | ||
424 | + | func bh (bf,bg) = if ((bg >= bc)) | |
425 | + | then bf | |
390 | 426 | else throw("List size exceeds 6") | |
391 | 427 | ||
392 | - | | |
393 | - | } | |
394 | - | else | |
395 | - | } | |
396 | - | ||
397 | - | ||
398 | - | func | |
428 | + | bh(be(be(be(be(be(be(bd, 0), 1), 2), 3), 4), 5), 6) | |
429 | + | } | |
430 | + | else ce | |
431 | + | } | |
432 | + | ||
433 | + | ||
434 | + | func cj (ck,cl,cm,cn) = if ((size(ck) != l)) | |
399 | 435 | then throw("Wrong proportions data") | |
400 | 436 | else { | |
401 | - | func | |
402 | - | let | |
403 | - | if ((0 > | |
404 | - | then throw(((((((("Panic! Pieces of type=" + toString( | |
405 | - | else ( | |
406 | - | } | |
407 | - | ||
408 | - | let | |
409 | - | let | |
410 | - | let | |
411 | - | let | |
412 | - | func | |
413 | - | then | |
414 | - | else | |
415 | - | ||
416 | - | func | |
417 | - | then | |
437 | + | func co (bX,cp) = { | |
438 | + | let ci = (parseIntValue(ck[cp]) + ((cn * cl[cp]) * cm)) | |
439 | + | if ((0 > ci)) | |
440 | + | then throw(((((((("Panic! Pieces of type=" + toString(cp)) + ", sign=") + toString(cn)) + ", terrainCounts[i]=") + toString(cl[cp])) + ", landSizeIndex=") + toString(cm))) | |
441 | + | else (bX :+ toString(ci)) | |
442 | + | } | |
443 | + | ||
444 | + | let cb = { | |
445 | + | let bb = [0, 1, 2, 3, 4, 5] | |
446 | + | let bc = size(bb) | |
447 | + | let bd = nil | |
448 | + | func be (bf,bg) = if ((bg >= bc)) | |
449 | + | then bf | |
450 | + | else co(bf, bb[bg]) | |
451 | + | ||
452 | + | func bh (bf,bg) = if ((bg >= bc)) | |
453 | + | then bf | |
418 | 454 | else throw("List size exceeds 6") | |
419 | 455 | ||
420 | - | | |
421 | - | } | |
422 | - | makeString( | |
456 | + | bh(be(be(be(be(be(be(bd, 0), 1), 2), 3), 4), 5), 6) | |
457 | + | } | |
458 | + | makeString(cb, "_") | |
423 | 459 | } | |
424 | 460 | ||
425 | 461 | ||
426 | - | func | |
427 | - | let | |
428 | - | | |
429 | - | } | |
430 | - | ||
431 | - | ||
432 | - | func | |
433 | - | ||
434 | - | ||
435 | - | func | |
436 | - | func | |
437 | - | let | |
438 | - | ( | |
462 | + | func cq (cl,cm,cn) = { | |
463 | + | let ck = split(valueOrElse(getString(aI()), "0_0_0_0_0_0"), "_") | |
464 | + | cj(ck, cl, cm, cn) | |
465 | + | } | |
466 | + | ||
467 | + | ||
468 | + | func cr (cs) = [(size(split(cs, "A")) - 1), (size(split(cs, "B")) - 1), (size(split(cs, "C")) - 1), (size(split(cs, "D")) - 1), (size(split(cs, "E")) - 1), (size(split(cs, "F")) - 1)] | |
469 | + | ||
470 | + | ||
471 | + | func ct (cu,cl,cv,cm,cw) = { | |
472 | + | func cx (bX,cp) = { | |
473 | + | let cy = ((fraction(cv, cw, s) * cl[cp]) * cm) | |
474 | + | (bX :+ toString((parseIntValue(cu[cp]) + cy))) | |
439 | 475 | } | |
440 | 476 | ||
441 | - | let | |
442 | - | let | |
443 | - | let | |
444 | - | let | |
445 | - | func | |
446 | - | then | |
447 | - | else | |
448 | - | ||
449 | - | func | |
450 | - | then | |
477 | + | let cb = { | |
478 | + | let bb = [0, 1, 2, 3, 4, 5] | |
479 | + | let bc = size(bb) | |
480 | + | let bd = nil | |
481 | + | func be (bf,bg) = if ((bg >= bc)) | |
482 | + | then bf | |
483 | + | else cx(bf, bb[bg]) | |
484 | + | ||
485 | + | func bh (bf,bg) = if ((bg >= bc)) | |
486 | + | then bf | |
451 | 487 | else throw("List size exceeds 6") | |
452 | 488 | ||
453 | - | | |
489 | + | bh(be(be(be(be(be(be(bd, 0), 1), 2), 3), 4), 5), 6) | |
454 | 490 | } | |
455 | - | makeString( | |
456 | - | } | |
457 | - | ||
458 | - | ||
459 | - | func | |
460 | - | func | |
461 | - | let | |
462 | - | $Tuple2(( | |
491 | + | makeString(cb, "_") | |
492 | + | } | |
493 | + | ||
494 | + | ||
495 | + | func cz (cl,cv,cm,cw) = { | |
496 | + | func cx (bX,cp) = { | |
497 | + | let cy = ((fraction(cv, cw, s) * cl[cp]) * cm) | |
498 | + | $Tuple2((bX._1 :+ cy), (bX._2 + cy)) | |
463 | 499 | } | |
464 | 500 | ||
465 | - | let | |
466 | - | let | |
467 | - | let | |
468 | - | func | |
469 | - | then | |
470 | - | else | |
471 | - | ||
472 | - | func | |
473 | - | then | |
501 | + | let bb = [0, 1, 2, 3, 4, 5] | |
502 | + | let bc = size(bb) | |
503 | + | let bd = $Tuple2(nil, 0) | |
504 | + | func be (bf,bg) = if ((bg >= bc)) | |
505 | + | then bf | |
506 | + | else cx(bf, bb[bg]) | |
507 | + | ||
508 | + | func bh (bf,bg) = if ((bg >= bc)) | |
509 | + | then bf | |
474 | 510 | else throw("List size exceeds 6") | |
475 | 511 | ||
476 | - | | |
477 | - | } | |
478 | - | ||
479 | - | ||
480 | - | func | |
481 | - | let | |
482 | - | let | |
483 | - | if (( | |
484 | - | then $Tuple2(makeString( | |
485 | - | else if (( | |
512 | + | bh(be(be(be(be(be(be(bd, 0), 1), 2), 3), 4), 5), 6) | |
513 | + | } | |
514 | + | ||
515 | + | ||
516 | + | func cA (cB,cC,cD,cE) = { | |
517 | + | let cF = cD._1 | |
518 | + | let cG = cD._2 | |
519 | + | if ((cG == 0)) | |
520 | + | then $Tuple2(makeString(cB, "_"), makeString(cC, "_")) | |
521 | + | else if ((cE >= cG)) | |
486 | 522 | then { | |
487 | - | func | |
488 | - | ||
489 | - | let | |
490 | - | let | |
491 | - | let | |
492 | - | let | |
493 | - | func | |
494 | - | then | |
495 | - | else | |
496 | - | ||
497 | - | func | |
498 | - | then | |
523 | + | func cH (bX,cp) = (bX :+ toString((parseIntValue(cB[cp]) + cF[cp]))) | |
524 | + | ||
525 | + | let cb = { | |
526 | + | let bb = [0, 1, 2, 3, 4, 5] | |
527 | + | let bc = size(bb) | |
528 | + | let bd = nil | |
529 | + | func be (bf,bg) = if ((bg >= bc)) | |
530 | + | then bf | |
531 | + | else cH(bf, bb[bg]) | |
532 | + | ||
533 | + | func bh (bf,bg) = if ((bg >= bc)) | |
534 | + | then bf | |
499 | 535 | else throw("List size exceeds 6") | |
500 | 536 | ||
501 | - | | |
537 | + | bh(be(be(be(be(be(be(bd, 0), 1), 2), 3), 4), 5), 6) | |
502 | 538 | } | |
503 | - | $Tuple2(makeString( | |
539 | + | $Tuple2(makeString(cb, "_"), makeString(cC, "_")) | |
504 | 540 | } | |
505 | 541 | else { | |
506 | - | func | |
507 | - | let | |
508 | - | $Tuple2(( | |
542 | + | func cI (bX,cp) = { | |
543 | + | let cJ = fraction(cF[cp], cE, cG) | |
544 | + | $Tuple2((bX._1 :+ toString((parseIntValue(cB[cp]) + cJ))), (bX._2 :+ toString(((parseIntValue(cC[cp]) + cF[cp]) - cJ)))) | |
509 | 545 | } | |
510 | 546 | ||
511 | - | let | |
512 | - | let | |
513 | - | let | |
514 | - | let | |
515 | - | func | |
516 | - | then | |
517 | - | else | |
518 | - | ||
519 | - | func | |
520 | - | then | |
547 | + | let cb = { | |
548 | + | let bb = [0, 1, 2, 3, 4, 5] | |
549 | + | let bc = size(bb) | |
550 | + | let bd = $Tuple2(nil, nil) | |
551 | + | func be (bf,bg) = if ((bg >= bc)) | |
552 | + | then bf | |
553 | + | else cI(bf, bb[bg]) | |
554 | + | ||
555 | + | func bh (bf,bg) = if ((bg >= bc)) | |
556 | + | then bf | |
521 | 557 | else throw("List size exceeds 6") | |
522 | 558 | ||
523 | - | | |
559 | + | bh(be(be(be(be(be(be(bd, 0), 1), 2), 3), 4), 5), 6) | |
524 | 560 | } | |
525 | - | $Tuple2(makeString( | |
561 | + | $Tuple2(makeString(cb._1, "_"), makeString(cb._2, "_")) | |
526 | 562 | } | |
527 | 563 | } | |
528 | 564 | ||
529 | 565 | ||
530 | - | func | |
531 | - | then | |
532 | - | else -( | |
533 | - | ||
534 | - | ||
535 | - | let | |
536 | - | ||
537 | - | func | |
538 | - | let | |
539 | - | let | |
566 | + | func cK (cL) = if ((cL >= toBigInt(0))) | |
567 | + | then cL | |
568 | + | else -(cL) | |
569 | + | ||
570 | + | ||
571 | + | let cM = [[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]] | |
572 | + | ||
573 | + | func cN (aT,cO) = { | |
574 | + | let cP = toInt((aT % bt)) | |
575 | + | let cQ = if ((cO[0] > cP)) | |
540 | 576 | then "A" | |
541 | - | else if (( | |
577 | + | else if ((cO[1] > cP)) | |
542 | 578 | then "B" | |
543 | - | else if (( | |
579 | + | else if ((cO[2] > cP)) | |
544 | 580 | then "C" | |
545 | - | else if (( | |
581 | + | else if ((cO[3] > cP)) | |
546 | 582 | then "D" | |
547 | - | else if (( | |
583 | + | else if ((cO[4] > cP)) | |
548 | 584 | then "E" | |
549 | 585 | else "F" | |
550 | - | | |
551 | - | } | |
552 | - | ||
553 | - | ||
554 | - | func | |
555 | - | let | |
556 | - | func | |
557 | - | ||
558 | - | let | |
559 | - | let | |
560 | - | let | |
561 | - | let | |
562 | - | func | |
563 | - | then | |
564 | - | else | |
565 | - | ||
566 | - | func | |
567 | - | then | |
586 | + | cQ | |
587 | + | } | |
588 | + | ||
589 | + | ||
590 | + | func cR (cS,cT) = { | |
591 | + | let cU = cM[cT] | |
592 | + | func cV (bX,bY) = $Tuple2((((((bX._1 + cN(bX._2, cU)) + cN((bX._2 / bt), cU)) + cN((bX._2 / bu), cU)) + cN((bX._2 / bv), cU)) + cN((bX._2 / bw), cU)), (bX._2 / bx)) | |
593 | + | ||
594 | + | let cW = { | |
595 | + | let bb = [1, 2, 3, 4, 5] | |
596 | + | let bc = size(bb) | |
597 | + | let bd = $Tuple2("", (cS / bs)) | |
598 | + | func be (bf,bg) = if ((bg >= bc)) | |
599 | + | then bf | |
600 | + | else cV(bf, bb[bg]) | |
601 | + | ||
602 | + | func bh (bf,bg) = if ((bg >= bc)) | |
603 | + | then bf | |
568 | 604 | else throw("List size exceeds 5") | |
569 | 605 | ||
570 | - | | |
606 | + | bh(be(be(be(be(be(bd, 0), 1), 2), 3), 4), 5) | |
571 | 607 | } | |
572 | - | | |
573 | - | } | |
574 | - | ||
575 | - | ||
576 | - | func | |
577 | - | let | |
578 | - | [toString(valueOrElse(parseInt( | |
579 | - | then | |
580 | - | else "0_0_0_0_0_0", if ((size(split( | |
581 | - | then | |
582 | - | else "0_0_0_0_0_0", | |
583 | - | } | |
584 | - | ||
585 | - | ||
586 | - | func | |
587 | - | let | |
588 | - | ((t * (parseIntValue( | |
589 | - | } | |
590 | - | ||
591 | - | ||
592 | - | func | |
593 | - | let | |
594 | - | func | |
595 | - | ||
596 | - | func | |
597 | - | let | |
598 | - | let | |
599 | - | let | |
600 | - | $Tuple2(( | |
608 | + | cW._1 | |
609 | + | } | |
610 | + | ||
611 | + | ||
612 | + | func cX (cY) = { | |
613 | + | let cZ = split(valueOrElse(getString(cY), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":") | |
614 | + | [toString(valueOrElse(parseInt(cZ[O]), 0)), if ((size(split(cZ[P], "_")) == l)) | |
615 | + | then cZ[P] | |
616 | + | else "0_0_0_0_0_0", if ((size(split(cZ[Q], "_")) == l)) | |
617 | + | then cZ[Q] | |
618 | + | else "0_0_0_0_0_0", cZ[R]] | |
619 | + | } | |
620 | + | ||
621 | + | ||
622 | + | func da (db) = { | |
623 | + | let dc = split(db, "_") | |
624 | + | ((t * (parseIntValue(dc[1]) + 1)) * parseIntValue(dc[0])) | |
625 | + | } | |
626 | + | ||
627 | + | ||
628 | + | func dd (de) = { | |
629 | + | let df = de[I] | |
630 | + | func dg (bX,dh) = (bX + parseIntValue(dh)) | |
631 | + | ||
632 | + | func di (bX,dh) = { | |
633 | + | let af = bX._1 | |
634 | + | let dj = S(af) | |
635 | + | let dk = (((parseIntValue(dh) + dj) - 1) / dj) | |
636 | + | $Tuple2((af + 1), (bX._2 + (dk * h))) | |
601 | 637 | } | |
602 | 638 | ||
603 | - | let | |
604 | - | let | |
605 | - | let | |
606 | - | let | |
607 | - | func | |
608 | - | then | |
609 | - | else | |
610 | - | ||
611 | - | func | |
612 | - | then | |
639 | + | let dl = { | |
640 | + | let bb = split(de[G], "_") | |
641 | + | let bc = size(bb) | |
642 | + | let bd = 0 | |
643 | + | func be (bf,bg) = if ((bg >= bc)) | |
644 | + | then bf | |
645 | + | else dg(bf, bb[bg]) | |
646 | + | ||
647 | + | func bh (bf,bg) = if ((bg >= bc)) | |
648 | + | then bf | |
613 | 649 | else throw("List size exceeds 6") | |
614 | 650 | ||
615 | - | | |
651 | + | bh(be(be(be(be(be(be(bd, 0), 1), 2), 3), 4), 5), 6) | |
616 | 652 | } | |
617 | - | let | |
618 | - | let | |
619 | - | let | |
620 | - | let | |
621 | - | func | |
622 | - | then | |
623 | - | else | |
624 | - | ||
625 | - | func | |
626 | - | then | |
653 | + | let dm = { | |
654 | + | let bb = split(de[H], "_") | |
655 | + | let bc = size(bb) | |
656 | + | let bd = 0 | |
657 | + | func dn (bf,bg) = if ((bg >= bc)) | |
658 | + | then bf | |
659 | + | else dg(bf, bb[bg]) | |
660 | + | ||
661 | + | func do (bf,bg) = if ((bg >= bc)) | |
662 | + | then bf | |
627 | 663 | else throw("List size exceeds 6") | |
628 | 664 | ||
629 | - | | |
665 | + | do(dn(dn(dn(dn(dn(dn(bd, 0), 1), 2), 3), 4), 5), 6) | |
630 | 666 | } | |
631 | - | let | |
667 | + | let dp = if ((df == "")) | |
632 | 668 | then 0 | |
633 | - | else ( let | |
634 | - | let | |
635 | - | let | |
636 | - | func | |
637 | - | then | |
638 | - | else | |
639 | - | ||
640 | - | func | |
641 | - | then | |
669 | + | else ( let bb = split_4C(df, "_") | |
670 | + | let bc = size(bb) | |
671 | + | let bd = $Tuple2(0, 0) | |
672 | + | func dq (bf,bg) = if ((bg >= bc)) | |
673 | + | then bf | |
674 | + | else di(bf, bb[bg]) | |
675 | + | ||
676 | + | func dr (bf,bg) = if ((bg >= bc)) | |
677 | + | then bf | |
642 | 678 | else throw("List size exceeds 50") | |
643 | 679 | ||
644 | - | | |
645 | - | (( | |
646 | - | } | |
647 | - | ||
648 | - | ||
649 | - | func | |
650 | - | let | |
651 | - | let | |
652 | - | let | |
653 | - | let | |
654 | - | let | |
655 | - | let | |
656 | - | then makeString(["0", toString( | |
657 | - | else { | |
658 | - | let | |
659 | - | let | |
660 | - | let | |
661 | - | then parseIntValue( | |
662 | - | else | |
663 | - | makeString([toString( | |
664 | - | } | |
665 | - | [ | |
666 | - | then | |
667 | - | else "0_0_0_0_0_0", if ((size(split( | |
668 | - | then | |
669 | - | else "0_0_0_0_0_0", | |
670 | - | } | |
671 | - | ||
672 | - | ||
673 | - | func | |
674 | - | let | |
675 | - | let | |
676 | - | (( | |
677 | - | } | |
678 | - | ||
679 | - | ||
680 | - | func | |
681 | - | let | |
682 | - | then ((( | |
683 | - | else -((((-( | |
684 | - | ( | |
685 | - | } | |
686 | - | ||
687 | - | ||
688 | - | func | |
680 | + | dr(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(bd, 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 | |
681 | + | ((dl + dm) + dp) | |
682 | + | } | |
683 | + | ||
684 | + | ||
685 | + | func ds (dt,du,dv) = { | |
686 | + | let db = ((toString(du) + "_") + toString(dv)) | |
687 | + | let dw = da(db) | |
688 | + | let dx = valueOrElse(getString(dt), (db + ":0_0_0_0_0_0:0_0_0_0_0_0::0")) | |
689 | + | let dy = split_4C(dx, ":") | |
690 | + | let dz = dd(dy) | |
691 | + | let dA = if ((5 > size(dy))) | |
692 | + | then makeString(["0", toString(dz), toString((dw - dz)), toString(dw)], "_") | |
693 | + | else { | |
694 | + | let dB = split(dy[J], "_") | |
695 | + | let dC = parseIntValue(dB[K]) | |
696 | + | let dD = if ((size(dB) > 1)) | |
697 | + | then parseIntValue(dB[L]) | |
698 | + | else dz | |
699 | + | makeString([toString(dC), toString(dD), toString(((dw - dC) - dD)), toString(dw)], "_") | |
700 | + | } | |
701 | + | [dy[F], if ((size(split(dy[G], "_")) == l)) | |
702 | + | then dy[G] | |
703 | + | else "0_0_0_0_0_0", if ((size(split(dy[H], "_")) == l)) | |
704 | + | then dy[H] | |
705 | + | else "0_0_0_0_0_0", dy[I], dA] | |
706 | + | } | |
707 | + | ||
708 | + | ||
709 | + | func dE (de) = { | |
710 | + | let dF = dd(de) | |
711 | + | let dG = parseIntValue(split(de[J], "_")[K]) | |
712 | + | ((da(de[F]) - dF) - dG) | |
713 | + | } | |
714 | + | ||
715 | + | ||
716 | + | func dH (dI,dj) = { | |
717 | + | let dk = if ((dI >= 0)) | |
718 | + | then (((dI + dj) - 1) / dj) | |
719 | + | else -((((-(dI) + dj) - 1) / dj)) | |
720 | + | (dk * h) | |
721 | + | } | |
722 | + | ||
723 | + | ||
724 | + | func dJ (dK,de,dL) = if ((size(dK) != 3)) | |
689 | 725 | then throw("cargoListStr should contain exactly 2 ':' separators") | |
690 | 726 | else { | |
691 | - | let | |
692 | - | let | |
693 | - | let | |
727 | + | let dM = split(dK[0], "_") | |
728 | + | let dN = split(dK[1], "_") | |
729 | + | let dO = if ((dK[2] == "")) | |
694 | 730 | then nil | |
695 | - | else split( | |
696 | - | if ((size( | |
731 | + | else split(dK[2], "_") | |
732 | + | if ((size(dM) != l)) | |
697 | 733 | then throw("All 6 resources should be passed") | |
698 | - | else if ((size( | |
734 | + | else if ((size(dN) != l)) | |
699 | 735 | then throw("All 6 materials should be passed") | |
700 | 736 | else { | |
701 | - | let | |
702 | - | let | |
703 | - | let | |
704 | - | let | |
737 | + | let cE = dE(de) | |
738 | + | let dP = split(de[G], "_") | |
739 | + | let dQ = split(de[H], "_") | |
740 | + | let dR = if ((de[I] == "")) | |
705 | 741 | then nil | |
706 | - | else split( | |
707 | - | let | |
708 | - | let | |
709 | - | let | |
742 | + | else split(de[I], "_") | |
743 | + | let cC = split(dL[P], "_") | |
744 | + | let dS = split(dL[Q], "_") | |
745 | + | let dT = if ((dL[R] == "")) | |
710 | 746 | then nil | |
711 | - | else split( | |
712 | - | func | |
713 | - | let | |
714 | - | let | |
715 | - | let | |
716 | - | let | |
717 | - | if (( | |
718 | - | then $Tuple4(( | |
719 | - | else if (( | |
720 | - | then if (( | |
721 | - | then throw((((("Attempt to take " + | |
722 | - | else $Tuple4(( | |
723 | - | else if ((-( | |
724 | - | then throw((((("Attempt to take " + toString(-( | |
725 | - | else $Tuple4(( | |
747 | + | else split(dL[R], "_") | |
748 | + | func dU (bX,dh) = { | |
749 | + | let cp = bX._1 | |
750 | + | let dV = parseIntValue(dh) | |
751 | + | let dW = parseIntValue(dP[cp]) | |
752 | + | let dX = parseIntValue(cC[cp]) | |
753 | + | if ((dV == 0)) | |
754 | + | then $Tuple4((cp + 1), (bX._2 :+ dP[cp]), (bX._3 :+ cC[cp]), bX._4) | |
755 | + | else if ((dV > 0)) | |
756 | + | then if ((dV > dX)) | |
757 | + | then throw((((("Attempt to take " + dh) + " from backpack, but only ") + toString(dX)) + " available")) | |
758 | + | else $Tuple4((cp + 1), (bX._2 :+ toString((dW + dV))), (bX._3 :+ toString((dX - dV))), (bX._4 + dV)) | |
759 | + | else if ((-(dV) > dW)) | |
760 | + | then throw((((("Attempt to take " + toString(-(dV))) + " from warehouse, but only ") + toString(dW)) + " available")) | |
761 | + | else $Tuple4((cp + 1), (bX._2 :+ toString((dW + dV))), (bX._3 :+ toString((dX - dV))), (bX._4 + dV)) | |
726 | 762 | } | |
727 | 763 | ||
728 | - | let | |
729 | - | let | |
730 | - | let | |
731 | - | let | |
732 | - | func | |
733 | - | then | |
734 | - | else | |
735 | - | ||
736 | - | func | |
737 | - | then | |
764 | + | let cb = { | |
765 | + | let bb = dM | |
766 | + | let bc = size(bb) | |
767 | + | let bd = $Tuple4(0, nil, nil, 0) | |
768 | + | func be (bf,bg) = if ((bg >= bc)) | |
769 | + | then bf | |
770 | + | else dU(bf, bb[bg]) | |
771 | + | ||
772 | + | func bh (bf,bg) = if ((bg >= bc)) | |
773 | + | then bf | |
738 | 774 | else throw("List size exceeds 6") | |
739 | 775 | ||
740 | - | | |
776 | + | bh(be(be(be(be(be(be(bd, 0), 1), 2), 3), 4), 5), 6) | |
741 | 777 | } | |
742 | - | func | |
743 | - | let | |
744 | - | let | |
745 | - | let | |
746 | - | let | |
747 | - | if (( | |
748 | - | then $Tuple4(( | |
749 | - | else if (( | |
750 | - | then if (( | |
751 | - | then throw((((("Attempt to take " + | |
752 | - | else $Tuple4(( | |
753 | - | else if ((-( | |
754 | - | then throw((((("Attempt to take " + toString(-( | |
755 | - | else $Tuple4(( | |
778 | + | func dY (bX,dh) = { | |
779 | + | let cp = bX._1 | |
780 | + | let dV = parseIntValue(dh) | |
781 | + | let dZ = parseIntValue(dQ[cp]) | |
782 | + | let ea = parseIntValue(dS[cp]) | |
783 | + | if ((dV == 0)) | |
784 | + | then $Tuple4((cp + 1), (bX._2 :+ dQ[cp]), (bX._3 :+ dS[cp]), bX._4) | |
785 | + | else if ((dV > 0)) | |
786 | + | then if ((dV > ea)) | |
787 | + | then throw((((("Attempt to take " + dh) + " from backpack, but only ") + toString(ea)) + " available")) | |
788 | + | else $Tuple4((cp + 1), (bX._2 :+ toString((dZ + dV))), (bX._3 :+ toString((ea - dV))), (bX._4 + dV)) | |
789 | + | else if ((-(dV) > dZ)) | |
790 | + | then throw((((("Attempt to take " + toString(-(dV))) + " from warehouse, but only ") + toString(dZ)) + " available")) | |
791 | + | else $Tuple4((cp + 1), (bX._2 :+ toString((dZ + dV))), (bX._3 :+ toString((ea - dV))), (bX._4 + dV)) | |
756 | 792 | } | |
757 | 793 | ||
758 | - | let | |
759 | - | let | |
760 | - | let | |
761 | - | let | |
762 | - | func | |
763 | - | then | |
764 | - | else | |
765 | - | ||
766 | - | func | |
767 | - | then | |
794 | + | let eb = { | |
795 | + | let bb = dN | |
796 | + | let bc = size(bb) | |
797 | + | let bd = $Tuple4(0, nil, nil, cb._4) | |
798 | + | func dn (bf,bg) = if ((bg >= bc)) | |
799 | + | then bf | |
800 | + | else dY(bf, bb[bg]) | |
801 | + | ||
802 | + | func do (bf,bg) = if ((bg >= bc)) | |
803 | + | then bf | |
768 | 804 | else throw("List size exceeds 6") | |
769 | 805 | ||
770 | - | | |
806 | + | do(dn(dn(dn(dn(dn(dn(bd, 0), 1), 2), 3), 4), 5), 6) | |
771 | 807 | } | |
772 | - | func | |
773 | - | let | |
774 | - | let | |
775 | - | let | |
776 | - | let | |
777 | - | then parseIntValue( | |
808 | + | func ec (bX,dh) = { | |
809 | + | let cp = bX._1 | |
810 | + | let dj = S(cp) | |
811 | + | let dV = parseIntValue(dh) | |
812 | + | let ed = if ((size(dR) > cp)) | |
813 | + | then parseIntValue(dR[cp]) | |
778 | 814 | else 0 | |
779 | - | let | |
780 | - | then parseIntValue( | |
815 | + | let ee = if ((size(dT) > cp)) | |
816 | + | then parseIntValue(dT[cp]) | |
781 | 817 | else 0 | |
782 | - | if (( | |
783 | - | then $Tuple4(( | |
784 | - | else if (( | |
785 | - | then if (( | |
786 | - | then throw((((("Attempt to take " + | |
818 | + | if ((dV == 0)) | |
819 | + | then $Tuple4((cp + 1), (bX._2 :+ toString(ed)), (bX._3 :+ toString(ee)), bX._4) | |
820 | + | else if ((dV > 0)) | |
821 | + | then if ((dV > ee)) | |
822 | + | then throw((((("Attempt to take " + dh) + " from backpack, but only ") + toString(ee)) + " available")) | |
787 | 823 | else { | |
788 | - | let | |
789 | - | $Tuple4(( | |
824 | + | let ef = (dH((ed + dV), dj) - dH(ed, dj)) | |
825 | + | $Tuple4((cp + 1), (bX._2 :+ toString((ed + dV))), (bX._3 :+ toString((ee - dV))), (bX._4 + ef)) | |
790 | 826 | } | |
791 | - | else if ((-( | |
792 | - | then throw((((("Attempt to take " + toString(-( | |
827 | + | else if ((-(dV) > ed)) | |
828 | + | then throw((((("Attempt to take " + toString(-(dV))) + " from warehouse, but only ") + toString(ed)) + " available")) | |
793 | 829 | else { | |
794 | - | let | |
795 | - | $Tuple4(( | |
830 | + | let ef = (dH((ed + dV), dj) - dH(ed, dj)) | |
831 | + | $Tuple4((cp + 1), (bX._2 :+ toString((ed + dV))), (bX._3 :+ toString((ee - dV))), (bX._4 + ef)) | |
796 | 832 | } | |
797 | 833 | } | |
798 | 834 | ||
799 | - | let | |
835 | + | let cZ = if ((size(dO) != 0)) | |
800 | 836 | then { | |
801 | - | let | |
802 | - | let | |
803 | - | let | |
804 | - | func | |
805 | - | then | |
806 | - | else | |
807 | - | ||
808 | - | func | |
809 | - | then | |
837 | + | let bb = dO | |
838 | + | let bc = size(bb) | |
839 | + | let bd = $Tuple4(0, nil, nil, eb._4) | |
840 | + | func dq (bf,bg) = if ((bg >= bc)) | |
841 | + | then bf | |
842 | + | else ec(bf, bb[bg]) | |
843 | + | ||
844 | + | func dr (bf,bg) = if ((bg >= bc)) | |
845 | + | then bf | |
810 | 846 | else throw("List size exceeds 50") | |
811 | 847 | ||
812 | - | | |
848 | + | dr(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(bd, 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) | |
813 | 849 | } | |
814 | - | else $Tuple4(0, | |
815 | - | let | |
816 | - | if (( | |
817 | - | then throw((((("Attempt to put total " + toString( | |
818 | - | else $Tuple7(makeString( | |
850 | + | else $Tuple4(0, dR, dT, eb._4) | |
851 | + | let eg = cZ._4 | |
852 | + | if ((eg > cE)) | |
853 | + | then throw((((("Attempt to put total " + toString(eg)) + " stuff, but only ") + toString(cE)) + " warehouse space left")) | |
854 | + | else $Tuple7(makeString(cb._2, "_"), makeString(eb._2, "_"), makeString(cZ._2, "_"), makeString(cb._3, "_"), makeString(eb._3, "_"), makeString(cZ._3, "_"), eg) | |
819 | 855 | } | |
820 | 856 | } | |
821 | 857 | ||
822 | 858 | ||
823 | - | func | |
824 | - | let | |
825 | - | let | |
826 | - | let | |
827 | - | let | |
828 | - | let | |
829 | - | let | |
830 | - | let | |
831 | - | let | |
832 | - | let | |
833 | - | let | |
834 | - | $Tuple2([IntegerEntry( | |
835 | - | } | |
836 | - | ||
837 | - | ||
838 | - | func | |
859 | + | func eh (ei,ej) = { | |
860 | + | let aL = toString(ei) | |
861 | + | let ek = cK(toBigInt(ej)) | |
862 | + | let el = valueOrElse(getInteger(bz()), (by + 1)) | |
863 | + | let bB = toString(el) | |
864 | + | let cT = toInt((ek % bs)) | |
865 | + | let cs = cR(ek, cT) | |
866 | + | let em = y[cT] | |
867 | + | let en = Issue(bQ(bB, "S"), makeString([bB, "S", cs, em], "_"), 1, 0, false) | |
868 | + | let am = calculateAssetId(en) | |
869 | + | let eo = toBase58String(am) | |
870 | + | $Tuple2([IntegerEntry(bz(), (el + 1)), en, StringEntry(bA(bB), eo), StringEntry(al(eo), aL), StringEntry(bG(bB), aL), IntegerEntry(ap(eo), 0), IntegerEntry(bE(eo, aL), 0), ScriptTransfer(ei, 1, am)], $Tuple2(eo, em)) | |
871 | + | } | |
872 | + | ||
873 | + | ||
874 | + | func ep (cd,ei,ej,eq,er) = if (!(sigVerify_8Kb(eq, er, bk))) | |
839 | 875 | then throw("signature does not match") | |
840 | 876 | else { | |
841 | - | let | |
842 | - | let | |
843 | - | let | |
844 | - | let | |
845 | - | let | |
846 | - | let | |
847 | - | let | |
848 | - | let | |
849 | - | if (if (( | |
877 | + | let dc = split(toUtf8String(eq), ";") | |
878 | + | let es = split(dc[0], "|") | |
879 | + | let et = split(es[bN], "_") | |
880 | + | let eu = parseIntValue(et[0]) | |
881 | + | let ev = parseIntValue(et[1]) | |
882 | + | let ew = split(dc[1], ":") | |
883 | + | let ex = ew[0] | |
884 | + | let ey = parseIntValue(es[bO]) | |
885 | + | if (if ((ey > (lastBlock.timestamp + bm))) | |
850 | 886 | then true | |
851 | - | else ((lastBlock.timestamp - | |
887 | + | else ((lastBlock.timestamp - bm) > ey)) | |
852 | 888 | then throw("signature outdated") | |
853 | 889 | else { | |
854 | - | let | |
855 | - | let | |
856 | - | let | |
857 | - | if (( | |
858 | - | then throw(((("Tx ids don't match! In state: " + | |
890 | + | let ez = ew[1] | |
891 | + | let aL = toString(ei) | |
892 | + | let eA = valueOrElse(getString(aj(aL)), "") | |
893 | + | if ((eA != ez)) | |
894 | + | then throw(((("Tx ids don't match! In state: " + eA) + ", in msg: ") + ez)) | |
859 | 895 | else { | |
860 | - | let | |
861 | - | let | |
862 | - | let | |
863 | - | if (( | |
864 | - | then throw(((("oldHealth=" + toString(valueOrElse(getInteger( | |
865 | - | else if ((0 >= | |
896 | + | let aF = valueOrErrorMessage(getString(aD(aL)), "You don't have a duck staked") | |
897 | + | let eB = aH(aF) | |
898 | + | let eC = valueOrElse(getInteger(eB), 100) | |
899 | + | if ((eC != eu)) | |
900 | + | then throw(((("oldHealth=" + toString(valueOrElse(getInteger(eB), 100))) + " from state does not match one from flight log=") + toString(eu))) | |
901 | + | else if ((0 >= eu)) | |
866 | 902 | then throw("You can't fly with zero health") | |
867 | - | else if ((0 >= | |
868 | - | then $Tuple3(((if (!( | |
869 | - | then [ScriptTransfer( | |
870 | - | else nil) :+ IntegerEntry( | |
903 | + | else if ((0 >= ev)) | |
904 | + | then $Tuple3(((if (!(cd)) | |
905 | + | then [ScriptTransfer(ei, br, b)] | |
906 | + | else nil) :+ IntegerEntry(eB, 0)), "", 0) | |
871 | 907 | else { | |
872 | - | let | |
873 | - | then | |
908 | + | let eD = if ((size(es) > bP)) | |
909 | + | then es[bP] | |
874 | 910 | else "" | |
875 | - | let | |
876 | - | then | |
911 | + | let eE = if ((eD == "$")) | |
912 | + | then aS(invoke(ag, "sendUsdtPrize", [aL], nil)) | |
877 | 913 | else 0 | |
878 | - | let | |
879 | - | let | |
880 | - | let | |
881 | - | let | |
882 | - | let | |
883 | - | let | |
884 | - | $Tuple3(((( | |
914 | + | let cY = aE(aF) | |
915 | + | let dL = cX(cY) | |
916 | + | let eF = split(dL[Q], "_") | |
917 | + | let eG = makeString(cc(cd, eF, bq), "_") | |
918 | + | let eH = eh(ei, ej) | |
919 | + | let eo = eH._2._1 | |
920 | + | $Tuple3((((eH._1 :+ StringEntry(aG(aF), makeString([eH._2._2, "L", eo], "_"))) :+ IntegerEntry(eB, ev)) :+ StringEntry(cY, makeString([dL[O], dL[P], eG, dL[R]], ":"))), eo, eE) | |
885 | 921 | } | |
886 | 922 | } | |
887 | 923 | } | |
888 | 924 | } | |
889 | 925 | ||
890 | 926 | ||
891 | - | func | |
892 | - | let | |
893 | - | let | |
894 | - | let | |
895 | - | let | |
896 | - | ((r + fraction(r, (( | |
897 | - | } | |
898 | - | ||
899 | - | ||
900 | - | func | |
901 | - | let | |
902 | - | then $Tuple2( | |
903 | - | else { | |
904 | - | let | |
905 | - | let | |
906 | - | let | |
907 | - | if (( | |
908 | - | then throw((("Duck location type is " + | |
909 | - | else $Tuple2( | |
910 | - | } | |
911 | - | let | |
912 | - | let | |
913 | - | let | |
914 | - | let | |
915 | - | let | |
916 | - | let | |
917 | - | if (( | |
927 | + | func eI (aw,eJ) = { | |
928 | + | let dv = valueOrElse(getInteger(ap(aw)), 0) | |
929 | + | let eK = valueOrElse(getInteger(aq(k, aw)), 0) | |
930 | + | let eL = (dv / 6) | |
931 | + | let eM = (dv / 7) | |
932 | + | ((r + fraction(r, ((dv + eL) + (2 * eM)), 5)) + fraction(r, eK, (eJ * 5))) | |
933 | + | } | |
934 | + | ||
935 | + | ||
936 | + | func eN (ak,eO,eP) = { | |
937 | + | let eQ = if ((eO == bK)) | |
938 | + | then $Tuple2(eP, valueOrElse(getString(aD(ak)), "")) | |
939 | + | else { | |
940 | + | let aF = valueOrErrorMessage(getString(aD(ak)), "You don't have a duck staked") | |
941 | + | let eR = valueOrElse(getString(aG(aF)), u) | |
942 | + | let eS = split(value(eR), "_") | |
943 | + | if ((eS[aN] != "L")) | |
944 | + | then throw((("Duck location type is " + eS[aN]) + ", but should be L")) | |
945 | + | else $Tuple2(eS[aO], aF) | |
946 | + | } | |
947 | + | let aw = eQ._1 | |
948 | + | let eT = eQ._2 | |
949 | + | let eU = value(assetInfo(fromBase58String(aw))) | |
950 | + | let eV = ao(aw) | |
951 | + | let eW = valueOrErrorMessage(getInteger(eV), (("Land " + eU.name) + " is not staked")) | |
952 | + | let eX = valueOrErrorMessage(getString(al(aw)), (("NFT " + eU.name) + " is orphaned")) | |
953 | + | if ((eX != ak)) | |
918 | 954 | then throw((i + " is not yours")) | |
919 | 955 | else { | |
920 | - | let | |
921 | - | $Tuple4( | |
922 | - | } | |
923 | - | } | |
924 | - | ||
925 | - | ||
926 | - | func | |
956 | + | let eY = split(eU.description, "_") | |
957 | + | $Tuple4(eT, aw, eY, eW) | |
958 | + | } | |
959 | + | } | |
960 | + | ||
961 | + | ||
962 | + | func eZ (ak,dI,eO,eP) = if ((0 > dI)) | |
927 | 963 | then throw("Negative amount") | |
928 | 964 | else { | |
929 | - | let | |
930 | - | let | |
931 | - | let | |
932 | - | let | |
933 | - | if ((0 > | |
934 | - | then throw(((("Saved timestamp is in future, saved = " + toString( | |
965 | + | let fa = eN(ak, eO, eP) | |
966 | + | let aV = fa._3[C] | |
967 | + | let cl = cr(fa._3[D]) | |
968 | + | let cv = (lastBlock.timestamp - fa._4) | |
969 | + | if ((0 > cv)) | |
970 | + | then throw(((("Saved timestamp is in future, saved = " + toString(fa._4)) + ", current = ") + toString(lastBlock.timestamp))) | |
935 | 971 | else { | |
936 | - | let | |
937 | - | let | |
938 | - | let | |
939 | - | if (( | |
940 | - | then throw(((("Not enough resources, available = " + toString( | |
972 | + | let eJ = aU(aV) | |
973 | + | let fb = eI(fa._2, eJ) | |
974 | + | let fc = fraction(cv, (fb * eJ), s) | |
975 | + | if ((dI > fc)) | |
976 | + | then throw(((("Not enough resources, available = " + toString(fc)) + ", requested = ") + toString(dI))) | |
941 | 977 | else { | |
942 | - | let | |
943 | - | let | |
944 | - | let | |
945 | - | let | |
946 | - | let | |
947 | - | let | |
948 | - | let | |
949 | - | let | |
950 | - | let | |
951 | - | if (if (( | |
952 | - | then ( | |
978 | + | let fd = fraction((fc - dI), s, (fb * eJ)) | |
979 | + | let fe = (lastBlock.timestamp - fd) | |
980 | + | let du = (eJ / m) | |
981 | + | let cD = cz(cl, (cv - fd), du, fb) | |
982 | + | let dt = av(fa._2) | |
983 | + | let dv = valueOrElse(getInteger(ap(fa._2)), 0) | |
984 | + | let de = ds(dt, du, dv) | |
985 | + | let dB = split(de[J], "_") | |
986 | + | let cE = parseIntValue(dB[M]) | |
987 | + | if (if ((eO == bK)) | |
988 | + | then (dI > cE) | |
953 | 989 | else false) | |
954 | - | then throw((("Only " + toString( | |
990 | + | then throw((("Only " + toString(cE)) + " space left in warehouse")) | |
955 | 991 | else { | |
956 | - | let | |
957 | - | let | |
958 | - | let | |
959 | - | let | |
960 | - | let | |
961 | - | then $Tuple4( | |
962 | - | else if (( | |
963 | - | then $Tuple4( | |
992 | + | let cY = aE(fa._1) | |
993 | + | let dL = cX(cY) | |
994 | + | let cC = split(dL[P], "_") | |
995 | + | let cB = split(de[G], "_") | |
996 | + | let ff = if ((eO == bK)) | |
997 | + | then $Tuple4(ct(cB, cl, (cv - fd), du, fb), dL[P], (parseIntValue(dB[L]) + cD._2), (parseIntValue(dB[M]) - cD._2)) | |
998 | + | else if ((eO == bL)) | |
999 | + | then $Tuple4(de[G], ct(cC, cl, (cv - fd), du, fb), parseIntValue(dB[L]), parseIntValue(dB[M])) | |
964 | 1000 | else { | |
965 | - | let | |
966 | - | let | |
967 | - | $Tuple4( | |
1001 | + | let fg = cA(cB, cC, cD, cE) | |
1002 | + | let fh = min([parseIntValue(dB[M]), cD._2]) | |
1003 | + | $Tuple4(fg._1, fg._2, (parseIntValue(dB[L]) + fh), (parseIntValue(dB[M]) - fh)) | |
968 | 1004 | } | |
969 | - | let | |
970 | - | let | |
971 | - | let | |
972 | - | let | |
973 | - | $Tuple5([IntegerEntry( | |
1005 | + | let fi = ff._1 | |
1006 | + | let fj = ff._2 | |
1007 | + | let fk = ff._3 | |
1008 | + | let fl = ff._4 | |
1009 | + | $Tuple5([IntegerEntry(ao(fa._2), fe), IntegerEntry(as(i, fa._2, ak), fe)], cY, [dL[O], fj, dL[Q], dL[R]], dt, [de[F], fi, de[H], de[I], makeString([dB[K], toString(fk), toString(fl), dB[N]], "_")]) | |
974 | 1010 | } | |
975 | 1011 | } | |
976 | 1012 | } | |
977 | 1013 | } | |
978 | 1014 | ||
979 | 1015 | ||
980 | - | func | |
981 | - | let | |
982 | - | let | |
983 | - | let | |
984 | - | | |
985 | - | } | |
986 | - | ||
987 | - | ||
988 | - | func | |
989 | - | let | |
990 | - | let | |
991 | - | let | |
992 | - | let | |
993 | - | let | |
994 | - | if (( | |
1016 | + | func fm (ak,aw,eJ,eO) = { | |
1017 | + | let eV = ao(aw) | |
1018 | + | let eW = value(getInteger(eV)) | |
1019 | + | let fc = (fraction((lastBlock.timestamp - eW), eI(aw, eJ), s) * eJ) | |
1020 | + | eZ(ak, fc, eO, aw) | |
1021 | + | } | |
1022 | + | ||
1023 | + | ||
1024 | + | func fn (cd,ei,fo,aw) = { | |
1025 | + | let ak = toString(ei) | |
1026 | + | let fa = eN(ak, bM, aw) | |
1027 | + | let eJ = aU(fa._3[C]) | |
1028 | + | let fp = ap(fa._2) | |
1029 | + | let fq = valueOrElse(getInteger(fp), 0) | |
1030 | + | if ((fq >= 3)) | |
995 | 1031 | then throw("Currently max infrastructure level = 3") | |
996 | 1032 | else { | |
997 | - | let | |
998 | - | let | |
999 | - | if (if (!( | |
1000 | - | then ( | |
1033 | + | let fr = (fq + 1) | |
1034 | + | let fs = fraction(bp, (eJ * fr), m) | |
1035 | + | if (if (!(cd)) | |
1036 | + | then (fo != fs) | |
1001 | 1037 | else false) | |
1002 | - | then throw(("Payment attached should be " + toString( | |
1038 | + | then throw(("Payment attached should be " + toString(fs))) | |
1003 | 1039 | else { | |
1004 | - | let | |
1005 | - | let | |
1006 | - | let | |
1007 | - | let | |
1008 | - | let | |
1009 | - | let | |
1010 | - | let | |
1011 | - | let | |
1012 | - | let | |
1013 | - | let | |
1014 | - | let | |
1015 | - | $Tuple2(([IntegerEntry( | |
1040 | + | let cY = aE(fa._1) | |
1041 | + | let dL = cX(cY) | |
1042 | + | let eF = split(dL[Q], "_") | |
1043 | + | let eG = makeString(cc(cd, eF, fraction(e, (eJ * fr), m)), "_") | |
1044 | + | let ft = fm(ak, fa._2, eJ, bM) | |
1045 | + | let fu = ft._5 | |
1046 | + | let fv = da(fu[F]) | |
1047 | + | let fw = makeString([split(fu[F], "_")[0], toString(fr)], "_") | |
1048 | + | let fx = da(fw) | |
1049 | + | let dB = split(fu[J], "_") | |
1050 | + | let fy = makeString([dB[K], dB[L], toString(((parseIntValue(dB[M]) + fx) - fv)), toString(fx)], "_") | |
1051 | + | $Tuple2(([IntegerEntry(fp, fr), IntegerEntry(bE(fa._2, ak), fr), StringEntry(cY, makeString([dL[O], ft._3[P], eG, dL[R]], ":")), StringEntry(ft._4, makeString([fw, fu[G], fu[H], fu[I], fy], ":"))] ++ ft._1), fr) | |
1016 | 1052 | } | |
1017 | 1053 | } | |
1018 | 1054 | } | |
1019 | 1055 | ||
1020 | 1056 | ||
1021 | - | func | |
1022 | - | let | |
1023 | - | let | |
1024 | - | let | |
1025 | - | let | |
1026 | - | if ((valueOrElse(getInteger( | |
1057 | + | func fz (ak,eP) = { | |
1058 | + | let fa = eN(ak, bM, eP) | |
1059 | + | let aw = fa._2 | |
1060 | + | let eJ = aU(fa._3[C]) | |
1061 | + | let fA = aq(k, aw) | |
1062 | + | if ((valueOrElse(getInteger(fA), 0) > 0)) | |
1027 | 1063 | then throw("Presale artifact is already activated") | |
1028 | - | else if ((parseIntValue( | |
1029 | - | then throw((((i + " ") + | |
1064 | + | else if ((parseIntValue(fa._3[B]) > by)) | |
1065 | + | then throw((((i + " ") + aw) + " is not eligible for presale artifact")) | |
1030 | 1066 | else { | |
1031 | - | let | |
1032 | - | (((( | |
1067 | + | let ft = fm(ak, aw, eJ, bM) | |
1068 | + | ((((ft._1 :+ IntegerEntry(fA, eJ)) :+ IntegerEntry(bF(k, aw, ak), eJ)) :+ StringEntry(ft._2, makeString(ft._3, ":"))) :+ StringEntry(ft._4, makeString(ft._5, ":"))) | |
1033 | 1069 | } | |
1034 | 1070 | } | |
1035 | 1071 | ||
1036 | 1072 | ||
1037 | - | func | |
1038 | - | let | |
1039 | - | func | |
1040 | - | let | |
1041 | - | let | |
1042 | - | let | |
1043 | - | let | |
1044 | - | if (( | |
1073 | + | func fB (fC,fr,fD,ak,fE,ej,fF) = { | |
1074 | + | let aF = valueOrErrorMessage(getString(aD(ak)), "You don't have a duck staked") | |
1075 | + | func fG (bX,aw) = { | |
1076 | + | let eU = value(assetInfo(fromBase58String(aw))) | |
1077 | + | let eV = ao(aw) | |
1078 | + | let eW = valueOrErrorMessage(getInteger(eV), (("NFT " + eU.name) + " is not staked")) | |
1079 | + | let eX = valueOrErrorMessage(getString(al(aw)), (("NFT " + eU.name) + " is orphaned")) | |
1080 | + | if ((eX != ak)) | |
1045 | 1081 | then throw((i + " is not yours")) | |
1046 | 1082 | else { | |
1047 | - | let | |
1048 | - | let | |
1049 | - | if (if (( | |
1050 | - | then ( | |
1083 | + | let eY = split(eU.description, "_") | |
1084 | + | let em = eY[E] | |
1085 | + | if (if ((bX._3 != "")) | |
1086 | + | then (bX._3 != em) | |
1051 | 1087 | else false) | |
1052 | 1088 | then throw("Lands should be on the same continent to merge") | |
1053 | 1089 | else { | |
1054 | - | let | |
1055 | - | let | |
1056 | - | let | |
1057 | - | let | |
1058 | - | let | |
1059 | - | let | |
1060 | - | let | |
1061 | - | let | |
1062 | - | let c = | |
1090 | + | let aV = eY[C] | |
1091 | + | let fH = bX._1 | |
1092 | + | let cp = valueOrErrorMessage(indexOf(fH, aV), "You haven't passed all the lands needed") | |
1093 | + | let fI = (take(fH, cp) + drop(fH, (cp + 1))) | |
1094 | + | let eJ = aU(aV) | |
1095 | + | let fJ = (bX._2 + valueOrElse(getInteger(aq(k, aw)), 0)) | |
1096 | + | let dv = valueOrElse(getInteger(ap(aw)), 0) | |
1097 | + | let fK = { | |
1098 | + | let c = aV | |
1063 | 1099 | if (("S" == c)) | |
1064 | 1100 | then 3 | |
1065 | 1101 | else if (("M" == c)) | |
1066 | 1102 | then 4 | |
1067 | 1103 | else if (("L" == c)) | |
1068 | 1104 | then 5 | |
1069 | 1105 | else if (("XL" == c)) | |
1070 | 1106 | then 6 | |
1071 | 1107 | else throw("Only S, M, L, XL can merge") | |
1072 | 1108 | } | |
1073 | - | if (( | |
1109 | + | if ((dv != fK)) | |
1074 | 1110 | then throw("All lands should be maxed to merge") | |
1075 | 1111 | else { | |
1076 | - | let | |
1077 | - | let | |
1078 | - | let | |
1079 | - | if ((0 > | |
1080 | - | then throw(((("Saved timestamp is in future, saved = " + toString( | |
1112 | + | let bB = eY[B] | |
1113 | + | let cl = cr(eY[D]) | |
1114 | + | let cv = (lastBlock.timestamp - eW) | |
1115 | + | if ((0 > cv)) | |
1116 | + | then throw(((("Saved timestamp is in future, saved = " + toString(eW)) + ", current = ") + toString(lastBlock.timestamp))) | |
1081 | 1117 | else { | |
1082 | - | let | |
1083 | - | let | |
1084 | - | let | |
1085 | - | let | |
1086 | - | let | |
1087 | - | let | |
1088 | - | if (!(isDefined( | |
1089 | - | then throw(("Your staked lands don't contain " + | |
1118 | + | let fb = eI(aw, eJ) | |
1119 | + | let du = (eJ / m) | |
1120 | + | let fj = ct(split(bX._4, "_"), cl, cv, du, fb) | |
1121 | + | let ca = cj(split(bX._6, "_"), cl, du, -1) | |
1122 | + | let fL = bX._7 | |
1123 | + | let af = indexOf(fL, aw) | |
1124 | + | if (!(isDefined(af))) | |
1125 | + | then throw(("Your staked lands don't contain " + aw)) | |
1090 | 1126 | else { | |
1091 | - | let | |
1092 | - | let | |
1093 | - | $Tuple7( | |
1127 | + | let fM = an(aw) | |
1128 | + | let fN = valueOrElse(getString(fM), "") | |
1129 | + | $Tuple7(fI, fJ, em, fj, (((((((((((((bX._5 :+ DeleteEntry(ao(aw))) :+ DeleteEntry(as(i, aw, ak))) :+ DeleteEntry(bA(bB))) :+ DeleteEntry(al(aw))) :+ DeleteEntry(ap(aw))) :+ DeleteEntry(bE(aw, ak))) :+ DeleteEntry(aq(k, aw))) :+ DeleteEntry(bF(k, aw, ak))) :+ DeleteEntry(bG(bB))) :+ DeleteEntry(av(aw))) :+ DeleteEntry(fM)) :+ DeleteEntry(bC(fN))) :+ Burn(fromBase58String(aw), 1)), ca, removeByIndex(fL, value(af))) | |
1094 | 1130 | } | |
1095 | 1131 | } | |
1096 | 1132 | } | |
1097 | 1133 | } | |
1098 | 1134 | } | |
1099 | 1135 | } | |
1100 | 1136 | ||
1101 | - | let | |
1102 | - | let | |
1103 | - | let | |
1104 | - | let | |
1105 | - | let | |
1106 | - | let | |
1107 | - | then split_51C(value( | |
1137 | + | let cY = aE(aF) | |
1138 | + | let dL = cX(cY) | |
1139 | + | let fO = valueOrElse(getString(aI()), "0_0_0_0_0_0") | |
1140 | + | let fP = ax(ak) | |
1141 | + | let fQ = getString(fP) | |
1142 | + | let fR = if (isDefined(fQ)) | |
1143 | + | then split_51C(value(fQ), "_") | |
1108 | 1144 | else nil | |
1109 | - | let | |
1110 | - | let | |
1111 | - | let | |
1112 | - | let | |
1113 | - | func | |
1114 | - | then | |
1115 | - | else | |
1116 | - | ||
1117 | - | func | |
1118 | - | then | |
1145 | + | let cb = { | |
1146 | + | let bb = fE | |
1147 | + | let bc = size(bb) | |
1148 | + | let bd = $Tuple7(fD, 0, "", dL[P], nil, fO, fR) | |
1149 | + | func be (bf,bg) = if ((bg >= bc)) | |
1150 | + | then bf | |
1151 | + | else fG(bf, bb[bg]) | |
1152 | + | ||
1153 | + | func bh (bf,bg) = if ((bg >= bc)) | |
1154 | + | then bf | |
1119 | 1155 | else throw("List size exceeds 5") | |
1120 | 1156 | ||
1121 | - | | |
1157 | + | bh(be(be(be(be(be(bd, 0), 1), 2), 3), 4), 5) | |
1122 | 1158 | } | |
1123 | - | let | |
1124 | - | let | |
1125 | - | let | |
1126 | - | let | |
1127 | - | let | |
1128 | - | let | |
1129 | - | let | |
1130 | - | let | |
1131 | - | let | |
1132 | - | $Tuple2((((((((((((((( | |
1133 | - | then StringEntry( | |
1134 | - | else DeleteEntry( | |
1135 | - | } | |
1136 | - | ||
1137 | - | ||
1138 | - | func | |
1139 | - | ||
1140 | - | ||
1141 | - | func | |
1142 | - | let | |
1143 | - | if (if (!( | |
1144 | - | then ( | |
1159 | + | let em = cb._3 | |
1160 | + | let cT = valueOrErrorMessage(indexOf(y, em), ("Unknown continent: " + em)) | |
1161 | + | let cs = cR(cK(toBigInt(ej)), cT) | |
1162 | + | let el = valueOrElse(getInteger(bz()), (by + 1)) | |
1163 | + | let fS = toString(el) | |
1164 | + | let en = Issue(bQ(fS, fC), makeString([fS, fC, cs, em], "_"), 1, 0, false) | |
1165 | + | let am = calculateAssetId(en) | |
1166 | + | let fT = toBase58String(am) | |
1167 | + | let eG = makeString(cc((fF > 0), split(dL[Q], "_"), fF), "_") | |
1168 | + | $Tuple2(((((((((((((((cb._5 :+ (if ((size(cb._7) > 0)) | |
1169 | + | then StringEntry(fP, makeString_11C(cb._7, "_")) | |
1170 | + | else DeleteEntry(fP))) :+ IntegerEntry(bz(), (el + 1))) :+ en) :+ StringEntry(bA(fS), fT)) :+ StringEntry(al(fT), ak)) :+ StringEntry(bG(fS), ak)) :+ IntegerEntry(aq(k, fT), cb._2)) :+ IntegerEntry(bF(k, fT, ak), cb._2)) :+ IntegerEntry(ap(fT), fr)) :+ IntegerEntry(bE(fT, ak), fr)) :+ StringEntry(cY, makeString([dL[O], cb._4, eG, dL[R]], ":"))) :+ StringEntry(aI(), cb._6)) :+ StringEntry(aG(aF), makeString([em, "L", fT], "_"))) :+ ScriptTransfer(addressFromStringValue(ak), 1, am)), fT) | |
1171 | + | } | |
1172 | + | ||
1173 | + | ||
1174 | + | func fU (ak,fE,ej) = fB("M", 3, "SSSS", ak, fE, ej, 0) | |
1175 | + | ||
1176 | + | ||
1177 | + | func fV (ak,fE,ej,cd,fo) = { | |
1178 | + | let fs = (bp * 4) | |
1179 | + | if (if (!(cd)) | |
1180 | + | then (fo != fs) | |
1145 | 1181 | else false) | |
1146 | - | then throw(("Payment attached should be " + toString( | |
1147 | - | else | |
1148 | - | } | |
1149 | - | ||
1150 | - | ||
1151 | - | func | |
1152 | - | let | |
1153 | - | if (if (!( | |
1154 | - | then ( | |
1182 | + | then throw(("Payment attached should be " + toString(fs))) | |
1183 | + | else fB("L", 4, "SMM", ak, fE, ej, (e * 4)) | |
1184 | + | } | |
1185 | + | ||
1186 | + | ||
1187 | + | func fW (ak,fE,ej,cd,fo) = { | |
1188 | + | let fs = (bp * 47) | |
1189 | + | if (if (!(cd)) | |
1190 | + | then (fo != fs) | |
1155 | 1191 | else false) | |
1156 | - | then throw(("Payment attached should be " + toString( | |
1157 | - | else | |
1158 | - | } | |
1159 | - | ||
1160 | - | ||
1161 | - | func | |
1162 | - | let | |
1163 | - | if (if (!( | |
1164 | - | then ( | |
1192 | + | then throw(("Payment attached should be " + toString(fs))) | |
1193 | + | else fB("XL", 5, "SSSML", ak, fE, ej, (e * 47)) | |
1194 | + | } | |
1195 | + | ||
1196 | + | ||
1197 | + | func fX (ak,fE,ej,cd,fo) = { | |
1198 | + | let fs = (bp * 54) | |
1199 | + | if (if (!(cd)) | |
1200 | + | then (fo != fs) | |
1165 | 1201 | else false) | |
1166 | - | then throw(("Payment attached should be " + toString( | |
1167 | - | else | |
1168 | - | } | |
1169 | - | ||
1170 | - | ||
1171 | - | func | |
1172 | - | let | |
1173 | - | let c = size( | |
1202 | + | then throw(("Payment attached should be " + toString(fs))) | |
1203 | + | else fB("XXL", 6, "LXL", ak, fE, ej, (e * 54)) | |
1204 | + | } | |
1205 | + | ||
1206 | + | ||
1207 | + | func fY (cd,ak,fo,fE,ej) = { | |
1208 | + | let fZ = { | |
1209 | + | let c = size(fE) | |
1174 | 1210 | if ((4 == c)) | |
1175 | - | then | |
1211 | + | then fU(ak, fE, ej) | |
1176 | 1212 | else if ((3 == c)) | |
1177 | - | then | |
1213 | + | then fV(ak, fE, ej, cd, fo) | |
1178 | 1214 | else if ((5 == c)) | |
1179 | - | then | |
1215 | + | then fW(ak, fE, ej, cd, fo) | |
1180 | 1216 | else if ((2 == c)) | |
1181 | - | then | |
1217 | + | then fX(ak, fE, ej, cd, fo) | |
1182 | 1218 | else throw("Unknown merge") | |
1183 | 1219 | } | |
1184 | - | | |
1185 | - | } | |
1186 | - | ||
1187 | - | ||
1188 | - | func | |
1189 | - | then valueOrElse(getBoolean( | |
1220 | + | fZ | |
1221 | + | } | |
1222 | + | ||
1223 | + | ||
1224 | + | func ga (cp) = if (if ((cp.originCaller != ag)) | |
1225 | + | then valueOrElse(getBoolean(aJ()), false) | |
1190 | 1226 | else false) | |
1191 | 1227 | then throw("Contracts are under maintenance") | |
1192 | - | else StringEntry( | |
1193 | - | ||
1194 | - | ||
1195 | - | @Callable( | |
1196 | - | func constructorV1 ( | |
1228 | + | else StringEntry(aj(toString(cp.originCaller)), toBase58String(cp.transactionId)) | |
1229 | + | ||
1230 | + | ||
1231 | + | @Callable(cp) | |
1232 | + | func constructorV1 (gb) = if ((cp.caller != this)) | |
1197 | 1233 | then throw("Permission denied") | |
1198 | - | else [StringEntry( | |
1199 | - | ||
1200 | - | ||
1201 | - | ||
1202 | - | @Callable( | |
1203 | - | func setBlocked ( | |
1234 | + | else [StringEntry(aa(), gb)] | |
1235 | + | ||
1236 | + | ||
1237 | + | ||
1238 | + | @Callable(cp) | |
1239 | + | func setBlocked (gc) = if ((cp.caller != this)) | |
1204 | 1240 | then throw("permission denied") | |
1205 | - | else [BooleanEntry( | |
1206 | - | ||
1207 | - | ||
1208 | - | ||
1209 | - | @Callable( | |
1241 | + | else [BooleanEntry(aJ(), gc)] | |
1242 | + | ||
1243 | + | ||
1244 | + | ||
1245 | + | @Callable(cp) | |
1210 | 1246 | func stakeLand () = { | |
1211 | - | let | |
1212 | - | if ((size( | |
1247 | + | let gd = ga(cp) | |
1248 | + | if ((size(cp.payments) != 1)) | |
1213 | 1249 | then throw("Exactly one payment required") | |
1214 | 1250 | else { | |
1215 | - | let | |
1216 | - | let | |
1217 | - | let | |
1218 | - | if (( | |
1251 | + | let ge = value(cp.payments[0]) | |
1252 | + | let am = value(ge.assetId) | |
1253 | + | let V = toString(cp.caller) | |
1254 | + | if ((ge.amount != 1)) | |
1219 | 1255 | then throw((("NFT " + i) + " token should be attached as payment")) | |
1220 | 1256 | else { | |
1221 | - | let | |
1222 | - | if (( | |
1257 | + | let eU = value(assetInfo(am)) | |
1258 | + | if ((eU.issuer != this)) | |
1223 | 1259 | then throw("Unknown issuer of token") | |
1224 | - | else if (!(contains( | |
1260 | + | else if (!(contains(eU.name, i))) | |
1225 | 1261 | then throw((("Only NFT " + i) + " tokens are accepted")) | |
1226 | 1262 | else { | |
1227 | - | let | |
1228 | - | let | |
1229 | - | then dropRight( | |
1230 | - | else if (contains( | |
1231 | - | then dropRight( | |
1232 | - | else dropRight( | |
1233 | - | if (!(isDefined(parseInt( | |
1234 | - | then throw(("Cannot parse land number from " + | |
1263 | + | let gf = drop(eU.name, 4) | |
1264 | + | let bB = if (contains(gf, "XXL")) | |
1265 | + | then dropRight(gf, 3) | |
1266 | + | else if (contains(gf, "XL")) | |
1267 | + | then dropRight(gf, 2) | |
1268 | + | else dropRight(gf, 1) | |
1269 | + | if (!(isDefined(parseInt(bB)))) | |
1270 | + | then throw(("Cannot parse land number from " + eU.name)) | |
1235 | 1271 | else { | |
1236 | - | let | |
1237 | - | let | |
1238 | - | if (isDefined(getInteger( | |
1239 | - | then throw((("NFT " + | |
1272 | + | let aw = toBase58String(am) | |
1273 | + | let eV = ao(aw) | |
1274 | + | if (isDefined(getInteger(eV))) | |
1275 | + | then throw((("NFT " + eU.name) + " is already staked")) | |
1240 | 1276 | else { | |
1241 | - | let | |
1242 | - | let | |
1243 | - | let | |
1244 | - | let | |
1245 | - | let | |
1246 | - | let | |
1247 | - | let | |
1248 | - | then split_51C(value( | |
1277 | + | let eY = split(eU.description, "_") | |
1278 | + | let cl = cr(eY[D]) | |
1279 | + | let eJ = aU(eY[C]) | |
1280 | + | let ca = cq(cl, (eJ / m), 1) | |
1281 | + | let eK = valueOrElse(getInteger(aq(k, aw)), 0) | |
1282 | + | let fQ = getString(ax(V)) | |
1283 | + | let fL = if (isDefined(fQ)) | |
1284 | + | then split_51C(value(fQ), "_") | |
1249 | 1285 | else nil | |
1250 | - | if (containsElement( | |
1251 | - | then throw(("Your staked lands already contain " + | |
1286 | + | if (containsElement(fL, aw)) | |
1287 | + | then throw(("Your staked lands already contain " + aw)) | |
1252 | 1288 | else { | |
1253 | - | let | |
1254 | - | [IntegerEntry( | |
1289 | + | let dv = valueOrElse(getInteger(ap(aw)), 0) | |
1290 | + | [IntegerEntry(eV, lastBlock.timestamp), IntegerEntry(as(i, aw, V), lastBlock.timestamp), StringEntry(ax(V), makeString_11C((fL :+ aw), "_")), StringEntry(al(aw), V), StringEntry(bG(bB), V), IntegerEntry(bF(k, aw, V), eK), IntegerEntry(bE(aw, V), dv), StringEntry(aI(), ca), gd] | |
1255 | 1291 | } | |
1256 | 1292 | } | |
1257 | 1293 | } | |
1258 | 1294 | } | |
1259 | 1295 | } | |
1260 | 1296 | } | |
1261 | 1297 | } | |
1262 | 1298 | ||
1263 | 1299 | ||
1264 | 1300 | ||
1265 | - | @Callable( | |
1266 | - | func unstakeLand ( | |
1267 | - | let | |
1268 | - | if ((size( | |
1301 | + | @Callable(cp) | |
1302 | + | func unstakeLand (eP) = { | |
1303 | + | let gd = ga(cp) | |
1304 | + | if ((size(cp.payments) != 0)) | |
1269 | 1305 | then throw("No payments required") | |
1270 | 1306 | else { | |
1271 | - | let | |
1272 | - | let | |
1273 | - | let | |
1274 | - | let | |
1275 | - | let | |
1276 | - | let | |
1277 | - | let | |
1278 | - | let | |
1279 | - | let | |
1280 | - | let | |
1281 | - | if (!(isDefined( | |
1282 | - | then throw(("Your staked lands don't contain " + | |
1307 | + | let ak = toString(cp.caller) | |
1308 | + | let fa = eN(ak, bL, eP) | |
1309 | + | let aw = fa._2 | |
1310 | + | let fP = ax(ak) | |
1311 | + | let cl = cr(fa._3[D]) | |
1312 | + | let eJ = aU(fa._3[C]) | |
1313 | + | let ca = cq(cl, (eJ / m), -1) | |
1314 | + | let ft = fm(ak, aw, eJ, bL) | |
1315 | + | let fL = split_51C(valueOrElse(getString(fP), ""), "_") | |
1316 | + | let af = indexOf(fL, aw) | |
1317 | + | if (!(isDefined(af))) | |
1318 | + | then throw(("Your staked lands don't contain " + aw)) | |
1283 | 1319 | else { | |
1284 | - | let | |
1285 | - | let | |
1286 | - | if (( | |
1287 | - | then throw(("Your gWL are taking part in voting, cannot unstake until " + toString( | |
1288 | - | else [ScriptTransfer( | |
1289 | - | then StringEntry( | |
1290 | - | else DeleteEntry( | |
1320 | + | let cW = value(blockInfoByHeight(height)).timestamp | |
1321 | + | let gg = valueOrElse(getInteger(ai, aK(ak)), 0) | |
1322 | + | if ((gg >= cW)) | |
1323 | + | then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(gg))) | |
1324 | + | else [ScriptTransfer(cp.caller, 1, fromBase58String(aw)), DeleteEntry(ao(aw)), DeleteEntry(as(i, aw, ak)), StringEntry(aI(), ca), StringEntry(ft._2, makeString(ft._3, ":")), if ((size(fL) > 1)) | |
1325 | + | then StringEntry(fP, makeString_11C(removeByIndex(fL, value(af)), "_")) | |
1326 | + | else DeleteEntry(fP), gd] | |
1291 | 1327 | } | |
1292 | 1328 | } | |
1293 | 1329 | } | |
1294 | 1330 | ||
1295 | 1331 | ||
1296 | 1332 | ||
1297 | - | @Callable( | |
1333 | + | @Callable(cp) | |
1298 | 1334 | func stakeDuck () = { | |
1299 | - | let | |
1300 | - | if ((size( | |
1335 | + | let gd = ga(cp) | |
1336 | + | if ((size(cp.payments) != 1)) | |
1301 | 1337 | then throw("Exactly one payment required") | |
1302 | 1338 | else { | |
1303 | - | let | |
1304 | - | let | |
1305 | - | let | |
1306 | - | if (( | |
1339 | + | let ge = value(cp.payments[0]) | |
1340 | + | let am = value(ge.assetId) | |
1341 | + | let V = toString(cp.caller) | |
1342 | + | if ((ge.amount != 1)) | |
1307 | 1343 | then throw((("NFT " + j) + " token should be attached as payment")) | |
1308 | 1344 | else { | |
1309 | - | let | |
1310 | - | if (if (( | |
1311 | - | then ( | |
1345 | + | let eU = value(assetInfo(am)) | |
1346 | + | if (if ((eU.issuer != bi)) | |
1347 | + | then (eU.issuer != bj) | |
1312 | 1348 | else false) | |
1313 | 1349 | then throw((("Unknown issuer of " + j) + " token")) | |
1314 | - | else if (!(contains( | |
1350 | + | else if (!(contains(eU.name, j))) | |
1315 | 1351 | then throw((("Only NFT " + j) + " tokens are accepted")) | |
1316 | 1352 | else { | |
1317 | - | let | |
1318 | - | let | |
1319 | - | if (isDefined(getInteger( | |
1320 | - | then throw((("NFT " + | |
1321 | - | else if (isDefined(getString( | |
1322 | - | then throw(("You already staked one duck: " + | |
1353 | + | let gh = toBase58String(am) | |
1354 | + | let eV = ao(gh) | |
1355 | + | if (isDefined(getInteger(eV))) | |
1356 | + | then throw((("NFT " + eU.name) + " is already staked")) | |
1357 | + | else if (isDefined(getString(aD(V)))) | |
1358 | + | then throw(("You already staked one duck: " + eU.name)) | |
1323 | 1359 | else { | |
1324 | - | let | |
1325 | - | let | |
1326 | - | let | |
1327 | - | let | |
1328 | - | ([IntegerEntry( | |
1360 | + | let gi = aG(gh) | |
1361 | + | let gj = getString(gi) | |
1362 | + | let cY = aE(gh) | |
1363 | + | let gk = getString(cY) | |
1364 | + | ([IntegerEntry(eV, lastBlock.timestamp), IntegerEntry(as(j, toBase58String(am), V), lastBlock.timestamp), StringEntry(aC(gh), V), StringEntry(aD(V), gh)] ++ (if (isDefined(gj)) | |
1329 | 1365 | then nil | |
1330 | - | else ([StringEntry( | |
1366 | + | else ([StringEntry(gi, u)] ++ (if (isDefined(gk)) | |
1331 | 1367 | then nil | |
1332 | - | else (([StringEntry( | |
1368 | + | else (([StringEntry(cY, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(aH(gh), 100)) :+ gd))))) | |
1333 | 1369 | } | |
1334 | 1370 | } | |
1335 | 1371 | } | |
1336 | 1372 | } | |
1337 | 1373 | } | |
1338 | 1374 | ||
1339 | 1375 | ||
1340 | 1376 | ||
1341 | - | @Callable( | |
1342 | - | func unstakeDuck ( | |
1343 | - | let | |
1344 | - | if ((size( | |
1377 | + | @Callable(cp) | |
1378 | + | func unstakeDuck (gh) = { | |
1379 | + | let gd = ga(cp) | |
1380 | + | if ((size(cp.payments) != 0)) | |
1345 | 1381 | then throw("No payments required") | |
1346 | 1382 | else { | |
1347 | - | let | |
1348 | - | let | |
1349 | - | let | |
1350 | - | let | |
1351 | - | if (!(isDefined(getInteger( | |
1352 | - | then throw((("NFT " + | |
1353 | - | else if (!(isDefined(getString( | |
1354 | - | then throw((("The duck " + | |
1383 | + | let am = fromBase58String(gh) | |
1384 | + | let V = toString(cp.caller) | |
1385 | + | let eU = value(assetInfo(am)) | |
1386 | + | let eV = ao(toBase58String(am)) | |
1387 | + | if (!(isDefined(getInteger(eV)))) | |
1388 | + | then throw((("NFT " + eU.name) + " is not staked")) | |
1389 | + | else if (!(isDefined(getString(aD(V))))) | |
1390 | + | then throw((("The duck " + eU.name) + " is not staked")) | |
1355 | 1391 | else { | |
1356 | - | let | |
1357 | - | if (( | |
1392 | + | let eX = valueOrErrorMessage(getString(aC(toBase58String(am))), (("NFT " + eU.name) + " is orphaned")) | |
1393 | + | if ((eX != V)) | |
1358 | 1394 | then throw("Staked NFT is not yours") | |
1359 | 1395 | else { | |
1360 | - | let | |
1361 | - | let | |
1362 | - | if ((100 > | |
1396 | + | let eB = aH(gh) | |
1397 | + | let gl = valueOrElse(getInteger(eB), 100) | |
1398 | + | if ((100 > gl)) | |
1363 | 1399 | then throw("Please heal your duck before unstaking") | |
1364 | - | else [ScriptTransfer( | |
1400 | + | else [ScriptTransfer(cp.caller, 1, am), DeleteEntry(eV), DeleteEntry(eB), DeleteEntry(aG(gh)), DeleteEntry(aC(gh)), DeleteEntry(as(j, gh, V)), DeleteEntry(aD(V)), gd] | |
1365 | 1401 | } | |
1366 | 1402 | } | |
1367 | 1403 | } | |
1368 | 1404 | } | |
1369 | 1405 | ||
1370 | 1406 | ||
1371 | 1407 | ||
1372 | - | @Callable( | |
1373 | - | func claimRes ( | |
1374 | - | let | |
1375 | - | if ((size( | |
1408 | + | @Callable(cp) | |
1409 | + | func claimRes (dI,gm) = { | |
1410 | + | let gd = ga(cp) | |
1411 | + | if ((size(cp.payments) != 0)) | |
1376 | 1412 | then throw("No payments required") | |
1377 | 1413 | else { | |
1378 | - | let | |
1379 | - | let | |
1380 | - | $Tuple2(((( | |
1381 | - | } | |
1382 | - | } | |
1383 | - | ||
1384 | - | ||
1385 | - | ||
1386 | - | @Callable( | |
1387 | - | func claimResToWH ( | |
1388 | - | let | |
1389 | - | if ((size( | |
1414 | + | let ak = toString(cp.originCaller) | |
1415 | + | let ci = eZ(ak, dI, bL, gm) | |
1416 | + | $Tuple2((((ci._1 :+ StringEntry(ci._2, makeString(ci._3, ":"))) :+ StringEntry(ci._4, makeString(ci._5, ":"))) :+ gd), ci._3[P]) | |
1417 | + | } | |
1418 | + | } | |
1419 | + | ||
1420 | + | ||
1421 | + | ||
1422 | + | @Callable(cp) | |
1423 | + | func claimResToWH (dI,gm) = { | |
1424 | + | let gd = ga(cp) | |
1425 | + | if ((size(cp.payments) != 0)) | |
1390 | 1426 | then throw("No payments required") | |
1391 | 1427 | else { | |
1392 | - | let | |
1393 | - | let | |
1394 | - | $Tuple2(((( | |
1395 | - | } | |
1396 | - | } | |
1397 | - | ||
1398 | - | ||
1399 | - | ||
1400 | - | @Callable( | |
1401 | - | func flight ( | |
1402 | - | let | |
1403 | - | if (!(sigVerify_8Kb( | |
1428 | + | let ak = toString(cp.originCaller) | |
1429 | + | let ci = eZ(ak, dI, bK, gm) | |
1430 | + | $Tuple2((((ci._1 :+ StringEntry(ci._2, makeString(ci._3, ":"))) :+ StringEntry(ci._4, makeString(ci._5, ":"))) :+ gd), ci._5[G]) | |
1431 | + | } | |
1432 | + | } | |
1433 | + | ||
1434 | + | ||
1435 | + | ||
1436 | + | @Callable(cp) | |
1437 | + | func flight (eq,er) = { | |
1438 | + | let gd = ga(cp) | |
1439 | + | if (!(sigVerify_8Kb(eq, er, bk))) | |
1404 | 1440 | then throw("signature does not match") | |
1405 | - | else if ((size( | |
1441 | + | else if ((size(cp.payments) != 0)) | |
1406 | 1442 | then throw("No payments required") | |
1407 | 1443 | else { | |
1408 | - | let | |
1409 | - | let | |
1410 | - | let | |
1411 | - | let | |
1412 | - | let | |
1413 | - | let | |
1414 | - | let | |
1415 | - | let | |
1416 | - | if (if (( | |
1444 | + | let dc = split(toUtf8String(eq), ";") | |
1445 | + | let es = split(dc[0], "|") | |
1446 | + | let et = split(es[bN], "_") | |
1447 | + | let eu = parseIntValue(et[0]) | |
1448 | + | let ev = parseIntValue(et[1]) | |
1449 | + | let ew = split(dc[1], ":") | |
1450 | + | let ex = ew[0] | |
1451 | + | let ey = parseIntValue(es[bO]) | |
1452 | + | if (if ((ey > (lastBlock.timestamp + bm))) | |
1417 | 1453 | then true | |
1418 | - | else ((lastBlock.timestamp - | |
1454 | + | else ((lastBlock.timestamp - bm) > ey)) | |
1419 | 1455 | then throw("signature outdated") | |
1420 | 1456 | else { | |
1421 | - | let | |
1422 | - | let | |
1423 | - | if (( | |
1424 | - | then throw(((("Tx ids don't match! In state: " + | |
1457 | + | let ez = ew[1] | |
1458 | + | let eA = valueOrElse(getString(aj(toString(cp.originCaller))), "") | |
1459 | + | if ((eA != ez)) | |
1460 | + | then throw(((("Tx ids don't match! In state: " + eA) + ", in msg: ") + ez)) | |
1425 | 1461 | else { | |
1426 | - | let | |
1427 | - | let | |
1428 | - | let | |
1429 | - | let | |
1430 | - | if (( | |
1431 | - | then throw(((("oldHealth=" + toString(valueOrElse(getInteger( | |
1432 | - | else if ((0 >= | |
1462 | + | let aL = toString(cp.caller) | |
1463 | + | let aF = valueOrErrorMessage(getString(aD(aL)), "You don't have a duck staked") | |
1464 | + | let eB = aH(aF) | |
1465 | + | let eC = valueOrElse(getInteger(eB), 100) | |
1466 | + | if ((eC != eu)) | |
1467 | + | then throw(((("oldHealth=" + toString(valueOrElse(getInteger(eB), 100))) + " from state does not match one from flight log=") + toString(eu))) | |
1468 | + | else if ((0 >= eu)) | |
1433 | 1469 | then throw("You can't fly with zero health") | |
1434 | 1470 | else { | |
1435 | - | let | |
1436 | - | let | |
1437 | - | if (( | |
1471 | + | let gi = aG(aF) | |
1472 | + | let eR = valueOrElse(getString(gi), u) | |
1473 | + | if ((ex == eR)) | |
1438 | 1474 | then throw("You can't fly to the same location") | |
1439 | 1475 | else { | |
1440 | - | let | |
1441 | - | then | |
1476 | + | let eD = if ((size(es) > bP)) | |
1477 | + | then es[bP] | |
1442 | 1478 | else "" | |
1443 | - | let | |
1444 | - | then ( | |
1479 | + | let eE = if (if ((ev > 0)) | |
1480 | + | then (eD == "$") | |
1445 | 1481 | else false) | |
1446 | - | then | |
1482 | + | then aS(invoke(ag, "sendUsdtPrize", [aL], nil)) | |
1447 | 1483 | else 0 | |
1448 | - | $Tuple2([StringEntry( | |
1449 | - | then | |
1450 | - | else | |
1484 | + | $Tuple2([StringEntry(gi, if ((ev > 0)) | |
1485 | + | then ex | |
1486 | + | else eR), IntegerEntry(eB, ev), gd], eE) | |
1451 | 1487 | } | |
1452 | 1488 | } | |
1453 | 1489 | } | |
1454 | 1490 | } | |
1455 | 1491 | } | |
1456 | 1492 | } | |
1457 | 1493 | ||
1458 | 1494 | ||
1459 | 1495 | ||
1460 | - | @Callable( | |
1461 | - | func setHealth ( | |
1462 | - | let | |
1463 | - | if (if ((0 > | |
1496 | + | @Callable(cp) | |
1497 | + | func setHealth (gl,aF) = { | |
1498 | + | let gd = ga(cp) | |
1499 | + | if (if ((0 > gl)) | |
1464 | 1500 | then true | |
1465 | - | else ( | |
1501 | + | else (gl > 100)) | |
1466 | 1502 | then throw("HP should be within 0..100") | |
1467 | - | else [IntegerEntry(aF | |
1468 | - | } | |
1469 | - | ||
1470 | - | ||
1471 | - | ||
1472 | - | @Callable( | |
1473 | - | func heal ( | |
1474 | - | let | |
1475 | - | if (if ((1 > | |
1503 | + | else [IntegerEntry(aH(aF), gl), gd] | |
1504 | + | } | |
1505 | + | ||
1506 | + | ||
1507 | + | ||
1508 | + | @Callable(cp) | |
1509 | + | func heal (gn,go) = { | |
1510 | + | let gd = ga(cp) | |
1511 | + | if (if ((1 > gn)) | |
1476 | 1512 | then true | |
1477 | - | else ( | |
1513 | + | else (gn > 3)) | |
1478 | 1514 | then throw("MedKit levels 1..3 only") | |
1479 | - | else if ((0 >= | |
1480 | - | then throw(("Quantity should be positive! " + toString( | |
1515 | + | else if ((0 >= go)) | |
1516 | + | then throw(("Quantity should be positive! " + toString(go))) | |
1481 | 1517 | else { | |
1482 | - | let | |
1483 | - | let | |
1484 | - | let | |
1485 | - | if (( | |
1518 | + | let aF = valueOrErrorMessage(getString(aD(toString(cp.caller))), "You don't have a duck staked") | |
1519 | + | let eB = aH(aF) | |
1520 | + | let gp = valueOrElse(getInteger(eB), 100) | |
1521 | + | if ((gp >= 100)) | |
1486 | 1522 | then throw("HP should be < 100 to heal") | |
1487 | 1523 | else { | |
1488 | - | let | |
1489 | - | let | |
1490 | - | let | |
1491 | - | let | |
1524 | + | let cY = aE(aF) | |
1525 | + | let dL = cX(cY) | |
1526 | + | let gq = (gn - 1) | |
1527 | + | let gr = if ((dL[R] == "")) | |
1492 | 1528 | then nil | |
1493 | - | else split( | |
1494 | - | let | |
1495 | - | then parseIntValue( | |
1529 | + | else split(dL[R], "_") | |
1530 | + | let gs = if ((size(gr) > gq)) | |
1531 | + | then parseIntValue(gr[gq]) | |
1496 | 1532 | else 0 | |
1497 | - | if (( | |
1498 | - | then throw(((("You have only " + toString( | |
1533 | + | if ((go > gs)) | |
1534 | + | then throw(((("You have only " + toString(gs)) + " of ") + x[gq])) | |
1499 | 1535 | else { | |
1500 | - | func | |
1501 | - | let | |
1502 | - | let | |
1503 | - | then parseIntValue( | |
1536 | + | func gt (bX,gu) = { | |
1537 | + | let aT = bX._2 | |
1538 | + | let cL = if ((size(gr) > aT)) | |
1539 | + | then parseIntValue(gr[aT]) | |
1504 | 1540 | else 0 | |
1505 | - | let | |
1506 | - | then ( | |
1507 | - | else | |
1508 | - | $Tuple2(( | |
1541 | + | let gv = toString(if ((aT == gq)) | |
1542 | + | then (cL - go) | |
1543 | + | else cL) | |
1544 | + | $Tuple2((bX._1 :+ gv), (aT + 1)) | |
1509 | 1545 | } | |
1510 | 1546 | ||
1511 | - | let | |
1512 | - | let | |
1513 | - | let | |
1514 | - | func | |
1515 | - | then | |
1516 | - | else | |
1517 | - | ||
1518 | - | func | |
1519 | - | then | |
1547 | + | let gw = ( let bb = z | |
1548 | + | let bc = size(bb) | |
1549 | + | let bd = $Tuple2(nil, 0) | |
1550 | + | func be (bf,bg) = if ((bg >= bc)) | |
1551 | + | then bf | |
1552 | + | else gt(bf, bb[bg]) | |
1553 | + | ||
1554 | + | func bh (bf,bg) = if ((bg >= bc)) | |
1555 | + | then bf | |
1520 | 1556 | else throw("List size exceeds 50") | |
1521 | 1557 | ||
1522 | - | | |
1523 | - | let | |
1524 | - | $Tuple2([IntegerEntry( | |
1558 | + | bh(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(bd, 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))._1 | |
1559 | + | let gx = (gp + bl[(gn - 1)]) | |
1560 | + | $Tuple2([IntegerEntry(eB, gx), StringEntry(cY, makeString_2C([dL[O], dL[P], dL[Q], makeString(gw, "_")], ":")), gd], gx) | |
1525 | 1561 | } | |
1526 | 1562 | } | |
1527 | 1563 | } | |
1528 | 1564 | } | |
1529 | 1565 | ||
1530 | 1566 | ||
1531 | 1567 | ||
1532 | - | @Callable(cf) | |
1533 | - | func healES (gd,ge) = { | |
1534 | - | let fT = fQ(cf) | |
1535 | - | $Tuple2([fT], 0) | |
1536 | - | } | |
1537 | - | ||
1538 | - | ||
1539 | - | ||
1540 | - | @Callable(cf) | |
1541 | - | func updateBackpack (aD,go) = { | |
1542 | - | let fT = fQ(cf) | |
1543 | - | if ((cf.caller != af)) | |
1568 | + | @Callable(cp) | |
1569 | + | func healES () = { | |
1570 | + | let gd = ga(cp) | |
1571 | + | if ((size(cp.payments) != 1)) | |
1572 | + | then throw("Exactly one payment required") | |
1573 | + | else { | |
1574 | + | let ge = value(cp.payments[0]) | |
1575 | + | if ((ge.assetId != b)) | |
1576 | + | then throw("Allowed USDT payment only!") | |
1577 | + | else { | |
1578 | + | let aF = valueOrErrorMessage(getString(aD(toString(cp.caller))), "You don't have a duck staked") | |
1579 | + | let eB = aH(aF) | |
1580 | + | let gp = valueOrElse(getInteger(eB), 100) | |
1581 | + | if ((gp > 0)) | |
1582 | + | then throw("HP should be 0 to call Emergency Service") | |
1583 | + | else { | |
1584 | + | let cY = aE(aF) | |
1585 | + | let dL = cX(cY) | |
1586 | + | let gr = if ((dL[R] == "")) | |
1587 | + | then nil | |
1588 | + | else split(dL[R], "_") | |
1589 | + | let gy = if ((size(gr) > 0)) | |
1590 | + | then parseIntValue(gr[0]) | |
1591 | + | else 0 | |
1592 | + | let gz = if ((size(gr) > 1)) | |
1593 | + | then parseIntValue(gr[1]) | |
1594 | + | else 0 | |
1595 | + | let gA = if ((size(gr) > 2)) | |
1596 | + | then parseIntValue(gr[2]) | |
1597 | + | else 0 | |
1598 | + | if (if (if ((gy > 0)) | |
1599 | + | then true | |
1600 | + | else (gz > 0)) | |
1601 | + | then true | |
1602 | + | else (gA > 0)) | |
1603 | + | then throw("You have to use own Medical Kit") | |
1604 | + | else { | |
1605 | + | let gB = getString(ah, aM()) | |
1606 | + | let gC = if (isDefined(gB)) | |
1607 | + | then split(value(gB), "_") | |
1608 | + | else nil | |
1609 | + | let gD = if ((size(gC) > 0)) | |
1610 | + | then parseIntValue(gC[0]) | |
1611 | + | else 0 | |
1612 | + | if ((0 >= gD)) | |
1613 | + | then throw("There are no Medical Kits L1 at Emergency Service storage") | |
1614 | + | else { | |
1615 | + | let gx = (gp + bl[0]) | |
1616 | + | let gE = makeString([toString((gD - 1)), removeByIndex(gC, 0)], "_") | |
1617 | + | let aX = split(z[0], "_") | |
1618 | + | let gF = aW(aX) | |
1619 | + | let gG = fraction((gF * w), v, 10) | |
1620 | + | if ((ge.amount != gG)) | |
1621 | + | then throw(("Payment attached should be " + toString(gG))) | |
1622 | + | else { | |
1623 | + | let ci = aP(invoke(ah, "updateEsStorage", [gE], nil)) | |
1624 | + | $Tuple2([IntegerEntry(eB, gx), gd], ci) | |
1625 | + | } | |
1626 | + | } | |
1627 | + | } | |
1628 | + | } | |
1629 | + | } | |
1630 | + | } | |
1631 | + | } | |
1632 | + | ||
1633 | + | ||
1634 | + | ||
1635 | + | @Callable(cp) | |
1636 | + | func updateBackpack (aF,gH) = { | |
1637 | + | let gd = ga(cp) | |
1638 | + | if ((cp.caller != ah)) | |
1544 | 1639 | then throw("permission denied") | |
1545 | - | else $Tuple2([StringEntry( | |
1546 | - | } | |
1547 | - | ||
1548 | - | ||
1549 | - | ||
1550 | - | @Callable( | |
1640 | + | else $Tuple2([StringEntry(aE(aF), gH), gd], gH) | |
1641 | + | } | |
1642 | + | ||
1643 | + | ||
1644 | + | ||
1645 | + | @Callable(cp) | |
1551 | 1646 | func buySLand () = { | |
1552 | - | let | |
1553 | - | if ((size( | |
1647 | + | let gd = ga(cp) | |
1648 | + | if ((size(cp.payments) != 1)) | |
1554 | 1649 | then throw("Exactly one payment required") | |
1555 | 1650 | else { | |
1556 | - | let | |
1557 | - | if (( | |
1651 | + | let ge = value(cp.payments[0]) | |
1652 | + | if ((ge.assetId != b)) | |
1558 | 1653 | then throw("Allowed USDT payment only!") | |
1559 | - | else if (( | |
1560 | - | then throw(("Payment attached should be " + toString( | |
1654 | + | else if ((ge.amount != br)) | |
1655 | + | then throw(("Payment attached should be " + toString(br))) | |
1561 | 1656 | else { | |
1562 | - | let | |
1563 | - | $Tuple2((( | |
1657 | + | let ci = eh(cp.caller, cp.transactionId) | |
1658 | + | $Tuple2(((ci._1 :+ ScriptTransfer(ah, ge.amount, b)) :+ gd), ci._2._1) | |
1564 | 1659 | } | |
1565 | 1660 | } | |
1566 | 1661 | } | |
1567 | 1662 | ||
1568 | 1663 | ||
1569 | 1664 | ||
1570 | - | @Callable( | |
1571 | - | func expedition ( | |
1572 | - | let | |
1573 | - | if ((size( | |
1665 | + | @Callable(cp) | |
1666 | + | func expedition (eq,er) = { | |
1667 | + | let gd = ga(cp) | |
1668 | + | if ((size(cp.payments) != 0)) | |
1574 | 1669 | then throw("No payments required") | |
1575 | 1670 | else { | |
1576 | - | let | |
1577 | - | $Tuple2(( | |
1578 | - | } | |
1579 | - | } | |
1580 | - | ||
1581 | - | ||
1582 | - | ||
1583 | - | @Callable( | |
1584 | - | func upgradeInfra ( | |
1585 | - | let | |
1586 | - | if ((size( | |
1671 | + | let ci = ep(true, cp.caller, cp.transactionId, eq, er) | |
1672 | + | $Tuple2((ci._1 :+ gd), $Tuple2(ci._2, ci._3)) | |
1673 | + | } | |
1674 | + | } | |
1675 | + | ||
1676 | + | ||
1677 | + | ||
1678 | + | @Callable(cp) | |
1679 | + | func upgradeInfra (aw) = { | |
1680 | + | let gd = ga(cp) | |
1681 | + | if ((size(cp.payments) != 0)) | |
1587 | 1682 | then throw("No payments required") | |
1588 | 1683 | else { | |
1589 | - | let | |
1590 | - | $Tuple2(( | |
1591 | - | } | |
1592 | - | } | |
1593 | - | ||
1594 | - | ||
1595 | - | ||
1596 | - | @Callable( | |
1597 | - | func upgradeInfraUsdt ( | |
1684 | + | let ci = fn(true, cp.caller, 0, aw) | |
1685 | + | $Tuple2((ci._1 :+ gd), ci._2) | |
1686 | + | } | |
1687 | + | } | |
1688 | + | ||
1689 | + | ||
1690 | + | ||
1691 | + | @Callable(cp) | |
1692 | + | func upgradeInfraUsdt (aw) = if ((cp.caller != this)) | |
1598 | 1693 | then throw("Permission denied") | |
1599 | 1694 | else { | |
1600 | - | let | |
1601 | - | if ((size( | |
1695 | + | let gd = ga(cp) | |
1696 | + | if ((size(cp.payments) != 1)) | |
1602 | 1697 | then throw("Exactly one payment required") | |
1603 | 1698 | else { | |
1604 | - | let | |
1605 | - | if (( | |
1699 | + | let ge = value(cp.payments[0]) | |
1700 | + | if ((ge.assetId != b)) | |
1606 | 1701 | then throw("Allowed USDT payment only!") | |
1607 | 1702 | else { | |
1608 | - | let | |
1609 | - | $Tuple2((( | |
1703 | + | let ci = fn(false, cp.caller, ge.amount, aw) | |
1704 | + | $Tuple2(((ci._1 :+ ScriptTransfer(ah, ge.amount, b)) :+ gd), ci._2) | |
1610 | 1705 | } | |
1611 | 1706 | } | |
1612 | 1707 | } | |
1613 | 1708 | ||
1614 | 1709 | ||
1615 | 1710 | ||
1616 | - | @Callable( | |
1617 | - | func activateArtifact ( | |
1618 | - | let | |
1619 | - | if ((size( | |
1711 | + | @Callable(cp) | |
1712 | + | func activateArtifact (gI,aw) = { | |
1713 | + | let gd = ga(cp) | |
1714 | + | if ((size(cp.payments) != 0)) | |
1620 | 1715 | then throw("No payments required") | |
1621 | 1716 | else { | |
1622 | - | let | |
1623 | - | let c = | |
1717 | + | let ci = { | |
1718 | + | let c = gI | |
1624 | 1719 | if (("PRESALE" == c)) | |
1625 | - | then | |
1720 | + | then fz(toString(cp.caller), aw) | |
1626 | 1721 | else throw("Unknown artifact") | |
1627 | 1722 | } | |
1628 | - | ( | |
1629 | - | } | |
1630 | - | } | |
1631 | - | ||
1632 | - | ||
1633 | - | ||
1634 | - | @Callable( | |
1635 | - | func mergeLands ( | |
1636 | - | let | |
1637 | - | if ((size( | |
1723 | + | (ci :+ gd) | |
1724 | + | } | |
1725 | + | } | |
1726 | + | ||
1727 | + | ||
1728 | + | ||
1729 | + | @Callable(cp) | |
1730 | + | func mergeLands (fE) = { | |
1731 | + | let gd = ga(cp) | |
1732 | + | if ((size(cp.payments) != 0)) | |
1638 | 1733 | then throw("No payments required") | |
1639 | 1734 | else { | |
1640 | - | let | |
1641 | - | $Tuple2(( | |
1642 | - | } | |
1643 | - | } | |
1644 | - | ||
1645 | - | ||
1646 | - | ||
1647 | - | @Callable( | |
1648 | - | func mergeLandsUsdt ( | |
1649 | - | let | |
1650 | - | if ((size( | |
1735 | + | let ci = fY(true, toString(cp.caller), 0, fE, cp.transactionId) | |
1736 | + | $Tuple2((ci._1 :+ gd), ci._2) | |
1737 | + | } | |
1738 | + | } | |
1739 | + | ||
1740 | + | ||
1741 | + | ||
1742 | + | @Callable(cp) | |
1743 | + | func mergeLandsUsdt (fE) = { | |
1744 | + | let gd = ga(cp) | |
1745 | + | if ((size(cp.payments) != 1)) | |
1651 | 1746 | then throw("Exactly one payment required") | |
1652 | 1747 | else { | |
1653 | - | let | |
1654 | - | if (( | |
1748 | + | let ge = value(cp.payments[0]) | |
1749 | + | if ((ge.assetId != b)) | |
1655 | 1750 | then throw("Allowed USDT payment only!") | |
1656 | 1751 | else { | |
1657 | - | let | |
1658 | - | $Tuple2((( | |
1752 | + | let ci = fY(false, toString(cp.caller), ge.amount, fE, cp.transactionId) | |
1753 | + | $Tuple2(((ci._1 :+ ScriptTransfer(ah, ge.amount, b)) :+ gd), ci._2) | |
1659 | 1754 | } | |
1660 | 1755 | } | |
1661 | 1756 | } | |
1662 | 1757 | ||
1663 | 1758 | ||
1664 | 1759 | ||
1665 | - | @Callable( | |
1666 | - | func cargoExchange ( | |
1667 | - | let | |
1668 | - | if ((size( | |
1760 | + | @Callable(cp) | |
1761 | + | func cargoExchange (gJ,aw) = { | |
1762 | + | let gd = ga(cp) | |
1763 | + | if ((size(cp.payments) != 0)) | |
1669 | 1764 | then throw("No payments required") | |
1670 | 1765 | else { | |
1671 | - | let | |
1672 | - | let | |
1673 | - | let | |
1674 | - | let | |
1675 | - | if (!(isDefined(getInteger( | |
1676 | - | then throw(( | |
1766 | + | let dK = split_4C(gJ, ":") | |
1767 | + | let ak = toString(cp.originCaller) | |
1768 | + | let eU = value(assetInfo(fromBase58String(aw))) | |
1769 | + | let eV = ao(aw) | |
1770 | + | if (!(isDefined(getInteger(eV)))) | |
1771 | + | then throw((eU.name + " is not staked")) | |
1677 | 1772 | else { | |
1678 | - | let | |
1679 | - | if (( | |
1773 | + | let eX = valueOrErrorMessage(getString(al(aw)), (("NFT " + eU.name) + " is orphaned")) | |
1774 | + | if ((eX != ak)) | |
1680 | 1775 | then throw((i + " is not yours")) | |
1681 | 1776 | else { | |
1682 | - | let | |
1683 | - | let | |
1684 | - | let | |
1685 | - | let | |
1686 | - | let | |
1687 | - | if (( | |
1688 | - | then throw((("Duck location type is " + | |
1689 | - | else if (( | |
1690 | - | then throw(("Duck should be on the land " + | |
1777 | + | let du = (aU(split(eU.description, "_")[C]) / m) | |
1778 | + | let dv = valueOrElse(getInteger(ap(aw)), 0) | |
1779 | + | let aF = valueOrErrorMessage(getString(aD(ak)), "You don't have a duck staked") | |
1780 | + | let eR = valueOrElse(getString(aG(aF)), u) | |
1781 | + | let eS = split(value(eR), "_") | |
1782 | + | if ((eS[aN] != "L")) | |
1783 | + | then throw((("Duck location type is " + eS[aN]) + ", but should be L")) | |
1784 | + | else if ((eS[aO] != aw)) | |
1785 | + | then throw(("Duck should be on the land " + aw)) | |
1691 | 1786 | else { | |
1692 | - | let | |
1693 | - | let | |
1694 | - | let | |
1695 | - | let | |
1696 | - | let | |
1697 | - | let | |
1698 | - | let | |
1699 | - | let | |
1700 | - | [StringEntry( | |
1787 | + | let dt = av(aw) | |
1788 | + | let de = ds(dt, du, dv) | |
1789 | + | let cY = aE(aF) | |
1790 | + | let dL = cX(cY) | |
1791 | + | let ci = dJ(dK, de, dL) | |
1792 | + | let dB = split(de[J], "_") | |
1793 | + | let fk = (parseIntValue(dB[L]) + ci._7) | |
1794 | + | let fl = (parseIntValue(dB[M]) - ci._7) | |
1795 | + | [StringEntry(cY, makeString_2C([dL[O], ci._4, ci._5, ci._6], ":")), StringEntry(dt, makeString_2C([de[F], ci._1, ci._2, ci._3, makeString([dB[K], toString(fk), toString(fl), dB[N]], "_")], ":")), gd] | |
1701 | 1796 | } | |
1702 | 1797 | } | |
1703 | 1798 | } | |
1704 | 1799 | } | |
1705 | 1800 | } | |
1706 | 1801 | ||
1707 | 1802 | ||
1708 | 1803 | ||
1709 | - | @Callable( | |
1710 | - | func saveWarehouse ( | |
1711 | - | let | |
1712 | - | if (( | |
1804 | + | @Callable(cp) | |
1805 | + | func saveWarehouse (dx,aw) = { | |
1806 | + | let gd = ga(cp) | |
1807 | + | if ((cp.caller != ah)) | |
1713 | 1808 | then throw("Access denied") | |
1714 | 1809 | else { | |
1715 | - | let | |
1716 | - | let | |
1717 | - | if ((size( | |
1810 | + | let dt = av(aw) | |
1811 | + | let dy = split_4C(dx, ":") | |
1812 | + | if ((size(dy) != 5)) | |
1718 | 1813 | then throw("warehouse string should contain 4 ':' separators") | |
1719 | 1814 | else { | |
1720 | - | let | |
1721 | - | let | |
1722 | - | let | |
1723 | - | let | |
1724 | - | let | |
1725 | - | $Tuple2([StringEntry( | |
1815 | + | let gK = split(dy[J], "_")[K] | |
1816 | + | let fk = dd(dy) | |
1817 | + | let gL = da(dy[F]) | |
1818 | + | let fl = ((gL - parseIntValue(gK)) - fk) | |
1819 | + | let gM = makeString_2C([dy[F], dy[G], dy[H], dy[I], makeString([gK, toString(fk), toString(fl), toString(gL)], "_")], ":") | |
1820 | + | $Tuple2([StringEntry(dt, gM), gd], gM) | |
1726 | 1821 | } | |
1727 | 1822 | } | |
1728 | 1823 | } | |
1729 | 1824 | ||
1730 | 1825 | ||
1731 | 1826 | ||
1732 | - | @Callable( | |
1733 | - | func fixWarehouseFormat ( | |
1827 | + | @Callable(cp) | |
1828 | + | func fixWarehouseFormat (aw) = if ((cp.caller != ag)) | |
1734 | 1829 | then throw("Access denied") | |
1735 | 1830 | else { | |
1736 | - | let | |
1737 | - | let | |
1738 | - | let | |
1739 | - | let | |
1740 | - | let | |
1741 | - | let | |
1742 | - | let | |
1743 | - | let | |
1744 | - | let | |
1745 | - | let | |
1746 | - | $Tuple2([StringEntry( | |
1831 | + | let dt = av(aw) | |
1832 | + | let eU = value(assetInfo(fromBase58String(aw))) | |
1833 | + | let du = (aU(split(eU.description, "_")[C]) / m) | |
1834 | + | let dv = valueOrElse(getInteger(ap(aw)), 0) | |
1835 | + | let dy = ds(dt, du, dv) | |
1836 | + | let gK = aS(invoke(ah, "recalcLockedVolumeREADONLY", [aw, dy], nil)) | |
1837 | + | let fk = dd(dy) | |
1838 | + | let gL = da(dy[F]) | |
1839 | + | let fl = ((gL - gK) - fk) | |
1840 | + | let gM = makeString_2C([dy[F], dy[G], dy[H], dy[I], makeString([toString(gK), toString(fk), toString(fl), toString(gL)], "_")], ":") | |
1841 | + | $Tuple2([StringEntry(dt, gM)], gM) | |
1747 | 1842 | } | |
1748 | 1843 | ||
1749 | 1844 | ||
1750 | 1845 | ||
1751 | - | @Callable( | |
1752 | - | func setCustomName ( | |
1753 | - | let | |
1754 | - | if ((size( | |
1846 | + | @Callable(cp) | |
1847 | + | func setCustomName (am,fN,ar) = { | |
1848 | + | let gd = ga(cp) | |
1849 | + | if ((size(cp.payments) != 1)) | |
1755 | 1850 | then throw("Exactly one payment required") | |
1756 | 1851 | else { | |
1757 | - | let | |
1758 | - | if (( | |
1852 | + | let ge = value(cp.payments[0]) | |
1853 | + | if ((ge.assetId != b)) | |
1759 | 1854 | then throw("Allowed USDT payment only!") | |
1760 | - | else if (( | |
1761 | - | then throw(("Payment should be " + toString( | |
1762 | - | else if (contains( | |
1763 | - | then throw(("Name should not contain '__': " + | |
1764 | - | else if ((size( | |
1765 | - | then throw(("Name too long, maxLength=" + toString( | |
1855 | + | else if ((ge.amount != bn)) | |
1856 | + | then throw(("Payment should be " + toString(bn))) | |
1857 | + | else if (contains(fN, "__")) | |
1858 | + | then throw(("Name should not contain '__': " + fN)) | |
1859 | + | else if ((size(fN) > bo)) | |
1860 | + | then throw(("Name too long, maxLength=" + toString(bo))) | |
1766 | 1861 | else { | |
1767 | - | let | |
1768 | - | let | |
1769 | - | let c = | |
1862 | + | let ak = toString(cp.originCaller) | |
1863 | + | let gN = { | |
1864 | + | let c = ar | |
1770 | 1865 | if (("ACCOUNT" == c)) | |
1771 | 1866 | then { | |
1772 | - | let | |
1773 | - | let | |
1774 | - | if (isDefined( | |
1775 | - | then throw(("Name already registered: " + | |
1867 | + | let gO = bI(fN) | |
1868 | + | let gP = getString(gO) | |
1869 | + | if (isDefined(gP)) | |
1870 | + | then throw(("Name already registered: " + fN)) | |
1776 | 1871 | else { | |
1777 | - | let | |
1778 | - | let | |
1779 | - | let | |
1780 | - | then [DeleteEntry( | |
1872 | + | let gQ = az(ak) | |
1873 | + | let gR = getString(gQ) | |
1874 | + | let gS = if (isDefined(gR)) | |
1875 | + | then [DeleteEntry(bI(value(gR)))] | |
1781 | 1876 | else nil | |
1782 | - | (( | |
1877 | + | ((gS :+ StringEntry(gQ, fN)) :+ StringEntry(gO, ak)) | |
1783 | 1878 | } | |
1784 | 1879 | } | |
1785 | 1880 | else if (("LAND" == c)) | |
1786 | 1881 | then { | |
1787 | - | let | |
1788 | - | let | |
1789 | - | if (!(isDefined(getInteger( | |
1790 | - | then throw(( | |
1882 | + | let eU = value(assetInfo(fromBase58String(am))) | |
1883 | + | let eV = ao(am) | |
1884 | + | if (!(isDefined(getInteger(eV)))) | |
1885 | + | then throw((eU.name + " is not staked")) | |
1791 | 1886 | else { | |
1792 | - | let | |
1793 | - | if (( | |
1887 | + | let eX = valueOrErrorMessage(getString(al(am)), (("NFT " + eU.name) + " is orphaned")) | |
1888 | + | if ((eX != ak)) | |
1794 | 1889 | then throw((i + " is not yours")) | |
1795 | 1890 | else { | |
1796 | - | let | |
1797 | - | let | |
1798 | - | if (isDefined( | |
1799 | - | then throw(("Name already registered: " + | |
1891 | + | let gO = bC(fN) | |
1892 | + | let gP = getString(gO) | |
1893 | + | if (isDefined(gP)) | |
1894 | + | then throw(("Name already registered: " + fN)) | |
1800 | 1895 | else { | |
1801 | - | let | |
1802 | - | let | |
1803 | - | let | |
1804 | - | then [DeleteEntry( | |
1896 | + | let gT = an(am) | |
1897 | + | let gR = getString(gT) | |
1898 | + | let gS = if (isDefined(gR)) | |
1899 | + | then [DeleteEntry(bC(value(gR)))] | |
1805 | 1900 | else nil | |
1806 | - | (( | |
1901 | + | ((gS :+ StringEntry(gT, fN)) :+ StringEntry(gO, am)) | |
1807 | 1902 | } | |
1808 | 1903 | } | |
1809 | 1904 | } | |
1810 | 1905 | } | |
1811 | 1906 | else if (("DUCK" == c)) | |
1812 | 1907 | then { | |
1813 | - | let | |
1814 | - | let | |
1815 | - | if (if (!(isDefined(getInteger( | |
1908 | + | let eU = value(assetInfo(fromBase58String(am))) | |
1909 | + | let eV = ao(am) | |
1910 | + | if (if (!(isDefined(getInteger(eV)))) | |
1816 | 1911 | then true | |
1817 | - | else !(isDefined(getString( | |
1818 | - | then throw(( | |
1912 | + | else !(isDefined(getString(aD(ak))))) | |
1913 | + | then throw((eU.name + " is not staked")) | |
1819 | 1914 | else { | |
1820 | - | let | |
1821 | - | if (( | |
1915 | + | let eX = valueOrErrorMessage(getString(aC(am)), (("NFT " + eU.name) + " is orphaned")) | |
1916 | + | if ((eX != ak)) | |
1822 | 1917 | then throw((j + " is not yours")) | |
1823 | 1918 | else { | |
1824 | - | let | |
1825 | - | let | |
1826 | - | if (isDefined( | |
1827 | - | then throw(("Name already registered: " + | |
1919 | + | let gO = bH(fN) | |
1920 | + | let gP = getString(gO) | |
1921 | + | if (isDefined(gP)) | |
1922 | + | then throw(("Name already registered: " + fN)) | |
1828 | 1923 | else { | |
1829 | - | let | |
1830 | - | let | |
1831 | - | let | |
1832 | - | then [DeleteEntry( | |
1924 | + | let gT = ay(am) | |
1925 | + | let gR = getString(gT) | |
1926 | + | let gS = if (isDefined(gR)) | |
1927 | + | then [DeleteEntry(bH(value(gR)))] | |
1833 | 1928 | else nil | |
1834 | - | (( | |
1929 | + | ((gS :+ StringEntry(gT, fN)) :+ StringEntry(gO, am)) | |
1835 | 1930 | } | |
1836 | 1931 | } | |
1837 | 1932 | } | |
1838 | 1933 | } | |
1839 | 1934 | else throw("Unknown entity type") | |
1840 | 1935 | } | |
1841 | - | $Tuple2((( | |
1936 | + | $Tuple2(((gN :+ ScriptTransfer(ah, ge.amount, b)) :+ gd), 0) | |
1842 | 1937 | } | |
1843 | 1938 | } | |
1844 | 1939 | } | |
1845 | 1940 | ||
1846 | 1941 | ||
1847 | 1942 | ||
1848 | - | @Callable( | |
1849 | - | func setReferrals ( | |
1943 | + | @Callable(cp) | |
1944 | + | func setReferrals (gU,gV) = if ((cp.callerPublicKey != bk)) | |
1850 | 1945 | then throw("Permission denied") | |
1851 | 1946 | else { | |
1852 | - | let | |
1853 | - | if ((size( | |
1947 | + | let gd = ga(cp) | |
1948 | + | if ((size(cp.payments) != 0)) | |
1854 | 1949 | then throw("No payments required") | |
1855 | - | else if (!(isDefined(addressFromString( | |
1856 | - | then throw(("Invalid address: " + | |
1857 | - | else if (!(isDefined(addressFromString( | |
1858 | - | then throw(("Invalid address: " + | |
1950 | + | else if (!(isDefined(addressFromString(gU)))) | |
1951 | + | then throw(("Invalid address: " + gU)) | |
1952 | + | else if (!(isDefined(addressFromString(gV)))) | |
1953 | + | then throw(("Invalid address: " + gV)) | |
1859 | 1954 | else { | |
1860 | - | let | |
1861 | - | let | |
1862 | - | let | |
1863 | - | then split_4C(value( | |
1955 | + | let gW = bJ() | |
1956 | + | let gX = getString(gW) | |
1957 | + | let gY = if (isDefined(gX)) | |
1958 | + | then split_4C(value(gX), "_") | |
1864 | 1959 | else nil | |
1865 | - | if (containsElement( | |
1866 | - | then throw(( | |
1960 | + | if (containsElement(gY, gV)) | |
1961 | + | then throw((gV + " is not newbie (already has referrals)")) | |
1867 | 1962 | else { | |
1868 | - | let | |
1869 | - | let | |
1870 | - | if (if (isDefined( | |
1871 | - | then isDefined(addressFromString(value( | |
1963 | + | let gZ = aA(gV) | |
1964 | + | let ha = getString(gZ) | |
1965 | + | if (if (isDefined(ha)) | |
1966 | + | then isDefined(addressFromString(value(ha))) | |
1872 | 1967 | else false) | |
1873 | - | then throw((( | |
1968 | + | then throw(((gV + " already has refBy: ") + value(ha))) | |
1874 | 1969 | else { | |
1875 | - | let | |
1876 | - | let | |
1877 | - | let | |
1878 | - | then split_4C(value( | |
1970 | + | let hb = aB(gU) | |
1971 | + | let hc = getString(hb) | |
1972 | + | let hd = if (isDefined(hc)) | |
1973 | + | then split_4C(value(hc), "_") | |
1879 | 1974 | else nil | |
1880 | - | if (containsElement( | |
1881 | - | then throw(((( | |
1975 | + | if (containsElement(hd, gV)) | |
1976 | + | then throw((((gU + " already contains ") + gV) + " within referrals")) | |
1882 | 1977 | else { | |
1883 | - | let | |
1884 | - | let | |
1885 | - | $Tuple2([StringEntry( | |
1978 | + | let he = makeString_2C((hd :+ gV), "_") | |
1979 | + | let hf = makeString_2C((gY :+ gU), "_") | |
1980 | + | $Tuple2([StringEntry(gZ, gU), StringEntry(hb, he), StringEntry(gW, hf), gd], 0) | |
1886 | 1981 | } | |
1887 | 1982 | } | |
1888 | 1983 | } | |
1889 | 1984 | } | |
1890 | 1985 | } | |
1891 | 1986 | ||
1892 | 1987 | ||
1893 | 1988 | ||
1894 | - | @Callable( | |
1895 | - | func splitByGlobalWeightsREADONLY ( | |
1896 | - | ||
1897 | - | ||
1898 | - | ||
1899 | - | @Callable( | |
1900 | - | func splitByGlobalAndLocalWeightsREADONLY ( | |
1901 | - | let | |
1902 | - | $Tuple2(nil, $Tuple2( | |
1903 | - | } | |
1904 | - | ||
1905 | - | ||
1906 | - | ||
1907 | - | @Callable( | |
1908 | - | func getBackpackREADONLY ( | |
1909 | - | ||
1910 | - | ||
1911 | - | ||
1912 | - | @Callable( | |
1913 | - | func getWarehouseREADONLY ( | |
1914 | - | let | |
1915 | - | let | |
1916 | - | let | |
1917 | - | $Tuple2(nil, makeString_2C( | |
1989 | + | @Callable(cp) | |
1990 | + | func splitByGlobalWeightsREADONLY (dI) = $Tuple2(nil, bZ(dI)) | |
1991 | + | ||
1992 | + | ||
1993 | + | ||
1994 | + | @Callable(cp) | |
1995 | + | func splitByGlobalAndLocalWeightsREADONLY (hg,hh,cs) = { | |
1996 | + | let cl = cr(cs) | |
1997 | + | $Tuple2(nil, $Tuple2(bZ(hg), bR(hh, cl))) | |
1998 | + | } | |
1999 | + | ||
2000 | + | ||
2001 | + | ||
2002 | + | @Callable(cp) | |
2003 | + | func getBackpackREADONLY (aF) = $Tuple2(nil, makeString(cX(aE(aF)), ":")) | |
2004 | + | ||
2005 | + | ||
2006 | + | ||
2007 | + | @Callable(cp) | |
2008 | + | func getWarehouseREADONLY (aw) = { | |
2009 | + | let eU = value(assetInfo(fromBase58String(aw))) | |
2010 | + | let du = (aU(split(eU.description, "_")[C]) / m) | |
2011 | + | let dv = valueOrElse(getInteger(ap(aw)), 0) | |
2012 | + | $Tuple2(nil, makeString_2C(ds(av(aw), du, dv), ":")) | |
1918 | 2013 | } | |
1919 | 2014 | ||
1920 | 2015 |
github/deemru/w8io/026f985 820.31 ms ◑