tx · 7YtfLVRpbiGN3Dc1uuTqV9RS47mUbvj6fWrGgoCDQrSV

3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm:  -0.10100000 Waves

2024.09.12 19:15 [3280649] smart account 3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm > SELF 0.00000000 Waves

{ "type": 13, "id": "7YtfLVRpbiGN3Dc1uuTqV9RS47mUbvj6fWrGgoCDQrSV", "fee": 10100000, "feeAssetId": null, "timestamp": 1726157502292, "version": 2, "chainId": 84, "sender": "3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm", "senderPublicKey": "EVooykMNV691Venwp1dHUTBd7KWequzUcda57Wd3LQEX", "proofs": [ "5uRZtTwVfKpPcY6swos5YJC233KhFBDBHunL5qkt7378VnUFRqRF7UewHJv6hjv6C8MzAPMDVMhhvuXYGRYf57L5" ], "script": "base64:BgLlAQgCEgMKAQgSBAoCCAESAwoBBBIAEgMKAQgSBAoCCAgSBAoCCAgSAwoBCBIAEgMKAQgSBAoCCAgSBAoCCAgSBAoCAQgSBAoCAQgSBAoCAgISBQoDAQEBEgASBAoCCAgSABIDCgEBEgASBAoCAgISABIDCgEIEgQKAggIEgMKARgSBAoCCAgSBAoCCAgSBQoDCAgIEgQKAggIEgcKBQEBAQEBEgMKAQESBQoDAQEIEgMKAQgSAwoBCBIAEgQKAggBEgQKAggBEgMKAQgSAwoBCBIAEgASAwoBCBIDCgEIEgQKAgICEgCeAgAWS1NfU0VQQVJBVEVfUFVCTElDX0tFWQcAGEtTX0FMTE9XX0JJR19JTkZSQV9NRVJHRQcAE0tTX0FMTE9XX1JPQk9fRFVDS1MHAApEQVlfTUlMTElTAIC4mSkABWNoYWluCQDJAQIJAMoBAggFBHRoaXMFYnl0ZXMAAQABAANwdWIEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDADBRZLU19TRVBBUkFURV9QVUJMSUNfS0VZASCrF1ePFWfjWVRBsNZy62abxKPTZl7VmYZQ35g3H7IJCAEgT1PiGj9UqNadUk4THUYnVb2zU/Mse8lUVLD/Q8G0FCgDCQAAAgEBVAUHJG1hdGNoMAEgT1PiGj9UqNadUk4THUYnVb2zU/Mse8lUVLD/Q8G0FCgJAAIBAg1Vbmtub3duIGNoYWluAAt1c2R0QXNzZXRJZAQHJG1hdGNoMAUFY2hhaW4DCQAAAgEBVwUHJG1hdGNoMAEghNp6sggDP07Ru8qO7ouTvMmC3Qtd+geWqNQj+agP/7kDCQAAAgEBVAUHJG1hdGNoMAEgVbHYn3KHgu/l41uNrAWrZd6aQ6EvFrsF8xq3h6XxxRgJAAIBAg1Vbmtub3duIGNoYWluABVkZWZhdWx0UmVzdEFkZHJlc3NTdHIEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDACIzNQUUN1dkZidmg0TGtQVW5yblUxejNqbmJBMXA5bTNXTmh2AwkAAAIBAVQFByRtYXRjaDACIzNNdW1rR0d6dENLQVhwV0RxeGtkZG9mcVhTVWJxUWt2U0p5CQACAQINVW5rbm93biBjaGFpbgAQYWNyZXMyQWRkcmVzc1N0cgQHJG1hdGNoMAUFY2hhaW4DCQAAAgEBVwUHJG1hdGNoMAIjM1A0VUgzVDluWHBNTnBVbVNtUWpQbUV6M0c4NXQzem42ZUEDCQAAAgEBVAUHJG1hdGNoMAIjM05CUHgxRmNpdTNKUU5FR1oyMWpTblRkdXRMTkdHQlVTWGgJAAIBAg1Vbmtub3duIGNoYWluABFJbmZyYVVwZ3JhZGVDb3N0UwQHJG1hdGNoMAUFY2hhaW4DCQAAAgEBVwUHJG1hdGNoMACAyK+gJQMJAAACAQFUBQckbWF0Y2gwAIDC1y8JAAIBAg1Vbmtub3duIGNoYWluAA5hcmJpdHJhZ2VEZWxheQQHJG1hdGNoMAUFY2hhaW4DCQAAAgEBVwUHJG1hdGNoMAUKREFZX01JTExJUwMJAAACAQFUBQckbWF0Y2gwAODUAwkAAgECDVVua25vd24gY2hhaW4AA1NFUAICX18ABU1VTFQ2AMCEPQAFTVVMVDgAgMLXLwAFU1NJWkUAGQAFTVNJWkUAZAAFTFNJWkUA4QEABlhMU0laRQCQAwAHWFhMU0laRQDxBAAFSVRFUjYJAMwIAgAACQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUFA25pbAEPZ2V0U3RyaW5nT3JGYWlsAgdhZGRyZXNzA2tleQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFB2FkZHJlc3MFA2tleQkAuQkCCQDMCAICCm1hbmRhdG9yeSAJAMwIAgkApQgBBQdhZGRyZXNzCQDMCAICAS4JAMwIAgUDa2V5CQDMCAICDyBpcyBub3QgZGVmaW5lZAUDbmlsAgAAEUlkeENmZ1N0YWtpbmdEYXBwAAEAEUlkeENmZ0Vjb25vbXlEYXBwAAIAFElkeENmZ0dvdmVybmFuY2VEYXBwAAMADUlkeENmZ1dsZ0RhcHAABAAUSWR4Q2ZnVG91cm5hbWVudERhcHAABwAPSWR4Q2ZnQWNyZXNEYXBwAAgBCmtleVJlc3RDZmcAAg4lc19fcmVzdENvbmZpZwEOa2V5UmVzdEFkZHJlc3MAAgwlc19fcmVzdEFkZHIBEXJlYWRSZXN0Q2ZnT3JGYWlsAQRyZXN0CQC8CQIJAQ9nZXRTdHJpbmdPckZhaWwCBQRyZXN0CQEKa2V5UmVzdENmZwAFA1NFUAEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgdyZXN0Q2ZnA2lkeAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJAJEDAgUHcmVzdENmZwUDaWR4CQCsAgICKlJlc3QgY2ZnIGRvZXNuJ3QgY29udGFpbiBhZGRyZXNzIGF0IGluZGV4IAkApAMBBQNpZHgADHJlc3RDb250cmFjdAkBEUBleHRyTmF0aXZlKDEwNjIpAQkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzCQEOa2V5UmVzdEFkZHJlc3MABRVkZWZhdWx0UmVzdEFkZHJlc3NTdHIAB3Jlc3RDZmcJARFyZWFkUmVzdENmZ09yRmFpbAEFDHJlc3RDb250cmFjdAAPc3Rha2luZ0NvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUHcmVzdENmZwURSWR4Q2ZnU3Rha2luZ0RhcHAAD2Vjb25vbXlDb250cmFjdAkBGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIFB3Jlc3RDZmcFEUlkeENmZ0Vjb25vbXlEYXBwAAtnb3ZDb250cmFjdAkBGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIFB3Jlc3RDZmcFFElkeENmZ0dvdmVybmFuY2VEYXBwAAt3bGdDb250cmFjdAkBGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIFB3Jlc3RDZmcFDUlkeENmZ1dsZ0RhcHAAEnRvdXJuYW1lbnRDb250cmFjdAkBGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIFB3Jlc3RDZmcFFElkeENmZ1RvdXJuYW1lbnREYXBwAA1hY3Jlc0NvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUHcmVzdENmZwUPSWR4Q2ZnQWNyZXNEYXBwAApyZWNMYW5kTnVtAAAAC3JlY0xhbmRTaXplAAEAC3JlY1RlcnJhaW5zAAIADHJlY0NvbnRpbmVudAADAA13bGdBc3NldElkS2V5Agt3bGdfYXNzZXRJZAAKd2xnQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCcCAIFC3dsZ0NvbnRyYWN0BQ13bGdBc3NldElkS2V5AhhXTEdPTEQgaXMgbm90IGlzc3VlZCB5ZXQAD2FjcmVzQXNzZXRJZEtleQIMYWNyZXNBc3NldElkAAxhY3Jlc0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnAgCBQ1hY3Jlc0NvbnRyYWN0BQ9hY3Jlc0Fzc2V0SWRLZXkCF0FDUkVTIGlzIG5vdCBpc3N1ZWQgeWV0AAtyYW5kb21EZWxheQACAQlrZXlDb21taXQBB2FkZHJlc3MJAKwCAgIPZmluaXNoQmxvY2tGb3JfBQdhZGRyZXNzARFrZXlSZXNQcm9wb3J0aW9ucwACE3Jlc1R5cGVzUHJvcG9ydGlvbnMBFmtleVJlc1R5cGVzQnlDb250aW5lbnQBCWNvbnRpbmVudAkArAICAhRyZXNUeXBlc0J5Q29udGluZW50XwUJY29udGluZW50ARVrZXlTdGFrZWRMYW5kc0J5T3duZXIBCW93bmVyQWRkcgkArAICAhNzdGFrZWRMYW5kc0J5T3duZXJfBQlvd25lckFkZHIBFmtleVN0YWtlZFBpZWNlc0J5T3duZXIBCW93bmVyQWRkcgkArAICAhRzdGFrZWRQaWVjZXNCeU93bmVyXwUJb3duZXJBZGRyAQhhc1N0cmluZwEBdgQHJG1hdGNoMAUBdgMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAXMFByRtYXRjaDAFAXMJAAIBAhhmYWlsIHRvIGNhc3QgaW50byBTdHJpbmcBBWFzSW50AQF2BAckbWF0Y2gwBQF2AwkAAQIFByRtYXRjaDACA0ludAQBbgUHJG1hdGNoMAUBbgkAAgECFWZhaWwgdG8gY2FzdCBpbnRvIEludAEJYXNBbnlMaXN0AQF2BAckbWF0Y2gwBQF2AwkAAQIFByRtYXRjaDACCUxpc3RbQW55XQQBbAUHJG1hdGNoMAUBbAkAAgECG2ZhaWwgdG8gY2FzdCBpbnRvIExpc3RbQW55XQEJYXNCb29sZWFuAQF2BAckbWF0Y2gwBQF2AwkAAQIFByRtYXRjaDACB0Jvb2xlYW4EAXMFByRtYXRjaDAFAXMJAAIBAhlmYWlsIHRvIGNhc3QgaW50byBCb29sZWFuAQ9udW1QaWVjZXNCeVNpemUBCGxhbmRTaXplBAckbWF0Y2gwBQhsYW5kU2l6ZQMJAAACAgFTBQckbWF0Y2gwBQVTU0laRQMJAAACAgFNBQckbWF0Y2gwBQVNU0laRQMJAAACAgFMBQckbWF0Y2gwBQVMU0laRQMJAAACAgJYTAUHJG1hdGNoMAUGWExTSVpFAwkAAAICA1hYTAUHJG1hdGNoMAUHWFhMU0laRQkAAgECEVVua25vd24gbGFuZCBzaXplAQdpc0RpZ2l0AQFzCQEJaXNEZWZpbmVkAQkAtgkBBQFzAQprZXlCbG9ja2VkAAIQY29udHJhY3RzQmxvY2tlZAERa2V5TGFzdFR4SWRCeVVzZXIBBGFkZHIJAKwCAgIPbGFzdFR4SWRCeVVzZXJfBQRhZGRyAQpmaXhlZFBvaW50AgN2YWwIZGVjaW1hbHMEBnRlblBvdwkAbAYACgAABQhkZWNpbWFscwAAAAAFBERPV04EB2xvd1BhcnQJAKQDAQkAagIFA3ZhbAUGdGVuUG93BAZ6ZXJvZXMJALACAgkApAMBBQZ0ZW5Qb3cJAGQCAAEJALECAQUHbG93UGFydAkArAICCQCsAgIJAKwCAgkApAMBCQBpAgUDdmFsBQZ0ZW5Qb3cCAS4FBnplcm9lcwUHbG93UGFydAEPZ2V0UmFuZG9tTnVtYmVyAwhtYXhWYWx1ZQRzYWx0B2VudHJvcHkDCQBnAgAABQhtYXhWYWx1ZQkAAgECFm1heFZhbHVlIHNob3VsZCBiZSA+IDAECnJhbmRvbUhhc2gJAPcDAQkAywECBQRzYWx0BQdlbnRyb3B5CQBqAgkAsQkBBQpyYW5kb21IYXNoBQhtYXhWYWx1ZQEJZmluYWxUaW1lAAkAlwMBCQDMCAIIBQlsYXN0QmxvY2sJdGltZXN0YW1wCQDMCAIAmNCBq6QyBQNuaWwACkxBTkRQUkVGSVgCBExBTkQACkRVQ0tQUkVGSVgCBERVQ0sAC1JPQk9fUFJFRklYAgRST0JPAApBUlRQUkVTQUxFAgdQUkVTQUxFAAZOVU1SRVMABgAYTUFYX0xBTkRTX1NUQUtFRF9CWV9VU0VSABkAD0RBSUxZUkVTQllQSUVDRQCA+NIBAAxXSE1VTFRJUExJRVIAgMivoCUAD0RFRkFVTFRMT0NBVElPTgIPQWZyaWNhX0ZfQWZyaWNhABBSRVNPVVJDRVBSSUNFTUlOANW1AgAKRVNTRUxMQ09FRgAKABVNSU5fVVNEVF9GRUVfREVMSVZFUlkA0IYDABVVU0RUMkFDUkVTX01VTFRJUExJRVIACgASTUlOX1dMR09MRF9ST0JCRVJZAIDC1y8AFkFMTE9XRURfRlJFRV9ST0JCRVJJRVMAAAAZQUNSRVNfRk9SX1JPQkJFUllfQVRURU1QVACAhK9fABdBTExPV0VEX0ZSRUVfREVMSVZFUklFUwAAABpBQ1JFU19GT1JfREVMSVZFUllfQVRURU1QVACAhK9fAAlwcm9kVHlwZXMJAMwIAgIQRmlyc3QgQWlkIEtpdCBMMQkAzAgCAhBGaXJzdCBBaWQgS2l0IEwyCQDMCAICEEZpcnN0IEFpZCBLaXQgTDMJAMwIAgILQmFja3BhY2sgTDEJAMwIAgILQmFja3BhY2sgTDIJAMwIAgILQmFja3BhY2sgTDMJAMwIAgIORm9vZCBSYXRpb24gTDEJAMwIAgIORm9vZCBSYXRpb24gTDIJAMwIAgIORm9vZCBSYXRpb24gTDMJAMwIAgILSmV0IFBhY2sgTDEJAMwIAgILSmV0IFBhY2sgTDIJAMwIAgILSmV0IFBhY2sgTDMJAMwIAgIJU2hpZWxkIEwxCQDMCAICCVNoaWVsZCBMMgkAzAgCAglTaGllbGQgTDMJAMwIAgIHTWluZSBMMQkAzAgCAgdNaW5lIEwyCQDMCAICB01pbmUgTDMJAMwIAgIHVHJhcCBMMQkAzAgCAgdUcmFwIEwyCQDMCAICB1RyYXAgTDMJAMwIAgILQm9vbS1Eb2cgTDEJAMwIAgILQm9vbS1Eb2cgTDIJAMwIAgILQm9vbS1Eb2cgTDMFA25pbAAKY29udGluZW50cwkAzAgCAghBbWVyaWNhcwkAzAgCAgZFdXJvcGUJAMwIAgIEQXNpYQkAzAgCAgZBZnJpY2EJAMwIAgIHT2NlYW5pYQUDbmlsAAlDT0VGRjJNQVQAgK3iBAAQcHJvZHVjdGlvbk1hdHJpeAkAzAgCAiU4XzhfOF8xN18xN180Ml8xMl8wXzMwXzAsMCwwLDAsMCwwLDBfCQDMCAICJThfOF84XzE3XzE3XzQyXzI0XzBfNjBfMCwwLDUsMiwwLDAsMF8JAMwIAgInOF84XzhfMTdfMTdfNDJfMzZfMF8xMjBfMCwwLDEwLDQsMCwwLDBfCQDMCAICKThfMTlfMTlfOF8yN18xOV8yNl8xXzIwXzAsMCwwLDAsMCwwLDBfMDAxCQDMCAICKThfMTlfMTlfOF8yN18xOV81Ml8xXzQwXzAsMCwwLDAsMCwwLDBfMDAxCQDMCAICKThfMTlfMTlfOF8yN18xOV83OF8xXzgwXzAsMCwwLDAsMCwwLDBfMDAxCQDMCAICJThfOF84XzhfOF82MF8xM18yXzJfMCwwLDAsMCwwLDAsMF8wMTEJAMwIAgIlOF84XzhfOF84XzYwXzI2XzJfNF8wLDAsMCwwLDAsMCwwXzAxMQkAzAgCAiU4XzhfOF84XzhfNjBfMzlfMl84XzAsMCwwLDAsMCwwLDBfMDExCQDMCAICKTMwXzMwXzNfMTdfMTdfM18zMF8zXzMwXzAsMCwwLDAsMCwwLDBfMTExCQDMCAICKTMwXzMwXzNfMTdfMTdfM182MF8zXzUwXzAsMCwwLDAsMCwwLDBfMTExCQDMCAICKTMwXzMwXzNfMTdfMTdfM185MF8zXzcwXzAsMCwwLDAsMCwwLDBfMTExCQDMCAICKzE4XzE4XzEwXzE4XzE4XzE4XzExXzRfMTBfMCwwLDAsMCwwLDAsMF8yMDEJAMwIAgIrMThfMThfMTBfMThfMThfMThfMjJfNF8yMF8wLDAsMCwwLDAsMCwwXzIwMQkAzAgCAisxOF8xOF8xMF8xOF8xOF8xOF8zM180XzMwXzAsMCwwLDAsMCwwLDBfMjAxCQDMCAICKjRfMTNfMjJfNF8zNV8yMl8yM18wXzUwLDEsMF8wLDAsMCwwLDAsMCwwXwkAzAgCAio0XzEzXzIyXzRfMzVfMjJfNDZfMF81MCwxLDFfMCwyLDUsMCwwLDAsMF8JAMwIAgIrNF8xM18yMl80XzM1XzIyXzY5XzBfNTAsMiwxXzAsNSwxMCwwLDAsMCwwXwkAzAgCAio1XzI1XzQwXzVfMTBfMTVfMjBfMV8zMCwxLDFfMCwwLDAsMCwwLDAsMF8JAMwIAgIqNV8yNV80MF81XzEwXzE1XzQwXzFfMzAsMSwyXzIsMSwzLDAsMCwwLDBfCQDMCAICKjVfMjVfNDBfNV8xMF8xNV82MF8xXzMwLDEsM181LDIsOCwwLDAsMCwwXwkAzAgCAicyM18yM181XzIwXzIzXzZfMzVfMl8xMDBfMCwwLDAsMCwwLDAsMF8JAMwIAgInMjNfMjNfNV8yMF8yM182XzcwXzJfMTUwXzAsMCwwLDAsMCwwLDBfCQDMCAICKDIzXzIzXzVfMjBfMjNfNl8xMDVfMl8yMDBfMCwwLDAsMCwwLDAsMF8FA25pbAAJcklkeENvZWZmAAYACnJJZHhFZmZlY3QACAAQcklkeFJlcXVpcmVtZW50cwAJAAlySWR4U2xvdHMACgAOUFJPRFVDVFBLR1NJWkUACgALd2hJZHhMZXZlbHMAAAAId2hJZHhSZXMAAQAId2hJZHhNYXQAAgAJd2hJZHhQcm9kAAMACXdoSWR4TE9GVAAEAAl2b2xMb2NrZWQAAAALdm9sT2NjdXBpZWQAAQAHdm9sRnJlZQACAAh2b2xUb3RhbAADAApicElkeExldmVsAAAACGJwSWR4UmVzAAEACGJwSWR4TWF0AAIACWJwSWR4UHJvZAADAA9sb2NJZHhDb250aW5lbnQAAAAKbG9jSWR4VHlwZQABAAhsb2NJZHhJZAACARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBB2Fzc2V0SWQJAKwCAgIDbm9fBQdhc3NldElkARprZXlMYW5kQXNzZXRJZFRvQ3VzdG9tTmFtZQEHYXNzZXRJZAkArAICAgVsY25hXwUHYXNzZXRJZAEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEHYXNzZXRJZAkArAICAgNzdF8FB2Fzc2V0SWQBIGtleUxhbmRBcnRTdGF0dXNCeVR5cGVBbmRBc3NldElkAgR0eXBlB2Fzc2V0SWQJALkJAgkAzAgCAgNsYXMJAMwIAgUEdHlwZQkAzAgCBQdhc3NldElkBQNuaWwCAV8BImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDB25mdFR5cGUHYXNzZXRJZAlvd25lckFkZHIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAgZzdHRhb18FB25mdFR5cGUCAV8FB2Fzc2V0SWQCAV8FCW93bmVyQWRkcgESa2V5V2FyZWhvdXNlQnlMYW5kAQtsYW5kQXNzZXRJZAkArAICAgN3aF8FC2xhbmRBc3NldElkARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQdhc3NldElkCQCsAgICC2luZnJhTGV2ZWxfBQdhc3NldElkARprZXlEdWNrQXNzZXRJZFRvQ3VzdG9tTmFtZQEHYXNzZXRJZAkArAICAhhkdWNrQ3VzdG9tTmFtZUJ5QXNzZXRJZF8FB2Fzc2V0SWQBFmtleUFkZHJlc3NUb0N1c3RvbU5hbWUBBGFkZHIJAKwCAgIYYWNjb3VudEN1c3RvbU5hbWVCeUFkZHJfBQRhZGRyAQ9rZXlBZGRyZXNzUmVmQnkBBGFkZHIJAKwCAgIJYWNjUmVmQnlfBQRhZGRyARxrZXlPbmJvYXJkQXJ0QWN0aXZhdGVkT25EdWNrAQtkdWNrQXNzZXRJZAkArAICAhpvbmJvYXJkQXJ0QWN0aXZhdGVkT25EdWNrXwULZHVja0Fzc2V0SWQBHGtleU9uYm9hcmRBcnREdWNrQWN0aXZhdGVkQnkBBGFkZHIJAKwCAgIab25ib2FyZEFydEFjdGl2YXRlZER1Y2tCeV8FBGFkZHIBE2tleUFkZHJlc3NSZWZlcnJhbHMBBGFkZHIJAKwCAgINYWNjUmVmZXJyYWxzXwUEYWRkcgEQa2V5RHVja0lkVG9Pd25lcgEHYXNzZXRJZAkArAICAgpkdWNrT3duZXJfBQdhc3NldElkARRrZXlTdGFrZWREdWNrQnlPd25lcgEJb3duZXJBZGRyCQCsAgICEnN0YWtlZER1Y2tCeU93bmVyXwUJb3duZXJBZGRyARFrZXlCYWNrcGFja0J5RHVjawELZHVja0Fzc2V0SWQJAKwCAgIJYmFja1BhY2tfBQtkdWNrQXNzZXRJZAEPa2V5RHVja0xvY2F0aW9uAQtkdWNrQXNzZXRJZAkArAICAg1kdWNrTG9jYXRpb25fBQtkdWNrQXNzZXRJZAEVa2V5VXNlckd3bFJlbGVhc2VUaW1lAQh1c2VyQWRkcgkArAICAholcyVzX191c2VyR3dsUmVsZWFzZVRpbWVfXwUIdXNlckFkZHIBDmtleUVzV2FyZWhvdXNlAAIaZW1lcmdlbmN5V2FyZWhvdXNlUHJvZHVjdHMAD2RlbGl2ZXJ5RnVuZEtleQIMZGVsaXZlcnlGdW5kAA1sYXN0VG91cklkS2V5Ag4lc19fbGFzdFRvdXJJZAEVa2V5VG91clN0YXRpY0RhdGFCeUlkAQN0SWQJAKwCAgIWJXMlZF9fdG91clN0YXRpY0RhdGFfXwkApAMBBQN0SWQBFmtleVRvdXJEeW5hbWljRGF0YUJ5SWQBA3RJZAkArAICAhclcyVkX190b3VyRHluYW1pY0RhdGFfXwkApAMBBQN0SWQBGmtleUJlc3RSZXN1bHRCeVRvdXJBbmREdWNrAgN0SWQLZHVja0Fzc2V0SWQJALkJAgkAzAgCAh8lcyVkJXNfX2Jlc3RSZXN1bHRCeVRvdXJBbmREdWNrCQDMCAIJAKQDAQUDdElkCQDMCAIFC2R1Y2tBc3NldElkBQNuaWwCAl9fAAlpZHhTdGF0aWMAAAAKaWR4RHluYW1pYwABAAp0U3RhdGljRW5kAAYADnREeW5hbWljU3RhdHVzAAEBC2dldFRvdXJEYXRhAgx0b3VyQ29udHJhY3QDdElkBAZzdGF0aWMJALUJAgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFDHRvdXJDb250cmFjdAkBFWtleVRvdXJTdGF0aWNEYXRhQnlJZAEFA3RJZAkArAICCQCsAgICGUVycm9yIHJlYWRpbmcgdG91cm5hbWVudCAJAKQDAQUDdElkAgUgZGF0YQICX18EB2R5bmFtaWMJALwJAgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFDHRvdXJDb250cmFjdAkBFmtleVRvdXJEeW5hbWljRGF0YUJ5SWQBBQN0SWQJAKwCAgkArAICAhlFcnJvciByZWFkaW5nIHRvdXJuYW1lbnQgCQCkAwEFA3RJZAIFIGRhdGECAl9fCQDMCAIFBnN0YXRpYwkAzAgCBQdkeW5hbWljBQNuaWwBDmlzSW5Ub3VybmFtZW50Agx0b3VyQ29udHJhY3QIbG9jYXRpb24EBmxhc3RJZAkBC3ZhbHVlT3JFbHNlAgkAmggCBQx0b3VyQ29udHJhY3QFDWxhc3RUb3VySWRLZXkAAAQDbG9jCQC1CQIFCGxvY2F0aW9uAgFfBANub3cIBQlsYXN0QmxvY2sJdGltZXN0YW1wBAV0RGF0YQkBC2dldFRvdXJEYXRhAgUMdG91ckNvbnRyYWN0BQZsYXN0SWQEBnN0YXRpYwkAkQMCBQV0RGF0YQUJaWR4U3RhdGljBAdkeW5hbWljCQCRAwIFBXREYXRhBQppZHhEeW5hbWljAwMDCQAAAgkAkQMCBQNsb2MFCmxvY0lkeFR5cGUCAVQJAAACCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUDbG9jBQ9sb2NJZHhDb250aW5lbnQFBmxhc3RJZAcJAAACCQCRAwIFB2R5bmFtaWMFDnREeW5hbWljU3RhdHVzAgpJTlBST0dSRVNTBwkAZgIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQZzdGF0aWMFCnRTdGF0aWNFbmQFA25vdwcBCW9uTWlzc2lvbgIMdG91ckNvbnRyYWN0CGxvY2F0aW9uBAZsYXN0SWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUMdG91ckNvbnRyYWN0BQ1sYXN0VG91cklkS2V5AAAEA2xvYwkAtQkCBQhsb2NhdGlvbgIBXwQDbm93CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQFdERhdGEJAQtnZXRUb3VyRGF0YQIFDHRvdXJDb250cmFjdAUGbGFzdElkBAZzdGF0aWMJAJEDAgUFdERhdGEFCWlkeFN0YXRpYwQHZHluYW1pYwkAkQMCBQV0RGF0YQUKaWR4RHluYW1pYwQHbG9jVHlwZQkAkQMCBQNsb2MFCmxvY0lkeFR5cGUDAwMJAAACCQCRAwIFA2xvYwUKbG9jSWR4VHlwZQIBVAkAAAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQNsb2MFD2xvY0lkeENvbnRpbmVudAUGbGFzdElkBwkAAAIJAJEDAgUHZHluYW1pYwUOdER5bmFtaWNTdGF0dXMCCklOUFJPR1JFU1MHCQBmAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBnN0YXRpYwUKdFN0YXRpY0VuZAUDbm93BwESZ2V0UmVjaXBlTWF0ZXJpYWxzAQZyZWNpcGUJAGgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUGcmVjaXBlBQlySWR4Q29lZmYFCUNPRUZGMk1BVAEMY2hlYXRBdHRlbXB0AwZvbGRMb2MGbmV3TG9jCWNoZWF0Q2FzZQkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhZDaGVhdCBhdHRlbXB0OiBvbGRMb2M9BQZvbGRMb2MCCSwgbmV3TG9jPQUGbmV3TG9jAgcsIGNhc2U9CQCkAwEFCWNoZWF0Q2FzZQAGU0NBTEU4AIDC1y8ADHhwTGV2ZWxTY2FsZQCAGQAPeHBMZXZlbFJlY2lwUG93AKAfABJudW1Qb2ludHNPbkxldmVsVXAAAwAMcmVxdWlyZW1lbnRzCQDMCAICCFN0cmVuZ3RoCQDMCAICCEFjY3VyYWN5CQDMCAICCUludGVsbGVjdAkAzAgCAglFbmR1cmFuY2UJAMwIAgIJRGV4dGVyaXR5CQDMCAICBUxldmVsCQDMCAICBkhlYWx0aAUDbmlsAAxjaGFyU3RyZW5ndGgAAAAMY2hhckFjY3VyYWN5AAEADWNoYXJJbnRlbGxlY3QAAgANY2hhckVuZHVyYW5jZQADAA1jaGFyRGV4dGVyaXR5AAQAC3NlZ0JhY2twYWNrAAAAC05VTVNFR01FTlRTAAYACk5VTU1BSU5BVVgAAgAITUFYU0xPVFMAAgANTUFYUFJPRElOU0xPVAAeAQ1rZXlEdWNrSGVhbHRoAQtkdWNrQXNzZXRJZAkArAICAgtkdWNrSGVhbHRoXwULZHVja0Fzc2V0SWQBDGtleUR1Y2tDaGFycwELZHVja0Fzc2V0SWQJAKwCAgIKZHVja0NoYXJzXwULZHVja0Fzc2V0SWQBCWtleUR1Y2tYUAELZHVja0Fzc2V0SWQJAKwCAgIHZHVja1hQXwULZHVja0Fzc2V0SWQBDGtleUR1Y2tMZXZlbAELZHVja0Fzc2V0SWQJAKwCAgIKZHVja0xldmVsXwULZHVja0Fzc2V0SWQBEWtleUR1Y2tGcmVlUG9pbnRzAQtkdWNrQXNzZXRJZAkArAICAg9kdWNrRnJlZVBvaW50c18FC2R1Y2tBc3NldElkARBrZXlEdWNrRXF1aXBtZW50AQtkdWNrQXNzZXRJZAkArAICAg5kdWNrRXF1aXBtZW50XwULZHVja0Fzc2V0SWQBCWtleVVzZXJYUAEEYWRkcgkArAICAgd1c2VyWFBfBQRhZGRyAQxrZXlVc2VyTGV2ZWwBBGFkZHIJAKwCAgIKdXNlckxldmVsXwUEYWRkcgERa2V5VXNlckZyZWVQb2ludHMBBGFkZHIJAKwCAgIPdXNlckZyZWVQb2ludHNfBQRhZGRyAQ5rZXlTYXZlZEhlYWx0aAELZHVja0Fzc2V0SWQJAKwCAgIMc2F2ZWRIZWFsdGhfBQtkdWNrQXNzZXRJZAEQa2V5U2F2ZWRMb2NhdGlvbgELZHVja0Fzc2V0SWQJAKwCAgIOc2F2ZWRMb2NhdGlvbl8FC2R1Y2tBc3NldElkAQxrZXlEdWNrQnVmZnMBC2R1Y2tBc3NldElkCQCsAgICCmR1Y2tCdWZmc18FC2R1Y2tBc3NldElkARhrZXlMYXN0Um9iYmVyeVRpbWVCeUR1Y2sBC2R1Y2tBc3NldElkCQCsAgICEGxhc3RSb2JiZXJ5VGltZV8FC2R1Y2tBc3NldElkARNrZXlEdWNrUm9iYmVyeUNvdW50AQtkdWNrQXNzZXRJZAkArAICAhh0b3RhbFJvYmJlcnlDb3VudEJ5RHVja18FC2R1Y2tBc3NldElkARNrZXlVc2VyUm9iYmVyeUNvdW50AQRhZGRyCQCsAgICEXVzZXJSb2JiZXJ5Q291bnRfBQRhZGRyARVrZXlVc2VyTGFzdFJvYmJlcnlEYXkBBGFkZHIJAKwCAgITdXNlckxhc3RSb2JiZXJ5RGF5XwUEYWRkcgEUa2V5RHVja0RlbGl2ZXJ5Q291bnQBC2R1Y2tBc3NldElkCQCsAgICGXRvdGFsRGVsaXZlcnlDb3VudEJ5RHVja18FC2R1Y2tBc3NldElkARRrZXlVc2VyRGVsaXZlcnlDb3VudAEEYWRkcgkArAICAhJ1c2VyRGVsaXZlcnlDb3VudF8FBGFkZHIBFmtleVVzZXJMYXN0RGVsaXZlcnlEYXkBBGFkZHIJAKwCAgIUdXNlckxhc3REZWxpdmVyeURheV8FBGFkZHIAB3hwQ2xhaW0AkE4AD3hwU3VjY2Vzc0ZsaWdodACQTgAMeHBGYWlsRmxpZ2h0ANAPAAx4cFN1Y2Nlc3NSb2IAkE4ACXhwRmFpbFJvYgDQDwAIeHBDYWxsRVMAoI0GAAx4cEN1c3RvbU5hbWUAwIQ9AAp4cE5ld1NMYW5kAMCWsQIADnhwVXBncmFkZUluZnJhAJBOAAd4cE1lcmdlAMCEPQAJeHBPbmJvYXJkAMCEPQAGeHBIZWFsAJBOAQlsZXZlbEJ5WFABAnhwCQBrAwUMeHBMZXZlbFNjYWxlCQBsBgUCeHAABAUPeHBMZXZlbFJlY2lwUG93AAQABAUERE9XTgUGU0NBTEU4AQltYXhIZWFsdGgBBWxldmVsCQBkAgBkBQVsZXZlbAEHbGV2ZWxVcAIJY3VyckxldmVsBW5ld1hQBAhuZXdMZXZlbAkBCWxldmVsQnlYUAEFBW5ld1hQCQDMCAIFCG5ld0xldmVsCQDMCAIJAGgCBRJudW1Qb2ludHNPbkxldmVsVXAJAGUCBQhuZXdMZXZlbAUJY3VyckxldmVsBQNuaWwBDGdldER1Y2tTdGF0cwQPc3Rha2luZ0NvbnRyYWN0C2R1Y2tBc3NldElkCmJ1ZmZFZmZlY3QKZm9yY2VCdWZmcwQFY2hhcnMJALUJAgkBC3ZhbHVlT3JFbHNlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJAQxrZXlEdWNrQ2hhcnMBBQtkdWNrQXNzZXRJZAIJMF8wXzBfMF8wAgFfBANsdmwJAQt2YWx1ZU9yRWxzZQIJAJoIAgUPc3Rha2luZ0NvbnRyYWN0CQEMa2V5RHVja0xldmVsAQULZHVja0Fzc2V0SWQAAAQGaGVhbHRoCQELdmFsdWVPckVsc2UCCQCaCAIFD3N0YWtpbmdDb250cmFjdAkBDWtleUR1Y2tIZWFsdGgBBQtkdWNrQXNzZXRJZAkBCW1heEhlYWx0aAEFA2x2bAQKc3RhdGVCdWZmcwkAtQkCCQELdmFsdWVPckVsc2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBDGtleUR1Y2tCdWZmcwEFC2R1Y2tBc3NldElkAgkwXzBfMF8wXzACAV8JAM4IAgkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFY2hhcnMFDGNoYXJTdHJlbmd0aAkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFY2hhcnMFDGNoYXJBY2N1cmFjeQkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFY2hhcnMFDWNoYXJJbnRlbGxlY3QJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBWNoYXJzBQ1jaGFyRW5kdXJhbmNlCQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVjaGFycwUNY2hhckRleHRlcml0eQkAzAgCBQNsdmwJAMwIAgUGaGVhbHRoBQNuaWwDBQpmb3JjZUJ1ZmZzCQDMCAIFCmJ1ZmZFZmZlY3QJAMwIAgUKYnVmZkVmZmVjdAkAzAgCBQpidWZmRWZmZWN0CQDMCAIFCmJ1ZmZFZmZlY3QJAMwIAgUKYnVmZkVmZmVjdAUDbmlsCQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQpzdGF0ZUJ1ZmZzBQxjaGFyU3RyZW5ndGgJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCnN0YXRlQnVmZnMFDGNoYXJBY2N1cmFjeQkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKc3RhdGVCdWZmcwUNY2hhckludGVsbGVjdAkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKc3RhdGVCdWZmcwUNY2hhckVuZHVyYW5jZQkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKc3RhdGVCdWZmcwUNY2hhckRleHRlcml0eQUDbmlsAAlEQVlNSUxMSVMAgLiZKQEUa2V5TGFzdEFyYlRpbWVCeVVzZXIBBGFkZHIJAKwCAgIQbGFzdEFyYlRpbWVVc2VyXwUEYWRkcgEaa2V5QWNyZXNTdGFrZWRBbW91bnRCeVVzZXIBBGFkZHIJAKwCAgIYYWNyZXNTdGFrZWRBbW91bnRCeVVzZXJfBQRhZGRyAA1pbmN1YmF0b3JBZGRyBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwCQERQGV4dHJOYXRpdmUoMTA2MikBAiMzUEVrdFZ1eDJSaGNoU042M0RzRG80YjRtejRRcXpLU2VEdgMJAAACAQFUBQckbWF0Y2gwBQR0aGlzCQACAQINVW5rbm93biBjaGFpbgALYnJlZWRlckFkZHIEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDAJARFAZXh0ck5hdGl2ZSgxMDYyKQECIzNQRFZ1VTQ1SDdFaDVkbXROYm5STlJTdEd3VUxBN05ZNkhiAwkAAAIBAVQFByRtYXRjaDAFBHRoaXMJAAIBAg1Vbmtub3duIGNoYWluABFGSVZFTUlOVVRFU01JTExJUwDgpxIADFJFTkFNSU5HQ09TVADAlrECAApNQVhOQU1FTEVOADIAFUluZnJhVXBncmFkZUNvc3RTVXNkdACAreIEAAxFWFBNQVRFUklBTFMEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDAApt2C7asHAwkAAAIBAVQFByRtYXRjaDAAqqeBswkJAAIBAg1Vbmtub3duIGNoYWluAAdFWFBVU0RUBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwAIDlmncDCQAAAgEBVAUHJG1hdGNoMACA5Zp3CQACAQINVW5rbm93biBjaGFpbgAOUk9CT19EVUNLX1VTRFQAoI0GAAxTX0NPU1RfQUNSRVMAgPKLqAkABUZJVkVYCQC2AgEABQAHVFdFTlRZWAkAtgIBABQACFRXRU5UWTJYCQC2AgEJAGgCABQAFAAIVFdFTlRZM1gJALYCAQkAaAIJAGgCABQAFAAUAAhUV0VOVFk0WAkAtgIBCQBoAgkAaAIJAGgCABQAFAAUABQACFRXRU5UWTVYCQC2AgEJAGgCCQBoAgkAaAIJAGgCABQAFAAUABQAFAAPUFJFU0FMRU5VTUxBTkRTAPQDARJrZXlOZXh0RnJlZUxhbmROdW0AAgtuZXh0TGFuZE51bQEaa2V5TGFuZEN1c3RvbU5hbWVUb0Fzc2V0SWQBBG5hbWUJAKwCAgIEbGNuXwUEbmFtZQEQa2V5TGFuZFRvQXNzZXRJZAEHbGFuZE51bQkArAICAgNsYV8FB2xhbmROdW0BHmtleUluZnJhTGV2ZWxCeUFzc2V0SWRBbmRPd25lcgIHYXNzZXRJZAlvd25lckFkZHIJAKwCAgkArAICCQCsAgICBWlsYW9fBQdhc3NldElkAgFfBQlvd25lckFkZHIBEWtleUxhbmROdW1Ub093bmVyAQdsYW5kTnVtCQCsAgICA2xvXwUHbGFuZE51bQEaa2V5RHVja0N1c3RvbU5hbWVUb0Fzc2V0SWQBBG5hbWUJAKwCAgIRZHVja0J5Q3VzdG9tTmFtZV8FBG5hbWUBFmtleUN1c3RvbU5hbWVUb0FkZHJlc3MBBG5hbWUJAKwCAgIUYWNjb3VudEJ5Q3VzdG9tTmFtZV8FBG5hbWUBCWtleU9sZGllcwACCm9sZGllc0xpc3QBD2tleU5leHRSb2JvRHVjawACDG5leHRSb2JvRHVjawALY2xhaW1Nb2RlV2gAAAANY2xhaW1Nb2RlRHVjawABABNjbGFpbU1vZGVXaFRoZW5EdWNrAAIACGZsSGVhbHRoAAAAC2ZsVGltZXN0YW1wAAUAB2ZsQm9udXMABgALZmxQcm9kc1VzZWQABwAIcmxIZWFsdGgAAAALcmxQcm9kc1VzZWQAAQAGcmxUeXBlAAAACHJsTGFzdFR4AAIAC3JsVGltZXN0YW1wAAMBB25mdE5hbWUCB2xhbmROdW0IbGFuZFNpemUJAKwCAgkArAICBQpMQU5EUFJFRklYBQdsYW5kTnVtBQhsYW5kU2l6ZQEIdG9Wb2x1bWUCBmFtb3VudAdwa2dTaXplBARwa2dzAwkAZwIFBmFtb3VudAAACQBpAgkAZQIJAGQCBQZhbW91bnQFB3BrZ1NpemUAAQUHcGtnU2l6ZQkBAS0BCQBpAgkAZQIJAGQCCQEBLQEFBmFtb3VudAUHcGtnU2l6ZQABBQdwa2dTaXplCQBoAgUEcGtncwUFTVVMVDgBE2Rpc3RyaWJ1dGVCeVdlaWdodHMCBXRvdGFsB3dlaWdodHMEA3N1bQkAZAIJAGQCCQBkAgkAZAIJAGQCCQCRAwIFB3dlaWdodHMAAAkAkQMCBQd3ZWlnaHRzAAEJAJEDAgUHd2VpZ2h0cwACCQCRAwIFB3dlaWdodHMAAwkAkQMCBQd3ZWlnaHRzAAQJAJEDAgUHd2VpZ2h0cwAFAwkAZwIAAAUDc3VtCQACAQIQWmVybyB3ZWlnaHRzIHN1bQQFbm9ybTYJAGsDBQV0b3RhbAUFTVVMVDYFA3N1bQoBCm5vcm1hbGl6ZXICA2FjYwRlbGVtCQDNCAIFA2FjYwkAawMFBGVsZW0FBW5vcm02BQVNVUxUNgoAAiRsBQd3ZWlnaHRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQpub3JtYWxpemVyAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGARJnZXROZWVkZWRNYXRlcmlhbHMBBXRvdGFsBAVwcm9wcwkAtQkCCQEFdmFsdWUBCQCiCAEJARFrZXlSZXNQcm9wb3J0aW9ucwACAV8DCQECIT0CCQCQAwEFBXByb3BzBQZOVU1SRVMJAAIBAhZXcm9uZyBwcm9wb3J0aW9ucyBkYXRhBAFyCQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwcm9wcwAACQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwcm9wcwABCQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwcm9wcwACCQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwcm9wcwADCQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwcm9wcwAECQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwcm9wcwAFBQNuaWwJARNkaXN0cmlidXRlQnlXZWlnaHRzAgUFdG90YWwFAXIBEXN1YnRyYWN0TWF0ZXJpYWxzAwxzaG91bGRVc2VNYXQDaGFzCXRvdGFsTmVlZAQEbmVlZAkBEmdldE5lZWRlZE1hdGVyaWFscwEFCXRvdGFsTmVlZAoBCnN1YnRyYWN0b3ICA2FjYwNpZHgEBnJlc3VsdAkAZQIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQNoYXMFA2lkeAkAkQMCBQRuZWVkBQNpZHgDCQBmAgAABQZyZXN1bHQJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIYTm90IGVub3VnaCBtYXRlcmlhbCBpZHg9CQCkAwEFA2lkeAILLCB5b3UgaGF2ZSAJAJEDAgUDaGFzBQNpZHgCCywgYnV0IG5lZWQgCQCkAwEJAJEDAgUEbmVlZAUDaWR4CQDNCAIFA2FjYwkApAMBBQZyZXN1bHQDBQxzaG91bGRVc2VNYXQKAAIkbAUFSVRFUjYKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCnN1YnRyYWN0b3ICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYFA2hhcwERc3VidHJhY3RFcXVpcG1lbnQCBW9sZEVxBXBVc2VkAwkAAAIFBXBVc2VkAgAJAJUKAwUFb2xkRXEHBwoBB3N1YlVzZWQCA2FjYwZpZHhBbXQEBXBhcnRzCQC1CQIFBmlkeEFtdAIBLAMJAQIhPQIJAJADAQUFcGFydHMAAgkAAgECKEluY29ycmVjdCBmb3JtYXQsIHNob3VsZCBiZSBpbmRleCxhbW91bnQEA2lkeAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBXBhcnRzAAADAwkAZgIAAAUDaWR4BgkAZwIFA2lkeAkAkAMBBRBwcm9kdWN0aW9uTWF0cml4CQACAQITVW5rbm93biBwcm9kdWN0IGlkeAQDYW10CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcGFydHMAAQQHZXFQYXJ0cwkAtQkCCAUDYWNjAl8xCQCsAgIJAJEDAgUFcGFydHMAAAIBOgMJAQIhPQIJAJADAQUHZXFQYXJ0cwACCQACAQkArAICCQCsAgICD1lvdSBkb24ndCBoYXZlIAkAkQMCBQlwcm9kVHlwZXMFA2lkeAIJIGVxdWlwcGVkBAN0bXAJAJEDAgUHZXFQYXJ0cwABBAZudW1MZW4DCQEHaXNEaWdpdAEJAK8CAgkAsAICBQN0bXAAAQABAAIAAQQEY3VycgkBDXBhcnNlSW50VmFsdWUBCQCvAgIFA3RtcAUGbnVtTGVuBAR0YWlsCQCwAgIFA3RtcAUGbnVtTGVuBAZuZXdBbXQDCQBnAgUEY3VycgUDYW10CQBlAgUEY3VycgUDYW10CQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgICDVlvdSBlcXVpcHBlZCAJAKQDAQUEY3VycgIEIG9mIAkAkQMCBQlwcm9kVHlwZXMFA2lkeAITLCBidXQgdHJpZWQgdG8gdXNlIAkApAMBBQNhbXQJAJUKAwkArAICCQCsAgIJAKwCAgkArAICCQCRAwIFB2VxUGFydHMAAAkAkQMCBQVwYXJ0cwAAAgE6CQCkAwEFBm5ld0FtdAUEdGFpbAMIBQNhY2MCXzIGAwMJAGcCBQNpZHgABgkAZwIACAUDaWR4BwkAAAIFBm5ld0FtdAAABwMIBQNhY2MCXzMGAwMJAGcCBQNpZHgAAwkAZwIABQUDaWR4BwkAZgIFA2FtdAAABwoAAiRsCQC1CQIFBXBVc2VkAgFfCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlQoDBQVvbGRFcQcHCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQdzdWJVc2VkAgUCJGEJAJED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CQACAQIrUHJvZHVjdCBpZHggc2hvdWxkIGJlIDIgZGlnaXRzLCB6ZXJvIHBhZGRlZAQKcHJvZHVjdElkeAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBXBhcnRzAAAEBWNvdW50CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcGFydHMAAQMDCQBmAgAABQpwcm9kdWN0SWR4BgkAZwIFCnByb2R1Y3RJZHgJAJADAQUQcHJvZHVjdGlvbk1hdHJpeAkAAgECE1Vua25vd24gcHJvZHVjdCBpZHgDCQBmAgAABQVjb3VudAkAAgECF0NvdW50IGNhbid0IGJlIG5lZ2F0aXZlAwkAZgIFBWNvdW50BQ1NQVhQUk9ESU5TTE9UCQACAQkArAICCQCsAgIJAKwCAgIUQ2FuJ3QgcHV0IG1vcmUgdGhhbiAJAKQDAQUNTUFYUFJPRElOU0xPVAIEIG9mIAkAkQMCBQlwcm9kVHlwZXMFCnByb2R1Y3RJZHgDCQAAAgUFY291bnQAAAkAlAoCBQVwTGlzdAcEBGhlYWQJAMkBAgUFcExpc3QJAGgCAAgFCnByb2R1Y3RJZHgEBGN1cnIJALEJAQkAyQECCQDKAQIFBXBMaXN0CQBoAgAIBQpwcm9kdWN0SWR4AAgEBHRhaWwJAMoBAgUFcExpc3QJAGgCAAgJAGQCBQpwcm9kdWN0SWR4AAEEBnJlY2lwZQkAtQkCCQCRAwIFEHByb2R1Y3Rpb25NYXRyaXgFCnByb2R1Y3RJZHgCAV8DAwkBASEBBQppc1Bvc2l0aXZlCQBmAgUFY291bnQFBGN1cnIHCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgICCVlvdSBoYXZlIAkApAMBBQRjdXJyAgQgb2YgCQCRAwIFCXByb2RUeXBlcwUKcHJvZHVjdElkeAITLCBidXQgdHJpZWQgdG8gdXNlIAkApAMBBQVjb3VudAQJaXNCaWdJdGVtAwMJAQEhAQUKaXNQb3NpdGl2ZQkBFWNoZWNrU3RhdFJlcXVpcmVtZW50cwIFCWR1Y2tTdGF0cwkAtQkCCQCRAwIFBnJlY2lwZQUQcklkeFJlcXVpcmVtZW50cwIBLAcEBmNvbXBhdAkAkQMCBQZyZWNpcGUFCXJJZHhTbG90cwMJAAACBQZjb21wYXQCAAkAAgECF0l0ZW0gY2Fubm90IGJlIGVxdWlwcGVkBAFjCQENcGFyc2VJbnRWYWx1ZQEFBmNvbXBhdAQEY1NlZwkAaQIFAWMAZAMJAQIhPQIFB3NlZ21lbnQFBGNTZWcJAAIBAhRTZWdtZW50IGluY29tcGF0aWJsZQQIY01haW5BdXgJAGkCCQBqAgUBYwBkAAoDCQECIT0CBQdtYWluQXV4BQhjTWFpbkF1eAkAAgECEVNsb3QgaW5jb21wYXRpYmxlBAljTnVtU2xvdHMJAGoCBQFjAAoDAwkBAiE9AgUEc2xvdAAACQBmAgUJY051bVNsb3RzAAEHCQACAQIeQmlnIGl0ZW1zIHNob3VsZCBvY2N1cHkgc2xvdCAwCQBmAgUJY051bVNsb3RzAAEHCQCUCgIJAMsBAgkAywECBQRoZWFkCQCaAwEJAGQCBQRjdXJyAwUKaXNQb3NpdGl2ZQUFY291bnQJAQEtAQUFY291bnQFBHRhaWwFCWlzQmlnSXRlbQELc2xvdHNHcm91cEIGAWcEYnBJbgppc1Bvc2l0aXZlB3NlZ21lbnQHbWFpbkF1eAVzdGF0cwMJAQIhPQIFAWcCAAQFc2xvdHMJALUJAgUBZwIBLAMJAGYCCQCQAwEFBXNsb3RzBQhNQVhTTE9UUwkAAgECEldyb25nIHNsb3RzIGZvcm1hdAQCczAJAJEDAgUFc2xvdHMAAAQCczEDCQBmAgkAkAMBBQVzbG90cwABCQCRAwIFBXNsb3RzAAECAAMDCQAAAgUCczACAAkAAAIFAnMxAgAHBQRicEluBAV0bXBTMAMJAQIhPQIFAnMwAgAJAQhhZGRQcm9kQgcFAnMwBQRicEluBQppc1Bvc2l0aXZlBQdzZWdtZW50BQdtYWluQXV4AAAFBXN0YXRzCQCUCgIFBGJwSW4HAwkBAiE9AgUCczECAAMIBQV0bXBTMAJfMgkAAgECHkJpZyBpdGVtIGFscmVhZHkgb2NjdXBpZXMgc2xvdAgJAQhhZGRQcm9kQgcFAnMxCAUFdG1wUzACXzEFCmlzUG9zaXRpdmUFB3NlZ21lbnQFB21haW5BdXgAAQUFc3RhdHMCXzEIBQV0bXBTMAJfMQUEYnBJbgEGZHJlc3NCBAdzZWdMaXN0BnBCeXRlcwppc1Bvc2l0aXZlBXN0YXRzCgEHc2VnbWVudAIDYWNjA3Nl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AWkEBnJlc3VsdAkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQhwcm9wTGlzdAUBaQkAaAIJAGgCBQRzaWduCQCRAwIFDXRlcnJhaW5Db3VudHMFAWkFDWxhbmRTaXplSW5kZXgDCQBmAgAABQZyZXN1bHQJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICFlBhbmljISBQaWVjZXMgb2YgdHlwZT0JAKQDAQUBaQIHLCBzaWduPQkApAMBBQRzaWduAhMsIHRlcnJhaW5Db3VudHNbaV09CQCkAwEJAJEDAgUNdGVycmFpbkNvdW50cwUBaQIQLCBsYW5kU2l6ZUluZGV4PQkApAMBBQ1sYW5kU2l6ZUluZGV4CQDNCAIFA2FjYwkApAMBBQZyZXN1bHQKAAIkbAUFSVRFUjYKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBB3VwZGF0ZXICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYBEXVwZGF0ZVByb3BvcnRpb25zAw10ZXJyYWluQ291bnRzDWxhbmRTaXplSW5kZXgEc2lnbgQIcHJvcExpc3QJALUJAgkBC3ZhbHVlT3JFbHNlAgkAoggBCQERa2V5UmVzUHJvcG9ydGlvbnMAAgswXzBfMF8wXzBfMAIBXwkAuQkCCQEZdXBkYXRlUHJvcG9ydGlvbnNJbnRlcm5hbAQFCHByb3BMaXN0BQ10ZXJyYWluQ291bnRzBQ1sYW5kU2l6ZUluZGV4BQRzaWduAgFfAQ1jb3VudFRlcnJhaW5zAQh0ZXJyYWlucwkAzAgCCQBlAgkAkAMBCQC1CQIFCHRlcnJhaW5zAgFBAAEJAMwIAgkAZQIJAJADAQkAtQkCBQh0ZXJyYWlucwIBQgABCQDMCAIJAGUCCQCQAwEJALUJAgUIdGVycmFpbnMCAUMAAQkAzAgCCQBlAgkAkAMBCQC1CQIFCHRlcnJhaW5zAgFEAAEJAMwIAgkAZQIJAJADAQkAtQkCBQh0ZXJyYWlucwIBRQABCQDMCAIJAGUCCQCQAwEJALUJAgUIdGVycmFpbnMCAUYAAQUDbmlsAQZhZGRSZXMFCmN1cnJlbnRSZXMNdGVycmFpbkNvdW50cwlkZWx0YVRpbWUNbGFuZFNpemVJbmRleBdkYWlseUJ5UGllY2VXaXRoQm9udXNlcwoBBWFkZGVyAgNhY2MBaQQJcmVzT2ZUeXBlCQBoAgkAaAIJAGsDBQlkZWx0YVRpbWUFF2RhaWx5QnlQaWVjZVdpdGhCb251c2VzBQlEQVlNSUxMSVMJAJEDAgUNdGVycmFpbkNvdW50cwUBaQUNbGFuZFNpemVJbmRleAkAzQgCBQNhY2MJAKQDAQkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQpjdXJyZW50UmVzBQFpBQlyZXNPZlR5cGUEAXIKAAIkbAUFSVRFUjYKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBBWFkZGVyAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGCQC5CQIFAXICAV8BD3ZpcnRDbGFpbUFkZFJlcwUKY3VycmVudFJlcw10ZXJyYWluQ291bnRzCWRlbHRhVGltZQ1sYW5kU2l6ZUluZGV4F2RhaWx5QnlQaWVjZVdpdGhCb251c2VzCgEFYWRkZXICA2FjYwFpBAlyZXNPZlR5cGUJAGgCCQBoAgkAawMFCWRlbHRhVGltZQUXZGFpbHlCeVBpZWNlV2l0aEJvbnVzZXMFCURBWU1JTExJUwkAkQMCBQ10ZXJyYWluQ291bnRzBQFpBQ1sYW5kU2l6ZUluZGV4BAx0b3RhbFJlc1R5cGUJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKY3VycmVudFJlcwUBaQUJcmVzT2ZUeXBlCQCUCgIJAM0IAggFA2FjYwJfMQUMdG90YWxSZXNUeXBlCQBkAggFA2FjYwJfMgUMdG90YWxSZXNUeXBlCgACJGwFBUlURVI2CgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCBQNuaWwAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEFYWRkZXICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYBCXZpcnRDbGFpbQQNdGVycmFpbkNvdW50cwlkZWx0YVRpbWUNbGFuZFNpemVJbmRleBdkYWlseUJ5UGllY2VXaXRoQm9udXNlcwoBBWFkZGVyAgNhY2MMdGVycmFpbkNvdW50BAlyZXNPZlR5cGUJAGgCCQBoAgkAawMFCWRlbHRhVGltZQUXZGFpbHlCeVBpZWNlV2l0aEJvbnVzZXMFCURBWU1JTExJUwUMdGVycmFpbkNvdW50BQ1sYW5kU2l6ZUluZGV4CQCUCgIJAM0IAggFA2FjYwJfMQUJcmVzT2ZUeXBlCQBkAggFA2FjYwJfMgUJcmVzT2ZUeXBlCgACJGwFDXRlcnJhaW5Db3VudHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCUCgIFA25pbAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQVhZGRlcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgENZGlzdHJpYnV0ZVJlcwQMY3VycmVudFdoUmVzDmN1cnJlbnRQYWNrUmVzCnJlc1RvQ2xhaW0Ld2hTcGFjZUxlZnQEDnJlc0xpc3RUb0NsYWltCAUKcmVzVG9DbGFpbQJfMQQMcmVzQW1Ub0NsYWltCAUKcmVzVG9DbGFpbQJfMgMJAAACBQxyZXNBbVRvQ2xhaW0AAAkAlAoCCQC5CQIFDGN1cnJlbnRXaFJlcwIBXwkAuQkCBQ5jdXJyZW50UGFja1JlcwIBXwMJAGcCBQt3aFNwYWNlTGVmdAUMcmVzQW1Ub0NsYWltCgEIYWRkTGlzdHMCA2FjYwFpCQDNCAIFA2FjYwkApAMBCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDGN1cnJlbnRXaFJlcwUBaQkAkQMCBQ5yZXNMaXN0VG9DbGFpbQUBaQQBcgoAAiRsBQVJVEVSNgoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEIYWRkTGlzdHMCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYJAJQKAgkAuQkCBQFyAgFfCQC5CQIFDmN1cnJlbnRQYWNrUmVzAgFfCgEMYWRkUGFydExpc3RzAgNhY2MBaQQGd2hQYXJ0CQBrAwkAkQMCBQ5yZXNMaXN0VG9DbGFpbQUBaQULd2hTcGFjZUxlZnQFDHJlc0FtVG9DbGFpbQkAlAoCCQDNCAIIBQNhY2MCXzEJAKQDAQkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQxjdXJyZW50V2hSZXMFAWkFBndoUGFydAkAzQgCCAUDYWNjAl8yCQCkAwEJAGUCCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDmN1cnJlbnRQYWNrUmVzBQFpCQCRAwIFDnJlc0xpc3RUb0NsYWltBQFpBQZ3aFBhcnQEAXIKAAIkbAUFSVRFUjYKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCUCgIFA25pbAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQxhZGRQYXJ0TGlzdHMCBQIkYQkAkQMC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XzBfMF8wXzBfMDowXzBfMF8wXzBfMDoCAToJAMwIAgkApAMBCQELdmFsdWVPckVsc2UCCQC2CQEJAJEDAgUBcAUKYnBJZHhMZXZlbAAACQDMCAIDCQAAAgkAkAMBCQC1CQIJAJEDAgUBcAUIYnBJZHhSZXMCAV8FBk5VTVJFUwkAkQMCBQFwBQhicElkeFJlcwILMF8wXzBfMF8wXzAJAMwIAgMJAAACCQCQAwEJALUJAgkAkQMCBQFwBQhicElkeE1hdAIBXwUGTlVNUkVTCQCRAwIFAXAFCGJwSWR4TWF0AgswXzBfMF8wXzBfMAkAzAgCCQCRAwIFAXAFCWJwSWR4UHJvZAUDbmlsARdnZXRXYXJlaG91c2VUb3RhbFZvbHVtZQEJdm9sUHJlZml4BAVwYXJ0cwkAtQkCBQl2b2xQcmVmaXgCAV8JAGgCCQBoAgUMV0hNVUxUSVBMSUVSCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBXBhcnRzAAEAAQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBXBhcnRzAAABF2dldFdhcmVob3VzZU9jY3VwaWVkVm9sAQljdXJyZW50V2gEBWdvb2RzCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhQcm9kCgEJc3VtUmVzTWF0AgNhY2MEaXRlbQkAZAIFA2FjYwkBDXBhcnNlSW50VmFsdWUBBQRpdGVtCgEHc3VtUHJvZAIDYWNjBGl0ZW0EA2lkeAgFA2FjYwJfMQQEcGtncwkAaQIJAGUCCQBkAgkBDXBhcnNlSW50VmFsdWUBBQRpdGVtBQ5QUk9EVUNUUEtHU0laRQABBQ5QUk9EVUNUUEtHU0laRQkAlAoCCQBkAgUDaWR4AAEJAGQCCAUDYWNjAl8yCQBoAgUEcGtncwUFTVVMVDgECHdoUmVzVm9sCgACJGwJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4UmVzAgFfCgACJHMJAJADAQUCJGwKAAUkYWNjMAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQlzdW1SZXNNYXQCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJ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a2VkBQNvY2MJAMwIAgkApAMBBQd3aFRvdGFsBQNuaWwCAV8JAMwIAgkAkQMCBQJ3aAULd2hJZHhMZXZlbHMJAMwIAgMJAAACCQCQAwEJALUJAgkAkQMCBQJ3aAUId2hJZHhSZXMCAV8FBk5VTVJFUwkAkQMCBQJ3aAUId2hJZHhSZXMCCzBfMF8wXzBfMF8wCQDMCAIDCQAAAgkAkAMBCQC1CQIJAJEDAgUCd2gFCHdoSWR4TWF0AgFfBQZOVU1SRVMJAJEDAgUCd2gFCHdoSWR4TWF0AgswXzBfMF8wXzBfMAkAzAgCCQCRAwIFAndoBQl3aElkeFByb2QJAMwIAgUGd2hMb2Z0BQNuaWwBFWdldFdhcmVob3VzZVNwYWNlTGVmdAEJY3VycmVudFdoBAtvY2N1cGllZFZvbAkBF2dldFdhcmVob3VzZU9jY3VwaWVkVm9sAQUJY3VycmVudFdoBA9jdXJyV2hMb2NrZWRWb2wJAQ1wYXJzZUludFZhbHVlAQkAkQMCCQC1CQIJAJEDAgUJY3VycmVudFdoBQl3aElkeExPRlQCAV8FCXZvbExvY2tlZAkAZQIJAGUCCQEXZ2V0V2FyZWhvdXNlVG90YWxWb2x1bWUBCQCRAwIFCWN1cnJlbnRXaAULd2hJZHhMZXZlbHMFC29jY3VwaWVkVm9sBQ9jdXJyV2hMb2NrZWRWb2wBCW1vdmVTdHVmZgMKY2FyZ29QYXJ0cwljdXJyZW50V2gLY3VycmVudFBhY2sDCQECIT0CCQCQAwEFCmNhcmdvUGFydHMAAwkAAgECNGNhcmdvTGlzdFN0ciBzaG91bGQgY29udGFpbiBleGFjdGx5IDIgJzonIHNlcGFyYXRvcnMECHJlc1BhcnRzCQC1CQIJAJEDAgUKY2FyZ29QYXJ0cwAAAgFfBAhtYXRQYXJ0cwkAtQkCCQCRAwIFCmNhcmdvUGFydHMAAQIBXwQJcHJvZFBhcnRzAwkAAAIJAJEDAgUKY2FyZ29QYXJ0cwACAgAFA25pbAkAvAkCCQCRAwIFCmNhcmdvUGFydHMAAgIBXwMJAQIhPQIJAJADAQUIcmVzUGFydHMFBk5VTVJFUwkAAgECIEFsbCA2IHJlc291cmNlcyBzaG91bGQgYmUgcGFzc2VkAwkBAiE9AgkAkAMBBQhtYXRQYXJ0cwUGTlVNUkVTCQACAQIgQWxsIDYgbWF0ZXJpYWxzIHNob3VsZCBiZSBwYXNzZWQEC3doU3BhY2VMZWZ0CQEVZ2V0V2FyZWhvdXNlU3BhY2VMZWZ0AQUJY3VycmVudFdoBAljdXJyV2hSZXMJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4UmVzAgFfBAljdXJyV2hNYXQJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4TWF0AgFfBApjdXJyV2hQcm9kAwkAAAIJAJEDAgUJY3VycmVudFdoBQl3aElkeFByb2QCAAUDbmlsCQC8CQIJAJEDAgUJY3VycmVudFdoBQl3aElkeFByb2QCAV8EDmN1cnJlbnRQYWNrUmVzCQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzAgFfBA5jdXJyZW50UGFja01hdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAIBXwQPY3VycmVudFBhY2tQcm9kAwkAAAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAIABQNuaWwJALwJAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kAgFfCgEDbXZSAgNhY2MEaXRlbQQBaQgFA2FjYwJfMQQCYW0JAQ1wYXJzZUludFZhbHVlAQUEaXRlbQQDd2hyCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUJY3VycldoUmVzBQFpBANicHIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ5jdXJyZW50UGFja1JlcwUBaQMJAAACBQJhbQAACQCWCgQJAGQCBQFpAAEJAM0IAggFA2FjYwJfMgkAkQMCBQljdXJyV2hSZXMFAWkJAM0IAggFA2FjYwJfMwkAkQMCBQ5jdXJyZW50UGFja1JlcwUBaQgFA2FjYwJfNAMJAGYCBQJhbQAAAwkAZgIFAmFtBQNicHIJAAIBCQCsAgIJAKwCAgkArAICCQCsAgICEEF0dGVtcHQgdG8gdGFrZSAFBGl0ZW0CGSBmcm9tIGJhY2twYWNrLCBidXQgb25seSAJAKQDAQUDYnByAgogYXZhaWxhYmxlCQCWCgQJAGQCBQFpAAEJAM0IAggFA2FjYwJfMgkApAMBCQBkAgUDd2hyBQJhbQkAzQgCCAUDYWNjAl8zCQCkAwEJ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UwABBAdsYW5kTnVtCQCkAwEFB2ZyZWVOdW0EDGNvbnRpbmVudElkeAkAoAMBCQC7AgIFBmJpZ051bQUFRklWRVgECHRlcnJhaW5zCQELZ2VuVGVycmFpbnMCBQZiaWdOdW0FDGNvbnRpbmVudElkeAQJY29udGluZW50CQCRAwIFCmNvbnRpbmVudHMFDGNvbnRpbmVudElkeAQFaXNzdWUJAMIIBQkBB25mdE5hbWUCBQdsYW5kTnVtAgFTCQC5CQIJAMwIAgUHbGFuZE51bQkAzAgCAgFTCQDMCAIFCHRlcnJhaW5zCQDMCAIFCWNvbnRpbmVudAUDbmlsAgFfAAEAAAcEB2Fzc2V0SWQJALgIAQUFaXNzdWUEAmlkCQDYBAEFB2Fzc2V0SWQJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBEmtleU5leHRGcmVlTGFuZE51bQAJAGQCBQdmcmVlTnVtAAEJAMwIAgUFaXNzdWUJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEGtleUxhbmRUb0Fzc2V0SWQBBQdsYW5kTnVtBQJpZAkAzAgCCQELU3RyaW5nRW50cnkCCQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQUCaWQFCHVzZXJBZGRyCQDMCAIJAQtTdHJpbmdFbnRyeQIJARFrZXlMYW5kTnVtVG9Pd25lcgEFB2xhbmROdW0FCHVzZXJBZGRyCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEFAmlkAAAJAMwIAgkBDEludGVnZXJFbnRyeQIJAR5rZXlJbmZyYUxldmVsQnlBc3NldElkQW5kT3duZXICBQJpZAUIdXNlckFkZHIAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQZjYWxsZXIAAQUHYXNzZXRJZAUDbmlsCQCUCgIFAmlkBQljb250aW5lbnQBDGZsaWdodENvbW1vbgMIdXNlckFkZHIHbWVzc2FnZQNzaWcDCQEBIQEJAMQTAwUHbWVzc2FnZQUDc2lnBQNwdWIJAAIBAhhzaWduYXR1cmUgZG9lcyBub3QgbWF0Y2gEBXBhcnRzCQC8CQIJALAJAQUHbWVzc2FnZQIBOwQJZmxpZ2h0TG9nCQC8CQIJAJEDAgUFcGFydHMAAAIBfAQCaHAJALUJAgkAkQMCBQlmbGlnaHRMb2cFCGZsSGVhbHRoAgFfBAVjdXJIUAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmhwAAAEBW5ld0hQCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCaHAAAQQLbmV3TG9jVHhWZXIJALUJAgkAkQMCBQVwYXJ0cwABAgE6BAtuZXdMb2NhdGlvbgkAkQMCBQtuZXdMb2NUeFZlcgAABAR0aW1lCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUJZmxpZ2h0TG9nBQtmbFRpbWVzdGFtcAMDCQBmAgUEdGltZQkAZAIIBQlsYXN0QmxvY2sJdGltZXN0YW1wBRFGSVZFTUlOVVRFU01JTExJUwYJAGYCCQBlAggFCWxhc3RCbG9jawl0aW1lc3RhbXAFEUZJVkVNSU5VVEVTTUlMTElTBQR0aW1lCQACAQkArAICCQCsAgIJAKwCAgIcc2lnbmF0dXJlIG91dGRhdGVkOiBsb2dUaW1lPQkApAMBBQR0aW1lAgksIGJjVGltZT0JAKQDAQgFCWxhc3RCbG9jawl0aW1lc3RhbXAECXR4RnJvbU1zZwkAkQMCBQtuZXdMb2NUeFZlcgABBAZsYXN0VHgJAQt2YWx1ZU9yRWxzZQIJAKIIAQkBEWtleUxhc3RUeElkQnlVc2VyAQUIdXNlckFkZHICAAMJAQIhPQIFBmxhc3RUeAUJdHhGcm9tTXNnCQACAQkArAICCQCsAgIJAKwCAgIeVHggaWRzIGRvbid0IG1hdGNoISBJbiBzdGF0ZTogBQZsYXN0VHgCCiwgaW4gbXNnOiAFCXR4RnJvbU1zZwQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQh1c2VyQWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQJa2V5SGVhbHRoCQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkBAVtYXhIUAkBCW1heEhlYWx0aAEJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBDGtleUR1Y2tMZXZlbAEFC2R1Y2tBc3NldElkAAAEDG9sZEZyb21TdGF0ZQkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlrZXlIZWFsdGgFBW1heEhQAwkBAiE9AgUMb2xkRnJvbVN0YXRlBQVjdXJIUAkAAgEJAKwCAgkArAICCQCsAgICCm9sZEhlYWx0aD0JAKQDAQUMb2xkRnJvbVN0YXRlAi8gZnJvbSBzdGF0ZSBkb2VzIG5vdCBtYXRjaCBvbmUgZnJvbSBmbGlnaHQgbG9nPQkApAMBBQVjdXJIUAMJAGcCAAAFBWN1ckhQCQACAQIeWW91IGNhbid0IGZseSB3aXRoIHplcm8gaGVhbHRoAwkBASEBCQEXY2FuV2VhckN1cnJlbnRFcXVpcG1lbnQBBQtkdWNrQXNzZXRJZAkAAgECFkVxdWlwbWVudCBpbmNvbXBhdGlibGUEBWJvbnVzAwkAZgIJAJADAQUJZmxpZ2h0TG9nBQdmbEJvbnVzCQCRAwIFCWZsaWdodExvZwUHZmxCb251cwIABAhwcm9kVXNlZAMJAGYCCQCQAwEFCWZsaWdodExvZwULZmxQcm9kc1VzZWQJAJEDAgUJZmxpZ2h0TG9nBQtmbFByb2RzVXNlZAIABApzZW50QW1vdW50AwMJAGYCBQVuZXdIUAAACQAAAgUFYm9udXMCASQHCQEFYXNJbnQBCQD8BwQFDHJlc3RDb250cmFjdAINc2VuZFVzZHRQcml6ZQkAzAgCBQh1c2VyQWRkcgUDbmlsBQNuaWwAAAkAlwoFBQVuZXdIUAULZHVja0Fzc2V0SWQFCnNlbnRBbW91bnQFC25ld0xvY2F0aW9uBQhwcm9kVXNlZAEMYXBwbHlCb251c2VzAgtsYW5kQXNzZXRJZAZwaWVjZXMECmluZnJhTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAAABAlhcnRQaWVjZXMJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBIGtleUxhbmRBcnRTdGF0dXNCeVR5cGVBbmRBc3NldElkAgUKQVJUUFJFU0FMRQULbGFuZEFzc2V0SWQAAAQEYWRkNgkAaQIFCmluZnJhTGV2ZWwABgQEYWRkNwkAaQIFCmluZnJhTGV2ZWwABwkAZAIJAGQCBQ9EQUlMWVJFU0JZUElFQ0UJAGsDBQ9EQUlMWVJFU0JZUElFQ0UJAGQCCQBkAgUKaW5mcmFMZXZlbAUEYWRkNgkAaAIAAgUEYWRkNwAFCQBrAwUPREFJTFlSRVNCWVBJRUNFBQlhcnRQaWVjZXMJAGgCBQZwaWVjZXMABQEUY2hlY2tDbGFpbUNvbmRpdGlvbnMDBGFkZHIJY2xhaW1Nb2RlDWxhbmRBc3NldElkSW4EDSR0MDM0MTUzMzQ2OTIDCQAAAgUJY2xhaW1Nb2RlBQtjbGFpbU1vZGVXaAkAlAoCBQ1sYW5kQXNzZXRJZEluCQELdmFsdWVPckVsc2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFBGFkZHICAAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkBAtjdXJMb2NhdGlvbgkBC3ZhbHVlT3JFbHNlAgkAoggBCQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQFD0RFRkFVTFRMT0NBVElPTgQDbG9jCQC1CQIJAQV2YWx1ZQEFC2N1ckxvY2F0aW9uAgFfAwkBAiE9AgkAkQMCBQNsb2MFCmxvY0lkeFR5cGUCAUwJAAIBCQCsAgIJAKwCAgIWRHVjayBsb2NhdGlvbiB0eXBlIGlzIAkAkQMCBQNsb2MFCmxvY0lkeFR5cGUCESwgYnV0IHNob3VsZCBiZSBMCQCUCgIJAJEDAgUDbG9jBQhsb2NJZHhJZAULZHVja0Fzc2V0SWQEC2xhbmRBc3NldElkCAUNJHQwMzQxNTMzNDY5MgJfMQQGZHVja0lkCAUNJHQwMzQxNTMzNDY5MgJfMgQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQtsYW5kQXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAQJc2F2ZWRUaW1lCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ8IAQUHdGltZUtleQkArAICCQCsAgICBUxhbmQgCAUFYXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQEBW93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFC2xhbmRBc3NldElkCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDCBpcyBvcnBoYW5lZAMJAQIhPQIFBW93bmVyBQRhZGRyCQACAQkArAICBQpMQU5EUFJFRklYAg0gaXMgbm90IHlvdXJzBAFkCQC1CQIIBQVhc3NldAtkZXNjcmlwdGlvbgIBXwkAlgoEBQZkdWNrSWQFC2xhbmRBc3NldElkBQFkBQlzYXZlZFRpbWUBEGNsYWltUmVzSW50ZXJuYWwEBGFkZHIGYW1vdW50CWNsYWltTW9kZQ1sYW5kQXNzZXRJZEluAwkAZgIAAAUGYW1vdW50CQACAQIPTmVnYXRpdmUgYW1vdW50BAFjCQEUY2hlY2tDbGFpbUNvbmRpdGlvbnMDBQRhZGRyBQljbGFpbU1vZGUFDWxhbmRBc3NldElkSW4ECGxhbmRTaXplCQCRAwIIBQFjAl8zBQtyZWNMYW5kU2l6ZQQNdGVycmFpbkNvdW50cwkBDWNvdW50VGVycmFpbnMBCQCRAwIIBQFjAl8zBQtyZWNUZXJyYWlucwQJZGVsdGFUaW1lCQBlAgkBCWZpbmFsVGltZQAIBQFjAl80AwkAZgIAAAUJZGVsdGFUaW1lCQACAQkArAICCQCsAgIJAKwCAgImU2F2ZWQgdGltZXN0YW1wIGlzIGluIGZ1dHVyZSwgc2F2ZWQgPSAJAKQDAQgFAWMCXzQCCiwgZmluYWwgPSAJAKQDAQkBCWZpbmFsVGltZQAEBnBpZWNlcwkBD251bVBpZWNlc0J5U2l6ZQEFCGxhbmRTaXplBBZkYWlseVByb2R1Y3Rpb25CeVBpZWNlCQEMYXBwbHlCb251c2VzAggFAWMCXzIFBnBpZWNlcwQIYXZhaWxSZXMJAGsDBQlkZWx0YVRpbWUJAGgCBRZkYWlseVByb2R1Y3Rpb25CeVBpZWNlBQZwaWVjZXMFCURBWU1JTExJUwMJAGYCBQZhbW91bnQFCGF2YWlsUmVzCQACAQkArAICCQCsAgIJAKwCAgIiTm90IGVub3VnaCByZXNvdXJjZXMsIGF2YWlsYWJsZSA9IAkApAMBBQhhdmFpbFJlcwIOLCByZXF1ZXN0ZWQgPSAJAKQDAQUGYW1vdW50BAxuZXdEZWx0YVRpbWUJAGsDCQBlAgUIYXZhaWxSZXMFBmFtb3VudAUJREFZTUlMTElTCQBoAgUWZGFpbHlQcm9kdWN0aW9uQnlQaWVjZQUGcGllY2VzBAxuZXdUaW1lc3RhbXAJAGUCCQEJZmluYWxUaW1lAAUMbmV3RGVsdGFUaW1lBAlsYW5kSW5kZXgJAGkCBQZwaWVjZXMFBVNTSVpFBApyZXNUb0NsYWltCQEJdmlydENsYWltBAUNdGVycmFpbkNvdW50cwkAZQIFCWRlbHRhVGltZQUMbmV3RGVsdGFUaW1lBQlsYW5kSW5kZXgFFmRhaWx5UHJvZHVjdGlvbkJ5UGllY2UEBXdoS2V5CQESa2V5V2FyZWhvdXNlQnlMYW5kAQgFAWMCXzIECmluZnJhTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBCAUBYwJfMgAABAljdXJyZW50V2gJAQxnZXRXYXJlaG91c2UDBQV3aEtleQUJbGFuZEluZGV4BQppbmZyYUxldmVsBARsb2Z0CQC1CQIJAJEDAgUJY3VycmVudFdoBQl3aElkeExPRlQCAV8EC3doU3BhY2VMZWZ0CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAUHdm9sRnJlZQMDCQAAAgUJY2xhaW1Nb2RlBQtjbGFpbU1vZGVXaAkAZgIFBmFtb3VudAULd2hTcGFjZUxlZnQHCQACAQkArAICCQCsAgICBU9ubHkgCQCkAwEFC3doU3BhY2VMZWZ0Ahggc3BhY2UgbGVmdCBpbiB3YXJlaG91c2UEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBCAUBYwJfMQQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BA5jdXJyZW50UGFja1JlcwkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwIBXwQMY3VycmVudFdoUmVzCQC1CQIJAJEDAgUJY3VycmVudFdoBQh3aElkeFJlcwIBXwQNJHQwMzcwNjIzNzkzMwMJAAACBQljbGFpbU1vZGUFC2NsYWltTW9kZVdoCQCWCgQJAQZhZGRSZXMFBQxjdXJyZW50V2hSZXMFDXRlcnJhaW5Db3VudHMJAGUCBQlkZWx0YVRpbWUFDG5ld0RlbHRhVGltZQUJbGFuZEluZGV4BRZkYWlseVByb2R1Y3Rpb25CeVBpZWNlCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQt2b2xPY2N1cGllZAgFCnJlc1RvQ2xhaW0CXzIJAGUCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAUHdm9sRnJlZQgFCnJlc1RvQ2xhaW0CXzIDCQAAAgUJY2xhaW1Nb2RlBQ1jbGFpbU1vZGVEdWNrCQCWCgQJAJEDAgUJY3VycmVudFdoBQh3aElkeFJlcwkBBmFkZFJlcwUFDmN1cnJlbnRQYWNrUmVzBQ10ZXJyYWluQ291bnRzCQBlAgUJZGVsdGFUaW1lBQxuZXdEZWx0YVRpbWUFCWxhbmRJbmRleAUWZGFpbHlQcm9kdWN0aW9uQnlQaWVjZQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFC3ZvbE9jY3VwaWVkCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAUHdm9sRnJlZQQFZGlzdHIJAQ1kaXN0cmlidXRlUmVzBAUMY3VycmVudFdoUmVzBQ5jdXJyZW50UGFja1JlcwUKcmVzVG9DbGFpbQULd2hTcGFjZUxlZnQEBHdoQW0JAJcDAQkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAUHdm9sRnJlZQkAzAgCCAUKcmVzVG9DbGFpbQJfMgUDbmlsCQCWCgQIBQVkaXN0cgJfMQgFBWRpc3RyAl8yCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFC3ZvbE9jY3VwaWVkBQR3aEFtCQBlAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFB3ZvbEZyZWUFBHdoQW0EBXdoUmVzCAUNJHQwMzcwNjIzNzkzMwJfMQQFYnBSZXMIBQ0kdDAzNzA2MjM3OTMzAl8yBAVsb2Z0TwgFDSR0MDM3MDYyMzc5MzMCXzMEBWxvZnRGCAUNJHQwMzcwNjIzNzkzMwJfNAkAlwoFCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEIBQFjAl8yBQxuZXdUaW1lc3RhbXAJAMwIAgkBDEludGVnZXJFbnRyeQIJASJrZXlTdGFrZWRUaW1lQnlUeXBlQXNzZXRJZEFuZE93bmVyAwUKTEFORFBSRUZJWAgFAWMCXzIFBGFkZHIFDG5ld1RpbWVzdGFtcAUDbmlsBQVicEtleQkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIFBWJwUmVzCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0CQDMCAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAUDbmlsBQV3aEtleQkAzAgCCQCRAwIFCWN1cnJlbnRXaAULd2hJZHhMZXZlbHMJAMwIAgUFd2hSZXMJAMwIAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4TWF0CQDMCAIJAJEDAgUJY3VycmVudFdoBQl3aElkeFByb2QJAMwIAgkAuQkCCQDMCAIJAJEDAgUEbG9mdAUJdm9sTG9ja2VkCQDMCAIJAKQDAQUFbG9mdE8JAMwIAgkApAMBBQVsb2Z0RgkAzAgCCQCRAwIFBGxvZnQFCHZvbFRvdGFsBQNuaWwCAV8FA25pbAEIY2xhaW1BbGwEBGFkZHILbGFuZEFzc2V0SWQGcGllY2VzCWNsYWltTW9kZQQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAQJc2F2ZWRUaW1lCQEFdmFsdWUBCQCfCAEFB3RpbWVLZXkECGF2YWlsUmVzCQBoAgkAawMJAGUCCQEJZmluYWxUaW1lAAUJc2F2ZWRUaW1lCQEMYXBwbHlCb251c2VzAgULbGFuZEFzc2V0SWQFBnBpZWNlcwUJREFZTUlMTElTBQZwaWVjZXMJARBjbGFpbVJlc0ludGVybmFsBAUEYWRkcgUIYXZhaWxSZXMFCWNsYWltTW9kZQULbGFuZEFzc2V0SWQBDXVwSW5mcmFDb21tb24EDHNob3VsZFVzZU1hdAZjYWxsZXINcGF5bWVudEFtb3VudAtsYW5kQXNzZXRJZAQEYWRkcgkApQgBBQZjYWxsZXIEAWMJARRjaGVja0NsYWltQ29uZGl0aW9ucwMFBGFkZHIFE2NsYWltTW9kZVdoVGhlbkR1Y2sFC2xhbmRBc3NldElkBAZwaWVjZXMJAQ9udW1QaWVjZXNCeVNpemUBCQCRAwIIBQFjAl8zBQtyZWNMYW5kU2l6ZQQIaW5mcmFLZXkJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQgFAWMCXzIECGN1ckxldmVsCQELdmFsdWVPckVsc2UCCQCfCAEFCGluZnJhS2V5AAADAwkBASEBBRhLU19BTExPV19CSUdfSU5GUkFfTUVSR0UJAGcCBQhjdXJMZXZlbAADBwkAAgECJkN1cnJlbnRseSBtYXggaW5mcmFzdHJ1Y3R1cmUgbGV2ZWwgPSAzBAhtYXhJbmZyYQkAZAIJAGkCCQEEc3FydAQFBnBpZWNlcwAAAAAFBERPV04ABQACBAhuZXdMZXZlbAkAZAIFCGN1ckxldmVsAAEDAwUYS1NfQUxMT1dfQklHX0lORlJBX01FUkdFCQBmAgUIbmV3TGV2ZWwFCG1heEluZnJhBwkAAgEJAKwCAgIlQ3VycmVudGx5IG1heCBpbmZyYXN0cnVjdHVyZSBsZXZlbCA9IAkApAMBBQhtYXhJbmZyYQQEY29zdAkAawMFFUluZnJhVXBncmFkZUNvc3RTVXNkdAkAaAIFBnBpZWNlcwUIbmV3TGV2ZWwFBVNTSVpFAwMJAQEhAQUMc2hvdWxkVXNlTWF0CQECIT0CBQ1wYXltZW50QW1vdW50BQRjb3N0BwkAAgEJAKwCAgIbUGF5bWVudCBhdHRhY2hlZCBzaG91bGQgYmUgCQCkAwEFBGNvc3QEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBCAUBYwJfMQQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BAVtTGlzdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAIBXwQHbWF0VXNlZAkAawMFEUluZnJhVXBncmFkZUNvc3RTCQBoAgUGcGllY2VzBQhuZXdMZXZlbAUFU1NJWkUEBm5ld01hdAkAuQkCCQERc3VidHJhY3RNYXRlcmlhbHMDBQxzaG91bGRVc2VNYXQFBW1MaXN0BQdtYXRVc2VkAgFfBAtjbGFpbVJlc3VsdAkBCGNsYWltQWxsBAUEYWRkcggFAWMCXzIFBnBpZWNlcwUTY2xhaW1Nb2RlV2hUaGVuRHVjawQGd2hEYXRhCAULY2xhaW1SZXN1bHQCXzUEBm9sZFZvbAkBF2dldFdhcmVob3VzZVRvdGFsVm9sdW1lAQkAkQMCBQZ3aERhdGEFC3doSWR4TGV2ZWxzBApuZXdWb2xEYXRhCQC5CQIJAMwIAgkAkQMCCQC1CQIJAJEDAgUGd2hEYXRhBQt3aElkeExldmVscwIBXwAACQDMCAIJAKQDAQUIbmV3TGV2ZWwFA25pbAIBXwQGbmV3Vm9sCQEXZ2V0V2FyZWhvdXNlVG90YWxWb2x1bWUBBQpuZXdWb2xEYXRhBARsb2Z0CQC1CQIJAJEDAgUGd2hEYXRhBQl3aElkeExPRlQCAV8ECm5ld0xvZnRTdHIJALkJAgkAzAgCCQCRAwIFBGxvZnQFCXZvbExvY2tlZAkAzAgCCQCRAwIFBGxvZnQFC3ZvbE9jY3VwaWVkCQDMCAIJAKQDAQkAZQIJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAUHdm9sRnJlZQUGbmV3Vm9sBQZvbGRWb2wJAMwIAgkApAMBBQZuZXdWb2wFA25pbAIBXwkAlQoDCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIFCGluZnJhS2V5BQhuZXdMZXZlbAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBHmtleUluZnJhTGV2ZWxCeUFzc2V0SWRBbmRPd25lcgIIBQFjAl8yBQRhZGRyBQhuZXdMZXZlbAkAzAgCCQELU3RyaW5nRW50cnkCBQVicEtleQkAuQkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAkQMCCAULY2xhaW1SZXN1bHQCXzMFCGJwSWR4UmVzCQDMCAIFBm5ld01hdAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QFA25pbAIBOgkAzAgCCQELU3RyaW5nRW50cnkCCAULY2xhaW1SZXN1bHQCXzQJALkJAgkAzAgCBQpuZXdWb2xEYXRhCQDMCAIJAJEDAgUGd2hEYXRhBQh3aElkeFJlcwkAzAgCCQCRAwIFBndoRGF0YQUId2hJZHhNYXQJAMwIAgkAkQMCBQZ3aERhdGEFCXdoSWR4UHJvZAkAzAgCBQpuZXdMb2Z0U3RyBQNuaWwCAToFA25pbAgFC2NsYWltUmVzdWx0Al8xBQhuZXdMZXZlbAUHbWF0VXNlZAETdXBkYXRlU3RhdHNJbnRlcm5hbAQGbHZsS2V5BXhwS2V5CXBvaW50c0tleQdkZWx0YVhQBAJ4cAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQV4cEtleQAABAVuZXdYUAkAZAIFAnhwBQdkZWx0YVhQBAlsdmxQb2ludHMJAQdsZXZlbFVwAgkBC3ZhbHVlT3JFbHNlAgkAnwgBBQZsdmxLZXkAAAUFbmV3WFAJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUGbHZsS2V5CQCRAwIFCWx2bFBvaW50cwAACQDMCAIJAQxJbnRlZ2VyRW50cnkCBQV4cEtleQUFbmV3WFAJAMwIAgkBDEludGVnZXJFbnRyeQIFCXBvaW50c0tleQkAZAIJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJcG9pbnRzS2V5AAAJAJEDAgUJbHZsUG9pbnRzAAEFA25pbAUFbmV3WFABF3VwZGF0ZUR1Y2tTdGF0c0ludGVybmFsAgtkdWNrQXNzZXRJZAdkZWx0YVhQBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFC2R1Y2tBc3NldElkBARhZGRyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBEGtleUR1Y2tJZFRvT3duZXIBBQtkdWNrQXNzZXRJZAkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDAwMFE0tTX0FMTE9XX1JPQk9fRFVDS1MJAAACCAUFYXNzZXQGaXNzdWVyBQR0aGlzBwkBCGNvbnRhaW5zAggFBWFzc2V0BG5hbWUFC1JPQk9fUFJFRklYBwkBE3VwZGF0ZVN0YXRzSW50ZXJuYWwECQEMa2V5VXNlckxldmVsAQUEYWRkcgkBCWtleVVzZXJYUAEFBGFkZHIJARFrZXlVc2VyRnJlZVBvaW50cwEFBGFkZHIFB2RlbHRhWFAJARN1cGRhdGVTdGF0c0ludGVybmFsBAkBDGtleUR1Y2tMZXZlbAEFC2R1Y2tBc3NldElkCQEJa2V5RHVja1hQAQULZHVja0Fzc2V0SWQJARFrZXlEdWNrRnJlZVBvaW50cwEFC2R1Y2tBc3NldElkBQdkZWx0YVhQARZ1cGRhdGVBY2NTdGF0c0ludGVybmFsAgRhZGRyB2RlbHRhWFAJARN1cGRhdGVTdGF0c0ludGVybmFsBAkBDGtleVVzZXJMZXZlbAEFBGFkZHIJAQlrZXlVc2VyWFABBQRhZGRyCQERa2V5VXNlckZyZWVQb2ludHMBBQRhZGRyBQdkZWx0YVhQARJhY3RpdmF0ZU9uYm9hcmRBcnQBBGFkZHIEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQIcmVmQnlLZXkJAQ9rZXlBZGRyZXNzUmVmQnkBBQRhZGRyBAVyZWZCeQkAoggBBQhyZWZCeUtleQMJAQEhAQkBCWlzRGVmaW5lZAEFBXJlZkJ5CQACAQIpWW91IGFyZSBub3QgZWxpZ2libGUgZm9yIE9OQk9BUkQgYXJ0aWZhY3QEBmFydEtleQkBHGtleU9uYm9hcmRBcnREdWNrQWN0aXZhdGVkQnkBBQRhZGRyBAdhcnREdWNrCQCiCAEFBmFydEtleQMJAQlpc0RlZmluZWQBBQdhcnREdWNrCQACAQkArAICAi9Zb3UgYWxyZWFkeSB1c2VkIHlvdXIgT05CT0FSRCBhcnRpZmFjdCBvbiBkdWNrIAkBBXZhbHVlAQUHYXJ0RHVjawQQZHVja0FjdGl2YXRvcktleQkBHGtleU9uYm9hcmRBcnRBY3RpdmF0ZWRPbkR1Y2sBBQtkdWNrQXNzZXRJZAQNZHVja0FjdGl2YXRvcgkAoggBBRBkdWNrQWN0aXZhdG9yS2V5AwkBCWlzRGVmaW5lZAEFDWR1Y2tBY3RpdmF0b3IJAAIBCQCsAgIJAKwCAgkArAICAglUaGUgZHVjayAFC2R1Y2tBc3NldElkAjQgYWxyZWFkeSBnb3QgcG9pbnRzIGZyb20gT05CT0FSRCBhcnRpZmFjdCBmcm9tIHVzZXIgCQEFdmFsdWUBBQ1kdWNrQWN0aXZhdG9yCQDOCAIJAMwIAgkBC1N0cmluZ0VudHJ5AgUGYXJ0S2V5BQtkdWNrQXNzZXRJZAkAzAgCCQELU3RyaW5nRW50cnkCBRBkdWNrQWN0aXZhdG9yS2V5BQRhZGRyBQNuaWwICQEXdXBkYXRlRHVja1N0YXRzSW50ZXJuYWwCBQtkdWNrQXNzZXRJZAUJeHBPbmJvYXJkAl8xARJhY3RpdmF0ZVByZXNhbGVBcnQCBGFkZHINbGFuZEFzc2V0SWRJbgQBYwkBFGNoZWNrQ2xhaW1Db25kaXRpb25zAwUEYWRkcgUTY2xhaW1Nb2RlV2hUaGVuRHVjawUNbGFuZEFzc2V0SWRJbgQLbGFuZEFzc2V0SWQIBQFjAl8yBAZwaWVjZXMJAQ9udW1QaWVjZXNCeVNpemUBCQCRAwIIBQFjAl8zBQtyZWNMYW5kU2l6ZQQNYWN0aXZhdGlvbktleQkBIGtleUxhbmRBcnRTdGF0dXNCeVR5cGVBbmRBc3NldElkAgUKQVJUUFJFU0FMRQULbGFuZEFzc2V0SWQDCQBmAgkBC3ZhbHVlT3JFbHNlAgkAnwgBBQ1hY3RpdmF0aW9uS2V5AAAAAAkAAgECJVByZXNhbGUgYXJ0aWZhY3QgaXMgYWxyZWFkeSBhY3RpdmF0ZWQDCQBmAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIIBQFjAl8zBQpyZWNMYW5kTnVtBQ9QUkVTQUxFTlVNTEFORFMJAAIBCQCsAgIJAKwCAgkArAICBQpMQU5EUFJFRklYAgEgBQtsYW5kQXNzZXRJZAIlIGlzIG5vdCBlbGlnaWJsZSBmb3IgcHJlc2FsZSBhcnRpZmFjdAQLY2xhaW1SZXN1bHQJAQhjbGFpbUFsbAQFBGFkZHIFC2xhbmRBc3NldElkBQZwaWVjZXMFE2NsYWltTW9kZVdoVGhlbkR1Y2sJAM0IAgkAzQgCCQDNCAIIBQtjbGFpbVJlc3VsdAJfMQkBDEludGVnZXJFbnRyeQIFDWFjdGl2YXRpb25LZXkFBnBpZWNlcwkBC1N0cmluZ0VudHJ5AggFC2NsYWltUmVzdWx0Al8yCQC5CQIIBQtjbGFpbVJlc3VsdAJfMwIBOgkBC1N0cmluZ0VudHJ5AggFC2NsYWltUmVzdWx0Al80CQC5CQIIBQtjbGFpbVJlc3VsdAJfNQIBOgEPY2hlY2tUb3VybmFtZW50AQtkdWNrQXNzZXRJZAQGbGFzdElkCQELdmFsdWVPckVsc2UCCQCaCAIFEnRvdXJuYW1lbnRDb250cmFjdAUNbGFzdFRvdXJJZEtleQAABAtjdXJMb2NhdGlvbgkAtQkCCQELdmFsdWVPckVsc2UCCQCiCAEJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAUPREVGQVVMVExPQ0FUSU9OAgFfBANub3cIBQlsYXN0QmxvY2sJdGltZXN0YW1wBAV0RGF0YQkBC2dldFRvdXJEYXRhAgUSdG91cm5hbWVudENvbnRyYWN0BQZsYXN0SWQEBnN0YXRpYwkAkQMCBQV0RGF0YQUJaWR4U3RhdGljBAdkeW5hbWljCQCRAwIFBXREYXRhBQppZHhEeW5hbWljAwkBAiE9AgkAkQMCBQtjdXJMb2NhdGlvbgUKbG9jSWR4VHlwZQIBVAcDAwMJAAACCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgULY3VyTG9jYXRpb24FD2xvY0lkeENvbnRpbmVudAUGbGFzdElkCQAAAgkAkQMCBQdkeW5hbWljBQ50RHluYW1pY1N0YXR1cwIKSU5QUk9HUkVTUwcJAGYCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUGc3RhdGljBQp0U3RhdGljRW5kBQNub3cHCQACAQIqWW91ciBkdWNrIGlzIHRha2luZyBwYXJ0IGluIHRoZSB0b3VybmFtZW50CQEJYXNCb29sZWFuAQkA/AcEBQR0aGlzAhZleGl0VG91cm5hbWVudEludGVybmFsCQDMCAIFC2R1Y2tBc3NldElkBQNuaWwFA25pbAENbWVyZ2VJbnRlcm5hbAYLbmV3TGFuZFNpemUIbmV3TGV2ZWwHZm9ybXVsYQRhZGRyDGxhbmRBc3NldElkcwduZWVkTWF0BAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFBGFkZHICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQDCQEPY2hlY2tUb3VybmFtZW50AQULZHVja0Fzc2V0SWQJAAIBAh1tZXJnZUludGVybmFsX2NoZWNrVG91cm5hbWVudAoBCmNoZWNrTWVyZ2UCA2FjYwtsYW5kQXNzZXRJZAQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQtsYW5kQXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAQJc2F2ZWRUaW1lCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ8IAQUHdGltZUtleQkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAQFb3duZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQULbGFuZEFzc2V0SWQJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwkBAiE9AgUFb3duZXIFBGFkZHIJAAIBCQCsAgIFCkxBTkRQUkVGSVgCDSBpcyBub3QgeW91cnMEAWQJALUJAggFBWFzc2V0C2Rlc2NyaXB0aW9uAgFfBAljb250aW5lbnQJAJEDAgUBZAUMcmVjQ29udGluZW50AwMJAQIhPQIIBQNhY2MCXzMCAAkBAiE9AggFA2FjYwJfMwUJY29udGluZW50BwkAAgECLkxhbmRzIHNob3VsZCBiZSBvbiB0aGUgc2FtZSBjb250aW5lbnQgdG8gbWVyZ2UECGxhbmRTaXplCQCRAwIFAWQFC3JlY0xhbmRTaXplBAdzaXplc0luCAUDYWNjAl8xBAFpCQETdmFsdWVPckVycm9yTWVzc2FnZQIJALMJAgUHc2l6ZXNJbgUIbGFuZFNpemUCJ1lvdSBoYXZlbid0IHBhc3NlZCBhbGwgdGhlIGxhbmRzIG5lZWRlZAQIc2l6ZXNPdXQJAKwCAgkArwICBQdzaXplc0luBQFpCQCwAgIFB3NpemVzSW4JAGQCBQFpAAEEBnBpZWNlcwkBD251bVBpZWNlc0J5U2l6ZQEFCGxhbmRTaXplBARhcnRzCQBkAggFA2FjYwJfMgkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEga2V5TGFuZEFydFN0YXR1c0J5VHlwZUFuZEFzc2V0SWQCBQpBUlRQUkVTQUxFBQtsYW5kQXNzZXRJZAAABAppbmZyYUxldmVsCQELdmFsdWVPckVsc2UCCQCfCAEJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQULbGFuZEFzc2V0SWQAAAQIcmVxTGV2ZWwEByRtYXRjaDAFCGxhbmRTaXplAwkAAAICAVMFByRtYXRjaDAAAwMJAAACAgFNBQckbWF0Y2gwAAQDCQAAAgIBTAUHJG1hdGNoMAAFAwkAAAICAlhMBQckbWF0Y2gwAAYJAAIBAhpPbmx5IFMsIE0sIEwsIFhMIGNhbiBtZXJnZQMJAQIhPQIFCmluZnJhTGV2ZWwFCHJlcUxldmVsCQACAQIiQWxsIGxhbmRzIHNob3VsZCBiZSBtYXhlZCB0byBtZXJnZQQHbGFuZE51bQkAkQMCBQFkBQpyZWNMYW5kTnVtBA10ZXJyYWluQ291bnRzCQENY291bnRUZXJyYWlucwEJAJEDAgUBZAULcmVjVGVycmFpbnMECWRlbHRhVGltZQkAZQIIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQlzYXZlZFRpbWUDCQBmAgAABQlkZWx0YVRpbWUJAAIBCQCsAgIJAKwCAgkArAICAiZTYXZlZCB0aW1lc3RhbXAgaXMgaW4gZnV0dXJlLCBzYXZlZCA9IAkApAMBBQlzYXZlZFRpbWUCDCwgY3VycmVudCA9IAkApAMBCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQWZGFpbHlQcm9kdWN0aW9uQnlQaWVjZQkBDGFwcGx5Qm9udXNlcwIFC2xhbmRBc3NldElkBQZwaWVjZXMECWxhbmRJbmRleAkAaQIFBnBpZWNlcwUFU1NJWkUEBWJwUmVzCQEGYWRkUmVzBQkAtQkCCAUDYWNjAl80AgFfBQ10ZXJyYWluQ291bnRzBQlkZWx0YVRpbWUFCWxhbmRJbmRleAUWZGFpbHlQcm9kdWN0aW9uQnlQaWVjZQQFcHJvcHMJARl1cGRhdGVQcm9wb3J0aW9uc0ludGVybmFsBAgFA2FjYwJfNgUNdGVycmFpbkNvdW50cwUJbGFuZEluZGV4AP///////////wEEBmNQcm9wcwkBGXVwZGF0ZVByb3BvcnRpb25zSW50ZXJuYWwECAUDYWNjA18xMAUNdGVycmFpbkNvdW50cwUJbGFuZEluZGV4AP///////////wEEC3N1bVRlcnJhaW5zCQEZdXBkYXRlUHJvcG9ydGlvbnNJbnRlcm5hbAQIBQNhY2MCXzkFDXRlcnJhaW5Db3VudHMFCWxhbmRJbmRleAABBAVsYW5kcwgFA2FjYwJfNwQDaWR4CQDPCAIFBWxhbmRzBQtsYW5kQXNzZXRJZAMJAQEhAQkBCWlzRGVmaW5lZAEFA2lkeAkAAgEJAKwCAgIgWW91ciBzdGFrZWQgbGFuZHMgZG9uJ3QgY29udGFpbiAFC2xhbmRBc3NldElkBAljdXN0b21LZXkJARprZXlMYW5kQXNzZXRJZFRvQ3VzdG9tTmFtZQEFC2xhbmRBc3NldElkBApjdXN0b21OYW1lCQELdmFsdWVPckVsc2UCCQCiCAEFCWN1c3RvbUtleQIACQCcCgoFCHNpemVzT3V0BQRhcnRzBQljb250aW5lbnQFBWJwUmVzCQDOCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCAUDYWNjAl81CQELRGVsZXRlRW50cnkBCQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkCQELRGVsZXRlRW50cnkBCQEia2V5U3Rha2VkVGltZUJ5VHlwZUFzc2V0SWRBbmRPd25lcgMFCkxBTkRQUkVGSVgFC2xhbmRBc3NldElkBQRhZGRyCQELRGVsZXRlRW50cnkBCQEQa2V5TGFuZFRvQXNzZXRJZAEFB2xhbmROdW0JAQtEZWxldGVFbnRyeQEJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQtsYW5kQXNzZXRJZAkBC0RlbGV0ZUVudHJ5AQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAkBC0RlbGV0ZUVudHJ5AQkBHmtleUluZnJhTGV2ZWxCeUFzc2V0SWRBbmRPd25lcgIFC2xhbmRBc3NldElkBQRhZGRyCQELRGVsZXRlRW50cnkBCQEga2V5TGFuZEFydFN0YXR1c0J5VHlwZUFuZEFzc2V0SWQCBQpBUlRQUkVTQUxFBQtsYW5kQXNzZXRJZAkBC0RlbGV0ZUVudHJ5AQkBEWtleUxhbmROdW1Ub093bmVyAQUHbGFuZE51bQkBC0RlbGV0ZUVudHJ5AQkBEmtleVdhcmVob3VzZUJ5TGFuZAEFC2xhbmRBc3NldElkCQELRGVsZXRlRW50cnkBBQljdXN0b21LZXkJAQRCdXJuAgkA2QQBBQtsYW5kQXNzZXRJZAABAwkBAiE9AgUKY3VzdG9tTmFtZQIACQDMCAIJAQtEZWxldGVFbnRyeQEJARprZXlMYW5kQ3VzdG9tTmFtZVRvQXNzZXRJZAEFCmN1c3RvbU5hbWUFA25pbAUDbmlsBQVwcm9wcwkA0QgCBQVsYW5kcwkBBXZhbHVlAQUDaWR4CQBkAggFA2FjYwJfOAUGcGllY2VzBQtzdW1UZXJyYWlucwUGY1Byb3BzBAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQIcHJvcExpc3QJALUJAgkBC3ZhbHVlT3JFbHNlAgkAoggBCQERa2V5UmVzUHJvcG9ydGlvbnMAAgswXzBfMF8wXzBfMAIBXwQIbGFuZHNLZXkJARVrZXlTdGFrZWRMYW5kc0J5T3duZXIBBQRhZGRyBAhsYW5kc1N0cgkAoggBBQhsYW5kc0tleQQHbGFuZHNJbgMJAQlpc0RlZmluZWQBBQhsYW5kc1N0cgkAvQkCCQEFdmFsdWUBBQhsYW5kc1N0cgIBXwUDbmlsBAVjb250MAkAkQMCCQC1CQIICQEFdmFsdWUBCQDsBwEJANkEAQkAkQMCBQxsYW5kQXNzZXRJZHMAAAtkZXNjcmlwdGlvbgIBXwUMcmVjQ29udGluZW50BAljb250UHJvcHMJALUJAgkBC3ZhbHVlT3JFbHNlAgkAoggBCQEWa2V5UmVzVHlwZXNCeUNvbnRpbmVudAEFBWNvbnQwAgswXzBfMF8wXzBfMAIBXwQBcgoAAiRsBQxsYW5kQXNzZXRJZHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCcCgoFB2Zvcm11bGEAAAIACQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwUDbmlsBQhwcm9wTGlzdAUHbGFuZHNJbgAACQC1CQICCzBfMF8wXzBfMF8wAgFfBQljb250UHJvcHMKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCmNoZWNrTWVyZ2UCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDUJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFBAljb250aW5lbnQIBQFyAl8zBAxjb250aW5lbnRJZHgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAzwgCBQpjb250aW5lbnRzBQljb250aW5lbnQJAKwCAgITVW5rbm93biBjb250aW5lbnQ6IAUJY29udGluZW50BAh0ZXJyYWlucwkBE2dlblRlcnJhaW5zRm9yTWVyZ2UCCAUBcgJfOQkAaQIJAQ9udW1QaWVjZXNCeVNpemUBBQtuZXdMYW5kU2l6ZQUFU1NJWkUEB2ZyZWVOdW0JAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBEmtleU5leHRGcmVlTGFuZE51bQAJAGQCBQ9QUkVTQUxFTlVNTEFORFMAAQQKbmV3TGFuZE51bQkApAMBBQdmcmVlTnVtBAVpc3N1ZQkAwggFCQEHbmZ0TmFtZQIFCm5ld0xhbmROdW0FC25ld0xhbmRTaXplCQC5CQIJAMwIAgUKbmV3TGFuZE51bQkAzAgCBQtuZXdMYW5kU2l6ZQkAzAgCBQh0ZXJyYWlucwkAzAgCBQljb250aW5lbnQFA25pbAIBXwABAAAHBAdhc3NldElkCQC4CAEFBWlzc3VlBA5uZXdMYW5kQXNzZXRJZAkA2AQBBQdhc3NldElkBAZuZXdNYXQJALkJAgkBEXN1YnRyYWN0TWF0ZXJpYWxzAwkAZgIFB25lZWRNYXQAAAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAIBXwUHbmVlZE1hdAIBXwQJcGllY2VzS2V5CQEWa2V5U3Rha2VkUGllY2VzQnlPd25lcgEFBGFkZHIEDHN0YWtlZFBpZWNlcwkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlwaWVjZXNLZXkAAAkAlAoCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCAUBcgJfNQMJAGYCCQCQAwEIBQFyAl83AAAJAQtTdHJpbmdFbnRyeQIFCGxhbmRzS2V5CQC7CQIIBQFyAl83AgFfCQELRGVsZXRlRW50cnkBBQhsYW5kc0tleQkBDEludGVnZXJFbnRyeQIFCXBpZWNlc0tleQMJAGYCCAUBcgJfOAUMc3Rha2VkUGllY2VzAAAJAGUCBQxzdGFrZWRQaWVjZXMIBQFyAl84CQEMSW50ZWdlckVudHJ5AgkBEmtleU5leHRGcmVlTGFuZE51bQAJAGQCBQdmcmVlTnVtAAEFBWlzc3VlCQELU3RyaW5nRW50cnkCCQEQa2V5TGFuZFRvQXNzZXRJZAEFCm5ld0xhbmROdW0FDm5ld0xhbmRBc3NldElkCQELU3RyaW5nRW50cnkCCQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQUObmV3TGFuZEFzc2V0SWQFBGFkZHIJAQtTdHJpbmdFbnRyeQIJARFrZXlMYW5kTnVtVG9Pd25lcgEFCm5ld0xhbmROdW0FBGFkZHIJAQxJbnRlZ2VyRW50cnkCCQEga2V5TGFuZEFydFN0YXR1c0J5VHlwZUFuZEFzc2V0SWQCBQpBUlRQUkVTQUxFBQ5uZXdMYW5kQXNzZXRJZAgFAXICXzIJAQxJbnRlZ2VyRW50cnkCCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEFDm5ld0xhbmRBc3NldElkBQhuZXdMZXZlbAkBDEludGVnZXJFbnRyeQIJAR5rZXlJbmZyYUxldmVsQnlBc3NldElkQW5kT3duZXICBQ5uZXdMYW5kQXNzZXRJZAUEYWRkcgUIbmV3TGV2ZWwJAQtTdHJpbmdFbnRyeQIFBWJwS2V5CQC5CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCAUBcgJfNAkAzAgCBQZuZXdNYXQJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kBQNuaWwCAToJAQtTdHJpbmdFbnRyeQIJARFrZXlSZXNQcm9wb3J0aW9ucwAJALkJAggFAXICXzYCAV8JAQtTdHJpbmdFbnRyeQIJARZrZXlSZXNUeXBlc0J5Q29udGluZW50AQUJY29udGluZW50CQC5CQIIBQFyA18xMAIBXwkBC1N0cmluZ0VudHJ5AgkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkCQC5CQIJAMwIAgUJY29udGluZW50CQDMCAICAUwJAMwIAgUObmV3TGFuZEFzc2V0SWQFA25pbAIBXwkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQUEYWRkcgABBQdhc3NldElkBQ5uZXdMYW5kQXNzZXRJZAEDczJtAgRhZGRyDGxhbmRBc3NldElkcwkBDW1lcmdlSW50ZXJuYWwGAgFNAAMCBFNTU1MFBGFkZHIFDGxhbmRBc3NldElkcwAAAQNtMmwCBGFkZHIMbGFuZEFzc2V0SWRzCQENbWVyZ2VJbnRlcm5hbAYCAUwABAIDU01NBQRhZGRyBQxsYW5kQXNzZXRJZHMJAGgCBRFJbmZyYVVwZ3JhZGVDb3N0UwAEAQRsMnhsAgRhZGRyDGxhbmRBc3NldElkcwkBDW1lcmdlSW50ZXJuYWwGAgJYTAAFAgVTU1NNTAUEYWRkcgUMbGFuZEFzc2V0SWRzCQBoAgURSW5mcmFVcGdyYWRlQ29zdFMALwEGeGwyeHhsAgRhZGRyDGxhbmRBc3NldElkcwkBDW1lcmdlSW50ZXJuYWwGAgNYWEwABgIDTFhMBQRhZGRyBQxsYW5kQXNzZXRJZHMJAGgCBRFJbmZyYVVwZ3JhZGVDb3N0UwA2AQttZXJnZUNvbW1vbgIEYWRkcgxsYW5kQXNzZXRJZHMEByRtYXRjaDAJAJADAQUMbGFuZEFzc2V0SWRzAwkAAAIABAUHJG1hdGNoMAkBA3MybQIFBGFkZHIFDGxhbmRBc3NldElkcwMJAAACAAMFByRtYXRjaDAJAQNtMmwCBQRhZGRyBQxsYW5kQXNzZXRJZHMDCQAAAgAFBQckbWF0Y2gwCQEEbDJ4bAIFBGFkZHIFDGxhbmRBc3NldElkcwMJAAACAAIFByRtYXRjaDAJAQZ4bDJ4eGwCBQRhZGRyBQxsYW5kQXNzZXRJZHMJAAIBAg1Vbmtub3duIG1lcmdlAQZwcm9sb2cBAWkDAwkBAiE9AggFAWkMb3JpZ2luQ2FsbGVyBQxyZXN0Q29udHJhY3QJAQt2YWx1ZU9yRWxzZQIJAKAIAQkBCmtleUJsb2NrZWQABwcJAAIBAh9Db250cmFjdHMgYXJlIHVuZGVyIG1haW50ZW5hbmNlCQDMCAIJAQtTdHJpbmdFbnRyeQIJARFrZXlMYXN0VHhJZEJ5VXNlcgEJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyCQDYBAEIBQFpDXRyYW5zYWN0aW9uSWQFA25pbAETdW5zdGFrZUxhbmRJbnRlcm5hbAIEYWRkcgtsYW5kQXNzZXRJZAQFd2hLZXkJARJrZXlXYXJlaG91c2VCeUxhbmQBBQtsYW5kQXNzZXRJZAQIbGFuZEluZm8JALUJAggJAQV2YWx1ZQEJAOwHAQkA2QQBBQtsYW5kQXNzZXRJZAtkZXNjcmlwdGlvbgIBXwQIbGFuZFNpemUJAJEDAgUIbGFuZEluZm8FC3JlY0xhbmRTaXplBAZwaWVjZXMJAQ9udW1QaWVjZXNCeVNpemUBBQhsYW5kU2l6ZQQKaW5mcmFMZXZlbAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEFC2xhbmRBc3NldElkAAAECWxhbmRJbmRleAkAaQIFBnBpZWNlcwUFU1NJWkUEDXRlcnJhaW5Db3VudHMJAQ1jb3VudFRlcnJhaW5zAQkAkQMCBQhsYW5kSW5mbwULcmVjVGVycmFpbnMECWN1cnJlbnRXaAkBDGdldFdhcmVob3VzZQMFBXdoS2V5BQlsYW5kSW5kZXgFCmluZnJhTGV2ZWwEDGN1cnJlbnRXaFJlcwkAtQkCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhSZXMCAV8EB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQULbGFuZEFzc2V0SWQECXNhdmVkVGltZQkBEUBleHRyTmF0aXZlKDEwNTUpAQUHdGltZUtleQQJZGVsdGFUaW1lCQBlAgkBCWZpbmFsVGltZQAFCXNhdmVkVGltZQMJAGYCAAAFCWRlbHRhVGltZQkAAgEJAKwCAgkArAICCQCsAgICJlNhdmVkIHRpbWVzdGFtcCBpcyBpbiBmdXR1cmUsIHNhdmVkID0gCQCkAwEFCXNhdmVkVGltZQIKLCBmaW5hbCA9IAkApAMBCQEJZmluYWxUaW1lAAQWZGFpbHlQcm9kdWN0aW9uQnlQaWVjZQkBDGFwcGx5Qm9udXNlcwIFC2xhbmRBc3NldElkBQZwaWVjZXMEDXJlc0FmdGVyQ2xhaW0JAQ92aXJ0Q2xhaW1BZGRSZXMFBQxjdXJyZW50V2hSZXMFDXRlcnJhaW5Db3VudHMFCWRlbHRhVGltZQUJbGFuZEluZGV4BRZkYWlseVByb2R1Y3Rpb25CeVBpZWNlBAlhcnRQaWVjZXMJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBIGtleUxhbmRBcnRTdGF0dXNCeVR5cGVBbmRBc3NldElkAgUKQVJUUFJFU0FMRQULbGFuZEFzc2V0SWQAAAQPYWNyZXNGcm9tUGllY2VzCQBkAgkAaAIFBnBpZWNlcwUFTVVMVDgJAGkCCQBoAgkAZAIJAGgCBQZwaWVjZXMFCmluZnJhTGV2ZWwFCWFydFBpZWNlcwUFTVVMVDgABQQMYWNyZXNGcm9tUmVzCQBoAgkAawMIBQ1yZXNBZnRlckNsYWltAl8yBRBSRVNPVVJDRVBSSUNFTUlOBQVNVUxUOAUVVVNEVDJBQ1JFU19NVUxUSVBMSUVSCgEGc3VtTWF0AgNhY2MEaXRlbQkAZAIFA2FjYwkBDXBhcnNlSW50VmFsdWUBBQRpdGVtBAV3aE1hdAoAAiRsCQC1CQIJAJEDAgUJY3VycmVudFdoBQh3aElkeE1hdAIBXwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEGc3VtTWF0AgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGBAxhY3Jlc0Zyb21NYXQJAGgCCQBrAwUFd2hNYXQJAGgCAAIFEFJFU09VUkNFUFJJQ0VNSU4FBU1VTFQ4BRVVU0RUMkFDUkVTX01VTFRJUExJRVIEBXByb2RzAwkAAAIJAJEDAgUJY3VycmVudFdoBQl3aElkeFByb2QCAAUDbmlsCQC8CQIJAJEDAgUJY3VycmVudFdoBQl3aElkeFByb2QCAV8KAQdzdW1Qcm9kAgNhY2MEaXRlbQQBaggFA2FjYwJfMgQLcmVjaXBlQ29lZmYJAQ1wYXJzZUludFZhbHVlAQkAkQMCCQC1CQIJAJEDAgUQcHJvZHVjdGlvbk1hdHJpeAUBagIBXwUJcklkeENvZWZmCQCUCgIJAGQCCAUDYWNjAl8xCQBoAgkAaAIJAQ1wYXJzZUludFZhbHVlAQUEaXRlbQULcmVjaXBlQ29lZmYFBU1VTFQ2CQBkAgUBagABBAZ3aFByb2QKAAIkbAUFcHJvZHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCUCgIAAAAACgEFJGYxXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQdzdW1Qcm9kAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYxXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAyNAkBBSRmMV8yAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAQNYWNyZXNGcm9tUHJvZAkAaAIJAGsDCAUGd2hQcm9kAl8xCQBoAgACBRBSRVNPVVJDRVBSSUNFTUlOBQVNVUxUOAUVVVNEVDJBQ1JFU19NVUxUSVBMSUVSCQCWCgQFD2FjcmVzRnJvbVBpZWNlcwUMYWNyZXNGcm9tUmVzBQxhY3Jlc0Zyb21NYXQFDWFjcmVzRnJvbVByb2QBE3Vuc3Rha2VEdWNrSW50ZXJuYWwCBGFkZHILZHVja0Fzc2V0SWQEBWVxS2V5CQEQa2V5RHVja0VxdWlwbWVudAEFC2R1Y2tBc3NldElkBAtjdXJyZW50U2VncwkAtQkCCQELdmFsdWVPckVsc2UCCQCiCAEFBWVxS2V5AhcsOyxfLDssXyw7LF8sOyxfLDssXyw7LAIBXwQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkECXRlbXBQcm9kQgkBBmRyZXNzQgQFC2N1cnJlbnRTZWdzCQEOcHJvZFN0clRvQnl0ZXMBCQCRAwIFC2N1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Z2VyAgNrZXkGYW1vdW50AwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIgc2F2ZUludGVnZXIgaXMgbm90IHB1YmxpYyBtZXRob2QJAMwIAgkBDEludGVnZXJFbnRyeQIFA2tleQUGYW1vdW50BQNuaWwBaQEKc2V0QmxvY2tlZAEJaXNCbG9ja2VkAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIRcGVybWlzc2lvbiBkZW5pZWQJAMwIAgkBDEJvb2xlYW5FbnRyeQIJAQprZXlCbG9ja2VkAAUJaXNCbG9ja2VkBQNuaWwBaQEJc3Rha2VMYW5kAAQNcHJvbG9nQWN0aW9ucwkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhxFeGFjdGx5IG9uZSBwYXltZW50IHJlcXVpcmVkBANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAQHYXNzZXRJZAkBBXZhbHVlAQgFA3BtdAdhc3NldElkBAdhZGRyZXNzCQClCAEIBQFpBmNhbGxlcgMJAQIhPQIIBQNwbXQGYW1vdW50AAEJAAIBCQCsAgIJAKwCAgIETkZUIAUKTEFORFBSRUZJWAIkIHRva2VuIHNob3VsZCBiZSBhdHRhY2hlZCBhcyBwYXltZW50BAVhc3NldAkBBXZhbHVlAQkA7AcBBQdhc3NldElkAwkBAiE9AggFBWFzc2V0Bmlzc3VlcgUEdGhpcwkAAgECF1Vua25vd24gaXNzdWVyIG9mIHRva2VuAwkBASEBCQEIY29udGFpbnMCCAUFYXNzZXQEbmFtZQUKTEFORFBSRUZJWAkAAgEJAKwCAgkArAICAglPbmx5IE5GVCAFCkxBTkRQUkVGSVgCFCB0b2tlbnMgYXJlIGFjY2VwdGVkBAtsYW5kTnVtU2l6ZQkAsAICCAUFYXNzZXQEbmFtZQAEBAdsYW5kTnVtAwkBCGNvbnRhaW5zAgULbGFuZE51bVNpemUCA1hYTAkAswICBQtsYW5kTnVtU2l6ZQADAwkBCGNvbnRhaW5zAgULbGFuZE51bVNpemUCAlhMCQCzAgIFC2xhbmROdW1TaXplAAIJALMCAgULbGFuZE51bVNpemUAAQMJAQEhAQkBCWlzRGVmaW5lZAEJALYJAQUHbGFuZE51bQkAAgEJAKwCAgIeQ2Fubm90IHBhcnNlIGxhbmQgbnVtYmVyIGZyb20gCAUFYXNzZXQEbmFtZQQLbGFuZEFzc2V0SWQJANgEAQUHYXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAMJAQlpc0RlZmluZWQBCQCfCAEFB3RpbWVLZXkJAAIBCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCEiBpcyBhbHJlYWR5IHN0YWtlZAQBZAkAtQkCCAUFYXNzZXQLZGVzY3JpcHRpb24CAV8EDXRlcnJhaW5Db3VudHMJAQ1jb3VudFRlcnJhaW5zAQkAkQMCBQFkBQtyZWNUZXJyYWlucwQGcGllY2VzCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCBQFkBQtyZWNMYW5kU2l6ZQQJbGFuZEluZGV4CQBpAgUGcGllY2VzBQVTU0laRQQFcHJvcHMJARF1cGRhdGVQcm9wb3J0aW9ucwMFDXRlcnJhaW5Db3VudHMFCWxhbmRJbmRleAABBAxyZXNCeUNvbnRLZXkJARZrZXlSZXNUeXBlc0J5Q29udGluZW50AQkAkQMCBQFkBQxyZWNDb250aW5lbnQECWNvbnRQcm9wcwkAtQkCCQELdmFsdWVPckVsc2UCCQCiCAEFDHJlc0J5Q29udEtleQILMF8wXzBfMF8wXzACAV8EEHVwZGF0ZWRDb250UHJvcHMJALkJAgkBGXVwZGF0ZVByb3BvcnRpb25zSW50ZXJuYWwEBQljb250UHJvcHMFDXRlcnJhaW5Db3VudHMFCWxhbmRJbmRleAABAgFfBAhsYW5kc0tleQkBFWtleVN0YWtlZExhbmRzQnlPd25lcgEFB2FkZHJlc3MECGxhbmRzU3RyCQCiCAEFCGxhbmRzS2V5BAVsYW5kcwMJAQlpc0RlZmluZWQBBQhsYW5kc1N0cgkAvQkCCQEFdmFsdWUBBQhsYW5kc1N0cgIBXwUDbmlsAwkBD2NvbnRhaW5zRWxlbWVudAIFBWxhbmRzBQtsYW5kQXNzZXRJZAkAAgEJAKwCAgIiWW91ciBzdGFrZWQgbGFuZHMgYWxyZWFkeSBjb250YWluIAULbGFuZEFzc2V0SWQDCQBnAgkAkAMBBQVsYW5kcwUYTUFYX0xBTkRTX1NUQUtFRF9CWV9VU0VSCQACAQkArAICCQCsAgICGVlvdXIgYWxyZWFkeSBzdGFrZWQgbWF4ICgJAKQDAQUYTUFYX0xBTkRTX1NUQUtFRF9CWV9VU0VSAgcpIGxhbmRzBAppbmZyYUxldmVsCQELdmFsdWVPckVsc2UCCQCfCAEJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQULbGFuZEFzc2V0SWQAAAQJcGllY2VzS2V5CQEWa2V5U3Rha2VkUGllY2VzQnlPd25lcgEFB2FkZHJlc3MECW9sZFBpZWNlcwkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlwaWVjZXNLZXkAAAQJd2xnUmVzdWx0CQD8BwQFC3dsZ0NvbnRyYWN0AhJvblN0YWtlVW5zdGFrZUxhbmQJAMwIAgUHYWRkcmVzcwUDbmlsBQNuaWwJAJQKAgkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQd0aW1lS2V5CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDBQpMQU5EUFJFRklYBQtsYW5kQXNzZXRJZAUHYWRkcmVzcwgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAMwIAgkBC1N0cmluZ0VudHJ5AgUIbGFuZHNLZXkJALsJAgkAzQgCBQVsYW5kcwULbGFuZEFzc2V0SWQCAV8JAMwIAgkBDEludGVnZXJFbnRyeQIFCXBpZWNlc0tleQkAZAIFCW9sZFBpZWNlcwUGcGllY2VzCQDMCAIJAQtTdHJpbmdFbnRyeQIJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQtsYW5kQXNzZXRJZAUHYWRkcmVzcwkAzAgCCQELU3RyaW5nRW50cnkCCQERa2V5TGFuZE51bVRvT3duZXIBBQdsYW5kTnVtBQdhZGRyZXNzCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEea2V5SW5mcmFMZXZlbEJ5QXNzZXRJZEFuZE93bmVyAgULbGFuZEFzc2V0SWQFB2FkZHJlc3MFCmluZnJhTGV2ZWwJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEWtleVJlc1Byb3BvcnRpb25zAAUFcHJvcHMJAMwIAgkBC1N0cmluZ0VudHJ5AgUMcmVzQnlDb250S2V5BRB1cGRhdGVkQ29udFByb3BzBQNuaWwFDXByb2xvZ0FjdGlvbnMFCXdsZ1Jlc3VsdAFpAQt1bnN0YWtlTGFuZAENbGFuZEFzc2V0SWRJbgQNcHJvbG9nQWN0aW9ucwkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQEYWRkcgkApQgBCAUBaQZjYWxsZXIEAWMJARRjaGVja0NsYWltQ29uZGl0aW9ucwMFBGFkZHIFDWNsYWltTW9kZUR1Y2sFDWxhbmRBc3NldElkSW4EC2xhbmRBc3NldElkCAUBYwJfMgQBZAgFAWMCXzMECGxhbmRzS2V5CQEVa2V5U3Rha2VkTGFuZHNCeU93bmVyAQUEYWRkcgQNdGVycmFpbkNvdW50cwkBDWNvdW50VGVycmFpbnMBCQCRAwIFAWQFC3JlY1RlcnJhaW5zBAZwaWVjZXMJAQ9udW1QaWVjZXNCeVNpemUBCQCRAwIFAWQFC3JlY0xhbmRTaXplBAlsYW5kSW5kZXgJAGkCBQZwaWVjZXMFBVNTSVpFBAVwcm9wcwkBEXVwZGF0ZVByb3BvcnRpb25zAwUNdGVycmFpbkNvdW50cwUJbGFuZEluZGV4AP///////////wEEDHJlc0J5Q29udEtleQkBFmtleVJlc1R5cGVzQnlDb250aW5lbnQBCQCRAwIFAWQFDHJlY0NvbnRpbmVudAQJY29udFByb3BzCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAKIIAQUMcmVzQnlDb250S2V5AgswXzBfMF8wXzBfMAIBXwQQdXBkYXRlZENvbnRQcm9wcwkAuQkCCQEZdXBkYXRlUHJvcG9ydGlvbnNJbnRlcm5hbAQFCWNvbnRQcm9wcwUNdGVycmFpbkNvdW50cwUJbGFuZEluZGV4AP///////////wECAV8EC2NsYWltUmVzdWx0CQEIY2xhaW1BbGwEBQRhZGRyBQtsYW5kQXNzZXRJZAUGcGllY2VzBQ1jbGFpbU1vZGVEdWNrBAVsYW5kcwkAvQkCCQELdmFsdWVPckVsc2UCCQCiCAEFCGxhbmRzS2V5AgACAV8EA2lkeAkAzwgCBQVsYW5kcwULbGFuZEFzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBBQNpZHgJAAIBCQCsAgICIFlvdXIgc3Rha2VkIGxhbmRzIGRvbid0IGNvbnRhaW4gBQtsYW5kQXNzZXRJZAQDbm93CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQOZ292UmVsZWFzZVRpbWUJAQt2YWx1ZU9yRWxzZQIJAJoIAgULZ292Q29udHJhY3QJARVrZXlVc2VyR3dsUmVsZWFzZVRpbWUBBQRhZGRyAAADCQBnAgUOZ292UmVsZWFzZVRpbWUFA25vdwkAAgEJAKwCAgI5WW91ciBnV0wgYXJlIHRha2luZyBwYXJ0IGluIHZvdGluZywgY2Fubm90IHVuc3Rha2UgdW50aWwgCQCkAwEFDmdvdlJlbGVhc2VUaW1lBA5hcmJSZWxlYXNlVGltZQkAZAIJAQt2YWx1ZU9yRWxzZQIJAJoIAgULd2xnQ29udHJhY3QJARRrZXlMYXN0QXJiVGltZUJ5VXNlcgEFBGFkZHIAAAUOYXJiaXRyYWdlRGVsYXkDCQBmAgUOYXJiUmVsZWFzZVRpbWUFA25vdwkAAgEJAKwCAgI/WW91ciBzdGFrZWQgbGFuZHMgdG9vayBwYXJ0IGluIGFyYml0cmFnZSwgY2Fubm90IHVuc3Rha2UgdW50aWwgCQCkAwEFDmFyYlJlbGVhc2VUaW1lBAlwaWVjZXNLZXkJARZrZXlTdGFrZWRQaWVjZXNCeU93bmVyAQUEYWRkcgQMc3Rha2VkUGllY2VzCQELdmFsdWVPckVsc2UCCQCfCAEFCXBpZWNlc0tleQAABAluZXdQaWVjZXMDCQBmAgUGcGllY2VzBQxzdGFrZWRQaWVjZXMAAAkAZQIFDHN0YWtlZFBpZWNlcwUGcGllY2VzBAl3bGdSZXN1bHQJAPwHBAULd2xnQ29udHJhY3QCEm9uU3Rha2VVbnN0YWtlTGFuZAkAzAgCBQRhZGRyBQNuaWwFA25pbAkAlAoCCQDOCAIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyAAEJANkEAQULbGFuZEFzc2V0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEia2V5U3Rha2VkVGltZUJ5VHlwZUFzc2V0SWRBbmRPd25lcgMFCkxBTkRQUkVGSVgFC2xhbmRBc3NldElkBQRhZGRyCQDMCAIJAQtTdHJpbmdFbnRyeQIJARFrZXlSZXNQcm9wb3J0aW9ucwAFBXByb3BzCQDMCAIJAQtTdHJpbmdFbnRyeQIFDHJlc0J5Q29udEtleQUQdXBkYXRlZENvbnRQcm9wcwkAzAgCCQELU3RyaW5nRW50cnkCCAULY2xhaW1SZXN1bHQCXzIJALkJAggFC2NsYWltUmVzdWx0Al8zAgE6CQDMCAIDCQBmAgkAkAMBBQVsYW5kcwABCQELU3RyaW5nRW50cnkCBQhsYW5kc0tleQkAuwkCCQDRCAIFBWxhbmRzCQEFdmFsdWUBBQNpZHgCAV8JAQtEZWxldGVFbnRyeQEFCGxhbmRzS2V5CQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlwaWVjZXNLZXkFCW5ld1BpZWNlcwUDbmlsBQ1wcm9sb2dBY3Rpb25zBQl3bGdSZXN1bHQBaQETdW5zdGFrZUxhbmRDYWxsYmFjawILbGFuZEFzc2V0SWQEYWRkcgMJAQIhPQIJAKUIAQgFAWkGY2FsbGVyBRBhY3JlczJBZGRyZXNzU3RyCQACAQIRUGVybWlzc2lvbiBkZW5pZWQEDXVuc3Rha2VSZXN1bHQJARN1bnN0YWtlTGFuZEludGVybmFsAgUEYWRkcgULbGFuZEFzc2V0SWQECXdsZ1Jlc3VsdAkA/AcEBQt3bGdDb250cmFjdAISb25TdGFrZVVuc3Rha2VMYW5kCQDMCAIFBGFkZHIFA25pbAUDbmlsCQCUCgIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQUEYWRkcgABCQDZBAEFC2xhbmRBc3NldElkCQDMCAIJAQtEZWxldGVFbnRyeQEJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQULbGFuZEFzc2V0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDBQpMQU5EUFJFRklYBQtsYW5kQXNzZXRJZAUEYWRkcgUDbmlsCQCXCgUIBQ11bnN0YWtlUmVzdWx0Al8xCAUNdW5zdGFrZVJlc3VsdAJfMggFDXVuc3Rha2VSZXN1bHQCXzMIBQ11bnN0YWtlUmVzdWx0Al80BQl3bGdSZXN1bHQBaQETdW5zdGFrZUxhbmRSRUFET05MWQILbGFuZEFzc2V0SWQEYWRkcgQNdW5zdGFrZVJlc3VsdAkBE3Vuc3Rha2VMYW5kSW50ZXJuYWwCBQRhZGRyBQtsYW5kQXNzZXRJZAkAlAoCBQNuaWwFDXVuc3Rha2VSZXN1bHQBaQEcdW5zdGFrZUxhbmRzRmluYWxpemVDYWxsYmFjawEEYWRkcgMJAQIhPQIJAKUIAQgFAWkGY2FsbGVyBRBhY3JlczJBZGRyZXNzU3RyCQACAQIRUGVybWlzc2lvbiBkZW5pZWQJAJQKAgkAzAgCCQELRGVsZXRlRW50cnkBCQEVa2V5U3Rha2VkTGFuZHNCeU93bmVyAQUEYWRkcgkAzAgCCQELRGVsZXRlRW50cnkBCQEWa2V5U3Rha2VkUGllY2VzQnlPd25lcgEFBGFkZHIFA25pbAAAAWkBCXN0YWtlRHVjawAEDXByb2xvZ0FjdGlvbnMJAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIcRXhhY3RseSBvbmUgcGF5bWVudCByZXF1aXJlZAQDcG10CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAAEB2Fzc2V0SWQJAQV2YWx1ZQEIBQNwbXQHYXNzZXRJZAQHYWRkcmVzcwkApQgBCAUBaQZjYWxsZXIDCQECIT0CCAUDcG10BmFtb3VudAABCQACAQkArAICCQCsAgICBE5GVCAFCkRVQ0tQUkVGSVgCJCB0b2tlbiBzaG91bGQgYmUgYXR0YWNoZWQgYXMgcGF5bWVudAQFYXNzZXQJAQV2YWx1ZQEJAOwHAQUHYXNzZXRJZAQGaXNSb2JvAwMFE0tTX0FMTE9XX1JPQk9fRFVDS1MJAAACCAUFYXNzZXQGaXNzdWVyBQR0aGlzBwkBCGNvbnRhaW5zAggFBWFzc2V0BG5hbWUFC1JPQk9fUFJFRklYBwMDAwkBAiE9AggFBWFzc2V0Bmlzc3VlcgUNaW5jdWJhdG9yQWRkcgkBAiE9AggFBWFzc2V0Bmlzc3VlcgULYnJlZWRlckFkZHIHCQEBIQEFBmlzUm9ibwcJAAIBCQCsAgIJAKwCAgkArAICCQCsAgICElVua25vd24gaXNzdWVyIG9mIAUKRFVDS1BSRUZJWAIEIG9yIAULUk9CT19QUkVGSVgCBiB0b2tlbgMDCQEBIQEJAQhjb250YWlucwIIBQVhc3NldARuYW1lBQpEVUNLUFJFRklYCQEBIQEFBmlzUm9ibwcJAAIBCQCsAgIJAKwCAgkArAICCQCsAgICCU9ubHkgTkZUIAUKRFVDS1BSRUZJWAIEIG9yIAULUk9CT19QUkVGSVgCFCB0b2tlbnMgYXJlIGFjY2VwdGVkBAphc3NldElkU3RyCQDYBAEFB2Fzc2V0SWQEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQUKYXNzZXRJZFN0cgMJAQlpc0RlZmluZWQBCQCfCAEFB3RpbWVLZXkJAAIBCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCEiBpcyBhbHJlYWR5IHN0YWtlZAMJAQlpc0RlZmluZWQBCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFB2FkZHJlc3MJAAIBCQCsAgICHVlvdSBhbHJlYWR5IHN0YWtlZCBvbmUgZHVjazogCAUFYXNzZXQEbmFtZQQGbG9jS2V5CQEPa2V5RHVja0xvY2F0aW9uAQUKYXNzZXRJZFN0cgQIbG9jYXRpb24JAKIIAQUGbG9jS2V5BAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQUKYXNzZXRJZFN0cgQIYmFja3BhY2sJAKIIAQUFYnBLZXkECWtleUhlYWx0aAkBDWtleUR1Y2tIZWFsdGgBBQphc3NldElkU3RyBAVtYXhIUAkBCW1heEhlYWx0aAEJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBDGtleUR1Y2tMZXZlbAEFCmFzc2V0SWRTdHIAAAQJY3VySGVhbHRoCQELdmFsdWVPckVsc2UCCQCfCAEFCWtleUhlYWx0aAUFbWF4SFAJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUHdGltZUtleQgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAMwIAgkBDEludGVnZXJFbnRyeQIJASJrZXlTdGFrZWRUaW1lQnlUeXBlQXNzZXRJZEFuZE93bmVyAwUKRFVDS1BSRUZJWAkA2AQBBQdhc3NldElkBQdhZGRyZXNzCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAzAgCCQELU3RyaW5nRW50cnkCCQEQa2V5RHVja0lkVG9Pd25lcgEFCmFzc2V0SWRTdHIFB2FkZHJlc3MJAMwIAgkBC1N0cmluZ0VudHJ5AgkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUHYWRkcmVzcwUKYXNzZXRJZFN0cgUDbmlsAwkBCWlzRGVmaW5lZAEFCGxvY2F0aW9uBQNuaWwJAM4IAgkAzAgCCQELU3RyaW5nRW50cnkCBQZsb2NLZXkFD0RFRkFVTFRMT0NBVElPTgUDbmlsAwkBCWlzRGVmaW5lZAEFCGJhY2twYWNrBQNuaWwJAM4IAgkAzQgCCQDMCAIJAQtTdHJpbmdFbnRyeQIFBWJwS2V5AhowOjBfMF8wXzBfMF8wOjBfMF8wXzBfMF8wOgUDbmlsCQEMSW50ZWdlckVudHJ5AgUJa2V5SGVhbHRoBQljdXJIZWFsdGgFDXByb2xvZ0FjdGlvbnMBaQELdW5zdGFrZUR1Y2sBCmFzc2V0SWRTdHIEDXByb2xvZ0FjdGlvbnMJAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEB2Fzc2V0SWQJANkEAQUKYXNzZXRJZFN0cgQHYWRkcmVzcwkApQgBCAUBaQZjYWxsZXIEBWFzc2V0CQEFdmFsdWUBCQDsBwEFB2Fzc2V0SWQEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQUKYXNzZXRJZFN0cgMJAQEhAQkBCWlzRGVmaW5lZAEJAJ8IAQUHdGltZUtleQkAAgEJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQDCQEBIQEJAQlpc0RlZmluZWQBCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFB2FkZHJlc3MJAAIBCQCsAgIJAKwCAgIJVGhlIGR1Y2sgCAUFYXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQEBW93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBEGtleUR1Y2tJZFRvT3duZXIBBQphc3NldElkU3RyCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDCBpcyBvcnBoYW5lZAMJAQIhPQIFBW93bmVyBQdhZGRyZXNzCQACAQIXU3Rha2VkIE5GVCBpcyBub3QgeW91cnMDCQEPY2hlY2tUb3VybmFtZW50AQUKYXNzZXRJZFN0cgkAAgECG3Vuc3Rha2VEdWNrX2NoZWNrVG91cm5hbWVudAQJa2V5SGVhbHRoCQENa2V5RHVja0hlYWx0aAEFCmFzc2V0SWRTdHIEBW1heEhQCQEJbWF4SGVhbHRoAQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEMa2V5RHVja0xldmVsAQUKYXNzZXRJZFN0cgAABAZoZWFsdGgJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJa2V5SGVhbHRoBQVtYXhIUAMJAGYCBQVtYXhIUAUGaGVhbHRoCQACAQkArAICCQCsAgICGVBsZWFzZSBoZWFsIHlvdXIgZHVjayB0byAJAKQDAQUFbWF4SFACE2hwIGJlZm9yZSB1bnN0YWtpbmcJAM4IAgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIAAQUHYXNzZXRJZAkAzAgCCQELRGVsZXRlRW50cnkBBQd0aW1lS2V5CQDMCAIJAQtEZWxldGVFbnRyeQEFCWtleUhlYWx0aAkAzAgCCQELRGVsZXRlRW50cnkBCQEPa2V5RHVja0xvY2F0aW9uAQUKYXNzZXRJZFN0cgkAzAgCCQELRGVsZXRlRW50cnkBCQEQa2V5RHVja0lkVG9Pd25lcgEFCmFzc2V0SWRTdHIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDBQpEVUNLUFJFRklYBQphc3NldElkU3RyBQdhZGRyZXNzCQDMCAIJAQtEZWxldGVFbnRyeQEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFB2FkZHJlc3MFA25pbAUNcHJvbG9nQWN0aW9ucwFpARN1bnN0YWtlRHVja0NhbGxiYWNrAgtkdWNrQXNzZXRJZARhZGRyAwkBAiE9AgkApQgBCAUBaQZjYWxsZXIFEGFjcmVzMkFkZHJlc3NTdHIJAAIBAhFQZXJtaXNzaW9uIGRlbmllZAQNdW5zdGFrZVJlc3VsdAkBE3Vuc3Rha2VEdWNrSW50ZXJuYWwCBQRhZGRyBQtkdWNrQXNzZXRJZAkAlAoCCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEFBGFkZHIAAQkA2QQBBQtkdWNrQXNzZXRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2R1Y2tBc3NldElkCQDMCAIJAQtEZWxldGVFbnRyeQEJARBrZXlEdWNrSWRUb093bmVyAQULZHVja0Fzc2V0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDBQpEVUNLUFJFRklYBQtkdWNrQXNzZXRJZAUEYWRkcgkAzAgCCQELRGVsZXRlRW50cnkBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyBQNuaWwFDXVuc3Rha2VSZXN1bHQBaQETdW5zdGFrZUR1Y2tSRUFET05MWQILZHVja0Fzc2V0SWQEYWRkcgQNdW5zdGFrZVJlc3VsdAkBE3Vuc3Rha2VEdWNrSW50ZXJuYWwCBQRhZGRyBQtkdWNrQXNzZXRJZAkAlAoCBQNuaWwFDXVuc3Rha2VSZXN1bHQBaQEIY2xhaW1SZXMCBmFtb3VudA5sYW5kQXNzZXRJZFN0cgQNcHJvbG9nQWN0aW9ucwkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQEYWRkcgkApQgBCAUBaQxvcmlnaW5DYWxsZXIEBnJlc3VsdAkBEGNsYWltUmVzSW50ZXJuYWwEBQRhZGRyBQZhbW91bnQFDWNsYWltTW9kZUR1Y2sFDmxhbmRBc3NldElkU3RyBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFBGFkZHICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQJAJQKAgkAzggCCQDNCAIJAM0IAgkAzggCCAUGcmVzdWx0Al8xCAkBF3VwZGF0ZUR1Y2tTdGF0c0ludGVybmFsAgULZHVja0Fzc2V0SWQJAGsDBQd4cENsYWltBQZhbW91bnQFBU1VTFQ4Al8xCQELU3RyaW5nRW50cnkCCAUGcmVzdWx0Al8yCQC5CQIIBQZyZXN1bHQCXzMCAToJAQtTdHJpbmdFbnRyeQIIBQZyZXN1bHQCXzQJALkJAggFBnJlc3VsdAJfNQIBOgUNcHJvbG9nQWN0aW9ucwkAkQMCCAUGcmVzdWx0Al8zBQhicElkeFJlcwFpAQxjbGFpbVJlc1RvV0gCBmFtb3VudA5sYW5kQXNzZXRJZFN0cgQNcHJvbG9nQWN0aW9ucwkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQEYWRkcgkApQgBCAUBaQxvcmlnaW5DYWxsZXIEBnJlc3VsdAkBEGNsYWltUmVzSW50ZXJuYWwEBQRhZGRyBQZhbW91bnQFC2NsYWltTW9kZVdoBQ5sYW5kQXNzZXRJZFN0cgkAlAoCCQDOCAIJAM0IAgkAzQgCCQDOCAIIBQZyZXN1bHQCXzEICQEWdXBkYXRlQWNjU3RhdHNJbnRlcm5hbAIFBGFkZHIJAGsDBQd4cENsYWltBQZhbW91bnQFBU1VTFQ4Al8xCQELU3RyaW5nRW50cnkCCAUGcmVzdWx0Al8yCQC5CQIIBQZyZXN1bHQCXzMCAToJAQtTdHJpbmdFbnRyeQIIBQZyZXN1bHQCXzQJALkJAggFBnJlc3VsdAJfNQIBOgUNcHJvbG9nQWN0aW9ucwkAkQMCCAUGcmVzdWx0Al81BQh3aElkeFJlcwFpAQZmbGlnaHQCB21lc3NhZ2UDc2lnBA1wcm9sb2dBY3Rpb25zCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBAh1c2VyQWRkcgkApQgBCAUBaQZjYWxsZXIEAWYJAQxmbGlnaHRDb21tb24DBQh1c2VyQWRkcgUHbWVzc2FnZQUDc2lnBAVuZXdIUAgFAWYCXzEEC2R1Y2tBc3NldElkCAUBZgJfMgQGbG9jS2V5CQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQEC2N1ckxvY2F0aW9uCQELdmFsdWVPckVsc2UCCQCiCAEFBmxvY0tleQUPREVGQVVMVExPQ0FUSU9OBAtuZXdMb2NhdGlvbggFAWYCXzQDCQAAAgULbmV3TG9jYXRpb24FC2N1ckxvY2F0aW9uCQACAQIiWW91IGNhbid0IGZseSB0byB0aGUgc2FtZSBsb2NhdGlvbgQGbmV3TG9jCQC1CQIFC25ld0xvY2F0aW9uAgFfBAZpc1RvdXIJAAACCQCRAwIFBm5ld0xvYwUKbG9jSWR4VHlwZQIBVAQHaXNEZWxpdgkAAAIJAJEDAgUGbmV3TG9jBQpsb2NJZHhUeXBlAgFEBAVlcUtleQkBEGtleUR1Y2tFcXVpcG1lbnQBBQtkdWNrQXNzZXRJZAQJY3VycmVudEVxCQELdmFsdWVPckVsc2UCCQCiCAEFBWVxS2V5AhcsOyxfLDssXyw7LF8sOyxfLDssXyw7LAQNJHQwNzI1MzA3MjYzNgkBEXN1YnRyYWN0RXF1aXBtZW50AgUJY3VycmVudEVxCAUBZgJfNQQFbmV3RXEIBQ0kdDA3MjUzMDcyNjM2Al8xBA9zaG91bGRaZXJvQnVmZnMIBQ0kdDA3MjUzMDcyNjM2Al8yBAdpZ25vcmVkCAUNJHQwNzI1MzA3MjYzNgJfMwQNJHQwNzI2Mzk3NDQ3MQMJAQEhAQkBCW9uTWlzc2lvbgIFEnRvdXJuYW1lbnRDb250cmFjdAULY3VyTG9jYXRpb24DBQZpc1RvdXIJAQxjaGVhdEF0dGVtcHQDBQtjdXJMb2NhdGlvbgULbmV3TG9jYXRpb24ABQMJAQEhAQUHaXNEZWxpdgMJAGYCBQVuZXdIUAAACQCUCgIFC25ld0xvY2F0aW9uBQVuZXdIUAkAlAoCBQtjdXJMb2NhdGlvbgAAAwkAZgIFBW5ld0hQAAAEAXMJAPwHBAUEdGhpcwIPcHJvY2Vzc0RlbGl2ZXJ5CQDMCAIFC2R1Y2tBc3NldElkBQNuaWwFA25pbAMJAAACBQFzBQFzCQCUCgIFC2N1ckxvY2F0aW9uBQVuZXdIUAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAlAoCBQtjdXJMb2NhdGlvbgAAAwkBDmlzSW5Ub3VybmFtZW50AgUSdG91cm5hbWVudENvbnRyYWN0BQtjdXJMb2NhdGlvbgMJAQEhAQkBDmlzSW5Ub3VybmFtZW50AgUSdG91cm5hbWVudENvbnRyYWN0BQtuZXdMb2NhdGlvbgkAAgECKllvdXIgZHVjayBpcyB0YWtpbmcgcGFydCBpbiB0aGUgdG91cm5hbWVudAQFc2NvcmUJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQZuZXdMb2MFCGxvY0lkeElkBAZjdXJMb2MJALUJAgULY3VyTG9jYXRpb24CAV8EBmxhc3RJZAkBC3ZhbHVlT3JFbHNlAgkAmggCBRJ0b3VybmFtZW50Q29udHJhY3QFDWxhc3RUb3VySWRLZXkAAAMJAQIhPQIFBXNjb3JlCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBmN1ckxvYwUIbG9jSWR4SWQAAQkBDGNoZWF0QXR0ZW1wdAMFC2N1ckxvY2F0aW9uBQtuZXdMb2NhdGlvbgAHAwkAZgIFBW5ld0hQAAAECWxvY2FsQmVzdAkBC3ZhbHVlT3JFbHNlAgkAmggCBRJ0b3VybmFtZW50Q29udHJhY3QJARprZXlCZXN0UmVzdWx0QnlUb3VyQW5kRHVjawIFBmxhc3RJZAULZHVja0Fzc2V0SWQAAAQIdXBkTG9jYWwDCQBmAgUFc2NvcmUFCWxvY2FsQmVzdAkA/AcEBRJ0b3VybmFtZW50Q29udHJhY3QCDnNhdmVEdWNrUmVzdWx0CQDMCAIFC2R1Y2tBc3NldElkCQDMCAIFBXNjb3JlBQNuaWwFA25pbAUEdW5pdAMJAAACBQh1cGRMb2NhbAUIdXBkTG9jYWwJAJQKAgULbmV3TG9jYXRpb24FBW5ld0hQCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQCUCgIFC2N1ckxvY2F0aW9uAAAJAAIBCQCsAgICFFVua25vd24gY3VyTG9jYXRpb246BQtjdXJMb2NhdGlvbgQJbG9jVG9TYXZlCAUNJHQwNzI2Mzk3NDQ3MQJfMQQIaHBUb1NhdmUIBQ0kdDA3MjYzOTc0NDcxAl8yCQCUCgIJAM4IAgkAzggCCQDOCAIJAMwIAgkBC1N0cmluZ0VudHJ5AgUGbG9jS2V5BQlsb2NUb1NhdmUJAMwIAgkBC1N0cmluZ0VudHJ5AgUFZXFLZXkFBW5ld0VxCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkBQhocFRvU2F2ZQUDbmlsBQ1wcm9sb2dBY3Rpb25zAwUPc2hvdWxkWmVyb0J1ZmZzCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQxrZXlEdWNrQnVmZnMBBQtkdWNrQXNzZXRJZAIJMF8wXzBfMF8wBQNuaWwFA25pbAgJARd1cGRhdGVEdWNrU3RhdHNJbnRlcm5hbAIFC2R1Y2tBc3NldElkAwkAZgIFBW5ld0hQAAAFD3hwU3VjY2Vzc0ZsaWdodAUMeHBGYWlsRmxpZ2h0Al8xCAUBZgJfMwFpAQRoZWFsAwpxdWFudGl0eUwxCnF1YW50aXR5TDIKcXVhbnRpdHlMMwQNcHJvbG9nQWN0aW9ucwkBBnByb2xvZwEFAWkDAwMJAGYCAAAFCnF1YW50aXR5TDEGCQBmAgAABQpxdWFudGl0eUwyBgkAZgIAAAUKcXVhbnRpdHlMMwkAAgECG1F1YW50aXR5IGNhbm5vdCBiZSBuZWdhdGl2ZQQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBCQClCAEIBQFpBmNhbGxlcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAMJAQ9jaGVja1RvdXJuYW1lbnQBBQtkdWNrQXNzZXRJZAkAAgECFGhlYWxfY2hlY2tUb3VybmFtZW50BANxdHMJAMwIAgUKcXVhbnRpdHlMMQkAzAgCBQpxdWFudGl0eUwyCQDMCAIFCnF1YW50aXR5TDMFA25pbAQJa2V5SGVhbHRoCQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkBAVtYXhIUAkBCW1heEhlYWx0aAEJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBDGtleUR1Y2tMZXZlbAEFC2R1Y2tBc3NldElkAAAECW9sZEhlYWx0aAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlrZXlIZWFsdGgFBW1heEhQAwkAZwIFCW9sZEhlYWx0aAUFbWF4SFAJAAIBCQCsAgIJAKwCAgIPSFAgc2hvdWxkIGJlIDwgCQCkAwEFBW1heEhQAgggdG8gaGVhbAQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkECHByb2RMaXN0AwkAAAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAIABQNuaWwJALwJAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kAgFfCgELaXRlcmF0ZVByb2QCA2FjYwZyZWNpcGUEAW4IBQNhY2MCXzIEAXgDCQBmAgkAkAMBBQhwcm9kTGlzdAUBbgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCHByb2RMaXN0BQFuAAADCQBmAgADBQFuBAFxCQCRAwIFA3F0cwUBbgMJAGYCBQFxBQF4CQACAQkArAICCQCsAgIJAKwCAgIOWW91IGhhdmUgb25seSAJAKQDAQUBeAIEIG9mIAkAkQMCBQlwcm9kVHlwZXMFAW4JAJUKAwkAzQgCCAUDYWNjAl8xCQCkAwEJAGUCBQF4BQFxCQBkAgUBbgABCQBkAggFA2FjYwJfMwkAaAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCCQC1CQIFBnJlY2lwZQIBXwUKcklkeEVmZmVjdAUBcQkAlQoDCQDNCAIIBQNhY2MCXzEJAKQDAQUBeAkAZAIFAW4AAQgFA2FjYwJfMwQGcmVzdWx0CgACJGwFEHByb2R1Y3Rpb25NYXRyaXgKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCVCgMFA25pbAAAAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBC2l0ZXJhdGVQcm9kAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyA1MAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAAZABoAGwAcAB0AHgAfACAAIQAiACMAJAAlACYAJwAoACkAKgArACwALQAuAC8AMAAxADIECW5ld0hlYWx0aAkAlwMBCQDMCAIFBW1heEhQCQDMCAIJAGQCBQlvbGRIZWFsdGgIBQZyZXN1bHQCXzMFA25pbAkAlAoCCQDOCAIJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUJa2V5SGVhbHRoBQluZXdIZWFsdGgJAMwIAgkBC1N0cmluZ0VudHJ5AgUFYnBLZXkJALoJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0CQDMCAIJALkJAggFBnJlc3VsdAJfMQIBXwUDbmlsAgE6BQNuaWwFDXByb2xvZ0FjdGlvbnMICQEXdXBkYXRlRHVja1N0YXRzSW50ZXJuYWwCBQtkdWNrQXNzZXRJZAkAaAIFBnhwSGVhbAkAZAIJAGQCBQpxdWFudGl0eUwxBQpxdWFudGl0eUwyBQpxdWFudGl0eUwzAl8xBQluZXdIZWFsdGgBaQEGaGVhbEVTAAQNcHJvbG9nQWN0aW9ucwkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhxFeGFjdGx5IG9uZSBwYXltZW50IHJlcXVpcmVkBANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAMJAQIhPQIIBQNwbXQHYXNzZXRJZAULdXNkdEFzc2V0SWQJAAIBAhpBbGxvd2VkIFVTRFQgcGF5bWVudCBvbmx5IQQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBCQClCAEIBQFpBmNhbGxlcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAMJAQ9jaGVja1RvdXJuYW1lbnQBBQtkdWNrQXNzZXRJZAkAAgECFmhlYWxFU19jaGVja1RvdXJuYW1lbnQECWtleUhlYWx0aAkBDWtleUR1Y2tIZWFsdGgBBQtkdWNrQXNzZXRJZAQFbWF4SFAJAQltYXhIZWFsdGgBCQELdmFsdWVPckVsc2UCCQCfCAEJAQxrZXlEdWNrTGV2ZWwBBQtkdWNrQXNzZXRJZAAABAlvbGRIZWFsdGgJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJa2V5SGVhbHRoBQVtYXhIUAMJAGYCBQlvbGRIZWFsdGgAAAkAAgECKEhQIHNob3VsZCBiZSAwIHRvIGNhbGwgRW1lcmdlbmN5IFNlcnZpY2UEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BAhwcm9kTGlzdAMJAAACCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QCAAUDbmlsCQC8CQIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAIBXwQNbWVkS2l0QW1vdW50MQMJAGYCCQCQAwEFCHByb2RMaXN0AAAJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQhwcm9kTGlzdAAAAAAEDW1lZEtpdEFtb3VudDIDCQBmAgkAkAMBBQhwcm9kTGlzdAABCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUIcHJvZExpc3QAAQAABA1tZWRLaXRBbW91bnQzAwkAZgIJAJADAQUIcHJvZExpc3QAAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCHByb2RMaXN0AAIAAAMDAwkAZgIFDW1lZEtpdEFtb3VudDEAAAYJAGYCBQ1tZWRLaXRBbW91bnQyAAAGCQBmAgUNbWVkS2l0QW1vdW50MwAACQACAQIfWW91IGhhdmUgdG8gdXNlIG93biBNZWRpY2FsIEtpdAQIZXhpc3RTdHIJAJ0IAgUPZWNvbm9teUNvbnRyYWN0CQEOa2V5RXNXYXJlaG91c2UABAxleGlzdEFtb3VudHMDCQEJaXNEZWZpbmVkAQUIZXhpc3RTdHIJALwJAgkBBXZhbHVlAQUIZXhpc3RTdHICAV8FA25pbAQLZXhpc3RBbW91bnQDCQBmAgkAkAMBBQxleGlzdEFtb3VudHMAAAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDGV4aXN0QW1vdW50cwAAAAADCQBnAgAABQtleGlzdEFtb3VudAkAAgECOVRoZXJlIGFyZSBubyBNZWRpY2FsIEtpdHMgTDEgYXQgRW1lcmdlbmN5IFNlcnZpY2Ugc3RvcmFnZQQJbmV3SGVhbHRoCQBkAgUJb2xkSGVhbHRoCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgkAtQkCCQCRAwIFEHByb2R1Y3Rpb25NYXRyaXgAAAIBXwUKcklkeEVmZmVjdAQFbmV3RVMJALkJAgkAzAgCCQCkAwEJAGUCBQtleGlzdEFtb3VudAABCQDRCAIFDGV4aXN0QW1vdW50cwAAAgFfBAZyZWNpcGUJALUJAgkAkQMCBRBwcm9kdWN0aW9uTWF0cml4AAACAV8ECHRvdGFsTWF0CQESZ2V0UmVjaXBlTWF0ZXJpYWxzAQUGcmVjaXBlBAlzZWxsUHJpY2UJAGsDCQBoAgUIdG90YWxNYXQFCkVTU0VMTENPRUYFEFJFU09VUkNFUFJJQ0VNSU4JAGgCBQVNVUxUOAUOUFJPRFVDVFBLR1NJWkUDCQECIT0CCAUDcG10BmFtb3VudAUJc2VsbFByaWNlCQACAQkArAICAhtQYXltZW50IGF0dGFjaGVkIHNob3VsZCBiZSAJAKQDAQUJc2VsbFByaWNlBAZyZXN1bHQJAQhhc1N0cmluZwEJAPwHBAUPZWNvbm9teUNvbnRyYWN0Ag91cGRhdGVFc1N0b3JhZ2UJAMwIAgUFbmV3RVMFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgULdXNkdEFzc2V0SWQFCXNlbGxQcmljZQUDbmlsCQCUCgIJAM4IAgkAzQgCBQ1wcm9sb2dBY3Rpb25zCQEMSW50ZWdlckVudHJ5AgUJa2V5SGVhbHRoBQluZXdIZWFsdGgICQEXdXBkYXRlRHVja1N0YXRzSW50ZXJuYWwCBQtkdWNrQXNzZXRJZAUIeHBDYWxsRVMCXzEFBnJlc3VsdAFpAQ51cGRhdGVCYWNrcGFjawILZHVja0Fzc2V0SWQHbmV3UGFjawMJAQIhPQIIBQFpBmNhbGxlcgUPZWNvbm9teUNvbnRyYWN0CQACAQIRcGVybWlzc2lvbiBkZW5pZWQJAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCCQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAUHbmV3UGFjawUDbmlsBQduZXdQYWNrAWkBD2NvbW1pdEZvclJhbmRvbQAEDXByb2xvZ0FjdGlvbnMJAQZwcm9sb2cBBQFpBAtmaW5pc2hCbG9jawkAZAIFBmhlaWdodAULcmFuZG9tRGVsYXkEBGFkZHIJAKUIAQgFAWkGY2FsbGVyCQCUCgIJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBCWtleUNvbW1pdAEFBGFkZHIFC2ZpbmlzaEJsb2NrBQNuaWwFDXByb2xvZ0FjdGlvbnMFC2ZpbmlzaEJsb2NrAWkBDHJldmVhbFJhbmRvbQEIbWF4VmFsdWUEDXByb2xvZ0FjdGlvbnMJAQZwcm9sb2cBBQFpBARhZGRyCQClCAEIBQFpBmNhbGxlcgQJZmluaXNoS2V5CQEJa2V5Q29tbWl0AQUEYWRkcgQLZmluaXNoQmxvY2sJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnwgBBQlmaW5pc2hLZXkCJFlvdSBoYXZlIHRvIGNvbW1pdEZvclJhbmRvbSgpIGZpcnN0IQMJAGYCBQtmaW5pc2hCbG9jawUGaGVpZ2h0CQACAQkArAICAjRSYW5kb20gbnVtYmVyIGlzIG5vdCByZWFkeSB5ZXQsIHdhaXQgdW50aWwgaGVpZ2h0ID0gCQCkAwEFC2ZpbmlzaEJsb2NrBAdlbnRyb3B5CQEFdmFsdWUBCAkBBXZhbHVlAQkA7QcBBQtmaW5pc2hCbG9jawN2cmYEBHNhbHQJAJsDAQkBC3ZhbHVlT3JFbHNlAgkAoggBCQERa2V5TGFzdFR4SWRCeVVzZXIBBQRhZGRyAgAEBHJhbmQJAQ9nZXRSYW5kb21OdW1iZXIDBQhtYXhWYWx1ZQUEc2FsdAUHZW50cm9weQkAlAoCCQDOCAIJAMwIAgkBC0RlbGV0ZUVudHJ5AQUJZmluaXNoS2V5BQNuaWwFDXByb2xvZ0FjdGlvbnMFBHJhbmQBaQEIYnV5U0xhbmQABA1wcm9sb2dBY3Rpb25zCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECHEV4YWN0bHkgb25lIHBheW1lbnQgcmVxdWlyZWQEA3BtdAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAAAwkBAiE9AggFA3BtdAdhc3NldElkBQt1c2R0QXNzZXRJZAkAAgECGkFsbG93ZWQgVVNEVCBwYXltZW50IG9ubHkhAwkBAiE9AggFA3BtdAZhbW91bnQFB0VYUFVTRFQJAAIBCQCsAgICG1BheW1lbnQgYXR0YWNoZWQgc2hvdWxkIGJlIAkApAMBBQdFWFBVU0RUBAZyZXN1bHQJARJleHBlZGl0aW9uSW50ZXJuYWwCCAUBaQZjYWxsZXIIBQFpDXRyYW5zYWN0aW9uSWQEC2FjcmVzUmVzdWx0CQEFYXNJbnQBCQD8BwQFDWFjcmVzQ29udHJhY3QCCWJ1cm5BY3JlcwkAzAgCBQxTX0NPU1RfQUNSRVMFA25pbAUDbmlsCQCUCgIJAM4IAgkAzggCCQDNCAIIBQZyZXN1bHQCXzEJAQ5TY3JpcHRUcmFuc2ZlcgMFD2Vjb25vbXlDb250cmFjdAgFA3BtdAZhbW91bnQFC3VzZHRBc3NldElkCAkBFnVwZGF0ZUFjY1N0YXRzSW50ZXJuYWwCCQClCAEIBQFpBmNhbGxlcgUKeHBOZXdTTGFuZAJfMQUNcHJvbG9nQWN0aW9ucwkAlAoCCAgFBnJlc3VsdAJfMgJfMQULYWNyZXNSZXN1bHQBaQEKZXhwZWRpdGlvbgIHbWVzc2FnZQNzaWcEDXByb2xvZ0FjdGlvbnMJAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQECHVzZXJBZGRyCQClCAEIBQFpBmNhbGxlcgQBZgkBDGZsaWdodENvbW1vbgMFCHVzZXJBZGRyBQdtZXNzYWdlBQNzaWcEC2R1Y2tBc3NldElkCAUBZgJfMgQJa2V5SGVhbHRoCQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkBAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQFbUxpc3QJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQCAV8EBm5ld01hdAkAuQkCCQERc3VidHJhY3RNYXRlcmlhbHMDBgUFbUxpc3QFDEVYUE1BVEVSSUFMUwIBXwQFZXFLZXkJARBrZXlEdWNrRXF1aXBtZW50AQULZHVja0Fzc2V0SWQECWN1cnJlbnRFcQkBC3ZhbHVlT3JFbHNlAgkAoggBBQVlcUtleQIXLDssXyw7LF8sOyxfLDssXyw7LF8sOywEDSR0MDgyMzkxODI0OTcJARFzdWJ0cmFjdEVxdWlwbWVudAIFCWN1cnJlbnRFcQgFAWYCXzUEBW5ld0VxCAUNJHQwODIzOTE4MjQ5NwJfMQQPc2hvdWxkWmVyb0J1ZmZzCAUNJHQwODIzOTE4MjQ5NwJfMgQHaWdub3JlZAgFDSR0MDgyMzkxODI0OTcCXzMEAWUJARJleHBlZGl0aW9uSW50ZXJuYWwCCAUBaQZjYWxsZXIIBQFpDXRyYW5zYWN0aW9uSWQEAmlkCAgFAWUCXzICXzEEBnJlc3VsdAMJAGcCAAAIBQFmAl8xCQCVCgMJAMwIAgkBDEludGVnZXJFbnRyeQIFCWtleUhlYWx0aAAACQDMCAIJAQtTdHJpbmdFbnRyeQIFBWVxS2V5BQVuZXdFcQUDbmlsAgAAAAkAlQoDCQDOCAIIBQFlAl8xAwUPc2hvdWxkWmVyb0J1ZmZzCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQxrZXlEdWNrQnVmZnMBBQtkdWNrQXNzZXRJZAIJMF8wXzBfMF8wBQNuaWwJAM0IAgkAzQgCCQDNCAIJAM0IAgUDbmlsCQELU3RyaW5nRW50cnkCCQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQJALkJAgkAzAgCCAgFAWUCXzICXzIJAMwIAgIBTAkAzAgCBQJpZAUDbmlsAgFfCQEMSW50ZWdlckVudHJ5AgUJa2V5SGVhbHRoCAUBZgJfMQkBC1N0cmluZ0VudHJ5AgUFZXFLZXkFBW5ld0VxCQELU3RyaW5nRW50cnkCBQVicEtleQkAuQkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMJAMwIAgUGbmV3TWF0CQDMCAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAUDbmlsAgE6BQJpZAgFAWYCXzMDCQEPY2hlY2tUb3VybmFtZW50AQULZHVja0Fzc2V0SWQJAAIBAhpleHBlZGl0aW9uX2NoZWNrVG91cm5hbWVudAQLYWNyZXNSZXN1bHQJAQVhc0ludAEJAPwHBAUNYWNyZXNDb250cmFjdAIJYnVybkFjcmVzCQDMCAIFDFNfQ09TVF9BQ1JFUwUDbmlsBQNuaWwJAJQKAgkAzggCCQDOCAIIBQZyZXN1bHQCXzEICQEXdXBkYXRlRHVja1N0YXRzSW50ZXJuYWwCBQtkdWNrQXNzZXRJZAUKeHBOZXdTTGFuZAJfMQUNcHJvbG9nQWN0aW9ucwkAlQoDCAUGcmVzdWx0Al8yCAUGcmVzdWx0Al8zBQthY3Jlc1Jlc3VsdAFpARBidXlTTGFuZEZvckFjcmVzAAQNcHJvbG9nQWN0aW9ucwkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAiJleGFjdGx5IDEgcGF5bWVudCBtdXN0IGJlIGF0dGFjaGVkBANwbXQJAJEDAggFAWkIcGF5bWVudHMAAAQDYW10CAUDcG10BmFtb3VudAMDCQEBIQEJAQlpc0RlZmluZWQBCAUDcG10B2Fzc2V0SWQGCQECIT0CCQEFdmFsdWUBCAUDcG10B2Fzc2V0SWQFDGFjcmVzQXNzZXRJZAkAAgECFEFDUkVTIHBheW1lbnRzIG9ubHkhAwkBAiE9AgUDYW10BQxTX0NPU1RfQUNSRVMJAAIBCQCsAgICG1BheW1lbnQgYXR0YWNoZWQgc2hvdWxkIGJlIAkApAMBBQxTX0NPU1RfQUNSRVMEBnJlc3VsdAkBEmV4cGVkaXRpb25JbnRlcm5hbAIIBQFpBmNhbGxlcggFAWkNdHJhbnNhY3Rpb25JZAQLYWNyZXNSZXN1bHQJAQVhc0ludAEJAPwHBAUNYWNyZXNDb250cmFjdAIJYnVybkFjcmVzCQDMCAIFDFNfQ09TVF9BQ1JFUwUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQxhY3Jlc0Fzc2V0SWQFA2FtdAUDbmlsCQCUCgIJAM4IAgkAzggCCAUGcmVzdWx0Al8xCAkBFnVwZGF0ZUFjY1N0YXRzSW50ZXJuYWwCCQClCAEIBQFpBmNhbGxlcgUKeHBOZXdTTGFuZAJfMQUNcHJvbG9nQWN0aW9ucwkAlAoCCAgFBnJlc3VsdAJfMgJfMQULYWNyZXNSZXN1bHQBaQEMdXBncmFkZUluZnJhAQtsYW5kQXNzZXRJZAQNcHJvbG9nQWN0aW9ucwkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQGcmVzdWx0CQENdXBJbmZyYUNvbW1vbgQGCAUBaQZjYWxsZXIAAAULbGFuZEFzc2V0SWQEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQkApQgBCAUBaQZjYWxsZXICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQJAJQKAgkAzggCCQDOCAIIBQZyZXN1bHQCXzEFDXByb2xvZ0FjdGlvbnMICQEXdXBkYXRlRHVja1N0YXRzSW50ZXJuYWwCBQtkdWNrQXNzZXRJZAkAawMFDnhwVXBncmFkZUluZnJhCAUGcmVzdWx0Al8zBQVNVUxUOAJfMQgFBnJlc3VsdAJfMgFpARBhY3RpdmF0ZUFydGlmYWN0AgdhcnROYW1lDmxhbmRBc3NldElkT3B0BA1wcm9sb2dBY3Rpb25zCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBARhZGRyCQClCAEIBQFpBmNhbGxlcgQGcmVzdWx0BAckbWF0Y2gwBQdhcnROYW1lAwkAAAICB1BSRVNBTEUFByRtYXRjaDAJARJhY3RpdmF0ZVByZXNhbGVBcnQCBQRhZGRyBQ5sYW5kQXNzZXRJZE9wdAMJAAACAgdPTkJPQVJEBQckbWF0Y2gwCQESYWN0aXZhdGVPbmJvYXJkQXJ0AQUEYWRkcgkAAgECEFVua25vd24gYXJ0aWZhY3QJAM4IAgUGcmVzdWx0BQ1wcm9sb2dBY3Rpb25zAWkBCm1lcmdlTGFuZHMBDGxhbmRBc3NldElkcwQNcHJvbG9nQWN0aW9ucwkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQGcmVzdWx0CQELbWVyZ2VDb21tb24CCQClCAEIBQFpBmNhbGxlcgUMbGFuZEFzc2V0SWRzCQCUCgIJAM4IAgkAzggCCAUGcmVzdWx0Al8xBQ1wcm9sb2dBY3Rpb25zCAkBFnVwZGF0ZUFjY1N0YXRzSW50ZXJuYWwCCQClCAEIBQFpBmNhbGxlcgUHeHBNZXJnZQJfMQgFBnJlc3VsdAJfMgFpAQ1jYXJnb0V4Y2hhbmdlAgxjYXJnb0xpc3RTdHILbGFuZEFzc2V0SWQEDXByb2xvZ0FjdGlvbnMJAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQECmNhcmdvUGFydHMJALwJAgUMY2FyZ29MaXN0U3RyAgE6BARhZGRyCQClCAEIBQFpDG9yaWdpbkNhbGxlcgQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQtsYW5kQXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAMJAQEhAQkBCWlzRGVmaW5lZAEJAJ8IAQUHdGltZUtleQkAAgEJAKwCAggFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkBAVvd25lcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQtsYW5kQXNzZXRJZAkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDCQECIT0CBQVvd25lcgUEYWRkcgkAAgEJAKwCAgUKTEFORFBSRUZJWAINIGlzIG5vdCB5b3VycwQJbGFuZEluZGV4CQBpAgkBD251bVBpZWNlc0J5U2l6ZQEJAJEDAgkAtQkCCAUFYXNzZXQLZGVzY3JpcHRpb24CAV8FC3JlY0xhbmRTaXplBQVTU0laRQQKaW5mcmFMZXZlbAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEFC2xhbmRBc3NldElkAAAEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQLY3VyTG9jYXRpb24JAQt2YWx1ZU9yRWxzZQIJAKIIAQkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkBQ9ERUZBVUxUTE9DQVRJT04EA2xvYwkAtQkCCQEFdmFsdWUBBQtjdXJMb2NhdGlvbgIBXwMJAQIhPQIJAJEDAgUDbG9jBQpsb2NJZHhUeXBlAgFMCQACAQkArAICCQCsAgICFkR1Y2sgbG9jYXRpb24gdHlwZSBpcyAJAJEDAgUDbG9jBQpsb2NJZHhUeXBlAhEsIGJ1dCBzaG91bGQgYmUgTAMJAQIhPQIJAJEDAgUDbG9jBQhsb2NJZHhJZAULbGFuZEFzc2V0SWQJAAIBCQCsAgICG0R1Y2sgc2hvdWxkIGJlIG9uIHRoZSBsYW5kIAULbGFuZEFzc2V0SWQEBXdoS2V5CQESa2V5V2FyZWhvdXNlQnlMYW5kAQULbGFuZEFzc2V0SWQECWN1cnJlbnRXaAkBDGdldFdhcmVob3VzZQMFBXdoS2V5BQlsYW5kSW5kZXgFCmluZnJhTGV2ZWwEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BAZyZXN1bHQJAQltb3ZlU3R1ZmYDBQpjYXJnb1BhcnRzBQljdXJyZW50V2gFC2N1cnJlbnRQYWNrBARsb2Z0CQC1CQIJAJEDAgUJY3VycmVudFdoBQl3aElkeExPRlQCAV8EBWxvZnRPCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFC3ZvbE9jY3VwaWVkCAUGcmVzdWx0Al83BAVsb2Z0RgkAZQIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQd2b2xGcmVlCAUGcmVzdWx0Al83CQDOCAIJAMwIAgkBC1N0cmluZ0VudHJ5AgUFYnBLZXkJALoJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIIBQZyZXN1bHQCXzQJAMwIAggFBnJlc3VsdAJfNQkAzAgCCAUGcmVzdWx0Al82BQNuaWwCAToJAMwIAgkBC1N0cmluZ0VudHJ5AgUFd2hLZXkJALoJAgkAzAgCCQCRAwIFCWN1cnJlbnRXaAULd2hJZHhMZXZlbHMJAMwIAggFBnJlc3VsdAJfMQkAzAgCCAUGcmVzdWx0Al8yCQDMCAIIBQZyZXN1bHQCXzMJAMwIAgkAuQkCCQDMCAIJAJEDAgUEbG9mdAUJdm9sTG9ja2VkCQDMCAIJAKQDAQUFbG9mdE8JAMwIAgkApAMBBQVsb2Z0RgkAzAgCCQCRAwIFBGxvZnQFCHZvbFRvdGFsBQNuaWwCAV8FA25pbAIBOgUDbmlsBQ1wcm9sb2dBY3Rpb25zAWkBDXNhdmVXYXJlaG91c2UCBXdoU3RyC2xhbmRBc3NldElkAwkBAiE9AggFAWkGY2FsbGVyBQ9lY29ub215Q29udHJhY3QJAAIBAg1BY2Nlc3MgZGVuaWVkBAV3aEtleQkBEmtleVdhcmVob3VzZUJ5TGFuZAEFC2xhbmRBc3NldElkBAJ3aAkAvAkCBQV3aFN0cgIBOgMJAQIhPQIJAJADAQUCd2gABQkAAgECMHdhcmVob3VzZSBzdHJpbmcgc2hvdWxkIGNvbnRhaW4gNCAnOicgc2VwYXJhdG9ycwQFbG9mdEwJAJEDAgkAtQkCCQCRAwIFAndoBQl3aElkeExPRlQCAV8FCXZvbExvY2tlZAQFbG9mdE8JARdnZXRXYXJlaG91c2VPY2N1cGllZFZvbAEFAndoBAVsb2Z0VAkBF2dldFdhcmVob3VzZVRvdGFsVm9sdW1lAQkAkQMCBQJ3aAULd2hJZHhMZXZlbHMEBWxvZnRGCQBlAgkAZQIFBWxvZnRUCQENcGFyc2VJbnRWYWx1ZQEFBWxvZnRMBQVsb2Z0TwMJAGYCAAAFBWxvZnRGCQACAQIwT3BlcmF0aW9uIGxlYWRzIHRvIG5lZ2F0aXZlIGZyZWUgd2FyZWhvdXNlIHNwYWNlBAhuZXdXaFN0cgkAugkCCQDMCAIJAJEDAgUCd2gFC3doSWR4TGV2ZWxzCQDMCAIJAJEDAgUCd2gFCHdoSWR4UmVzCQDMCAIJAJEDAgUCd2gFCHdoSWR4TWF0CQDMCAIJAJEDAgUCd2gFCXdoSWR4UHJvZAkAzAgCCQC5CQIJAMwIAgUFbG9mdEwJAMwIAgkApAMBBQVsb2Z0TwkAzAgCCQCkAwEFBWxvZnRGCQDMCAIJAKQDAQUFbG9mdFQFA25pbAIBXwUDbmlsAgE6CQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgUFd2hLZXkFCG5ld1doU3RyBQNuaWwFCG5ld1doU3RyAWkBDXNldEN1c3RvbU5hbWUDB2Fzc2V0SWQKY3VzdG9tTmFtZQR0eXBlBA1wcm9sb2dBY3Rpb25zCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECHEV4YWN0bHkgb25lIHBheW1lbnQgcmVxdWlyZWQEA3BtdAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAAAwkBAiE9AggFA3BtdAdhc3NldElkBQt1c2R0QXNzZXRJZAkAAgECGkFsbG93ZWQgVVNEVCBwYXltZW50IG9ubHkhAwkBAiE9AggFA3BtdAZhbW91bnQFDFJFTkFNSU5HQ09TVAkAAgEJAKwCAgISUGF5bWVudCBzaG91bGQgYmUgCQCkAwEFDFJFTkFNSU5HQ09TVAMJAQhjb250YWlucwIFCmN1c3RvbU5hbWUCAl9fCQACAQkArAICAh5OYW1lIHNob3VsZCBub3QgY29udGFpbiAnX18nOiAFCmN1c3RvbU5hbWUDCQBmAgkAsQIBBQpjdXN0b21OYW1lBQpNQVhOQU1FTEVOCQACAQkArAICAhlOYW1lIHRvbyBsb25nLCBtYXhMZW5ndGg9CQCkAwEFCk1BWE5BTUVMRU4EBGFkZHIJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyBAdhY3Rpb25zBAckbWF0Y2gwBQR0eXBlAwkAAAICB0FDQ09VTlQFByRtYXRjaDAECnJldmVyc2VLZXkJARZrZXlDdXN0b21OYW1lVG9BZGRyZXNzAQUKY3VzdG9tTmFtZQQJbmFtZU93bmVyCQCiCAEFCnJldmVyc2VLZXkDCQEJaXNEZWZpbmVkAQUJbmFtZU93bmVyCQACAQkArAICAhlOYW1lIGFscmVhZHkgcmVnaXN0ZXJlZDogBQpjdXN0b21OYW1lBA1hZGRyVG9OYW1lS2V5CQEWa2V5QWRkcmVzc1RvQ3VzdG9tTmFtZQEFBGFkZHIEB29sZE5hbWUJAKIIAQUNYWRkclRvTmFtZUtleQQHZnJlZU9sZAMJAQlpc0RlZmluZWQBBQdvbGROYW1lCQDMCAIJAQtEZWxldGVFbnRyeQEJARZrZXlDdXN0b21OYW1lVG9BZGRyZXNzAQkBBXZhbHVlAQUHb2xkTmFtZQUDbmlsBQNuaWwJAM4IAgkAzQgCCQDNCAIFB2ZyZWVPbGQJAQtTdHJpbmdFbnRyeQIFDWFkZHJUb05hbWVLZXkFCmN1c3RvbU5hbWUJAQtTdHJpbmdFbnRyeQIFCnJldmVyc2VLZXkFBGFkZHIICQEWdXBkYXRlQWNjU3RhdHNJbnRlcm5hbAIFBGFkZHIFDHhwQ3VzdG9tTmFtZQJfMQMJAAACAgRMQU5EBQckbWF0Y2gwBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFB2Fzc2V0SWQEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQUHYXNzZXRJZAMJAQEhAQkBCWlzRGVmaW5lZAEJAJ8IAQUHdGltZUtleQkAAgEJAKwCAggFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkBAVvd25lcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQdhc3NldElkCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDCBpcyBvcnBoYW5lZAMJAQIhPQIFBW93bmVyBQRhZGRyCQACAQkArAICBQpMQU5EUFJFRklYAg0gaXMgbm90IHlvdXJzBApyZXZlcnNlS2V5CQEaa2V5TGFuZEN1c3RvbU5hbWVUb0Fzc2V0SWQBBQpjdXN0b21OYW1lBAluYW1lT3duZXIJAKIIAQUKcmV2ZXJzZUtleQMJAQlpc0RlZmluZWQBBQluYW1lT3duZXIJAAIBCQCsAgICGU5hbWUgYWxyZWFkeSByZWdpc3RlcmVkOiAFCmN1c3RvbU5hbWUEDmFzc2V0VG9OYW1lS2V5CQEaa2V5TGFuZEFzc2V0SWRUb0N1c3RvbU5hbWUBBQdhc3NldElkBAdvbGROYW1lCQCiCAEFDmFzc2V0VG9OYW1lS2V5BAdmcmVlT2xkAwkBCWlzRGVmaW5lZAEFB29sZE5hbWUJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBGmtleUxhbmRDdXN0b21OYW1lVG9Bc3NldElkAQkBBXZhbHVlAQUHb2xkTmFtZQUDbmlsBQNuaWwJAM4IAgkAzQgCCQDNCAIFB2ZyZWVPbGQJAQtTdHJpbmdFbnRyeQIFDmFzc2V0VG9OYW1lS2V5BQpjdXN0b21OYW1lCQELU3RyaW5nRW50cnkCBQpyZXZlcnNlS2V5BQdhc3NldElkCAkBFnVwZGF0ZUFjY1N0YXRzSW50ZXJuYWwCBQRhZGRyBQx4cEN1c3RvbU5hbWUCXzEDCQAAAgIERFVDSwUHJG1hdGNoMAQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQdhc3NldElkBAd0aW1lS2V5CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFB2Fzc2V0SWQDAwkBASEBCQEJaXNEZWZpbmVkAQkAnwgBBQd0aW1lS2V5BgkBASEBCQEJaXNEZWZpbmVkAQkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyCQACAQkArAICCAUFYXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQEBW93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBEGtleUR1Y2tJZFRvT3duZXIBBQdhc3NldElkCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDCBpcyBvcnBoYW5lZAMJAQIhPQIFBW93bmVyBQRhZGRyCQACAQkArAICBQpEVUNLUFJFRklYAg0gaXMgbm90IHlvdXJzBApyZXZlcnNlS2V5CQEaa2V5RHVja0N1c3RvbU5hbWVUb0Fzc2V0SWQBBQpjdXN0b21OYW1lBAluYW1lT3duZXIJAKIIAQUKcmV2ZXJzZUtleQMJAQlpc0RlZmluZWQBBQluYW1lT3duZXIJAAIBCQCsAgICGU5hbWUgYWxyZWFkeSByZWdpc3RlcmVkOiAFCmN1c3RvbU5hbWUEDmFzc2V0VG9OYW1lS2V5CQEaa2V5RHVja0Fzc2V0SWRUb0N1c3RvbU5hbWUBBQdhc3NldElkBAdvbGROYW1lCQCiCAEFDmFzc2V0VG9OYW1lS2V5BAdmcmVlT2xkAwkBCWlzRGVmaW5lZAEFB29sZE5hbWUJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBGmtleUR1Y2tDdXN0b21OYW1lVG9Bc3NldElkAQkBBXZhbHVlAQUHb2xkTmFtZQUDbmlsBQNuaWwJAM4IAgkAzQgCCQDNCAIFB2ZyZWVPbGQJAQtTdHJpbmdFbnRyeQIFDmFzc2V0VG9OYW1lS2V5BQpjdXN0b21OYW1lCQELU3RyaW5nRW50cnkCBQpyZXZlcnNlS2V5BQdhc3NldElkCAkBF3VwZGF0ZUR1Y2tTdGF0c0ludGVybmFsAgUHYXNzZXRJZAUMeHBDdXN0b21OYW1lAl8xCQACAQITVW5rbm93biBlbnRpdHkgdHlwZQkAlAoCCQDOCAIJAM0IAgUHYWN0aW9ucwkBDlNjcmlwdFRyYW5zZmVyAwUPZWNvbm9teUNvbnRyYWN0CAUDcG10BmFtb3VudAULdXNkdEFzc2V0SWQFDXByb2xvZ0FjdGlvbnMAAAFpAQxzZXRSZWZlcnJhbHMCCW9sZFBsYXllcgluZXdQbGF5ZXIDCQECIT0CCAUBaQ9jYWxsZXJQdWJsaWNLZXkFA3B1YgkAAgECEVBlcm1pc3Npb24gZGVuaWVkBA1wcm9sb2dBY3Rpb25zCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkAwkBASEBCQEJaXNEZWZpbmVkAQkApggBBQlvbGRQbGF5ZXIJAAIBCQCsAgICEUludmFsaWQgYWRkcmVzczogBQlvbGRQbGF5ZXIECm5ld2JpZUFkZHIJAKYIAQUJbmV3UGxheWVyAwkBASEBCQEJaXNEZWZpbmVkAQUKbmV3YmllQWRkcgkAAgEJAKwCAgIRSW52YWxpZCBhZGRyZXNzOiAFCW5ld1BsYXllcgQJb2xkTGFzdFR4CQCiCAEJARFrZXlMYXN0VHhJZEJ5VXNlcgEFCW9sZFBsYXllcgMJAQEhAQkBCWlzRGVmaW5lZAEFCW9sZExhc3RUeAkAAgECIm9sZFBsYXllciBkaWRuJ3QgZG8gYW55IHR4IGluIGdhbWUDCQBnAgAACAkA7wcBCQEFdmFsdWUBBQpuZXdiaWVBZGRyCWF2YWlsYWJsZQkAAgECFm5ld1BsYXllciBoYXMgbm8gV0FWRVMEB29sZHNLZXkJAQlrZXlPbGRpZXMABARvbGRzCQCiCAEFB29sZHNLZXkEBm9sZGllcwMJAQlpc0RlZmluZWQBBQRvbGRzCQC8CQIJAQV2YWx1ZQEFBG9sZHMCAV8FA25pbAMJAQ9jb250YWluc0VsZW1lbnQCBQZvbGRpZXMFCW5ld1BsYXllcgkAAgEJAKwCAgUJbmV3UGxheWVyAiYgaXMgbm90IG5ld2JpZSAoYWxyZWFkeSBoYXMgcmVmZXJyYWxzKQQIcmVmQnlLZXkJAQ9rZXlBZGRyZXNzUmVmQnkBBQluZXdQbGF5ZXIEBXJlZkJ5CQCiCAEFCHJlZkJ5S2V5AwMJAQlpc0RlZmluZWQBBQVyZWZCeQkBCWlzRGVmaW5lZAEJAKYIAQkBBXZhbHVlAQUFcmVmQnkHCQACAQkArAICCQCsAgIFCW5ld1BsYXllcgIUIGFscmVhZHkgaGFzIHJlZkJ5OiAJAQV2YWx1ZQEFBXJlZkJ5BAdyZWZzS2V5CQETa2V5QWRkcmVzc1JlZmVycmFscwEFCW9sZFBsYXllcgQEcmVmcwkAoggBBQdyZWZzS2V5BAlyZWZzQXJyYXkDCQEJaXNEZWZpbmVkAQUEcmVmcwkAvAkCCQEFdmFsdWUBBQRyZWZzAgFfBQNuaWwDCQEPY29udGFpbnNFbGVtZW50AgUJcmVmc0FycmF5BQluZXdQbGF5ZXIJAAIBCQCsAgIJAKwCAgkArAICBQlvbGRQbGF5ZXICEiBhbHJlYWR5IGNvbnRhaW5zIAUJbmV3UGxheWVyAhEgd2l0aGluIHJlZmVycmFscwQHbmV3UmVmcwkAugkCCQDNCAIFCXJlZnNBcnJheQUJbmV3UGxheWVyAgFfBAduZXdPbGRzAwkBD2NvbnRhaW5zRWxlbWVudAIFBm9sZGllcwUJb2xkUGxheWVyCQEFdmFsdWUBBQRvbGRzCQC6CQIJAM0IAgUGb2xkaWVzBQlvbGRQbGF5ZXICAV8JAJQKAgkAzggCCQDMCAIJAQtTdHJpbmdFbnRyeQIFCHJlZkJ5S2V5BQlvbGRQbGF5ZXIJAMwIAgkBC1N0cmluZ0VudHJ5AgUHcmVmc0tleQUHbmV3UmVmcwkAzAgCCQELU3RyaW5nRW50cnkCBQdvbGRzS2V5BQduZXdPbGRzBQNuaWwFDXByb2xvZ0FjdGlvbnMAAAFpARBkaXN0cmlidXRlUG9pbnRzBQhzdHJlbmd0aAhhY2N1cmFjeQlpbnRlbGxlY3QJZW5kdXJhbmNlCWRleHRlcml0eQQNcHJvbG9nQWN0aW9ucwkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQEYWRkcgkApQgBCAUBaQxvcmlnaW5DYWxsZXIEC3ZpcnRXbGdEYXRhCQEJYXNBbnlMaXN0AQkA/AcEBQt3bGdDb250cmFjdAISY2hlY2tXbGdYcFJFQURPTkxZCQDMCAIFBGFkZHIFA25pbAUDbmlsBA12aXJ0V2xnUG9pbnRzCQEFYXNJbnQBCQCRAwIFC3ZpcnRXbGdEYXRhAAEEDSR0MDk4MzA5OTg2OTkDCQBnAgAABQ12aXJ0V2xnUG9pbnRzCQCUCgIAAAUDbmlsBAdkZWx0YVhQCQEFYXNJbnQBCQD8BwQFC3dsZ0NvbnRyYWN0Agl0YWtlV2xnWHAJAMwIAgUEYWRkcgUDbmlsBQNuaWwDCQAAAgUHZGVsdGFYUAUHZGVsdGFYUAkAlAoCBQ12aXJ0V2xnUG9pbnRzCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEMa2V5VXNlckxldmVsAQUEYWRkcgkBBWFzSW50AQkAkQMCBQt2aXJ0V2xnRGF0YQAACQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEJa2V5VXNlclhQAQUEYWRkcgkBBWFzSW50AQkAkQMCBQt2aXJ0V2xnRGF0YQACBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4ECXdsZ1BvaW50cwgFDSR0MDk4MzA5OTg2OTkCXzEECndsZ0FjdGlvbnMIBQ0kdDA5ODMwOTk4Njk5Al8yBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFBGFkZHICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQECmZyZWVLZXlBY2MJARFrZXlVc2VyRnJlZVBvaW50cwEFBGFkZHIEDWZyZWVQb2ludHNBY2MJAGQCCQELdmFsdWVPckVsc2UCCQCfCAEFCmZyZWVLZXlBY2MAAAUJd2xnUG9pbnRzBAtmcmVlS2V5RHVjawkBEWtleUR1Y2tGcmVlUG9pbnRzAQULZHVja0Fzc2V0SWQEDmZyZWVQb2ludHNEdWNrCQELdmFsdWVPckVsc2UCCQCfCAEFC2ZyZWVLZXlEdWNrAAAEB3N1bUZyZWUJAGQCBQ1mcmVlUG9pbnRzQWNjBQ5mcmVlUG9pbnRzRHVjawQPc3VtVG9EaXN0cmlidXRlCQBkAgkAZAIJAGQCCQBkAgUIc3RyZW5ndGgFCGFjY3VyYWN5BQlpbnRlbGxlY3QFCWVuZHVyYW5jZQUJZGV4dGVyaXR5AwkAZgIFD3N1bVRvRGlzdHJpYnV0ZQUHc3VtRnJlZQkAAgEJAKwCAgkArAICAg9UaGVyZSBhcmUgb25seSAJAKQDAQUHc3VtRnJlZQIaIGZyZWUgcG9pbnRzIHRvIGRpc3RyaWJ1dGUECGNoYXJzS2V5CQEMa2V5RHVja0NoYXJzAQULZHVja0Fzc2V0SWQEBWNoYXJzCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAKIIAQUIY2hhcnNLZXkCCTBfMF8wXzBfMAIBXwQGbmV3QWNjCQBlAgUNZnJlZVBvaW50c0FjYwUPc3VtVG9EaXN0cmlidXRlCQCUCgIJAM4IAgkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQpmcmVlS2V5QWNjAwkAZgIAAAUGbmV3QWNjAAAFBm5ld0FjYwkAzAgCCQEMSW50ZWdlckVudHJ5AgULZnJlZUtleUR1Y2sDCQBmAgAABQZuZXdBY2MJAGQCBQ5mcmVlUG9pbnRzRHVjawUGbmV3QWNjBQ5mcmVlUG9pbnRzRHVjawkAzAgCCQELU3RyaW5nRW50cnkCBQhjaGFyc0tleQkAuQkCCQDMCAIJAKQDAQkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVjaGFycwUMY2hhclN0cmVuZ3RoBQhzdHJlbmd0aAkAzAgCCQCkAwEJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFY2hhcnMFDGNoYXJBY2N1cmFjeQUIYWNjdXJhY3kJAMwIAgkApAMBCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBWNoYXJzBQ1jaGFySW50ZWxsZWN0BQlpbnRlbGxlY3QJAMwIAgkApAMBCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBWNoYXJzBQ1jaGFyRW5kdXJhbmNlBQllbmR1cmFuY2UJAMwIAgkApAMBCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBWNoYXJzBQ1jaGFyRGV4dGVyaXR5BQlkZXh0ZXJpdHkFA25pbAIBXwUDbmlsBQ1wcm9sb2dBY3Rpb25zBQp3bGdBY3Rpb25zAAABaQEcc3BsaXRCeUdsb2JhbFdlaWdodHNSRUFET05MWQEGYW1vdW50CQCUCgIFA25pbAkBEmdldE5lZWRlZE1hdGVyaWFscwEFBmFtb3VudAFpASRzcGxpdEJ5R2xvYmFsQW5kTG9jYWxXZWlnaHRzUkVBRE9OTFkDCW1hdEFtb3VudAlyZXNBbW91bnQIdGVycmFpbnMEDXRlcnJhaW5Db3VudHMJAQ1jb3VudFRlcnJhaW5zAQUIdGVycmFpbnMJAJQKAgUDbmlsCQCUCgIJARJnZXROZWVkZWRNYXRlcmlhbHMBBQltYXRBbW91bnQJARNkaXN0cmlidXRlQnlXZWlnaHRzAgUJcmVzQW1vdW50BQ10ZXJyYWluQ291bnRzAWkBE2dldEJhY2twYWNrUkVBRE9OTFkBC2R1Y2tBc3NldElkCQCUCgIFA25pbAkAuQkCCQELZ2V0QmFja3BhY2sBCQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAIBOgFpARRnZXRXYXJlaG91c2VSRUFET05MWQELbGFuZEFzc2V0SWQEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQULbGFuZEFzc2V0SWQECWxhbmRJbmRleAkAaQIJAQ9udW1QaWVjZXNCeVNpemUBCQCRAwIJALUJAggFBWFzc2V0C2Rlc2NyaXB0aW9uAgFfBQtyZWNMYW5kU2l6ZQUFU1NJWkUECmluZnJhTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAAACQCUCgIFA25pbAkAugkCCQEMZ2V0V2FyZWhvdXNlAwkBEmtleVdhcmVob3VzZUJ5TGFuZAEFC2xhbmRBc3NldElkBQlsYW5kSW5kZXgFCmluZnJhTGV2ZWwCAToBaQEKc2F2ZUxhc3RUeAADCQEBIQEJAQ9jb250YWluc0VsZW1lbnQCCQDMCAIFC3dsZ0NvbnRyYWN0CQDMCAIFD2Vjb25vbXlDb250cmFjdAkAzAgCBRJ0b3VybmFtZW50Q29udHJhY3QJAMwIAgUNYWNyZXNDb250cmFjdAUDbmlsCAUBaQZjYWxsZXIJAAIBAg1BY2Nlc3MgZGVuaWVkCQCUCgIJAQZwcm9sb2cBBQFpACoBaQEPdXBkYXRlRHVja1N0YXRzAgtkdWNrQXNzZXRJZAdkZWx0YVhQAwkBAiE9AggFAWkGY2FsbGVyBQ9lY29ub215Q29udHJhY3QJAAIBAg1BY2Nlc3MgZGVuaWVkCQEXdXBkYXRlRHVja1N0YXRzSW50ZXJuYWwCBQtkdWNrQXNzZXRJZAUHZGVsdGFYUAFpAQ51cGRhdGVBY2NTdGF0cwIEYWRkcgdkZWx0YVhQAwkBASEBCQEPY29udGFpbnNFbGVtZW50AgkAzAgCBQt3bGdDb250cmFjdAkAzAgCBQ9lY29ub215Q29udHJhY3QJAMwIAgUNYWNyZXNDb250cmFjdAUDbmlsCAUBaQZjYWxsZXIJAAIBAg1BY2Nlc3MgZGVuaWVkCQEWdXBkYXRlQWNjU3RhdHNJbnRlcm5hbAIFBGFkZHIFB2RlbHRhWFABaQEJZXF1aXBEdWNrAQllcXVpcG1lbnQEDXByb2xvZ0FjdGlvbnMJAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBGFkZHIJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFBGFkZHICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQDCQEPY2hlY2tUb3VybmFtZW50AQULZHVja0Fzc2V0SWQJAAIBAhllcXVpcER1Y2tfY2hlY2tUb3VybmFtZW50BAVlcUtleQkBEGtleUR1Y2tFcXVpcG1lbnQBBQtkdWNrQXNzZXRJZAQLY3VycmVudFNlZ3MJALUJAgkBC3ZhbHVlT3JFbHNlAgkAoggBBQVlcUtleQIXLDssXyw7LF8sOyxfLDssXyw7LF8sOywCAV8EBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BAVuZXdFcQkAtQkCBQllcXVpcG1lbnQCAV8DCQECIT0CCQCQAwEFBW5ld0VxBQtOVU1TRUdNRU5UUwkAAgECFldyb25nIGVxdWlwbWVudCBzdHJpbmcECXRlbXBQcm9kQgkBBmRyZXNzQgQFC2N1cnJlbnRTZWdzCQEOcHJvZFN0clRvQnl0ZXMBCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QGBQNuaWwECHNlZ0JwQXV4CQCRAwIJALUJAgkAkQMCBQVuZXdFcQULc2VnQmFja3BhY2sCATsAAQQKYnVmZkVmZmVjdAMJAAACBQhzZWdCcEF1eAIAAAAEBGF1eDAJAJEDAgkAtQkCBQhzZWdCcEF1eAIBLAAAAwkAAAIFBGF1eDACAAAABAZpZHhDbnQJALUJAgUEYXV4MAIBOgQDaWR4CQCRAwIFBmlkeENudAAABANjbnQJAJEDAgUGaWR4Q250AAEDAwMDAwkAAAIFA2lkeAICMDYGCQAAAgUDaWR4AgIwNwYJAAACBQNpZHgCAjA4CQECIT0CBQNjbnQCAAcJAGYCCQENcGFyc2VJbnRWYWx1ZQEFA2NudAAABwkBDXBhcnNlSW50VmFsdWUBCQCRAwIJALUJAgkAkQMCBRBwcm9kdWN0aW9uTWF0cml4CQENcGFyc2VJbnRWYWx1ZQEFA2lkeAIBXwUKcklkeEVmZmVjdAAABAVzdGF0cwkBDGdldER1Y2tTdGF0cwQFBHRoaXMFC2R1Y2tBc3NldElkBQpidWZmRWZmZWN0BgQIbmV3UHJvZEIJAQZkcmVzc0IEBQVuZXdFcQUJdGVtcFByb2RCBwUFc3RhdHMECm5ld1Byb2RTdHIJAQ5ieXRlc1RvUHJvZFN0cgEFCG5ld1Byb2RCCQCUCgIJAM4IAgkAzAgCCQELU3RyaW5nRW50cnkCBQVlcUtleQUJZXF1aXBtZW50CQDMCAIJAQtTdHJpbmdFbnRyeQIFBWJwS2V5CQC6CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAkAzAgCBQpuZXdQcm9kU3RyBQNuaWwCAToJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDGtleUR1Y2tCdWZmcwEFC2R1Y2tBc3NldElkCQC5CQIJAMwIAgkApAMBCQCRAwIFBXN0YXRzAAcJAMwIAgkApAMBCQCRAwIFBXN0YXRzAAgJAMwIAgkApAMBCQCRAwIFBXN0YXRzAAkJAMwIAgkApAMBCQCRAwIFBXN0YXRzAAoJAMwIAgkApAMBCQCRAwIFBXN0YXRzAAsFA25pbAIBXwUDbmlsBQ1wcm9sb2dBY3Rpb25zAAABaQETaW5pdER1Y2tUb3VyQXR0ZW1wdAELZHVja0Fzc2V0SWQDCQECIT0CCAUBaQZjYWxsZXIFEnRvdXJuYW1lbnRDb250cmFjdAkAAgECDUFjY2VzcyBkZW5pZWQECWtleUhlYWx0aAkBDWtleUR1Y2tIZWFsdGgBBQtkdWNrQXNzZXRJZAQFbWF4SFAJAQltYXhIZWFsdGgBCQELdmFsdWVPckVsc2UCCQCfCAEJAQxrZXlEdWNrTGV2ZWwBBQtkdWNrQXNzZXRJZAAABAljdXJIZWFsdGgJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJa2V5SGVhbHRoBQVtYXhIUAQJY3VyTG9jS2V5CQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQEC2N1ckxvY2F0aW9uCQELdmFsdWVPckVsc2UCCQCiCAEFCWN1ckxvY0tleQUPREVGQVVMVExPQ0FUSU9OBAZsYXN0SWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUSdG91cm5hbWVudENvbnRyYWN0BQ1sYXN0VG91cklkS2V5AAAEDHRvdXJMb2NhdGlvbgkArAICCQCkAwEFBmxhc3RJZAIEX1RfMAkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOa2V5U2F2ZWRIZWFsdGgBBQtkdWNrQXNzZXRJZAUJY3VySGVhbHRoCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlrZXlIZWFsdGgFBW1heEhQCQDMCAIJAQtTdHJpbmdFbnRyeQIJARBrZXlTYXZlZExvY2F0aW9uAQULZHVja0Fzc2V0SWQFC2N1ckxvY2F0aW9uCQDMCAIJAQtTdHJpbmdFbnRyeQIFCWN1ckxvY0tleQUMdG91ckxvY2F0aW9uBQNuaWwFDHRvdXJMb2NhdGlvbgFpAQxicmVha0F0dGVtcHQABA1wcm9sb2dBY3Rpb25zCQEGcHJvbG9nAQUBaQQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBCQClCAEIBQFpBmNhbGxlcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQJY3VyTG9jS2V5CQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQEC2N1ckxvY2F0aW9uCQELdmFsdWVPckVsc2UCCQCiCAEFCWN1ckxvY0tleQUPREVGQVVMVExPQ0FUSU9OAwkBAiE9AgkAkQMCCQC1CQIFC2N1ckxvY2F0aW9uAgFfBQpsb2NJZHhUeXBlAgFUCQACAQIiWW91ciBkdWNrIGlzIG5vdCBpbiB0aGUgdG91cm5hbWVudAQLc2F2ZWRIZWFsdGgJARFAZXh0ck5hdGl2ZSgxMDU1KQEJAQ5rZXlTYXZlZEhlYWx0aAEFC2R1Y2tBc3NldElkBA1zYXZlZExvY2F0aW9uCQERQGV4dHJOYXRpdmUoMTA1OCkBCQEQa2V5U2F2ZWRMb2NhdGlvbgEFC2R1Y2tBc3NldElkCQCUCgIJAM0IAgkAzQgCBQ1wcm9sb2dBY3Rpb25zCQEMSW50ZWdlckVudHJ5AgkBDWtleUR1Y2tIZWFsdGgBBQtkdWNrQXNzZXRJZAULc2F2ZWRIZWFsdGgJAQtTdHJpbmdFbnRyeQIFCWN1ckxvY0tleQUNc2F2ZWRMb2NhdGlvbgULY3VyTG9jYXRpb24BaQEUYnJlYWtBdHRlbXB0Q2FsbGJhY2sAAwkBAiE9AggFAWkGY2FsbGVyBRJ0b3VybmFtZW50Q29udHJhY3QJAAIBAg1BY2Nlc3MgZGVuaWVkBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ1rZXlEdWNrSGVhbHRoAQULZHVja0Fzc2V0SWQJARFAZXh0ck5hdGl2ZSgxMDU1KQEJAQ5rZXlTYXZlZEhlYWx0aAEFC2R1Y2tBc3NldElkCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAkBEUBleHRyTmF0aXZlKDEwNTgpAQkBEGtleVNhdmVkTG9jYXRpb24BBQtkdWNrQXNzZXRJZAUDbmlsAhRicmVha0F0dGVtcHRDYWxsYmFjawFpARZleGl0VG91cm5hbWVudEludGVybmFsAQtkdWNrQXNzZXRJZAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECDUFjY2VzcyBkZW5pZWQEC3NhdmVkSGVhbHRoCQERQGV4dHJOYXRpdmUoMTA1NSkBCQEOa2V5U2F2ZWRIZWFsdGgBBQtkdWNrQXNzZXRJZAQNc2F2ZWRMb2NhdGlvbgkBEUBleHRyTmF0aXZlKDEwNTgpAQkBEGtleVNhdmVkTG9jYXRpb24BBQtkdWNrQXNzZXRJZAkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkBQtzYXZlZEhlYWx0aAkAzAgCCQELU3RyaW5nRW50cnkCCQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQFDXNhdmVkTG9jYXRpb24FA25pbAcBaQEPcHJvY2Vzc0RlbGl2ZXJ5AQtkdWNrQXNzZXRJZAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECDUFjY2VzcyBkZW5pZWQEBGFkZHIJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyBAlmdW5kVG90YWwJAQt2YWx1ZU9yRWxzZQIJAJoIAgUPZWNvbm9teUNvbnRyYWN0BQ9kZWxpdmVyeUZ1bmRLZXkAAAMJAGYCBRVNSU5fVVNEVF9GRUVfREVMSVZFUlkFCWZ1bmRUb3RhbAkAAgEJAKwCAgIgRGVsaXZlcnkgaXMgbm90IGF2YWlsYWJsZSwgZnVuZD0JAQpmaXhlZFBvaW50AgUJZnVuZFRvdGFsAAYEA25vdwgFCWxhc3RCbG9jawl0aW1lc3RhbXAECGNvdW50S2V5CQEUa2V5VXNlckRlbGl2ZXJ5Q291bnQBBQRhZGRyBAdsYXN0RGF5CQELdmFsdWVPckVsc2UCCQCfCAEJARZrZXlVc2VyTGFzdERlbGl2ZXJ5RGF5AQUEYWRkcgAABAV0b2RheQkAaQIFA25vdwUJREFZTUlMTElTBAVjb3VudAMJAAACBQdsYXN0RGF5BQV0b2RheQkBC3ZhbHVlT3JFbHNlAgkAnwgBBQhjb3VudEtleQAAAAAEBWFjcmVzCQELdmFsdWVPckVsc2UCCQCaCAIFDWFjcmVzQ29udHJhY3QJARprZXlBY3Jlc1N0YWtlZEFtb3VudEJ5VXNlcgEFBGFkZHIAAAQRYWxsb3dlZERlbGl2ZXJpZXMJAGQCBRdBTExPV0VEX0ZSRUVfREVMSVZFUklFUwkAaQIFBWFjcmVzBRpBQ1JFU19GT1JfREVMSVZFUllfQVRURU1QVAMJAGcCBQVjb3VudAURYWxsb3dlZERlbGl2ZXJpZXMJAAIBCQCsAgIJAKwCAgIRWW91IGFscmVhZHkgdXNlZCAJAKQDAQURYWxsb3dlZERlbGl2ZXJpZXMCHCBkZWxpdmVyeSBhdHRlbXB0cyBmb3IgdG9kYXkEDmdsb2JhbENvdW50S2V5CQEUa2V5RHVja0RlbGl2ZXJ5Q291bnQBBQtkdWNrQXNzZXRJZAQGcmV3YXJkCQD8BwQFD2Vjb25vbXlDb250cmFjdAISc2VuZERlbGl2ZXJ5UmV3YXJkCQDMCAIFBGFkZHIFA25pbAUDbmlsCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIFCGNvdW50S2V5CQBkAgUFY291bnQAAQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBFmtleVVzZXJMYXN0RGVsaXZlcnlEYXkBBQRhZGRyBQV0b2RheQkAzAgCCQEMSW50ZWdlckVudHJ5AgUOZ2xvYmFsQ291bnRLZXkJAGQCCQELdmFsdWVPckVsc2UCCQCfCAEFDmdsb2JhbENvdW50S2V5AAAAAQUDbmlsBQZyZXdhcmQBaQEHcm9iTGFuZAIHbWVzc2FnZQNzaWcEDXByb2xvZ0FjdGlvbnMJAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIiZXhhY3RseSAxIHBheW1lbnQgbXVzdCBiZSBhdHRhY2hlZAQDcG10CQCRAwIIBQFpCHBheW1lbnRzAAAEBndsZ0FtdAgFA3BtdAZhbW91bnQDAwkBASEBCQEJaXNEZWZpbmVkAQgFA3BtdAdhc3NldElkBgkBAiE9AgkBBXZhbHVlAQgFA3BtdAdhc3NldElkBQp3bGdBc3NldElkCQACAQIVV0xHT0xEIHBheW1lbnRzIG9ubHkhAwkBAiE9AgUGd2xnQW10BRJNSU5fV0xHT0xEX1JPQkJFUlkJAAIBCQCsAgIJAKwCAgISUGF5bWVudCBzaG91bGQgYmUgCQEKZml4ZWRQb2ludAIFEk1JTl9XTEdPTERfUk9CQkVSWQAIAgcgV0xHT0xEBARhZGRyCQClCAEIBQFpBmNhbGxlcgMJAQEhAQkAxBMDBQdtZXNzYWdlBQNzaWcFA3B1YgkAAgECGHNpZ25hdHVyZSBkb2VzIG5vdCBtYXRjaAQFcGFydHMJALwJAgkAsAkBBQdtZXNzYWdlAgE7BAZyb2JMb2cJALwJAgkAkQMCBQVwYXJ0cwAAAgF8BAJocAkAtQkCCQCRAwIFBnJvYkxvZwUIcmxIZWFsdGgCAV8EBWN1ckhQCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCaHAAAAQFbmV3SFAJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJocAABBAhwcm9kVXNlZAkAkQMCBQZyb2JMb2cFC3JsUHJvZHNVc2VkBAhsYXN0UGFydAkAtQkCCQCRAwIFBXBhcnRzAAECAXwEB3JvYlR5cGUJAJEDAgUIbGFzdFBhcnQFBnJsVHlwZQMJAQIhPQIFB3JvYlR5cGUCAUIJAAIBAh5Pbmx5IGJhbmsgcm9iYmVyeSBpcyBzdXBwb3J0ZWQEBHRpbWUJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQhsYXN0UGFydAULcmxUaW1lc3RhbXADAwkAZgIFBHRpbWUJAGQCCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAURRklWRU1JTlVURVNNSUxMSVMGCQBmAgkAZQIIBQlsYXN0QmxvY2sJdGltZXN0YW1wBRFGSVZFTUlOVVRFU01JTExJUwUEdGltZQkAAgEJAKwCAgkArAICCQCsAgICHHNpZ25hdHVyZSBvdXRkYXRlZDogbG9nVGltZT0JAKQDAQUEdGltZQIJLCBiY1RpbWU9CQCkAwEIBQlsYXN0QmxvY2sJdGltZXN0YW1wBAl0eEZyb21Nc2cJAJEDAgUIbGFzdFBhcnQFCHJsTGFzdFR4BAZsYXN0VHgJAQt2YWx1ZU9yRWxzZQIJAKIIAQkBEWtleUxhc3RUeElkQnlVc2VyAQUEYWRkcgIAAwkBAiE9AgUGbGFzdFR4BQl0eEZyb21Nc2cJAAIBCQCsAgIJAKwCAgkArAICAh5UeCBpZHMgZG9uJ3QgbWF0Y2ghIEluIHN0YXRlOiAFBmxhc3RUeAIKLCBpbiBtc2c6IAUJdHhGcm9tTXNnBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFBGFkZHICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQEBWVxS2V5CQEQa2V5RHVja0VxdWlwbWVudAEFC2R1Y2tBc3NldElkBAljdXJyZW50RXEJAQt2YWx1ZU9yRWxzZQIJAKIIAQUFZXFLZXkCFyw7LF8sOyxfLDssXyw7LF8sOyxfLDssBA8kdDAxMTU4NzcxMTU5ODgJARFzdWJ0cmFjdEVxdWlwbWVudAIFCWN1cnJlbnRFcQUIcHJvZFVzZWQEBW5ld0VxCAUPJHQwMTE1ODc3MTE1OTg4Al8xBA9zaG91bGRaZXJvQnVmZnMIBQ8kdDAxMTU4NzcxMTU5ODgCXzIECGlzQnBVc2VkCAUPJHQwMTE1ODc3MTE1OTg4Al8zBAtjdXJMb2NhdGlvbgkBC3ZhbHVlT3JFbHNlAgkAoggBCQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQFD0RFRkFVTFRMT0NBVElPTgMJAQ5pc0luVG91cm5hbWVudAIFEnRvdXJuYW1lbnRDb250cmFjdAULY3VyTG9jYXRpb24JAAIBAipZb3VyIGR1Y2sgaXMgdGFraW5nIHBhcnQgaW4gdGhlIHRvdXJuYW1lbnQEA25vdwgFCWxhc3RCbG9jawl0aW1lc3RhbXAECGNvdW50S2V5CQETa2V5VXNlclJvYmJlcnlDb3VudAEFBGFkZHIEB2xhc3REYXkJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFWtleVVzZXJMYXN0Um9iYmVyeURheQEFBGFkZHIAAAQFdG9kYXkJAGkCBQNub3cFCURBWU1JTExJUwQFY291bnQDCQAAAgUHbGFzdERheQUFdG9kYXkJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUIY291bnRLZXkAAAAABAVhY3JlcwkBC3ZhbHVlT3JFbHNlAgkAmggCBQ1hY3Jlc0NvbnRyYWN0CQEaa2V5QWNyZXNTdGFrZWRBbW91bnRCeVVzZXIBBQRhZGRyAAAEEGFsbG93ZWRSb2JiZXJpZXMJAGQCBRZBTExPV0VEX0ZSRUVfUk9CQkVSSUVTCQBpAgUFYWNyZXMFGUFDUkVTX0ZPUl9ST0JCRVJZX0FUVEVNUFQDCQBnAgUFY291bnQFEGFsbG93ZWRSb2JiZXJpZXMJAAIBCQCsAgIJAKwCAgIRWW91IGFscmVhZHkgdXNlZCAJAKQDAQUQYWxsb3dlZFJvYmJlcmllcwIbIHJvYmJlcnkgYXR0ZW1wdHMgZm9yIHRvZGF5BA5nbG9iYWxDb3VudEtleQkBE2tleUR1Y2tSb2JiZXJ5Q291bnQBBQtkdWNrQXNzZXRJZAQEbG9vdAMJAGYCBQVuZXdIUAAABAlmdW5kVG90YWwJAPAHAgUEdGhpcwUKd2xnQXNzZXRJZAQFcHJpemUDBQhpc0JwVXNlZAkAaAIAAgUSTUlOX1dMR09MRF9ST0JCRVJZCQBoAgAFBRJNSU5fV0xHT0xEX1JPQkJFUlkDCQBmAgUFcHJpemUFCWZ1bmRUb3RhbAkAAgEJAKwCAgkArAICCQCsAgICIlJvYmJlcnkgaXMgbm90IGF2YWlsYWJsZSwgZnVuZHMgPSAJAQpmaXhlZFBvaW50AgUJZnVuZFRvdGFsAAgCFCBXTEdPTEQsIHJlcXVpcmVkID0gCQEKZml4ZWRQb2ludAIFBXByaXplAAgJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQVwcml6ZQUKd2xnQXNzZXRJZAUDbmlsBQNuaWwJAJQKAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzggCCQDOCAIJAM4IAgUNcHJvbG9nQWN0aW9ucwUEbG9vdAMFD3Nob3VsZFplcm9CdWZmcwkAzAgCCQELU3RyaW5nRW50cnkCCQEMa2V5RHVja0J1ZmZzAQULZHVja0Fzc2V0SWQCCTBfMF8wXzBfMAUDbmlsBQNuaWwICQEXdXBkYXRlRHVja1N0YXRzSW50ZXJuYWwCBQtkdWNrQXNzZXRJZAMJAGYCBQVuZXdIUAAABQx4cFN1Y2Nlc3NSb2IFCXhwRmFpbFJvYgJfMQkBDEludGVnZXJFbnRyeQIJARhrZXlMYXN0Um9iYmVyeVRpbWVCeUR1Y2sBBQtkdWNrQXNzZXRJZAUDbm93CQEMSW50ZWdlckVudHJ5AgUIY291bnRLZXkJAGQCBQVjb3VudAABCQEMSW50ZWdlckVudHJ5AgkBFWtleVVzZXJMYXN0Um9iYmVyeURheQEFBGFkZHIFBXRvZGF5CQEMSW50ZWdlckVudHJ5AgUOZ2xvYmFsQ291bnRLZXkJAGQCCQELdmFsdWVPckVsc2UCCQCfCAEFDmdsb2JhbENvdW50S2V5AAAAAQkBC1N0cmluZ0VudHJ5AgUFZXFLZXkFBW5ld0VxCQEMSW50ZWdlckVudHJ5AgkBDWtleUR1Y2tIZWFsdGgBBQtkdWNrQXNzZXRJZAkAlgMBCQDMCAIFBW5ld0hQCQDMCAIAAAUDbmlsAAABaQELYnV5Um9ib0R1Y2sAAwkBASEBBRNLU19BTExPV19ST0JPX0RVQ0tTCQACAQIVRmVhdHVyZSBpcyB0dXJuZWQgb2ZmBA1wcm9sb2dBY3Rpb25zCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECHEV4YWN0bHkgb25lIHBheW1lbnQgcmVxdWlyZWQEA3BtdAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAAAwkBAiE9AggFA3BtdAdhc3NldElkBQt1c2R0QXNzZXRJZAkAAgECGkFsbG93ZWQgVVNEVCBwYXltZW50IG9ubHkhAwkBAiE9AggFA3BtdAZhbW91bnQFDlJPQk9fRFVDS19VU0RUCQACAQkArAICCQCsAgICG1BheW1lbnQgYXR0YWNoZWQgc2hvdWxkIGJlIAkBCmZpeGVkUG9pbnQCBQ5ST0JPX0RVQ0tfVVNEVAAGAgUgVVNEVAQHbmV4dE51bQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEPa2V5TmV4dFJvYm9EdWNrAAAABAVieXRlegkAmgMBBQduZXh0TnVtBARuYW1lCQCsAgIJAKwCAgULUk9CT19QUkVGSVgCAS0JALICAgkA3AQBBQVieXRlegAIBAVjb2xvcgkAsgICCQDcBAEJANQWAQUFYnl0ZXoABgQFaXNzdWUJAMIIBQUEbmFtZQkArAICAjdSb2JvIER1Y2sgTkZUIGZvciBXYXZlc0xhbmRzIGdhbWUsIGJhY2tncm91bmQgY29sb3IgPSAjBQVjb2xvcgABAAAHBAdhc3NldElkCQC4CAEFBWlzc3VlCQCUCgIJAM0IAgkAzQgCCQDNCAIJAM0IAgUNcHJvbG9nQWN0aW9ucwkBDEludGVnZXJFbnRyeQIJAQ9rZXlOZXh0Um9ib0R1Y2sACQBkAgUHbmV4dE51bQABBQVpc3N1ZQkBDlNjcmlwdFRyYW5zZmVyAwgFAWkMb3JpZ2luQ2FsbGVyAAEFB2Fzc2V0SWQJAQ5TY3JpcHRUcmFuc2ZlcgMFD2Vjb25vbXlDb250cmFjdAgFA3BtdAZhbW91bnQFC3VzZHRBc3NldElkCQCUCgIJANgEAQUHYXNzZXRJZAUFY29sb3IArUgx8A==", "height": 3280649, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 6Ecs2wULeZs81TzNNQfr3ZVrbyYB4eziHytn8vib6ss2 Next: DXTNpodtsUc25pZtwKYtocxkwX2r6zmvEX8AxdTNjwxj Diff:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let a = 86400000
5-
6-func b (c) = ("lastArbTimeUser_" + c)
7-
8-
9-func d (c) = ("acresStakedAmountByUser_" + c)
10-
11-
12-let e = 100000000
13-
14-let f = 3200
15-
16-let g = 4000
17-
18-let h = 3
19-
20-let i = ["Strength", "Accuracy", "Intellect", "Endurance", "Dexterity", "Level", "Health"]
21-
22-let j = 0
23-
24-let k = 1
25-
26-let l = 2
27-
28-let m = 3
29-
30-let n = 4
31-
32-let o = 0
33-
34-let p = 6
35-
36-let q = 2
37-
38-let r = 2
39-
40-let s = 30
41-
42-func t (u) = ("duckHealth_" + u)
43-
44-
45-func v (u) = ("duckChars_" + u)
46-
47-
48-func w (u) = ("duckXP_" + u)
49-
50-
51-func x (u) = ("duckLevel_" + u)
52-
53-
54-func y (u) = ("duckFreePoints_" + u)
55-
56-
57-func z (u) = ("duckEquipment_" + u)
58-
59-
60-func A (c) = ("userXP_" + c)
61-
62-
63-func B (c) = ("userLevel_" + c)
64-
65-
66-func C (c) = ("userFreePoints_" + c)
67-
68-
69-func D (u) = ("savedHealth_" + u)
70-
71-
72-func E (u) = ("savedLocation_" + u)
73-
74-
75-func F (u) = ("duckBuffs_" + u)
76-
77-
78-func G (u) = ("lastRobberyTime_" + u)
79-
80-
81-func H (u) = ("totalRobberyCountByDuck_" + u)
82-
83-
84-func I (c) = ("userRobberyCount_" + c)
85-
86-
87-func J (c) = ("userLastRobberyDay_" + c)
88-
89-
90-func K (u) = ("totalDeliveryCountByDuck_" + u)
91-
92-
93-func L (c) = ("userDeliveryCount_" + c)
94-
95-
96-func M (c) = ("userLastDeliveryDay_" + c)
97-
98-
99-let N = 10000
100-
101-let O = 10000
102-
103-let P = 2000
104-
105-let Q = 10000
106-
107-let R = 2000
108-
109-let S = 100000
110-
111-let T = 1000000
112-
113-let U = 5000000
114-
115-let V = 10000
116-
117-let W = 1000000
118-
119-let X = 1000000
120-
121-let Y = 10000
122-
123-func Z (aa) = fraction(f, pow(aa, 4, g, 4, 4, DOWN), e)
124-
125-
126-func ab (ac) = (100 + ac)
127-
128-
129-func ad (ae,af) = {
130- let ag = Z(af)
131-[ag, (h * (ag - ae))]
132- }
133-
134-
135-func ah (ai,u,aj,ak) = {
136- let al = split(valueOrElse(getString(ai, v(u)), "0_0_0_0_0"), "_")
137- let am = valueOrElse(getInteger(ai, x(u)), 0)
138- let an = valueOrElse(getInteger(ai, t(u)), ab(am))
139- let ao = split(valueOrElse(getString(ai, F(u)), "0_0_0_0_0"), "_")
140- ([parseIntValue(al[j]), parseIntValue(al[k]), parseIntValue(al[l]), parseIntValue(al[m]), parseIntValue(al[n]), am, an] ++ (if (ak)
141- then [aj, aj, aj, aj, aj]
142- else [parseIntValue(ao[j]), parseIntValue(ao[k]), parseIntValue(ao[l]), parseIntValue(ao[m]), parseIntValue(ao[n])]))
143- }
144-
145-
146-let ap = "LAND"
147-
148-let aq = "DUCK"
149-
150-let ar = "ROBO"
151-
152-let as = "PRESALE"
153-
154-let at = 6
155-
156-let au = 25
157-
158-let av = 3456000
159-
160-let aw = 10000000000
161-
162-let ax = "Africa_F_Africa"
163-
164-let ay = 39637
165-
166-let az = 10
167-
168-let aA = 50000
169-
170-let aB = 100000000
171-
172-let aC = 0
173-
174-let aD = 200000000
175-
176-let aE = 0
177-
178-let aF = 200000000
179-
180-let aG = ["First Aid Kit L1", "First Aid Kit L2", "First Aid Kit L3", "Backpack L1", "Backpack L2", "Backpack L3", "Food Ration L1", "Food Ration L2", "Food Ration L3", "Jet Pack L1", "Jet Pack L2", "Jet Pack L3", "Shield L1", "Shield L2", "Shield L3", "Mine L1", "Mine L2", "Mine L3", "Trap L1", "Trap L2", "Trap L3", "Boom-Dog L1", "Boom-Dog L2", "Boom-Dog L3"]
181-
182-let aH = ["Americas", "Europe", "Asia", "Africa", "Oceania"]
183-
184-let aI = 10000000
185-
186-let aJ = ["8_8_8_17_17_42_12_0_30_0,0,0,0,0,0,0_", "8_8_8_17_17_42_24_0_60_0,0,5,2,0,0,0_", "8_8_8_17_17_42_36_0_120_0,0,10,4,0,0,0_", "8_19_19_8_27_19_26_1_20_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_52_1_40_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_78_1_80_0,0,0,0,0,0,0_001", "8_8_8_8_8_60_13_2_2_0,0,0,0,0,0,0_011", "8_8_8_8_8_60_26_2_4_0,0,0,0,0,0,0_011", "8_8_8_8_8_60_39_2_8_0,0,0,0,0,0,0_011", "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_10_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_22_4_20_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_33_4_30_0,0,0,0,0,0,0_201", "4_13_22_4_35_22_23_0_50,1,0_0,0,0,0,0,0,0_", "4_13_22_4_35_22_46_0_50,1,1_0,2,5,0,0,0,0_", "4_13_22_4_35_22_69_0_50,2,1_0,5,10,0,0,0,0_", "5_25_40_5_10_15_20_1_30,1,1_0,0,0,0,0,0,0_", "5_25_40_5_10_15_40_1_30,1,2_2,1,3,0,0,0,0_", "5_25_40_5_10_15_60_1_30,1,3_5,2,8,0,0,0,0_", "23_23_5_20_23_6_35_2_100_0,0,0,0,0,0,0_", "23_23_5_20_23_6_70_2_150_0,0,0,0,0,0,0_", "23_23_5_20_23_6_105_2_200_0,0,0,0,0,0,0_"]
187-
188-let aK = 6
189-
190-let aL = 8
191-
192-let aM = 9
193-
194-let aN = 10
195-
196-let aO = 10
197-
198-let aP = 0
199-
200-let aQ = 1
201-
202-let aR = 2
203-
204-let aS = 3
205-
206-let aT = 4
207-
208-let aU = 0
209-
210-let aV = 1
211-
212-let aW = 2
213-
214-let aX = 3
215-
216-let aY = 0
217-
218-let aZ = 1
219-
220-let ba = 2
221-
222-let bb = 3
223-
224-let bc = 0
225-
226-let bd = 1
227-
228-let be = 2
229-
230-func bf (bg) = ("no_" + bg)
231-
232-
233-func bh (bg) = ("lcna_" + bg)
234-
235-
236-func bi (bg) = ("st_" + bg)
237-
238-
239-func bj (bk,bg) = makeString(["las", bk, bg], "_")
240-
241-
242-func bl (bm,bg,bn) = ((((("sttao_" + bm) + "_") + bg) + "_") + bn)
243-
244-
245-func bo (bp) = ("wh_" + bp)
246-
247-
248-func bq (bg) = ("infraLevel_" + bg)
249-
250-
251-func br (bg) = ("duckCustomNameByAssetId_" + bg)
252-
253-
254-func bs (c) = ("accountCustomNameByAddr_" + c)
255-
256-
257-func bt (c) = ("accRefBy_" + c)
258-
259-
260-func bu (u) = ("onboardArtActivatedOnDuck_" + u)
261-
262-
263-func bv (c) = ("onboardArtActivatedDuckBy_" + c)
264-
265-
266-func bw (c) = ("accReferrals_" + c)
267-
268-
269-func bx (bg) = ("duckOwner_" + bg)
270-
271-
272-func by (bn) = ("stakedDuckByOwner_" + bn)
273-
274-
275-func bz (u) = ("backPack_" + u)
276-
277-
278-func bA (u) = ("duckLocation_" + u)
279-
280-
281-func bB (bC) = ("%s%s__userGwlReleaseTime__" + bC)
282-
283-
284-func bD () = "emergencyWarehouseProducts"
285-
286-
287-let bE = "deliveryFund"
288-
289-let bF = "%s__lastTourId"
290-
291-func bG (bH) = ("%s%d__tourStaticData__" + toString(bH))
292-
293-
294-func bI (bH) = ("%s%d__tourDynamicData__" + toString(bH))
295-
296-
297-func bJ (bH,u) = makeString(["%s%d%s__bestResultByTourAndDuck", toString(bH), u], "__")
298-
299-
300-let bK = 0
301-
302-let bL = 1
303-
304-let bM = 6
305-
306-let bN = 1
307-
308-func bO (bP,bH) = {
309- let bQ = split(valueOrErrorMessage(getString(bP, bG(bH)), (("Error reading tournament " + toString(bH)) + " data")), "__")
310- let bR = split_4C(valueOrErrorMessage(getString(bP, bI(bH)), (("Error reading tournament " + toString(bH)) + " data")), "__")
311-[bQ, bR]
312- }
313-
314-
315-func bS (bP,bT) = {
316- let bU = valueOrElse(getInteger(bP, bF), 0)
317- let bV = split(bT, "_")
318- let bW = lastBlock.timestamp
319- let bX = bO(bP, bU)
320- let bQ = bX[bK]
321- let bR = bX[bL]
322- if (if (if ((bV[bd] == "T"))
323- then (parseIntValue(bV[bc]) == bU)
324- else false)
325- then (bR[bN] == "INPROGRESS")
326- else false)
327- then (parseIntValue(bQ[bM]) > bW)
328- else false
329- }
330-
331-
332-func bY (bP,bT) = {
333- let bU = valueOrElse(getInteger(bP, bF), 0)
334- let bV = split(bT, "_")
335- let bW = lastBlock.timestamp
336- let bX = bO(bP, bU)
337- let bQ = bX[bK]
338- let bR = bX[bL]
339- let bZ = bV[bd]
340- if (if (if ((bV[bd] == "T"))
341- then (parseIntValue(bV[bc]) == bU)
342- else false)
343- then (bR[bN] == "INPROGRESS")
344- else false)
345- then (parseIntValue(bQ[bM]) > bW)
346- else false
347- }
348-
349-
350-func ca (cb) = (parseIntValue(cb[aK]) * aI)
351-
352-
353-func cc (cd,ce,cf) = throw(((((("Cheat attempt: oldLoc=" + cd) + ", newLoc=") + ce) + ", case=") + toString(cf)))
354-
355-
356-let cg = false
357-
358-let ch = false
359-
360-let ci = false
361-
362-let cj = 86400000
363-
364-let ck = take(drop(this.bytes, 1), 1)
365-
366-let cl = {
367- let cm = ck
368- if ((base58'2W' == cm))
369- then if (cg)
4+let a = false
5+
6+let b = false
7+
8+let c = false
9+
10+let d = 86400000
11+
12+let e = take(drop(this.bytes, 1), 1)
13+
14+let f = {
15+ let g = e
16+ if ((base58'2W' == g))
17+ then if (a)
37018 then base58'CWsMtTZC5BjjoL4Q1ayW4Wwb1ehGACQB6DrKyPgotKfm'
37119 else base58'6LfPuKJjLgekmncBhMg2LZyMTNVzZBccXR28ySXm9uXD'
372- else if ((base58'2T' == cm))
20+ else if ((base58'2T' == g))
37321 then base58'6LfPuKJjLgekmncBhMg2LZyMTNVzZBccXR28ySXm9uXD'
37422 else throw("Unknown chain")
37523 }
37624
377-let cn = {
378- let cm = ck
379- if ((base58'2W' == cm))
25+let h = {
26+ let g = e
27+ if ((base58'2W' == g))
38028 then base58'9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi'
381- else if ((base58'2T' == cm))
29+ else if ((base58'2T' == g))
38230 then base58'6mWwf9mZBjVgkC54idpyaZLQfAosD914wT8fGf2iiY63'
38331 else throw("Unknown chain")
38432 }
38533
386-let co = {
387- let cm = ck
388- if ((base58'2W' == cm))
34+let i = {
35+ let g = e
36+ if ((base58'2W' == g))
38937 then "3PQCuvFbvh4LkPUnrnU1z3jnbA1p9m3WNhv"
390- else if ((base58'2T' == cm))
38+ else if ((base58'2T' == g))
39139 then "3MumkGGztCKAXpWDqxkddofqXSUbqQkvSJy"
39240 else throw("Unknown chain")
39341 }
39442
395-let cp = {
396- let cm = ck
397- if ((base58'2W' == cm))
43+let j = {
44+ let g = e
45+ if ((base58'2W' == g))
46+ then "3P4UH3T9nXpMNpUmSmQjPmEz3G85t3zn6eA"
47+ else if ((base58'2T' == g))
48+ then "3NBPx1Fciu3JQNEGZ21jSnTdutLNGGBUSXh"
49+ else throw("Unknown chain")
50+ }
51+
52+let k = {
53+ let g = e
54+ if ((base58'2W' == g))
39855 then 10000000000
399- else if ((base58'2T' == cm))
56+ else if ((base58'2T' == g))
40057 then 100000000
40158 else throw("Unknown chain")
40259 }
40360
404-let cq = {
405- let cm = ck
406- if ((base58'2W' == cm))
407- then cj
408- else if ((base58'2T' == cm))
61+let l = {
62+ let g = e
63+ if ((base58'2W' == g))
64+ then d
65+ else if ((base58'2T' == g))
40966 then 60000
41067 else throw("Unknown chain")
41168 }
41269
413-let cr = "__"
414-
415-let cs = 1000000
416-
417-let ct = 100000000
418-
419-let cu = 25
420-
421-let cv = 100
422-
423-let cw = 225
424-
425-let cx = 400
426-
427-let cy = 625
428-
429-let cz = [0, 1, 2, 3, 4, 5]
430-
431-func cA (cB,cC) = valueOrErrorMessage(getString(cB, cC), makeString(["mandatory ", toString(cB), ".", cC, " is not defined"], ""))
432-
433-
434-let cD = 1
435-
436-let cE = 2
437-
438-let cF = 3
439-
440-let cG = 4
441-
442-let cH = 7
443-
444-let cI = 8
445-
446-func cJ () = "%s__restConfig"
447-
448-
449-func cK () = "%s__restAddr"
450-
451-
452-func cL (cM) = split_4C(cA(cM, cJ()), cr)
453-
454-
455-func cN (cO,cP) = valueOrErrorMessage(addressFromString(cO[cP]), ("Rest cfg doesn't contain address at index " + toString(cP)))
456-
457-
458-let cQ = addressFromStringValue(valueOrElse(getString(this, cK()), co))
459-
460-let cO = cL(cQ)
461-
462-let ai = cN(cO, cD)
463-
464-let cR = cN(cO, cE)
465-
466-let cS = cN(cO, cF)
467-
468-let cT = cN(cO, cG)
469-
470-let cU = cN(cO, cH)
471-
472-let cV = cN(cO, cI)
473-
474-let cW = 0
475-
476-let cX = 1
477-
478-let cY = 2
479-
480-let cZ = 3
481-
482-let da = "wlg_assetId"
483-
484-let db = valueOrErrorMessage(getBinary(cT, da), "WLGOLD is not issued yet")
485-
486-let dc = "acresAssetId"
487-
488-let dd = valueOrErrorMessage(getBinary(cV, dc), "ACRES is not issued yet")
489-
490-let de = 2
491-
492-func df (cB) = ("finishBlockFor_" + cB)
493-
494-
495-func dg () = "resTypesProportions"
496-
497-
498-func dh (di) = ("resTypesByContinent_" + di)
499-
500-
501-func dj (bn) = ("stakedLandsByOwner_" + bn)
502-
503-
504-func dk (bn) = ("stakedPiecesByOwner_" + bn)
505-
506-
507-func dl (dm) = {
508- let cm = dm
509- if ($isInstanceOf(cm, "String"))
70+let m = "__"
71+
72+let n = 1000000
73+
74+let o = 100000000
75+
76+let p = 25
77+
78+let q = 100
79+
80+let r = 225
81+
82+let s = 400
83+
84+let t = 625
85+
86+let u = [0, 1, 2, 3, 4, 5]
87+
88+func v (w,x) = valueOrErrorMessage(getString(w, x), makeString(["mandatory ", toString(w), ".", x, " is not defined"], ""))
89+
90+
91+let y = 1
92+
93+let z = 2
94+
95+let A = 3
96+
97+let B = 4
98+
99+let C = 7
100+
101+let D = 8
102+
103+func E () = "%s__restConfig"
104+
105+
106+func F () = "%s__restAddr"
107+
108+
109+func G (H) = split_4C(v(H, E()), m)
110+
111+
112+func I (J,K) = valueOrErrorMessage(addressFromString(J[K]), ("Rest cfg doesn't contain address at index " + toString(K)))
113+
114+
115+let L = addressFromStringValue(valueOrElse(getString(this, F()), i))
116+
117+let J = G(L)
118+
119+let M = I(J, y)
120+
121+let N = I(J, z)
122+
123+let O = I(J, A)
124+
125+let P = I(J, B)
126+
127+let Q = I(J, C)
128+
129+let R = I(J, D)
130+
131+let S = 0
132+
133+let T = 1
134+
135+let U = 2
136+
137+let V = 3
138+
139+let W = "wlg_assetId"
140+
141+let X = valueOrErrorMessage(getBinary(P, W), "WLGOLD is not issued yet")
142+
143+let Y = "acresAssetId"
144+
145+let Z = valueOrErrorMessage(getBinary(R, Y), "ACRES is not issued yet")
146+
147+let aa = 2
148+
149+func ab (w) = ("finishBlockFor_" + w)
150+
151+
152+func ac () = "resTypesProportions"
153+
154+
155+func ad (ae) = ("resTypesByContinent_" + ae)
156+
157+
158+func af (ag) = ("stakedLandsByOwner_" + ag)
159+
160+
161+func ah (ag) = ("stakedPiecesByOwner_" + ag)
162+
163+
164+func ai (aj) = {
165+ let g = aj
166+ if ($isInstanceOf(g, "String"))
510167 then {
511- let dn = cm
512- dn
168+ let ak = g
169+ ak
513170 }
514171 else throw("fail to cast into String")
515172 }
516173
517174
518-func do (dm) = {
519- let cm = dm
520- if ($isInstanceOf(cm, "Int"))
175+func al (aj) = {
176+ let g = aj
177+ if ($isInstanceOf(g, "Int"))
521178 then {
522- let dp = cm
523- dp
179+ let am = g
180+ am
524181 }
525182 else throw("fail to cast into Int")
526183 }
527184
528185
529-func dq (dm) = {
530- let cm = dm
531- if ($isInstanceOf(cm, "List[Any]"))
186+func an (aj) = {
187+ let g = aj
188+ if ($isInstanceOf(g, "List[Any]"))
532189 then {
533- let dr = cm
534- dr
190+ let ao = g
191+ ao
535192 }
536193 else throw("fail to cast into List[Any]")
537194 }
538195
539196
540-func ds (dm) = {
541- let cm = dm
542- if ($isInstanceOf(cm, "Boolean"))
197+func ap (aj) = {
198+ let g = aj
199+ if ($isInstanceOf(g, "Boolean"))
543200 then {
544- let dn = cm
545- dn
201+ let ak = g
202+ ak
546203 }
547204 else throw("fail to cast into Boolean")
548205 }
549206
550207
551-func dt (du) = {
552- let cm = du
553- if (("S" == cm))
554- then cu
555- else if (("M" == cm))
556- then cv
557- else if (("L" == cm))
558- then cw
559- else if (("XL" == cm))
560- then cx
561- else if (("XXL" == cm))
562- then cy
208+func aq (ar) = {
209+ let g = ar
210+ if (("S" == g))
211+ then p
212+ else if (("M" == g))
213+ then q
214+ else if (("L" == g))
215+ then r
216+ else if (("XL" == g))
217+ then s
218+ else if (("XXL" == g))
219+ then t
563220 else throw("Unknown land size")
564221 }
565222
566223
567-func dv (dn) = isDefined(parseInt(dn))
568-
569-
570-func dw () = "contractsBlocked"
571-
572-
573-func dx (c) = ("lastTxIdByUser_" + c)
574-
575-
576-func dy (dz,dA) = {
577- let dB = pow(10, 0, dA, 0, 0, DOWN)
578- let dC = toString((dz % dB))
579- let dD = drop(toString(dB), (1 + size(dC)))
580- (((toString((dz / dB)) + ".") + dD) + dC)
581- }
582-
583-
584-func dE (dF,dG,dH) = if ((0 >= dF))
224+func as (ak) = isDefined(parseInt(ak))
225+
226+
227+func at () = "contractsBlocked"
228+
229+
230+func au (av) = ("lastTxIdByUser_" + av)
231+
232+
233+func aw (ax,ay) = {
234+ let az = pow(10, 0, ay, 0, 0, DOWN)
235+ let aA = toString((ax % az))
236+ let aB = drop(toString(az), (1 + size(aA)))
237+ (((toString((ax / az)) + ".") + aB) + aA)
238+ }
239+
240+
241+func aC (aD,aE,aF) = if ((0 >= aD))
585242 then throw("maxValue should be > 0")
586243 else {
587- let dI = sha256((dG + dH))
588- (toInt(dI) % dF)
589- }
590-
591-
592-let dJ = {
593- let cm = ck
594- if ((base58'2W' == cm))
244+ let aG = sha256((aE + aF))
245+ (toInt(aG) % aD)
246+ }
247+
248+
249+func aH () = min([lastBlock.timestamp, 1727740799000])
250+
251+
252+let aI = "LAND"
253+
254+let aJ = "DUCK"
255+
256+let aK = "ROBO"
257+
258+let aL = "PRESALE"
259+
260+let aM = 6
261+
262+let aN = 25
263+
264+let aO = 3456000
265+
266+let aP = 10000000000
267+
268+let aQ = "Africa_F_Africa"
269+
270+let aR = 39637
271+
272+let aS = 10
273+
274+let aT = 50000
275+
276+let aU = 10
277+
278+let aV = 100000000
279+
280+let aW = 0
281+
282+let aX = 200000000
283+
284+let aY = 0
285+
286+let aZ = 200000000
287+
288+let ba = ["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", "Mine L1", "Mine L2", "Mine L3", "Trap L1", "Trap L2", "Trap L3", "Boom-Dog L1", "Boom-Dog L2", "Boom-Dog L3"]
289+
290+let bb = ["Americas", "Europe", "Asia", "Africa", "Oceania"]
291+
292+let bc = 10000000
293+
294+let bd = ["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_011", "8_8_8_8_8_60_26_2_4_0,0,0,0,0,0,0_011", "8_8_8_8_8_60_39_2_8_0,0,0,0,0,0,0_011", "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_10_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_22_4_20_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_33_4_30_0,0,0,0,0,0,0_201", "4_13_22_4_35_22_23_0_50,1,0_0,0,0,0,0,0,0_", "4_13_22_4_35_22_46_0_50,1,1_0,2,5,0,0,0,0_", "4_13_22_4_35_22_69_0_50,2,1_0,5,10,0,0,0,0_", "5_25_40_5_10_15_20_1_30,1,1_0,0,0,0,0,0,0_", "5_25_40_5_10_15_40_1_30,1,2_2,1,3,0,0,0,0_", "5_25_40_5_10_15_60_1_30,1,3_5,2,8,0,0,0,0_", "23_23_5_20_23_6_35_2_100_0,0,0,0,0,0,0_", "23_23_5_20_23_6_70_2_150_0,0,0,0,0,0,0_", "23_23_5_20_23_6_105_2_200_0,0,0,0,0,0,0_"]
295+
296+let be = 6
297+
298+let bf = 8
299+
300+let bg = 9
301+
302+let bh = 10
303+
304+let bi = 10
305+
306+let bj = 0
307+
308+let bk = 1
309+
310+let bl = 2
311+
312+let bm = 3
313+
314+let bn = 4
315+
316+let bo = 0
317+
318+let bp = 1
319+
320+let bq = 2
321+
322+let br = 3
323+
324+let bs = 0
325+
326+let bt = 1
327+
328+let bu = 2
329+
330+let bv = 3
331+
332+let bw = 0
333+
334+let bx = 1
335+
336+let by = 2
337+
338+func bz (bA) = ("no_" + bA)
339+
340+
341+func bB (bA) = ("lcna_" + bA)
342+
343+
344+func bC (bA) = ("st_" + bA)
345+
346+
347+func bD (bE,bA) = makeString(["las", bE, bA], "_")
348+
349+
350+func bF (bG,bA,ag) = ((((("sttao_" + bG) + "_") + bA) + "_") + ag)
351+
352+
353+func bH (bI) = ("wh_" + bI)
354+
355+
356+func bJ (bA) = ("infraLevel_" + bA)
357+
358+
359+func bK (bA) = ("duckCustomNameByAssetId_" + bA)
360+
361+
362+func bL (av) = ("accountCustomNameByAddr_" + av)
363+
364+
365+func bM (av) = ("accRefBy_" + av)
366+
367+
368+func bN (bO) = ("onboardArtActivatedOnDuck_" + bO)
369+
370+
371+func bP (av) = ("onboardArtActivatedDuckBy_" + av)
372+
373+
374+func bQ (av) = ("accReferrals_" + av)
375+
376+
377+func bR (bA) = ("duckOwner_" + bA)
378+
379+
380+func bS (ag) = ("stakedDuckByOwner_" + ag)
381+
382+
383+func bT (bO) = ("backPack_" + bO)
384+
385+
386+func bU (bO) = ("duckLocation_" + bO)
387+
388+
389+func bV (bW) = ("%s%s__userGwlReleaseTime__" + bW)
390+
391+
392+func bX () = "emergencyWarehouseProducts"
393+
394+
395+let bY = "deliveryFund"
396+
397+let bZ = "%s__lastTourId"
398+
399+func ca (cb) = ("%s%d__tourStaticData__" + toString(cb))
400+
401+
402+func cc (cb) = ("%s%d__tourDynamicData__" + toString(cb))
403+
404+
405+func cd (cb,bO) = makeString(["%s%d%s__bestResultByTourAndDuck", toString(cb), bO], "__")
406+
407+
408+let ce = 0
409+
410+let cf = 1
411+
412+let cg = 6
413+
414+let ch = 1
415+
416+func ci (cj,cb) = {
417+ let ck = split(valueOrErrorMessage(getString(cj, ca(cb)), (("Error reading tournament " + toString(cb)) + " data")), "__")
418+ let cl = split_4C(valueOrErrorMessage(getString(cj, cc(cb)), (("Error reading tournament " + toString(cb)) + " data")), "__")
419+[ck, cl]
420+ }
421+
422+
423+func cm (cj,cn) = {
424+ let co = valueOrElse(getInteger(cj, bZ), 0)
425+ let cp = split(cn, "_")
426+ let cq = lastBlock.timestamp
427+ let cr = ci(cj, co)
428+ let ck = cr[ce]
429+ let cl = cr[cf]
430+ if (if (if ((cp[bx] == "T"))
431+ then (parseIntValue(cp[bw]) == co)
432+ else false)
433+ then (cl[ch] == "INPROGRESS")
434+ else false)
435+ then (parseIntValue(ck[cg]) > cq)
436+ else false
437+ }
438+
439+
440+func cs (cj,cn) = {
441+ let co = valueOrElse(getInteger(cj, bZ), 0)
442+ let cp = split(cn, "_")
443+ let cq = lastBlock.timestamp
444+ let cr = ci(cj, co)
445+ let ck = cr[ce]
446+ let cl = cr[cf]
447+ let ct = cp[bx]
448+ if (if (if ((cp[bx] == "T"))
449+ then (parseIntValue(cp[bw]) == co)
450+ else false)
451+ then (cl[ch] == "INPROGRESS")
452+ else false)
453+ then (parseIntValue(ck[cg]) > cq)
454+ else false
455+ }
456+
457+
458+func cu (cv) = (parseIntValue(cv[be]) * bc)
459+
460+
461+func cw (cx,cy,cz) = throw(((((("Cheat attempt: oldLoc=" + cx) + ", newLoc=") + cy) + ", case=") + toString(cz)))
462+
463+
464+let cA = 100000000
465+
466+let cB = 3200
467+
468+let cC = 4000
469+
470+let cD = 3
471+
472+let cE = ["Strength", "Accuracy", "Intellect", "Endurance", "Dexterity", "Level", "Health"]
473+
474+let cF = 0
475+
476+let cG = 1
477+
478+let cH = 2
479+
480+let cI = 3
481+
482+let cJ = 4
483+
484+let cK = 0
485+
486+let cL = 6
487+
488+let cM = 2
489+
490+let cN = 2
491+
492+let cO = 30
493+
494+func cP (bO) = ("duckHealth_" + bO)
495+
496+
497+func cQ (bO) = ("duckChars_" + bO)
498+
499+
500+func cR (bO) = ("duckXP_" + bO)
501+
502+
503+func cS (bO) = ("duckLevel_" + bO)
504+
505+
506+func cT (bO) = ("duckFreePoints_" + bO)
507+
508+
509+func cU (bO) = ("duckEquipment_" + bO)
510+
511+
512+func cV (av) = ("userXP_" + av)
513+
514+
515+func cW (av) = ("userLevel_" + av)
516+
517+
518+func cX (av) = ("userFreePoints_" + av)
519+
520+
521+func cY (bO) = ("savedHealth_" + bO)
522+
523+
524+func cZ (bO) = ("savedLocation_" + bO)
525+
526+
527+func da (bO) = ("duckBuffs_" + bO)
528+
529+
530+func db (bO) = ("lastRobberyTime_" + bO)
531+
532+
533+func dc (bO) = ("totalRobberyCountByDuck_" + bO)
534+
535+
536+func dd (av) = ("userRobberyCount_" + av)
537+
538+
539+func de (av) = ("userLastRobberyDay_" + av)
540+
541+
542+func df (bO) = ("totalDeliveryCountByDuck_" + bO)
543+
544+
545+func dg (av) = ("userDeliveryCount_" + av)
546+
547+
548+func dh (av) = ("userLastDeliveryDay_" + av)
549+
550+
551+let di = 10000
552+
553+let dj = 10000
554+
555+let dk = 2000
556+
557+let dl = 10000
558+
559+let dm = 2000
560+
561+let dn = 100000
562+
563+let do = 1000000
564+
565+let dp = 5000000
566+
567+let dq = 10000
568+
569+let dr = 1000000
570+
571+let ds = 1000000
572+
573+let dt = 10000
574+
575+func du (dv) = fraction(cB, pow(dv, 4, cC, 4, 4, DOWN), cA)
576+
577+
578+func dw (dx) = (100 + dx)
579+
580+
581+func dy (dz,dA) = {
582+ let dB = du(dA)
583+[dB, (cD * (dB - dz))]
584+ }
585+
586+
587+func dC (M,bO,dD,dE) = {
588+ let dF = split(valueOrElse(getString(M, cQ(bO)), "0_0_0_0_0"), "_")
589+ let dG = valueOrElse(getInteger(M, cS(bO)), 0)
590+ let dH = valueOrElse(getInteger(M, cP(bO)), dw(dG))
591+ let dI = split(valueOrElse(getString(M, da(bO)), "0_0_0_0_0"), "_")
592+ ([parseIntValue(dF[cF]), parseIntValue(dF[cG]), parseIntValue(dF[cH]), parseIntValue(dF[cI]), parseIntValue(dF[cJ]), dG, dH] ++ (if (dE)
593+ then [dD, dD, dD, dD, dD]
594+ else [parseIntValue(dI[cF]), parseIntValue(dI[cG]), parseIntValue(dI[cH]), parseIntValue(dI[cI]), parseIntValue(dI[cJ])]))
595+ }
596+
597+
598+let dJ = 86400000
599+
600+func dK (av) = ("lastArbTimeUser_" + av)
601+
602+
603+func dL (av) = ("acresStakedAmountByUser_" + av)
604+
605+
606+let dM = {
607+ let g = e
608+ if ((base58'2W' == g))
595609 then addressFromStringValue("3PEktVux2RhchSN63DsDo4b4mz4QqzKSeDv")
596- else if ((base58'2T' == cm))
610+ else if ((base58'2T' == g))
597611 then this
598612 else throw("Unknown chain")
599613 }
600614
601-let dK = {
602- let cm = ck
603- if ((base58'2W' == cm))
615+let dN = {
616+ let g = e
617+ if ((base58'2W' == g))
604618 then addressFromStringValue("3PDVuU45H7Eh5dmtNbnRNRStGwULA7NY6Hb")
605- else if ((base58'2T' == cm))
619+ else if ((base58'2T' == g))
606620 then this
607621 else throw("Unknown chain")
608622 }
609623
610-let dL = 300000
611-
612-let dM = 5000000
613-
614-let dN = 50
615-
616-let dO = 10000000
617-
618-let dP = {
619- let cm = ck
620- if ((base58'2W' == cm))
624+let dO = 300000
625+
626+let dP = 5000000
627+
628+let dQ = 50
629+
630+let dR = 10000000
631+
632+let dS = {
633+ let g = e
634+ if ((base58'2W' == g))
621635 then 252289527462
622- else if ((base58'2T' == cm))
636+ else if ((base58'2T' == g))
623637 then 2522895274
624638 else throw("Unknown chain")
625639 }
626640
627-let dQ = {
628- let cm = ck
629- if ((base58'2W' == cm))
641+let dT = {
642+ let g = e
643+ if ((base58'2W' == g))
630644 then 250000000
631- else if ((base58'2T' == cm))
645+ else if ((base58'2T' == g))
632646 then 250000000
633647 else throw("Unknown chain")
634648 }
635649
636-let dR = 100000
637-
638-let dS = 2500000000
639-
640-let dT = toBigInt(5)
641-
642-let dU = toBigInt(20)
643-
644-let dV = toBigInt((20 * 20))
645-
646-let dW = toBigInt(((20 * 20) * 20))
647-
648-let dX = toBigInt((((20 * 20) * 20) * 20))
649-
650-let dY = toBigInt(((((20 * 20) * 20) * 20) * 20))
651-
652-let dZ = 500
653-
654-func ea () = "nextLandNum"
655-
656-
657-func eb (ec) = ("lcn_" + ec)
658-
659-
660-func ed (ee) = ("la_" + ee)
661-
662-
663-func ef (bg,bn) = ((("ilao_" + bg) + "_") + bn)
664-
665-
666-func eg (ee) = ("lo_" + ee)
667-
668-
669-func eh (ec) = ("duckByCustomName_" + ec)
670-
671-
672-func ei (ec) = ("accountByCustomName_" + ec)
673-
674-
675-func ej () = "oldiesList"
676-
677-
678-func ek () = "nextRoboDuck"
679-
680-
681-let el = 0
682-
683-let em = 1
684-
685-let en = 2
650+let dU = 100000
651+
652+let dV = 2500000000
653+
654+let dW = toBigInt(5)
655+
656+let dX = toBigInt(20)
657+
658+let dY = toBigInt((20 * 20))
659+
660+let dZ = toBigInt(((20 * 20) * 20))
661+
662+let ea = toBigInt((((20 * 20) * 20) * 20))
663+
664+let eb = toBigInt(((((20 * 20) * 20) * 20) * 20))
665+
666+let ec = 500
667+
668+func ed () = "nextLandNum"
669+
670+
671+func ee (ef) = ("lcn_" + ef)
672+
673+
674+func eg (eh) = ("la_" + eh)
675+
676+
677+func ei (bA,ag) = ((("ilao_" + bA) + "_") + ag)
678+
679+
680+func ej (eh) = ("lo_" + eh)
681+
682+
683+func ek (ef) = ("duckByCustomName_" + ef)
684+
685+
686+func el (ef) = ("accountByCustomName_" + ef)
687+
688+
689+func em () = "oldiesList"
690+
691+
692+func en () = "nextRoboDuck"
693+
686694
687695 let eo = 0
688696
689-let ep = 5
690-
691-let eq = 6
692-
693-let er = 7
694-
695-let es = 0
696-
697-let et = 1
698-
699-let eu = 0
700-
701-let ev = 2
702-
703-let ew = 3
704-
705-func ex (ee,du) = ((ap + ee) + du)
706-
707-
708-func ey (ez,eA) = {
709- let eB = if ((ez >= 0))
710- then (((ez + eA) - 1) / eA)
711- else -((((-(ez) + eA) - 1) / eA))
712- (eB * ct)
713- }
714-
715-
716-func eC (eD,eE) = {
717- let eF = (((((eE[0] + eE[1]) + eE[2]) + eE[3]) + eE[4]) + eE[5])
718- if ((0 >= eF))
697+let ep = 1
698+
699+let eq = 2
700+
701+let er = 0
702+
703+let es = 5
704+
705+let et = 6
706+
707+let eu = 7
708+
709+let ev = 0
710+
711+let ew = 1
712+
713+let ex = 0
714+
715+let ey = 2
716+
717+let ez = 3
718+
719+func eA (eh,ar) = ((aI + eh) + ar)
720+
721+
722+func eB (eC,eD) = {
723+ let eE = if ((eC >= 0))
724+ then (((eC + eD) - 1) / eD)
725+ else -((((-(eC) + eD) - 1) / eD))
726+ (eE * o)
727+ }
728+
729+
730+func eF (eG,eH) = {
731+ let eI = (((((eH[0] + eH[1]) + eH[2]) + eH[3]) + eH[4]) + eH[5])
732+ if ((0 >= eI))
719733 then throw("Zero weights sum")
720734 else {
721- let eG = fraction(eD, cs, eF)
722- func eH (eI,eJ) = (eI :+ fraction(eJ, eG, cs))
723-
724- let eK = eE
725- let eL = size(eK)
726- let eM = nil
727- func eN (eO,eP) = if ((eP >= eL))
728- then eO
729- else eH(eO, eK[eP])
730-
731- func eQ (eO,eP) = if ((eP >= eL))
732- then eO
735+ let eJ = fraction(eG, n, eI)
736+ func eK (eL,eM) = (eL :+ fraction(eM, eJ, n))
737+
738+ let eN = eH
739+ let eO = size(eN)
740+ let eP = nil
741+ func eQ (eR,eS) = if ((eS >= eO))
742+ then eR
743+ else eK(eR, eN[eS])
744+
745+ func eT (eR,eS) = if ((eS >= eO))
746+ then eR
733747 else throw("List size exceeds 6")
734748
735- eQ(eN(eN(eN(eN(eN(eN(eM, 0), 1), 2), 3), 4), 5), 6)
736- }
737- }
738-
739-
740-func eR (eD) = {
741- let eS = split(value(getString(dg())), "_")
742- if ((size(eS) != at))
749+ eT(eQ(eQ(eQ(eQ(eQ(eQ(eP, 0), 1), 2), 3), 4), 5), 6)
750+ }
751+ }
752+
753+
754+func eU (eG) = {
755+ let eV = split(value(getString(ac())), "_")
756+ if ((size(eV) != aM))
743757 then throw("Wrong proportions data")
744758 else {
745- let eT = [parseIntValue(eS[0]), parseIntValue(eS[1]), parseIntValue(eS[2]), parseIntValue(eS[3]), parseIntValue(eS[4]), parseIntValue(eS[5])]
746- eC(eD, eT)
747- }
748- }
749-
750-
751-func eU (eV,eW,eX) = {
752- let eY = eR(eX)
753- func eZ (eI,cP) = {
754- let fa = (parseIntValue(eW[cP]) - eY[cP])
755- if ((0 > fa))
756- then throw(((((("Not enough material idx=" + toString(cP)) + ", you have ") + eW[cP]) + ", but need ") + toString(eY[cP])))
757- else (eI :+ toString(fa))
758- }
759-
760- if (eV)
759+ let eW = [parseIntValue(eV[0]), parseIntValue(eV[1]), parseIntValue(eV[2]), parseIntValue(eV[3]), parseIntValue(eV[4]), parseIntValue(eV[5])]
760+ eF(eG, eW)
761+ }
762+ }
763+
764+
765+func eX (eY,eZ,fa) = {
766+ let fb = eU(fa)
767+ func fc (eL,K) = {
768+ let fd = (parseIntValue(eZ[K]) - fb[K])
769+ if ((0 > fd))
770+ then throw(((((("Not enough material idx=" + toString(K)) + ", you have ") + eZ[K]) + ", but need ") + toString(fb[K])))
771+ else (eL :+ toString(fd))
772+ }
773+
774+ if (eY)
761775 then {
762- let eK = cz
763- let eL = size(eK)
764- let eM = nil
765- func eN (eO,eP) = if ((eP >= eL))
766- then eO
767- else eZ(eO, eK[eP])
768-
769- func eQ (eO,eP) = if ((eP >= eL))
770- then eO
776+ let eN = u
777+ let eO = size(eN)
778+ let eP = nil
779+ func eQ (eR,eS) = if ((eS >= eO))
780+ then eR
781+ else fc(eR, eN[eS])
782+
783+ func eT (eR,eS) = if ((eS >= eO))
784+ then eR
771785 else throw("List size exceeds 6")
772786
773- eQ(eN(eN(eN(eN(eN(eN(eM, 0), 1), 2), 3), 4), 5), 6)
774- }
775- else eW
776- }
777-
778-
779-func fb (fc,fd) = if ((fd == ""))
780- then $Tuple3(fc, false, false)
787+ eT(eQ(eQ(eQ(eQ(eQ(eQ(eP, 0), 1), 2), 3), 4), 5), 6)
788+ }
789+ else eZ
790+ }
791+
792+
793+func fe (ff,fg) = if ((fg == ""))
794+ then $Tuple3(ff, false, false)
781795 else {
782- func fe (eI,ff) = {
783- let fg = split(ff, ",")
784- if ((size(fg) != 2))
796+ func fh (eL,fi) = {
797+ let fj = split(fi, ",")
798+ if ((size(fj) != 2))
785799 then throw("Incorrect format, should be index,amount")
786800 else {
787- let cP = parseIntValue(fg[0])
788- if (if ((0 > cP))
801+ let K = parseIntValue(fj[0])
802+ if (if ((0 > K))
789803 then true
790- else (cP >= size(aJ)))
804+ else (K >= size(bd)))
791805 then throw("Unknown product idx")
792806 else {
793- let fh = parseIntValue(fg[1])
794- let fi = split(eI._1, (fg[0] + ":"))
795- if ((size(fi) != 2))
796- then throw((("You don't have " + aG[cP]) + " equipped"))
807+ let fk = parseIntValue(fj[1])
808+ let fl = split(eL._1, (fj[0] + ":"))
809+ if ((size(fl) != 2))
810+ then throw((("You don't have " + ba[K]) + " equipped"))
797811 else {
798- let fj = fi[1]
799- let fk = if (dv(take(drop(fj, 1), 1)))
812+ let fm = fl[1]
813+ let fn = if (as(take(drop(fm, 1), 1)))
800814 then 2
801815 else 1
802- let fl = parseIntValue(take(fj, fk))
803- let fm = drop(fj, fk)
804- let fn = if ((fl >= fh))
805- then (fl - fh)
806- else throw(((((("You equipped " + toString(fl)) + " of ") + aG[cP]) + ", but tried to use ") + toString(fh)))
807- $Tuple3(((((fi[0] + fg[0]) + ":") + toString(fn)) + fm), if (eI._2)
816+ let fo = parseIntValue(take(fm, fn))
817+ let fp = drop(fm, fn)
818+ let fq = if ((fo >= fk))
819+ then (fo - fk)
820+ else throw(((((("You equipped " + toString(fo)) + " of ") + ba[K]) + ", but tried to use ") + toString(fk)))
821+ $Tuple3(((((fl[0] + fj[0]) + ":") + toString(fq)) + fp), if (eL._2)
808822 then true
809- else if (if ((cP >= 6))
810- then (8 >= cP)
823+ else if (if ((K >= 6))
824+ then (8 >= K)
811825 else false)
812- then (fn == 0)
813- else false, if (eI._3)
826+ then (fq == 0)
827+ else false, if (eL._3)
814828 then true
815- else if (if ((cP >= 3))
816- then (5 >= cP)
829+ else if (if ((K >= 3))
830+ then (5 >= K)
817831 else false)
818- then (fh > 0)
832+ then (fk > 0)
819833 else false)
820834 }
821835 }
822836 }
823837 }
824838
825- let eK = split(fd, "_")
826- let eL = size(eK)
827- let eM = $Tuple3(fc, false, false)
828- func eN (eO,eP) = if ((eP >= eL))
829- then eO
830- else fe(eO, eK[eP])
831-
832- func eQ (eO,eP) = if ((eP >= eL))
833- then eO
839+ let eN = split(fg, "_")
840+ let eO = size(eN)
841+ let eP = $Tuple3(ff, false, false)
842+ func eQ (eR,eS) = if ((eS >= eO))
843+ then eR
844+ else fh(eR, eN[eS])
845+
846+ func eT (eR,eS) = if ((eS >= eO))
847+ then eR
834848 else throw("List size exceeds 10")
835849
836- eQ(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eM, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
837- }
838-
839-
840-func fo (fp) = {
841- let fq = if ((fp == ""))
850+ eT(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eP, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
851+ }
852+
853+
854+func fr (fs) = {
855+ let ft = if ((fs == ""))
842856 then nil
843- else split_4C(fp, "_")
844- func fr (eI,cb) = {
845- let fs = (size(eI) / 8)
846- let fl = if ((size(fq) > fs))
847- then parseIntValue(fq[fs])
857+ else split_4C(fs, "_")
858+ func fu (eL,cv) = {
859+ let fv = (size(eL) / 8)
860+ let fo = if ((size(ft) > fv))
861+ then parseIntValue(ft[fv])
848862 else 0
849- (eI + toBytes(fl))
850- }
851-
852- let eK = aJ
853- let eL = size(eK)
854- let eM = base58''
855- func eN (eO,eP) = if ((eP >= eL))
856- then eO
857- else fr(eO, eK[eP])
858-
859- func eQ (eO,eP) = if ((eP >= eL))
860- then eO
863+ (eL + toBytes(fo))
864+ }
865+
866+ let eN = bd
867+ let eO = size(eN)
868+ let eP = base58''
869+ func eQ (eR,eS) = if ((eS >= eO))
870+ then eR
871+ else fu(eR, eN[eS])
872+
873+ func eT (eR,eS) = if ((eS >= eO))
874+ then eR
861875 else throw("List size exceeds 50")
862876
863- eQ(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eM, 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)
864- }
865-
866-
867-func ft (fu) = {
868- func fv (eI,cb) = {
869- let fs = size(eI)
870- let fw = take(drop(fu, (8 * fs)), 8)
871- (eI :+ toString(toInt(fw)))
877+ eT(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eP, 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)
878+ }
879+
880+
881+func fw (fx) = {
882+ func fy (eL,cv) = {
883+ let fv = size(eL)
884+ let fz = take(drop(fx, (8 * fv)), 8)
885+ (eL :+ toString(toInt(fz)))
872886 }
873887
874888 makeString_2C({
875- let eK = aJ
876- let eL = size(eK)
877- let eM = nil
878- func eN (eO,eP) = if ((eP >= eL))
879- then eO
880- else fv(eO, eK[eP])
881-
882- func eQ (eO,eP) = if ((eP >= eL))
883- then eO
889+ let eN = bd
890+ let eO = size(eN)
891+ let eP = nil
892+ func eQ (eR,eS) = if ((eS >= eO))
893+ then eR
894+ else fy(eR, eN[eS])
895+
896+ func eT (eR,eS) = if ((eS >= eO))
897+ then eR
884898 else throw("List size exceeds 50")
885899
886- eQ(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eM, 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)
900+ eT(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eP, 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)
887901 }, "_")
888902 }
889903
890904
891-func fx (fy,fz) = {
892- func fA (eI,fs) = {
893- let fB = if ((size(fy) > (7 + fs)))
894- then fy[(7 + fs)]
905+func fA (fB,fC) = {
906+ func fD (eL,fv) = {
907+ let fE = if ((size(fB) > (7 + fv)))
908+ then fB[(7 + fv)]
895909 else 0
896- if ((parseIntValue(fz[fs]) > (fy[fs] + fB)))
897- then throw(("Requirement not satisfied: " + i[fs]))
910+ if ((parseIntValue(fC[fv]) > (fB[fv] + fE)))
911+ then throw(("Requirement not satisfied: " + cE[fv]))
898912 else true
899913 }
900914
901- let eK = [0, 1, 2, 3, 4, 5, 6]
902- let eL = size(eK)
903- let eM = false
904- func eN (eO,eP) = if ((eP >= eL))
905- then eO
906- else fA(eO, eK[eP])
907-
908- func eQ (eO,eP) = if ((eP >= eL))
909- then eO
915+ let eN = [0, 1, 2, 3, 4, 5, 6]
916+ let eO = size(eN)
917+ let eP = false
918+ func eQ (eR,eS) = if ((eS >= eO))
919+ then eR
920+ else fD(eR, eN[eS])
921+
922+ func eT (eR,eS) = if ((eS >= eO))
923+ then eR
910924 else throw("List size exceeds 7")
911925
912- eQ(eN(eN(eN(eN(eN(eN(eN(eM, 0), 1), 2), 3), 4), 5), 6), 7)
913- }
914-
915-
916-func fC (fD,fq,fE,fF,fG,fH,fy) = {
917- let fg = split(fD, ":")
918- if ((size(fg) != 2))
926+ eT(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eP, 0), 1), 2), 3), 4), 5), 6), 7)
927+ }
928+
929+
930+func fF (fG,ft,fH,fI,fJ,fK,fB) = {
931+ let fj = split(fG, ":")
932+ if ((size(fj) != 2))
919933 then throw("Incorrect format, should be index:amount")
920- else if (if (!(fE))
921- then (size(fg[0]) != 2)
934+ else if (if (!(fH))
935+ then (size(fj[0]) != 2)
922936 else false)
923937 then throw("Product idx should be 2 digits, zero padded")
924938 else {
925- let fI = parseIntValue(fg[0])
926- let fJ = parseIntValue(fg[1])
927- if (if ((0 > fI))
939+ let fL = parseIntValue(fj[0])
940+ let fM = parseIntValue(fj[1])
941+ if (if ((0 > fL))
928942 then true
929- else (fI >= size(aJ)))
943+ else (fL >= size(bd)))
930944 then throw("Unknown product idx")
931- else if ((0 > fJ))
945+ else if ((0 > fM))
932946 then throw("Count can't be negative")
933- else if ((fJ > s))
934- then throw(((("Can't put more than " + toString(s)) + " of ") + aG[fI]))
935- else if ((fJ == 0))
936- then $Tuple2(fq, false)
947+ else if ((fM > cO))
948+ then throw(((("Can't put more than " + toString(cO)) + " of ") + ba[fL]))
949+ else if ((fM == 0))
950+ then $Tuple2(ft, false)
937951 else {
938- let fK = take(fq, (8 * fI))
939- let fl = toInt(take(drop(fq, (8 * fI)), 8))
940- let fm = drop(fq, (8 * (fI + 1)))
941- let cb = split(aJ[fI], "_")
942- if (if (!(fE))
943- then (fJ > fl)
952+ let fN = take(ft, (8 * fL))
953+ let fo = toInt(take(drop(ft, (8 * fL)), 8))
954+ let fp = drop(ft, (8 * (fL + 1)))
955+ let cv = split(bd[fL], "_")
956+ if (if (!(fH))
957+ then (fM > fo)
944958 else false)
945- then throw(((((("You have " + toString(fl)) + " of ") + aG[fI]) + ", but tried to use ") + toString(fJ)))
959+ then throw(((((("You have " + toString(fo)) + " of ") + ba[fL]) + ", but tried to use ") + toString(fM)))
946960 else {
947- let fL = if (if (!(fE))
948- then fx(fy, split(cb[aM], ","))
961+ let fO = if (if (!(fH))
962+ then fA(fB, split(cv[bg], ","))
949963 else false)
950964 then {
951- let fM = cb[aN]
952- if ((fM == ""))
965+ let fP = cv[bh]
966+ if ((fP == ""))
953967 then throw("Item cannot be equipped")
954968 else {
955- let fN = parseIntValue(fM)
956- let fO = (fN / 100)
957- if ((fF != fO))
969+ let fQ = parseIntValue(fP)
970+ let fR = (fQ / 100)
971+ if ((fI != fR))
958972 then throw("Segment incompatible")
959973 else {
960- let fP = ((fN % 100) / 10)
961- if ((fG != fP))
974+ let fS = ((fQ % 100) / 10)
975+ if ((fJ != fS))
962976 then throw("Slot incompatible")
963977 else {
964- let fQ = (fN % 10)
965- if (if ((fH != 0))
966- then (fQ > 1)
978+ let fT = (fQ % 10)
979+ if (if ((fK != 0))
980+ then (fT > 1)
967981 else false)
968982 then throw("Big items should occupy slot 0")
969- else (fQ > 1)
983+ else (fT > 1)
970984 }
971985 }
972986 }
973987 }
974988 else false
975- $Tuple2(((fK + toBytes((fl + (if (fE)
976- then fJ
977- else -(fJ))))) + fm), fL)
989+ $Tuple2(((fN + toBytes((fo + (if (fH)
990+ then fM
991+ else -(fM))))) + fp), fO)
978992 }
979993 }
980994 }
981995 }
982996
983997
984-func fR (fS,fT,fE,fF,fG,fU) = if ((fS != ""))
998+func fU (fV,fW,fH,fI,fJ,fX) = if ((fV != ""))
985999 then {
986- let fV = split(fS, ",")
987- if ((size(fV) > r))
1000+ let fY = split(fV, ",")
1001+ if ((size(fY) > cN))
9881002 then throw("Wrong slots format")
9891003 else {
990- let fW = fV[0]
991- let fX = if ((size(fV) > 1))
992- then fV[1]
1004+ let fZ = fY[0]
1005+ let ga = if ((size(fY) > 1))
1006+ then fY[1]
9931007 else ""
994- if (if ((fW == ""))
995- then (fX == "")
1008+ if (if ((fZ == ""))
1009+ then (ga == "")
9961010 else false)
997- then fT
1011+ then fW
9981012 else {
999- let fY = if ((fW != ""))
1000- then fC(fW, fT, fE, fF, fG, 0, fU)
1001- else $Tuple2(fT, false)
1002- if ((fX != ""))
1003- then if (fY._2)
1013+ let gb = if ((fZ != ""))
1014+ then fF(fZ, fW, fH, fI, fJ, 0, fX)
1015+ else $Tuple2(fW, false)
1016+ if ((ga != ""))
1017+ then if (gb._2)
10041018 then throw("Big item already occupies slot")
1005- else fC(fX, fY._1, fE, fF, fG, 1, fU)._1
1006- else fY._1
1019+ else fF(ga, gb._1, fH, fI, fJ, 1, fX)._1
1020+ else gb._1
10071021 }
10081022 }
10091023 }
1010- else fT
1011-
1012-
1013-func fZ (ga,gb,fE,fU) = {
1014- func fF (eI,gc) = {
1015- let fs = eI._1
1016- let fG = split(gc, ";")
1017- if ((size(fG) != q))
1024+ else fW
1025+
1026+
1027+func gc (gd,ge,fH,fX) = {
1028+ func fI (eL,gf) = {
1029+ let fv = eL._1
1030+ let fJ = split(gf, ";")
1031+ if ((size(fJ) != cM))
10181032 then throw("Wrong segment format")
10191033 else {
1020- let gd = fG[0]
1021- let ge = fG[1]
1022- if (if ((gd == ""))
1023- then (ge == "")
1034+ let gg = fJ[0]
1035+ let gh = fJ[1]
1036+ if (if ((gg == ""))
1037+ then (gh == "")
10241038 else false)
1025- then $Tuple2((fs + 1), eI._2)
1039+ then $Tuple2((fv + 1), eL._2)
10261040 else {
1027- let gf = fR(gd, eI._2, fE, fs, 0, fU)
1028- $Tuple2((fs + 1), fR(ge, gf, fE, fs, 1, fU))
1041+ let gi = fU(gg, eL._2, fH, fv, 0, fX)
1042+ $Tuple2((fv + 1), fU(gh, gi, fH, fv, 1, fX))
10291043 }
10301044 }
10311045 }
10321046
1033-( let eK = ga
1034- let eL = size(eK)
1035- let eM = $Tuple2(0, gb)
1036- func eN (eO,eP) = if ((eP >= eL))
1037- then eO
1038- else fF(eO, eK[eP])
1039-
1040- func eQ (eO,eP) = if ((eP >= eL))
1041- then eO
1047+( let eN = gd
1048+ let eO = size(eN)
1049+ let eP = $Tuple2(0, ge)
1050+ func eQ (eR,eS) = if ((eS >= eO))
1051+ then eR
1052+ else fI(eR, eN[eS])
1053+
1054+ func eT (eR,eS) = if ((eS >= eO))
1055+ then eR
10421056 else throw("List size exceeds 6")
10431057
1044- eQ(eN(eN(eN(eN(eN(eN(eM, 0), 1), 2), 3), 4), 5), 6))._2
1045- }
1046-
1047-
1048-func gg (u) = {
1049- let gh = z(u)
1050- let gi = split(valueOrElse(getString(gh), ",;,_,;,_,;,_,;,_,;,_,;,"), "_")
1051- let gj = base64'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=='
1052- let gk = fZ(gi, gj, true, nil)
1053- let gl = split(gi[o], ";")[1]
1054- let aj = if ((gl == ""))
1058+ eT(eQ(eQ(eQ(eQ(eQ(eQ(eP, 0), 1), 2), 3), 4), 5), 6))._2
1059+ }
1060+
1061+
1062+func gj (bO) = {
1063+ let gk = cU(bO)
1064+ let gl = split(valueOrElse(getString(gk), ",;,_,;,_,;,_,;,_,;,_,;,"), "_")
1065+ let gm = base64'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=='
1066+ let gn = gc(gl, gm, true, nil)
1067+ let go = split(gl[cK], ";")[1]
1068+ let dD = if ((go == ""))
10551069 then 0
10561070 else {
1057- let gm = split(gl, ",")[0]
1058- if ((gm == ""))
1071+ let gp = split(go, ",")[0]
1072+ if ((gp == ""))
10591073 then 0
10601074 else {
1061- let fD = split(gm, ":")
1062- let cP = fD[0]
1063- let gn = fD[1]
1064- if (if (if (if (if ((cP == "06"))
1075+ let fG = split(gp, ":")
1076+ let K = fG[0]
1077+ let gq = fG[1]
1078+ if (if (if (if (if ((K == "06"))
10651079 then true
1066- else (cP == "07"))
1080+ else (K == "07"))
10671081 then true
1068- else (cP == "08"))
1069- then (gn != "")
1082+ else (K == "08"))
1083+ then (gq != "")
10701084 else false)
1071- then (parseIntValue(gn) > 0)
1085+ then (parseIntValue(gq) > 0)
10721086 else false)
1073- then parseIntValue(split(aJ[parseIntValue(cP)], "_")[aL])
1087+ then parseIntValue(split(bd[parseIntValue(K)], "_")[bf])
10741088 else 0
10751089 }
10761090 }
1077- let fU = ah(this, u, aj, true)
1078- let go = fZ(gi, gk, false, fU)
1079- (go == go)
1080- }
1081-
1082-
1083-func gp (gq,gr,gs,gt) = if ((size(gq) != at))
1091+ let fX = dC(this, bO, dD, true)
1092+ let gr = gc(gl, gn, false, fX)
1093+ (gr == gr)
1094+ }
1095+
1096+
1097+func gs (gt,gu,gv,gw) = if ((size(gt) != aM))
10841098 then throw("Wrong proportions data")
10851099 else {
1086- func gu (eI,gv) = {
1087- let fa = (parseIntValue(gq[gv]) + ((gt * gr[gv]) * gs))
1088- if ((0 > fa))
1089- then throw(((((((("Panic! Pieces of type=" + toString(gv)) + ", sign=") + toString(gt)) + ", terrainCounts[i]=") + toString(gr[gv])) + ", landSizeIndex=") + toString(gs)))
1090- else (eI :+ toString(fa))
1091- }
1092-
1093- let eK = cz
1094- let eL = size(eK)
1095- let eM = nil
1096- func eN (eO,eP) = if ((eP >= eL))
1097- then eO
1098- else gu(eO, eK[eP])
1099-
1100- func eQ (eO,eP) = if ((eP >= eL))
1101- then eO
1100+ func gx (eL,gy) = {
1101+ let fd = (parseIntValue(gt[gy]) + ((gw * gu[gy]) * gv))
1102+ if ((0 > fd))
1103+ then throw(((((((("Panic! Pieces of type=" + toString(gy)) + ", sign=") + toString(gw)) + ", terrainCounts[i]=") + toString(gu[gy])) + ", landSizeIndex=") + toString(gv)))
1104+ else (eL :+ toString(fd))
1105+ }
1106+
1107+ let eN = u
1108+ let eO = size(eN)
1109+ let eP = nil
1110+ func eQ (eR,eS) = if ((eS >= eO))
1111+ then eR
1112+ else gx(eR, eN[eS])
1113+
1114+ func eT (eR,eS) = if ((eS >= eO))
1115+ then eR
11021116 else throw("List size exceeds 6")
11031117
1104- eQ(eN(eN(eN(eN(eN(eN(eM, 0), 1), 2), 3), 4), 5), 6)
1105- }
1106-
1107-
1108-func gw (gr,gs,gt) = {
1109- let gq = split(valueOrElse(getString(dg()), "0_0_0_0_0_0"), "_")
1110- makeString(gp(gq, gr, gs, gt), "_")
1111- }
1112-
1113-
1114-func gx (gy) = [(size(split(gy, "A")) - 1), (size(split(gy, "B")) - 1), (size(split(gy, "C")) - 1), (size(split(gy, "D")) - 1), (size(split(gy, "E")) - 1), (size(split(gy, "F")) - 1)]
1115-
1116-
1117-func gz (gA,gr,gB,gs,gC) = {
1118- func gD (eI,gv) = {
1119- let gE = ((fraction(gB, gC, a) * gr[gv]) * gs)
1120- (eI :+ toString((parseIntValue(gA[gv]) + gE)))
1121- }
1122-
1123- let eT = {
1124- let eK = cz
1125- let eL = size(eK)
1126- let eM = nil
1127- func eN (eO,eP) = if ((eP >= eL))
1128- then eO
1129- else gD(eO, eK[eP])
1130-
1131- func eQ (eO,eP) = if ((eP >= eL))
1132- then eO
1118+ eT(eQ(eQ(eQ(eQ(eQ(eQ(eP, 0), 1), 2), 3), 4), 5), 6)
1119+ }
1120+
1121+
1122+func gz (gu,gv,gw) = {
1123+ let gt = split(valueOrElse(getString(ac()), "0_0_0_0_0_0"), "_")
1124+ makeString(gs(gt, gu, gv, gw), "_")
1125+ }
1126+
1127+
1128+func gA (gB) = [(size(split(gB, "A")) - 1), (size(split(gB, "B")) - 1), (size(split(gB, "C")) - 1), (size(split(gB, "D")) - 1), (size(split(gB, "E")) - 1), (size(split(gB, "F")) - 1)]
1129+
1130+
1131+func gC (gD,gu,gE,gv,gF) = {
1132+ func gG (eL,gy) = {
1133+ let gH = ((fraction(gE, gF, dJ) * gu[gy]) * gv)
1134+ (eL :+ toString((parseIntValue(gD[gy]) + gH)))
1135+ }
1136+
1137+ let eW = {
1138+ let eN = u
1139+ let eO = size(eN)
1140+ let eP = nil
1141+ func eQ (eR,eS) = if ((eS >= eO))
1142+ then eR
1143+ else gG(eR, eN[eS])
1144+
1145+ func eT (eR,eS) = if ((eS >= eO))
1146+ then eR
11331147 else throw("List size exceeds 6")
11341148
1135- eQ(eN(eN(eN(eN(eN(eN(eM, 0), 1), 2), 3), 4), 5), 6)
1136- }
1137- makeString(eT, "_")
1138- }
1139-
1140-
1141-func gF (gr,gB,gs,gC) = {
1142- func gD (eI,gv) = {
1143- let gE = ((fraction(gB, gC, a) * gr[gv]) * gs)
1144- $Tuple2((eI._1 :+ gE), (eI._2 + gE))
1145- }
1146-
1147- let eK = cz
1148- let eL = size(eK)
1149- let eM = $Tuple2(nil, 0)
1150- func eN (eO,eP) = if ((eP >= eL))
1151- then eO
1152- else gD(eO, eK[eP])
1153-
1154- func eQ (eO,eP) = if ((eP >= eL))
1155- then eO
1149+ eT(eQ(eQ(eQ(eQ(eQ(eQ(eP, 0), 1), 2), 3), 4), 5), 6)
1150+ }
1151+ makeString(eW, "_")
1152+ }
1153+
1154+
1155+func gI (gD,gu,gE,gv,gF) = {
1156+ func gG (eL,gy) = {
1157+ let gH = ((fraction(gE, gF, dJ) * gu[gy]) * gv)
1158+ let gJ = (parseIntValue(gD[gy]) + gH)
1159+ $Tuple2((eL._1 :+ gJ), (eL._2 + gJ))
1160+ }
1161+
1162+ let eN = u
1163+ let eO = size(eN)
1164+ let eP = $Tuple2(nil, 0)
1165+ func eQ (eR,eS) = if ((eS >= eO))
1166+ then eR
1167+ else gG(eR, eN[eS])
1168+
1169+ func eT (eR,eS) = if ((eS >= eO))
1170+ then eR
11561171 else throw("List size exceeds 6")
11571172
1158- eQ(eN(eN(eN(eN(eN(eN(eM, 0), 1), 2), 3), 4), 5), 6)
1159- }
1160-
1161-
1162-func gG (gH,gI,gJ,gK) = {
1163- let gL = gJ._1
1164- let gM = gJ._2
1165- if ((gM == 0))
1166- then $Tuple2(makeString(gH, "_"), makeString(gI, "_"))
1167- else if ((gK >= gM))
1173+ eT(eQ(eQ(eQ(eQ(eQ(eQ(eP, 0), 1), 2), 3), 4), 5), 6)
1174+ }
1175+
1176+
1177+func gK (gu,gE,gv,gF) = {
1178+ func gG (eL,gL) = {
1179+ let gH = ((fraction(gE, gF, dJ) * gL) * gv)
1180+ $Tuple2((eL._1 :+ gH), (eL._2 + gH))
1181+ }
1182+
1183+ let eN = gu
1184+ let eO = size(eN)
1185+ let eP = $Tuple2(nil, 0)
1186+ func eQ (eR,eS) = if ((eS >= eO))
1187+ then eR
1188+ else gG(eR, eN[eS])
1189+
1190+ func eT (eR,eS) = if ((eS >= eO))
1191+ then eR
1192+ else throw("List size exceeds 6")
1193+
1194+ eT(eQ(eQ(eQ(eQ(eQ(eQ(eP, 0), 1), 2), 3), 4), 5), 6)
1195+ }
1196+
1197+
1198+func gM (gN,gO,gP,gQ) = {
1199+ let gR = gP._1
1200+ let gS = gP._2
1201+ if ((gS == 0))
1202+ then $Tuple2(makeString(gN, "_"), makeString(gO, "_"))
1203+ else if ((gQ >= gS))
11681204 then {
1169- func gN (eI,gv) = (eI :+ toString((parseIntValue(gH[gv]) + gL[gv])))
1170-
1171- let eT = {
1172- let eK = cz
1173- let eL = size(eK)
1174- let eM = nil
1175- func eN (eO,eP) = if ((eP >= eL))
1176- then eO
1177- else gN(eO, eK[eP])
1178-
1179- func eQ (eO,eP) = if ((eP >= eL))
1180- then eO
1205+ func gT (eL,gy) = (eL :+ toString((parseIntValue(gN[gy]) + gR[gy])))
1206+
1207+ let eW = {
1208+ let eN = u
1209+ let eO = size(eN)
1210+ let eP = nil
1211+ func eQ (eR,eS) = if ((eS >= eO))
1212+ then eR
1213+ else gT(eR, eN[eS])
1214+
1215+ func eT (eR,eS) = if ((eS >= eO))
1216+ then eR
11811217 else throw("List size exceeds 6")
11821218
1183- eQ(eN(eN(eN(eN(eN(eN(eM, 0), 1), 2), 3), 4), 5), 6)
1219+ eT(eQ(eQ(eQ(eQ(eQ(eQ(eP, 0), 1), 2), 3), 4), 5), 6)
11841220 }
1185- $Tuple2(makeString(eT, "_"), makeString(gI, "_"))
1221+ $Tuple2(makeString(eW, "_"), makeString(gO, "_"))
11861222 }
11871223 else {
1188- func gO (eI,gv) = {
1189- let gP = fraction(gL[gv], gK, gM)
1190- $Tuple2((eI._1 :+ toString((parseIntValue(gH[gv]) + gP))), (eI._2 :+ toString(((parseIntValue(gI[gv]) + gL[gv]) - gP))))
1224+ func gU (eL,gy) = {
1225+ let gV = fraction(gR[gy], gQ, gS)
1226+ $Tuple2((eL._1 :+ toString((parseIntValue(gN[gy]) + gV))), (eL._2 :+ toString(((parseIntValue(gO[gy]) + gR[gy]) - gV))))
11911227 }
11921228
1193- let eT = {
1194- let eK = cz
1195- let eL = size(eK)
1196- let eM = $Tuple2(nil, nil)
1197- func eN (eO,eP) = if ((eP >= eL))
1198- then eO
1199- else gO(eO, eK[eP])
1200-
1201- func eQ (eO,eP) = if ((eP >= eL))
1202- then eO
1229+ let eW = {
1230+ let eN = u
1231+ let eO = size(eN)
1232+ let eP = $Tuple2(nil, nil)
1233+ func eQ (eR,eS) = if ((eS >= eO))
1234+ then eR
1235+ else gU(eR, eN[eS])
1236+
1237+ func eT (eR,eS) = if ((eS >= eO))
1238+ then eR
12031239 else throw("List size exceeds 6")
12041240
1205- eQ(eN(eN(eN(eN(eN(eN(eM, 0), 1), 2), 3), 4), 5), 6)
1241+ eT(eQ(eQ(eQ(eQ(eQ(eQ(eP, 0), 1), 2), 3), 4), 5), 6)
12061242 }
1207- $Tuple2(makeString(eT._1, "_"), makeString(eT._2, "_"))
1243+ $Tuple2(makeString(eW._1, "_"), makeString(eW._2, "_"))
12081244 }
12091245 }
12101246
12111247
1212-func gQ (gR) = if ((gR >= toBigInt(0)))
1213- then gR
1214- else -(gR)
1215-
1216-
1217-let gS = [[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]]
1218-
1219-func gT (dp,gU) = {
1220- let gV = toInt((dp % dU))
1221- let gW = if ((gU[0] > gV))
1248+func gW (gX) = if ((gX >= toBigInt(0)))
1249+ then gX
1250+ else -(gX)
1251+
1252+
1253+let gY = [[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]]
1254+
1255+func gZ (am,ha) = {
1256+ let hb = toInt((am % dX))
1257+ let hc = if ((ha[0] > hb))
12221258 then "A"
1223- else if ((gU[1] > gV))
1259+ else if ((ha[1] > hb))
12241260 then "B"
1225- else if ((gU[2] > gV))
1261+ else if ((ha[2] > hb))
12261262 then "C"
1227- else if ((gU[3] > gV))
1263+ else if ((ha[3] > hb))
12281264 then "D"
1229- else if ((gU[4] > gV))
1265+ else if ((ha[4] > hb))
12301266 then "E"
12311267 else "F"
1232- gW
1233- }
1234-
1235-
1236-func gX (gY,gZ) = {
1237- let ha = gS[gZ]
1238- func hb (eI,eJ) = $Tuple2((((((eI._1 + gT(eI._2, ha)) + gT((eI._2 / dU), ha)) + gT((eI._2 / dV), ha)) + gT((eI._2 / dW), ha)) + gT((eI._2 / dX), ha)), (eI._2 / dY))
1239-
1240- let hc = {
1241- let eK = [1, 2, 3, 4, 5]
1242- let eL = size(eK)
1243- let eM = $Tuple2("", (gY / dT))
1244- func eN (eO,eP) = if ((eP >= eL))
1245- then eO
1246- else hb(eO, eK[eP])
1247-
1248- func eQ (eO,eP) = if ((eP >= eL))
1249- then eO
1268+ hc
1269+ }
1270+
1271+
1272+func hd (he,hf) = {
1273+ let hg = gY[hf]
1274+ func hh (eL,eM) = $Tuple2((((((eL._1 + gZ(eL._2, hg)) + gZ((eL._2 / dX), hg)) + gZ((eL._2 / dY), hg)) + gZ((eL._2 / dZ), hg)) + gZ((eL._2 / ea), hg)), (eL._2 / eb))
1275+
1276+ let hi = {
1277+ let eN = [1, 2, 3, 4, 5]
1278+ let eO = size(eN)
1279+ let eP = $Tuple2("", (he / dW))
1280+ func eQ (eR,eS) = if ((eS >= eO))
1281+ then eR
1282+ else hh(eR, eN[eS])
1283+
1284+ func eT (eR,eS) = if ((eS >= eO))
1285+ then eR
12501286 else throw("List size exceeds 5")
12511287
1252- eQ(eN(eN(eN(eN(eN(eM, 0), 1), 2), 3), 4), 5)
1253- }
1254- hc._1
1255- }
1256-
1257-
1258-let hd = [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]
1259-
1260-let he = ["A", "B", "C", "D", "E", "F"]
1261-
1262-func hf (hg,gs) = {
1263- func hh (eI,dn) = {
1264- let fs = eI._2
1265- let hi = parseIntValue(dn)
1266- let gR = if ((hi == 0))
1288+ eT(eQ(eQ(eQ(eQ(eQ(eP, 0), 1), 2), 3), 4), 5)
1289+ }
1290+ hi._1
1291+ }
1292+
1293+
1294+let hj = [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]
1295+
1296+let hk = ["A", "B", "C", "D", "E", "F"]
1297+
1298+func hl (hm,gv) = {
1299+ func hn (eL,ak) = {
1300+ let fv = eL._2
1301+ let ho = parseIntValue(ak)
1302+ let gX = if ((ho == 0))
12671303 then 0
1268- else if ((hi >= (4 * gs)))
1269- then (hi / gs)
1270- else if ((hi > (3 * gs)))
1304+ else if ((ho >= (4 * gv)))
1305+ then (ho / gv)
1306+ else if ((ho > (3 * gv)))
12711307 then 3
1272- else (((hi - 1) / gs) + 1)
1273- $Tuple3((eI._1 :+ gR), (eI._2 + 1), (eI._3 + gR))
1274- }
1275-
1276- let hc = {
1277- let eK = hg
1278- let eL = size(eK)
1279- let eM = $Tuple3(nil, 0, 0)
1280- func eN (eO,eP) = if ((eP >= eL))
1281- then eO
1282- else hh(eO, eK[eP])
1283-
1284- func eQ (eO,eP) = if ((eP >= eL))
1285- then eO
1308+ else (((ho - 1) / gv) + 1)
1309+ $Tuple3((eL._1 :+ gX), (eL._2 + 1), (eL._3 + gX))
1310+ }
1311+
1312+ let hi = {
1313+ let eN = hm
1314+ let eO = size(eN)
1315+ let eP = $Tuple3(nil, 0, 0)
1316+ func eQ (eR,eS) = if ((eS >= eO))
1317+ then eR
1318+ else hn(eR, eN[eS])
1319+
1320+ func eT (eR,eS) = if ((eS >= eO))
1321+ then eR
12861322 else throw("List size exceeds 6")
12871323
1288- eQ(eN(eN(eN(eN(eN(eN(eM, 0), 1), 2), 3), 4), 5), 6)
1289- }
1290- let hj = hc._1
1291- let hk = value(indexOf(hj, max(hj)))
1292- let hl = (hc._3 - 25)
1293- func hm (eI,cP) = {
1294- let dz = if ((cP == hk))
1295- then (hj[cP] - hl)
1296- else hj[cP]
1297- let dD = if ((dz == 0))
1324+ eT(eQ(eQ(eQ(eQ(eQ(eQ(eP, 0), 1), 2), 3), 4), 5), 6)
1325+ }
1326+ let hp = hi._1
1327+ let hq = value(indexOf(hp, max(hp)))
1328+ let hr = (hi._3 - 25)
1329+ func hs (eL,K) = {
1330+ let ax = if ((K == hq))
1331+ then (hp[K] - hr)
1332+ else hp[K]
1333+ let aB = if ((ax == 0))
12981334 then nil
1299- else split(drop(toString(pow(10, 0, dz, 0, 0, DOWN)), 1), "")
1300- let fN = he[cP]
1301- func hn (ho,hp) = (ho :+ fN)
1302-
1303- let hq = {
1304- let eK = dD
1305- let eL = size(eK)
1306- let eM = nil
1307- func hr (eO,eP) = if ((eP >= eL))
1308- then eO
1309- else hn(eO, eK[eP])
1310-
1311- func hs (eO,eP) = if ((eP >= eL))
1312- then eO
1335+ else split(drop(toString(pow(10, 0, ax, 0, 0, DOWN)), 1), "")
1336+ let fQ = hk[K]
1337+ func ht (hu,hv) = (hu :+ fQ)
1338+
1339+ let hw = {
1340+ let eN = aB
1341+ let eO = size(eN)
1342+ let eP = nil
1343+ func hx (eR,eS) = if ((eS >= eO))
1344+ then eR
1345+ else ht(eR, eN[eS])
1346+
1347+ func hy (eR,eS) = if ((eS >= eO))
1348+ then eR
13131349 else throw("List size exceeds 25")
13141350
1315- hs(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(eM, 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)
1316- }
1317- (eI ++ hq)
1318- }
1319-
1320- let eT = {
1321- let eK = cz
1322- let eL = size(eK)
1323- let eM = nil
1324- func hr (eO,eP) = if ((eP >= eL))
1325- then eO
1326- else hm(eO, eK[eP])
1327-
1328- func hs (eO,eP) = if ((eP >= eL))
1329- then eO
1351+ hy(hx(hx(hx(hx(hx(hx(hx(hx(hx(hx(hx(hx(hx(hx(hx(hx(hx(hx(hx(hx(hx(hx(hx(hx(hx(eP, 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)
1352+ }
1353+ (eL ++ hw)
1354+ }
1355+
1356+ let eW = {
1357+ let eN = u
1358+ let eO = size(eN)
1359+ let eP = nil
1360+ func hx (eR,eS) = if ((eS >= eO))
1361+ then eR
1362+ else hs(eR, eN[eS])
1363+
1364+ func hy (eR,eS) = if ((eS >= eO))
1365+ then eR
13301366 else throw("List size exceeds 6")
13311367
1332- hs(hr(hr(hr(hr(hr(hr(eM, 0), 1), 2), 3), 4), 5), 6)
1333- }
1334- func ht (eI,fs) = (eI + eT[fs])
1335-
1336- let eK = hd
1337- let eL = size(eK)
1338- let eM = ""
1339- func hu (eO,eP) = if ((eP >= eL))
1340- then eO
1341- else ht(eO, eK[eP])
1342-
1343- func hv (eO,eP) = if ((eP >= eL))
1344- then eO
1368+ hy(hx(hx(hx(hx(hx(hx(eP, 0), 1), 2), 3), 4), 5), 6)
1369+ }
1370+ func hz (eL,fv) = (eL + eW[fv])
1371+
1372+ let eN = hj
1373+ let eO = size(eN)
1374+ let eP = ""
1375+ func hA (eR,eS) = if ((eS >= eO))
1376+ then eR
1377+ else hz(eR, eN[eS])
1378+
1379+ func hB (eR,eS) = if ((eS >= eO))
1380+ then eR
13451381 else throw("List size exceeds 25")
13461382
1347- hv(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(eM, 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)
1348- }
1349-
1350-
1351-func hw (hx) = {
1352- let hy = split(valueOrElse(getString(hx), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
1353-[toString(valueOrElse(parseInt(hy[aY]), 0)), if ((size(split(hy[aZ], "_")) == at))
1354- then hy[aZ]
1355- else "0_0_0_0_0_0", if ((size(split(hy[ba], "_")) == at))
1356- then hy[ba]
1357- else "0_0_0_0_0_0", hy[bb]]
1358- }
1359-
1360-
1361-func hz (hA) = {
1362- let fg = split(hA, "_")
1363- ((aw * (parseIntValue(fg[1]) + 1)) * parseIntValue(fg[0]))
1364- }
1365-
1366-
1367-func hB (hC) = {
1368- let hD = hC[aS]
1369- func hE (eI,hF) = (eI + parseIntValue(hF))
1370-
1371- func hG (eI,hF) = {
1372- let cP = eI._1
1373- let eB = (((parseIntValue(hF) + aO) - 1) / aO)
1374- $Tuple2((cP + 1), (eI._2 + (eB * ct)))
1375- }
1376-
1377- let hH = {
1378- let eK = split(hC[aQ], "_")
1379- let eL = size(eK)
1380- let eM = 0
1381- func eN (eO,eP) = if ((eP >= eL))
1382- then eO
1383- else hE(eO, eK[eP])
1384-
1385- func eQ (eO,eP) = if ((eP >= eL))
1386- then eO
1383+ hB(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(eP, 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)
1384+ }
1385+
1386+
1387+func hC (hD) = {
1388+ let hE = split(valueOrElse(getString(hD), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
1389+[toString(valueOrElse(parseInt(hE[bs]), 0)), if ((size(split(hE[bt], "_")) == aM))
1390+ then hE[bt]
1391+ else "0_0_0_0_0_0", if ((size(split(hE[bu], "_")) == aM))
1392+ then hE[bu]
1393+ else "0_0_0_0_0_0", hE[bv]]
1394+ }
1395+
1396+
1397+func hF (hG) = {
1398+ let fj = split(hG, "_")
1399+ ((aP * (parseIntValue(fj[1]) + 1)) * parseIntValue(fj[0]))
1400+ }
1401+
1402+
1403+func hH (hI) = {
1404+ let hJ = hI[bm]
1405+ func hK (eL,hL) = (eL + parseIntValue(hL))
1406+
1407+ func hM (eL,hL) = {
1408+ let K = eL._1
1409+ let eE = (((parseIntValue(hL) + bi) - 1) / bi)
1410+ $Tuple2((K + 1), (eL._2 + (eE * o)))
1411+ }
1412+
1413+ let hN = {
1414+ let eN = split(hI[bk], "_")
1415+ let eO = size(eN)
1416+ let eP = 0
1417+ func eQ (eR,eS) = if ((eS >= eO))
1418+ then eR
1419+ else hK(eR, eN[eS])
1420+
1421+ func eT (eR,eS) = if ((eS >= eO))
1422+ then eR
13871423 else throw("List size exceeds 6")
13881424
1389- eQ(eN(eN(eN(eN(eN(eN(eM, 0), 1), 2), 3), 4), 5), 6)
1390- }
1391- let hI = {
1392- let eK = split(hC[aR], "_")
1393- let eL = size(eK)
1394- let eM = 0
1395- func hr (eO,eP) = if ((eP >= eL))
1396- then eO
1397- else hE(eO, eK[eP])
1398-
1399- func hs (eO,eP) = if ((eP >= eL))
1400- then eO
1425+ eT(eQ(eQ(eQ(eQ(eQ(eQ(eP, 0), 1), 2), 3), 4), 5), 6)
1426+ }
1427+ let hO = {
1428+ let eN = split(hI[bl], "_")
1429+ let eO = size(eN)
1430+ let eP = 0
1431+ func hx (eR,eS) = if ((eS >= eO))
1432+ then eR
1433+ else hK(eR, eN[eS])
1434+
1435+ func hy (eR,eS) = if ((eS >= eO))
1436+ then eR
14011437 else throw("List size exceeds 6")
14021438
1403- hs(hr(hr(hr(hr(hr(hr(eM, 0), 1), 2), 3), 4), 5), 6)
1404- }
1405- let hJ = if ((hD == ""))
1439+ hy(hx(hx(hx(hx(hx(hx(eP, 0), 1), 2), 3), 4), 5), 6)
1440+ }
1441+ let hP = if ((hJ == ""))
14061442 then 0
1407- else ( let eK = split_4C(hD, "_")
1408- let eL = size(eK)
1409- let eM = $Tuple2(0, 0)
1410- func hu (eO,eP) = if ((eP >= eL))
1411- then eO
1412- else hG(eO, eK[eP])
1413-
1414- func hv (eO,eP) = if ((eP >= eL))
1415- then eO
1443+ else ( let eN = split_4C(hJ, "_")
1444+ let eO = size(eN)
1445+ let eP = $Tuple2(0, 0)
1446+ func hA (eR,eS) = if ((eS >= eO))
1447+ then eR
1448+ else hM(eR, eN[eS])
1449+
1450+ func hB (eR,eS) = if ((eS >= eO))
1451+ then eR
14161452 else throw("List size exceeds 50")
14171453
1418- hv(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(eM, 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
1419- ((hH + hI) + hJ)
1420- }
1421-
1422-
1423-func hK (hL,hM,hN) = {
1424- let hA = ((toString(hM) + "_") + toString(hN))
1425- let hO = hz(hA)
1426- let hP = valueOrElse(getString(hL), (hA + ":0_0_0_0_0_0:0_0_0_0_0_0::0"))
1427- let hQ = split_4C(hP, ":")
1428- let hR = hB(hQ)
1429- let hS = if ((5 > size(hQ)))
1430- then makeString(["0", toString(hR), toString((hO - hR)), toString(hO)], "_")
1454+ hB(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(eP, 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
1455+ ((hN + hO) + hP)
1456+ }
1457+
1458+
1459+func hQ (hR,hS,hT) = {
1460+ let hG = ((toString(hS) + "_") + toString(hT))
1461+ let hU = hF(hG)
1462+ let hV = valueOrElse(getString(hR), (hG + ":0_0_0_0_0_0:0_0_0_0_0_0::0"))
1463+ let hW = split_4C(hV, ":")
1464+ let hX = hH(hW)
1465+ let hY = if ((5 > size(hW)))
1466+ then makeString(["0", toString(hX), toString((hU - hX)), toString(hU)], "_")
14311467 else {
1432- let hT = split(hQ[aT], "_")
1433- let hU = parseIntValue(hT[aU])
1434- let hV = if ((size(hT) > 1))
1435- then parseIntValue(hT[aV])
1436- else hR
1437- makeString([toString(hU), toString(hV), toString(((hO - hU) - hV)), toString(hO)], "_")
1438- }
1439-[hQ[aP], if ((size(split(hQ[aQ], "_")) == at))
1440- then hQ[aQ]
1441- else "0_0_0_0_0_0", if ((size(split(hQ[aR], "_")) == at))
1442- then hQ[aR]
1443- else "0_0_0_0_0_0", hQ[aS], hS]
1444- }
1445-
1446-
1447-func hW (hC) = {
1448- let hX = hB(hC)
1449- let hY = parseIntValue(split(hC[aT], "_")[aU])
1450- ((hz(hC[aP]) - hX) - hY)
1451- }
1452-
1453-
1454-func hZ (ia,hC,ib) = if ((size(ia) != 3))
1468+ let hZ = split(hW[bn], "_")
1469+ let ia = parseIntValue(hZ[bo])
1470+ let ib = if ((size(hZ) > 1))
1471+ then parseIntValue(hZ[bp])
1472+ else hX
1473+ makeString([toString(ia), toString(ib), toString(((hU - ia) - ib)), toString(hU)], "_")
1474+ }
1475+[hW[bj], if ((size(split(hW[bk], "_")) == aM))
1476+ then hW[bk]
1477+ else "0_0_0_0_0_0", if ((size(split(hW[bl], "_")) == aM))
1478+ then hW[bl]
1479+ else "0_0_0_0_0_0", hW[bm], hY]
1480+ }
1481+
1482+
1483+func ic (hI) = {
1484+ let id = hH(hI)
1485+ let ie = parseIntValue(split(hI[bn], "_")[bo])
1486+ ((hF(hI[bj]) - id) - ie)
1487+ }
1488+
1489+
1490+func if (ig,hI,ih) = if ((size(ig) != 3))
14551491 then throw("cargoListStr should contain exactly 2 ':' separators")
14561492 else {
1457- let ic = split(ia[0], "_")
1458- let id = split(ia[1], "_")
1459- let ie = if ((ia[2] == ""))
1493+ let ii = split(ig[0], "_")
1494+ let ij = split(ig[1], "_")
1495+ let ik = if ((ig[2] == ""))
14601496 then nil
1461- else split_4C(ia[2], "_")
1462- if ((size(ic) != at))
1497+ else split_4C(ig[2], "_")
1498+ if ((size(ii) != aM))
14631499 then throw("All 6 resources should be passed")
1464- else if ((size(id) != at))
1500+ else if ((size(ij) != aM))
14651501 then throw("All 6 materials should be passed")
14661502 else {
1467- let gK = hW(hC)
1468- let if = split(hC[aQ], "_")
1469- let ig = split(hC[aR], "_")
1470- let ih = if ((hC[aS] == ""))
1503+ let gQ = ic(hI)
1504+ let il = split(hI[bk], "_")
1505+ let im = split(hI[bl], "_")
1506+ let in = if ((hI[bm] == ""))
14711507 then nil
1472- else split_4C(hC[aS], "_")
1473- let gI = split(ib[aZ], "_")
1474- let ii = split(ib[ba], "_")
1475- let ij = if ((ib[bb] == ""))
1508+ else split_4C(hI[bm], "_")
1509+ let gO = split(ih[bt], "_")
1510+ let io = split(ih[bu], "_")
1511+ let ip = if ((ih[bv] == ""))
14761512 then nil
1477- else split_4C(ib[bb], "_")
1478- func ik (eI,hF) = {
1479- let gv = eI._1
1480- let il = parseIntValue(hF)
1481- let im = parseIntValue(if[gv])
1482- let in = parseIntValue(gI[gv])
1483- if ((il == 0))
1484- then $Tuple4((gv + 1), (eI._2 :+ if[gv]), (eI._3 :+ gI[gv]), eI._4)
1485- else if ((il > 0))
1486- then if ((il > in))
1487- then throw((((("Attempt to take " + hF) + " from backpack, but only ") + toString(in)) + " available"))
1488- else $Tuple4((gv + 1), (eI._2 :+ toString((im + il))), (eI._3 :+ toString((in - il))), (eI._4 + il))
1489- else if ((-(il) > im))
1490- then throw((((("Attempt to take " + toString(-(il))) + " from warehouse, but only ") + toString(im)) + " available"))
1491- else $Tuple4((gv + 1), (eI._2 :+ toString((im + il))), (eI._3 :+ toString((in - il))), (eI._4 + il))
1513+ else split_4C(ih[bv], "_")
1514+ func iq (eL,hL) = {
1515+ let gy = eL._1
1516+ let ir = parseIntValue(hL)
1517+ let is = parseIntValue(il[gy])
1518+ let it = parseIntValue(gO[gy])
1519+ if ((ir == 0))
1520+ then $Tuple4((gy + 1), (eL._2 :+ il[gy]), (eL._3 :+ gO[gy]), eL._4)
1521+ else if ((ir > 0))
1522+ then if ((ir > it))
1523+ then throw((((("Attempt to take " + hL) + " from backpack, but only ") + toString(it)) + " available"))
1524+ else $Tuple4((gy + 1), (eL._2 :+ toString((is + ir))), (eL._3 :+ toString((it - ir))), (eL._4 + ir))
1525+ else if ((-(ir) > is))
1526+ then throw((((("Attempt to take " + toString(-(ir))) + " from warehouse, but only ") + toString(is)) + " available"))
1527+ else $Tuple4((gy + 1), (eL._2 :+ toString((is + ir))), (eL._3 :+ toString((it - ir))), (eL._4 + ir))
14921528 }
14931529
1494- let eT = {
1495- let eK = ic
1496- let eL = size(eK)
1497- let eM = $Tuple4(0, nil, nil, 0)
1498- func eN (eO,eP) = if ((eP >= eL))
1499- then eO
1500- else ik(eO, eK[eP])
1501-
1502- func eQ (eO,eP) = if ((eP >= eL))
1503- then eO
1530+ let eW = {
1531+ let eN = ii
1532+ let eO = size(eN)
1533+ let eP = $Tuple4(0, nil, nil, 0)
1534+ func eQ (eR,eS) = if ((eS >= eO))
1535+ then eR
1536+ else iq(eR, eN[eS])
1537+
1538+ func eT (eR,eS) = if ((eS >= eO))
1539+ then eR
15041540 else throw("List size exceeds 6")
15051541
1506- eQ(eN(eN(eN(eN(eN(eN(eM, 0), 1), 2), 3), 4), 5), 6)
1542+ eT(eQ(eQ(eQ(eQ(eQ(eQ(eP, 0), 1), 2), 3), 4), 5), 6)
15071543 }
1508- func io (eI,hF) = {
1509- let gv = eI._1
1510- let il = parseIntValue(hF)
1511- let ip = parseIntValue(ig[gv])
1512- let iq = parseIntValue(ii[gv])
1513- if ((il == 0))
1514- then $Tuple4((gv + 1), (eI._2 :+ ig[gv]), (eI._3 :+ ii[gv]), eI._4)
1515- else if ((il > 0))
1516- then if ((il > iq))
1517- then throw((((("Attempt to take " + hF) + " from backpack, but only ") + toString(iq)) + " available"))
1518- else $Tuple4((gv + 1), (eI._2 :+ toString((ip + il))), (eI._3 :+ toString((iq - il))), (eI._4 + il))
1519- else if ((-(il) > ip))
1520- then throw((((("Attempt to take " + toString(-(il))) + " from warehouse, but only ") + toString(ip)) + " available"))
1521- else $Tuple4((gv + 1), (eI._2 :+ toString((ip + il))), (eI._3 :+ toString((iq - il))), (eI._4 + il))
1544+ func iu (eL,hL) = {
1545+ let gy = eL._1
1546+ let ir = parseIntValue(hL)
1547+ let iv = parseIntValue(im[gy])
1548+ let iw = parseIntValue(io[gy])
1549+ if ((ir == 0))
1550+ then $Tuple4((gy + 1), (eL._2 :+ im[gy]), (eL._3 :+ io[gy]), eL._4)
1551+ else if ((ir > 0))
1552+ then if ((ir > iw))
1553+ then throw((((("Attempt to take " + hL) + " from backpack, but only ") + toString(iw)) + " available"))
1554+ else $Tuple4((gy + 1), (eL._2 :+ toString((iv + ir))), (eL._3 :+ toString((iw - ir))), (eL._4 + ir))
1555+ else if ((-(ir) > iv))
1556+ then throw((((("Attempt to take " + toString(-(ir))) + " from warehouse, but only ") + toString(iv)) + " available"))
1557+ else $Tuple4((gy + 1), (eL._2 :+ toString((iv + ir))), (eL._3 :+ toString((iw - ir))), (eL._4 + ir))
15221558 }
15231559
1524- let gd = {
1525- let eK = id
1526- let eL = size(eK)
1527- let eM = $Tuple4(0, nil, nil, eT._4)
1528- func hr (eO,eP) = if ((eP >= eL))
1529- then eO
1530- else io(eO, eK[eP])
1531-
1532- func hs (eO,eP) = if ((eP >= eL))
1533- then eO
1560+ let gg = {
1561+ let eN = ij
1562+ let eO = size(eN)
1563+ let eP = $Tuple4(0, nil, nil, eW._4)
1564+ func hx (eR,eS) = if ((eS >= eO))
1565+ then eR
1566+ else iu(eR, eN[eS])
1567+
1568+ func hy (eR,eS) = if ((eS >= eO))
1569+ then eR
15341570 else throw("List size exceeds 6")
15351571
1536- hs(hr(hr(hr(hr(hr(hr(eM, 0), 1), 2), 3), 4), 5), 6)
1572+ hy(hx(hx(hx(hx(hx(hx(eP, 0), 1), 2), 3), 4), 5), 6)
15371573 }
1538- func ir (eI,hF) = {
1539- let gv = eI._1
1540- let il = parseIntValue(hF)
1541- let is = if ((size(ih) > gv))
1542- then parseIntValue(ih[gv])
1574+ func ix (eL,hL) = {
1575+ let gy = eL._1
1576+ let ir = parseIntValue(hL)
1577+ let iy = if ((size(in) > gy))
1578+ then parseIntValue(in[gy])
15431579 else 0
1544- let it = if ((size(ij) > gv))
1545- then parseIntValue(ij[gv])
1580+ let iz = if ((size(ip) > gy))
1581+ then parseIntValue(ip[gy])
15461582 else 0
1547- if ((il == 0))
1548- then $Tuple4((gv + 1), (eI._2 :+ toString(is)), (eI._3 :+ toString(it)), eI._4)
1549- else if ((il > 0))
1550- then if ((il > it))
1551- then throw((((("Attempt to take " + hF) + " from backpack, but only ") + toString(it)) + " available"))
1583+ if ((ir == 0))
1584+ then $Tuple4((gy + 1), (eL._2 :+ toString(iy)), (eL._3 :+ toString(iz)), eL._4)
1585+ else if ((ir > 0))
1586+ then if ((ir > iz))
1587+ then throw((((("Attempt to take " + hL) + " from backpack, but only ") + toString(iz)) + " available"))
15521588 else {
1553- let iu = (ey((is + il), aO) - ey(is, aO))
1554- $Tuple4((gv + 1), (eI._2 :+ toString((is + il))), (eI._3 :+ toString((it - il))), (eI._4 + iu))
1589+ let iA = (eB((iy + ir), bi) - eB(iy, bi))
1590+ $Tuple4((gy + 1), (eL._2 :+ toString((iy + ir))), (eL._3 :+ toString((iz - ir))), (eL._4 + iA))
15551591 }
1556- else if ((-(il) > is))
1557- then throw((((("Attempt to take " + toString(-(il))) + " from warehouse, but only ") + toString(is)) + " available"))
1592+ else if ((-(ir) > iy))
1593+ then throw((((("Attempt to take " + toString(-(ir))) + " from warehouse, but only ") + toString(iy)) + " available"))
15581594 else {
1559- let iu = (ey((is + il), aO) - ey(is, aO))
1560- $Tuple4((gv + 1), (eI._2 :+ toString((is + il))), (eI._3 :+ toString((it - il))), (eI._4 + iu))
1595+ let iA = (eB((iy + ir), bi) - eB(iy, bi))
1596+ $Tuple4((gy + 1), (eL._2 :+ toString((iy + ir))), (eL._3 :+ toString((iz - ir))), (eL._4 + iA))
15611597 }
15621598 }
15631599
1564- let hy = if ((size(ie) != 0))
1600+ let hE = if ((size(ik) != 0))
15651601 then {
1566- let eK = ie
1567- let eL = size(eK)
1568- let eM = $Tuple4(0, nil, nil, gd._4)
1569- func hu (eO,eP) = if ((eP >= eL))
1570- then eO
1571- else ir(eO, eK[eP])
1572-
1573- func hv (eO,eP) = if ((eP >= eL))
1574- then eO
1602+ let eN = ik
1603+ let eO = size(eN)
1604+ let eP = $Tuple4(0, nil, nil, gg._4)
1605+ func hA (eR,eS) = if ((eS >= eO))
1606+ then eR
1607+ else ix(eR, eN[eS])
1608+
1609+ func hB (eR,eS) = if ((eS >= eO))
1610+ then eR
15751611 else throw("List size exceeds 50")
15761612
1577- hv(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(eM, 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)
1613+ hB(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(eP, 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)
15781614 }
1579- else $Tuple4(0, ih, ij, gd._4)
1580- let iv = hy._4
1581- if ((iv > gK))
1582- then throw((((("Attempt to put total " + toString(iv)) + " stuff, but only ") + toString(gK)) + " warehouse space left"))
1583- else $Tuple7(makeString(eT._2, "_"), makeString(gd._2, "_"), makeString_2C(hy._2, "_"), makeString(eT._3, "_"), makeString(gd._3, "_"), makeString_2C(hy._3, "_"), iv)
1615+ else $Tuple4(0, in, ip, gg._4)
1616+ let iB = hE._4
1617+ if ((iB > gQ))
1618+ then throw((((("Attempt to put total " + toString(iB)) + " stuff, but only ") + toString(gQ)) + " warehouse space left"))
1619+ else $Tuple7(makeString(eW._2, "_"), makeString(gg._2, "_"), makeString_2C(hE._2, "_"), makeString(eW._3, "_"), makeString(gg._3, "_"), makeString_2C(hE._3, "_"), iB)
15841620 }
15851621 }
15861622
15871623
1588-func iw (ix,iy) = {
1589- let bC = toString(ix)
1590- let iz = gQ(toBigInt(iy))
1591- let iA = valueOrElse(getInteger(ea()), (dZ + 1))
1592- let ee = toString(iA)
1593- let gZ = toInt((iz % dT))
1594- let gy = gX(iz, gZ)
1595- let di = aH[gZ]
1596- let iB = Issue(ex(ee, "S"), makeString([ee, "S", gy, di], "_"), 1, 0, false)
1597- let bg = calculateAssetId(iB)
1598- let iC = toBase58String(bg)
1599- $Tuple2([IntegerEntry(ea(), (iA + 1)), iB, StringEntry(ed(ee), iC), StringEntry(bf(iC), bC), StringEntry(eg(ee), bC), IntegerEntry(bq(iC), 0), IntegerEntry(ef(iC, bC), 0), ScriptTransfer(ix, 1, bg)], $Tuple2(iC, di))
1600- }
1601-
1602-
1603-func iD (bC,iE,iF) = if (!(sigVerify_8Kb(iE, iF, cl)))
1624+func iC (iD,iE) = {
1625+ let bW = toString(iD)
1626+ let iF = gW(toBigInt(iE))
1627+ let iG = valueOrElse(getInteger(ed()), (ec + 1))
1628+ let eh = toString(iG)
1629+ let hf = toInt((iF % dW))
1630+ let gB = hd(iF, hf)
1631+ let ae = bb[hf]
1632+ let iH = Issue(eA(eh, "S"), makeString([eh, "S", gB, ae], "_"), 1, 0, false)
1633+ let bA = calculateAssetId(iH)
1634+ let iI = toBase58String(bA)
1635+ $Tuple2([IntegerEntry(ed(), (iG + 1)), iH, StringEntry(eg(eh), iI), StringEntry(bz(iI), bW), StringEntry(ej(eh), bW), IntegerEntry(bJ(iI), 0), IntegerEntry(ei(iI, bW), 0), ScriptTransfer(iD, 1, bA)], $Tuple2(iI, ae))
1636+ }
1637+
1638+
1639+func iJ (bW,iK,iL) = if (!(sigVerify_8Kb(iK, iL, f)))
16041640 then throw("signature does not match")
16051641 else {
1606- let fg = split_4C(toUtf8String(iE), ";")
1607- let iG = split_4C(fg[0], "|")
1608- let iH = split(iG[eo], "_")
1609- let iI = parseIntValue(iH[0])
1610- let iJ = parseIntValue(iH[1])
1611- let iK = split(fg[1], ":")
1612- let iL = iK[0]
1613- let iM = parseIntValue(iG[ep])
1614- if (if ((iM > (lastBlock.timestamp + dL)))
1642+ let fj = split_4C(toUtf8String(iK), ";")
1643+ let iM = split_4C(fj[0], "|")
1644+ let iN = split(iM[er], "_")
1645+ let iO = parseIntValue(iN[0])
1646+ let iP = parseIntValue(iN[1])
1647+ let iQ = split(fj[1], ":")
1648+ let iR = iQ[0]
1649+ let iS = parseIntValue(iM[es])
1650+ if (if ((iS > (lastBlock.timestamp + dO)))
16151651 then true
1616- else ((lastBlock.timestamp - dL) > iM))
1617- then throw(((("signature outdated: logTime=" + toString(iM)) + ", bcTime=") + toString(lastBlock.timestamp)))
1652+ else ((lastBlock.timestamp - dO) > iS))
1653+ then throw(((("signature outdated: logTime=" + toString(iS)) + ", bcTime=") + toString(lastBlock.timestamp)))
16181654 else {
1619- let iN = iK[1]
1620- let iO = valueOrElse(getString(dx(bC)), "")
1621- if ((iO != iN))
1622- then throw(((("Tx ids don't match! In state: " + iO) + ", in msg: ") + iN))
1655+ let iT = iQ[1]
1656+ let iU = valueOrElse(getString(au(bW)), "")
1657+ if ((iU != iT))
1658+ then throw(((("Tx ids don't match! In state: " + iU) + ", in msg: ") + iT))
16231659 else {
1624- let u = valueOrErrorMessage(getString(by(bC)), "You don't have a duck staked")
1625- let iP = t(u)
1626- let iQ = ab(valueOrElse(getInteger(x(u)), 0))
1627- let iR = valueOrElse(getInteger(iP), iQ)
1628- if ((iR != iI))
1629- then throw(((("oldHealth=" + toString(iR)) + " from state does not match one from flight log=") + toString(iI)))
1630- else if ((0 >= iI))
1660+ let bO = valueOrErrorMessage(getString(bS(bW)), "You don't have a duck staked")
1661+ let iV = cP(bO)
1662+ let iW = dw(valueOrElse(getInteger(cS(bO)), 0))
1663+ let iX = valueOrElse(getInteger(iV), iW)
1664+ if ((iX != iO))
1665+ then throw(((("oldHealth=" + toString(iX)) + " from state does not match one from flight log=") + toString(iO)))
1666+ else if ((0 >= iO))
16311667 then throw("You can't fly with zero health")
1632- else if (!(gg(u)))
1668+ else if (!(gj(bO)))
16331669 then throw("Equipment incompatible")
16341670 else {
1635- let iS = if ((size(iG) > eq))
1636- then iG[eq]
1671+ let iY = if ((size(iM) > et))
1672+ then iM[et]
16371673 else ""
1638- let iT = if ((size(iG) > er))
1639- then iG[er]
1674+ let iZ = if ((size(iM) > eu))
1675+ then iM[eu]
16401676 else ""
1641- let iU = if (if ((iJ > 0))
1642- then (iS == "$")
1677+ let ja = if (if ((iP > 0))
1678+ then (iY == "$")
16431679 else false)
1644- then do(invoke(cQ, "sendUsdtPrize", [bC], nil))
1680+ then al(invoke(L, "sendUsdtPrize", [bW], nil))
16451681 else 0
1646- $Tuple5(iJ, u, iU, iL, iT)
1682+ $Tuple5(iP, bO, ja, iR, iZ)
16471683 }
16481684 }
16491685 }
16501686 }
16511687
16521688
1653-func iV (bp,iW) = {
1654- let hN = valueOrElse(getInteger(bq(bp)), 0)
1655- let iX = valueOrElse(getInteger(bj(as, bp)), 0)
1656- let iY = (hN / 6)
1657- let iZ = (hN / 7)
1658- ((av + fraction(av, ((hN + iY) + (2 * iZ)), 5)) + fraction(av, iX, (iW * 5)))
1659- }
1660-
1661-
1662-func ja (c,jb,jc) = {
1663- let jd = if ((jb == el))
1664- then $Tuple2(jc, valueOrElse(getString(by(c)), ""))
1689+func jb (bI,jc) = {
1690+ let hT = valueOrElse(getInteger(bJ(bI)), 0)
1691+ let jd = valueOrElse(getInteger(bD(aL, bI)), 0)
1692+ let je = (hT / 6)
1693+ let jf = (hT / 7)
1694+ ((aO + fraction(aO, ((hT + je) + (2 * jf)), 5)) + fraction(aO, jd, (jc * 5)))
1695+ }
1696+
1697+
1698+func jg (av,jh,ji) = {
1699+ let jj = if ((jh == eo))
1700+ then $Tuple2(ji, valueOrElse(getString(bS(av)), ""))
16651701 else {
1666- let u = valueOrErrorMessage(getString(by(c)), "You don't have a duck staked")
1667- let je = valueOrElse(getString(bA(u)), ax)
1668- let bV = split(value(je), "_")
1669- if ((bV[bd] != "L"))
1670- then throw((("Duck location type is " + bV[bd]) + ", but should be L"))
1671- else $Tuple2(bV[be], u)
1672- }
1673- let bp = jd._1
1674- let jf = jd._2
1675- let jg = value(assetInfo(fromBase58String(bp)))
1676- let jh = bi(bp)
1677- let ji = valueOrErrorMessage(getInteger(jh), (("Land " + jg.name) + " is not staked"))
1678- let jj = valueOrErrorMessage(getString(bf(bp)), (("NFT " + jg.name) + " is orphaned"))
1679- if ((jj != c))
1680- then throw((ap + " is not yours"))
1702+ let bO = valueOrErrorMessage(getString(bS(av)), "You don't have a duck staked")
1703+ let jk = valueOrElse(getString(bU(bO)), aQ)
1704+ let cp = split(value(jk), "_")
1705+ if ((cp[bx] != "L"))
1706+ then throw((("Duck location type is " + cp[bx]) + ", but should be L"))
1707+ else $Tuple2(cp[by], bO)
1708+ }
1709+ let bI = jj._1
1710+ let jl = jj._2
1711+ let jm = value(assetInfo(fromBase58String(bI)))
1712+ let jn = bC(bI)
1713+ let jo = valueOrErrorMessage(getInteger(jn), (("Land " + jm.name) + " is not staked"))
1714+ let jp = valueOrErrorMessage(getString(bz(bI)), (("NFT " + jm.name) + " is orphaned"))
1715+ if ((jp != av))
1716+ then throw((aI + " is not yours"))
16811717 else {
1682- let jk = split(jg.description, "_")
1683- $Tuple4(jf, bp, jk, ji)
1684- }
1685- }
1686-
1687-
1688-func jl (c,ez,jb,jc) = if ((0 > ez))
1718+ let jq = split(jm.description, "_")
1719+ $Tuple4(jl, bI, jq, jo)
1720+ }
1721+ }
1722+
1723+
1724+func jr (av,eC,jh,ji) = if ((0 > eC))
16891725 then throw("Negative amount")
16901726 else {
1691- let fN = ja(c, jb, jc)
1692- let du = fN._3[cX]
1693- let gr = gx(fN._3[cY])
1694- let gB = (lastBlock.timestamp - fN._4)
1695- if ((0 > gB))
1696- then throw(((("Saved timestamp is in future, saved = " + toString(fN._4)) + ", current = ") + toString(lastBlock.timestamp)))
1727+ let fQ = jg(av, jh, ji)
1728+ let ar = fQ._3[T]
1729+ let gu = gA(fQ._3[U])
1730+ let gE = (aH() - fQ._4)
1731+ if ((0 > gE))
1732+ then throw(((("Saved timestamp is in future, saved = " + toString(fQ._4)) + ", final = ") + toString(aH())))
16971733 else {
1698- let iW = dt(du)
1699- let jm = iV(fN._2, iW)
1700- let jn = fraction(gB, (jm * iW), a)
1701- if ((ez > jn))
1702- then throw(((("Not enough resources, available = " + toString(jn)) + ", requested = ") + toString(ez)))
1734+ let jc = aq(ar)
1735+ let js = jb(fQ._2, jc)
1736+ let jt = fraction(gE, (js * jc), dJ)
1737+ if ((eC > jt))
1738+ then throw(((("Not enough resources, available = " + toString(jt)) + ", requested = ") + toString(eC)))
17031739 else {
1704- let jo = fraction((jn - ez), a, (jm * iW))
1705- let jp = (lastBlock.timestamp - jo)
1706- let hM = (iW / cu)
1707- let gJ = gF(gr, (gB - jo), hM, jm)
1708- let hL = bo(fN._2)
1709- let hN = valueOrElse(getInteger(bq(fN._2)), 0)
1710- let hC = hK(hL, hM, hN)
1711- let hT = split(hC[aT], "_")
1712- let gK = parseIntValue(hT[aW])
1713- if (if ((jb == el))
1714- then (ez > gK)
1740+ let ju = fraction((jt - eC), dJ, (js * jc))
1741+ let jv = (aH() - ju)
1742+ let hS = (jc / p)
1743+ let gP = gK(gu, (gE - ju), hS, js)
1744+ let hR = bH(fQ._2)
1745+ let hT = valueOrElse(getInteger(bJ(fQ._2)), 0)
1746+ let hI = hQ(hR, hS, hT)
1747+ let hZ = split(hI[bn], "_")
1748+ let gQ = parseIntValue(hZ[bq])
1749+ if (if ((jh == eo))
1750+ then (eC > gQ)
17151751 else false)
1716- then throw((("Only " + toString(gK)) + " space left in warehouse"))
1752+ then throw((("Only " + toString(gQ)) + " space left in warehouse"))
17171753 else {
1718- let hx = bz(fN._1)
1719- let ib = hw(hx)
1720- let gI = split(ib[aZ], "_")
1721- let gH = split(hC[aQ], "_")
1722- let jq = if ((jb == el))
1723- then $Tuple4(gz(gH, gr, (gB - jo), hM, jm), ib[aZ], (parseIntValue(hT[aV]) + gJ._2), (parseIntValue(hT[aW]) - gJ._2))
1724- else if ((jb == em))
1725- then $Tuple4(hC[aQ], gz(gI, gr, (gB - jo), hM, jm), parseIntValue(hT[aV]), parseIntValue(hT[aW]))
1754+ let hD = bT(fQ._1)
1755+ let ih = hC(hD)
1756+ let gO = split(ih[bt], "_")
1757+ let gN = split(hI[bk], "_")
1758+ let jw = if ((jh == eo))
1759+ then $Tuple4(gC(gN, gu, (gE - ju), hS, js), ih[bt], (parseIntValue(hZ[bp]) + gP._2), (parseIntValue(hZ[bq]) - gP._2))
1760+ else if ((jh == ep))
1761+ then $Tuple4(hI[bk], gC(gO, gu, (gE - ju), hS, js), parseIntValue(hZ[bp]), parseIntValue(hZ[bq]))
17261762 else {
1727- let jr = gG(gH, gI, gJ, gK)
1728- let js = min([parseIntValue(hT[aW]), gJ._2])
1729- $Tuple4(jr._1, jr._2, (parseIntValue(hT[aV]) + js), (parseIntValue(hT[aW]) - js))
1763+ let jx = gM(gN, gO, gP, gQ)
1764+ let jy = min([parseIntValue(hZ[bq]), gP._2])
1765+ $Tuple4(jx._1, jx._2, (parseIntValue(hZ[bp]) + jy), (parseIntValue(hZ[bq]) - jy))
17301766 }
1731- let jt = jq._1
1732- let ju = jq._2
1733- let jv = jq._3
1734- let jw = jq._4
1735- $Tuple5([IntegerEntry(bi(fN._2), jp), IntegerEntry(bl(ap, fN._2, c), jp)], hx, [ib[aY], ju, ib[ba], ib[bb]], hL, [hC[aP], jt, hC[aR], hC[aS], makeString([hT[aU], toString(jv), toString(jw), hT[aX]], "_")])
1767+ let jz = jw._1
1768+ let jA = jw._2
1769+ let jB = jw._3
1770+ let jC = jw._4
1771+ $Tuple5([IntegerEntry(bC(fQ._2), jv), IntegerEntry(bF(aI, fQ._2, av), jv)], hD, [ih[bs], jA, ih[bu], ih[bv]], hR, [hI[bj], jz, hI[bl], hI[bm], makeString([hZ[bo], toString(jB), toString(jC), hZ[br]], "_")])
17361772 }
17371773 }
17381774 }
17391775 }
17401776
17411777
1742-func jx (c,bp,iW,jb) = {
1743- let jh = bi(bp)
1744- let ji = value(getInteger(jh))
1745- let jn = (fraction((lastBlock.timestamp - ji), iV(bp, iW), a) * iW)
1746- jl(c, jn, jb, bp)
1747- }
1748-
1749-
1750-func jy (eV,ix,jz,bp) = {
1751- let c = toString(ix)
1752- let fN = ja(c, en, bp)
1753- let iW = dt(fN._3[cX])
1754- let jA = bq(fN._2)
1755- let jB = valueOrElse(getInteger(jA), 0)
1756- if (if (!(ch))
1757- then (jB >= 3)
1778+func jD (av,bI,jc,jh) = {
1779+ let jn = bC(bI)
1780+ let jo = value(getInteger(jn))
1781+ let jt = (fraction((aH() - jo), jb(bI, jc), dJ) * jc)
1782+ jr(av, jt, jh, bI)
1783+ }
1784+
1785+
1786+func jE (eY,iD,jF,bI) = {
1787+ let av = toString(iD)
1788+ let fQ = jg(av, eq, bI)
1789+ let jc = aq(fQ._3[T])
1790+ let jG = bJ(fQ._2)
1791+ let jH = valueOrElse(getInteger(jG), 0)
1792+ if (if (!(b))
1793+ then (jH >= 3)
17581794 else false)
17591795 then throw("Currently max infrastructure level = 3")
17601796 else {
1761- let jC = ((sqrt(iW, 0, 0, DOWN) / 5) + 2)
1762- let ag = (jB + 1)
1763- if (if (ch)
1764- then (ag > jC)
1797+ let jI = ((sqrt(jc, 0, 0, DOWN) / 5) + 2)
1798+ let dB = (jH + 1)
1799+ if (if (b)
1800+ then (dB > jI)
17651801 else false)
1766- then throw(("Currently max infrastructure level = " + toString(jC)))
1802+ then throw(("Currently max infrastructure level = " + toString(jI)))
17671803 else {
1768- let jD = fraction(dO, (iW * ag), cu)
1769- if (if (!(eV))
1770- then (jz != jD)
1804+ let jJ = fraction(dR, (jc * dB), p)
1805+ if (if (!(eY))
1806+ then (jF != jJ)
17711807 else false)
1772- then throw(("Payment attached should be " + toString(jD)))
1808+ then throw(("Payment attached should be " + toString(jJ)))
17731809 else {
1774- let hx = bz(fN._1)
1775- let ib = hw(hx)
1776- let jE = split(ib[ba], "_")
1777- let jF = fraction(cp, (iW * ag), cu)
1778- let jG = makeString(eU(eV, jE, jF), "_")
1779- let jH = jx(c, fN._2, iW, en)
1780- let jI = jH._5
1781- let jJ = hz(jI[aP])
1782- let jK = makeString([split(jI[aP], "_")[0], toString(ag)], "_")
1783- let jL = hz(jK)
1784- let hT = split(jI[aT], "_")
1785- let jM = makeString([hT[aU], hT[aV], toString(((parseIntValue(hT[aW]) + jL) - jJ)), toString(jL)], "_")
1786- $Tuple3(([IntegerEntry(jA, ag), IntegerEntry(ef(fN._2, c), ag), StringEntry(hx, makeString([ib[aY], jH._3[aZ], jG, ib[bb]], ":")), StringEntry(jH._4, makeString([jK, jI[aQ], jI[aR], jI[aS], jM], ":"))] ++ jH._1), ag, jF)
1810+ let hD = bT(fQ._1)
1811+ let ih = hC(hD)
1812+ let jK = split(ih[bu], "_")
1813+ let jL = fraction(k, (jc * dB), p)
1814+ let jM = makeString(eX(eY, jK, jL), "_")
1815+ let jN = jD(av, fQ._2, jc, eq)
1816+ let jO = jN._5
1817+ let jP = hF(jO[bj])
1818+ let jQ = makeString([split(jO[bj], "_")[0], toString(dB)], "_")
1819+ let jR = hF(jQ)
1820+ let hZ = split(jO[bn], "_")
1821+ let jS = makeString([hZ[bo], hZ[bp], toString(((parseIntValue(hZ[bq]) + jR) - jP)), toString(jR)], "_")
1822+ $Tuple3(([IntegerEntry(jG, dB), IntegerEntry(ei(fQ._2, av), dB), StringEntry(hD, makeString([ih[bs], jN._3[bt], jM, ih[bv]], ":")), StringEntry(jN._4, makeString([jQ, jO[bk], jO[bl], jO[bm], jS], ":"))] ++ jN._1), dB, jL)
17871823 }
17881824 }
17891825 }
17901826 }
17911827
17921828
1793-func jN (jO,jP,jQ,jR) = {
1794- let aa = valueOrElse(getInteger(jP), 0)
1795- let af = (aa + jR)
1796- let jS = ad(valueOrElse(getInteger(jO), 0), af)
1797- $Tuple2([IntegerEntry(jO, jS[0]), IntegerEntry(jP, af), IntegerEntry(jQ, (valueOrElse(getInteger(jQ), 0) + jS[1]))], af)
1798- }
1799-
1800-
1801-func jT (u,jR) = {
1802- let jg = value(assetInfo(fromBase58String(u)))
1803- let c = valueOrErrorMessage(getString(bx(u)), (("NFT " + jg.name) + " is orphaned"))
1804- if (if (if (ci)
1805- then (jg.issuer == this)
1829+func jT (jU,jV,jW,jX) = {
1830+ let dv = valueOrElse(getInteger(jV), 0)
1831+ let dA = (dv + jX)
1832+ let jY = dy(valueOrElse(getInteger(jU), 0), dA)
1833+ $Tuple2([IntegerEntry(jU, jY[0]), IntegerEntry(jV, dA), IntegerEntry(jW, (valueOrElse(getInteger(jW), 0) + jY[1]))], dA)
1834+ }
1835+
1836+
1837+func jZ (bO,jX) = {
1838+ let jm = value(assetInfo(fromBase58String(bO)))
1839+ let av = valueOrErrorMessage(getString(bR(bO)), (("NFT " + jm.name) + " is orphaned"))
1840+ if (if (if (c)
1841+ then (jm.issuer == this)
18061842 else false)
1807- then contains(jg.name, ar)
1843+ then contains(jm.name, aK)
18081844 else false)
1809- then jN(B(c), A(c), C(c), jR)
1810- else jN(x(u), w(u), y(u), jR)
1811- }
1812-
1813-
1814-func jU (c,jR) = jN(B(c), A(c), C(c), jR)
1815-
1816-
1817-func jV (c) = {
1818- let u = valueOrErrorMessage(getString(by(c)), "You don't have a duck staked")
1819- let jW = bt(c)
1820- let jX = getString(jW)
1821- if (!(isDefined(jX)))
1845+ then jT(cW(av), cV(av), cX(av), jX)
1846+ else jT(cS(bO), cR(bO), cT(bO), jX)
1847+ }
1848+
1849+
1850+func ka (av,jX) = jT(cW(av), cV(av), cX(av), jX)
1851+
1852+
1853+func kb (av) = {
1854+ let bO = valueOrErrorMessage(getString(bS(av)), "You don't have a duck staked")
1855+ let kc = bM(av)
1856+ let kd = getString(kc)
1857+ if (!(isDefined(kd)))
18221858 then throw("You are not eligible for ONBOARD artifact")
18231859 else {
1824- let jY = bv(c)
1825- let jZ = getString(jY)
1826- if (isDefined(jZ))
1827- then throw(("You already used your ONBOARD artifact on duck " + value(jZ)))
1860+ let ke = bP(av)
1861+ let kf = getString(ke)
1862+ if (isDefined(kf))
1863+ then throw(("You already used your ONBOARD artifact on duck " + value(kf)))
18281864 else {
1829- let ka = bu(u)
1830- let kb = getString(ka)
1831- if (isDefined(kb))
1832- then throw(((("The duck " + u) + " already got points from ONBOARD artifact from user ") + value(kb)))
1833- else ([StringEntry(jY, u), StringEntry(ka, c)] ++ jT(u, X)._1)
1865+ let kg = bN(bO)
1866+ let kh = getString(kg)
1867+ if (isDefined(kh))
1868+ then throw(((("The duck " + bO) + " already got points from ONBOARD artifact from user ") + value(kh)))
1869+ else ([StringEntry(ke, bO), StringEntry(kg, av)] ++ jZ(bO, ds)._1)
18341870 }
18351871 }
18361872 }
18371873
18381874
1839-func kc (c,jc) = {
1840- let fN = ja(c, en, jc)
1841- let bp = fN._2
1842- let iW = dt(fN._3[cX])
1843- let kd = bj(as, bp)
1844- if ((valueOrElse(getInteger(kd), 0) > 0))
1875+func ki (av,ji) = {
1876+ let fQ = jg(av, eq, ji)
1877+ let bI = fQ._2
1878+ let jc = aq(fQ._3[T])
1879+ let kj = bD(aL, bI)
1880+ if ((valueOrElse(getInteger(kj), 0) > 0))
18451881 then throw("Presale artifact is already activated")
1846- else if ((parseIntValue(fN._3[cW]) > dZ))
1847- then throw((((ap + " ") + bp) + " is not eligible for presale artifact"))
1882+ else if ((parseIntValue(fQ._3[S]) > ec))
1883+ then throw((((aI + " ") + bI) + " is not eligible for presale artifact"))
18481884 else {
1849- let jH = jx(c, bp, iW, en)
1850- (((jH._1 :+ IntegerEntry(kd, iW)) :+ StringEntry(jH._2, makeString(jH._3, ":"))) :+ StringEntry(jH._4, makeString(jH._5, ":")))
1885+ let jN = jD(av, bI, jc, eq)
1886+ (((jN._1 :+ IntegerEntry(kj, jc)) :+ StringEntry(jN._2, makeString(jN._3, ":"))) :+ StringEntry(jN._4, makeString(jN._5, ":")))
18511887 }
18521888 }
18531889
18541890
1855-func ke (u) = {
1856- let bU = valueOrElse(getInteger(cU, bF), 0)
1857- let je = split(valueOrElse(getString(bA(u)), ax), "_")
1858- let bW = lastBlock.timestamp
1859- let bX = bO(cU, bU)
1860- let bQ = bX[bK]
1861- let bR = bX[bL]
1862- if ((je[bd] != "T"))
1891+func kk (bO) = {
1892+ let co = valueOrElse(getInteger(Q, bZ), 0)
1893+ let jk = split(valueOrElse(getString(bU(bO)), aQ), "_")
1894+ let cq = lastBlock.timestamp
1895+ let cr = ci(Q, co)
1896+ let ck = cr[ce]
1897+ let cl = cr[cf]
1898+ if ((jk[bx] != "T"))
18631899 then false
1864- else if (if (if ((parseIntValue(je[bc]) == bU))
1865- then (bR[bN] == "INPROGRESS")
1900+ else if (if (if ((parseIntValue(jk[bw]) == co))
1901+ then (cl[ch] == "INPROGRESS")
18661902 else false)
1867- then (parseIntValue(bQ[bM]) > bW)
1903+ then (parseIntValue(ck[cg]) > cq)
18681904 else false)
18691905 then throw("Your duck is taking part in the tournament")
1870- else ds(invoke(this, "exitTournamentInternal", [u], nil))
1871- }
1872-
1873-
1874-func kf (kg,ag,kh,c,ki,kj) = {
1875- let u = valueOrErrorMessage(getString(by(c)), "You don't have a duck staked")
1876- if (ke(u))
1906+ else ap(invoke(this, "exitTournamentInternal", [bO], nil))
1907+ }
1908+
1909+
1910+func kl (km,dB,kn,av,ko,kp) = {
1911+ let bO = valueOrErrorMessage(getString(bS(av)), "You don't have a duck staked")
1912+ if (kk(bO))
18771913 then throw("mergeInternal_checkTournament")
18781914 else {
1879- func kk (eI,bp) = {
1880- let jg = value(assetInfo(fromBase58String(bp)))
1881- let jh = bi(bp)
1882- let ji = valueOrErrorMessage(getInteger(jh), (("NFT " + jg.name) + " is not staked"))
1883- let jj = valueOrErrorMessage(getString(bf(bp)), (("NFT " + jg.name) + " is orphaned"))
1884- if ((jj != c))
1885- then throw((ap + " is not yours"))
1915+ func kq (eL,bI) = {
1916+ let jm = value(assetInfo(fromBase58String(bI)))
1917+ let jn = bC(bI)
1918+ let jo = valueOrErrorMessage(getInteger(jn), (("NFT " + jm.name) + " is not staked"))
1919+ let jp = valueOrErrorMessage(getString(bz(bI)), (("NFT " + jm.name) + " is orphaned"))
1920+ if ((jp != av))
1921+ then throw((aI + " is not yours"))
18861922 else {
1887- let jk = split(jg.description, "_")
1888- let di = jk[cZ]
1889- if (if ((eI._3 != ""))
1890- then (eI._3 != di)
1923+ let jq = split(jm.description, "_")
1924+ let ae = jq[V]
1925+ if (if ((eL._3 != ""))
1926+ then (eL._3 != ae)
18911927 else false)
18921928 then throw("Lands should be on the same continent to merge")
18931929 else {
1894- let du = jk[cX]
1895- let kl = eI._1
1896- let gv = valueOrErrorMessage(indexOf(kl, du), "You haven't passed all the lands needed")
1897- let km = (take(kl, gv) + drop(kl, (gv + 1)))
1898- let iW = dt(du)
1899- let kn = (eI._2 + valueOrElse(getInteger(bj(as, bp)), 0))
1900- let hN = valueOrElse(getInteger(bq(bp)), 0)
1901- let ko = {
1902- let cm = du
1903- if (("S" == cm))
1930+ let ar = jq[T]
1931+ let kr = eL._1
1932+ let gy = valueOrErrorMessage(indexOf(kr, ar), "You haven't passed all the lands needed")
1933+ let ks = (take(kr, gy) + drop(kr, (gy + 1)))
1934+ let jc = aq(ar)
1935+ let kt = (eL._2 + valueOrElse(getInteger(bD(aL, bI)), 0))
1936+ let hT = valueOrElse(getInteger(bJ(bI)), 0)
1937+ let ku = {
1938+ let g = ar
1939+ if (("S" == g))
19041940 then 3
1905- else if (("M" == cm))
1941+ else if (("M" == g))
19061942 then 4
1907- else if (("L" == cm))
1943+ else if (("L" == g))
19081944 then 5
1909- else if (("XL" == cm))
1945+ else if (("XL" == g))
19101946 then 6
19111947 else throw("Only S, M, L, XL can merge")
19121948 }
1913- if ((hN != ko))
1949+ if ((hT != ku))
19141950 then throw("All lands should be maxed to merge")
19151951 else {
1916- let ee = jk[cW]
1917- let gr = gx(jk[cY])
1918- let gB = (lastBlock.timestamp - ji)
1919- if ((0 > gB))
1920- then throw(((("Saved timestamp is in future, saved = " + toString(ji)) + ", current = ") + toString(lastBlock.timestamp)))
1952+ let eh = jq[S]
1953+ let gu = gA(jq[U])
1954+ let gE = (lastBlock.timestamp - jo)
1955+ if ((0 > gE))
1956+ then throw(((("Saved timestamp is in future, saved = " + toString(jo)) + ", current = ") + toString(lastBlock.timestamp)))
19211957 else {
1922- let jm = iV(bp, iW)
1923- let hM = (iW / cu)
1924- let ju = gz(split(eI._4, "_"), gr, gB, hM, jm)
1925- let eS = gp(eI._6, gr, hM, -1)
1926- let kp = gp(eI._10, gr, hM, -1)
1927- let hg = gp(eI._9, gr, hM, 1)
1928- let kq = eI._7
1929- let cP = indexOf(kq, bp)
1930- if (!(isDefined(cP)))
1931- then throw(("Your staked lands don't contain " + bp))
1958+ let js = jb(bI, jc)
1959+ let hS = (jc / p)
1960+ let jA = gC(split(eL._4, "_"), gu, gE, hS, js)
1961+ let eV = gs(eL._6, gu, hS, -1)
1962+ let kv = gs(eL._10, gu, hS, -1)
1963+ let hm = gs(eL._9, gu, hS, 1)
1964+ let kw = eL._7
1965+ let K = indexOf(kw, bI)
1966+ if (!(isDefined(K)))
1967+ then throw(("Your staked lands don't contain " + bI))
19321968 else {
1933- let kr = bh(bp)
1934- let ks = valueOrElse(getString(kr), "")
1935- $Tuple10(km, kn, di, ju, ((((((((((((eI._5 :+ DeleteEntry(bi(bp))) :+ DeleteEntry(bl(ap, bp, c))) :+ DeleteEntry(ed(ee))) :+ DeleteEntry(bf(bp))) :+ DeleteEntry(bq(bp))) :+ DeleteEntry(ef(bp, c))) :+ DeleteEntry(bj(as, bp))) :+ DeleteEntry(eg(ee))) :+ DeleteEntry(bo(bp))) :+ DeleteEntry(kr)) :+ Burn(fromBase58String(bp), 1)) ++ (if ((ks != ""))
1936- then [DeleteEntry(eb(ks))]
1937- else nil)), eS, removeByIndex(kq, value(cP)), (eI._8 + iW), hg, kp)
1969+ let kx = bB(bI)
1970+ let ky = valueOrElse(getString(kx), "")
1971+ $Tuple10(ks, kt, ae, jA, ((((((((((((eL._5 :+ DeleteEntry(bC(bI))) :+ DeleteEntry(bF(aI, bI, av))) :+ DeleteEntry(eg(eh))) :+ DeleteEntry(bz(bI))) :+ DeleteEntry(bJ(bI))) :+ DeleteEntry(ei(bI, av))) :+ DeleteEntry(bD(aL, bI))) :+ DeleteEntry(ej(eh))) :+ DeleteEntry(bH(bI))) :+ DeleteEntry(kx)) :+ Burn(fromBase58String(bI), 1)) ++ (if ((ky != ""))
1972+ then [DeleteEntry(ee(ky))]
1973+ else nil)), eV, removeByIndex(kw, value(K)), (eL._8 + jc), hm, kv)
19381974 }
19391975 }
19401976 }
19421978 }
19431979 }
19441980
1945- let hx = bz(u)
1946- let ib = hw(hx)
1947- let gq = split(valueOrElse(getString(dg()), "0_0_0_0_0_0"), "_")
1948- let kt = dj(c)
1949- let ku = getString(kt)
1950- let kv = if (isDefined(ku))
1951- then split_51C(value(ku), "_")
1981+ let hD = bT(bO)
1982+ let ih = hC(hD)
1983+ let gt = split(valueOrElse(getString(ac()), "0_0_0_0_0_0"), "_")
1984+ let kz = af(av)
1985+ let kA = getString(kz)
1986+ let kB = if (isDefined(kA))
1987+ then split_51C(value(kA), "_")
19521988 else nil
1953- let kw = split(value(assetInfo(fromBase58String(ki[0]))).description, "_")[cZ]
1954- let kx = split(valueOrElse(getString(dh(kw)), "0_0_0_0_0_0"), "_")
1955- let eT = {
1956- let eK = ki
1957- let eL = size(eK)
1958- let eM = $Tuple10(kh, 0, "", ib[aZ], nil, gq, kv, 0, split("0_0_0_0_0_0", "_"), kx)
1959- func eN (eO,eP) = if ((eP >= eL))
1960- then eO
1961- else kk(eO, eK[eP])
1962-
1963- func eQ (eO,eP) = if ((eP >= eL))
1964- then eO
1989+ let kC = split(value(assetInfo(fromBase58String(ko[0]))).description, "_")[V]
1990+ let kD = split(valueOrElse(getString(ad(kC)), "0_0_0_0_0_0"), "_")
1991+ let eW = {
1992+ let eN = ko
1993+ let eO = size(eN)
1994+ let eP = $Tuple10(kn, 0, "", ih[bt], nil, gt, kB, 0, split("0_0_0_0_0_0", "_"), kD)
1995+ func eQ (eR,eS) = if ((eS >= eO))
1996+ then eR
1997+ else kq(eR, eN[eS])
1998+
1999+ func eT (eR,eS) = if ((eS >= eO))
2000+ then eR
19652001 else throw("List size exceeds 5")
19662002
1967- eQ(eN(eN(eN(eN(eN(eM, 0), 1), 2), 3), 4), 5)
2003+ eT(eQ(eQ(eQ(eQ(eQ(eP, 0), 1), 2), 3), 4), 5)
19682004 }
1969- let di = eT._3
1970- let gZ = valueOrErrorMessage(indexOf(aH, di), ("Unknown continent: " + di))
1971- let gy = hf(eT._9, (dt(kg) / cu))
1972- let iA = valueOrElse(getInteger(ea()), (dZ + 1))
1973- let ky = toString(iA)
1974- let iB = Issue(ex(ky, kg), makeString([ky, kg, gy, di], "_"), 1, 0, false)
1975- let bg = calculateAssetId(iB)
1976- let kz = toBase58String(bg)
1977- let jG = makeString(eU((kj > 0), split(ib[ba], "_"), kj), "_")
1978- let kA = dk(c)
1979- let kB = valueOrElse(getInteger(kA), 0)
1980- $Tuple2((((((((((((((((eT._5 :+ (if ((size(eT._7) > 0))
1981- then StringEntry(kt, makeString_11C(eT._7, "_"))
1982- else DeleteEntry(kt))) :+ IntegerEntry(kA, if ((eT._8 > kB))
2005+ let ae = eW._3
2006+ let hf = valueOrErrorMessage(indexOf(bb, ae), ("Unknown continent: " + ae))
2007+ let gB = hl(eW._9, (aq(km) / p))
2008+ let iG = valueOrElse(getInteger(ed()), (ec + 1))
2009+ let kE = toString(iG)
2010+ let iH = Issue(eA(kE, km), makeString([kE, km, gB, ae], "_"), 1, 0, false)
2011+ let bA = calculateAssetId(iH)
2012+ let kF = toBase58String(bA)
2013+ let jM = makeString(eX((kp > 0), split(ih[bu], "_"), kp), "_")
2014+ let kG = ah(av)
2015+ let kH = valueOrElse(getInteger(kG), 0)
2016+ $Tuple2((((((((((((((((eW._5 :+ (if ((size(eW._7) > 0))
2017+ then StringEntry(kz, makeString_11C(eW._7, "_"))
2018+ else DeleteEntry(kz))) :+ IntegerEntry(kG, if ((eW._8 > kH))
19832019 then 0
1984- else (kB - eT._8))) :+ IntegerEntry(ea(), (iA + 1))) :+ iB) :+ StringEntry(ed(ky), kz)) :+ StringEntry(bf(kz), c)) :+ StringEntry(eg(ky), c)) :+ IntegerEntry(bj(as, kz), eT._2)) :+ IntegerEntry(bq(kz), ag)) :+ IntegerEntry(ef(kz, c), ag)) :+ StringEntry(hx, makeString([ib[aY], eT._4, jG, ib[bb]], ":"))) :+ StringEntry(dg(), makeString(eT._6, "_"))) :+ StringEntry(dh(di), makeString(eT._10, "_"))) :+ StringEntry(bA(u), makeString([di, "L", kz], "_"))) :+ ScriptTransfer(addressFromStringValue(c), 1, bg)), kz)
1985- }
1986- }
1987-
1988-
1989-func kC (c,ki) = kf("M", 3, "SSSS", c, ki, 0)
1990-
1991-
1992-func kD (c,ki) = kf("L", 4, "SMM", c, ki, (cp * 4))
1993-
1994-
1995-func kE (c,ki) = kf("XL", 5, "SSSML", c, ki, (cp * 47))
1996-
1997-
1998-func kF (c,ki) = kf("XXL", 6, "LXL", c, ki, (cp * 54))
1999-
2000-
2001-func kG (c,ki) = {
2002- let cm = size(ki)
2003- if ((4 == cm))
2004- then kC(c, ki)
2005- else if ((3 == cm))
2006- then kD(c, ki)
2007- else if ((5 == cm))
2008- then kE(c, ki)
2009- else if ((2 == cm))
2010- then kF(c, ki)
2020+ else (kH - eW._8))) :+ IntegerEntry(ed(), (iG + 1))) :+ iH) :+ StringEntry(eg(kE), kF)) :+ StringEntry(bz(kF), av)) :+ StringEntry(ej(kE), av)) :+ IntegerEntry(bD(aL, kF), eW._2)) :+ IntegerEntry(bJ(kF), dB)) :+ IntegerEntry(ei(kF, av), dB)) :+ StringEntry(hD, makeString([ih[bs], eW._4, jM, ih[bv]], ":"))) :+ StringEntry(ac(), makeString(eW._6, "_"))) :+ StringEntry(ad(ae), makeString(eW._10, "_"))) :+ StringEntry(bU(bO), makeString([ae, "L", kF], "_"))) :+ ScriptTransfer(addressFromStringValue(av), 1, bA)), kF)
2021+ }
2022+ }
2023+
2024+
2025+func kI (av,ko) = kl("M", 3, "SSSS", av, ko, 0)
2026+
2027+
2028+func kJ (av,ko) = kl("L", 4, "SMM", av, ko, (k * 4))
2029+
2030+
2031+func kK (av,ko) = kl("XL", 5, "SSSML", av, ko, (k * 47))
2032+
2033+
2034+func kL (av,ko) = kl("XXL", 6, "LXL", av, ko, (k * 54))
2035+
2036+
2037+func kM (av,ko) = {
2038+ let g = size(ko)
2039+ if ((4 == g))
2040+ then kI(av, ko)
2041+ else if ((3 == g))
2042+ then kJ(av, ko)
2043+ else if ((5 == g))
2044+ then kK(av, ko)
2045+ else if ((2 == g))
2046+ then kL(av, ko)
20112047 else throw("Unknown merge")
20122048 }
20132049
20142050
2015-func kH (gv) = if (if ((gv.originCaller != cQ))
2016- then valueOrElse(getBoolean(dw()), false)
2051+func kN (gy) = if (if ((gy.originCaller != L))
2052+ then valueOrElse(getBoolean(at()), false)
20172053 else false)
20182054 then throw("Contracts are under maintenance")
2019- else [StringEntry(dx(toString(gv.originCaller)), toBase58String(gv.transactionId))]
2020-
2021-
2022-@Callable(gv)
2023-func constructorV1 (kI) = if ((gv.caller != this))
2055+ else [StringEntry(au(toString(gy.originCaller)), toBase58String(gy.transactionId))]
2056+
2057+
2058+func kO (av,bI) = {
2059+ let hR = bH(bI)
2060+ let kP = split(value(assetInfo(fromBase58String(bI))).description, "_")
2061+ let ar = kP[T]
2062+ let jc = aq(ar)
2063+ let hT = valueOrElse(getInteger(bJ(bI)), 0)
2064+ let hS = (jc / p)
2065+ let gu = gA(kP[U])
2066+ let hI = hQ(hR, hS, hT)
2067+ let gN = split(hI[bk], "_")
2068+ let jn = bC(bI)
2069+ let jo = getIntegerValue(jn)
2070+ let gE = (aH() - jo)
2071+ if ((0 > gE))
2072+ then throw(((("Saved timestamp is in future, saved = " + toString(jo)) + ", final = ") + toString(aH())))
2073+ else {
2074+ let js = jb(bI, jc)
2075+ let kQ = gI(gN, gu, gE, hS, js)
2076+ let jd = valueOrElse(getInteger(bD(aL, bI)), 0)
2077+ let kR = ((jc * o) + ((((jc * hT) + jd) * o) / 5))
2078+ let kS = (fraction(kQ._2, aR, o) * aU)
2079+ func kT (eL,hL) = (eL + parseIntValue(hL))
2080+
2081+ let kU = {
2082+ let eN = split(hI[bl], "_")
2083+ let eO = size(eN)
2084+ let eP = 0
2085+ func eQ (eR,eS) = if ((eS >= eO))
2086+ then eR
2087+ else kT(eR, eN[eS])
2088+
2089+ func eT (eR,eS) = if ((eS >= eO))
2090+ then eR
2091+ else throw("List size exceeds 6")
2092+
2093+ eT(eQ(eQ(eQ(eQ(eQ(eQ(eP, 0), 1), 2), 3), 4), 5), 6)
2094+ }
2095+ let kV = (fraction(kU, (2 * aR), o) * aU)
2096+ let kW = if ((hI[bm] == ""))
2097+ then nil
2098+ else split_4C(hI[bm], "_")
2099+ func hM (eL,hL) = {
2100+ let fv = eL._2
2101+ let kX = parseIntValue(split(bd[fv], "_")[be])
2102+ $Tuple2((eL._1 + ((parseIntValue(hL) * kX) * n)), (fv + 1))
2103+ }
2104+
2105+ let kY = {
2106+ let eN = kW
2107+ let eO = size(eN)
2108+ let eP = $Tuple2(0, 0)
2109+ func hx (eR,eS) = if ((eS >= eO))
2110+ then eR
2111+ else hM(eR, eN[eS])
2112+
2113+ func hy (eR,eS) = if ((eS >= eO))
2114+ then eR
2115+ else throw("List size exceeds 24")
2116+
2117+ hy(hx(hx(hx(hx(hx(hx(hx(hx(hx(hx(hx(hx(hx(hx(hx(hx(hx(hx(hx(hx(hx(hx(hx(hx(eP, 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)
2118+ }
2119+ let kZ = (fraction(kY._1, (2 * aR), o) * aU)
2120+ $Tuple4(kR, kS, kV, kZ)
2121+ }
2122+ }
2123+
2124+
2125+func la (av,bO) = {
2126+ let gk = cU(bO)
2127+ let lb = split(valueOrElse(getString(gk), ",;,_,;,_,;,_,;,_,;,_,;,"), "_")
2128+ let hD = bT(bO)
2129+ let ih = hC(hD)
2130+ let gn = gc(lb, fr(ih[bv]), true, nil)
2131+ let lc = fw(gn)
2132+ func hK (eL,hL) = (eL + parseIntValue(hL))
2133+
2134+ let jA = {
2135+ let eN = split(ih[bt], "_")
2136+ let eO = size(eN)
2137+ let eP = 0
2138+ func eQ (eR,eS) = if ((eS >= eO))
2139+ then eR
2140+ else hK(eR, eN[eS])
2141+
2142+ func eT (eR,eS) = if ((eS >= eO))
2143+ then eR
2144+ else throw("List size exceeds 6")
2145+
2146+ eT(eQ(eQ(eQ(eQ(eQ(eQ(eP, 0), 1), 2), 3), 4), 5), 6)
2147+ }
2148+ let kS = (fraction(jA, aR, o) * aU)
2149+ let ld = {
2150+ let eN = split(ih[bu], "_")
2151+ let eO = size(eN)
2152+ let eP = 0
2153+ func hx (eR,eS) = if ((eS >= eO))
2154+ then eR
2155+ else hK(eR, eN[eS])
2156+
2157+ func hy (eR,eS) = if ((eS >= eO))
2158+ then eR
2159+ else throw("List size exceeds 6")
2160+
2161+ hy(hx(hx(hx(hx(hx(hx(eP, 0), 1), 2), 3), 4), 5), 6)
2162+ }
2163+ let kV = (fraction(ld, (2 * aR), o) * aU)
2164+ let kW = if ((lc == ""))
2165+ then nil
2166+ else split_4C(lc, "_")
2167+ func hM (eL,hL) = {
2168+ let fv = eL._2
2169+ let kX = parseIntValue(split(bd[fv], "_")[be])
2170+ $Tuple2((eL._1 + ((parseIntValue(hL) * kX) * n)), (fv + 1))
2171+ }
2172+
2173+ let le = {
2174+ let eN = kW
2175+ let eO = size(eN)
2176+ let eP = $Tuple2(0, 0)
2177+ func hA (eR,eS) = if ((eS >= eO))
2178+ then eR
2179+ else hM(eR, eN[eS])
2180+
2181+ func hB (eR,eS) = if ((eS >= eO))
2182+ then eR
2183+ else throw("List size exceeds 24")
2184+
2185+ hB(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(eP, 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)
2186+ }
2187+ let kZ = (fraction(le._1, (2 * aR), o) * aU)
2188+ $Tuple3(kS, kV, kZ)
2189+ }
2190+
2191+
2192+@Callable(gy)
2193+func constructorV1 (lf) = if ((gy.caller != this))
20242194 then throw("Permission denied")
2025- else [StringEntry(cK(), kI)]
2026-
2027-
2028-
2029-@Callable(gv)
2030-func saveInteger (cC,ez) = if ((gv.caller != this))
2195+ else [StringEntry(F(), lf)]
2196+
2197+
2198+
2199+@Callable(gy)
2200+func saveInteger (x,eC) = if ((gy.caller != this))
20312201 then throw("saveInteger is not public method")
2032- else [IntegerEntry(cC, ez)]
2033-
2034-
2035-
2036-@Callable(gv)
2037-func setBlocked (kJ) = if ((gv.caller != this))
2202+ else [IntegerEntry(x, eC)]
2203+
2204+
2205+
2206+@Callable(gy)
2207+func setBlocked (lg) = if ((gy.caller != this))
20382208 then throw("permission denied")
2039- else [BooleanEntry(dw(), kJ)]
2040-
2041-
2042-
2043-@Callable(gv)
2209+ else [BooleanEntry(at(), lg)]
2210+
2211+
2212+
2213+@Callable(gy)
20442214 func stakeLand () = {
2045- let kK = kH(gv)
2046- if ((size(gv.payments) != 1))
2215+ let lh = kN(gy)
2216+ if ((size(gy.payments) != 1))
20472217 then throw("Exactly one payment required")
20482218 else {
2049- let kL = value(gv.payments[0])
2050- let bg = value(kL.assetId)
2051- let cB = toString(gv.caller)
2052- if ((kL.amount != 1))
2053- then throw((("NFT " + ap) + " token should be attached as payment"))
2219+ let li = value(gy.payments[0])
2220+ let bA = value(li.assetId)
2221+ let w = toString(gy.caller)
2222+ if ((li.amount != 1))
2223+ then throw((("NFT " + aI) + " token should be attached as payment"))
20542224 else {
2055- let jg = value(assetInfo(bg))
2056- if ((jg.issuer != this))
2225+ let jm = value(assetInfo(bA))
2226+ if ((jm.issuer != this))
20572227 then throw("Unknown issuer of token")
2058- else if (!(contains(jg.name, ap)))
2059- then throw((("Only NFT " + ap) + " tokens are accepted"))
2228+ else if (!(contains(jm.name, aI)))
2229+ then throw((("Only NFT " + aI) + " tokens are accepted"))
20602230 else {
2061- let kM = drop(jg.name, 4)
2062- let ee = if (contains(kM, "XXL"))
2063- then dropRight(kM, 3)
2064- else if (contains(kM, "XL"))
2065- then dropRight(kM, 2)
2066- else dropRight(kM, 1)
2067- if (!(isDefined(parseInt(ee))))
2068- then throw(("Cannot parse land number from " + jg.name))
2231+ let lj = drop(jm.name, 4)
2232+ let eh = if (contains(lj, "XXL"))
2233+ then dropRight(lj, 3)
2234+ else if (contains(lj, "XL"))
2235+ then dropRight(lj, 2)
2236+ else dropRight(lj, 1)
2237+ if (!(isDefined(parseInt(eh))))
2238+ then throw(("Cannot parse land number from " + jm.name))
20692239 else {
2070- let bp = toBase58String(bg)
2071- let jh = bi(bp)
2072- if (isDefined(getInteger(jh)))
2073- then throw((("NFT " + jg.name) + " is already staked"))
2240+ let bI = toBase58String(bA)
2241+ let jn = bC(bI)
2242+ if (isDefined(getInteger(jn)))
2243+ then throw((("NFT " + jm.name) + " is already staked"))
20742244 else {
2075- let jk = split(jg.description, "_")
2076- let gr = gx(jk[cY])
2077- let iW = dt(jk[cX])
2078- let hM = (iW / cu)
2079- let eS = gw(gr, hM, 1)
2080- let kN = dh(jk[cZ])
2081- let kx = split(valueOrElse(getString(kN), "0_0_0_0_0_0"), "_")
2082- let kO = makeString(gp(kx, gr, hM, 1), "_")
2083- let kt = dj(cB)
2084- let ku = getString(kt)
2085- let kq = if (isDefined(ku))
2086- then split_51C(value(ku), "_")
2245+ let jq = split(jm.description, "_")
2246+ let gu = gA(jq[U])
2247+ let jc = aq(jq[T])
2248+ let hS = (jc / p)
2249+ let eV = gz(gu, hS, 1)
2250+ let lk = ad(jq[V])
2251+ let kD = split(valueOrElse(getString(lk), "0_0_0_0_0_0"), "_")
2252+ let ll = makeString(gs(kD, gu, hS, 1), "_")
2253+ let kz = af(w)
2254+ let kA = getString(kz)
2255+ let kw = if (isDefined(kA))
2256+ then split_51C(value(kA), "_")
20872257 else nil
2088- if (containsElement(kq, bp))
2089- then throw(("Your staked lands already contain " + bp))
2090- else if ((size(kq) >= au))
2091- then throw((("Your already staked max (" + toString(au)) + ") lands"))
2258+ if (containsElement(kw, bI))
2259+ then throw(("Your staked lands already contain " + bI))
2260+ else if ((size(kw) >= aN))
2261+ then throw((("Your already staked max (" + toString(aN)) + ") lands"))
20922262 else {
2093- let hN = valueOrElse(getInteger(bq(bp)), 0)
2094- let kA = dk(cB)
2095- let kP = valueOrElse(getInteger(kA), 0)
2096- let kQ = invoke(cT, "onStakeUnstakeLand", [cB], nil)
2097- $Tuple2(([IntegerEntry(jh, lastBlock.timestamp), IntegerEntry(bl(ap, bp, cB), lastBlock.timestamp), StringEntry(kt, makeString_11C((kq :+ bp), "_")), IntegerEntry(kA, (kP + iW)), StringEntry(bf(bp), cB), StringEntry(eg(ee), cB), IntegerEntry(ef(bp, cB), hN), StringEntry(dg(), eS), StringEntry(kN, kO)] ++ kK), kQ)
2263+ let hT = valueOrElse(getInteger(bJ(bI)), 0)
2264+ let kG = ah(w)
2265+ let lm = valueOrElse(getInteger(kG), 0)
2266+ let ln = invoke(P, "onStakeUnstakeLand", [w], nil)
2267+ $Tuple2(([IntegerEntry(jn, lastBlock.timestamp), IntegerEntry(bF(aI, bI, w), lastBlock.timestamp), StringEntry(kz, makeString_11C((kw :+ bI), "_")), IntegerEntry(kG, (lm + jc)), StringEntry(bz(bI), w), StringEntry(ej(eh), w), IntegerEntry(ei(bI, w), hT), StringEntry(ac(), eV), StringEntry(lk, ll)] ++ lh), ln)
20982268 }
20992269 }
21002270 }
21052275
21062276
21072277
2108-@Callable(gv)
2109-func unstakeLand (jc) = {
2110- let kK = kH(gv)
2111- if ((size(gv.payments) != 0))
2278+@Callable(gy)
2279+func unstakeLand (ji) = {
2280+ let lh = kN(gy)
2281+ if ((size(gy.payments) != 0))
21122282 then throw("No payments required")
21132283 else {
2114- let c = toString(gv.caller)
2115- let fN = ja(c, em, jc)
2116- let bp = fN._2
2117- let jk = fN._3
2118- let kt = dj(c)
2119- let gr = gx(jk[cY])
2120- let iW = dt(jk[cX])
2121- let hM = (iW / cu)
2122- let eS = gw(gr, hM, -1)
2123- let kN = dh(jk[cZ])
2124- let kx = split(valueOrElse(getString(kN), "0_0_0_0_0_0"), "_")
2125- let kO = makeString(gp(kx, gr, hM, -1), "_")
2126- let jH = jx(c, bp, iW, em)
2127- let kq = split_51C(valueOrElse(getString(kt), ""), "_")
2128- let cP = indexOf(kq, bp)
2129- if (!(isDefined(cP)))
2130- then throw(("Your staked lands don't contain " + bp))
2284+ let av = toString(gy.caller)
2285+ let fQ = jg(av, ep, ji)
2286+ let bI = fQ._2
2287+ let jq = fQ._3
2288+ let kz = af(av)
2289+ let gu = gA(jq[U])
2290+ let jc = aq(jq[T])
2291+ let hS = (jc / p)
2292+ let eV = gz(gu, hS, -1)
2293+ let lk = ad(jq[V])
2294+ let kD = split(valueOrElse(getString(lk), "0_0_0_0_0_0"), "_")
2295+ let ll = makeString(gs(kD, gu, hS, -1), "_")
2296+ let jN = jD(av, bI, jc, ep)
2297+ let kw = split_51C(valueOrElse(getString(kz), ""), "_")
2298+ let K = indexOf(kw, bI)
2299+ if (!(isDefined(K)))
2300+ then throw(("Your staked lands don't contain " + bI))
21312301 else {
2132- let bW = lastBlock.timestamp
2133- let kR = valueOrElse(getInteger(cS, bB(c)), 0)
2134- if ((kR >= bW))
2135- then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(kR)))
2302+ let cq = lastBlock.timestamp
2303+ let lo = valueOrElse(getInteger(O, bV(av)), 0)
2304+ if ((lo >= cq))
2305+ then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(lo)))
21362306 else {
2137- let kS = (valueOrElse(getInteger(cT, b(c)), 0) + cq)
2138- if ((kS > bW))
2139- then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString(kS)))
2307+ let lp = (valueOrElse(getInteger(P, dK(av)), 0) + l)
2308+ if ((lp > cq))
2309+ then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString(lp)))
21402310 else {
2141- let kA = dk(c)
2142- let kB = valueOrElse(getInteger(kA), 0)
2143- let kT = if ((iW > kB))
2311+ let kG = ah(av)
2312+ let kH = valueOrElse(getInteger(kG), 0)
2313+ let lq = if ((jc > kH))
21442314 then 0
2145- else (kB - iW)
2146- let kQ = invoke(cT, "onStakeUnstakeLand", [c], nil)
2147- $Tuple2(([ScriptTransfer(gv.caller, 1, fromBase58String(bp)), DeleteEntry(bi(bp)), DeleteEntry(bl(ap, bp, c)), StringEntry(dg(), eS), StringEntry(kN, kO), StringEntry(jH._2, makeString(jH._3, ":")), if ((size(kq) > 1))
2148- then StringEntry(kt, makeString_11C(removeByIndex(kq, value(cP)), "_"))
2149- else DeleteEntry(kt), IntegerEntry(kA, kT)] ++ kK), kQ)
2315+ else (kH - jc)
2316+ let ln = invoke(P, "onStakeUnstakeLand", [av], nil)
2317+ $Tuple2(([ScriptTransfer(gy.caller, 1, fromBase58String(bI)), DeleteEntry(bC(bI)), DeleteEntry(bF(aI, bI, av)), StringEntry(ac(), eV), StringEntry(lk, ll), StringEntry(jN._2, makeString(jN._3, ":")), if ((size(kw) > 1))
2318+ then StringEntry(kz, makeString_11C(removeByIndex(kw, value(K)), "_"))
2319+ else DeleteEntry(kz), IntegerEntry(kG, lq)] ++ lh), ln)
21502320 }
21512321 }
21522322 }
21552325
21562326
21572327
2158-@Callable(gv)
2328+@Callable(gy)
2329+func unstakeLandCallback (bI,av) = if ((toString(gy.caller) != j))
2330+ then throw("Permission denied")
2331+ else {
2332+ let lr = kO(av, bI)
2333+ let ln = invoke(P, "onStakeUnstakeLand", [av], nil)
2334+ $Tuple2([ScriptTransfer(addressFromStringValue(av), 1, fromBase58String(bI)), DeleteEntry(bC(bI)), DeleteEntry(bF(aI, bI, av))], $Tuple5(lr._1, lr._2, lr._3, lr._4, ln))
2335+ }
2336+
2337+
2338+
2339+@Callable(gy)
2340+func unstakeLandREADONLY (bI,av) = {
2341+ let lr = kO(av, bI)
2342+ $Tuple2(nil, lr)
2343+ }
2344+
2345+
2346+
2347+@Callable(gy)
2348+func unstakeLandsFinalizeCallback (av) = if ((toString(gy.caller) != j))
2349+ then throw("Permission denied")
2350+ else $Tuple2([DeleteEntry(af(av)), DeleteEntry(ah(av))], 0)
2351+
2352+
2353+
2354+@Callable(gy)
21592355 func stakeDuck () = {
2160- let kK = kH(gv)
2161- if ((size(gv.payments) != 1))
2356+ let lh = kN(gy)
2357+ if ((size(gy.payments) != 1))
21622358 then throw("Exactly one payment required")
21632359 else {
2164- let kL = value(gv.payments[0])
2165- let bg = value(kL.assetId)
2166- let cB = toString(gv.caller)
2167- if ((kL.amount != 1))
2168- then throw((("NFT " + aq) + " token should be attached as payment"))
2360+ let li = value(gy.payments[0])
2361+ let bA = value(li.assetId)
2362+ let w = toString(gy.caller)
2363+ if ((li.amount != 1))
2364+ then throw((("NFT " + aJ) + " token should be attached as payment"))
21692365 else {
2170- let jg = value(assetInfo(bg))
2171- let kU = if (if (ci)
2172- then (jg.issuer == this)
2366+ let jm = value(assetInfo(bA))
2367+ let ls = if (if (c)
2368+ then (jm.issuer == this)
21732369 else false)
2174- then contains(jg.name, ar)
2370+ then contains(jm.name, aK)
21752371 else false
2176- if (if (if ((jg.issuer != dJ))
2177- then (jg.issuer != dK)
2372+ if (if (if ((jm.issuer != dM))
2373+ then (jm.issuer != dN)
21782374 else false)
2179- then !(kU)
2375+ then !(ls)
21802376 else false)
2181- then throw((((("Unknown issuer of " + aq) + " or ") + ar) + " token"))
2182- else if (if (!(contains(jg.name, aq)))
2183- then !(kU)
2377+ then throw((((("Unknown issuer of " + aJ) + " or ") + aK) + " token"))
2378+ else if (if (!(contains(jm.name, aJ)))
2379+ then !(ls)
21842380 else false)
2185- then throw((((("Only NFT " + aq) + " or ") + ar) + " tokens are accepted"))
2381+ then throw((((("Only NFT " + aJ) + " or ") + aK) + " tokens are accepted"))
21862382 else {
2187- let kV = toBase58String(bg)
2188- let jh = bi(kV)
2189- if (isDefined(getInteger(jh)))
2190- then throw((("NFT " + jg.name) + " is already staked"))
2191- else if (isDefined(getString(by(cB))))
2192- then throw(("You already staked one duck: " + jg.name))
2383+ let lt = toBase58String(bA)
2384+ let jn = bC(lt)
2385+ if (isDefined(getInteger(jn)))
2386+ then throw((("NFT " + jm.name) + " is already staked"))
2387+ else if (isDefined(getString(bS(w))))
2388+ then throw(("You already staked one duck: " + jm.name))
21932389 else {
2194- let kW = bA(kV)
2195- let bT = getString(kW)
2196- let hx = bz(kV)
2197- let kX = getString(hx)
2198- let iP = t(kV)
2199- let iQ = ab(valueOrElse(getInteger(x(kV)), 0))
2200- let kY = valueOrElse(getInteger(iP), iQ)
2201- ([IntegerEntry(jh, lastBlock.timestamp), IntegerEntry(bl(aq, toBase58String(bg), cB), lastBlock.timestamp), StringEntry(bx(kV), cB), StringEntry(by(cB), kV)] ++ (if (isDefined(bT))
2390+ let lu = bU(lt)
2391+ let cn = getString(lu)
2392+ let hD = bT(lt)
2393+ let lv = getString(hD)
2394+ let iV = cP(lt)
2395+ let iW = dw(valueOrElse(getInteger(cS(lt)), 0))
2396+ let lw = valueOrElse(getInteger(iV), iW)
2397+ ([IntegerEntry(jn, lastBlock.timestamp), IntegerEntry(bF(aJ, toBase58String(bA), w), lastBlock.timestamp), StringEntry(bR(lt), w), StringEntry(bS(w), lt)] ++ (if (isDefined(cn))
22022398 then nil
2203- else ([StringEntry(kW, ax)] ++ (if (isDefined(kX))
2399+ else ([StringEntry(lu, aQ)] ++ (if (isDefined(lv))
22042400 then nil
2205- else (([StringEntry(hx, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(iP, kY)) ++ kK)))))
2401+ else (([StringEntry(hD, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(iV, lw)) ++ lh)))))
22062402 }
22072403 }
22082404 }
22112407
22122408
22132409
2214-@Callable(gv)
2215-func unstakeDuck (kV) = {
2216- let kK = kH(gv)
2217- if ((size(gv.payments) != 0))
2410+@Callable(gy)
2411+func unstakeDuck (lt) = {
2412+ let lh = kN(gy)
2413+ if ((size(gy.payments) != 0))
22182414 then throw("No payments required")
22192415 else {
2220- let bg = fromBase58String(kV)
2221- let cB = toString(gv.caller)
2222- let jg = value(assetInfo(bg))
2223- let jh = bi(kV)
2224- if (!(isDefined(getInteger(jh))))
2225- then throw((("NFT " + jg.name) + " is not staked"))
2226- else if (!(isDefined(getString(by(cB)))))
2227- then throw((("The duck " + jg.name) + " is not staked"))
2416+ let bA = fromBase58String(lt)
2417+ let w = toString(gy.caller)
2418+ let jm = value(assetInfo(bA))
2419+ let jn = bC(lt)
2420+ if (!(isDefined(getInteger(jn))))
2421+ then throw((("NFT " + jm.name) + " is not staked"))
2422+ else if (!(isDefined(getString(bS(w)))))
2423+ then throw((("The duck " + jm.name) + " is not staked"))
22282424 else {
2229- let jj = valueOrErrorMessage(getString(bx(kV)), (("NFT " + jg.name) + " is orphaned"))
2230- if ((jj != cB))
2425+ let jp = valueOrErrorMessage(getString(bR(lt)), (("NFT " + jm.name) + " is orphaned"))
2426+ if ((jp != w))
22312427 then throw("Staked NFT is not yours")
2232- else if (ke(kV))
2428+ else if (kk(lt))
22332429 then throw("unstakeDuck_checkTournament")
22342430 else {
2235- let iP = t(kV)
2236- let iQ = ab(valueOrElse(getInteger(x(kV)), 0))
2237- let an = valueOrElse(getInteger(iP), iQ)
2238- if ((iQ > an))
2239- then throw((("Please heal your duck to " + toString(iQ)) + "hp before unstaking"))
2240- else ([ScriptTransfer(gv.caller, 1, bg), DeleteEntry(jh), DeleteEntry(iP), DeleteEntry(bA(kV)), DeleteEntry(bx(kV)), DeleteEntry(bl(aq, kV, cB)), DeleteEntry(by(cB))] ++ kK)
2431+ let iV = cP(lt)
2432+ let iW = dw(valueOrElse(getInteger(cS(lt)), 0))
2433+ let dH = valueOrElse(getInteger(iV), iW)
2434+ if ((iW > dH))
2435+ then throw((("Please heal your duck to " + toString(iW)) + "hp before unstaking"))
2436+ else ([ScriptTransfer(gy.caller, 1, bA), DeleteEntry(jn), DeleteEntry(iV), DeleteEntry(bU(lt)), DeleteEntry(bR(lt)), DeleteEntry(bF(aJ, lt, w)), DeleteEntry(bS(w))] ++ lh)
22412437 }
22422438 }
22432439 }
22452441
22462442
22472443
2248-@Callable(gv)
2249-func claimRes (ez,kZ) = {
2250- let kK = kH(gv)
2251- if ((size(gv.payments) != 0))
2444+@Callable(gy)
2445+func unstakeDuckCallback (bO,av) = if ((toString(gy.caller) != j))
2446+ then throw("Permission denied")
2447+ else {
2448+ let lr = la(av, bO)
2449+ $Tuple2([ScriptTransfer(addressFromStringValue(av), 1, fromBase58String(bO)), DeleteEntry(bC(bO)), DeleteEntry(bR(bO)), DeleteEntry(bF(aJ, bO, av)), DeleteEntry(bS(av))], lr)
2450+ }
2451+
2452+
2453+
2454+@Callable(gy)
2455+func unstakeDuckREADONLY (bO,av) = {
2456+ let lr = la(av, bO)
2457+ $Tuple2(nil, lr)
2458+ }
2459+
2460+
2461+
2462+@Callable(gy)
2463+func claimRes (eC,lx) = {
2464+ let lh = kN(gy)
2465+ if ((size(gy.payments) != 0))
22522466 then throw("No payments required")
22532467 else {
2254- let c = toString(gv.originCaller)
2255- let fa = jl(c, ez, em, kZ)
2256- let u = valueOrErrorMessage(getString(by(c)), "You don't have a duck staked")
2257- $Tuple2(((((fa._1 ++ jT(u, fraction(N, ez, ct))._1) :+ StringEntry(fa._2, makeString(fa._3, ":"))) :+ StringEntry(fa._4, makeString(fa._5, ":"))) ++ kK), fa._3[aZ])
2258- }
2259- }
2260-
2261-
2262-
2263-@Callable(gv)
2264-func claimResToWH (ez,kZ) = {
2265- let kK = kH(gv)
2266- if ((size(gv.payments) != 0))
2468+ let av = toString(gy.originCaller)
2469+ let fd = jr(av, eC, ep, lx)
2470+ let bO = valueOrErrorMessage(getString(bS(av)), "You don't have a duck staked")
2471+ $Tuple2(((((fd._1 ++ jZ(bO, fraction(di, eC, o))._1) :+ StringEntry(fd._2, makeString(fd._3, ":"))) :+ StringEntry(fd._4, makeString(fd._5, ":"))) ++ lh), fd._3[bt])
2472+ }
2473+ }
2474+
2475+
2476+
2477+@Callable(gy)
2478+func claimResToWH (eC,lx) = {
2479+ let lh = kN(gy)
2480+ if ((size(gy.payments) != 0))
22672481 then throw("No payments required")
22682482 else {
2269- let c = toString(gv.originCaller)
2270- let fa = jl(c, ez, el, kZ)
2271- $Tuple2(((((fa._1 ++ jU(c, fraction(N, ez, ct))._1) :+ StringEntry(fa._2, makeString(fa._3, ":"))) :+ StringEntry(fa._4, makeString(fa._5, ":"))) ++ kK), fa._5[aQ])
2272- }
2273- }
2274-
2275-
2276-
2277-@Callable(gv)
2278-func flight (iE,iF) = {
2279- let kK = kH(gv)
2280- if ((size(gv.payments) != 0))
2483+ let av = toString(gy.originCaller)
2484+ let fd = jr(av, eC, eo, lx)
2485+ $Tuple2(((((fd._1 ++ ka(av, fraction(di, eC, o))._1) :+ StringEntry(fd._2, makeString(fd._3, ":"))) :+ StringEntry(fd._4, makeString(fd._5, ":"))) ++ lh), fd._5[bk])
2486+ }
2487+ }
2488+
2489+
2490+
2491+@Callable(gy)
2492+func flight (iK,iL) = {
2493+ let lh = kN(gy)
2494+ if ((size(gy.payments) != 0))
22812495 then throw("No payments required")
22822496 else {
2283- let bC = toString(gv.caller)
2284- let ha = iD(bC, iE, iF)
2285- let iJ = ha._1
2286- let u = ha._2
2287- let kW = bA(u)
2288- let je = valueOrElse(getString(kW), ax)
2289- let iL = ha._4
2290- if ((iL == je))
2497+ let bW = toString(gy.caller)
2498+ let hg = iJ(bW, iK, iL)
2499+ let iP = hg._1
2500+ let bO = hg._2
2501+ let lu = bU(bO)
2502+ let jk = valueOrElse(getString(lu), aQ)
2503+ let iR = hg._4
2504+ if ((iR == jk))
22912505 then throw("You can't fly to the same location")
22922506 else {
2293- let ce = split(iL, "_")
2294- let la = (ce[bd] == "T")
2295- let lb = (ce[bd] == "D")
2296- let gh = z(u)
2297- let lc = valueOrElse(getString(gh), ",;,_,;,_,;,_,;,_,;,_,;,")
2298- let ld = fb(lc, ha._5)
2299- let le = ld._1
2300- let lf = ld._2
2301- let hp = ld._3
2302- let lg = if (!(bY(cU, je)))
2303- then if (la)
2304- then cc(je, iL, 5)
2305- else if (!(lb))
2306- then if ((iJ > 0))
2307- then $Tuple2(iL, iJ)
2308- else $Tuple2(je, 0)
2309- else if ((iJ > 0))
2507+ let cy = split(iR, "_")
2508+ let ly = (cy[bx] == "T")
2509+ let lz = (cy[bx] == "D")
2510+ let gk = cU(bO)
2511+ let lA = valueOrElse(getString(gk), ",;,_,;,_,;,_,;,_,;,_,;,")
2512+ let lB = fe(lA, hg._5)
2513+ let lC = lB._1
2514+ let lD = lB._2
2515+ let hv = lB._3
2516+ let lE = if (!(cs(Q, jk)))
2517+ then if (ly)
2518+ then cw(jk, iR, 5)
2519+ else if (!(lz))
2520+ then if ((iP > 0))
2521+ then $Tuple2(iR, iP)
2522+ else $Tuple2(jk, 0)
2523+ else if ((iP > 0))
23102524 then {
2311- let dn = invoke(this, "processDelivery", [u], nil)
2312- if ((dn == dn))
2313- then $Tuple2(je, iJ)
2525+ let ak = invoke(this, "processDelivery", [bO], nil)
2526+ if ((ak == ak))
2527+ then $Tuple2(jk, iP)
23142528 else throw("Strict value is not equal to itself.")
23152529 }
2316- else $Tuple2(je, 0)
2317- else if (bS(cU, je))
2318- then if (!(bS(cU, iL)))
2530+ else $Tuple2(jk, 0)
2531+ else if (cm(Q, jk))
2532+ then if (!(cm(Q, iR)))
23192533 then throw("Your duck is taking part in the tournament")
23202534 else {
2321- let lh = parseIntValue(ce[be])
2322- let li = split(je, "_")
2323- let bU = valueOrElse(getInteger(cU, bF), 0)
2324- if ((lh != (parseIntValue(li[be]) + 1)))
2325- then cc(je, iL, 7)
2326- else if ((iJ > 0))
2535+ let lF = parseIntValue(cy[by])
2536+ let lG = split(jk, "_")
2537+ let co = valueOrElse(getInteger(Q, bZ), 0)
2538+ if ((lF != (parseIntValue(lG[by]) + 1)))
2539+ then cw(jk, iR, 7)
2540+ else if ((iP > 0))
23272541 then {
2328- let lj = valueOrElse(getInteger(cU, bJ(bU, u)), 0)
2329- let lk = if ((lh > lj))
2330- then invoke(cU, "saveDuckResult", [u, lh], nil)
2542+ let lH = valueOrElse(getInteger(Q, cd(co, bO)), 0)
2543+ let lI = if ((lF > lH))
2544+ then invoke(Q, "saveDuckResult", [bO, lF], nil)
23312545 else unit
2332- if ((lk == lk))
2333- then $Tuple2(iL, iJ)
2546+ if ((lI == lI))
2547+ then $Tuple2(iR, iP)
23342548 else throw("Strict value is not equal to itself.")
23352549 }
2336- else $Tuple2(je, 0)
2550+ else $Tuple2(jk, 0)
23372551 }
2338- else throw(("Unknown curLocation:" + je))
2339- let ll = lg._1
2340- let lm = lg._2
2341- $Tuple2(((([StringEntry(kW, ll), StringEntry(gh, le), IntegerEntry(t(u), lm)] ++ kK) ++ (if (lf)
2342- then [StringEntry(F(u), "0_0_0_0_0")]
2343- else nil)) ++ jT(u, if ((iJ > 0))
2344- then O
2345- else P)._1), ha._3)
2552+ else throw(("Unknown curLocation:" + jk))
2553+ let lJ = lE._1
2554+ let lK = lE._2
2555+ $Tuple2(((([StringEntry(lu, lJ), StringEntry(gk, lC), IntegerEntry(cP(bO), lK)] ++ lh) ++ (if (lD)
2556+ then [StringEntry(da(bO), "0_0_0_0_0")]
2557+ else nil)) ++ jZ(bO, if ((iP > 0))
2558+ then dj
2559+ else dk)._1), hg._3)
23462560 }
23472561 }
23482562 }
23492563
23502564
23512565
2352-@Callable(gv)
2353-func heal (ln,lo,lp) = {
2354- let kK = kH(gv)
2355- if (if (if ((0 > ln))
2566+@Callable(gy)
2567+func heal (lL,lM,lN) = {
2568+ let lh = kN(gy)
2569+ if (if (if ((0 > lL))
23562570 then true
2357- else (0 > lo))
2571+ else (0 > lM))
23582572 then true
2359- else (0 > lp))
2573+ else (0 > lN))
23602574 then throw("Quantity cannot be negative")
23612575 else {
2362- let u = valueOrErrorMessage(getString(by(toString(gv.caller))), "You don't have a duck staked")
2363- if (ke(u))
2576+ let bO = valueOrErrorMessage(getString(bS(toString(gy.caller))), "You don't have a duck staked")
2577+ if (kk(bO))
23642578 then throw("heal_checkTournament")
23652579 else {
2366- let lq = [ln, lo, lp]
2367- let iP = t(u)
2368- let iQ = ab(valueOrElse(getInteger(x(u)), 0))
2369- let lr = valueOrElse(getInteger(iP), iQ)
2370- if ((lr >= iQ))
2371- then throw((("HP should be < " + toString(iQ)) + " to heal"))
2580+ let lO = [lL, lM, lN]
2581+ let iV = cP(bO)
2582+ let iW = dw(valueOrElse(getInteger(cS(bO)), 0))
2583+ let lP = valueOrElse(getInteger(iV), iW)
2584+ if ((lP >= iW))
2585+ then throw((("HP should be < " + toString(iW)) + " to heal"))
23722586 else {
2373- let hx = bz(u)
2374- let ib = hw(hx)
2375- let ls = if ((ib[bb] == ""))
2587+ let hD = bT(bO)
2588+ let ih = hC(hD)
2589+ let lQ = if ((ih[bv] == ""))
23762590 then nil
2377- else split_4C(ib[bb], "_")
2378- func lt (eI,cb) = {
2379- let dp = eI._2
2380- let gR = if ((size(ls) > dp))
2381- then parseIntValue(ls[dp])
2591+ else split_4C(ih[bv], "_")
2592+ func lR (eL,cv) = {
2593+ let am = eL._2
2594+ let gX = if ((size(lQ) > am))
2595+ then parseIntValue(lQ[am])
23822596 else 0
2383- if ((3 > dp))
2597+ if ((3 > am))
23842598 then {
2385- let lu = lq[dp]
2386- if ((lu > gR))
2387- then throw(((("You have only " + toString(gR)) + " of ") + aG[dp]))
2388- else $Tuple3((eI._1 :+ toString((gR - lu))), (dp + 1), (eI._3 + (parseIntValue(split(cb, "_")[aL]) * lu)))
2599+ let lS = lO[am]
2600+ if ((lS > gX))
2601+ then throw(((("You have only " + toString(gX)) + " of ") + ba[am]))
2602+ else $Tuple3((eL._1 :+ toString((gX - lS))), (am + 1), (eL._3 + (parseIntValue(split(cv, "_")[bf]) * lS)))
23892603 }
2390- else $Tuple3((eI._1 :+ toString(gR)), (dp + 1), eI._3)
2604+ else $Tuple3((eL._1 :+ toString(gX)), (am + 1), eL._3)
23912605 }
23922606
2393- let fa = {
2394- let eK = aJ
2395- let eL = size(eK)
2396- let eM = $Tuple3(nil, 0, 0)
2397- func eN (eO,eP) = if ((eP >= eL))
2398- then eO
2399- else lt(eO, eK[eP])
2400-
2401- func eQ (eO,eP) = if ((eP >= eL))
2402- then eO
2607+ let fd = {
2608+ let eN = bd
2609+ let eO = size(eN)
2610+ let eP = $Tuple3(nil, 0, 0)
2611+ func eQ (eR,eS) = if ((eS >= eO))
2612+ then eR
2613+ else lR(eR, eN[eS])
2614+
2615+ func eT (eR,eS) = if ((eS >= eO))
2616+ then eR
24032617 else throw("List size exceeds 50")
24042618
2405- eQ(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eM, 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)
2619+ eT(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eP, 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)
24062620 }
2407- let lv = min([iQ, (lr + fa._3)])
2408- $Tuple2((([IntegerEntry(iP, lv), StringEntry(hx, makeString_2C([ib[aY], ib[aZ], ib[ba], makeString(fa._1, "_")], ":"))] ++ kK) ++ jT(u, (Y * ((ln + lo) + lp)))._1), lv)
2621+ let lT = min([iW, (lP + fd._3)])
2622+ $Tuple2((([IntegerEntry(iV, lT), StringEntry(hD, makeString_2C([ih[bs], ih[bt], ih[bu], makeString(fd._1, "_")], ":"))] ++ lh) ++ jZ(bO, (dt * ((lL + lM) + lN)))._1), lT)
24092623 }
24102624 }
24112625 }
24132627
24142628
24152629
2416-@Callable(gv)
2630+@Callable(gy)
24172631 func healES () = {
2418- let kK = kH(gv)
2419- if ((size(gv.payments) != 1))
2632+ let lh = kN(gy)
2633+ if ((size(gy.payments) != 1))
24202634 then throw("Exactly one payment required")
24212635 else {
2422- let kL = value(gv.payments[0])
2423- if ((kL.assetId != cn))
2636+ let li = value(gy.payments[0])
2637+ if ((li.assetId != h))
24242638 then throw("Allowed USDT payment only!")
24252639 else {
2426- let u = valueOrErrorMessage(getString(by(toString(gv.caller))), "You don't have a duck staked")
2427- if (ke(u))
2640+ let bO = valueOrErrorMessage(getString(bS(toString(gy.caller))), "You don't have a duck staked")
2641+ if (kk(bO))
24282642 then throw("healES_checkTournament")
24292643 else {
2430- let iP = t(u)
2431- let iQ = ab(valueOrElse(getInteger(x(u)), 0))
2432- let lr = valueOrElse(getInteger(iP), iQ)
2433- if ((lr > 0))
2644+ let iV = cP(bO)
2645+ let iW = dw(valueOrElse(getInteger(cS(bO)), 0))
2646+ let lP = valueOrElse(getInteger(iV), iW)
2647+ if ((lP > 0))
24342648 then throw("HP should be 0 to call Emergency Service")
24352649 else {
2436- let hx = bz(u)
2437- let ib = hw(hx)
2438- let ls = if ((ib[bb] == ""))
2650+ let hD = bT(bO)
2651+ let ih = hC(hD)
2652+ let lQ = if ((ih[bv] == ""))
24392653 then nil
2440- else split_4C(ib[bb], "_")
2441- let lw = if ((size(ls) > 0))
2442- then parseIntValue(ls[0])
2654+ else split_4C(ih[bv], "_")
2655+ let lU = if ((size(lQ) > 0))
2656+ then parseIntValue(lQ[0])
24432657 else 0
2444- let lx = if ((size(ls) > 1))
2445- then parseIntValue(ls[1])
2658+ let lV = if ((size(lQ) > 1))
2659+ then parseIntValue(lQ[1])
24462660 else 0
2447- let ly = if ((size(ls) > 2))
2448- then parseIntValue(ls[2])
2661+ let lW = if ((size(lQ) > 2))
2662+ then parseIntValue(lQ[2])
24492663 else 0
2450- if (if (if ((lw > 0))
2664+ if (if (if ((lU > 0))
24512665 then true
2452- else (lx > 0))
2666+ else (lV > 0))
24532667 then true
2454- else (ly > 0))
2668+ else (lW > 0))
24552669 then throw("You have to use own Medical Kit")
24562670 else {
2457- let lz = getString(cR, bD())
2458- let lA = if (isDefined(lz))
2459- then split_4C(value(lz), "_")
2671+ let lX = getString(N, bX())
2672+ let lY = if (isDefined(lX))
2673+ then split_4C(value(lX), "_")
24602674 else nil
2461- let lB = if ((size(lA) > 0))
2462- then parseIntValue(lA[0])
2675+ let lZ = if ((size(lY) > 0))
2676+ then parseIntValue(lY[0])
24632677 else 0
2464- if ((0 >= lB))
2678+ if ((0 >= lZ))
24652679 then throw("There are no Medical Kits L1 at Emergency Service storage")
24662680 else {
2467- let lv = (lr + parseIntValue(split(aJ[0], "_")[aL]))
2468- let lC = makeString([toString((lB - 1)), removeByIndex(lA, 0)], "_")
2469- let cb = split(aJ[0], "_")
2470- let lD = ca(cb)
2471- let lE = fraction((lD * az), ay, (ct * aO))
2472- if ((kL.amount != lE))
2473- then throw(("Payment attached should be " + toString(lE)))
2681+ let lT = (lP + parseIntValue(split(bd[0], "_")[bf]))
2682+ let ma = makeString([toString((lZ - 1)), removeByIndex(lY, 0)], "_")
2683+ let cv = split(bd[0], "_")
2684+ let mb = cu(cv)
2685+ let mc = fraction((mb * aS), aR, (o * bi))
2686+ if ((li.amount != mc))
2687+ then throw(("Payment attached should be " + toString(mc)))
24742688 else {
2475- let fa = dl(invoke(cR, "updateEsStorage", [lC], [AttachedPayment(cn, lE)]))
2476- $Tuple2(((kK :+ IntegerEntry(iP, lv)) ++ jT(u, S)._1), fa)
2689+ let fd = ai(invoke(N, "updateEsStorage", [ma], [AttachedPayment(h, mc)]))
2690+ $Tuple2(((lh :+ IntegerEntry(iV, lT)) ++ jZ(bO, dn)._1), fd)
24772691 }
24782692 }
24792693 }
24852699
24862700
24872701
2488-@Callable(gv)
2489-func updateBackpack (u,lF) = if ((gv.caller != cR))
2702+@Callable(gy)
2703+func updateBackpack (bO,md) = if ((gy.caller != N))
24902704 then throw("permission denied")
2491- else $Tuple2([StringEntry(bz(u), lF)], lF)
2492-
2493-
2494-
2495-@Callable(gv)
2705+ else $Tuple2([StringEntry(bT(bO), md)], md)
2706+
2707+
2708+
2709+@Callable(gy)
24962710 func commitForRandom () = {
2497- let kK = kH(gv)
2498- let lG = (height + de)
2499- let c = toString(gv.caller)
2500- $Tuple2(([IntegerEntry(df(c), lG)] ++ kK), lG)
2501- }
2502-
2503-
2504-
2505-@Callable(gv)
2506-func revealRandom (dF) = {
2507- let kK = kH(gv)
2508- let c = toString(gv.caller)
2509- let lH = df(c)
2510- let lG = valueOrErrorMessage(getInteger(lH), "You have to commitForRandom() first!")
2511- if ((lG > height))
2512- then throw(("Random number is not ready yet, wait until height = " + toString(lG)))
2711+ let lh = kN(gy)
2712+ let me = (height + aa)
2713+ let av = toString(gy.caller)
2714+ $Tuple2(([IntegerEntry(ab(av), me)] ++ lh), me)
2715+ }
2716+
2717+
2718+
2719+@Callable(gy)
2720+func revealRandom (aD) = {
2721+ let lh = kN(gy)
2722+ let av = toString(gy.caller)
2723+ let mf = ab(av)
2724+ let me = valueOrErrorMessage(getInteger(mf), "You have to commitForRandom() first!")
2725+ if ((me > height))
2726+ then throw(("Random number is not ready yet, wait until height = " + toString(me)))
25132727 else {
2514- let dH = value(value(blockInfoByHeight(lG)).vrf)
2515- let dG = toBytes(valueOrElse(getString(dx(c)), ""))
2516- let lI = dE(dF, dG, dH)
2517- $Tuple2(([DeleteEntry(lH)] ++ kK), lI)
2518- }
2519- }
2520-
2521-
2522-
2523-@Callable(gv)
2728+ let aF = value(value(blockInfoByHeight(me)).vrf)
2729+ let aE = toBytes(valueOrElse(getString(au(av)), ""))
2730+ let mg = aC(aD, aE, aF)
2731+ $Tuple2(([DeleteEntry(mf)] ++ lh), mg)
2732+ }
2733+ }
2734+
2735+
2736+
2737+@Callable(gy)
25242738 func buySLand () = {
2525- let kK = kH(gv)
2526- if ((size(gv.payments) != 1))
2739+ let lh = kN(gy)
2740+ if ((size(gy.payments) != 1))
25272741 then throw("Exactly one payment required")
25282742 else {
2529- let kL = value(gv.payments[0])
2530- if ((kL.assetId != cn))
2743+ let li = value(gy.payments[0])
2744+ if ((li.assetId != h))
25312745 then throw("Allowed USDT payment only!")
2532- else if ((kL.amount != dQ))
2533- then throw(("Payment attached should be " + toString(dQ)))
2746+ else if ((li.amount != dT))
2747+ then throw(("Payment attached should be " + toString(dT)))
25342748 else {
2535- let fa = iw(gv.caller, gv.transactionId)
2536- let lJ = do(invoke(cV, "burnAcres", [dS], nil))
2537- $Tuple2((((fa._1 :+ ScriptTransfer(cR, kL.amount, cn)) ++ jU(toString(gv.caller), U)._1) ++ kK), $Tuple2(fa._2._1, lJ))
2749+ let fd = iC(gy.caller, gy.transactionId)
2750+ let mh = al(invoke(R, "burnAcres", [dV], nil))
2751+ $Tuple2((((fd._1 :+ ScriptTransfer(N, li.amount, h)) ++ ka(toString(gy.caller), dp)._1) ++ lh), $Tuple2(fd._2._1, mh))
25382752 }
25392753 }
25402754 }
25412755
25422756
25432757
2544-@Callable(gv)
2545-func expedition (iE,iF) = {
2546- let kK = kH(gv)
2547- if ((size(gv.payments) != 0))
2758+@Callable(gy)
2759+func expedition (iK,iL) = {
2760+ let lh = kN(gy)
2761+ if ((size(gy.payments) != 0))
25482762 then throw("No payments required")
25492763 else {
2550- let bC = toString(gv.caller)
2551- let ha = iD(bC, iE, iF)
2552- let u = ha._2
2553- let iP = t(u)
2554- let hx = bz(u)
2555- let ib = hw(hx)
2556- let jE = split(ib[ba], "_")
2557- let jG = makeString(eU(true, jE, dP), "_")
2558- let gh = z(u)
2559- let lc = valueOrElse(getString(gh), ",;,_,;,_,;,_,;,_,;,_,;,")
2560- let lK = fb(lc, ha._5)
2561- let le = lK._1
2562- let lf = lK._2
2563- let hp = lK._3
2564- let lL = iw(gv.caller, gv.transactionId)
2565- let iC = lL._2._1
2566- let fa = if ((0 >= ha._1))
2567- then $Tuple3([IntegerEntry(iP, 0), StringEntry(gh, le)], "", 0)
2568- else $Tuple3((lL._1 ++ (if (lf)
2569- then [StringEntry(F(u), "0_0_0_0_0")]
2570- else ((((nil :+ StringEntry(bA(u), makeString([lL._2._2, "L", iC], "_"))) :+ IntegerEntry(iP, ha._1)) :+ StringEntry(gh, le)) :+ StringEntry(hx, makeString([ib[aY], ib[aZ], jG, ib[bb]], ":"))))), iC, ha._3)
2571- if (ke(u))
2764+ let bW = toString(gy.caller)
2765+ let hg = iJ(bW, iK, iL)
2766+ let bO = hg._2
2767+ let iV = cP(bO)
2768+ let hD = bT(bO)
2769+ let ih = hC(hD)
2770+ let jK = split(ih[bu], "_")
2771+ let jM = makeString(eX(true, jK, dS), "_")
2772+ let gk = cU(bO)
2773+ let lA = valueOrElse(getString(gk), ",;,_,;,_,;,_,;,_,;,_,;,")
2774+ let mi = fe(lA, hg._5)
2775+ let lC = mi._1
2776+ let lD = mi._2
2777+ let hv = mi._3
2778+ let mj = iC(gy.caller, gy.transactionId)
2779+ let iI = mj._2._1
2780+ let fd = if ((0 >= hg._1))
2781+ then $Tuple3([IntegerEntry(iV, 0), StringEntry(gk, lC)], "", 0)
2782+ else $Tuple3((mj._1 ++ (if (lD)
2783+ then [StringEntry(da(bO), "0_0_0_0_0")]
2784+ else ((((nil :+ StringEntry(bU(bO), makeString([mj._2._2, "L", iI], "_"))) :+ IntegerEntry(iV, hg._1)) :+ StringEntry(gk, lC)) :+ StringEntry(hD, makeString([ih[bs], ih[bt], jM, ih[bv]], ":"))))), iI, hg._3)
2785+ if (kk(bO))
25722786 then throw("expedition_checkTournament")
25732787 else {
2574- let lJ = do(invoke(cV, "burnAcres", [dS], nil))
2575- $Tuple2(((fa._1 ++ jT(u, U)._1) ++ kK), $Tuple3(fa._2, fa._3, lJ))
2788+ let mh = al(invoke(R, "burnAcres", [dV], nil))
2789+ $Tuple2(((fd._1 ++ jZ(bO, dp)._1) ++ lh), $Tuple3(fd._2, fd._3, mh))
25762790 }
25772791 }
25782792 }
25792793
25802794
25812795
2582-@Callable(gv)
2796+@Callable(gy)
25832797 func buySLandForAcres () = {
2584- let kK = kH(gv)
2585- if ((size(gv.payments) != 1))
2798+ let lh = kN(gy)
2799+ if ((size(gy.payments) != 1))
25862800 then throw("exactly 1 payment must be attached")
25872801 else {
2588- let kL = gv.payments[0]
2589- let fh = kL.amount
2590- if (if (!(isDefined(kL.assetId)))
2802+ let li = gy.payments[0]
2803+ let fk = li.amount
2804+ if (if (!(isDefined(li.assetId)))
25912805 then true
2592- else (value(kL.assetId) != dd))
2806+ else (value(li.assetId) != Z))
25932807 then throw("ACRES payments only!")
2594- else if ((fh != dS))
2595- then throw(("Payment attached should be " + toString(dS)))
2808+ else if ((fk != dV))
2809+ then throw(("Payment attached should be " + toString(dV)))
25962810 else {
2597- let fa = iw(gv.caller, gv.transactionId)
2598- let lJ = do(invoke(cV, "burnAcres", [dS], [AttachedPayment(dd, fh)]))
2599- $Tuple2(((fa._1 ++ jU(toString(gv.caller), U)._1) ++ kK), $Tuple2(fa._2._1, lJ))
2811+ let fd = iC(gy.caller, gy.transactionId)
2812+ let mh = al(invoke(R, "burnAcres", [dV], [AttachedPayment(Z, fk)]))
2813+ $Tuple2(((fd._1 ++ ka(toString(gy.caller), dp)._1) ++ lh), $Tuple2(fd._2._1, mh))
26002814 }
26012815 }
26022816 }
26032817
26042818
26052819
2606-@Callable(gv)
2607-func upgradeInfra (bp) = {
2608- let kK = kH(gv)
2609- if ((size(gv.payments) != 0))
2820+@Callable(gy)
2821+func upgradeInfra (bI) = {
2822+ let lh = kN(gy)
2823+ if ((size(gy.payments) != 0))
26102824 then throw("No payments required")
26112825 else {
2612- let fa = jy(true, gv.caller, 0, bp)
2613- let u = valueOrErrorMessage(getString(by(toString(gv.caller))), "You don't have a duck staked")
2614- $Tuple2(((fa._1 ++ kK) ++ jT(u, fraction(V, fa._3, ct))._1), fa._2)
2615- }
2616- }
2617-
2618-
2619-
2620-@Callable(gv)
2621-func activateArtifact (lM,lN) = {
2622- let kK = kH(gv)
2623- if ((size(gv.payments) != 0))
2826+ let fd = jE(true, gy.caller, 0, bI)
2827+ let bO = valueOrErrorMessage(getString(bS(toString(gy.caller))), "You don't have a duck staked")
2828+ $Tuple2(((fd._1 ++ lh) ++ jZ(bO, fraction(dq, fd._3, o))._1), fd._2)
2829+ }
2830+ }
2831+
2832+
2833+
2834+@Callable(gy)
2835+func activateArtifact (mk,ml) = {
2836+ let lh = kN(gy)
2837+ if ((size(gy.payments) != 0))
26242838 then throw("No payments required")
26252839 else {
2626- let c = toString(gv.caller)
2627- let fa = {
2628- let cm = lM
2629- if (("PRESALE" == cm))
2630- then kc(c, lN)
2631- else if (("ONBOARD" == cm))
2632- then jV(c)
2840+ let av = toString(gy.caller)
2841+ let fd = {
2842+ let g = mk
2843+ if (("PRESALE" == g))
2844+ then ki(av, ml)
2845+ else if (("ONBOARD" == g))
2846+ then kb(av)
26332847 else throw("Unknown artifact")
26342848 }
2635- (fa ++ kK)
2636- }
2637- }
2638-
2639-
2640-
2641-@Callable(gv)
2642-func mergeLands (ki) = {
2643- let kK = kH(gv)
2644- if ((size(gv.payments) != 0))
2849+ (fd ++ lh)
2850+ }
2851+ }
2852+
2853+
2854+
2855+@Callable(gy)
2856+func mergeLands (ko) = {
2857+ let lh = kN(gy)
2858+ if ((size(gy.payments) != 0))
26452859 then throw("No payments required")
26462860 else {
2647- let fa = kG(toString(gv.caller), ki)
2648- $Tuple2(((fa._1 ++ kK) ++ jU(toString(gv.caller), W)._1), fa._2)
2649- }
2650- }
2651-
2652-
2653-
2654-@Callable(gv)
2655-func cargoExchange (lO,bp) = {
2656- let kK = kH(gv)
2657- if ((size(gv.payments) != 0))
2861+ let fd = kM(toString(gy.caller), ko)
2862+ $Tuple2(((fd._1 ++ lh) ++ ka(toString(gy.caller), dr)._1), fd._2)
2863+ }
2864+ }
2865+
2866+
2867+
2868+@Callable(gy)
2869+func cargoExchange (mm,bI) = {
2870+ let lh = kN(gy)
2871+ if ((size(gy.payments) != 0))
26582872 then throw("No payments required")
26592873 else {
2660- let ia = split_4C(lO, ":")
2661- let c = toString(gv.originCaller)
2662- let jg = value(assetInfo(fromBase58String(bp)))
2663- let jh = bi(bp)
2664- if (!(isDefined(getInteger(jh))))
2665- then throw((jg.name + " is not staked"))
2874+ let ig = split_4C(mm, ":")
2875+ let av = toString(gy.originCaller)
2876+ let jm = value(assetInfo(fromBase58String(bI)))
2877+ let jn = bC(bI)
2878+ if (!(isDefined(getInteger(jn))))
2879+ then throw((jm.name + " is not staked"))
26662880 else {
2667- let jj = valueOrErrorMessage(getString(bf(bp)), (("NFT " + jg.name) + " is orphaned"))
2668- if ((jj != c))
2669- then throw((ap + " is not yours"))
2881+ let jp = valueOrErrorMessage(getString(bz(bI)), (("NFT " + jm.name) + " is orphaned"))
2882+ if ((jp != av))
2883+ then throw((aI + " is not yours"))
26702884 else {
2671- let hM = (dt(split(jg.description, "_")[cX]) / cu)
2672- let hN = valueOrElse(getInteger(bq(bp)), 0)
2673- let u = valueOrErrorMessage(getString(by(c)), "You don't have a duck staked")
2674- let je = valueOrElse(getString(bA(u)), ax)
2675- let bV = split(value(je), "_")
2676- if ((bV[bd] != "L"))
2677- then throw((("Duck location type is " + bV[bd]) + ", but should be L"))
2678- else if ((bV[be] != bp))
2679- then throw(("Duck should be on the land " + bp))
2885+ let hS = (aq(split(jm.description, "_")[T]) / p)
2886+ let hT = valueOrElse(getInteger(bJ(bI)), 0)
2887+ let bO = valueOrErrorMessage(getString(bS(av)), "You don't have a duck staked")
2888+ let jk = valueOrElse(getString(bU(bO)), aQ)
2889+ let cp = split(value(jk), "_")
2890+ if ((cp[bx] != "L"))
2891+ then throw((("Duck location type is " + cp[bx]) + ", but should be L"))
2892+ else if ((cp[by] != bI))
2893+ then throw(("Duck should be on the land " + bI))
26802894 else {
2681- let hL = bo(bp)
2682- let hC = hK(hL, hM, hN)
2683- let hx = bz(u)
2684- let ib = hw(hx)
2685- let fa = hZ(ia, hC, ib)
2686- let hT = split(hC[aT], "_")
2687- let jv = (parseIntValue(hT[aV]) + fa._7)
2688- let jw = (parseIntValue(hT[aW]) - fa._7)
2689- ([StringEntry(hx, makeString_2C([ib[aY], fa._4, fa._5, fa._6], ":")), StringEntry(hL, makeString_2C([hC[aP], fa._1, fa._2, fa._3, makeString([hT[aU], toString(jv), toString(jw), hT[aX]], "_")], ":"))] ++ kK)
2895+ let hR = bH(bI)
2896+ let hI = hQ(hR, hS, hT)
2897+ let hD = bT(bO)
2898+ let ih = hC(hD)
2899+ let fd = if(ig, hI, ih)
2900+ let hZ = split(hI[bn], "_")
2901+ let jB = (parseIntValue(hZ[bp]) + fd._7)
2902+ let jC = (parseIntValue(hZ[bq]) - fd._7)
2903+ ([StringEntry(hD, makeString_2C([ih[bs], fd._4, fd._5, fd._6], ":")), StringEntry(hR, makeString_2C([hI[bj], fd._1, fd._2, fd._3, makeString([hZ[bo], toString(jB), toString(jC), hZ[br]], "_")], ":"))] ++ lh)
26902904 }
26912905 }
26922906 }
26952909
26962910
26972911
2698-@Callable(gv)
2699-func saveWarehouse (hP,bp) = if ((gv.caller != cR))
2912+@Callable(gy)
2913+func saveWarehouse (hV,bI) = if ((gy.caller != N))
27002914 then throw("Access denied")
27012915 else {
2702- let hL = bo(bp)
2703- let hQ = split_4C(hP, ":")
2704- if ((size(hQ) != 5))
2916+ let hR = bH(bI)
2917+ let hW = split_4C(hV, ":")
2918+ if ((size(hW) != 5))
27052919 then throw("warehouse string should contain 4 ':' separators")
27062920 else {
2707- let lP = split(hQ[aT], "_")[aU]
2708- let jv = hB(hQ)
2709- let lQ = hz(hQ[aP])
2710- let jw = ((lQ - parseIntValue(lP)) - jv)
2711- if ((0 > jw))
2921+ let mn = split(hW[bn], "_")[bo]
2922+ let jB = hH(hW)
2923+ let mo = hF(hW[bj])
2924+ let jC = ((mo - parseIntValue(mn)) - jB)
2925+ if ((0 > jC))
27122926 then throw("Operation leads to negative free warehouse space")
27132927 else {
2714- let lR = makeString_2C([hQ[aP], hQ[aQ], hQ[aR], hQ[aS], makeString([lP, toString(jv), toString(jw), toString(lQ)], "_")], ":")
2715- $Tuple2([StringEntry(hL, lR)], lR)
2928+ let mp = makeString_2C([hW[bj], hW[bk], hW[bl], hW[bm], makeString([mn, toString(jB), toString(jC), toString(mo)], "_")], ":")
2929+ $Tuple2([StringEntry(hR, mp)], mp)
27162930 }
27172931 }
27182932 }
27192933
27202934
27212935
2722-@Callable(gv)
2723-func setCustomName (bg,ks,bk) = {
2724- let kK = kH(gv)
2725- if ((size(gv.payments) != 1))
2936+@Callable(gy)
2937+func setCustomName (bA,ky,bE) = {
2938+ let lh = kN(gy)
2939+ if ((size(gy.payments) != 1))
27262940 then throw("Exactly one payment required")
27272941 else {
2728- let kL = value(gv.payments[0])
2729- if ((kL.assetId != cn))
2942+ let li = value(gy.payments[0])
2943+ if ((li.assetId != h))
27302944 then throw("Allowed USDT payment only!")
2731- else if ((kL.amount != dM))
2732- then throw(("Payment should be " + toString(dM)))
2733- else if (contains(ks, "__"))
2734- then throw(("Name should not contain '__': " + ks))
2735- else if ((size(ks) > dN))
2736- then throw(("Name too long, maxLength=" + toString(dN)))
2945+ else if ((li.amount != dP))
2946+ then throw(("Payment should be " + toString(dP)))
2947+ else if (contains(ky, "__"))
2948+ then throw(("Name should not contain '__': " + ky))
2949+ else if ((size(ky) > dQ))
2950+ then throw(("Name too long, maxLength=" + toString(dQ)))
27372951 else {
2738- let c = toString(gv.originCaller)
2739- let lS = {
2740- let cm = bk
2741- if (("ACCOUNT" == cm))
2952+ let av = toString(gy.originCaller)
2953+ let mq = {
2954+ let g = bE
2955+ if (("ACCOUNT" == g))
27422956 then {
2743- let lT = ei(ks)
2744- let lU = getString(lT)
2745- if (isDefined(lU))
2746- then throw(("Name already registered: " + ks))
2957+ let mr = el(ky)
2958+ let ms = getString(mr)
2959+ if (isDefined(ms))
2960+ then throw(("Name already registered: " + ky))
27472961 else {
2748- let lV = bs(c)
2749- let lW = getString(lV)
2750- let lX = if (isDefined(lW))
2751- then [DeleteEntry(ei(value(lW)))]
2962+ let mt = bL(av)
2963+ let mu = getString(mt)
2964+ let mv = if (isDefined(mu))
2965+ then [DeleteEntry(el(value(mu)))]
27522966 else nil
2753- (((lX :+ StringEntry(lV, ks)) :+ StringEntry(lT, c)) ++ jU(c, T)._1)
2967+ (((mv :+ StringEntry(mt, ky)) :+ StringEntry(mr, av)) ++ ka(av, do)._1)
27542968 }
27552969 }
2756- else if (("LAND" == cm))
2970+ else if (("LAND" == g))
27572971 then {
2758- let jg = value(assetInfo(fromBase58String(bg)))
2759- let jh = bi(bg)
2760- if (!(isDefined(getInteger(jh))))
2761- then throw((jg.name + " is not staked"))
2972+ let jm = value(assetInfo(fromBase58String(bA)))
2973+ let jn = bC(bA)
2974+ if (!(isDefined(getInteger(jn))))
2975+ then throw((jm.name + " is not staked"))
27622976 else {
2763- let jj = valueOrErrorMessage(getString(bf(bg)), (("NFT " + jg.name) + " is orphaned"))
2764- if ((jj != c))
2765- then throw((ap + " is not yours"))
2977+ let jp = valueOrErrorMessage(getString(bz(bA)), (("NFT " + jm.name) + " is orphaned"))
2978+ if ((jp != av))
2979+ then throw((aI + " is not yours"))
27662980 else {
2767- let lT = eb(ks)
2768- let lU = getString(lT)
2769- if (isDefined(lU))
2770- then throw(("Name already registered: " + ks))
2981+ let mr = ee(ky)
2982+ let ms = getString(mr)
2983+ if (isDefined(ms))
2984+ then throw(("Name already registered: " + ky))
27712985 else {
2772- let lY = bh(bg)
2773- let lW = getString(lY)
2774- let lX = if (isDefined(lW))
2775- then [DeleteEntry(eb(value(lW)))]
2986+ let mw = bB(bA)
2987+ let mu = getString(mw)
2988+ let mv = if (isDefined(mu))
2989+ then [DeleteEntry(ee(value(mu)))]
27762990 else nil
2777- (((lX :+ StringEntry(lY, ks)) :+ StringEntry(lT, bg)) ++ jU(c, T)._1)
2991+ (((mv :+ StringEntry(mw, ky)) :+ StringEntry(mr, bA)) ++ ka(av, do)._1)
27782992 }
27792993 }
27802994 }
27812995 }
2782- else if (("DUCK" == cm))
2996+ else if (("DUCK" == g))
27832997 then {
2784- let jg = value(assetInfo(fromBase58String(bg)))
2785- let jh = bi(bg)
2786- if (if (!(isDefined(getInteger(jh))))
2998+ let jm = value(assetInfo(fromBase58String(bA)))
2999+ let jn = bC(bA)
3000+ if (if (!(isDefined(getInteger(jn))))
27873001 then true
2788- else !(isDefined(getString(by(c)))))
2789- then throw((jg.name + " is not staked"))
3002+ else !(isDefined(getString(bS(av)))))
3003+ then throw((jm.name + " is not staked"))
27903004 else {
2791- let jj = valueOrErrorMessage(getString(bx(bg)), (("NFT " + jg.name) + " is orphaned"))
2792- if ((jj != c))
2793- then throw((aq + " is not yours"))
3005+ let jp = valueOrErrorMessage(getString(bR(bA)), (("NFT " + jm.name) + " is orphaned"))
3006+ if ((jp != av))
3007+ then throw((aJ + " is not yours"))
27943008 else {
2795- let lT = eh(ks)
2796- let lU = getString(lT)
2797- if (isDefined(lU))
2798- then throw(("Name already registered: " + ks))
3009+ let mr = ek(ky)
3010+ let ms = getString(mr)
3011+ if (isDefined(ms))
3012+ then throw(("Name already registered: " + ky))
27993013 else {
2800- let lY = br(bg)
2801- let lW = getString(lY)
2802- let lX = if (isDefined(lW))
2803- then [DeleteEntry(eh(value(lW)))]
3014+ let mw = bK(bA)
3015+ let mu = getString(mw)
3016+ let mv = if (isDefined(mu))
3017+ then [DeleteEntry(ek(value(mu)))]
28043018 else nil
2805- (((lX :+ StringEntry(lY, ks)) :+ StringEntry(lT, bg)) ++ jT(bg, T)._1)
3019+ (((mv :+ StringEntry(mw, ky)) :+ StringEntry(mr, bA)) ++ jZ(bA, do)._1)
28063020 }
28073021 }
28083022 }
28093023 }
28103024 else throw("Unknown entity type")
28113025 }
2812- $Tuple2(((lS :+ ScriptTransfer(cR, kL.amount, cn)) ++ kK), 0)
3026+ $Tuple2(((mq :+ ScriptTransfer(N, li.amount, h)) ++ lh), 0)
28133027 }
28143028 }
28153029 }
28163030
28173031
28183032
2819-@Callable(gv)
2820-func setReferrals (lZ,ma) = if ((gv.callerPublicKey != cl))
3033+@Callable(gy)
3034+func setReferrals (mx,my) = if ((gy.callerPublicKey != f))
28213035 then throw("Permission denied")
28223036 else {
2823- let kK = kH(gv)
2824- if ((size(gv.payments) != 0))
3037+ let lh = kN(gy)
3038+ if ((size(gy.payments) != 0))
28253039 then throw("No payments required")
2826- else if (!(isDefined(addressFromString(lZ))))
2827- then throw(("Invalid address: " + lZ))
3040+ else if (!(isDefined(addressFromString(mx))))
3041+ then throw(("Invalid address: " + mx))
28283042 else {
2829- let mb = addressFromString(ma)
2830- if (!(isDefined(mb)))
2831- then throw(("Invalid address: " + ma))
3043+ let mz = addressFromString(my)
3044+ if (!(isDefined(mz)))
3045+ then throw(("Invalid address: " + my))
28323046 else {
2833- let mc = getString(dx(lZ))
2834- if (!(isDefined(mc)))
3047+ let mA = getString(au(mx))
3048+ if (!(isDefined(mA)))
28353049 then throw("oldPlayer didn't do any tx in game")
2836- else if ((0 >= wavesBalance(value(mb)).available))
3050+ else if ((0 >= wavesBalance(value(mz)).available))
28373051 then throw("newPlayer has no WAVES")
28383052 else {
2839- let md = ej()
2840- let me = getString(md)
2841- let mf = if (isDefined(me))
2842- then split_4C(value(me), "_")
3053+ let mB = em()
3054+ let mC = getString(mB)
3055+ let mD = if (isDefined(mC))
3056+ then split_4C(value(mC), "_")
28433057 else nil
2844- if (containsElement(mf, ma))
2845- then throw((ma + " is not newbie (already has referrals)"))
3058+ if (containsElement(mD, my))
3059+ then throw((my + " is not newbie (already has referrals)"))
28463060 else {
2847- let jW = bt(ma)
2848- let jX = getString(jW)
2849- if (if (isDefined(jX))
2850- then isDefined(addressFromString(value(jX)))
3061+ let kc = bM(my)
3062+ let kd = getString(kc)
3063+ if (if (isDefined(kd))
3064+ then isDefined(addressFromString(value(kd)))
28513065 else false)
2852- then throw(((ma + " already has refBy: ") + value(jX)))
3066+ then throw(((my + " already has refBy: ") + value(kd)))
28533067 else {
2854- let mg = bw(lZ)
2855- let mh = getString(mg)
2856- let mi = if (isDefined(mh))
2857- then split_4C(value(mh), "_")
3068+ let mE = bQ(mx)
3069+ let mF = getString(mE)
3070+ let mG = if (isDefined(mF))
3071+ then split_4C(value(mF), "_")
28583072 else nil
2859- if (containsElement(mi, ma))
2860- then throw((((lZ + " already contains ") + ma) + " within referrals"))
3073+ if (containsElement(mG, my))
3074+ then throw((((mx + " already contains ") + my) + " within referrals"))
28613075 else {
2862- let mj = makeString_2C((mi :+ ma), "_")
2863- let mk = if (containsElement(mf, lZ))
2864- then value(me)
2865- else makeString_2C((mf :+ lZ), "_")
2866- $Tuple2(([StringEntry(jW, lZ), StringEntry(mg, mj), StringEntry(md, mk)] ++ kK), 0)
3076+ let mH = makeString_2C((mG :+ my), "_")
3077+ let mI = if (containsElement(mD, mx))
3078+ then value(mC)
3079+ else makeString_2C((mD :+ mx), "_")
3080+ $Tuple2(([StringEntry(kc, mx), StringEntry(mE, mH), StringEntry(mB, mI)] ++ lh), 0)
28673081 }
28683082 }
28693083 }
28743088
28753089
28763090
2877-@Callable(gv)
2878-func distributePoints (ml,mm,mn,mo,mp) = {
2879- let kK = kH(gv)
2880- if ((size(gv.payments) != 0))
3091+@Callable(gy)
3092+func distributePoints (mJ,mK,mL,mM,mN) = {
3093+ let lh = kN(gy)
3094+ if ((size(gy.payments) != 0))
28813095 then throw("No payments required")
28823096 else {
2883- let c = toString(gv.originCaller)
2884- let mq = dq(invoke(cT, "checkWlgXpREADONLY", [c], nil))
2885- let mr = do(mq[1])
2886- let ms = if ((0 >= mr))
3097+ let av = toString(gy.originCaller)
3098+ let mO = an(invoke(P, "checkWlgXpREADONLY", [av], nil))
3099+ let mP = al(mO[1])
3100+ let mQ = if ((0 >= mP))
28873101 then $Tuple2(0, nil)
28883102 else {
2889- let jR = do(invoke(cT, "takeWlgXp", [c], nil))
2890- if ((jR == jR))
2891- then $Tuple2(mr, [IntegerEntry(B(c), do(mq[0])), IntegerEntry(A(c), do(mq[2]))])
3103+ let jX = al(invoke(P, "takeWlgXp", [av], nil))
3104+ if ((jX == jX))
3105+ then $Tuple2(mP, [IntegerEntry(cW(av), al(mO[0])), IntegerEntry(cV(av), al(mO[2]))])
28923106 else throw("Strict value is not equal to itself.")
28933107 }
2894- let mt = ms._1
2895- let mu = ms._2
2896- let u = valueOrErrorMessage(getString(by(c)), "You don't have a duck staked")
2897- let mv = C(c)
2898- let mw = (valueOrElse(getInteger(mv), 0) + mt)
2899- let mx = y(u)
2900- let my = valueOrElse(getInteger(mx), 0)
2901- let mz = (mw + my)
2902- let mA = ((((ml + mm) + mn) + mo) + mp)
2903- if ((mA > mz))
2904- then throw((("There are only " + toString(mz)) + " free points to distribute"))
3108+ let mR = mQ._1
3109+ let mS = mQ._2
3110+ let bO = valueOrErrorMessage(getString(bS(av)), "You don't have a duck staked")
3111+ let mT = cX(av)
3112+ let mU = (valueOrElse(getInteger(mT), 0) + mR)
3113+ let mV = cT(bO)
3114+ let mW = valueOrElse(getInteger(mV), 0)
3115+ let mX = (mU + mW)
3116+ let mY = ((((mJ + mK) + mL) + mM) + mN)
3117+ if ((mY > mX))
3118+ then throw((("There are only " + toString(mX)) + " free points to distribute"))
29053119 else {
2906- let mB = v(u)
2907- let al = split(valueOrElse(getString(mB), "0_0_0_0_0"), "_")
2908- let mC = (mw - mA)
2909- $Tuple2((([IntegerEntry(mv, if ((0 > mC))
3120+ let mZ = cQ(bO)
3121+ let dF = split(valueOrElse(getString(mZ), "0_0_0_0_0"), "_")
3122+ let na = (mU - mY)
3123+ $Tuple2((([IntegerEntry(mT, if ((0 > na))
29103124 then 0
2911- else mC), IntegerEntry(mx, if ((0 > mC))
2912- then (my + mC)
2913- else my), StringEntry(mB, makeString([toString((parseIntValue(al[j]) + ml)), toString((parseIntValue(al[k]) + mm)), toString((parseIntValue(al[l]) + mn)), toString((parseIntValue(al[m]) + mo)), toString((parseIntValue(al[n]) + mp))], "_"))] ++ kK) ++ mu), 0)
3125+ else na), IntegerEntry(mV, if ((0 > na))
3126+ then (mW + na)
3127+ else mW), StringEntry(mZ, makeString([toString((parseIntValue(dF[cF]) + mJ)), toString((parseIntValue(dF[cG]) + mK)), toString((parseIntValue(dF[cH]) + mL)), toString((parseIntValue(dF[cI]) + mM)), toString((parseIntValue(dF[cJ]) + mN))], "_"))] ++ lh) ++ mS), 0)
29143128 }
29153129 }
29163130 }
29173131
29183132
29193133
2920-@Callable(gv)
2921-func splitByGlobalWeightsREADONLY (ez) = $Tuple2(nil, eR(ez))
2922-
2923-
2924-
2925-@Callable(gv)
2926-func splitByGlobalAndLocalWeightsREADONLY (mD,mE,gy) = {
2927- let gr = gx(gy)
2928- $Tuple2(nil, $Tuple2(eR(mD), eC(mE, gr)))
2929- }
2930-
2931-
2932-
2933-@Callable(gv)
2934-func getBackpackREADONLY (u) = $Tuple2(nil, makeString(hw(bz(u)), ":"))
2935-
2936-
2937-
2938-@Callable(gv)
2939-func getWarehouseREADONLY (bp) = {
2940- let jg = value(assetInfo(fromBase58String(bp)))
2941- let hM = (dt(split(jg.description, "_")[cX]) / cu)
2942- let hN = valueOrElse(getInteger(bq(bp)), 0)
2943- $Tuple2(nil, makeString_2C(hK(bo(bp), hM, hN), ":"))
2944- }
2945-
2946-
2947-
2948-@Callable(gv)
2949-func saveLastTx () = if (!(containsElement([cT, cR, cU, cV], gv.caller)))
3134+@Callable(gy)
3135+func splitByGlobalWeightsREADONLY (eC) = $Tuple2(nil, eU(eC))
3136+
3137+
3138+
3139+@Callable(gy)
3140+func splitByGlobalAndLocalWeightsREADONLY (nb,nc,gB) = {
3141+ let gu = gA(gB)
3142+ $Tuple2(nil, $Tuple2(eU(nb), eF(nc, gu)))
3143+ }
3144+
3145+
3146+
3147+@Callable(gy)
3148+func getBackpackREADONLY (bO) = $Tuple2(nil, makeString(hC(bT(bO)), ":"))
3149+
3150+
3151+
3152+@Callable(gy)
3153+func getWarehouseREADONLY (bI) = {
3154+ let jm = value(assetInfo(fromBase58String(bI)))
3155+ let hS = (aq(split(jm.description, "_")[T]) / p)
3156+ let hT = valueOrElse(getInteger(bJ(bI)), 0)
3157+ $Tuple2(nil, makeString_2C(hQ(bH(bI), hS, hT), ":"))
3158+ }
3159+
3160+
3161+
3162+@Callable(gy)
3163+func saveLastTx () = if (!(containsElement([P, N, Q, R], gy.caller)))
29503164 then throw("Access denied")
2951- else $Tuple2(kH(gv), 42)
2952-
2953-
2954-
2955-@Callable(gv)
2956-func updateDuckStats (u,jR) = if ((gv.caller != cR))
3165+ else $Tuple2(kN(gy), 42)
3166+
3167+
3168+
3169+@Callable(gy)
3170+func updateDuckStats (bO,jX) = if ((gy.caller != N))
29573171 then throw("Access denied")
2958- else jT(u, jR)
2959-
2960-
2961-
2962-@Callable(gv)
2963-func updateAccStats (c,jR) = if (!(containsElement([cT, cR, cV], gv.caller)))
3172+ else jZ(bO, jX)
3173+
3174+
3175+
3176+@Callable(gy)
3177+func updateAccStats (av,jX) = if (!(containsElement([P, N, R], gy.caller)))
29643178 then throw("Access denied")
2965- else jU(c, jR)
2966-
2967-
2968-
2969-@Callable(gv)
2970-func equipDuck (mF) = {
2971- let kK = kH(gv)
2972- if ((size(gv.payments) != 0))
3179+ else ka(av, jX)
3180+
3181+
3182+
3183+@Callable(gy)
3184+func equipDuck (nd) = {
3185+ let lh = kN(gy)
3186+ if ((size(gy.payments) != 0))
29733187 then throw("No payments required")
29743188 else {
2975- let c = toString(gv.originCaller)
2976- let u = valueOrErrorMessage(getString(by(c)), "You don't have a duck staked")
2977- if (ke(u))
3189+ let av = toString(gy.originCaller)
3190+ let bO = valueOrErrorMessage(getString(bS(av)), "You don't have a duck staked")
3191+ if (kk(bO))
29783192 then throw("equipDuck_checkTournament")
29793193 else {
2980- let gh = z(u)
2981- let mG = split(valueOrElse(getString(gh), ",;,_,;,_,;,_,;,_,;,_,;,"), "_")
2982- let hx = bz(u)
2983- let ib = hw(hx)
2984- let le = split(mF, "_")
2985- if ((size(le) != p))
3194+ let gk = cU(bO)
3195+ let lb = split(valueOrElse(getString(gk), ",;,_,;,_,;,_,;,_,;,_,;,"), "_")
3196+ let hD = bT(bO)
3197+ let ih = hC(hD)
3198+ let lC = split(nd, "_")
3199+ if ((size(lC) != cL))
29863200 then throw("Wrong equipment string")
29873201 else {
2988- let gk = fZ(mG, fo(ib[bb]), true, nil)
2989- let gl = split(le[o], ";")[1]
2990- let aj = if ((gl == ""))
3202+ let gn = gc(lb, fr(ih[bv]), true, nil)
3203+ let go = split(lC[cK], ";")[1]
3204+ let dD = if ((go == ""))
29913205 then 0
29923206 else {
2993- let gm = split(gl, ",")[0]
2994- if ((gm == ""))
3207+ let gp = split(go, ",")[0]
3208+ if ((gp == ""))
29953209 then 0
29963210 else {
2997- let fD = split(gm, ":")
2998- let cP = fD[0]
2999- let gn = fD[1]
3000- if (if (if (if (if ((cP == "06"))
3211+ let fG = split(gp, ":")
3212+ let K = fG[0]
3213+ let gq = fG[1]
3214+ if (if (if (if (if ((K == "06"))
30013215 then true
3002- else (cP == "07"))
3216+ else (K == "07"))
30033217 then true
3004- else (cP == "08"))
3005- then (gn != "")
3218+ else (K == "08"))
3219+ then (gq != "")
30063220 else false)
3007- then (parseIntValue(gn) > 0)
3221+ then (parseIntValue(gq) > 0)
30083222 else false)
3009- then parseIntValue(split(aJ[parseIntValue(cP)], "_")[aL])
3223+ then parseIntValue(split(bd[parseIntValue(K)], "_")[bf])
30103224 else 0
30113225 }
30123226 }
3013- let fU = ah(this, u, aj, true)
3014- let go = fZ(le, gk, false, fU)
3015- let mH = ft(go)
3016- $Tuple2(([StringEntry(gh, mF), StringEntry(hx, makeString_2C([ib[aY], ib[aZ], ib[ba], mH], ":")), StringEntry(F(u), makeString([toString(fU[7]), toString(fU[8]), toString(fU[9]), toString(fU[10]), toString(fU[11])], "_"))] ++ kK), 0)
3227+ let fX = dC(this, bO, dD, true)
3228+ let gr = gc(lC, gn, false, fX)
3229+ let lc = fw(gr)
3230+ $Tuple2(([StringEntry(gk, nd), StringEntry(hD, makeString_2C([ih[bs], ih[bt], ih[bu], lc], ":")), StringEntry(da(bO), makeString([toString(fX[7]), toString(fX[8]), toString(fX[9]), toString(fX[10]), toString(fX[11])], "_"))] ++ lh), 0)
30173231 }
30183232 }
30193233 }
30213235
30223236
30233237
3024-@Callable(gv)
3025-func initDuckTourAttempt (u) = if ((gv.caller != cU))
3238+@Callable(gy)
3239+func initDuckTourAttempt (bO) = if ((gy.caller != Q))
30263240 then throw("Access denied")
30273241 else {
3028- let iP = t(u)
3029- let iQ = ab(valueOrElse(getInteger(x(u)), 0))
3030- let kY = valueOrElse(getInteger(iP), iQ)
3031- let mI = bA(u)
3032- let je = valueOrElse(getString(mI), ax)
3033- let bU = valueOrElse(getInteger(cU, bF), 0)
3034- let mJ = (toString(bU) + "_T_0")
3035- $Tuple2([IntegerEntry(D(u), kY), IntegerEntry(iP, iQ), StringEntry(E(u), je), StringEntry(mI, mJ)], mJ)
3036- }
3037-
3038-
3039-
3040-@Callable(gv)
3242+ let iV = cP(bO)
3243+ let iW = dw(valueOrElse(getInteger(cS(bO)), 0))
3244+ let lw = valueOrElse(getInteger(iV), iW)
3245+ let ne = bU(bO)
3246+ let jk = valueOrElse(getString(ne), aQ)
3247+ let co = valueOrElse(getInteger(Q, bZ), 0)
3248+ let nf = (toString(co) + "_T_0")
3249+ $Tuple2([IntegerEntry(cY(bO), lw), IntegerEntry(iV, iW), StringEntry(cZ(bO), jk), StringEntry(ne, nf)], nf)
3250+ }
3251+
3252+
3253+
3254+@Callable(gy)
30413255 func breakAttempt () = {
3042- let kK = kH(gv)
3043- let u = valueOrErrorMessage(getString(by(toString(gv.caller))), "You don't have a duck staked")
3044- let mI = bA(u)
3045- let je = valueOrElse(getString(mI), ax)
3046- if ((split(je, "_")[bd] != "T"))
3256+ let lh = kN(gy)
3257+ let bO = valueOrErrorMessage(getString(bS(toString(gy.caller))), "You don't have a duck staked")
3258+ let ne = bU(bO)
3259+ let jk = valueOrElse(getString(ne), aQ)
3260+ if ((split(jk, "_")[bx] != "T"))
30473261 then throw("Your duck is not in the tournament")
30483262 else {
3049- let mK = getIntegerValue(D(u))
3050- let mL = getStringValue(E(u))
3051- $Tuple2(((kK :+ IntegerEntry(t(u), mK)) :+ StringEntry(mI, mL)), je)
3052- }
3053- }
3054-
3055-
3056-
3057-@Callable(gv)
3058-func breakAttemptCallback () = if ((gv.caller != cU))
3263+ let ng = getIntegerValue(cY(bO))
3264+ let nh = getStringValue(cZ(bO))
3265+ $Tuple2(((lh :+ IntegerEntry(cP(bO), ng)) :+ StringEntry(ne, nh)), jk)
3266+ }
3267+ }
3268+
3269+
3270+
3271+@Callable(gy)
3272+func breakAttemptCallback () = if ((gy.caller != Q))
30593273 then throw("Access denied")
30603274 else {
3061- let u = valueOrErrorMessage(getString(by(toString(gv.originCaller))), "You don't have a duck staked")
3062- $Tuple2([IntegerEntry(t(u), getIntegerValue(D(u))), StringEntry(bA(u), getStringValue(E(u)))], "breakAttemptCallback")
3063- }
3064-
3065-
3066-
3067-@Callable(gv)
3068-func exitTournamentInternal (u) = if ((gv.caller != this))
3275+ let bO = valueOrErrorMessage(getString(bS(toString(gy.originCaller))), "You don't have a duck staked")
3276+ $Tuple2([IntegerEntry(cP(bO), getIntegerValue(cY(bO))), StringEntry(bU(bO), getStringValue(cZ(bO)))], "breakAttemptCallback")
3277+ }
3278+
3279+
3280+
3281+@Callable(gy)
3282+func exitTournamentInternal (bO) = if ((gy.caller != this))
30693283 then throw("Access denied")
30703284 else {
3071- let mK = getIntegerValue(D(u))
3072- let mL = getStringValue(E(u))
3073- $Tuple2([IntegerEntry(t(u), mK), StringEntry(bA(u), mL)], false)
3074- }
3075-
3076-
3077-
3078-@Callable(gv)
3079-func processDelivery (u) = if ((gv.caller != this))
3285+ let ng = getIntegerValue(cY(bO))
3286+ let nh = getStringValue(cZ(bO))
3287+ $Tuple2([IntegerEntry(cP(bO), ng), StringEntry(bU(bO), nh)], false)
3288+ }
3289+
3290+
3291+
3292+@Callable(gy)
3293+func processDelivery (bO) = if ((gy.caller != this))
30803294 then throw("Access denied")
30813295 else {
3082- let c = toString(gv.originCaller)
3083- let mM = valueOrElse(getInteger(cR, bE), 0)
3084- if ((aA > mM))
3085- then throw(("Delivery is not available, fund=" + dy(mM, 6)))
3296+ let av = toString(gy.originCaller)
3297+ let ni = valueOrElse(getInteger(N, bY), 0)
3298+ if ((aT > ni))
3299+ then throw(("Delivery is not available, fund=" + aw(ni, 6)))
30863300 else {
3087- let bW = lastBlock.timestamp
3088- let mN = L(c)
3089- let mO = valueOrElse(getInteger(M(c)), 0)
3090- let mP = (bW / a)
3091- let fJ = if ((mO == mP))
3092- then valueOrElse(getInteger(mN), 0)
3301+ let cq = lastBlock.timestamp
3302+ let nj = dg(av)
3303+ let nk = valueOrElse(getInteger(dh(av)), 0)
3304+ let nl = (cq / dJ)
3305+ let fM = if ((nk == nl))
3306+ then valueOrElse(getInteger(nj), 0)
30933307 else 0
3094- let mQ = valueOrElse(getInteger(cV, d(c)), 0)
3095- let mR = (aE + (mQ / aF))
3096- if ((fJ >= mR))
3097- then throw((("You already used " + toString(mR)) + " delivery attempts for today"))
3308+ let nm = valueOrElse(getInteger(R, dL(av)), 0)
3309+ let nn = (aY + (nm / aZ))
3310+ if ((fM >= nn))
3311+ then throw((("You already used " + toString(nn)) + " delivery attempts for today"))
30983312 else {
3099- let mS = K(u)
3100- let mT = invoke(cR, "sendDeliveryReward", [c], nil)
3101- $Tuple2([IntegerEntry(mN, (fJ + 1)), IntegerEntry(M(c), mP), IntegerEntry(mS, (valueOrElse(getInteger(mS), 0) + 1))], mT)
3313+ let no = df(bO)
3314+ let np = invoke(N, "sendDeliveryReward", [av], nil)
3315+ $Tuple2([IntegerEntry(nj, (fM + 1)), IntegerEntry(dh(av), nl), IntegerEntry(no, (valueOrElse(getInteger(no), 0) + 1))], np)
31023316 }
31033317 }
31043318 }
31053319
31063320
31073321
3108-@Callable(gv)
3109-func robLand (iE,iF) = {
3110- let kK = kH(gv)
3111- if ((size(gv.payments) != 1))
3322+@Callable(gy)
3323+func robLand (iK,iL) = {
3324+ let lh = kN(gy)
3325+ if ((size(gy.payments) != 1))
31123326 then throw("exactly 1 payment must be attached")
31133327 else {
3114- let kL = gv.payments[0]
3115- let mU = kL.amount
3116- if (if (!(isDefined(kL.assetId)))
3328+ let li = gy.payments[0]
3329+ let nq = li.amount
3330+ if (if (!(isDefined(li.assetId)))
31173331 then true
3118- else (value(kL.assetId) != db))
3332+ else (value(li.assetId) != X))
31193333 then throw("WLGOLD payments only!")
3120- else if ((mU != aB))
3121- then throw((("Payment should be " + dy(aB, 8)) + " WLGOLD"))
3334+ else if ((nq != aV))
3335+ then throw((("Payment should be " + aw(aV, 8)) + " WLGOLD"))
31223336 else {
3123- let c = toString(gv.caller)
3124- if (!(sigVerify_8Kb(iE, iF, cl)))
3337+ let av = toString(gy.caller)
3338+ if (!(sigVerify_8Kb(iK, iL, f)))
31253339 then throw("signature does not match")
31263340 else {
3127- let fg = split_4C(toUtf8String(iE), ";")
3128- let mV = split_4C(fg[0], "|")
3129- let iH = split(mV[es], "_")
3130- let iI = parseIntValue(iH[0])
3131- let iJ = parseIntValue(iH[1])
3132- let iT = mV[et]
3133- let mW = split(fg[1], "|")
3134- let mX = mW[eu]
3135- if ((mX != "B"))
3341+ let fj = split_4C(toUtf8String(iK), ";")
3342+ let nr = split_4C(fj[0], "|")
3343+ let iN = split(nr[ev], "_")
3344+ let iO = parseIntValue(iN[0])
3345+ let iP = parseIntValue(iN[1])
3346+ let iZ = nr[ew]
3347+ let ns = split(fj[1], "|")
3348+ let nt = ns[ex]
3349+ if ((nt != "B"))
31363350 then throw("Only bank robbery is supported")
31373351 else {
3138- let iM = parseIntValue(mW[ew])
3139- if (if ((iM > (lastBlock.timestamp + dL)))
3352+ let iS = parseIntValue(ns[ez])
3353+ if (if ((iS > (lastBlock.timestamp + dO)))
31403354 then true
3141- else ((lastBlock.timestamp - dL) > iM))
3142- then throw(((("signature outdated: logTime=" + toString(iM)) + ", bcTime=") + toString(lastBlock.timestamp)))
3355+ else ((lastBlock.timestamp - dO) > iS))
3356+ then throw(((("signature outdated: logTime=" + toString(iS)) + ", bcTime=") + toString(lastBlock.timestamp)))
31433357 else {
3144- let iN = mW[ev]
3145- let iO = valueOrElse(getString(dx(c)), "")
3146- if ((iO != iN))
3147- then throw(((("Tx ids don't match! In state: " + iO) + ", in msg: ") + iN))
3358+ let iT = ns[ey]
3359+ let iU = valueOrElse(getString(au(av)), "")
3360+ if ((iU != iT))
3361+ then throw(((("Tx ids don't match! In state: " + iU) + ", in msg: ") + iT))
31483362 else {
3149- let u = valueOrErrorMessage(getString(by(c)), "You don't have a duck staked")
3150- let gh = z(u)
3151- let lc = valueOrElse(getString(gh), ",;,_,;,_,;,_,;,_,;,_,;,")
3152- let mY = fb(lc, iT)
3153- let le = mY._1
3154- let lf = mY._2
3155- let mZ = mY._3
3156- let je = valueOrElse(getString(bA(u)), ax)
3157- if (bS(cU, je))
3363+ let bO = valueOrErrorMessage(getString(bS(av)), "You don't have a duck staked")
3364+ let gk = cU(bO)
3365+ let lA = valueOrElse(getString(gk), ",;,_,;,_,;,_,;,_,;,_,;,")
3366+ let nu = fe(lA, iZ)
3367+ let lC = nu._1
3368+ let lD = nu._2
3369+ let nv = nu._3
3370+ let jk = valueOrElse(getString(bU(bO)), aQ)
3371+ if (cm(Q, jk))
31583372 then throw("Your duck is taking part in the tournament")
31593373 else {
3160- let bW = lastBlock.timestamp
3161- let mN = I(c)
3162- let mO = valueOrElse(getInteger(J(c)), 0)
3163- let mP = (bW / a)
3164- let fJ = if ((mO == mP))
3165- then valueOrElse(getInteger(mN), 0)
3374+ let cq = lastBlock.timestamp
3375+ let nj = dd(av)
3376+ let nk = valueOrElse(getInteger(de(av)), 0)
3377+ let nl = (cq / dJ)
3378+ let fM = if ((nk == nl))
3379+ then valueOrElse(getInteger(nj), 0)
31663380 else 0
3167- let mQ = valueOrElse(getInteger(cV, d(c)), 0)
3168- let na = (aC + (mQ / aD))
3169- if ((fJ >= na))
3170- then throw((("You already used " + toString(na)) + " robbery attempts for today"))
3381+ let nm = valueOrElse(getInteger(R, dL(av)), 0)
3382+ let nw = (aW + (nm / aX))
3383+ if ((fM >= nw))
3384+ then throw((("You already used " + toString(nw)) + " robbery attempts for today"))
31713385 else {
3172- let mS = H(u)
3173- let nb = if ((iJ > 0))
3386+ let no = dc(bO)
3387+ let nx = if ((iP > 0))
31743388 then {
3175- let mM = assetBalance(this, db)
3176- let nc = if (mZ)
3177- then (2 * aB)
3178- else (5 * aB)
3179- if ((nc > mM))
3180- then throw(((("Robbery is not available, funds = " + dy(mM, 8)) + " WLGOLD, required = ") + dy(nc, 8)))
3181- else [ScriptTransfer(gv.caller, nc, db)]
3389+ let ni = assetBalance(this, X)
3390+ let ny = if (nv)
3391+ then (2 * aV)
3392+ else (5 * aV)
3393+ if ((ny > ni))
3394+ then throw(((("Robbery is not available, funds = " + aw(ni, 8)) + " WLGOLD, required = ") + aw(ny, 8)))
3395+ else [ScriptTransfer(gy.caller, ny, X)]
31823396 }
31833397 else nil
3184- $Tuple2((((((((((kK ++ nb) ++ (if (lf)
3185- then [StringEntry(F(u), "0_0_0_0_0")]
3186- else nil)) ++ jT(u, if ((iJ > 0))
3187- then Q
3188- else R)._1) :+ IntegerEntry(G(u), bW)) :+ IntegerEntry(mN, (fJ + 1))) :+ IntegerEntry(J(c), mP)) :+ IntegerEntry(mS, (valueOrElse(getInteger(mS), 0) + 1))) :+ StringEntry(gh, le)) :+ IntegerEntry(t(u), max([iJ, 0]))), 0)
3398+ $Tuple2((((((((((lh ++ nx) ++ (if (lD)
3399+ then [StringEntry(da(bO), "0_0_0_0_0")]
3400+ else nil)) ++ jZ(bO, if ((iP > 0))
3401+ then dl
3402+ else dm)._1) :+ IntegerEntry(db(bO), cq)) :+ IntegerEntry(nj, (fM + 1))) :+ IntegerEntry(de(av), nl)) :+ IntegerEntry(no, (valueOrElse(getInteger(no), 0) + 1))) :+ StringEntry(gk, lC)) :+ IntegerEntry(cP(bO), max([iP, 0]))), 0)
31893403 }
31903404 }
31913405 }
31983412
31993413
32003414
3201-@Callable(gv)
3202-func buyRoboDuck () = if (!(ci))
3415+@Callable(gy)
3416+func buyRoboDuck () = if (!(c))
32033417 then throw("Feature is turned off")
32043418 else {
3205- let kK = kH(gv)
3206- if ((size(gv.payments) != 1))
3419+ let lh = kN(gy)
3420+ if ((size(gy.payments) != 1))
32073421 then throw("Exactly one payment required")
32083422 else {
3209- let kL = value(gv.payments[0])
3210- if ((kL.assetId != cn))
3423+ let li = value(gy.payments[0])
3424+ if ((li.assetId != h))
32113425 then throw("Allowed USDT payment only!")
3212- else if ((kL.amount != dR))
3213- then throw((("Payment attached should be " + dy(dR, 6)) + " USDT"))
3426+ else if ((li.amount != dU))
3427+ then throw((("Payment attached should be " + aw(dU, 6)) + " USDT"))
32143428 else {
3215- let nd = valueOrElse(getInteger(ek()), 0)
3216- let ne = toBytes(nd)
3217- let ec = ((ar + "-") + takeRight(toBase16String(ne), 8))
3218- let nf = takeRight(toBase16String(sha256_16Kb(ne)), 6)
3219- let iB = Issue(ec, ("Robo Duck NFT for WavesLands game, background color = #" + nf), 1, 0, false)
3220- let bg = calculateAssetId(iB)
3221- $Tuple2(((((kK :+ IntegerEntry(ek(), (nd + 1))) :+ iB) :+ ScriptTransfer(gv.originCaller, 1, bg)) :+ ScriptTransfer(cR, kL.amount, cn)), $Tuple2(toBase58String(bg), nf))
3429+ let nz = valueOrElse(getInteger(en()), 0)
3430+ let nA = toBytes(nz)
3431+ let ef = ((aK + "-") + takeRight(toBase16String(nA), 8))
3432+ let nB = takeRight(toBase16String(sha256_16Kb(nA)), 6)
3433+ let iH = Issue(ef, ("Robo Duck NFT for WavesLands game, background color = #" + nB), 1, 0, false)
3434+ let bA = calculateAssetId(iH)
3435+ $Tuple2(((((lh :+ IntegerEntry(en(), (nz + 1))) :+ iH) :+ ScriptTransfer(gy.originCaller, 1, bA)) :+ ScriptTransfer(N, li.amount, h)), $Tuple2(toBase58String(bA), nB))
32223436 }
32233437 }
32243438 }
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let a = 86400000
5-
6-func b (c) = ("lastArbTimeUser_" + c)
7-
8-
9-func d (c) = ("acresStakedAmountByUser_" + c)
10-
11-
12-let e = 100000000
13-
14-let f = 3200
15-
16-let g = 4000
17-
18-let h = 3
19-
20-let i = ["Strength", "Accuracy", "Intellect", "Endurance", "Dexterity", "Level", "Health"]
21-
22-let j = 0
23-
24-let k = 1
25-
26-let l = 2
27-
28-let m = 3
29-
30-let n = 4
31-
32-let o = 0
33-
34-let p = 6
35-
36-let q = 2
37-
38-let r = 2
39-
40-let s = 30
41-
42-func t (u) = ("duckHealth_" + u)
43-
44-
45-func v (u) = ("duckChars_" + u)
46-
47-
48-func w (u) = ("duckXP_" + u)
49-
50-
51-func x (u) = ("duckLevel_" + u)
52-
53-
54-func y (u) = ("duckFreePoints_" + u)
55-
56-
57-func z (u) = ("duckEquipment_" + u)
58-
59-
60-func A (c) = ("userXP_" + c)
61-
62-
63-func B (c) = ("userLevel_" + c)
64-
65-
66-func C (c) = ("userFreePoints_" + c)
67-
68-
69-func D (u) = ("savedHealth_" + u)
70-
71-
72-func E (u) = ("savedLocation_" + u)
73-
74-
75-func F (u) = ("duckBuffs_" + u)
76-
77-
78-func G (u) = ("lastRobberyTime_" + u)
79-
80-
81-func H (u) = ("totalRobberyCountByDuck_" + u)
82-
83-
84-func I (c) = ("userRobberyCount_" + c)
85-
86-
87-func J (c) = ("userLastRobberyDay_" + c)
88-
89-
90-func K (u) = ("totalDeliveryCountByDuck_" + u)
91-
92-
93-func L (c) = ("userDeliveryCount_" + c)
94-
95-
96-func M (c) = ("userLastDeliveryDay_" + c)
97-
98-
99-let N = 10000
100-
101-let O = 10000
102-
103-let P = 2000
104-
105-let Q = 10000
106-
107-let R = 2000
108-
109-let S = 100000
110-
111-let T = 1000000
112-
113-let U = 5000000
114-
115-let V = 10000
116-
117-let W = 1000000
118-
119-let X = 1000000
120-
121-let Y = 10000
122-
123-func Z (aa) = fraction(f, pow(aa, 4, g, 4, 4, DOWN), e)
124-
125-
126-func ab (ac) = (100 + ac)
127-
128-
129-func ad (ae,af) = {
130- let ag = Z(af)
131-[ag, (h * (ag - ae))]
132- }
133-
134-
135-func ah (ai,u,aj,ak) = {
136- let al = split(valueOrElse(getString(ai, v(u)), "0_0_0_0_0"), "_")
137- let am = valueOrElse(getInteger(ai, x(u)), 0)
138- let an = valueOrElse(getInteger(ai, t(u)), ab(am))
139- let ao = split(valueOrElse(getString(ai, F(u)), "0_0_0_0_0"), "_")
140- ([parseIntValue(al[j]), parseIntValue(al[k]), parseIntValue(al[l]), parseIntValue(al[m]), parseIntValue(al[n]), am, an] ++ (if (ak)
141- then [aj, aj, aj, aj, aj]
142- else [parseIntValue(ao[j]), parseIntValue(ao[k]), parseIntValue(ao[l]), parseIntValue(ao[m]), parseIntValue(ao[n])]))
143- }
144-
145-
146-let ap = "LAND"
147-
148-let aq = "DUCK"
149-
150-let ar = "ROBO"
151-
152-let as = "PRESALE"
153-
154-let at = 6
155-
156-let au = 25
157-
158-let av = 3456000
159-
160-let aw = 10000000000
161-
162-let ax = "Africa_F_Africa"
163-
164-let ay = 39637
165-
166-let az = 10
167-
168-let aA = 50000
169-
170-let aB = 100000000
171-
172-let aC = 0
173-
174-let aD = 200000000
175-
176-let aE = 0
177-
178-let aF = 200000000
179-
180-let aG = ["First Aid Kit L1", "First Aid Kit L2", "First Aid Kit L3", "Backpack L1", "Backpack L2", "Backpack L3", "Food Ration L1", "Food Ration L2", "Food Ration L3", "Jet Pack L1", "Jet Pack L2", "Jet Pack L3", "Shield L1", "Shield L2", "Shield L3", "Mine L1", "Mine L2", "Mine L3", "Trap L1", "Trap L2", "Trap L3", "Boom-Dog L1", "Boom-Dog L2", "Boom-Dog L3"]
181-
182-let aH = ["Americas", "Europe", "Asia", "Africa", "Oceania"]
183-
184-let aI = 10000000
185-
186-let aJ = ["8_8_8_17_17_42_12_0_30_0,0,0,0,0,0,0_", "8_8_8_17_17_42_24_0_60_0,0,5,2,0,0,0_", "8_8_8_17_17_42_36_0_120_0,0,10,4,0,0,0_", "8_19_19_8_27_19_26_1_20_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_52_1_40_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_78_1_80_0,0,0,0,0,0,0_001", "8_8_8_8_8_60_13_2_2_0,0,0,0,0,0,0_011", "8_8_8_8_8_60_26_2_4_0,0,0,0,0,0,0_011", "8_8_8_8_8_60_39_2_8_0,0,0,0,0,0,0_011", "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_10_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_22_4_20_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_33_4_30_0,0,0,0,0,0,0_201", "4_13_22_4_35_22_23_0_50,1,0_0,0,0,0,0,0,0_", "4_13_22_4_35_22_46_0_50,1,1_0,2,5,0,0,0,0_", "4_13_22_4_35_22_69_0_50,2,1_0,5,10,0,0,0,0_", "5_25_40_5_10_15_20_1_30,1,1_0,0,0,0,0,0,0_", "5_25_40_5_10_15_40_1_30,1,2_2,1,3,0,0,0,0_", "5_25_40_5_10_15_60_1_30,1,3_5,2,8,0,0,0,0_", "23_23_5_20_23_6_35_2_100_0,0,0,0,0,0,0_", "23_23_5_20_23_6_70_2_150_0,0,0,0,0,0,0_", "23_23_5_20_23_6_105_2_200_0,0,0,0,0,0,0_"]
187-
188-let aK = 6
189-
190-let aL = 8
191-
192-let aM = 9
193-
194-let aN = 10
195-
196-let aO = 10
197-
198-let aP = 0
199-
200-let aQ = 1
201-
202-let aR = 2
203-
204-let aS = 3
205-
206-let aT = 4
207-
208-let aU = 0
209-
210-let aV = 1
211-
212-let aW = 2
213-
214-let aX = 3
215-
216-let aY = 0
217-
218-let aZ = 1
219-
220-let ba = 2
221-
222-let bb = 3
223-
224-let bc = 0
225-
226-let bd = 1
227-
228-let be = 2
229-
230-func bf (bg) = ("no_" + bg)
231-
232-
233-func bh (bg) = ("lcna_" + bg)
234-
235-
236-func bi (bg) = ("st_" + bg)
237-
238-
239-func bj (bk,bg) = makeString(["las", bk, bg], "_")
240-
241-
242-func bl (bm,bg,bn) = ((((("sttao_" + bm) + "_") + bg) + "_") + bn)
243-
244-
245-func bo (bp) = ("wh_" + bp)
246-
247-
248-func bq (bg) = ("infraLevel_" + bg)
249-
250-
251-func br (bg) = ("duckCustomNameByAssetId_" + bg)
252-
253-
254-func bs (c) = ("accountCustomNameByAddr_" + c)
255-
256-
257-func bt (c) = ("accRefBy_" + c)
258-
259-
260-func bu (u) = ("onboardArtActivatedOnDuck_" + u)
261-
262-
263-func bv (c) = ("onboardArtActivatedDuckBy_" + c)
264-
265-
266-func bw (c) = ("accReferrals_" + c)
267-
268-
269-func bx (bg) = ("duckOwner_" + bg)
270-
271-
272-func by (bn) = ("stakedDuckByOwner_" + bn)
273-
274-
275-func bz (u) = ("backPack_" + u)
276-
277-
278-func bA (u) = ("duckLocation_" + u)
279-
280-
281-func bB (bC) = ("%s%s__userGwlReleaseTime__" + bC)
282-
283-
284-func bD () = "emergencyWarehouseProducts"
285-
286-
287-let bE = "deliveryFund"
288-
289-let bF = "%s__lastTourId"
290-
291-func bG (bH) = ("%s%d__tourStaticData__" + toString(bH))
292-
293-
294-func bI (bH) = ("%s%d__tourDynamicData__" + toString(bH))
295-
296-
297-func bJ (bH,u) = makeString(["%s%d%s__bestResultByTourAndDuck", toString(bH), u], "__")
298-
299-
300-let bK = 0
301-
302-let bL = 1
303-
304-let bM = 6
305-
306-let bN = 1
307-
308-func bO (bP,bH) = {
309- let bQ = split(valueOrErrorMessage(getString(bP, bG(bH)), (("Error reading tournament " + toString(bH)) + " data")), "__")
310- let bR = split_4C(valueOrErrorMessage(getString(bP, bI(bH)), (("Error reading tournament " + toString(bH)) + " data")), "__")
311-[bQ, bR]
312- }
313-
314-
315-func bS (bP,bT) = {
316- let bU = valueOrElse(getInteger(bP, bF), 0)
317- let bV = split(bT, "_")
318- let bW = lastBlock.timestamp
319- let bX = bO(bP, bU)
320- let bQ = bX[bK]
321- let bR = bX[bL]
322- if (if (if ((bV[bd] == "T"))
323- then (parseIntValue(bV[bc]) == bU)
324- else false)
325- then (bR[bN] == "INPROGRESS")
326- else false)
327- then (parseIntValue(bQ[bM]) > bW)
328- else false
329- }
330-
331-
332-func bY (bP,bT) = {
333- let bU = valueOrElse(getInteger(bP, bF), 0)
334- let bV = split(bT, "_")
335- let bW = lastBlock.timestamp
336- let bX = bO(bP, bU)
337- let bQ = bX[bK]
338- let bR = bX[bL]
339- let bZ = bV[bd]
340- if (if (if ((bV[bd] == "T"))
341- then (parseIntValue(bV[bc]) == bU)
342- else false)
343- then (bR[bN] == "INPROGRESS")
344- else false)
345- then (parseIntValue(bQ[bM]) > bW)
346- else false
347- }
348-
349-
350-func ca (cb) = (parseIntValue(cb[aK]) * aI)
351-
352-
353-func cc (cd,ce,cf) = throw(((((("Cheat attempt: oldLoc=" + cd) + ", newLoc=") + ce) + ", case=") + toString(cf)))
354-
355-
356-let cg = false
357-
358-let ch = false
359-
360-let ci = false
361-
362-let cj = 86400000
363-
364-let ck = take(drop(this.bytes, 1), 1)
365-
366-let cl = {
367- let cm = ck
368- if ((base58'2W' == cm))
369- then if (cg)
4+let a = false
5+
6+let b = false
7+
8+let c = false
9+
10+let d = 86400000
11+
12+let e = take(drop(this.bytes, 1), 1)
13+
14+let f = {
15+ let g = e
16+ if ((base58'2W' == g))
17+ then if (a)
37018 then base58'CWsMtTZC5BjjoL4Q1ayW4Wwb1ehGACQB6DrKyPgotKfm'
37119 else base58'6LfPuKJjLgekmncBhMg2LZyMTNVzZBccXR28ySXm9uXD'
372- else if ((base58'2T' == cm))
20+ else if ((base58'2T' == g))
37321 then base58'6LfPuKJjLgekmncBhMg2LZyMTNVzZBccXR28ySXm9uXD'
37422 else throw("Unknown chain")
37523 }
37624
377-let cn = {
378- let cm = ck
379- if ((base58'2W' == cm))
25+let h = {
26+ let g = e
27+ if ((base58'2W' == g))
38028 then base58'9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi'
381- else if ((base58'2T' == cm))
29+ else if ((base58'2T' == g))
38230 then base58'6mWwf9mZBjVgkC54idpyaZLQfAosD914wT8fGf2iiY63'
38331 else throw("Unknown chain")
38432 }
38533
386-let co = {
387- let cm = ck
388- if ((base58'2W' == cm))
34+let i = {
35+ let g = e
36+ if ((base58'2W' == g))
38937 then "3PQCuvFbvh4LkPUnrnU1z3jnbA1p9m3WNhv"
390- else if ((base58'2T' == cm))
38+ else if ((base58'2T' == g))
39139 then "3MumkGGztCKAXpWDqxkddofqXSUbqQkvSJy"
39240 else throw("Unknown chain")
39341 }
39442
395-let cp = {
396- let cm = ck
397- if ((base58'2W' == cm))
43+let j = {
44+ let g = e
45+ if ((base58'2W' == g))
46+ then "3P4UH3T9nXpMNpUmSmQjPmEz3G85t3zn6eA"
47+ else if ((base58'2T' == g))
48+ then "3NBPx1Fciu3JQNEGZ21jSnTdutLNGGBUSXh"
49+ else throw("Unknown chain")
50+ }
51+
52+let k = {
53+ let g = e
54+ if ((base58'2W' == g))
39855 then 10000000000
399- else if ((base58'2T' == cm))
56+ else if ((base58'2T' == g))
40057 then 100000000
40158 else throw("Unknown chain")
40259 }
40360
404-let cq = {
405- let cm = ck
406- if ((base58'2W' == cm))
407- then cj
408- else if ((base58'2T' == cm))
61+let l = {
62+ let g = e
63+ if ((base58'2W' == g))
64+ then d
65+ else if ((base58'2T' == g))
40966 then 60000
41067 else throw("Unknown chain")
41168 }
41269
413-let cr = "__"
414-
415-let cs = 1000000
416-
417-let ct = 100000000
418-
419-let cu = 25
420-
421-let cv = 100
422-
423-let cw = 225
424-
425-let cx = 400
426-
427-let cy = 625
428-
429-let cz = [0, 1, 2, 3, 4, 5]
430-
431-func cA (cB,cC) = valueOrErrorMessage(getString(cB, cC), makeString(["mandatory ", toString(cB), ".", cC, " is not defined"], ""))
432-
433-
434-let cD = 1
435-
436-let cE = 2
437-
438-let cF = 3
439-
440-let cG = 4
441-
442-let cH = 7
443-
444-let cI = 8
445-
446-func cJ () = "%s__restConfig"
447-
448-
449-func cK () = "%s__restAddr"
450-
451-
452-func cL (cM) = split_4C(cA(cM, cJ()), cr)
453-
454-
455-func cN (cO,cP) = valueOrErrorMessage(addressFromString(cO[cP]), ("Rest cfg doesn't contain address at index " + toString(cP)))
456-
457-
458-let cQ = addressFromStringValue(valueOrElse(getString(this, cK()), co))
459-
460-let cO = cL(cQ)
461-
462-let ai = cN(cO, cD)
463-
464-let cR = cN(cO, cE)
465-
466-let cS = cN(cO, cF)
467-
468-let cT = cN(cO, cG)
469-
470-let cU = cN(cO, cH)
471-
472-let cV = cN(cO, cI)
473-
474-let cW = 0
475-
476-let cX = 1
477-
478-let cY = 2
479-
480-let cZ = 3
481-
482-let da = "wlg_assetId"
483-
484-let db = valueOrErrorMessage(getBinary(cT, da), "WLGOLD is not issued yet")
485-
486-let dc = "acresAssetId"
487-
488-let dd = valueOrErrorMessage(getBinary(cV, dc), "ACRES is not issued yet")
489-
490-let de = 2
491-
492-func df (cB) = ("finishBlockFor_" + cB)
493-
494-
495-func dg () = "resTypesProportions"
496-
497-
498-func dh (di) = ("resTypesByContinent_" + di)
499-
500-
501-func dj (bn) = ("stakedLandsByOwner_" + bn)
502-
503-
504-func dk (bn) = ("stakedPiecesByOwner_" + bn)
505-
506-
507-func dl (dm) = {
508- let cm = dm
509- if ($isInstanceOf(cm, "String"))
70+let m = "__"
71+
72+let n = 1000000
73+
74+let o = 100000000
75+
76+let p = 25
77+
78+let q = 100
79+
80+let r = 225
81+
82+let s = 400
83+
84+let t = 625
85+
86+let u = [0, 1, 2, 3, 4, 5]
87+
88+func v (w,x) = valueOrErrorMessage(getString(w, x), makeString(["mandatory ", toString(w), ".", x, " is not defined"], ""))
89+
90+
91+let y = 1
92+
93+let z = 2
94+
95+let A = 3
96+
97+let B = 4
98+
99+let C = 7
100+
101+let D = 8
102+
103+func E () = "%s__restConfig"
104+
105+
106+func F () = "%s__restAddr"
107+
108+
109+func G (H) = split_4C(v(H, E()), m)
110+
111+
112+func I (J,K) = valueOrErrorMessage(addressFromString(J[K]), ("Rest cfg doesn't contain address at index " + toString(K)))
113+
114+
115+let L = addressFromStringValue(valueOrElse(getString(this, F()), i))
116+
117+let J = G(L)
118+
119+let M = I(J, y)
120+
121+let N = I(J, z)
122+
123+let O = I(J, A)
124+
125+let P = I(J, B)
126+
127+let Q = I(J, C)
128+
129+let R = I(J, D)
130+
131+let S = 0
132+
133+let T = 1
134+
135+let U = 2
136+
137+let V = 3
138+
139+let W = "wlg_assetId"
140+
141+let X = valueOrErrorMessage(getBinary(P, W), "WLGOLD is not issued yet")
142+
143+let Y = "acresAssetId"
144+
145+let Z = valueOrErrorMessage(getBinary(R, Y), "ACRES is not issued yet")
146+
147+let aa = 2
148+
149+func ab (w) = ("finishBlockFor_" + w)
150+
151+
152+func ac () = "resTypesProportions"
153+
154+
155+func ad (ae) = ("resTypesByContinent_" + ae)
156+
157+
158+func af (ag) = ("stakedLandsByOwner_" + ag)
159+
160+
161+func ah (ag) = ("stakedPiecesByOwner_" + ag)
162+
163+
164+func ai (aj) = {
165+ let g = aj
166+ if ($isInstanceOf(g, "String"))
510167 then {
511- let dn = cm
512- dn
168+ let ak = g
169+ ak
513170 }
514171 else throw("fail to cast into String")
515172 }
516173
517174
518-func do (dm) = {
519- let cm = dm
520- if ($isInstanceOf(cm, "Int"))
175+func al (aj) = {
176+ let g = aj
177+ if ($isInstanceOf(g, "Int"))
521178 then {
522- let dp = cm
523- dp
179+ let am = g
180+ am
524181 }
525182 else throw("fail to cast into Int")
526183 }
527184
528185
529-func dq (dm) = {
530- let cm = dm
531- if ($isInstanceOf(cm, "List[Any]"))
186+func an (aj) = {
187+ let g = aj
188+ if ($isInstanceOf(g, "List[Any]"))
532189 then {
533- let dr = cm
534- dr
190+ let ao = g
191+ ao
535192 }
536193 else throw("fail to cast into List[Any]")
537194 }
538195
539196
540-func ds (dm) = {
541- let cm = dm
542- if ($isInstanceOf(cm, "Boolean"))
197+func ap (aj) = {
198+ let g = aj
199+ if ($isInstanceOf(g, "Boolean"))
543200 then {
544- let dn = cm
545- dn
201+ let ak = g
202+ ak
546203 }
547204 else throw("fail to cast into Boolean")
548205 }
549206
550207
551-func dt (du) = {
552- let cm = du
553- if (("S" == cm))
554- then cu
555- else if (("M" == cm))
556- then cv
557- else if (("L" == cm))
558- then cw
559- else if (("XL" == cm))
560- then cx
561- else if (("XXL" == cm))
562- then cy
208+func aq (ar) = {
209+ let g = ar
210+ if (("S" == g))
211+ then p
212+ else if (("M" == g))
213+ then q
214+ else if (("L" == g))
215+ then r
216+ else if (("XL" == g))
217+ then s
218+ else if (("XXL" == g))
219+ then t
563220 else throw("Unknown land size")
564221 }
565222
566223
567-func dv (dn) = isDefined(parseInt(dn))
568-
569-
570-func dw () = "contractsBlocked"
571-
572-
573-func dx (c) = ("lastTxIdByUser_" + c)
574-
575-
576-func dy (dz,dA) = {
577- let dB = pow(10, 0, dA, 0, 0, DOWN)
578- let dC = toString((dz % dB))
579- let dD = drop(toString(dB), (1 + size(dC)))
580- (((toString((dz / dB)) + ".") + dD) + dC)
581- }
582-
583-
584-func dE (dF,dG,dH) = if ((0 >= dF))
224+func as (ak) = isDefined(parseInt(ak))
225+
226+
227+func at () = "contractsBlocked"
228+
229+
230+func au (av) = ("lastTxIdByUser_" + av)
231+
232+
233+func aw (ax,ay) = {
234+ let az = pow(10, 0, ay, 0, 0, DOWN)
235+ let aA = toString((ax % az))
236+ let aB = drop(toString(az), (1 + size(aA)))
237+ (((toString((ax / az)) + ".") + aB) + aA)
238+ }
239+
240+
241+func aC (aD,aE,aF) = if ((0 >= aD))
585242 then throw("maxValue should be > 0")
586243 else {
587- let dI = sha256((dG + dH))
588- (toInt(dI) % dF)
589- }
590-
591-
592-let dJ = {
593- let cm = ck
594- if ((base58'2W' == cm))
244+ let aG = sha256((aE + aF))
245+ (toInt(aG) % aD)
246+ }
247+
248+
249+func aH () = min([lastBlock.timestamp, 1727740799000])
250+
251+
252+let aI = "LAND"
253+
254+let aJ = "DUCK"
255+
256+let aK = "ROBO"
257+
258+let aL = "PRESALE"
259+
260+let aM = 6
261+
262+let aN = 25
263+
264+let aO = 3456000
265+
266+let aP = 10000000000
267+
268+let aQ = "Africa_F_Africa"
269+
270+let aR = 39637
271+
272+let aS = 10
273+
274+let aT = 50000
275+
276+let aU = 10
277+
278+let aV = 100000000
279+
280+let aW = 0
281+
282+let aX = 200000000
283+
284+let aY = 0
285+
286+let aZ = 200000000
287+
288+let ba = ["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", "Mine L1", "Mine L2", "Mine L3", "Trap L1", "Trap L2", "Trap L3", "Boom-Dog L1", "Boom-Dog L2", "Boom-Dog L3"]
289+
290+let bb = ["Americas", "Europe", "Asia", "Africa", "Oceania"]
291+
292+let bc = 10000000
293+
294+let bd = ["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_011", "8_8_8_8_8_60_26_2_4_0,0,0,0,0,0,0_011", "8_8_8_8_8_60_39_2_8_0,0,0,0,0,0,0_011", "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_10_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_22_4_20_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_33_4_30_0,0,0,0,0,0,0_201", "4_13_22_4_35_22_23_0_50,1,0_0,0,0,0,0,0,0_", "4_13_22_4_35_22_46_0_50,1,1_0,2,5,0,0,0,0_", "4_13_22_4_35_22_69_0_50,2,1_0,5,10,0,0,0,0_", "5_25_40_5_10_15_20_1_30,1,1_0,0,0,0,0,0,0_", "5_25_40_5_10_15_40_1_30,1,2_2,1,3,0,0,0,0_", "5_25_40_5_10_15_60_1_30,1,3_5,2,8,0,0,0,0_", "23_23_5_20_23_6_35_2_100_0,0,0,0,0,0,0_", "23_23_5_20_23_6_70_2_150_0,0,0,0,0,0,0_", "23_23_5_20_23_6_105_2_200_0,0,0,0,0,0,0_"]
295+
296+let be = 6
297+
298+let bf = 8
299+
300+let bg = 9
301+
302+let bh = 10
303+
304+let bi = 10
305+
306+let bj = 0
307+
308+let bk = 1
309+
310+let bl = 2
311+
312+let bm = 3
313+
314+let bn = 4
315+
316+let bo = 0
317+
318+let bp = 1
319+
320+let bq = 2
321+
322+let br = 3
323+
324+let bs = 0
325+
326+let bt = 1
327+
328+let bu = 2
329+
330+let bv = 3
331+
332+let bw = 0
333+
334+let bx = 1
335+
336+let by = 2
337+
338+func bz (bA) = ("no_" + bA)
339+
340+
341+func bB (bA) = ("lcna_" + bA)
342+
343+
344+func bC (bA) = ("st_" + bA)
345+
346+
347+func bD (bE,bA) = makeString(["las", bE, bA], "_")
348+
349+
350+func bF (bG,bA,ag) = ((((("sttao_" + bG) + "_") + bA) + "_") + ag)
351+
352+
353+func bH (bI) = ("wh_" + bI)
354+
355+
356+func bJ (bA) = ("infraLevel_" + bA)
357+
358+
359+func bK (bA) = ("duckCustomNameByAssetId_" + bA)
360+
361+
362+func bL (av) = ("accountCustomNameByAddr_" + av)
363+
364+
365+func bM (av) = ("accRefBy_" + av)
366+
367+
368+func bN (bO) = ("onboardArtActivatedOnDuck_" + bO)
369+
370+
371+func bP (av) = ("onboardArtActivatedDuckBy_" + av)
372+
373+
374+func bQ (av) = ("accReferrals_" + av)
375+
376+
377+func bR (bA) = ("duckOwner_" + bA)
378+
379+
380+func bS (ag) = ("stakedDuckByOwner_" + ag)
381+
382+
383+func bT (bO) = ("backPack_" + bO)
384+
385+
386+func bU (bO) = ("duckLocation_" + bO)
387+
388+
389+func bV (bW) = ("%s%s__userGwlReleaseTime__" + bW)
390+
391+
392+func bX () = "emergencyWarehouseProducts"
393+
394+
395+let bY = "deliveryFund"
396+
397+let bZ = "%s__lastTourId"
398+
399+func ca (cb) = ("%s%d__tourStaticData__" + toString(cb))
400+
401+
402+func cc (cb) = ("%s%d__tourDynamicData__" + toString(cb))
403+
404+
405+func cd (cb,bO) = makeString(["%s%d%s__bestResultByTourAndDuck", toString(cb), bO], "__")
406+
407+
408+let ce = 0
409+
410+let cf = 1
411+
412+let cg = 6
413+
414+let ch = 1
415+
416+func ci (cj,cb) = {
417+ let ck = split(valueOrErrorMessage(getString(cj, ca(cb)), (("Error reading tournament " + toString(cb)) + " data")), "__")
418+ let cl = split_4C(valueOrErrorMessage(getString(cj, cc(cb)), (("Error reading tournament " + toString(cb)) + " data")), "__")
419+[ck, cl]
420+ }
421+
422+
423+func cm (cj,cn) = {
424+ let co = valueOrElse(getInteger(cj, bZ), 0)
425+ let cp = split(cn, "_")
426+ let cq = lastBlock.timestamp
427+ let cr = ci(cj, co)
428+ let ck = cr[ce]
429+ let cl = cr[cf]
430+ if (if (if ((cp[bx] == "T"))
431+ then (parseIntValue(cp[bw]) == co)
432+ else false)
433+ then (cl[ch] == "INPROGRESS")
434+ else false)
435+ then (parseIntValue(ck[cg]) > cq)
436+ else false
437+ }
438+
439+
440+func cs (cj,cn) = {
441+ let co = valueOrElse(getInteger(cj, bZ), 0)
442+ let cp = split(cn, "_")
443+ let cq = lastBlock.timestamp
444+ let cr = ci(cj, co)
445+ let ck = cr[ce]
446+ let cl = cr[cf]
447+ let ct = cp[bx]
448+ if (if (if ((cp[bx] == "T"))
449+ then (parseIntValue(cp[bw]) == co)
450+ else false)
451+ then (cl[ch] == "INPROGRESS")
452+ else false)
453+ then (parseIntValue(ck[cg]) > cq)
454+ else false
455+ }
456+
457+
458+func cu (cv) = (parseIntValue(cv[be]) * bc)
459+
460+
461+func cw (cx,cy,cz) = throw(((((("Cheat attempt: oldLoc=" + cx) + ", newLoc=") + cy) + ", case=") + toString(cz)))
462+
463+
464+let cA = 100000000
465+
466+let cB = 3200
467+
468+let cC = 4000
469+
470+let cD = 3
471+
472+let cE = ["Strength", "Accuracy", "Intellect", "Endurance", "Dexterity", "Level", "Health"]
473+
474+let cF = 0
475+
476+let cG = 1
477+
478+let cH = 2
479+
480+let cI = 3
481+
482+let cJ = 4
483+
484+let cK = 0
485+
486+let cL = 6
487+
488+let cM = 2
489+
490+let cN = 2
491+
492+let cO = 30
493+
494+func cP (bO) = ("duckHealth_" + bO)
495+
496+
497+func cQ (bO) = ("duckChars_" + bO)
498+
499+
500+func cR (bO) = ("duckXP_" + bO)
501+
502+
503+func cS (bO) = ("duckLevel_" + bO)
504+
505+
506+func cT (bO) = ("duckFreePoints_" + bO)
507+
508+
509+func cU (bO) = ("duckEquipment_" + bO)
510+
511+
512+func cV (av) = ("userXP_" + av)
513+
514+
515+func cW (av) = ("userLevel_" + av)
516+
517+
518+func cX (av) = ("userFreePoints_" + av)
519+
520+
521+func cY (bO) = ("savedHealth_" + bO)
522+
523+
524+func cZ (bO) = ("savedLocation_" + bO)
525+
526+
527+func da (bO) = ("duckBuffs_" + bO)
528+
529+
530+func db (bO) = ("lastRobberyTime_" + bO)
531+
532+
533+func dc (bO) = ("totalRobberyCountByDuck_" + bO)
534+
535+
536+func dd (av) = ("userRobberyCount_" + av)
537+
538+
539+func de (av) = ("userLastRobberyDay_" + av)
540+
541+
542+func df (bO) = ("totalDeliveryCountByDuck_" + bO)
543+
544+
545+func dg (av) = ("userDeliveryCount_" + av)
546+
547+
548+func dh (av) = ("userLastDeliveryDay_" + av)
549+
550+
551+let di = 10000
552+
553+let dj = 10000
554+
555+let dk = 2000
556+
557+let dl = 10000
558+
559+let dm = 2000
560+
561+let dn = 100000
562+
563+let do = 1000000
564+
565+let dp = 5000000
566+
567+let dq = 10000
568+
569+let dr = 1000000
570+
571+let ds = 1000000
572+
573+let dt = 10000
574+
575+func du (dv) = fraction(cB, pow(dv, 4, cC, 4, 4, DOWN), cA)
576+
577+
578+func dw (dx) = (100 + dx)
579+
580+
581+func dy (dz,dA) = {
582+ let dB = du(dA)
583+[dB, (cD * (dB - dz))]
584+ }
585+
586+
587+func dC (M,bO,dD,dE) = {
588+ let dF = split(valueOrElse(getString(M, cQ(bO)), "0_0_0_0_0"), "_")
589+ let dG = valueOrElse(getInteger(M, cS(bO)), 0)
590+ let dH = valueOrElse(getInteger(M, cP(bO)), dw(dG))
591+ let dI = split(valueOrElse(getString(M, da(bO)), "0_0_0_0_0"), "_")
592+ ([parseIntValue(dF[cF]), parseIntValue(dF[cG]), parseIntValue(dF[cH]), parseIntValue(dF[cI]), parseIntValue(dF[cJ]), dG, dH] ++ (if (dE)
593+ then [dD, dD, dD, dD, dD]
594+ else [parseIntValue(dI[cF]), parseIntValue(dI[cG]), parseIntValue(dI[cH]), parseIntValue(dI[cI]), parseIntValue(dI[cJ])]))
595+ }
596+
597+
598+let dJ = 86400000
599+
600+func dK (av) = ("lastArbTimeUser_" + av)
601+
602+
603+func dL (av) = ("acresStakedAmountByUser_" + av)
604+
605+
606+let dM = {
607+ let g = e
608+ if ((base58'2W' == g))
595609 then addressFromStringValue("3PEktVux2RhchSN63DsDo4b4mz4QqzKSeDv")
596- else if ((base58'2T' == cm))
610+ else if ((base58'2T' == g))
597611 then this
598612 else throw("Unknown chain")
599613 }
600614
601-let dK = {
602- let cm = ck
603- if ((base58'2W' == cm))
615+let dN = {
616+ let g = e
617+ if ((base58'2W' == g))
604618 then addressFromStringValue("3PDVuU45H7Eh5dmtNbnRNRStGwULA7NY6Hb")
605- else if ((base58'2T' == cm))
619+ else if ((base58'2T' == g))
606620 then this
607621 else throw("Unknown chain")
608622 }
609623
610-let dL = 300000
611-
612-let dM = 5000000
613-
614-let dN = 50
615-
616-let dO = 10000000
617-
618-let dP = {
619- let cm = ck
620- if ((base58'2W' == cm))
624+let dO = 300000
625+
626+let dP = 5000000
627+
628+let dQ = 50
629+
630+let dR = 10000000
631+
632+let dS = {
633+ let g = e
634+ if ((base58'2W' == g))
621635 then 252289527462
622- else if ((base58'2T' == cm))
636+ else if ((base58'2T' == g))
623637 then 2522895274
624638 else throw("Unknown chain")
625639 }
626640
627-let dQ = {
628- let cm = ck
629- if ((base58'2W' == cm))
641+let dT = {
642+ let g = e
643+ if ((base58'2W' == g))
630644 then 250000000
631- else if ((base58'2T' == cm))
645+ else if ((base58'2T' == g))
632646 then 250000000
633647 else throw("Unknown chain")
634648 }
635649
636-let dR = 100000
637-
638-let dS = 2500000000
639-
640-let dT = toBigInt(5)
641-
642-let dU = toBigInt(20)
643-
644-let dV = toBigInt((20 * 20))
645-
646-let dW = toBigInt(((20 * 20) * 20))
647-
648-let dX = toBigInt((((20 * 20) * 20) * 20))
649-
650-let dY = toBigInt(((((20 * 20) * 20) * 20) * 20))
651-
652-let dZ = 500
653-
654-func ea () = "nextLandNum"
655-
656-
657-func eb (ec) = ("lcn_" + ec)
658-
659-
660-func ed (ee) = ("la_" + ee)
661-
662-
663-func ef (bg,bn) = ((("ilao_" + bg) + "_") + bn)
664-
665-
666-func eg (ee) = ("lo_" + ee)
667-
668-
669-func eh (ec) = ("duckByCustomName_" + ec)
670-
671-
672-func ei (ec) = ("accountByCustomName_" + ec)
673-
674-
675-func ej () = "oldiesList"
676-
677-
678-func ek () = "nextRoboDuck"
679-
680-
681-let el = 0
682-
683-let em = 1
684-
685-let en = 2
650+let dU = 100000
651+
652+let dV = 2500000000
653+
654+let dW = toBigInt(5)
655+
656+let dX = toBigInt(20)
657+
658+let dY = toBigInt((20 * 20))
659+
660+let dZ = toBigInt(((20 * 20) * 20))
661+
662+let ea = toBigInt((((20 * 20) * 20) * 20))
663+
664+let eb = toBigInt(((((20 * 20) * 20) * 20) * 20))
665+
666+let ec = 500
667+
668+func ed () = "nextLandNum"
669+
670+
671+func ee (ef) = ("lcn_" + ef)
672+
673+
674+func eg (eh) = ("la_" + eh)
675+
676+
677+func ei (bA,ag) = ((("ilao_" + bA) + "_") + ag)
678+
679+
680+func ej (eh) = ("lo_" + eh)
681+
682+
683+func ek (ef) = ("duckByCustomName_" + ef)
684+
685+
686+func el (ef) = ("accountByCustomName_" + ef)
687+
688+
689+func em () = "oldiesList"
690+
691+
692+func en () = "nextRoboDuck"
693+
686694
687695 let eo = 0
688696
689-let ep = 5
690-
691-let eq = 6
692-
693-let er = 7
694-
695-let es = 0
696-
697-let et = 1
698-
699-let eu = 0
700-
701-let ev = 2
702-
703-let ew = 3
704-
705-func ex (ee,du) = ((ap + ee) + du)
706-
707-
708-func ey (ez,eA) = {
709- let eB = if ((ez >= 0))
710- then (((ez + eA) - 1) / eA)
711- else -((((-(ez) + eA) - 1) / eA))
712- (eB * ct)
713- }
714-
715-
716-func eC (eD,eE) = {
717- let eF = (((((eE[0] + eE[1]) + eE[2]) + eE[3]) + eE[4]) + eE[5])
718- if ((0 >= eF))
697+let ep = 1
698+
699+let eq = 2
700+
701+let er = 0
702+
703+let es = 5
704+
705+let et = 6
706+
707+let eu = 7
708+
709+let ev = 0
710+
711+let ew = 1
712+
713+let ex = 0
714+
715+let ey = 2
716+
717+let ez = 3
718+
719+func eA (eh,ar) = ((aI + eh) + ar)
720+
721+
722+func eB (eC,eD) = {
723+ let eE = if ((eC >= 0))
724+ then (((eC + eD) - 1) / eD)
725+ else -((((-(eC) + eD) - 1) / eD))
726+ (eE * o)
727+ }
728+
729+
730+func eF (eG,eH) = {
731+ let eI = (((((eH[0] + eH[1]) + eH[2]) + eH[3]) + eH[4]) + eH[5])
732+ if ((0 >= eI))
719733 then throw("Zero weights sum")
720734 else {
721- let eG = fraction(eD, cs, eF)
722- func eH (eI,eJ) = (eI :+ fraction(eJ, eG, cs))
723-
724- let eK = eE
725- let eL = size(eK)
726- let eM = nil
727- func eN (eO,eP) = if ((eP >= eL))
728- then eO
729- else eH(eO, eK[eP])
730-
731- func eQ (eO,eP) = if ((eP >= eL))
732- then eO
735+ let eJ = fraction(eG, n, eI)
736+ func eK (eL,eM) = (eL :+ fraction(eM, eJ, n))
737+
738+ let eN = eH
739+ let eO = size(eN)
740+ let eP = nil
741+ func eQ (eR,eS) = if ((eS >= eO))
742+ then eR
743+ else eK(eR, eN[eS])
744+
745+ func eT (eR,eS) = if ((eS >= eO))
746+ then eR
733747 else throw("List size exceeds 6")
734748
735- eQ(eN(eN(eN(eN(eN(eN(eM, 0), 1), 2), 3), 4), 5), 6)
736- }
737- }
738-
739-
740-func eR (eD) = {
741- let eS = split(value(getString(dg())), "_")
742- if ((size(eS) != at))
749+ eT(eQ(eQ(eQ(eQ(eQ(eQ(eP, 0), 1), 2), 3), 4), 5), 6)
750+ }
751+ }
752+
753+
754+func eU (eG) = {
755+ let eV = split(value(getString(ac())), "_")
756+ if ((size(eV) != aM))
743757 then throw("Wrong proportions data")
744758 else {
745- let eT = [parseIntValue(eS[0]), parseIntValue(eS[1]), parseIntValue(eS[2]), parseIntValue(eS[3]), parseIntValue(eS[4]), parseIntValue(eS[5])]
746- eC(eD, eT)
747- }
748- }
749-
750-
751-func eU (eV,eW,eX) = {
752- let eY = eR(eX)
753- func eZ (eI,cP) = {
754- let fa = (parseIntValue(eW[cP]) - eY[cP])
755- if ((0 > fa))
756- then throw(((((("Not enough material idx=" + toString(cP)) + ", you have ") + eW[cP]) + ", but need ") + toString(eY[cP])))
757- else (eI :+ toString(fa))
758- }
759-
760- if (eV)
759+ let eW = [parseIntValue(eV[0]), parseIntValue(eV[1]), parseIntValue(eV[2]), parseIntValue(eV[3]), parseIntValue(eV[4]), parseIntValue(eV[5])]
760+ eF(eG, eW)
761+ }
762+ }
763+
764+
765+func eX (eY,eZ,fa) = {
766+ let fb = eU(fa)
767+ func fc (eL,K) = {
768+ let fd = (parseIntValue(eZ[K]) - fb[K])
769+ if ((0 > fd))
770+ then throw(((((("Not enough material idx=" + toString(K)) + ", you have ") + eZ[K]) + ", but need ") + toString(fb[K])))
771+ else (eL :+ toString(fd))
772+ }
773+
774+ if (eY)
761775 then {
762- let eK = cz
763- let eL = size(eK)
764- let eM = nil
765- func eN (eO,eP) = if ((eP >= eL))
766- then eO
767- else eZ(eO, eK[eP])
768-
769- func eQ (eO,eP) = if ((eP >= eL))
770- then eO
776+ let eN = u
777+ let eO = size(eN)
778+ let eP = nil
779+ func eQ (eR,eS) = if ((eS >= eO))
780+ then eR
781+ else fc(eR, eN[eS])
782+
783+ func eT (eR,eS) = if ((eS >= eO))
784+ then eR
771785 else throw("List size exceeds 6")
772786
773- eQ(eN(eN(eN(eN(eN(eN(eM, 0), 1), 2), 3), 4), 5), 6)
774- }
775- else eW
776- }
777-
778-
779-func fb (fc,fd) = if ((fd == ""))
780- then $Tuple3(fc, false, false)
787+ eT(eQ(eQ(eQ(eQ(eQ(eQ(eP, 0), 1), 2), 3), 4), 5), 6)
788+ }
789+ else eZ
790+ }
791+
792+
793+func fe (ff,fg) = if ((fg == ""))
794+ then $Tuple3(ff, false, false)
781795 else {
782- func fe (eI,ff) = {
783- let fg = split(ff, ",")
784- if ((size(fg) != 2))
796+ func fh (eL,fi) = {
797+ let fj = split(fi, ",")
798+ if ((size(fj) != 2))
785799 then throw("Incorrect format, should be index,amount")
786800 else {
787- let cP = parseIntValue(fg[0])
788- if (if ((0 > cP))
801+ let K = parseIntValue(fj[0])
802+ if (if ((0 > K))
789803 then true
790- else (cP >= size(aJ)))
804+ else (K >= size(bd)))
791805 then throw("Unknown product idx")
792806 else {
793- let fh = parseIntValue(fg[1])
794- let fi = split(eI._1, (fg[0] + ":"))
795- if ((size(fi) != 2))
796- then throw((("You don't have " + aG[cP]) + " equipped"))
807+ let fk = parseIntValue(fj[1])
808+ let fl = split(eL._1, (fj[0] + ":"))
809+ if ((size(fl) != 2))
810+ then throw((("You don't have " + ba[K]) + " equipped"))
797811 else {
798- let fj = fi[1]
799- let fk = if (dv(take(drop(fj, 1), 1)))
812+ let fm = fl[1]
813+ let fn = if (as(take(drop(fm, 1), 1)))
800814 then 2
801815 else 1
802- let fl = parseIntValue(take(fj, fk))
803- let fm = drop(fj, fk)
804- let fn = if ((fl >= fh))
805- then (fl - fh)
806- else throw(((((("You equipped " + toString(fl)) + " of ") + aG[cP]) + ", but tried to use ") + toString(fh)))
807- $Tuple3(((((fi[0] + fg[0]) + ":") + toString(fn)) + fm), if (eI._2)
816+ let fo = parseIntValue(take(fm, fn))
817+ let fp = drop(fm, fn)
818+ let fq = if ((fo >= fk))
819+ then (fo - fk)
820+ else throw(((((("You equipped " + toString(fo)) + " of ") + ba[K]) + ", but tried to use ") + toString(fk)))
821+ $Tuple3(((((fl[0] + fj[0]) + ":") + toString(fq)) + fp), if (eL._2)
808822 then true
809- else if (if ((cP >= 6))
810- then (8 >= cP)
823+ else if (if ((K >= 6))
824+ then (8 >= K)
811825 else false)
812- then (fn == 0)
813- else false, if (eI._3)
826+ then (fq == 0)
827+ else false, if (eL._3)
814828 then true
815- else if (if ((cP >= 3))
816- then (5 >= cP)
829+ else if (if ((K >= 3))
830+ then (5 >= K)
817831 else false)
818- then (fh > 0)
832+ then (fk > 0)
819833 else false)
820834 }
821835 }
822836 }
823837 }
824838
825- let eK = split(fd, "_")
826- let eL = size(eK)
827- let eM = $Tuple3(fc, false, false)
828- func eN (eO,eP) = if ((eP >= eL))
829- then eO
830- else fe(eO, eK[eP])
831-
832- func eQ (eO,eP) = if ((eP >= eL))
833- then eO
839+ let eN = split(fg, "_")
840+ let eO = size(eN)
841+ let eP = $Tuple3(ff, false, false)
842+ func eQ (eR,eS) = if ((eS >= eO))
843+ then eR
844+ else fh(eR, eN[eS])
845+
846+ func eT (eR,eS) = if ((eS >= eO))
847+ then eR
834848 else throw("List size exceeds 10")
835849
836- eQ(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eM, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
837- }
838-
839-
840-func fo (fp) = {
841- let fq = if ((fp == ""))
850+ eT(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eP, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
851+ }
852+
853+
854+func fr (fs) = {
855+ let ft = if ((fs == ""))
842856 then nil
843- else split_4C(fp, "_")
844- func fr (eI,cb) = {
845- let fs = (size(eI) / 8)
846- let fl = if ((size(fq) > fs))
847- then parseIntValue(fq[fs])
857+ else split_4C(fs, "_")
858+ func fu (eL,cv) = {
859+ let fv = (size(eL) / 8)
860+ let fo = if ((size(ft) > fv))
861+ then parseIntValue(ft[fv])
848862 else 0
849- (eI + toBytes(fl))
850- }
851-
852- let eK = aJ
853- let eL = size(eK)
854- let eM = base58''
855- func eN (eO,eP) = if ((eP >= eL))
856- then eO
857- else fr(eO, eK[eP])
858-
859- func eQ (eO,eP) = if ((eP >= eL))
860- then eO
863+ (eL + toBytes(fo))
864+ }
865+
866+ let eN = bd
867+ let eO = size(eN)
868+ let eP = base58''
869+ func eQ (eR,eS) = if ((eS >= eO))
870+ then eR
871+ else fu(eR, eN[eS])
872+
873+ func eT (eR,eS) = if ((eS >= eO))
874+ then eR
861875 else throw("List size exceeds 50")
862876
863- eQ(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eM, 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)
864- }
865-
866-
867-func ft (fu) = {
868- func fv (eI,cb) = {
869- let fs = size(eI)
870- let fw = take(drop(fu, (8 * fs)), 8)
871- (eI :+ toString(toInt(fw)))
877+ eT(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eP, 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)
878+ }
879+
880+
881+func fw (fx) = {
882+ func fy (eL,cv) = {
883+ let fv = size(eL)
884+ let fz = take(drop(fx, (8 * fv)), 8)
885+ (eL :+ toString(toInt(fz)))
872886 }
873887
874888 makeString_2C({
875- let eK = aJ
876- let eL = size(eK)
877- let eM = nil
878- func eN (eO,eP) = if ((eP >= eL))
879- then eO
880- else fv(eO, eK[eP])
881-
882- func eQ (eO,eP) = if ((eP >= eL))
883- then eO
889+ let eN = bd
890+ let eO = size(eN)
891+ let eP = nil
892+ func eQ (eR,eS) = if ((eS >= eO))
893+ then eR
894+ else fy(eR, eN[eS])
895+
896+ func eT (eR,eS) = if ((eS >= eO))
897+ then eR
884898 else throw("List size exceeds 50")
885899
886- eQ(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eM, 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)
900+ eT(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eP, 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)
887901 }, "_")
888902 }
889903
890904
891-func fx (fy,fz) = {
892- func fA (eI,fs) = {
893- let fB = if ((size(fy) > (7 + fs)))
894- then fy[(7 + fs)]
905+func fA (fB,fC) = {
906+ func fD (eL,fv) = {
907+ let fE = if ((size(fB) > (7 + fv)))
908+ then fB[(7 + fv)]
895909 else 0
896- if ((parseIntValue(fz[fs]) > (fy[fs] + fB)))
897- then throw(("Requirement not satisfied: " + i[fs]))
910+ if ((parseIntValue(fC[fv]) > (fB[fv] + fE)))
911+ then throw(("Requirement not satisfied: " + cE[fv]))
898912 else true
899913 }
900914
901- let eK = [0, 1, 2, 3, 4, 5, 6]
902- let eL = size(eK)
903- let eM = false
904- func eN (eO,eP) = if ((eP >= eL))
905- then eO
906- else fA(eO, eK[eP])
907-
908- func eQ (eO,eP) = if ((eP >= eL))
909- then eO
915+ let eN = [0, 1, 2, 3, 4, 5, 6]
916+ let eO = size(eN)
917+ let eP = false
918+ func eQ (eR,eS) = if ((eS >= eO))
919+ then eR
920+ else fD(eR, eN[eS])
921+
922+ func eT (eR,eS) = if ((eS >= eO))
923+ then eR
910924 else throw("List size exceeds 7")
911925
912- eQ(eN(eN(eN(eN(eN(eN(eN(eM, 0), 1), 2), 3), 4), 5), 6), 7)
913- }
914-
915-
916-func fC (fD,fq,fE,fF,fG,fH,fy) = {
917- let fg = split(fD, ":")
918- if ((size(fg) != 2))
926+ eT(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eP, 0), 1), 2), 3), 4), 5), 6), 7)
927+ }
928+
929+
930+func fF (fG,ft,fH,fI,fJ,fK,fB) = {
931+ let fj = split(fG, ":")
932+ if ((size(fj) != 2))
919933 then throw("Incorrect format, should be index:amount")
920- else if (if (!(fE))
921- then (size(fg[0]) != 2)
934+ else if (if (!(fH))
935+ then (size(fj[0]) != 2)
922936 else false)
923937 then throw("Product idx should be 2 digits, zero padded")
924938 else {
925- let fI = parseIntValue(fg[0])
926- let fJ = parseIntValue(fg[1])
927- if (if ((0 > fI))
939+ let fL = parseIntValue(fj[0])
940+ let fM = parseIntValue(fj[1])
941+ if (if ((0 > fL))
928942 then true
929- else (fI >= size(aJ)))
943+ else (fL >= size(bd)))
930944 then throw("Unknown product idx")
931- else if ((0 > fJ))
945+ else if ((0 > fM))
932946 then throw("Count can't be negative")
933- else if ((fJ > s))
934- then throw(((("Can't put more than " + toString(s)) + " of ") + aG[fI]))
935- else if ((fJ == 0))
936- then $Tuple2(fq, false)
947+ else if ((fM > cO))
948+ then throw(((("Can't put more than " + toString(cO)) + " of ") + ba[fL]))
949+ else if ((fM == 0))
950+ then $Tuple2(ft, false)
937951 else {
938- let fK = take(fq, (8 * fI))
939- let fl = toInt(take(drop(fq, (8 * fI)), 8))
940- let fm = drop(fq, (8 * (fI + 1)))
941- let cb = split(aJ[fI], "_")
942- if (if (!(fE))
943- then (fJ > fl)
952+ let fN = take(ft, (8 * fL))
953+ let fo = toInt(take(drop(ft, (8 * fL)), 8))
954+ let fp = drop(ft, (8 * (fL + 1)))
955+ let cv = split(bd[fL], "_")
956+ if (if (!(fH))
957+ then (fM > fo)
944958 else false)
945- then throw(((((("You have " + toString(fl)) + " of ") + aG[fI]) + ", but tried to use ") + toString(fJ)))
959+ then throw(((((("You have " + toString(fo)) + " of ") + ba[fL]) + ", but tried to use ") + toString(fM)))
946960 else {
947- let fL = if (if (!(fE))
948- then fx(fy, split(cb[aM], ","))
961+ let fO = if (if (!(fH))
962+ then fA(fB, split(cv[bg], ","))
949963 else false)
950964 then {
951- let fM = cb[aN]
952- if ((fM == ""))
965+ let fP = cv[bh]
966+ if ((fP == ""))
953967 then throw("Item cannot be equipped")
954968 else {
955- let fN = parseIntValue(fM)
956- let fO = (fN / 100)
957- if ((fF != fO))
969+ let fQ = parseIntValue(fP)
970+ let fR = (fQ / 100)
971+ if ((fI != fR))
958972 then throw("Segment incompatible")
959973 else {
960- let fP = ((fN % 100) / 10)
961- if ((fG != fP))
974+ let fS = ((fQ % 100) / 10)
975+ if ((fJ != fS))
962976 then throw("Slot incompatible")
963977 else {
964- let fQ = (fN % 10)
965- if (if ((fH != 0))
966- then (fQ > 1)
978+ let fT = (fQ % 10)
979+ if (if ((fK != 0))
980+ then (fT > 1)
967981 else false)
968982 then throw("Big items should occupy slot 0")
969- else (fQ > 1)
983+ else (fT > 1)
970984 }
971985 }
972986 }
973987 }
974988 else false
975- $Tuple2(((fK + toBytes((fl + (if (fE)
976- then fJ
977- else -(fJ))))) + fm), fL)
989+ $Tuple2(((fN + toBytes((fo + (if (fH)
990+ then fM
991+ else -(fM))))) + fp), fO)
978992 }
979993 }
980994 }
981995 }
982996
983997
984-func fR (fS,fT,fE,fF,fG,fU) = if ((fS != ""))
998+func fU (fV,fW,fH,fI,fJ,fX) = if ((fV != ""))
985999 then {
986- let fV = split(fS, ",")
987- if ((size(fV) > r))
1000+ let fY = split(fV, ",")
1001+ if ((size(fY) > cN))
9881002 then throw("Wrong slots format")
9891003 else {
990- let fW = fV[0]
991- let fX = if ((size(fV) > 1))
992- then fV[1]
1004+ let fZ = fY[0]
1005+ let ga = if ((size(fY) > 1))
1006+ then fY[1]
9931007 else ""
994- if (if ((fW == ""))
995- then (fX == "")
1008+ if (if ((fZ == ""))
1009+ then (ga == "")
9961010 else false)
997- then fT
1011+ then fW
9981012 else {
999- let fY = if ((fW != ""))
1000- then fC(fW, fT, fE, fF, fG, 0, fU)
1001- else $Tuple2(fT, false)
1002- if ((fX != ""))
1003- then if (fY._2)
1013+ let gb = if ((fZ != ""))
1014+ then fF(fZ, fW, fH, fI, fJ, 0, fX)
1015+ else $Tuple2(fW, false)
1016+ if ((ga != ""))
1017+ then if (gb._2)
10041018 then throw("Big item already occupies slot")
1005- else fC(fX, fY._1, fE, fF, fG, 1, fU)._1
1006- else fY._1
1019+ else fF(ga, gb._1, fH, fI, fJ, 1, fX)._1
1020+ else gb._1
10071021 }
10081022 }
10091023 }
1010- else fT
1011-
1012-
1013-func fZ (ga,gb,fE,fU) = {
1014- func fF (eI,gc) = {
1015- let fs = eI._1
1016- let fG = split(gc, ";")
1017- if ((size(fG) != q))
1024+ else fW
1025+
1026+
1027+func gc (gd,ge,fH,fX) = {
1028+ func fI (eL,gf) = {
1029+ let fv = eL._1
1030+ let fJ = split(gf, ";")
1031+ if ((size(fJ) != cM))
10181032 then throw("Wrong segment format")
10191033 else {
1020- let gd = fG[0]
1021- let ge = fG[1]
1022- if (if ((gd == ""))
1023- then (ge == "")
1034+ let gg = fJ[0]
1035+ let gh = fJ[1]
1036+ if (if ((gg == ""))
1037+ then (gh == "")
10241038 else false)
1025- then $Tuple2((fs + 1), eI._2)
1039+ then $Tuple2((fv + 1), eL._2)
10261040 else {
1027- let gf = fR(gd, eI._2, fE, fs, 0, fU)
1028- $Tuple2((fs + 1), fR(ge, gf, fE, fs, 1, fU))
1041+ let gi = fU(gg, eL._2, fH, fv, 0, fX)
1042+ $Tuple2((fv + 1), fU(gh, gi, fH, fv, 1, fX))
10291043 }
10301044 }
10311045 }
10321046
1033-( let eK = ga
1034- let eL = size(eK)
1035- let eM = $Tuple2(0, gb)
1036- func eN (eO,eP) = if ((eP >= eL))
1037- then eO
1038- else fF(eO, eK[eP])
1039-
1040- func eQ (eO,eP) = if ((eP >= eL))
1041- then eO
1047+( let eN = gd
1048+ let eO = size(eN)
1049+ let eP = $Tuple2(0, ge)
1050+ func eQ (eR,eS) = if ((eS >= eO))
1051+ then eR
1052+ else fI(eR, eN[eS])
1053+
1054+ func eT (eR,eS) = if ((eS >= eO))
1055+ then eR
10421056 else throw("List size exceeds 6")
10431057
1044- eQ(eN(eN(eN(eN(eN(eN(eM, 0), 1), 2), 3), 4), 5), 6))._2
1045- }
1046-
1047-
1048-func gg (u) = {
1049- let gh = z(u)
1050- let gi = split(valueOrElse(getString(gh), ",;,_,;,_,;,_,;,_,;,_,;,"), "_")
1051- let gj = base64'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=='
1052- let gk = fZ(gi, gj, true, nil)
1053- let gl = split(gi[o], ";")[1]
1054- let aj = if ((gl == ""))
1058+ eT(eQ(eQ(eQ(eQ(eQ(eQ(eP, 0), 1), 2), 3), 4), 5), 6))._2
1059+ }
1060+
1061+
1062+func gj (bO) = {
1063+ let gk = cU(bO)
1064+ let gl = split(valueOrElse(getString(gk), ",;,_,;,_,;,_,;,_,;,_,;,"), "_")
1065+ let gm = base64'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=='
1066+ let gn = gc(gl, gm, true, nil)
1067+ let go = split(gl[cK], ";")[1]
1068+ let dD = if ((go == ""))
10551069 then 0
10561070 else {
1057- let gm = split(gl, ",")[0]
1058- if ((gm == ""))
1071+ let gp = split(go, ",")[0]
1072+ if ((gp == ""))
10591073 then 0
10601074 else {
1061- let fD = split(gm, ":")
1062- let cP = fD[0]
1063- let gn = fD[1]
1064- if (if (if (if (if ((cP == "06"))
1075+ let fG = split(gp, ":")
1076+ let K = fG[0]
1077+ let gq = fG[1]
1078+ if (if (if (if (if ((K == "06"))
10651079 then true
1066- else (cP == "07"))
1080+ else (K == "07"))
10671081 then true
1068- else (cP == "08"))
1069- then (gn != "")
1082+ else (K == "08"))
1083+ then (gq != "")
10701084 else false)
1071- then (parseIntValue(gn) > 0)
1085+ then (parseIntValue(gq) > 0)
10721086 else false)
1073- then parseIntValue(split(aJ[parseIntValue(cP)], "_")[aL])
1087+ then parseIntValue(split(bd[parseIntValue(K)], "_")[bf])
10741088 else 0
10751089 }
10761090 }
1077- let fU = ah(this, u, aj, true)
1078- let go = fZ(gi, gk, false, fU)
1079- (go == go)
1080- }
1081-
1082-
1083-func gp (gq,gr,gs,gt) = if ((size(gq) != at))
1091+ let fX = dC(this, bO, dD, true)
1092+ let gr = gc(gl, gn, false, fX)
1093+ (gr == gr)
1094+ }
1095+
1096+
1097+func gs (gt,gu,gv,gw) = if ((size(gt) != aM))
10841098 then throw("Wrong proportions data")
10851099 else {
1086- func gu (eI,gv) = {
1087- let fa = (parseIntValue(gq[gv]) + ((gt * gr[gv]) * gs))
1088- if ((0 > fa))
1089- then throw(((((((("Panic! Pieces of type=" + toString(gv)) + ", sign=") + toString(gt)) + ", terrainCounts[i]=") + toString(gr[gv])) + ", landSizeIndex=") + toString(gs)))
1090- else (eI :+ toString(fa))
1091- }
1092-
1093- let eK = cz
1094- let eL = size(eK)
1095- let eM = nil
1096- func eN (eO,eP) = if ((eP >= eL))
1097- then eO
1098- else gu(eO, eK[eP])
1099-
1100- func eQ (eO,eP) = if ((eP >= eL))
1101- then eO
1100+ func gx (eL,gy) = {
1101+ let fd = (parseIntValue(gt[gy]) + ((gw * gu[gy]) * gv))
1102+ if ((0 > fd))
1103+ then throw(((((((("Panic! Pieces of type=" + toString(gy)) + ", sign=") + toString(gw)) + ", terrainCounts[i]=") + toString(gu[gy])) + ", landSizeIndex=") + toString(gv)))
1104+ else (eL :+ toString(fd))
1105+ }
1106+
1107+ let eN = u
1108+ let eO = size(eN)
1109+ let eP = nil
1110+ func eQ (eR,eS) = if ((eS >= eO))
1111+ then eR
1112+ else gx(eR, eN[eS])
1113+
1114+ func eT (eR,eS) = if ((eS >= eO))
1115+ then eR
11021116 else throw("List size exceeds 6")
11031117
1104- eQ(eN(eN(eN(eN(eN(eN(eM, 0), 1), 2), 3), 4), 5), 6)
1105- }
1106-
1107-
1108-func gw (gr,gs,gt) = {
1109- let gq = split(valueOrElse(getString(dg()), "0_0_0_0_0_0"), "_")
1110- makeString(gp(gq, gr, gs, gt), "_")
1111- }
1112-
1113-
1114-func gx (gy) = [(size(split(gy, "A")) - 1), (size(split(gy, "B")) - 1), (size(split(gy, "C")) - 1), (size(split(gy, "D")) - 1), (size(split(gy, "E")) - 1), (size(split(gy, "F")) - 1)]
1115-
1116-
1117-func gz (gA,gr,gB,gs,gC) = {
1118- func gD (eI,gv) = {
1119- let gE = ((fraction(gB, gC, a) * gr[gv]) * gs)
1120- (eI :+ toString((parseIntValue(gA[gv]) + gE)))
1121- }
1122-
1123- let eT = {
1124- let eK = cz
1125- let eL = size(eK)
1126- let eM = nil
1127- func eN (eO,eP) = if ((eP >= eL))
1128- then eO
1129- else gD(eO, eK[eP])
1130-
1131- func eQ (eO,eP) = if ((eP >= eL))
1132- then eO
1118+ eT(eQ(eQ(eQ(eQ(eQ(eQ(eP, 0), 1), 2), 3), 4), 5), 6)
1119+ }
1120+
1121+
1122+func gz (gu,gv,gw) = {
1123+ let gt = split(valueOrElse(getString(ac()), "0_0_0_0_0_0"), "_")
1124+ makeString(gs(gt, gu, gv, gw), "_")
1125+ }
1126+
1127+
1128+func gA (gB) = [(size(split(gB, "A")) - 1), (size(split(gB, "B")) - 1), (size(split(gB, "C")) - 1), (size(split(gB, "D")) - 1), (size(split(gB, "E")) - 1), (size(split(gB, "F")) - 1)]
1129+
1130+
1131+func gC (gD,gu,gE,gv,gF) = {
1132+ func gG (eL,gy) = {
1133+ let gH = ((fraction(gE, gF, dJ) * gu[gy]) * gv)
1134+ (eL :+ toString((parseIntValue(gD[gy]) + gH)))
1135+ }
1136+
1137+ let eW = {
1138+ let eN = u
1139+ let eO = size(eN)
1140+ let eP = nil
1141+ func eQ (eR,eS) = if ((eS >= eO))
1142+ then eR
1143+ else gG(eR, eN[eS])
1144+
1145+ func eT (eR,eS) = if ((eS >= eO))
1146+ then eR
11331147 else throw("List size exceeds 6")
11341148
1135- eQ(eN(eN(eN(eN(eN(eN(eM, 0), 1), 2), 3), 4), 5), 6)
1136- }
1137- makeString(eT, "_")
1138- }
1139-
1140-
1141-func gF (gr,gB,gs,gC) = {
1142- func gD (eI,gv) = {
1143- let gE = ((fraction(gB, gC, a) * gr[gv]) * gs)
1144- $Tuple2((eI._1 :+ gE), (eI._2 + gE))
1145- }
1146-
1147- let eK = cz
1148- let eL = size(eK)
1149- let eM = $Tuple2(nil, 0)
1150- func eN (eO,eP) = if ((eP >= eL))
1151- then eO
1152- else gD(eO, eK[eP])
1153-
1154- func eQ (eO,eP) = if ((eP >= eL))
1155- then eO
1149+ eT(eQ(eQ(eQ(eQ(eQ(eQ(eP, 0), 1), 2), 3), 4), 5), 6)
1150+ }
1151+ makeString(eW, "_")
1152+ }
1153+
1154+
1155+func gI (gD,gu,gE,gv,gF) = {
1156+ func gG (eL,gy) = {
1157+ let gH = ((fraction(gE, gF, dJ) * gu[gy]) * gv)
1158+ let gJ = (parseIntValue(gD[gy]) + gH)
1159+ $Tuple2((eL._1 :+ gJ), (eL._2 + gJ))
1160+ }
1161+
1162+ let eN = u
1163+ let eO = size(eN)
1164+ let eP = $Tuple2(nil, 0)
1165+ func eQ (eR,eS) = if ((eS >= eO))
1166+ then eR
1167+ else gG(eR, eN[eS])
1168+
1169+ func eT (eR,eS) = if ((eS >= eO))
1170+ then eR
11561171 else throw("List size exceeds 6")
11571172
1158- eQ(eN(eN(eN(eN(eN(eN(eM, 0), 1), 2), 3), 4), 5), 6)
1159- }
1160-
1161-
1162-func gG (gH,gI,gJ,gK) = {
1163- let gL = gJ._1
1164- let gM = gJ._2
1165- if ((gM == 0))
1166- then $Tuple2(makeString(gH, "_"), makeString(gI, "_"))
1167- else if ((gK >= gM))
1173+ eT(eQ(eQ(eQ(eQ(eQ(eQ(eP, 0), 1), 2), 3), 4), 5), 6)
1174+ }
1175+
1176+
1177+func gK (gu,gE,gv,gF) = {
1178+ func gG (eL,gL) = {
1179+ let gH = ((fraction(gE, gF, dJ) * gL) * gv)
1180+ $Tuple2((eL._1 :+ gH), (eL._2 + gH))
1181+ }
1182+
1183+ let eN = gu
1184+ let eO = size(eN)
1185+ let eP = $Tuple2(nil, 0)
1186+ func eQ (eR,eS) = if ((eS >= eO))
1187+ then eR
1188+ else gG(eR, eN[eS])
1189+
1190+ func eT (eR,eS) = if ((eS >= eO))
1191+ then eR
1192+ else throw("List size exceeds 6")
1193+
1194+ eT(eQ(eQ(eQ(eQ(eQ(eQ(eP, 0), 1), 2), 3), 4), 5), 6)
1195+ }
1196+
1197+
1198+func gM (gN,gO,gP,gQ) = {
1199+ let gR = gP._1
1200+ let gS = gP._2
1201+ if ((gS == 0))
1202+ then $Tuple2(makeString(gN, "_"), makeString(gO, "_"))
1203+ else if ((gQ >= gS))
11681204 then {
1169- func gN (eI,gv) = (eI :+ toString((parseIntValue(gH[gv]) + gL[gv])))
1170-
1171- let eT = {
1172- let eK = cz
1173- let eL = size(eK)
1174- let eM = nil
1175- func eN (eO,eP) = if ((eP >= eL))
1176- then eO
1177- else gN(eO, eK[eP])
1178-
1179- func eQ (eO,eP) = if ((eP >= eL))
1180- then eO
1205+ func gT (eL,gy) = (eL :+ toString((parseIntValue(gN[gy]) + gR[gy])))
1206+
1207+ let eW = {
1208+ let eN = u
1209+ let eO = size(eN)
1210+ let eP = nil
1211+ func eQ (eR,eS) = if ((eS >= eO))
1212+ then eR
1213+ else gT(eR, eN[eS])
1214+
1215+ func eT (eR,eS) = if ((eS >= eO))
1216+ then eR
11811217 else throw("List size exceeds 6")
11821218
1183- eQ(eN(eN(eN(eN(eN(eN(eM, 0), 1), 2), 3), 4), 5), 6)
1219+ eT(eQ(eQ(eQ(eQ(eQ(eQ(eP, 0), 1), 2), 3), 4), 5), 6)
11841220 }
1185- $Tuple2(makeString(eT, "_"), makeString(gI, "_"))
1221+ $Tuple2(makeString(eW, "_"), makeString(gO, "_"))
11861222 }
11871223 else {
1188- func gO (eI,gv) = {
1189- let gP = fraction(gL[gv], gK, gM)
1190- $Tuple2((eI._1 :+ toString((parseIntValue(gH[gv]) + gP))), (eI._2 :+ toString(((parseIntValue(gI[gv]) + gL[gv]) - gP))))
1224+ func gU (eL,gy) = {
1225+ let gV = fraction(gR[gy], gQ, gS)
1226+ $Tuple2((eL._1 :+ toString((parseIntValue(gN[gy]) + gV))), (eL._2 :+ toString(((parseIntValue(gO[gy]) + gR[gy]) - gV))))
11911227 }
11921228
1193- let eT = {
1194- let eK = cz
1195- let eL = size(eK)
1196- let eM = $Tuple2(nil, nil)
1197- func eN (eO,eP) = if ((eP >= eL))
1198- then eO
1199- else gO(eO, eK[eP])
1200-
1201- func eQ (eO,eP) = if ((eP >= eL))
1202- then eO
1229+ let eW = {
1230+ let eN = u
1231+ let eO = size(eN)
1232+ let eP = $Tuple2(nil, nil)
1233+ func eQ (eR,eS) = if ((eS >= eO))
1234+ then eR
1235+ else gU(eR, eN[eS])
1236+
1237+ func eT (eR,eS) = if ((eS >= eO))
1238+ then eR
12031239 else throw("List size exceeds 6")
12041240
1205- eQ(eN(eN(eN(eN(eN(eN(eM, 0), 1), 2), 3), 4), 5), 6)
1241+ eT(eQ(eQ(eQ(eQ(eQ(eQ(eP, 0), 1), 2), 3), 4), 5), 6)
12061242 }
1207- $Tuple2(makeString(eT._1, "_"), makeString(eT._2, "_"))
1243+ $Tuple2(makeString(eW._1, "_"), makeString(eW._2, "_"))
12081244 }
12091245 }
12101246
12111247
1212-func gQ (gR) = if ((gR >= toBigInt(0)))
1213- then gR
1214- else -(gR)
1215-
1216-
1217-let gS = [[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]]
1218-
1219-func gT (dp,gU) = {
1220- let gV = toInt((dp % dU))
1221- let gW = if ((gU[0] > gV))
1248+func gW (gX) = if ((gX >= toBigInt(0)))
1249+ then gX
1250+ else -(gX)
1251+
1252+
1253+let gY = [[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]]
1254+
1255+func gZ (am,ha) = {
1256+ let hb = toInt((am % dX))
1257+ let hc = if ((ha[0] > hb))
12221258 then "A"
1223- else if ((gU[1] > gV))
1259+ else if ((ha[1] > hb))
12241260 then "B"
1225- else if ((gU[2] > gV))
1261+ else if ((ha[2] > hb))
12261262 then "C"
1227- else if ((gU[3] > gV))
1263+ else if ((ha[3] > hb))
12281264 then "D"
1229- else if ((gU[4] > gV))
1265+ else if ((ha[4] > hb))
12301266 then "E"
12311267 else "F"
1232- gW
1233- }
1234-
1235-
1236-func gX (gY,gZ) = {
1237- let ha = gS[gZ]
1238- func hb (eI,eJ) = $Tuple2((((((eI._1 + gT(eI._2, ha)) + gT((eI._2 / dU), ha)) + gT((eI._2 / dV), ha)) + gT((eI._2 / dW), ha)) + gT((eI._2 / dX), ha)), (eI._2 / dY))
1239-
1240- let hc = {
1241- let eK = [1, 2, 3, 4, 5]
1242- let eL = size(eK)
1243- let eM = $Tuple2("", (gY / dT))
1244- func eN (eO,eP) = if ((eP >= eL))
1245- then eO
1246- else hb(eO, eK[eP])
1247-
1248- func eQ (eO,eP) = if ((eP >= eL))
1249- then eO
1268+ hc
1269+ }
1270+
1271+
1272+func hd (he,hf) = {
1273+ let hg = gY[hf]
1274+ func hh (eL,eM) = $Tuple2((((((eL._1 + gZ(eL._2, hg)) + gZ((eL._2 / dX), hg)) + gZ((eL._2 / dY), hg)) + gZ((eL._2 / dZ), hg)) + gZ((eL._2 / ea), hg)), (eL._2 / eb))
1275+
1276+ let hi = {
1277+ let eN = [1, 2, 3, 4, 5]
1278+ let eO = size(eN)
1279+ let eP = $Tuple2("", (he / dW))
1280+ func eQ (eR,eS) = if ((eS >= eO))
1281+ then eR
1282+ else hh(eR, eN[eS])
1283+
1284+ func eT (eR,eS) = if ((eS >= eO))
1285+ then eR
12501286 else throw("List size exceeds 5")
12511287
1252- eQ(eN(eN(eN(eN(eN(eM, 0), 1), 2), 3), 4), 5)
1253- }
1254- hc._1
1255- }
1256-
1257-
1258-let hd = [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]
1259-
1260-let he = ["A", "B", "C", "D", "E", "F"]
1261-
1262-func hf (hg,gs) = {
1263- func hh (eI,dn) = {
1264- let fs = eI._2
1265- let hi = parseIntValue(dn)
1266- let gR = if ((hi == 0))
1288+ eT(eQ(eQ(eQ(eQ(eQ(eP, 0), 1), 2), 3), 4), 5)
1289+ }
1290+ hi._1
1291+ }
1292+
1293+
1294+let hj = [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]
1295+
1296+let hk = ["A", "B", "C", "D", "E", "F"]
1297+
1298+func hl (hm,gv) = {
1299+ func hn (eL,ak) = {
1300+ let fv = eL._2
1301+ let ho = parseIntValue(ak)
1302+ let gX = if ((ho == 0))
12671303 then 0
1268- else if ((hi >= (4 * gs)))
1269- then (hi / gs)
1270- else if ((hi > (3 * gs)))
1304+ else if ((ho >= (4 * gv)))
1305+ then (ho / gv)
1306+ else if ((ho > (3 * gv)))
12711307 then 3
1272- else (((hi - 1) / gs) + 1)
1273- $Tuple3((eI._1 :+ gR), (eI._2 + 1), (eI._3 + gR))
1274- }
1275-
1276- let hc = {
1277- let eK = hg
1278- let eL = size(eK)
1279- let eM = $Tuple3(nil, 0, 0)
1280- func eN (eO,eP) = if ((eP >= eL))
1281- then eO
1282- else hh(eO, eK[eP])
1283-
1284- func eQ (eO,eP) = if ((eP >= eL))
1285- then eO
1308+ else (((ho - 1) / gv) + 1)
1309+ $Tuple3((eL._1 :+ gX), (eL._2 + 1), (eL._3 + gX))
1310+ }
1311+
1312+ let hi = {
1313+ let eN = hm
1314+ let eO = size(eN)
1315+ let eP = $Tuple3(nil, 0, 0)
1316+ func eQ (eR,eS) = if ((eS >= eO))
1317+ then eR
1318+ else hn(eR, eN[eS])
1319+
1320+ func eT (eR,eS) = if ((eS >= eO))
1321+ then eR
12861322 else throw("List size exceeds 6")
12871323
1288- eQ(eN(eN(eN(eN(eN(eN(eM, 0), 1), 2), 3), 4), 5), 6)
1289- }
1290- let hj = hc._1
1291- let hk = value(indexOf(hj, max(hj)))
1292- let hl = (hc._3 - 25)
1293- func hm (eI,cP) = {
1294- let dz = if ((cP == hk))
1295- then (hj[cP] - hl)
1296- else hj[cP]
1297- let dD = if ((dz == 0))
1324+ eT(eQ(eQ(eQ(eQ(eQ(eQ(eP, 0), 1), 2), 3), 4), 5), 6)
1325+ }
1326+ let hp = hi._1
1327+ let hq = value(indexOf(hp, max(hp)))
1328+ let hr = (hi._3 - 25)
1329+ func hs (eL,K) = {
1330+ let ax = if ((K == hq))
1331+ then (hp[K] - hr)
1332+ else hp[K]
1333+ let aB = if ((ax == 0))
12981334 then nil
1299- else split(drop(toString(pow(10, 0, dz, 0, 0, DOWN)), 1), "")
1300- let fN = he[cP]
1301- func hn (ho,hp) = (ho :+ fN)
1302-
1303- let hq = {
1304- let eK = dD
1305- let eL = size(eK)
1306- let eM = nil
1307- func hr (eO,eP) = if ((eP >= eL))
1308- then eO
1309- else hn(eO, eK[eP])
1310-
1311- func hs (eO,eP) = if ((eP >= eL))
1312- then eO
1335+ else split(drop(toString(pow(10, 0, ax, 0, 0, DOWN)), 1), "")
1336+ let fQ = hk[K]
1337+ func ht (hu,hv) = (hu :+ fQ)
1338+
1339+ let hw = {
1340+ let eN = aB
1341+ let eO = size(eN)
1342+ let eP = nil
1343+ func hx (eR,eS) = if ((eS >= eO))
1344+ then eR
1345+ else ht(eR, eN[eS])
1346+
1347+ func hy (eR,eS) = if ((eS >= eO))
1348+ then eR
13131349 else throw("List size exceeds 25")
13141350
1315- hs(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(eM, 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)
1316- }
1317- (eI ++ hq)
1318- }
1319-
1320- let eT = {
1321- let eK = cz
1322- let eL = size(eK)
1323- let eM = nil
1324- func hr (eO,eP) = if ((eP >= eL))
1325- then eO
1326- else hm(eO, eK[eP])
1327-
1328- func hs (eO,eP) = if ((eP >= eL))
1329- then eO
1351+ hy(hx(hx(hx(hx(hx(hx(hx(hx(hx(hx(hx(hx(hx(hx(hx(hx(hx(hx(hx(hx(hx(hx(hx(hx(hx(eP, 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)
1352+ }
1353+ (eL ++ hw)
1354+ }
1355+
1356+ let eW = {
1357+ let eN = u
1358+ let eO = size(eN)
1359+ let eP = nil
1360+ func hx (eR,eS) = if ((eS >= eO))
1361+ then eR
1362+ else hs(eR, eN[eS])
1363+
1364+ func hy (eR,eS) = if ((eS >= eO))
1365+ then eR
13301366 else throw("List size exceeds 6")
13311367
1332- hs(hr(hr(hr(hr(hr(hr(eM, 0), 1), 2), 3), 4), 5), 6)
1333- }
1334- func ht (eI,fs) = (eI + eT[fs])
1335-
1336- let eK = hd
1337- let eL = size(eK)
1338- let eM = ""
1339- func hu (eO,eP) = if ((eP >= eL))
1340- then eO
1341- else ht(eO, eK[eP])
1342-
1343- func hv (eO,eP) = if ((eP >= eL))
1344- then eO
1368+ hy(hx(hx(hx(hx(hx(hx(eP, 0), 1), 2), 3), 4), 5), 6)
1369+ }
1370+ func hz (eL,fv) = (eL + eW[fv])
1371+
1372+ let eN = hj
1373+ let eO = size(eN)
1374+ let eP = ""
1375+ func hA (eR,eS) = if ((eS >= eO))
1376+ then eR
1377+ else hz(eR, eN[eS])
1378+
1379+ func hB (eR,eS) = if ((eS >= eO))
1380+ then eR
13451381 else throw("List size exceeds 25")
13461382
1347- hv(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(eM, 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)
1348- }
1349-
1350-
1351-func hw (hx) = {
1352- let hy = split(valueOrElse(getString(hx), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
1353-[toString(valueOrElse(parseInt(hy[aY]), 0)), if ((size(split(hy[aZ], "_")) == at))
1354- then hy[aZ]
1355- else "0_0_0_0_0_0", if ((size(split(hy[ba], "_")) == at))
1356- then hy[ba]
1357- else "0_0_0_0_0_0", hy[bb]]
1358- }
1359-
1360-
1361-func hz (hA) = {
1362- let fg = split(hA, "_")
1363- ((aw * (parseIntValue(fg[1]) + 1)) * parseIntValue(fg[0]))
1364- }
1365-
1366-
1367-func hB (hC) = {
1368- let hD = hC[aS]
1369- func hE (eI,hF) = (eI + parseIntValue(hF))
1370-
1371- func hG (eI,hF) = {
1372- let cP = eI._1
1373- let eB = (((parseIntValue(hF) + aO) - 1) / aO)
1374- $Tuple2((cP + 1), (eI._2 + (eB * ct)))
1375- }
1376-
1377- let hH = {
1378- let eK = split(hC[aQ], "_")
1379- let eL = size(eK)
1380- let eM = 0
1381- func eN (eO,eP) = if ((eP >= eL))
1382- then eO
1383- else hE(eO, eK[eP])
1384-
1385- func eQ (eO,eP) = if ((eP >= eL))
1386- then eO
1383+ hB(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(eP, 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)
1384+ }
1385+
1386+
1387+func hC (hD) = {
1388+ let hE = split(valueOrElse(getString(hD), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
1389+[toString(valueOrElse(parseInt(hE[bs]), 0)), if ((size(split(hE[bt], "_")) == aM))
1390+ then hE[bt]
1391+ else "0_0_0_0_0_0", if ((size(split(hE[bu], "_")) == aM))
1392+ then hE[bu]
1393+ else "0_0_0_0_0_0", hE[bv]]
1394+ }
1395+
1396+
1397+func hF (hG) = {
1398+ let fj = split(hG, "_")
1399+ ((aP * (parseIntValue(fj[1]) + 1)) * parseIntValue(fj[0]))
1400+ }
1401+
1402+
1403+func hH (hI) = {
1404+ let hJ = hI[bm]
1405+ func hK (eL,hL) = (eL + parseIntValue(hL))
1406+
1407+ func hM (eL,hL) = {
1408+ let K = eL._1
1409+ let eE = (((parseIntValue(hL) + bi) - 1) / bi)
1410+ $Tuple2((K + 1), (eL._2 + (eE * o)))
1411+ }
1412+
1413+ let hN = {
1414+ let eN = split(hI[bk], "_")
1415+ let eO = size(eN)
1416+ let eP = 0
1417+ func eQ (eR,eS) = if ((eS >= eO))
1418+ then eR
1419+ else hK(eR, eN[eS])
1420+
1421+ func eT (eR,eS) = if ((eS >= eO))
1422+ then eR
13871423 else throw("List size exceeds 6")
13881424
1389- eQ(eN(eN(eN(eN(eN(eN(eM, 0), 1), 2), 3), 4), 5), 6)
1390- }
1391- let hI = {
1392- let eK = split(hC[aR], "_")
1393- let eL = size(eK)
1394- let eM = 0
1395- func hr (eO,eP) = if ((eP >= eL))
1396- then eO
1397- else hE(eO, eK[eP])
1398-
1399- func hs (eO,eP) = if ((eP >= eL))
1400- then eO
1425+ eT(eQ(eQ(eQ(eQ(eQ(eQ(eP, 0), 1), 2), 3), 4), 5), 6)
1426+ }
1427+ let hO = {
1428+ let eN = split(hI[bl], "_")
1429+ let eO = size(eN)
1430+ let eP = 0
1431+ func hx (eR,eS) = if ((eS >= eO))
1432+ then eR
1433+ else hK(eR, eN[eS])
1434+
1435+ func hy (eR,eS) = if ((eS >= eO))
1436+ then eR
14011437 else throw("List size exceeds 6")
14021438
1403- hs(hr(hr(hr(hr(hr(hr(eM, 0), 1), 2), 3), 4), 5), 6)
1404- }
1405- let hJ = if ((hD == ""))
1439+ hy(hx(hx(hx(hx(hx(hx(eP, 0), 1), 2), 3), 4), 5), 6)
1440+ }
1441+ let hP = if ((hJ == ""))
14061442 then 0
1407- else ( let eK = split_4C(hD, "_")
1408- let eL = size(eK)
1409- let eM = $Tuple2(0, 0)
1410- func hu (eO,eP) = if ((eP >= eL))
1411- then eO
1412- else hG(eO, eK[eP])
1413-
1414- func hv (eO,eP) = if ((eP >= eL))
1415- then eO
1443+ else ( let eN = split_4C(hJ, "_")
1444+ let eO = size(eN)
1445+ let eP = $Tuple2(0, 0)
1446+ func hA (eR,eS) = if ((eS >= eO))
1447+ then eR
1448+ else hM(eR, eN[eS])
1449+
1450+ func hB (eR,eS) = if ((eS >= eO))
1451+ then eR
14161452 else throw("List size exceeds 50")
14171453
1418- hv(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(eM, 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
1419- ((hH + hI) + hJ)
1420- }
1421-
1422-
1423-func hK (hL,hM,hN) = {
1424- let hA = ((toString(hM) + "_") + toString(hN))
1425- let hO = hz(hA)
1426- let hP = valueOrElse(getString(hL), (hA + ":0_0_0_0_0_0:0_0_0_0_0_0::0"))
1427- let hQ = split_4C(hP, ":")
1428- let hR = hB(hQ)
1429- let hS = if ((5 > size(hQ)))
1430- then makeString(["0", toString(hR), toString((hO - hR)), toString(hO)], "_")
1454+ hB(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(eP, 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
1455+ ((hN + hO) + hP)
1456+ }
1457+
1458+
1459+func hQ (hR,hS,hT) = {
1460+ let hG = ((toString(hS) + "_") + toString(hT))
1461+ let hU = hF(hG)
1462+ let hV = valueOrElse(getString(hR), (hG + ":0_0_0_0_0_0:0_0_0_0_0_0::0"))
1463+ let hW = split_4C(hV, ":")
1464+ let hX = hH(hW)
1465+ let hY = if ((5 > size(hW)))
1466+ then makeString(["0", toString(hX), toString((hU - hX)), toString(hU)], "_")
14311467 else {
1432- let hT = split(hQ[aT], "_")
1433- let hU = parseIntValue(hT[aU])
1434- let hV = if ((size(hT) > 1))
1435- then parseIntValue(hT[aV])
1436- else hR
1437- makeString([toString(hU), toString(hV), toString(((hO - hU) - hV)), toString(hO)], "_")
1438- }
1439-[hQ[aP], if ((size(split(hQ[aQ], "_")) == at))
1440- then hQ[aQ]
1441- else "0_0_0_0_0_0", if ((size(split(hQ[aR], "_")) == at))
1442- then hQ[aR]
1443- else "0_0_0_0_0_0", hQ[aS], hS]
1444- }
1445-
1446-
1447-func hW (hC) = {
1448- let hX = hB(hC)
1449- let hY = parseIntValue(split(hC[aT], "_")[aU])
1450- ((hz(hC[aP]) - hX) - hY)
1451- }
1452-
1453-
1454-func hZ (ia,hC,ib) = if ((size(ia) != 3))
1468+ let hZ = split(hW[bn], "_")
1469+ let ia = parseIntValue(hZ[bo])
1470+ let ib = if ((size(hZ) > 1))
1471+ then parseIntValue(hZ[bp])
1472+ else hX
1473+ makeString([toString(ia), toString(ib), toString(((hU - ia) - ib)), toString(hU)], "_")
1474+ }
1475+[hW[bj], if ((size(split(hW[bk], "_")) == aM))
1476+ then hW[bk]
1477+ else "0_0_0_0_0_0", if ((size(split(hW[bl], "_")) == aM))
1478+ then hW[bl]
1479+ else "0_0_0_0_0_0", hW[bm], hY]
1480+ }
1481+
1482+
1483+func ic (hI) = {
1484+ let id = hH(hI)
1485+ let ie = parseIntValue(split(hI[bn], "_")[bo])
1486+ ((hF(hI[bj]) - id) - ie)
1487+ }
1488+
1489+
1490+func if (ig,hI,ih) = if ((size(ig) != 3))
14551491 then throw("cargoListStr should contain exactly 2 ':' separators")
14561492 else {
1457- let ic = split(ia[0], "_")
1458- let id = split(ia[1], "_")
1459- let ie = if ((ia[2] == ""))
1493+ let ii = split(ig[0], "_")
1494+ let ij = split(ig[1], "_")
1495+ let ik = if ((ig[2] == ""))
14601496 then nil
1461- else split_4C(ia[2], "_")
1462- if ((size(ic) != at))
1497+ else split_4C(ig[2], "_")
1498+ if ((size(ii) != aM))
14631499 then throw("All 6 resources should be passed")
1464- else if ((size(id) != at))
1500+ else if ((size(ij) != aM))
14651501 then throw("All 6 materials should be passed")
14661502 else {
1467- let gK = hW(hC)
1468- let if = split(hC[aQ], "_")
1469- let ig = split(hC[aR], "_")
1470- let ih = if ((hC[aS] == ""))
1503+ let gQ = ic(hI)
1504+ let il = split(hI[bk], "_")
1505+ let im = split(hI[bl], "_")
1506+ let in = if ((hI[bm] == ""))
14711507 then nil
1472- else split_4C(hC[aS], "_")
1473- let gI = split(ib[aZ], "_")
1474- let ii = split(ib[ba], "_")
1475- let ij = if ((ib[bb] == ""))
1508+ else split_4C(hI[bm], "_")
1509+ let gO = split(ih[bt], "_")
1510+ let io = split(ih[bu], "_")
1511+ let ip = if ((ih[bv] == ""))
14761512 then nil
1477- else split_4C(ib[bb], "_")
1478- func ik (eI,hF) = {
1479- let gv = eI._1
1480- let il = parseIntValue(hF)
1481- let im = parseIntValue(if[gv])
1482- let in = parseIntValue(gI[gv])
1483- if ((il == 0))
1484- then $Tuple4((gv + 1), (eI._2 :+ if[gv]), (eI._3 :+ gI[gv]), eI._4)
1485- else if ((il > 0))
1486- then if ((il > in))
1487- then throw((((("Attempt to take " + hF) + " from backpack, but only ") + toString(in)) + " available"))
1488- else $Tuple4((gv + 1), (eI._2 :+ toString((im + il))), (eI._3 :+ toString((in - il))), (eI._4 + il))
1489- else if ((-(il) > im))
1490- then throw((((("Attempt to take " + toString(-(il))) + " from warehouse, but only ") + toString(im)) + " available"))
1491- else $Tuple4((gv + 1), (eI._2 :+ toString((im + il))), (eI._3 :+ toString((in - il))), (eI._4 + il))
1513+ else split_4C(ih[bv], "_")
1514+ func iq (eL,hL) = {
1515+ let gy = eL._1
1516+ let ir = parseIntValue(hL)
1517+ let is = parseIntValue(il[gy])
1518+ let it = parseIntValue(gO[gy])
1519+ if ((ir == 0))
1520+ then $Tuple4((gy + 1), (eL._2 :+ il[gy]), (eL._3 :+ gO[gy]), eL._4)
1521+ else if ((ir > 0))
1522+ then if ((ir > it))
1523+ then throw((((("Attempt to take " + hL) + " from backpack, but only ") + toString(it)) + " available"))
1524+ else $Tuple4((gy + 1), (eL._2 :+ toString((is + ir))), (eL._3 :+ toString((it - ir))), (eL._4 + ir))
1525+ else if ((-(ir) > is))
1526+ then throw((((("Attempt to take " + toString(-(ir))) + " from warehouse, but only ") + toString(is)) + " available"))
1527+ else $Tuple4((gy + 1), (eL._2 :+ toString((is + ir))), (eL._3 :+ toString((it - ir))), (eL._4 + ir))
14921528 }
14931529
1494- let eT = {
1495- let eK = ic
1496- let eL = size(eK)
1497- let eM = $Tuple4(0, nil, nil, 0)
1498- func eN (eO,eP) = if ((eP >= eL))
1499- then eO
1500- else ik(eO, eK[eP])
1501-
1502- func eQ (eO,eP) = if ((eP >= eL))
1503- then eO
1530+ let eW = {
1531+ let eN = ii
1532+ let eO = size(eN)
1533+ let eP = $Tuple4(0, nil, nil, 0)
1534+ func eQ (eR,eS) = if ((eS >= eO))
1535+ then eR
1536+ else iq(eR, eN[eS])
1537+
1538+ func eT (eR,eS) = if ((eS >= eO))
1539+ then eR
15041540 else throw("List size exceeds 6")
15051541
1506- eQ(eN(eN(eN(eN(eN(eN(eM, 0), 1), 2), 3), 4), 5), 6)
1542+ eT(eQ(eQ(eQ(eQ(eQ(eQ(eP, 0), 1), 2), 3), 4), 5), 6)
15071543 }
1508- func io (eI,hF) = {
1509- let gv = eI._1
1510- let il = parseIntValue(hF)
1511- let ip = parseIntValue(ig[gv])
1512- let iq = parseIntValue(ii[gv])
1513- if ((il == 0))
1514- then $Tuple4((gv + 1), (eI._2 :+ ig[gv]), (eI._3 :+ ii[gv]), eI._4)
1515- else if ((il > 0))
1516- then if ((il > iq))
1517- then throw((((("Attempt to take " + hF) + " from backpack, but only ") + toString(iq)) + " available"))
1518- else $Tuple4((gv + 1), (eI._2 :+ toString((ip + il))), (eI._3 :+ toString((iq - il))), (eI._4 + il))
1519- else if ((-(il) > ip))
1520- then throw((((("Attempt to take " + toString(-(il))) + " from warehouse, but only ") + toString(ip)) + " available"))
1521- else $Tuple4((gv + 1), (eI._2 :+ toString((ip + il))), (eI._3 :+ toString((iq - il))), (eI._4 + il))
1544+ func iu (eL,hL) = {
1545+ let gy = eL._1
1546+ let ir = parseIntValue(hL)
1547+ let iv = parseIntValue(im[gy])
1548+ let iw = parseIntValue(io[gy])
1549+ if ((ir == 0))
1550+ then $Tuple4((gy + 1), (eL._2 :+ im[gy]), (eL._3 :+ io[gy]), eL._4)
1551+ else if ((ir > 0))
1552+ then if ((ir > iw))
1553+ then throw((((("Attempt to take " + hL) + " from backpack, but only ") + toString(iw)) + " available"))
1554+ else $Tuple4((gy + 1), (eL._2 :+ toString((iv + ir))), (eL._3 :+ toString((iw - ir))), (eL._4 + ir))
1555+ else if ((-(ir) > iv))
1556+ then throw((((("Attempt to take " + toString(-(ir))) + " from warehouse, but only ") + toString(iv)) + " available"))
1557+ else $Tuple4((gy + 1), (eL._2 :+ toString((iv + ir))), (eL._3 :+ toString((iw - ir))), (eL._4 + ir))
15221558 }
15231559
1524- let gd = {
1525- let eK = id
1526- let eL = size(eK)
1527- let eM = $Tuple4(0, nil, nil, eT._4)
1528- func hr (eO,eP) = if ((eP >= eL))
1529- then eO
1530- else io(eO, eK[eP])
1531-
1532- func hs (eO,eP) = if ((eP >= eL))
1533- then eO
1560+ let gg = {
1561+ let eN = ij
1562+ let eO = size(eN)
1563+ let eP = $Tuple4(0, nil, nil, eW._4)
1564+ func hx (eR,eS) = if ((eS >= eO))
1565+ then eR
1566+ else iu(eR, eN[eS])
1567+
1568+ func hy (eR,eS) = if ((eS >= eO))
1569+ then eR
15341570 else throw("List size exceeds 6")
15351571
1536- hs(hr(hr(hr(hr(hr(hr(eM, 0), 1), 2), 3), 4), 5), 6)
1572+ hy(hx(hx(hx(hx(hx(hx(eP, 0), 1), 2), 3), 4), 5), 6)
15371573 }
1538- func ir (eI,hF) = {
1539- let gv = eI._1
1540- let il = parseIntValue(hF)
1541- let is = if ((size(ih) > gv))
1542- then parseIntValue(ih[gv])
1574+ func ix (eL,hL) = {
1575+ let gy = eL._1
1576+ let ir = parseIntValue(hL)
1577+ let iy = if ((size(in) > gy))
1578+ then parseIntValue(in[gy])
15431579 else 0
1544- let it = if ((size(ij) > gv))
1545- then parseIntValue(ij[gv])
1580+ let iz = if ((size(ip) > gy))
1581+ then parseIntValue(ip[gy])
15461582 else 0
1547- if ((il == 0))
1548- then $Tuple4((gv + 1), (eI._2 :+ toString(is)), (eI._3 :+ toString(it)), eI._4)
1549- else if ((il > 0))
1550- then if ((il > it))
1551- then throw((((("Attempt to take " + hF) + " from backpack, but only ") + toString(it)) + " available"))
1583+ if ((ir == 0))
1584+ then $Tuple4((gy + 1), (eL._2 :+ toString(iy)), (eL._3 :+ toString(iz)), eL._4)
1585+ else if ((ir > 0))
1586+ then if ((ir > iz))
1587+ then throw((((("Attempt to take " + hL) + " from backpack, but only ") + toString(iz)) + " available"))
15521588 else {
1553- let iu = (ey((is + il), aO) - ey(is, aO))
1554- $Tuple4((gv + 1), (eI._2 :+ toString((is + il))), (eI._3 :+ toString((it - il))), (eI._4 + iu))
1589+ let iA = (eB((iy + ir), bi) - eB(iy, bi))
1590+ $Tuple4((gy + 1), (eL._2 :+ toString((iy + ir))), (eL._3 :+ toString((iz - ir))), (eL._4 + iA))
15551591 }
1556- else if ((-(il) > is))
1557- then throw((((("Attempt to take " + toString(-(il))) + " from warehouse, but only ") + toString(is)) + " available"))
1592+ else if ((-(ir) > iy))
1593+ then throw((((("Attempt to take " + toString(-(ir))) + " from warehouse, but only ") + toString(iy)) + " available"))
15581594 else {
1559- let iu = (ey((is + il), aO) - ey(is, aO))
1560- $Tuple4((gv + 1), (eI._2 :+ toString((is + il))), (eI._3 :+ toString((it - il))), (eI._4 + iu))
1595+ let iA = (eB((iy + ir), bi) - eB(iy, bi))
1596+ $Tuple4((gy + 1), (eL._2 :+ toString((iy + ir))), (eL._3 :+ toString((iz - ir))), (eL._4 + iA))
15611597 }
15621598 }
15631599
1564- let hy = if ((size(ie) != 0))
1600+ let hE = if ((size(ik) != 0))
15651601 then {
1566- let eK = ie
1567- let eL = size(eK)
1568- let eM = $Tuple4(0, nil, nil, gd._4)
1569- func hu (eO,eP) = if ((eP >= eL))
1570- then eO
1571- else ir(eO, eK[eP])
1572-
1573- func hv (eO,eP) = if ((eP >= eL))
1574- then eO
1602+ let eN = ik
1603+ let eO = size(eN)
1604+ let eP = $Tuple4(0, nil, nil, gg._4)
1605+ func hA (eR,eS) = if ((eS >= eO))
1606+ then eR
1607+ else ix(eR, eN[eS])
1608+
1609+ func hB (eR,eS) = if ((eS >= eO))
1610+ then eR
15751611 else throw("List size exceeds 50")
15761612
1577- hv(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(eM, 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)
1613+ hB(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(eP, 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)
15781614 }
1579- else $Tuple4(0, ih, ij, gd._4)
1580- let iv = hy._4
1581- if ((iv > gK))
1582- then throw((((("Attempt to put total " + toString(iv)) + " stuff, but only ") + toString(gK)) + " warehouse space left"))
1583- else $Tuple7(makeString(eT._2, "_"), makeString(gd._2, "_"), makeString_2C(hy._2, "_"), makeString(eT._3, "_"), makeString(gd._3, "_"), makeString_2C(hy._3, "_"), iv)
1615+ else $Tuple4(0, in, ip, gg._4)
1616+ let iB = hE._4
1617+ if ((iB > gQ))
1618+ then throw((((("Attempt to put total " + toString(iB)) + " stuff, but only ") + toString(gQ)) + " warehouse space left"))
1619+ else $Tuple7(makeString(eW._2, "_"), makeString(gg._2, "_"), makeString_2C(hE._2, "_"), makeString(eW._3, "_"), makeString(gg._3, "_"), makeString_2C(hE._3, "_"), iB)
15841620 }
15851621 }
15861622
15871623
1588-func iw (ix,iy) = {
1589- let bC = toString(ix)
1590- let iz = gQ(toBigInt(iy))
1591- let iA = valueOrElse(getInteger(ea()), (dZ + 1))
1592- let ee = toString(iA)
1593- let gZ = toInt((iz % dT))
1594- let gy = gX(iz, gZ)
1595- let di = aH[gZ]
1596- let iB = Issue(ex(ee, "S"), makeString([ee, "S", gy, di], "_"), 1, 0, false)
1597- let bg = calculateAssetId(iB)
1598- let iC = toBase58String(bg)
1599- $Tuple2([IntegerEntry(ea(), (iA + 1)), iB, StringEntry(ed(ee), iC), StringEntry(bf(iC), bC), StringEntry(eg(ee), bC), IntegerEntry(bq(iC), 0), IntegerEntry(ef(iC, bC), 0), ScriptTransfer(ix, 1, bg)], $Tuple2(iC, di))
1600- }
1601-
1602-
1603-func iD (bC,iE,iF) = if (!(sigVerify_8Kb(iE, iF, cl)))
1624+func iC (iD,iE) = {
1625+ let bW = toString(iD)
1626+ let iF = gW(toBigInt(iE))
1627+ let iG = valueOrElse(getInteger(ed()), (ec + 1))
1628+ let eh = toString(iG)
1629+ let hf = toInt((iF % dW))
1630+ let gB = hd(iF, hf)
1631+ let ae = bb[hf]
1632+ let iH = Issue(eA(eh, "S"), makeString([eh, "S", gB, ae], "_"), 1, 0, false)
1633+ let bA = calculateAssetId(iH)
1634+ let iI = toBase58String(bA)
1635+ $Tuple2([IntegerEntry(ed(), (iG + 1)), iH, StringEntry(eg(eh), iI), StringEntry(bz(iI), bW), StringEntry(ej(eh), bW), IntegerEntry(bJ(iI), 0), IntegerEntry(ei(iI, bW), 0), ScriptTransfer(iD, 1, bA)], $Tuple2(iI, ae))
1636+ }
1637+
1638+
1639+func iJ (bW,iK,iL) = if (!(sigVerify_8Kb(iK, iL, f)))
16041640 then throw("signature does not match")
16051641 else {
1606- let fg = split_4C(toUtf8String(iE), ";")
1607- let iG = split_4C(fg[0], "|")
1608- let iH = split(iG[eo], "_")
1609- let iI = parseIntValue(iH[0])
1610- let iJ = parseIntValue(iH[1])
1611- let iK = split(fg[1], ":")
1612- let iL = iK[0]
1613- let iM = parseIntValue(iG[ep])
1614- if (if ((iM > (lastBlock.timestamp + dL)))
1642+ let fj = split_4C(toUtf8String(iK), ";")
1643+ let iM = split_4C(fj[0], "|")
1644+ let iN = split(iM[er], "_")
1645+ let iO = parseIntValue(iN[0])
1646+ let iP = parseIntValue(iN[1])
1647+ let iQ = split(fj[1], ":")
1648+ let iR = iQ[0]
1649+ let iS = parseIntValue(iM[es])
1650+ if (if ((iS > (lastBlock.timestamp + dO)))
16151651 then true
1616- else ((lastBlock.timestamp - dL) > iM))
1617- then throw(((("signature outdated: logTime=" + toString(iM)) + ", bcTime=") + toString(lastBlock.timestamp)))
1652+ else ((lastBlock.timestamp - dO) > iS))
1653+ then throw(((("signature outdated: logTime=" + toString(iS)) + ", bcTime=") + toString(lastBlock.timestamp)))
16181654 else {
1619- let iN = iK[1]
1620- let iO = valueOrElse(getString(dx(bC)), "")
1621- if ((iO != iN))
1622- then throw(((("Tx ids don't match! In state: " + iO) + ", in msg: ") + iN))
1655+ let iT = iQ[1]
1656+ let iU = valueOrElse(getString(au(bW)), "")
1657+ if ((iU != iT))
1658+ then throw(((("Tx ids don't match! In state: " + iU) + ", in msg: ") + iT))
16231659 else {
1624- let u = valueOrErrorMessage(getString(by(bC)), "You don't have a duck staked")
1625- let iP = t(u)
1626- let iQ = ab(valueOrElse(getInteger(x(u)), 0))
1627- let iR = valueOrElse(getInteger(iP), iQ)
1628- if ((iR != iI))
1629- then throw(((("oldHealth=" + toString(iR)) + " from state does not match one from flight log=") + toString(iI)))
1630- else if ((0 >= iI))
1660+ let bO = valueOrErrorMessage(getString(bS(bW)), "You don't have a duck staked")
1661+ let iV = cP(bO)
1662+ let iW = dw(valueOrElse(getInteger(cS(bO)), 0))
1663+ let iX = valueOrElse(getInteger(iV), iW)
1664+ if ((iX != iO))
1665+ then throw(((("oldHealth=" + toString(iX)) + " from state does not match one from flight log=") + toString(iO)))
1666+ else if ((0 >= iO))
16311667 then throw("You can't fly with zero health")
1632- else if (!(gg(u)))
1668+ else if (!(gj(bO)))
16331669 then throw("Equipment incompatible")
16341670 else {
1635- let iS = if ((size(iG) > eq))
1636- then iG[eq]
1671+ let iY = if ((size(iM) > et))
1672+ then iM[et]
16371673 else ""
1638- let iT = if ((size(iG) > er))
1639- then iG[er]
1674+ let iZ = if ((size(iM) > eu))
1675+ then iM[eu]
16401676 else ""
1641- let iU = if (if ((iJ > 0))
1642- then (iS == "$")
1677+ let ja = if (if ((iP > 0))
1678+ then (iY == "$")
16431679 else false)
1644- then do(invoke(cQ, "sendUsdtPrize", [bC], nil))
1680+ then al(invoke(L, "sendUsdtPrize", [bW], nil))
16451681 else 0
1646- $Tuple5(iJ, u, iU, iL, iT)
1682+ $Tuple5(iP, bO, ja, iR, iZ)
16471683 }
16481684 }
16491685 }
16501686 }
16511687
16521688
1653-func iV (bp,iW) = {
1654- let hN = valueOrElse(getInteger(bq(bp)), 0)
1655- let iX = valueOrElse(getInteger(bj(as, bp)), 0)
1656- let iY = (hN / 6)
1657- let iZ = (hN / 7)
1658- ((av + fraction(av, ((hN + iY) + (2 * iZ)), 5)) + fraction(av, iX, (iW * 5)))
1659- }
1660-
1661-
1662-func ja (c,jb,jc) = {
1663- let jd = if ((jb == el))
1664- then $Tuple2(jc, valueOrElse(getString(by(c)), ""))
1689+func jb (bI,jc) = {
1690+ let hT = valueOrElse(getInteger(bJ(bI)), 0)
1691+ let jd = valueOrElse(getInteger(bD(aL, bI)), 0)
1692+ let je = (hT / 6)
1693+ let jf = (hT / 7)
1694+ ((aO + fraction(aO, ((hT + je) + (2 * jf)), 5)) + fraction(aO, jd, (jc * 5)))
1695+ }
1696+
1697+
1698+func jg (av,jh,ji) = {
1699+ let jj = if ((jh == eo))
1700+ then $Tuple2(ji, valueOrElse(getString(bS(av)), ""))
16651701 else {
1666- let u = valueOrErrorMessage(getString(by(c)), "You don't have a duck staked")
1667- let je = valueOrElse(getString(bA(u)), ax)
1668- let bV = split(value(je), "_")
1669- if ((bV[bd] != "L"))
1670- then throw((("Duck location type is " + bV[bd]) + ", but should be L"))
1671- else $Tuple2(bV[be], u)
1672- }
1673- let bp = jd._1
1674- let jf = jd._2
1675- let jg = value(assetInfo(fromBase58String(bp)))
1676- let jh = bi(bp)
1677- let ji = valueOrErrorMessage(getInteger(jh), (("Land " + jg.name) + " is not staked"))
1678- let jj = valueOrErrorMessage(getString(bf(bp)), (("NFT " + jg.name) + " is orphaned"))
1679- if ((jj != c))
1680- then throw((ap + " is not yours"))
1702+ let bO = valueOrErrorMessage(getString(bS(av)), "You don't have a duck staked")
1703+ let jk = valueOrElse(getString(bU(bO)), aQ)
1704+ let cp = split(value(jk), "_")
1705+ if ((cp[bx] != "L"))
1706+ then throw((("Duck location type is " + cp[bx]) + ", but should be L"))
1707+ else $Tuple2(cp[by], bO)
1708+ }
1709+ let bI = jj._1
1710+ let jl = jj._2
1711+ let jm = value(assetInfo(fromBase58String(bI)))
1712+ let jn = bC(bI)
1713+ let jo = valueOrErrorMessage(getInteger(jn), (("Land " + jm.name) + " is not staked"))
1714+ let jp = valueOrErrorMessage(getString(bz(bI)), (("NFT " + jm.name) + " is orphaned"))
1715+ if ((jp != av))
1716+ then throw((aI + " is not yours"))
16811717 else {
1682- let jk = split(jg.description, "_")
1683- $Tuple4(jf, bp, jk, ji)
1684- }
1685- }
1686-
1687-
1688-func jl (c,ez,jb,jc) = if ((0 > ez))
1718+ let jq = split(jm.description, "_")
1719+ $Tuple4(jl, bI, jq, jo)
1720+ }
1721+ }
1722+
1723+
1724+func jr (av,eC,jh,ji) = if ((0 > eC))
16891725 then throw("Negative amount")
16901726 else {
1691- let fN = ja(c, jb, jc)
1692- let du = fN._3[cX]
1693- let gr = gx(fN._3[cY])
1694- let gB = (lastBlock.timestamp - fN._4)
1695- if ((0 > gB))
1696- then throw(((("Saved timestamp is in future, saved = " + toString(fN._4)) + ", current = ") + toString(lastBlock.timestamp)))
1727+ let fQ = jg(av, jh, ji)
1728+ let ar = fQ._3[T]
1729+ let gu = gA(fQ._3[U])
1730+ let gE = (aH() - fQ._4)
1731+ if ((0 > gE))
1732+ then throw(((("Saved timestamp is in future, saved = " + toString(fQ._4)) + ", final = ") + toString(aH())))
16971733 else {
1698- let iW = dt(du)
1699- let jm = iV(fN._2, iW)
1700- let jn = fraction(gB, (jm * iW), a)
1701- if ((ez > jn))
1702- then throw(((("Not enough resources, available = " + toString(jn)) + ", requested = ") + toString(ez)))
1734+ let jc = aq(ar)
1735+ let js = jb(fQ._2, jc)
1736+ let jt = fraction(gE, (js * jc), dJ)
1737+ if ((eC > jt))
1738+ then throw(((("Not enough resources, available = " + toString(jt)) + ", requested = ") + toString(eC)))
17031739 else {
1704- let jo = fraction((jn - ez), a, (jm * iW))
1705- let jp = (lastBlock.timestamp - jo)
1706- let hM = (iW / cu)
1707- let gJ = gF(gr, (gB - jo), hM, jm)
1708- let hL = bo(fN._2)
1709- let hN = valueOrElse(getInteger(bq(fN._2)), 0)
1710- let hC = hK(hL, hM, hN)
1711- let hT = split(hC[aT], "_")
1712- let gK = parseIntValue(hT[aW])
1713- if (if ((jb == el))
1714- then (ez > gK)
1740+ let ju = fraction((jt - eC), dJ, (js * jc))
1741+ let jv = (aH() - ju)
1742+ let hS = (jc / p)
1743+ let gP = gK(gu, (gE - ju), hS, js)
1744+ let hR = bH(fQ._2)
1745+ let hT = valueOrElse(getInteger(bJ(fQ._2)), 0)
1746+ let hI = hQ(hR, hS, hT)
1747+ let hZ = split(hI[bn], "_")
1748+ let gQ = parseIntValue(hZ[bq])
1749+ if (if ((jh == eo))
1750+ then (eC > gQ)
17151751 else false)
1716- then throw((("Only " + toString(gK)) + " space left in warehouse"))
1752+ then throw((("Only " + toString(gQ)) + " space left in warehouse"))
17171753 else {
1718- let hx = bz(fN._1)
1719- let ib = hw(hx)
1720- let gI = split(ib[aZ], "_")
1721- let gH = split(hC[aQ], "_")
1722- let jq = if ((jb == el))
1723- then $Tuple4(gz(gH, gr, (gB - jo), hM, jm), ib[aZ], (parseIntValue(hT[aV]) + gJ._2), (parseIntValue(hT[aW]) - gJ._2))
1724- else if ((jb == em))
1725- then $Tuple4(hC[aQ], gz(gI, gr, (gB - jo), hM, jm), parseIntValue(hT[aV]), parseIntValue(hT[aW]))
1754+ let hD = bT(fQ._1)
1755+ let ih = hC(hD)
1756+ let gO = split(ih[bt], "_")
1757+ let gN = split(hI[bk], "_")
1758+ let jw = if ((jh == eo))
1759+ then $Tuple4(gC(gN, gu, (gE - ju), hS, js), ih[bt], (parseIntValue(hZ[bp]) + gP._2), (parseIntValue(hZ[bq]) - gP._2))
1760+ else if ((jh == ep))
1761+ then $Tuple4(hI[bk], gC(gO, gu, (gE - ju), hS, js), parseIntValue(hZ[bp]), parseIntValue(hZ[bq]))
17261762 else {
1727- let jr = gG(gH, gI, gJ, gK)
1728- let js = min([parseIntValue(hT[aW]), gJ._2])
1729- $Tuple4(jr._1, jr._2, (parseIntValue(hT[aV]) + js), (parseIntValue(hT[aW]) - js))
1763+ let jx = gM(gN, gO, gP, gQ)
1764+ let jy = min([parseIntValue(hZ[bq]), gP._2])
1765+ $Tuple4(jx._1, jx._2, (parseIntValue(hZ[bp]) + jy), (parseIntValue(hZ[bq]) - jy))
17301766 }
1731- let jt = jq._1
1732- let ju = jq._2
1733- let jv = jq._3
1734- let jw = jq._4
1735- $Tuple5([IntegerEntry(bi(fN._2), jp), IntegerEntry(bl(ap, fN._2, c), jp)], hx, [ib[aY], ju, ib[ba], ib[bb]], hL, [hC[aP], jt, hC[aR], hC[aS], makeString([hT[aU], toString(jv), toString(jw), hT[aX]], "_")])
1767+ let jz = jw._1
1768+ let jA = jw._2
1769+ let jB = jw._3
1770+ let jC = jw._4
1771+ $Tuple5([IntegerEntry(bC(fQ._2), jv), IntegerEntry(bF(aI, fQ._2, av), jv)], hD, [ih[bs], jA, ih[bu], ih[bv]], hR, [hI[bj], jz, hI[bl], hI[bm], makeString([hZ[bo], toString(jB), toString(jC), hZ[br]], "_")])
17361772 }
17371773 }
17381774 }
17391775 }
17401776
17411777
1742-func jx (c,bp,iW,jb) = {
1743- let jh = bi(bp)
1744- let ji = value(getInteger(jh))
1745- let jn = (fraction((lastBlock.timestamp - ji), iV(bp, iW), a) * iW)
1746- jl(c, jn, jb, bp)
1747- }
1748-
1749-
1750-func jy (eV,ix,jz,bp) = {
1751- let c = toString(ix)
1752- let fN = ja(c, en, bp)
1753- let iW = dt(fN._3[cX])
1754- let jA = bq(fN._2)
1755- let jB = valueOrElse(getInteger(jA), 0)
1756- if (if (!(ch))
1757- then (jB >= 3)
1778+func jD (av,bI,jc,jh) = {
1779+ let jn = bC(bI)
1780+ let jo = value(getInteger(jn))
1781+ let jt = (fraction((aH() - jo), jb(bI, jc), dJ) * jc)
1782+ jr(av, jt, jh, bI)
1783+ }
1784+
1785+
1786+func jE (eY,iD,jF,bI) = {
1787+ let av = toString(iD)
1788+ let fQ = jg(av, eq, bI)
1789+ let jc = aq(fQ._3[T])
1790+ let jG = bJ(fQ._2)
1791+ let jH = valueOrElse(getInteger(jG), 0)
1792+ if (if (!(b))
1793+ then (jH >= 3)
17581794 else false)
17591795 then throw("Currently max infrastructure level = 3")
17601796 else {
1761- let jC = ((sqrt(iW, 0, 0, DOWN) / 5) + 2)
1762- let ag = (jB + 1)
1763- if (if (ch)
1764- then (ag > jC)
1797+ let jI = ((sqrt(jc, 0, 0, DOWN) / 5) + 2)
1798+ let dB = (jH + 1)
1799+ if (if (b)
1800+ then (dB > jI)
17651801 else false)
1766- then throw(("Currently max infrastructure level = " + toString(jC)))
1802+ then throw(("Currently max infrastructure level = " + toString(jI)))
17671803 else {
1768- let jD = fraction(dO, (iW * ag), cu)
1769- if (if (!(eV))
1770- then (jz != jD)
1804+ let jJ = fraction(dR, (jc * dB), p)
1805+ if (if (!(eY))
1806+ then (jF != jJ)
17711807 else false)
1772- then throw(("Payment attached should be " + toString(jD)))
1808+ then throw(("Payment attached should be " + toString(jJ)))
17731809 else {
1774- let hx = bz(fN._1)
1775- let ib = hw(hx)
1776- let jE = split(ib[ba], "_")
1777- let jF = fraction(cp, (iW * ag), cu)
1778- let jG = makeString(eU(eV, jE, jF), "_")
1779- let jH = jx(c, fN._2, iW, en)
1780- let jI = jH._5
1781- let jJ = hz(jI[aP])
1782- let jK = makeString([split(jI[aP], "_")[0], toString(ag)], "_")
1783- let jL = hz(jK)
1784- let hT = split(jI[aT], "_")
1785- let jM = makeString([hT[aU], hT[aV], toString(((parseIntValue(hT[aW]) + jL) - jJ)), toString(jL)], "_")
1786- $Tuple3(([IntegerEntry(jA, ag), IntegerEntry(ef(fN._2, c), ag), StringEntry(hx, makeString([ib[aY], jH._3[aZ], jG, ib[bb]], ":")), StringEntry(jH._4, makeString([jK, jI[aQ], jI[aR], jI[aS], jM], ":"))] ++ jH._1), ag, jF)
1810+ let hD = bT(fQ._1)
1811+ let ih = hC(hD)
1812+ let jK = split(ih[bu], "_")
1813+ let jL = fraction(k, (jc * dB), p)
1814+ let jM = makeString(eX(eY, jK, jL), "_")
1815+ let jN = jD(av, fQ._2, jc, eq)
1816+ let jO = jN._5
1817+ let jP = hF(jO[bj])
1818+ let jQ = makeString([split(jO[bj], "_")[0], toString(dB)], "_")
1819+ let jR = hF(jQ)
1820+ let hZ = split(jO[bn], "_")
1821+ let jS = makeString([hZ[bo], hZ[bp], toString(((parseIntValue(hZ[bq]) + jR) - jP)), toString(jR)], "_")
1822+ $Tuple3(([IntegerEntry(jG, dB), IntegerEntry(ei(fQ._2, av), dB), StringEntry(hD, makeString([ih[bs], jN._3[bt], jM, ih[bv]], ":")), StringEntry(jN._4, makeString([jQ, jO[bk], jO[bl], jO[bm], jS], ":"))] ++ jN._1), dB, jL)
17871823 }
17881824 }
17891825 }
17901826 }
17911827
17921828
1793-func jN (jO,jP,jQ,jR) = {
1794- let aa = valueOrElse(getInteger(jP), 0)
1795- let af = (aa + jR)
1796- let jS = ad(valueOrElse(getInteger(jO), 0), af)
1797- $Tuple2([IntegerEntry(jO, jS[0]), IntegerEntry(jP, af), IntegerEntry(jQ, (valueOrElse(getInteger(jQ), 0) + jS[1]))], af)
1798- }
1799-
1800-
1801-func jT (u,jR) = {
1802- let jg = value(assetInfo(fromBase58String(u)))
1803- let c = valueOrErrorMessage(getString(bx(u)), (("NFT " + jg.name) + " is orphaned"))
1804- if (if (if (ci)
1805- then (jg.issuer == this)
1829+func jT (jU,jV,jW,jX) = {
1830+ let dv = valueOrElse(getInteger(jV), 0)
1831+ let dA = (dv + jX)
1832+ let jY = dy(valueOrElse(getInteger(jU), 0), dA)
1833+ $Tuple2([IntegerEntry(jU, jY[0]), IntegerEntry(jV, dA), IntegerEntry(jW, (valueOrElse(getInteger(jW), 0) + jY[1]))], dA)
1834+ }
1835+
1836+
1837+func jZ (bO,jX) = {
1838+ let jm = value(assetInfo(fromBase58String(bO)))
1839+ let av = valueOrErrorMessage(getString(bR(bO)), (("NFT " + jm.name) + " is orphaned"))
1840+ if (if (if (c)
1841+ then (jm.issuer == this)
18061842 else false)
1807- then contains(jg.name, ar)
1843+ then contains(jm.name, aK)
18081844 else false)
1809- then jN(B(c), A(c), C(c), jR)
1810- else jN(x(u), w(u), y(u), jR)
1811- }
1812-
1813-
1814-func jU (c,jR) = jN(B(c), A(c), C(c), jR)
1815-
1816-
1817-func jV (c) = {
1818- let u = valueOrErrorMessage(getString(by(c)), "You don't have a duck staked")
1819- let jW = bt(c)
1820- let jX = getString(jW)
1821- if (!(isDefined(jX)))
1845+ then jT(cW(av), cV(av), cX(av), jX)
1846+ else jT(cS(bO), cR(bO), cT(bO), jX)
1847+ }
1848+
1849+
1850+func ka (av,jX) = jT(cW(av), cV(av), cX(av), jX)
1851+
1852+
1853+func kb (av) = {
1854+ let bO = valueOrErrorMessage(getString(bS(av)), "You don't have a duck staked")
1855+ let kc = bM(av)
1856+ let kd = getString(kc)
1857+ if (!(isDefined(kd)))
18221858 then throw("You are not eligible for ONBOARD artifact")
18231859 else {
1824- let jY = bv(c)
1825- let jZ = getString(jY)
1826- if (isDefined(jZ))
1827- then throw(("You already used your ONBOARD artifact on duck " + value(jZ)))
1860+ let ke = bP(av)
1861+ let kf = getString(ke)
1862+ if (isDefined(kf))
1863+ then throw(("You already used your ONBOARD artifact on duck " + value(kf)))
18281864 else {
1829- let ka = bu(u)
1830- let kb = getString(ka)
1831- if (isDefined(kb))
1832- then throw(((("The duck " + u) + " already got points from ONBOARD artifact from user ") + value(kb)))
1833- else ([StringEntry(jY, u), StringEntry(ka, c)] ++ jT(u, X)._1)
1865+ let kg = bN(bO)
1866+ let kh = getString(kg)
1867+ if (isDefined(kh))
1868+ then throw(((("The duck " + bO) + " already got points from ONBOARD artifact from user ") + value(kh)))
1869+ else ([StringEntry(ke, bO), StringEntry(kg, av)] ++ jZ(bO, ds)._1)
18341870 }
18351871 }
18361872 }
18371873
18381874
1839-func kc (c,jc) = {
1840- let fN = ja(c, en, jc)
1841- let bp = fN._2
1842- let iW = dt(fN._3[cX])
1843- let kd = bj(as, bp)
1844- if ((valueOrElse(getInteger(kd), 0) > 0))
1875+func ki (av,ji) = {
1876+ let fQ = jg(av, eq, ji)
1877+ let bI = fQ._2
1878+ let jc = aq(fQ._3[T])
1879+ let kj = bD(aL, bI)
1880+ if ((valueOrElse(getInteger(kj), 0) > 0))
18451881 then throw("Presale artifact is already activated")
1846- else if ((parseIntValue(fN._3[cW]) > dZ))
1847- then throw((((ap + " ") + bp) + " is not eligible for presale artifact"))
1882+ else if ((parseIntValue(fQ._3[S]) > ec))
1883+ then throw((((aI + " ") + bI) + " is not eligible for presale artifact"))
18481884 else {
1849- let jH = jx(c, bp, iW, en)
1850- (((jH._1 :+ IntegerEntry(kd, iW)) :+ StringEntry(jH._2, makeString(jH._3, ":"))) :+ StringEntry(jH._4, makeString(jH._5, ":")))
1885+ let jN = jD(av, bI, jc, eq)
1886+ (((jN._1 :+ IntegerEntry(kj, jc)) :+ StringEntry(jN._2, makeString(jN._3, ":"))) :+ StringEntry(jN._4, makeString(jN._5, ":")))
18511887 }
18521888 }
18531889
18541890
1855-func ke (u) = {
1856- let bU = valueOrElse(getInteger(cU, bF), 0)
1857- let je = split(valueOrElse(getString(bA(u)), ax), "_")
1858- let bW = lastBlock.timestamp
1859- let bX = bO(cU, bU)
1860- let bQ = bX[bK]
1861- let bR = bX[bL]
1862- if ((je[bd] != "T"))
1891+func kk (bO) = {
1892+ let co = valueOrElse(getInteger(Q, bZ), 0)
1893+ let jk = split(valueOrElse(getString(bU(bO)), aQ), "_")
1894+ let cq = lastBlock.timestamp
1895+ let cr = ci(Q, co)
1896+ let ck = cr[ce]
1897+ let cl = cr[cf]
1898+ if ((jk[bx] != "T"))
18631899 then false
1864- else if (if (if ((parseIntValue(je[bc]) == bU))
1865- then (bR[bN] == "INPROGRESS")
1900+ else if (if (if ((parseIntValue(jk[bw]) == co))
1901+ then (cl[ch] == "INPROGRESS")
18661902 else false)
1867- then (parseIntValue(bQ[bM]) > bW)
1903+ then (parseIntValue(ck[cg]) > cq)
18681904 else false)
18691905 then throw("Your duck is taking part in the tournament")
1870- else ds(invoke(this, "exitTournamentInternal", [u], nil))
1871- }
1872-
1873-
1874-func kf (kg,ag,kh,c,ki,kj) = {
1875- let u = valueOrErrorMessage(getString(by(c)), "You don't have a duck staked")
1876- if (ke(u))
1906+ else ap(invoke(this, "exitTournamentInternal", [bO], nil))
1907+ }
1908+
1909+
1910+func kl (km,dB,kn,av,ko,kp) = {
1911+ let bO = valueOrErrorMessage(getString(bS(av)), "You don't have a duck staked")
1912+ if (kk(bO))
18771913 then throw("mergeInternal_checkTournament")
18781914 else {
1879- func kk (eI,bp) = {
1880- let jg = value(assetInfo(fromBase58String(bp)))
1881- let jh = bi(bp)
1882- let ji = valueOrErrorMessage(getInteger(jh), (("NFT " + jg.name) + " is not staked"))
1883- let jj = valueOrErrorMessage(getString(bf(bp)), (("NFT " + jg.name) + " is orphaned"))
1884- if ((jj != c))
1885- then throw((ap + " is not yours"))
1915+ func kq (eL,bI) = {
1916+ let jm = value(assetInfo(fromBase58String(bI)))
1917+ let jn = bC(bI)
1918+ let jo = valueOrErrorMessage(getInteger(jn), (("NFT " + jm.name) + " is not staked"))
1919+ let jp = valueOrErrorMessage(getString(bz(bI)), (("NFT " + jm.name) + " is orphaned"))
1920+ if ((jp != av))
1921+ then throw((aI + " is not yours"))
18861922 else {
1887- let jk = split(jg.description, "_")
1888- let di = jk[cZ]
1889- if (if ((eI._3 != ""))
1890- then (eI._3 != di)
1923+ let jq = split(jm.description, "_")
1924+ let ae = jq[V]
1925+ if (if ((eL._3 != ""))
1926+ then (eL._3 != ae)
18911927 else false)
18921928 then throw("Lands should be on the same continent to merge")
18931929 else {
1894- let du = jk[cX]
1895- let kl = eI._1
1896- let gv = valueOrErrorMessage(indexOf(kl, du), "You haven't passed all the lands needed")
1897- let km = (take(kl, gv) + drop(kl, (gv + 1)))
1898- let iW = dt(du)
1899- let kn = (eI._2 + valueOrElse(getInteger(bj(as, bp)), 0))
1900- let hN = valueOrElse(getInteger(bq(bp)), 0)
1901- let ko = {
1902- let cm = du
1903- if (("S" == cm))
1930+ let ar = jq[T]
1931+ let kr = eL._1
1932+ let gy = valueOrErrorMessage(indexOf(kr, ar), "You haven't passed all the lands needed")
1933+ let ks = (take(kr, gy) + drop(kr, (gy + 1)))
1934+ let jc = aq(ar)
1935+ let kt = (eL._2 + valueOrElse(getInteger(bD(aL, bI)), 0))
1936+ let hT = valueOrElse(getInteger(bJ(bI)), 0)
1937+ let ku = {
1938+ let g = ar
1939+ if (("S" == g))
19041940 then 3
1905- else if (("M" == cm))
1941+ else if (("M" == g))
19061942 then 4
1907- else if (("L" == cm))
1943+ else if (("L" == g))
19081944 then 5
1909- else if (("XL" == cm))
1945+ else if (("XL" == g))
19101946 then 6
19111947 else throw("Only S, M, L, XL can merge")
19121948 }
1913- if ((hN != ko))
1949+ if ((hT != ku))
19141950 then throw("All lands should be maxed to merge")
19151951 else {
1916- let ee = jk[cW]
1917- let gr = gx(jk[cY])
1918- let gB = (lastBlock.timestamp - ji)
1919- if ((0 > gB))
1920- then throw(((("Saved timestamp is in future, saved = " + toString(ji)) + ", current = ") + toString(lastBlock.timestamp)))
1952+ let eh = jq[S]
1953+ let gu = gA(jq[U])
1954+ let gE = (lastBlock.timestamp - jo)
1955+ if ((0 > gE))
1956+ then throw(((("Saved timestamp is in future, saved = " + toString(jo)) + ", current = ") + toString(lastBlock.timestamp)))
19211957 else {
1922- let jm = iV(bp, iW)
1923- let hM = (iW / cu)
1924- let ju = gz(split(eI._4, "_"), gr, gB, hM, jm)
1925- let eS = gp(eI._6, gr, hM, -1)
1926- let kp = gp(eI._10, gr, hM, -1)
1927- let hg = gp(eI._9, gr, hM, 1)
1928- let kq = eI._7
1929- let cP = indexOf(kq, bp)
1930- if (!(isDefined(cP)))
1931- then throw(("Your staked lands don't contain " + bp))
1958+ let js = jb(bI, jc)
1959+ let hS = (jc / p)
1960+ let jA = gC(split(eL._4, "_"), gu, gE, hS, js)
1961+ let eV = gs(eL._6, gu, hS, -1)
1962+ let kv = gs(eL._10, gu, hS, -1)
1963+ let hm = gs(eL._9, gu, hS, 1)
1964+ let kw = eL._7
1965+ let K = indexOf(kw, bI)
1966+ if (!(isDefined(K)))
1967+ then throw(("Your staked lands don't contain " + bI))
19321968 else {
1933- let kr = bh(bp)
1934- let ks = valueOrElse(getString(kr), "")
1935- $Tuple10(km, kn, di, ju, ((((((((((((eI._5 :+ DeleteEntry(bi(bp))) :+ DeleteEntry(bl(ap, bp, c))) :+ DeleteEntry(ed(ee))) :+ DeleteEntry(bf(bp))) :+ DeleteEntry(bq(bp))) :+ DeleteEntry(ef(bp, c))) :+ DeleteEntry(bj(as, bp))) :+ DeleteEntry(eg(ee))) :+ DeleteEntry(bo(bp))) :+ DeleteEntry(kr)) :+ Burn(fromBase58String(bp), 1)) ++ (if ((ks != ""))
1936- then [DeleteEntry(eb(ks))]
1937- else nil)), eS, removeByIndex(kq, value(cP)), (eI._8 + iW), hg, kp)
1969+ let kx = bB(bI)
1970+ let ky = valueOrElse(getString(kx), "")
1971+ $Tuple10(ks, kt, ae, jA, ((((((((((((eL._5 :+ DeleteEntry(bC(bI))) :+ DeleteEntry(bF(aI, bI, av))) :+ DeleteEntry(eg(eh))) :+ DeleteEntry(bz(bI))) :+ DeleteEntry(bJ(bI))) :+ DeleteEntry(ei(bI, av))) :+ DeleteEntry(bD(aL, bI))) :+ DeleteEntry(ej(eh))) :+ DeleteEntry(bH(bI))) :+ DeleteEntry(kx)) :+ Burn(fromBase58String(bI), 1)) ++ (if ((ky != ""))
1972+ then [DeleteEntry(ee(ky))]
1973+ else nil)), eV, removeByIndex(kw, value(K)), (eL._8 + jc), hm, kv)
19381974 }
19391975 }
19401976 }
19411977 }
19421978 }
19431979 }
19441980
1945- let hx = bz(u)
1946- let ib = hw(hx)
1947- let gq = split(valueOrElse(getString(dg()), "0_0_0_0_0_0"), "_")
1948- let kt = dj(c)
1949- let ku = getString(kt)
1950- let kv = if (isDefined(ku))
1951- then split_51C(value(ku), "_")
1981+ let hD = bT(bO)
1982+ let ih = hC(hD)
1983+ let gt = split(valueOrElse(getString(ac()), "0_0_0_0_0_0"), "_")
1984+ let kz = af(av)
1985+ let kA = getString(kz)
1986+ let kB = if (isDefined(kA))
1987+ then split_51C(value(kA), "_")
19521988 else nil
1953- let kw = split(value(assetInfo(fromBase58String(ki[0]))).description, "_")[cZ]
1954- let kx = split(valueOrElse(getString(dh(kw)), "0_0_0_0_0_0"), "_")
1955- let eT = {
1956- let eK = ki
1957- let eL = size(eK)
1958- let eM = $Tuple10(kh, 0, "", ib[aZ], nil, gq, kv, 0, split("0_0_0_0_0_0", "_"), kx)
1959- func eN (eO,eP) = if ((eP >= eL))
1960- then eO
1961- else kk(eO, eK[eP])
1962-
1963- func eQ (eO,eP) = if ((eP >= eL))
1964- then eO
1989+ let kC = split(value(assetInfo(fromBase58String(ko[0]))).description, "_")[V]
1990+ let kD = split(valueOrElse(getString(ad(kC)), "0_0_0_0_0_0"), "_")
1991+ let eW = {
1992+ let eN = ko
1993+ let eO = size(eN)
1994+ let eP = $Tuple10(kn, 0, "", ih[bt], nil, gt, kB, 0, split("0_0_0_0_0_0", "_"), kD)
1995+ func eQ (eR,eS) = if ((eS >= eO))
1996+ then eR
1997+ else kq(eR, eN[eS])
1998+
1999+ func eT (eR,eS) = if ((eS >= eO))
2000+ then eR
19652001 else throw("List size exceeds 5")
19662002
1967- eQ(eN(eN(eN(eN(eN(eM, 0), 1), 2), 3), 4), 5)
2003+ eT(eQ(eQ(eQ(eQ(eQ(eP, 0), 1), 2), 3), 4), 5)
19682004 }
1969- let di = eT._3
1970- let gZ = valueOrErrorMessage(indexOf(aH, di), ("Unknown continent: " + di))
1971- let gy = hf(eT._9, (dt(kg) / cu))
1972- let iA = valueOrElse(getInteger(ea()), (dZ + 1))
1973- let ky = toString(iA)
1974- let iB = Issue(ex(ky, kg), makeString([ky, kg, gy, di], "_"), 1, 0, false)
1975- let bg = calculateAssetId(iB)
1976- let kz = toBase58String(bg)
1977- let jG = makeString(eU((kj > 0), split(ib[ba], "_"), kj), "_")
1978- let kA = dk(c)
1979- let kB = valueOrElse(getInteger(kA), 0)
1980- $Tuple2((((((((((((((((eT._5 :+ (if ((size(eT._7) > 0))
1981- then StringEntry(kt, makeString_11C(eT._7, "_"))
1982- else DeleteEntry(kt))) :+ IntegerEntry(kA, if ((eT._8 > kB))
2005+ let ae = eW._3
2006+ let hf = valueOrErrorMessage(indexOf(bb, ae), ("Unknown continent: " + ae))
2007+ let gB = hl(eW._9, (aq(km) / p))
2008+ let iG = valueOrElse(getInteger(ed()), (ec + 1))
2009+ let kE = toString(iG)
2010+ let iH = Issue(eA(kE, km), makeString([kE, km, gB, ae], "_"), 1, 0, false)
2011+ let bA = calculateAssetId(iH)
2012+ let kF = toBase58String(bA)
2013+ let jM = makeString(eX((kp > 0), split(ih[bu], "_"), kp), "_")
2014+ let kG = ah(av)
2015+ let kH = valueOrElse(getInteger(kG), 0)
2016+ $Tuple2((((((((((((((((eW._5 :+ (if ((size(eW._7) > 0))
2017+ then StringEntry(kz, makeString_11C(eW._7, "_"))
2018+ else DeleteEntry(kz))) :+ IntegerEntry(kG, if ((eW._8 > kH))
19832019 then 0
1984- else (kB - eT._8))) :+ IntegerEntry(ea(), (iA + 1))) :+ iB) :+ StringEntry(ed(ky), kz)) :+ StringEntry(bf(kz), c)) :+ StringEntry(eg(ky), c)) :+ IntegerEntry(bj(as, kz), eT._2)) :+ IntegerEntry(bq(kz), ag)) :+ IntegerEntry(ef(kz, c), ag)) :+ StringEntry(hx, makeString([ib[aY], eT._4, jG, ib[bb]], ":"))) :+ StringEntry(dg(), makeString(eT._6, "_"))) :+ StringEntry(dh(di), makeString(eT._10, "_"))) :+ StringEntry(bA(u), makeString([di, "L", kz], "_"))) :+ ScriptTransfer(addressFromStringValue(c), 1, bg)), kz)
1985- }
1986- }
1987-
1988-
1989-func kC (c,ki) = kf("M", 3, "SSSS", c, ki, 0)
1990-
1991-
1992-func kD (c,ki) = kf("L", 4, "SMM", c, ki, (cp * 4))
1993-
1994-
1995-func kE (c,ki) = kf("XL", 5, "SSSML", c, ki, (cp * 47))
1996-
1997-
1998-func kF (c,ki) = kf("XXL", 6, "LXL", c, ki, (cp * 54))
1999-
2000-
2001-func kG (c,ki) = {
2002- let cm = size(ki)
2003- if ((4 == cm))
2004- then kC(c, ki)
2005- else if ((3 == cm))
2006- then kD(c, ki)
2007- else if ((5 == cm))
2008- then kE(c, ki)
2009- else if ((2 == cm))
2010- then kF(c, ki)
2020+ else (kH - eW._8))) :+ IntegerEntry(ed(), (iG + 1))) :+ iH) :+ StringEntry(eg(kE), kF)) :+ StringEntry(bz(kF), av)) :+ StringEntry(ej(kE), av)) :+ IntegerEntry(bD(aL, kF), eW._2)) :+ IntegerEntry(bJ(kF), dB)) :+ IntegerEntry(ei(kF, av), dB)) :+ StringEntry(hD, makeString([ih[bs], eW._4, jM, ih[bv]], ":"))) :+ StringEntry(ac(), makeString(eW._6, "_"))) :+ StringEntry(ad(ae), makeString(eW._10, "_"))) :+ StringEntry(bU(bO), makeString([ae, "L", kF], "_"))) :+ ScriptTransfer(addressFromStringValue(av), 1, bA)), kF)
2021+ }
2022+ }
2023+
2024+
2025+func kI (av,ko) = kl("M", 3, "SSSS", av, ko, 0)
2026+
2027+
2028+func kJ (av,ko) = kl("L", 4, "SMM", av, ko, (k * 4))
2029+
2030+
2031+func kK (av,ko) = kl("XL", 5, "SSSML", av, ko, (k * 47))
2032+
2033+
2034+func kL (av,ko) = kl("XXL", 6, "LXL", av, ko, (k * 54))
2035+
2036+
2037+func kM (av,ko) = {
2038+ let g = size(ko)
2039+ if ((4 == g))
2040+ then kI(av, ko)
2041+ else if ((3 == g))
2042+ then kJ(av, ko)
2043+ else if ((5 == g))
2044+ then kK(av, ko)
2045+ else if ((2 == g))
2046+ then kL(av, ko)
20112047 else throw("Unknown merge")
20122048 }
20132049
20142050
2015-func kH (gv) = if (if ((gv.originCaller != cQ))
2016- then valueOrElse(getBoolean(dw()), false)
2051+func kN (gy) = if (if ((gy.originCaller != L))
2052+ then valueOrElse(getBoolean(at()), false)
20172053 else false)
20182054 then throw("Contracts are under maintenance")
2019- else [StringEntry(dx(toString(gv.originCaller)), toBase58String(gv.transactionId))]
2020-
2021-
2022-@Callable(gv)
2023-func constructorV1 (kI) = if ((gv.caller != this))
2055+ else [StringEntry(au(toString(gy.originCaller)), toBase58String(gy.transactionId))]
2056+
2057+
2058+func kO (av,bI) = {
2059+ let hR = bH(bI)
2060+ let kP = split(value(assetInfo(fromBase58String(bI))).description, "_")
2061+ let ar = kP[T]
2062+ let jc = aq(ar)
2063+ let hT = valueOrElse(getInteger(bJ(bI)), 0)
2064+ let hS = (jc / p)
2065+ let gu = gA(kP[U])
2066+ let hI = hQ(hR, hS, hT)
2067+ let gN = split(hI[bk], "_")
2068+ let jn = bC(bI)
2069+ let jo = getIntegerValue(jn)
2070+ let gE = (aH() - jo)
2071+ if ((0 > gE))
2072+ then throw(((("Saved timestamp is in future, saved = " + toString(jo)) + ", final = ") + toString(aH())))
2073+ else {
2074+ let js = jb(bI, jc)
2075+ let kQ = gI(gN, gu, gE, hS, js)
2076+ let jd = valueOrElse(getInteger(bD(aL, bI)), 0)
2077+ let kR = ((jc * o) + ((((jc * hT) + jd) * o) / 5))
2078+ let kS = (fraction(kQ._2, aR, o) * aU)
2079+ func kT (eL,hL) = (eL + parseIntValue(hL))
2080+
2081+ let kU = {
2082+ let eN = split(hI[bl], "_")
2083+ let eO = size(eN)
2084+ let eP = 0
2085+ func eQ (eR,eS) = if ((eS >= eO))
2086+ then eR
2087+ else kT(eR, eN[eS])
2088+
2089+ func eT (eR,eS) = if ((eS >= eO))
2090+ then eR
2091+ else throw("List size exceeds 6")
2092+
2093+ eT(eQ(eQ(eQ(eQ(eQ(eQ(eP, 0), 1), 2), 3), 4), 5), 6)
2094+ }
2095+ let kV = (fraction(kU, (2 * aR), o) * aU)
2096+ let kW = if ((hI[bm] == ""))
2097+ then nil
2098+ else split_4C(hI[bm], "_")
2099+ func hM (eL,hL) = {
2100+ let fv = eL._2
2101+ let kX = parseIntValue(split(bd[fv], "_")[be])
2102+ $Tuple2((eL._1 + ((parseIntValue(hL) * kX) * n)), (fv + 1))
2103+ }
2104+
2105+ let kY = {
2106+ let eN = kW
2107+ let eO = size(eN)
2108+ let eP = $Tuple2(0, 0)
2109+ func hx (eR,eS) = if ((eS >= eO))
2110+ then eR
2111+ else hM(eR, eN[eS])
2112+
2113+ func hy (eR,eS) = if ((eS >= eO))
2114+ then eR
2115+ else throw("List size exceeds 24")
2116+
2117+ hy(hx(hx(hx(hx(hx(hx(hx(hx(hx(hx(hx(hx(hx(hx(hx(hx(hx(hx(hx(hx(hx(hx(hx(hx(eP, 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)
2118+ }
2119+ let kZ = (fraction(kY._1, (2 * aR), o) * aU)
2120+ $Tuple4(kR, kS, kV, kZ)
2121+ }
2122+ }
2123+
2124+
2125+func la (av,bO) = {
2126+ let gk = cU(bO)
2127+ let lb = split(valueOrElse(getString(gk), ",;,_,;,_,;,_,;,_,;,_,;,"), "_")
2128+ let hD = bT(bO)
2129+ let ih = hC(hD)
2130+ let gn = gc(lb, fr(ih[bv]), true, nil)
2131+ let lc = fw(gn)
2132+ func hK (eL,hL) = (eL + parseIntValue(hL))
2133+
2134+ let jA = {
2135+ let eN = split(ih[bt], "_")
2136+ let eO = size(eN)
2137+ let eP = 0
2138+ func eQ (eR,eS) = if ((eS >= eO))
2139+ then eR
2140+ else hK(eR, eN[eS])
2141+
2142+ func eT (eR,eS) = if ((eS >= eO))
2143+ then eR
2144+ else throw("List size exceeds 6")
2145+
2146+ eT(eQ(eQ(eQ(eQ(eQ(eQ(eP, 0), 1), 2), 3), 4), 5), 6)
2147+ }
2148+ let kS = (fraction(jA, aR, o) * aU)
2149+ let ld = {
2150+ let eN = split(ih[bu], "_")
2151+ let eO = size(eN)
2152+ let eP = 0
2153+ func hx (eR,eS) = if ((eS >= eO))
2154+ then eR
2155+ else hK(eR, eN[eS])
2156+
2157+ func hy (eR,eS) = if ((eS >= eO))
2158+ then eR
2159+ else throw("List size exceeds 6")
2160+
2161+ hy(hx(hx(hx(hx(hx(hx(eP, 0), 1), 2), 3), 4), 5), 6)
2162+ }
2163+ let kV = (fraction(ld, (2 * aR), o) * aU)
2164+ let kW = if ((lc == ""))
2165+ then nil
2166+ else split_4C(lc, "_")
2167+ func hM (eL,hL) = {
2168+ let fv = eL._2
2169+ let kX = parseIntValue(split(bd[fv], "_")[be])
2170+ $Tuple2((eL._1 + ((parseIntValue(hL) * kX) * n)), (fv + 1))
2171+ }
2172+
2173+ let le = {
2174+ let eN = kW
2175+ let eO = size(eN)
2176+ let eP = $Tuple2(0, 0)
2177+ func hA (eR,eS) = if ((eS >= eO))
2178+ then eR
2179+ else hM(eR, eN[eS])
2180+
2181+ func hB (eR,eS) = if ((eS >= eO))
2182+ then eR
2183+ else throw("List size exceeds 24")
2184+
2185+ hB(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(hA(eP, 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)
2186+ }
2187+ let kZ = (fraction(le._1, (2 * aR), o) * aU)
2188+ $Tuple3(kS, kV, kZ)
2189+ }
2190+
2191+
2192+@Callable(gy)
2193+func constructorV1 (lf) = if ((gy.caller != this))
20242194 then throw("Permission denied")
2025- else [StringEntry(cK(), kI)]
2026-
2027-
2028-
2029-@Callable(gv)
2030-func saveInteger (cC,ez) = if ((gv.caller != this))
2195+ else [StringEntry(F(), lf)]
2196+
2197+
2198+
2199+@Callable(gy)
2200+func saveInteger (x,eC) = if ((gy.caller != this))
20312201 then throw("saveInteger is not public method")
2032- else [IntegerEntry(cC, ez)]
2033-
2034-
2035-
2036-@Callable(gv)
2037-func setBlocked (kJ) = if ((gv.caller != this))
2202+ else [IntegerEntry(x, eC)]
2203+
2204+
2205+
2206+@Callable(gy)
2207+func setBlocked (lg) = if ((gy.caller != this))
20382208 then throw("permission denied")
2039- else [BooleanEntry(dw(), kJ)]
2040-
2041-
2042-
2043-@Callable(gv)
2209+ else [BooleanEntry(at(), lg)]
2210+
2211+
2212+
2213+@Callable(gy)
20442214 func stakeLand () = {
2045- let kK = kH(gv)
2046- if ((size(gv.payments) != 1))
2215+ let lh = kN(gy)
2216+ if ((size(gy.payments) != 1))
20472217 then throw("Exactly one payment required")
20482218 else {
2049- let kL = value(gv.payments[0])
2050- let bg = value(kL.assetId)
2051- let cB = toString(gv.caller)
2052- if ((kL.amount != 1))
2053- then throw((("NFT " + ap) + " token should be attached as payment"))
2219+ let li = value(gy.payments[0])
2220+ let bA = value(li.assetId)
2221+ let w = toString(gy.caller)
2222+ if ((li.amount != 1))
2223+ then throw((("NFT " + aI) + " token should be attached as payment"))
20542224 else {
2055- let jg = value(assetInfo(bg))
2056- if ((jg.issuer != this))
2225+ let jm = value(assetInfo(bA))
2226+ if ((jm.issuer != this))
20572227 then throw("Unknown issuer of token")
2058- else if (!(contains(jg.name, ap)))
2059- then throw((("Only NFT " + ap) + " tokens are accepted"))
2228+ else if (!(contains(jm.name, aI)))
2229+ then throw((("Only NFT " + aI) + " tokens are accepted"))
20602230 else {
2061- let kM = drop(jg.name, 4)
2062- let ee = if (contains(kM, "XXL"))
2063- then dropRight(kM, 3)
2064- else if (contains(kM, "XL"))
2065- then dropRight(kM, 2)
2066- else dropRight(kM, 1)
2067- if (!(isDefined(parseInt(ee))))
2068- then throw(("Cannot parse land number from " + jg.name))
2231+ let lj = drop(jm.name, 4)
2232+ let eh = if (contains(lj, "XXL"))
2233+ then dropRight(lj, 3)
2234+ else if (contains(lj, "XL"))
2235+ then dropRight(lj, 2)
2236+ else dropRight(lj, 1)
2237+ if (!(isDefined(parseInt(eh))))
2238+ then throw(("Cannot parse land number from " + jm.name))
20692239 else {
2070- let bp = toBase58String(bg)
2071- let jh = bi(bp)
2072- if (isDefined(getInteger(jh)))
2073- then throw((("NFT " + jg.name) + " is already staked"))
2240+ let bI = toBase58String(bA)
2241+ let jn = bC(bI)
2242+ if (isDefined(getInteger(jn)))
2243+ then throw((("NFT " + jm.name) + " is already staked"))
20742244 else {
2075- let jk = split(jg.description, "_")
2076- let gr = gx(jk[cY])
2077- let iW = dt(jk[cX])
2078- let hM = (iW / cu)
2079- let eS = gw(gr, hM, 1)
2080- let kN = dh(jk[cZ])
2081- let kx = split(valueOrElse(getString(kN), "0_0_0_0_0_0"), "_")
2082- let kO = makeString(gp(kx, gr, hM, 1), "_")
2083- let kt = dj(cB)
2084- let ku = getString(kt)
2085- let kq = if (isDefined(ku))
2086- then split_51C(value(ku), "_")
2245+ let jq = split(jm.description, "_")
2246+ let gu = gA(jq[U])
2247+ let jc = aq(jq[T])
2248+ let hS = (jc / p)
2249+ let eV = gz(gu, hS, 1)
2250+ let lk = ad(jq[V])
2251+ let kD = split(valueOrElse(getString(lk), "0_0_0_0_0_0"), "_")
2252+ let ll = makeString(gs(kD, gu, hS, 1), "_")
2253+ let kz = af(w)
2254+ let kA = getString(kz)
2255+ let kw = if (isDefined(kA))
2256+ then split_51C(value(kA), "_")
20872257 else nil
2088- if (containsElement(kq, bp))
2089- then throw(("Your staked lands already contain " + bp))
2090- else if ((size(kq) >= au))
2091- then throw((("Your already staked max (" + toString(au)) + ") lands"))
2258+ if (containsElement(kw, bI))
2259+ then throw(("Your staked lands already contain " + bI))
2260+ else if ((size(kw) >= aN))
2261+ then throw((("Your already staked max (" + toString(aN)) + ") lands"))
20922262 else {
2093- let hN = valueOrElse(getInteger(bq(bp)), 0)
2094- let kA = dk(cB)
2095- let kP = valueOrElse(getInteger(kA), 0)
2096- let kQ = invoke(cT, "onStakeUnstakeLand", [cB], nil)
2097- $Tuple2(([IntegerEntry(jh, lastBlock.timestamp), IntegerEntry(bl(ap, bp, cB), lastBlock.timestamp), StringEntry(kt, makeString_11C((kq :+ bp), "_")), IntegerEntry(kA, (kP + iW)), StringEntry(bf(bp), cB), StringEntry(eg(ee), cB), IntegerEntry(ef(bp, cB), hN), StringEntry(dg(), eS), StringEntry(kN, kO)] ++ kK), kQ)
2263+ let hT = valueOrElse(getInteger(bJ(bI)), 0)
2264+ let kG = ah(w)
2265+ let lm = valueOrElse(getInteger(kG), 0)
2266+ let ln = invoke(P, "onStakeUnstakeLand", [w], nil)
2267+ $Tuple2(([IntegerEntry(jn, lastBlock.timestamp), IntegerEntry(bF(aI, bI, w), lastBlock.timestamp), StringEntry(kz, makeString_11C((kw :+ bI), "_")), IntegerEntry(kG, (lm + jc)), StringEntry(bz(bI), w), StringEntry(ej(eh), w), IntegerEntry(ei(bI, w), hT), StringEntry(ac(), eV), StringEntry(lk, ll)] ++ lh), ln)
20982268 }
20992269 }
21002270 }
21012271 }
21022272 }
21032273 }
21042274 }
21052275
21062276
21072277
2108-@Callable(gv)
2109-func unstakeLand (jc) = {
2110- let kK = kH(gv)
2111- if ((size(gv.payments) != 0))
2278+@Callable(gy)
2279+func unstakeLand (ji) = {
2280+ let lh = kN(gy)
2281+ if ((size(gy.payments) != 0))
21122282 then throw("No payments required")
21132283 else {
2114- let c = toString(gv.caller)
2115- let fN = ja(c, em, jc)
2116- let bp = fN._2
2117- let jk = fN._3
2118- let kt = dj(c)
2119- let gr = gx(jk[cY])
2120- let iW = dt(jk[cX])
2121- let hM = (iW / cu)
2122- let eS = gw(gr, hM, -1)
2123- let kN = dh(jk[cZ])
2124- let kx = split(valueOrElse(getString(kN), "0_0_0_0_0_0"), "_")
2125- let kO = makeString(gp(kx, gr, hM, -1), "_")
2126- let jH = jx(c, bp, iW, em)
2127- let kq = split_51C(valueOrElse(getString(kt), ""), "_")
2128- let cP = indexOf(kq, bp)
2129- if (!(isDefined(cP)))
2130- then throw(("Your staked lands don't contain " + bp))
2284+ let av = toString(gy.caller)
2285+ let fQ = jg(av, ep, ji)
2286+ let bI = fQ._2
2287+ let jq = fQ._3
2288+ let kz = af(av)
2289+ let gu = gA(jq[U])
2290+ let jc = aq(jq[T])
2291+ let hS = (jc / p)
2292+ let eV = gz(gu, hS, -1)
2293+ let lk = ad(jq[V])
2294+ let kD = split(valueOrElse(getString(lk), "0_0_0_0_0_0"), "_")
2295+ let ll = makeString(gs(kD, gu, hS, -1), "_")
2296+ let jN = jD(av, bI, jc, ep)
2297+ let kw = split_51C(valueOrElse(getString(kz), ""), "_")
2298+ let K = indexOf(kw, bI)
2299+ if (!(isDefined(K)))
2300+ then throw(("Your staked lands don't contain " + bI))
21312301 else {
2132- let bW = lastBlock.timestamp
2133- let kR = valueOrElse(getInteger(cS, bB(c)), 0)
2134- if ((kR >= bW))
2135- then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(kR)))
2302+ let cq = lastBlock.timestamp
2303+ let lo = valueOrElse(getInteger(O, bV(av)), 0)
2304+ if ((lo >= cq))
2305+ then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(lo)))
21362306 else {
2137- let kS = (valueOrElse(getInteger(cT, b(c)), 0) + cq)
2138- if ((kS > bW))
2139- then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString(kS)))
2307+ let lp = (valueOrElse(getInteger(P, dK(av)), 0) + l)
2308+ if ((lp > cq))
2309+ then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString(lp)))
21402310 else {
2141- let kA = dk(c)
2142- let kB = valueOrElse(getInteger(kA), 0)
2143- let kT = if ((iW > kB))
2311+ let kG = ah(av)
2312+ let kH = valueOrElse(getInteger(kG), 0)
2313+ let lq = if ((jc > kH))
21442314 then 0
2145- else (kB - iW)
2146- let kQ = invoke(cT, "onStakeUnstakeLand", [c], nil)
2147- $Tuple2(([ScriptTransfer(gv.caller, 1, fromBase58String(bp)), DeleteEntry(bi(bp)), DeleteEntry(bl(ap, bp, c)), StringEntry(dg(), eS), StringEntry(kN, kO), StringEntry(jH._2, makeString(jH._3, ":")), if ((size(kq) > 1))
2148- then StringEntry(kt, makeString_11C(removeByIndex(kq, value(cP)), "_"))
2149- else DeleteEntry(kt), IntegerEntry(kA, kT)] ++ kK), kQ)
2315+ else (kH - jc)
2316+ let ln = invoke(P, "onStakeUnstakeLand", [av], nil)
2317+ $Tuple2(([ScriptTransfer(gy.caller, 1, fromBase58String(bI)), DeleteEntry(bC(bI)), DeleteEntry(bF(aI, bI, av)), StringEntry(ac(), eV), StringEntry(lk, ll), StringEntry(jN._2, makeString(jN._3, ":")), if ((size(kw) > 1))
2318+ then StringEntry(kz, makeString_11C(removeByIndex(kw, value(K)), "_"))
2319+ else DeleteEntry(kz), IntegerEntry(kG, lq)] ++ lh), ln)
21502320 }
21512321 }
21522322 }
21532323 }
21542324 }
21552325
21562326
21572327
2158-@Callable(gv)
2328+@Callable(gy)
2329+func unstakeLandCallback (bI,av) = if ((toString(gy.caller) != j))
2330+ then throw("Permission denied")
2331+ else {
2332+ let lr = kO(av, bI)
2333+ let ln = invoke(P, "onStakeUnstakeLand", [av], nil)
2334+ $Tuple2([ScriptTransfer(addressFromStringValue(av), 1, fromBase58String(bI)), DeleteEntry(bC(bI)), DeleteEntry(bF(aI, bI, av))], $Tuple5(lr._1, lr._2, lr._3, lr._4, ln))
2335+ }
2336+
2337+
2338+
2339+@Callable(gy)
2340+func unstakeLandREADONLY (bI,av) = {
2341+ let lr = kO(av, bI)
2342+ $Tuple2(nil, lr)
2343+ }
2344+
2345+
2346+
2347+@Callable(gy)
2348+func unstakeLandsFinalizeCallback (av) = if ((toString(gy.caller) != j))
2349+ then throw("Permission denied")
2350+ else $Tuple2([DeleteEntry(af(av)), DeleteEntry(ah(av))], 0)
2351+
2352+
2353+
2354+@Callable(gy)
21592355 func stakeDuck () = {
2160- let kK = kH(gv)
2161- if ((size(gv.payments) != 1))
2356+ let lh = kN(gy)
2357+ if ((size(gy.payments) != 1))
21622358 then throw("Exactly one payment required")
21632359 else {
2164- let kL = value(gv.payments[0])
2165- let bg = value(kL.assetId)
2166- let cB = toString(gv.caller)
2167- if ((kL.amount != 1))
2168- then throw((("NFT " + aq) + " token should be attached as payment"))
2360+ let li = value(gy.payments[0])
2361+ let bA = value(li.assetId)
2362+ let w = toString(gy.caller)
2363+ if ((li.amount != 1))
2364+ then throw((("NFT " + aJ) + " token should be attached as payment"))
21692365 else {
2170- let jg = value(assetInfo(bg))
2171- let kU = if (if (ci)
2172- then (jg.issuer == this)
2366+ let jm = value(assetInfo(bA))
2367+ let ls = if (if (c)
2368+ then (jm.issuer == this)
21732369 else false)
2174- then contains(jg.name, ar)
2370+ then contains(jm.name, aK)
21752371 else false
2176- if (if (if ((jg.issuer != dJ))
2177- then (jg.issuer != dK)
2372+ if (if (if ((jm.issuer != dM))
2373+ then (jm.issuer != dN)
21782374 else false)
2179- then !(kU)
2375+ then !(ls)
21802376 else false)
2181- then throw((((("Unknown issuer of " + aq) + " or ") + ar) + " token"))
2182- else if (if (!(contains(jg.name, aq)))
2183- then !(kU)
2377+ then throw((((("Unknown issuer of " + aJ) + " or ") + aK) + " token"))
2378+ else if (if (!(contains(jm.name, aJ)))
2379+ then !(ls)
21842380 else false)
2185- then throw((((("Only NFT " + aq) + " or ") + ar) + " tokens are accepted"))
2381+ then throw((((("Only NFT " + aJ) + " or ") + aK) + " tokens are accepted"))
21862382 else {
2187- let kV = toBase58String(bg)
2188- let jh = bi(kV)
2189- if (isDefined(getInteger(jh)))
2190- then throw((("NFT " + jg.name) + " is already staked"))
2191- else if (isDefined(getString(by(cB))))
2192- then throw(("You already staked one duck: " + jg.name))
2383+ let lt = toBase58String(bA)
2384+ let jn = bC(lt)
2385+ if (isDefined(getInteger(jn)))
2386+ then throw((("NFT " + jm.name) + " is already staked"))
2387+ else if (isDefined(getString(bS(w))))
2388+ then throw(("You already staked one duck: " + jm.name))
21932389 else {
2194- let kW = bA(kV)
2195- let bT = getString(kW)
2196- let hx = bz(kV)
2197- let kX = getString(hx)
2198- let iP = t(kV)
2199- let iQ = ab(valueOrElse(getInteger(x(kV)), 0))
2200- let kY = valueOrElse(getInteger(iP), iQ)
2201- ([IntegerEntry(jh, lastBlock.timestamp), IntegerEntry(bl(aq, toBase58String(bg), cB), lastBlock.timestamp), StringEntry(bx(kV), cB), StringEntry(by(cB), kV)] ++ (if (isDefined(bT))
2390+ let lu = bU(lt)
2391+ let cn = getString(lu)
2392+ let hD = bT(lt)
2393+ let lv = getString(hD)
2394+ let iV = cP(lt)
2395+ let iW = dw(valueOrElse(getInteger(cS(lt)), 0))
2396+ let lw = valueOrElse(getInteger(iV), iW)
2397+ ([IntegerEntry(jn, lastBlock.timestamp), IntegerEntry(bF(aJ, toBase58String(bA), w), lastBlock.timestamp), StringEntry(bR(lt), w), StringEntry(bS(w), lt)] ++ (if (isDefined(cn))
22022398 then nil
2203- else ([StringEntry(kW, ax)] ++ (if (isDefined(kX))
2399+ else ([StringEntry(lu, aQ)] ++ (if (isDefined(lv))
22042400 then nil
2205- else (([StringEntry(hx, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(iP, kY)) ++ kK)))))
2401+ else (([StringEntry(hD, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(iV, lw)) ++ lh)))))
22062402 }
22072403 }
22082404 }
22092405 }
22102406 }
22112407
22122408
22132409
2214-@Callable(gv)
2215-func unstakeDuck (kV) = {
2216- let kK = kH(gv)
2217- if ((size(gv.payments) != 0))
2410+@Callable(gy)
2411+func unstakeDuck (lt) = {
2412+ let lh = kN(gy)
2413+ if ((size(gy.payments) != 0))
22182414 then throw("No payments required")
22192415 else {
2220- let bg = fromBase58String(kV)
2221- let cB = toString(gv.caller)
2222- let jg = value(assetInfo(bg))
2223- let jh = bi(kV)
2224- if (!(isDefined(getInteger(jh))))
2225- then throw((("NFT " + jg.name) + " is not staked"))
2226- else if (!(isDefined(getString(by(cB)))))
2227- then throw((("The duck " + jg.name) + " is not staked"))
2416+ let bA = fromBase58String(lt)
2417+ let w = toString(gy.caller)
2418+ let jm = value(assetInfo(bA))
2419+ let jn = bC(lt)
2420+ if (!(isDefined(getInteger(jn))))
2421+ then throw((("NFT " + jm.name) + " is not staked"))
2422+ else if (!(isDefined(getString(bS(w)))))
2423+ then throw((("The duck " + jm.name) + " is not staked"))
22282424 else {
2229- let jj = valueOrErrorMessage(getString(bx(kV)), (("NFT " + jg.name) + " is orphaned"))
2230- if ((jj != cB))
2425+ let jp = valueOrErrorMessage(getString(bR(lt)), (("NFT " + jm.name) + " is orphaned"))
2426+ if ((jp != w))
22312427 then throw("Staked NFT is not yours")
2232- else if (ke(kV))
2428+ else if (kk(lt))
22332429 then throw("unstakeDuck_checkTournament")
22342430 else {
2235- let iP = t(kV)
2236- let iQ = ab(valueOrElse(getInteger(x(kV)), 0))
2237- let an = valueOrElse(getInteger(iP), iQ)
2238- if ((iQ > an))
2239- then throw((("Please heal your duck to " + toString(iQ)) + "hp before unstaking"))
2240- else ([ScriptTransfer(gv.caller, 1, bg), DeleteEntry(jh), DeleteEntry(iP), DeleteEntry(bA(kV)), DeleteEntry(bx(kV)), DeleteEntry(bl(aq, kV, cB)), DeleteEntry(by(cB))] ++ kK)
2431+ let iV = cP(lt)
2432+ let iW = dw(valueOrElse(getInteger(cS(lt)), 0))
2433+ let dH = valueOrElse(getInteger(iV), iW)
2434+ if ((iW > dH))
2435+ then throw((("Please heal your duck to " + toString(iW)) + "hp before unstaking"))
2436+ else ([ScriptTransfer(gy.caller, 1, bA), DeleteEntry(jn), DeleteEntry(iV), DeleteEntry(bU(lt)), DeleteEntry(bR(lt)), DeleteEntry(bF(aJ, lt, w)), DeleteEntry(bS(w))] ++ lh)
22412437 }
22422438 }
22432439 }
22442440 }
22452441
22462442
22472443
2248-@Callable(gv)
2249-func claimRes (ez,kZ) = {
2250- let kK = kH(gv)
2251- if ((size(gv.payments) != 0))
2444+@Callable(gy)
2445+func unstakeDuckCallback (bO,av) = if ((toString(gy.caller) != j))
2446+ then throw("Permission denied")
2447+ else {
2448+ let lr = la(av, bO)
2449+ $Tuple2([ScriptTransfer(addressFromStringValue(av), 1, fromBase58String(bO)), DeleteEntry(bC(bO)), DeleteEntry(bR(bO)), DeleteEntry(bF(aJ, bO, av)), DeleteEntry(bS(av))], lr)
2450+ }
2451+
2452+
2453+
2454+@Callable(gy)
2455+func unstakeDuckREADONLY (bO,av) = {
2456+ let lr = la(av, bO)
2457+ $Tuple2(nil, lr)
2458+ }
2459+
2460+
2461+
2462+@Callable(gy)
2463+func claimRes (eC,lx) = {
2464+ let lh = kN(gy)
2465+ if ((size(gy.payments) != 0))
22522466 then throw("No payments required")
22532467 else {
2254- let c = toString(gv.originCaller)
2255- let fa = jl(c, ez, em, kZ)
2256- let u = valueOrErrorMessage(getString(by(c)), "You don't have a duck staked")
2257- $Tuple2(((((fa._1 ++ jT(u, fraction(N, ez, ct))._1) :+ StringEntry(fa._2, makeString(fa._3, ":"))) :+ StringEntry(fa._4, makeString(fa._5, ":"))) ++ kK), fa._3[aZ])
2258- }
2259- }
2260-
2261-
2262-
2263-@Callable(gv)
2264-func claimResToWH (ez,kZ) = {
2265- let kK = kH(gv)
2266- if ((size(gv.payments) != 0))
2468+ let av = toString(gy.originCaller)
2469+ let fd = jr(av, eC, ep, lx)
2470+ let bO = valueOrErrorMessage(getString(bS(av)), "You don't have a duck staked")
2471+ $Tuple2(((((fd._1 ++ jZ(bO, fraction(di, eC, o))._1) :+ StringEntry(fd._2, makeString(fd._3, ":"))) :+ StringEntry(fd._4, makeString(fd._5, ":"))) ++ lh), fd._3[bt])
2472+ }
2473+ }
2474+
2475+
2476+
2477+@Callable(gy)
2478+func claimResToWH (eC,lx) = {
2479+ let lh = kN(gy)
2480+ if ((size(gy.payments) != 0))
22672481 then throw("No payments required")
22682482 else {
2269- let c = toString(gv.originCaller)
2270- let fa = jl(c, ez, el, kZ)
2271- $Tuple2(((((fa._1 ++ jU(c, fraction(N, ez, ct))._1) :+ StringEntry(fa._2, makeString(fa._3, ":"))) :+ StringEntry(fa._4, makeString(fa._5, ":"))) ++ kK), fa._5[aQ])
2272- }
2273- }
2274-
2275-
2276-
2277-@Callable(gv)
2278-func flight (iE,iF) = {
2279- let kK = kH(gv)
2280- if ((size(gv.payments) != 0))
2483+ let av = toString(gy.originCaller)
2484+ let fd = jr(av, eC, eo, lx)
2485+ $Tuple2(((((fd._1 ++ ka(av, fraction(di, eC, o))._1) :+ StringEntry(fd._2, makeString(fd._3, ":"))) :+ StringEntry(fd._4, makeString(fd._5, ":"))) ++ lh), fd._5[bk])
2486+ }
2487+ }
2488+
2489+
2490+
2491+@Callable(gy)
2492+func flight (iK,iL) = {
2493+ let lh = kN(gy)
2494+ if ((size(gy.payments) != 0))
22812495 then throw("No payments required")
22822496 else {
2283- let bC = toString(gv.caller)
2284- let ha = iD(bC, iE, iF)
2285- let iJ = ha._1
2286- let u = ha._2
2287- let kW = bA(u)
2288- let je = valueOrElse(getString(kW), ax)
2289- let iL = ha._4
2290- if ((iL == je))
2497+ let bW = toString(gy.caller)
2498+ let hg = iJ(bW, iK, iL)
2499+ let iP = hg._1
2500+ let bO = hg._2
2501+ let lu = bU(bO)
2502+ let jk = valueOrElse(getString(lu), aQ)
2503+ let iR = hg._4
2504+ if ((iR == jk))
22912505 then throw("You can't fly to the same location")
22922506 else {
2293- let ce = split(iL, "_")
2294- let la = (ce[bd] == "T")
2295- let lb = (ce[bd] == "D")
2296- let gh = z(u)
2297- let lc = valueOrElse(getString(gh), ",;,_,;,_,;,_,;,_,;,_,;,")
2298- let ld = fb(lc, ha._5)
2299- let le = ld._1
2300- let lf = ld._2
2301- let hp = ld._3
2302- let lg = if (!(bY(cU, je)))
2303- then if (la)
2304- then cc(je, iL, 5)
2305- else if (!(lb))
2306- then if ((iJ > 0))
2307- then $Tuple2(iL, iJ)
2308- else $Tuple2(je, 0)
2309- else if ((iJ > 0))
2507+ let cy = split(iR, "_")
2508+ let ly = (cy[bx] == "T")
2509+ let lz = (cy[bx] == "D")
2510+ let gk = cU(bO)
2511+ let lA = valueOrElse(getString(gk), ",;,_,;,_,;,_,;,_,;,_,;,")
2512+ let lB = fe(lA, hg._5)
2513+ let lC = lB._1
2514+ let lD = lB._2
2515+ let hv = lB._3
2516+ let lE = if (!(cs(Q, jk)))
2517+ then if (ly)
2518+ then cw(jk, iR, 5)
2519+ else if (!(lz))
2520+ then if ((iP > 0))
2521+ then $Tuple2(iR, iP)
2522+ else $Tuple2(jk, 0)
2523+ else if ((iP > 0))
23102524 then {
2311- let dn = invoke(this, "processDelivery", [u], nil)
2312- if ((dn == dn))
2313- then $Tuple2(je, iJ)
2525+ let ak = invoke(this, "processDelivery", [bO], nil)
2526+ if ((ak == ak))
2527+ then $Tuple2(jk, iP)
23142528 else throw("Strict value is not equal to itself.")
23152529 }
2316- else $Tuple2(je, 0)
2317- else if (bS(cU, je))
2318- then if (!(bS(cU, iL)))
2530+ else $Tuple2(jk, 0)
2531+ else if (cm(Q, jk))
2532+ then if (!(cm(Q, iR)))
23192533 then throw("Your duck is taking part in the tournament")
23202534 else {
2321- let lh = parseIntValue(ce[be])
2322- let li = split(je, "_")
2323- let bU = valueOrElse(getInteger(cU, bF), 0)
2324- if ((lh != (parseIntValue(li[be]) + 1)))
2325- then cc(je, iL, 7)
2326- else if ((iJ > 0))
2535+ let lF = parseIntValue(cy[by])
2536+ let lG = split(jk, "_")
2537+ let co = valueOrElse(getInteger(Q, bZ), 0)
2538+ if ((lF != (parseIntValue(lG[by]) + 1)))
2539+ then cw(jk, iR, 7)
2540+ else if ((iP > 0))
23272541 then {
2328- let lj = valueOrElse(getInteger(cU, bJ(bU, u)), 0)
2329- let lk = if ((lh > lj))
2330- then invoke(cU, "saveDuckResult", [u, lh], nil)
2542+ let lH = valueOrElse(getInteger(Q, cd(co, bO)), 0)
2543+ let lI = if ((lF > lH))
2544+ then invoke(Q, "saveDuckResult", [bO, lF], nil)
23312545 else unit
2332- if ((lk == lk))
2333- then $Tuple2(iL, iJ)
2546+ if ((lI == lI))
2547+ then $Tuple2(iR, iP)
23342548 else throw("Strict value is not equal to itself.")
23352549 }
2336- else $Tuple2(je, 0)
2550+ else $Tuple2(jk, 0)
23372551 }
2338- else throw(("Unknown curLocation:" + je))
2339- let ll = lg._1
2340- let lm = lg._2
2341- $Tuple2(((([StringEntry(kW, ll), StringEntry(gh, le), IntegerEntry(t(u), lm)] ++ kK) ++ (if (lf)
2342- then [StringEntry(F(u), "0_0_0_0_0")]
2343- else nil)) ++ jT(u, if ((iJ > 0))
2344- then O
2345- else P)._1), ha._3)
2552+ else throw(("Unknown curLocation:" + jk))
2553+ let lJ = lE._1
2554+ let lK = lE._2
2555+ $Tuple2(((([StringEntry(lu, lJ), StringEntry(gk, lC), IntegerEntry(cP(bO), lK)] ++ lh) ++ (if (lD)
2556+ then [StringEntry(da(bO), "0_0_0_0_0")]
2557+ else nil)) ++ jZ(bO, if ((iP > 0))
2558+ then dj
2559+ else dk)._1), hg._3)
23462560 }
23472561 }
23482562 }
23492563
23502564
23512565
2352-@Callable(gv)
2353-func heal (ln,lo,lp) = {
2354- let kK = kH(gv)
2355- if (if (if ((0 > ln))
2566+@Callable(gy)
2567+func heal (lL,lM,lN) = {
2568+ let lh = kN(gy)
2569+ if (if (if ((0 > lL))
23562570 then true
2357- else (0 > lo))
2571+ else (0 > lM))
23582572 then true
2359- else (0 > lp))
2573+ else (0 > lN))
23602574 then throw("Quantity cannot be negative")
23612575 else {
2362- let u = valueOrErrorMessage(getString(by(toString(gv.caller))), "You don't have a duck staked")
2363- if (ke(u))
2576+ let bO = valueOrErrorMessage(getString(bS(toString(gy.caller))), "You don't have a duck staked")
2577+ if (kk(bO))
23642578 then throw("heal_checkTournament")
23652579 else {
2366- let lq = [ln, lo, lp]
2367- let iP = t(u)
2368- let iQ = ab(valueOrElse(getInteger(x(u)), 0))
2369- let lr = valueOrElse(getInteger(iP), iQ)
2370- if ((lr >= iQ))
2371- then throw((("HP should be < " + toString(iQ)) + " to heal"))
2580+ let lO = [lL, lM, lN]
2581+ let iV = cP(bO)
2582+ let iW = dw(valueOrElse(getInteger(cS(bO)), 0))
2583+ let lP = valueOrElse(getInteger(iV), iW)
2584+ if ((lP >= iW))
2585+ then throw((("HP should be < " + toString(iW)) + " to heal"))
23722586 else {
2373- let hx = bz(u)
2374- let ib = hw(hx)
2375- let ls = if ((ib[bb] == ""))
2587+ let hD = bT(bO)
2588+ let ih = hC(hD)
2589+ let lQ = if ((ih[bv] == ""))
23762590 then nil
2377- else split_4C(ib[bb], "_")
2378- func lt (eI,cb) = {
2379- let dp = eI._2
2380- let gR = if ((size(ls) > dp))
2381- then parseIntValue(ls[dp])
2591+ else split_4C(ih[bv], "_")
2592+ func lR (eL,cv) = {
2593+ let am = eL._2
2594+ let gX = if ((size(lQ) > am))
2595+ then parseIntValue(lQ[am])
23822596 else 0
2383- if ((3 > dp))
2597+ if ((3 > am))
23842598 then {
2385- let lu = lq[dp]
2386- if ((lu > gR))
2387- then throw(((("You have only " + toString(gR)) + " of ") + aG[dp]))
2388- else $Tuple3((eI._1 :+ toString((gR - lu))), (dp + 1), (eI._3 + (parseIntValue(split(cb, "_")[aL]) * lu)))
2599+ let lS = lO[am]
2600+ if ((lS > gX))
2601+ then throw(((("You have only " + toString(gX)) + " of ") + ba[am]))
2602+ else $Tuple3((eL._1 :+ toString((gX - lS))), (am + 1), (eL._3 + (parseIntValue(split(cv, "_")[bf]) * lS)))
23892603 }
2390- else $Tuple3((eI._1 :+ toString(gR)), (dp + 1), eI._3)
2604+ else $Tuple3((eL._1 :+ toString(gX)), (am + 1), eL._3)
23912605 }
23922606
2393- let fa = {
2394- let eK = aJ
2395- let eL = size(eK)
2396- let eM = $Tuple3(nil, 0, 0)
2397- func eN (eO,eP) = if ((eP >= eL))
2398- then eO
2399- else lt(eO, eK[eP])
2400-
2401- func eQ (eO,eP) = if ((eP >= eL))
2402- then eO
2607+ let fd = {
2608+ let eN = bd
2609+ let eO = size(eN)
2610+ let eP = $Tuple3(nil, 0, 0)
2611+ func eQ (eR,eS) = if ((eS >= eO))
2612+ then eR
2613+ else lR(eR, eN[eS])
2614+
2615+ func eT (eR,eS) = if ((eS >= eO))
2616+ then eR
24032617 else throw("List size exceeds 50")
24042618
2405- eQ(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eM, 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)
2619+ eT(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eQ(eP, 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)
24062620 }
2407- let lv = min([iQ, (lr + fa._3)])
2408- $Tuple2((([IntegerEntry(iP, lv), StringEntry(hx, makeString_2C([ib[aY], ib[aZ], ib[ba], makeString(fa._1, "_")], ":"))] ++ kK) ++ jT(u, (Y * ((ln + lo) + lp)))._1), lv)
2621+ let lT = min([iW, (lP + fd._3)])
2622+ $Tuple2((([IntegerEntry(iV, lT), StringEntry(hD, makeString_2C([ih[bs], ih[bt], ih[bu], makeString(fd._1, "_")], ":"))] ++ lh) ++ jZ(bO, (dt * ((lL + lM) + lN)))._1), lT)
24092623 }
24102624 }
24112625 }
24122626 }
24132627
24142628
24152629
2416-@Callable(gv)
2630+@Callable(gy)
24172631 func healES () = {
2418- let kK = kH(gv)
2419- if ((size(gv.payments) != 1))
2632+ let lh = kN(gy)
2633+ if ((size(gy.payments) != 1))
24202634 then throw("Exactly one payment required")
24212635 else {
2422- let kL = value(gv.payments[0])
2423- if ((kL.assetId != cn))
2636+ let li = value(gy.payments[0])
2637+ if ((li.assetId != h))
24242638 then throw("Allowed USDT payment only!")
24252639 else {
2426- let u = valueOrErrorMessage(getString(by(toString(gv.caller))), "You don't have a duck staked")
2427- if (ke(u))
2640+ let bO = valueOrErrorMessage(getString(bS(toString(gy.caller))), "You don't have a duck staked")
2641+ if (kk(bO))
24282642 then throw("healES_checkTournament")
24292643 else {
2430- let iP = t(u)
2431- let iQ = ab(valueOrElse(getInteger(x(u)), 0))
2432- let lr = valueOrElse(getInteger(iP), iQ)
2433- if ((lr > 0))
2644+ let iV = cP(bO)
2645+ let iW = dw(valueOrElse(getInteger(cS(bO)), 0))
2646+ let lP = valueOrElse(getInteger(iV), iW)
2647+ if ((lP > 0))
24342648 then throw("HP should be 0 to call Emergency Service")
24352649 else {
2436- let hx = bz(u)
2437- let ib = hw(hx)
2438- let ls = if ((ib[bb] == ""))
2650+ let hD = bT(bO)
2651+ let ih = hC(hD)
2652+ let lQ = if ((ih[bv] == ""))
24392653 then nil
2440- else split_4C(ib[bb], "_")
2441- let lw = if ((size(ls) > 0))
2442- then parseIntValue(ls[0])
2654+ else split_4C(ih[bv], "_")
2655+ let lU = if ((size(lQ) > 0))
2656+ then parseIntValue(lQ[0])
24432657 else 0
2444- let lx = if ((size(ls) > 1))
2445- then parseIntValue(ls[1])
2658+ let lV = if ((size(lQ) > 1))
2659+ then parseIntValue(lQ[1])
24462660 else 0
2447- let ly = if ((size(ls) > 2))
2448- then parseIntValue(ls[2])
2661+ let lW = if ((size(lQ) > 2))
2662+ then parseIntValue(lQ[2])
24492663 else 0
2450- if (if (if ((lw > 0))
2664+ if (if (if ((lU > 0))
24512665 then true
2452- else (lx > 0))
2666+ else (lV > 0))
24532667 then true
2454- else (ly > 0))
2668+ else (lW > 0))
24552669 then throw("You have to use own Medical Kit")
24562670 else {
2457- let lz = getString(cR, bD())
2458- let lA = if (isDefined(lz))
2459- then split_4C(value(lz), "_")
2671+ let lX = getString(N, bX())
2672+ let lY = if (isDefined(lX))
2673+ then split_4C(value(lX), "_")
24602674 else nil
2461- let lB = if ((size(lA) > 0))
2462- then parseIntValue(lA[0])
2675+ let lZ = if ((size(lY) > 0))
2676+ then parseIntValue(lY[0])
24632677 else 0
2464- if ((0 >= lB))
2678+ if ((0 >= lZ))
24652679 then throw("There are no Medical Kits L1 at Emergency Service storage")
24662680 else {
2467- let lv = (lr + parseIntValue(split(aJ[0], "_")[aL]))
2468- let lC = makeString([toString((lB - 1)), removeByIndex(lA, 0)], "_")
2469- let cb = split(aJ[0], "_")
2470- let lD = ca(cb)
2471- let lE = fraction((lD * az), ay, (ct * aO))
2472- if ((kL.amount != lE))
2473- then throw(("Payment attached should be " + toString(lE)))
2681+ let lT = (lP + parseIntValue(split(bd[0], "_")[bf]))
2682+ let ma = makeString([toString((lZ - 1)), removeByIndex(lY, 0)], "_")
2683+ let cv = split(bd[0], "_")
2684+ let mb = cu(cv)
2685+ let mc = fraction((mb * aS), aR, (o * bi))
2686+ if ((li.amount != mc))
2687+ then throw(("Payment attached should be " + toString(mc)))
24742688 else {
2475- let fa = dl(invoke(cR, "updateEsStorage", [lC], [AttachedPayment(cn, lE)]))
2476- $Tuple2(((kK :+ IntegerEntry(iP, lv)) ++ jT(u, S)._1), fa)
2689+ let fd = ai(invoke(N, "updateEsStorage", [ma], [AttachedPayment(h, mc)]))
2690+ $Tuple2(((lh :+ IntegerEntry(iV, lT)) ++ jZ(bO, dn)._1), fd)
24772691 }
24782692 }
24792693 }
24802694 }
24812695 }
24822696 }
24832697 }
24842698 }
24852699
24862700
24872701
2488-@Callable(gv)
2489-func updateBackpack (u,lF) = if ((gv.caller != cR))
2702+@Callable(gy)
2703+func updateBackpack (bO,md) = if ((gy.caller != N))
24902704 then throw("permission denied")
2491- else $Tuple2([StringEntry(bz(u), lF)], lF)
2492-
2493-
2494-
2495-@Callable(gv)
2705+ else $Tuple2([StringEntry(bT(bO), md)], md)
2706+
2707+
2708+
2709+@Callable(gy)
24962710 func commitForRandom () = {
2497- let kK = kH(gv)
2498- let lG = (height + de)
2499- let c = toString(gv.caller)
2500- $Tuple2(([IntegerEntry(df(c), lG)] ++ kK), lG)
2501- }
2502-
2503-
2504-
2505-@Callable(gv)
2506-func revealRandom (dF) = {
2507- let kK = kH(gv)
2508- let c = toString(gv.caller)
2509- let lH = df(c)
2510- let lG = valueOrErrorMessage(getInteger(lH), "You have to commitForRandom() first!")
2511- if ((lG > height))
2512- then throw(("Random number is not ready yet, wait until height = " + toString(lG)))
2711+ let lh = kN(gy)
2712+ let me = (height + aa)
2713+ let av = toString(gy.caller)
2714+ $Tuple2(([IntegerEntry(ab(av), me)] ++ lh), me)
2715+ }
2716+
2717+
2718+
2719+@Callable(gy)
2720+func revealRandom (aD) = {
2721+ let lh = kN(gy)
2722+ let av = toString(gy.caller)
2723+ let mf = ab(av)
2724+ let me = valueOrErrorMessage(getInteger(mf), "You have to commitForRandom() first!")
2725+ if ((me > height))
2726+ then throw(("Random number is not ready yet, wait until height = " + toString(me)))
25132727 else {
2514- let dH = value(value(blockInfoByHeight(lG)).vrf)
2515- let dG = toBytes(valueOrElse(getString(dx(c)), ""))
2516- let lI = dE(dF, dG, dH)
2517- $Tuple2(([DeleteEntry(lH)] ++ kK), lI)
2518- }
2519- }
2520-
2521-
2522-
2523-@Callable(gv)
2728+ let aF = value(value(blockInfoByHeight(me)).vrf)
2729+ let aE = toBytes(valueOrElse(getString(au(av)), ""))
2730+ let mg = aC(aD, aE, aF)
2731+ $Tuple2(([DeleteEntry(mf)] ++ lh), mg)
2732+ }
2733+ }
2734+
2735+
2736+
2737+@Callable(gy)
25242738 func buySLand () = {
2525- let kK = kH(gv)
2526- if ((size(gv.payments) != 1))
2739+ let lh = kN(gy)
2740+ if ((size(gy.payments) != 1))
25272741 then throw("Exactly one payment required")
25282742 else {
2529- let kL = value(gv.payments[0])
2530- if ((kL.assetId != cn))
2743+ let li = value(gy.payments[0])
2744+ if ((li.assetId != h))
25312745 then throw("Allowed USDT payment only!")
2532- else if ((kL.amount != dQ))
2533- then throw(("Payment attached should be " + toString(dQ)))
2746+ else if ((li.amount != dT))
2747+ then throw(("Payment attached should be " + toString(dT)))
25342748 else {
2535- let fa = iw(gv.caller, gv.transactionId)
2536- let lJ = do(invoke(cV, "burnAcres", [dS], nil))
2537- $Tuple2((((fa._1 :+ ScriptTransfer(cR, kL.amount, cn)) ++ jU(toString(gv.caller), U)._1) ++ kK), $Tuple2(fa._2._1, lJ))
2749+ let fd = iC(gy.caller, gy.transactionId)
2750+ let mh = al(invoke(R, "burnAcres", [dV], nil))
2751+ $Tuple2((((fd._1 :+ ScriptTransfer(N, li.amount, h)) ++ ka(toString(gy.caller), dp)._1) ++ lh), $Tuple2(fd._2._1, mh))
25382752 }
25392753 }
25402754 }
25412755
25422756
25432757
2544-@Callable(gv)
2545-func expedition (iE,iF) = {
2546- let kK = kH(gv)
2547- if ((size(gv.payments) != 0))
2758+@Callable(gy)
2759+func expedition (iK,iL) = {
2760+ let lh = kN(gy)
2761+ if ((size(gy.payments) != 0))
25482762 then throw("No payments required")
25492763 else {
2550- let bC = toString(gv.caller)
2551- let ha = iD(bC, iE, iF)
2552- let u = ha._2
2553- let iP = t(u)
2554- let hx = bz(u)
2555- let ib = hw(hx)
2556- let jE = split(ib[ba], "_")
2557- let jG = makeString(eU(true, jE, dP), "_")
2558- let gh = z(u)
2559- let lc = valueOrElse(getString(gh), ",;,_,;,_,;,_,;,_,;,_,;,")
2560- let lK = fb(lc, ha._5)
2561- let le = lK._1
2562- let lf = lK._2
2563- let hp = lK._3
2564- let lL = iw(gv.caller, gv.transactionId)
2565- let iC = lL._2._1
2566- let fa = if ((0 >= ha._1))
2567- then $Tuple3([IntegerEntry(iP, 0), StringEntry(gh, le)], "", 0)
2568- else $Tuple3((lL._1 ++ (if (lf)
2569- then [StringEntry(F(u), "0_0_0_0_0")]
2570- else ((((nil :+ StringEntry(bA(u), makeString([lL._2._2, "L", iC], "_"))) :+ IntegerEntry(iP, ha._1)) :+ StringEntry(gh, le)) :+ StringEntry(hx, makeString([ib[aY], ib[aZ], jG, ib[bb]], ":"))))), iC, ha._3)
2571- if (ke(u))
2764+ let bW = toString(gy.caller)
2765+ let hg = iJ(bW, iK, iL)
2766+ let bO = hg._2
2767+ let iV = cP(bO)
2768+ let hD = bT(bO)
2769+ let ih = hC(hD)
2770+ let jK = split(ih[bu], "_")
2771+ let jM = makeString(eX(true, jK, dS), "_")
2772+ let gk = cU(bO)
2773+ let lA = valueOrElse(getString(gk), ",;,_,;,_,;,_,;,_,;,_,;,")
2774+ let mi = fe(lA, hg._5)
2775+ let lC = mi._1
2776+ let lD = mi._2
2777+ let hv = mi._3
2778+ let mj = iC(gy.caller, gy.transactionId)
2779+ let iI = mj._2._1
2780+ let fd = if ((0 >= hg._1))
2781+ then $Tuple3([IntegerEntry(iV, 0), StringEntry(gk, lC)], "", 0)
2782+ else $Tuple3((mj._1 ++ (if (lD)
2783+ then [StringEntry(da(bO), "0_0_0_0_0")]
2784+ else ((((nil :+ StringEntry(bU(bO), makeString([mj._2._2, "L", iI], "_"))) :+ IntegerEntry(iV, hg._1)) :+ StringEntry(gk, lC)) :+ StringEntry(hD, makeString([ih[bs], ih[bt], jM, ih[bv]], ":"))))), iI, hg._3)
2785+ if (kk(bO))
25722786 then throw("expedition_checkTournament")
25732787 else {
2574- let lJ = do(invoke(cV, "burnAcres", [dS], nil))
2575- $Tuple2(((fa._1 ++ jT(u, U)._1) ++ kK), $Tuple3(fa._2, fa._3, lJ))
2788+ let mh = al(invoke(R, "burnAcres", [dV], nil))
2789+ $Tuple2(((fd._1 ++ jZ(bO, dp)._1) ++ lh), $Tuple3(fd._2, fd._3, mh))
25762790 }
25772791 }
25782792 }
25792793
25802794
25812795
2582-@Callable(gv)
2796+@Callable(gy)
25832797 func buySLandForAcres () = {
2584- let kK = kH(gv)
2585- if ((size(gv.payments) != 1))
2798+ let lh = kN(gy)
2799+ if ((size(gy.payments) != 1))
25862800 then throw("exactly 1 payment must be attached")
25872801 else {
2588- let kL = gv.payments[0]
2589- let fh = kL.amount
2590- if (if (!(isDefined(kL.assetId)))
2802+ let li = gy.payments[0]
2803+ let fk = li.amount
2804+ if (if (!(isDefined(li.assetId)))
25912805 then true
2592- else (value(kL.assetId) != dd))
2806+ else (value(li.assetId) != Z))
25932807 then throw("ACRES payments only!")
2594- else if ((fh != dS))
2595- then throw(("Payment attached should be " + toString(dS)))
2808+ else if ((fk != dV))
2809+ then throw(("Payment attached should be " + toString(dV)))
25962810 else {
2597- let fa = iw(gv.caller, gv.transactionId)
2598- let lJ = do(invoke(cV, "burnAcres", [dS], [AttachedPayment(dd, fh)]))
2599- $Tuple2(((fa._1 ++ jU(toString(gv.caller), U)._1) ++ kK), $Tuple2(fa._2._1, lJ))
2811+ let fd = iC(gy.caller, gy.transactionId)
2812+ let mh = al(invoke(R, "burnAcres", [dV], [AttachedPayment(Z, fk)]))
2813+ $Tuple2(((fd._1 ++ ka(toString(gy.caller), dp)._1) ++ lh), $Tuple2(fd._2._1, mh))
26002814 }
26012815 }
26022816 }
26032817
26042818
26052819
2606-@Callable(gv)
2607-func upgradeInfra (bp) = {
2608- let kK = kH(gv)
2609- if ((size(gv.payments) != 0))
2820+@Callable(gy)
2821+func upgradeInfra (bI) = {
2822+ let lh = kN(gy)
2823+ if ((size(gy.payments) != 0))
26102824 then throw("No payments required")
26112825 else {
2612- let fa = jy(true, gv.caller, 0, bp)
2613- let u = valueOrErrorMessage(getString(by(toString(gv.caller))), "You don't have a duck staked")
2614- $Tuple2(((fa._1 ++ kK) ++ jT(u, fraction(V, fa._3, ct))._1), fa._2)
2615- }
2616- }
2617-
2618-
2619-
2620-@Callable(gv)
2621-func activateArtifact (lM,lN) = {
2622- let kK = kH(gv)
2623- if ((size(gv.payments) != 0))
2826+ let fd = jE(true, gy.caller, 0, bI)
2827+ let bO = valueOrErrorMessage(getString(bS(toString(gy.caller))), "You don't have a duck staked")
2828+ $Tuple2(((fd._1 ++ lh) ++ jZ(bO, fraction(dq, fd._3, o))._1), fd._2)
2829+ }
2830+ }
2831+
2832+
2833+
2834+@Callable(gy)
2835+func activateArtifact (mk,ml) = {
2836+ let lh = kN(gy)
2837+ if ((size(gy.payments) != 0))
26242838 then throw("No payments required")
26252839 else {
2626- let c = toString(gv.caller)
2627- let fa = {
2628- let cm = lM
2629- if (("PRESALE" == cm))
2630- then kc(c, lN)
2631- else if (("ONBOARD" == cm))
2632- then jV(c)
2840+ let av = toString(gy.caller)
2841+ let fd = {
2842+ let g = mk
2843+ if (("PRESALE" == g))
2844+ then ki(av, ml)
2845+ else if (("ONBOARD" == g))
2846+ then kb(av)
26332847 else throw("Unknown artifact")
26342848 }
2635- (fa ++ kK)
2636- }
2637- }
2638-
2639-
2640-
2641-@Callable(gv)
2642-func mergeLands (ki) = {
2643- let kK = kH(gv)
2644- if ((size(gv.payments) != 0))
2849+ (fd ++ lh)
2850+ }
2851+ }
2852+
2853+
2854+
2855+@Callable(gy)
2856+func mergeLands (ko) = {
2857+ let lh = kN(gy)
2858+ if ((size(gy.payments) != 0))
26452859 then throw("No payments required")
26462860 else {
2647- let fa = kG(toString(gv.caller), ki)
2648- $Tuple2(((fa._1 ++ kK) ++ jU(toString(gv.caller), W)._1), fa._2)
2649- }
2650- }
2651-
2652-
2653-
2654-@Callable(gv)
2655-func cargoExchange (lO,bp) = {
2656- let kK = kH(gv)
2657- if ((size(gv.payments) != 0))
2861+ let fd = kM(toString(gy.caller), ko)
2862+ $Tuple2(((fd._1 ++ lh) ++ ka(toString(gy.caller), dr)._1), fd._2)
2863+ }
2864+ }
2865+
2866+
2867+
2868+@Callable(gy)
2869+func cargoExchange (mm,bI) = {
2870+ let lh = kN(gy)
2871+ if ((size(gy.payments) != 0))
26582872 then throw("No payments required")
26592873 else {
2660- let ia = split_4C(lO, ":")
2661- let c = toString(gv.originCaller)
2662- let jg = value(assetInfo(fromBase58String(bp)))
2663- let jh = bi(bp)
2664- if (!(isDefined(getInteger(jh))))
2665- then throw((jg.name + " is not staked"))
2874+ let ig = split_4C(mm, ":")
2875+ let av = toString(gy.originCaller)
2876+ let jm = value(assetInfo(fromBase58String(bI)))
2877+ let jn = bC(bI)
2878+ if (!(isDefined(getInteger(jn))))
2879+ then throw((jm.name + " is not staked"))
26662880 else {
2667- let jj = valueOrErrorMessage(getString(bf(bp)), (("NFT " + jg.name) + " is orphaned"))
2668- if ((jj != c))
2669- then throw((ap + " is not yours"))
2881+ let jp = valueOrErrorMessage(getString(bz(bI)), (("NFT " + jm.name) + " is orphaned"))
2882+ if ((jp != av))
2883+ then throw((aI + " is not yours"))
26702884 else {
2671- let hM = (dt(split(jg.description, "_")[cX]) / cu)
2672- let hN = valueOrElse(getInteger(bq(bp)), 0)
2673- let u = valueOrErrorMessage(getString(by(c)), "You don't have a duck staked")
2674- let je = valueOrElse(getString(bA(u)), ax)
2675- let bV = split(value(je), "_")
2676- if ((bV[bd] != "L"))
2677- then throw((("Duck location type is " + bV[bd]) + ", but should be L"))
2678- else if ((bV[be] != bp))
2679- then throw(("Duck should be on the land " + bp))
2885+ let hS = (aq(split(jm.description, "_")[T]) / p)
2886+ let hT = valueOrElse(getInteger(bJ(bI)), 0)
2887+ let bO = valueOrErrorMessage(getString(bS(av)), "You don't have a duck staked")
2888+ let jk = valueOrElse(getString(bU(bO)), aQ)
2889+ let cp = split(value(jk), "_")
2890+ if ((cp[bx] != "L"))
2891+ then throw((("Duck location type is " + cp[bx]) + ", but should be L"))
2892+ else if ((cp[by] != bI))
2893+ then throw(("Duck should be on the land " + bI))
26802894 else {
2681- let hL = bo(bp)
2682- let hC = hK(hL, hM, hN)
2683- let hx = bz(u)
2684- let ib = hw(hx)
2685- let fa = hZ(ia, hC, ib)
2686- let hT = split(hC[aT], "_")
2687- let jv = (parseIntValue(hT[aV]) + fa._7)
2688- let jw = (parseIntValue(hT[aW]) - fa._7)
2689- ([StringEntry(hx, makeString_2C([ib[aY], fa._4, fa._5, fa._6], ":")), StringEntry(hL, makeString_2C([hC[aP], fa._1, fa._2, fa._3, makeString([hT[aU], toString(jv), toString(jw), hT[aX]], "_")], ":"))] ++ kK)
2895+ let hR = bH(bI)
2896+ let hI = hQ(hR, hS, hT)
2897+ let hD = bT(bO)
2898+ let ih = hC(hD)
2899+ let fd = if(ig, hI, ih)
2900+ let hZ = split(hI[bn], "_")
2901+ let jB = (parseIntValue(hZ[bp]) + fd._7)
2902+ let jC = (parseIntValue(hZ[bq]) - fd._7)
2903+ ([StringEntry(hD, makeString_2C([ih[bs], fd._4, fd._5, fd._6], ":")), StringEntry(hR, makeString_2C([hI[bj], fd._1, fd._2, fd._3, makeString([hZ[bo], toString(jB), toString(jC), hZ[br]], "_")], ":"))] ++ lh)
26902904 }
26912905 }
26922906 }
26932907 }
26942908 }
26952909
26962910
26972911
2698-@Callable(gv)
2699-func saveWarehouse (hP,bp) = if ((gv.caller != cR))
2912+@Callable(gy)
2913+func saveWarehouse (hV,bI) = if ((gy.caller != N))
27002914 then throw("Access denied")
27012915 else {
2702- let hL = bo(bp)
2703- let hQ = split_4C(hP, ":")
2704- if ((size(hQ) != 5))
2916+ let hR = bH(bI)
2917+ let hW = split_4C(hV, ":")
2918+ if ((size(hW) != 5))
27052919 then throw("warehouse string should contain 4 ':' separators")
27062920 else {
2707- let lP = split(hQ[aT], "_")[aU]
2708- let jv = hB(hQ)
2709- let lQ = hz(hQ[aP])
2710- let jw = ((lQ - parseIntValue(lP)) - jv)
2711- if ((0 > jw))
2921+ let mn = split(hW[bn], "_")[bo]
2922+ let jB = hH(hW)
2923+ let mo = hF(hW[bj])
2924+ let jC = ((mo - parseIntValue(mn)) - jB)
2925+ if ((0 > jC))
27122926 then throw("Operation leads to negative free warehouse space")
27132927 else {
2714- let lR = makeString_2C([hQ[aP], hQ[aQ], hQ[aR], hQ[aS], makeString([lP, toString(jv), toString(jw), toString(lQ)], "_")], ":")
2715- $Tuple2([StringEntry(hL, lR)], lR)
2928+ let mp = makeString_2C([hW[bj], hW[bk], hW[bl], hW[bm], makeString([mn, toString(jB), toString(jC), toString(mo)], "_")], ":")
2929+ $Tuple2([StringEntry(hR, mp)], mp)
27162930 }
27172931 }
27182932 }
27192933
27202934
27212935
2722-@Callable(gv)
2723-func setCustomName (bg,ks,bk) = {
2724- let kK = kH(gv)
2725- if ((size(gv.payments) != 1))
2936+@Callable(gy)
2937+func setCustomName (bA,ky,bE) = {
2938+ let lh = kN(gy)
2939+ if ((size(gy.payments) != 1))
27262940 then throw("Exactly one payment required")
27272941 else {
2728- let kL = value(gv.payments[0])
2729- if ((kL.assetId != cn))
2942+ let li = value(gy.payments[0])
2943+ if ((li.assetId != h))
27302944 then throw("Allowed USDT payment only!")
2731- else if ((kL.amount != dM))
2732- then throw(("Payment should be " + toString(dM)))
2733- else if (contains(ks, "__"))
2734- then throw(("Name should not contain '__': " + ks))
2735- else if ((size(ks) > dN))
2736- then throw(("Name too long, maxLength=" + toString(dN)))
2945+ else if ((li.amount != dP))
2946+ then throw(("Payment should be " + toString(dP)))
2947+ else if (contains(ky, "__"))
2948+ then throw(("Name should not contain '__': " + ky))
2949+ else if ((size(ky) > dQ))
2950+ then throw(("Name too long, maxLength=" + toString(dQ)))
27372951 else {
2738- let c = toString(gv.originCaller)
2739- let lS = {
2740- let cm = bk
2741- if (("ACCOUNT" == cm))
2952+ let av = toString(gy.originCaller)
2953+ let mq = {
2954+ let g = bE
2955+ if (("ACCOUNT" == g))
27422956 then {
2743- let lT = ei(ks)
2744- let lU = getString(lT)
2745- if (isDefined(lU))
2746- then throw(("Name already registered: " + ks))
2957+ let mr = el(ky)
2958+ let ms = getString(mr)
2959+ if (isDefined(ms))
2960+ then throw(("Name already registered: " + ky))
27472961 else {
2748- let lV = bs(c)
2749- let lW = getString(lV)
2750- let lX = if (isDefined(lW))
2751- then [DeleteEntry(ei(value(lW)))]
2962+ let mt = bL(av)
2963+ let mu = getString(mt)
2964+ let mv = if (isDefined(mu))
2965+ then [DeleteEntry(el(value(mu)))]
27522966 else nil
2753- (((lX :+ StringEntry(lV, ks)) :+ StringEntry(lT, c)) ++ jU(c, T)._1)
2967+ (((mv :+ StringEntry(mt, ky)) :+ StringEntry(mr, av)) ++ ka(av, do)._1)
27542968 }
27552969 }
2756- else if (("LAND" == cm))
2970+ else if (("LAND" == g))
27572971 then {
2758- let jg = value(assetInfo(fromBase58String(bg)))
2759- let jh = bi(bg)
2760- if (!(isDefined(getInteger(jh))))
2761- then throw((jg.name + " is not staked"))
2972+ let jm = value(assetInfo(fromBase58String(bA)))
2973+ let jn = bC(bA)
2974+ if (!(isDefined(getInteger(jn))))
2975+ then throw((jm.name + " is not staked"))
27622976 else {
2763- let jj = valueOrErrorMessage(getString(bf(bg)), (("NFT " + jg.name) + " is orphaned"))
2764- if ((jj != c))
2765- then throw((ap + " is not yours"))
2977+ let jp = valueOrErrorMessage(getString(bz(bA)), (("NFT " + jm.name) + " is orphaned"))
2978+ if ((jp != av))
2979+ then throw((aI + " is not yours"))
27662980 else {
2767- let lT = eb(ks)
2768- let lU = getString(lT)
2769- if (isDefined(lU))
2770- then throw(("Name already registered: " + ks))
2981+ let mr = ee(ky)
2982+ let ms = getString(mr)
2983+ if (isDefined(ms))
2984+ then throw(("Name already registered: " + ky))
27712985 else {
2772- let lY = bh(bg)
2773- let lW = getString(lY)
2774- let lX = if (isDefined(lW))
2775- then [DeleteEntry(eb(value(lW)))]
2986+ let mw = bB(bA)
2987+ let mu = getString(mw)
2988+ let mv = if (isDefined(mu))
2989+ then [DeleteEntry(ee(value(mu)))]
27762990 else nil
2777- (((lX :+ StringEntry(lY, ks)) :+ StringEntry(lT, bg)) ++ jU(c, T)._1)
2991+ (((mv :+ StringEntry(mw, ky)) :+ StringEntry(mr, bA)) ++ ka(av, do)._1)
27782992 }
27792993 }
27802994 }
27812995 }
2782- else if (("DUCK" == cm))
2996+ else if (("DUCK" == g))
27832997 then {
2784- let jg = value(assetInfo(fromBase58String(bg)))
2785- let jh = bi(bg)
2786- if (if (!(isDefined(getInteger(jh))))
2998+ let jm = value(assetInfo(fromBase58String(bA)))
2999+ let jn = bC(bA)
3000+ if (if (!(isDefined(getInteger(jn))))
27873001 then true
2788- else !(isDefined(getString(by(c)))))
2789- then throw((jg.name + " is not staked"))
3002+ else !(isDefined(getString(bS(av)))))
3003+ then throw((jm.name + " is not staked"))
27903004 else {
2791- let jj = valueOrErrorMessage(getString(bx(bg)), (("NFT " + jg.name) + " is orphaned"))
2792- if ((jj != c))
2793- then throw((aq + " is not yours"))
3005+ let jp = valueOrErrorMessage(getString(bR(bA)), (("NFT " + jm.name) + " is orphaned"))
3006+ if ((jp != av))
3007+ then throw((aJ + " is not yours"))
27943008 else {
2795- let lT = eh(ks)
2796- let lU = getString(lT)
2797- if (isDefined(lU))
2798- then throw(("Name already registered: " + ks))
3009+ let mr = ek(ky)
3010+ let ms = getString(mr)
3011+ if (isDefined(ms))
3012+ then throw(("Name already registered: " + ky))
27993013 else {
2800- let lY = br(bg)
2801- let lW = getString(lY)
2802- let lX = if (isDefined(lW))
2803- then [DeleteEntry(eh(value(lW)))]
3014+ let mw = bK(bA)
3015+ let mu = getString(mw)
3016+ let mv = if (isDefined(mu))
3017+ then [DeleteEntry(ek(value(mu)))]
28043018 else nil
2805- (((lX :+ StringEntry(lY, ks)) :+ StringEntry(lT, bg)) ++ jT(bg, T)._1)
3019+ (((mv :+ StringEntry(mw, ky)) :+ StringEntry(mr, bA)) ++ jZ(bA, do)._1)
28063020 }
28073021 }
28083022 }
28093023 }
28103024 else throw("Unknown entity type")
28113025 }
2812- $Tuple2(((lS :+ ScriptTransfer(cR, kL.amount, cn)) ++ kK), 0)
3026+ $Tuple2(((mq :+ ScriptTransfer(N, li.amount, h)) ++ lh), 0)
28133027 }
28143028 }
28153029 }
28163030
28173031
28183032
2819-@Callable(gv)
2820-func setReferrals (lZ,ma) = if ((gv.callerPublicKey != cl))
3033+@Callable(gy)
3034+func setReferrals (mx,my) = if ((gy.callerPublicKey != f))
28213035 then throw("Permission denied")
28223036 else {
2823- let kK = kH(gv)
2824- if ((size(gv.payments) != 0))
3037+ let lh = kN(gy)
3038+ if ((size(gy.payments) != 0))
28253039 then throw("No payments required")
2826- else if (!(isDefined(addressFromString(lZ))))
2827- then throw(("Invalid address: " + lZ))
3040+ else if (!(isDefined(addressFromString(mx))))
3041+ then throw(("Invalid address: " + mx))
28283042 else {
2829- let mb = addressFromString(ma)
2830- if (!(isDefined(mb)))
2831- then throw(("Invalid address: " + ma))
3043+ let mz = addressFromString(my)
3044+ if (!(isDefined(mz)))
3045+ then throw(("Invalid address: " + my))
28323046 else {
2833- let mc = getString(dx(lZ))
2834- if (!(isDefined(mc)))
3047+ let mA = getString(au(mx))
3048+ if (!(isDefined(mA)))
28353049 then throw("oldPlayer didn't do any tx in game")
2836- else if ((0 >= wavesBalance(value(mb)).available))
3050+ else if ((0 >= wavesBalance(value(mz)).available))
28373051 then throw("newPlayer has no WAVES")
28383052 else {
2839- let md = ej()
2840- let me = getString(md)
2841- let mf = if (isDefined(me))
2842- then split_4C(value(me), "_")
3053+ let mB = em()
3054+ let mC = getString(mB)
3055+ let mD = if (isDefined(mC))
3056+ then split_4C(value(mC), "_")
28433057 else nil
2844- if (containsElement(mf, ma))
2845- then throw((ma + " is not newbie (already has referrals)"))
3058+ if (containsElement(mD, my))
3059+ then throw((my + " is not newbie (already has referrals)"))
28463060 else {
2847- let jW = bt(ma)
2848- let jX = getString(jW)
2849- if (if (isDefined(jX))
2850- then isDefined(addressFromString(value(jX)))
3061+ let kc = bM(my)
3062+ let kd = getString(kc)
3063+ if (if (isDefined(kd))
3064+ then isDefined(addressFromString(value(kd)))
28513065 else false)
2852- then throw(((ma + " already has refBy: ") + value(jX)))
3066+ then throw(((my + " already has refBy: ") + value(kd)))
28533067 else {
2854- let mg = bw(lZ)
2855- let mh = getString(mg)
2856- let mi = if (isDefined(mh))
2857- then split_4C(value(mh), "_")
3068+ let mE = bQ(mx)
3069+ let mF = getString(mE)
3070+ let mG = if (isDefined(mF))
3071+ then split_4C(value(mF), "_")
28583072 else nil
2859- if (containsElement(mi, ma))
2860- then throw((((lZ + " already contains ") + ma) + " within referrals"))
3073+ if (containsElement(mG, my))
3074+ then throw((((mx + " already contains ") + my) + " within referrals"))
28613075 else {
2862- let mj = makeString_2C((mi :+ ma), "_")
2863- let mk = if (containsElement(mf, lZ))
2864- then value(me)
2865- else makeString_2C((mf :+ lZ), "_")
2866- $Tuple2(([StringEntry(jW, lZ), StringEntry(mg, mj), StringEntry(md, mk)] ++ kK), 0)
3076+ let mH = makeString_2C((mG :+ my), "_")
3077+ let mI = if (containsElement(mD, mx))
3078+ then value(mC)
3079+ else makeString_2C((mD :+ mx), "_")
3080+ $Tuple2(([StringEntry(kc, mx), StringEntry(mE, mH), StringEntry(mB, mI)] ++ lh), 0)
28673081 }
28683082 }
28693083 }
28703084 }
28713085 }
28723086 }
28733087 }
28743088
28753089
28763090
2877-@Callable(gv)
2878-func distributePoints (ml,mm,mn,mo,mp) = {
2879- let kK = kH(gv)
2880- if ((size(gv.payments) != 0))
3091+@Callable(gy)
3092+func distributePoints (mJ,mK,mL,mM,mN) = {
3093+ let lh = kN(gy)
3094+ if ((size(gy.payments) != 0))
28813095 then throw("No payments required")
28823096 else {
2883- let c = toString(gv.originCaller)
2884- let mq = dq(invoke(cT, "checkWlgXpREADONLY", [c], nil))
2885- let mr = do(mq[1])
2886- let ms = if ((0 >= mr))
3097+ let av = toString(gy.originCaller)
3098+ let mO = an(invoke(P, "checkWlgXpREADONLY", [av], nil))
3099+ let mP = al(mO[1])
3100+ let mQ = if ((0 >= mP))
28873101 then $Tuple2(0, nil)
28883102 else {
2889- let jR = do(invoke(cT, "takeWlgXp", [c], nil))
2890- if ((jR == jR))
2891- then $Tuple2(mr, [IntegerEntry(B(c), do(mq[0])), IntegerEntry(A(c), do(mq[2]))])
3103+ let jX = al(invoke(P, "takeWlgXp", [av], nil))
3104+ if ((jX == jX))
3105+ then $Tuple2(mP, [IntegerEntry(cW(av), al(mO[0])), IntegerEntry(cV(av), al(mO[2]))])
28923106 else throw("Strict value is not equal to itself.")
28933107 }
2894- let mt = ms._1
2895- let mu = ms._2
2896- let u = valueOrErrorMessage(getString(by(c)), "You don't have a duck staked")
2897- let mv = C(c)
2898- let mw = (valueOrElse(getInteger(mv), 0) + mt)
2899- let mx = y(u)
2900- let my = valueOrElse(getInteger(mx), 0)
2901- let mz = (mw + my)
2902- let mA = ((((ml + mm) + mn) + mo) + mp)
2903- if ((mA > mz))
2904- then throw((("There are only " + toString(mz)) + " free points to distribute"))
3108+ let mR = mQ._1
3109+ let mS = mQ._2
3110+ let bO = valueOrErrorMessage(getString(bS(av)), "You don't have a duck staked")
3111+ let mT = cX(av)
3112+ let mU = (valueOrElse(getInteger(mT), 0) + mR)
3113+ let mV = cT(bO)
3114+ let mW = valueOrElse(getInteger(mV), 0)
3115+ let mX = (mU + mW)
3116+ let mY = ((((mJ + mK) + mL) + mM) + mN)
3117+ if ((mY > mX))
3118+ then throw((("There are only " + toString(mX)) + " free points to distribute"))
29053119 else {
2906- let mB = v(u)
2907- let al = split(valueOrElse(getString(mB), "0_0_0_0_0"), "_")
2908- let mC = (mw - mA)
2909- $Tuple2((([IntegerEntry(mv, if ((0 > mC))
3120+ let mZ = cQ(bO)
3121+ let dF = split(valueOrElse(getString(mZ), "0_0_0_0_0"), "_")
3122+ let na = (mU - mY)
3123+ $Tuple2((([IntegerEntry(mT, if ((0 > na))
29103124 then 0
2911- else mC), IntegerEntry(mx, if ((0 > mC))
2912- then (my + mC)
2913- else my), StringEntry(mB, makeString([toString((parseIntValue(al[j]) + ml)), toString((parseIntValue(al[k]) + mm)), toString((parseIntValue(al[l]) + mn)), toString((parseIntValue(al[m]) + mo)), toString((parseIntValue(al[n]) + mp))], "_"))] ++ kK) ++ mu), 0)
3125+ else na), IntegerEntry(mV, if ((0 > na))
3126+ then (mW + na)
3127+ else mW), StringEntry(mZ, makeString([toString((parseIntValue(dF[cF]) + mJ)), toString((parseIntValue(dF[cG]) + mK)), toString((parseIntValue(dF[cH]) + mL)), toString((parseIntValue(dF[cI]) + mM)), toString((parseIntValue(dF[cJ]) + mN))], "_"))] ++ lh) ++ mS), 0)
29143128 }
29153129 }
29163130 }
29173131
29183132
29193133
2920-@Callable(gv)
2921-func splitByGlobalWeightsREADONLY (ez) = $Tuple2(nil, eR(ez))
2922-
2923-
2924-
2925-@Callable(gv)
2926-func splitByGlobalAndLocalWeightsREADONLY (mD,mE,gy) = {
2927- let gr = gx(gy)
2928- $Tuple2(nil, $Tuple2(eR(mD), eC(mE, gr)))
2929- }
2930-
2931-
2932-
2933-@Callable(gv)
2934-func getBackpackREADONLY (u) = $Tuple2(nil, makeString(hw(bz(u)), ":"))
2935-
2936-
2937-
2938-@Callable(gv)
2939-func getWarehouseREADONLY (bp) = {
2940- let jg = value(assetInfo(fromBase58String(bp)))
2941- let hM = (dt(split(jg.description, "_")[cX]) / cu)
2942- let hN = valueOrElse(getInteger(bq(bp)), 0)
2943- $Tuple2(nil, makeString_2C(hK(bo(bp), hM, hN), ":"))
2944- }
2945-
2946-
2947-
2948-@Callable(gv)
2949-func saveLastTx () = if (!(containsElement([cT, cR, cU, cV], gv.caller)))
3134+@Callable(gy)
3135+func splitByGlobalWeightsREADONLY (eC) = $Tuple2(nil, eU(eC))
3136+
3137+
3138+
3139+@Callable(gy)
3140+func splitByGlobalAndLocalWeightsREADONLY (nb,nc,gB) = {
3141+ let gu = gA(gB)
3142+ $Tuple2(nil, $Tuple2(eU(nb), eF(nc, gu)))
3143+ }
3144+
3145+
3146+
3147+@Callable(gy)
3148+func getBackpackREADONLY (bO) = $Tuple2(nil, makeString(hC(bT(bO)), ":"))
3149+
3150+
3151+
3152+@Callable(gy)
3153+func getWarehouseREADONLY (bI) = {
3154+ let jm = value(assetInfo(fromBase58String(bI)))
3155+ let hS = (aq(split(jm.description, "_")[T]) / p)
3156+ let hT = valueOrElse(getInteger(bJ(bI)), 0)
3157+ $Tuple2(nil, makeString_2C(hQ(bH(bI), hS, hT), ":"))
3158+ }
3159+
3160+
3161+
3162+@Callable(gy)
3163+func saveLastTx () = if (!(containsElement([P, N, Q, R], gy.caller)))
29503164 then throw("Access denied")
2951- else $Tuple2(kH(gv), 42)
2952-
2953-
2954-
2955-@Callable(gv)
2956-func updateDuckStats (u,jR) = if ((gv.caller != cR))
3165+ else $Tuple2(kN(gy), 42)
3166+
3167+
3168+
3169+@Callable(gy)
3170+func updateDuckStats (bO,jX) = if ((gy.caller != N))
29573171 then throw("Access denied")
2958- else jT(u, jR)
2959-
2960-
2961-
2962-@Callable(gv)
2963-func updateAccStats (c,jR) = if (!(containsElement([cT, cR, cV], gv.caller)))
3172+ else jZ(bO, jX)
3173+
3174+
3175+
3176+@Callable(gy)
3177+func updateAccStats (av,jX) = if (!(containsElement([P, N, R], gy.caller)))
29643178 then throw("Access denied")
2965- else jU(c, jR)
2966-
2967-
2968-
2969-@Callable(gv)
2970-func equipDuck (mF) = {
2971- let kK = kH(gv)
2972- if ((size(gv.payments) != 0))
3179+ else ka(av, jX)
3180+
3181+
3182+
3183+@Callable(gy)
3184+func equipDuck (nd) = {
3185+ let lh = kN(gy)
3186+ if ((size(gy.payments) != 0))
29733187 then throw("No payments required")
29743188 else {
2975- let c = toString(gv.originCaller)
2976- let u = valueOrErrorMessage(getString(by(c)), "You don't have a duck staked")
2977- if (ke(u))
3189+ let av = toString(gy.originCaller)
3190+ let bO = valueOrErrorMessage(getString(bS(av)), "You don't have a duck staked")
3191+ if (kk(bO))
29783192 then throw("equipDuck_checkTournament")
29793193 else {
2980- let gh = z(u)
2981- let mG = split(valueOrElse(getString(gh), ",;,_,;,_,;,_,;,_,;,_,;,"), "_")
2982- let hx = bz(u)
2983- let ib = hw(hx)
2984- let le = split(mF, "_")
2985- if ((size(le) != p))
3194+ let gk = cU(bO)
3195+ let lb = split(valueOrElse(getString(gk), ",;,_,;,_,;,_,;,_,;,_,;,"), "_")
3196+ let hD = bT(bO)
3197+ let ih = hC(hD)
3198+ let lC = split(nd, "_")
3199+ if ((size(lC) != cL))
29863200 then throw("Wrong equipment string")
29873201 else {
2988- let gk = fZ(mG, fo(ib[bb]), true, nil)
2989- let gl = split(le[o], ";")[1]
2990- let aj = if ((gl == ""))
3202+ let gn = gc(lb, fr(ih[bv]), true, nil)
3203+ let go = split(lC[cK], ";")[1]
3204+ let dD = if ((go == ""))
29913205 then 0
29923206 else {
2993- let gm = split(gl, ",")[0]
2994- if ((gm == ""))
3207+ let gp = split(go, ",")[0]
3208+ if ((gp == ""))
29953209 then 0
29963210 else {
2997- let fD = split(gm, ":")
2998- let cP = fD[0]
2999- let gn = fD[1]
3000- if (if (if (if (if ((cP == "06"))
3211+ let fG = split(gp, ":")
3212+ let K = fG[0]
3213+ let gq = fG[1]
3214+ if (if (if (if (if ((K == "06"))
30013215 then true
3002- else (cP == "07"))
3216+ else (K == "07"))
30033217 then true
3004- else (cP == "08"))
3005- then (gn != "")
3218+ else (K == "08"))
3219+ then (gq != "")
30063220 else false)
3007- then (parseIntValue(gn) > 0)
3221+ then (parseIntValue(gq) > 0)
30083222 else false)
3009- then parseIntValue(split(aJ[parseIntValue(cP)], "_")[aL])
3223+ then parseIntValue(split(bd[parseIntValue(K)], "_")[bf])
30103224 else 0
30113225 }
30123226 }
3013- let fU = ah(this, u, aj, true)
3014- let go = fZ(le, gk, false, fU)
3015- let mH = ft(go)
3016- $Tuple2(([StringEntry(gh, mF), StringEntry(hx, makeString_2C([ib[aY], ib[aZ], ib[ba], mH], ":")), StringEntry(F(u), makeString([toString(fU[7]), toString(fU[8]), toString(fU[9]), toString(fU[10]), toString(fU[11])], "_"))] ++ kK), 0)
3227+ let fX = dC(this, bO, dD, true)
3228+ let gr = gc(lC, gn, false, fX)
3229+ let lc = fw(gr)
3230+ $Tuple2(([StringEntry(gk, nd), StringEntry(hD, makeString_2C([ih[bs], ih[bt], ih[bu], lc], ":")), StringEntry(da(bO), makeString([toString(fX[7]), toString(fX[8]), toString(fX[9]), toString(fX[10]), toString(fX[11])], "_"))] ++ lh), 0)
30173231 }
30183232 }
30193233 }
30203234 }
30213235
30223236
30233237
3024-@Callable(gv)
3025-func initDuckTourAttempt (u) = if ((gv.caller != cU))
3238+@Callable(gy)
3239+func initDuckTourAttempt (bO) = if ((gy.caller != Q))
30263240 then throw("Access denied")
30273241 else {
3028- let iP = t(u)
3029- let iQ = ab(valueOrElse(getInteger(x(u)), 0))
3030- let kY = valueOrElse(getInteger(iP), iQ)
3031- let mI = bA(u)
3032- let je = valueOrElse(getString(mI), ax)
3033- let bU = valueOrElse(getInteger(cU, bF), 0)
3034- let mJ = (toString(bU) + "_T_0")
3035- $Tuple2([IntegerEntry(D(u), kY), IntegerEntry(iP, iQ), StringEntry(E(u), je), StringEntry(mI, mJ)], mJ)
3036- }
3037-
3038-
3039-
3040-@Callable(gv)
3242+ let iV = cP(bO)
3243+ let iW = dw(valueOrElse(getInteger(cS(bO)), 0))
3244+ let lw = valueOrElse(getInteger(iV), iW)
3245+ let ne = bU(bO)
3246+ let jk = valueOrElse(getString(ne), aQ)
3247+ let co = valueOrElse(getInteger(Q, bZ), 0)
3248+ let nf = (toString(co) + "_T_0")
3249+ $Tuple2([IntegerEntry(cY(bO), lw), IntegerEntry(iV, iW), StringEntry(cZ(bO), jk), StringEntry(ne, nf)], nf)
3250+ }
3251+
3252+
3253+
3254+@Callable(gy)
30413255 func breakAttempt () = {
3042- let kK = kH(gv)
3043- let u = valueOrErrorMessage(getString(by(toString(gv.caller))), "You don't have a duck staked")
3044- let mI = bA(u)
3045- let je = valueOrElse(getString(mI), ax)
3046- if ((split(je, "_")[bd] != "T"))
3256+ let lh = kN(gy)
3257+ let bO = valueOrErrorMessage(getString(bS(toString(gy.caller))), "You don't have a duck staked")
3258+ let ne = bU(bO)
3259+ let jk = valueOrElse(getString(ne), aQ)
3260+ if ((split(jk, "_")[bx] != "T"))
30473261 then throw("Your duck is not in the tournament")
30483262 else {
3049- let mK = getIntegerValue(D(u))
3050- let mL = getStringValue(E(u))
3051- $Tuple2(((kK :+ IntegerEntry(t(u), mK)) :+ StringEntry(mI, mL)), je)
3052- }
3053- }
3054-
3055-
3056-
3057-@Callable(gv)
3058-func breakAttemptCallback () = if ((gv.caller != cU))
3263+ let ng = getIntegerValue(cY(bO))
3264+ let nh = getStringValue(cZ(bO))
3265+ $Tuple2(((lh :+ IntegerEntry(cP(bO), ng)) :+ StringEntry(ne, nh)), jk)
3266+ }
3267+ }
3268+
3269+
3270+
3271+@Callable(gy)
3272+func breakAttemptCallback () = if ((gy.caller != Q))
30593273 then throw("Access denied")
30603274 else {
3061- let u = valueOrErrorMessage(getString(by(toString(gv.originCaller))), "You don't have a duck staked")
3062- $Tuple2([IntegerEntry(t(u), getIntegerValue(D(u))), StringEntry(bA(u), getStringValue(E(u)))], "breakAttemptCallback")
3063- }
3064-
3065-
3066-
3067-@Callable(gv)
3068-func exitTournamentInternal (u) = if ((gv.caller != this))
3275+ let bO = valueOrErrorMessage(getString(bS(toString(gy.originCaller))), "You don't have a duck staked")
3276+ $Tuple2([IntegerEntry(cP(bO), getIntegerValue(cY(bO))), StringEntry(bU(bO), getStringValue(cZ(bO)))], "breakAttemptCallback")
3277+ }
3278+
3279+
3280+
3281+@Callable(gy)
3282+func exitTournamentInternal (bO) = if ((gy.caller != this))
30693283 then throw("Access denied")
30703284 else {
3071- let mK = getIntegerValue(D(u))
3072- let mL = getStringValue(E(u))
3073- $Tuple2([IntegerEntry(t(u), mK), StringEntry(bA(u), mL)], false)
3074- }
3075-
3076-
3077-
3078-@Callable(gv)
3079-func processDelivery (u) = if ((gv.caller != this))
3285+ let ng = getIntegerValue(cY(bO))
3286+ let nh = getStringValue(cZ(bO))
3287+ $Tuple2([IntegerEntry(cP(bO), ng), StringEntry(bU(bO), nh)], false)
3288+ }
3289+
3290+
3291+
3292+@Callable(gy)
3293+func processDelivery (bO) = if ((gy.caller != this))
30803294 then throw("Access denied")
30813295 else {
3082- let c = toString(gv.originCaller)
3083- let mM = valueOrElse(getInteger(cR, bE), 0)
3084- if ((aA > mM))
3085- then throw(("Delivery is not available, fund=" + dy(mM, 6)))
3296+ let av = toString(gy.originCaller)
3297+ let ni = valueOrElse(getInteger(N, bY), 0)
3298+ if ((aT > ni))
3299+ then throw(("Delivery is not available, fund=" + aw(ni, 6)))
30863300 else {
3087- let bW = lastBlock.timestamp
3088- let mN = L(c)
3089- let mO = valueOrElse(getInteger(M(c)), 0)
3090- let mP = (bW / a)
3091- let fJ = if ((mO == mP))
3092- then valueOrElse(getInteger(mN), 0)
3301+ let cq = lastBlock.timestamp
3302+ let nj = dg(av)
3303+ let nk = valueOrElse(getInteger(dh(av)), 0)
3304+ let nl = (cq / dJ)
3305+ let fM = if ((nk == nl))
3306+ then valueOrElse(getInteger(nj), 0)
30933307 else 0
3094- let mQ = valueOrElse(getInteger(cV, d(c)), 0)
3095- let mR = (aE + (mQ / aF))
3096- if ((fJ >= mR))
3097- then throw((("You already used " + toString(mR)) + " delivery attempts for today"))
3308+ let nm = valueOrElse(getInteger(R, dL(av)), 0)
3309+ let nn = (aY + (nm / aZ))
3310+ if ((fM >= nn))
3311+ then throw((("You already used " + toString(nn)) + " delivery attempts for today"))
30983312 else {
3099- let mS = K(u)
3100- let mT = invoke(cR, "sendDeliveryReward", [c], nil)
3101- $Tuple2([IntegerEntry(mN, (fJ + 1)), IntegerEntry(M(c), mP), IntegerEntry(mS, (valueOrElse(getInteger(mS), 0) + 1))], mT)
3313+ let no = df(bO)
3314+ let np = invoke(N, "sendDeliveryReward", [av], nil)
3315+ $Tuple2([IntegerEntry(nj, (fM + 1)), IntegerEntry(dh(av), nl), IntegerEntry(no, (valueOrElse(getInteger(no), 0) + 1))], np)
31023316 }
31033317 }
31043318 }
31053319
31063320
31073321
3108-@Callable(gv)
3109-func robLand (iE,iF) = {
3110- let kK = kH(gv)
3111- if ((size(gv.payments) != 1))
3322+@Callable(gy)
3323+func robLand (iK,iL) = {
3324+ let lh = kN(gy)
3325+ if ((size(gy.payments) != 1))
31123326 then throw("exactly 1 payment must be attached")
31133327 else {
3114- let kL = gv.payments[0]
3115- let mU = kL.amount
3116- if (if (!(isDefined(kL.assetId)))
3328+ let li = gy.payments[0]
3329+ let nq = li.amount
3330+ if (if (!(isDefined(li.assetId)))
31173331 then true
3118- else (value(kL.assetId) != db))
3332+ else (value(li.assetId) != X))
31193333 then throw("WLGOLD payments only!")
3120- else if ((mU != aB))
3121- then throw((("Payment should be " + dy(aB, 8)) + " WLGOLD"))
3334+ else if ((nq != aV))
3335+ then throw((("Payment should be " + aw(aV, 8)) + " WLGOLD"))
31223336 else {
3123- let c = toString(gv.caller)
3124- if (!(sigVerify_8Kb(iE, iF, cl)))
3337+ let av = toString(gy.caller)
3338+ if (!(sigVerify_8Kb(iK, iL, f)))
31253339 then throw("signature does not match")
31263340 else {
3127- let fg = split_4C(toUtf8String(iE), ";")
3128- let mV = split_4C(fg[0], "|")
3129- let iH = split(mV[es], "_")
3130- let iI = parseIntValue(iH[0])
3131- let iJ = parseIntValue(iH[1])
3132- let iT = mV[et]
3133- let mW = split(fg[1], "|")
3134- let mX = mW[eu]
3135- if ((mX != "B"))
3341+ let fj = split_4C(toUtf8String(iK), ";")
3342+ let nr = split_4C(fj[0], "|")
3343+ let iN = split(nr[ev], "_")
3344+ let iO = parseIntValue(iN[0])
3345+ let iP = parseIntValue(iN[1])
3346+ let iZ = nr[ew]
3347+ let ns = split(fj[1], "|")
3348+ let nt = ns[ex]
3349+ if ((nt != "B"))
31363350 then throw("Only bank robbery is supported")
31373351 else {
3138- let iM = parseIntValue(mW[ew])
3139- if (if ((iM > (lastBlock.timestamp + dL)))
3352+ let iS = parseIntValue(ns[ez])
3353+ if (if ((iS > (lastBlock.timestamp + dO)))
31403354 then true
3141- else ((lastBlock.timestamp - dL) > iM))
3142- then throw(((("signature outdated: logTime=" + toString(iM)) + ", bcTime=") + toString(lastBlock.timestamp)))
3355+ else ((lastBlock.timestamp - dO) > iS))
3356+ then throw(((("signature outdated: logTime=" + toString(iS)) + ", bcTime=") + toString(lastBlock.timestamp)))
31433357 else {
3144- let iN = mW[ev]
3145- let iO = valueOrElse(getString(dx(c)), "")
3146- if ((iO != iN))
3147- then throw(((("Tx ids don't match! In state: " + iO) + ", in msg: ") + iN))
3358+ let iT = ns[ey]
3359+ let iU = valueOrElse(getString(au(av)), "")
3360+ if ((iU != iT))
3361+ then throw(((("Tx ids don't match! In state: " + iU) + ", in msg: ") + iT))
31483362 else {
3149- let u = valueOrErrorMessage(getString(by(c)), "You don't have a duck staked")
3150- let gh = z(u)
3151- let lc = valueOrElse(getString(gh), ",;,_,;,_,;,_,;,_,;,_,;,")
3152- let mY = fb(lc, iT)
3153- let le = mY._1
3154- let lf = mY._2
3155- let mZ = mY._3
3156- let je = valueOrElse(getString(bA(u)), ax)
3157- if (bS(cU, je))
3363+ let bO = valueOrErrorMessage(getString(bS(av)), "You don't have a duck staked")
3364+ let gk = cU(bO)
3365+ let lA = valueOrElse(getString(gk), ",;,_,;,_,;,_,;,_,;,_,;,")
3366+ let nu = fe(lA, iZ)
3367+ let lC = nu._1
3368+ let lD = nu._2
3369+ let nv = nu._3
3370+ let jk = valueOrElse(getString(bU(bO)), aQ)
3371+ if (cm(Q, jk))
31583372 then throw("Your duck is taking part in the tournament")
31593373 else {
3160- let bW = lastBlock.timestamp
3161- let mN = I(c)
3162- let mO = valueOrElse(getInteger(J(c)), 0)
3163- let mP = (bW / a)
3164- let fJ = if ((mO == mP))
3165- then valueOrElse(getInteger(mN), 0)
3374+ let cq = lastBlock.timestamp
3375+ let nj = dd(av)
3376+ let nk = valueOrElse(getInteger(de(av)), 0)
3377+ let nl = (cq / dJ)
3378+ let fM = if ((nk == nl))
3379+ then valueOrElse(getInteger(nj), 0)
31663380 else 0
3167- let mQ = valueOrElse(getInteger(cV, d(c)), 0)
3168- let na = (aC + (mQ / aD))
3169- if ((fJ >= na))
3170- then throw((("You already used " + toString(na)) + " robbery attempts for today"))
3381+ let nm = valueOrElse(getInteger(R, dL(av)), 0)
3382+ let nw = (aW + (nm / aX))
3383+ if ((fM >= nw))
3384+ then throw((("You already used " + toString(nw)) + " robbery attempts for today"))
31713385 else {
3172- let mS = H(u)
3173- let nb = if ((iJ > 0))
3386+ let no = dc(bO)
3387+ let nx = if ((iP > 0))
31743388 then {
3175- let mM = assetBalance(this, db)
3176- let nc = if (mZ)
3177- then (2 * aB)
3178- else (5 * aB)
3179- if ((nc > mM))
3180- then throw(((("Robbery is not available, funds = " + dy(mM, 8)) + " WLGOLD, required = ") + dy(nc, 8)))
3181- else [ScriptTransfer(gv.caller, nc, db)]
3389+ let ni = assetBalance(this, X)
3390+ let ny = if (nv)
3391+ then (2 * aV)
3392+ else (5 * aV)
3393+ if ((ny > ni))
3394+ then throw(((("Robbery is not available, funds = " + aw(ni, 8)) + " WLGOLD, required = ") + aw(ny, 8)))
3395+ else [ScriptTransfer(gy.caller, ny, X)]
31823396 }
31833397 else nil
3184- $Tuple2((((((((((kK ++ nb) ++ (if (lf)
3185- then [StringEntry(F(u), "0_0_0_0_0")]
3186- else nil)) ++ jT(u, if ((iJ > 0))
3187- then Q
3188- else R)._1) :+ IntegerEntry(G(u), bW)) :+ IntegerEntry(mN, (fJ + 1))) :+ IntegerEntry(J(c), mP)) :+ IntegerEntry(mS, (valueOrElse(getInteger(mS), 0) + 1))) :+ StringEntry(gh, le)) :+ IntegerEntry(t(u), max([iJ, 0]))), 0)
3398+ $Tuple2((((((((((lh ++ nx) ++ (if (lD)
3399+ then [StringEntry(da(bO), "0_0_0_0_0")]
3400+ else nil)) ++ jZ(bO, if ((iP > 0))
3401+ then dl
3402+ else dm)._1) :+ IntegerEntry(db(bO), cq)) :+ IntegerEntry(nj, (fM + 1))) :+ IntegerEntry(de(av), nl)) :+ IntegerEntry(no, (valueOrElse(getInteger(no), 0) + 1))) :+ StringEntry(gk, lC)) :+ IntegerEntry(cP(bO), max([iP, 0]))), 0)
31893403 }
31903404 }
31913405 }
31923406 }
31933407 }
31943408 }
31953409 }
31963410 }
31973411 }
31983412
31993413
32003414
3201-@Callable(gv)
3202-func buyRoboDuck () = if (!(ci))
3415+@Callable(gy)
3416+func buyRoboDuck () = if (!(c))
32033417 then throw("Feature is turned off")
32043418 else {
3205- let kK = kH(gv)
3206- if ((size(gv.payments) != 1))
3419+ let lh = kN(gy)
3420+ if ((size(gy.payments) != 1))
32073421 then throw("Exactly one payment required")
32083422 else {
3209- let kL = value(gv.payments[0])
3210- if ((kL.assetId != cn))
3423+ let li = value(gy.payments[0])
3424+ if ((li.assetId != h))
32113425 then throw("Allowed USDT payment only!")
3212- else if ((kL.amount != dR))
3213- then throw((("Payment attached should be " + dy(dR, 6)) + " USDT"))
3426+ else if ((li.amount != dU))
3427+ then throw((("Payment attached should be " + aw(dU, 6)) + " USDT"))
32143428 else {
3215- let nd = valueOrElse(getInteger(ek()), 0)
3216- let ne = toBytes(nd)
3217- let ec = ((ar + "-") + takeRight(toBase16String(ne), 8))
3218- let nf = takeRight(toBase16String(sha256_16Kb(ne)), 6)
3219- let iB = Issue(ec, ("Robo Duck NFT for WavesLands game, background color = #" + nf), 1, 0, false)
3220- let bg = calculateAssetId(iB)
3221- $Tuple2(((((kK :+ IntegerEntry(ek(), (nd + 1))) :+ iB) :+ ScriptTransfer(gv.originCaller, 1, bg)) :+ ScriptTransfer(cR, kL.amount, cn)), $Tuple2(toBase58String(bg), nf))
3429+ let nz = valueOrElse(getInteger(en()), 0)
3430+ let nA = toBytes(nz)
3431+ let ef = ((aK + "-") + takeRight(toBase16String(nA), 8))
3432+ let nB = takeRight(toBase16String(sha256_16Kb(nA)), 6)
3433+ let iH = Issue(ef, ("Robo Duck NFT for WavesLands game, background color = #" + nB), 1, 0, false)
3434+ let bA = calculateAssetId(iH)
3435+ $Tuple2(((((lh :+ IntegerEntry(en(), (nz + 1))) :+ iH) :+ ScriptTransfer(gy.originCaller, 1, bA)) :+ ScriptTransfer(N, li.amount, h)), $Tuple2(toBase58String(bA), nB))
32223436 }
32233437 }
32243438 }
32253439
32263440

github/deemru/w8io/169f3d6 
1423.29 ms