tx · 782QZyhfPAaagZJAXE7bpu9NQB3bvY7fhm8bBhPWjUg5

3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm:  -0.07900000 Waves

2023.08.02 01:48 [2692134] smart account 3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm > SELF 0.00000000 Waves

{ "type": 13, "id": "782QZyhfPAaagZJAXE7bpu9NQB3bvY7fhm8bBhPWjUg5", "fee": 7900000, "feeAssetId": null, "timestamp": 1690930218432, "version": 2, "chainId": 84, "sender": "3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm", "senderPublicKey": "EVooykMNV691Venwp1dHUTBd7KWequzUcda57Wd3LQEX", "proofs": [ "2Fz5Gq8CobZDwF36afYRa8LerVzgXqbjSUEY4fniRL1DpfVMHaiCRa48qu11id5dhXBEmiyTZoS1ufVGzxLvVZHL" ], "script": "base64:BgK3AQgCEgMKAQgSAwoBBBIAEgMKAQgSABIDCgEIEgQKAgEIEgQKAgEIEgQKAgICEgUKAwEBARIAEgQKAggIEgMKAQESABIECgICAhIDCgEIEgMKAQgSBAoCCAgSAwoBGBIDCgEYEgQKAggIEgQKAggIEgMKAQgSAwoBCBIFCgMICAgSBAoCCAgSBwoFAQEBAQESAwoBARIFCgMBAQgSAwoBCBIDCgEIEgASBAoCCAESBAoCCAESAwoBCNwBARRrZXlMYXN0QXJiVGltZUJ5VXNlcgEEYWRkcgkArAICAhBsYXN0QXJiVGltZVVzZXJfBQRhZGRyAAZTQ0FMRTgAgMLXLwAMeHBMZXZlbFNjYWxlAIAZAA94cExldmVsUmVjaXBQb3cAoB8AEm51bVBvaW50c09uTGV2ZWxVcAADAAxyZXF1aXJlbWVudHMJAMwIAgIIU3RyZW5ndGgJAMwIAgIIQWNjdXJhY3kJAMwIAgIJSW50ZWxsZWN0CQDMCAICCUVuZHVyYW5jZQkAzAgCAglEZXh0ZXJpdHkJAMwIAgIFTGV2ZWwJAMwIAgIGSGVhbHRoBQNuaWwADGNoYXJTdHJlbmd0aAAAAAxjaGFyQWNjdXJhY3kAAQANY2hhckludGVsbGVjdAACAA1jaGFyRW5kdXJhbmNlAAMADWNoYXJEZXh0ZXJpdHkABAALTlVNU0VHTUVOVFMABgAKTlVNTUFJTkFVWAACAAhNQVhTTE9UUwACAA1NQVhQUk9ESU5TTE9UAB4BDWtleUR1Y2tIZWFsdGgBC2R1Y2tBc3NldElkCQCsAgICC2R1Y2tIZWFsdGhfBQtkdWNrQXNzZXRJZAEMa2V5RHVja0NoYXJzAQtkdWNrQXNzZXRJZAkArAICAgpkdWNrQ2hhcnNfBQtkdWNrQXNzZXRJZAEJa2V5RHVja1hQAQtkdWNrQXNzZXRJZAkArAICAgdkdWNrWFBfBQtkdWNrQXNzZXRJZAEMa2V5RHVja0xldmVsAQtkdWNrQXNzZXRJZAkArAICAgpkdWNrTGV2ZWxfBQtkdWNrQXNzZXRJZAERa2V5RHVja0ZyZWVQb2ludHMBC2R1Y2tBc3NldElkCQCsAgICD2R1Y2tGcmVlUG9pbnRzXwULZHVja0Fzc2V0SWQBEGtleUR1Y2tFcXVpcG1lbnQBC2R1Y2tBc3NldElkCQCsAgICDmR1Y2tFcXVpcG1lbnRfBQtkdWNrQXNzZXRJZAEJa2V5VXNlclhQAQRhZGRyCQCsAgICB3VzZXJYUF8FBGFkZHIBDGtleVVzZXJMZXZlbAEEYWRkcgkArAICAgp1c2VyTGV2ZWxfBQRhZGRyARFrZXlVc2VyRnJlZVBvaW50cwEEYWRkcgkArAICAg91c2VyRnJlZVBvaW50c18FBGFkZHIAB3hwQ2xhaW0AkE4AD3hwU3VjY2Vzc0ZsaWdodACQTgAMeHBGYWlsRmxpZ2h0ANAPAAh4cENhbGxFUwCgjQYADHhwQ3VzdG9tTmFtZQDAhD0ACnhwTmV3U0xhbmQAwJaxAgAOeHBVcGdyYWRlSW5mcmEAkE4AB3hwTWVyZ2UAwIQ9AAl4cE9uYm9hcmQAwIQ9AAZ4cEhlYWwAkE4BCWxldmVsQnlYUAECeHAJAGsDBQx4cExldmVsU2NhbGUJAGwGBQJ4cAAEBQ94cExldmVsUmVjaXBQb3cABAAEBQRET1dOBQZTQ0FMRTgBCW1heEhlYWx0aAEFbGV2ZWwJAGQCAGQFBWxldmVsAQdsZXZlbFVwAgljdXJyTGV2ZWwFbmV3WFAECG5ld0xldmVsCQEJbGV2ZWxCeVhQAQUFbmV3WFAJAMwIAgUIbmV3TGV2ZWwJAMwIAgkAaAIFEm51bVBvaW50c09uTGV2ZWxVcAkAZQIFCG5ld0xldmVsBQljdXJyTGV2ZWwFA25pbAEMZ2V0RHVja1N0YXRzAg9zdGFraW5nQ29udHJhY3QLZHVja0Fzc2V0SWQEBWNoYXJzCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEMa2V5RHVja0NoYXJzAQULZHVja0Fzc2V0SWQCCTBfMF8wXzBfMAIBXwQDbHZsCQELdmFsdWVPckVsc2UCCQCaCAIFD3N0YWtpbmdDb250cmFjdAkBDGtleUR1Y2tMZXZlbAEFC2R1Y2tBc3NldElkAAAEBmhlYWx0aAkBC3ZhbHVlT3JFbHNlAgkAmggCBQ9zdGFraW5nQ29udHJhY3QJAQ1rZXlEdWNrSGVhbHRoAQULZHVja0Fzc2V0SWQJAQltYXhIZWFsdGgBBQNsdmwJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBWNoYXJzBQxjaGFyU3RyZW5ndGgJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBWNoYXJzBQxjaGFyQWNjdXJhY3kJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBWNoYXJzBQ1jaGFySW50ZWxsZWN0CQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVjaGFycwUNY2hhckVuZHVyYW5jZQkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFY2hhcnMFDWNoYXJEZXh0ZXJpdHkJAMwIAgUDbHZsCQDMCAIFBmhlYWx0aAUDbmlsAApMQU5EUFJFRklYAgRMQU5EAApEVUNLUFJFRklYAgREVUNLAApBUlRQUkVTQUxFAgdQUkVTQUxFAAZOVU1SRVMABgAPREFJTFlSRVNCWVBJRUNFAID40gEACURBWU1JTExJUwCAuJkpAAxXSE1VTFRJUExJRVIAgMivoCUAD0RFRkFVTFRMT0NBVElPTgIPQWZyaWNhX0ZfQWZyaWNhABBSRVNPVVJDRVBSSUNFTUlOANW1AgAKRVNTRUxMQ09FRgAKAAlwcm9kVHlwZXMJAMwIAgIQRmlyc3QgQWlkIEtpdCBMMQkAzAgCAhBGaXJzdCBBaWQgS2l0IEwyCQDMCAICEEZpcnN0IEFpZCBLaXQgTDMJAMwIAgILQmFja3BhY2sgTDEJAMwIAgILQmFja3BhY2sgTDIJAMwIAgILQmFja3BhY2sgTDMJAMwIAgIORm9vZCBSYXRpb24gTDEJAMwIAgIORm9vZCBSYXRpb24gTDIJAMwIAgIORm9vZCBSYXRpb24gTDMJAMwIAgILSmV0IFBhY2sgTDEJAMwIAgILSmV0IFBhY2sgTDIJAMwIAgILSmV0IFBhY2sgTDMJAMwIAgIJU2hpZWxkIEwxCQDMCAICCVNoaWVsZCBMMgkAzAgCAglTaGllbGQgTDMFA25pbAAKY29udGluZW50cwkAzAgCAghBbWVyaWNhcwkAzAgCAgZFdXJvcGUJAMwIAgIEQXNpYQkAzAgCAgZBZnJpY2EJAMwIAgIHT2NlYW5pYQUDbmlsAAlDT0VGRjJNQVQAgK3iBAAQcHJvZHVjdGlvbk1hdHJpeAkAzAgCAiU4XzhfOF8xN18xN180Ml8xMl8wXzMwXzAsMCwwLDAsMCwwLDBfCQDMCAICJThfOF84XzE3XzE3XzQyXzI0XzBfNjBfMCwwLDUsMiwwLDAsMF8JAMwIAgInOF84XzhfMTdfMTdfNDJfMzZfMF8xMjBfMCwwLDEwLDQsMCwwLDBfCQDMCAICKThfMTlfMTlfOF8yN18xOV8yNl8xXzIwXzAsMCwwLDAsMCwwLDBfMDAxCQDMCAICKThfMTlfMTlfOF8yN18xOV81Ml8xXzQwXzAsMCwwLDAsMCwwLDBfMDAxCQDMCAICKThfMTlfMTlfOF8yN18xOV83OF8xXzgwXzAsMCwwLDAsMCwwLDBfMDAxCQDMCAICIjhfOF84XzhfOF82MF8xM18yXzJfMCwwLDAsMCwwLDAsMF8JAMwIAgIiOF84XzhfOF84XzYwXzI2XzJfNF8wLDAsMCwwLDAsMCwwXwkAzAgCAiI4XzhfOF84XzhfNjBfMzlfMl84XzAsMCwwLDAsMCwwLDBfCQDMCAICKTMwXzMwXzNfMTdfMTdfM18zMF8zXzMwXzAsMCwwLDAsMCwwLDBfMTExCQDMCAICKTMwXzMwXzNfMTdfMTdfM182MF8zXzUwXzAsMCwwLDAsMCwwLDBfMTExCQDMCAICKTMwXzMwXzNfMTdfMTdfM185MF8zXzcwXzAsMCwwLDAsMCwwLDBfMTExCQDMCAICKzE4XzE4XzEwXzE4XzE4XzE4XzExXzRfMzBfMCwwLDAsMCwwLDAsMF8yMDEJAMwIAgIrMThfMThfMTBfMThfMThfMThfMjJfNF81MF8wLDAsMCwwLDAsMCwwXzIwMQkAzAgCAisxOF8xOF8xMF8xOF8xOF8xOF8zM180XzcwXzAsMCwwLDAsMCwwLDBfMjAxBQNuaWwACXJJZHhDb2VmZgAGABBySWR4UmVxdWlyZW1lbnRzAAkACXJJZHhTbG90cwAKAA5QUk9EVUNUUEtHU0laRQAKAAt3aElkeExldmVscwAAAAh3aElkeFJlcwABAAh3aElkeE1hdAACAAl3aElkeFByb2QAAwAJd2hJZHhMT0ZUAAQACXZvbExvY2tlZAAAAAt2b2xPY2N1cGllZAABAAd2b2xGcmVlAAIACHZvbFRvdGFsAAMACmJwSWR4TGV2ZWwAAAAIYnBJZHhSZXMAAQAIYnBJZHhNYXQAAgAJYnBJZHhQcm9kAAMBEWtleUxhc3RUeElkQnlVc2VyAQRhZGRyCQCsAgICD2xhc3RUeElkQnlVc2VyXwUEYWRkcgEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQdhc3NldElkCQCsAgICCW5mdE93bmVyXwUHYXNzZXRJZAEaa2V5TGFuZEFzc2V0SWRUb0N1c3RvbU5hbWUBB2Fzc2V0SWQJAKwCAgIYbGFuZEN1c3RvbU5hbWVCeUFzc2V0SWRfBQdhc3NldElkARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQdhc3NldElkCQCsAgICC3N0YWtlZFRpbWVfBQdhc3NldElkARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQdhc3NldElkCQCsAgICC2luZnJhTGV2ZWxfBQdhc3NldElkASBrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQW5kQXNzZXRJZAIEdHlwZQdhc3NldElkCQC5CQIJAMwIAgINbGFuZEFydFN0YXR1cwkAzAgCBQR0eXBlCQDMCAIFB2Fzc2V0SWQFA25pbAIBXwEia2V5U3Rha2VkVGltZUJ5VHlwZUFzc2V0SWRBbmRPd25lcgMHbmZ0VHlwZQdhc3NldElkCW93bmVyQWRkcgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICIHN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXJfBQduZnRUeXBlAgFfBQdhc3NldElkAgFfBQlvd25lckFkZHIBEmtleVdhcmVob3VzZUJ5TGFuZAELbGFuZEFzc2V0SWQJAKwCAgIKd2FyZUhvdXNlXwULbGFuZEFzc2V0SWQBGmtleUR1Y2tBc3NldElkVG9DdXN0b21OYW1lAQdhc3NldElkCQCsAgICGGR1Y2tDdXN0b21OYW1lQnlBc3NldElkXwUHYXNzZXRJZAEWa2V5QWRkcmVzc1RvQ3VzdG9tTmFtZQEEYWRkcgkArAICAhhhY2NvdW50Q3VzdG9tTmFtZUJ5QWRkcl8FBGFkZHIBD2tleUFkZHJlc3NSZWZCeQEEYWRkcgkArAICAglhY2NSZWZCeV8FBGFkZHIBHGtleU9uYm9hcmRBcnRBY3RpdmF0ZWRPbkR1Y2sBC2R1Y2tBc3NldElkCQCsAgICGm9uYm9hcmRBcnRBY3RpdmF0ZWRPbkR1Y2tfBQtkdWNrQXNzZXRJZAEca2V5T25ib2FyZEFydER1Y2tBY3RpdmF0ZWRCeQEEYWRkcgkArAICAhpvbmJvYXJkQXJ0QWN0aXZhdGVkRHVja0J5XwUEYWRkcgETa2V5QWRkcmVzc1JlZmVycmFscwEEYWRkcgkArAICAg1hY2NSZWZlcnJhbHNfBQRhZGRyARBrZXlEdWNrSWRUb093bmVyAQdhc3NldElkCQCsAgICCmR1Y2tPd25lcl8FB2Fzc2V0SWQBFGtleVN0YWtlZER1Y2tCeU93bmVyAQlvd25lckFkZHIJAKwCAgISc3Rha2VkRHVja0J5T3duZXJfBQlvd25lckFkZHIBEWtleUJhY2twYWNrQnlEdWNrAQtkdWNrQXNzZXRJZAkArAICAgliYWNrUGFja18FC2R1Y2tBc3NldElkAQ9rZXlEdWNrTG9jYXRpb24BC2R1Y2tBc3NldElkCQCsAgICDWR1Y2tMb2NhdGlvbl8FC2R1Y2tBc3NldElkAQprZXlCbG9ja2VkAAIQY29udHJhY3RzQmxvY2tlZAEVa2V5VXNlckd3bFJlbGVhc2VUaW1lAQh1c2VyQWRkcgkArAICAholcyVzX191c2VyR3dsUmVsZWFzZVRpbWVfXwUIdXNlckFkZHIBDmtleUVzV2FyZWhvdXNlAAIaZW1lcmdlbmN5V2FyZWhvdXNlUHJvZHVjdHMACmxvY0lkeFR5cGUAAQAIbG9jSWR4SWQAAgESZ2V0UmVjaXBlTWF0ZXJpYWxzAQZyZWNpcGUJAGgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUGcmVjaXBlBQlySWR4Q29lZmYFCUNPRUZGMk1BVAAPS1NBTExPV1hQTEVWRUxTBwAFY2hhaW4JAMkBAgkAygECCAUEdGhpcwVieXRlcwABAAEAC3VzZHRBc3NldElkBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwASCE2nqyCAM/TtG7yo7ui5O8yYLdC136B5ao1CP5qA//uQMJAAACAQFUBQckbWF0Y2gwASBVsdifcoeC7+XjW42sBatl3ppDoS8WuwXzGreHpfHFGAkAAgECDVVua25vd24gY2hhaW4AFWRlZmF1bHRSZXN0QWRkcmVzc1N0cgQHJG1hdGNoMAUFY2hhaW4DCQAAAgEBVwUHJG1hdGNoMAIjM1BRQ3V2RmJ2aDRMa1BVbnJuVTF6M2puYkExcDltM1dOaHYDCQAAAgEBVAUHJG1hdGNoMAIjM011bWtHR3p0Q0tBWHBXRHF4a2Rkb2ZxWFNVYnFRa3ZTSnkJAAIBAg1Vbmtub3duIGNoYWluABFJbmZyYVVwZ3JhZGVDb3N0UwQHJG1hdGNoMAUFY2hhaW4DCQAAAgEBVwUHJG1hdGNoMACAyK+gJQMJAAACAQFUBQckbWF0Y2gwAIDC1y8JAAIBAg1Vbmtub3duIGNoYWluAA5hcmJpdHJhZ2VEZWxheQQHJG1hdGNoMAUFY2hhaW4DCQAAAgEBVwUHJG1hdGNoMADAzyQDCQAAAgEBVAUHJG1hdGNoMADg1AMJAAIBAg1Vbmtub3duIGNoYWluAANTRVACAl9fAAVNVUxUNgDAhD0ABU1VTFQ4AIDC1y8ABVNTSVpFABkABU1TSVpFAGQABUxTSVpFAOEBAAZYTFNJWkUAkAMAB1hYTFNJWkUA8QQABUlURVI2CQDMCAIAAAkAzAgCAAEJAMwIAgACCQDMCAIAAwkAzAgCAAQJAMwIAgAFBQNuaWwBD2dldFN0cmluZ09yRmFpbAIHYWRkcmVzcwNrZXkJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQdhZGRyZXNzBQNrZXkJALkJAgkAzAgCAgptYW5kYXRvcnkgCQDMCAIJAKUIAQUHYWRkcmVzcwkAzAgCAgEuCQDMCAIFA2tleQkAzAgCAg8gaXMgbm90IGRlZmluZWQFA25pbAIAABFJZHhDZmdTdGFraW5nRGFwcAABABFJZHhDZmdFY29ub215RGFwcAACABRJZHhDZmdHb3Zlcm5hbmNlRGFwcAADAA1JZHhDZmdXbGdEYXBwAAQBCmtleVJlc3RDZmcAAg4lc19fcmVzdENvbmZpZwEOa2V5UmVzdEFkZHJlc3MAAgwlc19fcmVzdEFkZHIBEXJlYWRSZXN0Q2ZnT3JGYWlsAQRyZXN0CQC8CQIJAQ9nZXRTdHJpbmdPckZhaWwCBQRyZXN0CQEKa2V5UmVzdENmZwAFA1NFUAEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgdyZXN0Q2ZnA2lkeAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJAJEDAgUHcmVzdENmZwUDaWR4CQCsAgICKlJlc3QgY2ZnIGRvZXNuJ3QgY29udGFpbiBhZGRyZXNzIGF0IGluZGV4IAkApAMBBQNpZHgADHJlc3RDb250cmFjdAkBEUBleHRyTmF0aXZlKDEwNjIpAQkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzCQEOa2V5UmVzdEFkZHJlc3MABRVkZWZhdWx0UmVzdEFkZHJlc3NTdHIAB3Jlc3RDZmcJARFyZWFkUmVzdENmZ09yRmFpbAEFDHJlc3RDb250cmFjdAAPc3Rha2luZ0NvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUHcmVzdENmZwURSWR4Q2ZnU3Rha2luZ0RhcHAAD2Vjb25vbXlDb250cmFjdAkBGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIFB3Jlc3RDZmcFEUlkeENmZ0Vjb25vbXlEYXBwAAtnb3ZDb250cmFjdAkBGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIFB3Jlc3RDZmcFFElkeENmZ0dvdmVybmFuY2VEYXBwAAt3bGdDb250cmFjdAkBGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIFB3Jlc3RDZmcFDUlkeENmZ1dsZ0RhcHAACnJlY0xhbmROdW0AAAALcmVjTGFuZFNpemUAAQALcmVjVGVycmFpbnMAAgAMcmVjQ29udGluZW50AAMAC3JhbmRvbURlbGF5AAIBC2tleUNvbW1pdE9wAQdhZGRyZXNzCQCsAgICEGNvbW1pdE9wZXJhdGlvbl8FB2FkZHJlc3MBCWtleUNvbW1pdAEHYWRkcmVzcwkArAICAhNmaW5pc2hCbG9ja0ZvckFkZHJfBQdhZGRyZXNzARFrZXlSZXNQcm9wb3J0aW9ucwACE3Jlc1R5cGVzUHJvcG9ydGlvbnMBFWtleVN0YWtlZExhbmRzQnlPd25lcgEJb3duZXJBZGRyCQCsAgICE3N0YWtlZExhbmRzQnlPd25lcl8FCW93bmVyQWRkcgEWa2V5U3Rha2VkUGllY2VzQnlPd25lcgEJb3duZXJBZGRyCQCsAgICFHN0YWtlZFBpZWNlc0J5T3duZXJfBQlvd25lckFkZHIBCGFzU3RyaW5nAQF2BAckbWF0Y2gwBQF2AwkAAQIFByRtYXRjaDACBlN0cmluZwQBcwUHJG1hdGNoMAUBcwkAAgECGGZhaWwgdG8gY2FzdCBpbnRvIFN0cmluZwEFYXNJbnQBAXYEByRtYXRjaDAFAXYDCQABAgUHJG1hdGNoMAIDSW50BAFuBQckbWF0Y2gwBQFuCQACAQIVZmFpbCB0byBjYXN0IGludG8gSW50AQ9udW1QaWVjZXNCeVNpemUBCGxhbmRTaXplBAckbWF0Y2gwBQhsYW5kU2l6ZQMJAAACAgFTBQckbWF0Y2gwBQVTU0laRQMJAAACAgFNBQckbWF0Y2gwBQVNU0laRQMJAAACAgFMBQckbWF0Y2gwBQVMU0laRQMJAAACAgJYTAUHJG1hdGNoMAUGWExTSVpFAwkAAAICA1hYTAUHJG1hdGNoMAUHWFhMU0laRQkAAgECEVVua25vd24gbGFuZCBzaXplAQdpc0RpZ2l0AQFzCQEJaXNEZWZpbmVkAQkAtgkBBQFzAA1pbmN1YmF0b3JBZGRyBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwCQERQGV4dHJOYXRpdmUoMTA2MikBAiMzUEVrdFZ1eDJSaGNoU042M0RzRG80YjRtejRRcXpLU2VEdgMJAAACAQFUBQckbWF0Y2gwBQR0aGlzCQACAQINVW5rbm93biBjaGFpbgALYnJlZWRlckFkZHIEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDAJARFAZXh0ck5hdGl2ZSgxMDYyKQECIzNQRFZ1VTQ1SDdFaDVkbXROYm5STlJTdEd3VUxBN05ZNkhiAwkAAAIBAVQFByRtYXRjaDAFBHRoaXMJAAIBAg1Vbmtub3duIGNoYWluAANwdWIBIE9T4ho/VKjWnVJOEx1GJ1W9s1PzLHvJVFSw/0PBtBQoAAhtZWRLaXRIcAkAzAgCAB4JAMwIAgA8CQDMCAIAeAUDbmlsABFGSVZFTUlOVVRFU01JTExJUwDgpxIADFJFTkFNSU5HQ09TVADAlrECAApNQVhOQU1FTEVOADIAFUluZnJhVXBncmFkZUNvc3RTVXNkdACAreIEAAxFWFBNQVRFUklBTFMEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDAApt2C7asHAwkAAAIBAVQFByRtYXRjaDAAqqeBswkJAAIBAg1Vbmtub3duIGNoYWluAAdFWFBVU0RUBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwAIDlmncDCQAAAgEBVAUHJG1hdGNoMACA5Zp3CQACAQINVW5rbm93biBjaGFpbgAFRklWRVgJALYCAQAFAAdUV0VOVFlYCQC2AgEAFAAIVFdFTlRZMlgJALYCAQkAaAIAFAAUAAhUV0VOVFkzWAkAtgIBCQBoAgkAaAIAFAAUABQACFRXRU5UWTRYCQC2AgEJAGgCCQBoAgkAaAIAFAAUABQAFAAIVFdFTlRZNVgJALYCAQkAaAIJAGgCCQBoAgkAaAIAFAAUABQAFAAUAA9QUkVTQUxFTlVNTEFORFMA9AMBEmtleU5leHRGcmVlTGFuZE51bQACC25leHRMYW5kTnVtARBrZXlMYW5kVG9Bc3NldElkAQdsYW5kTnVtCQCsAgICDGxhbmRUb0Fzc2V0XwUHbGFuZE51bQEaa2V5TGFuZEN1c3RvbU5hbWVUb0Fzc2V0SWQBBG5hbWUJAKwCAgIRbGFuZEJ5Q3VzdG9tTmFtZV8FBG5hbWUBHmtleUluZnJhTGV2ZWxCeUFzc2V0SWRBbmRPd25lcgIHYXNzZXRJZAlvd25lckFkZHIJAKwCAgkArAICCQCsAgICHGluZnJhTGV2ZWxCeUFzc2V0SWRBbmRPd25lcl8FB2Fzc2V0SWQCAV8FCW93bmVyQWRkcgEla2V5TGFuZEFydFN0YXR1c0J5VHlwZUFzc2V0SWRBbmRPd25lcgMEdHlwZQdhc3NldElkCW93bmVyQWRkcgkAuQkCCQDMCAICImxhbmRBcnRTdGF0dXNCeVR5cGVBc3NldElkQW5kT3duZXIJAMwIAgUEdHlwZQkAzAgCBQdhc3NldElkCQDMCAIFCW93bmVyQWRkcgUDbmlsAgFfARFrZXlMYW5kTnVtVG9Pd25lcgEHbGFuZE51bQkArAICAgpsYW5kT3duZXJfBQdsYW5kTnVtARprZXlEdWNrQ3VzdG9tTmFtZVRvQXNzZXRJZAEEbmFtZQkArAICAhFkdWNrQnlDdXN0b21OYW1lXwUEbmFtZQEWa2V5Q3VzdG9tTmFtZVRvQWRkcmVzcwEEbmFtZQkArAICAhRhY2NvdW50QnlDdXN0b21OYW1lXwUEbmFtZQEJa2V5T2xkaWVzAAIKb2xkaWVzTGlzdAALY2xhaW1Nb2RlV2gAAAANY2xhaW1Nb2RlRHVjawABABNjbGFpbU1vZGVXaFRoZW5EdWNrAAIACGZsSGVhbHRoAAAAC2ZsVGltZXN0YW1wAAUAB2ZsQm9udXMABgALZmxQcm9kc1VzZWQABwEHbmZ0TmFtZQIHbGFuZE51bQhsYW5kU2l6ZQkArAICCQCsAgIFCkxBTkRQUkVGSVgFB2xhbmROdW0FCGxhbmRTaXplARNkaXN0cmlidXRlQnlXZWlnaHRzAgV0b3RhbAd3ZWlnaHRzBANzdW0JAGQCCQBkAgkAZAIJAGQCCQBkAgkAkQMCBQd3ZWlnaHRzAAAJAJEDAgUHd2VpZ2h0cwABCQCRAwIFB3dlaWdodHMAAgkAkQMCBQd3ZWlnaHRzAAMJAJEDAgUHd2VpZ2h0cwAECQCRAwIFB3dlaWdodHMABQMJAGcCAAAFA3N1bQkAAgECEFplcm8gd2VpZ2h0cyBzdW0EBW5vcm02CQBrAwUFdG90YWwFBU1VTFQ2BQNzdW0KAQpub3JtYWxpemVyAgNhY2MEZWxlbQkAzQgCBQNhY2MJAGsDBQRlbGVtBQVub3JtNgUFTVVMVDYKAAIkbAUHd2VpZ2h0cwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEKbm9ybWFsaXplcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgESZ2V0TmVlZGVkTWF0ZXJpYWxzAQV0b3RhbAQFcHJvcHMJALUJAgkBBXZhbHVlAQkAoggBCQERa2V5UmVzUHJvcG9ydGlvbnMAAgFfAwkBAiE9AgkAkAMBBQVwcm9wcwUGTlVNUkVTCQACAQIWV3JvbmcgcHJvcG9ydGlvbnMgZGF0YQQBcgkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcHJvcHMAAAkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcHJvcHMAAQkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcHJvcHMAAgkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcHJvcHMAAwkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcHJvcHMABAkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcHJvcHMABQUDbmlsCQETZGlzdHJpYnV0ZUJ5V2VpZ2h0cwIFBXRvdGFsBQFyARFzdWJ0cmFjdE1hdGVyaWFscwMMc2hvdWxkVXNlTWF0A2hhcwl0b3RhbE5lZWQEBG5lZWQJARJnZXROZWVkZWRNYXRlcmlhbHMBBQl0b3RhbE5lZWQKAQpzdWJ0cmFjdG9yAgNhY2MDaWR4BAZyZXN1bHQJAGUCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUDaGFzBQNpZHgJAJEDAgUEbmVlZAUDaWR4AwkAZgIAAAUGcmVzdWx0CQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgICGE5vdCBlbm91Z2ggbWF0ZXJpYWwgaWR4PQkApAMBBQNpZHgCCywgeW91IGhhdmUgCQCRAwIFA2hhcwUDaWR4AgssIGJ1dCBuZWVkIAkApAMBCQCRAwIFBG5lZWQFA2lkeAkAzQgCBQNhY2MJAKQDAQUGcmVzdWx0AwUMc2hvdWxkVXNlTWF0CgACJGwFBUlURVI2CgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQpzdWJ0cmFjdG9yAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGBQNoYXMBEXN1YnRyYWN0RXF1aXBtZW50AgVvbGRFcQVwVXNlZAMJAAACBQVwVXNlZAIABQVvbGRFcQoBB3N1YlVzZWQCA2FjYwZpZHhBbXQEBXBhcnRzCQC1CQIFBmlkeEFtdAIBLAMJAQIhPQIJAJADAQUFcGFydHMAAgkAAgECKEluY29ycmVjdCBmb3JtYXQsIHNob3VsZCBiZSBpbmRleCxhbW91bnQEA2lkeAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBXBhcnRzAAADAwkAZgIAAAUDaWR4BgkAZwIFA2lkeAkAkAMBBRBwcm9kdWN0aW9uTWF0cml4CQACAQITVW5rbm93biBwcm9kdWN0IGlkeAQDYW10CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcGFydHMAAQQHZXFQYXJ0cwkAtQkCBQNhY2MJAKwCAgkAkQMCBQVwYXJ0cwAAAgE6AwkBAiE9AgkAkAMBBQdlcVBhcnRzAAIJAAIBCQCsAgIJAKwCAgIPWW91IGRvbid0IGhhdmUgCQCRAwIFCXByb2RUeXBlcwUDaWR4AgkgZXF1aXBwZWQEA3RtcAkAkQMCBQdlcVBhcnRzAAEEBm51bUxlbgMJAQdpc0RpZ2l0AQkArwICCQCwAgIFA3RtcAABAAEAAgABBARjdXJyCQENcGFyc2VJbnRWYWx1ZQEJAK8CAgUDdG1wBQZudW1MZW4EBHRhaWwJALACAgUDdG1wBQZudW1MZW4EBm5ld0FtdAMJAGcCBQRjdXJyBQNhbXQJAGUCBQRjdXJyBQNhbXQJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgINWW91IGVxdWlwcGVkIAkApAMBBQRjdXJyAgQgb2YgCQCRAwIFCXByb2RUeXBlcwUDaWR4AhMsIGJ1dCB0cmllZCB0byB1c2UgCQCkAwEFA2FtdAkArAICCQCsAgIJAKwCAgkArAICCQCRAwIFB2VxUGFydHMAAAkAkQMCBQVwYXJ0cwAAAgE6CQCkAwEFBm5ld0FtdAUEdGFpbAoAAiRsCQC1CQIFBXBVc2VkAgFfCgACJHMJAJADAQUCJGwKAAUkYWNjMAUFb2xkRXEKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBB3N1YlVzZWQCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYw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b3duIHByb2R1Y3QgaWR4AwkAZgIAAAUFY291bnQJAAIBAhdDb3VudCBjYW4ndCBiZSBuZWdhdGl2ZQMJAGYCBQVjb3VudAUNTUFYUFJPRElOU0xPVAkAAgEJAKwCAgkArAICCQCsAgICFENhbid0IHB1dCBtb3JlIHRoYW4gCQCkAwEFDU1BWFBST0RJTlNMT1QCBCBvZiAJAJEDAgUJcHJvZFR5cGVzBQpwcm9kdWN0SWR4AwkAAAIFBWNvdW50AAAJAJQKAgUFcExpc3QHBARoZWFkCQDJAQIFBXBMaXN0CQBoAgAIBQpwcm9kdWN0SWR4BARjdXJyCQCxCQEJAMkBAgkAygECBQVwTGlzdAkAaAIACAUKcHJvZHVjdElkeAAIBAR0YWlsCQDKAQIFBXBMaXN0CQBoAgAICQBkAgUKcHJvZHVjdElkeAABBAZyZWNpcGUJALUJAgkAkQMCBRBwcm9kdWN0aW9uTWF0cml4BQpwcm9kdWN0SWR4AgFfAwMJAQEhAQUKaXNQb3NpdGl2ZQkAZgIFBWNvdW50BQRjdXJyBwkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAglZb3UgaGF2ZSAJAKQDAQUEY3VycgIEIG9mIAkAkQMCBQlwcm9kVHlwZXMFCnByb2R1Y3RJZHgCEywgYnV0IHRyaWVkIHRvIHVzZSAJAKQDAQUFY291bnQECWlzQmlnSXRlbQMDCQEBIQEFCmlzUG9zaXRpdmUJARVjaGVja1N0YXRSZXF1aXJlbWVudHMCBQlkdWNrU3RhdHMJALUJAgkAkQMCBQZyZWNpcGUFEHJJZHhSZXF1aXJlbWVudHMCASwHBAZjb21wYXQJAJEDAgUGcmVjaXBlBQlySWR4U2xvdHMDCQAAAgUGY29tcGF0AgAJAAIBAhdJdGVtIGNhbm5vdCBiZSBlcXVpcHBlZAQBYwkBDXBhcnNlSW50VmFsdWUBBQZjb21wYXQEBGNTZWcJAGkCBQFjAGQDCQECIT0CBQdzZWdtZW50BQRjU2VnCQACAQIUU2VnbWVudCBpbmNvbXBhdGlibGUECGNNYWluQXV4CQBpAgkAagIFAWMAZAAKAwkBAiE9AgUHbWFpbkF1eAUIY01haW5BdXgJAAIBAhFTbG90IGluY29tcGF0aWJsZQQJY051bVNsb3RzCQBqAgUBYwAKAwMJAQIhPQIFBHNsb3QAAAkAZgIFCWNOdW1TbG90cwABBwkAAgECHkJpZyBpdGVtcyBzaG91bGQgb2NjdXB5IHNsb3QgMAkAZgIFCWNOdW1TbG90cwABBwkAlAoCCQDLAQIJAMsBAgUEaGVhZAkAmgMBCQBkAgUEY3VycgMFCmlzUG9zaXRpdmUFBWNvdW50CQEBLQEFBWNvdW50BQR0YWlsBQlpc0JpZ0l0ZW0BC3Nsb3RzR3JvdXBCBgFnBGJwSW4KaXNQb3NpdGl2ZQdzZWdtZW50B21haW5BdXgEcmVxcwMJAQIhPQIFAWcCAAQFc2xvdHMJALUJAgUBZwIBLAMJAGYCCQCQAwEFBXNsb3RzBQhNQVhTTE9UUwkAAgECEldyb25nIHNsb3RzIGZvcm1hdAQCczAJAJEDAgUFc2xvdHMAAAQCczEDCQBmAgkAkAMBBQVzbG90cwABCQCRAwIFBXNsb3RzAAECAAMDCQAAAgUCczACAAkAAAIFAnMxAgAHBQRicEluBAV0bXBTMAMJAQIhPQIFAnMwAgAJAQhhZGRQcm9kQgcFAnMwBQRicEluBQppc1Bvc2l0aXZlBQdzZWdtZW50BQdtYWluQXV4AAAFBHJlcXMJAJQKAgUEYnBJbgcDCQECIT0CBQJzMQIAAwgFBXRtcFMwAl8yCQACAQIeQmlnIGl0ZW0gYWxyZWFkeSBvY2N1cGllcyBzbG90CAkBCGFkZFByb2RCBwUCczEIBQV0bXBTMAJfMQUKaXNQb3NpdGl2ZQUHc2VnbWVudAUHbWFpbkF1eAABBQRyZXFzAl8xCAUFdG1wUzACXzEFBGJwSW4BBmRyZXNzQgQHc2VnTGlzdAZwQnl0ZXMKaXNQb3NpdGl2ZQRyZXFzCgEHc2VnbWVudAIDYWNjA3NlZwQBaggFA2FjYwJfMQQHbWFpbkF1eAkAtQkCBQNzZWcCATsDCQECIT0CCQCQAwEFB21haW5BdXgFCk5VTU1BSU5BVVgJAAIBAhRXcm9uZyBzZWdtZW50IGZvcm1hdAQBbQkAkQMCBQdtYWluQXV4AAAEAWEJAJEDAgUHbWFpbkF1eAABAwMJAAACBQFtAgAJAAACBQFhAgAHCQCUCgIJAGQCBQFqAAEIBQNhY2MCXzIEBHRtcE0JAQtzbG90c0dyb3VwQgYFAW0IBQNhY2MCXzIFCmlzUG9zaXRpdmUFAWoAAAUEcmVxcwkAlAoCCQBkAgUBagABCQELc2xvdHNHcm91cEIGBQFhBQR0bXBNBQppc1Bvc2l0aXZlBQFqAAEFBHJlcXMICgACJGwFB3NlZ0xpc3QKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCUCgIAAAUGcEJ5dGVzCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQdzZWdtZW50AgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAl8yARl1cGRhdGVQcm9wb3J0aW9uc0ludGVybmFsBAhwcm9wTGlzdA10ZXJyYWluQ291bnRzDWxhbmRTaXplSW5kZXgEc2lnbgMJAQIhPQIJAJADAQUIcHJvcExpc3QFBk5VTVJFUwkAAgECFldyb25nIHByb3BvcnRpb25zIGRhdGEKAQd1cGRhdGVyAgNhY2MBaQQGcmVzdWx0CQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCHByb3BMaXN0BQFpCQBoAgkAaAIFBHNpZ24JAJEDAgUNdGVycmFpbkNvdW50cwUBaQUNbGFuZFNpemVJbmRleAMJAGYCAAAFBnJlc3VsdAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIWUGFuaWMhIFBpZWNlcyBvZiB0eXBlPQkApAMBBQFpAgcsIHNpZ249CQCkAwEFBHNpZ24CFCwgIHRlcnJhaW5Db3VudHNbaV09CQCkAwEJAJEDAgUNdGVycmFpbkNvdW50cwUBaQIQLCBsYW5kU2l6ZUluZGV4PQkApAMBBQ1sYW5kU2l6ZUluZGV4CQDNCAIFA2FjYwkApAMBBQZyZXN1bHQKAAIkbAUFSVRFUjYKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBB3VwZGF0ZXICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYBEXVwZGF0ZVByb3BvcnRpb25zAw10ZXJyYWluQ291bnRzDWxhbmRTaXplSW5kZXgEc2lnbgQIcHJvcExpc3QJALUJAgkBC3ZhbHVlT3JFbHNlAgkAoggBCQERa2V5UmVzUHJvcG9ydGlvbnMAAgswXzBfMF8wXzBfMAIBXwkAuQkCCQEZdXBkYXRlUHJvcG9ydGlvbnNJbnRlcm5hbAQFCHByb3BMaXN0BQ10ZXJyYWluQ291bnRzBQ1sYW5kU2l6ZUluZGV4BQRzaWduAgFfAQ1jb3VudFRlcnJhaW5zAQh0ZXJyYWlucwkAzAgCCQBlAgkAkAMBCQC1CQIFCHRlcnJhaW5zAgFBAAEJAMwIAgkAZQIJAJADAQkAtQkCBQh0ZXJyYWlucwIBQgABCQDMCAIJAGUCCQCQAwEJALUJAgUIdGVycmFpbnMCAUMAAQkAzAgCCQBlAgkAkAMBCQC1CQIFCHRlcnJhaW5zAgFEAAEJAMwIAgkAZQIJAJADAQkAtQkCBQh0ZXJyYWlucwIBRQABCQDMCAIJAGUCCQCQAwEJALUJAgUIdGVycmFpbnMCAUYAAQUDbmlsAQZhZGRSZXMFCmN1cnJlbnRSZXMNdGVycmFpbkNvdW50cwlkZWx0YVRpbWUNbGFuZFNpemVJbmRleBdkYWlseUJ5UGllY2VXaXRoQm9udXNlcwoBBWFkZGVyAgNhY2MBaQQJcmVzT2ZUeXBlCQBoAgkAaAIJAGsDBQlkZWx0YVRpbWUFF2RhaWx5QnlQaWVjZVdpdGhCb251c2VzBQlEQVlNSUxMSVMJAJEDAgUNdGVycmFpbkNvdW50cwUBaQUNbGFuZFNpemVJbmRleAkAzQgCBQNhY2MJAKQDAQkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQpjdXJyZW50UmVzBQFpBQlyZXNPZlR5cGUEAXIKAAIkbAUFSVRFUjYKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNu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MF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgkAlAoCCQC5CQIIBQFyAl8xAgFfCQC5CQIIBQFyAl8yAgFfAQNhYnMBAXgDCQDAAgIFAXgJALYCAQAABQF4CQC+AgEFAXgABGZyZXEJAMwIAgkAzAgCAAYJAMwIAgAJCQDMCAIADgkAzAgCAA8JAMwIAgAQBQNuaWwJAMwIAgkAzAgCAAUJAMwIAgAICQDMCAIADQkAzAgCAA4JAMwIAgAPBQNuaWwJAMwIAgkAzAgCAAEJAMwIAgAECQDMCAIACQkAzAgCAAoJAMwIAgAPBQNuaWwJAMwIAgkAzAgCAAEJAMwIAgAGCQDMCAIABwkAzAgCAA8JAMwIAgATBQNuaWwJAMwIAgkAzAgCAAQJAMwIAgAHCQDMCAIACAkAzAgCAA0JAMwIAgASBQNuaWwFA25pbAEHZ2VuQ2hhcgIBbgVmcmVxcwQDcmVtCQCgAwEJALsCAgUBbgUHVFdFTlRZWAQGbGV0dGVyAwkAZgIJAJEDAgUFZnJlcXMAAAUDcmVtAgFBAwkAZgIJAJEDAgUFZnJlcXMAAQUDcmVtAgFCAwkAZgIJAJEDAgUFZnJlcXMAAgUDcmVtAgFDAwkAZgIJAJEDAgUFZnJlcXMAAwUDcmVtAgFEAwkAZgIJAJEDAgUFZnJlcXMABAUDcmVtAgFFAgFGBQZsZXR0ZXIBC2dlblRlcnJhaW5zAgRzZWVkDGNvbnRpbmVudElkeAQBZgkAkQMCBQRmcmVxBQxjb250aW5lbnRJZHgKARB0ZXJyYWluR2VuZXJhdG9yAgNhY2MEZWxlbQkAlAoCCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAggFA2FjYwJfMQkBB2dlbkNoYXICCAUDYWNjAl8yBQFmCQEHZ2VuQ2hhcgIJALoCAggFA2FjYwJfMgUHVFdFTlRZWAUBZgkBB2dlbkNoYXICCQC6AgIIBQNhY2MCXzIFCFRXRU5UWTJYBQFmCQEHZ2VuQ2hhcgIJALoCAggFA2FjYwJfMgUIVFdFTlRZM1gFAWYJAQdnZW5DaGFyAgkAugICCAUDYWNjAl8yBQhUV0VOVFk0WAUBZgkAugICCAUDYWNjAl8yBQhUV0VOVFk1WAQBdAoAAiRsCQDMCAIAAQkAzAgCAAIJAMwI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TlVNUkVTCQCRAwIFAndoBQh3aElkeFJlcwILMF8wXzBfMF8wXzAJAMwIAgMJAAACCQCQAwEJALUJAgkAkQMCBQJ3aAUId2hJZHhNYXQCAV8FBk5VTVJFUwkAkQMCBQJ3aAUId2hJZHhNYXQCCzBfMF8wXzBfMF8wCQDMCAIJAJEDAgUCd2gFCXdoSWR4UHJvZAkAzAgCBQZ3aExvZnQFA25pbAEVZ2V0V2FyZWhvdXNlU3BhY2VMZWZ0AQljdXJyZW50V2gEC29jY3VwaWVkVm9sCQEXZ2V0V2FyZWhvdXNlT2NjdXBpZWRWb2wBBQljdXJyZW50V2gED2N1cnJXaExvY2tlZFZvbAkBDXBhcnNlSW50VmFsdWUBCQCRAwIJALUJAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4TE9GVAIBXwUJdm9sTG9ja2VkCQBlAgkAZQIJARdnZXRXYXJlaG91c2VUb3RhbFZvbHVtZQEJAJEDAgUJY3VycmVudFdoBQt3aElkeExldmVscwULb2NjdXBpZWRWb2wFD2N1cnJXaExvY2tlZFZvbAEIdG9Wb2x1bWUCBmFtb3VudAdwa2dTaXplBARwa2dzAwkAZwIFBmFtb3VudAAACQBpAgkAZQIJAGQCBQZhbW91bnQFB3BrZ1NpemUAAQUHcGtnU2l6ZQkBAS0BCQBpAgkAZQIJAGQCCQEBLQEFBmFtb3VudAUHcGtnU2l6ZQABBQdwa2dTaXplCQBoAgUEcGtncwUFTVVMVDgBCW1vdmVTdHVmZgMKY2FyZ29QYXJ0cwljdXJyZW50V2gLY3VycmVudFBhY2sDCQECIT0CCQCQAwEFCmNhcmdvUGFydHMAAwkAAgECNGNhcmdvTGlzdFN0ciBzaG91bGQgY29udGFpbiBleGFjdGx5IDIgJzonIHNlcGFyYXRvcnMECHJlc1BhcnRzCQC1CQIJAJEDAgUKY2FyZ29QYXJ0cwAAAgFfBAhtYXRQYXJ0cwkAtQkCCQCRAwIFCmNhcmdvUGFydHMAAQIBXwQJcHJvZFBhcnRzAwkAAAIJAJEDAgUKY2FyZ29QYXJ0cwACAgAFA25pbAkAtQkCCQCRAwIFCmNhcmdvUGFydHMAAgIBXwMJAQIhPQIJAJADAQUIcmVzUGFydHMFBk5VTVJFUwkAAgECIEFsbCA2IHJlc291cmNlcyBzaG91bGQgYmUgcGFzc2VkAwkBAiE9AgkAkAMBBQhtYXRQYXJ0cwUGTlVNUkVTCQACAQIgQWxsIDYgbWF0ZXJpYWxzIHNob3VsZCBiZSBwYXNzZWQEC3doU3BhY2VMZWZ0CQEVZ2V0V2FyZWhvdXNlU3BhY2VMZWZ0AQUJY3VycmVudFdoBAljdXJyV2hSZXMJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4UmVzAgFfBAljdXJyV2hNYXQJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4TWF0AgFfBApjdXJyV2hQcm9kAwkAAAIJAJEDAgUJY3VycmVudFdoBQl3aElkeFByb2QCAAUDbmlsCQC1CQIJAJEDAgUJY3VycmVudFdoBQl3aElkeFByb2QCAV8EDmN1cnJlbnRQYWNrUmVzCQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzAgFfBA5jdXJyZW50UGFja01hdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAIBXwQPY3VycmVudFBhY2tQcm9kAwkAAAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAIABQNuaWwJALUJAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kAgFfCgEDbXZSAgNhY2MEaXRlbQQBaQgFA2FjYwJfMQQCYW0JAQ1wYXJzZUludFZhbHVlAQUEaXRlbQQDd2hyCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUJY3VycldoUmVzBQFpBANicHIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ5jdXJyZW50UGFja1JlcwUBaQMJAAACBQJhbQAACQCWCgQJAGQCBQFpAAEJAM0IAggFA2FjYwJfMgkAkQMCBQljdXJyV2hSZXMFAWkJAM0IAggFA2FjYwJfMwkAkQMCBQ5jdXJyZW50UGFja1JlcwUBaQgFA2FjYwJfNAMJAGYCBQJhbQAAAwkAZgIFAmFtBQNicHIJAAIBCQCsAgIJAKwCAgkArAICCQCsAgICEEF0dGVtcHQgdG8gdGFrZSAFBGl0ZW0CGSBmcm9tIGJhY2twYWNrLCBidXQgb25seSAJAKQDAQUDYnByAgogYXZhaWxhYmxlCQCWCgQJAGQCBQFpAAEJAM0I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AgkAnwgBCQESa2V5TmV4dEZyZWVMYW5kTnVtAAkAZAIFD1BSRVNBTEVOVU1MQU5EUwABBAdsYW5kTnVtCQCkAwEFB2ZyZWVOdW0EDGNvbnRpbmVudElkeAkAoAMBCQC7AgIFBmJpZ051bQUFRklWRVgECHRlcnJhaW5zCQELZ2VuVGVycmFpbnMCBQZiaWdOdW0FDGNvbnRpbmVudElkeAQJY29udGluZW50CQCRAwIFCmNvbnRpbmVudHMFDGNvbnRpbmVudElkeAQFaXNzdWUJAMIIBQkBB25mdE5hbWUCBQdsYW5kTnVtAgFTCQC5CQIJAMwIAgUHbGFuZE51bQkAzAgCAgFTCQDMCAIFCHRlcnJhaW5zCQDMCAIFCWNvbnRpbmVudAUDbmlsAgFfAAEAAAcEB2Fzc2V0SWQJALgIAQUFaXNzdWUEAmlkCQDYBAEFB2Fzc2V0SWQJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBEmtleU5leHRGcmVlTGFuZE51bQAJAGQCBQdmcmVlTnVtAAEJAMwIAgUFaXNzdWUJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEGtleUxhbmRUb0Fzc2V0SWQBBQdsYW5kTnVtBQJpZAkAzAgCCQELU3RyaW5nRW50cnkCCQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQUCaWQFCHVzZXJBZGRyCQDMCAIJAQtTdHJpbmdFbnRyeQIJARFrZXlMYW5kTnVtVG9Pd25lcgEFB2xhbmROdW0FCHVzZXJBZGRyCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEFAmlkAAAJAMwIAgkBDEludGVnZXJFbnRyeQIJAR5rZXlJbmZyYUxldmVsQnlBc3NldElkQW5kT3duZXICBQJpZAUIdXNlckFkZHIAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQZjYWxsZXIAAQUHYXNzZXRJZAUDbmlsCQCUCgIFAmlkBQljb250aW5lbnQBDGZsaWdodENvbW1vbgMIdXNlckFkZHIHbWVzc2FnZQNzaWcDCQEBIQEJAMQTAwUHbWVzc2FnZQUDc2lnBQNwdWIJAAIBAhhzaWduYXR1cmUgZG9lcyBub3QgbWF0Y2gEBXBhcnRzCQC1CQIJALAJAQUHbWVzc2FnZQIBOwQJZmxpZ2h0TG9nCQC1CQIJAJEDAgUFcGFydHMAAAIBfAQCaHAJALUJAgkAkQMCBQlmbGlnaHRMb2cFCGZsSGVhbHRoAgFfBAVjdXJIUAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmhwAAAEBW5ld0hQCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCaHAAAQQLbmV3TG9jVHhWZXIJALUJAgkAkQMCBQVwYXJ0cwABAgE6BAtuZXdMb2NhdGlvbgkAkQMCBQtuZXdMb2NUeFZlcgAABAR0aW1lCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUJZmxpZ2h0TG9nBQtmbFRpbWVzdGFtcAMDCQBmAgUEdGltZQkAZAIIBQlsYXN0QmxvY2sJdGltZXN0YW1wBRFGSVZFTUlOVVRFU01JTExJUwYJAGYCCQBlAggFCWxhc3RCbG9jawl0aW1lc3RhbXAFEUZJVkVNSU5VVEVTTUlMTElTBQR0aW1lCQACAQkArAICCQCsAgIJAKwCAgIcc2lnbmF0dXJlIG91dGRhdGVkOiBsb2dUaW1lPQkApAMBBQR0aW1lAgksIGJjVGltZT0JAKQDAQgFCWxhc3RCbG9jawl0aW1lc3RhbXAECXR4RnJvbU1zZwkAkQMCBQtuZXdMb2NUeFZlcgABBAZsYXN0VHgJAQt2YWx1ZU9yRWxzZQIJAKIIAQkBEWtleUxhc3RUeElkQnlVc2VyAQUIdXNlckFkZHICAAMJAQIhPQIFBmxhc3RUeAUJdHhGcm9tTXNnCQACAQkArAICCQCsAgIJAKwCAgIeVHggaWRzIGRvbid0IG1hdGNoISBJbiBzdGF0ZTogBQZsYXN0VHgCCiwgaW4gbXNnOiAFCXR4RnJvbU1zZwQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQh1c2VyQWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQJa2V5SGVhbHRoCQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkBAVtYXhIUAkBCW1heEhlYWx0aAEJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBDGtleUR1Y2tMZXZlbAEFC2R1Y2tBc3NldElkAAAEDG9sZEZyb21TdGF0ZQkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlrZXlIZWFsdGgFBW1heEhQAwkBAiE9AgUMb2xkRnJvbVN0YXRlBQVjdXJIUAkAAgEJAKwCAgkArAICCQCsAgICCm9sZEhlYWx0aD0JAKQDAQUMb2xkRnJvbVN0YXRlAi8gZnJvbSBzdGF0ZSBkb2VzIG5vdCBtYXRjaCBvbmUgZnJvbSBmbGlnaHQgbG9nPQkApAMBBQVjdXJIUAMJAGcCAAAFBWN1ckhQCQACAQIeWW91IGNhbid0IGZseSB3aXRoIHplcm8gaGVhbHRoBAVib251cwMJAGYCCQCQAwEFCWZsaWdodExvZwUHZmxCb251cwkAkQMCBQlmbGlnaHRMb2cFB2ZsQm9udXMCAAQIcHJvZFVzZWQDCQBmAgkAkAMBBQlmbGlnaHRMb2cFC2ZsUHJvZHNVc2VkCQCRAwIFCWZsaWdodExvZwULZmxQcm9kc1VzZWQCAAQKc2VudEFtb3VudAMDCQBmAgUFbmV3SFAAAAkAAAIFBWJvbnVzAgEkBwkBBWFzSW50AQkA/AcEBQxyZXN0Q29udHJhY3QCDXNlbmRVc2R0UHJpemUJAMwIAgUIdXNlckFkZHIFA25pbAUDbmlsAAAJAJcKBQUFbmV3SFAFC2R1Y2tBc3NldElkBQpzZW50QW1vdW50BQtuZXdMb2NhdGlvbgUIcHJvZFVzZWQBEGV4cGVkaXRpb25Db21tb24EBmNhbGxlcgR0eElkB21lc3NhZ2UDc2lnBAh1c2VyQWRkcgkApQgBBQZjYWxsZXIEAWYJAQxmbGlnaHRDb21tb24DBQh1c2VyQWRkcgUHbWVzc2FnZQUDc2lnBAtkdWNrQXNzZXRJZAgFAWYCXzIECWtleUhlYWx0aAkBDWtleUR1Y2tIZWFsdGgBBQtkdWNrQXNzZXRJZAQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkEBW1MaXN0CQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0AgFfBAZuZXdNYXQJALkJAgkBEXN1YnRyYWN0TWF0ZXJpYWxzAwYFBW1MaXN0BQxFWFBNQVRFUklBTFMCAV8EBWVxS2V5CQEQa2V5RHVja0VxdWlwbWVudAEFC2R1Y2tBc3NldElkBAljdXJyZW50RXEJAQt2YWx1ZU9yRWxzZQIJAKIIAQUFZXFLZXkCFyw7LF8sOyxfLDssXyw7LF8sOyxfLDssBAVuZXdFcQkBEXN1YnRyYWN0RXF1aXBtZW50AgUJY3VycmVudEVxCAUBZgJfNQMJAGcCAAAIBQFmAl8xCQCVCgMJAMwIAgkBDEludGVnZXJFbnRyeQIFCWtleUhlYWx0aAAACQDMCAIJAQtTdHJpbmdFbnRyeQIFBWVxS2V5BQVuZXdFcQUDbmlsAgAAAAQBZQkBEmV4cGVkaXRpb25JbnRlcm5hbAIFBmNhbGxlcgUEdHhJZAQCaWQICAUBZQJfMgJfMQkAlQoDCQDNCAIJAM0IAgkAzQgCCQDNCAIIBQFlAl8xCQELU3RyaW5nRW50cnkCCQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQJALkJAgkAzAgCCAgFAWUCXzICXzIJAMwIAgIBTAkAzAgCBQJpZAUDbmlsAgFfCQEMSW50ZWdlckVudHJ5AgUJa2V5SGVhbHRoCAUBZgJfMQkBC1N0cmluZ0VudHJ5AgUFZXFLZXkFBW5ld0VxCQELU3RyaW5nRW50cnkCBQVicEtleQkAuQkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMJAMwIAgUGbmV3TWF0CQDMCAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAUDbmlsAgE6BQJpZAgFAWYCXzMBDGFwcGx5Qm9udXNlcwILbGFuZEFzc2V0SWQGcGllY2VzBAppbmZyYUxldmVsCQELdmFsdWVPckVsc2UCCQCfCAEJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQULbGFuZEFzc2V0SWQAAAQJYXJ0UGllY2VzCQELdmFsdWVPckVsc2UCCQCfCAEJASBrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQW5kQXNzZXRJZAIFCkFSVFBSRVNBTEUFC2xhbmRBc3NldElkAAAEBGFkZDYJAGkCBQppbmZyYUxldmVsAAYEBGFkZDcJAGkCBQppbmZyYUxldmVsAAcJAGQCCQBkAgUPREFJTFlSRVNCWVBJRUNFCQBrAwUPREFJTFlSRVNCWVBJRUNFCQBkAgkAZAIFCmluZnJhTGV2ZWwFBGFkZDYJAGgCAAIFBGFkZDcABQkAawMFD0RBSUxZUkVTQllQSUVDRQUJYXJ0UGllY2VzCQBoAgUGcGllY2VzAAUBFGNoZWNrQ2xhaW1Db25kaXRpb25zAwRhZGRyCWNsYWltTW9kZQ1sYW5kQXNzZXRJZEluBA0kdDAzMTAwODMxNTQ3AwkAAAIFCWNsYWltTW9kZQULY2xhaW1Nb2RlV2gJAJQKAgUNbGFuZEFzc2V0SWRJbgkBC3ZhbHVlT3JFbHNlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyAgAEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQLY3VyTG9jYXRpb24JAQt2YWx1ZU9yRWxzZQIJAKIIAQkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkBQ9ERUZBVUxUTE9DQVRJT04EA2xvYwkAtQkCCQEFdmFsdWUBBQtjdXJMb2NhdGlvbgIBXwMJAQIhPQIJAJEDAgUDbG9jBQpsb2NJZHhUeXBlAgFMCQACAQkArAICCQCsAgICFkR1Y2sgbG9jYXRpb24gdHlwZSBpcyAJAJEDAgUDbG9jBQpsb2NJZHhUeXBlAhEsIGJ1dCBzaG91bGQgYmUgTAkAlAoCCQCRAwIFA2xvYwUIbG9jSWR4SWQFC2R1Y2tBc3NldElkBAtsYW5kQXNzZXRJZAgFDSR0MDMxMDA4MzE1NDcCXzEEBmR1Y2tJZAgFDSR0MDMxMDA4MzE1NDcCXzIEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQULbGFuZEFzc2V0SWQEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQULbGFuZEFzc2V0SWQECXNhdmVkVGltZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCfCAEFB3RpbWVLZXkJAKwCAgkArAICAgVMYW5kIAgFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkBAVvd25lcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQtsYW5kQXNzZXRJZAkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDCQECIT0CBQVvd25lcgUEYWRkcgkAAgEJAKwCAgUKTEFORFBSRUZJWAINIGlzIG5vdCB5b3VycwQBZAkAtQkCCAUFYXNzZXQLZGVzY3JpcHRpb24CAV8JAJYKBAUGZHVja0lkBQtsYW5kQXNzZXRJZAUBZAUJc2F2ZWRUaW1lARBjbGFpbVJlc0ludGVybmFsBARhZGRyBmFtb3VudAljbGFpbU1vZGUNbGFuZEFzc2V0SWRJbgMJAGYCAAAFBmFtb3VudAkAAgECD05lZ2F0aXZlIGFtb3VudAQBYwkBFGNoZWNrQ2xhaW1Db25kaXRpb25zAwUEYWRkcgUJY2xhaW1Nb2RlBQ1sYW5kQXNzZXRJZEluBAhsYW5kU2l6ZQkAkQMCCAUBYwJfMwULcmVjTGFuZFNpemUEDXRlcnJhaW5Db3VudHMJAQ1jb3VudFRlcnJhaW5zAQkAkQMCCAUBYwJfMwULcmVjVGVycmFpbnMECWRlbHRhVGltZQkAZQIIBQlsYXN0QmxvY2sJdGltZXN0YW1wCAUBYwJfNAMJAGYCAAAFCWRlbHRhVGltZQkAAgEJAKwCAgkArAICCQCsAgICJlNhdmVkIHRpbWVzdGFtcCBpcyBpbiBmdXR1cmUsIHNhdmVkID0gCQCkAwEIBQFjAl80AgwsIGN1cnJlbnQgPSAJAKQDAQgFCWxhc3RCbG9jawl0aW1lc3RhbXAEBnBpZWNlcwkBD251bVBpZWNlc0J5U2l6ZQEFCGxhbmRTaXplBBZkYWlseVByb2R1Y3Rpb25CeVBpZWNlCQEMYXBwbHlCb251c2VzAggFAWMCXzIFBnBpZWNlcwQIYXZhaWxSZXMJAGsDBQlkZWx0YVRpbWUJAGgCBRZkYWlseVByb2R1Y3Rpb25CeVBpZWNlBQZwaWVjZXMFCURBWU1JTExJUwMJAGYCBQZhbW91bnQFCGF2YWlsUmVzCQACAQkArAICCQCsAgIJAKwCAgIiTm90IGVub3VnaCByZXNvdXJjZXMsIGF2YWlsYWJsZSA9IAkApAMBBQhhdmFpbFJlcwIOLCByZXF1ZXN0ZWQgPSAJAKQDAQUGYW1vdW50BAxuZXdEZWx0YVRpbWUJAGsDCQBlAgUIYXZhaWxSZXMFBmFtb3VudAUJREFZTUlMTElTCQBoAgUWZGFpbHlQcm9kdWN0aW9uQnlQaWVjZQUGcGllY2VzBAxuZXdUaW1lc3RhbXAJAGUCCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUMbmV3RGVsdGFUaW1lBAlsYW5kSW5kZXgJAGkCBQZwaWVjZXMFBVNTSVpFBApyZXNUb0NsYWltCQEJdmlydENsYWltBAUNdGVycmFpbkNvdW50cwkAZQIFCWRlbHRhVGltZQUMbmV3RGVsdGFUaW1lBQlsYW5kSW5kZXgFFmRhaWx5UHJvZHVjdGlvbkJ5UGllY2UEBXdoS2V5CQESa2V5V2FyZWhvdXNlQnlMYW5kAQgFAWMCXzIECmluZnJhTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBCAUBYwJfMgAABAljdXJyZW50V2gJAQxnZXRXYXJlaG91c2UDBQV3aEtleQUJbGFuZEluZGV4BQppbmZyYUxldmVsBARsb2Z0CQC1CQIJAJEDAgUJY3VycmVudFdoBQl3aElkeExPRlQCAV8EC3doU3BhY2VMZWZ0CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAUHdm9sRnJlZQMDCQAAAgUJY2xhaW1Nb2RlBQtjbGFpbU1vZGVXaAkAZgIFBmFtb3VudAULd2hTcGFjZUxlZnQHCQACAQkArAICCQCsAgICBU9ubHkgCQCkAwEFC3doU3BhY2VMZWZ0Ahggc3BhY2UgbGVmdCBpbiB3YXJlaG91c2UEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBCAUBYwJfMQQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BA5jdXJyZW50UGFja1JlcwkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwIBXwQMY3VycmVudFdoUmVzCQC1CQIJAJEDAgUJY3VycmVudFdoBQh3aElkeFJlcwIBXwQNJHQwMzM5MjEzNDc5MgMJAAACBQljbGFpbU1vZGUFC2NsYWltTW9kZVdoCQCWCgQJAQZhZGRSZXMFBQxjdXJyZW50V2hSZXMFDXRlcnJhaW5Db3VudHMJAGUCBQlkZWx0YVRpbWUFDG5ld0RlbHRhVGltZQUJbGFuZEluZGV4BRZkYWlseVByb2R1Y3Rpb25CeVBpZWNlCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQt2b2xPY2N1cGllZAgFCnJlc1RvQ2xhaW0CXzIJAGUCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAUHdm9sRnJlZQgFCnJlc1RvQ2xhaW0CXzIDCQAAAgUJY2xhaW1Nb2RlBQ1jbGFpbU1vZGVEdWNrCQCWCgQJAJEDAgUJY3VycmVudFdoBQh3aElkeFJlcwkBBmFkZFJlcwUFDmN1cnJlbnRQYWNrUmVzBQ10ZXJyYWluQ291bnRzCQBlAgUJZGVsdGFUaW1lBQxuZXdEZWx0YVRpbWUFCWxhbmRJbmRleAUWZGFpbHlQcm9kdWN0aW9uQnlQaWVjZQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFC3ZvbE9jY3VwaWVkCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAUHdm9sRnJlZQQFZGlzdHIJAQ1kaXN0cmlidXRlUmVzBAUMY3VycmVudFdoUmVzBQ5jdXJyZW50UGFja1JlcwUKcmVzVG9DbGFpbQULd2hTcGFjZUxlZnQEBHdoQW0JAJcDAQkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAUHdm9sRnJlZQkAzAgCCAUKcmVzVG9DbGFpbQJfMgUDbmlsCQCWCgQIBQVkaXN0cgJfMQgFBWRpc3RyAl8yCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFC3ZvbE9jY3VwaWVkBQR3aEFtCQBlAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFB3ZvbEZyZWUFBHdoQW0EBXdoUmVzCAUNJHQwMzM5MjEzNDc5MgJfMQQFYnBSZXMIBQ0kdDAzMzkyMTM0NzkyAl8yBAVsb2Z0TwgFDSR0MDMzOTIxMzQ3OTICXzMEBWxvZnRGCAUNJHQwMzM5MjEzNDc5MgJfNAkAlwoFCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEIBQFjAl8yBQxuZXdUaW1lc3RhbXAJAMwIAgkBDEludGVnZXJFbnRyeQIJASJrZXlTdGFrZWRUaW1lQnlUeXBlQXNzZXRJZEFuZE93bmVyAwUKTEFORFBSRUZJWAgFAWMCXzIFBGFkZHIFDG5ld1RpbWVzdGFtcAUDbmlsBQVicEtleQkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIFBWJwUmVzCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0CQDMCAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAUDbmlsBQV3aEtleQkAzAgCCQCRAwIFCWN1cnJlbnRXaAULd2hJZHhMZXZlbHMJAMwIAgUFd2hSZXMJAMwIAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4TWF0CQDMCAIJAJEDAgUJY3VycmVudFdoBQl3aElkeFByb2QJAMwIAgkAuQkCCQDMCAIJAJEDAgUEbG9mdAUJdm9sTG9ja2VkCQDMCAIJAKQDAQUFbG9mdE8JAMwIAgkApAMBBQVsb2Z0RgkAzAgCCQCRAwIFBGxvZnQFCHZvbFRvdGFsBQNuaWwCAV8FA25pbAEIY2xhaW1BbGwEBGFkZHILbGFuZEFzc2V0SWQGcGllY2VzCWNsYWltTW9kZQQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAQJc2F2ZWRUaW1lCQEFdmFsdWUBCQCfCAEFB3RpbWVLZXkECGF2YWlsUmVzCQBoAgkAawMJAGUCCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUJc2F2ZWRUaW1lCQEMYXBwbHlCb251c2VzAgULbGFuZEFzc2V0SWQFBnBpZWNlcwUJREFZTUlMTElTBQZwaWVjZXMJARBjbGFpbVJlc0ludGVybmFsBAUEYWRkcgUIYXZhaWxSZXMFCWNsYWltTW9kZQULbGFuZEFzc2V0SWQBDXVwSW5mcmFDb21tb24EDHNob3VsZFVzZU1hdAZjYWxsZXINcGF5bWVudEFtb3VudAtsYW5kQXNzZXRJZAQEYWRkcgkApQgBBQZjYWxsZXIEAWMJARRjaGVja0NsYWltQ29uZGl0aW9ucwMFBGFkZHIFE2NsYWltTW9kZVdoVGhlbkR1Y2sFC2xhbmRBc3NldElkBAZwaWVjZXMJAQ9udW1QaWVjZXNCeVNpemUBCQCRAwIIBQFjAl8zBQtyZWNMYW5kU2l6ZQQIaW5mcmFLZXkJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQgFAWMCXzIECGN1ckxldmVsCQELdmFsdWVPckVsc2UCCQCfCAEFCGluZnJhS2V5AAADCQBnAgUIY3VyTGV2ZWwAAwkAAgECJkN1cnJlbnRseSBtYXggaW5mcmFzdHJ1Y3R1cmUgbGV2ZWwgPSAzBAhuZXdMZXZlbAkAZAIFCGN1ckxldmVsAAEEBGNvc3QJAGsDBRVJbmZyYVVwZ3JhZGVDb3N0U1VzZHQJAGgCBQZwaWVjZXMFCG5ld0xldmVsBQVTU0laRQMDCQEBIQEFDHNob3VsZFVzZU1hdAkBAiE9AgUNcGF5bWVudEFtb3VudAUEY29zdAcJAAIBCQCsAgICG1BheW1lbnQgYXR0YWNoZWQgc2hvdWxkIGJlIAkApAMBBQRjb3N0BAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQgFAWMCXzEEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQFbUxpc3QJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQCAV8EB21hdFVzZWQJAGsDBRFJbmZyYVVwZ3JhZGVDb3N0UwkAaAIFBnBpZWNlcwUIbmV3TGV2ZWwFBVNTSVpFBAZuZXdNYXQJALkJAgkBEXN1YnRyYWN0TWF0ZXJpYWxzAwUMc2hvdWxkVXNlTWF0BQVtTGlzdAUHbWF0VXNlZAIBXwQLY2xhaW1SZXN1bHQJAQhjbGFpbUFsbAQFBGFkZHIIBQFjAl8yBQZwaWVjZXMFE2NsYWltTW9kZVdoVGhlbkR1Y2sEBndoRGF0YQgFC2NsYWltUmVzdWx0Al81BAZvbGRWb2wJARdnZXRXYXJlaG91c2VUb3RhbFZvbHVtZQEJAJEDAgUGd2hEYXRhBQt3aElkeExldmVscwQKbmV3Vm9sRGF0YQkAuQkCCQDMCAIJAJEDAgkAtQkCCQCRAwIFBndoRGF0YQULd2hJZHhMZXZlbHMCAV8AAAkAzAgCCQCkAwEFCG5ld0xldmVsBQNuaWwCAV8EBm5ld1ZvbAkBF2dldFdhcmVob3VzZVRvdGFsVm9sdW1lAQUKbmV3Vm9sRGF0YQQEbG9mdAkAtQkCCQCRAwIFBndoRGF0YQUJd2hJZHhMT0ZUAgFfBApuZXdMb2Z0U3RyCQC5CQIJAMwIAgkAkQMCBQRsb2Z0BQl2b2xMb2NrZWQJAMwIAgkAkQMCBQRsb2Z0BQt2b2xPY2N1cGllZAkAzAgCCQCkAwEJAGUCCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFB3ZvbEZyZWUFBm5ld1ZvbAUGb2xkVm9sCQDMCAIJAKQDAQUGbmV3Vm9sBQNuaWwCAV8JAJUKAwkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQhpbmZyYUtleQUIbmV3TGV2ZWwJAMwIAgkBDEludGVnZXJFbnRyeQIJAR5rZXlJbmZyYUxldmVsQnlBc3NldElkQW5kT3duZXICCAUBYwJfMgUEYWRkcgUIbmV3TGV2ZWwJAMwIAgkBC1N0cmluZ0VudHJ5AgUFYnBLZXkJALkJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIJAJEDAggFC2NsYWltUmVzdWx0Al8zBQhicElkeFJlcwkAzAgCBQZuZXdNYXQJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kBQNuaWwCAToJAMwIAgkBC1N0cmluZ0VudHJ5AggFC2NsYWltUmVzdWx0Al80CQC5CQIJAMwIAgUKbmV3Vm9sRGF0YQkAzAgCCQCRAwIFBndoRGF0YQUId2hJZHhSZXMJAMwIAgkAkQMCBQZ3aERhdGEFCHdoSWR4TWF0CQDMCAIJAJEDAgUGd2hEYXRhBQl3aElkeFByb2QJAMwIAgUKbmV3TG9mdFN0cgUDbmlsAgE6BQNuaWwIBQtjbGFpbVJlc3VsdAJfMQUIbmV3TGV2ZWwFB21hdFVzZWQBF3VwZGF0ZUR1Y2tTdGF0c0ludGVybmFsAgtkdWNrQXNzZXRJZAdkZWx0YVhQAwkBASEBBQ9LU0FMTE9XWFBMRVZFTFMJAJQKAgUDbmlsAAAEBmx2bEtleQkBDGtleUR1Y2tMZXZlbAEFC2R1Y2tBc3NldElkBAV4cEtleQkBCWtleUR1Y2tYUAEFC2R1Y2tBc3NldElkBAJ4cAkBC3ZhbHVlT3JFbHNlAgkAmggCBQ9zdGFraW5nQ29udHJhY3QFBXhwS2V5AAAEBW5ld1hQCQBkAgUCeHAFB2RlbHRhWFAECWx2bFBvaW50cwkBB2xldmVsVXACCQELdmFsdWVPckVsc2UCCQCaCAIFD3N0YWtpbmdDb250cmFjdAUGbHZsS2V5AAAFBW5ld1hQBAlrZXlQb2ludHMJARFrZXlEdWNrRnJlZVBvaW50cwEFC2R1Y2tBc3NldElkCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIFBmx2bEtleQkAkQMCBQlsdmxQb2ludHMAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgUFeHBLZXkFBW5ld1hQCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlrZXlQb2ludHMJAGQCCQELdmFsdWVPckVsc2UCCQCfCAEFCWtleVBvaW50cwAACQCRAwIFCWx2bFBvaW50cwABBQNuaWwFBW5ld1hQARZ1cGRhdGVBY2NTdGF0c0ludGVybmFsAgRhZGRyB2RlbHRhWFADCQEBIQEFD0tTQUxMT1dYUExFVkVMUwkAlAoCBQNuaWwAAAQGbHZsS2V5CQEMa2V5VXNlckxldmVsAQUEYWRkcgQFeHBLZXkJAQlrZXlVc2VyWFABBQRhZGRyBAJ4cAkBC3ZhbHVlT3JFbHNlAgkAmggCBQ9zdGFraW5nQ29udHJhY3QFBXhwS2V5AAAEBW5ld1hQCQBkAgUCeHAFB2RlbHRhWFAECWx2bFBvaW50cwkBB2xldmVsVXACCQELdmFsdWVPckVsc2UCCQCaCAIFD3N0YWtpbmdDb250cmFjdAUGbHZsS2V5AAAFBW5ld1hQBAlrZXlQb2ludHMJARFrZXlVc2VyRnJlZVBvaW50cwEFBGFkZHIJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUGbHZsS2V5CQCRAwIFCWx2bFBvaW50cwAACQDMCAIJAQxJbnRlZ2VyRW50cnkCBQV4cEtleQUFbmV3WFAJAMwIAgkBDEludGVnZXJFbnRyeQIFCWtleVBvaW50cwkAZAIJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJa2V5UG9pbnRzAAAJAJEDAgUJbHZsUG9pbnRzAAEFA25pbAUFbmV3WFABEmFjdGl2YXRlT25ib2FyZEFydAEEYWRkcgQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkBAhyZWZCeUtleQkBD2tleUFkZHJlc3NSZWZCeQEFBGFkZHIEBXJlZkJ5CQCiCAEFCHJlZkJ5S2V5AwkBASEBCQEJaXNEZWZpbmVkAQUFcmVmQnkJAAIBAilZb3UgYXJlIG5vdCBlbGlnaWJsZSBmb3IgT05CT0FSRCBhcnRpZmFjdAQGYXJ0S2V5CQEca2V5T25ib2FyZEFydER1Y2tBY3RpdmF0ZWRCeQEFBGFkZHIEB2FydER1Y2sJAKIIAQUGYXJ0S2V5AwkBCWlzRGVmaW5lZAEFB2FydER1Y2sJAAIBCQCsAgICL1lvdSBhbHJlYWR5IHVzZWQgeW91ciBPTkJPQVJEIGFydGlmYWN0IG9uIGR1Y2sgCQEFdmFsdWUBBQdhcnREdWNrBBBkdWNrQWN0aXZhdG9yS2V5CQEca2V5T25ib2FyZEFydEFjdGl2YXRlZE9uRHVjawEFC2R1Y2tBc3NldElkBA1kdWNrQWN0aXZhdG9yCQCiCAEFEGR1Y2tBY3RpdmF0b3JLZXkDCQEJaXNEZWZpbmVkAQUNZHVja0FjdGl2YXRvcgkAAgEJAKwCAgkArAICCQCsAgICCVRoZSBkdWNrIAULZHVja0Fzc2V0SWQCNCBhbHJlYWR5IGdvdCBwb2ludHMgZnJvbSBPTkJPQVJEIGFydGlmYWN0IGZyb20gdXNlciAJAQV2YWx1ZQEFDWR1Y2tBY3RpdmF0b3IJAM4IAgkAzAgCCQELU3RyaW5nRW50cnkCBQZhcnRLZXkFC2R1Y2tBc3NldElkCQDMCAIJAQtTdHJpbmdFbnRyeQIFEGR1Y2tBY3RpdmF0b3JLZXkFBGFkZHIFA25pbAgJARd1cGRhdGVEdWNrU3RhdHNJbnRlcm5hbAIFC2R1Y2tBc3NldElkBQl4cE9uYm9hcmQCXzEBEmFjdGl2YXRlUHJlc2FsZUFydAIEYWRkcg1sYW5kQXNzZXRJZEluBAFjCQEUY2hlY2tDbGFpbUNvbmRpdGlvbnMDBQRhZGRyBRNjbGFpbU1vZGVXaFRoZW5EdWNrBQ1sYW5kQXNzZXRJZEluBAtsYW5kQXNzZXRJZAgFAWMCXzIEBnBpZWNlcwkBD251bVBpZWNlc0J5U2l6ZQEJAJEDAggFAWMCXzMFC3JlY0xhbmRTaXplBA1hY3RpdmF0aW9uS2V5CQEga2V5TGFuZEFydFN0YXR1c0J5VHlwZUFuZEFzc2V0SWQCBQpBUlRQUkVTQUxFBQtsYW5kQXNzZXRJZAMJAGYCCQELdmFsdWVPckVsc2UCCQCfCAEFDWFjdGl2YXRpb25LZXkAAAAACQACAQIlUHJlc2FsZSBhcnRpZmFjdCBpcyBhbHJlYWR5IGFjdGl2YXRlZAMJAGYCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAggFAWMCXzMFCnJlY0xhbmROdW0FD1BSRVNBTEVOVU1MQU5EUwkAAgEJAKwCAgkArAICCQCsAgIFCkxBTkRQUkVGSVgCASAFC2xhbmRBc3NldElkAiUgaXMgbm90IGVsaWdpYmxlIGZvciBwcmVzYWxlIGFydGlmYWN0BAtjbGFpbVJlc3VsdAkBCGNsYWltQWxsBAUEYWRkcgULbGFuZEFzc2V0SWQFBnBpZWNlcwUTY2xhaW1Nb2RlV2hUaGVuRHVjawkAzQgCCQDNCAIJAM0IAgkAzQgCCAULY2xhaW1SZXN1bHQCXzEJAQxJbnRlZ2VyRW50cnkCBQ1hY3RpdmF0aW9uS2V5BQZwaWVjZXMJAQxJbnRlZ2VyRW50cnkCCQEla2V5TGFuZEFydFN0YXR1c0J5VHlwZUFzc2V0SWRBbmRPd25lcgMFCkFSVFBSRVNBTEUFC2xhbmRBc3NldElkBQRhZGRyBQZwaWVjZXMJAQtTdHJpbmdFbnRyeQIIBQtjbGFpbVJlc3VsdAJfMgkAuQkCCAULY2xhaW1SZXN1bHQCXzMCAToJAQtTdHJpbmdFbnRyeQIIBQtjbGFpbVJlc3VsdAJfNAkAuQkCCAULY2xhaW1SZXN1bHQCXzUCAToBDW1lcmdlSW50ZXJuYWwHC25ld0xhbmRTaXplCG5ld0xldmVsB2Zvcm11bGEEYWRkcgxsYW5kQXNzZXRJZHMEdHhJZAduZWVkTWF0BAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFBGFkZHICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQKAQpjaGVja01lcmdlAgNhY2MLbGFuZEFzc2V0SWQEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQULbGFuZEFzc2V0SWQEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQULbGFuZEFzc2V0SWQECXNhdmVkVGltZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCfCAEFB3RpbWVLZXkJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQEBW93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFC2xhbmRBc3NldElkCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDCBpcyBvcnBoYW5lZAMJAQIhPQIFBW93bmVyBQRhZGRyCQACAQkArAICBQpMQU5EUFJFRklYAg0gaXMgbm90IHlvdXJzBAFkCQC1CQIIBQVhc3NldAtkZXNjcmlwdGlvbgIBXwQJY29udGluZW50CQCRAwIFAWQFDHJlY0NvbnRpbmVudAMDCQECIT0CCAUDYWNjAl8zAgAJAQIhPQIIBQNhY2MCXzMFCWNvbnRpbmVudAcJAAIBAi5MYW5kcyBzaG91bGQgYmUgb24gdGhlIHNhbWUgY29udGluZW50IHRvIG1lcmdlBAhsYW5kU2l6ZQkAkQMCBQFkBQtyZWNMYW5kU2l6ZQQHc2l6ZXNJbggFA2FjYwJfMQQBaQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCzCQIFB3NpemVzSW4FCGxhbmRTaXplAidZb3UgaGF2ZW4ndCBwYXNzZWQgYWxsIHRoZSBsYW5kcyBuZWVkZWQECHNpemVzT3V0CQCsAgIJAK8CAgUHc2l6ZXNJbgUBaQkAsAICBQdzaXplc0luCQBkAgUBaQABBAZwaWVjZXMJAQ9udW1QaWVjZXNCeVNpemUBBQhsYW5kU2l6ZQQEYXJ0cwkAZAIIBQNhY2MCXzIJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBIGtleUxhbmRBcnRTdGF0dXNCeVR5cGVBbmRBc3NldElkAgUKQVJUUFJFU0FMRQULbGFuZEFzc2V0SWQAAAQKaW5mcmFMZXZlbAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEFC2xhbmRBc3NldElkAAAECHJlcUxldmVsBAckbWF0Y2gwBQhsYW5kU2l6ZQMJAAACAgFTBQckbWF0Y2gwAAMDCQAAAgIBTQUHJG1hdGNoMAAEAwkAAAICAUwFByRtYXRjaDAABQMJAAACAgJYTAUHJG1hdGNoMAAGCQACAQIaT25seSBTLCBNLCBMLCBYTCBjYW4gbWVyZ2UDCQECIT0CBQppbmZyYUxldmVsBQhyZXFMZXZlbAkAAgECIkFsbCBsYW5kcyBzaG91bGQgYmUgbWF4ZWQgdG8gbWVyZ2UEB2xhbmROdW0JAJEDAgUBZAUKcmVjTGFuZE51bQQNdGVycmFpbkNvdW50cwkBDWNvdW50VGVycmFpbnMBCQCRAwIFAWQFC3JlY1RlcnJhaW5zBAlkZWx0YVRpbWUJAGUCCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUJc2F2ZWRUaW1lAwkAZgIAAAUJZGVsdGFUaW1lCQACAQkArAICCQCsAgIJAKwCAgImU2F2ZWQgdGltZXN0YW1wIGlzIGluIGZ1dHVyZSwgc2F2ZWQgPSAJAKQDAQUJc2F2ZWRUaW1lAgwsIGN1cnJlbnQgPSAJAKQDAQgFCWxhc3RCbG9jawl0aW1lc3RhbXAEFmRhaWx5UHJvZHVjdGlvbkJ5UGllY2UJAQxhcHBseUJvbnVzZXMCBQtsYW5kQXNzZXRJZAUGcGllY2VzBAlsYW5kSW5kZXgJAGkCBQZwaWVjZXMFBVNTSVpFBAVicFJlcwkBBmFkZFJlcwUJALUJAggFA2FjYwJfNAIBXwUNdGVycmFpbkNvdW50cwUJZGVsdGFUaW1lBQlsYW5kSW5kZXgFFmRhaWx5UHJvZHVjdGlvbkJ5UGllY2UEBXByb3BzCQEZdXBkYXRlUHJvcG9ydGlvbnNJbnRlcm5hbAQIBQNhY2MCXzYFDXRlcnJhaW5Db3VudHMFCWxhbmRJbmRleAD///////////8BBAtzdW1UZXJyYWlucwkBGXVwZGF0ZVByb3BvcnRpb25zSW50ZXJuYWwECAUDYWNjAl85BQ10ZXJyYWluQ291bnRzBQlsYW5kSW5kZXgAAQQFbGFuZHMIBQNhY2MCXzcEA2lkeAkAzwgCBQVsYW5kcwULbGFuZEFzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBBQNpZHgJAAIBCQCsAgICIFlvdXIgc3Rha2VkIGxhbmRzIGRvbid0IGNvbnRhaW4gBQtsYW5kQXNzZXRJZAQJY3VzdG9tS2V5CQEaa2V5TGFuZEFzc2V0SWRUb0N1c3RvbU5hbWUBBQtsYW5kQXNzZXRJZAQKY3VzdG9tTmFtZQkBC3ZhbHVlT3JFbHNlAgkAoggBBQljdXN0b21LZXkCAAkAmwoJBQhzaXplc091dAUEYXJ0cwUJY29udGluZW50BQVicFJlcwkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCAUDYWNjAl81CQELRGVsZXRlRW50cnkBCQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkCQELRGVsZXRlRW50cnkBCQEia2V5U3Rha2VkVGltZUJ5VHlwZUFzc2V0SWRBbmRPd25lcgMFCkxBTkRQUkVGSVgFC2xhbmRBc3NldElkBQRhZGRyCQELRGVsZXRlRW50cnkBCQEQa2V5TGFuZFRvQXNzZXRJZAEFB2xhbmROdW0JAQtEZWxldGVFbnRyeQEJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQtsYW5kQXNzZXRJZAkBC0RlbGV0ZUVudHJ5AQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAkBC0RlbGV0ZUVudHJ5AQkBHmtleUluZnJhTGV2ZWxCeUFzc2V0SWRBbmRPd25lcgIFC2xhbmRBc3NldElkBQRhZGRyCQELRGVsZXRlRW50cnkBCQEga2V5TGFuZEFydFN0YXR1c0J5VHlwZUFuZEFzc2V0SWQCBQpBUlRQUkVTQUxFBQtsYW5kQXNzZXRJZAkBC0RlbGV0ZUVudHJ5AQkBJWtleUxhbmRBcnRTdGF0dXNCeVR5cGVBc3NldElkQW5kT3duZXIDBQpBUlRQUkVTQUxFBQtsYW5kQXNzZXRJZAUEYWRkcgkBC0RlbGV0ZUVudHJ5AQkBEWtleUxhbmROdW1Ub093bmVyAQUHbGFuZE51bQkBC0RlbGV0ZUVudHJ5AQkBEmtleVdhcmVob3VzZUJ5TGFuZAEFC2xhbmRBc3NldElkCQELRGVsZXRlRW50cnkBBQljdXN0b21LZXkJAQtEZWxldGVFbnRyeQEJARprZXlMYW5kQ3VzdG9tTmFtZVRvQXNzZXRJZAEFCmN1c3RvbU5hbWUJAQRCdXJuAgkA2QQBBQtsYW5kQXNzZXRJZAABBQVwcm9wcwkA0QgCBQVsYW5kcwkBBXZhbHVlAQUDaWR4CQBkAggFA2FjYwJfOAUGcGllY2VzBQtzdW1UZXJyYWlucwQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkECHByb3BMaXN0CQC1CQIJAQt2YWx1ZU9yRWxzZQIJAKIIAQkBEWtleVJlc1Byb3BvcnRpb25zAAILMF8wXzBfMF8wXzACAV8ECGxhbmRzS2V5CQEVa2V5U3Rha2VkTGFuZHNCeU93bmVyAQUEYWRkcgQIbGFuZHNTdHIJAKIIAQUIbGFuZHNLZXkEB2xhbmRzSW4DCQEJaXNEZWZpbmVkAQUIbGFuZHNTdHIJAL0JAgkBBXZhbHVlAQUIbGFuZHNTdHICAV8FA25pbAQBcgoAAiRsBQxsYW5kQXNzZXRJZHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCbCgkFB2Zvcm11bGEAAAIACQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwUDbmlsBQhwcm9wTGlzdAUHbGFuZHNJbgAACQC1CQICCzBfMF8wXzBfMF8wAgFfCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQpjaGVja01lcmdlAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA1CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQQJY29udGluZW50CAUBcgJfMwQMY29udGluZW50SWR4CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAM8IAgUKY29udGluZW50cwUJY29udGluZW50CQCsAgICE1Vua25vd24gY29udGluZW50OiAFCWNvbnRpbmVudAQIdGVycmFpbnMJARNnZW5UZXJyYWluc0Zvck1lcmdlAggFAXICXzkJAGkCCQEPbnVtUGllY2VzQnlTaXplAQULbmV3TGFuZFNpemUFBVNTSVpFBAdmcmVlTnVtCQELdmFsdWVPckVsc2UCCQCfCAEJARJrZXlOZXh0RnJlZUxhbmROdW0ACQBkAgUPUFJFU0FMRU5VTUxBTkRTAAEECm5ld0xhbmROdW0JAKQDAQUHZnJlZU51bQQFaXNzdWUJAMIIBQkBB25mdE5hbWUCBQpuZXdMYW5kTnVtBQtuZXdMYW5kU2l6ZQkAuQkCCQDMCAIFCm5ld0xhbmROdW0JAMwIAgULbmV3TGFuZFNpemUJAMwIAgUIdGVycmFpbnMJAMwIAgUJY29udGluZW50BQNuaWwCAV8AAQAABwQHYXNzZXRJZAkAuAgBBQVpc3N1ZQQObmV3TGFuZEFzc2V0SWQJANgEAQUHYXNzZXRJZAQGbmV3TWF0CQC5CQIJARFzdWJ0cmFjdE1hdGVyaWFscwMJAGYCBQduZWVkTWF0AAAJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQCAV8FB25lZWRNYXQCAV8ECXBpZWNlc0tleQkBFmtleVN0YWtlZFBpZWNlc0J5T3duZXIBBQRhZGRyBAxzdGFrZWRQaWVjZXMJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJcGllY2VzS2V5AAAJAJQKAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAggFAXICXzUDCQBmAgkAkAMBCAUBcgJfNwAACQELU3RyaW5nRW50cnkCBQhsYW5kc0tleQkAuwkCCAUBcgJfNwIBXwkBC0RlbGV0ZUVudHJ5AQUIbGFuZHNLZXkJAQxJbnRlZ2VyRW50cnkCBQlwaWVjZXNLZXkDCQBmAggFAXICXzgFDHN0YWtlZFBpZWNlcwAACQBlAgUMc3Rha2VkUGllY2VzCAUBcgJfOAkBDEludGVnZXJFbnRyeQIJARJrZXlOZXh0RnJlZUxhbmROdW0ACQBkAgUHZnJlZU51bQABBQVpc3N1ZQkBC1N0cmluZ0VudHJ5AgkBEGtleUxhbmRUb0Fzc2V0SWQBBQpuZXdMYW5kTnVtBQ5uZXdMYW5kQXNzZXRJZAkBC1N0cmluZ0VudHJ5AgkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFDm5ld0xhbmRBc3NldElkBQRhZGRyCQELU3RyaW5nRW50cnkCCQERa2V5TGFuZE51bVRvT3duZXIBBQpuZXdMYW5kTnVtBQRhZGRyCQEMSW50ZWdlckVudHJ5AgkBIGtleUxhbmRBcnRTdGF0dXNCeVR5cGVBbmRBc3NldElkAgUKQVJUUFJFU0FMRQUObmV3TGFuZEFzc2V0SWQIBQFyAl8yCQEMSW50ZWdlckVudHJ5AgkBJWtleUxhbmRBcnRTdGF0dXNCeVR5cGVBc3NldElkQW5kT3duZXIDBQpBUlRQUkVTQUxFBQ5uZXdMYW5kQXNzZXRJZAUEYWRkcggFAXICXzIJAQxJbnRlZ2VyRW50cnkCCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEFDm5ld0xhbmRBc3NldElkBQhuZXdMZXZlbAkBDEludGVnZXJFbnRyeQIJAR5rZXlJbmZyYUxldmVsQnlBc3NldElkQW5kT3duZXICBQ5uZXdMYW5kQXNzZXRJZAUEYWRkcgUIbmV3TGV2ZWwJAQtTdHJpbmdFbnRyeQIFBWJwS2V5CQC5CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCAUBcgJfNAkAzAgCBQZuZXdNYXQJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kBQNuaWwCAToJAQtTdHJpbmdFbnRyeQIJARFrZXlSZXNQcm9wb3J0aW9ucwAJALkJAggFAXICXzYCAV8JAQtTdHJpbmdFbnRyeQIJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAkAuQkCCQDMCAIFCWNvbnRpbmVudAkAzAgCAgFMCQDMCAIFDm5ld0xhbmRBc3NldElkBQNuaWwCAV8JAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEFBGFkZHIAAQUHYXNzZXRJZAUObmV3TGFuZEFzc2V0SWQBA3MybQMEYWRkcgxsYW5kQXNzZXRJZHMEdHhJZAkBDW1lcmdlSW50ZXJuYWwHAgFNAAMCBFNTU1MFBGFkZHIFDGxhbmRBc3NldElkcwUEdHhJZAAAAQNtMmwFBGFkZHIMbGFuZEFzc2V0SWRzBHR4SWQMc2hvdWxkVXNlTWF0DXBheW1lbnRBbW91bnQEBGNvc3QJAGgCBRVJbmZyYVVwZ3JhZGVDb3N0U1VzZHQABAMDCQEBIQEFDHNob3VsZFVzZU1hdAkBAiE9AgUNcGF5bWVudEFtb3VudAUEY29zdAcJAAIBCQCsAgICG1BheW1lbnQgYXR0YWNoZWQgc2hvdWxkIGJlIAkApAMBBQRjb3N0CQENbWVyZ2VJbnRlcm5hbAcCAUwABAIDU01NBQRhZGRyBQxsYW5kQXNzZXRJZHMFBHR4SWQJAGgCBRFJbmZyYVVwZ3JhZGVDb3N0UwAEAQRsMnhsBQRhZGRyDGxhbmRBc3NldElkcwR0eElkDHNob3VsZFVzZU1hdA1wYXltZW50QW1vdW50BARjb3N0CQBoAgUVSW5mcmFVcGdyYWRlQ29zdFNVc2R0AC8DAwkBASEBBQxzaG91bGRVc2VNYXQJAQIhPQIFDXBheW1lbnRBbW91bnQFBGNvc3QHCQACAQkArAICAhtQYXltZW50IGF0dGFjaGVkIHNob3VsZCBiZSAJAKQDAQUEY29zdAkBDW1lcmdlSW50ZXJuYWwHAgJYTAAFAgVTU1NNTAUEYWRkcgUMbGFuZEFzc2V0SWRzBQR0eElkCQBoAgURSW5mcmFVcGdyYWRlQ29zdFMALwEGeGwyeHhsBQRhZGRyDGxhbmRBc3NldElkcwR0eElkDHNob3VsZFVzZU1hdA1wYXltZW50QW1vdW50BARjb3N0CQBoAgUVSW5mcmFVcGdyYWRlQ29zdFNVc2R0ADYDAwkBASEBBQxzaG91bGRVc2VNYXQJAQIhPQIFDXBheW1lbnRBbW91bnQFBGNvc3QHCQACAQkArAICAhtQYXltZW50IGF0dGFjaGVkIHNob3VsZCBiZSAJAKQDAQUEY29zdAkBDW1lcmdlSW50ZXJuYWwHAgNYWEwABgIDTFhMBQRhZGRyBQxsYW5kQXNzZXRJZHMFBHR4SWQJAGgCBRFJbmZyYVVwZ3JhZGVDb3N0UwA2AQttZXJnZUNvbW1vbgUMc2hvdWxkVXNlTWF0BGFkZHINcGF5bWVudEFtb3VudAxsYW5kQXNzZXRJZHMEdHhJZAQLbWVyZ2VSZXN1bHQEByRtYXRjaDAJAJADAQUMbGFuZEFzc2V0SWRzAwkAAAIABAUHJG1hdGNoMAkBA3MybQMFBGFkZHIFDGxhbmRBc3NldElkcwUEdHhJZAMJAAACAAMFByRtYXRjaDAJAQNtMmwFBQRhZGRyBQxsYW5kQXNzZXRJZHMFBHR4SWQFDHNob3VsZFVzZU1hdAUNcGF5bWVudEFtb3VudAMJAAACAAUFByRtYXRjaDAJAQRsMnhsBQUEYWRkcgUMbGFuZEFzc2V0SWRzBQR0eElkBQxzaG91bGRVc2VNYXQFDXBheW1lbnRBbW91bnQDCQAAAgACBQckbWF0Y2gwCQEGeGwyeHhsBQUEYWRkcgUMbGFuZEFzc2V0SWRzBQR0eElkBQxzaG91bGRVc2VNYXQFDXBheW1lbnRBbW91bnQJAAIBAg1Vbmtub3duIG1lcmdlBQttZXJnZVJlc3VsdAEGcHJvbG9nAQFpAwMJAQIhPQIIBQFpDG9yaWdpbkNhbGxlcgUMcmVzdENvbnRyYWN0CQELdmFsdWVPckVsc2UCCQCgCAEJAQprZXlCbG9ja2VkAAcHCQACAQIfQ29udHJhY3RzIGFyZSB1bmRlciBtYWludGVuYW5jZQkBC1N0cmluZ0VudHJ5AgkBEWtleUxhc3RUeElkQnlVc2VyAQkApQgBCAUBaQxvcmlnaW5DYWxsZXIJANgEAQgFAWkNdHJhbnNhY3Rpb25JZCMBaQENY29uc3RydWN0b3JWMQEIcmVzdEFkZHIDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAhFQZXJtaXNzaW9uIGRlbmllZAkAzAgCCQELU3RyaW5nRW50cnkCCQEOa2V5UmVzdEFkZHJlc3MABQhyZXN0QWRkcgUDbmlsAWkBCnNldEJsb2NrZWQBCWlzQmxvY2tlZAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECEXBlcm1pc3Npb24gZGVuaWVkCQDMCAIJAQxCb29sZWFuRW50cnkCCQEKa2V5QmxvY2tlZAAFCWlzQmxvY2tlZAUDbmlsAWkBCXN0YWtlTGFuZAAEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhxFeGFjdGx5IG9uZSBwYXltZW50IHJlcXVpcmVkBANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAQHYXNzZXRJZAkBBXZhbHVlAQgFA3BtdAdhc3NldElkBAdhZGRyZXNzCQClCAEIBQFpBmNhbGxlcgMJAQIhPQIIBQNwbXQGYW1vdW50AAEJAAIBCQCsAgIJAKwCAgIETkZUIAUKTEFORFBSRUZJWAIkIHRva2VuIHNob3VsZCBiZSBhdHRhY2hlZCBhcyBwYXltZW50BAVhc3NldAkBBXZhbHVlAQkA7AcBBQdhc3NldElkAwkBAiE9AggFBWFzc2V0Bmlzc3VlcgUEdGhpcwkAAgECF1Vua25vd24gaXNzdWVyIG9mIHRva2VuAwkBASEBCQEIY29udGFpbnMCCAUFYXNzZXQEbmFtZQUKTEFORFBSRUZJWAkAAgEJAKwCAgkArAICAglPbmx5IE5GVCAFCkxBTkRQUkVGSVgCFCB0b2tlbnMgYXJlIGFjY2VwdGVkBAtsYW5kTnVtU2l6ZQkAsAICCAUFYXNzZXQEbmFtZQAEBAdsYW5kTnVtAwkBCGNvbnRhaW5zAgULbGFuZE51bVNpemUCA1hYTAkAswICBQtsYW5kTnVtU2l6ZQADAwkBCGNvbnRhaW5zAgULbGFuZE51bVNpemUCAlhMCQCzAgIFC2xhbmROdW1TaXplAAIJALMCAgULbGFuZE51bVNpemUAAQMJAQEhAQkBCWlzRGVmaW5lZAEJALYJAQUHbGFuZE51bQkAAgEJAKwCAgIeQ2Fubm90IHBhcnNlIGxhbmQgbnVtYmVyIGZyb20gCAUFYXNzZXQEbmFtZQQLbGFuZEFzc2V0SWQJANgEAQUHYXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAMJAQlpc0RlZmluZWQBCQCfCAEFB3RpbWVLZXkJAAIBCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCEiBpcyBhbHJlYWR5IHN0YWtlZAQBZAkAtQkCCAUFYXNzZXQLZGVzY3JpcHRpb24CAV8EDXRlcnJhaW5Db3VudHMJAQ1jb3VudFRlcnJhaW5zAQkAkQMCBQFkBQtyZWNUZXJyYWlucwQGcGllY2VzCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCBQFkBQtyZWNMYW5kU2l6ZQQFcHJvcHMJARF1cGRhdGVQcm9wb3J0aW9ucwMFDXRlcnJhaW5Db3VudHMJAGkCBQZwaWVjZXMFBVNTSVpFAAEECWFydFBpZWNlcwkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEga2V5TGFuZEFydFN0YXR1c0J5VHlwZUFuZEFzc2V0SWQCBQpBUlRQUkVTQUxFBQtsYW5kQXNzZXRJZAAABAhsYW5kc0tleQkBFWtleVN0YWtlZExhbmRzQnlPd25lcgEFB2FkZHJlc3MECGxhbmRzU3RyCQCiCAEFCGxhbmRzS2V5BAVsYW5kcwMJAQlpc0RlZmluZWQBBQhsYW5kc1N0cgkAvQkCCQEFdmFsdWUBBQhsYW5kc1N0cgIBXwUDbmlsAwkBD2NvbnRhaW5zRWxlbWVudAIFBWxhbmRzBQtsYW5kQXNzZXRJZAkAAgEJAKwCAgIiWW91ciBzdGFrZWQgbGFuZHMgYWxyZWFkeSBjb250YWluIAULbGFuZEFzc2V0SWQECmluZnJhTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAAABAlwaWVjZXNLZXkJARZrZXlTdGFrZWRQaWVjZXNCeU93bmVyAQUHYWRkcmVzcwQJb2xkUGllY2VzCQELdmFsdWVPckVsc2UCCQCfCAEFCXBpZWNlc0tleQAABAl3bGdSZXN1bHQJAQVhc0ludAEJAPwHBAULd2xnQ29udHJhY3QCEm9uU3Rha2VVbnN0YWtlTGFuZAkAzAgCBQdhZGRyZXNzBQNuaWwFA25pbAkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQd0aW1lS2V5CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDBQpMQU5EUFJFRklYBQtsYW5kQXNzZXRJZAUHYWRkcmVzcwgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAMwIAgkBC1N0cmluZ0VudHJ5AgUIbGFuZHNLZXkJALsJAgkAzQgCBQVsYW5kcwULbGFuZEFzc2V0SWQCAV8JAMwIAgkBDEludGVnZXJFbnRyeQIFCXBpZWNlc0tleQkAZAIFCW9sZFBpZWNlcwUGcGllY2VzCQDMCAIJAQtTdHJpbmdFbnRyeQIJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQtsYW5kQXNzZXRJZAUHYWRkcmVzcwkAzAgCCQELU3RyaW5nRW50cnkCCQERa2V5TGFuZE51bVRvT3duZXIBBQdsYW5kTnVtBQdhZGRyZXNzCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEla2V5TGFuZEFydFN0YXR1c0J5VHlwZUFzc2V0SWRBbmRPd25lcgMFCkFSVFBSRVNBTEUFC2xhbmRBc3NldElkBQdhZGRyZXNzBQlhcnRQaWVjZXMJAMwIAgkBDEludGVnZXJFbnRyeQIJAR5rZXlJbmZyYUxldmVsQnlBc3NldElkQW5kT3duZXICBQtsYW5kQXNzZXRJZAUHYWRkcmVzcwUKaW5mcmFMZXZlbAkAzAgCCQELU3RyaW5nRW50cnkCCQERa2V5UmVzUHJvcG9ydGlvbnMABQVwcm9wcwkAzAgCBQxwcm9sb2dBY3Rpb24FA25pbAUJd2xnUmVzdWx0AWkBC3Vuc3Rha2VMYW5kAQ1sYW5kQXNzZXRJZEluBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBGFkZHIJAKUIAQgFAWkGY2FsbGVyBAFjCQEUY2hlY2tDbGFpbUNvbmRpdGlvbnMDBQRhZGRyBQ1jbGFpbU1vZGVEdWNrBQ1sYW5kQXNzZXRJZEluBAtsYW5kQXNzZXRJZAgFAWMCXzIECGxhbmRzS2V5CQEVa2V5U3Rha2VkTGFuZHNCeU93bmVyAQUEYWRkcgQNdGVycmFpbkNvdW50cwkBDWNvdW50VGVycmFpbnMBCQCRAwIIBQFjAl8zBQtyZWNUZXJyYWlucwQGcGllY2VzCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCCAUBYwJfMwULcmVjTGFuZFNpemUEBXByb3BzCQERdXBkYXRlUHJvcG9ydGlvbnMDBQ10ZXJyYWluQ291bnRzCQBpAgUGcGllY2VzBQVTU0laRQD///////////8BBAtjbGFpbVJlc3VsdAkBCGNsYWltQWxsBAUEYWRkcgULbGFuZEFzc2V0SWQFBnBpZWNlcwUNY2xhaW1Nb2RlRHVjawQFbGFuZHMJAL0JAgkBC3ZhbHVlT3JFbHNlAgkAoggBBQhsYW5kc0tleQIAAgFfBANpZHgJAM8IAgUFbGFuZHMFC2xhbmRBc3NldElkAwkBASEBCQEJaXNEZWZpbmVkAQUDaWR4CQACAQkArAICAiBZb3VyIHN0YWtlZCBsYW5kcyBkb24ndCBjb250YWluIAULbGFuZEFzc2V0SWQEA25vdwgFCWxhc3RCbG9jawl0aW1lc3RhbXAEDmdvdlJlbGVhc2VUaW1lCQELdmFsdWVPckVsc2UCCQCaCAIFC2dvdkNvbnRyYWN0CQEVa2V5VXNlckd3bFJlbGVhc2VUaW1lAQUEYWRkcgAAAwkAZwIFDmdvdlJlbGVhc2VUaW1lBQNub3cJAAIBCQCsAgICOVlvdXIgZ1dMIGFyZSB0YWtpbmcgcGFydCBpbiB2b3RpbmcsIGNhbm5vdCB1bnN0YWtlIHVudGlsIAkApAMBBQ5nb3ZSZWxlYXNlVGltZQQOYXJiUmVsZWFzZVRpbWUJAGQCCQELdmFsdWVPckVsc2UCCQCaCAIFC3dsZ0NvbnRyYWN0CQEUa2V5TGFzdEFyYlRpbWVCeVVzZXIBBQRhZGRyAAAFDmFyYml0cmFnZURlbGF5AwkAZgIFDmFyYlJlbGVhc2VUaW1lBQNub3cJAAIBCQCsAgICP1lvdXIgc3Rha2VkIGxhbmRzIHRvb2sgcGFydCBpbiBhcmJpdHJhZ2UsIGNhbm5vdCB1bnN0YWtlIHVudGlsIAkApAMBBQ5hcmJSZWxlYXNlVGltZQQJcGllY2VzS2V5CQEWa2V5U3Rha2VkUGllY2VzQnlPd25lcgEFBGFkZHIEDHN0YWtlZFBpZWNlcwkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlwaWVjZXNLZXkAAAQJbmV3UGllY2VzAwkAZgIFBnBpZWNlcwUMc3Rha2VkUGllY2VzAAAJAGUCBQxzdGFrZWRQaWVjZXMFBnBpZWNlcwQJd2xnUmVzdWx0CQEFYXNJbnQBCQD8BwQFC3dsZ0NvbnRyYWN0AhJvblN0YWtlVW5zdGFrZUxhbmQJAMwIAgUEYWRkcgUDbmlsBQNuaWwJAJQKAgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIAAQkA2QQBBQtsYW5kQXNzZXRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkCQDMCAIJAQtEZWxldGVFbnRyeQEJASJrZXlTdGFrZWRUaW1lQnlUeXBlQXNzZXRJZEFuZE93bmVyAwUKTEFORFBSRUZJWAULbGFuZEFzc2V0SWQFBGFkZHIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEWtleVJlc1Byb3BvcnRpb25zAAUFcHJvcHMJAMwIAgkBC1N0cmluZ0VudHJ5AggFC2NsYWltUmVzdWx0Al8yCQC5CQIIBQtjbGFpbVJlc3VsdAJfMwIBOgkAzAgCAwkAZgIJAJADAQUFbGFuZHMAAQkBC1N0cmluZ0VudHJ5AgUIbGFuZHNLZXkJALsJAgkA0QgCBQVsYW5kcwkBBXZhbHVlAQUDaWR4AgFfCQELRGVsZXRlRW50cnkBBQhsYW5kc0tleQkAzAgCCQEMSW50ZWdlckVudHJ5AgUJcGllY2VzS2V5BQluZXdQaWVjZXMJAMwIAgUMcHJvbG9nQWN0aW9uBQNuaWwFCXdsZ1Jlc3VsdAFpAQlzdGFrZUR1Y2sABAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIcRXhhY3RseSBvbmUgcGF5bWVudCByZXF1aXJlZAQDcG10CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAAEB2Fzc2V0SWQJAQV2YWx1ZQEIBQNwbXQHYXNzZXRJZAQHYWRkcmVzcwkApQgBCAUBaQZjYWxsZXIDCQECIT0CCAUDcG10BmFtb3VudAABCQACAQkArAICCQCsAgICBE5GVCAFCkRVQ0tQUkVGSVgCJCB0b2tlbiBzaG91bGQgYmUgYXR0YWNoZWQgYXMgcGF5bWVudAQFYXNzZXQJAQV2YWx1ZQEJAOwHAQUHYXNzZXRJZAMDCQECIT0CCAUFYXNzZXQGaXNzdWVyBQ1pbmN1YmF0b3JBZGRyCQECIT0CCAUFYXNzZXQGaXNzdWVyBQticmVlZGVyQWRkcgcJAAIBCQCsAgIJAKwCAgISVW5rbm93biBpc3N1ZXIgb2YgBQpEVUNLUFJFRklYAgYgdG9rZW4DCQEBIQEJAQhjb250YWlucwIIBQVhc3NldARuYW1lBQpEVUNLUFJFRklYCQACAQkArAICCQCsAgICCU9ubHkgTkZUIAUKRFVDS1BSRUZJWAIUIHRva2VucyBhcmUgYWNjZXB0ZWQECmFzc2V0SWRTdHIJANgEAQUHYXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQphc3NldElkU3RyAwkBCWlzRGVmaW5lZAEJAJ8IAQUHdGltZUtleQkAAgEJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQISIGlzIGFscmVhZHkgc3Rha2VkAwkBCWlzRGVmaW5lZAEJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUHYWRkcmVzcwkAAgEJAKwCAgIdWW91IGFscmVhZHkgc3Rha2VkIG9uZSBkdWNrOiAIBQVhc3NldARuYW1lBAZsb2NLZXkJAQ9rZXlEdWNrTG9jYXRpb24BBQphc3NldElkU3RyBAhsb2NhdGlvbgkAoggBBQZsb2NLZXkEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBBQphc3NldElkU3RyBAhiYWNrcGFjawkAoggBBQVicEtleQQJa2V5SGVhbHRoCQENa2V5RHVja0hlYWx0aAEFCmFzc2V0SWRTdHIEBW1heEhQCQEJbWF4SGVhbHRoAQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEMa2V5RHVja0xldmVsAQUKYXNzZXRJZFN0cgAABAljdXJIZWFsdGgJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJa2V5SGVhbHRoBQVtYXhIUAkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQd0aW1lS2V5CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDBQpEVUNLUFJFRklYCQDYBAEFB2Fzc2V0SWQFB2FkZHJlc3MIBQlsYXN0QmxvY2sJdGltZXN0YW1wCQDMCAIJAQtTdHJpbmdFbnRyeQIJARBrZXlEdWNrSWRUb093bmVyAQUKYXNzZXRJZFN0cgUHYWRkcmVzcwkAzAgCCQELU3RyaW5nRW50cnkCCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQdhZGRyZXNzBQphc3NldElkU3RyBQNuaWwDCQEJaXNEZWZpbmVkAQUIbG9jYXRpb24FA25pbAkAzggCCQDMCAIJAQtTdHJpbmdFbnRyeQIFBmxvY0tleQUPREVGQVVMVExPQ0FUSU9OBQNuaWwDCQEJaXNEZWZpbmVkAQUIYmFja3BhY2sFA25pbAkAzQgCCQDNCAIJAMwIAgkBC1N0cmluZ0VudHJ5AgUFYnBLZXkCGjA6MF8wXzBfMF8wXzA6MF8wXzBfMF8wXzA6BQNuaWwJAQxJbnRlZ2VyRW50cnkCBQlrZXlIZWFsdGgFCWN1ckhlYWx0aAUMcHJvbG9nQWN0aW9uAWkBC3Vuc3Rha2VEdWNrAQphc3NldElkU3RyBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEB2Fzc2V0SWQJANkEAQUKYXNzZXRJZFN0cgQHYWRkcmVzcwkApQgBCAUBaQZjYWxsZXIEBWFzc2V0CQEFdmFsdWUBCQDsBwEFB2Fzc2V0SWQEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQkA2AQBBQdhc3NldElkAwkBASEBCQEJaXNEZWZpbmVkAQkAnwgBBQd0aW1lS2V5CQACAQkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAMJAQEhAQkBCWlzRGVmaW5lZAEJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUHYWRkcmVzcwkAAgEJAKwCAgkArAICAglUaGUgZHVjayAIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAQFb3duZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEQa2V5RHVja0lkVG9Pd25lcgEJANgEAQUHYXNzZXRJZAkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDCQECIT0CBQVvd25lcgUHYWRkcmVzcwkAAgECF1N0YWtlZCBORlQgaXMgbm90IHlvdXJzBAlrZXlIZWFsdGgJAQ1rZXlEdWNrSGVhbHRoAQUKYXNzZXRJZFN0cgQFbWF4SFAJAQltYXhIZWFsdGgBCQELdmFsdWVPckVsc2UCCQCfCAEJAQxrZXlEdWNrTGV2ZWwBBQphc3NldElkU3RyAAAEBmhlYWx0aAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlrZXlIZWFsdGgFBW1heEhQAwkAZgIFBW1heEhQBQZoZWFsdGgJAAIBCQCsAgIJAKwCAgIZUGxlYXNlIGhlYWwgeW91ciBkdWNrIHRvIAkApAMBBQVtYXhIUAITaHAgYmVmb3JlIHVuc3Rha2luZwkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIAAQUHYXNzZXRJZAkAzAgCCQELRGVsZXRlRW50cnkBBQd0aW1lS2V5CQDMCAIJAQtEZWxldGVFbnRyeQEFCWtleUhlYWx0aAkAzAgCCQELRGVsZXRlRW50cnkBCQEPa2V5RHVja0xvY2F0aW9uAQUKYXNzZXRJZFN0cgkAzAgCCQELRGVsZXRlRW50cnkBCQEQa2V5RHVja0lkVG9Pd25lcgEFCmFzc2V0SWRTdHIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDBQpEVUNLUFJFRklYBQphc3NldElkU3RyBQdhZGRyZXNzCQDMCAIJAQtEZWxldGVFbnRyeQEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFB2FkZHJlc3MJAMwIAgUMcHJvbG9nQWN0aW9uBQNuaWwBaQEIY2xhaW1SZXMCBmFtb3VudA5sYW5kQXNzZXRJZFN0cgQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBARhZGRyCQClCAEIBQFpDG9yaWdpbkNhbGxlcgQGcmVzdWx0CQEQY2xhaW1SZXNJbnRlcm5hbAQFBGFkZHIFBmFtb3VudAUNY2xhaW1Nb2RlRHVjawUObGFuZEFzc2V0SWRTdHIEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAkAlAoCCQDNCAIJAM0IAgkAzQgCCQDOCAIIBQZyZXN1bHQCXzEICQEXdXBkYXRlRHVja1N0YXRzSW50ZXJuYWwCBQtkdWNrQXNzZXRJZAkAawMFB3hwQ2xhaW0FBmFtb3VudAUFTVVMVDgCXzEJAQtTdHJpbmdFbnRyeQIIBQZyZXN1bHQCXzIJALkJAggFBnJlc3VsdAJfMwIBOgkBC1N0cmluZ0VudHJ5AggFBnJlc3VsdAJfNAkAuQkCCAUGcmVzdWx0Al81AgE6BQxwcm9sb2dBY3Rpb24JAJEDAggFBnJlc3VsdAJfMwUIYnBJZHhSZXMBaQEMY2xhaW1SZXNUb1dIAgZhbW91bnQObGFuZEFzc2V0SWRTdHIEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQEYWRkcgkApQgBCAUBaQxvcmlnaW5DYWxsZXIEBnJlc3VsdAkBEGNsYWltUmVzSW50ZXJuYWwEBQRhZGRyBQZhbW91bnQFC2NsYWltTW9kZVdoBQ5sYW5kQXNzZXRJZFN0cgkAlAoCCQDNCAIJAM0IAgkAzQgCCQDOCAIIBQZyZXN1bHQCXzEICQEWdXBkYXRlQWNjU3RhdHNJbnRlcm5hbAIFBGFkZHIJAGsDBQd4cENsYWltBQZhbW91bnQFBU1VTFQ4Al8xCQELU3RyaW5nRW50cnkCCAUGcmVzdWx0Al8yCQC5CQIIBQZyZXN1bHQCXzMCAToJAQtTdHJpbmdFbnRyeQIIBQZyZXN1bHQCXzQJALkJAggFBnJlc3VsdAJfNQIBOgUMcHJvbG9nQWN0aW9uCQCRAwIIBQZyZXN1bHQCXzUFCHdoSWR4UmVzAWkBBmZsaWdodAIHbWVzc2FnZQNzaWcEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQIdXNlckFkZHIJAKUIAQgFAWkGY2FsbGVyBAFmCQEMZmxpZ2h0Q29tbW9uAwUIdXNlckFkZHIFB21lc3NhZ2UFA3NpZwQLZHVja0Fzc2V0SWQIBQFmAl8yBAZsb2NLZXkJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAQLY3VyTG9jYXRpb24JAQt2YWx1ZU9yRWxzZQIJAKIIAQUGbG9jS2V5BQ9ERUZBVUxUTE9DQVRJT04DCQAAAggFAWYCXzQFC2N1ckxvY2F0aW9uCQACAQIiWW91IGNhbid0IGZseSB0byB0aGUgc2FtZSBsb2NhdGlvbgQFZXFLZXkJARBrZXlEdWNrRXF1aXBtZW50AQULZHVja0Fzc2V0SWQECWN1cnJlbnRFcQkBC3ZhbHVlT3JFbHNlAgkAoggBBQVlcUtleQIXLDssXyw7LF8sOyxfLDssXyw7LF8sOywEBW5ld0VxCQERc3VidHJhY3RFcXVpcG1lbnQCBQljdXJyZW50RXEIBQFmAl81CQCUCgIJAM4IAgkAzAgCCQELU3RyaW5nRW50cnkCBQZsb2NLZXkDCQBmAggFAWYCXzEAAAgFAWYCXzQFC2N1ckxvY2F0aW9uCQDMCAIJAQtTdHJpbmdFbnRyeQIFBWVxS2V5BQVuZXdFcQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDWtleUR1Y2tIZWFsdGgBBQtkdWNrQXNzZXRJZAgFAWYCXzEJAMwIAgUMcHJvbG9nQWN0aW9uBQNuaWwICQEXdXBkYXRlRHVja1N0YXRzSW50ZXJuYWwCBQtkdWNrQXNzZXRJZAMJAGYCCAUBZgJfMQAABQ94cFN1Y2Nlc3NGbGlnaHQFDHhwRmFpbEZsaWdodAJfMQgFAWYCXzMBaQEEaGVhbAMKcXVhbnRpdHlMMQpxdWFudGl0eUwyCnF1YW50aXR5TDMEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDAwMJAGYCAAAFCnF1YW50aXR5TDEGCQBmAgAABQpxdWFudGl0eUwyBgkAZgIAAAUKcXVhbnRpdHlMMwkAAgECG1F1YW50aXR5IGNhbm5vdCBiZSBuZWdhdGl2ZQQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBCQClCAEIBQFpBmNhbGxlcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQDcXRzCQDMCAIFCnF1YW50aXR5TDEJAMwIAgUKcXVhbnRpdHlMMgkAzAgCBQpxdWFudGl0eUwzBQNuaWwECWtleUhlYWx0aAkBDWtleUR1Y2tIZWFsdGgBBQtkdWNrQXNzZXRJZAQFbWF4SFAJAQltYXhIZWFsdGgBCQELdmFsdWVPckVsc2UCCQCfCAEJAQxrZXlEdWNrTGV2ZWwBBQtkdWNrQXNzZXRJZAAABAlvbGRIZWFsdGgJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJa2V5SGVhbHRoBQVtYXhIUAMJAGcCBQlvbGRIZWFsdGgFBW1heEhQCQACAQkArAICCQCsAgICD0hQIHNob3VsZCBiZSA8IAkApAMBBQVtYXhIUAIIIHRvIGhlYWwEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BAhwcm9kTGlzdAMJAAACCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QCAAUDbmlsCQC1CQIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAIBXwoBC2l0ZXJhdGVQcm9kAgNhY2MLaWdub3JlZEl0ZW0EAW4IBQNhY2MCXzIEAXgDCQBmAgkAkAMBBQhwcm9kTGlzdAUBbgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCHByb2RMaXN0BQFuAAADCQBmAgADBQFuBAFxCQCRAwIFA3F0cwUBbgMJAGYCBQFxBQF4CQACAQkArAICCQCsAgIJAKwCAgIOWW91IGhhdmUgb25seSAJAKQDAQUBeAIEIG9mIAkAkQMCBQlwcm9kVHlwZXMFAW4JAJUKAwkAzQgCCAUDYWNjAl8xCQCkAwEJAGUCBQF4BQFxCQBkAgUBbgABCQBkAggFA2FjYwJfMwkAaAIJAJEDAgUIbWVkS2l0SHAFAW4FAXEJAJUKAwkAzQgCCAUDYWNjAl8xCQCkAwEFAXgJAGQCBQFuAAEIBQNhY2MCXzMEBnJlc3VsdAoAAiRsBRBwcm9kdWN0aW9uTWF0cml4CgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlQoDBQNuaWwAAAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQtpdGVyYXRlUHJvZAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgNTAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUABUAFgAXABgAGQAaABsAHAAdAB4AHwAgACEAIgAjACQAJQAmACcAKAApACoAKwAsAC0ALgAvADAAMQAyBAluZXdIZWFsdGgJAJcDAQkAzAgCBQVtYXhIUAkAzAgCCQBkAgUJb2xkSGVhbHRoCAUGcmVzdWx0Al8zBQNuaWwJAJQKAgkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlrZXlIZWFsdGgFCW5ld0hlYWx0aAkAzAgCCQELU3RyaW5nRW50cnkCBQVicEtleQkAugkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQJAMwIAgkAuQkCCAUGcmVzdWx0Al8xAgFfBQNuaWwCAToJAMwIAgUMcHJvbG9nQWN0aW9uBQNuaWwICQEXdXBkYXRlRHVja1N0YXRzSW50ZXJuYWwCBQtkdWNrQXNzZXRJZAkAaAIFBnhwSGVhbAkAZAIJAGQCBQpxdWFudGl0eUwxBQpxdWFudGl0eUwyBQpxdWFudGl0eUwzAl8xBQluZXdIZWFsdGgBaQEGaGVhbEVTAAQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECHEV4YWN0bHkgb25lIHBheW1lbnQgcmVxdWlyZWQEA3BtdAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAAAwkBAiE9AggFA3BtdAdhc3NldElkBQt1c2R0QXNzZXRJZAkAAgECGkFsbG93ZWQgVVNEVCBwYXltZW50IG9ubHkhBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkBAlrZXlIZWFsdGgJAQ1rZXlEdWNrSGVhbHRoAQULZHVja0Fzc2V0SWQEBW1heEhQCQEJbWF4SGVhbHRoAQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEMa2V5RHVja0xldmVsAQULZHVja0Fzc2V0SWQAAAQJb2xkSGVhbHRoCQELdmFsdWVPckVsc2UCCQCfCAEFCWtleUhlYWx0aAUFbWF4SFADCQBmAgUJb2xkSGVhbHRoAAAJAAIBAihIUCBzaG91bGQgYmUgMCB0byBjYWxsIEVtZXJnZW5jeSBTZXJ2aWNlBAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQIcHJvZExpc3QDCQAAAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kAgAFA25pbAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QCAV8EDW1lZEtpdEFtb3VudDEDCQBmAgkAkAMBBQhwcm9kTGlzdAAACQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUIcHJvZExpc3QAAAAABA1tZWRLaXRBbW91bnQyAwkAZgIJAJADAQUIcHJvZExpc3QAAQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCHByb2RMaXN0AAEAAAQNbWVkS2l0QW1vdW50MwMJAGYCCQCQAwEFCHByb2RMaXN0AAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQhwcm9kTGlzdAACAAADAwMJAGYCBQ1tZWRLaXRBbW91bnQxAAAGCQBmAgUNbWVkS2l0QW1vdW50MgAABgkAZgIFDW1lZEtpdEFtb3VudDMAAAkAAgECH1lvdSBoYXZlIHRvIHVzZSBvd24gTWVkaWNhbCBLaXQECGV4aXN0U3RyCQCdCAIFD2Vjb25vbXlDb250cmFjdAkBDmtleUVzV2FyZWhvdXNlAAQMZXhpc3RBbW91bnRzAwkBCWlzRGVmaW5lZAEFCGV4aXN0U3RyCQC1CQIJAQV2YWx1ZQEFCGV4aXN0U3RyAgFfBQNuaWwEC2V4aXN0QW1vdW50AwkAZgIJAJADAQUMZXhpc3RBbW91bnRzAAAJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQxleGlzdEFtb3VudHMAAAAAAwkAZwIAAAULZXhpc3RBbW91bnQJAAIBAjlUaGVyZSBhcmUgbm8gTWVkaWNhbCBLaXRzIEwxIGF0IEVtZXJnZW5jeSBTZXJ2aWNlIHN0b3JhZ2UECW5ld0hlYWx0aAkAZAIFCW9sZEhlYWx0aAkAkQMCBQhtZWRLaXRIcAAABAVuZXdFUwkAuQkCCQDMCAIJAKQDAQkAZQIFC2V4aXN0QW1vdW50AAEJANEIAgUMZXhpc3RBbW91bnRzAAACAV8EBnJlY2lwZQkAtQkCCQCRAwIFEHByb2R1Y3Rpb25NYXRyaXgAAAIBXwQIdG90YWxNYXQJARJnZXRSZWNpcGVNYXRlcmlhbHMBBQZyZWNpcGUECXNlbGxQcmljZQkAawMJAGgCBQh0b3RhbE1hdAUKRVNTRUxMQ09FRgUQUkVTT1VSQ0VQUklDRU1JTgkAaAIFBU1VTFQ4BQ5QUk9EVUNUUEtHU0laRQMJAQIhPQIIBQNwbXQGYW1vdW50BQlzZWxsUHJpY2UJAAIBCQCsAgICG1BheW1lbnQgYXR0YWNoZWQgc2hvdWxkIGJlIAkApAMBBQlzZWxsUHJpY2UEBnJlc3VsdAkBCGFzU3RyaW5nAQkA/AcEBQ9lY29ub215Q29udHJhY3QCD3VwZGF0ZUVzU3RvcmFnZQkAzAgCBQVuZXdFUwUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQt1c2R0QXNzZXRJZAUJc2VsbFByaWNlBQNuaWwJAJQKAgkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlrZXlIZWFsdGgFCW5ld0hlYWx0aAkAzAgCBQxwcm9sb2dBY3Rpb24FA25pbAgJARd1cGRhdGVEdWNrU3RhdHNJbnRlcm5hbAIFC2R1Y2tBc3NldElkBQh4cENhbGxFUwJfMQUGcmVzdWx0AWkBDnVwZGF0ZUJhY2twYWNrAgtkdWNrQXNzZXRJZAduZXdQYWNrAwkBAiE9AggFAWkGY2FsbGVyBQ9lY29ub215Q29udHJhY3QJAAIBAhFwZXJtaXNzaW9uIGRlbmllZAkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBQduZXdQYWNrBQNuaWwFB25ld1BhY2sBaQEJY29tbWl0Rm9yAQJvcAQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQQLZmluaXNoQmxvY2sJAGQCBQZoZWlnaHQFC3JhbmRvbURlbGF5BARhZGRyCQClCAEIBQFpBmNhbGxlcgkAlAoCCQDNCAIJAMwIAgkBDEludGVnZXJFbnRyeQIJAQlrZXlDb21taXQBBQRhZGRyBQtmaW5pc2hCbG9jawkAzAgCCQEMSW50ZWdlckVudHJ5AgkBC2tleUNvbW1pdE9wAQUEYWRkcgUCb3AFA25pbAUMcHJvbG9nQWN0aW9uBQtmaW5pc2hCbG9jawFpAQhidXlTTGFuZAAEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhxFeGFjdGx5IG9uZSBwYXltZW50IHJlcXVpcmVkBANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAMJAQIhPQIIBQNwbXQHYXNzZXRJZAULdXNkdEFzc2V0SWQJAAIBAhpBbGxvd2VkIFVTRFQgcGF5bWVudCBvbmx5IQMJAQIhPQIIBQNwbXQGYW1vdW50BQdFWFBVU0RUCQACAQkArAICAhtQYXltZW50IGF0dGFjaGVkIHNob3VsZCBiZSAJAKQDAQUHRVhQVVNEVAQGcmVzdWx0CQESZXhwZWRpdGlvbkludGVybmFsAggFAWkGY2FsbGVyCAUBaQ10cmFuc2FjdGlvbklkCQCUCgIJAM0IAgkAzggCCQDNCAIIBQZyZXN1bHQCXzEJAQ5TY3JpcHRUcmFuc2ZlcgMFD2Vjb25vbXlDb250cmFjdAgFA3BtdAZhbW91bnQFC3VzZHRBc3NldElkCAkBFnVwZGF0ZUFjY1N0YXRzSW50ZXJuYWwCCQClCAEIBQFpBmNhbGxlcgUKeHBOZXdTTGFuZAJfMQUMcHJvbG9nQWN0aW9uCAgFBnJlc3VsdAJfMgJfMQFpAQpleHBlZGl0aW9uAgdtZXNzYWdlA3NpZwQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBAZyZXN1bHQJARBleHBlZGl0aW9uQ29tbW9uBAgFAWkGY2FsbGVyCAUBaQ10cmFuc2FjdGlvbklkBQdtZXNzYWdlBQNzaWcEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQkApQgBCAUBaQZjYWxsZXICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQJAJQKAgkAzQgCCQDOCAIIBQZyZXN1bHQCXzEICQEXdXBkYXRlRHVja1N0YXRzSW50ZXJuYWwCBQtkdWNrQXNzZXRJZAUKeHBOZXdTTGFuZAJfMQUMcHJvbG9nQWN0aW9uCQCUCgIIBQZyZXN1bHQCXzIIBQZyZXN1bHQCXzMBaQEMdXBncmFkZUluZnJhAQtsYW5kQXNzZXRJZAQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBAZyZXN1bHQJAQ11cEluZnJhQ29tbW9uBAYIBQFpBmNhbGxlcgAABQtsYW5kQXNzZXRJZAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBCQClCAEIBQFpBmNhbGxlcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAkAlAoCCQDOCAIJAM0IAggFBnJlc3VsdAJfMQUMcHJvbG9nQWN0aW9uCAkBF3VwZGF0ZUR1Y2tTdGF0c0ludGVybmFsAgULZHVja0Fzc2V0SWQJAGsDBQ54cFVwZ3JhZGVJbmZyYQgFBnJlc3VsdAJfMwUFTVVMVDgCXzEIBQZyZXN1bHQCXzIBaQEQdXBncmFkZUluZnJhVXNkdAELbGFuZEFzc2V0SWQDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAhFQZXJtaXNzaW9uIGRlbmllZAQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECHEV4YWN0bHkgb25lIHBheW1lbnQgcmVxdWlyZWQEA3BtdAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAAAwkBAiE9AggFA3BtdAdhc3NldElkBQt1c2R0QXNzZXRJZAkAAgECGkFsbG93ZWQgVVNEVCBwYXltZW50IG9ubHkhBAZyZXN1bHQJAQ11cEluZnJhQ29tbW9uBAcIBQFpBmNhbGxlcggFA3BtdAZhbW91bnQFC2xhbmRBc3NldElkCQCUCgIJAM0IAgkAzQgCCAUGcmVzdWx0Al8xCQEOU2NyaXB0VHJhbnNmZXIDBQ9lY29ub215Q29udHJhY3QIBQNwbXQGYW1vdW50BQt1c2R0QXNzZXRJZAUMcHJvbG9nQWN0aW9uCAUGcmVzdWx0Al8yAWkBEGFjdGl2YXRlQXJ0aWZhY3QCB2FydE5hbWUObGFuZEFzc2V0SWRPcHQEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQEYWRkcgkApQgBCAUBaQZjYWxsZXIEBnJlc3VsdAQHJG1hdGNoMAUHYXJ0TmFtZQMJAAACAgdQUkVTQUxFBQckbWF0Y2gwCQESYWN0aXZhdGVQcmVzYWxlQXJ0AgUEYWRkcgUObGFuZEFzc2V0SWRPcHQDCQAAAgIHT05CT0FSRAUHJG1hdGNoMAkBEmFjdGl2YXRlT25ib2FyZEFydAEFBGFkZHIJAAIBAhBVbmtub3duIGFydGlmYWN0CQDNCAIFBnJlc3VsdAUMcHJvbG9nQWN0aW9uAWkBCm1lcmdlTGFuZHMBDGxhbmRBc3NldElkcwQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBAZyZXN1bHQJAQttZXJnZUNvbW1vbgUGCQClCAEIBQFpBmNhbGxlcgAABQxsYW5kQXNzZXRJZHMIBQFpDXRyYW5zYWN0aW9uSWQJAJQKAgkAzggCCQDNCAIIBQZyZXN1bHQCXzEFDHByb2xvZ0FjdGlvbggJARZ1cGRhdGVBY2NTdGF0c0ludGVybmFsAgkApQgBCAUBaQZjYWxsZXIFB3hwTWVyZ2UCXzEIBQZyZXN1bHQCXzIBaQEObWVyZ2VMYW5kc1VzZHQBDGxhbmRBc3NldElkcwQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECHEV4YWN0bHkgb25lIHBheW1lbnQgcmVxdWlyZWQEA3BtdAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAAAwkBAiE9AggFA3BtdAdhc3NldElkBQt1c2R0QXNzZXRJZAkAAgECGkFsbG93ZWQgVVNEVCBwYXltZW50IG9ubHkhBAZyZXN1bHQJAQttZXJnZUNvbW1vbgUHCQClCAEIBQFpBmNhbGxlcggFA3BtdAZhbW91bnQFDGxhbmRBc3NldElkcwgFAWkNdHJhbnNhY3Rpb25JZAkAlAoCCQDNCAIJAM0IAggFBnJlc3VsdAJfMQkBDlNjcmlwdFRyYW5zZmVyAwUPZWNvbm9teUNvbnRyYWN0CAUDcG10BmFtb3VudAULdXNkdEFzc2V0SWQFDHByb2xvZ0FjdGlvbggFBnJlc3VsdAJfMgFpAQ1jYXJnb0V4Y2hhbmdlAgxjYXJnb0xpc3RTdHILbGFuZEFzc2V0SWQEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQKY2FyZ29QYXJ0cwkAvAkCBQxjYXJnb0xpc3RTdHICAToEBGFkZHIJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFC2xhbmRBc3NldElkBAd0aW1lS2V5CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkAwkBASEBCQEJaXNEZWZpbmVkAQkAnwgBBQd0aW1lS2V5CQACAQkArAICCAUFYXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQEBW93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFC2xhbmRBc3NldElkCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDCBpcyBvcnBoYW5lZAMJAQIhPQIFBW93bmVyBQRhZGRyCQACAQkArAICBQpMQU5EUFJFRklYAg0gaXMgbm90IHlvdXJzBAlsYW5kSW5kZXgJAGkCCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCCQC1CQIIBQVhc3NldAtkZXNjcmlwdGlvbgIBXwULcmVjTGFuZFNpemUFBVNTSVpFBAppbmZyYUxldmVsCQELdmFsdWVPckVsc2UCCQCfCAEJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQULbGFuZEFzc2V0SWQAAAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkBAtjdXJMb2NhdGlvbgkBC3ZhbHVlT3JFbHNlAgkAoggBCQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQFD0RFRkFVTFRMT0NBVElPTgQDbG9jCQC1CQIJAQV2YWx1ZQEFC2N1ckxvY2F0aW9uAgFfAwkBAiE9AgkAkQMCBQNsb2MFCmxvY0lkeFR5cGUCAUwJAAIBCQCsAgIJAKwCAgIWRHVjayBsb2NhdGlvbiB0eXBlIGlzIAkAkQMCBQNsb2MFCmxvY0lkeFR5cGUCESwgYnV0IHNob3VsZCBiZSBMAwkBAiE9AgkAkQMCBQNsb2MFCGxvY0lkeElkBQtsYW5kQXNzZXRJZAkAAgEJAKwCAgIbRHVjayBzaG91bGQgYmUgb24gdGhlIGxhbmQgBQtsYW5kQXNzZXRJZAQFd2hLZXkJARJrZXlXYXJlaG91c2VCeUxhbmQBBQtsYW5kQXNzZXRJZAQJY3VycmVudFdoCQEMZ2V0V2FyZWhvdXNlAwUFd2hLZXkFCWxhbmRJbmRleAUKaW5mcmFMZXZlbAQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkEBnJlc3VsdAkBCW1vdmVTdHVmZgMFCmNhcmdvUGFydHMFCWN1cnJlbnRXaAULY3VycmVudFBhY2sEBGxvZnQJALUJAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4TE9GVAIBXwQFbG9mdE8JAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAULdm9sT2NjdXBpZWQIBQZyZXN1bHQCXzcEBWxvZnRGCQBlAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFB3ZvbEZyZWUIBQZyZXN1bHQCXzcJAMwIAgkBC1N0cmluZ0VudHJ5AgUFYnBLZXkJALoJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIIBQZyZXN1bHQCXzQJAMwIAggFBnJlc3VsdAJfNQkAzAgCCAUGcmVzdWx0Al82BQNuaWwCAToJAMwIAgkBC1N0cmluZ0VudHJ5AgUFd2hLZXkJALoJAgkAzAgCCQCRAwIFCWN1cnJlbnRXaAULd2hJZHhMZXZlbHMJAMwIAggFBnJlc3VsdAJfMQkAzAgCCAUGcmVzdWx0Al8yCQDMCAIIBQZyZXN1bHQCXzMJAMwIAgkAuQkCCQDMCAIJAJEDAgUEbG9mdAUJdm9sTG9ja2VkCQDMCAIJAKQDAQUFbG9mdE8JAMwIAgkApAMBBQVsb2Z0RgkAzAgCCQCRAwIFBGxvZnQFCHZvbFRvdGFsBQNuaWwCAV8FA25pbAIBOgkAzAgCBQxwcm9sb2dBY3Rpb24FA25pbAFpAQ1zYXZlV2FyZWhvdXNlAgV3aFN0cgtsYW5kQXNzZXRJZAMJAQIhPQIIBQFpBmNhbGxlcgUPZWNvbm9teUNvbnRyYWN0CQACAQINQWNjZXNzIGRlbmllZAQFd2hLZXkJARJrZXlXYXJlaG91c2VCeUxhbmQBBQtsYW5kQXNzZXRJZAQCd2gJALwJAgUFd2hTdHICAToDCQECIT0CCQCQAwEFAndoAAUJAAIBAjB3YXJlaG91c2Ugc3RyaW5nIHNob3VsZCBjb250YWluIDQgJzonIHNlcGFyYXRvcnMEBWxvZnRMCQCRAwIJALUJAgkAkQMCBQJ3aAUJd2hJZHhMT0ZUAgFfBQl2b2xMb2NrZWQEBWxvZnRPCQEXZ2V0V2FyZWhvdXNlT2NjdXBpZWRWb2wBBQJ3aAQFbG9mdFQJARdnZXRXYXJlaG91c2VUb3RhbFZvbHVtZQEJAJEDAgUCd2gFC3doSWR4TGV2ZWxzBAVsb2Z0RgkAZQIJAGUCBQVsb2Z0VAkBDXBhcnNlSW50VmFsdWUBBQVsb2Z0TAUFbG9mdE8ECG5ld1doU3RyCQC6CQIJAMwIAgkAkQMCBQJ3aAULd2hJZHhMZXZlbHMJAMwIAgkAkQMCBQJ3aAUId2hJZHhSZXMJAMwIAgkAkQMCBQJ3aAUId2hJZHhNYXQJAMwIAgkAkQMCBQJ3aAUJd2hJZHhQcm9kCQDMCAIJALkJAgkAzAgCBQVsb2Z0TAkAzAgCCQCkAwEFBWxvZnRPCQDMCAIJAKQDAQUFbG9mdEYJAMwIAgkApAMBBQVsb2Z0VAUDbmlsAgFfBQNuaWwCAToJAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCBQV3aEtleQUIbmV3V2hTdHIFA25pbAUIbmV3V2hTdHIBaQESZml4V2FyZWhvdXNlRm9ybWF0AQtsYW5kQXNzZXRJZAMJAQIhPQIIBQFpBmNhbGxlcgUMcmVzdENvbnRyYWN0CQACAQINQWNjZXNzIGRlbmllZAQFd2hLZXkJARJrZXlXYXJlaG91c2VCeUxhbmQBBQtsYW5kQXNzZXRJZAQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQtsYW5kQXNzZXRJZAQJbGFuZEluZGV4CQBpAgkBD251bVBpZWNlc0J5U2l6ZQEJAJEDAgkAtQkCCAUFYXNzZXQLZGVzY3JpcHRpb24CAV8FC3JlY0xhbmRTaXplBQVTU0laRQQKaW5mcmFMZXZlbAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEFC2xhbmRBc3NldElkAAAEAndoCQEMZ2V0V2FyZWhvdXNlAwUFd2hLZXkFCWxhbmRJbmRleAUKaW5mcmFMZXZlbAQFbG9mdEwJAQVhc0ludAEJAPwHBAUPZWNvbm9teUNvbnRyYWN0AhpyZWNhbGNMb2NrZWRWb2x1bWVSRUFET05MWQkAzAgCBQtsYW5kQXNzZXRJZAkAzAgCBQJ3aAUDbmlsBQNuaWwEBWxvZnRPCQEXZ2V0V2FyZWhvdXNlT2NjdXBpZWRWb2wBBQJ3aAQFbG9mdFQJARdnZXRXYXJlaG91c2VUb3RhbFZvbHVtZQEJAJEDAgUCd2gFC3doSWR4TGV2ZWxzBAVsb2Z0RgkAZQIJAGUCBQVsb2Z0VAUFbG9mdEwFBWxvZnRPBAhuZXdXaFN0cgkAugkCCQDMCAIJAJEDAgUCd2gFC3doSWR4TGV2ZWxzCQDMCAIJAJEDAgUCd2gFCHdoSWR4UmVzCQDMCAIJAJEDAgUCd2gFCHdoSWR4TWF0CQDMCAIJAJEDAgUCd2gFCXdoSWR4UHJvZAkAzAgCCQC5CQIJAMwIAgkApAMBBQVsb2Z0TAkAzAgCCQCkAwEFBWxvZnRPCQDMCAIJAKQDAQUFbG9mdEYJAMwIAgkApAMBBQVsb2Z0VAUDbmlsAgFfBQNuaWwCAToJAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCBQV3aEtleQUIbmV3V2hTdHIFA25pbAUIbmV3V2hTdHIBaQEPZml4U3Rha2VkUGllY2VzAQdhZGRyZXNzAwkBAiE9AggFAWkGY2FsbGVyBQxyZXN0Q29udHJhY3QJAAIBAg1BY2Nlc3MgZGVu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IG9uZSBwYXltZW50IHJlcXVpcmVkBANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAMJAQIhPQIIBQNwbXQHYXNzZXRJZAULdXNkdEFzc2V0SWQJAAIBAhpBbGxvd2VkIFVTRFQgcGF5bWVudCBvbmx5IQMJAQIhPQIIBQNwbXQGYW1vdW50BQxSRU5BTUlOR0NPU1QJAAIBCQCsAgICElBheW1lbnQgc2hvdWxkIGJlIAkApAMBBQxSRU5BTUlOR0NPU1QDCQEIY29udGFpbnMCBQpjdXN0b21OYW1lAgJfXwkAAgEJAKwCAgIeTmFtZSBzaG91bGQgbm90IGNvbnRhaW4gJ19fJzogBQpjdXN0b21OYW1lAwkAZgIJALECAQUKY3VzdG9tTmFtZQUKTUFYTkFNRUxFTgkAAgEJAKwCAgIZTmFtZSB0b28gbG9uZywgbWF4TGVuZ3RoPQkApAMBBQpNQVhOQU1FTEVOBARhZGRyCQClCAEIBQFpDG9yaWdpbkNhbGxlcgQHYWN0aW9ucwQHJG1hdGNoMAUEdHlwZQMJAAACAgdBQ0NPVU5UBQckbWF0Y2gwBApyZXZlcnNlS2V5CQEWa2V5Q3VzdG9tTmFtZVRvQWRkcmVzcwEFCmN1c3RvbU5hbWUECW5hbWVPd25lcgkAoggBBQpyZXZlcnNlS2V5AwkBCWlzRGVmaW5lZAEFCW5hbWVPd25lcgkAAgEJAKwCAgIZTmFtZSBhbHJlYWR5IHJlZ2lzdGVyZWQ6IAUKY3VzdG9tTmFtZQQNYWRkclRvTmFtZUtleQkBFmtleUFkZHJlc3NUb0N1c3RvbU5hbWUBBQRhZGRyBAdvbGROYW1lCQCiCAEFDWFkZHJUb05hbWVLZXkEB2ZyZWVPbGQDCQEJaXNEZWZpbmVkAQUHb2xkTmFtZQkAzAgCCQELRGVsZXRlRW50cnkBCQEWa2V5Q3VzdG9tTmFtZVRvQWRkcmVzcwEJAQV2YWx1ZQEFB29sZE5hbWUFA25pbAUDbmlsCQDOCAIJAM0IAgkAzQgCBQdmcmVlT2xkCQELU3RyaW5nRW50cnkCBQ1hZGRyVG9OYW1lS2V5BQpjdXN0b21OYW1lCQELU3RyaW5nRW50cnkCBQpyZXZlcnNlS2V5BQRhZGRyCAkBFnVwZGF0ZUFjY1N0YXRzSW50ZXJuYWwCBQRhZGRyBQx4cEN1c3RvbU5hbWUCXzEDCQAAAgIETEFORAUHJG1hdGNoMAQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQdhc3NldElkBAd0aW1lS2V5CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFB2Fzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBCQCfCAEFB3RpbWVLZXkJAAIBCQCsAgIIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAQFb3duZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQUHYXNzZXRJZAkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDCQECIT0CBQVvd25lcgUEYWRkcgkAAgEJAKwCAgUKTEFORFBSRUZJWAINIGlzIG5vdCB5b3VycwQKcmV2ZXJzZUtleQkBGmtleUxhbmRDdXN0b21OYW1lVG9Bc3NldElkAQUKY3VzdG9tTmFtZQQJbmFtZU93bmVyCQCiCAEFCnJldmVyc2VLZXkDCQEJaXNEZWZpbmVkAQUJbmFtZU93bmVyCQACAQkArAICAhlOYW1lIGFscmVhZHkgcmVnaXN0ZXJlZDogBQpjdXN0b21OYW1lBA5hc3NldFRvTmFtZUtleQkBGmtleUxhbmRBc3NldElkVG9DdXN0b21OYW1lAQUHYXNzZXRJZAQHb2xkTmFtZQkAoggBBQ5hc3NldFRvTmFtZUtleQQHZnJlZU9sZAMJAQlpc0RlZmluZWQBBQdvbGROYW1lCQDMCAIJAQtEZWxldGVFbnRyeQEJARprZXlMYW5kQ3VzdG9tTmFtZVRvQXNzZXRJZAEJAQV2YWx1ZQEFB29sZE5hbWUFA25pbAUDbmlsCQDOCAIJAM0IAgkAzQgCBQdmcmVlT2xkCQELU3RyaW5nRW50cnkCBQ5hc3NldFRvTmFtZUtleQUKY3VzdG9tTmFtZQkBC1N0cmluZ0VudHJ5AgUKcmV2ZXJzZUtleQUHYXNzZXRJZAgJARZ1cGRhdGVBY2NTdGF0c0ludGVybmFsAgUEYWRkcgUMeHBDdXN0b21OYW1lAl8xAwkAAAICBERVQ0sFByRtYXRjaDAEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQUHYXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQdhc3NldElkAwMJAQEhAQkBCWlzRGVmaW5lZAEJAJ8IAQUHdGltZUtleQYJAQEhAQkBCWlzRGVmaW5lZAEJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgkAAgEJAKwCAggFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkBAVvd25lcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARBrZXlEdWNrSWRUb093bmVyAQUHYXNzZXRJZAkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDCQECIT0CBQVvd25lcgUEYWRkcgkAAgEJAKwCAgUKRFVDS1BSRUZJWAINIGlzIG5vdCB5b3VycwQKcmV2ZXJzZUtleQkBGmtleUR1Y2tDdXN0b21OYW1lVG9Bc3NldElkAQUKY3VzdG9tTmFtZQQJbmFtZU93bmVyCQCiCAEFCnJldmVyc2VLZXkDCQEJaXNEZWZpbmVkAQUJbmFtZU93bmVyCQACAQkArAICAhlOYW1lIGFscmVhZHkgcmVnaXN0ZXJlZDogBQpjdXN0b21OYW1lBA5hc3NldFRvTmFtZUtleQkBGmtleUR1Y2tBc3NldElkVG9DdXN0b21OYW1lAQUHYXNzZXRJZAQHb2xkTmFtZQkAoggBBQ5hc3NldFRvTmFtZUtleQQHZnJlZU9sZAMJAQlpc0RlZmluZWQBBQdvbGROYW1lCQDMCAIJAQtEZWxldGVFbnRyeQEJARprZXlEdWNrQ3VzdG9tTmFtZVRvQXNzZXRJZAEJAQV2YWx1ZQEFB29sZE5hbWUFA25pbAUDbmlsCQDOCAIJAM0IAgkAzQgCBQdmcmVlT2xkCQELU3RyaW5nRW50cnkCBQ5hc3NldFRvTmFtZUtleQUKY3VzdG9tTmFtZQkBC1N0cmluZ0VudHJ5AgUKcmV2ZXJzZUtleQUHYXNzZXRJZAgJARd1cGRhdGVEdWNrU3RhdHNJbnRlcm5hbAIFB2Fzc2V0SWQFDHhwQ3VzdG9tTmFtZQJfMQkAAgECE1Vua25vd24gZW50aXR5IHR5cGUJAJQKAgkAzQgCCQDNCAIFB2FjdGlvbnMJAQ5TY3JpcHRUcmFuc2ZlcgMFD2Vjb25vbXlDb250cmFjdAgFA3BtdAZhbW91bnQFC3VzZHRBc3NldElkBQxwcm9sb2dBY3Rpb24AAAFpAQxzZXRSZWZlcnJhbHMCCW9sZFBsYXllcgluZXdQbGF5ZXIDCQECIT0CCAUBaQ9jYWxsZXJQdWJsaWNLZXkFA3B1YgkAAgECEVBlcm1pc3Npb24gZGVuaWVkBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQDCQEBIQEJAQlpc0RlZmluZWQBCQCmCAEFCW9sZFBsYXllcgkAAgEJAKwCAgIRSW52YWxpZCBhZGRyZXNzOiAFCW9sZFBsYXllcgMJAQEhAQkBCWlzRGVmaW5lZAEJAKYIAQUJbmV3UGxheWVyCQACAQkArAICAhFJbnZhbGlkIGFkZHJlc3M6IAUJbmV3UGxheWVyBAdvbGRzS2V5CQEJa2V5T2xkaWVzAAQEb2xkcwkAoggBBQdvbGRzS2V5BAZvbGRpZXMDCQEJaXNEZWZpbmVkAQUEb2xkcwkAvAkCCQEFdmFsdWUBBQRvbGRzAgFfBQNuaWwDCQEPY29udGFpbnNFbGVtZW50AgUGb2xkaWVzBQluZXdQbGF5ZXIJAAIBCQCsAgIFCW5ld1BsYXllcgImIGlzIG5vdCBuZXdiaWUgKGFscmVhZHkgaGFzIHJlZmVycmFscykECHJlZkJ5S2V5CQEPa2V5QWRkcmVzc1JlZkJ5AQUJbmV3UGxheWVyBAVyZWZCeQkAoggBBQhyZWZCeUtleQMDCQEJaXNEZWZpbmVkAQUFcmVmQnkJAQlpc0RlZmluZWQBCQCmCAEJAQV2YWx1ZQEFBXJlZkJ5BwkAAgEJAKwCAgkArAICBQluZXdQbGF5ZXICFCBhbHJlYWR5IGhhcyByZWZCeTogCQEFdmFsdWUBBQVyZWZCeQQHcmVmc0tleQkBE2tleUFkZHJlc3NSZWZlcnJhbHMBBQlvbGRQbGF5ZXIEBHJlZnMJAKIIAQUHcmVmc0tleQQJcmVmc0FycmF5AwkBCWlzRGVmaW5lZAEFBHJlZnMJALwJAgkBBXZhbHVlAQUEcmVmcwIBXwUDbmlsAwkBD2NvbnRhaW5zRWxlbWVudAIFCXJlZnNBcnJheQUJbmV3UGxheWVyCQACAQkArAICCQCsAgIJAKwCAgUJb2xkUGxheWVyAhIgYWxyZWFkeSBjb250YWlucyAFCW5ld1BsYXllcgIRIHdpdGhpbiByZWZlcnJhbHMEB25ld1JlZnMJALoJAgkAzQgCBQlyZWZzQXJyYXkFCW5ld1BsYXllcgIBXwQHbmV3T2xkcwMJAQ9jb250YWluc0VsZW1lbnQCBQZvbGRpZXMFCW9sZFBsYXllcgkBBXZhbHVlAQUEb2xkcwkAugkCCQDNCAIFBm9sZGllcwUJb2xkUGxheWVyAgFfCQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgUIcmVmQnlLZXkFCW9sZFBsYXllcgkAzAgCCQELU3RyaW5nRW50cnkCBQdyZWZzS2V5BQduZXdSZWZzCQDMCAIJAQtTdHJpbmdFbnRyeQIFB29sZHNLZXkFB25ld09sZHMJAMwIAgUMcHJvbG9nQWN0aW9uBQNuaWwAAAFpARBkaXN0cmlidXRlUG9pbnRzBQhzdHJlbmd0aAhhY2N1cmFjeQlpbnRlbGxlY3QJZW5kdXJhbmNlCWRleHRlcml0eQQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBARhZGRyCQClCAEIBQFpDG9yaWdpbkNhbGxlcgQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkBApmcmVlS2V5QWNjCQERa2V5VXNlckZyZWVQb2ludHMBBQRhZGRyBA1mcmVlUG9pbnRzQWNjCQELdmFsdWVPckVsc2UCCQCaCAIFD3N0YWtpbmdDb250cmFjdAUKZnJlZUtleUFjYwAABAtmcmVlS2V5RHVjawkBEWtleUR1Y2tGcmVlUG9pbnRzAQULZHVja0Fzc2V0SWQEDmZyZWVQb2ludHNEdWNrCQELdmFsdWVPckVsc2UCCQCaCAIFD3N0YWtpbmdDb250cmFjdAULZnJlZUtleUR1Y2sAAAQHc3VtRnJlZQkAZAIFDWZyZWVQb2ludHNBY2MFDmZyZWVQb2ludHNEdWNrBA9zdW1Ub0Rpc3RyaWJ1dGUJAGQCCQBkAgkAZAIJAGQCBQhzdHJlbmd0aAUIYWNjdXJhY3kFCWludGVsbGVjdAUJZW5kdXJhbmNlBQlkZXh0ZXJpdHkDCQBmAgUPc3VtVG9EaXN0cmlidXRlBQdzdW1GcmVlCQACAQkArAICCQCsAgICD1RoZXJlIGFyZSBvbmx5IAkApAMBBQdzdW1GcmVlAhogZnJlZSBwb2ludHMgdG8gZGlzdHJpYnV0ZQQIY2hhcnNLZXkJAQxrZXlEdWNrQ2hhcnMBBQtkdWNrQXNzZXRJZAQFY2hhcnMJALUJAgkBC3ZhbHVlT3JFbHNlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QFCGNoYXJzS2V5AgkwXzBfMF8wXzACAV8EBm5ld0FjYwkAZQIFDWZyZWVQb2ludHNBY2MFD3N1bVRvRGlzdHJpYnV0ZQkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQpmcmVlS2V5QWNjAwkAZgIAAAUGbmV3QWNjAAAFBm5ld0FjYwkAzAgCCQEMSW50ZWdlckVudHJ5AgULZnJlZUtleUR1Y2sDCQBmAgAABQZuZXdBY2MJAGQCBQ5mcmVlUG9pbnRzRHVjawUGbmV3QWNjBQ5mcmVlUG9pbnRzRHVjawkAzAgCCQELU3RyaW5nRW50cnkCBQhjaGFyc0tleQkAuQkCCQDMCAIJAKQDAQkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVjaGFycwUMY2hhclN0cmVuZ3RoBQhzdHJlbmd0aAkAzAgCCQCkAwEJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFY2hhcnMFDGNoYXJBY2N1cmFjeQUIYWNjdXJhY3kJAMwIAgkApAMBCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBWNoYXJzBQ1jaGFySW50ZWxsZWN0BQlpbnRlbGxlY3QJAMwIAgkApAMBCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBWNoYXJzBQ1jaGFyRW5kdXJhbmNlBQllbmR1cmFuY2UJAMwIAgkApAMBCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBWNoYXJzBQ1jaGFyRGV4dGVyaXR5BQlkZXh0ZXJpdHkFA25pbAIBXwkAzAgCBQxwcm9sb2dBY3Rpb24FA25pbAAAAWkBHHNwbGl0QnlHbG9iYWxXZWlnaHRzUkVBRE9OTFkBBmFtb3VudAkAlAoCBQNuaWwJARJnZXROZWVkZWRNYXRlcmlhbHMBBQZhbW91bnQBaQEkc3BsaXRCeUdsb2JhbEFuZExvY2FsV2VpZ2h0c1JFQURPTkxZAwltYXRBbW91bnQJcmVzQW1vdW50CHRlcnJhaW5zBA10ZXJyYWluQ291bnRzCQENY291bnRUZXJyYWlucwEFCHRlcnJhaW5zCQCUCgIFA25pbAkAlAoCCQESZ2V0TmVlZGVkTWF0ZXJpYWxzAQUJbWF0QW1vdW50CQETZGlzdHJpYnV0ZUJ5V2VpZ2h0cwIFCXJlc0Ftb3VudAUNdGVycmFpbkNvdW50cwFpARNnZXRCYWNrcGFja1JFQURPTkxZAQtkdWNrQXNzZXRJZAkAlAoCBQNuaWwJALkJAgkBC2dldEJhY2twYWNrAQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQCAToBaQEUZ2V0V2FyZWhvdXNlUkVBRE9OTFkBC2xhbmRBc3NldElkBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFC2xhbmRBc3NldElkBAlsYW5kSW5kZXgJAGkCCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCCQC1CQIIBQVhc3NldAtkZXNjcmlwdGlvbgIBXwULcmVjTGFuZFNpemUFBVNTSVpFBAppbmZyYUxldmVsCQELdmFsdWVPckVsc2UCCQCfCAEJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQULbGFuZEFzc2V0SWQAAAkAlAoCBQNuaWwJALoJAgkBDGdldFdhcmVob3VzZQMJARJrZXlXYXJlaG91c2VCeUxhbmQBBQtsYW5kQXNzZXRJZAUJbGFuZEluZGV4BQppbmZyYUxldmVsAgE6AWkBCnNhdmVMYXN0VHgAAwMJAQIhPQIIBQFpBmNhbGxlcgULd2xnQ29udHJhY3QJAQIhPQIIBQFpBmNhbGxlcgUPZWNvbm9teUNvbnRyYWN0BwkAAgECDUFjY2VzcyBkZW5pZWQJAJQKAgkAzAgCCQEGcHJvbG9nAQUBaQUDbmlsACoBaQEPdXBkYXRlRHVja1N0YXRzAgtkdWNrQXNzZXRJZAdkZWx0YVhQAwkBAiE9AggFAWkGY2FsbGVyBQ9lY29ub215Q29udHJhY3QJAAIBAg1BY2Nlc3MgZGVuaWVkCQEXdXBkYXRlRHVja1N0YXRzSW50ZXJuYWwCBQtkdWNrQXNzZXRJZAUHZGVsdGFYUAFpAQ51cGRhdGVBY2NTdGF0cwIEYWRkcgdkZWx0YVhQAwkBAiE9AggFAWkGY2FsbGVyBQ9lY29ub215Q29udHJhY3QJAAIBAg1BY2Nlc3MgZGVuaWVkCQEWdXBkYXRlQWNjU3RhdHNJbnRlcm5hbAIFBGFkZHIFB2RlbHRhWFABaQEJZXF1aXBEdWNrAQllcXVpcG1lbnQEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQEYWRkcgkApQgBCAUBaQxvcmlnaW5DYWxsZXIEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQFZXFLZXkJARBrZXlEdWNrRXF1aXBtZW50AQULZHVja0Fzc2V0SWQEC2N1cnJlbnRTZWdzCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAKIIAQUFZXFLZXkCFyw7LF8sOyxfLDssXyw7LF8sOyxfLDssAgFfBAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQFbmV3RXEJALUJAgUJZXF1aXBtZW50AgFfAwkBAiE9AgkAkAMBBQVuZXdFcQULTlVNU0VHTUVOVFMJAAIBAhZXcm9uZyBlcXVpcG1lbnQgc3RyaW5nBARyZXFzCQEMZ2V0RHVja1N0YXRzAgUEdGhpcwULZHVja0Fzc2V0SWQECXRlbXBQcm9kQgkBBmRyZXNzQgQFC2N1cnJlbnRTZWdzCQEOcHJvZFN0clRvQnl0ZXMBCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QGBQRyZXFzBAhuZXdQcm9kQgkBBmRyZXNzQgQFBW5ld0VxBQl0ZW1wUHJvZEIHBQRyZXFzBApuZXdQcm9kU3RyCQEOYnl0ZXNUb1Byb2RTdHIBBQhuZXdQcm9kQgkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIFBWVxS2V5BQllcXVpcG1lbnQJAMwIAgkBC1N0cmluZ0VudHJ5AgUFYnBLZXkJALoJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0CQDMCAIFCm5ld1Byb2RTdHIFA25pbAIBOgkAzAgCBQxwcm9sb2dBY3Rpb24FA25pbAAAABvIPJA=", "height": 2692134, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 61rX2aXwZSWwHyZEfcsDU7BKk3wQP2Jk8WLFsZZZxhE Next: DbNW1Gwqexvme51AHzkXkxfQtXjUgkjwJMx7Lu21Mphd Diff:
OldNewDifferences
986986 }
987987
988988
989-let fh = ["A", "B", "C", "D", "E", "F"]
990-
991-func fi (fj,ew) = {
992- func fk (cX,cb) = {
989+let fh = [7, 2, 15, 19, 8, 24, 1, 21, 16, 5, 0, 22, 20, 23, 11, 4, 18, 12, 6, 10, 3, 17, 13, 9, 14]
990+
991+let fi = ["A", "B", "C", "D", "E", "F"]
992+
993+func fj (fk,ew) = {
994+ func fl (cX,cb) = {
993995 let dH = cX._2
994- let fl = parseIntValue(cb)
995- let eV = if ((fl == 0))
996+ let fm = parseIntValue(cb)
997+ let eV = if ((fm == 0))
996998 then 0
997- else if ((fl >= (4 * ew)))
998- then (fl / ew)
999- else if ((fl > (3 * ew)))
999+ else if ((fm >= (4 * ew)))
1000+ then (fm / ew)
1001+ else if ((fm > (3 * ew)))
10001002 then 3
1001- else (((fl - 1) / ew) + 1)
1003+ else (((fm - 1) / ew) + 1)
10021004 $Tuple3((cX._1 :+ eV), (cX._2 + 1), (cX._3 + eV))
10031005 }
10041006
10051007 let fg = {
1006- let cZ = fj
1008+ let cZ = fk
10071009 let da = size(cZ)
10081010 let db = $Tuple3(nil, 0, 0)
10091011 func dc (dd,de) = if ((de >= da))
10101012 then dd
1011- else fk(dd, cZ[de])
1013+ else fl(dd, cZ[de])
10121014
10131015 func df (dd,de) = if ((de >= da))
10141016 then dd
10161018
10171019 df(dc(dc(dc(dc(dc(dc(db, 0), 1), 2), 3), 4), 5), 6)
10181020 }
1019- let fm = fg._1
1020- let fn = value(indexOf(fm, max(fm)))
1021- let fo = (fg._3 - 25)
1022- func fp (cX,bK) = {
1023- let fq = if ((bK == fn))
1024- then (fm[bK] - fo)
1025- else fm[bK]
1026- let fr = if ((fq == 0))
1021+ let fn = fg._1
1022+ let fo = value(indexOf(fn, max(fn)))
1023+ let fp = (fg._3 - 25)
1024+ func fq (cX,bK) = {
1025+ let fr = if ((bK == fo))
1026+ then (fn[bK] - fp)
1027+ else fn[bK]
1028+ let fs = if ((fr == 0))
10271029 then nil
1028- else split(drop(toString(pow(10, 0, fq, 0, 0, DOWN)), 1), "")
1029- let eb = fh[bK]
1030- func fs (ft,fu) = (ft :+ eb)
1031-
1032- let fv = {
1033- let cZ = fr
1030+ else split(drop(toString(pow(10, 0, fr, 0, 0, DOWN)), 1), "")
1031+ let eb = fi[bK]
1032+ func ft (fu,fv) = (fu :+ eb)
1033+
1034+ let fw = {
1035+ let cZ = fs
10341036 let da = size(cZ)
10351037 let db = nil
1036- func fw (dd,de) = if ((de >= da))
1037- then dd
1038- else fs(dd, cZ[de])
1039-
10401038 func fx (dd,de) = if ((de >= da))
10411039 then dd
1040+ else ft(dd, cZ[de])
1041+
1042+ func fy (dd,de) = if ((de >= da))
1043+ then dd
10421044 else throw("List size exceeds 25")
10431045
1044- fx(fw(fw(fw(fw(fw(fw(fw(fw(fw(fw(fw(fw(fw(fw(fw(fw(fw(fw(fw(fw(fw(fw(fw(fw(fw(db, 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)
1045- }
1046- (cX ++ fv)
1046+ fy(fx(fx(fx(fx(fx(fx(fx(fx(fx(fx(fx(fx(fx(fx(fx(fx(fx(fx(fx(fx(fx(fx(fx(fx(fx(db, 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)
1047+ }
1048+ (cX ++ fw)
10471049 }
10481050
10491051 let di = {
10501052 let cZ = bw
10511053 let da = size(cZ)
10521054 let db = nil
1053- func fw (dd,de) = if ((de >= da))
1054- then dd
1055- else fp(dd, cZ[de])
1056-
10571055 func fx (dd,de) = if ((de >= da))
10581056 then dd
1057+ else fq(dd, cZ[de])
1058+
1059+ func fy (dd,de) = if ((de >= da))
1060+ then dd
10591061 else throw("List size exceeds 6")
10601062
1061- fx(fw(fw(fw(fw(fw(fw(db, 0), 1), 2), 3), 4), 5), 6)
1062- }
1063- makeString(di, "")
1064- }
1065-
1066-
1067-func fy (fz) = {
1068- let fA = split(valueOrElse(getString(fz), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
1069-[toString(valueOrElse(parseInt(fA[ay]), 0)), if ((size(split(fA[az], "_")) == aa))
1070- then fA[az]
1071- else "0_0_0_0_0_0", if ((size(split(fA[aA], "_")) == aa))
1072- then fA[aA]
1073- else "0_0_0_0_0_0", fA[aB]]
1074- }
1075-
1076-
1077-func fB (fC) = {
1078- let dv = split(fC, "_")
1063+ fy(fx(fx(fx(fx(fx(fx(db, 0), 1), 2), 3), 4), 5), 6)
1064+ }
1065+ func fz (cX,dH) = (cX + di[dH])
1066+
1067+ let cZ = fh
1068+ let da = size(cZ)
1069+ let db = ""
1070+ func fA (dd,de) = if ((de >= da))
1071+ then dd
1072+ else fz(dd, cZ[de])
1073+
1074+ func fB (dd,de) = if ((de >= da))
1075+ then dd
1076+ else throw("List size exceeds 25")
1077+
1078+ fB(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(db, 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)
1079+ }
1080+
1081+
1082+func fC (fD) = {
1083+ let fE = split(valueOrElse(getString(fD), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
1084+[toString(valueOrElse(parseInt(fE[ay]), 0)), if ((size(split(fE[az], "_")) == aa))
1085+ then fE[az]
1086+ else "0_0_0_0_0_0", if ((size(split(fE[aA], "_")) == aa))
1087+ then fE[aA]
1088+ else "0_0_0_0_0_0", fE[aB]]
1089+ }
1090+
1091+
1092+func fF (fG) = {
1093+ let dv = split(fG, "_")
10791094 ((ad * (parseIntValue(dv[1]) + 1)) * parseIntValue(dv[0]))
10801095 }
10811096
10821097
1083-func fD (fE) = {
1084- let fF = fE[as]
1085- func fG (cX,fH) = (cX + parseIntValue(fH))
1086-
1087- func fI (cX,fH) = {
1098+func fH (fI) = {
1099+ let fJ = fI[as]
1100+ func fK (cX,fL) = (cX + parseIntValue(fL))
1101+
1102+ func fM (cX,fL) = {
10881103 let bK = cX._1
1089- let fJ = (((parseIntValue(fH) + ao) - 1) / ao)
1090- $Tuple2((bK + 1), (cX._2 + (fJ * bq)))
1091- }
1092-
1093- let fK = {
1094- let cZ = split(fE[aq], "_")
1104+ let fN = (((parseIntValue(fL) + ao) - 1) / ao)
1105+ $Tuple2((bK + 1), (cX._2 + (fN * bq)))
1106+ }
1107+
1108+ let fO = {
1109+ let cZ = split(fI[aq], "_")
10951110 let da = size(cZ)
10961111 let db = 0
10971112 func dc (dd,de) = if ((de >= da))
10981113 then dd
1099- else fG(dd, cZ[de])
1114+ else fK(dd, cZ[de])
11001115
11011116 func df (dd,de) = if ((de >= da))
11021117 then dd
11041119
11051120 df(dc(dc(dc(dc(dc(dc(db, 0), 1), 2), 3), 4), 5), 6)
11061121 }
1107- let fL = {
1108- let cZ = split(fE[ar], "_")
1122+ let fP = {
1123+ let cZ = split(fI[ar], "_")
11091124 let da = size(cZ)
11101125 let db = 0
1111- func fw (dd,de) = if ((de >= da))
1112- then dd
1113- else fG(dd, cZ[de])
1114-
11151126 func fx (dd,de) = if ((de >= da))
11161127 then dd
1128+ else fK(dd, cZ[de])
1129+
1130+ func fy (dd,de) = if ((de >= da))
1131+ then dd
11171132 else throw("List size exceeds 6")
11181133
1119- fx(fw(fw(fw(fw(fw(fw(db, 0), 1), 2), 3), 4), 5), 6)
1120- }
1121- let fM = if ((fF == ""))
1134+ fy(fx(fx(fx(fx(fx(fx(db, 0), 1), 2), 3), 4), 5), 6)
1135+ }
1136+ let fQ = if ((fJ == ""))
11221137 then 0
1123- else ( let cZ = split_4C(fF, "_")
1138+ else ( let cZ = split_4C(fJ, "_")
11241139 let da = size(cZ)
11251140 let db = $Tuple2(0, 0)
1126- func fN (dd,de) = if ((de >= da))
1141+ func fA (dd,de) = if ((de >= da))
11271142 then dd
1128- else fI(dd, cZ[de])
1129-
1130- func fO (dd,de) = if ((de >= da))
1143+ else fM(dd, cZ[de])
1144+
1145+ func fB (dd,de) = if ((de >= da))
11311146 then dd
11321147 else throw("List size exceeds 50")
11331148
1134- fO(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(db, 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
1135- ((fK + fL) + fM)
1136- }
1137-
1138-
1139-func fP (fQ,fR,fS) = {
1140- let fC = ((toString(fR) + "_") + toString(fS))
1141- let fT = fB(fC)
1142- let fU = valueOrElse(getString(fQ), (fC + ":0_0_0_0_0_0:0_0_0_0_0_0::0"))
1143- let fV = split_4C(fU, ":")
1144- let fW = fD(fV)
1145- let fX = if ((5 > size(fV)))
1146- then makeString(["0", toString(fW), toString((fT - fW)), toString(fT)], "_")
1149+ fB(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(db, 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
1150+ ((fO + fP) + fQ)
1151+ }
1152+
1153+
1154+func fR (fS,fT,fU) = {
1155+ let fG = ((toString(fT) + "_") + toString(fU))
1156+ let fV = fF(fG)
1157+ let fW = valueOrElse(getString(fS), (fG + ":0_0_0_0_0_0:0_0_0_0_0_0::0"))
1158+ let fX = split_4C(fW, ":")
1159+ let fY = fH(fX)
1160+ let fZ = if ((5 > size(fX)))
1161+ then makeString(["0", toString(fY), toString((fV - fY)), toString(fV)], "_")
11471162 else {
1148- let fY = split(fV[at], "_")
1149- let fZ = parseIntValue(fY[au])
1150- let ga = if ((size(fY) > 1))
1151- then parseIntValue(fY[av])
1152- else fW
1153- makeString([toString(fZ), toString(ga), toString(((fT - fZ) - ga)), toString(fT)], "_")
1154- }
1155-[fV[ap], if ((size(split(fV[aq], "_")) == aa))
1156- then fV[aq]
1157- else "0_0_0_0_0_0", if ((size(split(fV[ar], "_")) == aa))
1158- then fV[ar]
1159- else "0_0_0_0_0_0", fV[as], fX]
1160- }
1161-
1162-
1163-func gb (fE) = {
1164- let gc = fD(fE)
1165- let gd = parseIntValue(split(fE[at], "_")[au])
1166- ((fB(fE[ap]) - gc) - gd)
1167- }
1168-
1169-
1170-func ge (gf,gg) = {
1171- let fJ = if ((gf >= 0))
1172- then (((gf + gg) - 1) / gg)
1173- else -((((-(gf) + gg) - 1) / gg))
1174- (fJ * bq)
1175- }
1176-
1177-
1178-func gh (gi,fE,gj) = if ((size(gi) != 3))
1163+ let ga = split(fX[at], "_")
1164+ let gb = parseIntValue(ga[au])
1165+ let gc = if ((size(ga) > 1))
1166+ then parseIntValue(ga[av])
1167+ else fY
1168+ makeString([toString(gb), toString(gc), toString(((fV - gb) - gc)), toString(fV)], "_")
1169+ }
1170+[fX[ap], if ((size(split(fX[aq], "_")) == aa))
1171+ then fX[aq]
1172+ else "0_0_0_0_0_0", if ((size(split(fX[ar], "_")) == aa))
1173+ then fX[ar]
1174+ else "0_0_0_0_0_0", fX[as], fZ]
1175+ }
1176+
1177+
1178+func gd (fI) = {
1179+ let ge = fH(fI)
1180+ let gf = parseIntValue(split(fI[at], "_")[au])
1181+ ((fF(fI[ap]) - ge) - gf)
1182+ }
1183+
1184+
1185+func gg (gh,gi) = {
1186+ let fN = if ((gh >= 0))
1187+ then (((gh + gi) - 1) / gi)
1188+ else -((((-(gh) + gi) - 1) / gi))
1189+ (fN * bq)
1190+ }
1191+
1192+
1193+func gj (gk,fI,gl) = if ((size(gk) != 3))
11791194 then throw("cargoListStr should contain exactly 2 ':' separators")
11801195 else {
1181- let gk = split(gi[0], "_")
1182- let gl = split(gi[1], "_")
1183- let gm = if ((gi[2] == ""))
1196+ let gm = split(gk[0], "_")
1197+ let gn = split(gk[1], "_")
1198+ let go = if ((gk[2] == ""))
11841199 then nil
1185- else split(gi[2], "_")
1186- if ((size(gk) != aa))
1200+ else split(gk[2], "_")
1201+ if ((size(gm) != aa))
11871202 then throw("All 6 resources should be passed")
1188- else if ((size(gl) != aa))
1203+ else if ((size(gn) != aa))
11891204 then throw("All 6 materials should be passed")
11901205 else {
1191- let eO = gb(fE)
1192- let gn = split(fE[aq], "_")
1193- let go = split(fE[ar], "_")
1194- let gp = if ((fE[as] == ""))
1206+ let eO = gd(fI)
1207+ let gp = split(fI[aq], "_")
1208+ let gq = split(fI[ar], "_")
1209+ let gr = if ((fI[as] == ""))
11951210 then nil
1196- else split(fE[as], "_")
1197- let eM = split(gj[az], "_")
1198- let gq = split(gj[aA], "_")
1199- let gr = if ((gj[aB] == ""))
1211+ else split(fI[as], "_")
1212+ let eM = split(gl[az], "_")
1213+ let gs = split(gl[aA], "_")
1214+ let gt = if ((gl[aB] == ""))
12001215 then nil
1201- else split(gj[aB], "_")
1202- func gs (cX,fH) = {
1216+ else split(gl[aB], "_")
1217+ func gu (cX,fL) = {
12031218 let ez = cX._1
1204- let gt = parseIntValue(fH)
1205- let gu = parseIntValue(gn[ez])
1206- let gv = parseIntValue(eM[ez])
1207- if ((gt == 0))
1208- then $Tuple4((ez + 1), (cX._2 :+ gn[ez]), (cX._3 :+ eM[ez]), cX._4)
1209- else if ((gt > 0))
1210- then if ((gt > gv))
1211- then throw((((("Attempt to take " + fH) + " from backpack, but only ") + toString(gv)) + " available"))
1212- else $Tuple4((ez + 1), (cX._2 :+ toString((gu + gt))), (cX._3 :+ toString((gv - gt))), (cX._4 + gt))
1213- else if ((-(gt) > gu))
1214- then throw((((("Attempt to take " + toString(-(gt))) + " from warehouse, but only ") + toString(gu)) + " available"))
1215- else $Tuple4((ez + 1), (cX._2 :+ toString((gu + gt))), (cX._3 :+ toString((gv - gt))), (cX._4 + gt))
1219+ let gv = parseIntValue(fL)
1220+ let gw = parseIntValue(gp[ez])
1221+ let gx = parseIntValue(eM[ez])
1222+ if ((gv == 0))
1223+ then $Tuple4((ez + 1), (cX._2 :+ gp[ez]), (cX._3 :+ eM[ez]), cX._4)
1224+ else if ((gv > 0))
1225+ then if ((gv > gx))
1226+ then throw((((("Attempt to take " + fL) + " from backpack, but only ") + toString(gx)) + " available"))
1227+ else $Tuple4((ez + 1), (cX._2 :+ toString((gw + gv))), (cX._3 :+ toString((gx - gv))), (cX._4 + gv))
1228+ else if ((-(gv) > gw))
1229+ then throw((((("Attempt to take " + toString(-(gv))) + " from warehouse, but only ") + toString(gw)) + " available"))
1230+ else $Tuple4((ez + 1), (cX._2 :+ toString((gw + gv))), (cX._3 :+ toString((gx - gv))), (cX._4 + gv))
12161231 }
12171232
12181233 let di = {
1219- let cZ = gk
1234+ let cZ = gm
12201235 let da = size(cZ)
12211236 let db = $Tuple4(0, nil, nil, 0)
12221237 func dc (dd,de) = if ((de >= da))
12231238 then dd
1224- else gs(dd, cZ[de])
1239+ else gu(dd, cZ[de])
12251240
12261241 func df (dd,de) = if ((de >= da))
12271242 then dd
12291244
12301245 df(dc(dc(dc(dc(dc(dc(db, 0), 1), 2), 3), 4), 5), 6)
12311246 }
1232- func gw (cX,fH) = {
1247+ func gy (cX,fL) = {
12331248 let ez = cX._1
1234- let gt = parseIntValue(fH)
1235- let gx = parseIntValue(go[ez])
1236- let gy = parseIntValue(gq[ez])
1237- if ((gt == 0))
1238- then $Tuple4((ez + 1), (cX._2 :+ go[ez]), (cX._3 :+ gq[ez]), cX._4)
1239- else if ((gt > 0))
1240- then if ((gt > gy))
1241- then throw((((("Attempt to take " + fH) + " from backpack, but only ") + toString(gy)) + " available"))
1242- else $Tuple4((ez + 1), (cX._2 :+ toString((gx + gt))), (cX._3 :+ toString((gy - gt))), (cX._4 + gt))
1243- else if ((-(gt) > gx))
1244- then throw((((("Attempt to take " + toString(-(gt))) + " from warehouse, but only ") + toString(gx)) + " available"))
1245- else $Tuple4((ez + 1), (cX._2 :+ toString((gx + gt))), (cX._3 :+ toString((gy - gt))), (cX._4 + gt))
1249+ let gv = parseIntValue(fL)
1250+ let gz = parseIntValue(gq[ez])
1251+ let gA = parseIntValue(gs[ez])
1252+ if ((gv == 0))
1253+ then $Tuple4((ez + 1), (cX._2 :+ gq[ez]), (cX._3 :+ gs[ez]), cX._4)
1254+ else if ((gv > 0))
1255+ then if ((gv > gA))
1256+ then throw((((("Attempt to take " + fL) + " from backpack, but only ") + toString(gA)) + " available"))
1257+ else $Tuple4((ez + 1), (cX._2 :+ toString((gz + gv))), (cX._3 :+ toString((gA - gv))), (cX._4 + gv))
1258+ else if ((-(gv) > gz))
1259+ then throw((((("Attempt to take " + toString(-(gv))) + " from warehouse, but only ") + toString(gz)) + " available"))
1260+ else $Tuple4((ez + 1), (cX._2 :+ toString((gz + gv))), (cX._3 :+ toString((gA - gv))), (cX._4 + gv))
12461261 }
12471262
12481263 let eq = {
1249- let cZ = gl
1264+ let cZ = gn
12501265 let da = size(cZ)
12511266 let db = $Tuple4(0, nil, nil, di._4)
1252- func fw (dd,de) = if ((de >= da))
1253- then dd
1254- else gw(dd, cZ[de])
1255-
12561267 func fx (dd,de) = if ((de >= da))
12571268 then dd
1269+ else gy(dd, cZ[de])
1270+
1271+ func fy (dd,de) = if ((de >= da))
1272+ then dd
12581273 else throw("List size exceeds 6")
12591274
1260- fx(fw(fw(fw(fw(fw(fw(db, 0), 1), 2), 3), 4), 5), 6)
1275+ fy(fx(fx(fx(fx(fx(fx(db, 0), 1), 2), 3), 4), 5), 6)
12611276 }
1262- func gz (cX,fH) = {
1277+ func gB (cX,fL) = {
12631278 let ez = cX._1
1264- let gt = parseIntValue(fH)
1265- let gA = if ((size(gp) > ez))
1266- then parseIntValue(gp[ez])
1267- else 0
1268- let gB = if ((size(gr) > ez))
1279+ let gv = parseIntValue(fL)
1280+ let gC = if ((size(gr) > ez))
12691281 then parseIntValue(gr[ez])
12701282 else 0
1271- if ((gt == 0))
1272- then $Tuple4((ez + 1), (cX._2 :+ toString(gA)), (cX._3 :+ toString(gB)), cX._4)
1273- else if ((gt > 0))
1274- then if ((gt > gB))
1275- then throw((((("Attempt to take " + fH) + " from backpack, but only ") + toString(gB)) + " available"))
1283+ let gD = if ((size(gt) > ez))
1284+ then parseIntValue(gt[ez])
1285+ else 0
1286+ if ((gv == 0))
1287+ then $Tuple4((ez + 1), (cX._2 :+ toString(gC)), (cX._3 :+ toString(gD)), cX._4)
1288+ else if ((gv > 0))
1289+ then if ((gv > gD))
1290+ then throw((((("Attempt to take " + fL) + " from backpack, but only ") + toString(gD)) + " available"))
12761291 else {
1277- let gC = (ge((gA + gt), ao) - ge(gA, ao))
1278- $Tuple4((ez + 1), (cX._2 :+ toString((gA + gt))), (cX._3 :+ toString((gB - gt))), (cX._4 + gC))
1292+ let gE = (gg((gC + gv), ao) - gg(gC, ao))
1293+ $Tuple4((ez + 1), (cX._2 :+ toString((gC + gv))), (cX._3 :+ toString((gD - gv))), (cX._4 + gE))
12791294 }
1280- else if ((-(gt) > gA))
1281- then throw((((("Attempt to take " + toString(-(gt))) + " from warehouse, but only ") + toString(gA)) + " available"))
1295+ else if ((-(gv) > gC))
1296+ then throw((((("Attempt to take " + toString(-(gv))) + " from warehouse, but only ") + toString(gC)) + " available"))
12821297 else {
1283- let gC = (ge((gA + gt), ao) - ge(gA, ao))
1284- $Tuple4((ez + 1), (cX._2 :+ toString((gA + gt))), (cX._3 :+ toString((gB - gt))), (cX._4 + gC))
1298+ let gE = (gg((gC + gv), ao) - gg(gC, ao))
1299+ $Tuple4((ez + 1), (cX._2 :+ toString((gC + gv))), (cX._3 :+ toString((gD - gv))), (cX._4 + gE))
12851300 }
12861301 }
12871302
1288- let fA = if ((size(gm) != 0))
1303+ let fE = if ((size(go) != 0))
12891304 then {
1290- let cZ = gm
1305+ let cZ = go
12911306 let da = size(cZ)
12921307 let db = $Tuple4(0, nil, nil, eq._4)
1293- func fN (dd,de) = if ((de >= da))
1308+ func fA (dd,de) = if ((de >= da))
12941309 then dd
1295- else gz(dd, cZ[de])
1296-
1297- func fO (dd,de) = if ((de >= da))
1310+ else gB(dd, cZ[de])
1311+
1312+ func fB (dd,de) = if ((de >= da))
12981313 then dd
12991314 else throw("List size exceeds 50")
13001315
1301- fO(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(db, 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)
1316+ fB(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(db, 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)
13021317 }
1303- else $Tuple4(0, gp, gr, eq._4)
1304- let gD = fA._4
1305- if ((gD > eO))
1306- then throw((((("Attempt to put total " + toString(gD)) + " stuff, but only ") + toString(eO)) + " warehouse space left"))
1307- else $Tuple7(makeString(di._2, "_"), makeString(eq._2, "_"), makeString(fA._2, "_"), makeString(di._3, "_"), makeString(eq._3, "_"), makeString(fA._3, "_"), gD)
1318+ else $Tuple4(0, gr, gt, eq._4)
1319+ let gF = fE._4
1320+ if ((gF > eO))
1321+ then throw((((("Attempt to put total " + toString(gF)) + " stuff, but only ") + toString(eO)) + " warehouse space left"))
1322+ else $Tuple7(makeString(di._2, "_"), makeString(eq._2, "_"), makeString(fE._2, "_"), makeString(di._3, "_"), makeString(eq._3, "_"), makeString(fE._3, "_"), gF)
13081323 }
13091324 }
13101325
13111326
1312-func gE (gF,gG) = {
1313- let bb = toString(gF)
1314- let gH = eU(toBigInt(gG))
1315- let gI = valueOrElse(getInteger(cy()), (cx + 1))
1316- let cA = toString(gI)
1317- let fd = toInt((gH % cr))
1318- let eC = fb(gH, fd)
1319- let gJ = ai[fd]
1320- let gK = Issue(cQ(cA, "S"), makeString([cA, "S", eC, gJ], "_"), 1, 0, false)
1321- let aE = calculateAssetId(gK)
1322- let gL = toBase58String(aE)
1323- $Tuple2([IntegerEntry(cy(), (gI + 1)), gK, StringEntry(cz(cA), gL), StringEntry(aD(gL), bb), StringEntry(cF(cA), bb), IntegerEntry(aH(gL), 0), IntegerEntry(cD(gL, bb), 0), ScriptTransfer(gF, 1, aE)], $Tuple2(gL, gJ))
1324- }
1325-
1326-
1327-func gM (bb,gN,gO) = if (!(sigVerify_8Kb(gN, gO, cj)))
1327+func gG (gH,gI) = {
1328+ let bb = toString(gH)
1329+ let gJ = eU(toBigInt(gI))
1330+ let gK = valueOrElse(getInteger(cy()), (cx + 1))
1331+ let cA = toString(gK)
1332+ let fd = toInt((gJ % cr))
1333+ let eC = fb(gJ, fd)
1334+ let gL = ai[fd]
1335+ let gM = Issue(cQ(cA, "S"), makeString([cA, "S", eC, gL], "_"), 1, 0, false)
1336+ let aE = calculateAssetId(gM)
1337+ let gN = toBase58String(aE)
1338+ $Tuple2([IntegerEntry(cy(), (gK + 1)), gM, StringEntry(cz(cA), gN), StringEntry(aD(gN), bb), StringEntry(cF(cA), bb), IntegerEntry(aH(gN), 0), IntegerEntry(cD(gN, bb), 0), ScriptTransfer(gH, 1, aE)], $Tuple2(gN, gL))
1339+ }
1340+
1341+
1342+func gO (bb,gP,gQ) = if (!(sigVerify_8Kb(gP, gQ, cj)))
13281343 then throw("signature does not match")
13291344 else {
1330- let dv = split(toUtf8String(gN), ";")
1331- let gP = split(dv[0], "|")
1332- let gQ = split(gP[cM], "_")
1333- let gR = parseIntValue(gQ[0])
1334- let gS = parseIntValue(gQ[1])
1335- let gT = split(dv[1], ":")
1336- let gU = gT[0]
1337- let gV = parseIntValue(gP[cN])
1338- if (if ((gV > (lastBlock.timestamp + cl)))
1345+ let dv = split(toUtf8String(gP), ";")
1346+ let gR = split(dv[0], "|")
1347+ let gS = split(gR[cM], "_")
1348+ let gT = parseIntValue(gS[0])
1349+ let gU = parseIntValue(gS[1])
1350+ let gV = split(dv[1], ":")
1351+ let gW = gV[0]
1352+ let gX = parseIntValue(gR[cN])
1353+ if (if ((gX > (lastBlock.timestamp + cl)))
13391354 then true
1340- else ((lastBlock.timestamp - cl) > gV))
1341- then throw(((("signature outdated: logTime=" + toString(gV)) + ", bcTime=") + toString(lastBlock.timestamp)))
1355+ else ((lastBlock.timestamp - cl) > gX))
1356+ then throw(((("signature outdated: logTime=" + toString(gX)) + ", bcTime=") + toString(lastBlock.timestamp)))
13421357 else {
1343- let gW = gT[1]
1344- let gX = valueOrElse(getString(aC(bb)), "")
1345- if ((gX != gW))
1346- then throw(((("Tx ids don't match! In state: " + gX) + ", in msg: ") + gW))
1358+ let gY = gV[1]
1359+ let gZ = valueOrElse(getString(aC(bb)), "")
1360+ if ((gZ != gY))
1361+ then throw(((("Tx ids don't match! In state: " + gZ) + ", in msg: ") + gY))
13471362 else {
13481363 let r = valueOrErrorMessage(getString(aW(bb)), "You don't have a duck staked")
1349- let gY = q(r)
1350- let gZ = M(valueOrElse(getInteger(u(r)), 0))
1351- let ha = valueOrElse(getInteger(gY), gZ)
1352- if ((ha != gR))
1353- then throw(((("oldHealth=" + toString(ha)) + " from state does not match one from flight log=") + toString(gR)))
1354- else if ((0 >= gR))
1364+ let ha = q(r)
1365+ let hb = M(valueOrElse(getInteger(u(r)), 0))
1366+ let hc = valueOrElse(getInteger(ha), hb)
1367+ if ((hc != gT))
1368+ then throw(((("oldHealth=" + toString(hc)) + " from state does not match one from flight log=") + toString(gT)))
1369+ else if ((0 >= gT))
13551370 then throw("You can't fly with zero health")
13561371 else {
1357- let hb = if ((size(gP) > cO))
1358- then gP[cO]
1372+ let hd = if ((size(gR) > cO))
1373+ then gR[cO]
13591374 else ""
1360- let hc = if ((size(gP) > cP))
1361- then gP[cP]
1375+ let he = if ((size(gR) > cP))
1376+ then gR[cP]
13621377 else ""
1363- let hd = if (if ((gS > 0))
1364- then (hb == "$")
1378+ let hf = if (if ((gU > 0))
1379+ then (hd == "$")
13651380 else false)
13661381 then cc(invoke(bL, "sendUsdtPrize", [bb], nil))
13671382 else 0
1368- $Tuple5(gS, r, hd, gU, hc)
1383+ $Tuple5(gU, r, hf, gW, he)
13691384 }
13701385 }
13711386 }
13721387 }
13731388
13741389
1375-func he (gF,gG,gN,gO) = {
1376- let bb = toString(gF)
1377- let fe = gM(bb, gN, gO)
1390+func hg (gH,gI,gP,gQ) = {
1391+ let bb = toString(gH)
1392+ let fe = gO(bb, gP, gQ)
13781393 let r = fe._2
1379- let gY = q(r)
1380- let fz = aX(r)
1381- let gj = fy(fz)
1382- let hf = split(gj[aA], "_")
1383- let hg = makeString(dj(true, hf, cp), "_")
1384- let hh = w(r)
1385- let hi = valueOrElse(getString(hh), ",;,_,;,_,;,_,;,_,;,_,;,")
1386- let hj = dq(hi, fe._5)
1394+ let ha = q(r)
1395+ let fD = aX(r)
1396+ let gl = fC(fD)
1397+ let hh = split(gl[aA], "_")
1398+ let hi = makeString(dj(true, hh, cp), "_")
1399+ let hj = w(r)
1400+ let hk = valueOrElse(getString(hj), ",;,_,;,_,;,_,;,_,;,_,;,")
1401+ let hl = dq(hk, fe._5)
13871402 if ((0 >= fe._1))
1388- then $Tuple3([IntegerEntry(gY, 0), StringEntry(hh, hj)], "", 0)
1403+ then $Tuple3([IntegerEntry(ha, 0), StringEntry(hj, hl)], "", 0)
13891404 else {
1390- let fu = gE(gF, gG)
1391- let gL = fu._2._1
1392- $Tuple3(((((fu._1 :+ StringEntry(aY(r), makeString([fu._2._2, "L", gL], "_"))) :+ IntegerEntry(gY, fe._1)) :+ StringEntry(hh, hj)) :+ StringEntry(fz, makeString([gj[ay], gj[az], hg, gj[aB]], ":"))), gL, fe._3)
1393- }
1394- }
1395-
1396-
1397-func hk (aO,hl) = {
1398- let fS = valueOrElse(getInteger(aH(aO)), 0)
1399- let hm = valueOrElse(getInteger(aI(Z, aO)), 0)
1400- let hn = (fS / 6)
1401- let ho = (fS / 7)
1402- ((ab + fraction(ab, ((fS + hn) + (2 * ho)), 5)) + fraction(ab, hm, (hl * 5)))
1403- }
1404-
1405-
1406-func hp (b,hq,hr) = {
1407- let hs = if ((hq == cJ))
1408- then $Tuple2(hr, valueOrElse(getString(aW(b)), ""))
1405+ let hm = gG(gH, gI)
1406+ let gN = hm._2._1
1407+ $Tuple3(((((hm._1 :+ StringEntry(aY(r), makeString([hm._2._2, "L", gN], "_"))) :+ IntegerEntry(ha, fe._1)) :+ StringEntry(hj, hl)) :+ StringEntry(fD, makeString([gl[ay], gl[az], hi, gl[aB]], ":"))), gN, fe._3)
1408+ }
1409+ }
1410+
1411+
1412+func hn (aO,ho) = {
1413+ let fU = valueOrElse(getInteger(aH(aO)), 0)
1414+ let hp = valueOrElse(getInteger(aI(Z, aO)), 0)
1415+ let hq = (fU / 6)
1416+ let hr = (fU / 7)
1417+ ((ab + fraction(ab, ((fU + hq) + (2 * hr)), 5)) + fraction(ab, hp, (ho * 5)))
1418+ }
1419+
1420+
1421+func hs (b,ht,hu) = {
1422+ let hv = if ((ht == cJ))
1423+ then $Tuple2(hu, valueOrElse(getString(aW(b)), ""))
14091424 else {
14101425 let r = valueOrErrorMessage(getString(aW(b)), "You don't have a duck staked")
1411- let ht = valueOrElse(getString(aY(r)), ae)
1412- let hu = split(value(ht), "_")
1413- if ((hu[bd] != "L"))
1414- then throw((("Duck location type is " + hu[bd]) + ", but should be L"))
1415- else $Tuple2(hu[be], r)
1416- }
1417- let aO = hs._1
1418- let hv = hs._2
1419- let hw = value(assetInfo(fromBase58String(aO)))
1420- let hx = aG(aO)
1421- let hy = valueOrErrorMessage(getInteger(hx), (("Land " + hw.name) + " is not staked"))
1422- let hz = valueOrErrorMessage(getString(aD(aO)), (("NFT " + hw.name) + " is orphaned"))
1423- if ((hz != b))
1426+ let hw = valueOrElse(getString(aY(r)), ae)
1427+ let hx = split(value(hw), "_")
1428+ if ((hx[bd] != "L"))
1429+ then throw((("Duck location type is " + hx[bd]) + ", but should be L"))
1430+ else $Tuple2(hx[be], r)
1431+ }
1432+ let aO = hv._1
1433+ let hy = hv._2
1434+ let hz = value(assetInfo(fromBase58String(aO)))
1435+ let hA = aG(aO)
1436+ let hB = valueOrErrorMessage(getInteger(hA), (("Land " + hz.name) + " is not staked"))
1437+ let hC = valueOrErrorMessage(getString(aD(aO)), (("NFT " + hz.name) + " is orphaned"))
1438+ if ((hC != b))
14241439 then throw((X + " is not yours"))
14251440 else {
1426- let hA = split(hw.description, "_")
1427- $Tuple4(hv, aO, hA, hy)
1428- }
1429- }
1430-
1431-
1432-func hB (b,gf,hq,hr) = if ((0 > gf))
1441+ let hD = split(hz.description, "_")
1442+ $Tuple4(hy, aO, hD, hB)
1443+ }
1444+ }
1445+
1446+
1447+func hE (b,gh,ht,hu) = if ((0 > gh))
14331448 then throw("Negative amount")
14341449 else {
1435- let eb = hp(b, hq, hr)
1450+ let eb = hs(b, ht, hu)
14361451 let cf = eb._3[bQ]
14371452 let ev = eB(eb._3[bR])
14381453 let eF = (lastBlock.timestamp - eb._4)
14391454 if ((0 > eF))
14401455 then throw(((("Saved timestamp is in future, saved = " + toString(eb._4)) + ", current = ") + toString(lastBlock.timestamp)))
14411456 else {
1442- let hl = ce(cf)
1443- let hC = hk(eb._2, hl)
1444- let hD = fraction(eF, (hC * hl), ac)
1445- if ((gf > hD))
1446- then throw(((("Not enough resources, available = " + toString(hD)) + ", requested = ") + toString(gf)))
1457+ let ho = ce(cf)
1458+ let hF = hn(eb._2, ho)
1459+ let hG = fraction(eF, (hF * ho), ac)
1460+ if ((gh > hG))
1461+ then throw(((("Not enough resources, available = " + toString(hG)) + ", requested = ") + toString(gh)))
14471462 else {
1448- let hE = fraction((hD - gf), ac, (hC * hl))
1449- let hF = (lastBlock.timestamp - hE)
1450- let fR = (hl / br)
1451- let eN = eJ(ev, (eF - hE), fR, hC)
1452- let fQ = aN(eb._2)
1453- let fS = valueOrElse(getInteger(aH(eb._2)), 0)
1454- let fE = fP(fQ, fR, fS)
1455- let fY = split(fE[at], "_")
1456- let eO = parseIntValue(fY[aw])
1457- if (if ((hq == cJ))
1458- then (gf > eO)
1463+ let hH = fraction((hG - gh), ac, (hF * ho))
1464+ let hI = (lastBlock.timestamp - hH)
1465+ let fT = (ho / br)
1466+ let eN = eJ(ev, (eF - hH), fT, hF)
1467+ let fS = aN(eb._2)
1468+ let fU = valueOrElse(getInteger(aH(eb._2)), 0)
1469+ let fI = fR(fS, fT, fU)
1470+ let ga = split(fI[at], "_")
1471+ let eO = parseIntValue(ga[aw])
1472+ if (if ((ht == cJ))
1473+ then (gh > eO)
14591474 else false)
14601475 then throw((("Only " + toString(eO)) + " space left in warehouse"))
14611476 else {
1462- let fz = aX(eb._1)
1463- let gj = fy(fz)
1464- let eM = split(gj[az], "_")
1465- let eL = split(fE[aq], "_")
1466- let hG = if ((hq == cJ))
1467- then $Tuple4(eD(eL, ev, (eF - hE), fR, hC), gj[az], (parseIntValue(fY[av]) + eN._2), (parseIntValue(fY[aw]) - eN._2))
1468- else if ((hq == cK))
1469- then $Tuple4(fE[aq], eD(eM, ev, (eF - hE), fR, hC), parseIntValue(fY[av]), parseIntValue(fY[aw]))
1477+ let fD = aX(eb._1)
1478+ let gl = fC(fD)
1479+ let eM = split(gl[az], "_")
1480+ let eL = split(fI[aq], "_")
1481+ let hJ = if ((ht == cJ))
1482+ then $Tuple4(eD(eL, ev, (eF - hH), fT, hF), gl[az], (parseIntValue(ga[av]) + eN._2), (parseIntValue(ga[aw]) - eN._2))
1483+ else if ((ht == cK))
1484+ then $Tuple4(fI[aq], eD(eM, ev, (eF - hH), fT, hF), parseIntValue(ga[av]), parseIntValue(ga[aw]))
14701485 else {
1471- let hH = eK(eL, eM, eN, eO)
1472- let hI = min([parseIntValue(fY[aw]), eN._2])
1473- $Tuple4(hH._1, hH._2, (parseIntValue(fY[av]) + hI), (parseIntValue(fY[aw]) - hI))
1486+ let hK = eK(eL, eM, eN, eO)
1487+ let hL = min([parseIntValue(ga[aw]), eN._2])
1488+ $Tuple4(hK._1, hK._2, (parseIntValue(ga[av]) + hL), (parseIntValue(ga[aw]) - hL))
14741489 }
1475- let hJ = hG._1
1476- let hK = hG._2
1477- let hL = hG._3
1478- let hM = hG._4
1479- $Tuple5([IntegerEntry(aG(eb._2), hF), IntegerEntry(aK(X, eb._2, b), hF)], fz, [gj[ay], hK, gj[aA], gj[aB]], fQ, [fE[ap], hJ, fE[ar], fE[as], makeString([fY[au], toString(hL), toString(hM), fY[ax]], "_")])
1490+ let hM = hJ._1
1491+ let hN = hJ._2
1492+ let hO = hJ._3
1493+ let hP = hJ._4
1494+ $Tuple5([IntegerEntry(aG(eb._2), hI), IntegerEntry(aK(X, eb._2, b), hI)], fD, [gl[ay], hN, gl[aA], gl[aB]], fS, [fI[ap], hM, fI[ar], fI[as], makeString([ga[au], toString(hO), toString(hP), ga[ax]], "_")])
14801495 }
14811496 }
14821497 }
14831498 }
14841499
14851500
1486-func hN (b,aO,hl,hq) = {
1487- let hx = aG(aO)
1488- let hy = value(getInteger(hx))
1489- let hD = (fraction((lastBlock.timestamp - hy), hk(aO, hl), ac) * hl)
1490- hB(b, hD, hq, aO)
1491- }
1492-
1493-
1494-func hO (dk,gF,hP,aO) = {
1495- let b = toString(gF)
1496- let eb = hp(b, cL, aO)
1497- let hl = ce(eb._3[bQ])
1498- let hQ = aH(eb._2)
1499- let hR = valueOrElse(getInteger(hQ), 0)
1500- if ((hR >= 3))
1501+func hQ (b,aO,ho,ht) = {
1502+ let hA = aG(aO)
1503+ let hB = value(getInteger(hA))
1504+ let hG = (fraction((lastBlock.timestamp - hB), hn(aO, ho), ac) * ho)
1505+ hE(b, hG, ht, aO)
1506+ }
1507+
1508+
1509+func hR (dk,gH,hS,aO) = {
1510+ let b = toString(gH)
1511+ let eb = hs(b, cL, aO)
1512+ let ho = ce(eb._3[bQ])
1513+ let hT = aH(eb._2)
1514+ let hU = valueOrElse(getInteger(hT), 0)
1515+ if ((hU >= 3))
15011516 then throw("Currently max infrastructure level = 3")
15021517 else {
1503- let R = (hR + 1)
1504- let hS = fraction(co, (hl * R), br)
1518+ let R = (hU + 1)
1519+ let hV = fraction(co, (ho * R), br)
15051520 if (if (!(dk))
1506- then (hP != hS)
1521+ then (hS != hV)
15071522 else false)
1508- then throw(("Payment attached should be " + toString(hS)))
1523+ then throw(("Payment attached should be " + toString(hV)))
15091524 else {
1510- let fz = aX(eb._1)
1511- let gj = fy(fz)
1512- let hf = split(gj[aA], "_")
1513- let hT = fraction(bm, (hl * R), br)
1514- let hg = makeString(dj(dk, hf, hT), "_")
1515- let hU = hN(b, eb._2, hl, cL)
1516- let hV = hU._5
1517- let hW = fB(hV[ap])
1518- let hX = makeString([split(hV[ap], "_")[0], toString(R)], "_")
1519- let hY = fB(hX)
1520- let fY = split(hV[at], "_")
1521- let hZ = makeString([fY[au], fY[av], toString(((parseIntValue(fY[aw]) + hY) - hW)), toString(hY)], "_")
1522- $Tuple3(([IntegerEntry(hQ, R), IntegerEntry(cD(eb._2, b), R), StringEntry(fz, makeString([gj[ay], hU._3[az], hg, gj[aB]], ":")), StringEntry(hU._4, makeString([hX, hV[aq], hV[ar], hV[as], hZ], ":"))] ++ hU._1), R, hT)
1525+ let fD = aX(eb._1)
1526+ let gl = fC(fD)
1527+ let hh = split(gl[aA], "_")
1528+ let hW = fraction(bm, (ho * R), br)
1529+ let hi = makeString(dj(dk, hh, hW), "_")
1530+ let hX = hQ(b, eb._2, ho, cL)
1531+ let hY = hX._5
1532+ let hZ = fF(hY[ap])
1533+ let ia = makeString([split(hY[ap], "_")[0], toString(R)], "_")
1534+ let ib = fF(ia)
1535+ let ga = split(hY[at], "_")
1536+ let ic = makeString([ga[au], ga[av], toString(((parseIntValue(ga[aw]) + ib) - hZ)), toString(ib)], "_")
1537+ $Tuple3(([IntegerEntry(hT, R), IntegerEntry(cD(eb._2, b), R), StringEntry(fD, makeString([gl[ay], hX._3[az], hi, gl[aB]], ":")), StringEntry(hX._4, makeString([ia, hY[aq], hY[ar], hY[as], ic], ":"))] ++ hX._1), R, hW)
15231538 }
15241539 }
15251540 }
15261541
15271542
1528-func ia (r,ib) = if (!(bh))
1543+func id (r,ie) = if (!(bh))
15291544 then $Tuple2(nil, 0)
15301545 else {
1531- let ic = u(r)
1532- let id = t(r)
1533- let L = valueOrElse(getInteger(T, id), 0)
1534- let Q = (L + ib)
1535- let ie = O(valueOrElse(getInteger(T, ic), 0), Q)
1536- let if = v(r)
1537- $Tuple2([IntegerEntry(ic, ie[0]), IntegerEntry(id, Q), IntegerEntry(if, (valueOrElse(getInteger(if), 0) + ie[1]))], Q)
1538- }
1539-
1540-
1541-func ig (b,ib) = if (!(bh))
1546+ let if = u(r)
1547+ let ig = t(r)
1548+ let L = valueOrElse(getInteger(T, ig), 0)
1549+ let Q = (L + ie)
1550+ let ih = O(valueOrElse(getInteger(T, if), 0), Q)
1551+ let ii = v(r)
1552+ $Tuple2([IntegerEntry(if, ih[0]), IntegerEntry(ig, Q), IntegerEntry(ii, (valueOrElse(getInteger(ii), 0) + ih[1]))], Q)
1553+ }
1554+
1555+
1556+func ij (b,ie) = if (!(bh))
15421557 then $Tuple2(nil, 0)
15431558 else {
1544- let ic = y(b)
1545- let id = x(b)
1546- let L = valueOrElse(getInteger(T, id), 0)
1547- let Q = (L + ib)
1548- let ie = O(valueOrElse(getInteger(T, ic), 0), Q)
1549- let if = z(b)
1550- $Tuple2([IntegerEntry(ic, ie[0]), IntegerEntry(id, Q), IntegerEntry(if, (valueOrElse(getInteger(if), 0) + ie[1]))], Q)
1551- }
1552-
1553-
1554-func ih (b) = {
1559+ let if = y(b)
1560+ let ig = x(b)
1561+ let L = valueOrElse(getInteger(T, ig), 0)
1562+ let Q = (L + ie)
1563+ let ih = O(valueOrElse(getInteger(T, if), 0), Q)
1564+ let ii = z(b)
1565+ $Tuple2([IntegerEntry(if, ih[0]), IntegerEntry(ig, Q), IntegerEntry(ii, (valueOrElse(getInteger(ii), 0) + ih[1]))], Q)
1566+ }
1567+
1568+
1569+func ik (b) = {
15551570 let r = valueOrErrorMessage(getString(aW(b)), "You don't have a duck staked")
1556- let ii = aR(b)
1557- let ij = getString(ii)
1558- if (!(isDefined(ij)))
1571+ let il = aR(b)
1572+ let im = getString(il)
1573+ if (!(isDefined(im)))
15591574 then throw("You are not eligible for ONBOARD artifact")
15601575 else {
1561- let ik = aT(b)
1562- let il = getString(ik)
1563- if (isDefined(il))
1564- then throw(("You already used your ONBOARD artifact on duck " + value(il)))
1576+ let in = aT(b)
1577+ let io = getString(in)
1578+ if (isDefined(io))
1579+ then throw(("You already used your ONBOARD artifact on duck " + value(io)))
15651580 else {
1566- let im = aS(r)
1567- let in = getString(im)
1568- if (isDefined(in))
1569- then throw(((("The duck " + r) + " already got points from ONBOARD artifact from user ") + value(in)))
1570- else ([StringEntry(ik, r), StringEntry(im, b)] ++ ia(r, I)._1)
1581+ let ip = aS(r)
1582+ let iq = getString(ip)
1583+ if (isDefined(iq))
1584+ then throw(((("The duck " + r) + " already got points from ONBOARD artifact from user ") + value(iq)))
1585+ else ([StringEntry(in, r), StringEntry(ip, b)] ++ id(r, I)._1)
15711586 }
15721587 }
15731588 }
15741589
15751590
1576-func io (b,hr) = {
1577- let eb = hp(b, cL, hr)
1591+func ir (b,hu) = {
1592+ let eb = hs(b, cL, hu)
15781593 let aO = eb._2
1579- let hl = ce(eb._3[bQ])
1580- let ip = aI(Z, aO)
1581- if ((valueOrElse(getInteger(ip), 0) > 0))
1594+ let ho = ce(eb._3[bQ])
1595+ let is = aI(Z, aO)
1596+ if ((valueOrElse(getInteger(is), 0) > 0))
15821597 then throw("Presale artifact is already activated")
15831598 else if ((parseIntValue(eb._3[bP]) > cx))
15841599 then throw((((X + " ") + aO) + " is not eligible for presale artifact"))
15851600 else {
1586- let hU = hN(b, aO, hl, cL)
1587- ((((hU._1 :+ IntegerEntry(ip, hl)) :+ IntegerEntry(cE(Z, aO, b), hl)) :+ StringEntry(hU._2, makeString(hU._3, ":"))) :+ StringEntry(hU._4, makeString(hU._5, ":")))
1601+ let hX = hQ(b, aO, ho, cL)
1602+ ((((hX._1 :+ IntegerEntry(is, ho)) :+ IntegerEntry(cE(Z, aO, b), ho)) :+ StringEntry(hX._2, makeString(hX._3, ":"))) :+ StringEntry(hX._4, makeString(hX._5, ":")))
15881603 }
15891604 }
15901605
15911606
1592-func iq (ir,R,is,b,it,gG,iu) = {
1607+func it (iu,R,iv,b,iw,gI,ix) = {
15931608 let r = valueOrErrorMessage(getString(aW(b)), "You don't have a duck staked")
1594- func iv (cX,aO) = {
1595- let hw = value(assetInfo(fromBase58String(aO)))
1596- let hx = aG(aO)
1597- let hy = valueOrErrorMessage(getInteger(hx), (("NFT " + hw.name) + " is not staked"))
1598- let hz = valueOrErrorMessage(getString(aD(aO)), (("NFT " + hw.name) + " is orphaned"))
1599- if ((hz != b))
1609+ func iy (cX,aO) = {
1610+ let hz = value(assetInfo(fromBase58String(aO)))
1611+ let hA = aG(aO)
1612+ let hB = valueOrErrorMessage(getInteger(hA), (("NFT " + hz.name) + " is not staked"))
1613+ let hC = valueOrErrorMessage(getString(aD(aO)), (("NFT " + hz.name) + " is orphaned"))
1614+ if ((hC != b))
16001615 then throw((X + " is not yours"))
16011616 else {
1602- let hA = split(hw.description, "_")
1603- let gJ = hA[bS]
1617+ let hD = split(hz.description, "_")
1618+ let gL = hD[bS]
16041619 if (if ((cX._3 != ""))
1605- then (cX._3 != gJ)
1620+ then (cX._3 != gL)
16061621 else false)
16071622 then throw("Lands should be on the same continent to merge")
16081623 else {
1609- let cf = hA[bQ]
1610- let iw = cX._1
1611- let ez = valueOrErrorMessage(indexOf(iw, cf), "You haven't passed all the lands needed")
1612- let ix = (take(iw, ez) + drop(iw, (ez + 1)))
1613- let hl = ce(cf)
1614- let iy = (cX._2 + valueOrElse(getInteger(aI(Z, aO)), 0))
1615- let fS = valueOrElse(getInteger(aH(aO)), 0)
1616- let iz = {
1624+ let cf = hD[bQ]
1625+ let iz = cX._1
1626+ let ez = valueOrErrorMessage(indexOf(iz, cf), "You haven't passed all the lands needed")
1627+ let iA = (take(iz, ez) + drop(iz, (ez + 1)))
1628+ let ho = ce(cf)
1629+ let iB = (cX._2 + valueOrElse(getInteger(aI(Z, aO)), 0))
1630+ let fU = valueOrElse(getInteger(aH(aO)), 0)
1631+ let iC = {
16171632 let bk = cf
16181633 if (("S" == bk))
16191634 then 3
16251640 then 6
16261641 else throw("Only S, M, L, XL can merge")
16271642 }
1628- if ((fS != iz))
1643+ if ((fU != iC))
16291644 then throw("All lands should be maxed to merge")
16301645 else {
1631- let cA = hA[bP]
1632- let ev = eB(hA[bR])
1633- let eF = (lastBlock.timestamp - hy)
1646+ let cA = hD[bP]
1647+ let ev = eB(hD[bR])
1648+ let eF = (lastBlock.timestamp - hB)
16341649 if ((0 > eF))
1635- then throw(((("Saved timestamp is in future, saved = " + toString(hy)) + ", current = ") + toString(lastBlock.timestamp)))
1650+ then throw(((("Saved timestamp is in future, saved = " + toString(hB)) + ", current = ") + toString(lastBlock.timestamp)))
16361651 else {
1637- let hC = hk(aO, hl)
1638- let fR = (hl / br)
1639- let hK = eD(split(cX._4, "_"), ev, eF, fR, hC)
1640- let dh = et(cX._6, ev, fR, -1)
1641- let fj = et(cX._9, ev, fR, 1)
1642- let iA = cX._7
1643- let bK = indexOf(iA, aO)
1652+ let hF = hn(aO, ho)
1653+ let fT = (ho / br)
1654+ let hN = eD(split(cX._4, "_"), ev, eF, fT, hF)
1655+ let dh = et(cX._6, ev, fT, -1)
1656+ let fk = et(cX._9, ev, fT, 1)
1657+ let iD = cX._7
1658+ let bK = indexOf(iD, aO)
16441659 if (!(isDefined(bK)))
16451660 then throw(("Your staked lands don't contain " + aO))
16461661 else {
1647- let iB = aF(aO)
1648- let iC = valueOrElse(getString(iB), "")
1649- $Tuple9(ix, iy, gJ, hK, (((((((((((((cX._5 :+ DeleteEntry(aG(aO))) :+ DeleteEntry(aK(X, aO, b))) :+ DeleteEntry(cz(cA))) :+ DeleteEntry(aD(aO))) :+ DeleteEntry(aH(aO))) :+ DeleteEntry(cD(aO, b))) :+ DeleteEntry(aI(Z, aO))) :+ DeleteEntry(cE(Z, aO, b))) :+ DeleteEntry(cF(cA))) :+ DeleteEntry(aN(aO))) :+ DeleteEntry(iB)) :+ DeleteEntry(cB(iC))) :+ Burn(fromBase58String(aO), 1)), dh, removeByIndex(iA, value(bK)), (cX._8 + hl), fj)
1662+ let iE = aF(aO)
1663+ let iF = valueOrElse(getString(iE), "")
1664+ $Tuple9(iA, iB, gL, hN, (((((((((((((cX._5 :+ DeleteEntry(aG(aO))) :+ DeleteEntry(aK(X, aO, b))) :+ DeleteEntry(cz(cA))) :+ DeleteEntry(aD(aO))) :+ DeleteEntry(aH(aO))) :+ DeleteEntry(cD(aO, b))) :+ DeleteEntry(aI(Z, aO))) :+ DeleteEntry(cE(Z, aO, b))) :+ DeleteEntry(cF(cA))) :+ DeleteEntry(aN(aO))) :+ DeleteEntry(iE)) :+ DeleteEntry(cB(iF))) :+ Burn(fromBase58String(aO), 1)), dh, removeByIndex(iD, value(bK)), (cX._8 + ho), fk)
16501665 }
16511666 }
16521667 }
16541669 }
16551670 }
16561671
1657- let fz = aX(r)
1658- let gj = fy(fz)
1672+ let fD = aX(r)
1673+ let gl = fC(fD)
16591674 let eu = split(valueOrElse(getString(bW()), "0_0_0_0_0_0"), "_")
1660- let iD = bX(b)
1661- let iE = getString(iD)
1662- let iF = if (isDefined(iE))
1663- then split_51C(value(iE), "_")
1675+ let iG = bX(b)
1676+ let iH = getString(iG)
1677+ let iI = if (isDefined(iH))
1678+ then split_51C(value(iH), "_")
16641679 else nil
16651680 let di = {
1666- let cZ = it
1681+ let cZ = iw
16671682 let da = size(cZ)
1668- let db = $Tuple9(is, 0, "", gj[az], nil, eu, iF, 0, split("0_0_0_0_0_0", "_"))
1683+ let db = $Tuple9(iv, 0, "", gl[az], nil, eu, iI, 0, split("0_0_0_0_0_0", "_"))
16691684 func dc (dd,de) = if ((de >= da))
16701685 then dd
1671- else iv(dd, cZ[de])
1686+ else iy(dd, cZ[de])
16721687
16731688 func df (dd,de) = if ((de >= da))
16741689 then dd
16761691
16771692 df(dc(dc(dc(dc(dc(db, 0), 1), 2), 3), 4), 5)
16781693 }
1679- let gJ = di._3
1680- let fd = valueOrErrorMessage(indexOf(ai, gJ), ("Unknown continent: " + gJ))
1681- let eC = fb(eU(toBigInt(gG)), fd)
1682- let gI = valueOrElse(getInteger(cy()), (cx + 1))
1683- let iG = toString(gI)
1684- let gK = Issue(cQ(iG, ir), makeString([iG, ir, eC, gJ], "_"), 1, 0, false)
1685- let aE = calculateAssetId(gK)
1686- let iH = toBase58String(aE)
1687- let hg = makeString(dj((iu > 0), split(gj[aA], "_"), iu), "_")
1688- let iI = bY(b)
1689- let iJ = valueOrElse(getInteger(iI), 0)
1694+ let gL = di._3
1695+ let fd = valueOrErrorMessage(indexOf(ai, gL), ("Unknown continent: " + gL))
1696+ let eC = fj(di._9, (ce(iu) / br))
1697+ let gK = valueOrElse(getInteger(cy()), (cx + 1))
1698+ let iJ = toString(gK)
1699+ let gM = Issue(cQ(iJ, iu), makeString([iJ, iu, eC, gL], "_"), 1, 0, false)
1700+ let aE = calculateAssetId(gM)
1701+ let iK = toBase58String(aE)
1702+ let hi = makeString(dj((ix > 0), split(gl[aA], "_"), ix), "_")
1703+ let iL = bY(b)
1704+ let iM = valueOrElse(getInteger(iL), 0)
16901705 $Tuple2((((((((((((((((di._5 :+ (if ((size(di._7) > 0))
1691- then StringEntry(iD, makeString_11C(di._7, "_"))
1692- else DeleteEntry(iD))) :+ IntegerEntry(iI, if ((di._8 > iJ))
1706+ then StringEntry(iG, makeString_11C(di._7, "_"))
1707+ else DeleteEntry(iG))) :+ IntegerEntry(iL, if ((di._8 > iM))
16931708 then 0
1694- else (iJ - di._8))) :+ IntegerEntry(cy(), (gI + 1))) :+ gK) :+ StringEntry(cz(iG), iH)) :+ StringEntry(aD(iH), b)) :+ StringEntry(cF(iG), b)) :+ IntegerEntry(aI(Z, iH), di._2)) :+ IntegerEntry(cE(Z, iH, b), di._2)) :+ IntegerEntry(aH(iH), R)) :+ IntegerEntry(cD(iH, b), R)) :+ StringEntry(fz, makeString([gj[ay], di._4, hg, gj[aB]], ":"))) :+ StringEntry(bW(), makeString(di._6, "_"))) :+ StringEntry(aY(r), makeString([gJ, "L", iH], "_"))) :+ ScriptTransfer(addressFromStringValue(b), 1, aE)), iH)
1695- }
1696-
1697-
1698-func iK (b,it,gG) = iq("M", 3, "SSSS", b, it, gG, 0)
1699-
1700-
1701-func iL (b,it,gG,dk,hP) = {
1702- let hS = (co * 4)
1709+ else (iM - di._8))) :+ IntegerEntry(cy(), (gK + 1))) :+ gM) :+ StringEntry(cz(iJ), iK)) :+ StringEntry(aD(iK), b)) :+ StringEntry(cF(iJ), b)) :+ IntegerEntry(aI(Z, iK), di._2)) :+ IntegerEntry(cE(Z, iK, b), di._2)) :+ IntegerEntry(aH(iK), R)) :+ IntegerEntry(cD(iK, b), R)) :+ StringEntry(fD, makeString([gl[ay], di._4, hi, gl[aB]], ":"))) :+ StringEntry(bW(), makeString(di._6, "_"))) :+ StringEntry(aY(r), makeString([gL, "L", iK], "_"))) :+ ScriptTransfer(addressFromStringValue(b), 1, aE)), iK)
1710+ }
1711+
1712+
1713+func iN (b,iw,gI) = it("M", 3, "SSSS", b, iw, gI, 0)
1714+
1715+
1716+func iO (b,iw,gI,dk,hS) = {
1717+ let hV = (co * 4)
17031718 if (if (!(dk))
1704- then (hP != hS)
1719+ then (hS != hV)
17051720 else false)
1706- then throw(("Payment attached should be " + toString(hS)))
1707- else iq("L", 4, "SMM", b, it, gG, (bm * 4))
1708- }
1709-
1710-
1711-func iM (b,it,gG,dk,hP) = {
1712- let hS = (co * 47)
1721+ then throw(("Payment attached should be " + toString(hV)))
1722+ else it("L", 4, "SMM", b, iw, gI, (bm * 4))
1723+ }
1724+
1725+
1726+func iP (b,iw,gI,dk,hS) = {
1727+ let hV = (co * 47)
17131728 if (if (!(dk))
1714- then (hP != hS)
1729+ then (hS != hV)
17151730 else false)
1716- then throw(("Payment attached should be " + toString(hS)))
1717- else iq("XL", 5, "SSSML", b, it, gG, (bm * 47))
1718- }
1719-
1720-
1721-func iN (b,it,gG,dk,hP) = {
1722- let hS = (co * 54)
1731+ then throw(("Payment attached should be " + toString(hV)))
1732+ else it("XL", 5, "SSSML", b, iw, gI, (bm * 47))
1733+ }
1734+
1735+
1736+func iQ (b,iw,gI,dk,hS) = {
1737+ let hV = (co * 54)
17231738 if (if (!(dk))
1724- then (hP != hS)
1739+ then (hS != hV)
17251740 else false)
1726- then throw(("Payment attached should be " + toString(hS)))
1727- else iq("XXL", 6, "LXL", b, it, gG, (bm * 54))
1728- }
1729-
1730-
1731-func iO (dk,b,hP,it,gG) = {
1732- let iP = {
1733- let bk = size(it)
1741+ then throw(("Payment attached should be " + toString(hV)))
1742+ else it("XXL", 6, "LXL", b, iw, gI, (bm * 54))
1743+ }
1744+
1745+
1746+func iR (dk,b,hS,iw,gI) = {
1747+ let iS = {
1748+ let bk = size(iw)
17341749 if ((4 == bk))
1735- then iK(b, it, gG)
1750+ then iN(b, iw, gI)
17361751 else if ((3 == bk))
1737- then iL(b, it, gG, dk, hP)
1752+ then iO(b, iw, gI, dk, hS)
17381753 else if ((5 == bk))
1739- then iM(b, it, gG, dk, hP)
1754+ then iP(b, iw, gI, dk, hS)
17401755 else if ((2 == bk))
1741- then iN(b, it, gG, dk, hP)
1756+ then iQ(b, iw, gI, dk, hS)
17421757 else throw("Unknown merge")
17431758 }
1744- iP
1745- }
1746-
1747-
1748-func iQ (ez) = if (if ((ez.originCaller != bL))
1759+ iS
1760+ }
1761+
1762+
1763+func iT (ez) = if (if ((ez.originCaller != bL))
17491764 then valueOrElse(getBoolean(aZ()), false)
17501765 else false)
17511766 then throw("Contracts are under maintenance")
17531768
17541769
17551770 @Callable(ez)
1756-func constructorV1 (iR) = if ((ez.caller != this))
1771+func constructorV1 (iU) = if ((ez.caller != this))
17571772 then throw("Permission denied")
1758- else [StringEntry(bF(), iR)]
1759-
1760-
1761-
1762-@Callable(ez)
1763-func setBlocked (iS) = if ((ez.caller != this))
1773+ else [StringEntry(bF(), iU)]
1774+
1775+
1776+
1777+@Callable(ez)
1778+func setBlocked (iV) = if ((ez.caller != this))
17641779 then throw("permission denied")
1765- else [BooleanEntry(aZ(), iS)]
1780+ else [BooleanEntry(aZ(), iV)]
17661781
17671782
17681783
17691784 @Callable(ez)
17701785 func stakeLand () = {
1771- let iT = iQ(ez)
1786+ let iW = iT(ez)
17721787 if ((size(ez.payments) != 1))
17731788 then throw("Exactly one payment required")
17741789 else {
1775- let iU = value(ez.payments[0])
1776- let aE = value(iU.assetId)
1790+ let iX = value(ez.payments[0])
1791+ let aE = value(iX.assetId)
17771792 let by = toString(ez.caller)
1778- if ((iU.amount != 1))
1793+ if ((iX.amount != 1))
17791794 then throw((("NFT " + X) + " token should be attached as payment"))
17801795 else {
1781- let hw = value(assetInfo(aE))
1782- if ((hw.issuer != this))
1796+ let hz = value(assetInfo(aE))
1797+ if ((hz.issuer != this))
17831798 then throw("Unknown issuer of token")
1784- else if (!(contains(hw.name, X)))
1799+ else if (!(contains(hz.name, X)))
17851800 then throw((("Only NFT " + X) + " tokens are accepted"))
17861801 else {
1787- let iV = drop(hw.name, 4)
1788- let cA = if (contains(iV, "XXL"))
1789- then dropRight(iV, 3)
1790- else if (contains(iV, "XL"))
1791- then dropRight(iV, 2)
1792- else dropRight(iV, 1)
1802+ let iY = drop(hz.name, 4)
1803+ let cA = if (contains(iY, "XXL"))
1804+ then dropRight(iY, 3)
1805+ else if (contains(iY, "XL"))
1806+ then dropRight(iY, 2)
1807+ else dropRight(iY, 1)
17931808 if (!(isDefined(parseInt(cA))))
1794- then throw(("Cannot parse land number from " + hw.name))
1809+ then throw(("Cannot parse land number from " + hz.name))
17951810 else {
17961811 let aO = toBase58String(aE)
1797- let hx = aG(aO)
1798- if (isDefined(getInteger(hx)))
1799- then throw((("NFT " + hw.name) + " is already staked"))
1812+ let hA = aG(aO)
1813+ if (isDefined(getInteger(hA)))
1814+ then throw((("NFT " + hz.name) + " is already staked"))
18001815 else {
1801- let hA = split(hw.description, "_")
1802- let ev = eB(hA[bR])
1803- let hl = ce(hA[bQ])
1804- let dh = eA(ev, (hl / br), 1)
1805- let hm = valueOrElse(getInteger(aI(Z, aO)), 0)
1806- let iD = bX(by)
1807- let iE = getString(iD)
1808- let iA = if (isDefined(iE))
1809- then split_51C(value(iE), "_")
1816+ let hD = split(hz.description, "_")
1817+ let ev = eB(hD[bR])
1818+ let ho = ce(hD[bQ])
1819+ let dh = eA(ev, (ho / br), 1)
1820+ let hp = valueOrElse(getInteger(aI(Z, aO)), 0)
1821+ let iG = bX(by)
1822+ let iH = getString(iG)
1823+ let iD = if (isDefined(iH))
1824+ then split_51C(value(iH), "_")
18101825 else nil
1811- if (containsElement(iA, aO))
1826+ if (containsElement(iD, aO))
18121827 then throw(("Your staked lands already contain " + aO))
18131828 else {
1814- let fS = valueOrElse(getInteger(aH(aO)), 0)
1815- let iI = bY(by)
1816- let iW = valueOrElse(getInteger(iI), 0)
1817- let iX = cc(invoke(bO, "onStakeUnstakeLand", [by], nil))
1818- $Tuple2([IntegerEntry(hx, lastBlock.timestamp), IntegerEntry(aK(X, aO, by), lastBlock.timestamp), StringEntry(iD, makeString_11C((iA :+ aO), "_")), IntegerEntry(iI, (iW + hl)), StringEntry(aD(aO), by), StringEntry(cF(cA), by), IntegerEntry(cE(Z, aO, by), hm), IntegerEntry(cD(aO, by), fS), StringEntry(bW(), dh), iT], iX)
1829+ let fU = valueOrElse(getInteger(aH(aO)), 0)
1830+ let iL = bY(by)
1831+ let iZ = valueOrElse(getInteger(iL), 0)
1832+ let ja = cc(invoke(bO, "onStakeUnstakeLand", [by], nil))
1833+ $Tuple2([IntegerEntry(hA, lastBlock.timestamp), IntegerEntry(aK(X, aO, by), lastBlock.timestamp), StringEntry(iG, makeString_11C((iD :+ aO), "_")), IntegerEntry(iL, (iZ + ho)), StringEntry(aD(aO), by), StringEntry(cF(cA), by), IntegerEntry(cE(Z, aO, by), hp), IntegerEntry(cD(aO, by), fU), StringEntry(bW(), dh), iW], ja)
18191834 }
18201835 }
18211836 }
18271842
18281843
18291844 @Callable(ez)
1830-func unstakeLand (hr) = {
1831- let iT = iQ(ez)
1845+func unstakeLand (hu) = {
1846+ let iW = iT(ez)
18321847 if ((size(ez.payments) != 0))
18331848 then throw("No payments required")
18341849 else {
18351850 let b = toString(ez.caller)
1836- let eb = hp(b, cK, hr)
1851+ let eb = hs(b, cK, hu)
18371852 let aO = eb._2
1838- let iD = bX(b)
1853+ let iG = bX(b)
18391854 let ev = eB(eb._3[bR])
1840- let hl = ce(eb._3[bQ])
1841- let dh = eA(ev, (hl / br), -1)
1842- let hU = hN(b, aO, hl, cK)
1843- let iA = split_51C(valueOrElse(getString(iD), ""), "_")
1844- let bK = indexOf(iA, aO)
1855+ let ho = ce(eb._3[bQ])
1856+ let dh = eA(ev, (ho / br), -1)
1857+ let hX = hQ(b, aO, ho, cK)
1858+ let iD = split_51C(valueOrElse(getString(iG), ""), "_")
1859+ let bK = indexOf(iD, aO)
18451860 if (!(isDefined(bK)))
18461861 then throw(("Your staked lands don't contain " + aO))
18471862 else {
1848- let iY = lastBlock.timestamp
1849- let iZ = valueOrElse(getInteger(bN, ba(b)), 0)
1850- if ((iZ >= iY))
1851- then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(iZ)))
1863+ let jb = lastBlock.timestamp
1864+ let jc = valueOrElse(getInteger(bN, ba(b)), 0)
1865+ if ((jc >= jb))
1866+ then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(jc)))
18521867 else {
1853- let ja = (valueOrElse(getInteger(bO, a(b)), 0) + bn)
1854- if ((ja > iY))
1855- then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString(ja)))
1868+ let jd = (valueOrElse(getInteger(bO, a(b)), 0) + bn)
1869+ if ((jd > jb))
1870+ then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString(jd)))
18561871 else {
1857- let iI = bY(b)
1858- let iJ = valueOrElse(getInteger(iI), 0)
1859- let jb = if ((hl > iJ))
1872+ let iL = bY(b)
1873+ let iM = valueOrElse(getInteger(iL), 0)
1874+ let je = if ((ho > iM))
18601875 then 0
1861- else (iJ - hl)
1862- let iX = cc(invoke(bO, "onStakeUnstakeLand", [b], nil))
1863- $Tuple2([ScriptTransfer(ez.caller, 1, fromBase58String(aO)), DeleteEntry(aG(aO)), DeleteEntry(aK(X, aO, b)), StringEntry(bW(), dh), StringEntry(hU._2, makeString(hU._3, ":")), if ((size(iA) > 1))
1864- then StringEntry(iD, makeString_11C(removeByIndex(iA, value(bK)), "_"))
1865- else DeleteEntry(iD), IntegerEntry(iI, jb), iT], iX)
1876+ else (iM - ho)
1877+ let ja = cc(invoke(bO, "onStakeUnstakeLand", [b], nil))
1878+ $Tuple2([ScriptTransfer(ez.caller, 1, fromBase58String(aO)), DeleteEntry(aG(aO)), DeleteEntry(aK(X, aO, b)), StringEntry(bW(), dh), StringEntry(hX._2, makeString(hX._3, ":")), if ((size(iD) > 1))
1879+ then StringEntry(iG, makeString_11C(removeByIndex(iD, value(bK)), "_"))
1880+ else DeleteEntry(iG), IntegerEntry(iL, je), iW], ja)
18661881 }
18671882 }
18681883 }
18731888
18741889 @Callable(ez)
18751890 func stakeDuck () = {
1876- let iT = iQ(ez)
1891+ let iW = iT(ez)
18771892 if ((size(ez.payments) != 1))
18781893 then throw("Exactly one payment required")
18791894 else {
1880- let iU = value(ez.payments[0])
1881- let aE = value(iU.assetId)
1895+ let iX = value(ez.payments[0])
1896+ let aE = value(iX.assetId)
18821897 let by = toString(ez.caller)
1883- if ((iU.amount != 1))
1898+ if ((iX.amount != 1))
18841899 then throw((("NFT " + Y) + " token should be attached as payment"))
18851900 else {
1886- let hw = value(assetInfo(aE))
1887- if (if ((hw.issuer != ch))
1888- then (hw.issuer != ci)
1901+ let hz = value(assetInfo(aE))
1902+ if (if ((hz.issuer != ch))
1903+ then (hz.issuer != ci)
18891904 else false)
18901905 then throw((("Unknown issuer of " + Y) + " token"))
1891- else if (!(contains(hw.name, Y)))
1906+ else if (!(contains(hz.name, Y)))
18921907 then throw((("Only NFT " + Y) + " tokens are accepted"))
18931908 else {
1894- let jc = toBase58String(aE)
1895- let hx = aG(jc)
1896- if (isDefined(getInteger(hx)))
1897- then throw((("NFT " + hw.name) + " is already staked"))
1909+ let jf = toBase58String(aE)
1910+ let hA = aG(jf)
1911+ if (isDefined(getInteger(hA)))
1912+ then throw((("NFT " + hz.name) + " is already staked"))
18981913 else if (isDefined(getString(aW(by))))
1899- then throw(("You already staked one duck: " + hw.name))
1914+ then throw(("You already staked one duck: " + hz.name))
19001915 else {
1901- let jd = aY(jc)
1902- let je = getString(jd)
1903- let fz = aX(jc)
1904- let jf = getString(fz)
1905- let gY = q(jc)
1906- let gZ = M(valueOrElse(getInteger(u(jc)), 0))
1907- let jg = valueOrElse(getInteger(gY), gZ)
1908- ([IntegerEntry(hx, lastBlock.timestamp), IntegerEntry(aK(Y, toBase58String(aE), by), lastBlock.timestamp), StringEntry(aV(jc), by), StringEntry(aW(by), jc)] ++ (if (isDefined(je))
1916+ let jg = aY(jf)
1917+ let jh = getString(jg)
1918+ let fD = aX(jf)
1919+ let ji = getString(fD)
1920+ let ha = q(jf)
1921+ let hb = M(valueOrElse(getInteger(u(jf)), 0))
1922+ let jj = valueOrElse(getInteger(ha), hb)
1923+ ([IntegerEntry(hA, lastBlock.timestamp), IntegerEntry(aK(Y, toBase58String(aE), by), lastBlock.timestamp), StringEntry(aV(jf), by), StringEntry(aW(by), jf)] ++ (if (isDefined(jh))
19091924 then nil
1910- else ([StringEntry(jd, ae)] ++ (if (isDefined(jf))
1925+ else ([StringEntry(jg, ae)] ++ (if (isDefined(ji))
19111926 then nil
1912- else (([StringEntry(fz, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(gY, jg)) :+ iT)))))
1927+ else (([StringEntry(fD, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(ha, jj)) :+ iW)))))
19131928 }
19141929 }
19151930 }
19191934
19201935
19211936 @Callable(ez)
1922-func unstakeDuck (jc) = {
1923- let iT = iQ(ez)
1937+func unstakeDuck (jf) = {
1938+ let iW = iT(ez)
19241939 if ((size(ez.payments) != 0))
19251940 then throw("No payments required")
19261941 else {
1927- let aE = fromBase58String(jc)
1942+ let aE = fromBase58String(jf)
19281943 let by = toString(ez.caller)
1929- let hw = value(assetInfo(aE))
1930- let hx = aG(toBase58String(aE))
1931- if (!(isDefined(getInteger(hx))))
1932- then throw((("NFT " + hw.name) + " is not staked"))
1944+ let hz = value(assetInfo(aE))
1945+ let hA = aG(toBase58String(aE))
1946+ if (!(isDefined(getInteger(hA))))
1947+ then throw((("NFT " + hz.name) + " is not staked"))
19331948 else if (!(isDefined(getString(aW(by)))))
1934- then throw((("The duck " + hw.name) + " is not staked"))
1949+ then throw((("The duck " + hz.name) + " is not staked"))
19351950 else {
1936- let hz = valueOrErrorMessage(getString(aV(toBase58String(aE))), (("NFT " + hw.name) + " is orphaned"))
1937- if ((hz != by))
1951+ let hC = valueOrErrorMessage(getString(aV(toBase58String(aE))), (("NFT " + hz.name) + " is orphaned"))
1952+ if ((hC != by))
19381953 then throw("Staked NFT is not yours")
19391954 else {
1940- let gY = q(jc)
1941- let gZ = M(valueOrElse(getInteger(u(jc)), 0))
1942- let W = valueOrElse(getInteger(gY), gZ)
1943- if ((gZ > W))
1944- then throw((("Please heal your duck to " + toString(gZ)) + "hp before unstaking"))
1945- else [ScriptTransfer(ez.caller, 1, aE), DeleteEntry(hx), DeleteEntry(gY), DeleteEntry(aY(jc)), DeleteEntry(aV(jc)), DeleteEntry(aK(Y, jc, by)), DeleteEntry(aW(by)), iT]
1955+ let ha = q(jf)
1956+ let hb = M(valueOrElse(getInteger(u(jf)), 0))
1957+ let W = valueOrElse(getInteger(ha), hb)
1958+ if ((hb > W))
1959+ then throw((("Please heal your duck to " + toString(hb)) + "hp before unstaking"))
1960+ else [ScriptTransfer(ez.caller, 1, aE), DeleteEntry(hA), DeleteEntry(ha), DeleteEntry(aY(jf)), DeleteEntry(aV(jf)), DeleteEntry(aK(Y, jf, by)), DeleteEntry(aW(by)), iW]
19461961 }
19471962 }
19481963 }
19511966
19521967
19531968 @Callable(ez)
1954-func claimRes (gf,jh) = {
1955- let iT = iQ(ez)
1969+func claimRes (gh,jk) = {
1970+ let iW = iT(ez)
19561971 if ((size(ez.payments) != 0))
19571972 then throw("No payments required")
19581973 else {
19591974 let b = toString(ez.originCaller)
1960- let dp = hB(b, gf, cK, jh)
1975+ let dp = hE(b, gh, cK, jk)
19611976 let r = valueOrErrorMessage(getString(aW(b)), "You don't have a duck staked")
1962- $Tuple2(((((dp._1 ++ ia(r, fraction(A, gf, bq))._1) :+ StringEntry(dp._2, makeString(dp._3, ":"))) :+ StringEntry(dp._4, makeString(dp._5, ":"))) :+ iT), dp._3[az])
1963- }
1964- }
1965-
1966-
1967-
1968-@Callable(ez)
1969-func claimResToWH (gf,jh) = {
1970- let iT = iQ(ez)
1977+ $Tuple2(((((dp._1 ++ id(r, fraction(A, gh, bq))._1) :+ StringEntry(dp._2, makeString(dp._3, ":"))) :+ StringEntry(dp._4, makeString(dp._5, ":"))) :+ iW), dp._3[az])
1978+ }
1979+ }
1980+
1981+
1982+
1983+@Callable(ez)
1984+func claimResToWH (gh,jk) = {
1985+ let iW = iT(ez)
19711986 if ((size(ez.payments) != 0))
19721987 then throw("No payments required")
19731988 else {
19741989 let b = toString(ez.originCaller)
1975- let dp = hB(b, gf, cJ, jh)
1976- $Tuple2(((((dp._1 ++ ig(b, fraction(A, gf, bq))._1) :+ StringEntry(dp._2, makeString(dp._3, ":"))) :+ StringEntry(dp._4, makeString(dp._5, ":"))) :+ iT), dp._5[aq])
1977- }
1978- }
1979-
1980-
1981-
1982-@Callable(ez)
1983-func flight (gN,gO) = {
1984- let iT = iQ(ez)
1990+ let dp = hE(b, gh, cJ, jk)
1991+ $Tuple2(((((dp._1 ++ ij(b, fraction(A, gh, bq))._1) :+ StringEntry(dp._2, makeString(dp._3, ":"))) :+ StringEntry(dp._4, makeString(dp._5, ":"))) :+ iW), dp._5[aq])
1992+ }
1993+ }
1994+
1995+
1996+
1997+@Callable(ez)
1998+func flight (gP,gQ) = {
1999+ let iW = iT(ez)
19852000 if ((size(ez.payments) != 0))
19862001 then throw("No payments required")
19872002 else {
19882003 let bb = toString(ez.caller)
1989- let fe = gM(bb, gN, gO)
2004+ let fe = gO(bb, gP, gQ)
19902005 let r = fe._2
1991- let jd = aY(r)
1992- let ht = valueOrElse(getString(jd), ae)
1993- if ((fe._4 == ht))
2006+ let jg = aY(r)
2007+ let hw = valueOrElse(getString(jg), ae)
2008+ if ((fe._4 == hw))
19942009 then throw("You can't fly to the same location")
19952010 else {
1996- let hh = w(r)
1997- let hi = valueOrElse(getString(hh), ",;,_,;,_,;,_,;,_,;,_,;,")
1998- let hj = dq(hi, fe._5)
1999- $Tuple2(([StringEntry(jd, if ((fe._1 > 0))
2011+ let hj = w(r)
2012+ let hk = valueOrElse(getString(hj), ",;,_,;,_,;,_,;,_,;,_,;,")
2013+ let hl = dq(hk, fe._5)
2014+ $Tuple2(([StringEntry(jg, if ((fe._1 > 0))
20002015 then fe._4
2001- else ht), StringEntry(hh, hj), IntegerEntry(q(r), fe._1), iT] ++ ia(r, if ((fe._1 > 0))
2016+ else hw), StringEntry(hj, hl), IntegerEntry(q(r), fe._1), iW] ++ id(r, if ((fe._1 > 0))
20022017 then B
20032018 else C)._1), fe._3)
20042019 }
20082023
20092024
20102025 @Callable(ez)
2011-func heal (ji,jj,jk) = {
2012- let iT = iQ(ez)
2013- if (if (if ((0 > ji))
2026+func heal (jl,jm,jn) = {
2027+ let iW = iT(ez)
2028+ if (if (if ((0 > jl))
20142029 then true
2015- else (0 > jj))
2030+ else (0 > jm))
20162031 then true
2017- else (0 > jk))
2032+ else (0 > jn))
20182033 then throw("Quantity cannot be negative")
20192034 else {
20202035 let r = valueOrErrorMessage(getString(aW(toString(ez.caller))), "You don't have a duck staked")
2021- let jl = [ji, jj, jk]
2022- let gY = q(r)
2023- let gZ = M(valueOrElse(getInteger(u(r)), 0))
2024- let jm = valueOrElse(getInteger(gY), gZ)
2025- if ((jm >= gZ))
2026- then throw((("HP should be < " + toString(gZ)) + " to heal"))
2036+ let jo = [jl, jm, jn]
2037+ let ha = q(r)
2038+ let hb = M(valueOrElse(getInteger(u(r)), 0))
2039+ let jp = valueOrElse(getInteger(ha), hb)
2040+ if ((jp >= hb))
2041+ then throw((("HP should be < " + toString(hb)) + " to heal"))
20272042 else {
2028- let fz = aX(r)
2029- let gj = fy(fz)
2030- let jn = if ((gj[aB] == ""))
2043+ let fD = aX(r)
2044+ let gl = fC(fD)
2045+ let jq = if ((gl[aB] == ""))
20312046 then nil
2032- else split(gj[aB], "_")
2033- func jo (cX,jp) = {
2047+ else split(gl[aB], "_")
2048+ func jr (cX,js) = {
20342049 let cd = cX._2
2035- let eV = if ((size(jn) > cd))
2036- then parseIntValue(jn[cd])
2050+ let eV = if ((size(jq) > cd))
2051+ then parseIntValue(jq[cd])
20372052 else 0
20382053 if ((3 > cd))
20392054 then {
2040- let jq = jl[cd]
2041- if ((jq > eV))
2055+ let jt = jo[cd]
2056+ if ((jt > eV))
20422057 then throw(((("You have only " + toString(eV)) + " of ") + ah[cd]))
2043- else $Tuple3((cX._1 :+ toString((eV - jq))), (cd + 1), (cX._3 + (ck[cd] * jq)))
2058+ else $Tuple3((cX._1 :+ toString((eV - jt))), (cd + 1), (cX._3 + (ck[cd] * jt)))
20442059 }
20452060 else $Tuple3((cX._1 :+ toString(eV)), (cd + 1), cX._3)
20462061 }
20512066 let db = $Tuple3(nil, 0, 0)
20522067 func dc (dd,de) = if ((de >= da))
20532068 then dd
2054- else jo(dd, cZ[de])
2069+ else jr(dd, cZ[de])
20552070
20562071 func df (dd,de) = if ((de >= da))
20572072 then dd
20592074
20602075 df(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(db, 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)
20612076 }
2062- let jr = min([gZ, (jm + dp._3)])
2063- $Tuple2(([IntegerEntry(gY, jr), StringEntry(fz, makeString_2C([gj[ay], gj[az], gj[aA], makeString(dp._1, "_")], ":")), iT] ++ ia(r, (J * ((ji + jj) + jk)))._1), jr)
2077+ let ju = min([hb, (jp + dp._3)])
2078+ $Tuple2(([IntegerEntry(ha, ju), StringEntry(fD, makeString_2C([gl[ay], gl[az], gl[aA], makeString(dp._1, "_")], ":")), iW] ++ id(r, (J * ((jl + jm) + jn)))._1), ju)
20642079 }
20652080 }
20662081 }
20692084
20702085 @Callable(ez)
20712086 func healES () = {
2072- let iT = iQ(ez)
2087+ let iW = iT(ez)
20732088 if ((size(ez.payments) != 1))
20742089 then throw("Exactly one payment required")
20752090 else {
2076- let iU = value(ez.payments[0])
2077- if ((iU.assetId != bj))
2091+ let iX = value(ez.payments[0])
2092+ if ((iX.assetId != bj))
20782093 then throw("Allowed USDT payment only!")
20792094 else {
20802095 let r = valueOrErrorMessage(getString(aW(toString(ez.caller))), "You don't have a duck staked")
2081- let gY = q(r)
2082- let gZ = M(valueOrElse(getInteger(u(r)), 0))
2083- let jm = valueOrElse(getInteger(gY), gZ)
2084- if ((jm > 0))
2096+ let ha = q(r)
2097+ let hb = M(valueOrElse(getInteger(u(r)), 0))
2098+ let jp = valueOrElse(getInteger(ha), hb)
2099+ if ((jp > 0))
20852100 then throw("HP should be 0 to call Emergency Service")
20862101 else {
2087- let fz = aX(r)
2088- let gj = fy(fz)
2089- let jn = if ((gj[aB] == ""))
2102+ let fD = aX(r)
2103+ let gl = fC(fD)
2104+ let jq = if ((gl[aB] == ""))
20902105 then nil
2091- else split(gj[aB], "_")
2092- let js = if ((size(jn) > 0))
2093- then parseIntValue(jn[0])
2106+ else split(gl[aB], "_")
2107+ let jv = if ((size(jq) > 0))
2108+ then parseIntValue(jq[0])
20942109 else 0
2095- let jt = if ((size(jn) > 1))
2096- then parseIntValue(jn[1])
2110+ let jw = if ((size(jq) > 1))
2111+ then parseIntValue(jq[1])
20972112 else 0
2098- let ju = if ((size(jn) > 2))
2099- then parseIntValue(jn[2])
2113+ let jx = if ((size(jq) > 2))
2114+ then parseIntValue(jq[2])
21002115 else 0
2101- if (if (if ((js > 0))
2116+ if (if (if ((jv > 0))
21022117 then true
2103- else (jt > 0))
2118+ else (jw > 0))
21042119 then true
2105- else (ju > 0))
2120+ else (jx > 0))
21062121 then throw("You have to use own Medical Kit")
21072122 else {
2108- let jv = getString(bM, bc())
2109- let jw = if (isDefined(jv))
2110- then split(value(jv), "_")
2123+ let jy = getString(bM, bc())
2124+ let jz = if (isDefined(jy))
2125+ then split(value(jy), "_")
21112126 else nil
2112- let jx = if ((size(jw) > 0))
2113- then parseIntValue(jw[0])
2127+ let jA = if ((size(jz) > 0))
2128+ then parseIntValue(jz[0])
21142129 else 0
2115- if ((0 >= jx))
2130+ if ((0 >= jA))
21162131 then throw("There are no Medical Kits L1 at Emergency Service storage")
21172132 else {
2118- let jr = (jm + ck[0])
2119- let jy = makeString([toString((jx - 1)), removeByIndex(jw, 0)], "_")
2133+ let ju = (jp + ck[0])
2134+ let jB = makeString([toString((jA - 1)), removeByIndex(jz, 0)], "_")
21202135 let bg = split(ak[0], "_")
2121- let jz = bf(bg)
2122- let jA = fraction((jz * ag), af, (bq * ao))
2123- if ((iU.amount != jA))
2124- then throw(("Payment attached should be " + toString(jA)))
2136+ let jC = bf(bg)
2137+ let jD = fraction((jC * ag), af, (bq * ao))
2138+ if ((iX.amount != jD))
2139+ then throw(("Payment attached should be " + toString(jD)))
21252140 else {
2126- let dp = bZ(invoke(bM, "updateEsStorage", [jy], [AttachedPayment(bj, jA)]))
2127- $Tuple2(([IntegerEntry(gY, jr), iT] ++ ia(r, D)._1), dp)
2141+ let dp = bZ(invoke(bM, "updateEsStorage", [jB], [AttachedPayment(bj, jD)]))
2142+ $Tuple2(([IntegerEntry(ha, ju), iW] ++ id(r, D)._1), dp)
21282143 }
21292144 }
21302145 }
21362151
21372152
21382153 @Callable(ez)
2139-func updateBackpack (r,jB) = if ((ez.caller != bM))
2154+func updateBackpack (r,jE) = if ((ez.caller != bM))
21402155 then throw("permission denied")
2141- else $Tuple2([StringEntry(aX(r), jB)], jB)
2142-
2143-
2144-
2145-@Callable(ez)
2146-func commitFor (jC) = {
2147- let iT = iQ(ez)
2148- let jD = (height + bT)
2156+ else $Tuple2([StringEntry(aX(r), jE)], jE)
2157+
2158+
2159+
2160+@Callable(ez)
2161+func commitFor (jF) = {
2162+ let iW = iT(ez)
2163+ let jG = (height + bT)
21492164 let b = toString(ez.caller)
2150- $Tuple2(([IntegerEntry(bV(b), jD), IntegerEntry(bU(b), jC)] :+ iT), jD)
2165+ $Tuple2(([IntegerEntry(bV(b), jG), IntegerEntry(bU(b), jF)] :+ iW), jG)
21512166 }
21522167
21532168
21542169
21552170 @Callable(ez)
21562171 func buySLand () = {
2157- let iT = iQ(ez)
2172+ let iW = iT(ez)
21582173 if ((size(ez.payments) != 1))
21592174 then throw("Exactly one payment required")
21602175 else {
2161- let iU = value(ez.payments[0])
2162- if ((iU.assetId != bj))
2176+ let iX = value(ez.payments[0])
2177+ if ((iX.assetId != bj))
21632178 then throw("Allowed USDT payment only!")
2164- else if ((iU.amount != cq))
2179+ else if ((iX.amount != cq))
21652180 then throw(("Payment attached should be " + toString(cq)))
21662181 else {
2167- let dp = gE(ez.caller, ez.transactionId)
2168- $Tuple2((((dp._1 :+ ScriptTransfer(bM, iU.amount, bj)) ++ ig(toString(ez.caller), F)._1) :+ iT), dp._2._1)
2182+ let dp = gG(ez.caller, ez.transactionId)
2183+ $Tuple2((((dp._1 :+ ScriptTransfer(bM, iX.amount, bj)) ++ ij(toString(ez.caller), F)._1) :+ iW), dp._2._1)
21692184 }
21702185 }
21712186 }
21732188
21742189
21752190 @Callable(ez)
2176-func expedition (gN,gO) = {
2177- let iT = iQ(ez)
2191+func expedition (gP,gQ) = {
2192+ let iW = iT(ez)
21782193 if ((size(ez.payments) != 0))
21792194 then throw("No payments required")
21802195 else {
2181- let dp = he(ez.caller, ez.transactionId, gN, gO)
2196+ let dp = hg(ez.caller, ez.transactionId, gP, gQ)
21822197 let r = valueOrErrorMessage(getString(aW(toString(ez.caller))), "You don't have a duck staked")
2183- $Tuple2(((dp._1 ++ ia(r, F)._1) :+ iT), $Tuple2(dp._2, dp._3))
2198+ $Tuple2(((dp._1 ++ id(r, F)._1) :+ iW), $Tuple2(dp._2, dp._3))
21842199 }
21852200 }
21862201
21882203
21892204 @Callable(ez)
21902205 func upgradeInfra (aO) = {
2191- let iT = iQ(ez)
2206+ let iW = iT(ez)
21922207 if ((size(ez.payments) != 0))
21932208 then throw("No payments required")
21942209 else {
2195- let dp = hO(true, ez.caller, 0, aO)
2210+ let dp = hR(true, ez.caller, 0, aO)
21962211 let r = valueOrErrorMessage(getString(aW(toString(ez.caller))), "You don't have a duck staked")
2197- $Tuple2(((dp._1 :+ iT) ++ ia(r, fraction(G, dp._3, bq))._1), dp._2)
2212+ $Tuple2(((dp._1 :+ iW) ++ id(r, fraction(G, dp._3, bq))._1), dp._2)
21982213 }
21992214 }
22002215
22042219 func upgradeInfraUsdt (aO) = if ((ez.caller != this))
22052220 then throw("Permission denied")
22062221 else {
2207- let iT = iQ(ez)
2222+ let iW = iT(ez)
22082223 if ((size(ez.payments) != 1))
22092224 then throw("Exactly one payment required")
22102225 else {
2211- let iU = value(ez.payments[0])
2212- if ((iU.assetId != bj))
2226+ let iX = value(ez.payments[0])
2227+ if ((iX.assetId != bj))
22132228 then throw("Allowed USDT payment only!")
22142229 else {
2215- let dp = hO(false, ez.caller, iU.amount, aO)
2216- $Tuple2(((dp._1 :+ ScriptTransfer(bM, iU.amount, bj)) :+ iT), dp._2)
2230+ let dp = hR(false, ez.caller, iX.amount, aO)
2231+ $Tuple2(((dp._1 :+ ScriptTransfer(bM, iX.amount, bj)) :+ iW), dp._2)
22172232 }
22182233 }
22192234 }
22212236
22222237
22232238 @Callable(ez)
2224-func activateArtifact (jE,jF) = {
2225- let iT = iQ(ez)
2239+func activateArtifact (jH,jI) = {
2240+ let iW = iT(ez)
22262241 if ((size(ez.payments) != 0))
22272242 then throw("No payments required")
22282243 else {
22292244 let b = toString(ez.caller)
22302245 let dp = {
2231- let bk = jE
2246+ let bk = jH
22322247 if (("PRESALE" == bk))
2233- then io(b, jF)
2248+ then ir(b, jI)
22342249 else if (("ONBOARD" == bk))
2235- then ih(b)
2250+ then ik(b)
22362251 else throw("Unknown artifact")
22372252 }
2238- (dp :+ iT)
2239- }
2240- }
2241-
2242-
2243-
2244-@Callable(ez)
2245-func mergeLands (it) = {
2246- let iT = iQ(ez)
2253+ (dp :+ iW)
2254+ }
2255+ }
2256+
2257+
2258+
2259+@Callable(ez)
2260+func mergeLands (iw) = {
2261+ let iW = iT(ez)
22472262 if ((size(ez.payments) != 0))
22482263 then throw("No payments required")
22492264 else {
2250- let dp = iO(true, toString(ez.caller), 0, it, ez.transactionId)
2251- $Tuple2(((dp._1 :+ iT) ++ ig(toString(ez.caller), H)._1), dp._2)
2252- }
2253- }
2254-
2255-
2256-
2257-@Callable(ez)
2258-func mergeLandsUsdt (it) = {
2259- let iT = iQ(ez)
2265+ let dp = iR(true, toString(ez.caller), 0, iw, ez.transactionId)
2266+ $Tuple2(((dp._1 :+ iW) ++ ij(toString(ez.caller), H)._1), dp._2)
2267+ }
2268+ }
2269+
2270+
2271+
2272+@Callable(ez)
2273+func mergeLandsUsdt (iw) = {
2274+ let iW = iT(ez)
22602275 if ((size(ez.payments) != 1))
22612276 then throw("Exactly one payment required")
22622277 else {
2263- let iU = value(ez.payments[0])
2264- if ((iU.assetId != bj))
2278+ let iX = value(ez.payments[0])
2279+ if ((iX.assetId != bj))
22652280 then throw("Allowed USDT payment only!")
22662281 else {
2267- let dp = iO(false, toString(ez.caller), iU.amount, it, ez.transactionId)
2268- $Tuple2(((dp._1 :+ ScriptTransfer(bM, iU.amount, bj)) :+ iT), dp._2)
2282+ let dp = iR(false, toString(ez.caller), iX.amount, iw, ez.transactionId)
2283+ $Tuple2(((dp._1 :+ ScriptTransfer(bM, iX.amount, bj)) :+ iW), dp._2)
22692284 }
22702285 }
22712286 }
22732288
22742289
22752290 @Callable(ez)
2276-func cargoExchange (jG,aO) = {
2277- let iT = iQ(ez)
2291+func cargoExchange (jJ,aO) = {
2292+ let iW = iT(ez)
22782293 if ((size(ez.payments) != 0))
22792294 then throw("No payments required")
22802295 else {
2281- let gi = split_4C(jG, ":")
2296+ let gk = split_4C(jJ, ":")
22822297 let b = toString(ez.originCaller)
2283- let hw = value(assetInfo(fromBase58String(aO)))
2284- let hx = aG(aO)
2285- if (!(isDefined(getInteger(hx))))
2286- then throw((hw.name + " is not staked"))
2298+ let hz = value(assetInfo(fromBase58String(aO)))
2299+ let hA = aG(aO)
2300+ if (!(isDefined(getInteger(hA))))
2301+ then throw((hz.name + " is not staked"))
22872302 else {
2288- let hz = valueOrErrorMessage(getString(aD(aO)), (("NFT " + hw.name) + " is orphaned"))
2289- if ((hz != b))
2303+ let hC = valueOrErrorMessage(getString(aD(aO)), (("NFT " + hz.name) + " is orphaned"))
2304+ if ((hC != b))
22902305 then throw((X + " is not yours"))
22912306 else {
2292- let fR = (ce(split(hw.description, "_")[bQ]) / br)
2293- let fS = valueOrElse(getInteger(aH(aO)), 0)
2307+ let fT = (ce(split(hz.description, "_")[bQ]) / br)
2308+ let fU = valueOrElse(getInteger(aH(aO)), 0)
22942309 let r = valueOrErrorMessage(getString(aW(b)), "You don't have a duck staked")
2295- let ht = valueOrElse(getString(aY(r)), ae)
2296- let hu = split(value(ht), "_")
2297- if ((hu[bd] != "L"))
2298- then throw((("Duck location type is " + hu[bd]) + ", but should be L"))
2299- else if ((hu[be] != aO))
2310+ let hw = valueOrElse(getString(aY(r)), ae)
2311+ let hx = split(value(hw), "_")
2312+ if ((hx[bd] != "L"))
2313+ then throw((("Duck location type is " + hx[bd]) + ", but should be L"))
2314+ else if ((hx[be] != aO))
23002315 then throw(("Duck should be on the land " + aO))
23012316 else {
2302- let fQ = aN(aO)
2303- let fE = fP(fQ, fR, fS)
2304- let fz = aX(r)
2305- let gj = fy(fz)
2306- let dp = gh(gi, fE, gj)
2307- let fY = split(fE[at], "_")
2308- let hL = (parseIntValue(fY[av]) + dp._7)
2309- let hM = (parseIntValue(fY[aw]) - dp._7)
2310-[StringEntry(fz, makeString_2C([gj[ay], dp._4, dp._5, dp._6], ":")), StringEntry(fQ, makeString_2C([fE[ap], dp._1, dp._2, dp._3, makeString([fY[au], toString(hL), toString(hM), fY[ax]], "_")], ":")), iT]
2317+ let fS = aN(aO)
2318+ let fI = fR(fS, fT, fU)
2319+ let fD = aX(r)
2320+ let gl = fC(fD)
2321+ let dp = gj(gk, fI, gl)
2322+ let ga = split(fI[at], "_")
2323+ let hO = (parseIntValue(ga[av]) + dp._7)
2324+ let hP = (parseIntValue(ga[aw]) - dp._7)
2325+[StringEntry(fD, makeString_2C([gl[ay], dp._4, dp._5, dp._6], ":")), StringEntry(fS, makeString_2C([fI[ap], dp._1, dp._2, dp._3, makeString([ga[au], toString(hO), toString(hP), ga[ax]], "_")], ":")), iW]
23112326 }
23122327 }
23132328 }
23172332
23182333
23192334 @Callable(ez)
2320-func saveWarehouse (fU,aO) = if ((ez.caller != bM))
2335+func saveWarehouse (fW,aO) = if ((ez.caller != bM))
23212336 then throw("Access denied")
23222337 else {
2323- let fQ = aN(aO)
2324- let fV = split_4C(fU, ":")
2325- if ((size(fV) != 5))
2338+ let fS = aN(aO)
2339+ let fX = split_4C(fW, ":")
2340+ if ((size(fX) != 5))
23262341 then throw("warehouse string should contain 4 ':' separators")
23272342 else {
2328- let jH = split(fV[at], "_")[au]
2329- let hL = fD(fV)
2330- let jI = fB(fV[ap])
2331- let hM = ((jI - parseIntValue(jH)) - hL)
2332- let jJ = makeString_2C([fV[ap], fV[aq], fV[ar], fV[as], makeString([jH, toString(hL), toString(hM), toString(jI)], "_")], ":")
2333- $Tuple2([StringEntry(fQ, jJ)], jJ)
2343+ let jK = split(fX[at], "_")[au]
2344+ let hO = fH(fX)
2345+ let jL = fF(fX[ap])
2346+ let hP = ((jL - parseIntValue(jK)) - hO)
2347+ let jM = makeString_2C([fX[ap], fX[aq], fX[ar], fX[as], makeString([jK, toString(hO), toString(hP), toString(jL)], "_")], ":")
2348+ $Tuple2([StringEntry(fS, jM)], jM)
23342349 }
23352350 }
23362351
23402355 func fixWarehouseFormat (aO) = if ((ez.caller != bL))
23412356 then throw("Access denied")
23422357 else {
2343- let fQ = aN(aO)
2344- let hw = value(assetInfo(fromBase58String(aO)))
2345- let fR = (ce(split(hw.description, "_")[bQ]) / br)
2346- let fS = valueOrElse(getInteger(aH(aO)), 0)
2347- let fV = fP(fQ, fR, fS)
2348- let jH = cc(invoke(bM, "recalcLockedVolumeREADONLY", [aO, fV], nil))
2349- let hL = fD(fV)
2350- let jI = fB(fV[ap])
2351- let hM = ((jI - jH) - hL)
2352- let jJ = makeString_2C([fV[ap], fV[aq], fV[ar], fV[as], makeString([toString(jH), toString(hL), toString(hM), toString(jI)], "_")], ":")
2353- $Tuple2([StringEntry(fQ, jJ)], jJ)
2358+ let fS = aN(aO)
2359+ let hz = value(assetInfo(fromBase58String(aO)))
2360+ let fT = (ce(split(hz.description, "_")[bQ]) / br)
2361+ let fU = valueOrElse(getInteger(aH(aO)), 0)
2362+ let fX = fR(fS, fT, fU)
2363+ let jK = cc(invoke(bM, "recalcLockedVolumeREADONLY", [aO, fX], nil))
2364+ let hO = fH(fX)
2365+ let jL = fF(fX[ap])
2366+ let hP = ((jL - jK) - hO)
2367+ let jM = makeString_2C([fX[ap], fX[aq], fX[ar], fX[as], makeString([toString(jK), toString(hO), toString(hP), toString(jL)], "_")], ":")
2368+ $Tuple2([StringEntry(fS, jM)], jM)
23542369 }
23552370
23562371
23592374 func fixStakedPieces (by) = if ((ez.caller != bL))
23602375 then throw("Access denied")
23612376 else {
2362- let iJ = if ((by == ""))
2377+ let iM = if ((by == ""))
23632378 then 0
23642379 else {
2365- let iE = getString(T, bX(by))
2366- let iA = if (isDefined(iE))
2367- then split_51C(value(iE), "_")
2380+ let iH = getString(T, bX(by))
2381+ let iD = if (isDefined(iH))
2382+ then split_51C(value(iH), "_")
23682383 else nil
2369- func jK (cX,aO) = {
2370- let hw = value(assetInfo(fromBase58String(aO)))
2371- let cf = split(hw.description, "_")[bQ]
2384+ func jN (cX,aO) = {
2385+ let hz = value(assetInfo(fromBase58String(aO)))
2386+ let cf = split(hz.description, "_")[bQ]
23722387 (cX + ce(cf))
23732388 }
23742389
2375- let cZ = iA
2390+ let cZ = iD
23762391 let da = size(cZ)
23772392 let db = 0
23782393 func dc (dd,de) = if ((de >= da))
23792394 then dd
2380- else jK(dd, cZ[de])
2395+ else jN(dd, cZ[de])
23812396
23822397 func df (dd,de) = if ((de >= da))
23832398 then dd
23852400
23862401 df(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(db, 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)
23872402 }
2388- $Tuple2([IntegerEntry(bY(by), iJ)], iJ)
2389- }
2390-
2391-
2392-
2393-@Callable(ez)
2394-func setCustomName (aE,iC,aJ) = {
2395- let iT = iQ(ez)
2403+ $Tuple2([IntegerEntry(bY(by), iM)], iM)
2404+ }
2405+
2406+
2407+
2408+@Callable(ez)
2409+func setCustomName (aE,iF,aJ) = {
2410+ let iW = iT(ez)
23962411 if ((size(ez.payments) != 1))
23972412 then throw("Exactly one payment required")
23982413 else {
2399- let iU = value(ez.payments[0])
2400- if ((iU.assetId != bj))
2414+ let iX = value(ez.payments[0])
2415+ if ((iX.assetId != bj))
24012416 then throw("Allowed USDT payment only!")
2402- else if ((iU.amount != cm))
2417+ else if ((iX.amount != cm))
24032418 then throw(("Payment should be " + toString(cm)))
2404- else if (contains(iC, "__"))
2405- then throw(("Name should not contain '__': " + iC))
2406- else if ((size(iC) > cn))
2419+ else if (contains(iF, "__"))
2420+ then throw(("Name should not contain '__': " + iF))
2421+ else if ((size(iF) > cn))
24072422 then throw(("Name too long, maxLength=" + toString(cn)))
24082423 else {
24092424 let b = toString(ez.originCaller)
2410- let jL = {
2425+ let jO = {
24112426 let bk = aJ
24122427 if (("ACCOUNT" == bk))
24132428 then {
2414- let jM = cH(iC)
2415- let jN = getString(jM)
2416- if (isDefined(jN))
2417- then throw(("Name already registered: " + iC))
2429+ let jP = cH(iF)
2430+ let jQ = getString(jP)
2431+ if (isDefined(jQ))
2432+ then throw(("Name already registered: " + iF))
24182433 else {
2419- let jO = aQ(b)
2420- let jP = getString(jO)
2421- let jQ = if (isDefined(jP))
2422- then [DeleteEntry(cH(value(jP)))]
2434+ let jR = aQ(b)
2435+ let jS = getString(jR)
2436+ let jT = if (isDefined(jS))
2437+ then [DeleteEntry(cH(value(jS)))]
24232438 else nil
2424- (((jQ :+ StringEntry(jO, iC)) :+ StringEntry(jM, b)) ++ ig(b, E)._1)
2439+ (((jT :+ StringEntry(jR, iF)) :+ StringEntry(jP, b)) ++ ij(b, E)._1)
24252440 }
24262441 }
24272442 else if (("LAND" == bk))
24282443 then {
2429- let hw = value(assetInfo(fromBase58String(aE)))
2430- let hx = aG(aE)
2431- if (!(isDefined(getInteger(hx))))
2432- then throw((hw.name + " is not staked"))
2444+ let hz = value(assetInfo(fromBase58String(aE)))
2445+ let hA = aG(aE)
2446+ if (!(isDefined(getInteger(hA))))
2447+ then throw((hz.name + " is not staked"))
24332448 else {
2434- let hz = valueOrErrorMessage(getString(aD(aE)), (("NFT " + hw.name) + " is orphaned"))
2435- if ((hz != b))
2449+ let hC = valueOrErrorMessage(getString(aD(aE)), (("NFT " + hz.name) + " is orphaned"))
2450+ if ((hC != b))
24362451 then throw((X + " is not yours"))
24372452 else {
2438- let jM = cB(iC)
2439- let jN = getString(jM)
2440- if (isDefined(jN))
2441- then throw(("Name already registered: " + iC))
2453+ let jP = cB(iF)
2454+ let jQ = getString(jP)
2455+ if (isDefined(jQ))
2456+ then throw(("Name already registered: " + iF))
24422457 else {
2443- let jR = aF(aE)
2444- let jP = getString(jR)
2445- let jQ = if (isDefined(jP))
2446- then [DeleteEntry(cB(value(jP)))]
2458+ let jU = aF(aE)
2459+ let jS = getString(jU)
2460+ let jT = if (isDefined(jS))
2461+ then [DeleteEntry(cB(value(jS)))]
24472462 else nil
2448- (((jQ :+ StringEntry(jR, iC)) :+ StringEntry(jM, aE)) ++ ig(b, E)._1)
2463+ (((jT :+ StringEntry(jU, iF)) :+ StringEntry(jP, aE)) ++ ij(b, E)._1)
24492464 }
24502465 }
24512466 }
24522467 }
24532468 else if (("DUCK" == bk))
24542469 then {
2455- let hw = value(assetInfo(fromBase58String(aE)))
2456- let hx = aG(aE)
2457- if (if (!(isDefined(getInteger(hx))))
2470+ let hz = value(assetInfo(fromBase58String(aE)))
2471+ let hA = aG(aE)
2472+ if (if (!(isDefined(getInteger(hA))))
24582473 then true
24592474 else !(isDefined(getString(aW(b)))))
2460- then throw((hw.name + " is not staked"))
2475+ then throw((hz.name + " is not staked"))
24612476 else {
2462- let hz = valueOrErrorMessage(getString(aV(aE)), (("NFT " + hw.name) + " is orphaned"))
2463- if ((hz != b))
2477+ let hC = valueOrErrorMessage(getString(aV(aE)), (("NFT " + hz.name) + " is orphaned"))
2478+ if ((hC != b))
24642479 then throw((Y + " is not yours"))
24652480 else {
2466- let jM = cG(iC)
2467- let jN = getString(jM)
2468- if (isDefined(jN))
2469- then throw(("Name already registered: " + iC))
2481+ let jP = cG(iF)
2482+ let jQ = getString(jP)
2483+ if (isDefined(jQ))
2484+ then throw(("Name already registered: " + iF))
24702485 else {
2471- let jR = aP(aE)
2472- let jP = getString(jR)
2473- let jQ = if (isDefined(jP))
2474- then [DeleteEntry(cG(value(jP)))]
2486+ let jU = aP(aE)
2487+ let jS = getString(jU)
2488+ let jT = if (isDefined(jS))
2489+ then [DeleteEntry(cG(value(jS)))]
24752490 else nil
2476- (((jQ :+ StringEntry(jR, iC)) :+ StringEntry(jM, aE)) ++ ia(aE, E)._1)
2491+ (((jT :+ StringEntry(jU, iF)) :+ StringEntry(jP, aE)) ++ id(aE, E)._1)
24772492 }
24782493 }
24792494 }
24802495 }
24812496 else throw("Unknown entity type")
24822497 }
2483- $Tuple2(((jL :+ ScriptTransfer(bM, iU.amount, bj)) :+ iT), 0)
2498+ $Tuple2(((jO :+ ScriptTransfer(bM, iX.amount, bj)) :+ iW), 0)
24842499 }
24852500 }
24862501 }
24882503
24892504
24902505 @Callable(ez)
2491-func setReferrals (jS,jT) = if ((ez.callerPublicKey != cj))
2506+func setReferrals (jV,jW) = if ((ez.callerPublicKey != cj))
24922507 then throw("Permission denied")
24932508 else {
2494- let iT = iQ(ez)
2509+ let iW = iT(ez)
24952510 if ((size(ez.payments) != 0))
24962511 then throw("No payments required")
2497- else if (!(isDefined(addressFromString(jS))))
2498- then throw(("Invalid address: " + jS))
2499- else if (!(isDefined(addressFromString(jT))))
2500- then throw(("Invalid address: " + jT))
2512+ else if (!(isDefined(addressFromString(jV))))
2513+ then throw(("Invalid address: " + jV))
2514+ else if (!(isDefined(addressFromString(jW))))
2515+ then throw(("Invalid address: " + jW))
25012516 else {
2502- let jU = cI()
2503- let jV = getString(jU)
2504- let jW = if (isDefined(jV))
2505- then split_4C(value(jV), "_")
2517+ let jX = cI()
2518+ let jY = getString(jX)
2519+ let jZ = if (isDefined(jY))
2520+ then split_4C(value(jY), "_")
25062521 else nil
2507- if (containsElement(jW, jT))
2508- then throw((jT + " is not newbie (already has referrals)"))
2522+ if (containsElement(jZ, jW))
2523+ then throw((jW + " is not newbie (already has referrals)"))
25092524 else {
2510- let ii = aR(jT)
2511- let ij = getString(ii)
2512- if (if (isDefined(ij))
2513- then isDefined(addressFromString(value(ij)))
2525+ let il = aR(jW)
2526+ let im = getString(il)
2527+ if (if (isDefined(im))
2528+ then isDefined(addressFromString(value(im)))
25142529 else false)
2515- then throw(((jT + " already has refBy: ") + value(ij)))
2530+ then throw(((jW + " already has refBy: ") + value(im)))
25162531 else {
2517- let jX = aU(jS)
2518- let jY = getString(jX)
2519- let jZ = if (isDefined(jY))
2520- then split_4C(value(jY), "_")
2532+ let ka = aU(jV)
2533+ let kb = getString(ka)
2534+ let kc = if (isDefined(kb))
2535+ then split_4C(value(kb), "_")
25212536 else nil
2522- if (containsElement(jZ, jT))
2523- then throw((((jS + " already contains ") + jT) + " within referrals"))
2537+ if (containsElement(kc, jW))
2538+ then throw((((jV + " already contains ") + jW) + " within referrals"))
25242539 else {
2525- let ka = makeString_2C((jZ :+ jT), "_")
2526- let kb = if (containsElement(jW, jS))
2527- then value(jV)
2528- else makeString_2C((jW :+ jS), "_")
2529- $Tuple2([StringEntry(ii, jS), StringEntry(jX, ka), StringEntry(jU, kb), iT], 0)
2540+ let kd = makeString_2C((kc :+ jW), "_")
2541+ let ke = if (containsElement(jZ, jV))
2542+ then value(jY)
2543+ else makeString_2C((jZ :+ jV), "_")
2544+ $Tuple2([StringEntry(il, jV), StringEntry(ka, kd), StringEntry(jX, ke), iW], 0)
25302545 }
25312546 }
25322547 }
25362551
25372552
25382553 @Callable(ez)
2539-func distributePoints (kc,kd,ke,kf,kg) = {
2540- let iT = iQ(ez)
2554+func distributePoints (kf,kg,kh,ki,kj) = {
2555+ let iW = iT(ez)
25412556 if ((size(ez.payments) != 0))
25422557 then throw("No payments required")
25432558 else {
25442559 let b = toString(ez.originCaller)
25452560 let r = valueOrErrorMessage(getString(aW(b)), "You don't have a duck staked")
2546- let kh = z(b)
2547- let ki = valueOrElse(getInteger(T, kh), 0)
2548- let kj = v(r)
2549- let kk = valueOrElse(getInteger(T, kj), 0)
2550- let kl = (ki + kk)
2551- let km = ((((kc + kd) + ke) + kf) + kg)
2552- if ((km > kl))
2553- then throw((("There are only " + toString(kl)) + " free points to distribute"))
2561+ let kk = z(b)
2562+ let kl = valueOrElse(getInteger(T, kk), 0)
2563+ let km = v(r)
2564+ let kn = valueOrElse(getInteger(T, km), 0)
2565+ let ko = (kl + kn)
2566+ let kp = ((((kf + kg) + kh) + ki) + kj)
2567+ if ((kp > ko))
2568+ then throw((("There are only " + toString(ko)) + " free points to distribute"))
25542569 else {
2555- let kn = s(r)
2556- let U = split(valueOrElse(getString(T, kn), "0_0_0_0_0"), "_")
2557- let ko = (ki - km)
2558- $Tuple2([IntegerEntry(kh, if ((0 > ko))
2570+ let kq = s(r)
2571+ let U = split(valueOrElse(getString(T, kq), "0_0_0_0_0"), "_")
2572+ let kr = (kl - kp)
2573+ $Tuple2([IntegerEntry(kk, if ((0 > kr))
25592574 then 0
2560- else ko), IntegerEntry(kj, if ((0 > ko))
2561- then (kk + ko)
2562- else kk), StringEntry(kn, makeString([toString((parseIntValue(U[h]) + kc)), toString((parseIntValue(U[i]) + kd)), toString((parseIntValue(U[j]) + ke)), toString((parseIntValue(U[k]) + kf)), toString((parseIntValue(U[l]) + kg))], "_")), iT], 0)
2575+ else kr), IntegerEntry(km, if ((0 > kr))
2576+ then (kn + kr)
2577+ else kn), StringEntry(kq, makeString([toString((parseIntValue(U[h]) + kf)), toString((parseIntValue(U[i]) + kg)), toString((parseIntValue(U[j]) + kh)), toString((parseIntValue(U[k]) + ki)), toString((parseIntValue(U[l]) + kj))], "_")), iW], 0)
25632578 }
25642579 }
25652580 }
25672582
25682583
25692584 @Callable(ez)
2570-func splitByGlobalWeightsREADONLY (gf) = $Tuple2(nil, dg(gf))
2571-
2572-
2573-
2574-@Callable(ez)
2575-func splitByGlobalAndLocalWeightsREADONLY (kp,kq,eC) = {
2585+func splitByGlobalWeightsREADONLY (gh) = $Tuple2(nil, dg(gh))
2586+
2587+
2588+
2589+@Callable(ez)
2590+func splitByGlobalAndLocalWeightsREADONLY (ks,kt,eC) = {
25762591 let ev = eB(eC)
2577- $Tuple2(nil, $Tuple2(dg(kp), cR(kq, ev)))
2578- }
2579-
2580-
2581-
2582-@Callable(ez)
2583-func getBackpackREADONLY (r) = $Tuple2(nil, makeString(fy(aX(r)), ":"))
2592+ $Tuple2(nil, $Tuple2(dg(ks), cR(kt, ev)))
2593+ }
2594+
2595+
2596+
2597+@Callable(ez)
2598+func getBackpackREADONLY (r) = $Tuple2(nil, makeString(fC(aX(r)), ":"))
25842599
25852600
25862601
25872602 @Callable(ez)
25882603 func getWarehouseREADONLY (aO) = {
2589- let hw = value(assetInfo(fromBase58String(aO)))
2590- let fR = (ce(split(hw.description, "_")[bQ]) / br)
2591- let fS = valueOrElse(getInteger(aH(aO)), 0)
2592- $Tuple2(nil, makeString_2C(fP(aN(aO), fR, fS), ":"))
2604+ let hz = value(assetInfo(fromBase58String(aO)))
2605+ let fT = (ce(split(hz.description, "_")[bQ]) / br)
2606+ let fU = valueOrElse(getInteger(aH(aO)), 0)
2607+ $Tuple2(nil, makeString_2C(fR(aN(aO), fT, fU), ":"))
25932608 }
25942609
25952610
25992614 then (ez.caller != bM)
26002615 else false)
26012616 then throw("Access denied")
2602- else $Tuple2([iQ(ez)], 42)
2603-
2604-
2605-
2606-@Callable(ez)
2607-func updateDuckStats (r,ib) = if ((ez.caller != bM))
2617+ else $Tuple2([iT(ez)], 42)
2618+
2619+
2620+
2621+@Callable(ez)
2622+func updateDuckStats (r,ie) = if ((ez.caller != bM))
26082623 then throw("Access denied")
2609- else ia(r, ib)
2610-
2611-
2612-
2613-@Callable(ez)
2614-func updateAccStats (b,ib) = if ((ez.caller != bM))
2624+ else id(r, ie)
2625+
2626+
2627+
2628+@Callable(ez)
2629+func updateAccStats (b,ie) = if ((ez.caller != bM))
26152630 then throw("Access denied")
2616- else ig(b, ib)
2617-
2618-
2619-
2620-@Callable(ez)
2621-func equipDuck (kr) = {
2622- let iT = iQ(ez)
2631+ else ij(b, ie)
2632+
2633+
2634+
2635+@Callable(ez)
2636+func equipDuck (ku) = {
2637+ let iW = iT(ez)
26232638 if ((size(ez.payments) != 0))
26242639 then throw("No payments required")
26252640 else {
26262641 let b = toString(ez.originCaller)
26272642 let r = valueOrErrorMessage(getString(aW(b)), "You don't have a duck staked")
2628- let hh = w(r)
2629- let ks = split(valueOrElse(getString(hh), ",;,_,;,_,;,_,;,_,;,_,;,"), "_")
2630- let fz = aX(r)
2631- let gj = fy(fz)
2632- let hj = split(kr, "_")
2633- if ((size(hj) != m))
2643+ let hj = w(r)
2644+ let kv = split(valueOrElse(getString(hj), ",;,_,;,_,;,_,;,_,;,_,;,"), "_")
2645+ let fD = aX(r)
2646+ let gl = fC(fD)
2647+ let hl = split(ku, "_")
2648+ if ((size(hl) != m))
26342649 then throw("Wrong equipment string")
26352650 else {
26362651 let dO = S(this, r)
2637- let kt = em(ks, dD(gj[aB]), true, dO)
2638- let ku = em(hj, kt, false, dO)
2639- let kv = dI(ku)
2640- $Tuple2([StringEntry(hh, kr), StringEntry(fz, makeString_2C([gj[ay], gj[az], gj[aA], kv], ":")), iT], 0)
2652+ let kw = em(kv, dD(gl[aB]), true, dO)
2653+ let kx = em(hl, kw, false, dO)
2654+ let ky = dI(kx)
2655+ $Tuple2([StringEntry(hj, ku), StringEntry(fD, makeString_2C([gl[ay], gl[az], gl[aA], ky], ":")), iW], 0)
26412656 }
26422657 }
26432658 }
2644-
2645-
2646-
2647-@Callable(ez)
2648-func test () = $Tuple2(nil, fi(nil, 1))
26492659
26502660
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 func a (b) = ("lastArbTimeUser_" + b)
55
66
77 let c = 100000000
88
99 let d = 3200
1010
1111 let e = 4000
1212
1313 let f = 3
1414
1515 let g = ["Strength", "Accuracy", "Intellect", "Endurance", "Dexterity", "Level", "Health"]
1616
1717 let h = 0
1818
1919 let i = 1
2020
2121 let j = 2
2222
2323 let k = 3
2424
2525 let l = 4
2626
2727 let m = 6
2828
2929 let n = 2
3030
3131 let o = 2
3232
3333 let p = 30
3434
3535 func q (r) = ("duckHealth_" + r)
3636
3737
3838 func s (r) = ("duckChars_" + r)
3939
4040
4141 func t (r) = ("duckXP_" + r)
4242
4343
4444 func u (r) = ("duckLevel_" + r)
4545
4646
4747 func v (r) = ("duckFreePoints_" + r)
4848
4949
5050 func w (r) = ("duckEquipment_" + r)
5151
5252
5353 func x (b) = ("userXP_" + b)
5454
5555
5656 func y (b) = ("userLevel_" + b)
5757
5858
5959 func z (b) = ("userFreePoints_" + b)
6060
6161
6262 let A = 10000
6363
6464 let B = 10000
6565
6666 let C = 2000
6767
6868 let D = 100000
6969
7070 let E = 1000000
7171
7272 let F = 5000000
7373
7474 let G = 10000
7575
7676 let H = 1000000
7777
7878 let I = 1000000
7979
8080 let J = 10000
8181
8282 func K (L) = fraction(d, pow(L, 4, e, 4, 4, DOWN), c)
8383
8484
8585 func M (N) = (100 + N)
8686
8787
8888 func O (P,Q) = {
8989 let R = K(Q)
9090 [R, (f * (R - P))]
9191 }
9292
9393
9494 func S (T,r) = {
9595 let U = split(valueOrElse(getString(T, s(r)), "0_0_0_0_0"), "_")
9696 let V = valueOrElse(getInteger(T, u(r)), 0)
9797 let W = valueOrElse(getInteger(T, q(r)), M(V))
9898 [parseIntValue(U[h]), parseIntValue(U[i]), parseIntValue(U[j]), parseIntValue(U[k]), parseIntValue(U[l]), V, W]
9999 }
100100
101101
102102 let X = "LAND"
103103
104104 let Y = "DUCK"
105105
106106 let Z = "PRESALE"
107107
108108 let aa = 6
109109
110110 let ab = 3456000
111111
112112 let ac = 86400000
113113
114114 let ad = 10000000000
115115
116116 let ae = "Africa_F_Africa"
117117
118118 let af = 39637
119119
120120 let ag = 10
121121
122122 let ah = ["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"]
123123
124124 let ai = ["Americas", "Europe", "Asia", "Africa", "Oceania"]
125125
126126 let aj = 10000000
127127
128128 let ak = ["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"]
129129
130130 let al = 6
131131
132132 let am = 9
133133
134134 let an = 10
135135
136136 let ao = 10
137137
138138 let ap = 0
139139
140140 let aq = 1
141141
142142 let ar = 2
143143
144144 let as = 3
145145
146146 let at = 4
147147
148148 let au = 0
149149
150150 let av = 1
151151
152152 let aw = 2
153153
154154 let ax = 3
155155
156156 let ay = 0
157157
158158 let az = 1
159159
160160 let aA = 2
161161
162162 let aB = 3
163163
164164 func aC (b) = ("lastTxIdByUser_" + b)
165165
166166
167167 func aD (aE) = ("nftOwner_" + aE)
168168
169169
170170 func aF (aE) = ("landCustomNameByAssetId_" + aE)
171171
172172
173173 func aG (aE) = ("stakedTime_" + aE)
174174
175175
176176 func aH (aE) = ("infraLevel_" + aE)
177177
178178
179179 func aI (aJ,aE) = makeString(["landArtStatus", aJ, aE], "_")
180180
181181
182182 func aK (aL,aE,aM) = ((((("stakedTimeByTypeAssetIdAndOwner_" + aL) + "_") + aE) + "_") + aM)
183183
184184
185185 func aN (aO) = ("wareHouse_" + aO)
186186
187187
188188 func aP (aE) = ("duckCustomNameByAssetId_" + aE)
189189
190190
191191 func aQ (b) = ("accountCustomNameByAddr_" + b)
192192
193193
194194 func aR (b) = ("accRefBy_" + b)
195195
196196
197197 func aS (r) = ("onboardArtActivatedOnDuck_" + r)
198198
199199
200200 func aT (b) = ("onboardArtActivatedDuckBy_" + b)
201201
202202
203203 func aU (b) = ("accReferrals_" + b)
204204
205205
206206 func aV (aE) = ("duckOwner_" + aE)
207207
208208
209209 func aW (aM) = ("stakedDuckByOwner_" + aM)
210210
211211
212212 func aX (r) = ("backPack_" + r)
213213
214214
215215 func aY (r) = ("duckLocation_" + r)
216216
217217
218218 func aZ () = "contractsBlocked"
219219
220220
221221 func ba (bb) = ("%s%s__userGwlReleaseTime__" + bb)
222222
223223
224224 func bc () = "emergencyWarehouseProducts"
225225
226226
227227 let bd = 1
228228
229229 let be = 2
230230
231231 func bf (bg) = (parseIntValue(bg[al]) * aj)
232232
233233
234234 let bh = false
235235
236236 let bi = take(drop(this.bytes, 1), 1)
237237
238238 let bj = {
239239 let bk = bi
240240 if ((base58'2W' == bk))
241241 then base58'9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi'
242242 else if ((base58'2T' == bk))
243243 then base58'6mWwf9mZBjVgkC54idpyaZLQfAosD914wT8fGf2iiY63'
244244 else throw("Unknown chain")
245245 }
246246
247247 let bl = {
248248 let bk = bi
249249 if ((base58'2W' == bk))
250250 then "3PQCuvFbvh4LkPUnrnU1z3jnbA1p9m3WNhv"
251251 else if ((base58'2T' == bk))
252252 then "3MumkGGztCKAXpWDqxkddofqXSUbqQkvSJy"
253253 else throw("Unknown chain")
254254 }
255255
256256 let bm = {
257257 let bk = bi
258258 if ((base58'2W' == bk))
259259 then 10000000000
260260 else if ((base58'2T' == bk))
261261 then 100000000
262262 else throw("Unknown chain")
263263 }
264264
265265 let bn = {
266266 let bk = bi
267267 if ((base58'2W' == bk))
268268 then 600000
269269 else if ((base58'2T' == bk))
270270 then 60000
271271 else throw("Unknown chain")
272272 }
273273
274274 let bo = "__"
275275
276276 let bp = 1000000
277277
278278 let bq = 100000000
279279
280280 let br = 25
281281
282282 let bs = 100
283283
284284 let bt = 225
285285
286286 let bu = 400
287287
288288 let bv = 625
289289
290290 let bw = [0, 1, 2, 3, 4, 5]
291291
292292 func bx (by,bz) = valueOrErrorMessage(getString(by, bz), makeString(["mandatory ", toString(by), ".", bz, " is not defined"], ""))
293293
294294
295295 let bA = 1
296296
297297 let bB = 2
298298
299299 let bC = 3
300300
301301 let bD = 4
302302
303303 func bE () = "%s__restConfig"
304304
305305
306306 func bF () = "%s__restAddr"
307307
308308
309309 func bG (bH) = split_4C(bx(bH, bE()), bo)
310310
311311
312312 func bI (bJ,bK) = valueOrErrorMessage(addressFromString(bJ[bK]), ("Rest cfg doesn't contain address at index " + toString(bK)))
313313
314314
315315 let bL = addressFromStringValue(valueOrElse(getString(this, bF()), bl))
316316
317317 let bJ = bG(bL)
318318
319319 let T = bI(bJ, bA)
320320
321321 let bM = bI(bJ, bB)
322322
323323 let bN = bI(bJ, bC)
324324
325325 let bO = bI(bJ, bD)
326326
327327 let bP = 0
328328
329329 let bQ = 1
330330
331331 let bR = 2
332332
333333 let bS = 3
334334
335335 let bT = 2
336336
337337 func bU (by) = ("commitOperation_" + by)
338338
339339
340340 func bV (by) = ("finishBlockForAddr_" + by)
341341
342342
343343 func bW () = "resTypesProportions"
344344
345345
346346 func bX (aM) = ("stakedLandsByOwner_" + aM)
347347
348348
349349 func bY (aM) = ("stakedPiecesByOwner_" + aM)
350350
351351
352352 func bZ (ca) = {
353353 let bk = ca
354354 if ($isInstanceOf(bk, "String"))
355355 then {
356356 let cb = bk
357357 cb
358358 }
359359 else throw("fail to cast into String")
360360 }
361361
362362
363363 func cc (ca) = {
364364 let bk = ca
365365 if ($isInstanceOf(bk, "Int"))
366366 then {
367367 let cd = bk
368368 cd
369369 }
370370 else throw("fail to cast into Int")
371371 }
372372
373373
374374 func ce (cf) = {
375375 let bk = cf
376376 if (("S" == bk))
377377 then br
378378 else if (("M" == bk))
379379 then bs
380380 else if (("L" == bk))
381381 then bt
382382 else if (("XL" == bk))
383383 then bu
384384 else if (("XXL" == bk))
385385 then bv
386386 else throw("Unknown land size")
387387 }
388388
389389
390390 func cg (cb) = isDefined(parseInt(cb))
391391
392392
393393 let ch = {
394394 let bk = bi
395395 if ((base58'2W' == bk))
396396 then addressFromStringValue("3PEktVux2RhchSN63DsDo4b4mz4QqzKSeDv")
397397 else if ((base58'2T' == bk))
398398 then this
399399 else throw("Unknown chain")
400400 }
401401
402402 let ci = {
403403 let bk = bi
404404 if ((base58'2W' == bk))
405405 then addressFromStringValue("3PDVuU45H7Eh5dmtNbnRNRStGwULA7NY6Hb")
406406 else if ((base58'2T' == bk))
407407 then this
408408 else throw("Unknown chain")
409409 }
410410
411411 let cj = base58'6LfPuKJjLgekmncBhMg2LZyMTNVzZBccXR28ySXm9uXD'
412412
413413 let ck = [30, 60, 120]
414414
415415 let cl = 300000
416416
417417 let cm = 5000000
418418
419419 let cn = 50
420420
421421 let co = 10000000
422422
423423 let cp = {
424424 let bk = bi
425425 if ((base58'2W' == bk))
426426 then 252289527462
427427 else if ((base58'2T' == bk))
428428 then 2522895274
429429 else throw("Unknown chain")
430430 }
431431
432432 let cq = {
433433 let bk = bi
434434 if ((base58'2W' == bk))
435435 then 250000000
436436 else if ((base58'2T' == bk))
437437 then 250000000
438438 else throw("Unknown chain")
439439 }
440440
441441 let cr = toBigInt(5)
442442
443443 let cs = toBigInt(20)
444444
445445 let ct = toBigInt((20 * 20))
446446
447447 let cu = toBigInt(((20 * 20) * 20))
448448
449449 let cv = toBigInt((((20 * 20) * 20) * 20))
450450
451451 let cw = toBigInt(((((20 * 20) * 20) * 20) * 20))
452452
453453 let cx = 500
454454
455455 func cy () = "nextLandNum"
456456
457457
458458 func cz (cA) = ("landToAsset_" + cA)
459459
460460
461461 func cB (cC) = ("landByCustomName_" + cC)
462462
463463
464464 func cD (aE,aM) = ((("infraLevelByAssetIdAndOwner_" + aE) + "_") + aM)
465465
466466
467467 func cE (aJ,aE,aM) = makeString(["landArtStatusByTypeAssetIdAndOwner", aJ, aE, aM], "_")
468468
469469
470470 func cF (cA) = ("landOwner_" + cA)
471471
472472
473473 func cG (cC) = ("duckByCustomName_" + cC)
474474
475475
476476 func cH (cC) = ("accountByCustomName_" + cC)
477477
478478
479479 func cI () = "oldiesList"
480480
481481
482482 let cJ = 0
483483
484484 let cK = 1
485485
486486 let cL = 2
487487
488488 let cM = 0
489489
490490 let cN = 5
491491
492492 let cO = 6
493493
494494 let cP = 7
495495
496496 func cQ (cA,cf) = ((X + cA) + cf)
497497
498498
499499 func cR (cS,cT) = {
500500 let cU = (((((cT[0] + cT[1]) + cT[2]) + cT[3]) + cT[4]) + cT[5])
501501 if ((0 >= cU))
502502 then throw("Zero weights sum")
503503 else {
504504 let cV = fraction(cS, bp, cU)
505505 func cW (cX,cY) = (cX :+ fraction(cY, cV, bp))
506506
507507 let cZ = cT
508508 let da = size(cZ)
509509 let db = nil
510510 func dc (dd,de) = if ((de >= da))
511511 then dd
512512 else cW(dd, cZ[de])
513513
514514 func df (dd,de) = if ((de >= da))
515515 then dd
516516 else throw("List size exceeds 6")
517517
518518 df(dc(dc(dc(dc(dc(dc(db, 0), 1), 2), 3), 4), 5), 6)
519519 }
520520 }
521521
522522
523523 func dg (cS) = {
524524 let dh = split(value(getString(bW())), "_")
525525 if ((size(dh) != aa))
526526 then throw("Wrong proportions data")
527527 else {
528528 let di = [parseIntValue(dh[0]), parseIntValue(dh[1]), parseIntValue(dh[2]), parseIntValue(dh[3]), parseIntValue(dh[4]), parseIntValue(dh[5])]
529529 cR(cS, di)
530530 }
531531 }
532532
533533
534534 func dj (dk,dl,dm) = {
535535 let dn = dg(dm)
536536 func do (cX,bK) = {
537537 let dp = (parseIntValue(dl[bK]) - dn[bK])
538538 if ((0 > dp))
539539 then throw(((((("Not enough material idx=" + toString(bK)) + ", you have ") + dl[bK]) + ", but need ") + toString(dn[bK])))
540540 else (cX :+ toString(dp))
541541 }
542542
543543 if (dk)
544544 then {
545545 let cZ = bw
546546 let da = size(cZ)
547547 let db = nil
548548 func dc (dd,de) = if ((de >= da))
549549 then dd
550550 else do(dd, cZ[de])
551551
552552 func df (dd,de) = if ((de >= da))
553553 then dd
554554 else throw("List size exceeds 6")
555555
556556 df(dc(dc(dc(dc(dc(dc(db, 0), 1), 2), 3), 4), 5), 6)
557557 }
558558 else dl
559559 }
560560
561561
562562 func dq (dr,ds) = if ((ds == ""))
563563 then dr
564564 else {
565565 func dt (cX,du) = {
566566 let dv = split(du, ",")
567567 if ((size(dv) != 2))
568568 then throw("Incorrect format, should be index,amount")
569569 else {
570570 let bK = parseIntValue(dv[0])
571571 if (if ((0 > bK))
572572 then true
573573 else (bK >= size(ak)))
574574 then throw("Unknown product idx")
575575 else {
576576 let dw = parseIntValue(dv[1])
577577 let dx = split(cX, (dv[0] + ":"))
578578 if ((size(dx) != 2))
579579 then throw((("You don't have " + ah[bK]) + " equipped"))
580580 else {
581581 let dy = dx[1]
582582 let dz = if (cg(take(drop(dy, 1), 1)))
583583 then 2
584584 else 1
585585 let dA = parseIntValue(take(dy, dz))
586586 let dB = drop(dy, dz)
587587 let dC = if ((dA >= dw))
588588 then (dA - dw)
589589 else throw(((((("You equipped " + toString(dA)) + " of ") + ah[bK]) + ", but tried to use ") + toString(dw)))
590590 ((((dx[0] + dv[0]) + ":") + toString(dC)) + dB)
591591 }
592592 }
593593 }
594594 }
595595
596596 let cZ = split(ds, "_")
597597 let da = size(cZ)
598598 let db = dr
599599 func dc (dd,de) = if ((de >= da))
600600 then dd
601601 else dt(dd, cZ[de])
602602
603603 func df (dd,de) = if ((de >= da))
604604 then dd
605605 else throw("List size exceeds 10")
606606
607607 df(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(db, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
608608 }
609609
610610
611611 func dD (dE) = {
612612 let dF = if ((dE == ""))
613613 then nil
614614 else split(dE, "_")
615615 func dG (cX,bg) = {
616616 let dH = (size(cX) / 8)
617617 let dA = if ((size(dF) > dH))
618618 then parseIntValue(dF[dH])
619619 else 0
620620 (cX + toBytes(dA))
621621 }
622622
623623 let cZ = ak
624624 let da = size(cZ)
625625 let db = base58''
626626 func dc (dd,de) = if ((de >= da))
627627 then dd
628628 else dG(dd, cZ[de])
629629
630630 func df (dd,de) = if ((de >= da))
631631 then dd
632632 else throw("List size exceeds 50")
633633
634634 df(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(db, 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)
635635 }
636636
637637
638638 func dI (dJ) = {
639639 func dK (cX,bg) = {
640640 let dH = size(cX)
641641 let dL = take(drop(dJ, (8 * dH)), 8)
642642 (cX :+ toString(toInt(dL)))
643643 }
644644
645645 makeString({
646646 let cZ = ak
647647 let da = size(cZ)
648648 let db = nil
649649 func dc (dd,de) = if ((de >= da))
650650 then dd
651651 else dK(dd, cZ[de])
652652
653653 func df (dd,de) = if ((de >= da))
654654 then dd
655655 else throw("List size exceeds 50")
656656
657657 df(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(db, 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)
658658 }, "_")
659659 }
660660
661661
662662 func dM (dN,dO) = {
663663 func dP (cX,dH) = if ((parseIntValue(dO[dH]) > dN[dH]))
664664 then throw(("Requirement not satisfied: " + g[dH]))
665665 else true
666666
667667 let cZ = [0, 1, 2, 3, 4, 5, 6]
668668 let da = size(cZ)
669669 let db = false
670670 func dc (dd,de) = if ((de >= da))
671671 then dd
672672 else dP(dd, cZ[de])
673673
674674 func df (dd,de) = if ((de >= da))
675675 then dd
676676 else throw("List size exceeds 7")
677677
678678 df(dc(dc(dc(dc(dc(dc(dc(db, 0), 1), 2), 3), 4), 5), 6), 7)
679679 }
680680
681681
682682 func dQ (dR,dF,dS,dT,dU,dV,dN) = {
683683 let dv = split(dR, ":")
684684 if ((size(dv) != 2))
685685 then throw("Incorrect format, should be index:amount")
686686 else if (if (!(dS))
687687 then (size(dv[0]) != 2)
688688 else false)
689689 then throw("Product idx should be 2 digits, zero padded")
690690 else {
691691 let dW = parseIntValue(dv[0])
692692 let dX = parseIntValue(dv[1])
693693 if (if ((0 > dW))
694694 then true
695695 else (dW >= size(ak)))
696696 then throw("Unknown product idx")
697697 else if ((0 > dX))
698698 then throw("Count can't be negative")
699699 else if ((dX > p))
700700 then throw(((("Can't put more than " + toString(p)) + " of ") + ah[dW]))
701701 else if ((dX == 0))
702702 then $Tuple2(dF, false)
703703 else {
704704 let dY = take(dF, (8 * dW))
705705 let dA = toInt(take(drop(dF, (8 * dW)), 8))
706706 let dB = drop(dF, (8 * (dW + 1)))
707707 let bg = split(ak[dW], "_")
708708 if (if (!(dS))
709709 then (dX > dA)
710710 else false)
711711 then throw(((((("You have " + toString(dA)) + " of ") + ah[dW]) + ", but tried to use ") + toString(dX)))
712712 else {
713713 let dZ = if (if (!(dS))
714714 then dM(dN, split(bg[am], ","))
715715 else false)
716716 then {
717717 let ea = bg[an]
718718 if ((ea == ""))
719719 then throw("Item cannot be equipped")
720720 else {
721721 let eb = parseIntValue(ea)
722722 let ec = (eb / 100)
723723 if ((dT != ec))
724724 then throw("Segment incompatible")
725725 else {
726726 let ed = ((eb % 100) / 10)
727727 if ((dU != ed))
728728 then throw("Slot incompatible")
729729 else {
730730 let ee = (eb % 10)
731731 if (if ((dV != 0))
732732 then (ee > 1)
733733 else false)
734734 then throw("Big items should occupy slot 0")
735735 else (ee > 1)
736736 }
737737 }
738738 }
739739 }
740740 else false
741741 $Tuple2(((dY + toBytes((dA + (if (dS)
742742 then dX
743743 else -(dX))))) + dB), dZ)
744744 }
745745 }
746746 }
747747 }
748748
749749
750750 func ef (eg,eh,dS,dT,dU,dO) = if ((eg != ""))
751751 then {
752752 let ei = split(eg, ",")
753753 if ((size(ei) > o))
754754 then throw("Wrong slots format")
755755 else {
756756 let ej = ei[0]
757757 let ek = if ((size(ei) > 1))
758758 then ei[1]
759759 else ""
760760 if (if ((ej == ""))
761761 then (ek == "")
762762 else false)
763763 then eh
764764 else {
765765 let el = if ((ej != ""))
766766 then dQ(ej, eh, dS, dT, dU, 0, dO)
767767 else $Tuple2(eh, false)
768768 if ((ek != ""))
769769 then if (el._2)
770770 then throw("Big item already occupies slot")
771771 else dQ(ek, el._1, dS, dT, dU, 1, dO)._1
772772 else el._1
773773 }
774774 }
775775 }
776776 else eh
777777
778778
779779 func em (en,eo,dS,dO) = {
780780 func dT (cX,ep) = {
781781 let dH = cX._1
782782 let dU = split(ep, ";")
783783 if ((size(dU) != n))
784784 then throw("Wrong segment format")
785785 else {
786786 let eq = dU[0]
787787 let er = dU[1]
788788 if (if ((eq == ""))
789789 then (er == "")
790790 else false)
791791 then $Tuple2((dH + 1), cX._2)
792792 else {
793793 let es = ef(eq, cX._2, dS, dH, 0, dO)
794794 $Tuple2((dH + 1), ef(er, es, dS, dH, 1, dO))
795795 }
796796 }
797797 }
798798
799799 ( let cZ = en
800800 let da = size(cZ)
801801 let db = $Tuple2(0, eo)
802802 func dc (dd,de) = if ((de >= da))
803803 then dd
804804 else dT(dd, cZ[de])
805805
806806 func df (dd,de) = if ((de >= da))
807807 then dd
808808 else throw("List size exceeds 6")
809809
810810 df(dc(dc(dc(dc(dc(dc(db, 0), 1), 2), 3), 4), 5), 6))._2
811811 }
812812
813813
814814 func et (eu,ev,ew,ex) = if ((size(eu) != aa))
815815 then throw("Wrong proportions data")
816816 else {
817817 func ey (cX,ez) = {
818818 let dp = (parseIntValue(eu[ez]) + ((ex * ev[ez]) * ew))
819819 if ((0 > dp))
820820 then throw(((((((("Panic! Pieces of type=" + toString(ez)) + ", sign=") + toString(ex)) + ", terrainCounts[i]=") + toString(ev[ez])) + ", landSizeIndex=") + toString(ew)))
821821 else (cX :+ toString(dp))
822822 }
823823
824824 let cZ = bw
825825 let da = size(cZ)
826826 let db = nil
827827 func dc (dd,de) = if ((de >= da))
828828 then dd
829829 else ey(dd, cZ[de])
830830
831831 func df (dd,de) = if ((de >= da))
832832 then dd
833833 else throw("List size exceeds 6")
834834
835835 df(dc(dc(dc(dc(dc(dc(db, 0), 1), 2), 3), 4), 5), 6)
836836 }
837837
838838
839839 func eA (ev,ew,ex) = {
840840 let eu = split(valueOrElse(getString(bW()), "0_0_0_0_0_0"), "_")
841841 makeString(et(eu, ev, ew, ex), "_")
842842 }
843843
844844
845845 func eB (eC) = [(size(split(eC, "A")) - 1), (size(split(eC, "B")) - 1), (size(split(eC, "C")) - 1), (size(split(eC, "D")) - 1), (size(split(eC, "E")) - 1), (size(split(eC, "F")) - 1)]
846846
847847
848848 func eD (eE,ev,eF,ew,eG) = {
849849 func eH (cX,ez) = {
850850 let eI = ((fraction(eF, eG, ac) * ev[ez]) * ew)
851851 (cX :+ toString((parseIntValue(eE[ez]) + eI)))
852852 }
853853
854854 let di = {
855855 let cZ = bw
856856 let da = size(cZ)
857857 let db = nil
858858 func dc (dd,de) = if ((de >= da))
859859 then dd
860860 else eH(dd, cZ[de])
861861
862862 func df (dd,de) = if ((de >= da))
863863 then dd
864864 else throw("List size exceeds 6")
865865
866866 df(dc(dc(dc(dc(dc(dc(db, 0), 1), 2), 3), 4), 5), 6)
867867 }
868868 makeString(di, "_")
869869 }
870870
871871
872872 func eJ (ev,eF,ew,eG) = {
873873 func eH (cX,ez) = {
874874 let eI = ((fraction(eF, eG, ac) * ev[ez]) * ew)
875875 $Tuple2((cX._1 :+ eI), (cX._2 + eI))
876876 }
877877
878878 let cZ = bw
879879 let da = size(cZ)
880880 let db = $Tuple2(nil, 0)
881881 func dc (dd,de) = if ((de >= da))
882882 then dd
883883 else eH(dd, cZ[de])
884884
885885 func df (dd,de) = if ((de >= da))
886886 then dd
887887 else throw("List size exceeds 6")
888888
889889 df(dc(dc(dc(dc(dc(dc(db, 0), 1), 2), 3), 4), 5), 6)
890890 }
891891
892892
893893 func eK (eL,eM,eN,eO) = {
894894 let eP = eN._1
895895 let eQ = eN._2
896896 if ((eQ == 0))
897897 then $Tuple2(makeString(eL, "_"), makeString(eM, "_"))
898898 else if ((eO >= eQ))
899899 then {
900900 func eR (cX,ez) = (cX :+ toString((parseIntValue(eL[ez]) + eP[ez])))
901901
902902 let di = {
903903 let cZ = bw
904904 let da = size(cZ)
905905 let db = nil
906906 func dc (dd,de) = if ((de >= da))
907907 then dd
908908 else eR(dd, cZ[de])
909909
910910 func df (dd,de) = if ((de >= da))
911911 then dd
912912 else throw("List size exceeds 6")
913913
914914 df(dc(dc(dc(dc(dc(dc(db, 0), 1), 2), 3), 4), 5), 6)
915915 }
916916 $Tuple2(makeString(di, "_"), makeString(eM, "_"))
917917 }
918918 else {
919919 func eS (cX,ez) = {
920920 let eT = fraction(eP[ez], eO, eQ)
921921 $Tuple2((cX._1 :+ toString((parseIntValue(eL[ez]) + eT))), (cX._2 :+ toString(((parseIntValue(eM[ez]) + eP[ez]) - eT))))
922922 }
923923
924924 let di = {
925925 let cZ = bw
926926 let da = size(cZ)
927927 let db = $Tuple2(nil, nil)
928928 func dc (dd,de) = if ((de >= da))
929929 then dd
930930 else eS(dd, cZ[de])
931931
932932 func df (dd,de) = if ((de >= da))
933933 then dd
934934 else throw("List size exceeds 6")
935935
936936 df(dc(dc(dc(dc(dc(dc(db, 0), 1), 2), 3), 4), 5), 6)
937937 }
938938 $Tuple2(makeString(di._1, "_"), makeString(di._2, "_"))
939939 }
940940 }
941941
942942
943943 func eU (eV) = if ((eV >= toBigInt(0)))
944944 then eV
945945 else -(eV)
946946
947947
948948 let eW = [[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]]
949949
950950 func eX (cd,eY) = {
951951 let eZ = toInt((cd % cs))
952952 let fa = if ((eY[0] > eZ))
953953 then "A"
954954 else if ((eY[1] > eZ))
955955 then "B"
956956 else if ((eY[2] > eZ))
957957 then "C"
958958 else if ((eY[3] > eZ))
959959 then "D"
960960 else if ((eY[4] > eZ))
961961 then "E"
962962 else "F"
963963 fa
964964 }
965965
966966
967967 func fb (fc,fd) = {
968968 let fe = eW[fd]
969969 func ff (cX,cY) = $Tuple2((((((cX._1 + eX(cX._2, fe)) + eX((cX._2 / cs), fe)) + eX((cX._2 / ct), fe)) + eX((cX._2 / cu), fe)) + eX((cX._2 / cv), fe)), (cX._2 / cw))
970970
971971 let fg = {
972972 let cZ = [1, 2, 3, 4, 5]
973973 let da = size(cZ)
974974 let db = $Tuple2("", (fc / cr))
975975 func dc (dd,de) = if ((de >= da))
976976 then dd
977977 else ff(dd, cZ[de])
978978
979979 func df (dd,de) = if ((de >= da))
980980 then dd
981981 else throw("List size exceeds 5")
982982
983983 df(dc(dc(dc(dc(dc(db, 0), 1), 2), 3), 4), 5)
984984 }
985985 fg._1
986986 }
987987
988988
989-let fh = ["A", "B", "C", "D", "E", "F"]
990-
991-func fi (fj,ew) = {
992- func fk (cX,cb) = {
989+let fh = [7, 2, 15, 19, 8, 24, 1, 21, 16, 5, 0, 22, 20, 23, 11, 4, 18, 12, 6, 10, 3, 17, 13, 9, 14]
990+
991+let fi = ["A", "B", "C", "D", "E", "F"]
992+
993+func fj (fk,ew) = {
994+ func fl (cX,cb) = {
993995 let dH = cX._2
994- let fl = parseIntValue(cb)
995- let eV = if ((fl == 0))
996+ let fm = parseIntValue(cb)
997+ let eV = if ((fm == 0))
996998 then 0
997- else if ((fl >= (4 * ew)))
998- then (fl / ew)
999- else if ((fl > (3 * ew)))
999+ else if ((fm >= (4 * ew)))
1000+ then (fm / ew)
1001+ else if ((fm > (3 * ew)))
10001002 then 3
1001- else (((fl - 1) / ew) + 1)
1003+ else (((fm - 1) / ew) + 1)
10021004 $Tuple3((cX._1 :+ eV), (cX._2 + 1), (cX._3 + eV))
10031005 }
10041006
10051007 let fg = {
1006- let cZ = fj
1008+ let cZ = fk
10071009 let da = size(cZ)
10081010 let db = $Tuple3(nil, 0, 0)
10091011 func dc (dd,de) = if ((de >= da))
10101012 then dd
1011- else fk(dd, cZ[de])
1013+ else fl(dd, cZ[de])
10121014
10131015 func df (dd,de) = if ((de >= da))
10141016 then dd
10151017 else throw("List size exceeds 6")
10161018
10171019 df(dc(dc(dc(dc(dc(dc(db, 0), 1), 2), 3), 4), 5), 6)
10181020 }
1019- let fm = fg._1
1020- let fn = value(indexOf(fm, max(fm)))
1021- let fo = (fg._3 - 25)
1022- func fp (cX,bK) = {
1023- let fq = if ((bK == fn))
1024- then (fm[bK] - fo)
1025- else fm[bK]
1026- let fr = if ((fq == 0))
1021+ let fn = fg._1
1022+ let fo = value(indexOf(fn, max(fn)))
1023+ let fp = (fg._3 - 25)
1024+ func fq (cX,bK) = {
1025+ let fr = if ((bK == fo))
1026+ then (fn[bK] - fp)
1027+ else fn[bK]
1028+ let fs = if ((fr == 0))
10271029 then nil
1028- else split(drop(toString(pow(10, 0, fq, 0, 0, DOWN)), 1), "")
1029- let eb = fh[bK]
1030- func fs (ft,fu) = (ft :+ eb)
1031-
1032- let fv = {
1033- let cZ = fr
1030+ else split(drop(toString(pow(10, 0, fr, 0, 0, DOWN)), 1), "")
1031+ let eb = fi[bK]
1032+ func ft (fu,fv) = (fu :+ eb)
1033+
1034+ let fw = {
1035+ let cZ = fs
10341036 let da = size(cZ)
10351037 let db = nil
1036- func fw (dd,de) = if ((de >= da))
1037- then dd
1038- else fs(dd, cZ[de])
1039-
10401038 func fx (dd,de) = if ((de >= da))
10411039 then dd
1040+ else ft(dd, cZ[de])
1041+
1042+ func fy (dd,de) = if ((de >= da))
1043+ then dd
10421044 else throw("List size exceeds 25")
10431045
1044- fx(fw(fw(fw(fw(fw(fw(fw(fw(fw(fw(fw(fw(fw(fw(fw(fw(fw(fw(fw(fw(fw(fw(fw(fw(fw(db, 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)
1045- }
1046- (cX ++ fv)
1046+ fy(fx(fx(fx(fx(fx(fx(fx(fx(fx(fx(fx(fx(fx(fx(fx(fx(fx(fx(fx(fx(fx(fx(fx(fx(fx(db, 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)
1047+ }
1048+ (cX ++ fw)
10471049 }
10481050
10491051 let di = {
10501052 let cZ = bw
10511053 let da = size(cZ)
10521054 let db = nil
1053- func fw (dd,de) = if ((de >= da))
1054- then dd
1055- else fp(dd, cZ[de])
1056-
10571055 func fx (dd,de) = if ((de >= da))
10581056 then dd
1057+ else fq(dd, cZ[de])
1058+
1059+ func fy (dd,de) = if ((de >= da))
1060+ then dd
10591061 else throw("List size exceeds 6")
10601062
1061- fx(fw(fw(fw(fw(fw(fw(db, 0), 1), 2), 3), 4), 5), 6)
1062- }
1063- makeString(di, "")
1064- }
1065-
1066-
1067-func fy (fz) = {
1068- let fA = split(valueOrElse(getString(fz), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
1069-[toString(valueOrElse(parseInt(fA[ay]), 0)), if ((size(split(fA[az], "_")) == aa))
1070- then fA[az]
1071- else "0_0_0_0_0_0", if ((size(split(fA[aA], "_")) == aa))
1072- then fA[aA]
1073- else "0_0_0_0_0_0", fA[aB]]
1074- }
1075-
1076-
1077-func fB (fC) = {
1078- let dv = split(fC, "_")
1063+ fy(fx(fx(fx(fx(fx(fx(db, 0), 1), 2), 3), 4), 5), 6)
1064+ }
1065+ func fz (cX,dH) = (cX + di[dH])
1066+
1067+ let cZ = fh
1068+ let da = size(cZ)
1069+ let db = ""
1070+ func fA (dd,de) = if ((de >= da))
1071+ then dd
1072+ else fz(dd, cZ[de])
1073+
1074+ func fB (dd,de) = if ((de >= da))
1075+ then dd
1076+ else throw("List size exceeds 25")
1077+
1078+ fB(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(db, 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)
1079+ }
1080+
1081+
1082+func fC (fD) = {
1083+ let fE = split(valueOrElse(getString(fD), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
1084+[toString(valueOrElse(parseInt(fE[ay]), 0)), if ((size(split(fE[az], "_")) == aa))
1085+ then fE[az]
1086+ else "0_0_0_0_0_0", if ((size(split(fE[aA], "_")) == aa))
1087+ then fE[aA]
1088+ else "0_0_0_0_0_0", fE[aB]]
1089+ }
1090+
1091+
1092+func fF (fG) = {
1093+ let dv = split(fG, "_")
10791094 ((ad * (parseIntValue(dv[1]) + 1)) * parseIntValue(dv[0]))
10801095 }
10811096
10821097
1083-func fD (fE) = {
1084- let fF = fE[as]
1085- func fG (cX,fH) = (cX + parseIntValue(fH))
1086-
1087- func fI (cX,fH) = {
1098+func fH (fI) = {
1099+ let fJ = fI[as]
1100+ func fK (cX,fL) = (cX + parseIntValue(fL))
1101+
1102+ func fM (cX,fL) = {
10881103 let bK = cX._1
1089- let fJ = (((parseIntValue(fH) + ao) - 1) / ao)
1090- $Tuple2((bK + 1), (cX._2 + (fJ * bq)))
1091- }
1092-
1093- let fK = {
1094- let cZ = split(fE[aq], "_")
1104+ let fN = (((parseIntValue(fL) + ao) - 1) / ao)
1105+ $Tuple2((bK + 1), (cX._2 + (fN * bq)))
1106+ }
1107+
1108+ let fO = {
1109+ let cZ = split(fI[aq], "_")
10951110 let da = size(cZ)
10961111 let db = 0
10971112 func dc (dd,de) = if ((de >= da))
10981113 then dd
1099- else fG(dd, cZ[de])
1114+ else fK(dd, cZ[de])
11001115
11011116 func df (dd,de) = if ((de >= da))
11021117 then dd
11031118 else throw("List size exceeds 6")
11041119
11051120 df(dc(dc(dc(dc(dc(dc(db, 0), 1), 2), 3), 4), 5), 6)
11061121 }
1107- let fL = {
1108- let cZ = split(fE[ar], "_")
1122+ let fP = {
1123+ let cZ = split(fI[ar], "_")
11091124 let da = size(cZ)
11101125 let db = 0
1111- func fw (dd,de) = if ((de >= da))
1112- then dd
1113- else fG(dd, cZ[de])
1114-
11151126 func fx (dd,de) = if ((de >= da))
11161127 then dd
1128+ else fK(dd, cZ[de])
1129+
1130+ func fy (dd,de) = if ((de >= da))
1131+ then dd
11171132 else throw("List size exceeds 6")
11181133
1119- fx(fw(fw(fw(fw(fw(fw(db, 0), 1), 2), 3), 4), 5), 6)
1120- }
1121- let fM = if ((fF == ""))
1134+ fy(fx(fx(fx(fx(fx(fx(db, 0), 1), 2), 3), 4), 5), 6)
1135+ }
1136+ let fQ = if ((fJ == ""))
11221137 then 0
1123- else ( let cZ = split_4C(fF, "_")
1138+ else ( let cZ = split_4C(fJ, "_")
11241139 let da = size(cZ)
11251140 let db = $Tuple2(0, 0)
1126- func fN (dd,de) = if ((de >= da))
1141+ func fA (dd,de) = if ((de >= da))
11271142 then dd
1128- else fI(dd, cZ[de])
1129-
1130- func fO (dd,de) = if ((de >= da))
1143+ else fM(dd, cZ[de])
1144+
1145+ func fB (dd,de) = if ((de >= da))
11311146 then dd
11321147 else throw("List size exceeds 50")
11331148
1134- fO(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(db, 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
1135- ((fK + fL) + fM)
1136- }
1137-
1138-
1139-func fP (fQ,fR,fS) = {
1140- let fC = ((toString(fR) + "_") + toString(fS))
1141- let fT = fB(fC)
1142- let fU = valueOrElse(getString(fQ), (fC + ":0_0_0_0_0_0:0_0_0_0_0_0::0"))
1143- let fV = split_4C(fU, ":")
1144- let fW = fD(fV)
1145- let fX = if ((5 > size(fV)))
1146- then makeString(["0", toString(fW), toString((fT - fW)), toString(fT)], "_")
1149+ fB(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(db, 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
1150+ ((fO + fP) + fQ)
1151+ }
1152+
1153+
1154+func fR (fS,fT,fU) = {
1155+ let fG = ((toString(fT) + "_") + toString(fU))
1156+ let fV = fF(fG)
1157+ let fW = valueOrElse(getString(fS), (fG + ":0_0_0_0_0_0:0_0_0_0_0_0::0"))
1158+ let fX = split_4C(fW, ":")
1159+ let fY = fH(fX)
1160+ let fZ = if ((5 > size(fX)))
1161+ then makeString(["0", toString(fY), toString((fV - fY)), toString(fV)], "_")
11471162 else {
1148- let fY = split(fV[at], "_")
1149- let fZ = parseIntValue(fY[au])
1150- let ga = if ((size(fY) > 1))
1151- then parseIntValue(fY[av])
1152- else fW
1153- makeString([toString(fZ), toString(ga), toString(((fT - fZ) - ga)), toString(fT)], "_")
1154- }
1155-[fV[ap], if ((size(split(fV[aq], "_")) == aa))
1156- then fV[aq]
1157- else "0_0_0_0_0_0", if ((size(split(fV[ar], "_")) == aa))
1158- then fV[ar]
1159- else "0_0_0_0_0_0", fV[as], fX]
1160- }
1161-
1162-
1163-func gb (fE) = {
1164- let gc = fD(fE)
1165- let gd = parseIntValue(split(fE[at], "_")[au])
1166- ((fB(fE[ap]) - gc) - gd)
1167- }
1168-
1169-
1170-func ge (gf,gg) = {
1171- let fJ = if ((gf >= 0))
1172- then (((gf + gg) - 1) / gg)
1173- else -((((-(gf) + gg) - 1) / gg))
1174- (fJ * bq)
1175- }
1176-
1177-
1178-func gh (gi,fE,gj) = if ((size(gi) != 3))
1163+ let ga = split(fX[at], "_")
1164+ let gb = parseIntValue(ga[au])
1165+ let gc = if ((size(ga) > 1))
1166+ then parseIntValue(ga[av])
1167+ else fY
1168+ makeString([toString(gb), toString(gc), toString(((fV - gb) - gc)), toString(fV)], "_")
1169+ }
1170+[fX[ap], if ((size(split(fX[aq], "_")) == aa))
1171+ then fX[aq]
1172+ else "0_0_0_0_0_0", if ((size(split(fX[ar], "_")) == aa))
1173+ then fX[ar]
1174+ else "0_0_0_0_0_0", fX[as], fZ]
1175+ }
1176+
1177+
1178+func gd (fI) = {
1179+ let ge = fH(fI)
1180+ let gf = parseIntValue(split(fI[at], "_")[au])
1181+ ((fF(fI[ap]) - ge) - gf)
1182+ }
1183+
1184+
1185+func gg (gh,gi) = {
1186+ let fN = if ((gh >= 0))
1187+ then (((gh + gi) - 1) / gi)
1188+ else -((((-(gh) + gi) - 1) / gi))
1189+ (fN * bq)
1190+ }
1191+
1192+
1193+func gj (gk,fI,gl) = if ((size(gk) != 3))
11791194 then throw("cargoListStr should contain exactly 2 ':' separators")
11801195 else {
1181- let gk = split(gi[0], "_")
1182- let gl = split(gi[1], "_")
1183- let gm = if ((gi[2] == ""))
1196+ let gm = split(gk[0], "_")
1197+ let gn = split(gk[1], "_")
1198+ let go = if ((gk[2] == ""))
11841199 then nil
1185- else split(gi[2], "_")
1186- if ((size(gk) != aa))
1200+ else split(gk[2], "_")
1201+ if ((size(gm) != aa))
11871202 then throw("All 6 resources should be passed")
1188- else if ((size(gl) != aa))
1203+ else if ((size(gn) != aa))
11891204 then throw("All 6 materials should be passed")
11901205 else {
1191- let eO = gb(fE)
1192- let gn = split(fE[aq], "_")
1193- let go = split(fE[ar], "_")
1194- let gp = if ((fE[as] == ""))
1206+ let eO = gd(fI)
1207+ let gp = split(fI[aq], "_")
1208+ let gq = split(fI[ar], "_")
1209+ let gr = if ((fI[as] == ""))
11951210 then nil
1196- else split(fE[as], "_")
1197- let eM = split(gj[az], "_")
1198- let gq = split(gj[aA], "_")
1199- let gr = if ((gj[aB] == ""))
1211+ else split(fI[as], "_")
1212+ let eM = split(gl[az], "_")
1213+ let gs = split(gl[aA], "_")
1214+ let gt = if ((gl[aB] == ""))
12001215 then nil
1201- else split(gj[aB], "_")
1202- func gs (cX,fH) = {
1216+ else split(gl[aB], "_")
1217+ func gu (cX,fL) = {
12031218 let ez = cX._1
1204- let gt = parseIntValue(fH)
1205- let gu = parseIntValue(gn[ez])
1206- let gv = parseIntValue(eM[ez])
1207- if ((gt == 0))
1208- then $Tuple4((ez + 1), (cX._2 :+ gn[ez]), (cX._3 :+ eM[ez]), cX._4)
1209- else if ((gt > 0))
1210- then if ((gt > gv))
1211- then throw((((("Attempt to take " + fH) + " from backpack, but only ") + toString(gv)) + " available"))
1212- else $Tuple4((ez + 1), (cX._2 :+ toString((gu + gt))), (cX._3 :+ toString((gv - gt))), (cX._4 + gt))
1213- else if ((-(gt) > gu))
1214- then throw((((("Attempt to take " + toString(-(gt))) + " from warehouse, but only ") + toString(gu)) + " available"))
1215- else $Tuple4((ez + 1), (cX._2 :+ toString((gu + gt))), (cX._3 :+ toString((gv - gt))), (cX._4 + gt))
1219+ let gv = parseIntValue(fL)
1220+ let gw = parseIntValue(gp[ez])
1221+ let gx = parseIntValue(eM[ez])
1222+ if ((gv == 0))
1223+ then $Tuple4((ez + 1), (cX._2 :+ gp[ez]), (cX._3 :+ eM[ez]), cX._4)
1224+ else if ((gv > 0))
1225+ then if ((gv > gx))
1226+ then throw((((("Attempt to take " + fL) + " from backpack, but only ") + toString(gx)) + " available"))
1227+ else $Tuple4((ez + 1), (cX._2 :+ toString((gw + gv))), (cX._3 :+ toString((gx - gv))), (cX._4 + gv))
1228+ else if ((-(gv) > gw))
1229+ then throw((((("Attempt to take " + toString(-(gv))) + " from warehouse, but only ") + toString(gw)) + " available"))
1230+ else $Tuple4((ez + 1), (cX._2 :+ toString((gw + gv))), (cX._3 :+ toString((gx - gv))), (cX._4 + gv))
12161231 }
12171232
12181233 let di = {
1219- let cZ = gk
1234+ let cZ = gm
12201235 let da = size(cZ)
12211236 let db = $Tuple4(0, nil, nil, 0)
12221237 func dc (dd,de) = if ((de >= da))
12231238 then dd
1224- else gs(dd, cZ[de])
1239+ else gu(dd, cZ[de])
12251240
12261241 func df (dd,de) = if ((de >= da))
12271242 then dd
12281243 else throw("List size exceeds 6")
12291244
12301245 df(dc(dc(dc(dc(dc(dc(db, 0), 1), 2), 3), 4), 5), 6)
12311246 }
1232- func gw (cX,fH) = {
1247+ func gy (cX,fL) = {
12331248 let ez = cX._1
1234- let gt = parseIntValue(fH)
1235- let gx = parseIntValue(go[ez])
1236- let gy = parseIntValue(gq[ez])
1237- if ((gt == 0))
1238- then $Tuple4((ez + 1), (cX._2 :+ go[ez]), (cX._3 :+ gq[ez]), cX._4)
1239- else if ((gt > 0))
1240- then if ((gt > gy))
1241- then throw((((("Attempt to take " + fH) + " from backpack, but only ") + toString(gy)) + " available"))
1242- else $Tuple4((ez + 1), (cX._2 :+ toString((gx + gt))), (cX._3 :+ toString((gy - gt))), (cX._4 + gt))
1243- else if ((-(gt) > gx))
1244- then throw((((("Attempt to take " + toString(-(gt))) + " from warehouse, but only ") + toString(gx)) + " available"))
1245- else $Tuple4((ez + 1), (cX._2 :+ toString((gx + gt))), (cX._3 :+ toString((gy - gt))), (cX._4 + gt))
1249+ let gv = parseIntValue(fL)
1250+ let gz = parseIntValue(gq[ez])
1251+ let gA = parseIntValue(gs[ez])
1252+ if ((gv == 0))
1253+ then $Tuple4((ez + 1), (cX._2 :+ gq[ez]), (cX._3 :+ gs[ez]), cX._4)
1254+ else if ((gv > 0))
1255+ then if ((gv > gA))
1256+ then throw((((("Attempt to take " + fL) + " from backpack, but only ") + toString(gA)) + " available"))
1257+ else $Tuple4((ez + 1), (cX._2 :+ toString((gz + gv))), (cX._3 :+ toString((gA - gv))), (cX._4 + gv))
1258+ else if ((-(gv) > gz))
1259+ then throw((((("Attempt to take " + toString(-(gv))) + " from warehouse, but only ") + toString(gz)) + " available"))
1260+ else $Tuple4((ez + 1), (cX._2 :+ toString((gz + gv))), (cX._3 :+ toString((gA - gv))), (cX._4 + gv))
12461261 }
12471262
12481263 let eq = {
1249- let cZ = gl
1264+ let cZ = gn
12501265 let da = size(cZ)
12511266 let db = $Tuple4(0, nil, nil, di._4)
1252- func fw (dd,de) = if ((de >= da))
1253- then dd
1254- else gw(dd, cZ[de])
1255-
12561267 func fx (dd,de) = if ((de >= da))
12571268 then dd
1269+ else gy(dd, cZ[de])
1270+
1271+ func fy (dd,de) = if ((de >= da))
1272+ then dd
12581273 else throw("List size exceeds 6")
12591274
1260- fx(fw(fw(fw(fw(fw(fw(db, 0), 1), 2), 3), 4), 5), 6)
1275+ fy(fx(fx(fx(fx(fx(fx(db, 0), 1), 2), 3), 4), 5), 6)
12611276 }
1262- func gz (cX,fH) = {
1277+ func gB (cX,fL) = {
12631278 let ez = cX._1
1264- let gt = parseIntValue(fH)
1265- let gA = if ((size(gp) > ez))
1266- then parseIntValue(gp[ez])
1267- else 0
1268- let gB = if ((size(gr) > ez))
1279+ let gv = parseIntValue(fL)
1280+ let gC = if ((size(gr) > ez))
12691281 then parseIntValue(gr[ez])
12701282 else 0
1271- if ((gt == 0))
1272- then $Tuple4((ez + 1), (cX._2 :+ toString(gA)), (cX._3 :+ toString(gB)), cX._4)
1273- else if ((gt > 0))
1274- then if ((gt > gB))
1275- then throw((((("Attempt to take " + fH) + " from backpack, but only ") + toString(gB)) + " available"))
1283+ let gD = if ((size(gt) > ez))
1284+ then parseIntValue(gt[ez])
1285+ else 0
1286+ if ((gv == 0))
1287+ then $Tuple4((ez + 1), (cX._2 :+ toString(gC)), (cX._3 :+ toString(gD)), cX._4)
1288+ else if ((gv > 0))
1289+ then if ((gv > gD))
1290+ then throw((((("Attempt to take " + fL) + " from backpack, but only ") + toString(gD)) + " available"))
12761291 else {
1277- let gC = (ge((gA + gt), ao) - ge(gA, ao))
1278- $Tuple4((ez + 1), (cX._2 :+ toString((gA + gt))), (cX._3 :+ toString((gB - gt))), (cX._4 + gC))
1292+ let gE = (gg((gC + gv), ao) - gg(gC, ao))
1293+ $Tuple4((ez + 1), (cX._2 :+ toString((gC + gv))), (cX._3 :+ toString((gD - gv))), (cX._4 + gE))
12791294 }
1280- else if ((-(gt) > gA))
1281- then throw((((("Attempt to take " + toString(-(gt))) + " from warehouse, but only ") + toString(gA)) + " available"))
1295+ else if ((-(gv) > gC))
1296+ then throw((((("Attempt to take " + toString(-(gv))) + " from warehouse, but only ") + toString(gC)) + " available"))
12821297 else {
1283- let gC = (ge((gA + gt), ao) - ge(gA, ao))
1284- $Tuple4((ez + 1), (cX._2 :+ toString((gA + gt))), (cX._3 :+ toString((gB - gt))), (cX._4 + gC))
1298+ let gE = (gg((gC + gv), ao) - gg(gC, ao))
1299+ $Tuple4((ez + 1), (cX._2 :+ toString((gC + gv))), (cX._3 :+ toString((gD - gv))), (cX._4 + gE))
12851300 }
12861301 }
12871302
1288- let fA = if ((size(gm) != 0))
1303+ let fE = if ((size(go) != 0))
12891304 then {
1290- let cZ = gm
1305+ let cZ = go
12911306 let da = size(cZ)
12921307 let db = $Tuple4(0, nil, nil, eq._4)
1293- func fN (dd,de) = if ((de >= da))
1308+ func fA (dd,de) = if ((de >= da))
12941309 then dd
1295- else gz(dd, cZ[de])
1296-
1297- func fO (dd,de) = if ((de >= da))
1310+ else gB(dd, cZ[de])
1311+
1312+ func fB (dd,de) = if ((de >= da))
12981313 then dd
12991314 else throw("List size exceeds 50")
13001315
1301- fO(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(fN(db, 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)
1316+ fB(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(db, 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)
13021317 }
1303- else $Tuple4(0, gp, gr, eq._4)
1304- let gD = fA._4
1305- if ((gD > eO))
1306- then throw((((("Attempt to put total " + toString(gD)) + " stuff, but only ") + toString(eO)) + " warehouse space left"))
1307- else $Tuple7(makeString(di._2, "_"), makeString(eq._2, "_"), makeString(fA._2, "_"), makeString(di._3, "_"), makeString(eq._3, "_"), makeString(fA._3, "_"), gD)
1318+ else $Tuple4(0, gr, gt, eq._4)
1319+ let gF = fE._4
1320+ if ((gF > eO))
1321+ then throw((((("Attempt to put total " + toString(gF)) + " stuff, but only ") + toString(eO)) + " warehouse space left"))
1322+ else $Tuple7(makeString(di._2, "_"), makeString(eq._2, "_"), makeString(fE._2, "_"), makeString(di._3, "_"), makeString(eq._3, "_"), makeString(fE._3, "_"), gF)
13081323 }
13091324 }
13101325
13111326
1312-func gE (gF,gG) = {
1313- let bb = toString(gF)
1314- let gH = eU(toBigInt(gG))
1315- let gI = valueOrElse(getInteger(cy()), (cx + 1))
1316- let cA = toString(gI)
1317- let fd = toInt((gH % cr))
1318- let eC = fb(gH, fd)
1319- let gJ = ai[fd]
1320- let gK = Issue(cQ(cA, "S"), makeString([cA, "S", eC, gJ], "_"), 1, 0, false)
1321- let aE = calculateAssetId(gK)
1322- let gL = toBase58String(aE)
1323- $Tuple2([IntegerEntry(cy(), (gI + 1)), gK, StringEntry(cz(cA), gL), StringEntry(aD(gL), bb), StringEntry(cF(cA), bb), IntegerEntry(aH(gL), 0), IntegerEntry(cD(gL, bb), 0), ScriptTransfer(gF, 1, aE)], $Tuple2(gL, gJ))
1324- }
1325-
1326-
1327-func gM (bb,gN,gO) = if (!(sigVerify_8Kb(gN, gO, cj)))
1327+func gG (gH,gI) = {
1328+ let bb = toString(gH)
1329+ let gJ = eU(toBigInt(gI))
1330+ let gK = valueOrElse(getInteger(cy()), (cx + 1))
1331+ let cA = toString(gK)
1332+ let fd = toInt((gJ % cr))
1333+ let eC = fb(gJ, fd)
1334+ let gL = ai[fd]
1335+ let gM = Issue(cQ(cA, "S"), makeString([cA, "S", eC, gL], "_"), 1, 0, false)
1336+ let aE = calculateAssetId(gM)
1337+ let gN = toBase58String(aE)
1338+ $Tuple2([IntegerEntry(cy(), (gK + 1)), gM, StringEntry(cz(cA), gN), StringEntry(aD(gN), bb), StringEntry(cF(cA), bb), IntegerEntry(aH(gN), 0), IntegerEntry(cD(gN, bb), 0), ScriptTransfer(gH, 1, aE)], $Tuple2(gN, gL))
1339+ }
1340+
1341+
1342+func gO (bb,gP,gQ) = if (!(sigVerify_8Kb(gP, gQ, cj)))
13281343 then throw("signature does not match")
13291344 else {
1330- let dv = split(toUtf8String(gN), ";")
1331- let gP = split(dv[0], "|")
1332- let gQ = split(gP[cM], "_")
1333- let gR = parseIntValue(gQ[0])
1334- let gS = parseIntValue(gQ[1])
1335- let gT = split(dv[1], ":")
1336- let gU = gT[0]
1337- let gV = parseIntValue(gP[cN])
1338- if (if ((gV > (lastBlock.timestamp + cl)))
1345+ let dv = split(toUtf8String(gP), ";")
1346+ let gR = split(dv[0], "|")
1347+ let gS = split(gR[cM], "_")
1348+ let gT = parseIntValue(gS[0])
1349+ let gU = parseIntValue(gS[1])
1350+ let gV = split(dv[1], ":")
1351+ let gW = gV[0]
1352+ let gX = parseIntValue(gR[cN])
1353+ if (if ((gX > (lastBlock.timestamp + cl)))
13391354 then true
1340- else ((lastBlock.timestamp - cl) > gV))
1341- then throw(((("signature outdated: logTime=" + toString(gV)) + ", bcTime=") + toString(lastBlock.timestamp)))
1355+ else ((lastBlock.timestamp - cl) > gX))
1356+ then throw(((("signature outdated: logTime=" + toString(gX)) + ", bcTime=") + toString(lastBlock.timestamp)))
13421357 else {
1343- let gW = gT[1]
1344- let gX = valueOrElse(getString(aC(bb)), "")
1345- if ((gX != gW))
1346- then throw(((("Tx ids don't match! In state: " + gX) + ", in msg: ") + gW))
1358+ let gY = gV[1]
1359+ let gZ = valueOrElse(getString(aC(bb)), "")
1360+ if ((gZ != gY))
1361+ then throw(((("Tx ids don't match! In state: " + gZ) + ", in msg: ") + gY))
13471362 else {
13481363 let r = valueOrErrorMessage(getString(aW(bb)), "You don't have a duck staked")
1349- let gY = q(r)
1350- let gZ = M(valueOrElse(getInteger(u(r)), 0))
1351- let ha = valueOrElse(getInteger(gY), gZ)
1352- if ((ha != gR))
1353- then throw(((("oldHealth=" + toString(ha)) + " from state does not match one from flight log=") + toString(gR)))
1354- else if ((0 >= gR))
1364+ let ha = q(r)
1365+ let hb = M(valueOrElse(getInteger(u(r)), 0))
1366+ let hc = valueOrElse(getInteger(ha), hb)
1367+ if ((hc != gT))
1368+ then throw(((("oldHealth=" + toString(hc)) + " from state does not match one from flight log=") + toString(gT)))
1369+ else if ((0 >= gT))
13551370 then throw("You can't fly with zero health")
13561371 else {
1357- let hb = if ((size(gP) > cO))
1358- then gP[cO]
1372+ let hd = if ((size(gR) > cO))
1373+ then gR[cO]
13591374 else ""
1360- let hc = if ((size(gP) > cP))
1361- then gP[cP]
1375+ let he = if ((size(gR) > cP))
1376+ then gR[cP]
13621377 else ""
1363- let hd = if (if ((gS > 0))
1364- then (hb == "$")
1378+ let hf = if (if ((gU > 0))
1379+ then (hd == "$")
13651380 else false)
13661381 then cc(invoke(bL, "sendUsdtPrize", [bb], nil))
13671382 else 0
1368- $Tuple5(gS, r, hd, gU, hc)
1383+ $Tuple5(gU, r, hf, gW, he)
13691384 }
13701385 }
13711386 }
13721387 }
13731388
13741389
1375-func he (gF,gG,gN,gO) = {
1376- let bb = toString(gF)
1377- let fe = gM(bb, gN, gO)
1390+func hg (gH,gI,gP,gQ) = {
1391+ let bb = toString(gH)
1392+ let fe = gO(bb, gP, gQ)
13781393 let r = fe._2
1379- let gY = q(r)
1380- let fz = aX(r)
1381- let gj = fy(fz)
1382- let hf = split(gj[aA], "_")
1383- let hg = makeString(dj(true, hf, cp), "_")
1384- let hh = w(r)
1385- let hi = valueOrElse(getString(hh), ",;,_,;,_,;,_,;,_,;,_,;,")
1386- let hj = dq(hi, fe._5)
1394+ let ha = q(r)
1395+ let fD = aX(r)
1396+ let gl = fC(fD)
1397+ let hh = split(gl[aA], "_")
1398+ let hi = makeString(dj(true, hh, cp), "_")
1399+ let hj = w(r)
1400+ let hk = valueOrElse(getString(hj), ",;,_,;,_,;,_,;,_,;,_,;,")
1401+ let hl = dq(hk, fe._5)
13871402 if ((0 >= fe._1))
1388- then $Tuple3([IntegerEntry(gY, 0), StringEntry(hh, hj)], "", 0)
1403+ then $Tuple3([IntegerEntry(ha, 0), StringEntry(hj, hl)], "", 0)
13891404 else {
1390- let fu = gE(gF, gG)
1391- let gL = fu._2._1
1392- $Tuple3(((((fu._1 :+ StringEntry(aY(r), makeString([fu._2._2, "L", gL], "_"))) :+ IntegerEntry(gY, fe._1)) :+ StringEntry(hh, hj)) :+ StringEntry(fz, makeString([gj[ay], gj[az], hg, gj[aB]], ":"))), gL, fe._3)
1393- }
1394- }
1395-
1396-
1397-func hk (aO,hl) = {
1398- let fS = valueOrElse(getInteger(aH(aO)), 0)
1399- let hm = valueOrElse(getInteger(aI(Z, aO)), 0)
1400- let hn = (fS / 6)
1401- let ho = (fS / 7)
1402- ((ab + fraction(ab, ((fS + hn) + (2 * ho)), 5)) + fraction(ab, hm, (hl * 5)))
1403- }
1404-
1405-
1406-func hp (b,hq,hr) = {
1407- let hs = if ((hq == cJ))
1408- then $Tuple2(hr, valueOrElse(getString(aW(b)), ""))
1405+ let hm = gG(gH, gI)
1406+ let gN = hm._2._1
1407+ $Tuple3(((((hm._1 :+ StringEntry(aY(r), makeString([hm._2._2, "L", gN], "_"))) :+ IntegerEntry(ha, fe._1)) :+ StringEntry(hj, hl)) :+ StringEntry(fD, makeString([gl[ay], gl[az], hi, gl[aB]], ":"))), gN, fe._3)
1408+ }
1409+ }
1410+
1411+
1412+func hn (aO,ho) = {
1413+ let fU = valueOrElse(getInteger(aH(aO)), 0)
1414+ let hp = valueOrElse(getInteger(aI(Z, aO)), 0)
1415+ let hq = (fU / 6)
1416+ let hr = (fU / 7)
1417+ ((ab + fraction(ab, ((fU + hq) + (2 * hr)), 5)) + fraction(ab, hp, (ho * 5)))
1418+ }
1419+
1420+
1421+func hs (b,ht,hu) = {
1422+ let hv = if ((ht == cJ))
1423+ then $Tuple2(hu, valueOrElse(getString(aW(b)), ""))
14091424 else {
14101425 let r = valueOrErrorMessage(getString(aW(b)), "You don't have a duck staked")
1411- let ht = valueOrElse(getString(aY(r)), ae)
1412- let hu = split(value(ht), "_")
1413- if ((hu[bd] != "L"))
1414- then throw((("Duck location type is " + hu[bd]) + ", but should be L"))
1415- else $Tuple2(hu[be], r)
1416- }
1417- let aO = hs._1
1418- let hv = hs._2
1419- let hw = value(assetInfo(fromBase58String(aO)))
1420- let hx = aG(aO)
1421- let hy = valueOrErrorMessage(getInteger(hx), (("Land " + hw.name) + " is not staked"))
1422- let hz = valueOrErrorMessage(getString(aD(aO)), (("NFT " + hw.name) + " is orphaned"))
1423- if ((hz != b))
1426+ let hw = valueOrElse(getString(aY(r)), ae)
1427+ let hx = split(value(hw), "_")
1428+ if ((hx[bd] != "L"))
1429+ then throw((("Duck location type is " + hx[bd]) + ", but should be L"))
1430+ else $Tuple2(hx[be], r)
1431+ }
1432+ let aO = hv._1
1433+ let hy = hv._2
1434+ let hz = value(assetInfo(fromBase58String(aO)))
1435+ let hA = aG(aO)
1436+ let hB = valueOrErrorMessage(getInteger(hA), (("Land " + hz.name) + " is not staked"))
1437+ let hC = valueOrErrorMessage(getString(aD(aO)), (("NFT " + hz.name) + " is orphaned"))
1438+ if ((hC != b))
14241439 then throw((X + " is not yours"))
14251440 else {
1426- let hA = split(hw.description, "_")
1427- $Tuple4(hv, aO, hA, hy)
1428- }
1429- }
1430-
1431-
1432-func hB (b,gf,hq,hr) = if ((0 > gf))
1441+ let hD = split(hz.description, "_")
1442+ $Tuple4(hy, aO, hD, hB)
1443+ }
1444+ }
1445+
1446+
1447+func hE (b,gh,ht,hu) = if ((0 > gh))
14331448 then throw("Negative amount")
14341449 else {
1435- let eb = hp(b, hq, hr)
1450+ let eb = hs(b, ht, hu)
14361451 let cf = eb._3[bQ]
14371452 let ev = eB(eb._3[bR])
14381453 let eF = (lastBlock.timestamp - eb._4)
14391454 if ((0 > eF))
14401455 then throw(((("Saved timestamp is in future, saved = " + toString(eb._4)) + ", current = ") + toString(lastBlock.timestamp)))
14411456 else {
1442- let hl = ce(cf)
1443- let hC = hk(eb._2, hl)
1444- let hD = fraction(eF, (hC * hl), ac)
1445- if ((gf > hD))
1446- then throw(((("Not enough resources, available = " + toString(hD)) + ", requested = ") + toString(gf)))
1457+ let ho = ce(cf)
1458+ let hF = hn(eb._2, ho)
1459+ let hG = fraction(eF, (hF * ho), ac)
1460+ if ((gh > hG))
1461+ then throw(((("Not enough resources, available = " + toString(hG)) + ", requested = ") + toString(gh)))
14471462 else {
1448- let hE = fraction((hD - gf), ac, (hC * hl))
1449- let hF = (lastBlock.timestamp - hE)
1450- let fR = (hl / br)
1451- let eN = eJ(ev, (eF - hE), fR, hC)
1452- let fQ = aN(eb._2)
1453- let fS = valueOrElse(getInteger(aH(eb._2)), 0)
1454- let fE = fP(fQ, fR, fS)
1455- let fY = split(fE[at], "_")
1456- let eO = parseIntValue(fY[aw])
1457- if (if ((hq == cJ))
1458- then (gf > eO)
1463+ let hH = fraction((hG - gh), ac, (hF * ho))
1464+ let hI = (lastBlock.timestamp - hH)
1465+ let fT = (ho / br)
1466+ let eN = eJ(ev, (eF - hH), fT, hF)
1467+ let fS = aN(eb._2)
1468+ let fU = valueOrElse(getInteger(aH(eb._2)), 0)
1469+ let fI = fR(fS, fT, fU)
1470+ let ga = split(fI[at], "_")
1471+ let eO = parseIntValue(ga[aw])
1472+ if (if ((ht == cJ))
1473+ then (gh > eO)
14591474 else false)
14601475 then throw((("Only " + toString(eO)) + " space left in warehouse"))
14611476 else {
1462- let fz = aX(eb._1)
1463- let gj = fy(fz)
1464- let eM = split(gj[az], "_")
1465- let eL = split(fE[aq], "_")
1466- let hG = if ((hq == cJ))
1467- then $Tuple4(eD(eL, ev, (eF - hE), fR, hC), gj[az], (parseIntValue(fY[av]) + eN._2), (parseIntValue(fY[aw]) - eN._2))
1468- else if ((hq == cK))
1469- then $Tuple4(fE[aq], eD(eM, ev, (eF - hE), fR, hC), parseIntValue(fY[av]), parseIntValue(fY[aw]))
1477+ let fD = aX(eb._1)
1478+ let gl = fC(fD)
1479+ let eM = split(gl[az], "_")
1480+ let eL = split(fI[aq], "_")
1481+ let hJ = if ((ht == cJ))
1482+ then $Tuple4(eD(eL, ev, (eF - hH), fT, hF), gl[az], (parseIntValue(ga[av]) + eN._2), (parseIntValue(ga[aw]) - eN._2))
1483+ else if ((ht == cK))
1484+ then $Tuple4(fI[aq], eD(eM, ev, (eF - hH), fT, hF), parseIntValue(ga[av]), parseIntValue(ga[aw]))
14701485 else {
1471- let hH = eK(eL, eM, eN, eO)
1472- let hI = min([parseIntValue(fY[aw]), eN._2])
1473- $Tuple4(hH._1, hH._2, (parseIntValue(fY[av]) + hI), (parseIntValue(fY[aw]) - hI))
1486+ let hK = eK(eL, eM, eN, eO)
1487+ let hL = min([parseIntValue(ga[aw]), eN._2])
1488+ $Tuple4(hK._1, hK._2, (parseIntValue(ga[av]) + hL), (parseIntValue(ga[aw]) - hL))
14741489 }
1475- let hJ = hG._1
1476- let hK = hG._2
1477- let hL = hG._3
1478- let hM = hG._4
1479- $Tuple5([IntegerEntry(aG(eb._2), hF), IntegerEntry(aK(X, eb._2, b), hF)], fz, [gj[ay], hK, gj[aA], gj[aB]], fQ, [fE[ap], hJ, fE[ar], fE[as], makeString([fY[au], toString(hL), toString(hM), fY[ax]], "_")])
1490+ let hM = hJ._1
1491+ let hN = hJ._2
1492+ let hO = hJ._3
1493+ let hP = hJ._4
1494+ $Tuple5([IntegerEntry(aG(eb._2), hI), IntegerEntry(aK(X, eb._2, b), hI)], fD, [gl[ay], hN, gl[aA], gl[aB]], fS, [fI[ap], hM, fI[ar], fI[as], makeString([ga[au], toString(hO), toString(hP), ga[ax]], "_")])
14801495 }
14811496 }
14821497 }
14831498 }
14841499
14851500
1486-func hN (b,aO,hl,hq) = {
1487- let hx = aG(aO)
1488- let hy = value(getInteger(hx))
1489- let hD = (fraction((lastBlock.timestamp - hy), hk(aO, hl), ac) * hl)
1490- hB(b, hD, hq, aO)
1491- }
1492-
1493-
1494-func hO (dk,gF,hP,aO) = {
1495- let b = toString(gF)
1496- let eb = hp(b, cL, aO)
1497- let hl = ce(eb._3[bQ])
1498- let hQ = aH(eb._2)
1499- let hR = valueOrElse(getInteger(hQ), 0)
1500- if ((hR >= 3))
1501+func hQ (b,aO,ho,ht) = {
1502+ let hA = aG(aO)
1503+ let hB = value(getInteger(hA))
1504+ let hG = (fraction((lastBlock.timestamp - hB), hn(aO, ho), ac) * ho)
1505+ hE(b, hG, ht, aO)
1506+ }
1507+
1508+
1509+func hR (dk,gH,hS,aO) = {
1510+ let b = toString(gH)
1511+ let eb = hs(b, cL, aO)
1512+ let ho = ce(eb._3[bQ])
1513+ let hT = aH(eb._2)
1514+ let hU = valueOrElse(getInteger(hT), 0)
1515+ if ((hU >= 3))
15011516 then throw("Currently max infrastructure level = 3")
15021517 else {
1503- let R = (hR + 1)
1504- let hS = fraction(co, (hl * R), br)
1518+ let R = (hU + 1)
1519+ let hV = fraction(co, (ho * R), br)
15051520 if (if (!(dk))
1506- then (hP != hS)
1521+ then (hS != hV)
15071522 else false)
1508- then throw(("Payment attached should be " + toString(hS)))
1523+ then throw(("Payment attached should be " + toString(hV)))
15091524 else {
1510- let fz = aX(eb._1)
1511- let gj = fy(fz)
1512- let hf = split(gj[aA], "_")
1513- let hT = fraction(bm, (hl * R), br)
1514- let hg = makeString(dj(dk, hf, hT), "_")
1515- let hU = hN(b, eb._2, hl, cL)
1516- let hV = hU._5
1517- let hW = fB(hV[ap])
1518- let hX = makeString([split(hV[ap], "_")[0], toString(R)], "_")
1519- let hY = fB(hX)
1520- let fY = split(hV[at], "_")
1521- let hZ = makeString([fY[au], fY[av], toString(((parseIntValue(fY[aw]) + hY) - hW)), toString(hY)], "_")
1522- $Tuple3(([IntegerEntry(hQ, R), IntegerEntry(cD(eb._2, b), R), StringEntry(fz, makeString([gj[ay], hU._3[az], hg, gj[aB]], ":")), StringEntry(hU._4, makeString([hX, hV[aq], hV[ar], hV[as], hZ], ":"))] ++ hU._1), R, hT)
1525+ let fD = aX(eb._1)
1526+ let gl = fC(fD)
1527+ let hh = split(gl[aA], "_")
1528+ let hW = fraction(bm, (ho * R), br)
1529+ let hi = makeString(dj(dk, hh, hW), "_")
1530+ let hX = hQ(b, eb._2, ho, cL)
1531+ let hY = hX._5
1532+ let hZ = fF(hY[ap])
1533+ let ia = makeString([split(hY[ap], "_")[0], toString(R)], "_")
1534+ let ib = fF(ia)
1535+ let ga = split(hY[at], "_")
1536+ let ic = makeString([ga[au], ga[av], toString(((parseIntValue(ga[aw]) + ib) - hZ)), toString(ib)], "_")
1537+ $Tuple3(([IntegerEntry(hT, R), IntegerEntry(cD(eb._2, b), R), StringEntry(fD, makeString([gl[ay], hX._3[az], hi, gl[aB]], ":")), StringEntry(hX._4, makeString([ia, hY[aq], hY[ar], hY[as], ic], ":"))] ++ hX._1), R, hW)
15231538 }
15241539 }
15251540 }
15261541
15271542
1528-func ia (r,ib) = if (!(bh))
1543+func id (r,ie) = if (!(bh))
15291544 then $Tuple2(nil, 0)
15301545 else {
1531- let ic = u(r)
1532- let id = t(r)
1533- let L = valueOrElse(getInteger(T, id), 0)
1534- let Q = (L + ib)
1535- let ie = O(valueOrElse(getInteger(T, ic), 0), Q)
1536- let if = v(r)
1537- $Tuple2([IntegerEntry(ic, ie[0]), IntegerEntry(id, Q), IntegerEntry(if, (valueOrElse(getInteger(if), 0) + ie[1]))], Q)
1538- }
1539-
1540-
1541-func ig (b,ib) = if (!(bh))
1546+ let if = u(r)
1547+ let ig = t(r)
1548+ let L = valueOrElse(getInteger(T, ig), 0)
1549+ let Q = (L + ie)
1550+ let ih = O(valueOrElse(getInteger(T, if), 0), Q)
1551+ let ii = v(r)
1552+ $Tuple2([IntegerEntry(if, ih[0]), IntegerEntry(ig, Q), IntegerEntry(ii, (valueOrElse(getInteger(ii), 0) + ih[1]))], Q)
1553+ }
1554+
1555+
1556+func ij (b,ie) = if (!(bh))
15421557 then $Tuple2(nil, 0)
15431558 else {
1544- let ic = y(b)
1545- let id = x(b)
1546- let L = valueOrElse(getInteger(T, id), 0)
1547- let Q = (L + ib)
1548- let ie = O(valueOrElse(getInteger(T, ic), 0), Q)
1549- let if = z(b)
1550- $Tuple2([IntegerEntry(ic, ie[0]), IntegerEntry(id, Q), IntegerEntry(if, (valueOrElse(getInteger(if), 0) + ie[1]))], Q)
1551- }
1552-
1553-
1554-func ih (b) = {
1559+ let if = y(b)
1560+ let ig = x(b)
1561+ let L = valueOrElse(getInteger(T, ig), 0)
1562+ let Q = (L + ie)
1563+ let ih = O(valueOrElse(getInteger(T, if), 0), Q)
1564+ let ii = z(b)
1565+ $Tuple2([IntegerEntry(if, ih[0]), IntegerEntry(ig, Q), IntegerEntry(ii, (valueOrElse(getInteger(ii), 0) + ih[1]))], Q)
1566+ }
1567+
1568+
1569+func ik (b) = {
15551570 let r = valueOrErrorMessage(getString(aW(b)), "You don't have a duck staked")
1556- let ii = aR(b)
1557- let ij = getString(ii)
1558- if (!(isDefined(ij)))
1571+ let il = aR(b)
1572+ let im = getString(il)
1573+ if (!(isDefined(im)))
15591574 then throw("You are not eligible for ONBOARD artifact")
15601575 else {
1561- let ik = aT(b)
1562- let il = getString(ik)
1563- if (isDefined(il))
1564- then throw(("You already used your ONBOARD artifact on duck " + value(il)))
1576+ let in = aT(b)
1577+ let io = getString(in)
1578+ if (isDefined(io))
1579+ then throw(("You already used your ONBOARD artifact on duck " + value(io)))
15651580 else {
1566- let im = aS(r)
1567- let in = getString(im)
1568- if (isDefined(in))
1569- then throw(((("The duck " + r) + " already got points from ONBOARD artifact from user ") + value(in)))
1570- else ([StringEntry(ik, r), StringEntry(im, b)] ++ ia(r, I)._1)
1581+ let ip = aS(r)
1582+ let iq = getString(ip)
1583+ if (isDefined(iq))
1584+ then throw(((("The duck " + r) + " already got points from ONBOARD artifact from user ") + value(iq)))
1585+ else ([StringEntry(in, r), StringEntry(ip, b)] ++ id(r, I)._1)
15711586 }
15721587 }
15731588 }
15741589
15751590
1576-func io (b,hr) = {
1577- let eb = hp(b, cL, hr)
1591+func ir (b,hu) = {
1592+ let eb = hs(b, cL, hu)
15781593 let aO = eb._2
1579- let hl = ce(eb._3[bQ])
1580- let ip = aI(Z, aO)
1581- if ((valueOrElse(getInteger(ip), 0) > 0))
1594+ let ho = ce(eb._3[bQ])
1595+ let is = aI(Z, aO)
1596+ if ((valueOrElse(getInteger(is), 0) > 0))
15821597 then throw("Presale artifact is already activated")
15831598 else if ((parseIntValue(eb._3[bP]) > cx))
15841599 then throw((((X + " ") + aO) + " is not eligible for presale artifact"))
15851600 else {
1586- let hU = hN(b, aO, hl, cL)
1587- ((((hU._1 :+ IntegerEntry(ip, hl)) :+ IntegerEntry(cE(Z, aO, b), hl)) :+ StringEntry(hU._2, makeString(hU._3, ":"))) :+ StringEntry(hU._4, makeString(hU._5, ":")))
1601+ let hX = hQ(b, aO, ho, cL)
1602+ ((((hX._1 :+ IntegerEntry(is, ho)) :+ IntegerEntry(cE(Z, aO, b), ho)) :+ StringEntry(hX._2, makeString(hX._3, ":"))) :+ StringEntry(hX._4, makeString(hX._5, ":")))
15881603 }
15891604 }
15901605
15911606
1592-func iq (ir,R,is,b,it,gG,iu) = {
1607+func it (iu,R,iv,b,iw,gI,ix) = {
15931608 let r = valueOrErrorMessage(getString(aW(b)), "You don't have a duck staked")
1594- func iv (cX,aO) = {
1595- let hw = value(assetInfo(fromBase58String(aO)))
1596- let hx = aG(aO)
1597- let hy = valueOrErrorMessage(getInteger(hx), (("NFT " + hw.name) + " is not staked"))
1598- let hz = valueOrErrorMessage(getString(aD(aO)), (("NFT " + hw.name) + " is orphaned"))
1599- if ((hz != b))
1609+ func iy (cX,aO) = {
1610+ let hz = value(assetInfo(fromBase58String(aO)))
1611+ let hA = aG(aO)
1612+ let hB = valueOrErrorMessage(getInteger(hA), (("NFT " + hz.name) + " is not staked"))
1613+ let hC = valueOrErrorMessage(getString(aD(aO)), (("NFT " + hz.name) + " is orphaned"))
1614+ if ((hC != b))
16001615 then throw((X + " is not yours"))
16011616 else {
1602- let hA = split(hw.description, "_")
1603- let gJ = hA[bS]
1617+ let hD = split(hz.description, "_")
1618+ let gL = hD[bS]
16041619 if (if ((cX._3 != ""))
1605- then (cX._3 != gJ)
1620+ then (cX._3 != gL)
16061621 else false)
16071622 then throw("Lands should be on the same continent to merge")
16081623 else {
1609- let cf = hA[bQ]
1610- let iw = cX._1
1611- let ez = valueOrErrorMessage(indexOf(iw, cf), "You haven't passed all the lands needed")
1612- let ix = (take(iw, ez) + drop(iw, (ez + 1)))
1613- let hl = ce(cf)
1614- let iy = (cX._2 + valueOrElse(getInteger(aI(Z, aO)), 0))
1615- let fS = valueOrElse(getInteger(aH(aO)), 0)
1616- let iz = {
1624+ let cf = hD[bQ]
1625+ let iz = cX._1
1626+ let ez = valueOrErrorMessage(indexOf(iz, cf), "You haven't passed all the lands needed")
1627+ let iA = (take(iz, ez) + drop(iz, (ez + 1)))
1628+ let ho = ce(cf)
1629+ let iB = (cX._2 + valueOrElse(getInteger(aI(Z, aO)), 0))
1630+ let fU = valueOrElse(getInteger(aH(aO)), 0)
1631+ let iC = {
16171632 let bk = cf
16181633 if (("S" == bk))
16191634 then 3
16201635 else if (("M" == bk))
16211636 then 4
16221637 else if (("L" == bk))
16231638 then 5
16241639 else if (("XL" == bk))
16251640 then 6
16261641 else throw("Only S, M, L, XL can merge")
16271642 }
1628- if ((fS != iz))
1643+ if ((fU != iC))
16291644 then throw("All lands should be maxed to merge")
16301645 else {
1631- let cA = hA[bP]
1632- let ev = eB(hA[bR])
1633- let eF = (lastBlock.timestamp - hy)
1646+ let cA = hD[bP]
1647+ let ev = eB(hD[bR])
1648+ let eF = (lastBlock.timestamp - hB)
16341649 if ((0 > eF))
1635- then throw(((("Saved timestamp is in future, saved = " + toString(hy)) + ", current = ") + toString(lastBlock.timestamp)))
1650+ then throw(((("Saved timestamp is in future, saved = " + toString(hB)) + ", current = ") + toString(lastBlock.timestamp)))
16361651 else {
1637- let hC = hk(aO, hl)
1638- let fR = (hl / br)
1639- let hK = eD(split(cX._4, "_"), ev, eF, fR, hC)
1640- let dh = et(cX._6, ev, fR, -1)
1641- let fj = et(cX._9, ev, fR, 1)
1642- let iA = cX._7
1643- let bK = indexOf(iA, aO)
1652+ let hF = hn(aO, ho)
1653+ let fT = (ho / br)
1654+ let hN = eD(split(cX._4, "_"), ev, eF, fT, hF)
1655+ let dh = et(cX._6, ev, fT, -1)
1656+ let fk = et(cX._9, ev, fT, 1)
1657+ let iD = cX._7
1658+ let bK = indexOf(iD, aO)
16441659 if (!(isDefined(bK)))
16451660 then throw(("Your staked lands don't contain " + aO))
16461661 else {
1647- let iB = aF(aO)
1648- let iC = valueOrElse(getString(iB), "")
1649- $Tuple9(ix, iy, gJ, hK, (((((((((((((cX._5 :+ DeleteEntry(aG(aO))) :+ DeleteEntry(aK(X, aO, b))) :+ DeleteEntry(cz(cA))) :+ DeleteEntry(aD(aO))) :+ DeleteEntry(aH(aO))) :+ DeleteEntry(cD(aO, b))) :+ DeleteEntry(aI(Z, aO))) :+ DeleteEntry(cE(Z, aO, b))) :+ DeleteEntry(cF(cA))) :+ DeleteEntry(aN(aO))) :+ DeleteEntry(iB)) :+ DeleteEntry(cB(iC))) :+ Burn(fromBase58String(aO), 1)), dh, removeByIndex(iA, value(bK)), (cX._8 + hl), fj)
1662+ let iE = aF(aO)
1663+ let iF = valueOrElse(getString(iE), "")
1664+ $Tuple9(iA, iB, gL, hN, (((((((((((((cX._5 :+ DeleteEntry(aG(aO))) :+ DeleteEntry(aK(X, aO, b))) :+ DeleteEntry(cz(cA))) :+ DeleteEntry(aD(aO))) :+ DeleteEntry(aH(aO))) :+ DeleteEntry(cD(aO, b))) :+ DeleteEntry(aI(Z, aO))) :+ DeleteEntry(cE(Z, aO, b))) :+ DeleteEntry(cF(cA))) :+ DeleteEntry(aN(aO))) :+ DeleteEntry(iE)) :+ DeleteEntry(cB(iF))) :+ Burn(fromBase58String(aO), 1)), dh, removeByIndex(iD, value(bK)), (cX._8 + ho), fk)
16501665 }
16511666 }
16521667 }
16531668 }
16541669 }
16551670 }
16561671
1657- let fz = aX(r)
1658- let gj = fy(fz)
1672+ let fD = aX(r)
1673+ let gl = fC(fD)
16591674 let eu = split(valueOrElse(getString(bW()), "0_0_0_0_0_0"), "_")
1660- let iD = bX(b)
1661- let iE = getString(iD)
1662- let iF = if (isDefined(iE))
1663- then split_51C(value(iE), "_")
1675+ let iG = bX(b)
1676+ let iH = getString(iG)
1677+ let iI = if (isDefined(iH))
1678+ then split_51C(value(iH), "_")
16641679 else nil
16651680 let di = {
1666- let cZ = it
1681+ let cZ = iw
16671682 let da = size(cZ)
1668- let db = $Tuple9(is, 0, "", gj[az], nil, eu, iF, 0, split("0_0_0_0_0_0", "_"))
1683+ let db = $Tuple9(iv, 0, "", gl[az], nil, eu, iI, 0, split("0_0_0_0_0_0", "_"))
16691684 func dc (dd,de) = if ((de >= da))
16701685 then dd
1671- else iv(dd, cZ[de])
1686+ else iy(dd, cZ[de])
16721687
16731688 func df (dd,de) = if ((de >= da))
16741689 then dd
16751690 else throw("List size exceeds 5")
16761691
16771692 df(dc(dc(dc(dc(dc(db, 0), 1), 2), 3), 4), 5)
16781693 }
1679- let gJ = di._3
1680- let fd = valueOrErrorMessage(indexOf(ai, gJ), ("Unknown continent: " + gJ))
1681- let eC = fb(eU(toBigInt(gG)), fd)
1682- let gI = valueOrElse(getInteger(cy()), (cx + 1))
1683- let iG = toString(gI)
1684- let gK = Issue(cQ(iG, ir), makeString([iG, ir, eC, gJ], "_"), 1, 0, false)
1685- let aE = calculateAssetId(gK)
1686- let iH = toBase58String(aE)
1687- let hg = makeString(dj((iu > 0), split(gj[aA], "_"), iu), "_")
1688- let iI = bY(b)
1689- let iJ = valueOrElse(getInteger(iI), 0)
1694+ let gL = di._3
1695+ let fd = valueOrErrorMessage(indexOf(ai, gL), ("Unknown continent: " + gL))
1696+ let eC = fj(di._9, (ce(iu) / br))
1697+ let gK = valueOrElse(getInteger(cy()), (cx + 1))
1698+ let iJ = toString(gK)
1699+ let gM = Issue(cQ(iJ, iu), makeString([iJ, iu, eC, gL], "_"), 1, 0, false)
1700+ let aE = calculateAssetId(gM)
1701+ let iK = toBase58String(aE)
1702+ let hi = makeString(dj((ix > 0), split(gl[aA], "_"), ix), "_")
1703+ let iL = bY(b)
1704+ let iM = valueOrElse(getInteger(iL), 0)
16901705 $Tuple2((((((((((((((((di._5 :+ (if ((size(di._7) > 0))
1691- then StringEntry(iD, makeString_11C(di._7, "_"))
1692- else DeleteEntry(iD))) :+ IntegerEntry(iI, if ((di._8 > iJ))
1706+ then StringEntry(iG, makeString_11C(di._7, "_"))
1707+ else DeleteEntry(iG))) :+ IntegerEntry(iL, if ((di._8 > iM))
16931708 then 0
1694- else (iJ - di._8))) :+ IntegerEntry(cy(), (gI + 1))) :+ gK) :+ StringEntry(cz(iG), iH)) :+ StringEntry(aD(iH), b)) :+ StringEntry(cF(iG), b)) :+ IntegerEntry(aI(Z, iH), di._2)) :+ IntegerEntry(cE(Z, iH, b), di._2)) :+ IntegerEntry(aH(iH), R)) :+ IntegerEntry(cD(iH, b), R)) :+ StringEntry(fz, makeString([gj[ay], di._4, hg, gj[aB]], ":"))) :+ StringEntry(bW(), makeString(di._6, "_"))) :+ StringEntry(aY(r), makeString([gJ, "L", iH], "_"))) :+ ScriptTransfer(addressFromStringValue(b), 1, aE)), iH)
1695- }
1696-
1697-
1698-func iK (b,it,gG) = iq("M", 3, "SSSS", b, it, gG, 0)
1699-
1700-
1701-func iL (b,it,gG,dk,hP) = {
1702- let hS = (co * 4)
1709+ else (iM - di._8))) :+ IntegerEntry(cy(), (gK + 1))) :+ gM) :+ StringEntry(cz(iJ), iK)) :+ StringEntry(aD(iK), b)) :+ StringEntry(cF(iJ), b)) :+ IntegerEntry(aI(Z, iK), di._2)) :+ IntegerEntry(cE(Z, iK, b), di._2)) :+ IntegerEntry(aH(iK), R)) :+ IntegerEntry(cD(iK, b), R)) :+ StringEntry(fD, makeString([gl[ay], di._4, hi, gl[aB]], ":"))) :+ StringEntry(bW(), makeString(di._6, "_"))) :+ StringEntry(aY(r), makeString([gL, "L", iK], "_"))) :+ ScriptTransfer(addressFromStringValue(b), 1, aE)), iK)
1710+ }
1711+
1712+
1713+func iN (b,iw,gI) = it("M", 3, "SSSS", b, iw, gI, 0)
1714+
1715+
1716+func iO (b,iw,gI,dk,hS) = {
1717+ let hV = (co * 4)
17031718 if (if (!(dk))
1704- then (hP != hS)
1719+ then (hS != hV)
17051720 else false)
1706- then throw(("Payment attached should be " + toString(hS)))
1707- else iq("L", 4, "SMM", b, it, gG, (bm * 4))
1708- }
1709-
1710-
1711-func iM (b,it,gG,dk,hP) = {
1712- let hS = (co * 47)
1721+ then throw(("Payment attached should be " + toString(hV)))
1722+ else it("L", 4, "SMM", b, iw, gI, (bm * 4))
1723+ }
1724+
1725+
1726+func iP (b,iw,gI,dk,hS) = {
1727+ let hV = (co * 47)
17131728 if (if (!(dk))
1714- then (hP != hS)
1729+ then (hS != hV)
17151730 else false)
1716- then throw(("Payment attached should be " + toString(hS)))
1717- else iq("XL", 5, "SSSML", b, it, gG, (bm * 47))
1718- }
1719-
1720-
1721-func iN (b,it,gG,dk,hP) = {
1722- let hS = (co * 54)
1731+ then throw(("Payment attached should be " + toString(hV)))
1732+ else it("XL", 5, "SSSML", b, iw, gI, (bm * 47))
1733+ }
1734+
1735+
1736+func iQ (b,iw,gI,dk,hS) = {
1737+ let hV = (co * 54)
17231738 if (if (!(dk))
1724- then (hP != hS)
1739+ then (hS != hV)
17251740 else false)
1726- then throw(("Payment attached should be " + toString(hS)))
1727- else iq("XXL", 6, "LXL", b, it, gG, (bm * 54))
1728- }
1729-
1730-
1731-func iO (dk,b,hP,it,gG) = {
1732- let iP = {
1733- let bk = size(it)
1741+ then throw(("Payment attached should be " + toString(hV)))
1742+ else it("XXL", 6, "LXL", b, iw, gI, (bm * 54))
1743+ }
1744+
1745+
1746+func iR (dk,b,hS,iw,gI) = {
1747+ let iS = {
1748+ let bk = size(iw)
17341749 if ((4 == bk))
1735- then iK(b, it, gG)
1750+ then iN(b, iw, gI)
17361751 else if ((3 == bk))
1737- then iL(b, it, gG, dk, hP)
1752+ then iO(b, iw, gI, dk, hS)
17381753 else if ((5 == bk))
1739- then iM(b, it, gG, dk, hP)
1754+ then iP(b, iw, gI, dk, hS)
17401755 else if ((2 == bk))
1741- then iN(b, it, gG, dk, hP)
1756+ then iQ(b, iw, gI, dk, hS)
17421757 else throw("Unknown merge")
17431758 }
1744- iP
1745- }
1746-
1747-
1748-func iQ (ez) = if (if ((ez.originCaller != bL))
1759+ iS
1760+ }
1761+
1762+
1763+func iT (ez) = if (if ((ez.originCaller != bL))
17491764 then valueOrElse(getBoolean(aZ()), false)
17501765 else false)
17511766 then throw("Contracts are under maintenance")
17521767 else StringEntry(aC(toString(ez.originCaller)), toBase58String(ez.transactionId))
17531768
17541769
17551770 @Callable(ez)
1756-func constructorV1 (iR) = if ((ez.caller != this))
1771+func constructorV1 (iU) = if ((ez.caller != this))
17571772 then throw("Permission denied")
1758- else [StringEntry(bF(), iR)]
1759-
1760-
1761-
1762-@Callable(ez)
1763-func setBlocked (iS) = if ((ez.caller != this))
1773+ else [StringEntry(bF(), iU)]
1774+
1775+
1776+
1777+@Callable(ez)
1778+func setBlocked (iV) = if ((ez.caller != this))
17641779 then throw("permission denied")
1765- else [BooleanEntry(aZ(), iS)]
1780+ else [BooleanEntry(aZ(), iV)]
17661781
17671782
17681783
17691784 @Callable(ez)
17701785 func stakeLand () = {
1771- let iT = iQ(ez)
1786+ let iW = iT(ez)
17721787 if ((size(ez.payments) != 1))
17731788 then throw("Exactly one payment required")
17741789 else {
1775- let iU = value(ez.payments[0])
1776- let aE = value(iU.assetId)
1790+ let iX = value(ez.payments[0])
1791+ let aE = value(iX.assetId)
17771792 let by = toString(ez.caller)
1778- if ((iU.amount != 1))
1793+ if ((iX.amount != 1))
17791794 then throw((("NFT " + X) + " token should be attached as payment"))
17801795 else {
1781- let hw = value(assetInfo(aE))
1782- if ((hw.issuer != this))
1796+ let hz = value(assetInfo(aE))
1797+ if ((hz.issuer != this))
17831798 then throw("Unknown issuer of token")
1784- else if (!(contains(hw.name, X)))
1799+ else if (!(contains(hz.name, X)))
17851800 then throw((("Only NFT " + X) + " tokens are accepted"))
17861801 else {
1787- let iV = drop(hw.name, 4)
1788- let cA = if (contains(iV, "XXL"))
1789- then dropRight(iV, 3)
1790- else if (contains(iV, "XL"))
1791- then dropRight(iV, 2)
1792- else dropRight(iV, 1)
1802+ let iY = drop(hz.name, 4)
1803+ let cA = if (contains(iY, "XXL"))
1804+ then dropRight(iY, 3)
1805+ else if (contains(iY, "XL"))
1806+ then dropRight(iY, 2)
1807+ else dropRight(iY, 1)
17931808 if (!(isDefined(parseInt(cA))))
1794- then throw(("Cannot parse land number from " + hw.name))
1809+ then throw(("Cannot parse land number from " + hz.name))
17951810 else {
17961811 let aO = toBase58String(aE)
1797- let hx = aG(aO)
1798- if (isDefined(getInteger(hx)))
1799- then throw((("NFT " + hw.name) + " is already staked"))
1812+ let hA = aG(aO)
1813+ if (isDefined(getInteger(hA)))
1814+ then throw((("NFT " + hz.name) + " is already staked"))
18001815 else {
1801- let hA = split(hw.description, "_")
1802- let ev = eB(hA[bR])
1803- let hl = ce(hA[bQ])
1804- let dh = eA(ev, (hl / br), 1)
1805- let hm = valueOrElse(getInteger(aI(Z, aO)), 0)
1806- let iD = bX(by)
1807- let iE = getString(iD)
1808- let iA = if (isDefined(iE))
1809- then split_51C(value(iE), "_")
1816+ let hD = split(hz.description, "_")
1817+ let ev = eB(hD[bR])
1818+ let ho = ce(hD[bQ])
1819+ let dh = eA(ev, (ho / br), 1)
1820+ let hp = valueOrElse(getInteger(aI(Z, aO)), 0)
1821+ let iG = bX(by)
1822+ let iH = getString(iG)
1823+ let iD = if (isDefined(iH))
1824+ then split_51C(value(iH), "_")
18101825 else nil
1811- if (containsElement(iA, aO))
1826+ if (containsElement(iD, aO))
18121827 then throw(("Your staked lands already contain " + aO))
18131828 else {
1814- let fS = valueOrElse(getInteger(aH(aO)), 0)
1815- let iI = bY(by)
1816- let iW = valueOrElse(getInteger(iI), 0)
1817- let iX = cc(invoke(bO, "onStakeUnstakeLand", [by], nil))
1818- $Tuple2([IntegerEntry(hx, lastBlock.timestamp), IntegerEntry(aK(X, aO, by), lastBlock.timestamp), StringEntry(iD, makeString_11C((iA :+ aO), "_")), IntegerEntry(iI, (iW + hl)), StringEntry(aD(aO), by), StringEntry(cF(cA), by), IntegerEntry(cE(Z, aO, by), hm), IntegerEntry(cD(aO, by), fS), StringEntry(bW(), dh), iT], iX)
1829+ let fU = valueOrElse(getInteger(aH(aO)), 0)
1830+ let iL = bY(by)
1831+ let iZ = valueOrElse(getInteger(iL), 0)
1832+ let ja = cc(invoke(bO, "onStakeUnstakeLand", [by], nil))
1833+ $Tuple2([IntegerEntry(hA, lastBlock.timestamp), IntegerEntry(aK(X, aO, by), lastBlock.timestamp), StringEntry(iG, makeString_11C((iD :+ aO), "_")), IntegerEntry(iL, (iZ + ho)), StringEntry(aD(aO), by), StringEntry(cF(cA), by), IntegerEntry(cE(Z, aO, by), hp), IntegerEntry(cD(aO, by), fU), StringEntry(bW(), dh), iW], ja)
18191834 }
18201835 }
18211836 }
18221837 }
18231838 }
18241839 }
18251840 }
18261841
18271842
18281843
18291844 @Callable(ez)
1830-func unstakeLand (hr) = {
1831- let iT = iQ(ez)
1845+func unstakeLand (hu) = {
1846+ let iW = iT(ez)
18321847 if ((size(ez.payments) != 0))
18331848 then throw("No payments required")
18341849 else {
18351850 let b = toString(ez.caller)
1836- let eb = hp(b, cK, hr)
1851+ let eb = hs(b, cK, hu)
18371852 let aO = eb._2
1838- let iD = bX(b)
1853+ let iG = bX(b)
18391854 let ev = eB(eb._3[bR])
1840- let hl = ce(eb._3[bQ])
1841- let dh = eA(ev, (hl / br), -1)
1842- let hU = hN(b, aO, hl, cK)
1843- let iA = split_51C(valueOrElse(getString(iD), ""), "_")
1844- let bK = indexOf(iA, aO)
1855+ let ho = ce(eb._3[bQ])
1856+ let dh = eA(ev, (ho / br), -1)
1857+ let hX = hQ(b, aO, ho, cK)
1858+ let iD = split_51C(valueOrElse(getString(iG), ""), "_")
1859+ let bK = indexOf(iD, aO)
18451860 if (!(isDefined(bK)))
18461861 then throw(("Your staked lands don't contain " + aO))
18471862 else {
1848- let iY = lastBlock.timestamp
1849- let iZ = valueOrElse(getInteger(bN, ba(b)), 0)
1850- if ((iZ >= iY))
1851- then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(iZ)))
1863+ let jb = lastBlock.timestamp
1864+ let jc = valueOrElse(getInteger(bN, ba(b)), 0)
1865+ if ((jc >= jb))
1866+ then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(jc)))
18521867 else {
1853- let ja = (valueOrElse(getInteger(bO, a(b)), 0) + bn)
1854- if ((ja > iY))
1855- then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString(ja)))
1868+ let jd = (valueOrElse(getInteger(bO, a(b)), 0) + bn)
1869+ if ((jd > jb))
1870+ then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString(jd)))
18561871 else {
1857- let iI = bY(b)
1858- let iJ = valueOrElse(getInteger(iI), 0)
1859- let jb = if ((hl > iJ))
1872+ let iL = bY(b)
1873+ let iM = valueOrElse(getInteger(iL), 0)
1874+ let je = if ((ho > iM))
18601875 then 0
1861- else (iJ - hl)
1862- let iX = cc(invoke(bO, "onStakeUnstakeLand", [b], nil))
1863- $Tuple2([ScriptTransfer(ez.caller, 1, fromBase58String(aO)), DeleteEntry(aG(aO)), DeleteEntry(aK(X, aO, b)), StringEntry(bW(), dh), StringEntry(hU._2, makeString(hU._3, ":")), if ((size(iA) > 1))
1864- then StringEntry(iD, makeString_11C(removeByIndex(iA, value(bK)), "_"))
1865- else DeleteEntry(iD), IntegerEntry(iI, jb), iT], iX)
1876+ else (iM - ho)
1877+ let ja = cc(invoke(bO, "onStakeUnstakeLand", [b], nil))
1878+ $Tuple2([ScriptTransfer(ez.caller, 1, fromBase58String(aO)), DeleteEntry(aG(aO)), DeleteEntry(aK(X, aO, b)), StringEntry(bW(), dh), StringEntry(hX._2, makeString(hX._3, ":")), if ((size(iD) > 1))
1879+ then StringEntry(iG, makeString_11C(removeByIndex(iD, value(bK)), "_"))
1880+ else DeleteEntry(iG), IntegerEntry(iL, je), iW], ja)
18661881 }
18671882 }
18681883 }
18691884 }
18701885 }
18711886
18721887
18731888
18741889 @Callable(ez)
18751890 func stakeDuck () = {
1876- let iT = iQ(ez)
1891+ let iW = iT(ez)
18771892 if ((size(ez.payments) != 1))
18781893 then throw("Exactly one payment required")
18791894 else {
1880- let iU = value(ez.payments[0])
1881- let aE = value(iU.assetId)
1895+ let iX = value(ez.payments[0])
1896+ let aE = value(iX.assetId)
18821897 let by = toString(ez.caller)
1883- if ((iU.amount != 1))
1898+ if ((iX.amount != 1))
18841899 then throw((("NFT " + Y) + " token should be attached as payment"))
18851900 else {
1886- let hw = value(assetInfo(aE))
1887- if (if ((hw.issuer != ch))
1888- then (hw.issuer != ci)
1901+ let hz = value(assetInfo(aE))
1902+ if (if ((hz.issuer != ch))
1903+ then (hz.issuer != ci)
18891904 else false)
18901905 then throw((("Unknown issuer of " + Y) + " token"))
1891- else if (!(contains(hw.name, Y)))
1906+ else if (!(contains(hz.name, Y)))
18921907 then throw((("Only NFT " + Y) + " tokens are accepted"))
18931908 else {
1894- let jc = toBase58String(aE)
1895- let hx = aG(jc)
1896- if (isDefined(getInteger(hx)))
1897- then throw((("NFT " + hw.name) + " is already staked"))
1909+ let jf = toBase58String(aE)
1910+ let hA = aG(jf)
1911+ if (isDefined(getInteger(hA)))
1912+ then throw((("NFT " + hz.name) + " is already staked"))
18981913 else if (isDefined(getString(aW(by))))
1899- then throw(("You already staked one duck: " + hw.name))
1914+ then throw(("You already staked one duck: " + hz.name))
19001915 else {
1901- let jd = aY(jc)
1902- let je = getString(jd)
1903- let fz = aX(jc)
1904- let jf = getString(fz)
1905- let gY = q(jc)
1906- let gZ = M(valueOrElse(getInteger(u(jc)), 0))
1907- let jg = valueOrElse(getInteger(gY), gZ)
1908- ([IntegerEntry(hx, lastBlock.timestamp), IntegerEntry(aK(Y, toBase58String(aE), by), lastBlock.timestamp), StringEntry(aV(jc), by), StringEntry(aW(by), jc)] ++ (if (isDefined(je))
1916+ let jg = aY(jf)
1917+ let jh = getString(jg)
1918+ let fD = aX(jf)
1919+ let ji = getString(fD)
1920+ let ha = q(jf)
1921+ let hb = M(valueOrElse(getInteger(u(jf)), 0))
1922+ let jj = valueOrElse(getInteger(ha), hb)
1923+ ([IntegerEntry(hA, lastBlock.timestamp), IntegerEntry(aK(Y, toBase58String(aE), by), lastBlock.timestamp), StringEntry(aV(jf), by), StringEntry(aW(by), jf)] ++ (if (isDefined(jh))
19091924 then nil
1910- else ([StringEntry(jd, ae)] ++ (if (isDefined(jf))
1925+ else ([StringEntry(jg, ae)] ++ (if (isDefined(ji))
19111926 then nil
1912- else (([StringEntry(fz, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(gY, jg)) :+ iT)))))
1927+ else (([StringEntry(fD, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(ha, jj)) :+ iW)))))
19131928 }
19141929 }
19151930 }
19161931 }
19171932 }
19181933
19191934
19201935
19211936 @Callable(ez)
1922-func unstakeDuck (jc) = {
1923- let iT = iQ(ez)
1937+func unstakeDuck (jf) = {
1938+ let iW = iT(ez)
19241939 if ((size(ez.payments) != 0))
19251940 then throw("No payments required")
19261941 else {
1927- let aE = fromBase58String(jc)
1942+ let aE = fromBase58String(jf)
19281943 let by = toString(ez.caller)
1929- let hw = value(assetInfo(aE))
1930- let hx = aG(toBase58String(aE))
1931- if (!(isDefined(getInteger(hx))))
1932- then throw((("NFT " + hw.name) + " is not staked"))
1944+ let hz = value(assetInfo(aE))
1945+ let hA = aG(toBase58String(aE))
1946+ if (!(isDefined(getInteger(hA))))
1947+ then throw((("NFT " + hz.name) + " is not staked"))
19331948 else if (!(isDefined(getString(aW(by)))))
1934- then throw((("The duck " + hw.name) + " is not staked"))
1949+ then throw((("The duck " + hz.name) + " is not staked"))
19351950 else {
1936- let hz = valueOrErrorMessage(getString(aV(toBase58String(aE))), (("NFT " + hw.name) + " is orphaned"))
1937- if ((hz != by))
1951+ let hC = valueOrErrorMessage(getString(aV(toBase58String(aE))), (("NFT " + hz.name) + " is orphaned"))
1952+ if ((hC != by))
19381953 then throw("Staked NFT is not yours")
19391954 else {
1940- let gY = q(jc)
1941- let gZ = M(valueOrElse(getInteger(u(jc)), 0))
1942- let W = valueOrElse(getInteger(gY), gZ)
1943- if ((gZ > W))
1944- then throw((("Please heal your duck to " + toString(gZ)) + "hp before unstaking"))
1945- else [ScriptTransfer(ez.caller, 1, aE), DeleteEntry(hx), DeleteEntry(gY), DeleteEntry(aY(jc)), DeleteEntry(aV(jc)), DeleteEntry(aK(Y, jc, by)), DeleteEntry(aW(by)), iT]
1955+ let ha = q(jf)
1956+ let hb = M(valueOrElse(getInteger(u(jf)), 0))
1957+ let W = valueOrElse(getInteger(ha), hb)
1958+ if ((hb > W))
1959+ then throw((("Please heal your duck to " + toString(hb)) + "hp before unstaking"))
1960+ else [ScriptTransfer(ez.caller, 1, aE), DeleteEntry(hA), DeleteEntry(ha), DeleteEntry(aY(jf)), DeleteEntry(aV(jf)), DeleteEntry(aK(Y, jf, by)), DeleteEntry(aW(by)), iW]
19461961 }
19471962 }
19481963 }
19491964 }
19501965
19511966
19521967
19531968 @Callable(ez)
1954-func claimRes (gf,jh) = {
1955- let iT = iQ(ez)
1969+func claimRes (gh,jk) = {
1970+ let iW = iT(ez)
19561971 if ((size(ez.payments) != 0))
19571972 then throw("No payments required")
19581973 else {
19591974 let b = toString(ez.originCaller)
1960- let dp = hB(b, gf, cK, jh)
1975+ let dp = hE(b, gh, cK, jk)
19611976 let r = valueOrErrorMessage(getString(aW(b)), "You don't have a duck staked")
1962- $Tuple2(((((dp._1 ++ ia(r, fraction(A, gf, bq))._1) :+ StringEntry(dp._2, makeString(dp._3, ":"))) :+ StringEntry(dp._4, makeString(dp._5, ":"))) :+ iT), dp._3[az])
1963- }
1964- }
1965-
1966-
1967-
1968-@Callable(ez)
1969-func claimResToWH (gf,jh) = {
1970- let iT = iQ(ez)
1977+ $Tuple2(((((dp._1 ++ id(r, fraction(A, gh, bq))._1) :+ StringEntry(dp._2, makeString(dp._3, ":"))) :+ StringEntry(dp._4, makeString(dp._5, ":"))) :+ iW), dp._3[az])
1978+ }
1979+ }
1980+
1981+
1982+
1983+@Callable(ez)
1984+func claimResToWH (gh,jk) = {
1985+ let iW = iT(ez)
19711986 if ((size(ez.payments) != 0))
19721987 then throw("No payments required")
19731988 else {
19741989 let b = toString(ez.originCaller)
1975- let dp = hB(b, gf, cJ, jh)
1976- $Tuple2(((((dp._1 ++ ig(b, fraction(A, gf, bq))._1) :+ StringEntry(dp._2, makeString(dp._3, ":"))) :+ StringEntry(dp._4, makeString(dp._5, ":"))) :+ iT), dp._5[aq])
1977- }
1978- }
1979-
1980-
1981-
1982-@Callable(ez)
1983-func flight (gN,gO) = {
1984- let iT = iQ(ez)
1990+ let dp = hE(b, gh, cJ, jk)
1991+ $Tuple2(((((dp._1 ++ ij(b, fraction(A, gh, bq))._1) :+ StringEntry(dp._2, makeString(dp._3, ":"))) :+ StringEntry(dp._4, makeString(dp._5, ":"))) :+ iW), dp._5[aq])
1992+ }
1993+ }
1994+
1995+
1996+
1997+@Callable(ez)
1998+func flight (gP,gQ) = {
1999+ let iW = iT(ez)
19852000 if ((size(ez.payments) != 0))
19862001 then throw("No payments required")
19872002 else {
19882003 let bb = toString(ez.caller)
1989- let fe = gM(bb, gN, gO)
2004+ let fe = gO(bb, gP, gQ)
19902005 let r = fe._2
1991- let jd = aY(r)
1992- let ht = valueOrElse(getString(jd), ae)
1993- if ((fe._4 == ht))
2006+ let jg = aY(r)
2007+ let hw = valueOrElse(getString(jg), ae)
2008+ if ((fe._4 == hw))
19942009 then throw("You can't fly to the same location")
19952010 else {
1996- let hh = w(r)
1997- let hi = valueOrElse(getString(hh), ",;,_,;,_,;,_,;,_,;,_,;,")
1998- let hj = dq(hi, fe._5)
1999- $Tuple2(([StringEntry(jd, if ((fe._1 > 0))
2011+ let hj = w(r)
2012+ let hk = valueOrElse(getString(hj), ",;,_,;,_,;,_,;,_,;,_,;,")
2013+ let hl = dq(hk, fe._5)
2014+ $Tuple2(([StringEntry(jg, if ((fe._1 > 0))
20002015 then fe._4
2001- else ht), StringEntry(hh, hj), IntegerEntry(q(r), fe._1), iT] ++ ia(r, if ((fe._1 > 0))
2016+ else hw), StringEntry(hj, hl), IntegerEntry(q(r), fe._1), iW] ++ id(r, if ((fe._1 > 0))
20022017 then B
20032018 else C)._1), fe._3)
20042019 }
20052020 }
20062021 }
20072022
20082023
20092024
20102025 @Callable(ez)
2011-func heal (ji,jj,jk) = {
2012- let iT = iQ(ez)
2013- if (if (if ((0 > ji))
2026+func heal (jl,jm,jn) = {
2027+ let iW = iT(ez)
2028+ if (if (if ((0 > jl))
20142029 then true
2015- else (0 > jj))
2030+ else (0 > jm))
20162031 then true
2017- else (0 > jk))
2032+ else (0 > jn))
20182033 then throw("Quantity cannot be negative")
20192034 else {
20202035 let r = valueOrErrorMessage(getString(aW(toString(ez.caller))), "You don't have a duck staked")
2021- let jl = [ji, jj, jk]
2022- let gY = q(r)
2023- let gZ = M(valueOrElse(getInteger(u(r)), 0))
2024- let jm = valueOrElse(getInteger(gY), gZ)
2025- if ((jm >= gZ))
2026- then throw((("HP should be < " + toString(gZ)) + " to heal"))
2036+ let jo = [jl, jm, jn]
2037+ let ha = q(r)
2038+ let hb = M(valueOrElse(getInteger(u(r)), 0))
2039+ let jp = valueOrElse(getInteger(ha), hb)
2040+ if ((jp >= hb))
2041+ then throw((("HP should be < " + toString(hb)) + " to heal"))
20272042 else {
2028- let fz = aX(r)
2029- let gj = fy(fz)
2030- let jn = if ((gj[aB] == ""))
2043+ let fD = aX(r)
2044+ let gl = fC(fD)
2045+ let jq = if ((gl[aB] == ""))
20312046 then nil
2032- else split(gj[aB], "_")
2033- func jo (cX,jp) = {
2047+ else split(gl[aB], "_")
2048+ func jr (cX,js) = {
20342049 let cd = cX._2
2035- let eV = if ((size(jn) > cd))
2036- then parseIntValue(jn[cd])
2050+ let eV = if ((size(jq) > cd))
2051+ then parseIntValue(jq[cd])
20372052 else 0
20382053 if ((3 > cd))
20392054 then {
2040- let jq = jl[cd]
2041- if ((jq > eV))
2055+ let jt = jo[cd]
2056+ if ((jt > eV))
20422057 then throw(((("You have only " + toString(eV)) + " of ") + ah[cd]))
2043- else $Tuple3((cX._1 :+ toString((eV - jq))), (cd + 1), (cX._3 + (ck[cd] * jq)))
2058+ else $Tuple3((cX._1 :+ toString((eV - jt))), (cd + 1), (cX._3 + (ck[cd] * jt)))
20442059 }
20452060 else $Tuple3((cX._1 :+ toString(eV)), (cd + 1), cX._3)
20462061 }
20472062
20482063 let dp = {
20492064 let cZ = ak
20502065 let da = size(cZ)
20512066 let db = $Tuple3(nil, 0, 0)
20522067 func dc (dd,de) = if ((de >= da))
20532068 then dd
2054- else jo(dd, cZ[de])
2069+ else jr(dd, cZ[de])
20552070
20562071 func df (dd,de) = if ((de >= da))
20572072 then dd
20582073 else throw("List size exceeds 50")
20592074
20602075 df(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(db, 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)
20612076 }
2062- let jr = min([gZ, (jm + dp._3)])
2063- $Tuple2(([IntegerEntry(gY, jr), StringEntry(fz, makeString_2C([gj[ay], gj[az], gj[aA], makeString(dp._1, "_")], ":")), iT] ++ ia(r, (J * ((ji + jj) + jk)))._1), jr)
2077+ let ju = min([hb, (jp + dp._3)])
2078+ $Tuple2(([IntegerEntry(ha, ju), StringEntry(fD, makeString_2C([gl[ay], gl[az], gl[aA], makeString(dp._1, "_")], ":")), iW] ++ id(r, (J * ((jl + jm) + jn)))._1), ju)
20642079 }
20652080 }
20662081 }
20672082
20682083
20692084
20702085 @Callable(ez)
20712086 func healES () = {
2072- let iT = iQ(ez)
2087+ let iW = iT(ez)
20732088 if ((size(ez.payments) != 1))
20742089 then throw("Exactly one payment required")
20752090 else {
2076- let iU = value(ez.payments[0])
2077- if ((iU.assetId != bj))
2091+ let iX = value(ez.payments[0])
2092+ if ((iX.assetId != bj))
20782093 then throw("Allowed USDT payment only!")
20792094 else {
20802095 let r = valueOrErrorMessage(getString(aW(toString(ez.caller))), "You don't have a duck staked")
2081- let gY = q(r)
2082- let gZ = M(valueOrElse(getInteger(u(r)), 0))
2083- let jm = valueOrElse(getInteger(gY), gZ)
2084- if ((jm > 0))
2096+ let ha = q(r)
2097+ let hb = M(valueOrElse(getInteger(u(r)), 0))
2098+ let jp = valueOrElse(getInteger(ha), hb)
2099+ if ((jp > 0))
20852100 then throw("HP should be 0 to call Emergency Service")
20862101 else {
2087- let fz = aX(r)
2088- let gj = fy(fz)
2089- let jn = if ((gj[aB] == ""))
2102+ let fD = aX(r)
2103+ let gl = fC(fD)
2104+ let jq = if ((gl[aB] == ""))
20902105 then nil
2091- else split(gj[aB], "_")
2092- let js = if ((size(jn) > 0))
2093- then parseIntValue(jn[0])
2106+ else split(gl[aB], "_")
2107+ let jv = if ((size(jq) > 0))
2108+ then parseIntValue(jq[0])
20942109 else 0
2095- let jt = if ((size(jn) > 1))
2096- then parseIntValue(jn[1])
2110+ let jw = if ((size(jq) > 1))
2111+ then parseIntValue(jq[1])
20972112 else 0
2098- let ju = if ((size(jn) > 2))
2099- then parseIntValue(jn[2])
2113+ let jx = if ((size(jq) > 2))
2114+ then parseIntValue(jq[2])
21002115 else 0
2101- if (if (if ((js > 0))
2116+ if (if (if ((jv > 0))
21022117 then true
2103- else (jt > 0))
2118+ else (jw > 0))
21042119 then true
2105- else (ju > 0))
2120+ else (jx > 0))
21062121 then throw("You have to use own Medical Kit")
21072122 else {
2108- let jv = getString(bM, bc())
2109- let jw = if (isDefined(jv))
2110- then split(value(jv), "_")
2123+ let jy = getString(bM, bc())
2124+ let jz = if (isDefined(jy))
2125+ then split(value(jy), "_")
21112126 else nil
2112- let jx = if ((size(jw) > 0))
2113- then parseIntValue(jw[0])
2127+ let jA = if ((size(jz) > 0))
2128+ then parseIntValue(jz[0])
21142129 else 0
2115- if ((0 >= jx))
2130+ if ((0 >= jA))
21162131 then throw("There are no Medical Kits L1 at Emergency Service storage")
21172132 else {
2118- let jr = (jm + ck[0])
2119- let jy = makeString([toString((jx - 1)), removeByIndex(jw, 0)], "_")
2133+ let ju = (jp + ck[0])
2134+ let jB = makeString([toString((jA - 1)), removeByIndex(jz, 0)], "_")
21202135 let bg = split(ak[0], "_")
2121- let jz = bf(bg)
2122- let jA = fraction((jz * ag), af, (bq * ao))
2123- if ((iU.amount != jA))
2124- then throw(("Payment attached should be " + toString(jA)))
2136+ let jC = bf(bg)
2137+ let jD = fraction((jC * ag), af, (bq * ao))
2138+ if ((iX.amount != jD))
2139+ then throw(("Payment attached should be " + toString(jD)))
21252140 else {
2126- let dp = bZ(invoke(bM, "updateEsStorage", [jy], [AttachedPayment(bj, jA)]))
2127- $Tuple2(([IntegerEntry(gY, jr), iT] ++ ia(r, D)._1), dp)
2141+ let dp = bZ(invoke(bM, "updateEsStorage", [jB], [AttachedPayment(bj, jD)]))
2142+ $Tuple2(([IntegerEntry(ha, ju), iW] ++ id(r, D)._1), dp)
21282143 }
21292144 }
21302145 }
21312146 }
21322147 }
21332148 }
21342149 }
21352150
21362151
21372152
21382153 @Callable(ez)
2139-func updateBackpack (r,jB) = if ((ez.caller != bM))
2154+func updateBackpack (r,jE) = if ((ez.caller != bM))
21402155 then throw("permission denied")
2141- else $Tuple2([StringEntry(aX(r), jB)], jB)
2142-
2143-
2144-
2145-@Callable(ez)
2146-func commitFor (jC) = {
2147- let iT = iQ(ez)
2148- let jD = (height + bT)
2156+ else $Tuple2([StringEntry(aX(r), jE)], jE)
2157+
2158+
2159+
2160+@Callable(ez)
2161+func commitFor (jF) = {
2162+ let iW = iT(ez)
2163+ let jG = (height + bT)
21492164 let b = toString(ez.caller)
2150- $Tuple2(([IntegerEntry(bV(b), jD), IntegerEntry(bU(b), jC)] :+ iT), jD)
2165+ $Tuple2(([IntegerEntry(bV(b), jG), IntegerEntry(bU(b), jF)] :+ iW), jG)
21512166 }
21522167
21532168
21542169
21552170 @Callable(ez)
21562171 func buySLand () = {
2157- let iT = iQ(ez)
2172+ let iW = iT(ez)
21582173 if ((size(ez.payments) != 1))
21592174 then throw("Exactly one payment required")
21602175 else {
2161- let iU = value(ez.payments[0])
2162- if ((iU.assetId != bj))
2176+ let iX = value(ez.payments[0])
2177+ if ((iX.assetId != bj))
21632178 then throw("Allowed USDT payment only!")
2164- else if ((iU.amount != cq))
2179+ else if ((iX.amount != cq))
21652180 then throw(("Payment attached should be " + toString(cq)))
21662181 else {
2167- let dp = gE(ez.caller, ez.transactionId)
2168- $Tuple2((((dp._1 :+ ScriptTransfer(bM, iU.amount, bj)) ++ ig(toString(ez.caller), F)._1) :+ iT), dp._2._1)
2182+ let dp = gG(ez.caller, ez.transactionId)
2183+ $Tuple2((((dp._1 :+ ScriptTransfer(bM, iX.amount, bj)) ++ ij(toString(ez.caller), F)._1) :+ iW), dp._2._1)
21692184 }
21702185 }
21712186 }
21722187
21732188
21742189
21752190 @Callable(ez)
2176-func expedition (gN,gO) = {
2177- let iT = iQ(ez)
2191+func expedition (gP,gQ) = {
2192+ let iW = iT(ez)
21782193 if ((size(ez.payments) != 0))
21792194 then throw("No payments required")
21802195 else {
2181- let dp = he(ez.caller, ez.transactionId, gN, gO)
2196+ let dp = hg(ez.caller, ez.transactionId, gP, gQ)
21822197 let r = valueOrErrorMessage(getString(aW(toString(ez.caller))), "You don't have a duck staked")
2183- $Tuple2(((dp._1 ++ ia(r, F)._1) :+ iT), $Tuple2(dp._2, dp._3))
2198+ $Tuple2(((dp._1 ++ id(r, F)._1) :+ iW), $Tuple2(dp._2, dp._3))
21842199 }
21852200 }
21862201
21872202
21882203
21892204 @Callable(ez)
21902205 func upgradeInfra (aO) = {
2191- let iT = iQ(ez)
2206+ let iW = iT(ez)
21922207 if ((size(ez.payments) != 0))
21932208 then throw("No payments required")
21942209 else {
2195- let dp = hO(true, ez.caller, 0, aO)
2210+ let dp = hR(true, ez.caller, 0, aO)
21962211 let r = valueOrErrorMessage(getString(aW(toString(ez.caller))), "You don't have a duck staked")
2197- $Tuple2(((dp._1 :+ iT) ++ ia(r, fraction(G, dp._3, bq))._1), dp._2)
2212+ $Tuple2(((dp._1 :+ iW) ++ id(r, fraction(G, dp._3, bq))._1), dp._2)
21982213 }
21992214 }
22002215
22012216
22022217
22032218 @Callable(ez)
22042219 func upgradeInfraUsdt (aO) = if ((ez.caller != this))
22052220 then throw("Permission denied")
22062221 else {
2207- let iT = iQ(ez)
2222+ let iW = iT(ez)
22082223 if ((size(ez.payments) != 1))
22092224 then throw("Exactly one payment required")
22102225 else {
2211- let iU = value(ez.payments[0])
2212- if ((iU.assetId != bj))
2226+ let iX = value(ez.payments[0])
2227+ if ((iX.assetId != bj))
22132228 then throw("Allowed USDT payment only!")
22142229 else {
2215- let dp = hO(false, ez.caller, iU.amount, aO)
2216- $Tuple2(((dp._1 :+ ScriptTransfer(bM, iU.amount, bj)) :+ iT), dp._2)
2230+ let dp = hR(false, ez.caller, iX.amount, aO)
2231+ $Tuple2(((dp._1 :+ ScriptTransfer(bM, iX.amount, bj)) :+ iW), dp._2)
22172232 }
22182233 }
22192234 }
22202235
22212236
22222237
22232238 @Callable(ez)
2224-func activateArtifact (jE,jF) = {
2225- let iT = iQ(ez)
2239+func activateArtifact (jH,jI) = {
2240+ let iW = iT(ez)
22262241 if ((size(ez.payments) != 0))
22272242 then throw("No payments required")
22282243 else {
22292244 let b = toString(ez.caller)
22302245 let dp = {
2231- let bk = jE
2246+ let bk = jH
22322247 if (("PRESALE" == bk))
2233- then io(b, jF)
2248+ then ir(b, jI)
22342249 else if (("ONBOARD" == bk))
2235- then ih(b)
2250+ then ik(b)
22362251 else throw("Unknown artifact")
22372252 }
2238- (dp :+ iT)
2239- }
2240- }
2241-
2242-
2243-
2244-@Callable(ez)
2245-func mergeLands (it) = {
2246- let iT = iQ(ez)
2253+ (dp :+ iW)
2254+ }
2255+ }
2256+
2257+
2258+
2259+@Callable(ez)
2260+func mergeLands (iw) = {
2261+ let iW = iT(ez)
22472262 if ((size(ez.payments) != 0))
22482263 then throw("No payments required")
22492264 else {
2250- let dp = iO(true, toString(ez.caller), 0, it, ez.transactionId)
2251- $Tuple2(((dp._1 :+ iT) ++ ig(toString(ez.caller), H)._1), dp._2)
2252- }
2253- }
2254-
2255-
2256-
2257-@Callable(ez)
2258-func mergeLandsUsdt (it) = {
2259- let iT = iQ(ez)
2265+ let dp = iR(true, toString(ez.caller), 0, iw, ez.transactionId)
2266+ $Tuple2(((dp._1 :+ iW) ++ ij(toString(ez.caller), H)._1), dp._2)
2267+ }
2268+ }
2269+
2270+
2271+
2272+@Callable(ez)
2273+func mergeLandsUsdt (iw) = {
2274+ let iW = iT(ez)
22602275 if ((size(ez.payments) != 1))
22612276 then throw("Exactly one payment required")
22622277 else {
2263- let iU = value(ez.payments[0])
2264- if ((iU.assetId != bj))
2278+ let iX = value(ez.payments[0])
2279+ if ((iX.assetId != bj))
22652280 then throw("Allowed USDT payment only!")
22662281 else {
2267- let dp = iO(false, toString(ez.caller), iU.amount, it, ez.transactionId)
2268- $Tuple2(((dp._1 :+ ScriptTransfer(bM, iU.amount, bj)) :+ iT), dp._2)
2282+ let dp = iR(false, toString(ez.caller), iX.amount, iw, ez.transactionId)
2283+ $Tuple2(((dp._1 :+ ScriptTransfer(bM, iX.amount, bj)) :+ iW), dp._2)
22692284 }
22702285 }
22712286 }
22722287
22732288
22742289
22752290 @Callable(ez)
2276-func cargoExchange (jG,aO) = {
2277- let iT = iQ(ez)
2291+func cargoExchange (jJ,aO) = {
2292+ let iW = iT(ez)
22782293 if ((size(ez.payments) != 0))
22792294 then throw("No payments required")
22802295 else {
2281- let gi = split_4C(jG, ":")
2296+ let gk = split_4C(jJ, ":")
22822297 let b = toString(ez.originCaller)
2283- let hw = value(assetInfo(fromBase58String(aO)))
2284- let hx = aG(aO)
2285- if (!(isDefined(getInteger(hx))))
2286- then throw((hw.name + " is not staked"))
2298+ let hz = value(assetInfo(fromBase58String(aO)))
2299+ let hA = aG(aO)
2300+ if (!(isDefined(getInteger(hA))))
2301+ then throw((hz.name + " is not staked"))
22872302 else {
2288- let hz = valueOrErrorMessage(getString(aD(aO)), (("NFT " + hw.name) + " is orphaned"))
2289- if ((hz != b))
2303+ let hC = valueOrErrorMessage(getString(aD(aO)), (("NFT " + hz.name) + " is orphaned"))
2304+ if ((hC != b))
22902305 then throw((X + " is not yours"))
22912306 else {
2292- let fR = (ce(split(hw.description, "_")[bQ]) / br)
2293- let fS = valueOrElse(getInteger(aH(aO)), 0)
2307+ let fT = (ce(split(hz.description, "_")[bQ]) / br)
2308+ let fU = valueOrElse(getInteger(aH(aO)), 0)
22942309 let r = valueOrErrorMessage(getString(aW(b)), "You don't have a duck staked")
2295- let ht = valueOrElse(getString(aY(r)), ae)
2296- let hu = split(value(ht), "_")
2297- if ((hu[bd] != "L"))
2298- then throw((("Duck location type is " + hu[bd]) + ", but should be L"))
2299- else if ((hu[be] != aO))
2310+ let hw = valueOrElse(getString(aY(r)), ae)
2311+ let hx = split(value(hw), "_")
2312+ if ((hx[bd] != "L"))
2313+ then throw((("Duck location type is " + hx[bd]) + ", but should be L"))
2314+ else if ((hx[be] != aO))
23002315 then throw(("Duck should be on the land " + aO))
23012316 else {
2302- let fQ = aN(aO)
2303- let fE = fP(fQ, fR, fS)
2304- let fz = aX(r)
2305- let gj = fy(fz)
2306- let dp = gh(gi, fE, gj)
2307- let fY = split(fE[at], "_")
2308- let hL = (parseIntValue(fY[av]) + dp._7)
2309- let hM = (parseIntValue(fY[aw]) - dp._7)
2310-[StringEntry(fz, makeString_2C([gj[ay], dp._4, dp._5, dp._6], ":")), StringEntry(fQ, makeString_2C([fE[ap], dp._1, dp._2, dp._3, makeString([fY[au], toString(hL), toString(hM), fY[ax]], "_")], ":")), iT]
2317+ let fS = aN(aO)
2318+ let fI = fR(fS, fT, fU)
2319+ let fD = aX(r)
2320+ let gl = fC(fD)
2321+ let dp = gj(gk, fI, gl)
2322+ let ga = split(fI[at], "_")
2323+ let hO = (parseIntValue(ga[av]) + dp._7)
2324+ let hP = (parseIntValue(ga[aw]) - dp._7)
2325+[StringEntry(fD, makeString_2C([gl[ay], dp._4, dp._5, dp._6], ":")), StringEntry(fS, makeString_2C([fI[ap], dp._1, dp._2, dp._3, makeString([ga[au], toString(hO), toString(hP), ga[ax]], "_")], ":")), iW]
23112326 }
23122327 }
23132328 }
23142329 }
23152330 }
23162331
23172332
23182333
23192334 @Callable(ez)
2320-func saveWarehouse (fU,aO) = if ((ez.caller != bM))
2335+func saveWarehouse (fW,aO) = if ((ez.caller != bM))
23212336 then throw("Access denied")
23222337 else {
2323- let fQ = aN(aO)
2324- let fV = split_4C(fU, ":")
2325- if ((size(fV) != 5))
2338+ let fS = aN(aO)
2339+ let fX = split_4C(fW, ":")
2340+ if ((size(fX) != 5))
23262341 then throw("warehouse string should contain 4 ':' separators")
23272342 else {
2328- let jH = split(fV[at], "_")[au]
2329- let hL = fD(fV)
2330- let jI = fB(fV[ap])
2331- let hM = ((jI - parseIntValue(jH)) - hL)
2332- let jJ = makeString_2C([fV[ap], fV[aq], fV[ar], fV[as], makeString([jH, toString(hL), toString(hM), toString(jI)], "_")], ":")
2333- $Tuple2([StringEntry(fQ, jJ)], jJ)
2343+ let jK = split(fX[at], "_")[au]
2344+ let hO = fH(fX)
2345+ let jL = fF(fX[ap])
2346+ let hP = ((jL - parseIntValue(jK)) - hO)
2347+ let jM = makeString_2C([fX[ap], fX[aq], fX[ar], fX[as], makeString([jK, toString(hO), toString(hP), toString(jL)], "_")], ":")
2348+ $Tuple2([StringEntry(fS, jM)], jM)
23342349 }
23352350 }
23362351
23372352
23382353
23392354 @Callable(ez)
23402355 func fixWarehouseFormat (aO) = if ((ez.caller != bL))
23412356 then throw("Access denied")
23422357 else {
2343- let fQ = aN(aO)
2344- let hw = value(assetInfo(fromBase58String(aO)))
2345- let fR = (ce(split(hw.description, "_")[bQ]) / br)
2346- let fS = valueOrElse(getInteger(aH(aO)), 0)
2347- let fV = fP(fQ, fR, fS)
2348- let jH = cc(invoke(bM, "recalcLockedVolumeREADONLY", [aO, fV], nil))
2349- let hL = fD(fV)
2350- let jI = fB(fV[ap])
2351- let hM = ((jI - jH) - hL)
2352- let jJ = makeString_2C([fV[ap], fV[aq], fV[ar], fV[as], makeString([toString(jH), toString(hL), toString(hM), toString(jI)], "_")], ":")
2353- $Tuple2([StringEntry(fQ, jJ)], jJ)
2358+ let fS = aN(aO)
2359+ let hz = value(assetInfo(fromBase58String(aO)))
2360+ let fT = (ce(split(hz.description, "_")[bQ]) / br)
2361+ let fU = valueOrElse(getInteger(aH(aO)), 0)
2362+ let fX = fR(fS, fT, fU)
2363+ let jK = cc(invoke(bM, "recalcLockedVolumeREADONLY", [aO, fX], nil))
2364+ let hO = fH(fX)
2365+ let jL = fF(fX[ap])
2366+ let hP = ((jL - jK) - hO)
2367+ let jM = makeString_2C([fX[ap], fX[aq], fX[ar], fX[as], makeString([toString(jK), toString(hO), toString(hP), toString(jL)], "_")], ":")
2368+ $Tuple2([StringEntry(fS, jM)], jM)
23542369 }
23552370
23562371
23572372
23582373 @Callable(ez)
23592374 func fixStakedPieces (by) = if ((ez.caller != bL))
23602375 then throw("Access denied")
23612376 else {
2362- let iJ = if ((by == ""))
2377+ let iM = if ((by == ""))
23632378 then 0
23642379 else {
2365- let iE = getString(T, bX(by))
2366- let iA = if (isDefined(iE))
2367- then split_51C(value(iE), "_")
2380+ let iH = getString(T, bX(by))
2381+ let iD = if (isDefined(iH))
2382+ then split_51C(value(iH), "_")
23682383 else nil
2369- func jK (cX,aO) = {
2370- let hw = value(assetInfo(fromBase58String(aO)))
2371- let cf = split(hw.description, "_")[bQ]
2384+ func jN (cX,aO) = {
2385+ let hz = value(assetInfo(fromBase58String(aO)))
2386+ let cf = split(hz.description, "_")[bQ]
23722387 (cX + ce(cf))
23732388 }
23742389
2375- let cZ = iA
2390+ let cZ = iD
23762391 let da = size(cZ)
23772392 let db = 0
23782393 func dc (dd,de) = if ((de >= da))
23792394 then dd
2380- else jK(dd, cZ[de])
2395+ else jN(dd, cZ[de])
23812396
23822397 func df (dd,de) = if ((de >= da))
23832398 then dd
23842399 else throw("List size exceeds 100")
23852400
23862401 df(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(db, 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)
23872402 }
2388- $Tuple2([IntegerEntry(bY(by), iJ)], iJ)
2389- }
2390-
2391-
2392-
2393-@Callable(ez)
2394-func setCustomName (aE,iC,aJ) = {
2395- let iT = iQ(ez)
2403+ $Tuple2([IntegerEntry(bY(by), iM)], iM)
2404+ }
2405+
2406+
2407+
2408+@Callable(ez)
2409+func setCustomName (aE,iF,aJ) = {
2410+ let iW = iT(ez)
23962411 if ((size(ez.payments) != 1))
23972412 then throw("Exactly one payment required")
23982413 else {
2399- let iU = value(ez.payments[0])
2400- if ((iU.assetId != bj))
2414+ let iX = value(ez.payments[0])
2415+ if ((iX.assetId != bj))
24012416 then throw("Allowed USDT payment only!")
2402- else if ((iU.amount != cm))
2417+ else if ((iX.amount != cm))
24032418 then throw(("Payment should be " + toString(cm)))
2404- else if (contains(iC, "__"))
2405- then throw(("Name should not contain '__': " + iC))
2406- else if ((size(iC) > cn))
2419+ else if (contains(iF, "__"))
2420+ then throw(("Name should not contain '__': " + iF))
2421+ else if ((size(iF) > cn))
24072422 then throw(("Name too long, maxLength=" + toString(cn)))
24082423 else {
24092424 let b = toString(ez.originCaller)
2410- let jL = {
2425+ let jO = {
24112426 let bk = aJ
24122427 if (("ACCOUNT" == bk))
24132428 then {
2414- let jM = cH(iC)
2415- let jN = getString(jM)
2416- if (isDefined(jN))
2417- then throw(("Name already registered: " + iC))
2429+ let jP = cH(iF)
2430+ let jQ = getString(jP)
2431+ if (isDefined(jQ))
2432+ then throw(("Name already registered: " + iF))
24182433 else {
2419- let jO = aQ(b)
2420- let jP = getString(jO)
2421- let jQ = if (isDefined(jP))
2422- then [DeleteEntry(cH(value(jP)))]
2434+ let jR = aQ(b)
2435+ let jS = getString(jR)
2436+ let jT = if (isDefined(jS))
2437+ then [DeleteEntry(cH(value(jS)))]
24232438 else nil
2424- (((jQ :+ StringEntry(jO, iC)) :+ StringEntry(jM, b)) ++ ig(b, E)._1)
2439+ (((jT :+ StringEntry(jR, iF)) :+ StringEntry(jP, b)) ++ ij(b, E)._1)
24252440 }
24262441 }
24272442 else if (("LAND" == bk))
24282443 then {
2429- let hw = value(assetInfo(fromBase58String(aE)))
2430- let hx = aG(aE)
2431- if (!(isDefined(getInteger(hx))))
2432- then throw((hw.name + " is not staked"))
2444+ let hz = value(assetInfo(fromBase58String(aE)))
2445+ let hA = aG(aE)
2446+ if (!(isDefined(getInteger(hA))))
2447+ then throw((hz.name + " is not staked"))
24332448 else {
2434- let hz = valueOrErrorMessage(getString(aD(aE)), (("NFT " + hw.name) + " is orphaned"))
2435- if ((hz != b))
2449+ let hC = valueOrErrorMessage(getString(aD(aE)), (("NFT " + hz.name) + " is orphaned"))
2450+ if ((hC != b))
24362451 then throw((X + " is not yours"))
24372452 else {
2438- let jM = cB(iC)
2439- let jN = getString(jM)
2440- if (isDefined(jN))
2441- then throw(("Name already registered: " + iC))
2453+ let jP = cB(iF)
2454+ let jQ = getString(jP)
2455+ if (isDefined(jQ))
2456+ then throw(("Name already registered: " + iF))
24422457 else {
2443- let jR = aF(aE)
2444- let jP = getString(jR)
2445- let jQ = if (isDefined(jP))
2446- then [DeleteEntry(cB(value(jP)))]
2458+ let jU = aF(aE)
2459+ let jS = getString(jU)
2460+ let jT = if (isDefined(jS))
2461+ then [DeleteEntry(cB(value(jS)))]
24472462 else nil
2448- (((jQ :+ StringEntry(jR, iC)) :+ StringEntry(jM, aE)) ++ ig(b, E)._1)
2463+ (((jT :+ StringEntry(jU, iF)) :+ StringEntry(jP, aE)) ++ ij(b, E)._1)
24492464 }
24502465 }
24512466 }
24522467 }
24532468 else if (("DUCK" == bk))
24542469 then {
2455- let hw = value(assetInfo(fromBase58String(aE)))
2456- let hx = aG(aE)
2457- if (if (!(isDefined(getInteger(hx))))
2470+ let hz = value(assetInfo(fromBase58String(aE)))
2471+ let hA = aG(aE)
2472+ if (if (!(isDefined(getInteger(hA))))
24582473 then true
24592474 else !(isDefined(getString(aW(b)))))
2460- then throw((hw.name + " is not staked"))
2475+ then throw((hz.name + " is not staked"))
24612476 else {
2462- let hz = valueOrErrorMessage(getString(aV(aE)), (("NFT " + hw.name) + " is orphaned"))
2463- if ((hz != b))
2477+ let hC = valueOrErrorMessage(getString(aV(aE)), (("NFT " + hz.name) + " is orphaned"))
2478+ if ((hC != b))
24642479 then throw((Y + " is not yours"))
24652480 else {
2466- let jM = cG(iC)
2467- let jN = getString(jM)
2468- if (isDefined(jN))
2469- then throw(("Name already registered: " + iC))
2481+ let jP = cG(iF)
2482+ let jQ = getString(jP)
2483+ if (isDefined(jQ))
2484+ then throw(("Name already registered: " + iF))
24702485 else {
2471- let jR = aP(aE)
2472- let jP = getString(jR)
2473- let jQ = if (isDefined(jP))
2474- then [DeleteEntry(cG(value(jP)))]
2486+ let jU = aP(aE)
2487+ let jS = getString(jU)
2488+ let jT = if (isDefined(jS))
2489+ then [DeleteEntry(cG(value(jS)))]
24752490 else nil
2476- (((jQ :+ StringEntry(jR, iC)) :+ StringEntry(jM, aE)) ++ ia(aE, E)._1)
2491+ (((jT :+ StringEntry(jU, iF)) :+ StringEntry(jP, aE)) ++ id(aE, E)._1)
24772492 }
24782493 }
24792494 }
24802495 }
24812496 else throw("Unknown entity type")
24822497 }
2483- $Tuple2(((jL :+ ScriptTransfer(bM, iU.amount, bj)) :+ iT), 0)
2498+ $Tuple2(((jO :+ ScriptTransfer(bM, iX.amount, bj)) :+ iW), 0)
24842499 }
24852500 }
24862501 }
24872502
24882503
24892504
24902505 @Callable(ez)
2491-func setReferrals (jS,jT) = if ((ez.callerPublicKey != cj))
2506+func setReferrals (jV,jW) = if ((ez.callerPublicKey != cj))
24922507 then throw("Permission denied")
24932508 else {
2494- let iT = iQ(ez)
2509+ let iW = iT(ez)
24952510 if ((size(ez.payments) != 0))
24962511 then throw("No payments required")
2497- else if (!(isDefined(addressFromString(jS))))
2498- then throw(("Invalid address: " + jS))
2499- else if (!(isDefined(addressFromString(jT))))
2500- then throw(("Invalid address: " + jT))
2512+ else if (!(isDefined(addressFromString(jV))))
2513+ then throw(("Invalid address: " + jV))
2514+ else if (!(isDefined(addressFromString(jW))))
2515+ then throw(("Invalid address: " + jW))
25012516 else {
2502- let jU = cI()
2503- let jV = getString(jU)
2504- let jW = if (isDefined(jV))
2505- then split_4C(value(jV), "_")
2517+ let jX = cI()
2518+ let jY = getString(jX)
2519+ let jZ = if (isDefined(jY))
2520+ then split_4C(value(jY), "_")
25062521 else nil
2507- if (containsElement(jW, jT))
2508- then throw((jT + " is not newbie (already has referrals)"))
2522+ if (containsElement(jZ, jW))
2523+ then throw((jW + " is not newbie (already has referrals)"))
25092524 else {
2510- let ii = aR(jT)
2511- let ij = getString(ii)
2512- if (if (isDefined(ij))
2513- then isDefined(addressFromString(value(ij)))
2525+ let il = aR(jW)
2526+ let im = getString(il)
2527+ if (if (isDefined(im))
2528+ then isDefined(addressFromString(value(im)))
25142529 else false)
2515- then throw(((jT + " already has refBy: ") + value(ij)))
2530+ then throw(((jW + " already has refBy: ") + value(im)))
25162531 else {
2517- let jX = aU(jS)
2518- let jY = getString(jX)
2519- let jZ = if (isDefined(jY))
2520- then split_4C(value(jY), "_")
2532+ let ka = aU(jV)
2533+ let kb = getString(ka)
2534+ let kc = if (isDefined(kb))
2535+ then split_4C(value(kb), "_")
25212536 else nil
2522- if (containsElement(jZ, jT))
2523- then throw((((jS + " already contains ") + jT) + " within referrals"))
2537+ if (containsElement(kc, jW))
2538+ then throw((((jV + " already contains ") + jW) + " within referrals"))
25242539 else {
2525- let ka = makeString_2C((jZ :+ jT), "_")
2526- let kb = if (containsElement(jW, jS))
2527- then value(jV)
2528- else makeString_2C((jW :+ jS), "_")
2529- $Tuple2([StringEntry(ii, jS), StringEntry(jX, ka), StringEntry(jU, kb), iT], 0)
2540+ let kd = makeString_2C((kc :+ jW), "_")
2541+ let ke = if (containsElement(jZ, jV))
2542+ then value(jY)
2543+ else makeString_2C((jZ :+ jV), "_")
2544+ $Tuple2([StringEntry(il, jV), StringEntry(ka, kd), StringEntry(jX, ke), iW], 0)
25302545 }
25312546 }
25322547 }
25332548 }
25342549 }
25352550
25362551
25372552
25382553 @Callable(ez)
2539-func distributePoints (kc,kd,ke,kf,kg) = {
2540- let iT = iQ(ez)
2554+func distributePoints (kf,kg,kh,ki,kj) = {
2555+ let iW = iT(ez)
25412556 if ((size(ez.payments) != 0))
25422557 then throw("No payments required")
25432558 else {
25442559 let b = toString(ez.originCaller)
25452560 let r = valueOrErrorMessage(getString(aW(b)), "You don't have a duck staked")
2546- let kh = z(b)
2547- let ki = valueOrElse(getInteger(T, kh), 0)
2548- let kj = v(r)
2549- let kk = valueOrElse(getInteger(T, kj), 0)
2550- let kl = (ki + kk)
2551- let km = ((((kc + kd) + ke) + kf) + kg)
2552- if ((km > kl))
2553- then throw((("There are only " + toString(kl)) + " free points to distribute"))
2561+ let kk = z(b)
2562+ let kl = valueOrElse(getInteger(T, kk), 0)
2563+ let km = v(r)
2564+ let kn = valueOrElse(getInteger(T, km), 0)
2565+ let ko = (kl + kn)
2566+ let kp = ((((kf + kg) + kh) + ki) + kj)
2567+ if ((kp > ko))
2568+ then throw((("There are only " + toString(ko)) + " free points to distribute"))
25542569 else {
2555- let kn = s(r)
2556- let U = split(valueOrElse(getString(T, kn), "0_0_0_0_0"), "_")
2557- let ko = (ki - km)
2558- $Tuple2([IntegerEntry(kh, if ((0 > ko))
2570+ let kq = s(r)
2571+ let U = split(valueOrElse(getString(T, kq), "0_0_0_0_0"), "_")
2572+ let kr = (kl - kp)
2573+ $Tuple2([IntegerEntry(kk, if ((0 > kr))
25592574 then 0
2560- else ko), IntegerEntry(kj, if ((0 > ko))
2561- then (kk + ko)
2562- else kk), StringEntry(kn, makeString([toString((parseIntValue(U[h]) + kc)), toString((parseIntValue(U[i]) + kd)), toString((parseIntValue(U[j]) + ke)), toString((parseIntValue(U[k]) + kf)), toString((parseIntValue(U[l]) + kg))], "_")), iT], 0)
2575+ else kr), IntegerEntry(km, if ((0 > kr))
2576+ then (kn + kr)
2577+ else kn), StringEntry(kq, makeString([toString((parseIntValue(U[h]) + kf)), toString((parseIntValue(U[i]) + kg)), toString((parseIntValue(U[j]) + kh)), toString((parseIntValue(U[k]) + ki)), toString((parseIntValue(U[l]) + kj))], "_")), iW], 0)
25632578 }
25642579 }
25652580 }
25662581
25672582
25682583
25692584 @Callable(ez)
2570-func splitByGlobalWeightsREADONLY (gf) = $Tuple2(nil, dg(gf))
2571-
2572-
2573-
2574-@Callable(ez)
2575-func splitByGlobalAndLocalWeightsREADONLY (kp,kq,eC) = {
2585+func splitByGlobalWeightsREADONLY (gh) = $Tuple2(nil, dg(gh))
2586+
2587+
2588+
2589+@Callable(ez)
2590+func splitByGlobalAndLocalWeightsREADONLY (ks,kt,eC) = {
25762591 let ev = eB(eC)
2577- $Tuple2(nil, $Tuple2(dg(kp), cR(kq, ev)))
2578- }
2579-
2580-
2581-
2582-@Callable(ez)
2583-func getBackpackREADONLY (r) = $Tuple2(nil, makeString(fy(aX(r)), ":"))
2592+ $Tuple2(nil, $Tuple2(dg(ks), cR(kt, ev)))
2593+ }
2594+
2595+
2596+
2597+@Callable(ez)
2598+func getBackpackREADONLY (r) = $Tuple2(nil, makeString(fC(aX(r)), ":"))
25842599
25852600
25862601
25872602 @Callable(ez)
25882603 func getWarehouseREADONLY (aO) = {
2589- let hw = value(assetInfo(fromBase58String(aO)))
2590- let fR = (ce(split(hw.description, "_")[bQ]) / br)
2591- let fS = valueOrElse(getInteger(aH(aO)), 0)
2592- $Tuple2(nil, makeString_2C(fP(aN(aO), fR, fS), ":"))
2604+ let hz = value(assetInfo(fromBase58String(aO)))
2605+ let fT = (ce(split(hz.description, "_")[bQ]) / br)
2606+ let fU = valueOrElse(getInteger(aH(aO)), 0)
2607+ $Tuple2(nil, makeString_2C(fR(aN(aO), fT, fU), ":"))
25932608 }
25942609
25952610
25962611
25972612 @Callable(ez)
25982613 func saveLastTx () = if (if ((ez.caller != bO))
25992614 then (ez.caller != bM)
26002615 else false)
26012616 then throw("Access denied")
2602- else $Tuple2([iQ(ez)], 42)
2603-
2604-
2605-
2606-@Callable(ez)
2607-func updateDuckStats (r,ib) = if ((ez.caller != bM))
2617+ else $Tuple2([iT(ez)], 42)
2618+
2619+
2620+
2621+@Callable(ez)
2622+func updateDuckStats (r,ie) = if ((ez.caller != bM))
26082623 then throw("Access denied")
2609- else ia(r, ib)
2610-
2611-
2612-
2613-@Callable(ez)
2614-func updateAccStats (b,ib) = if ((ez.caller != bM))
2624+ else id(r, ie)
2625+
2626+
2627+
2628+@Callable(ez)
2629+func updateAccStats (b,ie) = if ((ez.caller != bM))
26152630 then throw("Access denied")
2616- else ig(b, ib)
2617-
2618-
2619-
2620-@Callable(ez)
2621-func equipDuck (kr) = {
2622- let iT = iQ(ez)
2631+ else ij(b, ie)
2632+
2633+
2634+
2635+@Callable(ez)
2636+func equipDuck (ku) = {
2637+ let iW = iT(ez)
26232638 if ((size(ez.payments) != 0))
26242639 then throw("No payments required")
26252640 else {
26262641 let b = toString(ez.originCaller)
26272642 let r = valueOrErrorMessage(getString(aW(b)), "You don't have a duck staked")
2628- let hh = w(r)
2629- let ks = split(valueOrElse(getString(hh), ",;,_,;,_,;,_,;,_,;,_,;,"), "_")
2630- let fz = aX(r)
2631- let gj = fy(fz)
2632- let hj = split(kr, "_")
2633- if ((size(hj) != m))
2643+ let hj = w(r)
2644+ let kv = split(valueOrElse(getString(hj), ",;,_,;,_,;,_,;,_,;,_,;,"), "_")
2645+ let fD = aX(r)
2646+ let gl = fC(fD)
2647+ let hl = split(ku, "_")
2648+ if ((size(hl) != m))
26342649 then throw("Wrong equipment string")
26352650 else {
26362651 let dO = S(this, r)
2637- let kt = em(ks, dD(gj[aB]), true, dO)
2638- let ku = em(hj, kt, false, dO)
2639- let kv = dI(ku)
2640- $Tuple2([StringEntry(hh, kr), StringEntry(fz, makeString_2C([gj[ay], gj[az], gj[aA], kv], ":")), iT], 0)
2652+ let kw = em(kv, dD(gl[aB]), true, dO)
2653+ let kx = em(hl, kw, false, dO)
2654+ let ky = dI(kx)
2655+ $Tuple2([StringEntry(hj, ku), StringEntry(fD, makeString_2C([gl[ay], gl[az], gl[aA], ky], ":")), iW], 0)
26412656 }
26422657 }
26432658 }
2644-
2645-
2646-
2647-@Callable(ez)
2648-func test () = $Tuple2(nil, fi(nil, 1))
26492659
26502660

github/deemru/w8io/169f3d6 
910.01 ms