tx · 7WCNFt8rezTWy1WF1PHrrtFLfSxLU2uzi7M5mhHG4QAa

3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm:  -0.07700000 Waves

2023.07.20 15:14 [2674164] smart account 3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm > SELF 0.00000000 Waves

{ "type": 13, "id": "7WCNFt8rezTWy1WF1PHrrtFLfSxLU2uzi7M5mhHG4QAa", "fee": 7700000, "feeAssetId": null, "timestamp": 1689855280339, "version": 2, "chainId": 84, "sender": "3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm", "senderPublicKey": "EVooykMNV691Venwp1dHUTBd7KWequzUcda57Wd3LQEX", "proofs": [ "221yytgrnZEv7zQKVPhuQysHsjpoKz55VagDwtwxnQkZwWF16hQm47KNXN3FDmzkpvt6dsqmFrn1zsmhxZcaJvik" ], "script": "base64:BgKyAQgCEgMKAQgSAwoBBBIAEgMKAQgSABIDCgEIEgQKAgEIEgQKAgEIEgQKAgICEgUKAwEBARIAEgQKAggIEgASBAoCAgISAwoBCBIDCgEIEgQKAggIEgMKARgSAwoBGBIECgIICBIECgIICBIDCgEIEgMKAQgSBQoDCAgIEgQKAggIEgcKBQEBAQEBEgMKAQESBQoDAQEIEgMKAQgSAwoBCBIAEgQKAggBEgQKAggBEgMKAQjTAQEUa2V5TGFzdEFyYlRpbWVCeVVzZXIBBGFkZHIJAKwCAgIQbGFzdEFyYlRpbWVVc2VyXwUEYWRkcgAGU0NBTEU4AIDC1y8ADHhwTGV2ZWxTY2FsZQCAGQAPeHBMZXZlbFJlY2lwUG93AKAfABJudW1Qb2ludHNPbkxldmVsVXAAAwAMcmVxdWlyZW1lbnRzCQDMCAICCFN0cmVuZ3RoCQDMCAICCEFjY3VyYWN5CQDMCAICCUludGVsbGVjdAkAzAgCAglFbmR1cmFuY2UJAMwIAgIJRGV4dGVyaXR5CQDMCAICBUxldmVsCQDMCAICBkhlYWx0aAUDbmlsAAxjaGFyU3RyZW5ndGgAAAAMY2hhckFjY3VyYWN5AAEADWNoYXJJbnRlbGxlY3QAAgANY2hhckVuZHVyYW5jZQADAA1jaGFyRGV4dGVyaXR5AAQAC05VTVNFR01FTlRTAAYACk5VTU1BSU5BVVgAAgAITUFYU0xPVFMAAgENa2V5RHVja0hlYWx0aAELZHVja0Fzc2V0SWQJAKwCAgILZHVja0hlYWx0aF8FC2R1Y2tBc3NldElkAQxrZXlEdWNrQ2hhcnMBC2R1Y2tBc3NldElkCQCsAgICCmR1Y2tDaGFyc18FC2R1Y2tBc3NldElkAQlrZXlEdWNrWFABC2R1Y2tBc3NldElkCQCsAgICB2R1Y2tYUF8FC2R1Y2tBc3NldElkAQxrZXlEdWNrTGV2ZWwBC2R1Y2tBc3NldElkCQCsAgICCmR1Y2tMZXZlbF8FC2R1Y2tBc3NldElkARFrZXlEdWNrRnJlZVBvaW50cwELZHVja0Fzc2V0SWQJAKwCAgIPZHVja0ZyZWVQb2ludHNfBQtkdWNrQXNzZXRJZAEQa2V5RHVja0VxdWlwbWVudAELZHVja0Fzc2V0SWQJAKwCAgIOZHVja0VxdWlwbWVudF8FC2R1Y2tBc3NldElkAQlrZXlVc2VyWFABBGFkZHIJAKwCAgIHdXNlclhQXwUEYWRkcgEMa2V5VXNlckxldmVsAQRhZGRyCQCsAgICCnVzZXJMZXZlbF8FBGFkZHIBEWtleVVzZXJGcmVlUG9pbnRzAQRhZGRyCQCsAgICD3VzZXJGcmVlUG9pbnRzXwUEYWRkcgAHeHBDbGFpbQCgjQYAD3hwU3VjY2Vzc0ZsaWdodADQhgMADHhwRmFpbEZsaWdodACQTgAIeHBDYWxsRVMAoI0GAAx4cEN1c3RvbU5hbWUAwJaxAgAKeHBOZXdTTGFuZACA4esXAA54cFVwZ3JhZGVJbmZyYQCgjQYAB3hwTWVyZ2UAgK3iBAAJeHBPbmJvYXJkAICt4gQABnhwSGVhbACQTgEJbGV2ZWxCeVhQAQJ4cAkAawMFDHhwTGV2ZWxTY2FsZQkAbAYFAnhwAAQFD3hwTGV2ZWxSZWNpcFBvdwAEAAQFBERPV04FBlNDQUxFOAEJbWF4SGVhbHRoAQVsZXZlbAkAZAIAZAUFbGV2ZWwBB2xldmVsVXACCWN1cnJMZXZlbAVuZXdYUAQIbmV3TGV2ZWwJAQlsZXZlbEJ5WFABBQVuZXdYUAkAzAgCBQhuZXdMZXZlbAkAzAgCCQBoAgUSbnVtUG9pbnRzT25MZXZlbFVwCQBlAgUIbmV3TGV2ZWwFCWN1cnJMZXZlbAUDbmlsAQxnZXREdWNrU3RhdHMCD3N0YWtpbmdDb250cmFjdAtkdWNrQXNzZXRJZAQFY2hhcnMJALUJAgkBC3ZhbHVlT3JFbHNlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJAQxrZXlEdWNrQ2hhcnMBBQtkdWNrQXNzZXRJZAIJMF8wXzBfMF8wAgFfBANsdmwJAQt2YWx1ZU9yRWxzZQIJAJoIAgUPc3Rha2luZ0NvbnRyYWN0CQEMa2V5RHVja0xldmVsAQULZHVja0Fzc2V0SWQAAAQGaGVhbHRoCQELdmFsdWVPckVsc2UCCQCaCAIFD3N0YWtpbmdDb250cmFjdAkBDWtleUR1Y2tIZWFsdGgBBQtkdWNrQXNzZXRJZAkBCW1heEhlYWx0aAEFA2x2bAkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFY2hhcnMFDGNoYXJTdHJlbmd0aAkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFY2hhcnMFDGNoYXJBY2N1cmFjeQkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFY2hhcnMFDWNoYXJJbnRlbGxlY3QJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBWNoYXJzBQ1jaGFyRW5kdXJhbmNlCQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVjaGFycwUNY2hhckRleHRlcml0eQkAzAgCBQNsdmwJAMwIAgUGaGVhbHRoBQNuaWwACkxBTkRQUkVGSVgCBExBTkQACkRVQ0tQUkVGSVgCBERVQ0sACkFSVFBSRVNBTEUCB1BSRVNBTEUABk5VTVJFUwAGAA9EQUlMWVJFU0JZUElFQ0UAgPjSAQAJREFZTUlMTElTAIC4mSkADFdITVVMVElQTElFUgCAyK+gJQAPREVGQVVMVExPQ0FUSU9OAg9BZnJpY2FfRl9BZnJpY2EAEFJFU09VUkNFUFJJQ0VNSU4A1bUCAApFU1NFTExDT0VGAAoACXByb2RUeXBlcwkAzAgCAhBGaXJzdCBBaWQgS2l0IEwxCQDMCAICEEZpcnN0IEFpZCBLaXQgTDIJAMwIAgIQRmlyc3QgQWlkIEtpdCBMMwkAzAgCAgtCYWNrcGFjayBMMQkAzAgCAgtCYWNrcGFjayBMMgkAzAgCAgtCYWNrcGFjayBMMwkAzAgCAg5Gb29kIFJhdGlvbiBMMQkAzAgCAg5Gb29kIFJhdGlvbiBMMgkAzAgCAg5Gb29kIFJhdGlvbiBMMwkAzAgCAgtKZXQgUGFjayBMMQkAzAgCAgtKZXQgUGFjayBMMgkAzAgCAgtKZXQgUGFjayBMMwkAzAgCAglTaGllbGQgTDEJAMwIAgIJU2hpZWxkIEwyCQDMCAICCVNoaWVsZCBMMwUDbmlsAApjb250aW5lbnRzCQDMCAICCEFtZXJpY2FzCQDMCAICBkV1cm9wZQkAzAgCAgRBc2lhCQDMCAICBkFmcmljYQkAzAgCAgdPY2VhbmlhBQNuaWwACUNPRUZGMk1BVACAreIEABBwcm9kdWN0aW9uTWF0cml4CQDMCAICJThfOF84XzE3XzE3XzQyXzEyXzBfMzBfMCwwLDAsMCwwLDAsMF8JAMwIAgIlOF84XzhfMTdfMTdfNDJfMjRfMF82MF8wLDAsNSwyLDAsMCwwXwkAzAgCAic4XzhfOF8xN18xN180Ml8zNl8wXzEyMF8wLDAsMTAsNCwwLDAsMF8JAMwIAgIpOF8xOV8xOV84XzI3XzE5XzI2XzFfMjBfMCwwLDAsMCwwLDAsMF8wMDEJAMwIAgIpOF8xOV8xOV84XzI3XzE5XzUyXzFfNDBfMCwwLDAsMCwwLDAsMF8wMDEJAMwIAgIpOF8xOV8xOV84XzI3XzE5Xzc4XzFfODBfMCwwLDAsMCwwLDAsMF8wMDEJAMwIAgIiOF84XzhfOF84XzYwXzEzXzJfMl8wLDAsMCwwLDAsMCwwXwkAzAgCAiI4XzhfOF84XzhfNjBfMjZfMl80XzAsMCwwLDAsMCwwLDBfCQDMCAICIjhfOF84XzhfOF82MF8zOV8yXzhfMCwwLDAsMCwwLDAsMF8JAMwIAgIpMzBfMzBfM18xN18xN18zXzMwXzNfMzBfMCwwLDAsMCwwLDAsMF8xMTEJAMwIAgIpMzBfMzBfM18xN18xN18zXzYwXzNfNTBfMCwwLDAsMCwwLDAsMF8xMTEJAMwIAgIpMzBfMzBfM18xN18xN18zXzkwXzNfNzBfMCwwLDAsMCwwLDAsMF8xMTEJAMwIAgIrMThfMThfMTBfMThfMThfMThfMTFfNF8zMF8wLDAsMCwwLDAsMCwwXzIwMQkAzAgCAisxOF8xOF8xMF8xOF8xOF8xOF8yMl80XzUwXzAsMCwwLDAsMCwwLDBfMjAxCQDMCAICKzE4XzE4XzEwXzE4XzE4XzE4XzMzXzRfNzBfMCwwLDAsMCwwLDAsMF8yMDEFA25pbAAJcklkeENvZWZmAAYAEHJJZHhSZXF1aXJlbWVudHMACQAJcklkeFNsb3RzAAoADlBST0RVQ1RQS0dTSVpFAAoAC3doSWR4TGV2ZWxzAAAACHdoSWR4UmVzAAEACHdoSWR4TWF0AAIACXdoSWR4UHJvZAADAAl3aElkeExPRlQABAAJdm9sTG9ja2VkAAAAC3ZvbE9jY3VwaWVkAAEAB3ZvbEZyZWUAAgAIdm9sVG90YWwAAwAKYnBJZHhMZXZlbAAAAAhicElkeFJlcwABAAhicElkeE1hdAACAAlicElkeFByb2QAAwERa2V5TGFzdFR4SWRCeVVzZXIBBGFkZHIJAKwCAgIPbGFzdFR4SWRCeVVzZXJfBQRhZGRyARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBB2Fzc2V0SWQJAKwCAgIJbmZ0T3duZXJfBQdhc3NldElkARprZXlMYW5kQXNzZXRJZFRvQ3VzdG9tTmFtZQEHYXNzZXRJZAkArAICAhhsYW5kQ3VzdG9tTmFtZUJ5QXNzZXRJZF8FB2Fzc2V0SWQBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBB2Fzc2V0SWQJAKwCAgILc3Rha2VkVGltZV8FB2Fzc2V0SWQBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBB2Fzc2V0SWQJAKwCAgILaW5mcmFMZXZlbF8FB2Fzc2V0SWQBIGtleUxhbmRBcnRTdGF0dXNCeVR5cGVBbmRBc3NldElkAgR0eXBlB2Fzc2V0SWQJALkJAgkAzAgCAg1sYW5kQXJ0U3RhdHVzCQDMCAIFBHR5cGUJAMwIAgUHYXNzZXRJZAUDbmlsAgFfASJrZXlTdGFrZWRUaW1lQnlUeXBlQXNzZXRJZEFuZE93bmVyAwduZnRUeXBlB2Fzc2V0SWQJb3duZXJBZGRyCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIgc3Rha2VkVGltZUJ5VHlwZUFzc2V0SWRBbmRPd25lcl8FB25mdFR5cGUCAV8FB2Fzc2V0SWQCAV8FCW93bmVyQWRkcgESa2V5V2FyZWhvdXNlQnlMYW5kAQtsYW5kQXNzZXRJZAkArAICAgp3YXJlSG91c2VfBQtsYW5kQXNzZXRJZAEaa2V5RHVja0Fzc2V0SWRUb0N1c3RvbU5hbWUBB2Fzc2V0SWQJAKwCAgIYZHVja0N1c3RvbU5hbWVCeUFzc2V0SWRfBQdhc3NldElkARZrZXlBZGRyZXNzVG9DdXN0b21OYW1lAQRhZGRyCQCsAgICGGFjY291bnRDdXN0b21OYW1lQnlBZGRyXwUEYWRkcgEPa2V5QWRkcmVzc1JlZkJ5AQRhZGRyCQCsAgICCWFjY1JlZkJ5XwUEYWRkcgEca2V5T25ib2FyZEFydEFjdGl2YXRlZE9uRHVjawELZHVja0Fzc2V0SWQJAKwCAgIab25ib2FyZEFydEFjdGl2YXRlZE9uRHVja18FC2R1Y2tBc3NldElkARxrZXlPbmJvYXJkQXJ0RHVja0FjdGl2YXRlZEJ5AQRhZGRyCQCsAgICGm9uYm9hcmRBcnRBY3RpdmF0ZWREdWNrQnlfBQRhZGRyARNrZXlBZGRyZXNzUmVmZXJyYWxzAQRhZGRyCQCsAgICDWFjY1JlZmVycmFsc18FBGFkZHIBEGtleUR1Y2tJZFRvT3duZXIBB2Fzc2V0SWQJAKwCAgIKZHVja093bmVyXwUHYXNzZXRJZAEUa2V5U3Rha2VkRHVja0J5T3duZXIBCW93bmVyQWRkcgkArAICAhJzdGFrZWREdWNrQnlPd25lcl8FCW93bmVyQWRkcgERa2V5QmFja3BhY2tCeUR1Y2sBC2R1Y2tBc3NldElkCQCsAgICCWJhY2tQYWNrXwULZHVja0Fzc2V0SWQBD2tleUR1Y2tMb2NhdGlvbgELZHVja0Fzc2V0SWQJAKwCAgINZHVja0xvY2F0aW9uXwULZHVja0Fzc2V0SWQBCmtleUJsb2NrZWQAAhBjb250cmFjdHNCbG9ja2VkARVrZXlVc2VyR3dsUmVsZWFzZVRpbWUBCHVzZXJBZGRyCQCsAgICGiVzJXNfX3VzZXJHd2xSZWxlYXNlVGltZV9fBQh1c2VyQWRkcgEOa2V5RXNXYXJlaG91c2UAAhplbWVyZ2VuY3lXYXJlaG91c2VQcm9kdWN0cwAKbG9jSWR4VHlwZQABAAhsb2NJZHhJZAACARJnZXRSZWNpcGVNYXRlcmlhbHMBBnJlY2lwZQkAaAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQZyZWNpcGUFCXJJZHhDb2VmZgUJQ09FRkYyTUFUAA9LU0FMTE9XWFBMRVZFTFMGAAVjaGFpbgkAyQECCQDKAQIIBQR0aGlzBWJ5dGVzAAEAAQALdXNkdEFzc2V0SWQEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDABIITaerIIAz9O0bvKju6Lk7zJgt0LXfoHlqjUI/moD/+5AwkAAAIBAVQFByRtYXRjaDABIFWx2J9yh4Lv5eNbjawFq2XemkOhLxa7BfMat4el8cUYCQACAQINVW5rbm93biBjaGFpbgAVZGVmYXVsdFJlc3RBZGRyZXNzU3RyBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwAiMzUFFDdXZGYnZoNExrUFVucm5VMXozam5iQTFwOW0zV05odgMJAAACAQFUBQckbWF0Y2gwAiMzTXVta0dHenRDS0FYcFdEcXhrZGRvZnFYU1VicVFrdlNKeQkAAgECDVVua25vd24gY2hhaW4AEUluZnJhVXBncmFkZUNvc3RTBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwAIDIr6AlAwkAAAIBAVQFByRtYXRjaDAAgMLXLwkAAgECDVVua25vd24gY2hhaW4ADmFyYml0cmFnZURlbGF5BAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwAMDPJAMJAAACAQFUBQckbWF0Y2gwAODUAwkAAgECDVVua25vd24gY2hhaW4AA1NFUAICX18ABU1VTFQ2AMCEPQAFTVVMVDgAgMLXLwAFU1NJWkUAGQAFTVNJWkUAZAAFTFNJWkUA4QEABlhMU0laRQCQAwAHWFhMU0laRQDxBAEPZ2V0U3RyaW5nT3JGYWlsAgdhZGRyZXNzA2tleQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFB2FkZHJlc3MFA2tleQkAuQkCCQDMCAICCm1hbmRhdG9yeSAJAMwIAgkApQgBBQdhZGRyZXNzCQDMCAICAS4JAMwIAgUDa2V5CQDMCAICDyBpcyBub3QgZGVmaW5lZAUDbmlsAgAAEUlkeENmZ1N0YWtpbmdEYXBwAAEAEUlkeENmZ0Vjb25vbXlEYXBwAAIAFElkeENmZ0dvdmVybmFuY2VEYXBwAAMADUlkeENmZ1dsZ0RhcHAABAEKa2V5UmVzdENmZwACDiVzX19yZXN0Q29uZmlnAQ5rZXlSZXN0QWRkcmVzcwACDCVzX19yZXN0QWRkcgERcmVhZFJlc3RDZmdPckZhaWwBBHJlc3QJALwJAgkBD2dldFN0cmluZ09yRmFpbAIFBHJlc3QJAQprZXlSZXN0Q2ZnAAUDU0VQARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCB3Jlc3RDZmcDaWR4CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkAkQMCBQdyZXN0Q2ZnBQNpZHgJAKwCAgIqUmVzdCBjZmcgZG9lc24ndCBjb250YWluIGFkZHJlc3MgYXQgaW5kZXggCQCkAwEFA2lkeAAMcmVzdENvbnRyYWN0CQERQGV4dHJOYXRpdmUoMTA2MikBCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMJAQ5rZXlSZXN0QWRkcmVzcwAFFWRlZmF1bHRSZXN0QWRkcmVzc1N0cgAHcmVzdENmZwkBEXJlYWRSZXN0Q2ZnT3JGYWlsAQUMcmVzdENvbnRyYWN0AA9zdGFraW5nQ29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQdyZXN0Q2ZnBRFJZHhDZmdTdGFraW5nRGFwcAAPZWNvbm9teUNvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUHcmVzdENmZwURSWR4Q2ZnRWNvbm9teURhcHAAC2dvdkNvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUHcmVzdENmZwUUSWR4Q2ZnR292ZXJuYW5jZURhcHAAC3dsZ0NvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUHcmVzdENmZwUNSWR4Q2ZnV2xnRGFwcAAKcmVjTGFuZE51bQAAAAtyZWNMYW5kU2l6ZQABAAtyZWNUZXJyYWlucwACAAxyZWNDb250aW5lbnQAAwERa2V5UmVzUHJvcG9ydGlvbnMAAhNyZXNUeXBlc1Byb3BvcnRpb25zARVrZXlTdGFrZWRMYW5kc0J5T3duZXIBCW93bmVyQWRkcgkArAICAhNzdGFrZWRMYW5kc0J5T3duZXJfBQlvd25lckFkZHIBFmtleVN0YWtlZFBpZWNlc0J5T3duZXIBCW93bmVyQWRkcgkArAICAhRzdGFrZWRQaWVjZXNCeU93bmVyXwUJb3duZXJBZGRyAQhhc1N0cmluZwEBdgQHJG1hdGNoMAUBdgMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAXMFByRtYXRjaDAFAXMJAAIBAhhmYWlsIHRvIGNhc3QgaW50byBTdHJpbmcBBWFzSW50AQF2BAckbWF0Y2gwBQF2AwkAAQIFByRtYXRjaDACA0ludAQBbgUHJG1hdGNoMAUBbgkAAgECFWZhaWwgdG8gY2FzdCBpbnRvIEludAEPbnVtUGllY2VzQnlTaXplAQhsYW5kU2l6ZQQHJG1hdGNoMAUIbGFuZFNpemUDCQAAAgIBUwUHJG1hdGNoMAUFU1NJWkUDCQAAAgIBTQUHJG1hdGNoMAUFTVNJWkUDCQAAAgIBTAUHJG1hdGNoMAUFTFNJWkUDCQAAAgICWEwFByRtYXRjaDAFBlhMU0laRQMJAAACAgNYWEwFByRtYXRjaDAFB1hYTFNJWkUJAAIBAhFVbmtub3duIGxhbmQgc2l6ZQANaW5jdWJhdG9yQWRkcgQHJG1hdGNoMAUFY2hhaW4DCQAAAgEBVwUHJG1hdGNoMAkBEUBleHRyTmF0aXZlKDEwNjIpAQIjM1BFa3RWdXgyUmhjaFNONjNEc0RvNGI0bXo0UXF6S1NlRHYDCQAAAgEBVAUHJG1hdGNoMAUEdGhpcwkAAgECDVVua25vd24gY2hhaW4AC2JyZWVkZXJBZGRyBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwCQERQGV4dHJOYXRpdmUoMTA2MikBAiMzUERWdVU0NUg3RWg1ZG10TmJuUk5SU3RHd1VMQTdOWTZIYgMJAAACAQFUBQckbWF0Y2gwBQR0aGlzCQACAQINVW5rbm93biBjaGFpbgADcHViASBPU+IaP1So1p1SThMdRidVvbNT8yx7yVRUsP9DwbQUKAAIbWVkS2l0SHAJAMwIAgAeCQDMCAIAPAkAzAgCAHgFA25pbAARRklWRU1JTlVURVNNSUxMSVMA4KcSAAxSRU5BTUlOR0NPU1QAwJaxAgAKTUFYTkFNRUxFTgAyABVJbmZyYVVwZ3JhZGVDb3N0U1VzZHQAgK3iBAAMRVhQTUFURVJJQUxTBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwAKbdgu2rBwMJAAACAQFUBQckbWF0Y2gwAKqngbMJCQACAQINVW5rbm93biBjaGFpbgAHRVhQVVNEVAQHJG1hdGNoMAUFY2hhaW4DCQAAAgEBVwUHJG1hdGNoMACA5Zp3AwkAAAIBAVQFByRtYXRjaDAAgOWadwkAAgECDVVua25vd24gY2hhaW4ABUZJVkVYCQC2AgEABQAHVFdFTlRZWAkAtgIBABQACFRXRU5UWTJYCQC2AgEJAGgCABQAFAAIVFdFTlRZM1gJALYCAQkAaAIJAGgCABQAFAAUAAhUV0VOVFk0WAkAtgIBCQBoAgkAaAIJAGgCABQAFAAUABQACFRXRU5UWTVYCQC2AgEJAGgCCQBoAgkAaAIJAGgCABQAFAAUABQAFAAPUFJFU0FMRU5VTUxBTkRTAPQDARJrZXlOZXh0RnJlZUxhbmROdW0AAgtuZXh0TGFuZE51bQEQa2V5TGFuZFRvQXNzZXRJZAEHbGFuZE51bQkArAICAgxsYW5kVG9Bc3NldF8FB2xhbmROdW0BGmtleUxhbmRDdXN0b21OYW1lVG9Bc3NldElkAQRuYW1lCQCsAgICEWxhbmRCeUN1c3RvbU5hbWVfBQRuYW1lAR5rZXlJbmZyYUxldmVsQnlBc3NldElkQW5kT3duZXICB2Fzc2V0SWQJb3duZXJBZGRyCQCsAgIJAKwCAgkArAICAhxpbmZyYUxldmVsQnlBc3NldElkQW5kT3duZXJfBQdhc3NldElkAgFfBQlvd25lckFkZHIBJWtleUxhbmRBcnRTdGF0dXNCeVR5cGVBc3NldElkQW5kT3duZXIDBHR5cGUHYXNzZXRJZAlvd25lckFkZHIJALkJAgkAzAgCAiJsYW5kQXJ0U3RhdHVzQnlUeXBlQXNzZXRJZEFuZE93bmVyCQDMCAIFBHR5cGUJAMwIAgUHYXNzZXRJZAkAzAgCBQlvd25lckFkZHIFA25pbAIBXwERa2V5TGFuZE51bVRvT3duZXIBB2xhbmROdW0JAKwCAgIKbGFuZE93bmVyXwUHbGFuZE51bQEaa2V5RHVja0N1c3RvbU5hbWVUb0Fzc2V0SWQBBG5hbWUJAKwCAgIRZHVja0J5Q3VzdG9tTmFtZV8FBG5hbWUBFmtleUN1c3RvbU5hbWVUb0FkZHJlc3MBBG5hbWUJAKwCAgIUYWNjb3VudEJ5Q3VzdG9tTmFtZV8FBG5hbWUBCWtleU9sZGllcwACCm9sZGllc0xpc3QAC2NsYWltTW9kZVdoAAAADWNsYWltTW9kZUR1Y2sAAQATY2xhaW1Nb2RlV2hUaGVuRHVjawACAAhmbEhlYWx0aAAAAAtmbFRpbWVzdGFtcAAFAAdmbEJvbnVzAAYAC2ZsUHJvZHNVc2VkAAcBB25mdE5hbWUCB2xhbmROdW0IbGFuZFNpemUJAKwCAgkArAICBQpMQU5EUFJFRklYBQdsYW5kTnVtBQhsYW5kU2l6ZQETZGlzdHJpYnV0ZUJ5V2VpZ2h0cwIFdG90YWwHd2VpZ2h0cwQDc3VtCQBkAgkAZAIJAGQCCQBkAgkAZAIJAJEDAgUHd2VpZ2h0cwAACQCRAwIFB3dlaWdodHMAAQkAkQMCBQd3ZWlnaHRzAAIJAJEDAgUHd2VpZ2h0cwADCQCRAwIFB3dlaWdodHMABAkAkQMCBQd3ZWlnaHRzAAUDCQBnAgAABQNzdW0JAAIBAhBaZXJvIHdlaWdodHMgc3VtBAVub3JtNgkAawMFBXRvdGFsBQVNVUxUNgUDc3VtCgEKbm9ybWFsaXplcgIDYWNjBGVsZW0JAM0IAgUDYWNjCQBrAwUEZWxlbQUFbm9ybTYFBU1VTFQ2CgACJGwFB3dlaWdodHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCm5vcm1hbGl6ZXICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYBEmdldE5lZWRlZE1hdGVyaWFscwEFdG90YWwEBXByb3BzCQC1CQIJAQV2YWx1ZQEJAKIIAQkBEWtleVJlc1Byb3BvcnRpb25zAAIBXwMJAQIhPQIJAJADAQUFcHJvcHMFBk5VTVJFUwkAAgECFldyb25nIHByb3BvcnRpb25zIGRhdGEEAXIJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBXByb3BzAAAJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBXByb3BzAAEJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBXByb3BzAAIJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBXByb3BzAAMJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBXByb3BzAAQJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBXByb3BzAAUFA25pbAkBE2Rpc3RyaWJ1dGVCeVdlaWdodHMCBQV0b3RhbAUBcgERc3VidHJhY3RNYXRlcmlhbHMDDHNob3VsZFVzZU1hdANoYXMJ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JGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcBCGFkZFByb2RCBwZpZHhDbnQFcExpc3QKaXNQb3NpdGl2ZQdzZWdtZW50B21haW5BdXgEc2xvdAlkdWNrU3RhdHMEBXBhcnRzCQC1CQIFBmlkeENudAIBOgMJAQIhPQIJAJADAQUFcGFydHMAAgkAAgECKEluY29ycmVjdCBmb3JtYXQsIHNob3VsZCBiZSBpbmRleDphbW91bnQECnByb2R1Y3RJZHgJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwYXJ0cwAABAVjb3VudAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBXBhcnRzAAEDAwkAZgIAAAUKcHJvZHVjdElkeAYJAGcCBQpwcm9kdWN0SWR4CQCQAwEFEHByb2R1Y3Rpb25NYXRyaXgJAAIBAhNVbmtub3duIHByb2R1Y3QgaWR4AwkAZgIAAAUFY291bnQJAAIBAhdDb3VudCBjYW4ndCBiZSBuZWdhdGl2ZQMJAAACBQVjb3VudAAACQCUCgIFBXBMaXN0BwQEaGVhZAkAyQECBQVwTGlzdAkAaAIACAUKcHJvZHVjdElkeAQEY3VycgkAsQkBCQDJAQIJAMoBAgUFcExpc3QJAGgCAAgFCnByb2R1Y3RJZHgACAQEdGFpbAkAygECBQVwTGlzdAkAaAIACAkAZAIFCnByb2R1Y3RJZHgAAQQGcmVjaXBlCQC1CQIJAJEDAgUQcHJvZHVjdGlvbk1hdHJpeAUKcHJvZHVjdElkeAIBXwMDCQEBIQEFCmlzUG9zaXRpdmUJAGYCBQVjb3VudAUEY3VycgcJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIJWW91IGhhdmUgCQCkAwEFBGN1cnICBCBvZiAJAJEDAgUJcHJvZFR5cGVzBQpwcm9kdWN0SWR4AhMsIGJ1dCB0cmllZCB0byB1c2UgCQCkAwEFBWNvdW50BAlpc0JpZ0l0ZW0DAwkBASEBBQppc1Bvc2l0aXZlCQEVY2hlY2tTdGF0UmVxdWlyZW1lbnRzAgUJZHVja1N0YXRzCQC1CQIJAJEDAgUGcmVjaXBlBRBySWR4UmVxdWlyZW1lbnRzAgEsBwQGY29tcGF0CQCRAwIFBnJlY2lwZQUJcklkeFNsb3RzAwkAAAIFBmNvbXBhdAIACQACAQIXSXRlbSBjYW5ub3QgYmUgZXF1aXBwZWQEAWMJAQ1wYXJzZUludFZhbHVlAQUGY29tcGF0BARjU2VnCQBpAgUBYwBkAwkBAiE9AgUHc2VnbWVudAUEY1NlZwkAAgECFFNlZ21lbnQgaW5jb21wYXRpYmxlBAhjTWFpbkF1eAkAaQIJAGoCBQFjAGQACgMJAQIhPQIFB21haW5BdXgFCGNNYWluQXV4CQACAQIRU2xvdCBpbmNvbXBhdGlibGUECWNOdW1TbG90cwkAagIFAWMACgMDCQECIT0CBQRzbG90AAAJAGYCBQljTnVtU2xvdHMAAQcJAAIBAh5CaWcgaXRlbXMgc2hvdWxkIG9jY3VweSBzbG90IDAJAGYCBQljTnVtU2xvdHMAAQcJAJQKAgkAywECCQDLAQIFBGhlYWQJAJoDAQkAZAIFBGN1cnIDBQppc1Bvc2l0aXZlBQVjb3VudAkBAS0BBQVjb3VudAUEdGFpbAUJaXNCaWdJdGVtAQtzbG90c0dyb3VwQgYBZwRicEluCmlzUG9zaXRpdmUHc2VnbWVudAdtYWluQXV4BHJlcXMDCQECIT0CBQFnAgAEBXNsb3RzCQC1CQIFAWcCASwDCQBmAgkAkAMBBQVzbG90cwUITUFYU0xPVFMJAAIBAhJXcm9uZyBzbG90cyBmb3JtYXQEAnMwCQCRAwIFBXNsb3RzAAAEAnMxAwkAZgIJAJADAQUFc2xvdHMAAQkAkQMCBQVzbG90cwABAgADAwkAAAIFAnMwAgAJAAACBQJzMQIABwUEYnBJbgQFdG1wUzADCQECIT0CBQJzMAIACQEIYWRkUHJvZEIHBQJzMAUEYnBJbgUKaXNQb3NpdGl2ZQUHc2VnbWVudAUHbWFpbkF1eAAABQRyZXFzCQCUCgIFBGJwSW4HAwkBAiE9AgUCczECAAMIBQV0bXBTMAJfMgkAAgECHkJpZyBpdGVtIGFscmVhZHkgb2NjdXBpZXMgc2xvdAgJAQhhZGRQcm9kQgcFAnMxCAUFdG1wUzACXzEFCmlzUG9zaXRpdmUFB3NlZ21lbnQFB21haW5BdXgAAQUEcmVxcwJfMQgFBXRtcFMwAl8xBQRicEluAQZkcmVzc0IEB3NlZ0xpc3QGcEJ5dGVzCmlzUG9zaXRpdmUEcmVxcwoBB3NlZ21lbnQCA2FjYwNzZWcEAWoIBQNhY2MCXzEEB21haW5BdXgJALUJAgUDc2VnAgE7AwkBAiE9AgkAkAMBBQdtYWluQXV4BQpOVU1NQUlOQVVYCQACAQIUV3Jvbmcgc2VnbWVudCBmb3JtYXQEAW0JAJEDAgUHbWFpbkF1eAAABAFhCQCRAwIFB21haW5BdXgAAQMDCQAAAgUBbQIACQAAAgUBYQIABwkAlAoCCQBkAgUBagABCAUDYWNjAl8yBAR0bXBNCQELc2xvdHNHcm91cEIGBQFtCAUDYWNjAl8yBQppc1Bvc2l0aXZlBQFqAAAFBHJlcXMJAJQKAgkAZAIFAWoAAQkBC3Nsb3RzR3JvdXBCBgUBYQUEdG1wTQUKaXNQb3NpdGl2ZQUBagABBQRyZXFzCAoAAiRsBQdzZWdMaXN0CgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCAAAFBnBCeXRlcwoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEHc2VnbWVudAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgJfMgEZdXBkYXRlUHJvcG9ydGlvbnNJbnRlcm5hbAQIcHJvcExpc3QNdGVycmFpbkNvdW50cw1sYW5kU2l6ZUluZGV4BHNpZ24DCQECIT0CCQCQAwEFCHByb3BMaXN0BQZOVU1SRVMJAAIBAhZXcm9uZyBwcm9wb3J0aW9ucyBkYXRhCgEHdXBkYXRlcgIDYWNjAWkEBnJlc3VsdAkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQhwcm9wTGlzdAUBaQkAaAIJAGgCBQRzaWduCQCRAwIFDXRlcnJhaW5Db3VudHMFAWkFDWxhbmRTaXplSW5kZXgDCQBmAgAABQZyZXN1bHQJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICFlBhbmljISBQaWVjZXMgb2YgdHlwZT0JAKQDAQUBaQIHLCBzaWduPQkApAMBBQRzaWduAhQsICB0ZXJyYWluQ291bnRzW2ldPQkApAMBCQCRAwIFDXRlcnJhaW5Db3VudHMFAWkCECwgbGFuZFNpemVJbmRleD0JAKQDAQUNbGFuZFNpemVJbmRleAkAzQgCBQNhY2MJAKQDAQUGcmVzdWx0BAFyCgACJGwJAMwIAgAACQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUFA25pbAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEHdXBkYXRlcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgkAuQkCBQFyAgFfARF1cGRhdGVQcm9wb3J0aW9ucwMNdGVycmFpbkNvdW50cw1sYW5kU2l6ZUluZGV4BHNpZ24ECHByb3BMaXN0CQC1CQIJAQt2YWx1ZU9yRWxzZQIJAKIIAQkBEWtleVJlc1Byb3BvcnRpb25zAAILMF8wXzBfMF8wXzACAV8JARl1cGRhdGVQcm9wb3J0aW9uc0ludGVybmFsBAUIcHJvcExpc3QFDXRlcnJhaW5Db3VudHMFDWxhbmRTaXplSW5kZXgFBHNpZ24BDWNvdW50VGVycmFpbnMBCHRlcnJhaW5zCQDMCAIJAGUCCQCQAwEJALUJAgUIdGVycmFpbnMCAUEAAQkAzAgCCQBlAgkAkAMBCQC1CQIFCHRlcnJhaW5zAgFCAAEJAMwIAgkAZQIJAJADAQkAtQkCBQh0ZXJyYWlucwIBQwABCQDMCAIJAGUCCQCQAwEJALUJAgUIdGVycmFpbnMCAUQAAQkAzAgCCQBlAgkAkAMBCQC1CQIFCHRlcnJhaW5zAgFFAAEJAMwIAgkAZQIJAJADAQkAtQkCBQh0ZXJyYWlucwIBRgABBQNu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BQh3aElkeFJlcwIBXwUGTlVNUkVTCQCRAwIFAndoBQh3aElkeFJlcwILMF8wXzBfMF8wXzAJAMwIAgMJAAACCQCQAwEJALUJAgkAkQMCBQJ3aAUId2hJZHhNYXQCAV8FBk5VTVJFUwkAkQMCBQJ3aAUId2hJZHhNYXQCCzBfMF8wXzBfMF8wCQDMCAIJAJEDAgUCd2gFCXdoSWR4UHJvZAkAzAgCBQZ3aExvZnQFA25pbAEVZ2V0V2FyZWhvdXNlU3BhY2VMZWZ0AQljdXJyZW50V2gEC29jY3VwaWVkVm9sCQEXZ2V0V2FyZWhvdXNlT2NjdXBpZWRWb2wBBQljdXJyZW50V2gED2N1cnJXaExvY2tlZFZvbAkBDXBhcnNlSW50VmFsdWUBCQCRAwIJALUJAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4TE9GVAIBXwUJdm9sTG9ja2VkCQBlAgkAZQIJARdnZXRXYXJlaG91c2VUb3RhbFZvbHVtZQEJAJEDAgUJY3VycmVudFdoBQt3aElkeExldmVscwULb2NjdXBpZWRWb2wFD2N1cnJXaExvY2tlZFZvbAEIdG9Wb2x1bWUCBmFtb3VudAdwa2dTaXplBARwa2dzAwkAZwIFBmFtb3VudAAACQBpAgkAZQIJAGQCBQZhbW91bnQFB3BrZ1NpemUAAQUHcGtnU2l6ZQkBAS0BCQBpAgkAZQIJAGQCCQEBLQEFBmFtb3VudAUHcGtnU2l6ZQABBQdwa2dTaXplCQBoAgUEcGtncwUFTVVMVDgBCW1vdmVTdHVmZgMKY2FyZ29QYXJ0cwljdXJyZW50V2gLY3VycmVudFBhY2sDCQECIT0CCQCQAwEFCmNhcmdvUGFydHMAAwkAAgECNGNhcmdvTGlzdFN0ciBzaG91bGQgY29udGFpbiBleGFjdGx5IDIgJzonIHNlcGFyYXRvcnMECHJlc1BhcnRzCQC1CQIJAJEDAgUKY2FyZ29QYXJ0cwAAAgFfBAhtYXRQYXJ0cwkAtQkCCQCRAwIFCmNhcmdvUGFydHMAAQIBXwQJcHJvZFBhcnRzAwkAAAIJAJEDAgUKY2FyZ29QYXJ0cwACAgAFA25pbAkAtQkCCQCRAwIFCmNhcmdvUGFydHMAAgIBXwMJAQIhPQIJAJADAQUIcmVzUGFydHMFBk5VTVJFUwkAAgECIEFsbCA2IHJlc291cmNlcyBzaG91bGQgYmUgcGFzc2VkAwkBAiE9AgkAkAMBBQhtYXRQYXJ0cwUGTlVNUkVTCQACAQIgQWxsIDYgbWF0ZXJpYWxzIHNob3VsZCBiZSBwYXNzZWQEC3doU3BhY2VMZWZ0CQEVZ2V0V2FyZWhvdXNlU3BhY2VMZWZ0AQUJY3VycmVudFdoBAljdXJyV2hSZXMJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4UmVzAgFfBAljdXJyV2hNYXQJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4TWF0AgFfBApjdXJyV2hQcm9kAwkAAAIJAJEDAgUJY3VycmVudFdoBQl3aElkeFByb2QCAAUDbmlsCQC1CQIJAJEDAgUJY3VycmVudFdoBQl3aElkeFByb2QCAV8EDmN1cnJlbnRQYWNrUmVzCQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzAgFfBA5jdXJyZW50UGFja01hdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAIBXwQPY3VycmVudFBhY2tQcm9kAwkAAAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAIABQNuaWwJALUJAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kAgFfCgEDbXZSAgNhY2MEaXRlbQQBaQgFA2FjYwJfMQQCYW0JAQ1wYXJzZUludFZhbHVlAQUEaXRlbQQDd2hyCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUJY3VycldoUmVzBQFpBANicHIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ5jdXJyZW50UGFja1JlcwUBaQMJAAACBQJhbQAACQCWCgQJAGQCBQFpAAEJAM0IAggFA2FjYwJfMgkAkQMCBQljdXJyV2hSZXMFAWkJAM0IAggFA2FjYwJfMwkAkQMCBQ5jdXJyZW50UGFja1JlcwUBaQgFA2FjYwJfNAMJAGYCBQJhbQAAAwkAZgIFAmFtBQNicHIJAAIBCQCsAgIJAKwCAgkArAICCQCsAgICEEF0dGVtcHQgdG8gdGFrZSAFBGl0ZW0CGSBmcm9tIGJhY2twYWNrLCBidXQgb25seSAJAKQDAQUDYnByAgogYXZhaWxhYmxlCQCW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bQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQESa2V5TmV4dEZyZWVMYW5kTnVtAAkAZAIFD1BSRVNBTEVOVU1MQU5EUwABBAdsYW5kTnVtCQCkAwEFB2ZyZWVOdW0EDGNvbnRpbmVudElkeAkAoAMBCQC7AgIFBmJpZ051bQUFRklWRVgECHRlcnJhaW5zCQELZ2VuVGVycmFpbnMCBQZiaWdOdW0FDGNvbnRpbmVudElkeAQJY29udGluZW50CQCRAwIFCmNvbnRpbmVudHMFDGNvbnRpbmVudElkeAQFaXNzdWUJAMIIBQkBB25mdE5hbWUCBQdsYW5kTnVtAgFTCQC5CQIJAMwIAgUHbGFuZE51bQkAzAgCAgFTCQDMCAIFCHRlcnJhaW5zCQDMCAIFCWNvbnRpbmVudAUDbmlsAgFfAAEAAAcEB2Fzc2V0SWQJALgIAQUFaXNzdWUEAmlkCQDYBAEFB2Fzc2V0SWQJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBEmtleU5leHRGcmVlTGFuZE51bQAJAGQCBQdmcmVlTnVtAAEJAMwIAgUFaXNzdWUJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEGtleUxhbmRUb0Fzc2V0SWQBBQdsYW5kTnVtBQJpZAkAzAgCCQELU3RyaW5nRW50cnkCCQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQUCaWQFCHVzZXJBZGRyCQDMCAIJAQtTdHJpbmdFbnRyeQIJARFrZXlMYW5kTnVtVG9Pd25lcgEFB2xhbmROdW0FCHVzZXJBZGRyCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEFAmlkAAAJAMwIAgkBDEludGVnZXJFbnRyeQIJAR5rZXlJbmZyYUxldmVsQnlBc3NldElkQW5kT3duZXICBQJpZAUIdXNlckFkZHIAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQZjYWxsZXIAAQUHYXNzZXRJZAUDbmlsCQCUCgIFAmlkBQljb250aW5lbnQBDGZsaWdodENvbW1vbgMIdXNlckFkZHIHbWVzc2FnZQNzaWcDCQEBIQEJAMQTAwUHbWVzc2FnZQUDc2lnBQNwdWIJAAIBAhhzaWduYXR1cmUgZG9lcyBub3QgbWF0Y2gEBXBhcnRzCQC1CQIJALAJAQUHbWVzc2FnZQIBOwQJZmxpZ2h0TG9nCQC1CQIJAJEDAgUFcGFydHMAAAIBfAQCaHAJALUJAgkAkQMCBQlmbGlnaHRMb2cFCGZsSGVhbHRoAgFfBAVjdXJIUAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmhwAAAEBW5ld0hQCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCaHAAAQQLbmV3TG9jVHhWZXIJALUJAgkAkQMCBQVwYXJ0cwABAgE6BAtuZXdMb2NhdGlvbgkAkQMCBQtuZXdMb2NUeFZlcgAABAR0aW1lCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUJZmxpZ2h0TG9nBQtmbFRpbWVzdGFtcAMDCQBmAgUEdGltZQkAZAIIBQlsYXN0QmxvY2sJdGltZXN0YW1wBRFGSVZFTUlOVVRFU01JTExJUwYJAGYCCQBlAggFCWxhc3RCbG9jawl0aW1lc3RhbXAFEUZJVkVNSU5VVEVTTUlMTElTBQR0aW1lCQACAQkArAICCQCsAgIJAKwCAgIcc2lnbmF0dXJlIG91dGRhdGVkOiBsb2dUaW1lPQkApAMBBQR0aW1lAgksIGJjVGltZT0JAKQDAQgFCWxhc3RCbG9jawl0aW1lc3RhbXAECXR4RnJvbU1zZwkAkQMCBQtuZXdMb2NUeFZlcgABBAZsYXN0VHgJAQt2YWx1ZU9yRWxzZQIJAKIIAQkBEWtleUxhc3RUeElkQnlVc2VyAQUIdXNlckFkZHICAAMJAQIhPQIFBmxhc3RUeAUJdHhGcm9tTXNnCQACAQkArAICCQCsAgIJAKwCAgIeVHggaWRzIGRvbid0IG1hdGNoISBJbiBzdGF0ZTogBQZsYXN0VHgCCiwgaW4gbXNnOiAFCXR4RnJvbU1zZwQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQh1c2VyQWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQJa2V5SGVhbHRoCQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkBAVtYXhIUAkBCW1heEhlYWx0aAEJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBDGtleUR1Y2tMZXZlbAEFC2R1Y2tBc3NldElkAAAEDG9sZEZyb21TdGF0ZQkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlrZXlIZWFsdGgFBW1heEhQAwkBAiE9AgUMb2xkRnJvbVN0YXRlBQVjdXJIUAkAAgEJAKwCAgkArAICCQCsAgICCm9sZEhlYWx0aD0JAKQDAQUMb2xkRnJvbVN0YXRlAi8gZnJvbSBzdGF0ZSBkb2VzIG5vdCBtYXRjaCBvbmUgZnJvbSBmbGlnaHQgbG9nPQkApAMBBQVjdXJIUAMJAGcCAAAFBWN1ckhQCQACAQIeWW91IGNhbid0IGZseSB3aXRoIHplcm8gaGVhbHRoBAVib251cwMJAGYCCQCQAwEFCWZsaWdodExvZwUHZmxCb251cwkAkQMCBQlmbGlnaHRMb2cFB2ZsQm9udXMCAAQIcHJvZFVzZWQDCQBmAgkAkAMBBQlmbGlnaHRMb2cFC2ZsUHJvZHNVc2VkCQCRAwIFCWZsaWdodExvZwULZmxQcm9kc1VzZWQCAAQKc2VudEFtb3VudAMDCQBmAgUFbmV3SFAAAAkAAAIFBWJvbnVzAgEkBwkBBWFzSW50AQkA/AcEBQxyZXN0Q29udHJhY3QCDXNlbmRVc2R0UHJpemUJAMwIAgUIdXNlckFkZHIFA25pbAUDbmlsAAAJAJcKBQUFbmV3SFAFC2R1Y2tBc3NldElkBQpzZW50QW1vdW50BQtuZXdMb2NhdGlvbgUIcHJvZFVzZWQBEGV4cGVkaXRpb25Db21tb24EBmNhbGxlcgR0eElkB21lc3NhZ2UDc2lnBAh1c2VyQWRkcgkApQgBBQZjYWxsZXIEAWYJAQxmbGlnaHRDb21tb24DBQh1c2VyQWRkcgUHbWVzc2FnZQUDc2lnBAlrZXlIZWFsdGgJAQ1rZXlEdWNrSGVhbHRoAQgFAWYCXzIEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBCAUBZgJfMgQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BAVtTGlzdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAIBXwQGbmV3TWF0CQC5CQIJARFzdWJ0cmFjdE1hdGVyaWFscwMGBQVtTGlzdAUMRVhQTUFURVJJQUxTAgFfBAduZXdQcm9kCQEQc3VidHJhY3RQcm9kdWN0cwIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAgFAWYCXzUDCQBnAgAACAUBZgJfMQkAlQoDCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlrZXlIZWFsdGgAAAkAzAgCCQELU3RyaW5nRW50cnkCBQVicEtleQkAuQkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQJAMwIAgUHbmV3UHJvZAUDbmlsAgE6BQNuaWwCAAAABAFlCQESZXhwZWRpdGlvbkludGVybmFsAgUGY2FsbGVyBQR0eElkBAJpZAgIBQFlAl8yAl8xCQCVCgMJAM0IAgkAzQgCCQDNCAIIBQFlAl8xCQELU3RyaW5nRW50cnkCCQEPa2V5RHVja0xvY2F0aW9uAQgFAWYCXzIJALkJAgkAzAgCCAgFAWUCXzICXzIJAMwIAgIBTAkAzAgCBQJpZAUDbmlsAgFfCQEMSW50ZWdlckVudHJ5AgUJa2V5SGVhbHRoCAUBZgJfMQkBC1N0cmluZ0VudHJ5AgUFYnBLZXkJALkJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzCQDMCAIFBm5ld01hdAkAzAgCBQduZXdQcm9kBQNuaWwCAToFAmlkCAUBZgJfMwEMYXBwbHlCb251c2VzAgtsYW5kQXNzZXRJZAZwaWVjZXMECmluZnJhTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAAABAlhcnRQaWVjZXMJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBIGtleUxhbmRBcnRTdGF0dXNCeVR5cGVBbmRBc3NldElkAgUKQVJUUFJFU0FMRQULbGFuZEFzc2V0SWQAAAQEYWRkNgkAaQIFCmluZnJhTGV2ZWwABgQEYWRkNwkAaQIFCmluZnJhTGV2ZWwABwkAZAIJAGQCBQ9EQUlMWVJFU0JZUElFQ0UJAGsDBQ9EQUlMWVJFU0JZUElFQ0UJAGQCCQBkAgUKaW5mcmFMZXZlbAUEYWRkNgkAaAIAAgUEYWRkNwAFCQBrAwUPREFJTFlSRVNCWVBJRUNFBQlhcnRQaWVjZXMJAGgCBQZwaWVjZXMABQEUY2hlY2tDbGFpbUNvbmRpdGlvbnMDBGFkZHIJY2xhaW1Nb2RlDWxhbmRBc3NldElkSW4EDSR0MDI4OTUyMjk0OTEDCQAAAgUJY2xhaW1Nb2RlBQtjbGFpbU1vZGVXaAkAlAoCBQ1sYW5kQXNzZXRJZEluCQELdmFsdWVPckVsc2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFBGFkZHICAAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkBAtjdXJMb2NhdGlvbgkBC3ZhbHVlT3JFbHNlAgkAoggBCQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQFD0RFRkFVTFRMT0NBVElPTgQDbG9jCQC1CQIJAQV2YWx1ZQEFC2N1ckxvY2F0aW9uAgFfAwkBAiE9AgkAkQMCBQNsb2MFCmxvY0lkeFR5cGUCAUwJAAIBCQCsAgIJAKwCAgIWRHVjayBsb2NhdGlvbiB0eXBlIGlzIAkAkQMCBQNsb2MFCmxvY0lkeFR5cGUCESwgYnV0IHNob3VsZCBiZSBMCQCUCgIJAJEDAgUDbG9jBQhsb2NJZHhJZAULZHVja0Fzc2V0SWQEC2xhbmRBc3NldElkCAUNJHQwMjg5NTIyOTQ5MQJfMQQGZHVja0lkCAUNJHQwMjg5NTIyOTQ5MQJfMgQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQtsYW5kQXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAQJc2F2ZWRUaW1lCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ8IAQUHdGltZUtleQkArAICCQCsAgICBUxhbmQgCAUFYXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQEBW93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFC2xhbmRBc3NldElkCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDCBpcyBvcnBoYW5lZAMJAQIhPQIFBW93bmVyBQRhZGRyCQACAQkArAICBQpMQU5EUFJFRklYAg0gaXMgbm90IHlvdXJzBAFkCQC1CQIIBQVhc3NldAtkZXNjcmlwdGlvbgIBXwkAlgoEBQZkdWNrSWQFC2xhbmRBc3NldElkBQFkBQlzYXZlZFRpbWUBEGNsYWltUmVzSW50ZXJuYWwEBGFkZHIGYW1vdW50CWNsYWltTW9kZQ1sYW5kQXNzZXRJZEluAwkAZgIAAAUGYW1vdW50CQACAQIPTmVnYXRpdmUgYW1vdW50BAFjCQEUY2hlY2tDbGFpbUNvbmRpdGlvbnMDBQRhZGRyBQljbGFpbU1vZGUFDWxhbmRBc3NldElkSW4ECGxhbmRTaXplCQCRAwIIBQFjAl8zBQtyZWNMYW5kU2l6ZQQNdGVycmFpbkNvdW50cwkBDWNvdW50VGVycmFpbnMBCQCRAwIIBQFjAl8zBQtyZWNUZXJyYWlucwQJZGVsdGFUaW1lCQBlAggFCWxhc3RCbG9jawl0aW1lc3RhbXAIBQFjAl80AwkAZgIAAAUJZGVsdGFUaW1lCQACAQkArAICCQCsAgIJAKwCAgImU2F2ZWQgdGltZXN0YW1wIGlzIGluIGZ1dHVyZSwgc2F2ZWQgPSAJAKQDAQgFAWMCXzQCDCwgY3VycmVudCA9IAkApAMBCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQGcGllY2VzCQEPbnVtUGllY2VzQnlTaXplAQUIbGFuZFNpemUEFmRhaWx5UHJvZHVjdGlvbkJ5UGllY2UJAQxhcHBseUJvbnVzZXMCCAUBYwJfMgUGcGllY2VzBAhhdmFpbFJlcwkAawMFCWRlbHRhVGltZQkAaAIFFmRhaWx5UHJvZHVjdGlvbkJ5UGllY2UFBnBpZWNlcwUJREFZTUlMTElTAwkAZgIFBmFtb3VudAUIYXZhaWxSZXMJAAIBCQCsAgIJAKwCAgkArAICAiJOb3QgZW5vdWdoIHJlc291cmNlcywgYXZhaWxhYmxlID0gCQCkAwEFCGF2YWlsUmVzAg4sIHJlcXVlc3RlZCA9IAkApAMBBQZhbW91bnQEDG5ld0RlbHRhVGltZQkAawMJAGUCBQhhdmFpbFJlcwUGYW1vdW50BQlEQVlNSUxMSVMJAGgCBRZkYWlseVByb2R1Y3Rpb25CeVBpZWNlBQZwaWVjZXMEDG5ld1RpbWVzdGFtcAkAZQIIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQxuZXdEZWx0YVRpbWUECWxhbmRJbmRleAkAaQIFBnBpZWNlcwUFU1NJWkUECnJlc1RvQ2xhaW0JAQl2aXJ0Q2xhaW0EBQ10ZXJyYWluQ291bnRzCQBlAgUJZGVsdGFUaW1lBQxuZXdEZWx0YVRpbWUFCWxhbmRJbmRleAUWZGFpbHlQcm9kdWN0aW9uQnlQaWVjZQQFd2hLZXkJARJrZXlXYXJlaG91c2VCeUxhbmQBCAUBYwJfMgQKaW5mcmFMZXZlbAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEIBQFjAl8yAAAECWN1cnJlbnRXaAkBDGdldFdhcmVob3VzZQMFBXdoS2V5BQlsYW5kSW5kZXgFCmluZnJhTGV2ZWwEBGxvZnQJALUJAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4TE9GVAIBXwQLd2hTcGFjZUxlZnQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQd2b2xGcmVlAwMJAAACBQljbGFpbU1vZGUFC2NsYWltTW9kZVdoCQBmAgUGYW1vdW50BQt3aFNwYWNlTGVmdAcJAAIBCQCsAgIJAKwCAgIFT25seSAJAKQDAQULd2hTcGFjZUxlZnQCGCBzcGFjZSBsZWZ0IGluIHdhcmVob3VzZQQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEIBQFjAl8xBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkEDmN1cnJlbnRQYWNrUmVzCQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzAgFfBAxjdXJyZW50V2hSZXMJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4UmVzAgFfBA0kdDAzMTg2NTMyNzM2AwkAAAIFCWNsYWltTW9kZQULY2xhaW1Nb2RlV2gJAJYKBAkBBmFkZFJlcwUFDGN1cnJlbnRXaFJlcwUNdGVycmFpbkNvdW50cwkAZQIFCWRlbHRhVGltZQUMbmV3RGVsdGFUaW1lBQlsYW5kSW5kZXgFFmRhaWx5UHJvZHVjdGlvbkJ5UGllY2UJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFC3ZvbE9jY3VwaWVkCAUKcmVzVG9DbGFpbQJfMgkAZQIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQd2b2xGcmVlCAUKcmVzVG9DbGFpbQJfMgMJAAACBQljbGFpbU1vZGUFDWNsYWltTW9kZUR1Y2sJAJYKBAkAkQMCBQljdXJyZW50V2gFCHdoSWR4UmVzCQEGYWRkUmVzBQUOY3VycmVudFBhY2tSZXMFDXRlcnJhaW5Db3VudHMJAGUCBQlkZWx0YVRpbWUFDG5ld0RlbHRhVGltZQUJbGFuZEluZGV4BRZkYWlseVByb2R1Y3Rpb25CeVBpZWNlCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAULdm9sT2NjdXBpZWQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQd2b2xGcmVlBAVkaXN0cgkBDWRpc3RyaWJ1dGVSZXMEBQxjdXJyZW50V2hSZXMFDmN1cnJlbnRQYWNrUmVzBQpyZXNUb0NsYWltBQt3aFNwYWNlTGVmdAQEd2hBbQkAlwMBCQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQd2b2xGcmVlCQDMCAIIBQpyZXNUb0NsYWltAl8yBQNuaWwJAJYKBAgFBWRpc3RyAl8xCAUFZGlzdHICXzIJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAULdm9sT2NjdXBpZWQFBHdoQW0JAGUCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAUHdm9sRnJlZQUEd2hBbQQFd2hSZXMIBQ0kdDAzMTg2NTMyNzM2Al8xBAVicFJlcwgFDSR0MDMxODY1MzI3MzYCXzIEBWxvZnRPCAUNJHQwMzE4NjUzMjczNgJfMwQFbG9mdEYIBQ0kdDAzMTg2NTMyNzM2Al80CQCXCgUJAMwIAgkBDEludGVnZXJFbnRyeQIJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQgFAWMCXzIFDG5ld1RpbWVzdGFtcAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDBQpMQU5EUFJFRklYCAUBYwJfMgUEYWRkcgUMbmV3VGltZXN0YW1wBQNuaWwFBWJwS2V5CQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgUFYnBSZXMJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kBQNuaWwFBXdoS2V5CQDMCAIJAJEDAgUJY3VycmVudFdoBQt3aElkeExldmVscwkAzAgCBQV3aFJlcwkAzAgCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhNYXQJAMwIAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4UHJvZAkAzAgCCQC5CQIJAMwIAgkAkQMCBQRsb2Z0BQl2b2xMb2NrZWQJAMwIAgkApAMBBQVsb2Z0TwkAzAgCCQCkAwEFBWxvZnRGCQDMCAIJAJEDAgUEbG9mdAUIdm9sVG90YWwFA25pbAIBXwUDbmlsAQhjbGFpbUFsbAQEYWRkcgtsYW5kQXNzZXRJZAZwaWVjZXMJY2xhaW1Nb2RlBAd0aW1lS2V5CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkBAlzYXZlZFRpbWUJAQV2YWx1ZQEJAJ8IAQUHdGltZUtleQQIYXZhaWxSZXMJAGgCCQBrAwkAZQIIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQlzYXZlZFRpbWUJAQxhcHBseUJvbnVzZXMCBQtsYW5kQXNzZXRJZAUGcGllY2VzBQlEQVlNSUxMSVMFBnBpZWNlcwkBEGNsYWltUmVzSW50ZXJuYWwEBQRhZGRyBQhhdmFpbFJlcwUJY2xhaW1Nb2RlBQtsYW5kQXNzZXRJZAENdXBJbmZyYUNvbW1vbgQMc2hvdWxkVXNlTWF0BmNhbGxlcg1wYXltZW50QW1vdW50C2xhbmRBc3NldElkBARhZGRyCQClCAEFBmNhbGxlcgQBYwkBFGNoZWNrQ2xhaW1Db25kaXRpb25zAwUEYWRkcgUTY2xhaW1Nb2RlV2hUaGVuRHVjawULbGFuZEFzc2V0SWQEBnBpZWNlcwkBD251bVBpZWNlc0J5U2l6ZQEJAJEDAggFAWMCXzMFC3JlY0xhbmRTaXplBAhpbmZyYUtleQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBCAUBYwJfMgQIY3VyTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUIaW5mcmFLZXkAAAMJAGcCBQhjdXJMZXZlbAADCQACAQImQ3VycmVudGx5IG1heCBpbmZyYXN0cnVjdHVyZSBsZXZlbCA9IDMECG5ld0xldmVsCQBkAgUIY3VyTGV2ZWwAAQQEY29zdAkAawMFFUluZnJhVXBncmFkZUNvc3RTVXNkdAkAaAIFBnBpZWNlcwUIbmV3TGV2ZWwFBVNTSVpFAwMJAQEhAQUMc2hvdWxkVXNlTWF0CQECIT0CBQ1wYXltZW50QW1vdW50BQRjb3N0BwkAAgEJAKwCAgIbUGF5bWVudCBhdHRhY2hlZCBzaG91bGQgYmUgCQCkAwEFBGNvc3QEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBCAUBYwJfMQQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BAVtTGlzdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAIBXwQHbWF0VXNlZAkAawMFEUluZnJhVXBncmFkZUNvc3RTCQBoAgUGcGllY2VzBQhuZXdMZXZlbAUFU1NJWkUEBm5ld01hdAkAuQkCCQERc3VidHJhY3RNYXRlcmlhbHMDBQxzaG91bGRVc2VNYXQFBW1MaXN0BQdtYXRVc2VkAgFfBAtjbGFpbVJlc3VsdAkBCGNsYWltQWxsBAUEYWRkcggFAWMCXzIFBnBpZWNlcwUTY2xhaW1Nb2RlV2hUaGVuRHVjawQGd2hEYXRhCAULY2xhaW1SZXN1bHQCXzUEBm9sZFZvbAkBF2dldFdhcmVob3VzZVRvdGFsVm9sdW1lAQkAkQMCBQZ3aERhdGEFC3doSWR4TGV2ZWxzBApuZXdWb2xEYXRhCQC5CQIJAMwIAgkAkQMCCQC1CQIJAJEDAgUGd2hEYXRhBQt3aElkeExldmVscwIBXwAACQDMCAIJAKQDAQUIbmV3TGV2ZWwFA25pbAIBXwQGbmV3Vm9sCQEXZ2V0V2FyZWhvdXNlVG90YWxWb2x1bWUBBQpuZXdWb2xEYXRhBARsb2Z0CQC1CQIJAJEDAgUGd2hEYXRhBQl3aElkeExPRlQCAV8ECm5ld0xvZnRTdHIJALkJAgkAzAgCCQCRAwIFBGxvZnQFCXZvbExvY2tlZAkAzAgCCQCRAwIFBGxvZnQFC3ZvbE9jY3VwaWVkCQDMCAIJAKQDAQkAZQIJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAUHdm9sRnJlZQUGbmV3Vm9sBQZvbGRWb2wJAMwIAgkApAMBBQZuZXdWb2wFA25pbAIBXwkAlQoDCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIFCGluZnJhS2V5BQhuZXdMZXZlbAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBHmtleUluZnJhTGV2ZWxCeUFzc2V0SWRBbmRPd25lcgIIBQFjAl8yBQRhZGRyBQhuZXdMZXZlbAkAzAgCCQELU3RyaW5nRW50cnkCBQVicEtleQkAuQkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAkQMCCAULY2xhaW1SZXN1bHQCXzMFCGJwSWR4UmVzCQDMCAIFBm5ld01hdAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QFA25pbAIBOgkAzAgCCQELU3RyaW5nRW50cnkCCAULY2xhaW1SZXN1bHQCXzQJALkJAgkAzAgCBQpuZXdWb2xEYXRhCQDMCAIJAJEDAgUGd2hEYXRhBQh3aElkeFJlcwkAzAgCCQCRAwIFBndoRGF0YQUId2hJZHhNYXQJAMwIAgkAkQMCBQZ3aERhdGEFCXdoSWR4UHJvZAkAzAgCBQpuZXdMb2Z0U3RyBQNuaWwCAToFA25pbAgFC2NsYWltUmVzdWx0Al8xBQhuZXdMZXZlbAUHbWF0VXNlZAEXdXBkYXRlRHVja1N0YXRzSW50ZXJuYWwCC2R1Y2tBc3NldElkB2RlbHRhWFADCQEBIQEFD0tTQUxMT1dYUExFVkVMUwkAlAoCBQNuaWwAAAQGbHZsS2V5CQEMa2V5RHVja0xldmVsAQULZHVja0Fzc2V0SWQEBXhwS2V5CQEJa2V5RHVja1hQAQULZHVja0Fzc2V0SWQEAnhwCQELdmFsdWVPckVsc2UCCQCaCAIFD3N0YWtpbmdDb250cmFjdAUFeHBLZXkAAAQFbmV3WFAJAGQCBQJ4cAUHZGVsdGFYUAQJbHZsUG9pbnRzCQEHbGV2ZWxVcAIJAQt2YWx1ZU9yRWxzZQIJAJoIAgUPc3Rha2luZ0NvbnRyYWN0BQZsdmxLZXkAAAUFbmV3WFAECWtleVBvaW50cwkBEWtleUR1Y2tGcmVlUG9pbnRzAQULZHVja0Fzc2V0SWQJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUGbHZsS2V5CQCRAwIFCWx2bFBvaW50cwAACQDMCAIJAQxJbnRlZ2VyRW50cnkCBQV4cEtleQUFbmV3WFAJAMwIAgkBDEludGVnZXJFbnRyeQIFCWtleVBvaW50cwkAZAIJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJa2V5UG9pbnRzAAAJAJEDAgUJbHZsUG9pbnRzAAEFA25pbAUFbmV3WFABFnVwZGF0ZUFjY1N0YXRzSW50ZXJuYWwCBGFkZHIHZGVsdGFYUAMJAQEhAQUPS1NBTExPV1hQTEVWRUxTCQCUCgIFA25pbAAABAZsdmxLZXkJAQxrZXlVc2VyTGV2ZWwBBQRhZGRyBAV4cEtleQkBCWtleVVzZXJYUAEFBGFkZHIEAnhwCQELdmFsdWVPckVsc2UCCQCaCAIFD3N0YWtpbmdDb250cmFjdAUFeHBLZXkAAAQFbmV3WFAJAGQCBQJ4cAUHZGVsdGFYUAQJbHZsUG9pbnRzCQEHbGV2ZWxVcAIJAQt2YWx1ZU9yRWxzZQIJAJoIAgUPc3Rha2luZ0NvbnRyYWN0BQZsdmxLZXkAAAUFbmV3WFAECWtleVBvaW50cwkBEWtleVVzZXJGcmVlUG9pbnRzAQUEYWRkcgkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQZsdmxLZXkJAJEDAgUJbHZsUG9pbnRzAAAJAMwIAgkBDEludGVnZXJFbnRyeQIFBXhwS2V5BQVuZXdYUAkAzAgCCQEMSW50ZWdlckVudHJ5AgUJa2V5UG9pbnRzCQBkAgkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlrZXlQb2ludHMAAAkAkQMCBQlsdmxQb2ludHMAAQUDbmlsBQVuZXdYUAESYWN0aXZhdGVPbmJvYXJkQXJ0AQRhZGRyBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFBGFkZHICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQECHJlZkJ5S2V5CQEPa2V5QWRkcmVzc1JlZkJ5AQUEYWRkcgQFcmVmQnkJAKIIAQUIcmVmQnlLZXkDCQEBIQEJAQlpc0RlZmluZWQBBQVyZWZCeQkAAgECKVlvdSBhcmUgbm90IGVsaWdpYmxlIGZvciBPTkJPQVJEIGFydGlmYWN0BAZhcnRLZXkJARxrZXlPbmJvYXJkQXJ0RHVja0FjdGl2YXRlZEJ5AQUEYWRkcgQHYXJ0RHVjawkAoggBBQZhcnRLZXkDCQEJaXNEZWZpbmVkAQUHYXJ0RHVjawkAAgEJAKwCAgIvWW91IGFscmVhZHkgdXNlZCB5b3VyIE9OQk9BUkQgYXJ0aWZhY3Qgb24gZHVjayAJAQV2YWx1ZQEFB2FydER1Y2sEEGR1Y2tBY3RpdmF0b3JLZXkJARxrZXlPbmJvYXJkQXJ0QWN0aXZhdGVkT25EdWNrAQULZHVja0Fzc2V0SWQEDWR1Y2tBY3RpdmF0b3IJAKIIAQUQZHVja0FjdGl2YXRvcktleQMJAQlpc0RlZmluZWQBBQ1kdWNrQWN0aXZhdG9yCQACAQkArAICCQCsAgIJAKwCAgIJVGhlIGR1Y2sgBQtkdWNrQXNzZXRJZAI0IGFscmVhZHkgZ290IHBvaW50cyBmcm9tIE9OQk9BUkQgYXJ0aWZhY3QgZnJvbSB1c2VyIAkBBXZhbHVlAQUNZHVja0FjdGl2YXRvcgkAzggCCQDMCAIJAQtTdHJpbmdFbnRyeQIFBmFydEtleQULZHVja0Fzc2V0SWQJAMwIAgkBC1N0cmluZ0VudHJ5AgUQZHVja0FjdGl2YXRvcktleQUEYWRkcgUDbmlsCAkBF3VwZGF0ZUR1Y2tTdGF0c0ludGVybmFsAgULZHVja0Fzc2V0SWQFCXhwT25ib2FyZAJfMQESYWN0aXZhdGVQcmVzYWxlQXJ0AgRhZGRyDWxhbmRBc3NldElkSW4EAWMJARRjaGVja0NsYWltQ29uZGl0aW9ucwMFBGFkZHIFE2NsYWltTW9kZVdoVGhlbkR1Y2sFDWxhbmRBc3NldElkSW4EC2xhbmRBc3NldElkCAUBYwJfMgQGcGllY2VzCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCCAUBYwJfMwULcmVjTGFuZFNpemUEDWFjdGl2YXRpb25LZXkJASBrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQW5kQXNzZXRJZAIFCkFSVFBSRVNBTEUFC2xhbmRBc3NldElkAwkAZgIJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUNYWN0aXZhdGlvbktleQAAAAAJAAIBAiVQcmVzYWxlIGFydGlmYWN0IGlzIGFscmVhZHkgYWN0aXZhdGVkAwkAZgIJAQ1wYXJzZUludFZhbHVlAQkAkQMCCAUBYwJfMwUKcmVjTGFuZE51bQUPUFJFU0FMRU5VTUxBTkRTCQACAQkArAICCQCsAgIJAKwCAgUKTEFORFBSRUZJWAIBIAULbGFuZEFzc2V0SWQCJSBpcyBub3QgZWxpZ2libGUgZm9yIHByZXNhbGUgYXJ0aWZhY3QEC2NsYWltUmVzdWx0CQEIY2xhaW1BbGwEBQRhZGRyBQtsYW5kQXNzZXRJZAUGcGllY2VzBRNjbGFpbU1vZGVXaFRoZW5EdWNrCQDNCAIJAM0IAgkAzQgCCQDNCAIIBQtjbGFpbVJlc3VsdAJfMQkBDEludGVnZXJFbnRyeQIFDWFjdGl2YXRpb25LZXkFBnBpZWNlcwkBDEludGVnZXJFbnRyeQIJASVrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQXNzZXRJZEFuZE93bmVyAwUKQVJUUFJFU0FMRQULbGFuZEFzc2V0SWQFBGFkZHIFBnBpZWNlcwkBC1N0cmluZ0VudHJ5AggFC2NsYWltUmVzdWx0Al8yCQC5CQIIBQtjbGFpbVJlc3VsdAJfMwIBOgkBC1N0cmluZ0VudHJ5AggFC2NsYWltUmVzdWx0Al80CQC5CQIIBQtjbGFpbVJlc3VsdAJfNQIBOgENbWVyZ2VJbnRlcm5hbAcLbmV3TGFuZFNpemUIbmV3TGV2ZWwHZm9ybXVsYQRhZGRyDGxhbmRBc3NldElkcwR0eElkB25lZWRNYXQEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAoBCmNoZWNrTWVyZ2UCA2FjYwtsYW5kQXNzZXRJZAQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQtsYW5kQXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAQJc2F2ZWRUaW1lCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ8IAQUHdGltZUtleQkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAQFb3duZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQULbGFuZEFzc2V0SWQJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwkBAiE9AgUFb3duZXIFBGFkZHIJAAIBCQCsAgIFCkxBTkRQUkVGSVgCDSBpcyBub3QgeW91cnMEAWQJALUJAggFBWFzc2V0C2Rlc2NyaXB0aW9uAgFfBAljb250aW5lbnQJAJEDAgUBZAUMcmVjQ29udGluZW50AwMJAQIhPQIIBQNhY2MCXzMCAAkBAiE9AggFA2FjYwJfMwUJY29udGluZW50BwkAAgECLkxhbmRzIHNob3VsZCBiZSBvbiB0aGUgc2FtZSBjb250aW5lbnQgdG8gbWVyZ2UECGxhbmRTaXplCQCRAwIFAWQFC3JlY0xhbmRTaXplBAdzaXplc0luCAUDYWNjAl8xBAFpCQETdmFsdWVPckVycm9yTWVzc2FnZQIJALMJAgUHc2l6ZXNJbgUIbGFuZFNpemUCJ1lvdSBoYXZlbid0IHBhc3NlZCBhbGwgdGhlIGxhbmRzIG5lZWRlZAQIc2l6ZXNPdXQJAKwCAgkArwICBQdzaXplc0luBQFpCQCwAgIFB3NpemVzSW4JAGQCBQFpAAEEBnBpZWNlcwkBD251bVBpZWNlc0J5U2l6ZQEFCGxhbmRTaXplBARhcnRzCQBkAggFA2FjYwJfMgkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEga2V5TGFuZEFydFN0YXR1c0J5VHlwZUFuZEFzc2V0SWQCBQpBUlRQUkVTQUxFBQtsYW5kQXNzZXRJZAAABAppbmZyYUxldmVsCQELdmFsdWVPckVsc2UCCQCfCAEJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQULbGFuZEFzc2V0SWQAAAQIcmVxTGV2ZWwEByRtYXRjaDAFCGxhbmRTaXplAwkAAAICAVMFByRtYXRjaDAAAwMJAAACAgFNBQckbWF0Y2gwAAQDCQAAAgIBTAUHJG1hdGNoMAAFAwkAAAICAlhMBQckbWF0Y2gwAAYJAAIBAhpPbmx5IFMsIE0sIEwsIFhMIGNhbiBtZXJnZQMJAQIhPQIFCmluZnJhTGV2ZWwFCHJlcUxldmVsCQACAQIiQWxsIGxhbmRzIHNob3VsZCBiZSBtYXhlZCB0byBtZXJnZQQHbGFuZE51bQkAkQMCBQFkBQpyZWNMYW5kTnVtBA10ZXJyYWluQ291bnRzCQENY291bnRUZXJyYWlucwEJAJEDAgUBZAULcmVjVGVycmFpbnMECWRlbHRhVGltZQkAZQIIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQlzYXZlZFRpbWUDCQBmAgAABQlkZWx0YVRpbWUJAAIBCQCsAgIJAKwCAgkArAICAiZTYXZlZCB0aW1lc3RhbXAgaXMgaW4gZnV0dXJlLCBzYXZlZCA9IAkApAMBBQlzYXZlZFRpbWUCDCwgY3VycmVudCA9IAkApAMBCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQWZGFpbHlQcm9kdWN0aW9uQnlQaWVjZQkBDGFwcGx5Qm9udXNlcwIFC2xhbmRBc3NldElkBQZwaWVjZXMECWxhbmRJbmRleAkAaQIFBnBpZWNlcwUFU1NJWkUEBWJwUmVzCQEGYWRkUmVzBQkAtQkCCAUDYWNjAl80AgFfBQ10ZXJyYWluQ291bnRzBQlkZWx0YVRpbWUFCWxhbmRJbmRleAUWZGFpbHlQcm9kdWN0aW9uQnlQaWVjZQQFcHJvcHMJARl1cGRhdGVQcm9wb3J0aW9uc0ludGVybmFsBAkAtQkCCAUDYWNjAl82AgFfBQ10ZXJyYWluQ291bnRzBQlsYW5kSW5kZXgA////////////AQQFbGFuZHMIBQNhY2MCXzcEA2lkeAkAzwgCBQVsYW5kcwULbGFuZEFzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBBQNpZHgJAAIBCQCsAgICIFlvdXIgc3Rha2VkIGxhbmRzIGRvbid0IGNvbnRhaW4gBQtsYW5kQXNzZXRJZAQJY3VzdG9tS2V5CQEaa2V5TGFuZEFzc2V0SWRUb0N1c3RvbU5hbWUBBQtsYW5kQXNzZXRJZAQKY3VzdG9tTmFtZQkBC3ZhbHVlT3JFbHNlAgkAoggBBQljdXN0b21LZXkCAAkAmgoIBQhzaXplc091dAUEYXJ0cwUJY29udGluZW50BQVicFJlcwkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCAUDYWNjAl81CQELRGVsZXRlRW50cnkBCQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkCQELRGVsZXRlRW50cnkBCQEia2V5U3Rha2VkVGltZUJ5VHlwZUFzc2V0SWRBbmRPd25lcgMFCkxBTkRQUkVGSVgFC2xhbmRBc3NldElkBQRhZGRyCQELRGVsZXRlRW50cnkBCQEQa2V5TGFuZFRvQXNzZXRJZAEFB2xhbmROdW0JAQtEZWxldGVFbnRyeQEJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQtsYW5kQXNzZXRJZAkBC0RlbGV0ZUVudHJ5AQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAkBC0RlbGV0ZUVudHJ5AQkBHmtleUluZnJhTGV2ZWxCeUFzc2V0SWRBbmRPd25lcgIFC2xhbmRBc3NldElkBQRhZGRyCQELRGVsZXRlRW50cnkBCQEga2V5TGFuZEFydFN0YXR1c0J5VHlwZUFuZEFzc2V0SWQCBQpBUlRQUkVTQUxFBQtsYW5kQXNzZXRJZAkBC0RlbGV0ZUVudHJ5AQkBJWtleUxhbmRBcnRTdGF0dXNCeVR5cGVBc3NldElkQW5kT3duZXIDBQpBUlRQUkVTQUxFBQtsYW5kQXNzZXRJZAUEYWRkcgkBC0RlbGV0ZUVudHJ5AQkBEWtleUxhbmROdW1Ub093bmVyAQUHbGFuZE51bQkBC0RlbGV0ZUVudHJ5AQkBEmtleVdhcmVob3VzZUJ5TGFuZAEFC2xhbmRBc3NldElkCQELRGVsZXRlRW50cnkBBQljdXN0b21LZXkJAQtEZWxldGVFbnRyeQEJARprZXlMYW5kQ3VzdG9tTmFtZVRvQXNzZXRJZAEFCmN1c3RvbU5hbWUJAQRCdXJuAgkA2QQBBQtsYW5kQXNzZXRJZAABBQVwcm9wcwkA0QgCBQVsYW5kcwkBBXZhbHVlAQUDaWR4CQBkAggFA2FjYwJfOAUGcGllY2VzBAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQHcHJvcFN0cgkBC3ZhbHVlT3JFbHNlAgkAoggBCQERa2V5UmVzUHJvcG9ydGlvbnMAAgswXzBfMF8wXzBfMAQIbGFuZHNLZXkJARVrZXlTdGFrZWRMYW5kc0J5T3duZXIBBQRhZGRyBAhsYW5kc1N0cgkAoggBBQhsYW5kc0tleQQHbGFuZHNJbgMJAQlpc0RlZmluZWQBBQhsYW5kc1N0cgkAvQkCCQEFdmFsdWUBBQhsYW5kc1N0cgIBXwUDbmlsBAFyCgACJGwFDGxhbmRBc3NldElkcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJoKCAUHZm9ybXVsYQAAAgAJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzBQNuaWwFB3Byb3BTdHIFB2xhbmRzSW4AAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEKY2hlY2tNZXJnZQIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNQkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUECWNvbnRpbmVudAgFAXICXzMEDGNvbnRpbmVudElkeAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDPCAIFCmNvbnRpbmVudHMFCWNvbnRpbmVudAkArAICAhNVbmtub3duIGNvbnRpbmVudDogBQljb250aW5lbnQECHRlcnJhaW5zCQELZ2VuVGVycmFpbnMCCQEDYWJzAQkAngMBBQR0eElkBQxjb250aW5lbnRJZHgEB2ZyZWVOdW0JAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBEmtleU5leHRGcmVlTGFuZE51bQAJAGQCBQ9QUkVTQUxFTlVNTEFORFMAAQQKbmV3TGFuZE51bQkApAMBBQdmcmVlTnVtBAVpc3N1ZQkAwggFCQEHbmZ0TmFtZQIFCm5ld0xhbmROdW0FC25ld0xhbmRTaXplCQC5CQIJAMwIAgUKbmV3TGFuZE51bQkAzAgCBQtuZXdMYW5kU2l6ZQkAzAgCBQh0ZXJyYWlucwkAzAgCBQljb250aW5lbnQFA25pbAIBXwABAAAHBAdhc3NldElkCQC4CAEFBWlzc3VlBA5uZXdMYW5kQXNzZXRJZAkA2AQBBQdhc3NldElkBAZuZXdNYXQJALkJAgkBEXN1YnRyYWN0TWF0ZXJpYWxzAwkAZgIFB25lZWRNYXQAAAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAIBXwUHbmVlZE1hdAIBXwQJcGllY2VzS2V5CQEWa2V5U3Rha2VkUGllY2VzQnlPd25lcgEFBGFkZHIEDHN0YWtlZFBpZWNlcwkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlwaWVjZXNLZXkAAAkAlAoCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCAUBcgJfNQMJAGYCCQCQAwEIBQFyAl83AAAJAQtTdHJpbmdFbnRyeQIFCGxhbmRzS2V5CQC7CQIIBQFyAl83AgFfCQELRGVsZXRlRW50cnkBBQhsYW5kc0tleQkBDEludGVnZXJFbnRyeQIFCXBpZWNlc0tleQMJAGYCCAUBcgJfOAUMc3Rha2VkUGllY2VzAAAJAGUCBQxzdGFrZWRQaWVjZXMIBQFyAl84CQEMSW50ZWdlckVudHJ5AgkBEmtleU5leHRGcmVlTGFuZE51bQAJAGQCBQdmcmVlTnVtAAEFBWlzc3VlCQELU3RyaW5nRW50cnkCCQEQa2V5TGFuZFRvQXNzZXRJZAEFCm5ld0xhbmROdW0FDm5ld0xhbmRBc3NldElkCQELU3RyaW5nRW50cnkCCQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQUObmV3TGFuZEFzc2V0SWQFBGFkZHIJAQtTdHJpbmdFbnRyeQIJARFrZXlMYW5kTnVtVG9Pd25lcgEFCm5ld0xhbmROdW0FBGFkZHIJAQxJbnRlZ2VyRW50cnkCCQEga2V5TGFuZEFydFN0YXR1c0J5VHlwZUFuZEFzc2V0SWQCBQpBUlRQUkVTQUxFBQ5uZXdMYW5kQXNzZXRJZAgFAXICXzIJAQxJbnRlZ2VyRW50cnkCCQEla2V5TGFuZEFydFN0YXR1c0J5VHlwZUFzc2V0SWRBbmRPd25lcgMFCkFSVFBSRVNBTEUFDm5ld0xhbmRBc3NldElkBQRhZGRyCAUBcgJfMgkBDEludGVnZXJFbnRyeQIJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQUObmV3TGFuZEFzc2V0SWQFCG5ld0xldmVsCQEMSW50ZWdlckVudHJ5AgkBHmtleUluZnJhTGV2ZWxCeUFzc2V0SWRBbmRPd25lcgIFDm5ld0xhbmRBc3NldElkBQRhZGRyBQhuZXdMZXZlbAkBC1N0cmluZ0VudHJ5AgUFYnBLZXkJALkJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIIBQFyAl80CQDMCAIFBm5ld01hdAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QFA25pbAIBOgkBC1N0cmluZ0VudHJ5AgkBEWtleVJlc1Byb3BvcnRpb25zAAgFAXICXzYJAQtTdHJpbmdFbnRyeQIJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAkAuQkCCQDMCAIFCWNvbnRpbmVudAkAzAgCAgFMCQDMCAIFDm5ld0xhbmRBc3NldElkBQNuaWwCAV8JAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEFBGFkZHIAAQUHYXNzZXRJZAUObmV3TGFuZEFzc2V0SWQBA3MybQMEYWRkcgxsYW5kQXNzZXRJZHMEdHhJZAkBDW1lcmdlSW50ZXJuYWwHAgFNAAMCBFNTU1MFBGFkZHIFDGxhbmRBc3NldElkcwUEdHhJZAAAAQNtMmwFBGFkZHIMbGFuZEFzc2V0SWRzBHR4SWQMc2hvdWxkVXNlTWF0DXBheW1lbnRBbW91bnQEBGNvc3QJAGgCBRVJbmZyYVVwZ3JhZGVDb3N0U1VzZHQABAMDCQEBIQEFDHNob3VsZFVzZU1hdAkBAiE9AgUNcGF5bWVudEFtb3VudAUEY29zdAcJAAIBCQCsAgICG1BheW1lbnQgYXR0YWNoZWQgc2hvdWxkIGJlIAkApAMBBQRjb3N0CQENbWVyZ2VJbnRlcm5hbAcCAUwABAIDU01NBQRhZGRyBQxsYW5kQXNzZXRJZHMFBHR4SWQJAGgCBRFJbmZyYVVwZ3JhZGVDb3N0UwAEAQRsMnhsBQRhZGRyDGxhbmRBc3NldElkcwR0eElkDHNob3VsZFVzZU1hdA1wYXltZW50QW1vdW50BARjb3N0CQBoAgUVSW5mcmFVcGdyYWRlQ29zdFNVc2R0AC8DAwkBASEBBQxzaG91bGRVc2VNYXQJAQIhPQIFDXBheW1lbnRBbW91bnQFBGNvc3QHCQACAQkArAICAhtQYXltZW50IGF0dGFjaGVkIHNob3VsZCBiZSAJAKQDAQUEY29zdAkBDW1lcmdlSW50ZXJuYWwHAgJYTAAFAgVTU1NNTAUEYWRkcgUMbGFuZEFzc2V0SWRzBQR0eElkCQBoAgURSW5mcmFVcGdyYWRlQ29zdFMALwEGeGwyeHhsBQRhZGRyDGxhbmRBc3NldElkcwR0eElkDHNob3VsZFVzZU1hdA1wYXltZW50QW1vdW50BARjb3N0CQBoAgUVSW5mcmFVcGdyYWRlQ29zdFNVc2R0ADYDAwkBASEBBQxzaG91bGRVc2VNYXQJAQIhPQIFDXBheW1lbnRBbW91bnQFBGNvc3QHCQACAQkArAICAhtQYXltZW50IGF0dGFjaGVkIHNob3VsZCBiZSAJAKQDAQUEY29zdAkBDW1lcmdlSW50ZXJuYWwHAgNYWEwABgIDTFhMBQRhZGRyBQxsYW5kQXNzZXRJZHMFBHR4SWQJAGgCBRFJbmZyYVVwZ3JhZGVDb3N0UwA2AQttZXJnZUNvbW1vbgUMc2hvdWxkVXNlTWF0BGFkZHINcGF5bWVudEFtb3VudAxsYW5kQXNzZXRJZHMEdHhJZAQLbWVyZ2VSZXN1bHQEByRtYXRjaDAJAJADAQUMbGFuZEFzc2V0SWRzAwkAAAIABAUHJG1hdGNoMAkBA3MybQMFBGFkZHIFDGxhbmRBc3NldElkcwUEdHhJZAMJAAACAAMFByRtYXRjaDAJAQNtMmwFBQRhZGRyBQxsYW5kQXNzZXRJZHMFBHR4SWQFDHNob3VsZFVzZU1hdAUNcGF5bWVudEFtb3VudAMJAAACAAUFByRtYXRjaDAJAQRsMnhsBQUEYWRkcgUMbGFuZEFzc2V0SWRzBQR0eElkBQxzaG91bGRVc2VNYXQFDXBheW1lbnRBbW91bnQDCQAAAgACBQckbWF0Y2gwCQEGeGwyeHhsBQUEYWRkcgUMbGFuZEFzc2V0SWRzBQR0eElkBQxzaG91bGRVc2VNYXQFDXBheW1lbnRBbW91bnQJAAIBAg1Vbmtub3duIG1lcmdlBQttZXJnZVJlc3VsdAEGcHJvbG9nAQFpAwMJAQIhPQIIBQFpDG9yaWdpbkNhbGxlcgUMcmVzdENvbnRyYWN0CQELdmFsdWVPckVsc2UCCQCgCAEJAQprZXlCbG9ja2VkAAcHCQACAQIfQ29udHJhY3RzIGFyZSB1bmRlciBtYWludGVuYW5jZQkBC1N0cmluZ0VudHJ5AgkBEWtleUxhc3RUeElkQnlVc2VyAQkApQgBCAUBaQxvcmlnaW5DYWxsZXIJANgEAQgFAWkNdHJhbnNhY3Rpb25JZCIBaQENY29uc3RydWN0b3JWMQEIcmVzdEFkZHIDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAhFQZXJtaXNzaW9uIGRlbmllZAkAzAgCCQELU3RyaW5nRW50cnkCCQEOa2V5UmVzdEFkZHJlc3MABQhyZXN0QWRkcgUDbmlsAWkBCnNldEJsb2NrZWQBCWlzQmxvY2tlZAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECEXBlcm1pc3Npb24gZGVuaWVkCQDMCAIJAQxCb29sZWFuRW50cnkCCQEKa2V5QmxvY2tlZAAFCWlzQmxvY2tlZAUDbmlsAWkBCXN0YWtlTGFuZAAEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhxFeGFjdGx5IG9uZSBwYXltZW50IHJlcXVpcmVkBANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAQHYXNzZXRJZAkBBXZhbHVlAQgFA3BtdAdhc3NldElkBAdhZGRyZXNzCQClCAEIBQFpBmNhbGxlcgMJAQIhPQIIBQNwbXQGYW1vdW50AAEJAAIBCQCsAgIJAKwCAgIETkZUIAUKTEFORFBSRUZJWAIkIHRva2VuIHNob3VsZCBiZSBhdHRhY2hlZCBhcyBwYXltZW50BAVhc3NldAkBBXZhbHVlAQkA7AcBBQdhc3NldElkAwkBAiE9AggFBWFzc2V0Bmlzc3VlcgUEdGhpcwkAAgECF1Vua25vd24gaXNzdWVyIG9mIHRva2VuAwkBASEBCQEIY29udGFpbnMCCAUFYXNzZXQEbmFtZQUKTEFORFBSRUZJWAkAAgEJAKwCAgkArAICAglPbmx5IE5GVCAFCkxBTkRQUkVGSVgCFCB0b2tlbnMgYXJlIGFjY2VwdGVkBAtsYW5kTnVtU2l6ZQkAsAICCAUFYXNzZXQEbmFtZQAEBAdsYW5kTnVtAwkBCGNvbnRhaW5zAgULbGFuZE51bVNpemUCA1hYTAkAswICBQtsYW5kTnVtU2l6ZQADAwkBCGNvbnRhaW5zAgULbGFuZE51bVNpemUCAlhMCQCzAgIFC2xhbmROdW1TaXplAAIJALMCAgULbGFuZE51bVNpemUAAQMJAQEhAQkBCWlzRGVmaW5lZAEJALYJAQUHbGFuZE51bQkAAgEJAKwCAgIeQ2Fubm90IHBhcnNlIGxhbmQgbnVtYmVyIGZyb20gCAUFYXNzZXQEbmFtZQQLbGFuZEFzc2V0SWQJANgEAQUHYXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAMJAQlpc0RlZmluZWQBCQCfCAEFB3RpbWVLZXkJAAIBCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCEiBpcyBhbHJlYWR5IHN0YWtlZAQBZAkAtQkCCAUFYXNzZXQLZGVzY3JpcHRpb24CAV8EDXRlcnJhaW5Db3VudHMJAQ1jb3VudFRlcnJhaW5zAQkAkQMCBQFkBQtyZWNUZXJyYWlucwQGcGllY2VzCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCBQFkBQtyZWNMYW5kU2l6ZQQFcHJvcHMJARF1cGRhdGVQcm9wb3J0aW9ucwMFDXRlcnJhaW5Db3VudHMJAGkCBQZwaWVjZXMFBVNTSVpFAAEECWFydFBpZWNlcwkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEga2V5TGFuZEFydFN0YXR1c0J5VHlwZUFuZEFzc2V0SWQCBQpBUlRQUkVTQUxFBQtsYW5kQXNzZXRJZAAABAhsYW5kc0tleQkBFWtleVN0YWtlZExhbmRzQnlPd25lcgEFB2FkZHJlc3MECGxhbmRzU3RyCQCiCAEFCGxhbmRzS2V5BAVsYW5kcwMJAQlpc0RlZmluZWQBBQhsYW5kc1N0cgkAvQkCCQEFdmFsdWUBBQhsYW5kc1N0cgIBXwUDbmlsAwkBD2NvbnRhaW5zRWxlbWVudAIFBWxhbmRzBQtsYW5kQXNzZXRJZAkAAgEJAKwCAgIiWW91ciBzdGFrZWQgbGFuZHMgYWxyZWFkeSBjb250YWluIAULbGFuZEFzc2V0SWQECmluZnJhTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAAABAlwaWVjZXNLZXkJARZrZXlTdGFrZWRQaWVjZXNCeU93bmVyAQUHYWRkcmVzcwQJb2xkUGllY2VzCQELdmFsdWVPckVsc2UCCQCfCAEFCXBpZWNlc0tleQAABAl3bGdSZXN1bHQJAQVhc0ludAEJAPwHBAULd2xnQ29udHJhY3QCEm9uU3Rha2VVbnN0YWtlTGFuZAkAzAgCBQdhZGRyZXNzBQNuaWwFA25pbAkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQd0aW1lS2V5CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDBQpMQU5EUFJFRklYBQtsYW5kQXNzZXRJZAUHYWRkcmVzcwgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAMwIAgkBC1N0cmluZ0VudHJ5AgUIbGFuZHNLZXkJALsJAgkAzQgCBQVsYW5kcwULbGFuZEFzc2V0SWQCAV8JAMwIAgkBDEludGVnZXJFbnRyeQIFCXBpZWNlc0tleQkAZAIFCW9sZFBpZWNlcwUGcGllY2VzCQDMCAIJAQtTdHJpbmdFbnRyeQIJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQtsYW5kQXNzZXRJZAUHYWRkcmVzcwkAzAgCCQELU3RyaW5nRW50cnkCCQERa2V5TGFuZE51bVRvT3duZXIBBQdsYW5kTnVtBQdhZGRyZXNzCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEla2V5TGFuZEFydFN0YXR1c0J5VHlwZUFzc2V0SWRBbmRPd25lcgMFCkFSVFBSRVNBTEUFC2xhbmRBc3NldElkBQdhZGRyZXNzBQlhcnRQaWVjZXMJAMwIAgkBDEludGVnZXJFbnRyeQIJAR5rZXlJbmZyYUxldmVsQnlBc3NldElkQW5kT3duZXICBQtsYW5kQXNzZXRJZAUHYWRkcmVzcwUKaW5mcmFMZXZlbAkAzAgCCQELU3RyaW5nRW50cnkCCQERa2V5UmVzUHJvcG9ydGlvbnMABQVwcm9wcwkAzAgCBQxwcm9sb2dBY3Rpb24FA25pbAUJd2xnUmVzdWx0AWkBC3Vuc3Rha2VMYW5kAQ1sYW5kQXNzZXRJZEluBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBGFkZHIJAKUIAQgFAWkGY2FsbGVyBAFjCQEUY2hlY2tDbGFpbUNvbmRpdGlvbnMDBQRhZGRyBQ1jbGFpbU1vZGVEdWNrBQ1sYW5kQXNzZXRJZEluBAtsYW5kQXNzZXRJZAgFAWMCXzIECGxhbmRzS2V5CQEVa2V5U3Rha2VkTGFuZHNCeU93bmVyAQUEYWRkcgQNdGVycmFpbkNvdW50cwkBDWNvdW50VGVycmFpbnMBCQCRAwIIBQFjAl8zBQtyZWNUZXJyYWlucwQGcGllY2VzCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCCAUBYwJfMwULcmVjTGFuZFNpemUEBXByb3BzCQERdXBkYXRlUHJvcG9ydGlvbnMDBQ10ZXJyYWluQ291bnRzCQBpAgUGcGllY2VzBQVTU0laRQD///////////8BBAtjbGFpbVJlc3VsdAkBCGNsYWltQWxsBAUEYWRkcgULbGFuZEFzc2V0SWQFBnBpZWNlcwUNY2xhaW1Nb2RlRHVjawQFbGFuZHMJAL0JAgkBC3ZhbHVlT3JFbHNlAgkAoggBBQhsYW5kc0tleQIAAgFfBANpZHgJAM8IAgUFbGFuZHMFC2xhbmRBc3NldElkAwkBASEBCQEJaXNEZWZpbmVkAQUDaWR4CQACAQkArAICAiBZb3VyIHN0YWtlZCBsYW5kcyBkb24ndCBjb250YWluIAULbGFuZEFzc2V0SWQEA25vdwgFCWxhc3RCbG9jawl0aW1lc3RhbXAEDmdvdlJlbGVhc2VUaW1lCQELdmFsdWVPckVsc2UCCQCaCAIFC2dvdkNvbnRyYWN0CQEVa2V5VXNlckd3bFJlbGVhc2VUaW1lAQUEYWRkcgAAAwkAZwIFDmdvdlJlbGVhc2VUaW1lBQNub3cJAAIBCQCsAgICOVlvdXIgZ1dMIGFyZSB0YWtpbmcgcGFydCBpbiB2b3RpbmcsIGNhbm5vdCB1bnN0YWtlIHVudGlsIAkApAMBBQ5nb3ZSZWxlYXNlVGltZQQOYXJiUmVsZWFzZVRpbWUJAGQCCQELdmFsdWVPckVsc2UCCQCaCAIFC3dsZ0NvbnRyYWN0CQEUa2V5TGFzdEFyYlRpbWVCeVVzZXIBBQRhZGRyAAAFDmFyYml0cmFnZURlbGF5AwkAZgIFDmFyYlJlbGVhc2VUaW1lBQNub3cJAAIBCQCsAgICP1lvdXIgc3Rha2VkIGxhbmRzIHRvb2sgcGFydCBpbiBhcmJpdHJhZ2UsIGNhbm5vdCB1bnN0YWtlIHVudGlsIAkApAMBBQ5hcmJSZWxlYXNlVGltZQQJcGllY2VzS2V5CQEWa2V5U3Rha2VkUGllY2VzQnlPd25lcgEFBGFkZHIEDHN0YWtlZFBpZWNlcwkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlwaWVjZXNLZXkAAAQJbmV3UGllY2VzAwkAZgIFBnBpZWNlcwUMc3Rha2VkUGllY2VzAAAJAGUCBQxzdGFrZWRQaWVjZXMFBnBpZWNlcwQJd2xnUmVzdWx0CQEFYXNJbnQBCQD8BwQFC3dsZ0NvbnRyYWN0AhJvblN0YWtlVW5zdGFrZUxhbmQJAMwIAgUEYWRkcgUDbmlsBQNuaWwJAJQKAgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIAAQkA2QQBBQtsYW5kQXNzZXRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkCQDMCAIJAQtEZWxldGVFbnRyeQEJASJrZXlTdGFrZWRUaW1lQnlUeXBlQXNzZXRJZEFuZE93bmVyAwUKTEFORFBSRUZJWAULbGFuZEFzc2V0SWQFBGFkZHIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEWtleVJlc1Byb3BvcnRpb25zAAUFcHJvcHMJAMwIAgkBC1N0cmluZ0VudHJ5AggFC2NsYWltUmVzdWx0Al8yCQC5CQIIBQtjbGFpbVJlc3VsdAJfMwIBOgkAzAgCAwkAZgIJAJADAQUFbGFuZHMAAQkBC1N0cmluZ0VudHJ5AgUIbGFuZHNLZXkJALsJAgkA0QgCBQVsYW5kcwkBBXZhbHVlAQUDaWR4AgFfCQELRGVsZXRlRW50cnkBBQhsYW5kc0tleQkAzAgCCQEMSW50ZWdlckVudHJ5AgUJcGllY2VzS2V5BQluZXdQaWVjZXMJAMwIAgUMcHJvbG9nQWN0aW9uBQNuaWwFCXdsZ1Jlc3VsdAFpAQlzdGFrZUR1Y2sABAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIcRXhhY3RseSBvbmUgcGF5bWVudCByZXF1aXJlZAQDcG10CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAAEB2Fzc2V0SWQJAQV2YWx1ZQEIBQNwbXQHYXNzZXRJZAQHYWRkcmVzcwkApQgBCAUBaQZjYWxsZXIDCQECIT0CCAUDcG10BmFtb3VudAABCQACAQkArAICCQCsAgICBE5GVCAFCkRVQ0tQUkVGSVgCJCB0b2tlbiBzaG91bGQgYmUgYXR0YWNoZWQgYXMgcGF5bWVudAQFYXNzZXQJAQV2YWx1ZQEJAOwHAQUHYXNzZXRJZAMDCQECIT0CCAUFYXNzZXQGaXNzdWVyBQ1pbmN1YmF0b3JBZGRyCQECIT0CCAUFYXNzZXQGaXNzdWVyBQticmVlZGVyQWRkcgcJAAIBCQCsAgIJAKwCAgISVW5rbm93biBpc3N1ZXIgb2YgBQpEVUNLUFJFRklYAgYgdG9rZW4DCQEBIQEJAQhjb250YWlucwIIBQVhc3NldARuYW1lBQpEVUNLUFJFRklYCQACAQkArAICCQCsAgICCU9ubHkgTkZUIAUKRFVDS1BSRUZJWAIUIHRva2VucyBhcmUgYWNjZXB0ZWQECmFzc2V0SWRTdHIJANgEAQUHYXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQphc3NldElkU3RyAwkBCWlzRGVmaW5lZAEJAJ8IAQUHdGltZUtleQkAAgEJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQISIGlzIGFscmVhZHkgc3Rha2VkAwkBCWlzRGVmaW5lZAEJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUHYWRkcmVzcwkAAgEJAKwCAgIdWW91IGFscmVhZHkgc3Rha2VkIG9uZSBkdWNrOiAIBQVhc3NldARuYW1lBAZsb2NLZXkJAQ9rZXlEdWNrTG9jYXRpb24BBQphc3NldElkU3RyBAhsb2NhdGlvbgkAoggBBQZsb2NLZXkEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBBQphc3NldElkU3RyBAhiYWNrcGFjawkAoggBBQVicEtleQQJa2V5SGVhbHRoCQENa2V5RHVja0hlYWx0aAEFCmFzc2V0SWRTdHIEBW1heEhQCQEJbWF4SGVhbHRoAQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEMa2V5RHVja0xldmVsAQUKYXNzZXRJZFN0cgAABAljdXJIZWFsdGgJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJa2V5SGVhbHRoBQVtYXhIUAkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQd0aW1lS2V5CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDBQpEVUNLUFJFRklYCQDYBAEFB2Fzc2V0SWQFB2FkZHJlc3MIBQlsYXN0QmxvY2sJdGltZXN0YW1wCQDMCAIJAQtTdHJpbmdFbnRyeQIJARBrZXlEdWNrSWRUb093bmVyAQUKYXNzZXRJZFN0cgUHYWRkcmVzcwkAzAgCCQELU3RyaW5nRW50cnkCCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQdhZGRyZXNzBQphc3NldElkU3RyBQNuaWwDCQEJaXNEZWZpbmVkAQUIbG9jYXRpb24FA25pbAkAzggCCQDMCAIJAQtTdHJpbmdFbnRyeQIFBmxvY0tleQUPREVGQVVMVExPQ0FUSU9OBQNuaWwDCQEJaXNEZWZpbmVkAQUIYmFja3BhY2sFA25pbAkAzQgCCQDNCAIJAMwIAgkBC1N0cmluZ0VudHJ5AgUFYnBLZXkCGjA6MF8wXzBfMF8wXzA6MF8wXzBfMF8wXzA6BQNuaWwJAQxJbnRlZ2VyRW50cnkCBQlrZXlIZWFsdGgFCWN1ckhlYWx0aAUMcHJvbG9nQWN0aW9uAWkBC3Vuc3Rha2VEdWNrAQphc3NldElkU3RyBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEB2Fzc2V0SWQJANkEAQUKYXNzZXRJZFN0cgQHYWRkcmVzcwkApQgBCAUBaQZjYWxsZXIEBWFzc2V0CQEFdmFsdWUBCQDsBwEFB2Fzc2V0SWQEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQkA2AQBBQdhc3NldElkAwkBASEBCQEJaXNEZWZpbmVkAQkAnwgBBQd0aW1lS2V5CQACAQkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAMJAQEhAQkBCWlzRGVmaW5lZAEJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUHYWRkcmVzcwkAAgEJAKwCAgkArAICAglUaGUgZHVjayAIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAQFb3duZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEQa2V5RHVja0lkVG9Pd25lcgEJANgEAQUHYXNzZXRJZAkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDCQECIT0CBQVvd25lcgUHYWRkcmVzcwkAAgECF1N0YWtlZCBORlQgaXMgbm90IHlvdXJzBAlrZXlIZWFsdGgJAQ1rZXlEdWNrSGVhbHRoAQUKYXNzZXRJZFN0cgQFbWF4SFAJAQltYXhIZWFsdGgBCQELdmFsdWVPckVsc2UCCQCfCAEJAQxrZXlEdWNrTGV2ZWwBBQphc3NldElkU3RyAAAEBmhlYWx0aAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlrZXlIZWFsdGgFBW1heEhQAwkAZgIFBW1heEhQBQZoZWFsdGgJAAIBCQCsAgIJAKwCAgIZUGxlYXNlIGhlYWwgeW91ciBkdWNrIHRvIAkApAMBBQVtYXhIUAITaHAgYmVmb3JlIHVuc3Rha2luZwkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIAAQUHYXNzZXRJZAkAzAgCCQELRGVsZXRlRW50cnkBBQd0aW1lS2V5CQDMCAIJAQtEZWxldGVFbnRyeQEFCWtleUhlYWx0aAkAzAgCCQELRGVsZXRlRW50cnkBCQEPa2V5RHVja0xvY2F0aW9uAQUKYXNzZXRJZFN0cgkAzAgCCQELRGVsZXRlRW50cnkBCQEQa2V5RHVja0lkVG9Pd25lcgEFCmFzc2V0SWRTdHIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDBQpEVUNLUFJFRklYBQphc3NldElkU3RyBQdhZGRyZXNzCQDMCAIJAQtEZWxldGVFbnRyeQEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFB2FkZHJlc3MJAMwIAgUMcHJvbG9nQWN0aW9uBQNuaWwBaQEIY2xhaW1SZXMCBmFtb3VudA5sYW5kQXNzZXRJZFN0cgQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBARhZGRyCQClCAEIBQFpDG9yaWdpbkNhbGxlcgQGcmVzdWx0CQEQY2xhaW1SZXNJbnRlcm5hbAQFBGFkZHIFBmFtb3VudAUNY2xhaW1Nb2RlRHVjawUObGFuZEFzc2V0SWRTdHIEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAkAlAoCCQDNCAIJAM0IAgkAzQgCCQDOCAIIBQZyZXN1bHQCXzEICQEXdXBkYXRlRHVja1N0YXRzSW50ZXJuYWwCBQtkdWNrQXNzZXRJZAkAawMFB3hwQ2xhaW0FBmFtb3VudAUFTVVMVDgCXzEJAQtTdHJpbmdFbnRyeQIIBQZyZXN1bHQCXzIJALkJAggFBnJlc3VsdAJfMwIBOgkBC1N0cmluZ0VudHJ5AggFBnJlc3VsdAJfNAkAuQkCCAUGcmVzdWx0Al81AgE6BQxwcm9sb2dBY3Rpb24JAJEDAggFBnJlc3VsdAJfMwUIYnBJZHhSZXMBaQEMY2xhaW1SZXNUb1dIAgZhbW91bnQObGFuZEFzc2V0SWRTdHIEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQEYWRkcgkApQgBCAUBaQxvcmlnaW5DYWxsZXIEBnJlc3VsdAkBEGNsYWltUmVzSW50ZXJuYWwEBQRhZGRyBQZhbW91bnQFC2NsYWltTW9kZVdoBQ5sYW5kQXNzZXRJZFN0cgkAlAoCCQDNCAIJAM0IAgkAzQgCCQDOCAIIBQZyZXN1bHQCXzEICQEWdXBkYXRlQWNjU3RhdHNJbnRlcm5hbAIFBGFkZHIJAGsDBQd4cENsYWltBQZhbW91bnQFBU1VTFQ4Al8xCQELU3RyaW5nRW50cnkCCAUGcmVzdWx0Al8yCQC5CQIIBQZyZXN1bHQCXzMCAToJAQtTdHJpbmdFbnRyeQIIBQZyZXN1bHQCXzQJALkJAggFBnJlc3VsdAJfNQIBOgUMcHJvbG9nQWN0aW9uCQCRAwIIBQZyZXN1bHQCXzUFCHdoSWR4UmVzAWkBBmZsaWdodAIHbWVzc2FnZQNzaWcEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQIdXNlckFkZHIJAKUIAQgFAWkGY2FsbGVyBAFmCQEMZmxpZ2h0Q29tbW9uAwUIdXNlckFkZHIFB21lc3NhZ2UFA3NpZwQLZHVja0Fzc2V0SWQIBQFmAl8yBAZsb2NLZXkJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAQLY3VyTG9jYXRpb24JAQt2YWx1ZU9yRWxzZQIJAKIIAQUGbG9jS2V5BQ9ERUZBVUxUTE9DQVRJT04DCQAAAggFAWYCXzQFC2N1ckxvY2F0aW9uCQACAQIiWW91IGNhbid0IGZseSB0byB0aGUgc2FtZSBsb2NhdGlvbgQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkEB25ld1Byb2QJARBzdWJ0cmFjdFByb2R1Y3RzAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kCAUBZgJfNQkAlAoCCQDOCAIJAMwIAgkBC1N0cmluZ0VudHJ5AgUGbG9jS2V5AwkAZgIIBQFmAl8xAAAIBQFmAl80BQtjdXJMb2NhdGlvbgkAzAgCCQELU3RyaW5nRW50cnkCBQVicEtleQkAuQkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQJAMwIAgUHbmV3UHJvZAUDbmlsAgE6CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkCAUBZgJfMQkAzAgCBQxwcm9sb2dBY3Rpb24FA25pbAgJARd1cGRhdGVEdWNrU3RhdHNJbnRlcm5hbAIFC2R1Y2tBc3NldElkAwkAZgIIBQFmAl8xAAAFD3hwU3VjY2Vzc0ZsaWdodAUMeHBGYWlsRmxpZ2h0Al8xCAUBZgJfMwFpAQRoZWFsAwpxdWFudGl0eUwxCnF1YW50aXR5TDIKcXVhbnRpdHlMMwQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMDAwkAZgIAAAUKcXVhbnRpdHlMMQYJAGYCAAAFCnF1YW50aXR5TDIGCQBmAgAABQpxdWFudGl0eUwzCQACAQIbUXVhbnRpdHkgY2Fubm90IGJlIG5lZ2F0aXZlBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkBANxdHMJAMwIAgUKcXVhbnRpdHlMMQkAzAgCBQpxdWFudGl0eUwyCQDMCAIFCnF1YW50aXR5TDMFA25pbAQJa2V5SGVhbHRoCQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkBAVtYXhIUAkBCW1heEhlYWx0aAEJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBDGtleUR1Y2tMZXZlbAEFC2R1Y2tBc3NldElkAAAECW9sZEhlYWx0aAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlrZXlIZWFsdGgFBW1heEhQAwkAZwIFCW9sZEhlYWx0aAUFbWF4SFAJAAIBCQCsAgIJAKwCAgIPSFAgc2hvdWxkIGJlIDwgCQCkAwEFBW1heEhQAgggdG8gaGVhbAQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkECHByb2RMaXN0AwkAAAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAIABQNuaWwJALUJAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kAgFfCgELaXRlcmF0ZVByb2QCA2FjYwtpZ25vcmVkSXRlbQQBbggFA2FjYwJfMgQBeAMJAGYCCQCQAwEFCHByb2RMaXN0BQFuCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUIcHJvZExpc3QFAW4AAAMJAGYCAAMFAW4EAXEJAJEDAgUDcXRzBQFuAwkAZgIFAXEFAXgJAAIBCQCsAgIJAKwCAgkArAICAg5Zb3UgaGF2ZSBvbmx5IAkApAMBBQF4AgQgb2YgCQCRAwIFCXByb2RUeXBlcwUBbgkAlQoDCQDNCAIIBQNhY2MCXzEJAKQDAQkAZQIFAXgFAXEJAGQCBQFuAAEJAGQCCAUDYWNjAl8zCQBoAgkAkQMCBQhtZWRLaXRIcAUBbgUBcQkAlQoDCQDNCAIIBQNhY2MCXzEJAKQDAQUBeAkAZAIFAW4AAQgFA2FjYwJfMwQGcmVzdWx0CgACJGwFEHByb2R1Y3Rpb25NYXRyaXgKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCVCgMFA25pbAAAAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBC2l0ZXJhdGVQcm9kAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyA1MAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAAZABoAGwAcAB0AHgAfACAAIQAiACMAJAAlACYAJwAoACkAKgArACwALQAuAC8AMAAxADIECW5ld0hlYWx0aAkAlwMBCQDMCAIFBW1heEhQCQDMCAIJAGQCBQlvbGRIZWFsdGgIBQZyZXN1bHQCXzMFA25pbAkAlAoCCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIFCWtleUhlYWx0aAUJbmV3SGVhbHRoCQDMCAIJAQtTdHJpbmdFbnRyeQIFBWJwS2V5CQC6CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAkAzAgCCQC5CQIIBQZyZXN1bHQCXzECAV8FA25pbAIBOgkAzAgCBQxwcm9sb2dBY3Rpb24FA25pbAgJARd1cGRhdGVEdWNrU3RhdHNJbnRlcm5hbAIFC2R1Y2tBc3NldElkCQBoAgUGeHBIZWFsCQBkAgkAZAIFCnF1YW50aXR5TDEFCnF1YW50aXR5TDIFCnF1YW50aXR5TDMCXzEFCW5ld0hlYWx0aAFpAQZoZWFsRVMABAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIcRXhhY3RseSBvbmUgcGF5bWVudCByZXF1aXJlZAQDcG10CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAADCQECIT0CCAUDcG10B2Fzc2V0SWQFC3VzZHRBc3NldElkCQACAQIaQWxsb3dlZCBVU0RUIHBheW1lbnQgb25seSEEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQkApQgBCAUBaQZjYWxsZXICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQECWtleUhlYWx0aAkBDWtleUR1Y2tIZWFsdGgBBQtkdWNrQXNzZXRJZAQFbWF4SFAJAQltYXhIZWFsdGgBCQELdmFsdWVPckVsc2UCCQCfCAEJAQxrZXlEdWNrTGV2ZWwBBQtkdWNrQXNzZXRJZAAABAlvbGRIZWFsdGgJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJa2V5SGVhbHRoBQVtYXhIUAMJAGYCBQlvbGRIZWFsdGgAAAkAAgECKEhQIHNob3VsZCBiZSAwIHRvIGNhbGwgRW1lcmdlbmN5IFNlcnZpY2UEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BAhwcm9kTGlzdAMJAAACCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QCAAUDbmlsCQC1CQIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAIBXwQNbWVkS2l0QW1vdW50MQMJAGYCCQCQAwEFCHByb2RMaXN0AAAJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQhwcm9kTGlzdAAAAAAEDW1lZEtpdEFtb3VudDIDCQBmAgkAkAMBBQhwcm9kTGlzdAABCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUIcHJvZExpc3QAAQAABA1tZWRLaXRBbW91bnQzAwkAZgIJAJADAQUIcHJvZExpc3QAAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCHByb2RMaXN0AAIAAAMDAwkAZgIFDW1lZEtpdEFtb3VudDEAAAYJAGYCBQ1tZWRLaXRBbW91bnQyAAAGCQBmAgUNbWVkS2l0QW1vdW50MwAACQACAQIfWW91IGhhdmUgdG8gdXNlIG93biBNZWRpY2FsIEtpdAQIZXhpc3RTdHIJAJ0IAgUPZWNvbm9teUNvbnRyYWN0CQEOa2V5RXNXYXJlaG91c2UABAxleGlzdEFtb3VudHMDCQEJaXNEZWZpbmVkAQUIZXhpc3RTdHIJALUJAgkBBXZhbHVlAQUIZXhpc3RTdHICAV8FA25pbAQLZXhpc3RBbW91bnQDCQBmAgkAkAMBBQxleGlzdEFtb3VudHMAAAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDGV4aXN0QW1vdW50cwAAAAADCQBnAgAABQtleGlzdEFtb3VudAkAAgECOVRoZXJlIGFyZSBubyBNZWRpY2FsIEtpdHMgTDEgYXQgRW1lcmdlbmN5IFNlcnZpY2Ugc3RvcmFnZQQJbmV3SGVhbHRoCQBkAgUJb2xkSGVhbHRoCQCRAwIFCG1lZEtpdEhwAAAEBW5ld0VTCQC5CQIJAMwIAgkApAMBCQBlAgULZXhpc3RBbW91bnQAAQkA0QgCBQxleGlzdEFtb3VudHMAAAIBXwQGcmVjaXBlCQC1CQIJAJEDAgUQcHJvZHVjdGlvbk1hdHJpeAAAAgFfBAh0b3RhbE1hdAkBEmdldFJlY2lwZU1hdGVyaWFscwEFBnJlY2lwZQQJc2VsbFByaWNlCQBrAwkAaAIFCHRvdGFsTWF0BQpFU1NFTExDT0VGBRBSRVNPVVJDRVBSSUNFTUlOCQBoAgAKBQ5QUk9EVUNUUEtHU0laRQMJAQIhPQIIBQNwbXQGYW1vdW50BQlzZWxsUHJpY2UJAAIBCQCsAgICG1BheW1lbnQgYXR0YWNoZWQgc2hvdWxkIGJlIAkApAMBBQlzZWxsUHJpY2UEBnJlc3VsdAkBCGFzU3RyaW5nAQkA/AcEBQ9lY29ub215Q29udHJhY3QCD3VwZGF0ZUVzU3RvcmFnZQkAzAgCBQVuZXdFUwUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQt1c2R0QXNzZXRJZAUJc2VsbFByaWNlBQNuaWwJAJQKAgkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlrZXlIZWFsdGgFCW5ld0hlYWx0aAkAzAgCBQxwcm9sb2dBY3Rpb24FA25pbAgJARd1cGRhdGVEdWNrU3RhdHNJbnRlcm5hbAIFC2R1Y2tBc3NldElkBQh4cENhbGxFUwJfMQUGcmVzdWx0AWkBDnVwZGF0ZUJhY2twYWNrAgtkdWNrQXNzZXRJZAduZXdQYWNrAwkBAiE9AggFAWkGY2FsbGVyBQ9lY29ub215Q29udHJhY3QJAAIBAhFwZXJtaXNzaW9uIGRlbmllZAkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBQduZXdQYWNrBQNuaWwFB25ld1BhY2sBaQEIYnV5U0xhbmQABAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIcRXhhY3RseSBvbmUgcGF5bWVudCByZXF1aXJlZAQDcG10CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAADCQECIT0CCAUDcG10B2Fzc2V0SWQFC3VzZHRBc3NldElkCQACAQIaQWxsb3dlZCBVU0RUIHBheW1lbnQgb25seSEDCQECIT0CCAUDcG10BmFtb3VudAUHRVhQVVNEVAkAAgEJAKwCAgIbUGF5bWVudCBhdHRhY2hlZCBzaG91bGQgYmUgCQCkAwEFB0VYUFVTRFQEBnJlc3VsdAkBEmV4cGVkaXRpb25JbnRlcm5hbAIIBQFpBmNhbGxlcggFAWkNdHJhbnNhY3Rpb25JZAkAlAoCCQDNCAIJAM4IAgkAzQgCCAUGcmVzdWx0Al8xCQEOU2NyaXB0VHJhbnNmZXIDBQ9lY29ub215Q29udHJhY3QIBQNwbXQGYW1vdW50BQt1c2R0QXNzZXRJZAgJARZ1cGRhdGVBY2NTdGF0c0ludGVybmFsAgkApQgBCAUBaQZjYWxsZXIFCnhwTmV3U0xhbmQCXzEFDHByb2xvZ0FjdGlvbggIBQZyZXN1bHQCXzICXzEBaQEKZXhwZWRpdGlvbgIHbWVzc2FnZQNzaWcEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQGcmVzdWx0CQEQZXhwZWRpdGlvbkNvbW1vbgQIBQFpBmNhbGxlcggFAWkNdHJhbnNhY3Rpb25JZAUHbWVzc2FnZQUDc2lnBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkCQCUCgIJAM0IAgkAzggCCAUGcmVzdWx0Al8xCAkBF3VwZGF0ZUR1Y2tTdGF0c0ludGVybmFsAgULZHVja0Fzc2V0SWQFCnhwTmV3U0xhbmQCXzEFDHByb2xvZ0FjdGlvbgkAlAoCCAUGcmVzdWx0Al8yCAUGcmVzdWx0Al8zAWkBDHVwZ3JhZGVJbmZyYQELbGFuZEFzc2V0SWQEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQGcmVzdWx0CQENdXBJbmZyYUNvbW1vbgQGCAUBaQZjYWxsZXIAAAULbGFuZEFzc2V0SWQEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQkApQgBCAUBaQZjYWxsZXICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQJAJQKAgkAzggCCQDNCAIIBQZyZXN1bHQCXzEFDHByb2xvZ0FjdGlvbggJARd1cGRhdGVEdWNrU3RhdHNJbnRlcm5hbAIFC2R1Y2tBc3NldElkCQBrAwUOeHBVcGdyYWRlSW5mcmEIBQZyZXN1bHQCXzMFBU1VTFQ4Al8xCAUGcmVzdWx0Al8yAWkBEHVwZ3JhZGVJbmZyYVVzZHQBC2xhbmRBc3NldElkAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIRUGVybWlzc2lvbiBkZW5pZWQEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhxFeGFjdGx5IG9uZSBwYXltZW50IHJlcXVpcmVkBANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAMJAQIhPQIIBQNwbXQHYXNzZXRJZAULdXNkdEFzc2V0SWQJAAIBAhpBbGxvd2VkIFVTRFQgcGF5bWVudCBvbmx5IQQGcmVzdWx0CQENdXBJbmZyYUNvbW1vbgQHCAUBaQZjYWxsZXIIBQNwbXQGYW1vdW50BQtsYW5kQXNzZXRJZAkAlAoCCQDNCAIJAM0IAggFBnJlc3VsdAJfMQkBDlNjcmlwdFRyYW5zZmVyAwUPZWNvbm9teUNvbnRyYWN0CAUDcG10BmFtb3VudAULdXNkdEFzc2V0SWQFDHByb2xvZ0FjdGlvbggFBnJlc3VsdAJfMgFpARBhY3RpdmF0ZUFydGlmYWN0AgdhcnROYW1lDmxhbmRBc3NldElkT3B0BAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBGFkZHIJAKUIAQgFAWkGY2FsbGVyBAZyZXN1bHQEByRtYXRjaDAFB2FydE5hbWUDCQAAAgIHUFJFU0FMRQUHJG1hdGNoMAkBEmFjdGl2YXRlUHJlc2FsZUFydAIFBGFkZHIFDmxhbmRBc3NldElkT3B0AwkAAAICB09OQk9BUkQFByRtYXRjaDAJARJhY3RpdmF0ZU9uYm9hcmRBcnQBBQRhZGRyCQACAQIQVW5rbm93biBhcnRpZmFjdAkAzQgCBQZyZXN1bHQFDHByb2xvZ0FjdGlvbgFpAQptZXJnZUxhbmRzAQxsYW5kQXNzZXRJZHMEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQGcmVzdWx0CQELbWVyZ2VDb21tb24FBgkApQgBCAUBaQZjYWxsZXIAAAUMbGFuZEFzc2V0SWRzCAUBaQ10cmFuc2FjdGlvbklkCQCUCgIJAM4IAgkAzQgCCAUGcmVzdWx0Al8xBQxwcm9sb2dBY3Rpb24ICQEWdXBkYXRlQWNjU3RhdHNJbnRlcm5hbAIJAKUIAQgFAWkGY2FsbGVyBQd4cE1lcmdlAl8xCAUGcmVzdWx0Al8yAWkBDm1lcmdlTGFuZHNVc2R0AQxsYW5kQXNzZXRJZHMEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhxFeGFjdGx5IG9uZSBwYXltZW50IHJlcXVpcmVkBANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAMJAQIhPQIIBQNwbXQHYXNzZXRJZAULdXNkdEFzc2V0SWQJAAIBAhpBbGxvd2VkIFVTRFQgcGF5bWVudCBvbmx5IQQGcmVzdWx0CQELbWVyZ2VDb21tb24FBwkApQgBCAUBaQZjYWxsZXIIBQNwbXQGYW1vdW50BQxsYW5kQXNzZXRJZHMIBQFpDXRyYW5zYWN0aW9uSWQJAJQKAgkAzQgCCQDNCAIIBQZyZXN1bHQCXzEJAQ5TY3JpcHRUcmFuc2ZlcgMFD2Vjb25vbXlDb250cmFjdAgFA3BtdAZhbW91bnQFC3VzZHRBc3NldElkBQxwcm9sb2dBY3Rpb24IBQZyZXN1bHQCXzIBaQENY2FyZ29FeGNoYW5nZQIMY2FyZ29MaXN0U3RyC2xhbmRBc3NldElkBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQECmNhcmdvUGFydHMJALwJAgUMY2FyZ29MaXN0U3RyAgE6BARhZGRyCQClCAEIBQFpDG9yaWdpbkNhbGxlcgQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQtsYW5kQXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAMJAQEhAQkBCWlzRGVmaW5lZAEJAJ8IAQUHdGltZUtleQkAAgEJAKwCAggFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkBAVvd25lcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQtsYW5kQXNzZXRJZAkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDCQECIT0CBQVvd25lcgUEYWRkcgkAAgEJAKwCAgUKTEFORFBSRUZJWAINIGlzIG5vdCB5b3VycwQJbGFuZEluZGV4CQBpAgkBD251bVBpZWNlc0J5U2l6ZQEJAJEDAgkAtQkCCAUFYXNzZXQLZGVzY3JpcHRpb24CAV8FC3JlY0xhbmRTaXplBQVTU0laRQQKaW5mcmFMZXZlbAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEFC2xhbmRBc3NldElkAAAEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQLY3VyTG9jYXRpb24JAQt2YWx1ZU9yRWxzZQIJAKIIAQkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkBQ9ERUZBVUxUTE9DQVRJT04EA2xvYwkAtQkCCQEFdmFsdWUBBQtjdXJMb2NhdGlvbgIBXwMJAQIhPQIJAJEDAgUDbG9jBQpsb2NJZHhUeXBlAgFMCQACAQkArAICCQCsAgICFkR1Y2sgbG9jYXRpb24gdHlwZSBpcyAJAJEDAgUDbG9jBQpsb2NJZHhUeXBlAhEsIGJ1dCBzaG91bGQgYmUgTAMJAQIhPQIJAJEDAgUDbG9jBQhsb2NJZHhJZAULbGFuZEFzc2V0SWQJAAIBCQCsAgICG0R1Y2sgc2hvdWxkIGJlIG9uIHRoZSBsYW5kIAULbGFuZEFzc2V0SWQEBXdoS2V5CQESa2V5V2FyZWhvdXNlQnlMYW5kAQULbGFuZEFzc2V0SWQECWN1cnJlbnRXaAkBDGdldFdhcmVob3VzZQMFBXdoS2V5BQlsYW5kSW5kZXgFCmluZnJhTGV2ZWwEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BAZyZXN1bHQJAQltb3ZlU3R1ZmYDBQpjYXJnb1BhcnRzBQljdXJyZW50V2gFC2N1cnJlbnRQYWNrBARsb2Z0CQC1CQIJAJEDAgUJY3VycmVudFdoBQl3aElkeExPRlQCAV8EBWxvZnRPCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFC3ZvbE9jY3VwaWVkCAUGcmVzdWx0Al83BAVsb2Z0RgkAZQIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQd2b2xGcmVlCAUGcmVzdWx0Al83CQDMCAIJAQtTdHJpbmdFbnRyeQIFBWJwS2V5CQC6CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCAUGcmVzdWx0Al80CQDMCAIIBQZyZXN1bHQCXzUJAMwIAggFBnJlc3VsdAJfNgUDbmlsAgE6CQDMCAIJAQtTdHJpbmdFbnRyeQIFBXdoS2V5CQC6CQIJAMwIAgkAkQMCBQljdXJyZW50V2gFC3doSWR4TGV2ZWxzCQDMCAIIBQZyZXN1bHQCXzEJAMwIAggFBnJlc3VsdAJfMgkAzAgCCAUGcmVzdWx0Al8zCQDMCAIJALkJAgkAzAgCCQCRAwIFBGxvZnQFCXZvbExvY2tlZAkAzAgCCQCkAwEFBWxvZnRPCQDMCAIJAKQDAQUFbG9mdEYJAMwIAgkAkQMCBQRsb2Z0BQh2b2xUb3RhbAUDbmlsAgFfBQNuaWwCAToJAMwIAgUMcHJvbG9nQWN0aW9uBQNuaWwBaQENc2F2ZVdhcmVob3VzZQIFd2hTdHILbGFuZEFzc2V0SWQDCQECIT0CCAUBaQZjYWxsZXIFD2Vjb25vbXlDb250cmFjdAkAAgECDUFjY2VzcyBkZW5pZWQEBXdoS2V5CQESa2V5V2FyZWhvdXNlQnlMYW5kAQULbGFuZEFzc2V0SWQEAndoCQC8CQIFBXdoU3RyAgE6AwkBAiE9AgkAkAMBBQJ3aAAFCQACAQIwd2FyZWhvdXNlIHN0cmluZyBzaG91bGQgY29udGFpbiA0ICc6JyBzZXBhcmF0b3JzBAVsb2Z0TAkAkQMCCQC1CQIJAJEDAgUCd2gFCXdoSWR4TE9GVAIBXwUJdm9sTG9ja2VkBAVsb2Z0TwkBF2dldFdhcmVob3VzZU9jY3VwaWVkVm9sAQUCd2gEBWxvZnRUCQEXZ2V0V2FyZWhvdXNlVG90YWxWb2x1bWUBCQCRAwIFAndoBQt3aElkeExldmVscwQFbG9mdEYJAGUCCQBlAgUFbG9mdFQJAQ1wYXJzZUludFZhbHVlAQUFbG9mdEwFBWxvZnRPBAhuZXdXaFN0cgkAugkCCQDMCAIJAJEDAgUCd2gFC3doSWR4TGV2ZWxzCQDMCAIJAJEDAgUCd2gFCHdoSWR4UmVzCQDMCAIJAJEDAgUCd2gFCHdoSWR4TWF0CQDMCAIJAJEDAgUCd2gFCXdoSWR4UHJvZAkAzAgCCQC5CQIJAMwIAgUFbG9mdEwJAMwIAgkApAMBBQVsb2Z0TwkAzAgCCQCkAwEFBWxvZnRGCQDMCAIJAKQDAQUFbG9mdFQFA25pbAIBXwUDbmlsAgE6CQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgUFd2hLZXkFCG5ld1doU3RyBQNuaWwFCG5ld1doU3RyAWkBEmZpeFdhcmVob3VzZUZvcm1hdAELbGFuZEFzc2V0SWQDCQECIT0CCAUBaQZjYWxsZXIFDHJlc3RDb250cmFjdAkAAgECDUFjY2VzcyBkZW5pZWQEBXdoS2V5CQESa2V5V2FyZWhvdXNlQnlMYW5kAQULbGFuZEFzc2V0SWQEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQULbGFuZEFzc2V0SWQECWxhbmRJbmRleAkAaQIJAQ9udW1QaWVjZXNCeVNpemUBCQCRAwIJALUJAggFBWFzc2V0C2Rlc2NyaXB0aW9uAgFfBQtyZWNMYW5kU2l6ZQUFU1NJWkUECmluZnJhTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAAABAJ3aAkBDGdldFdhcmVob3VzZQMFBXdoS2V5BQlsYW5kSW5kZXgFCmluZnJhTGV2ZWwEBWxvZnRMCQEFYXNJbnQBCQD8BwQFD2Vjb25vbXlDb250cmFjdAIacmVjYWxjTG9ja2VkVm9sdW1lUkVBRE9OTFkJAMwIAgULbGFuZEFzc2V0SWQJAMwIAgUCd2gFA25pbAUDbmlsBAVsb2Z0TwkBF2dldFdhcmVob3VzZU9jY3VwaWVkVm9sAQUCd2gEBWxvZnRUCQEXZ2V0V2FyZWhvdXNlVG90YWxWb2x1bWUBCQCRAwIFAndoBQt3aElkeExldmVscwQFbG9mdEYJAGUCCQBlAgUFbG9mdFQFBWxvZnRMBQVsb2Z0TwQIbmV3V2hTdHIJALoJAgkAzAgCCQCRAwIFAndoBQt3aElkeExldmVscwkAzAgCCQCRAwIFAndoBQh3aElkeFJlcwkAzAgCCQCRAwIFAndoBQh3aElkeE1hdAkAzAgCCQCRAwIFAndoBQl3aElkeFByb2QJAMwIAgkAuQkCCQDMCAIJAKQDAQUFbG9mdEwJAMwIAgkApAMBBQVsb2Z0TwkAzAgCCQCkAwEFBWxvZnRGCQDMCAIJAKQDAQUFbG9mdFQFA25pbAIBXwUDbmlsAgE6CQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgUFd2hLZXkFCG5ld1doU3RyBQNuaWwFCG5ld1doU3RyAWkBD2ZpeFN0YWtlZFBpZWNlcwEHYWRkcmVzcwMJAQIhPQIIBQFpBmNhbGxlcgUMcmVzdENvbnRyYWN0CQACAQINQWNjZXNzIGRlbmllZAQMc3Rha2VkUGllY2VzAwkAAAIFB2FkZHJlc3MCAAAABAhsYW5kc1N0cgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARVrZXlTdGFrZWRMYW5kc0J5T3duZXIBBQdhZGRyZXNzBAVsYW5kcwMJAQlpc0RlZmluZWQBBQhsYW5kc1N0cgkAvQkCCQEFdmFsdWUBBQhsYW5kc1N0cgIBXwUDbmlsCgEHb25lTGFuZAIDYWNjC2xhbmRBc3NldElkBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFC2xhbmRBc3NldElkBAhsYW5kU2l6ZQkAkQMCCQC1CQIIBQVhc3NldAtkZXNjcmlwdGlvbgIBXwULcmVjTGFuZFNpemUJAGQCBQNhY2MJAQ9udW1QaWVjZXNCeVNpemUBBQhsYW5kU2l6ZQoA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AgICGU5hbWUgdG9vIGxvbmcsIG1heExlbmd0aD0JAKQDAQUKTUFYTkFNRUxFTgQEYWRkcgkApQgBCAUBaQxvcmlnaW5DYWxsZXIEB2FjdGlvbnMEByRtYXRjaDAFBHR5cGUDCQAAAgIHQUNDT1VOVAUHJG1hdGNoMAQKcmV2ZXJzZUtleQkBFmtleUN1c3RvbU5hbWVUb0FkZHJlc3MBBQpjdXN0b21OYW1lBAluYW1lT3duZXIJAKIIAQUKcmV2ZXJzZUtleQMJAQlpc0RlZmluZWQBBQluYW1lT3duZXIJAAIBCQCsAgICGU5hbWUgYWxyZWFkeSByZWdpc3RlcmVkOiAFCmN1c3RvbU5hbWUEDWFkZHJUb05hbWVLZXkJARZrZXlBZGRyZXNzVG9DdXN0b21OYW1lAQUEYWRkcgQHb2xkTmFtZQkAoggBBQ1hZGRyVG9OYW1lS2V5BAdmcmVlT2xkAwkBCWlzRGVmaW5lZAEFB29sZE5hbWUJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBFmtleUN1c3RvbU5hbWVUb0FkZHJlc3MBCQEFdmFsdWUBBQdvbGROYW1lBQNuaWwFA25pbAkAzggCCQDNCAIJAM0IAgUHZnJlZU9sZAkBC1N0cmluZ0VudHJ5AgUNYWRkclRvTmFtZUtleQUKY3VzdG9tTmFtZQkBC1N0cmluZ0VudHJ5AgUKcmV2ZXJzZUtleQUEYWRkcggJARZ1cGRhdGVBY2NTdGF0c0ludGVybmFsAgUEYWRkcgUMeHBDdXN0b21OYW1lAl8xAwkAAAICBExBTkQFByRtYXRjaDAEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQUHYXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQdhc3NldElkAwkBASEBCQEJaXNEZWZpbmVkAQkAnwgBBQd0aW1lS2V5CQACAQkArAICCAUFYXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQEBW93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFB2Fzc2V0SWQJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwkBAiE9AgUFb3duZXIFBGFkZHIJAAIBCQCsAgIFCkxBTkRQUkVGSVgCDSBpcyBub3QgeW91cnMECnJldmVyc2VLZXkJARprZXlMYW5kQ3VzdG9tTmFtZVRvQXNzZXRJZAEFCmN1c3RvbU5hbWUECW5hbWVPd25lcgkAoggBBQpyZXZlcnNlS2V5AwkBCWlzRGVmaW5lZAEFCW5hbWVPd25lcgkAAgEJAKwCAgIZTmFtZSBhbHJlYWR5IHJlZ2lzdGVyZWQ6IAUKY3VzdG9tTmFtZQQOYXNzZXRUb05hbWVLZXkJARprZXlMYW5kQXNzZXRJZFRvQ3VzdG9tTmFtZQEFB2Fzc2V0SWQEB29sZE5hbWUJAKIIAQUOYXNzZXRUb05hbWVLZXkEB2ZyZWVPbGQDCQEJaXNEZWZpbmVkAQUHb2xkTmFtZQkAzAgCCQELRGVsZXRlRW50cnkBCQEaa2V5TGFuZEN1c3RvbU5hbWVUb0Fzc2V0SWQBCQEFdmFsdWUBBQdvbGROYW1lBQNuaWwFA25pbAkAzggCCQDNCAIJAM0IAgUHZnJlZU9sZAkBC1N0cmluZ0VudHJ5AgUOYXNzZXRUb05hbWVLZXkFCmN1c3RvbU5hbWUJAQtTdHJpbmdFbnRyeQIFCnJldmVyc2VLZXkFB2Fzc2V0SWQICQEWdXBkYXRlQWNjU3RhdHNJbnRlcm5hbAIFBGFkZHIFDHhwQ3VzdG9tTmFtZQJfMQMJAAACAgREVUNLBQckbWF0Y2gwBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFB2Fzc2V0SWQEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQUHYXNzZXRJZAMDCQEBIQEJAQlpc0RlZmluZWQBCQCfCAEFB3RpbWVLZXkGCQEBIQEJAQlpc0RlZmluZWQBCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFBGFkZHIJAAIBCQCsAgIIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAQFb3duZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEQa2V5RHVja0lkVG9Pd25lcgEFB2Fzc2V0SWQJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwkBAiE9AgUFb3duZXIFBGFkZHIJAAIBCQCsAgIFCkRVQ0tQUkVGSVgCDSBpcyBub3QgeW91cnMECnJldmVyc2VLZXkJARprZXlEdWNrQ3VzdG9tTmFtZVRvQXNzZXRJZAEFCmN1c3RvbU5hbWUECW5hbWVPd25lcgkAoggBBQpyZXZlcnNlS2V5AwkBCWlzRGVmaW5lZAEFCW5hbWVPd25lcgkAAgEJAKwCAgIZTmFtZSBhbHJlYWR5IHJlZ2lzdGVyZWQ6IAUKY3VzdG9tTmFtZQQOYXNzZXRUb05hbWVLZXkJARprZXlEdWNrQXNzZXRJZFRvQ3VzdG9tTmFtZQEFB2Fzc2V0SWQEB29sZE5hbWUJAKIIAQUOYXNzZXRUb05hbWVLZXkEB2ZyZWVPbGQDCQEJaXNEZWZpbmVkAQUHb2xkTmFtZQkAzAgCCQELRGVsZXRlRW50cnkBCQEaa2V5RHVja0N1c3RvbU5hbWVUb0Fzc2V0SWQBCQEFdmFsdWUBBQdvbGROYW1lBQNuaWwFA25pbAkAzggCCQDNCAIJAM0IAgUHZnJlZU9sZAkBC1N0cmluZ0VudHJ5AgUOYXNzZXRUb05hbWVLZXkFCmN1c3RvbU5hbWUJAQtTdHJpbmdFbnRyeQIFCnJldmVyc2VLZXkFB2Fzc2V0SWQICQEXdXBkYXRlRHVja1N0YXRzSW50ZXJuYWwCBQdhc3NldElkBQx4cEN1c3RvbU5hbWUCXzEJAAIBAhNVbmtub3duIGVudGl0eSB0eXBlCQCUCgIJAM0IAgkAzQgCBQdhY3Rpb25zCQEOU2NyaXB0VHJhbnNmZXIDBQ9lY29ub215Q29udHJhY3QIBQNwbXQGYW1vdW50BQt1c2R0QXNzZXRJZAUMcHJvbG9nQWN0aW9uAAABaQEMc2V0UmVmZXJyYWxzAglvbGRQbGF5ZXIJbmV3UGxheWVyAwkBAiE9AggFAWkPY2FsbGVyUHVibGljS2V5BQNwdWIJAAIBAhFQZXJtaXNzaW9uIGRlbmllZAQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkAwkBASEBCQEJaXNEZWZpbmVkAQkApggBBQlvbGRQbGF5ZXIJAAIBCQCsAgICEUludmFsaWQgYWRkcmVzczogBQlvbGRQbGF5ZXIDCQEBIQEJAQlpc0RlZmluZWQBCQCmCAEFCW5ld1BsYXllcgkAAgEJAKwCAgIRSW52YWxpZCBhZGRyZXNzOiAFCW5ld1BsYXllcgQHb2xkc0tleQkBCWtleU9sZGllcwAEBG9sZHMJAKIIAQUHb2xkc0tleQQGb2xkaWVzAwkBCWlzRGVmaW5lZAEFBG9sZHMJALwJAgkBBXZhbHVlAQUEb2xkcwIBXwUDbmlsAwkBD2NvbnRhaW5zRWxlbWVudAIFBm9sZGllcwUJbmV3UGxheWVyCQACAQkArAICBQluZXdQbGF5ZXICJiBpcyBub3QgbmV3YmllIChhbHJlYWR5IGhhcyByZWZlcnJhbHMpBAhyZWZCeUtleQkBD2tleUFkZHJlc3NSZWZCeQEFCW5ld1BsYXllcgQFcmVmQnkJAKIIAQUIcmVmQnlLZXkDAwkBCWlzRGVmaW5lZAEFBXJlZkJ5CQEJaXNEZWZpbmVkAQkApggBCQEFdmFsdWUBBQVyZWZCeQcJAAIBCQCsAgIJAKwCAgUJbmV3UGxheWVyAhQgYWxyZWFkeSBoYXMgcmVmQnk6IAkBBXZhbHVlAQUFcmVmQnkEB3JlZnNLZXkJARNrZXlBZGRyZXNzUmVmZXJyYWxzAQUJb2xkUGxheWVyBARyZWZzCQCiCAEFB3JlZnNLZXkECXJlZnNBcnJheQMJAQlpc0RlZmluZWQBBQRyZWZzCQC8CQIJAQV2YWx1ZQEFBHJlZnMCAV8FA25pbAMJAQ9jb250YWluc0VsZW1lbnQCBQlyZWZzQXJyYXkFCW5ld1BsYXllcgkAAgEJAKwCAgkArAICCQCsAgIFCW9sZFBsYXllcgISIGFscmVhZHkgY29udGFpbnMgBQluZXdQbGF5ZXICESB3aXRoaW4gcmVmZXJyYWxzBAduZXdSZWZzCQC6CQIJAM0IAgUJcmVmc0FycmF5BQluZXdQbGF5ZXICAV8EB25ld09sZHMDCQEPY29udGFpbnNFbGVtZW50AgUGb2xkaWVzBQlvbGRQbGF5ZXIJAQV2YWx1ZQEFBG9sZHMJALoJAgkAzQgCBQZvbGRpZXMFCW9sZFBsYXllcgIBXwkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIFCHJlZkJ5S2V5BQlvbGRQbGF5ZXIJAMwIAgkBC1N0cmluZ0VudHJ5AgUHcmVmc0tleQUHbmV3UmVmcwkAzAgCCQELU3RyaW5nRW50cnkCBQdvbGRzS2V5BQduZXdPbGRzCQDMCAIFDHByb2xvZ0FjdGlvbgUDbmlsAAABaQEQZGlzdHJpYnV0ZVBvaW50cwUIc3RyZW5ndGgIYWNjdXJhY3kJaW50ZWxsZWN0CWVuZHVyYW5jZQlkZXh0ZXJpdHkEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQEYWRkcgkApQgBCAUBaQxvcmlnaW5DYWxsZXIEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQKZnJlZUtleUFjYwkBEWtleVVzZXJGcmVlUG9pbnRzAQUEYWRkcgQNZnJlZVBvaW50c0FjYwkBC3ZhbHVlT3JFbHNlAgkAmggCBQ9zdGFraW5nQ29udHJhY3QFCmZyZWVLZXlBY2MAAAQLZnJlZUtleUR1Y2sJARFrZXlEdWNrRnJlZVBvaW50cwEFC2R1Y2tBc3NldElkBA5mcmVlUG9pbnRzRHVjawkBC3ZhbHVlT3JFbHNlAgkAmggCBQ9zdGFraW5nQ29udHJhY3QFC2ZyZWVLZXlEdWNrAAAEB3N1bUZyZWUJAGQCBQ1mcmVlUG9pbnRzQWNjBQ5mcmVlUG9pbnRzRHVjawQPc3VtVG9EaXN0cmlidXRlCQBkAgkAZAIJAGQCCQBkAgUIc3RyZW5ndGgFCGFjY3VyYWN5BQlpbnRlbGxlY3QFCWVuZHVyYW5jZQUJZGV4dGVyaXR5AwkAZgIFD3N1bVRvRGlzdHJpYnV0ZQUHc3VtRnJlZQkAAgEJAKwCAgkArAICAg9UaGVyZSBhcmUgb25seSAJAKQDAQUHc3VtRnJlZQIaIGZyZWUgcG9pbnRzIHRvIGRpc3RyaWJ1dGUECGNoYXJzS2V5CQEMa2V5RHVja0NoYXJzAQULZHVja0Fzc2V0SWQEBWNoYXJzCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0BQhjaGFyc0tleQIJMF8wXzBfMF8wAgFfBAZuZXdBY2MJAGUCBQ1mcmVlUG9pbnRzQWNjBQ9zdW1Ub0Rpc3RyaWJ1dGUJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUKZnJlZUtleUFjYwMJAGYCAAAFBm5ld0FjYwAABQZuZXdBY2MJAMwIAgkBDEludGVnZXJFbnRyeQIFC2ZyZWVLZXlEdWNrAwkAZgIAAAUGbmV3QWNjCQBkAgUOZnJlZVBvaW50c0R1Y2sFBm5ld0FjYwUOZnJlZVBvaW50c0R1Y2sJAMwIAgkBC1N0cmluZ0VudHJ5AgUIY2hhcnNLZXkJALkJAgkAzAgCCQCkAwEJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFY2hhcnMFDGNoYXJTdHJlbmd0aAUIc3RyZW5ndGgJAMwIAgkApAMBCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBWNoYXJzBQxjaGFyQWNjdXJhY3kFCGFjY3VyYWN5CQDMCAIJAKQDAQkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVjaGFycwUNY2hhckludGVsbGVjdAUJaW50ZWxsZWN0CQDMCAIJAKQDAQkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVjaGFycwUNY2hhckVuZHVyYW5jZQUJZW5kdXJhbmNlCQDMCAIJAKQDAQkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVjaGFycwUNY2hhckRleHRlcml0eQUJZGV4dGVyaXR5BQNuaWwCAV8JAMwIAgUMcHJvbG9nQWN0aW9uBQNuaWwAAAFpARxzcGxpdEJ5R2xvYmFsV2VpZ2h0c1JFQURPTkxZAQZhbW91bnQJAJQKAgUDbmlsCQESZ2V0TmVlZGVkTWF0ZXJpYWxzAQUGYW1vdW50AWkBJHNwbGl0QnlHbG9iYWxBbmRMb2NhbFdlaWdodHNSRUFET05MWQMJbWF0QW1vdW50CXJlc0Ftb3VudAh0ZXJyYWlucwQNdGVycmFpbkNvdW50cwkBDWNvdW50VGVycmFpbnMBBQh0ZXJyYWlucwkAlAoCBQNuaWwJAJQKAgkBEmdldE5lZWRlZE1hdGVyaWFscwEFCW1hdEFtb3VudAkBE2Rpc3RyaWJ1dGVCeVdlaWdodHMCBQlyZXNBbW91bnQFDXRlcnJhaW5Db3VudHMBaQETZ2V0QmFja3BhY2tSRUFET05MWQELZHVja0Fzc2V0SWQJAJQKAgUDbmlsCQC5CQIJAQtnZXRCYWNrcGFjawEJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkAgE6AWkBFGdldFdhcmVob3VzZVJFQURPTkxZAQtsYW5kQXNzZXRJZAQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQtsYW5kQXNzZXRJZAQJbGFuZEluZGV4CQBpAgkBD251bVBpZWNlc0J5U2l6ZQEJAJEDAgkAtQkCCAUFYXNzZXQLZGVzY3JpcHRpb24CAV8FC3JlY0xhbmRTaXplBQVTU0laRQQKaW5mcmFMZXZlbAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEFC2xhbmRBc3NldElkAAAJAJQKAgUDbmlsCQC6CQIJAQxnZXRXYXJlaG91c2UDCQESa2V5V2FyZWhvdXNlQnlMYW5kAQULbGFuZEFzc2V0SWQFCWxhbmRJbmRleAUKaW5mcmFMZXZlbAIBOgFpAQpzYXZlTGFzdFR4AAMDCQECIT0CCAUBaQZjYWxsZXIFC3dsZ0NvbnRyYWN0CQECIT0CCAUBaQZjYWxsZXIFD2Vjb25vbXlDb250cmFjdAcJAAIBAg1BY2Nlc3MgZGVuaWVkCQCUCgIJAMwIAgkBBnByb2xvZwEFAWkFA25pbAAqAWkBD3VwZGF0ZUR1Y2tTdGF0cwILZHVja0Fzc2V0SWQHZGVsdGFYUAMJAQIhPQIIBQFpBmNhbGxlcgUPZWNvbm9teUNvbnRyYWN0CQACAQINQWNjZXNzIGRlbmllZAkBF3VwZGF0ZUR1Y2tTdGF0c0ludGVybmFsAgULZHVja0Fzc2V0SWQFB2RlbHRhWFABaQEOdXBkYXRlQWNjU3RhdHMCBGFkZHIHZGVsdGFYUAMJAQIhPQIIBQFpBmNhbGxlcgUPZWNvbm9teUNvbnRyYWN0CQACAQINQWNjZXNzIGRlbmllZAkBFnVwZGF0ZUFjY1N0YXRzSW50ZXJuYWwCBQRhZGRyBQdkZWx0YVhQAWkBCWVxdWlwRHVjawEJZXF1aXBtZW50BAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBGFkZHIJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFBGFkZHICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQEBWVxS2V5CQEQa2V5RHVja0VxdWlwbWVudAEFC2R1Y2tBc3NldElkBAtjdXJyZW50U2VncwkAtQkCCQELdmFsdWVPckVsc2UCCQCiCAEFBWVxS2V5AhcsOyxfLDssXyw7LF8sOyxfLDssXyw7LAIBXwQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkEBW5ld0VxCQC1CQIFCWVxdWlwbWVudAIBXwMJAQIhPQIJAJADAQUFbmV3RXEFC05VTVNFR01FTlRTCQACAQIWV3JvbmcgZXF1aXBtZW50IHN0cmluZwQEcmVxcwkBDGdldER1Y2tTdGF0cwIFBHRoaXMFC2R1Y2tBc3NldElkBAl0ZW1wUHJvZEIJAQZkcmVzc0IEBQtjdXJyZW50U2VncwkBDnByb2RTdHJUb0J5dGVzAQkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kBgUEcmVxcwQIbmV3UHJvZEIJAQZkcmVzc0IEBQVuZXdFcQUJdGVtcFByb2RCBwUEcmVxcwQKbmV3UHJvZFN0cgkBDmJ5dGVzVG9Qcm9kU3RyAQUIbmV3UHJvZEIJAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCBQVlcUtleQUJZXF1aXBtZW50CQDMCAIJAQtTdHJpbmdFbnRyeQIFBWJwS2V5CQC6CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAkAzAgCBQpuZXdQcm9kU3RyBQNuaWwCAToJAMwIAgUMcHJvbG9nQWN0aW9uBQNuaWwAAABP9uvN", "height": 2674164, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 2NcKvAgbF6WbQQedZPYNRKY17h7AK6BR5FfRVLB1Hf5K Next: BvMzugfkeWcn5ckPb4ECCsXaxgKn14f4nq5jyM2NmtQd Diff:
OldNewDifferences
1212
1313 let f = 3
1414
15-let g = 0
16-
17-let h = 1
18-
19-let i = 2
20-
21-let j = 3
22-
23-let k = 4
24-
25-let l = 6
26-
27-let m = 2
15+let g = ["Strength", "Accuracy", "Intellect", "Endurance", "Dexterity", "Level", "Health"]
16+
17+let h = 0
18+
19+let i = 1
20+
21+let j = 2
22+
23+let k = 3
24+
25+let l = 4
26+
27+let m = 6
2828
2929 let n = 2
3030
31-func o (p) = ("duckChars_" + p)
32-
33-
34-func q (p) = ("duckXP_" + p)
35-
36-
37-func r (p) = ("duckLevel_" + p)
38-
39-
40-func s (p) = ("duckFreePoints_" + p)
41-
42-
43-func t (p) = ("duckEquipment_" + p)
44-
45-
46-func u (b) = ("userXP_" + b)
47-
48-
49-func v (b) = ("userLevel_" + b)
50-
51-
52-func w (b) = ("userFreePoints_" + b)
53-
54-
55-let x = 100000
56-
57-let y = 50000
58-
59-let z = 10000
60-
61-let A = 100000
62-
63-let B = 5000000
64-
65-let C = 50000000
66-
67-let D = 100000
68-
69-let E = 10000000
70-
71-let F = 10000000
72-
73-let G = 10000
74-
75-func H (I) = fraction(d, pow(I, 4, e, 4, 4, DOWN), c)
76-
77-
78-func J (K) = (100 + K)
79-
80-
81-func L (M,N) = {
82- let O = H(N)
83-[O, (f * (O - M))]
84- }
85-
86-
87-let P = "LAND"
88-
89-let Q = "DUCK"
90-
91-let R = "PRESALE"
92-
93-let S = 6
94-
95-let T = 3456000
96-
97-let U = 86400000
98-
99-let V = 10000000000
100-
101-let W = "Africa_F_Africa"
102-
103-let X = 39637
104-
105-let Y = 10
106-
107-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"]
108-
109-let aa = ["Americas", "Europe", "Asia", "Africa", "Oceania"]
110-
111-let ab = 10000000
112-
113-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"]
114-
115-let ad = 6
116-
117-let ae = 10
31+let o = 2
32+
33+func p (q) = ("duckHealth_" + q)
34+
35+
36+func r (q) = ("duckChars_" + q)
37+
38+
39+func s (q) = ("duckXP_" + q)
40+
41+
42+func t (q) = ("duckLevel_" + q)
43+
44+
45+func u (q) = ("duckFreePoints_" + q)
46+
47+
48+func v (q) = ("duckEquipment_" + q)
49+
50+
51+func w (b) = ("userXP_" + b)
52+
53+
54+func x (b) = ("userLevel_" + b)
55+
56+
57+func y (b) = ("userFreePoints_" + b)
58+
59+
60+let z = 100000
61+
62+let A = 50000
63+
64+let B = 10000
65+
66+let C = 100000
67+
68+let D = 5000000
69+
70+let E = 50000000
71+
72+let F = 100000
73+
74+let G = 10000000
75+
76+let H = 10000000
77+
78+let I = 10000
79+
80+func J (K) = fraction(d, pow(K, 4, e, 4, 4, DOWN), c)
81+
82+
83+func L (M) = (100 + M)
84+
85+
86+func N (O,P) = {
87+ let Q = J(P)
88+[Q, (f * (Q - O))]
89+ }
90+
91+
92+func R (S,q) = {
93+ let T = split(valueOrElse(getString(S, r(q)), "0_0_0_0_0"), "_")
94+ let U = valueOrElse(getInteger(S, t(q)), 0)
95+ let V = valueOrElse(getInteger(S, p(q)), L(U))
96+[parseIntValue(T[h]), parseIntValue(T[i]), parseIntValue(T[j]), parseIntValue(T[k]), parseIntValue(T[l]), U, V]
97+ }
98+
99+
100+let W = "LAND"
101+
102+let X = "DUCK"
103+
104+let Y = "PRESALE"
105+
106+let Z = 6
107+
108+let aa = 3456000
109+
110+let ab = 86400000
111+
112+let ac = 10000000000
113+
114+let ad = "Africa_F_Africa"
115+
116+let ae = 39637
118117
119118 let af = 10
120119
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))
120+let ag = ["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"]
121+
122+let ah = ["Americas", "Europe", "Asia", "Africa", "Oceania"]
123+
124+let ai = 10000000
125+
126+let aj = ["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"]
127+
128+let ak = 6
129+
130+let al = 9
131+
132+let am = 10
133+
134+let an = 10
135+
136+let ao = 0
137+
138+let ap = 1
139+
140+let aq = 2
141+
142+let ar = 3
143+
144+let as = 4
145+
146+let at = 0
147+
148+let au = 1
149+
150+let av = 2
151+
152+let aw = 3
153+
154+let ax = 0
155+
156+let ay = 1
157+
158+let az = 2
159+
160+let aA = 3
161+
162+func aB (b) = ("lastTxIdByUser_" + b)
163+
164+
165+func aC (aD) = ("nftOwner_" + aD)
166+
167+
168+func aE (aD) = ("landCustomNameByAssetId_" + aD)
169+
170+
171+func aF (aD) = ("stakedTime_" + aD)
172+
173+
174+func aG (aD) = ("infraLevel_" + aD)
175+
176+
177+func aH (aI,aD) = makeString(["landArtStatus", aI, aD], "_")
178+
179+
180+func aJ (aK,aD,aL) = ((((("stakedTimeByTypeAssetIdAndOwner_" + aK) + "_") + aD) + "_") + aL)
181+
182+
183+func aM (aN) = ("wareHouse_" + aN)
184+
185+
186+func aO (aD) = ("duckCustomNameByAssetId_" + aD)
187+
188+
189+func aP (b) = ("accountCustomNameByAddr_" + b)
190+
191+
192+func aQ (b) = ("accRefBy_" + b)
193+
194+
195+func aR (q) = ("onboardArtActivatedOnDuck_" + q)
196+
197+
198+func aS (b) = ("onboardArtActivatedDuckBy_" + b)
199+
200+
201+func aT (b) = ("accReferrals_" + b)
202+
203+
204+func aU (aD) = ("duckOwner_" + aD)
205+
206+
207+func aV (aL) = ("stakedDuckByOwner_" + aL)
208+
209+
210+func aW (q) = ("backPack_" + q)
211+
212+
213+func aX (q) = ("duckLocation_" + q)
214+
215+
216+func aY () = "contractsBlocked"
217+
218+
219+func aZ (ba) = ("%s%s__userGwlReleaseTime__" + ba)
220+
221+
222+func bb () = "emergencyWarehouseProducts"
223+
224+
225+let bc = 1
226+
227+let bd = 2
228+
229+func be (bf) = (parseIntValue(bf[ak]) * ai)
230+
231+
232+let bg = true
233+
234+let bh = take(drop(this.bytes, 1), 1)
235+
236+let bi = {
237+ let bj = bh
238+ if ((base58'2W' == bj))
227239 then base58'9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi'
228- else if ((base58'2T' == bc))
240+ else if ((base58'2T' == bj))
229241 then base58'6mWwf9mZBjVgkC54idpyaZLQfAosD914wT8fGf2iiY63'
230242 else throw("Unknown chain")
231243 }
232244
233-let bd = {
234- let bc = ba
235- if ((base58'2W' == bc))
245+let bk = {
246+ let bj = bh
247+ if ((base58'2W' == bj))
236248 then "3PQCuvFbvh4LkPUnrnU1z3jnbA1p9m3WNhv"
237- else if ((base58'2T' == bc))
249+ else if ((base58'2T' == bj))
238250 then "3MumkGGztCKAXpWDqxkddofqXSUbqQkvSJy"
239251 else throw("Unknown chain")
240252 }
241253
242-let be = {
243- let bc = ba
244- if ((base58'2W' == bc))
254+let bl = {
255+ let bj = bh
256+ if ((base58'2W' == bj))
245257 then 10000000000
246- else if ((base58'2T' == bc))
258+ else if ((base58'2T' == bj))
247259 then 100000000
248260 else throw("Unknown chain")
249261 }
250262
251-let bf = {
252- let bc = ba
253- if ((base58'2W' == bc))
263+let bm = {
264+ let bj = bh
265+ if ((base58'2W' == bj))
254266 then 600000
255- else if ((base58'2T' == bc))
267+ else if ((base58'2T' == bj))
256268 then 60000
257269 else throw("Unknown chain")
258270 }
259271
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"))
272+let bn = "__"
273+
274+let bo = 1000000
275+
276+let bp = 100000000
277+
278+let bq = 25
279+
280+let br = 100
281+
282+let bs = 225
283+
284+let bt = 400
285+
286+let bu = 625
287+
288+func bv (bw,bx) = valueOrErrorMessage(getString(bw, bx), makeString(["mandatory ", toString(bw), ".", bx, " is not defined"], ""))
289+
290+
291+let by = 1
292+
293+let bz = 2
294+
295+let bA = 3
296+
297+let bB = 4
298+
299+func bC () = "%s__restConfig"
300+
301+
302+func bD () = "%s__restAddr"
303+
304+
305+func bE (bF) = split_4C(bv(bF, bC()), bn)
306+
307+
308+func bG (bH,bI) = valueOrErrorMessage(addressFromString(bH[bI]), ("Rest cfg doesn't contain address at index " + toString(bI)))
309+
310+
311+let bJ = addressFromStringValue(valueOrElse(getString(this, bD()), bk))
312+
313+let bH = bE(bJ)
314+
315+let S = bG(bH, by)
316+
317+let bK = bG(bH, bz)
318+
319+let bL = bG(bH, bA)
320+
321+let bM = bG(bH, bB)
322+
323+let bN = 0
324+
325+let bO = 1
326+
327+let bP = 2
328+
329+let bQ = 3
330+
331+func bR () = "resTypesProportions"
332+
333+
334+func bS (aL) = ("stakedLandsByOwner_" + aL)
335+
336+
337+func bT (aL) = ("stakedPiecesByOwner_" + aL)
338+
339+
340+func bU (bV) = {
341+ let bj = bV
342+ if ($isInstanceOf(bj, "String"))
331343 then {
332- let bQ = bc
333- bQ
344+ let bW = bj
345+ bW
334346 }
335347 else throw("fail to cast into String")
336348 }
337349
338350
339-func bR (bP) = {
340- let bc = bP
341- if ($isInstanceOf(bc, "Int"))
351+func bX (bV) = {
352+ let bj = bV
353+ if ($isInstanceOf(bj, "Int"))
342354 then {
343- let bS = bc
344- bS
355+ let bY = bj
356+ bY
345357 }
346358 else throw("fail to cast into Int")
347359 }
348360
349361
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
362+func bZ (ca) = {
363+ let bj = ca
364+ if (("S" == bj))
365+ then bq
366+ else if (("M" == bj))
367+ then br
368+ else if (("L" == bj))
369+ then bs
370+ else if (("XL" == bj))
371+ then bt
372+ else if (("XXL" == bj))
373+ then bu
362374 else throw("Unknown land size")
363375 }
364376
365377
366-let bV = {
367- let bc = ba
368- if ((base58'2W' == bc))
378+let cb = {
379+ let bj = bh
380+ if ((base58'2W' == bj))
369381 then addressFromStringValue("3PEktVux2RhchSN63DsDo4b4mz4QqzKSeDv")
370- else if ((base58'2T' == bc))
382+ else if ((base58'2T' == bj))
371383 then this
372384 else throw("Unknown chain")
373385 }
374386
375-let bW = {
376- let bc = ba
377- if ((base58'2W' == bc))
387+let cc = {
388+ let bj = bh
389+ if ((base58'2W' == bj))
378390 then addressFromStringValue("3PDVuU45H7Eh5dmtNbnRNRStGwULA7NY6Hb")
379- else if ((base58'2T' == bc))
391+ else if ((base58'2T' == bj))
380392 then this
381393 else throw("Unknown chain")
382394 }
383395
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))
396+let cd = base58'6LfPuKJjLgekmncBhMg2LZyMTNVzZBccXR28ySXm9uXD'
397+
398+let ce = [30, 60, 120]
399+
400+let cf = 300000
401+
402+let cg = 5000000
403+
404+let ch = 50
405+
406+let ci = 10000000
407+
408+let cj = {
409+ let bj = bh
410+ if ((base58'2W' == bj))
399411 then 252289527462
400- else if ((base58'2T' == bc))
412+ else if ((base58'2T' == bj))
401413 then 2522895274
402414 else throw("Unknown chain")
403415 }
404416
405-let ce = {
406- let bc = ba
407- if ((base58'2W' == bc))
417+let ck = {
418+ let bj = bh
419+ if ((base58'2W' == bj))
408420 then 250000000
409- else if ((base58'2T' == bc))
421+ else if ((base58'2T' == bj))
410422 then 250000000
411423 else throw("Unknown chain")
412424 }
413425
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))
426+let cl = toBigInt(5)
427+
428+let cm = toBigInt(20)
429+
430+let cn = toBigInt((20 * 20))
431+
432+let co = toBigInt(((20 * 20) * 20))
433+
434+let cp = toBigInt((((20 * 20) * 20) * 20))
435+
436+let cq = toBigInt(((((20 * 20) * 20) * 20) * 20))
437+
438+let cr = 500
439+
440+func cs () = "nextLandNum"
441+
442+
443+func ct (cu) = ("landToAsset_" + cu)
444+
445+
446+func cv (cw) = ("landByCustomName_" + cw)
447+
448+
449+func cx (aD,aL) = ((("infraLevelByAssetIdAndOwner_" + aD) + "_") + aL)
450+
451+
452+func cy (aI,aD,aL) = makeString(["landArtStatusByTypeAssetIdAndOwner", aI, aD, aL], "_")
453+
454+
455+func cz (cu) = ("landOwner_" + cu)
456+
457+
458+func cA (cw) = ("duckByCustomName_" + cw)
459+
460+
461+func cB (cw) = ("accountByCustomName_" + cw)
462+
463+
464+func cC () = "oldiesList"
465+
466+
467+let cD = 0
468+
469+let cE = 1
470+
471+let cF = 2
472+
473+let cG = 0
474+
475+let cH = 5
476+
477+let cI = 6
478+
479+let cJ = 7
480+
481+func cK (cu,ca) = ((W + cu) + ca)
482+
483+
484+func cL (cM,cN) = {
485+ let cO = (((((cN[0] + cN[1]) + cN[2]) + cN[3]) + cN[4]) + cN[5])
486+ if ((0 >= cO))
475487 then throw("Zero weights sum")
476488 else {
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
489+ let cP = fraction(cM, bo, cO)
490+ func cQ (cR,cS) = (cR :+ fraction(cS, cP, bo))
491+
492+ let cT = cN
493+ let cU = size(cT)
494+ let cV = nil
495+ func cW (cX,cY) = if ((cY >= cU))
496+ then cX
497+ else cQ(cX, cT[cY])
498+
499+ func cZ (cX,cY) = if ((cY >= cU))
500+ then cX
489501 else throw("List size exceeds 6")
490502
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))
503+ cZ(cW(cW(cW(cW(cW(cW(cV, 0), 1), 2), 3), 4), 5), 6)
504+ }
505+ }
506+
507+
508+func da (cM) = {
509+ let db = split(value(getString(bR())), "_")
510+ if ((size(db) != Z))
499511 then throw("Wrong proportions data")
500512 else {
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))
514- }
515-
516- if (cY)
513+ let dc = [parseIntValue(db[0]), parseIntValue(db[1]), parseIntValue(db[2]), parseIntValue(db[3]), parseIntValue(db[4]), parseIntValue(db[5])]
514+ cL(cM, dc)
515+ }
516+ }
517+
518+
519+func dd (de,df,dg) = {
520+ let dh = da(dg)
521+ func di (cR,bI) = {
522+ let dj = (parseIntValue(df[bI]) - dh[bI])
523+ if ((0 > dj))
524+ then throw(((((("Not enough material idx=" + toString(bI)) + ", you have ") + df[bI]) + ", but need ") + toString(dh[bI])))
525+ else (cR :+ toString(dj))
526+ }
527+
528+ if (de)
517529 then {
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
530+ let cT = [0, 1, 2, 3, 4, 5]
531+ let cU = size(cT)
532+ let cV = nil
533+ func cW (cX,cY) = if ((cY >= cU))
534+ then cX
535+ else di(cX, cT[cY])
536+
537+ func cZ (cX,cY) = if ((cY >= cU))
538+ then cX
527539 else throw("List size exceeds 6")
528540
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
541+ cZ(cW(cW(cW(cW(cW(cW(cV, 0), 1), 2), 3), 4), 5), 6)
542+ }
543+ else df
544+ }
545+
546+
547+func dk (dl,dm) = if ((dm == ""))
548+ then dl
537549 else {
538- let dh = if ((df == ""))
550+ let dn = if ((dl == ""))
539551 then nil
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))
552+ else split(dl, "_")
553+ func do (cR,dp) = {
554+ let dq = cR._1
555+ func dr (ds,dt) = {
556+ let du = split(dt, ",")
557+ if ((size(du) != 2))
546558 then throw("Incorrect format, should be index,amount")
547559 else {
548- let bB = parseIntValue(do[0])
549- if (if ((0 > bB))
560+ let bI = parseIntValue(du[0])
561+ if (if ((0 > bI))
550562 then true
551- else (bB >= size(ac)))
563+ else (bI >= size(aj)))
552564 then throw("Unknown product idx")
553- else if ((bB != dk))
554- then dm
565+ else if ((bI != dq))
566+ then ds
555567 else {
556- let dp = parseIntValue(do[1])
557- if ((0 >= dp))
568+ let dv = parseIntValue(du[1])
569+ if ((0 >= dv))
558570 then throw("Pass only positive amounts")
559- else (dm + dp)
571+ else (ds + dv)
560572 }
561573 }
562574 }
563575
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
576+ let dw = {
577+ let cT = split(dm, "_")
578+ let cU = size(cT)
579+ let cV = 0
580+ func cW (cX,cY) = if ((cY >= cU))
581+ then cX
582+ else dr(cX, cT[cY])
583+
584+ func cZ (cX,cY) = if ((cY >= cU))
585+ then cX
574586 else throw("List size exceeds 10")
575587
576- cT(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
588+ cZ(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
577589 }
578- let dr = if ((size(dh) > dk))
579- then parseIntValue(dh[dk])
590+ let dx = if ((size(dn) > dq))
591+ then parseIntValue(dn[dq])
580592 else 0
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
593+ let dy = if ((dx >= dw))
594+ then (dx - dw)
595+ else throw(((((("You have " + toString(dx)) + " of ") + ag[dq]) + ", but tried to use ") + toString(dw)))
596+ $Tuple2((dq + 1), (cR._2 :+ toString(dy)))
597+ }
598+
599+ let dz = {
600+ let cT = aj
601+ let cU = size(cT)
602+ let cV = $Tuple2(0, nil)
603+ func cW (cX,cY) = if ((cY >= cU))
604+ then cX
605+ else do(cX, cT[cY])
606+
607+ func cZ (cX,cY) = if ((cY >= cU))
608+ then cX
597609 else throw("List size exceeds 50")
598610
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, "_")
602- }
603-
604-
605-func du (dv) = {
606- let dh = if ((dv == ""))
611+ cZ(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cV, 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)
612+ }
613+ makeString(dz._2, "_")
614+ }
615+
616+
617+func dA (dB) = {
618+ let dn = if ((dB == ""))
607619 then nil
608- else split(dv, "_")
609- func dw (cL,aY) = {
610- let dk = (size(cL) / 8)
611- let dr = if ((size(dh) > dk))
612- then parseIntValue(dh[dk])
620+ else split(dB, "_")
621+ func dC (cR,bf) = {
622+ let dq = (size(cR) / 8)
623+ let dx = if ((size(dn) > dq))
624+ then parseIntValue(dn[dq])
613625 else 0
614- (cL + toBytes(dr))
615- }
616-
617- let cN = ac
618- let cO = size(cN)
619- let cP = base58''
620- func cQ (cR,cS) = if ((cS >= cO))
621- then cR
622- else dw(cR, cN[cS])
623-
624- func cT (cR,cS) = if ((cS >= cO))
625- then cR
626+ (cR + toBytes(dx))
627+ }
628+
629+ let cT = aj
630+ let cU = size(cT)
631+ let cV = base58''
632+ func cW (cX,cY) = if ((cY >= cU))
633+ then cX
634+ else dC(cX, cT[cY])
635+
636+ func cZ (cX,cY) = if ((cY >= cU))
637+ then cX
626638 else throw("List size exceeds 50")
627639
628- 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)
629- }
630-
631-
632-func dx (dy) = {
633- func dz (cL,aY) = {
634- let dk = size(cL)
635- let dA = take(drop(dy, (8 * dk)), 8)
636- (cL :+ toString(toInt(dA)))
640+ cZ(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cV, 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)
641+ }
642+
643+
644+func dD (dE) = {
645+ func dF (cR,bf) = {
646+ let dq = size(cR)
647+ let dG = take(drop(dE, (8 * dq)), 8)
648+ (cR :+ toString(toInt(dG)))
637649 }
638650
639651 makeString({
640- let cN = ac
641- let cO = size(cN)
642- let cP = nil
643- func cQ (cR,cS) = if ((cS >= cO))
644- then cR
645- else dz(cR, cN[cS])
646-
647- func cT (cR,cS) = if ((cS >= cO))
648- then cR
652+ let cT = aj
653+ let cU = size(cT)
654+ let cV = nil
655+ func cW (cX,cY) = if ((cY >= cU))
656+ then cX
657+ else dF(cX, cT[cY])
658+
659+ func cZ (cX,cY) = if ((cY >= cU))
660+ then cX
649661 else throw("List size exceeds 50")
650662
651- 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)
663+ cZ(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cV, 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)
652664 }, "_")
653665 }
654666
655667
656-func dB (dC,dh,dD,dE,dF,dG) = {
657- let do = split(dC, ":")
658- if ((size(do) != 2))
668+func dH (dI,dJ) = {
669+ func dK (cR,dq) = if ((parseIntValue(dJ[dq]) > dI[dq]))
670+ then throw(("Requirement not satisfied: " + g[dq]))
671+ else true
672+
673+ let cT = [0, 1, 2, 3, 4, 5, 6]
674+ let cU = size(cT)
675+ let cV = false
676+ func cW (cX,cY) = if ((cY >= cU))
677+ then cX
678+ else dK(cX, cT[cY])
679+
680+ func cZ (cX,cY) = if ((cY >= cU))
681+ then cX
682+ else throw("List size exceeds 7")
683+
684+ cZ(cW(cW(cW(cW(cW(cW(cW(cV, 0), 1), 2), 3), 4), 5), 6), 7)
685+ }
686+
687+
688+func dL (dM,dn,dN,dO,dP,dQ,dI) = {
689+ let du = split(dM, ":")
690+ if ((size(du) != 2))
659691 then throw("Incorrect format, should be index:amount")
660692 else {
661- let dH = parseIntValue(do[0])
662- let dI = parseIntValue(do[1])
663- if (if ((0 > dH))
693+ let dR = parseIntValue(du[0])
694+ let dS = parseIntValue(du[1])
695+ if (if ((0 > dR))
664696 then true
665- else (dH >= size(ac)))
697+ else (dR >= size(aj)))
666698 then throw("Unknown product idx")
667- else if ((0 > dI))
699+ else if ((0 > dS))
668700 then throw("Count can't be negative")
669- else if ((dI == 0))
670- then $Tuple2(dh, false)
701+ else if ((dS == 0))
702+ then $Tuple2(dn, false)
671703 else {
672- let dJ = take(dh, (8 * dH))
673- let dr = toInt(take(drop(dh, (8 * dH)), 8))
674- let dK = drop(dh, (8 * (dH + 1)))
675- if (if (!(dD))
676- then (dI > dr)
704+ let dT = take(dn, (8 * dR))
705+ let dx = toInt(take(drop(dn, (8 * dR)), 8))
706+ let dU = drop(dn, (8 * (dR + 1)))
707+ let bf = split(aj[dR], "_")
708+ if (if (!(dN))
709+ then (dS > dx)
677710 else false)
678- then throw(((((("You have " + toString(dr)) + " of ") + Z[dH]) + ", but tried to use ") + toString(dI)))
711+ then throw(((((("You have " + toString(dx)) + " of ") + ag[dR]) + ", but tried to use ") + toString(dS)))
679712 else {
680- let dL = if (!(dD))
713+ let dV = if (if (!(dN))
714+ then dH(dI, split(bf[al], ","))
715+ else false)
681716 then {
682- let dM = split(ac[dH], "_")[ae]
683- if ((dM == ""))
717+ let dW = bf[am]
718+ if ((dW == ""))
684719 then throw("Item cannot be equipped")
685720 else {
686- let dN = parseIntValue(dM)
687- let dO = (dN / 100)
688- if ((dE != dO))
721+ let dX = parseIntValue(dW)
722+ let dY = (dX / 100)
723+ if ((dO != dY))
689724 then throw("Segment incompatible")
690725 else {
691- let dP = ((dN % 100) / 10)
692- if ((dF != dP))
726+ let dZ = ((dX % 100) / 10)
727+ if ((dP != dZ))
693728 then throw("Slot incompatible")
694729 else {
695- let dQ = (dN % 10)
696- if (if ((dG != 0))
697- then (dQ > 1)
730+ let ea = (dX % 10)
731+ if (if ((dQ != 0))
732+ then (ea > 1)
698733 else false)
699734 then throw("Big items should occupy slot 0")
700- else (dQ > 1)
735+ else (ea > 1)
701736 }
702737 }
703738 }
704739 }
705740 else false
706- $Tuple2(((dJ + toBytes((dr + (if (dD)
707- then dI
708- else -(dI))))) + dK), dL)
741+ $Tuple2(((dT + toBytes((dx + (if (dN)
742+ then dS
743+ else -(dS))))) + dU), dV)
709744 }
710745 }
711746 }
712747 }
713748
714749
715-func dR (dS,dT,dD,dE,dF) = if ((dS != ""))
750+func eb (ec,ed,dN,dO,dP,dJ) = if ((ec != ""))
716751 then {
717- let dU = split(dS, ",")
718- if ((size(dU) > n))
752+ let ee = split(ec, ",")
753+ if ((size(ee) > o))
719754 then throw("Wrong slots format")
720755 else {
721- let dV = dU[0]
722- let dW = if ((size(dU) > 1))
723- then dU[1]
756+ let ef = ee[0]
757+ let eg = if ((size(ee) > 1))
758+ then ee[1]
724759 else ""
725- if (if ((dV == ""))
726- then (dW == "")
760+ if (if ((ef == ""))
761+ then (eg == "")
727762 else false)
728- then dT
763+ then ed
729764 else {
730- let dX = if ((dV != ""))
731- then dB(dV, dT, dD, dE, dF, 0)
732- else $Tuple2(dT, false)
733- if ((dW != ""))
734- then if (dX._2)
765+ let eh = if ((ef != ""))
766+ then dL(ef, ed, dN, dO, dP, 0, dJ)
767+ else $Tuple2(ed, false)
768+ if ((eg != ""))
769+ then if (eh._2)
735770 then throw("Big item already occupies slot")
736- else dB(dW, dX._1, dD, dE, dF, 1)._1
737- else dX._1
771+ else dL(eg, eh._1, dN, dO, dP, 1, dJ)._1
772+ else eh._1
738773 }
739774 }
740775 }
741- else dT
742-
743-
744-func dY (dZ,ea,dD) = {
745- func dE (cL,eb) = {
746- let dk = cL._1
747- let dF = split(eb, ";")
748- if ((size(dF) != m))
776+ else ed
777+
778+
779+func ei (ej,ek,dN,dJ) = {
780+ func dO (cR,el) = {
781+ let dq = cR._1
782+ let dP = split(el, ";")
783+ if ((size(dP) != n))
749784 then throw("Wrong segment format")
750785 else {
751- let ec = dF[0]
752- let dq = dF[1]
753- if (if ((ec == ""))
754- then (dq == "")
786+ let em = dP[0]
787+ let dw = dP[1]
788+ if (if ((em == ""))
789+ then (dw == "")
755790 else false)
756- then $Tuple2((dk + 1), cL._2)
791+ then $Tuple2((dq + 1), cR._2)
757792 else {
758- let ed = dR(ec, cL._2, dD, dk, 0)
759- $Tuple2((dk + 1), dR(dq, ed, dD, dk, 1))
793+ let en = eb(em, cR._2, dN, dq, 0, dJ)
794+ $Tuple2((dq + 1), eb(dw, en, dN, dq, 1, dJ))
760795 }
761796 }
762797 }
763798
764-( let cN = dZ
765- let cO = size(cN)
766- let cP = $Tuple2(0, ea)
767- func cQ (cR,cS) = if ((cS >= cO))
768- then cR
769- else dE(cR, cN[cS])
770-
771- func cT (cR,cS) = if ((cS >= cO))
772- then cR
799+( let cT = ej
800+ let cU = size(cT)
801+ let cV = $Tuple2(0, ek)
802+ func cW (cX,cY) = if ((cY >= cU))
803+ then cX
804+ else dO(cX, cT[cY])
805+
806+ func cZ (cX,cY) = if ((cY >= cU))
807+ then cX
773808 else throw("List size exceeds 6")
774809
775- cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6))._2
776- }
777-
778-
779-func ee (ef,eg,eh,ei) = if ((size(ef) != S))
810+ cZ(cW(cW(cW(cW(cW(cW(cV, 0), 1), 2), 3), 4), 5), 6))._2
811+ }
812+
813+
814+func eo (ep,eq,er,es) = if ((size(ep) != Z))
780815 then throw("Wrong proportions data")
781816 else {
782- func ej (cL,ek) = {
783- let dd = (parseIntValue(ef[ek]) + ((ei * eg[ek]) * eh))
784- if ((0 > dd))
785- then throw(((((((("Panic! Pieces of type=" + toString(ek)) + ", sign=") + toString(ei)) + ", terrainCounts[i]=") + toString(eg[ek])) + ", landSizeIndex=") + toString(eh)))
786- else (cL :+ toString(dd))
787- }
788-
789- let cW = {
790- let cN = [0, 1, 2, 3, 4, 5]
791- let cO = size(cN)
792- let cP = nil
793- func cQ (cR,cS) = if ((cS >= cO))
794- then cR
795- else ej(cR, cN[cS])
796-
797- func cT (cR,cS) = if ((cS >= cO))
798- then cR
817+ func et (cR,eu) = {
818+ let dj = (parseIntValue(ep[eu]) + ((es * eq[eu]) * er))
819+ if ((0 > dj))
820+ then throw(((((((("Panic! Pieces of type=" + toString(eu)) + ", sign=") + toString(es)) + ", terrainCounts[i]=") + toString(eq[eu])) + ", landSizeIndex=") + toString(er)))
821+ else (cR :+ toString(dj))
822+ }
823+
824+ let dc = {
825+ let cT = [0, 1, 2, 3, 4, 5]
826+ let cU = size(cT)
827+ let cV = nil
828+ func cW (cX,cY) = if ((cY >= cU))
829+ then cX
830+ else et(cX, cT[cY])
831+
832+ func cZ (cX,cY) = if ((cY >= cU))
833+ then cX
799834 else throw("List size exceeds 6")
800835
801- cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6)
802- }
803- makeString(cW, "_")
804- }
805-
806-
807-func el (eg,eh,ei) = {
808- let ef = split(valueOrElse(getString(bL()), "0_0_0_0_0_0"), "_")
809- ee(ef, eg, eh, ei)
810- }
811-
812-
813-func em (en) = [(size(split(en, "A")) - 1), (size(split(en, "B")) - 1), (size(split(en, "C")) - 1), (size(split(en, "D")) - 1), (size(split(en, "E")) - 1), (size(split(en, "F")) - 1)]
814-
815-
816-func eo (ep,eg,eq,eh,er) = {
817- func es (cL,ek) = {
818- let et = ((fraction(eq, er, U) * eg[ek]) * eh)
819- (cL :+ toString((parseIntValue(ep[ek]) + et)))
820- }
821-
822- let cW = {
823- let cN = [0, 1, 2, 3, 4, 5]
824- let cO = size(cN)
825- let cP = nil
826- func cQ (cR,cS) = if ((cS >= cO))
827- then cR
828- else es(cR, cN[cS])
829-
830- func cT (cR,cS) = if ((cS >= cO))
831- then cR
836+ cZ(cW(cW(cW(cW(cW(cW(cV, 0), 1), 2), 3), 4), 5), 6)
837+ }
838+ makeString(dc, "_")
839+ }
840+
841+
842+func ev (eq,er,es) = {
843+ let ep = split(valueOrElse(getString(bR()), "0_0_0_0_0_0"), "_")
844+ eo(ep, eq, er, es)
845+ }
846+
847+
848+func ew (ex) = [(size(split(ex, "A")) - 1), (size(split(ex, "B")) - 1), (size(split(ex, "C")) - 1), (size(split(ex, "D")) - 1), (size(split(ex, "E")) - 1), (size(split(ex, "F")) - 1)]
849+
850+
851+func ey (ez,eq,eA,er,eB) = {
852+ func eC (cR,eu) = {
853+ let eD = ((fraction(eA, eB, ab) * eq[eu]) * er)
854+ (cR :+ toString((parseIntValue(ez[eu]) + eD)))
855+ }
856+
857+ let dc = {
858+ let cT = [0, 1, 2, 3, 4, 5]
859+ let cU = size(cT)
860+ let cV = nil
861+ func cW (cX,cY) = if ((cY >= cU))
862+ then cX
863+ else eC(cX, cT[cY])
864+
865+ func cZ (cX,cY) = if ((cY >= cU))
866+ then cX
832867 else throw("List size exceeds 6")
833868
834- cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6)
835- }
836- makeString(cW, "_")
837- }
838-
839-
840-func eu (eg,eq,eh,er) = {
841- func es (cL,ek) = {
842- let et = ((fraction(eq, er, U) * eg[ek]) * eh)
843- $Tuple2((cL._1 :+ et), (cL._2 + et))
844- }
845-
846- let cN = [0, 1, 2, 3, 4, 5]
847- let cO = size(cN)
848- let cP = $Tuple2(nil, 0)
849- func cQ (cR,cS) = if ((cS >= cO))
850- then cR
851- else es(cR, cN[cS])
852-
853- func cT (cR,cS) = if ((cS >= cO))
854- then cR
869+ cZ(cW(cW(cW(cW(cW(cW(cV, 0), 1), 2), 3), 4), 5), 6)
870+ }
871+ makeString(dc, "_")
872+ }
873+
874+
875+func eE (eq,eA,er,eB) = {
876+ func eC (cR,eu) = {
877+ let eD = ((fraction(eA, eB, ab) * eq[eu]) * er)
878+ $Tuple2((cR._1 :+ eD), (cR._2 + eD))
879+ }
880+
881+ let cT = [0, 1, 2, 3, 4, 5]
882+ let cU = size(cT)
883+ let cV = $Tuple2(nil, 0)
884+ func cW (cX,cY) = if ((cY >= cU))
885+ then cX
886+ else eC(cX, cT[cY])
887+
888+ func cZ (cX,cY) = if ((cY >= cU))
889+ then cX
855890 else throw("List size exceeds 6")
856891
857- cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6)
858- }
859-
860-
861-func ev (ew,ex,ey,ez) = {
862- let eA = ey._1
863- let eB = ey._2
864- if ((eB == 0))
865- then $Tuple2(makeString(ew, "_"), makeString(ex, "_"))
866- else if ((ez >= eB))
892+ cZ(cW(cW(cW(cW(cW(cW(cV, 0), 1), 2), 3), 4), 5), 6)
893+ }
894+
895+
896+func eF (eG,eH,eI,eJ) = {
897+ let eK = eI._1
898+ let eL = eI._2
899+ if ((eL == 0))
900+ then $Tuple2(makeString(eG, "_"), makeString(eH, "_"))
901+ else if ((eJ >= eL))
867902 then {
868- func eC (cL,ek) = (cL :+ toString((parseIntValue(ew[ek]) + eA[ek])))
869-
870- let cW = {
871- let cN = [0, 1, 2, 3, 4, 5]
872- let cO = size(cN)
873- let cP = nil
874- func cQ (cR,cS) = if ((cS >= cO))
875- then cR
876- else eC(cR, cN[cS])
877-
878- func cT (cR,cS) = if ((cS >= cO))
879- then cR
903+ func eM (cR,eu) = (cR :+ toString((parseIntValue(eG[eu]) + eK[eu])))
904+
905+ let dc = {
906+ let cT = [0, 1, 2, 3, 4, 5]
907+ let cU = size(cT)
908+ let cV = nil
909+ func cW (cX,cY) = if ((cY >= cU))
910+ then cX
911+ else eM(cX, cT[cY])
912+
913+ func cZ (cX,cY) = if ((cY >= cU))
914+ then cX
880915 else throw("List size exceeds 6")
881916
882- cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6)
917+ cZ(cW(cW(cW(cW(cW(cW(cV, 0), 1), 2), 3), 4), 5), 6)
883918 }
884- $Tuple2(makeString(cW, "_"), makeString(ex, "_"))
919+ $Tuple2(makeString(dc, "_"), makeString(eH, "_"))
885920 }
886921 else {
887- func eD (cL,ek) = {
888- let eE = fraction(eA[ek], ez, eB)
889- $Tuple2((cL._1 :+ toString((parseIntValue(ew[ek]) + eE))), (cL._2 :+ toString(((parseIntValue(ex[ek]) + eA[ek]) - eE))))
922+ func eN (cR,eu) = {
923+ let eO = fraction(eK[eu], eJ, eL)
924+ $Tuple2((cR._1 :+ toString((parseIntValue(eG[eu]) + eO))), (cR._2 :+ toString(((parseIntValue(eH[eu]) + eK[eu]) - eO))))
890925 }
891926
892- let cW = {
893- let cN = [0, 1, 2, 3, 4, 5]
894- let cO = size(cN)
895- let cP = $Tuple2(nil, nil)
896- func cQ (cR,cS) = if ((cS >= cO))
897- then cR
898- else eD(cR, cN[cS])
899-
900- func cT (cR,cS) = if ((cS >= cO))
901- then cR
927+ let dc = {
928+ let cT = [0, 1, 2, 3, 4, 5]
929+ let cU = size(cT)
930+ let cV = $Tuple2(nil, nil)
931+ func cW (cX,cY) = if ((cY >= cU))
932+ then cX
933+ else eN(cX, cT[cY])
934+
935+ func cZ (cX,cY) = if ((cY >= cU))
936+ then cX
902937 else throw("List size exceeds 6")
903938
904- cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6)
939+ cZ(cW(cW(cW(cW(cW(cW(cV, 0), 1), 2), 3), 4), 5), 6)
905940 }
906- $Tuple2(makeString(cW._1, "_"), makeString(cW._2, "_"))
941+ $Tuple2(makeString(dc._1, "_"), makeString(dc._2, "_"))
907942 }
908943 }
909944
910945
911-func eF (eG) = if ((eG >= toBigInt(0)))
912- then eG
913- else -(eG)
914-
915-
916-let eH = [[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]]
917-
918-func eI (bS,eJ) = {
919- let eK = toInt((bS % cg))
920- let eL = if ((eJ[0] > eK))
946+func eP (eQ) = if ((eQ >= toBigInt(0)))
947+ then eQ
948+ else -(eQ)
949+
950+
951+let eR = [[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]]
952+
953+func eS (bY,eT) = {
954+ let eU = toInt((bY % cm))
955+ let eV = if ((eT[0] > eU))
921956 then "A"
922- else if ((eJ[1] > eK))
957+ else if ((eT[1] > eU))
923958 then "B"
924- else if ((eJ[2] > eK))
959+ else if ((eT[2] > eU))
925960 then "C"
926- else if ((eJ[3] > eK))
961+ else if ((eT[3] > eU))
927962 then "D"
928- else if ((eJ[4] > eK))
963+ else if ((eT[4] > eU))
929964 then "E"
930965 else "F"
931- eL
932- }
933-
934-
935-func eM (eN,eO) = {
936- let eP = eH[eO]
937- func eQ (cL,cM) = $Tuple2((((((cL._1 + eI(cL._2, eP)) + eI((cL._2 / cg), eP)) + eI((cL._2 / ch), eP)) + eI((cL._2 / ci), eP)) + eI((cL._2 / cj), eP)), (cL._2 / ck))
938-
939- let eR = {
940- let cN = [1, 2, 3, 4, 5]
941- let cO = size(cN)
942- let cP = $Tuple2("", (eN / cf))
943- func cQ (cR,cS) = if ((cS >= cO))
944- then cR
945- else eQ(cR, cN[cS])
946-
947- func cT (cR,cS) = if ((cS >= cO))
948- then cR
966+ eV
967+ }
968+
969+
970+func eW (eX,eY) = {
971+ let eZ = eR[eY]
972+ func fa (cR,cS) = $Tuple2((((((cR._1 + eS(cR._2, eZ)) + eS((cR._2 / cm), eZ)) + eS((cR._2 / cn), eZ)) + eS((cR._2 / co), eZ)) + eS((cR._2 / cp), eZ)), (cR._2 / cq))
973+
974+ let fb = {
975+ let cT = [1, 2, 3, 4, 5]
976+ let cU = size(cT)
977+ let cV = $Tuple2("", (eX / cl))
978+ func cW (cX,cY) = if ((cY >= cU))
979+ then cX
980+ else fa(cX, cT[cY])
981+
982+ func cZ (cX,cY) = if ((cY >= cU))
983+ then cX
949984 else throw("List size exceeds 5")
950985
951- cT(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5)
952- }
953- eR._1
954- }
955-
956-
957-func eS (eT) = {
958- let eU = split(valueOrElse(getString(eT), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
959-[toString(valueOrElse(parseInt(eU[ap]), 0)), if ((size(split(eU[aq], "_")) == S))
960- then eU[aq]
961- else "0_0_0_0_0_0", if ((size(split(eU[ar], "_")) == S))
962- then eU[ar]
963- else "0_0_0_0_0_0", eU[as]]
964- }
965-
966-
967-func eV (eW) = {
968- let do = split(eW, "_")
969- ((V * (parseIntValue(do[1]) + 1)) * parseIntValue(do[0]))
970- }
971-
972-
973-func eX (eY) = {
974- let eZ = eY[aj]
975- func fa (cL,dj) = (cL + parseIntValue(dj))
976-
977- func fb (cL,dj) = {
978- let bB = cL._1
979- let fc = (((parseIntValue(dj) + af) - 1) / af)
980- $Tuple2((bB + 1), (cL._2 + (fc * bi)))
981- }
982-
983- let fd = {
984- let cN = split(eY[ah], "_")
985- let cO = size(cN)
986- let cP = 0
987- func cQ (cR,cS) = if ((cS >= cO))
988- then cR
989- else fa(cR, cN[cS])
990-
991- func cT (cR,cS) = if ((cS >= cO))
992- then cR
986+ cZ(cW(cW(cW(cW(cW(cV, 0), 1), 2), 3), 4), 5)
987+ }
988+ fb._1
989+ }
990+
991+
992+func fc (fd) = {
993+ let fe = split(valueOrElse(getString(fd), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
994+[toString(valueOrElse(parseInt(fe[ax]), 0)), if ((size(split(fe[ay], "_")) == Z))
995+ then fe[ay]
996+ else "0_0_0_0_0_0", if ((size(split(fe[az], "_")) == Z))
997+ then fe[az]
998+ else "0_0_0_0_0_0", fe[aA]]
999+ }
1000+
1001+
1002+func ff (fg) = {
1003+ let du = split(fg, "_")
1004+ ((ac * (parseIntValue(du[1]) + 1)) * parseIntValue(du[0]))
1005+ }
1006+
1007+
1008+func fh (fi) = {
1009+ let fj = fi[ar]
1010+ func fk (cR,dp) = (cR + parseIntValue(dp))
1011+
1012+ func fl (cR,dp) = {
1013+ let bI = cR._1
1014+ let fm = (((parseIntValue(dp) + an) - 1) / an)
1015+ $Tuple2((bI + 1), (cR._2 + (fm * bp)))
1016+ }
1017+
1018+ let fn = {
1019+ let cT = split(fi[ap], "_")
1020+ let cU = size(cT)
1021+ let cV = 0
1022+ func cW (cX,cY) = if ((cY >= cU))
1023+ then cX
1024+ else fk(cX, cT[cY])
1025+
1026+ func cZ (cX,cY) = if ((cY >= cU))
1027+ then cX
9931028 else throw("List size exceeds 6")
9941029
995- cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6)
996- }
997- let fe = {
998- let cN = split(eY[ai], "_")
999- let cO = size(cN)
1000- let cP = 0
1001- func ff (cR,cS) = if ((cS >= cO))
1002- then cR
1003- else fa(cR, cN[cS])
1004-
1005- func fg (cR,cS) = if ((cS >= cO))
1006- then cR
1030+ cZ(cW(cW(cW(cW(cW(cW(cV, 0), 1), 2), 3), 4), 5), 6)
1031+ }
1032+ let fo = {
1033+ let cT = split(fi[aq], "_")
1034+ let cU = size(cT)
1035+ let cV = 0
1036+ func fp (cX,cY) = if ((cY >= cU))
1037+ then cX
1038+ else fk(cX, cT[cY])
1039+
1040+ func fq (cX,cY) = if ((cY >= cU))
1041+ then cX
10071042 else throw("List size exceeds 6")
10081043
1009- fg(ff(ff(ff(ff(ff(ff(cP, 0), 1), 2), 3), 4), 5), 6)
1010- }
1011- let fh = if ((eZ == ""))
1044+ fq(fp(fp(fp(fp(fp(fp(cV, 0), 1), 2), 3), 4), 5), 6)
1045+ }
1046+ let fr = if ((fj == ""))
10121047 then 0
1013- else ( let cN = split_4C(eZ, "_")
1014- let cO = size(cN)
1015- let cP = $Tuple2(0, 0)
1016- func fi (cR,cS) = if ((cS >= cO))
1017- then cR
1018- else fb(cR, cN[cS])
1019-
1020- func fj (cR,cS) = if ((cS >= cO))
1021- then cR
1048+ else ( let cT = split_4C(fj, "_")
1049+ let cU = size(cT)
1050+ let cV = $Tuple2(0, 0)
1051+ func fs (cX,cY) = if ((cY >= cU))
1052+ then cX
1053+ else fl(cX, cT[cY])
1054+
1055+ func ft (cX,cY) = if ((cY >= cU))
1056+ then cX
10221057 else throw("List size exceeds 50")
10231058
1024- fj(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(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
1025- ((fd + fe) + fh)
1026- }
1027-
1028-
1029-func fk (fl,fm,fn) = {
1030- let eW = ((toString(fm) + "_") + toString(fn))
1031- let fo = eV(eW)
1032- let fp = valueOrElse(getString(fl), (eW + ":0_0_0_0_0_0:0_0_0_0_0_0::0"))
1033- let fq = split_4C(fp, ":")
1034- let fr = eX(fq)
1035- let fs = if ((5 > size(fq)))
1036- then makeString(["0", toString(fr), toString((fo - fr)), toString(fo)], "_")
1037- else {
1038- let ft = split(fq[ak], "_")
1039- let fu = parseIntValue(ft[al])
1040- let fv = if ((size(ft) > 1))
1041- then parseIntValue(ft[am])
1042- else fr
1043- makeString([toString(fu), toString(fv), toString(((fo - fu) - fv)), toString(fo)], "_")
1044- }
1045-[fq[ag], if ((size(split(fq[ah], "_")) == S))
1046- then fq[ah]
1047- else "0_0_0_0_0_0", if ((size(split(fq[ai], "_")) == S))
1048- then fq[ai]
1049- else "0_0_0_0_0_0", fq[aj], fs]
1050- }
1051-
1052-
1053-func fw (eY) = {
1054- let fx = eX(eY)
1055- let fy = parseIntValue(split(eY[ak], "_")[al])
1056- ((eV(eY[ag]) - fx) - fy)
1057- }
1058-
1059-
1060-func fz (fA,fB) = {
1061- let fc = if ((fA >= 0))
1062- then (((fA + fB) - 1) / fB)
1063- else -((((-(fA) + fB) - 1) / fB))
1064- (fc * bi)
1065- }
1066-
1067-
1068-func fC (fD,eY,fE) = if ((size(fD) != 3))
1059+ ft(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(cV, 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
1060+ ((fn + fo) + fr)
1061+ }
1062+
1063+
1064+func fu (fv,fw,fx) = {
1065+ let fg = ((toString(fw) + "_") + toString(fx))
1066+ let fy = ff(fg)
1067+ let fz = valueOrElse(getString(fv), (fg + ":0_0_0_0_0_0:0_0_0_0_0_0::0"))
1068+ let fA = split_4C(fz, ":")
1069+ let fB = fh(fA)
1070+ let fC = if ((5 > size(fA)))
1071+ then makeString(["0", toString(fB), toString((fy - fB)), toString(fy)], "_")
1072+ else {
1073+ let fD = split(fA[as], "_")
1074+ let fE = parseIntValue(fD[at])
1075+ let fF = if ((size(fD) > 1))
1076+ then parseIntValue(fD[au])
1077+ else fB
1078+ makeString([toString(fE), toString(fF), toString(((fy - fE) - fF)), toString(fy)], "_")
1079+ }
1080+[fA[ao], if ((size(split(fA[ap], "_")) == Z))
1081+ then fA[ap]
1082+ else "0_0_0_0_0_0", if ((size(split(fA[aq], "_")) == Z))
1083+ then fA[aq]
1084+ else "0_0_0_0_0_0", fA[ar], fC]
1085+ }
1086+
1087+
1088+func fG (fi) = {
1089+ let fH = fh(fi)
1090+ let fI = parseIntValue(split(fi[as], "_")[at])
1091+ ((ff(fi[ao]) - fH) - fI)
1092+ }
1093+
1094+
1095+func fJ (fK,fL) = {
1096+ let fm = if ((fK >= 0))
1097+ then (((fK + fL) - 1) / fL)
1098+ else -((((-(fK) + fL) - 1) / fL))
1099+ (fm * bp)
1100+ }
1101+
1102+
1103+func fM (fN,fi,fO) = if ((size(fN) != 3))
10691104 then throw("cargoListStr should contain exactly 2 ':' separators")
10701105 else {
1071- let fF = split(fD[0], "_")
1072- let fG = split(fD[1], "_")
1073- let fH = if ((fD[2] == ""))
1106+ let fP = split(fN[0], "_")
1107+ let fQ = split(fN[1], "_")
1108+ let fR = if ((fN[2] == ""))
10741109 then nil
1075- else split(fD[2], "_")
1076- if ((size(fF) != S))
1110+ else split(fN[2], "_")
1111+ if ((size(fP) != Z))
10771112 then throw("All 6 resources should be passed")
1078- else if ((size(fG) != S))
1113+ else if ((size(fQ) != Z))
10791114 then throw("All 6 materials should be passed")
10801115 else {
1081- let ez = fw(eY)
1082- let fI = split(eY[ah], "_")
1083- let fJ = split(eY[ai], "_")
1084- let fK = if ((eY[aj] == ""))
1116+ let eJ = fG(fi)
1117+ let fS = split(fi[ap], "_")
1118+ let fT = split(fi[aq], "_")
1119+ let fU = if ((fi[ar] == ""))
10851120 then nil
1086- else split(eY[aj], "_")
1087- let ex = split(fE[aq], "_")
1088- let fL = split(fE[ar], "_")
1089- let fM = if ((fE[as] == ""))
1121+ else split(fi[ar], "_")
1122+ let eH = split(fO[ay], "_")
1123+ let fV = split(fO[az], "_")
1124+ let fW = if ((fO[aA] == ""))
10901125 then nil
1091- else split(fE[as], "_")
1092- func fN (cL,dj) = {
1093- let ek = cL._1
1094- let fO = parseIntValue(dj)
1095- let fP = parseIntValue(fI[ek])
1096- let fQ = parseIntValue(ex[ek])
1097- if ((fO == 0))
1098- then $Tuple4((ek + 1), (cL._2 :+ fI[ek]), (cL._3 :+ ex[ek]), cL._4)
1099- else if ((fO > 0))
1100- then if ((fO > fQ))
1101- then throw((((("Attempt to take " + dj) + " from backpack, but only ") + toString(fQ)) + " available"))
1102- else $Tuple4((ek + 1), (cL._2 :+ toString((fP + fO))), (cL._3 :+ toString((fQ - fO))), (cL._4 + fO))
1103- else if ((-(fO) > fP))
1104- then throw((((("Attempt to take " + toString(-(fO))) + " from warehouse, but only ") + toString(fP)) + " available"))
1105- else $Tuple4((ek + 1), (cL._2 :+ toString((fP + fO))), (cL._3 :+ toString((fQ - fO))), (cL._4 + fO))
1126+ else split(fO[aA], "_")
1127+ func fX (cR,dp) = {
1128+ let eu = cR._1
1129+ let fY = parseIntValue(dp)
1130+ let fZ = parseIntValue(fS[eu])
1131+ let ga = parseIntValue(eH[eu])
1132+ if ((fY == 0))
1133+ then $Tuple4((eu + 1), (cR._2 :+ fS[eu]), (cR._3 :+ eH[eu]), cR._4)
1134+ else if ((fY > 0))
1135+ then if ((fY > ga))
1136+ then throw((((("Attempt to take " + dp) + " from backpack, but only ") + toString(ga)) + " available"))
1137+ else $Tuple4((eu + 1), (cR._2 :+ toString((fZ + fY))), (cR._3 :+ toString((ga - fY))), (cR._4 + fY))
1138+ else if ((-(fY) > fZ))
1139+ then throw((((("Attempt to take " + toString(-(fY))) + " from warehouse, but only ") + toString(fZ)) + " available"))
1140+ else $Tuple4((eu + 1), (cR._2 :+ toString((fZ + fY))), (cR._3 :+ toString((ga - fY))), (cR._4 + fY))
11061141 }
11071142
1108- let cW = {
1109- let cN = fF
1110- let cO = size(cN)
1111- let cP = $Tuple4(0, nil, nil, 0)
1112- func cQ (cR,cS) = if ((cS >= cO))
1113- then cR
1114- else fN(cR, cN[cS])
1115-
1116- func cT (cR,cS) = if ((cS >= cO))
1117- then cR
1143+ let dc = {
1144+ let cT = fP
1145+ let cU = size(cT)
1146+ let cV = $Tuple4(0, nil, nil, 0)
1147+ func cW (cX,cY) = if ((cY >= cU))
1148+ then cX
1149+ else fX(cX, cT[cY])
1150+
1151+ func cZ (cX,cY) = if ((cY >= cU))
1152+ then cX
11181153 else throw("List size exceeds 6")
11191154
1120- cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6)
1155+ cZ(cW(cW(cW(cW(cW(cW(cV, 0), 1), 2), 3), 4), 5), 6)
11211156 }
1122- func fR (cL,dj) = {
1123- let ek = cL._1
1124- let fO = parseIntValue(dj)
1125- let fS = parseIntValue(fJ[ek])
1126- let fT = parseIntValue(fL[ek])
1127- if ((fO == 0))
1128- then $Tuple4((ek + 1), (cL._2 :+ fJ[ek]), (cL._3 :+ fL[ek]), cL._4)
1129- else if ((fO > 0))
1130- then if ((fO > fT))
1131- then throw((((("Attempt to take " + dj) + " from backpack, but only ") + toString(fT)) + " available"))
1132- else $Tuple4((ek + 1), (cL._2 :+ toString((fS + fO))), (cL._3 :+ toString((fT - fO))), (cL._4 + fO))
1133- else if ((-(fO) > fS))
1134- then throw((((("Attempt to take " + toString(-(fO))) + " from warehouse, but only ") + toString(fS)) + " available"))
1135- else $Tuple4((ek + 1), (cL._2 :+ toString((fS + fO))), (cL._3 :+ toString((fT - fO))), (cL._4 + fO))
1157+ func gb (cR,dp) = {
1158+ let eu = cR._1
1159+ let fY = parseIntValue(dp)
1160+ let gc = parseIntValue(fT[eu])
1161+ let gd = parseIntValue(fV[eu])
1162+ if ((fY == 0))
1163+ then $Tuple4((eu + 1), (cR._2 :+ fT[eu]), (cR._3 :+ fV[eu]), cR._4)
1164+ else if ((fY > 0))
1165+ then if ((fY > gd))
1166+ then throw((((("Attempt to take " + dp) + " from backpack, but only ") + toString(gd)) + " available"))
1167+ else $Tuple4((eu + 1), (cR._2 :+ toString((gc + fY))), (cR._3 :+ toString((gd - fY))), (cR._4 + fY))
1168+ else if ((-(fY) > gc))
1169+ then throw((((("Attempt to take " + toString(-(fY))) + " from warehouse, but only ") + toString(gc)) + " available"))
1170+ else $Tuple4((eu + 1), (cR._2 :+ toString((gc + fY))), (cR._3 :+ toString((gd - fY))), (cR._4 + fY))
11361171 }
11371172
1138- let ec = {
1139- let cN = fG
1140- let cO = size(cN)
1141- let cP = $Tuple4(0, nil, nil, cW._4)
1142- func ff (cR,cS) = if ((cS >= cO))
1143- then cR
1144- else fR(cR, cN[cS])
1145-
1146- func fg (cR,cS) = if ((cS >= cO))
1147- then cR
1173+ let em = {
1174+ let cT = fQ
1175+ let cU = size(cT)
1176+ let cV = $Tuple4(0, nil, nil, dc._4)
1177+ func fp (cX,cY) = if ((cY >= cU))
1178+ then cX
1179+ else gb(cX, cT[cY])
1180+
1181+ func fq (cX,cY) = if ((cY >= cU))
1182+ then cX
11481183 else throw("List size exceeds 6")
11491184
1150- fg(ff(ff(ff(ff(ff(ff(cP, 0), 1), 2), 3), 4), 5), 6)
1185+ fq(fp(fp(fp(fp(fp(fp(cV, 0), 1), 2), 3), 4), 5), 6)
11511186 }
1152- func fU (cL,dj) = {
1153- let ek = cL._1
1154- let fO = parseIntValue(dj)
1155- let fV = if ((size(fK) > ek))
1156- then parseIntValue(fK[ek])
1187+ func ge (cR,dp) = {
1188+ let eu = cR._1
1189+ let fY = parseIntValue(dp)
1190+ let gf = if ((size(fU) > eu))
1191+ then parseIntValue(fU[eu])
11571192 else 0
1158- let fW = if ((size(fM) > ek))
1159- then parseIntValue(fM[ek])
1193+ let gg = if ((size(fW) > eu))
1194+ then parseIntValue(fW[eu])
11601195 else 0
1161- if ((fO == 0))
1162- then $Tuple4((ek + 1), (cL._2 :+ toString(fV)), (cL._3 :+ toString(fW)), cL._4)
1163- else if ((fO > 0))
1164- then if ((fO > fW))
1165- then throw((((("Attempt to take " + dj) + " from backpack, but only ") + toString(fW)) + " available"))
1196+ if ((fY == 0))
1197+ then $Tuple4((eu + 1), (cR._2 :+ toString(gf)), (cR._3 :+ toString(gg)), cR._4)
1198+ else if ((fY > 0))
1199+ then if ((fY > gg))
1200+ then throw((((("Attempt to take " + dp) + " from backpack, but only ") + toString(gg)) + " available"))
11661201 else {
1167- let fX = (fz((fV + fO), af) - fz(fV, af))
1168- $Tuple4((ek + 1), (cL._2 :+ toString((fV + fO))), (cL._3 :+ toString((fW - fO))), (cL._4 + fX))
1202+ let gh = (fJ((gf + fY), an) - fJ(gf, an))
1203+ $Tuple4((eu + 1), (cR._2 :+ toString((gf + fY))), (cR._3 :+ toString((gg - fY))), (cR._4 + gh))
11691204 }
1170- else if ((-(fO) > fV))
1171- then throw((((("Attempt to take " + toString(-(fO))) + " from warehouse, but only ") + toString(fV)) + " available"))
1205+ else if ((-(fY) > gf))
1206+ then throw((((("Attempt to take " + toString(-(fY))) + " from warehouse, but only ") + toString(gf)) + " available"))
11721207 else {
1173- let fX = (fz((fV + fO), af) - fz(fV, af))
1174- $Tuple4((ek + 1), (cL._2 :+ toString((fV + fO))), (cL._3 :+ toString((fW - fO))), (cL._4 + fX))
1208+ let gh = (fJ((gf + fY), an) - fJ(gf, an))
1209+ $Tuple4((eu + 1), (cR._2 :+ toString((gf + fY))), (cR._3 :+ toString((gg - fY))), (cR._4 + gh))
11751210 }
11761211 }
11771212
1178- let eU = if ((size(fH) != 0))
1213+ let fe = if ((size(fR) != 0))
11791214 then {
1180- let cN = fH
1181- let cO = size(cN)
1182- let cP = $Tuple4(0, nil, nil, ec._4)
1183- func fi (cR,cS) = if ((cS >= cO))
1184- then cR
1185- else fU(cR, cN[cS])
1186-
1187- func fj (cR,cS) = if ((cS >= cO))
1188- then cR
1215+ let cT = fR
1216+ let cU = size(cT)
1217+ let cV = $Tuple4(0, nil, nil, em._4)
1218+ func fs (cX,cY) = if ((cY >= cU))
1219+ then cX
1220+ else ge(cX, cT[cY])
1221+
1222+ func ft (cX,cY) = if ((cY >= cU))
1223+ then cX
11891224 else throw("List size exceeds 50")
11901225
1191- fj(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(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)
1226+ ft(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(cV, 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)
11921227 }
1193- else $Tuple4(0, fK, fM, ec._4)
1194- let fY = eU._4
1195- if ((fY > ez))
1196- then throw((((("Attempt to put total " + toString(fY)) + " stuff, but only ") + toString(ez)) + " warehouse space left"))
1197- else $Tuple7(makeString(cW._2, "_"), makeString(ec._2, "_"), makeString(eU._2, "_"), makeString(cW._3, "_"), makeString(ec._3, "_"), makeString(eU._3, "_"), fY)
1228+ else $Tuple4(0, fU, fW, em._4)
1229+ let gi = fe._4
1230+ if ((gi > eJ))
1231+ then throw((((("Attempt to put total " + toString(gi)) + " stuff, but only ") + toString(eJ)) + " warehouse space left"))
1232+ else $Tuple7(makeString(dc._2, "_"), makeString(em._2, "_"), makeString(fe._2, "_"), makeString(dc._3, "_"), makeString(em._3, "_"), makeString(fe._3, "_"), gi)
11981233 }
11991234 }
12001235
12011236
1202-func fZ (ga,gb) = {
1203- let aT = toString(ga)
1204- let gc = eF(toBigInt(gb))
1205- let gd = valueOrElse(getInteger(cm()), (cl + 1))
1206- let co = toString(gd)
1207- let eO = toInt((gc % cf))
1208- let en = eM(gc, eO)
1209- let ge = aa[eO]
1210- let gf = Issue(cE(co, "S"), makeString([co, "S", en, ge], "_"), 1, 0, false)
1211- let av = calculateAssetId(gf)
1212- let gg = toBase58String(av)
1213- $Tuple2([IntegerEntry(cm(), (gd + 1)), gf, StringEntry(cn(co), gg), StringEntry(au(gg), aT), StringEntry(ct(co), aT), IntegerEntry(ay(gg), 0), IntegerEntry(cr(gg, aT), 0), ScriptTransfer(ga, 1, av)], $Tuple2(gg, ge))
1214- }
1215-
1216-
1217-func gh (aT,gi,gj) = if (!(sigVerify_8Kb(gi, gj, bX)))
1237+func gj (gk,gl) = {
1238+ let ba = toString(gk)
1239+ let gm = eP(toBigInt(gl))
1240+ let gn = valueOrElse(getInteger(cs()), (cr + 1))
1241+ let cu = toString(gn)
1242+ let eY = toInt((gm % cl))
1243+ let ex = eW(gm, eY)
1244+ let go = ah[eY]
1245+ let gp = Issue(cK(cu, "S"), makeString([cu, "S", ex, go], "_"), 1, 0, false)
1246+ let aD = calculateAssetId(gp)
1247+ let gq = toBase58String(aD)
1248+ $Tuple2([IntegerEntry(cs(), (gn + 1)), gp, StringEntry(ct(cu), gq), StringEntry(aC(gq), ba), StringEntry(cz(cu), ba), IntegerEntry(aG(gq), 0), IntegerEntry(cx(gq, ba), 0), ScriptTransfer(gk, 1, aD)], $Tuple2(gq, go))
1249+ }
1250+
1251+
1252+func gr (ba,gs,gt) = if (!(sigVerify_8Kb(gs, gt, cd)))
12181253 then throw("signature does not match")
12191254 else {
1220- let do = split(toUtf8String(gi), ";")
1221- let gk = split(do[0], "|")
1222- let gl = split(gk[cA], "_")
1223- let gm = parseIntValue(gl[0])
1224- let gn = parseIntValue(gl[1])
1225- let go = split(do[1], ":")
1226- let gp = go[0]
1227- let gq = parseIntValue(gk[cB])
1228- if (if ((gq > (lastBlock.timestamp + bZ)))
1255+ let du = split(toUtf8String(gs), ";")
1256+ let gu = split(du[0], "|")
1257+ let gv = split(gu[cG], "_")
1258+ let gw = parseIntValue(gv[0])
1259+ let gx = parseIntValue(gv[1])
1260+ let gy = split(du[1], ":")
1261+ let gz = gy[0]
1262+ let gA = parseIntValue(gu[cH])
1263+ if (if ((gA > (lastBlock.timestamp + cf)))
12291264 then true
1230- else ((lastBlock.timestamp - bZ) > gq))
1231- then throw(((("signature outdated: logTime=" + toString(gq)) + ", bcTime=") + toString(lastBlock.timestamp)))
1265+ else ((lastBlock.timestamp - cf) > gA))
1266+ then throw(((("signature outdated: logTime=" + toString(gA)) + ", bcTime=") + toString(lastBlock.timestamp)))
12321267 else {
1233- let gr = go[1]
1234- let gs = valueOrElse(getString(at(aT)), "")
1235- if ((gs != gr))
1236- then throw(((("Tx ids don't match! In state: " + gs) + ", in msg: ") + gr))
1268+ let gB = gy[1]
1269+ let gC = valueOrElse(getString(aB(ba)), "")
1270+ if ((gC != gB))
1271+ then throw(((("Tx ids don't match! In state: " + gC) + ", in msg: ") + gB))
12371272 else {
1238- let p = valueOrErrorMessage(getString(aN(aT)), "You don't have a duck staked")
1239- let gt = aQ(p)
1240- let gu = J(valueOrElse(getInteger(r(p)), 0))
1241- let gv = valueOrElse(getInteger(gt), gu)
1242- if ((gv != gm))
1243- then throw(((("oldHealth=" + toString(gv)) + " from state does not match one from flight log=") + toString(gm)))
1244- else if ((0 >= gm))
1273+ let q = valueOrErrorMessage(getString(aV(ba)), "You don't have a duck staked")
1274+ let gD = p(q)
1275+ let gE = L(valueOrElse(getInteger(t(q)), 0))
1276+ let gF = valueOrElse(getInteger(gD), gE)
1277+ if ((gF != gw))
1278+ then throw(((("oldHealth=" + toString(gF)) + " from state does not match one from flight log=") + toString(gw)))
1279+ else if ((0 >= gw))
12451280 then throw("You can't fly with zero health")
12461281 else {
1247- let gw = if ((size(gk) > cC))
1248- then gk[cC]
1282+ let gG = if ((size(gu) > cI))
1283+ then gu[cI]
12491284 else ""
1250- let gx = if ((size(gk) > cD))
1251- then gk[cD]
1285+ let gH = if ((size(gu) > cJ))
1286+ then gu[cJ]
12521287 else ""
1253- let gy = if (if ((gn > 0))
1254- then (gw == "$")
1288+ let gI = if (if ((gx > 0))
1289+ then (gG == "$")
12551290 else false)
1256- then bR(invoke(bC, "sendUsdtPrize", [aT], nil))
1291+ then bX(invoke(bJ, "sendUsdtPrize", [ba], nil))
12571292 else 0
1258- $Tuple5(gn, p, gy, gp, gx)
1293+ $Tuple5(gx, q, gI, gz, gH)
12591294 }
12601295 }
12611296 }
12621297 }
12631298
12641299
1265-func gz (ga,gb,gi,gj) = {
1266- let aT = toString(ga)
1267- let eP = gh(aT, gi, gj)
1268- let gt = aQ(eP._2)
1269- let eT = aO(eP._2)
1270- let fE = eS(eT)
1271- let gA = split(fE[ar], "_")
1272- let gB = makeString(cX(true, gA, cd), "_")
1273- let dt = de(fE[as], eP._5)
1274- if ((0 >= eP._1))
1275- then $Tuple3([IntegerEntry(gt, 0), StringEntry(eT, makeString([fE[ap], fE[aq], fE[ar], dt], ":"))], "", 0)
1276- else {
1277- let gC = fZ(ga, gb)
1278- let gg = gC._2._1
1279- $Tuple3((((gC._1 :+ StringEntry(aP(eP._2), makeString([gC._2._2, "L", gg], "_"))) :+ IntegerEntry(gt, eP._1)) :+ StringEntry(eT, makeString([fE[ap], fE[aq], gB, dt], ":"))), gg, eP._3)
1280- }
1281- }
1282-
1283-
1284-func gD (aF,gE) = {
1285- let fn = valueOrElse(getInteger(ay(aF)), 0)
1286- let gF = valueOrElse(getInteger(az(R, aF)), 0)
1287- let gG = (fn / 6)
1288- let gH = (fn / 7)
1289- ((T + fraction(T, ((fn + gG) + (2 * gH)), 5)) + fraction(T, gF, (gE * 5)))
1290- }
1291-
1292-
1293-func gI (b,gJ,gK) = {
1294- let gL = if ((gJ == cx))
1295- then $Tuple2(gK, valueOrElse(getString(aN(b)), ""))
1296- else {
1297- let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked")
1298- let gM = valueOrElse(getString(aP(p)), W)
1299- let gN = split(value(gM), "_")
1300- if ((gN[aV] != "L"))
1301- then throw((("Duck location type is " + gN[aV]) + ", but should be L"))
1302- else $Tuple2(gN[aW], p)
1303- }
1304- let aF = gL._1
1305- let gO = gL._2
1306- let gP = value(assetInfo(fromBase58String(aF)))
1307- let gQ = ax(aF)
1308- let gR = valueOrErrorMessage(getInteger(gQ), (("Land " + gP.name) + " is not staked"))
1309- let gS = valueOrErrorMessage(getString(au(aF)), (("NFT " + gP.name) + " is orphaned"))
1310- if ((gS != b))
1311- then throw((P + " is not yours"))
1312- else {
1313- let gT = split(gP.description, "_")
1314- $Tuple4(gO, aF, gT, gR)
1315- }
1316- }
1317-
1318-
1319-func gU (b,fA,gJ,gK) = if ((0 > fA))
1300+func gJ (gk,gl,gs,gt) = {
1301+ let ba = toString(gk)
1302+ let eZ = gr(ba, gs, gt)
1303+ let gD = p(eZ._2)
1304+ let fd = aW(eZ._2)
1305+ let fO = fc(fd)
1306+ let gK = split(fO[az], "_")
1307+ let gL = makeString(dd(true, gK, cj), "_")
1308+ let dz = dk(fO[aA], eZ._5)
1309+ if ((0 >= eZ._1))
1310+ then $Tuple3([IntegerEntry(gD, 0), StringEntry(fd, makeString([fO[ax], fO[ay], fO[az], dz], ":"))], "", 0)
1311+ else {
1312+ let gM = gj(gk, gl)
1313+ let gq = gM._2._1
1314+ $Tuple3((((gM._1 :+ StringEntry(aX(eZ._2), makeString([gM._2._2, "L", gq], "_"))) :+ IntegerEntry(gD, eZ._1)) :+ StringEntry(fd, makeString([fO[ax], fO[ay], gL, dz], ":"))), gq, eZ._3)
1315+ }
1316+ }
1317+
1318+
1319+func gN (aN,gO) = {
1320+ let fx = valueOrElse(getInteger(aG(aN)), 0)
1321+ let gP = valueOrElse(getInteger(aH(Y, aN)), 0)
1322+ let gQ = (fx / 6)
1323+ let gR = (fx / 7)
1324+ ((aa + fraction(aa, ((fx + gQ) + (2 * gR)), 5)) + fraction(aa, gP, (gO * 5)))
1325+ }
1326+
1327+
1328+func gS (b,gT,gU) = {
1329+ let gV = if ((gT == cD))
1330+ then $Tuple2(gU, valueOrElse(getString(aV(b)), ""))
1331+ else {
1332+ let q = valueOrErrorMessage(getString(aV(b)), "You don't have a duck staked")
1333+ let gW = valueOrElse(getString(aX(q)), ad)
1334+ let gX = split(value(gW), "_")
1335+ if ((gX[bc] != "L"))
1336+ then throw((("Duck location type is " + gX[bc]) + ", but should be L"))
1337+ else $Tuple2(gX[bd], q)
1338+ }
1339+ let aN = gV._1
1340+ let gY = gV._2
1341+ let gZ = value(assetInfo(fromBase58String(aN)))
1342+ let ha = aF(aN)
1343+ let hb = valueOrErrorMessage(getInteger(ha), (("Land " + gZ.name) + " is not staked"))
1344+ let hc = valueOrErrorMessage(getString(aC(aN)), (("NFT " + gZ.name) + " is orphaned"))
1345+ if ((hc != b))
1346+ then throw((W + " is not yours"))
1347+ else {
1348+ let hd = split(gZ.description, "_")
1349+ $Tuple4(gY, aN, hd, hb)
1350+ }
1351+ }
1352+
1353+
1354+func he (b,fK,gT,gU) = if ((0 > fK))
13201355 then throw("Negative amount")
13211356 else {
1322- let dN = gI(b, gJ, gK)
1323- let bU = dN._3[bI]
1324- let eg = em(dN._3[bJ])
1325- let eq = (lastBlock.timestamp - dN._4)
1326- if ((0 > eq))
1327- then throw(((("Saved timestamp is in future, saved = " + toString(dN._4)) + ", current = ") + toString(lastBlock.timestamp)))
1357+ let dX = gS(b, gT, gU)
1358+ let ca = dX._3[bO]
1359+ let eq = ew(dX._3[bP])
1360+ let eA = (lastBlock.timestamp - dX._4)
1361+ if ((0 > eA))
1362+ then throw(((("Saved timestamp is in future, saved = " + toString(dX._4)) + ", current = ") + toString(lastBlock.timestamp)))
13281363 else {
1329- let gE = bT(bU)
1330- let gV = gD(dN._2, gE)
1331- let gW = fraction(eq, (gV * gE), U)
1332- if ((fA > gW))
1333- then throw(((("Not enough resources, available = " + toString(gW)) + ", requested = ") + toString(fA)))
1364+ let gO = bZ(ca)
1365+ let hf = gN(dX._2, gO)
1366+ let hg = fraction(eA, (hf * gO), ab)
1367+ if ((fK > hg))
1368+ then throw(((("Not enough resources, available = " + toString(hg)) + ", requested = ") + toString(fK)))
13341369 else {
1335- let gX = fraction((gW - fA), U, (gV * gE))
1336- let gY = (lastBlock.timestamp - gX)
1337- let fm = (gE / bj)
1338- let ey = eu(eg, (eq - gX), fm, gV)
1339- let fl = aE(dN._2)
1340- let fn = valueOrElse(getInteger(ay(dN._2)), 0)
1341- let eY = fk(fl, fm, fn)
1342- let ft = split(eY[ak], "_")
1343- let ez = parseIntValue(ft[an])
1344- if (if ((gJ == cx))
1345- then (fA > ez)
1370+ let hh = fraction((hg - fK), ab, (hf * gO))
1371+ let hi = (lastBlock.timestamp - hh)
1372+ let fw = (gO / bq)
1373+ let eI = eE(eq, (eA - hh), fw, hf)
1374+ let fv = aM(dX._2)
1375+ let fx = valueOrElse(getInteger(aG(dX._2)), 0)
1376+ let fi = fu(fv, fw, fx)
1377+ let fD = split(fi[as], "_")
1378+ let eJ = parseIntValue(fD[av])
1379+ if (if ((gT == cD))
1380+ then (fK > eJ)
13461381 else false)
1347- then throw((("Only " + toString(ez)) + " space left in warehouse"))
1382+ then throw((("Only " + toString(eJ)) + " space left in warehouse"))
13481383 else {
1349- let eT = aO(dN._1)
1350- let fE = eS(eT)
1351- let ex = split(fE[aq], "_")
1352- let ew = split(eY[ah], "_")
1353- let gZ = if ((gJ == cx))
1354- then $Tuple4(eo(ew, eg, (eq - gX), fm, gV), fE[aq], (parseIntValue(ft[am]) + ey._2), (parseIntValue(ft[an]) - ey._2))
1355- else if ((gJ == cy))
1356- then $Tuple4(eY[ah], eo(ex, eg, (eq - gX), fm, gV), parseIntValue(ft[am]), parseIntValue(ft[an]))
1384+ let fd = aW(dX._1)
1385+ let fO = fc(fd)
1386+ let eH = split(fO[ay], "_")
1387+ let eG = split(fi[ap], "_")
1388+ let hj = if ((gT == cD))
1389+ then $Tuple4(ey(eG, eq, (eA - hh), fw, hf), fO[ay], (parseIntValue(fD[au]) + eI._2), (parseIntValue(fD[av]) - eI._2))
1390+ else if ((gT == cE))
1391+ then $Tuple4(fi[ap], ey(eH, eq, (eA - hh), fw, hf), parseIntValue(fD[au]), parseIntValue(fD[av]))
13571392 else {
1358- let ha = ev(ew, ex, ey, ez)
1359- let hb = min([parseIntValue(ft[an]), ey._2])
1360- $Tuple4(ha._1, ha._2, (parseIntValue(ft[am]) + hb), (parseIntValue(ft[an]) - hb))
1393+ let hk = eF(eG, eH, eI, eJ)
1394+ let hl = min([parseIntValue(fD[av]), eI._2])
1395+ $Tuple4(hk._1, hk._2, (parseIntValue(fD[au]) + hl), (parseIntValue(fD[av]) - hl))
13611396 }
1362- let hc = gZ._1
1363- let hd = gZ._2
1364- let he = gZ._3
1365- let hf = gZ._4
1366- $Tuple5([IntegerEntry(ax(dN._2), gY), IntegerEntry(aB(P, dN._2, b), gY)], eT, [fE[ap], hd, fE[ar], fE[as]], fl, [eY[ag], hc, eY[ai], eY[aj], makeString([ft[al], toString(he), toString(hf), ft[ao]], "_")])
1397+ let hm = hj._1
1398+ let hn = hj._2
1399+ let ho = hj._3
1400+ let hp = hj._4
1401+ $Tuple5([IntegerEntry(aF(dX._2), hi), IntegerEntry(aJ(W, dX._2, b), hi)], fd, [fO[ax], hn, fO[az], fO[aA]], fv, [fi[ao], hm, fi[aq], fi[ar], makeString([fD[at], toString(ho), toString(hp), fD[aw]], "_")])
13671402 }
13681403 }
13691404 }
13701405 }
13711406
13721407
1373-func hg (b,aF,gE,gJ) = {
1374- let gQ = ax(aF)
1375- let gR = value(getInteger(gQ))
1376- let gW = (fraction((lastBlock.timestamp - gR), gD(aF, gE), U) * gE)
1377- gU(b, gW, gJ, aF)
1378- }
1379-
1380-
1381-func hh (cY,ga,hi,aF) = {
1382- let b = toString(ga)
1383- let dN = gI(b, cz, aF)
1384- let gE = bT(dN._3[bI])
1385- let hj = ay(dN._2)
1386- let hk = valueOrElse(getInteger(hj), 0)
1387- if ((hk >= 3))
1408+func hq (b,aN,gO,gT) = {
1409+ let ha = aF(aN)
1410+ let hb = value(getInteger(ha))
1411+ let hg = (fraction((lastBlock.timestamp - hb), gN(aN, gO), ab) * gO)
1412+ he(b, hg, gT, aN)
1413+ }
1414+
1415+
1416+func hr (de,gk,hs,aN) = {
1417+ let b = toString(gk)
1418+ let dX = gS(b, cF, aN)
1419+ let gO = bZ(dX._3[bO])
1420+ let ht = aG(dX._2)
1421+ let hu = valueOrElse(getInteger(ht), 0)
1422+ if ((hu >= 3))
13881423 then throw("Currently max infrastructure level = 3")
13891424 else {
1390- let O = (hk + 1)
1391- let hl = fraction(cc, (gE * O), bj)
1392- if (if (!(cY))
1393- then (hi != hl)
1425+ let Q = (hu + 1)
1426+ let hv = fraction(ci, (gO * Q), bq)
1427+ if (if (!(de))
1428+ then (hs != hv)
13941429 else false)
1395- then throw(("Payment attached should be " + toString(hl)))
1430+ then throw(("Payment attached should be " + toString(hv)))
13961431 else {
1397- let eT = aO(dN._1)
1398- let fE = eS(eT)
1399- let gA = split(fE[ar], "_")
1400- let hm = fraction(be, (gE * O), bj)
1401- let gB = makeString(cX(cY, gA, hm), "_")
1402- let hn = hg(b, dN._2, gE, cz)
1403- let ho = hn._5
1404- let hp = eV(ho[ag])
1405- let hq = makeString([split(ho[ag], "_")[0], toString(O)], "_")
1406- let hr = eV(hq)
1407- let ft = split(ho[ak], "_")
1408- let hs = makeString([ft[al], ft[am], toString(((parseIntValue(ft[an]) + hr) - hp)), toString(hr)], "_")
1409- $Tuple3(([IntegerEntry(hj, O), IntegerEntry(cr(dN._2, b), O), StringEntry(eT, makeString([fE[ap], hn._3[aq], gB, fE[as]], ":")), StringEntry(hn._4, makeString([hq, ho[ah], ho[ai], ho[aj], hs], ":"))] ++ hn._1), O, hm)
1432+ let fd = aW(dX._1)
1433+ let fO = fc(fd)
1434+ let gK = split(fO[az], "_")
1435+ let hw = fraction(bl, (gO * Q), bq)
1436+ let gL = makeString(dd(de, gK, hw), "_")
1437+ let hx = hq(b, dX._2, gO, cF)
1438+ let hy = hx._5
1439+ let hz = ff(hy[ao])
1440+ let hA = makeString([split(hy[ao], "_")[0], toString(Q)], "_")
1441+ let hB = ff(hA)
1442+ let fD = split(hy[as], "_")
1443+ let hC = makeString([fD[at], fD[au], toString(((parseIntValue(fD[av]) + hB) - hz)), toString(hB)], "_")
1444+ $Tuple3(([IntegerEntry(ht, Q), IntegerEntry(cx(dX._2, b), Q), StringEntry(fd, makeString([fO[ax], hx._3[ay], gL, fO[aA]], ":")), StringEntry(hx._4, makeString([hA, hy[ap], hy[aq], hy[ar], hC], ":"))] ++ hx._1), Q, hw)
14101445 }
14111446 }
14121447 }
14131448
14141449
1415-func ht (p,hu) = if (!(aZ))
1450+func hD (q,hE) = if (!(bg))
14161451 then $Tuple2(nil, 0)
14171452 else {
1418- let hv = r(p)
1419- let hw = q(p)
1420- let I = valueOrElse(getInteger(bD, hw), 0)
1421- let N = (I + hu)
1422- let hx = L(valueOrElse(getInteger(bD, hv), 0), N)
1423- let hy = s(p)
1424- $Tuple2([IntegerEntry(hv, hx[0]), IntegerEntry(hw, N), IntegerEntry(hy, (valueOrElse(getInteger(hy), 0) + hx[1]))], N)
1425- }
1426-
1427-
1428-func hz (b,hu) = if (!(aZ))
1453+ let hF = t(q)
1454+ let hG = s(q)
1455+ let K = valueOrElse(getInteger(S, hG), 0)
1456+ let P = (K + hE)
1457+ let hH = N(valueOrElse(getInteger(S, hF), 0), P)
1458+ let hI = u(q)
1459+ $Tuple2([IntegerEntry(hF, hH[0]), IntegerEntry(hG, P), IntegerEntry(hI, (valueOrElse(getInteger(hI), 0) + hH[1]))], P)
1460+ }
1461+
1462+
1463+func hJ (b,hE) = if (!(bg))
14291464 then $Tuple2(nil, 0)
14301465 else {
1431- let hv = v(b)
1432- let hw = u(b)
1433- let I = valueOrElse(getInteger(bD, hw), 0)
1434- let N = (I + hu)
1435- let hx = L(valueOrElse(getInteger(bD, hv), 0), N)
1436- let hy = w(b)
1437- $Tuple2([IntegerEntry(hv, hx[0]), IntegerEntry(hw, N), IntegerEntry(hy, (valueOrElse(getInteger(hy), 0) + hx[1]))], N)
1438- }
1439-
1440-
1441-func hA (b) = {
1442- let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked")
1443- let hB = aI(b)
1444- let hC = getString(hB)
1445- if (!(isDefined(hC)))
1466+ let hF = x(b)
1467+ let hG = w(b)
1468+ let K = valueOrElse(getInteger(S, hG), 0)
1469+ let P = (K + hE)
1470+ let hH = N(valueOrElse(getInteger(S, hF), 0), P)
1471+ let hI = y(b)
1472+ $Tuple2([IntegerEntry(hF, hH[0]), IntegerEntry(hG, P), IntegerEntry(hI, (valueOrElse(getInteger(hI), 0) + hH[1]))], P)
1473+ }
1474+
1475+
1476+func hK (b) = {
1477+ let q = valueOrErrorMessage(getString(aV(b)), "You don't have a duck staked")
1478+ let hL = aQ(b)
1479+ let hM = getString(hL)
1480+ if (!(isDefined(hM)))
14461481 then throw("You are not eligible for ONBOARD artifact")
14471482 else {
1448- let hD = aK(b)
1449- let hE = getString(hD)
1450- if (isDefined(hE))
1451- then throw(("You already used your ONBOARD artifact on duck " + value(hE)))
1483+ let hN = aS(b)
1484+ let hO = getString(hN)
1485+ if (isDefined(hO))
1486+ then throw(("You already used your ONBOARD artifact on duck " + value(hO)))
14521487 else {
1453- let hF = aJ(p)
1454- let hG = getString(hF)
1455- if (isDefined(hG))
1456- then throw(((("The duck " + p) + " already got points from ONBOARD artifact from user ") + value(hG)))
1457- else ([StringEntry(hD, p), StringEntry(hF, b)] ++ ht(p, F)._1)
1488+ let hP = aR(q)
1489+ let hQ = getString(hP)
1490+ if (isDefined(hQ))
1491+ then throw(((("The duck " + q) + " already got points from ONBOARD artifact from user ") + value(hQ)))
1492+ else ([StringEntry(hN, q), StringEntry(hP, b)] ++ hD(q, H)._1)
14581493 }
14591494 }
14601495 }
14611496
14621497
1463-func hH (b,gK) = {
1464- let dN = gI(b, cz, gK)
1465- let aF = dN._2
1466- let gE = bT(dN._3[bI])
1467- let hI = az(R, aF)
1468- if ((valueOrElse(getInteger(hI), 0) > 0))
1498+func hR (b,gU) = {
1499+ let dX = gS(b, cF, gU)
1500+ let aN = dX._2
1501+ let gO = bZ(dX._3[bO])
1502+ let hS = aH(Y, aN)
1503+ if ((valueOrElse(getInteger(hS), 0) > 0))
14691504 then throw("Presale artifact is already activated")
1470- else if ((parseIntValue(dN._3[bH]) > cl))
1471- then throw((((P + " ") + aF) + " is not eligible for presale artifact"))
1505+ else if ((parseIntValue(dX._3[bN]) > cr))
1506+ then throw((((W + " ") + aN) + " is not eligible for presale artifact"))
14721507 else {
1473- let hn = hg(b, aF, gE, cz)
1474- ((((hn._1 :+ IntegerEntry(hI, gE)) :+ IntegerEntry(cs(R, aF, b), gE)) :+ StringEntry(hn._2, makeString(hn._3, ":"))) :+ StringEntry(hn._4, makeString(hn._5, ":")))
1508+ let hx = hq(b, aN, gO, cF)
1509+ ((((hx._1 :+ IntegerEntry(hS, gO)) :+ IntegerEntry(cy(Y, aN, b), gO)) :+ StringEntry(hx._2, makeString(hx._3, ":"))) :+ StringEntry(hx._4, makeString(hx._5, ":")))
14751510 }
14761511 }
14771512
14781513
1479-func hJ (hK,O,hL,b,hM,gb,hN) = {
1480- let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked")
1481- func hO (cL,aF) = {
1482- let gP = value(assetInfo(fromBase58String(aF)))
1483- let gQ = ax(aF)
1484- let gR = valueOrErrorMessage(getInteger(gQ), (("NFT " + gP.name) + " is not staked"))
1485- let gS = valueOrErrorMessage(getString(au(aF)), (("NFT " + gP.name) + " is orphaned"))
1486- if ((gS != b))
1487- then throw((P + " is not yours"))
1514+func hT (hU,Q,hV,b,hW,gl,hX) = {
1515+ let q = valueOrErrorMessage(getString(aV(b)), "You don't have a duck staked")
1516+ func hY (cR,aN) = {
1517+ let gZ = value(assetInfo(fromBase58String(aN)))
1518+ let ha = aF(aN)
1519+ let hb = valueOrErrorMessage(getInteger(ha), (("NFT " + gZ.name) + " is not staked"))
1520+ let hc = valueOrErrorMessage(getString(aC(aN)), (("NFT " + gZ.name) + " is orphaned"))
1521+ if ((hc != b))
1522+ then throw((W + " is not yours"))
14881523 else {
1489- let gT = split(gP.description, "_")
1490- let ge = gT[bK]
1491- if (if ((cL._3 != ""))
1492- then (cL._3 != ge)
1524+ let hd = split(gZ.description, "_")
1525+ let go = hd[bQ]
1526+ if (if ((cR._3 != ""))
1527+ then (cR._3 != go)
14931528 else false)
14941529 then throw("Lands should be on the same continent to merge")
14951530 else {
1496- let bU = gT[bI]
1497- let hP = cL._1
1498- let ek = valueOrErrorMessage(indexOf(hP, bU), "You haven't passed all the lands needed")
1499- let hQ = (take(hP, ek) + drop(hP, (ek + 1)))
1500- let gE = bT(bU)
1501- let hR = (cL._2 + valueOrElse(getInteger(az(R, aF)), 0))
1502- let fn = valueOrElse(getInteger(ay(aF)), 0)
1503- let hS = {
1504- let bc = bU
1505- if (("S" == bc))
1531+ let ca = hd[bO]
1532+ let hZ = cR._1
1533+ let eu = valueOrErrorMessage(indexOf(hZ, ca), "You haven't passed all the lands needed")
1534+ let ia = (take(hZ, eu) + drop(hZ, (eu + 1)))
1535+ let gO = bZ(ca)
1536+ let ib = (cR._2 + valueOrElse(getInteger(aH(Y, aN)), 0))
1537+ let fx = valueOrElse(getInteger(aG(aN)), 0)
1538+ let ic = {
1539+ let bj = ca
1540+ if (("S" == bj))
15061541 then 3
1507- else if (("M" == bc))
1542+ else if (("M" == bj))
15081543 then 4
1509- else if (("L" == bc))
1544+ else if (("L" == bj))
15101545 then 5
1511- else if (("XL" == bc))
1546+ else if (("XL" == bj))
15121547 then 6
15131548 else throw("Only S, M, L, XL can merge")
15141549 }
1515- if ((fn != hS))
1550+ if ((fx != ic))
15161551 then throw("All lands should be maxed to merge")
15171552 else {
1518- let co = gT[bH]
1519- let eg = em(gT[bJ])
1520- let eq = (lastBlock.timestamp - gR)
1521- if ((0 > eq))
1522- then throw(((("Saved timestamp is in future, saved = " + toString(gR)) + ", current = ") + toString(lastBlock.timestamp)))
1553+ let cu = hd[bN]
1554+ let eq = ew(hd[bP])
1555+ let eA = (lastBlock.timestamp - hb)
1556+ if ((0 > eA))
1557+ then throw(((("Saved timestamp is in future, saved = " + toString(hb)) + ", current = ") + toString(lastBlock.timestamp)))
15231558 else {
1524- let gV = gD(aF, gE)
1525- let fm = (gE / bj)
1526- let hd = eo(split(cL._4, "_"), eg, eq, fm, gV)
1527- let cV = ee(split(cL._6, "_"), eg, fm, -1)
1528- let hT = cL._7
1529- let bB = indexOf(hT, aF)
1530- if (!(isDefined(bB)))
1531- then throw(("Your staked lands don't contain " + aF))
1559+ let hf = gN(aN, gO)
1560+ let fw = (gO / bq)
1561+ let hn = ey(split(cR._4, "_"), eq, eA, fw, hf)
1562+ let db = eo(split(cR._6, "_"), eq, fw, -1)
1563+ let id = cR._7
1564+ let bI = indexOf(id, aN)
1565+ if (!(isDefined(bI)))
1566+ then throw(("Your staked lands don't contain " + aN))
15321567 else {
1533- let hU = aw(aF)
1534- let hV = valueOrElse(getString(hU), "")
1535- $Tuple8(hQ, hR, ge, hd, (((((((((((((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(hU)) :+ DeleteEntry(cp(hV))) :+ Burn(fromBase58String(aF), 1)), cV, removeByIndex(hT, value(bB)), (cL._8 + gE))
1568+ let ie = aE(aN)
1569+ let if = valueOrElse(getString(ie), "")
1570+ $Tuple8(ia, ib, go, hn, (((((((((((((cR._5 :+ DeleteEntry(aF(aN))) :+ DeleteEntry(aJ(W, aN, b))) :+ DeleteEntry(ct(cu))) :+ DeleteEntry(aC(aN))) :+ DeleteEntry(aG(aN))) :+ DeleteEntry(cx(aN, b))) :+ DeleteEntry(aH(Y, aN))) :+ DeleteEntry(cy(Y, aN, b))) :+ DeleteEntry(cz(cu))) :+ DeleteEntry(aM(aN))) :+ DeleteEntry(ie)) :+ DeleteEntry(cv(if))) :+ Burn(fromBase58String(aN), 1)), db, removeByIndex(id, value(bI)), (cR._8 + gO))
15361571 }
15371572 }
15381573 }
15401575 }
15411576 }
15421577
1543- let eT = aO(p)
1544- let fE = eS(eT)
1545- let hW = valueOrElse(getString(bL()), "0_0_0_0_0_0")
1546- let hX = bM(b)
1547- let hY = getString(hX)
1548- let hZ = if (isDefined(hY))
1549- then split_51C(value(hY), "_")
1578+ let fd = aW(q)
1579+ let fO = fc(fd)
1580+ let ig = valueOrElse(getString(bR()), "0_0_0_0_0_0")
1581+ let ih = bS(b)
1582+ let ii = getString(ih)
1583+ let ij = if (isDefined(ii))
1584+ then split_51C(value(ii), "_")
15501585 else nil
1551- let cW = {
1552- let cN = hM
1553- let cO = size(cN)
1554- let cP = $Tuple8(hL, 0, "", fE[aq], nil, hW, hZ, 0)
1555- func cQ (cR,cS) = if ((cS >= cO))
1556- then cR
1557- else hO(cR, cN[cS])
1558-
1559- func cT (cR,cS) = if ((cS >= cO))
1560- then cR
1586+ let dc = {
1587+ let cT = hW
1588+ let cU = size(cT)
1589+ let cV = $Tuple8(hV, 0, "", fO[ay], nil, ig, ij, 0)
1590+ func cW (cX,cY) = if ((cY >= cU))
1591+ then cX
1592+ else hY(cX, cT[cY])
1593+
1594+ func cZ (cX,cY) = if ((cY >= cU))
1595+ then cX
15611596 else throw("List size exceeds 5")
15621597
1563- cT(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5)
1564- }
1565- let ge = cW._3
1566- let eO = valueOrErrorMessage(indexOf(aa, ge), ("Unknown continent: " + ge))
1567- let en = eM(eF(toBigInt(gb)), eO)
1568- let gd = valueOrElse(getInteger(cm()), (cl + 1))
1569- let ia = toString(gd)
1570- let gf = Issue(cE(ia, hK), makeString([ia, hK, en, ge], "_"), 1, 0, false)
1571- let av = calculateAssetId(gf)
1572- let ib = toBase58String(av)
1573- let gB = makeString(cX((hN > 0), split(fE[ar], "_"), hN), "_")
1574- let ic = bN(b)
1575- let id = valueOrElse(getInteger(ic), 0)
1576- $Tuple2((((((((((((((((cW._5 :+ (if ((size(cW._7) > 0))
1577- then StringEntry(hX, makeString_11C(cW._7, "_"))
1578- else DeleteEntry(hX))) :+ IntegerEntry(ic, if ((cW._8 > id))
1598+ cZ(cW(cW(cW(cW(cW(cV, 0), 1), 2), 3), 4), 5)
1599+ }
1600+ let go = dc._3
1601+ let eY = valueOrErrorMessage(indexOf(ah, go), ("Unknown continent: " + go))
1602+ let ex = eW(eP(toBigInt(gl)), eY)
1603+ let gn = valueOrElse(getInteger(cs()), (cr + 1))
1604+ let ik = toString(gn)
1605+ let gp = Issue(cK(ik, hU), makeString([ik, hU, ex, go], "_"), 1, 0, false)
1606+ let aD = calculateAssetId(gp)
1607+ let il = toBase58String(aD)
1608+ let gL = makeString(dd((hX > 0), split(fO[az], "_"), hX), "_")
1609+ let im = bT(b)
1610+ let in = valueOrElse(getInteger(im), 0)
1611+ $Tuple2((((((((((((((((dc._5 :+ (if ((size(dc._7) > 0))
1612+ then StringEntry(ih, makeString_11C(dc._7, "_"))
1613+ else DeleteEntry(ih))) :+ IntegerEntry(im, if ((dc._8 > in))
15791614 then 0
1580- else (id - cW._8))) :+ IntegerEntry(cm(), (gd + 1))) :+ gf) :+ StringEntry(cn(ia), ib)) :+ StringEntry(au(ib), b)) :+ StringEntry(ct(ia), b)) :+ IntegerEntry(az(R, ib), cW._2)) :+ IntegerEntry(cs(R, ib, b), cW._2)) :+ IntegerEntry(ay(ib), O)) :+ IntegerEntry(cr(ib, b), O)) :+ StringEntry(eT, makeString([fE[ap], cW._4, gB, fE[as]], ":"))) :+ StringEntry(bL(), cW._6)) :+ StringEntry(aP(p), makeString([ge, "L", ib], "_"))) :+ ScriptTransfer(addressFromStringValue(b), 1, av)), ib)
1581- }
1582-
1583-
1584-func ie (b,hM,gb) = hJ("M", 3, "SSSS", b, hM, gb, 0)
1585-
1586-
1587-func if (b,hM,gb,cY,hi) = {
1588- let hl = (cc * 4)
1589- if (if (!(cY))
1590- then (hi != hl)
1615+ else (in - dc._8))) :+ IntegerEntry(cs(), (gn + 1))) :+ gp) :+ StringEntry(ct(ik), il)) :+ StringEntry(aC(il), b)) :+ StringEntry(cz(ik), b)) :+ IntegerEntry(aH(Y, il), dc._2)) :+ IntegerEntry(cy(Y, il, b), dc._2)) :+ IntegerEntry(aG(il), Q)) :+ IntegerEntry(cx(il, b), Q)) :+ StringEntry(fd, makeString([fO[ax], dc._4, gL, fO[aA]], ":"))) :+ StringEntry(bR(), dc._6)) :+ StringEntry(aX(q), makeString([go, "L", il], "_"))) :+ ScriptTransfer(addressFromStringValue(b), 1, aD)), il)
1616+ }
1617+
1618+
1619+func io (b,hW,gl) = hT("M", 3, "SSSS", b, hW, gl, 0)
1620+
1621+
1622+func ip (b,hW,gl,de,hs) = {
1623+ let hv = (ci * 4)
1624+ if (if (!(de))
1625+ then (hs != hv)
15911626 else false)
1592- then throw(("Payment attached should be " + toString(hl)))
1593- else hJ("L", 4, "SMM", b, hM, gb, (be * 4))
1594- }
1595-
1596-
1597-func ig (b,hM,gb,cY,hi) = {
1598- let hl = (cc * 47)
1599- if (if (!(cY))
1600- then (hi != hl)
1627+ then throw(("Payment attached should be " + toString(hv)))
1628+ else hT("L", 4, "SMM", b, hW, gl, (bl * 4))
1629+ }
1630+
1631+
1632+func iq (b,hW,gl,de,hs) = {
1633+ let hv = (ci * 47)
1634+ if (if (!(de))
1635+ then (hs != hv)
16011636 else false)
1602- then throw(("Payment attached should be " + toString(hl)))
1603- else hJ("XL", 5, "SSSML", b, hM, gb, (be * 47))
1604- }
1605-
1606-
1607-func ih (b,hM,gb,cY,hi) = {
1608- let hl = (cc * 54)
1609- if (if (!(cY))
1610- then (hi != hl)
1637+ then throw(("Payment attached should be " + toString(hv)))
1638+ else hT("XL", 5, "SSSML", b, hW, gl, (bl * 47))
1639+ }
1640+
1641+
1642+func ir (b,hW,gl,de,hs) = {
1643+ let hv = (ci * 54)
1644+ if (if (!(de))
1645+ then (hs != hv)
16111646 else false)
1612- then throw(("Payment attached should be " + toString(hl)))
1613- else hJ("XXL", 6, "LXL", b, hM, gb, (be * 54))
1614- }
1615-
1616-
1617-func ii (cY,b,hi,hM,gb) = {
1618- let ij = {
1619- let bc = size(hM)
1620- if ((4 == bc))
1621- then ie(b, hM, gb)
1622- else if ((3 == bc))
1623- then if(b, hM, gb, cY, hi)
1624- else if ((5 == bc))
1625- then ig(b, hM, gb, cY, hi)
1626- else if ((2 == bc))
1627- then ih(b, hM, gb, cY, hi)
1647+ then throw(("Payment attached should be " + toString(hv)))
1648+ else hT("XXL", 6, "LXL", b, hW, gl, (bl * 54))
1649+ }
1650+
1651+
1652+func is (de,b,hs,hW,gl) = {
1653+ let it = {
1654+ let bj = size(hW)
1655+ if ((4 == bj))
1656+ then io(b, hW, gl)
1657+ else if ((3 == bj))
1658+ then ip(b, hW, gl, de, hs)
1659+ else if ((5 == bj))
1660+ then iq(b, hW, gl, de, hs)
1661+ else if ((2 == bj))
1662+ then ir(b, hW, gl, de, hs)
16281663 else throw("Unknown merge")
16291664 }
1630- ij
1631- }
1632-
1633-
1634-func ik (ek) = if (if ((ek.originCaller != bC))
1635- then valueOrElse(getBoolean(aR()), false)
1665+ it
1666+ }
1667+
1668+
1669+func iu (eu) = if (if ((eu.originCaller != bJ))
1670+ then valueOrElse(getBoolean(aY()), false)
16361671 else false)
16371672 then throw("Contracts are under maintenance")
1638- else StringEntry(at(toString(ek.originCaller)), toBase58String(ek.transactionId))
1639-
1640-
1641-@Callable(ek)
1642-func constructorV1 (il) = if ((ek.caller != this))
1673+ else StringEntry(aB(toString(eu.originCaller)), toBase58String(eu.transactionId))
1674+
1675+
1676+@Callable(eu)
1677+func constructorV1 (iv) = if ((eu.caller != this))
16431678 then throw("Permission denied")
1644- else [StringEntry(bw(), il)]
1645-
1646-
1647-
1648-@Callable(ek)
1649-func setBlocked (im) = if ((ek.caller != this))
1679+ else [StringEntry(bD(), iv)]
1680+
1681+
1682+
1683+@Callable(eu)
1684+func setBlocked (iw) = if ((eu.caller != this))
16501685 then throw("permission denied")
1651- else [BooleanEntry(aR(), im)]
1652-
1653-
1654-
1655-@Callable(ek)
1686+ else [BooleanEntry(aY(), iw)]
1687+
1688+
1689+
1690+@Callable(eu)
16561691 func stakeLand () = {
1657- let in = ik(ek)
1658- if ((size(ek.payments) != 1))
1692+ let ix = iu(eu)
1693+ if ((size(eu.payments) != 1))
16591694 then throw("Exactly one payment required")
16601695 else {
1661- let io = value(ek.payments[0])
1662- let av = value(io.assetId)
1663- let bp = toString(ek.caller)
1664- if ((io.amount != 1))
1665- then throw((("NFT " + P) + " token should be attached as payment"))
1696+ let iy = value(eu.payments[0])
1697+ let aD = value(iy.assetId)
1698+ let bw = toString(eu.caller)
1699+ if ((iy.amount != 1))
1700+ then throw((("NFT " + W) + " token should be attached as payment"))
16661701 else {
1667- let gP = value(assetInfo(av))
1668- if ((gP.issuer != this))
1702+ let gZ = value(assetInfo(aD))
1703+ if ((gZ.issuer != this))
16691704 then throw("Unknown issuer of token")
1670- else if (!(contains(gP.name, P)))
1671- then throw((("Only NFT " + P) + " tokens are accepted"))
1705+ else if (!(contains(gZ.name, W)))
1706+ then throw((("Only NFT " + W) + " tokens are accepted"))
16721707 else {
1673- let ip = drop(gP.name, 4)
1674- let co = if (contains(ip, "XXL"))
1675- then dropRight(ip, 3)
1676- else if (contains(ip, "XL"))
1677- then dropRight(ip, 2)
1678- else dropRight(ip, 1)
1679- if (!(isDefined(parseInt(co))))
1680- then throw(("Cannot parse land number from " + gP.name))
1708+ let iz = drop(gZ.name, 4)
1709+ let cu = if (contains(iz, "XXL"))
1710+ then dropRight(iz, 3)
1711+ else if (contains(iz, "XL"))
1712+ then dropRight(iz, 2)
1713+ else dropRight(iz, 1)
1714+ if (!(isDefined(parseInt(cu))))
1715+ then throw(("Cannot parse land number from " + gZ.name))
16811716 else {
1682- let aF = toBase58String(av)
1683- let gQ = ax(aF)
1684- if (isDefined(getInteger(gQ)))
1685- then throw((("NFT " + gP.name) + " is already staked"))
1717+ let aN = toBase58String(aD)
1718+ let ha = aF(aN)
1719+ if (isDefined(getInteger(ha)))
1720+ then throw((("NFT " + gZ.name) + " is already staked"))
16861721 else {
1687- let gT = split(gP.description, "_")
1688- let eg = em(gT[bJ])
1689- let gE = bT(gT[bI])
1690- let cV = el(eg, (gE / bj), 1)
1691- let gF = valueOrElse(getInteger(az(R, aF)), 0)
1692- let hX = bM(bp)
1693- let hY = getString(hX)
1694- let hT = if (isDefined(hY))
1695- then split_51C(value(hY), "_")
1722+ let hd = split(gZ.description, "_")
1723+ let eq = ew(hd[bP])
1724+ let gO = bZ(hd[bO])
1725+ let db = ev(eq, (gO / bq), 1)
1726+ let gP = valueOrElse(getInteger(aH(Y, aN)), 0)
1727+ let ih = bS(bw)
1728+ let ii = getString(ih)
1729+ let id = if (isDefined(ii))
1730+ then split_51C(value(ii), "_")
16961731 else nil
1697- if (containsElement(hT, aF))
1698- then throw(("Your staked lands already contain " + aF))
1732+ if (containsElement(id, aN))
1733+ then throw(("Your staked lands already contain " + aN))
16991734 else {
1700- let fn = valueOrElse(getInteger(ay(aF)), 0)
1701- let ic = bN(bp)
1702- let iq = valueOrElse(getInteger(ic), 0)
1703- let ir = bR(invoke(bG, "onStakeUnstakeLand", [bp], nil))
1704- $Tuple2([IntegerEntry(gQ, lastBlock.timestamp), IntegerEntry(aB(P, aF, bp), lastBlock.timestamp), StringEntry(hX, makeString_11C((hT :+ aF), "_")), IntegerEntry(ic, (iq + gE)), StringEntry(au(aF), bp), StringEntry(ct(co), bp), IntegerEntry(cs(R, aF, bp), gF), IntegerEntry(cr(aF, bp), fn), StringEntry(bL(), cV), in], ir)
1735+ let fx = valueOrElse(getInteger(aG(aN)), 0)
1736+ let im = bT(bw)
1737+ let iA = valueOrElse(getInteger(im), 0)
1738+ let iB = bX(invoke(bM, "onStakeUnstakeLand", [bw], nil))
1739+ $Tuple2([IntegerEntry(ha, lastBlock.timestamp), IntegerEntry(aJ(W, aN, bw), lastBlock.timestamp), StringEntry(ih, makeString_11C((id :+ aN), "_")), IntegerEntry(im, (iA + gO)), StringEntry(aC(aN), bw), StringEntry(cz(cu), bw), IntegerEntry(cy(Y, aN, bw), gP), IntegerEntry(cx(aN, bw), fx), StringEntry(bR(), db), ix], iB)
17051740 }
17061741 }
17071742 }
17121747
17131748
17141749
1715-@Callable(ek)
1716-func unstakeLand (gK) = {
1717- let in = ik(ek)
1718- if ((size(ek.payments) != 0))
1750+@Callable(eu)
1751+func unstakeLand (gU) = {
1752+ let ix = iu(eu)
1753+ if ((size(eu.payments) != 0))
17191754 then throw("No payments required")
17201755 else {
1721- let b = toString(ek.caller)
1722- let dN = gI(b, cy, gK)
1723- let aF = dN._2
1724- let hX = bM(b)
1725- let eg = em(dN._3[bJ])
1726- let gE = bT(dN._3[bI])
1727- let cV = el(eg, (gE / bj), -1)
1728- let hn = hg(b, aF, gE, cy)
1729- let hT = split_51C(valueOrElse(getString(hX), ""), "_")
1730- let bB = indexOf(hT, aF)
1731- if (!(isDefined(bB)))
1732- then throw(("Your staked lands don't contain " + aF))
1756+ let b = toString(eu.caller)
1757+ let dX = gS(b, cE, gU)
1758+ let aN = dX._2
1759+ let ih = bS(b)
1760+ let eq = ew(dX._3[bP])
1761+ let gO = bZ(dX._3[bO])
1762+ let db = ev(eq, (gO / bq), -1)
1763+ let hx = hq(b, aN, gO, cE)
1764+ let id = split_51C(valueOrElse(getString(ih), ""), "_")
1765+ let bI = indexOf(id, aN)
1766+ if (!(isDefined(bI)))
1767+ then throw(("Your staked lands don't contain " + aN))
17331768 else {
1734- let is = lastBlock.timestamp
1735- let it = valueOrElse(getInteger(bF, aS(b)), 0)
1736- if ((it >= is))
1737- then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(it)))
1769+ let iC = lastBlock.timestamp
1770+ let iD = valueOrElse(getInteger(bL, aZ(b)), 0)
1771+ if ((iD >= iC))
1772+ then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(iD)))
17381773 else {
1739- let iu = (valueOrElse(getInteger(bG, a(b)), 0) + bf)
1740- if ((iu > is))
1741- then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString(iu)))
1774+ let iE = (valueOrElse(getInteger(bM, a(b)), 0) + bm)
1775+ if ((iE > iC))
1776+ then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString(iE)))
17421777 else {
1743- let ic = bN(b)
1744- let id = valueOrElse(getInteger(ic), 0)
1745- let iv = if ((gE > id))
1778+ let im = bT(b)
1779+ let in = valueOrElse(getInteger(im), 0)
1780+ let iF = if ((gO > in))
17461781 then 0
1747- else (id - gE)
1748- let ir = bR(invoke(bG, "onStakeUnstakeLand", [b], nil))
1749- $Tuple2([ScriptTransfer(ek.caller, 1, fromBase58String(aF)), DeleteEntry(ax(aF)), DeleteEntry(aB(P, aF, b)), StringEntry(bL(), cV), StringEntry(hn._2, makeString(hn._3, ":")), if ((size(hT) > 1))
1750- then StringEntry(hX, makeString_11C(removeByIndex(hT, value(bB)), "_"))
1751- else DeleteEntry(hX), IntegerEntry(ic, iv), in], ir)
1782+ else (in - gO)
1783+ let iB = bX(invoke(bM, "onStakeUnstakeLand", [b], nil))
1784+ $Tuple2([ScriptTransfer(eu.caller, 1, fromBase58String(aN)), DeleteEntry(aF(aN)), DeleteEntry(aJ(W, aN, b)), StringEntry(bR(), db), StringEntry(hx._2, makeString(hx._3, ":")), if ((size(id) > 1))
1785+ then StringEntry(ih, makeString_11C(removeByIndex(id, value(bI)), "_"))
1786+ else DeleteEntry(ih), IntegerEntry(im, iF), ix], iB)
17521787 }
17531788 }
17541789 }
17571792
17581793
17591794
1760-@Callable(ek)
1795+@Callable(eu)
17611796 func stakeDuck () = {
1762- let in = ik(ek)
1763- if ((size(ek.payments) != 1))
1797+ let ix = iu(eu)
1798+ if ((size(eu.payments) != 1))
17641799 then throw("Exactly one payment required")
17651800 else {
1766- let io = value(ek.payments[0])
1767- let av = value(io.assetId)
1768- let bp = toString(ek.caller)
1769- if ((io.amount != 1))
1770- then throw((("NFT " + Q) + " token should be attached as payment"))
1801+ let iy = value(eu.payments[0])
1802+ let aD = value(iy.assetId)
1803+ let bw = toString(eu.caller)
1804+ if ((iy.amount != 1))
1805+ then throw((("NFT " + X) + " token should be attached as payment"))
17711806 else {
1772- let gP = value(assetInfo(av))
1773- if (if ((gP.issuer != bV))
1774- then (gP.issuer != bW)
1807+ let gZ = value(assetInfo(aD))
1808+ if (if ((gZ.issuer != cb))
1809+ then (gZ.issuer != cc)
17751810 else false)
1776- then throw((("Unknown issuer of " + Q) + " token"))
1777- else if (!(contains(gP.name, Q)))
1778- then throw((("Only NFT " + Q) + " tokens are accepted"))
1811+ then throw((("Unknown issuer of " + X) + " token"))
1812+ else if (!(contains(gZ.name, X)))
1813+ then throw((("Only NFT " + X) + " tokens are accepted"))
17791814 else {
1780- let iw = toBase58String(av)
1781- let gQ = ax(iw)
1782- if (isDefined(getInteger(gQ)))
1783- then throw((("NFT " + gP.name) + " is already staked"))
1784- else if (isDefined(getString(aN(bp))))
1785- then throw(("You already staked one duck: " + gP.name))
1815+ let iG = toBase58String(aD)
1816+ let ha = aF(iG)
1817+ if (isDefined(getInteger(ha)))
1818+ then throw((("NFT " + gZ.name) + " is already staked"))
1819+ else if (isDefined(getString(aV(bw))))
1820+ then throw(("You already staked one duck: " + gZ.name))
17861821 else {
1787- let ix = aP(iw)
1788- let iy = getString(ix)
1789- let eT = aO(iw)
1790- let iz = getString(eT)
1791- let gt = aQ(iw)
1792- let gu = J(valueOrElse(getInteger(r(iw)), 0))
1793- let iA = valueOrElse(getInteger(gt), gu)
1794- ([IntegerEntry(gQ, lastBlock.timestamp), IntegerEntry(aB(Q, toBase58String(av), bp), lastBlock.timestamp), StringEntry(aM(iw), bp), StringEntry(aN(bp), iw)] ++ (if (isDefined(iy))
1822+ let iH = aX(iG)
1823+ let iI = getString(iH)
1824+ let fd = aW(iG)
1825+ let iJ = getString(fd)
1826+ let gD = p(iG)
1827+ let gE = L(valueOrElse(getInteger(t(iG)), 0))
1828+ let iK = valueOrElse(getInteger(gD), gE)
1829+ ([IntegerEntry(ha, lastBlock.timestamp), IntegerEntry(aJ(X, toBase58String(aD), bw), lastBlock.timestamp), StringEntry(aU(iG), bw), StringEntry(aV(bw), iG)] ++ (if (isDefined(iI))
17951830 then nil
1796- else ([StringEntry(ix, W)] ++ (if (isDefined(iz))
1831+ else ([StringEntry(iH, ad)] ++ (if (isDefined(iJ))
17971832 then nil
1798- else (([StringEntry(eT, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(gt, iA)) :+ in)))))
1833+ else (([StringEntry(fd, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(gD, iK)) :+ ix)))))
17991834 }
18001835 }
18011836 }
18041839
18051840
18061841
1807-@Callable(ek)
1808-func unstakeDuck (iw) = {
1809- let in = ik(ek)
1810- if ((size(ek.payments) != 0))
1842+@Callable(eu)
1843+func unstakeDuck (iG) = {
1844+ let ix = iu(eu)
1845+ if ((size(eu.payments) != 0))
18111846 then throw("No payments required")
18121847 else {
1813- let av = fromBase58String(iw)
1814- let bp = toString(ek.caller)
1815- let gP = value(assetInfo(av))
1816- let gQ = ax(toBase58String(av))
1817- if (!(isDefined(getInteger(gQ))))
1818- then throw((("NFT " + gP.name) + " is not staked"))
1819- else if (!(isDefined(getString(aN(bp)))))
1820- then throw((("The duck " + gP.name) + " is not staked"))
1848+ let aD = fromBase58String(iG)
1849+ let bw = toString(eu.caller)
1850+ let gZ = value(assetInfo(aD))
1851+ let ha = aF(toBase58String(aD))
1852+ if (!(isDefined(getInteger(ha))))
1853+ then throw((("NFT " + gZ.name) + " is not staked"))
1854+ else if (!(isDefined(getString(aV(bw)))))
1855+ then throw((("The duck " + gZ.name) + " is not staked"))
18211856 else {
1822- let gS = valueOrErrorMessage(getString(aM(toBase58String(av))), (("NFT " + gP.name) + " is orphaned"))
1823- if ((gS != bp))
1857+ let hc = valueOrErrorMessage(getString(aU(toBase58String(aD))), (("NFT " + gZ.name) + " is orphaned"))
1858+ if ((hc != bw))
18241859 then throw("Staked NFT is not yours")
18251860 else {
1826- let gt = aQ(iw)
1827- let gu = J(valueOrElse(getInteger(r(iw)), 0))
1828- let iB = valueOrElse(getInteger(gt), gu)
1829- if ((gu > iB))
1830- then throw((("Please heal your duck to " + toString(gu)) + "hp before unstaking"))
1831- else [ScriptTransfer(ek.caller, 1, av), DeleteEntry(gQ), DeleteEntry(gt), DeleteEntry(aP(iw)), DeleteEntry(aM(iw)), DeleteEntry(aB(Q, iw, bp)), DeleteEntry(aN(bp)), in]
1861+ let gD = p(iG)
1862+ let gE = L(valueOrElse(getInteger(t(iG)), 0))
1863+ let V = valueOrElse(getInteger(gD), gE)
1864+ if ((gE > V))
1865+ then throw((("Please heal your duck to " + toString(gE)) + "hp before unstaking"))
1866+ else [ScriptTransfer(eu.caller, 1, aD), DeleteEntry(ha), DeleteEntry(gD), DeleteEntry(aX(iG)), DeleteEntry(aU(iG)), DeleteEntry(aJ(X, iG, bw)), DeleteEntry(aV(bw)), ix]
18321867 }
18331868 }
18341869 }
18361871
18371872
18381873
1839-@Callable(ek)
1840-func claimRes (fA,iC) = {
1841- let in = ik(ek)
1842- if ((size(ek.payments) != 0))
1874+@Callable(eu)
1875+func claimRes (fK,iL) = {
1876+ let ix = iu(eu)
1877+ if ((size(eu.payments) != 0))
18431878 then throw("No payments required")
18441879 else {
1845- let b = toString(ek.originCaller)
1846- let dd = gU(b, fA, cy, iC)
1847- let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked")
1848- $Tuple2(((((dd._1 ++ ht(p, fraction(x, fA, bi))._1) :+ StringEntry(dd._2, makeString(dd._3, ":"))) :+ StringEntry(dd._4, makeString(dd._5, ":"))) :+ in), dd._3[aq])
1849- }
1850- }
1851-
1852-
1853-
1854-@Callable(ek)
1855-func claimResToWH (fA,iC) = {
1856- let in = ik(ek)
1857- if ((size(ek.payments) != 0))
1880+ let b = toString(eu.originCaller)
1881+ let dj = he(b, fK, cE, iL)
1882+ let q = valueOrErrorMessage(getString(aV(b)), "You don't have a duck staked")
1883+ $Tuple2(((((dj._1 ++ hD(q, fraction(z, fK, bp))._1) :+ StringEntry(dj._2, makeString(dj._3, ":"))) :+ StringEntry(dj._4, makeString(dj._5, ":"))) :+ ix), dj._3[ay])
1884+ }
1885+ }
1886+
1887+
1888+
1889+@Callable(eu)
1890+func claimResToWH (fK,iL) = {
1891+ let ix = iu(eu)
1892+ if ((size(eu.payments) != 0))
18581893 then throw("No payments required")
18591894 else {
1860- let b = toString(ek.originCaller)
1861- let dd = gU(b, fA, cx, iC)
1862- $Tuple2(((((dd._1 ++ hz(b, fraction(x, fA, bi))._1) :+ StringEntry(dd._2, makeString(dd._3, ":"))) :+ StringEntry(dd._4, makeString(dd._5, ":"))) :+ in), dd._5[ah])
1863- }
1864- }
1865-
1866-
1867-
1868-@Callable(ek)
1869-func flight (gi,gj) = {
1870- let in = ik(ek)
1871- if ((size(ek.payments) != 0))
1895+ let b = toString(eu.originCaller)
1896+ let dj = he(b, fK, cD, iL)
1897+ $Tuple2(((((dj._1 ++ hJ(b, fraction(z, fK, bp))._1) :+ StringEntry(dj._2, makeString(dj._3, ":"))) :+ StringEntry(dj._4, makeString(dj._5, ":"))) :+ ix), dj._5[ap])
1898+ }
1899+ }
1900+
1901+
1902+
1903+@Callable(eu)
1904+func flight (gs,gt) = {
1905+ let ix = iu(eu)
1906+ if ((size(eu.payments) != 0))
18721907 then throw("No payments required")
18731908 else {
1874- let aT = toString(ek.caller)
1875- let eP = gh(aT, gi, gj)
1876- let p = eP._2
1877- let ix = aP(p)
1878- let gM = valueOrElse(getString(ix), W)
1879- if ((eP._4 == gM))
1909+ let ba = toString(eu.caller)
1910+ let eZ = gr(ba, gs, gt)
1911+ let q = eZ._2
1912+ let iH = aX(q)
1913+ let gW = valueOrElse(getString(iH), ad)
1914+ if ((eZ._4 == gW))
18801915 then throw("You can't fly to the same location")
18811916 else {
1882- let eT = aO(p)
1883- let fE = eS(eT)
1884- let dt = de(fE[as], eP._5)
1885- $Tuple2(([StringEntry(ix, if ((eP._1 > 0))
1886- then eP._4
1887- else gM), StringEntry(eT, makeString([fE[ap], fE[aq], fE[ar], dt], ":")), IntegerEntry(aQ(p), eP._1), in] ++ ht(p, if ((eP._1 > 0))
1888- then y
1889- else z)._1), eP._3)
1917+ let fd = aW(q)
1918+ let fO = fc(fd)
1919+ let dz = dk(fO[aA], eZ._5)
1920+ $Tuple2(([StringEntry(iH, if ((eZ._1 > 0))
1921+ then eZ._4
1922+ else gW), StringEntry(fd, makeString([fO[ax], fO[ay], fO[az], dz], ":")), IntegerEntry(p(q), eZ._1), ix] ++ hD(q, if ((eZ._1 > 0))
1923+ then A
1924+ else B)._1), eZ._3)
18901925 }
18911926 }
18921927 }
18931928
18941929
18951930
1896-@Callable(ek)
1897-func heal (iD,iE,iF) = {
1898- let in = ik(ek)
1899- if (if (if ((0 > iD))
1931+@Callable(eu)
1932+func heal (iM,iN,iO) = {
1933+ let ix = iu(eu)
1934+ if (if (if ((0 > iM))
19001935 then true
1901- else (0 > iE))
1936+ else (0 > iN))
19021937 then true
1903- else (0 > iF))
1938+ else (0 > iO))
19041939 then throw("Quantity cannot be negative")
19051940 else {
1906- let p = valueOrErrorMessage(getString(aN(toString(ek.caller))), "You don't have a duck staked")
1907- let iG = [iD, iE, iF]
1908- let gt = aQ(p)
1909- let gu = J(valueOrElse(getInteger(r(p)), 0))
1910- let iH = valueOrElse(getInteger(gt), gu)
1911- if ((iH >= gu))
1912- then throw((("HP should be < " + toString(gu)) + " to heal"))
1941+ let q = valueOrErrorMessage(getString(aV(toString(eu.caller))), "You don't have a duck staked")
1942+ let iP = [iM, iN, iO]
1943+ let gD = p(q)
1944+ let gE = L(valueOrElse(getInteger(t(q)), 0))
1945+ let iQ = valueOrElse(getInteger(gD), gE)
1946+ if ((iQ >= gE))
1947+ then throw((("HP should be < " + toString(gE)) + " to heal"))
19131948 else {
1914- let eT = aO(p)
1915- let fE = eS(eT)
1916- let iI = if ((fE[as] == ""))
1949+ let fd = aW(q)
1950+ let fO = fc(fd)
1951+ let iR = if ((fO[aA] == ""))
19171952 then nil
1918- else split(fE[as], "_")
1919- func iJ (cL,iK) = {
1920- let bS = cL._2
1921- let eG = if ((size(iI) > bS))
1922- then parseIntValue(iI[bS])
1953+ else split(fO[aA], "_")
1954+ func iS (cR,iT) = {
1955+ let bY = cR._2
1956+ let eQ = if ((size(iR) > bY))
1957+ then parseIntValue(iR[bY])
19231958 else 0
1924- if ((3 > bS))
1959+ if ((3 > bY))
19251960 then {
1926- let iL = iG[bS]
1927- if ((iL > eG))
1928- then throw(((("You have only " + toString(eG)) + " of ") + Z[bS]))
1929- else $Tuple3((cL._1 :+ toString((eG - iL))), (bS + 1), (cL._3 + (bY[bS] * iL)))
1961+ let iU = iP[bY]
1962+ if ((iU > eQ))
1963+ then throw(((("You have only " + toString(eQ)) + " of ") + ag[bY]))
1964+ else $Tuple3((cR._1 :+ toString((eQ - iU))), (bY + 1), (cR._3 + (ce[bY] * iU)))
19301965 }
1931- else $Tuple3((cL._1 :+ toString(eG)), (bS + 1), cL._3)
1966+ else $Tuple3((cR._1 :+ toString(eQ)), (bY + 1), cR._3)
19321967 }
19331968
1934- let dd = {
1935- let cN = ac
1936- let cO = size(cN)
1937- let cP = $Tuple3(nil, 0, 0)
1938- func cQ (cR,cS) = if ((cS >= cO))
1939- then cR
1940- else iJ(cR, cN[cS])
1941-
1942- func cT (cR,cS) = if ((cS >= cO))
1943- then cR
1969+ let dj = {
1970+ let cT = aj
1971+ let cU = size(cT)
1972+ let cV = $Tuple3(nil, 0, 0)
1973+ func cW (cX,cY) = if ((cY >= cU))
1974+ then cX
1975+ else iS(cX, cT[cY])
1976+
1977+ func cZ (cX,cY) = if ((cY >= cU))
1978+ then cX
19441979 else throw("List size exceeds 50")
19451980
1946- 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)
1981+ cZ(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cV, 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)
19471982 }
1948- let iM = min([gu, (iH + dd._3)])
1949- $Tuple2(([IntegerEntry(gt, iM), StringEntry(eT, makeString_2C([fE[ap], fE[aq], fE[ar], makeString(dd._1, "_")], ":")), in] ++ ht(p, (G * ((iD + iE) + iF)))._1), iM)
1983+ let iV = min([gE, (iQ + dj._3)])
1984+ $Tuple2(([IntegerEntry(gD, iV), StringEntry(fd, makeString_2C([fO[ax], fO[ay], fO[az], makeString(dj._1, "_")], ":")), ix] ++ hD(q, (I * ((iM + iN) + iO)))._1), iV)
19501985 }
19511986 }
19521987 }
19531988
19541989
19551990
1956-@Callable(ek)
1991+@Callable(eu)
19571992 func healES () = {
1958- let in = ik(ek)
1959- if ((size(ek.payments) != 1))
1993+ let ix = iu(eu)
1994+ if ((size(eu.payments) != 1))
19601995 then throw("Exactly one payment required")
19611996 else {
1962- let io = value(ek.payments[0])
1963- if ((io.assetId != bb))
1997+ let iy = value(eu.payments[0])
1998+ if ((iy.assetId != bi))
19641999 then throw("Allowed USDT payment only!")
19652000 else {
1966- let p = valueOrErrorMessage(getString(aN(toString(ek.caller))), "You don't have a duck staked")
1967- let gt = aQ(p)
1968- let gu = J(valueOrElse(getInteger(r(p)), 0))
1969- let iH = valueOrElse(getInteger(gt), gu)
1970- if ((iH > 0))
2001+ let q = valueOrErrorMessage(getString(aV(toString(eu.caller))), "You don't have a duck staked")
2002+ let gD = p(q)
2003+ let gE = L(valueOrElse(getInteger(t(q)), 0))
2004+ let iQ = valueOrElse(getInteger(gD), gE)
2005+ if ((iQ > 0))
19712006 then throw("HP should be 0 to call Emergency Service")
19722007 else {
1973- let eT = aO(p)
1974- let fE = eS(eT)
1975- let iI = if ((fE[as] == ""))
2008+ let fd = aW(q)
2009+ let fO = fc(fd)
2010+ let iR = if ((fO[aA] == ""))
19762011 then nil
1977- else split(fE[as], "_")
1978- let iN = if ((size(iI) > 0))
1979- then parseIntValue(iI[0])
2012+ else split(fO[aA], "_")
2013+ let iW = if ((size(iR) > 0))
2014+ then parseIntValue(iR[0])
19802015 else 0
1981- let iO = if ((size(iI) > 1))
1982- then parseIntValue(iI[1])
2016+ let iX = if ((size(iR) > 1))
2017+ then parseIntValue(iR[1])
19832018 else 0
1984- let iP = if ((size(iI) > 2))
1985- then parseIntValue(iI[2])
2019+ let iY = if ((size(iR) > 2))
2020+ then parseIntValue(iR[2])
19862021 else 0
1987- if (if (if ((iN > 0))
2022+ if (if (if ((iW > 0))
19882023 then true
1989- else (iO > 0))
2024+ else (iX > 0))
19902025 then true
1991- else (iP > 0))
2026+ else (iY > 0))
19922027 then throw("You have to use own Medical Kit")
19932028 else {
1994- let iQ = getString(bE, aU())
1995- let iR = if (isDefined(iQ))
1996- then split(value(iQ), "_")
2029+ let iZ = getString(bK, bb())
2030+ let ja = if (isDefined(iZ))
2031+ then split(value(iZ), "_")
19972032 else nil
1998- let iS = if ((size(iR) > 0))
1999- then parseIntValue(iR[0])
2033+ let jb = if ((size(ja) > 0))
2034+ then parseIntValue(ja[0])
20002035 else 0
2001- if ((0 >= iS))
2036+ if ((0 >= jb))
20022037 then throw("There are no Medical Kits L1 at Emergency Service storage")
20032038 else {
2004- let iM = (iH + bY[0])
2005- let iT = makeString([toString((iS - 1)), removeByIndex(iR, 0)], "_")
2006- let aY = split(ac[0], "_")
2007- let iU = aX(aY)
2008- let iV = fraction((iU * Y), X, (10 * af))
2009- if ((io.amount != iV))
2010- then throw(("Payment attached should be " + toString(iV)))
2039+ let iV = (iQ + ce[0])
2040+ let jc = makeString([toString((jb - 1)), removeByIndex(ja, 0)], "_")
2041+ let bf = split(aj[0], "_")
2042+ let jd = be(bf)
2043+ let je = fraction((jd * af), ae, (10 * an))
2044+ if ((iy.amount != je))
2045+ then throw(("Payment attached should be " + toString(je)))
20112046 else {
2012- let dd = bO(invoke(bE, "updateEsStorage", [iT], [AttachedPayment(bb, iV)]))
2013- $Tuple2(([IntegerEntry(gt, iM), in] ++ ht(p, A)._1), dd)
2047+ let dj = bU(invoke(bK, "updateEsStorage", [jc], [AttachedPayment(bi, je)]))
2048+ $Tuple2(([IntegerEntry(gD, iV), ix] ++ hD(q, C)._1), dj)
20142049 }
20152050 }
20162051 }
20212056
20222057
20232058
2024-@Callable(ek)
2025-func updateBackpack (p,iW) = if ((ek.caller != bE))
2059+@Callable(eu)
2060+func updateBackpack (q,jf) = if ((eu.caller != bK))
20262061 then throw("permission denied")
2027- else $Tuple2([StringEntry(aO(p), iW)], iW)
2028-
2029-
2030-
2031-@Callable(ek)
2062+ else $Tuple2([StringEntry(aW(q), jf)], jf)
2063+
2064+
2065+
2066+@Callable(eu)
20322067 func buySLand () = {
2033- let in = ik(ek)
2034- if ((size(ek.payments) != 1))
2068+ let ix = iu(eu)
2069+ if ((size(eu.payments) != 1))
20352070 then throw("Exactly one payment required")
20362071 else {
2037- let io = value(ek.payments[0])
2038- if ((io.assetId != bb))
2072+ let iy = value(eu.payments[0])
2073+ if ((iy.assetId != bi))
20392074 then throw("Allowed USDT payment only!")
2040- else if ((io.amount != ce))
2041- then throw(("Payment attached should be " + toString(ce)))
2075+ else if ((iy.amount != ck))
2076+ then throw(("Payment attached should be " + toString(ck)))
20422077 else {
2043- let dd = fZ(ek.caller, ek.transactionId)
2044- $Tuple2((((dd._1 :+ ScriptTransfer(bE, io.amount, bb)) ++ hz(toString(ek.caller), C)._1) :+ in), dd._2._1)
2078+ let dj = gj(eu.caller, eu.transactionId)
2079+ $Tuple2((((dj._1 :+ ScriptTransfer(bK, iy.amount, bi)) ++ hJ(toString(eu.caller), E)._1) :+ ix), dj._2._1)
20452080 }
20462081 }
20472082 }
20482083
20492084
20502085
2051-@Callable(ek)
2052-func expedition (gi,gj) = {
2053- let in = ik(ek)
2054- if ((size(ek.payments) != 0))
2086+@Callable(eu)
2087+func expedition (gs,gt) = {
2088+ let ix = iu(eu)
2089+ if ((size(eu.payments) != 0))
20552090 then throw("No payments required")
20562091 else {
2057- let dd = gz(ek.caller, ek.transactionId, gi, gj)
2058- let p = valueOrErrorMessage(getString(aN(toString(ek.caller))), "You don't have a duck staked")
2059- $Tuple2(((dd._1 ++ ht(p, C)._1) :+ in), $Tuple2(dd._2, dd._3))
2060- }
2061- }
2062-
2063-
2064-
2065-@Callable(ek)
2066-func upgradeInfra (aF) = {
2067- let in = ik(ek)
2068- if ((size(ek.payments) != 0))
2092+ let dj = gJ(eu.caller, eu.transactionId, gs, gt)
2093+ let q = valueOrErrorMessage(getString(aV(toString(eu.caller))), "You don't have a duck staked")
2094+ $Tuple2(((dj._1 ++ hD(q, E)._1) :+ ix), $Tuple2(dj._2, dj._3))
2095+ }
2096+ }
2097+
2098+
2099+
2100+@Callable(eu)
2101+func upgradeInfra (aN) = {
2102+ let ix = iu(eu)
2103+ if ((size(eu.payments) != 0))
20692104 then throw("No payments required")
20702105 else {
2071- let dd = hh(true, ek.caller, 0, aF)
2072- let p = valueOrErrorMessage(getString(aN(toString(ek.caller))), "You don't have a duck staked")
2073- $Tuple2(((dd._1 :+ in) ++ ht(p, fraction(D, dd._3, bi))._1), dd._2)
2074- }
2075- }
2076-
2077-
2078-
2079-@Callable(ek)
2080-func upgradeInfraUsdt (aF) = if ((ek.caller != this))
2106+ let dj = hr(true, eu.caller, 0, aN)
2107+ let q = valueOrErrorMessage(getString(aV(toString(eu.caller))), "You don't have a duck staked")
2108+ $Tuple2(((dj._1 :+ ix) ++ hD(q, fraction(F, dj._3, bp))._1), dj._2)
2109+ }
2110+ }
2111+
2112+
2113+
2114+@Callable(eu)
2115+func upgradeInfraUsdt (aN) = if ((eu.caller != this))
20812116 then throw("Permission denied")
20822117 else {
2083- let in = ik(ek)
2084- if ((size(ek.payments) != 1))
2118+ let ix = iu(eu)
2119+ if ((size(eu.payments) != 1))
20852120 then throw("Exactly one payment required")
20862121 else {
2087- let io = value(ek.payments[0])
2088- if ((io.assetId != bb))
2122+ let iy = value(eu.payments[0])
2123+ if ((iy.assetId != bi))
20892124 then throw("Allowed USDT payment only!")
20902125 else {
2091- let dd = hh(false, ek.caller, io.amount, aF)
2092- $Tuple2(((dd._1 :+ ScriptTransfer(bE, io.amount, bb)) :+ in), dd._2)
2126+ let dj = hr(false, eu.caller, iy.amount, aN)
2127+ $Tuple2(((dj._1 :+ ScriptTransfer(bK, iy.amount, bi)) :+ ix), dj._2)
20932128 }
20942129 }
20952130 }
20962131
20972132
20982133
2099-@Callable(ek)
2100-func activateArtifact (iX,iY) = {
2101- let in = ik(ek)
2102- if ((size(ek.payments) != 0))
2134+@Callable(eu)
2135+func activateArtifact (jg,jh) = {
2136+ let ix = iu(eu)
2137+ if ((size(eu.payments) != 0))
21032138 then throw("No payments required")
21042139 else {
2105- let b = toString(ek.caller)
2106- let dd = {
2107- let bc = iX
2108- if (("PRESALE" == bc))
2109- then hH(b, iY)
2110- else if (("ONBOARD" == bc))
2111- then hA(b)
2140+ let b = toString(eu.caller)
2141+ let dj = {
2142+ let bj = jg
2143+ if (("PRESALE" == bj))
2144+ then hR(b, jh)
2145+ else if (("ONBOARD" == bj))
2146+ then hK(b)
21122147 else throw("Unknown artifact")
21132148 }
2114- (dd :+ in)
2115- }
2116- }
2117-
2118-
2119-
2120-@Callable(ek)
2121-func mergeLands (hM) = {
2122- let in = ik(ek)
2123- if ((size(ek.payments) != 0))
2149+ (dj :+ ix)
2150+ }
2151+ }
2152+
2153+
2154+
2155+@Callable(eu)
2156+func mergeLands (hW) = {
2157+ let ix = iu(eu)
2158+ if ((size(eu.payments) != 0))
21242159 then throw("No payments required")
21252160 else {
2126- let dd = ii(true, toString(ek.caller), 0, hM, ek.transactionId)
2127- $Tuple2(((dd._1 :+ in) ++ hz(toString(ek.caller), E)._1), dd._2)
2128- }
2129- }
2130-
2131-
2132-
2133-@Callable(ek)
2134-func mergeLandsUsdt (hM) = {
2135- let in = ik(ek)
2136- if ((size(ek.payments) != 1))
2161+ let dj = is(true, toString(eu.caller), 0, hW, eu.transactionId)
2162+ $Tuple2(((dj._1 :+ ix) ++ hJ(toString(eu.caller), G)._1), dj._2)
2163+ }
2164+ }
2165+
2166+
2167+
2168+@Callable(eu)
2169+func mergeLandsUsdt (hW) = {
2170+ let ix = iu(eu)
2171+ if ((size(eu.payments) != 1))
21372172 then throw("Exactly one payment required")
21382173 else {
2139- let io = value(ek.payments[0])
2140- if ((io.assetId != bb))
2174+ let iy = value(eu.payments[0])
2175+ if ((iy.assetId != bi))
21412176 then throw("Allowed USDT payment only!")
21422177 else {
2143- let dd = ii(false, toString(ek.caller), io.amount, hM, ek.transactionId)
2144- $Tuple2(((dd._1 :+ ScriptTransfer(bE, io.amount, bb)) :+ in), dd._2)
2178+ let dj = is(false, toString(eu.caller), iy.amount, hW, eu.transactionId)
2179+ $Tuple2(((dj._1 :+ ScriptTransfer(bK, iy.amount, bi)) :+ ix), dj._2)
21452180 }
21462181 }
21472182 }
21482183
21492184
21502185
2151-@Callable(ek)
2152-func cargoExchange (iZ,aF) = {
2153- let in = ik(ek)
2154- if ((size(ek.payments) != 0))
2186+@Callable(eu)
2187+func cargoExchange (ji,aN) = {
2188+ let ix = iu(eu)
2189+ if ((size(eu.payments) != 0))
21552190 then throw("No payments required")
21562191 else {
2157- let fD = split_4C(iZ, ":")
2158- let b = toString(ek.originCaller)
2159- let gP = value(assetInfo(fromBase58String(aF)))
2160- let gQ = ax(aF)
2161- if (!(isDefined(getInteger(gQ))))
2162- then throw((gP.name + " is not staked"))
2192+ let fN = split_4C(ji, ":")
2193+ let b = toString(eu.originCaller)
2194+ let gZ = value(assetInfo(fromBase58String(aN)))
2195+ let ha = aF(aN)
2196+ if (!(isDefined(getInteger(ha))))
2197+ then throw((gZ.name + " is not staked"))
21632198 else {
2164- let gS = valueOrErrorMessage(getString(au(aF)), (("NFT " + gP.name) + " is orphaned"))
2165- if ((gS != b))
2166- then throw((P + " is not yours"))
2199+ let hc = valueOrErrorMessage(getString(aC(aN)), (("NFT " + gZ.name) + " is orphaned"))
2200+ if ((hc != b))
2201+ then throw((W + " is not yours"))
21672202 else {
2168- let fm = (bT(split(gP.description, "_")[bI]) / bj)
2169- let fn = valueOrElse(getInteger(ay(aF)), 0)
2170- let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked")
2171- let gM = valueOrElse(getString(aP(p)), W)
2172- let gN = split(value(gM), "_")
2173- if ((gN[aV] != "L"))
2174- then throw((("Duck location type is " + gN[aV]) + ", but should be L"))
2175- else if ((gN[aW] != aF))
2176- then throw(("Duck should be on the land " + aF))
2203+ let fw = (bZ(split(gZ.description, "_")[bO]) / bq)
2204+ let fx = valueOrElse(getInteger(aG(aN)), 0)
2205+ let q = valueOrErrorMessage(getString(aV(b)), "You don't have a duck staked")
2206+ let gW = valueOrElse(getString(aX(q)), ad)
2207+ let gX = split(value(gW), "_")
2208+ if ((gX[bc] != "L"))
2209+ then throw((("Duck location type is " + gX[bc]) + ", but should be L"))
2210+ else if ((gX[bd] != aN))
2211+ then throw(("Duck should be on the land " + aN))
21772212 else {
2178- let fl = aE(aF)
2179- let eY = fk(fl, fm, fn)
2180- let eT = aO(p)
2181- let fE = eS(eT)
2182- let dd = fC(fD, eY, fE)
2183- let ft = split(eY[ak], "_")
2184- let he = (parseIntValue(ft[am]) + dd._7)
2185- let hf = (parseIntValue(ft[an]) - dd._7)
2186-[StringEntry(eT, makeString_2C([fE[ap], dd._4, dd._5, dd._6], ":")), StringEntry(fl, makeString_2C([eY[ag], dd._1, dd._2, dd._3, makeString([ft[al], toString(he), toString(hf), ft[ao]], "_")], ":")), in]
2213+ let fv = aM(aN)
2214+ let fi = fu(fv, fw, fx)
2215+ let fd = aW(q)
2216+ let fO = fc(fd)
2217+ let dj = fM(fN, fi, fO)
2218+ let fD = split(fi[as], "_")
2219+ let ho = (parseIntValue(fD[au]) + dj._7)
2220+ let hp = (parseIntValue(fD[av]) - dj._7)
2221+[StringEntry(fd, makeString_2C([fO[ax], dj._4, dj._5, dj._6], ":")), StringEntry(fv, makeString_2C([fi[ao], dj._1, dj._2, dj._3, makeString([fD[at], toString(ho), toString(hp), fD[aw]], "_")], ":")), ix]
21872222 }
21882223 }
21892224 }
21922227
21932228
21942229
2195-@Callable(ek)
2196-func saveWarehouse (fp,aF) = if ((ek.caller != bE))
2230+@Callable(eu)
2231+func saveWarehouse (fz,aN) = if ((eu.caller != bK))
21972232 then throw("Access denied")
21982233 else {
2199- let fl = aE(aF)
2200- let fq = split_4C(fp, ":")
2201- if ((size(fq) != 5))
2234+ let fv = aM(aN)
2235+ let fA = split_4C(fz, ":")
2236+ if ((size(fA) != 5))
22022237 then throw("warehouse string should contain 4 ':' separators")
22032238 else {
2204- let ja = split(fq[ak], "_")[al]
2205- let he = eX(fq)
2206- let jb = eV(fq[ag])
2207- let hf = ((jb - parseIntValue(ja)) - he)
2208- let jc = makeString_2C([fq[ag], fq[ah], fq[ai], fq[aj], makeString([ja, toString(he), toString(hf), toString(jb)], "_")], ":")
2209- $Tuple2([StringEntry(fl, jc)], jc)
2239+ let jj = split(fA[as], "_")[at]
2240+ let ho = fh(fA)
2241+ let jk = ff(fA[ao])
2242+ let hp = ((jk - parseIntValue(jj)) - ho)
2243+ let jl = makeString_2C([fA[ao], fA[ap], fA[aq], fA[ar], makeString([jj, toString(ho), toString(hp), toString(jk)], "_")], ":")
2244+ $Tuple2([StringEntry(fv, jl)], jl)
22102245 }
22112246 }
22122247
22132248
22142249
2215-@Callable(ek)
2216-func fixWarehouseFormat (aF) = if ((ek.caller != bC))
2250+@Callable(eu)
2251+func fixWarehouseFormat (aN) = if ((eu.caller != bJ))
22172252 then throw("Access denied")
22182253 else {
2219- let fl = aE(aF)
2220- let gP = value(assetInfo(fromBase58String(aF)))
2221- let fm = (bT(split(gP.description, "_")[bI]) / bj)
2222- let fn = valueOrElse(getInteger(ay(aF)), 0)
2223- let fq = fk(fl, fm, fn)
2224- let ja = bR(invoke(bE, "recalcLockedVolumeREADONLY", [aF, fq], nil))
2225- let he = eX(fq)
2226- let jb = eV(fq[ag])
2227- let hf = ((jb - ja) - he)
2228- let jc = makeString_2C([fq[ag], fq[ah], fq[ai], fq[aj], makeString([toString(ja), toString(he), toString(hf), toString(jb)], "_")], ":")
2229- $Tuple2([StringEntry(fl, jc)], jc)
2230- }
2231-
2232-
2233-
2234-@Callable(ek)
2235-func fixStakedPieces (bp) = if ((ek.caller != bC))
2254+ let fv = aM(aN)
2255+ let gZ = value(assetInfo(fromBase58String(aN)))
2256+ let fw = (bZ(split(gZ.description, "_")[bO]) / bq)
2257+ let fx = valueOrElse(getInteger(aG(aN)), 0)
2258+ let fA = fu(fv, fw, fx)
2259+ let jj = bX(invoke(bK, "recalcLockedVolumeREADONLY", [aN, fA], nil))
2260+ let ho = fh(fA)
2261+ let jk = ff(fA[ao])
2262+ let hp = ((jk - jj) - ho)
2263+ let jl = makeString_2C([fA[ao], fA[ap], fA[aq], fA[ar], makeString([toString(jj), toString(ho), toString(hp), toString(jk)], "_")], ":")
2264+ $Tuple2([StringEntry(fv, jl)], jl)
2265+ }
2266+
2267+
2268+
2269+@Callable(eu)
2270+func fixStakedPieces (bw) = if ((eu.caller != bJ))
22362271 then throw("Access denied")
22372272 else {
2238- let id = if ((bp == ""))
2273+ let in = if ((bw == ""))
22392274 then 0
22402275 else {
2241- let hY = getString(bD, bM(bp))
2242- let hT = if (isDefined(hY))
2243- then split_51C(value(hY), "_")
2276+ let ii = getString(S, bS(bw))
2277+ let id = if (isDefined(ii))
2278+ then split_51C(value(ii), "_")
22442279 else nil
2245- func jd (cL,aF) = {
2246- let gP = value(assetInfo(fromBase58String(aF)))
2247- let bU = split(gP.description, "_")[bI]
2248- (cL + bT(bU))
2280+ func jm (cR,aN) = {
2281+ let gZ = value(assetInfo(fromBase58String(aN)))
2282+ let ca = split(gZ.description, "_")[bO]
2283+ (cR + bZ(ca))
22492284 }
22502285
2251- let cN = hT
2252- let cO = size(cN)
2253- let cP = 0
2254- func cQ (cR,cS) = if ((cS >= cO))
2255- then cR
2256- else jd(cR, cN[cS])
2257-
2258- func cT (cR,cS) = if ((cS >= cO))
2259- then cR
2286+ let cT = id
2287+ let cU = size(cT)
2288+ let cV = 0
2289+ func cW (cX,cY) = if ((cY >= cU))
2290+ then cX
2291+ else jm(cX, cT[cY])
2292+
2293+ func cZ (cX,cY) = if ((cY >= cU))
2294+ then cX
22602295 else throw("List size exceeds 100")
22612296
2262- 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)
2297+ cZ(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cV, 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)
22632298 }
2264- $Tuple2([IntegerEntry(bN(bp), id)], id)
2265- }
2266-
2267-
2268-
2269-@Callable(ek)
2270-func setCustomName (av,hV,aA) = {
2271- let in = ik(ek)
2272- if ((size(ek.payments) != 1))
2299+ $Tuple2([IntegerEntry(bT(bw), in)], in)
2300+ }
2301+
2302+
2303+
2304+@Callable(eu)
2305+func setCustomName (aD,if,aI) = {
2306+ let ix = iu(eu)
2307+ if ((size(eu.payments) != 1))
22732308 then throw("Exactly one payment required")
22742309 else {
2275- let io = value(ek.payments[0])
2276- if ((io.assetId != bb))
2310+ let iy = value(eu.payments[0])
2311+ if ((iy.assetId != bi))
22772312 then throw("Allowed USDT payment only!")
2278- else if ((io.amount != ca))
2279- then throw(("Payment should be " + toString(ca)))
2280- else if (contains(hV, "__"))
2281- then throw(("Name should not contain '__': " + hV))
2282- else if ((size(hV) > cb))
2283- then throw(("Name too long, maxLength=" + toString(cb)))
2313+ else if ((iy.amount != cg))
2314+ then throw(("Payment should be " + toString(cg)))
2315+ else if (contains(if, "__"))
2316+ then throw(("Name should not contain '__': " + if))
2317+ else if ((size(if) > ch))
2318+ then throw(("Name too long, maxLength=" + toString(ch)))
22842319 else {
2285- let b = toString(ek.originCaller)
2286- let je = {
2287- let bc = aA
2288- if (("ACCOUNT" == bc))
2320+ let b = toString(eu.originCaller)
2321+ let jn = {
2322+ let bj = aI
2323+ if (("ACCOUNT" == bj))
22892324 then {
2290- let jf = cv(hV)
2291- let jg = getString(jf)
2292- if (isDefined(jg))
2293- then throw(("Name already registered: " + hV))
2325+ let jo = cB(if)
2326+ let jp = getString(jo)
2327+ if (isDefined(jp))
2328+ then throw(("Name already registered: " + if))
22942329 else {
2295- let jh = aH(b)
2296- let ji = getString(jh)
2297- let jj = if (isDefined(ji))
2298- then [DeleteEntry(cv(value(ji)))]
2330+ let jq = aP(b)
2331+ let jr = getString(jq)
2332+ let js = if (isDefined(jr))
2333+ then [DeleteEntry(cB(value(jr)))]
22992334 else nil
2300- (((jj :+ StringEntry(jh, hV)) :+ StringEntry(jf, b)) ++ hz(b, B)._1)
2335+ (((js :+ StringEntry(jq, if)) :+ StringEntry(jo, b)) ++ hJ(b, D)._1)
23012336 }
23022337 }
2303- else if (("LAND" == bc))
2338+ else if (("LAND" == bj))
23042339 then {
2305- let gP = value(assetInfo(fromBase58String(av)))
2306- let gQ = ax(av)
2307- if (!(isDefined(getInteger(gQ))))
2308- then throw((gP.name + " is not staked"))
2340+ let gZ = value(assetInfo(fromBase58String(aD)))
2341+ let ha = aF(aD)
2342+ if (!(isDefined(getInteger(ha))))
2343+ then throw((gZ.name + " is not staked"))
23092344 else {
2310- let gS = valueOrErrorMessage(getString(au(av)), (("NFT " + gP.name) + " is orphaned"))
2311- if ((gS != b))
2312- then throw((P + " is not yours"))
2345+ let hc = valueOrErrorMessage(getString(aC(aD)), (("NFT " + gZ.name) + " is orphaned"))
2346+ if ((hc != b))
2347+ then throw((W + " is not yours"))
23132348 else {
2314- let jf = cp(hV)
2315- let jg = getString(jf)
2316- if (isDefined(jg))
2317- then throw(("Name already registered: " + hV))
2349+ let jo = cv(if)
2350+ let jp = getString(jo)
2351+ if (isDefined(jp))
2352+ then throw(("Name already registered: " + if))
23182353 else {
2319- let jk = aw(av)
2320- let ji = getString(jk)
2321- let jj = if (isDefined(ji))
2322- then [DeleteEntry(cp(value(ji)))]
2354+ let jt = aE(aD)
2355+ let jr = getString(jt)
2356+ let js = if (isDefined(jr))
2357+ then [DeleteEntry(cv(value(jr)))]
23232358 else nil
2324- (((jj :+ StringEntry(jk, hV)) :+ StringEntry(jf, av)) ++ hz(b, B)._1)
2359+ (((js :+ StringEntry(jt, if)) :+ StringEntry(jo, aD)) ++ hJ(b, D)._1)
23252360 }
23262361 }
23272362 }
23282363 }
2329- else if (("DUCK" == bc))
2364+ else if (("DUCK" == bj))
23302365 then {
2331- let gP = value(assetInfo(fromBase58String(av)))
2332- let gQ = ax(av)
2333- if (if (!(isDefined(getInteger(gQ))))
2366+ let gZ = value(assetInfo(fromBase58String(aD)))
2367+ let ha = aF(aD)
2368+ if (if (!(isDefined(getInteger(ha))))
23342369 then true
2335- else !(isDefined(getString(aN(b)))))
2336- then throw((gP.name + " is not staked"))
2370+ else !(isDefined(getString(aV(b)))))
2371+ then throw((gZ.name + " is not staked"))
23372372 else {
2338- let gS = valueOrErrorMessage(getString(aM(av)), (("NFT " + gP.name) + " is orphaned"))
2339- if ((gS != b))
2340- then throw((Q + " is not yours"))
2373+ let hc = valueOrErrorMessage(getString(aU(aD)), (("NFT " + gZ.name) + " is orphaned"))
2374+ if ((hc != b))
2375+ then throw((X + " is not yours"))
23412376 else {
2342- let jf = cu(hV)
2343- let jg = getString(jf)
2344- if (isDefined(jg))
2345- then throw(("Name already registered: " + hV))
2377+ let jo = cA(if)
2378+ let jp = getString(jo)
2379+ if (isDefined(jp))
2380+ then throw(("Name already registered: " + if))
23462381 else {
2347- let jk = aG(av)
2348- let ji = getString(jk)
2349- let jj = if (isDefined(ji))
2350- then [DeleteEntry(cu(value(ji)))]
2382+ let jt = aO(aD)
2383+ let jr = getString(jt)
2384+ let js = if (isDefined(jr))
2385+ then [DeleteEntry(cA(value(jr)))]
23512386 else nil
2352- (((jj :+ StringEntry(jk, hV)) :+ StringEntry(jf, av)) ++ ht(av, B)._1)
2387+ (((js :+ StringEntry(jt, if)) :+ StringEntry(jo, aD)) ++ hD(aD, D)._1)
23532388 }
23542389 }
23552390 }
23562391 }
23572392 else throw("Unknown entity type")
23582393 }
2359- $Tuple2(((je :+ ScriptTransfer(bE, io.amount, bb)) :+ in), 0)
2394+ $Tuple2(((jn :+ ScriptTransfer(bK, iy.amount, bi)) :+ ix), 0)
23602395 }
23612396 }
23622397 }
23632398
23642399
23652400
2366-@Callable(ek)
2367-func setReferrals (jl,jm) = if ((ek.callerPublicKey != bX))
2401+@Callable(eu)
2402+func setReferrals (ju,jv) = if ((eu.callerPublicKey != cd))
23682403 then throw("Permission denied")
23692404 else {
2370- let in = ik(ek)
2371- if ((size(ek.payments) != 0))
2405+ let ix = iu(eu)
2406+ if ((size(eu.payments) != 0))
23722407 then throw("No payments required")
2373- else if (!(isDefined(addressFromString(jl))))
2374- then throw(("Invalid address: " + jl))
2375- else if (!(isDefined(addressFromString(jm))))
2376- then throw(("Invalid address: " + jm))
2408+ else if (!(isDefined(addressFromString(ju))))
2409+ then throw(("Invalid address: " + ju))
2410+ else if (!(isDefined(addressFromString(jv))))
2411+ then throw(("Invalid address: " + jv))
23772412 else {
2378- let jn = cw()
2379- let jo = getString(jn)
2380- let jp = if (isDefined(jo))
2381- then split_4C(value(jo), "_")
2413+ let jw = cC()
2414+ let jx = getString(jw)
2415+ let jy = if (isDefined(jx))
2416+ then split_4C(value(jx), "_")
23822417 else nil
2383- if (containsElement(jp, jm))
2384- then throw((jm + " is not newbie (already has referrals)"))
2418+ if (containsElement(jy, jv))
2419+ then throw((jv + " is not newbie (already has referrals)"))
23852420 else {
2386- let hB = aI(jm)
2387- let hC = getString(hB)
2388- if (if (isDefined(hC))
2389- then isDefined(addressFromString(value(hC)))
2421+ let hL = aQ(jv)
2422+ let hM = getString(hL)
2423+ if (if (isDefined(hM))
2424+ then isDefined(addressFromString(value(hM)))
23902425 else false)
2391- then throw(((jm + " already has refBy: ") + value(hC)))
2426+ then throw(((jv + " already has refBy: ") + value(hM)))
23922427 else {
2393- let jq = aL(jl)
2394- let jr = getString(jq)
2395- let js = if (isDefined(jr))
2396- then split_4C(value(jr), "_")
2428+ let jz = aT(ju)
2429+ let jA = getString(jz)
2430+ let jB = if (isDefined(jA))
2431+ then split_4C(value(jA), "_")
23972432 else nil
2398- if (containsElement(js, jm))
2399- then throw((((jl + " already contains ") + jm) + " within referrals"))
2433+ if (containsElement(jB, jv))
2434+ then throw((((ju + " already contains ") + jv) + " within referrals"))
24002435 else {
2401- let jt = makeString_2C((js :+ jm), "_")
2402- let ju = if (containsElement(jp, jl))
2403- then value(jo)
2404- else makeString_2C((jp :+ jl), "_")
2405- $Tuple2([StringEntry(hB, jl), StringEntry(jq, jt), StringEntry(jn, ju), in], 0)
2436+ let jC = makeString_2C((jB :+ jv), "_")
2437+ let jD = if (containsElement(jy, ju))
2438+ then value(jx)
2439+ else makeString_2C((jy :+ ju), "_")
2440+ $Tuple2([StringEntry(hL, ju), StringEntry(jz, jC), StringEntry(jw, jD), ix], 0)
24062441 }
24072442 }
24082443 }
24112446
24122447
24132448
2414-@Callable(ek)
2415-func distributePoints (jv,jw,jx,jy,jz) = {
2416- let in = ik(ek)
2417- if ((size(ek.payments) != 0))
2449+@Callable(eu)
2450+func distributePoints (jE,jF,jG,jH,jI) = {
2451+ let ix = iu(eu)
2452+ if ((size(eu.payments) != 0))
24182453 then throw("No payments required")
24192454 else {
2420- let b = toString(ek.originCaller)
2421- let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked")
2422- let jA = w(b)
2423- let jB = valueOrElse(getInteger(bD, jA), 0)
2424- let jC = s(p)
2425- let jD = valueOrElse(getInteger(bD, jC), 0)
2426- let jE = (jB + jD)
2427- let jF = ((((jv + jw) + jx) + jy) + jz)
2428- if ((jF > jE))
2429- then throw((("There are only " + toString(jE)) + " free points to distribute"))
2455+ let b = toString(eu.originCaller)
2456+ let q = valueOrErrorMessage(getString(aV(b)), "You don't have a duck staked")
2457+ let jJ = y(b)
2458+ let jK = valueOrElse(getInteger(S, jJ), 0)
2459+ let jL = u(q)
2460+ let jM = valueOrElse(getInteger(S, jL), 0)
2461+ let jN = (jK + jM)
2462+ let jO = ((((jE + jF) + jG) + jH) + jI)
2463+ if ((jO > jN))
2464+ then throw((("There are only " + toString(jN)) + " free points to distribute"))
24302465 else {
2431- let jG = o(p)
2432- let jH = split(valueOrElse(getString(bD, jG), "0_0_0_0_0"), "_")
2433- let jI = (jB - jF)
2434- $Tuple2([IntegerEntry(jA, if ((0 > jI))
2466+ let jP = r(q)
2467+ let T = split(valueOrElse(getString(S, jP), "0_0_0_0_0"), "_")
2468+ let jQ = (jK - jO)
2469+ $Tuple2([IntegerEntry(jJ, if ((0 > jQ))
24352470 then 0
2436- else jI), IntegerEntry(jC, if ((0 > jI))
2437- then (jD + jI)
2438- else jD), StringEntry(jG, makeString([toString((parseIntValue(jH[g]) + jv)), toString((parseIntValue(jH[h]) + jw)), toString((parseIntValue(jH[i]) + jx)), toString((parseIntValue(jH[j]) + jy)), toString((parseIntValue(jH[k]) + jz))], "_")), in], 0)
2471+ else jQ), IntegerEntry(jL, if ((0 > jQ))
2472+ then (jM + jQ)
2473+ else jM), StringEntry(jP, makeString([toString((parseIntValue(T[h]) + jE)), toString((parseIntValue(T[i]) + jF)), toString((parseIntValue(T[j]) + jG)), toString((parseIntValue(T[k]) + jH)), toString((parseIntValue(T[l]) + jI))], "_")), ix], 0)
24392474 }
24402475 }
24412476 }
24422477
24432478
24442479
2445-@Callable(ek)
2446-func splitByGlobalWeightsREADONLY (fA) = $Tuple2(nil, cU(fA))
2447-
2448-
2449-
2450-@Callable(ek)
2451-func splitByGlobalAndLocalWeightsREADONLY (jJ,jK,en) = {
2452- let eg = em(en)
2453- $Tuple2(nil, $Tuple2(cU(jJ), cF(jK, eg)))
2454- }
2455-
2456-
2457-
2458-@Callable(ek)
2459-func getBackpackREADONLY (p) = $Tuple2(nil, makeString(eS(aO(p)), ":"))
2460-
2461-
2462-
2463-@Callable(ek)
2464-func getWarehouseREADONLY (aF) = {
2465- let gP = value(assetInfo(fromBase58String(aF)))
2466- let fm = (bT(split(gP.description, "_")[bI]) / bj)
2467- let fn = valueOrElse(getInteger(ay(aF)), 0)
2468- $Tuple2(nil, makeString_2C(fk(aE(aF), fm, fn), ":"))
2469- }
2470-
2471-
2472-
2473-@Callable(ek)
2474-func saveLastTx () = if (if ((ek.caller != bG))
2475- then (ek.caller != bE)
2480+@Callable(eu)
2481+func splitByGlobalWeightsREADONLY (fK) = $Tuple2(nil, da(fK))
2482+
2483+
2484+
2485+@Callable(eu)
2486+func splitByGlobalAndLocalWeightsREADONLY (jR,jS,ex) = {
2487+ let eq = ew(ex)
2488+ $Tuple2(nil, $Tuple2(da(jR), cL(jS, eq)))
2489+ }
2490+
2491+
2492+
2493+@Callable(eu)
2494+func getBackpackREADONLY (q) = $Tuple2(nil, makeString(fc(aW(q)), ":"))
2495+
2496+
2497+
2498+@Callable(eu)
2499+func getWarehouseREADONLY (aN) = {
2500+ let gZ = value(assetInfo(fromBase58String(aN)))
2501+ let fw = (bZ(split(gZ.description, "_")[bO]) / bq)
2502+ let fx = valueOrElse(getInteger(aG(aN)), 0)
2503+ $Tuple2(nil, makeString_2C(fu(aM(aN), fw, fx), ":"))
2504+ }
2505+
2506+
2507+
2508+@Callable(eu)
2509+func saveLastTx () = if (if ((eu.caller != bM))
2510+ then (eu.caller != bK)
24762511 else false)
24772512 then throw("Access denied")
2478- else $Tuple2([ik(ek)], 42)
2479-
2480-
2481-
2482-@Callable(ek)
2483-func updateDuckStats (p,hu) = if ((ek.caller != bE))
2513+ else $Tuple2([iu(eu)], 42)
2514+
2515+
2516+
2517+@Callable(eu)
2518+func updateDuckStats (q,hE) = if ((eu.caller != bK))
24842519 then throw("Access denied")
2485- else ht(p, hu)
2486-
2487-
2488-
2489-@Callable(ek)
2490-func updateAccStats (b,hu) = if ((ek.caller != bE))
2520+ else hD(q, hE)
2521+
2522+
2523+
2524+@Callable(eu)
2525+func updateAccStats (b,hE) = if ((eu.caller != bK))
24912526 then throw("Access denied")
2492- else hz(b, hu)
2493-
2494-
2495-
2496-@Callable(ek)
2497-func equipDuck (jL) = {
2498- let in = ik(ek)
2499- if ((size(ek.payments) != 0))
2527+ else hJ(b, hE)
2528+
2529+
2530+
2531+@Callable(eu)
2532+func equipDuck (jT) = {
2533+ let ix = iu(eu)
2534+ if ((size(eu.payments) != 0))
25002535 then throw("No payments required")
25012536 else {
2502- let b = toString(ek.originCaller)
2503- let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked")
2504- let jM = t(p)
2505- let jN = split(valueOrElse(getString(jM), ",;,_,;,_,;,_,;,_,;,_,;,"), "_")
2506- let eT = aO(p)
2507- let fE = eS(eT)
2508- let jO = split(jL, "_")
2509- if ((size(jO) != l))
2537+ let b = toString(eu.originCaller)
2538+ let q = valueOrErrorMessage(getString(aV(b)), "You don't have a duck staked")
2539+ let jU = v(q)
2540+ let jV = split(valueOrElse(getString(jU), ",;,_,;,_,;,_,;,_,;,_,;,"), "_")
2541+ let fd = aW(q)
2542+ let fO = fc(fd)
2543+ let jW = split(jT, "_")
2544+ if ((size(jW) != m))
25102545 then throw("Wrong equipment string")
25112546 else {
2512- let jP = fE[as]
2513- let jQ = dY(jN, du(jP), true)
2514- let jR = dY(jO, jQ, false)
2515- let jS = dx(jR)
2516- $Tuple2([StringEntry(jM, jL), StringEntry(eT, makeString_2C([fE[ap], fE[aq], fE[ar], jS], ":")), in], 0)
2547+ let dJ = R(this, q)
2548+ let jX = ei(jV, dA(fO[aA]), true, dJ)
2549+ let jY = ei(jW, jX, false, dJ)
2550+ let jZ = dD(jY)
2551+ $Tuple2([StringEntry(jU, jT), StringEntry(fd, makeString_2C([fO[ax], fO[ay], fO[az], jZ], ":")), ix], 0)
25172552 }
25182553 }
25192554 }
2520-
2521-
2522-
2523-@Callable(ek)
2524-func test () = if ((ek.caller != this))
2525- then throw("Access denied")
2526- else {
2527- let dq = du("")
2528- let dA = dx(dq)
2529- $Tuple2(nil, dA)
2530- }
25312555
25322556
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
15-let g = 0
16-
17-let h = 1
18-
19-let i = 2
20-
21-let j = 3
22-
23-let k = 4
24-
25-let l = 6
26-
27-let m = 2
15+let g = ["Strength", "Accuracy", "Intellect", "Endurance", "Dexterity", "Level", "Health"]
16+
17+let h = 0
18+
19+let i = 1
20+
21+let j = 2
22+
23+let k = 3
24+
25+let l = 4
26+
27+let m = 6
2828
2929 let n = 2
3030
31-func o (p) = ("duckChars_" + p)
32-
33-
34-func q (p) = ("duckXP_" + p)
35-
36-
37-func r (p) = ("duckLevel_" + p)
38-
39-
40-func s (p) = ("duckFreePoints_" + p)
41-
42-
43-func t (p) = ("duckEquipment_" + p)
44-
45-
46-func u (b) = ("userXP_" + b)
47-
48-
49-func v (b) = ("userLevel_" + b)
50-
51-
52-func w (b) = ("userFreePoints_" + b)
53-
54-
55-let x = 100000
56-
57-let y = 50000
58-
59-let z = 10000
60-
61-let A = 100000
62-
63-let B = 5000000
64-
65-let C = 50000000
66-
67-let D = 100000
68-
69-let E = 10000000
70-
71-let F = 10000000
72-
73-let G = 10000
74-
75-func H (I) = fraction(d, pow(I, 4, e, 4, 4, DOWN), c)
76-
77-
78-func J (K) = (100 + K)
79-
80-
81-func L (M,N) = {
82- let O = H(N)
83-[O, (f * (O - M))]
84- }
85-
86-
87-let P = "LAND"
88-
89-let Q = "DUCK"
90-
91-let R = "PRESALE"
92-
93-let S = 6
94-
95-let T = 3456000
96-
97-let U = 86400000
98-
99-let V = 10000000000
100-
101-let W = "Africa_F_Africa"
102-
103-let X = 39637
104-
105-let Y = 10
106-
107-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"]
108-
109-let aa = ["Americas", "Europe", "Asia", "Africa", "Oceania"]
110-
111-let ab = 10000000
112-
113-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"]
114-
115-let ad = 6
116-
117-let ae = 10
31+let o = 2
32+
33+func p (q) = ("duckHealth_" + q)
34+
35+
36+func r (q) = ("duckChars_" + q)
37+
38+
39+func s (q) = ("duckXP_" + q)
40+
41+
42+func t (q) = ("duckLevel_" + q)
43+
44+
45+func u (q) = ("duckFreePoints_" + q)
46+
47+
48+func v (q) = ("duckEquipment_" + q)
49+
50+
51+func w (b) = ("userXP_" + b)
52+
53+
54+func x (b) = ("userLevel_" + b)
55+
56+
57+func y (b) = ("userFreePoints_" + b)
58+
59+
60+let z = 100000
61+
62+let A = 50000
63+
64+let B = 10000
65+
66+let C = 100000
67+
68+let D = 5000000
69+
70+let E = 50000000
71+
72+let F = 100000
73+
74+let G = 10000000
75+
76+let H = 10000000
77+
78+let I = 10000
79+
80+func J (K) = fraction(d, pow(K, 4, e, 4, 4, DOWN), c)
81+
82+
83+func L (M) = (100 + M)
84+
85+
86+func N (O,P) = {
87+ let Q = J(P)
88+[Q, (f * (Q - O))]
89+ }
90+
91+
92+func R (S,q) = {
93+ let T = split(valueOrElse(getString(S, r(q)), "0_0_0_0_0"), "_")
94+ let U = valueOrElse(getInteger(S, t(q)), 0)
95+ let V = valueOrElse(getInteger(S, p(q)), L(U))
96+[parseIntValue(T[h]), parseIntValue(T[i]), parseIntValue(T[j]), parseIntValue(T[k]), parseIntValue(T[l]), U, V]
97+ }
98+
99+
100+let W = "LAND"
101+
102+let X = "DUCK"
103+
104+let Y = "PRESALE"
105+
106+let Z = 6
107+
108+let aa = 3456000
109+
110+let ab = 86400000
111+
112+let ac = 10000000000
113+
114+let ad = "Africa_F_Africa"
115+
116+let ae = 39637
118117
119118 let af = 10
120119
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))
120+let ag = ["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"]
121+
122+let ah = ["Americas", "Europe", "Asia", "Africa", "Oceania"]
123+
124+let ai = 10000000
125+
126+let aj = ["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"]
127+
128+let ak = 6
129+
130+let al = 9
131+
132+let am = 10
133+
134+let an = 10
135+
136+let ao = 0
137+
138+let ap = 1
139+
140+let aq = 2
141+
142+let ar = 3
143+
144+let as = 4
145+
146+let at = 0
147+
148+let au = 1
149+
150+let av = 2
151+
152+let aw = 3
153+
154+let ax = 0
155+
156+let ay = 1
157+
158+let az = 2
159+
160+let aA = 3
161+
162+func aB (b) = ("lastTxIdByUser_" + b)
163+
164+
165+func aC (aD) = ("nftOwner_" + aD)
166+
167+
168+func aE (aD) = ("landCustomNameByAssetId_" + aD)
169+
170+
171+func aF (aD) = ("stakedTime_" + aD)
172+
173+
174+func aG (aD) = ("infraLevel_" + aD)
175+
176+
177+func aH (aI,aD) = makeString(["landArtStatus", aI, aD], "_")
178+
179+
180+func aJ (aK,aD,aL) = ((((("stakedTimeByTypeAssetIdAndOwner_" + aK) + "_") + aD) + "_") + aL)
181+
182+
183+func aM (aN) = ("wareHouse_" + aN)
184+
185+
186+func aO (aD) = ("duckCustomNameByAssetId_" + aD)
187+
188+
189+func aP (b) = ("accountCustomNameByAddr_" + b)
190+
191+
192+func aQ (b) = ("accRefBy_" + b)
193+
194+
195+func aR (q) = ("onboardArtActivatedOnDuck_" + q)
196+
197+
198+func aS (b) = ("onboardArtActivatedDuckBy_" + b)
199+
200+
201+func aT (b) = ("accReferrals_" + b)
202+
203+
204+func aU (aD) = ("duckOwner_" + aD)
205+
206+
207+func aV (aL) = ("stakedDuckByOwner_" + aL)
208+
209+
210+func aW (q) = ("backPack_" + q)
211+
212+
213+func aX (q) = ("duckLocation_" + q)
214+
215+
216+func aY () = "contractsBlocked"
217+
218+
219+func aZ (ba) = ("%s%s__userGwlReleaseTime__" + ba)
220+
221+
222+func bb () = "emergencyWarehouseProducts"
223+
224+
225+let bc = 1
226+
227+let bd = 2
228+
229+func be (bf) = (parseIntValue(bf[ak]) * ai)
230+
231+
232+let bg = true
233+
234+let bh = take(drop(this.bytes, 1), 1)
235+
236+let bi = {
237+ let bj = bh
238+ if ((base58'2W' == bj))
227239 then base58'9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi'
228- else if ((base58'2T' == bc))
240+ else if ((base58'2T' == bj))
229241 then base58'6mWwf9mZBjVgkC54idpyaZLQfAosD914wT8fGf2iiY63'
230242 else throw("Unknown chain")
231243 }
232244
233-let bd = {
234- let bc = ba
235- if ((base58'2W' == bc))
245+let bk = {
246+ let bj = bh
247+ if ((base58'2W' == bj))
236248 then "3PQCuvFbvh4LkPUnrnU1z3jnbA1p9m3WNhv"
237- else if ((base58'2T' == bc))
249+ else if ((base58'2T' == bj))
238250 then "3MumkGGztCKAXpWDqxkddofqXSUbqQkvSJy"
239251 else throw("Unknown chain")
240252 }
241253
242-let be = {
243- let bc = ba
244- if ((base58'2W' == bc))
254+let bl = {
255+ let bj = bh
256+ if ((base58'2W' == bj))
245257 then 10000000000
246- else if ((base58'2T' == bc))
258+ else if ((base58'2T' == bj))
247259 then 100000000
248260 else throw("Unknown chain")
249261 }
250262
251-let bf = {
252- let bc = ba
253- if ((base58'2W' == bc))
263+let bm = {
264+ let bj = bh
265+ if ((base58'2W' == bj))
254266 then 600000
255- else if ((base58'2T' == bc))
267+ else if ((base58'2T' == bj))
256268 then 60000
257269 else throw("Unknown chain")
258270 }
259271
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"))
272+let bn = "__"
273+
274+let bo = 1000000
275+
276+let bp = 100000000
277+
278+let bq = 25
279+
280+let br = 100
281+
282+let bs = 225
283+
284+let bt = 400
285+
286+let bu = 625
287+
288+func bv (bw,bx) = valueOrErrorMessage(getString(bw, bx), makeString(["mandatory ", toString(bw), ".", bx, " is not defined"], ""))
289+
290+
291+let by = 1
292+
293+let bz = 2
294+
295+let bA = 3
296+
297+let bB = 4
298+
299+func bC () = "%s__restConfig"
300+
301+
302+func bD () = "%s__restAddr"
303+
304+
305+func bE (bF) = split_4C(bv(bF, bC()), bn)
306+
307+
308+func bG (bH,bI) = valueOrErrorMessage(addressFromString(bH[bI]), ("Rest cfg doesn't contain address at index " + toString(bI)))
309+
310+
311+let bJ = addressFromStringValue(valueOrElse(getString(this, bD()), bk))
312+
313+let bH = bE(bJ)
314+
315+let S = bG(bH, by)
316+
317+let bK = bG(bH, bz)
318+
319+let bL = bG(bH, bA)
320+
321+let bM = bG(bH, bB)
322+
323+let bN = 0
324+
325+let bO = 1
326+
327+let bP = 2
328+
329+let bQ = 3
330+
331+func bR () = "resTypesProportions"
332+
333+
334+func bS (aL) = ("stakedLandsByOwner_" + aL)
335+
336+
337+func bT (aL) = ("stakedPiecesByOwner_" + aL)
338+
339+
340+func bU (bV) = {
341+ let bj = bV
342+ if ($isInstanceOf(bj, "String"))
331343 then {
332- let bQ = bc
333- bQ
344+ let bW = bj
345+ bW
334346 }
335347 else throw("fail to cast into String")
336348 }
337349
338350
339-func bR (bP) = {
340- let bc = bP
341- if ($isInstanceOf(bc, "Int"))
351+func bX (bV) = {
352+ let bj = bV
353+ if ($isInstanceOf(bj, "Int"))
342354 then {
343- let bS = bc
344- bS
355+ let bY = bj
356+ bY
345357 }
346358 else throw("fail to cast into Int")
347359 }
348360
349361
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
362+func bZ (ca) = {
363+ let bj = ca
364+ if (("S" == bj))
365+ then bq
366+ else if (("M" == bj))
367+ then br
368+ else if (("L" == bj))
369+ then bs
370+ else if (("XL" == bj))
371+ then bt
372+ else if (("XXL" == bj))
373+ then bu
362374 else throw("Unknown land size")
363375 }
364376
365377
366-let bV = {
367- let bc = ba
368- if ((base58'2W' == bc))
378+let cb = {
379+ let bj = bh
380+ if ((base58'2W' == bj))
369381 then addressFromStringValue("3PEktVux2RhchSN63DsDo4b4mz4QqzKSeDv")
370- else if ((base58'2T' == bc))
382+ else if ((base58'2T' == bj))
371383 then this
372384 else throw("Unknown chain")
373385 }
374386
375-let bW = {
376- let bc = ba
377- if ((base58'2W' == bc))
387+let cc = {
388+ let bj = bh
389+ if ((base58'2W' == bj))
378390 then addressFromStringValue("3PDVuU45H7Eh5dmtNbnRNRStGwULA7NY6Hb")
379- else if ((base58'2T' == bc))
391+ else if ((base58'2T' == bj))
380392 then this
381393 else throw("Unknown chain")
382394 }
383395
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))
396+let cd = base58'6LfPuKJjLgekmncBhMg2LZyMTNVzZBccXR28ySXm9uXD'
397+
398+let ce = [30, 60, 120]
399+
400+let cf = 300000
401+
402+let cg = 5000000
403+
404+let ch = 50
405+
406+let ci = 10000000
407+
408+let cj = {
409+ let bj = bh
410+ if ((base58'2W' == bj))
399411 then 252289527462
400- else if ((base58'2T' == bc))
412+ else if ((base58'2T' == bj))
401413 then 2522895274
402414 else throw("Unknown chain")
403415 }
404416
405-let ce = {
406- let bc = ba
407- if ((base58'2W' == bc))
417+let ck = {
418+ let bj = bh
419+ if ((base58'2W' == bj))
408420 then 250000000
409- else if ((base58'2T' == bc))
421+ else if ((base58'2T' == bj))
410422 then 250000000
411423 else throw("Unknown chain")
412424 }
413425
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))
426+let cl = toBigInt(5)
427+
428+let cm = toBigInt(20)
429+
430+let cn = toBigInt((20 * 20))
431+
432+let co = toBigInt(((20 * 20) * 20))
433+
434+let cp = toBigInt((((20 * 20) * 20) * 20))
435+
436+let cq = toBigInt(((((20 * 20) * 20) * 20) * 20))
437+
438+let cr = 500
439+
440+func cs () = "nextLandNum"
441+
442+
443+func ct (cu) = ("landToAsset_" + cu)
444+
445+
446+func cv (cw) = ("landByCustomName_" + cw)
447+
448+
449+func cx (aD,aL) = ((("infraLevelByAssetIdAndOwner_" + aD) + "_") + aL)
450+
451+
452+func cy (aI,aD,aL) = makeString(["landArtStatusByTypeAssetIdAndOwner", aI, aD, aL], "_")
453+
454+
455+func cz (cu) = ("landOwner_" + cu)
456+
457+
458+func cA (cw) = ("duckByCustomName_" + cw)
459+
460+
461+func cB (cw) = ("accountByCustomName_" + cw)
462+
463+
464+func cC () = "oldiesList"
465+
466+
467+let cD = 0
468+
469+let cE = 1
470+
471+let cF = 2
472+
473+let cG = 0
474+
475+let cH = 5
476+
477+let cI = 6
478+
479+let cJ = 7
480+
481+func cK (cu,ca) = ((W + cu) + ca)
482+
483+
484+func cL (cM,cN) = {
485+ let cO = (((((cN[0] + cN[1]) + cN[2]) + cN[3]) + cN[4]) + cN[5])
486+ if ((0 >= cO))
475487 then throw("Zero weights sum")
476488 else {
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
489+ let cP = fraction(cM, bo, cO)
490+ func cQ (cR,cS) = (cR :+ fraction(cS, cP, bo))
491+
492+ let cT = cN
493+ let cU = size(cT)
494+ let cV = nil
495+ func cW (cX,cY) = if ((cY >= cU))
496+ then cX
497+ else cQ(cX, cT[cY])
498+
499+ func cZ (cX,cY) = if ((cY >= cU))
500+ then cX
489501 else throw("List size exceeds 6")
490502
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))
503+ cZ(cW(cW(cW(cW(cW(cW(cV, 0), 1), 2), 3), 4), 5), 6)
504+ }
505+ }
506+
507+
508+func da (cM) = {
509+ let db = split(value(getString(bR())), "_")
510+ if ((size(db) != Z))
499511 then throw("Wrong proportions data")
500512 else {
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))
514- }
515-
516- if (cY)
513+ let dc = [parseIntValue(db[0]), parseIntValue(db[1]), parseIntValue(db[2]), parseIntValue(db[3]), parseIntValue(db[4]), parseIntValue(db[5])]
514+ cL(cM, dc)
515+ }
516+ }
517+
518+
519+func dd (de,df,dg) = {
520+ let dh = da(dg)
521+ func di (cR,bI) = {
522+ let dj = (parseIntValue(df[bI]) - dh[bI])
523+ if ((0 > dj))
524+ then throw(((((("Not enough material idx=" + toString(bI)) + ", you have ") + df[bI]) + ", but need ") + toString(dh[bI])))
525+ else (cR :+ toString(dj))
526+ }
527+
528+ if (de)
517529 then {
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
530+ let cT = [0, 1, 2, 3, 4, 5]
531+ let cU = size(cT)
532+ let cV = nil
533+ func cW (cX,cY) = if ((cY >= cU))
534+ then cX
535+ else di(cX, cT[cY])
536+
537+ func cZ (cX,cY) = if ((cY >= cU))
538+ then cX
527539 else throw("List size exceeds 6")
528540
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
541+ cZ(cW(cW(cW(cW(cW(cW(cV, 0), 1), 2), 3), 4), 5), 6)
542+ }
543+ else df
544+ }
545+
546+
547+func dk (dl,dm) = if ((dm == ""))
548+ then dl
537549 else {
538- let dh = if ((df == ""))
550+ let dn = if ((dl == ""))
539551 then nil
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))
552+ else split(dl, "_")
553+ func do (cR,dp) = {
554+ let dq = cR._1
555+ func dr (ds,dt) = {
556+ let du = split(dt, ",")
557+ if ((size(du) != 2))
546558 then throw("Incorrect format, should be index,amount")
547559 else {
548- let bB = parseIntValue(do[0])
549- if (if ((0 > bB))
560+ let bI = parseIntValue(du[0])
561+ if (if ((0 > bI))
550562 then true
551- else (bB >= size(ac)))
563+ else (bI >= size(aj)))
552564 then throw("Unknown product idx")
553- else if ((bB != dk))
554- then dm
565+ else if ((bI != dq))
566+ then ds
555567 else {
556- let dp = parseIntValue(do[1])
557- if ((0 >= dp))
568+ let dv = parseIntValue(du[1])
569+ if ((0 >= dv))
558570 then throw("Pass only positive amounts")
559- else (dm + dp)
571+ else (ds + dv)
560572 }
561573 }
562574 }
563575
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
576+ let dw = {
577+ let cT = split(dm, "_")
578+ let cU = size(cT)
579+ let cV = 0
580+ func cW (cX,cY) = if ((cY >= cU))
581+ then cX
582+ else dr(cX, cT[cY])
583+
584+ func cZ (cX,cY) = if ((cY >= cU))
585+ then cX
574586 else throw("List size exceeds 10")
575587
576- cT(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
588+ cZ(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
577589 }
578- let dr = if ((size(dh) > dk))
579- then parseIntValue(dh[dk])
590+ let dx = if ((size(dn) > dq))
591+ then parseIntValue(dn[dq])
580592 else 0
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
593+ let dy = if ((dx >= dw))
594+ then (dx - dw)
595+ else throw(((((("You have " + toString(dx)) + " of ") + ag[dq]) + ", but tried to use ") + toString(dw)))
596+ $Tuple2((dq + 1), (cR._2 :+ toString(dy)))
597+ }
598+
599+ let dz = {
600+ let cT = aj
601+ let cU = size(cT)
602+ let cV = $Tuple2(0, nil)
603+ func cW (cX,cY) = if ((cY >= cU))
604+ then cX
605+ else do(cX, cT[cY])
606+
607+ func cZ (cX,cY) = if ((cY >= cU))
608+ then cX
597609 else throw("List size exceeds 50")
598610
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, "_")
602- }
603-
604-
605-func du (dv) = {
606- let dh = if ((dv == ""))
611+ cZ(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cV, 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)
612+ }
613+ makeString(dz._2, "_")
614+ }
615+
616+
617+func dA (dB) = {
618+ let dn = if ((dB == ""))
607619 then nil
608- else split(dv, "_")
609- func dw (cL,aY) = {
610- let dk = (size(cL) / 8)
611- let dr = if ((size(dh) > dk))
612- then parseIntValue(dh[dk])
620+ else split(dB, "_")
621+ func dC (cR,bf) = {
622+ let dq = (size(cR) / 8)
623+ let dx = if ((size(dn) > dq))
624+ then parseIntValue(dn[dq])
613625 else 0
614- (cL + toBytes(dr))
615- }
616-
617- let cN = ac
618- let cO = size(cN)
619- let cP = base58''
620- func cQ (cR,cS) = if ((cS >= cO))
621- then cR
622- else dw(cR, cN[cS])
623-
624- func cT (cR,cS) = if ((cS >= cO))
625- then cR
626+ (cR + toBytes(dx))
627+ }
628+
629+ let cT = aj
630+ let cU = size(cT)
631+ let cV = base58''
632+ func cW (cX,cY) = if ((cY >= cU))
633+ then cX
634+ else dC(cX, cT[cY])
635+
636+ func cZ (cX,cY) = if ((cY >= cU))
637+ then cX
626638 else throw("List size exceeds 50")
627639
628- 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)
629- }
630-
631-
632-func dx (dy) = {
633- func dz (cL,aY) = {
634- let dk = size(cL)
635- let dA = take(drop(dy, (8 * dk)), 8)
636- (cL :+ toString(toInt(dA)))
640+ cZ(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cV, 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)
641+ }
642+
643+
644+func dD (dE) = {
645+ func dF (cR,bf) = {
646+ let dq = size(cR)
647+ let dG = take(drop(dE, (8 * dq)), 8)
648+ (cR :+ toString(toInt(dG)))
637649 }
638650
639651 makeString({
640- let cN = ac
641- let cO = size(cN)
642- let cP = nil
643- func cQ (cR,cS) = if ((cS >= cO))
644- then cR
645- else dz(cR, cN[cS])
646-
647- func cT (cR,cS) = if ((cS >= cO))
648- then cR
652+ let cT = aj
653+ let cU = size(cT)
654+ let cV = nil
655+ func cW (cX,cY) = if ((cY >= cU))
656+ then cX
657+ else dF(cX, cT[cY])
658+
659+ func cZ (cX,cY) = if ((cY >= cU))
660+ then cX
649661 else throw("List size exceeds 50")
650662
651- 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)
663+ cZ(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cV, 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)
652664 }, "_")
653665 }
654666
655667
656-func dB (dC,dh,dD,dE,dF,dG) = {
657- let do = split(dC, ":")
658- if ((size(do) != 2))
668+func dH (dI,dJ) = {
669+ func dK (cR,dq) = if ((parseIntValue(dJ[dq]) > dI[dq]))
670+ then throw(("Requirement not satisfied: " + g[dq]))
671+ else true
672+
673+ let cT = [0, 1, 2, 3, 4, 5, 6]
674+ let cU = size(cT)
675+ let cV = false
676+ func cW (cX,cY) = if ((cY >= cU))
677+ then cX
678+ else dK(cX, cT[cY])
679+
680+ func cZ (cX,cY) = if ((cY >= cU))
681+ then cX
682+ else throw("List size exceeds 7")
683+
684+ cZ(cW(cW(cW(cW(cW(cW(cW(cV, 0), 1), 2), 3), 4), 5), 6), 7)
685+ }
686+
687+
688+func dL (dM,dn,dN,dO,dP,dQ,dI) = {
689+ let du = split(dM, ":")
690+ if ((size(du) != 2))
659691 then throw("Incorrect format, should be index:amount")
660692 else {
661- let dH = parseIntValue(do[0])
662- let dI = parseIntValue(do[1])
663- if (if ((0 > dH))
693+ let dR = parseIntValue(du[0])
694+ let dS = parseIntValue(du[1])
695+ if (if ((0 > dR))
664696 then true
665- else (dH >= size(ac)))
697+ else (dR >= size(aj)))
666698 then throw("Unknown product idx")
667- else if ((0 > dI))
699+ else if ((0 > dS))
668700 then throw("Count can't be negative")
669- else if ((dI == 0))
670- then $Tuple2(dh, false)
701+ else if ((dS == 0))
702+ then $Tuple2(dn, false)
671703 else {
672- let dJ = take(dh, (8 * dH))
673- let dr = toInt(take(drop(dh, (8 * dH)), 8))
674- let dK = drop(dh, (8 * (dH + 1)))
675- if (if (!(dD))
676- then (dI > dr)
704+ let dT = take(dn, (8 * dR))
705+ let dx = toInt(take(drop(dn, (8 * dR)), 8))
706+ let dU = drop(dn, (8 * (dR + 1)))
707+ let bf = split(aj[dR], "_")
708+ if (if (!(dN))
709+ then (dS > dx)
677710 else false)
678- then throw(((((("You have " + toString(dr)) + " of ") + Z[dH]) + ", but tried to use ") + toString(dI)))
711+ then throw(((((("You have " + toString(dx)) + " of ") + ag[dR]) + ", but tried to use ") + toString(dS)))
679712 else {
680- let dL = if (!(dD))
713+ let dV = if (if (!(dN))
714+ then dH(dI, split(bf[al], ","))
715+ else false)
681716 then {
682- let dM = split(ac[dH], "_")[ae]
683- if ((dM == ""))
717+ let dW = bf[am]
718+ if ((dW == ""))
684719 then throw("Item cannot be equipped")
685720 else {
686- let dN = parseIntValue(dM)
687- let dO = (dN / 100)
688- if ((dE != dO))
721+ let dX = parseIntValue(dW)
722+ let dY = (dX / 100)
723+ if ((dO != dY))
689724 then throw("Segment incompatible")
690725 else {
691- let dP = ((dN % 100) / 10)
692- if ((dF != dP))
726+ let dZ = ((dX % 100) / 10)
727+ if ((dP != dZ))
693728 then throw("Slot incompatible")
694729 else {
695- let dQ = (dN % 10)
696- if (if ((dG != 0))
697- then (dQ > 1)
730+ let ea = (dX % 10)
731+ if (if ((dQ != 0))
732+ then (ea > 1)
698733 else false)
699734 then throw("Big items should occupy slot 0")
700- else (dQ > 1)
735+ else (ea > 1)
701736 }
702737 }
703738 }
704739 }
705740 else false
706- $Tuple2(((dJ + toBytes((dr + (if (dD)
707- then dI
708- else -(dI))))) + dK), dL)
741+ $Tuple2(((dT + toBytes((dx + (if (dN)
742+ then dS
743+ else -(dS))))) + dU), dV)
709744 }
710745 }
711746 }
712747 }
713748
714749
715-func dR (dS,dT,dD,dE,dF) = if ((dS != ""))
750+func eb (ec,ed,dN,dO,dP,dJ) = if ((ec != ""))
716751 then {
717- let dU = split(dS, ",")
718- if ((size(dU) > n))
752+ let ee = split(ec, ",")
753+ if ((size(ee) > o))
719754 then throw("Wrong slots format")
720755 else {
721- let dV = dU[0]
722- let dW = if ((size(dU) > 1))
723- then dU[1]
756+ let ef = ee[0]
757+ let eg = if ((size(ee) > 1))
758+ then ee[1]
724759 else ""
725- if (if ((dV == ""))
726- then (dW == "")
760+ if (if ((ef == ""))
761+ then (eg == "")
727762 else false)
728- then dT
763+ then ed
729764 else {
730- let dX = if ((dV != ""))
731- then dB(dV, dT, dD, dE, dF, 0)
732- else $Tuple2(dT, false)
733- if ((dW != ""))
734- then if (dX._2)
765+ let eh = if ((ef != ""))
766+ then dL(ef, ed, dN, dO, dP, 0, dJ)
767+ else $Tuple2(ed, false)
768+ if ((eg != ""))
769+ then if (eh._2)
735770 then throw("Big item already occupies slot")
736- else dB(dW, dX._1, dD, dE, dF, 1)._1
737- else dX._1
771+ else dL(eg, eh._1, dN, dO, dP, 1, dJ)._1
772+ else eh._1
738773 }
739774 }
740775 }
741- else dT
742-
743-
744-func dY (dZ,ea,dD) = {
745- func dE (cL,eb) = {
746- let dk = cL._1
747- let dF = split(eb, ";")
748- if ((size(dF) != m))
776+ else ed
777+
778+
779+func ei (ej,ek,dN,dJ) = {
780+ func dO (cR,el) = {
781+ let dq = cR._1
782+ let dP = split(el, ";")
783+ if ((size(dP) != n))
749784 then throw("Wrong segment format")
750785 else {
751- let ec = dF[0]
752- let dq = dF[1]
753- if (if ((ec == ""))
754- then (dq == "")
786+ let em = dP[0]
787+ let dw = dP[1]
788+ if (if ((em == ""))
789+ then (dw == "")
755790 else false)
756- then $Tuple2((dk + 1), cL._2)
791+ then $Tuple2((dq + 1), cR._2)
757792 else {
758- let ed = dR(ec, cL._2, dD, dk, 0)
759- $Tuple2((dk + 1), dR(dq, ed, dD, dk, 1))
793+ let en = eb(em, cR._2, dN, dq, 0, dJ)
794+ $Tuple2((dq + 1), eb(dw, en, dN, dq, 1, dJ))
760795 }
761796 }
762797 }
763798
764-( let cN = dZ
765- let cO = size(cN)
766- let cP = $Tuple2(0, ea)
767- func cQ (cR,cS) = if ((cS >= cO))
768- then cR
769- else dE(cR, cN[cS])
770-
771- func cT (cR,cS) = if ((cS >= cO))
772- then cR
799+( let cT = ej
800+ let cU = size(cT)
801+ let cV = $Tuple2(0, ek)
802+ func cW (cX,cY) = if ((cY >= cU))
803+ then cX
804+ else dO(cX, cT[cY])
805+
806+ func cZ (cX,cY) = if ((cY >= cU))
807+ then cX
773808 else throw("List size exceeds 6")
774809
775- cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6))._2
776- }
777-
778-
779-func ee (ef,eg,eh,ei) = if ((size(ef) != S))
810+ cZ(cW(cW(cW(cW(cW(cW(cV, 0), 1), 2), 3), 4), 5), 6))._2
811+ }
812+
813+
814+func eo (ep,eq,er,es) = if ((size(ep) != Z))
780815 then throw("Wrong proportions data")
781816 else {
782- func ej (cL,ek) = {
783- let dd = (parseIntValue(ef[ek]) + ((ei * eg[ek]) * eh))
784- if ((0 > dd))
785- then throw(((((((("Panic! Pieces of type=" + toString(ek)) + ", sign=") + toString(ei)) + ", terrainCounts[i]=") + toString(eg[ek])) + ", landSizeIndex=") + toString(eh)))
786- else (cL :+ toString(dd))
787- }
788-
789- let cW = {
790- let cN = [0, 1, 2, 3, 4, 5]
791- let cO = size(cN)
792- let cP = nil
793- func cQ (cR,cS) = if ((cS >= cO))
794- then cR
795- else ej(cR, cN[cS])
796-
797- func cT (cR,cS) = if ((cS >= cO))
798- then cR
817+ func et (cR,eu) = {
818+ let dj = (parseIntValue(ep[eu]) + ((es * eq[eu]) * er))
819+ if ((0 > dj))
820+ then throw(((((((("Panic! Pieces of type=" + toString(eu)) + ", sign=") + toString(es)) + ", terrainCounts[i]=") + toString(eq[eu])) + ", landSizeIndex=") + toString(er)))
821+ else (cR :+ toString(dj))
822+ }
823+
824+ let dc = {
825+ let cT = [0, 1, 2, 3, 4, 5]
826+ let cU = size(cT)
827+ let cV = nil
828+ func cW (cX,cY) = if ((cY >= cU))
829+ then cX
830+ else et(cX, cT[cY])
831+
832+ func cZ (cX,cY) = if ((cY >= cU))
833+ then cX
799834 else throw("List size exceeds 6")
800835
801- cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6)
802- }
803- makeString(cW, "_")
804- }
805-
806-
807-func el (eg,eh,ei) = {
808- let ef = split(valueOrElse(getString(bL()), "0_0_0_0_0_0"), "_")
809- ee(ef, eg, eh, ei)
810- }
811-
812-
813-func em (en) = [(size(split(en, "A")) - 1), (size(split(en, "B")) - 1), (size(split(en, "C")) - 1), (size(split(en, "D")) - 1), (size(split(en, "E")) - 1), (size(split(en, "F")) - 1)]
814-
815-
816-func eo (ep,eg,eq,eh,er) = {
817- func es (cL,ek) = {
818- let et = ((fraction(eq, er, U) * eg[ek]) * eh)
819- (cL :+ toString((parseIntValue(ep[ek]) + et)))
820- }
821-
822- let cW = {
823- let cN = [0, 1, 2, 3, 4, 5]
824- let cO = size(cN)
825- let cP = nil
826- func cQ (cR,cS) = if ((cS >= cO))
827- then cR
828- else es(cR, cN[cS])
829-
830- func cT (cR,cS) = if ((cS >= cO))
831- then cR
836+ cZ(cW(cW(cW(cW(cW(cW(cV, 0), 1), 2), 3), 4), 5), 6)
837+ }
838+ makeString(dc, "_")
839+ }
840+
841+
842+func ev (eq,er,es) = {
843+ let ep = split(valueOrElse(getString(bR()), "0_0_0_0_0_0"), "_")
844+ eo(ep, eq, er, es)
845+ }
846+
847+
848+func ew (ex) = [(size(split(ex, "A")) - 1), (size(split(ex, "B")) - 1), (size(split(ex, "C")) - 1), (size(split(ex, "D")) - 1), (size(split(ex, "E")) - 1), (size(split(ex, "F")) - 1)]
849+
850+
851+func ey (ez,eq,eA,er,eB) = {
852+ func eC (cR,eu) = {
853+ let eD = ((fraction(eA, eB, ab) * eq[eu]) * er)
854+ (cR :+ toString((parseIntValue(ez[eu]) + eD)))
855+ }
856+
857+ let dc = {
858+ let cT = [0, 1, 2, 3, 4, 5]
859+ let cU = size(cT)
860+ let cV = nil
861+ func cW (cX,cY) = if ((cY >= cU))
862+ then cX
863+ else eC(cX, cT[cY])
864+
865+ func cZ (cX,cY) = if ((cY >= cU))
866+ then cX
832867 else throw("List size exceeds 6")
833868
834- cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6)
835- }
836- makeString(cW, "_")
837- }
838-
839-
840-func eu (eg,eq,eh,er) = {
841- func es (cL,ek) = {
842- let et = ((fraction(eq, er, U) * eg[ek]) * eh)
843- $Tuple2((cL._1 :+ et), (cL._2 + et))
844- }
845-
846- let cN = [0, 1, 2, 3, 4, 5]
847- let cO = size(cN)
848- let cP = $Tuple2(nil, 0)
849- func cQ (cR,cS) = if ((cS >= cO))
850- then cR
851- else es(cR, cN[cS])
852-
853- func cT (cR,cS) = if ((cS >= cO))
854- then cR
869+ cZ(cW(cW(cW(cW(cW(cW(cV, 0), 1), 2), 3), 4), 5), 6)
870+ }
871+ makeString(dc, "_")
872+ }
873+
874+
875+func eE (eq,eA,er,eB) = {
876+ func eC (cR,eu) = {
877+ let eD = ((fraction(eA, eB, ab) * eq[eu]) * er)
878+ $Tuple2((cR._1 :+ eD), (cR._2 + eD))
879+ }
880+
881+ let cT = [0, 1, 2, 3, 4, 5]
882+ let cU = size(cT)
883+ let cV = $Tuple2(nil, 0)
884+ func cW (cX,cY) = if ((cY >= cU))
885+ then cX
886+ else eC(cX, cT[cY])
887+
888+ func cZ (cX,cY) = if ((cY >= cU))
889+ then cX
855890 else throw("List size exceeds 6")
856891
857- cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6)
858- }
859-
860-
861-func ev (ew,ex,ey,ez) = {
862- let eA = ey._1
863- let eB = ey._2
864- if ((eB == 0))
865- then $Tuple2(makeString(ew, "_"), makeString(ex, "_"))
866- else if ((ez >= eB))
892+ cZ(cW(cW(cW(cW(cW(cW(cV, 0), 1), 2), 3), 4), 5), 6)
893+ }
894+
895+
896+func eF (eG,eH,eI,eJ) = {
897+ let eK = eI._1
898+ let eL = eI._2
899+ if ((eL == 0))
900+ then $Tuple2(makeString(eG, "_"), makeString(eH, "_"))
901+ else if ((eJ >= eL))
867902 then {
868- func eC (cL,ek) = (cL :+ toString((parseIntValue(ew[ek]) + eA[ek])))
869-
870- let cW = {
871- let cN = [0, 1, 2, 3, 4, 5]
872- let cO = size(cN)
873- let cP = nil
874- func cQ (cR,cS) = if ((cS >= cO))
875- then cR
876- else eC(cR, cN[cS])
877-
878- func cT (cR,cS) = if ((cS >= cO))
879- then cR
903+ func eM (cR,eu) = (cR :+ toString((parseIntValue(eG[eu]) + eK[eu])))
904+
905+ let dc = {
906+ let cT = [0, 1, 2, 3, 4, 5]
907+ let cU = size(cT)
908+ let cV = nil
909+ func cW (cX,cY) = if ((cY >= cU))
910+ then cX
911+ else eM(cX, cT[cY])
912+
913+ func cZ (cX,cY) = if ((cY >= cU))
914+ then cX
880915 else throw("List size exceeds 6")
881916
882- cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6)
917+ cZ(cW(cW(cW(cW(cW(cW(cV, 0), 1), 2), 3), 4), 5), 6)
883918 }
884- $Tuple2(makeString(cW, "_"), makeString(ex, "_"))
919+ $Tuple2(makeString(dc, "_"), makeString(eH, "_"))
885920 }
886921 else {
887- func eD (cL,ek) = {
888- let eE = fraction(eA[ek], ez, eB)
889- $Tuple2((cL._1 :+ toString((parseIntValue(ew[ek]) + eE))), (cL._2 :+ toString(((parseIntValue(ex[ek]) + eA[ek]) - eE))))
922+ func eN (cR,eu) = {
923+ let eO = fraction(eK[eu], eJ, eL)
924+ $Tuple2((cR._1 :+ toString((parseIntValue(eG[eu]) + eO))), (cR._2 :+ toString(((parseIntValue(eH[eu]) + eK[eu]) - eO))))
890925 }
891926
892- let cW = {
893- let cN = [0, 1, 2, 3, 4, 5]
894- let cO = size(cN)
895- let cP = $Tuple2(nil, nil)
896- func cQ (cR,cS) = if ((cS >= cO))
897- then cR
898- else eD(cR, cN[cS])
899-
900- func cT (cR,cS) = if ((cS >= cO))
901- then cR
927+ let dc = {
928+ let cT = [0, 1, 2, 3, 4, 5]
929+ let cU = size(cT)
930+ let cV = $Tuple2(nil, nil)
931+ func cW (cX,cY) = if ((cY >= cU))
932+ then cX
933+ else eN(cX, cT[cY])
934+
935+ func cZ (cX,cY) = if ((cY >= cU))
936+ then cX
902937 else throw("List size exceeds 6")
903938
904- cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6)
939+ cZ(cW(cW(cW(cW(cW(cW(cV, 0), 1), 2), 3), 4), 5), 6)
905940 }
906- $Tuple2(makeString(cW._1, "_"), makeString(cW._2, "_"))
941+ $Tuple2(makeString(dc._1, "_"), makeString(dc._2, "_"))
907942 }
908943 }
909944
910945
911-func eF (eG) = if ((eG >= toBigInt(0)))
912- then eG
913- else -(eG)
914-
915-
916-let eH = [[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]]
917-
918-func eI (bS,eJ) = {
919- let eK = toInt((bS % cg))
920- let eL = if ((eJ[0] > eK))
946+func eP (eQ) = if ((eQ >= toBigInt(0)))
947+ then eQ
948+ else -(eQ)
949+
950+
951+let eR = [[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]]
952+
953+func eS (bY,eT) = {
954+ let eU = toInt((bY % cm))
955+ let eV = if ((eT[0] > eU))
921956 then "A"
922- else if ((eJ[1] > eK))
957+ else if ((eT[1] > eU))
923958 then "B"
924- else if ((eJ[2] > eK))
959+ else if ((eT[2] > eU))
925960 then "C"
926- else if ((eJ[3] > eK))
961+ else if ((eT[3] > eU))
927962 then "D"
928- else if ((eJ[4] > eK))
963+ else if ((eT[4] > eU))
929964 then "E"
930965 else "F"
931- eL
932- }
933-
934-
935-func eM (eN,eO) = {
936- let eP = eH[eO]
937- func eQ (cL,cM) = $Tuple2((((((cL._1 + eI(cL._2, eP)) + eI((cL._2 / cg), eP)) + eI((cL._2 / ch), eP)) + eI((cL._2 / ci), eP)) + eI((cL._2 / cj), eP)), (cL._2 / ck))
938-
939- let eR = {
940- let cN = [1, 2, 3, 4, 5]
941- let cO = size(cN)
942- let cP = $Tuple2("", (eN / cf))
943- func cQ (cR,cS) = if ((cS >= cO))
944- then cR
945- else eQ(cR, cN[cS])
946-
947- func cT (cR,cS) = if ((cS >= cO))
948- then cR
966+ eV
967+ }
968+
969+
970+func eW (eX,eY) = {
971+ let eZ = eR[eY]
972+ func fa (cR,cS) = $Tuple2((((((cR._1 + eS(cR._2, eZ)) + eS((cR._2 / cm), eZ)) + eS((cR._2 / cn), eZ)) + eS((cR._2 / co), eZ)) + eS((cR._2 / cp), eZ)), (cR._2 / cq))
973+
974+ let fb = {
975+ let cT = [1, 2, 3, 4, 5]
976+ let cU = size(cT)
977+ let cV = $Tuple2("", (eX / cl))
978+ func cW (cX,cY) = if ((cY >= cU))
979+ then cX
980+ else fa(cX, cT[cY])
981+
982+ func cZ (cX,cY) = if ((cY >= cU))
983+ then cX
949984 else throw("List size exceeds 5")
950985
951- cT(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5)
952- }
953- eR._1
954- }
955-
956-
957-func eS (eT) = {
958- let eU = split(valueOrElse(getString(eT), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
959-[toString(valueOrElse(parseInt(eU[ap]), 0)), if ((size(split(eU[aq], "_")) == S))
960- then eU[aq]
961- else "0_0_0_0_0_0", if ((size(split(eU[ar], "_")) == S))
962- then eU[ar]
963- else "0_0_0_0_0_0", eU[as]]
964- }
965-
966-
967-func eV (eW) = {
968- let do = split(eW, "_")
969- ((V * (parseIntValue(do[1]) + 1)) * parseIntValue(do[0]))
970- }
971-
972-
973-func eX (eY) = {
974- let eZ = eY[aj]
975- func fa (cL,dj) = (cL + parseIntValue(dj))
976-
977- func fb (cL,dj) = {
978- let bB = cL._1
979- let fc = (((parseIntValue(dj) + af) - 1) / af)
980- $Tuple2((bB + 1), (cL._2 + (fc * bi)))
981- }
982-
983- let fd = {
984- let cN = split(eY[ah], "_")
985- let cO = size(cN)
986- let cP = 0
987- func cQ (cR,cS) = if ((cS >= cO))
988- then cR
989- else fa(cR, cN[cS])
990-
991- func cT (cR,cS) = if ((cS >= cO))
992- then cR
986+ cZ(cW(cW(cW(cW(cW(cV, 0), 1), 2), 3), 4), 5)
987+ }
988+ fb._1
989+ }
990+
991+
992+func fc (fd) = {
993+ let fe = split(valueOrElse(getString(fd), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
994+[toString(valueOrElse(parseInt(fe[ax]), 0)), if ((size(split(fe[ay], "_")) == Z))
995+ then fe[ay]
996+ else "0_0_0_0_0_0", if ((size(split(fe[az], "_")) == Z))
997+ then fe[az]
998+ else "0_0_0_0_0_0", fe[aA]]
999+ }
1000+
1001+
1002+func ff (fg) = {
1003+ let du = split(fg, "_")
1004+ ((ac * (parseIntValue(du[1]) + 1)) * parseIntValue(du[0]))
1005+ }
1006+
1007+
1008+func fh (fi) = {
1009+ let fj = fi[ar]
1010+ func fk (cR,dp) = (cR + parseIntValue(dp))
1011+
1012+ func fl (cR,dp) = {
1013+ let bI = cR._1
1014+ let fm = (((parseIntValue(dp) + an) - 1) / an)
1015+ $Tuple2((bI + 1), (cR._2 + (fm * bp)))
1016+ }
1017+
1018+ let fn = {
1019+ let cT = split(fi[ap], "_")
1020+ let cU = size(cT)
1021+ let cV = 0
1022+ func cW (cX,cY) = if ((cY >= cU))
1023+ then cX
1024+ else fk(cX, cT[cY])
1025+
1026+ func cZ (cX,cY) = if ((cY >= cU))
1027+ then cX
9931028 else throw("List size exceeds 6")
9941029
995- cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6)
996- }
997- let fe = {
998- let cN = split(eY[ai], "_")
999- let cO = size(cN)
1000- let cP = 0
1001- func ff (cR,cS) = if ((cS >= cO))
1002- then cR
1003- else fa(cR, cN[cS])
1004-
1005- func fg (cR,cS) = if ((cS >= cO))
1006- then cR
1030+ cZ(cW(cW(cW(cW(cW(cW(cV, 0), 1), 2), 3), 4), 5), 6)
1031+ }
1032+ let fo = {
1033+ let cT = split(fi[aq], "_")
1034+ let cU = size(cT)
1035+ let cV = 0
1036+ func fp (cX,cY) = if ((cY >= cU))
1037+ then cX
1038+ else fk(cX, cT[cY])
1039+
1040+ func fq (cX,cY) = if ((cY >= cU))
1041+ then cX
10071042 else throw("List size exceeds 6")
10081043
1009- fg(ff(ff(ff(ff(ff(ff(cP, 0), 1), 2), 3), 4), 5), 6)
1010- }
1011- let fh = if ((eZ == ""))
1044+ fq(fp(fp(fp(fp(fp(fp(cV, 0), 1), 2), 3), 4), 5), 6)
1045+ }
1046+ let fr = if ((fj == ""))
10121047 then 0
1013- else ( let cN = split_4C(eZ, "_")
1014- let cO = size(cN)
1015- let cP = $Tuple2(0, 0)
1016- func fi (cR,cS) = if ((cS >= cO))
1017- then cR
1018- else fb(cR, cN[cS])
1019-
1020- func fj (cR,cS) = if ((cS >= cO))
1021- then cR
1048+ else ( let cT = split_4C(fj, "_")
1049+ let cU = size(cT)
1050+ let cV = $Tuple2(0, 0)
1051+ func fs (cX,cY) = if ((cY >= cU))
1052+ then cX
1053+ else fl(cX, cT[cY])
1054+
1055+ func ft (cX,cY) = if ((cY >= cU))
1056+ then cX
10221057 else throw("List size exceeds 50")
10231058
1024- fj(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(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
1025- ((fd + fe) + fh)
1026- }
1027-
1028-
1029-func fk (fl,fm,fn) = {
1030- let eW = ((toString(fm) + "_") + toString(fn))
1031- let fo = eV(eW)
1032- let fp = valueOrElse(getString(fl), (eW + ":0_0_0_0_0_0:0_0_0_0_0_0::0"))
1033- let fq = split_4C(fp, ":")
1034- let fr = eX(fq)
1035- let fs = if ((5 > size(fq)))
1036- then makeString(["0", toString(fr), toString((fo - fr)), toString(fo)], "_")
1037- else {
1038- let ft = split(fq[ak], "_")
1039- let fu = parseIntValue(ft[al])
1040- let fv = if ((size(ft) > 1))
1041- then parseIntValue(ft[am])
1042- else fr
1043- makeString([toString(fu), toString(fv), toString(((fo - fu) - fv)), toString(fo)], "_")
1044- }
1045-[fq[ag], if ((size(split(fq[ah], "_")) == S))
1046- then fq[ah]
1047- else "0_0_0_0_0_0", if ((size(split(fq[ai], "_")) == S))
1048- then fq[ai]
1049- else "0_0_0_0_0_0", fq[aj], fs]
1050- }
1051-
1052-
1053-func fw (eY) = {
1054- let fx = eX(eY)
1055- let fy = parseIntValue(split(eY[ak], "_")[al])
1056- ((eV(eY[ag]) - fx) - fy)
1057- }
1058-
1059-
1060-func fz (fA,fB) = {
1061- let fc = if ((fA >= 0))
1062- then (((fA + fB) - 1) / fB)
1063- else -((((-(fA) + fB) - 1) / fB))
1064- (fc * bi)
1065- }
1066-
1067-
1068-func fC (fD,eY,fE) = if ((size(fD) != 3))
1059+ ft(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(cV, 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
1060+ ((fn + fo) + fr)
1061+ }
1062+
1063+
1064+func fu (fv,fw,fx) = {
1065+ let fg = ((toString(fw) + "_") + toString(fx))
1066+ let fy = ff(fg)
1067+ let fz = valueOrElse(getString(fv), (fg + ":0_0_0_0_0_0:0_0_0_0_0_0::0"))
1068+ let fA = split_4C(fz, ":")
1069+ let fB = fh(fA)
1070+ let fC = if ((5 > size(fA)))
1071+ then makeString(["0", toString(fB), toString((fy - fB)), toString(fy)], "_")
1072+ else {
1073+ let fD = split(fA[as], "_")
1074+ let fE = parseIntValue(fD[at])
1075+ let fF = if ((size(fD) > 1))
1076+ then parseIntValue(fD[au])
1077+ else fB
1078+ makeString([toString(fE), toString(fF), toString(((fy - fE) - fF)), toString(fy)], "_")
1079+ }
1080+[fA[ao], if ((size(split(fA[ap], "_")) == Z))
1081+ then fA[ap]
1082+ else "0_0_0_0_0_0", if ((size(split(fA[aq], "_")) == Z))
1083+ then fA[aq]
1084+ else "0_0_0_0_0_0", fA[ar], fC]
1085+ }
1086+
1087+
1088+func fG (fi) = {
1089+ let fH = fh(fi)
1090+ let fI = parseIntValue(split(fi[as], "_")[at])
1091+ ((ff(fi[ao]) - fH) - fI)
1092+ }
1093+
1094+
1095+func fJ (fK,fL) = {
1096+ let fm = if ((fK >= 0))
1097+ then (((fK + fL) - 1) / fL)
1098+ else -((((-(fK) + fL) - 1) / fL))
1099+ (fm * bp)
1100+ }
1101+
1102+
1103+func fM (fN,fi,fO) = if ((size(fN) != 3))
10691104 then throw("cargoListStr should contain exactly 2 ':' separators")
10701105 else {
1071- let fF = split(fD[0], "_")
1072- let fG = split(fD[1], "_")
1073- let fH = if ((fD[2] == ""))
1106+ let fP = split(fN[0], "_")
1107+ let fQ = split(fN[1], "_")
1108+ let fR = if ((fN[2] == ""))
10741109 then nil
1075- else split(fD[2], "_")
1076- if ((size(fF) != S))
1110+ else split(fN[2], "_")
1111+ if ((size(fP) != Z))
10771112 then throw("All 6 resources should be passed")
1078- else if ((size(fG) != S))
1113+ else if ((size(fQ) != Z))
10791114 then throw("All 6 materials should be passed")
10801115 else {
1081- let ez = fw(eY)
1082- let fI = split(eY[ah], "_")
1083- let fJ = split(eY[ai], "_")
1084- let fK = if ((eY[aj] == ""))
1116+ let eJ = fG(fi)
1117+ let fS = split(fi[ap], "_")
1118+ let fT = split(fi[aq], "_")
1119+ let fU = if ((fi[ar] == ""))
10851120 then nil
1086- else split(eY[aj], "_")
1087- let ex = split(fE[aq], "_")
1088- let fL = split(fE[ar], "_")
1089- let fM = if ((fE[as] == ""))
1121+ else split(fi[ar], "_")
1122+ let eH = split(fO[ay], "_")
1123+ let fV = split(fO[az], "_")
1124+ let fW = if ((fO[aA] == ""))
10901125 then nil
1091- else split(fE[as], "_")
1092- func fN (cL,dj) = {
1093- let ek = cL._1
1094- let fO = parseIntValue(dj)
1095- let fP = parseIntValue(fI[ek])
1096- let fQ = parseIntValue(ex[ek])
1097- if ((fO == 0))
1098- then $Tuple4((ek + 1), (cL._2 :+ fI[ek]), (cL._3 :+ ex[ek]), cL._4)
1099- else if ((fO > 0))
1100- then if ((fO > fQ))
1101- then throw((((("Attempt to take " + dj) + " from backpack, but only ") + toString(fQ)) + " available"))
1102- else $Tuple4((ek + 1), (cL._2 :+ toString((fP + fO))), (cL._3 :+ toString((fQ - fO))), (cL._4 + fO))
1103- else if ((-(fO) > fP))
1104- then throw((((("Attempt to take " + toString(-(fO))) + " from warehouse, but only ") + toString(fP)) + " available"))
1105- else $Tuple4((ek + 1), (cL._2 :+ toString((fP + fO))), (cL._3 :+ toString((fQ - fO))), (cL._4 + fO))
1126+ else split(fO[aA], "_")
1127+ func fX (cR,dp) = {
1128+ let eu = cR._1
1129+ let fY = parseIntValue(dp)
1130+ let fZ = parseIntValue(fS[eu])
1131+ let ga = parseIntValue(eH[eu])
1132+ if ((fY == 0))
1133+ then $Tuple4((eu + 1), (cR._2 :+ fS[eu]), (cR._3 :+ eH[eu]), cR._4)
1134+ else if ((fY > 0))
1135+ then if ((fY > ga))
1136+ then throw((((("Attempt to take " + dp) + " from backpack, but only ") + toString(ga)) + " available"))
1137+ else $Tuple4((eu + 1), (cR._2 :+ toString((fZ + fY))), (cR._3 :+ toString((ga - fY))), (cR._4 + fY))
1138+ else if ((-(fY) > fZ))
1139+ then throw((((("Attempt to take " + toString(-(fY))) + " from warehouse, but only ") + toString(fZ)) + " available"))
1140+ else $Tuple4((eu + 1), (cR._2 :+ toString((fZ + fY))), (cR._3 :+ toString((ga - fY))), (cR._4 + fY))
11061141 }
11071142
1108- let cW = {
1109- let cN = fF
1110- let cO = size(cN)
1111- let cP = $Tuple4(0, nil, nil, 0)
1112- func cQ (cR,cS) = if ((cS >= cO))
1113- then cR
1114- else fN(cR, cN[cS])
1115-
1116- func cT (cR,cS) = if ((cS >= cO))
1117- then cR
1143+ let dc = {
1144+ let cT = fP
1145+ let cU = size(cT)
1146+ let cV = $Tuple4(0, nil, nil, 0)
1147+ func cW (cX,cY) = if ((cY >= cU))
1148+ then cX
1149+ else fX(cX, cT[cY])
1150+
1151+ func cZ (cX,cY) = if ((cY >= cU))
1152+ then cX
11181153 else throw("List size exceeds 6")
11191154
1120- cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6)
1155+ cZ(cW(cW(cW(cW(cW(cW(cV, 0), 1), 2), 3), 4), 5), 6)
11211156 }
1122- func fR (cL,dj) = {
1123- let ek = cL._1
1124- let fO = parseIntValue(dj)
1125- let fS = parseIntValue(fJ[ek])
1126- let fT = parseIntValue(fL[ek])
1127- if ((fO == 0))
1128- then $Tuple4((ek + 1), (cL._2 :+ fJ[ek]), (cL._3 :+ fL[ek]), cL._4)
1129- else if ((fO > 0))
1130- then if ((fO > fT))
1131- then throw((((("Attempt to take " + dj) + " from backpack, but only ") + toString(fT)) + " available"))
1132- else $Tuple4((ek + 1), (cL._2 :+ toString((fS + fO))), (cL._3 :+ toString((fT - fO))), (cL._4 + fO))
1133- else if ((-(fO) > fS))
1134- then throw((((("Attempt to take " + toString(-(fO))) + " from warehouse, but only ") + toString(fS)) + " available"))
1135- else $Tuple4((ek + 1), (cL._2 :+ toString((fS + fO))), (cL._3 :+ toString((fT - fO))), (cL._4 + fO))
1157+ func gb (cR,dp) = {
1158+ let eu = cR._1
1159+ let fY = parseIntValue(dp)
1160+ let gc = parseIntValue(fT[eu])
1161+ let gd = parseIntValue(fV[eu])
1162+ if ((fY == 0))
1163+ then $Tuple4((eu + 1), (cR._2 :+ fT[eu]), (cR._3 :+ fV[eu]), cR._4)
1164+ else if ((fY > 0))
1165+ then if ((fY > gd))
1166+ then throw((((("Attempt to take " + dp) + " from backpack, but only ") + toString(gd)) + " available"))
1167+ else $Tuple4((eu + 1), (cR._2 :+ toString((gc + fY))), (cR._3 :+ toString((gd - fY))), (cR._4 + fY))
1168+ else if ((-(fY) > gc))
1169+ then throw((((("Attempt to take " + toString(-(fY))) + " from warehouse, but only ") + toString(gc)) + " available"))
1170+ else $Tuple4((eu + 1), (cR._2 :+ toString((gc + fY))), (cR._3 :+ toString((gd - fY))), (cR._4 + fY))
11361171 }
11371172
1138- let ec = {
1139- let cN = fG
1140- let cO = size(cN)
1141- let cP = $Tuple4(0, nil, nil, cW._4)
1142- func ff (cR,cS) = if ((cS >= cO))
1143- then cR
1144- else fR(cR, cN[cS])
1145-
1146- func fg (cR,cS) = if ((cS >= cO))
1147- then cR
1173+ let em = {
1174+ let cT = fQ
1175+ let cU = size(cT)
1176+ let cV = $Tuple4(0, nil, nil, dc._4)
1177+ func fp (cX,cY) = if ((cY >= cU))
1178+ then cX
1179+ else gb(cX, cT[cY])
1180+
1181+ func fq (cX,cY) = if ((cY >= cU))
1182+ then cX
11481183 else throw("List size exceeds 6")
11491184
1150- fg(ff(ff(ff(ff(ff(ff(cP, 0), 1), 2), 3), 4), 5), 6)
1185+ fq(fp(fp(fp(fp(fp(fp(cV, 0), 1), 2), 3), 4), 5), 6)
11511186 }
1152- func fU (cL,dj) = {
1153- let ek = cL._1
1154- let fO = parseIntValue(dj)
1155- let fV = if ((size(fK) > ek))
1156- then parseIntValue(fK[ek])
1187+ func ge (cR,dp) = {
1188+ let eu = cR._1
1189+ let fY = parseIntValue(dp)
1190+ let gf = if ((size(fU) > eu))
1191+ then parseIntValue(fU[eu])
11571192 else 0
1158- let fW = if ((size(fM) > ek))
1159- then parseIntValue(fM[ek])
1193+ let gg = if ((size(fW) > eu))
1194+ then parseIntValue(fW[eu])
11601195 else 0
1161- if ((fO == 0))
1162- then $Tuple4((ek + 1), (cL._2 :+ toString(fV)), (cL._3 :+ toString(fW)), cL._4)
1163- else if ((fO > 0))
1164- then if ((fO > fW))
1165- then throw((((("Attempt to take " + dj) + " from backpack, but only ") + toString(fW)) + " available"))
1196+ if ((fY == 0))
1197+ then $Tuple4((eu + 1), (cR._2 :+ toString(gf)), (cR._3 :+ toString(gg)), cR._4)
1198+ else if ((fY > 0))
1199+ then if ((fY > gg))
1200+ then throw((((("Attempt to take " + dp) + " from backpack, but only ") + toString(gg)) + " available"))
11661201 else {
1167- let fX = (fz((fV + fO), af) - fz(fV, af))
1168- $Tuple4((ek + 1), (cL._2 :+ toString((fV + fO))), (cL._3 :+ toString((fW - fO))), (cL._4 + fX))
1202+ let gh = (fJ((gf + fY), an) - fJ(gf, an))
1203+ $Tuple4((eu + 1), (cR._2 :+ toString((gf + fY))), (cR._3 :+ toString((gg - fY))), (cR._4 + gh))
11691204 }
1170- else if ((-(fO) > fV))
1171- then throw((((("Attempt to take " + toString(-(fO))) + " from warehouse, but only ") + toString(fV)) + " available"))
1205+ else if ((-(fY) > gf))
1206+ then throw((((("Attempt to take " + toString(-(fY))) + " from warehouse, but only ") + toString(gf)) + " available"))
11721207 else {
1173- let fX = (fz((fV + fO), af) - fz(fV, af))
1174- $Tuple4((ek + 1), (cL._2 :+ toString((fV + fO))), (cL._3 :+ toString((fW - fO))), (cL._4 + fX))
1208+ let gh = (fJ((gf + fY), an) - fJ(gf, an))
1209+ $Tuple4((eu + 1), (cR._2 :+ toString((gf + fY))), (cR._3 :+ toString((gg - fY))), (cR._4 + gh))
11751210 }
11761211 }
11771212
1178- let eU = if ((size(fH) != 0))
1213+ let fe = if ((size(fR) != 0))
11791214 then {
1180- let cN = fH
1181- let cO = size(cN)
1182- let cP = $Tuple4(0, nil, nil, ec._4)
1183- func fi (cR,cS) = if ((cS >= cO))
1184- then cR
1185- else fU(cR, cN[cS])
1186-
1187- func fj (cR,cS) = if ((cS >= cO))
1188- then cR
1215+ let cT = fR
1216+ let cU = size(cT)
1217+ let cV = $Tuple4(0, nil, nil, em._4)
1218+ func fs (cX,cY) = if ((cY >= cU))
1219+ then cX
1220+ else ge(cX, cT[cY])
1221+
1222+ func ft (cX,cY) = if ((cY >= cU))
1223+ then cX
11891224 else throw("List size exceeds 50")
11901225
1191- fj(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(fi(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)
1226+ ft(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(cV, 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)
11921227 }
1193- else $Tuple4(0, fK, fM, ec._4)
1194- let fY = eU._4
1195- if ((fY > ez))
1196- then throw((((("Attempt to put total " + toString(fY)) + " stuff, but only ") + toString(ez)) + " warehouse space left"))
1197- else $Tuple7(makeString(cW._2, "_"), makeString(ec._2, "_"), makeString(eU._2, "_"), makeString(cW._3, "_"), makeString(ec._3, "_"), makeString(eU._3, "_"), fY)
1228+ else $Tuple4(0, fU, fW, em._4)
1229+ let gi = fe._4
1230+ if ((gi > eJ))
1231+ then throw((((("Attempt to put total " + toString(gi)) + " stuff, but only ") + toString(eJ)) + " warehouse space left"))
1232+ else $Tuple7(makeString(dc._2, "_"), makeString(em._2, "_"), makeString(fe._2, "_"), makeString(dc._3, "_"), makeString(em._3, "_"), makeString(fe._3, "_"), gi)
11981233 }
11991234 }
12001235
12011236
1202-func fZ (ga,gb) = {
1203- let aT = toString(ga)
1204- let gc = eF(toBigInt(gb))
1205- let gd = valueOrElse(getInteger(cm()), (cl + 1))
1206- let co = toString(gd)
1207- let eO = toInt((gc % cf))
1208- let en = eM(gc, eO)
1209- let ge = aa[eO]
1210- let gf = Issue(cE(co, "S"), makeString([co, "S", en, ge], "_"), 1, 0, false)
1211- let av = calculateAssetId(gf)
1212- let gg = toBase58String(av)
1213- $Tuple2([IntegerEntry(cm(), (gd + 1)), gf, StringEntry(cn(co), gg), StringEntry(au(gg), aT), StringEntry(ct(co), aT), IntegerEntry(ay(gg), 0), IntegerEntry(cr(gg, aT), 0), ScriptTransfer(ga, 1, av)], $Tuple2(gg, ge))
1214- }
1215-
1216-
1217-func gh (aT,gi,gj) = if (!(sigVerify_8Kb(gi, gj, bX)))
1237+func gj (gk,gl) = {
1238+ let ba = toString(gk)
1239+ let gm = eP(toBigInt(gl))
1240+ let gn = valueOrElse(getInteger(cs()), (cr + 1))
1241+ let cu = toString(gn)
1242+ let eY = toInt((gm % cl))
1243+ let ex = eW(gm, eY)
1244+ let go = ah[eY]
1245+ let gp = Issue(cK(cu, "S"), makeString([cu, "S", ex, go], "_"), 1, 0, false)
1246+ let aD = calculateAssetId(gp)
1247+ let gq = toBase58String(aD)
1248+ $Tuple2([IntegerEntry(cs(), (gn + 1)), gp, StringEntry(ct(cu), gq), StringEntry(aC(gq), ba), StringEntry(cz(cu), ba), IntegerEntry(aG(gq), 0), IntegerEntry(cx(gq, ba), 0), ScriptTransfer(gk, 1, aD)], $Tuple2(gq, go))
1249+ }
1250+
1251+
1252+func gr (ba,gs,gt) = if (!(sigVerify_8Kb(gs, gt, cd)))
12181253 then throw("signature does not match")
12191254 else {
1220- let do = split(toUtf8String(gi), ";")
1221- let gk = split(do[0], "|")
1222- let gl = split(gk[cA], "_")
1223- let gm = parseIntValue(gl[0])
1224- let gn = parseIntValue(gl[1])
1225- let go = split(do[1], ":")
1226- let gp = go[0]
1227- let gq = parseIntValue(gk[cB])
1228- if (if ((gq > (lastBlock.timestamp + bZ)))
1255+ let du = split(toUtf8String(gs), ";")
1256+ let gu = split(du[0], "|")
1257+ let gv = split(gu[cG], "_")
1258+ let gw = parseIntValue(gv[0])
1259+ let gx = parseIntValue(gv[1])
1260+ let gy = split(du[1], ":")
1261+ let gz = gy[0]
1262+ let gA = parseIntValue(gu[cH])
1263+ if (if ((gA > (lastBlock.timestamp + cf)))
12291264 then true
1230- else ((lastBlock.timestamp - bZ) > gq))
1231- then throw(((("signature outdated: logTime=" + toString(gq)) + ", bcTime=") + toString(lastBlock.timestamp)))
1265+ else ((lastBlock.timestamp - cf) > gA))
1266+ then throw(((("signature outdated: logTime=" + toString(gA)) + ", bcTime=") + toString(lastBlock.timestamp)))
12321267 else {
1233- let gr = go[1]
1234- let gs = valueOrElse(getString(at(aT)), "")
1235- if ((gs != gr))
1236- then throw(((("Tx ids don't match! In state: " + gs) + ", in msg: ") + gr))
1268+ let gB = gy[1]
1269+ let gC = valueOrElse(getString(aB(ba)), "")
1270+ if ((gC != gB))
1271+ then throw(((("Tx ids don't match! In state: " + gC) + ", in msg: ") + gB))
12371272 else {
1238- let p = valueOrErrorMessage(getString(aN(aT)), "You don't have a duck staked")
1239- let gt = aQ(p)
1240- let gu = J(valueOrElse(getInteger(r(p)), 0))
1241- let gv = valueOrElse(getInteger(gt), gu)
1242- if ((gv != gm))
1243- then throw(((("oldHealth=" + toString(gv)) + " from state does not match one from flight log=") + toString(gm)))
1244- else if ((0 >= gm))
1273+ let q = valueOrErrorMessage(getString(aV(ba)), "You don't have a duck staked")
1274+ let gD = p(q)
1275+ let gE = L(valueOrElse(getInteger(t(q)), 0))
1276+ let gF = valueOrElse(getInteger(gD), gE)
1277+ if ((gF != gw))
1278+ then throw(((("oldHealth=" + toString(gF)) + " from state does not match one from flight log=") + toString(gw)))
1279+ else if ((0 >= gw))
12451280 then throw("You can't fly with zero health")
12461281 else {
1247- let gw = if ((size(gk) > cC))
1248- then gk[cC]
1282+ let gG = if ((size(gu) > cI))
1283+ then gu[cI]
12491284 else ""
1250- let gx = if ((size(gk) > cD))
1251- then gk[cD]
1285+ let gH = if ((size(gu) > cJ))
1286+ then gu[cJ]
12521287 else ""
1253- let gy = if (if ((gn > 0))
1254- then (gw == "$")
1288+ let gI = if (if ((gx > 0))
1289+ then (gG == "$")
12551290 else false)
1256- then bR(invoke(bC, "sendUsdtPrize", [aT], nil))
1291+ then bX(invoke(bJ, "sendUsdtPrize", [ba], nil))
12571292 else 0
1258- $Tuple5(gn, p, gy, gp, gx)
1293+ $Tuple5(gx, q, gI, gz, gH)
12591294 }
12601295 }
12611296 }
12621297 }
12631298
12641299
1265-func gz (ga,gb,gi,gj) = {
1266- let aT = toString(ga)
1267- let eP = gh(aT, gi, gj)
1268- let gt = aQ(eP._2)
1269- let eT = aO(eP._2)
1270- let fE = eS(eT)
1271- let gA = split(fE[ar], "_")
1272- let gB = makeString(cX(true, gA, cd), "_")
1273- let dt = de(fE[as], eP._5)
1274- if ((0 >= eP._1))
1275- then $Tuple3([IntegerEntry(gt, 0), StringEntry(eT, makeString([fE[ap], fE[aq], fE[ar], dt], ":"))], "", 0)
1276- else {
1277- let gC = fZ(ga, gb)
1278- let gg = gC._2._1
1279- $Tuple3((((gC._1 :+ StringEntry(aP(eP._2), makeString([gC._2._2, "L", gg], "_"))) :+ IntegerEntry(gt, eP._1)) :+ StringEntry(eT, makeString([fE[ap], fE[aq], gB, dt], ":"))), gg, eP._3)
1280- }
1281- }
1282-
1283-
1284-func gD (aF,gE) = {
1285- let fn = valueOrElse(getInteger(ay(aF)), 0)
1286- let gF = valueOrElse(getInteger(az(R, aF)), 0)
1287- let gG = (fn / 6)
1288- let gH = (fn / 7)
1289- ((T + fraction(T, ((fn + gG) + (2 * gH)), 5)) + fraction(T, gF, (gE * 5)))
1290- }
1291-
1292-
1293-func gI (b,gJ,gK) = {
1294- let gL = if ((gJ == cx))
1295- then $Tuple2(gK, valueOrElse(getString(aN(b)), ""))
1296- else {
1297- let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked")
1298- let gM = valueOrElse(getString(aP(p)), W)
1299- let gN = split(value(gM), "_")
1300- if ((gN[aV] != "L"))
1301- then throw((("Duck location type is " + gN[aV]) + ", but should be L"))
1302- else $Tuple2(gN[aW], p)
1303- }
1304- let aF = gL._1
1305- let gO = gL._2
1306- let gP = value(assetInfo(fromBase58String(aF)))
1307- let gQ = ax(aF)
1308- let gR = valueOrErrorMessage(getInteger(gQ), (("Land " + gP.name) + " is not staked"))
1309- let gS = valueOrErrorMessage(getString(au(aF)), (("NFT " + gP.name) + " is orphaned"))
1310- if ((gS != b))
1311- then throw((P + " is not yours"))
1312- else {
1313- let gT = split(gP.description, "_")
1314- $Tuple4(gO, aF, gT, gR)
1315- }
1316- }
1317-
1318-
1319-func gU (b,fA,gJ,gK) = if ((0 > fA))
1300+func gJ (gk,gl,gs,gt) = {
1301+ let ba = toString(gk)
1302+ let eZ = gr(ba, gs, gt)
1303+ let gD = p(eZ._2)
1304+ let fd = aW(eZ._2)
1305+ let fO = fc(fd)
1306+ let gK = split(fO[az], "_")
1307+ let gL = makeString(dd(true, gK, cj), "_")
1308+ let dz = dk(fO[aA], eZ._5)
1309+ if ((0 >= eZ._1))
1310+ then $Tuple3([IntegerEntry(gD, 0), StringEntry(fd, makeString([fO[ax], fO[ay], fO[az], dz], ":"))], "", 0)
1311+ else {
1312+ let gM = gj(gk, gl)
1313+ let gq = gM._2._1
1314+ $Tuple3((((gM._1 :+ StringEntry(aX(eZ._2), makeString([gM._2._2, "L", gq], "_"))) :+ IntegerEntry(gD, eZ._1)) :+ StringEntry(fd, makeString([fO[ax], fO[ay], gL, dz], ":"))), gq, eZ._3)
1315+ }
1316+ }
1317+
1318+
1319+func gN (aN,gO) = {
1320+ let fx = valueOrElse(getInteger(aG(aN)), 0)
1321+ let gP = valueOrElse(getInteger(aH(Y, aN)), 0)
1322+ let gQ = (fx / 6)
1323+ let gR = (fx / 7)
1324+ ((aa + fraction(aa, ((fx + gQ) + (2 * gR)), 5)) + fraction(aa, gP, (gO * 5)))
1325+ }
1326+
1327+
1328+func gS (b,gT,gU) = {
1329+ let gV = if ((gT == cD))
1330+ then $Tuple2(gU, valueOrElse(getString(aV(b)), ""))
1331+ else {
1332+ let q = valueOrErrorMessage(getString(aV(b)), "You don't have a duck staked")
1333+ let gW = valueOrElse(getString(aX(q)), ad)
1334+ let gX = split(value(gW), "_")
1335+ if ((gX[bc] != "L"))
1336+ then throw((("Duck location type is " + gX[bc]) + ", but should be L"))
1337+ else $Tuple2(gX[bd], q)
1338+ }
1339+ let aN = gV._1
1340+ let gY = gV._2
1341+ let gZ = value(assetInfo(fromBase58String(aN)))
1342+ let ha = aF(aN)
1343+ let hb = valueOrErrorMessage(getInteger(ha), (("Land " + gZ.name) + " is not staked"))
1344+ let hc = valueOrErrorMessage(getString(aC(aN)), (("NFT " + gZ.name) + " is orphaned"))
1345+ if ((hc != b))
1346+ then throw((W + " is not yours"))
1347+ else {
1348+ let hd = split(gZ.description, "_")
1349+ $Tuple4(gY, aN, hd, hb)
1350+ }
1351+ }
1352+
1353+
1354+func he (b,fK,gT,gU) = if ((0 > fK))
13201355 then throw("Negative amount")
13211356 else {
1322- let dN = gI(b, gJ, gK)
1323- let bU = dN._3[bI]
1324- let eg = em(dN._3[bJ])
1325- let eq = (lastBlock.timestamp - dN._4)
1326- if ((0 > eq))
1327- then throw(((("Saved timestamp is in future, saved = " + toString(dN._4)) + ", current = ") + toString(lastBlock.timestamp)))
1357+ let dX = gS(b, gT, gU)
1358+ let ca = dX._3[bO]
1359+ let eq = ew(dX._3[bP])
1360+ let eA = (lastBlock.timestamp - dX._4)
1361+ if ((0 > eA))
1362+ then throw(((("Saved timestamp is in future, saved = " + toString(dX._4)) + ", current = ") + toString(lastBlock.timestamp)))
13281363 else {
1329- let gE = bT(bU)
1330- let gV = gD(dN._2, gE)
1331- let gW = fraction(eq, (gV * gE), U)
1332- if ((fA > gW))
1333- then throw(((("Not enough resources, available = " + toString(gW)) + ", requested = ") + toString(fA)))
1364+ let gO = bZ(ca)
1365+ let hf = gN(dX._2, gO)
1366+ let hg = fraction(eA, (hf * gO), ab)
1367+ if ((fK > hg))
1368+ then throw(((("Not enough resources, available = " + toString(hg)) + ", requested = ") + toString(fK)))
13341369 else {
1335- let gX = fraction((gW - fA), U, (gV * gE))
1336- let gY = (lastBlock.timestamp - gX)
1337- let fm = (gE / bj)
1338- let ey = eu(eg, (eq - gX), fm, gV)
1339- let fl = aE(dN._2)
1340- let fn = valueOrElse(getInteger(ay(dN._2)), 0)
1341- let eY = fk(fl, fm, fn)
1342- let ft = split(eY[ak], "_")
1343- let ez = parseIntValue(ft[an])
1344- if (if ((gJ == cx))
1345- then (fA > ez)
1370+ let hh = fraction((hg - fK), ab, (hf * gO))
1371+ let hi = (lastBlock.timestamp - hh)
1372+ let fw = (gO / bq)
1373+ let eI = eE(eq, (eA - hh), fw, hf)
1374+ let fv = aM(dX._2)
1375+ let fx = valueOrElse(getInteger(aG(dX._2)), 0)
1376+ let fi = fu(fv, fw, fx)
1377+ let fD = split(fi[as], "_")
1378+ let eJ = parseIntValue(fD[av])
1379+ if (if ((gT == cD))
1380+ then (fK > eJ)
13461381 else false)
1347- then throw((("Only " + toString(ez)) + " space left in warehouse"))
1382+ then throw((("Only " + toString(eJ)) + " space left in warehouse"))
13481383 else {
1349- let eT = aO(dN._1)
1350- let fE = eS(eT)
1351- let ex = split(fE[aq], "_")
1352- let ew = split(eY[ah], "_")
1353- let gZ = if ((gJ == cx))
1354- then $Tuple4(eo(ew, eg, (eq - gX), fm, gV), fE[aq], (parseIntValue(ft[am]) + ey._2), (parseIntValue(ft[an]) - ey._2))
1355- else if ((gJ == cy))
1356- then $Tuple4(eY[ah], eo(ex, eg, (eq - gX), fm, gV), parseIntValue(ft[am]), parseIntValue(ft[an]))
1384+ let fd = aW(dX._1)
1385+ let fO = fc(fd)
1386+ let eH = split(fO[ay], "_")
1387+ let eG = split(fi[ap], "_")
1388+ let hj = if ((gT == cD))
1389+ then $Tuple4(ey(eG, eq, (eA - hh), fw, hf), fO[ay], (parseIntValue(fD[au]) + eI._2), (parseIntValue(fD[av]) - eI._2))
1390+ else if ((gT == cE))
1391+ then $Tuple4(fi[ap], ey(eH, eq, (eA - hh), fw, hf), parseIntValue(fD[au]), parseIntValue(fD[av]))
13571392 else {
1358- let ha = ev(ew, ex, ey, ez)
1359- let hb = min([parseIntValue(ft[an]), ey._2])
1360- $Tuple4(ha._1, ha._2, (parseIntValue(ft[am]) + hb), (parseIntValue(ft[an]) - hb))
1393+ let hk = eF(eG, eH, eI, eJ)
1394+ let hl = min([parseIntValue(fD[av]), eI._2])
1395+ $Tuple4(hk._1, hk._2, (parseIntValue(fD[au]) + hl), (parseIntValue(fD[av]) - hl))
13611396 }
1362- let hc = gZ._1
1363- let hd = gZ._2
1364- let he = gZ._3
1365- let hf = gZ._4
1366- $Tuple5([IntegerEntry(ax(dN._2), gY), IntegerEntry(aB(P, dN._2, b), gY)], eT, [fE[ap], hd, fE[ar], fE[as]], fl, [eY[ag], hc, eY[ai], eY[aj], makeString([ft[al], toString(he), toString(hf), ft[ao]], "_")])
1397+ let hm = hj._1
1398+ let hn = hj._2
1399+ let ho = hj._3
1400+ let hp = hj._4
1401+ $Tuple5([IntegerEntry(aF(dX._2), hi), IntegerEntry(aJ(W, dX._2, b), hi)], fd, [fO[ax], hn, fO[az], fO[aA]], fv, [fi[ao], hm, fi[aq], fi[ar], makeString([fD[at], toString(ho), toString(hp), fD[aw]], "_")])
13671402 }
13681403 }
13691404 }
13701405 }
13711406
13721407
1373-func hg (b,aF,gE,gJ) = {
1374- let gQ = ax(aF)
1375- let gR = value(getInteger(gQ))
1376- let gW = (fraction((lastBlock.timestamp - gR), gD(aF, gE), U) * gE)
1377- gU(b, gW, gJ, aF)
1378- }
1379-
1380-
1381-func hh (cY,ga,hi,aF) = {
1382- let b = toString(ga)
1383- let dN = gI(b, cz, aF)
1384- let gE = bT(dN._3[bI])
1385- let hj = ay(dN._2)
1386- let hk = valueOrElse(getInteger(hj), 0)
1387- if ((hk >= 3))
1408+func hq (b,aN,gO,gT) = {
1409+ let ha = aF(aN)
1410+ let hb = value(getInteger(ha))
1411+ let hg = (fraction((lastBlock.timestamp - hb), gN(aN, gO), ab) * gO)
1412+ he(b, hg, gT, aN)
1413+ }
1414+
1415+
1416+func hr (de,gk,hs,aN) = {
1417+ let b = toString(gk)
1418+ let dX = gS(b, cF, aN)
1419+ let gO = bZ(dX._3[bO])
1420+ let ht = aG(dX._2)
1421+ let hu = valueOrElse(getInteger(ht), 0)
1422+ if ((hu >= 3))
13881423 then throw("Currently max infrastructure level = 3")
13891424 else {
1390- let O = (hk + 1)
1391- let hl = fraction(cc, (gE * O), bj)
1392- if (if (!(cY))
1393- then (hi != hl)
1425+ let Q = (hu + 1)
1426+ let hv = fraction(ci, (gO * Q), bq)
1427+ if (if (!(de))
1428+ then (hs != hv)
13941429 else false)
1395- then throw(("Payment attached should be " + toString(hl)))
1430+ then throw(("Payment attached should be " + toString(hv)))
13961431 else {
1397- let eT = aO(dN._1)
1398- let fE = eS(eT)
1399- let gA = split(fE[ar], "_")
1400- let hm = fraction(be, (gE * O), bj)
1401- let gB = makeString(cX(cY, gA, hm), "_")
1402- let hn = hg(b, dN._2, gE, cz)
1403- let ho = hn._5
1404- let hp = eV(ho[ag])
1405- let hq = makeString([split(ho[ag], "_")[0], toString(O)], "_")
1406- let hr = eV(hq)
1407- let ft = split(ho[ak], "_")
1408- let hs = makeString([ft[al], ft[am], toString(((parseIntValue(ft[an]) + hr) - hp)), toString(hr)], "_")
1409- $Tuple3(([IntegerEntry(hj, O), IntegerEntry(cr(dN._2, b), O), StringEntry(eT, makeString([fE[ap], hn._3[aq], gB, fE[as]], ":")), StringEntry(hn._4, makeString([hq, ho[ah], ho[ai], ho[aj], hs], ":"))] ++ hn._1), O, hm)
1432+ let fd = aW(dX._1)
1433+ let fO = fc(fd)
1434+ let gK = split(fO[az], "_")
1435+ let hw = fraction(bl, (gO * Q), bq)
1436+ let gL = makeString(dd(de, gK, hw), "_")
1437+ let hx = hq(b, dX._2, gO, cF)
1438+ let hy = hx._5
1439+ let hz = ff(hy[ao])
1440+ let hA = makeString([split(hy[ao], "_")[0], toString(Q)], "_")
1441+ let hB = ff(hA)
1442+ let fD = split(hy[as], "_")
1443+ let hC = makeString([fD[at], fD[au], toString(((parseIntValue(fD[av]) + hB) - hz)), toString(hB)], "_")
1444+ $Tuple3(([IntegerEntry(ht, Q), IntegerEntry(cx(dX._2, b), Q), StringEntry(fd, makeString([fO[ax], hx._3[ay], gL, fO[aA]], ":")), StringEntry(hx._4, makeString([hA, hy[ap], hy[aq], hy[ar], hC], ":"))] ++ hx._1), Q, hw)
14101445 }
14111446 }
14121447 }
14131448
14141449
1415-func ht (p,hu) = if (!(aZ))
1450+func hD (q,hE) = if (!(bg))
14161451 then $Tuple2(nil, 0)
14171452 else {
1418- let hv = r(p)
1419- let hw = q(p)
1420- let I = valueOrElse(getInteger(bD, hw), 0)
1421- let N = (I + hu)
1422- let hx = L(valueOrElse(getInteger(bD, hv), 0), N)
1423- let hy = s(p)
1424- $Tuple2([IntegerEntry(hv, hx[0]), IntegerEntry(hw, N), IntegerEntry(hy, (valueOrElse(getInteger(hy), 0) + hx[1]))], N)
1425- }
1426-
1427-
1428-func hz (b,hu) = if (!(aZ))
1453+ let hF = t(q)
1454+ let hG = s(q)
1455+ let K = valueOrElse(getInteger(S, hG), 0)
1456+ let P = (K + hE)
1457+ let hH = N(valueOrElse(getInteger(S, hF), 0), P)
1458+ let hI = u(q)
1459+ $Tuple2([IntegerEntry(hF, hH[0]), IntegerEntry(hG, P), IntegerEntry(hI, (valueOrElse(getInteger(hI), 0) + hH[1]))], P)
1460+ }
1461+
1462+
1463+func hJ (b,hE) = if (!(bg))
14291464 then $Tuple2(nil, 0)
14301465 else {
1431- let hv = v(b)
1432- let hw = u(b)
1433- let I = valueOrElse(getInteger(bD, hw), 0)
1434- let N = (I + hu)
1435- let hx = L(valueOrElse(getInteger(bD, hv), 0), N)
1436- let hy = w(b)
1437- $Tuple2([IntegerEntry(hv, hx[0]), IntegerEntry(hw, N), IntegerEntry(hy, (valueOrElse(getInteger(hy), 0) + hx[1]))], N)
1438- }
1439-
1440-
1441-func hA (b) = {
1442- let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked")
1443- let hB = aI(b)
1444- let hC = getString(hB)
1445- if (!(isDefined(hC)))
1466+ let hF = x(b)
1467+ let hG = w(b)
1468+ let K = valueOrElse(getInteger(S, hG), 0)
1469+ let P = (K + hE)
1470+ let hH = N(valueOrElse(getInteger(S, hF), 0), P)
1471+ let hI = y(b)
1472+ $Tuple2([IntegerEntry(hF, hH[0]), IntegerEntry(hG, P), IntegerEntry(hI, (valueOrElse(getInteger(hI), 0) + hH[1]))], P)
1473+ }
1474+
1475+
1476+func hK (b) = {
1477+ let q = valueOrErrorMessage(getString(aV(b)), "You don't have a duck staked")
1478+ let hL = aQ(b)
1479+ let hM = getString(hL)
1480+ if (!(isDefined(hM)))
14461481 then throw("You are not eligible for ONBOARD artifact")
14471482 else {
1448- let hD = aK(b)
1449- let hE = getString(hD)
1450- if (isDefined(hE))
1451- then throw(("You already used your ONBOARD artifact on duck " + value(hE)))
1483+ let hN = aS(b)
1484+ let hO = getString(hN)
1485+ if (isDefined(hO))
1486+ then throw(("You already used your ONBOARD artifact on duck " + value(hO)))
14521487 else {
1453- let hF = aJ(p)
1454- let hG = getString(hF)
1455- if (isDefined(hG))
1456- then throw(((("The duck " + p) + " already got points from ONBOARD artifact from user ") + value(hG)))
1457- else ([StringEntry(hD, p), StringEntry(hF, b)] ++ ht(p, F)._1)
1488+ let hP = aR(q)
1489+ let hQ = getString(hP)
1490+ if (isDefined(hQ))
1491+ then throw(((("The duck " + q) + " already got points from ONBOARD artifact from user ") + value(hQ)))
1492+ else ([StringEntry(hN, q), StringEntry(hP, b)] ++ hD(q, H)._1)
14581493 }
14591494 }
14601495 }
14611496
14621497
1463-func hH (b,gK) = {
1464- let dN = gI(b, cz, gK)
1465- let aF = dN._2
1466- let gE = bT(dN._3[bI])
1467- let hI = az(R, aF)
1468- if ((valueOrElse(getInteger(hI), 0) > 0))
1498+func hR (b,gU) = {
1499+ let dX = gS(b, cF, gU)
1500+ let aN = dX._2
1501+ let gO = bZ(dX._3[bO])
1502+ let hS = aH(Y, aN)
1503+ if ((valueOrElse(getInteger(hS), 0) > 0))
14691504 then throw("Presale artifact is already activated")
1470- else if ((parseIntValue(dN._3[bH]) > cl))
1471- then throw((((P + " ") + aF) + " is not eligible for presale artifact"))
1505+ else if ((parseIntValue(dX._3[bN]) > cr))
1506+ then throw((((W + " ") + aN) + " is not eligible for presale artifact"))
14721507 else {
1473- let hn = hg(b, aF, gE, cz)
1474- ((((hn._1 :+ IntegerEntry(hI, gE)) :+ IntegerEntry(cs(R, aF, b), gE)) :+ StringEntry(hn._2, makeString(hn._3, ":"))) :+ StringEntry(hn._4, makeString(hn._5, ":")))
1508+ let hx = hq(b, aN, gO, cF)
1509+ ((((hx._1 :+ IntegerEntry(hS, gO)) :+ IntegerEntry(cy(Y, aN, b), gO)) :+ StringEntry(hx._2, makeString(hx._3, ":"))) :+ StringEntry(hx._4, makeString(hx._5, ":")))
14751510 }
14761511 }
14771512
14781513
1479-func hJ (hK,O,hL,b,hM,gb,hN) = {
1480- let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked")
1481- func hO (cL,aF) = {
1482- let gP = value(assetInfo(fromBase58String(aF)))
1483- let gQ = ax(aF)
1484- let gR = valueOrErrorMessage(getInteger(gQ), (("NFT " + gP.name) + " is not staked"))
1485- let gS = valueOrErrorMessage(getString(au(aF)), (("NFT " + gP.name) + " is orphaned"))
1486- if ((gS != b))
1487- then throw((P + " is not yours"))
1514+func hT (hU,Q,hV,b,hW,gl,hX) = {
1515+ let q = valueOrErrorMessage(getString(aV(b)), "You don't have a duck staked")
1516+ func hY (cR,aN) = {
1517+ let gZ = value(assetInfo(fromBase58String(aN)))
1518+ let ha = aF(aN)
1519+ let hb = valueOrErrorMessage(getInteger(ha), (("NFT " + gZ.name) + " is not staked"))
1520+ let hc = valueOrErrorMessage(getString(aC(aN)), (("NFT " + gZ.name) + " is orphaned"))
1521+ if ((hc != b))
1522+ then throw((W + " is not yours"))
14881523 else {
1489- let gT = split(gP.description, "_")
1490- let ge = gT[bK]
1491- if (if ((cL._3 != ""))
1492- then (cL._3 != ge)
1524+ let hd = split(gZ.description, "_")
1525+ let go = hd[bQ]
1526+ if (if ((cR._3 != ""))
1527+ then (cR._3 != go)
14931528 else false)
14941529 then throw("Lands should be on the same continent to merge")
14951530 else {
1496- let bU = gT[bI]
1497- let hP = cL._1
1498- let ek = valueOrErrorMessage(indexOf(hP, bU), "You haven't passed all the lands needed")
1499- let hQ = (take(hP, ek) + drop(hP, (ek + 1)))
1500- let gE = bT(bU)
1501- let hR = (cL._2 + valueOrElse(getInteger(az(R, aF)), 0))
1502- let fn = valueOrElse(getInteger(ay(aF)), 0)
1503- let hS = {
1504- let bc = bU
1505- if (("S" == bc))
1531+ let ca = hd[bO]
1532+ let hZ = cR._1
1533+ let eu = valueOrErrorMessage(indexOf(hZ, ca), "You haven't passed all the lands needed")
1534+ let ia = (take(hZ, eu) + drop(hZ, (eu + 1)))
1535+ let gO = bZ(ca)
1536+ let ib = (cR._2 + valueOrElse(getInteger(aH(Y, aN)), 0))
1537+ let fx = valueOrElse(getInteger(aG(aN)), 0)
1538+ let ic = {
1539+ let bj = ca
1540+ if (("S" == bj))
15061541 then 3
1507- else if (("M" == bc))
1542+ else if (("M" == bj))
15081543 then 4
1509- else if (("L" == bc))
1544+ else if (("L" == bj))
15101545 then 5
1511- else if (("XL" == bc))
1546+ else if (("XL" == bj))
15121547 then 6
15131548 else throw("Only S, M, L, XL can merge")
15141549 }
1515- if ((fn != hS))
1550+ if ((fx != ic))
15161551 then throw("All lands should be maxed to merge")
15171552 else {
1518- let co = gT[bH]
1519- let eg = em(gT[bJ])
1520- let eq = (lastBlock.timestamp - gR)
1521- if ((0 > eq))
1522- then throw(((("Saved timestamp is in future, saved = " + toString(gR)) + ", current = ") + toString(lastBlock.timestamp)))
1553+ let cu = hd[bN]
1554+ let eq = ew(hd[bP])
1555+ let eA = (lastBlock.timestamp - hb)
1556+ if ((0 > eA))
1557+ then throw(((("Saved timestamp is in future, saved = " + toString(hb)) + ", current = ") + toString(lastBlock.timestamp)))
15231558 else {
1524- let gV = gD(aF, gE)
1525- let fm = (gE / bj)
1526- let hd = eo(split(cL._4, "_"), eg, eq, fm, gV)
1527- let cV = ee(split(cL._6, "_"), eg, fm, -1)
1528- let hT = cL._7
1529- let bB = indexOf(hT, aF)
1530- if (!(isDefined(bB)))
1531- then throw(("Your staked lands don't contain " + aF))
1559+ let hf = gN(aN, gO)
1560+ let fw = (gO / bq)
1561+ let hn = ey(split(cR._4, "_"), eq, eA, fw, hf)
1562+ let db = eo(split(cR._6, "_"), eq, fw, -1)
1563+ let id = cR._7
1564+ let bI = indexOf(id, aN)
1565+ if (!(isDefined(bI)))
1566+ then throw(("Your staked lands don't contain " + aN))
15321567 else {
1533- let hU = aw(aF)
1534- let hV = valueOrElse(getString(hU), "")
1535- $Tuple8(hQ, hR, ge, hd, (((((((((((((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(hU)) :+ DeleteEntry(cp(hV))) :+ Burn(fromBase58String(aF), 1)), cV, removeByIndex(hT, value(bB)), (cL._8 + gE))
1568+ let ie = aE(aN)
1569+ let if = valueOrElse(getString(ie), "")
1570+ $Tuple8(ia, ib, go, hn, (((((((((((((cR._5 :+ DeleteEntry(aF(aN))) :+ DeleteEntry(aJ(W, aN, b))) :+ DeleteEntry(ct(cu))) :+ DeleteEntry(aC(aN))) :+ DeleteEntry(aG(aN))) :+ DeleteEntry(cx(aN, b))) :+ DeleteEntry(aH(Y, aN))) :+ DeleteEntry(cy(Y, aN, b))) :+ DeleteEntry(cz(cu))) :+ DeleteEntry(aM(aN))) :+ DeleteEntry(ie)) :+ DeleteEntry(cv(if))) :+ Burn(fromBase58String(aN), 1)), db, removeByIndex(id, value(bI)), (cR._8 + gO))
15361571 }
15371572 }
15381573 }
15391574 }
15401575 }
15411576 }
15421577
1543- let eT = aO(p)
1544- let fE = eS(eT)
1545- let hW = valueOrElse(getString(bL()), "0_0_0_0_0_0")
1546- let hX = bM(b)
1547- let hY = getString(hX)
1548- let hZ = if (isDefined(hY))
1549- then split_51C(value(hY), "_")
1578+ let fd = aW(q)
1579+ let fO = fc(fd)
1580+ let ig = valueOrElse(getString(bR()), "0_0_0_0_0_0")
1581+ let ih = bS(b)
1582+ let ii = getString(ih)
1583+ let ij = if (isDefined(ii))
1584+ then split_51C(value(ii), "_")
15501585 else nil
1551- let cW = {
1552- let cN = hM
1553- let cO = size(cN)
1554- let cP = $Tuple8(hL, 0, "", fE[aq], nil, hW, hZ, 0)
1555- func cQ (cR,cS) = if ((cS >= cO))
1556- then cR
1557- else hO(cR, cN[cS])
1558-
1559- func cT (cR,cS) = if ((cS >= cO))
1560- then cR
1586+ let dc = {
1587+ let cT = hW
1588+ let cU = size(cT)
1589+ let cV = $Tuple8(hV, 0, "", fO[ay], nil, ig, ij, 0)
1590+ func cW (cX,cY) = if ((cY >= cU))
1591+ then cX
1592+ else hY(cX, cT[cY])
1593+
1594+ func cZ (cX,cY) = if ((cY >= cU))
1595+ then cX
15611596 else throw("List size exceeds 5")
15621597
1563- cT(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5)
1564- }
1565- let ge = cW._3
1566- let eO = valueOrErrorMessage(indexOf(aa, ge), ("Unknown continent: " + ge))
1567- let en = eM(eF(toBigInt(gb)), eO)
1568- let gd = valueOrElse(getInteger(cm()), (cl + 1))
1569- let ia = toString(gd)
1570- let gf = Issue(cE(ia, hK), makeString([ia, hK, en, ge], "_"), 1, 0, false)
1571- let av = calculateAssetId(gf)
1572- let ib = toBase58String(av)
1573- let gB = makeString(cX((hN > 0), split(fE[ar], "_"), hN), "_")
1574- let ic = bN(b)
1575- let id = valueOrElse(getInteger(ic), 0)
1576- $Tuple2((((((((((((((((cW._5 :+ (if ((size(cW._7) > 0))
1577- then StringEntry(hX, makeString_11C(cW._7, "_"))
1578- else DeleteEntry(hX))) :+ IntegerEntry(ic, if ((cW._8 > id))
1598+ cZ(cW(cW(cW(cW(cW(cV, 0), 1), 2), 3), 4), 5)
1599+ }
1600+ let go = dc._3
1601+ let eY = valueOrErrorMessage(indexOf(ah, go), ("Unknown continent: " + go))
1602+ let ex = eW(eP(toBigInt(gl)), eY)
1603+ let gn = valueOrElse(getInteger(cs()), (cr + 1))
1604+ let ik = toString(gn)
1605+ let gp = Issue(cK(ik, hU), makeString([ik, hU, ex, go], "_"), 1, 0, false)
1606+ let aD = calculateAssetId(gp)
1607+ let il = toBase58String(aD)
1608+ let gL = makeString(dd((hX > 0), split(fO[az], "_"), hX), "_")
1609+ let im = bT(b)
1610+ let in = valueOrElse(getInteger(im), 0)
1611+ $Tuple2((((((((((((((((dc._5 :+ (if ((size(dc._7) > 0))
1612+ then StringEntry(ih, makeString_11C(dc._7, "_"))
1613+ else DeleteEntry(ih))) :+ IntegerEntry(im, if ((dc._8 > in))
15791614 then 0
1580- else (id - cW._8))) :+ IntegerEntry(cm(), (gd + 1))) :+ gf) :+ StringEntry(cn(ia), ib)) :+ StringEntry(au(ib), b)) :+ StringEntry(ct(ia), b)) :+ IntegerEntry(az(R, ib), cW._2)) :+ IntegerEntry(cs(R, ib, b), cW._2)) :+ IntegerEntry(ay(ib), O)) :+ IntegerEntry(cr(ib, b), O)) :+ StringEntry(eT, makeString([fE[ap], cW._4, gB, fE[as]], ":"))) :+ StringEntry(bL(), cW._6)) :+ StringEntry(aP(p), makeString([ge, "L", ib], "_"))) :+ ScriptTransfer(addressFromStringValue(b), 1, av)), ib)
1581- }
1582-
1583-
1584-func ie (b,hM,gb) = hJ("M", 3, "SSSS", b, hM, gb, 0)
1585-
1586-
1587-func if (b,hM,gb,cY,hi) = {
1588- let hl = (cc * 4)
1589- if (if (!(cY))
1590- then (hi != hl)
1615+ else (in - dc._8))) :+ IntegerEntry(cs(), (gn + 1))) :+ gp) :+ StringEntry(ct(ik), il)) :+ StringEntry(aC(il), b)) :+ StringEntry(cz(ik), b)) :+ IntegerEntry(aH(Y, il), dc._2)) :+ IntegerEntry(cy(Y, il, b), dc._2)) :+ IntegerEntry(aG(il), Q)) :+ IntegerEntry(cx(il, b), Q)) :+ StringEntry(fd, makeString([fO[ax], dc._4, gL, fO[aA]], ":"))) :+ StringEntry(bR(), dc._6)) :+ StringEntry(aX(q), makeString([go, "L", il], "_"))) :+ ScriptTransfer(addressFromStringValue(b), 1, aD)), il)
1616+ }
1617+
1618+
1619+func io (b,hW,gl) = hT("M", 3, "SSSS", b, hW, gl, 0)
1620+
1621+
1622+func ip (b,hW,gl,de,hs) = {
1623+ let hv = (ci * 4)
1624+ if (if (!(de))
1625+ then (hs != hv)
15911626 else false)
1592- then throw(("Payment attached should be " + toString(hl)))
1593- else hJ("L", 4, "SMM", b, hM, gb, (be * 4))
1594- }
1595-
1596-
1597-func ig (b,hM,gb,cY,hi) = {
1598- let hl = (cc * 47)
1599- if (if (!(cY))
1600- then (hi != hl)
1627+ then throw(("Payment attached should be " + toString(hv)))
1628+ else hT("L", 4, "SMM", b, hW, gl, (bl * 4))
1629+ }
1630+
1631+
1632+func iq (b,hW,gl,de,hs) = {
1633+ let hv = (ci * 47)
1634+ if (if (!(de))
1635+ then (hs != hv)
16011636 else false)
1602- then throw(("Payment attached should be " + toString(hl)))
1603- else hJ("XL", 5, "SSSML", b, hM, gb, (be * 47))
1604- }
1605-
1606-
1607-func ih (b,hM,gb,cY,hi) = {
1608- let hl = (cc * 54)
1609- if (if (!(cY))
1610- then (hi != hl)
1637+ then throw(("Payment attached should be " + toString(hv)))
1638+ else hT("XL", 5, "SSSML", b, hW, gl, (bl * 47))
1639+ }
1640+
1641+
1642+func ir (b,hW,gl,de,hs) = {
1643+ let hv = (ci * 54)
1644+ if (if (!(de))
1645+ then (hs != hv)
16111646 else false)
1612- then throw(("Payment attached should be " + toString(hl)))
1613- else hJ("XXL", 6, "LXL", b, hM, gb, (be * 54))
1614- }
1615-
1616-
1617-func ii (cY,b,hi,hM,gb) = {
1618- let ij = {
1619- let bc = size(hM)
1620- if ((4 == bc))
1621- then ie(b, hM, gb)
1622- else if ((3 == bc))
1623- then if(b, hM, gb, cY, hi)
1624- else if ((5 == bc))
1625- then ig(b, hM, gb, cY, hi)
1626- else if ((2 == bc))
1627- then ih(b, hM, gb, cY, hi)
1647+ then throw(("Payment attached should be " + toString(hv)))
1648+ else hT("XXL", 6, "LXL", b, hW, gl, (bl * 54))
1649+ }
1650+
1651+
1652+func is (de,b,hs,hW,gl) = {
1653+ let it = {
1654+ let bj = size(hW)
1655+ if ((4 == bj))
1656+ then io(b, hW, gl)
1657+ else if ((3 == bj))
1658+ then ip(b, hW, gl, de, hs)
1659+ else if ((5 == bj))
1660+ then iq(b, hW, gl, de, hs)
1661+ else if ((2 == bj))
1662+ then ir(b, hW, gl, de, hs)
16281663 else throw("Unknown merge")
16291664 }
1630- ij
1631- }
1632-
1633-
1634-func ik (ek) = if (if ((ek.originCaller != bC))
1635- then valueOrElse(getBoolean(aR()), false)
1665+ it
1666+ }
1667+
1668+
1669+func iu (eu) = if (if ((eu.originCaller != bJ))
1670+ then valueOrElse(getBoolean(aY()), false)
16361671 else false)
16371672 then throw("Contracts are under maintenance")
1638- else StringEntry(at(toString(ek.originCaller)), toBase58String(ek.transactionId))
1639-
1640-
1641-@Callable(ek)
1642-func constructorV1 (il) = if ((ek.caller != this))
1673+ else StringEntry(aB(toString(eu.originCaller)), toBase58String(eu.transactionId))
1674+
1675+
1676+@Callable(eu)
1677+func constructorV1 (iv) = if ((eu.caller != this))
16431678 then throw("Permission denied")
1644- else [StringEntry(bw(), il)]
1645-
1646-
1647-
1648-@Callable(ek)
1649-func setBlocked (im) = if ((ek.caller != this))
1679+ else [StringEntry(bD(), iv)]
1680+
1681+
1682+
1683+@Callable(eu)
1684+func setBlocked (iw) = if ((eu.caller != this))
16501685 then throw("permission denied")
1651- else [BooleanEntry(aR(), im)]
1652-
1653-
1654-
1655-@Callable(ek)
1686+ else [BooleanEntry(aY(), iw)]
1687+
1688+
1689+
1690+@Callable(eu)
16561691 func stakeLand () = {
1657- let in = ik(ek)
1658- if ((size(ek.payments) != 1))
1692+ let ix = iu(eu)
1693+ if ((size(eu.payments) != 1))
16591694 then throw("Exactly one payment required")
16601695 else {
1661- let io = value(ek.payments[0])
1662- let av = value(io.assetId)
1663- let bp = toString(ek.caller)
1664- if ((io.amount != 1))
1665- then throw((("NFT " + P) + " token should be attached as payment"))
1696+ let iy = value(eu.payments[0])
1697+ let aD = value(iy.assetId)
1698+ let bw = toString(eu.caller)
1699+ if ((iy.amount != 1))
1700+ then throw((("NFT " + W) + " token should be attached as payment"))
16661701 else {
1667- let gP = value(assetInfo(av))
1668- if ((gP.issuer != this))
1702+ let gZ = value(assetInfo(aD))
1703+ if ((gZ.issuer != this))
16691704 then throw("Unknown issuer of token")
1670- else if (!(contains(gP.name, P)))
1671- then throw((("Only NFT " + P) + " tokens are accepted"))
1705+ else if (!(contains(gZ.name, W)))
1706+ then throw((("Only NFT " + W) + " tokens are accepted"))
16721707 else {
1673- let ip = drop(gP.name, 4)
1674- let co = if (contains(ip, "XXL"))
1675- then dropRight(ip, 3)
1676- else if (contains(ip, "XL"))
1677- then dropRight(ip, 2)
1678- else dropRight(ip, 1)
1679- if (!(isDefined(parseInt(co))))
1680- then throw(("Cannot parse land number from " + gP.name))
1708+ let iz = drop(gZ.name, 4)
1709+ let cu = if (contains(iz, "XXL"))
1710+ then dropRight(iz, 3)
1711+ else if (contains(iz, "XL"))
1712+ then dropRight(iz, 2)
1713+ else dropRight(iz, 1)
1714+ if (!(isDefined(parseInt(cu))))
1715+ then throw(("Cannot parse land number from " + gZ.name))
16811716 else {
1682- let aF = toBase58String(av)
1683- let gQ = ax(aF)
1684- if (isDefined(getInteger(gQ)))
1685- then throw((("NFT " + gP.name) + " is already staked"))
1717+ let aN = toBase58String(aD)
1718+ let ha = aF(aN)
1719+ if (isDefined(getInteger(ha)))
1720+ then throw((("NFT " + gZ.name) + " is already staked"))
16861721 else {
1687- let gT = split(gP.description, "_")
1688- let eg = em(gT[bJ])
1689- let gE = bT(gT[bI])
1690- let cV = el(eg, (gE / bj), 1)
1691- let gF = valueOrElse(getInteger(az(R, aF)), 0)
1692- let hX = bM(bp)
1693- let hY = getString(hX)
1694- let hT = if (isDefined(hY))
1695- then split_51C(value(hY), "_")
1722+ let hd = split(gZ.description, "_")
1723+ let eq = ew(hd[bP])
1724+ let gO = bZ(hd[bO])
1725+ let db = ev(eq, (gO / bq), 1)
1726+ let gP = valueOrElse(getInteger(aH(Y, aN)), 0)
1727+ let ih = bS(bw)
1728+ let ii = getString(ih)
1729+ let id = if (isDefined(ii))
1730+ then split_51C(value(ii), "_")
16961731 else nil
1697- if (containsElement(hT, aF))
1698- then throw(("Your staked lands already contain " + aF))
1732+ if (containsElement(id, aN))
1733+ then throw(("Your staked lands already contain " + aN))
16991734 else {
1700- let fn = valueOrElse(getInteger(ay(aF)), 0)
1701- let ic = bN(bp)
1702- let iq = valueOrElse(getInteger(ic), 0)
1703- let ir = bR(invoke(bG, "onStakeUnstakeLand", [bp], nil))
1704- $Tuple2([IntegerEntry(gQ, lastBlock.timestamp), IntegerEntry(aB(P, aF, bp), lastBlock.timestamp), StringEntry(hX, makeString_11C((hT :+ aF), "_")), IntegerEntry(ic, (iq + gE)), StringEntry(au(aF), bp), StringEntry(ct(co), bp), IntegerEntry(cs(R, aF, bp), gF), IntegerEntry(cr(aF, bp), fn), StringEntry(bL(), cV), in], ir)
1735+ let fx = valueOrElse(getInteger(aG(aN)), 0)
1736+ let im = bT(bw)
1737+ let iA = valueOrElse(getInteger(im), 0)
1738+ let iB = bX(invoke(bM, "onStakeUnstakeLand", [bw], nil))
1739+ $Tuple2([IntegerEntry(ha, lastBlock.timestamp), IntegerEntry(aJ(W, aN, bw), lastBlock.timestamp), StringEntry(ih, makeString_11C((id :+ aN), "_")), IntegerEntry(im, (iA + gO)), StringEntry(aC(aN), bw), StringEntry(cz(cu), bw), IntegerEntry(cy(Y, aN, bw), gP), IntegerEntry(cx(aN, bw), fx), StringEntry(bR(), db), ix], iB)
17051740 }
17061741 }
17071742 }
17081743 }
17091744 }
17101745 }
17111746 }
17121747
17131748
17141749
1715-@Callable(ek)
1716-func unstakeLand (gK) = {
1717- let in = ik(ek)
1718- if ((size(ek.payments) != 0))
1750+@Callable(eu)
1751+func unstakeLand (gU) = {
1752+ let ix = iu(eu)
1753+ if ((size(eu.payments) != 0))
17191754 then throw("No payments required")
17201755 else {
1721- let b = toString(ek.caller)
1722- let dN = gI(b, cy, gK)
1723- let aF = dN._2
1724- let hX = bM(b)
1725- let eg = em(dN._3[bJ])
1726- let gE = bT(dN._3[bI])
1727- let cV = el(eg, (gE / bj), -1)
1728- let hn = hg(b, aF, gE, cy)
1729- let hT = split_51C(valueOrElse(getString(hX), ""), "_")
1730- let bB = indexOf(hT, aF)
1731- if (!(isDefined(bB)))
1732- then throw(("Your staked lands don't contain " + aF))
1756+ let b = toString(eu.caller)
1757+ let dX = gS(b, cE, gU)
1758+ let aN = dX._2
1759+ let ih = bS(b)
1760+ let eq = ew(dX._3[bP])
1761+ let gO = bZ(dX._3[bO])
1762+ let db = ev(eq, (gO / bq), -1)
1763+ let hx = hq(b, aN, gO, cE)
1764+ let id = split_51C(valueOrElse(getString(ih), ""), "_")
1765+ let bI = indexOf(id, aN)
1766+ if (!(isDefined(bI)))
1767+ then throw(("Your staked lands don't contain " + aN))
17331768 else {
1734- let is = lastBlock.timestamp
1735- let it = valueOrElse(getInteger(bF, aS(b)), 0)
1736- if ((it >= is))
1737- then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(it)))
1769+ let iC = lastBlock.timestamp
1770+ let iD = valueOrElse(getInteger(bL, aZ(b)), 0)
1771+ if ((iD >= iC))
1772+ then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(iD)))
17381773 else {
1739- let iu = (valueOrElse(getInteger(bG, a(b)), 0) + bf)
1740- if ((iu > is))
1741- then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString(iu)))
1774+ let iE = (valueOrElse(getInteger(bM, a(b)), 0) + bm)
1775+ if ((iE > iC))
1776+ then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString(iE)))
17421777 else {
1743- let ic = bN(b)
1744- let id = valueOrElse(getInteger(ic), 0)
1745- let iv = if ((gE > id))
1778+ let im = bT(b)
1779+ let in = valueOrElse(getInteger(im), 0)
1780+ let iF = if ((gO > in))
17461781 then 0
1747- else (id - gE)
1748- let ir = bR(invoke(bG, "onStakeUnstakeLand", [b], nil))
1749- $Tuple2([ScriptTransfer(ek.caller, 1, fromBase58String(aF)), DeleteEntry(ax(aF)), DeleteEntry(aB(P, aF, b)), StringEntry(bL(), cV), StringEntry(hn._2, makeString(hn._3, ":")), if ((size(hT) > 1))
1750- then StringEntry(hX, makeString_11C(removeByIndex(hT, value(bB)), "_"))
1751- else DeleteEntry(hX), IntegerEntry(ic, iv), in], ir)
1782+ else (in - gO)
1783+ let iB = bX(invoke(bM, "onStakeUnstakeLand", [b], nil))
1784+ $Tuple2([ScriptTransfer(eu.caller, 1, fromBase58String(aN)), DeleteEntry(aF(aN)), DeleteEntry(aJ(W, aN, b)), StringEntry(bR(), db), StringEntry(hx._2, makeString(hx._3, ":")), if ((size(id) > 1))
1785+ then StringEntry(ih, makeString_11C(removeByIndex(id, value(bI)), "_"))
1786+ else DeleteEntry(ih), IntegerEntry(im, iF), ix], iB)
17521787 }
17531788 }
17541789 }
17551790 }
17561791 }
17571792
17581793
17591794
1760-@Callable(ek)
1795+@Callable(eu)
17611796 func stakeDuck () = {
1762- let in = ik(ek)
1763- if ((size(ek.payments) != 1))
1797+ let ix = iu(eu)
1798+ if ((size(eu.payments) != 1))
17641799 then throw("Exactly one payment required")
17651800 else {
1766- let io = value(ek.payments[0])
1767- let av = value(io.assetId)
1768- let bp = toString(ek.caller)
1769- if ((io.amount != 1))
1770- then throw((("NFT " + Q) + " token should be attached as payment"))
1801+ let iy = value(eu.payments[0])
1802+ let aD = value(iy.assetId)
1803+ let bw = toString(eu.caller)
1804+ if ((iy.amount != 1))
1805+ then throw((("NFT " + X) + " token should be attached as payment"))
17711806 else {
1772- let gP = value(assetInfo(av))
1773- if (if ((gP.issuer != bV))
1774- then (gP.issuer != bW)
1807+ let gZ = value(assetInfo(aD))
1808+ if (if ((gZ.issuer != cb))
1809+ then (gZ.issuer != cc)
17751810 else false)
1776- then throw((("Unknown issuer of " + Q) + " token"))
1777- else if (!(contains(gP.name, Q)))
1778- then throw((("Only NFT " + Q) + " tokens are accepted"))
1811+ then throw((("Unknown issuer of " + X) + " token"))
1812+ else if (!(contains(gZ.name, X)))
1813+ then throw((("Only NFT " + X) + " tokens are accepted"))
17791814 else {
1780- let iw = toBase58String(av)
1781- let gQ = ax(iw)
1782- if (isDefined(getInteger(gQ)))
1783- then throw((("NFT " + gP.name) + " is already staked"))
1784- else if (isDefined(getString(aN(bp))))
1785- then throw(("You already staked one duck: " + gP.name))
1815+ let iG = toBase58String(aD)
1816+ let ha = aF(iG)
1817+ if (isDefined(getInteger(ha)))
1818+ then throw((("NFT " + gZ.name) + " is already staked"))
1819+ else if (isDefined(getString(aV(bw))))
1820+ then throw(("You already staked one duck: " + gZ.name))
17861821 else {
1787- let ix = aP(iw)
1788- let iy = getString(ix)
1789- let eT = aO(iw)
1790- let iz = getString(eT)
1791- let gt = aQ(iw)
1792- let gu = J(valueOrElse(getInteger(r(iw)), 0))
1793- let iA = valueOrElse(getInteger(gt), gu)
1794- ([IntegerEntry(gQ, lastBlock.timestamp), IntegerEntry(aB(Q, toBase58String(av), bp), lastBlock.timestamp), StringEntry(aM(iw), bp), StringEntry(aN(bp), iw)] ++ (if (isDefined(iy))
1822+ let iH = aX(iG)
1823+ let iI = getString(iH)
1824+ let fd = aW(iG)
1825+ let iJ = getString(fd)
1826+ let gD = p(iG)
1827+ let gE = L(valueOrElse(getInteger(t(iG)), 0))
1828+ let iK = valueOrElse(getInteger(gD), gE)
1829+ ([IntegerEntry(ha, lastBlock.timestamp), IntegerEntry(aJ(X, toBase58String(aD), bw), lastBlock.timestamp), StringEntry(aU(iG), bw), StringEntry(aV(bw), iG)] ++ (if (isDefined(iI))
17951830 then nil
1796- else ([StringEntry(ix, W)] ++ (if (isDefined(iz))
1831+ else ([StringEntry(iH, ad)] ++ (if (isDefined(iJ))
17971832 then nil
1798- else (([StringEntry(eT, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(gt, iA)) :+ in)))))
1833+ else (([StringEntry(fd, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(gD, iK)) :+ ix)))))
17991834 }
18001835 }
18011836 }
18021837 }
18031838 }
18041839
18051840
18061841
1807-@Callable(ek)
1808-func unstakeDuck (iw) = {
1809- let in = ik(ek)
1810- if ((size(ek.payments) != 0))
1842+@Callable(eu)
1843+func unstakeDuck (iG) = {
1844+ let ix = iu(eu)
1845+ if ((size(eu.payments) != 0))
18111846 then throw("No payments required")
18121847 else {
1813- let av = fromBase58String(iw)
1814- let bp = toString(ek.caller)
1815- let gP = value(assetInfo(av))
1816- let gQ = ax(toBase58String(av))
1817- if (!(isDefined(getInteger(gQ))))
1818- then throw((("NFT " + gP.name) + " is not staked"))
1819- else if (!(isDefined(getString(aN(bp)))))
1820- then throw((("The duck " + gP.name) + " is not staked"))
1848+ let aD = fromBase58String(iG)
1849+ let bw = toString(eu.caller)
1850+ let gZ = value(assetInfo(aD))
1851+ let ha = aF(toBase58String(aD))
1852+ if (!(isDefined(getInteger(ha))))
1853+ then throw((("NFT " + gZ.name) + " is not staked"))
1854+ else if (!(isDefined(getString(aV(bw)))))
1855+ then throw((("The duck " + gZ.name) + " is not staked"))
18211856 else {
1822- let gS = valueOrErrorMessage(getString(aM(toBase58String(av))), (("NFT " + gP.name) + " is orphaned"))
1823- if ((gS != bp))
1857+ let hc = valueOrErrorMessage(getString(aU(toBase58String(aD))), (("NFT " + gZ.name) + " is orphaned"))
1858+ if ((hc != bw))
18241859 then throw("Staked NFT is not yours")
18251860 else {
1826- let gt = aQ(iw)
1827- let gu = J(valueOrElse(getInteger(r(iw)), 0))
1828- let iB = valueOrElse(getInteger(gt), gu)
1829- if ((gu > iB))
1830- then throw((("Please heal your duck to " + toString(gu)) + "hp before unstaking"))
1831- else [ScriptTransfer(ek.caller, 1, av), DeleteEntry(gQ), DeleteEntry(gt), DeleteEntry(aP(iw)), DeleteEntry(aM(iw)), DeleteEntry(aB(Q, iw, bp)), DeleteEntry(aN(bp)), in]
1861+ let gD = p(iG)
1862+ let gE = L(valueOrElse(getInteger(t(iG)), 0))
1863+ let V = valueOrElse(getInteger(gD), gE)
1864+ if ((gE > V))
1865+ then throw((("Please heal your duck to " + toString(gE)) + "hp before unstaking"))
1866+ else [ScriptTransfer(eu.caller, 1, aD), DeleteEntry(ha), DeleteEntry(gD), DeleteEntry(aX(iG)), DeleteEntry(aU(iG)), DeleteEntry(aJ(X, iG, bw)), DeleteEntry(aV(bw)), ix]
18321867 }
18331868 }
18341869 }
18351870 }
18361871
18371872
18381873
1839-@Callable(ek)
1840-func claimRes (fA,iC) = {
1841- let in = ik(ek)
1842- if ((size(ek.payments) != 0))
1874+@Callable(eu)
1875+func claimRes (fK,iL) = {
1876+ let ix = iu(eu)
1877+ if ((size(eu.payments) != 0))
18431878 then throw("No payments required")
18441879 else {
1845- let b = toString(ek.originCaller)
1846- let dd = gU(b, fA, cy, iC)
1847- let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked")
1848- $Tuple2(((((dd._1 ++ ht(p, fraction(x, fA, bi))._1) :+ StringEntry(dd._2, makeString(dd._3, ":"))) :+ StringEntry(dd._4, makeString(dd._5, ":"))) :+ in), dd._3[aq])
1849- }
1850- }
1851-
1852-
1853-
1854-@Callable(ek)
1855-func claimResToWH (fA,iC) = {
1856- let in = ik(ek)
1857- if ((size(ek.payments) != 0))
1880+ let b = toString(eu.originCaller)
1881+ let dj = he(b, fK, cE, iL)
1882+ let q = valueOrErrorMessage(getString(aV(b)), "You don't have a duck staked")
1883+ $Tuple2(((((dj._1 ++ hD(q, fraction(z, fK, bp))._1) :+ StringEntry(dj._2, makeString(dj._3, ":"))) :+ StringEntry(dj._4, makeString(dj._5, ":"))) :+ ix), dj._3[ay])
1884+ }
1885+ }
1886+
1887+
1888+
1889+@Callable(eu)
1890+func claimResToWH (fK,iL) = {
1891+ let ix = iu(eu)
1892+ if ((size(eu.payments) != 0))
18581893 then throw("No payments required")
18591894 else {
1860- let b = toString(ek.originCaller)
1861- let dd = gU(b, fA, cx, iC)
1862- $Tuple2(((((dd._1 ++ hz(b, fraction(x, fA, bi))._1) :+ StringEntry(dd._2, makeString(dd._3, ":"))) :+ StringEntry(dd._4, makeString(dd._5, ":"))) :+ in), dd._5[ah])
1863- }
1864- }
1865-
1866-
1867-
1868-@Callable(ek)
1869-func flight (gi,gj) = {
1870- let in = ik(ek)
1871- if ((size(ek.payments) != 0))
1895+ let b = toString(eu.originCaller)
1896+ let dj = he(b, fK, cD, iL)
1897+ $Tuple2(((((dj._1 ++ hJ(b, fraction(z, fK, bp))._1) :+ StringEntry(dj._2, makeString(dj._3, ":"))) :+ StringEntry(dj._4, makeString(dj._5, ":"))) :+ ix), dj._5[ap])
1898+ }
1899+ }
1900+
1901+
1902+
1903+@Callable(eu)
1904+func flight (gs,gt) = {
1905+ let ix = iu(eu)
1906+ if ((size(eu.payments) != 0))
18721907 then throw("No payments required")
18731908 else {
1874- let aT = toString(ek.caller)
1875- let eP = gh(aT, gi, gj)
1876- let p = eP._2
1877- let ix = aP(p)
1878- let gM = valueOrElse(getString(ix), W)
1879- if ((eP._4 == gM))
1909+ let ba = toString(eu.caller)
1910+ let eZ = gr(ba, gs, gt)
1911+ let q = eZ._2
1912+ let iH = aX(q)
1913+ let gW = valueOrElse(getString(iH), ad)
1914+ if ((eZ._4 == gW))
18801915 then throw("You can't fly to the same location")
18811916 else {
1882- let eT = aO(p)
1883- let fE = eS(eT)
1884- let dt = de(fE[as], eP._5)
1885- $Tuple2(([StringEntry(ix, if ((eP._1 > 0))
1886- then eP._4
1887- else gM), StringEntry(eT, makeString([fE[ap], fE[aq], fE[ar], dt], ":")), IntegerEntry(aQ(p), eP._1), in] ++ ht(p, if ((eP._1 > 0))
1888- then y
1889- else z)._1), eP._3)
1917+ let fd = aW(q)
1918+ let fO = fc(fd)
1919+ let dz = dk(fO[aA], eZ._5)
1920+ $Tuple2(([StringEntry(iH, if ((eZ._1 > 0))
1921+ then eZ._4
1922+ else gW), StringEntry(fd, makeString([fO[ax], fO[ay], fO[az], dz], ":")), IntegerEntry(p(q), eZ._1), ix] ++ hD(q, if ((eZ._1 > 0))
1923+ then A
1924+ else B)._1), eZ._3)
18901925 }
18911926 }
18921927 }
18931928
18941929
18951930
1896-@Callable(ek)
1897-func heal (iD,iE,iF) = {
1898- let in = ik(ek)
1899- if (if (if ((0 > iD))
1931+@Callable(eu)
1932+func heal (iM,iN,iO) = {
1933+ let ix = iu(eu)
1934+ if (if (if ((0 > iM))
19001935 then true
1901- else (0 > iE))
1936+ else (0 > iN))
19021937 then true
1903- else (0 > iF))
1938+ else (0 > iO))
19041939 then throw("Quantity cannot be negative")
19051940 else {
1906- let p = valueOrErrorMessage(getString(aN(toString(ek.caller))), "You don't have a duck staked")
1907- let iG = [iD, iE, iF]
1908- let gt = aQ(p)
1909- let gu = J(valueOrElse(getInteger(r(p)), 0))
1910- let iH = valueOrElse(getInteger(gt), gu)
1911- if ((iH >= gu))
1912- then throw((("HP should be < " + toString(gu)) + " to heal"))
1941+ let q = valueOrErrorMessage(getString(aV(toString(eu.caller))), "You don't have a duck staked")
1942+ let iP = [iM, iN, iO]
1943+ let gD = p(q)
1944+ let gE = L(valueOrElse(getInteger(t(q)), 0))
1945+ let iQ = valueOrElse(getInteger(gD), gE)
1946+ if ((iQ >= gE))
1947+ then throw((("HP should be < " + toString(gE)) + " to heal"))
19131948 else {
1914- let eT = aO(p)
1915- let fE = eS(eT)
1916- let iI = if ((fE[as] == ""))
1949+ let fd = aW(q)
1950+ let fO = fc(fd)
1951+ let iR = if ((fO[aA] == ""))
19171952 then nil
1918- else split(fE[as], "_")
1919- func iJ (cL,iK) = {
1920- let bS = cL._2
1921- let eG = if ((size(iI) > bS))
1922- then parseIntValue(iI[bS])
1953+ else split(fO[aA], "_")
1954+ func iS (cR,iT) = {
1955+ let bY = cR._2
1956+ let eQ = if ((size(iR) > bY))
1957+ then parseIntValue(iR[bY])
19231958 else 0
1924- if ((3 > bS))
1959+ if ((3 > bY))
19251960 then {
1926- let iL = iG[bS]
1927- if ((iL > eG))
1928- then throw(((("You have only " + toString(eG)) + " of ") + Z[bS]))
1929- else $Tuple3((cL._1 :+ toString((eG - iL))), (bS + 1), (cL._3 + (bY[bS] * iL)))
1961+ let iU = iP[bY]
1962+ if ((iU > eQ))
1963+ then throw(((("You have only " + toString(eQ)) + " of ") + ag[bY]))
1964+ else $Tuple3((cR._1 :+ toString((eQ - iU))), (bY + 1), (cR._3 + (ce[bY] * iU)))
19301965 }
1931- else $Tuple3((cL._1 :+ toString(eG)), (bS + 1), cL._3)
1966+ else $Tuple3((cR._1 :+ toString(eQ)), (bY + 1), cR._3)
19321967 }
19331968
1934- let dd = {
1935- let cN = ac
1936- let cO = size(cN)
1937- let cP = $Tuple3(nil, 0, 0)
1938- func cQ (cR,cS) = if ((cS >= cO))
1939- then cR
1940- else iJ(cR, cN[cS])
1941-
1942- func cT (cR,cS) = if ((cS >= cO))
1943- then cR
1969+ let dj = {
1970+ let cT = aj
1971+ let cU = size(cT)
1972+ let cV = $Tuple3(nil, 0, 0)
1973+ func cW (cX,cY) = if ((cY >= cU))
1974+ then cX
1975+ else iS(cX, cT[cY])
1976+
1977+ func cZ (cX,cY) = if ((cY >= cU))
1978+ then cX
19441979 else throw("List size exceeds 50")
19451980
1946- 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)
1981+ cZ(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cV, 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)
19471982 }
1948- let iM = min([gu, (iH + dd._3)])
1949- $Tuple2(([IntegerEntry(gt, iM), StringEntry(eT, makeString_2C([fE[ap], fE[aq], fE[ar], makeString(dd._1, "_")], ":")), in] ++ ht(p, (G * ((iD + iE) + iF)))._1), iM)
1983+ let iV = min([gE, (iQ + dj._3)])
1984+ $Tuple2(([IntegerEntry(gD, iV), StringEntry(fd, makeString_2C([fO[ax], fO[ay], fO[az], makeString(dj._1, "_")], ":")), ix] ++ hD(q, (I * ((iM + iN) + iO)))._1), iV)
19501985 }
19511986 }
19521987 }
19531988
19541989
19551990
1956-@Callable(ek)
1991+@Callable(eu)
19571992 func healES () = {
1958- let in = ik(ek)
1959- if ((size(ek.payments) != 1))
1993+ let ix = iu(eu)
1994+ if ((size(eu.payments) != 1))
19601995 then throw("Exactly one payment required")
19611996 else {
1962- let io = value(ek.payments[0])
1963- if ((io.assetId != bb))
1997+ let iy = value(eu.payments[0])
1998+ if ((iy.assetId != bi))
19641999 then throw("Allowed USDT payment only!")
19652000 else {
1966- let p = valueOrErrorMessage(getString(aN(toString(ek.caller))), "You don't have a duck staked")
1967- let gt = aQ(p)
1968- let gu = J(valueOrElse(getInteger(r(p)), 0))
1969- let iH = valueOrElse(getInteger(gt), gu)
1970- if ((iH > 0))
2001+ let q = valueOrErrorMessage(getString(aV(toString(eu.caller))), "You don't have a duck staked")
2002+ let gD = p(q)
2003+ let gE = L(valueOrElse(getInteger(t(q)), 0))
2004+ let iQ = valueOrElse(getInteger(gD), gE)
2005+ if ((iQ > 0))
19712006 then throw("HP should be 0 to call Emergency Service")
19722007 else {
1973- let eT = aO(p)
1974- let fE = eS(eT)
1975- let iI = if ((fE[as] == ""))
2008+ let fd = aW(q)
2009+ let fO = fc(fd)
2010+ let iR = if ((fO[aA] == ""))
19762011 then nil
1977- else split(fE[as], "_")
1978- let iN = if ((size(iI) > 0))
1979- then parseIntValue(iI[0])
2012+ else split(fO[aA], "_")
2013+ let iW = if ((size(iR) > 0))
2014+ then parseIntValue(iR[0])
19802015 else 0
1981- let iO = if ((size(iI) > 1))
1982- then parseIntValue(iI[1])
2016+ let iX = if ((size(iR) > 1))
2017+ then parseIntValue(iR[1])
19832018 else 0
1984- let iP = if ((size(iI) > 2))
1985- then parseIntValue(iI[2])
2019+ let iY = if ((size(iR) > 2))
2020+ then parseIntValue(iR[2])
19862021 else 0
1987- if (if (if ((iN > 0))
2022+ if (if (if ((iW > 0))
19882023 then true
1989- else (iO > 0))
2024+ else (iX > 0))
19902025 then true
1991- else (iP > 0))
2026+ else (iY > 0))
19922027 then throw("You have to use own Medical Kit")
19932028 else {
1994- let iQ = getString(bE, aU())
1995- let iR = if (isDefined(iQ))
1996- then split(value(iQ), "_")
2029+ let iZ = getString(bK, bb())
2030+ let ja = if (isDefined(iZ))
2031+ then split(value(iZ), "_")
19972032 else nil
1998- let iS = if ((size(iR) > 0))
1999- then parseIntValue(iR[0])
2033+ let jb = if ((size(ja) > 0))
2034+ then parseIntValue(ja[0])
20002035 else 0
2001- if ((0 >= iS))
2036+ if ((0 >= jb))
20022037 then throw("There are no Medical Kits L1 at Emergency Service storage")
20032038 else {
2004- let iM = (iH + bY[0])
2005- let iT = makeString([toString((iS - 1)), removeByIndex(iR, 0)], "_")
2006- let aY = split(ac[0], "_")
2007- let iU = aX(aY)
2008- let iV = fraction((iU * Y), X, (10 * af))
2009- if ((io.amount != iV))
2010- then throw(("Payment attached should be " + toString(iV)))
2039+ let iV = (iQ + ce[0])
2040+ let jc = makeString([toString((jb - 1)), removeByIndex(ja, 0)], "_")
2041+ let bf = split(aj[0], "_")
2042+ let jd = be(bf)
2043+ let je = fraction((jd * af), ae, (10 * an))
2044+ if ((iy.amount != je))
2045+ then throw(("Payment attached should be " + toString(je)))
20112046 else {
2012- let dd = bO(invoke(bE, "updateEsStorage", [iT], [AttachedPayment(bb, iV)]))
2013- $Tuple2(([IntegerEntry(gt, iM), in] ++ ht(p, A)._1), dd)
2047+ let dj = bU(invoke(bK, "updateEsStorage", [jc], [AttachedPayment(bi, je)]))
2048+ $Tuple2(([IntegerEntry(gD, iV), ix] ++ hD(q, C)._1), dj)
20142049 }
20152050 }
20162051 }
20172052 }
20182053 }
20192054 }
20202055 }
20212056
20222057
20232058
2024-@Callable(ek)
2025-func updateBackpack (p,iW) = if ((ek.caller != bE))
2059+@Callable(eu)
2060+func updateBackpack (q,jf) = if ((eu.caller != bK))
20262061 then throw("permission denied")
2027- else $Tuple2([StringEntry(aO(p), iW)], iW)
2028-
2029-
2030-
2031-@Callable(ek)
2062+ else $Tuple2([StringEntry(aW(q), jf)], jf)
2063+
2064+
2065+
2066+@Callable(eu)
20322067 func buySLand () = {
2033- let in = ik(ek)
2034- if ((size(ek.payments) != 1))
2068+ let ix = iu(eu)
2069+ if ((size(eu.payments) != 1))
20352070 then throw("Exactly one payment required")
20362071 else {
2037- let io = value(ek.payments[0])
2038- if ((io.assetId != bb))
2072+ let iy = value(eu.payments[0])
2073+ if ((iy.assetId != bi))
20392074 then throw("Allowed USDT payment only!")
2040- else if ((io.amount != ce))
2041- then throw(("Payment attached should be " + toString(ce)))
2075+ else if ((iy.amount != ck))
2076+ then throw(("Payment attached should be " + toString(ck)))
20422077 else {
2043- let dd = fZ(ek.caller, ek.transactionId)
2044- $Tuple2((((dd._1 :+ ScriptTransfer(bE, io.amount, bb)) ++ hz(toString(ek.caller), C)._1) :+ in), dd._2._1)
2078+ let dj = gj(eu.caller, eu.transactionId)
2079+ $Tuple2((((dj._1 :+ ScriptTransfer(bK, iy.amount, bi)) ++ hJ(toString(eu.caller), E)._1) :+ ix), dj._2._1)
20452080 }
20462081 }
20472082 }
20482083
20492084
20502085
2051-@Callable(ek)
2052-func expedition (gi,gj) = {
2053- let in = ik(ek)
2054- if ((size(ek.payments) != 0))
2086+@Callable(eu)
2087+func expedition (gs,gt) = {
2088+ let ix = iu(eu)
2089+ if ((size(eu.payments) != 0))
20552090 then throw("No payments required")
20562091 else {
2057- let dd = gz(ek.caller, ek.transactionId, gi, gj)
2058- let p = valueOrErrorMessage(getString(aN(toString(ek.caller))), "You don't have a duck staked")
2059- $Tuple2(((dd._1 ++ ht(p, C)._1) :+ in), $Tuple2(dd._2, dd._3))
2060- }
2061- }
2062-
2063-
2064-
2065-@Callable(ek)
2066-func upgradeInfra (aF) = {
2067- let in = ik(ek)
2068- if ((size(ek.payments) != 0))
2092+ let dj = gJ(eu.caller, eu.transactionId, gs, gt)
2093+ let q = valueOrErrorMessage(getString(aV(toString(eu.caller))), "You don't have a duck staked")
2094+ $Tuple2(((dj._1 ++ hD(q, E)._1) :+ ix), $Tuple2(dj._2, dj._3))
2095+ }
2096+ }
2097+
2098+
2099+
2100+@Callable(eu)
2101+func upgradeInfra (aN) = {
2102+ let ix = iu(eu)
2103+ if ((size(eu.payments) != 0))
20692104 then throw("No payments required")
20702105 else {
2071- let dd = hh(true, ek.caller, 0, aF)
2072- let p = valueOrErrorMessage(getString(aN(toString(ek.caller))), "You don't have a duck staked")
2073- $Tuple2(((dd._1 :+ in) ++ ht(p, fraction(D, dd._3, bi))._1), dd._2)
2074- }
2075- }
2076-
2077-
2078-
2079-@Callable(ek)
2080-func upgradeInfraUsdt (aF) = if ((ek.caller != this))
2106+ let dj = hr(true, eu.caller, 0, aN)
2107+ let q = valueOrErrorMessage(getString(aV(toString(eu.caller))), "You don't have a duck staked")
2108+ $Tuple2(((dj._1 :+ ix) ++ hD(q, fraction(F, dj._3, bp))._1), dj._2)
2109+ }
2110+ }
2111+
2112+
2113+
2114+@Callable(eu)
2115+func upgradeInfraUsdt (aN) = if ((eu.caller != this))
20812116 then throw("Permission denied")
20822117 else {
2083- let in = ik(ek)
2084- if ((size(ek.payments) != 1))
2118+ let ix = iu(eu)
2119+ if ((size(eu.payments) != 1))
20852120 then throw("Exactly one payment required")
20862121 else {
2087- let io = value(ek.payments[0])
2088- if ((io.assetId != bb))
2122+ let iy = value(eu.payments[0])
2123+ if ((iy.assetId != bi))
20892124 then throw("Allowed USDT payment only!")
20902125 else {
2091- let dd = hh(false, ek.caller, io.amount, aF)
2092- $Tuple2(((dd._1 :+ ScriptTransfer(bE, io.amount, bb)) :+ in), dd._2)
2126+ let dj = hr(false, eu.caller, iy.amount, aN)
2127+ $Tuple2(((dj._1 :+ ScriptTransfer(bK, iy.amount, bi)) :+ ix), dj._2)
20932128 }
20942129 }
20952130 }
20962131
20972132
20982133
2099-@Callable(ek)
2100-func activateArtifact (iX,iY) = {
2101- let in = ik(ek)
2102- if ((size(ek.payments) != 0))
2134+@Callable(eu)
2135+func activateArtifact (jg,jh) = {
2136+ let ix = iu(eu)
2137+ if ((size(eu.payments) != 0))
21032138 then throw("No payments required")
21042139 else {
2105- let b = toString(ek.caller)
2106- let dd = {
2107- let bc = iX
2108- if (("PRESALE" == bc))
2109- then hH(b, iY)
2110- else if (("ONBOARD" == bc))
2111- then hA(b)
2140+ let b = toString(eu.caller)
2141+ let dj = {
2142+ let bj = jg
2143+ if (("PRESALE" == bj))
2144+ then hR(b, jh)
2145+ else if (("ONBOARD" == bj))
2146+ then hK(b)
21122147 else throw("Unknown artifact")
21132148 }
2114- (dd :+ in)
2115- }
2116- }
2117-
2118-
2119-
2120-@Callable(ek)
2121-func mergeLands (hM) = {
2122- let in = ik(ek)
2123- if ((size(ek.payments) != 0))
2149+ (dj :+ ix)
2150+ }
2151+ }
2152+
2153+
2154+
2155+@Callable(eu)
2156+func mergeLands (hW) = {
2157+ let ix = iu(eu)
2158+ if ((size(eu.payments) != 0))
21242159 then throw("No payments required")
21252160 else {
2126- let dd = ii(true, toString(ek.caller), 0, hM, ek.transactionId)
2127- $Tuple2(((dd._1 :+ in) ++ hz(toString(ek.caller), E)._1), dd._2)
2128- }
2129- }
2130-
2131-
2132-
2133-@Callable(ek)
2134-func mergeLandsUsdt (hM) = {
2135- let in = ik(ek)
2136- if ((size(ek.payments) != 1))
2161+ let dj = is(true, toString(eu.caller), 0, hW, eu.transactionId)
2162+ $Tuple2(((dj._1 :+ ix) ++ hJ(toString(eu.caller), G)._1), dj._2)
2163+ }
2164+ }
2165+
2166+
2167+
2168+@Callable(eu)
2169+func mergeLandsUsdt (hW) = {
2170+ let ix = iu(eu)
2171+ if ((size(eu.payments) != 1))
21372172 then throw("Exactly one payment required")
21382173 else {
2139- let io = value(ek.payments[0])
2140- if ((io.assetId != bb))
2174+ let iy = value(eu.payments[0])
2175+ if ((iy.assetId != bi))
21412176 then throw("Allowed USDT payment only!")
21422177 else {
2143- let dd = ii(false, toString(ek.caller), io.amount, hM, ek.transactionId)
2144- $Tuple2(((dd._1 :+ ScriptTransfer(bE, io.amount, bb)) :+ in), dd._2)
2178+ let dj = is(false, toString(eu.caller), iy.amount, hW, eu.transactionId)
2179+ $Tuple2(((dj._1 :+ ScriptTransfer(bK, iy.amount, bi)) :+ ix), dj._2)
21452180 }
21462181 }
21472182 }
21482183
21492184
21502185
2151-@Callable(ek)
2152-func cargoExchange (iZ,aF) = {
2153- let in = ik(ek)
2154- if ((size(ek.payments) != 0))
2186+@Callable(eu)
2187+func cargoExchange (ji,aN) = {
2188+ let ix = iu(eu)
2189+ if ((size(eu.payments) != 0))
21552190 then throw("No payments required")
21562191 else {
2157- let fD = split_4C(iZ, ":")
2158- let b = toString(ek.originCaller)
2159- let gP = value(assetInfo(fromBase58String(aF)))
2160- let gQ = ax(aF)
2161- if (!(isDefined(getInteger(gQ))))
2162- then throw((gP.name + " is not staked"))
2192+ let fN = split_4C(ji, ":")
2193+ let b = toString(eu.originCaller)
2194+ let gZ = value(assetInfo(fromBase58String(aN)))
2195+ let ha = aF(aN)
2196+ if (!(isDefined(getInteger(ha))))
2197+ then throw((gZ.name + " is not staked"))
21632198 else {
2164- let gS = valueOrErrorMessage(getString(au(aF)), (("NFT " + gP.name) + " is orphaned"))
2165- if ((gS != b))
2166- then throw((P + " is not yours"))
2199+ let hc = valueOrErrorMessage(getString(aC(aN)), (("NFT " + gZ.name) + " is orphaned"))
2200+ if ((hc != b))
2201+ then throw((W + " is not yours"))
21672202 else {
2168- let fm = (bT(split(gP.description, "_")[bI]) / bj)
2169- let fn = valueOrElse(getInteger(ay(aF)), 0)
2170- let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked")
2171- let gM = valueOrElse(getString(aP(p)), W)
2172- let gN = split(value(gM), "_")
2173- if ((gN[aV] != "L"))
2174- then throw((("Duck location type is " + gN[aV]) + ", but should be L"))
2175- else if ((gN[aW] != aF))
2176- then throw(("Duck should be on the land " + aF))
2203+ let fw = (bZ(split(gZ.description, "_")[bO]) / bq)
2204+ let fx = valueOrElse(getInteger(aG(aN)), 0)
2205+ let q = valueOrErrorMessage(getString(aV(b)), "You don't have a duck staked")
2206+ let gW = valueOrElse(getString(aX(q)), ad)
2207+ let gX = split(value(gW), "_")
2208+ if ((gX[bc] != "L"))
2209+ then throw((("Duck location type is " + gX[bc]) + ", but should be L"))
2210+ else if ((gX[bd] != aN))
2211+ then throw(("Duck should be on the land " + aN))
21772212 else {
2178- let fl = aE(aF)
2179- let eY = fk(fl, fm, fn)
2180- let eT = aO(p)
2181- let fE = eS(eT)
2182- let dd = fC(fD, eY, fE)
2183- let ft = split(eY[ak], "_")
2184- let he = (parseIntValue(ft[am]) + dd._7)
2185- let hf = (parseIntValue(ft[an]) - dd._7)
2186-[StringEntry(eT, makeString_2C([fE[ap], dd._4, dd._5, dd._6], ":")), StringEntry(fl, makeString_2C([eY[ag], dd._1, dd._2, dd._3, makeString([ft[al], toString(he), toString(hf), ft[ao]], "_")], ":")), in]
2213+ let fv = aM(aN)
2214+ let fi = fu(fv, fw, fx)
2215+ let fd = aW(q)
2216+ let fO = fc(fd)
2217+ let dj = fM(fN, fi, fO)
2218+ let fD = split(fi[as], "_")
2219+ let ho = (parseIntValue(fD[au]) + dj._7)
2220+ let hp = (parseIntValue(fD[av]) - dj._7)
2221+[StringEntry(fd, makeString_2C([fO[ax], dj._4, dj._5, dj._6], ":")), StringEntry(fv, makeString_2C([fi[ao], dj._1, dj._2, dj._3, makeString([fD[at], toString(ho), toString(hp), fD[aw]], "_")], ":")), ix]
21872222 }
21882223 }
21892224 }
21902225 }
21912226 }
21922227
21932228
21942229
2195-@Callable(ek)
2196-func saveWarehouse (fp,aF) = if ((ek.caller != bE))
2230+@Callable(eu)
2231+func saveWarehouse (fz,aN) = if ((eu.caller != bK))
21972232 then throw("Access denied")
21982233 else {
2199- let fl = aE(aF)
2200- let fq = split_4C(fp, ":")
2201- if ((size(fq) != 5))
2234+ let fv = aM(aN)
2235+ let fA = split_4C(fz, ":")
2236+ if ((size(fA) != 5))
22022237 then throw("warehouse string should contain 4 ':' separators")
22032238 else {
2204- let ja = split(fq[ak], "_")[al]
2205- let he = eX(fq)
2206- let jb = eV(fq[ag])
2207- let hf = ((jb - parseIntValue(ja)) - he)
2208- let jc = makeString_2C([fq[ag], fq[ah], fq[ai], fq[aj], makeString([ja, toString(he), toString(hf), toString(jb)], "_")], ":")
2209- $Tuple2([StringEntry(fl, jc)], jc)
2239+ let jj = split(fA[as], "_")[at]
2240+ let ho = fh(fA)
2241+ let jk = ff(fA[ao])
2242+ let hp = ((jk - parseIntValue(jj)) - ho)
2243+ let jl = makeString_2C([fA[ao], fA[ap], fA[aq], fA[ar], makeString([jj, toString(ho), toString(hp), toString(jk)], "_")], ":")
2244+ $Tuple2([StringEntry(fv, jl)], jl)
22102245 }
22112246 }
22122247
22132248
22142249
2215-@Callable(ek)
2216-func fixWarehouseFormat (aF) = if ((ek.caller != bC))
2250+@Callable(eu)
2251+func fixWarehouseFormat (aN) = if ((eu.caller != bJ))
22172252 then throw("Access denied")
22182253 else {
2219- let fl = aE(aF)
2220- let gP = value(assetInfo(fromBase58String(aF)))
2221- let fm = (bT(split(gP.description, "_")[bI]) / bj)
2222- let fn = valueOrElse(getInteger(ay(aF)), 0)
2223- let fq = fk(fl, fm, fn)
2224- let ja = bR(invoke(bE, "recalcLockedVolumeREADONLY", [aF, fq], nil))
2225- let he = eX(fq)
2226- let jb = eV(fq[ag])
2227- let hf = ((jb - ja) - he)
2228- let jc = makeString_2C([fq[ag], fq[ah], fq[ai], fq[aj], makeString([toString(ja), toString(he), toString(hf), toString(jb)], "_")], ":")
2229- $Tuple2([StringEntry(fl, jc)], jc)
2230- }
2231-
2232-
2233-
2234-@Callable(ek)
2235-func fixStakedPieces (bp) = if ((ek.caller != bC))
2254+ let fv = aM(aN)
2255+ let gZ = value(assetInfo(fromBase58String(aN)))
2256+ let fw = (bZ(split(gZ.description, "_")[bO]) / bq)
2257+ let fx = valueOrElse(getInteger(aG(aN)), 0)
2258+ let fA = fu(fv, fw, fx)
2259+ let jj = bX(invoke(bK, "recalcLockedVolumeREADONLY", [aN, fA], nil))
2260+ let ho = fh(fA)
2261+ let jk = ff(fA[ao])
2262+ let hp = ((jk - jj) - ho)
2263+ let jl = makeString_2C([fA[ao], fA[ap], fA[aq], fA[ar], makeString([toString(jj), toString(ho), toString(hp), toString(jk)], "_")], ":")
2264+ $Tuple2([StringEntry(fv, jl)], jl)
2265+ }
2266+
2267+
2268+
2269+@Callable(eu)
2270+func fixStakedPieces (bw) = if ((eu.caller != bJ))
22362271 then throw("Access denied")
22372272 else {
2238- let id = if ((bp == ""))
2273+ let in = if ((bw == ""))
22392274 then 0
22402275 else {
2241- let hY = getString(bD, bM(bp))
2242- let hT = if (isDefined(hY))
2243- then split_51C(value(hY), "_")
2276+ let ii = getString(S, bS(bw))
2277+ let id = if (isDefined(ii))
2278+ then split_51C(value(ii), "_")
22442279 else nil
2245- func jd (cL,aF) = {
2246- let gP = value(assetInfo(fromBase58String(aF)))
2247- let bU = split(gP.description, "_")[bI]
2248- (cL + bT(bU))
2280+ func jm (cR,aN) = {
2281+ let gZ = value(assetInfo(fromBase58String(aN)))
2282+ let ca = split(gZ.description, "_")[bO]
2283+ (cR + bZ(ca))
22492284 }
22502285
2251- let cN = hT
2252- let cO = size(cN)
2253- let cP = 0
2254- func cQ (cR,cS) = if ((cS >= cO))
2255- then cR
2256- else jd(cR, cN[cS])
2257-
2258- func cT (cR,cS) = if ((cS >= cO))
2259- then cR
2286+ let cT = id
2287+ let cU = size(cT)
2288+ let cV = 0
2289+ func cW (cX,cY) = if ((cY >= cU))
2290+ then cX
2291+ else jm(cX, cT[cY])
2292+
2293+ func cZ (cX,cY) = if ((cY >= cU))
2294+ then cX
22602295 else throw("List size exceeds 100")
22612296
2262- 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)
2297+ cZ(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cV, 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)
22632298 }
2264- $Tuple2([IntegerEntry(bN(bp), id)], id)
2265- }
2266-
2267-
2268-
2269-@Callable(ek)
2270-func setCustomName (av,hV,aA) = {
2271- let in = ik(ek)
2272- if ((size(ek.payments) != 1))
2299+ $Tuple2([IntegerEntry(bT(bw), in)], in)
2300+ }
2301+
2302+
2303+
2304+@Callable(eu)
2305+func setCustomName (aD,if,aI) = {
2306+ let ix = iu(eu)
2307+ if ((size(eu.payments) != 1))
22732308 then throw("Exactly one payment required")
22742309 else {
2275- let io = value(ek.payments[0])
2276- if ((io.assetId != bb))
2310+ let iy = value(eu.payments[0])
2311+ if ((iy.assetId != bi))
22772312 then throw("Allowed USDT payment only!")
2278- else if ((io.amount != ca))
2279- then throw(("Payment should be " + toString(ca)))
2280- else if (contains(hV, "__"))
2281- then throw(("Name should not contain '__': " + hV))
2282- else if ((size(hV) > cb))
2283- then throw(("Name too long, maxLength=" + toString(cb)))
2313+ else if ((iy.amount != cg))
2314+ then throw(("Payment should be " + toString(cg)))
2315+ else if (contains(if, "__"))
2316+ then throw(("Name should not contain '__': " + if))
2317+ else if ((size(if) > ch))
2318+ then throw(("Name too long, maxLength=" + toString(ch)))
22842319 else {
2285- let b = toString(ek.originCaller)
2286- let je = {
2287- let bc = aA
2288- if (("ACCOUNT" == bc))
2320+ let b = toString(eu.originCaller)
2321+ let jn = {
2322+ let bj = aI
2323+ if (("ACCOUNT" == bj))
22892324 then {
2290- let jf = cv(hV)
2291- let jg = getString(jf)
2292- if (isDefined(jg))
2293- then throw(("Name already registered: " + hV))
2325+ let jo = cB(if)
2326+ let jp = getString(jo)
2327+ if (isDefined(jp))
2328+ then throw(("Name already registered: " + if))
22942329 else {
2295- let jh = aH(b)
2296- let ji = getString(jh)
2297- let jj = if (isDefined(ji))
2298- then [DeleteEntry(cv(value(ji)))]
2330+ let jq = aP(b)
2331+ let jr = getString(jq)
2332+ let js = if (isDefined(jr))
2333+ then [DeleteEntry(cB(value(jr)))]
22992334 else nil
2300- (((jj :+ StringEntry(jh, hV)) :+ StringEntry(jf, b)) ++ hz(b, B)._1)
2335+ (((js :+ StringEntry(jq, if)) :+ StringEntry(jo, b)) ++ hJ(b, D)._1)
23012336 }
23022337 }
2303- else if (("LAND" == bc))
2338+ else if (("LAND" == bj))
23042339 then {
2305- let gP = value(assetInfo(fromBase58String(av)))
2306- let gQ = ax(av)
2307- if (!(isDefined(getInteger(gQ))))
2308- then throw((gP.name + " is not staked"))
2340+ let gZ = value(assetInfo(fromBase58String(aD)))
2341+ let ha = aF(aD)
2342+ if (!(isDefined(getInteger(ha))))
2343+ then throw((gZ.name + " is not staked"))
23092344 else {
2310- let gS = valueOrErrorMessage(getString(au(av)), (("NFT " + gP.name) + " is orphaned"))
2311- if ((gS != b))
2312- then throw((P + " is not yours"))
2345+ let hc = valueOrErrorMessage(getString(aC(aD)), (("NFT " + gZ.name) + " is orphaned"))
2346+ if ((hc != b))
2347+ then throw((W + " is not yours"))
23132348 else {
2314- let jf = cp(hV)
2315- let jg = getString(jf)
2316- if (isDefined(jg))
2317- then throw(("Name already registered: " + hV))
2349+ let jo = cv(if)
2350+ let jp = getString(jo)
2351+ if (isDefined(jp))
2352+ then throw(("Name already registered: " + if))
23182353 else {
2319- let jk = aw(av)
2320- let ji = getString(jk)
2321- let jj = if (isDefined(ji))
2322- then [DeleteEntry(cp(value(ji)))]
2354+ let jt = aE(aD)
2355+ let jr = getString(jt)
2356+ let js = if (isDefined(jr))
2357+ then [DeleteEntry(cv(value(jr)))]
23232358 else nil
2324- (((jj :+ StringEntry(jk, hV)) :+ StringEntry(jf, av)) ++ hz(b, B)._1)
2359+ (((js :+ StringEntry(jt, if)) :+ StringEntry(jo, aD)) ++ hJ(b, D)._1)
23252360 }
23262361 }
23272362 }
23282363 }
2329- else if (("DUCK" == bc))
2364+ else if (("DUCK" == bj))
23302365 then {
2331- let gP = value(assetInfo(fromBase58String(av)))
2332- let gQ = ax(av)
2333- if (if (!(isDefined(getInteger(gQ))))
2366+ let gZ = value(assetInfo(fromBase58String(aD)))
2367+ let ha = aF(aD)
2368+ if (if (!(isDefined(getInteger(ha))))
23342369 then true
2335- else !(isDefined(getString(aN(b)))))
2336- then throw((gP.name + " is not staked"))
2370+ else !(isDefined(getString(aV(b)))))
2371+ then throw((gZ.name + " is not staked"))
23372372 else {
2338- let gS = valueOrErrorMessage(getString(aM(av)), (("NFT " + gP.name) + " is orphaned"))
2339- if ((gS != b))
2340- then throw((Q + " is not yours"))
2373+ let hc = valueOrErrorMessage(getString(aU(aD)), (("NFT " + gZ.name) + " is orphaned"))
2374+ if ((hc != b))
2375+ then throw((X + " is not yours"))
23412376 else {
2342- let jf = cu(hV)
2343- let jg = getString(jf)
2344- if (isDefined(jg))
2345- then throw(("Name already registered: " + hV))
2377+ let jo = cA(if)
2378+ let jp = getString(jo)
2379+ if (isDefined(jp))
2380+ then throw(("Name already registered: " + if))
23462381 else {
2347- let jk = aG(av)
2348- let ji = getString(jk)
2349- let jj = if (isDefined(ji))
2350- then [DeleteEntry(cu(value(ji)))]
2382+ let jt = aO(aD)
2383+ let jr = getString(jt)
2384+ let js = if (isDefined(jr))
2385+ then [DeleteEntry(cA(value(jr)))]
23512386 else nil
2352- (((jj :+ StringEntry(jk, hV)) :+ StringEntry(jf, av)) ++ ht(av, B)._1)
2387+ (((js :+ StringEntry(jt, if)) :+ StringEntry(jo, aD)) ++ hD(aD, D)._1)
23532388 }
23542389 }
23552390 }
23562391 }
23572392 else throw("Unknown entity type")
23582393 }
2359- $Tuple2(((je :+ ScriptTransfer(bE, io.amount, bb)) :+ in), 0)
2394+ $Tuple2(((jn :+ ScriptTransfer(bK, iy.amount, bi)) :+ ix), 0)
23602395 }
23612396 }
23622397 }
23632398
23642399
23652400
2366-@Callable(ek)
2367-func setReferrals (jl,jm) = if ((ek.callerPublicKey != bX))
2401+@Callable(eu)
2402+func setReferrals (ju,jv) = if ((eu.callerPublicKey != cd))
23682403 then throw("Permission denied")
23692404 else {
2370- let in = ik(ek)
2371- if ((size(ek.payments) != 0))
2405+ let ix = iu(eu)
2406+ if ((size(eu.payments) != 0))
23722407 then throw("No payments required")
2373- else if (!(isDefined(addressFromString(jl))))
2374- then throw(("Invalid address: " + jl))
2375- else if (!(isDefined(addressFromString(jm))))
2376- then throw(("Invalid address: " + jm))
2408+ else if (!(isDefined(addressFromString(ju))))
2409+ then throw(("Invalid address: " + ju))
2410+ else if (!(isDefined(addressFromString(jv))))
2411+ then throw(("Invalid address: " + jv))
23772412 else {
2378- let jn = cw()
2379- let jo = getString(jn)
2380- let jp = if (isDefined(jo))
2381- then split_4C(value(jo), "_")
2413+ let jw = cC()
2414+ let jx = getString(jw)
2415+ let jy = if (isDefined(jx))
2416+ then split_4C(value(jx), "_")
23822417 else nil
2383- if (containsElement(jp, jm))
2384- then throw((jm + " is not newbie (already has referrals)"))
2418+ if (containsElement(jy, jv))
2419+ then throw((jv + " is not newbie (already has referrals)"))
23852420 else {
2386- let hB = aI(jm)
2387- let hC = getString(hB)
2388- if (if (isDefined(hC))
2389- then isDefined(addressFromString(value(hC)))
2421+ let hL = aQ(jv)
2422+ let hM = getString(hL)
2423+ if (if (isDefined(hM))
2424+ then isDefined(addressFromString(value(hM)))
23902425 else false)
2391- then throw(((jm + " already has refBy: ") + value(hC)))
2426+ then throw(((jv + " already has refBy: ") + value(hM)))
23922427 else {
2393- let jq = aL(jl)
2394- let jr = getString(jq)
2395- let js = if (isDefined(jr))
2396- then split_4C(value(jr), "_")
2428+ let jz = aT(ju)
2429+ let jA = getString(jz)
2430+ let jB = if (isDefined(jA))
2431+ then split_4C(value(jA), "_")
23972432 else nil
2398- if (containsElement(js, jm))
2399- then throw((((jl + " already contains ") + jm) + " within referrals"))
2433+ if (containsElement(jB, jv))
2434+ then throw((((ju + " already contains ") + jv) + " within referrals"))
24002435 else {
2401- let jt = makeString_2C((js :+ jm), "_")
2402- let ju = if (containsElement(jp, jl))
2403- then value(jo)
2404- else makeString_2C((jp :+ jl), "_")
2405- $Tuple2([StringEntry(hB, jl), StringEntry(jq, jt), StringEntry(jn, ju), in], 0)
2436+ let jC = makeString_2C((jB :+ jv), "_")
2437+ let jD = if (containsElement(jy, ju))
2438+ then value(jx)
2439+ else makeString_2C((jy :+ ju), "_")
2440+ $Tuple2([StringEntry(hL, ju), StringEntry(jz, jC), StringEntry(jw, jD), ix], 0)
24062441 }
24072442 }
24082443 }
24092444 }
24102445 }
24112446
24122447
24132448
2414-@Callable(ek)
2415-func distributePoints (jv,jw,jx,jy,jz) = {
2416- let in = ik(ek)
2417- if ((size(ek.payments) != 0))
2449+@Callable(eu)
2450+func distributePoints (jE,jF,jG,jH,jI) = {
2451+ let ix = iu(eu)
2452+ if ((size(eu.payments) != 0))
24182453 then throw("No payments required")
24192454 else {
2420- let b = toString(ek.originCaller)
2421- let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked")
2422- let jA = w(b)
2423- let jB = valueOrElse(getInteger(bD, jA), 0)
2424- let jC = s(p)
2425- let jD = valueOrElse(getInteger(bD, jC), 0)
2426- let jE = (jB + jD)
2427- let jF = ((((jv + jw) + jx) + jy) + jz)
2428- if ((jF > jE))
2429- then throw((("There are only " + toString(jE)) + " free points to distribute"))
2455+ let b = toString(eu.originCaller)
2456+ let q = valueOrErrorMessage(getString(aV(b)), "You don't have a duck staked")
2457+ let jJ = y(b)
2458+ let jK = valueOrElse(getInteger(S, jJ), 0)
2459+ let jL = u(q)
2460+ let jM = valueOrElse(getInteger(S, jL), 0)
2461+ let jN = (jK + jM)
2462+ let jO = ((((jE + jF) + jG) + jH) + jI)
2463+ if ((jO > jN))
2464+ then throw((("There are only " + toString(jN)) + " free points to distribute"))
24302465 else {
2431- let jG = o(p)
2432- let jH = split(valueOrElse(getString(bD, jG), "0_0_0_0_0"), "_")
2433- let jI = (jB - jF)
2434- $Tuple2([IntegerEntry(jA, if ((0 > jI))
2466+ let jP = r(q)
2467+ let T = split(valueOrElse(getString(S, jP), "0_0_0_0_0"), "_")
2468+ let jQ = (jK - jO)
2469+ $Tuple2([IntegerEntry(jJ, if ((0 > jQ))
24352470 then 0
2436- else jI), IntegerEntry(jC, if ((0 > jI))
2437- then (jD + jI)
2438- else jD), StringEntry(jG, makeString([toString((parseIntValue(jH[g]) + jv)), toString((parseIntValue(jH[h]) + jw)), toString((parseIntValue(jH[i]) + jx)), toString((parseIntValue(jH[j]) + jy)), toString((parseIntValue(jH[k]) + jz))], "_")), in], 0)
2471+ else jQ), IntegerEntry(jL, if ((0 > jQ))
2472+ then (jM + jQ)
2473+ else jM), StringEntry(jP, makeString([toString((parseIntValue(T[h]) + jE)), toString((parseIntValue(T[i]) + jF)), toString((parseIntValue(T[j]) + jG)), toString((parseIntValue(T[k]) + jH)), toString((parseIntValue(T[l]) + jI))], "_")), ix], 0)
24392474 }
24402475 }
24412476 }
24422477
24432478
24442479
2445-@Callable(ek)
2446-func splitByGlobalWeightsREADONLY (fA) = $Tuple2(nil, cU(fA))
2447-
2448-
2449-
2450-@Callable(ek)
2451-func splitByGlobalAndLocalWeightsREADONLY (jJ,jK,en) = {
2452- let eg = em(en)
2453- $Tuple2(nil, $Tuple2(cU(jJ), cF(jK, eg)))
2454- }
2455-
2456-
2457-
2458-@Callable(ek)
2459-func getBackpackREADONLY (p) = $Tuple2(nil, makeString(eS(aO(p)), ":"))
2460-
2461-
2462-
2463-@Callable(ek)
2464-func getWarehouseREADONLY (aF) = {
2465- let gP = value(assetInfo(fromBase58String(aF)))
2466- let fm = (bT(split(gP.description, "_")[bI]) / bj)
2467- let fn = valueOrElse(getInteger(ay(aF)), 0)
2468- $Tuple2(nil, makeString_2C(fk(aE(aF), fm, fn), ":"))
2469- }
2470-
2471-
2472-
2473-@Callable(ek)
2474-func saveLastTx () = if (if ((ek.caller != bG))
2475- then (ek.caller != bE)
2480+@Callable(eu)
2481+func splitByGlobalWeightsREADONLY (fK) = $Tuple2(nil, da(fK))
2482+
2483+
2484+
2485+@Callable(eu)
2486+func splitByGlobalAndLocalWeightsREADONLY (jR,jS,ex) = {
2487+ let eq = ew(ex)
2488+ $Tuple2(nil, $Tuple2(da(jR), cL(jS, eq)))
2489+ }
2490+
2491+
2492+
2493+@Callable(eu)
2494+func getBackpackREADONLY (q) = $Tuple2(nil, makeString(fc(aW(q)), ":"))
2495+
2496+
2497+
2498+@Callable(eu)
2499+func getWarehouseREADONLY (aN) = {
2500+ let gZ = value(assetInfo(fromBase58String(aN)))
2501+ let fw = (bZ(split(gZ.description, "_")[bO]) / bq)
2502+ let fx = valueOrElse(getInteger(aG(aN)), 0)
2503+ $Tuple2(nil, makeString_2C(fu(aM(aN), fw, fx), ":"))
2504+ }
2505+
2506+
2507+
2508+@Callable(eu)
2509+func saveLastTx () = if (if ((eu.caller != bM))
2510+ then (eu.caller != bK)
24762511 else false)
24772512 then throw("Access denied")
2478- else $Tuple2([ik(ek)], 42)
2479-
2480-
2481-
2482-@Callable(ek)
2483-func updateDuckStats (p,hu) = if ((ek.caller != bE))
2513+ else $Tuple2([iu(eu)], 42)
2514+
2515+
2516+
2517+@Callable(eu)
2518+func updateDuckStats (q,hE) = if ((eu.caller != bK))
24842519 then throw("Access denied")
2485- else ht(p, hu)
2486-
2487-
2488-
2489-@Callable(ek)
2490-func updateAccStats (b,hu) = if ((ek.caller != bE))
2520+ else hD(q, hE)
2521+
2522+
2523+
2524+@Callable(eu)
2525+func updateAccStats (b,hE) = if ((eu.caller != bK))
24912526 then throw("Access denied")
2492- else hz(b, hu)
2493-
2494-
2495-
2496-@Callable(ek)
2497-func equipDuck (jL) = {
2498- let in = ik(ek)
2499- if ((size(ek.payments) != 0))
2527+ else hJ(b, hE)
2528+
2529+
2530+
2531+@Callable(eu)
2532+func equipDuck (jT) = {
2533+ let ix = iu(eu)
2534+ if ((size(eu.payments) != 0))
25002535 then throw("No payments required")
25012536 else {
2502- let b = toString(ek.originCaller)
2503- let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked")
2504- let jM = t(p)
2505- let jN = split(valueOrElse(getString(jM), ",;,_,;,_,;,_,;,_,;,_,;,"), "_")
2506- let eT = aO(p)
2507- let fE = eS(eT)
2508- let jO = split(jL, "_")
2509- if ((size(jO) != l))
2537+ let b = toString(eu.originCaller)
2538+ let q = valueOrErrorMessage(getString(aV(b)), "You don't have a duck staked")
2539+ let jU = v(q)
2540+ let jV = split(valueOrElse(getString(jU), ",;,_,;,_,;,_,;,_,;,_,;,"), "_")
2541+ let fd = aW(q)
2542+ let fO = fc(fd)
2543+ let jW = split(jT, "_")
2544+ if ((size(jW) != m))
25102545 then throw("Wrong equipment string")
25112546 else {
2512- let jP = fE[as]
2513- let jQ = dY(jN, du(jP), true)
2514- let jR = dY(jO, jQ, false)
2515- let jS = dx(jR)
2516- $Tuple2([StringEntry(jM, jL), StringEntry(eT, makeString_2C([fE[ap], fE[aq], fE[ar], jS], ":")), in], 0)
2547+ let dJ = R(this, q)
2548+ let jX = ei(jV, dA(fO[aA]), true, dJ)
2549+ let jY = ei(jW, jX, false, dJ)
2550+ let jZ = dD(jY)
2551+ $Tuple2([StringEntry(jU, jT), StringEntry(fd, makeString_2C([fO[ax], fO[ay], fO[az], jZ], ":")), ix], 0)
25172552 }
25182553 }
25192554 }
2520-
2521-
2522-
2523-@Callable(ek)
2524-func test () = if ((ek.caller != this))
2525- then throw("Access denied")
2526- else {
2527- let dq = du("")
2528- let dA = dx(dq)
2529- $Tuple2(nil, dA)
2530- }
25312555
25322556

github/deemru/w8io/026f985 
1188.36 ms