tx · EL2Xou7JPE4n1YSL6rvU8uSqZxH2w6NNRzURRatL4upC

3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm:  -0.07400000 Waves

2023.07.19 20:15 [2673028] smart account 3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm > SELF 0.00000000 Waves

{ "type": 13, "id": "EL2Xou7JPE4n1YSL6rvU8uSqZxH2w6NNRzURRatL4upC", "fee": 7400000, "feeAssetId": null, "timestamp": 1689786957044, "version": 2, "chainId": 84, "sender": "3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm", "senderPublicKey": "EVooykMNV691Venwp1dHUTBd7KWequzUcda57Wd3LQEX", "proofs": [ "3727u5eaysvjpH7PCUGtL8uQW8QtSYsJEnh5wMVNHBve2jS9qo6M4vXTURKwWjvjpvfTidYzicGvRRDPcV5nUqFQ" ], "script": "base64:BgKyAQgCEgMKAQgSAwoBBBIAEgMKAQgSABIDCgEIEgQKAgEIEgQKAgEIEgQKAgICEgUKAwEBARIAEgQKAggIEgASBAoCAgISAwoBCBIDCgEIEgQKAggIEgMKARgSAwoBGBIECgIICBIECgIICBIDCgEIEgMKAQgSBQoDCAgIEgQKAggIEgcKBQEBAQEBEgMKAQESBQoDAQEIEgMKAQgSAwoBCBIAEgQKAggBEgQKAggBEgMKAQjNAQEUa2V5TGFzdEFyYlRpbWVCeVVzZXIBBGFkZHIJAKwCAgIQbGFzdEFyYlRpbWVVc2VyXwUEYWRkcgAGU0NBTEU4AIDC1y8ADHhwTGV2ZWxTY2FsZQCAGQAPeHBMZXZlbFJlY2lwUG93AKAfABJudW1Qb2ludHNPbkxldmVsVXAAAwAMY2hhclN0cmVuZ3RoAAAADGNoYXJBY2N1cmFjeQABAA1jaGFySW50ZWxsZWN0AAIADWNoYXJFbmR1cmFuY2UAAwANY2hhckRleHRlcml0eQAEAAtOVU1TRUdNRU5UUwAGAApOVU1NQUlOQVVYAAIACE1BWFNMT1RTAAIBDGtleUR1Y2tDaGFycwELZHVja0Fzc2V0SWQJAKwCAgIKZHVja0NoYXJzXwULZHVja0Fzc2V0SWQBCWtleUR1Y2tYUAELZHVja0Fzc2V0SWQJAKwCAgIHZHVja1hQXwULZHVja0Fzc2V0SWQBDGtleUR1Y2tMZXZlbAELZHVja0Fzc2V0SWQJAKwCAgIKZHVja0xldmVsXwULZHVja0Fzc2V0SWQBEWtleUR1Y2tGcmVlUG9pbnRzAQtkdWNrQXNzZXRJZAkArAICAg9kdWNrRnJlZVBvaW50c18FC2R1Y2tBc3NldElkARBrZXlEdWNrRXF1aXBtZW50AQtkdWNrQXNzZXRJZAkArAICAg5kdWNrRXF1aXBtZW50XwULZHVja0Fzc2V0SWQBCWtleVVzZXJYUAEEYWRkcgkArAICAgd1c2VyWFBfBQRhZGRyAQxrZXlVc2VyTGV2ZWwBBGFkZHIJAKwCAgIKdXNlckxldmVsXwUEYWRkcgERa2V5VXNlckZyZWVQb2ludHMBBGFkZHIJAKwCAgIPdXNlckZyZWVQb2ludHNfBQRhZGRyAAd4cENsYWltAKCNBgAPeHBTdWNjZXNzRmxpZ2h0ANCGAwAMeHBGYWlsRmxpZ2h0AJBOAAh4cENhbGxFUwCgjQYADHhwQ3VzdG9tTmFtZQDAlrECAAp4cE5ld1NMYW5kAIDh6xcADnhwVXBncmFkZUluZnJhAKCNBgAHeHBNZXJnZQCAreIEAAl4cE9uYm9hcmQAgK3iBAAGeHBIZWFsAJBOAQlsZXZlbEJ5WFABAnhwCQBrAwUMeHBMZXZlbFNjYWxlCQBsBgUCeHAABAUPeHBMZXZlbFJlY2lwUG93AAQABAUERE9XTgUGU0NBTEU4AQltYXhIZWFsdGgBBWxldmVsCQBkAgBkBQVsZXZlbAEHbGV2ZWxVcAIJY3VyckxldmVsBW5ld1hQBAhuZXdMZXZlbAkBCWxldmVsQnlYUAEFBW5ld1hQCQDMCAIFCG5ld0xldmVsCQDMCAIJAGgCBRJudW1Qb2ludHNPbkxldmVsVXAJAGUCBQhuZXdMZXZlbAUJY3VyckxldmVsBQNuaWwACkxBTkRQUkVGSVgCBExBTkQACkRVQ0tQUkVGSVgCBERVQ0sACkFSVFBSRVNBTEUCB1BSRVNBTEUABk5VTVJFUwAGAA9EQUlMWVJFU0JZUElFQ0UAgPjSAQAJREFZTUlMTElTAIC4mSkADFdITVVMVElQTElFUgCAyK+gJQAPREVGQVVMVExPQ0FUSU9OAg9BZnJpY2FfRl9BZnJpY2EAEFJFU09VUkNFUFJJQ0VNSU4A1bUCAApFU1NFTExDT0VGAAoACXByb2RUeXBlcwkAzAgCAhBGaXJzdCBBaWQgS2l0IEwxCQDMCAICEEZpcnN0IEFpZCBLaXQgTDIJAMwIAgIQRmlyc3QgQWlkIEtpdCBMMwkAzAgCAgtCYWNrcGFjayBMMQkAzAgCAgtCYWNrcGFjayBMMgkAzAgCAgtCYWNrcGFjayBMMwkAzAgCAg5Gb29kIFJhdGlvbiBMMQkAzAgCAg5Gb29kIFJhdGlvbiBMMgkAzAgCAg5Gb29kIFJhdGlvbiBMMwkAzAgCAgtKZXQgUGFjayBMMQkAzAgCAgtKZXQgUGFjayBMMgkAzAgCAgtKZXQgUGFjayBMMwkAzAgCAglTaGllbGQgTDEJAMwIAgIJU2hpZWxkIEwyCQDMCAICCVNoaWVsZCBMMwUDbmlsAApjb250aW5lbnRzCQDMCAICCEFtZXJpY2FzCQDMCAICBkV1cm9wZQkAzAgCAgRBc2lhCQDMCAICBkFmcmljYQkAzAgCAgdPY2VhbmlhBQNuaWwACUNPRUZGMk1BVACAreIEABBwcm9kdWN0aW9uTWF0cml4CQDMCAICJThfOF84XzE3XzE3XzQyXzEyXzBfMzBfMCwwLDAsMCwwLDAsMF8JAMwIAgIlOF84XzhfMTdfMTdfNDJfMjRfMF82MF8wLDAsNSwyLDAsMCwwXwkAzAgCAic4XzhfOF8xN18xN180Ml8zNl8wXzEyMF8wLDAsMTAsNCwwLDAsMF8JAMwIAgIpOF8xOV8xOV84XzI3XzE5XzI2XzFfMjBfMCwwLDAsMCwwLDAsMF8wMDEJAMwIAgIpOF8xOV8xOV84XzI3XzE5XzUyXzFfNDBfMCwwLDAsMCwwLDAsMF8wMDEJAMwIAgIpOF8xOV8xOV84XzI3XzE5Xzc4XzFfODBfMCwwLDAsMCwwLDAsMF8wMDEJAMwIAgIiOF84XzhfOF84XzYwXzEzXzJfMl8wLDAsMCwwLDAsMCwwXwkAzAgCAiI4XzhfOF84XzhfNjBfMjZfMl80XzAsMCwwLDAsMCwwLDBfCQDMCAICIjhfOF84XzhfOF82MF8zOV8yXzhfMCwwLDAsMCwwLDAsMF8JAMwIAgIpMzBfMzBfM18xN18xN18zXzMwXzNfMzBfMCwwLDAsMCwwLDAsMF8xMTEJAMwIAgIpMzBfMzBfM18xN18xN18zXzYwXzNfNTBfMCwwLDAsMCwwLDAsMF8xMTEJAMwIAgIpMzBfMzBfM18xN18xN18zXzkwXzNfNzBfMCwwLDAsMCwwLDAsMF8xMTEJAMwIAgIrMThfMThfMTBfMThfMThfMThfMTFfNF8zMF8wLDAsMCwwLDAsMCwwXzIwMQkAzAgCAisxOF8xOF8xMF8xOF8xOF8xOF8yMl80XzUwXzAsMCwwLDAsMCwwLDBfMjAxCQDMCAICKzE4XzE4XzEwXzE4XzE4XzE4XzMzXzRfNzBfMCwwLDAsMCwwLDAsMF8yMDEFA25pbAAJcklkeENvZWZmAAYACXJJZHhTbG90cwAKAA5QUk9EVUNUUEtHU0laRQAKAAt3aElkeExldmVscwAAAAh3aElkeFJlcwABAAh3aElkeE1hdAACAAl3aElkeFByb2QAAwAJd2hJZHhMT0ZUAAQACXZvbExvY2tlZAAAAAt2b2xPY2N1cGllZAABAAd2b2xGcmVlAAIACHZvbFRvdGFsAAMACmJwSWR4TGV2ZWwAAAAIYnBJZHhSZXMAAQAIYnBJZHhNYXQAAgAJYnBJZHhQcm9kAAMBEWtleUxhc3RUeElkQnlVc2VyAQRhZGRyCQCsAgICD2xhc3RUeElkQnlVc2VyXwUEYWRkcgEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQdhc3NldElkCQCsAgICCW5mdE93bmVyXwUHYXNzZXRJZAEaa2V5TGFuZEFzc2V0SWRUb0N1c3RvbU5hbWUBB2Fzc2V0SWQJAKwCAgIYbGFuZEN1c3RvbU5hbWVCeUFzc2V0SWRfBQdhc3NldElkARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQdhc3NldElkCQCsAgICC3N0YWtlZFRpbWVfBQdhc3NldElkARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQdhc3NldElkCQCsAgICC2luZnJhTGV2ZWxfBQdhc3NldElkASBrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQW5kQXNzZXRJZAIEdHlwZQdhc3NldElkCQC5CQIJAMwIAgINbGFuZEFydFN0YXR1cwkAzAgCBQR0eXBlCQDMCAIFB2Fzc2V0SWQFA25pbAIBXwEia2V5U3Rha2VkVGltZUJ5VHlwZUFzc2V0SWRBbmRPd25lcgMHbmZ0VHlwZQdhc3NldElkCW93bmVyQWRkcgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICIHN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXJfBQduZnRUeXBlAgFfBQdhc3NldElkAgFfBQlvd25lckFkZHIBEmtleVdhcmVob3VzZUJ5TGFuZAELbGFuZEFzc2V0SWQJAKwCAgIKd2FyZUhvdXNlXwULbGFuZEFzc2V0SWQBGmtleUR1Y2tBc3NldElkVG9DdXN0b21OYW1lAQdhc3NldElkCQCsAgICGGR1Y2tDdXN0b21OYW1lQnlBc3NldElkXwUHYXNzZXRJZAEWa2V5QWRkcmVzc1RvQ3VzdG9tTmFtZQEEYWRkcgkArAICAhhhY2NvdW50Q3VzdG9tTmFtZUJ5QWRkcl8FBGFkZHIBD2tleUFkZHJlc3NSZWZCeQEEYWRkcgkArAICAglhY2NSZWZCeV8FBGFkZHIBHGtleU9uYm9hcmRBcnRBY3RpdmF0ZWRPbkR1Y2sBC2R1Y2tBc3NldElkCQCsAgICGm9uYm9hcmRBcnRBY3RpdmF0ZWRPbkR1Y2tfBQtkdWNrQXNzZXRJZAEca2V5T25ib2FyZEFydER1Y2tBY3RpdmF0ZWRCeQEEYWRkcgkArAICAhpvbmJvYXJkQXJ0QWN0aXZhdGVkRHVja0J5XwUEYWRkcgETa2V5QWRkcmVzc1JlZmVycmFscwEEYWRkcgkArAICAg1hY2NSZWZlcnJhbHNfBQRhZGRyARBrZXlEdWNrSWRUb093bmVyAQdhc3NldElkCQCsAgICCmR1Y2tPd25lcl8FB2Fzc2V0SWQBFGtleVN0YWtlZER1Y2tCeU93bmVyAQlvd25lckFkZHIJAKwCAgISc3Rha2VkRHVja0J5T3duZXJfBQlvd25lckFkZHIBEWtleUJhY2twYWNrQnlEdWNrAQtkdWNrQXNzZXRJZAkArAICAgliYWNrUGFja18FC2R1Y2tBc3NldElkAQ9rZXlEdWNrTG9jYXRpb24BC2R1Y2tBc3NldElkCQCsAgICDWR1Y2tMb2NhdGlvbl8FC2R1Y2tBc3NldElkAQ1rZXlEdWNrSGVhbHRoAQtkdWNrQXNzZXRJZAkArAICAgtkdWNrSGVhbHRoXwULZHVja0Fzc2V0SWQBCmtleUJsb2NrZWQAAhBjb250cmFjdHNCbG9ja2VkARVrZXlVc2VyR3dsUmVsZWFzZVRpbWUBCHVzZXJBZGRyCQCsAgICGiVzJXNfX3VzZXJHd2xSZWxlYXNlVGltZV9fBQh1c2VyQWRkcgEOa2V5RXNXYXJlaG91c2UAAhplbWVyZ2VuY3lXYXJlaG91c2VQcm9kdWN0cwAKbG9jSWR4VHlwZQABAAhsb2NJZHhJZAACARJnZXRSZWNpcGVNYXRlcmlhbHMBBnJlY2lwZQkAaAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQZyZWNpcGUFCXJJZHhDb2VmZgUJQ09FRkYyTUFUAA9LU0FMTE9XWFBMRVZFTFMGAAVjaGFpbgkAyQECCQDKAQIIBQR0aGlzBWJ5dGVzAAEAAQALdXNkdEFzc2V0SWQEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDABIITaerIIAz9O0bvKju6Lk7zJgt0LXfoHlqjUI/moD/+5AwkAAAIBAVQFByRtYXRjaDABIFWx2J9yh4Lv5eNbjawFq2XemkOhLxa7BfMat4el8cUYCQACAQINVW5rbm93biBjaGFpbgAVZGVmYXVsdFJlc3RBZGRyZXNzU3RyBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwAiMzUFFDdXZGYnZoNExrUFVucm5VMXozam5iQTFwOW0zV05odgMJAAACAQFUBQckbWF0Y2gwAiMzTXVta0dHenRDS0FYcFdEcXhrZGRvZnFYU1VicVFrdlNKeQkAAgECDVVua25vd24gY2hhaW4AEUluZnJhVXBncmFkZUNvc3RTBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwAIDIr6AlAwkAAAIBAVQFByRtYXRjaDAAgMLXLwkAAgECDVVua25vd24gY2hhaW4ADmFyYml0cmFnZURlbGF5BAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwAMDPJAMJAAACAQFUBQckbWF0Y2gwAODUAwkAAgECDVVua25vd24gY2hhaW4AA1NFUAICX18ABU1VTFQ2AMCEPQAFTVVMVDgAgMLXLwAFU1NJWkUAGQAFTVNJWkUAZAAFTFNJWkUA4QEABlhMU0laRQCQAwAHWFhMU0laRQDxBAEPZ2V0U3RyaW5nT3JGYWlsAgdhZGRyZXNzA2tleQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFB2FkZHJlc3MFA2tleQkAuQkCCQDMCAICCm1hbmRhdG9yeSAJAMwIAgkApQgBBQdhZGRyZXNzCQDMCAICAS4JAMwIAgUDa2V5CQDMCAICDyBpcyBub3QgZGVmaW5lZAUDbmlsAgAAEUlkeENmZ1N0YWtpbmdEYXBwAAEAEUlkeENmZ0Vjb25vbXlEYXBwAAIAFElkeENmZ0dvdmVybmFuY2VEYXBwAAMADUlkeENmZ1dsZ0RhcHAABAEKa2V5UmVzdENmZwACDiVzX19yZXN0Q29uZmlnAQ5rZXlSZXN0QWRkcmVzcwACDCVzX19yZXN0QWRkcgERcmVhZFJlc3RDZmdPckZhaWwBBHJlc3QJALwJAgkBD2dldFN0cmluZ09yRmFpbAIFBHJlc3QJAQprZXlSZXN0Q2ZnAAUDU0VQARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCB3Jlc3RDZmcDaWR4CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkAkQMCBQdyZXN0Q2ZnBQNpZHgJAKwCAgIqUmVzdCBjZmcgZG9lc24ndCBjb250YWluIGFkZHJlc3MgYXQgaW5kZXggCQCkAwEFA2lkeAAMcmVzdENvbnRyYWN0CQERQGV4dHJOYXRpdmUoMTA2MikBCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMJAQ5rZXlSZXN0QWRkcmVzcwAFFWRlZmF1bHRSZXN0QWRkcmVzc1N0cgAHcmVzdENmZwkBEXJlYWRSZXN0Q2ZnT3JGYWlsAQUMcmVzdENvbnRyYWN0AA9zdGFraW5nQ29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQdyZXN0Q2ZnBRFJZHhDZmdTdGFraW5nRGFwcAAPZWNvbm9teUNvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUHcmVzdENmZwURSWR4Q2ZnRWNvbm9teURhcHAAC2dvdkNvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUHcmVzdENmZwUUSWR4Q2ZnR292ZXJuYW5jZURhcHAAC3dsZ0NvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUHcmVzdENmZwUNSWR4Q2ZnV2xnRGFwcAAKcmVjTGFuZE51bQAAAAtyZWNMYW5kU2l6ZQABAAtyZWNUZXJyYWlucwACAAxyZWNDb250aW5lbnQAAwERa2V5UmVzUHJvcG9ydGlvbnMAAhNyZXNUeXBlc1Byb3BvcnRpb25zARVrZXlTdGFrZWRMYW5kc0J5T3duZXIBCW93bmVyQWRkcgkArAICAhNzdGFrZWRMYW5kc0J5T3duZXJfBQlvd25lckFkZHIBFmtleVN0YWtlZFBpZWNlc0J5T3duZXIBCW93bmVyQWRkcgkArAICAhRzdGFrZWRQaWVjZXNCeU93bmVyXwUJb3duZXJBZGRyAQhhc1N0cmluZwEBdgQHJG1hdGNoMAUBdgMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAXMFByRtYXRjaDAFAXMJAAIBAhhmYWlsIHRvIGNhc3QgaW50byBTdHJpbmcBBWFzSW50AQF2BAckbWF0Y2gwBQF2AwkAAQIFByRtYXRjaDACA0ludAQBbgUHJG1hdGNoMAUBbgkAAgECFWZhaWwgdG8gY2FzdCBpbnRvIEludAEPbnVtUGllY2VzQnlTaXplAQhsYW5kU2l6ZQQHJG1hdGNoMAUIbGFuZFNpemUDCQAAAgIBUwUHJG1hdGNoMAUFU1NJWkUDCQAAAgIBTQUHJG1hdGNoMAUFTVNJWkUDCQAAAgIBTAUHJG1hdGNoMAUFTFNJWkUDCQAAAgICWEwFByRtYXRjaDAFBlhMU0laRQMJAAACAgNYWEwFByRtYXRjaDAFB1hYTFNJWkUJAAIBAhFVbmtub3duIGxhbmQgc2l6ZQANaW5jdWJhdG9yQWRkcgQHJG1hdGNoMAUFY2hhaW4DCQAAAgEBVwUHJG1hdGNoMAkBEUBleHRyTmF0aXZlKDEwNjIpAQIjM1BFa3RWdXgyUmhjaFNONjNEc0RvNGI0bXo0UXF6S1NlRHYDCQAAAgEBVAUHJG1hdGNoMAUEdGhpcwkAAgECDVVua25vd24gY2hhaW4AC2JyZWVkZXJBZGRyBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwCQERQGV4dHJOYXRpdmUoMTA2MikBAiMzUERWdVU0NUg3RWg1ZG10TmJuUk5SU3RHd1VMQTdOWTZIYgMJAAACAQFUBQckbWF0Y2gwBQR0aGlzCQACAQINVW5rbm93biBjaGFpbgADcHViASBPU+IaP1So1p1SThMdRidVvbNT8yx7yVRUsP9DwbQUKAAIbWVkS2l0SHAJAMwIAgAeCQDMCAIAPAkAzAgCAHgFA25pbAARRklWRU1JTlVURVNNSUxMSVMA4KcSAAxSRU5BTUlOR0NPU1QAwJaxAgAKTUFYTkFNRUxFTgAyABVJbmZyYVVwZ3JhZGVDb3N0U1VzZHQAgK3iBAAMRVhQTUFURVJJQUxTBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwAKbdgu2rBwMJAAACAQFUBQckbWF0Y2gwAKqngbMJCQACAQINVW5rbm93biBjaGFpbgAHRVhQVVNEVAQHJG1hdGNoMAUFY2hhaW4DCQAAAgEBVwUHJG1hdGNoMACA5Zp3AwkAAAIBAVQFByRtYXRjaDAAgOWadwkAAgECDVVua25vd24gY2hhaW4ABUZJVkVYCQC2AgEABQAHVFdFTlRZWAkAtgIBABQACFRXRU5UWTJYCQC2AgEJAGgCABQAFAAIVFdFTlRZM1gJALYCAQkAaAIJAGgCABQAFAAUAAhUV0VOVFk0WAkAtgIBCQBoAgkAaAIJAGgCABQAFAAUABQACFRXRU5UWTVYCQC2AgEJAGgCCQBoAgkAaAIJAGgCABQAFAAUABQAFAAPUFJFU0FMRU5VTUxBTkRTAPQDARJrZXlOZXh0RnJlZUxhbmROdW0AAgtuZXh0TGFuZE51bQEQa2V5TGFuZFRvQXNzZXRJZAEHbGFuZE51bQkArAICAgxsYW5kVG9Bc3NldF8FB2xhbmROdW0BGmtleUxhbmRDdXN0b21OYW1lVG9Bc3NldElkAQRuYW1lCQCsAgICEWxhbmRCeUN1c3RvbU5hbWVfBQRuYW1lAR5rZXlJbmZyYUxldmVsQnlBc3NldElkQW5kT3duZXICB2Fzc2V0SWQJb3duZXJBZGRyCQCsAgIJAKwCAgkArAICAhxpbmZyYUxldmVsQnlBc3NldElkQW5kT3duZXJfBQdhc3NldElkAgFfBQlvd25lckFkZHIBJWtleUxhbmRBcnRTdGF0dXNCeVR5cGVBc3NldElkQW5kT3duZXIDBHR5cGUHYXNzZXRJZAlvd25lckFkZHIJALkJAgkAzAgCAiJsYW5kQXJ0U3RhdHVzQnlUeXBlQXNzZXRJZEFuZE93bmVyCQDMCAIFBHR5cGUJAMwIAgUHYXNzZXRJZAkAzAgCBQlvd25lckFkZHIFA25pbAIBXwERa2V5TGFuZE51bVRvT3duZXIBB2xhbmROdW0JAKwCAgIKbGFuZE93bmVyXwUHbGFuZE51bQEaa2V5RHVja0N1c3RvbU5hbWVUb0Fzc2V0SWQBBG5hbWUJAKwCAgIRZHVja0J5Q3VzdG9tTmFtZV8FBG5hbWUBFmtleUN1c3RvbU5hbWVUb0FkZHJlc3MBBG5hbWUJAKwCAgIUYWNjb3VudEJ5Q3VzdG9tTmFtZV8FBG5hbWUBCWtleU9sZGllcwACCm9sZGllc0xpc3QAC2NsYWltTW9kZVdoAAAADWNsYWltTW9kZUR1Y2sAAQATY2xhaW1Nb2RlV2hUaGVuRHVjawACAAhmbEhlYWx0aAAAAAtmbFRpbWVzdGFtcAAFAAdmbEJvbnVzAAYAC2ZsUHJvZHNVc2VkAAcBB25mdE5hbWUCB2xhbmROdW0IbGFuZFNpemUJAKwCAgkArAICBQpMQU5EUFJFRklYBQdsYW5kTnVtBQhsYW5kU2l6ZQETZGlzdHJpYnV0ZUJ5V2VpZ2h0cwIFdG90YWwHd2VpZ2h0cwQDc3VtCQBkAgkAZAIJAGQCCQBkAgkAZAIJAJEDAgUHd2VpZ2h0cwAACQCRAwIFB3dlaWdodHMAAQkAkQMCBQd3ZWlnaHRzAAIJAJEDAgUHd2VpZ2h0cwADCQCRAwIFB3dlaWdodHMABAkAkQMCBQd3ZWlnaHRzAAUDCQBnAgAABQNzdW0JAAIBAhBaZXJvIHdlaWdodHMgc3VtBAVub3JtNgkAawMFBXRvdGFsBQVNVUxUNgUDc3VtCgEKbm9ybWFsaXplcgIDYWNjBGVsZW0JAM0IAgUDYWNjCQBrAwUEZWxlbQUFbm9ybTYFBU1VTFQ2CgACJGwFB3dlaWdodHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCm5vcm1hbGl6ZXICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYBEmdldE5lZWRlZE1hdGVyaWFscwEFdG90YWwEBXByb3BzCQC1CQIJAQV2YWx1ZQEJAKIIAQkBEWtleVJlc1Byb3BvcnRpb25zAAIBXwMJAQIhPQIJAJADAQUFcHJvcHMFBk5VTVJFUwkAAgECFldyb25nIHByb3BvcnRpb25zIGRhdGEEAXIJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBXByb3BzAAAJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBXByb3BzAAEJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBXByb3BzAAIJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBXByb3BzAAMJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBXByb3BzAAQJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBXByb3BzAAUFA25pbAkBE2Rpc3RyaWJ1dGVCeVdlaWdodHMCBQV0b3RhbAUBcgERc3VidHJhY3RNYXRlcmlhbHMDDHNob3VsZFVzZU1hdANoYXMJdG90YWxOZWVkBARuZWVkCQESZ2V0TmVlZGVkTWF0ZXJpYWxzAQUJdG90YWxOZWVkCgEKc3VidHJhY3RvcgIDYWNjA2lkeAQGcmVzdWx0CQBlAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFA2hhcwUDaWR4CQCRAwIFBG5lZWQFA2lkeAMJAGYCAAAFBnJlc3VsdAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhhOb3QgZW5vdWdoIG1hdGVyaWFsIGlkeD0JAKQDAQUDaWR4AgssIHlvdSBoYXZlIAkAkQMCBQNoYXMFA2lkeAILLCBidXQgbmVlZCAJAKQDAQkAkQMCBQRuZWVkBQNpZHgJAM0IAgUDYWNjCQCkAwEFBnJlc3VsdAMFDHNob3VsZFVzZU1hdAoAAiRsCQDMCAIAAAkAzAgCAAEJAMwIAgACCQDMCAIAAwkAzAgCAAQJAMwIAgAFBQNuaWwKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCnN1YnRyYWN0b3ICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYFA2hhcwEQc3VidHJhY3RQcm9kdWN0cwIEcEhhcwVwVXNlZAMJAAACBQVwVXNlZAIABQRwSGFzBAVwTGlzdAMJAAACBQRwSGFzAgAFA25pbAkAtQkCBQRwSGFzAgFfCgEEc3ViUAIDYWNjBGl0ZW0EAWoIBQNhY2MC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cGFyc2VJbnRWYWx1ZQEJAJEDAgUFcGFydHMAAAQFY291bnQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwYXJ0cwABAwMJAGYCAAAFCnByb2R1Y3RJZHgGCQBnAgUKcHJvZHVjdElkeAkAkAMBBRBwcm9kdWN0aW9uTWF0cml4CQACAQITVW5rbm93biBwcm9kdWN0IGlkeAMJAGYCAAAFBWNvdW50CQACAQIXQ291bnQgY2FuJ3QgYmUgbmVnYXRpdmUDCQAAAgUFY291bnQAAAkAlAoCBQVwTGlzdAcKAQRhZGRQAgNhY2MEaXRlbQQBaggFA2FjYwJfMQQEY3VycgMJAGYCCQCQAwEFBXBMaXN0BQFqCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcExpc3QFAWoAAAMDCQEBIQEFCmlzUG9zaXRpdmUJAGYCBQVjb3VudAUEY3VycgcJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIJWW91IGhhdmUgCQCkAwEFBGN1cnICBCBvZiAJAJEDAgUJcHJvZFR5cGVzBQFqAhMsIGJ1dCB0cmllZCB0byB1c2UgCQCkAwEFBWNvdW50BAVpc0JpZwMJAQEhAQUKaXNQb3NpdGl2ZQQGY29tcGF0CQCRAwIJALUJAgUEaXRlbQIBXwUJcklkeFNsb3RzAwkAAAIFBmNvbXBhdAIACQACAQIXSXRlbSBjYW5ub3QgYmUgZXF1aXBwZWQEAWMJAQ1wYXJzZUludFZhbHVlAQUGY29tcGF0BARjU2VnCQBpAgUBYwBkAwkBAiE9AgUHc2VnbWVudAUEY1NlZwkAAgECFFNlZ21lbnQgaW5jb21wYXRpYmxlBAhjTWFpbkF1eAkAaQIJAGoCBQFjAGQACgMJAQIhPQIFB21haW5BdXgFCGNNYWluQXV4CQACAQIRU2xvdCBpbmNvbXBhdGlibGUECWNOdW1TbG90cwkAagIFAWMACgMDCQECIT0CBQRzbG90AAAJAGYCBQljTnVtU2xvdHMAAQcJAAIBAh5CaWcgaXRlbXMgc2hvdWxkIG9jY3VweSBzbG90IDAJAGYCBQljTnVtU2xvdHMAAQcJAJUKAwkAZAIFAWoAAQkAzQgCCAUDYWNjAl8yCQCkAwEDCQECIT0CBQpwcm9kdWN0SWR4BQFqBQRjdXJyCQBk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OjBfMF8wXzBfMF8wOjBfMF8wXzBfMF8wOgIBOgkAzAgCCQCkAwEJAQt2YWx1ZU9yRWxzZQIJALYJAQkAkQMCBQFwBQpicElkeExldmVsAAAJAMwIAgMJAAACCQCQAwEJALUJAgkAkQMCBQFwBQhicElkeFJlcwIBXwUGTlVNUkVTCQCRAwIFAXAFCGJwSWR4UmVzAgswXzBfMF8wXzBfMAkAzAgCAwkAAAIJAJADAQkAtQkCCQCRAwIFAXAFCGJwSWR4TWF0AgFfBQZOVU1SRVMJAJEDAgUBcAUIYnBJZHhNYXQCCzBfMF8wXzBfMF8wCQDMCAIJAJEDAgUBcAUJYnBJZHhQcm9kBQNuaWwBF2dldFdhcmVob3VzZVRvdGFsVm9sdW1lAQl2b2xQcmVmaXgEBXBhcnRzCQC1CQIFCXZvbFByZWZpeAIBXwkAaAIJAGgCBQxXSE1VTFRJUExJRVIJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcGFydHMAAQABCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcGFydHMAAAEXZ2V0V2FyZWhvdXNlT2NjdXBpZWRWb2wBCWN1cnJlbnRXaAQFZ29vZHMJAJEDAgUJY3VycmVudFdoBQl3aElkeFByb2QKAQlzdW1SZXNNYXQCA2FjYwRpdGVtCQBkAgUDYWNjCQENcGFyc2VJbnRWYWx1ZQEFBGl0ZW0KAQdzdW1Qcm9kAgNhY2MEaXRlbQQDaWR4CAUDYWNjAl8xBARwa2dzCQBpAgkAZQIJAGQCCQENcGFyc2VJbnRWYWx1ZQEFBGl0ZW0FDlBST0RVQ1RQS0dTSVpFAAEFDlBST0RVQ1RQS0dTSVpFCQCUCgIJAGQCBQNpZHgAAQkAZAIIBQNhY2MCXzIJAGgCBQRwa2dzBQVNVUxUOAQId2hSZXNWb2wKAAIkbAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhSZXMCAV8KAAIkcwkAkAMBBQIkbAoABSRhY2MwAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCXN1bVJlc01hdAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8y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b2NrZWQFA29jYwkAzAgCCQCkAwEFB3doVG90YWwFA25pbAIBXwkAzAgCCQCRAwIFAndoBQt3aElkeExldmVscwkAzAgCAwkAAAIJAJADAQkAtQkCCQCRAwIFAndoBQh3aElkeFJlcwIBXwUGTlVNUkVTCQCRAwIFAndoBQh3aElkeFJlcwILMF8wXzBfMF8wXzAJAMwIAgMJAAACCQCQAwEJALUJAgkAkQMCBQJ3aAUId2hJZHhNYXQCAV8FBk5VTVJFUwkAkQMCBQJ3aAUId2hJZHhNYXQCCzBfMF8wXzBfMF8wCQDMCAIJAJEDAgUCd2gFCXdoSWR4UHJvZAkAzAgCBQZ3aExvZnQFA25pbAEVZ2V0V2FyZWhvdXNlU3BhY2VMZWZ0AQljdXJyZW50V2gEC29jY3VwaWVkVm9sCQEXZ2V0V2FyZWhvdXNlT2NjdXBpZWRWb2wBBQljdXJyZW50V2gED2N1cnJXaExvY2tlZFZvbAkBDXBhcnNlSW50VmFsdWUBCQCRAwIJALUJAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4TE9GVAIBXwUJdm9sTG9ja2VkCQBlAgkAZQIJARdnZXRXYXJlaG91c2VUb3RhbFZvbHVtZQEJAJEDAgUJY3VycmVudFdoBQt3aElkeExldmVscwULb2NjdXBpZWRWb2wFD2N1cnJXaExvY2tlZFZvbAEIdG9Wb2x1bWUCBmFtb3VudAdwa2dTaXplBARwa2dzAwkAZwIFBmFtb3VudAAACQBpAgkAZQIJAGQCBQZhbW91bnQFB3BrZ1NpemUAAQUHcGtnU2l6ZQkBAS0BCQBpAgkAZQIJAGQCCQEBLQEFBmFtb3VudAUHcGtnU2l6ZQABBQdwa2dTaXplCQBoAgUEcGtncwUFTVVMVDgBCW1vdmVTdHVmZgMKY2FyZ29QYXJ0cwljdXJyZW50V2gLY3VycmVudFBhY2sDCQECIT0CCQCQAwEFCmNhcmdvUGFydHMAAwkAAgECNGNhcmdvTGlzdFN0ciBzaG91bGQgY29udGFpbiBleGFjdGx5IDIgJzonIHNlcGFyYXRvcnMECHJlc1BhcnRzCQC1CQIJAJEDAgUKY2FyZ29QYXJ0cwAAAgFfBAhtYXRQYXJ0cwkAtQkCCQCRAwIFCmNhcmdvUGFydHMAAQIBXwQJcHJvZFBhcnRzAwkAAAIJAJEDAgUKY2FyZ29QYXJ0cwACAgAFA25pbAkAtQkCCQCRAwIFCmNhcmdvUGFydHMAAgIBXwMJAQIhPQIJAJADAQUIcmVzUGFydHMFBk5VTVJFUwkAAgECIEFsbCA2IHJlc291cmNlcyBzaG91bGQgYmUgcGFzc2VkAwkBAiE9AgkAkAMBBQhtYXRQYXJ0cwUGTlVNUkVTCQACAQIgQWxsIDYgbWF0ZXJpYWxzIHNob3VsZCBiZSBwYXNzZWQEC3doU3BhY2VMZWZ0CQEVZ2V0V2FyZWhvdXNlU3BhY2VMZWZ0AQUJY3VycmVudFdoBAljdXJyV2hSZXMJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4UmVzAgFfBAljdXJyV2hNYXQJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4TWF0AgFfBApjdXJyV2hQcm9kAwkAAAIJAJEDAgUJY3VycmVudFdoBQl3aElkeFByb2QCAAUDbmlsCQC1CQIJAJEDAgUJY3VycmVudFdoBQl3aElkeFByb2QCAV8EDmN1cnJlbnRQYWNrUmVzCQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzAgFfBA5jdXJyZW50UGFja01hdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAIBXwQPY3VycmVudFBhY2tQcm9kAwkAAAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAIABQNuaWwJALUJAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kAgFfCgEDbXZSAgNhY2MEaXRlbQQBaQgFA2FjYwJfMQQCYW0JAQ1wYXJzZUludFZhbHVlAQUEaXRlbQQDd2hyCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUJY3VycldoUmVzBQFpBANicHIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ5jdXJyZW50UGFja1JlcwUBaQMJAAACBQJhbQAACQCWCgQJAGQCBQFpAAEJAM0IAggFA2FjYwJfMgkAkQMCBQljdXJyV2hSZXMFAWkJAM0IAggFA2FjYwJfMwkAkQMCBQ5jdXJyZW50UGFja1JlcwUBaQgFA2FjYwJfNAMJAGYCBQJhbQAAAwkAZgIFAmFtBQNicHIJAAIBCQCs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bGRvARJleHBlZGl0aW9uSW50ZXJuYWwCBmNhbGxlcgR0eElkBAh1c2VyQWRkcgkApQgBBQZjYWxsZXIEBmJpZ051bQkBA2FicwEJAJ4DAQUEdHhJZAQHZnJlZU51bQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQESa2V5TmV4dEZyZWVMYW5kTnVtAAkAZAIFD1BSRVNBTEVOVU1MQU5EUwABBAdsYW5kTnVtCQCkAwEFB2ZyZWVOdW0EDGNvbnRpbmVudElkeAkAoAMBCQC7AgIFBmJpZ051bQUFRklWRVgECHRlcnJhaW5zCQELZ2VuVGVycmFpbnMCBQZiaWdOdW0FDGNvbnRpbmVudElkeAQJY29udGluZW50CQCRAwIFCmNvbnRpbmVudHMFDGNvbnRpbmVudElkeAQFaXNzdWUJAMIIBQkBB25mdE5hbWUCBQdsYW5kTnVtAgFTCQC5CQIJAMwIAgUHbGFuZE51bQkAzAgCAgFTCQDMCAIFCHRlcnJhaW5zCQDMCAIFCWNvbnRpbmVudAUDbmlsAgFfAAEAAAcEB2Fzc2V0SWQJALgIAQUFaXNzdWUEAmlkCQDYBAEFB2Fzc2V0SWQJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBEmtleU5leHRGcmVlTGFuZE51bQAJAGQCBQdmcmVlTnVtAAEJAMwIAgUFaXNzdWUJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEGtleUxhbmRUb0Fzc2V0SWQBBQdsYW5kTnVtBQJpZAkAzAgCCQELU3RyaW5nRW50cnkCCQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQUCaWQFCHVzZXJBZGRyCQDMCAIJAQtTdHJpbmdFbnRyeQIJARFrZXlMYW5kTnVtVG9Pd25lcgEFB2xhbmROdW0FCHVzZXJBZGRyCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEFAmlkAAAJAMwIAgkBDEludGVnZXJFbnRyeQIJAR5rZXlJbmZyYUxldmVsQnlBc3NldElkQW5kT3duZXICBQJpZAUIdXNlckFkZHIAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQZjYWxsZXIAAQUHYXNzZXRJZAUDbmlsCQCUCgIFAmlkBQljb250aW5lbnQBDGZsaWdodENvbW1vbgMIdXNlckFkZHIHbWVzc2FnZQNzaWcDCQEBIQEJAMQTAwUHbWVzc2FnZQUDc2lnBQNwdWIJAAIBAhhzaWduYXR1cmUgZG9lcyBub3QgbWF0Y2gEBXBhcnRzCQC1CQIJALAJAQUHbWVzc2FnZQIBOwQJZmxpZ2h0TG9nCQC1CQIJAJEDAgUFcGFydHMAAAIBfAQCaHAJALUJAgkAkQMCBQlmbGlnaHRMb2cFCGZsSGVhbHRoAgFfBAVjdXJIUAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmhwAAAEBW5ld0hQCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCaHAAAQQLbmV3TG9jVHhWZXIJALUJAgkAkQMCBQVwYXJ0cwABAgE6BAtuZXdMb2NhdGlvbgkAkQMCBQtuZXdMb2NUeFZlcgAABAR0aW1lCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUJZmxpZ2h0TG9nBQtmbFRpbWVzdGFtcAMDCQBmAgUEdGltZQkAZAIIBQlsYXN0QmxvY2sJdGltZXN0YW1wBRFGSVZFTUlOVVRFU01JTExJUwYJAGYCCQBlAggFCWxhc3RCbG9jawl0aW1lc3RhbXAFEUZJVkVNSU5VVEVTTUlMTElTBQR0aW1lCQACAQkArAICCQCsAgIJAKwCAgIcc2lnbmF0dXJlIG91dGRhdGVkOiBsb2dUaW1lPQkApAMBBQR0aW1lAgksIGJjVGltZT0JAKQDAQgFCWxhc3RCbG9jawl0aW1lc3RhbXAECXR4RnJvbU1zZwkAkQMCBQtuZXdMb2NUeFZlcgABBAZsYXN0VHgJAQt2YWx1ZU9yRWxzZQIJAKIIAQkBEWtleUxhc3RUeElkQnlVc2VyAQUIdXNlckFkZHICAAMJAQIhPQIFBmxhc3RUeAUJdHhGcm9tTXNnCQACAQkArAICCQCsAgIJAKwCAgIeVHggaWRzIGRvbid0IG1hdGNoISBJbiBzdGF0ZTogBQZsYXN0VHgCCiwgaW4gbXNnOiAFCXR4RnJvbU1zZwQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQh1c2VyQWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQJa2V5SGVhbHRoCQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkBAVtYXhIUAkBCW1heEhlYWx0aAEJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBDGtleUR1Y2tMZXZlbAEFC2R1Y2tBc3NldElkAAAEDG9sZEZyb21TdGF0ZQkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlrZXlIZWFsdGgFBW1heEhQAwkBAiE9AgUMb2xkRnJvbVN0YXRlBQVjdXJIUAkAAgEJAKwCAgkArAICCQCsAgICCm9sZEhlYWx0aD0JAKQDAQUMb2xkRnJvbVN0YXRlAi8gZnJvbSBzdGF0ZSBkb2VzIG5vdCBtYXRjaCBvbmUgZnJvbSBmbGlnaHQgbG9nPQkApAMBBQVjdXJIUAMJAGcCAAAFBWN1ckhQCQACAQIeWW91IGNhbid0IGZseSB3aXRoIHplcm8gaGVhbHRoBAVib251cwMJAGYCCQCQAwEFCWZsaWdodExvZwUHZmxCb251cwkAkQMCBQlmbGlnaHRMb2cFB2ZsQm9udXMCAAQIcHJvZFVzZWQDCQBmAgkAkAMBBQlmbGlnaHRMb2cFC2ZsUHJvZHNVc2VkCQCRAwIFCWZsaWdodExvZwULZmxQcm9kc1VzZWQCAAQKc2VudEFtb3VudAMDCQBmAgUFbmV3SFAAAAkAAAIFBWJvbnVzAgEkBwkBBWFzSW50AQkA/AcEBQxyZXN0Q29udHJhY3QCDXNlbmRVc2R0UHJpemUJAMwIAgUIdXNlckFkZHIFA25pbAUDbmlsAAAJAJcKBQUFbmV3SFAFC2R1Y2tBc3NldElkBQpzZW50QW1vdW50BQtuZXdMb2NhdGlvbgUIcHJvZFVzZWQBEGV4cGVkaXRpb25Db21tb24EBmNhbGxlcgR0eElkB21lc3NhZ2UDc2lnBAh1c2VyQWRkcgkApQgBBQZjYWxsZXIEAWYJAQxmbGlnaHRDb21tb24DBQh1c2VyQWRkcgUHbWVzc2FnZQUDc2lnBAlrZXlIZWFsdGgJAQ1rZXlEdWNrSGVhbHRoAQgFAWYCXzIEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBCAUBZgJfMgQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BAVtTGlzdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAIBXwQGbmV3TWF0CQC5CQIJARFzdWJ0cmFjdE1hdGVyaWFscwMGBQVtTGlzdAUMRVhQTUFURVJJQUxTAgFfBAduZXdQcm9kCQEQc3VidHJhY3RQcm9kdWN0cwIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAgFAWYCXzUDCQBnAgAACAUBZgJfMQkAlQoDCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlrZXlIZWFsdGgAAAkAzAgCCQELU3RyaW5nRW50cnkCBQVicEtleQkAuQkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQJAMwIAgUHbmV3UHJvZAUDbmlsAgE6BQNuaWwCAAAABAFlCQESZXhwZWRpdGlvbkludGVybmFsAgUGY2FsbGVyBQR0eElkBAJpZAgIBQFlAl8yAl8xCQCVCgMJAM0IAgkAzQgCCQDNCAIIBQFlAl8xCQELU3RyaW5nRW50cnkCCQEPa2V5RHVja0xvY2F0aW9uAQgFAWYCXzIJALkJAgkAzAgCCAgFAWUCXzICXzIJAMwIAgIBTAkAzAgCBQJpZAUDbmlsAgFfCQEMSW50ZWdlckVudHJ5AgUJa2V5SGVhbHRoCAUBZgJfMQkBC1N0cmluZ0VudHJ5AgUFYnBLZXkJALkJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzCQDMCAIFBm5ld01hdAkAzAgCBQduZXdQcm9kBQNuaWwCAToFAmlkCAUBZgJfMwEMYXBwbHlCb251c2VzAgtsYW5kQXNzZXRJZAZwaWVjZXMECmluZnJhTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAAABAlhcnRQaWVjZXMJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBIGtleUxhbmRBcnRTdGF0dXNCeVR5cGVBbmRBc3NldElkAgUKQVJUUFJFU0FMRQULbGFuZEFzc2V0SWQAAAQEYWRkNgkAaQIFCmluZnJhTGV2ZWwABgQEYWRkNwkAaQIFCmluZnJhTGV2ZWwABwkAZAIJAGQCBQ9EQUlMWVJFU0JZUElFQ0UJAGsDBQ9EQUlMWVJFU0JZUElFQ0UJAGQCCQBkAgUKaW5mcmFMZXZlbAUEYWRkNgkAaAIAAgUEYWRkNwAFCQBrAwUPREFJTFlSRVNCWVBJRUNFBQlhcnRQaWVjZXMJAGgCBQZwaWVjZXMABQEUY2hlY2tDbGFpbUNvbmRpdGlvbnMDBGFkZHIJY2xhaW1Nb2RlDWxhbmRBc3NldElkSW4EDSR0MDI4MTIzMjg2NjIDCQAAAgUJY2xhaW1Nb2RlBQtjbGFpbU1vZGVXaAkAlAoCBQ1sYW5kQXNzZXRJZEluCQELdmFsdWVPckVsc2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFBGFkZHICAAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkBAtjdXJMb2NhdGlvbgkBC3ZhbHVlT3JFbHNlAgkAoggBCQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQFD0RFRkFVTFRMT0NBVElPTgQDbG9jCQC1CQIJAQV2YWx1ZQEFC2N1ckxvY2F0aW9uAgFfAwkBAiE9AgkAkQMCBQNsb2MFCmxvY0lkeFR5cGUCAUwJAAIBCQCsAgIJAKwCAgIWRHVjayBsb2NhdGlvbiB0eXBlIGlzIAkAkQMCBQNsb2MFCmxvY0lkeFR5cGUCESwgYnV0IHNob3VsZCBiZSBMCQCUCgIJAJEDAgUDbG9jBQhsb2NJZHhJZAULZHVja0Fzc2V0SWQEC2xhbmRBc3NldElkCAUNJHQwMjgxMjMyODY2MgJfMQQGZHVja0lkCAUNJHQwMjgxMjMyODY2MgJfMgQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQtsYW5kQXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAQJc2F2ZWRUaW1lCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ8IAQUHdGltZUtleQkArAICCQCsAgICBUxhbmQgCAUFYXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQEBW93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFC2xhbmRBc3NldElkCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDCBpcyBvcnBoYW5lZAMJAQIhPQIFBW93bmVyBQRhZGRyCQACAQkArAICBQpMQU5EUFJFRklYAg0gaXMgbm90IHlvdXJzBAFkCQC1CQIIBQVhc3NldAtkZXNjcmlwdGlvbgIBXwkAlgoEBQZkdWNrSWQFC2xhbmRBc3NldElkBQFkBQlzYXZlZFRpbWUBEGNsYWltUmVzSW50ZXJuYWwEBGFkZHIGYW1vdW50CWNsYWltTW9kZQ1sYW5kQXNzZXRJZEluAwkAZgIAAAUGYW1vdW50CQACAQIPTmVnYXRpdmUgYW1vdW50BAFjCQEUY2hlY2tDbGFpbUNvbmRpdGlvbnMDBQRhZGRyBQljbGFpbU1vZGUFDWxhbmRBc3NldElkSW4ECGxhbmRTaXplCQCRAwIIBQFjAl8zBQtyZWNMYW5kU2l6ZQQNdGVycmFpbkNvdW50cwkBDWNvdW50VGVycmFpbnMBCQCRAwIIBQFjAl8zBQtyZWNUZXJyYWlucwQJZGVsdGFUaW1lCQBlAggFCWxhc3RCbG9jawl0aW1lc3RhbXAIBQFjAl80AwkAZgIAAAUJZGVsdGFUaW1lCQACAQkArAICCQCsAgIJAKwCAgImU2F2ZWQgdGltZXN0YW1wIGlzIGluIGZ1dHVyZSwgc2F2ZWQgPSAJAKQDAQgFAWMCXzQCDCwgY3VycmVudCA9IAkApAMBCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQGcGllY2VzCQEPbnVtUGllY2VzQnlTaXplAQUIbGFuZFNpemUEFmRhaWx5UHJvZHVjdGlvbkJ5UGllY2UJAQxhcHBseUJvbnVzZXMCCAUBYwJfMgUGcGllY2VzBAhhdmFpbFJlcwkAawMFCWRlbHRhVGltZQkAaAIFFmRhaWx5UHJvZHVjdGlvbkJ5UGllY2UFBnBpZWNlcwUJREFZTUlMTElTAwkAZgIFBmFtb3VudAUIYXZhaWxSZXMJAAIBCQCsAgIJAKwCAgkArAICAiJOb3QgZW5vdWdoIHJlc291cmNlcywgYXZhaWxhYmxlID0gCQCkAwEFCGF2YWlsUmVzAg4sIHJlcXVlc3RlZCA9IAkApAMBBQZhbW91bnQEDG5ld0RlbHRhVGltZQkAawMJAGUCBQhhdmFpbFJlcwUGYW1vdW50BQlEQVlNSUxMSVMJAGgCBRZkYWlseVByb2R1Y3Rpb25CeVBpZWNlBQZwaWVjZXMEDG5ld1RpbWVzdGFtcAkAZQIIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQxuZXdEZWx0YVRpbWUECWxhbmRJbmRleAkAaQIFBnBpZWNlcwUFU1NJWkUECnJlc1RvQ2xhaW0JAQl2aXJ0Q2xhaW0EBQ10ZXJyYWluQ291bnRzCQBlAgUJZGVsdGFUaW1lBQxuZXdEZWx0YVRpbWUFCWxhbmRJbmRleAUWZGFpbHlQcm9kdWN0aW9uQnlQaWVjZQQFd2hLZXkJARJrZXlXYXJlaG91c2VCeUxhbmQBCAUBYwJfMgQKaW5mcmFMZXZlbAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEIBQFjAl8yAAAECWN1cnJlbnRXaAkBDGdldFdhcmVob3VzZQMFBXdoS2V5BQlsYW5kSW5kZXgFCmluZnJhTGV2ZWwEBGxvZnQJALUJAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4TE9GVAIBXwQLd2hTcGFjZUxlZnQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQd2b2xGcmVlAwMJAAACBQljbGFpbU1vZGUFC2NsYWltTW9kZVdoCQBmAgUGYW1vdW50BQt3aFNwYWNlTGVmdAcJAAIBCQCsAgIJAKwCAgIFT25seSAJAKQDAQULd2hTcGFjZUxlZnQCGCBzcGFjZSBsZWZ0IGluIHdhcmVob3VzZQQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEIBQFjAl8xBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkEDmN1cnJlbnRQYWNrUmVzCQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzAgFfBAxjdXJyZW50V2hSZXMJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4UmVzAgFfBA0kdDAzMTAzNjMxOTA3AwkAAAIFCWNsYWltTW9kZQULY2xhaW1Nb2RlV2gJAJYKBAkBBmFkZFJlcwUFDGN1cnJlbnRXaFJlcwUNdGVycmFpbkNvdW50cwkAZQIFCWRlbHRhVGltZQUMbmV3RGVsdGFUaW1lBQlsYW5kSW5kZXgFFmRhaWx5UHJvZHVjdGlvbkJ5UGllY2UJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFC3ZvbE9jY3VwaWVkCAUKcmVzVG9DbGFpbQJfMgkAZQIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQd2b2xGcmVlCAUKcmVzVG9DbGFpbQJfMgMJAAACBQljbGFpbU1vZGUFDWNsYWltTW9kZUR1Y2sJAJYKBAkAkQMCBQljdXJyZW50V2gFCHdoSWR4UmVzCQEGYWRkUmVzBQUOY3VycmVudFBhY2tSZXMFDXRlcnJhaW5Db3VudHMJAGUCBQlkZWx0YVRpbWUFDG5ld0RlbHRhVGltZQUJbGFuZEluZGV4BRZkYWlseVByb2R1Y3Rpb25CeVBpZWNlCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAULdm9sT2NjdXBpZWQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQd2b2xGcmVlBAVkaXN0cgkBDWRpc3RyaWJ1dGVSZXMEBQxjdXJyZW50V2hSZXMFDmN1cnJlbnRQYWNrUmVzBQpyZXNUb0NsYWltBQt3aFNwYWNlTGVmdAQEd2hBbQkAlwMBCQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQd2b2xGcmVlCQDMCAIIBQpyZXNUb0NsYWltAl8yBQNuaWwJAJYKBAgFBWRpc3RyAl8xCAUFZGlzdHICXzIJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAULdm9sT2NjdXBpZWQFBHdoQW0JAGUCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAUHdm9sRnJlZQUEd2hBbQQFd2hSZXMIBQ0kdDAzMTAzNjMxOTA3Al8xBAVicFJlcwgFDSR0MDMxMDM2MzE5MDcCXzIEBWxvZnRPCAUNJHQwMzEwMzYzMTkwNwJfMwQFbG9mdEYIBQ0kdDAzMTAzNjMxOTA3Al80CQCXCgUJAMwIAgkBDEludGVnZXJFbnRyeQIJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQgFAWMCXzIFDG5ld1RpbWVzdGFtcAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDBQpMQU5EUFJFRklYCAUBYwJfMgUEYWRkcgUMbmV3VGltZXN0YW1wBQNuaWwFBWJwS2V5CQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgUFYnBSZXMJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kBQNuaWwFBXdoS2V5CQDMCAIJAJEDAgUJY3VycmVudFdoBQt3aElkeExldmVscwkAzAgCBQV3aFJlcwkAzAgCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhNYXQJAMwIAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4UHJvZAkAzAgCCQC5CQIJAMwIAgkAkQMCBQRsb2Z0BQl2b2xMb2NrZWQJAMwIAgkApAMBBQVsb2Z0TwkAzAgCCQCkAwEFBWxvZnRGCQDMCAIJAJEDAgUEbG9mdAUIdm9sVG90YWwFA25pbAIBXwUDbmlsAQhjbGFpbUFsbAQEYWRkcgtsYW5kQXNzZXRJZAZwaWVjZXMJY2xhaW1Nb2RlBAd0aW1lS2V5CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkBAlzYXZlZFRpbWUJAQV2YWx1ZQEJAJ8IAQUHdGltZUtleQQIYXZhaWxSZXMJAGgCCQBrAwkAZQIIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQlzYXZlZFRpbWUJAQxhcHBseUJvbnVzZXMCBQtsYW5kQXNzZXRJZAUGcGllY2VzBQlEQVlNSUxMSVMFBnBpZWNlcwkBEGNsYWltUmVzSW50ZXJuYWwEBQRhZGRyBQhhdmFpbFJlcwUJY2xhaW1Nb2RlBQtsYW5kQXNzZXRJZAENdXBJbmZyYUNvbW1vbgQMc2hvdWxkVXNlTWF0BmNhbGxlcg1wYXltZW50QW1vdW50C2xhbmRBc3NldElkBARhZGRyCQClCAEFBmNhbGxlcgQBYwkBFGNoZWNrQ2xhaW1Db25kaXRpb25zAwUEYWRkcgUTY2xhaW1Nb2RlV2hUaGVuRHVjawULbGFuZEFzc2V0SWQEBnBpZWNlcwkBD251bVBpZWNlc0J5U2l6ZQEJAJEDAggFAWMCXzMFC3JlY0xhbmRTaXplBAhpbmZyYUtleQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBCAUBYwJfMgQIY3VyTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUIaW5mcmFLZXkAAAMJAGcCBQhjdXJMZXZlbAADCQACAQImQ3VycmVudGx5IG1heCBpbmZyYXN0cnVjdHVyZSBsZXZlbCA9IDMECG5ld0xldmVsCQBkAgUIY3VyTGV2ZWwAAQQEY29zdAkAawMFFUluZnJhVXBncmFkZUNvc3RTVXNkdAkAaAIFBnBpZWNlcwUIbmV3TGV2ZWwFBVNTSVpFAwMJAQEhAQUMc2hvdWxkVXNlTWF0CQECIT0CBQ1wYXltZW50QW1vdW50BQRjb3N0BwkAAgEJAKwCAgIbUGF5bWVudCBhdHRhY2hlZCBzaG91bGQgYmUgCQCkAwEFBGNvc3QEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBCAUBYwJfMQQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BAVtTGlzdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAIBXwQHbWF0VXNlZAkAawMFEUluZnJhVXBncmFkZUNvc3RTCQBoAgUGcGllY2VzBQhuZXdMZXZlbAUFU1NJWkUEBm5ld01hdAkAuQkCCQERc3VidHJhY3RNYXRlcmlhbHMDBQxzaG91bGRVc2VNYXQFBW1MaXN0BQdtYXRVc2VkAgFfBAtjbGFpbVJlc3VsdAkBCGNsYWltQWxsBAUEYWRkcggFAWMCXzIFBnBpZWNlcwUTY2xhaW1Nb2RlV2hUaGVuRHVjawQGd2hEYXRhCAULY2xhaW1SZXN1bHQCXzUEBm9sZFZvbAkBF2dldFdhcmVob3VzZVRvdGFsVm9sdW1lAQkAkQMCBQZ3aERhdGEFC3doSWR4TGV2ZWxzBApuZXdWb2xEYXRhCQC5CQIJAMwIAgkAkQMCCQC1CQIJAJEDAgUGd2hEYXRhBQt3aElkeExldmVscwIBXwAACQDMCAIJAKQDAQUIbmV3TGV2ZWwFA25pbAIBXwQGbmV3Vm9sCQEXZ2V0V2FyZWhvdXNlVG90YWxWb2x1bWUBBQpuZXdWb2xEYXRhBARsb2Z0CQC1CQIJAJEDAgUGd2hEYXRhBQl3aElkeExPRlQCAV8ECm5ld0xvZnRTdHIJALkJAgkAzAgCCQCRAwIFBGxvZnQFCXZvbExvY2tlZAkAzAgCCQCRAwIFBGxvZnQFC3ZvbE9jY3VwaWVkCQDMCAIJAKQDAQkAZQIJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAUHdm9sRnJlZQUGbmV3Vm9sBQZvbGRWb2wJAMwIAgkApAMBBQZuZXdWb2wFA25pbAIBXwkAlQoDCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIFCGluZnJhS2V5BQhuZXdMZXZlbAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBHmtleUluZnJhTGV2ZWxCeUFzc2V0SWRBbmRPd25lcgIIBQFjAl8yBQRhZGRyBQhuZXdMZXZlbAkAzAgCCQELU3RyaW5nRW50cnkCBQVicEtleQkAuQkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAkQMCCAULY2xhaW1SZXN1bHQCXzMFCGJwSWR4UmVzCQDMCAIFBm5ld01hdAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QFA25pbAIBOgkAzAgCCQELU3RyaW5nRW50cnkCCAULY2xhaW1SZXN1bHQCXzQJALkJAgkAzAgCBQpuZXdWb2xEYXRhCQDMCAIJAJEDAgUGd2hEYXRhBQh3aElkeFJlcwkAzAgCCQCRAwIFBndoRGF0YQUId2hJZHhNYXQJAMwIAgkAkQMCBQZ3aERhdGEFCXdoSWR4UHJvZAkAzAgCBQpuZXdMb2Z0U3RyBQNuaWwCAToFA25pbAgFC2NsYWltUmVzdWx0Al8xBQhuZXdMZXZlbAUHbWF0VXNlZAEXdXBkYXRlRHVja1N0YXRzSW50ZXJuYWwCC2R1Y2tBc3NldElkB2RlbHRhWFADCQEBIQEFD0tTQUxMT1dYUExFVkVMUwkAlAoCBQNuaWwAAAQGbHZsS2V5CQEMa2V5RHVja0xldmVsAQULZHVja0Fzc2V0SWQEBXhwS2V5CQEJa2V5RHVja1hQAQULZHVja0Fzc2V0SWQEAnhwCQELdmFsdWVPckVsc2UCCQCaCAIFD3N0YWtpbmdDb250cmFjdAUFeHBLZXkAAAQFbmV3WFAJAGQCBQJ4cAUHZGVsdGFYUAQJbHZsUG9pbnRzCQEHbGV2ZWxVcAIJAQt2YWx1ZU9yRWxzZQIJAJoIAgUPc3Rha2luZ0NvbnRyYWN0BQZsdmxLZXkAAAUFbmV3WFAECWtleVBvaW50cwkBEWtleUR1Y2tGcmVlUG9pbnRzAQULZHVja0Fzc2V0SWQJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUGbHZsS2V5CQCRAwIFCWx2bFBvaW50cwAACQDMCAIJAQxJbnRlZ2VyRW50cnkCBQV4cEtleQUFbmV3WFAJAMwIAgkBDEludGVnZXJFbnRyeQIFCWtleVBvaW50cwkAZAIJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJa2V5UG9pbnRzAAAJAJEDAgUJbHZsUG9pbnRzAAEFA25pbAUFbmV3WFABFnVwZGF0ZUFjY1N0YXRzSW50ZXJuYWwCBGFkZHIHZGVsdGFYUAMJAQEhAQUPS1NBTExPV1hQTEVWRUxTCQCUCgIFA25pbAAABAZsdmxLZXkJAQxrZXlVc2VyTGV2ZWwBBQRhZGRyBAV4cEtleQkBCWtleVVzZXJYUAEFBGFkZHIEAnhwCQELdmFsdWVPckVsc2UCCQCaCAIFD3N0YWtpbmdDb250cmFjdAUFeHBLZXkAAAQFbmV3WFAJAGQCBQJ4cAUHZGVsdGFYUAQJbHZsUG9pbnRzCQEHbGV2ZWxVcAIJAQt2YWx1ZU9yRWxzZQIJAJoIAgUPc3Rha2luZ0NvbnRyYWN0BQZsdmxLZXkAAAUFbmV3WFAECWtleVBvaW50cwkBEWtleVVzZXJGcmVlUG9pbnRzAQUEYWRkcgkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQZsdmxLZXkJAJEDAgUJbHZsUG9pbnRzAAAJAMwIAgkBDEludGVnZXJFbnRyeQIFBXhwS2V5BQVuZXdYUAkAzAgCCQEMSW50ZWdlckVudHJ5AgUJa2V5UG9pbnRzCQBkAgkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlrZXlQb2ludHMAAAkAkQMCBQlsdmxQb2ludHMAAQUDbmlsBQVuZXdYUAESYWN0aXZhdGVPbmJvYXJkQXJ0AQRhZGRyBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFBGFkZHICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQECHJlZkJ5S2V5CQEPa2V5QWRkcmVzc1JlZkJ5AQUEYWRkcgQFcmVmQnkJAKIIAQUIcmVmQnlLZXkDCQEBIQEJAQlpc0RlZmluZWQBBQVyZWZCeQkAAgECKVlvdSBhcmUgbm90IGVsaWdpYmxlIGZvciBPTkJPQVJEIGFydGlmYWN0BAZhcnRLZXkJARxrZXlPbmJvYXJkQXJ0RHVja0FjdGl2YXRlZEJ5AQUEYWRkcgQHYXJ0RHVjawkAoggBBQZhcnRLZXkDCQEJaXNEZWZpbmVkAQUHYXJ0RHVjawkAAgEJAKwCAgIvWW91IGFscmVhZHkgdXNlZCB5b3VyIE9OQk9BUkQgYXJ0aWZhY3Qgb24gZHVjayAJAQV2YWx1ZQEFB2FydER1Y2sEEGR1Y2tBY3RpdmF0b3JLZXkJARxrZXlPbmJvYXJkQXJ0QWN0aXZhdGVkT25EdWNrAQULZHVja0Fzc2V0SWQEDWR1Y2tBY3RpdmF0b3IJAKIIAQUQZHVja0FjdGl2YXRvcktleQMJAQlpc0RlZmluZWQBBQ1kdWNrQWN0aXZhdG9yCQACAQkArAICCQCsAgIJAKwCAgIJVGhlIGR1Y2sgBQtkdWNrQXNzZXRJZAI0IGFscmVhZHkgZ290IHBvaW50cyBmcm9tIE9OQk9BUkQgYXJ0aWZhY3QgZnJvbSB1c2VyIAkBBXZhbHVlAQUNZHVja0FjdGl2YXRvcgkAzggCCQDMCAIJAQtTdHJpbmdFbnRyeQIFBmFydEtleQULZHVja0Fzc2V0SWQJAMwIAgkBC1N0cmluZ0VudHJ5AgUQZHVja0FjdGl2YXRvcktleQUEYWRkcgUDbmlsCAkBF3VwZGF0ZUR1Y2tTdGF0c0ludGVybmFsAgULZHVja0Fzc2V0SWQFCXhwT25ib2FyZAJfMQESYWN0aXZhdGVQcmVzYWxlQXJ0AgRhZGRyDWxhbmRBc3NldElkSW4EAWMJARRjaGVja0NsYWltQ29uZGl0aW9ucwMFBGFkZHIFE2NsYWltTW9kZVdoVGhlbkR1Y2sFDWxhbmRBc3NldElkSW4EC2xhbmRBc3NldElkCAUBYwJfMgQGcGllY2VzCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCCAUBYwJfMwULcmVjTGFuZFNpemUEDWFjdGl2YXRpb25LZXkJASBrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQW5kQXNzZXRJZAIFCkFSVFBSRVNBTEUFC2xhbmRBc3NldElkAwkAZgIJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUNYWN0aXZhdGlvbktleQAAAAAJAAIBAiVQcmVzYWxlIGFydGlmYWN0IGlzIGFscmVhZHkgYWN0aXZhdGVkAwkAZgIJAQ1wYXJzZUludFZhbHVlAQkAkQMCCAUBYwJfMwUKcmVjTGFuZE51bQUPUFJFU0FMRU5VTUxBTkRTCQACAQkArAICCQCsAgIJAKwCAgUKTEFORFBSRUZJWAIBIAULbGFuZEFzc2V0SWQCJSBpcyBub3QgZWxpZ2libGUgZm9yIHByZXNhbGUgYXJ0aWZhY3QEC2NsYWltUmVzdWx0CQEIY2xhaW1BbGwEBQRhZGRyBQtsYW5kQXNzZXRJZAUGcGllY2VzBRNjbGFpbU1vZGVXaFRoZW5EdWNrCQDNCAIJAM0IAgkAzQgCCQDNCAIIBQtjbGFpbVJlc3VsdAJfMQkBDEludGVnZXJFbnRyeQIFDWFjdGl2YXRpb25LZXkFBnBpZWNlcwkBDEludGVnZXJFbnRyeQIJASVrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQXNzZXRJZEFuZE93bmVyAwUKQVJUUFJFU0FMRQULbGFuZEFzc2V0SWQFBGFkZHIFBnBpZWNlcwkBC1N0cmluZ0VudHJ5AggFC2NsYWltUmVzdWx0Al8yCQC5CQIIBQtjbGFpbVJlc3VsdAJfMwIBOgkBC1N0cmluZ0VudHJ5AggFC2NsYWltUmVzdWx0Al80CQC5CQIIBQtjbGFpbVJlc3VsdAJfNQIBOgENbWVyZ2VJbnRlcm5hbAcLbmV3TGFuZFNpemUIbmV3TGV2ZWwHZm9ybXVsYQRhZGRyDGxhbmRBc3NldElkcwR0eElkB25lZWRNYXQEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAoBCmNoZWNrTWVyZ2UCA2FjYwtsYW5kQXNzZXRJZAQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQtsYW5kQXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAQJc2F2ZWRUaW1lCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ8IAQUHdGltZUtleQkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAQFb3duZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQULbGFuZEFzc2V0SWQJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwkBAiE9AgUFb3duZXIFBGFkZHIJAAIBCQCsAgIFCkxBTkRQUkVGSVgCDSBpcyBub3QgeW91cnMEAWQJALUJAggFBWFzc2V0C2Rlc2NyaXB0aW9uAgFfBAljb250aW5lbnQJAJEDAgUBZAUMcmVjQ29udGluZW50AwMJAQIhPQIIBQNhY2MCXzMCAAkBAiE9AggFA2FjYwJfMwUJY29udGluZW50BwkAAgECLkxhbmRzIHNob3VsZCBiZSBvbiB0aGUgc2FtZSBjb250aW5lbnQgdG8gbWVyZ2UECGxhbmRTaXplCQCRAwIFAWQFC3JlY0xhbmRTaXplBAdzaXplc0luCAUDYWNjAl8xBAFpCQETdmFsdWVPckVycm9yTWVzc2FnZQIJALMJAgUHc2l6ZXNJbgUIbGFuZFNpemUCJ1lvdSBoYXZlbid0IHBhc3NlZCBhbGwgdGhlIGxhbmRzIG5lZWRlZAQIc2l6ZXNPdXQJAKwCAgkArwICBQdzaXplc0luBQFpCQCwAgIFB3NpemVzSW4JAGQCBQFpAAEEBnBpZWNlcwkBD251bVBpZWNlc0J5U2l6ZQEFCGxhbmRTaXplBARhcnRzCQBkAggFA2FjYwJfMgkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEga2V5TGFuZEFydFN0YXR1c0J5VHlwZUFuZEFzc2V0SWQCBQpBUlRQUkVTQUxFBQtsYW5kQXNzZXRJZAAABAppbmZyYUxldmVsCQELdmFsdWVPckVsc2UCCQCfCAEJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQULbGFuZEFzc2V0SWQAAAQIcmVxTGV2ZWwEByRtYXRjaDAFCGxhbmRTaXplAwkAAAICAVMFByRtYXRjaDAAAwMJAAACAgFNBQckbWF0Y2gwAAQDCQAAAgIBTAUHJG1hdGNoMAAFAwkAAAICAlhMBQckbWF0Y2gwAAYJAAIBAhpPbmx5IFMsIE0sIEwsIFhMIGNhbiBtZXJnZQMJAQIhPQIFCmluZnJhTGV2ZWwFCHJlcUxldmVsCQACAQIiQWxsIGxhbmRzIHNob3VsZCBiZSBtYXhlZCB0byBtZXJnZQQHbGFuZE51bQkAkQMCBQFkBQpyZWNMYW5kTnVtBA10ZXJyYWluQ291bnRzCQENY291bnRUZXJyYWlucwEJAJEDAgUBZAULcmVjVGVycmFpbnMECWRlbHRhVGltZQkAZQIIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQlzYXZlZFRpbWUDCQBmAgAABQlkZWx0YVRpbWUJAAIBCQCsAgIJAKwCAgkArAICAiZTYXZlZCB0aW1lc3RhbXAgaXMgaW4gZnV0dXJlLCBzYXZlZCA9IAkApAMBBQlzYXZlZFRpbWUCDCwgY3VycmVudCA9IAkApAMBCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQWZGFpbHlQcm9kdWN0aW9uQnlQaWVjZQkBDGFwcGx5Qm9udXNlcwIFC2xhbmRBc3NldElkBQZwaWVjZXMECWxhbmRJbmRleAkAaQIFBnBpZWNlcwUFU1NJWkUEBWJwUmVzCQEGYWRkUmVzBQkAtQkCCAUDYWNjAl80AgFfBQ10ZXJyYWluQ291bnRzBQlkZWx0YVRpbWUFCWxhbmRJbmRleAUWZGFpbHlQcm9kdWN0aW9uQnlQaWVjZQQFcHJvcHMJARl1cGRhdGVQcm9wb3J0aW9uc0ludGVybmFsBAkAtQkCCAUDYWNjAl82AgFfBQ10ZXJyYWluQ291bnRzBQlsYW5kSW5kZXgA////////////AQQFbGFuZHMIBQNhY2MCXzcEA2lkeAkAzwgCBQVsYW5kcwULbGFuZEFzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBBQNpZHgJAAIBCQCsAgICIFlvdXIgc3Rha2VkIGxhbmRzIGRvbid0IGNvbnRhaW4gBQtsYW5kQXNzZXRJZAQJY3VzdG9tS2V5CQEaa2V5TGFuZEFzc2V0SWRUb0N1c3RvbU5hbWUBBQtsYW5kQXNzZXRJZAQKY3VzdG9tTmFtZQkBC3ZhbHVlT3JFbHNlAgkAoggBBQljdXN0b21LZXkCAAkAmgoIBQhzaXplc091dAUEYXJ0cwUJY29udGluZW50BQVicFJlcwkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCAUDYWNjAl81CQELRGVsZXRlRW50cnkBCQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkCQELRGVsZXRlRW50cnkBCQEia2V5U3Rha2VkVGltZUJ5VHlwZUFzc2V0SWRBbmRPd25lcgMFCkxBTkRQUkVGSVgFC2xhbmRBc3NldElkBQRhZGRyCQELRGVsZXRlRW50cnkBCQEQa2V5TGFuZFRvQXNzZXRJZAEFB2xhbmROdW0JAQtEZWxldGVFbnRyeQEJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQtsYW5kQXNzZXRJZAkBC0RlbGV0ZUVudHJ5AQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAkBC0RlbGV0ZUVudHJ5AQkBHmtleUluZnJhTGV2ZWxCeUFzc2V0SWRBbmRPd25lcgIFC2xhbmRBc3NldElkBQRhZGRyCQELRGVsZXRlRW50cnkBCQEga2V5TGFuZEFydFN0YXR1c0J5VHlwZUFuZEFzc2V0SWQCBQpBUlRQUkVTQUxFBQtsYW5kQXNzZXRJZAkBC0RlbGV0ZUVudHJ5AQkBJWtleUxhbmRBcnRTdGF0dXNCeVR5cGVBc3NldElkQW5kT3duZXIDBQpBUlRQUkVTQUxFBQtsYW5kQXNzZXRJZAUEYWRkcgkBC0RlbGV0ZUVudHJ5AQkBEWtleUxhbmROdW1Ub093bmVyAQUHbGFuZE51bQkBC0RlbGV0ZUVudHJ5AQkBEmtleVdhcmVob3VzZUJ5TGFuZAEFC2xhbmRBc3NldElkCQELRGVsZXRlRW50cnkBBQljdXN0b21LZXkJAQtEZWxldGVFbnRyeQEJARprZXlMYW5kQ3VzdG9tTmFtZVRvQXNzZXRJZAEFCmN1c3RvbU5hbWUJAQRCdXJuAgkA2QQBBQtsYW5kQXNzZXRJZAABBQVwcm9wcwkA0QgCBQVsYW5kcwkBBXZhbHVlAQUDaWR4CQBkAggFA2FjYwJfOAUGcGllY2VzBAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQHcHJvcFN0cgkBC3ZhbHVlT3JFbHNlAgkAoggBCQERa2V5UmVzUHJvcG9ydGlvbnMAAgswXzBfMF8wXzBfMAQIbGFuZHNLZXkJARVrZXlTdGFrZWRMYW5kc0J5T3duZXIBBQRhZGRyBAhsYW5kc1N0cgkAoggBBQhsYW5kc0tleQQHbGFuZHNJbgMJAQlpc0RlZmluZWQBBQhsYW5kc1N0cgkAvQkCCQEFdmFsdWUBBQhsYW5kc1N0cgIBXwUDbmlsBAFyCgACJGwFDGxhbmRBc3NldElkcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJoKCAUHZm9ybXVsYQAAAgAJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzBQNuaWwFB3Byb3BTdHIFB2xhbmRzSW4AAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEKY2hlY2tNZXJnZQIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNQkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUECWNvbnRpbmVudAgFAXICXzMEDGNvbnRpbmVudElkeAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDPCAIFCmNvbnRpbmVudHMFCWNvbnRpbmVudAkArAICAhNVbmtub3duIGNvbnRpbmVudDogBQljb250aW5lbnQECHRlcnJhaW5zCQELZ2VuVGVycmFpbnMCCQEDYWJzAQkAngMBBQR0eElkBQxjb250aW5lbnRJZHgEB2ZyZWVOdW0JAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBEmtleU5leHRGcmVlTGFuZE51bQAJAGQCBQ9QUkVTQUxFTlVNTEFORFMAAQQKbmV3TGFuZE51bQkApAMBBQdmcmVlTnVtBAVpc3N1ZQkAwggFCQEHbmZ0TmFtZQIFCm5ld0xhbmROdW0FC25ld0xhbmRTaXplCQC5CQIJAMwIAgUKbmV3TGFuZE51bQkAzAgCBQtuZXdMYW5kU2l6ZQkAzAgCBQh0ZXJyYWlucwkAzAgCBQljb250aW5lbnQFA25pbAIBXwABAAAHBAdhc3NldElkCQC4CAEFBWlzc3VlBA5uZXdMYW5kQXNzZXRJZAkA2AQBBQdhc3NldElkBAZuZXdNYXQJALkJAgkBEXN1YnRyYWN0TWF0ZXJpYWxzAwkAZgIFB25lZWRNYXQAAAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAIBXwUHbmVlZE1hdAIBXwQJcGllY2VzS2V5CQEWa2V5U3Rha2VkUGllY2VzQnlPd25lcgEFBGFkZHIEDHN0YWtlZFBpZWNlcwkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlwaWVjZXNLZXkAAAkAlAoCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCAUBcgJfNQMJAGYCCQCQAwEIBQFyAl83AAAJAQtTdHJpbmdFbnRyeQIFCGxhbmRzS2V5CQC7CQIIBQFyAl83AgFfCQELRGVsZXRlRW50cnkBBQhsYW5kc0tleQkBDEludGVnZXJFbnRyeQIFCXBpZWNlc0tleQMJAGYCCAUBcgJfOAUMc3Rha2VkUGllY2VzAAAJAGUCBQxzdGFrZWRQaWVjZXMIBQFyAl84CQEMSW50ZWdlckVudHJ5AgkBEmtleU5leHRGcmVlTGFuZE51bQAJAGQCBQdmcmVlTnVtAAEFBWlzc3VlCQELU3RyaW5nRW50cnkCCQEQa2V5TGFuZFRvQXNzZXRJZAEFCm5ld0xhbmROdW0FDm5ld0xhbmRBc3NldElkCQELU3RyaW5nRW50cnkCCQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQUObmV3TGFuZEFzc2V0SWQFBGFkZHIJAQtTdHJpbmdFbnRyeQIJARFrZXlMYW5kTnVtVG9Pd25lcgEFCm5ld0xhbmROdW0FBGFkZHIJAQxJbnRlZ2VyRW50cnkCCQEga2V5TGFuZEFydFN0YXR1c0J5VHlwZUFuZEFzc2V0SWQCBQpBUlRQUkVTQUxFBQ5uZXdMYW5kQXNzZXRJZAgFAXICXzIJAQxJbnRlZ2VyRW50cnkCCQEla2V5TGFuZEFydFN0YXR1c0J5VHlwZUFzc2V0SWRBbmRPd25lcgMFCkFSVFBSRVNBTEUFDm5ld0xhbmRBc3NldElkBQRhZGRyCAUBcgJfMgkBDEludGVnZXJFbnRyeQIJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQUObmV3TGFuZEFzc2V0SWQFCG5ld0xldmVsCQEMSW50ZWdlckVudHJ5AgkBHmtleUluZnJhTGV2ZWxCeUFzc2V0SWRBbmRPd25lcgIFDm5ld0xhbmRBc3NldElkBQRhZGRyBQhuZXdMZXZlbAkBC1N0cmluZ0VudHJ5AgUFYnBLZXkJALkJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIIBQFyAl80CQDMCAIFBm5ld01hdAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QFA25pbAIBOgkBC1N0cmluZ0VudHJ5AgkBEWtleVJlc1Byb3BvcnRpb25zAAgFAXICXzYJAQtTdHJpbmdFbnRyeQIJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAkAuQkCCQDMCAIFCWNvbnRpbmVudAkAzAgCAgFMCQDMCAIFDm5ld0xhbmRBc3NldElkBQNuaWwCAV8JAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEFBGFkZHIAAQUHYXNzZXRJZAUObmV3TGFuZEFzc2V0SWQBA3MybQMEYWRkcgxsYW5kQXNzZXRJZHMEdHhJZAkBDW1lcmdlSW50ZXJuYWwHAgFNAAMCBFNTU1MFBGFkZHIFDGxhbmRBc3NldElkcwUEdHhJZAAAAQNtMmwFBGFkZHIMbGFuZEFzc2V0SWRzBHR4SWQMc2hvdWxkVXNlTWF0DXBheW1lbnRBbW91bnQEBGNvc3QJAGgCBRVJbmZyYVVwZ3JhZGVDb3N0U1VzZHQABAMDCQEBIQEFDHNob3VsZFVzZU1hdAkBAiE9AgUNcGF5bWVudEFtb3VudAUEY29zdAcJAAIBCQCsAgICG1BheW1lbnQgYXR0YWNoZWQgc2hvdWxkIGJlIAkApAMBBQRjb3N0CQENbWVyZ2VJbnRlcm5hbAcCAUwABAIDU01NBQRhZGRyBQxsYW5kQXNzZXRJZHMFBHR4SWQJAGgCBRFJbmZyYVVwZ3JhZGVDb3N0UwAEAQRsMnhsBQRhZGRyDGxhbmRBc3NldElkcwR0eElkDHNob3VsZFVzZU1hdA1wYXltZW50QW1vdW50BARjb3N0CQBoAgUVSW5mcmFVcGdyYWRlQ29zdFNVc2R0AC8DAwkBASEBBQxzaG91bGRVc2VNYXQJAQIhPQIFDXBheW1lbnRBbW91bnQFBGNvc3QHCQACAQkArAICAhtQYXltZW50IGF0dGFjaGVkIHNob3VsZCBiZSAJAKQDAQUEY29zdAkBDW1lcmdlSW50ZXJuYWwHAgJYTAAFAgVTU1NNTAUEYWRkcgUMbGFuZEFzc2V0SWRzBQR0eElkCQBoAgURSW5mcmFVcGdyYWRlQ29zdFMALwEGeGwyeHhsBQRhZGRyDGxhbmRBc3NldElkcwR0eElkDHNob3VsZFVzZU1hdA1wYXltZW50QW1vdW50BARjb3N0CQBoAgUVSW5mcmFVcGdyYWRlQ29zdFNVc2R0ADYDAwkBASEBBQxzaG91bGRVc2VNYXQJAQIhPQIFDXBheW1lbnRBbW91bnQFBGNvc3QHCQACAQkArAICAhtQYXltZW50IGF0dGFjaGVkIHNob3VsZCBiZSAJAKQDAQUEY29zdAkBDW1lcmdlSW50ZXJuYWwHAgNYWEwABgIDTFhMBQRhZGRyBQxsYW5kQXNzZXRJZHMFBHR4SWQJAGgCBRFJbmZyYVVwZ3JhZGVDb3N0UwA2AQttZXJnZUNvbW1vbgUMc2hvdWxkVXNlTWF0BGFkZHINcGF5bWVudEFtb3VudAxsYW5kQXNzZXRJZHMEdHhJZAQLbWVyZ2VSZXN1bHQEByRtYXRjaDAJAJADAQUMbGFuZEFzc2V0SWRzAwkAAAIABAUHJG1hdGNoMAkBA3MybQMFBGFkZHIFDGxhbmRBc3NldElkcwUEdHhJZAMJAAACAAMFByRtYXRjaDAJAQNtMmwFBQRhZGRyBQxsYW5kQXNzZXRJZHMFBHR4SWQFDHNob3VsZFVzZU1hdAUNcGF5bWVudEFtb3VudAMJAAACAAUFByRtYXRjaDAJAQRsMnhsBQUEYWRkcgUMbGFuZEFzc2V0SWRzBQR0eElkBQxzaG91bGRVc2VNYXQFDXBheW1lbnRBbW91bnQDCQAAAgACBQckbWF0Y2gwCQEGeGwyeHhsBQUEYWRkcgUMbGFuZEFzc2V0SWRzBQR0eElkBQxzaG91bGRVc2VNYXQFDXBheW1lbnRBbW91bnQJAAIBAg1Vbmtub3duIG1lcmdlBQttZXJnZVJlc3VsdAEGcHJvbG9nAQFpAwMJAQIhPQIIBQFpDG9yaWdpbkNhbGxlcgUMcmVzdENvbnRyYWN0CQELdmFsdWVPckVsc2UCCQCgCAEJAQprZXlCbG9ja2VkAAcHCQACAQIfQ29udHJhY3RzIGFyZSB1bmRlciBtYWludGVuYW5jZQkBC1N0cmluZ0VudHJ5AgkBEWtleUxhc3RUeElkQnlVc2VyAQkApQgBCAUBaQxvcmlnaW5DYWxsZXIJANgEAQgFAWkNdHJhbnNhY3Rpb25JZCIBaQENY29uc3RydWN0b3JWMQEIcmVzdEFkZHIDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAhFQZXJtaXNzaW9uIGRlbmllZAkAzAgCCQELU3RyaW5nRW50cnkCCQEOa2V5UmVzdEFkZHJlc3MABQhyZXN0QWRkcgUDbmlsAWkBCnNldEJsb2NrZWQBCWlzQmxvY2tlZAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECEXBlcm1pc3Npb24gZGVuaWVkCQDMCAIJAQxCb29sZWFuRW50cnkCCQEKa2V5QmxvY2tlZAAFCWlzQmxvY2tlZAUDbmlsAWkBCXN0YWtlTGFuZAAEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhxFeGFjdGx5IG9uZSBwYXltZW50IHJlcXVpcmVkBANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAQHYXNzZXRJZAkBBXZhbHVlAQgFA3BtdAdhc3NldElkBAdhZGRyZXNzCQClCAEIBQFpBmNhbGxlcgMJAQIhPQIIBQNwbXQGYW1vdW50AAEJAAIBCQCsAgIJAKwCAgIETkZUIAUKTEFORFBSRUZJWAIkIHRva2VuIHNob3VsZCBiZSBhdHRhY2hlZCBhcyBwYXltZW50BAVhc3NldAkBBXZhbHVlAQkA7AcBBQdhc3NldElkAwkBAiE9AggFBWFzc2V0Bmlzc3VlcgUEdGhpcwkAAgECF1Vua25vd24gaXNzdWVyIG9mIHRva2VuAwkBASEBCQEIY29udGFpbnMCCAUFYXNzZXQEbmFtZQUKTEFORFBSRUZJWAkAAgEJAKwCAgkArAICAglPbmx5IE5GVCAFCkxBTkRQUkVGSVgCFCB0b2tlbnMgYXJlIGFjY2VwdGVkBAtsYW5kTnVtU2l6ZQkAsAICCAUFYXNzZXQEbmFtZQAEBAdsYW5kTnVtAwkBCGNvbnRhaW5zAgULbGFuZE51bVNpemUCA1hYTAkAswICBQtsYW5kTnVtU2l6ZQADAwkBCGNvbnRhaW5zAgULbGFuZE51bVNpemUCAlhMCQCzAgIFC2xhbmROdW1TaXplAAIJALMCAgULbGFuZE51bVNpemUAAQMJAQEhAQkBCWlzRGVmaW5lZAEJALYJAQUHbGFuZE51bQkAAgEJAKwCAgIeQ2Fubm90IHBhcnNlIGxhbmQgbnVtYmVyIGZyb20gCAUFYXNzZXQEbmFtZQQLbGFuZEFzc2V0SWQJANgEAQUHYXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAMJAQlpc0RlZmluZWQBCQCfCAEFB3RpbWVLZXkJAAIBCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCEiBpcyBhbHJlYWR5IHN0YWtlZAQBZAkAtQkCCAUFYXNzZXQLZGVzY3JpcHRpb24CAV8EDXRlcnJhaW5Db3VudHMJAQ1jb3VudFRlcnJhaW5zAQkAkQMCBQFkBQtyZWNUZXJyYWlucwQGcGllY2VzCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCBQFkBQtyZWNMYW5kU2l6ZQQFcHJvcHMJARF1cGRhdGVQcm9wb3J0aW9ucwMFDXRlcnJhaW5Db3VudHMJAGkCBQZwaWVjZXMFBVNTSVpFAAEECWFydFBpZWNlcwkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEga2V5TGFuZEFydFN0YXR1c0J5VHlwZUFuZEFzc2V0SWQCBQpBUlRQUkVTQUxFBQtsYW5kQXNzZXRJZAAABAhsYW5kc0tleQkBFWtleVN0YWtlZExhbmRzQnlPd25lcgEFB2FkZHJlc3MECGxhbmRzU3RyCQCiCAEFCGxhbmRzS2V5BAVsYW5kcwMJAQlpc0RlZmluZWQBBQhsYW5kc1N0cgkAvQkCCQEFdmFsdWUBBQhsYW5kc1N0cgIBXwUDbmlsAwkBD2NvbnRhaW5zRWxlbWVudAIFBWxhbmRzBQtsYW5kQXNzZXRJZAkAAgEJAKwCAgIiWW91ciBzdGFrZWQgbGFuZHMgYWxyZWFkeSBjb250YWluIAULbGFuZEFzc2V0SWQECmluZnJhTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAAABAlwaWVjZXNLZXkJARZrZXlTdGFrZWRQaWVjZXNCeU93bmVyAQUHYWRkcmVzcwQJb2xkUGllY2VzCQELdmFsdWVPckVsc2UCCQCfCAEFCXBpZWNlc0tleQAABAl3bGdSZXN1bHQJAQVhc0ludAEJAPwHBAULd2xnQ29udHJhY3QCEm9uU3Rha2VVbnN0YWtlTGFuZAkAzAgCBQdhZGRyZXNzBQNuaWwFA25pbAkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQd0aW1lS2V5CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDBQpMQU5EUFJFRklYBQtsYW5kQXNzZXRJZAUHYWRkcmVzcwgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAMwIAgkBC1N0cmluZ0VudHJ5AgUIbGFuZHNLZXkJALsJAgkAzQgCBQVsYW5kcwULbGFuZEFzc2V0SWQCAV8JAMwIAgkBDEludGVnZXJFbnRyeQIFCXBpZWNlc0tleQkAZAIFCW9sZFBpZWNlcwUGcGllY2VzCQDMCAIJAQtTdHJpbmdFbnRyeQIJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQtsYW5kQXNzZXRJZAUHYWRkcmVzcwkAzAgCCQELU3RyaW5nRW50cnkCCQERa2V5TGFuZE51bVRvT3duZXIBBQdsYW5kTnVtBQdhZGRyZXNzCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEla2V5TGFuZEFydFN0YXR1c0J5VHlwZUFzc2V0SWRBbmRPd25lcgMFCkFSVFBSRVNBTEUFC2xhbmRBc3NldElkBQdhZGRyZXNzBQlhcnRQaWVjZXMJAMwIAgkBDEludGVnZXJFbnRyeQIJAR5rZXlJbmZyYUxldmVsQnlBc3NldElkQW5kT3duZXICBQtsYW5kQXNzZXRJZAUHYWRkcmVzcwUKaW5mcmFMZXZlbAkAzAgCCQELU3RyaW5nRW50cnkCCQERa2V5UmVzUHJvcG9ydGlvbnMABQVwcm9wcwkAzAgCBQxwcm9sb2dBY3Rpb24FA25pbAUJd2xnUmVzdWx0AWkBC3Vuc3Rha2VMYW5kAQ1sYW5kQXNzZXRJZEluBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBGFkZHIJAKUIAQgFAWkGY2FsbGVyBAFjCQEUY2hlY2tDbGFpbUNvbmRpdGlvbnMDBQRhZGRyBQ1jbGFpbU1vZGVEdWNrBQ1sYW5kQXNzZXRJZEluBAtsYW5kQXNzZXRJZAgFAWMCXzIECGxhbmRzS2V5CQEVa2V5U3Rha2VkTGFuZHNCeU93bmVyAQUEYWRkcgQNdGVycmFpbkNvdW50cwkBDWNvdW50VGVycmFpbnMBCQCRAwIIBQFjAl8zBQtyZWNUZXJyYWlucwQGcGllY2VzCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCCAUBYwJfMwULcmVjTGFuZFNpemUEBXByb3BzCQERdXBkYXRlUHJvcG9ydGlvbnMDBQ10ZXJyYWluQ291bnRzCQBpAgUGcGllY2VzBQVTU0laRQD///////////8BBAtjbGFpbVJlc3VsdAkBCGNsYWltQWxsBAUEYWRkcgULbGFuZEFzc2V0SWQFBnBpZWNlcwUNY2xhaW1Nb2RlRHVjawQFbGFuZHMJAL0JAgkBC3ZhbHVlT3JFbHNlAgkAoggBBQhsYW5kc0tleQIAAgFfBANpZHgJAM8IAgUFbGFuZHMFC2xhbmRBc3NldElkAwkBASEBCQEJaXNEZWZpbmVkAQUDaWR4CQACAQkArAICAiBZb3VyIHN0YWtlZCBsYW5kcyBkb24ndCBjb250YWluIAULbGFuZEFzc2V0SWQEA25vdwgFCWxhc3RCbG9jawl0aW1lc3RhbXAEDmdvdlJlbGVhc2VUaW1lCQELdmFsdWVPckVsc2UCCQCaCAIFC2dvdkNvbnRyYWN0CQEVa2V5VXNlckd3bFJlbGVhc2VUaW1lAQUEYWRkcgAAAwkAZwIFDmdvdlJlbGVhc2VUaW1lBQNub3cJAAIBCQCsAgICOVlvdXIgZ1dMIGFyZSB0YWtpbmcgcGFydCBpbiB2b3RpbmcsIGNhbm5vdCB1bnN0YWtlIHVudGlsIAkApAMBBQ5nb3ZSZWxlYXNlVGltZQQOYXJiUmVsZWFzZVRpbWUJAGQCCQELdmFsdWVPckVsc2UCCQCaCAIFC3dsZ0NvbnRyYWN0CQEUa2V5TGFzdEFyYlRpbWVCeVVzZXIBBQRhZGRyAAAFDmFyYml0cmFnZURlbGF5AwkAZgIFDmFyYlJlbGVhc2VUaW1lBQNub3cJAAIBCQCsAgICP1lvdXIgc3Rha2VkIGxhbmRzIHRvb2sgcGFydCBpbiBhcmJpdHJhZ2UsIGNhbm5vdCB1bnN0YWtlIHVudGlsIAkApAMBBQ5hcmJSZWxlYXNlVGltZQQJcGllY2VzS2V5CQEWa2V5U3Rha2VkUGllY2VzQnlPd25lcgEFBGFkZHIEDHN0YWtlZFBpZWNlcwkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlwaWVjZXNLZXkAAAQJbmV3UGllY2VzAwkAZgIFBnBpZWNlcwUMc3Rha2VkUGllY2VzAAAJAGUCBQxzdGFrZWRQaWVjZXMFBnBpZWNlcwQJd2xnUmVzdWx0CQEFYXNJbnQBCQD8BwQFC3dsZ0NvbnRyYWN0AhJvblN0YWtlVW5zdGFrZUxhbmQJAMwIAgUEYWRkcgUDbmlsBQNuaWwJAJQKAgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIAAQkA2QQBBQtsYW5kQXNzZXRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkCQDMCAIJAQtEZWxldGVFbnRyeQEJASJrZXlTdGFrZWRUaW1lQnlUeXBlQXNzZXRJZEFuZE93bmVyAwUKTEFORFBSRUZJWAULbGFuZEFzc2V0SWQFBGFkZHIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEWtleVJlc1Byb3BvcnRpb25zAAUFcHJvcHMJAMwIAgkBC1N0cmluZ0VudHJ5AggFC2NsYWltUmVzdWx0Al8yCQC5CQIIBQtjbGFpbVJlc3VsdAJfMwIBOgkAzAgCAwkAZgIJAJADAQUFbGFuZHMAAQkBC1N0cmluZ0VudHJ5AgUIbGFuZHNLZXkJALsJAgkA0QgCBQVsYW5kcwkBBXZhbHVlAQUDaWR4AgFfCQELRGVsZXRlRW50cnkBBQhsYW5kc0tleQkAzAgCCQEMSW50ZWdlckVudHJ5AgUJcGllY2VzS2V5BQluZXdQaWVjZXMJAMwIAgUMcHJvbG9nQWN0aW9uBQNuaWwFCXdsZ1Jlc3VsdAFpAQlzdGFrZUR1Y2sABAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIcRXhhY3RseSBvbmUgcGF5bWVudCByZXF1aXJlZAQDcG10CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAAEB2Fzc2V0SWQJAQV2YWx1ZQEIBQNwbXQHYXNzZXRJZAQHYWRkcmVzcwkApQgBCAUBaQZjYWxsZXIDCQECIT0CCAUDcG10BmFtb3VudAABCQACAQkArAICCQCsAgICBE5GVCAFCkRVQ0tQUkVGSVgCJCB0b2tlbiBzaG91bGQgYmUgYXR0YWNoZWQgYXMgcGF5bWVudAQFYXNzZXQJAQV2YWx1ZQEJAOwHAQUHYXNzZXRJZAMDCQECIT0CCAUFYXNzZXQGaXNzdWVyBQ1pbmN1YmF0b3JBZGRyCQECIT0CCAUFYXNzZXQGaXNzdWVyBQticmVlZGVyQWRkcgcJAAIBCQCsAgIJAKwCAgISVW5rbm93biBpc3N1ZXIgb2YgBQpEVUNLUFJFRklYAgYgdG9rZW4DCQEBIQEJAQhjb250YWlucwIIBQVhc3NldARuYW1lBQpEVUNLUFJFRklYCQACAQkArAICCQCsAgICCU9ubHkgTkZUIAUKRFVDS1BSRUZJWAIUIHRva2VucyBhcmUgYWNjZXB0ZWQECmFzc2V0SWRTdHIJANgEAQUHYXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQphc3NldElkU3RyAwkBCWlzRGVmaW5lZAEJAJ8IAQUHdGltZUtleQkAAgEJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQISIGlzIGFscmVhZHkgc3Rha2VkAwkBCWlzRGVmaW5lZAEJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUHYWRkcmVzcwkAAgEJAKwCAgIdWW91IGFscmVhZHkgc3Rha2VkIG9uZSBkdWNrOiAIBQVhc3NldARuYW1lBAZsb2NLZXkJAQ9rZXlEdWNrTG9jYXRpb24BBQphc3NldElkU3RyBAhsb2NhdGlvbgkAoggBBQZsb2NLZXkEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBBQphc3NldElkU3RyBAhiYWNrcGFjawkAoggBBQVicEtleQQJa2V5SGVhbHRoCQENa2V5RHVja0hlYWx0aAEFCmFzc2V0SWRTdHIEBW1heEhQCQEJbWF4SGVhbHRoAQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEMa2V5RHVja0xldmVsAQUKYXNzZXRJZFN0cgAABAljdXJIZWFsdGgJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJa2V5SGVhbHRoBQVtYXhIUAkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQd0aW1lS2V5CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDBQpEVUNLUFJFRklYCQDYBAEFB2Fzc2V0SWQFB2FkZHJlc3MIBQlsYXN0QmxvY2sJdGltZXN0YW1wCQDMCAIJAQtTdHJpbmdFbnRyeQIJARBrZXlEdWNrSWRUb093bmVyAQUKYXNzZXRJZFN0cgUHYWRkcmVzcwkAzAgCCQELU3RyaW5nRW50cnkCCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQdhZGRyZXNzBQphc3NldElkU3RyBQNuaWwDCQEJaXNEZWZpbmVkAQUIbG9jYXRpb24FA25pbAkAzggCCQDMCAIJAQtTdHJpbmdFbnRyeQIFBmxvY0tleQUPREVGQVVMVExPQ0FUSU9OBQNuaWwDCQEJaXNEZWZpbmVkAQUIYmFja3BhY2sFA25pbAkAzQgCCQDNCAIJAMwIAgkBC1N0cmluZ0VudHJ5AgUFYnBLZXkCGjA6MF8wXzBfMF8wXzA6MF8wXzBfMF8wXzA6BQNuaWwJAQxJbnRlZ2VyRW50cnkCBQlrZXlIZWFsdGgFCWN1ckhlYWx0aAUMcHJvbG9nQWN0aW9uAWkBC3Vuc3Rha2VEdWNrAQphc3NldElkU3RyBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEB2Fzc2V0SWQJANkEAQUKYXNzZXRJZFN0cgQHYWRkcmVzcwkApQgBCAUBaQZjYWxsZXIEBWFzc2V0CQEFdmFsdWUBCQDsBwEFB2Fzc2V0SWQEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQkA2AQBBQdhc3NldElkAwkBASEBCQEJaXNEZWZpbmVkAQkAnwgBBQd0aW1lS2V5CQACAQkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAMJAQEhAQkBCWlzRGVmaW5lZAEJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUHYWRkcmVzcwkAAgEJAKwCAgkArAICAglUaGUgZHVjayAIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAQFb3duZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEQa2V5RHVja0lkVG9Pd25lcgEJANgEAQUHYXNzZXRJZAkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDCQECIT0CBQVvd25lcgUHYWRkcmVzcwkAAgECF1N0YWtlZCBORlQgaXMgbm90IHlvdXJzBAlrZXlIZWFsdGgJAQ1rZXlEdWNrSGVhbHRoAQUKYXNzZXRJZFN0cgQFbWF4SFAJAQltYXhIZWFsdGgBCQELdmFsdWVPckVsc2UCCQCfCAEJAQxrZXlEdWNrTGV2ZWwBBQphc3NldElkU3RyAAAEBmhlYWx0aAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlrZXlIZWFsdGgFBW1heEhQAwkAZgIFBW1heEhQBQZoZWFsdGgJAAIBCQCsAgIJAKwCAgIZUGxlYXNlIGhlYWwgeW91ciBkdWNrIHRvIAkApAMBBQVtYXhIUAITaHAgYmVmb3JlIHVuc3Rha2luZwkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIAAQUHYXNzZXRJZAkAzAgCCQELRGVsZXRlRW50cnkBBQd0aW1lS2V5CQDMCAIJAQtEZWxldGVFbnRyeQEFCWtleUhlYWx0aAkAzAgCCQELRGVsZXRlRW50cnkBCQEPa2V5RHVja0xvY2F0aW9uAQUKYXNzZXRJZFN0cgkAzAgCCQELRGVsZXRlRW50cnkBCQEQa2V5RHVja0lkVG9Pd25lcgEFCmFzc2V0SWRTdHIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDBQpEVUNLUFJFRklYBQphc3NldElkU3RyBQdhZGRyZXNzCQDMCAIJAQtEZWxldGVFbnRyeQEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFB2FkZHJlc3MJAMwIAgUMcHJvbG9nQWN0aW9uBQNuaWwBaQEIY2xhaW1SZXMCBmFtb3VudA5sYW5kQXNzZXRJZFN0cgQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBARhZGRyCQClCAEIBQFpDG9yaWdpbkNhbGxlcgQGcmVzdWx0CQEQY2xhaW1SZXNJbnRlcm5hbAQFBGFkZHIFBmFtb3VudAUNY2xhaW1Nb2RlRHVjawUObGFuZEFzc2V0SWRTdHIEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAkAlAoCCQDNCAIJAM0IAgkAzQgCCQDOCAIIBQZyZXN1bHQCXzEICQEXdXBkYXRlRHVja1N0YXRzSW50ZXJuYWwCBQtkdWNrQXNzZXRJZAkAawMFB3hwQ2xhaW0FBmFtb3VudAUFTVVMVDgCXzEJAQtTdHJpbmdFbnRyeQIIBQZyZXN1bHQCXzIJALkJAggFBnJlc3VsdAJfMwIBOgkBC1N0cmluZ0VudHJ5AggFBnJlc3VsdAJfNAkAuQkCCAUGcmVzdWx0Al81AgE6BQxwcm9sb2dBY3Rpb24JAJEDAggFBnJlc3VsdAJfMwUIYnBJZHhSZXMBaQEMY2xhaW1SZXNUb1dIAgZhbW91bnQObGFuZEFzc2V0SWRTdHIEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQEYWRkcgkApQgBCAUBaQxvcmlnaW5DYWxsZXIEBnJlc3VsdAkBEGNsYWltUmVzSW50ZXJuYWwEBQRhZGRyBQZhbW91bnQFC2NsYWltTW9kZVdoBQ5sYW5kQXNzZXRJZFN0cgkAlAoCCQDNCAIJAM0IAgkAzQgCCQDOCAIIBQZyZXN1bHQCXzEICQEWdXBkYXRlQWNjU3RhdHNJbnRlcm5hbAIFBGFkZHIJAGsDBQd4cENsYWltBQZhbW91bnQFBU1VTFQ4Al8xCQELU3RyaW5nRW50cnkCCAUGcmVzdWx0Al8yCQC5CQIIBQZyZXN1bHQCXzMCAToJAQtTdHJpbmdFbnRyeQIIBQZyZXN1bHQCXzQJALkJAggFBnJlc3VsdAJfNQIBOgUMcHJvbG9nQWN0aW9uCQCRAwIIBQZyZXN1bHQCXzUFCHdoSWR4UmVzAWkBBmZsaWdodAIHbWVzc2FnZQNzaWcEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQIdXNlckFkZHIJAKUIAQgFAWkGY2FsbGVyBAFmCQEMZmxpZ2h0Q29tbW9uAwUIdXNlckFkZHIFB21lc3NhZ2UFA3NpZwQLZHVja0Fzc2V0SWQIBQFmAl8yBAZsb2NLZXkJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAQLY3VyTG9jYXRpb24JAQt2YWx1ZU9yRWxzZQIJAKIIAQUGbG9jS2V5BQ9ERUZBVUxUTE9DQVRJT04DCQAAAggFAWYCXzQFC2N1ckxvY2F0aW9uCQACAQIiWW91IGNhbid0IGZseSB0byB0aGUgc2FtZSBsb2NhdGlvbgQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkEB25ld1Byb2QJARBzdWJ0cmFjdFByb2R1Y3RzAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kCAUBZgJfNQkAlAoCCQDOCAIJAMwIAgkBC1N0cmluZ0VudHJ5AgUGbG9jS2V5AwkAZgIIBQFmAl8xAAAIBQFmAl80BQtjdXJMb2NhdGlvbgkAzAgCCQELU3RyaW5nRW50cnkCBQVicEtleQkAuQkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQJAMwIAgUHbmV3UHJvZAUDbmlsAgE6CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkCAUBZgJfMQkAzAgCBQxwcm9sb2dBY3Rpb24FA25pbAgJARd1cGRhdGVEdWNrU3RhdHNJbnRlcm5hbAIFC2R1Y2tBc3NldElkAwkAZgIIBQFmAl8xAAAFD3hwU3VjY2Vzc0ZsaWdodAUMeHBGYWlsRmxpZ2h0Al8xCAUBZgJfMwFpAQRoZWFsAwpxdWFudGl0eUwxCnF1YW50aXR5TDIKcXVhbnRpdHlMMwQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMDAwkAZgIAAAUKcXVhbnRpdHlMMQYJAGYCAAAFCnF1YW50aXR5TDIGCQBmAgAABQpxdWFudGl0eUwzCQACAQIbUXVhbnRpdHkgY2Fubm90IGJlIG5lZ2F0aXZlBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkBANxdHMJAMwIAgUKcXVhbnRpdHlMMQkAzAgCBQpxdWFudGl0eUwyCQDMCAIFCnF1YW50aXR5TDMFA25pbAQJa2V5SGVhbHRoCQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkBAVtYXhIUAkBCW1heEhlYWx0aAEJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBDGtleUR1Y2tMZXZlbAEFC2R1Y2tBc3NldElkAAAECW9sZEhlYWx0aAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlrZXlIZWFsdGgFBW1heEhQAwkAZwIFCW9sZEhlYWx0aAUFbWF4SFAJAAIBCQCsAgIJAKwCAgIPSFAgc2hvdWxkIGJlIDwgCQCkAwEFBW1heEhQAgggdG8gaGVhbAQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkECHByb2RMaXN0AwkAAAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAIABQNuaWwJALUJAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kAgFfCgELaXRlcmF0ZVByb2QCA2FjYwtpZ25vcmVkSXRlbQQBbggFA2FjYwJfMgQBeAMJAGYCCQCQAwEFCHByb2RMaXN0BQFuCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUIcHJvZExpc3QFAW4AAAMJAGYCAAMFAW4EAXEJAJEDAgUDcXRzBQFuAwkAZgIFAXEFAXgJAAIBCQCsAgIJAKwCAgkArAICAg5Zb3UgaGF2ZSBvbmx5IAkApAMBBQF4AgQgb2YgCQCRAwIFCXByb2RUeXBlcwUBbgkAlQoDCQDNCAIIBQNhY2MCXzEJAKQDAQkAZQIFAXgFAXEJAGQCBQFuAAEJAGQCCAUDYWNjAl8zCQBoAgkAkQMCBQhtZWRLaXRIcAUBbgUBcQkAlQoDCQDNCAIIBQNhY2MCXzEJAKQDAQUBeAkAZAIFAW4AAQgFA2FjYwJfMwQGcmVzdWx0CgACJGwFEHByb2R1Y3Rpb25NYXRyaXgKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCVCgMFA25pbAAAAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBC2l0ZXJhdGVQcm9kAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyA1MAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAAZABoAGwAcAB0AHgAfACAAIQAiACMAJAAlACYAJwAoACkAKgArACwALQAuAC8AMAAxADIECW5ld0hlYWx0aAkAlwMBCQDMCAIFBW1heEhQCQDMCAIJAGQCBQlvbGRIZWFsdGgIBQZyZXN1bHQCXzMFA25pbAkAlAoCCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIFCWtleUhlYWx0aAUJbmV3SGVhbHRoCQDMCAIJAQtTdHJpbmdFbnRyeQIFBWJwS2V5CQC6CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAkAzAgCCQC5CQIIBQZyZXN1bHQCXzECAV8FA25pbAIBOgkAzAgCBQxwcm9sb2dBY3Rpb24FA25pbAgJARd1cGRhdGVEdWNrU3RhdHNJbnRlcm5hbAIFC2R1Y2tBc3NldElkCQBoAgUGeHBIZWFsCQBkAgkAZAIFCnF1YW50aXR5TDEFCnF1YW50aXR5TDIFCnF1YW50aXR5TDMCXzEFCW5ld0hlYWx0aAFpAQZoZWFsRVMABAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIcRXhhY3RseSBvbmUgcGF5bWVudCByZXF1aXJlZAQDcG10CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAADCQECIT0CCAUDcG10B2Fzc2V0SWQFC3VzZHRBc3NldElkCQACAQIaQWxsb3dlZCBVU0RUIHBheW1lbnQgb25seSEEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQkApQgBCAUBaQZjYWxsZXICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQECWtleUhlYWx0aAkBDWtleUR1Y2tIZWFsdGgBBQtkdWNrQXNzZXRJZAQFbWF4SFAJAQltYXhIZWFsdGgBCQELdmFsdWVPckVsc2UCCQCfCAEJAQxrZXlEdWNrTGV2ZWwBBQtkdWNrQXNzZXRJZAAABAlvbGRIZWFsdGgJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJa2V5SGVhbHRoBQVtYXhIUAMJAGYCBQlvbGRIZWFsdGgAAAkAAgECKEhQIHNob3VsZCBiZSAwIHRvIGNhbGwgRW1lcmdlbmN5IFNlcnZpY2UEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BAhwcm9kTGlzdAMJAAACCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QCAAUDbmlsCQC1CQIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAIBXwQNbWVkS2l0QW1vdW50MQMJAGYCCQCQAwEFCHByb2RMaXN0AAAJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQhwcm9kTGlzdAAAAAAEDW1lZEtpdEFtb3VudDIDCQBmAgkAkAMBBQhwcm9kTGlzdAABCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUIcHJvZExpc3QAAQAABA1tZWRLaXRBbW91bnQzAwkAZgIJAJADAQUIcHJvZExpc3QAAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCHByb2RMaXN0AAIAAAMDAwkAZgIFDW1lZEtpdEFtb3VudDEAAAYJAGYCBQ1tZWRLaXRBbW91bnQyAAAGCQBmAgUNbWVkS2l0QW1vdW50MwAACQACAQIfWW91IGhhdmUgdG8gdXNlIG93biBNZWRpY2FsIEtpdAQIZXhpc3RTdHIJAJ0IAgUPZWNvbm9teUNvbnRyYWN0CQEOa2V5RXNXYXJlaG91c2UABAxleGlzdEFtb3VudHMDCQEJaXNEZWZpbmVkAQUIZXhpc3RTdHIJALUJAgkBBXZhbHVlAQUIZXhpc3RTdHICAV8FA25pbAQLZXhpc3RBbW91bnQDCQBmAgkAkAMBBQxleGlzdEFtb3VudHMAAAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDGV4aXN0QW1vdW50cwAAAAADCQBnAgAABQtleGlzdEFtb3VudAkAAgECOVRoZXJlIGFyZSBubyBNZWRpY2FsIEtpdHMgTDEgYXQgRW1lcmdlbmN5IFNlcnZpY2Ugc3RvcmFnZQQJbmV3SGVhbHRoCQBkAgUJb2xkSGVhbHRoCQCRAwIFCG1lZEtpdEhwAAAEBW5ld0VTCQC5CQIJAMwIAgkApAMBCQBlAgULZXhpc3RBbW91bnQAAQkA0QgCBQxleGlzdEFtb3VudHMAAAIBXwQGcmVjaXBlCQC1CQIJAJEDAgUQcHJvZHVjdGlvbk1hdHJpeAAAAgFfBAh0b3RhbE1hdAkBEmdldFJlY2lwZU1hdGVyaWFscwEFBnJlY2lwZQQJc2VsbFByaWNlCQBrAwkAaAIFCHRvdGFsTWF0BQpFU1NFTExDT0VGBRBSRVNPVVJDRVBSSUNFTUlOCQBoAgAKBQ5QUk9EVUNUUEtHU0laRQMJAQIhPQIIBQNwbXQGYW1vdW50BQlzZWxsUHJpY2UJAAIBCQCsAgICG1BheW1lbnQgYXR0YWNoZWQgc2hvdWxkIGJlIAkApAMBBQlzZWxsUHJpY2UEBnJlc3VsdAkBCGFzU3RyaW5nAQkA/AcEBQ9lY29ub215Q29udHJhY3QCD3VwZGF0ZUVzU3RvcmFnZQkAzAgCBQVuZXdFUwUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQt1c2R0QXNzZXRJZAUJc2VsbFByaWNlBQNuaWwJAJQKAgkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlrZXlIZWFsdGgFCW5ld0hlYWx0aAkAzAgCBQxwcm9sb2dBY3Rpb24FA25pbAgJARd1cGRhdGVEdWNrU3RhdHNJbnRlcm5hbAIFC2R1Y2tBc3NldElkBQh4cENhbGxFUwJfMQUGcmVzdWx0AWkBDnVwZGF0ZUJhY2twYWNrAgtkdWNrQXNzZXRJZAduZXdQYWNrAwkBAiE9AggFAWkGY2FsbGVyBQ9lY29ub215Q29udHJhY3QJAAIBAhFwZXJtaXNzaW9uIGRlbmllZAkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBQduZXdQYWNrBQNuaWwFB25ld1BhY2sBaQEIYnV5U0xhbmQABAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIcRXhhY3RseSBvbmUgcGF5bWVudCByZXF1aXJlZAQDcG10CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAADCQECIT0CCAUDcG10B2Fzc2V0SWQFC3VzZHRBc3NldElkCQACAQIaQWxsb3dlZCBVU0RUIHBheW1lbnQgb25seSEDCQECIT0CCAUDcG10BmFtb3VudAUHRVhQVVNEVAkAAgEJAKwCAgIbUGF5bWVudCBhdHRhY2hlZCBzaG91bGQgYmUgCQCkAwEFB0VYUFVTRFQEBnJlc3VsdAkBEmV4cGVkaXRpb25JbnRlcm5hbAIIBQFpBmNhbGxlcggFAWkNdHJhbnNhY3Rpb25JZAkAlAoCCQDNCAIJAM4IAgkAzQgCCAUGcmVzdWx0Al8xCQEOU2NyaXB0VHJhbnNmZXIDBQ9lY29ub215Q29udHJhY3QIBQNwbXQGYW1vdW50BQt1c2R0QXNzZXRJZAgJARZ1cGRhdGVBY2NTdGF0c0ludGVybmFsAgkApQgBCAUBaQZjYWxsZXIFCnhwTmV3U0xhbmQCXzEFDHByb2xvZ0FjdGlvbggIBQZyZXN1bHQCXzICXzEBaQEKZXhwZWRpdGlvbgIHbWVzc2FnZQNzaWcEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQGcmVzdWx0CQEQZXhwZWRpdGlvbkNvbW1vbgQIBQFpBmNhbGxlcggFAWkNdHJhbnNhY3Rpb25JZAUHbWVzc2FnZQUDc2lnBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkCQCUCgIJAM0IAgkAzggCCAUGcmVzdWx0Al8xCAkBF3VwZGF0ZUR1Y2tTdGF0c0ludGVybmFsAgULZHVja0Fzc2V0SWQFCnhwTmV3U0xhbmQCXzEFDHByb2xvZ0FjdGlvbgkAlAoCCAUGcmVzdWx0Al8yCAUGcmVzdWx0Al8zAWkBDHVwZ3JhZGVJbmZyYQELbGFuZEFzc2V0SWQEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQGcmVzdWx0CQENdXBJbmZyYUNvbW1vbgQGCAUBaQZjYWxsZXIAAAULbGFuZEFzc2V0SWQEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQkApQgBCAUBaQZjYWxsZXICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQJAJQKAgkAzggCCQDNCAIIBQZyZXN1bHQCXzEFDHByb2xvZ0FjdGlvbggJARd1cGRhdGVEdWNrU3RhdHNJbnRlcm5hbAIFC2R1Y2tBc3NldElkCQBrAwUOeHBVcGdyYWRlSW5mcmEIBQZyZXN1bHQCXzMFBU1VTFQ4Al8xCAUGcmVzdWx0Al8yAWkBEHVwZ3JhZGVJbmZyYVVzZHQBC2xhbmRBc3NldElkAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIRUGVybWlzc2lvbiBkZW5pZWQEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhxFeGFjdGx5IG9uZSBwYXltZW50IHJlcXVpcmVkBANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAMJAQIhPQIIBQNwbXQHYXNzZXRJZAULdXNkdEFzc2V0SWQJAAIBAhpBbGxvd2VkIFVTRFQgcGF5bWVudCBvbmx5IQQGcmVzdWx0CQENdXBJbmZyYUNvbW1vbgQHCAUBaQZjYWxsZXIIBQNwbXQGYW1vdW50BQtsYW5kQXNzZXRJZAkAlAoCCQDNCAIJAM0IAggFBnJlc3VsdAJfMQkBDlNjcmlwdFRyYW5zZmVyAwUPZWNvbm9teUNvbnRyYWN0CAUDcG10BmFtb3VudAULdXNkdEFzc2V0SWQFDHByb2xvZ0FjdGlvbggFBnJlc3VsdAJfMgFpARBhY3RpdmF0ZUFydGlmYWN0AgdhcnROYW1lDmxhbmRBc3NldElkT3B0BAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBGFkZHIJAKUIAQgFAWkGY2FsbGVyBAZyZXN1bHQEByRtYXRjaDAFB2FydE5hbWUDCQAAAgIHUFJFU0FMRQUHJG1hdGNoMAkBEmFjdGl2YXRlUHJlc2FsZUFydAIFBGFkZHIFDmxhbmRBc3NldElkT3B0AwkAAAICB09OQk9BUkQFByRtYXRjaDAJARJhY3RpdmF0ZU9uYm9hcmRBcnQBBQRhZGRyCQACAQIQVW5rbm93biBhcnRpZmFjdAkAzQgCBQZyZXN1bHQFDHByb2xvZ0FjdGlvbgFpAQptZXJnZUxhbmRzAQxsYW5kQXNzZXRJZHMEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQGcmVzdWx0CQELbWVyZ2VDb21tb24FBgkApQgBCAUBaQZjYWxsZXIAAAUMbGFuZEFzc2V0SWRzCAUBaQ10cmFuc2FjdGlvbklkCQCUCgIJAM4IAgkAzQgCCAUGcmVzdWx0Al8xBQxwcm9sb2dBY3Rpb24ICQEWdXBkYXRlQWNjU3RhdHNJbnRlcm5hbAIJAKUIAQgFAWkGY2FsbGVyBQd4cE1lcmdlAl8xCAUGcmVzdWx0Al8yAWkBDm1lcmdlTGFuZHNVc2R0AQxsYW5kQXNzZXRJZHMEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhxFeGFjdGx5IG9uZSBwYXltZW50IHJlcXVpcmVkBANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAMJAQIhPQIIBQNwbXQHYXNzZXRJZAULdXNkdEFzc2V0SWQJAAIBAhpBbGxvd2VkIFVTRFQgcGF5bWVudCBvbmx5IQQGcmVzdWx0CQELbWVyZ2VDb21tb24FBwkApQgBCAUBaQZjYWxsZXIIBQNwbXQGYW1vdW50BQxsYW5kQXNzZXRJZHMIBQFpDXRyYW5zYWN0aW9uSWQJAJQKAgkAzQgCCQDNCAIIBQZyZXN1bHQCXzEJAQ5TY3JpcHRUcmFuc2ZlcgMFD2Vjb25vbXlDb250cmFjdAgFA3BtdAZhbW91bnQFC3VzZHRBc3NldElkBQxwcm9sb2dBY3Rpb24IBQZyZXN1bHQCXzIBaQENY2FyZ29FeGNoYW5nZQIMY2FyZ29MaXN0U3RyC2xhbmRBc3NldElkBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQECmNhcmdvUGFydHMJALwJAgUMY2FyZ29MaXN0U3RyAgE6BARhZGRyCQClCAEIBQFpDG9yaWdpbkNhbGxlcgQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQtsYW5kQXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAMJAQEhAQkBCWlzRGVmaW5lZAEJAJ8IAQUHdGltZUtleQkAAgEJAKwCAggFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkBAVvd25lcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQtsYW5kQXNzZXRJZAkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDCQECIT0CBQVvd25lcgUEYWRkcgkAAgEJAKwCAgUKTEFORFBSRUZJWAINIGlzIG5vdCB5b3VycwQJbGFuZEluZGV4CQBpAgkBD251bVBpZWNlc0J5U2l6ZQEJAJEDAgkAtQkCCAUFYXNzZXQLZGVzY3JpcHRpb24CAV8FC3JlY0xhbmRTaXplBQVTU0laRQQKaW5mcmFMZXZlbAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEFC2xhbmRBc3NldElkAAAEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQLY3VyTG9jYXRpb24JAQt2YWx1ZU9yRWxzZQIJAKIIAQkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkBQ9ERUZBVUxUTE9DQVRJT04EA2xvYwkAtQkCCQEFdmFsdWUBBQtjdXJMb2NhdGlvbgIBXwMJAQIhPQIJAJEDAgUDbG9jBQpsb2NJZHhUeXBlAgFMCQACAQkArAICCQCsAgICFkR1Y2sgbG9jYXRpb24gdHlwZSBpcyAJAJEDAgUDbG9jBQpsb2NJZHhUeXBlAhEsIGJ1dCBzaG91bGQgYmUgTAMJAQIhPQIJAJEDAgUDbG9jBQhsb2NJZHhJZAULbGFuZEFzc2V0SWQJAAIBCQCsAgICG0R1Y2sgc2hvdWxkIGJlIG9uIHRoZSBsYW5kIAULbGFuZEFzc2V0SWQEBXdoS2V5CQESa2V5V2FyZWhvdXNlQnlMYW5kAQULbGFuZEFzc2V0SWQECWN1cnJlbnRXaAkBDGdldFdhcmVob3VzZQMFBXdoS2V5BQlsYW5kSW5kZXgFCmluZnJhTGV2ZWwEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BAZyZXN1bHQJAQltb3ZlU3R1ZmYDBQpjYXJnb1BhcnRzBQljdXJyZW50V2gFC2N1cnJlbnRQYWNrBARsb2Z0CQC1CQIJAJEDAgUJY3VycmVudFdoBQl3aElkeExPRlQCAV8EBWxvZnRPCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFC3ZvbE9jY3VwaWVkCAUGcmVzdWx0Al83BAVsb2Z0RgkAZQIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQd2b2xGcmVlCAUGcmVzdWx0Al83CQDMCAIJAQtTdHJpbmdFbnRyeQIFBWJwS2V5CQC6CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCAUGcmVzdWx0Al80CQDMCAIIBQZyZXN1bHQCXzUJAMwIAggFBnJlc3VsdAJfNgUDbmlsAgE6CQDMCAIJAQtTdHJpbmdFbnRyeQIFBXdoS2V5CQC6CQIJAMwIAgkAkQMCBQljdXJyZW50V2gFC3doSWR4TGV2ZWxzCQDMCAIIBQZyZXN1bHQCXzEJAMwIAggFBnJlc3VsdAJfMgkAzAgCCAUGcmVzdWx0Al8zCQDMCAIJALkJAgkAzAgCCQCRAwIFBGxvZnQFCXZvbExvY2tlZAkAzAgCCQCkAwEFBWxvZnRPCQDMCAIJAKQDAQUFbG9mdEYJAMwIAgkAkQMCBQRsb2Z0BQh2b2xUb3RhbAUDbmlsAgFfBQNuaWwCAToJAMwIAgUMcHJvbG9nQWN0aW9uBQNuaWwBaQENc2F2ZVdhcmVob3VzZQIFd2hTdHILbGFuZEFzc2V0SWQDCQECIT0CCAUBaQZjYWxsZXIFD2Vjb25vbXlDb250cmFjdAkAAgECDUFjY2VzcyBkZW5pZWQEBXdoS2V5CQESa2V5V2FyZWhvdXNlQnlMYW5kAQULbGFuZEFzc2V0SWQEAndoCQC8CQIFBXdoU3RyAgE6AwkBAiE9AgkAkAMBBQJ3aAAFCQACAQIwd2FyZWhvdXNlIHN0cmluZyBzaG91bGQgY29udGFpbiA0ICc6JyBzZXBhcmF0b3JzBAVsb2Z0TAkAkQMCCQC1CQIJAJEDAgUCd2gFCXdoSWR4TE9GVAIBXwUJdm9sTG9ja2VkBAVsb2Z0TwkBF2dldFdhcmVob3VzZU9jY3VwaWVkVm9sAQUCd2gEBWxvZnRUCQEXZ2V0V2FyZWhvdXNlVG90YWxWb2x1bWUBCQCRAwIFAndoBQt3aElkeExldmVscwQFbG9mdEYJAGUCCQBlAgUFbG9mdFQJAQ1wYXJzZUludFZhbHVlAQUFbG9mdEwFBWxvZnRPBAhuZXdXaFN0cgkAugkCCQDMCAIJAJEDAgUCd2gFC3doSWR4TGV2ZWxzCQDMCAIJAJEDAgUCd2gFCHdoSWR4UmVzCQDMCAIJAJEDAgUCd2gFCHdoSWR4TWF0CQDMCAIJAJEDAgUCd2gFCXdoSWR4UHJvZAkAzAgCCQC5CQIJAMwIAgUFbG9mdEwJAMwIAgkApAMBBQVsb2Z0TwkAzAgCCQCkAwEFBWxvZnRGCQDMCAIJAKQDAQUFbG9mdFQFA25pbAIBXwUDbmlsAgE6CQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgUFd2hLZXkFCG5ld1doU3RyBQNuaWwFCG5ld1doU3RyAWkBEmZpeFdhcmVob3VzZUZvcm1hdAELbGFuZEFzc2V0SWQDCQECIT0CCAUBaQZjYWxsZXIFDHJlc3RDb250cmFjdAkAAgECDUFjY2VzcyBkZW5pZWQEBXdoS2V5CQESa2V5V2FyZWhvdXNlQnlMYW5kAQULbGFuZEFzc2V0SWQEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQULbGFuZEFzc2V0SWQECWxhbmRJbmRleAkAaQIJAQ9udW1QaWVjZXNCeVNpemUBCQCRAwIJALUJAggFBWFzc2V0C2Rlc2NyaXB0aW9uAgFfBQtyZWNMYW5kU2l6ZQUFU1NJWkUECmluZnJhTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAAABAJ3aAkBDGdldFdhcmVob3VzZQMFBXdoS2V5BQlsYW5kSW5kZXgFCmluZnJhTGV2ZWwEBWxvZnRMCQEFYXNJbnQBCQD8BwQFD2Vjb25vbXlDb250cmFjdAIacmVjYWxjTG9ja2VkVm9sdW1lUkVBRE9OTFkJAMwIAgULbGFuZEFzc2V0SWQJAMwIAgUCd2gFA25pbAUDbmlsBAVsb2Z0TwkBF2dldFdhcmVob3VzZU9jY3VwaWVkVm9sAQUCd2gEBWxvZnRUCQEXZ2V0V2FyZWhvdXNlVG90YWxWb2x1bWUBCQCRAwIFAndoBQt3aElkeExldmVscwQFbG9mdEYJAGUCCQBlAgUFbG9mdFQFBWxvZnRMBQVsb2Z0TwQIbmV3V2hTdHIJALoJAgkAzAgCCQCRAwIFAndoBQt3aElkeExldmVscwkAzAgCCQCRAwIFAndoBQh3aElkeFJlcwkAzAgCCQCRAwIFAndoBQh3aElkeE1hdAkAzAgCCQCRAwIFAndoBQl3aElkeFByb2QJAMwIAgkAuQkCCQDMCAIJAKQDAQUFbG9mdEwJAMwIAgkApAMBBQVsb2Z0TwkAzAgCCQCkAwEFBWxvZnRGCQDMCAIJAKQDAQUFbG9mdFQFA25pbAIBXwUDbmlsAgE6CQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgUFd2hLZXkFCG5ld1doU3RyBQNuaWwFCG5ld1doU3RyAWkBD2ZpeFN0YWtlZFBpZWNlcwEHYWRkcmVzcwMJAQIhPQIIBQFpBmNhbGxlcgUMcmVzdENvbnRyYWN0CQACAQINQWNjZXNzIGRlbmllZAQMc3Rha2VkUGllY2VzAwkAAAIFB2FkZHJlc3MCAAAABAhsYW5kc1N0cgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARVrZXlTdGFrZWRMYW5kc0J5T3duZXIBBQdhZGRyZXNzBAVsYW5kcwMJAQlpc0RlZmluZWQBBQhsYW5kc1N0cgkAvQkCCQEFdmFsdWUBBQhsYW5kc1N0cgIBXwUDbmlsCgEHb25lTGFuZAIDYWNjC2xhbmRBc3NldElkBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFC2xhbmRBc3NldElkBAhs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AAIBCQCsAgICHk5hbWUgc2hvdWxkIG5vdCBjb250YWluICdfXyc6IAUKY3VzdG9tTmFtZQMJAGYCCQCxAgEFCmN1c3RvbU5hbWUFCk1BWE5BTUVMRU4JAAIBCQCsAgICGU5hbWUgdG9vIGxvbmcsIG1heExlbmd0aD0JAKQDAQUKTUFYTkFNRUxFTgQEYWRkcgkApQgBCAUBaQxvcmlnaW5DYWxsZXIEB2FjdGlvbnMEByRtYXRjaDAFBHR5cGUDCQAAAgIHQUNDT1VOVAUHJG1hdGNoMAQKcmV2ZXJzZUtleQkBFmtleUN1c3RvbU5hbWVUb0FkZHJlc3MBBQpjdXN0b21OYW1lBAluYW1lT3duZXIJAKIIAQUKcmV2ZXJzZUtleQMJAQlpc0RlZmluZWQBBQluYW1lT3duZXIJAAIBCQCsAgICGU5hbWUgYWxyZWFkeSByZWdpc3RlcmVkOiAFCmN1c3RvbU5hbWUEDWFkZHJUb05hbWVLZXkJARZrZXlBZGRyZXNzVG9DdXN0b21OYW1lAQUEYWRkcgQHb2xkTmFtZQkAoggBBQ1hZGRyVG9OYW1lS2V5BAdmcmVlT2xkAwkBCWlzRGVmaW5lZAEFB29sZE5hbWUJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBFmtleUN1c3RvbU5hbWVUb0FkZHJlc3MBCQEFdmFsdWUBBQdvbGROYW1lBQNuaWwFA25pbAkAzggCCQDNCAIJAM0IAgUHZnJlZU9sZAkBC1N0cmluZ0VudHJ5AgUNYWRkclRvTmFtZUtleQUKY3VzdG9tTmFtZQkBC1N0cmluZ0VudHJ5AgUKcmV2ZXJzZUtleQUEYWRkcggJARZ1cGRhdGVBY2NTdGF0c0ludGVybmFsAgUEYWRkcgUMeHBDdXN0b21OYW1lAl8xAwkAAAICBExBTkQFByRtYXRjaDAEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQUHYXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQdhc3NldElkAwkBASEBCQEJaXNEZWZpbmVkAQkAnwgBBQd0aW1lS2V5CQACAQkArAICCAUFYXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQEBW93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFB2Fzc2V0SWQJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwkBAiE9AgUFb3duZXIFBGFkZHIJAAIBCQCsAgIFCkxBTkRQUkVGSVgCDSBpcyBub3QgeW91cnMECnJldmVyc2VLZXkJARprZXlMYW5kQ3VzdG9tTmFtZVRvQXNzZXRJZAEFCmN1c3RvbU5hbWUECW5hbWVPd25lcgkAoggBBQpyZXZlcnNlS2V5AwkBCWlzRGVmaW5lZAEFCW5hbWVPd25lcgkAAgEJAKwCAgIZTmFtZSBhbHJlYWR5IHJlZ2lzdGVyZWQ6IAUKY3VzdG9tTmFtZQQOYXNzZXRUb05hbWVLZXkJARprZXlMYW5kQXNzZXRJZFRvQ3VzdG9tTmFtZQEFB2Fzc2V0SWQEB29sZE5hbWUJAKIIAQUOYXNzZXRUb05hbWVLZXkEB2ZyZWVPbGQDCQEJaXNEZWZpbmVkAQUHb2xkTmFtZQkAzAgCCQELRGVsZXRlRW50cnkBCQEaa2V5TGFuZEN1c3RvbU5hbWVUb0Fzc2V0SWQBCQEFdmFsdWUBBQdvbGROYW1lBQNuaWwFA25pbAkAzggCCQDNCAIJAM0IAgUHZnJlZU9sZAkBC1N0cmluZ0VudHJ5AgUOYXNzZXRUb05hbWVLZXkFCmN1c3RvbU5hbWUJAQtTdHJpbmdFbnRyeQIFCnJldmVyc2VLZXkFB2Fzc2V0SWQICQEWdXBkYXRlQWNjU3RhdHNJbnRlcm5hbAIFBGFkZHIFDHhwQ3VzdG9tTmFtZQJfMQMJAAACAgREVUNLBQckbWF0Y2gwBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFB2Fzc2V0SWQEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQUHYXNzZXRJZAMDCQEBIQEJAQlpc0RlZmluZWQBCQCfCAEFB3RpbWVLZXkGCQEBIQEJAQlpc0RlZmluZWQBCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFBGFkZHIJAAIBCQCsAgIIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAQFb3duZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEQa2V5RHVja0lkVG9Pd25lcgEFB2Fzc2V0SWQJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwkBAiE9AgUFb3duZXIFBGFkZHIJAAIBCQCsAgIFCkRVQ0tQUkVGSVgCDSBpcyBub3QgeW91cnMECnJldmVyc2VLZXkJARprZXlEdWNrQ3VzdG9tTmFtZVRvQXNzZXRJZAEFCmN1c3RvbU5hbWUECW5hbWVPd25lcgkAoggBBQpyZXZlcnNlS2V5AwkBCWlzRGVmaW5lZAEFCW5hbWVPd25lcgkAAgEJAKwCAgIZTmFtZSBhbHJlYWR5IHJlZ2lzdGVyZWQ6IAUKY3VzdG9tTmFtZQQOYXNzZXRUb05hbWVLZXkJARprZXlEdWNrQXNzZXRJZFRvQ3VzdG9tTmFtZQEFB2Fzc2V0SWQEB29sZE5hbWUJAKIIAQUOYXNzZXRUb05hbWVLZXkEB2ZyZWVPbGQDCQEJaXNEZWZpbmVkAQUHb2xkTmFtZQkAzAgCCQELRGVsZXRlRW50cnkBCQEaa2V5RHVja0N1c3RvbU5hbWVUb0Fzc2V0SWQBCQEFdmFsdWUBBQdvbGROYW1lBQNuaWwFA25pbAkAzggCCQDNCAIJAM0IAgUHZnJlZU9sZAkBC1N0cmluZ0VudHJ5AgUOYXNzZXRUb05hbWVLZXkFCmN1c3RvbU5hbWUJAQtTdHJpbmdFbnRyeQIFCnJldmVyc2VLZXkFB2Fzc2V0SWQICQEXdXBkYXRlRHVja1N0YXRzSW50ZXJuYWwCBQdhc3NldElkBQx4cEN1c3RvbU5hbWUCXzEJAAIBAhNVbmtub3duIGVudGl0eSB0eXBlCQCUCgIJAM0IAgkAzQgCBQdhY3Rpb25zCQEOU2NyaXB0VHJhbnNmZXIDBQ9lY29ub215Q29udHJhY3QIBQNwbXQGYW1vdW50BQt1c2R0QXNzZXRJZAUMcHJvbG9nQWN0aW9uAAABaQEMc2V0UmVmZXJyYWxzAglvbGRQbGF5ZXIJbmV3UGxheWVyAwkBAiE9AggFAWkPY2FsbGVyUHVibGljS2V5BQNwdWIJAAIBAhFQZXJtaXNzaW9uIGRlbmllZAQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkAwkBASEBCQEJaXNEZWZpbmVkAQkApggBBQlvbGRQbGF5ZXIJAAIBCQCsAgICEUludmFsaWQgYWRkcmVzczogBQlvbGRQbGF5ZXIDCQEBIQEJAQlpc0RlZmluZWQBCQCmCAEFCW5ld1BsYXllcgkAAgEJAKwCAgIRSW52YWxpZCBhZGRyZXNzOiAFCW5ld1BsYXllcgQHb2xkc0tleQkBCWtleU9sZGllcwAEBG9sZHMJAKIIAQUHb2xkc0tleQQGb2xkaWVzAwkBCWlzRGVmaW5lZAEFBG9sZHMJALwJAgkBBXZhbHVlAQUEb2xkcwIBXwUDbmlsAwkBD2NvbnRhaW5zRWxlbWVudAIFBm9sZGllcwUJbmV3UGxheWVyCQACAQkArAICBQluZXdQbGF5ZXICJiBpcyBub3QgbmV3YmllIChhbHJlYWR5IGhhcyByZWZlcnJhbHMpBAhyZWZCeUtleQkBD2tleUFkZHJlc3NSZWZCeQEFCW5ld1BsYXllcgQFcmVmQnkJAKIIAQUIcmVmQnlLZXkDAwkBCWlzRGVmaW5lZAEFBXJlZkJ5CQEJaXNEZWZpbmVkAQkApggBCQEFdmFsdWUBBQVyZWZCeQcJAAIBCQCsAgIJAKwCAgUJbmV3UGxheWVyAhQgYWxyZWFkeSBoYXMgcmVmQnk6IAkBBXZhbHVlAQUFcmVmQnkEB3JlZnNLZXkJARNrZXlBZGRyZXNzUmVmZXJyYWxzAQUJb2xkUGxheWVyBARyZWZzCQCiCAEFB3JlZnNLZXkECXJlZnNBcnJheQMJAQlpc0RlZmluZWQBBQRyZWZzCQC8CQIJAQV2YWx1ZQEFBHJlZnMCAV8FA25pbAMJAQ9jb250YWluc0VsZW1lbnQCBQlyZWZzQXJyYXkFCW5ld1BsYXllcgkAAgEJAKwCAgkArAICCQCsAgIFCW9sZFBsYXllcgISIGFscmVhZHkgY29udGFpbnMgBQluZXdQbGF5ZXICESB3aXRoaW4gcmVmZXJyYWxzBAduZXdSZWZzCQC6CQIJAM0IAgUJcmVmc0FycmF5BQluZXdQbGF5ZXICAV8EB25ld09sZHMDCQEPY29udGFpbnNFbGVtZW50AgUGb2xkaWVzBQlvbGRQbGF5ZXIJAQV2YWx1ZQEFBG9sZHMJALoJAgkAzQgCBQZvbGRpZXMFCW9sZFBsYXllcgIBXwkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIFCHJlZkJ5S2V5BQlvbGRQbGF5ZXIJAMwIAgkBC1N0cmluZ0VudHJ5AgUHcmVmc0tleQUHbmV3UmVmcwkAzAgCCQELU3RyaW5nRW50cnkCBQdvbGRzS2V5BQduZXdPbGRzCQDMCAIFDHByb2xvZ0FjdGlvbgUDbmlsAAABaQEQZGlzdHJpYnV0ZVBvaW50cwUIc3RyZW5ndGgIYWNjdXJhY3kJaW50ZWxsZWN0CWVuZHVyYW5jZQlkZXh0ZXJpdHkEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQEYWRkcgkApQgBCAUBaQxvcmlnaW5DYWxsZXIEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQKZnJlZUtleUFjYwkBEWtleVVzZXJGcmVlUG9pbnRzAQUEYWRkcgQNZnJlZVBvaW50c0FjYwkBC3ZhbHVlT3JFbHNlAgkAmggCBQ9zdGFraW5nQ29udHJhY3QFCmZyZWVLZXlBY2MAAAQLZnJlZUtleUR1Y2sJARFrZXlEdWNrRnJlZVBvaW50cwEFC2R1Y2tBc3NldElkBA5mcmVlUG9pbnRzRHVjawkBC3ZhbHVlT3JFbHNlAgkAmggCBQ9zdGFraW5nQ29udHJhY3QFC2ZyZWVLZXlEdWNrAAAEB3N1bUZyZWUJAGQCBQ1mcmVlUG9pbnRzQWNjBQ5mcmVlUG9pbnRzRHVjawQPc3VtVG9EaXN0cmlidXRlCQBkAgkAZAIJAGQCCQBkAgUIc3RyZW5ndGgFCGFjY3VyYWN5BQlpbnRlbGxlY3QFCWVuZHVyYW5jZQUJZGV4dGVyaXR5AwkAZgIFD3N1bVRvRGlzdHJpYnV0ZQUHc3VtRnJlZQkAAgEJAKwCAgkArAICAg9UaGVyZSBhcmUgb25seSAJAKQDAQUHc3VtRnJlZQIaIGZyZWUgcG9pbnRzIHRvIGRpc3RyaWJ1dGUECGNoYXJzS2V5CQEMa2V5RHVja0NoYXJzAQULZHVja0Fzc2V0SWQEBWNoYXJzCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0BQhjaGFyc0tleQIJMF8wXzBfMF8wAgFfBAZuZXdBY2MJAGUCBQ1mcmVlUG9pbnRzQWNjBQ9zdW1Ub0Rpc3RyaWJ1dGUJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUKZnJlZUtleUFjYwMJAGYCAAAFBm5ld0FjYwAABQZuZXdBY2MJAMwIAgkBDEludGVnZXJFbnRyeQIFC2ZyZWVLZXlEdWNrAwkAZgIAAAUGbmV3QWNjCQBkAgUOZnJlZVBvaW50c0R1Y2sFBm5ld0FjYwUOZnJlZVBvaW50c0R1Y2sJAMwIAgkBC1N0cmluZ0VudHJ5AgUIY2hhcnNLZXkJALkJAgkAzAgCCQCkAwEJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFY2hhcnMFDGNoYXJTdHJlbmd0aAUIc3RyZW5ndGgJAMwIAgkApAMBCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBWNoYXJzBQxjaGFyQWNjdXJhY3kFCGFjY3VyYWN5CQDMCAIJAKQDAQkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVjaGFycwUNY2hhckludGVsbGVjdAUJaW50ZWxsZWN0CQDMCAIJAKQDAQkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVjaGFycwUNY2hhckVuZHVyYW5jZQUJZW5kdXJhbmNlCQDMCAIJAKQDAQkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVjaGFycwUNY2hhckRleHRlcml0eQUJZGV4dGVyaXR5BQNuaWwCAV8JAMwIAgUMcHJvbG9nQWN0aW9uBQNuaWwAAAFpARxzcGxpdEJ5R2xvYmFsV2VpZ2h0c1JFQURPTkxZAQZhbW91bnQJAJQKAgUDbmlsCQESZ2V0TmVlZGVkTWF0ZXJpYWxzAQUGYW1vdW50AWkBJHNwbGl0QnlHbG9iYWxBbmRMb2NhbFdlaWdodHNSRUFET05MWQMJbWF0QW1vdW50CXJlc0Ftb3VudAh0ZXJyYWlucwQNdGVycmFpbkNvdW50cwkBDWNvdW50VGVycmFpbnMBBQh0ZXJyYWlucwkAlAoCBQNuaWwJAJQKAgkBEmdldE5lZWRlZE1hdGVyaWFscwEFCW1hdEFtb3VudAkBE2Rpc3RyaWJ1dGVCeVdlaWdodHMCBQlyZXNBbW91bnQFDXRlcnJhaW5Db3VudHMBaQETZ2V0QmFja3BhY2tSRUFET05MWQELZHVja0Fzc2V0SWQJAJQKAgUDbmlsCQC5CQIJAQtnZXRCYWNrcGFjawEJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkAgE6AWkBFGdldFdhcmVob3VzZVJFQURPTkxZAQtsYW5kQXNzZXRJZAQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQtsYW5kQXNzZXRJZAQJbGFuZEluZGV4CQBpAgkBD251bVBpZWNlc0J5U2l6ZQEJAJEDAgkAtQkCCAUFYXNzZXQLZGVzY3JpcHRpb24CAV8FC3JlY0xhbmRTaXplBQVTU0laRQQKaW5mcmFMZXZlbAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEFC2xhbmRBc3NldElkAAAJAJQKAgUDbmlsCQC6CQIJAQxnZXRXYXJlaG91c2UDCQESa2V5V2FyZWhvdXNlQnlMYW5kAQULbGFuZEFzc2V0SWQFCWxhbmRJbmRleAUKaW5mcmFMZXZlbAIBOgFpAQpzYXZlTGFzdFR4AAMDCQECIT0CCAUBaQZjYWxsZXIFC3dsZ0NvbnRyYWN0CQECIT0CCAUBaQZjYWxsZXIFD2Vjb25vbXlDb250cmFjdAcJAAIBAg1BY2Nlc3MgZGVuaWVkCQCUCgIJAMwIAgkBBnByb2xvZwEFAWkFA25pbAAqAWkBD3VwZGF0ZUR1Y2tTdGF0cwILZHVja0Fzc2V0SWQHZGVsdGFYUAMJAQIhPQIIBQFpBmNhbGxlcgUPZWNvbm9teUNvbnRyYWN0CQACAQINQWNjZXNzIGRlbmllZAkBF3VwZGF0ZUR1Y2tTdGF0c0ludGVybmFsAgULZHVja0Fzc2V0SWQFB2RlbHRhWFABaQEOdXBkYXRlQWNjU3RhdHMCBGFkZHIHZGVsdGFYUAMJAQIhPQIIBQFpBmNhbGxlcgUPZWNvbm9teUNvbnRyYWN0CQACAQINQWNjZXNzIGRlbmllZAkBFnVwZGF0ZUFjY1N0YXRzSW50ZXJuYWwCBQRhZGRyBQdkZWx0YVhQAWkBCWVxdWlwRHVjawEJZXF1aXBtZW50BAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBGFkZHIJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFBGFkZHICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQEBWVxS2V5CQEQa2V5RHVja0VxdWlwbWVudAEFC2R1Y2tBc3NldElkBAtjdXJyZW50U2VncwkAtQkCCQELdmFsdWVPckVsc2UCCQCiCAEFBWVxS2V5AhcsOyxfLDssXyw7LF8sOyxfLDssXyw7LAIBXwQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkEBW5ld0VxCQC1CQIFCWVxdWlwbWVudAIBXwMJAQIhPQIJAJADAQUFbmV3RXEFC05VTVNFR01FTlRTCQACAQIWV3JvbmcgZXF1aXBtZW50IHN0cmluZwQGYnBQcm9kCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QEBXBMaXN0AwkAAAIFBmJwUHJvZAIABQNuaWwJALUJAgUGYnBQcm9kAgFfBAh0ZW1wUHJvZAkBBWRyZXNzAwULY3VycmVudFNlZ3MFBXBMaXN0BgQHbmV3UHJvZAkBBWRyZXNzAwUFbmV3RXEFCHRlbXBQcm9kBwkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIFBWVxS2V5BQllcXVpcG1lbnQJAMwIAgkBC1N0cmluZ0VudHJ5AgUFYnBLZXkJALoJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0CQDMCAIJALkJAgUHbmV3UHJvZAIBXwUDbmlsAgE6CQDMCAIFDHByb2xvZ0FjdGlvbgUDbmlsAAAAsA4g6w==", "height": 2673028, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: GJdS8zUHF8CeiHdC2efy44VeWkNejZaHty4K7ZxowFkg Next: E9w2WP9s2HdvRQ2j5JGWRysKWfVfj82kg2rgmt4qt6Te Diff:
OldNewDifferences
116116
117117 let ae = 10
118118
119-let af = 0
120-
121-let ag = 1
122-
123-let ah = 2
124-
125-let ai = 3
126-
127-let aj = 4
128-
129-let ak = 0
130-
131-let al = 1
132-
133-let am = 2
134-
135-let an = 3
136-
137-let ao = 0
138-
139-let ap = 1
140-
141-let aq = 2
142-
143-let ar = 3
144-
145-func as (b) = ("lastTxIdByUser_" + b)
146-
147-
148-func at (au) = ("nftOwner_" + au)
149-
150-
151-func av (au) = ("landCustomNameByAssetId_" + au)
152-
153-
154-func aw (au) = ("stakedTime_" + au)
155-
156-
157-func ax (au) = ("infraLevel_" + au)
158-
159-
160-func ay (az,au) = makeString(["landArtStatus", az, au], "_")
161-
162-
163-func aA (aB,au,aC) = ((((("stakedTimeByTypeAssetIdAndOwner_" + aB) + "_") + au) + "_") + aC)
164-
165-
166-func aD (aE) = ("wareHouse_" + aE)
167-
168-
169-func aF (au) = ("duckCustomNameByAssetId_" + au)
170-
171-
172-func aG (b) = ("accountCustomNameByAddr_" + b)
173-
174-
175-func aH (b) = ("accRefBy_" + b)
176-
177-
178-func aI (p) = ("onboardArtActivatedOnDuck_" + p)
179-
180-
181-func aJ (b) = ("onboardArtActivatedDuckBy_" + b)
182-
183-
184-func aK (b) = ("accReferrals_" + b)
185-
186-
187-func aL (au) = ("duckOwner_" + au)
188-
189-
190-func aM (aC) = ("stakedDuckByOwner_" + aC)
191-
192-
193-func aN (p) = ("backPack_" + p)
194-
195-
196-func aO (p) = ("duckLocation_" + p)
197-
198-
199-func aP (p) = ("duckHealth_" + p)
200-
201-
202-func aQ () = "contractsBlocked"
203-
204-
205-func aR (aS) = ("%s%s__userGwlReleaseTime__" + aS)
206-
207-
208-func aT () = "emergencyWarehouseProducts"
209-
210-
211-let aU = 1
212-
213-let aV = 2
214-
215-func aW (aX) = (parseIntValue(aX[ad]) * ab)
216-
217-
218-let aY = true
219-
220-let aZ = take(drop(this.bytes, 1), 1)
221-
222-let ba = {
223- let bb = aZ
224- if ((base58'2W' == bb))
119+let af = 10
120+
121+let ag = 0
122+
123+let ah = 1
124+
125+let ai = 2
126+
127+let aj = 3
128+
129+let ak = 4
130+
131+let al = 0
132+
133+let am = 1
134+
135+let an = 2
136+
137+let ao = 3
138+
139+let ap = 0
140+
141+let aq = 1
142+
143+let ar = 2
144+
145+let as = 3
146+
147+func at (b) = ("lastTxIdByUser_" + b)
148+
149+
150+func au (av) = ("nftOwner_" + av)
151+
152+
153+func aw (av) = ("landCustomNameByAssetId_" + av)
154+
155+
156+func ax (av) = ("stakedTime_" + av)
157+
158+
159+func ay (av) = ("infraLevel_" + av)
160+
161+
162+func az (aA,av) = makeString(["landArtStatus", aA, av], "_")
163+
164+
165+func aB (aC,av,aD) = ((((("stakedTimeByTypeAssetIdAndOwner_" + aC) + "_") + av) + "_") + aD)
166+
167+
168+func aE (aF) = ("wareHouse_" + aF)
169+
170+
171+func aG (av) = ("duckCustomNameByAssetId_" + av)
172+
173+
174+func aH (b) = ("accountCustomNameByAddr_" + b)
175+
176+
177+func aI (b) = ("accRefBy_" + b)
178+
179+
180+func aJ (p) = ("onboardArtActivatedOnDuck_" + p)
181+
182+
183+func aK (b) = ("onboardArtActivatedDuckBy_" + b)
184+
185+
186+func aL (b) = ("accReferrals_" + b)
187+
188+
189+func aM (av) = ("duckOwner_" + av)
190+
191+
192+func aN (aD) = ("stakedDuckByOwner_" + aD)
193+
194+
195+func aO (p) = ("backPack_" + p)
196+
197+
198+func aP (p) = ("duckLocation_" + p)
199+
200+
201+func aQ (p) = ("duckHealth_" + p)
202+
203+
204+func aR () = "contractsBlocked"
205+
206+
207+func aS (aT) = ("%s%s__userGwlReleaseTime__" + aT)
208+
209+
210+func aU () = "emergencyWarehouseProducts"
211+
212+
213+let aV = 1
214+
215+let aW = 2
216+
217+func aX (aY) = (parseIntValue(aY[ad]) * ab)
218+
219+
220+let aZ = true
221+
222+let ba = take(drop(this.bytes, 1), 1)
223+
224+let bb = {
225+ let bc = ba
226+ if ((base58'2W' == bc))
225227 then base58'9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi'
226- else if ((base58'2T' == bb))
228+ else if ((base58'2T' == bc))
227229 then base58'6mWwf9mZBjVgkC54idpyaZLQfAosD914wT8fGf2iiY63'
228230 else throw("Unknown chain")
229231 }
230232
231-let bc = {
232- let bb = aZ
233- if ((base58'2W' == bb))
233+let bd = {
234+ let bc = ba
235+ if ((base58'2W' == bc))
234236 then "3PQCuvFbvh4LkPUnrnU1z3jnbA1p9m3WNhv"
235- else if ((base58'2T' == bb))
237+ else if ((base58'2T' == bc))
236238 then "3MumkGGztCKAXpWDqxkddofqXSUbqQkvSJy"
237239 else throw("Unknown chain")
238240 }
239241
240-let bd = {
241- let bb = aZ
242- if ((base58'2W' == bb))
242+let be = {
243+ let bc = ba
244+ if ((base58'2W' == bc))
243245 then 10000000000
244- else if ((base58'2T' == bb))
246+ else if ((base58'2T' == bc))
245247 then 100000000
246248 else throw("Unknown chain")
247249 }
248250
249-let be = {
250- let bb = aZ
251- if ((base58'2W' == bb))
251+let bf = {
252+ let bc = ba
253+ if ((base58'2W' == bc))
252254 then 600000
253- else if ((base58'2T' == bb))
255+ else if ((base58'2T' == bc))
254256 then 60000
255257 else throw("Unknown chain")
256258 }
257259
258-let bf = "__"
259-
260-let bg = 1000000
261-
262-let bh = 100000000
263-
264-let bi = 25
265-
266-let bj = 100
267-
268-let bk = 225
269-
270-let bl = 400
271-
272-let bm = 625
273-
274-func bn (bo,bp) = valueOrErrorMessage(getString(bo, bp), makeString(["mandatory ", toString(bo), ".", bp, " is not defined"], ""))
275-
276-
277-let bq = 1
278-
279-let br = 2
280-
281-let bs = 3
282-
283-let bt = 4
284-
285-func bu () = "%s__restConfig"
286-
287-
288-func bv () = "%s__restAddr"
289-
290-
291-func bw (bx) = split_4C(bn(bx, bu()), bf)
292-
293-
294-func by (bz,bA) = valueOrErrorMessage(addressFromString(bz[bA]), ("Rest cfg doesn't contain address at index " + toString(bA)))
295-
296-
297-let bB = addressFromStringValue(valueOrElse(getString(this, bv()), bc))
298-
299-let bz = bw(bB)
300-
301-let bC = by(bz, bq)
302-
303-let bD = by(bz, br)
304-
305-let bE = by(bz, bs)
306-
307-let bF = by(bz, bt)
308-
309-let bG = 0
310-
311-let bH = 1
312-
313-let bI = 2
314-
315-let bJ = 3
316-
317-func bK () = "resTypesProportions"
318-
319-
320-func bL (aC) = ("stakedLandsByOwner_" + aC)
321-
322-
323-func bM (aC) = ("stakedPiecesByOwner_" + aC)
324-
325-
326-func bN (bO) = {
327- let bb = bO
328- if ($isInstanceOf(bb, "String"))
260+let bg = "__"
261+
262+let bh = 1000000
263+
264+let bi = 100000000
265+
266+let bj = 25
267+
268+let bk = 100
269+
270+let bl = 225
271+
272+let bm = 400
273+
274+let bn = 625
275+
276+func bo (bp,bq) = valueOrErrorMessage(getString(bp, bq), makeString(["mandatory ", toString(bp), ".", bq, " is not defined"], ""))
277+
278+
279+let br = 1
280+
281+let bs = 2
282+
283+let bt = 3
284+
285+let bu = 4
286+
287+func bv () = "%s__restConfig"
288+
289+
290+func bw () = "%s__restAddr"
291+
292+
293+func bx (by) = split_4C(bo(by, bv()), bg)
294+
295+
296+func bz (bA,bB) = valueOrErrorMessage(addressFromString(bA[bB]), ("Rest cfg doesn't contain address at index " + toString(bB)))
297+
298+
299+let bC = addressFromStringValue(valueOrElse(getString(this, bw()), bd))
300+
301+let bA = bx(bC)
302+
303+let bD = bz(bA, br)
304+
305+let bE = bz(bA, bs)
306+
307+let bF = bz(bA, bt)
308+
309+let bG = bz(bA, bu)
310+
311+let bH = 0
312+
313+let bI = 1
314+
315+let bJ = 2
316+
317+let bK = 3
318+
319+func bL () = "resTypesProportions"
320+
321+
322+func bM (aD) = ("stakedLandsByOwner_" + aD)
323+
324+
325+func bN (aD) = ("stakedPiecesByOwner_" + aD)
326+
327+
328+func bO (bP) = {
329+ let bc = bP
330+ if ($isInstanceOf(bc, "String"))
329331 then {
330- let bP = bb
331- bP
332+ let bQ = bc
333+ bQ
332334 }
333335 else throw("fail to cast into String")
334336 }
335337
336338
337-func bQ (bO) = {
338- let bb = bO
339- if ($isInstanceOf(bb, "Int"))
339+func bR (bP) = {
340+ let bc = bP
341+ if ($isInstanceOf(bc, "Int"))
340342 then {
341- let bR = bb
342- bR
343+ let bS = bc
344+ bS
343345 }
344346 else throw("fail to cast into Int")
345347 }
346348
347349
348-func bS (bT) = {
349- let bb = bT
350- if (("S" == bb))
351- then bi
352- else if (("M" == bb))
353- then bj
354- else if (("L" == bb))
355- then bk
356- else if (("XL" == bb))
357- then bl
358- else if (("XXL" == bb))
359- then bm
350+func bT (bU) = {
351+ let bc = bU
352+ if (("S" == bc))
353+ then bj
354+ else if (("M" == bc))
355+ then bk
356+ else if (("L" == bc))
357+ then bl
358+ else if (("XL" == bc))
359+ then bm
360+ else if (("XXL" == bc))
361+ then bn
360362 else throw("Unknown land size")
361363 }
362364
363365
364-let bU = {
365- let bb = aZ
366- if ((base58'2W' == bb))
366+let bV = {
367+ let bc = ba
368+ if ((base58'2W' == bc))
367369 then addressFromStringValue("3PEktVux2RhchSN63DsDo4b4mz4QqzKSeDv")
368- else if ((base58'2T' == bb))
370+ else if ((base58'2T' == bc))
369371 then this
370372 else throw("Unknown chain")
371373 }
372374
373-let bV = {
374- let bb = aZ
375- if ((base58'2W' == bb))
375+let bW = {
376+ let bc = ba
377+ if ((base58'2W' == bc))
376378 then addressFromStringValue("3PDVuU45H7Eh5dmtNbnRNRStGwULA7NY6Hb")
377- else if ((base58'2T' == bb))
379+ else if ((base58'2T' == bc))
378380 then this
379381 else throw("Unknown chain")
380382 }
381383
382-let bW = base58'6LfPuKJjLgekmncBhMg2LZyMTNVzZBccXR28ySXm9uXD'
383-
384-let bX = [30, 60, 120]
385-
386-let bY = 300000
387-
388-let bZ = 5000000
389-
390-let ca = 50
391-
392-let cb = 10000000
393-
394-let cc = {
395- let bb = aZ
396- if ((base58'2W' == bb))
384+let bX = base58'6LfPuKJjLgekmncBhMg2LZyMTNVzZBccXR28ySXm9uXD'
385+
386+let bY = [30, 60, 120]
387+
388+let bZ = 300000
389+
390+let ca = 5000000
391+
392+let cb = 50
393+
394+let cc = 10000000
395+
396+let cd = {
397+ let bc = ba
398+ if ((base58'2W' == bc))
397399 then 252289527462
398- else if ((base58'2T' == bb))
400+ else if ((base58'2T' == bc))
399401 then 2522895274
400402 else throw("Unknown chain")
401403 }
402404
403-let cd = {
404- let bb = aZ
405- if ((base58'2W' == bb))
405+let ce = {
406+ let bc = ba
407+ if ((base58'2W' == bc))
406408 then 250000000
407- else if ((base58'2T' == bb))
409+ else if ((base58'2T' == bc))
408410 then 250000000
409411 else throw("Unknown chain")
410412 }
411413
412-let ce = toBigInt(5)
413-
414-let cf = toBigInt(20)
415-
416-let cg = toBigInt((20 * 20))
417-
418-let ch = toBigInt(((20 * 20) * 20))
419-
420-let ci = toBigInt((((20 * 20) * 20) * 20))
421-
422-let cj = toBigInt(((((20 * 20) * 20) * 20) * 20))
423-
424-let ck = 500
425-
426-func cl () = "nextLandNum"
427-
428-
429-func cm (cn) = ("landToAsset_" + cn)
430-
431-
432-func co (cp) = ("landByCustomName_" + cp)
433-
434-
435-func cq (au,aC) = ((("infraLevelByAssetIdAndOwner_" + au) + "_") + aC)
436-
437-
438-func cr (az,au,aC) = makeString(["landArtStatusByTypeAssetIdAndOwner", az, au, aC], "_")
439-
440-
441-func cs (cn) = ("landOwner_" + cn)
442-
443-
444-func ct (cp) = ("duckByCustomName_" + cp)
445-
446-
447-func cu (cp) = ("accountByCustomName_" + cp)
448-
449-
450-func cv () = "oldiesList"
451-
452-
453-let cw = 0
454-
455-let cx = 1
456-
457-let cy = 2
458-
459-let cz = 0
460-
461-let cA = 5
462-
463-let cB = 6
464-
465-let cC = 7
466-
467-func cD (cn,bT) = ((P + cn) + bT)
468-
469-
470-func cE (cF,cG) = {
471- let cH = (((((cG[0] + cG[1]) + cG[2]) + cG[3]) + cG[4]) + cG[5])
472- if ((0 >= cH))
414+let cf = toBigInt(5)
415+
416+let cg = toBigInt(20)
417+
418+let ch = toBigInt((20 * 20))
419+
420+let ci = toBigInt(((20 * 20) * 20))
421+
422+let cj = toBigInt((((20 * 20) * 20) * 20))
423+
424+let ck = toBigInt(((((20 * 20) * 20) * 20) * 20))
425+
426+let cl = 500
427+
428+func cm () = "nextLandNum"
429+
430+
431+func cn (co) = ("landToAsset_" + co)
432+
433+
434+func cp (cq) = ("landByCustomName_" + cq)
435+
436+
437+func cr (av,aD) = ((("infraLevelByAssetIdAndOwner_" + av) + "_") + aD)
438+
439+
440+func cs (aA,av,aD) = makeString(["landArtStatusByTypeAssetIdAndOwner", aA, av, aD], "_")
441+
442+
443+func ct (co) = ("landOwner_" + co)
444+
445+
446+func cu (cq) = ("duckByCustomName_" + cq)
447+
448+
449+func cv (cq) = ("accountByCustomName_" + cq)
450+
451+
452+func cw () = "oldiesList"
453+
454+
455+let cx = 0
456+
457+let cy = 1
458+
459+let cz = 2
460+
461+let cA = 0
462+
463+let cB = 5
464+
465+let cC = 6
466+
467+let cD = 7
468+
469+func cE (co,bU) = ((P + co) + bU)
470+
471+
472+func cF (cG,cH) = {
473+ let cI = (((((cH[0] + cH[1]) + cH[2]) + cH[3]) + cH[4]) + cH[5])
474+ if ((0 >= cI))
473475 then throw("Zero weights sum")
474476 else {
475- let cI = fraction(cF, bg, cH)
476- func cJ (cK,cL) = (cK :+ fraction(cL, cI, bg))
477-
478- let cM = cG
479- let cN = size(cM)
480- let cO = nil
481- func cP (cQ,cR) = if ((cR >= cN))
482- then cQ
483- else cJ(cQ, cM[cR])
484-
485- func cS (cQ,cR) = if ((cR >= cN))
486- then cQ
477+ let cJ = fraction(cG, bh, cI)
478+ func cK (cL,cM) = (cL :+ fraction(cM, cJ, bh))
479+
480+ let cN = cH
481+ let cO = size(cN)
482+ let cP = nil
483+ func cQ (cR,cS) = if ((cS >= cO))
484+ then cR
485+ else cK(cR, cN[cS])
486+
487+ func cT (cR,cS) = if ((cS >= cO))
488+ then cR
487489 else throw("List size exceeds 6")
488490
489- cS(cP(cP(cP(cP(cP(cP(cO, 0), 1), 2), 3), 4), 5), 6)
490- }
491- }
492-
493-
494-func cT (cF) = {
495- let cU = split(value(getString(bK())), "_")
496- if ((size(cU) != S))
491+ cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6)
492+ }
493+ }
494+
495+
496+func cU (cG) = {
497+ let cV = split(value(getString(bL())), "_")
498+ if ((size(cV) != S))
497499 then throw("Wrong proportions data")
498500 else {
499- let cV = [parseIntValue(cU[0]), parseIntValue(cU[1]), parseIntValue(cU[2]), parseIntValue(cU[3]), parseIntValue(cU[4]), parseIntValue(cU[5])]
500- cE(cF, cV)
501- }
502- }
503-
504-
505-func cW (cX,cY,cZ) = {
506- let da = cT(cZ)
507- func db (cK,bA) = {
508- let dc = (parseIntValue(cY[bA]) - da[bA])
509- if ((0 > dc))
510- then throw(((((("Not enough material idx=" + toString(bA)) + ", you have ") + cY[bA]) + ", but need ") + toString(da[bA])))
511- else (cK :+ toString(dc))
501+ let cW = [parseIntValue(cV[0]), parseIntValue(cV[1]), parseIntValue(cV[2]), parseIntValue(cV[3]), parseIntValue(cV[4]), parseIntValue(cV[5])]
502+ cF(cG, cW)
503+ }
504+ }
505+
506+
507+func cX (cY,cZ,da) = {
508+ let db = cU(da)
509+ func dc (cL,bB) = {
510+ let dd = (parseIntValue(cZ[bB]) - db[bB])
511+ if ((0 > dd))
512+ then throw(((((("Not enough material idx=" + toString(bB)) + ", you have ") + cZ[bB]) + ", but need ") + toString(db[bB])))
513+ else (cL :+ toString(dd))
512514 }
513515
514- if (cX)
516+ if (cY)
515517 then {
516- let cM = [0, 1, 2, 3, 4, 5]
517- let cN = size(cM)
518- let cO = nil
519- func cP (cQ,cR) = if ((cR >= cN))
520- then cQ
521- else db(cQ, cM[cR])
522-
523- func cS (cQ,cR) = if ((cR >= cN))
524- then cQ
518+ let cN = [0, 1, 2, 3, 4, 5]
519+ let cO = size(cN)
520+ let cP = nil
521+ func cQ (cR,cS) = if ((cS >= cO))
522+ then cR
523+ else dc(cR, cN[cS])
524+
525+ func cT (cR,cS) = if ((cS >= cO))
526+ then cR
525527 else throw("List size exceeds 6")
526528
527- cS(cP(cP(cP(cP(cP(cP(cO, 0), 1), 2), 3), 4), 5), 6)
528- }
529- else cY
530- }
531-
532-
533-func dd (de,df) = if ((df == ""))
534- then de
529+ cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6)
530+ }
531+ else cZ
532+ }
533+
534+
535+func de (df,dg) = if ((dg == ""))
536+ then df
535537 else {
536- let dg = if ((de == ""))
538+ let dh = if ((df == ""))
537539 then nil
538- else split(de, "_")
539- func dh (cK,di) = {
540- let dj = cK._1
541- func dk (dl,dm) = {
542- let dn = split(dm, ",")
543- if ((size(dn) != 2))
540+ else split(df, "_")
541+ func di (cL,dj) = {
542+ let dk = cL._1
543+ func dl (dm,dn) = {
544+ let do = split(dn, ",")
545+ if ((size(do) != 2))
544546 then throw("Incorrect format, should be index,amount")
545547 else {
546- let bA = parseIntValue(dn[0])
547- if (if ((0 > bA))
548+ let bB = parseIntValue(do[0])
549+ if (if ((0 > bB))
548550 then true
549- else (bA >= size(ac)))
551+ else (bB >= size(ac)))
550552 then throw("Unknown product idx")
551- else if ((bA != dj))
552- then dl
553+ else if ((bB != dk))
554+ then dm
553555 else {
554- let do = parseIntValue(dn[1])
555- if ((0 >= do))
556+ let dp = parseIntValue(do[1])
557+ if ((0 >= dp))
556558 then throw("Pass only positive amounts")
557- else (dl + do)
559+ else (dm + dp)
558560 }
559561 }
560562 }
561563
562- let dp = {
563- let cM = split(df, "_")
564- let cN = size(cM)
565- let cO = 0
566- func cP (cQ,cR) = if ((cR >= cN))
567- then cQ
568- else dk(cQ, cM[cR])
569-
570- func cS (cQ,cR) = if ((cR >= cN))
571- then cQ
564+ let dq = {
565+ let cN = split(dg, "_")
566+ let cO = size(cN)
567+ let cP = 0
568+ func cQ (cR,cS) = if ((cS >= cO))
569+ then cR
570+ else dl(cR, cN[cS])
571+
572+ func cT (cR,cS) = if ((cS >= cO))
573+ then cR
572574 else throw("List size exceeds 10")
573575
574- cS(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cO, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
576+ cT(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
575577 }
576- let dq = if ((size(dg) > dj))
577- then parseIntValue(dg[dj])
578+ let dr = if ((size(dh) > dk))
579+ then parseIntValue(dh[dk])
578580 else 0
579- let dr = if ((dq >= dp))
580- then (dq - dp)
581- else throw(((((("You have " + toString(dq)) + " of ") + Z[dj]) + ", but tried to use ") + toString(dp)))
582- $Tuple2((dj + 1), (cK._2 :+ toString(dr)))
583- }
584-
585- let ds = {
586- let cM = ac
587- let cN = size(cM)
588- let cO = $Tuple2(0, nil)
589- func cP (cQ,cR) = if ((cR >= cN))
590- then cQ
591- else dh(cQ, cM[cR])
592-
593- func cS (cQ,cR) = if ((cR >= cN))
594- then cQ
581+ let ds = if ((dr >= dq))
582+ then (dr - dq)
583+ else throw(((((("You have " + toString(dr)) + " of ") + Z[dk]) + ", but tried to use ") + toString(dq)))
584+ $Tuple2((dk + 1), (cL._2 :+ toString(ds)))
585+ }
586+
587+ let dt = {
588+ let cN = ac
589+ let cO = size(cN)
590+ let cP = $Tuple2(0, nil)
591+ func cQ (cR,cS) = if ((cS >= cO))
592+ then cR
593+ else di(cR, cN[cS])
594+
595+ func cT (cR,cS) = if ((cS >= cO))
596+ then cR
595597 else throw("List size exceeds 50")
596598
597- cS(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cO, 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)
598- }
599- makeString(ds._2, "_")
599+ cT(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cP, 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)
600+ }
601+ makeString(dt._2, "_")
600602 }
601603
602604
603-func dt (du,dg,dv) = {
604- let dn = split(du, ":")
605- if ((size(dn) != 2))
605+func du (dv,dh,dw,dx,dy,dz) = {
606+ let do = split(dv, ":")
607+ if ((size(do) != 2))
606608 then throw("Incorrect format, should be index:amount")
607609 else {
608- let dw = parseIntValue(dn[0])
609- let dx = parseIntValue(dn[1])
610- if (if ((0 > dw))
610+ let dA = parseIntValue(do[0])
611+ let dB = parseIntValue(do[1])
612+ if (if ((0 > dA))
611613 then true
612- else (dw >= size(ac)))
614+ else (dA >= size(ac)))
613615 then throw("Unknown product idx")
614- else if ((0 > dx))
616+ else if ((0 > dB))
615617 then throw("Count can't be negative")
616- else if ((dx == 0))
617- then dg
618+ else if ((dB == 0))
619+ then $Tuple2(dh, false)
618620 else {
619- func dy (cK,di) = {
620- let dj = cK._1
621- let dq = if ((size(dg) > dj))
622- then parseIntValue(dg[dj])
621+ func dC (cL,dj) = {
622+ let dk = cL._1
623+ let dr = if ((size(dh) > dk))
624+ then parseIntValue(dh[dk])
623625 else 0
624- if (if (!(dv))
625- then (dx > dq)
626+ if (if (!(dw))
627+ then (dB > dr)
626628 else false)
627- then throw(((((("You have " + toString(dq)) + " of ") + Z[dj]) + ", but tried to use ") + toString(dx)))
628- else $Tuple2((dj + 1), (cK._2 :+ toString(if ((dw != dj))
629- then dq
630- else (dq + (if (dv)
631- then dx
632- else -(dx))))))
629+ then throw(((((("You have " + toString(dr)) + " of ") + Z[dk]) + ", but tried to use ") + toString(dB)))
630+ else {
631+ let dD = if (!(dw))
632+ then {
633+ let dE = split(dj, "_")[ae]
634+ if ((dE == ""))
635+ then throw("Item cannot be equipped")
636+ else {
637+ let dF = parseIntValue(dE)
638+ let dG = (dF / 100)
639+ if ((dx != dG))
640+ then throw("Segment incompatible")
641+ else {
642+ let dH = ((dF % 100) / 10)
643+ if ((dy != dH))
644+ then throw("Slot incompatible")
645+ else {
646+ let dI = (dF % 10)
647+ if (if ((dz != 0))
648+ then (dI > 1)
649+ else false)
650+ then throw("Big items should occupy slot 0")
651+ else (dI > 1)
652+ }
653+ }
654+ }
655+ }
656+ else false
657+ $Tuple3((dk + 1), (cL._2 :+ toString(if ((dA != dk))
658+ then dr
659+ else (dr + (if (dw)
660+ then dB
661+ else -(dB))))), if (cL._3)
662+ then true
663+ else dD)
664+ }
633665 }
634666
635-( let cM = ac
636- let cN = size(cM)
637- let cO = $Tuple2(0, nil)
638- func cP (cQ,cR) = if ((cR >= cN))
639- then cQ
640- else dy(cQ, cM[cR])
641-
642- func cS (cQ,cR) = if ((cR >= cN))
643- then cQ
644- else throw("List size exceeds 42")
645-
646- cS(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cO, 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))._2
667+ let dd = {
668+ let cN = ac
669+ let cO = size(cN)
670+ let cP = $Tuple3(0, nil, false)
671+ func cQ (cR,cS) = if ((cS >= cO))
672+ then cR
673+ else dC(cR, cN[cS])
674+
675+ func cT (cR,cS) = if ((cS >= cO))
676+ then cR
677+ else throw("List size exceeds 27")
678+
679+ cT(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cP, 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)
680+ }
681+ $Tuple2(dd._2, dd._3)
647682 }
648683 }
649684 }
650685
651686
652-func dz (dA,dB,dv) = if ((dA != ""))
687+func dJ (dK,dL,dw,dx,dy) = if ((dK != ""))
653688 then {
654- let dC = split(dA, ",")
655- if ((size(dC) > n))
689+ let dM = split(dK, ",")
690+ if ((size(dM) > n))
656691 then throw("Wrong slots format")
657692 else {
658- let dD = dC[0]
659- let dE = if ((size(dC) > 1))
660- then dC[1]
693+ let dN = dM[0]
694+ let dO = if ((size(dM) > 1))
695+ then dM[1]
661696 else ""
662- if (if ((dD == ""))
663- then (dE == "")
697+ if (if ((dN == ""))
698+ then (dO == "")
664699 else false)
665- then dB
700+ then dL
666701 else {
667- let dF = if ((dD != ""))
668- then dt(dD, dB, dv)
669- else dB
670- if ((dE != ""))
671- then dt(dE, dF, dv)
672- else dF
702+ let dP = if ((dN != ""))
703+ then du(dN, dL, dw, dx, dy, 0)
704+ else $Tuple2(dL, false)
705+ if ((dO != ""))
706+ then if (dP._2)
707+ then throw("Big item already occupies slot")
708+ else du(dO, dP._1, dw, dx, dy, 1)._1
709+ else dP._1
673710 }
674711 }
675712 }
676- else dB
677-
678-
679-func dG (dH,dg,dv) = {
680- func dI (cK,dJ) = {
681- let dK = split(dJ, ";")
682- if ((size(dK) != m))
713+ else dL
714+
715+
716+func dQ (dR,dh,dw) = {
717+ func dx (cL,dS) = {
718+ let dk = cL._1
719+ let dy = split(dS, ";")
720+ if ((size(dy) != m))
683721 then throw("Wrong segment format")
684722 else {
685- let dL = dK[0]
686- let dp = dK[1]
687- if (if ((dL == ""))
688- then (dp == "")
723+ let dT = dy[0]
724+ let dq = dy[1]
725+ if (if ((dT == ""))
726+ then (dq == "")
689727 else false)
690- then cK
728+ then $Tuple2((dk + 1), cL._2)
691729 else {
692- let dM = dz(dL, cK, dv)
693- dz(dp, dM, dv)
730+ let dU = dJ(dT, cL._2, dw, dk, 0)
731+ $Tuple2((dk + 1), dJ(dq, dU, dw, dk, 1))
694732 }
695733 }
696734 }
697735
698- let cM = dH
699- let cN = size(cM)
700- let cO = dg
701- func cP (cQ,cR) = if ((cR >= cN))
702- then cQ
703- else dI(cQ, cM[cR])
704-
705- func cS (cQ,cR) = if ((cR >= cN))
706- then cQ
736+( let cN = dR
737+ let cO = size(cN)
738+ let cP = $Tuple2(0, dh)
739+ func cQ (cR,cS) = if ((cS >= cO))
740+ then cR
741+ else dx(cR, cN[cS])
742+
743+ func cT (cR,cS) = if ((cS >= cO))
744+ then cR
707745 else throw("List size exceeds 6")
708746
709- cS(cP(cP(cP(cP(cP(cP(cO, 0), 1), 2), 3), 4), 5), 6)
710- }
711-
712-
713-func dN (dO,dP,dQ,dR) = if ((size(dO) != S))
747+ cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6))._2
748+ }
749+
750+
751+func dV (dW,dX,dY,dZ) = if ((size(dW) != S))
714752 then throw("Wrong proportions data")
715753 else {
716- func dS (cK,dT) = {
717- let dc = (parseIntValue(dO[dT]) + ((dR * dP[dT]) * dQ))
718- if ((0 > dc))
719- then throw(((((((("Panic! Pieces of type=" + toString(dT)) + ", sign=") + toString(dR)) + ", terrainCounts[i]=") + toString(dP[dT])) + ", landSizeIndex=") + toString(dQ)))
720- else (cK :+ toString(dc))
721- }
722-
723- let cV = {
724- let cM = [0, 1, 2, 3, 4, 5]
725- let cN = size(cM)
726- let cO = nil
727- func cP (cQ,cR) = if ((cR >= cN))
728- then cQ
729- else dS(cQ, cM[cR])
730-
731- func cS (cQ,cR) = if ((cR >= cN))
732- then cQ
754+ func ea (cL,eb) = {
755+ let dd = (parseIntValue(dW[eb]) + ((dZ * dX[eb]) * dY))
756+ if ((0 > dd))
757+ then throw(((((((("Panic! Pieces of type=" + toString(eb)) + ", sign=") + toString(dZ)) + ", terrainCounts[i]=") + toString(dX[eb])) + ", landSizeIndex=") + toString(dY)))
758+ else (cL :+ toString(dd))
759+ }
760+
761+ let cW = {
762+ let cN = [0, 1, 2, 3, 4, 5]
763+ let cO = size(cN)
764+ let cP = nil
765+ func cQ (cR,cS) = if ((cS >= cO))
766+ then cR
767+ else ea(cR, cN[cS])
768+
769+ func cT (cR,cS) = if ((cS >= cO))
770+ then cR
733771 else throw("List size exceeds 6")
734772
735- cS(cP(cP(cP(cP(cP(cP(cO, 0), 1), 2), 3), 4), 5), 6)
736- }
737- makeString(cV, "_")
773+ cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6)
774+ }
775+ makeString(cW, "_")
738776 }
739777
740778
741-func dU (dP,dQ,dR) = {
742- let dO = split(valueOrElse(getString(bK()), "0_0_0_0_0_0"), "_")
743- dN(dO, dP, dQ, dR)
744- }
745-
746-
747-func dV (dW) = [(size(split(dW, "A")) - 1), (size(split(dW, "B")) - 1), (size(split(dW, "C")) - 1), (size(split(dW, "D")) - 1), (size(split(dW, "E")) - 1), (size(split(dW, "F")) - 1)]
748-
749-
750-func dX (dY,dP,dZ,dQ,ea) = {
751- func eb (cK,dT) = {
752- let ec = ((fraction(dZ, ea, U) * dP[dT]) * dQ)
753- (cK :+ toString((parseIntValue(dY[dT]) + ec)))
779+func ec (dX,dY,dZ) = {
780+ let dW = split(valueOrElse(getString(bL()), "0_0_0_0_0_0"), "_")
781+ dV(dW, dX, dY, dZ)
782+ }
783+
784+
785+func ed (ee) = [(size(split(ee, "A")) - 1), (size(split(ee, "B")) - 1), (size(split(ee, "C")) - 1), (size(split(ee, "D")) - 1), (size(split(ee, "E")) - 1), (size(split(ee, "F")) - 1)]
786+
787+
788+func ef (eg,dX,eh,dY,ei) = {
789+ func ej (cL,eb) = {
790+ let ek = ((fraction(eh, ei, U) * dX[eb]) * dY)
791+ (cL :+ toString((parseIntValue(eg[eb]) + ek)))
754792 }
755793
756- let cV = {
757- let cM = [0, 1, 2, 3, 4, 5]
758- let cN = size(cM)
759- let cO = nil
760- func cP (cQ,cR) = if ((cR >= cN))
761- then cQ
762- else eb(cQ, cM[cR])
763-
764- func cS (cQ,cR) = if ((cR >= cN))
765- then cQ
794+ let cW = {
795+ let cN = [0, 1, 2, 3, 4, 5]
796+ let cO = size(cN)
797+ let cP = nil
798+ func cQ (cR,cS) = if ((cS >= cO))
799+ then cR
800+ else ej(cR, cN[cS])
801+
802+ func cT (cR,cS) = if ((cS >= cO))
803+ then cR
766804 else throw("List size exceeds 6")
767805
768- cS(cP(cP(cP(cP(cP(cP(cO, 0), 1), 2), 3), 4), 5), 6)
806+ cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6)
769807 }
770- makeString(cV, "_")
771- }
772-
773-
774-func ed (dP,dZ,dQ,ea) = {
775- func eb (cK,dT) = {
776- let ec = ((fraction(dZ, ea, U) * dP[dT]) * dQ)
777- $Tuple2((cK._1 :+ ec), (cK._2 + ec))
808+ makeString(cW, "_")
809+ }
810+
811+
812+func el (dX,eh,dY,ei) = {
813+ func ej (cL,eb) = {
814+ let ek = ((fraction(eh, ei, U) * dX[eb]) * dY)
815+ $Tuple2((cL._1 :+ ek), (cL._2 + ek))
778816 }
779817
780- let cM = [0, 1, 2, 3, 4, 5]
781- let cN = size(cM)
782- let cO = $Tuple2(nil, 0)
783- func cP (cQ,cR) = if ((cR >= cN))
784- then cQ
785- else eb(cQ, cM[cR])
786-
787- func cS (cQ,cR) = if ((cR >= cN))
788- then cQ
818+ let cN = [0, 1, 2, 3, 4, 5]
819+ let cO = size(cN)
820+ let cP = $Tuple2(nil, 0)
821+ func cQ (cR,cS) = if ((cS >= cO))
822+ then cR
823+ else ej(cR, cN[cS])
824+
825+ func cT (cR,cS) = if ((cS >= cO))
826+ then cR
789827 else throw("List size exceeds 6")
790828
791- cS(cP(cP(cP(cP(cP(cP(cO, 0), 1), 2), 3), 4), 5), 6)
792- }
793-
794-
795-func ee (ef,eg,eh,ei) = {
796- let ej = eh._1
797- let ek = eh._2
798- if ((ek == 0))
799- then $Tuple2(makeString(ef, "_"), makeString(eg, "_"))
800- else if ((ei >= ek))
829+ cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6)
830+ }
831+
832+
833+func em (en,eo,ep,eq) = {
834+ let er = ep._1
835+ let es = ep._2
836+ if ((es == 0))
837+ then $Tuple2(makeString(en, "_"), makeString(eo, "_"))
838+ else if ((eq >= es))
801839 then {
802- func el (cK,dT) = (cK :+ toString((parseIntValue(ef[dT]) + ej[dT])))
803-
804- let cV = {
805- let cM = [0, 1, 2, 3, 4, 5]
806- let cN = size(cM)
807- let cO = nil
808- func cP (cQ,cR) = if ((cR >= cN))
809- then cQ
810- else el(cQ, cM[cR])
811-
812- func cS (cQ,cR) = if ((cR >= cN))
813- then cQ
840+ func et (cL,eb) = (cL :+ toString((parseIntValue(en[eb]) + er[eb])))
841+
842+ let cW = {
843+ let cN = [0, 1, 2, 3, 4, 5]
844+ let cO = size(cN)
845+ let cP = nil
846+ func cQ (cR,cS) = if ((cS >= cO))
847+ then cR
848+ else et(cR, cN[cS])
849+
850+ func cT (cR,cS) = if ((cS >= cO))
851+ then cR
814852 else throw("List size exceeds 6")
815853
816- cS(cP(cP(cP(cP(cP(cP(cO, 0), 1), 2), 3), 4), 5), 6)
854+ cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6)
817855 }
818- $Tuple2(makeString(cV, "_"), makeString(eg, "_"))
856+ $Tuple2(makeString(cW, "_"), makeString(eo, "_"))
819857 }
820858 else {
821- func em (cK,dT) = {
822- let en = fraction(ej[dT], ei, ek)
823- $Tuple2((cK._1 :+ toString((parseIntValue(ef[dT]) + en))), (cK._2 :+ toString(((parseIntValue(eg[dT]) + ej[dT]) - en))))
859+ func eu (cL,eb) = {
860+ let ev = fraction(er[eb], eq, es)
861+ $Tuple2((cL._1 :+ toString((parseIntValue(en[eb]) + ev))), (cL._2 :+ toString(((parseIntValue(eo[eb]) + er[eb]) - ev))))
824862 }
825863
826- let cV = {
827- let cM = [0, 1, 2, 3, 4, 5]
828- let cN = size(cM)
829- let cO = $Tuple2(nil, nil)
830- func cP (cQ,cR) = if ((cR >= cN))
831- then cQ
832- else em(cQ, cM[cR])
833-
834- func cS (cQ,cR) = if ((cR >= cN))
835- then cQ
864+ let cW = {
865+ let cN = [0, 1, 2, 3, 4, 5]
866+ let cO = size(cN)
867+ let cP = $Tuple2(nil, nil)
868+ func cQ (cR,cS) = if ((cS >= cO))
869+ then cR
870+ else eu(cR, cN[cS])
871+
872+ func cT (cR,cS) = if ((cS >= cO))
873+ then cR
836874 else throw("List size exceeds 6")
837875
838- cS(cP(cP(cP(cP(cP(cP(cO, 0), 1), 2), 3), 4), 5), 6)
876+ cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6)
839877 }
840- $Tuple2(makeString(cV._1, "_"), makeString(cV._2, "_"))
878+ $Tuple2(makeString(cW._1, "_"), makeString(cW._2, "_"))
841879 }
842880 }
843881
844882
845-func eo (ep) = if ((ep >= toBigInt(0)))
846- then ep
847- else -(ep)
848-
849-
850-let eq = [[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]]
851-
852-func er (bR,es) = {
853- let et = toInt((bR % cf))
854- let eu = if ((es[0] > et))
883+func ew (ex) = if ((ex >= toBigInt(0)))
884+ then ex
885+ else -(ex)
886+
887+
888+let ey = [[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]]
889+
890+func ez (bS,eA) = {
891+ let eB = toInt((bS % cg))
892+ let eC = if ((eA[0] > eB))
855893 then "A"
856- else if ((es[1] > et))
894+ else if ((eA[1] > eB))
857895 then "B"
858- else if ((es[2] > et))
896+ else if ((eA[2] > eB))
859897 then "C"
860- else if ((es[3] > et))
898+ else if ((eA[3] > eB))
861899 then "D"
862- else if ((es[4] > et))
900+ else if ((eA[4] > eB))
863901 then "E"
864902 else "F"
865- eu
866- }
867-
868-
869-func ev (ew,ex) = {
870- let ey = eq[ex]
871- func ez (cK,cL) = $Tuple2((((((cK._1 + er(cK._2, ey)) + er((cK._2 / cf), ey)) + er((cK._2 / cg), ey)) + er((cK._2 / ch), ey)) + er((cK._2 / ci), ey)), (cK._2 / cj))
872-
873- let eA = {
874- let cM = [1, 2, 3, 4, 5]
875- let cN = size(cM)
876- let cO = $Tuple2("", (ew / ce))
877- func cP (cQ,cR) = if ((cR >= cN))
878- then cQ
879- else ez(cQ, cM[cR])
880-
881- func cS (cQ,cR) = if ((cR >= cN))
882- then cQ
903+ eC
904+ }
905+
906+
907+func eD (eE,eF) = {
908+ let eG = ey[eF]
909+ func eH (cL,cM) = $Tuple2((((((cL._1 + ez(cL._2, eG)) + ez((cL._2 / cg), eG)) + ez((cL._2 / ch), eG)) + ez((cL._2 / ci), eG)) + ez((cL._2 / cj), eG)), (cL._2 / ck))
910+
911+ let eI = {
912+ let cN = [1, 2, 3, 4, 5]
913+ let cO = size(cN)
914+ let cP = $Tuple2("", (eE / cf))
915+ func cQ (cR,cS) = if ((cS >= cO))
916+ then cR
917+ else eH(cR, cN[cS])
918+
919+ func cT (cR,cS) = if ((cS >= cO))
920+ then cR
883921 else throw("List size exceeds 5")
884922
885- cS(cP(cP(cP(cP(cP(cO, 0), 1), 2), 3), 4), 5)
923+ cT(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5)
886924 }
887- eA._1
888- }
889-
890-
891-func eB (eC) = {
892- let eD = split(valueOrElse(getString(eC), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
893-[toString(valueOrElse(parseInt(eD[ao]), 0)), if ((size(split(eD[ap], "_")) == S))
894- then eD[ap]
895- else "0_0_0_0_0_0", if ((size(split(eD[aq], "_")) == S))
896- then eD[aq]
897- else "0_0_0_0_0_0", eD[ar]]
898- }
899-
900-
901-func eE (eF) = {
902- let dn = split(eF, "_")
903- ((V * (parseIntValue(dn[1]) + 1)) * parseIntValue(dn[0]))
904- }
905-
906-
907-func eG (eH) = {
908- let eI = eH[ai]
909- func eJ (cK,di) = (cK + parseIntValue(di))
910-
911- func eK (cK,di) = {
912- let bA = cK._1
913- let eL = (((parseIntValue(di) + ae) - 1) / ae)
914- $Tuple2((bA + 1), (cK._2 + (eL * bh)))
925+ eI._1
926+ }
927+
928+
929+func eJ (eK) = {
930+ let eL = split(valueOrElse(getString(eK), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
931+[toString(valueOrElse(parseInt(eL[ap]), 0)), if ((size(split(eL[aq], "_")) == S))
932+ then eL[aq]
933+ else "0_0_0_0_0_0", if ((size(split(eL[ar], "_")) == S))
934+ then eL[ar]
935+ else "0_0_0_0_0_0", eL[as]]
936+ }
937+
938+
939+func eM (eN) = {
940+ let do = split(eN, "_")
941+ ((V * (parseIntValue(do[1]) + 1)) * parseIntValue(do[0]))
942+ }
943+
944+
945+func eO (eP) = {
946+ let eQ = eP[aj]
947+ func eR (cL,dj) = (cL + parseIntValue(dj))
948+
949+ func eS (cL,dj) = {
950+ let bB = cL._1
951+ let eT = (((parseIntValue(dj) + af) - 1) / af)
952+ $Tuple2((bB + 1), (cL._2 + (eT * bi)))
915953 }
916954
917- let eM = {
918- let cM = split(eH[ag], "_")
919- let cN = size(cM)
920- let cO = 0
921- func cP (cQ,cR) = if ((cR >= cN))
922- then cQ
923- else eJ(cQ, cM[cR])
924-
925- func cS (cQ,cR) = if ((cR >= cN))
926- then cQ
955+ let eU = {
956+ let cN = split(eP[ah], "_")
957+ let cO = size(cN)
958+ let cP = 0
959+ func cQ (cR,cS) = if ((cS >= cO))
960+ then cR
961+ else eR(cR, cN[cS])
962+
963+ func cT (cR,cS) = if ((cS >= cO))
964+ then cR
927965 else throw("List size exceeds 6")
928966
929- cS(cP(cP(cP(cP(cP(cP(cO, 0), 1), 2), 3), 4), 5), 6)
967+ cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6)
930968 }
931- let eN = {
932- let cM = split(eH[ah], "_")
933- let cN = size(cM)
934- let cO = 0
935- func eO (cQ,cR) = if ((cR >= cN))
936- then cQ
937- else eJ(cQ, cM[cR])
938-
939- func eP (cQ,cR) = if ((cR >= cN))
940- then cQ
969+ let eV = {
970+ let cN = split(eP[ai], "_")
971+ let cO = size(cN)
972+ let cP = 0
973+ func eW (cR,cS) = if ((cS >= cO))
974+ then cR
975+ else eR(cR, cN[cS])
976+
977+ func eX (cR,cS) = if ((cS >= cO))
978+ then cR
941979 else throw("List size exceeds 6")
942980
943- eP(eO(eO(eO(eO(eO(eO(cO, 0), 1), 2), 3), 4), 5), 6)
981+ eX(eW(eW(eW(eW(eW(eW(cP, 0), 1), 2), 3), 4), 5), 6)
944982 }
945- let eQ = if ((eI == ""))
983+ let eY = if ((eQ == ""))
946984 then 0
947- else ( let cM = split_4C(eI, "_")
948- let cN = size(cM)
949- let cO = $Tuple2(0, 0)
950- func eR (cQ,cR) = if ((cR >= cN))
951- then cQ
952- else eK(cQ, cM[cR])
953-
954- func eS (cQ,cR) = if ((cR >= cN))
955- then cQ
985+ else ( let cN = split_4C(eQ, "_")
986+ let cO = size(cN)
987+ let cP = $Tuple2(0, 0)
988+ func eZ (cR,cS) = if ((cS >= cO))
989+ then cR
990+ else eS(cR, cN[cS])
991+
992+ func fa (cR,cS) = if ((cS >= cO))
993+ then cR
956994 else throw("List size exceeds 50")
957995
958- eS(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(cO, 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
959- ((eM + eN) + eQ)
960- }
961-
962-
963-func eT (eU,eV,eW) = {
964- let eF = ((toString(eV) + "_") + toString(eW))
965- let eX = eE(eF)
966- let eY = valueOrElse(getString(eU), (eF + ":0_0_0_0_0_0:0_0_0_0_0_0::0"))
967- let eZ = split_4C(eY, ":")
968- let fa = eG(eZ)
969- let fb = if ((5 > size(eZ)))
970- then makeString(["0", toString(fa), toString((eX - fa)), toString(eX)], "_")
971- else {
972- let fc = split(eZ[aj], "_")
973- let fd = parseIntValue(fc[ak])
974- let fe = if ((size(fc) > 1))
975- then parseIntValue(fc[al])
976- else fa
977- makeString([toString(fd), toString(fe), toString(((eX - fd) - fe)), toString(eX)], "_")
978- }
979-[eZ[af], if ((size(split(eZ[ag], "_")) == S))
980- then eZ[ag]
981- else "0_0_0_0_0_0", if ((size(split(eZ[ah], "_")) == S))
982- then eZ[ah]
983- else "0_0_0_0_0_0", eZ[ai], fb]
984- }
985-
986-
987-func ff (eH) = {
988- let fg = eG(eH)
989- let fh = parseIntValue(split(eH[aj], "_")[ak])
990- ((eE(eH[af]) - fg) - fh)
991- }
992-
993-
994-func fi (fj,fk) = {
995- let eL = if ((fj >= 0))
996- then (((fj + fk) - 1) / fk)
997- else -((((-(fj) + fk) - 1) / fk))
998- (eL * bh)
999- }
1000-
1001-
1002-func fl (fm,eH,fn) = if ((size(fm) != 3))
996+ fa(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(cP, 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
997+ ((eU + eV) + eY)
998+ }
999+
1000+
1001+func fb (fc,fd,fe) = {
1002+ let eN = ((toString(fd) + "_") + toString(fe))
1003+ let ff = eM(eN)
1004+ let fg = valueOrElse(getString(fc), (eN + ":0_0_0_0_0_0:0_0_0_0_0_0::0"))
1005+ let fh = split_4C(fg, ":")
1006+ let fi = eO(fh)
1007+ let fj = if ((5 > size(fh)))
1008+ then makeString(["0", toString(fi), toString((ff - fi)), toString(ff)], "_")
1009+ else {
1010+ let fk = split(fh[ak], "_")
1011+ let fl = parseIntValue(fk[al])
1012+ let fm = if ((size(fk) > 1))
1013+ then parseIntValue(fk[am])
1014+ else fi
1015+ makeString([toString(fl), toString(fm), toString(((ff - fl) - fm)), toString(ff)], "_")
1016+ }
1017+[fh[ag], if ((size(split(fh[ah], "_")) == S))
1018+ then fh[ah]
1019+ else "0_0_0_0_0_0", if ((size(split(fh[ai], "_")) == S))
1020+ then fh[ai]
1021+ else "0_0_0_0_0_0", fh[aj], fj]
1022+ }
1023+
1024+
1025+func fn (eP) = {
1026+ let fo = eO(eP)
1027+ let fp = parseIntValue(split(eP[ak], "_")[al])
1028+ ((eM(eP[ag]) - fo) - fp)
1029+ }
1030+
1031+
1032+func fq (fr,fs) = {
1033+ let eT = if ((fr >= 0))
1034+ then (((fr + fs) - 1) / fs)
1035+ else -((((-(fr) + fs) - 1) / fs))
1036+ (eT * bi)
1037+ }
1038+
1039+
1040+func ft (fu,eP,fv) = if ((size(fu) != 3))
10031041 then throw("cargoListStr should contain exactly 2 ':' separators")
10041042 else {
1005- let fo = split(fm[0], "_")
1006- let fp = split(fm[1], "_")
1007- let fq = if ((fm[2] == ""))
1043+ let fw = split(fu[0], "_")
1044+ let fx = split(fu[1], "_")
1045+ let fy = if ((fu[2] == ""))
10081046 then nil
1009- else split(fm[2], "_")
1010- if ((size(fo) != S))
1047+ else split(fu[2], "_")
1048+ if ((size(fw) != S))
10111049 then throw("All 6 resources should be passed")
1012- else if ((size(fp) != S))
1050+ else if ((size(fx) != S))
10131051 then throw("All 6 materials should be passed")
10141052 else {
1015- let ei = ff(eH)
1016- let fr = split(eH[ag], "_")
1017- let fs = split(eH[ah], "_")
1018- let ft = if ((eH[ai] == ""))
1053+ let eq = fn(eP)
1054+ let fz = split(eP[ah], "_")
1055+ let fA = split(eP[ai], "_")
1056+ let fB = if ((eP[aj] == ""))
10191057 then nil
1020- else split(eH[ai], "_")
1021- let eg = split(fn[ap], "_")
1022- let fu = split(fn[aq], "_")
1023- let fv = if ((fn[ar] == ""))
1058+ else split(eP[aj], "_")
1059+ let eo = split(fv[aq], "_")
1060+ let fC = split(fv[ar], "_")
1061+ let fD = if ((fv[as] == ""))
10241062 then nil
1025- else split(fn[ar], "_")
1026- func fw (cK,di) = {
1027- let dT = cK._1
1028- let fx = parseIntValue(di)
1029- let fy = parseIntValue(fr[dT])
1030- let fz = parseIntValue(eg[dT])
1031- if ((fx == 0))
1032- then $Tuple4((dT + 1), (cK._2 :+ fr[dT]), (cK._3 :+ eg[dT]), cK._4)
1033- else if ((fx > 0))
1034- then if ((fx > fz))
1035- then throw((((("Attempt to take " + di) + " from backpack, but only ") + toString(fz)) + " available"))
1036- else $Tuple4((dT + 1), (cK._2 :+ toString((fy + fx))), (cK._3 :+ toString((fz - fx))), (cK._4 + fx))
1037- else if ((-(fx) > fy))
1038- then throw((((("Attempt to take " + toString(-(fx))) + " from warehouse, but only ") + toString(fy)) + " available"))
1039- else $Tuple4((dT + 1), (cK._2 :+ toString((fy + fx))), (cK._3 :+ toString((fz - fx))), (cK._4 + fx))
1063+ else split(fv[as], "_")
1064+ func fE (cL,dj) = {
1065+ let eb = cL._1
1066+ let fF = parseIntValue(dj)
1067+ let fG = parseIntValue(fz[eb])
1068+ let fH = parseIntValue(eo[eb])
1069+ if ((fF == 0))
1070+ then $Tuple4((eb + 1), (cL._2 :+ fz[eb]), (cL._3 :+ eo[eb]), cL._4)
1071+ else if ((fF > 0))
1072+ then if ((fF > fH))
1073+ then throw((((("Attempt to take " + dj) + " from backpack, but only ") + toString(fH)) + " available"))
1074+ else $Tuple4((eb + 1), (cL._2 :+ toString((fG + fF))), (cL._3 :+ toString((fH - fF))), (cL._4 + fF))
1075+ else if ((-(fF) > fG))
1076+ then throw((((("Attempt to take " + toString(-(fF))) + " from warehouse, but only ") + toString(fG)) + " available"))
1077+ else $Tuple4((eb + 1), (cL._2 :+ toString((fG + fF))), (cL._3 :+ toString((fH - fF))), (cL._4 + fF))
10401078 }
10411079
1042- let cV = {
1043- let cM = fo
1044- let cN = size(cM)
1045- let cO = $Tuple4(0, nil, nil, 0)
1046- func cP (cQ,cR) = if ((cR >= cN))
1047- then cQ
1048- else fw(cQ, cM[cR])
1049-
1050- func cS (cQ,cR) = if ((cR >= cN))
1051- then cQ
1080+ let cW = {
1081+ let cN = fw
1082+ let cO = size(cN)
1083+ let cP = $Tuple4(0, nil, nil, 0)
1084+ func cQ (cR,cS) = if ((cS >= cO))
1085+ then cR
1086+ else fE(cR, cN[cS])
1087+
1088+ func cT (cR,cS) = if ((cS >= cO))
1089+ then cR
10521090 else throw("List size exceeds 6")
10531091
1054- cS(cP(cP(cP(cP(cP(cP(cO, 0), 1), 2), 3), 4), 5), 6)
1092+ cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6)
10551093 }
1056- func fA (cK,di) = {
1057- let dT = cK._1
1058- let fx = parseIntValue(di)
1059- let fB = parseIntValue(fs[dT])
1060- let fC = parseIntValue(fu[dT])
1061- if ((fx == 0))
1062- then $Tuple4((dT + 1), (cK._2 :+ fs[dT]), (cK._3 :+ fu[dT]), cK._4)
1063- else if ((fx > 0))
1064- then if ((fx > fC))
1065- then throw((((("Attempt to take " + di) + " from backpack, but only ") + toString(fC)) + " available"))
1066- else $Tuple4((dT + 1), (cK._2 :+ toString((fB + fx))), (cK._3 :+ toString((fC - fx))), (cK._4 + fx))
1067- else if ((-(fx) > fB))
1068- then throw((((("Attempt to take " + toString(-(fx))) + " from warehouse, but only ") + toString(fB)) + " available"))
1069- else $Tuple4((dT + 1), (cK._2 :+ toString((fB + fx))), (cK._3 :+ toString((fC - fx))), (cK._4 + fx))
1094+ func fI (cL,dj) = {
1095+ let eb = cL._1
1096+ let fF = parseIntValue(dj)
1097+ let fJ = parseIntValue(fA[eb])
1098+ let fK = parseIntValue(fC[eb])
1099+ if ((fF == 0))
1100+ then $Tuple4((eb + 1), (cL._2 :+ fA[eb]), (cL._3 :+ fC[eb]), cL._4)
1101+ else if ((fF > 0))
1102+ then if ((fF > fK))
1103+ then throw((((("Attempt to take " + dj) + " from backpack, but only ") + toString(fK)) + " available"))
1104+ else $Tuple4((eb + 1), (cL._2 :+ toString((fJ + fF))), (cL._3 :+ toString((fK - fF))), (cL._4 + fF))
1105+ else if ((-(fF) > fJ))
1106+ then throw((((("Attempt to take " + toString(-(fF))) + " from warehouse, but only ") + toString(fJ)) + " available"))
1107+ else $Tuple4((eb + 1), (cL._2 :+ toString((fJ + fF))), (cL._3 :+ toString((fK - fF))), (cL._4 + fF))
10701108 }
10711109
1072- let dL = {
1073- let cM = fp
1074- let cN = size(cM)
1075- let cO = $Tuple4(0, nil, nil, cV._4)
1076- func eO (cQ,cR) = if ((cR >= cN))
1077- then cQ
1078- else fA(cQ, cM[cR])
1079-
1080- func eP (cQ,cR) = if ((cR >= cN))
1081- then cQ
1110+ let dT = {
1111+ let cN = fx
1112+ let cO = size(cN)
1113+ let cP = $Tuple4(0, nil, nil, cW._4)
1114+ func eW (cR,cS) = if ((cS >= cO))
1115+ then cR
1116+ else fI(cR, cN[cS])
1117+
1118+ func eX (cR,cS) = if ((cS >= cO))
1119+ then cR
10821120 else throw("List size exceeds 6")
10831121
1084- eP(eO(eO(eO(eO(eO(eO(cO, 0), 1), 2), 3), 4), 5), 6)
1122+ eX(eW(eW(eW(eW(eW(eW(cP, 0), 1), 2), 3), 4), 5), 6)
10851123 }
1086- func fD (cK,di) = {
1087- let dT = cK._1
1088- let fx = parseIntValue(di)
1089- let fE = if ((size(ft) > dT))
1090- then parseIntValue(ft[dT])
1124+ func fL (cL,dj) = {
1125+ let eb = cL._1
1126+ let fF = parseIntValue(dj)
1127+ let fM = if ((size(fB) > eb))
1128+ then parseIntValue(fB[eb])
10911129 else 0
1092- let fF = if ((size(fv) > dT))
1093- then parseIntValue(fv[dT])
1130+ let fN = if ((size(fD) > eb))
1131+ then parseIntValue(fD[eb])
10941132 else 0
1095- if ((fx == 0))
1096- then $Tuple4((dT + 1), (cK._2 :+ toString(fE)), (cK._3 :+ toString(fF)), cK._4)
1097- else if ((fx > 0))
1098- then if ((fx > fF))
1099- then throw((((("Attempt to take " + di) + " from backpack, but only ") + toString(fF)) + " available"))
1133+ if ((fF == 0))
1134+ then $Tuple4((eb + 1), (cL._2 :+ toString(fM)), (cL._3 :+ toString(fN)), cL._4)
1135+ else if ((fF > 0))
1136+ then if ((fF > fN))
1137+ then throw((((("Attempt to take " + dj) + " from backpack, but only ") + toString(fN)) + " available"))
11001138 else {
1101- let fG = (fi((fE + fx), ae) - fi(fE, ae))
1102- $Tuple4((dT + 1), (cK._2 :+ toString((fE + fx))), (cK._3 :+ toString((fF - fx))), (cK._4 + fG))
1139+ let fO = (fq((fM + fF), af) - fq(fM, af))
1140+ $Tuple4((eb + 1), (cL._2 :+ toString((fM + fF))), (cL._3 :+ toString((fN - fF))), (cL._4 + fO))
11031141 }
1104- else if ((-(fx) > fE))
1105- then throw((((("Attempt to take " + toString(-(fx))) + " from warehouse, but only ") + toString(fE)) + " available"))
1142+ else if ((-(fF) > fM))
1143+ then throw((((("Attempt to take " + toString(-(fF))) + " from warehouse, but only ") + toString(fM)) + " available"))
11061144 else {
1107- let fG = (fi((fE + fx), ae) - fi(fE, ae))
1108- $Tuple4((dT + 1), (cK._2 :+ toString((fE + fx))), (cK._3 :+ toString((fF - fx))), (cK._4 + fG))
1145+ let fO = (fq((fM + fF), af) - fq(fM, af))
1146+ $Tuple4((eb + 1), (cL._2 :+ toString((fM + fF))), (cL._3 :+ toString((fN - fF))), (cL._4 + fO))
11091147 }
11101148 }
11111149
1112- let eD = if ((size(fq) != 0))
1150+ let eL = if ((size(fy) != 0))
11131151 then {
1114- let cM = fq
1115- let cN = size(cM)
1116- let cO = $Tuple4(0, nil, nil, dL._4)
1117- func eR (cQ,cR) = if ((cR >= cN))
1118- then cQ
1119- else fD(cQ, cM[cR])
1120-
1121- func eS (cQ,cR) = if ((cR >= cN))
1122- then cQ
1152+ let cN = fy
1153+ let cO = size(cN)
1154+ let cP = $Tuple4(0, nil, nil, dT._4)
1155+ func eZ (cR,cS) = if ((cS >= cO))
1156+ then cR
1157+ else fL(cR, cN[cS])
1158+
1159+ func fa (cR,cS) = if ((cS >= cO))
1160+ then cR
11231161 else throw("List size exceeds 50")
11241162
1125- eS(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(cO, 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)
1163+ fa(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(cP, 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)
11261164 }
1127- else $Tuple4(0, ft, fv, dL._4)
1128- let fH = eD._4
1129- if ((fH > ei))
1130- then throw((((("Attempt to put total " + toString(fH)) + " stuff, but only ") + toString(ei)) + " warehouse space left"))
1131- else $Tuple7(makeString(cV._2, "_"), makeString(dL._2, "_"), makeString(eD._2, "_"), makeString(cV._3, "_"), makeString(dL._3, "_"), makeString(eD._3, "_"), fH)
1165+ else $Tuple4(0, fB, fD, dT._4)
1166+ let fP = eL._4
1167+ if ((fP > eq))
1168+ then throw((((("Attempt to put total " + toString(fP)) + " stuff, but only ") + toString(eq)) + " warehouse space left"))
1169+ else $Tuple7(makeString(cW._2, "_"), makeString(dT._2, "_"), makeString(eL._2, "_"), makeString(cW._3, "_"), makeString(dT._3, "_"), makeString(eL._3, "_"), fP)
11321170 }
11331171 }
11341172
11351173
1136-func fI (fJ,fK) = {
1137- let aS = toString(fJ)
1138- let fL = eo(toBigInt(fK))
1139- let fM = valueOrElse(getInteger(cl()), (ck + 1))
1140- let cn = toString(fM)
1141- let ex = toInt((fL % ce))
1142- let dW = ev(fL, ex)
1143- let fN = aa[ex]
1144- let fO = Issue(cD(cn, "S"), makeString([cn, "S", dW, fN], "_"), 1, 0, false)
1145- let au = calculateAssetId(fO)
1146- let fP = toBase58String(au)
1147- $Tuple2([IntegerEntry(cl(), (fM + 1)), fO, StringEntry(cm(cn), fP), StringEntry(at(fP), aS), StringEntry(cs(cn), aS), IntegerEntry(ax(fP), 0), IntegerEntry(cq(fP, aS), 0), ScriptTransfer(fJ, 1, au)], $Tuple2(fP, fN))
1148- }
1149-
1150-
1151-func fQ (aS,fR,fS) = if (!(sigVerify_8Kb(fR, fS, bW)))
1174+func fQ (fR,fS) = {
1175+ let aT = toString(fR)
1176+ let fT = ew(toBigInt(fS))
1177+ let fU = valueOrElse(getInteger(cm()), (cl + 1))
1178+ let co = toString(fU)
1179+ let eF = toInt((fT % cf))
1180+ let ee = eD(fT, eF)
1181+ let fV = aa[eF]
1182+ let fW = Issue(cE(co, "S"), makeString([co, "S", ee, fV], "_"), 1, 0, false)
1183+ let av = calculateAssetId(fW)
1184+ let fX = toBase58String(av)
1185+ $Tuple2([IntegerEntry(cm(), (fU + 1)), fW, StringEntry(cn(co), fX), StringEntry(au(fX), aT), StringEntry(ct(co), aT), IntegerEntry(ay(fX), 0), IntegerEntry(cr(fX, aT), 0), ScriptTransfer(fR, 1, av)], $Tuple2(fX, fV))
1186+ }
1187+
1188+
1189+func fY (aT,fZ,ga) = if (!(sigVerify_8Kb(fZ, ga, bX)))
11521190 then throw("signature does not match")
11531191 else {
1154- let dn = split(toUtf8String(fR), ";")
1155- let fT = split(dn[0], "|")
1156- let fU = split(fT[cz], "_")
1157- let fV = parseIntValue(fU[0])
1158- let fW = parseIntValue(fU[1])
1159- let fX = split(dn[1], ":")
1160- let fY = fX[0]
1161- let fZ = parseIntValue(fT[cA])
1162- if (if ((fZ > (lastBlock.timestamp + bY)))
1192+ let do = split(toUtf8String(fZ), ";")
1193+ let gb = split(do[0], "|")
1194+ let gc = split(gb[cA], "_")
1195+ let gd = parseIntValue(gc[0])
1196+ let ge = parseIntValue(gc[1])
1197+ let gf = split(do[1], ":")
1198+ let gg = gf[0]
1199+ let gh = parseIntValue(gb[cB])
1200+ if (if ((gh > (lastBlock.timestamp + bZ)))
11631201 then true
1164- else ((lastBlock.timestamp - bY) > fZ))
1165- then throw(((("signature outdated: logTime=" + toString(fZ)) + ", bcTime=") + toString(lastBlock.timestamp)))
1202+ else ((lastBlock.timestamp - bZ) > gh))
1203+ then throw(((("signature outdated: logTime=" + toString(gh)) + ", bcTime=") + toString(lastBlock.timestamp)))
11661204 else {
1167- let ga = fX[1]
1168- let gb = valueOrElse(getString(as(aS)), "")
1169- if ((gb != ga))
1170- then throw(((("Tx ids don't match! In state: " + gb) + ", in msg: ") + ga))
1205+ let gi = gf[1]
1206+ let gj = valueOrElse(getString(at(aT)), "")
1207+ if ((gj != gi))
1208+ then throw(((("Tx ids don't match! In state: " + gj) + ", in msg: ") + gi))
11711209 else {
1172- let p = valueOrErrorMessage(getString(aM(aS)), "You don't have a duck staked")
1173- let gc = aP(p)
1174- let gd = J(valueOrElse(getInteger(r(p)), 0))
1175- let ge = valueOrElse(getInteger(gc), gd)
1176- if ((ge != fV))
1177- then throw(((("oldHealth=" + toString(ge)) + " from state does not match one from flight log=") + toString(fV)))
1178- else if ((0 >= fV))
1210+ let p = valueOrErrorMessage(getString(aN(aT)), "You don't have a duck staked")
1211+ let gk = aQ(p)
1212+ let gl = J(valueOrElse(getInteger(r(p)), 0))
1213+ let gm = valueOrElse(getInteger(gk), gl)
1214+ if ((gm != gd))
1215+ then throw(((("oldHealth=" + toString(gm)) + " from state does not match one from flight log=") + toString(gd)))
1216+ else if ((0 >= gd))
11791217 then throw("You can't fly with zero health")
11801218 else {
1181- let gf = if ((size(fT) > cB))
1182- then fT[cB]
1219+ let gn = if ((size(gb) > cC))
1220+ then gb[cC]
11831221 else ""
1184- let gg = if ((size(fT) > cC))
1185- then fT[cC]
1222+ let go = if ((size(gb) > cD))
1223+ then gb[cD]
11861224 else ""
1187- let gh = if (if ((fW > 0))
1188- then (gf == "$")
1225+ let gp = if (if ((ge > 0))
1226+ then (gn == "$")
11891227 else false)
1190- then bQ(invoke(bB, "sendUsdtPrize", [aS], nil))
1228+ then bR(invoke(bC, "sendUsdtPrize", [aT], nil))
11911229 else 0
1192- $Tuple5(fW, p, gh, fY, gg)
1230+ $Tuple5(ge, p, gp, gg, go)
11931231 }
11941232 }
11951233 }
11961234 }
11971235
11981236
1199-func gi (fJ,fK,fR,fS) = {
1200- let aS = toString(fJ)
1201- let ey = fQ(aS, fR, fS)
1202- let gc = aP(ey._2)
1203- let eC = aN(ey._2)
1204- let fn = eB(eC)
1205- let gj = split(fn[aq], "_")
1206- let gk = makeString(cW(true, gj, cc), "_")
1207- let ds = dd(fn[ar], ey._5)
1208- if ((0 >= ey._1))
1209- then $Tuple3([IntegerEntry(gc, 0), StringEntry(eC, makeString([fn[ao], fn[ap], fn[aq], ds], ":"))], "", 0)
1210- else {
1211- let gl = fI(fJ, fK)
1212- let fP = gl._2._1
1213- $Tuple3((((gl._1 :+ StringEntry(aO(ey._2), makeString([gl._2._2, "L", fP], "_"))) :+ IntegerEntry(gc, ey._1)) :+ StringEntry(eC, makeString([fn[ao], fn[ap], gk, ds], ":"))), fP, ey._3)
1214- }
1215- }
1216-
1217-
1218-func gm (aE,gn) = {
1219- let eW = valueOrElse(getInteger(ax(aE)), 0)
1220- let go = valueOrElse(getInteger(ay(R, aE)), 0)
1221- let gp = (eW / 6)
1222- let gq = (eW / 7)
1223- ((T + fraction(T, ((eW + gp) + (2 * gq)), 5)) + fraction(T, go, (gn * 5)))
1224- }
1225-
1226-
1227-func gr (b,gs,gt) = {
1228- let gu = if ((gs == cw))
1229- then $Tuple2(gt, valueOrElse(getString(aM(b)), ""))
1230- else {
1231- let p = valueOrErrorMessage(getString(aM(b)), "You don't have a duck staked")
1232- let gv = valueOrElse(getString(aO(p)), W)
1233- let gw = split(value(gv), "_")
1234- if ((gw[aU] != "L"))
1235- then throw((("Duck location type is " + gw[aU]) + ", but should be L"))
1236- else $Tuple2(gw[aV], p)
1237- }
1238- let aE = gu._1
1239- let gx = gu._2
1240- let gy = value(assetInfo(fromBase58String(aE)))
1241- let gz = aw(aE)
1242- let gA = valueOrErrorMessage(getInteger(gz), (("Land " + gy.name) + " is not staked"))
1243- let gB = valueOrErrorMessage(getString(at(aE)), (("NFT " + gy.name) + " is orphaned"))
1244- if ((gB != b))
1237+func gq (fR,fS,fZ,ga) = {
1238+ let aT = toString(fR)
1239+ let eG = fY(aT, fZ, ga)
1240+ let gk = aQ(eG._2)
1241+ let eK = aO(eG._2)
1242+ let fv = eJ(eK)
1243+ let gr = split(fv[ar], "_")
1244+ let gs = makeString(cX(true, gr, cd), "_")
1245+ let dt = de(fv[as], eG._5)
1246+ if ((0 >= eG._1))
1247+ then $Tuple3([IntegerEntry(gk, 0), StringEntry(eK, makeString([fv[ap], fv[aq], fv[ar], dt], ":"))], "", 0)
1248+ else {
1249+ let gt = fQ(fR, fS)
1250+ let fX = gt._2._1
1251+ $Tuple3((((gt._1 :+ StringEntry(aP(eG._2), makeString([gt._2._2, "L", fX], "_"))) :+ IntegerEntry(gk, eG._1)) :+ StringEntry(eK, makeString([fv[ap], fv[aq], gs, dt], ":"))), fX, eG._3)
1252+ }
1253+ }
1254+
1255+
1256+func gu (aF,gv) = {
1257+ let fe = valueOrElse(getInteger(ay(aF)), 0)
1258+ let gw = valueOrElse(getInteger(az(R, aF)), 0)
1259+ let gx = (fe / 6)
1260+ let gy = (fe / 7)
1261+ ((T + fraction(T, ((fe + gx) + (2 * gy)), 5)) + fraction(T, gw, (gv * 5)))
1262+ }
1263+
1264+
1265+func gz (b,gA,gB) = {
1266+ let gC = if ((gA == cx))
1267+ then $Tuple2(gB, valueOrElse(getString(aN(b)), ""))
1268+ else {
1269+ let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked")
1270+ let gD = valueOrElse(getString(aP(p)), W)
1271+ let gE = split(value(gD), "_")
1272+ if ((gE[aV] != "L"))
1273+ then throw((("Duck location type is " + gE[aV]) + ", but should be L"))
1274+ else $Tuple2(gE[aW], p)
1275+ }
1276+ let aF = gC._1
1277+ let gF = gC._2
1278+ let gG = value(assetInfo(fromBase58String(aF)))
1279+ let gH = ax(aF)
1280+ let gI = valueOrErrorMessage(getInteger(gH), (("Land " + gG.name) + " is not staked"))
1281+ let gJ = valueOrErrorMessage(getString(au(aF)), (("NFT " + gG.name) + " is orphaned"))
1282+ if ((gJ != b))
12451283 then throw((P + " is not yours"))
12461284 else {
1247- let gC = split(gy.description, "_")
1248- $Tuple4(gx, aE, gC, gA)
1249- }
1250- }
1251-
1252-
1253-func gD (b,fj,gs,gt) = if ((0 > fj))
1285+ let gK = split(gG.description, "_")
1286+ $Tuple4(gF, aF, gK, gI)
1287+ }
1288+ }
1289+
1290+
1291+func gL (b,fr,gA,gB) = if ((0 > fr))
12541292 then throw("Negative amount")
12551293 else {
1256- let gE = gr(b, gs, gt)
1257- let bT = gE._3[bH]
1258- let dP = dV(gE._3[bI])
1259- let dZ = (lastBlock.timestamp - gE._4)
1260- if ((0 > dZ))
1261- then throw(((("Saved timestamp is in future, saved = " + toString(gE._4)) + ", current = ") + toString(lastBlock.timestamp)))
1294+ let dF = gz(b, gA, gB)
1295+ let bU = dF._3[bI]
1296+ let dX = ed(dF._3[bJ])
1297+ let eh = (lastBlock.timestamp - dF._4)
1298+ if ((0 > eh))
1299+ then throw(((("Saved timestamp is in future, saved = " + toString(dF._4)) + ", current = ") + toString(lastBlock.timestamp)))
12621300 else {
1263- let gn = bS(bT)
1264- let gF = gm(gE._2, gn)
1265- let gG = fraction(dZ, (gF * gn), U)
1266- if ((fj > gG))
1267- then throw(((("Not enough resources, available = " + toString(gG)) + ", requested = ") + toString(fj)))
1301+ let gv = bT(bU)
1302+ let gM = gu(dF._2, gv)
1303+ let gN = fraction(eh, (gM * gv), U)
1304+ if ((fr > gN))
1305+ then throw(((("Not enough resources, available = " + toString(gN)) + ", requested = ") + toString(fr)))
12681306 else {
1269- let gH = fraction((gG - fj), U, (gF * gn))
1270- let gI = (lastBlock.timestamp - gH)
1271- let eV = (gn / bi)
1272- let eh = ed(dP, (dZ - gH), eV, gF)
1273- let eU = aD(gE._2)
1274- let eW = valueOrElse(getInteger(ax(gE._2)), 0)
1275- let eH = eT(eU, eV, eW)
1276- let fc = split(eH[aj], "_")
1277- let ei = parseIntValue(fc[am])
1278- if (if ((gs == cw))
1279- then (fj > ei)
1307+ let gO = fraction((gN - fr), U, (gM * gv))
1308+ let gP = (lastBlock.timestamp - gO)
1309+ let fd = (gv / bj)
1310+ let ep = el(dX, (eh - gO), fd, gM)
1311+ let fc = aE(dF._2)
1312+ let fe = valueOrElse(getInteger(ay(dF._2)), 0)
1313+ let eP = fb(fc, fd, fe)
1314+ let fk = split(eP[ak], "_")
1315+ let eq = parseIntValue(fk[an])
1316+ if (if ((gA == cx))
1317+ then (fr > eq)
12801318 else false)
1281- then throw((("Only " + toString(ei)) + " space left in warehouse"))
1319+ then throw((("Only " + toString(eq)) + " space left in warehouse"))
12821320 else {
1283- let eC = aN(gE._1)
1284- let fn = eB(eC)
1285- let eg = split(fn[ap], "_")
1286- let ef = split(eH[ag], "_")
1287- let gJ = if ((gs == cw))
1288- then $Tuple4(dX(ef, dP, (dZ - gH), eV, gF), fn[ap], (parseIntValue(fc[al]) + eh._2), (parseIntValue(fc[am]) - eh._2))
1289- else if ((gs == cx))
1290- then $Tuple4(eH[ag], dX(eg, dP, (dZ - gH), eV, gF), parseIntValue(fc[al]), parseIntValue(fc[am]))
1321+ let eK = aO(dF._1)
1322+ let fv = eJ(eK)
1323+ let eo = split(fv[aq], "_")
1324+ let en = split(eP[ah], "_")
1325+ let gQ = if ((gA == cx))
1326+ then $Tuple4(ef(en, dX, (eh - gO), fd, gM), fv[aq], (parseIntValue(fk[am]) + ep._2), (parseIntValue(fk[an]) - ep._2))
1327+ else if ((gA == cy))
1328+ then $Tuple4(eP[ah], ef(eo, dX, (eh - gO), fd, gM), parseIntValue(fk[am]), parseIntValue(fk[an]))
12911329 else {
1292- let gK = ee(ef, eg, eh, ei)
1293- let gL = min([parseIntValue(fc[am]), eh._2])
1294- $Tuple4(gK._1, gK._2, (parseIntValue(fc[al]) + gL), (parseIntValue(fc[am]) - gL))
1330+ let gR = em(en, eo, ep, eq)
1331+ let gS = min([parseIntValue(fk[an]), ep._2])
1332+ $Tuple4(gR._1, gR._2, (parseIntValue(fk[am]) + gS), (parseIntValue(fk[an]) - gS))
12951333 }
1296- let gM = gJ._1
1297- let gN = gJ._2
1298- let gO = gJ._3
1299- let gP = gJ._4
1300- $Tuple5([IntegerEntry(aw(gE._2), gI), IntegerEntry(aA(P, gE._2, b), gI)], eC, [fn[ao], gN, fn[aq], fn[ar]], eU, [eH[af], gM, eH[ah], eH[ai], makeString([fc[ak], toString(gO), toString(gP), fc[an]], "_")])
1334+ let gT = gQ._1
1335+ let gU = gQ._2
1336+ let gV = gQ._3
1337+ let gW = gQ._4
1338+ $Tuple5([IntegerEntry(ax(dF._2), gP), IntegerEntry(aB(P, dF._2, b), gP)], eK, [fv[ap], gU, fv[ar], fv[as]], fc, [eP[ag], gT, eP[ai], eP[aj], makeString([fk[al], toString(gV), toString(gW), fk[ao]], "_")])
13011339 }
13021340 }
13031341 }
13041342 }
13051343
13061344
1307-func gQ (b,aE,gn,gs) = {
1308- let gz = aw(aE)
1309- let gA = value(getInteger(gz))
1310- let gG = (fraction((lastBlock.timestamp - gA), gm(aE, gn), U) * gn)
1311- gD(b, gG, gs, aE)
1312- }
1313-
1314-
1315-func gR (cX,fJ,gS,aE) = {
1316- let b = toString(fJ)
1317- let gE = gr(b, cy, aE)
1318- let gn = bS(gE._3[bH])
1319- let gT = ax(gE._2)
1320- let gU = valueOrElse(getInteger(gT), 0)
1321- if ((gU >= 3))
1345+func gX (b,aF,gv,gA) = {
1346+ let gH = ax(aF)
1347+ let gI = value(getInteger(gH))
1348+ let gN = (fraction((lastBlock.timestamp - gI), gu(aF, gv), U) * gv)
1349+ gL(b, gN, gA, aF)
1350+ }
1351+
1352+
1353+func gY (cY,fR,gZ,aF) = {
1354+ let b = toString(fR)
1355+ let dF = gz(b, cz, aF)
1356+ let gv = bT(dF._3[bI])
1357+ let ha = ay(dF._2)
1358+ let hb = valueOrElse(getInteger(ha), 0)
1359+ if ((hb >= 3))
13221360 then throw("Currently max infrastructure level = 3")
13231361 else {
1324- let O = (gU + 1)
1325- let gV = fraction(cb, (gn * O), bi)
1326- if (if (!(cX))
1327- then (gS != gV)
1362+ let O = (hb + 1)
1363+ let hc = fraction(cc, (gv * O), bj)
1364+ if (if (!(cY))
1365+ then (gZ != hc)
13281366 else false)
1329- then throw(("Payment attached should be " + toString(gV)))
1367+ then throw(("Payment attached should be " + toString(hc)))
13301368 else {
1331- let eC = aN(gE._1)
1332- let fn = eB(eC)
1333- let gj = split(fn[aq], "_")
1334- let gW = fraction(bd, (gn * O), bi)
1335- let gk = makeString(cW(cX, gj, gW), "_")
1336- let gX = gQ(b, gE._2, gn, cy)
1337- let gY = gX._5
1338- let gZ = eE(gY[af])
1339- let ha = makeString([split(gY[af], "_")[0], toString(O)], "_")
1340- let hb = eE(ha)
1341- let fc = split(gY[aj], "_")
1342- let hc = makeString([fc[ak], fc[al], toString(((parseIntValue(fc[am]) + hb) - gZ)), toString(hb)], "_")
1343- $Tuple3(([IntegerEntry(gT, O), IntegerEntry(cq(gE._2, b), O), StringEntry(eC, makeString([fn[ao], gX._3[ap], gk, fn[ar]], ":")), StringEntry(gX._4, makeString([ha, gY[ag], gY[ah], gY[ai], hc], ":"))] ++ gX._1), O, gW)
1369+ let eK = aO(dF._1)
1370+ let fv = eJ(eK)
1371+ let gr = split(fv[ar], "_")
1372+ let hd = fraction(be, (gv * O), bj)
1373+ let gs = makeString(cX(cY, gr, hd), "_")
1374+ let he = gX(b, dF._2, gv, cz)
1375+ let hf = he._5
1376+ let hg = eM(hf[ag])
1377+ let hh = makeString([split(hf[ag], "_")[0], toString(O)], "_")
1378+ let hi = eM(hh)
1379+ let fk = split(hf[ak], "_")
1380+ let hj = makeString([fk[al], fk[am], toString(((parseIntValue(fk[an]) + hi) - hg)), toString(hi)], "_")
1381+ $Tuple3(([IntegerEntry(ha, O), IntegerEntry(cr(dF._2, b), O), StringEntry(eK, makeString([fv[ap], he._3[aq], gs, fv[as]], ":")), StringEntry(he._4, makeString([hh, hf[ah], hf[ai], hf[aj], hj], ":"))] ++ he._1), O, hd)
13441382 }
13451383 }
13461384 }
13471385
13481386
1349-func hd (p,he) = if (!(aY))
1387+func hk (p,hl) = if (!(aZ))
13501388 then $Tuple2(nil, 0)
13511389 else {
1352- let hf = r(p)
1353- let hg = q(p)
1354- let I = valueOrElse(getInteger(bC, hg), 0)
1355- let N = (I + he)
1356- let hh = L(valueOrElse(getInteger(bC, hf), 0), N)
1357- let hi = s(p)
1358- $Tuple2([IntegerEntry(hf, hh[0]), IntegerEntry(hg, N), IntegerEntry(hi, (valueOrElse(getInteger(hi), 0) + hh[1]))], N)
1390+ let hm = r(p)
1391+ let hn = q(p)
1392+ let I = valueOrElse(getInteger(bD, hn), 0)
1393+ let N = (I + hl)
1394+ let ho = L(valueOrElse(getInteger(bD, hm), 0), N)
1395+ let hp = s(p)
1396+ $Tuple2([IntegerEntry(hm, ho[0]), IntegerEntry(hn, N), IntegerEntry(hp, (valueOrElse(getInteger(hp), 0) + ho[1]))], N)
13591397 }
13601398
13611399
1362-func hj (b,he) = if (!(aY))
1400+func hq (b,hl) = if (!(aZ))
13631401 then $Tuple2(nil, 0)
13641402 else {
1365- let hf = v(b)
1366- let hg = u(b)
1367- let I = valueOrElse(getInteger(bC, hg), 0)
1368- let N = (I + he)
1369- let hh = L(valueOrElse(getInteger(bC, hf), 0), N)
1370- let hi = w(b)
1371- $Tuple2([IntegerEntry(hf, hh[0]), IntegerEntry(hg, N), IntegerEntry(hi, (valueOrElse(getInteger(hi), 0) + hh[1]))], N)
1403+ let hm = v(b)
1404+ let hn = u(b)
1405+ let I = valueOrElse(getInteger(bD, hn), 0)
1406+ let N = (I + hl)
1407+ let ho = L(valueOrElse(getInteger(bD, hm), 0), N)
1408+ let hp = w(b)
1409+ $Tuple2([IntegerEntry(hm, ho[0]), IntegerEntry(hn, N), IntegerEntry(hp, (valueOrElse(getInteger(hp), 0) + ho[1]))], N)
13721410 }
13731411
13741412
1375-func hk (b) = {
1376- let p = valueOrErrorMessage(getString(aM(b)), "You don't have a duck staked")
1377- let hl = aH(b)
1378- let hm = getString(hl)
1379- if (!(isDefined(hm)))
1413+func hr (b) = {
1414+ let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked")
1415+ let hs = aI(b)
1416+ let ht = getString(hs)
1417+ if (!(isDefined(ht)))
13801418 then throw("You are not eligible for ONBOARD artifact")
13811419 else {
1382- let hn = aJ(b)
1383- let ho = getString(hn)
1384- if (isDefined(ho))
1385- then throw(("You already used your ONBOARD artifact on duck " + value(ho)))
1420+ let hu = aK(b)
1421+ let hv = getString(hu)
1422+ if (isDefined(hv))
1423+ then throw(("You already used your ONBOARD artifact on duck " + value(hv)))
13861424 else {
1387- let hp = aI(p)
1388- let hq = getString(hp)
1389- if (isDefined(hq))
1390- then throw(((("The duck " + p) + " already got points from ONBOARD artifact from user ") + value(hq)))
1391- else ([StringEntry(hn, p), StringEntry(hp, b)] ++ hd(p, F)._1)
1425+ let hw = aJ(p)
1426+ let hx = getString(hw)
1427+ if (isDefined(hx))
1428+ then throw(((("The duck " + p) + " already got points from ONBOARD artifact from user ") + value(hx)))
1429+ else ([StringEntry(hu, p), StringEntry(hw, b)] ++ hk(p, F)._1)
13921430 }
13931431 }
13941432 }
13951433
13961434
1397-func hr (b,gt) = {
1398- let gE = gr(b, cy, gt)
1399- let aE = gE._2
1400- let gn = bS(gE._3[bH])
1401- let hs = ay(R, aE)
1402- if ((valueOrElse(getInteger(hs), 0) > 0))
1435+func hy (b,gB) = {
1436+ let dF = gz(b, cz, gB)
1437+ let aF = dF._2
1438+ let gv = bT(dF._3[bI])
1439+ let hz = az(R, aF)
1440+ if ((valueOrElse(getInteger(hz), 0) > 0))
14031441 then throw("Presale artifact is already activated")
1404- else if ((parseIntValue(gE._3[bG]) > ck))
1405- then throw((((P + " ") + aE) + " is not eligible for presale artifact"))
1442+ else if ((parseIntValue(dF._3[bH]) > cl))
1443+ then throw((((P + " ") + aF) + " is not eligible for presale artifact"))
14061444 else {
1407- let gX = gQ(b, aE, gn, cy)
1408- ((((gX._1 :+ IntegerEntry(hs, gn)) :+ IntegerEntry(cr(R, aE, b), gn)) :+ StringEntry(gX._2, makeString(gX._3, ":"))) :+ StringEntry(gX._4, makeString(gX._5, ":")))
1445+ let he = gX(b, aF, gv, cz)
1446+ ((((he._1 :+ IntegerEntry(hz, gv)) :+ IntegerEntry(cs(R, aF, b), gv)) :+ StringEntry(he._2, makeString(he._3, ":"))) :+ StringEntry(he._4, makeString(he._5, ":")))
14091447 }
14101448 }
14111449
14121450
1413-func ht (hu,O,hv,b,hw,fK,hx) = {
1414- let p = valueOrErrorMessage(getString(aM(b)), "You don't have a duck staked")
1415- func hy (cK,aE) = {
1416- let gy = value(assetInfo(fromBase58String(aE)))
1417- let gz = aw(aE)
1418- let gA = valueOrErrorMessage(getInteger(gz), (("NFT " + gy.name) + " is not staked"))
1419- let gB = valueOrErrorMessage(getString(at(aE)), (("NFT " + gy.name) + " is orphaned"))
1420- if ((gB != b))
1451+func hA (hB,O,hC,b,hD,fS,hE) = {
1452+ let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked")
1453+ func hF (cL,aF) = {
1454+ let gG = value(assetInfo(fromBase58String(aF)))
1455+ let gH = ax(aF)
1456+ let gI = valueOrErrorMessage(getInteger(gH), (("NFT " + gG.name) + " is not staked"))
1457+ let gJ = valueOrErrorMessage(getString(au(aF)), (("NFT " + gG.name) + " is orphaned"))
1458+ if ((gJ != b))
14211459 then throw((P + " is not yours"))
14221460 else {
1423- let gC = split(gy.description, "_")
1424- let fN = gC[bJ]
1425- if (if ((cK._3 != ""))
1426- then (cK._3 != fN)
1461+ let gK = split(gG.description, "_")
1462+ let fV = gK[bK]
1463+ if (if ((cL._3 != ""))
1464+ then (cL._3 != fV)
14271465 else false)
14281466 then throw("Lands should be on the same continent to merge")
14291467 else {
1430- let bT = gC[bH]
1431- let hz = cK._1
1432- let dT = valueOrErrorMessage(indexOf(hz, bT), "You haven't passed all the lands needed")
1433- let hA = (take(hz, dT) + drop(hz, (dT + 1)))
1434- let gn = bS(bT)
1435- let hB = (cK._2 + valueOrElse(getInteger(ay(R, aE)), 0))
1436- let eW = valueOrElse(getInteger(ax(aE)), 0)
1437- let hC = {
1438- let bb = bT
1439- if (("S" == bb))
1468+ let bU = gK[bI]
1469+ let hG = cL._1
1470+ let eb = valueOrErrorMessage(indexOf(hG, bU), "You haven't passed all the lands needed")
1471+ let hH = (take(hG, eb) + drop(hG, (eb + 1)))
1472+ let gv = bT(bU)
1473+ let hI = (cL._2 + valueOrElse(getInteger(az(R, aF)), 0))
1474+ let fe = valueOrElse(getInteger(ay(aF)), 0)
1475+ let hJ = {
1476+ let bc = bU
1477+ if (("S" == bc))
14401478 then 3
1441- else if (("M" == bb))
1479+ else if (("M" == bc))
14421480 then 4
1443- else if (("L" == bb))
1481+ else if (("L" == bc))
14441482 then 5
1445- else if (("XL" == bb))
1483+ else if (("XL" == bc))
14461484 then 6
14471485 else throw("Only S, M, L, XL can merge")
14481486 }
1449- if ((eW != hC))
1487+ if ((fe != hJ))
14501488 then throw("All lands should be maxed to merge")
14511489 else {
1452- let cn = gC[bG]
1453- let dP = dV(gC[bI])
1454- let dZ = (lastBlock.timestamp - gA)
1455- if ((0 > dZ))
1456- then throw(((("Saved timestamp is in future, saved = " + toString(gA)) + ", current = ") + toString(lastBlock.timestamp)))
1490+ let co = gK[bH]
1491+ let dX = ed(gK[bJ])
1492+ let eh = (lastBlock.timestamp - gI)
1493+ if ((0 > eh))
1494+ then throw(((("Saved timestamp is in future, saved = " + toString(gI)) + ", current = ") + toString(lastBlock.timestamp)))
14571495 else {
1458- let gF = gm(aE, gn)
1459- let eV = (gn / bi)
1460- let gN = dX(split(cK._4, "_"), dP, dZ, eV, gF)
1461- let cU = dN(split(cK._6, "_"), dP, eV, -1)
1462- let hD = cK._7
1463- let bA = indexOf(hD, aE)
1464- if (!(isDefined(bA)))
1465- then throw(("Your staked lands don't contain " + aE))
1496+ let gM = gu(aF, gv)
1497+ let fd = (gv / bj)
1498+ let gU = ef(split(cL._4, "_"), dX, eh, fd, gM)
1499+ let cV = dV(split(cL._6, "_"), dX, fd, -1)
1500+ let hK = cL._7
1501+ let bB = indexOf(hK, aF)
1502+ if (!(isDefined(bB)))
1503+ then throw(("Your staked lands don't contain " + aF))
14661504 else {
1467- let hE = av(aE)
1468- let hF = valueOrElse(getString(hE), "")
1469- $Tuple8(hA, hB, fN, gN, (((((((((((((cK._5 :+ DeleteEntry(aw(aE))) :+ DeleteEntry(aA(P, aE, b))) :+ DeleteEntry(cm(cn))) :+ DeleteEntry(at(aE))) :+ DeleteEntry(ax(aE))) :+ DeleteEntry(cq(aE, b))) :+ DeleteEntry(ay(R, aE))) :+ DeleteEntry(cr(R, aE, b))) :+ DeleteEntry(cs(cn))) :+ DeleteEntry(aD(aE))) :+ DeleteEntry(hE)) :+ DeleteEntry(co(hF))) :+ Burn(fromBase58String(aE), 1)), cU, removeByIndex(hD, value(bA)), (cK._8 + gn))
1505+ let hL = aw(aF)
1506+ let hM = valueOrElse(getString(hL), "")
1507+ $Tuple8(hH, hI, fV, gU, (((((((((((((cL._5 :+ DeleteEntry(ax(aF))) :+ DeleteEntry(aB(P, aF, b))) :+ DeleteEntry(cn(co))) :+ DeleteEntry(au(aF))) :+ DeleteEntry(ay(aF))) :+ DeleteEntry(cr(aF, b))) :+ DeleteEntry(az(R, aF))) :+ DeleteEntry(cs(R, aF, b))) :+ DeleteEntry(ct(co))) :+ DeleteEntry(aE(aF))) :+ DeleteEntry(hL)) :+ DeleteEntry(cp(hM))) :+ Burn(fromBase58String(aF), 1)), cV, removeByIndex(hK, value(bB)), (cL._8 + gv))
14701508 }
14711509 }
14721510 }
14741512 }
14751513 }
14761514
1477- let eC = aN(p)
1478- let fn = eB(eC)
1479- let hG = valueOrElse(getString(bK()), "0_0_0_0_0_0")
1480- let hH = bL(b)
1481- let hI = getString(hH)
1482- let hJ = if (isDefined(hI))
1483- then split_51C(value(hI), "_")
1515+ let eK = aO(p)
1516+ let fv = eJ(eK)
1517+ let hN = valueOrElse(getString(bL()), "0_0_0_0_0_0")
1518+ let hO = bM(b)
1519+ let hP = getString(hO)
1520+ let hQ = if (isDefined(hP))
1521+ then split_51C(value(hP), "_")
14841522 else nil
1485- let cV = {
1486- let cM = hw
1487- let cN = size(cM)
1488- let cO = $Tuple8(hv, 0, "", fn[ap], nil, hG, hJ, 0)
1489- func cP (cQ,cR) = if ((cR >= cN))
1490- then cQ
1491- else hy(cQ, cM[cR])
1492-
1493- func cS (cQ,cR) = if ((cR >= cN))
1494- then cQ
1523+ let cW = {
1524+ let cN = hD
1525+ let cO = size(cN)
1526+ let cP = $Tuple8(hC, 0, "", fv[aq], nil, hN, hQ, 0)
1527+ func cQ (cR,cS) = if ((cS >= cO))
1528+ then cR
1529+ else hF(cR, cN[cS])
1530+
1531+ func cT (cR,cS) = if ((cS >= cO))
1532+ then cR
14951533 else throw("List size exceeds 5")
14961534
1497- cS(cP(cP(cP(cP(cP(cO, 0), 1), 2), 3), 4), 5)
1535+ cT(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5)
14981536 }
1499- let fN = cV._3
1500- let ex = valueOrErrorMessage(indexOf(aa, fN), ("Unknown continent: " + fN))
1501- let dW = ev(eo(toBigInt(fK)), ex)
1502- let fM = valueOrElse(getInteger(cl()), (ck + 1))
1503- let hK = toString(fM)
1504- let fO = Issue(cD(hK, hu), makeString([hK, hu, dW, fN], "_"), 1, 0, false)
1505- let au = calculateAssetId(fO)
1506- let hL = toBase58String(au)
1507- let gk = makeString(cW((hx > 0), split(fn[aq], "_"), hx), "_")
1508- let hM = bM(b)
1509- let hN = valueOrElse(getInteger(hM), 0)
1510- $Tuple2((((((((((((((((cV._5 :+ (if ((size(cV._7) > 0))
1511- then StringEntry(hH, makeString_11C(cV._7, "_"))
1512- else DeleteEntry(hH))) :+ IntegerEntry(hM, if ((cV._8 > hN))
1537+ let fV = cW._3
1538+ let eF = valueOrErrorMessage(indexOf(aa, fV), ("Unknown continent: " + fV))
1539+ let ee = eD(ew(toBigInt(fS)), eF)
1540+ let fU = valueOrElse(getInteger(cm()), (cl + 1))
1541+ let hR = toString(fU)
1542+ let fW = Issue(cE(hR, hB), makeString([hR, hB, ee, fV], "_"), 1, 0, false)
1543+ let av = calculateAssetId(fW)
1544+ let hS = toBase58String(av)
1545+ let gs = makeString(cX((hE > 0), split(fv[ar], "_"), hE), "_")
1546+ let hT = bN(b)
1547+ let hU = valueOrElse(getInteger(hT), 0)
1548+ $Tuple2((((((((((((((((cW._5 :+ (if ((size(cW._7) > 0))
1549+ then StringEntry(hO, makeString_11C(cW._7, "_"))
1550+ else DeleteEntry(hO))) :+ IntegerEntry(hT, if ((cW._8 > hU))
15131551 then 0
1514- else (hN - cV._8))) :+ IntegerEntry(cl(), (fM + 1))) :+ fO) :+ StringEntry(cm(hK), hL)) :+ StringEntry(at(hL), b)) :+ StringEntry(cs(hK), b)) :+ IntegerEntry(ay(R, hL), cV._2)) :+ IntegerEntry(cr(R, hL, b), cV._2)) :+ IntegerEntry(ax(hL), O)) :+ IntegerEntry(cq(hL, b), O)) :+ StringEntry(eC, makeString([fn[ao], cV._4, gk, fn[ar]], ":"))) :+ StringEntry(bK(), cV._6)) :+ StringEntry(aO(p), makeString([fN, "L", hL], "_"))) :+ ScriptTransfer(addressFromStringValue(b), 1, au)), hL)
1515- }
1516-
1517-
1518-func hO (b,hw,fK) = ht("M", 3, "SSSS", b, hw, fK, 0)
1519-
1520-
1521-func hP (b,hw,fK,cX,gS) = {
1522- let gV = (cb * 4)
1523- if (if (!(cX))
1524- then (gS != gV)
1552+ else (hU - cW._8))) :+ IntegerEntry(cm(), (fU + 1))) :+ fW) :+ StringEntry(cn(hR), hS)) :+ StringEntry(au(hS), b)) :+ StringEntry(ct(hR), b)) :+ IntegerEntry(az(R, hS), cW._2)) :+ IntegerEntry(cs(R, hS, b), cW._2)) :+ IntegerEntry(ay(hS), O)) :+ IntegerEntry(cr(hS, b), O)) :+ StringEntry(eK, makeString([fv[ap], cW._4, gs, fv[as]], ":"))) :+ StringEntry(bL(), cW._6)) :+ StringEntry(aP(p), makeString([fV, "L", hS], "_"))) :+ ScriptTransfer(addressFromStringValue(b), 1, av)), hS)
1553+ }
1554+
1555+
1556+func hV (b,hD,fS) = hA("M", 3, "SSSS", b, hD, fS, 0)
1557+
1558+
1559+func hW (b,hD,fS,cY,gZ) = {
1560+ let hc = (cc * 4)
1561+ if (if (!(cY))
1562+ then (gZ != hc)
15251563 else false)
1526- then throw(("Payment attached should be " + toString(gV)))
1527- else ht("L", 4, "SMM", b, hw, fK, (bd * 4))
1528- }
1529-
1530-
1531-func hQ (b,hw,fK,cX,gS) = {
1532- let gV = (cb * 47)
1533- if (if (!(cX))
1534- then (gS != gV)
1564+ then throw(("Payment attached should be " + toString(hc)))
1565+ else hA("L", 4, "SMM", b, hD, fS, (be * 4))
1566+ }
1567+
1568+
1569+func hX (b,hD,fS,cY,gZ) = {
1570+ let hc = (cc * 47)
1571+ if (if (!(cY))
1572+ then (gZ != hc)
15351573 else false)
1536- then throw(("Payment attached should be " + toString(gV)))
1537- else ht("XL", 5, "SSSML", b, hw, fK, (bd * 47))
1538- }
1539-
1540-
1541-func hR (b,hw,fK,cX,gS) = {
1542- let gV = (cb * 54)
1543- if (if (!(cX))
1544- then (gS != gV)
1574+ then throw(("Payment attached should be " + toString(hc)))
1575+ else hA("XL", 5, "SSSML", b, hD, fS, (be * 47))
1576+ }
1577+
1578+
1579+func hY (b,hD,fS,cY,gZ) = {
1580+ let hc = (cc * 54)
1581+ if (if (!(cY))
1582+ then (gZ != hc)
15451583 else false)
1546- then throw(("Payment attached should be " + toString(gV)))
1547- else ht("XXL", 6, "LXL", b, hw, fK, (bd * 54))
1548- }
1549-
1550-
1551-func hS (cX,b,gS,hw,fK) = {
1552- let hT = {
1553- let bb = size(hw)
1554- if ((4 == bb))
1555- then hO(b, hw, fK)
1556- else if ((3 == bb))
1557- then hP(b, hw, fK, cX, gS)
1558- else if ((5 == bb))
1559- then hQ(b, hw, fK, cX, gS)
1560- else if ((2 == bb))
1561- then hR(b, hw, fK, cX, gS)
1584+ then throw(("Payment attached should be " + toString(hc)))
1585+ else hA("XXL", 6, "LXL", b, hD, fS, (be * 54))
1586+ }
1587+
1588+
1589+func hZ (cY,b,gZ,hD,fS) = {
1590+ let ia = {
1591+ let bc = size(hD)
1592+ if ((4 == bc))
1593+ then hV(b, hD, fS)
1594+ else if ((3 == bc))
1595+ then hW(b, hD, fS, cY, gZ)
1596+ else if ((5 == bc))
1597+ then hX(b, hD, fS, cY, gZ)
1598+ else if ((2 == bc))
1599+ then hY(b, hD, fS, cY, gZ)
15621600 else throw("Unknown merge")
15631601 }
1564- hT
1565- }
1566-
1567-
1568-func hU (dT) = if (if ((dT.originCaller != bB))
1569- then valueOrElse(getBoolean(aQ()), false)
1602+ ia
1603+ }
1604+
1605+
1606+func ib (eb) = if (if ((eb.originCaller != bC))
1607+ then valueOrElse(getBoolean(aR()), false)
15701608 else false)
15711609 then throw("Contracts are under maintenance")
1572- else StringEntry(as(toString(dT.originCaller)), toBase58String(dT.transactionId))
1573-
1574-
1575-@Callable(dT)
1576-func constructorV1 (hV) = if ((dT.caller != this))
1610+ else StringEntry(at(toString(eb.originCaller)), toBase58String(eb.transactionId))
1611+
1612+
1613+@Callable(eb)
1614+func constructorV1 (ic) = if ((eb.caller != this))
15771615 then throw("Permission denied")
1578- else [StringEntry(bv(), hV)]
1579-
1580-
1581-
1582-@Callable(dT)
1583-func setBlocked (hW) = if ((dT.caller != this))
1616+ else [StringEntry(bw(), ic)]
1617+
1618+
1619+
1620+@Callable(eb)
1621+func setBlocked (id) = if ((eb.caller != this))
15841622 then throw("permission denied")
1585- else [BooleanEntry(aQ(), hW)]
1586-
1587-
1588-
1589-@Callable(dT)
1623+ else [BooleanEntry(aR(), id)]
1624+
1625+
1626+
1627+@Callable(eb)
15901628 func stakeLand () = {
1591- let hX = hU(dT)
1592- if ((size(dT.payments) != 1))
1629+ let ie = ib(eb)
1630+ if ((size(eb.payments) != 1))
15931631 then throw("Exactly one payment required")
15941632 else {
1595- let hY = value(dT.payments[0])
1596- let au = value(hY.assetId)
1597- let bo = toString(dT.caller)
1598- if ((hY.amount != 1))
1633+ let if = value(eb.payments[0])
1634+ let av = value(if.assetId)
1635+ let bp = toString(eb.caller)
1636+ if ((if.amount != 1))
15991637 then throw((("NFT " + P) + " token should be attached as payment"))
16001638 else {
1601- let gy = value(assetInfo(au))
1602- if ((gy.issuer != this))
1639+ let gG = value(assetInfo(av))
1640+ if ((gG.issuer != this))
16031641 then throw("Unknown issuer of token")
1604- else if (!(contains(gy.name, P)))
1642+ else if (!(contains(gG.name, P)))
16051643 then throw((("Only NFT " + P) + " tokens are accepted"))
16061644 else {
1607- let hZ = drop(gy.name, 4)
1608- let cn = if (contains(hZ, "XXL"))
1609- then dropRight(hZ, 3)
1610- else if (contains(hZ, "XL"))
1611- then dropRight(hZ, 2)
1612- else dropRight(hZ, 1)
1613- if (!(isDefined(parseInt(cn))))
1614- then throw(("Cannot parse land number from " + gy.name))
1645+ let ig = drop(gG.name, 4)
1646+ let co = if (contains(ig, "XXL"))
1647+ then dropRight(ig, 3)
1648+ else if (contains(ig, "XL"))
1649+ then dropRight(ig, 2)
1650+ else dropRight(ig, 1)
1651+ if (!(isDefined(parseInt(co))))
1652+ then throw(("Cannot parse land number from " + gG.name))
16151653 else {
1616- let aE = toBase58String(au)
1617- let gz = aw(aE)
1618- if (isDefined(getInteger(gz)))
1619- then throw((("NFT " + gy.name) + " is already staked"))
1654+ let aF = toBase58String(av)
1655+ let gH = ax(aF)
1656+ if (isDefined(getInteger(gH)))
1657+ then throw((("NFT " + gG.name) + " is already staked"))
16201658 else {
1621- let gC = split(gy.description, "_")
1622- let dP = dV(gC[bI])
1623- let gn = bS(gC[bH])
1624- let cU = dU(dP, (gn / bi), 1)
1625- let go = valueOrElse(getInteger(ay(R, aE)), 0)
1626- let hH = bL(bo)
1627- let hI = getString(hH)
1628- let hD = if (isDefined(hI))
1629- then split_51C(value(hI), "_")
1659+ let gK = split(gG.description, "_")
1660+ let dX = ed(gK[bJ])
1661+ let gv = bT(gK[bI])
1662+ let cV = ec(dX, (gv / bj), 1)
1663+ let gw = valueOrElse(getInteger(az(R, aF)), 0)
1664+ let hO = bM(bp)
1665+ let hP = getString(hO)
1666+ let hK = if (isDefined(hP))
1667+ then split_51C(value(hP), "_")
16301668 else nil
1631- if (containsElement(hD, aE))
1632- then throw(("Your staked lands already contain " + aE))
1669+ if (containsElement(hK, aF))
1670+ then throw(("Your staked lands already contain " + aF))
16331671 else {
1634- let eW = valueOrElse(getInteger(ax(aE)), 0)
1635- let hM = bM(bo)
1636- let ia = valueOrElse(getInteger(hM), 0)
1637- let ib = bQ(invoke(bF, "onStakeUnstakeLand", [bo], nil))
1638- $Tuple2([IntegerEntry(gz, lastBlock.timestamp), IntegerEntry(aA(P, aE, bo), lastBlock.timestamp), StringEntry(hH, makeString_11C((hD :+ aE), "_")), IntegerEntry(hM, (ia + gn)), StringEntry(at(aE), bo), StringEntry(cs(cn), bo), IntegerEntry(cr(R, aE, bo), go), IntegerEntry(cq(aE, bo), eW), StringEntry(bK(), cU), hX], ib)
1672+ let fe = valueOrElse(getInteger(ay(aF)), 0)
1673+ let hT = bN(bp)
1674+ let ih = valueOrElse(getInteger(hT), 0)
1675+ let ii = bR(invoke(bG, "onStakeUnstakeLand", [bp], nil))
1676+ $Tuple2([IntegerEntry(gH, lastBlock.timestamp), IntegerEntry(aB(P, aF, bp), lastBlock.timestamp), StringEntry(hO, makeString_11C((hK :+ aF), "_")), IntegerEntry(hT, (ih + gv)), StringEntry(au(aF), bp), StringEntry(ct(co), bp), IntegerEntry(cs(R, aF, bp), gw), IntegerEntry(cr(aF, bp), fe), StringEntry(bL(), cV), ie], ii)
16391677 }
16401678 }
16411679 }
16461684
16471685
16481686
1649-@Callable(dT)
1650-func unstakeLand (gt) = {
1651- let hX = hU(dT)
1652- if ((size(dT.payments) != 0))
1687+@Callable(eb)
1688+func unstakeLand (gB) = {
1689+ let ie = ib(eb)
1690+ if ((size(eb.payments) != 0))
16531691 then throw("No payments required")
16541692 else {
1655- let b = toString(dT.caller)
1656- let gE = gr(b, cx, gt)
1657- let aE = gE._2
1658- let hH = bL(b)
1659- let dP = dV(gE._3[bI])
1660- let gn = bS(gE._3[bH])
1661- let cU = dU(dP, (gn / bi), -1)
1662- let gX = gQ(b, aE, gn, cx)
1663- let hD = split_51C(valueOrElse(getString(hH), ""), "_")
1664- let bA = indexOf(hD, aE)
1665- if (!(isDefined(bA)))
1666- then throw(("Your staked lands don't contain " + aE))
1693+ let b = toString(eb.caller)
1694+ let dF = gz(b, cy, gB)
1695+ let aF = dF._2
1696+ let hO = bM(b)
1697+ let dX = ed(dF._3[bJ])
1698+ let gv = bT(dF._3[bI])
1699+ let cV = ec(dX, (gv / bj), -1)
1700+ let he = gX(b, aF, gv, cy)
1701+ let hK = split_51C(valueOrElse(getString(hO), ""), "_")
1702+ let bB = indexOf(hK, aF)
1703+ if (!(isDefined(bB)))
1704+ then throw(("Your staked lands don't contain " + aF))
16671705 else {
1668- let ic = lastBlock.timestamp
1669- let id = valueOrElse(getInteger(bE, aR(b)), 0)
1670- if ((id >= ic))
1671- then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(id)))
1706+ let ij = lastBlock.timestamp
1707+ let ik = valueOrElse(getInteger(bF, aS(b)), 0)
1708+ if ((ik >= ij))
1709+ then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(ik)))
16721710 else {
1673- let ie = (valueOrElse(getInteger(bF, a(b)), 0) + be)
1674- if ((ie > ic))
1675- then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString(ie)))
1711+ let il = (valueOrElse(getInteger(bG, a(b)), 0) + bf)
1712+ if ((il > ij))
1713+ then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString(il)))
16761714 else {
1677- let hM = bM(b)
1678- let hN = valueOrElse(getInteger(hM), 0)
1679- let if = if ((gn > hN))
1715+ let hT = bN(b)
1716+ let hU = valueOrElse(getInteger(hT), 0)
1717+ let im = if ((gv > hU))
16801718 then 0
1681- else (hN - gn)
1682- let ib = bQ(invoke(bF, "onStakeUnstakeLand", [b], nil))
1683- $Tuple2([ScriptTransfer(dT.caller, 1, fromBase58String(aE)), DeleteEntry(aw(aE)), DeleteEntry(aA(P, aE, b)), StringEntry(bK(), cU), StringEntry(gX._2, makeString(gX._3, ":")), if ((size(hD) > 1))
1684- then StringEntry(hH, makeString_11C(removeByIndex(hD, value(bA)), "_"))
1685- else DeleteEntry(hH), IntegerEntry(hM, if), hX], ib)
1719+ else (hU - gv)
1720+ let ii = bR(invoke(bG, "onStakeUnstakeLand", [b], nil))
1721+ $Tuple2([ScriptTransfer(eb.caller, 1, fromBase58String(aF)), DeleteEntry(ax(aF)), DeleteEntry(aB(P, aF, b)), StringEntry(bL(), cV), StringEntry(he._2, makeString(he._3, ":")), if ((size(hK) > 1))
1722+ then StringEntry(hO, makeString_11C(removeByIndex(hK, value(bB)), "_"))
1723+ else DeleteEntry(hO), IntegerEntry(hT, im), ie], ii)
16861724 }
16871725 }
16881726 }
16911729
16921730
16931731
1694-@Callable(dT)
1732+@Callable(eb)
16951733 func stakeDuck () = {
1696- let hX = hU(dT)
1697- if ((size(dT.payments) != 1))
1734+ let ie = ib(eb)
1735+ if ((size(eb.payments) != 1))
16981736 then throw("Exactly one payment required")
16991737 else {
1700- let hY = value(dT.payments[0])
1701- let au = value(hY.assetId)
1702- let bo = toString(dT.caller)
1703- if ((hY.amount != 1))
1738+ let if = value(eb.payments[0])
1739+ let av = value(if.assetId)
1740+ let bp = toString(eb.caller)
1741+ if ((if.amount != 1))
17041742 then throw((("NFT " + Q) + " token should be attached as payment"))
17051743 else {
1706- let gy = value(assetInfo(au))
1707- if (if ((gy.issuer != bU))
1708- then (gy.issuer != bV)
1744+ let gG = value(assetInfo(av))
1745+ if (if ((gG.issuer != bV))
1746+ then (gG.issuer != bW)
17091747 else false)
17101748 then throw((("Unknown issuer of " + Q) + " token"))
1711- else if (!(contains(gy.name, Q)))
1749+ else if (!(contains(gG.name, Q)))
17121750 then throw((("Only NFT " + Q) + " tokens are accepted"))
17131751 else {
1714- let ig = toBase58String(au)
1715- let gz = aw(ig)
1716- if (isDefined(getInteger(gz)))
1717- then throw((("NFT " + gy.name) + " is already staked"))
1718- else if (isDefined(getString(aM(bo))))
1719- then throw(("You already staked one duck: " + gy.name))
1752+ let in = toBase58String(av)
1753+ let gH = ax(in)
1754+ if (isDefined(getInteger(gH)))
1755+ then throw((("NFT " + gG.name) + " is already staked"))
1756+ else if (isDefined(getString(aN(bp))))
1757+ then throw(("You already staked one duck: " + gG.name))
17201758 else {
1721- let ih = aO(ig)
1722- let ii = getString(ih)
1723- let eC = aN(ig)
1724- let ij = getString(eC)
1725- let gc = aP(ig)
1726- let gd = J(valueOrElse(getInteger(r(ig)), 0))
1727- let ik = valueOrElse(getInteger(gc), gd)
1728- ([IntegerEntry(gz, lastBlock.timestamp), IntegerEntry(aA(Q, toBase58String(au), bo), lastBlock.timestamp), StringEntry(aL(ig), bo), StringEntry(aM(bo), ig)] ++ (if (isDefined(ii))
1759+ let io = aP(in)
1760+ let ip = getString(io)
1761+ let eK = aO(in)
1762+ let iq = getString(eK)
1763+ let gk = aQ(in)
1764+ let gl = J(valueOrElse(getInteger(r(in)), 0))
1765+ let ir = valueOrElse(getInteger(gk), gl)
1766+ ([IntegerEntry(gH, lastBlock.timestamp), IntegerEntry(aB(Q, toBase58String(av), bp), lastBlock.timestamp), StringEntry(aM(in), bp), StringEntry(aN(bp), in)] ++ (if (isDefined(ip))
17291767 then nil
1730- else ([StringEntry(ih, W)] ++ (if (isDefined(ij))
1768+ else ([StringEntry(io, W)] ++ (if (isDefined(iq))
17311769 then nil
1732- else (([StringEntry(eC, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(gc, ik)) :+ hX)))))
1770+ else (([StringEntry(eK, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(gk, ir)) :+ ie)))))
17331771 }
17341772 }
17351773 }
17381776
17391777
17401778
1741-@Callable(dT)
1742-func unstakeDuck (ig) = {
1743- let hX = hU(dT)
1744- if ((size(dT.payments) != 0))
1779+@Callable(eb)
1780+func unstakeDuck (in) = {
1781+ let ie = ib(eb)
1782+ if ((size(eb.payments) != 0))
17451783 then throw("No payments required")
17461784 else {
1747- let au = fromBase58String(ig)
1748- let bo = toString(dT.caller)
1749- let gy = value(assetInfo(au))
1750- let gz = aw(toBase58String(au))
1751- if (!(isDefined(getInteger(gz))))
1752- then throw((("NFT " + gy.name) + " is not staked"))
1753- else if (!(isDefined(getString(aM(bo)))))
1754- then throw((("The duck " + gy.name) + " is not staked"))
1785+ let av = fromBase58String(in)
1786+ let bp = toString(eb.caller)
1787+ let gG = value(assetInfo(av))
1788+ let gH = ax(toBase58String(av))
1789+ if (!(isDefined(getInteger(gH))))
1790+ then throw((("NFT " + gG.name) + " is not staked"))
1791+ else if (!(isDefined(getString(aN(bp)))))
1792+ then throw((("The duck " + gG.name) + " is not staked"))
17551793 else {
1756- let gB = valueOrErrorMessage(getString(aL(toBase58String(au))), (("NFT " + gy.name) + " is orphaned"))
1757- if ((gB != bo))
1794+ let gJ = valueOrErrorMessage(getString(aM(toBase58String(av))), (("NFT " + gG.name) + " is orphaned"))
1795+ if ((gJ != bp))
17581796 then throw("Staked NFT is not yours")
17591797 else {
1760- let gc = aP(ig)
1761- let gd = J(valueOrElse(getInteger(r(ig)), 0))
1762- let il = valueOrElse(getInteger(gc), gd)
1763- if ((gd > il))
1764- then throw((("Please heal your duck to " + toString(gd)) + "hp before unstaking"))
1765- else [ScriptTransfer(dT.caller, 1, au), DeleteEntry(gz), DeleteEntry(gc), DeleteEntry(aO(ig)), DeleteEntry(aL(ig)), DeleteEntry(aA(Q, ig, bo)), DeleteEntry(aM(bo)), hX]
1798+ let gk = aQ(in)
1799+ let gl = J(valueOrElse(getInteger(r(in)), 0))
1800+ let is = valueOrElse(getInteger(gk), gl)
1801+ if ((gl > is))
1802+ then throw((("Please heal your duck to " + toString(gl)) + "hp before unstaking"))
1803+ else [ScriptTransfer(eb.caller, 1, av), DeleteEntry(gH), DeleteEntry(gk), DeleteEntry(aP(in)), DeleteEntry(aM(in)), DeleteEntry(aB(Q, in, bp)), DeleteEntry(aN(bp)), ie]
17661804 }
17671805 }
17681806 }
17701808
17711809
17721810
1773-@Callable(dT)
1774-func claimRes (fj,im) = {
1775- let hX = hU(dT)
1776- if ((size(dT.payments) != 0))
1811+@Callable(eb)
1812+func claimRes (fr,it) = {
1813+ let ie = ib(eb)
1814+ if ((size(eb.payments) != 0))
17771815 then throw("No payments required")
17781816 else {
1779- let b = toString(dT.originCaller)
1780- let dc = gD(b, fj, cx, im)
1781- let p = valueOrErrorMessage(getString(aM(b)), "You don't have a duck staked")
1782- $Tuple2(((((dc._1 ++ hd(p, fraction(x, fj, bh))._1) :+ StringEntry(dc._2, makeString(dc._3, ":"))) :+ StringEntry(dc._4, makeString(dc._5, ":"))) :+ hX), dc._3[ap])
1783- }
1784- }
1785-
1786-
1787-
1788-@Callable(dT)
1789-func claimResToWH (fj,im) = {
1790- let hX = hU(dT)
1791- if ((size(dT.payments) != 0))
1817+ let b = toString(eb.originCaller)
1818+ let dd = gL(b, fr, cy, it)
1819+ let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked")
1820+ $Tuple2(((((dd._1 ++ hk(p, fraction(x, fr, bi))._1) :+ StringEntry(dd._2, makeString(dd._3, ":"))) :+ StringEntry(dd._4, makeString(dd._5, ":"))) :+ ie), dd._3[aq])
1821+ }
1822+ }
1823+
1824+
1825+
1826+@Callable(eb)
1827+func claimResToWH (fr,it) = {
1828+ let ie = ib(eb)
1829+ if ((size(eb.payments) != 0))
17921830 then throw("No payments required")
17931831 else {
1794- let b = toString(dT.originCaller)
1795- let dc = gD(b, fj, cw, im)
1796- $Tuple2(((((dc._1 ++ hj(b, fraction(x, fj, bh))._1) :+ StringEntry(dc._2, makeString(dc._3, ":"))) :+ StringEntry(dc._4, makeString(dc._5, ":"))) :+ hX), dc._5[ag])
1797- }
1798- }
1799-
1800-
1801-
1802-@Callable(dT)
1803-func flight (fR,fS) = {
1804- let hX = hU(dT)
1805- if ((size(dT.payments) != 0))
1832+ let b = toString(eb.originCaller)
1833+ let dd = gL(b, fr, cx, it)
1834+ $Tuple2(((((dd._1 ++ hq(b, fraction(x, fr, bi))._1) :+ StringEntry(dd._2, makeString(dd._3, ":"))) :+ StringEntry(dd._4, makeString(dd._5, ":"))) :+ ie), dd._5[ah])
1835+ }
1836+ }
1837+
1838+
1839+
1840+@Callable(eb)
1841+func flight (fZ,ga) = {
1842+ let ie = ib(eb)
1843+ if ((size(eb.payments) != 0))
18061844 then throw("No payments required")
18071845 else {
1808- let aS = toString(dT.caller)
1809- let ey = fQ(aS, fR, fS)
1810- let p = ey._2
1811- let ih = aO(p)
1812- let gv = valueOrElse(getString(ih), W)
1813- if ((ey._4 == gv))
1846+ let aT = toString(eb.caller)
1847+ let eG = fY(aT, fZ, ga)
1848+ let p = eG._2
1849+ let io = aP(p)
1850+ let gD = valueOrElse(getString(io), W)
1851+ if ((eG._4 == gD))
18141852 then throw("You can't fly to the same location")
18151853 else {
1816- let eC = aN(p)
1817- let fn = eB(eC)
1818- let ds = dd(fn[ar], ey._5)
1819- $Tuple2(([StringEntry(ih, if ((ey._1 > 0))
1820- then ey._4
1821- else gv), StringEntry(eC, makeString([fn[ao], fn[ap], fn[aq], ds], ":")), IntegerEntry(aP(p), ey._1), hX] ++ hd(p, if ((ey._1 > 0))
1854+ let eK = aO(p)
1855+ let fv = eJ(eK)
1856+ let dt = de(fv[as], eG._5)
1857+ $Tuple2(([StringEntry(io, if ((eG._1 > 0))
1858+ then eG._4
1859+ else gD), StringEntry(eK, makeString([fv[ap], fv[aq], fv[ar], dt], ":")), IntegerEntry(aQ(p), eG._1), ie] ++ hk(p, if ((eG._1 > 0))
18221860 then y
1823- else z)._1), ey._3)
1861+ else z)._1), eG._3)
18241862 }
18251863 }
18261864 }
18271865
18281866
18291867
1830-@Callable(dT)
1831-func heal (in,io,ip) = {
1832- let hX = hU(dT)
1833- if (if (if ((0 > in))
1868+@Callable(eb)
1869+func heal (iu,iv,iw) = {
1870+ let ie = ib(eb)
1871+ if (if (if ((0 > iu))
18341872 then true
1835- else (0 > io))
1873+ else (0 > iv))
18361874 then true
1837- else (0 > ip))
1875+ else (0 > iw))
18381876 then throw("Quantity cannot be negative")
18391877 else {
1840- let p = valueOrErrorMessage(getString(aM(toString(dT.caller))), "You don't have a duck staked")
1841- let iq = [in, io, ip]
1842- let gc = aP(p)
1843- let gd = J(valueOrElse(getInteger(r(p)), 0))
1844- let ir = valueOrElse(getInteger(gc), gd)
1845- if ((ir >= gd))
1846- then throw((("HP should be < " + toString(gd)) + " to heal"))
1878+ let p = valueOrErrorMessage(getString(aN(toString(eb.caller))), "You don't have a duck staked")
1879+ let ix = [iu, iv, iw]
1880+ let gk = aQ(p)
1881+ let gl = J(valueOrElse(getInteger(r(p)), 0))
1882+ let iy = valueOrElse(getInteger(gk), gl)
1883+ if ((iy >= gl))
1884+ then throw((("HP should be < " + toString(gl)) + " to heal"))
18471885 else {
1848- let eC = aN(p)
1849- let fn = eB(eC)
1850- let is = if ((fn[ar] == ""))
1886+ let eK = aO(p)
1887+ let fv = eJ(eK)
1888+ let iz = if ((fv[as] == ""))
18511889 then nil
1852- else split(fn[ar], "_")
1853- func it (cK,iu) = {
1854- let bR = cK._2
1855- let ep = if ((size(is) > bR))
1856- then parseIntValue(is[bR])
1890+ else split(fv[as], "_")
1891+ func iA (cL,iB) = {
1892+ let bS = cL._2
1893+ let ex = if ((size(iz) > bS))
1894+ then parseIntValue(iz[bS])
18571895 else 0
1858- if ((3 > bR))
1896+ if ((3 > bS))
18591897 then {
1860- let iv = iq[bR]
1861- if ((iv > ep))
1862- then throw(((("You have only " + toString(ep)) + " of ") + Z[bR]))
1863- else $Tuple3((cK._1 :+ toString((ep - iv))), (bR + 1), (cK._3 + (bX[bR] * iv)))
1898+ let iC = ix[bS]
1899+ if ((iC > ex))
1900+ then throw(((("You have only " + toString(ex)) + " of ") + Z[bS]))
1901+ else $Tuple3((cL._1 :+ toString((ex - iC))), (bS + 1), (cL._3 + (bY[bS] * iC)))
18641902 }
1865- else $Tuple3((cK._1 :+ toString(ep)), (bR + 1), cK._3)
1903+ else $Tuple3((cL._1 :+ toString(ex)), (bS + 1), cL._3)
18661904 }
18671905
1868- let dc = {
1869- let cM = ac
1870- let cN = size(cM)
1871- let cO = $Tuple3(nil, 0, 0)
1872- func cP (cQ,cR) = if ((cR >= cN))
1873- then cQ
1874- else it(cQ, cM[cR])
1875-
1876- func cS (cQ,cR) = if ((cR >= cN))
1877- then cQ
1906+ let dd = {
1907+ let cN = ac
1908+ let cO = size(cN)
1909+ let cP = $Tuple3(nil, 0, 0)
1910+ func cQ (cR,cS) = if ((cS >= cO))
1911+ then cR
1912+ else iA(cR, cN[cS])
1913+
1914+ func cT (cR,cS) = if ((cS >= cO))
1915+ then cR
18781916 else throw("List size exceeds 50")
18791917
1880- cS(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cO, 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)
1918+ cT(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cP, 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)
18811919 }
1882- let iw = min([gd, (ir + dc._3)])
1883- $Tuple2(([IntegerEntry(gc, iw), StringEntry(eC, makeString_2C([fn[ao], fn[ap], fn[aq], makeString(dc._1, "_")], ":")), hX] ++ hd(p, (G * ((in + io) + ip)))._1), iw)
1920+ let iD = min([gl, (iy + dd._3)])
1921+ $Tuple2(([IntegerEntry(gk, iD), StringEntry(eK, makeString_2C([fv[ap], fv[aq], fv[ar], makeString(dd._1, "_")], ":")), ie] ++ hk(p, (G * ((iu + iv) + iw)))._1), iD)
18841922 }
18851923 }
18861924 }
18871925
18881926
18891927
1890-@Callable(dT)
1928+@Callable(eb)
18911929 func healES () = {
1892- let hX = hU(dT)
1893- if ((size(dT.payments) != 1))
1930+ let ie = ib(eb)
1931+ if ((size(eb.payments) != 1))
18941932 then throw("Exactly one payment required")
18951933 else {
1896- let hY = value(dT.payments[0])
1897- if ((hY.assetId != ba))
1934+ let if = value(eb.payments[0])
1935+ if ((if.assetId != bb))
18981936 then throw("Allowed USDT payment only!")
18991937 else {
1900- let p = valueOrErrorMessage(getString(aM(toString(dT.caller))), "You don't have a duck staked")
1901- let gc = aP(p)
1902- let gd = J(valueOrElse(getInteger(r(p)), 0))
1903- let ir = valueOrElse(getInteger(gc), gd)
1904- if ((ir > 0))
1938+ let p = valueOrErrorMessage(getString(aN(toString(eb.caller))), "You don't have a duck staked")
1939+ let gk = aQ(p)
1940+ let gl = J(valueOrElse(getInteger(r(p)), 0))
1941+ let iy = valueOrElse(getInteger(gk), gl)
1942+ if ((iy > 0))
19051943 then throw("HP should be 0 to call Emergency Service")
19061944 else {
1907- let eC = aN(p)
1908- let fn = eB(eC)
1909- let is = if ((fn[ar] == ""))
1945+ let eK = aO(p)
1946+ let fv = eJ(eK)
1947+ let iz = if ((fv[as] == ""))
19101948 then nil
1911- else split(fn[ar], "_")
1912- let ix = if ((size(is) > 0))
1913- then parseIntValue(is[0])
1949+ else split(fv[as], "_")
1950+ let iE = if ((size(iz) > 0))
1951+ then parseIntValue(iz[0])
19141952 else 0
1915- let iy = if ((size(is) > 1))
1916- then parseIntValue(is[1])
1953+ let iF = if ((size(iz) > 1))
1954+ then parseIntValue(iz[1])
19171955 else 0
1918- let iz = if ((size(is) > 2))
1919- then parseIntValue(is[2])
1956+ let iG = if ((size(iz) > 2))
1957+ then parseIntValue(iz[2])
19201958 else 0
1921- if (if (if ((ix > 0))
1959+ if (if (if ((iE > 0))
19221960 then true
1923- else (iy > 0))
1961+ else (iF > 0))
19241962 then true
1925- else (iz > 0))
1963+ else (iG > 0))
19261964 then throw("You have to use own Medical Kit")
19271965 else {
1928- let iA = getString(bD, aT())
1929- let iB = if (isDefined(iA))
1930- then split(value(iA), "_")
1966+ let iH = getString(bE, aU())
1967+ let iI = if (isDefined(iH))
1968+ then split(value(iH), "_")
19311969 else nil
1932- let iC = if ((size(iB) > 0))
1933- then parseIntValue(iB[0])
1970+ let iJ = if ((size(iI) > 0))
1971+ then parseIntValue(iI[0])
19341972 else 0
1935- if ((0 >= iC))
1973+ if ((0 >= iJ))
19361974 then throw("There are no Medical Kits L1 at Emergency Service storage")
19371975 else {
1938- let iw = (ir + bX[0])
1939- let iD = makeString([toString((iC - 1)), removeByIndex(iB, 0)], "_")
1940- let aX = split(ac[0], "_")
1941- let iE = aW(aX)
1942- let iF = fraction((iE * Y), X, (10 * ae))
1943- if ((hY.amount != iF))
1944- then throw(("Payment attached should be " + toString(iF)))
1976+ let iD = (iy + bY[0])
1977+ let iK = makeString([toString((iJ - 1)), removeByIndex(iI, 0)], "_")
1978+ let aY = split(ac[0], "_")
1979+ let iL = aX(aY)
1980+ let iM = fraction((iL * Y), X, (10 * af))
1981+ if ((if.amount != iM))
1982+ then throw(("Payment attached should be " + toString(iM)))
19451983 else {
1946- let dc = bN(invoke(bD, "updateEsStorage", [iD], [AttachedPayment(ba, iF)]))
1947- $Tuple2(([IntegerEntry(gc, iw), hX] ++ hd(p, A)._1), dc)
1984+ let dd = bO(invoke(bE, "updateEsStorage", [iK], [AttachedPayment(bb, iM)]))
1985+ $Tuple2(([IntegerEntry(gk, iD), ie] ++ hk(p, A)._1), dd)
19481986 }
19491987 }
19501988 }
19551993
19561994
19571995
1958-@Callable(dT)
1959-func updateBackpack (p,iG) = if ((dT.caller != bD))
1996+@Callable(eb)
1997+func updateBackpack (p,iN) = if ((eb.caller != bE))
19601998 then throw("permission denied")
1961- else $Tuple2([StringEntry(aN(p), iG)], iG)
1962-
1963-
1964-
1965-@Callable(dT)
1999+ else $Tuple2([StringEntry(aO(p), iN)], iN)
2000+
2001+
2002+
2003+@Callable(eb)
19662004 func buySLand () = {
1967- let hX = hU(dT)
1968- if ((size(dT.payments) != 1))
2005+ let ie = ib(eb)
2006+ if ((size(eb.payments) != 1))
19692007 then throw("Exactly one payment required")
19702008 else {
1971- let hY = value(dT.payments[0])
1972- if ((hY.assetId != ba))
2009+ let if = value(eb.payments[0])
2010+ if ((if.assetId != bb))
19732011 then throw("Allowed USDT payment only!")
1974- else if ((hY.amount != cd))
1975- then throw(("Payment attached should be " + toString(cd)))
2012+ else if ((if.amount != ce))
2013+ then throw(("Payment attached should be " + toString(ce)))
19762014 else {
1977- let dc = fI(dT.caller, dT.transactionId)
1978- $Tuple2((((dc._1 :+ ScriptTransfer(bD, hY.amount, ba)) ++ hj(toString(dT.caller), C)._1) :+ hX), dc._2._1)
2015+ let dd = fQ(eb.caller, eb.transactionId)
2016+ $Tuple2((((dd._1 :+ ScriptTransfer(bE, if.amount, bb)) ++ hq(toString(eb.caller), C)._1) :+ ie), dd._2._1)
19792017 }
19802018 }
19812019 }
19822020
19832021
19842022
1985-@Callable(dT)
1986-func expedition (fR,fS) = {
1987- let hX = hU(dT)
1988- if ((size(dT.payments) != 0))
2023+@Callable(eb)
2024+func expedition (fZ,ga) = {
2025+ let ie = ib(eb)
2026+ if ((size(eb.payments) != 0))
19892027 then throw("No payments required")
19902028 else {
1991- let dc = gi(dT.caller, dT.transactionId, fR, fS)
1992- let p = valueOrErrorMessage(getString(aM(toString(dT.caller))), "You don't have a duck staked")
1993- $Tuple2(((dc._1 ++ hd(p, C)._1) :+ hX), $Tuple2(dc._2, dc._3))
1994- }
1995- }
1996-
1997-
1998-
1999-@Callable(dT)
2000-func upgradeInfra (aE) = {
2001- let hX = hU(dT)
2002- if ((size(dT.payments) != 0))
2029+ let dd = gq(eb.caller, eb.transactionId, fZ, ga)
2030+ let p = valueOrErrorMessage(getString(aN(toString(eb.caller))), "You don't have a duck staked")
2031+ $Tuple2(((dd._1 ++ hk(p, C)._1) :+ ie), $Tuple2(dd._2, dd._3))
2032+ }
2033+ }
2034+
2035+
2036+
2037+@Callable(eb)
2038+func upgradeInfra (aF) = {
2039+ let ie = ib(eb)
2040+ if ((size(eb.payments) != 0))
20032041 then throw("No payments required")
20042042 else {
2005- let dc = gR(true, dT.caller, 0, aE)
2006- let p = valueOrErrorMessage(getString(aM(toString(dT.caller))), "You don't have a duck staked")
2007- $Tuple2(((dc._1 :+ hX) ++ hd(p, fraction(D, dc._3, bh))._1), dc._2)
2008- }
2009- }
2010-
2011-
2012-
2013-@Callable(dT)
2014-func upgradeInfraUsdt (aE) = if ((dT.caller != this))
2043+ let dd = gY(true, eb.caller, 0, aF)
2044+ let p = valueOrErrorMessage(getString(aN(toString(eb.caller))), "You don't have a duck staked")
2045+ $Tuple2(((dd._1 :+ ie) ++ hk(p, fraction(D, dd._3, bi))._1), dd._2)
2046+ }
2047+ }
2048+
2049+
2050+
2051+@Callable(eb)
2052+func upgradeInfraUsdt (aF) = if ((eb.caller != this))
20152053 then throw("Permission denied")
20162054 else {
2017- let hX = hU(dT)
2018- if ((size(dT.payments) != 1))
2055+ let ie = ib(eb)
2056+ if ((size(eb.payments) != 1))
20192057 then throw("Exactly one payment required")
20202058 else {
2021- let hY = value(dT.payments[0])
2022- if ((hY.assetId != ba))
2059+ let if = value(eb.payments[0])
2060+ if ((if.assetId != bb))
20232061 then throw("Allowed USDT payment only!")
20242062 else {
2025- let dc = gR(false, dT.caller, hY.amount, aE)
2026- $Tuple2(((dc._1 :+ ScriptTransfer(bD, hY.amount, ba)) :+ hX), dc._2)
2063+ let dd = gY(false, eb.caller, if.amount, aF)
2064+ $Tuple2(((dd._1 :+ ScriptTransfer(bE, if.amount, bb)) :+ ie), dd._2)
20272065 }
20282066 }
20292067 }
20302068
20312069
20322070
2033-@Callable(dT)
2034-func activateArtifact (iH,iI) = {
2035- let hX = hU(dT)
2036- if ((size(dT.payments) != 0))
2071+@Callable(eb)
2072+func activateArtifact (iO,iP) = {
2073+ let ie = ib(eb)
2074+ if ((size(eb.payments) != 0))
20372075 then throw("No payments required")
20382076 else {
2039- let b = toString(dT.caller)
2040- let dc = {
2041- let bb = iH
2042- if (("PRESALE" == bb))
2043- then hr(b, iI)
2044- else if (("ONBOARD" == bb))
2045- then hk(b)
2077+ let b = toString(eb.caller)
2078+ let dd = {
2079+ let bc = iO
2080+ if (("PRESALE" == bc))
2081+ then hy(b, iP)
2082+ else if (("ONBOARD" == bc))
2083+ then hr(b)
20462084 else throw("Unknown artifact")
20472085 }
2048- (dc :+ hX)
2049- }
2050- }
2051-
2052-
2053-
2054-@Callable(dT)
2055-func mergeLands (hw) = {
2056- let hX = hU(dT)
2057- if ((size(dT.payments) != 0))
2086+ (dd :+ ie)
2087+ }
2088+ }
2089+
2090+
2091+
2092+@Callable(eb)
2093+func mergeLands (hD) = {
2094+ let ie = ib(eb)
2095+ if ((size(eb.payments) != 0))
20582096 then throw("No payments required")
20592097 else {
2060- let dc = hS(true, toString(dT.caller), 0, hw, dT.transactionId)
2061- $Tuple2(((dc._1 :+ hX) ++ hj(toString(dT.caller), E)._1), dc._2)
2062- }
2063- }
2064-
2065-
2066-
2067-@Callable(dT)
2068-func mergeLandsUsdt (hw) = {
2069- let hX = hU(dT)
2070- if ((size(dT.payments) != 1))
2098+ let dd = hZ(true, toString(eb.caller), 0, hD, eb.transactionId)
2099+ $Tuple2(((dd._1 :+ ie) ++ hq(toString(eb.caller), E)._1), dd._2)
2100+ }
2101+ }
2102+
2103+
2104+
2105+@Callable(eb)
2106+func mergeLandsUsdt (hD) = {
2107+ let ie = ib(eb)
2108+ if ((size(eb.payments) != 1))
20712109 then throw("Exactly one payment required")
20722110 else {
2073- let hY = value(dT.payments[0])
2074- if ((hY.assetId != ba))
2111+ let if = value(eb.payments[0])
2112+ if ((if.assetId != bb))
20752113 then throw("Allowed USDT payment only!")
20762114 else {
2077- let dc = hS(false, toString(dT.caller), hY.amount, hw, dT.transactionId)
2078- $Tuple2(((dc._1 :+ ScriptTransfer(bD, hY.amount, ba)) :+ hX), dc._2)
2115+ let dd = hZ(false, toString(eb.caller), if.amount, hD, eb.transactionId)
2116+ $Tuple2(((dd._1 :+ ScriptTransfer(bE, if.amount, bb)) :+ ie), dd._2)
20792117 }
20802118 }
20812119 }
20822120
20832121
20842122
2085-@Callable(dT)
2086-func cargoExchange (iJ,aE) = {
2087- let hX = hU(dT)
2088- if ((size(dT.payments) != 0))
2123+@Callable(eb)
2124+func cargoExchange (iQ,aF) = {
2125+ let ie = ib(eb)
2126+ if ((size(eb.payments) != 0))
20892127 then throw("No payments required")
20902128 else {
2091- let fm = split_4C(iJ, ":")
2092- let b = toString(dT.originCaller)
2093- let gy = value(assetInfo(fromBase58String(aE)))
2094- let gz = aw(aE)
2095- if (!(isDefined(getInteger(gz))))
2096- then throw((gy.name + " is not staked"))
2129+ let fu = split_4C(iQ, ":")
2130+ let b = toString(eb.originCaller)
2131+ let gG = value(assetInfo(fromBase58String(aF)))
2132+ let gH = ax(aF)
2133+ if (!(isDefined(getInteger(gH))))
2134+ then throw((gG.name + " is not staked"))
20972135 else {
2098- let gB = valueOrErrorMessage(getString(at(aE)), (("NFT " + gy.name) + " is orphaned"))
2099- if ((gB != b))
2136+ let gJ = valueOrErrorMessage(getString(au(aF)), (("NFT " + gG.name) + " is orphaned"))
2137+ if ((gJ != b))
21002138 then throw((P + " is not yours"))
21012139 else {
2102- let eV = (bS(split(gy.description, "_")[bH]) / bi)
2103- let eW = valueOrElse(getInteger(ax(aE)), 0)
2104- let p = valueOrErrorMessage(getString(aM(b)), "You don't have a duck staked")
2105- let gv = valueOrElse(getString(aO(p)), W)
2106- let gw = split(value(gv), "_")
2107- if ((gw[aU] != "L"))
2108- then throw((("Duck location type is " + gw[aU]) + ", but should be L"))
2109- else if ((gw[aV] != aE))
2110- then throw(("Duck should be on the land " + aE))
2140+ let fd = (bT(split(gG.description, "_")[bI]) / bj)
2141+ let fe = valueOrElse(getInteger(ay(aF)), 0)
2142+ let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked")
2143+ let gD = valueOrElse(getString(aP(p)), W)
2144+ let gE = split(value(gD), "_")
2145+ if ((gE[aV] != "L"))
2146+ then throw((("Duck location type is " + gE[aV]) + ", but should be L"))
2147+ else if ((gE[aW] != aF))
2148+ then throw(("Duck should be on the land " + aF))
21112149 else {
2112- let eU = aD(aE)
2113- let eH = eT(eU, eV, eW)
2114- let eC = aN(p)
2115- let fn = eB(eC)
2116- let dc = fl(fm, eH, fn)
2117- let fc = split(eH[aj], "_")
2118- let gO = (parseIntValue(fc[al]) + dc._7)
2119- let gP = (parseIntValue(fc[am]) - dc._7)
2120-[StringEntry(eC, makeString_2C([fn[ao], dc._4, dc._5, dc._6], ":")), StringEntry(eU, makeString_2C([eH[af], dc._1, dc._2, dc._3, makeString([fc[ak], toString(gO), toString(gP), fc[an]], "_")], ":")), hX]
2150+ let fc = aE(aF)
2151+ let eP = fb(fc, fd, fe)
2152+ let eK = aO(p)
2153+ let fv = eJ(eK)
2154+ let dd = ft(fu, eP, fv)
2155+ let fk = split(eP[ak], "_")
2156+ let gV = (parseIntValue(fk[am]) + dd._7)
2157+ let gW = (parseIntValue(fk[an]) - dd._7)
2158+[StringEntry(eK, makeString_2C([fv[ap], dd._4, dd._5, dd._6], ":")), StringEntry(fc, makeString_2C([eP[ag], dd._1, dd._2, dd._3, makeString([fk[al], toString(gV), toString(gW), fk[ao]], "_")], ":")), ie]
21212159 }
21222160 }
21232161 }
21262164
21272165
21282166
2129-@Callable(dT)
2130-func saveWarehouse (eY,aE) = if ((dT.caller != bD))
2167+@Callable(eb)
2168+func saveWarehouse (fg,aF) = if ((eb.caller != bE))
21312169 then throw("Access denied")
21322170 else {
2133- let eU = aD(aE)
2134- let eZ = split_4C(eY, ":")
2135- if ((size(eZ) != 5))
2171+ let fc = aE(aF)
2172+ let fh = split_4C(fg, ":")
2173+ if ((size(fh) != 5))
21362174 then throw("warehouse string should contain 4 ':' separators")
21372175 else {
2138- let iK = split(eZ[aj], "_")[ak]
2139- let gO = eG(eZ)
2140- let iL = eE(eZ[af])
2141- let gP = ((iL - parseIntValue(iK)) - gO)
2142- let iM = makeString_2C([eZ[af], eZ[ag], eZ[ah], eZ[ai], makeString([iK, toString(gO), toString(gP), toString(iL)], "_")], ":")
2143- $Tuple2([StringEntry(eU, iM)], iM)
2176+ let iR = split(fh[ak], "_")[al]
2177+ let gV = eO(fh)
2178+ let iS = eM(fh[ag])
2179+ let gW = ((iS - parseIntValue(iR)) - gV)
2180+ let iT = makeString_2C([fh[ag], fh[ah], fh[ai], fh[aj], makeString([iR, toString(gV), toString(gW), toString(iS)], "_")], ":")
2181+ $Tuple2([StringEntry(fc, iT)], iT)
21442182 }
21452183 }
21462184
21472185
21482186
2149-@Callable(dT)
2150-func fixWarehouseFormat (aE) = if ((dT.caller != bB))
2187+@Callable(eb)
2188+func fixWarehouseFormat (aF) = if ((eb.caller != bC))
21512189 then throw("Access denied")
21522190 else {
2153- let eU = aD(aE)
2154- let gy = value(assetInfo(fromBase58String(aE)))
2155- let eV = (bS(split(gy.description, "_")[bH]) / bi)
2156- let eW = valueOrElse(getInteger(ax(aE)), 0)
2157- let eZ = eT(eU, eV, eW)
2158- let iK = bQ(invoke(bD, "recalcLockedVolumeREADONLY", [aE, eZ], nil))
2159- let gO = eG(eZ)
2160- let iL = eE(eZ[af])
2161- let gP = ((iL - iK) - gO)
2162- let iM = makeString_2C([eZ[af], eZ[ag], eZ[ah], eZ[ai], makeString([toString(iK), toString(gO), toString(gP), toString(iL)], "_")], ":")
2163- $Tuple2([StringEntry(eU, iM)], iM)
2191+ let fc = aE(aF)
2192+ let gG = value(assetInfo(fromBase58String(aF)))
2193+ let fd = (bT(split(gG.description, "_")[bI]) / bj)
2194+ let fe = valueOrElse(getInteger(ay(aF)), 0)
2195+ let fh = fb(fc, fd, fe)
2196+ let iR = bR(invoke(bE, "recalcLockedVolumeREADONLY", [aF, fh], nil))
2197+ let gV = eO(fh)
2198+ let iS = eM(fh[ag])
2199+ let gW = ((iS - iR) - gV)
2200+ let iT = makeString_2C([fh[ag], fh[ah], fh[ai], fh[aj], makeString([toString(iR), toString(gV), toString(gW), toString(iS)], "_")], ":")
2201+ $Tuple2([StringEntry(fc, iT)], iT)
21642202 }
21652203
21662204
21672205
2168-@Callable(dT)
2169-func fixStakedPieces (bo) = if ((dT.caller != bB))
2206+@Callable(eb)
2207+func fixStakedPieces (bp) = if ((eb.caller != bC))
21702208 then throw("Access denied")
21712209 else {
2172- let hN = if ((bo == ""))
2210+ let hU = if ((bp == ""))
21732211 then 0
21742212 else {
2175- let hI = getString(bC, bL(bo))
2176- let hD = if (isDefined(hI))
2177- then split_51C(value(hI), "_")
2213+ let hP = getString(bD, bM(bp))
2214+ let hK = if (isDefined(hP))
2215+ then split_51C(value(hP), "_")
21782216 else nil
2179- func iN (cK,aE) = {
2180- let gy = value(assetInfo(fromBase58String(aE)))
2181- let bT = split(gy.description, "_")[bH]
2182- (cK + bS(bT))
2217+ func iU (cL,aF) = {
2218+ let gG = value(assetInfo(fromBase58String(aF)))
2219+ let bU = split(gG.description, "_")[bI]
2220+ (cL + bT(bU))
21832221 }
21842222
2185- let cM = hD
2186- let cN = size(cM)
2187- let cO = 0
2188- func cP (cQ,cR) = if ((cR >= cN))
2189- then cQ
2190- else iN(cQ, cM[cR])
2191-
2192- func cS (cQ,cR) = if ((cR >= cN))
2193- then cQ
2223+ let cN = hK
2224+ let cO = size(cN)
2225+ let cP = 0
2226+ func cQ (cR,cS) = if ((cS >= cO))
2227+ then cR
2228+ else iU(cR, cN[cS])
2229+
2230+ func cT (cR,cS) = if ((cS >= cO))
2231+ then cR
21942232 else throw("List size exceeds 100")
21952233
2196- cS(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cO, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100)
2234+ cT(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100)
21972235 }
2198- $Tuple2([IntegerEntry(bM(bo), hN)], hN)
2236+ $Tuple2([IntegerEntry(bN(bp), hU)], hU)
21992237 }
22002238
22012239
22022240
2203-@Callable(dT)
2204-func setCustomName (au,hF,az) = {
2205- let hX = hU(dT)
2206- if ((size(dT.payments) != 1))
2241+@Callable(eb)
2242+func setCustomName (av,hM,aA) = {
2243+ let ie = ib(eb)
2244+ if ((size(eb.payments) != 1))
22072245 then throw("Exactly one payment required")
22082246 else {
2209- let hY = value(dT.payments[0])
2210- if ((hY.assetId != ba))
2247+ let if = value(eb.payments[0])
2248+ if ((if.assetId != bb))
22112249 then throw("Allowed USDT payment only!")
2212- else if ((hY.amount != bZ))
2213- then throw(("Payment should be " + toString(bZ)))
2214- else if (contains(hF, "__"))
2215- then throw(("Name should not contain '__': " + hF))
2216- else if ((size(hF) > ca))
2217- then throw(("Name too long, maxLength=" + toString(ca)))
2250+ else if ((if.amount != ca))
2251+ then throw(("Payment should be " + toString(ca)))
2252+ else if (contains(hM, "__"))
2253+ then throw(("Name should not contain '__': " + hM))
2254+ else if ((size(hM) > cb))
2255+ then throw(("Name too long, maxLength=" + toString(cb)))
22182256 else {
2219- let b = toString(dT.originCaller)
2220- let iO = {
2221- let bb = az
2222- if (("ACCOUNT" == bb))
2257+ let b = toString(eb.originCaller)
2258+ let iV = {
2259+ let bc = aA
2260+ if (("ACCOUNT" == bc))
22232261 then {
2224- let iP = cu(hF)
2225- let iQ = getString(iP)
2226- if (isDefined(iQ))
2227- then throw(("Name already registered: " + hF))
2262+ let iW = cv(hM)
2263+ let iX = getString(iW)
2264+ if (isDefined(iX))
2265+ then throw(("Name already registered: " + hM))
22282266 else {
2229- let iR = aG(b)
2230- let iS = getString(iR)
2231- let iT = if (isDefined(iS))
2232- then [DeleteEntry(cu(value(iS)))]
2267+ let iY = aH(b)
2268+ let iZ = getString(iY)
2269+ let ja = if (isDefined(iZ))
2270+ then [DeleteEntry(cv(value(iZ)))]
22332271 else nil
2234- (((iT :+ StringEntry(iR, hF)) :+ StringEntry(iP, b)) ++ hj(b, B)._1)
2272+ (((ja :+ StringEntry(iY, hM)) :+ StringEntry(iW, b)) ++ hq(b, B)._1)
22352273 }
22362274 }
2237- else if (("LAND" == bb))
2275+ else if (("LAND" == bc))
22382276 then {
2239- let gy = value(assetInfo(fromBase58String(au)))
2240- let gz = aw(au)
2241- if (!(isDefined(getInteger(gz))))
2242- then throw((gy.name + " is not staked"))
2277+ let gG = value(assetInfo(fromBase58String(av)))
2278+ let gH = ax(av)
2279+ if (!(isDefined(getInteger(gH))))
2280+ then throw((gG.name + " is not staked"))
22432281 else {
2244- let gB = valueOrErrorMessage(getString(at(au)), (("NFT " + gy.name) + " is orphaned"))
2245- if ((gB != b))
2282+ let gJ = valueOrErrorMessage(getString(au(av)), (("NFT " + gG.name) + " is orphaned"))
2283+ if ((gJ != b))
22462284 then throw((P + " is not yours"))
22472285 else {
2248- let iP = co(hF)
2249- let iQ = getString(iP)
2250- if (isDefined(iQ))
2251- then throw(("Name already registered: " + hF))
2286+ let iW = cp(hM)
2287+ let iX = getString(iW)
2288+ if (isDefined(iX))
2289+ then throw(("Name already registered: " + hM))
22522290 else {
2253- let iU = av(au)
2254- let iS = getString(iU)
2255- let iT = if (isDefined(iS))
2256- then [DeleteEntry(co(value(iS)))]
2291+ let jb = aw(av)
2292+ let iZ = getString(jb)
2293+ let ja = if (isDefined(iZ))
2294+ then [DeleteEntry(cp(value(iZ)))]
22572295 else nil
2258- (((iT :+ StringEntry(iU, hF)) :+ StringEntry(iP, au)) ++ hj(b, B)._1)
2296+ (((ja :+ StringEntry(jb, hM)) :+ StringEntry(iW, av)) ++ hq(b, B)._1)
22592297 }
22602298 }
22612299 }
22622300 }
2263- else if (("DUCK" == bb))
2301+ else if (("DUCK" == bc))
22642302 then {
2265- let gy = value(assetInfo(fromBase58String(au)))
2266- let gz = aw(au)
2267- if (if (!(isDefined(getInteger(gz))))
2303+ let gG = value(assetInfo(fromBase58String(av)))
2304+ let gH = ax(av)
2305+ if (if (!(isDefined(getInteger(gH))))
22682306 then true
2269- else !(isDefined(getString(aM(b)))))
2270- then throw((gy.name + " is not staked"))
2307+ else !(isDefined(getString(aN(b)))))
2308+ then throw((gG.name + " is not staked"))
22712309 else {
2272- let gB = valueOrErrorMessage(getString(aL(au)), (("NFT " + gy.name) + " is orphaned"))
2273- if ((gB != b))
2310+ let gJ = valueOrErrorMessage(getString(aM(av)), (("NFT " + gG.name) + " is orphaned"))
2311+ if ((gJ != b))
22742312 then throw((Q + " is not yours"))
22752313 else {
2276- let iP = ct(hF)
2277- let iQ = getString(iP)
2278- if (isDefined(iQ))
2279- then throw(("Name already registered: " + hF))
2314+ let iW = cu(hM)
2315+ let iX = getString(iW)
2316+ if (isDefined(iX))
2317+ then throw(("Name already registered: " + hM))
22802318 else {
2281- let iU = aF(au)
2282- let iS = getString(iU)
2283- let iT = if (isDefined(iS))
2284- then [DeleteEntry(ct(value(iS)))]
2319+ let jb = aG(av)
2320+ let iZ = getString(jb)
2321+ let ja = if (isDefined(iZ))
2322+ then [DeleteEntry(cu(value(iZ)))]
22852323 else nil
2286- (((iT :+ StringEntry(iU, hF)) :+ StringEntry(iP, au)) ++ hd(au, B)._1)
2324+ (((ja :+ StringEntry(jb, hM)) :+ StringEntry(iW, av)) ++ hk(av, B)._1)
22872325 }
22882326 }
22892327 }
22902328 }
22912329 else throw("Unknown entity type")
22922330 }
2293- $Tuple2(((iO :+ ScriptTransfer(bD, hY.amount, ba)) :+ hX), 0)
2331+ $Tuple2(((iV :+ ScriptTransfer(bE, if.amount, bb)) :+ ie), 0)
22942332 }
22952333 }
22962334 }
22972335
22982336
22992337
2300-@Callable(dT)
2301-func setReferrals (iV,iW) = if ((dT.callerPublicKey != bW))
2338+@Callable(eb)
2339+func setReferrals (jc,jd) = if ((eb.callerPublicKey != bX))
23022340 then throw("Permission denied")
23032341 else {
2304- let hX = hU(dT)
2305- if ((size(dT.payments) != 0))
2342+ let ie = ib(eb)
2343+ if ((size(eb.payments) != 0))
23062344 then throw("No payments required")
2307- else if (!(isDefined(addressFromString(iV))))
2308- then throw(("Invalid address: " + iV))
2309- else if (!(isDefined(addressFromString(iW))))
2310- then throw(("Invalid address: " + iW))
2345+ else if (!(isDefined(addressFromString(jc))))
2346+ then throw(("Invalid address: " + jc))
2347+ else if (!(isDefined(addressFromString(jd))))
2348+ then throw(("Invalid address: " + jd))
23112349 else {
2312- let iX = cv()
2313- let iY = getString(iX)
2314- let iZ = if (isDefined(iY))
2315- then split_4C(value(iY), "_")
2350+ let je = cw()
2351+ let jf = getString(je)
2352+ let jg = if (isDefined(jf))
2353+ then split_4C(value(jf), "_")
23162354 else nil
2317- if (containsElement(iZ, iW))
2318- then throw((iW + " is not newbie (already has referrals)"))
2355+ if (containsElement(jg, jd))
2356+ then throw((jd + " is not newbie (already has referrals)"))
23192357 else {
2320- let hl = aH(iW)
2321- let hm = getString(hl)
2322- if (if (isDefined(hm))
2323- then isDefined(addressFromString(value(hm)))
2358+ let hs = aI(jd)
2359+ let ht = getString(hs)
2360+ if (if (isDefined(ht))
2361+ then isDefined(addressFromString(value(ht)))
23242362 else false)
2325- then throw(((iW + " already has refBy: ") + value(hm)))
2363+ then throw(((jd + " already has refBy: ") + value(ht)))
23262364 else {
2327- let ja = aK(iV)
2328- let jb = getString(ja)
2329- let jc = if (isDefined(jb))
2330- then split_4C(value(jb), "_")
2365+ let jh = aL(jc)
2366+ let ji = getString(jh)
2367+ let jj = if (isDefined(ji))
2368+ then split_4C(value(ji), "_")
23312369 else nil
2332- if (containsElement(jc, iW))
2333- then throw((((iV + " already contains ") + iW) + " within referrals"))
2370+ if (containsElement(jj, jd))
2371+ then throw((((jc + " already contains ") + jd) + " within referrals"))
23342372 else {
2335- let jd = makeString_2C((jc :+ iW), "_")
2336- let je = if (containsElement(iZ, iV))
2337- then value(iY)
2338- else makeString_2C((iZ :+ iV), "_")
2339- $Tuple2([StringEntry(hl, iV), StringEntry(ja, jd), StringEntry(iX, je), hX], 0)
2373+ let jk = makeString_2C((jj :+ jd), "_")
2374+ let jl = if (containsElement(jg, jc))
2375+ then value(jf)
2376+ else makeString_2C((jg :+ jc), "_")
2377+ $Tuple2([StringEntry(hs, jc), StringEntry(jh, jk), StringEntry(je, jl), ie], 0)
23402378 }
23412379 }
23422380 }
23452383
23462384
23472385
2348-@Callable(dT)
2349-func distributePoints (jf,jg,jh,ji,jj) = {
2350- let hX = hU(dT)
2351- if ((size(dT.payments) != 0))
2386+@Callable(eb)
2387+func distributePoints (jm,jn,jo,jp,jq) = {
2388+ let ie = ib(eb)
2389+ if ((size(eb.payments) != 0))
23522390 then throw("No payments required")
23532391 else {
2354- let b = toString(dT.originCaller)
2355- let p = valueOrErrorMessage(getString(aM(b)), "You don't have a duck staked")
2356- let jk = w(b)
2357- let jl = valueOrElse(getInteger(bC, jk), 0)
2358- let jm = s(p)
2359- let jn = valueOrElse(getInteger(bC, jm), 0)
2360- let jo = (jl + jn)
2361- let jp = ((((jf + jg) + jh) + ji) + jj)
2362- if ((jp > jo))
2363- then throw((("There are only " + toString(jo)) + " free points to distribute"))
2392+ let b = toString(eb.originCaller)
2393+ let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked")
2394+ let jr = w(b)
2395+ let js = valueOrElse(getInteger(bD, jr), 0)
2396+ let jt = s(p)
2397+ let ju = valueOrElse(getInteger(bD, jt), 0)
2398+ let jv = (js + ju)
2399+ let jw = ((((jm + jn) + jo) + jp) + jq)
2400+ if ((jw > jv))
2401+ then throw((("There are only " + toString(jv)) + " free points to distribute"))
23642402 else {
2365- let jq = o(p)
2366- let jr = split(valueOrElse(getString(bC, jq), "0_0_0_0_0"), "_")
2367- let js = (jl - jp)
2368- $Tuple2([IntegerEntry(jk, if ((0 > js))
2403+ let jx = o(p)
2404+ let jy = split(valueOrElse(getString(bD, jx), "0_0_0_0_0"), "_")
2405+ let jz = (js - jw)
2406+ $Tuple2([IntegerEntry(jr, if ((0 > jz))
23692407 then 0
2370- else js), IntegerEntry(jm, if ((0 > js))
2371- then (jn + js)
2372- else jn), StringEntry(jq, makeString([toString((parseIntValue(jr[g]) + jf)), toString((parseIntValue(jr[h]) + jg)), toString((parseIntValue(jr[i]) + jh)), toString((parseIntValue(jr[j]) + ji)), toString((parseIntValue(jr[k]) + jj))], "_")), hX], 0)
2408+ else jz), IntegerEntry(jt, if ((0 > jz))
2409+ then (ju + jz)
2410+ else ju), StringEntry(jx, makeString([toString((parseIntValue(jy[g]) + jm)), toString((parseIntValue(jy[h]) + jn)), toString((parseIntValue(jy[i]) + jo)), toString((parseIntValue(jy[j]) + jp)), toString((parseIntValue(jy[k]) + jq))], "_")), ie], 0)
23732411 }
23742412 }
23752413 }
23762414
23772415
23782416
2379-@Callable(dT)
2380-func splitByGlobalWeightsREADONLY (fj) = $Tuple2(nil, cT(fj))
2381-
2382-
2383-
2384-@Callable(dT)
2385-func splitByGlobalAndLocalWeightsREADONLY (jt,ju,dW) = {
2386- let dP = dV(dW)
2387- $Tuple2(nil, $Tuple2(cT(jt), cE(ju, dP)))
2388- }
2389-
2390-
2391-
2392-@Callable(dT)
2393-func getBackpackREADONLY (p) = $Tuple2(nil, makeString(eB(aN(p)), ":"))
2394-
2395-
2396-
2397-@Callable(dT)
2398-func getWarehouseREADONLY (aE) = {
2399- let gy = value(assetInfo(fromBase58String(aE)))
2400- let eV = (bS(split(gy.description, "_")[bH]) / bi)
2401- let eW = valueOrElse(getInteger(ax(aE)), 0)
2402- $Tuple2(nil, makeString_2C(eT(aD(aE), eV, eW), ":"))
2403- }
2404-
2405-
2406-
2407-@Callable(dT)
2408-func saveLastTx () = if (if ((dT.caller != bF))
2409- then (dT.caller != bD)
2417+@Callable(eb)
2418+func splitByGlobalWeightsREADONLY (fr) = $Tuple2(nil, cU(fr))
2419+
2420+
2421+
2422+@Callable(eb)
2423+func splitByGlobalAndLocalWeightsREADONLY (jA,jB,ee) = {
2424+ let dX = ed(ee)
2425+ $Tuple2(nil, $Tuple2(cU(jA), cF(jB, dX)))
2426+ }
2427+
2428+
2429+
2430+@Callable(eb)
2431+func getBackpackREADONLY (p) = $Tuple2(nil, makeString(eJ(aO(p)), ":"))
2432+
2433+
2434+
2435+@Callable(eb)
2436+func getWarehouseREADONLY (aF) = {
2437+ let gG = value(assetInfo(fromBase58String(aF)))
2438+ let fd = (bT(split(gG.description, "_")[bI]) / bj)
2439+ let fe = valueOrElse(getInteger(ay(aF)), 0)
2440+ $Tuple2(nil, makeString_2C(fb(aE(aF), fd, fe), ":"))
2441+ }
2442+
2443+
2444+
2445+@Callable(eb)
2446+func saveLastTx () = if (if ((eb.caller != bG))
2447+ then (eb.caller != bE)
24102448 else false)
24112449 then throw("Access denied")
2412- else $Tuple2([hU(dT)], 42)
2413-
2414-
2415-
2416-@Callable(dT)
2417-func updateDuckStats (p,he) = if ((dT.caller != bD))
2450+ else $Tuple2([ib(eb)], 42)
2451+
2452+
2453+
2454+@Callable(eb)
2455+func updateDuckStats (p,hl) = if ((eb.caller != bE))
24182456 then throw("Access denied")
2419- else hd(p, he)
2420-
2421-
2422-
2423-@Callable(dT)
2424-func updateAccStats (b,he) = if ((dT.caller != bD))
2457+ else hk(p, hl)
2458+
2459+
2460+
2461+@Callable(eb)
2462+func updateAccStats (b,hl) = if ((eb.caller != bE))
24252463 then throw("Access denied")
2426- else hj(b, he)
2427-
2428-
2429-
2430-@Callable(dT)
2431-func equipDuck (jv) = {
2432- let hX = hU(dT)
2433- if ((size(dT.payments) != 0))
2464+ else hq(b, hl)
2465+
2466+
2467+
2468+@Callable(eb)
2469+func equipDuck (jC) = {
2470+ let ie = ib(eb)
2471+ if ((size(eb.payments) != 0))
24342472 then throw("No payments required")
24352473 else {
2436- let b = toString(dT.originCaller)
2437- let p = valueOrErrorMessage(getString(aM(b)), "You don't have a duck staked")
2438- let jw = t(p)
2439- let jx = split(valueOrElse(getString(jw), ",;,_,;,_,;,_,;,_,;,_,;,"), "_")
2440- let eC = aN(p)
2441- let fn = eB(eC)
2442- let jy = split(jv, "_")
2443- if ((size(jy) != l))
2474+ let b = toString(eb.originCaller)
2475+ let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked")
2476+ let jD = t(p)
2477+ let jE = split(valueOrElse(getString(jD), ",;,_,;,_,;,_,;,_,;,_,;,"), "_")
2478+ let eK = aO(p)
2479+ let fv = eJ(eK)
2480+ let jF = split(jC, "_")
2481+ if ((size(jF) != l))
24442482 then throw("Wrong equipment string")
24452483 else {
2446- let jz = fn[ar]
2447- let dg = if ((jz == ""))
2484+ let jG = fv[as]
2485+ let dh = if ((jG == ""))
24482486 then nil
2449- else split(jz, "_")
2450- let jA = dG(jx, dg, true)
2451- let ds = dG(jy, jA, false)
2452- $Tuple2([StringEntry(jw, jv), StringEntry(eC, makeString_2C([fn[ao], fn[ap], fn[aq], makeString(ds, "_")], ":")), hX], 0)
2487+ else split(jG, "_")
2488+ let jH = dQ(jE, dh, true)
2489+ let dt = dQ(jF, jH, false)
2490+ $Tuple2([StringEntry(jD, jC), StringEntry(eK, makeString_2C([fv[ap], fv[aq], fv[ar], makeString(dt, "_")], ":")), ie], 0)
24532491 }
24542492 }
24552493 }
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 func a (b) = ("lastArbTimeUser_" + b)
55
66
77 let c = 100000000
88
99 let d = 3200
1010
1111 let e = 4000
1212
1313 let f = 3
1414
1515 let g = 0
1616
1717 let h = 1
1818
1919 let i = 2
2020
2121 let j = 3
2222
2323 let k = 4
2424
2525 let l = 6
2626
2727 let m = 2
2828
2929 let n = 2
3030
3131 func o (p) = ("duckChars_" + p)
3232
3333
3434 func q (p) = ("duckXP_" + p)
3535
3636
3737 func r (p) = ("duckLevel_" + p)
3838
3939
4040 func s (p) = ("duckFreePoints_" + p)
4141
4242
4343 func t (p) = ("duckEquipment_" + p)
4444
4545
4646 func u (b) = ("userXP_" + b)
4747
4848
4949 func v (b) = ("userLevel_" + b)
5050
5151
5252 func w (b) = ("userFreePoints_" + b)
5353
5454
5555 let x = 100000
5656
5757 let y = 50000
5858
5959 let z = 10000
6060
6161 let A = 100000
6262
6363 let B = 5000000
6464
6565 let C = 50000000
6666
6767 let D = 100000
6868
6969 let E = 10000000
7070
7171 let F = 10000000
7272
7373 let G = 10000
7474
7575 func H (I) = fraction(d, pow(I, 4, e, 4, 4, DOWN), c)
7676
7777
7878 func J (K) = (100 + K)
7979
8080
8181 func L (M,N) = {
8282 let O = H(N)
8383 [O, (f * (O - M))]
8484 }
8585
8686
8787 let P = "LAND"
8888
8989 let Q = "DUCK"
9090
9191 let R = "PRESALE"
9292
9393 let S = 6
9494
9595 let T = 3456000
9696
9797 let U = 86400000
9898
9999 let V = 10000000000
100100
101101 let W = "Africa_F_Africa"
102102
103103 let X = 39637
104104
105105 let Y = 10
106106
107107 let Z = ["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"]
108108
109109 let aa = ["Americas", "Europe", "Asia", "Africa", "Oceania"]
110110
111111 let ab = 10000000
112112
113113 let ac = ["8_8_8_17_17_42_12_0_30_0,0,0,0,0,0,0_", "8_8_8_17_17_42_24_0_60_0,0,5,2,0,0,0_", "8_8_8_17_17_42_36_0_120_0,0,10,4,0,0,0_", "8_19_19_8_27_19_26_1_20_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_52_1_40_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_78_1_80_0,0,0,0,0,0,0_001", "8_8_8_8_8_60_13_2_2_0,0,0,0,0,0,0_", "8_8_8_8_8_60_26_2_4_0,0,0,0,0,0,0_", "8_8_8_8_8_60_39_2_8_0,0,0,0,0,0,0_", "30_30_3_17_17_3_30_3_30_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_60_3_50_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_90_3_70_0,0,0,0,0,0,0_111", "18_18_10_18_18_18_11_4_30_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_22_4_50_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_33_4_70_0,0,0,0,0,0,0_201"]
114114
115115 let ad = 6
116116
117117 let ae = 10
118118
119-let af = 0
120-
121-let ag = 1
122-
123-let ah = 2
124-
125-let ai = 3
126-
127-let aj = 4
128-
129-let ak = 0
130-
131-let al = 1
132-
133-let am = 2
134-
135-let an = 3
136-
137-let ao = 0
138-
139-let ap = 1
140-
141-let aq = 2
142-
143-let ar = 3
144-
145-func as (b) = ("lastTxIdByUser_" + b)
146-
147-
148-func at (au) = ("nftOwner_" + au)
149-
150-
151-func av (au) = ("landCustomNameByAssetId_" + au)
152-
153-
154-func aw (au) = ("stakedTime_" + au)
155-
156-
157-func ax (au) = ("infraLevel_" + au)
158-
159-
160-func ay (az,au) = makeString(["landArtStatus", az, au], "_")
161-
162-
163-func aA (aB,au,aC) = ((((("stakedTimeByTypeAssetIdAndOwner_" + aB) + "_") + au) + "_") + aC)
164-
165-
166-func aD (aE) = ("wareHouse_" + aE)
167-
168-
169-func aF (au) = ("duckCustomNameByAssetId_" + au)
170-
171-
172-func aG (b) = ("accountCustomNameByAddr_" + b)
173-
174-
175-func aH (b) = ("accRefBy_" + b)
176-
177-
178-func aI (p) = ("onboardArtActivatedOnDuck_" + p)
179-
180-
181-func aJ (b) = ("onboardArtActivatedDuckBy_" + b)
182-
183-
184-func aK (b) = ("accReferrals_" + b)
185-
186-
187-func aL (au) = ("duckOwner_" + au)
188-
189-
190-func aM (aC) = ("stakedDuckByOwner_" + aC)
191-
192-
193-func aN (p) = ("backPack_" + p)
194-
195-
196-func aO (p) = ("duckLocation_" + p)
197-
198-
199-func aP (p) = ("duckHealth_" + p)
200-
201-
202-func aQ () = "contractsBlocked"
203-
204-
205-func aR (aS) = ("%s%s__userGwlReleaseTime__" + aS)
206-
207-
208-func aT () = "emergencyWarehouseProducts"
209-
210-
211-let aU = 1
212-
213-let aV = 2
214-
215-func aW (aX) = (parseIntValue(aX[ad]) * ab)
216-
217-
218-let aY = true
219-
220-let aZ = take(drop(this.bytes, 1), 1)
221-
222-let ba = {
223- let bb = aZ
224- if ((base58'2W' == bb))
119+let af = 10
120+
121+let ag = 0
122+
123+let ah = 1
124+
125+let ai = 2
126+
127+let aj = 3
128+
129+let ak = 4
130+
131+let al = 0
132+
133+let am = 1
134+
135+let an = 2
136+
137+let ao = 3
138+
139+let ap = 0
140+
141+let aq = 1
142+
143+let ar = 2
144+
145+let as = 3
146+
147+func at (b) = ("lastTxIdByUser_" + b)
148+
149+
150+func au (av) = ("nftOwner_" + av)
151+
152+
153+func aw (av) = ("landCustomNameByAssetId_" + av)
154+
155+
156+func ax (av) = ("stakedTime_" + av)
157+
158+
159+func ay (av) = ("infraLevel_" + av)
160+
161+
162+func az (aA,av) = makeString(["landArtStatus", aA, av], "_")
163+
164+
165+func aB (aC,av,aD) = ((((("stakedTimeByTypeAssetIdAndOwner_" + aC) + "_") + av) + "_") + aD)
166+
167+
168+func aE (aF) = ("wareHouse_" + aF)
169+
170+
171+func aG (av) = ("duckCustomNameByAssetId_" + av)
172+
173+
174+func aH (b) = ("accountCustomNameByAddr_" + b)
175+
176+
177+func aI (b) = ("accRefBy_" + b)
178+
179+
180+func aJ (p) = ("onboardArtActivatedOnDuck_" + p)
181+
182+
183+func aK (b) = ("onboardArtActivatedDuckBy_" + b)
184+
185+
186+func aL (b) = ("accReferrals_" + b)
187+
188+
189+func aM (av) = ("duckOwner_" + av)
190+
191+
192+func aN (aD) = ("stakedDuckByOwner_" + aD)
193+
194+
195+func aO (p) = ("backPack_" + p)
196+
197+
198+func aP (p) = ("duckLocation_" + p)
199+
200+
201+func aQ (p) = ("duckHealth_" + p)
202+
203+
204+func aR () = "contractsBlocked"
205+
206+
207+func aS (aT) = ("%s%s__userGwlReleaseTime__" + aT)
208+
209+
210+func aU () = "emergencyWarehouseProducts"
211+
212+
213+let aV = 1
214+
215+let aW = 2
216+
217+func aX (aY) = (parseIntValue(aY[ad]) * ab)
218+
219+
220+let aZ = true
221+
222+let ba = take(drop(this.bytes, 1), 1)
223+
224+let bb = {
225+ let bc = ba
226+ if ((base58'2W' == bc))
225227 then base58'9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi'
226- else if ((base58'2T' == bb))
228+ else if ((base58'2T' == bc))
227229 then base58'6mWwf9mZBjVgkC54idpyaZLQfAosD914wT8fGf2iiY63'
228230 else throw("Unknown chain")
229231 }
230232
231-let bc = {
232- let bb = aZ
233- if ((base58'2W' == bb))
233+let bd = {
234+ let bc = ba
235+ if ((base58'2W' == bc))
234236 then "3PQCuvFbvh4LkPUnrnU1z3jnbA1p9m3WNhv"
235- else if ((base58'2T' == bb))
237+ else if ((base58'2T' == bc))
236238 then "3MumkGGztCKAXpWDqxkddofqXSUbqQkvSJy"
237239 else throw("Unknown chain")
238240 }
239241
240-let bd = {
241- let bb = aZ
242- if ((base58'2W' == bb))
242+let be = {
243+ let bc = ba
244+ if ((base58'2W' == bc))
243245 then 10000000000
244- else if ((base58'2T' == bb))
246+ else if ((base58'2T' == bc))
245247 then 100000000
246248 else throw("Unknown chain")
247249 }
248250
249-let be = {
250- let bb = aZ
251- if ((base58'2W' == bb))
251+let bf = {
252+ let bc = ba
253+ if ((base58'2W' == bc))
252254 then 600000
253- else if ((base58'2T' == bb))
255+ else if ((base58'2T' == bc))
254256 then 60000
255257 else throw("Unknown chain")
256258 }
257259
258-let bf = "__"
259-
260-let bg = 1000000
261-
262-let bh = 100000000
263-
264-let bi = 25
265-
266-let bj = 100
267-
268-let bk = 225
269-
270-let bl = 400
271-
272-let bm = 625
273-
274-func bn (bo,bp) = valueOrErrorMessage(getString(bo, bp), makeString(["mandatory ", toString(bo), ".", bp, " is not defined"], ""))
275-
276-
277-let bq = 1
278-
279-let br = 2
280-
281-let bs = 3
282-
283-let bt = 4
284-
285-func bu () = "%s__restConfig"
286-
287-
288-func bv () = "%s__restAddr"
289-
290-
291-func bw (bx) = split_4C(bn(bx, bu()), bf)
292-
293-
294-func by (bz,bA) = valueOrErrorMessage(addressFromString(bz[bA]), ("Rest cfg doesn't contain address at index " + toString(bA)))
295-
296-
297-let bB = addressFromStringValue(valueOrElse(getString(this, bv()), bc))
298-
299-let bz = bw(bB)
300-
301-let bC = by(bz, bq)
302-
303-let bD = by(bz, br)
304-
305-let bE = by(bz, bs)
306-
307-let bF = by(bz, bt)
308-
309-let bG = 0
310-
311-let bH = 1
312-
313-let bI = 2
314-
315-let bJ = 3
316-
317-func bK () = "resTypesProportions"
318-
319-
320-func bL (aC) = ("stakedLandsByOwner_" + aC)
321-
322-
323-func bM (aC) = ("stakedPiecesByOwner_" + aC)
324-
325-
326-func bN (bO) = {
327- let bb = bO
328- if ($isInstanceOf(bb, "String"))
260+let bg = "__"
261+
262+let bh = 1000000
263+
264+let bi = 100000000
265+
266+let bj = 25
267+
268+let bk = 100
269+
270+let bl = 225
271+
272+let bm = 400
273+
274+let bn = 625
275+
276+func bo (bp,bq) = valueOrErrorMessage(getString(bp, bq), makeString(["mandatory ", toString(bp), ".", bq, " is not defined"], ""))
277+
278+
279+let br = 1
280+
281+let bs = 2
282+
283+let bt = 3
284+
285+let bu = 4
286+
287+func bv () = "%s__restConfig"
288+
289+
290+func bw () = "%s__restAddr"
291+
292+
293+func bx (by) = split_4C(bo(by, bv()), bg)
294+
295+
296+func bz (bA,bB) = valueOrErrorMessage(addressFromString(bA[bB]), ("Rest cfg doesn't contain address at index " + toString(bB)))
297+
298+
299+let bC = addressFromStringValue(valueOrElse(getString(this, bw()), bd))
300+
301+let bA = bx(bC)
302+
303+let bD = bz(bA, br)
304+
305+let bE = bz(bA, bs)
306+
307+let bF = bz(bA, bt)
308+
309+let bG = bz(bA, bu)
310+
311+let bH = 0
312+
313+let bI = 1
314+
315+let bJ = 2
316+
317+let bK = 3
318+
319+func bL () = "resTypesProportions"
320+
321+
322+func bM (aD) = ("stakedLandsByOwner_" + aD)
323+
324+
325+func bN (aD) = ("stakedPiecesByOwner_" + aD)
326+
327+
328+func bO (bP) = {
329+ let bc = bP
330+ if ($isInstanceOf(bc, "String"))
329331 then {
330- let bP = bb
331- bP
332+ let bQ = bc
333+ bQ
332334 }
333335 else throw("fail to cast into String")
334336 }
335337
336338
337-func bQ (bO) = {
338- let bb = bO
339- if ($isInstanceOf(bb, "Int"))
339+func bR (bP) = {
340+ let bc = bP
341+ if ($isInstanceOf(bc, "Int"))
340342 then {
341- let bR = bb
342- bR
343+ let bS = bc
344+ bS
343345 }
344346 else throw("fail to cast into Int")
345347 }
346348
347349
348-func bS (bT) = {
349- let bb = bT
350- if (("S" == bb))
351- then bi
352- else if (("M" == bb))
353- then bj
354- else if (("L" == bb))
355- then bk
356- else if (("XL" == bb))
357- then bl
358- else if (("XXL" == bb))
359- then bm
350+func bT (bU) = {
351+ let bc = bU
352+ if (("S" == bc))
353+ then bj
354+ else if (("M" == bc))
355+ then bk
356+ else if (("L" == bc))
357+ then bl
358+ else if (("XL" == bc))
359+ then bm
360+ else if (("XXL" == bc))
361+ then bn
360362 else throw("Unknown land size")
361363 }
362364
363365
364-let bU = {
365- let bb = aZ
366- if ((base58'2W' == bb))
366+let bV = {
367+ let bc = ba
368+ if ((base58'2W' == bc))
367369 then addressFromStringValue("3PEktVux2RhchSN63DsDo4b4mz4QqzKSeDv")
368- else if ((base58'2T' == bb))
370+ else if ((base58'2T' == bc))
369371 then this
370372 else throw("Unknown chain")
371373 }
372374
373-let bV = {
374- let bb = aZ
375- if ((base58'2W' == bb))
375+let bW = {
376+ let bc = ba
377+ if ((base58'2W' == bc))
376378 then addressFromStringValue("3PDVuU45H7Eh5dmtNbnRNRStGwULA7NY6Hb")
377- else if ((base58'2T' == bb))
379+ else if ((base58'2T' == bc))
378380 then this
379381 else throw("Unknown chain")
380382 }
381383
382-let bW = base58'6LfPuKJjLgekmncBhMg2LZyMTNVzZBccXR28ySXm9uXD'
383-
384-let bX = [30, 60, 120]
385-
386-let bY = 300000
387-
388-let bZ = 5000000
389-
390-let ca = 50
391-
392-let cb = 10000000
393-
394-let cc = {
395- let bb = aZ
396- if ((base58'2W' == bb))
384+let bX = base58'6LfPuKJjLgekmncBhMg2LZyMTNVzZBccXR28ySXm9uXD'
385+
386+let bY = [30, 60, 120]
387+
388+let bZ = 300000
389+
390+let ca = 5000000
391+
392+let cb = 50
393+
394+let cc = 10000000
395+
396+let cd = {
397+ let bc = ba
398+ if ((base58'2W' == bc))
397399 then 252289527462
398- else if ((base58'2T' == bb))
400+ else if ((base58'2T' == bc))
399401 then 2522895274
400402 else throw("Unknown chain")
401403 }
402404
403-let cd = {
404- let bb = aZ
405- if ((base58'2W' == bb))
405+let ce = {
406+ let bc = ba
407+ if ((base58'2W' == bc))
406408 then 250000000
407- else if ((base58'2T' == bb))
409+ else if ((base58'2T' == bc))
408410 then 250000000
409411 else throw("Unknown chain")
410412 }
411413
412-let ce = toBigInt(5)
413-
414-let cf = toBigInt(20)
415-
416-let cg = toBigInt((20 * 20))
417-
418-let ch = toBigInt(((20 * 20) * 20))
419-
420-let ci = toBigInt((((20 * 20) * 20) * 20))
421-
422-let cj = toBigInt(((((20 * 20) * 20) * 20) * 20))
423-
424-let ck = 500
425-
426-func cl () = "nextLandNum"
427-
428-
429-func cm (cn) = ("landToAsset_" + cn)
430-
431-
432-func co (cp) = ("landByCustomName_" + cp)
433-
434-
435-func cq (au,aC) = ((("infraLevelByAssetIdAndOwner_" + au) + "_") + aC)
436-
437-
438-func cr (az,au,aC) = makeString(["landArtStatusByTypeAssetIdAndOwner", az, au, aC], "_")
439-
440-
441-func cs (cn) = ("landOwner_" + cn)
442-
443-
444-func ct (cp) = ("duckByCustomName_" + cp)
445-
446-
447-func cu (cp) = ("accountByCustomName_" + cp)
448-
449-
450-func cv () = "oldiesList"
451-
452-
453-let cw = 0
454-
455-let cx = 1
456-
457-let cy = 2
458-
459-let cz = 0
460-
461-let cA = 5
462-
463-let cB = 6
464-
465-let cC = 7
466-
467-func cD (cn,bT) = ((P + cn) + bT)
468-
469-
470-func cE (cF,cG) = {
471- let cH = (((((cG[0] + cG[1]) + cG[2]) + cG[3]) + cG[4]) + cG[5])
472- if ((0 >= cH))
414+let cf = toBigInt(5)
415+
416+let cg = toBigInt(20)
417+
418+let ch = toBigInt((20 * 20))
419+
420+let ci = toBigInt(((20 * 20) * 20))
421+
422+let cj = toBigInt((((20 * 20) * 20) * 20))
423+
424+let ck = toBigInt(((((20 * 20) * 20) * 20) * 20))
425+
426+let cl = 500
427+
428+func cm () = "nextLandNum"
429+
430+
431+func cn (co) = ("landToAsset_" + co)
432+
433+
434+func cp (cq) = ("landByCustomName_" + cq)
435+
436+
437+func cr (av,aD) = ((("infraLevelByAssetIdAndOwner_" + av) + "_") + aD)
438+
439+
440+func cs (aA,av,aD) = makeString(["landArtStatusByTypeAssetIdAndOwner", aA, av, aD], "_")
441+
442+
443+func ct (co) = ("landOwner_" + co)
444+
445+
446+func cu (cq) = ("duckByCustomName_" + cq)
447+
448+
449+func cv (cq) = ("accountByCustomName_" + cq)
450+
451+
452+func cw () = "oldiesList"
453+
454+
455+let cx = 0
456+
457+let cy = 1
458+
459+let cz = 2
460+
461+let cA = 0
462+
463+let cB = 5
464+
465+let cC = 6
466+
467+let cD = 7
468+
469+func cE (co,bU) = ((P + co) + bU)
470+
471+
472+func cF (cG,cH) = {
473+ let cI = (((((cH[0] + cH[1]) + cH[2]) + cH[3]) + cH[4]) + cH[5])
474+ if ((0 >= cI))
473475 then throw("Zero weights sum")
474476 else {
475- let cI = fraction(cF, bg, cH)
476- func cJ (cK,cL) = (cK :+ fraction(cL, cI, bg))
477-
478- let cM = cG
479- let cN = size(cM)
480- let cO = nil
481- func cP (cQ,cR) = if ((cR >= cN))
482- then cQ
483- else cJ(cQ, cM[cR])
484-
485- func cS (cQ,cR) = if ((cR >= cN))
486- then cQ
477+ let cJ = fraction(cG, bh, cI)
478+ func cK (cL,cM) = (cL :+ fraction(cM, cJ, bh))
479+
480+ let cN = cH
481+ let cO = size(cN)
482+ let cP = nil
483+ func cQ (cR,cS) = if ((cS >= cO))
484+ then cR
485+ else cK(cR, cN[cS])
486+
487+ func cT (cR,cS) = if ((cS >= cO))
488+ then cR
487489 else throw("List size exceeds 6")
488490
489- cS(cP(cP(cP(cP(cP(cP(cO, 0), 1), 2), 3), 4), 5), 6)
490- }
491- }
492-
493-
494-func cT (cF) = {
495- let cU = split(value(getString(bK())), "_")
496- if ((size(cU) != S))
491+ cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6)
492+ }
493+ }
494+
495+
496+func cU (cG) = {
497+ let cV = split(value(getString(bL())), "_")
498+ if ((size(cV) != S))
497499 then throw("Wrong proportions data")
498500 else {
499- let cV = [parseIntValue(cU[0]), parseIntValue(cU[1]), parseIntValue(cU[2]), parseIntValue(cU[3]), parseIntValue(cU[4]), parseIntValue(cU[5])]
500- cE(cF, cV)
501- }
502- }
503-
504-
505-func cW (cX,cY,cZ) = {
506- let da = cT(cZ)
507- func db (cK,bA) = {
508- let dc = (parseIntValue(cY[bA]) - da[bA])
509- if ((0 > dc))
510- then throw(((((("Not enough material idx=" + toString(bA)) + ", you have ") + cY[bA]) + ", but need ") + toString(da[bA])))
511- else (cK :+ toString(dc))
501+ let cW = [parseIntValue(cV[0]), parseIntValue(cV[1]), parseIntValue(cV[2]), parseIntValue(cV[3]), parseIntValue(cV[4]), parseIntValue(cV[5])]
502+ cF(cG, cW)
503+ }
504+ }
505+
506+
507+func cX (cY,cZ,da) = {
508+ let db = cU(da)
509+ func dc (cL,bB) = {
510+ let dd = (parseIntValue(cZ[bB]) - db[bB])
511+ if ((0 > dd))
512+ then throw(((((("Not enough material idx=" + toString(bB)) + ", you have ") + cZ[bB]) + ", but need ") + toString(db[bB])))
513+ else (cL :+ toString(dd))
512514 }
513515
514- if (cX)
516+ if (cY)
515517 then {
516- let cM = [0, 1, 2, 3, 4, 5]
517- let cN = size(cM)
518- let cO = nil
519- func cP (cQ,cR) = if ((cR >= cN))
520- then cQ
521- else db(cQ, cM[cR])
522-
523- func cS (cQ,cR) = if ((cR >= cN))
524- then cQ
518+ let cN = [0, 1, 2, 3, 4, 5]
519+ let cO = size(cN)
520+ let cP = nil
521+ func cQ (cR,cS) = if ((cS >= cO))
522+ then cR
523+ else dc(cR, cN[cS])
524+
525+ func cT (cR,cS) = if ((cS >= cO))
526+ then cR
525527 else throw("List size exceeds 6")
526528
527- cS(cP(cP(cP(cP(cP(cP(cO, 0), 1), 2), 3), 4), 5), 6)
528- }
529- else cY
530- }
531-
532-
533-func dd (de,df) = if ((df == ""))
534- then de
529+ cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6)
530+ }
531+ else cZ
532+ }
533+
534+
535+func de (df,dg) = if ((dg == ""))
536+ then df
535537 else {
536- let dg = if ((de == ""))
538+ let dh = if ((df == ""))
537539 then nil
538- else split(de, "_")
539- func dh (cK,di) = {
540- let dj = cK._1
541- func dk (dl,dm) = {
542- let dn = split(dm, ",")
543- if ((size(dn) != 2))
540+ else split(df, "_")
541+ func di (cL,dj) = {
542+ let dk = cL._1
543+ func dl (dm,dn) = {
544+ let do = split(dn, ",")
545+ if ((size(do) != 2))
544546 then throw("Incorrect format, should be index,amount")
545547 else {
546- let bA = parseIntValue(dn[0])
547- if (if ((0 > bA))
548+ let bB = parseIntValue(do[0])
549+ if (if ((0 > bB))
548550 then true
549- else (bA >= size(ac)))
551+ else (bB >= size(ac)))
550552 then throw("Unknown product idx")
551- else if ((bA != dj))
552- then dl
553+ else if ((bB != dk))
554+ then dm
553555 else {
554- let do = parseIntValue(dn[1])
555- if ((0 >= do))
556+ let dp = parseIntValue(do[1])
557+ if ((0 >= dp))
556558 then throw("Pass only positive amounts")
557- else (dl + do)
559+ else (dm + dp)
558560 }
559561 }
560562 }
561563
562- let dp = {
563- let cM = split(df, "_")
564- let cN = size(cM)
565- let cO = 0
566- func cP (cQ,cR) = if ((cR >= cN))
567- then cQ
568- else dk(cQ, cM[cR])
569-
570- func cS (cQ,cR) = if ((cR >= cN))
571- then cQ
564+ let dq = {
565+ let cN = split(dg, "_")
566+ let cO = size(cN)
567+ let cP = 0
568+ func cQ (cR,cS) = if ((cS >= cO))
569+ then cR
570+ else dl(cR, cN[cS])
571+
572+ func cT (cR,cS) = if ((cS >= cO))
573+ then cR
572574 else throw("List size exceeds 10")
573575
574- cS(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cO, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
576+ cT(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
575577 }
576- let dq = if ((size(dg) > dj))
577- then parseIntValue(dg[dj])
578+ let dr = if ((size(dh) > dk))
579+ then parseIntValue(dh[dk])
578580 else 0
579- let dr = if ((dq >= dp))
580- then (dq - dp)
581- else throw(((((("You have " + toString(dq)) + " of ") + Z[dj]) + ", but tried to use ") + toString(dp)))
582- $Tuple2((dj + 1), (cK._2 :+ toString(dr)))
583- }
584-
585- let ds = {
586- let cM = ac
587- let cN = size(cM)
588- let cO = $Tuple2(0, nil)
589- func cP (cQ,cR) = if ((cR >= cN))
590- then cQ
591- else dh(cQ, cM[cR])
592-
593- func cS (cQ,cR) = if ((cR >= cN))
594- then cQ
581+ let ds = if ((dr >= dq))
582+ then (dr - dq)
583+ else throw(((((("You have " + toString(dr)) + " of ") + Z[dk]) + ", but tried to use ") + toString(dq)))
584+ $Tuple2((dk + 1), (cL._2 :+ toString(ds)))
585+ }
586+
587+ let dt = {
588+ let cN = ac
589+ let cO = size(cN)
590+ let cP = $Tuple2(0, nil)
591+ func cQ (cR,cS) = if ((cS >= cO))
592+ then cR
593+ else di(cR, cN[cS])
594+
595+ func cT (cR,cS) = if ((cS >= cO))
596+ then cR
595597 else throw("List size exceeds 50")
596598
597- cS(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cO, 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)
598- }
599- makeString(ds._2, "_")
599+ cT(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cP, 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)
600+ }
601+ makeString(dt._2, "_")
600602 }
601603
602604
603-func dt (du,dg,dv) = {
604- let dn = split(du, ":")
605- if ((size(dn) != 2))
605+func du (dv,dh,dw,dx,dy,dz) = {
606+ let do = split(dv, ":")
607+ if ((size(do) != 2))
606608 then throw("Incorrect format, should be index:amount")
607609 else {
608- let dw = parseIntValue(dn[0])
609- let dx = parseIntValue(dn[1])
610- if (if ((0 > dw))
610+ let dA = parseIntValue(do[0])
611+ let dB = parseIntValue(do[1])
612+ if (if ((0 > dA))
611613 then true
612- else (dw >= size(ac)))
614+ else (dA >= size(ac)))
613615 then throw("Unknown product idx")
614- else if ((0 > dx))
616+ else if ((0 > dB))
615617 then throw("Count can't be negative")
616- else if ((dx == 0))
617- then dg
618+ else if ((dB == 0))
619+ then $Tuple2(dh, false)
618620 else {
619- func dy (cK,di) = {
620- let dj = cK._1
621- let dq = if ((size(dg) > dj))
622- then parseIntValue(dg[dj])
621+ func dC (cL,dj) = {
622+ let dk = cL._1
623+ let dr = if ((size(dh) > dk))
624+ then parseIntValue(dh[dk])
623625 else 0
624- if (if (!(dv))
625- then (dx > dq)
626+ if (if (!(dw))
627+ then (dB > dr)
626628 else false)
627- then throw(((((("You have " + toString(dq)) + " of ") + Z[dj]) + ", but tried to use ") + toString(dx)))
628- else $Tuple2((dj + 1), (cK._2 :+ toString(if ((dw != dj))
629- then dq
630- else (dq + (if (dv)
631- then dx
632- else -(dx))))))
629+ then throw(((((("You have " + toString(dr)) + " of ") + Z[dk]) + ", but tried to use ") + toString(dB)))
630+ else {
631+ let dD = if (!(dw))
632+ then {
633+ let dE = split(dj, "_")[ae]
634+ if ((dE == ""))
635+ then throw("Item cannot be equipped")
636+ else {
637+ let dF = parseIntValue(dE)
638+ let dG = (dF / 100)
639+ if ((dx != dG))
640+ then throw("Segment incompatible")
641+ else {
642+ let dH = ((dF % 100) / 10)
643+ if ((dy != dH))
644+ then throw("Slot incompatible")
645+ else {
646+ let dI = (dF % 10)
647+ if (if ((dz != 0))
648+ then (dI > 1)
649+ else false)
650+ then throw("Big items should occupy slot 0")
651+ else (dI > 1)
652+ }
653+ }
654+ }
655+ }
656+ else false
657+ $Tuple3((dk + 1), (cL._2 :+ toString(if ((dA != dk))
658+ then dr
659+ else (dr + (if (dw)
660+ then dB
661+ else -(dB))))), if (cL._3)
662+ then true
663+ else dD)
664+ }
633665 }
634666
635-( let cM = ac
636- let cN = size(cM)
637- let cO = $Tuple2(0, nil)
638- func cP (cQ,cR) = if ((cR >= cN))
639- then cQ
640- else dy(cQ, cM[cR])
641-
642- func cS (cQ,cR) = if ((cR >= cN))
643- then cQ
644- else throw("List size exceeds 42")
645-
646- cS(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cO, 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))._2
667+ let dd = {
668+ let cN = ac
669+ let cO = size(cN)
670+ let cP = $Tuple3(0, nil, false)
671+ func cQ (cR,cS) = if ((cS >= cO))
672+ then cR
673+ else dC(cR, cN[cS])
674+
675+ func cT (cR,cS) = if ((cS >= cO))
676+ then cR
677+ else throw("List size exceeds 27")
678+
679+ cT(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cP, 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)
680+ }
681+ $Tuple2(dd._2, dd._3)
647682 }
648683 }
649684 }
650685
651686
652-func dz (dA,dB,dv) = if ((dA != ""))
687+func dJ (dK,dL,dw,dx,dy) = if ((dK != ""))
653688 then {
654- let dC = split(dA, ",")
655- if ((size(dC) > n))
689+ let dM = split(dK, ",")
690+ if ((size(dM) > n))
656691 then throw("Wrong slots format")
657692 else {
658- let dD = dC[0]
659- let dE = if ((size(dC) > 1))
660- then dC[1]
693+ let dN = dM[0]
694+ let dO = if ((size(dM) > 1))
695+ then dM[1]
661696 else ""
662- if (if ((dD == ""))
663- then (dE == "")
697+ if (if ((dN == ""))
698+ then (dO == "")
664699 else false)
665- then dB
700+ then dL
666701 else {
667- let dF = if ((dD != ""))
668- then dt(dD, dB, dv)
669- else dB
670- if ((dE != ""))
671- then dt(dE, dF, dv)
672- else dF
702+ let dP = if ((dN != ""))
703+ then du(dN, dL, dw, dx, dy, 0)
704+ else $Tuple2(dL, false)
705+ if ((dO != ""))
706+ then if (dP._2)
707+ then throw("Big item already occupies slot")
708+ else du(dO, dP._1, dw, dx, dy, 1)._1
709+ else dP._1
673710 }
674711 }
675712 }
676- else dB
677-
678-
679-func dG (dH,dg,dv) = {
680- func dI (cK,dJ) = {
681- let dK = split(dJ, ";")
682- if ((size(dK) != m))
713+ else dL
714+
715+
716+func dQ (dR,dh,dw) = {
717+ func dx (cL,dS) = {
718+ let dk = cL._1
719+ let dy = split(dS, ";")
720+ if ((size(dy) != m))
683721 then throw("Wrong segment format")
684722 else {
685- let dL = dK[0]
686- let dp = dK[1]
687- if (if ((dL == ""))
688- then (dp == "")
723+ let dT = dy[0]
724+ let dq = dy[1]
725+ if (if ((dT == ""))
726+ then (dq == "")
689727 else false)
690- then cK
728+ then $Tuple2((dk + 1), cL._2)
691729 else {
692- let dM = dz(dL, cK, dv)
693- dz(dp, dM, dv)
730+ let dU = dJ(dT, cL._2, dw, dk, 0)
731+ $Tuple2((dk + 1), dJ(dq, dU, dw, dk, 1))
694732 }
695733 }
696734 }
697735
698- let cM = dH
699- let cN = size(cM)
700- let cO = dg
701- func cP (cQ,cR) = if ((cR >= cN))
702- then cQ
703- else dI(cQ, cM[cR])
704-
705- func cS (cQ,cR) = if ((cR >= cN))
706- then cQ
736+( let cN = dR
737+ let cO = size(cN)
738+ let cP = $Tuple2(0, dh)
739+ func cQ (cR,cS) = if ((cS >= cO))
740+ then cR
741+ else dx(cR, cN[cS])
742+
743+ func cT (cR,cS) = if ((cS >= cO))
744+ then cR
707745 else throw("List size exceeds 6")
708746
709- cS(cP(cP(cP(cP(cP(cP(cO, 0), 1), 2), 3), 4), 5), 6)
710- }
711-
712-
713-func dN (dO,dP,dQ,dR) = if ((size(dO) != S))
747+ cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6))._2
748+ }
749+
750+
751+func dV (dW,dX,dY,dZ) = if ((size(dW) != S))
714752 then throw("Wrong proportions data")
715753 else {
716- func dS (cK,dT) = {
717- let dc = (parseIntValue(dO[dT]) + ((dR * dP[dT]) * dQ))
718- if ((0 > dc))
719- then throw(((((((("Panic! Pieces of type=" + toString(dT)) + ", sign=") + toString(dR)) + ", terrainCounts[i]=") + toString(dP[dT])) + ", landSizeIndex=") + toString(dQ)))
720- else (cK :+ toString(dc))
721- }
722-
723- let cV = {
724- let cM = [0, 1, 2, 3, 4, 5]
725- let cN = size(cM)
726- let cO = nil
727- func cP (cQ,cR) = if ((cR >= cN))
728- then cQ
729- else dS(cQ, cM[cR])
730-
731- func cS (cQ,cR) = if ((cR >= cN))
732- then cQ
754+ func ea (cL,eb) = {
755+ let dd = (parseIntValue(dW[eb]) + ((dZ * dX[eb]) * dY))
756+ if ((0 > dd))
757+ then throw(((((((("Panic! Pieces of type=" + toString(eb)) + ", sign=") + toString(dZ)) + ", terrainCounts[i]=") + toString(dX[eb])) + ", landSizeIndex=") + toString(dY)))
758+ else (cL :+ toString(dd))
759+ }
760+
761+ let cW = {
762+ let cN = [0, 1, 2, 3, 4, 5]
763+ let cO = size(cN)
764+ let cP = nil
765+ func cQ (cR,cS) = if ((cS >= cO))
766+ then cR
767+ else ea(cR, cN[cS])
768+
769+ func cT (cR,cS) = if ((cS >= cO))
770+ then cR
733771 else throw("List size exceeds 6")
734772
735- cS(cP(cP(cP(cP(cP(cP(cO, 0), 1), 2), 3), 4), 5), 6)
736- }
737- makeString(cV, "_")
773+ cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6)
774+ }
775+ makeString(cW, "_")
738776 }
739777
740778
741-func dU (dP,dQ,dR) = {
742- let dO = split(valueOrElse(getString(bK()), "0_0_0_0_0_0"), "_")
743- dN(dO, dP, dQ, dR)
744- }
745-
746-
747-func dV (dW) = [(size(split(dW, "A")) - 1), (size(split(dW, "B")) - 1), (size(split(dW, "C")) - 1), (size(split(dW, "D")) - 1), (size(split(dW, "E")) - 1), (size(split(dW, "F")) - 1)]
748-
749-
750-func dX (dY,dP,dZ,dQ,ea) = {
751- func eb (cK,dT) = {
752- let ec = ((fraction(dZ, ea, U) * dP[dT]) * dQ)
753- (cK :+ toString((parseIntValue(dY[dT]) + ec)))
779+func ec (dX,dY,dZ) = {
780+ let dW = split(valueOrElse(getString(bL()), "0_0_0_0_0_0"), "_")
781+ dV(dW, dX, dY, dZ)
782+ }
783+
784+
785+func ed (ee) = [(size(split(ee, "A")) - 1), (size(split(ee, "B")) - 1), (size(split(ee, "C")) - 1), (size(split(ee, "D")) - 1), (size(split(ee, "E")) - 1), (size(split(ee, "F")) - 1)]
786+
787+
788+func ef (eg,dX,eh,dY,ei) = {
789+ func ej (cL,eb) = {
790+ let ek = ((fraction(eh, ei, U) * dX[eb]) * dY)
791+ (cL :+ toString((parseIntValue(eg[eb]) + ek)))
754792 }
755793
756- let cV = {
757- let cM = [0, 1, 2, 3, 4, 5]
758- let cN = size(cM)
759- let cO = nil
760- func cP (cQ,cR) = if ((cR >= cN))
761- then cQ
762- else eb(cQ, cM[cR])
763-
764- func cS (cQ,cR) = if ((cR >= cN))
765- then cQ
794+ let cW = {
795+ let cN = [0, 1, 2, 3, 4, 5]
796+ let cO = size(cN)
797+ let cP = nil
798+ func cQ (cR,cS) = if ((cS >= cO))
799+ then cR
800+ else ej(cR, cN[cS])
801+
802+ func cT (cR,cS) = if ((cS >= cO))
803+ then cR
766804 else throw("List size exceeds 6")
767805
768- cS(cP(cP(cP(cP(cP(cP(cO, 0), 1), 2), 3), 4), 5), 6)
806+ cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6)
769807 }
770- makeString(cV, "_")
771- }
772-
773-
774-func ed (dP,dZ,dQ,ea) = {
775- func eb (cK,dT) = {
776- let ec = ((fraction(dZ, ea, U) * dP[dT]) * dQ)
777- $Tuple2((cK._1 :+ ec), (cK._2 + ec))
808+ makeString(cW, "_")
809+ }
810+
811+
812+func el (dX,eh,dY,ei) = {
813+ func ej (cL,eb) = {
814+ let ek = ((fraction(eh, ei, U) * dX[eb]) * dY)
815+ $Tuple2((cL._1 :+ ek), (cL._2 + ek))
778816 }
779817
780- let cM = [0, 1, 2, 3, 4, 5]
781- let cN = size(cM)
782- let cO = $Tuple2(nil, 0)
783- func cP (cQ,cR) = if ((cR >= cN))
784- then cQ
785- else eb(cQ, cM[cR])
786-
787- func cS (cQ,cR) = if ((cR >= cN))
788- then cQ
818+ let cN = [0, 1, 2, 3, 4, 5]
819+ let cO = size(cN)
820+ let cP = $Tuple2(nil, 0)
821+ func cQ (cR,cS) = if ((cS >= cO))
822+ then cR
823+ else ej(cR, cN[cS])
824+
825+ func cT (cR,cS) = if ((cS >= cO))
826+ then cR
789827 else throw("List size exceeds 6")
790828
791- cS(cP(cP(cP(cP(cP(cP(cO, 0), 1), 2), 3), 4), 5), 6)
792- }
793-
794-
795-func ee (ef,eg,eh,ei) = {
796- let ej = eh._1
797- let ek = eh._2
798- if ((ek == 0))
799- then $Tuple2(makeString(ef, "_"), makeString(eg, "_"))
800- else if ((ei >= ek))
829+ cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6)
830+ }
831+
832+
833+func em (en,eo,ep,eq) = {
834+ let er = ep._1
835+ let es = ep._2
836+ if ((es == 0))
837+ then $Tuple2(makeString(en, "_"), makeString(eo, "_"))
838+ else if ((eq >= es))
801839 then {
802- func el (cK,dT) = (cK :+ toString((parseIntValue(ef[dT]) + ej[dT])))
803-
804- let cV = {
805- let cM = [0, 1, 2, 3, 4, 5]
806- let cN = size(cM)
807- let cO = nil
808- func cP (cQ,cR) = if ((cR >= cN))
809- then cQ
810- else el(cQ, cM[cR])
811-
812- func cS (cQ,cR) = if ((cR >= cN))
813- then cQ
840+ func et (cL,eb) = (cL :+ toString((parseIntValue(en[eb]) + er[eb])))
841+
842+ let cW = {
843+ let cN = [0, 1, 2, 3, 4, 5]
844+ let cO = size(cN)
845+ let cP = nil
846+ func cQ (cR,cS) = if ((cS >= cO))
847+ then cR
848+ else et(cR, cN[cS])
849+
850+ func cT (cR,cS) = if ((cS >= cO))
851+ then cR
814852 else throw("List size exceeds 6")
815853
816- cS(cP(cP(cP(cP(cP(cP(cO, 0), 1), 2), 3), 4), 5), 6)
854+ cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6)
817855 }
818- $Tuple2(makeString(cV, "_"), makeString(eg, "_"))
856+ $Tuple2(makeString(cW, "_"), makeString(eo, "_"))
819857 }
820858 else {
821- func em (cK,dT) = {
822- let en = fraction(ej[dT], ei, ek)
823- $Tuple2((cK._1 :+ toString((parseIntValue(ef[dT]) + en))), (cK._2 :+ toString(((parseIntValue(eg[dT]) + ej[dT]) - en))))
859+ func eu (cL,eb) = {
860+ let ev = fraction(er[eb], eq, es)
861+ $Tuple2((cL._1 :+ toString((parseIntValue(en[eb]) + ev))), (cL._2 :+ toString(((parseIntValue(eo[eb]) + er[eb]) - ev))))
824862 }
825863
826- let cV = {
827- let cM = [0, 1, 2, 3, 4, 5]
828- let cN = size(cM)
829- let cO = $Tuple2(nil, nil)
830- func cP (cQ,cR) = if ((cR >= cN))
831- then cQ
832- else em(cQ, cM[cR])
833-
834- func cS (cQ,cR) = if ((cR >= cN))
835- then cQ
864+ let cW = {
865+ let cN = [0, 1, 2, 3, 4, 5]
866+ let cO = size(cN)
867+ let cP = $Tuple2(nil, nil)
868+ func cQ (cR,cS) = if ((cS >= cO))
869+ then cR
870+ else eu(cR, cN[cS])
871+
872+ func cT (cR,cS) = if ((cS >= cO))
873+ then cR
836874 else throw("List size exceeds 6")
837875
838- cS(cP(cP(cP(cP(cP(cP(cO, 0), 1), 2), 3), 4), 5), 6)
876+ cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6)
839877 }
840- $Tuple2(makeString(cV._1, "_"), makeString(cV._2, "_"))
878+ $Tuple2(makeString(cW._1, "_"), makeString(cW._2, "_"))
841879 }
842880 }
843881
844882
845-func eo (ep) = if ((ep >= toBigInt(0)))
846- then ep
847- else -(ep)
848-
849-
850-let eq = [[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]]
851-
852-func er (bR,es) = {
853- let et = toInt((bR % cf))
854- let eu = if ((es[0] > et))
883+func ew (ex) = if ((ex >= toBigInt(0)))
884+ then ex
885+ else -(ex)
886+
887+
888+let ey = [[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]]
889+
890+func ez (bS,eA) = {
891+ let eB = toInt((bS % cg))
892+ let eC = if ((eA[0] > eB))
855893 then "A"
856- else if ((es[1] > et))
894+ else if ((eA[1] > eB))
857895 then "B"
858- else if ((es[2] > et))
896+ else if ((eA[2] > eB))
859897 then "C"
860- else if ((es[3] > et))
898+ else if ((eA[3] > eB))
861899 then "D"
862- else if ((es[4] > et))
900+ else if ((eA[4] > eB))
863901 then "E"
864902 else "F"
865- eu
866- }
867-
868-
869-func ev (ew,ex) = {
870- let ey = eq[ex]
871- func ez (cK,cL) = $Tuple2((((((cK._1 + er(cK._2, ey)) + er((cK._2 / cf), ey)) + er((cK._2 / cg), ey)) + er((cK._2 / ch), ey)) + er((cK._2 / ci), ey)), (cK._2 / cj))
872-
873- let eA = {
874- let cM = [1, 2, 3, 4, 5]
875- let cN = size(cM)
876- let cO = $Tuple2("", (ew / ce))
877- func cP (cQ,cR) = if ((cR >= cN))
878- then cQ
879- else ez(cQ, cM[cR])
880-
881- func cS (cQ,cR) = if ((cR >= cN))
882- then cQ
903+ eC
904+ }
905+
906+
907+func eD (eE,eF) = {
908+ let eG = ey[eF]
909+ func eH (cL,cM) = $Tuple2((((((cL._1 + ez(cL._2, eG)) + ez((cL._2 / cg), eG)) + ez((cL._2 / ch), eG)) + ez((cL._2 / ci), eG)) + ez((cL._2 / cj), eG)), (cL._2 / ck))
910+
911+ let eI = {
912+ let cN = [1, 2, 3, 4, 5]
913+ let cO = size(cN)
914+ let cP = $Tuple2("", (eE / cf))
915+ func cQ (cR,cS) = if ((cS >= cO))
916+ then cR
917+ else eH(cR, cN[cS])
918+
919+ func cT (cR,cS) = if ((cS >= cO))
920+ then cR
883921 else throw("List size exceeds 5")
884922
885- cS(cP(cP(cP(cP(cP(cO, 0), 1), 2), 3), 4), 5)
923+ cT(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5)
886924 }
887- eA._1
888- }
889-
890-
891-func eB (eC) = {
892- let eD = split(valueOrElse(getString(eC), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
893-[toString(valueOrElse(parseInt(eD[ao]), 0)), if ((size(split(eD[ap], "_")) == S))
894- then eD[ap]
895- else "0_0_0_0_0_0", if ((size(split(eD[aq], "_")) == S))
896- then eD[aq]
897- else "0_0_0_0_0_0", eD[ar]]
898- }
899-
900-
901-func eE (eF) = {
902- let dn = split(eF, "_")
903- ((V * (parseIntValue(dn[1]) + 1)) * parseIntValue(dn[0]))
904- }
905-
906-
907-func eG (eH) = {
908- let eI = eH[ai]
909- func eJ (cK,di) = (cK + parseIntValue(di))
910-
911- func eK (cK,di) = {
912- let bA = cK._1
913- let eL = (((parseIntValue(di) + ae) - 1) / ae)
914- $Tuple2((bA + 1), (cK._2 + (eL * bh)))
925+ eI._1
926+ }
927+
928+
929+func eJ (eK) = {
930+ let eL = split(valueOrElse(getString(eK), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
931+[toString(valueOrElse(parseInt(eL[ap]), 0)), if ((size(split(eL[aq], "_")) == S))
932+ then eL[aq]
933+ else "0_0_0_0_0_0", if ((size(split(eL[ar], "_")) == S))
934+ then eL[ar]
935+ else "0_0_0_0_0_0", eL[as]]
936+ }
937+
938+
939+func eM (eN) = {
940+ let do = split(eN, "_")
941+ ((V * (parseIntValue(do[1]) + 1)) * parseIntValue(do[0]))
942+ }
943+
944+
945+func eO (eP) = {
946+ let eQ = eP[aj]
947+ func eR (cL,dj) = (cL + parseIntValue(dj))
948+
949+ func eS (cL,dj) = {
950+ let bB = cL._1
951+ let eT = (((parseIntValue(dj) + af) - 1) / af)
952+ $Tuple2((bB + 1), (cL._2 + (eT * bi)))
915953 }
916954
917- let eM = {
918- let cM = split(eH[ag], "_")
919- let cN = size(cM)
920- let cO = 0
921- func cP (cQ,cR) = if ((cR >= cN))
922- then cQ
923- else eJ(cQ, cM[cR])
924-
925- func cS (cQ,cR) = if ((cR >= cN))
926- then cQ
955+ let eU = {
956+ let cN = split(eP[ah], "_")
957+ let cO = size(cN)
958+ let cP = 0
959+ func cQ (cR,cS) = if ((cS >= cO))
960+ then cR
961+ else eR(cR, cN[cS])
962+
963+ func cT (cR,cS) = if ((cS >= cO))
964+ then cR
927965 else throw("List size exceeds 6")
928966
929- cS(cP(cP(cP(cP(cP(cP(cO, 0), 1), 2), 3), 4), 5), 6)
967+ cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6)
930968 }
931- let eN = {
932- let cM = split(eH[ah], "_")
933- let cN = size(cM)
934- let cO = 0
935- func eO (cQ,cR) = if ((cR >= cN))
936- then cQ
937- else eJ(cQ, cM[cR])
938-
939- func eP (cQ,cR) = if ((cR >= cN))
940- then cQ
969+ let eV = {
970+ let cN = split(eP[ai], "_")
971+ let cO = size(cN)
972+ let cP = 0
973+ func eW (cR,cS) = if ((cS >= cO))
974+ then cR
975+ else eR(cR, cN[cS])
976+
977+ func eX (cR,cS) = if ((cS >= cO))
978+ then cR
941979 else throw("List size exceeds 6")
942980
943- eP(eO(eO(eO(eO(eO(eO(cO, 0), 1), 2), 3), 4), 5), 6)
981+ eX(eW(eW(eW(eW(eW(eW(cP, 0), 1), 2), 3), 4), 5), 6)
944982 }
945- let eQ = if ((eI == ""))
983+ let eY = if ((eQ == ""))
946984 then 0
947- else ( let cM = split_4C(eI, "_")
948- let cN = size(cM)
949- let cO = $Tuple2(0, 0)
950- func eR (cQ,cR) = if ((cR >= cN))
951- then cQ
952- else eK(cQ, cM[cR])
953-
954- func eS (cQ,cR) = if ((cR >= cN))
955- then cQ
985+ else ( let cN = split_4C(eQ, "_")
986+ let cO = size(cN)
987+ let cP = $Tuple2(0, 0)
988+ func eZ (cR,cS) = if ((cS >= cO))
989+ then cR
990+ else eS(cR, cN[cS])
991+
992+ func fa (cR,cS) = if ((cS >= cO))
993+ then cR
956994 else throw("List size exceeds 50")
957995
958- eS(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(cO, 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
959- ((eM + eN) + eQ)
960- }
961-
962-
963-func eT (eU,eV,eW) = {
964- let eF = ((toString(eV) + "_") + toString(eW))
965- let eX = eE(eF)
966- let eY = valueOrElse(getString(eU), (eF + ":0_0_0_0_0_0:0_0_0_0_0_0::0"))
967- let eZ = split_4C(eY, ":")
968- let fa = eG(eZ)
969- let fb = if ((5 > size(eZ)))
970- then makeString(["0", toString(fa), toString((eX - fa)), toString(eX)], "_")
971- else {
972- let fc = split(eZ[aj], "_")
973- let fd = parseIntValue(fc[ak])
974- let fe = if ((size(fc) > 1))
975- then parseIntValue(fc[al])
976- else fa
977- makeString([toString(fd), toString(fe), toString(((eX - fd) - fe)), toString(eX)], "_")
978- }
979-[eZ[af], if ((size(split(eZ[ag], "_")) == S))
980- then eZ[ag]
981- else "0_0_0_0_0_0", if ((size(split(eZ[ah], "_")) == S))
982- then eZ[ah]
983- else "0_0_0_0_0_0", eZ[ai], fb]
984- }
985-
986-
987-func ff (eH) = {
988- let fg = eG(eH)
989- let fh = parseIntValue(split(eH[aj], "_")[ak])
990- ((eE(eH[af]) - fg) - fh)
991- }
992-
993-
994-func fi (fj,fk) = {
995- let eL = if ((fj >= 0))
996- then (((fj + fk) - 1) / fk)
997- else -((((-(fj) + fk) - 1) / fk))
998- (eL * bh)
999- }
1000-
1001-
1002-func fl (fm,eH,fn) = if ((size(fm) != 3))
996+ fa(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(cP, 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
997+ ((eU + eV) + eY)
998+ }
999+
1000+
1001+func fb (fc,fd,fe) = {
1002+ let eN = ((toString(fd) + "_") + toString(fe))
1003+ let ff = eM(eN)
1004+ let fg = valueOrElse(getString(fc), (eN + ":0_0_0_0_0_0:0_0_0_0_0_0::0"))
1005+ let fh = split_4C(fg, ":")
1006+ let fi = eO(fh)
1007+ let fj = if ((5 > size(fh)))
1008+ then makeString(["0", toString(fi), toString((ff - fi)), toString(ff)], "_")
1009+ else {
1010+ let fk = split(fh[ak], "_")
1011+ let fl = parseIntValue(fk[al])
1012+ let fm = if ((size(fk) > 1))
1013+ then parseIntValue(fk[am])
1014+ else fi
1015+ makeString([toString(fl), toString(fm), toString(((ff - fl) - fm)), toString(ff)], "_")
1016+ }
1017+[fh[ag], if ((size(split(fh[ah], "_")) == S))
1018+ then fh[ah]
1019+ else "0_0_0_0_0_0", if ((size(split(fh[ai], "_")) == S))
1020+ then fh[ai]
1021+ else "0_0_0_0_0_0", fh[aj], fj]
1022+ }
1023+
1024+
1025+func fn (eP) = {
1026+ let fo = eO(eP)
1027+ let fp = parseIntValue(split(eP[ak], "_")[al])
1028+ ((eM(eP[ag]) - fo) - fp)
1029+ }
1030+
1031+
1032+func fq (fr,fs) = {
1033+ let eT = if ((fr >= 0))
1034+ then (((fr + fs) - 1) / fs)
1035+ else -((((-(fr) + fs) - 1) / fs))
1036+ (eT * bi)
1037+ }
1038+
1039+
1040+func ft (fu,eP,fv) = if ((size(fu) != 3))
10031041 then throw("cargoListStr should contain exactly 2 ':' separators")
10041042 else {
1005- let fo = split(fm[0], "_")
1006- let fp = split(fm[1], "_")
1007- let fq = if ((fm[2] == ""))
1043+ let fw = split(fu[0], "_")
1044+ let fx = split(fu[1], "_")
1045+ let fy = if ((fu[2] == ""))
10081046 then nil
1009- else split(fm[2], "_")
1010- if ((size(fo) != S))
1047+ else split(fu[2], "_")
1048+ if ((size(fw) != S))
10111049 then throw("All 6 resources should be passed")
1012- else if ((size(fp) != S))
1050+ else if ((size(fx) != S))
10131051 then throw("All 6 materials should be passed")
10141052 else {
1015- let ei = ff(eH)
1016- let fr = split(eH[ag], "_")
1017- let fs = split(eH[ah], "_")
1018- let ft = if ((eH[ai] == ""))
1053+ let eq = fn(eP)
1054+ let fz = split(eP[ah], "_")
1055+ let fA = split(eP[ai], "_")
1056+ let fB = if ((eP[aj] == ""))
10191057 then nil
1020- else split(eH[ai], "_")
1021- let eg = split(fn[ap], "_")
1022- let fu = split(fn[aq], "_")
1023- let fv = if ((fn[ar] == ""))
1058+ else split(eP[aj], "_")
1059+ let eo = split(fv[aq], "_")
1060+ let fC = split(fv[ar], "_")
1061+ let fD = if ((fv[as] == ""))
10241062 then nil
1025- else split(fn[ar], "_")
1026- func fw (cK,di) = {
1027- let dT = cK._1
1028- let fx = parseIntValue(di)
1029- let fy = parseIntValue(fr[dT])
1030- let fz = parseIntValue(eg[dT])
1031- if ((fx == 0))
1032- then $Tuple4((dT + 1), (cK._2 :+ fr[dT]), (cK._3 :+ eg[dT]), cK._4)
1033- else if ((fx > 0))
1034- then if ((fx > fz))
1035- then throw((((("Attempt to take " + di) + " from backpack, but only ") + toString(fz)) + " available"))
1036- else $Tuple4((dT + 1), (cK._2 :+ toString((fy + fx))), (cK._3 :+ toString((fz - fx))), (cK._4 + fx))
1037- else if ((-(fx) > fy))
1038- then throw((((("Attempt to take " + toString(-(fx))) + " from warehouse, but only ") + toString(fy)) + " available"))
1039- else $Tuple4((dT + 1), (cK._2 :+ toString((fy + fx))), (cK._3 :+ toString((fz - fx))), (cK._4 + fx))
1063+ else split(fv[as], "_")
1064+ func fE (cL,dj) = {
1065+ let eb = cL._1
1066+ let fF = parseIntValue(dj)
1067+ let fG = parseIntValue(fz[eb])
1068+ let fH = parseIntValue(eo[eb])
1069+ if ((fF == 0))
1070+ then $Tuple4((eb + 1), (cL._2 :+ fz[eb]), (cL._3 :+ eo[eb]), cL._4)
1071+ else if ((fF > 0))
1072+ then if ((fF > fH))
1073+ then throw((((("Attempt to take " + dj) + " from backpack, but only ") + toString(fH)) + " available"))
1074+ else $Tuple4((eb + 1), (cL._2 :+ toString((fG + fF))), (cL._3 :+ toString((fH - fF))), (cL._4 + fF))
1075+ else if ((-(fF) > fG))
1076+ then throw((((("Attempt to take " + toString(-(fF))) + " from warehouse, but only ") + toString(fG)) + " available"))
1077+ else $Tuple4((eb + 1), (cL._2 :+ toString((fG + fF))), (cL._3 :+ toString((fH - fF))), (cL._4 + fF))
10401078 }
10411079
1042- let cV = {
1043- let cM = fo
1044- let cN = size(cM)
1045- let cO = $Tuple4(0, nil, nil, 0)
1046- func cP (cQ,cR) = if ((cR >= cN))
1047- then cQ
1048- else fw(cQ, cM[cR])
1049-
1050- func cS (cQ,cR) = if ((cR >= cN))
1051- then cQ
1080+ let cW = {
1081+ let cN = fw
1082+ let cO = size(cN)
1083+ let cP = $Tuple4(0, nil, nil, 0)
1084+ func cQ (cR,cS) = if ((cS >= cO))
1085+ then cR
1086+ else fE(cR, cN[cS])
1087+
1088+ func cT (cR,cS) = if ((cS >= cO))
1089+ then cR
10521090 else throw("List size exceeds 6")
10531091
1054- cS(cP(cP(cP(cP(cP(cP(cO, 0), 1), 2), 3), 4), 5), 6)
1092+ cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6)
10551093 }
1056- func fA (cK,di) = {
1057- let dT = cK._1
1058- let fx = parseIntValue(di)
1059- let fB = parseIntValue(fs[dT])
1060- let fC = parseIntValue(fu[dT])
1061- if ((fx == 0))
1062- then $Tuple4((dT + 1), (cK._2 :+ fs[dT]), (cK._3 :+ fu[dT]), cK._4)
1063- else if ((fx > 0))
1064- then if ((fx > fC))
1065- then throw((((("Attempt to take " + di) + " from backpack, but only ") + toString(fC)) + " available"))
1066- else $Tuple4((dT + 1), (cK._2 :+ toString((fB + fx))), (cK._3 :+ toString((fC - fx))), (cK._4 + fx))
1067- else if ((-(fx) > fB))
1068- then throw((((("Attempt to take " + toString(-(fx))) + " from warehouse, but only ") + toString(fB)) + " available"))
1069- else $Tuple4((dT + 1), (cK._2 :+ toString((fB + fx))), (cK._3 :+ toString((fC - fx))), (cK._4 + fx))
1094+ func fI (cL,dj) = {
1095+ let eb = cL._1
1096+ let fF = parseIntValue(dj)
1097+ let fJ = parseIntValue(fA[eb])
1098+ let fK = parseIntValue(fC[eb])
1099+ if ((fF == 0))
1100+ then $Tuple4((eb + 1), (cL._2 :+ fA[eb]), (cL._3 :+ fC[eb]), cL._4)
1101+ else if ((fF > 0))
1102+ then if ((fF > fK))
1103+ then throw((((("Attempt to take " + dj) + " from backpack, but only ") + toString(fK)) + " available"))
1104+ else $Tuple4((eb + 1), (cL._2 :+ toString((fJ + fF))), (cL._3 :+ toString((fK - fF))), (cL._4 + fF))
1105+ else if ((-(fF) > fJ))
1106+ then throw((((("Attempt to take " + toString(-(fF))) + " from warehouse, but only ") + toString(fJ)) + " available"))
1107+ else $Tuple4((eb + 1), (cL._2 :+ toString((fJ + fF))), (cL._3 :+ toString((fK - fF))), (cL._4 + fF))
10701108 }
10711109
1072- let dL = {
1073- let cM = fp
1074- let cN = size(cM)
1075- let cO = $Tuple4(0, nil, nil, cV._4)
1076- func eO (cQ,cR) = if ((cR >= cN))
1077- then cQ
1078- else fA(cQ, cM[cR])
1079-
1080- func eP (cQ,cR) = if ((cR >= cN))
1081- then cQ
1110+ let dT = {
1111+ let cN = fx
1112+ let cO = size(cN)
1113+ let cP = $Tuple4(0, nil, nil, cW._4)
1114+ func eW (cR,cS) = if ((cS >= cO))
1115+ then cR
1116+ else fI(cR, cN[cS])
1117+
1118+ func eX (cR,cS) = if ((cS >= cO))
1119+ then cR
10821120 else throw("List size exceeds 6")
10831121
1084- eP(eO(eO(eO(eO(eO(eO(cO, 0), 1), 2), 3), 4), 5), 6)
1122+ eX(eW(eW(eW(eW(eW(eW(cP, 0), 1), 2), 3), 4), 5), 6)
10851123 }
1086- func fD (cK,di) = {
1087- let dT = cK._1
1088- let fx = parseIntValue(di)
1089- let fE = if ((size(ft) > dT))
1090- then parseIntValue(ft[dT])
1124+ func fL (cL,dj) = {
1125+ let eb = cL._1
1126+ let fF = parseIntValue(dj)
1127+ let fM = if ((size(fB) > eb))
1128+ then parseIntValue(fB[eb])
10911129 else 0
1092- let fF = if ((size(fv) > dT))
1093- then parseIntValue(fv[dT])
1130+ let fN = if ((size(fD) > eb))
1131+ then parseIntValue(fD[eb])
10941132 else 0
1095- if ((fx == 0))
1096- then $Tuple4((dT + 1), (cK._2 :+ toString(fE)), (cK._3 :+ toString(fF)), cK._4)
1097- else if ((fx > 0))
1098- then if ((fx > fF))
1099- then throw((((("Attempt to take " + di) + " from backpack, but only ") + toString(fF)) + " available"))
1133+ if ((fF == 0))
1134+ then $Tuple4((eb + 1), (cL._2 :+ toString(fM)), (cL._3 :+ toString(fN)), cL._4)
1135+ else if ((fF > 0))
1136+ then if ((fF > fN))
1137+ then throw((((("Attempt to take " + dj) + " from backpack, but only ") + toString(fN)) + " available"))
11001138 else {
1101- let fG = (fi((fE + fx), ae) - fi(fE, ae))
1102- $Tuple4((dT + 1), (cK._2 :+ toString((fE + fx))), (cK._3 :+ toString((fF - fx))), (cK._4 + fG))
1139+ let fO = (fq((fM + fF), af) - fq(fM, af))
1140+ $Tuple4((eb + 1), (cL._2 :+ toString((fM + fF))), (cL._3 :+ toString((fN - fF))), (cL._4 + fO))
11031141 }
1104- else if ((-(fx) > fE))
1105- then throw((((("Attempt to take " + toString(-(fx))) + " from warehouse, but only ") + toString(fE)) + " available"))
1142+ else if ((-(fF) > fM))
1143+ then throw((((("Attempt to take " + toString(-(fF))) + " from warehouse, but only ") + toString(fM)) + " available"))
11061144 else {
1107- let fG = (fi((fE + fx), ae) - fi(fE, ae))
1108- $Tuple4((dT + 1), (cK._2 :+ toString((fE + fx))), (cK._3 :+ toString((fF - fx))), (cK._4 + fG))
1145+ let fO = (fq((fM + fF), af) - fq(fM, af))
1146+ $Tuple4((eb + 1), (cL._2 :+ toString((fM + fF))), (cL._3 :+ toString((fN - fF))), (cL._4 + fO))
11091147 }
11101148 }
11111149
1112- let eD = if ((size(fq) != 0))
1150+ let eL = if ((size(fy) != 0))
11131151 then {
1114- let cM = fq
1115- let cN = size(cM)
1116- let cO = $Tuple4(0, nil, nil, dL._4)
1117- func eR (cQ,cR) = if ((cR >= cN))
1118- then cQ
1119- else fD(cQ, cM[cR])
1120-
1121- func eS (cQ,cR) = if ((cR >= cN))
1122- then cQ
1152+ let cN = fy
1153+ let cO = size(cN)
1154+ let cP = $Tuple4(0, nil, nil, dT._4)
1155+ func eZ (cR,cS) = if ((cS >= cO))
1156+ then cR
1157+ else fL(cR, cN[cS])
1158+
1159+ func fa (cR,cS) = if ((cS >= cO))
1160+ then cR
11231161 else throw("List size exceeds 50")
11241162
1125- eS(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(eR(cO, 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)
1163+ fa(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(cP, 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)
11261164 }
1127- else $Tuple4(0, ft, fv, dL._4)
1128- let fH = eD._4
1129- if ((fH > ei))
1130- then throw((((("Attempt to put total " + toString(fH)) + " stuff, but only ") + toString(ei)) + " warehouse space left"))
1131- else $Tuple7(makeString(cV._2, "_"), makeString(dL._2, "_"), makeString(eD._2, "_"), makeString(cV._3, "_"), makeString(dL._3, "_"), makeString(eD._3, "_"), fH)
1165+ else $Tuple4(0, fB, fD, dT._4)
1166+ let fP = eL._4
1167+ if ((fP > eq))
1168+ then throw((((("Attempt to put total " + toString(fP)) + " stuff, but only ") + toString(eq)) + " warehouse space left"))
1169+ else $Tuple7(makeString(cW._2, "_"), makeString(dT._2, "_"), makeString(eL._2, "_"), makeString(cW._3, "_"), makeString(dT._3, "_"), makeString(eL._3, "_"), fP)
11321170 }
11331171 }
11341172
11351173
1136-func fI (fJ,fK) = {
1137- let aS = toString(fJ)
1138- let fL = eo(toBigInt(fK))
1139- let fM = valueOrElse(getInteger(cl()), (ck + 1))
1140- let cn = toString(fM)
1141- let ex = toInt((fL % ce))
1142- let dW = ev(fL, ex)
1143- let fN = aa[ex]
1144- let fO = Issue(cD(cn, "S"), makeString([cn, "S", dW, fN], "_"), 1, 0, false)
1145- let au = calculateAssetId(fO)
1146- let fP = toBase58String(au)
1147- $Tuple2([IntegerEntry(cl(), (fM + 1)), fO, StringEntry(cm(cn), fP), StringEntry(at(fP), aS), StringEntry(cs(cn), aS), IntegerEntry(ax(fP), 0), IntegerEntry(cq(fP, aS), 0), ScriptTransfer(fJ, 1, au)], $Tuple2(fP, fN))
1148- }
1149-
1150-
1151-func fQ (aS,fR,fS) = if (!(sigVerify_8Kb(fR, fS, bW)))
1174+func fQ (fR,fS) = {
1175+ let aT = toString(fR)
1176+ let fT = ew(toBigInt(fS))
1177+ let fU = valueOrElse(getInteger(cm()), (cl + 1))
1178+ let co = toString(fU)
1179+ let eF = toInt((fT % cf))
1180+ let ee = eD(fT, eF)
1181+ let fV = aa[eF]
1182+ let fW = Issue(cE(co, "S"), makeString([co, "S", ee, fV], "_"), 1, 0, false)
1183+ let av = calculateAssetId(fW)
1184+ let fX = toBase58String(av)
1185+ $Tuple2([IntegerEntry(cm(), (fU + 1)), fW, StringEntry(cn(co), fX), StringEntry(au(fX), aT), StringEntry(ct(co), aT), IntegerEntry(ay(fX), 0), IntegerEntry(cr(fX, aT), 0), ScriptTransfer(fR, 1, av)], $Tuple2(fX, fV))
1186+ }
1187+
1188+
1189+func fY (aT,fZ,ga) = if (!(sigVerify_8Kb(fZ, ga, bX)))
11521190 then throw("signature does not match")
11531191 else {
1154- let dn = split(toUtf8String(fR), ";")
1155- let fT = split(dn[0], "|")
1156- let fU = split(fT[cz], "_")
1157- let fV = parseIntValue(fU[0])
1158- let fW = parseIntValue(fU[1])
1159- let fX = split(dn[1], ":")
1160- let fY = fX[0]
1161- let fZ = parseIntValue(fT[cA])
1162- if (if ((fZ > (lastBlock.timestamp + bY)))
1192+ let do = split(toUtf8String(fZ), ";")
1193+ let gb = split(do[0], "|")
1194+ let gc = split(gb[cA], "_")
1195+ let gd = parseIntValue(gc[0])
1196+ let ge = parseIntValue(gc[1])
1197+ let gf = split(do[1], ":")
1198+ let gg = gf[0]
1199+ let gh = parseIntValue(gb[cB])
1200+ if (if ((gh > (lastBlock.timestamp + bZ)))
11631201 then true
1164- else ((lastBlock.timestamp - bY) > fZ))
1165- then throw(((("signature outdated: logTime=" + toString(fZ)) + ", bcTime=") + toString(lastBlock.timestamp)))
1202+ else ((lastBlock.timestamp - bZ) > gh))
1203+ then throw(((("signature outdated: logTime=" + toString(gh)) + ", bcTime=") + toString(lastBlock.timestamp)))
11661204 else {
1167- let ga = fX[1]
1168- let gb = valueOrElse(getString(as(aS)), "")
1169- if ((gb != ga))
1170- then throw(((("Tx ids don't match! In state: " + gb) + ", in msg: ") + ga))
1205+ let gi = gf[1]
1206+ let gj = valueOrElse(getString(at(aT)), "")
1207+ if ((gj != gi))
1208+ then throw(((("Tx ids don't match! In state: " + gj) + ", in msg: ") + gi))
11711209 else {
1172- let p = valueOrErrorMessage(getString(aM(aS)), "You don't have a duck staked")
1173- let gc = aP(p)
1174- let gd = J(valueOrElse(getInteger(r(p)), 0))
1175- let ge = valueOrElse(getInteger(gc), gd)
1176- if ((ge != fV))
1177- then throw(((("oldHealth=" + toString(ge)) + " from state does not match one from flight log=") + toString(fV)))
1178- else if ((0 >= fV))
1210+ let p = valueOrErrorMessage(getString(aN(aT)), "You don't have a duck staked")
1211+ let gk = aQ(p)
1212+ let gl = J(valueOrElse(getInteger(r(p)), 0))
1213+ let gm = valueOrElse(getInteger(gk), gl)
1214+ if ((gm != gd))
1215+ then throw(((("oldHealth=" + toString(gm)) + " from state does not match one from flight log=") + toString(gd)))
1216+ else if ((0 >= gd))
11791217 then throw("You can't fly with zero health")
11801218 else {
1181- let gf = if ((size(fT) > cB))
1182- then fT[cB]
1219+ let gn = if ((size(gb) > cC))
1220+ then gb[cC]
11831221 else ""
1184- let gg = if ((size(fT) > cC))
1185- then fT[cC]
1222+ let go = if ((size(gb) > cD))
1223+ then gb[cD]
11861224 else ""
1187- let gh = if (if ((fW > 0))
1188- then (gf == "$")
1225+ let gp = if (if ((ge > 0))
1226+ then (gn == "$")
11891227 else false)
1190- then bQ(invoke(bB, "sendUsdtPrize", [aS], nil))
1228+ then bR(invoke(bC, "sendUsdtPrize", [aT], nil))
11911229 else 0
1192- $Tuple5(fW, p, gh, fY, gg)
1230+ $Tuple5(ge, p, gp, gg, go)
11931231 }
11941232 }
11951233 }
11961234 }
11971235
11981236
1199-func gi (fJ,fK,fR,fS) = {
1200- let aS = toString(fJ)
1201- let ey = fQ(aS, fR, fS)
1202- let gc = aP(ey._2)
1203- let eC = aN(ey._2)
1204- let fn = eB(eC)
1205- let gj = split(fn[aq], "_")
1206- let gk = makeString(cW(true, gj, cc), "_")
1207- let ds = dd(fn[ar], ey._5)
1208- if ((0 >= ey._1))
1209- then $Tuple3([IntegerEntry(gc, 0), StringEntry(eC, makeString([fn[ao], fn[ap], fn[aq], ds], ":"))], "", 0)
1210- else {
1211- let gl = fI(fJ, fK)
1212- let fP = gl._2._1
1213- $Tuple3((((gl._1 :+ StringEntry(aO(ey._2), makeString([gl._2._2, "L", fP], "_"))) :+ IntegerEntry(gc, ey._1)) :+ StringEntry(eC, makeString([fn[ao], fn[ap], gk, ds], ":"))), fP, ey._3)
1214- }
1215- }
1216-
1217-
1218-func gm (aE,gn) = {
1219- let eW = valueOrElse(getInteger(ax(aE)), 0)
1220- let go = valueOrElse(getInteger(ay(R, aE)), 0)
1221- let gp = (eW / 6)
1222- let gq = (eW / 7)
1223- ((T + fraction(T, ((eW + gp) + (2 * gq)), 5)) + fraction(T, go, (gn * 5)))
1224- }
1225-
1226-
1227-func gr (b,gs,gt) = {
1228- let gu = if ((gs == cw))
1229- then $Tuple2(gt, valueOrElse(getString(aM(b)), ""))
1230- else {
1231- let p = valueOrErrorMessage(getString(aM(b)), "You don't have a duck staked")
1232- let gv = valueOrElse(getString(aO(p)), W)
1233- let gw = split(value(gv), "_")
1234- if ((gw[aU] != "L"))
1235- then throw((("Duck location type is " + gw[aU]) + ", but should be L"))
1236- else $Tuple2(gw[aV], p)
1237- }
1238- let aE = gu._1
1239- let gx = gu._2
1240- let gy = value(assetInfo(fromBase58String(aE)))
1241- let gz = aw(aE)
1242- let gA = valueOrErrorMessage(getInteger(gz), (("Land " + gy.name) + " is not staked"))
1243- let gB = valueOrErrorMessage(getString(at(aE)), (("NFT " + gy.name) + " is orphaned"))
1244- if ((gB != b))
1237+func gq (fR,fS,fZ,ga) = {
1238+ let aT = toString(fR)
1239+ let eG = fY(aT, fZ, ga)
1240+ let gk = aQ(eG._2)
1241+ let eK = aO(eG._2)
1242+ let fv = eJ(eK)
1243+ let gr = split(fv[ar], "_")
1244+ let gs = makeString(cX(true, gr, cd), "_")
1245+ let dt = de(fv[as], eG._5)
1246+ if ((0 >= eG._1))
1247+ then $Tuple3([IntegerEntry(gk, 0), StringEntry(eK, makeString([fv[ap], fv[aq], fv[ar], dt], ":"))], "", 0)
1248+ else {
1249+ let gt = fQ(fR, fS)
1250+ let fX = gt._2._1
1251+ $Tuple3((((gt._1 :+ StringEntry(aP(eG._2), makeString([gt._2._2, "L", fX], "_"))) :+ IntegerEntry(gk, eG._1)) :+ StringEntry(eK, makeString([fv[ap], fv[aq], gs, dt], ":"))), fX, eG._3)
1252+ }
1253+ }
1254+
1255+
1256+func gu (aF,gv) = {
1257+ let fe = valueOrElse(getInteger(ay(aF)), 0)
1258+ let gw = valueOrElse(getInteger(az(R, aF)), 0)
1259+ let gx = (fe / 6)
1260+ let gy = (fe / 7)
1261+ ((T + fraction(T, ((fe + gx) + (2 * gy)), 5)) + fraction(T, gw, (gv * 5)))
1262+ }
1263+
1264+
1265+func gz (b,gA,gB) = {
1266+ let gC = if ((gA == cx))
1267+ then $Tuple2(gB, valueOrElse(getString(aN(b)), ""))
1268+ else {
1269+ let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked")
1270+ let gD = valueOrElse(getString(aP(p)), W)
1271+ let gE = split(value(gD), "_")
1272+ if ((gE[aV] != "L"))
1273+ then throw((("Duck location type is " + gE[aV]) + ", but should be L"))
1274+ else $Tuple2(gE[aW], p)
1275+ }
1276+ let aF = gC._1
1277+ let gF = gC._2
1278+ let gG = value(assetInfo(fromBase58String(aF)))
1279+ let gH = ax(aF)
1280+ let gI = valueOrErrorMessage(getInteger(gH), (("Land " + gG.name) + " is not staked"))
1281+ let gJ = valueOrErrorMessage(getString(au(aF)), (("NFT " + gG.name) + " is orphaned"))
1282+ if ((gJ != b))
12451283 then throw((P + " is not yours"))
12461284 else {
1247- let gC = split(gy.description, "_")
1248- $Tuple4(gx, aE, gC, gA)
1249- }
1250- }
1251-
1252-
1253-func gD (b,fj,gs,gt) = if ((0 > fj))
1285+ let gK = split(gG.description, "_")
1286+ $Tuple4(gF, aF, gK, gI)
1287+ }
1288+ }
1289+
1290+
1291+func gL (b,fr,gA,gB) = if ((0 > fr))
12541292 then throw("Negative amount")
12551293 else {
1256- let gE = gr(b, gs, gt)
1257- let bT = gE._3[bH]
1258- let dP = dV(gE._3[bI])
1259- let dZ = (lastBlock.timestamp - gE._4)
1260- if ((0 > dZ))
1261- then throw(((("Saved timestamp is in future, saved = " + toString(gE._4)) + ", current = ") + toString(lastBlock.timestamp)))
1294+ let dF = gz(b, gA, gB)
1295+ let bU = dF._3[bI]
1296+ let dX = ed(dF._3[bJ])
1297+ let eh = (lastBlock.timestamp - dF._4)
1298+ if ((0 > eh))
1299+ then throw(((("Saved timestamp is in future, saved = " + toString(dF._4)) + ", current = ") + toString(lastBlock.timestamp)))
12621300 else {
1263- let gn = bS(bT)
1264- let gF = gm(gE._2, gn)
1265- let gG = fraction(dZ, (gF * gn), U)
1266- if ((fj > gG))
1267- then throw(((("Not enough resources, available = " + toString(gG)) + ", requested = ") + toString(fj)))
1301+ let gv = bT(bU)
1302+ let gM = gu(dF._2, gv)
1303+ let gN = fraction(eh, (gM * gv), U)
1304+ if ((fr > gN))
1305+ then throw(((("Not enough resources, available = " + toString(gN)) + ", requested = ") + toString(fr)))
12681306 else {
1269- let gH = fraction((gG - fj), U, (gF * gn))
1270- let gI = (lastBlock.timestamp - gH)
1271- let eV = (gn / bi)
1272- let eh = ed(dP, (dZ - gH), eV, gF)
1273- let eU = aD(gE._2)
1274- let eW = valueOrElse(getInteger(ax(gE._2)), 0)
1275- let eH = eT(eU, eV, eW)
1276- let fc = split(eH[aj], "_")
1277- let ei = parseIntValue(fc[am])
1278- if (if ((gs == cw))
1279- then (fj > ei)
1307+ let gO = fraction((gN - fr), U, (gM * gv))
1308+ let gP = (lastBlock.timestamp - gO)
1309+ let fd = (gv / bj)
1310+ let ep = el(dX, (eh - gO), fd, gM)
1311+ let fc = aE(dF._2)
1312+ let fe = valueOrElse(getInteger(ay(dF._2)), 0)
1313+ let eP = fb(fc, fd, fe)
1314+ let fk = split(eP[ak], "_")
1315+ let eq = parseIntValue(fk[an])
1316+ if (if ((gA == cx))
1317+ then (fr > eq)
12801318 else false)
1281- then throw((("Only " + toString(ei)) + " space left in warehouse"))
1319+ then throw((("Only " + toString(eq)) + " space left in warehouse"))
12821320 else {
1283- let eC = aN(gE._1)
1284- let fn = eB(eC)
1285- let eg = split(fn[ap], "_")
1286- let ef = split(eH[ag], "_")
1287- let gJ = if ((gs == cw))
1288- then $Tuple4(dX(ef, dP, (dZ - gH), eV, gF), fn[ap], (parseIntValue(fc[al]) + eh._2), (parseIntValue(fc[am]) - eh._2))
1289- else if ((gs == cx))
1290- then $Tuple4(eH[ag], dX(eg, dP, (dZ - gH), eV, gF), parseIntValue(fc[al]), parseIntValue(fc[am]))
1321+ let eK = aO(dF._1)
1322+ let fv = eJ(eK)
1323+ let eo = split(fv[aq], "_")
1324+ let en = split(eP[ah], "_")
1325+ let gQ = if ((gA == cx))
1326+ then $Tuple4(ef(en, dX, (eh - gO), fd, gM), fv[aq], (parseIntValue(fk[am]) + ep._2), (parseIntValue(fk[an]) - ep._2))
1327+ else if ((gA == cy))
1328+ then $Tuple4(eP[ah], ef(eo, dX, (eh - gO), fd, gM), parseIntValue(fk[am]), parseIntValue(fk[an]))
12911329 else {
1292- let gK = ee(ef, eg, eh, ei)
1293- let gL = min([parseIntValue(fc[am]), eh._2])
1294- $Tuple4(gK._1, gK._2, (parseIntValue(fc[al]) + gL), (parseIntValue(fc[am]) - gL))
1330+ let gR = em(en, eo, ep, eq)
1331+ let gS = min([parseIntValue(fk[an]), ep._2])
1332+ $Tuple4(gR._1, gR._2, (parseIntValue(fk[am]) + gS), (parseIntValue(fk[an]) - gS))
12951333 }
1296- let gM = gJ._1
1297- let gN = gJ._2
1298- let gO = gJ._3
1299- let gP = gJ._4
1300- $Tuple5([IntegerEntry(aw(gE._2), gI), IntegerEntry(aA(P, gE._2, b), gI)], eC, [fn[ao], gN, fn[aq], fn[ar]], eU, [eH[af], gM, eH[ah], eH[ai], makeString([fc[ak], toString(gO), toString(gP), fc[an]], "_")])
1334+ let gT = gQ._1
1335+ let gU = gQ._2
1336+ let gV = gQ._3
1337+ let gW = gQ._4
1338+ $Tuple5([IntegerEntry(ax(dF._2), gP), IntegerEntry(aB(P, dF._2, b), gP)], eK, [fv[ap], gU, fv[ar], fv[as]], fc, [eP[ag], gT, eP[ai], eP[aj], makeString([fk[al], toString(gV), toString(gW), fk[ao]], "_")])
13011339 }
13021340 }
13031341 }
13041342 }
13051343
13061344
1307-func gQ (b,aE,gn,gs) = {
1308- let gz = aw(aE)
1309- let gA = value(getInteger(gz))
1310- let gG = (fraction((lastBlock.timestamp - gA), gm(aE, gn), U) * gn)
1311- gD(b, gG, gs, aE)
1312- }
1313-
1314-
1315-func gR (cX,fJ,gS,aE) = {
1316- let b = toString(fJ)
1317- let gE = gr(b, cy, aE)
1318- let gn = bS(gE._3[bH])
1319- let gT = ax(gE._2)
1320- let gU = valueOrElse(getInteger(gT), 0)
1321- if ((gU >= 3))
1345+func gX (b,aF,gv,gA) = {
1346+ let gH = ax(aF)
1347+ let gI = value(getInteger(gH))
1348+ let gN = (fraction((lastBlock.timestamp - gI), gu(aF, gv), U) * gv)
1349+ gL(b, gN, gA, aF)
1350+ }
1351+
1352+
1353+func gY (cY,fR,gZ,aF) = {
1354+ let b = toString(fR)
1355+ let dF = gz(b, cz, aF)
1356+ let gv = bT(dF._3[bI])
1357+ let ha = ay(dF._2)
1358+ let hb = valueOrElse(getInteger(ha), 0)
1359+ if ((hb >= 3))
13221360 then throw("Currently max infrastructure level = 3")
13231361 else {
1324- let O = (gU + 1)
1325- let gV = fraction(cb, (gn * O), bi)
1326- if (if (!(cX))
1327- then (gS != gV)
1362+ let O = (hb + 1)
1363+ let hc = fraction(cc, (gv * O), bj)
1364+ if (if (!(cY))
1365+ then (gZ != hc)
13281366 else false)
1329- then throw(("Payment attached should be " + toString(gV)))
1367+ then throw(("Payment attached should be " + toString(hc)))
13301368 else {
1331- let eC = aN(gE._1)
1332- let fn = eB(eC)
1333- let gj = split(fn[aq], "_")
1334- let gW = fraction(bd, (gn * O), bi)
1335- let gk = makeString(cW(cX, gj, gW), "_")
1336- let gX = gQ(b, gE._2, gn, cy)
1337- let gY = gX._5
1338- let gZ = eE(gY[af])
1339- let ha = makeString([split(gY[af], "_")[0], toString(O)], "_")
1340- let hb = eE(ha)
1341- let fc = split(gY[aj], "_")
1342- let hc = makeString([fc[ak], fc[al], toString(((parseIntValue(fc[am]) + hb) - gZ)), toString(hb)], "_")
1343- $Tuple3(([IntegerEntry(gT, O), IntegerEntry(cq(gE._2, b), O), StringEntry(eC, makeString([fn[ao], gX._3[ap], gk, fn[ar]], ":")), StringEntry(gX._4, makeString([ha, gY[ag], gY[ah], gY[ai], hc], ":"))] ++ gX._1), O, gW)
1369+ let eK = aO(dF._1)
1370+ let fv = eJ(eK)
1371+ let gr = split(fv[ar], "_")
1372+ let hd = fraction(be, (gv * O), bj)
1373+ let gs = makeString(cX(cY, gr, hd), "_")
1374+ let he = gX(b, dF._2, gv, cz)
1375+ let hf = he._5
1376+ let hg = eM(hf[ag])
1377+ let hh = makeString([split(hf[ag], "_")[0], toString(O)], "_")
1378+ let hi = eM(hh)
1379+ let fk = split(hf[ak], "_")
1380+ let hj = makeString([fk[al], fk[am], toString(((parseIntValue(fk[an]) + hi) - hg)), toString(hi)], "_")
1381+ $Tuple3(([IntegerEntry(ha, O), IntegerEntry(cr(dF._2, b), O), StringEntry(eK, makeString([fv[ap], he._3[aq], gs, fv[as]], ":")), StringEntry(he._4, makeString([hh, hf[ah], hf[ai], hf[aj], hj], ":"))] ++ he._1), O, hd)
13441382 }
13451383 }
13461384 }
13471385
13481386
1349-func hd (p,he) = if (!(aY))
1387+func hk (p,hl) = if (!(aZ))
13501388 then $Tuple2(nil, 0)
13511389 else {
1352- let hf = r(p)
1353- let hg = q(p)
1354- let I = valueOrElse(getInteger(bC, hg), 0)
1355- let N = (I + he)
1356- let hh = L(valueOrElse(getInteger(bC, hf), 0), N)
1357- let hi = s(p)
1358- $Tuple2([IntegerEntry(hf, hh[0]), IntegerEntry(hg, N), IntegerEntry(hi, (valueOrElse(getInteger(hi), 0) + hh[1]))], N)
1390+ let hm = r(p)
1391+ let hn = q(p)
1392+ let I = valueOrElse(getInteger(bD, hn), 0)
1393+ let N = (I + hl)
1394+ let ho = L(valueOrElse(getInteger(bD, hm), 0), N)
1395+ let hp = s(p)
1396+ $Tuple2([IntegerEntry(hm, ho[0]), IntegerEntry(hn, N), IntegerEntry(hp, (valueOrElse(getInteger(hp), 0) + ho[1]))], N)
13591397 }
13601398
13611399
1362-func hj (b,he) = if (!(aY))
1400+func hq (b,hl) = if (!(aZ))
13631401 then $Tuple2(nil, 0)
13641402 else {
1365- let hf = v(b)
1366- let hg = u(b)
1367- let I = valueOrElse(getInteger(bC, hg), 0)
1368- let N = (I + he)
1369- let hh = L(valueOrElse(getInteger(bC, hf), 0), N)
1370- let hi = w(b)
1371- $Tuple2([IntegerEntry(hf, hh[0]), IntegerEntry(hg, N), IntegerEntry(hi, (valueOrElse(getInteger(hi), 0) + hh[1]))], N)
1403+ let hm = v(b)
1404+ let hn = u(b)
1405+ let I = valueOrElse(getInteger(bD, hn), 0)
1406+ let N = (I + hl)
1407+ let ho = L(valueOrElse(getInteger(bD, hm), 0), N)
1408+ let hp = w(b)
1409+ $Tuple2([IntegerEntry(hm, ho[0]), IntegerEntry(hn, N), IntegerEntry(hp, (valueOrElse(getInteger(hp), 0) + ho[1]))], N)
13721410 }
13731411
13741412
1375-func hk (b) = {
1376- let p = valueOrErrorMessage(getString(aM(b)), "You don't have a duck staked")
1377- let hl = aH(b)
1378- let hm = getString(hl)
1379- if (!(isDefined(hm)))
1413+func hr (b) = {
1414+ let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked")
1415+ let hs = aI(b)
1416+ let ht = getString(hs)
1417+ if (!(isDefined(ht)))
13801418 then throw("You are not eligible for ONBOARD artifact")
13811419 else {
1382- let hn = aJ(b)
1383- let ho = getString(hn)
1384- if (isDefined(ho))
1385- then throw(("You already used your ONBOARD artifact on duck " + value(ho)))
1420+ let hu = aK(b)
1421+ let hv = getString(hu)
1422+ if (isDefined(hv))
1423+ then throw(("You already used your ONBOARD artifact on duck " + value(hv)))
13861424 else {
1387- let hp = aI(p)
1388- let hq = getString(hp)
1389- if (isDefined(hq))
1390- then throw(((("The duck " + p) + " already got points from ONBOARD artifact from user ") + value(hq)))
1391- else ([StringEntry(hn, p), StringEntry(hp, b)] ++ hd(p, F)._1)
1425+ let hw = aJ(p)
1426+ let hx = getString(hw)
1427+ if (isDefined(hx))
1428+ then throw(((("The duck " + p) + " already got points from ONBOARD artifact from user ") + value(hx)))
1429+ else ([StringEntry(hu, p), StringEntry(hw, b)] ++ hk(p, F)._1)
13921430 }
13931431 }
13941432 }
13951433
13961434
1397-func hr (b,gt) = {
1398- let gE = gr(b, cy, gt)
1399- let aE = gE._2
1400- let gn = bS(gE._3[bH])
1401- let hs = ay(R, aE)
1402- if ((valueOrElse(getInteger(hs), 0) > 0))
1435+func hy (b,gB) = {
1436+ let dF = gz(b, cz, gB)
1437+ let aF = dF._2
1438+ let gv = bT(dF._3[bI])
1439+ let hz = az(R, aF)
1440+ if ((valueOrElse(getInteger(hz), 0) > 0))
14031441 then throw("Presale artifact is already activated")
1404- else if ((parseIntValue(gE._3[bG]) > ck))
1405- then throw((((P + " ") + aE) + " is not eligible for presale artifact"))
1442+ else if ((parseIntValue(dF._3[bH]) > cl))
1443+ then throw((((P + " ") + aF) + " is not eligible for presale artifact"))
14061444 else {
1407- let gX = gQ(b, aE, gn, cy)
1408- ((((gX._1 :+ IntegerEntry(hs, gn)) :+ IntegerEntry(cr(R, aE, b), gn)) :+ StringEntry(gX._2, makeString(gX._3, ":"))) :+ StringEntry(gX._4, makeString(gX._5, ":")))
1445+ let he = gX(b, aF, gv, cz)
1446+ ((((he._1 :+ IntegerEntry(hz, gv)) :+ IntegerEntry(cs(R, aF, b), gv)) :+ StringEntry(he._2, makeString(he._3, ":"))) :+ StringEntry(he._4, makeString(he._5, ":")))
14091447 }
14101448 }
14111449
14121450
1413-func ht (hu,O,hv,b,hw,fK,hx) = {
1414- let p = valueOrErrorMessage(getString(aM(b)), "You don't have a duck staked")
1415- func hy (cK,aE) = {
1416- let gy = value(assetInfo(fromBase58String(aE)))
1417- let gz = aw(aE)
1418- let gA = valueOrErrorMessage(getInteger(gz), (("NFT " + gy.name) + " is not staked"))
1419- let gB = valueOrErrorMessage(getString(at(aE)), (("NFT " + gy.name) + " is orphaned"))
1420- if ((gB != b))
1451+func hA (hB,O,hC,b,hD,fS,hE) = {
1452+ let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked")
1453+ func hF (cL,aF) = {
1454+ let gG = value(assetInfo(fromBase58String(aF)))
1455+ let gH = ax(aF)
1456+ let gI = valueOrErrorMessage(getInteger(gH), (("NFT " + gG.name) + " is not staked"))
1457+ let gJ = valueOrErrorMessage(getString(au(aF)), (("NFT " + gG.name) + " is orphaned"))
1458+ if ((gJ != b))
14211459 then throw((P + " is not yours"))
14221460 else {
1423- let gC = split(gy.description, "_")
1424- let fN = gC[bJ]
1425- if (if ((cK._3 != ""))
1426- then (cK._3 != fN)
1461+ let gK = split(gG.description, "_")
1462+ let fV = gK[bK]
1463+ if (if ((cL._3 != ""))
1464+ then (cL._3 != fV)
14271465 else false)
14281466 then throw("Lands should be on the same continent to merge")
14291467 else {
1430- let bT = gC[bH]
1431- let hz = cK._1
1432- let dT = valueOrErrorMessage(indexOf(hz, bT), "You haven't passed all the lands needed")
1433- let hA = (take(hz, dT) + drop(hz, (dT + 1)))
1434- let gn = bS(bT)
1435- let hB = (cK._2 + valueOrElse(getInteger(ay(R, aE)), 0))
1436- let eW = valueOrElse(getInteger(ax(aE)), 0)
1437- let hC = {
1438- let bb = bT
1439- if (("S" == bb))
1468+ let bU = gK[bI]
1469+ let hG = cL._1
1470+ let eb = valueOrErrorMessage(indexOf(hG, bU), "You haven't passed all the lands needed")
1471+ let hH = (take(hG, eb) + drop(hG, (eb + 1)))
1472+ let gv = bT(bU)
1473+ let hI = (cL._2 + valueOrElse(getInteger(az(R, aF)), 0))
1474+ let fe = valueOrElse(getInteger(ay(aF)), 0)
1475+ let hJ = {
1476+ let bc = bU
1477+ if (("S" == bc))
14401478 then 3
1441- else if (("M" == bb))
1479+ else if (("M" == bc))
14421480 then 4
1443- else if (("L" == bb))
1481+ else if (("L" == bc))
14441482 then 5
1445- else if (("XL" == bb))
1483+ else if (("XL" == bc))
14461484 then 6
14471485 else throw("Only S, M, L, XL can merge")
14481486 }
1449- if ((eW != hC))
1487+ if ((fe != hJ))
14501488 then throw("All lands should be maxed to merge")
14511489 else {
1452- let cn = gC[bG]
1453- let dP = dV(gC[bI])
1454- let dZ = (lastBlock.timestamp - gA)
1455- if ((0 > dZ))
1456- then throw(((("Saved timestamp is in future, saved = " + toString(gA)) + ", current = ") + toString(lastBlock.timestamp)))
1490+ let co = gK[bH]
1491+ let dX = ed(gK[bJ])
1492+ let eh = (lastBlock.timestamp - gI)
1493+ if ((0 > eh))
1494+ then throw(((("Saved timestamp is in future, saved = " + toString(gI)) + ", current = ") + toString(lastBlock.timestamp)))
14571495 else {
1458- let gF = gm(aE, gn)
1459- let eV = (gn / bi)
1460- let gN = dX(split(cK._4, "_"), dP, dZ, eV, gF)
1461- let cU = dN(split(cK._6, "_"), dP, eV, -1)
1462- let hD = cK._7
1463- let bA = indexOf(hD, aE)
1464- if (!(isDefined(bA)))
1465- then throw(("Your staked lands don't contain " + aE))
1496+ let gM = gu(aF, gv)
1497+ let fd = (gv / bj)
1498+ let gU = ef(split(cL._4, "_"), dX, eh, fd, gM)
1499+ let cV = dV(split(cL._6, "_"), dX, fd, -1)
1500+ let hK = cL._7
1501+ let bB = indexOf(hK, aF)
1502+ if (!(isDefined(bB)))
1503+ then throw(("Your staked lands don't contain " + aF))
14661504 else {
1467- let hE = av(aE)
1468- let hF = valueOrElse(getString(hE), "")
1469- $Tuple8(hA, hB, fN, gN, (((((((((((((cK._5 :+ DeleteEntry(aw(aE))) :+ DeleteEntry(aA(P, aE, b))) :+ DeleteEntry(cm(cn))) :+ DeleteEntry(at(aE))) :+ DeleteEntry(ax(aE))) :+ DeleteEntry(cq(aE, b))) :+ DeleteEntry(ay(R, aE))) :+ DeleteEntry(cr(R, aE, b))) :+ DeleteEntry(cs(cn))) :+ DeleteEntry(aD(aE))) :+ DeleteEntry(hE)) :+ DeleteEntry(co(hF))) :+ Burn(fromBase58String(aE), 1)), cU, removeByIndex(hD, value(bA)), (cK._8 + gn))
1505+ let hL = aw(aF)
1506+ let hM = valueOrElse(getString(hL), "")
1507+ $Tuple8(hH, hI, fV, gU, (((((((((((((cL._5 :+ DeleteEntry(ax(aF))) :+ DeleteEntry(aB(P, aF, b))) :+ DeleteEntry(cn(co))) :+ DeleteEntry(au(aF))) :+ DeleteEntry(ay(aF))) :+ DeleteEntry(cr(aF, b))) :+ DeleteEntry(az(R, aF))) :+ DeleteEntry(cs(R, aF, b))) :+ DeleteEntry(ct(co))) :+ DeleteEntry(aE(aF))) :+ DeleteEntry(hL)) :+ DeleteEntry(cp(hM))) :+ Burn(fromBase58String(aF), 1)), cV, removeByIndex(hK, value(bB)), (cL._8 + gv))
14701508 }
14711509 }
14721510 }
14731511 }
14741512 }
14751513 }
14761514
1477- let eC = aN(p)
1478- let fn = eB(eC)
1479- let hG = valueOrElse(getString(bK()), "0_0_0_0_0_0")
1480- let hH = bL(b)
1481- let hI = getString(hH)
1482- let hJ = if (isDefined(hI))
1483- then split_51C(value(hI), "_")
1515+ let eK = aO(p)
1516+ let fv = eJ(eK)
1517+ let hN = valueOrElse(getString(bL()), "0_0_0_0_0_0")
1518+ let hO = bM(b)
1519+ let hP = getString(hO)
1520+ let hQ = if (isDefined(hP))
1521+ then split_51C(value(hP), "_")
14841522 else nil
1485- let cV = {
1486- let cM = hw
1487- let cN = size(cM)
1488- let cO = $Tuple8(hv, 0, "", fn[ap], nil, hG, hJ, 0)
1489- func cP (cQ,cR) = if ((cR >= cN))
1490- then cQ
1491- else hy(cQ, cM[cR])
1492-
1493- func cS (cQ,cR) = if ((cR >= cN))
1494- then cQ
1523+ let cW = {
1524+ let cN = hD
1525+ let cO = size(cN)
1526+ let cP = $Tuple8(hC, 0, "", fv[aq], nil, hN, hQ, 0)
1527+ func cQ (cR,cS) = if ((cS >= cO))
1528+ then cR
1529+ else hF(cR, cN[cS])
1530+
1531+ func cT (cR,cS) = if ((cS >= cO))
1532+ then cR
14951533 else throw("List size exceeds 5")
14961534
1497- cS(cP(cP(cP(cP(cP(cO, 0), 1), 2), 3), 4), 5)
1535+ cT(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5)
14981536 }
1499- let fN = cV._3
1500- let ex = valueOrErrorMessage(indexOf(aa, fN), ("Unknown continent: " + fN))
1501- let dW = ev(eo(toBigInt(fK)), ex)
1502- let fM = valueOrElse(getInteger(cl()), (ck + 1))
1503- let hK = toString(fM)
1504- let fO = Issue(cD(hK, hu), makeString([hK, hu, dW, fN], "_"), 1, 0, false)
1505- let au = calculateAssetId(fO)
1506- let hL = toBase58String(au)
1507- let gk = makeString(cW((hx > 0), split(fn[aq], "_"), hx), "_")
1508- let hM = bM(b)
1509- let hN = valueOrElse(getInteger(hM), 0)
1510- $Tuple2((((((((((((((((cV._5 :+ (if ((size(cV._7) > 0))
1511- then StringEntry(hH, makeString_11C(cV._7, "_"))
1512- else DeleteEntry(hH))) :+ IntegerEntry(hM, if ((cV._8 > hN))
1537+ let fV = cW._3
1538+ let eF = valueOrErrorMessage(indexOf(aa, fV), ("Unknown continent: " + fV))
1539+ let ee = eD(ew(toBigInt(fS)), eF)
1540+ let fU = valueOrElse(getInteger(cm()), (cl + 1))
1541+ let hR = toString(fU)
1542+ let fW = Issue(cE(hR, hB), makeString([hR, hB, ee, fV], "_"), 1, 0, false)
1543+ let av = calculateAssetId(fW)
1544+ let hS = toBase58String(av)
1545+ let gs = makeString(cX((hE > 0), split(fv[ar], "_"), hE), "_")
1546+ let hT = bN(b)
1547+ let hU = valueOrElse(getInteger(hT), 0)
1548+ $Tuple2((((((((((((((((cW._5 :+ (if ((size(cW._7) > 0))
1549+ then StringEntry(hO, makeString_11C(cW._7, "_"))
1550+ else DeleteEntry(hO))) :+ IntegerEntry(hT, if ((cW._8 > hU))
15131551 then 0
1514- else (hN - cV._8))) :+ IntegerEntry(cl(), (fM + 1))) :+ fO) :+ StringEntry(cm(hK), hL)) :+ StringEntry(at(hL), b)) :+ StringEntry(cs(hK), b)) :+ IntegerEntry(ay(R, hL), cV._2)) :+ IntegerEntry(cr(R, hL, b), cV._2)) :+ IntegerEntry(ax(hL), O)) :+ IntegerEntry(cq(hL, b), O)) :+ StringEntry(eC, makeString([fn[ao], cV._4, gk, fn[ar]], ":"))) :+ StringEntry(bK(), cV._6)) :+ StringEntry(aO(p), makeString([fN, "L", hL], "_"))) :+ ScriptTransfer(addressFromStringValue(b), 1, au)), hL)
1515- }
1516-
1517-
1518-func hO (b,hw,fK) = ht("M", 3, "SSSS", b, hw, fK, 0)
1519-
1520-
1521-func hP (b,hw,fK,cX,gS) = {
1522- let gV = (cb * 4)
1523- if (if (!(cX))
1524- then (gS != gV)
1552+ else (hU - cW._8))) :+ IntegerEntry(cm(), (fU + 1))) :+ fW) :+ StringEntry(cn(hR), hS)) :+ StringEntry(au(hS), b)) :+ StringEntry(ct(hR), b)) :+ IntegerEntry(az(R, hS), cW._2)) :+ IntegerEntry(cs(R, hS, b), cW._2)) :+ IntegerEntry(ay(hS), O)) :+ IntegerEntry(cr(hS, b), O)) :+ StringEntry(eK, makeString([fv[ap], cW._4, gs, fv[as]], ":"))) :+ StringEntry(bL(), cW._6)) :+ StringEntry(aP(p), makeString([fV, "L", hS], "_"))) :+ ScriptTransfer(addressFromStringValue(b), 1, av)), hS)
1553+ }
1554+
1555+
1556+func hV (b,hD,fS) = hA("M", 3, "SSSS", b, hD, fS, 0)
1557+
1558+
1559+func hW (b,hD,fS,cY,gZ) = {
1560+ let hc = (cc * 4)
1561+ if (if (!(cY))
1562+ then (gZ != hc)
15251563 else false)
1526- then throw(("Payment attached should be " + toString(gV)))
1527- else ht("L", 4, "SMM", b, hw, fK, (bd * 4))
1528- }
1529-
1530-
1531-func hQ (b,hw,fK,cX,gS) = {
1532- let gV = (cb * 47)
1533- if (if (!(cX))
1534- then (gS != gV)
1564+ then throw(("Payment attached should be " + toString(hc)))
1565+ else hA("L", 4, "SMM", b, hD, fS, (be * 4))
1566+ }
1567+
1568+
1569+func hX (b,hD,fS,cY,gZ) = {
1570+ let hc = (cc * 47)
1571+ if (if (!(cY))
1572+ then (gZ != hc)
15351573 else false)
1536- then throw(("Payment attached should be " + toString(gV)))
1537- else ht("XL", 5, "SSSML", b, hw, fK, (bd * 47))
1538- }
1539-
1540-
1541-func hR (b,hw,fK,cX,gS) = {
1542- let gV = (cb * 54)
1543- if (if (!(cX))
1544- then (gS != gV)
1574+ then throw(("Payment attached should be " + toString(hc)))
1575+ else hA("XL", 5, "SSSML", b, hD, fS, (be * 47))
1576+ }
1577+
1578+
1579+func hY (b,hD,fS,cY,gZ) = {
1580+ let hc = (cc * 54)
1581+ if (if (!(cY))
1582+ then (gZ != hc)
15451583 else false)
1546- then throw(("Payment attached should be " + toString(gV)))
1547- else ht("XXL", 6, "LXL", b, hw, fK, (bd * 54))
1548- }
1549-
1550-
1551-func hS (cX,b,gS,hw,fK) = {
1552- let hT = {
1553- let bb = size(hw)
1554- if ((4 == bb))
1555- then hO(b, hw, fK)
1556- else if ((3 == bb))
1557- then hP(b, hw, fK, cX, gS)
1558- else if ((5 == bb))
1559- then hQ(b, hw, fK, cX, gS)
1560- else if ((2 == bb))
1561- then hR(b, hw, fK, cX, gS)
1584+ then throw(("Payment attached should be " + toString(hc)))
1585+ else hA("XXL", 6, "LXL", b, hD, fS, (be * 54))
1586+ }
1587+
1588+
1589+func hZ (cY,b,gZ,hD,fS) = {
1590+ let ia = {
1591+ let bc = size(hD)
1592+ if ((4 == bc))
1593+ then hV(b, hD, fS)
1594+ else if ((3 == bc))
1595+ then hW(b, hD, fS, cY, gZ)
1596+ else if ((5 == bc))
1597+ then hX(b, hD, fS, cY, gZ)
1598+ else if ((2 == bc))
1599+ then hY(b, hD, fS, cY, gZ)
15621600 else throw("Unknown merge")
15631601 }
1564- hT
1565- }
1566-
1567-
1568-func hU (dT) = if (if ((dT.originCaller != bB))
1569- then valueOrElse(getBoolean(aQ()), false)
1602+ ia
1603+ }
1604+
1605+
1606+func ib (eb) = if (if ((eb.originCaller != bC))
1607+ then valueOrElse(getBoolean(aR()), false)
15701608 else false)
15711609 then throw("Contracts are under maintenance")
1572- else StringEntry(as(toString(dT.originCaller)), toBase58String(dT.transactionId))
1573-
1574-
1575-@Callable(dT)
1576-func constructorV1 (hV) = if ((dT.caller != this))
1610+ else StringEntry(at(toString(eb.originCaller)), toBase58String(eb.transactionId))
1611+
1612+
1613+@Callable(eb)
1614+func constructorV1 (ic) = if ((eb.caller != this))
15771615 then throw("Permission denied")
1578- else [StringEntry(bv(), hV)]
1579-
1580-
1581-
1582-@Callable(dT)
1583-func setBlocked (hW) = if ((dT.caller != this))
1616+ else [StringEntry(bw(), ic)]
1617+
1618+
1619+
1620+@Callable(eb)
1621+func setBlocked (id) = if ((eb.caller != this))
15841622 then throw("permission denied")
1585- else [BooleanEntry(aQ(), hW)]
1586-
1587-
1588-
1589-@Callable(dT)
1623+ else [BooleanEntry(aR(), id)]
1624+
1625+
1626+
1627+@Callable(eb)
15901628 func stakeLand () = {
1591- let hX = hU(dT)
1592- if ((size(dT.payments) != 1))
1629+ let ie = ib(eb)
1630+ if ((size(eb.payments) != 1))
15931631 then throw("Exactly one payment required")
15941632 else {
1595- let hY = value(dT.payments[0])
1596- let au = value(hY.assetId)
1597- let bo = toString(dT.caller)
1598- if ((hY.amount != 1))
1633+ let if = value(eb.payments[0])
1634+ let av = value(if.assetId)
1635+ let bp = toString(eb.caller)
1636+ if ((if.amount != 1))
15991637 then throw((("NFT " + P) + " token should be attached as payment"))
16001638 else {
1601- let gy = value(assetInfo(au))
1602- if ((gy.issuer != this))
1639+ let gG = value(assetInfo(av))
1640+ if ((gG.issuer != this))
16031641 then throw("Unknown issuer of token")
1604- else if (!(contains(gy.name, P)))
1642+ else if (!(contains(gG.name, P)))
16051643 then throw((("Only NFT " + P) + " tokens are accepted"))
16061644 else {
1607- let hZ = drop(gy.name, 4)
1608- let cn = if (contains(hZ, "XXL"))
1609- then dropRight(hZ, 3)
1610- else if (contains(hZ, "XL"))
1611- then dropRight(hZ, 2)
1612- else dropRight(hZ, 1)
1613- if (!(isDefined(parseInt(cn))))
1614- then throw(("Cannot parse land number from " + gy.name))
1645+ let ig = drop(gG.name, 4)
1646+ let co = if (contains(ig, "XXL"))
1647+ then dropRight(ig, 3)
1648+ else if (contains(ig, "XL"))
1649+ then dropRight(ig, 2)
1650+ else dropRight(ig, 1)
1651+ if (!(isDefined(parseInt(co))))
1652+ then throw(("Cannot parse land number from " + gG.name))
16151653 else {
1616- let aE = toBase58String(au)
1617- let gz = aw(aE)
1618- if (isDefined(getInteger(gz)))
1619- then throw((("NFT " + gy.name) + " is already staked"))
1654+ let aF = toBase58String(av)
1655+ let gH = ax(aF)
1656+ if (isDefined(getInteger(gH)))
1657+ then throw((("NFT " + gG.name) + " is already staked"))
16201658 else {
1621- let gC = split(gy.description, "_")
1622- let dP = dV(gC[bI])
1623- let gn = bS(gC[bH])
1624- let cU = dU(dP, (gn / bi), 1)
1625- let go = valueOrElse(getInteger(ay(R, aE)), 0)
1626- let hH = bL(bo)
1627- let hI = getString(hH)
1628- let hD = if (isDefined(hI))
1629- then split_51C(value(hI), "_")
1659+ let gK = split(gG.description, "_")
1660+ let dX = ed(gK[bJ])
1661+ let gv = bT(gK[bI])
1662+ let cV = ec(dX, (gv / bj), 1)
1663+ let gw = valueOrElse(getInteger(az(R, aF)), 0)
1664+ let hO = bM(bp)
1665+ let hP = getString(hO)
1666+ let hK = if (isDefined(hP))
1667+ then split_51C(value(hP), "_")
16301668 else nil
1631- if (containsElement(hD, aE))
1632- then throw(("Your staked lands already contain " + aE))
1669+ if (containsElement(hK, aF))
1670+ then throw(("Your staked lands already contain " + aF))
16331671 else {
1634- let eW = valueOrElse(getInteger(ax(aE)), 0)
1635- let hM = bM(bo)
1636- let ia = valueOrElse(getInteger(hM), 0)
1637- let ib = bQ(invoke(bF, "onStakeUnstakeLand", [bo], nil))
1638- $Tuple2([IntegerEntry(gz, lastBlock.timestamp), IntegerEntry(aA(P, aE, bo), lastBlock.timestamp), StringEntry(hH, makeString_11C((hD :+ aE), "_")), IntegerEntry(hM, (ia + gn)), StringEntry(at(aE), bo), StringEntry(cs(cn), bo), IntegerEntry(cr(R, aE, bo), go), IntegerEntry(cq(aE, bo), eW), StringEntry(bK(), cU), hX], ib)
1672+ let fe = valueOrElse(getInteger(ay(aF)), 0)
1673+ let hT = bN(bp)
1674+ let ih = valueOrElse(getInteger(hT), 0)
1675+ let ii = bR(invoke(bG, "onStakeUnstakeLand", [bp], nil))
1676+ $Tuple2([IntegerEntry(gH, lastBlock.timestamp), IntegerEntry(aB(P, aF, bp), lastBlock.timestamp), StringEntry(hO, makeString_11C((hK :+ aF), "_")), IntegerEntry(hT, (ih + gv)), StringEntry(au(aF), bp), StringEntry(ct(co), bp), IntegerEntry(cs(R, aF, bp), gw), IntegerEntry(cr(aF, bp), fe), StringEntry(bL(), cV), ie], ii)
16391677 }
16401678 }
16411679 }
16421680 }
16431681 }
16441682 }
16451683 }
16461684
16471685
16481686
1649-@Callable(dT)
1650-func unstakeLand (gt) = {
1651- let hX = hU(dT)
1652- if ((size(dT.payments) != 0))
1687+@Callable(eb)
1688+func unstakeLand (gB) = {
1689+ let ie = ib(eb)
1690+ if ((size(eb.payments) != 0))
16531691 then throw("No payments required")
16541692 else {
1655- let b = toString(dT.caller)
1656- let gE = gr(b, cx, gt)
1657- let aE = gE._2
1658- let hH = bL(b)
1659- let dP = dV(gE._3[bI])
1660- let gn = bS(gE._3[bH])
1661- let cU = dU(dP, (gn / bi), -1)
1662- let gX = gQ(b, aE, gn, cx)
1663- let hD = split_51C(valueOrElse(getString(hH), ""), "_")
1664- let bA = indexOf(hD, aE)
1665- if (!(isDefined(bA)))
1666- then throw(("Your staked lands don't contain " + aE))
1693+ let b = toString(eb.caller)
1694+ let dF = gz(b, cy, gB)
1695+ let aF = dF._2
1696+ let hO = bM(b)
1697+ let dX = ed(dF._3[bJ])
1698+ let gv = bT(dF._3[bI])
1699+ let cV = ec(dX, (gv / bj), -1)
1700+ let he = gX(b, aF, gv, cy)
1701+ let hK = split_51C(valueOrElse(getString(hO), ""), "_")
1702+ let bB = indexOf(hK, aF)
1703+ if (!(isDefined(bB)))
1704+ then throw(("Your staked lands don't contain " + aF))
16671705 else {
1668- let ic = lastBlock.timestamp
1669- let id = valueOrElse(getInteger(bE, aR(b)), 0)
1670- if ((id >= ic))
1671- then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(id)))
1706+ let ij = lastBlock.timestamp
1707+ let ik = valueOrElse(getInteger(bF, aS(b)), 0)
1708+ if ((ik >= ij))
1709+ then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(ik)))
16721710 else {
1673- let ie = (valueOrElse(getInteger(bF, a(b)), 0) + be)
1674- if ((ie > ic))
1675- then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString(ie)))
1711+ let il = (valueOrElse(getInteger(bG, a(b)), 0) + bf)
1712+ if ((il > ij))
1713+ then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString(il)))
16761714 else {
1677- let hM = bM(b)
1678- let hN = valueOrElse(getInteger(hM), 0)
1679- let if = if ((gn > hN))
1715+ let hT = bN(b)
1716+ let hU = valueOrElse(getInteger(hT), 0)
1717+ let im = if ((gv > hU))
16801718 then 0
1681- else (hN - gn)
1682- let ib = bQ(invoke(bF, "onStakeUnstakeLand", [b], nil))
1683- $Tuple2([ScriptTransfer(dT.caller, 1, fromBase58String(aE)), DeleteEntry(aw(aE)), DeleteEntry(aA(P, aE, b)), StringEntry(bK(), cU), StringEntry(gX._2, makeString(gX._3, ":")), if ((size(hD) > 1))
1684- then StringEntry(hH, makeString_11C(removeByIndex(hD, value(bA)), "_"))
1685- else DeleteEntry(hH), IntegerEntry(hM, if), hX], ib)
1719+ else (hU - gv)
1720+ let ii = bR(invoke(bG, "onStakeUnstakeLand", [b], nil))
1721+ $Tuple2([ScriptTransfer(eb.caller, 1, fromBase58String(aF)), DeleteEntry(ax(aF)), DeleteEntry(aB(P, aF, b)), StringEntry(bL(), cV), StringEntry(he._2, makeString(he._3, ":")), if ((size(hK) > 1))
1722+ then StringEntry(hO, makeString_11C(removeByIndex(hK, value(bB)), "_"))
1723+ else DeleteEntry(hO), IntegerEntry(hT, im), ie], ii)
16861724 }
16871725 }
16881726 }
16891727 }
16901728 }
16911729
16921730
16931731
1694-@Callable(dT)
1732+@Callable(eb)
16951733 func stakeDuck () = {
1696- let hX = hU(dT)
1697- if ((size(dT.payments) != 1))
1734+ let ie = ib(eb)
1735+ if ((size(eb.payments) != 1))
16981736 then throw("Exactly one payment required")
16991737 else {
1700- let hY = value(dT.payments[0])
1701- let au = value(hY.assetId)
1702- let bo = toString(dT.caller)
1703- if ((hY.amount != 1))
1738+ let if = value(eb.payments[0])
1739+ let av = value(if.assetId)
1740+ let bp = toString(eb.caller)
1741+ if ((if.amount != 1))
17041742 then throw((("NFT " + Q) + " token should be attached as payment"))
17051743 else {
1706- let gy = value(assetInfo(au))
1707- if (if ((gy.issuer != bU))
1708- then (gy.issuer != bV)
1744+ let gG = value(assetInfo(av))
1745+ if (if ((gG.issuer != bV))
1746+ then (gG.issuer != bW)
17091747 else false)
17101748 then throw((("Unknown issuer of " + Q) + " token"))
1711- else if (!(contains(gy.name, Q)))
1749+ else if (!(contains(gG.name, Q)))
17121750 then throw((("Only NFT " + Q) + " tokens are accepted"))
17131751 else {
1714- let ig = toBase58String(au)
1715- let gz = aw(ig)
1716- if (isDefined(getInteger(gz)))
1717- then throw((("NFT " + gy.name) + " is already staked"))
1718- else if (isDefined(getString(aM(bo))))
1719- then throw(("You already staked one duck: " + gy.name))
1752+ let in = toBase58String(av)
1753+ let gH = ax(in)
1754+ if (isDefined(getInteger(gH)))
1755+ then throw((("NFT " + gG.name) + " is already staked"))
1756+ else if (isDefined(getString(aN(bp))))
1757+ then throw(("You already staked one duck: " + gG.name))
17201758 else {
1721- let ih = aO(ig)
1722- let ii = getString(ih)
1723- let eC = aN(ig)
1724- let ij = getString(eC)
1725- let gc = aP(ig)
1726- let gd = J(valueOrElse(getInteger(r(ig)), 0))
1727- let ik = valueOrElse(getInteger(gc), gd)
1728- ([IntegerEntry(gz, lastBlock.timestamp), IntegerEntry(aA(Q, toBase58String(au), bo), lastBlock.timestamp), StringEntry(aL(ig), bo), StringEntry(aM(bo), ig)] ++ (if (isDefined(ii))
1759+ let io = aP(in)
1760+ let ip = getString(io)
1761+ let eK = aO(in)
1762+ let iq = getString(eK)
1763+ let gk = aQ(in)
1764+ let gl = J(valueOrElse(getInteger(r(in)), 0))
1765+ let ir = valueOrElse(getInteger(gk), gl)
1766+ ([IntegerEntry(gH, lastBlock.timestamp), IntegerEntry(aB(Q, toBase58String(av), bp), lastBlock.timestamp), StringEntry(aM(in), bp), StringEntry(aN(bp), in)] ++ (if (isDefined(ip))
17291767 then nil
1730- else ([StringEntry(ih, W)] ++ (if (isDefined(ij))
1768+ else ([StringEntry(io, W)] ++ (if (isDefined(iq))
17311769 then nil
1732- else (([StringEntry(eC, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(gc, ik)) :+ hX)))))
1770+ else (([StringEntry(eK, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(gk, ir)) :+ ie)))))
17331771 }
17341772 }
17351773 }
17361774 }
17371775 }
17381776
17391777
17401778
1741-@Callable(dT)
1742-func unstakeDuck (ig) = {
1743- let hX = hU(dT)
1744- if ((size(dT.payments) != 0))
1779+@Callable(eb)
1780+func unstakeDuck (in) = {
1781+ let ie = ib(eb)
1782+ if ((size(eb.payments) != 0))
17451783 then throw("No payments required")
17461784 else {
1747- let au = fromBase58String(ig)
1748- let bo = toString(dT.caller)
1749- let gy = value(assetInfo(au))
1750- let gz = aw(toBase58String(au))
1751- if (!(isDefined(getInteger(gz))))
1752- then throw((("NFT " + gy.name) + " is not staked"))
1753- else if (!(isDefined(getString(aM(bo)))))
1754- then throw((("The duck " + gy.name) + " is not staked"))
1785+ let av = fromBase58String(in)
1786+ let bp = toString(eb.caller)
1787+ let gG = value(assetInfo(av))
1788+ let gH = ax(toBase58String(av))
1789+ if (!(isDefined(getInteger(gH))))
1790+ then throw((("NFT " + gG.name) + " is not staked"))
1791+ else if (!(isDefined(getString(aN(bp)))))
1792+ then throw((("The duck " + gG.name) + " is not staked"))
17551793 else {
1756- let gB = valueOrErrorMessage(getString(aL(toBase58String(au))), (("NFT " + gy.name) + " is orphaned"))
1757- if ((gB != bo))
1794+ let gJ = valueOrErrorMessage(getString(aM(toBase58String(av))), (("NFT " + gG.name) + " is orphaned"))
1795+ if ((gJ != bp))
17581796 then throw("Staked NFT is not yours")
17591797 else {
1760- let gc = aP(ig)
1761- let gd = J(valueOrElse(getInteger(r(ig)), 0))
1762- let il = valueOrElse(getInteger(gc), gd)
1763- if ((gd > il))
1764- then throw((("Please heal your duck to " + toString(gd)) + "hp before unstaking"))
1765- else [ScriptTransfer(dT.caller, 1, au), DeleteEntry(gz), DeleteEntry(gc), DeleteEntry(aO(ig)), DeleteEntry(aL(ig)), DeleteEntry(aA(Q, ig, bo)), DeleteEntry(aM(bo)), hX]
1798+ let gk = aQ(in)
1799+ let gl = J(valueOrElse(getInteger(r(in)), 0))
1800+ let is = valueOrElse(getInteger(gk), gl)
1801+ if ((gl > is))
1802+ then throw((("Please heal your duck to " + toString(gl)) + "hp before unstaking"))
1803+ else [ScriptTransfer(eb.caller, 1, av), DeleteEntry(gH), DeleteEntry(gk), DeleteEntry(aP(in)), DeleteEntry(aM(in)), DeleteEntry(aB(Q, in, bp)), DeleteEntry(aN(bp)), ie]
17661804 }
17671805 }
17681806 }
17691807 }
17701808
17711809
17721810
1773-@Callable(dT)
1774-func claimRes (fj,im) = {
1775- let hX = hU(dT)
1776- if ((size(dT.payments) != 0))
1811+@Callable(eb)
1812+func claimRes (fr,it) = {
1813+ let ie = ib(eb)
1814+ if ((size(eb.payments) != 0))
17771815 then throw("No payments required")
17781816 else {
1779- let b = toString(dT.originCaller)
1780- let dc = gD(b, fj, cx, im)
1781- let p = valueOrErrorMessage(getString(aM(b)), "You don't have a duck staked")
1782- $Tuple2(((((dc._1 ++ hd(p, fraction(x, fj, bh))._1) :+ StringEntry(dc._2, makeString(dc._3, ":"))) :+ StringEntry(dc._4, makeString(dc._5, ":"))) :+ hX), dc._3[ap])
1783- }
1784- }
1785-
1786-
1787-
1788-@Callable(dT)
1789-func claimResToWH (fj,im) = {
1790- let hX = hU(dT)
1791- if ((size(dT.payments) != 0))
1817+ let b = toString(eb.originCaller)
1818+ let dd = gL(b, fr, cy, it)
1819+ let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked")
1820+ $Tuple2(((((dd._1 ++ hk(p, fraction(x, fr, bi))._1) :+ StringEntry(dd._2, makeString(dd._3, ":"))) :+ StringEntry(dd._4, makeString(dd._5, ":"))) :+ ie), dd._3[aq])
1821+ }
1822+ }
1823+
1824+
1825+
1826+@Callable(eb)
1827+func claimResToWH (fr,it) = {
1828+ let ie = ib(eb)
1829+ if ((size(eb.payments) != 0))
17921830 then throw("No payments required")
17931831 else {
1794- let b = toString(dT.originCaller)
1795- let dc = gD(b, fj, cw, im)
1796- $Tuple2(((((dc._1 ++ hj(b, fraction(x, fj, bh))._1) :+ StringEntry(dc._2, makeString(dc._3, ":"))) :+ StringEntry(dc._4, makeString(dc._5, ":"))) :+ hX), dc._5[ag])
1797- }
1798- }
1799-
1800-
1801-
1802-@Callable(dT)
1803-func flight (fR,fS) = {
1804- let hX = hU(dT)
1805- if ((size(dT.payments) != 0))
1832+ let b = toString(eb.originCaller)
1833+ let dd = gL(b, fr, cx, it)
1834+ $Tuple2(((((dd._1 ++ hq(b, fraction(x, fr, bi))._1) :+ StringEntry(dd._2, makeString(dd._3, ":"))) :+ StringEntry(dd._4, makeString(dd._5, ":"))) :+ ie), dd._5[ah])
1835+ }
1836+ }
1837+
1838+
1839+
1840+@Callable(eb)
1841+func flight (fZ,ga) = {
1842+ let ie = ib(eb)
1843+ if ((size(eb.payments) != 0))
18061844 then throw("No payments required")
18071845 else {
1808- let aS = toString(dT.caller)
1809- let ey = fQ(aS, fR, fS)
1810- let p = ey._2
1811- let ih = aO(p)
1812- let gv = valueOrElse(getString(ih), W)
1813- if ((ey._4 == gv))
1846+ let aT = toString(eb.caller)
1847+ let eG = fY(aT, fZ, ga)
1848+ let p = eG._2
1849+ let io = aP(p)
1850+ let gD = valueOrElse(getString(io), W)
1851+ if ((eG._4 == gD))
18141852 then throw("You can't fly to the same location")
18151853 else {
1816- let eC = aN(p)
1817- let fn = eB(eC)
1818- let ds = dd(fn[ar], ey._5)
1819- $Tuple2(([StringEntry(ih, if ((ey._1 > 0))
1820- then ey._4
1821- else gv), StringEntry(eC, makeString([fn[ao], fn[ap], fn[aq], ds], ":")), IntegerEntry(aP(p), ey._1), hX] ++ hd(p, if ((ey._1 > 0))
1854+ let eK = aO(p)
1855+ let fv = eJ(eK)
1856+ let dt = de(fv[as], eG._5)
1857+ $Tuple2(([StringEntry(io, if ((eG._1 > 0))
1858+ then eG._4
1859+ else gD), StringEntry(eK, makeString([fv[ap], fv[aq], fv[ar], dt], ":")), IntegerEntry(aQ(p), eG._1), ie] ++ hk(p, if ((eG._1 > 0))
18221860 then y
1823- else z)._1), ey._3)
1861+ else z)._1), eG._3)
18241862 }
18251863 }
18261864 }
18271865
18281866
18291867
1830-@Callable(dT)
1831-func heal (in,io,ip) = {
1832- let hX = hU(dT)
1833- if (if (if ((0 > in))
1868+@Callable(eb)
1869+func heal (iu,iv,iw) = {
1870+ let ie = ib(eb)
1871+ if (if (if ((0 > iu))
18341872 then true
1835- else (0 > io))
1873+ else (0 > iv))
18361874 then true
1837- else (0 > ip))
1875+ else (0 > iw))
18381876 then throw("Quantity cannot be negative")
18391877 else {
1840- let p = valueOrErrorMessage(getString(aM(toString(dT.caller))), "You don't have a duck staked")
1841- let iq = [in, io, ip]
1842- let gc = aP(p)
1843- let gd = J(valueOrElse(getInteger(r(p)), 0))
1844- let ir = valueOrElse(getInteger(gc), gd)
1845- if ((ir >= gd))
1846- then throw((("HP should be < " + toString(gd)) + " to heal"))
1878+ let p = valueOrErrorMessage(getString(aN(toString(eb.caller))), "You don't have a duck staked")
1879+ let ix = [iu, iv, iw]
1880+ let gk = aQ(p)
1881+ let gl = J(valueOrElse(getInteger(r(p)), 0))
1882+ let iy = valueOrElse(getInteger(gk), gl)
1883+ if ((iy >= gl))
1884+ then throw((("HP should be < " + toString(gl)) + " to heal"))
18471885 else {
1848- let eC = aN(p)
1849- let fn = eB(eC)
1850- let is = if ((fn[ar] == ""))
1886+ let eK = aO(p)
1887+ let fv = eJ(eK)
1888+ let iz = if ((fv[as] == ""))
18511889 then nil
1852- else split(fn[ar], "_")
1853- func it (cK,iu) = {
1854- let bR = cK._2
1855- let ep = if ((size(is) > bR))
1856- then parseIntValue(is[bR])
1890+ else split(fv[as], "_")
1891+ func iA (cL,iB) = {
1892+ let bS = cL._2
1893+ let ex = if ((size(iz) > bS))
1894+ then parseIntValue(iz[bS])
18571895 else 0
1858- if ((3 > bR))
1896+ if ((3 > bS))
18591897 then {
1860- let iv = iq[bR]
1861- if ((iv > ep))
1862- then throw(((("You have only " + toString(ep)) + " of ") + Z[bR]))
1863- else $Tuple3((cK._1 :+ toString((ep - iv))), (bR + 1), (cK._3 + (bX[bR] * iv)))
1898+ let iC = ix[bS]
1899+ if ((iC > ex))
1900+ then throw(((("You have only " + toString(ex)) + " of ") + Z[bS]))
1901+ else $Tuple3((cL._1 :+ toString((ex - iC))), (bS + 1), (cL._3 + (bY[bS] * iC)))
18641902 }
1865- else $Tuple3((cK._1 :+ toString(ep)), (bR + 1), cK._3)
1903+ else $Tuple3((cL._1 :+ toString(ex)), (bS + 1), cL._3)
18661904 }
18671905
1868- let dc = {
1869- let cM = ac
1870- let cN = size(cM)
1871- let cO = $Tuple3(nil, 0, 0)
1872- func cP (cQ,cR) = if ((cR >= cN))
1873- then cQ
1874- else it(cQ, cM[cR])
1875-
1876- func cS (cQ,cR) = if ((cR >= cN))
1877- then cQ
1906+ let dd = {
1907+ let cN = ac
1908+ let cO = size(cN)
1909+ let cP = $Tuple3(nil, 0, 0)
1910+ func cQ (cR,cS) = if ((cS >= cO))
1911+ then cR
1912+ else iA(cR, cN[cS])
1913+
1914+ func cT (cR,cS) = if ((cS >= cO))
1915+ then cR
18781916 else throw("List size exceeds 50")
18791917
1880- cS(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cO, 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)
1918+ cT(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cP, 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)
18811919 }
1882- let iw = min([gd, (ir + dc._3)])
1883- $Tuple2(([IntegerEntry(gc, iw), StringEntry(eC, makeString_2C([fn[ao], fn[ap], fn[aq], makeString(dc._1, "_")], ":")), hX] ++ hd(p, (G * ((in + io) + ip)))._1), iw)
1920+ let iD = min([gl, (iy + dd._3)])
1921+ $Tuple2(([IntegerEntry(gk, iD), StringEntry(eK, makeString_2C([fv[ap], fv[aq], fv[ar], makeString(dd._1, "_")], ":")), ie] ++ hk(p, (G * ((iu + iv) + iw)))._1), iD)
18841922 }
18851923 }
18861924 }
18871925
18881926
18891927
1890-@Callable(dT)
1928+@Callable(eb)
18911929 func healES () = {
1892- let hX = hU(dT)
1893- if ((size(dT.payments) != 1))
1930+ let ie = ib(eb)
1931+ if ((size(eb.payments) != 1))
18941932 then throw("Exactly one payment required")
18951933 else {
1896- let hY = value(dT.payments[0])
1897- if ((hY.assetId != ba))
1934+ let if = value(eb.payments[0])
1935+ if ((if.assetId != bb))
18981936 then throw("Allowed USDT payment only!")
18991937 else {
1900- let p = valueOrErrorMessage(getString(aM(toString(dT.caller))), "You don't have a duck staked")
1901- let gc = aP(p)
1902- let gd = J(valueOrElse(getInteger(r(p)), 0))
1903- let ir = valueOrElse(getInteger(gc), gd)
1904- if ((ir > 0))
1938+ let p = valueOrErrorMessage(getString(aN(toString(eb.caller))), "You don't have a duck staked")
1939+ let gk = aQ(p)
1940+ let gl = J(valueOrElse(getInteger(r(p)), 0))
1941+ let iy = valueOrElse(getInteger(gk), gl)
1942+ if ((iy > 0))
19051943 then throw("HP should be 0 to call Emergency Service")
19061944 else {
1907- let eC = aN(p)
1908- let fn = eB(eC)
1909- let is = if ((fn[ar] == ""))
1945+ let eK = aO(p)
1946+ let fv = eJ(eK)
1947+ let iz = if ((fv[as] == ""))
19101948 then nil
1911- else split(fn[ar], "_")
1912- let ix = if ((size(is) > 0))
1913- then parseIntValue(is[0])
1949+ else split(fv[as], "_")
1950+ let iE = if ((size(iz) > 0))
1951+ then parseIntValue(iz[0])
19141952 else 0
1915- let iy = if ((size(is) > 1))
1916- then parseIntValue(is[1])
1953+ let iF = if ((size(iz) > 1))
1954+ then parseIntValue(iz[1])
19171955 else 0
1918- let iz = if ((size(is) > 2))
1919- then parseIntValue(is[2])
1956+ let iG = if ((size(iz) > 2))
1957+ then parseIntValue(iz[2])
19201958 else 0
1921- if (if (if ((ix > 0))
1959+ if (if (if ((iE > 0))
19221960 then true
1923- else (iy > 0))
1961+ else (iF > 0))
19241962 then true
1925- else (iz > 0))
1963+ else (iG > 0))
19261964 then throw("You have to use own Medical Kit")
19271965 else {
1928- let iA = getString(bD, aT())
1929- let iB = if (isDefined(iA))
1930- then split(value(iA), "_")
1966+ let iH = getString(bE, aU())
1967+ let iI = if (isDefined(iH))
1968+ then split(value(iH), "_")
19311969 else nil
1932- let iC = if ((size(iB) > 0))
1933- then parseIntValue(iB[0])
1970+ let iJ = if ((size(iI) > 0))
1971+ then parseIntValue(iI[0])
19341972 else 0
1935- if ((0 >= iC))
1973+ if ((0 >= iJ))
19361974 then throw("There are no Medical Kits L1 at Emergency Service storage")
19371975 else {
1938- let iw = (ir + bX[0])
1939- let iD = makeString([toString((iC - 1)), removeByIndex(iB, 0)], "_")
1940- let aX = split(ac[0], "_")
1941- let iE = aW(aX)
1942- let iF = fraction((iE * Y), X, (10 * ae))
1943- if ((hY.amount != iF))
1944- then throw(("Payment attached should be " + toString(iF)))
1976+ let iD = (iy + bY[0])
1977+ let iK = makeString([toString((iJ - 1)), removeByIndex(iI, 0)], "_")
1978+ let aY = split(ac[0], "_")
1979+ let iL = aX(aY)
1980+ let iM = fraction((iL * Y), X, (10 * af))
1981+ if ((if.amount != iM))
1982+ then throw(("Payment attached should be " + toString(iM)))
19451983 else {
1946- let dc = bN(invoke(bD, "updateEsStorage", [iD], [AttachedPayment(ba, iF)]))
1947- $Tuple2(([IntegerEntry(gc, iw), hX] ++ hd(p, A)._1), dc)
1984+ let dd = bO(invoke(bE, "updateEsStorage", [iK], [AttachedPayment(bb, iM)]))
1985+ $Tuple2(([IntegerEntry(gk, iD), ie] ++ hk(p, A)._1), dd)
19481986 }
19491987 }
19501988 }
19511989 }
19521990 }
19531991 }
19541992 }
19551993
19561994
19571995
1958-@Callable(dT)
1959-func updateBackpack (p,iG) = if ((dT.caller != bD))
1996+@Callable(eb)
1997+func updateBackpack (p,iN) = if ((eb.caller != bE))
19601998 then throw("permission denied")
1961- else $Tuple2([StringEntry(aN(p), iG)], iG)
1962-
1963-
1964-
1965-@Callable(dT)
1999+ else $Tuple2([StringEntry(aO(p), iN)], iN)
2000+
2001+
2002+
2003+@Callable(eb)
19662004 func buySLand () = {
1967- let hX = hU(dT)
1968- if ((size(dT.payments) != 1))
2005+ let ie = ib(eb)
2006+ if ((size(eb.payments) != 1))
19692007 then throw("Exactly one payment required")
19702008 else {
1971- let hY = value(dT.payments[0])
1972- if ((hY.assetId != ba))
2009+ let if = value(eb.payments[0])
2010+ if ((if.assetId != bb))
19732011 then throw("Allowed USDT payment only!")
1974- else if ((hY.amount != cd))
1975- then throw(("Payment attached should be " + toString(cd)))
2012+ else if ((if.amount != ce))
2013+ then throw(("Payment attached should be " + toString(ce)))
19762014 else {
1977- let dc = fI(dT.caller, dT.transactionId)
1978- $Tuple2((((dc._1 :+ ScriptTransfer(bD, hY.amount, ba)) ++ hj(toString(dT.caller), C)._1) :+ hX), dc._2._1)
2015+ let dd = fQ(eb.caller, eb.transactionId)
2016+ $Tuple2((((dd._1 :+ ScriptTransfer(bE, if.amount, bb)) ++ hq(toString(eb.caller), C)._1) :+ ie), dd._2._1)
19792017 }
19802018 }
19812019 }
19822020
19832021
19842022
1985-@Callable(dT)
1986-func expedition (fR,fS) = {
1987- let hX = hU(dT)
1988- if ((size(dT.payments) != 0))
2023+@Callable(eb)
2024+func expedition (fZ,ga) = {
2025+ let ie = ib(eb)
2026+ if ((size(eb.payments) != 0))
19892027 then throw("No payments required")
19902028 else {
1991- let dc = gi(dT.caller, dT.transactionId, fR, fS)
1992- let p = valueOrErrorMessage(getString(aM(toString(dT.caller))), "You don't have a duck staked")
1993- $Tuple2(((dc._1 ++ hd(p, C)._1) :+ hX), $Tuple2(dc._2, dc._3))
1994- }
1995- }
1996-
1997-
1998-
1999-@Callable(dT)
2000-func upgradeInfra (aE) = {
2001- let hX = hU(dT)
2002- if ((size(dT.payments) != 0))
2029+ let dd = gq(eb.caller, eb.transactionId, fZ, ga)
2030+ let p = valueOrErrorMessage(getString(aN(toString(eb.caller))), "You don't have a duck staked")
2031+ $Tuple2(((dd._1 ++ hk(p, C)._1) :+ ie), $Tuple2(dd._2, dd._3))
2032+ }
2033+ }
2034+
2035+
2036+
2037+@Callable(eb)
2038+func upgradeInfra (aF) = {
2039+ let ie = ib(eb)
2040+ if ((size(eb.payments) != 0))
20032041 then throw("No payments required")
20042042 else {
2005- let dc = gR(true, dT.caller, 0, aE)
2006- let p = valueOrErrorMessage(getString(aM(toString(dT.caller))), "You don't have a duck staked")
2007- $Tuple2(((dc._1 :+ hX) ++ hd(p, fraction(D, dc._3, bh))._1), dc._2)
2008- }
2009- }
2010-
2011-
2012-
2013-@Callable(dT)
2014-func upgradeInfraUsdt (aE) = if ((dT.caller != this))
2043+ let dd = gY(true, eb.caller, 0, aF)
2044+ let p = valueOrErrorMessage(getString(aN(toString(eb.caller))), "You don't have a duck staked")
2045+ $Tuple2(((dd._1 :+ ie) ++ hk(p, fraction(D, dd._3, bi))._1), dd._2)
2046+ }
2047+ }
2048+
2049+
2050+
2051+@Callable(eb)
2052+func upgradeInfraUsdt (aF) = if ((eb.caller != this))
20152053 then throw("Permission denied")
20162054 else {
2017- let hX = hU(dT)
2018- if ((size(dT.payments) != 1))
2055+ let ie = ib(eb)
2056+ if ((size(eb.payments) != 1))
20192057 then throw("Exactly one payment required")
20202058 else {
2021- let hY = value(dT.payments[0])
2022- if ((hY.assetId != ba))
2059+ let if = value(eb.payments[0])
2060+ if ((if.assetId != bb))
20232061 then throw("Allowed USDT payment only!")
20242062 else {
2025- let dc = gR(false, dT.caller, hY.amount, aE)
2026- $Tuple2(((dc._1 :+ ScriptTransfer(bD, hY.amount, ba)) :+ hX), dc._2)
2063+ let dd = gY(false, eb.caller, if.amount, aF)
2064+ $Tuple2(((dd._1 :+ ScriptTransfer(bE, if.amount, bb)) :+ ie), dd._2)
20272065 }
20282066 }
20292067 }
20302068
20312069
20322070
2033-@Callable(dT)
2034-func activateArtifact (iH,iI) = {
2035- let hX = hU(dT)
2036- if ((size(dT.payments) != 0))
2071+@Callable(eb)
2072+func activateArtifact (iO,iP) = {
2073+ let ie = ib(eb)
2074+ if ((size(eb.payments) != 0))
20372075 then throw("No payments required")
20382076 else {
2039- let b = toString(dT.caller)
2040- let dc = {
2041- let bb = iH
2042- if (("PRESALE" == bb))
2043- then hr(b, iI)
2044- else if (("ONBOARD" == bb))
2045- then hk(b)
2077+ let b = toString(eb.caller)
2078+ let dd = {
2079+ let bc = iO
2080+ if (("PRESALE" == bc))
2081+ then hy(b, iP)
2082+ else if (("ONBOARD" == bc))
2083+ then hr(b)
20462084 else throw("Unknown artifact")
20472085 }
2048- (dc :+ hX)
2049- }
2050- }
2051-
2052-
2053-
2054-@Callable(dT)
2055-func mergeLands (hw) = {
2056- let hX = hU(dT)
2057- if ((size(dT.payments) != 0))
2086+ (dd :+ ie)
2087+ }
2088+ }
2089+
2090+
2091+
2092+@Callable(eb)
2093+func mergeLands (hD) = {
2094+ let ie = ib(eb)
2095+ if ((size(eb.payments) != 0))
20582096 then throw("No payments required")
20592097 else {
2060- let dc = hS(true, toString(dT.caller), 0, hw, dT.transactionId)
2061- $Tuple2(((dc._1 :+ hX) ++ hj(toString(dT.caller), E)._1), dc._2)
2062- }
2063- }
2064-
2065-
2066-
2067-@Callable(dT)
2068-func mergeLandsUsdt (hw) = {
2069- let hX = hU(dT)
2070- if ((size(dT.payments) != 1))
2098+ let dd = hZ(true, toString(eb.caller), 0, hD, eb.transactionId)
2099+ $Tuple2(((dd._1 :+ ie) ++ hq(toString(eb.caller), E)._1), dd._2)
2100+ }
2101+ }
2102+
2103+
2104+
2105+@Callable(eb)
2106+func mergeLandsUsdt (hD) = {
2107+ let ie = ib(eb)
2108+ if ((size(eb.payments) != 1))
20712109 then throw("Exactly one payment required")
20722110 else {
2073- let hY = value(dT.payments[0])
2074- if ((hY.assetId != ba))
2111+ let if = value(eb.payments[0])
2112+ if ((if.assetId != bb))
20752113 then throw("Allowed USDT payment only!")
20762114 else {
2077- let dc = hS(false, toString(dT.caller), hY.amount, hw, dT.transactionId)
2078- $Tuple2(((dc._1 :+ ScriptTransfer(bD, hY.amount, ba)) :+ hX), dc._2)
2115+ let dd = hZ(false, toString(eb.caller), if.amount, hD, eb.transactionId)
2116+ $Tuple2(((dd._1 :+ ScriptTransfer(bE, if.amount, bb)) :+ ie), dd._2)
20792117 }
20802118 }
20812119 }
20822120
20832121
20842122
2085-@Callable(dT)
2086-func cargoExchange (iJ,aE) = {
2087- let hX = hU(dT)
2088- if ((size(dT.payments) != 0))
2123+@Callable(eb)
2124+func cargoExchange (iQ,aF) = {
2125+ let ie = ib(eb)
2126+ if ((size(eb.payments) != 0))
20892127 then throw("No payments required")
20902128 else {
2091- let fm = split_4C(iJ, ":")
2092- let b = toString(dT.originCaller)
2093- let gy = value(assetInfo(fromBase58String(aE)))
2094- let gz = aw(aE)
2095- if (!(isDefined(getInteger(gz))))
2096- then throw((gy.name + " is not staked"))
2129+ let fu = split_4C(iQ, ":")
2130+ let b = toString(eb.originCaller)
2131+ let gG = value(assetInfo(fromBase58String(aF)))
2132+ let gH = ax(aF)
2133+ if (!(isDefined(getInteger(gH))))
2134+ then throw((gG.name + " is not staked"))
20972135 else {
2098- let gB = valueOrErrorMessage(getString(at(aE)), (("NFT " + gy.name) + " is orphaned"))
2099- if ((gB != b))
2136+ let gJ = valueOrErrorMessage(getString(au(aF)), (("NFT " + gG.name) + " is orphaned"))
2137+ if ((gJ != b))
21002138 then throw((P + " is not yours"))
21012139 else {
2102- let eV = (bS(split(gy.description, "_")[bH]) / bi)
2103- let eW = valueOrElse(getInteger(ax(aE)), 0)
2104- let p = valueOrErrorMessage(getString(aM(b)), "You don't have a duck staked")
2105- let gv = valueOrElse(getString(aO(p)), W)
2106- let gw = split(value(gv), "_")
2107- if ((gw[aU] != "L"))
2108- then throw((("Duck location type is " + gw[aU]) + ", but should be L"))
2109- else if ((gw[aV] != aE))
2110- then throw(("Duck should be on the land " + aE))
2140+ let fd = (bT(split(gG.description, "_")[bI]) / bj)
2141+ let fe = valueOrElse(getInteger(ay(aF)), 0)
2142+ let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked")
2143+ let gD = valueOrElse(getString(aP(p)), W)
2144+ let gE = split(value(gD), "_")
2145+ if ((gE[aV] != "L"))
2146+ then throw((("Duck location type is " + gE[aV]) + ", but should be L"))
2147+ else if ((gE[aW] != aF))
2148+ then throw(("Duck should be on the land " + aF))
21112149 else {
2112- let eU = aD(aE)
2113- let eH = eT(eU, eV, eW)
2114- let eC = aN(p)
2115- let fn = eB(eC)
2116- let dc = fl(fm, eH, fn)
2117- let fc = split(eH[aj], "_")
2118- let gO = (parseIntValue(fc[al]) + dc._7)
2119- let gP = (parseIntValue(fc[am]) - dc._7)
2120-[StringEntry(eC, makeString_2C([fn[ao], dc._4, dc._5, dc._6], ":")), StringEntry(eU, makeString_2C([eH[af], dc._1, dc._2, dc._3, makeString([fc[ak], toString(gO), toString(gP), fc[an]], "_")], ":")), hX]
2150+ let fc = aE(aF)
2151+ let eP = fb(fc, fd, fe)
2152+ let eK = aO(p)
2153+ let fv = eJ(eK)
2154+ let dd = ft(fu, eP, fv)
2155+ let fk = split(eP[ak], "_")
2156+ let gV = (parseIntValue(fk[am]) + dd._7)
2157+ let gW = (parseIntValue(fk[an]) - dd._7)
2158+[StringEntry(eK, makeString_2C([fv[ap], dd._4, dd._5, dd._6], ":")), StringEntry(fc, makeString_2C([eP[ag], dd._1, dd._2, dd._3, makeString([fk[al], toString(gV), toString(gW), fk[ao]], "_")], ":")), ie]
21212159 }
21222160 }
21232161 }
21242162 }
21252163 }
21262164
21272165
21282166
2129-@Callable(dT)
2130-func saveWarehouse (eY,aE) = if ((dT.caller != bD))
2167+@Callable(eb)
2168+func saveWarehouse (fg,aF) = if ((eb.caller != bE))
21312169 then throw("Access denied")
21322170 else {
2133- let eU = aD(aE)
2134- let eZ = split_4C(eY, ":")
2135- if ((size(eZ) != 5))
2171+ let fc = aE(aF)
2172+ let fh = split_4C(fg, ":")
2173+ if ((size(fh) != 5))
21362174 then throw("warehouse string should contain 4 ':' separators")
21372175 else {
2138- let iK = split(eZ[aj], "_")[ak]
2139- let gO = eG(eZ)
2140- let iL = eE(eZ[af])
2141- let gP = ((iL - parseIntValue(iK)) - gO)
2142- let iM = makeString_2C([eZ[af], eZ[ag], eZ[ah], eZ[ai], makeString([iK, toString(gO), toString(gP), toString(iL)], "_")], ":")
2143- $Tuple2([StringEntry(eU, iM)], iM)
2176+ let iR = split(fh[ak], "_")[al]
2177+ let gV = eO(fh)
2178+ let iS = eM(fh[ag])
2179+ let gW = ((iS - parseIntValue(iR)) - gV)
2180+ let iT = makeString_2C([fh[ag], fh[ah], fh[ai], fh[aj], makeString([iR, toString(gV), toString(gW), toString(iS)], "_")], ":")
2181+ $Tuple2([StringEntry(fc, iT)], iT)
21442182 }
21452183 }
21462184
21472185
21482186
2149-@Callable(dT)
2150-func fixWarehouseFormat (aE) = if ((dT.caller != bB))
2187+@Callable(eb)
2188+func fixWarehouseFormat (aF) = if ((eb.caller != bC))
21512189 then throw("Access denied")
21522190 else {
2153- let eU = aD(aE)
2154- let gy = value(assetInfo(fromBase58String(aE)))
2155- let eV = (bS(split(gy.description, "_")[bH]) / bi)
2156- let eW = valueOrElse(getInteger(ax(aE)), 0)
2157- let eZ = eT(eU, eV, eW)
2158- let iK = bQ(invoke(bD, "recalcLockedVolumeREADONLY", [aE, eZ], nil))
2159- let gO = eG(eZ)
2160- let iL = eE(eZ[af])
2161- let gP = ((iL - iK) - gO)
2162- let iM = makeString_2C([eZ[af], eZ[ag], eZ[ah], eZ[ai], makeString([toString(iK), toString(gO), toString(gP), toString(iL)], "_")], ":")
2163- $Tuple2([StringEntry(eU, iM)], iM)
2191+ let fc = aE(aF)
2192+ let gG = value(assetInfo(fromBase58String(aF)))
2193+ let fd = (bT(split(gG.description, "_")[bI]) / bj)
2194+ let fe = valueOrElse(getInteger(ay(aF)), 0)
2195+ let fh = fb(fc, fd, fe)
2196+ let iR = bR(invoke(bE, "recalcLockedVolumeREADONLY", [aF, fh], nil))
2197+ let gV = eO(fh)
2198+ let iS = eM(fh[ag])
2199+ let gW = ((iS - iR) - gV)
2200+ let iT = makeString_2C([fh[ag], fh[ah], fh[ai], fh[aj], makeString([toString(iR), toString(gV), toString(gW), toString(iS)], "_")], ":")
2201+ $Tuple2([StringEntry(fc, iT)], iT)
21642202 }
21652203
21662204
21672205
2168-@Callable(dT)
2169-func fixStakedPieces (bo) = if ((dT.caller != bB))
2206+@Callable(eb)
2207+func fixStakedPieces (bp) = if ((eb.caller != bC))
21702208 then throw("Access denied")
21712209 else {
2172- let hN = if ((bo == ""))
2210+ let hU = if ((bp == ""))
21732211 then 0
21742212 else {
2175- let hI = getString(bC, bL(bo))
2176- let hD = if (isDefined(hI))
2177- then split_51C(value(hI), "_")
2213+ let hP = getString(bD, bM(bp))
2214+ let hK = if (isDefined(hP))
2215+ then split_51C(value(hP), "_")
21782216 else nil
2179- func iN (cK,aE) = {
2180- let gy = value(assetInfo(fromBase58String(aE)))
2181- let bT = split(gy.description, "_")[bH]
2182- (cK + bS(bT))
2217+ func iU (cL,aF) = {
2218+ let gG = value(assetInfo(fromBase58String(aF)))
2219+ let bU = split(gG.description, "_")[bI]
2220+ (cL + bT(bU))
21832221 }
21842222
2185- let cM = hD
2186- let cN = size(cM)
2187- let cO = 0
2188- func cP (cQ,cR) = if ((cR >= cN))
2189- then cQ
2190- else iN(cQ, cM[cR])
2191-
2192- func cS (cQ,cR) = if ((cR >= cN))
2193- then cQ
2223+ let cN = hK
2224+ let cO = size(cN)
2225+ let cP = 0
2226+ func cQ (cR,cS) = if ((cS >= cO))
2227+ then cR
2228+ else iU(cR, cN[cS])
2229+
2230+ func cT (cR,cS) = if ((cS >= cO))
2231+ then cR
21942232 else throw("List size exceeds 100")
21952233
2196- cS(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cO, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100)
2234+ cT(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100)
21972235 }
2198- $Tuple2([IntegerEntry(bM(bo), hN)], hN)
2236+ $Tuple2([IntegerEntry(bN(bp), hU)], hU)
21992237 }
22002238
22012239
22022240
2203-@Callable(dT)
2204-func setCustomName (au,hF,az) = {
2205- let hX = hU(dT)
2206- if ((size(dT.payments) != 1))
2241+@Callable(eb)
2242+func setCustomName (av,hM,aA) = {
2243+ let ie = ib(eb)
2244+ if ((size(eb.payments) != 1))
22072245 then throw("Exactly one payment required")
22082246 else {
2209- let hY = value(dT.payments[0])
2210- if ((hY.assetId != ba))
2247+ let if = value(eb.payments[0])
2248+ if ((if.assetId != bb))
22112249 then throw("Allowed USDT payment only!")
2212- else if ((hY.amount != bZ))
2213- then throw(("Payment should be " + toString(bZ)))
2214- else if (contains(hF, "__"))
2215- then throw(("Name should not contain '__': " + hF))
2216- else if ((size(hF) > ca))
2217- then throw(("Name too long, maxLength=" + toString(ca)))
2250+ else if ((if.amount != ca))
2251+ then throw(("Payment should be " + toString(ca)))
2252+ else if (contains(hM, "__"))
2253+ then throw(("Name should not contain '__': " + hM))
2254+ else if ((size(hM) > cb))
2255+ then throw(("Name too long, maxLength=" + toString(cb)))
22182256 else {
2219- let b = toString(dT.originCaller)
2220- let iO = {
2221- let bb = az
2222- if (("ACCOUNT" == bb))
2257+ let b = toString(eb.originCaller)
2258+ let iV = {
2259+ let bc = aA
2260+ if (("ACCOUNT" == bc))
22232261 then {
2224- let iP = cu(hF)
2225- let iQ = getString(iP)
2226- if (isDefined(iQ))
2227- then throw(("Name already registered: " + hF))
2262+ let iW = cv(hM)
2263+ let iX = getString(iW)
2264+ if (isDefined(iX))
2265+ then throw(("Name already registered: " + hM))
22282266 else {
2229- let iR = aG(b)
2230- let iS = getString(iR)
2231- let iT = if (isDefined(iS))
2232- then [DeleteEntry(cu(value(iS)))]
2267+ let iY = aH(b)
2268+ let iZ = getString(iY)
2269+ let ja = if (isDefined(iZ))
2270+ then [DeleteEntry(cv(value(iZ)))]
22332271 else nil
2234- (((iT :+ StringEntry(iR, hF)) :+ StringEntry(iP, b)) ++ hj(b, B)._1)
2272+ (((ja :+ StringEntry(iY, hM)) :+ StringEntry(iW, b)) ++ hq(b, B)._1)
22352273 }
22362274 }
2237- else if (("LAND" == bb))
2275+ else if (("LAND" == bc))
22382276 then {
2239- let gy = value(assetInfo(fromBase58String(au)))
2240- let gz = aw(au)
2241- if (!(isDefined(getInteger(gz))))
2242- then throw((gy.name + " is not staked"))
2277+ let gG = value(assetInfo(fromBase58String(av)))
2278+ let gH = ax(av)
2279+ if (!(isDefined(getInteger(gH))))
2280+ then throw((gG.name + " is not staked"))
22432281 else {
2244- let gB = valueOrErrorMessage(getString(at(au)), (("NFT " + gy.name) + " is orphaned"))
2245- if ((gB != b))
2282+ let gJ = valueOrErrorMessage(getString(au(av)), (("NFT " + gG.name) + " is orphaned"))
2283+ if ((gJ != b))
22462284 then throw((P + " is not yours"))
22472285 else {
2248- let iP = co(hF)
2249- let iQ = getString(iP)
2250- if (isDefined(iQ))
2251- then throw(("Name already registered: " + hF))
2286+ let iW = cp(hM)
2287+ let iX = getString(iW)
2288+ if (isDefined(iX))
2289+ then throw(("Name already registered: " + hM))
22522290 else {
2253- let iU = av(au)
2254- let iS = getString(iU)
2255- let iT = if (isDefined(iS))
2256- then [DeleteEntry(co(value(iS)))]
2291+ let jb = aw(av)
2292+ let iZ = getString(jb)
2293+ let ja = if (isDefined(iZ))
2294+ then [DeleteEntry(cp(value(iZ)))]
22572295 else nil
2258- (((iT :+ StringEntry(iU, hF)) :+ StringEntry(iP, au)) ++ hj(b, B)._1)
2296+ (((ja :+ StringEntry(jb, hM)) :+ StringEntry(iW, av)) ++ hq(b, B)._1)
22592297 }
22602298 }
22612299 }
22622300 }
2263- else if (("DUCK" == bb))
2301+ else if (("DUCK" == bc))
22642302 then {
2265- let gy = value(assetInfo(fromBase58String(au)))
2266- let gz = aw(au)
2267- if (if (!(isDefined(getInteger(gz))))
2303+ let gG = value(assetInfo(fromBase58String(av)))
2304+ let gH = ax(av)
2305+ if (if (!(isDefined(getInteger(gH))))
22682306 then true
2269- else !(isDefined(getString(aM(b)))))
2270- then throw((gy.name + " is not staked"))
2307+ else !(isDefined(getString(aN(b)))))
2308+ then throw((gG.name + " is not staked"))
22712309 else {
2272- let gB = valueOrErrorMessage(getString(aL(au)), (("NFT " + gy.name) + " is orphaned"))
2273- if ((gB != b))
2310+ let gJ = valueOrErrorMessage(getString(aM(av)), (("NFT " + gG.name) + " is orphaned"))
2311+ if ((gJ != b))
22742312 then throw((Q + " is not yours"))
22752313 else {
2276- let iP = ct(hF)
2277- let iQ = getString(iP)
2278- if (isDefined(iQ))
2279- then throw(("Name already registered: " + hF))
2314+ let iW = cu(hM)
2315+ let iX = getString(iW)
2316+ if (isDefined(iX))
2317+ then throw(("Name already registered: " + hM))
22802318 else {
2281- let iU = aF(au)
2282- let iS = getString(iU)
2283- let iT = if (isDefined(iS))
2284- then [DeleteEntry(ct(value(iS)))]
2319+ let jb = aG(av)
2320+ let iZ = getString(jb)
2321+ let ja = if (isDefined(iZ))
2322+ then [DeleteEntry(cu(value(iZ)))]
22852323 else nil
2286- (((iT :+ StringEntry(iU, hF)) :+ StringEntry(iP, au)) ++ hd(au, B)._1)
2324+ (((ja :+ StringEntry(jb, hM)) :+ StringEntry(iW, av)) ++ hk(av, B)._1)
22872325 }
22882326 }
22892327 }
22902328 }
22912329 else throw("Unknown entity type")
22922330 }
2293- $Tuple2(((iO :+ ScriptTransfer(bD, hY.amount, ba)) :+ hX), 0)
2331+ $Tuple2(((iV :+ ScriptTransfer(bE, if.amount, bb)) :+ ie), 0)
22942332 }
22952333 }
22962334 }
22972335
22982336
22992337
2300-@Callable(dT)
2301-func setReferrals (iV,iW) = if ((dT.callerPublicKey != bW))
2338+@Callable(eb)
2339+func setReferrals (jc,jd) = if ((eb.callerPublicKey != bX))
23022340 then throw("Permission denied")
23032341 else {
2304- let hX = hU(dT)
2305- if ((size(dT.payments) != 0))
2342+ let ie = ib(eb)
2343+ if ((size(eb.payments) != 0))
23062344 then throw("No payments required")
2307- else if (!(isDefined(addressFromString(iV))))
2308- then throw(("Invalid address: " + iV))
2309- else if (!(isDefined(addressFromString(iW))))
2310- then throw(("Invalid address: " + iW))
2345+ else if (!(isDefined(addressFromString(jc))))
2346+ then throw(("Invalid address: " + jc))
2347+ else if (!(isDefined(addressFromString(jd))))
2348+ then throw(("Invalid address: " + jd))
23112349 else {
2312- let iX = cv()
2313- let iY = getString(iX)
2314- let iZ = if (isDefined(iY))
2315- then split_4C(value(iY), "_")
2350+ let je = cw()
2351+ let jf = getString(je)
2352+ let jg = if (isDefined(jf))
2353+ then split_4C(value(jf), "_")
23162354 else nil
2317- if (containsElement(iZ, iW))
2318- then throw((iW + " is not newbie (already has referrals)"))
2355+ if (containsElement(jg, jd))
2356+ then throw((jd + " is not newbie (already has referrals)"))
23192357 else {
2320- let hl = aH(iW)
2321- let hm = getString(hl)
2322- if (if (isDefined(hm))
2323- then isDefined(addressFromString(value(hm)))
2358+ let hs = aI(jd)
2359+ let ht = getString(hs)
2360+ if (if (isDefined(ht))
2361+ then isDefined(addressFromString(value(ht)))
23242362 else false)
2325- then throw(((iW + " already has refBy: ") + value(hm)))
2363+ then throw(((jd + " already has refBy: ") + value(ht)))
23262364 else {
2327- let ja = aK(iV)
2328- let jb = getString(ja)
2329- let jc = if (isDefined(jb))
2330- then split_4C(value(jb), "_")
2365+ let jh = aL(jc)
2366+ let ji = getString(jh)
2367+ let jj = if (isDefined(ji))
2368+ then split_4C(value(ji), "_")
23312369 else nil
2332- if (containsElement(jc, iW))
2333- then throw((((iV + " already contains ") + iW) + " within referrals"))
2370+ if (containsElement(jj, jd))
2371+ then throw((((jc + " already contains ") + jd) + " within referrals"))
23342372 else {
2335- let jd = makeString_2C((jc :+ iW), "_")
2336- let je = if (containsElement(iZ, iV))
2337- then value(iY)
2338- else makeString_2C((iZ :+ iV), "_")
2339- $Tuple2([StringEntry(hl, iV), StringEntry(ja, jd), StringEntry(iX, je), hX], 0)
2373+ let jk = makeString_2C((jj :+ jd), "_")
2374+ let jl = if (containsElement(jg, jc))
2375+ then value(jf)
2376+ else makeString_2C((jg :+ jc), "_")
2377+ $Tuple2([StringEntry(hs, jc), StringEntry(jh, jk), StringEntry(je, jl), ie], 0)
23402378 }
23412379 }
23422380 }
23432381 }
23442382 }
23452383
23462384
23472385
2348-@Callable(dT)
2349-func distributePoints (jf,jg,jh,ji,jj) = {
2350- let hX = hU(dT)
2351- if ((size(dT.payments) != 0))
2386+@Callable(eb)
2387+func distributePoints (jm,jn,jo,jp,jq) = {
2388+ let ie = ib(eb)
2389+ if ((size(eb.payments) != 0))
23522390 then throw("No payments required")
23532391 else {
2354- let b = toString(dT.originCaller)
2355- let p = valueOrErrorMessage(getString(aM(b)), "You don't have a duck staked")
2356- let jk = w(b)
2357- let jl = valueOrElse(getInteger(bC, jk), 0)
2358- let jm = s(p)
2359- let jn = valueOrElse(getInteger(bC, jm), 0)
2360- let jo = (jl + jn)
2361- let jp = ((((jf + jg) + jh) + ji) + jj)
2362- if ((jp > jo))
2363- then throw((("There are only " + toString(jo)) + " free points to distribute"))
2392+ let b = toString(eb.originCaller)
2393+ let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked")
2394+ let jr = w(b)
2395+ let js = valueOrElse(getInteger(bD, jr), 0)
2396+ let jt = s(p)
2397+ let ju = valueOrElse(getInteger(bD, jt), 0)
2398+ let jv = (js + ju)
2399+ let jw = ((((jm + jn) + jo) + jp) + jq)
2400+ if ((jw > jv))
2401+ then throw((("There are only " + toString(jv)) + " free points to distribute"))
23642402 else {
2365- let jq = o(p)
2366- let jr = split(valueOrElse(getString(bC, jq), "0_0_0_0_0"), "_")
2367- let js = (jl - jp)
2368- $Tuple2([IntegerEntry(jk, if ((0 > js))
2403+ let jx = o(p)
2404+ let jy = split(valueOrElse(getString(bD, jx), "0_0_0_0_0"), "_")
2405+ let jz = (js - jw)
2406+ $Tuple2([IntegerEntry(jr, if ((0 > jz))
23692407 then 0
2370- else js), IntegerEntry(jm, if ((0 > js))
2371- then (jn + js)
2372- else jn), StringEntry(jq, makeString([toString((parseIntValue(jr[g]) + jf)), toString((parseIntValue(jr[h]) + jg)), toString((parseIntValue(jr[i]) + jh)), toString((parseIntValue(jr[j]) + ji)), toString((parseIntValue(jr[k]) + jj))], "_")), hX], 0)
2408+ else jz), IntegerEntry(jt, if ((0 > jz))
2409+ then (ju + jz)
2410+ else ju), StringEntry(jx, makeString([toString((parseIntValue(jy[g]) + jm)), toString((parseIntValue(jy[h]) + jn)), toString((parseIntValue(jy[i]) + jo)), toString((parseIntValue(jy[j]) + jp)), toString((parseIntValue(jy[k]) + jq))], "_")), ie], 0)
23732411 }
23742412 }
23752413 }
23762414
23772415
23782416
2379-@Callable(dT)
2380-func splitByGlobalWeightsREADONLY (fj) = $Tuple2(nil, cT(fj))
2381-
2382-
2383-
2384-@Callable(dT)
2385-func splitByGlobalAndLocalWeightsREADONLY (jt,ju,dW) = {
2386- let dP = dV(dW)
2387- $Tuple2(nil, $Tuple2(cT(jt), cE(ju, dP)))
2388- }
2389-
2390-
2391-
2392-@Callable(dT)
2393-func getBackpackREADONLY (p) = $Tuple2(nil, makeString(eB(aN(p)), ":"))
2394-
2395-
2396-
2397-@Callable(dT)
2398-func getWarehouseREADONLY (aE) = {
2399- let gy = value(assetInfo(fromBase58String(aE)))
2400- let eV = (bS(split(gy.description, "_")[bH]) / bi)
2401- let eW = valueOrElse(getInteger(ax(aE)), 0)
2402- $Tuple2(nil, makeString_2C(eT(aD(aE), eV, eW), ":"))
2403- }
2404-
2405-
2406-
2407-@Callable(dT)
2408-func saveLastTx () = if (if ((dT.caller != bF))
2409- then (dT.caller != bD)
2417+@Callable(eb)
2418+func splitByGlobalWeightsREADONLY (fr) = $Tuple2(nil, cU(fr))
2419+
2420+
2421+
2422+@Callable(eb)
2423+func splitByGlobalAndLocalWeightsREADONLY (jA,jB,ee) = {
2424+ let dX = ed(ee)
2425+ $Tuple2(nil, $Tuple2(cU(jA), cF(jB, dX)))
2426+ }
2427+
2428+
2429+
2430+@Callable(eb)
2431+func getBackpackREADONLY (p) = $Tuple2(nil, makeString(eJ(aO(p)), ":"))
2432+
2433+
2434+
2435+@Callable(eb)
2436+func getWarehouseREADONLY (aF) = {
2437+ let gG = value(assetInfo(fromBase58String(aF)))
2438+ let fd = (bT(split(gG.description, "_")[bI]) / bj)
2439+ let fe = valueOrElse(getInteger(ay(aF)), 0)
2440+ $Tuple2(nil, makeString_2C(fb(aE(aF), fd, fe), ":"))
2441+ }
2442+
2443+
2444+
2445+@Callable(eb)
2446+func saveLastTx () = if (if ((eb.caller != bG))
2447+ then (eb.caller != bE)
24102448 else false)
24112449 then throw("Access denied")
2412- else $Tuple2([hU(dT)], 42)
2413-
2414-
2415-
2416-@Callable(dT)
2417-func updateDuckStats (p,he) = if ((dT.caller != bD))
2450+ else $Tuple2([ib(eb)], 42)
2451+
2452+
2453+
2454+@Callable(eb)
2455+func updateDuckStats (p,hl) = if ((eb.caller != bE))
24182456 then throw("Access denied")
2419- else hd(p, he)
2420-
2421-
2422-
2423-@Callable(dT)
2424-func updateAccStats (b,he) = if ((dT.caller != bD))
2457+ else hk(p, hl)
2458+
2459+
2460+
2461+@Callable(eb)
2462+func updateAccStats (b,hl) = if ((eb.caller != bE))
24252463 then throw("Access denied")
2426- else hj(b, he)
2427-
2428-
2429-
2430-@Callable(dT)
2431-func equipDuck (jv) = {
2432- let hX = hU(dT)
2433- if ((size(dT.payments) != 0))
2464+ else hq(b, hl)
2465+
2466+
2467+
2468+@Callable(eb)
2469+func equipDuck (jC) = {
2470+ let ie = ib(eb)
2471+ if ((size(eb.payments) != 0))
24342472 then throw("No payments required")
24352473 else {
2436- let b = toString(dT.originCaller)
2437- let p = valueOrErrorMessage(getString(aM(b)), "You don't have a duck staked")
2438- let jw = t(p)
2439- let jx = split(valueOrElse(getString(jw), ",;,_,;,_,;,_,;,_,;,_,;,"), "_")
2440- let eC = aN(p)
2441- let fn = eB(eC)
2442- let jy = split(jv, "_")
2443- if ((size(jy) != l))
2474+ let b = toString(eb.originCaller)
2475+ let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked")
2476+ let jD = t(p)
2477+ let jE = split(valueOrElse(getString(jD), ",;,_,;,_,;,_,;,_,;,_,;,"), "_")
2478+ let eK = aO(p)
2479+ let fv = eJ(eK)
2480+ let jF = split(jC, "_")
2481+ if ((size(jF) != l))
24442482 then throw("Wrong equipment string")
24452483 else {
2446- let jz = fn[ar]
2447- let dg = if ((jz == ""))
2484+ let jG = fv[as]
2485+ let dh = if ((jG == ""))
24482486 then nil
2449- else split(jz, "_")
2450- let jA = dG(jx, dg, true)
2451- let ds = dG(jy, jA, false)
2452- $Tuple2([StringEntry(jw, jv), StringEntry(eC, makeString_2C([fn[ao], fn[ap], fn[aq], makeString(ds, "_")], ":")), hX], 0)
2487+ else split(jG, "_")
2488+ let jH = dQ(jE, dh, true)
2489+ let dt = dQ(jF, jH, false)
2490+ $Tuple2([StringEntry(jD, jC), StringEntry(eK, makeString_2C([fv[ap], fv[aq], fv[ar], makeString(dt, "_")], ":")), ie], 0)
24532491 }
24542492 }
24552493 }
24562494
24572495

github/deemru/w8io/c3f4982 
979.53 ms