tx · 6eC4RBnryeTDBUxEMp7BurvJGySvR1jMgtPk8VQsRrDq

3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm:  -0.05500000 Waves

2024.11.22 17:02 [3382767] smart account 3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm > SELF 0.00000000 Waves

{ "type": 13, "id": "6eC4RBnryeTDBUxEMp7BurvJGySvR1jMgtPk8VQsRrDq", "fee": 5500000, "feeAssetId": null, "timestamp": 1732284140195, "version": 2, "chainId": 84, "sender": "3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm", "senderPublicKey": "EVooykMNV691Venwp1dHUTBd7KWequzUcda57Wd3LQEX", "proofs": [ "gJKGV3mDAyBaw9PxR1HcMV5PoNaDjXMLSMtRNUAS6oVBLWH6qxGt76CRc6BvT7enDfsGivRQ9QHpjx2YYFuzE1C" ], "script": "base64:BgKqAQgCEgMKAQgSBAoCCAESAwoBBBIAEgMKAQgSBAoCCAgSBAoCCAgSAwoBCBIAEgQKAggIEgQKAggIEgQKAgEIEgQKAgEIEgQKAggIEgASAwoBARIECgIICBIECgIICBIFCgMICAgSBAoCCAgSBwoFAQEBAQESAwoBARIFCgMBAQgSAwoBCBIDCgEIEgASBAoCCAESBAoCCAESAwoBCBIAEgASAwoBCBIDCgEIvwEAFktTX1NFUEFSQVRFX1BVQkxJQ19LRVkHABNLU19BTExPV19ST0JPX0RVQ0tTBwAKREFZX01JTExJUwCAuJkpABRPTERfU1RBS0lOR19ERUFETElORQCA87jCsTIABWNoYWluCQDJAQIJAMoBAggFBHRoaXMFYnl0ZXMAAQABAANwdWIEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDADBRZLU19TRVBBUkFURV9QVUJMSUNfS0VZASCrF1ePFWfjWVRBsNZy62abxKPTZl7VmYZQ35g3H7IJCAEgT1PiGj9UqNadUk4THUYnVb2zU/Mse8lUVLD/Q8G0FCgDCQAAAgEBVAUHJG1hdGNoMAEgT1PiGj9UqNadUk4THUYnVb2zU/Mse8lUVLD/Q8G0FCgJAAIBAg1Vbmtub3duIGNoYWluAAt1c2R0QXNzZXRJZAQHJG1hdGNoMAUFY2hhaW4DCQAAAgEBVwUHJG1hdGNoMAEghNp6sggDP07Ru8qO7ouTvMmC3Qtd+geWqNQj+agP/7kDCQAAAgEBVAUHJG1hdGNoMAEgVbHYn3KHgu/l41uNrAWrZd6aQ6EvFrsF8xq3h6XxxRgJAAIBAg1Vbmtub3duIGNoYWluABVkZWZhdWx0UmVzdEFkZHJlc3NTdHIEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDACIzNQUUN1dkZidmg0TGtQVW5yblUxejNqbmJBMXA5bTNXTmh2AwkAAAIBAVQFByRtYXRjaDACIzNNdW1rR0d6dENLQVhwV0RxeGtkZG9mcVhTVWJxUWt2U0p5CQACAQINVW5rbm93biBjaGFpbgAQYWNyZXMyQWRkcmVzc1N0cgQHJG1hdGNoMAUFY2hhaW4DCQAAAgEBVwUHJG1hdGNoMAIjM1A0VUgzVDluWHBNTnBVbVNtUWpQbUV6M0c4NXQzem42ZUEDCQAAAgEBVAUHJG1hdGNoMAIjM05CUHgxRmNpdTNKUU5FR1oyMWpTblRkdXRMTkdHQlVTWGgJAAIBAg1Vbmtub3duIGNoYWluAA5hcmJpdHJhZ2VEZWxheQQHJG1hdGNoMAUFY2hhaW4DCQAAAgEBVwUHJG1hdGNoMAUKREFZX01JTExJUwMJAAACAQFUBQckbWF0Y2gwAODUAwkAAgECDVVua25vd24gY2hhaW4AA1NFUAICX18ABU1VTFQ2AMCEPQAFTVVMVDgAgMLXLwAFU1NJWkUAGQAFTVNJWkUAZAAFTFNJWkUA4QEABlhMU0laRQCQAwAHWFhMU0laRQDxBAAFSVRFUjYJAMwIAgAACQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUFA25pbAEPZ2V0U3RyaW5nT3JGYWlsAgdhZGRyZXNzA2tleQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFB2FkZHJlc3MFA2tleQkAuQkCCQDMCAICCm1hbmRhdG9yeSAJAMwIAgkApQgBBQdhZGRyZXNzCQDMCAICAS4JAMwIAgUDa2V5CQDMCAICDyBpcyBub3QgZGVmaW5lZAUDbmlsAgAAEUlkeENmZ0Vjb25vbXlEYXBwAAIAFElkeENmZ0dvdmVybmFuY2VEYXBwAAMADUlkeENmZ1dsZ0RhcHAABAAUSWR4Q2ZnVG91cm5hbWVudERhcHAABwAPSWR4Q2ZnQWNyZXNEYXBwAAgBCmtleVJlc3RDZmcAAg4lc19fcmVzdENvbmZpZwEOa2V5UmVzdEFkZHJlc3MAAgwlc19fcmVzdEFkZHIBEXJlYWRSZXN0Q2ZnT3JGYWlsAQRyZXN0CQC8CQIJAQ9nZXRTdHJpbmdPckZhaWwCBQRyZXN0CQEKa2V5UmVzdENmZwAFA1NFUAEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgdyZXN0Q2ZnA2lkeAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJAJEDAgUHcmVzdENmZwUDaWR4CQCsAgICKlJlc3QgY2ZnIGRvZXNuJ3QgY29udGFpbiBhZGRyZXNzIGF0IGluZGV4IAkApAMBBQNpZHgADHJlc3RDb250cmFjdAkBEUBleHRyTmF0aXZlKDEwNjIpAQkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzCQEOa2V5UmVzdEFkZHJlc3MABRVkZWZhdWx0UmVzdEFkZHJlc3NTdHIAB3Jlc3RDZmcJARFyZWFkUmVzdENmZ09yRmFpbAEFDHJlc3RDb250cmFjdAAPZWNvbm9teUNvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUHcmVzdENmZwURSWR4Q2ZnRWNvbm9teURhcHAAC2dvdkNvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUHcmVzdENmZwUUSWR4Q2ZnR292ZXJuYW5jZURhcHAAC3dsZ0NvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUHcmVzdENmZwUNSWR4Q2ZnV2xnRGFwcAASdG91cm5hbWVudENvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUHcmVzdENmZwUUSWR4Q2ZnVG91cm5hbWVudERhcHAADWFjcmVzQ29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQdyZXN0Q2ZnBQ9JZHhDZmdBY3Jlc0RhcHAACnJlY0xhbmROdW0AAAALcmVjTGFuZFNpemUAAQALcmVjVGVycmFpbnMAAgAMcmVjQ29udGluZW50AAMAD2FjcmVzQXNzZXRJZEtleQIMYWNyZXNBc3NldElkAAxhY3Jlc0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnAgCBQ1hY3Jlc0NvbnRyYWN0BQ9hY3Jlc0Fzc2V0SWRLZXkCF0FDUkVTIGlzIG5vdCBpc3N1ZWQgeWV0AAtyYW5kb21EZWxheQACAQlrZXlDb21taXQBB2FkZHJlc3MJAKwCAgIPZmluaXNoQmxvY2tGb3JfBQdhZGRyZXNzARFrZXlSZXNQcm9wb3J0aW9ucwACE3Jlc1R5cGVzUHJvcG9ydGlvbnMBFmtleVJlc1R5cGVzQnlDb250aW5lbnQBCWNvbnRpbmVudAkArAICAhRyZXNUeXBlc0J5Q29udGluZW50XwUJY29udGluZW50ARVrZXlTdGFrZWRMYW5kc0J5T3duZXIBCW93bmVyQWRkcgkArAICAhNzdGFrZWRMYW5kc0J5T3duZXJfBQlvd25lckFkZHIBFmtleVN0YWtlZFBpZWNlc0J5T3duZXIBCW93bmVyQWRkcgkArAICAhRzdGFrZWRQaWVjZXNCeU93bmVyXwUJb3duZXJBZGRyAQVhc0ludAEBdgQHJG1hdGNoMAUBdgMJAAECBQckbWF0Y2gwAgNJbnQEAW4FByRtYXRjaDAFAW4JAAIBAhVmYWlsIHRvIGNhc3QgaW50byBJbnQBCWFzQW55TGlzdAEBdgQHJG1hdGNoMAUBdgMJAAECBQckbWF0Y2gwAglMaXN0W0FueV0EAWwFByRtYXRjaDAFAWwJAAIBAhtmYWlsIHRvIGNhc3QgaW50byBMaXN0W0FueV0BD251bVBpZWNlc0J5U2l6ZQEIbGFuZFNpemUEByRtYXRjaDAFCGxhbmRTaXplAwkAAAICAVMFByRtYXRjaDAFBVNTSVpFAwkAAAICAU0FByRtYXRjaDAFBU1TSVpFAwkAAAICAUwFByRtYXRjaDAFBUxTSVpFAwkAAAICAlhMBQckbWF0Y2gwBQZYTFNJWkUDCQAAAgIDWFhMBQckbWF0Y2gwBQdYWExTSVpFCQACAQIRVW5rbm93biBsYW5kIHNpemUBCmtleUJsb2NrZWQAAhBjb250cmFjdHNCbG9ja2VkARVrZXlMYXN0V2Vla1R4SWRCeVVzZXIBBGFkZHIJAKwCAgITbGFzdFdlZWtUeElkQnlVc2VyXwUEYWRkcgEUa2V5Q3VyV2Vla1R4SWRCeVVzZXIBBGFkZHIJAKwCAgISY3VyV2Vla1R4SWRCeVVzZXJfBQRhZGRyAQpmaXhlZFBvaW50AgN2YWwIZGVjaW1hbHMEBnRlblBvdwkAbAYACgAABQhkZWNpbWFscwAAAAAFBERPV04EB2xvd1BhcnQJAKQDAQkAagIFA3ZhbAUGdGVuUG93BAZ6ZXJvZXMJALACAgkApAMBBQZ0ZW5Qb3cJAGQCAAEJALECAQUHbG93UGFydAkArAICCQCsAgIJAKwCAgkApAMBCQBpAgUDdmFsBQZ0ZW5Qb3cCAS4FBnplcm9lcwUHbG93UGFydAEPZ2V0UmFuZG9tTnVtYmVyAwhtYXhWYWx1ZQRzYWx0B2VudHJvcHkDCQBnAgAABQhtYXhWYWx1ZQkAAgECFm1heFZhbHVlIHNob3VsZCBiZSA+IDAECnJhbmRvbUhhc2gJANQWAQkAywECBQRzYWx0BQdlbnRyb3B5CQBqAgkAsQkBBQpyYW5kb21IYXNoBQhtYXhWYWx1ZQEJZmluYWxUaW1lAAkAlwMBCQDMCAIIBQlsYXN0QmxvY2sJdGltZXN0YW1wCQDMCAIFFE9MRF9TVEFLSU5HX0RFQURMSU5FBQNuaWwACkxBTkRQUkVGSVgCBExBTkQACkRVQ0tQUkVGSVgCBERVQ0sAC1JPQk9fUFJFRklYAgRST0JPAApBUlRQUkVTQUxFAgdQUkVTQUxFAAZOVU1SRVMABgAYTUFYX0xBTkRTX1NUQUtFRF9CWV9VU0VSABkAD0RBSUxZUkVTQllQSUVDRQCA+NIBAAxXSE1VTFRJUExJRVIAgMivoCUAD0RFRkFVTFRMT0NBVElPTgIPQWZyaWNhX0ZfQWZyaWNhABBSRVNPVVJDRVBSSUNFTUlOANW1AgAVTUlOX1VTRFRfRkVFX0RFTElWRVJZANCGAwAVVVNEVDJBQ1JFU19NVUxUSVBMSUVSAAoAF0FMTE9XRURfRlJFRV9ERUxJVkVSSUVTAAAAGkFDUkVTX0ZPUl9ERUxJVkVSWV9BVFRFTVBUAICEr18ACXByb2RUeXBlcwkAzAgCAhBGaXJzdCBBaWQgS2l0IEwxCQDMCAICEEZpcnN0IEFpZCBLaXQgTDIJAMwIAgIQRmlyc3QgQWlkIEtpdCBMMwkAzAgCAgtCYWNrcGFjayBMMQkAzAgCAgtCYWNrcGFjayBMMgkAzAgCAgtCYWNrcGFjayBMMwkAzAgCAg5Gb29kIFJhdGlvbiBMMQkAzAgCAg5Gb29kIFJhdGlvbiBMMgkAzAgCAg5Gb29kIFJhdGlvbiBMMwkAzAgCAgtKZXQgUGFjayBMMQkAzAgCAgtKZXQgUGFjayBMMgkAzAgCAgtKZXQgUGFjayBMMwkAzAgCAglTaGllbGQgTDEJAMwIAgIJU2hpZWxkIEwyCQDMCAICCVNoaWVsZCBMMwkAzAgCAgdNaW5lIEwxCQDMCAICB01pbmUgTDIJAMwIAgIHTWluZSBMMwkAzAgCAgdUcmFwIEwxCQDMCAICB1RyYXAgTDIJAMwIAgIHVHJhcCBMMwkAzAgCAgtCb29tLURvZyBMMQkAzAgCAgtCb29tLURvZyBMMgkAzAgCAgtCb29tLURvZyBMMwUDbmlsABBwcm9kdWN0aW9uTWF0cml4CQDMCAICJThfOF84XzE3XzE3XzQyXzEyXzBfMzBfMCwwLDAsMCwwLDAsMF8JAMwIAgIlOF84XzhfMTdfMTdfNDJfMjRfMF82MF8wLDAsNSwyLDAsMCwwXwkAzAgCAic4XzhfOF8xN18xN180Ml8zNl8wXzEyMF8wLDAsMTAsNCwwLDAsMF8JAMwIAgIpOF8xOV8xOV84XzI3XzE5XzI2XzFfMjBfMCwwLDAsMCwwLDAsMF8wMDEJAMwIAgIpOF8xOV8xOV84XzI3XzE5XzUyXzFfNDBfMCwwLDAsMCwwLDAsMF8wMDEJAMwIAgIpOF8xOV8xOV84XzI3XzE5Xzc4XzFfODBfMCwwLDAsMCwwLDAsMF8wMDEJAMwIAgIlOF84XzhfOF84XzYwXzEzXzJfMl8wLDAsMCwwLDAsMCwwXzAxMQkAzAgCAiU4XzhfOF84XzhfNjBfMjZfMl80XzAsMCwwLDAsMCwwLDBfMDExCQDMCAICJThfOF84XzhfOF82MF8zOV8yXzhfMCwwLDAsMCwwLDAsMF8wMTEJAMwIAgIpMzBfMzBfM18xN18xN18zXzMwXzNfMzBfMCwwLDAsMCwwLDAsMF8xMTEJAMwIAgIpMzBfMzBfM18xN18xN18zXzYwXzNfNTBfMCwwLDAsMCwwLDAsMF8xMTEJAMwIAgIpMzBfMzBfM18xN18xN18zXzkwXzNfNzBfMCwwLDAsMCwwLDAsMF8xMTEJAMwIAgIrMThfMThfMTBfMThfMThfMThfMTFfNF8xMF8wLDAsMCwwLDAsMCwwXzIwMQkAzAgCAisxOF8xOF8xMF8xOF8xOF8xOF8yMl80XzIwXzAsMCwwLDAsMCwwLDBfMjAxCQDMCAICKzE4XzE4XzEwXzE4XzE4XzE4XzMzXzRfMzBfMCwwLDAsMCwwLDAsMF8yMDEJAMwIAgIqNF8xM18yMl80XzM1XzIyXzIzXzBfNTAsMSwwXzAsMCwwLDAsMCwwLDBfCQDMCAICKjRfMTNfMjJfNF8zNV8yMl80Nl8wXzUwLDEsMV8wLDIsNSwwLDAsMCwwXwkAzAgCAis0XzEzXzIyXzRfMzVfMjJfNjlfMF81MCwyLDFfMCw1LDEwLDAsMCwwLDBfCQDMCAICKjVfMjVfNDBfNV8xMF8xNV8yMF8xXzMwLDEsMV8wLDAsMCwwLDAsMCwwXwkAzAgCAio1XzI1XzQwXzVfMTBfMTVfNDBfMV8zMCwxLDJfMiwxLDMsMCwwLDAsMF8JAMwIAgIqNV8yNV80MF81XzEwXzE1XzYwXzFfMzAsMSwzXzUsMiw4LDAsMCwwLDBfCQDMCAICJzIzXzIzXzVfMjBfMjNfNl8zNV8yXzEwMF8wLDAsMCwwLDAsMCwwXwkAzAgCAicyM18yM181XzIwXzIzXzZfNzBfMl8xNTBfMCwwLDAsMCwwLDAsMF8JAMwIAgIoMjNfMjNfNV8yMF8yM182XzEwNV8yXzIwMF8wLDAsMCwwLDAsMCwwXwUDbmlsAAlySWR4Q29lZmYABgAQcklkeFJlcXVpcmVtZW50cwAJAAlySWR4U2xvdHMACgAOUFJPRFVDVFBLR1NJWkUACgALd2hJZHhMZXZlbHMAAAAId2hJZHhSZXMAAQAId2hJZHhNYXQAAgAJd2hJZHhQcm9kAAMACXdoSWR4TE9GVAAEAAl2b2xMb2NrZWQAAAALdm9sT2NjdXBpZWQAAQAHdm9sRnJlZQACAAh2b2xUb3RhbAADAApicElkeExldmVsAAAACGJwSWR4UmVzAAEACGJwSWR4TWF0AAIACWJwSWR4UHJvZAADAApsb2NJZHhUeXBlAAEACGxvY0lkeElkAAIBFWtleUxhbmRBc3NldElkVG9Pd25lcgEHYXNzZXRJZAkArAICAgNub18FB2Fzc2V0SWQBGmtleUxhbmRBc3NldElkVG9DdXN0b21OYW1lAQdhc3NldElkCQCsAgICBWxjbmFfBQdhc3NldElkARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQdhc3NldElkCQCsAgICA3N0XwUHYXNzZXRJZAEga2V5TGFuZEFydFN0YXR1c0J5VHlwZUFuZEFzc2V0SWQCBHR5cGUHYXNzZXRJZAkAuQkCCQDMCAICA2xhcwkAzAgCBQR0eXBlCQDMCAIFB2Fzc2V0SWQFA25pbAIBXwEia2V5U3Rha2VkVGltZUJ5VHlwZUFzc2V0SWRBbmRPd25lcgMHbmZ0VHlwZQdhc3NldElkCW93bmVyQWRkcgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICBnN0dGFvXwUHbmZ0VHlwZQIBXwUHYXNzZXRJZAIBXwUJb3duZXJBZGRyARJrZXlXYXJlaG91c2VCeUxhbmQBC2xhbmRBc3NldElkCQCsAgICA3doXwULbGFuZEFzc2V0SWQBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBB2Fzc2V0SWQJAKwCAgILaW5mcmFMZXZlbF8FB2Fzc2V0SWQBGmtleUR1Y2tBc3NldElkVG9DdXN0b21OYW1lAQdhc3NldElkCQCsAgICGGR1Y2tDdXN0b21OYW1lQnlBc3NldElkXwUHYXNzZXRJZAEWa2V5QWRkcmVzc1RvQ3VzdG9tTmFtZQEEYWRkcgkArAICAhhhY2NvdW50Q3VzdG9tTmFtZUJ5QWRkcl8FBGFkZHIBD2tleUFkZHJlc3NSZWZCeQEEYWRkcgkArAICAglhY2NSZWZCeV8FBGFkZHIBHGtleU9uYm9hcmRBcnRBY3RpdmF0ZWRPbkR1Y2sBC2R1Y2tBc3NldElkCQCsAgICGm9uYm9hcmRBcnRBY3RpdmF0ZWRPbkR1Y2tfBQtkdWNrQXNzZXRJZAEca2V5T25ib2FyZEFydER1Y2tBY3RpdmF0ZWRCeQEEYWRkcgkArAICAhpvbmJvYXJkQXJ0QWN0aXZhdGVkRHVja0J5XwUEYWRkcgETa2V5QWRkcmVzc1JlZmVycmFscwEEYWRkcgkArAICAg1hY2NSZWZlcnJhbHNfBQRhZGRyARBrZXlEdWNrSWRUb093bmVyAQdhc3NldElkCQCsAgICCmR1Y2tPd25lcl8FB2Fzc2V0SWQBFGtleVN0YWtlZER1Y2tCeU93bmVyAQlvd25lckFkZHIJAKwCAgISc3Rha2VkRHVja0J5T3duZXJfBQlvd25lckFkZHIBEWtleUJhY2twYWNrQnlEdWNrAQtkdWNrQXNzZXRJZAkArAICAgliYWNrUGFja18FC2R1Y2tBc3NldElkAQ9rZXlEdWNrTG9jYXRpb24BC2R1Y2tBc3NldElkCQCsAgICDWR1Y2tMb2NhdGlvbl8FC2R1Y2tBc3NldElkARVrZXlVc2VyR3dsUmVsZWFzZVRpbWUBCHVzZXJBZGRyCQCsAgICGiVzJXNfX3VzZXJHd2xSZWxlYXNlVGltZV9fBQh1c2VyQWRkcgAPZGVsaXZlcnlGdW5kS2V5AgxkZWxpdmVyeUZ1bmQADWxhc3RUb3VySWRLZXkCDiVzX19sYXN0VG91cklkAAZTQ0FMRTgAgMLXLwAMeHBMZXZlbFNjYWxlAIAZAA94cExldmVsUmVjaXBQb3cAoB8AEm51bVBvaW50c09uTGV2ZWxVcAADAAxyZXF1aXJlbWVudHMJAMwIAgIIU3RyZW5ndGgJAMwIAgIIQWNjdXJhY3kJAMwIAgIJSW50ZWxsZWN0CQDMCAICCUVuZHVyYW5jZQkAzAgCAglEZXh0ZXJpdHkJAMwIAgIFTGV2ZWwJAMwIAgIGSGVhbHRoBQNuaWwADGNoYXJTdHJlbmd0aAAAAAxjaGFyQWNjdXJhY3kAAQANY2hhckludGVsbGVjdAACAA1jaGFyRW5kdXJhbmNlAAMADWNoYXJEZXh0ZXJpdHkABAAKTlVNTUFJTkFVWAACAAhNQVhTTE9UUwACAA1NQVhQUk9ESU5TTE9UAB4BDWtleUR1Y2tIZWFsdGgBC2R1Y2tBc3NldElkCQCsAgICC2R1Y2tIZWFsdGhfBQtkdWNrQXNzZXRJZAEMa2V5RHVja0NoYXJzAQtkdWNrQXNzZXRJZAkArAICAgpkdWNrQ2hhcnNfBQtkdWNrQXNzZXRJZAEJa2V5RHVja1hQAQtkdWNrQXNzZXRJZAkArAICAgdkdWNrWFBfBQtkdWNrQXNzZXRJZAEMa2V5RHVja0xldmVsAQtkdWNrQXNzZXRJZAkArAICAgpkdWNrTGV2ZWxfBQtkdWNrQXNzZXRJZAERa2V5RHVja0ZyZWVQb2ludHMBC2R1Y2tBc3NldElkCQCsAgICD2R1Y2tGcmVlUG9pbnRzXwULZHVja0Fzc2V0SWQBEGtleUR1Y2tFcXVpcG1lbnQBC2R1Y2tBc3NldElkCQCsAgICDmR1Y2tFcXVpcG1lbnRfBQtkdWNrQXNzZXRJZAEJa2V5VXNlclhQAQRhZGRyCQCsAgICB3VzZXJYUF8FBGFkZHIBDGtleVVzZXJMZXZlbAEEYWRkcgkArAICAgp1c2VyTGV2ZWxfBQRhZGRyARFrZXlVc2VyRnJlZVBvaW50cwEEYWRkcgkArAICAg91c2VyRnJlZVBvaW50c18FBGFkZHIBDmtleVNhdmVkSGVhbHRoAQtkdWNrQXNzZXRJZAkArAICAgxzYXZlZEhlYWx0aF8FC2R1Y2tBc3NldElkARBrZXlTYXZlZExvY2F0aW9uAQtkdWNrQXNzZXRJZAkArAICAg5zYXZlZExvY2F0aW9uXwULZHVja0Fzc2V0SWQBFGtleUR1Y2tEZWxpdmVyeUNvdW50AQtkdWNrQXNzZXRJZAkArAICAhl0b3RhbERlbGl2ZXJ5Q291bnRCeUR1Y2tfBQtkdWNrQXNzZXRJZAEUa2V5VXNlckRlbGl2ZXJ5Q291bnQBBGFkZHIJAKwCAgISdXNlckRlbGl2ZXJ5Q291bnRfBQRhZGRyARZrZXlVc2VyTGFzdERlbGl2ZXJ5RGF5AQRhZGRyCQCsAgICFHVzZXJMYXN0RGVsaXZlcnlEYXlfBQRhZGRyAAd4cENsYWltAJBOAAx4cEN1c3RvbU5hbWUAwIQ9AAl4cE9uYm9hcmQAwIQ9AQlsZXZlbEJ5WFABAnhwCQBrAwUMeHBMZXZlbFNjYWxlCQBsBgUCeHAABAUPeHBMZXZlbFJlY2lwUG93AAQABAUERE9XTgUGU0NBTEU4AQltYXhIZWFsdGgBBWxldmVsCQBkAgBkBQVsZXZlbAEHbGV2ZWxVcAIJY3VyckxldmVsBW5ld1hQBAhuZXdMZXZlbAkBCWxldmVsQnlYUAEFBW5ld1hQCQDMCAIFCG5ld0xldmVsCQDMCAIJAGgCBRJudW1Qb2ludHNPbkxldmVsVXAJAGUCBQhuZXdMZXZlbAUJY3VyckxldmVsBQNuaWwACURBWU1JTExJUwCAuJkpARlrZXlMYXN0V2xnVHJhZGVUaW1lQnlVc2VyAQRhZGRyCQCsAgICEGxhc3RBcmJUaW1lVXNlcl8FBGFkZHIBGmtleUFjcmVzU3Rha2VkQW1vdW50QnlVc2VyAQRhZGRyCQCsAgICGGFjcmVzU3Rha2VkQW1vdW50QnlVc2VyXwUEYWRkcgAMUkVOQU1JTkdDT1NUAMCWsQIACk1BWE5BTUVMRU4AMgAPUFJFU0FMRU5VTUxBTkRTAPQDARprZXlMYW5kQ3VzdG9tTmFtZVRvQXNzZXRJZAEEbmFtZQkArAICAgRsY25fBQRuYW1lAR5rZXlJbmZyYUxldmVsQnlBc3NldElkQW5kT3duZXICB2Fzc2V0SWQJb3duZXJBZGRyCQCsAgIJAKwCAgkArAICAgVpbGFvXwUHYXNzZXRJZAIBXwUJb3duZXJBZGRyARFrZXlMYW5kTnVtVG9Pd25lcgEHbGFuZE51bQkArAICAgNsb18FB2xhbmROdW0BGmtleUR1Y2tDdXN0b21OYW1lVG9Bc3NldElkAQRuYW1lCQCsAgICEWR1Y2tCeUN1c3RvbU5hbWVfBQRuYW1lARZrZXlDdXN0b21OYW1lVG9BZGRyZXNzAQRuYW1lCQCsAgICFGFjY291bnRCeUN1c3RvbU5hbWVfBQRuYW1lAQlrZXlPbGRpZXMAAgpvbGRpZXNMaXN0AAtjbGFpbU1vZGVXaAAAAA1jbGFpbU1vZGVEdWNrAAEAE2NsYWltTW9kZVdoVGhlbkR1Y2sAAgETZGlzdHJpYnV0ZUJ5V2VpZ2h0cwIFdG90YWwHd2VpZ2h0cwQDc3VtCQBkAgkAZAIJAGQCCQBkAgkAZAIJAJEDAgUHd2VpZ2h0cwAACQCRAwIFB3dlaWdodHMAAQkAkQMCBQd3ZWlnaHRzAAIJAJEDAgUHd2VpZ2h0cwADCQCRAwIFB3dlaWdodHMABAkAkQMCBQd3ZWlnaHRzAAUDCQBnAgAABQNzdW0JAAIBAhBaZXJvIHdlaWdodHMgc3VtBAVub3JtNgkAawMFBXRvdGFsBQVNVUxUNgUDc3VtCgEKbm9ybWFsaXplcgIDYWNjBGVsZW0JAM0IAgUDYWNjCQBrAwUEZWxlbQUFbm9ybTYFBU1VTFQ2CgACJGwFB3dlaWdodHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCm5vcm1hbGl6ZXICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYBEmdldE5lZWRlZE1hdGVyaWFscwEFdG90YWwEBXByb3BzCQC1CQIJAQV2YWx1ZQEJAKIIAQkBEWtleVJlc1Byb3BvcnRpb25zAAIBXwMJAQIhPQIJAJADAQUFcHJvcHMFBk5VTVJFUwkAAgECFldyb25nIHByb3BvcnRpb25zIGRhdGEEAXIJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBXByb3BzAAAJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBXByb3BzAAEJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBXByb3BzAAIJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBXByb3BzAAMJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBXByb3BzAAQJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBXByb3BzAAUFA25pbAkBE2Rpc3RyaWJ1dGVCeVdlaWdodHMCBQV0b3RhbAUBcgEOcHJvZFN0clRvQnl0ZXMBB3Byb2RTdHIEBXBMaXN0AwkAAAIFB3Byb2RTdHICAAUDbmlsCQC8CQIFB3Byb2RTdHICAV8KAQR0b0JWAgNhY2MGcmVjaXBlBAFqCQBpAgkAyAEBBQNhY2MACAQEY3VycgMJAGYCCQCQAwEFBXBMaXN0BQFqCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcExpc3QFAWoAAAkAywECBQNhY2MJAJoDAQUEY3VycgoAAiRsBRBwcm9kdWN0aW9uTWF0cml4CgACJHMJAJADAQUCJGwKAAUkYWNjMAEACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQR0b0JWAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyA1MAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAAZABoAGwAcAB0AHgAfACAAIQAiACMAJAAlACYAJwAoACkAKgArACwALQAuAC8AMAAxADIBDmJ5dGVzVG9Qcm9kU3RyAQJidgoBBmZyb21CVgIDYWNjBnJlY2lwZQQBagkAkAMBBQNhY2MEAWIJAMkBAgkAygECBQJidgkAaAIACAUBagAICQDNCAIFA2FjYwkApAMBCQCxCQEFAWIJALoJAgoAAiRsBRBwcm9kdWN0aW9uTWF0cml4CgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQZmcm9tQlYCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDUwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkAGgAbABwAHQAeAB8AIAAhACIAIwAkACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgIBXwEVY2hlY2tTdGF0UmVxdWlyZW1lbnRzAglkdWNrU3RhdHMEcmVxcwoBBWNoZWNrAgNhY2MBagQEYnVmZgMJAGYCCQCQAwEFCWR1Y2tTdGF0cwkAZAIABwUBagkAkQMCBQlkdWNrU3RhdHMJAGQCAAcFAWoAAAMJAGYCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEcmVxcwUBagkAZAIJAJEDAgUJZHVja1N0YXRzBQFqBQRidWZmCQACAQkArAICAhtSZXF1aXJlbWVudCBub3Qgc2F0aXNmaWVkOiAJAJEDAgUMcmVxdWlyZW1lbnRzBQFqBgoAAiRsCQDMCAIAAAkAzAgCAAEJAMwIAgACCQDMCAIAAwkAzAgCAAQJAMwIAgAFCQDMCAIABgUDbmlsCgACJHMJAJADAQUCJGwKAAUkYWNjMAcKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBBWNoZWNrAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA3CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcBCGFkZFByb2RCBwZpZHhDbnQFcExpc3QKaXNQb3NpdGl2ZQdzZWdtZW50B21haW5BdXgEc2xvdAlkdWNrU3RhdHMEBXBhcnRzCQC1CQIFBmlkeENudAIBOgMJAQIhPQIJAJADAQUFcGFydHMAAgkAAgECKEluY29ycmVjdCBmb3JtYXQsIHNob3VsZCBiZSBpbmRleDphbW91bnQDAwkBASEBBQppc1Bvc2l0aXZlCQECIT0CCQCxAgEJAJEDAgUFcGFydHMAAAACBwkAAgECK1Byb2R1Y3QgaWR4IHNob3VsZCBiZSAyIGRpZ2l0cywgemVybyBwYWRkZWQECnByb2R1Y3RJZHgJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwYXJ0cwAABAVjb3VudAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBXBhcnRzAAEDAwkAZgIAAAUKcHJvZHVjdElkeAYJAGcCBQpwcm9kdWN0SWR4CQCQAwEFEHByb2R1Y3Rpb25NYXRyaXgJAAIBAhNVbmtub3duIHByb2R1Y3QgaWR4AwkAZgIAAAUFY291bnQJAAIBAhdDb3VudCBjYW4ndCBiZSBuZWdhdGl2ZQMJAGYCBQVjb3VudAUNTUFYUFJPRElOU0xPVAkAAgEJAKwCAgkArAICCQCsAgICFENhbid0IHB1dCBtb3JlIHRoYW4gCQCkAwEFDU1BWFBST0RJTlNMT1QCBCBvZiAJAJEDAgUJcHJvZFR5cGVzBQpwcm9kdWN0SWR4AwkAAAIFBWNvdW50AAAJAJQKAgUFcExpc3QHBARoZWFkCQDJAQIFBXBMaXN0CQBoAgAIBQpwcm9kdWN0SWR4BARjdXJyCQCxCQEJAMkBAgkAygECBQVwTGlzdAkAaAIACAUKcHJvZHVjdElkeAAIBAR0YWlsCQDKAQIFBXBMaXN0CQBoAgAICQBkAgUKcHJvZHVjdElkeAABBAZyZWNpcGUJALUJAgkAkQMCBRBwcm9kdWN0aW9uTWF0cml4BQpwcm9kdWN0SWR4AgFfAwMJAQEhAQUKaXNQb3NpdGl2ZQkAZgIFBWNvdW50BQRjdXJyBwkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAglZb3UgaGF2ZSAJAKQDAQUEY3VycgIEIG9mIAkAkQMCBQlwcm9kVHlwZXMFCnByb2R1Y3RJZHgCEywgYnV0IHRyaWVkIHRvIHVzZSAJAKQDAQUFY291bnQECWlzQmlnSXRlbQMDCQEBIQEFCmlzUG9zaXRpdmUJARVjaGVja1N0YXRSZXF1aXJlbWVudHMCBQlkdWNrU3RhdHMJALUJAgkAkQMCBQZyZWNpcGUFEHJJZHhSZXF1aXJlbWVudHMCASwHBAZjb21wYXQJAJEDAgUGcmVjaXBlBQlySWR4U2xvdHMDCQAAAgUGY29tcGF0AgAJAAIBAhdJdGVtIGNhbm5vdCBiZSBlcXVpcHBlZAQBYwkBDXBhcnNlSW50VmFsdWUBBQZjb21wYXQEBGNTZWcJAGkCBQFjAGQDCQECIT0CBQdzZWdtZW50BQRjU2VnCQACAQIUU2VnbWVudCBpbmNvbXBhdGlibGUECGNNYWluQXV4CQBpAgkAagIFAWMAZAAKAwkBAiE9AgUHbWFpbkF1eAUIY01haW5BdXgJAAIBAhFTbG90IGluY29tcGF0aWJsZQQJY051bVNsb3RzCQBqAgUBYwAKAwMJAQIhPQIFBHNsb3QAAAkAZgIFCWNOdW1TbG90cwABBwkAAgECHkJpZyBpdGVtcyBzaG91bGQgb2NjdXB5IHNsb3QgMAkAZgIFCWNOdW1TbG90cwABBwkAlAoCCQDLAQIJAMsBAgUEaGVhZAkAmgMBCQBkAgUEY3VycgMFCmlzUG9zaXRpdmUFBWNvdW50CQEBLQEFBWNvdW50BQR0YWlsBQlpc0JpZ0l0ZW0BC3Nsb3RzR3JvdXBCBgFnBGJwSW4KaXNQb3NpdGl2ZQdzZWdtZW50B21haW5BdXgFc3RhdHMDCQECIT0CBQFnAgAEBXNsb3RzCQC1CQIFAWcCASwDCQBmAgkAkAMBBQVzbG90cwUITUFYU0xPVFMJAAIBAhJXcm9uZyBzbG90cyBmb3JtYXQEAnMwCQCRAwIFBXNsb3RzAAAEAnMxAwkAZgIJAJADAQUFc2xvdHMAAQkAkQMCBQVzbG90cwABAgADAwkAAAIFAnMwAgAJAAACBQJzMQIABwUEYnBJbgQFdG1wUzADCQECIT0CBQJzMAIACQEIYWRkUHJvZEIHBQJzMAUEYnBJbgUKaXNQb3NpdGl2ZQUHc2VnbWVudAUHbWFpbkF1eAAABQVzdGF0cwkAlAoCBQRicEluBwMJAQIhPQIFAnMxAgADCAUFdG1wUzACXzIJAAIBAh5CaWcgaXRlbSBhbHJlYWR5IG9jY3VwaWVzIHNsb3QICQEIYWRkUHJvZEIHBQJzMQgFBXRtcFMwAl8xBQppc1Bvc2l0aXZlBQdzZWdtZW50BQdtYWluQXV4AAEFBXN0YXRzAl8xCAUFdG1wUzACXzEFBGJwSW4BBmRyZXNzQgQHc2VnTGlzdAZwQnl0ZXMKaXNQb3NpdGl2ZQVzdGF0cwoBB3NlZ21lbnQCA2FjYwNzZWcEAWoIBQNhY2MCXzEEB21haW5BdXgJALUJAgUDc2VnAgE7AwkBAiE9AgkAkAMBBQdtYWluQXV4BQpOVU1NQUlOQVVYCQACAQIUV3Jvbmcgc2VnbWVudCBmb3JtYXQEAW0JAJEDAgUHbWFpbkF1eAAABAFhCQCRAwIFB21haW5BdXgAAQMDCQAAAgUBbQIACQAAAgUBYQIABwkAlAoCCQBkAgUBagABCAUDYWNjAl8yBAR0bXBNCQELc2xvdHNHcm91cEIGBQFtCAUDYWNjAl8yBQppc1Bvc2l0aXZlBQFqAAAFBXN0YXRzCQCUCgIJAGQCBQFqAAEJAQtzbG90c0dyb3VwQgYFAWEFBHRtcE0FCmlzUG9zaXRpdmUFAWoAAQUFc3RhdHMICgACJGwFB3NlZ0xpc3QKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCUCgIAAAUGcEJ5dGVzCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQdzZWdtZW50AgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAl8yARl1cGRhdGVQcm9wb3J0aW9uc0ludGVybmFsBAhwcm9wTGlzdA10ZXJyYWluQ291bnRzDWxhbmRTaXplSW5kZXgEc2lnbgMJAQIhPQIJAJADAQUIcHJvcExpc3QFBk5VTVJFUwkAAgECFldyb25nIHByb3BvcnRpb25zIGRhdGEKAQd1cGRhdGVyAgNhY2MBaQQGcmVzdWx0CQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCHByb3BMaXN0BQFpCQBoAgkAaAIFBHNpZ24JAJEDAgUNdGVycmFpbkNvdW50cwUBaQUNbGFuZFNpemVJbmRleAMJAGYCAAAFBnJlc3VsdAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIWUGFuaWMhIFBpZWNlcyBvZiB0eXBlPQkApAMBBQFpAgcsIHNpZ249CQCkAwEFBHNpZ24CEywgdGVycmFpbkNvdW50c1tpXT0JAKQDAQkAkQMCBQ10ZXJyYWluQ291bnRzBQFpAhAsIGxhbmRTaXplSW5kZXg9CQCkAwEFDWxhbmRTaXplSW5kZXgJAM0IAgUDYWNjCQCkAwEFBnJlc3VsdAoAAiRsBQVJVEVSNgoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEHdXBkYXRlcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgERdXBkYXRlUHJvcG9ydGlvbnMDDXRlcnJhaW5Db3VudHMNbGFuZFNpemVJbmRleARzaWduBAhwcm9wTGlzdAkAtQkCCQELdmFsdWVPckVsc2UCCQCiCAEJARFrZXlSZXNQcm9wb3J0aW9ucwACCzBfMF8wXzBfMF8wAgFfCQC5CQIJARl1cGRhdGVQcm9wb3J0aW9uc0ludGVybmFsBAUIcHJvcExpc3QFDXRlcnJhaW5Db3VudHMFDWxhbmRTaXplSW5kZXgFBHNpZ24CAV8BDWNvdW50VGVycmFpbnMBCHRlcnJhaW5zCQDMCAIJAGUCCQCQAwEJALUJAgUIdGVycmFpbnMCAUEAAQkAzAgCCQBlAgkAkAMBCQC1CQIFCHRlcnJhaW5zAgFCAAEJAMwIAgkAZQIJAJADAQkAtQkCBQh0ZXJyYWlucwIBQwABCQDMCAIJAGUCCQCQAwEJALUJAgUIdGVycmFpbnMCAUQAAQkAzAgCCQBlAgkAkAMBCQC1CQIFCHRlcnJhaW5zAgFFAAEJAMwIAgkAZQIJAJADAQkAtQkCBQh0ZXJyYWlucwIBRgABBQNuaWwBBmFkZFJlcwUKY3VycmVudFJlcw10ZXJyYWluQ291bnRzCWRlbHRhVGltZQ1sYW5kU2l6ZUluZGV4F2RhaWx5QnlQaWVjZVdpdGhCb251c2VzCgEFYWRkZXICA2FjYwFpBAlyZXNPZlR5cGUJAGgCCQBoAgkAawMFCWRlbHRhVGltZQUXZGFpbHlCeVBpZWNlV2l0aEJvbnVzZXMFCURBWU1JTExJUwkAkQMCBQ10ZXJyYWluQ291bnRzBQFpBQ1sYW5kU2l6ZUluZGV4CQDNCAIFA2FjYwkApAMBCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCmN1cnJlbnRSZXMFAWkFCXJlc09mVHlwZQQBcgoAAiRsBQVJVEVSNgoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEFYWRkZXICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYJALkJAgUBcgIBXwEPdmlydENsYWltQWRkUmVzBQpjdXJyZW50UmVzDXRlcnJhaW5Db3VudHMJZGVsdGFUaW1lDWxhbmRTaXplSW5kZXgXZGFpbHlCeVBpZWNlV2l0aEJvbnVzZXMKAQVhZGRlcgIDYWNjAWkECXJlc09mVHlwZQkAaAIJAGgCCQBrAwUJZGVsdGFUaW1lBRdkYWlseUJ5UGllY2VXaXRoQm9udXNlcwUJREFZTUlMTElTCQCRAwIFDXRlcnJhaW5Db3VudHMFAWkFDWxhbmRTaXplSW5kZXgEDHRvdGFsUmVzVHlwZQkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQpjdXJyZW50UmVzBQFpBQlyZXNPZlR5cGUJAJQKAgkAzQgCCAUDYWNjAl8xBQx0b3RhbFJlc1R5cGUJAGQCCAUDYWNjAl8yBQx0b3RhbFJlc1R5cGUKAAIkbAUFSVRFUjYKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCUCgIFA25pbAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQVhZGRlcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgEJdmlydENsYWltBA10ZXJyYWluQ291bnRzCWRlbHRhVGltZQ1sYW5kU2l6ZUluZGV4F2RhaWx5QnlQaWVjZVdpdGhCb251c2VzCgEFYWRkZXICA2FjYwx0ZXJyYWluQ291bnQECXJlc09mVHlwZQkAaAIJAGgCCQBrAwUJZGVsdGFUaW1lBRdkYWlseUJ5UGllY2VXaXRoQm9udXNlcwUJREFZTUlMTElTBQx0ZXJyYWluQ291bnQFDWxhbmRTaXplSW5kZXgJAJQKAgkAzQgCCAUDYWNjAl8xBQlyZXNPZlR5cGUJAGQCCAUDYWNjAl8yBQlyZXNPZlR5cGUKAAIkbAUNdGVycmFpbkNvdW50cwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgUDbmlsAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBBWFkZGVyAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAQ1kaXN0cmlidXRlUmVzBAxjdXJyZW50V2hSZXMOY3VycmVudFBhY2tSZXMKcmVzVG9DbGFpbQt3aFNwYWNlTGVmdAQOcmVzTGlzdFRvQ2xhaW0IBQpyZXNUb0NsYWltAl8xBAxyZXNBbVRvQ2xhaW0IBQpyZXNUb0NsYWltAl8yAwkAAAIFDHJlc0FtVG9DbGFpbQAACQCUCgIJALkJAgUMY3VycmVudFdoUmVzAgFfCQC5CQIFDmN1cnJlbnRQYWNrUmVzAgFfAwkAZwIFC3doU3BhY2VMZWZ0BQxyZXNBbVRvQ2xhaW0KAQhhZGRMaXN0cwIDYWNjAWkJAM0IAgUDYWNjCQCkAwEJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUMY3VycmVudFdoUmVzBQFpCQCRAwIFDnJlc0xpc3RUb0NsYWltBQFpBAFyCgACJGwFBUlURVI2CgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQhhZGRMaXN0cwIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgkAlAoCCQC5CQIFAXICAV8JALkJAgUOY3VycmVudFBhY2tSZXMCAV8KAQxhZGRQYXJ0TGlzdHMCA2FjYwFpBAZ3aFBhcnQJAGsDCQCRAwIFDnJlc0xpc3RUb0NsYWltBQFpBQt3aFNwYWNlTGVmdAUMcmVzQW1Ub0NsYWltCQCUCgIJAM0IAggFA2FjYwJfMQkApAMBCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDGN1cnJlbnRXaFJlcwUBaQUGd2hQYXJ0CQDNCAIIBQNhY2MCXzIJAKQDAQkAZQIJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUOY3VycmVudFBhY2tSZXMFAWkJAJEDAgUOcmVzTGlzdFRvQ2xhaW0FAWkFBndoUGFydAQBcgoAAiRsBQVJVEVSNgoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgUDbmlsBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBDGFkZFBhcnRMaXN0cwIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgkAlAoCCQC5CQIIBQFyAl8xAgFfCQC5CQIIBQFyAl8yAgFfAQtnZXRCYWNrcGFjawEFYnBLZXkEAXAJALUJAgkBC3ZhbHVlT3JFbHNlAgkAoggBBQVicEtleQIaMDowXzBfMF8wXzBfMDowXzBfMF8wXzBfMDoCAToJAMwIAgkApAMBCQELdmFsdWVPckVsc2UCCQC2CQEJAJEDAgUBcAUKYnBJZHhMZXZlbAAACQDMCAIDCQAAAgkAkAMBCQC1CQIJAJEDAgUBcAUIYnBJZHhSZXMCAV8FBk5VTVJFUwkAkQMCBQFwBQhicElkeFJlcwILMF8wXzBfMF8wXzAJAMwIAgMJAAACCQCQAwEJALUJAgkAkQMCBQFwBQhicElkeE1hdAIBXwUGTlVNUkVTCQCRAwIFAXAFCGJwSWR4TWF0AgswXzBfMF8wXzBfMAkAzAgCCQCRAwIFAXAFCWJwSWR4UHJvZAUDbmlsARdnZXRXYXJlaG91c2VUb3RhbFZvbHVtZQEJdm9sUHJlZml4BAVwYXJ0cwkAtQkCBQl2b2xQcmVmaXgCAV8JAGgCCQBoAgUMV0hNVUxUSVBMSUVSCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBXBhcnRzAAEAAQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBXBhcnRzAAABF2dldFdhcmVob3VzZU9jY3VwaWVkVm9sAQljdXJyZW50V2gEBWdvb2RzCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhQcm9kCgEJc3VtUmVzTWF0AgNhY2MEaXRlbQkAZAIFA2FjYwkBDXBhcnNlSW50VmFsdWUBBQRpdGVtCgEHc3VtUHJvZAIDYWNjBGl0ZW0EA2lkeAgFA2FjYwJfMQQEcGtncwkAaQIJAGUCCQBkAgkBDXBhcnNlSW50VmFsdWUBBQRpdGVtBQ5QUk9EVUNUUEtHU0laRQABBQ5QUk9EVUNUUEtHU0laRQkAlAoCCQBkAgUDaWR4AAEJAGQCCAUDYWNjAl8yCQBoAgUEcGtncwUFTVVMVDgECHdoUmVzVm9sCgACJGwJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4UmVzAgFfCgACJHMJAJADAQUCJGwKAAUkYWNjMAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQlzdW1SZXNNYXQCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYECHdoTWF0Vm9sCgACJGwJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4TWF0AgFfCgACJHMJAJADAQUCJGwKAAUkYWNjMAAACgEFJGYxXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQlzdW1SZXNNYXQCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjFfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjFfMgIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYECndoR29vZHNWb2wDCQAAAgUFZ29vZHMCAAAACAoAAiRsCQC8CQIFBWdvb2RzAgFfCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCAAAAAAoBBSRmMl8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEHc3VtUHJvZAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMl8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgNTAJAQUkZjJfMgIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUABUAFgAXABgAGQAaABsAHAAdAB4AHwAgACEAIgAjACQAJQAmACcAKAApACoAKwAsAC0ALgAvADAAMQAyAl8yCQBkAgkAZAIFCHdoUmVzVm9sBQh3aE1hdFZvbAUKd2hHb29kc1ZvbAEMZ2V0V2FyZWhvdXNlAwV3aEtleQlsYW5kSW5kZXgKaW5mcmFMZXZlbAQJdm9sUHJlZml4CQCsAgIJAKwCAgkApAMBBQlsYW5kSW5kZXgCAV8JAKQDAQUKaW5mcmFMZXZlbAQHd2hUb3RhbAkBF2dldFdhcmVob3VzZVRvdGFsVm9sdW1lAQUJdm9sUHJlZml4BAV3aFN0cgkBC3ZhbHVlT3JFbHNlAgkAoggBBQV3aEtleQkArAICBQl2b2xQcmVmaXgCGzowXzBfMF8wXzBfMDowXzBfMF8wXzBfMDo6MAQCd2gJALwJAgUFd2hTdHICAToECndoT2NjdXBpZWQJARdnZXRXYXJlaG91c2VPY2N1cGllZFZvbAEFAndoBAZ3aExvZnQDCQBmAgAFCQCQAwEFAndoCQC5CQIJAMwIAgIBMAkAzAgCCQCkAwEFCndoT2NjdXBpZWQJAMwIAgkApAMBCQBlAgUHd2hUb3RhbAUKd2hPY2N1cGllZAkAzAgCCQCkAwEFB3doVG90YWwFA25pbAIBXwQEbG9mdAkAtQkCCQCRAwIFAndoBQl3aElkeExPRlQCAV8ECHdoTG9ja2VkCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAUJdm9sTG9ja2VkBANvY2MDCQBmAgkAkAMBBQRsb2Z0AAEJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQt2b2xPY2N1cGllZAUKd2hPY2N1cGllZAkAuQkCCQDMCAIJAKQDAQUId2hMb2NrZWQJAMwIAgkApAMBBQNvY2MJAMwIAgkApAMBCQBlAgkAZQIFB3doVG90YWwFCHdoTG9ja2VkBQNvY2MJAMwIAgkApAMBBQd3aFRvdGFsBQNuaWwCAV8JAMwIAgkAkQMCBQJ3aAULd2hJZHhMZXZlbHMJAMwIAgMJAAACCQCQAwEJALUJAgkAkQMCBQJ3aAUId2hJZHhSZXMCAV8FBk5VTVJFUwkAkQMCBQJ3aAUId2hJZHhSZXMCCzBfMF8wXzBfMF8wCQDMCAIDCQAAAgkAkAMBCQC1CQIJAJEDAgUCd2gFCHdoSWR4TWF0AgFfBQZOVU1SRVMJAJEDAgUCd2gFCHdoSWR4TWF0AgswXzBfMF8wXzBfMAkAzAgCCQCRAwIFAndoBQl3aElkeFByb2QJAMwIAgUGd2hMb2Z0BQNuaWwBDGFwcGx5Qm9udXNlcwILbGFuZEFzc2V0SWQGcGllY2VzBAppbmZyYUxldmVsCQELdmFsdWVPckVsc2UCCQCfCAEJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQULbGFuZEFzc2V0SWQAAAQJYXJ0UGllY2VzCQELdmFsdWVPckVsc2UCCQCfCAEJASBrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQW5kQXNzZXRJZAIFCkFSVFBSRVNBTEUFC2xhbmRBc3NldElkAAAEBGFkZDYJAGkCBQppbmZyYUxldmVsAAYEBGFkZDcJAGkCBQppbmZyYUxldmVsAAcJAGQCCQBkAgUPREFJTFlSRVNCWVBJRUNFCQBrAwUPREFJTFlSRVNCWVBJRUNFCQBkAgkAZAIFCmluZnJhTGV2ZWwFBGFkZDYJAGgCAAIFBGFkZDcABQkAawMFD0RBSUxZUkVTQllQSUVDRQUJYXJ0UGllY2VzCQBoAgUGcGllY2VzAAUBFGNoZWNrQ2xhaW1Db25kaXRpb25zAwRhZGRyCWNsYWltTW9kZQ1sYW5kQXNzZXRJZEluBA0kdDAzNDI0NzM0Nzg2AwkAAAIFCWNsYWltTW9kZQULY2xhaW1Nb2RlV2gJAJQKAgUNbGFuZEFzc2V0SWRJbgkBC3ZhbHVlT3JFbHNlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyAgAEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQLY3VyTG9jYXRpb24JAQt2YWx1ZU9yRWxzZQIJAKIIAQkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkBQ9ERUZBVUxUTE9DQVRJT04EA2xvYwkAtQkCCQEFdmFsdWUBBQtjdXJMb2NhdGlvbgIBXwMJAQIhPQIJAJEDAgUDbG9jBQpsb2NJZHhUeXBlAgFMCQACAQkArAICCQCsAgICFkR1Y2sgbG9jYXRpb24gdHlwZSBpcyAJAJEDAgUDbG9jBQpsb2NJZHhUeXBlAhEsIGJ1dCBzaG91bGQgYmUgTAkAlAoCCQCRAwIFA2xvYwUIbG9jSWR4SWQFC2R1Y2tBc3NldElkBAtsYW5kQXNzZXRJZAgFDSR0MDM0MjQ3MzQ3ODYCXzEEBmR1Y2tJZAgFDSR0MDM0MjQ3MzQ3ODYCXzIEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQULbGFuZEFzc2V0SWQEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQULbGFuZEFzc2V0SWQECXNhdmVkVGltZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCfCAEFB3RpbWVLZXkJAKwCAgkArAICAgVMYW5kIAgFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkBAVvd25lcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQtsYW5kQXNzZXRJZAkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDCQECIT0CBQVvd25lcgUEYWRkcgkAAgEJAKwCAgUKTEFORFBSRUZJWAINIGlzIG5vdCB5b3VycwQBZAkAtQkCCAUFYXNzZXQLZGVzY3JpcHRpb24CAV8JAJYKBAUGZHVja0lkBQtsYW5kQXNzZXRJZAUBZAUJc2F2ZWRUaW1lARBjbGFpbVJlc0ludGVybmFsBARhZGRyBmFtb3VudAljbGFpbU1vZGUNbGFuZEFzc2V0SWRJbgMJAGYCAAAFBmFtb3VudAkAAgECD05lZ2F0aXZlIGFtb3VudAQBYwkBFGNoZWNrQ2xhaW1Db25kaXRpb25zAwUEYWRkcgUJY2xhaW1Nb2RlBQ1sYW5kQXNzZXRJZEluBAhsYW5kU2l6ZQkAkQMCCAUBYwJfMwULcmVjTGFuZFNpemUEDXRlcnJhaW5Db3VudHMJAQ1jb3VudFRlcnJhaW5zAQkAkQMCCAUBYwJfMwULcmVjVGVycmFpbnMECWRlbHRhVGltZQkAZQIJAQlmaW5hbFRpbWUACAUBYwJfNAMJAGYCAAAFCWRlbHRhVGltZQkAAgEJAKwCAgkArAICCQCsAgICJlNhdmVkIHRpbWVzdGFtcCBpcyBpbiBmdXR1cmUsIHNhdmVkID0gCQCkAwEIBQFjAl80AgosIGZpbmFsID0gCQCkAwEJAQlmaW5hbFRpbWUABAZwaWVjZXMJAQ9udW1QaWVjZXNCeVNpemUBBQhsYW5kU2l6ZQQWZGFpbHlQcm9kdWN0aW9uQnlQaWVjZQkBDGFwcGx5Qm9udXNlcwIIBQFjAl8yBQZwaWVjZXMECGF2YWlsUmVzCQBrAwUJZGVsdGFUaW1lCQBoAgUWZGFpbHlQcm9kdWN0aW9uQnlQaWVjZQUGcGllY2VzBQlEQVlNSUxMSVMDCQBmAgUGYW1vdW50BQhhdmFpbFJlcwkAAgEJAKwCAgkArAICCQCsAgICIk5vdCBlbm91Z2ggcmVzb3VyY2VzLCBhdmFpbGFibGUgPSAJAKQDAQUIYXZhaWxSZXMCDiwgcmVxdWVzdGVkID0gCQCkAwEFBmFtb3VudAQMbmV3RGVsdGFUaW1lCQBrAwkAZQIFCGF2YWlsUmVzBQZhbW91bnQFCURBWU1JTExJUwkAaAIFFmRhaWx5UHJvZHVjdGlvbkJ5UGllY2UFBnBpZWNlcwQMbmV3VGltZXN0YW1wCQBlAgkBCWZpbmFsVGltZQAFDG5ld0RlbHRhVGltZQQJbGFuZEluZGV4CQBpAgUGcGllY2VzBQVTU0laRQQKcmVzVG9DbGFpbQkBCXZpcnRDbGFpbQQFDXRlcnJhaW5Db3VudHMJAGUCBQlkZWx0YVRpbWUFDG5ld0RlbHRhVGltZQUJbGFuZEluZGV4BRZkYWlseVByb2R1Y3Rpb25CeVBpZWNlBAV3aEtleQkBEmtleVdhcmVob3VzZUJ5TGFuZAEIBQFjAl8yBAppbmZyYUxldmVsCQELdmFsdWVPckVsc2UCCQCfCAEJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQgFAWMCXzIAAAQJY3VycmVudFdoCQEMZ2V0V2FyZWhvdXNlAwUFd2hLZXkFCWxhbmRJbmRleAUKaW5mcmFMZXZlbAQEbG9mdAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhMT0ZUAgFfBAt3aFNwYWNlTGVmdAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFB3ZvbEZyZWUDAwkAAAIFCWNsYWltTW9kZQULY2xhaW1Nb2RlV2gJAGYCBQZhbW91bnQFC3doU3BhY2VMZWZ0BwkAAgEJAKwCAgkArAICAgVPbmx5IAkApAMBBQt3aFNwYWNlTGVmdAIYIHNwYWNlIGxlZnQgaW4gd2FyZWhvdXNlBAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQgFAWMCXzEEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQOY3VycmVudFBhY2tSZXMJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMCAV8EDGN1cnJlbnRXaFJlcwkAtQkCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhSZXMCAV8EDSR0MDM3MTU2MzgwMjcDCQAAAgUJY2xhaW1Nb2RlBQtjbGFpbU1vZGVXaAkAlgoECQEGYWRkUmVzBQUMY3VycmVudFdoUmVzBQ10ZXJyYWluQ291bnRzCQBlAgUJZGVsdGFUaW1lBQxuZXdEZWx0YVRpbWUFCWxhbmRJbmRleAUWZGFpbHlQcm9kdWN0aW9uQnlQaWVjZQkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAULdm9sT2NjdXBpZWQIBQpyZXNUb0NsYWltAl8yCQBlAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFB3ZvbEZyZWUIBQpyZXNUb0NsYWltAl8yAwkAAAIFCWNsYWltTW9kZQUNY2xhaW1Nb2RlRHVjawkAlgoECQCRAwIFCWN1cnJlbnRXaAUId2hJZHhSZXMJAQZhZGRSZXMFBQ5jdXJyZW50UGFja1JlcwUNdGVycmFpbkNvdW50cwkAZQIFCWRlbHRhVGltZQUMbmV3RGVsdGFUaW1lBQlsYW5kSW5kZXgFFmRhaWx5UHJvZHVjdGlvbkJ5UGllY2UJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQt2b2xPY2N1cGllZAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFB3ZvbEZyZWUEBWRpc3RyCQENZGlzdHJpYnV0ZVJlcwQFDGN1cnJlbnRXaFJlcwUOY3VycmVudFBhY2tSZXMFCnJlc1RvQ2xhaW0FC3doU3BhY2VMZWZ0BAR3aEFtCQCXAwEJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFB3ZvbEZyZWUJAMwIAggFCnJlc1RvQ2xhaW0CXzIFA25pbAkAlgoECAUFZGlzdHICXzEIBQVkaXN0cgJfMgkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQt2b2xPY2N1cGllZAUEd2hBbQkAZQIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQd2b2xGcmVlBQR3aEFtBAV3aFJlcwgFDSR0MDM3MTU2MzgwMjcCXzEEBWJwUmVzCAUNJHQwMzcxNTYzODAyNwJfMgQFbG9mdE8IBQ0kdDAzNzE1NjM4MDI3Al8zBAVsb2Z0RggFDSR0MDM3MTU2MzgwMjcCXzQJAJcKBQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBCAUBYwJfMgUMbmV3VGltZXN0YW1wCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEia2V5U3Rha2VkVGltZUJ5VHlwZUFzc2V0SWRBbmRPd25lcgMFCkxBTkRQUkVGSVgIBQFjAl8yBQRhZGRyBQxuZXdUaW1lc3RhbXAFA25pbAUFYnBLZXkJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCBQVicFJlcwkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QFA25pbAUFd2hLZXkJAMwIAgkAkQMCBQljdXJyZW50V2gFC3doSWR4TGV2ZWxzCQDMCAIFBXdoUmVzCQDMCAIJAJEDAgUJY3VycmVudFdoBQh3aElkeE1hdAkAzAgCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhQcm9kCQDMCAIJALkJAgkAzAgCCQCRAwIFBGxvZnQFCXZvbExvY2tlZAkAzAgCCQCkAwEFBWxvZnRPCQDMCAIJAKQDAQUFbG9mdEYJAMwIAgkAkQMCBQRsb2Z0BQh2b2xUb3RhbAUDbmlsAgFfBQNuaWwBCGNsYWltQWxsBARhZGRyC2xhbmRBc3NldElkBnBpZWNlcwljbGFpbU1vZGUEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQULbGFuZEFzc2V0SWQECXNhdmVkVGltZQkBBXZhbHVlAQkAnwgBBQd0aW1lS2V5BAhhdmFpbFJlcwkAaAIJAGsDCQBlAgkBCWZpbmFsVGltZQAFCXNhdmVkVGltZQkBDGFwcGx5Qm9udXNlcwIFC2xhbmRBc3NldElkBQZwaWVjZXMFCURBWU1JTExJUwUGcGllY2VzCQEQY2xhaW1SZXNJbnRlcm5hbAQFBGFkZHIFCGF2YWlsUmVzBQljbGFpbU1vZGUFC2xhbmRBc3NldElkARN1cGRhdGVTdGF0c0ludGVybmFsBAZsdmxLZXkFeHBLZXkJcG9pbnRzS2V5B2RlbHRhWFAEAnhwCQELdmFsdWVPckVsc2UCCQCfCAEFBXhwS2V5AAAEBW5ld1hQCQBkAgUCeHAFB2RlbHRhWFAECWx2bFBvaW50cwkBB2xldmVsVXACCQELdmFsdWVPckVsc2UCCQCfCAEFBmx2bEtleQAABQVuZXdYUAkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQZsdmxLZXkJAJEDAgUJbHZsUG9pbnRzAAAJAMwIAgkBDEludGVnZXJFbnRyeQIFBXhwS2V5BQVuZXdYUAkAzAgCCQEMSW50ZWdlckVudHJ5AgUJcG9pbnRzS2V5CQBkAgkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlwb2ludHNLZXkAAAkAkQMCBQlsdmxQb2ludHMAAQUDbmlsBQVuZXdYUAEXdXBkYXRlRHVja1N0YXRzSW50ZXJuYWwCC2R1Y2tBc3NldElkB2RlbHRhWFAEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQULZHVja0Fzc2V0SWQEBGFkZHIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEQa2V5RHVja0lkVG9Pd25lcgEFC2R1Y2tBc3NldElkCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDCBpcyBvcnBoYW5lZAMDAwUTS1NfQUxMT1dfUk9CT19EVUNLUwkAAAIIBQVhc3NldAZpc3N1ZXIFBHRoaXMHCQEIY29udGFpbnMCCAUFYXNzZXQEbmFtZQULUk9CT19QUkVGSVgHCQETdXBkYXRlU3RhdHNJbnRlcm5hbAQJAQxrZXlVc2VyTGV2ZWwBBQRhZGRyCQEJa2V5VXNlclhQAQUEYWRkcgkBEWtleVVzZXJGcmVlUG9pbnRzAQUEYWRkcgUHZGVsdGFYUAkBE3VwZGF0ZVN0YXRzSW50ZXJuYWwECQEMa2V5RHVja0xldmVsAQULZHVja0Fzc2V0SWQJAQlrZXlEdWNrWFABBQtkdWNrQXNzZXRJZAkBEWtleUR1Y2tGcmVlUG9pbnRzAQULZHVja0Fzc2V0SWQFB2RlbHRhWFABFnVwZGF0ZUFjY1N0YXRzSW50ZXJuYWwCBGFkZHIHZGVsdGFYUAkBE3VwZGF0ZVN0YXRzSW50ZXJuYWwECQEMa2V5VXNlckxldmVsAQUEYWRkcgkBCWtleVVzZXJYUAEFBGFkZHIJARFrZXlVc2VyRnJlZVBvaW50cwEFBGFkZHIFB2RlbHRhWFABEmFjdGl2YXRlT25ib2FyZEFydAEEYWRkcgQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkBAhyZWZCeUtleQkBD2tleUFkZHJlc3NSZWZCeQEFBGFkZHIEBXJlZkJ5CQCiCAEFCHJlZkJ5S2V5AwkBASEBCQEJaXNEZWZpbmVkAQUFcmVmQnkJAAIBAilZb3UgYXJlIG5vdCBlbGlnaWJsZSBmb3IgT05CT0FSRCBhcnRpZmFjdAQGYXJ0S2V5CQEca2V5T25ib2FyZEFydER1Y2tBY3RpdmF0ZWRCeQEFBGFkZHIEB2FydER1Y2sJAKIIAQUGYXJ0S2V5AwkBCWlzRGVmaW5lZAEFB2FydER1Y2sJAAIBCQCsAgICL1lvdSBhbHJlYWR5IHVzZWQgeW91ciBPTkJPQVJEIGFydGlmYWN0IG9uIGR1Y2sgCQEFdmFsdWUBBQdhcnREdWNrBBBkdWNrQWN0aXZhdG9yS2V5CQEca2V5T25ib2FyZEFydEFjdGl2YXRlZE9uRHVjawEFC2R1Y2tBc3NldElkBA1kdWNrQWN0aXZhdG9yCQCiCAEFEGR1Y2tBY3RpdmF0b3JLZXkDCQEJaXNEZWZpbmVkAQUNZHVja0FjdGl2YXRvcgkAAgEJAKwCAgkArAICCQCsAgICCVRoZSBkdWNrIAULZHVja0Fzc2V0SWQCNCBhbHJlYWR5IGdvdCBwb2ludHMgZnJvbSBPTkJPQVJEIGFydGlmYWN0IGZyb20gdXNlciAJAQV2YWx1ZQEFDWR1Y2tBY3RpdmF0b3IJAM4IAgkAzAgCCQELU3RyaW5nRW50cnkCBQZhcnRLZXkFC2R1Y2tBc3NldElkCQDMCAIJAQtTdHJpbmdFbnRyeQIFEGR1Y2tBY3RpdmF0b3JLZXkFBGFkZHIFA25pbAgJARd1cGRhdGVEdWNrU3RhdHNJbnRlcm5hbAIFC2R1Y2tBc3NldElkBQl4cE9uYm9hcmQCXzEBEmFjdGl2YXRlUHJlc2FsZUFydAIEYWRkcg1sYW5kQXNzZXRJZEluBAFjCQEUY2hlY2tDbGFpbUNvbmRpdGlvbnMDBQRhZGRyBRNjbGFpbU1vZGVXaFRoZW5EdWNrBQ1sYW5kQXNzZXRJZEluBAtsYW5kQXNzZXRJZAgFAWMCXzIEBnBpZWNlcwkBD251bVBpZWNlc0J5U2l6ZQEJAJEDAggFAWMCXzMFC3JlY0xhbmRTaXplBA1hY3RpdmF0aW9uS2V5CQEga2V5TGFuZEFydFN0YXR1c0J5VHlwZUFuZEFzc2V0SWQCBQpBUlRQUkVTQUxFBQtsYW5kQXNzZXRJZAMJAGYCCQELdmFsdWVPckVsc2UCCQCfCAEFDWFjdGl2YXRpb25LZXkAAAAACQACAQIlUHJlc2FsZSBhcnRpZmFjdCBpcyBhbHJlYWR5IGFjdGl2YXRlZAMJAGYCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAggFAWMCXzMFCnJlY0xhbmROdW0FD1BSRVNBTEVOVU1MQU5EUwkAAgEJAKwCAgkArAICCQCsAgIFCkxBTkRQUkVGSVgCASAFC2xhbmRBc3NldElkAiUgaXMgbm90IGVsaWdpYmxlIGZvciBwcmVzYWxlIGFydGlmYWN0BAtjbGFpbVJlc3VsdAkBCGNsYWltQWxsBAUEYWRkcgULbGFuZEFzc2V0SWQFBnBpZWNlcwUTY2xhaW1Nb2RlV2hUaGVuRHVjawkAzQgCCQDNCAIJAM0IAggFC2NsYWltUmVzdWx0Al8xCQEMSW50ZWdlckVudHJ5AgUNYWN0aXZhdGlvbktleQUGcGllY2VzCQELU3RyaW5nRW50cnkCCAULY2xhaW1SZXN1bHQCXzIJALkJAggFC2NsYWltUmVzdWx0Al8zAgE6CQELU3RyaW5nRW50cnkCCAULY2xhaW1SZXN1bHQCXzQJALkJAggFC2NsYWltUmVzdWx0Al81AgE6AQZwcm9sb2cBAWkDAwkBAiE9AggFAWkMb3JpZ2luQ2FsbGVyBQxyZXN0Q29udHJhY3QJAQt2YWx1ZU9yRWxzZQIJAKAIAQkBCmtleUJsb2NrZWQABwcJAAIBAh9Db250cmFjdHMgYXJlIHVuZGVyIG1haW50ZW5hbmNlCQDMCAIJAQtTdHJpbmdFbnRyeQIJARRrZXlDdXJXZWVrVHhJZEJ5VXNlcgEJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyCQDYBAEIBQFpDXRyYW5zYWN0aW9uSWQFA25pbAETdW5zdGFrZUxhbmRJbnRlcm5hbAIEYWRkcgtsYW5kQXNzZXRJZAQFd2hLZXkJARJrZXlXYXJlaG91c2VCeUxhbmQBBQtsYW5kQXNzZXRJZAQIbGFuZEluZm8JALUJAggJAQV2YWx1ZQEJAOwHAQkA2QQBBQtsYW5kQXNzZXRJZAtkZXNjcmlwdGlvbgIBXwQIbGFuZFNpemUJAJEDAgUIbGFuZEluZm8FC3JlY0xhbmRTaXplBAZwaWVjZXMJAQ9udW1QaWVjZXNCeVNpemUBBQhsYW5kU2l6ZQQKaW5mcmFMZXZlbAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEFC2xhbmRBc3NldElkAAAECWxhbmRJbmRleAkAaQIFBnBpZWNlcwUFU1NJWkUEDXRlcnJhaW5Db3VudHMJAQ1jb3VudFRlcnJhaW5zAQkAkQMCBQhsYW5kSW5mbwULcmVjVGVycmFpbnMECWN1cnJlbnRXaAkBDGdldFdhcmVob3VzZQMFBXdoS2V5BQlsYW5kSW5kZXgFCmluZnJhTGV2ZWwEDGN1cnJlbnRXaFJlcwkAtQkCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhSZXMCAV8EB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQULbGFuZEFzc2V0SWQECXNhdmVkVGltZQkBEUBleHRyTmF0aXZlKDEwNTUpAQUHdGltZUtleQQJZGVsdGFUaW1lCQBlAgkBCWZpbmFsVGltZQAFCXNhdmVkVGltZQMJAGYCAAAFCWRlbHRhVGltZQkAAgEJAKwCAgkArAICCQCsAgICJlNhdmVkIHRpbWVzdGFtcCBpcyBpbiBmdXR1cmUsIHNhdmVkID0gCQCkAwEFCXNhdmVkVGltZQIKLCBmaW5hbCA9IAkApAMBCQEJZmluYWxUaW1lAAQWZGFpbHlQcm9kdWN0aW9uQnlQaWVjZQkBDGFwcGx5Qm9udXNlcwIFC2xhbmRBc3NldElkBQZwaWVjZXMEDXJlc0FmdGVyQ2xhaW0JAQ92aXJ0Q2xhaW1BZGRSZXMFBQxjdXJyZW50V2hSZXMFDXRlcnJhaW5Db3VudHMFCWRlbHRhVGltZQUJbGFuZEluZGV4BRZkYWlseVByb2R1Y3Rpb25CeVBpZWNlBAlhcnRQaWVjZXMJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBIGtleUxhbmRBcnRTdGF0dXNCeVR5cGVBbmRBc3NldElkAgUKQVJUUFJFU0FMRQULbGFuZEFzc2V0SWQAAAQPYWNyZXNGcm9tUGllY2VzCQBkAgkAaAIFBnBpZWNlcwUFTVVMVDgJAGkCCQBoAgkAZAIJAGgCBQZwaWVjZXMFCmluZnJhTGV2ZWwFCWFydFBpZWNlcwUFTVVMVDgABQQMYWNyZXNGcm9tUmVzCQBoAgkAawMIBQ1yZXNBZnRlckNsYWltAl8yBRBSRVNPVVJDRVBSSUNFTUlOBQVNVUxUOAUVVVNEVDJBQ1JFU19NVUxUSVBMSUVSCgEGc3VtTWF0AgNhY2MEaXRlbQkAZAIFA2FjYwkBDXBhcnNlSW50VmFsdWUBBQRpdGVtBAV3aE1hdAoAAiRsCQC1CQIJAJEDAgUJY3VycmVudFdoBQh3aElkeE1hdAIBXwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEGc3VtTWF0AgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGBAxhY3Jlc0Zyb21NYXQJAGgCCQBrAwUFd2hNYXQJAGgCAAIFEFJFU09VUkNFUFJJQ0VNSU4FBU1VTFQ4BRVVU0RUMkFDUkVTX01VTFRJUExJRVIEBXByb2RzAwkAAAIJAJEDAgUJY3VycmVudFdoBQl3aElkeFByb2QCAAUDbmlsCQC8CQIJAJEDAgUJY3VycmVudFdoBQl3aElkeFByb2QCAV8KAQdzdW1Qcm9kAgNhY2MEaXRlbQQBaggFA2FjYwJfMgQLcmVjaXBlQ29lZmYJAQ1wYXJzZUludFZhbHVlAQkAkQMCCQC1CQIJAJEDAgUQcHJvZHVjdGlvbk1hdHJpeAUBagIBXwUJcklkeENvZWZmCQCUCgIJAGQCCAUDYWNjAl8xCQBoAgkAaAIJAQ1wYXJzZUludFZhbHVlAQUEaXRlbQULcmVjaXBlQ29lZmYFBU1VTFQ2CQBkAgUBagABBAZ3aFByb2QKAAIkbAUFcHJvZHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCUCgIAAAAACgEFJGYxXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQdzdW1Qcm9kAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYxXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAyNAkBBSRmMV8yAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAQNYWNyZXNGcm9tUHJvZAkAaAIJAGsDCAUGd2hQcm9kAl8xCQBoAgACBRBSRVNPVVJDRVBSSUNFTUlOBQVNVUxUOAUVVVNEVDJBQ1JFU19NVUxUSVBMSUVSCQCWCgQFD2FjcmVzRnJvbVBpZWNlcwUMYWNyZXNGcm9tUmVzBQxhY3Jlc0Zyb21NYXQFDWFjcmVzRnJvbVByb2QBE3Vuc3Rha2VEdWNrSW50ZXJuYWwCBGFkZHILZHVja0Fzc2V0SWQEBWVxS2V5CQEQa2V5RHVja0VxdWlwbWVudAEFC2R1Y2tBc3NldElkBAtjdXJyZW50U2VncwkAtQkCCQELdmFsdWVPckVsc2UCCQCiCAEFBWVxS2V5AhcsOyxfLDssXyw7LF8sOyxfLDssXyw7LAIBXwQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkECXRlbXBQcm9kQgkBBmRyZXNzQgQFC2N1cnJlbnRTZWdzCQEOcHJvZFN0clRvQnl0ZXMBCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QGBQNuaWwECm5ld1Byb2RTdHIJAQ5ieXRlc1RvUHJvZFN0cgEFCXRlbXBQcm9kQgoBCXN1bVJlc01hdAIDYWNjBGl0ZW0JAGQCBQNhY2MJAQ1wYXJzZUludFZhbHVlAQUEaXRlbQQFYnBSZXMKAAIkbAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwIBXwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEJc3VtUmVzTWF0AgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGBAxhY3Jlc0Zyb21SZXMJAGgCCQBrAwUFYnBSZXMFEFJFU09VUkNFUFJJQ0VNSU4FBU1VTFQ4BRVVU0RUMkFDUkVTX01VTFRJUExJRVIEBWJwTWF0CgACJGwJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQCAV8KAAIkcwkAkAMBBQIkbAoABSRhY2MwAAAKAQUkZjFfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCXN1bVJlc01hdAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMV8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMV8yAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgQMYWNyZXNGcm9tTWF0CQBoAgkAawMFBWJwTWF0CQBoAgACBRBSRVNPVVJDRVBSSUNFTUlOBQVNVUxUOAUVVVNEVDJBQ1JFU19NVUxUSVBMSUVSBAVwcm9kcwMJAAACBQpuZXdQcm9kU3RyAgAFA25pbAkAvAkCBQpuZXdQcm9kU3RyAgFfCgEHc3VtUHJvZAIDYWNjBGl0ZW0EAWoIBQNhY2MCXzIEC3JlY2lwZUNvZWZmCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgkAtQkCCQCRAwIFEHByb2R1Y3Rpb25NYXRyaXgFAWoCAV8FCXJJZHhDb2VmZgkAlAoCCQBkAggFA2FjYwJfMQkAaAIJAGgCCQENcGFyc2VJbnRWYWx1ZQEFBGl0ZW0FC3JlY2lwZUNvZWZmBQVNVUxUNgkAZAIFAWoAAQQGYnBQcm9kCgACJGwFBXByb2RzCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCAAAAAAoBBSRmMl8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEHc3VtUHJvZAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMl8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMjQJAQUkZjJfMgIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUABUAFgAXABgEDWFjcmVzRnJvbVByb2QJAGgCCQBrAwgFBmJwUHJvZAJfMQkAaAIAAgUQUkVTT1VSQ0VQUklDRU1JTgUFTVVMVDgFFVVTRFQyQUNSRVNfTVVMVElQTElFUgkAlQoDBQxhY3Jlc0Zyb21SZXMFDGFjcmVzRnJvbU1hdAUNYWNyZXNGcm9tUHJvZCEBaQENY29uc3RydWN0b3JWMQEIcmVzdEFkZHIDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAhFQZXJtaXNzaW9uIGRlbmllZAkAzAgCCQELU3RyaW5nRW50cnkCCQEOa2V5UmVzdEFkZHJlc3MABQhyZXN0QWRkcgUDbmlsAWkBC3NhdmVJbnRlZ2VyAgNrZXkGYW1vdW50AwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIgc2F2ZUludGVnZXIgaXMgbm90IHB1YmxpYyBtZXRob2QJAMwIAgkBDEludGVnZXJFbnRyeQIFA2tleQUGYW1vdW50BQNuaWwBaQEKc2V0QmxvY2tlZAEJaXNCbG9ja2VkAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIRcGVybWlzc2lvbiBkZW5pZWQJAMwIAgkBDEJvb2xlYW5FbnRyeQIJAQprZXlCbG9ja2VkAAUJaXNCbG9ja2VkBQNuaWwBaQEJc3Rha2VMYW5kAAQNcHJvbG9nQWN0aW9ucwkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhxFeGFjdGx5IG9uZSBwYXltZW50IHJlcXVpcmVkBANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAQHYXNzZXRJZAkBBXZhbHVlAQgFA3BtdAdhc3NldElkBAdhZGRyZXNzCQClCAEIBQFpBmNhbGxlcgMJAQIhPQIIBQNwbXQGYW1vdW50AAEJAAIBCQCsAgIJAKwCAgIETkZUIAUKTEFORFBSRUZJWAIkIHRva2VuIHNob3VsZCBiZSBhdHRhY2hlZCBhcyBwYXltZW50BAVhc3NldAkBBXZhbHVlAQkA7AcBBQdhc3NldElkAwkBAiE9AggFBWFzc2V0Bmlzc3VlcgUEdGhpcwkAAgECF1Vua25vd24gaXNzdWVyIG9mIHRva2VuAwkBASEBCQEIY29udGFpbnMCCAUFYXNzZXQEbmFtZQUKTEFORFBSRUZJWAkAAgEJAKwCAgkArAICAglPbmx5IE5GVCAFCkxBTkRQUkVGSVgCFCB0b2tlbnMgYXJlIGFjY2VwdGVkBAtsYW5kTnVtU2l6ZQkAsAICCAUFYXNzZXQEbmFtZQAEBAdsYW5kTnVtAwkBCGNvbnRhaW5zAgULbGFuZE51bVNpemUCA1hYTAkAswICBQtsYW5kTnVtU2l6ZQADAwkBCGNvbnRhaW5zAgULbGFuZE51bVNpemUCAlhMCQCzAgIFC2xhbmROdW1TaXplAAIJALMCAgULbGFuZE51bVNpemUAAQMJAQEhAQkBCWlzRGVmaW5lZAEJALYJAQUHbGFuZE51bQkAAgEJAKwCAgIeQ2Fubm90IHBhcnNlIGxhbmQgbnVtYmVyIGZyb20gCAUFYXNzZXQEbmFtZQQLbGFuZEFzc2V0SWQJANgEAQUHYXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAMJAQlpc0RlZmluZWQBCQCfCAEFB3RpbWVLZXkJAAIBCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCEiBpcyBhbHJlYWR5IHN0YWtlZAQBZAkAtQkCCAUFYXNzZXQLZGVzY3JpcHRpb24CAV8EDXRlcnJhaW5Db3VudHMJAQ1jb3VudFRlcnJhaW5zAQkAkQMCBQFkBQtyZWNUZXJyYWlucwQGcGllY2VzCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCBQFkBQtyZWNMYW5kU2l6ZQQJbGFuZEluZGV4CQBpAgUGcGllY2VzBQVTU0laRQQFcHJvcHMJARF1cGRhdGVQcm9wb3J0aW9ucwMFDXRlcnJhaW5Db3VudHMFCWxhbmRJbmRleAABBAxyZXNCeUNvbnRLZXkJARZrZXlSZXNUeXBlc0J5Q29udGluZW50AQkAkQMCBQFkBQxyZWNDb250aW5lbnQECWNvbnRQcm9wcwkAtQkCCQELdmFsdWVPckVsc2UCCQCiCAEFDHJlc0J5Q29udEtleQILMF8wXzBfMF8wXzACAV8EEHVwZGF0ZWRDb250UHJvcHMJALkJAgkBGXVwZGF0ZVByb3BvcnRpb25zSW50ZXJuYWwEBQljb250UHJvcHMFDXRlcnJhaW5Db3VudHMFCWxhbmRJbmRleAABAgFfBAhsYW5kc0tleQkBFWtleVN0YWtlZExhbmRzQnlPd25lcgEFB2FkZHJlc3MECGxhbmRzU3RyCQCiCAEFCGxhbmRzS2V5BAVsYW5kcwMJAQlpc0RlZmluZWQBBQhsYW5kc1N0cgkAvQkCCQEFdmFsdWUBBQhsYW5kc1N0cgIBXwUDbmlsAwkBD2NvbnRhaW5zRWxlbWVudAIFBWxhbmRzBQtsYW5kQXNzZXRJZAkAAgEJAKwCAgIiWW91ciBzdGFrZWQgbGFuZHMgYWxyZWFkeSBjb250YWluIAULbGFuZEFzc2V0SWQDCQBnAgkAkAMBBQVsYW5kcwUYTUFYX0xBTkRTX1NUQUtFRF9CWV9VU0VSCQACAQkArAICCQCsAgICGVlvdXIgYWxyZWFkeSBzdGFrZWQgbWF4ICgJAKQDAQUYTUFYX0xBTkRTX1NUQUtFRF9CWV9VU0VSAgcpIGxhbmRzBAppbmZyYUxldmVsCQELdmFsdWVPckVsc2UCCQCfCAEJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQULbGFuZEFzc2V0SWQAAAQJcGllY2VzS2V5CQEWa2V5U3Rha2VkUGllY2VzQnlPd25lcgEFB2FkZHJlc3MECW9sZFBpZWNlcwkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlwaWVjZXNLZXkAAAQJd2xnUmVzdWx0CQD8BwQFC3dsZ0NvbnRyYWN0AhJvblN0YWtlVW5zdGFrZUxhbmQJAMwIAgUHYWRkcmVzcwUDbmlsBQNuaWwJAJQKAgkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQd0aW1lS2V5CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDBQpMQU5EUFJFRklYBQtsYW5kQXNzZXRJZAUHYWRkcmVzcwgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAMwIAgkBC1N0cmluZ0VudHJ5AgUIbGFuZHNLZXkJALsJAgkAzQgCBQVsYW5kcwULbGFuZEFzc2V0SWQCAV8JAMwIAgkBDEludGVnZXJFbnRyeQIFCXBpZWNlc0tleQkAZAIFCW9sZFBpZWNlcwUGcGllY2VzCQDMCAIJAQtTdHJpbmdFbnRyeQIJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQtsYW5kQXNzZXRJZAUHYWRkcmVzcwkAzAgCCQELU3RyaW5nRW50cnkCCQERa2V5TGFuZE51bVRvT3duZXIBBQdsYW5kTnVtBQdhZGRyZXNzCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEea2V5SW5mcmFMZXZlbEJ5QXNzZXRJZEFuZE93bmVyAgULbGFuZEFzc2V0SWQFB2FkZHJlc3MFCmluZnJhTGV2ZWwJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEWtleVJlc1Byb3BvcnRpb25zAAUFcHJvcHMJAMwIAgkBC1N0cmluZ0VudHJ5AgUMcmVzQnlDb250S2V5BRB1cGRhdGVkQ29udFByb3BzBQNuaWwFDXByb2xvZ0FjdGlvbnMFCXdsZ1Jlc3VsdAFpAQt1bnN0YWtlTGFuZAENbGFuZEFzc2V0SWRJbgQNcHJvbG9nQWN0aW9ucwkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQEYWRkcgkApQgBCAUBaQZjYWxsZXIEAWMJARRjaGVja0NsYWltQ29uZGl0aW9ucwMFBGFkZHIFDWNsYWltTW9kZUR1Y2sFDWxhbmRBc3NldElkSW4EC2xhbmRBc3NldElkCAUBYwJfMgQBZAgFAWMCXzMECGxhbmRzS2V5CQEVa2V5U3Rha2VkTGFuZHNCeU93bmVyAQUEYWRkcgQNdGVycmFpbkNvdW50cwkBDWNvdW50VGVycmFpbnMBCQCRAwIFAWQFC3JlY1RlcnJhaW5zBAZwaWVjZXMJAQ9udW1QaWVjZXNCeVNpemUBCQCRAwIFAWQFC3JlY0xhbmRTaXplBAlsYW5kSW5kZXgJAGkCBQZwaWVjZXMFBVNTSVpFBAVwcm9wcwkBEXVwZGF0ZVByb3BvcnRpb25zAwUNdGVycmFpbkNvdW50cwUJbGFuZEluZGV4AP///////////wEEDHJlc0J5Q29udEtleQkBFmtleVJlc1R5cGVzQnlDb250aW5lbnQBCQCRAwIFAWQFDHJlY0NvbnRpbmVudAQJY29udFByb3BzCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAKIIAQUMcmVzQnlDb250S2V5AgswXzBfMF8wXzBfMAIBXwQQdXBkYXRlZENvbnRQcm9wcwkAuQkCCQEZdXBkYXRlUHJvcG9ydGlvbnNJbnRlcm5hbAQFCWNvbnRQcm9wcwUNdGVycmFpbkNvdW50cwUJbGFuZEluZGV4AP///////////wECAV8EC2NsYWltUmVzdWx0CQEIY2xhaW1BbGwEBQRhZGRyBQtsYW5kQXNzZXRJZAUGcGllY2VzBQ1jbGFpbU1vZGVEdWNrBAVsYW5kcwkAvQkCCQELdmFsdWVPckVsc2UCCQCiCAEFCGxhbmRzS2V5AgACAV8EA2lkeAkAzwgCBQVsYW5kcwULbGFuZEFzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBBQNpZHgJAAIBCQCsAgICIFlvdXIgc3Rha2VkIGxhbmRzIGRvbid0IGNvbnRhaW4gBQtsYW5kQXNzZXRJZAQDbm93CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQOZ292UmVsZWFzZVRpbWUJAQt2YWx1ZU9yRWxzZQIJAJoIAgULZ292Q29udHJhY3QJARVrZXlVc2VyR3dsUmVsZWFzZVRpbWUBBQRhZGRyAAADCQBnAgUOZ292UmVsZWFzZVRpbWUFA25vdwkAAgEJAKwCAgI5WW91ciBnV0wgYXJlIHRha2luZyBwYXJ0IGluIHZvdGluZywgY2Fubm90IHVuc3Rha2UgdW50aWwgCQCkAwEFDmdvdlJlbGVhc2VUaW1lBA5hcmJSZWxlYXNlVGltZQkAZAIJAQt2YWx1ZU9yRWxzZQIJAJoIAgULd2xnQ29udHJhY3QJARlrZXlMYXN0V2xnVHJhZGVUaW1lQnlVc2VyAQUEYWRkcgAABQ5hcmJpdHJhZ2VEZWxheQMJAGYCBQ5hcmJSZWxlYXNlVGltZQUDbm93CQACAQkArAICAj9Zb3VyIHN0YWtlZCBsYW5kcyB0b29rIHBhcnQgaW4gYXJiaXRyYWdlLCBjYW5ub3QgdW5zdGFrZSB1bnRpbCAJAKQDAQUOYXJiUmVsZWFzZVRpbWUECXBpZWNlc0tleQkBFmtleVN0YWtlZFBpZWNlc0J5T3duZXIBBQRhZGRyBAxzdGFrZWRQaWVjZXMJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJcGllY2VzS2V5AAAECW5ld1BpZWNlcwMJAGYCBQZwaWVjZXMFDHN0YWtlZFBpZWNlcwAACQBlAgUMc3Rha2VkUGllY2VzBQZwaWVjZXMECXdsZ1Jlc3VsdAkA/AcEBQt3bGdDb250cmFjdAISb25TdGFrZVVuc3Rha2VMYW5kCQDMCAIFBGFkZHIFA25pbAUDbmlsCQCUCgIJAM4IAgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIAAQkA2QQBBQtsYW5kQXNzZXRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkCQDMCAIJAQtEZWxldGVFbnRyeQEJASJrZXlTdGFrZWRUaW1lQnlUeXBlQXNzZXRJZEFuZE93bmVyAwUKTEFORFBSRUZJWAULbGFuZEFzc2V0SWQFBGFkZHIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEWtleVJlc1Byb3BvcnRpb25zAAUFcHJvcHMJAMwIAgkBC1N0cmluZ0VudHJ5AgUMcmVzQnlDb250S2V5BRB1cGRhdGVkQ29udFByb3BzCQDMCAIJAQtTdHJpbmdFbnRyeQIIBQtjbGFpbVJlc3VsdAJfMgkAuQkCCAULY2xhaW1SZXN1bHQCXzMCAToJAMwIAgMJAGYCCQCQAwEFBWxhbmRzAAEJAQtTdHJpbmdFbnRyeQIFCGxhbmRzS2V5CQC7CQIJANEIAgUFbGFuZHMJAQV2YWx1ZQEFA2lkeAIBXwkBC0RlbGV0ZUVudHJ5AQUIbGFuZHNLZXkJAMwIAgkBDEludGVnZXJFbnRyeQIFCXBpZWNlc0tleQUJbmV3UGllY2VzBQNuaWwFDXByb2xvZ0FjdGlvbnMFCXdsZ1Jlc3VsdAFpARN1bnN0YWtlTGFuZENhbGxiYWNrAgtsYW5kQXNzZXRJZARhZGRyAwkBAiE9AgkApQgBCAUBaQZjYWxsZXIFEGFjcmVzMkFkZHJlc3NTdHIJAAIBAhFQZXJtaXNzaW9uIGRlbmllZAQNdW5zdGFrZVJlc3VsdAkBE3Vuc3Rha2VMYW5kSW50ZXJuYWwCBQRhZGRyBQtsYW5kQXNzZXRJZAQJd2xnUmVzdWx0CQD8BwQFC3dsZ0NvbnRyYWN0AhJvblN0YWtlVW5zdGFrZUxhbmQJAMwIAgUEYWRkcgUDbmlsBQNuaWwJAJQKAgkAzAgCCQEEQnVybgIJANkEAQULbGFuZEFzc2V0SWQAAQkAzAgCCQELRGVsZXRlRW50cnkBCQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkCQDMCAIJAQtEZWxldGVFbnRyeQEJASJrZXlTdGFrZWRUaW1lQnlUeXBlQXNzZXRJZEFuZE93bmVyAwUKTEFORFBSRUZJWAULbGFuZEFzc2V0SWQFBGFkZHIFA25pbAkAlwoFCAUNdW5zdGFrZVJlc3VsdAJfMQgFDXVuc3Rha2VSZXN1bHQCXzIIBQ11bnN0YWtlUmVzdWx0Al8zCAUNdW5zdGFrZVJlc3VsdAJfNAUJd2xnUmVzdWx0AWkBE3Vuc3Rha2VMYW5kUkVBRE9OTFkCC2xhbmRBc3NldElkBGFkZHIEDXVuc3Rha2VSZXN1bHQJARN1bnN0YWtlTGFuZEludGVybmFsAgUEYWRkcgULbGFuZEFzc2V0SWQJAJQKAgUDbmlsBQ11bnN0YWtlUmVzdWx0AWkBHHVuc3Rha2VMYW5kc0ZpbmFsaXplQ2FsbGJhY2sBBGFkZHIDCQECIT0CCQClCAEIBQFpBmNhbGxlcgUQYWNyZXMyQWRkcmVzc1N0cgkAAgECEVBlcm1pc3Npb24gZGVuaWVkCQCUCgIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBFWtleVN0YWtlZExhbmRzQnlPd25lcgEFBGFkZHIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBFmtleVN0YWtlZFBpZWNlc0J5T3duZXIBBQRhZGRyBQNuaWwAAAFpARRjb252ZXJ0VW5zdGFrZWRMYW5kcwADCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhxFeGFjdGx5IG9uZSBwYXltZW50IHJlcXVpcmVkBANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAQHYXNzZXRJZAkBBXZhbHVlAQgFA3BtdAdhc3NldElkBAdhZGRyZXNzCQClCAEIBQFpBmNhbGxlcgMJAQIhPQIIBQNwbXQGYW1vdW50AAEJAAIBCQCsAgIJAKwCAgIETkZUIAUKTEFORFBSRUZJWAIkIHRva2VuIHNob3VsZCBiZSBhdHRhY2hlZCBhcyBwYXltZW50BAVhc3NldAkBBXZhbHVlAQkA7AcBBQdhc3NldElkAwkBAiE9AggFBWFzc2V0Bmlzc3VlcgUEdGhpcwkAAgECF1Vua25vd24gaXNzdWVyIG9mIHRva2VuAwkBASEBCQEIY29udGFpbnMCCAUFYXNzZXQEbmFtZQUKTEFORFBSRUZJWAkAAgEJAKwCAgkArAICAglPbmx5IE5GVCAFCkxBTkRQUkVGSVgCFCB0b2tlbnMgYXJlIGFjY2VwdGVkBAtsYW5kQXNzZXRJZAkA2AQBBQdhc3NldElkBAFkCQC1CQIIBQVhc3NldAtkZXNjcmlwdGlvbgIBXwQGcGllY2VzCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCBQFkBQtyZWNMYW5kU2l6ZQQKaW5mcmFMZXZlbAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEFC2xhbmRBc3NldElkAAAECWFydFBpZWNlcwkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEga2V5TGFuZEFydFN0YXR1c0J5VHlwZUFuZEFzc2V0SWQCBQpBUlRQUkVTQUxFBQtsYW5kQXNzZXRJZAAABAthY3Jlc0Ftb3VudAkAZAIJAGgCBQZwaWVjZXMFBU1VTFQ4CQBpAgkAaAIJAGQCCQBoAgUGcGllY2VzBQppbmZyYUxldmVsBQlhcnRQaWVjZXMFBU1VTFQ4AAUEA3JlcQkA/AcEBQ1hY3Jlc0NvbnRyYWN0AhRyZXF1ZXN0QWNyZXNDYWxsYmFjawkAzAgCBQthY3Jlc0Ftb3VudAUDbmlsBQNuaWwDCQAAAgUDcmVxBQNyZXEEBWNhbGxiCQD8BwQJARFAZXh0ck5hdGl2ZSgxMDYyKQEFEGFjcmVzMkFkZHJlc3NTdHICEnN0YWtlQWNyZXNDYWxsYmFjawkAzAgCBQdhZGRyZXNzBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFDGFjcmVzQXNzZXRJZAULYWNyZXNBbW91bnQFA25pbAMJAAACBQVjYWxsYgUFY2FsbGIJAJQKAgkAzAgCCQEEQnVybgIJANkEAQULbGFuZEFzc2V0SWQAAQUDbmlsAAAJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQETdW5zdGFrZUR1Y2tDYWxsYmFjawILZHVja0Fzc2V0SWQEYWRkcgMJAQIhPQIJAKUIAQgFAWkGY2FsbGVyBRBhY3JlczJBZGRyZXNzU3RyCQACAQIRUGVybWlzc2lvbiBkZW5pZWQEDXVuc3Rha2VSZXN1bHQJARN1bnN0YWtlRHVja0ludGVybmFsAgUEYWRkcgULZHVja0Fzc2V0SWQJAJQKAgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBBQRhZGRyAAEJANkEAQULZHVja0Fzc2V0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtkdWNrQXNzZXRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEQa2V5RHVja0lkVG9Pd25lcgEFC2R1Y2tBc3NldElkCQDMCAIJAQtEZWxldGVFbnRyeQEJASJrZXlTdGFrZWRUaW1lQnlUeXBlQXNzZXRJZEFuZE93bmVyAwUKRFVDS1BSRUZJWAULZHVja0Fzc2V0SWQFBGFkZHIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgUDbmlsBQ11bnN0YWtlUmVzdWx0AWkBE3Vuc3Rha2VEdWNrUkVBRE9OTFkCC2R1Y2tBc3NldElkBGFkZHIEDXVuc3Rha2VSZXN1bHQJARN1bnN0YWtlRHVja0ludGVybmFsAgUEYWRkcgULZHVja0Fzc2V0SWQJAJQKAgUDbmlsBQ11bnN0YWtlUmVzdWx0AWkBCGNsYWltUmVzAgZhbW91bnQObGFuZEFzc2V0SWRTdHIEDXByb2xvZ0FjdGlvbnMJAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBGFkZHIJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyBAZyZXN1bHQJARBjbGFpbVJlc0ludGVybmFsBAUEYWRkcgUGYW1vdW50BQ1jbGFpbU1vZGVEdWNrBQ5sYW5kQXNzZXRJZFN0cgQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkCQCUCgIJAM4IAgkAzQgCCQDNCAIJAM4IAggFBnJlc3VsdAJfMQgJARd1cGRhdGVEdWNrU3RhdHNJbnRlcm5hbAIFC2R1Y2tBc3NldElkCQBrAwUHeHBDbGFpbQUGYW1vdW50BQVNVUxUOAJfMQkBC1N0cmluZ0VudHJ5AggFBnJlc3VsdAJfMgkAuQkCCAUGcmVzdWx0Al8zAgE6CQELU3RyaW5nRW50cnkCCAUGcmVzdWx0Al80CQC5CQIIBQZyZXN1bHQCXzUCAToFDXByb2xvZ0FjdGlvbnMJAJEDAggFBnJlc3VsdAJfMwUIYnBJZHhSZXMBaQEMY2xhaW1SZXNUb1dIAgZhbW91bnQObGFuZEFzc2V0SWRTdHIEDXByb2xvZ0FjdGlvbnMJAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBGFkZHIJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyBAZyZXN1bHQJARBjbGFpbVJlc0ludGVybmFsBAUEYWRkcgUGYW1vdW50BQtjbGFpbU1vZGVXaAUObGFuZEFzc2V0SWRTdHIJAJQKAgkAzggCCQDNCAIJAM0IAgkAzggCCAUGcmVzdWx0Al8xCAkBFnVwZGF0ZUFjY1N0YXRzSW50ZXJuYWwCBQRhZGRyCQBrAwUHeHBDbGFpbQUGYW1vdW50BQVNVUxUOAJfMQkBC1N0cmluZ0VudHJ5AggFBnJlc3VsdAJfMgkAuQkCCAUGcmVzdWx0Al8zAgE6CQELU3RyaW5nRW50cnkCCAUGcmVzdWx0Al80CQC5CQIIBQZyZXN1bHQCXzUCAToFDXByb2xvZ0FjdGlvbnMJAJEDAggFBnJlc3VsdAJfNQUId2hJZHhSZXMBaQEOdXBkYXRlQmFja3BhY2sCC2R1Y2tBc3NldElkB25ld1BhY2sDCQECIT0CCAUBaQZjYWxsZXIFD2Vjb25vbXlDb250cmFjdAkAAgECEXBlcm1pc3Npb24gZGVuaWVkCQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQFB25ld1BhY2sFA25pbAUHbmV3UGFjawFpAQ9jb21taXRGb3JSYW5kb20ABA1wcm9sb2dBY3Rpb25zCQEGcHJvbG9nAQUBaQQLZmluaXNoQmxvY2sJAGQCBQZoZWlnaHQFC3JhbmRvbURlbGF5BARhZGRyCQClCAEIBQFpBmNhbGxlcgkAlAoCCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIJAQlrZXlDb21taXQBBQRhZGRyBQtmaW5pc2hCbG9jawUDbmlsBQ1wcm9sb2dBY3Rpb25zBQtmaW5pc2hCbG9jawFpAQxyZXZlYWxSYW5kb20BCG1heFZhbHVlBA1wcm9sb2dBY3Rpb25zCQEGcHJvbG9nAQUBaQQEYWRkcgkApQgBCAUBaQZjYWxsZXIECWZpbmlzaEtleQkBCWtleUNvbW1pdAEFBGFkZHIEC2ZpbmlzaEJsb2NrCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ8IAQUJZmluaXNoS2V5AiRZb3UgaGF2ZSB0byBjb21taXRGb3JSYW5kb20oKSBmaXJzdCEDCQBmAgULZmluaXNoQmxvY2sFBmhlaWdodAkAAgEJAKwCAgI0UmFuZG9tIG51bWJlciBpcyBub3QgcmVhZHkgeWV0LCB3YWl0IHVudGlsIGhlaWdodCA9IAkApAMBBQtmaW5pc2hCbG9jawQHZW50cm9weQkBBXZhbHVlAQgJAQV2YWx1ZQEJAO0HAQULZmluaXNoQmxvY2sDdnJmBARzYWx0CQCbAwEJAQt2YWx1ZU9yRWxzZQIJAKIIAQkBFWtleUxhc3RXZWVrVHhJZEJ5VXNlcgEFBGFkZHICAAQEcmFuZAkBD2dldFJhbmRvbU51bWJlcgMFCG1heFZhbHVlBQRzYWx0BQdlbnRyb3B5CQCUCgIJAM4IAgkAzAgCCQELRGVsZXRlRW50cnkBBQlmaW5pc2hLZXkFA25pbAUNcHJvbG9nQWN0aW9ucwUEcmFuZAFpARBhY3RpdmF0ZUFydGlmYWN0AgdhcnROYW1lDmxhbmRBc3NldElkT3B0BA1wcm9sb2dBY3Rpb25zCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBARhZGRyCQClCAEIBQFpBmNhbGxlcgQGcmVzdWx0BAckbWF0Y2gwBQdhcnROYW1lAwkAAAICB1BSRVNBTEUFByRtYXRjaDAJARJhY3RpdmF0ZVByZXNhbGVBcnQCBQRhZGRyBQ5sYW5kQXNzZXRJZE9wdAMJAAACAgdPTkJPQVJEBQckbWF0Y2gwCQESYWN0aXZhdGVPbmJvYXJkQXJ0AQUEYWRkcgkAAgECEFVua25vd24gYXJ0aWZhY3QJAM4IAgUGcmVzdWx0BQ1wcm9sb2dBY3Rpb25zAWkBDXNhdmVXYXJlaG91c2UCBXdoU3RyC2xhbmRBc3NldElkAwkBAiE9AggFAWkGY2FsbGVyBQ9lY29ub215Q29udHJhY3QJAAIBAg1BY2Nlc3MgZGVuaWVkBAV3aEtleQkBEmtleVdhcmVob3VzZUJ5TGFuZAEFC2xhbmRBc3NldElkBAJ3aAkAvAkCBQV3aFN0cgIBOgMJAQIhPQIJAJADAQUCd2gABQkAAgECMHdhcmVob3VzZSBzdHJpbmcgc2hvdWxkIGNvbnRhaW4gNCAnOicgc2VwYXJhdG9ycwQFbG9mdEwJAJEDAgkAtQkCCQCRAwIFAndoBQl3aElkeExPRlQCAV8FCXZvbExvY2tlZAQFbG9mdE8JARdnZXRXYXJlaG91c2VPY2N1cGllZFZvbAEFAndoBAVsb2Z0VAkBF2dldFdhcmVob3VzZVRvdGFsVm9sdW1lAQkAkQMCBQJ3aAULd2hJZHhMZXZlbHMEBWxvZnRGCQBlAgkAZQIFBWxvZnRUCQENcGFyc2VJbnRWYWx1ZQEFBWxvZnRMBQVsb2Z0TwMJAGYCAAAFBWxvZnRGCQACAQIwT3BlcmF0aW9uIGxlYWRzIHRvIG5lZ2F0aXZlIGZyZWUgd2FyZWhvdXNlIHNwYWNlBAhuZXdXaFN0cgkAugkCCQDMCAIJAJEDAgUCd2gFC3doSWR4TGV2ZWxzCQDMCAIJAJEDAgUCd2gFCHdoSWR4UmVzCQDMCAIJAJEDAgUCd2gFCHdoSWR4TWF0CQDMCAIJAJEDAgUCd2gFCXdoSWR4UHJvZAkAzAgCCQC5CQIJAMwIAgUFbG9mdEwJAMwIAgkApAMBBQVsb2Z0TwkAzAgCCQCkAwEFBWxvZnRGCQDMCAIJAKQDAQUFbG9mdFQFA25pbAIBXwUDbmlsAgE6CQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgUFd2hLZXkFCG5ld1doU3RyBQNuaWwFCG5ld1doU3RyAWkBDXNldEN1c3RvbU5hbWUDB2Fzc2V0SWQKY3VzdG9tTmFtZQR0eXBlBA1wcm9sb2dBY3Rpb25zCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECHEV4YWN0bHkgb25lIHBheW1lbnQgcmVxdWlyZWQEA3BtdAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAAAwkBAiE9AggFA3BtdAdhc3NldElkBQt1c2R0QXNzZXRJZAkAAgECGkFsbG93ZWQgVVNEVCBwYXltZW50IG9ubHkhAwkBAiE9AggFA3BtdAZhbW91bnQFDFJFTkFNSU5HQ09TVAkAAgEJAKwCAgISUGF5bWVudCBzaG91bGQgYmUgCQCkAwEFDFJFTkFNSU5HQ09TVAMJAQhjb250YWlucwIFCmN1c3RvbU5hbWUCAl9fCQACAQkArAICAh5OYW1lIHNob3VsZCBub3QgY29udGFpbiAnX18nOiAFCmN1c3RvbU5hbWUDCQBmAgkAsQIBBQpjdXN0b21OYW1lBQpNQVhOQU1FTEVOCQACAQkArAICAhlOYW1lIHRvbyBsb25nLCBtYXhMZW5ndGg9CQCkAwEFCk1BWE5BTUVMRU4EBGFkZHIJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyBAdhY3Rpb25zBAckbWF0Y2gwBQR0eXBlAwkAAAICB0FDQ09VTlQFByRtYXRjaDAECnJldmVyc2VLZXkJARZrZXlDdXN0b21OYW1lVG9BZGRyZXNzAQUKY3VzdG9tTmFtZQQJbmFtZU93bmVyCQCiCAEFCnJldmVyc2VLZXkDCQEJaXNEZWZpbmVkAQUJbmFtZU93bmVyCQACAQkArAICAhlOYW1lIGFscmVhZHkgcmVnaXN0ZXJlZDogBQpjdXN0b21OYW1lBA1hZGRyVG9OYW1lS2V5CQEWa2V5QWRkcmVzc1RvQ3VzdG9tTmFtZQEFBGFkZHIEB29sZE5hbWUJAKIIAQUNYWRkclRvTmFtZUtleQQHZnJlZU9sZAMJAQlpc0RlZmluZWQBBQdvbGROYW1lCQDMCAIJAQtEZWxldGVFbnRyeQEJARZrZXlDdXN0b21OYW1lVG9BZGRyZXNzAQkBBXZhbHVlAQUHb2xkTmFtZQUDbmlsBQNuaWwJAM4IAgkAzQgCCQDNCAIFB2ZyZWVPbGQJAQtTdHJpbmdFbnRyeQIFDWFkZHJUb05hbWVLZXkFCmN1c3RvbU5hbWUJAQtTdHJpbmdFbnRyeQIFCnJldmVyc2VLZXkFBGFkZHIICQEWdXBkYXRlQWNjU3RhdHNJbnRlcm5hbAIFBGFkZHIFDHhwQ3VzdG9tTmFtZQJfMQMJAAACAgRMQU5EBQckbWF0Y2gwBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFB2Fzc2V0SWQEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQUHYXNzZXRJZAMJAQEhAQkBCWlzRGVmaW5lZAEJAJ8IAQUHdGltZUtleQkAAgEJAKwCAggFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkBAVvd25lcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQdhc3NldElkCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDCBpcyBvcnBoYW5lZAMJAQIhPQIFBW93bmVyBQRhZGRyCQACAQkArAICBQpMQU5EUFJFRklYAg0gaXMgbm90IHlvdXJzBApyZXZlcnNlS2V5CQEaa2V5TGFuZEN1c3RvbU5hbWVUb0Fzc2V0SWQBBQpjdXN0b21OYW1lBAluYW1lT3duZXIJAKIIAQUKcmV2ZXJzZUtleQMJAQlpc0RlZmluZWQBBQluYW1lT3duZXIJAAIBCQCsAgICGU5hbWUgYWxyZWFkeSByZWdpc3RlcmVkOiAFCmN1c3RvbU5hbWUEDmFzc2V0VG9OYW1lS2V5CQEaa2V5TGFuZEFzc2V0SWRUb0N1c3RvbU5hbWUBBQdhc3NldElkBAdvbGROYW1lCQCiCAEFDmFzc2V0VG9OYW1lS2V5BAdmcmVlT2xkAwkBCWlzRGVmaW5lZAEFB29sZE5hbWUJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBGmtleUxhbmRDdXN0b21OYW1lVG9Bc3NldElkAQkBBXZhbHVlAQUHb2xkTmFtZQUDbmlsBQNuaWwJAM4IAgkAzQgCCQDNCAIFB2ZyZWVPbGQJAQtTdHJpbmdFbnRyeQIFDmFzc2V0VG9OYW1lS2V5BQpjdXN0b21OYW1lCQELU3RyaW5nRW50cnkCBQpyZXZlcnNlS2V5BQdhc3NldElkCAkBFnVwZGF0ZUFjY1N0YXRzSW50ZXJuYWwCBQRhZGRyBQx4cEN1c3RvbU5hbWUCXzEDCQAAAgIERFVDSwUHJG1hdGNoMAQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQdhc3NldElkBAd0aW1lS2V5CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFB2Fzc2V0SWQDAwkBASEBCQEJaXNEZWZpbmVkAQkAnwgBBQd0aW1lS2V5BgkBASEBCQEJaXNEZWZpbmVkAQkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyCQACAQkArAICCAUFYXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQEBW93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBEGtleUR1Y2tJZFRvT3duZXIBBQdhc3NldElkCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDCBpcyBvcnBoYW5lZAMJAQIhPQIFBW93bmVyBQRhZGRyCQACAQkArAICBQpEVUNLUFJFRklYAg0gaXMgbm90IHlvdXJzBApyZXZlcnNlS2V5CQEaa2V5RHVja0N1c3RvbU5hbWVUb0Fzc2V0SWQBBQpjdXN0b21OYW1lBAluYW1lT3duZXIJAKIIAQUKcmV2ZXJzZUtleQMJAQlpc0RlZmluZWQBBQluYW1lT3duZXIJAAIBCQCsAgICGU5hbWUgYWxyZWFkeSByZWdpc3RlcmVkOiAFCmN1c3RvbU5hbWUEDmFzc2V0VG9OYW1lS2V5CQEaa2V5RHVja0Fzc2V0SWRUb0N1c3RvbU5hbWUBBQdhc3NldElkBAdvbGROYW1lCQCiCAEFDmFzc2V0VG9OYW1lS2V5BAdmcmVlT2xkAwkBCWlzRGVmaW5lZAEFB29sZE5hbWUJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBGmtleUR1Y2tDdXN0b21OYW1lVG9Bc3NldElkAQkBBXZhbHVlAQUHb2xkTmFtZQUDbmlsBQNuaWwJAM4IAgkAzQgCCQDNCAIFB2ZyZWVPbGQJAQtTdHJpbmdFbnRyeQIFDmFzc2V0VG9OYW1lS2V5BQpjdXN0b21OYW1lCQELU3RyaW5nRW50cnkCBQpyZXZlcnNlS2V5BQdhc3NldElkCAkBF3VwZGF0ZUR1Y2tTdGF0c0ludGVybmFsAgUHYXNzZXRJZAUMeHBDdXN0b21OYW1lAl8xCQACAQITVW5rbm93biBlbnRpdHkgdHlwZQkAlAoCCQDOCAIJAM0IAgUHYWN0aW9ucwkBDlNjcmlwdFRyYW5zZmVyAwUPZWNvbm9teUNvbnRyYWN0CAUDcG10BmFtb3VudAULdXNkdEFzc2V0SWQFDXByb2xvZ0FjdGlvbnMAAAFpAQxzZXRSZWZlcnJhbHMCCW9sZFBsYXllcgluZXdQbGF5ZXIDCQECIT0CCAUBaQ9jYWxsZXJQdWJsaWNLZXkFA3B1YgkAAgECEVBlcm1pc3Npb24gZGVuaWVkBA1wcm9sb2dBY3Rpb25zCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkAwkBASEBCQEJaXNEZWZpbmVkAQkApggBBQlvbGRQbGF5ZXIJAAIBCQCsAgICEUludmFsaWQgYWRkcmVzczogBQlvbGRQbGF5ZXIECm5ld2JpZUFkZHIJAKYIAQUJbmV3UGxheWVyAwkBASEBCQEJaXNEZWZpbmVkAQUKbmV3YmllQWRkcgkAAgEJAKwCAgIRSW52YWxpZCBhZGRyZXNzOiAFCW5ld1BsYXllcgQJb2xkTGFzdFR4CQCiCAEJARVrZXlMYXN0V2Vla1R4SWRCeVVzZXIBBQlvbGRQbGF5ZXIDCQEBIQEJAQlpc0RlZmluZWQBBQlvbGRMYXN0VHgJAAIBAiJvbGRQbGF5ZXIgZGlkbid0IGRvIGFueSB0eCBpbiBnYW1lAwkAZwIAAAgJAO8HAQkBBXZhbHVlAQUKbmV3YmllQWRkcglhdmFpbGFibGUJAAIBAhZuZXdQbGF5ZXIgaGFzIG5vIFdBVkVTBAdvbGRzS2V5CQEJa2V5T2xkaWVzAAQEb2xkcwkAoggBBQdvbGRzS2V5BAZvbGRpZXMDCQEJaXNEZWZpbmVkAQUEb2xkcwkAvAkCCQEFdmFsdWUBBQRvbGRzAgFfBQNuaWwDCQEPY29udGFpbnNFbGVtZW50AgUGb2xkaWVzBQluZXdQbGF5ZXIJAAIBCQCsAgIFCW5ld1BsYXllcgImIGlzIG5vdCBuZXdiaWUgKGFscmVhZHkgaGFzIHJlZmVycmFscykECHJlZkJ5S2V5CQEPa2V5QWRkcmVzc1JlZkJ5AQUJbmV3UGxheWVyBAVyZWZCeQkAoggBBQhyZWZCeUtleQMDCQEJaXNEZWZpbmVkAQUFcmVmQnkJAQlpc0RlZmluZWQBCQCmCAEJAQV2YWx1ZQEFBXJlZkJ5BwkAAgEJAKwCAgkArAICBQluZXdQbGF5ZXICFCBhbHJlYWR5IGhhcyByZWZCeTogCQEFdmFsdWUBBQVyZWZCeQQHcmVmc0tleQkBE2tleUFkZHJlc3NSZWZlcnJhbHMBBQlvbGRQbGF5ZXIEBHJlZnMJAKIIAQUHcmVmc0tleQQJcmVmc0FycmF5AwkBCWlzRGVmaW5lZAEFBHJlZnMJALwJAgkBBXZhbHVlAQUEcmVmcwIBXwUDbmlsAwkBD2NvbnRhaW5zRWxlbWVudAIFCXJlZnNBcnJheQUJbmV3UGxheWVyCQACAQkArAICCQCsAgIJAKwCAgUJb2xkUGxheWVyAhIgYWxyZWFkeSBjb250YWlucyAFCW5ld1BsYXllcgIRIHdpdGhpbiByZWZlcnJhbHMEB25ld1JlZnMJALoJAgkAzQgCBQlyZWZzQXJyYXkFCW5ld1BsYXllcgIBXwQHbmV3T2xkcwMJAQ9jb250YWluc0VsZW1lbnQCBQZvbGRpZXMFCW9sZFBsYXllcgkBBXZhbHVlAQUEb2xkcwkAugkCCQDNCAIFBm9sZGllcwUJb2xkUGxheWVyAgFfCQCUCgIJAM4IAgkAzAgCCQELU3RyaW5nRW50cnkCBQhyZWZCeUtleQUJb2xkUGxheWVyCQDMCAIJAQtTdHJpbmdFbnRyeQIFB3JlZnNLZXkFB25ld1JlZnMJAMwIAgkBC1N0cmluZ0VudHJ5AgUHb2xkc0tleQUHbmV3T2xkcwUDbmlsBQ1wcm9sb2dBY3Rpb25zAAABaQEQZGlzdHJpYnV0ZVBvaW50cwUIc3RyZW5ndGgIYWNjdXJhY3kJaW50ZWxsZWN0CWVuZHVyYW5jZQlkZXh0ZXJpdHkEDXByb2xvZ0FjdGlvbnMJAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBGFkZHIJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyBAt2aXJ0V2xnRGF0YQkBCWFzQW55TGlzdAEJAPwHBAULd2xnQ29udHJhY3QCEmNoZWNrV2xnWHBSRUFET05MWQkAzAgCBQRhZGRyBQNuaWwFA25pbAQNdmlydFdsZ1BvaW50cwkBBWFzSW50AQkAkQMCBQt2aXJ0V2xnRGF0YQABBA8kdDAxMDAyNDQxMDA2MzQDCQBnAgAABQ12aXJ0V2xnUG9pbnRzCQCUCgIAAAUDbmlsBAdkZWx0YVhQCQEFYXNJbnQBCQD8BwQFC3dsZ0NvbnRyYWN0Agl0YWtlV2xnWHAJAMwIAgUEYWRkcgUDbmlsBQNuaWwDCQAAAgUHZGVsdGFYUAUHZGVsdGFYUAkAlAoCBQ12aXJ0V2xnUG9pbnRzCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEMa2V5VXNlckxldmVsAQUEYWRkcgkBBWFzSW50AQkAkQMCBQt2aXJ0V2xnRGF0YQAACQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEJa2V5VXNlclhQAQUEYWRkcgkBBWFzSW50AQkAkQMCBQt2aXJ0V2xnRGF0YQACBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4ECXdsZ1BvaW50cwgFDyR0MDEwMDI0NDEwMDYzNAJfMQQKd2xnQWN0aW9ucwgFDyR0MDEwMDI0NDEwMDYzNAJfMgQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkBApmcmVlS2V5QWNjCQERa2V5VXNlckZyZWVQb2ludHMBBQRhZGRyBA1mcmVlUG9pbnRzQWNjCQBkAgkBC3ZhbHVlT3JFbHNlAgkAnwgBBQpmcmVlS2V5QWNjAAAFCXdsZ1BvaW50cwQLZnJlZUtleUR1Y2sJARFrZXlEdWNrRnJlZVBvaW50cwEFC2R1Y2tBc3NldElkBA5mcmVlUG9pbnRzRHVjawkBC3ZhbHVlT3JFbHNlAgkAnwgBBQtmcmVlS2V5RHVjawAABAdzdW1GcmVlCQBkAgUNZnJlZVBvaW50c0FjYwUOZnJlZVBvaW50c0R1Y2sED3N1bVRvRGlzdHJpYnV0ZQkAZAIJAGQCCQBkAgkAZAIFCHN0cmVuZ3RoBQhhY2N1cmFjeQUJaW50ZWxsZWN0BQllbmR1cmFuY2UFCWRleHRlcml0eQMJAGYCBQ9zdW1Ub0Rpc3RyaWJ1dGUFB3N1bUZyZWUJAAIBCQCsAgIJAKwCAgIPVGhlcmUgYXJlIG9ubHkgCQCkAwEFB3N1bUZyZWUCGiBmcmVlIHBvaW50cyB0byBkaXN0cmlidXRlBAhjaGFyc0tleQkBDGtleUR1Y2tDaGFycwEFC2R1Y2tBc3NldElkBAVjaGFycwkAtQkCCQELdmFsdWVPckVsc2UCCQCiCAEFCGNoYXJzS2V5AgkwXzBfMF8wXzACAV8EBm5ld0FjYwkAZQIFDWZyZWVQb2ludHNBY2MFD3N1bVRvRGlzdHJpYnV0ZQkAlAoCCQDOCAIJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUKZnJlZUtleUFjYwMJAGYCAAAFBm5ld0FjYwAABQZuZXdBY2MJAMwIAgkBDEludGVnZXJFbnRyeQIFC2ZyZWVLZXlEdWNrAwkAZgIAAAUGbmV3QWNjCQBkAgUOZnJlZVBvaW50c0R1Y2sFBm5ld0FjYwUOZnJlZVBvaW50c0R1Y2sJAMwIAgkBC1N0cmluZ0VudHJ5AgUIY2hhcnNLZXkJALkJAgkAzAgCCQCkAwEJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFY2hhcnMFDGNoYXJTdHJlbmd0aAUIc3RyZW5ndGgJAMwIAgkApAMBCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBWNoYXJzBQxjaGFyQWNjdXJhY3kFCGFjY3VyYWN5CQDMCAIJAKQDAQkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVjaGFycwUNY2hhckludGVsbGVjdAUJaW50ZWxsZWN0CQDMCAIJAKQDAQkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVjaGFycwUNY2hhckVuZHVyYW5jZQUJZW5kdXJhbmNlCQDMCAIJAKQDAQkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVjaGFycwUNY2hhckRleHRlcml0eQUJZGV4dGVyaXR5BQNuaWwCAV8FA25pbAUNcHJvbG9nQWN0aW9ucwUKd2xnQWN0aW9ucwAAAWkBHHNwbGl0QnlHbG9iYWxXZWlnaHRzUkVBRE9OTFkBBmFtb3VudAkAlAoCBQNuaWwJARJnZXROZWVkZWRNYXRlcmlhbHMBBQZhbW91bnQBaQEkc3BsaXRCeUdsb2JhbEFuZExvY2FsV2VpZ2h0c1JFQURPTkxZAwltYXRBbW91bnQJcmVzQW1vdW50CHRlcnJhaW5zBA10ZXJyYWluQ291bnRzCQENY291bnRUZXJyYWlucwEFCHRlcnJhaW5zCQCUCgIFA25pbAkAlAoCCQESZ2V0TmVlZGVkTWF0ZXJpYWxzAQUJbWF0QW1vdW50CQETZGlzdHJpYnV0ZUJ5V2VpZ2h0cwIFCXJlc0Ftb3VudAUNdGVycmFpbkNvdW50cwFpARNnZXRCYWNrcGFja1JFQURPTkxZAQtkdWNrQXNzZXRJZAkAlAoCBQNuaWwJALkJAgkBC2dldEJhY2twYWNrAQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQCAToBaQEUZ2V0V2FyZWhvdXNlUkVBRE9OTFkBC2xhbmRBc3NldElkBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFC2xhbmRBc3NldElkBAlsYW5kSW5kZXgJAGkCCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCCQC1CQIIBQVhc3NldAtkZXNjcmlwdGlvbgIBXwULcmVjTGFuZFNpemUFBVNTSVpFBAppbmZyYUxldmVsCQELdmFsdWVPckVsc2UCCQCfCAEJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQULbGFuZEFzc2V0SWQAAAkAlAoCBQNuaWwJALoJAgkBDGdldFdhcmVob3VzZQMJARJrZXlXYXJlaG91c2VCeUxhbmQBBQtsYW5kQXNzZXRJZAUJbGFuZEluZGV4BQppbmZyYUxldmVsAgE6AWkBCnNhdmVMYXN0VHgAAwkBASEBCQEPY29udGFpbnNFbGVtZW50AgkAzAgCBQt3bGdDb250cmFjdAkAzAgCBQ9lY29ub215Q29udHJhY3QJAMwIAgUSdG91cm5hbWVudENvbnRyYWN0CQDMCAIFDWFjcmVzQ29udHJhY3QFA25pbAgFAWkGY2FsbGVyCQACAQINQWNjZXNzIGRlbmllZAkAlAoCCQEGcHJvbG9nAQUBaQAqAWkBD3VwZGF0ZUR1Y2tTdGF0cwILZHVja0Fzc2V0SWQHZGVsdGFYUAMJAQIhPQIIBQFpBmNhbGxlcgUPZWNvbm9teUNvbnRyYWN0CQACAQINQWNjZXNzIGRlbmllZAkBF3VwZGF0ZUR1Y2tTdGF0c0ludGVybmFsAgULZHVja0Fzc2V0SWQFB2RlbHRhWFABaQEOdXBkYXRlQWNjU3RhdHMCBGFkZHIHZGVsdGFYUAMJAQEhAQkBD2NvbnRhaW5zRWxlbWVudAIJAMwIAgULd2xnQ29udHJhY3QJAMwIAgUPZWNvbm9teUNvbnRyYWN0CQDMCAIFDWFjcmVzQ29udHJhY3QFA25pbAgFAWkGY2FsbGVyCQACAQINQWNjZXNzIGRlbmllZAkBFnVwZGF0ZUFjY1N0YXRzSW50ZXJuYWwCBQRhZGRyBQdkZWx0YVhQAWkBE2luaXREdWNrVG91ckF0dGVtcHQBC2R1Y2tBc3NldElkAwkBAiE9AggFAWkGY2FsbGVyBRJ0b3VybmFtZW50Q29udHJhY3QJAAIBAg1BY2Nlc3MgZGVuaWVkBAlrZXlIZWFsdGgJAQ1rZXlEdWNrSGVhbHRoAQULZHVja0Fzc2V0SWQEBW1heEhQCQEJbWF4SGVhbHRoAQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEMa2V5RHVja0xldmVsAQULZHVja0Fzc2V0SWQAAAQJY3VySGVhbHRoCQELdmFsdWVPckVsc2UCCQCfCAEFCWtleUhlYWx0aAUFbWF4SFAECWN1ckxvY0tleQkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkBAtjdXJMb2NhdGlvbgkBC3ZhbHVlT3JFbHNlAgkAoggBBQljdXJMb2NLZXkFD0RFRkFVTFRMT0NBVElPTgQGbGFzdElkCQELdmFsdWVPckVsc2UCCQCaCAIFEnRvdXJuYW1lbnRDb250cmFjdAUNbGFzdFRvdXJJZEtleQAABAx0b3VyTG9jYXRpb24JAKwCAgkApAMBBQZsYXN0SWQCBF9UXzAJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDmtleVNhdmVkSGVhbHRoAQULZHVja0Fzc2V0SWQFCWN1ckhlYWx0aAkAzAgCCQEMSW50ZWdlckVudHJ5AgUJa2V5SGVhbHRoBQVtYXhIUAkAzAgCCQELU3RyaW5nRW50cnkCCQEQa2V5U2F2ZWRMb2NhdGlvbgEFC2R1Y2tBc3NldElkBQtjdXJMb2NhdGlvbgkAzAgCCQELU3RyaW5nRW50cnkCBQljdXJMb2NLZXkFDHRvdXJMb2NhdGlvbgUDbmlsBQx0b3VyTG9jYXRpb24BaQEMYnJlYWtBdHRlbXB0AAQNcHJvbG9nQWN0aW9ucwkBBnByb2xvZwEFAWkEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQkApQgBCAUBaQZjYWxsZXICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQECWN1ckxvY0tleQkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkBAtjdXJMb2NhdGlvbgkBC3ZhbHVlT3JFbHNlAgkAoggBBQljdXJMb2NLZXkFD0RFRkFVTFRMT0NBVElPTgMJAQIhPQIJAJEDAgkAtQkCBQtjdXJMb2NhdGlvbgIBXwUKbG9jSWR4VHlwZQIBVAkAAgECIllvdXIgZHVjayBpcyBub3QgaW4gdGhlIHRvdXJuYW1lbnQEC3NhdmVkSGVhbHRoCQERQGV4dHJOYXRpdmUoMTA1NSkBCQEOa2V5U2F2ZWRIZWFsdGgBBQtkdWNrQXNzZXRJZAQNc2F2ZWRMb2NhdGlvbgkBEUBleHRyTmF0aXZlKDEwNTgpAQkBEGtleVNhdmVkTG9jYXRpb24BBQtkdWNrQXNzZXRJZAkAlAoCCQDNCAIJAM0IAgUNcHJvbG9nQWN0aW9ucwkBDEludGVnZXJFbnRyeQIJAQ1rZXlEdWNrSGVhbHRoAQULZHVja0Fzc2V0SWQFC3NhdmVkSGVhbHRoCQELU3RyaW5nRW50cnkCBQljdXJMb2NLZXkFDXNhdmVkTG9jYXRpb24FC2N1ckxvY2F0aW9uAWkBFGJyZWFrQXR0ZW1wdENhbGxiYWNrAAMJAQIhPQIIBQFpBmNhbGxlcgUSdG91cm5hbWVudENvbnRyYWN0CQACAQINQWNjZXNzIGRlbmllZAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBCQClCAEIBQFpDG9yaWdpbkNhbGxlcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkCQERQGV4dHJOYXRpdmUoMTA1NSkBCQEOa2V5U2F2ZWRIZWFsdGgBBQtkdWNrQXNzZXRJZAkAzAgCCQELU3RyaW5nRW50cnkCCQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQJARFAZXh0ck5hdGl2ZSgxMDU4KQEJARBrZXlTYXZlZExvY2F0aW9uAQULZHVja0Fzc2V0SWQFA25pbAIUYnJlYWtBdHRlbXB0Q2FsbGJhY2sBaQEWZXhpdFRvdXJuYW1lbnRJbnRlcm5hbAELZHVja0Fzc2V0SWQDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAg1BY2Nlc3MgZGVuaWVkBAtzYXZlZEhlYWx0aAkBEUBleHRyTmF0aXZlKDEwNTUpAQkBDmtleVNhdmVkSGVhbHRoAQULZHVja0Fzc2V0SWQEDXNhdmVkTG9jYXRpb24JARFAZXh0ck5hdGl2ZSgxMDU4KQEJARBrZXlTYXZlZExvY2F0aW9uAQULZHVja0Fzc2V0SWQJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDWtleUR1Y2tIZWFsdGgBBQtkdWNrQXNzZXRJZAULc2F2ZWRIZWFsdGgJAMwIAgkBC1N0cmluZ0VudHJ5AgkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkBQ1zYXZlZExvY2F0aW9uBQNuaWwHAWkBD3Byb2Nlc3NEZWxpdmVyeQELZHVja0Fzc2V0SWQDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAg1BY2Nlc3MgZGVuaWVkBARhZGRyCQClCAEIBQFpDG9yaWdpbkNhbGxlcgQJZnVuZFRvdGFsCQELdmFsdWVPckVsc2UCCQCaCAIFD2Vjb25vbXlDb250cmFjdAUPZGVsaXZlcnlGdW5kS2V5AAADCQBmAgUVTUlOX1VTRFRfRkVFX0RFTElWRVJZBQlmdW5kVG90YWwJAAIBCQCsAgICIERlbGl2ZXJ5IGlzIG5vdCBhdmFpbGFibGUsIGZ1bmQ9CQEKZml4ZWRQb2ludAIFCWZ1bmRUb3RhbAAGBANub3cIBQlsYXN0QmxvY2sJdGltZXN0YW1wBAhjb3VudEtleQkBFGtleVVzZXJEZWxpdmVyeUNvdW50AQUEYWRkcgQHbGFzdERheQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEWa2V5VXNlckxhc3REZWxpdmVyeURheQEFBGFkZHIAAAQFdG9kYXkJAGkCBQNub3cFCURBWU1JTExJUwQFY291bnQDCQAAAgUHbGFzdERheQUFdG9kYXkJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUIY291bnRLZXkAAAAABAVhY3JlcwkBC3ZhbHVlT3JFbHNlAgkAmggCBQ1hY3Jlc0NvbnRyYWN0CQEaa2V5QWNyZXNTdGFrZWRBbW91bnRCeVVzZXIBBQRhZGRyAAAEEWFsbG93ZWREZWxpdmVyaWVzCQBkAgUXQUxMT1dFRF9GUkVFX0RFTElWRVJJRVMJAGkCBQVhY3JlcwUaQUNSRVNfRk9SX0RFTElWRVJZX0FUVEVNUFQDCQBnAgUFY291bnQFEWFsbG93ZWREZWxpdmVyaWVzCQACAQkArAICCQCsAgICEVlvdSBhbHJlYWR5IHVzZWQgCQCkAwEFEWFsbG93ZWREZWxpdmVyaWVzAhwgZGVsaXZlcnkgYXR0ZW1wdHMgZm9yIHRvZGF5BA5nbG9iYWxDb3VudEtleQkBFGtleUR1Y2tEZWxpdmVyeUNvdW50AQULZHVja0Fzc2V0SWQEBnJld2FyZAkA/AcEBQ9lY29ub215Q29udHJhY3QCEnNlbmREZWxpdmVyeVJld2FyZAkAzAgCBQRhZGRyBQNuaWwFA25pbAkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQhjb3VudEtleQkAZAIFBWNvdW50AAEJAMwIAgkBDEludGVnZXJFbnRyeQIJARZrZXlVc2VyTGFzdERlbGl2ZXJ5RGF5AQUEYWRkcgUFdG9kYXkJAMwIAgkBDEludGVnZXJFbnRyeQIFDmdsb2JhbENvdW50S2V5CQBkAgkBC3ZhbHVlT3JFbHNlAgkAnwgBBQ5nbG9iYWxDb3VudEtleQAAAAEFA25pbAUGcmV3YXJkAGOvk0s=", "height": 3382767, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: ExNkxWVaSZSQ2JM1yerLrYL2yBkzLXpmVbwtjpf2Cj36 Next: 45MEatBMriNwvV7iNPWMo7VUycqPKfiHjaKbtTSUcxg6 Diff:
OldNewDifferences
185185 func ak () = "contractsBlocked"
186186
187187
188-func al (am) = ("lastTxIdByUser_" + am)
188+func al (am) = ("lastWeekTxIdByUser_" + am)
189189
190190
191-func an (ao,ap) = {
192- let aq = pow(10, 0, ap, 0, 0, DOWN)
193- let ar = toString((ao % aq))
194- let as = drop(toString(aq), (1 + size(ar)))
195- (((toString((ao / aq)) + ".") + as) + ar)
191+func an (am) = ("curWeekTxIdByUser_" + am)
192+
193+
194+func ao (ap,aq) = {
195+ let ar = pow(10, 0, aq, 0, 0, DOWN)
196+ let as = toString((ap % ar))
197+ let at = drop(toString(ar), (1 + size(as)))
198+ (((toString((ap / ar)) + ".") + at) + as)
196199 }
197200
198201
199-func at (au,av,aw) = if ((0 >= au))
202+func au (av,aw,ax) = if ((0 >= av))
200203 then throw("maxValue should be > 0")
201204 else {
202- let ax = sha256_16Kb((av + aw))
203- (toInt(ax) % au)
205+ let ay = sha256_16Kb((aw + ax))
206+ (toInt(ay) % av)
204207 }
205208
206209
207-func ay () = min([lastBlock.timestamp, d])
210+func az () = min([lastBlock.timestamp, d])
208211
209212
210-let az = "LAND"
213+let aA = "LAND"
211214
212-let aA = "DUCK"
215+let aB = "DUCK"
213216
214-let aB = "ROBO"
217+let aC = "ROBO"
215218
216-let aC = "PRESALE"
219+let aD = "PRESALE"
217220
218-let aD = 6
221+let aE = 6
219222
220-let aE = 25
223+let aF = 25
221224
222-let aF = 3456000
225+let aG = 3456000
223226
224-let aG = 10000000000
227+let aH = 10000000000
225228
226-let aH = "Africa_F_Africa"
229+let aI = "Africa_F_Africa"
227230
228-let aI = 39637
231+let aJ = 39637
229232
230-let aJ = 50000
233+let aK = 50000
231234
232-let aK = 10
235+let aL = 10
233236
234-let aL = 0
237+let aM = 0
235238
236-let aM = 200000000
239+let aN = 200000000
237240
238-let aN = ["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"]
241+let aO = ["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"]
239242
240-let aO = ["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_"]
243+let aP = ["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_"]
241244
242-let aP = 6
245+let aQ = 6
243246
244-let aQ = 9
245-
246-let aR = 10
247+let aR = 9
247248
248249 let aS = 10
249250
250-let aT = 0
251+let aT = 10
251252
252-let aU = 1
253+let aU = 0
253254
254-let aV = 2
255+let aV = 1
255256
256-let aW = 3
257+let aW = 2
257258
258-let aX = 4
259+let aX = 3
259260
260-let aY = 0
261+let aY = 4
261262
262-let aZ = 1
263+let aZ = 0
263264
264-let ba = 2
265+let ba = 1
265266
266-let bb = 3
267+let bb = 2
267268
268-let bc = 0
269+let bc = 3
269270
270-let bd = 1
271+let bd = 0
271272
272-let be = 2
273+let be = 1
273274
274-let bf = 3
275+let bf = 2
275276
276-let bg = 1
277+let bg = 3
277278
278-let bh = 2
279+let bh = 1
279280
280-func bi (bj) = ("no_" + bj)
281+let bi = 2
282+
283+func bj (bk) = ("no_" + bk)
281284
282285
283-func bk (bj) = ("lcna_" + bj)
286+func bl (bk) = ("lcna_" + bk)
284287
285288
286-func bl (bj) = ("st_" + bj)
289+func bm (bk) = ("st_" + bk)
287290
288291
289-func bm (bn,bj) = makeString(["las", bn, bj], "_")
292+func bn (bo,bk) = makeString(["las", bo, bk], "_")
290293
291294
292-func bo (bp,bj,ab) = ((((("sttao_" + bp) + "_") + bj) + "_") + ab)
295+func bp (bq,bk,ab) = ((((("sttao_" + bq) + "_") + bk) + "_") + ab)
293296
294297
295-func bq (br) = ("wh_" + br)
298+func br (bs) = ("wh_" + bs)
296299
297300
298-func bs (bj) = ("infraLevel_" + bj)
301+func bt (bk) = ("infraLevel_" + bk)
299302
300303
301-func bt (bj) = ("duckCustomNameByAssetId_" + bj)
304+func bu (bk) = ("duckCustomNameByAssetId_" + bk)
302305
303306
304-func bu (am) = ("accountCustomNameByAddr_" + am)
307+func bv (am) = ("accountCustomNameByAddr_" + am)
305308
306309
307-func bv (am) = ("accRefBy_" + am)
310+func bw (am) = ("accRefBy_" + am)
308311
309312
310-func bw (bx) = ("onboardArtActivatedOnDuck_" + bx)
313+func bx (by) = ("onboardArtActivatedOnDuck_" + by)
311314
312315
313-func by (am) = ("onboardArtActivatedDuckBy_" + am)
316+func bz (am) = ("onboardArtActivatedDuckBy_" + am)
314317
315318
316-func bz (am) = ("accReferrals_" + am)
319+func bA (am) = ("accReferrals_" + am)
317320
318321
319-func bA (bj) = ("duckOwner_" + bj)
322+func bB (bk) = ("duckOwner_" + bk)
320323
321324
322-func bB (ab) = ("stakedDuckByOwner_" + ab)
325+func bC (ab) = ("stakedDuckByOwner_" + ab)
323326
324327
325-func bC (bx) = ("backPack_" + bx)
328+func bD (by) = ("backPack_" + by)
326329
327330
328-func bD (bx) = ("duckLocation_" + bx)
331+func bE (by) = ("duckLocation_" + by)
329332
330333
331-func bE (bF) = ("%s%s__userGwlReleaseTime__" + bF)
334+func bF (bG) = ("%s%s__userGwlReleaseTime__" + bG)
332335
333336
334-let bG = "deliveryFund"
337+let bH = "deliveryFund"
335338
336-let bH = "%s__lastTourId"
339+let bI = "%s__lastTourId"
337340
338-let bI = 100000000
341+let bJ = 100000000
339342
340-let bJ = 3200
343+let bK = 3200
341344
342-let bK = 4000
345+let bL = 4000
343346
344-let bL = 3
347+let bM = 3
345348
346-let bM = ["Strength", "Accuracy", "Intellect", "Endurance", "Dexterity", "Level", "Health"]
349+let bN = ["Strength", "Accuracy", "Intellect", "Endurance", "Dexterity", "Level", "Health"]
347350
348-let bN = 0
351+let bO = 0
349352
350-let bO = 1
353+let bP = 1
351354
352-let bP = 2
355+let bQ = 2
353356
354-let bQ = 3
357+let bR = 3
355358
356-let bR = 4
357-
358-let bS = 2
359+let bS = 4
359360
360361 let bT = 2
361362
362-let bU = 30
363+let bU = 2
363364
364-func bV (bx) = ("duckHealth_" + bx)
365+let bV = 30
366+
367+func bW (by) = ("duckHealth_" + by)
365368
366369
367-func bW (bx) = ("duckChars_" + bx)
370+func bX (by) = ("duckChars_" + by)
368371
369372
370-func bX (bx) = ("duckXP_" + bx)
373+func bY (by) = ("duckXP_" + by)
371374
372375
373-func bY (bx) = ("duckLevel_" + bx)
376+func bZ (by) = ("duckLevel_" + by)
374377
375378
376-func bZ (bx) = ("duckFreePoints_" + bx)
379+func ca (by) = ("duckFreePoints_" + by)
377380
378381
379-func ca (bx) = ("duckEquipment_" + bx)
382+func cb (by) = ("duckEquipment_" + by)
380383
381384
382-func cb (am) = ("userXP_" + am)
385+func cc (am) = ("userXP_" + am)
383386
384387
385-func cc (am) = ("userLevel_" + am)
388+func cd (am) = ("userLevel_" + am)
386389
387390
388-func cd (am) = ("userFreePoints_" + am)
391+func ce (am) = ("userFreePoints_" + am)
389392
390393
391-func ce (bx) = ("savedHealth_" + bx)
394+func cf (by) = ("savedHealth_" + by)
392395
393396
394-func cf (bx) = ("savedLocation_" + bx)
397+func cg (by) = ("savedLocation_" + by)
395398
396399
397-func cg (bx) = ("totalDeliveryCountByDuck_" + bx)
400+func ch (by) = ("totalDeliveryCountByDuck_" + by)
398401
399402
400-func ch (am) = ("userDeliveryCount_" + am)
403+func ci (am) = ("userDeliveryCount_" + am)
401404
402405
403-func ci (am) = ("userLastDeliveryDay_" + am)
406+func cj (am) = ("userLastDeliveryDay_" + am)
404407
405408
406-let cj = 10000
407-
408-let ck = 1000000
409+let ck = 10000
409410
410411 let cl = 1000000
411412
412-func cm (cn) = fraction(bJ, pow(cn, 4, bK, 4, 4, DOWN), bI)
413+let cm = 1000000
414+
415+func cn (co) = fraction(bK, pow(co, 4, bL, 4, 4, DOWN), bJ)
413416
414417
415-func co (cp) = (100 + cp)
418+func cp (cq) = (100 + cq)
416419
417420
418-func cq (cr,cs) = {
419- let ct = cm(cs)
420-[ct, (bL * (ct - cr))]
421+func cr (cs,ct) = {
422+ let cu = cn(ct)
423+[cu, (bM * (cu - cs))]
421424 }
422425
423426
424-let cu = 86400000
427+let cv = 86400000
425428
426-func cv (am) = ("lastArbTimeUser_" + am)
429+func cw (am) = ("lastArbTimeUser_" + am)
427430
428431
429-func cw (am) = ("acresStakedAmountByUser_" + am)
432+func cx (am) = ("acresStakedAmountByUser_" + am)
430433
431434
432-let cx = 5000000
435+let cy = 5000000
433436
434-let cy = 50
437+let cz = 50
435438
436-let cz = 500
439+let cA = 500
437440
438-func cA (cB) = ("lcn_" + cB)
441+func cB (cC) = ("lcn_" + cC)
439442
440443
441-func cC (bj,ab) = ((("ilao_" + bj) + "_") + ab)
444+func cD (bk,ab) = ((("ilao_" + bk) + "_") + ab)
442445
443446
444-func cD (cE) = ("lo_" + cE)
447+func cE (cF) = ("lo_" + cF)
445448
446449
447-func cF (cB) = ("duckByCustomName_" + cB)
450+func cG (cC) = ("duckByCustomName_" + cC)
448451
449452
450-func cG (cB) = ("accountByCustomName_" + cB)
453+func cH (cC) = ("accountByCustomName_" + cC)
451454
452455
453-func cH () = "oldiesList"
456+func cI () = "oldiesList"
454457
455458
456-let cI = 0
459+let cJ = 0
457460
458-let cJ = 1
461+let cK = 1
459462
460-let cK = 2
463+let cL = 2
461464
462-func cL (cM,cN) = {
463- let cO = (((((cN[0] + cN[1]) + cN[2]) + cN[3]) + cN[4]) + cN[5])
464- if ((0 >= cO))
465+func cM (cN,cO) = {
466+ let cP = (((((cO[0] + cO[1]) + cO[2]) + cO[3]) + cO[4]) + cO[5])
467+ if ((0 >= cP))
465468 then throw("Zero weights sum")
466469 else {
467- let cP = fraction(cM, m, cO)
468- func cQ (cR,cS) = (cR :+ fraction(cS, cP, m))
470+ let cQ = fraction(cN, m, cP)
471+ func cR (cS,cT) = (cS :+ fraction(cT, cQ, m))
469472
470- let cT = cN
471- let cU = size(cT)
472- let cV = nil
473- func cW (cX,cY) = if ((cY >= cU))
474- then cX
475- else cQ(cX, cT[cY])
473+ let cU = cO
474+ let cV = size(cU)
475+ let cW = nil
476+ func cX (cY,cZ) = if ((cZ >= cV))
477+ then cY
478+ else cR(cY, cU[cZ])
476479
477- func cZ (cX,cY) = if ((cY >= cU))
478- then cX
480+ func da (cY,cZ) = if ((cZ >= cV))
481+ then cY
479482 else throw("List size exceeds 6")
480483
481- cZ(cW(cW(cW(cW(cW(cW(cV, 0), 1), 2), 3), 4), 5), 6)
484+ da(cX(cX(cX(cX(cX(cX(cW, 0), 1), 2), 3), 4), 5), 6)
482485 }
483486 }
484487
485488
486-func da (cM) = {
487- let db = split(value(getString(X())), "_")
488- if ((size(db) != aD))
489+func db (cN) = {
490+ let dc = split(value(getString(X())), "_")
491+ if ((size(dc) != aE))
489492 then throw("Wrong proportions data")
490493 else {
491- let dc = [parseIntValue(db[0]), parseIntValue(db[1]), parseIntValue(db[2]), parseIntValue(db[3]), parseIntValue(db[4]), parseIntValue(db[5])]
492- cL(cM, dc)
494+ let dd = [parseIntValue(dc[0]), parseIntValue(dc[1]), parseIntValue(dc[2]), parseIntValue(dc[3]), parseIntValue(dc[4]), parseIntValue(dc[5])]
495+ cM(cN, dd)
493496 }
494497 }
495498
496499
497-func dd (de) = {
498- let df = if ((de == ""))
500+func de (df) = {
501+ let dg = if ((df == ""))
499502 then nil
500- else split_4C(de, "_")
501- func dg (cR,dh) = {
502- let di = (size(cR) / 8)
503- let dj = if ((size(df) > di))
504- then parseIntValue(df[di])
503+ else split_4C(df, "_")
504+ func dh (cS,di) = {
505+ let dj = (size(cS) / 8)
506+ let dk = if ((size(dg) > dj))
507+ then parseIntValue(dg[dj])
505508 else 0
506- (cR + toBytes(dj))
509+ (cS + toBytes(dk))
507510 }
508511
509- let cT = aO
510- let cU = size(cT)
511- let cV = base58''
512- func cW (cX,cY) = if ((cY >= cU))
513- then cX
514- else dg(cX, cT[cY])
512+ let cU = aP
513+ let cV = size(cU)
514+ let cW = base58''
515+ func cX (cY,cZ) = if ((cZ >= cV))
516+ then cY
517+ else dh(cY, cU[cZ])
515518
516- func cZ (cX,cY) = if ((cY >= cU))
517- then cX
519+ func da (cY,cZ) = if ((cZ >= cV))
520+ then cY
518521 else throw("List size exceeds 50")
519522
520- cZ(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50)
523+ da(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cW, 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)
521524 }
522525
523526
524-func dk (dl) = {
525- func dm (cR,dh) = {
526- let di = size(cR)
527- let dn = take(drop(dl, (8 * di)), 8)
528- (cR :+ toString(toInt(dn)))
527+func dl (dm) = {
528+ func dn (cS,di) = {
529+ let dj = size(cS)
530+ let do = take(drop(dm, (8 * dj)), 8)
531+ (cS :+ toString(toInt(do)))
529532 }
530533
531534 makeString_2C({
532- let cT = aO
533- let cU = size(cT)
534- let cV = nil
535- func cW (cX,cY) = if ((cY >= cU))
536- then cX
537- else dm(cX, cT[cY])
535+ let cU = aP
536+ let cV = size(cU)
537+ let cW = nil
538+ func cX (cY,cZ) = if ((cZ >= cV))
539+ then cY
540+ else dn(cY, cU[cZ])
538541
539- func cZ (cX,cY) = if ((cY >= cU))
540- then cX
542+ func da (cY,cZ) = if ((cZ >= cV))
543+ then cY
541544 else throw("List size exceeds 50")
542545
543- cZ(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50)
546+ da(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cW, 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)
544547 }, "_")
545548 }
546549
547550
548-func do (dp,dq) = {
549- func dr (cR,di) = {
550- let ds = if ((size(dp) > (7 + di)))
551- then dp[(7 + di)]
551+func dp (dq,dr) = {
552+ func ds (cS,dj) = {
553+ let dt = if ((size(dq) > (7 + dj)))
554+ then dq[(7 + dj)]
552555 else 0
553- if ((parseIntValue(dq[di]) > (dp[di] + ds)))
554- then throw(("Requirement not satisfied: " + bM[di]))
556+ if ((parseIntValue(dr[dj]) > (dq[dj] + dt)))
557+ then throw(("Requirement not satisfied: " + bN[dj]))
555558 else true
556559 }
557560
558- let cT = [0, 1, 2, 3, 4, 5, 6]
559- let cU = size(cT)
560- let cV = false
561- func cW (cX,cY) = if ((cY >= cU))
562- then cX
563- else dr(cX, cT[cY])
561+ let cU = [0, 1, 2, 3, 4, 5, 6]
562+ let cV = size(cU)
563+ let cW = false
564+ func cX (cY,cZ) = if ((cZ >= cV))
565+ then cY
566+ else ds(cY, cU[cZ])
564567
565- func cZ (cX,cY) = if ((cY >= cU))
566- then cX
568+ func da (cY,cZ) = if ((cZ >= cV))
569+ then cY
567570 else throw("List size exceeds 7")
568571
569- cZ(cW(cW(cW(cW(cW(cW(cW(cV, 0), 1), 2), 3), 4), 5), 6), 7)
572+ da(cX(cX(cX(cX(cX(cX(cX(cW, 0), 1), 2), 3), 4), 5), 6), 7)
570573 }
571574
572575
573-func dt (du,df,dv,dw,dx,dy,dp) = {
574- let dz = split(du, ":")
575- if ((size(dz) != 2))
576+func du (dv,dg,dw,dx,dy,dz,dq) = {
577+ let dA = split(dv, ":")
578+ if ((size(dA) != 2))
576579 then throw("Incorrect format, should be index:amount")
577- else if (if (!(dv))
578- then (size(dz[0]) != 2)
580+ else if (if (!(dw))
581+ then (size(dA[0]) != 2)
579582 else false)
580583 then throw("Product idx should be 2 digits, zero padded")
581584 else {
582- let dA = parseIntValue(dz[0])
583- let dB = parseIntValue(dz[1])
584- if (if ((0 > dA))
585+ let dB = parseIntValue(dA[0])
586+ let dC = parseIntValue(dA[1])
587+ if (if ((0 > dB))
585588 then true
586- else (dA >= size(aO)))
589+ else (dB >= size(aP)))
587590 then throw("Unknown product idx")
588- else if ((0 > dB))
591+ else if ((0 > dC))
589592 then throw("Count can't be negative")
590- else if ((dB > bU))
591- then throw(((("Can't put more than " + toString(bU)) + " of ") + aN[dA]))
592- else if ((dB == 0))
593- then $Tuple2(df, false)
593+ else if ((dC > bV))
594+ then throw(((("Can't put more than " + toString(bV)) + " of ") + aO[dB]))
595+ else if ((dC == 0))
596+ then $Tuple2(dg, false)
594597 else {
595- let dC = take(df, (8 * dA))
596- let dj = toInt(take(drop(df, (8 * dA)), 8))
597- let dD = drop(df, (8 * (dA + 1)))
598- let dh = split(aO[dA], "_")
599- if (if (!(dv))
600- then (dB > dj)
598+ let dD = take(dg, (8 * dB))
599+ let dk = toInt(take(drop(dg, (8 * dB)), 8))
600+ let dE = drop(dg, (8 * (dB + 1)))
601+ let di = split(aP[dB], "_")
602+ if (if (!(dw))
603+ then (dC > dk)
601604 else false)
602- then throw(((((("You have " + toString(dj)) + " of ") + aN[dA]) + ", but tried to use ") + toString(dB)))
605+ then throw(((((("You have " + toString(dk)) + " of ") + aO[dB]) + ", but tried to use ") + toString(dC)))
603606 else {
604- let dE = if (if (!(dv))
605- then do(dp, split(dh[aQ], ","))
607+ let dF = if (if (!(dw))
608+ then dp(dq, split(di[aR], ","))
606609 else false)
607610 then {
608- let dF = dh[aR]
609- if ((dF == ""))
611+ let dG = di[aS]
612+ if ((dG == ""))
610613 then throw("Item cannot be equipped")
611614 else {
612- let dG = parseIntValue(dF)
613- let dH = (dG / 100)
614- if ((dw != dH))
615+ let dH = parseIntValue(dG)
616+ let dI = (dH / 100)
617+ if ((dx != dI))
615618 then throw("Segment incompatible")
616619 else {
617- let dI = ((dG % 100) / 10)
618- if ((dx != dI))
620+ let dJ = ((dH % 100) / 10)
621+ if ((dy != dJ))
619622 then throw("Slot incompatible")
620623 else {
621- let dJ = (dG % 10)
622- if (if ((dy != 0))
623- then (dJ > 1)
624+ let dK = (dH % 10)
625+ if (if ((dz != 0))
626+ then (dK > 1)
624627 else false)
625628 then throw("Big items should occupy slot 0")
626- else (dJ > 1)
629+ else (dK > 1)
627630 }
628631 }
629632 }
630633 }
631634 else false
632- $Tuple2(((dC + toBytes((dj + (if (dv)
633- then dB
634- else -(dB))))) + dD), dE)
635+ $Tuple2(((dD + toBytes((dk + (if (dw)
636+ then dC
637+ else -(dC))))) + dE), dF)
635638 }
636639 }
637640 }
638641 }
639642
640643
641-func dK (dL,dM,dv,dw,dx,dN) = if ((dL != ""))
644+func dL (dM,dN,dw,dx,dy,dO) = if ((dM != ""))
642645 then {
643- let dO = split(dL, ",")
644- if ((size(dO) > bT))
646+ let dP = split(dM, ",")
647+ if ((size(dP) > bU))
645648 then throw("Wrong slots format")
646649 else {
647- let dP = dO[0]
648- let dQ = if ((size(dO) > 1))
649- then dO[1]
650+ let dQ = dP[0]
651+ let dR = if ((size(dP) > 1))
652+ then dP[1]
650653 else ""
651- if (if ((dP == ""))
652- then (dQ == "")
654+ if (if ((dQ == ""))
655+ then (dR == "")
653656 else false)
654- then dM
657+ then dN
655658 else {
656- let dR = if ((dP != ""))
657- then dt(dP, dM, dv, dw, dx, 0, dN)
658- else $Tuple2(dM, false)
659- if ((dQ != ""))
660- then if (dR._2)
659+ let dS = if ((dQ != ""))
660+ then du(dQ, dN, dw, dx, dy, 0, dO)
661+ else $Tuple2(dN, false)
662+ if ((dR != ""))
663+ then if (dS._2)
661664 then throw("Big item already occupies slot")
662- else dt(dQ, dR._1, dv, dw, dx, 1, dN)._1
663- else dR._1
665+ else du(dR, dS._1, dw, dx, dy, 1, dO)._1
666+ else dS._1
664667 }
665668 }
666669 }
667- else dM
670+ else dN
668671
669672
670-func dS (dT,dU,dv,dN) = {
671- func dw (cR,dV) = {
672- let di = cR._1
673- let dx = split(dV, ";")
674- if ((size(dx) != bS))
673+func dT (dU,dV,dw,dO) = {
674+ func dx (cS,dW) = {
675+ let dj = cS._1
676+ let dy = split(dW, ";")
677+ if ((size(dy) != bT))
675678 then throw("Wrong segment format")
676679 else {
677- let dW = dx[0]
678- let dX = dx[1]
679- if (if ((dW == ""))
680- then (dX == "")
680+ let dX = dy[0]
681+ let dY = dy[1]
682+ if (if ((dX == ""))
683+ then (dY == "")
681684 else false)
682- then $Tuple2((di + 1), cR._2)
685+ then $Tuple2((dj + 1), cS._2)
683686 else {
684- let dY = dK(dW, cR._2, dv, di, 0, dN)
685- $Tuple2((di + 1), dK(dX, dY, dv, di, 1, dN))
687+ let dZ = dL(dX, cS._2, dw, dj, 0, dO)
688+ $Tuple2((dj + 1), dL(dY, dZ, dw, dj, 1, dO))
686689 }
687690 }
688691 }
689692
690-( let cT = dT
691- let cU = size(cT)
692- let cV = $Tuple2(0, dU)
693- func cW (cX,cY) = if ((cY >= cU))
694- then cX
695- else dw(cX, cT[cY])
693+( let cU = dU
694+ let cV = size(cU)
695+ let cW = $Tuple2(0, dV)
696+ func cX (cY,cZ) = if ((cZ >= cV))
697+ then cY
698+ else dx(cY, cU[cZ])
696699
697- func cZ (cX,cY) = if ((cY >= cU))
698- then cX
700+ func da (cY,cZ) = if ((cZ >= cV))
701+ then cY
699702 else throw("List size exceeds 6")
700703
701- cZ(cW(cW(cW(cW(cW(cW(cV, 0), 1), 2), 3), 4), 5), 6))._2
704+ da(cX(cX(cX(cX(cX(cX(cW, 0), 1), 2), 3), 4), 5), 6))._2
702705 }
703706
704707
705-func dZ (ea,eb,ec,ed) = if ((size(ea) != aD))
708+func ea (eb,ec,ed,ee) = if ((size(eb) != aE))
706709 then throw("Wrong proportions data")
707710 else {
708- func ee (cR,ef) = {
709- let eg = (parseIntValue(ea[ef]) + ((ed * eb[ef]) * ec))
710- if ((0 > eg))
711- then throw(((((((("Panic! Pieces of type=" + toString(ef)) + ", sign=") + toString(ed)) + ", terrainCounts[i]=") + toString(eb[ef])) + ", landSizeIndex=") + toString(ec)))
712- else (cR :+ toString(eg))
711+ func ef (cS,eg) = {
712+ let eh = (parseIntValue(eb[eg]) + ((ee * ec[eg]) * ed))
713+ if ((0 > eh))
714+ then throw(((((((("Panic! Pieces of type=" + toString(eg)) + ", sign=") + toString(ee)) + ", terrainCounts[i]=") + toString(ec[eg])) + ", landSizeIndex=") + toString(ed)))
715+ else (cS :+ toString(eh))
713716 }
714717
715- let cT = t
716- let cU = size(cT)
717- let cV = nil
718- func cW (cX,cY) = if ((cY >= cU))
719- then cX
720- else ee(cX, cT[cY])
718+ let cU = t
719+ let cV = size(cU)
720+ let cW = nil
721+ func cX (cY,cZ) = if ((cZ >= cV))
722+ then cY
723+ else ef(cY, cU[cZ])
721724
722- func cZ (cX,cY) = if ((cY >= cU))
723- then cX
725+ func da (cY,cZ) = if ((cZ >= cV))
726+ then cY
724727 else throw("List size exceeds 6")
725728
726- cZ(cW(cW(cW(cW(cW(cW(cV, 0), 1), 2), 3), 4), 5), 6)
729+ da(cX(cX(cX(cX(cX(cX(cW, 0), 1), 2), 3), 4), 5), 6)
727730 }
728731
729732
730-func eh (eb,ec,ed) = {
731- let ea = split(valueOrElse(getString(X()), "0_0_0_0_0_0"), "_")
732- makeString(dZ(ea, eb, ec, ed), "_")
733+func ei (ec,ed,ee) = {
734+ let eb = split(valueOrElse(getString(X()), "0_0_0_0_0_0"), "_")
735+ makeString(ea(eb, ec, ed, ee), "_")
733736 }
734737
735738
736-func ei (ej) = [(size(split(ej, "A")) - 1), (size(split(ej, "B")) - 1), (size(split(ej, "C")) - 1), (size(split(ej, "D")) - 1), (size(split(ej, "E")) - 1), (size(split(ej, "F")) - 1)]
739+func ej (ek) = [(size(split(ek, "A")) - 1), (size(split(ek, "B")) - 1), (size(split(ek, "C")) - 1), (size(split(ek, "D")) - 1), (size(split(ek, "E")) - 1), (size(split(ek, "F")) - 1)]
737740
738741
739-func ek (el,eb,em,ec,en) = {
740- func eo (cR,ef) = {
741- let ep = ((fraction(em, en, cu) * eb[ef]) * ec)
742- (cR :+ toString((parseIntValue(el[ef]) + ep)))
742+func el (em,ec,en,ed,eo) = {
743+ func ep (cS,eg) = {
744+ let eq = ((fraction(en, eo, cv) * ec[eg]) * ed)
745+ (cS :+ toString((parseIntValue(em[eg]) + eq)))
743746 }
744747
745- let dc = {
746- let cT = t
747- let cU = size(cT)
748- let cV = nil
749- func cW (cX,cY) = if ((cY >= cU))
750- then cX
751- else eo(cX, cT[cY])
748+ let dd = {
749+ let cU = t
750+ let cV = size(cU)
751+ let cW = nil
752+ func cX (cY,cZ) = if ((cZ >= cV))
753+ then cY
754+ else ep(cY, cU[cZ])
752755
753- func cZ (cX,cY) = if ((cY >= cU))
754- then cX
756+ func da (cY,cZ) = if ((cZ >= cV))
757+ then cY
755758 else throw("List size exceeds 6")
756759
757- cZ(cW(cW(cW(cW(cW(cW(cV, 0), 1), 2), 3), 4), 5), 6)
760+ da(cX(cX(cX(cX(cX(cX(cW, 0), 1), 2), 3), 4), 5), 6)
758761 }
759- makeString(dc, "_")
762+ makeString(dd, "_")
760763 }
761764
762765
763-func eq (el,eb,em,ec,en) = {
764- func eo (cR,ef) = {
765- let ep = ((fraction(em, en, cu) * eb[ef]) * ec)
766- let er = (parseIntValue(el[ef]) + ep)
767- $Tuple2((cR._1 :+ er), (cR._2 + er))
766+func er (em,ec,en,ed,eo) = {
767+ func ep (cS,eg) = {
768+ let eq = ((fraction(en, eo, cv) * ec[eg]) * ed)
769+ let es = (parseIntValue(em[eg]) + eq)
770+ $Tuple2((cS._1 :+ es), (cS._2 + es))
768771 }
769772
770- let cT = t
771- let cU = size(cT)
772- let cV = $Tuple2(nil, 0)
773- func cW (cX,cY) = if ((cY >= cU))
774- then cX
775- else eo(cX, cT[cY])
773+ let cU = t
774+ let cV = size(cU)
775+ let cW = $Tuple2(nil, 0)
776+ func cX (cY,cZ) = if ((cZ >= cV))
777+ then cY
778+ else ep(cY, cU[cZ])
776779
777- func cZ (cX,cY) = if ((cY >= cU))
778- then cX
780+ func da (cY,cZ) = if ((cZ >= cV))
781+ then cY
779782 else throw("List size exceeds 6")
780783
781- cZ(cW(cW(cW(cW(cW(cW(cV, 0), 1), 2), 3), 4), 5), 6)
784+ da(cX(cX(cX(cX(cX(cX(cW, 0), 1), 2), 3), 4), 5), 6)
782785 }
783786
784787
785-func es (eb,em,ec,en) = {
786- func eo (cR,et) = {
787- let ep = ((fraction(em, en, cu) * et) * ec)
788- $Tuple2((cR._1 :+ ep), (cR._2 + ep))
788+func et (ec,en,ed,eo) = {
789+ func ep (cS,eu) = {
790+ let eq = ((fraction(en, eo, cv) * eu) * ed)
791+ $Tuple2((cS._1 :+ eq), (cS._2 + eq))
789792 }
790793
791- let cT = eb
792- let cU = size(cT)
793- let cV = $Tuple2(nil, 0)
794- func cW (cX,cY) = if ((cY >= cU))
795- then cX
796- else eo(cX, cT[cY])
794+ let cU = ec
795+ let cV = size(cU)
796+ let cW = $Tuple2(nil, 0)
797+ func cX (cY,cZ) = if ((cZ >= cV))
798+ then cY
799+ else ep(cY, cU[cZ])
797800
798- func cZ (cX,cY) = if ((cY >= cU))
799- then cX
801+ func da (cY,cZ) = if ((cZ >= cV))
802+ then cY
800803 else throw("List size exceeds 6")
801804
802- cZ(cW(cW(cW(cW(cW(cW(cV, 0), 1), 2), 3), 4), 5), 6)
805+ da(cX(cX(cX(cX(cX(cX(cW, 0), 1), 2), 3), 4), 5), 6)
803806 }
804807
805808
806-func eu (ev,ew,ex,ey) = {
807- let ez = ex._1
808- let eA = ex._2
809- if ((eA == 0))
810- then $Tuple2(makeString(ev, "_"), makeString(ew, "_"))
811- else if ((ey >= eA))
809+func ev (ew,ex,ey,ez) = {
810+ let eA = ey._1
811+ let eB = ey._2
812+ if ((eB == 0))
813+ then $Tuple2(makeString(ew, "_"), makeString(ex, "_"))
814+ else if ((ez >= eB))
812815 then {
813- func eB (cR,ef) = (cR :+ toString((parseIntValue(ev[ef]) + ez[ef])))
816+ func eC (cS,eg) = (cS :+ toString((parseIntValue(ew[eg]) + eA[eg])))
814817
815- let dc = {
816- let cT = t
817- let cU = size(cT)
818- let cV = nil
819- func cW (cX,cY) = if ((cY >= cU))
820- then cX
821- else eB(cX, cT[cY])
818+ let dd = {
819+ let cU = t
820+ let cV = size(cU)
821+ let cW = nil
822+ func cX (cY,cZ) = if ((cZ >= cV))
823+ then cY
824+ else eC(cY, cU[cZ])
822825
823- func cZ (cX,cY) = if ((cY >= cU))
824- then cX
826+ func da (cY,cZ) = if ((cZ >= cV))
827+ then cY
825828 else throw("List size exceeds 6")
826829
827- cZ(cW(cW(cW(cW(cW(cW(cV, 0), 1), 2), 3), 4), 5), 6)
830+ da(cX(cX(cX(cX(cX(cX(cW, 0), 1), 2), 3), 4), 5), 6)
828831 }
829- $Tuple2(makeString(dc, "_"), makeString(ew, "_"))
832+ $Tuple2(makeString(dd, "_"), makeString(ex, "_"))
830833 }
831834 else {
832- func eC (cR,ef) = {
833- let eD = fraction(ez[ef], ey, eA)
834- $Tuple2((cR._1 :+ toString((parseIntValue(ev[ef]) + eD))), (cR._2 :+ toString(((parseIntValue(ew[ef]) + ez[ef]) - eD))))
835+ func eD (cS,eg) = {
836+ let eE = fraction(eA[eg], ez, eB)
837+ $Tuple2((cS._1 :+ toString((parseIntValue(ew[eg]) + eE))), (cS._2 :+ toString(((parseIntValue(ex[eg]) + eA[eg]) - eE))))
835838 }
836839
837- let dc = {
838- let cT = t
839- let cU = size(cT)
840- let cV = $Tuple2(nil, nil)
841- func cW (cX,cY) = if ((cY >= cU))
842- then cX
843- else eC(cX, cT[cY])
840+ let dd = {
841+ let cU = t
842+ let cV = size(cU)
843+ let cW = $Tuple2(nil, nil)
844+ func cX (cY,cZ) = if ((cZ >= cV))
845+ then cY
846+ else eD(cY, cU[cZ])
844847
845- func cZ (cX,cY) = if ((cY >= cU))
846- then cX
848+ func da (cY,cZ) = if ((cZ >= cV))
849+ then cY
847850 else throw("List size exceeds 6")
848851
849- cZ(cW(cW(cW(cW(cW(cW(cV, 0), 1), 2), 3), 4), 5), 6)
852+ da(cX(cX(cX(cX(cX(cX(cW, 0), 1), 2), 3), 4), 5), 6)
850853 }
851- $Tuple2(makeString(dc._1, "_"), makeString(dc._2, "_"))
854+ $Tuple2(makeString(dd._1, "_"), makeString(dd._2, "_"))
852855 }
853856 }
854857
855858
856-func eE (eF) = {
857- let eG = split(valueOrElse(getString(eF), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
858-[toString(valueOrElse(parseInt(eG[bc]), 0)), if ((size(split(eG[bd], "_")) == aD))
859- then eG[bd]
860- else "0_0_0_0_0_0", if ((size(split(eG[be], "_")) == aD))
861- then eG[be]
862- else "0_0_0_0_0_0", eG[bf]]
859+func eF (eG) = {
860+ let eH = split(valueOrElse(getString(eG), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
861+[toString(valueOrElse(parseInt(eH[bd]), 0)), if ((size(split(eH[be], "_")) == aE))
862+ then eH[be]
863+ else "0_0_0_0_0_0", if ((size(split(eH[bf], "_")) == aE))
864+ then eH[bf]
865+ else "0_0_0_0_0_0", eH[bg]]
863866 }
864867
865868
866-func eH (eI) = {
867- let dz = split(eI, "_")
868- ((aG * (parseIntValue(dz[1]) + 1)) * parseIntValue(dz[0]))
869+func eI (eJ) = {
870+ let dA = split(eJ, "_")
871+ ((aH * (parseIntValue(dA[1]) + 1)) * parseIntValue(dA[0]))
869872 }
870873
871874
872-func eJ (eK) = {
873- let eL = eK[aW]
874- func eM (cR,eN) = (cR + parseIntValue(eN))
875+func eK (eL) = {
876+ let eM = eL[aX]
877+ func eN (cS,eO) = (cS + parseIntValue(eO))
875878
876- func eO (cR,eN) = {
877- let I = cR._1
878- let eP = (((parseIntValue(eN) + aS) - 1) / aS)
879- $Tuple2((I + 1), (cR._2 + (eP * n)))
879+ func eP (cS,eO) = {
880+ let I = cS._1
881+ let eQ = (((parseIntValue(eO) + aT) - 1) / aT)
882+ $Tuple2((I + 1), (cS._2 + (eQ * n)))
880883 }
881884
882- let eQ = {
883- let cT = split(eK[aU], "_")
884- let cU = size(cT)
885- let cV = 0
886- func cW (cX,cY) = if ((cY >= cU))
887- then cX
888- else eM(cX, cT[cY])
885+ let eR = {
886+ let cU = split(eL[aV], "_")
887+ let cV = size(cU)
888+ let cW = 0
889+ func cX (cY,cZ) = if ((cZ >= cV))
890+ then cY
891+ else eN(cY, cU[cZ])
889892
890- func cZ (cX,cY) = if ((cY >= cU))
891- then cX
893+ func da (cY,cZ) = if ((cZ >= cV))
894+ then cY
892895 else throw("List size exceeds 6")
893896
894- cZ(cW(cW(cW(cW(cW(cW(cV, 0), 1), 2), 3), 4), 5), 6)
897+ da(cX(cX(cX(cX(cX(cX(cW, 0), 1), 2), 3), 4), 5), 6)
895898 }
896- let eR = {
897- let cT = split(eK[aV], "_")
898- let cU = size(cT)
899- let cV = 0
900- func eS (cX,cY) = if ((cY >= cU))
901- then cX
902- else eM(cX, cT[cY])
899+ let eS = {
900+ let cU = split(eL[aW], "_")
901+ let cV = size(cU)
902+ let cW = 0
903+ func eT (cY,cZ) = if ((cZ >= cV))
904+ then cY
905+ else eN(cY, cU[cZ])
903906
904- func eT (cX,cY) = if ((cY >= cU))
905- then cX
907+ func eU (cY,cZ) = if ((cZ >= cV))
908+ then cY
906909 else throw("List size exceeds 6")
907910
908- eT(eS(eS(eS(eS(eS(eS(cV, 0), 1), 2), 3), 4), 5), 6)
911+ eU(eT(eT(eT(eT(eT(eT(cW, 0), 1), 2), 3), 4), 5), 6)
909912 }
910- let eU = if ((eL == ""))
913+ let eV = if ((eM == ""))
911914 then 0
912- else ( let cT = split_4C(eL, "_")
913- let cU = size(cT)
914- let cV = $Tuple2(0, 0)
915- func eV (cX,cY) = if ((cY >= cU))
916- then cX
917- else eO(cX, cT[cY])
915+ else ( let cU = split_4C(eM, "_")
916+ let cV = size(cU)
917+ let cW = $Tuple2(0, 0)
918+ func eW (cY,cZ) = if ((cZ >= cV))
919+ then cY
920+ else eP(cY, cU[cZ])
918921
919- func eW (cX,cY) = if ((cY >= cU))
920- then cX
922+ func eX (cY,cZ) = if ((cZ >= cV))
923+ then cY
921924 else throw("List size exceeds 50")
922925
923- eW(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(cV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50))._2
924- ((eQ + eR) + eU)
926+ eX(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(cW, 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
927+ ((eR + eS) + eV)
925928 }
926929
927930
928-func eX (eY,eZ,fa) = {
929- let eI = ((toString(eZ) + "_") + toString(fa))
930- let fb = eH(eI)
931- let fc = valueOrElse(getString(eY), (eI + ":0_0_0_0_0_0:0_0_0_0_0_0::0"))
932- let fd = split_4C(fc, ":")
933- let fe = eJ(fd)
934- let ff = if ((5 > size(fd)))
935- then makeString(["0", toString(fe), toString((fb - fe)), toString(fb)], "_")
931+func eY (eZ,fa,fb) = {
932+ let eJ = ((toString(fa) + "_") + toString(fb))
933+ let fc = eI(eJ)
934+ let fd = valueOrElse(getString(eZ), (eJ + ":0_0_0_0_0_0:0_0_0_0_0_0::0"))
935+ let fe = split_4C(fd, ":")
936+ let ff = eK(fe)
937+ let fg = if ((5 > size(fe)))
938+ then makeString(["0", toString(ff), toString((fc - ff)), toString(fc)], "_")
936939 else {
937- let fg = split(fd[aX], "_")
938- let fh = parseIntValue(fg[aY])
939- let fi = if ((size(fg) > 1))
940- then parseIntValue(fg[aZ])
941- else fe
942- makeString([toString(fh), toString(fi), toString(((fb - fh) - fi)), toString(fb)], "_")
940+ let fh = split(fe[aY], "_")
941+ let fi = parseIntValue(fh[aZ])
942+ let fj = if ((size(fh) > 1))
943+ then parseIntValue(fh[ba])
944+ else ff
945+ makeString([toString(fi), toString(fj), toString(((fc - fi) - fj)), toString(fc)], "_")
943946 }
944-[fd[aT], if ((size(split(fd[aU], "_")) == aD))
945- then fd[aU]
946- else "0_0_0_0_0_0", if ((size(split(fd[aV], "_")) == aD))
947- then fd[aV]
948- else "0_0_0_0_0_0", fd[aW], ff]
947+[fe[aU], if ((size(split(fe[aV], "_")) == aE))
948+ then fe[aV]
949+ else "0_0_0_0_0_0", if ((size(split(fe[aW], "_")) == aE))
950+ then fe[aW]
951+ else "0_0_0_0_0_0", fe[aX], fg]
949952 }
950953
951954
952-func fj (br,fk) = {
953- let fa = valueOrElse(getInteger(bs(br)), 0)
954- let fl = valueOrElse(getInteger(bm(aC, br)), 0)
955- let fm = (fa / 6)
956- let fn = (fa / 7)
957- ((aF + fraction(aF, ((fa + fm) + (2 * fn)), 5)) + fraction(aF, fl, (fk * 5)))
955+func fk (bs,fl) = {
956+ let fb = valueOrElse(getInteger(bt(bs)), 0)
957+ let fm = valueOrElse(getInteger(bn(aD, bs)), 0)
958+ let fn = (fb / 6)
959+ let fo = (fb / 7)
960+ ((aG + fraction(aG, ((fb + fn) + (2 * fo)), 5)) + fraction(aG, fm, (fl * 5)))
958961 }
959962
960963
961-func fo (am,fp,fq) = {
962- let fr = if ((fp == cI))
963- then $Tuple2(fq, valueOrElse(getString(bB(am)), ""))
964+func fp (am,fq,fr) = {
965+ let fs = if ((fq == cJ))
966+ then $Tuple2(fr, valueOrElse(getString(bC(am)), ""))
964967 else {
965- let bx = valueOrErrorMessage(getString(bB(am)), "You don't have a duck staked")
966- let fs = valueOrElse(getString(bD(bx)), aH)
967- let ft = split(value(fs), "_")
968- if ((ft[bg] != "L"))
969- then throw((("Duck location type is " + ft[bg]) + ", but should be L"))
970- else $Tuple2(ft[bh], bx)
968+ let by = valueOrErrorMessage(getString(bC(am)), "You don't have a duck staked")
969+ let ft = valueOrElse(getString(bE(by)), aI)
970+ let fu = split(value(ft), "_")
971+ if ((fu[bh] != "L"))
972+ then throw((("Duck location type is " + fu[bh]) + ", but should be L"))
973+ else $Tuple2(fu[bi], by)
971974 }
972- let br = fr._1
973- let fu = fr._2
974- let fv = value(assetInfo(fromBase58String(br)))
975- let fw = bl(br)
976- let fx = valueOrErrorMessage(getInteger(fw), (("Land " + fv.name) + " is not staked"))
977- let fy = valueOrErrorMessage(getString(bi(br)), (("NFT " + fv.name) + " is orphaned"))
978- if ((fy != am))
979- then throw((az + " is not yours"))
975+ let bs = fs._1
976+ let fv = fs._2
977+ let fw = value(assetInfo(fromBase58String(bs)))
978+ let fx = bm(bs)
979+ let fy = valueOrErrorMessage(getInteger(fx), (("Land " + fw.name) + " is not staked"))
980+ let fz = valueOrErrorMessage(getString(bj(bs)), (("NFT " + fw.name) + " is orphaned"))
981+ if ((fz != am))
982+ then throw((aA + " is not yours"))
980983 else {
981- let fz = split(fv.description, "_")
982- $Tuple4(fu, br, fz, fx)
984+ let fA = split(fw.description, "_")
985+ $Tuple4(fv, bs, fA, fy)
983986 }
984987 }
985988
986989
987-func fA (am,fB,fp,fq) = if ((0 > fB))
990+func fB (am,fC,fq,fr) = if ((0 > fC))
988991 then throw("Negative amount")
989992 else {
990- let dG = fo(am, fp, fq)
991- let aj = dG._3[Q]
992- let eb = ei(dG._3[R])
993- let em = (ay() - dG._4)
994- if ((0 > em))
995- then throw(((("Saved timestamp is in future, saved = " + toString(dG._4)) + ", final = ") + toString(ay())))
993+ let dH = fp(am, fq, fr)
994+ let aj = dH._3[Q]
995+ let ec = ej(dH._3[R])
996+ let en = (az() - dH._4)
997+ if ((0 > en))
998+ then throw(((("Saved timestamp is in future, saved = " + toString(dH._4)) + ", final = ") + toString(az())))
996999 else {
997- let fk = ai(aj)
998- let fC = fj(dG._2, fk)
999- let fD = fraction(em, (fC * fk), cu)
1000- if ((fB > fD))
1001- then throw(((("Not enough resources, available = " + toString(fD)) + ", requested = ") + toString(fB)))
1000+ let fl = ai(aj)
1001+ let fD = fk(dH._2, fl)
1002+ let fE = fraction(en, (fD * fl), cv)
1003+ if ((fC > fE))
1004+ then throw(((("Not enough resources, available = " + toString(fE)) + ", requested = ") + toString(fC)))
10021005 else {
1003- let fE = fraction((fD - fB), cu, (fC * fk))
1004- let fF = (ay() - fE)
1005- let eZ = (fk / o)
1006- let ex = es(eb, (em - fE), eZ, fC)
1007- let eY = bq(dG._2)
1008- let fa = valueOrElse(getInteger(bs(dG._2)), 0)
1009- let eK = eX(eY, eZ, fa)
1010- let fg = split(eK[aX], "_")
1011- let ey = parseIntValue(fg[ba])
1012- if (if ((fp == cI))
1013- then (fB > ey)
1006+ let fF = fraction((fE - fC), cv, (fD * fl))
1007+ let fG = (az() - fF)
1008+ let fa = (fl / o)
1009+ let ey = et(ec, (en - fF), fa, fD)
1010+ let eZ = br(dH._2)
1011+ let fb = valueOrElse(getInteger(bt(dH._2)), 0)
1012+ let eL = eY(eZ, fa, fb)
1013+ let fh = split(eL[aY], "_")
1014+ let ez = parseIntValue(fh[bb])
1015+ if (if ((fq == cJ))
1016+ then (fC > ez)
10141017 else false)
1015- then throw((("Only " + toString(ey)) + " space left in warehouse"))
1018+ then throw((("Only " + toString(ez)) + " space left in warehouse"))
10161019 else {
1017- let eF = bC(dG._1)
1018- let fG = eE(eF)
1019- let ew = split(fG[bd], "_")
1020- let ev = split(eK[aU], "_")
1021- let fH = if ((fp == cI))
1022- then $Tuple4(ek(ev, eb, (em - fE), eZ, fC), fG[bd], (parseIntValue(fg[aZ]) + ex._2), (parseIntValue(fg[ba]) - ex._2))
1023- else if ((fp == cJ))
1024- then $Tuple4(eK[aU], ek(ew, eb, (em - fE), eZ, fC), parseIntValue(fg[aZ]), parseIntValue(fg[ba]))
1020+ let eG = bD(dH._1)
1021+ let fH = eF(eG)
1022+ let ex = split(fH[be], "_")
1023+ let ew = split(eL[aV], "_")
1024+ let fI = if ((fq == cJ))
1025+ then $Tuple4(el(ew, ec, (en - fF), fa, fD), fH[be], (parseIntValue(fh[ba]) + ey._2), (parseIntValue(fh[bb]) - ey._2))
1026+ else if ((fq == cK))
1027+ then $Tuple4(eL[aV], el(ex, ec, (en - fF), fa, fD), parseIntValue(fh[ba]), parseIntValue(fh[bb]))
10251028 else {
1026- let fI = eu(ev, ew, ex, ey)
1027- let fJ = min([parseIntValue(fg[ba]), ex._2])
1028- $Tuple4(fI._1, fI._2, (parseIntValue(fg[aZ]) + fJ), (parseIntValue(fg[ba]) - fJ))
1029+ let fJ = ev(ew, ex, ey, ez)
1030+ let fK = min([parseIntValue(fh[bb]), ey._2])
1031+ $Tuple4(fJ._1, fJ._2, (parseIntValue(fh[ba]) + fK), (parseIntValue(fh[bb]) - fK))
10291032 }
1030- let fK = fH._1
1031- let fL = fH._2
1032- let fM = fH._3
1033- let fN = fH._4
1034- $Tuple5([IntegerEntry(bl(dG._2), fF), IntegerEntry(bo(az, dG._2, am), fF)], eF, [fG[bc], fL, fG[be], fG[bf]], eY, [eK[aT], fK, eK[aV], eK[aW], makeString([fg[aY], toString(fM), toString(fN), fg[bb]], "_")])
1033+ let fL = fI._1
1034+ let fM = fI._2
1035+ let fN = fI._3
1036+ let fO = fI._4
1037+ $Tuple5([IntegerEntry(bm(dH._2), fG), IntegerEntry(bp(aA, dH._2, am), fG)], eG, [fH[bd], fM, fH[bf], fH[bg]], eZ, [eL[aU], fL, eL[aW], eL[aX], makeString([fh[aZ], toString(fN), toString(fO), fh[bc]], "_")])
10351038 }
10361039 }
10371040 }
10381041 }
10391042
10401043
1041-func fO (am,br,fk,fp) = {
1042- let fw = bl(br)
1043- let fx = value(getInteger(fw))
1044- let fD = (fraction((ay() - fx), fj(br, fk), cu) * fk)
1045- fA(am, fD, fp, br)
1044+func fP (am,bs,fl,fq) = {
1045+ let fx = bm(bs)
1046+ let fy = value(getInteger(fx))
1047+ let fE = (fraction((az() - fy), fk(bs, fl), cv) * fl)
1048+ fB(am, fE, fq, bs)
10461049 }
10471050
10481051
1049-func fP (fQ,fR,fS,fT) = {
1050- let cn = valueOrElse(getInteger(fR), 0)
1051- let cs = (cn + fT)
1052- let fU = cq(valueOrElse(getInteger(fQ), 0), cs)
1053- $Tuple2([IntegerEntry(fQ, fU[0]), IntegerEntry(fR, cs), IntegerEntry(fS, (valueOrElse(getInteger(fS), 0) + fU[1]))], cs)
1052+func fQ (fR,fS,fT,fU) = {
1053+ let co = valueOrElse(getInteger(fS), 0)
1054+ let ct = (co + fU)
1055+ let fV = cr(valueOrElse(getInteger(fR), 0), ct)
1056+ $Tuple2([IntegerEntry(fR, fV[0]), IntegerEntry(fS, ct), IntegerEntry(fT, (valueOrElse(getInteger(fT), 0) + fV[1]))], ct)
10541057 }
10551058
10561059
1057-func fV (bx,fT) = {
1058- let fv = value(assetInfo(fromBase58String(bx)))
1059- let am = valueOrErrorMessage(getString(bA(bx)), (("NFT " + fv.name) + " is orphaned"))
1060+func fW (by,fU) = {
1061+ let fw = value(assetInfo(fromBase58String(by)))
1062+ let am = valueOrErrorMessage(getString(bB(by)), (("NFT " + fw.name) + " is orphaned"))
10601063 if (if (if (b)
1061- then (fv.issuer == this)
1064+ then (fw.issuer == this)
10621065 else false)
1063- then contains(fv.name, aB)
1066+ then contains(fw.name, aC)
10641067 else false)
1065- then fP(cc(am), cb(am), cd(am), fT)
1066- else fP(bY(bx), bX(bx), bZ(bx), fT)
1068+ then fQ(cd(am), cc(am), ce(am), fU)
1069+ else fQ(bZ(by), bY(by), ca(by), fU)
10671070 }
10681071
10691072
1070-func fW (am,fT) = fP(cc(am), cb(am), cd(am), fT)
1073+func fX (am,fU) = fQ(cd(am), cc(am), ce(am), fU)
10711074
10721075
1073-func fX (am) = {
1074- let bx = valueOrErrorMessage(getString(bB(am)), "You don't have a duck staked")
1075- let fY = bv(am)
1076- let fZ = getString(fY)
1077- if (!(isDefined(fZ)))
1076+func fY (am) = {
1077+ let by = valueOrErrorMessage(getString(bC(am)), "You don't have a duck staked")
1078+ let fZ = bw(am)
1079+ let ga = getString(fZ)
1080+ if (!(isDefined(ga)))
10781081 then throw("You are not eligible for ONBOARD artifact")
10791082 else {
1080- let ga = by(am)
1081- let gb = getString(ga)
1082- if (isDefined(gb))
1083- then throw(("You already used your ONBOARD artifact on duck " + value(gb)))
1083+ let gb = bz(am)
1084+ let gc = getString(gb)
1085+ if (isDefined(gc))
1086+ then throw(("You already used your ONBOARD artifact on duck " + value(gc)))
10841087 else {
1085- let gc = bw(bx)
1086- let gd = getString(gc)
1087- if (isDefined(gd))
1088- then throw(((("The duck " + bx) + " already got points from ONBOARD artifact from user ") + value(gd)))
1089- else ([StringEntry(ga, bx), StringEntry(gc, am)] ++ fV(bx, cl)._1)
1088+ let gd = bx(by)
1089+ let ge = getString(gd)
1090+ if (isDefined(ge))
1091+ then throw(((("The duck " + by) + " already got points from ONBOARD artifact from user ") + value(ge)))
1092+ else ([StringEntry(gb, by), StringEntry(gd, am)] ++ fW(by, cm)._1)
10901093 }
10911094 }
10921095 }
10931096
10941097
1095-func ge (am,fq) = {
1096- let dG = fo(am, cK, fq)
1097- let br = dG._2
1098- let fk = ai(dG._3[Q])
1099- let gf = bm(aC, br)
1100- if ((valueOrElse(getInteger(gf), 0) > 0))
1098+func gf (am,fr) = {
1099+ let dH = fp(am, cL, fr)
1100+ let bs = dH._2
1101+ let fl = ai(dH._3[Q])
1102+ let gg = bn(aD, bs)
1103+ if ((valueOrElse(getInteger(gg), 0) > 0))
11011104 then throw("Presale artifact is already activated")
1102- else if ((parseIntValue(dG._3[P]) > cz))
1103- then throw((((az + " ") + br) + " is not eligible for presale artifact"))
1105+ else if ((parseIntValue(dH._3[P]) > cA))
1106+ then throw((((aA + " ") + bs) + " is not eligible for presale artifact"))
11041107 else {
1105- let gg = fO(am, br, fk, cK)
1106- (((gg._1 :+ IntegerEntry(gf, fk)) :+ StringEntry(gg._2, makeString(gg._3, ":"))) :+ StringEntry(gg._4, makeString(gg._5, ":")))
1108+ let gh = fP(am, bs, fl, cL)
1109+ (((gh._1 :+ IntegerEntry(gg, fl)) :+ StringEntry(gh._2, makeString(gh._3, ":"))) :+ StringEntry(gh._4, makeString(gh._5, ":")))
11071110 }
11081111 }
11091112
11101113
1111-func gh (ef) = if (if ((ef.originCaller != J))
1114+func gi (eg) = if (if ((eg.originCaller != J))
11121115 then valueOrElse(getBoolean(ak()), false)
11131116 else false)
11141117 then throw("Contracts are under maintenance")
1115- else [StringEntry(al(toString(ef.originCaller)), toBase58String(ef.transactionId))]
1118+ else [StringEntry(an(toString(eg.originCaller)), toBase58String(eg.transactionId))]
11161119
11171120
1118-func gi (am,br) = {
1119- let eY = bq(br)
1120- let gj = split(value(assetInfo(fromBase58String(br))).description, "_")
1121- let aj = gj[Q]
1122- let fk = ai(aj)
1123- let fa = valueOrElse(getInteger(bs(br)), 0)
1124- let eZ = (fk / o)
1125- let eb = ei(gj[R])
1126- let eK = eX(eY, eZ, fa)
1127- let ev = split(eK[aU], "_")
1128- let fw = bl(br)
1129- let fx = getIntegerValue(fw)
1130- let em = (ay() - fx)
1131- if ((0 > em))
1132- then throw(((("Saved timestamp is in future, saved = " + toString(fx)) + ", final = ") + toString(ay())))
1121+func gj (am,bs) = {
1122+ let eZ = br(bs)
1123+ let gk = split(value(assetInfo(fromBase58String(bs))).description, "_")
1124+ let aj = gk[Q]
1125+ let fl = ai(aj)
1126+ let fb = valueOrElse(getInteger(bt(bs)), 0)
1127+ let fa = (fl / o)
1128+ let ec = ej(gk[R])
1129+ let eL = eY(eZ, fa, fb)
1130+ let ew = split(eL[aV], "_")
1131+ let fx = bm(bs)
1132+ let fy = getIntegerValue(fx)
1133+ let en = (az() - fy)
1134+ if ((0 > en))
1135+ then throw(((("Saved timestamp is in future, saved = " + toString(fy)) + ", final = ") + toString(az())))
11331136 else {
1134- let fC = fj(br, fk)
1135- let gk = eq(ev, eb, em, eZ, fC)
1136- let fl = valueOrElse(getInteger(bm(aC, br)), 0)
1137- let gl = ((fk * n) + ((((fk * fa) + fl) * n) / 5))
1138- let gm = (fraction(gk._2, aI, n) * aK)
1139- func gn (cR,eN) = (cR + parseIntValue(eN))
1137+ let fD = fk(bs, fl)
1138+ let gl = er(ew, ec, en, fa, fD)
1139+ let fm = valueOrElse(getInteger(bn(aD, bs)), 0)
1140+ let gm = ((fl * n) + ((((fl * fb) + fm) * n) / 5))
1141+ let gn = (fraction(gl._2, aJ, n) * aL)
1142+ func go (cS,eO) = (cS + parseIntValue(eO))
11401143
1141- let go = {
1142- let cT = split(eK[aV], "_")
1143- let cU = size(cT)
1144- let cV = 0
1145- func cW (cX,cY) = if ((cY >= cU))
1146- then cX
1147- else gn(cX, cT[cY])
1144+ let gp = {
1145+ let cU = split(eL[aW], "_")
1146+ let cV = size(cU)
1147+ let cW = 0
1148+ func cX (cY,cZ) = if ((cZ >= cV))
1149+ then cY
1150+ else go(cY, cU[cZ])
11481151
1149- func cZ (cX,cY) = if ((cY >= cU))
1150- then cX
1152+ func da (cY,cZ) = if ((cZ >= cV))
1153+ then cY
11511154 else throw("List size exceeds 6")
11521155
1153- cZ(cW(cW(cW(cW(cW(cW(cV, 0), 1), 2), 3), 4), 5), 6)
1156+ da(cX(cX(cX(cX(cX(cX(cW, 0), 1), 2), 3), 4), 5), 6)
11541157 }
1155- let gp = (fraction(go, (2 * aI), n) * aK)
1156- let gq = if ((eK[aW] == ""))
1158+ let gq = (fraction(gp, (2 * aJ), n) * aL)
1159+ let gr = if ((eL[aX] == ""))
11571160 then nil
1158- else split_4C(eK[aW], "_")
1159- func eO (cR,eN) = {
1160- let di = cR._2
1161- let gr = parseIntValue(split(aO[di], "_")[aP])
1162- $Tuple2((cR._1 + ((parseIntValue(eN) * gr) * m)), (di + 1))
1161+ else split_4C(eL[aX], "_")
1162+ func eP (cS,eO) = {
1163+ let dj = cS._2
1164+ let gs = parseIntValue(split(aP[dj], "_")[aQ])
1165+ $Tuple2((cS._1 + ((parseIntValue(eO) * gs) * m)), (dj + 1))
11631166 }
11641167
1165- let gs = {
1166- let cT = gq
1167- let cU = size(cT)
1168- let cV = $Tuple2(0, 0)
1169- func eS (cX,cY) = if ((cY >= cU))
1170- then cX
1171- else eO(cX, cT[cY])
1168+ let gt = {
1169+ let cU = gr
1170+ let cV = size(cU)
1171+ let cW = $Tuple2(0, 0)
1172+ func eT (cY,cZ) = if ((cZ >= cV))
1173+ then cY
1174+ else eP(cY, cU[cZ])
11721175
1173- func eT (cX,cY) = if ((cY >= cU))
1174- then cX
1176+ func eU (cY,cZ) = if ((cZ >= cV))
1177+ then cY
11751178 else throw("List size exceeds 24")
11761179
1177- eT(eS(eS(eS(eS(eS(eS(eS(eS(eS(eS(eS(eS(eS(eS(eS(eS(eS(eS(eS(eS(eS(eS(eS(eS(cV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24)
1180+ eU(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(cW, 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)
11781181 }
1179- let gt = (fraction(gs._1, (2 * aI), n) * aK)
1180- $Tuple4(gl, gm, gp, gt)
1182+ let gu = (fraction(gt._1, (2 * aJ), n) * aL)
1183+ $Tuple4(gm, gn, gq, gu)
11811184 }
11821185 }
11831186
11841187
1185-func gu (am,bx) = {
1186- let gv = ca(bx)
1187- let gw = split(valueOrElse(getString(gv), ",;,_,;,_,;,_,;,_,;,_,;,"), "_")
1188- let eF = bC(bx)
1189- let fG = eE(eF)
1190- let gx = dS(gw, dd(fG[bf]), true, nil)
1191- let gy = dk(gx)
1192- func eM (cR,eN) = (cR + parseIntValue(eN))
1188+func gv (am,by) = {
1189+ let gw = cb(by)
1190+ let gx = split(valueOrElse(getString(gw), ",;,_,;,_,;,_,;,_,;,_,;,"), "_")
1191+ let eG = bD(by)
1192+ let fH = eF(eG)
1193+ let gy = dT(gx, de(fH[bg]), true, nil)
1194+ let gz = dl(gy)
1195+ func eN (cS,eO) = (cS + parseIntValue(eO))
11931196
1194- let fL = {
1195- let cT = split(fG[bd], "_")
1196- let cU = size(cT)
1197- let cV = 0
1198- func cW (cX,cY) = if ((cY >= cU))
1199- then cX
1200- else eM(cX, cT[cY])
1197+ let fM = {
1198+ let cU = split(fH[be], "_")
1199+ let cV = size(cU)
1200+ let cW = 0
1201+ func cX (cY,cZ) = if ((cZ >= cV))
1202+ then cY
1203+ else eN(cY, cU[cZ])
12011204
1202- func cZ (cX,cY) = if ((cY >= cU))
1203- then cX
1205+ func da (cY,cZ) = if ((cZ >= cV))
1206+ then cY
12041207 else throw("List size exceeds 6")
12051208
1206- cZ(cW(cW(cW(cW(cW(cW(cV, 0), 1), 2), 3), 4), 5), 6)
1209+ da(cX(cX(cX(cX(cX(cX(cW, 0), 1), 2), 3), 4), 5), 6)
12071210 }
1208- let gm = (fraction(fL, aI, n) * aK)
1209- let gz = {
1210- let cT = split(fG[be], "_")
1211- let cU = size(cT)
1212- let cV = 0
1213- func eS (cX,cY) = if ((cY >= cU))
1214- then cX
1215- else eM(cX, cT[cY])
1211+ let gn = (fraction(fM, aJ, n) * aL)
1212+ let gA = {
1213+ let cU = split(fH[bf], "_")
1214+ let cV = size(cU)
1215+ let cW = 0
1216+ func eT (cY,cZ) = if ((cZ >= cV))
1217+ then cY
1218+ else eN(cY, cU[cZ])
12161219
1217- func eT (cX,cY) = if ((cY >= cU))
1218- then cX
1220+ func eU (cY,cZ) = if ((cZ >= cV))
1221+ then cY
12191222 else throw("List size exceeds 6")
12201223
1221- eT(eS(eS(eS(eS(eS(eS(cV, 0), 1), 2), 3), 4), 5), 6)
1224+ eU(eT(eT(eT(eT(eT(eT(cW, 0), 1), 2), 3), 4), 5), 6)
12221225 }
1223- let gp = (fraction(gz, (2 * aI), n) * aK)
1224- let gq = if ((gy == ""))
1226+ let gq = (fraction(gA, (2 * aJ), n) * aL)
1227+ let gr = if ((gz == ""))
12251228 then nil
1226- else split_4C(gy, "_")
1227- func eO (cR,eN) = {
1228- let di = cR._2
1229- let gr = parseIntValue(split(aO[di], "_")[aP])
1230- $Tuple2((cR._1 + ((parseIntValue(eN) * gr) * m)), (di + 1))
1229+ else split_4C(gz, "_")
1230+ func eP (cS,eO) = {
1231+ let dj = cS._2
1232+ let gs = parseIntValue(split(aP[dj], "_")[aQ])
1233+ $Tuple2((cS._1 + ((parseIntValue(eO) * gs) * m)), (dj + 1))
12311234 }
12321235
1233- let gA = {
1234- let cT = gq
1235- let cU = size(cT)
1236- let cV = $Tuple2(0, 0)
1237- func eV (cX,cY) = if ((cY >= cU))
1238- then cX
1239- else eO(cX, cT[cY])
1236+ let gB = {
1237+ let cU = gr
1238+ let cV = size(cU)
1239+ let cW = $Tuple2(0, 0)
1240+ func eW (cY,cZ) = if ((cZ >= cV))
1241+ then cY
1242+ else eP(cY, cU[cZ])
12401243
1241- func eW (cX,cY) = if ((cY >= cU))
1242- then cX
1244+ func eX (cY,cZ) = if ((cZ >= cV))
1245+ then cY
12431246 else throw("List size exceeds 24")
12441247
1245- eW(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(cV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24)
1248+ eX(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(cW, 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)
12461249 }
1247- let gt = (fraction(gA._1, (2 * aI), n) * aK)
1248- $Tuple3(gm, gp, gt)
1250+ let gu = (fraction(gB._1, (2 * aJ), n) * aL)
1251+ $Tuple3(gn, gq, gu)
12491252 }
12501253
12511254
1252-@Callable(ef)
1253-func constructorV1 (gB) = if ((ef.caller != this))
1255+@Callable(eg)
1256+func constructorV1 (gC) = if ((eg.caller != this))
12541257 then throw("Permission denied")
1255- else [StringEntry(D(), gB)]
1258+ else [StringEntry(D(), gC)]
12561259
12571260
12581261
1259-@Callable(ef)
1260-func saveInteger (w,fB) = if ((ef.caller != this))
1262+@Callable(eg)
1263+func saveInteger (w,fC) = if ((eg.caller != this))
12611264 then throw("saveInteger is not public method")
1262- else [IntegerEntry(w, fB)]
1265+ else [IntegerEntry(w, fC)]
12631266
12641267
12651268
1266-@Callable(ef)
1267-func setBlocked (gC) = if ((ef.caller != this))
1269+@Callable(eg)
1270+func setBlocked (gD) = if ((eg.caller != this))
12681271 then throw("permission denied")
1269- else [BooleanEntry(ak(), gC)]
1272+ else [BooleanEntry(ak(), gD)]
12701273
12711274
12721275
1273-@Callable(ef)
1276+@Callable(eg)
12741277 func stakeLand () = {
1275- let gD = gh(ef)
1276- if ((size(ef.payments) != 1))
1278+ let gE = gi(eg)
1279+ if ((size(eg.payments) != 1))
12771280 then throw("Exactly one payment required")
12781281 else {
1279- let gE = value(ef.payments[0])
1280- let bj = value(gE.assetId)
1281- let v = toString(ef.caller)
1282- if ((gE.amount != 1))
1283- then throw((("NFT " + az) + " token should be attached as payment"))
1282+ let gF = value(eg.payments[0])
1283+ let bk = value(gF.assetId)
1284+ let v = toString(eg.caller)
1285+ if ((gF.amount != 1))
1286+ then throw((("NFT " + aA) + " token should be attached as payment"))
12841287 else {
1285- let fv = value(assetInfo(bj))
1286- if ((fv.issuer != this))
1288+ let fw = value(assetInfo(bk))
1289+ if ((fw.issuer != this))
12871290 then throw("Unknown issuer of token")
1288- else if (!(contains(fv.name, az)))
1289- then throw((("Only NFT " + az) + " tokens are accepted"))
1291+ else if (!(contains(fw.name, aA)))
1292+ then throw((("Only NFT " + aA) + " tokens are accepted"))
12901293 else {
1291- let gF = drop(fv.name, 4)
1292- let cE = if (contains(gF, "XXL"))
1293- then dropRight(gF, 3)
1294- else if (contains(gF, "XL"))
1295- then dropRight(gF, 2)
1296- else dropRight(gF, 1)
1297- if (!(isDefined(parseInt(cE))))
1298- then throw(("Cannot parse land number from " + fv.name))
1294+ let gG = drop(fw.name, 4)
1295+ let cF = if (contains(gG, "XXL"))
1296+ then dropRight(gG, 3)
1297+ else if (contains(gG, "XL"))
1298+ then dropRight(gG, 2)
1299+ else dropRight(gG, 1)
1300+ if (!(isDefined(parseInt(cF))))
1301+ then throw(("Cannot parse land number from " + fw.name))
12991302 else {
1300- let br = toBase58String(bj)
1301- let fw = bl(br)
1302- if (isDefined(getInteger(fw)))
1303- then throw((("NFT " + fv.name) + " is already staked"))
1303+ let bs = toBase58String(bk)
1304+ let fx = bm(bs)
1305+ if (isDefined(getInteger(fx)))
1306+ then throw((("NFT " + fw.name) + " is already staked"))
13041307 else {
1305- let fz = split(fv.description, "_")
1306- let eb = ei(fz[R])
1307- let fk = ai(fz[Q])
1308- let eZ = (fk / o)
1309- let db = eh(eb, eZ, 1)
1310- let gG = Y(fz[S])
1311- let gH = split(valueOrElse(getString(gG), "0_0_0_0_0_0"), "_")
1312- let gI = makeString(dZ(gH, eb, eZ, 1), "_")
1313- let gJ = aa(v)
1314- let gK = getString(gJ)
1315- let gL = if (isDefined(gK))
1316- then split_51C(value(gK), "_")
1308+ let fA = split(fw.description, "_")
1309+ let ec = ej(fA[R])
1310+ let fl = ai(fA[Q])
1311+ let fa = (fl / o)
1312+ let dc = ei(ec, fa, 1)
1313+ let gH = Y(fA[S])
1314+ let gI = split(valueOrElse(getString(gH), "0_0_0_0_0_0"), "_")
1315+ let gJ = makeString(ea(gI, ec, fa, 1), "_")
1316+ let gK = aa(v)
1317+ let gL = getString(gK)
1318+ let gM = if (isDefined(gL))
1319+ then split_51C(value(gL), "_")
13171320 else nil
1318- if (containsElement(gL, br))
1319- then throw(("Your staked lands already contain " + br))
1320- else if ((size(gL) >= aE))
1321- then throw((("Your already staked max (" + toString(aE)) + ") lands"))
1321+ if (containsElement(gM, bs))
1322+ then throw(("Your staked lands already contain " + bs))
1323+ else if ((size(gM) >= aF))
1324+ then throw((("Your already staked max (" + toString(aF)) + ") lands"))
13221325 else {
1323- let fa = valueOrElse(getInteger(bs(br)), 0)
1324- let gM = ac(v)
1325- let gN = valueOrElse(getInteger(gM), 0)
1326- let gO = invoke(M, "onStakeUnstakeLand", [v], nil)
1327- $Tuple2(([IntegerEntry(fw, lastBlock.timestamp), IntegerEntry(bo(az, br, v), lastBlock.timestamp), StringEntry(gJ, makeString_11C((gL :+ br), "_")), IntegerEntry(gM, (gN + fk)), StringEntry(bi(br), v), StringEntry(cD(cE), v), IntegerEntry(cC(br, v), fa), StringEntry(X(), db), StringEntry(gG, gI)] ++ gD), gO)
1326+ let fb = valueOrElse(getInteger(bt(bs)), 0)
1327+ let gN = ac(v)
1328+ let gO = valueOrElse(getInteger(gN), 0)
1329+ let gP = invoke(M, "onStakeUnstakeLand", [v], nil)
1330+ $Tuple2(([IntegerEntry(fx, lastBlock.timestamp), IntegerEntry(bp(aA, bs, v), lastBlock.timestamp), StringEntry(gK, makeString_11C((gM :+ bs), "_")), IntegerEntry(gN, (gO + fl)), StringEntry(bj(bs), v), StringEntry(cE(cF), v), IntegerEntry(cD(bs, v), fb), StringEntry(X(), dc), StringEntry(gH, gJ)] ++ gE), gP)
13281331 }
13291332 }
13301333 }
13351338
13361339
13371340
1338-@Callable(ef)
1339-func unstakeLand (fq) = {
1340- let gD = gh(ef)
1341- if ((size(ef.payments) != 0))
1341+@Callable(eg)
1342+func unstakeLand (fr) = {
1343+ let gE = gi(eg)
1344+ if ((size(eg.payments) != 0))
13421345 then throw("No payments required")
13431346 else {
1344- let am = toString(ef.caller)
1345- let dG = fo(am, cJ, fq)
1346- let br = dG._2
1347- let fz = dG._3
1348- let gJ = aa(am)
1349- let eb = ei(fz[R])
1350- let fk = ai(fz[Q])
1351- let eZ = (fk / o)
1352- let db = eh(eb, eZ, -1)
1353- let gG = Y(fz[S])
1354- let gH = split(valueOrElse(getString(gG), "0_0_0_0_0_0"), "_")
1355- let gI = makeString(dZ(gH, eb, eZ, -1), "_")
1356- let gg = fO(am, br, fk, cJ)
1357- let gL = split_51C(valueOrElse(getString(gJ), ""), "_")
1358- let I = indexOf(gL, br)
1347+ let am = toString(eg.caller)
1348+ let dH = fp(am, cK, fr)
1349+ let bs = dH._2
1350+ let fA = dH._3
1351+ let gK = aa(am)
1352+ let ec = ej(fA[R])
1353+ let fl = ai(fA[Q])
1354+ let fa = (fl / o)
1355+ let dc = ei(ec, fa, -1)
1356+ let gH = Y(fA[S])
1357+ let gI = split(valueOrElse(getString(gH), "0_0_0_0_0_0"), "_")
1358+ let gJ = makeString(ea(gI, ec, fa, -1), "_")
1359+ let gh = fP(am, bs, fl, cK)
1360+ let gM = split_51C(valueOrElse(getString(gK), ""), "_")
1361+ let I = indexOf(gM, bs)
13591362 if (!(isDefined(I)))
1360- then throw(("Your staked lands don't contain " + br))
1363+ then throw(("Your staked lands don't contain " + bs))
13611364 else {
1362- let gP = lastBlock.timestamp
1363- let gQ = valueOrElse(getInteger(L, bE(am)), 0)
1364- if ((gQ >= gP))
1365- then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(gQ)))
1365+ let gQ = lastBlock.timestamp
1366+ let gR = valueOrElse(getInteger(L, bF(am)), 0)
1367+ if ((gR >= gQ))
1368+ then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(gR)))
13661369 else {
1367- let gR = (valueOrElse(getInteger(M, cv(am)), 0) + k)
1368- if ((gR > gP))
1369- then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString(gR)))
1370+ let gS = (valueOrElse(getInteger(M, cw(am)), 0) + k)
1371+ if ((gS > gQ))
1372+ then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString(gS)))
13701373 else {
1371- let gM = ac(am)
1372- let gS = valueOrElse(getInteger(gM), 0)
1373- let gT = if ((fk > gS))
1374+ let gN = ac(am)
1375+ let gT = valueOrElse(getInteger(gN), 0)
1376+ let gU = if ((fl > gT))
13741377 then 0
1375- else (gS - fk)
1376- let gO = invoke(M, "onStakeUnstakeLand", [am], nil)
1377- $Tuple2(([ScriptTransfer(ef.caller, 1, fromBase58String(br)), DeleteEntry(bl(br)), DeleteEntry(bo(az, br, am)), StringEntry(X(), db), StringEntry(gG, gI), StringEntry(gg._2, makeString(gg._3, ":")), if ((size(gL) > 1))
1378- then StringEntry(gJ, makeString_11C(removeByIndex(gL, value(I)), "_"))
1379- else DeleteEntry(gJ), IntegerEntry(gM, gT)] ++ gD), gO)
1378+ else (gT - fl)
1379+ let gP = invoke(M, "onStakeUnstakeLand", [am], nil)
1380+ $Tuple2(([ScriptTransfer(eg.caller, 1, fromBase58String(bs)), DeleteEntry(bm(bs)), DeleteEntry(bp(aA, bs, am)), StringEntry(X(), dc), StringEntry(gH, gJ), StringEntry(gh._2, makeString(gh._3, ":")), if ((size(gM) > 1))
1381+ then StringEntry(gK, makeString_11C(removeByIndex(gM, value(I)), "_"))
1382+ else DeleteEntry(gK), IntegerEntry(gN, gU)] ++ gE), gP)
13801383 }
13811384 }
13821385 }
13851388
13861389
13871390
1388-@Callable(ef)
1389-func unstakeLandCallback (br,am) = if ((toString(ef.caller) != j))
1391+@Callable(eg)
1392+func unstakeLandCallback (bs,am) = if ((toString(eg.caller) != j))
13901393 then throw("Permission denied")
13911394 else {
1392- let gU = gi(am, br)
1393- let gO = invoke(M, "onStakeUnstakeLand", [am], nil)
1394- $Tuple2([Burn(fromBase58String(br), 1), DeleteEntry(bl(br)), DeleteEntry(bo(az, br, am))], $Tuple5(gU._1, gU._2, gU._3, gU._4, gO))
1395+ let gV = gj(am, bs)
1396+ let gP = invoke(M, "onStakeUnstakeLand", [am], nil)
1397+ $Tuple2([Burn(fromBase58String(bs), 1), DeleteEntry(bm(bs)), DeleteEntry(bp(aA, bs, am))], $Tuple5(gV._1, gV._2, gV._3, gV._4, gP))
13951398 }
13961399
13971400
13981401
1399-@Callable(ef)
1400-func unstakeLandREADONLY (br,am) = {
1401- let gU = gi(am, br)
1402- $Tuple2(nil, gU)
1402+@Callable(eg)
1403+func unstakeLandREADONLY (bs,am) = {
1404+ let gV = gj(am, bs)
1405+ $Tuple2(nil, gV)
14031406 }
14041407
14051408
14061409
1407-@Callable(ef)
1408-func unstakeLandsFinalizeCallback (am) = if ((toString(ef.caller) != j))
1410+@Callable(eg)
1411+func unstakeLandsFinalizeCallback (am) = if ((toString(eg.caller) != j))
14091412 then throw("Permission denied")
14101413 else $Tuple2([DeleteEntry(aa(am)), DeleteEntry(ac(am))], 0)
14111414
14121415
14131416
1414-@Callable(ef)
1415-func convertUnstakedLands () = if ((size(ef.payments) != 1))
1417+@Callable(eg)
1418+func convertUnstakedLands () = if ((size(eg.payments) != 1))
14161419 then throw("Exactly one payment required")
14171420 else {
1418- let gE = value(ef.payments[0])
1419- let bj = value(gE.assetId)
1420- let v = toString(ef.caller)
1421- if ((gE.amount != 1))
1422- then throw((("NFT " + az) + " token should be attached as payment"))
1421+ let gF = value(eg.payments[0])
1422+ let bk = value(gF.assetId)
1423+ let v = toString(eg.caller)
1424+ if ((gF.amount != 1))
1425+ then throw((("NFT " + aA) + " token should be attached as payment"))
14231426 else {
1424- let fv = value(assetInfo(bj))
1425- if ((fv.issuer != this))
1427+ let fw = value(assetInfo(bk))
1428+ if ((fw.issuer != this))
14261429 then throw("Unknown issuer of token")
1427- else if (!(contains(fv.name, az)))
1428- then throw((("Only NFT " + az) + " tokens are accepted"))
1430+ else if (!(contains(fw.name, aA)))
1431+ then throw((("Only NFT " + aA) + " tokens are accepted"))
14291432 else {
1430- let br = toBase58String(bj)
1431- let fz = split(fv.description, "_")
1432- let fk = ai(fz[Q])
1433- let fa = valueOrElse(getInteger(bs(br)), 0)
1434- let fl = valueOrElse(getInteger(bm(aC, br)), 0)
1435- let gV = ((fk * n) + ((((fk * fa) + fl) * n) / 5))
1436- let gW = invoke(O, "requestAcresCallback", [gV], nil)
1437- if ((gW == gW))
1433+ let bs = toBase58String(bk)
1434+ let fA = split(fw.description, "_")
1435+ let fl = ai(fA[Q])
1436+ let fb = valueOrElse(getInteger(bt(bs)), 0)
1437+ let fm = valueOrElse(getInteger(bn(aD, bs)), 0)
1438+ let gW = ((fl * n) + ((((fl * fb) + fm) * n) / 5))
1439+ let gX = invoke(O, "requestAcresCallback", [gW], nil)
1440+ if ((gX == gX))
14381441 then {
1439- let gX = invoke(addressFromStringValue(j), "stakeAcresCallback", [v], [AttachedPayment(U, gV)])
1440- if ((gX == gX))
1441- then $Tuple2([Burn(fromBase58String(br), 1)], 0)
1442+ let gY = invoke(addressFromStringValue(j), "stakeAcresCallback", [v], [AttachedPayment(U, gW)])
1443+ if ((gY == gY))
1444+ then $Tuple2([Burn(fromBase58String(bs), 1)], 0)
14421445 else throw("Strict value is not equal to itself.")
14431446 }
14441447 else throw("Strict value is not equal to itself.")
14481451
14491452
14501453
1451-@Callable(ef)
1452-func unstakeDuckCallback (bx,am) = if ((toString(ef.caller) != j))
1454+@Callable(eg)
1455+func unstakeDuckCallback (by,am) = if ((toString(eg.caller) != j))
14531456 then throw("Permission denied")
14541457 else {
1455- let gU = gu(am, bx)
1456- $Tuple2([ScriptTransfer(addressFromStringValue(am), 1, fromBase58String(bx)), DeleteEntry(bl(bx)), DeleteEntry(bA(bx)), DeleteEntry(bo(aA, bx, am)), DeleteEntry(bB(am))], gU)
1458+ let gV = gv(am, by)
1459+ $Tuple2([ScriptTransfer(addressFromStringValue(am), 1, fromBase58String(by)), DeleteEntry(bm(by)), DeleteEntry(bB(by)), DeleteEntry(bp(aB, by, am)), DeleteEntry(bC(am))], gV)
14571460 }
14581461
14591462
14601463
1461-@Callable(ef)
1462-func unstakeDuckREADONLY (bx,am) = {
1463- let gU = gu(am, bx)
1464- $Tuple2(nil, gU)
1464+@Callable(eg)
1465+func unstakeDuckREADONLY (by,am) = {
1466+ let gV = gv(am, by)
1467+ $Tuple2(nil, gV)
14651468 }
14661469
14671470
14681471
1469-@Callable(ef)
1470-func claimRes (fB,gY) = {
1471- let gD = gh(ef)
1472- if ((size(ef.payments) != 0))
1472+@Callable(eg)
1473+func claimRes (fC,gZ) = {
1474+ let gE = gi(eg)
1475+ if ((size(eg.payments) != 0))
14731476 then throw("No payments required")
14741477 else {
1475- let am = toString(ef.originCaller)
1476- let eg = fA(am, fB, cJ, gY)
1477- let bx = valueOrErrorMessage(getString(bB(am)), "You don't have a duck staked")
1478- $Tuple2(((((eg._1 ++ fV(bx, fraction(cj, fB, n))._1) :+ StringEntry(eg._2, makeString(eg._3, ":"))) :+ StringEntry(eg._4, makeString(eg._5, ":"))) ++ gD), eg._3[bd])
1478+ let am = toString(eg.originCaller)
1479+ let eh = fB(am, fC, cK, gZ)
1480+ let by = valueOrErrorMessage(getString(bC(am)), "You don't have a duck staked")
1481+ $Tuple2(((((eh._1 ++ fW(by, fraction(ck, fC, n))._1) :+ StringEntry(eh._2, makeString(eh._3, ":"))) :+ StringEntry(eh._4, makeString(eh._5, ":"))) ++ gE), eh._3[be])
14791482 }
14801483 }
14811484
14821485
14831486
1484-@Callable(ef)
1485-func claimResToWH (fB,gY) = {
1486- let gD = gh(ef)
1487- if ((size(ef.payments) != 0))
1487+@Callable(eg)
1488+func claimResToWH (fC,gZ) = {
1489+ let gE = gi(eg)
1490+ if ((size(eg.payments) != 0))
14881491 then throw("No payments required")
14891492 else {
1490- let am = toString(ef.originCaller)
1491- let eg = fA(am, fB, cI, gY)
1492- $Tuple2(((((eg._1 ++ fW(am, fraction(cj, fB, n))._1) :+ StringEntry(eg._2, makeString(eg._3, ":"))) :+ StringEntry(eg._4, makeString(eg._5, ":"))) ++ gD), eg._5[aU])
1493+ let am = toString(eg.originCaller)
1494+ let eh = fB(am, fC, cJ, gZ)
1495+ $Tuple2(((((eh._1 ++ fX(am, fraction(ck, fC, n))._1) :+ StringEntry(eh._2, makeString(eh._3, ":"))) :+ StringEntry(eh._4, makeString(eh._5, ":"))) ++ gE), eh._5[aV])
14931496 }
14941497 }
14951498
14961499
14971500
1498-@Callable(ef)
1499-func updateBackpack (bx,gZ) = if ((ef.caller != K))
1501+@Callable(eg)
1502+func updateBackpack (by,ha) = if ((eg.caller != K))
15001503 then throw("permission denied")
1501- else $Tuple2([StringEntry(bC(bx), gZ)], gZ)
1504+ else $Tuple2([StringEntry(bD(by), ha)], ha)
15021505
15031506
15041507
1505-@Callable(ef)
1508+@Callable(eg)
15061509 func commitForRandom () = {
1507- let gD = gh(ef)
1508- let ha = (height + V)
1509- let am = toString(ef.caller)
1510- $Tuple2(([IntegerEntry(W(am), ha)] ++ gD), ha)
1510+ let gE = gi(eg)
1511+ let hb = (height + V)
1512+ let am = toString(eg.caller)
1513+ $Tuple2(([IntegerEntry(W(am), hb)] ++ gE), hb)
15111514 }
15121515
15131516
15141517
1515-@Callable(ef)
1516-func revealRandom (au) = {
1517- let gD = gh(ef)
1518- let am = toString(ef.caller)
1519- let hb = W(am)
1520- let ha = valueOrErrorMessage(getInteger(hb), "You have to commitForRandom() first!")
1521- if ((ha > height))
1522- then throw(("Random number is not ready yet, wait until height = " + toString(ha)))
1518+@Callable(eg)
1519+func revealRandom (av) = {
1520+ let gE = gi(eg)
1521+ let am = toString(eg.caller)
1522+ let hc = W(am)
1523+ let hb = valueOrErrorMessage(getInteger(hc), "You have to commitForRandom() first!")
1524+ if ((hb > height))
1525+ then throw(("Random number is not ready yet, wait until height = " + toString(hb)))
15231526 else {
1524- let aw = value(value(blockInfoByHeight(ha)).vrf)
1525- let av = toBytes(valueOrElse(getString(al(am)), ""))
1526- let hc = at(au, av, aw)
1527- $Tuple2(([DeleteEntry(hb)] ++ gD), hc)
1527+ let ax = value(value(blockInfoByHeight(hb)).vrf)
1528+ let aw = toBytes(valueOrElse(getString(al(am)), ""))
1529+ let hd = au(av, aw, ax)
1530+ $Tuple2(([DeleteEntry(hc)] ++ gE), hd)
15281531 }
15291532 }
15301533
15311534
15321535
1533-@Callable(ef)
1534-func activateArtifact (hd,he) = {
1535- let gD = gh(ef)
1536- if ((size(ef.payments) != 0))
1536+@Callable(eg)
1537+func activateArtifact (he,hf) = {
1538+ let gE = gi(eg)
1539+ if ((size(eg.payments) != 0))
15371540 then throw("No payments required")
15381541 else {
1539- let am = toString(ef.caller)
1540- let eg = {
1541- let g = hd
1542+ let am = toString(eg.caller)
1543+ let eh = {
1544+ let g = he
15421545 if (("PRESALE" == g))
1543- then ge(am, he)
1546+ then gf(am, hf)
15441547 else if (("ONBOARD" == g))
1545- then fX(am)
1548+ then fY(am)
15461549 else throw("Unknown artifact")
15471550 }
1548- (eg ++ gD)
1551+ (eh ++ gE)
15491552 }
15501553 }
15511554
15521555
15531556
1554-@Callable(ef)
1555-func saveWarehouse (fc,br) = if ((ef.caller != K))
1557+@Callable(eg)
1558+func saveWarehouse (fd,bs) = if ((eg.caller != K))
15561559 then throw("Access denied")
15571560 else {
1558- let eY = bq(br)
1559- let fd = split_4C(fc, ":")
1560- if ((size(fd) != 5))
1561+ let eZ = br(bs)
1562+ let fe = split_4C(fd, ":")
1563+ if ((size(fe) != 5))
15611564 then throw("warehouse string should contain 4 ':' separators")
15621565 else {
1563- let hf = split(fd[aX], "_")[aY]
1564- let fM = eJ(fd)
1565- let hg = eH(fd[aT])
1566- let fN = ((hg - parseIntValue(hf)) - fM)
1567- if ((0 > fN))
1566+ let hg = split(fe[aY], "_")[aZ]
1567+ let fN = eK(fe)
1568+ let hh = eI(fe[aU])
1569+ let fO = ((hh - parseIntValue(hg)) - fN)
1570+ if ((0 > fO))
15681571 then throw("Operation leads to negative free warehouse space")
15691572 else {
1570- let hh = makeString_2C([fd[aT], fd[aU], fd[aV], fd[aW], makeString([hf, toString(fM), toString(fN), toString(hg)], "_")], ":")
1571- $Tuple2([StringEntry(eY, hh)], hh)
1573+ let hi = makeString_2C([fe[aU], fe[aV], fe[aW], fe[aX], makeString([hg, toString(fN), toString(fO), toString(hh)], "_")], ":")
1574+ $Tuple2([StringEntry(eZ, hi)], hi)
15721575 }
15731576 }
15741577 }
15751578
15761579
15771580
1578-@Callable(ef)
1579-func setCustomName (bj,hi,bn) = {
1580- let gD = gh(ef)
1581- if ((size(ef.payments) != 1))
1581+@Callable(eg)
1582+func setCustomName (bk,hj,bo) = {
1583+ let gE = gi(eg)
1584+ if ((size(eg.payments) != 1))
15821585 then throw("Exactly one payment required")
15831586 else {
1584- let gE = value(ef.payments[0])
1585- if ((gE.assetId != h))
1587+ let gF = value(eg.payments[0])
1588+ if ((gF.assetId != h))
15861589 then throw("Allowed USDT payment only!")
1587- else if ((gE.amount != cx))
1588- then throw(("Payment should be " + toString(cx)))
1589- else if (contains(hi, "__"))
1590- then throw(("Name should not contain '__': " + hi))
1591- else if ((size(hi) > cy))
1592- then throw(("Name too long, maxLength=" + toString(cy)))
1590+ else if ((gF.amount != cy))
1591+ then throw(("Payment should be " + toString(cy)))
1592+ else if (contains(hj, "__"))
1593+ then throw(("Name should not contain '__': " + hj))
1594+ else if ((size(hj) > cz))
1595+ then throw(("Name too long, maxLength=" + toString(cz)))
15931596 else {
1594- let am = toString(ef.originCaller)
1595- let hj = {
1596- let g = bn
1597+ let am = toString(eg.originCaller)
1598+ let hk = {
1599+ let g = bo
15971600 if (("ACCOUNT" == g))
15981601 then {
1599- let hk = cG(hi)
1600- let hl = getString(hk)
1601- if (isDefined(hl))
1602- then throw(("Name already registered: " + hi))
1602+ let hl = cH(hj)
1603+ let hm = getString(hl)
1604+ if (isDefined(hm))
1605+ then throw(("Name already registered: " + hj))
16031606 else {
1604- let hm = bu(am)
1605- let hn = getString(hm)
1606- let ho = if (isDefined(hn))
1607- then [DeleteEntry(cG(value(hn)))]
1607+ let hn = bv(am)
1608+ let ho = getString(hn)
1609+ let hp = if (isDefined(ho))
1610+ then [DeleteEntry(cH(value(ho)))]
16081611 else nil
1609- (((ho :+ StringEntry(hm, hi)) :+ StringEntry(hk, am)) ++ fW(am, ck)._1)
1612+ (((hp :+ StringEntry(hn, hj)) :+ StringEntry(hl, am)) ++ fX(am, cl)._1)
16101613 }
16111614 }
16121615 else if (("LAND" == g))
16131616 then {
1614- let fv = value(assetInfo(fromBase58String(bj)))
1615- let fw = bl(bj)
1616- if (!(isDefined(getInteger(fw))))
1617- then throw((fv.name + " is not staked"))
1617+ let fw = value(assetInfo(fromBase58String(bk)))
1618+ let fx = bm(bk)
1619+ if (!(isDefined(getInteger(fx))))
1620+ then throw((fw.name + " is not staked"))
16181621 else {
1619- let fy = valueOrErrorMessage(getString(bi(bj)), (("NFT " + fv.name) + " is orphaned"))
1620- if ((fy != am))
1621- then throw((az + " is not yours"))
1622+ let fz = valueOrErrorMessage(getString(bj(bk)), (("NFT " + fw.name) + " is orphaned"))
1623+ if ((fz != am))
1624+ then throw((aA + " is not yours"))
16221625 else {
1623- let hk = cA(hi)
1624- let hl = getString(hk)
1625- if (isDefined(hl))
1626- then throw(("Name already registered: " + hi))
1626+ let hl = cB(hj)
1627+ let hm = getString(hl)
1628+ if (isDefined(hm))
1629+ then throw(("Name already registered: " + hj))
16271630 else {
1628- let hp = bk(bj)
1629- let hn = getString(hp)
1630- let ho = if (isDefined(hn))
1631- then [DeleteEntry(cA(value(hn)))]
1631+ let hq = bl(bk)
1632+ let ho = getString(hq)
1633+ let hp = if (isDefined(ho))
1634+ then [DeleteEntry(cB(value(ho)))]
16321635 else nil
1633- (((ho :+ StringEntry(hp, hi)) :+ StringEntry(hk, bj)) ++ fW(am, ck)._1)
1636+ (((hp :+ StringEntry(hq, hj)) :+ StringEntry(hl, bk)) ++ fX(am, cl)._1)
16341637 }
16351638 }
16361639 }
16371640 }
16381641 else if (("DUCK" == g))
16391642 then {
1640- let fv = value(assetInfo(fromBase58String(bj)))
1641- let fw = bl(bj)
1642- if (if (!(isDefined(getInteger(fw))))
1643+ let fw = value(assetInfo(fromBase58String(bk)))
1644+ let fx = bm(bk)
1645+ if (if (!(isDefined(getInteger(fx))))
16431646 then true
1644- else !(isDefined(getString(bB(am)))))
1645- then throw((fv.name + " is not staked"))
1647+ else !(isDefined(getString(bC(am)))))
1648+ then throw((fw.name + " is not staked"))
16461649 else {
1647- let fy = valueOrErrorMessage(getString(bA(bj)), (("NFT " + fv.name) + " is orphaned"))
1648- if ((fy != am))
1649- then throw((aA + " is not yours"))
1650+ let fz = valueOrErrorMessage(getString(bB(bk)), (("NFT " + fw.name) + " is orphaned"))
1651+ if ((fz != am))
1652+ then throw((aB + " is not yours"))
16501653 else {
1651- let hk = cF(hi)
1652- let hl = getString(hk)
1653- if (isDefined(hl))
1654- then throw(("Name already registered: " + hi))
1654+ let hl = cG(hj)
1655+ let hm = getString(hl)
1656+ if (isDefined(hm))
1657+ then throw(("Name already registered: " + hj))
16551658 else {
1656- let hp = bt(bj)
1657- let hn = getString(hp)
1658- let ho = if (isDefined(hn))
1659- then [DeleteEntry(cF(value(hn)))]
1659+ let hq = bu(bk)
1660+ let ho = getString(hq)
1661+ let hp = if (isDefined(ho))
1662+ then [DeleteEntry(cG(value(ho)))]
16601663 else nil
1661- (((ho :+ StringEntry(hp, hi)) :+ StringEntry(hk, bj)) ++ fV(bj, ck)._1)
1664+ (((hp :+ StringEntry(hq, hj)) :+ StringEntry(hl, bk)) ++ fW(bk, cl)._1)
16621665 }
16631666 }
16641667 }
16651668 }
16661669 else throw("Unknown entity type")
16671670 }
1668- $Tuple2(((hj :+ ScriptTransfer(K, gE.amount, h)) ++ gD), 0)
1671+ $Tuple2(((hk :+ ScriptTransfer(K, gF.amount, h)) ++ gE), 0)
16691672 }
16701673 }
16711674 }
16721675
16731676
16741677
1675-@Callable(ef)
1676-func setReferrals (hq,hr) = if ((ef.callerPublicKey != f))
1678+@Callable(eg)
1679+func setReferrals (hr,hs) = if ((eg.callerPublicKey != f))
16771680 then throw("Permission denied")
16781681 else {
1679- let gD = gh(ef)
1680- if ((size(ef.payments) != 0))
1682+ let gE = gi(eg)
1683+ if ((size(eg.payments) != 0))
16811684 then throw("No payments required")
1682- else if (!(isDefined(addressFromString(hq))))
1683- then throw(("Invalid address: " + hq))
1685+ else if (!(isDefined(addressFromString(hr))))
1686+ then throw(("Invalid address: " + hr))
16841687 else {
1685- let hs = addressFromString(hr)
1686- if (!(isDefined(hs)))
1687- then throw(("Invalid address: " + hr))
1688+ let ht = addressFromString(hs)
1689+ if (!(isDefined(ht)))
1690+ then throw(("Invalid address: " + hs))
16881691 else {
1689- let ht = getString(al(hq))
1690- if (!(isDefined(ht)))
1692+ let hu = getString(al(hr))
1693+ if (!(isDefined(hu)))
16911694 then throw("oldPlayer didn't do any tx in game")
1692- else if ((0 >= wavesBalance(value(hs)).available))
1695+ else if ((0 >= wavesBalance(value(ht)).available))
16931696 then throw("newPlayer has no WAVES")
16941697 else {
1695- let hu = cH()
1696- let hv = getString(hu)
1697- let hw = if (isDefined(hv))
1698- then split_4C(value(hv), "_")
1698+ let hv = cI()
1699+ let hw = getString(hv)
1700+ let hx = if (isDefined(hw))
1701+ then split_4C(value(hw), "_")
16991702 else nil
1700- if (containsElement(hw, hr))
1701- then throw((hr + " is not newbie (already has referrals)"))
1703+ if (containsElement(hx, hs))
1704+ then throw((hs + " is not newbie (already has referrals)"))
17021705 else {
1703- let fY = bv(hr)
1704- let fZ = getString(fY)
1705- if (if (isDefined(fZ))
1706- then isDefined(addressFromString(value(fZ)))
1706+ let fZ = bw(hs)
1707+ let ga = getString(fZ)
1708+ if (if (isDefined(ga))
1709+ then isDefined(addressFromString(value(ga)))
17071710 else false)
1708- then throw(((hr + " already has refBy: ") + value(fZ)))
1711+ then throw(((hs + " already has refBy: ") + value(ga)))
17091712 else {
1710- let hx = bz(hq)
1711- let hy = getString(hx)
1712- let hz = if (isDefined(hy))
1713- then split_4C(value(hy), "_")
1713+ let hy = bA(hr)
1714+ let hz = getString(hy)
1715+ let hA = if (isDefined(hz))
1716+ then split_4C(value(hz), "_")
17141717 else nil
1715- if (containsElement(hz, hr))
1716- then throw((((hq + " already contains ") + hr) + " within referrals"))
1718+ if (containsElement(hA, hs))
1719+ then throw((((hr + " already contains ") + hs) + " within referrals"))
17171720 else {
1718- let hA = makeString_2C((hz :+ hr), "_")
1719- let hB = if (containsElement(hw, hq))
1720- then value(hv)
1721- else makeString_2C((hw :+ hq), "_")
1722- $Tuple2(([StringEntry(fY, hq), StringEntry(hx, hA), StringEntry(hu, hB)] ++ gD), 0)
1721+ let hB = makeString_2C((hA :+ hs), "_")
1722+ let hC = if (containsElement(hx, hr))
1723+ then value(hw)
1724+ else makeString_2C((hx :+ hr), "_")
1725+ $Tuple2(([StringEntry(fZ, hr), StringEntry(hy, hB), StringEntry(hv, hC)] ++ gE), 0)
17231726 }
17241727 }
17251728 }
17301733
17311734
17321735
1733-@Callable(ef)
1734-func distributePoints (hC,hD,hE,hF,hG) = {
1735- let gD = gh(ef)
1736- if ((size(ef.payments) != 0))
1736+@Callable(eg)
1737+func distributePoints (hD,hE,hF,hG,hH) = {
1738+ let gE = gi(eg)
1739+ if ((size(eg.payments) != 0))
17371740 then throw("No payments required")
17381741 else {
1739- let am = toString(ef.originCaller)
1740- let hH = ag(invoke(M, "checkWlgXpREADONLY", [am], nil))
1741- let hI = ad(hH[1])
1742- let hJ = if ((0 >= hI))
1742+ let am = toString(eg.originCaller)
1743+ let hI = ag(invoke(M, "checkWlgXpREADONLY", [am], nil))
1744+ let hJ = ad(hI[1])
1745+ let hK = if ((0 >= hJ))
17431746 then $Tuple2(0, nil)
17441747 else {
1745- let fT = ad(invoke(M, "takeWlgXp", [am], nil))
1746- if ((fT == fT))
1747- then $Tuple2(hI, [IntegerEntry(cc(am), ad(hH[0])), IntegerEntry(cb(am), ad(hH[2]))])
1748+ let fU = ad(invoke(M, "takeWlgXp", [am], nil))
1749+ if ((fU == fU))
1750+ then $Tuple2(hJ, [IntegerEntry(cd(am), ad(hI[0])), IntegerEntry(cc(am), ad(hI[2]))])
17481751 else throw("Strict value is not equal to itself.")
17491752 }
1750- let hK = hJ._1
1751- let hL = hJ._2
1752- let bx = valueOrErrorMessage(getString(bB(am)), "You don't have a duck staked")
1753- let hM = cd(am)
1754- let hN = (valueOrElse(getInteger(hM), 0) + hK)
1755- let hO = bZ(bx)
1756- let hP = valueOrElse(getInteger(hO), 0)
1757- let hQ = (hN + hP)
1758- let hR = ((((hC + hD) + hE) + hF) + hG)
1759- if ((hR > hQ))
1760- then throw((("There are only " + toString(hQ)) + " free points to distribute"))
1753+ let hL = hK._1
1754+ let hM = hK._2
1755+ let by = valueOrErrorMessage(getString(bC(am)), "You don't have a duck staked")
1756+ let hN = ce(am)
1757+ let hO = (valueOrElse(getInteger(hN), 0) + hL)
1758+ let hP = ca(by)
1759+ let hQ = valueOrElse(getInteger(hP), 0)
1760+ let hR = (hO + hQ)
1761+ let hS = ((((hD + hE) + hF) + hG) + hH)
1762+ if ((hS > hR))
1763+ then throw((("There are only " + toString(hR)) + " free points to distribute"))
17611764 else {
1762- let hS = bW(bx)
1763- let hT = split(valueOrElse(getString(hS), "0_0_0_0_0"), "_")
1764- let hU = (hN - hR)
1765- $Tuple2((([IntegerEntry(hM, if ((0 > hU))
1765+ let hT = bX(by)
1766+ let hU = split(valueOrElse(getString(hT), "0_0_0_0_0"), "_")
1767+ let hV = (hO - hS)
1768+ $Tuple2((([IntegerEntry(hN, if ((0 > hV))
17661769 then 0
1767- else hU), IntegerEntry(hO, if ((0 > hU))
1768- then (hP + hU)
1769- else hP), StringEntry(hS, makeString([toString((parseIntValue(hT[bN]) + hC)), toString((parseIntValue(hT[bO]) + hD)), toString((parseIntValue(hT[bP]) + hE)), toString((parseIntValue(hT[bQ]) + hF)), toString((parseIntValue(hT[bR]) + hG))], "_"))] ++ gD) ++ hL), 0)
1770+ else hV), IntegerEntry(hP, if ((0 > hV))
1771+ then (hQ + hV)
1772+ else hQ), StringEntry(hT, makeString([toString((parseIntValue(hU[bO]) + hD)), toString((parseIntValue(hU[bP]) + hE)), toString((parseIntValue(hU[bQ]) + hF)), toString((parseIntValue(hU[bR]) + hG)), toString((parseIntValue(hU[bS]) + hH))], "_"))] ++ gE) ++ hM), 0)
17701773 }
17711774 }
17721775 }
17731776
17741777
17751778
1776-@Callable(ef)
1777-func splitByGlobalWeightsREADONLY (fB) = $Tuple2(nil, da(fB))
1779+@Callable(eg)
1780+func splitByGlobalWeightsREADONLY (fC) = $Tuple2(nil, db(fC))
17781781
17791782
17801783
1781-@Callable(ef)
1782-func splitByGlobalAndLocalWeightsREADONLY (hV,hW,ej) = {
1783- let eb = ei(ej)
1784- $Tuple2(nil, $Tuple2(da(hV), cL(hW, eb)))
1784+@Callable(eg)
1785+func splitByGlobalAndLocalWeightsREADONLY (hW,hX,ek) = {
1786+ let ec = ej(ek)
1787+ $Tuple2(nil, $Tuple2(db(hW), cM(hX, ec)))
17851788 }
17861789
17871790
17881791
1789-@Callable(ef)
1790-func getBackpackREADONLY (bx) = $Tuple2(nil, makeString(eE(bC(bx)), ":"))
1792+@Callable(eg)
1793+func getBackpackREADONLY (by) = $Tuple2(nil, makeString(eF(bD(by)), ":"))
17911794
17921795
17931796
1794-@Callable(ef)
1795-func getWarehouseREADONLY (br) = {
1796- let fv = value(assetInfo(fromBase58String(br)))
1797- let eZ = (ai(split(fv.description, "_")[Q]) / o)
1798- let fa = valueOrElse(getInteger(bs(br)), 0)
1799- $Tuple2(nil, makeString_2C(eX(bq(br), eZ, fa), ":"))
1797+@Callable(eg)
1798+func getWarehouseREADONLY (bs) = {
1799+ let fw = value(assetInfo(fromBase58String(bs)))
1800+ let fa = (ai(split(fw.description, "_")[Q]) / o)
1801+ let fb = valueOrElse(getInteger(bt(bs)), 0)
1802+ $Tuple2(nil, makeString_2C(eY(br(bs), fa, fb), ":"))
18001803 }
18011804
18021805
18031806
1804-@Callable(ef)
1805-func saveLastTx () = if (!(containsElement([M, K, N, O], ef.caller)))
1807+@Callable(eg)
1808+func saveLastTx () = if (!(containsElement([M, K, N, O], eg.caller)))
18061809 then throw("Access denied")
1807- else $Tuple2(gh(ef), 42)
1810+ else $Tuple2(gi(eg), 42)
18081811
18091812
18101813
1811-@Callable(ef)
1812-func updateDuckStats (bx,fT) = if ((ef.caller != K))
1814+@Callable(eg)
1815+func updateDuckStats (by,fU) = if ((eg.caller != K))
18131816 then throw("Access denied")
1814- else fV(bx, fT)
1817+ else fW(by, fU)
18151818
18161819
18171820
1818-@Callable(ef)
1819-func updateAccStats (am,fT) = if (!(containsElement([M, K, O], ef.caller)))
1821+@Callable(eg)
1822+func updateAccStats (am,fU) = if (!(containsElement([M, K, O], eg.caller)))
18201823 then throw("Access denied")
1821- else fW(am, fT)
1824+ else fX(am, fU)
18221825
18231826
18241827
1825-@Callable(ef)
1826-func initDuckTourAttempt (bx) = if ((ef.caller != N))
1828+@Callable(eg)
1829+func initDuckTourAttempt (by) = if ((eg.caller != N))
18271830 then throw("Access denied")
18281831 else {
1829- let hX = bV(bx)
1830- let hY = co(valueOrElse(getInteger(bY(bx)), 0))
1831- let hZ = valueOrElse(getInteger(hX), hY)
1832- let ia = bD(bx)
1833- let fs = valueOrElse(getString(ia), aH)
1834- let ib = valueOrElse(getInteger(N, bH), 0)
1835- let ic = (toString(ib) + "_T_0")
1836- $Tuple2([IntegerEntry(ce(bx), hZ), IntegerEntry(hX, hY), StringEntry(cf(bx), fs), StringEntry(ia, ic)], ic)
1832+ let hY = bW(by)
1833+ let hZ = cp(valueOrElse(getInteger(bZ(by)), 0))
1834+ let ia = valueOrElse(getInteger(hY), hZ)
1835+ let ib = bE(by)
1836+ let ft = valueOrElse(getString(ib), aI)
1837+ let ic = valueOrElse(getInteger(N, bI), 0)
1838+ let id = (toString(ic) + "_T_0")
1839+ $Tuple2([IntegerEntry(cf(by), ia), IntegerEntry(hY, hZ), StringEntry(cg(by), ft), StringEntry(ib, id)], id)
18371840 }
18381841
18391842
18401843
1841-@Callable(ef)
1844+@Callable(eg)
18421845 func breakAttempt () = {
1843- let gD = gh(ef)
1844- let bx = valueOrErrorMessage(getString(bB(toString(ef.caller))), "You don't have a duck staked")
1845- let ia = bD(bx)
1846- let fs = valueOrElse(getString(ia), aH)
1847- if ((split(fs, "_")[bg] != "T"))
1846+ let gE = gi(eg)
1847+ let by = valueOrErrorMessage(getString(bC(toString(eg.caller))), "You don't have a duck staked")
1848+ let ib = bE(by)
1849+ let ft = valueOrElse(getString(ib), aI)
1850+ if ((split(ft, "_")[bh] != "T"))
18481851 then throw("Your duck is not in the tournament")
18491852 else {
1850- let id = getIntegerValue(ce(bx))
1851- let ie = getStringValue(cf(bx))
1852- $Tuple2(((gD :+ IntegerEntry(bV(bx), id)) :+ StringEntry(ia, ie)), fs)
1853+ let ie = getIntegerValue(cf(by))
1854+ let if = getStringValue(cg(by))
1855+ $Tuple2(((gE :+ IntegerEntry(bW(by), ie)) :+ StringEntry(ib, if)), ft)
18531856 }
18541857 }
18551858
18561859
18571860
1858-@Callable(ef)
1859-func breakAttemptCallback () = if ((ef.caller != N))
1861+@Callable(eg)
1862+func breakAttemptCallback () = if ((eg.caller != N))
18601863 then throw("Access denied")
18611864 else {
1862- let bx = valueOrErrorMessage(getString(bB(toString(ef.originCaller))), "You don't have a duck staked")
1863- $Tuple2([IntegerEntry(bV(bx), getIntegerValue(ce(bx))), StringEntry(bD(bx), getStringValue(cf(bx)))], "breakAttemptCallback")
1865+ let by = valueOrErrorMessage(getString(bC(toString(eg.originCaller))), "You don't have a duck staked")
1866+ $Tuple2([IntegerEntry(bW(by), getIntegerValue(cf(by))), StringEntry(bE(by), getStringValue(cg(by)))], "breakAttemptCallback")
18641867 }
18651868
18661869
18671870
1868-@Callable(ef)
1869-func exitTournamentInternal (bx) = if ((ef.caller != this))
1871+@Callable(eg)
1872+func exitTournamentInternal (by) = if ((eg.caller != this))
18701873 then throw("Access denied")
18711874 else {
1872- let id = getIntegerValue(ce(bx))
1873- let ie = getStringValue(cf(bx))
1874- $Tuple2([IntegerEntry(bV(bx), id), StringEntry(bD(bx), ie)], false)
1875+ let ie = getIntegerValue(cf(by))
1876+ let if = getStringValue(cg(by))
1877+ $Tuple2([IntegerEntry(bW(by), ie), StringEntry(bE(by), if)], false)
18751878 }
18761879
18771880
18781881
1879-@Callable(ef)
1880-func processDelivery (bx) = if ((ef.caller != this))
1882+@Callable(eg)
1883+func processDelivery (by) = if ((eg.caller != this))
18811884 then throw("Access denied")
18821885 else {
1883- let am = toString(ef.originCaller)
1884- let if = valueOrElse(getInteger(K, bG), 0)
1885- if ((aJ > if))
1886- then throw(("Delivery is not available, fund=" + an(if, 6)))
1886+ let am = toString(eg.originCaller)
1887+ let ig = valueOrElse(getInteger(K, bH), 0)
1888+ if ((aK > ig))
1889+ then throw(("Delivery is not available, fund=" + ao(ig, 6)))
18871890 else {
1888- let gP = lastBlock.timestamp
1889- let ig = ch(am)
1890- let ih = valueOrElse(getInteger(ci(am)), 0)
1891- let ii = (gP / cu)
1892- let dB = if ((ih == ii))
1893- then valueOrElse(getInteger(ig), 0)
1891+ let gQ = lastBlock.timestamp
1892+ let ih = ci(am)
1893+ let ii = valueOrElse(getInteger(cj(am)), 0)
1894+ let ij = (gQ / cv)
1895+ let dC = if ((ii == ij))
1896+ then valueOrElse(getInteger(ih), 0)
18941897 else 0
1895- let ij = valueOrElse(getInteger(O, cw(am)), 0)
1896- let ik = (aL + (ij / aM))
1897- if ((dB >= ik))
1898- then throw((("You already used " + toString(ik)) + " delivery attempts for today"))
1898+ let ik = valueOrElse(getInteger(O, cx(am)), 0)
1899+ let il = (aM + (ik / aN))
1900+ if ((dC >= il))
1901+ then throw((("You already used " + toString(il)) + " delivery attempts for today"))
18991902 else {
1900- let il = cg(bx)
1901- let im = invoke(K, "sendDeliveryReward", [am], nil)
1902- $Tuple2([IntegerEntry(ig, (dB + 1)), IntegerEntry(ci(am), ii), IntegerEntry(il, (valueOrElse(getInteger(il), 0) + 1))], im)
1903+ let im = ch(by)
1904+ let in = invoke(K, "sendDeliveryReward", [am], nil)
1905+ $Tuple2([IntegerEntry(ih, (dC + 1)), IntegerEntry(cj(am), ij), IntegerEntry(im, (valueOrElse(getInteger(im), 0) + 1))], in)
19031906 }
19041907 }
19051908 }
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = false
55
66 let b = false
77
88 let c = 86400000
99
1010 let d = 1731279600000
1111
1212 let e = take(drop(this.bytes, 1), 1)
1313
1414 let f = {
1515 let g = e
1616 if ((base58'2W' == g))
1717 then if (a)
1818 then base58'CWsMtTZC5BjjoL4Q1ayW4Wwb1ehGACQB6DrKyPgotKfm'
1919 else base58'6LfPuKJjLgekmncBhMg2LZyMTNVzZBccXR28ySXm9uXD'
2020 else if ((base58'2T' == g))
2121 then base58'6LfPuKJjLgekmncBhMg2LZyMTNVzZBccXR28ySXm9uXD'
2222 else throw("Unknown chain")
2323 }
2424
2525 let h = {
2626 let g = e
2727 if ((base58'2W' == g))
2828 then base58'9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi'
2929 else if ((base58'2T' == g))
3030 then base58'6mWwf9mZBjVgkC54idpyaZLQfAosD914wT8fGf2iiY63'
3131 else throw("Unknown chain")
3232 }
3333
3434 let i = {
3535 let g = e
3636 if ((base58'2W' == g))
3737 then "3PQCuvFbvh4LkPUnrnU1z3jnbA1p9m3WNhv"
3838 else if ((base58'2T' == g))
3939 then "3MumkGGztCKAXpWDqxkddofqXSUbqQkvSJy"
4040 else throw("Unknown chain")
4141 }
4242
4343 let j = {
4444 let g = e
4545 if ((base58'2W' == g))
4646 then "3P4UH3T9nXpMNpUmSmQjPmEz3G85t3zn6eA"
4747 else if ((base58'2T' == g))
4848 then "3NBPx1Fciu3JQNEGZ21jSnTdutLNGGBUSXh"
4949 else throw("Unknown chain")
5050 }
5151
5252 let k = {
5353 let g = e
5454 if ((base58'2W' == g))
5555 then c
5656 else if ((base58'2T' == g))
5757 then 60000
5858 else throw("Unknown chain")
5959 }
6060
6161 let l = "__"
6262
6363 let m = 1000000
6464
6565 let n = 100000000
6666
6767 let o = 25
6868
6969 let p = 100
7070
7171 let q = 225
7272
7373 let r = 400
7474
7575 let s = 625
7676
7777 let t = [0, 1, 2, 3, 4, 5]
7878
7979 func u (v,w) = valueOrErrorMessage(getString(v, w), makeString(["mandatory ", toString(v), ".", w, " is not defined"], ""))
8080
8181
8282 let x = 2
8383
8484 let y = 3
8585
8686 let z = 4
8787
8888 let A = 7
8989
9090 let B = 8
9191
9292 func C () = "%s__restConfig"
9393
9494
9595 func D () = "%s__restAddr"
9696
9797
9898 func E (F) = split_4C(u(F, C()), l)
9999
100100
101101 func G (H,I) = valueOrErrorMessage(addressFromString(H[I]), ("Rest cfg doesn't contain address at index " + toString(I)))
102102
103103
104104 let J = addressFromStringValue(valueOrElse(getString(this, D()), i))
105105
106106 let H = E(J)
107107
108108 let K = G(H, x)
109109
110110 let L = G(H, y)
111111
112112 let M = G(H, z)
113113
114114 let N = G(H, A)
115115
116116 let O = G(H, B)
117117
118118 let P = 0
119119
120120 let Q = 1
121121
122122 let R = 2
123123
124124 let S = 3
125125
126126 let T = "acresAssetId"
127127
128128 let U = valueOrErrorMessage(getBinary(O, T), "ACRES is not issued yet")
129129
130130 let V = 2
131131
132132 func W (v) = ("finishBlockFor_" + v)
133133
134134
135135 func X () = "resTypesProportions"
136136
137137
138138 func Y (Z) = ("resTypesByContinent_" + Z)
139139
140140
141141 func aa (ab) = ("stakedLandsByOwner_" + ab)
142142
143143
144144 func ac (ab) = ("stakedPiecesByOwner_" + ab)
145145
146146
147147 func ad (ae) = {
148148 let g = ae
149149 if ($isInstanceOf(g, "Int"))
150150 then {
151151 let af = g
152152 af
153153 }
154154 else throw("fail to cast into Int")
155155 }
156156
157157
158158 func ag (ae) = {
159159 let g = ae
160160 if ($isInstanceOf(g, "List[Any]"))
161161 then {
162162 let ah = g
163163 ah
164164 }
165165 else throw("fail to cast into List[Any]")
166166 }
167167
168168
169169 func ai (aj) = {
170170 let g = aj
171171 if (("S" == g))
172172 then o
173173 else if (("M" == g))
174174 then p
175175 else if (("L" == g))
176176 then q
177177 else if (("XL" == g))
178178 then r
179179 else if (("XXL" == g))
180180 then s
181181 else throw("Unknown land size")
182182 }
183183
184184
185185 func ak () = "contractsBlocked"
186186
187187
188-func al (am) = ("lastTxIdByUser_" + am)
188+func al (am) = ("lastWeekTxIdByUser_" + am)
189189
190190
191-func an (ao,ap) = {
192- let aq = pow(10, 0, ap, 0, 0, DOWN)
193- let ar = toString((ao % aq))
194- let as = drop(toString(aq), (1 + size(ar)))
195- (((toString((ao / aq)) + ".") + as) + ar)
191+func an (am) = ("curWeekTxIdByUser_" + am)
192+
193+
194+func ao (ap,aq) = {
195+ let ar = pow(10, 0, aq, 0, 0, DOWN)
196+ let as = toString((ap % ar))
197+ let at = drop(toString(ar), (1 + size(as)))
198+ (((toString((ap / ar)) + ".") + at) + as)
196199 }
197200
198201
199-func at (au,av,aw) = if ((0 >= au))
202+func au (av,aw,ax) = if ((0 >= av))
200203 then throw("maxValue should be > 0")
201204 else {
202- let ax = sha256_16Kb((av + aw))
203- (toInt(ax) % au)
205+ let ay = sha256_16Kb((aw + ax))
206+ (toInt(ay) % av)
204207 }
205208
206209
207-func ay () = min([lastBlock.timestamp, d])
210+func az () = min([lastBlock.timestamp, d])
208211
209212
210-let az = "LAND"
213+let aA = "LAND"
211214
212-let aA = "DUCK"
215+let aB = "DUCK"
213216
214-let aB = "ROBO"
217+let aC = "ROBO"
215218
216-let aC = "PRESALE"
219+let aD = "PRESALE"
217220
218-let aD = 6
221+let aE = 6
219222
220-let aE = 25
223+let aF = 25
221224
222-let aF = 3456000
225+let aG = 3456000
223226
224-let aG = 10000000000
227+let aH = 10000000000
225228
226-let aH = "Africa_F_Africa"
229+let aI = "Africa_F_Africa"
227230
228-let aI = 39637
231+let aJ = 39637
229232
230-let aJ = 50000
233+let aK = 50000
231234
232-let aK = 10
235+let aL = 10
233236
234-let aL = 0
237+let aM = 0
235238
236-let aM = 200000000
239+let aN = 200000000
237240
238-let aN = ["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"]
241+let aO = ["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"]
239242
240-let aO = ["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_"]
243+let aP = ["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_"]
241244
242-let aP = 6
245+let aQ = 6
243246
244-let aQ = 9
245-
246-let aR = 10
247+let aR = 9
247248
248249 let aS = 10
249250
250-let aT = 0
251+let aT = 10
251252
252-let aU = 1
253+let aU = 0
253254
254-let aV = 2
255+let aV = 1
255256
256-let aW = 3
257+let aW = 2
257258
258-let aX = 4
259+let aX = 3
259260
260-let aY = 0
261+let aY = 4
261262
262-let aZ = 1
263+let aZ = 0
263264
264-let ba = 2
265+let ba = 1
265266
266-let bb = 3
267+let bb = 2
267268
268-let bc = 0
269+let bc = 3
269270
270-let bd = 1
271+let bd = 0
271272
272-let be = 2
273+let be = 1
273274
274-let bf = 3
275+let bf = 2
275276
276-let bg = 1
277+let bg = 3
277278
278-let bh = 2
279+let bh = 1
279280
280-func bi (bj) = ("no_" + bj)
281+let bi = 2
282+
283+func bj (bk) = ("no_" + bk)
281284
282285
283-func bk (bj) = ("lcna_" + bj)
286+func bl (bk) = ("lcna_" + bk)
284287
285288
286-func bl (bj) = ("st_" + bj)
289+func bm (bk) = ("st_" + bk)
287290
288291
289-func bm (bn,bj) = makeString(["las", bn, bj], "_")
292+func bn (bo,bk) = makeString(["las", bo, bk], "_")
290293
291294
292-func bo (bp,bj,ab) = ((((("sttao_" + bp) + "_") + bj) + "_") + ab)
295+func bp (bq,bk,ab) = ((((("sttao_" + bq) + "_") + bk) + "_") + ab)
293296
294297
295-func bq (br) = ("wh_" + br)
298+func br (bs) = ("wh_" + bs)
296299
297300
298-func bs (bj) = ("infraLevel_" + bj)
301+func bt (bk) = ("infraLevel_" + bk)
299302
300303
301-func bt (bj) = ("duckCustomNameByAssetId_" + bj)
304+func bu (bk) = ("duckCustomNameByAssetId_" + bk)
302305
303306
304-func bu (am) = ("accountCustomNameByAddr_" + am)
307+func bv (am) = ("accountCustomNameByAddr_" + am)
305308
306309
307-func bv (am) = ("accRefBy_" + am)
310+func bw (am) = ("accRefBy_" + am)
308311
309312
310-func bw (bx) = ("onboardArtActivatedOnDuck_" + bx)
313+func bx (by) = ("onboardArtActivatedOnDuck_" + by)
311314
312315
313-func by (am) = ("onboardArtActivatedDuckBy_" + am)
316+func bz (am) = ("onboardArtActivatedDuckBy_" + am)
314317
315318
316-func bz (am) = ("accReferrals_" + am)
319+func bA (am) = ("accReferrals_" + am)
317320
318321
319-func bA (bj) = ("duckOwner_" + bj)
322+func bB (bk) = ("duckOwner_" + bk)
320323
321324
322-func bB (ab) = ("stakedDuckByOwner_" + ab)
325+func bC (ab) = ("stakedDuckByOwner_" + ab)
323326
324327
325-func bC (bx) = ("backPack_" + bx)
328+func bD (by) = ("backPack_" + by)
326329
327330
328-func bD (bx) = ("duckLocation_" + bx)
331+func bE (by) = ("duckLocation_" + by)
329332
330333
331-func bE (bF) = ("%s%s__userGwlReleaseTime__" + bF)
334+func bF (bG) = ("%s%s__userGwlReleaseTime__" + bG)
332335
333336
334-let bG = "deliveryFund"
337+let bH = "deliveryFund"
335338
336-let bH = "%s__lastTourId"
339+let bI = "%s__lastTourId"
337340
338-let bI = 100000000
341+let bJ = 100000000
339342
340-let bJ = 3200
343+let bK = 3200
341344
342-let bK = 4000
345+let bL = 4000
343346
344-let bL = 3
347+let bM = 3
345348
346-let bM = ["Strength", "Accuracy", "Intellect", "Endurance", "Dexterity", "Level", "Health"]
349+let bN = ["Strength", "Accuracy", "Intellect", "Endurance", "Dexterity", "Level", "Health"]
347350
348-let bN = 0
351+let bO = 0
349352
350-let bO = 1
353+let bP = 1
351354
352-let bP = 2
355+let bQ = 2
353356
354-let bQ = 3
357+let bR = 3
355358
356-let bR = 4
357-
358-let bS = 2
359+let bS = 4
359360
360361 let bT = 2
361362
362-let bU = 30
363+let bU = 2
363364
364-func bV (bx) = ("duckHealth_" + bx)
365+let bV = 30
366+
367+func bW (by) = ("duckHealth_" + by)
365368
366369
367-func bW (bx) = ("duckChars_" + bx)
370+func bX (by) = ("duckChars_" + by)
368371
369372
370-func bX (bx) = ("duckXP_" + bx)
373+func bY (by) = ("duckXP_" + by)
371374
372375
373-func bY (bx) = ("duckLevel_" + bx)
376+func bZ (by) = ("duckLevel_" + by)
374377
375378
376-func bZ (bx) = ("duckFreePoints_" + bx)
379+func ca (by) = ("duckFreePoints_" + by)
377380
378381
379-func ca (bx) = ("duckEquipment_" + bx)
382+func cb (by) = ("duckEquipment_" + by)
380383
381384
382-func cb (am) = ("userXP_" + am)
385+func cc (am) = ("userXP_" + am)
383386
384387
385-func cc (am) = ("userLevel_" + am)
388+func cd (am) = ("userLevel_" + am)
386389
387390
388-func cd (am) = ("userFreePoints_" + am)
391+func ce (am) = ("userFreePoints_" + am)
389392
390393
391-func ce (bx) = ("savedHealth_" + bx)
394+func cf (by) = ("savedHealth_" + by)
392395
393396
394-func cf (bx) = ("savedLocation_" + bx)
397+func cg (by) = ("savedLocation_" + by)
395398
396399
397-func cg (bx) = ("totalDeliveryCountByDuck_" + bx)
400+func ch (by) = ("totalDeliveryCountByDuck_" + by)
398401
399402
400-func ch (am) = ("userDeliveryCount_" + am)
403+func ci (am) = ("userDeliveryCount_" + am)
401404
402405
403-func ci (am) = ("userLastDeliveryDay_" + am)
406+func cj (am) = ("userLastDeliveryDay_" + am)
404407
405408
406-let cj = 10000
407-
408-let ck = 1000000
409+let ck = 10000
409410
410411 let cl = 1000000
411412
412-func cm (cn) = fraction(bJ, pow(cn, 4, bK, 4, 4, DOWN), bI)
413+let cm = 1000000
414+
415+func cn (co) = fraction(bK, pow(co, 4, bL, 4, 4, DOWN), bJ)
413416
414417
415-func co (cp) = (100 + cp)
418+func cp (cq) = (100 + cq)
416419
417420
418-func cq (cr,cs) = {
419- let ct = cm(cs)
420-[ct, (bL * (ct - cr))]
421+func cr (cs,ct) = {
422+ let cu = cn(ct)
423+[cu, (bM * (cu - cs))]
421424 }
422425
423426
424-let cu = 86400000
427+let cv = 86400000
425428
426-func cv (am) = ("lastArbTimeUser_" + am)
429+func cw (am) = ("lastArbTimeUser_" + am)
427430
428431
429-func cw (am) = ("acresStakedAmountByUser_" + am)
432+func cx (am) = ("acresStakedAmountByUser_" + am)
430433
431434
432-let cx = 5000000
435+let cy = 5000000
433436
434-let cy = 50
437+let cz = 50
435438
436-let cz = 500
439+let cA = 500
437440
438-func cA (cB) = ("lcn_" + cB)
441+func cB (cC) = ("lcn_" + cC)
439442
440443
441-func cC (bj,ab) = ((("ilao_" + bj) + "_") + ab)
444+func cD (bk,ab) = ((("ilao_" + bk) + "_") + ab)
442445
443446
444-func cD (cE) = ("lo_" + cE)
447+func cE (cF) = ("lo_" + cF)
445448
446449
447-func cF (cB) = ("duckByCustomName_" + cB)
450+func cG (cC) = ("duckByCustomName_" + cC)
448451
449452
450-func cG (cB) = ("accountByCustomName_" + cB)
453+func cH (cC) = ("accountByCustomName_" + cC)
451454
452455
453-func cH () = "oldiesList"
456+func cI () = "oldiesList"
454457
455458
456-let cI = 0
459+let cJ = 0
457460
458-let cJ = 1
461+let cK = 1
459462
460-let cK = 2
463+let cL = 2
461464
462-func cL (cM,cN) = {
463- let cO = (((((cN[0] + cN[1]) + cN[2]) + cN[3]) + cN[4]) + cN[5])
464- if ((0 >= cO))
465+func cM (cN,cO) = {
466+ let cP = (((((cO[0] + cO[1]) + cO[2]) + cO[3]) + cO[4]) + cO[5])
467+ if ((0 >= cP))
465468 then throw("Zero weights sum")
466469 else {
467- let cP = fraction(cM, m, cO)
468- func cQ (cR,cS) = (cR :+ fraction(cS, cP, m))
470+ let cQ = fraction(cN, m, cP)
471+ func cR (cS,cT) = (cS :+ fraction(cT, cQ, m))
469472
470- let cT = cN
471- let cU = size(cT)
472- let cV = nil
473- func cW (cX,cY) = if ((cY >= cU))
474- then cX
475- else cQ(cX, cT[cY])
473+ let cU = cO
474+ let cV = size(cU)
475+ let cW = nil
476+ func cX (cY,cZ) = if ((cZ >= cV))
477+ then cY
478+ else cR(cY, cU[cZ])
476479
477- func cZ (cX,cY) = if ((cY >= cU))
478- then cX
480+ func da (cY,cZ) = if ((cZ >= cV))
481+ then cY
479482 else throw("List size exceeds 6")
480483
481- cZ(cW(cW(cW(cW(cW(cW(cV, 0), 1), 2), 3), 4), 5), 6)
484+ da(cX(cX(cX(cX(cX(cX(cW, 0), 1), 2), 3), 4), 5), 6)
482485 }
483486 }
484487
485488
486-func da (cM) = {
487- let db = split(value(getString(X())), "_")
488- if ((size(db) != aD))
489+func db (cN) = {
490+ let dc = split(value(getString(X())), "_")
491+ if ((size(dc) != aE))
489492 then throw("Wrong proportions data")
490493 else {
491- let dc = [parseIntValue(db[0]), parseIntValue(db[1]), parseIntValue(db[2]), parseIntValue(db[3]), parseIntValue(db[4]), parseIntValue(db[5])]
492- cL(cM, dc)
494+ let dd = [parseIntValue(dc[0]), parseIntValue(dc[1]), parseIntValue(dc[2]), parseIntValue(dc[3]), parseIntValue(dc[4]), parseIntValue(dc[5])]
495+ cM(cN, dd)
493496 }
494497 }
495498
496499
497-func dd (de) = {
498- let df = if ((de == ""))
500+func de (df) = {
501+ let dg = if ((df == ""))
499502 then nil
500- else split_4C(de, "_")
501- func dg (cR,dh) = {
502- let di = (size(cR) / 8)
503- let dj = if ((size(df) > di))
504- then parseIntValue(df[di])
503+ else split_4C(df, "_")
504+ func dh (cS,di) = {
505+ let dj = (size(cS) / 8)
506+ let dk = if ((size(dg) > dj))
507+ then parseIntValue(dg[dj])
505508 else 0
506- (cR + toBytes(dj))
509+ (cS + toBytes(dk))
507510 }
508511
509- let cT = aO
510- let cU = size(cT)
511- let cV = base58''
512- func cW (cX,cY) = if ((cY >= cU))
513- then cX
514- else dg(cX, cT[cY])
512+ let cU = aP
513+ let cV = size(cU)
514+ let cW = base58''
515+ func cX (cY,cZ) = if ((cZ >= cV))
516+ then cY
517+ else dh(cY, cU[cZ])
515518
516- func cZ (cX,cY) = if ((cY >= cU))
517- then cX
519+ func da (cY,cZ) = if ((cZ >= cV))
520+ then cY
518521 else throw("List size exceeds 50")
519522
520- cZ(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50)
523+ da(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cW, 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)
521524 }
522525
523526
524-func dk (dl) = {
525- func dm (cR,dh) = {
526- let di = size(cR)
527- let dn = take(drop(dl, (8 * di)), 8)
528- (cR :+ toString(toInt(dn)))
527+func dl (dm) = {
528+ func dn (cS,di) = {
529+ let dj = size(cS)
530+ let do = take(drop(dm, (8 * dj)), 8)
531+ (cS :+ toString(toInt(do)))
529532 }
530533
531534 makeString_2C({
532- let cT = aO
533- let cU = size(cT)
534- let cV = nil
535- func cW (cX,cY) = if ((cY >= cU))
536- then cX
537- else dm(cX, cT[cY])
535+ let cU = aP
536+ let cV = size(cU)
537+ let cW = nil
538+ func cX (cY,cZ) = if ((cZ >= cV))
539+ then cY
540+ else dn(cY, cU[cZ])
538541
539- func cZ (cX,cY) = if ((cY >= cU))
540- then cX
542+ func da (cY,cZ) = if ((cZ >= cV))
543+ then cY
541544 else throw("List size exceeds 50")
542545
543- cZ(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50)
546+ da(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cW, 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)
544547 }, "_")
545548 }
546549
547550
548-func do (dp,dq) = {
549- func dr (cR,di) = {
550- let ds = if ((size(dp) > (7 + di)))
551- then dp[(7 + di)]
551+func dp (dq,dr) = {
552+ func ds (cS,dj) = {
553+ let dt = if ((size(dq) > (7 + dj)))
554+ then dq[(7 + dj)]
552555 else 0
553- if ((parseIntValue(dq[di]) > (dp[di] + ds)))
554- then throw(("Requirement not satisfied: " + bM[di]))
556+ if ((parseIntValue(dr[dj]) > (dq[dj] + dt)))
557+ then throw(("Requirement not satisfied: " + bN[dj]))
555558 else true
556559 }
557560
558- let cT = [0, 1, 2, 3, 4, 5, 6]
559- let cU = size(cT)
560- let cV = false
561- func cW (cX,cY) = if ((cY >= cU))
562- then cX
563- else dr(cX, cT[cY])
561+ let cU = [0, 1, 2, 3, 4, 5, 6]
562+ let cV = size(cU)
563+ let cW = false
564+ func cX (cY,cZ) = if ((cZ >= cV))
565+ then cY
566+ else ds(cY, cU[cZ])
564567
565- func cZ (cX,cY) = if ((cY >= cU))
566- then cX
568+ func da (cY,cZ) = if ((cZ >= cV))
569+ then cY
567570 else throw("List size exceeds 7")
568571
569- cZ(cW(cW(cW(cW(cW(cW(cW(cV, 0), 1), 2), 3), 4), 5), 6), 7)
572+ da(cX(cX(cX(cX(cX(cX(cX(cW, 0), 1), 2), 3), 4), 5), 6), 7)
570573 }
571574
572575
573-func dt (du,df,dv,dw,dx,dy,dp) = {
574- let dz = split(du, ":")
575- if ((size(dz) != 2))
576+func du (dv,dg,dw,dx,dy,dz,dq) = {
577+ let dA = split(dv, ":")
578+ if ((size(dA) != 2))
576579 then throw("Incorrect format, should be index:amount")
577- else if (if (!(dv))
578- then (size(dz[0]) != 2)
580+ else if (if (!(dw))
581+ then (size(dA[0]) != 2)
579582 else false)
580583 then throw("Product idx should be 2 digits, zero padded")
581584 else {
582- let dA = parseIntValue(dz[0])
583- let dB = parseIntValue(dz[1])
584- if (if ((0 > dA))
585+ let dB = parseIntValue(dA[0])
586+ let dC = parseIntValue(dA[1])
587+ if (if ((0 > dB))
585588 then true
586- else (dA >= size(aO)))
589+ else (dB >= size(aP)))
587590 then throw("Unknown product idx")
588- else if ((0 > dB))
591+ else if ((0 > dC))
589592 then throw("Count can't be negative")
590- else if ((dB > bU))
591- then throw(((("Can't put more than " + toString(bU)) + " of ") + aN[dA]))
592- else if ((dB == 0))
593- then $Tuple2(df, false)
593+ else if ((dC > bV))
594+ then throw(((("Can't put more than " + toString(bV)) + " of ") + aO[dB]))
595+ else if ((dC == 0))
596+ then $Tuple2(dg, false)
594597 else {
595- let dC = take(df, (8 * dA))
596- let dj = toInt(take(drop(df, (8 * dA)), 8))
597- let dD = drop(df, (8 * (dA + 1)))
598- let dh = split(aO[dA], "_")
599- if (if (!(dv))
600- then (dB > dj)
598+ let dD = take(dg, (8 * dB))
599+ let dk = toInt(take(drop(dg, (8 * dB)), 8))
600+ let dE = drop(dg, (8 * (dB + 1)))
601+ let di = split(aP[dB], "_")
602+ if (if (!(dw))
603+ then (dC > dk)
601604 else false)
602- then throw(((((("You have " + toString(dj)) + " of ") + aN[dA]) + ", but tried to use ") + toString(dB)))
605+ then throw(((((("You have " + toString(dk)) + " of ") + aO[dB]) + ", but tried to use ") + toString(dC)))
603606 else {
604- let dE = if (if (!(dv))
605- then do(dp, split(dh[aQ], ","))
607+ let dF = if (if (!(dw))
608+ then dp(dq, split(di[aR], ","))
606609 else false)
607610 then {
608- let dF = dh[aR]
609- if ((dF == ""))
611+ let dG = di[aS]
612+ if ((dG == ""))
610613 then throw("Item cannot be equipped")
611614 else {
612- let dG = parseIntValue(dF)
613- let dH = (dG / 100)
614- if ((dw != dH))
615+ let dH = parseIntValue(dG)
616+ let dI = (dH / 100)
617+ if ((dx != dI))
615618 then throw("Segment incompatible")
616619 else {
617- let dI = ((dG % 100) / 10)
618- if ((dx != dI))
620+ let dJ = ((dH % 100) / 10)
621+ if ((dy != dJ))
619622 then throw("Slot incompatible")
620623 else {
621- let dJ = (dG % 10)
622- if (if ((dy != 0))
623- then (dJ > 1)
624+ let dK = (dH % 10)
625+ if (if ((dz != 0))
626+ then (dK > 1)
624627 else false)
625628 then throw("Big items should occupy slot 0")
626- else (dJ > 1)
629+ else (dK > 1)
627630 }
628631 }
629632 }
630633 }
631634 else false
632- $Tuple2(((dC + toBytes((dj + (if (dv)
633- then dB
634- else -(dB))))) + dD), dE)
635+ $Tuple2(((dD + toBytes((dk + (if (dw)
636+ then dC
637+ else -(dC))))) + dE), dF)
635638 }
636639 }
637640 }
638641 }
639642
640643
641-func dK (dL,dM,dv,dw,dx,dN) = if ((dL != ""))
644+func dL (dM,dN,dw,dx,dy,dO) = if ((dM != ""))
642645 then {
643- let dO = split(dL, ",")
644- if ((size(dO) > bT))
646+ let dP = split(dM, ",")
647+ if ((size(dP) > bU))
645648 then throw("Wrong slots format")
646649 else {
647- let dP = dO[0]
648- let dQ = if ((size(dO) > 1))
649- then dO[1]
650+ let dQ = dP[0]
651+ let dR = if ((size(dP) > 1))
652+ then dP[1]
650653 else ""
651- if (if ((dP == ""))
652- then (dQ == "")
654+ if (if ((dQ == ""))
655+ then (dR == "")
653656 else false)
654- then dM
657+ then dN
655658 else {
656- let dR = if ((dP != ""))
657- then dt(dP, dM, dv, dw, dx, 0, dN)
658- else $Tuple2(dM, false)
659- if ((dQ != ""))
660- then if (dR._2)
659+ let dS = if ((dQ != ""))
660+ then du(dQ, dN, dw, dx, dy, 0, dO)
661+ else $Tuple2(dN, false)
662+ if ((dR != ""))
663+ then if (dS._2)
661664 then throw("Big item already occupies slot")
662- else dt(dQ, dR._1, dv, dw, dx, 1, dN)._1
663- else dR._1
665+ else du(dR, dS._1, dw, dx, dy, 1, dO)._1
666+ else dS._1
664667 }
665668 }
666669 }
667- else dM
670+ else dN
668671
669672
670-func dS (dT,dU,dv,dN) = {
671- func dw (cR,dV) = {
672- let di = cR._1
673- let dx = split(dV, ";")
674- if ((size(dx) != bS))
673+func dT (dU,dV,dw,dO) = {
674+ func dx (cS,dW) = {
675+ let dj = cS._1
676+ let dy = split(dW, ";")
677+ if ((size(dy) != bT))
675678 then throw("Wrong segment format")
676679 else {
677- let dW = dx[0]
678- let dX = dx[1]
679- if (if ((dW == ""))
680- then (dX == "")
680+ let dX = dy[0]
681+ let dY = dy[1]
682+ if (if ((dX == ""))
683+ then (dY == "")
681684 else false)
682- then $Tuple2((di + 1), cR._2)
685+ then $Tuple2((dj + 1), cS._2)
683686 else {
684- let dY = dK(dW, cR._2, dv, di, 0, dN)
685- $Tuple2((di + 1), dK(dX, dY, dv, di, 1, dN))
687+ let dZ = dL(dX, cS._2, dw, dj, 0, dO)
688+ $Tuple2((dj + 1), dL(dY, dZ, dw, dj, 1, dO))
686689 }
687690 }
688691 }
689692
690-( let cT = dT
691- let cU = size(cT)
692- let cV = $Tuple2(0, dU)
693- func cW (cX,cY) = if ((cY >= cU))
694- then cX
695- else dw(cX, cT[cY])
693+( let cU = dU
694+ let cV = size(cU)
695+ let cW = $Tuple2(0, dV)
696+ func cX (cY,cZ) = if ((cZ >= cV))
697+ then cY
698+ else dx(cY, cU[cZ])
696699
697- func cZ (cX,cY) = if ((cY >= cU))
698- then cX
700+ func da (cY,cZ) = if ((cZ >= cV))
701+ then cY
699702 else throw("List size exceeds 6")
700703
701- cZ(cW(cW(cW(cW(cW(cW(cV, 0), 1), 2), 3), 4), 5), 6))._2
704+ da(cX(cX(cX(cX(cX(cX(cW, 0), 1), 2), 3), 4), 5), 6))._2
702705 }
703706
704707
705-func dZ (ea,eb,ec,ed) = if ((size(ea) != aD))
708+func ea (eb,ec,ed,ee) = if ((size(eb) != aE))
706709 then throw("Wrong proportions data")
707710 else {
708- func ee (cR,ef) = {
709- let eg = (parseIntValue(ea[ef]) + ((ed * eb[ef]) * ec))
710- if ((0 > eg))
711- then throw(((((((("Panic! Pieces of type=" + toString(ef)) + ", sign=") + toString(ed)) + ", terrainCounts[i]=") + toString(eb[ef])) + ", landSizeIndex=") + toString(ec)))
712- else (cR :+ toString(eg))
711+ func ef (cS,eg) = {
712+ let eh = (parseIntValue(eb[eg]) + ((ee * ec[eg]) * ed))
713+ if ((0 > eh))
714+ then throw(((((((("Panic! Pieces of type=" + toString(eg)) + ", sign=") + toString(ee)) + ", terrainCounts[i]=") + toString(ec[eg])) + ", landSizeIndex=") + toString(ed)))
715+ else (cS :+ toString(eh))
713716 }
714717
715- let cT = t
716- let cU = size(cT)
717- let cV = nil
718- func cW (cX,cY) = if ((cY >= cU))
719- then cX
720- else ee(cX, cT[cY])
718+ let cU = t
719+ let cV = size(cU)
720+ let cW = nil
721+ func cX (cY,cZ) = if ((cZ >= cV))
722+ then cY
723+ else ef(cY, cU[cZ])
721724
722- func cZ (cX,cY) = if ((cY >= cU))
723- then cX
725+ func da (cY,cZ) = if ((cZ >= cV))
726+ then cY
724727 else throw("List size exceeds 6")
725728
726- cZ(cW(cW(cW(cW(cW(cW(cV, 0), 1), 2), 3), 4), 5), 6)
729+ da(cX(cX(cX(cX(cX(cX(cW, 0), 1), 2), 3), 4), 5), 6)
727730 }
728731
729732
730-func eh (eb,ec,ed) = {
731- let ea = split(valueOrElse(getString(X()), "0_0_0_0_0_0"), "_")
732- makeString(dZ(ea, eb, ec, ed), "_")
733+func ei (ec,ed,ee) = {
734+ let eb = split(valueOrElse(getString(X()), "0_0_0_0_0_0"), "_")
735+ makeString(ea(eb, ec, ed, ee), "_")
733736 }
734737
735738
736-func ei (ej) = [(size(split(ej, "A")) - 1), (size(split(ej, "B")) - 1), (size(split(ej, "C")) - 1), (size(split(ej, "D")) - 1), (size(split(ej, "E")) - 1), (size(split(ej, "F")) - 1)]
739+func ej (ek) = [(size(split(ek, "A")) - 1), (size(split(ek, "B")) - 1), (size(split(ek, "C")) - 1), (size(split(ek, "D")) - 1), (size(split(ek, "E")) - 1), (size(split(ek, "F")) - 1)]
737740
738741
739-func ek (el,eb,em,ec,en) = {
740- func eo (cR,ef) = {
741- let ep = ((fraction(em, en, cu) * eb[ef]) * ec)
742- (cR :+ toString((parseIntValue(el[ef]) + ep)))
742+func el (em,ec,en,ed,eo) = {
743+ func ep (cS,eg) = {
744+ let eq = ((fraction(en, eo, cv) * ec[eg]) * ed)
745+ (cS :+ toString((parseIntValue(em[eg]) + eq)))
743746 }
744747
745- let dc = {
746- let cT = t
747- let cU = size(cT)
748- let cV = nil
749- func cW (cX,cY) = if ((cY >= cU))
750- then cX
751- else eo(cX, cT[cY])
748+ let dd = {
749+ let cU = t
750+ let cV = size(cU)
751+ let cW = nil
752+ func cX (cY,cZ) = if ((cZ >= cV))
753+ then cY
754+ else ep(cY, cU[cZ])
752755
753- func cZ (cX,cY) = if ((cY >= cU))
754- then cX
756+ func da (cY,cZ) = if ((cZ >= cV))
757+ then cY
755758 else throw("List size exceeds 6")
756759
757- cZ(cW(cW(cW(cW(cW(cW(cV, 0), 1), 2), 3), 4), 5), 6)
760+ da(cX(cX(cX(cX(cX(cX(cW, 0), 1), 2), 3), 4), 5), 6)
758761 }
759- makeString(dc, "_")
762+ makeString(dd, "_")
760763 }
761764
762765
763-func eq (el,eb,em,ec,en) = {
764- func eo (cR,ef) = {
765- let ep = ((fraction(em, en, cu) * eb[ef]) * ec)
766- let er = (parseIntValue(el[ef]) + ep)
767- $Tuple2((cR._1 :+ er), (cR._2 + er))
766+func er (em,ec,en,ed,eo) = {
767+ func ep (cS,eg) = {
768+ let eq = ((fraction(en, eo, cv) * ec[eg]) * ed)
769+ let es = (parseIntValue(em[eg]) + eq)
770+ $Tuple2((cS._1 :+ es), (cS._2 + es))
768771 }
769772
770- let cT = t
771- let cU = size(cT)
772- let cV = $Tuple2(nil, 0)
773- func cW (cX,cY) = if ((cY >= cU))
774- then cX
775- else eo(cX, cT[cY])
773+ let cU = t
774+ let cV = size(cU)
775+ let cW = $Tuple2(nil, 0)
776+ func cX (cY,cZ) = if ((cZ >= cV))
777+ then cY
778+ else ep(cY, cU[cZ])
776779
777- func cZ (cX,cY) = if ((cY >= cU))
778- then cX
780+ func da (cY,cZ) = if ((cZ >= cV))
781+ then cY
779782 else throw("List size exceeds 6")
780783
781- cZ(cW(cW(cW(cW(cW(cW(cV, 0), 1), 2), 3), 4), 5), 6)
784+ da(cX(cX(cX(cX(cX(cX(cW, 0), 1), 2), 3), 4), 5), 6)
782785 }
783786
784787
785-func es (eb,em,ec,en) = {
786- func eo (cR,et) = {
787- let ep = ((fraction(em, en, cu) * et) * ec)
788- $Tuple2((cR._1 :+ ep), (cR._2 + ep))
788+func et (ec,en,ed,eo) = {
789+ func ep (cS,eu) = {
790+ let eq = ((fraction(en, eo, cv) * eu) * ed)
791+ $Tuple2((cS._1 :+ eq), (cS._2 + eq))
789792 }
790793
791- let cT = eb
792- let cU = size(cT)
793- let cV = $Tuple2(nil, 0)
794- func cW (cX,cY) = if ((cY >= cU))
795- then cX
796- else eo(cX, cT[cY])
794+ let cU = ec
795+ let cV = size(cU)
796+ let cW = $Tuple2(nil, 0)
797+ func cX (cY,cZ) = if ((cZ >= cV))
798+ then cY
799+ else ep(cY, cU[cZ])
797800
798- func cZ (cX,cY) = if ((cY >= cU))
799- then cX
801+ func da (cY,cZ) = if ((cZ >= cV))
802+ then cY
800803 else throw("List size exceeds 6")
801804
802- cZ(cW(cW(cW(cW(cW(cW(cV, 0), 1), 2), 3), 4), 5), 6)
805+ da(cX(cX(cX(cX(cX(cX(cW, 0), 1), 2), 3), 4), 5), 6)
803806 }
804807
805808
806-func eu (ev,ew,ex,ey) = {
807- let ez = ex._1
808- let eA = ex._2
809- if ((eA == 0))
810- then $Tuple2(makeString(ev, "_"), makeString(ew, "_"))
811- else if ((ey >= eA))
809+func ev (ew,ex,ey,ez) = {
810+ let eA = ey._1
811+ let eB = ey._2
812+ if ((eB == 0))
813+ then $Tuple2(makeString(ew, "_"), makeString(ex, "_"))
814+ else if ((ez >= eB))
812815 then {
813- func eB (cR,ef) = (cR :+ toString((parseIntValue(ev[ef]) + ez[ef])))
816+ func eC (cS,eg) = (cS :+ toString((parseIntValue(ew[eg]) + eA[eg])))
814817
815- let dc = {
816- let cT = t
817- let cU = size(cT)
818- let cV = nil
819- func cW (cX,cY) = if ((cY >= cU))
820- then cX
821- else eB(cX, cT[cY])
818+ let dd = {
819+ let cU = t
820+ let cV = size(cU)
821+ let cW = nil
822+ func cX (cY,cZ) = if ((cZ >= cV))
823+ then cY
824+ else eC(cY, cU[cZ])
822825
823- func cZ (cX,cY) = if ((cY >= cU))
824- then cX
826+ func da (cY,cZ) = if ((cZ >= cV))
827+ then cY
825828 else throw("List size exceeds 6")
826829
827- cZ(cW(cW(cW(cW(cW(cW(cV, 0), 1), 2), 3), 4), 5), 6)
830+ da(cX(cX(cX(cX(cX(cX(cW, 0), 1), 2), 3), 4), 5), 6)
828831 }
829- $Tuple2(makeString(dc, "_"), makeString(ew, "_"))
832+ $Tuple2(makeString(dd, "_"), makeString(ex, "_"))
830833 }
831834 else {
832- func eC (cR,ef) = {
833- let eD = fraction(ez[ef], ey, eA)
834- $Tuple2((cR._1 :+ toString((parseIntValue(ev[ef]) + eD))), (cR._2 :+ toString(((parseIntValue(ew[ef]) + ez[ef]) - eD))))
835+ func eD (cS,eg) = {
836+ let eE = fraction(eA[eg], ez, eB)
837+ $Tuple2((cS._1 :+ toString((parseIntValue(ew[eg]) + eE))), (cS._2 :+ toString(((parseIntValue(ex[eg]) + eA[eg]) - eE))))
835838 }
836839
837- let dc = {
838- let cT = t
839- let cU = size(cT)
840- let cV = $Tuple2(nil, nil)
841- func cW (cX,cY) = if ((cY >= cU))
842- then cX
843- else eC(cX, cT[cY])
840+ let dd = {
841+ let cU = t
842+ let cV = size(cU)
843+ let cW = $Tuple2(nil, nil)
844+ func cX (cY,cZ) = if ((cZ >= cV))
845+ then cY
846+ else eD(cY, cU[cZ])
844847
845- func cZ (cX,cY) = if ((cY >= cU))
846- then cX
848+ func da (cY,cZ) = if ((cZ >= cV))
849+ then cY
847850 else throw("List size exceeds 6")
848851
849- cZ(cW(cW(cW(cW(cW(cW(cV, 0), 1), 2), 3), 4), 5), 6)
852+ da(cX(cX(cX(cX(cX(cX(cW, 0), 1), 2), 3), 4), 5), 6)
850853 }
851- $Tuple2(makeString(dc._1, "_"), makeString(dc._2, "_"))
854+ $Tuple2(makeString(dd._1, "_"), makeString(dd._2, "_"))
852855 }
853856 }
854857
855858
856-func eE (eF) = {
857- let eG = split(valueOrElse(getString(eF), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
858-[toString(valueOrElse(parseInt(eG[bc]), 0)), if ((size(split(eG[bd], "_")) == aD))
859- then eG[bd]
860- else "0_0_0_0_0_0", if ((size(split(eG[be], "_")) == aD))
861- then eG[be]
862- else "0_0_0_0_0_0", eG[bf]]
859+func eF (eG) = {
860+ let eH = split(valueOrElse(getString(eG), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
861+[toString(valueOrElse(parseInt(eH[bd]), 0)), if ((size(split(eH[be], "_")) == aE))
862+ then eH[be]
863+ else "0_0_0_0_0_0", if ((size(split(eH[bf], "_")) == aE))
864+ then eH[bf]
865+ else "0_0_0_0_0_0", eH[bg]]
863866 }
864867
865868
866-func eH (eI) = {
867- let dz = split(eI, "_")
868- ((aG * (parseIntValue(dz[1]) + 1)) * parseIntValue(dz[0]))
869+func eI (eJ) = {
870+ let dA = split(eJ, "_")
871+ ((aH * (parseIntValue(dA[1]) + 1)) * parseIntValue(dA[0]))
869872 }
870873
871874
872-func eJ (eK) = {
873- let eL = eK[aW]
874- func eM (cR,eN) = (cR + parseIntValue(eN))
875+func eK (eL) = {
876+ let eM = eL[aX]
877+ func eN (cS,eO) = (cS + parseIntValue(eO))
875878
876- func eO (cR,eN) = {
877- let I = cR._1
878- let eP = (((parseIntValue(eN) + aS) - 1) / aS)
879- $Tuple2((I + 1), (cR._2 + (eP * n)))
879+ func eP (cS,eO) = {
880+ let I = cS._1
881+ let eQ = (((parseIntValue(eO) + aT) - 1) / aT)
882+ $Tuple2((I + 1), (cS._2 + (eQ * n)))
880883 }
881884
882- let eQ = {
883- let cT = split(eK[aU], "_")
884- let cU = size(cT)
885- let cV = 0
886- func cW (cX,cY) = if ((cY >= cU))
887- then cX
888- else eM(cX, cT[cY])
885+ let eR = {
886+ let cU = split(eL[aV], "_")
887+ let cV = size(cU)
888+ let cW = 0
889+ func cX (cY,cZ) = if ((cZ >= cV))
890+ then cY
891+ else eN(cY, cU[cZ])
889892
890- func cZ (cX,cY) = if ((cY >= cU))
891- then cX
893+ func da (cY,cZ) = if ((cZ >= cV))
894+ then cY
892895 else throw("List size exceeds 6")
893896
894- cZ(cW(cW(cW(cW(cW(cW(cV, 0), 1), 2), 3), 4), 5), 6)
897+ da(cX(cX(cX(cX(cX(cX(cW, 0), 1), 2), 3), 4), 5), 6)
895898 }
896- let eR = {
897- let cT = split(eK[aV], "_")
898- let cU = size(cT)
899- let cV = 0
900- func eS (cX,cY) = if ((cY >= cU))
901- then cX
902- else eM(cX, cT[cY])
899+ let eS = {
900+ let cU = split(eL[aW], "_")
901+ let cV = size(cU)
902+ let cW = 0
903+ func eT (cY,cZ) = if ((cZ >= cV))
904+ then cY
905+ else eN(cY, cU[cZ])
903906
904- func eT (cX,cY) = if ((cY >= cU))
905- then cX
907+ func eU (cY,cZ) = if ((cZ >= cV))
908+ then cY
906909 else throw("List size exceeds 6")
907910
908- eT(eS(eS(eS(eS(eS(eS(cV, 0), 1), 2), 3), 4), 5), 6)
911+ eU(eT(eT(eT(eT(eT(eT(cW, 0), 1), 2), 3), 4), 5), 6)
909912 }
910- let eU = if ((eL == ""))
913+ let eV = if ((eM == ""))
911914 then 0
912- else ( let cT = split_4C(eL, "_")
913- let cU = size(cT)
914- let cV = $Tuple2(0, 0)
915- func eV (cX,cY) = if ((cY >= cU))
916- then cX
917- else eO(cX, cT[cY])
915+ else ( let cU = split_4C(eM, "_")
916+ let cV = size(cU)
917+ let cW = $Tuple2(0, 0)
918+ func eW (cY,cZ) = if ((cZ >= cV))
919+ then cY
920+ else eP(cY, cU[cZ])
918921
919- func eW (cX,cY) = if ((cY >= cU))
920- then cX
922+ func eX (cY,cZ) = if ((cZ >= cV))
923+ then cY
921924 else throw("List size exceeds 50")
922925
923- eW(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(cV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50))._2
924- ((eQ + eR) + eU)
926+ eX(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(cW, 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
927+ ((eR + eS) + eV)
925928 }
926929
927930
928-func eX (eY,eZ,fa) = {
929- let eI = ((toString(eZ) + "_") + toString(fa))
930- let fb = eH(eI)
931- let fc = valueOrElse(getString(eY), (eI + ":0_0_0_0_0_0:0_0_0_0_0_0::0"))
932- let fd = split_4C(fc, ":")
933- let fe = eJ(fd)
934- let ff = if ((5 > size(fd)))
935- then makeString(["0", toString(fe), toString((fb - fe)), toString(fb)], "_")
931+func eY (eZ,fa,fb) = {
932+ let eJ = ((toString(fa) + "_") + toString(fb))
933+ let fc = eI(eJ)
934+ let fd = valueOrElse(getString(eZ), (eJ + ":0_0_0_0_0_0:0_0_0_0_0_0::0"))
935+ let fe = split_4C(fd, ":")
936+ let ff = eK(fe)
937+ let fg = if ((5 > size(fe)))
938+ then makeString(["0", toString(ff), toString((fc - ff)), toString(fc)], "_")
936939 else {
937- let fg = split(fd[aX], "_")
938- let fh = parseIntValue(fg[aY])
939- let fi = if ((size(fg) > 1))
940- then parseIntValue(fg[aZ])
941- else fe
942- makeString([toString(fh), toString(fi), toString(((fb - fh) - fi)), toString(fb)], "_")
940+ let fh = split(fe[aY], "_")
941+ let fi = parseIntValue(fh[aZ])
942+ let fj = if ((size(fh) > 1))
943+ then parseIntValue(fh[ba])
944+ else ff
945+ makeString([toString(fi), toString(fj), toString(((fc - fi) - fj)), toString(fc)], "_")
943946 }
944-[fd[aT], if ((size(split(fd[aU], "_")) == aD))
945- then fd[aU]
946- else "0_0_0_0_0_0", if ((size(split(fd[aV], "_")) == aD))
947- then fd[aV]
948- else "0_0_0_0_0_0", fd[aW], ff]
947+[fe[aU], if ((size(split(fe[aV], "_")) == aE))
948+ then fe[aV]
949+ else "0_0_0_0_0_0", if ((size(split(fe[aW], "_")) == aE))
950+ then fe[aW]
951+ else "0_0_0_0_0_0", fe[aX], fg]
949952 }
950953
951954
952-func fj (br,fk) = {
953- let fa = valueOrElse(getInteger(bs(br)), 0)
954- let fl = valueOrElse(getInteger(bm(aC, br)), 0)
955- let fm = (fa / 6)
956- let fn = (fa / 7)
957- ((aF + fraction(aF, ((fa + fm) + (2 * fn)), 5)) + fraction(aF, fl, (fk * 5)))
955+func fk (bs,fl) = {
956+ let fb = valueOrElse(getInteger(bt(bs)), 0)
957+ let fm = valueOrElse(getInteger(bn(aD, bs)), 0)
958+ let fn = (fb / 6)
959+ let fo = (fb / 7)
960+ ((aG + fraction(aG, ((fb + fn) + (2 * fo)), 5)) + fraction(aG, fm, (fl * 5)))
958961 }
959962
960963
961-func fo (am,fp,fq) = {
962- let fr = if ((fp == cI))
963- then $Tuple2(fq, valueOrElse(getString(bB(am)), ""))
964+func fp (am,fq,fr) = {
965+ let fs = if ((fq == cJ))
966+ then $Tuple2(fr, valueOrElse(getString(bC(am)), ""))
964967 else {
965- let bx = valueOrErrorMessage(getString(bB(am)), "You don't have a duck staked")
966- let fs = valueOrElse(getString(bD(bx)), aH)
967- let ft = split(value(fs), "_")
968- if ((ft[bg] != "L"))
969- then throw((("Duck location type is " + ft[bg]) + ", but should be L"))
970- else $Tuple2(ft[bh], bx)
968+ let by = valueOrErrorMessage(getString(bC(am)), "You don't have a duck staked")
969+ let ft = valueOrElse(getString(bE(by)), aI)
970+ let fu = split(value(ft), "_")
971+ if ((fu[bh] != "L"))
972+ then throw((("Duck location type is " + fu[bh]) + ", but should be L"))
973+ else $Tuple2(fu[bi], by)
971974 }
972- let br = fr._1
973- let fu = fr._2
974- let fv = value(assetInfo(fromBase58String(br)))
975- let fw = bl(br)
976- let fx = valueOrErrorMessage(getInteger(fw), (("Land " + fv.name) + " is not staked"))
977- let fy = valueOrErrorMessage(getString(bi(br)), (("NFT " + fv.name) + " is orphaned"))
978- if ((fy != am))
979- then throw((az + " is not yours"))
975+ let bs = fs._1
976+ let fv = fs._2
977+ let fw = value(assetInfo(fromBase58String(bs)))
978+ let fx = bm(bs)
979+ let fy = valueOrErrorMessage(getInteger(fx), (("Land " + fw.name) + " is not staked"))
980+ let fz = valueOrErrorMessage(getString(bj(bs)), (("NFT " + fw.name) + " is orphaned"))
981+ if ((fz != am))
982+ then throw((aA + " is not yours"))
980983 else {
981- let fz = split(fv.description, "_")
982- $Tuple4(fu, br, fz, fx)
984+ let fA = split(fw.description, "_")
985+ $Tuple4(fv, bs, fA, fy)
983986 }
984987 }
985988
986989
987-func fA (am,fB,fp,fq) = if ((0 > fB))
990+func fB (am,fC,fq,fr) = if ((0 > fC))
988991 then throw("Negative amount")
989992 else {
990- let dG = fo(am, fp, fq)
991- let aj = dG._3[Q]
992- let eb = ei(dG._3[R])
993- let em = (ay() - dG._4)
994- if ((0 > em))
995- then throw(((("Saved timestamp is in future, saved = " + toString(dG._4)) + ", final = ") + toString(ay())))
993+ let dH = fp(am, fq, fr)
994+ let aj = dH._3[Q]
995+ let ec = ej(dH._3[R])
996+ let en = (az() - dH._4)
997+ if ((0 > en))
998+ then throw(((("Saved timestamp is in future, saved = " + toString(dH._4)) + ", final = ") + toString(az())))
996999 else {
997- let fk = ai(aj)
998- let fC = fj(dG._2, fk)
999- let fD = fraction(em, (fC * fk), cu)
1000- if ((fB > fD))
1001- then throw(((("Not enough resources, available = " + toString(fD)) + ", requested = ") + toString(fB)))
1000+ let fl = ai(aj)
1001+ let fD = fk(dH._2, fl)
1002+ let fE = fraction(en, (fD * fl), cv)
1003+ if ((fC > fE))
1004+ then throw(((("Not enough resources, available = " + toString(fE)) + ", requested = ") + toString(fC)))
10021005 else {
1003- let fE = fraction((fD - fB), cu, (fC * fk))
1004- let fF = (ay() - fE)
1005- let eZ = (fk / o)
1006- let ex = es(eb, (em - fE), eZ, fC)
1007- let eY = bq(dG._2)
1008- let fa = valueOrElse(getInteger(bs(dG._2)), 0)
1009- let eK = eX(eY, eZ, fa)
1010- let fg = split(eK[aX], "_")
1011- let ey = parseIntValue(fg[ba])
1012- if (if ((fp == cI))
1013- then (fB > ey)
1006+ let fF = fraction((fE - fC), cv, (fD * fl))
1007+ let fG = (az() - fF)
1008+ let fa = (fl / o)
1009+ let ey = et(ec, (en - fF), fa, fD)
1010+ let eZ = br(dH._2)
1011+ let fb = valueOrElse(getInteger(bt(dH._2)), 0)
1012+ let eL = eY(eZ, fa, fb)
1013+ let fh = split(eL[aY], "_")
1014+ let ez = parseIntValue(fh[bb])
1015+ if (if ((fq == cJ))
1016+ then (fC > ez)
10141017 else false)
1015- then throw((("Only " + toString(ey)) + " space left in warehouse"))
1018+ then throw((("Only " + toString(ez)) + " space left in warehouse"))
10161019 else {
1017- let eF = bC(dG._1)
1018- let fG = eE(eF)
1019- let ew = split(fG[bd], "_")
1020- let ev = split(eK[aU], "_")
1021- let fH = if ((fp == cI))
1022- then $Tuple4(ek(ev, eb, (em - fE), eZ, fC), fG[bd], (parseIntValue(fg[aZ]) + ex._2), (parseIntValue(fg[ba]) - ex._2))
1023- else if ((fp == cJ))
1024- then $Tuple4(eK[aU], ek(ew, eb, (em - fE), eZ, fC), parseIntValue(fg[aZ]), parseIntValue(fg[ba]))
1020+ let eG = bD(dH._1)
1021+ let fH = eF(eG)
1022+ let ex = split(fH[be], "_")
1023+ let ew = split(eL[aV], "_")
1024+ let fI = if ((fq == cJ))
1025+ then $Tuple4(el(ew, ec, (en - fF), fa, fD), fH[be], (parseIntValue(fh[ba]) + ey._2), (parseIntValue(fh[bb]) - ey._2))
1026+ else if ((fq == cK))
1027+ then $Tuple4(eL[aV], el(ex, ec, (en - fF), fa, fD), parseIntValue(fh[ba]), parseIntValue(fh[bb]))
10251028 else {
1026- let fI = eu(ev, ew, ex, ey)
1027- let fJ = min([parseIntValue(fg[ba]), ex._2])
1028- $Tuple4(fI._1, fI._2, (parseIntValue(fg[aZ]) + fJ), (parseIntValue(fg[ba]) - fJ))
1029+ let fJ = ev(ew, ex, ey, ez)
1030+ let fK = min([parseIntValue(fh[bb]), ey._2])
1031+ $Tuple4(fJ._1, fJ._2, (parseIntValue(fh[ba]) + fK), (parseIntValue(fh[bb]) - fK))
10291032 }
1030- let fK = fH._1
1031- let fL = fH._2
1032- let fM = fH._3
1033- let fN = fH._4
1034- $Tuple5([IntegerEntry(bl(dG._2), fF), IntegerEntry(bo(az, dG._2, am), fF)], eF, [fG[bc], fL, fG[be], fG[bf]], eY, [eK[aT], fK, eK[aV], eK[aW], makeString([fg[aY], toString(fM), toString(fN), fg[bb]], "_")])
1033+ let fL = fI._1
1034+ let fM = fI._2
1035+ let fN = fI._3
1036+ let fO = fI._4
1037+ $Tuple5([IntegerEntry(bm(dH._2), fG), IntegerEntry(bp(aA, dH._2, am), fG)], eG, [fH[bd], fM, fH[bf], fH[bg]], eZ, [eL[aU], fL, eL[aW], eL[aX], makeString([fh[aZ], toString(fN), toString(fO), fh[bc]], "_")])
10351038 }
10361039 }
10371040 }
10381041 }
10391042
10401043
1041-func fO (am,br,fk,fp) = {
1042- let fw = bl(br)
1043- let fx = value(getInteger(fw))
1044- let fD = (fraction((ay() - fx), fj(br, fk), cu) * fk)
1045- fA(am, fD, fp, br)
1044+func fP (am,bs,fl,fq) = {
1045+ let fx = bm(bs)
1046+ let fy = value(getInteger(fx))
1047+ let fE = (fraction((az() - fy), fk(bs, fl), cv) * fl)
1048+ fB(am, fE, fq, bs)
10461049 }
10471050
10481051
1049-func fP (fQ,fR,fS,fT) = {
1050- let cn = valueOrElse(getInteger(fR), 0)
1051- let cs = (cn + fT)
1052- let fU = cq(valueOrElse(getInteger(fQ), 0), cs)
1053- $Tuple2([IntegerEntry(fQ, fU[0]), IntegerEntry(fR, cs), IntegerEntry(fS, (valueOrElse(getInteger(fS), 0) + fU[1]))], cs)
1052+func fQ (fR,fS,fT,fU) = {
1053+ let co = valueOrElse(getInteger(fS), 0)
1054+ let ct = (co + fU)
1055+ let fV = cr(valueOrElse(getInteger(fR), 0), ct)
1056+ $Tuple2([IntegerEntry(fR, fV[0]), IntegerEntry(fS, ct), IntegerEntry(fT, (valueOrElse(getInteger(fT), 0) + fV[1]))], ct)
10541057 }
10551058
10561059
1057-func fV (bx,fT) = {
1058- let fv = value(assetInfo(fromBase58String(bx)))
1059- let am = valueOrErrorMessage(getString(bA(bx)), (("NFT " + fv.name) + " is orphaned"))
1060+func fW (by,fU) = {
1061+ let fw = value(assetInfo(fromBase58String(by)))
1062+ let am = valueOrErrorMessage(getString(bB(by)), (("NFT " + fw.name) + " is orphaned"))
10601063 if (if (if (b)
1061- then (fv.issuer == this)
1064+ then (fw.issuer == this)
10621065 else false)
1063- then contains(fv.name, aB)
1066+ then contains(fw.name, aC)
10641067 else false)
1065- then fP(cc(am), cb(am), cd(am), fT)
1066- else fP(bY(bx), bX(bx), bZ(bx), fT)
1068+ then fQ(cd(am), cc(am), ce(am), fU)
1069+ else fQ(bZ(by), bY(by), ca(by), fU)
10671070 }
10681071
10691072
1070-func fW (am,fT) = fP(cc(am), cb(am), cd(am), fT)
1073+func fX (am,fU) = fQ(cd(am), cc(am), ce(am), fU)
10711074
10721075
1073-func fX (am) = {
1074- let bx = valueOrErrorMessage(getString(bB(am)), "You don't have a duck staked")
1075- let fY = bv(am)
1076- let fZ = getString(fY)
1077- if (!(isDefined(fZ)))
1076+func fY (am) = {
1077+ let by = valueOrErrorMessage(getString(bC(am)), "You don't have a duck staked")
1078+ let fZ = bw(am)
1079+ let ga = getString(fZ)
1080+ if (!(isDefined(ga)))
10781081 then throw("You are not eligible for ONBOARD artifact")
10791082 else {
1080- let ga = by(am)
1081- let gb = getString(ga)
1082- if (isDefined(gb))
1083- then throw(("You already used your ONBOARD artifact on duck " + value(gb)))
1083+ let gb = bz(am)
1084+ let gc = getString(gb)
1085+ if (isDefined(gc))
1086+ then throw(("You already used your ONBOARD artifact on duck " + value(gc)))
10841087 else {
1085- let gc = bw(bx)
1086- let gd = getString(gc)
1087- if (isDefined(gd))
1088- then throw(((("The duck " + bx) + " already got points from ONBOARD artifact from user ") + value(gd)))
1089- else ([StringEntry(ga, bx), StringEntry(gc, am)] ++ fV(bx, cl)._1)
1088+ let gd = bx(by)
1089+ let ge = getString(gd)
1090+ if (isDefined(ge))
1091+ then throw(((("The duck " + by) + " already got points from ONBOARD artifact from user ") + value(ge)))
1092+ else ([StringEntry(gb, by), StringEntry(gd, am)] ++ fW(by, cm)._1)
10901093 }
10911094 }
10921095 }
10931096
10941097
1095-func ge (am,fq) = {
1096- let dG = fo(am, cK, fq)
1097- let br = dG._2
1098- let fk = ai(dG._3[Q])
1099- let gf = bm(aC, br)
1100- if ((valueOrElse(getInteger(gf), 0) > 0))
1098+func gf (am,fr) = {
1099+ let dH = fp(am, cL, fr)
1100+ let bs = dH._2
1101+ let fl = ai(dH._3[Q])
1102+ let gg = bn(aD, bs)
1103+ if ((valueOrElse(getInteger(gg), 0) > 0))
11011104 then throw("Presale artifact is already activated")
1102- else if ((parseIntValue(dG._3[P]) > cz))
1103- then throw((((az + " ") + br) + " is not eligible for presale artifact"))
1105+ else if ((parseIntValue(dH._3[P]) > cA))
1106+ then throw((((aA + " ") + bs) + " is not eligible for presale artifact"))
11041107 else {
1105- let gg = fO(am, br, fk, cK)
1106- (((gg._1 :+ IntegerEntry(gf, fk)) :+ StringEntry(gg._2, makeString(gg._3, ":"))) :+ StringEntry(gg._4, makeString(gg._5, ":")))
1108+ let gh = fP(am, bs, fl, cL)
1109+ (((gh._1 :+ IntegerEntry(gg, fl)) :+ StringEntry(gh._2, makeString(gh._3, ":"))) :+ StringEntry(gh._4, makeString(gh._5, ":")))
11071110 }
11081111 }
11091112
11101113
1111-func gh (ef) = if (if ((ef.originCaller != J))
1114+func gi (eg) = if (if ((eg.originCaller != J))
11121115 then valueOrElse(getBoolean(ak()), false)
11131116 else false)
11141117 then throw("Contracts are under maintenance")
1115- else [StringEntry(al(toString(ef.originCaller)), toBase58String(ef.transactionId))]
1118+ else [StringEntry(an(toString(eg.originCaller)), toBase58String(eg.transactionId))]
11161119
11171120
1118-func gi (am,br) = {
1119- let eY = bq(br)
1120- let gj = split(value(assetInfo(fromBase58String(br))).description, "_")
1121- let aj = gj[Q]
1122- let fk = ai(aj)
1123- let fa = valueOrElse(getInteger(bs(br)), 0)
1124- let eZ = (fk / o)
1125- let eb = ei(gj[R])
1126- let eK = eX(eY, eZ, fa)
1127- let ev = split(eK[aU], "_")
1128- let fw = bl(br)
1129- let fx = getIntegerValue(fw)
1130- let em = (ay() - fx)
1131- if ((0 > em))
1132- then throw(((("Saved timestamp is in future, saved = " + toString(fx)) + ", final = ") + toString(ay())))
1121+func gj (am,bs) = {
1122+ let eZ = br(bs)
1123+ let gk = split(value(assetInfo(fromBase58String(bs))).description, "_")
1124+ let aj = gk[Q]
1125+ let fl = ai(aj)
1126+ let fb = valueOrElse(getInteger(bt(bs)), 0)
1127+ let fa = (fl / o)
1128+ let ec = ej(gk[R])
1129+ let eL = eY(eZ, fa, fb)
1130+ let ew = split(eL[aV], "_")
1131+ let fx = bm(bs)
1132+ let fy = getIntegerValue(fx)
1133+ let en = (az() - fy)
1134+ if ((0 > en))
1135+ then throw(((("Saved timestamp is in future, saved = " + toString(fy)) + ", final = ") + toString(az())))
11331136 else {
1134- let fC = fj(br, fk)
1135- let gk = eq(ev, eb, em, eZ, fC)
1136- let fl = valueOrElse(getInteger(bm(aC, br)), 0)
1137- let gl = ((fk * n) + ((((fk * fa) + fl) * n) / 5))
1138- let gm = (fraction(gk._2, aI, n) * aK)
1139- func gn (cR,eN) = (cR + parseIntValue(eN))
1137+ let fD = fk(bs, fl)
1138+ let gl = er(ew, ec, en, fa, fD)
1139+ let fm = valueOrElse(getInteger(bn(aD, bs)), 0)
1140+ let gm = ((fl * n) + ((((fl * fb) + fm) * n) / 5))
1141+ let gn = (fraction(gl._2, aJ, n) * aL)
1142+ func go (cS,eO) = (cS + parseIntValue(eO))
11401143
1141- let go = {
1142- let cT = split(eK[aV], "_")
1143- let cU = size(cT)
1144- let cV = 0
1145- func cW (cX,cY) = if ((cY >= cU))
1146- then cX
1147- else gn(cX, cT[cY])
1144+ let gp = {
1145+ let cU = split(eL[aW], "_")
1146+ let cV = size(cU)
1147+ let cW = 0
1148+ func cX (cY,cZ) = if ((cZ >= cV))
1149+ then cY
1150+ else go(cY, cU[cZ])
11481151
1149- func cZ (cX,cY) = if ((cY >= cU))
1150- then cX
1152+ func da (cY,cZ) = if ((cZ >= cV))
1153+ then cY
11511154 else throw("List size exceeds 6")
11521155
1153- cZ(cW(cW(cW(cW(cW(cW(cV, 0), 1), 2), 3), 4), 5), 6)
1156+ da(cX(cX(cX(cX(cX(cX(cW, 0), 1), 2), 3), 4), 5), 6)
11541157 }
1155- let gp = (fraction(go, (2 * aI), n) * aK)
1156- let gq = if ((eK[aW] == ""))
1158+ let gq = (fraction(gp, (2 * aJ), n) * aL)
1159+ let gr = if ((eL[aX] == ""))
11571160 then nil
1158- else split_4C(eK[aW], "_")
1159- func eO (cR,eN) = {
1160- let di = cR._2
1161- let gr = parseIntValue(split(aO[di], "_")[aP])
1162- $Tuple2((cR._1 + ((parseIntValue(eN) * gr) * m)), (di + 1))
1161+ else split_4C(eL[aX], "_")
1162+ func eP (cS,eO) = {
1163+ let dj = cS._2
1164+ let gs = parseIntValue(split(aP[dj], "_")[aQ])
1165+ $Tuple2((cS._1 + ((parseIntValue(eO) * gs) * m)), (dj + 1))
11631166 }
11641167
1165- let gs = {
1166- let cT = gq
1167- let cU = size(cT)
1168- let cV = $Tuple2(0, 0)
1169- func eS (cX,cY) = if ((cY >= cU))
1170- then cX
1171- else eO(cX, cT[cY])
1168+ let gt = {
1169+ let cU = gr
1170+ let cV = size(cU)
1171+ let cW = $Tuple2(0, 0)
1172+ func eT (cY,cZ) = if ((cZ >= cV))
1173+ then cY
1174+ else eP(cY, cU[cZ])
11721175
1173- func eT (cX,cY) = if ((cY >= cU))
1174- then cX
1176+ func eU (cY,cZ) = if ((cZ >= cV))
1177+ then cY
11751178 else throw("List size exceeds 24")
11761179
1177- eT(eS(eS(eS(eS(eS(eS(eS(eS(eS(eS(eS(eS(eS(eS(eS(eS(eS(eS(eS(eS(eS(eS(eS(eS(cV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24)
1180+ eU(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(cW, 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)
11781181 }
1179- let gt = (fraction(gs._1, (2 * aI), n) * aK)
1180- $Tuple4(gl, gm, gp, gt)
1182+ let gu = (fraction(gt._1, (2 * aJ), n) * aL)
1183+ $Tuple4(gm, gn, gq, gu)
11811184 }
11821185 }
11831186
11841187
1185-func gu (am,bx) = {
1186- let gv = ca(bx)
1187- let gw = split(valueOrElse(getString(gv), ",;,_,;,_,;,_,;,_,;,_,;,"), "_")
1188- let eF = bC(bx)
1189- let fG = eE(eF)
1190- let gx = dS(gw, dd(fG[bf]), true, nil)
1191- let gy = dk(gx)
1192- func eM (cR,eN) = (cR + parseIntValue(eN))
1188+func gv (am,by) = {
1189+ let gw = cb(by)
1190+ let gx = split(valueOrElse(getString(gw), ",;,_,;,_,;,_,;,_,;,_,;,"), "_")
1191+ let eG = bD(by)
1192+ let fH = eF(eG)
1193+ let gy = dT(gx, de(fH[bg]), true, nil)
1194+ let gz = dl(gy)
1195+ func eN (cS,eO) = (cS + parseIntValue(eO))
11931196
1194- let fL = {
1195- let cT = split(fG[bd], "_")
1196- let cU = size(cT)
1197- let cV = 0
1198- func cW (cX,cY) = if ((cY >= cU))
1199- then cX
1200- else eM(cX, cT[cY])
1197+ let fM = {
1198+ let cU = split(fH[be], "_")
1199+ let cV = size(cU)
1200+ let cW = 0
1201+ func cX (cY,cZ) = if ((cZ >= cV))
1202+ then cY
1203+ else eN(cY, cU[cZ])
12011204
1202- func cZ (cX,cY) = if ((cY >= cU))
1203- then cX
1205+ func da (cY,cZ) = if ((cZ >= cV))
1206+ then cY
12041207 else throw("List size exceeds 6")
12051208
1206- cZ(cW(cW(cW(cW(cW(cW(cV, 0), 1), 2), 3), 4), 5), 6)
1209+ da(cX(cX(cX(cX(cX(cX(cW, 0), 1), 2), 3), 4), 5), 6)
12071210 }
1208- let gm = (fraction(fL, aI, n) * aK)
1209- let gz = {
1210- let cT = split(fG[be], "_")
1211- let cU = size(cT)
1212- let cV = 0
1213- func eS (cX,cY) = if ((cY >= cU))
1214- then cX
1215- else eM(cX, cT[cY])
1211+ let gn = (fraction(fM, aJ, n) * aL)
1212+ let gA = {
1213+ let cU = split(fH[bf], "_")
1214+ let cV = size(cU)
1215+ let cW = 0
1216+ func eT (cY,cZ) = if ((cZ >= cV))
1217+ then cY
1218+ else eN(cY, cU[cZ])
12161219
1217- func eT (cX,cY) = if ((cY >= cU))
1218- then cX
1220+ func eU (cY,cZ) = if ((cZ >= cV))
1221+ then cY
12191222 else throw("List size exceeds 6")
12201223
1221- eT(eS(eS(eS(eS(eS(eS(cV, 0), 1), 2), 3), 4), 5), 6)
1224+ eU(eT(eT(eT(eT(eT(eT(cW, 0), 1), 2), 3), 4), 5), 6)
12221225 }
1223- let gp = (fraction(gz, (2 * aI), n) * aK)
1224- let gq = if ((gy == ""))
1226+ let gq = (fraction(gA, (2 * aJ), n) * aL)
1227+ let gr = if ((gz == ""))
12251228 then nil
1226- else split_4C(gy, "_")
1227- func eO (cR,eN) = {
1228- let di = cR._2
1229- let gr = parseIntValue(split(aO[di], "_")[aP])
1230- $Tuple2((cR._1 + ((parseIntValue(eN) * gr) * m)), (di + 1))
1229+ else split_4C(gz, "_")
1230+ func eP (cS,eO) = {
1231+ let dj = cS._2
1232+ let gs = parseIntValue(split(aP[dj], "_")[aQ])
1233+ $Tuple2((cS._1 + ((parseIntValue(eO) * gs) * m)), (dj + 1))
12311234 }
12321235
1233- let gA = {
1234- let cT = gq
1235- let cU = size(cT)
1236- let cV = $Tuple2(0, 0)
1237- func eV (cX,cY) = if ((cY >= cU))
1238- then cX
1239- else eO(cX, cT[cY])
1236+ let gB = {
1237+ let cU = gr
1238+ let cV = size(cU)
1239+ let cW = $Tuple2(0, 0)
1240+ func eW (cY,cZ) = if ((cZ >= cV))
1241+ then cY
1242+ else eP(cY, cU[cZ])
12401243
1241- func eW (cX,cY) = if ((cY >= cU))
1242- then cX
1244+ func eX (cY,cZ) = if ((cZ >= cV))
1245+ then cY
12431246 else throw("List size exceeds 24")
12441247
1245- eW(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(cV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24)
1248+ eX(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(cW, 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)
12461249 }
1247- let gt = (fraction(gA._1, (2 * aI), n) * aK)
1248- $Tuple3(gm, gp, gt)
1250+ let gu = (fraction(gB._1, (2 * aJ), n) * aL)
1251+ $Tuple3(gn, gq, gu)
12491252 }
12501253
12511254
1252-@Callable(ef)
1253-func constructorV1 (gB) = if ((ef.caller != this))
1255+@Callable(eg)
1256+func constructorV1 (gC) = if ((eg.caller != this))
12541257 then throw("Permission denied")
1255- else [StringEntry(D(), gB)]
1258+ else [StringEntry(D(), gC)]
12561259
12571260
12581261
1259-@Callable(ef)
1260-func saveInteger (w,fB) = if ((ef.caller != this))
1262+@Callable(eg)
1263+func saveInteger (w,fC) = if ((eg.caller != this))
12611264 then throw("saveInteger is not public method")
1262- else [IntegerEntry(w, fB)]
1265+ else [IntegerEntry(w, fC)]
12631266
12641267
12651268
1266-@Callable(ef)
1267-func setBlocked (gC) = if ((ef.caller != this))
1269+@Callable(eg)
1270+func setBlocked (gD) = if ((eg.caller != this))
12681271 then throw("permission denied")
1269- else [BooleanEntry(ak(), gC)]
1272+ else [BooleanEntry(ak(), gD)]
12701273
12711274
12721275
1273-@Callable(ef)
1276+@Callable(eg)
12741277 func stakeLand () = {
1275- let gD = gh(ef)
1276- if ((size(ef.payments) != 1))
1278+ let gE = gi(eg)
1279+ if ((size(eg.payments) != 1))
12771280 then throw("Exactly one payment required")
12781281 else {
1279- let gE = value(ef.payments[0])
1280- let bj = value(gE.assetId)
1281- let v = toString(ef.caller)
1282- if ((gE.amount != 1))
1283- then throw((("NFT " + az) + " token should be attached as payment"))
1282+ let gF = value(eg.payments[0])
1283+ let bk = value(gF.assetId)
1284+ let v = toString(eg.caller)
1285+ if ((gF.amount != 1))
1286+ then throw((("NFT " + aA) + " token should be attached as payment"))
12841287 else {
1285- let fv = value(assetInfo(bj))
1286- if ((fv.issuer != this))
1288+ let fw = value(assetInfo(bk))
1289+ if ((fw.issuer != this))
12871290 then throw("Unknown issuer of token")
1288- else if (!(contains(fv.name, az)))
1289- then throw((("Only NFT " + az) + " tokens are accepted"))
1291+ else if (!(contains(fw.name, aA)))
1292+ then throw((("Only NFT " + aA) + " tokens are accepted"))
12901293 else {
1291- let gF = drop(fv.name, 4)
1292- let cE = if (contains(gF, "XXL"))
1293- then dropRight(gF, 3)
1294- else if (contains(gF, "XL"))
1295- then dropRight(gF, 2)
1296- else dropRight(gF, 1)
1297- if (!(isDefined(parseInt(cE))))
1298- then throw(("Cannot parse land number from " + fv.name))
1294+ let gG = drop(fw.name, 4)
1295+ let cF = if (contains(gG, "XXL"))
1296+ then dropRight(gG, 3)
1297+ else if (contains(gG, "XL"))
1298+ then dropRight(gG, 2)
1299+ else dropRight(gG, 1)
1300+ if (!(isDefined(parseInt(cF))))
1301+ then throw(("Cannot parse land number from " + fw.name))
12991302 else {
1300- let br = toBase58String(bj)
1301- let fw = bl(br)
1302- if (isDefined(getInteger(fw)))
1303- then throw((("NFT " + fv.name) + " is already staked"))
1303+ let bs = toBase58String(bk)
1304+ let fx = bm(bs)
1305+ if (isDefined(getInteger(fx)))
1306+ then throw((("NFT " + fw.name) + " is already staked"))
13041307 else {
1305- let fz = split(fv.description, "_")
1306- let eb = ei(fz[R])
1307- let fk = ai(fz[Q])
1308- let eZ = (fk / o)
1309- let db = eh(eb, eZ, 1)
1310- let gG = Y(fz[S])
1311- let gH = split(valueOrElse(getString(gG), "0_0_0_0_0_0"), "_")
1312- let gI = makeString(dZ(gH, eb, eZ, 1), "_")
1313- let gJ = aa(v)
1314- let gK = getString(gJ)
1315- let gL = if (isDefined(gK))
1316- then split_51C(value(gK), "_")
1308+ let fA = split(fw.description, "_")
1309+ let ec = ej(fA[R])
1310+ let fl = ai(fA[Q])
1311+ let fa = (fl / o)
1312+ let dc = ei(ec, fa, 1)
1313+ let gH = Y(fA[S])
1314+ let gI = split(valueOrElse(getString(gH), "0_0_0_0_0_0"), "_")
1315+ let gJ = makeString(ea(gI, ec, fa, 1), "_")
1316+ let gK = aa(v)
1317+ let gL = getString(gK)
1318+ let gM = if (isDefined(gL))
1319+ then split_51C(value(gL), "_")
13171320 else nil
1318- if (containsElement(gL, br))
1319- then throw(("Your staked lands already contain " + br))
1320- else if ((size(gL) >= aE))
1321- then throw((("Your already staked max (" + toString(aE)) + ") lands"))
1321+ if (containsElement(gM, bs))
1322+ then throw(("Your staked lands already contain " + bs))
1323+ else if ((size(gM) >= aF))
1324+ then throw((("Your already staked max (" + toString(aF)) + ") lands"))
13221325 else {
1323- let fa = valueOrElse(getInteger(bs(br)), 0)
1324- let gM = ac(v)
1325- let gN = valueOrElse(getInteger(gM), 0)
1326- let gO = invoke(M, "onStakeUnstakeLand", [v], nil)
1327- $Tuple2(([IntegerEntry(fw, lastBlock.timestamp), IntegerEntry(bo(az, br, v), lastBlock.timestamp), StringEntry(gJ, makeString_11C((gL :+ br), "_")), IntegerEntry(gM, (gN + fk)), StringEntry(bi(br), v), StringEntry(cD(cE), v), IntegerEntry(cC(br, v), fa), StringEntry(X(), db), StringEntry(gG, gI)] ++ gD), gO)
1326+ let fb = valueOrElse(getInteger(bt(bs)), 0)
1327+ let gN = ac(v)
1328+ let gO = valueOrElse(getInteger(gN), 0)
1329+ let gP = invoke(M, "onStakeUnstakeLand", [v], nil)
1330+ $Tuple2(([IntegerEntry(fx, lastBlock.timestamp), IntegerEntry(bp(aA, bs, v), lastBlock.timestamp), StringEntry(gK, makeString_11C((gM :+ bs), "_")), IntegerEntry(gN, (gO + fl)), StringEntry(bj(bs), v), StringEntry(cE(cF), v), IntegerEntry(cD(bs, v), fb), StringEntry(X(), dc), StringEntry(gH, gJ)] ++ gE), gP)
13281331 }
13291332 }
13301333 }
13311334 }
13321335 }
13331336 }
13341337 }
13351338
13361339
13371340
1338-@Callable(ef)
1339-func unstakeLand (fq) = {
1340- let gD = gh(ef)
1341- if ((size(ef.payments) != 0))
1341+@Callable(eg)
1342+func unstakeLand (fr) = {
1343+ let gE = gi(eg)
1344+ if ((size(eg.payments) != 0))
13421345 then throw("No payments required")
13431346 else {
1344- let am = toString(ef.caller)
1345- let dG = fo(am, cJ, fq)
1346- let br = dG._2
1347- let fz = dG._3
1348- let gJ = aa(am)
1349- let eb = ei(fz[R])
1350- let fk = ai(fz[Q])
1351- let eZ = (fk / o)
1352- let db = eh(eb, eZ, -1)
1353- let gG = Y(fz[S])
1354- let gH = split(valueOrElse(getString(gG), "0_0_0_0_0_0"), "_")
1355- let gI = makeString(dZ(gH, eb, eZ, -1), "_")
1356- let gg = fO(am, br, fk, cJ)
1357- let gL = split_51C(valueOrElse(getString(gJ), ""), "_")
1358- let I = indexOf(gL, br)
1347+ let am = toString(eg.caller)
1348+ let dH = fp(am, cK, fr)
1349+ let bs = dH._2
1350+ let fA = dH._3
1351+ let gK = aa(am)
1352+ let ec = ej(fA[R])
1353+ let fl = ai(fA[Q])
1354+ let fa = (fl / o)
1355+ let dc = ei(ec, fa, -1)
1356+ let gH = Y(fA[S])
1357+ let gI = split(valueOrElse(getString(gH), "0_0_0_0_0_0"), "_")
1358+ let gJ = makeString(ea(gI, ec, fa, -1), "_")
1359+ let gh = fP(am, bs, fl, cK)
1360+ let gM = split_51C(valueOrElse(getString(gK), ""), "_")
1361+ let I = indexOf(gM, bs)
13591362 if (!(isDefined(I)))
1360- then throw(("Your staked lands don't contain " + br))
1363+ then throw(("Your staked lands don't contain " + bs))
13611364 else {
1362- let gP = lastBlock.timestamp
1363- let gQ = valueOrElse(getInteger(L, bE(am)), 0)
1364- if ((gQ >= gP))
1365- then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(gQ)))
1365+ let gQ = lastBlock.timestamp
1366+ let gR = valueOrElse(getInteger(L, bF(am)), 0)
1367+ if ((gR >= gQ))
1368+ then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(gR)))
13661369 else {
1367- let gR = (valueOrElse(getInteger(M, cv(am)), 0) + k)
1368- if ((gR > gP))
1369- then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString(gR)))
1370+ let gS = (valueOrElse(getInteger(M, cw(am)), 0) + k)
1371+ if ((gS > gQ))
1372+ then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString(gS)))
13701373 else {
1371- let gM = ac(am)
1372- let gS = valueOrElse(getInteger(gM), 0)
1373- let gT = if ((fk > gS))
1374+ let gN = ac(am)
1375+ let gT = valueOrElse(getInteger(gN), 0)
1376+ let gU = if ((fl > gT))
13741377 then 0
1375- else (gS - fk)
1376- let gO = invoke(M, "onStakeUnstakeLand", [am], nil)
1377- $Tuple2(([ScriptTransfer(ef.caller, 1, fromBase58String(br)), DeleteEntry(bl(br)), DeleteEntry(bo(az, br, am)), StringEntry(X(), db), StringEntry(gG, gI), StringEntry(gg._2, makeString(gg._3, ":")), if ((size(gL) > 1))
1378- then StringEntry(gJ, makeString_11C(removeByIndex(gL, value(I)), "_"))
1379- else DeleteEntry(gJ), IntegerEntry(gM, gT)] ++ gD), gO)
1378+ else (gT - fl)
1379+ let gP = invoke(M, "onStakeUnstakeLand", [am], nil)
1380+ $Tuple2(([ScriptTransfer(eg.caller, 1, fromBase58String(bs)), DeleteEntry(bm(bs)), DeleteEntry(bp(aA, bs, am)), StringEntry(X(), dc), StringEntry(gH, gJ), StringEntry(gh._2, makeString(gh._3, ":")), if ((size(gM) > 1))
1381+ then StringEntry(gK, makeString_11C(removeByIndex(gM, value(I)), "_"))
1382+ else DeleteEntry(gK), IntegerEntry(gN, gU)] ++ gE), gP)
13801383 }
13811384 }
13821385 }
13831386 }
13841387 }
13851388
13861389
13871390
1388-@Callable(ef)
1389-func unstakeLandCallback (br,am) = if ((toString(ef.caller) != j))
1391+@Callable(eg)
1392+func unstakeLandCallback (bs,am) = if ((toString(eg.caller) != j))
13901393 then throw("Permission denied")
13911394 else {
1392- let gU = gi(am, br)
1393- let gO = invoke(M, "onStakeUnstakeLand", [am], nil)
1394- $Tuple2([Burn(fromBase58String(br), 1), DeleteEntry(bl(br)), DeleteEntry(bo(az, br, am))], $Tuple5(gU._1, gU._2, gU._3, gU._4, gO))
1395+ let gV = gj(am, bs)
1396+ let gP = invoke(M, "onStakeUnstakeLand", [am], nil)
1397+ $Tuple2([Burn(fromBase58String(bs), 1), DeleteEntry(bm(bs)), DeleteEntry(bp(aA, bs, am))], $Tuple5(gV._1, gV._2, gV._3, gV._4, gP))
13951398 }
13961399
13971400
13981401
1399-@Callable(ef)
1400-func unstakeLandREADONLY (br,am) = {
1401- let gU = gi(am, br)
1402- $Tuple2(nil, gU)
1402+@Callable(eg)
1403+func unstakeLandREADONLY (bs,am) = {
1404+ let gV = gj(am, bs)
1405+ $Tuple2(nil, gV)
14031406 }
14041407
14051408
14061409
1407-@Callable(ef)
1408-func unstakeLandsFinalizeCallback (am) = if ((toString(ef.caller) != j))
1410+@Callable(eg)
1411+func unstakeLandsFinalizeCallback (am) = if ((toString(eg.caller) != j))
14091412 then throw("Permission denied")
14101413 else $Tuple2([DeleteEntry(aa(am)), DeleteEntry(ac(am))], 0)
14111414
14121415
14131416
1414-@Callable(ef)
1415-func convertUnstakedLands () = if ((size(ef.payments) != 1))
1417+@Callable(eg)
1418+func convertUnstakedLands () = if ((size(eg.payments) != 1))
14161419 then throw("Exactly one payment required")
14171420 else {
1418- let gE = value(ef.payments[0])
1419- let bj = value(gE.assetId)
1420- let v = toString(ef.caller)
1421- if ((gE.amount != 1))
1422- then throw((("NFT " + az) + " token should be attached as payment"))
1421+ let gF = value(eg.payments[0])
1422+ let bk = value(gF.assetId)
1423+ let v = toString(eg.caller)
1424+ if ((gF.amount != 1))
1425+ then throw((("NFT " + aA) + " token should be attached as payment"))
14231426 else {
1424- let fv = value(assetInfo(bj))
1425- if ((fv.issuer != this))
1427+ let fw = value(assetInfo(bk))
1428+ if ((fw.issuer != this))
14261429 then throw("Unknown issuer of token")
1427- else if (!(contains(fv.name, az)))
1428- then throw((("Only NFT " + az) + " tokens are accepted"))
1430+ else if (!(contains(fw.name, aA)))
1431+ then throw((("Only NFT " + aA) + " tokens are accepted"))
14291432 else {
1430- let br = toBase58String(bj)
1431- let fz = split(fv.description, "_")
1432- let fk = ai(fz[Q])
1433- let fa = valueOrElse(getInteger(bs(br)), 0)
1434- let fl = valueOrElse(getInteger(bm(aC, br)), 0)
1435- let gV = ((fk * n) + ((((fk * fa) + fl) * n) / 5))
1436- let gW = invoke(O, "requestAcresCallback", [gV], nil)
1437- if ((gW == gW))
1433+ let bs = toBase58String(bk)
1434+ let fA = split(fw.description, "_")
1435+ let fl = ai(fA[Q])
1436+ let fb = valueOrElse(getInteger(bt(bs)), 0)
1437+ let fm = valueOrElse(getInteger(bn(aD, bs)), 0)
1438+ let gW = ((fl * n) + ((((fl * fb) + fm) * n) / 5))
1439+ let gX = invoke(O, "requestAcresCallback", [gW], nil)
1440+ if ((gX == gX))
14381441 then {
1439- let gX = invoke(addressFromStringValue(j), "stakeAcresCallback", [v], [AttachedPayment(U, gV)])
1440- if ((gX == gX))
1441- then $Tuple2([Burn(fromBase58String(br), 1)], 0)
1442+ let gY = invoke(addressFromStringValue(j), "stakeAcresCallback", [v], [AttachedPayment(U, gW)])
1443+ if ((gY == gY))
1444+ then $Tuple2([Burn(fromBase58String(bs), 1)], 0)
14421445 else throw("Strict value is not equal to itself.")
14431446 }
14441447 else throw("Strict value is not equal to itself.")
14451448 }
14461449 }
14471450 }
14481451
14491452
14501453
1451-@Callable(ef)
1452-func unstakeDuckCallback (bx,am) = if ((toString(ef.caller) != j))
1454+@Callable(eg)
1455+func unstakeDuckCallback (by,am) = if ((toString(eg.caller) != j))
14531456 then throw("Permission denied")
14541457 else {
1455- let gU = gu(am, bx)
1456- $Tuple2([ScriptTransfer(addressFromStringValue(am), 1, fromBase58String(bx)), DeleteEntry(bl(bx)), DeleteEntry(bA(bx)), DeleteEntry(bo(aA, bx, am)), DeleteEntry(bB(am))], gU)
1458+ let gV = gv(am, by)
1459+ $Tuple2([ScriptTransfer(addressFromStringValue(am), 1, fromBase58String(by)), DeleteEntry(bm(by)), DeleteEntry(bB(by)), DeleteEntry(bp(aB, by, am)), DeleteEntry(bC(am))], gV)
14571460 }
14581461
14591462
14601463
1461-@Callable(ef)
1462-func unstakeDuckREADONLY (bx,am) = {
1463- let gU = gu(am, bx)
1464- $Tuple2(nil, gU)
1464+@Callable(eg)
1465+func unstakeDuckREADONLY (by,am) = {
1466+ let gV = gv(am, by)
1467+ $Tuple2(nil, gV)
14651468 }
14661469
14671470
14681471
1469-@Callable(ef)
1470-func claimRes (fB,gY) = {
1471- let gD = gh(ef)
1472- if ((size(ef.payments) != 0))
1472+@Callable(eg)
1473+func claimRes (fC,gZ) = {
1474+ let gE = gi(eg)
1475+ if ((size(eg.payments) != 0))
14731476 then throw("No payments required")
14741477 else {
1475- let am = toString(ef.originCaller)
1476- let eg = fA(am, fB, cJ, gY)
1477- let bx = valueOrErrorMessage(getString(bB(am)), "You don't have a duck staked")
1478- $Tuple2(((((eg._1 ++ fV(bx, fraction(cj, fB, n))._1) :+ StringEntry(eg._2, makeString(eg._3, ":"))) :+ StringEntry(eg._4, makeString(eg._5, ":"))) ++ gD), eg._3[bd])
1478+ let am = toString(eg.originCaller)
1479+ let eh = fB(am, fC, cK, gZ)
1480+ let by = valueOrErrorMessage(getString(bC(am)), "You don't have a duck staked")
1481+ $Tuple2(((((eh._1 ++ fW(by, fraction(ck, fC, n))._1) :+ StringEntry(eh._2, makeString(eh._3, ":"))) :+ StringEntry(eh._4, makeString(eh._5, ":"))) ++ gE), eh._3[be])
14791482 }
14801483 }
14811484
14821485
14831486
1484-@Callable(ef)
1485-func claimResToWH (fB,gY) = {
1486- let gD = gh(ef)
1487- if ((size(ef.payments) != 0))
1487+@Callable(eg)
1488+func claimResToWH (fC,gZ) = {
1489+ let gE = gi(eg)
1490+ if ((size(eg.payments) != 0))
14881491 then throw("No payments required")
14891492 else {
1490- let am = toString(ef.originCaller)
1491- let eg = fA(am, fB, cI, gY)
1492- $Tuple2(((((eg._1 ++ fW(am, fraction(cj, fB, n))._1) :+ StringEntry(eg._2, makeString(eg._3, ":"))) :+ StringEntry(eg._4, makeString(eg._5, ":"))) ++ gD), eg._5[aU])
1493+ let am = toString(eg.originCaller)
1494+ let eh = fB(am, fC, cJ, gZ)
1495+ $Tuple2(((((eh._1 ++ fX(am, fraction(ck, fC, n))._1) :+ StringEntry(eh._2, makeString(eh._3, ":"))) :+ StringEntry(eh._4, makeString(eh._5, ":"))) ++ gE), eh._5[aV])
14931496 }
14941497 }
14951498
14961499
14971500
1498-@Callable(ef)
1499-func updateBackpack (bx,gZ) = if ((ef.caller != K))
1501+@Callable(eg)
1502+func updateBackpack (by,ha) = if ((eg.caller != K))
15001503 then throw("permission denied")
1501- else $Tuple2([StringEntry(bC(bx), gZ)], gZ)
1504+ else $Tuple2([StringEntry(bD(by), ha)], ha)
15021505
15031506
15041507
1505-@Callable(ef)
1508+@Callable(eg)
15061509 func commitForRandom () = {
1507- let gD = gh(ef)
1508- let ha = (height + V)
1509- let am = toString(ef.caller)
1510- $Tuple2(([IntegerEntry(W(am), ha)] ++ gD), ha)
1510+ let gE = gi(eg)
1511+ let hb = (height + V)
1512+ let am = toString(eg.caller)
1513+ $Tuple2(([IntegerEntry(W(am), hb)] ++ gE), hb)
15111514 }
15121515
15131516
15141517
1515-@Callable(ef)
1516-func revealRandom (au) = {
1517- let gD = gh(ef)
1518- let am = toString(ef.caller)
1519- let hb = W(am)
1520- let ha = valueOrErrorMessage(getInteger(hb), "You have to commitForRandom() first!")
1521- if ((ha > height))
1522- then throw(("Random number is not ready yet, wait until height = " + toString(ha)))
1518+@Callable(eg)
1519+func revealRandom (av) = {
1520+ let gE = gi(eg)
1521+ let am = toString(eg.caller)
1522+ let hc = W(am)
1523+ let hb = valueOrErrorMessage(getInteger(hc), "You have to commitForRandom() first!")
1524+ if ((hb > height))
1525+ then throw(("Random number is not ready yet, wait until height = " + toString(hb)))
15231526 else {
1524- let aw = value(value(blockInfoByHeight(ha)).vrf)
1525- let av = toBytes(valueOrElse(getString(al(am)), ""))
1526- let hc = at(au, av, aw)
1527- $Tuple2(([DeleteEntry(hb)] ++ gD), hc)
1527+ let ax = value(value(blockInfoByHeight(hb)).vrf)
1528+ let aw = toBytes(valueOrElse(getString(al(am)), ""))
1529+ let hd = au(av, aw, ax)
1530+ $Tuple2(([DeleteEntry(hc)] ++ gE), hd)
15281531 }
15291532 }
15301533
15311534
15321535
1533-@Callable(ef)
1534-func activateArtifact (hd,he) = {
1535- let gD = gh(ef)
1536- if ((size(ef.payments) != 0))
1536+@Callable(eg)
1537+func activateArtifact (he,hf) = {
1538+ let gE = gi(eg)
1539+ if ((size(eg.payments) != 0))
15371540 then throw("No payments required")
15381541 else {
1539- let am = toString(ef.caller)
1540- let eg = {
1541- let g = hd
1542+ let am = toString(eg.caller)
1543+ let eh = {
1544+ let g = he
15421545 if (("PRESALE" == g))
1543- then ge(am, he)
1546+ then gf(am, hf)
15441547 else if (("ONBOARD" == g))
1545- then fX(am)
1548+ then fY(am)
15461549 else throw("Unknown artifact")
15471550 }
1548- (eg ++ gD)
1551+ (eh ++ gE)
15491552 }
15501553 }
15511554
15521555
15531556
1554-@Callable(ef)
1555-func saveWarehouse (fc,br) = if ((ef.caller != K))
1557+@Callable(eg)
1558+func saveWarehouse (fd,bs) = if ((eg.caller != K))
15561559 then throw("Access denied")
15571560 else {
1558- let eY = bq(br)
1559- let fd = split_4C(fc, ":")
1560- if ((size(fd) != 5))
1561+ let eZ = br(bs)
1562+ let fe = split_4C(fd, ":")
1563+ if ((size(fe) != 5))
15611564 then throw("warehouse string should contain 4 ':' separators")
15621565 else {
1563- let hf = split(fd[aX], "_")[aY]
1564- let fM = eJ(fd)
1565- let hg = eH(fd[aT])
1566- let fN = ((hg - parseIntValue(hf)) - fM)
1567- if ((0 > fN))
1566+ let hg = split(fe[aY], "_")[aZ]
1567+ let fN = eK(fe)
1568+ let hh = eI(fe[aU])
1569+ let fO = ((hh - parseIntValue(hg)) - fN)
1570+ if ((0 > fO))
15681571 then throw("Operation leads to negative free warehouse space")
15691572 else {
1570- let hh = makeString_2C([fd[aT], fd[aU], fd[aV], fd[aW], makeString([hf, toString(fM), toString(fN), toString(hg)], "_")], ":")
1571- $Tuple2([StringEntry(eY, hh)], hh)
1573+ let hi = makeString_2C([fe[aU], fe[aV], fe[aW], fe[aX], makeString([hg, toString(fN), toString(fO), toString(hh)], "_")], ":")
1574+ $Tuple2([StringEntry(eZ, hi)], hi)
15721575 }
15731576 }
15741577 }
15751578
15761579
15771580
1578-@Callable(ef)
1579-func setCustomName (bj,hi,bn) = {
1580- let gD = gh(ef)
1581- if ((size(ef.payments) != 1))
1581+@Callable(eg)
1582+func setCustomName (bk,hj,bo) = {
1583+ let gE = gi(eg)
1584+ if ((size(eg.payments) != 1))
15821585 then throw("Exactly one payment required")
15831586 else {
1584- let gE = value(ef.payments[0])
1585- if ((gE.assetId != h))
1587+ let gF = value(eg.payments[0])
1588+ if ((gF.assetId != h))
15861589 then throw("Allowed USDT payment only!")
1587- else if ((gE.amount != cx))
1588- then throw(("Payment should be " + toString(cx)))
1589- else if (contains(hi, "__"))
1590- then throw(("Name should not contain '__': " + hi))
1591- else if ((size(hi) > cy))
1592- then throw(("Name too long, maxLength=" + toString(cy)))
1590+ else if ((gF.amount != cy))
1591+ then throw(("Payment should be " + toString(cy)))
1592+ else if (contains(hj, "__"))
1593+ then throw(("Name should not contain '__': " + hj))
1594+ else if ((size(hj) > cz))
1595+ then throw(("Name too long, maxLength=" + toString(cz)))
15931596 else {
1594- let am = toString(ef.originCaller)
1595- let hj = {
1596- let g = bn
1597+ let am = toString(eg.originCaller)
1598+ let hk = {
1599+ let g = bo
15971600 if (("ACCOUNT" == g))
15981601 then {
1599- let hk = cG(hi)
1600- let hl = getString(hk)
1601- if (isDefined(hl))
1602- then throw(("Name already registered: " + hi))
1602+ let hl = cH(hj)
1603+ let hm = getString(hl)
1604+ if (isDefined(hm))
1605+ then throw(("Name already registered: " + hj))
16031606 else {
1604- let hm = bu(am)
1605- let hn = getString(hm)
1606- let ho = if (isDefined(hn))
1607- then [DeleteEntry(cG(value(hn)))]
1607+ let hn = bv(am)
1608+ let ho = getString(hn)
1609+ let hp = if (isDefined(ho))
1610+ then [DeleteEntry(cH(value(ho)))]
16081611 else nil
1609- (((ho :+ StringEntry(hm, hi)) :+ StringEntry(hk, am)) ++ fW(am, ck)._1)
1612+ (((hp :+ StringEntry(hn, hj)) :+ StringEntry(hl, am)) ++ fX(am, cl)._1)
16101613 }
16111614 }
16121615 else if (("LAND" == g))
16131616 then {
1614- let fv = value(assetInfo(fromBase58String(bj)))
1615- let fw = bl(bj)
1616- if (!(isDefined(getInteger(fw))))
1617- then throw((fv.name + " is not staked"))
1617+ let fw = value(assetInfo(fromBase58String(bk)))
1618+ let fx = bm(bk)
1619+ if (!(isDefined(getInteger(fx))))
1620+ then throw((fw.name + " is not staked"))
16181621 else {
1619- let fy = valueOrErrorMessage(getString(bi(bj)), (("NFT " + fv.name) + " is orphaned"))
1620- if ((fy != am))
1621- then throw((az + " is not yours"))
1622+ let fz = valueOrErrorMessage(getString(bj(bk)), (("NFT " + fw.name) + " is orphaned"))
1623+ if ((fz != am))
1624+ then throw((aA + " is not yours"))
16221625 else {
1623- let hk = cA(hi)
1624- let hl = getString(hk)
1625- if (isDefined(hl))
1626- then throw(("Name already registered: " + hi))
1626+ let hl = cB(hj)
1627+ let hm = getString(hl)
1628+ if (isDefined(hm))
1629+ then throw(("Name already registered: " + hj))
16271630 else {
1628- let hp = bk(bj)
1629- let hn = getString(hp)
1630- let ho = if (isDefined(hn))
1631- then [DeleteEntry(cA(value(hn)))]
1631+ let hq = bl(bk)
1632+ let ho = getString(hq)
1633+ let hp = if (isDefined(ho))
1634+ then [DeleteEntry(cB(value(ho)))]
16321635 else nil
1633- (((ho :+ StringEntry(hp, hi)) :+ StringEntry(hk, bj)) ++ fW(am, ck)._1)
1636+ (((hp :+ StringEntry(hq, hj)) :+ StringEntry(hl, bk)) ++ fX(am, cl)._1)
16341637 }
16351638 }
16361639 }
16371640 }
16381641 else if (("DUCK" == g))
16391642 then {
1640- let fv = value(assetInfo(fromBase58String(bj)))
1641- let fw = bl(bj)
1642- if (if (!(isDefined(getInteger(fw))))
1643+ let fw = value(assetInfo(fromBase58String(bk)))
1644+ let fx = bm(bk)
1645+ if (if (!(isDefined(getInteger(fx))))
16431646 then true
1644- else !(isDefined(getString(bB(am)))))
1645- then throw((fv.name + " is not staked"))
1647+ else !(isDefined(getString(bC(am)))))
1648+ then throw((fw.name + " is not staked"))
16461649 else {
1647- let fy = valueOrErrorMessage(getString(bA(bj)), (("NFT " + fv.name) + " is orphaned"))
1648- if ((fy != am))
1649- then throw((aA + " is not yours"))
1650+ let fz = valueOrErrorMessage(getString(bB(bk)), (("NFT " + fw.name) + " is orphaned"))
1651+ if ((fz != am))
1652+ then throw((aB + " is not yours"))
16501653 else {
1651- let hk = cF(hi)
1652- let hl = getString(hk)
1653- if (isDefined(hl))
1654- then throw(("Name already registered: " + hi))
1654+ let hl = cG(hj)
1655+ let hm = getString(hl)
1656+ if (isDefined(hm))
1657+ then throw(("Name already registered: " + hj))
16551658 else {
1656- let hp = bt(bj)
1657- let hn = getString(hp)
1658- let ho = if (isDefined(hn))
1659- then [DeleteEntry(cF(value(hn)))]
1659+ let hq = bu(bk)
1660+ let ho = getString(hq)
1661+ let hp = if (isDefined(ho))
1662+ then [DeleteEntry(cG(value(ho)))]
16601663 else nil
1661- (((ho :+ StringEntry(hp, hi)) :+ StringEntry(hk, bj)) ++ fV(bj, ck)._1)
1664+ (((hp :+ StringEntry(hq, hj)) :+ StringEntry(hl, bk)) ++ fW(bk, cl)._1)
16621665 }
16631666 }
16641667 }
16651668 }
16661669 else throw("Unknown entity type")
16671670 }
1668- $Tuple2(((hj :+ ScriptTransfer(K, gE.amount, h)) ++ gD), 0)
1671+ $Tuple2(((hk :+ ScriptTransfer(K, gF.amount, h)) ++ gE), 0)
16691672 }
16701673 }
16711674 }
16721675
16731676
16741677
1675-@Callable(ef)
1676-func setReferrals (hq,hr) = if ((ef.callerPublicKey != f))
1678+@Callable(eg)
1679+func setReferrals (hr,hs) = if ((eg.callerPublicKey != f))
16771680 then throw("Permission denied")
16781681 else {
1679- let gD = gh(ef)
1680- if ((size(ef.payments) != 0))
1682+ let gE = gi(eg)
1683+ if ((size(eg.payments) != 0))
16811684 then throw("No payments required")
1682- else if (!(isDefined(addressFromString(hq))))
1683- then throw(("Invalid address: " + hq))
1685+ else if (!(isDefined(addressFromString(hr))))
1686+ then throw(("Invalid address: " + hr))
16841687 else {
1685- let hs = addressFromString(hr)
1686- if (!(isDefined(hs)))
1687- then throw(("Invalid address: " + hr))
1688+ let ht = addressFromString(hs)
1689+ if (!(isDefined(ht)))
1690+ then throw(("Invalid address: " + hs))
16881691 else {
1689- let ht = getString(al(hq))
1690- if (!(isDefined(ht)))
1692+ let hu = getString(al(hr))
1693+ if (!(isDefined(hu)))
16911694 then throw("oldPlayer didn't do any tx in game")
1692- else if ((0 >= wavesBalance(value(hs)).available))
1695+ else if ((0 >= wavesBalance(value(ht)).available))
16931696 then throw("newPlayer has no WAVES")
16941697 else {
1695- let hu = cH()
1696- let hv = getString(hu)
1697- let hw = if (isDefined(hv))
1698- then split_4C(value(hv), "_")
1698+ let hv = cI()
1699+ let hw = getString(hv)
1700+ let hx = if (isDefined(hw))
1701+ then split_4C(value(hw), "_")
16991702 else nil
1700- if (containsElement(hw, hr))
1701- then throw((hr + " is not newbie (already has referrals)"))
1703+ if (containsElement(hx, hs))
1704+ then throw((hs + " is not newbie (already has referrals)"))
17021705 else {
1703- let fY = bv(hr)
1704- let fZ = getString(fY)
1705- if (if (isDefined(fZ))
1706- then isDefined(addressFromString(value(fZ)))
1706+ let fZ = bw(hs)
1707+ let ga = getString(fZ)
1708+ if (if (isDefined(ga))
1709+ then isDefined(addressFromString(value(ga)))
17071710 else false)
1708- then throw(((hr + " already has refBy: ") + value(fZ)))
1711+ then throw(((hs + " already has refBy: ") + value(ga)))
17091712 else {
1710- let hx = bz(hq)
1711- let hy = getString(hx)
1712- let hz = if (isDefined(hy))
1713- then split_4C(value(hy), "_")
1713+ let hy = bA(hr)
1714+ let hz = getString(hy)
1715+ let hA = if (isDefined(hz))
1716+ then split_4C(value(hz), "_")
17141717 else nil
1715- if (containsElement(hz, hr))
1716- then throw((((hq + " already contains ") + hr) + " within referrals"))
1718+ if (containsElement(hA, hs))
1719+ then throw((((hr + " already contains ") + hs) + " within referrals"))
17171720 else {
1718- let hA = makeString_2C((hz :+ hr), "_")
1719- let hB = if (containsElement(hw, hq))
1720- then value(hv)
1721- else makeString_2C((hw :+ hq), "_")
1722- $Tuple2(([StringEntry(fY, hq), StringEntry(hx, hA), StringEntry(hu, hB)] ++ gD), 0)
1721+ let hB = makeString_2C((hA :+ hs), "_")
1722+ let hC = if (containsElement(hx, hr))
1723+ then value(hw)
1724+ else makeString_2C((hx :+ hr), "_")
1725+ $Tuple2(([StringEntry(fZ, hr), StringEntry(hy, hB), StringEntry(hv, hC)] ++ gE), 0)
17231726 }
17241727 }
17251728 }
17261729 }
17271730 }
17281731 }
17291732 }
17301733
17311734
17321735
1733-@Callable(ef)
1734-func distributePoints (hC,hD,hE,hF,hG) = {
1735- let gD = gh(ef)
1736- if ((size(ef.payments) != 0))
1736+@Callable(eg)
1737+func distributePoints (hD,hE,hF,hG,hH) = {
1738+ let gE = gi(eg)
1739+ if ((size(eg.payments) != 0))
17371740 then throw("No payments required")
17381741 else {
1739- let am = toString(ef.originCaller)
1740- let hH = ag(invoke(M, "checkWlgXpREADONLY", [am], nil))
1741- let hI = ad(hH[1])
1742- let hJ = if ((0 >= hI))
1742+ let am = toString(eg.originCaller)
1743+ let hI = ag(invoke(M, "checkWlgXpREADONLY", [am], nil))
1744+ let hJ = ad(hI[1])
1745+ let hK = if ((0 >= hJ))
17431746 then $Tuple2(0, nil)
17441747 else {
1745- let fT = ad(invoke(M, "takeWlgXp", [am], nil))
1746- if ((fT == fT))
1747- then $Tuple2(hI, [IntegerEntry(cc(am), ad(hH[0])), IntegerEntry(cb(am), ad(hH[2]))])
1748+ let fU = ad(invoke(M, "takeWlgXp", [am], nil))
1749+ if ((fU == fU))
1750+ then $Tuple2(hJ, [IntegerEntry(cd(am), ad(hI[0])), IntegerEntry(cc(am), ad(hI[2]))])
17481751 else throw("Strict value is not equal to itself.")
17491752 }
1750- let hK = hJ._1
1751- let hL = hJ._2
1752- let bx = valueOrErrorMessage(getString(bB(am)), "You don't have a duck staked")
1753- let hM = cd(am)
1754- let hN = (valueOrElse(getInteger(hM), 0) + hK)
1755- let hO = bZ(bx)
1756- let hP = valueOrElse(getInteger(hO), 0)
1757- let hQ = (hN + hP)
1758- let hR = ((((hC + hD) + hE) + hF) + hG)
1759- if ((hR > hQ))
1760- then throw((("There are only " + toString(hQ)) + " free points to distribute"))
1753+ let hL = hK._1
1754+ let hM = hK._2
1755+ let by = valueOrErrorMessage(getString(bC(am)), "You don't have a duck staked")
1756+ let hN = ce(am)
1757+ let hO = (valueOrElse(getInteger(hN), 0) + hL)
1758+ let hP = ca(by)
1759+ let hQ = valueOrElse(getInteger(hP), 0)
1760+ let hR = (hO + hQ)
1761+ let hS = ((((hD + hE) + hF) + hG) + hH)
1762+ if ((hS > hR))
1763+ then throw((("There are only " + toString(hR)) + " free points to distribute"))
17611764 else {
1762- let hS = bW(bx)
1763- let hT = split(valueOrElse(getString(hS), "0_0_0_0_0"), "_")
1764- let hU = (hN - hR)
1765- $Tuple2((([IntegerEntry(hM, if ((0 > hU))
1765+ let hT = bX(by)
1766+ let hU = split(valueOrElse(getString(hT), "0_0_0_0_0"), "_")
1767+ let hV = (hO - hS)
1768+ $Tuple2((([IntegerEntry(hN, if ((0 > hV))
17661769 then 0
1767- else hU), IntegerEntry(hO, if ((0 > hU))
1768- then (hP + hU)
1769- else hP), StringEntry(hS, makeString([toString((parseIntValue(hT[bN]) + hC)), toString((parseIntValue(hT[bO]) + hD)), toString((parseIntValue(hT[bP]) + hE)), toString((parseIntValue(hT[bQ]) + hF)), toString((parseIntValue(hT[bR]) + hG))], "_"))] ++ gD) ++ hL), 0)
1770+ else hV), IntegerEntry(hP, if ((0 > hV))
1771+ then (hQ + hV)
1772+ else hQ), StringEntry(hT, makeString([toString((parseIntValue(hU[bO]) + hD)), toString((parseIntValue(hU[bP]) + hE)), toString((parseIntValue(hU[bQ]) + hF)), toString((parseIntValue(hU[bR]) + hG)), toString((parseIntValue(hU[bS]) + hH))], "_"))] ++ gE) ++ hM), 0)
17701773 }
17711774 }
17721775 }
17731776
17741777
17751778
1776-@Callable(ef)
1777-func splitByGlobalWeightsREADONLY (fB) = $Tuple2(nil, da(fB))
1779+@Callable(eg)
1780+func splitByGlobalWeightsREADONLY (fC) = $Tuple2(nil, db(fC))
17781781
17791782
17801783
1781-@Callable(ef)
1782-func splitByGlobalAndLocalWeightsREADONLY (hV,hW,ej) = {
1783- let eb = ei(ej)
1784- $Tuple2(nil, $Tuple2(da(hV), cL(hW, eb)))
1784+@Callable(eg)
1785+func splitByGlobalAndLocalWeightsREADONLY (hW,hX,ek) = {
1786+ let ec = ej(ek)
1787+ $Tuple2(nil, $Tuple2(db(hW), cM(hX, ec)))
17851788 }
17861789
17871790
17881791
1789-@Callable(ef)
1790-func getBackpackREADONLY (bx) = $Tuple2(nil, makeString(eE(bC(bx)), ":"))
1792+@Callable(eg)
1793+func getBackpackREADONLY (by) = $Tuple2(nil, makeString(eF(bD(by)), ":"))
17911794
17921795
17931796
1794-@Callable(ef)
1795-func getWarehouseREADONLY (br) = {
1796- let fv = value(assetInfo(fromBase58String(br)))
1797- let eZ = (ai(split(fv.description, "_")[Q]) / o)
1798- let fa = valueOrElse(getInteger(bs(br)), 0)
1799- $Tuple2(nil, makeString_2C(eX(bq(br), eZ, fa), ":"))
1797+@Callable(eg)
1798+func getWarehouseREADONLY (bs) = {
1799+ let fw = value(assetInfo(fromBase58String(bs)))
1800+ let fa = (ai(split(fw.description, "_")[Q]) / o)
1801+ let fb = valueOrElse(getInteger(bt(bs)), 0)
1802+ $Tuple2(nil, makeString_2C(eY(br(bs), fa, fb), ":"))
18001803 }
18011804
18021805
18031806
1804-@Callable(ef)
1805-func saveLastTx () = if (!(containsElement([M, K, N, O], ef.caller)))
1807+@Callable(eg)
1808+func saveLastTx () = if (!(containsElement([M, K, N, O], eg.caller)))
18061809 then throw("Access denied")
1807- else $Tuple2(gh(ef), 42)
1810+ else $Tuple2(gi(eg), 42)
18081811
18091812
18101813
1811-@Callable(ef)
1812-func updateDuckStats (bx,fT) = if ((ef.caller != K))
1814+@Callable(eg)
1815+func updateDuckStats (by,fU) = if ((eg.caller != K))
18131816 then throw("Access denied")
1814- else fV(bx, fT)
1817+ else fW(by, fU)
18151818
18161819
18171820
1818-@Callable(ef)
1819-func updateAccStats (am,fT) = if (!(containsElement([M, K, O], ef.caller)))
1821+@Callable(eg)
1822+func updateAccStats (am,fU) = if (!(containsElement([M, K, O], eg.caller)))
18201823 then throw("Access denied")
1821- else fW(am, fT)
1824+ else fX(am, fU)
18221825
18231826
18241827
1825-@Callable(ef)
1826-func initDuckTourAttempt (bx) = if ((ef.caller != N))
1828+@Callable(eg)
1829+func initDuckTourAttempt (by) = if ((eg.caller != N))
18271830 then throw("Access denied")
18281831 else {
1829- let hX = bV(bx)
1830- let hY = co(valueOrElse(getInteger(bY(bx)), 0))
1831- let hZ = valueOrElse(getInteger(hX), hY)
1832- let ia = bD(bx)
1833- let fs = valueOrElse(getString(ia), aH)
1834- let ib = valueOrElse(getInteger(N, bH), 0)
1835- let ic = (toString(ib) + "_T_0")
1836- $Tuple2([IntegerEntry(ce(bx), hZ), IntegerEntry(hX, hY), StringEntry(cf(bx), fs), StringEntry(ia, ic)], ic)
1832+ let hY = bW(by)
1833+ let hZ = cp(valueOrElse(getInteger(bZ(by)), 0))
1834+ let ia = valueOrElse(getInteger(hY), hZ)
1835+ let ib = bE(by)
1836+ let ft = valueOrElse(getString(ib), aI)
1837+ let ic = valueOrElse(getInteger(N, bI), 0)
1838+ let id = (toString(ic) + "_T_0")
1839+ $Tuple2([IntegerEntry(cf(by), ia), IntegerEntry(hY, hZ), StringEntry(cg(by), ft), StringEntry(ib, id)], id)
18371840 }
18381841
18391842
18401843
1841-@Callable(ef)
1844+@Callable(eg)
18421845 func breakAttempt () = {
1843- let gD = gh(ef)
1844- let bx = valueOrErrorMessage(getString(bB(toString(ef.caller))), "You don't have a duck staked")
1845- let ia = bD(bx)
1846- let fs = valueOrElse(getString(ia), aH)
1847- if ((split(fs, "_")[bg] != "T"))
1846+ let gE = gi(eg)
1847+ let by = valueOrErrorMessage(getString(bC(toString(eg.caller))), "You don't have a duck staked")
1848+ let ib = bE(by)
1849+ let ft = valueOrElse(getString(ib), aI)
1850+ if ((split(ft, "_")[bh] != "T"))
18481851 then throw("Your duck is not in the tournament")
18491852 else {
1850- let id = getIntegerValue(ce(bx))
1851- let ie = getStringValue(cf(bx))
1852- $Tuple2(((gD :+ IntegerEntry(bV(bx), id)) :+ StringEntry(ia, ie)), fs)
1853+ let ie = getIntegerValue(cf(by))
1854+ let if = getStringValue(cg(by))
1855+ $Tuple2(((gE :+ IntegerEntry(bW(by), ie)) :+ StringEntry(ib, if)), ft)
18531856 }
18541857 }
18551858
18561859
18571860
1858-@Callable(ef)
1859-func breakAttemptCallback () = if ((ef.caller != N))
1861+@Callable(eg)
1862+func breakAttemptCallback () = if ((eg.caller != N))
18601863 then throw("Access denied")
18611864 else {
1862- let bx = valueOrErrorMessage(getString(bB(toString(ef.originCaller))), "You don't have a duck staked")
1863- $Tuple2([IntegerEntry(bV(bx), getIntegerValue(ce(bx))), StringEntry(bD(bx), getStringValue(cf(bx)))], "breakAttemptCallback")
1865+ let by = valueOrErrorMessage(getString(bC(toString(eg.originCaller))), "You don't have a duck staked")
1866+ $Tuple2([IntegerEntry(bW(by), getIntegerValue(cf(by))), StringEntry(bE(by), getStringValue(cg(by)))], "breakAttemptCallback")
18641867 }
18651868
18661869
18671870
1868-@Callable(ef)
1869-func exitTournamentInternal (bx) = if ((ef.caller != this))
1871+@Callable(eg)
1872+func exitTournamentInternal (by) = if ((eg.caller != this))
18701873 then throw("Access denied")
18711874 else {
1872- let id = getIntegerValue(ce(bx))
1873- let ie = getStringValue(cf(bx))
1874- $Tuple2([IntegerEntry(bV(bx), id), StringEntry(bD(bx), ie)], false)
1875+ let ie = getIntegerValue(cf(by))
1876+ let if = getStringValue(cg(by))
1877+ $Tuple2([IntegerEntry(bW(by), ie), StringEntry(bE(by), if)], false)
18751878 }
18761879
18771880
18781881
1879-@Callable(ef)
1880-func processDelivery (bx) = if ((ef.caller != this))
1882+@Callable(eg)
1883+func processDelivery (by) = if ((eg.caller != this))
18811884 then throw("Access denied")
18821885 else {
1883- let am = toString(ef.originCaller)
1884- let if = valueOrElse(getInteger(K, bG), 0)
1885- if ((aJ > if))
1886- then throw(("Delivery is not available, fund=" + an(if, 6)))
1886+ let am = toString(eg.originCaller)
1887+ let ig = valueOrElse(getInteger(K, bH), 0)
1888+ if ((aK > ig))
1889+ then throw(("Delivery is not available, fund=" + ao(ig, 6)))
18871890 else {
1888- let gP = lastBlock.timestamp
1889- let ig = ch(am)
1890- let ih = valueOrElse(getInteger(ci(am)), 0)
1891- let ii = (gP / cu)
1892- let dB = if ((ih == ii))
1893- then valueOrElse(getInteger(ig), 0)
1891+ let gQ = lastBlock.timestamp
1892+ let ih = ci(am)
1893+ let ii = valueOrElse(getInteger(cj(am)), 0)
1894+ let ij = (gQ / cv)
1895+ let dC = if ((ii == ij))
1896+ then valueOrElse(getInteger(ih), 0)
18941897 else 0
1895- let ij = valueOrElse(getInteger(O, cw(am)), 0)
1896- let ik = (aL + (ij / aM))
1897- if ((dB >= ik))
1898- then throw((("You already used " + toString(ik)) + " delivery attempts for today"))
1898+ let ik = valueOrElse(getInteger(O, cx(am)), 0)
1899+ let il = (aM + (ik / aN))
1900+ if ((dC >= il))
1901+ then throw((("You already used " + toString(il)) + " delivery attempts for today"))
18991902 else {
1900- let il = cg(bx)
1901- let im = invoke(K, "sendDeliveryReward", [am], nil)
1902- $Tuple2([IntegerEntry(ig, (dB + 1)), IntegerEntry(ci(am), ii), IntegerEntry(il, (valueOrElse(getInteger(il), 0) + 1))], im)
1903+ let im = ch(by)
1904+ let in = invoke(K, "sendDeliveryReward", [am], nil)
1905+ $Tuple2([IntegerEntry(ih, (dC + 1)), IntegerEntry(cj(am), ij), IntegerEntry(im, (valueOrElse(getInteger(im), 0) + 1))], in)
19031906 }
19041907 }
19051908 }
19061909
19071910

github/deemru/w8io/169f3d6 
910.73 ms