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/AcEBQ9lY29ub215Q29udHJhY3QCD3VwZGF0ZUVzU3RvcmFnZQkAzAgCBQVuZXdFUwUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQt1c2R0QXNzZXRJZAUJc2VsbFByaWNlBQNuaWwJAJQKAgkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlrZXlIZWFsdGgFCW5ld0hlYWx0aAkAzAgCBQxwcm9sb2dBY3Rpb24FA25pbAgJARd1cGRhdGVEdWNrU3RhdHNJbnRlcm5hbAIFC2R1Y2tBc3NldElkBQh4cENhbGxFUwJfMQUGcmVzdWx0AWkBDnVwZGF0ZUJhY2twYWNrAgtkdWNrQXNzZXRJZAduZXdQYWNrAwkBAiE9AggFAWkGY2FsbGVyBQ9lY29ub215Q29udHJhY3QJAAIBAhFwZXJtaXNzaW9uIGRlbmllZAkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBQduZXdQYWNrBQNuaWwFB25ld1BhY2sBaQEIYnV5U0xhbmQABAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIcRXhhY3RseSBvbmUgcGF5bWVudCByZXF1aXJlZAQDcG10CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAADCQECIT0CCAUDcG10B2Fzc2V0SWQFC3VzZHRBc3NldElkCQACAQIaQWxsb3dlZCBVU0RUIHBheW1lbnQgb25seSEDCQECIT0CCAUDcG10BmFtb3VudAUHRVhQVVNEVAkAAgEJAKwCAgIbUGF5bWVudCBhdHRhY2hlZCBzaG91bGQgYmUgCQCkAwEFB0VYUFVTRFQEBnJlc3VsdAkBEmV4cGVkaXRpb25JbnRlcm5hbAIIBQFpBmNhbGxlcggFAWkNdHJhbnNhY3Rpb25JZAkAlAoCCQDNCAIJAM4IAgkAzQgCCAUGcmVzdWx0Al8xCQEOU2NyaXB0VHJhbnNmZXIDBQ9lY29ub215Q29udHJhY3QIBQNwbXQGYW1vdW50BQt1c2R0QXNzZXRJZAgJARZ1cGRhdGVBY2NTdGF0c0ludGVybmFsAgkApQgBCAUBaQZjYWxsZXIFCnhwTmV3U0xhbmQCXzEFDHByb2xvZ0FjdGlvbggIBQZyZXN1bHQCXzICXzEBaQEKZXhwZWRpdGlvbgIHbWVzc2FnZQNzaWcEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQGcmVzdWx0CQEQZXhwZWRpdGlvbkNvbW1vbgQIBQFpBmNhbGxlcggFAWkNdHJhbnNhY3Rpb25JZAUHbWVzc2FnZQUDc2lnBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkCQCUCgIJAM0IAgkAzggCCAUGcmVzdWx0Al8xCAkBF3VwZGF0ZUR1Y2tTdGF0c0ludGVybmFsAgULZHVja0Fzc2V0SWQFCnhwTmV3U0xhbmQCXzEFDHByb2xvZ0FjdGlvbgkAlAoCCAUGcmVzdWx0Al8yCAUGcmVzdWx0Al8zAWkBDHVwZ3JhZGVJbmZyYQELbGFuZEFzc2V0SWQEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQGcmVzdWx0CQENdXBJbmZyYUNvbW1vbgQGCAUBaQZjYWxsZXIAAAULbGFuZEFzc2V0SWQEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQkApQgBCAUBaQZjYWxsZXICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQJAJQKAgkAzggCCQDNCAIIBQZyZXN1bHQCXzEFDHByb2xvZ0FjdGlvbggJARd1cGRhdGVEdWNrU3RhdHNJbnRlcm5hbAIFC2R1Y2tBc3NldElkCQBrAwUOeHBVcGdyYWRlSW5mcmEIBQZyZXN1bHQCXzMFBU1VTFQ4Al8xCAUGcmVzdWx0Al8yAWkBEHVwZ3JhZGVJbmZyYVVzZHQBC2xhbmRBc3NldElkAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIRUGVybWlzc2lvbiBkZW5pZWQEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhxFeGFjdGx5IG9uZSBwYXltZW50IHJlcXVpcmVkBANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAMJAQIhPQIIBQNwbXQHYXNzZXRJZAULdXNkdEFzc2V0SWQJAAIBAhpBbGxvd2VkIFVTRFQgcGF5bWVudCBvbmx5IQQGcmVzdWx0CQENdXBJbmZyYUNvbW1vbgQHCAUBaQZjYWxsZXIIBQNwbXQGYW1vdW50BQtsYW5kQXNzZXRJZAkAlAoCCQDNCAIJAM0IAggFBnJlc3VsdAJfMQkBDlNjcmlwdFRyYW5zZmVyAwUPZWNvbm9teUNvbnRyYWN0CAUDcG10BmFtb3VudAULdXNkdEFzc2V0SWQFDHByb2xvZ0FjdGlvbggFBnJlc3VsdAJfMgFpARBhY3RpdmF0ZUFydGlmYWN0AgdhcnROYW1lDmxhbmRBc3NldElkT3B0BAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBGFkZHIJAKUIAQgFAWkGY2FsbGVyBAZyZXN1bHQEByRtYXRjaDAFB2FydE5hbWUDCQAAAgIHUFJFU0FMRQUHJG1hdGNoMAkBEmFjdGl2YXRlUHJlc2FsZUFydAIFBGFkZHIFDmxhbmRBc3NldElkT3B0AwkAAAICB09OQk9BUkQFByRtYXRjaDAJARJhY3RpdmF0ZU9uYm9hcmRBcnQBBQRhZGRyCQACAQIQVW5rbm93biBhcnRpZmFjdAkAzQgCBQZyZXN1bHQFDHByb2xvZ0FjdGlvbgFpAQptZXJnZUxhbmRzAQxsYW5kQXNzZXRJZHMEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQGcmVzdWx0CQELbWVyZ2VDb21tb24FBgkApQgBCAUBaQZjYWxsZXIAAAUMbGFuZEFzc2V0SWRzCAUBaQ10cmFuc2FjdGlvbklkCQCUCgIJAM4IAgkAzQgCCAUGcmVzdWx0Al8xBQxwcm9sb2dBY3Rpb24ICQEWdXBkYXRlQWNjU3RhdHNJbnRlcm5hbAIJAKUIAQgFAWkGY2FsbGVyBQd4cE1lcmdlAl8xCAUGcmVzdWx0Al8yAWkBDm1lcmdlTGFuZHNVc2R0AQxsYW5kQXNzZXRJZHMEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhxFeGFjdGx5IG9uZSBwYXltZW50IHJlcXVpcmVkBANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAMJAQIhPQIIBQNwbXQHYXNzZXRJZAULdXNkdEFzc2V0SWQJAAIBAhpBbGxvd2VkIFVTRFQgcGF5bWVudCBvbmx5IQQGcmVzdWx0CQELbWVyZ2VDb21tb24FBwkApQgBCAUBaQZjYWxsZXIIBQNwbXQGYW1vdW50BQxsYW5kQXNzZXRJZHMIBQFpDXRyYW5zYWN0aW9uSWQJAJQKAgkAzQgCCQDNCAIIBQZyZXN1bHQCXzEJAQ5TY3JpcHRUcmFuc2ZlcgMFD2Vjb25vbXlDb250cmFjdAgFA3BtdAZhbW91bnQFC3VzZHRBc3NldElkBQxwcm9sb2dBY3Rpb24IBQZyZXN1bHQCXzIBaQENY2FyZ29FeGNoYW5nZQIMY2FyZ29MaXN0U3RyC2xhbmRBc3NldElkBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQECmNhcmdvUGFydHMJALwJAgUMY2FyZ29MaXN0U3RyAgE6BARhZGRyCQClCAEIBQFpDG9yaWdpbkNhbGxlcgQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQtsYW5kQXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAMJAQEhAQkBCWlzRGVmaW5lZAEJAJ8IAQUHdGltZUtleQkAAgEJAKwCAggFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkBAVvd25lcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQtsYW5kQXNzZXRJZAkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDCQECIT0CBQVvd25lcgUEYWRkcgkAAgEJAKwCAgUKTEFORFBSRUZJWAINIGlzIG5vdCB5b3VycwQJbGFuZEluZGV4CQBpAgkBD251bVBpZWNlc0J5U2l6ZQEJAJEDAgkAtQkCCAUFYXNzZXQLZGVzY3JpcHRpb24CAV8FC3JlY0xhbmRTaXplBQVTU0laRQQKaW5mcmFMZXZlbAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEFC2xhbmRBc3NldElkAAAEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQLY3VyTG9jYXRpb24JAQt2YWx1ZU9yRWxzZQIJAKIIAQkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkBQ9ERUZBVUxUTE9DQVRJT04EA2xvYwkAtQkCCQEFdmFsdWUBBQtjdXJMb2NhdGlvbgIBXwMJAQIhPQIJAJEDAgUDbG9jBQpsb2NJZHhUeXBlAgFMCQACAQkArAICCQCsAgICFkR1Y2sgbG9jYXRpb24gdHlwZSBpcyAJAJEDAgUDbG9jBQpsb2NJZHhUeXBlAhEsIGJ1dCBzaG91bGQgYmUgTAMJAQIhPQIJAJEDAgUDbG9jBQhsb2NJZHhJZAULbGFuZEFzc2V0SWQJAAIBCQCsAgICG0R1Y2sgc2hvdWxkIGJlIG9uIHRoZSBsYW5kIAULbGFuZEFzc2V0SWQEBXdoS2V5CQESa2V5V2FyZWhvdXNlQnlMYW5kAQULbGFuZEFzc2V0SWQECWN1cnJlbnRXaAkBDGdldFdhcmVob3VzZQMFBXdoS2V5BQlsYW5kSW5kZXgFCmluZnJhTGV2ZWwEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BAZyZXN1bHQJAQltb3ZlU3R1ZmYDBQpjYXJnb1BhcnRzBQljdXJyZW50V2gFC2N1cnJlbnRQYWNrBARsb2Z0CQC1CQIJAJEDAgUJY3VycmVudFdoBQl3aElkeExPRlQCAV8EBWxvZnRPCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFC3ZvbE9jY3VwaWVkCAUGcmVzdWx0Al83BAVsb2Z0RgkAZQIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQd2b2xGcmVlCAUGcmVzdWx0Al83CQDMCAIJAQtTdHJpbmdFbnRyeQIFBWJwS2V5CQC6CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCAUGcmVzdWx0Al80CQDMCAIIBQZyZXN1bHQCXzUJAMwIAggFBnJlc3VsdAJfNgUDbmlsAgE6CQDMCAIJAQtTdHJpbmdFbnRyeQIFBXdoS2V5CQC6CQIJAMwIAgkAkQMCBQljdXJyZW50V2gFC3doSWR4TGV2ZWxzCQDMCAIIBQZyZXN1bHQCXzEJAMwIAggFBnJlc3VsdAJfMgkAzAgCCAUGcmVzdWx0Al8zCQDMCAIJALkJAgkAzAgCCQCRAwIFBGxvZnQFCXZvbExvY2tlZAkAzAgCCQCkAwEFBWxvZnRPCQDMCAIJAKQDAQUFbG9mdEYJAMwIAgkAkQMCBQRsb2Z0BQh2b2xUb3RhbAUDbmlsAgFfBQNuaWwCAToJAMwIAgUMcHJvbG9nQWN0aW9uBQNuaWwBaQENc2F2ZVdhcmVob3VzZQIFd2hTdHILbGFuZEFzc2V0SWQDCQECIT0CCAUBaQZjYWxsZXIFD2Vjb25vbXlDb250cmFjdAkAAgECDUFjY2VzcyBkZW5pZWQEBXdoS2V5CQESa2V5V2FyZWhvdXNlQnlMYW5kAQULbGFuZEFzc2V0SWQEAndoCQC8CQIFBXdoU3RyAgE6AwkBAiE9AgkAkAMBBQJ3aAAFCQACAQIwd2FyZWhvdXNlIHN0cmluZyBzaG91bGQgY29udGFpbiA0ICc6JyBzZXBhcmF0b3JzBAVsb2Z0TAkAkQMCCQC1CQIJAJEDAgUCd2gFCXdoSWR4TE9GVAIBXwUJdm9sTG9ja2VkBAVsb2Z0TwkBF2dldFdhcmVob3VzZU9jY3VwaWVkVm9sAQUCd2gEBWxvZnRUCQEXZ2V0V2FyZWhvdXNlVG90YWxWb2x1bWUBCQCRAwIFAndoBQt3aElkeExldmVscwQFbG9mdEYJAGUCCQBlAgUFbG9mdFQJAQ1wYXJzZUludFZhbHVlAQUFbG9mdEwFBWxvZnRPBAhuZXdXaFN0cgkAugkCCQDMCAIJAJEDAgUCd2gFC3doSWR4TGV2ZWxzCQDMCAIJAJEDAgUCd2gFCHdoSWR4UmVzCQDMCAIJAJEDAgUCd2gFCHdoSWR4TWF0CQDMCAIJAJEDAgUCd2gFCXdoSWR4UHJvZAkAzAgCCQC5CQIJAMwIAgUFbG9mdEwJAMwIAgkApAMBBQVsb2Z0TwkAzAgCCQCkAwEFBWxvZnRGCQDMCAIJAKQDAQUFbG9mdFQFA25pbAIBXwUDbmlsAgE6CQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgUFd2hLZXkFCG5ld1doU3RyBQNuaWwFCG5ld1doU3RyAWkBEmZpeFdhcmVob3VzZUZvcm1hdAELbGFuZEFzc2V0SWQDCQECIT0CCAUBaQZjYWxsZXIFDHJlc3RDb250cmFjdAkAAgECDUFjY2VzcyBkZW5pZWQEBXdoS2V5CQESa2V5V2FyZWhvdXNlQnlMYW5kAQULbGFuZEFzc2V0SWQEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQULbGFuZEFzc2V0SWQECWxhbmRJbmRleAkAaQIJAQ9udW1QaWVjZXNCeVNpemUBCQCRAwIJALUJAggFBWFzc2V0C2Rlc2NyaXB0aW9uAgFfBQtyZWNMYW5kU2l6ZQUFU1NJWkUECmluZnJhTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAAABAJ3aAkBDGdldFdhcmVob3VzZQMFBXdoS2V5BQlsYW5kSW5kZXgFCmluZnJhTGV2ZWwEBWxvZnRMCQEFYXNJbnQBCQD8BwQFD2Vjb25vbXlDb250cmFjdAIacmVjYWxjTG9ja2VkVm9sdW1lUkVBRE9OTFkJAMwIAgULbGFuZEFzc2V0SWQJAMwIAgUCd2gFA25pbAUDbmlsBAVsb2Z0TwkBF2dldFdhcmVob3VzZU9jY3VwaWVkVm9sAQUCd2gEBWxvZnRUCQEXZ2V0V2FyZWhvdXNlVG90YWxWb2x1bWUBCQCRAwIFAndoBQt3aElkeExldmVscwQFbG9mdEYJAGUCCQBlAgUFbG9mdFQFBWxvZnRMBQVsb2Z0TwQIbmV3V2hTdHIJALoJAgkAzAgCCQCRAwIFAndoBQt3aElkeExldmVscwkAzAgCCQCRAwIFAndoBQh3aElkeFJlcwkAzAgCCQCRAwIFAndoBQh3aElkeE1hdAkAzAgCCQCRAwIFAndoBQl3aElkeFByb2QJAMwIAgkAuQkCCQDMCAIJAKQDAQUFbG9mdEwJAMwIAgkApAMBBQVsb2Z0TwkAzAgCCQCkAwEFBWxvZnRGCQDMCAIJAKQDAQUFbG9mdFQFA25pbAIBXwUDbmlsAgE6CQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgUFd2hLZXkFCG5ld1doU3RyBQNuaWwFCG5ld1doU3RyAWkBD2ZpeFN0YWtlZFBpZWNlcwEHYWRkcmVzcwMJAQIhPQIIBQFpBmNhbGxlcgUMcmVzdENvbnRyYWN0CQACAQINQWNjZXNzIGRlbmllZAQMc3Rha2VkUGllY2VzAwkAAAIFB2FkZHJlc3MCAAAABAhsYW5kc1N0cgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARVrZXlTdGFrZWRMYW5kc0J5T3duZXIBBQdhZGRyZXNzBAVsYW5kcwMJAQlpc0RlZmluZWQBBQhsYW5kc1N0cgkAvQkCCQEFdmFsdWUBBQhsYW5kc1N0cgIBXwUDbmlsCgEHb25lTGFuZAIDYWNjC2xhbmRBc3NldElkBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFC2xhbmRBc3NldElkBAhsYW5kU2l6ZQkAkQMCCQC1CQIIBQVhc3NldAtkZXNjcmlwdGlvbgIBXwULcmVjTGFuZFNpemUJAGQCBQNhY2MJAQ9udW1QaWVjZXNCeVNpemUBBQhsYW5kU2l6ZQoAAiRsBQVsYW5kcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEHb25lTGFuZAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIVTGlzdCBzaXplIGV4Y2VlZHMgMTAwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkAGgAbABwAHQAeAB8AIAAhACIAIwAkACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgAzADQANQA2ADcAOAA5ADoAOwA8AD0APgA/AEAAQQBCAEMARABFAEYARwBIAEkASgBLAEwATQBOAE8AUABRAFIAUwBUAFUAVgBXAFgAWQBaAFsAXABdAF4AXwBgAGEAYgBjAGQJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBFmtleVN0YWtlZFBpZWNlc0J5T3duZXIBBQdhZGRyZXNzBQxzdGFrZWRQaWVjZXMFA25pbAUMc3Rha2VkUGllY2VzAWkBDXNldEN1c3RvbU5hbWUDB2Fzc2V0SWQKY3VzdG9tTmFtZQR0eXBlBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIcRXhhY3RseSBvbmUgcGF5bWVudCByZXF1aXJlZAQDcG10CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAADCQECIT0CCAUDcG10B2Fzc2V0SWQFC3VzZHRBc3NldElkCQACAQIaQWxsb3dlZCBVU0RUIHBheW1lbnQgb25seSEDCQECIT0CCAUDcG10BmFtb3VudAUMUkVOQU1JTkdDT1NUCQACAQkArAICAhJQYXltZW50IHNob3VsZCBiZSAJAKQDAQUMUkVOQU1JTkdDT1NUAwkBCGNvbnRhaW5zAgUKY3VzdG9tTmFtZQICX18JAAIBCQCsAgICHk5hbWUgc2hvdWxkIG5vdCBjb250YWluICdfXyc6IAUKY3VzdG9tTmFtZQMJAGYCCQCxAgEFCmN1c3RvbU5hbWUFCk1BWE5BTUVMRU4JAAIBCQCsAgICGU5hbWUgdG9vIGxvbmcsIG1heExlbmd0aD0JAKQDAQUKTUFYTkFNRUxFTgQEYWRkcgkApQgBCAUBaQxvcmlnaW5DYWxsZXIEB2FjdGlvbnMEByRtYXRjaDAFBHR5cGUDCQAAAgIHQUNDT1VOVAUHJG1hdGNoMAQKcmV2ZXJzZUtleQkBFmtleUN1c3RvbU5hbWVUb0FkZHJlc3MBBQpjdXN0b21OYW1lBAluYW1lT3duZXIJAKIIAQUKcmV2ZXJzZUtleQMJAQlpc0RlZmluZWQBBQluYW1lT3duZXIJAAIBCQCsAgICGU5hbWUgYWxyZWFkeSByZWdpc3RlcmVkOiAFCmN1c3RvbU5hbWUEDWFkZHJUb05hbWVLZXkJARZrZXlBZGRyZXNzVG9DdXN0b21OYW1lAQUEYWRkcgQHb2xkTmFtZQkAoggBBQ1hZGRyVG9OYW1lS2V5BAdmcmVlT2xkAwkBCWlzRGVmaW5lZAEFB29sZE5hbWUJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBFmtleUN1c3RvbU5hbWVUb0FkZHJlc3MBCQEFdmFsdWUBBQdvbGROYW1lBQNuaWwFA25pbAkAzggCCQDNCAIJAM0IAgUHZnJlZU9sZAkBC1N0cmluZ0VudHJ5AgUNYWRkclRvTmFtZUtleQUKY3VzdG9tTmFtZQkBC1N0cmluZ0VudHJ5AgUKcmV2ZXJzZUtleQUEYWRkcggJARZ1cGRhdGVBY2NTdGF0c0ludGVybmFsAgUEYWRkcgUMeHBDdXN0b21OYW1lAl8xAwkAAAICBExBTkQFByRtYXRjaDAEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQUHYXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQdhc3NldElkAwkBASEBCQEJaXNEZWZpbmVkAQkAnwgBBQd0aW1lS2V5CQACAQkArAICCAUFYXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQEBW93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFB2Fzc2V0SWQJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwkBAiE9AgUFb3duZXIFBGFkZHIJAAIBCQCsAgIFCkxBTkRQUkVGSVgCDSBpcyBub3QgeW91cnMECnJldmVyc2VLZXkJARprZXlMYW5kQ3VzdG9tTmFtZVRvQXNzZXRJZAEFCmN1c3RvbU5hbWUECW5hbWVPd25lcgkAoggBBQpyZXZlcnNlS2V5AwkBCWlzRGVmaW5lZAEFCW5hbWVPd25lcgkAAgEJAKwCAgIZTmFtZSBhbHJlYWR5IHJlZ2lzdGVyZWQ6IAUKY3VzdG9tTmFtZQQOYXNzZXRUb05hbWVLZXkJARprZXlMYW5kQXNzZXRJZFRvQ3VzdG9tTmFtZQEFB2Fzc2V0SWQEB29sZE5hbWUJAKIIAQUOYXNzZXRUb05hbWVLZXkEB2ZyZWVPbGQDCQEJaXNEZWZpbmVkAQUHb2xkTmFtZQkAzAgCCQELRGVsZXRlRW50cnkBCQEaa2V5TGFuZEN1c3RvbU5hbWVUb0Fzc2V0SWQBCQEFdmFsdWUBBQdvbGROYW1lBQNuaWwFA25pbAkAzggCCQDNCAIJAM0IAgUHZnJlZU9sZAkBC1N0cmluZ0VudHJ5AgUOYXNzZXRUb05hbWVLZXkFCmN1c3RvbU5hbWUJAQtTdHJpbmdFbnRyeQIFCnJldmVyc2VLZXkFB2Fzc2V0SWQICQEWdXBkYXRlQWNjU3RhdHNJbnRlcm5hbAIFBGFkZHIFDHhwQ3VzdG9tTmFtZQJfMQMJAAACAgREVUNLBQckbWF0Y2gwBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFB2Fzc2V0SWQEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQUHYXNzZXRJZAMDCQEBIQEJAQlpc0RlZmluZWQBCQCfCAEFB3RpbWVLZXkGCQEBIQEJAQlpc0RlZmluZWQBCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFBGFkZHIJAAIBCQCsAgIIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAQFb3duZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEQa2V5RHVja0lkVG9Pd25lcgEFB2Fzc2V0SWQJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwkBAiE9AgUFb3duZXIFBGFkZHIJAAIBCQCsAgIFCkRVQ0tQUkVGSVgCDSBpcyBub3QgeW91cnMECnJldmVyc2VLZXkJARprZXlEdWNrQ3VzdG9tTmFtZVRvQXNzZXRJZAEFCmN1c3RvbU5hbWUECW5hbWVPd25lcgkAoggBBQpyZXZlcnNlS2V5AwkBCWlzRGVmaW5lZAEFCW5hbWVPd25lcgkAAgEJAKwCAgIZTmFtZSBhbHJlYWR5IHJlZ2lzdGVyZWQ6IAUKY3VzdG9tTmFtZQQOYXNzZXRUb05hbWVLZXkJARprZXlEdWNrQXNzZXRJZFRvQ3VzdG9tTmFtZQEFB2Fzc2V0SWQEB29sZE5hbWUJAKIIAQUOYXNzZXRUb05hbWVLZXkEB2ZyZWVPbGQDCQEJaXNEZWZpbmVkAQUHb2xkTmFtZQkAzAgCCQELRGVsZXRlRW50cnkBCQEaa2V5RHVja0N1c3RvbU5hbWVUb0Fzc2V0SWQBCQEFdmFsdWUBBQdvbGROYW1lBQNuaWwFA25pbAkAzggCCQDNCAIJAM0IAgUHZnJlZU9sZAkBC1N0cmluZ0VudHJ5AgUOYXNzZXRUb05hbWVLZXkFCmN1c3RvbU5hbWUJAQtTdHJpbmdFbnRyeQIFCnJldmVyc2VLZXkFB2Fzc2V0SWQICQEXdXBkYXRlRHVja1N0YXRzSW50ZXJuYWwCBQdhc3NldElkBQx4cEN1c3RvbU5hbWUCXzEJAAIBAhNVbmtub3duIGVudGl0eSB0eXBlCQCUCgIJAM0IAgkAzQgCBQdhY3Rpb25zCQEOU2NyaXB0VHJhbnNmZXIDBQ9lY29ub215Q29udHJhY3QIBQNwbXQGYW1vdW50BQt1c2R0QXNzZXRJZAUMcHJvbG9nQWN0aW9uAAABaQEMc2V0UmVmZXJyYWxzAglvbGRQbGF5ZXIJbmV3UGxheWVyAwkBAiE9AggFAWkPY2FsbGVyUHVibGljS2V5BQNwdWIJAAIBAhFQZXJtaXNzaW9uIGRlbmllZAQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkAwkBASEBCQEJaXNEZWZpbmVkAQkApggBBQlvbGRQbGF5ZXIJAAIBCQCsAgICEUludmFsaWQgYWRkcmVzczogBQlvbGRQbGF5ZXIDCQEBIQEJAQlpc0RlZmluZWQBCQCmCAEFCW5ld1BsYXllcgkAAgEJAKwCAgIRSW52YWxpZCBhZGRyZXNzOiAFCW5ld1BsYXllcgQHb2xkc0tleQkBCWtleU9sZGllcwAEBG9sZHMJAKIIAQUHb2xkc0tleQQGb2xkaWVzAwkBCWlzRGVmaW5lZAEFBG9sZHMJALwJAgkBBXZhbHVlAQUEb2xkcwIBXwUDbmlsAwkBD2NvbnRhaW5zRWxlbWVudAIFBm9sZGllcwUJbmV3UGxheWVyCQACAQkArAICBQluZXdQbGF5ZXICJiBpcyBub3QgbmV3YmllIChhbHJlYWR5IGhhcyByZWZlcnJhbHMpBAhyZWZCeUtleQkBD2tleUFkZHJlc3NSZWZCeQEFCW5ld1BsYXllcgQFcmVmQnkJAKIIAQUIcmVmQnlLZXkDAwkBCWlzRGVmaW5lZAEFBXJlZkJ5CQEJaXNEZWZpbmVkAQkApggBCQEFdmFsdWUBBQVyZWZCeQcJAAIBCQCsAgIJAKwCAgUJbmV3UGxheWVyAhQgYWxyZWFkeSBoYXMgcmVmQnk6IAkBBXZhbHVlAQUFcmVmQnkEB3JlZnNLZXkJARNrZXlBZGRyZXNzUmVmZXJyYWxzAQUJb2xkUGxheWVyBARyZWZzCQCiCAEFB3JlZnNLZXkECXJlZnNBcnJheQMJAQlpc0RlZmluZWQBBQRyZWZzCQC8CQIJAQV2YWx1ZQEFBHJlZnMCAV8FA25pbAMJAQ9jb250YWluc0VsZW1lbnQCBQlyZWZzQXJyYXkFCW5ld1BsYXllcgkAAgEJAKwCAgkArAICCQCsAgIFCW9sZFBsYXllcgISIGFscmVhZHkgY29udGFpbnMgBQluZXdQbGF5ZXICESB3aXRoaW4gcmVmZXJyYWxzBAduZXdSZWZzCQC6CQIJAM0IAgUJcmVmc0FycmF5BQluZXdQbGF5ZXICAV8EB25ld09sZHMDCQEPY29udGFpbnNFbGVtZW50AgUGb2xkaWVzBQlvbGRQbGF5ZXIJAQV2YWx1ZQEFBG9sZHMJALoJAgkAzQgCBQZvbGRpZXMFCW9sZFBsYXllcgIBXwkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIFCHJlZkJ5S2V5BQlvbGRQbGF5ZXIJAMwIAgkBC1N0cmluZ0VudHJ5AgUHcmVmc0tleQUHbmV3UmVmcwkAzAgCCQELU3RyaW5nRW50cnkCBQdvbGRzS2V5BQduZXdPbGRzCQDMCAIFDHByb2xvZ0FjdGlvbgUDbmlsAAABaQEQZGlzdHJpYnV0ZVBvaW50cwUIc3RyZW5ndGgIYWNjdXJhY3kJaW50ZWxsZWN0CWVuZHVyYW5jZQlkZXh0ZXJpdHkEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQEYWRkcgkApQgBCAUBaQxvcmlnaW5DYWxsZXIEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQKZnJlZUtleUFjYwkBEWtleVVzZXJGcmVlUG9pbnRzAQUEYWRkcgQNZnJlZVBvaW50c0FjYwkBC3ZhbHVlT3JFbHNlAgkAmggCBQ9zdGFraW5nQ29udHJhY3QFCmZyZWVLZXlBY2MAAAQLZnJlZUtleUR1Y2sJARFrZXlEdWNrRnJlZVBvaW50cwEFC2R1Y2tBc3NldElkBA5mcmVlUG9pbnRzRHVjawkBC3ZhbHVlT3JFbHNlAgkAmggCBQ9zdGFraW5nQ29udHJhY3QFC2ZyZWVLZXlEdWNrAAAEB3N1bUZyZWUJAGQCBQ1mcmVlUG9pbnRzQWNjBQ5mcmVlUG9pbnRzRHVjawQPc3VtVG9EaXN0cmlidXRlCQBkAgkAZAIJAGQCCQBkAgUIc3RyZW5ndGgFCGFjY3VyYWN5BQlpbnRlbGxlY3QFCWVuZHVyYW5jZQUJZGV4dGVyaXR5AwkAZgIFD3N1bVRvRGlzdHJpYnV0ZQUHc3VtRnJlZQkAAgEJAKwCAgkArAICAg9UaGVyZSBhcmUgb25seSAJAKQDAQUHc3VtRnJlZQIaIGZyZWUgcG9pbnRzIHRvIGRpc3RyaWJ1dGUECGNoYXJzS2V5CQEMa2V5RHVja0NoYXJzAQULZHVja0Fzc2V0SWQEBWNoYXJzCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0BQhjaGFyc0tleQIJMF8wXzBfMF8wAgFfBAZuZXdBY2MJAGUCBQ1mcmVlUG9pbnRzQWNjBQ9zdW1Ub0Rpc3RyaWJ1dGUJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUKZnJlZUtleUFjYwMJAGYCAAAFBm5ld0FjYwAABQZuZXdBY2MJAMwIAgkBDEludGVnZXJFbnRyeQIFC2ZyZWVLZXlEdWNrAwkAZgIAAAUGbmV3QWNjCQBkAgUOZnJlZVBvaW50c0R1Y2sFBm5ld0FjYwUOZnJlZVBvaW50c0R1Y2sJAMwIAgkBC1N0cmluZ0VudHJ5AgUIY2hhcnNLZXkJALkJAgkAzAgCCQCkAwEJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFY2hhcnMFDGNoYXJTdHJlbmd0aAUIc3RyZW5ndGgJAMwIAgkApAMBCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBWNoYXJzBQxjaGFyQWNjdXJhY3kFCGFjY3VyYWN5CQDMCAIJAKQDAQkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVjaGFycwUNY2hhckludGVsbGVjdAUJaW50ZWxsZWN0CQDMCAIJAKQDAQkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVjaGFycwUNY2hhckVuZHVyYW5jZQUJZW5kdXJhbmNlCQDMCAIJAKQDAQkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVjaGFycwUNY2hhckRleHRlcml0eQUJZGV4dGVyaXR5BQNuaWwCAV8JAMwIAgUMcHJvbG9nQWN0aW9uBQNuaWwAAAFpARxzcGxpdEJ5R2xvYmFsV2VpZ2h0c1JFQURPTkxZAQZhbW91bnQJAJQKAgUDbmlsCQESZ2V0TmVlZGVkTWF0ZXJpYWxzAQUGYW1vdW50AWkBJHNwbGl0QnlHbG9iYWxBbmRMb2NhbFdlaWdodHNSRUFET05MWQMJbWF0QW1vdW50CXJlc0Ftb3VudAh0ZXJyYWlucwQNdGVycmFpbkNvdW50cwkBDWNvdW50VGVycmFpbnMBBQh0ZXJyYWlucwkAlAoCBQNuaWwJAJQKAgkBEmdldE5lZWRlZE1hdGVyaWFscwEFCW1hdEFtb3VudAkBE2Rpc3RyaWJ1dGVCeVdlaWdodHMCBQlyZXNBbW91bnQFDXRlcnJhaW5Db3VudHMBaQETZ2V0QmFja3BhY2tSRUFET05MWQELZHVja0Fzc2V0SWQJAJQKAgUDbmlsCQC5CQIJAQtnZXRCYWNrcGFjawEJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkAgE6AWkBFGdldFdhcmVob3VzZVJFQURPTkxZAQtsYW5kQXNzZXRJZAQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQtsYW5kQXNzZXRJZAQJbGFuZEluZGV4CQBpAgkBD251bVBpZWNlc0J5U2l6ZQEJAJEDAgkAtQkCCAUFYXNzZXQLZGVzY3JpcHRpb24CAV8FC3JlY0xhbmRTaXplBQVTU0laRQQKaW5mcmFMZXZlbAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEFC2xhbmRBc3NldElkAAAJAJQKAgUDbmlsCQC6CQIJAQxnZXRXYXJlaG91c2UDCQESa2V5V2FyZWhvdXNlQnlMYW5kAQULbGFuZEFzc2V0SWQFCWxhbmRJbmRleAUKaW5mcmFMZXZlbAIBOgFpAQpzYXZlTGFzdFR4AAMDCQECIT0CCAUBaQZjYWxsZXIFC3dsZ0NvbnRyYWN0CQECIT0CCAUBaQZjYWxsZXIFD2Vjb25vbXlDb250cmFjdAcJAAIBAg1BY2Nlc3MgZGVuaWVkCQCUCgIJAMwIAgkBBnByb2xvZwEFAWkFA25pbAAqAWkBD3VwZGF0ZUR1Y2tTdGF0cwILZHVja0Fzc2V0SWQHZGVsdGFYUAMJAQIhPQIIBQFpBmNhbGxlcgUPZWNvbm9teUNvbnRyYWN0CQACAQINQWNjZXNzIGRlbmllZAkBF3VwZGF0ZUR1Y2tTdGF0c0ludGVybmFsAgULZHVja0Fzc2V0SWQFB2RlbHRhWFABaQEOdXBkYXRlQWNjU3RhdHMCBGFkZHIHZGVsdGFYUAMJAQIhPQIIBQFpBmNhbGxlcgUPZWNvbm9teUNvbnRyYWN0CQACAQINQWNjZXNzIGRlbmllZAkBFnVwZGF0ZUFjY1N0YXRzSW50ZXJuYWwCBQRhZGRyBQdkZWx0YVhQAWkBCWVxdWlwRHVjawEJZXF1aXBtZW50BAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBGFkZHIJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFBGFkZHICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQEBWVxS2V5CQEQa2V5RHVja0VxdWlwbWVudAEFC2R1Y2tBc3NldElkBAtjdXJyZW50U2VncwkAtQkCCQELdmFsdWVPckVsc2UCCQCiCAEFBWVxS2V5AhcsOyxfLDssXyw7LF8sOyxfLDssXyw7LAIBXwQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkEBW5ld0VxCQC1CQIFCWVxdWlwbWVudAIBXwMJAQIhPQIJAJADAQUFbmV3RXEFC05VTVNFR01FTlRTCQACAQIWV3JvbmcgZXF1aXBtZW50IHN0cmluZwQEcmVxcwkBDGdldER1Y2tTdGF0cwIFBHRoaXMFC2R1Y2tBc3NldElkBAl0ZW1wUHJvZEIJAQZkcmVzc0IEBQtjdXJyZW50U2VncwkBDnByb2RTdHJUb0J5dGVzAQkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kBgUEcmVxcwQIbmV3UHJvZEIJAQZkcmVzc0IEBQVuZXdFcQUJdGVtcFByb2RCBwUEcmVxcwQKbmV3UHJvZFN0cgkBDmJ5dGVzVG9Qcm9kU3RyAQUIbmV3UHJvZEIJAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCBQVlcUtleQUJZXF1aXBtZW50CQDMCAIJAQtTdHJpbmdFbnRyeQIFBWJwS2V5CQC6CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAkAzAgCBQpuZXdQcm9kU3RyBQNuaWwCAToJAMwIAgUMcHJvbG9nQWN0aW9uBQNuaWwAAABP9uvN", "height": 2674164, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 2NcKvAgbF6WbQQedZPYNRKY17h7AK6BR5FfRVLB1Hf5K Next: BvMzugfkeWcn5ckPb4ECCsXaxgKn14f4nq5jyM2NmtQd Diff:
Old | New | Differences | |
---|---|---|---|
12 | 12 | ||
13 | 13 | let f = 3 | |
14 | 14 | ||
15 | - | let g = | |
16 | - | ||
17 | - | let h = | |
18 | - | ||
19 | - | let i = | |
20 | - | ||
21 | - | let j = | |
22 | - | ||
23 | - | let k = | |
24 | - | ||
25 | - | let l = | |
26 | - | ||
27 | - | let m = | |
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 | |
28 | 28 | ||
29 | 29 | let n = 2 | |
30 | 30 | ||
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 | |
118 | 117 | ||
119 | 118 | let af = 10 | |
120 | 119 | ||
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)) | |
227 | 239 | then base58'9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi' | |
228 | - | else if ((base58'2T' == | |
240 | + | else if ((base58'2T' == bj)) | |
229 | 241 | then base58'6mWwf9mZBjVgkC54idpyaZLQfAosD914wT8fGf2iiY63' | |
230 | 242 | else throw("Unknown chain") | |
231 | 243 | } | |
232 | 244 | ||
233 | - | let | |
234 | - | let | |
235 | - | if ((base58'2W' == | |
245 | + | let bk = { | |
246 | + | let bj = bh | |
247 | + | if ((base58'2W' == bj)) | |
236 | 248 | then "3PQCuvFbvh4LkPUnrnU1z3jnbA1p9m3WNhv" | |
237 | - | else if ((base58'2T' == | |
249 | + | else if ((base58'2T' == bj)) | |
238 | 250 | then "3MumkGGztCKAXpWDqxkddofqXSUbqQkvSJy" | |
239 | 251 | else throw("Unknown chain") | |
240 | 252 | } | |
241 | 253 | ||
242 | - | let | |
243 | - | let | |
244 | - | if ((base58'2W' == | |
254 | + | let bl = { | |
255 | + | let bj = bh | |
256 | + | if ((base58'2W' == bj)) | |
245 | 257 | then 10000000000 | |
246 | - | else if ((base58'2T' == | |
258 | + | else if ((base58'2T' == bj)) | |
247 | 259 | then 100000000 | |
248 | 260 | else throw("Unknown chain") | |
249 | 261 | } | |
250 | 262 | ||
251 | - | let | |
252 | - | let | |
253 | - | if ((base58'2W' == | |
263 | + | let bm = { | |
264 | + | let bj = bh | |
265 | + | if ((base58'2W' == bj)) | |
254 | 266 | then 600000 | |
255 | - | else if ((base58'2T' == | |
267 | + | else if ((base58'2T' == bj)) | |
256 | 268 | then 60000 | |
257 | 269 | else throw("Unknown chain") | |
258 | 270 | } | |
259 | 271 | ||
260 | - | let | |
261 | - | ||
262 | - | let | |
263 | - | ||
264 | - | let | |
265 | - | ||
266 | - | let | |
267 | - | ||
268 | - | let | |
269 | - | ||
270 | - | let | |
271 | - | ||
272 | - | let | |
273 | - | ||
274 | - | let | |
275 | - | ||
276 | - | func | |
277 | - | ||
278 | - | ||
279 | - | let | |
280 | - | ||
281 | - | let | |
282 | - | ||
283 | - | let | |
284 | - | ||
285 | - | let | |
286 | - | ||
287 | - | func | |
288 | - | ||
289 | - | ||
290 | - | func | |
291 | - | ||
292 | - | ||
293 | - | func | |
294 | - | ||
295 | - | ||
296 | - | func | |
297 | - | ||
298 | - | ||
299 | - | let | |
300 | - | ||
301 | - | let | |
302 | - | ||
303 | - | let | |
304 | - | ||
305 | - | let | |
306 | - | ||
307 | - | let | |
308 | - | ||
309 | - | let | |
310 | - | ||
311 | - | let | |
312 | - | ||
313 | - | let | |
314 | - | ||
315 | - | let | |
316 | - | ||
317 | - | let | |
318 | - | ||
319 | - | func | |
320 | - | ||
321 | - | ||
322 | - | func | |
323 | - | ||
324 | - | ||
325 | - | func | |
326 | - | ||
327 | - | ||
328 | - | func | |
329 | - | let | |
330 | - | if ($isInstanceOf( | |
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")) | |
331 | 343 | then { | |
332 | - | let | |
333 | - | | |
344 | + | let bW = bj | |
345 | + | bW | |
334 | 346 | } | |
335 | 347 | else throw("fail to cast into String") | |
336 | 348 | } | |
337 | 349 | ||
338 | 350 | ||
339 | - | func | |
340 | - | let | |
341 | - | if ($isInstanceOf( | |
351 | + | func bX (bV) = { | |
352 | + | let bj = bV | |
353 | + | if ($isInstanceOf(bj, "Int")) | |
342 | 354 | then { | |
343 | - | let | |
344 | - | | |
355 | + | let bY = bj | |
356 | + | bY | |
345 | 357 | } | |
346 | 358 | else throw("fail to cast into Int") | |
347 | 359 | } | |
348 | 360 | ||
349 | 361 | ||
350 | - | func | |
351 | - | let | |
352 | - | if (("S" == | |
353 | - | then | |
354 | - | else if (("M" == | |
355 | - | then | |
356 | - | else if (("L" == | |
357 | - | then | |
358 | - | else if (("XL" == | |
359 | - | then | |
360 | - | else if (("XXL" == | |
361 | - | then | |
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 | |
362 | 374 | else throw("Unknown land size") | |
363 | 375 | } | |
364 | 376 | ||
365 | 377 | ||
366 | - | let | |
367 | - | let | |
368 | - | if ((base58'2W' == | |
378 | + | let cb = { | |
379 | + | let bj = bh | |
380 | + | if ((base58'2W' == bj)) | |
369 | 381 | then addressFromStringValue("3PEktVux2RhchSN63DsDo4b4mz4QqzKSeDv") | |
370 | - | else if ((base58'2T' == | |
382 | + | else if ((base58'2T' == bj)) | |
371 | 383 | then this | |
372 | 384 | else throw("Unknown chain") | |
373 | 385 | } | |
374 | 386 | ||
375 | - | let | |
376 | - | let | |
377 | - | if ((base58'2W' == | |
387 | + | let cc = { | |
388 | + | let bj = bh | |
389 | + | if ((base58'2W' == bj)) | |
378 | 390 | then addressFromStringValue("3PDVuU45H7Eh5dmtNbnRNRStGwULA7NY6Hb") | |
379 | - | else if ((base58'2T' == | |
391 | + | else if ((base58'2T' == bj)) | |
380 | 392 | then this | |
381 | 393 | else throw("Unknown chain") | |
382 | 394 | } | |
383 | 395 | ||
384 | - | let | |
385 | - | ||
386 | - | let | |
387 | - | ||
388 | - | let | |
389 | - | ||
390 | - | let | |
391 | - | ||
392 | - | let | |
393 | - | ||
394 | - | let | |
395 | - | ||
396 | - | let | |
397 | - | let | |
398 | - | if ((base58'2W' == | |
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)) | |
399 | 411 | then 252289527462 | |
400 | - | else if ((base58'2T' == | |
412 | + | else if ((base58'2T' == bj)) | |
401 | 413 | then 2522895274 | |
402 | 414 | else throw("Unknown chain") | |
403 | 415 | } | |
404 | 416 | ||
405 | - | let | |
406 | - | let | |
407 | - | if ((base58'2W' == | |
417 | + | let ck = { | |
418 | + | let bj = bh | |
419 | + | if ((base58'2W' == bj)) | |
408 | 420 | then 250000000 | |
409 | - | else if ((base58'2T' == | |
421 | + | else if ((base58'2T' == bj)) | |
410 | 422 | then 250000000 | |
411 | 423 | else throw("Unknown chain") | |
412 | 424 | } | |
413 | 425 | ||
414 | - | let | |
415 | - | ||
416 | - | let | |
417 | - | ||
418 | - | let | |
419 | - | ||
420 | - | let | |
421 | - | ||
422 | - | let | |
423 | - | ||
424 | - | let | |
425 | - | ||
426 | - | let | |
427 | - | ||
428 | - | func | |
429 | - | ||
430 | - | ||
431 | - | func | |
432 | - | ||
433 | - | ||
434 | - | func | |
435 | - | ||
436 | - | ||
437 | - | func | |
438 | - | ||
439 | - | ||
440 | - | func | |
441 | - | ||
442 | - | ||
443 | - | func | |
444 | - | ||
445 | - | ||
446 | - | func | |
447 | - | ||
448 | - | ||
449 | - | func | |
450 | - | ||
451 | - | ||
452 | - | func | |
453 | - | ||
454 | - | ||
455 | - | let | |
456 | - | ||
457 | - | let | |
458 | - | ||
459 | - | let | |
460 | - | ||
461 | - | let | |
462 | - | ||
463 | - | let | |
464 | - | ||
465 | - | let | |
466 | - | ||
467 | - | let | |
468 | - | ||
469 | - | func | |
470 | - | ||
471 | - | ||
472 | - | func | |
473 | - | let | |
474 | - | if ((0 >= | |
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)) | |
475 | 487 | then throw("Zero weights sum") | |
476 | 488 | else { | |
477 | - | let | |
478 | - | func | |
479 | - | ||
480 | - | let | |
481 | - | let | |
482 | - | let | |
483 | - | func | |
484 | - | then | |
485 | - | else | |
486 | - | ||
487 | - | func | |
488 | - | then | |
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 | |
489 | 501 | else throw("List size exceeds 6") | |
490 | 502 | ||
491 | - | | |
492 | - | } | |
493 | - | } | |
494 | - | ||
495 | - | ||
496 | - | func | |
497 | - | let | |
498 | - | if ((size( | |
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)) | |
499 | 511 | then throw("Wrong proportions data") | |
500 | 512 | else { | |
501 | - | let | |
502 | - | | |
503 | - | } | |
504 | - | } | |
505 | - | ||
506 | - | ||
507 | - | func | |
508 | - | let | |
509 | - | func | |
510 | - | let | |
511 | - | if ((0 > | |
512 | - | then throw(((((("Not enough material idx=" + toString( | |
513 | - | else ( | |
514 | - | } | |
515 | - | ||
516 | - | if ( | |
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) | |
517 | 529 | then { | |
518 | - | let | |
519 | - | let | |
520 | - | let | |
521 | - | func | |
522 | - | then | |
523 | - | else | |
524 | - | ||
525 | - | func | |
526 | - | then | |
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 | |
527 | 539 | else throw("List size exceeds 6") | |
528 | 540 | ||
529 | - | | |
530 | - | } | |
531 | - | else | |
532 | - | } | |
533 | - | ||
534 | - | ||
535 | - | func | |
536 | - | then | |
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 | |
537 | 549 | else { | |
538 | - | let | |
550 | + | let dn = if ((dl == "")) | |
539 | 551 | then nil | |
540 | - | else split( | |
541 | - | func | |
542 | - | let | |
543 | - | func | |
544 | - | let | |
545 | - | if ((size( | |
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)) | |
546 | 558 | then throw("Incorrect format, should be index,amount") | |
547 | 559 | else { | |
548 | - | let | |
549 | - | if (if ((0 > | |
560 | + | let bI = parseIntValue(du[0]) | |
561 | + | if (if ((0 > bI)) | |
550 | 562 | then true | |
551 | - | else ( | |
563 | + | else (bI >= size(aj))) | |
552 | 564 | then throw("Unknown product idx") | |
553 | - | else if (( | |
554 | - | then | |
565 | + | else if ((bI != dq)) | |
566 | + | then ds | |
555 | 567 | else { | |
556 | - | let | |
557 | - | if ((0 >= | |
568 | + | let dv = parseIntValue(du[1]) | |
569 | + | if ((0 >= dv)) | |
558 | 570 | then throw("Pass only positive amounts") | |
559 | - | else ( | |
571 | + | else (ds + dv) | |
560 | 572 | } | |
561 | 573 | } | |
562 | 574 | } | |
563 | 575 | ||
564 | - | let | |
565 | - | let | |
566 | - | let | |
567 | - | let | |
568 | - | func | |
569 | - | then | |
570 | - | else | |
571 | - | ||
572 | - | func | |
573 | - | then | |
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 | |
574 | 586 | else throw("List size exceeds 10") | |
575 | 587 | ||
576 | - | | |
588 | + | cZ(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10) | |
577 | 589 | } | |
578 | - | let | |
579 | - | then parseIntValue( | |
590 | + | let dx = if ((size(dn) > dq)) | |
591 | + | then parseIntValue(dn[dq]) | |
580 | 592 | else 0 | |
581 | - | let | |
582 | - | then ( | |
583 | - | else throw(((((("You have " + toString( | |
584 | - | $Tuple2(( | |
585 | - | } | |
586 | - | ||
587 | - | let | |
588 | - | let | |
589 | - | let | |
590 | - | let | |
591 | - | func | |
592 | - | then | |
593 | - | else | |
594 | - | ||
595 | - | func | |
596 | - | then | |
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 | |
597 | 609 | else throw("List size exceeds 50") | |
598 | 610 | ||
599 | - | | |
600 | - | } | |
601 | - | makeString( | |
602 | - | } | |
603 | - | ||
604 | - | ||
605 | - | func | |
606 | - | let | |
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 == "")) | |
607 | 619 | then nil | |
608 | - | else split( | |
609 | - | func | |
610 | - | let | |
611 | - | let | |
612 | - | then parseIntValue( | |
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]) | |
613 | 625 | else 0 | |
614 | - | ( | |
615 | - | } | |
616 | - | ||
617 | - | let | |
618 | - | let | |
619 | - | let | |
620 | - | func | |
621 | - | then | |
622 | - | else | |
623 | - | ||
624 | - | func | |
625 | - | then | |
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 | |
626 | 638 | else throw("List size exceeds 50") | |
627 | 639 | ||
628 | - | | |
629 | - | } | |
630 | - | ||
631 | - | ||
632 | - | func | |
633 | - | func | |
634 | - | let | |
635 | - | let | |
636 | - | ( | |
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))) | |
637 | 649 | } | |
638 | 650 | ||
639 | 651 | makeString({ | |
640 | - | let | |
641 | - | let | |
642 | - | let | |
643 | - | func | |
644 | - | then | |
645 | - | else | |
646 | - | ||
647 | - | func | |
648 | - | then | |
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 | |
649 | 661 | else throw("List size exceeds 50") | |
650 | 662 | ||
651 | - | | |
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) | |
652 | 664 | }, "_") | |
653 | 665 | } | |
654 | 666 | ||
655 | 667 | ||
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)) | |
659 | 691 | then throw("Incorrect format, should be index:amount") | |
660 | 692 | else { | |
661 | - | let | |
662 | - | let | |
663 | - | if (if ((0 > | |
693 | + | let dR = parseIntValue(du[0]) | |
694 | + | let dS = parseIntValue(du[1]) | |
695 | + | if (if ((0 > dR)) | |
664 | 696 | then true | |
665 | - | else ( | |
697 | + | else (dR >= size(aj))) | |
666 | 698 | then throw("Unknown product idx") | |
667 | - | else if ((0 > | |
699 | + | else if ((0 > dS)) | |
668 | 700 | then throw("Count can't be negative") | |
669 | - | else if (( | |
670 | - | then $Tuple2( | |
701 | + | else if ((dS == 0)) | |
702 | + | then $Tuple2(dn, false) | |
671 | 703 | 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) | |
677 | 710 | else false) | |
678 | - | then throw(((((("You have " + toString( | |
711 | + | then throw(((((("You have " + toString(dx)) + " of ") + ag[dR]) + ", but tried to use ") + toString(dS))) | |
679 | 712 | else { | |
680 | - | let dL = if (!(dD)) | |
713 | + | let dV = if (if (!(dN)) | |
714 | + | then dH(dI, split(bf[al], ",")) | |
715 | + | else false) | |
681 | 716 | then { | |
682 | - | let | |
683 | - | if (( | |
717 | + | let dW = bf[am] | |
718 | + | if ((dW == "")) | |
684 | 719 | then throw("Item cannot be equipped") | |
685 | 720 | else { | |
686 | - | let | |
687 | - | let | |
688 | - | if (( | |
721 | + | let dX = parseIntValue(dW) | |
722 | + | let dY = (dX / 100) | |
723 | + | if ((dO != dY)) | |
689 | 724 | then throw("Segment incompatible") | |
690 | 725 | else { | |
691 | - | let | |
692 | - | if (( | |
726 | + | let dZ = ((dX % 100) / 10) | |
727 | + | if ((dP != dZ)) | |
693 | 728 | then throw("Slot incompatible") | |
694 | 729 | else { | |
695 | - | let | |
696 | - | if (if (( | |
697 | - | then ( | |
730 | + | let ea = (dX % 10) | |
731 | + | if (if ((dQ != 0)) | |
732 | + | then (ea > 1) | |
698 | 733 | else false) | |
699 | 734 | then throw("Big items should occupy slot 0") | |
700 | - | else ( | |
735 | + | else (ea > 1) | |
701 | 736 | } | |
702 | 737 | } | |
703 | 738 | } | |
704 | 739 | } | |
705 | 740 | else false | |
706 | - | $Tuple2((( | |
707 | - | then | |
708 | - | else -( | |
741 | + | $Tuple2(((dT + toBytes((dx + (if (dN) | |
742 | + | then dS | |
743 | + | else -(dS))))) + dU), dV) | |
709 | 744 | } | |
710 | 745 | } | |
711 | 746 | } | |
712 | 747 | } | |
713 | 748 | ||
714 | 749 | ||
715 | - | func | |
750 | + | func eb (ec,ed,dN,dO,dP,dJ) = if ((ec != "")) | |
716 | 751 | then { | |
717 | - | let | |
718 | - | if ((size( | |
752 | + | let ee = split(ec, ",") | |
753 | + | if ((size(ee) > o)) | |
719 | 754 | then throw("Wrong slots format") | |
720 | 755 | else { | |
721 | - | let | |
722 | - | let | |
723 | - | then | |
756 | + | let ef = ee[0] | |
757 | + | let eg = if ((size(ee) > 1)) | |
758 | + | then ee[1] | |
724 | 759 | else "" | |
725 | - | if (if (( | |
726 | - | then ( | |
760 | + | if (if ((ef == "")) | |
761 | + | then (eg == "") | |
727 | 762 | else false) | |
728 | - | then | |
763 | + | then ed | |
729 | 764 | else { | |
730 | - | let | |
731 | - | then | |
732 | - | else $Tuple2( | |
733 | - | if (( | |
734 | - | then if ( | |
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) | |
735 | 770 | then throw("Big item already occupies slot") | |
736 | - | else | |
737 | - | else | |
771 | + | else dL(eg, eh._1, dN, dO, dP, 1, dJ)._1 | |
772 | + | else eh._1 | |
738 | 773 | } | |
739 | 774 | } | |
740 | 775 | } | |
741 | - | else | |
742 | - | ||
743 | - | ||
744 | - | func | |
745 | - | func | |
746 | - | let | |
747 | - | let | |
748 | - | if ((size( | |
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)) | |
749 | 784 | then throw("Wrong segment format") | |
750 | 785 | else { | |
751 | - | let | |
752 | - | let | |
753 | - | if (if (( | |
754 | - | then ( | |
786 | + | let em = dP[0] | |
787 | + | let dw = dP[1] | |
788 | + | if (if ((em == "")) | |
789 | + | then (dw == "") | |
755 | 790 | else false) | |
756 | - | then $Tuple2(( | |
791 | + | then $Tuple2((dq + 1), cR._2) | |
757 | 792 | else { | |
758 | - | let | |
759 | - | $Tuple2(( | |
793 | + | let en = eb(em, cR._2, dN, dq, 0, dJ) | |
794 | + | $Tuple2((dq + 1), eb(dw, en, dN, dq, 1, dJ)) | |
760 | 795 | } | |
761 | 796 | } | |
762 | 797 | } | |
763 | 798 | ||
764 | - | ( let | |
765 | - | let | |
766 | - | let | |
767 | - | func | |
768 | - | then | |
769 | - | else | |
770 | - | ||
771 | - | func | |
772 | - | then | |
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 | |
773 | 808 | else throw("List size exceeds 6") | |
774 | 809 | ||
775 | - | | |
776 | - | } | |
777 | - | ||
778 | - | ||
779 | - | func | |
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)) | |
780 | 815 | then throw("Wrong proportions data") | |
781 | 816 | else { | |
782 | - | func | |
783 | - | let | |
784 | - | if ((0 > | |
785 | - | then throw(((((((("Panic! Pieces of type=" + toString( | |
786 | - | else ( | |
787 | - | } | |
788 | - | ||
789 | - | let | |
790 | - | let | |
791 | - | let | |
792 | - | let | |
793 | - | func | |
794 | - | then | |
795 | - | else | |
796 | - | ||
797 | - | func | |
798 | - | then | |
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 | |
799 | 834 | else throw("List size exceeds 6") | |
800 | 835 | ||
801 | - | | |
802 | - | } | |
803 | - | makeString( | |
804 | - | } | |
805 | - | ||
806 | - | ||
807 | - | func | |
808 | - | let | |
809 | - | | |
810 | - | } | |
811 | - | ||
812 | - | ||
813 | - | func | |
814 | - | ||
815 | - | ||
816 | - | func | |
817 | - | func | |
818 | - | let | |
819 | - | ( | |
820 | - | } | |
821 | - | ||
822 | - | let | |
823 | - | let | |
824 | - | let | |
825 | - | let | |
826 | - | func | |
827 | - | then | |
828 | - | else | |
829 | - | ||
830 | - | func | |
831 | - | then | |
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 | |
832 | 867 | else throw("List size exceeds 6") | |
833 | 868 | ||
834 | - | | |
835 | - | } | |
836 | - | makeString( | |
837 | - | } | |
838 | - | ||
839 | - | ||
840 | - | func | |
841 | - | func | |
842 | - | let | |
843 | - | $Tuple2(( | |
844 | - | } | |
845 | - | ||
846 | - | let | |
847 | - | let | |
848 | - | let | |
849 | - | func | |
850 | - | then | |
851 | - | else | |
852 | - | ||
853 | - | func | |
854 | - | then | |
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 | |
855 | 890 | else throw("List size exceeds 6") | |
856 | 891 | ||
857 | - | | |
858 | - | } | |
859 | - | ||
860 | - | ||
861 | - | func | |
862 | - | let | |
863 | - | let | |
864 | - | if (( | |
865 | - | then $Tuple2(makeString( | |
866 | - | else if (( | |
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)) | |
867 | 902 | then { | |
868 | - | func | |
869 | - | ||
870 | - | let | |
871 | - | let | |
872 | - | let | |
873 | - | let | |
874 | - | func | |
875 | - | then | |
876 | - | else | |
877 | - | ||
878 | - | func | |
879 | - | then | |
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 | |
880 | 915 | else throw("List size exceeds 6") | |
881 | 916 | ||
882 | - | | |
917 | + | cZ(cW(cW(cW(cW(cW(cW(cV, 0), 1), 2), 3), 4), 5), 6) | |
883 | 918 | } | |
884 | - | $Tuple2(makeString( | |
919 | + | $Tuple2(makeString(dc, "_"), makeString(eH, "_")) | |
885 | 920 | } | |
886 | 921 | else { | |
887 | - | func | |
888 | - | let | |
889 | - | $Tuple2(( | |
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)))) | |
890 | 925 | } | |
891 | 926 | ||
892 | - | let | |
893 | - | let | |
894 | - | let | |
895 | - | let | |
896 | - | func | |
897 | - | then | |
898 | - | else | |
899 | - | ||
900 | - | func | |
901 | - | then | |
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 | |
902 | 937 | else throw("List size exceeds 6") | |
903 | 938 | ||
904 | - | | |
939 | + | cZ(cW(cW(cW(cW(cW(cW(cV, 0), 1), 2), 3), 4), 5), 6) | |
905 | 940 | } | |
906 | - | $Tuple2(makeString( | |
941 | + | $Tuple2(makeString(dc._1, "_"), makeString(dc._2, "_")) | |
907 | 942 | } | |
908 | 943 | } | |
909 | 944 | ||
910 | 945 | ||
911 | - | func | |
912 | - | then | |
913 | - | else -( | |
914 | - | ||
915 | - | ||
916 | - | let | |
917 | - | ||
918 | - | func | |
919 | - | let | |
920 | - | let | |
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)) | |
921 | 956 | then "A" | |
922 | - | else if (( | |
957 | + | else if ((eT[1] > eU)) | |
923 | 958 | then "B" | |
924 | - | else if (( | |
959 | + | else if ((eT[2] > eU)) | |
925 | 960 | then "C" | |
926 | - | else if (( | |
961 | + | else if ((eT[3] > eU)) | |
927 | 962 | then "D" | |
928 | - | else if (( | |
963 | + | else if ((eT[4] > eU)) | |
929 | 964 | then "E" | |
930 | 965 | else "F" | |
931 | - | | |
932 | - | } | |
933 | - | ||
934 | - | ||
935 | - | func | |
936 | - | let | |
937 | - | func | |
938 | - | ||
939 | - | let | |
940 | - | let | |
941 | - | let | |
942 | - | let | |
943 | - | func | |
944 | - | then | |
945 | - | else | |
946 | - | ||
947 | - | func | |
948 | - | then | |
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 | |
949 | 984 | else throw("List size exceeds 5") | |
950 | 985 | ||
951 | - | | |
952 | - | } | |
953 | - | | |
954 | - | } | |
955 | - | ||
956 | - | ||
957 | - | func | |
958 | - | let | |
959 | - | [toString(valueOrElse(parseInt( | |
960 | - | then | |
961 | - | else "0_0_0_0_0_0", if ((size(split( | |
962 | - | then | |
963 | - | else "0_0_0_0_0_0", | |
964 | - | } | |
965 | - | ||
966 | - | ||
967 | - | func | |
968 | - | let | |
969 | - | (( | |
970 | - | } | |
971 | - | ||
972 | - | ||
973 | - | func | |
974 | - | let | |
975 | - | func | |
976 | - | ||
977 | - | func | |
978 | - | let | |
979 | - | let | |
980 | - | $Tuple2(( | |
981 | - | } | |
982 | - | ||
983 | - | let | |
984 | - | let | |
985 | - | let | |
986 | - | let | |
987 | - | func | |
988 | - | then | |
989 | - | else | |
990 | - | ||
991 | - | func | |
992 | - | then | |
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 | |
993 | 1028 | else throw("List size exceeds 6") | |
994 | 1029 | ||
995 | - | | |
996 | - | } | |
997 | - | let | |
998 | - | let | |
999 | - | let | |
1000 | - | let | |
1001 | - | func | |
1002 | - | then | |
1003 | - | else | |
1004 | - | ||
1005 | - | func | |
1006 | - | then | |
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 | |
1007 | 1042 | else throw("List size exceeds 6") | |
1008 | 1043 | ||
1009 | - | | |
1010 | - | } | |
1011 | - | let | |
1044 | + | fq(fp(fp(fp(fp(fp(fp(cV, 0), 1), 2), 3), 4), 5), 6) | |
1045 | + | } | |
1046 | + | let fr = if ((fj == "")) | |
1012 | 1047 | then 0 | |
1013 | - | else ( let | |
1014 | - | let | |
1015 | - | let | |
1016 | - | func | |
1017 | - | then | |
1018 | - | else | |
1019 | - | ||
1020 | - | func | |
1021 | - | then | |
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 | |
1022 | 1057 | else throw("List size exceeds 50") | |
1023 | 1058 | ||
1024 | - | | |
1025 | - | (( | |
1026 | - | } | |
1027 | - | ||
1028 | - | ||
1029 | - | func | |
1030 | - | let | |
1031 | - | let | |
1032 | - | let | |
1033 | - | let | |
1034 | - | let | |
1035 | - | let | |
1036 | - | then makeString(["0", toString( | |
1037 | - | else { | |
1038 | - | let | |
1039 | - | let | |
1040 | - | let | |
1041 | - | then parseIntValue( | |
1042 | - | else | |
1043 | - | makeString([toString( | |
1044 | - | } | |
1045 | - | [ | |
1046 | - | then | |
1047 | - | else "0_0_0_0_0_0", if ((size(split( | |
1048 | - | then | |
1049 | - | else "0_0_0_0_0_0", | |
1050 | - | } | |
1051 | - | ||
1052 | - | ||
1053 | - | func | |
1054 | - | let | |
1055 | - | let | |
1056 | - | (( | |
1057 | - | } | |
1058 | - | ||
1059 | - | ||
1060 | - | func | |
1061 | - | let | |
1062 | - | then ((( | |
1063 | - | else -((((-( | |
1064 | - | ( | |
1065 | - | } | |
1066 | - | ||
1067 | - | ||
1068 | - | func | |
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)) | |
1069 | 1104 | then throw("cargoListStr should contain exactly 2 ':' separators") | |
1070 | 1105 | else { | |
1071 | - | let | |
1072 | - | let | |
1073 | - | let | |
1106 | + | let fP = split(fN[0], "_") | |
1107 | + | let fQ = split(fN[1], "_") | |
1108 | + | let fR = if ((fN[2] == "")) | |
1074 | 1109 | then nil | |
1075 | - | else split( | |
1076 | - | if ((size( | |
1110 | + | else split(fN[2], "_") | |
1111 | + | if ((size(fP) != Z)) | |
1077 | 1112 | then throw("All 6 resources should be passed") | |
1078 | - | else if ((size( | |
1113 | + | else if ((size(fQ) != Z)) | |
1079 | 1114 | then throw("All 6 materials should be passed") | |
1080 | 1115 | else { | |
1081 | - | let | |
1082 | - | let | |
1083 | - | let | |
1084 | - | let | |
1116 | + | let eJ = fG(fi) | |
1117 | + | let fS = split(fi[ap], "_") | |
1118 | + | let fT = split(fi[aq], "_") | |
1119 | + | let fU = if ((fi[ar] == "")) | |
1085 | 1120 | then nil | |
1086 | - | else split( | |
1087 | - | let | |
1088 | - | let | |
1089 | - | let | |
1121 | + | else split(fi[ar], "_") | |
1122 | + | let eH = split(fO[ay], "_") | |
1123 | + | let fV = split(fO[az], "_") | |
1124 | + | let fW = if ((fO[aA] == "")) | |
1090 | 1125 | then nil | |
1091 | - | else split( | |
1092 | - | func | |
1093 | - | let | |
1094 | - | let | |
1095 | - | let | |
1096 | - | let | |
1097 | - | if (( | |
1098 | - | then $Tuple4(( | |
1099 | - | else if (( | |
1100 | - | then if (( | |
1101 | - | then throw((((("Attempt to take " + | |
1102 | - | else $Tuple4(( | |
1103 | - | else if ((-( | |
1104 | - | then throw((((("Attempt to take " + toString(-( | |
1105 | - | else $Tuple4(( | |
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)) | |
1106 | 1141 | } | |
1107 | 1142 | ||
1108 | - | let | |
1109 | - | let | |
1110 | - | let | |
1111 | - | let | |
1112 | - | func | |
1113 | - | then | |
1114 | - | else | |
1115 | - | ||
1116 | - | func | |
1117 | - | then | |
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 | |
1118 | 1153 | else throw("List size exceeds 6") | |
1119 | 1154 | ||
1120 | - | | |
1155 | + | cZ(cW(cW(cW(cW(cW(cW(cV, 0), 1), 2), 3), 4), 5), 6) | |
1121 | 1156 | } | |
1122 | - | func | |
1123 | - | let | |
1124 | - | let | |
1125 | - | let | |
1126 | - | let | |
1127 | - | if (( | |
1128 | - | then $Tuple4(( | |
1129 | - | else if (( | |
1130 | - | then if (( | |
1131 | - | then throw((((("Attempt to take " + | |
1132 | - | else $Tuple4(( | |
1133 | - | else if ((-( | |
1134 | - | then throw((((("Attempt to take " + toString(-( | |
1135 | - | else $Tuple4(( | |
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)) | |
1136 | 1171 | } | |
1137 | 1172 | ||
1138 | - | let | |
1139 | - | let | |
1140 | - | let | |
1141 | - | let | |
1142 | - | func | |
1143 | - | then | |
1144 | - | else | |
1145 | - | ||
1146 | - | func | |
1147 | - | then | |
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 | |
1148 | 1183 | else throw("List size exceeds 6") | |
1149 | 1184 | ||
1150 | - | | |
1185 | + | fq(fp(fp(fp(fp(fp(fp(cV, 0), 1), 2), 3), 4), 5), 6) | |
1151 | 1186 | } | |
1152 | - | func | |
1153 | - | let | |
1154 | - | let | |
1155 | - | let | |
1156 | - | then parseIntValue( | |
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]) | |
1157 | 1192 | else 0 | |
1158 | - | let | |
1159 | - | then parseIntValue( | |
1193 | + | let gg = if ((size(fW) > eu)) | |
1194 | + | then parseIntValue(fW[eu]) | |
1160 | 1195 | else 0 | |
1161 | - | if (( | |
1162 | - | then $Tuple4(( | |
1163 | - | else if (( | |
1164 | - | then if (( | |
1165 | - | then throw((((("Attempt to take " + | |
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")) | |
1166 | 1201 | else { | |
1167 | - | let | |
1168 | - | $Tuple4(( | |
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)) | |
1169 | 1204 | } | |
1170 | - | else if ((-( | |
1171 | - | then throw((((("Attempt to take " + toString(-( | |
1205 | + | else if ((-(fY) > gf)) | |
1206 | + | then throw((((("Attempt to take " + toString(-(fY))) + " from warehouse, but only ") + toString(gf)) + " available")) | |
1172 | 1207 | else { | |
1173 | - | let | |
1174 | - | $Tuple4(( | |
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)) | |
1175 | 1210 | } | |
1176 | 1211 | } | |
1177 | 1212 | ||
1178 | - | let | |
1213 | + | let fe = if ((size(fR) != 0)) | |
1179 | 1214 | then { | |
1180 | - | let | |
1181 | - | let | |
1182 | - | let | |
1183 | - | func | |
1184 | - | then | |
1185 | - | else | |
1186 | - | ||
1187 | - | func | |
1188 | - | then | |
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 | |
1189 | 1224 | else throw("List size exceeds 50") | |
1190 | 1225 | ||
1191 | - | | |
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) | |
1192 | 1227 | } | |
1193 | - | else $Tuple4(0, | |
1194 | - | let | |
1195 | - | if (( | |
1196 | - | then throw((((("Attempt to put total " + toString( | |
1197 | - | else $Tuple7(makeString( | |
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) | |
1198 | 1233 | } | |
1199 | 1234 | } | |
1200 | 1235 | ||
1201 | 1236 | ||
1202 | - | func | |
1203 | - | let | |
1204 | - | let | |
1205 | - | let | |
1206 | - | let | |
1207 | - | let | |
1208 | - | let | |
1209 | - | let | |
1210 | - | let | |
1211 | - | let | |
1212 | - | let | |
1213 | - | $Tuple2([IntegerEntry( | |
1214 | - | } | |
1215 | - | ||
1216 | - | ||
1217 | - | func | |
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))) | |
1218 | 1253 | then throw("signature does not match") | |
1219 | 1254 | else { | |
1220 | - | let | |
1221 | - | let | |
1222 | - | let | |
1223 | - | let | |
1224 | - | let | |
1225 | - | let | |
1226 | - | let | |
1227 | - | let | |
1228 | - | if (if (( | |
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))) | |
1229 | 1264 | then true | |
1230 | - | else ((lastBlock.timestamp - | |
1231 | - | then throw(((("signature outdated: logTime=" + toString( | |
1265 | + | else ((lastBlock.timestamp - cf) > gA)) | |
1266 | + | then throw(((("signature outdated: logTime=" + toString(gA)) + ", bcTime=") + toString(lastBlock.timestamp))) | |
1232 | 1267 | else { | |
1233 | - | let | |
1234 | - | let | |
1235 | - | if (( | |
1236 | - | then throw(((("Tx ids don't match! In state: " + | |
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)) | |
1237 | 1272 | else { | |
1238 | - | let | |
1239 | - | let | |
1240 | - | let | |
1241 | - | let | |
1242 | - | if (( | |
1243 | - | then throw(((("oldHealth=" + toString( | |
1244 | - | else if ((0 >= | |
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)) | |
1245 | 1280 | then throw("You can't fly with zero health") | |
1246 | 1281 | else { | |
1247 | - | let | |
1248 | - | then | |
1282 | + | let gG = if ((size(gu) > cI)) | |
1283 | + | then gu[cI] | |
1249 | 1284 | else "" | |
1250 | - | let | |
1251 | - | then | |
1285 | + | let gH = if ((size(gu) > cJ)) | |
1286 | + | then gu[cJ] | |
1252 | 1287 | else "" | |
1253 | - | let | |
1254 | - | then ( | |
1288 | + | let gI = if (if ((gx > 0)) | |
1289 | + | then (gG == "$") | |
1255 | 1290 | else false) | |
1256 | - | then | |
1291 | + | then bX(invoke(bJ, "sendUsdtPrize", [ba], nil)) | |
1257 | 1292 | else 0 | |
1258 | - | $Tuple5( | |
1293 | + | $Tuple5(gx, q, gI, gz, gH) | |
1259 | 1294 | } | |
1260 | 1295 | } | |
1261 | 1296 | } | |
1262 | 1297 | } | |
1263 | 1298 | ||
1264 | 1299 | ||
1265 | - | func | |
1266 | - | let | |
1267 | - | let | |
1268 | - | let | |
1269 | - | let | |
1270 | - | let | |
1271 | - | let | |
1272 | - | let | |
1273 | - | let | |
1274 | - | if ((0 >= | |
1275 | - | then $Tuple3([IntegerEntry( | |
1276 | - | else { | |
1277 | - | let | |
1278 | - | let | |
1279 | - | $Tuple3(((( | |
1280 | - | } | |
1281 | - | } | |
1282 | - | ||
1283 | - | ||
1284 | - | func | |
1285 | - | let | |
1286 | - | let | |
1287 | - | let | |
1288 | - | let | |
1289 | - | (( | |
1290 | - | } | |
1291 | - | ||
1292 | - | ||
1293 | - | func | |
1294 | - | let | |
1295 | - | then $Tuple2( | |
1296 | - | else { | |
1297 | - | let | |
1298 | - | let | |
1299 | - | let | |
1300 | - | if (( | |
1301 | - | then throw((("Duck location type is " + | |
1302 | - | else $Tuple2( | |
1303 | - | } | |
1304 | - | let | |
1305 | - | let | |
1306 | - | let | |
1307 | - | let | |
1308 | - | let | |
1309 | - | let | |
1310 | - | if (( | |
1311 | - | then throw(( | |
1312 | - | else { | |
1313 | - | let | |
1314 | - | $Tuple4( | |
1315 | - | } | |
1316 | - | } | |
1317 | - | ||
1318 | - | ||
1319 | - | func | |
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)) | |
1320 | 1355 | then throw("Negative amount") | |
1321 | 1356 | else { | |
1322 | - | let | |
1323 | - | let | |
1324 | - | let | |
1325 | - | let | |
1326 | - | if ((0 > | |
1327 | - | then throw(((("Saved timestamp is in future, saved = " + toString( | |
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))) | |
1328 | 1363 | else { | |
1329 | - | let | |
1330 | - | let | |
1331 | - | let | |
1332 | - | if (( | |
1333 | - | then throw(((("Not enough resources, available = " + toString( | |
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))) | |
1334 | 1369 | else { | |
1335 | - | let | |
1336 | - | let | |
1337 | - | let | |
1338 | - | let | |
1339 | - | let | |
1340 | - | let | |
1341 | - | let | |
1342 | - | let | |
1343 | - | let | |
1344 | - | if (if (( | |
1345 | - | then ( | |
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) | |
1346 | 1381 | else false) | |
1347 | - | then throw((("Only " + toString( | |
1382 | + | then throw((("Only " + toString(eJ)) + " space left in warehouse")) | |
1348 | 1383 | else { | |
1349 | - | let | |
1350 | - | let | |
1351 | - | let | |
1352 | - | let | |
1353 | - | let | |
1354 | - | then $Tuple4( | |
1355 | - | else if (( | |
1356 | - | then $Tuple4( | |
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])) | |
1357 | 1392 | else { | |
1358 | - | let | |
1359 | - | let | |
1360 | - | $Tuple4( | |
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)) | |
1361 | 1396 | } | |
1362 | - | let | |
1363 | - | let | |
1364 | - | let | |
1365 | - | let | |
1366 | - | $Tuple5([IntegerEntry( | |
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]], "_")]) | |
1367 | 1402 | } | |
1368 | 1403 | } | |
1369 | 1404 | } | |
1370 | 1405 | } | |
1371 | 1406 | ||
1372 | 1407 | ||
1373 | - | func | |
1374 | - | let | |
1375 | - | let | |
1376 | - | let | |
1377 | - | | |
1378 | - | } | |
1379 | - | ||
1380 | - | ||
1381 | - | func | |
1382 | - | let b = toString( | |
1383 | - | let | |
1384 | - | let | |
1385 | - | let | |
1386 | - | let | |
1387 | - | if (( | |
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)) | |
1388 | 1423 | then throw("Currently max infrastructure level = 3") | |
1389 | 1424 | else { | |
1390 | - | let | |
1391 | - | let | |
1392 | - | if (if (!( | |
1393 | - | then ( | |
1425 | + | let Q = (hu + 1) | |
1426 | + | let hv = fraction(ci, (gO * Q), bq) | |
1427 | + | if (if (!(de)) | |
1428 | + | then (hs != hv) | |
1394 | 1429 | else false) | |
1395 | - | then throw(("Payment attached should be " + toString( | |
1430 | + | then throw(("Payment attached should be " + toString(hv))) | |
1396 | 1431 | else { | |
1397 | - | let | |
1398 | - | let | |
1399 | - | let | |
1400 | - | let | |
1401 | - | let | |
1402 | - | let | |
1403 | - | let | |
1404 | - | let | |
1405 | - | let | |
1406 | - | let | |
1407 | - | let | |
1408 | - | let | |
1409 | - | $Tuple3(([IntegerEntry( | |
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) | |
1410 | 1445 | } | |
1411 | 1446 | } | |
1412 | 1447 | } | |
1413 | 1448 | ||
1414 | 1449 | ||
1415 | - | func | |
1450 | + | func hD (q,hE) = if (!(bg)) | |
1416 | 1451 | then $Tuple2(nil, 0) | |
1417 | 1452 | else { | |
1418 | - | let | |
1419 | - | let | |
1420 | - | let | |
1421 | - | let | |
1422 | - | let | |
1423 | - | let | |
1424 | - | $Tuple2([IntegerEntry( | |
1425 | - | } | |
1426 | - | ||
1427 | - | ||
1428 | - | func | |
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)) | |
1429 | 1464 | then $Tuple2(nil, 0) | |
1430 | 1465 | else { | |
1431 | - | let | |
1432 | - | let | |
1433 | - | let | |
1434 | - | let | |
1435 | - | let | |
1436 | - | let | |
1437 | - | $Tuple2([IntegerEntry( | |
1438 | - | } | |
1439 | - | ||
1440 | - | ||
1441 | - | func | |
1442 | - | let | |
1443 | - | let | |
1444 | - | let | |
1445 | - | if (!(isDefined( | |
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))) | |
1446 | 1481 | then throw("You are not eligible for ONBOARD artifact") | |
1447 | 1482 | else { | |
1448 | - | let | |
1449 | - | let | |
1450 | - | if (isDefined( | |
1451 | - | then throw(("You already used your ONBOARD artifact on duck " + value( | |
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))) | |
1452 | 1487 | else { | |
1453 | - | let | |
1454 | - | let | |
1455 | - | if (isDefined( | |
1456 | - | then throw(((("The duck " + | |
1457 | - | else ([StringEntry( | |
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) | |
1458 | 1493 | } | |
1459 | 1494 | } | |
1460 | 1495 | } | |
1461 | 1496 | ||
1462 | 1497 | ||
1463 | - | func | |
1464 | - | let | |
1465 | - | let | |
1466 | - | let | |
1467 | - | let | |
1468 | - | if ((valueOrElse(getInteger( | |
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)) | |
1469 | 1504 | then throw("Presale artifact is already activated") | |
1470 | - | else if ((parseIntValue( | |
1471 | - | then throw(((( | |
1505 | + | else if ((parseIntValue(dX._3[bN]) > cr)) | |
1506 | + | then throw((((W + " ") + aN) + " is not eligible for presale artifact")) | |
1472 | 1507 | else { | |
1473 | - | let | |
1474 | - | (((( | |
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, ":"))) | |
1475 | 1510 | } | |
1476 | 1511 | } | |
1477 | 1512 | ||
1478 | 1513 | ||
1479 | - | func | |
1480 | - | let | |
1481 | - | func | |
1482 | - | let | |
1483 | - | let | |
1484 | - | let | |
1485 | - | let | |
1486 | - | if (( | |
1487 | - | then throw(( | |
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")) | |
1488 | 1523 | else { | |
1489 | - | let | |
1490 | - | let | |
1491 | - | if (if (( | |
1492 | - | then ( | |
1524 | + | let hd = split(gZ.description, "_") | |
1525 | + | let go = hd[bQ] | |
1526 | + | if (if ((cR._3 != "")) | |
1527 | + | then (cR._3 != go) | |
1493 | 1528 | else false) | |
1494 | 1529 | then throw("Lands should be on the same continent to merge") | |
1495 | 1530 | else { | |
1496 | - | let | |
1497 | - | let | |
1498 | - | let | |
1499 | - | let | |
1500 | - | let | |
1501 | - | let | |
1502 | - | let | |
1503 | - | let | |
1504 | - | let | |
1505 | - | if (("S" == | |
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)) | |
1506 | 1541 | then 3 | |
1507 | - | else if (("M" == | |
1542 | + | else if (("M" == bj)) | |
1508 | 1543 | then 4 | |
1509 | - | else if (("L" == | |
1544 | + | else if (("L" == bj)) | |
1510 | 1545 | then 5 | |
1511 | - | else if (("XL" == | |
1546 | + | else if (("XL" == bj)) | |
1512 | 1547 | then 6 | |
1513 | 1548 | else throw("Only S, M, L, XL can merge") | |
1514 | 1549 | } | |
1515 | - | if (( | |
1550 | + | if ((fx != ic)) | |
1516 | 1551 | then throw("All lands should be maxed to merge") | |
1517 | 1552 | else { | |
1518 | - | let | |
1519 | - | let | |
1520 | - | let | |
1521 | - | if ((0 > | |
1522 | - | then throw(((("Saved timestamp is in future, saved = " + toString( | |
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))) | |
1523 | 1558 | else { | |
1524 | - | let | |
1525 | - | let | |
1526 | - | let | |
1527 | - | let | |
1528 | - | let | |
1529 | - | let | |
1530 | - | if (!(isDefined( | |
1531 | - | then throw(("Your staked lands don't contain " + | |
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)) | |
1532 | 1567 | else { | |
1533 | - | let | |
1534 | - | let | |
1535 | - | $Tuple8( | |
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)) | |
1536 | 1571 | } | |
1537 | 1572 | } | |
1538 | 1573 | } | |
1540 | 1575 | } | |
1541 | 1576 | } | |
1542 | 1577 | ||
1543 | - | let | |
1544 | - | let | |
1545 | - | let | |
1546 | - | let | |
1547 | - | let | |
1548 | - | let | |
1549 | - | then split_51C(value( | |
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), "_") | |
1550 | 1585 | else nil | |
1551 | - | let | |
1552 | - | let | |
1553 | - | let | |
1554 | - | let | |
1555 | - | func | |
1556 | - | then | |
1557 | - | else | |
1558 | - | ||
1559 | - | func | |
1560 | - | then | |
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 | |
1561 | 1596 | else throw("List size exceeds 5") | |
1562 | 1597 | ||
1563 | - | | |
1564 | - | } | |
1565 | - | let | |
1566 | - | let | |
1567 | - | let | |
1568 | - | let | |
1569 | - | let | |
1570 | - | let | |
1571 | - | let | |
1572 | - | let | |
1573 | - | let | |
1574 | - | let | |
1575 | - | let | |
1576 | - | $Tuple2(((((((((((((((( | |
1577 | - | then StringEntry( | |
1578 | - | else DeleteEntry( | |
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)) | |
1579 | 1614 | then 0 | |
1580 | - | else ( | |
1581 | - | } | |
1582 | - | ||
1583 | - | ||
1584 | - | func | |
1585 | - | ||
1586 | - | ||
1587 | - | func | |
1588 | - | let | |
1589 | - | if (if (!( | |
1590 | - | then ( | |
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) | |
1591 | 1626 | else false) | |
1592 | - | then throw(("Payment attached should be " + toString( | |
1593 | - | else | |
1594 | - | } | |
1595 | - | ||
1596 | - | ||
1597 | - | func | |
1598 | - | let | |
1599 | - | if (if (!( | |
1600 | - | then ( | |
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) | |
1601 | 1636 | else false) | |
1602 | - | then throw(("Payment attached should be " + toString( | |
1603 | - | else | |
1604 | - | } | |
1605 | - | ||
1606 | - | ||
1607 | - | func | |
1608 | - | let | |
1609 | - | if (if (!( | |
1610 | - | then ( | |
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) | |
1611 | 1646 | else false) | |
1612 | - | then throw(("Payment attached should be " + toString( | |
1613 | - | else | |
1614 | - | } | |
1615 | - | ||
1616 | - | ||
1617 | - | func | |
1618 | - | let | |
1619 | - | let | |
1620 | - | if ((4 == | |
1621 | - | then | |
1622 | - | else if ((3 == | |
1623 | - | then | |
1624 | - | else if ((5 == | |
1625 | - | then | |
1626 | - | else if ((2 == | |
1627 | - | then | |
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) | |
1628 | 1663 | else throw("Unknown merge") | |
1629 | 1664 | } | |
1630 | - | | |
1631 | - | } | |
1632 | - | ||
1633 | - | ||
1634 | - | func | |
1635 | - | then valueOrElse(getBoolean( | |
1665 | + | it | |
1666 | + | } | |
1667 | + | ||
1668 | + | ||
1669 | + | func iu (eu) = if (if ((eu.originCaller != bJ)) | |
1670 | + | then valueOrElse(getBoolean(aY()), false) | |
1636 | 1671 | else false) | |
1637 | 1672 | then throw("Contracts are under maintenance") | |
1638 | - | else StringEntry( | |
1639 | - | ||
1640 | - | ||
1641 | - | @Callable( | |
1642 | - | func constructorV1 ( | |
1673 | + | else StringEntry(aB(toString(eu.originCaller)), toBase58String(eu.transactionId)) | |
1674 | + | ||
1675 | + | ||
1676 | + | @Callable(eu) | |
1677 | + | func constructorV1 (iv) = if ((eu.caller != this)) | |
1643 | 1678 | then throw("Permission denied") | |
1644 | - | else [StringEntry( | |
1645 | - | ||
1646 | - | ||
1647 | - | ||
1648 | - | @Callable( | |
1649 | - | func setBlocked ( | |
1679 | + | else [StringEntry(bD(), iv)] | |
1680 | + | ||
1681 | + | ||
1682 | + | ||
1683 | + | @Callable(eu) | |
1684 | + | func setBlocked (iw) = if ((eu.caller != this)) | |
1650 | 1685 | then throw("permission denied") | |
1651 | - | else [BooleanEntry( | |
1652 | - | ||
1653 | - | ||
1654 | - | ||
1655 | - | @Callable( | |
1686 | + | else [BooleanEntry(aY(), iw)] | |
1687 | + | ||
1688 | + | ||
1689 | + | ||
1690 | + | @Callable(eu) | |
1656 | 1691 | func stakeLand () = { | |
1657 | - | let | |
1658 | - | if ((size( | |
1692 | + | let ix = iu(eu) | |
1693 | + | if ((size(eu.payments) != 1)) | |
1659 | 1694 | then throw("Exactly one payment required") | |
1660 | 1695 | else { | |
1661 | - | let | |
1662 | - | let | |
1663 | - | let | |
1664 | - | if (( | |
1665 | - | then throw((("NFT " + | |
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")) | |
1666 | 1701 | else { | |
1667 | - | let | |
1668 | - | if (( | |
1702 | + | let gZ = value(assetInfo(aD)) | |
1703 | + | if ((gZ.issuer != this)) | |
1669 | 1704 | then throw("Unknown issuer of token") | |
1670 | - | else if (!(contains( | |
1671 | - | then throw((("Only NFT " + | |
1705 | + | else if (!(contains(gZ.name, W))) | |
1706 | + | then throw((("Only NFT " + W) + " tokens are accepted")) | |
1672 | 1707 | else { | |
1673 | - | let | |
1674 | - | let | |
1675 | - | then dropRight( | |
1676 | - | else if (contains( | |
1677 | - | then dropRight( | |
1678 | - | else dropRight( | |
1679 | - | if (!(isDefined(parseInt( | |
1680 | - | then throw(("Cannot parse land number from " + | |
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)) | |
1681 | 1716 | else { | |
1682 | - | let | |
1683 | - | let | |
1684 | - | if (isDefined(getInteger( | |
1685 | - | then throw((("NFT " + | |
1717 | + | let aN = toBase58String(aD) | |
1718 | + | let ha = aF(aN) | |
1719 | + | if (isDefined(getInteger(ha))) | |
1720 | + | then throw((("NFT " + gZ.name) + " is already staked")) | |
1686 | 1721 | else { | |
1687 | - | let | |
1688 | - | let | |
1689 | - | let | |
1690 | - | let | |
1691 | - | let | |
1692 | - | let | |
1693 | - | let | |
1694 | - | let | |
1695 | - | then split_51C(value( | |
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), "_") | |
1696 | 1731 | else nil | |
1697 | - | if (containsElement( | |
1698 | - | then throw(("Your staked lands already contain " + | |
1732 | + | if (containsElement(id, aN)) | |
1733 | + | then throw(("Your staked lands already contain " + aN)) | |
1699 | 1734 | else { | |
1700 | - | let | |
1701 | - | let | |
1702 | - | let | |
1703 | - | let | |
1704 | - | $Tuple2([IntegerEntry( | |
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) | |
1705 | 1740 | } | |
1706 | 1741 | } | |
1707 | 1742 | } | |
1712 | 1747 | ||
1713 | 1748 | ||
1714 | 1749 | ||
1715 | - | @Callable( | |
1716 | - | func unstakeLand ( | |
1717 | - | let | |
1718 | - | if ((size( | |
1750 | + | @Callable(eu) | |
1751 | + | func unstakeLand (gU) = { | |
1752 | + | let ix = iu(eu) | |
1753 | + | if ((size(eu.payments) != 0)) | |
1719 | 1754 | then throw("No payments required") | |
1720 | 1755 | else { | |
1721 | - | let b = toString( | |
1722 | - | let | |
1723 | - | let | |
1724 | - | let | |
1725 | - | let | |
1726 | - | let | |
1727 | - | let | |
1728 | - | let | |
1729 | - | let | |
1730 | - | let | |
1731 | - | if (!(isDefined( | |
1732 | - | then throw(("Your staked lands don't contain " + | |
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)) | |
1733 | 1768 | else { | |
1734 | - | let | |
1735 | - | let | |
1736 | - | if (( | |
1737 | - | then throw(("Your gWL are taking part in voting, cannot unstake until " + toString( | |
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))) | |
1738 | 1773 | else { | |
1739 | - | let | |
1740 | - | if (( | |
1741 | - | then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString( | |
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))) | |
1742 | 1777 | else { | |
1743 | - | let | |
1744 | - | let | |
1745 | - | let | |
1778 | + | let im = bT(b) | |
1779 | + | let in = valueOrElse(getInteger(im), 0) | |
1780 | + | let iF = if ((gO > in)) | |
1746 | 1781 | then 0 | |
1747 | - | else ( | |
1748 | - | let | |
1749 | - | $Tuple2([ScriptTransfer( | |
1750 | - | then StringEntry( | |
1751 | - | else DeleteEntry( | |
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) | |
1752 | 1787 | } | |
1753 | 1788 | } | |
1754 | 1789 | } | |
1757 | 1792 | ||
1758 | 1793 | ||
1759 | 1794 | ||
1760 | - | @Callable( | |
1795 | + | @Callable(eu) | |
1761 | 1796 | func stakeDuck () = { | |
1762 | - | let | |
1763 | - | if ((size( | |
1797 | + | let ix = iu(eu) | |
1798 | + | if ((size(eu.payments) != 1)) | |
1764 | 1799 | then throw("Exactly one payment required") | |
1765 | 1800 | else { | |
1766 | - | let | |
1767 | - | let | |
1768 | - | let | |
1769 | - | if (( | |
1770 | - | then throw((("NFT " + | |
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")) | |
1771 | 1806 | else { | |
1772 | - | let | |
1773 | - | if (if (( | |
1774 | - | then ( | |
1807 | + | let gZ = value(assetInfo(aD)) | |
1808 | + | if (if ((gZ.issuer != cb)) | |
1809 | + | then (gZ.issuer != cc) | |
1775 | 1810 | else false) | |
1776 | - | then throw((("Unknown issuer of " + | |
1777 | - | else if (!(contains( | |
1778 | - | then throw((("Only NFT " + | |
1811 | + | then throw((("Unknown issuer of " + X) + " token")) | |
1812 | + | else if (!(contains(gZ.name, X))) | |
1813 | + | then throw((("Only NFT " + X) + " tokens are accepted")) | |
1779 | 1814 | else { | |
1780 | - | let | |
1781 | - | let | |
1782 | - | if (isDefined(getInteger( | |
1783 | - | then throw((("NFT " + | |
1784 | - | else if (isDefined(getString( | |
1785 | - | then throw(("You already staked one duck: " + | |
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)) | |
1786 | 1821 | else { | |
1787 | - | let | |
1788 | - | let | |
1789 | - | let | |
1790 | - | let | |
1791 | - | let | |
1792 | - | let | |
1793 | - | let | |
1794 | - | ([IntegerEntry( | |
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)) | |
1795 | 1830 | then nil | |
1796 | - | else ([StringEntry( | |
1831 | + | else ([StringEntry(iH, ad)] ++ (if (isDefined(iJ)) | |
1797 | 1832 | then nil | |
1798 | - | else (([StringEntry( | |
1833 | + | else (([StringEntry(fd, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(gD, iK)) :+ ix))))) | |
1799 | 1834 | } | |
1800 | 1835 | } | |
1801 | 1836 | } | |
1804 | 1839 | ||
1805 | 1840 | ||
1806 | 1841 | ||
1807 | - | @Callable( | |
1808 | - | func unstakeDuck ( | |
1809 | - | let | |
1810 | - | if ((size( | |
1842 | + | @Callable(eu) | |
1843 | + | func unstakeDuck (iG) = { | |
1844 | + | let ix = iu(eu) | |
1845 | + | if ((size(eu.payments) != 0)) | |
1811 | 1846 | then throw("No payments required") | |
1812 | 1847 | else { | |
1813 | - | let | |
1814 | - | let | |
1815 | - | let | |
1816 | - | let | |
1817 | - | if (!(isDefined(getInteger( | |
1818 | - | then throw((("NFT " + | |
1819 | - | else if (!(isDefined(getString( | |
1820 | - | then throw((("The duck " + | |
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")) | |
1821 | 1856 | else { | |
1822 | - | let | |
1823 | - | if (( | |
1857 | + | let hc = valueOrErrorMessage(getString(aU(toBase58String(aD))), (("NFT " + gZ.name) + " is orphaned")) | |
1858 | + | if ((hc != bw)) | |
1824 | 1859 | then throw("Staked NFT is not yours") | |
1825 | 1860 | else { | |
1826 | - | let | |
1827 | - | let | |
1828 | - | let | |
1829 | - | if (( | |
1830 | - | then throw((("Please heal your duck to " + toString( | |
1831 | - | else [ScriptTransfer( | |
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] | |
1832 | 1867 | } | |
1833 | 1868 | } | |
1834 | 1869 | } | |
1836 | 1871 | ||
1837 | 1872 | ||
1838 | 1873 | ||
1839 | - | @Callable( | |
1840 | - | func claimRes ( | |
1841 | - | let | |
1842 | - | if ((size( | |
1874 | + | @Callable(eu) | |
1875 | + | func claimRes (fK,iL) = { | |
1876 | + | let ix = iu(eu) | |
1877 | + | if ((size(eu.payments) != 0)) | |
1843 | 1878 | then throw("No payments required") | |
1844 | 1879 | else { | |
1845 | - | let b = toString( | |
1846 | - | let | |
1847 | - | let | |
1848 | - | $Tuple2((((( | |
1849 | - | } | |
1850 | - | } | |
1851 | - | ||
1852 | - | ||
1853 | - | ||
1854 | - | @Callable( | |
1855 | - | func claimResToWH ( | |
1856 | - | let | |
1857 | - | if ((size( | |
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)) | |
1858 | 1893 | then throw("No payments required") | |
1859 | 1894 | else { | |
1860 | - | let b = toString( | |
1861 | - | let | |
1862 | - | $Tuple2((((( | |
1863 | - | } | |
1864 | - | } | |
1865 | - | ||
1866 | - | ||
1867 | - | ||
1868 | - | @Callable( | |
1869 | - | func flight ( | |
1870 | - | let | |
1871 | - | if ((size( | |
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)) | |
1872 | 1907 | then throw("No payments required") | |
1873 | 1908 | else { | |
1874 | - | let | |
1875 | - | let | |
1876 | - | let | |
1877 | - | let | |
1878 | - | let | |
1879 | - | if (( | |
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)) | |
1880 | 1915 | then throw("You can't fly to the same location") | |
1881 | 1916 | else { | |
1882 | - | let | |
1883 | - | let | |
1884 | - | let | |
1885 | - | $Tuple2(([StringEntry( | |
1886 | - | then | |
1887 | - | else | |
1888 | - | then | |
1889 | - | else | |
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) | |
1890 | 1925 | } | |
1891 | 1926 | } | |
1892 | 1927 | } | |
1893 | 1928 | ||
1894 | 1929 | ||
1895 | 1930 | ||
1896 | - | @Callable( | |
1897 | - | func heal ( | |
1898 | - | let | |
1899 | - | if (if (if ((0 > | |
1931 | + | @Callable(eu) | |
1932 | + | func heal (iM,iN,iO) = { | |
1933 | + | let ix = iu(eu) | |
1934 | + | if (if (if ((0 > iM)) | |
1900 | 1935 | then true | |
1901 | - | else (0 > | |
1936 | + | else (0 > iN)) | |
1902 | 1937 | then true | |
1903 | - | else (0 > | |
1938 | + | else (0 > iO)) | |
1904 | 1939 | then throw("Quantity cannot be negative") | |
1905 | 1940 | else { | |
1906 | - | let | |
1907 | - | let | |
1908 | - | let | |
1909 | - | let | |
1910 | - | let | |
1911 | - | if (( | |
1912 | - | then throw((("HP should be < " + toString( | |
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")) | |
1913 | 1948 | else { | |
1914 | - | let | |
1915 | - | let | |
1916 | - | let | |
1949 | + | let fd = aW(q) | |
1950 | + | let fO = fc(fd) | |
1951 | + | let iR = if ((fO[aA] == "")) | |
1917 | 1952 | then nil | |
1918 | - | else split( | |
1919 | - | func | |
1920 | - | let | |
1921 | - | let | |
1922 | - | then parseIntValue( | |
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]) | |
1923 | 1958 | else 0 | |
1924 | - | if ((3 > | |
1959 | + | if ((3 > bY)) | |
1925 | 1960 | then { | |
1926 | - | let | |
1927 | - | if (( | |
1928 | - | then throw(((("You have only " + toString( | |
1929 | - | else $Tuple3(( | |
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))) | |
1930 | 1965 | } | |
1931 | - | else $Tuple3(( | |
1966 | + | else $Tuple3((cR._1 :+ toString(eQ)), (bY + 1), cR._3) | |
1932 | 1967 | } | |
1933 | 1968 | ||
1934 | - | let | |
1935 | - | let | |
1936 | - | let | |
1937 | - | let | |
1938 | - | func | |
1939 | - | then | |
1940 | - | else | |
1941 | - | ||
1942 | - | func | |
1943 | - | then | |
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 | |
1944 | 1979 | else throw("List size exceeds 50") | |
1945 | 1980 | ||
1946 | - | | |
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) | |
1947 | 1982 | } | |
1948 | - | let | |
1949 | - | $Tuple2(([IntegerEntry( | |
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) | |
1950 | 1985 | } | |
1951 | 1986 | } | |
1952 | 1987 | } | |
1953 | 1988 | ||
1954 | 1989 | ||
1955 | 1990 | ||
1956 | - | @Callable( | |
1991 | + | @Callable(eu) | |
1957 | 1992 | func healES () = { | |
1958 | - | let | |
1959 | - | if ((size( | |
1993 | + | let ix = iu(eu) | |
1994 | + | if ((size(eu.payments) != 1)) | |
1960 | 1995 | then throw("Exactly one payment required") | |
1961 | 1996 | else { | |
1962 | - | let | |
1963 | - | if (( | |
1997 | + | let iy = value(eu.payments[0]) | |
1998 | + | if ((iy.assetId != bi)) | |
1964 | 1999 | then throw("Allowed USDT payment only!") | |
1965 | 2000 | else { | |
1966 | - | let | |
1967 | - | let | |
1968 | - | let | |
1969 | - | let | |
1970 | - | if (( | |
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)) | |
1971 | 2006 | then throw("HP should be 0 to call Emergency Service") | |
1972 | 2007 | else { | |
1973 | - | let | |
1974 | - | let | |
1975 | - | let | |
2008 | + | let fd = aW(q) | |
2009 | + | let fO = fc(fd) | |
2010 | + | let iR = if ((fO[aA] == "")) | |
1976 | 2011 | then nil | |
1977 | - | else split( | |
1978 | - | let | |
1979 | - | then parseIntValue( | |
2012 | + | else split(fO[aA], "_") | |
2013 | + | let iW = if ((size(iR) > 0)) | |
2014 | + | then parseIntValue(iR[0]) | |
1980 | 2015 | else 0 | |
1981 | - | let | |
1982 | - | then parseIntValue( | |
2016 | + | let iX = if ((size(iR) > 1)) | |
2017 | + | then parseIntValue(iR[1]) | |
1983 | 2018 | else 0 | |
1984 | - | let | |
1985 | - | then parseIntValue( | |
2019 | + | let iY = if ((size(iR) > 2)) | |
2020 | + | then parseIntValue(iR[2]) | |
1986 | 2021 | else 0 | |
1987 | - | if (if (if (( | |
2022 | + | if (if (if ((iW > 0)) | |
1988 | 2023 | then true | |
1989 | - | else ( | |
2024 | + | else (iX > 0)) | |
1990 | 2025 | then true | |
1991 | - | else ( | |
2026 | + | else (iY > 0)) | |
1992 | 2027 | then throw("You have to use own Medical Kit") | |
1993 | 2028 | else { | |
1994 | - | let | |
1995 | - | let | |
1996 | - | then split(value( | |
2029 | + | let iZ = getString(bK, bb()) | |
2030 | + | let ja = if (isDefined(iZ)) | |
2031 | + | then split(value(iZ), "_") | |
1997 | 2032 | else nil | |
1998 | - | let | |
1999 | - | then parseIntValue( | |
2033 | + | let jb = if ((size(ja) > 0)) | |
2034 | + | then parseIntValue(ja[0]) | |
2000 | 2035 | else 0 | |
2001 | - | if ((0 >= | |
2036 | + | if ((0 >= jb)) | |
2002 | 2037 | then throw("There are no Medical Kits L1 at Emergency Service storage") | |
2003 | 2038 | else { | |
2004 | - | let | |
2005 | - | let | |
2006 | - | let | |
2007 | - | let | |
2008 | - | let | |
2009 | - | if (( | |
2010 | - | then throw(("Payment attached should be " + toString( | |
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))) | |
2011 | 2046 | else { | |
2012 | - | let | |
2013 | - | $Tuple2(([IntegerEntry( | |
2047 | + | let dj = bU(invoke(bK, "updateEsStorage", [jc], [AttachedPayment(bi, je)])) | |
2048 | + | $Tuple2(([IntegerEntry(gD, iV), ix] ++ hD(q, C)._1), dj) | |
2014 | 2049 | } | |
2015 | 2050 | } | |
2016 | 2051 | } | |
2021 | 2056 | ||
2022 | 2057 | ||
2023 | 2058 | ||
2024 | - | @Callable( | |
2025 | - | func updateBackpack ( | |
2059 | + | @Callable(eu) | |
2060 | + | func updateBackpack (q,jf) = if ((eu.caller != bK)) | |
2026 | 2061 | then throw("permission denied") | |
2027 | - | else $Tuple2([StringEntry( | |
2028 | - | ||
2029 | - | ||
2030 | - | ||
2031 | - | @Callable( | |
2062 | + | else $Tuple2([StringEntry(aW(q), jf)], jf) | |
2063 | + | ||
2064 | + | ||
2065 | + | ||
2066 | + | @Callable(eu) | |
2032 | 2067 | func buySLand () = { | |
2033 | - | let | |
2034 | - | if ((size( | |
2068 | + | let ix = iu(eu) | |
2069 | + | if ((size(eu.payments) != 1)) | |
2035 | 2070 | then throw("Exactly one payment required") | |
2036 | 2071 | else { | |
2037 | - | let | |
2038 | - | if (( | |
2072 | + | let iy = value(eu.payments[0]) | |
2073 | + | if ((iy.assetId != bi)) | |
2039 | 2074 | then throw("Allowed USDT payment only!") | |
2040 | - | else if (( | |
2041 | - | then throw(("Payment attached should be " + toString( | |
2075 | + | else if ((iy.amount != ck)) | |
2076 | + | then throw(("Payment attached should be " + toString(ck))) | |
2042 | 2077 | else { | |
2043 | - | let | |
2044 | - | $Tuple2(((( | |
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) | |
2045 | 2080 | } | |
2046 | 2081 | } | |
2047 | 2082 | } | |
2048 | 2083 | ||
2049 | 2084 | ||
2050 | 2085 | ||
2051 | - | @Callable( | |
2052 | - | func expedition ( | |
2053 | - | let | |
2054 | - | if ((size( | |
2086 | + | @Callable(eu) | |
2087 | + | func expedition (gs,gt) = { | |
2088 | + | let ix = iu(eu) | |
2089 | + | if ((size(eu.payments) != 0)) | |
2055 | 2090 | then throw("No payments required") | |
2056 | 2091 | else { | |
2057 | - | let | |
2058 | - | let | |
2059 | - | $Tuple2((( | |
2060 | - | } | |
2061 | - | } | |
2062 | - | ||
2063 | - | ||
2064 | - | ||
2065 | - | @Callable( | |
2066 | - | func upgradeInfra ( | |
2067 | - | let | |
2068 | - | if ((size( | |
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)) | |
2069 | 2104 | then throw("No payments required") | |
2070 | 2105 | else { | |
2071 | - | let | |
2072 | - | let | |
2073 | - | $Tuple2((( | |
2074 | - | } | |
2075 | - | } | |
2076 | - | ||
2077 | - | ||
2078 | - | ||
2079 | - | @Callable( | |
2080 | - | func upgradeInfraUsdt ( | |
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)) | |
2081 | 2116 | then throw("Permission denied") | |
2082 | 2117 | else { | |
2083 | - | let | |
2084 | - | if ((size( | |
2118 | + | let ix = iu(eu) | |
2119 | + | if ((size(eu.payments) != 1)) | |
2085 | 2120 | then throw("Exactly one payment required") | |
2086 | 2121 | else { | |
2087 | - | let | |
2088 | - | if (( | |
2122 | + | let iy = value(eu.payments[0]) | |
2123 | + | if ((iy.assetId != bi)) | |
2089 | 2124 | then throw("Allowed USDT payment only!") | |
2090 | 2125 | else { | |
2091 | - | let | |
2092 | - | $Tuple2((( | |
2126 | + | let dj = hr(false, eu.caller, iy.amount, aN) | |
2127 | + | $Tuple2(((dj._1 :+ ScriptTransfer(bK, iy.amount, bi)) :+ ix), dj._2) | |
2093 | 2128 | } | |
2094 | 2129 | } | |
2095 | 2130 | } | |
2096 | 2131 | ||
2097 | 2132 | ||
2098 | 2133 | ||
2099 | - | @Callable( | |
2100 | - | func activateArtifact ( | |
2101 | - | let | |
2102 | - | if ((size( | |
2134 | + | @Callable(eu) | |
2135 | + | func activateArtifact (jg,jh) = { | |
2136 | + | let ix = iu(eu) | |
2137 | + | if ((size(eu.payments) != 0)) | |
2103 | 2138 | then throw("No payments required") | |
2104 | 2139 | else { | |
2105 | - | let b = toString( | |
2106 | - | let | |
2107 | - | let | |
2108 | - | if (("PRESALE" == | |
2109 | - | then | |
2110 | - | else if (("ONBOARD" == | |
2111 | - | then | |
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) | |
2112 | 2147 | else throw("Unknown artifact") | |
2113 | 2148 | } | |
2114 | - | ( | |
2115 | - | } | |
2116 | - | } | |
2117 | - | ||
2118 | - | ||
2119 | - | ||
2120 | - | @Callable( | |
2121 | - | func mergeLands ( | |
2122 | - | let | |
2123 | - | if ((size( | |
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)) | |
2124 | 2159 | then throw("No payments required") | |
2125 | 2160 | else { | |
2126 | - | let | |
2127 | - | $Tuple2((( | |
2128 | - | } | |
2129 | - | } | |
2130 | - | ||
2131 | - | ||
2132 | - | ||
2133 | - | @Callable( | |
2134 | - | func mergeLandsUsdt ( | |
2135 | - | let | |
2136 | - | if ((size( | |
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)) | |
2137 | 2172 | then throw("Exactly one payment required") | |
2138 | 2173 | else { | |
2139 | - | let | |
2140 | - | if (( | |
2174 | + | let iy = value(eu.payments[0]) | |
2175 | + | if ((iy.assetId != bi)) | |
2141 | 2176 | then throw("Allowed USDT payment only!") | |
2142 | 2177 | else { | |
2143 | - | let | |
2144 | - | $Tuple2((( | |
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) | |
2145 | 2180 | } | |
2146 | 2181 | } | |
2147 | 2182 | } | |
2148 | 2183 | ||
2149 | 2184 | ||
2150 | 2185 | ||
2151 | - | @Callable( | |
2152 | - | func cargoExchange ( | |
2153 | - | let | |
2154 | - | if ((size( | |
2186 | + | @Callable(eu) | |
2187 | + | func cargoExchange (ji,aN) = { | |
2188 | + | let ix = iu(eu) | |
2189 | + | if ((size(eu.payments) != 0)) | |
2155 | 2190 | then throw("No payments required") | |
2156 | 2191 | else { | |
2157 | - | let | |
2158 | - | let b = toString( | |
2159 | - | let | |
2160 | - | let | |
2161 | - | if (!(isDefined(getInteger( | |
2162 | - | then throw(( | |
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")) | |
2163 | 2198 | else { | |
2164 | - | let | |
2165 | - | if (( | |
2166 | - | then throw(( | |
2199 | + | let hc = valueOrErrorMessage(getString(aC(aN)), (("NFT " + gZ.name) + " is orphaned")) | |
2200 | + | if ((hc != b)) | |
2201 | + | then throw((W + " is not yours")) | |
2167 | 2202 | else { | |
2168 | - | let | |
2169 | - | let | |
2170 | - | let | |
2171 | - | let | |
2172 | - | let | |
2173 | - | if (( | |
2174 | - | then throw((("Duck location type is " + | |
2175 | - | else if (( | |
2176 | - | then throw(("Duck should be on the land " + | |
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)) | |
2177 | 2212 | else { | |
2178 | - | let | |
2179 | - | let | |
2180 | - | let | |
2181 | - | let | |
2182 | - | let | |
2183 | - | let | |
2184 | - | let | |
2185 | - | let | |
2186 | - | [StringEntry( | |
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] | |
2187 | 2222 | } | |
2188 | 2223 | } | |
2189 | 2224 | } | |
2192 | 2227 | ||
2193 | 2228 | ||
2194 | 2229 | ||
2195 | - | @Callable( | |
2196 | - | func saveWarehouse ( | |
2230 | + | @Callable(eu) | |
2231 | + | func saveWarehouse (fz,aN) = if ((eu.caller != bK)) | |
2197 | 2232 | then throw("Access denied") | |
2198 | 2233 | else { | |
2199 | - | let | |
2200 | - | let | |
2201 | - | if ((size( | |
2234 | + | let fv = aM(aN) | |
2235 | + | let fA = split_4C(fz, ":") | |
2236 | + | if ((size(fA) != 5)) | |
2202 | 2237 | then throw("warehouse string should contain 4 ':' separators") | |
2203 | 2238 | else { | |
2204 | - | let | |
2205 | - | let | |
2206 | - | let | |
2207 | - | let | |
2208 | - | let | |
2209 | - | $Tuple2([StringEntry( | |
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) | |
2210 | 2245 | } | |
2211 | 2246 | } | |
2212 | 2247 | ||
2213 | 2248 | ||
2214 | 2249 | ||
2215 | - | @Callable( | |
2216 | - | func fixWarehouseFormat ( | |
2250 | + | @Callable(eu) | |
2251 | + | func fixWarehouseFormat (aN) = if ((eu.caller != bJ)) | |
2217 | 2252 | then throw("Access denied") | |
2218 | 2253 | else { | |
2219 | - | let | |
2220 | - | let | |
2221 | - | let | |
2222 | - | let | |
2223 | - | let | |
2224 | - | let | |
2225 | - | let | |
2226 | - | let | |
2227 | - | let | |
2228 | - | let | |
2229 | - | $Tuple2([StringEntry( | |
2230 | - | } | |
2231 | - | ||
2232 | - | ||
2233 | - | ||
2234 | - | @Callable( | |
2235 | - | func fixStakedPieces ( | |
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)) | |
2236 | 2271 | then throw("Access denied") | |
2237 | 2272 | else { | |
2238 | - | let | |
2273 | + | let in = if ((bw == "")) | |
2239 | 2274 | then 0 | |
2240 | 2275 | else { | |
2241 | - | let | |
2242 | - | let | |
2243 | - | then split_51C(value( | |
2276 | + | let ii = getString(S, bS(bw)) | |
2277 | + | let id = if (isDefined(ii)) | |
2278 | + | then split_51C(value(ii), "_") | |
2244 | 2279 | else nil | |
2245 | - | func | |
2246 | - | let | |
2247 | - | let | |
2248 | - | ( | |
2280 | + | func jm (cR,aN) = { | |
2281 | + | let gZ = value(assetInfo(fromBase58String(aN))) | |
2282 | + | let ca = split(gZ.description, "_")[bO] | |
2283 | + | (cR + bZ(ca)) | |
2249 | 2284 | } | |
2250 | 2285 | ||
2251 | - | let | |
2252 | - | let | |
2253 | - | let | |
2254 | - | func | |
2255 | - | then | |
2256 | - | else | |
2257 | - | ||
2258 | - | func | |
2259 | - | then | |
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 | |
2260 | 2295 | else throw("List size exceeds 100") | |
2261 | 2296 | ||
2262 | - | | |
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) | |
2263 | 2298 | } | |
2264 | - | $Tuple2([IntegerEntry( | |
2265 | - | } | |
2266 | - | ||
2267 | - | ||
2268 | - | ||
2269 | - | @Callable( | |
2270 | - | func setCustomName ( | |
2271 | - | let | |
2272 | - | if ((size( | |
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)) | |
2273 | 2308 | then throw("Exactly one payment required") | |
2274 | 2309 | else { | |
2275 | - | let | |
2276 | - | if (( | |
2310 | + | let iy = value(eu.payments[0]) | |
2311 | + | if ((iy.assetId != bi)) | |
2277 | 2312 | then throw("Allowed USDT payment only!") | |
2278 | - | else if (( | |
2279 | - | then throw(("Payment should be " + toString( | |
2280 | - | else if (contains( | |
2281 | - | then throw(("Name should not contain '__': " + | |
2282 | - | else if ((size( | |
2283 | - | then throw(("Name too long, maxLength=" + toString( | |
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))) | |
2284 | 2319 | else { | |
2285 | - | let b = toString( | |
2286 | - | let | |
2287 | - | let | |
2288 | - | if (("ACCOUNT" == | |
2320 | + | let b = toString(eu.originCaller) | |
2321 | + | let jn = { | |
2322 | + | let bj = aI | |
2323 | + | if (("ACCOUNT" == bj)) | |
2289 | 2324 | then { | |
2290 | - | let | |
2291 | - | let | |
2292 | - | if (isDefined( | |
2293 | - | then throw(("Name already registered: " + | |
2325 | + | let jo = cB(if) | |
2326 | + | let jp = getString(jo) | |
2327 | + | if (isDefined(jp)) | |
2328 | + | then throw(("Name already registered: " + if)) | |
2294 | 2329 | else { | |
2295 | - | let | |
2296 | - | let | |
2297 | - | let | |
2298 | - | then [DeleteEntry( | |
2330 | + | let jq = aP(b) | |
2331 | + | let jr = getString(jq) | |
2332 | + | let js = if (isDefined(jr)) | |
2333 | + | then [DeleteEntry(cB(value(jr)))] | |
2299 | 2334 | else nil | |
2300 | - | ((( | |
2335 | + | (((js :+ StringEntry(jq, if)) :+ StringEntry(jo, b)) ++ hJ(b, D)._1) | |
2301 | 2336 | } | |
2302 | 2337 | } | |
2303 | - | else if (("LAND" == | |
2338 | + | else if (("LAND" == bj)) | |
2304 | 2339 | then { | |
2305 | - | let | |
2306 | - | let | |
2307 | - | if (!(isDefined(getInteger( | |
2308 | - | then throw(( | |
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")) | |
2309 | 2344 | else { | |
2310 | - | let | |
2311 | - | if (( | |
2312 | - | then throw(( | |
2345 | + | let hc = valueOrErrorMessage(getString(aC(aD)), (("NFT " + gZ.name) + " is orphaned")) | |
2346 | + | if ((hc != b)) | |
2347 | + | then throw((W + " is not yours")) | |
2313 | 2348 | else { | |
2314 | - | let | |
2315 | - | let | |
2316 | - | if (isDefined( | |
2317 | - | then throw(("Name already registered: " + | |
2349 | + | let jo = cv(if) | |
2350 | + | let jp = getString(jo) | |
2351 | + | if (isDefined(jp)) | |
2352 | + | then throw(("Name already registered: " + if)) | |
2318 | 2353 | else { | |
2319 | - | let | |
2320 | - | let | |
2321 | - | let | |
2322 | - | then [DeleteEntry( | |
2354 | + | let jt = aE(aD) | |
2355 | + | let jr = getString(jt) | |
2356 | + | let js = if (isDefined(jr)) | |
2357 | + | then [DeleteEntry(cv(value(jr)))] | |
2323 | 2358 | else nil | |
2324 | - | ((( | |
2359 | + | (((js :+ StringEntry(jt, if)) :+ StringEntry(jo, aD)) ++ hJ(b, D)._1) | |
2325 | 2360 | } | |
2326 | 2361 | } | |
2327 | 2362 | } | |
2328 | 2363 | } | |
2329 | - | else if (("DUCK" == | |
2364 | + | else if (("DUCK" == bj)) | |
2330 | 2365 | then { | |
2331 | - | let | |
2332 | - | let | |
2333 | - | if (if (!(isDefined(getInteger( | |
2366 | + | let gZ = value(assetInfo(fromBase58String(aD))) | |
2367 | + | let ha = aF(aD) | |
2368 | + | if (if (!(isDefined(getInteger(ha)))) | |
2334 | 2369 | then true | |
2335 | - | else !(isDefined(getString( | |
2336 | - | then throw(( | |
2370 | + | else !(isDefined(getString(aV(b))))) | |
2371 | + | then throw((gZ.name + " is not staked")) | |
2337 | 2372 | else { | |
2338 | - | let | |
2339 | - | if (( | |
2340 | - | then throw(( | |
2373 | + | let hc = valueOrErrorMessage(getString(aU(aD)), (("NFT " + gZ.name) + " is orphaned")) | |
2374 | + | if ((hc != b)) | |
2375 | + | then throw((X + " is not yours")) | |
2341 | 2376 | else { | |
2342 | - | let | |
2343 | - | let | |
2344 | - | if (isDefined( | |
2345 | - | then throw(("Name already registered: " + | |
2377 | + | let jo = cA(if) | |
2378 | + | let jp = getString(jo) | |
2379 | + | if (isDefined(jp)) | |
2380 | + | then throw(("Name already registered: " + if)) | |
2346 | 2381 | else { | |
2347 | - | let | |
2348 | - | let | |
2349 | - | let | |
2350 | - | then [DeleteEntry( | |
2382 | + | let jt = aO(aD) | |
2383 | + | let jr = getString(jt) | |
2384 | + | let js = if (isDefined(jr)) | |
2385 | + | then [DeleteEntry(cA(value(jr)))] | |
2351 | 2386 | else nil | |
2352 | - | ((( | |
2387 | + | (((js :+ StringEntry(jt, if)) :+ StringEntry(jo, aD)) ++ hD(aD, D)._1) | |
2353 | 2388 | } | |
2354 | 2389 | } | |
2355 | 2390 | } | |
2356 | 2391 | } | |
2357 | 2392 | else throw("Unknown entity type") | |
2358 | 2393 | } | |
2359 | - | $Tuple2((( | |
2394 | + | $Tuple2(((jn :+ ScriptTransfer(bK, iy.amount, bi)) :+ ix), 0) | |
2360 | 2395 | } | |
2361 | 2396 | } | |
2362 | 2397 | } | |
2363 | 2398 | ||
2364 | 2399 | ||
2365 | 2400 | ||
2366 | - | @Callable( | |
2367 | - | func setReferrals ( | |
2401 | + | @Callable(eu) | |
2402 | + | func setReferrals (ju,jv) = if ((eu.callerPublicKey != cd)) | |
2368 | 2403 | then throw("Permission denied") | |
2369 | 2404 | else { | |
2370 | - | let | |
2371 | - | if ((size( | |
2405 | + | let ix = iu(eu) | |
2406 | + | if ((size(eu.payments) != 0)) | |
2372 | 2407 | then throw("No payments required") | |
2373 | - | else if (!(isDefined(addressFromString( | |
2374 | - | then throw(("Invalid address: " + | |
2375 | - | else if (!(isDefined(addressFromString( | |
2376 | - | then throw(("Invalid address: " + | |
2408 | + | else if (!(isDefined(addressFromString(ju)))) | |
2409 | + | then throw(("Invalid address: " + ju)) | |
2410 | + | else if (!(isDefined(addressFromString(jv)))) | |
2411 | + | then throw(("Invalid address: " + jv)) | |
2377 | 2412 | else { | |
2378 | - | let | |
2379 | - | let | |
2380 | - | let | |
2381 | - | then split_4C(value( | |
2413 | + | let jw = cC() | |
2414 | + | let jx = getString(jw) | |
2415 | + | let jy = if (isDefined(jx)) | |
2416 | + | then split_4C(value(jx), "_") | |
2382 | 2417 | else nil | |
2383 | - | if (containsElement( | |
2384 | - | then throw(( | |
2418 | + | if (containsElement(jy, jv)) | |
2419 | + | then throw((jv + " is not newbie (already has referrals)")) | |
2385 | 2420 | else { | |
2386 | - | let | |
2387 | - | let | |
2388 | - | if (if (isDefined( | |
2389 | - | then isDefined(addressFromString(value( | |
2421 | + | let hL = aQ(jv) | |
2422 | + | let hM = getString(hL) | |
2423 | + | if (if (isDefined(hM)) | |
2424 | + | then isDefined(addressFromString(value(hM))) | |
2390 | 2425 | else false) | |
2391 | - | then throw((( | |
2426 | + | then throw(((jv + " already has refBy: ") + value(hM))) | |
2392 | 2427 | else { | |
2393 | - | let | |
2394 | - | let | |
2395 | - | let | |
2396 | - | then split_4C(value( | |
2428 | + | let jz = aT(ju) | |
2429 | + | let jA = getString(jz) | |
2430 | + | let jB = if (isDefined(jA)) | |
2431 | + | then split_4C(value(jA), "_") | |
2397 | 2432 | else nil | |
2398 | - | if (containsElement( | |
2399 | - | then throw(((( | |
2433 | + | if (containsElement(jB, jv)) | |
2434 | + | then throw((((ju + " already contains ") + jv) + " within referrals")) | |
2400 | 2435 | else { | |
2401 | - | let | |
2402 | - | let | |
2403 | - | then value( | |
2404 | - | else makeString_2C(( | |
2405 | - | $Tuple2([StringEntry( | |
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) | |
2406 | 2441 | } | |
2407 | 2442 | } | |
2408 | 2443 | } | |
2411 | 2446 | ||
2412 | 2447 | ||
2413 | 2448 | ||
2414 | - | @Callable( | |
2415 | - | func distributePoints ( | |
2416 | - | let | |
2417 | - | if ((size( | |
2449 | + | @Callable(eu) | |
2450 | + | func distributePoints (jE,jF,jG,jH,jI) = { | |
2451 | + | let ix = iu(eu) | |
2452 | + | if ((size(eu.payments) != 0)) | |
2418 | 2453 | then throw("No payments required") | |
2419 | 2454 | else { | |
2420 | - | let b = toString( | |
2421 | - | let | |
2422 | - | let | |
2423 | - | let | |
2424 | - | let | |
2425 | - | let | |
2426 | - | let | |
2427 | - | let | |
2428 | - | if (( | |
2429 | - | then throw((("There are only " + toString( | |
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")) | |
2430 | 2465 | else { | |
2431 | - | let | |
2432 | - | let | |
2433 | - | let | |
2434 | - | $Tuple2([IntegerEntry( | |
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)) | |
2435 | 2470 | then 0 | |
2436 | - | else | |
2437 | - | then ( | |
2438 | - | else | |
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) | |
2439 | 2474 | } | |
2440 | 2475 | } | |
2441 | 2476 | } | |
2442 | 2477 | ||
2443 | 2478 | ||
2444 | 2479 | ||
2445 | - | @Callable( | |
2446 | - | func splitByGlobalWeightsREADONLY ( | |
2447 | - | ||
2448 | - | ||
2449 | - | ||
2450 | - | @Callable( | |
2451 | - | func splitByGlobalAndLocalWeightsREADONLY ( | |
2452 | - | let | |
2453 | - | $Tuple2(nil, $Tuple2( | |
2454 | - | } | |
2455 | - | ||
2456 | - | ||
2457 | - | ||
2458 | - | @Callable( | |
2459 | - | func getBackpackREADONLY ( | |
2460 | - | ||
2461 | - | ||
2462 | - | ||
2463 | - | @Callable( | |
2464 | - | func getWarehouseREADONLY ( | |
2465 | - | let | |
2466 | - | let | |
2467 | - | let | |
2468 | - | $Tuple2(nil, makeString_2C( | |
2469 | - | } | |
2470 | - | ||
2471 | - | ||
2472 | - | ||
2473 | - | @Callable( | |
2474 | - | func saveLastTx () = if (if (( | |
2475 | - | then ( | |
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) | |
2476 | 2511 | else false) | |
2477 | 2512 | then throw("Access denied") | |
2478 | - | else $Tuple2([ | |
2479 | - | ||
2480 | - | ||
2481 | - | ||
2482 | - | @Callable( | |
2483 | - | func updateDuckStats ( | |
2513 | + | else $Tuple2([iu(eu)], 42) | |
2514 | + | ||
2515 | + | ||
2516 | + | ||
2517 | + | @Callable(eu) | |
2518 | + | func updateDuckStats (q,hE) = if ((eu.caller != bK)) | |
2484 | 2519 | then throw("Access denied") | |
2485 | - | else | |
2486 | - | ||
2487 | - | ||
2488 | - | ||
2489 | - | @Callable( | |
2490 | - | func updateAccStats (b, | |
2520 | + | else hD(q, hE) | |
2521 | + | ||
2522 | + | ||
2523 | + | ||
2524 | + | @Callable(eu) | |
2525 | + | func updateAccStats (b,hE) = if ((eu.caller != bK)) | |
2491 | 2526 | then throw("Access denied") | |
2492 | - | else | |
2493 | - | ||
2494 | - | ||
2495 | - | ||
2496 | - | @Callable( | |
2497 | - | func equipDuck ( | |
2498 | - | let | |
2499 | - | if ((size( | |
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)) | |
2500 | 2535 | then throw("No payments required") | |
2501 | 2536 | else { | |
2502 | - | let b = toString( | |
2503 | - | let | |
2504 | - | let | |
2505 | - | let | |
2506 | - | let | |
2507 | - | let | |
2508 | - | let | |
2509 | - | if ((size( | |
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)) | |
2510 | 2545 | then throw("Wrong equipment string") | |
2511 | 2546 | else { | |
2512 | - | let | |
2513 | - | let | |
2514 | - | let | |
2515 | - | let | |
2516 | - | $Tuple2([StringEntry( | |
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) | |
2517 | 2552 | } | |
2518 | 2553 | } | |
2519 | 2554 | } | |
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 | - | } | |
2531 | 2555 | ||
2532 | 2556 |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 6 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | func a (b) = ("lastArbTimeUser_" + b) | |
5 | 5 | ||
6 | 6 | ||
7 | 7 | let c = 100000000 | |
8 | 8 | ||
9 | 9 | let d = 3200 | |
10 | 10 | ||
11 | 11 | let e = 4000 | |
12 | 12 | ||
13 | 13 | let f = 3 | |
14 | 14 | ||
15 | - | let g = | |
16 | - | ||
17 | - | let h = | |
18 | - | ||
19 | - | let i = | |
20 | - | ||
21 | - | let j = | |
22 | - | ||
23 | - | let k = | |
24 | - | ||
25 | - | let l = | |
26 | - | ||
27 | - | let m = | |
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 | |
28 | 28 | ||
29 | 29 | let n = 2 | |
30 | 30 | ||
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 | |
118 | 117 | ||
119 | 118 | let af = 10 | |
120 | 119 | ||
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)) | |
227 | 239 | then base58'9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi' | |
228 | - | else if ((base58'2T' == | |
240 | + | else if ((base58'2T' == bj)) | |
229 | 241 | then base58'6mWwf9mZBjVgkC54idpyaZLQfAosD914wT8fGf2iiY63' | |
230 | 242 | else throw("Unknown chain") | |
231 | 243 | } | |
232 | 244 | ||
233 | - | let | |
234 | - | let | |
235 | - | if ((base58'2W' == | |
245 | + | let bk = { | |
246 | + | let bj = bh | |
247 | + | if ((base58'2W' == bj)) | |
236 | 248 | then "3PQCuvFbvh4LkPUnrnU1z3jnbA1p9m3WNhv" | |
237 | - | else if ((base58'2T' == | |
249 | + | else if ((base58'2T' == bj)) | |
238 | 250 | then "3MumkGGztCKAXpWDqxkddofqXSUbqQkvSJy" | |
239 | 251 | else throw("Unknown chain") | |
240 | 252 | } | |
241 | 253 | ||
242 | - | let | |
243 | - | let | |
244 | - | if ((base58'2W' == | |
254 | + | let bl = { | |
255 | + | let bj = bh | |
256 | + | if ((base58'2W' == bj)) | |
245 | 257 | then 10000000000 | |
246 | - | else if ((base58'2T' == | |
258 | + | else if ((base58'2T' == bj)) | |
247 | 259 | then 100000000 | |
248 | 260 | else throw("Unknown chain") | |
249 | 261 | } | |
250 | 262 | ||
251 | - | let | |
252 | - | let | |
253 | - | if ((base58'2W' == | |
263 | + | let bm = { | |
264 | + | let bj = bh | |
265 | + | if ((base58'2W' == bj)) | |
254 | 266 | then 600000 | |
255 | - | else if ((base58'2T' == | |
267 | + | else if ((base58'2T' == bj)) | |
256 | 268 | then 60000 | |
257 | 269 | else throw("Unknown chain") | |
258 | 270 | } | |
259 | 271 | ||
260 | - | let | |
261 | - | ||
262 | - | let | |
263 | - | ||
264 | - | let | |
265 | - | ||
266 | - | let | |
267 | - | ||
268 | - | let | |
269 | - | ||
270 | - | let | |
271 | - | ||
272 | - | let | |
273 | - | ||
274 | - | let | |
275 | - | ||
276 | - | func | |
277 | - | ||
278 | - | ||
279 | - | let | |
280 | - | ||
281 | - | let | |
282 | - | ||
283 | - | let | |
284 | - | ||
285 | - | let | |
286 | - | ||
287 | - | func | |
288 | - | ||
289 | - | ||
290 | - | func | |
291 | - | ||
292 | - | ||
293 | - | func | |
294 | - | ||
295 | - | ||
296 | - | func | |
297 | - | ||
298 | - | ||
299 | - | let | |
300 | - | ||
301 | - | let | |
302 | - | ||
303 | - | let | |
304 | - | ||
305 | - | let | |
306 | - | ||
307 | - | let | |
308 | - | ||
309 | - | let | |
310 | - | ||
311 | - | let | |
312 | - | ||
313 | - | let | |
314 | - | ||
315 | - | let | |
316 | - | ||
317 | - | let | |
318 | - | ||
319 | - | func | |
320 | - | ||
321 | - | ||
322 | - | func | |
323 | - | ||
324 | - | ||
325 | - | func | |
326 | - | ||
327 | - | ||
328 | - | func | |
329 | - | let | |
330 | - | if ($isInstanceOf( | |
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")) | |
331 | 343 | then { | |
332 | - | let | |
333 | - | | |
344 | + | let bW = bj | |
345 | + | bW | |
334 | 346 | } | |
335 | 347 | else throw("fail to cast into String") | |
336 | 348 | } | |
337 | 349 | ||
338 | 350 | ||
339 | - | func | |
340 | - | let | |
341 | - | if ($isInstanceOf( | |
351 | + | func bX (bV) = { | |
352 | + | let bj = bV | |
353 | + | if ($isInstanceOf(bj, "Int")) | |
342 | 354 | then { | |
343 | - | let | |
344 | - | | |
355 | + | let bY = bj | |
356 | + | bY | |
345 | 357 | } | |
346 | 358 | else throw("fail to cast into Int") | |
347 | 359 | } | |
348 | 360 | ||
349 | 361 | ||
350 | - | func | |
351 | - | let | |
352 | - | if (("S" == | |
353 | - | then | |
354 | - | else if (("M" == | |
355 | - | then | |
356 | - | else if (("L" == | |
357 | - | then | |
358 | - | else if (("XL" == | |
359 | - | then | |
360 | - | else if (("XXL" == | |
361 | - | then | |
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 | |
362 | 374 | else throw("Unknown land size") | |
363 | 375 | } | |
364 | 376 | ||
365 | 377 | ||
366 | - | let | |
367 | - | let | |
368 | - | if ((base58'2W' == | |
378 | + | let cb = { | |
379 | + | let bj = bh | |
380 | + | if ((base58'2W' == bj)) | |
369 | 381 | then addressFromStringValue("3PEktVux2RhchSN63DsDo4b4mz4QqzKSeDv") | |
370 | - | else if ((base58'2T' == | |
382 | + | else if ((base58'2T' == bj)) | |
371 | 383 | then this | |
372 | 384 | else throw("Unknown chain") | |
373 | 385 | } | |
374 | 386 | ||
375 | - | let | |
376 | - | let | |
377 | - | if ((base58'2W' == | |
387 | + | let cc = { | |
388 | + | let bj = bh | |
389 | + | if ((base58'2W' == bj)) | |
378 | 390 | then addressFromStringValue("3PDVuU45H7Eh5dmtNbnRNRStGwULA7NY6Hb") | |
379 | - | else if ((base58'2T' == | |
391 | + | else if ((base58'2T' == bj)) | |
380 | 392 | then this | |
381 | 393 | else throw("Unknown chain") | |
382 | 394 | } | |
383 | 395 | ||
384 | - | let | |
385 | - | ||
386 | - | let | |
387 | - | ||
388 | - | let | |
389 | - | ||
390 | - | let | |
391 | - | ||
392 | - | let | |
393 | - | ||
394 | - | let | |
395 | - | ||
396 | - | let | |
397 | - | let | |
398 | - | if ((base58'2W' == | |
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)) | |
399 | 411 | then 252289527462 | |
400 | - | else if ((base58'2T' == | |
412 | + | else if ((base58'2T' == bj)) | |
401 | 413 | then 2522895274 | |
402 | 414 | else throw("Unknown chain") | |
403 | 415 | } | |
404 | 416 | ||
405 | - | let | |
406 | - | let | |
407 | - | if ((base58'2W' == | |
417 | + | let ck = { | |
418 | + | let bj = bh | |
419 | + | if ((base58'2W' == bj)) | |
408 | 420 | then 250000000 | |
409 | - | else if ((base58'2T' == | |
421 | + | else if ((base58'2T' == bj)) | |
410 | 422 | then 250000000 | |
411 | 423 | else throw("Unknown chain") | |
412 | 424 | } | |
413 | 425 | ||
414 | - | let | |
415 | - | ||
416 | - | let | |
417 | - | ||
418 | - | let | |
419 | - | ||
420 | - | let | |
421 | - | ||
422 | - | let | |
423 | - | ||
424 | - | let | |
425 | - | ||
426 | - | let | |
427 | - | ||
428 | - | func | |
429 | - | ||
430 | - | ||
431 | - | func | |
432 | - | ||
433 | - | ||
434 | - | func | |
435 | - | ||
436 | - | ||
437 | - | func | |
438 | - | ||
439 | - | ||
440 | - | func | |
441 | - | ||
442 | - | ||
443 | - | func | |
444 | - | ||
445 | - | ||
446 | - | func | |
447 | - | ||
448 | - | ||
449 | - | func | |
450 | - | ||
451 | - | ||
452 | - | func | |
453 | - | ||
454 | - | ||
455 | - | let | |
456 | - | ||
457 | - | let | |
458 | - | ||
459 | - | let | |
460 | - | ||
461 | - | let | |
462 | - | ||
463 | - | let | |
464 | - | ||
465 | - | let | |
466 | - | ||
467 | - | let | |
468 | - | ||
469 | - | func | |
470 | - | ||
471 | - | ||
472 | - | func | |
473 | - | let | |
474 | - | if ((0 >= | |
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)) | |
475 | 487 | then throw("Zero weights sum") | |
476 | 488 | else { | |
477 | - | let | |
478 | - | func | |
479 | - | ||
480 | - | let | |
481 | - | let | |
482 | - | let | |
483 | - | func | |
484 | - | then | |
485 | - | else | |
486 | - | ||
487 | - | func | |
488 | - | then | |
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 | |
489 | 501 | else throw("List size exceeds 6") | |
490 | 502 | ||
491 | - | | |
492 | - | } | |
493 | - | } | |
494 | - | ||
495 | - | ||
496 | - | func | |
497 | - | let | |
498 | - | if ((size( | |
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)) | |
499 | 511 | then throw("Wrong proportions data") | |
500 | 512 | else { | |
501 | - | let | |
502 | - | | |
503 | - | } | |
504 | - | } | |
505 | - | ||
506 | - | ||
507 | - | func | |
508 | - | let | |
509 | - | func | |
510 | - | let | |
511 | - | if ((0 > | |
512 | - | then throw(((((("Not enough material idx=" + toString( | |
513 | - | else ( | |
514 | - | } | |
515 | - | ||
516 | - | if ( | |
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) | |
517 | 529 | then { | |
518 | - | let | |
519 | - | let | |
520 | - | let | |
521 | - | func | |
522 | - | then | |
523 | - | else | |
524 | - | ||
525 | - | func | |
526 | - | then | |
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 | |
527 | 539 | else throw("List size exceeds 6") | |
528 | 540 | ||
529 | - | | |
530 | - | } | |
531 | - | else | |
532 | - | } | |
533 | - | ||
534 | - | ||
535 | - | func | |
536 | - | then | |
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 | |
537 | 549 | else { | |
538 | - | let | |
550 | + | let dn = if ((dl == "")) | |
539 | 551 | then nil | |
540 | - | else split( | |
541 | - | func | |
542 | - | let | |
543 | - | func | |
544 | - | let | |
545 | - | if ((size( | |
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)) | |
546 | 558 | then throw("Incorrect format, should be index,amount") | |
547 | 559 | else { | |
548 | - | let | |
549 | - | if (if ((0 > | |
560 | + | let bI = parseIntValue(du[0]) | |
561 | + | if (if ((0 > bI)) | |
550 | 562 | then true | |
551 | - | else ( | |
563 | + | else (bI >= size(aj))) | |
552 | 564 | then throw("Unknown product idx") | |
553 | - | else if (( | |
554 | - | then | |
565 | + | else if ((bI != dq)) | |
566 | + | then ds | |
555 | 567 | else { | |
556 | - | let | |
557 | - | if ((0 >= | |
568 | + | let dv = parseIntValue(du[1]) | |
569 | + | if ((0 >= dv)) | |
558 | 570 | then throw("Pass only positive amounts") | |
559 | - | else ( | |
571 | + | else (ds + dv) | |
560 | 572 | } | |
561 | 573 | } | |
562 | 574 | } | |
563 | 575 | ||
564 | - | let | |
565 | - | let | |
566 | - | let | |
567 | - | let | |
568 | - | func | |
569 | - | then | |
570 | - | else | |
571 | - | ||
572 | - | func | |
573 | - | then | |
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 | |
574 | 586 | else throw("List size exceeds 10") | |
575 | 587 | ||
576 | - | | |
588 | + | cZ(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10) | |
577 | 589 | } | |
578 | - | let | |
579 | - | then parseIntValue( | |
590 | + | let dx = if ((size(dn) > dq)) | |
591 | + | then parseIntValue(dn[dq]) | |
580 | 592 | else 0 | |
581 | - | let | |
582 | - | then ( | |
583 | - | else throw(((((("You have " + toString( | |
584 | - | $Tuple2(( | |
585 | - | } | |
586 | - | ||
587 | - | let | |
588 | - | let | |
589 | - | let | |
590 | - | let | |
591 | - | func | |
592 | - | then | |
593 | - | else | |
594 | - | ||
595 | - | func | |
596 | - | then | |
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 | |
597 | 609 | else throw("List size exceeds 50") | |
598 | 610 | ||
599 | - | | |
600 | - | } | |
601 | - | makeString( | |
602 | - | } | |
603 | - | ||
604 | - | ||
605 | - | func | |
606 | - | let | |
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 == "")) | |
607 | 619 | then nil | |
608 | - | else split( | |
609 | - | func | |
610 | - | let | |
611 | - | let | |
612 | - | then parseIntValue( | |
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]) | |
613 | 625 | else 0 | |
614 | - | ( | |
615 | - | } | |
616 | - | ||
617 | - | let | |
618 | - | let | |
619 | - | let | |
620 | - | func | |
621 | - | then | |
622 | - | else | |
623 | - | ||
624 | - | func | |
625 | - | then | |
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 | |
626 | 638 | else throw("List size exceeds 50") | |
627 | 639 | ||
628 | - | | |
629 | - | } | |
630 | - | ||
631 | - | ||
632 | - | func | |
633 | - | func | |
634 | - | let | |
635 | - | let | |
636 | - | ( | |
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))) | |
637 | 649 | } | |
638 | 650 | ||
639 | 651 | makeString({ | |
640 | - | let | |
641 | - | let | |
642 | - | let | |
643 | - | func | |
644 | - | then | |
645 | - | else | |
646 | - | ||
647 | - | func | |
648 | - | then | |
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 | |
649 | 661 | else throw("List size exceeds 50") | |
650 | 662 | ||
651 | - | | |
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) | |
652 | 664 | }, "_") | |
653 | 665 | } | |
654 | 666 | ||
655 | 667 | ||
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)) | |
659 | 691 | then throw("Incorrect format, should be index:amount") | |
660 | 692 | else { | |
661 | - | let | |
662 | - | let | |
663 | - | if (if ((0 > | |
693 | + | let dR = parseIntValue(du[0]) | |
694 | + | let dS = parseIntValue(du[1]) | |
695 | + | if (if ((0 > dR)) | |
664 | 696 | then true | |
665 | - | else ( | |
697 | + | else (dR >= size(aj))) | |
666 | 698 | then throw("Unknown product idx") | |
667 | - | else if ((0 > | |
699 | + | else if ((0 > dS)) | |
668 | 700 | then throw("Count can't be negative") | |
669 | - | else if (( | |
670 | - | then $Tuple2( | |
701 | + | else if ((dS == 0)) | |
702 | + | then $Tuple2(dn, false) | |
671 | 703 | 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) | |
677 | 710 | else false) | |
678 | - | then throw(((((("You have " + toString( | |
711 | + | then throw(((((("You have " + toString(dx)) + " of ") + ag[dR]) + ", but tried to use ") + toString(dS))) | |
679 | 712 | else { | |
680 | - | let dL = if (!(dD)) | |
713 | + | let dV = if (if (!(dN)) | |
714 | + | then dH(dI, split(bf[al], ",")) | |
715 | + | else false) | |
681 | 716 | then { | |
682 | - | let | |
683 | - | if (( | |
717 | + | let dW = bf[am] | |
718 | + | if ((dW == "")) | |
684 | 719 | then throw("Item cannot be equipped") | |
685 | 720 | else { | |
686 | - | let | |
687 | - | let | |
688 | - | if (( | |
721 | + | let dX = parseIntValue(dW) | |
722 | + | let dY = (dX / 100) | |
723 | + | if ((dO != dY)) | |
689 | 724 | then throw("Segment incompatible") | |
690 | 725 | else { | |
691 | - | let | |
692 | - | if (( | |
726 | + | let dZ = ((dX % 100) / 10) | |
727 | + | if ((dP != dZ)) | |
693 | 728 | then throw("Slot incompatible") | |
694 | 729 | else { | |
695 | - | let | |
696 | - | if (if (( | |
697 | - | then ( | |
730 | + | let ea = (dX % 10) | |
731 | + | if (if ((dQ != 0)) | |
732 | + | then (ea > 1) | |
698 | 733 | else false) | |
699 | 734 | then throw("Big items should occupy slot 0") | |
700 | - | else ( | |
735 | + | else (ea > 1) | |
701 | 736 | } | |
702 | 737 | } | |
703 | 738 | } | |
704 | 739 | } | |
705 | 740 | else false | |
706 | - | $Tuple2((( | |
707 | - | then | |
708 | - | else -( | |
741 | + | $Tuple2(((dT + toBytes((dx + (if (dN) | |
742 | + | then dS | |
743 | + | else -(dS))))) + dU), dV) | |
709 | 744 | } | |
710 | 745 | } | |
711 | 746 | } | |
712 | 747 | } | |
713 | 748 | ||
714 | 749 | ||
715 | - | func | |
750 | + | func eb (ec,ed,dN,dO,dP,dJ) = if ((ec != "")) | |
716 | 751 | then { | |
717 | - | let | |
718 | - | if ((size( | |
752 | + | let ee = split(ec, ",") | |
753 | + | if ((size(ee) > o)) | |
719 | 754 | then throw("Wrong slots format") | |
720 | 755 | else { | |
721 | - | let | |
722 | - | let | |
723 | - | then | |
756 | + | let ef = ee[0] | |
757 | + | let eg = if ((size(ee) > 1)) | |
758 | + | then ee[1] | |
724 | 759 | else "" | |
725 | - | if (if (( | |
726 | - | then ( | |
760 | + | if (if ((ef == "")) | |
761 | + | then (eg == "") | |
727 | 762 | else false) | |
728 | - | then | |
763 | + | then ed | |
729 | 764 | else { | |
730 | - | let | |
731 | - | then | |
732 | - | else $Tuple2( | |
733 | - | if (( | |
734 | - | then if ( | |
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) | |
735 | 770 | then throw("Big item already occupies slot") | |
736 | - | else | |
737 | - | else | |
771 | + | else dL(eg, eh._1, dN, dO, dP, 1, dJ)._1 | |
772 | + | else eh._1 | |
738 | 773 | } | |
739 | 774 | } | |
740 | 775 | } | |
741 | - | else | |
742 | - | ||
743 | - | ||
744 | - | func | |
745 | - | func | |
746 | - | let | |
747 | - | let | |
748 | - | if ((size( | |
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)) | |
749 | 784 | then throw("Wrong segment format") | |
750 | 785 | else { | |
751 | - | let | |
752 | - | let | |
753 | - | if (if (( | |
754 | - | then ( | |
786 | + | let em = dP[0] | |
787 | + | let dw = dP[1] | |
788 | + | if (if ((em == "")) | |
789 | + | then (dw == "") | |
755 | 790 | else false) | |
756 | - | then $Tuple2(( | |
791 | + | then $Tuple2((dq + 1), cR._2) | |
757 | 792 | else { | |
758 | - | let | |
759 | - | $Tuple2(( | |
793 | + | let en = eb(em, cR._2, dN, dq, 0, dJ) | |
794 | + | $Tuple2((dq + 1), eb(dw, en, dN, dq, 1, dJ)) | |
760 | 795 | } | |
761 | 796 | } | |
762 | 797 | } | |
763 | 798 | ||
764 | - | ( let | |
765 | - | let | |
766 | - | let | |
767 | - | func | |
768 | - | then | |
769 | - | else | |
770 | - | ||
771 | - | func | |
772 | - | then | |
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 | |
773 | 808 | else throw("List size exceeds 6") | |
774 | 809 | ||
775 | - | | |
776 | - | } | |
777 | - | ||
778 | - | ||
779 | - | func | |
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)) | |
780 | 815 | then throw("Wrong proportions data") | |
781 | 816 | else { | |
782 | - | func | |
783 | - | let | |
784 | - | if ((0 > | |
785 | - | then throw(((((((("Panic! Pieces of type=" + toString( | |
786 | - | else ( | |
787 | - | } | |
788 | - | ||
789 | - | let | |
790 | - | let | |
791 | - | let | |
792 | - | let | |
793 | - | func | |
794 | - | then | |
795 | - | else | |
796 | - | ||
797 | - | func | |
798 | - | then | |
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 | |
799 | 834 | else throw("List size exceeds 6") | |
800 | 835 | ||
801 | - | | |
802 | - | } | |
803 | - | makeString( | |
804 | - | } | |
805 | - | ||
806 | - | ||
807 | - | func | |
808 | - | let | |
809 | - | | |
810 | - | } | |
811 | - | ||
812 | - | ||
813 | - | func | |
814 | - | ||
815 | - | ||
816 | - | func | |
817 | - | func | |
818 | - | let | |
819 | - | ( | |
820 | - | } | |
821 | - | ||
822 | - | let | |
823 | - | let | |
824 | - | let | |
825 | - | let | |
826 | - | func | |
827 | - | then | |
828 | - | else | |
829 | - | ||
830 | - | func | |
831 | - | then | |
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 | |
832 | 867 | else throw("List size exceeds 6") | |
833 | 868 | ||
834 | - | | |
835 | - | } | |
836 | - | makeString( | |
837 | - | } | |
838 | - | ||
839 | - | ||
840 | - | func | |
841 | - | func | |
842 | - | let | |
843 | - | $Tuple2(( | |
844 | - | } | |
845 | - | ||
846 | - | let | |
847 | - | let | |
848 | - | let | |
849 | - | func | |
850 | - | then | |
851 | - | else | |
852 | - | ||
853 | - | func | |
854 | - | then | |
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 | |
855 | 890 | else throw("List size exceeds 6") | |
856 | 891 | ||
857 | - | | |
858 | - | } | |
859 | - | ||
860 | - | ||
861 | - | func | |
862 | - | let | |
863 | - | let | |
864 | - | if (( | |
865 | - | then $Tuple2(makeString( | |
866 | - | else if (( | |
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)) | |
867 | 902 | then { | |
868 | - | func | |
869 | - | ||
870 | - | let | |
871 | - | let | |
872 | - | let | |
873 | - | let | |
874 | - | func | |
875 | - | then | |
876 | - | else | |
877 | - | ||
878 | - | func | |
879 | - | then | |
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 | |
880 | 915 | else throw("List size exceeds 6") | |
881 | 916 | ||
882 | - | | |
917 | + | cZ(cW(cW(cW(cW(cW(cW(cV, 0), 1), 2), 3), 4), 5), 6) | |
883 | 918 | } | |
884 | - | $Tuple2(makeString( | |
919 | + | $Tuple2(makeString(dc, "_"), makeString(eH, "_")) | |
885 | 920 | } | |
886 | 921 | else { | |
887 | - | func | |
888 | - | let | |
889 | - | $Tuple2(( | |
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)))) | |
890 | 925 | } | |
891 | 926 | ||
892 | - | let | |
893 | - | let | |
894 | - | let | |
895 | - | let | |
896 | - | func | |
897 | - | then | |
898 | - | else | |
899 | - | ||
900 | - | func | |
901 | - | then | |
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 | |
902 | 937 | else throw("List size exceeds 6") | |
903 | 938 | ||
904 | - | | |
939 | + | cZ(cW(cW(cW(cW(cW(cW(cV, 0), 1), 2), 3), 4), 5), 6) | |
905 | 940 | } | |
906 | - | $Tuple2(makeString( | |
941 | + | $Tuple2(makeString(dc._1, "_"), makeString(dc._2, "_")) | |
907 | 942 | } | |
908 | 943 | } | |
909 | 944 | ||
910 | 945 | ||
911 | - | func | |
912 | - | then | |
913 | - | else -( | |
914 | - | ||
915 | - | ||
916 | - | let | |
917 | - | ||
918 | - | func | |
919 | - | let | |
920 | - | let | |
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)) | |
921 | 956 | then "A" | |
922 | - | else if (( | |
957 | + | else if ((eT[1] > eU)) | |
923 | 958 | then "B" | |
924 | - | else if (( | |
959 | + | else if ((eT[2] > eU)) | |
925 | 960 | then "C" | |
926 | - | else if (( | |
961 | + | else if ((eT[3] > eU)) | |
927 | 962 | then "D" | |
928 | - | else if (( | |
963 | + | else if ((eT[4] > eU)) | |
929 | 964 | then "E" | |
930 | 965 | else "F" | |
931 | - | | |
932 | - | } | |
933 | - | ||
934 | - | ||
935 | - | func | |
936 | - | let | |
937 | - | func | |
938 | - | ||
939 | - | let | |
940 | - | let | |
941 | - | let | |
942 | - | let | |
943 | - | func | |
944 | - | then | |
945 | - | else | |
946 | - | ||
947 | - | func | |
948 | - | then | |
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 | |
949 | 984 | else throw("List size exceeds 5") | |
950 | 985 | ||
951 | - | | |
952 | - | } | |
953 | - | | |
954 | - | } | |
955 | - | ||
956 | - | ||
957 | - | func | |
958 | - | let | |
959 | - | [toString(valueOrElse(parseInt( | |
960 | - | then | |
961 | - | else "0_0_0_0_0_0", if ((size(split( | |
962 | - | then | |
963 | - | else "0_0_0_0_0_0", | |
964 | - | } | |
965 | - | ||
966 | - | ||
967 | - | func | |
968 | - | let | |
969 | - | (( | |
970 | - | } | |
971 | - | ||
972 | - | ||
973 | - | func | |
974 | - | let | |
975 | - | func | |
976 | - | ||
977 | - | func | |
978 | - | let | |
979 | - | let | |
980 | - | $Tuple2(( | |
981 | - | } | |
982 | - | ||
983 | - | let | |
984 | - | let | |
985 | - | let | |
986 | - | let | |
987 | - | func | |
988 | - | then | |
989 | - | else | |
990 | - | ||
991 | - | func | |
992 | - | then | |
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 | |
993 | 1028 | else throw("List size exceeds 6") | |
994 | 1029 | ||
995 | - | | |
996 | - | } | |
997 | - | let | |
998 | - | let | |
999 | - | let | |
1000 | - | let | |
1001 | - | func | |
1002 | - | then | |
1003 | - | else | |
1004 | - | ||
1005 | - | func | |
1006 | - | then | |
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 | |
1007 | 1042 | else throw("List size exceeds 6") | |
1008 | 1043 | ||
1009 | - | | |
1010 | - | } | |
1011 | - | let | |
1044 | + | fq(fp(fp(fp(fp(fp(fp(cV, 0), 1), 2), 3), 4), 5), 6) | |
1045 | + | } | |
1046 | + | let fr = if ((fj == "")) | |
1012 | 1047 | then 0 | |
1013 | - | else ( let | |
1014 | - | let | |
1015 | - | let | |
1016 | - | func | |
1017 | - | then | |
1018 | - | else | |
1019 | - | ||
1020 | - | func | |
1021 | - | then | |
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 | |
1022 | 1057 | else throw("List size exceeds 50") | |
1023 | 1058 | ||
1024 | - | | |
1025 | - | (( | |
1026 | - | } | |
1027 | - | ||
1028 | - | ||
1029 | - | func | |
1030 | - | let | |
1031 | - | let | |
1032 | - | let | |
1033 | - | let | |
1034 | - | let | |
1035 | - | let | |
1036 | - | then makeString(["0", toString( | |
1037 | - | else { | |
1038 | - | let | |
1039 | - | let | |
1040 | - | let | |
1041 | - | then parseIntValue( | |
1042 | - | else | |
1043 | - | makeString([toString( | |
1044 | - | } | |
1045 | - | [ | |
1046 | - | then | |
1047 | - | else "0_0_0_0_0_0", if ((size(split( | |
1048 | - | then | |
1049 | - | else "0_0_0_0_0_0", | |
1050 | - | } | |
1051 | - | ||
1052 | - | ||
1053 | - | func | |
1054 | - | let | |
1055 | - | let | |
1056 | - | (( | |
1057 | - | } | |
1058 | - | ||
1059 | - | ||
1060 | - | func | |
1061 | - | let | |
1062 | - | then ((( | |
1063 | - | else -((((-( | |
1064 | - | ( | |
1065 | - | } | |
1066 | - | ||
1067 | - | ||
1068 | - | func | |
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)) | |
1069 | 1104 | then throw("cargoListStr should contain exactly 2 ':' separators") | |
1070 | 1105 | else { | |
1071 | - | let | |
1072 | - | let | |
1073 | - | let | |
1106 | + | let fP = split(fN[0], "_") | |
1107 | + | let fQ = split(fN[1], "_") | |
1108 | + | let fR = if ((fN[2] == "")) | |
1074 | 1109 | then nil | |
1075 | - | else split( | |
1076 | - | if ((size( | |
1110 | + | else split(fN[2], "_") | |
1111 | + | if ((size(fP) != Z)) | |
1077 | 1112 | then throw("All 6 resources should be passed") | |
1078 | - | else if ((size( | |
1113 | + | else if ((size(fQ) != Z)) | |
1079 | 1114 | then throw("All 6 materials should be passed") | |
1080 | 1115 | else { | |
1081 | - | let | |
1082 | - | let | |
1083 | - | let | |
1084 | - | let | |
1116 | + | let eJ = fG(fi) | |
1117 | + | let fS = split(fi[ap], "_") | |
1118 | + | let fT = split(fi[aq], "_") | |
1119 | + | let fU = if ((fi[ar] == "")) | |
1085 | 1120 | then nil | |
1086 | - | else split( | |
1087 | - | let | |
1088 | - | let | |
1089 | - | let | |
1121 | + | else split(fi[ar], "_") | |
1122 | + | let eH = split(fO[ay], "_") | |
1123 | + | let fV = split(fO[az], "_") | |
1124 | + | let fW = if ((fO[aA] == "")) | |
1090 | 1125 | then nil | |
1091 | - | else split( | |
1092 | - | func | |
1093 | - | let | |
1094 | - | let | |
1095 | - | let | |
1096 | - | let | |
1097 | - | if (( | |
1098 | - | then $Tuple4(( | |
1099 | - | else if (( | |
1100 | - | then if (( | |
1101 | - | then throw((((("Attempt to take " + | |
1102 | - | else $Tuple4(( | |
1103 | - | else if ((-( | |
1104 | - | then throw((((("Attempt to take " + toString(-( | |
1105 | - | else $Tuple4(( | |
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)) | |
1106 | 1141 | } | |
1107 | 1142 | ||
1108 | - | let | |
1109 | - | let | |
1110 | - | let | |
1111 | - | let | |
1112 | - | func | |
1113 | - | then | |
1114 | - | else | |
1115 | - | ||
1116 | - | func | |
1117 | - | then | |
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 | |
1118 | 1153 | else throw("List size exceeds 6") | |
1119 | 1154 | ||
1120 | - | | |
1155 | + | cZ(cW(cW(cW(cW(cW(cW(cV, 0), 1), 2), 3), 4), 5), 6) | |
1121 | 1156 | } | |
1122 | - | func | |
1123 | - | let | |
1124 | - | let | |
1125 | - | let | |
1126 | - | let | |
1127 | - | if (( | |
1128 | - | then $Tuple4(( | |
1129 | - | else if (( | |
1130 | - | then if (( | |
1131 | - | then throw((((("Attempt to take " + | |
1132 | - | else $Tuple4(( | |
1133 | - | else if ((-( | |
1134 | - | then throw((((("Attempt to take " + toString(-( | |
1135 | - | else $Tuple4(( | |
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)) | |
1136 | 1171 | } | |
1137 | 1172 | ||
1138 | - | let | |
1139 | - | let | |
1140 | - | let | |
1141 | - | let | |
1142 | - | func | |
1143 | - | then | |
1144 | - | else | |
1145 | - | ||
1146 | - | func | |
1147 | - | then | |
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 | |
1148 | 1183 | else throw("List size exceeds 6") | |
1149 | 1184 | ||
1150 | - | | |
1185 | + | fq(fp(fp(fp(fp(fp(fp(cV, 0), 1), 2), 3), 4), 5), 6) | |
1151 | 1186 | } | |
1152 | - | func | |
1153 | - | let | |
1154 | - | let | |
1155 | - | let | |
1156 | - | then parseIntValue( | |
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]) | |
1157 | 1192 | else 0 | |
1158 | - | let | |
1159 | - | then parseIntValue( | |
1193 | + | let gg = if ((size(fW) > eu)) | |
1194 | + | then parseIntValue(fW[eu]) | |
1160 | 1195 | else 0 | |
1161 | - | if (( | |
1162 | - | then $Tuple4(( | |
1163 | - | else if (( | |
1164 | - | then if (( | |
1165 | - | then throw((((("Attempt to take " + | |
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")) | |
1166 | 1201 | else { | |
1167 | - | let | |
1168 | - | $Tuple4(( | |
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)) | |
1169 | 1204 | } | |
1170 | - | else if ((-( | |
1171 | - | then throw((((("Attempt to take " + toString(-( | |
1205 | + | else if ((-(fY) > gf)) | |
1206 | + | then throw((((("Attempt to take " + toString(-(fY))) + " from warehouse, but only ") + toString(gf)) + " available")) | |
1172 | 1207 | else { | |
1173 | - | let | |
1174 | - | $Tuple4(( | |
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)) | |
1175 | 1210 | } | |
1176 | 1211 | } | |
1177 | 1212 | ||
1178 | - | let | |
1213 | + | let fe = if ((size(fR) != 0)) | |
1179 | 1214 | then { | |
1180 | - | let | |
1181 | - | let | |
1182 | - | let | |
1183 | - | func | |
1184 | - | then | |
1185 | - | else | |
1186 | - | ||
1187 | - | func | |
1188 | - | then | |
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 | |
1189 | 1224 | else throw("List size exceeds 50") | |
1190 | 1225 | ||
1191 | - | | |
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) | |
1192 | 1227 | } | |
1193 | - | else $Tuple4(0, | |
1194 | - | let | |
1195 | - | if (( | |
1196 | - | then throw((((("Attempt to put total " + toString( | |
1197 | - | else $Tuple7(makeString( | |
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) | |
1198 | 1233 | } | |
1199 | 1234 | } | |
1200 | 1235 | ||
1201 | 1236 | ||
1202 | - | func | |
1203 | - | let | |
1204 | - | let | |
1205 | - | let | |
1206 | - | let | |
1207 | - | let | |
1208 | - | let | |
1209 | - | let | |
1210 | - | let | |
1211 | - | let | |
1212 | - | let | |
1213 | - | $Tuple2([IntegerEntry( | |
1214 | - | } | |
1215 | - | ||
1216 | - | ||
1217 | - | func | |
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))) | |
1218 | 1253 | then throw("signature does not match") | |
1219 | 1254 | else { | |
1220 | - | let | |
1221 | - | let | |
1222 | - | let | |
1223 | - | let | |
1224 | - | let | |
1225 | - | let | |
1226 | - | let | |
1227 | - | let | |
1228 | - | if (if (( | |
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))) | |
1229 | 1264 | then true | |
1230 | - | else ((lastBlock.timestamp - | |
1231 | - | then throw(((("signature outdated: logTime=" + toString( | |
1265 | + | else ((lastBlock.timestamp - cf) > gA)) | |
1266 | + | then throw(((("signature outdated: logTime=" + toString(gA)) + ", bcTime=") + toString(lastBlock.timestamp))) | |
1232 | 1267 | else { | |
1233 | - | let | |
1234 | - | let | |
1235 | - | if (( | |
1236 | - | then throw(((("Tx ids don't match! In state: " + | |
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)) | |
1237 | 1272 | else { | |
1238 | - | let | |
1239 | - | let | |
1240 | - | let | |
1241 | - | let | |
1242 | - | if (( | |
1243 | - | then throw(((("oldHealth=" + toString( | |
1244 | - | else if ((0 >= | |
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)) | |
1245 | 1280 | then throw("You can't fly with zero health") | |
1246 | 1281 | else { | |
1247 | - | let | |
1248 | - | then | |
1282 | + | let gG = if ((size(gu) > cI)) | |
1283 | + | then gu[cI] | |
1249 | 1284 | else "" | |
1250 | - | let | |
1251 | - | then | |
1285 | + | let gH = if ((size(gu) > cJ)) | |
1286 | + | then gu[cJ] | |
1252 | 1287 | else "" | |
1253 | - | let | |
1254 | - | then ( | |
1288 | + | let gI = if (if ((gx > 0)) | |
1289 | + | then (gG == "$") | |
1255 | 1290 | else false) | |
1256 | - | then | |
1291 | + | then bX(invoke(bJ, "sendUsdtPrize", [ba], nil)) | |
1257 | 1292 | else 0 | |
1258 | - | $Tuple5( | |
1293 | + | $Tuple5(gx, q, gI, gz, gH) | |
1259 | 1294 | } | |
1260 | 1295 | } | |
1261 | 1296 | } | |
1262 | 1297 | } | |
1263 | 1298 | ||
1264 | 1299 | ||
1265 | - | func | |
1266 | - | let | |
1267 | - | let | |
1268 | - | let | |
1269 | - | let | |
1270 | - | let | |
1271 | - | let | |
1272 | - | let | |
1273 | - | let | |
1274 | - | if ((0 >= | |
1275 | - | then $Tuple3([IntegerEntry( | |
1276 | - | else { | |
1277 | - | let | |
1278 | - | let | |
1279 | - | $Tuple3(((( | |
1280 | - | } | |
1281 | - | } | |
1282 | - | ||
1283 | - | ||
1284 | - | func | |
1285 | - | let | |
1286 | - | let | |
1287 | - | let | |
1288 | - | let | |
1289 | - | (( | |
1290 | - | } | |
1291 | - | ||
1292 | - | ||
1293 | - | func | |
1294 | - | let | |
1295 | - | then $Tuple2( | |
1296 | - | else { | |
1297 | - | let | |
1298 | - | let | |
1299 | - | let | |
1300 | - | if (( | |
1301 | - | then throw((("Duck location type is " + | |
1302 | - | else $Tuple2( | |
1303 | - | } | |
1304 | - | let | |
1305 | - | let | |
1306 | - | let | |
1307 | - | let | |
1308 | - | let | |
1309 | - | let | |
1310 | - | if (( | |
1311 | - | then throw(( | |
1312 | - | else { | |
1313 | - | let | |
1314 | - | $Tuple4( | |
1315 | - | } | |
1316 | - | } | |
1317 | - | ||
1318 | - | ||
1319 | - | func | |
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)) | |
1320 | 1355 | then throw("Negative amount") | |
1321 | 1356 | else { | |
1322 | - | let | |
1323 | - | let | |
1324 | - | let | |
1325 | - | let | |
1326 | - | if ((0 > | |
1327 | - | then throw(((("Saved timestamp is in future, saved = " + toString( | |
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))) | |
1328 | 1363 | else { | |
1329 | - | let | |
1330 | - | let | |
1331 | - | let | |
1332 | - | if (( | |
1333 | - | then throw(((("Not enough resources, available = " + toString( | |
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))) | |
1334 | 1369 | else { | |
1335 | - | let | |
1336 | - | let | |
1337 | - | let | |
1338 | - | let | |
1339 | - | let | |
1340 | - | let | |
1341 | - | let | |
1342 | - | let | |
1343 | - | let | |
1344 | - | if (if (( | |
1345 | - | then ( | |
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) | |
1346 | 1381 | else false) | |
1347 | - | then throw((("Only " + toString( | |
1382 | + | then throw((("Only " + toString(eJ)) + " space left in warehouse")) | |
1348 | 1383 | else { | |
1349 | - | let | |
1350 | - | let | |
1351 | - | let | |
1352 | - | let | |
1353 | - | let | |
1354 | - | then $Tuple4( | |
1355 | - | else if (( | |
1356 | - | then $Tuple4( | |
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])) | |
1357 | 1392 | else { | |
1358 | - | let | |
1359 | - | let | |
1360 | - | $Tuple4( | |
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)) | |
1361 | 1396 | } | |
1362 | - | let | |
1363 | - | let | |
1364 | - | let | |
1365 | - | let | |
1366 | - | $Tuple5([IntegerEntry( | |
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]], "_")]) | |
1367 | 1402 | } | |
1368 | 1403 | } | |
1369 | 1404 | } | |
1370 | 1405 | } | |
1371 | 1406 | ||
1372 | 1407 | ||
1373 | - | func | |
1374 | - | let | |
1375 | - | let | |
1376 | - | let | |
1377 | - | | |
1378 | - | } | |
1379 | - | ||
1380 | - | ||
1381 | - | func | |
1382 | - | let b = toString( | |
1383 | - | let | |
1384 | - | let | |
1385 | - | let | |
1386 | - | let | |
1387 | - | if (( | |
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)) | |
1388 | 1423 | then throw("Currently max infrastructure level = 3") | |
1389 | 1424 | else { | |
1390 | - | let | |
1391 | - | let | |
1392 | - | if (if (!( | |
1393 | - | then ( | |
1425 | + | let Q = (hu + 1) | |
1426 | + | let hv = fraction(ci, (gO * Q), bq) | |
1427 | + | if (if (!(de)) | |
1428 | + | then (hs != hv) | |
1394 | 1429 | else false) | |
1395 | - | then throw(("Payment attached should be " + toString( | |
1430 | + | then throw(("Payment attached should be " + toString(hv))) | |
1396 | 1431 | else { | |
1397 | - | let | |
1398 | - | let | |
1399 | - | let | |
1400 | - | let | |
1401 | - | let | |
1402 | - | let | |
1403 | - | let | |
1404 | - | let | |
1405 | - | let | |
1406 | - | let | |
1407 | - | let | |
1408 | - | let | |
1409 | - | $Tuple3(([IntegerEntry( | |
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) | |
1410 | 1445 | } | |
1411 | 1446 | } | |
1412 | 1447 | } | |
1413 | 1448 | ||
1414 | 1449 | ||
1415 | - | func | |
1450 | + | func hD (q,hE) = if (!(bg)) | |
1416 | 1451 | then $Tuple2(nil, 0) | |
1417 | 1452 | else { | |
1418 | - | let | |
1419 | - | let | |
1420 | - | let | |
1421 | - | let | |
1422 | - | let | |
1423 | - | let | |
1424 | - | $Tuple2([IntegerEntry( | |
1425 | - | } | |
1426 | - | ||
1427 | - | ||
1428 | - | func | |
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)) | |
1429 | 1464 | then $Tuple2(nil, 0) | |
1430 | 1465 | else { | |
1431 | - | let | |
1432 | - | let | |
1433 | - | let | |
1434 | - | let | |
1435 | - | let | |
1436 | - | let | |
1437 | - | $Tuple2([IntegerEntry( | |
1438 | - | } | |
1439 | - | ||
1440 | - | ||
1441 | - | func | |
1442 | - | let | |
1443 | - | let | |
1444 | - | let | |
1445 | - | if (!(isDefined( | |
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))) | |
1446 | 1481 | then throw("You are not eligible for ONBOARD artifact") | |
1447 | 1482 | else { | |
1448 | - | let | |
1449 | - | let | |
1450 | - | if (isDefined( | |
1451 | - | then throw(("You already used your ONBOARD artifact on duck " + value( | |
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))) | |
1452 | 1487 | else { | |
1453 | - | let | |
1454 | - | let | |
1455 | - | if (isDefined( | |
1456 | - | then throw(((("The duck " + | |
1457 | - | else ([StringEntry( | |
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) | |
1458 | 1493 | } | |
1459 | 1494 | } | |
1460 | 1495 | } | |
1461 | 1496 | ||
1462 | 1497 | ||
1463 | - | func | |
1464 | - | let | |
1465 | - | let | |
1466 | - | let | |
1467 | - | let | |
1468 | - | if ((valueOrElse(getInteger( | |
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)) | |
1469 | 1504 | then throw("Presale artifact is already activated") | |
1470 | - | else if ((parseIntValue( | |
1471 | - | then throw(((( | |
1505 | + | else if ((parseIntValue(dX._3[bN]) > cr)) | |
1506 | + | then throw((((W + " ") + aN) + " is not eligible for presale artifact")) | |
1472 | 1507 | else { | |
1473 | - | let | |
1474 | - | (((( | |
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, ":"))) | |
1475 | 1510 | } | |
1476 | 1511 | } | |
1477 | 1512 | ||
1478 | 1513 | ||
1479 | - | func | |
1480 | - | let | |
1481 | - | func | |
1482 | - | let | |
1483 | - | let | |
1484 | - | let | |
1485 | - | let | |
1486 | - | if (( | |
1487 | - | then throw(( | |
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")) | |
1488 | 1523 | else { | |
1489 | - | let | |
1490 | - | let | |
1491 | - | if (if (( | |
1492 | - | then ( | |
1524 | + | let hd = split(gZ.description, "_") | |
1525 | + | let go = hd[bQ] | |
1526 | + | if (if ((cR._3 != "")) | |
1527 | + | then (cR._3 != go) | |
1493 | 1528 | else false) | |
1494 | 1529 | then throw("Lands should be on the same continent to merge") | |
1495 | 1530 | else { | |
1496 | - | let | |
1497 | - | let | |
1498 | - | let | |
1499 | - | let | |
1500 | - | let | |
1501 | - | let | |
1502 | - | let | |
1503 | - | let | |
1504 | - | let | |
1505 | - | if (("S" == | |
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)) | |
1506 | 1541 | then 3 | |
1507 | - | else if (("M" == | |
1542 | + | else if (("M" == bj)) | |
1508 | 1543 | then 4 | |
1509 | - | else if (("L" == | |
1544 | + | else if (("L" == bj)) | |
1510 | 1545 | then 5 | |
1511 | - | else if (("XL" == | |
1546 | + | else if (("XL" == bj)) | |
1512 | 1547 | then 6 | |
1513 | 1548 | else throw("Only S, M, L, XL can merge") | |
1514 | 1549 | } | |
1515 | - | if (( | |
1550 | + | if ((fx != ic)) | |
1516 | 1551 | then throw("All lands should be maxed to merge") | |
1517 | 1552 | else { | |
1518 | - | let | |
1519 | - | let | |
1520 | - | let | |
1521 | - | if ((0 > | |
1522 | - | then throw(((("Saved timestamp is in future, saved = " + toString( | |
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))) | |
1523 | 1558 | else { | |
1524 | - | let | |
1525 | - | let | |
1526 | - | let | |
1527 | - | let | |
1528 | - | let | |
1529 | - | let | |
1530 | - | if (!(isDefined( | |
1531 | - | then throw(("Your staked lands don't contain " + | |
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)) | |
1532 | 1567 | else { | |
1533 | - | let | |
1534 | - | let | |
1535 | - | $Tuple8( | |
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)) | |
1536 | 1571 | } | |
1537 | 1572 | } | |
1538 | 1573 | } | |
1539 | 1574 | } | |
1540 | 1575 | } | |
1541 | 1576 | } | |
1542 | 1577 | ||
1543 | - | let | |
1544 | - | let | |
1545 | - | let | |
1546 | - | let | |
1547 | - | let | |
1548 | - | let | |
1549 | - | then split_51C(value( | |
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), "_") | |
1550 | 1585 | else nil | |
1551 | - | let | |
1552 | - | let | |
1553 | - | let | |
1554 | - | let | |
1555 | - | func | |
1556 | - | then | |
1557 | - | else | |
1558 | - | ||
1559 | - | func | |
1560 | - | then | |
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 | |
1561 | 1596 | else throw("List size exceeds 5") | |
1562 | 1597 | ||
1563 | - | | |
1564 | - | } | |
1565 | - | let | |
1566 | - | let | |
1567 | - | let | |
1568 | - | let | |
1569 | - | let | |
1570 | - | let | |
1571 | - | let | |
1572 | - | let | |
1573 | - | let | |
1574 | - | let | |
1575 | - | let | |
1576 | - | $Tuple2(((((((((((((((( | |
1577 | - | then StringEntry( | |
1578 | - | else DeleteEntry( | |
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)) | |
1579 | 1614 | then 0 | |
1580 | - | else ( | |
1581 | - | } | |
1582 | - | ||
1583 | - | ||
1584 | - | func | |
1585 | - | ||
1586 | - | ||
1587 | - | func | |
1588 | - | let | |
1589 | - | if (if (!( | |
1590 | - | then ( | |
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) | |
1591 | 1626 | else false) | |
1592 | - | then throw(("Payment attached should be " + toString( | |
1593 | - | else | |
1594 | - | } | |
1595 | - | ||
1596 | - | ||
1597 | - | func | |
1598 | - | let | |
1599 | - | if (if (!( | |
1600 | - | then ( | |
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) | |
1601 | 1636 | else false) | |
1602 | - | then throw(("Payment attached should be " + toString( | |
1603 | - | else | |
1604 | - | } | |
1605 | - | ||
1606 | - | ||
1607 | - | func | |
1608 | - | let | |
1609 | - | if (if (!( | |
1610 | - | then ( | |
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) | |
1611 | 1646 | else false) | |
1612 | - | then throw(("Payment attached should be " + toString( | |
1613 | - | else | |
1614 | - | } | |
1615 | - | ||
1616 | - | ||
1617 | - | func | |
1618 | - | let | |
1619 | - | let | |
1620 | - | if ((4 == | |
1621 | - | then | |
1622 | - | else if ((3 == | |
1623 | - | then | |
1624 | - | else if ((5 == | |
1625 | - | then | |
1626 | - | else if ((2 == | |
1627 | - | then | |
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) | |
1628 | 1663 | else throw("Unknown merge") | |
1629 | 1664 | } | |
1630 | - | | |
1631 | - | } | |
1632 | - | ||
1633 | - | ||
1634 | - | func | |
1635 | - | then valueOrElse(getBoolean( | |
1665 | + | it | |
1666 | + | } | |
1667 | + | ||
1668 | + | ||
1669 | + | func iu (eu) = if (if ((eu.originCaller != bJ)) | |
1670 | + | then valueOrElse(getBoolean(aY()), false) | |
1636 | 1671 | else false) | |
1637 | 1672 | then throw("Contracts are under maintenance") | |
1638 | - | else StringEntry( | |
1639 | - | ||
1640 | - | ||
1641 | - | @Callable( | |
1642 | - | func constructorV1 ( | |
1673 | + | else StringEntry(aB(toString(eu.originCaller)), toBase58String(eu.transactionId)) | |
1674 | + | ||
1675 | + | ||
1676 | + | @Callable(eu) | |
1677 | + | func constructorV1 (iv) = if ((eu.caller != this)) | |
1643 | 1678 | then throw("Permission denied") | |
1644 | - | else [StringEntry( | |
1645 | - | ||
1646 | - | ||
1647 | - | ||
1648 | - | @Callable( | |
1649 | - | func setBlocked ( | |
1679 | + | else [StringEntry(bD(), iv)] | |
1680 | + | ||
1681 | + | ||
1682 | + | ||
1683 | + | @Callable(eu) | |
1684 | + | func setBlocked (iw) = if ((eu.caller != this)) | |
1650 | 1685 | then throw("permission denied") | |
1651 | - | else [BooleanEntry( | |
1652 | - | ||
1653 | - | ||
1654 | - | ||
1655 | - | @Callable( | |
1686 | + | else [BooleanEntry(aY(), iw)] | |
1687 | + | ||
1688 | + | ||
1689 | + | ||
1690 | + | @Callable(eu) | |
1656 | 1691 | func stakeLand () = { | |
1657 | - | let | |
1658 | - | if ((size( | |
1692 | + | let ix = iu(eu) | |
1693 | + | if ((size(eu.payments) != 1)) | |
1659 | 1694 | then throw("Exactly one payment required") | |
1660 | 1695 | else { | |
1661 | - | let | |
1662 | - | let | |
1663 | - | let | |
1664 | - | if (( | |
1665 | - | then throw((("NFT " + | |
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")) | |
1666 | 1701 | else { | |
1667 | - | let | |
1668 | - | if (( | |
1702 | + | let gZ = value(assetInfo(aD)) | |
1703 | + | if ((gZ.issuer != this)) | |
1669 | 1704 | then throw("Unknown issuer of token") | |
1670 | - | else if (!(contains( | |
1671 | - | then throw((("Only NFT " + | |
1705 | + | else if (!(contains(gZ.name, W))) | |
1706 | + | then throw((("Only NFT " + W) + " tokens are accepted")) | |
1672 | 1707 | else { | |
1673 | - | let | |
1674 | - | let | |
1675 | - | then dropRight( | |
1676 | - | else if (contains( | |
1677 | - | then dropRight( | |
1678 | - | else dropRight( | |
1679 | - | if (!(isDefined(parseInt( | |
1680 | - | then throw(("Cannot parse land number from " + | |
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)) | |
1681 | 1716 | else { | |
1682 | - | let | |
1683 | - | let | |
1684 | - | if (isDefined(getInteger( | |
1685 | - | then throw((("NFT " + | |
1717 | + | let aN = toBase58String(aD) | |
1718 | + | let ha = aF(aN) | |
1719 | + | if (isDefined(getInteger(ha))) | |
1720 | + | then throw((("NFT " + gZ.name) + " is already staked")) | |
1686 | 1721 | else { | |
1687 | - | let | |
1688 | - | let | |
1689 | - | let | |
1690 | - | let | |
1691 | - | let | |
1692 | - | let | |
1693 | - | let | |
1694 | - | let | |
1695 | - | then split_51C(value( | |
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), "_") | |
1696 | 1731 | else nil | |
1697 | - | if (containsElement( | |
1698 | - | then throw(("Your staked lands already contain " + | |
1732 | + | if (containsElement(id, aN)) | |
1733 | + | then throw(("Your staked lands already contain " + aN)) | |
1699 | 1734 | else { | |
1700 | - | let | |
1701 | - | let | |
1702 | - | let | |
1703 | - | let | |
1704 | - | $Tuple2([IntegerEntry( | |
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) | |
1705 | 1740 | } | |
1706 | 1741 | } | |
1707 | 1742 | } | |
1708 | 1743 | } | |
1709 | 1744 | } | |
1710 | 1745 | } | |
1711 | 1746 | } | |
1712 | 1747 | ||
1713 | 1748 | ||
1714 | 1749 | ||
1715 | - | @Callable( | |
1716 | - | func unstakeLand ( | |
1717 | - | let | |
1718 | - | if ((size( | |
1750 | + | @Callable(eu) | |
1751 | + | func unstakeLand (gU) = { | |
1752 | + | let ix = iu(eu) | |
1753 | + | if ((size(eu.payments) != 0)) | |
1719 | 1754 | then throw("No payments required") | |
1720 | 1755 | else { | |
1721 | - | let b = toString( | |
1722 | - | let | |
1723 | - | let | |
1724 | - | let | |
1725 | - | let | |
1726 | - | let | |
1727 | - | let | |
1728 | - | let | |
1729 | - | let | |
1730 | - | let | |
1731 | - | if (!(isDefined( | |
1732 | - | then throw(("Your staked lands don't contain " + | |
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)) | |
1733 | 1768 | else { | |
1734 | - | let | |
1735 | - | let | |
1736 | - | if (( | |
1737 | - | then throw(("Your gWL are taking part in voting, cannot unstake until " + toString( | |
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))) | |
1738 | 1773 | else { | |
1739 | - | let | |
1740 | - | if (( | |
1741 | - | then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString( | |
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))) | |
1742 | 1777 | else { | |
1743 | - | let | |
1744 | - | let | |
1745 | - | let | |
1778 | + | let im = bT(b) | |
1779 | + | let in = valueOrElse(getInteger(im), 0) | |
1780 | + | let iF = if ((gO > in)) | |
1746 | 1781 | then 0 | |
1747 | - | else ( | |
1748 | - | let | |
1749 | - | $Tuple2([ScriptTransfer( | |
1750 | - | then StringEntry( | |
1751 | - | else DeleteEntry( | |
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) | |
1752 | 1787 | } | |
1753 | 1788 | } | |
1754 | 1789 | } | |
1755 | 1790 | } | |
1756 | 1791 | } | |
1757 | 1792 | ||
1758 | 1793 | ||
1759 | 1794 | ||
1760 | - | @Callable( | |
1795 | + | @Callable(eu) | |
1761 | 1796 | func stakeDuck () = { | |
1762 | - | let | |
1763 | - | if ((size( | |
1797 | + | let ix = iu(eu) | |
1798 | + | if ((size(eu.payments) != 1)) | |
1764 | 1799 | then throw("Exactly one payment required") | |
1765 | 1800 | else { | |
1766 | - | let | |
1767 | - | let | |
1768 | - | let | |
1769 | - | if (( | |
1770 | - | then throw((("NFT " + | |
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")) | |
1771 | 1806 | else { | |
1772 | - | let | |
1773 | - | if (if (( | |
1774 | - | then ( | |
1807 | + | let gZ = value(assetInfo(aD)) | |
1808 | + | if (if ((gZ.issuer != cb)) | |
1809 | + | then (gZ.issuer != cc) | |
1775 | 1810 | else false) | |
1776 | - | then throw((("Unknown issuer of " + | |
1777 | - | else if (!(contains( | |
1778 | - | then throw((("Only NFT " + | |
1811 | + | then throw((("Unknown issuer of " + X) + " token")) | |
1812 | + | else if (!(contains(gZ.name, X))) | |
1813 | + | then throw((("Only NFT " + X) + " tokens are accepted")) | |
1779 | 1814 | else { | |
1780 | - | let | |
1781 | - | let | |
1782 | - | if (isDefined(getInteger( | |
1783 | - | then throw((("NFT " + | |
1784 | - | else if (isDefined(getString( | |
1785 | - | then throw(("You already staked one duck: " + | |
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)) | |
1786 | 1821 | else { | |
1787 | - | let | |
1788 | - | let | |
1789 | - | let | |
1790 | - | let | |
1791 | - | let | |
1792 | - | let | |
1793 | - | let | |
1794 | - | ([IntegerEntry( | |
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)) | |
1795 | 1830 | then nil | |
1796 | - | else ([StringEntry( | |
1831 | + | else ([StringEntry(iH, ad)] ++ (if (isDefined(iJ)) | |
1797 | 1832 | then nil | |
1798 | - | else (([StringEntry( | |
1833 | + | else (([StringEntry(fd, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(gD, iK)) :+ ix))))) | |
1799 | 1834 | } | |
1800 | 1835 | } | |
1801 | 1836 | } | |
1802 | 1837 | } | |
1803 | 1838 | } | |
1804 | 1839 | ||
1805 | 1840 | ||
1806 | 1841 | ||
1807 | - | @Callable( | |
1808 | - | func unstakeDuck ( | |
1809 | - | let | |
1810 | - | if ((size( | |
1842 | + | @Callable(eu) | |
1843 | + | func unstakeDuck (iG) = { | |
1844 | + | let ix = iu(eu) | |
1845 | + | if ((size(eu.payments) != 0)) | |
1811 | 1846 | then throw("No payments required") | |
1812 | 1847 | else { | |
1813 | - | let | |
1814 | - | let | |
1815 | - | let | |
1816 | - | let | |
1817 | - | if (!(isDefined(getInteger( | |
1818 | - | then throw((("NFT " + | |
1819 | - | else if (!(isDefined(getString( | |
1820 | - | then throw((("The duck " + | |
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")) | |
1821 | 1856 | else { | |
1822 | - | let | |
1823 | - | if (( | |
1857 | + | let hc = valueOrErrorMessage(getString(aU(toBase58String(aD))), (("NFT " + gZ.name) + " is orphaned")) | |
1858 | + | if ((hc != bw)) | |
1824 | 1859 | then throw("Staked NFT is not yours") | |
1825 | 1860 | else { | |
1826 | - | let | |
1827 | - | let | |
1828 | - | let | |
1829 | - | if (( | |
1830 | - | then throw((("Please heal your duck to " + toString( | |
1831 | - | else [ScriptTransfer( | |
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] | |
1832 | 1867 | } | |
1833 | 1868 | } | |
1834 | 1869 | } | |
1835 | 1870 | } | |
1836 | 1871 | ||
1837 | 1872 | ||
1838 | 1873 | ||
1839 | - | @Callable( | |
1840 | - | func claimRes ( | |
1841 | - | let | |
1842 | - | if ((size( | |
1874 | + | @Callable(eu) | |
1875 | + | func claimRes (fK,iL) = { | |
1876 | + | let ix = iu(eu) | |
1877 | + | if ((size(eu.payments) != 0)) | |
1843 | 1878 | then throw("No payments required") | |
1844 | 1879 | else { | |
1845 | - | let b = toString( | |
1846 | - | let | |
1847 | - | let | |
1848 | - | $Tuple2((((( | |
1849 | - | } | |
1850 | - | } | |
1851 | - | ||
1852 | - | ||
1853 | - | ||
1854 | - | @Callable( | |
1855 | - | func claimResToWH ( | |
1856 | - | let | |
1857 | - | if ((size( | |
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)) | |
1858 | 1893 | then throw("No payments required") | |
1859 | 1894 | else { | |
1860 | - | let b = toString( | |
1861 | - | let | |
1862 | - | $Tuple2((((( | |
1863 | - | } | |
1864 | - | } | |
1865 | - | ||
1866 | - | ||
1867 | - | ||
1868 | - | @Callable( | |
1869 | - | func flight ( | |
1870 | - | let | |
1871 | - | if ((size( | |
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)) | |
1872 | 1907 | then throw("No payments required") | |
1873 | 1908 | else { | |
1874 | - | let | |
1875 | - | let | |
1876 | - | let | |
1877 | - | let | |
1878 | - | let | |
1879 | - | if (( | |
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)) | |
1880 | 1915 | then throw("You can't fly to the same location") | |
1881 | 1916 | else { | |
1882 | - | let | |
1883 | - | let | |
1884 | - | let | |
1885 | - | $Tuple2(([StringEntry( | |
1886 | - | then | |
1887 | - | else | |
1888 | - | then | |
1889 | - | else | |
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) | |
1890 | 1925 | } | |
1891 | 1926 | } | |
1892 | 1927 | } | |
1893 | 1928 | ||
1894 | 1929 | ||
1895 | 1930 | ||
1896 | - | @Callable( | |
1897 | - | func heal ( | |
1898 | - | let | |
1899 | - | if (if (if ((0 > | |
1931 | + | @Callable(eu) | |
1932 | + | func heal (iM,iN,iO) = { | |
1933 | + | let ix = iu(eu) | |
1934 | + | if (if (if ((0 > iM)) | |
1900 | 1935 | then true | |
1901 | - | else (0 > | |
1936 | + | else (0 > iN)) | |
1902 | 1937 | then true | |
1903 | - | else (0 > | |
1938 | + | else (0 > iO)) | |
1904 | 1939 | then throw("Quantity cannot be negative") | |
1905 | 1940 | else { | |
1906 | - | let | |
1907 | - | let | |
1908 | - | let | |
1909 | - | let | |
1910 | - | let | |
1911 | - | if (( | |
1912 | - | then throw((("HP should be < " + toString( | |
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")) | |
1913 | 1948 | else { | |
1914 | - | let | |
1915 | - | let | |
1916 | - | let | |
1949 | + | let fd = aW(q) | |
1950 | + | let fO = fc(fd) | |
1951 | + | let iR = if ((fO[aA] == "")) | |
1917 | 1952 | then nil | |
1918 | - | else split( | |
1919 | - | func | |
1920 | - | let | |
1921 | - | let | |
1922 | - | then parseIntValue( | |
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]) | |
1923 | 1958 | else 0 | |
1924 | - | if ((3 > | |
1959 | + | if ((3 > bY)) | |
1925 | 1960 | then { | |
1926 | - | let | |
1927 | - | if (( | |
1928 | - | then throw(((("You have only " + toString( | |
1929 | - | else $Tuple3(( | |
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))) | |
1930 | 1965 | } | |
1931 | - | else $Tuple3(( | |
1966 | + | else $Tuple3((cR._1 :+ toString(eQ)), (bY + 1), cR._3) | |
1932 | 1967 | } | |
1933 | 1968 | ||
1934 | - | let | |
1935 | - | let | |
1936 | - | let | |
1937 | - | let | |
1938 | - | func | |
1939 | - | then | |
1940 | - | else | |
1941 | - | ||
1942 | - | func | |
1943 | - | then | |
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 | |
1944 | 1979 | else throw("List size exceeds 50") | |
1945 | 1980 | ||
1946 | - | | |
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) | |
1947 | 1982 | } | |
1948 | - | let | |
1949 | - | $Tuple2(([IntegerEntry( | |
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) | |
1950 | 1985 | } | |
1951 | 1986 | } | |
1952 | 1987 | } | |
1953 | 1988 | ||
1954 | 1989 | ||
1955 | 1990 | ||
1956 | - | @Callable( | |
1991 | + | @Callable(eu) | |
1957 | 1992 | func healES () = { | |
1958 | - | let | |
1959 | - | if ((size( | |
1993 | + | let ix = iu(eu) | |
1994 | + | if ((size(eu.payments) != 1)) | |
1960 | 1995 | then throw("Exactly one payment required") | |
1961 | 1996 | else { | |
1962 | - | let | |
1963 | - | if (( | |
1997 | + | let iy = value(eu.payments[0]) | |
1998 | + | if ((iy.assetId != bi)) | |
1964 | 1999 | then throw("Allowed USDT payment only!") | |
1965 | 2000 | else { | |
1966 | - | let | |
1967 | - | let | |
1968 | - | let | |
1969 | - | let | |
1970 | - | if (( | |
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)) | |
1971 | 2006 | then throw("HP should be 0 to call Emergency Service") | |
1972 | 2007 | else { | |
1973 | - | let | |
1974 | - | let | |
1975 | - | let | |
2008 | + | let fd = aW(q) | |
2009 | + | let fO = fc(fd) | |
2010 | + | let iR = if ((fO[aA] == "")) | |
1976 | 2011 | then nil | |
1977 | - | else split( | |
1978 | - | let | |
1979 | - | then parseIntValue( | |
2012 | + | else split(fO[aA], "_") | |
2013 | + | let iW = if ((size(iR) > 0)) | |
2014 | + | then parseIntValue(iR[0]) | |
1980 | 2015 | else 0 | |
1981 | - | let | |
1982 | - | then parseIntValue( | |
2016 | + | let iX = if ((size(iR) > 1)) | |
2017 | + | then parseIntValue(iR[1]) | |
1983 | 2018 | else 0 | |
1984 | - | let | |
1985 | - | then parseIntValue( | |
2019 | + | let iY = if ((size(iR) > 2)) | |
2020 | + | then parseIntValue(iR[2]) | |
1986 | 2021 | else 0 | |
1987 | - | if (if (if (( | |
2022 | + | if (if (if ((iW > 0)) | |
1988 | 2023 | then true | |
1989 | - | else ( | |
2024 | + | else (iX > 0)) | |
1990 | 2025 | then true | |
1991 | - | else ( | |
2026 | + | else (iY > 0)) | |
1992 | 2027 | then throw("You have to use own Medical Kit") | |
1993 | 2028 | else { | |
1994 | - | let | |
1995 | - | let | |
1996 | - | then split(value( | |
2029 | + | let iZ = getString(bK, bb()) | |
2030 | + | let ja = if (isDefined(iZ)) | |
2031 | + | then split(value(iZ), "_") | |
1997 | 2032 | else nil | |
1998 | - | let | |
1999 | - | then parseIntValue( | |
2033 | + | let jb = if ((size(ja) > 0)) | |
2034 | + | then parseIntValue(ja[0]) | |
2000 | 2035 | else 0 | |
2001 | - | if ((0 >= | |
2036 | + | if ((0 >= jb)) | |
2002 | 2037 | then throw("There are no Medical Kits L1 at Emergency Service storage") | |
2003 | 2038 | else { | |
2004 | - | let | |
2005 | - | let | |
2006 | - | let | |
2007 | - | let | |
2008 | - | let | |
2009 | - | if (( | |
2010 | - | then throw(("Payment attached should be " + toString( | |
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))) | |
2011 | 2046 | else { | |
2012 | - | let | |
2013 | - | $Tuple2(([IntegerEntry( | |
2047 | + | let dj = bU(invoke(bK, "updateEsStorage", [jc], [AttachedPayment(bi, je)])) | |
2048 | + | $Tuple2(([IntegerEntry(gD, iV), ix] ++ hD(q, C)._1), dj) | |
2014 | 2049 | } | |
2015 | 2050 | } | |
2016 | 2051 | } | |
2017 | 2052 | } | |
2018 | 2053 | } | |
2019 | 2054 | } | |
2020 | 2055 | } | |
2021 | 2056 | ||
2022 | 2057 | ||
2023 | 2058 | ||
2024 | - | @Callable( | |
2025 | - | func updateBackpack ( | |
2059 | + | @Callable(eu) | |
2060 | + | func updateBackpack (q,jf) = if ((eu.caller != bK)) | |
2026 | 2061 | then throw("permission denied") | |
2027 | - | else $Tuple2([StringEntry( | |
2028 | - | ||
2029 | - | ||
2030 | - | ||
2031 | - | @Callable( | |
2062 | + | else $Tuple2([StringEntry(aW(q), jf)], jf) | |
2063 | + | ||
2064 | + | ||
2065 | + | ||
2066 | + | @Callable(eu) | |
2032 | 2067 | func buySLand () = { | |
2033 | - | let | |
2034 | - | if ((size( | |
2068 | + | let ix = iu(eu) | |
2069 | + | if ((size(eu.payments) != 1)) | |
2035 | 2070 | then throw("Exactly one payment required") | |
2036 | 2071 | else { | |
2037 | - | let | |
2038 | - | if (( | |
2072 | + | let iy = value(eu.payments[0]) | |
2073 | + | if ((iy.assetId != bi)) | |
2039 | 2074 | then throw("Allowed USDT payment only!") | |
2040 | - | else if (( | |
2041 | - | then throw(("Payment attached should be " + toString( | |
2075 | + | else if ((iy.amount != ck)) | |
2076 | + | then throw(("Payment attached should be " + toString(ck))) | |
2042 | 2077 | else { | |
2043 | - | let | |
2044 | - | $Tuple2(((( | |
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) | |
2045 | 2080 | } | |
2046 | 2081 | } | |
2047 | 2082 | } | |
2048 | 2083 | ||
2049 | 2084 | ||
2050 | 2085 | ||
2051 | - | @Callable( | |
2052 | - | func expedition ( | |
2053 | - | let | |
2054 | - | if ((size( | |
2086 | + | @Callable(eu) | |
2087 | + | func expedition (gs,gt) = { | |
2088 | + | let ix = iu(eu) | |
2089 | + | if ((size(eu.payments) != 0)) | |
2055 | 2090 | then throw("No payments required") | |
2056 | 2091 | else { | |
2057 | - | let | |
2058 | - | let | |
2059 | - | $Tuple2((( | |
2060 | - | } | |
2061 | - | } | |
2062 | - | ||
2063 | - | ||
2064 | - | ||
2065 | - | @Callable( | |
2066 | - | func upgradeInfra ( | |
2067 | - | let | |
2068 | - | if ((size( | |
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)) | |
2069 | 2104 | then throw("No payments required") | |
2070 | 2105 | else { | |
2071 | - | let | |
2072 | - | let | |
2073 | - | $Tuple2((( | |
2074 | - | } | |
2075 | - | } | |
2076 | - | ||
2077 | - | ||
2078 | - | ||
2079 | - | @Callable( | |
2080 | - | func upgradeInfraUsdt ( | |
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)) | |
2081 | 2116 | then throw("Permission denied") | |
2082 | 2117 | else { | |
2083 | - | let | |
2084 | - | if ((size( | |
2118 | + | let ix = iu(eu) | |
2119 | + | if ((size(eu.payments) != 1)) | |
2085 | 2120 | then throw("Exactly one payment required") | |
2086 | 2121 | else { | |
2087 | - | let | |
2088 | - | if (( | |
2122 | + | let iy = value(eu.payments[0]) | |
2123 | + | if ((iy.assetId != bi)) | |
2089 | 2124 | then throw("Allowed USDT payment only!") | |
2090 | 2125 | else { | |
2091 | - | let | |
2092 | - | $Tuple2((( | |
2126 | + | let dj = hr(false, eu.caller, iy.amount, aN) | |
2127 | + | $Tuple2(((dj._1 :+ ScriptTransfer(bK, iy.amount, bi)) :+ ix), dj._2) | |
2093 | 2128 | } | |
2094 | 2129 | } | |
2095 | 2130 | } | |
2096 | 2131 | ||
2097 | 2132 | ||
2098 | 2133 | ||
2099 | - | @Callable( | |
2100 | - | func activateArtifact ( | |
2101 | - | let | |
2102 | - | if ((size( | |
2134 | + | @Callable(eu) | |
2135 | + | func activateArtifact (jg,jh) = { | |
2136 | + | let ix = iu(eu) | |
2137 | + | if ((size(eu.payments) != 0)) | |
2103 | 2138 | then throw("No payments required") | |
2104 | 2139 | else { | |
2105 | - | let b = toString( | |
2106 | - | let | |
2107 | - | let | |
2108 | - | if (("PRESALE" == | |
2109 | - | then | |
2110 | - | else if (("ONBOARD" == | |
2111 | - | then | |
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) | |
2112 | 2147 | else throw("Unknown artifact") | |
2113 | 2148 | } | |
2114 | - | ( | |
2115 | - | } | |
2116 | - | } | |
2117 | - | ||
2118 | - | ||
2119 | - | ||
2120 | - | @Callable( | |
2121 | - | func mergeLands ( | |
2122 | - | let | |
2123 | - | if ((size( | |
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)) | |
2124 | 2159 | then throw("No payments required") | |
2125 | 2160 | else { | |
2126 | - | let | |
2127 | - | $Tuple2((( | |
2128 | - | } | |
2129 | - | } | |
2130 | - | ||
2131 | - | ||
2132 | - | ||
2133 | - | @Callable( | |
2134 | - | func mergeLandsUsdt ( | |
2135 | - | let | |
2136 | - | if ((size( | |
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)) | |
2137 | 2172 | then throw("Exactly one payment required") | |
2138 | 2173 | else { | |
2139 | - | let | |
2140 | - | if (( | |
2174 | + | let iy = value(eu.payments[0]) | |
2175 | + | if ((iy.assetId != bi)) | |
2141 | 2176 | then throw("Allowed USDT payment only!") | |
2142 | 2177 | else { | |
2143 | - | let | |
2144 | - | $Tuple2((( | |
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) | |
2145 | 2180 | } | |
2146 | 2181 | } | |
2147 | 2182 | } | |
2148 | 2183 | ||
2149 | 2184 | ||
2150 | 2185 | ||
2151 | - | @Callable( | |
2152 | - | func cargoExchange ( | |
2153 | - | let | |
2154 | - | if ((size( | |
2186 | + | @Callable(eu) | |
2187 | + | func cargoExchange (ji,aN) = { | |
2188 | + | let ix = iu(eu) | |
2189 | + | if ((size(eu.payments) != 0)) | |
2155 | 2190 | then throw("No payments required") | |
2156 | 2191 | else { | |
2157 | - | let | |
2158 | - | let b = toString( | |
2159 | - | let | |
2160 | - | let | |
2161 | - | if (!(isDefined(getInteger( | |
2162 | - | then throw(( | |
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")) | |
2163 | 2198 | else { | |
2164 | - | let | |
2165 | - | if (( | |
2166 | - | then throw(( | |
2199 | + | let hc = valueOrErrorMessage(getString(aC(aN)), (("NFT " + gZ.name) + " is orphaned")) | |
2200 | + | if ((hc != b)) | |
2201 | + | then throw((W + " is not yours")) | |
2167 | 2202 | else { | |
2168 | - | let | |
2169 | - | let | |
2170 | - | let | |
2171 | - | let | |
2172 | - | let | |
2173 | - | if (( | |
2174 | - | then throw((("Duck location type is " + | |
2175 | - | else if (( | |
2176 | - | then throw(("Duck should be on the land " + | |
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)) | |
2177 | 2212 | else { | |
2178 | - | let | |
2179 | - | let | |
2180 | - | let | |
2181 | - | let | |
2182 | - | let | |
2183 | - | let | |
2184 | - | let | |
2185 | - | let | |
2186 | - | [StringEntry( | |
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] | |
2187 | 2222 | } | |
2188 | 2223 | } | |
2189 | 2224 | } | |
2190 | 2225 | } | |
2191 | 2226 | } | |
2192 | 2227 | ||
2193 | 2228 | ||
2194 | 2229 | ||
2195 | - | @Callable( | |
2196 | - | func saveWarehouse ( | |
2230 | + | @Callable(eu) | |
2231 | + | func saveWarehouse (fz,aN) = if ((eu.caller != bK)) | |
2197 | 2232 | then throw("Access denied") | |
2198 | 2233 | else { | |
2199 | - | let | |
2200 | - | let | |
2201 | - | if ((size( | |
2234 | + | let fv = aM(aN) | |
2235 | + | let fA = split_4C(fz, ":") | |
2236 | + | if ((size(fA) != 5)) | |
2202 | 2237 | then throw("warehouse string should contain 4 ':' separators") | |
2203 | 2238 | else { | |
2204 | - | let | |
2205 | - | let | |
2206 | - | let | |
2207 | - | let | |
2208 | - | let | |
2209 | - | $Tuple2([StringEntry( | |
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) | |
2210 | 2245 | } | |
2211 | 2246 | } | |
2212 | 2247 | ||
2213 | 2248 | ||
2214 | 2249 | ||
2215 | - | @Callable( | |
2216 | - | func fixWarehouseFormat ( | |
2250 | + | @Callable(eu) | |
2251 | + | func fixWarehouseFormat (aN) = if ((eu.caller != bJ)) | |
2217 | 2252 | then throw("Access denied") | |
2218 | 2253 | else { | |
2219 | - | let | |
2220 | - | let | |
2221 | - | let | |
2222 | - | let | |
2223 | - | let | |
2224 | - | let | |
2225 | - | let | |
2226 | - | let | |
2227 | - | let | |
2228 | - | let | |
2229 | - | $Tuple2([StringEntry( | |
2230 | - | } | |
2231 | - | ||
2232 | - | ||
2233 | - | ||
2234 | - | @Callable( | |
2235 | - | func fixStakedPieces ( | |
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)) | |
2236 | 2271 | then throw("Access denied") | |
2237 | 2272 | else { | |
2238 | - | let | |
2273 | + | let in = if ((bw == "")) | |
2239 | 2274 | then 0 | |
2240 | 2275 | else { | |
2241 | - | let | |
2242 | - | let | |
2243 | - | then split_51C(value( | |
2276 | + | let ii = getString(S, bS(bw)) | |
2277 | + | let id = if (isDefined(ii)) | |
2278 | + | then split_51C(value(ii), "_") | |
2244 | 2279 | else nil | |
2245 | - | func | |
2246 | - | let | |
2247 | - | let | |
2248 | - | ( | |
2280 | + | func jm (cR,aN) = { | |
2281 | + | let gZ = value(assetInfo(fromBase58String(aN))) | |
2282 | + | let ca = split(gZ.description, "_")[bO] | |
2283 | + | (cR + bZ(ca)) | |
2249 | 2284 | } | |
2250 | 2285 | ||
2251 | - | let | |
2252 | - | let | |
2253 | - | let | |
2254 | - | func | |
2255 | - | then | |
2256 | - | else | |
2257 | - | ||
2258 | - | func | |
2259 | - | then | |
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 | |
2260 | 2295 | else throw("List size exceeds 100") | |
2261 | 2296 | ||
2262 | - | | |
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) | |
2263 | 2298 | } | |
2264 | - | $Tuple2([IntegerEntry( | |
2265 | - | } | |
2266 | - | ||
2267 | - | ||
2268 | - | ||
2269 | - | @Callable( | |
2270 | - | func setCustomName ( | |
2271 | - | let | |
2272 | - | if ((size( | |
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)) | |
2273 | 2308 | then throw("Exactly one payment required") | |
2274 | 2309 | else { | |
2275 | - | let | |
2276 | - | if (( | |
2310 | + | let iy = value(eu.payments[0]) | |
2311 | + | if ((iy.assetId != bi)) | |
2277 | 2312 | then throw("Allowed USDT payment only!") | |
2278 | - | else if (( | |
2279 | - | then throw(("Payment should be " + toString( | |
2280 | - | else if (contains( | |
2281 | - | then throw(("Name should not contain '__': " + | |
2282 | - | else if ((size( | |
2283 | - | then throw(("Name too long, maxLength=" + toString( | |
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))) | |
2284 | 2319 | else { | |
2285 | - | let b = toString( | |
2286 | - | let | |
2287 | - | let | |
2288 | - | if (("ACCOUNT" == | |
2320 | + | let b = toString(eu.originCaller) | |
2321 | + | let jn = { | |
2322 | + | let bj = aI | |
2323 | + | if (("ACCOUNT" == bj)) | |
2289 | 2324 | then { | |
2290 | - | let | |
2291 | - | let | |
2292 | - | if (isDefined( | |
2293 | - | then throw(("Name already registered: " + | |
2325 | + | let jo = cB(if) | |
2326 | + | let jp = getString(jo) | |
2327 | + | if (isDefined(jp)) | |
2328 | + | then throw(("Name already registered: " + if)) | |
2294 | 2329 | else { | |
2295 | - | let | |
2296 | - | let | |
2297 | - | let | |
2298 | - | then [DeleteEntry( | |
2330 | + | let jq = aP(b) | |
2331 | + | let jr = getString(jq) | |
2332 | + | let js = if (isDefined(jr)) | |
2333 | + | then [DeleteEntry(cB(value(jr)))] | |
2299 | 2334 | else nil | |
2300 | - | ((( | |
2335 | + | (((js :+ StringEntry(jq, if)) :+ StringEntry(jo, b)) ++ hJ(b, D)._1) | |
2301 | 2336 | } | |
2302 | 2337 | } | |
2303 | - | else if (("LAND" == | |
2338 | + | else if (("LAND" == bj)) | |
2304 | 2339 | then { | |
2305 | - | let | |
2306 | - | let | |
2307 | - | if (!(isDefined(getInteger( | |
2308 | - | then throw(( | |
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")) | |
2309 | 2344 | else { | |
2310 | - | let | |
2311 | - | if (( | |
2312 | - | then throw(( | |
2345 | + | let hc = valueOrErrorMessage(getString(aC(aD)), (("NFT " + gZ.name) + " is orphaned")) | |
2346 | + | if ((hc != b)) | |
2347 | + | then throw((W + " is not yours")) | |
2313 | 2348 | else { | |
2314 | - | let | |
2315 | - | let | |
2316 | - | if (isDefined( | |
2317 | - | then throw(("Name already registered: " + | |
2349 | + | let jo = cv(if) | |
2350 | + | let jp = getString(jo) | |
2351 | + | if (isDefined(jp)) | |
2352 | + | then throw(("Name already registered: " + if)) | |
2318 | 2353 | else { | |
2319 | - | let | |
2320 | - | let | |
2321 | - | let | |
2322 | - | then [DeleteEntry( | |
2354 | + | let jt = aE(aD) | |
2355 | + | let jr = getString(jt) | |
2356 | + | let js = if (isDefined(jr)) | |
2357 | + | then [DeleteEntry(cv(value(jr)))] | |
2323 | 2358 | else nil | |
2324 | - | ((( | |
2359 | + | (((js :+ StringEntry(jt, if)) :+ StringEntry(jo, aD)) ++ hJ(b, D)._1) | |
2325 | 2360 | } | |
2326 | 2361 | } | |
2327 | 2362 | } | |
2328 | 2363 | } | |
2329 | - | else if (("DUCK" == | |
2364 | + | else if (("DUCK" == bj)) | |
2330 | 2365 | then { | |
2331 | - | let | |
2332 | - | let | |
2333 | - | if (if (!(isDefined(getInteger( | |
2366 | + | let gZ = value(assetInfo(fromBase58String(aD))) | |
2367 | + | let ha = aF(aD) | |
2368 | + | if (if (!(isDefined(getInteger(ha)))) | |
2334 | 2369 | then true | |
2335 | - | else !(isDefined(getString( | |
2336 | - | then throw(( | |
2370 | + | else !(isDefined(getString(aV(b))))) | |
2371 | + | then throw((gZ.name + " is not staked")) | |
2337 | 2372 | else { | |
2338 | - | let | |
2339 | - | if (( | |
2340 | - | then throw(( | |
2373 | + | let hc = valueOrErrorMessage(getString(aU(aD)), (("NFT " + gZ.name) + " is orphaned")) | |
2374 | + | if ((hc != b)) | |
2375 | + | then throw((X + " is not yours")) | |
2341 | 2376 | else { | |
2342 | - | let | |
2343 | - | let | |
2344 | - | if (isDefined( | |
2345 | - | then throw(("Name already registered: " + | |
2377 | + | let jo = cA(if) | |
2378 | + | let jp = getString(jo) | |
2379 | + | if (isDefined(jp)) | |
2380 | + | then throw(("Name already registered: " + if)) | |
2346 | 2381 | else { | |
2347 | - | let | |
2348 | - | let | |
2349 | - | let | |
2350 | - | then [DeleteEntry( | |
2382 | + | let jt = aO(aD) | |
2383 | + | let jr = getString(jt) | |
2384 | + | let js = if (isDefined(jr)) | |
2385 | + | then [DeleteEntry(cA(value(jr)))] | |
2351 | 2386 | else nil | |
2352 | - | ((( | |
2387 | + | (((js :+ StringEntry(jt, if)) :+ StringEntry(jo, aD)) ++ hD(aD, D)._1) | |
2353 | 2388 | } | |
2354 | 2389 | } | |
2355 | 2390 | } | |
2356 | 2391 | } | |
2357 | 2392 | else throw("Unknown entity type") | |
2358 | 2393 | } | |
2359 | - | $Tuple2((( | |
2394 | + | $Tuple2(((jn :+ ScriptTransfer(bK, iy.amount, bi)) :+ ix), 0) | |
2360 | 2395 | } | |
2361 | 2396 | } | |
2362 | 2397 | } | |
2363 | 2398 | ||
2364 | 2399 | ||
2365 | 2400 | ||
2366 | - | @Callable( | |
2367 | - | func setReferrals ( | |
2401 | + | @Callable(eu) | |
2402 | + | func setReferrals (ju,jv) = if ((eu.callerPublicKey != cd)) | |
2368 | 2403 | then throw("Permission denied") | |
2369 | 2404 | else { | |
2370 | - | let | |
2371 | - | if ((size( | |
2405 | + | let ix = iu(eu) | |
2406 | + | if ((size(eu.payments) != 0)) | |
2372 | 2407 | then throw("No payments required") | |
2373 | - | else if (!(isDefined(addressFromString( | |
2374 | - | then throw(("Invalid address: " + | |
2375 | - | else if (!(isDefined(addressFromString( | |
2376 | - | then throw(("Invalid address: " + | |
2408 | + | else if (!(isDefined(addressFromString(ju)))) | |
2409 | + | then throw(("Invalid address: " + ju)) | |
2410 | + | else if (!(isDefined(addressFromString(jv)))) | |
2411 | + | then throw(("Invalid address: " + jv)) | |
2377 | 2412 | else { | |
2378 | - | let | |
2379 | - | let | |
2380 | - | let | |
2381 | - | then split_4C(value( | |
2413 | + | let jw = cC() | |
2414 | + | let jx = getString(jw) | |
2415 | + | let jy = if (isDefined(jx)) | |
2416 | + | then split_4C(value(jx), "_") | |
2382 | 2417 | else nil | |
2383 | - | if (containsElement( | |
2384 | - | then throw(( | |
2418 | + | if (containsElement(jy, jv)) | |
2419 | + | then throw((jv + " is not newbie (already has referrals)")) | |
2385 | 2420 | else { | |
2386 | - | let | |
2387 | - | let | |
2388 | - | if (if (isDefined( | |
2389 | - | then isDefined(addressFromString(value( | |
2421 | + | let hL = aQ(jv) | |
2422 | + | let hM = getString(hL) | |
2423 | + | if (if (isDefined(hM)) | |
2424 | + | then isDefined(addressFromString(value(hM))) | |
2390 | 2425 | else false) | |
2391 | - | then throw((( | |
2426 | + | then throw(((jv + " already has refBy: ") + value(hM))) | |
2392 | 2427 | else { | |
2393 | - | let | |
2394 | - | let | |
2395 | - | let | |
2396 | - | then split_4C(value( | |
2428 | + | let jz = aT(ju) | |
2429 | + | let jA = getString(jz) | |
2430 | + | let jB = if (isDefined(jA)) | |
2431 | + | then split_4C(value(jA), "_") | |
2397 | 2432 | else nil | |
2398 | - | if (containsElement( | |
2399 | - | then throw(((( | |
2433 | + | if (containsElement(jB, jv)) | |
2434 | + | then throw((((ju + " already contains ") + jv) + " within referrals")) | |
2400 | 2435 | else { | |
2401 | - | let | |
2402 | - | let | |
2403 | - | then value( | |
2404 | - | else makeString_2C(( | |
2405 | - | $Tuple2([StringEntry( | |
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) | |
2406 | 2441 | } | |
2407 | 2442 | } | |
2408 | 2443 | } | |
2409 | 2444 | } | |
2410 | 2445 | } | |
2411 | 2446 | ||
2412 | 2447 | ||
2413 | 2448 | ||
2414 | - | @Callable( | |
2415 | - | func distributePoints ( | |
2416 | - | let | |
2417 | - | if ((size( | |
2449 | + | @Callable(eu) | |
2450 | + | func distributePoints (jE,jF,jG,jH,jI) = { | |
2451 | + | let ix = iu(eu) | |
2452 | + | if ((size(eu.payments) != 0)) | |
2418 | 2453 | then throw("No payments required") | |
2419 | 2454 | else { | |
2420 | - | let b = toString( | |
2421 | - | let | |
2422 | - | let | |
2423 | - | let | |
2424 | - | let | |
2425 | - | let | |
2426 | - | let | |
2427 | - | let | |
2428 | - | if (( | |
2429 | - | then throw((("There are only " + toString( | |
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")) | |
2430 | 2465 | else { | |
2431 | - | let | |
2432 | - | let | |
2433 | - | let | |
2434 | - | $Tuple2([IntegerEntry( | |
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)) | |
2435 | 2470 | then 0 | |
2436 | - | else | |
2437 | - | then ( | |
2438 | - | else | |
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) | |
2439 | 2474 | } | |
2440 | 2475 | } | |
2441 | 2476 | } | |
2442 | 2477 | ||
2443 | 2478 | ||
2444 | 2479 | ||
2445 | - | @Callable( | |
2446 | - | func splitByGlobalWeightsREADONLY ( | |
2447 | - | ||
2448 | - | ||
2449 | - | ||
2450 | - | @Callable( | |
2451 | - | func splitByGlobalAndLocalWeightsREADONLY ( | |
2452 | - | let | |
2453 | - | $Tuple2(nil, $Tuple2( | |
2454 | - | } | |
2455 | - | ||
2456 | - | ||
2457 | - | ||
2458 | - | @Callable( | |
2459 | - | func getBackpackREADONLY ( | |
2460 | - | ||
2461 | - | ||
2462 | - | ||
2463 | - | @Callable( | |
2464 | - | func getWarehouseREADONLY ( | |
2465 | - | let | |
2466 | - | let | |
2467 | - | let | |
2468 | - | $Tuple2(nil, makeString_2C( | |
2469 | - | } | |
2470 | - | ||
2471 | - | ||
2472 | - | ||
2473 | - | @Callable( | |
2474 | - | func saveLastTx () = if (if (( | |
2475 | - | then ( | |
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) | |
2476 | 2511 | else false) | |
2477 | 2512 | then throw("Access denied") | |
2478 | - | else $Tuple2([ | |
2479 | - | ||
2480 | - | ||
2481 | - | ||
2482 | - | @Callable( | |
2483 | - | func updateDuckStats ( | |
2513 | + | else $Tuple2([iu(eu)], 42) | |
2514 | + | ||
2515 | + | ||
2516 | + | ||
2517 | + | @Callable(eu) | |
2518 | + | func updateDuckStats (q,hE) = if ((eu.caller != bK)) | |
2484 | 2519 | then throw("Access denied") | |
2485 | - | else | |
2486 | - | ||
2487 | - | ||
2488 | - | ||
2489 | - | @Callable( | |
2490 | - | func updateAccStats (b, | |
2520 | + | else hD(q, hE) | |
2521 | + | ||
2522 | + | ||
2523 | + | ||
2524 | + | @Callable(eu) | |
2525 | + | func updateAccStats (b,hE) = if ((eu.caller != bK)) | |
2491 | 2526 | then throw("Access denied") | |
2492 | - | else | |
2493 | - | ||
2494 | - | ||
2495 | - | ||
2496 | - | @Callable( | |
2497 | - | func equipDuck ( | |
2498 | - | let | |
2499 | - | if ((size( | |
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)) | |
2500 | 2535 | then throw("No payments required") | |
2501 | 2536 | else { | |
2502 | - | let b = toString( | |
2503 | - | let | |
2504 | - | let | |
2505 | - | let | |
2506 | - | let | |
2507 | - | let | |
2508 | - | let | |
2509 | - | if ((size( | |
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)) | |
2510 | 2545 | then throw("Wrong equipment string") | |
2511 | 2546 | else { | |
2512 | - | let | |
2513 | - | let | |
2514 | - | let | |
2515 | - | let | |
2516 | - | $Tuple2([StringEntry( | |
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) | |
2517 | 2552 | } | |
2518 | 2553 | } | |
2519 | 2554 | } | |
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 | - | } | |
2531 | 2555 | ||
2532 | 2556 |
github/deemru/w8io/026f985 1188.36 ms ◑