tx · FNoUAhR4Jd6Cws7YJJBDr7LWhpyYMhcU75PUQFudZJ6X

3N8y4wxX3JC4TdrCJBXX16SjWf6X256hrep:  -0.03200000 Waves

2023.05.29 02:57 [2598507] smart account 3N8y4wxX3JC4TdrCJBXX16SjWf6X256hrep > SELF 0.00000000 Waves

{ "type": 13, "id": "FNoUAhR4Jd6Cws7YJJBDr7LWhpyYMhcU75PUQFudZJ6X", "fee": 3200000, "feeAssetId": null, "timestamp": 1685318253925, "version": 2, "chainId": 84, "sender": "3N8y4wxX3JC4TdrCJBXX16SjWf6X256hrep", "senderPublicKey": "7v5L7QkXxfkirALdyqmox38QCsa9jtfAtgUfHTh34eWq", "proofs": [ "21YTp34BH6MAp2AFefih32WRxCzukzCpk9saAfK6aMz2tU5huU2A1GLzXRXdmqQJwjV1jgVF9YWgjdG6hwxsuciz" ], "script": "base64:BgIrCAISAwoBCBIECgIRERIECgIRERIDCgEREgQKAgEBEgQKAggIEgUKAwgICFoAA1NFUAICX18ABU1VTFQ2AMCEPQAFTVVMVDcAgK3iBAAFTVVMVDgAgMLXLwAGTVVMVDEwAIDIr6AlAAVjaGFpbgkAyQECCQDKAQIIBQR0aGlzBWJ5dGVzAAEAAQALdXNkdEFzc2V0SWQEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDABIITaerIIAz9O0bvKju6Lk7zJgt0LXfoHlqjUI/moD/+5AwkAAAIBAVQFByRtYXRjaDABIFWx2J9yh4Lv5eNbjawFq2XemkOhLxa7BfMat4el8cUYCQACAQINVW5rbm93biBjaGFpbgAVZGVmYXVsdFJlc3RBZGRyZXNzU3RyBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwAiMzUFFDdXZGYnZoNExrUFVucm5VMXozam5iQTFwOW0zV05odgMJAAACAQFUBQckbWF0Y2gwAiMzTXVta0dHenRDS0FYcFdEcXhrZGRvZnFYU1VicVFrdlNKeQkAAgECDVVua25vd24gY2hhaW4BD2dldFN0cmluZ09yRmFpbAIHYWRkcmVzcwNrZXkJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQdhZGRyZXNzBQNrZXkJALkJAgkAzAgCAgptYW5kYXRvcnkgCQDMCAIJAKUIAQUHYWRkcmVzcwkAzAgCAgEuCQDMCAIFA2tleQkAzAgCAg8gaXMgbm90IGRlZmluZWQFA25pbAIAAQxnZXRJbnRPckVsc2UCA2tleQpkZWZhdWx0VmFsCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFA2tleQUKZGVmYXVsdFZhbAARSWR4Q2ZnU3Rha2luZ0RhcHAAAQARSWR4Q2ZnRWNvbm9teURhcHAAAgAUSWR4Q2ZnR292ZXJuYW5jZURhcHAAAwEKa2V5UmVzdENmZwACDiVzX19yZXN0Q29uZmlnAQ5rZXlSZXN0QWRkcmVzcwACDCVzX19yZXN0QWRkcgERcmVhZFJlc3RDZmdPckZhaWwBBHJlc3QJALwJAgkBD2dldFN0cmluZ09yRmFpbAIFBHJlc3QJAQprZXlSZXN0Q2ZnAAUDU0VQARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCB3Jlc3RDZmcDaWR4CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkAkQMCBQdyZXN0Q2ZnBQNpZHgJAKwCAgIqUmVzdCBjZmcgZG9lc24ndCBjb250YWluIGFkZHJlc3MgYXQgaW5kZXggCQCkAwEFA2lkeAAMcmVzdENvbnRyYWN0CQERQGV4dHJOYXRpdmUoMTA2MikBCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMJAQ5rZXlSZXN0QWRkcmVzcwAFFWRlZmF1bHRSZXN0QWRkcmVzc1N0cgAHcmVzdENmZwkBEXJlYWRSZXN0Q2ZnT3JGYWlsAQUMcmVzdENvbnRyYWN0AA9zdGFraW5nQ29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQdyZXN0Q2ZnBRFJZHhDZmdTdGFraW5nRGFwcAAPREVGQVVMVExPQ0FUSU9OAg9BZnJpY2FfRl9BZnJpY2EABk5VTVJFUwAGABNGQUNUT1JZTUFYV0FSRUhPVVNFAIDIr6AlABBSRVNPVVJDRVBSSUNFTUlOANW1AgAKTUlOUEFZTUVOVACQTgAOU0VMTE1VTFRJUExJRVIAyAEADUJVWU1VTFRJUExJRVIArAIACkxBTkRQUkVGSVgCBExBTkQACkRVQ0tQUkVGSVgCBERVQ0sADFdITVVMVElQTElFUgCAyK+gJQAKQVVDVElPTkZFRQCQTgAOTUlOU0hPUFBBWU1FTlQAoI0GAAhyZXNUeXBlcwkAzAgCAgNPaWwJAMwIAgIDT3JlCQDMCAICBFdvb2QJAMwIAgIEU2FuZAkAzAgCAgRDbGF5CQDMCAICB09yZ2FuaWMFA25pbAAIbWF0VHlwZXMJAMwIAgIERnVlbAkAzAgCAgVNZXRhbAkAzAgCAgVQbGFuawkAzAgCAgVHbGFzcwkAzAgCAgdQbGFzdGljCQDMCAICB1Byb3RlaW4FA25pbAAJcHJvZFR5cGVzCQDMCAICDUZpcnN0IEFpZCBLaXQJAMwIAgIIQmFja3BhY2sJAMwIAgILRm9vZCBSYXRpb24JAMwIAgIISmV0IFBhY2sJAMwIAgIGU2hpZWxkBQNuaWwACmNvbnRpbmVudHMJAMwIAgIIQW1lcmljYXMJAMwIAgIGRXVyb3BlCQDMCAICBEFzaWEJAMwIAgIGQWZyaWNhCQDMCAICB09jZWFuaWEFA25pbAAQcHJvZHVjdGlvbk1hdHJpeAkAzAgCAhIxXzFfMV8yXzJfNV8xXzEwXzAJAMwIAgITMl8yXzJfNF80XzEwXzFfMTBfMAkAzAgCAhMzXzNfM182XzZfMTVfMV8xMF8wCQDMCAICEzJfNV81XzJfN181XzJfMTAwXzEJAMwIAgIXNF8xMF8xMF80XzE0XzEwXzJfMTAwXzEJAMwIAgIXNl8xNV8xNV82XzIxXzE1XzJfMTAwXzEJAMwIAgISMV8xXzFfMV8xXzhfMV8xMF8yCQDMCAICEzJfMl8yXzJfMl8xNl8xXzEwXzIJAMwIAgITM18zXzNfM18zXzI0XzFfMTBfMgkAzAgCAhM5XzlfMV81XzVfMV81XzEwMF8zCQDMCAICFzE4XzE4XzJfMTBfMTBfMl81XzEwMF8zCQDMCAICFzI3XzI3XzNfMTVfMTVfM181XzEwMF8zCQDMCAICEjJfMl8xXzJfMl8yXzFfMTBfNAkAzAgCAhI0XzRfMl80XzRfNF8xXzEwXzQJAMwIAgISNl82XzNfNl82XzZfMV8xMF80BQNuaWwAD2NvbnRJZHhBbWVyaWNhcwAAAA1jb250SWR4RXVyb3BlAAEAC2NvbnRJZHhBc2lhAAIADWNvbnRJZHhBZnJpY2EAAwAOY29udElkeE9jZWFuaWEABAANcmVjaXBlSWR4RnVlbAAAAA5yZWNpcGVJZHhNZXRhbAABAA5yZWNpcGVJZHhQbGFuawACAA5yZWNpcGVJZHhHbGFzcwADABByZWNpcGVJZHhQbGFzdGljAAQAEHJlY2lwZUlkeFByb3RlaW4ABQAPcmVjaXBlSWR4V2VpZ2h0AAYAEXJlY2lwZUlkeFBhY2tzaXplAAcAEnJlY2lwZUlkeENvbnRpbmVudAAIAR5rZXlGYWN0b3J5V2FyZWhvdXNlQnlJZEFuZFR5cGUCCWZhY3RvcnlJZAdyZXNUeXBlCQCsAgIJAKwCAgkArAICAhtmYWN0b3J5V2hCeUNvbnRpbmVudEFuZFJlc18FCWZhY3RvcnlJZAIBXwkApAMBBQdyZXNUeXBlAQ5rZXlPcmRlckJ5TGFuZAELbGFuZEFzc2V0SWQJAKwCAgIKbGFuZE9yZGVyXwULbGFuZEFzc2V0SWQBFGtleVN0YWtlZER1Y2tCeU93bmVyAQlvd25lckFkZHIJAKwCAgISc3Rha2VkRHVja0J5T3duZXJfBQlvd25lckFkZHIBEWtleUJhY2twYWNrQnlEdWNrAQtkdWNrQXNzZXRJZAkArAICAgliYWNrUGFja18FC2R1Y2tBc3NldElkAQ9rZXlEdWNrTG9jYXRpb24BC2R1Y2tBc3NldElkCQCsAgICDWR1Y2tMb2NhdGlvbl8FC2R1Y2tBc3NldElkAQprZXlCbG9ja2VkAAIQY29udHJhY3RzQmxvY2tlZAEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQdhc3NldElkCQCsAgICCW5mdE93bmVyXwUHYXNzZXRJZAEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEHYXNzZXRJZAkArAICAgtzdGFrZWRUaW1lXwUHYXNzZXRJZAEPa2V5QWRkcmVzc1JlZkJ5AQRhZGRyCQCsAgICCWFjY1JlZkJ5XwUEYWRkcgAPbG9jSWR4Q29udGluZW50AAAACmxvY0lkeFR5cGUAAQAIbG9jSWR4SWQAAgAKYnBJZHhMZXZlbAAAAAhicElkeFJlcwABAAhicElkeE1hdAACAAlicElkeFByb2QAAwALd2hJZHhMZXZlbHMAAAAId2hJZHhSZXMAAQAId2hJZHhNYXQAAgAJd2hJZHhQcm9kAAMACXdoSWR4TE9GVAAEAAl2b2xMb2NrZWQAAAALdm9sT2NjdXBpZWQAAQAHdm9sRnJlZQACAAh2b2xUb3RhbAADAAlvcmRJZHhSZXMAAAAJb3JkSWR4TWF0AAEACm9yZElkeFByb2QAAgEIYXNTdHJpbmcBAXYEByRtYXRjaDAFAXYDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFzBQckbWF0Y2gwBQFzCQACAQIYZmFpbCB0byBjYXN0IGludG8gU3RyaW5nAQhnZXRPcmRlcgEGb3JkS2V5BAFwCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAKIIAQUGb3JkS2V5AjAwQDBfMEAwXzBAMF8wQDBfMEAwXzBAMDowQDBfMEAwXzBAMF8wQDBfMEAwXzBAMDoCAToJAMwIAgMJAAACCQCQAwEJALUJAgkAkQMCBQFwBQlvcmRJZHhSZXMCAV8FBk5VTVJFUwkAkQMCBQFwBQlvcmRJZHhSZXMCFzBAMF8wQDBfMEAwXzBAMF8wQDBfMEAwCQDMCAIDCQAAAgkAkAMBCQC1CQIJAJEDAgUBcAUJb3JkSWR4TWF0AgFfBQZOVU1SRVMJAJEDAgUBcAUJb3JkSWR4TWF0AhcwQDBfMEAwXzBAMF8wQDBfMEAwXzBAMAkAzAgCCQCRAwIFAXAFCm9yZElkeFByb2QFA25pbAEIdG9Wb2x1bWUDBmFtb3VudAdwa2dTaXplCWlzUHJvZHVjdAMFCWlzUHJvZHVjdAQEcGtncwMJAGcCBQZhbW91bnQAAAkAaQIJAGUCCQBkAgUGYW1vdW50BQdwa2dTaXplAAEFB3BrZ1NpemUJAQEtAQkAaQIJAGUCCQBkAgkBAS0BBQZhbW91bnQFB3BrZ1NpemUAAQUHcGtnU2l6ZQkAaAIFBHBrZ3MFBU1VTFQ4BQZhbW91bnQBF2dldFdhcmVob3VzZVRvdGFsVm9sdW1lAQl2b2xQcmVmaXgEBXBhcnRzCQC1CQIFCXZvbFByZWZpeAIBXwkAaAIJAGgCBQxXSE1VTFRJUExJRVIJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcGFydHMAAQABCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcGFydHMAAAEbZ2V0V2FyZWhvdXNlQ3Vyckdvb2RzVm9sdW1lAQljdXJyZW50V2gEBWdvb2RzCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhQcm9kAwkAAAIFBWdvb2RzAgAAAAoBA3N1bQIDYWNjBGl0ZW0EA2lkeAgFA2FjYwJfMQQHcGtnU2l6ZQkBDXBhcnNlSW50VmFsdWUBCQCRAwIJALUJAgkAkQMCBRBwcm9kdWN0aW9uTWF0cml4BQNpZHgCAV8FEXJlY2lwZUlkeFBhY2tzaXplCQCUCgIJAGQCBQNpZHgAAQkAZAIIBQNhY2MCXzIJAQh0b1ZvbHVtZQMJAQ1wYXJzZUludFZhbHVlAQUEaXRlbQUHcGtnU2l6ZQYICgACJGwJALwJAgUFZ29vZHMCAV8KAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCUCgIAAAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQNzdW0CBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDUwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkAGgAbABwAHQAeAB8AIAAhACIAIwAkACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgJfMgEMc2VsbEludGVybmFsBAVsb2NJZAdyZXNUeXBlBmFtb3VudAhtaW5QcmljZQQFd2hLZXkJAR5rZXlGYWN0b3J5V2FyZWhvdXNlQnlJZEFuZFR5cGUCBQVsb2NJZAUHcmVzVHlwZQQCdzAJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUFd2hLZXkAAAQCcjADCQBmAgUCdzAFE0ZBQ1RPUllNQVhXQVJFSE9VU0UAAAMJAGYCCQBkAgUCdzAFBmFtb3VudAUTRkFDVE9SWU1BWFdBUkVIT1VTRQkAZQIFE0ZBQ1RPUllNQVhXQVJFSE9VU0UFAncwBQZhbW91bnQEDHVzZHRSZWNlaXZlZAkAZAIJAGsDBQJyMAkAZQIJAGgCBQ5TRUxMTVVMVElQTElFUgUQUkVTT1VSQ0VQUklDRU1JTgkAawMJAGQCCQBoAgBkBQJ3MAkAaAIAMgUCcjAFEFJFU09VUkNFUFJJQ0VNSU4FE0ZBQ1RPUllNQVhXQVJFSE9VU0UFBk1VTFQxMAkAawMJAGUCBQZhbW91bnQFAnIwBRBSRVNPVVJDRVBSSUNFTUlOBQVNVUxUOAQFbWluOTkJAGUCBQhtaW5QcmljZQkAaQIFCG1pblByaWNlAGQDCQBmAgkAaAIFBW1pbjk5BQZhbW91bnQJAGgCBQx1c2R0UmVjZWl2ZWQFBU1VTFQ4CQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAg9BY3R1YWwgcHJpY2UgPSAJAKQDAQUMdXNkdFJlY2VpdmVkAgMgLyAJAKQDAQUGYW1vdW50Ag4gPCBtaW5QcmljZSA9IAkApAMBBQhtaW5QcmljZQIDLCAoBQVsb2NJZAICLCAJAJEDAgUIcmVzVHlwZXMFB3Jlc1R5cGUCASkJAJQKAgkBDEludGVnZXJFbnRyeQIFBXdoS2V5CQBkAgUCdzAFBmFtb3VudAUMdXNkdFJlY2VpdmVkAQtidXlJbnRlcm5hbAQFbG9jSWQHbWF0VHlwZQZhbW91bnQIbWF4UHJpY2UEBXdoS2V5CQEea2V5RmFjdG9yeVdhcmVob3VzZUJ5SWRBbmRUeXBlAgUFbG9jSWQFB21hdFR5cGUEAncwCQELdmFsdWVPckVsc2UCCQCfCAEFBXdoS2V5AAAEAm0xAwkAZgIFAncwBRNGQUNUT1JZTUFYV0FSRUhPVVNFCQCXAwEJAMwIAgUGYW1vdW50CQDMCAIJAGUCBQJ3MAUTRkFDVE9SWU1BWFdBUkVIT1VTRQUDbmlsAAAEAm0wCQCXAwEJAMwIAgUCdzAJAMwIAgkAZQIFBmFtb3VudAUCbTEFA25pbAQBbQkAZAIFAm0wBQJtMQQJdXNkdFNwZW50CQBkAgkAawMFAm0wCQBlAgkAaAIFDUJVWU1VTFRJUExJRVIFEFJFU09VUkNFUFJJQ0VNSU4JAGsDCQBlAgkAaAIAZAUCdzAJAGgCADIFAm0wBRBSRVNPVVJDRVBSSUNFTUlOBRNGQUNUT1JZTUFYV0FSRUhPVVNFBQZNVUxUMTAJAGsDBQJtMQkAaAIAAgUQUkVTT1VSQ0VQUklDRU1JTgUFTVVMVDgEBm1heDEwMQkAZAIFCG1heFByaWNlCQBpAgUIbWF4UHJpY2UAZAMJAGYCCQBoAgUJdXNkdFNwZW50BQVNVUxUOAkAaAIFBm1heDEwMQUBbQkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIPQWN0dWFsIHByaWNlID0gCQCkAwEFCXVzZHRTcGVudAIDIC8gCQCkAwEFAW0CDiA+IG1heFByaWNlID0gCQCkAwEFCG1heFByaWNlAgMsICgFBWxvY0lkAgIsIAkAkQMCBQhtYXRUeXBlcwUHbWF0VHlwZQIBKQkAlQoDCQEMSW50ZWdlckVudHJ5AgUFd2hLZXkJAGUCBQJ3MAUBbQUJdXNkdFNwZW50BQFtAQtnZXRCYWNrcGFjawEFYnBLZXkEAXAJALUJAgkBC3ZhbHVlT3JFbHNlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QFBWJwS2V5AhowOjBfMF8wXzBfMF8wOjBfMF8wXzBfMF8wOgIBOgkAzAgCCQCkAwEJAQt2YWx1ZU9yRWxzZQIJALYJAQkAkQMCBQFwBQpicElkeExldmVsAAAJAMwIAgMJAAACCQCQAwEJALUJAgkAkQMCBQFwBQhicElkeFJlcwIBXwUGTlVNUkVTCQCRAwIFAXAFCGJwSWR4UmVzAgswXzBfMF8wXzBfMAkAzAgCAwkAAAIJAJADAQkAtQkCCQCRAwIFAXAFCGJwSWR4TWF0AgFfBQZOVU1SRVMJAJEDAgUBcAUIYnBJZHhNYXQCCzBfMF8wXzBfMF8wCQDMCAIJAJEDAgUBcAUJYnBJZHhQcm9kBQNuaWwBDGNoZWNrQmxvY2tlZAADCQELdmFsdWVPckVsc2UCCQCbCAIFD3N0YWtpbmdDb250cmFjdAkBCmtleUJsb2NrZWQABwkAAgECH0NvbnRyYWN0cyBhcmUgdW5kZXIgbWFpbnRlbmFuY2UFBHVuaXQBCXNldENvbW1vbgIDYWNjBGl0ZW0EAWoIBQNhY2MCXzEEBmlzUHJvZAgFA2FjYwJfNwQHcGtnU2l6ZQMFBmlzUHJvZAkBDXBhcnNlSW50VmFsdWUBCQCRAwIJALUJAgkAkQMCBRBwcm9kdWN0aW9uTWF0cml4BQFqAgFfBRFyZWNpcGVJZHhQYWNrc2l6ZQAABAlpdGVtUGFydHMJALUJAgUEaXRlbQIBQAMJAQIhPQIJAJADAQUJaXRlbVBhcnRzAAIJAAIBAi5JbmNvcnJlY3Qgb3JkZXIgZm9ybWF0LCBzaG91bGQgYmUgYW1vdW50QHByaWNlBAhuZXdPcmRBbQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCWl0ZW1QYXJ0cwAABAhuZXdPcmRQcgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCWl0ZW1QYXJ0cwABBAluZXdPcmRVc2QJAGsDBQhuZXdPcmRBbQUIbmV3T3JkUHIFBU1VTFQ4BAluZXdPcmRWb2wJAQh0b1ZvbHVtZQMFCG5ld09yZEFtBQdwa2dTaXplBQZpc1Byb2QEBndoSW5pdAMJAGYCCQCQAwEIBQNhY2MCXzUFAWoJAQ1wYXJzZUludFZhbHVlAQkAkQMCCAUDYWNjAl81BQFqAAAEC2N1ck9yZFBhcnRzCQC1CQIDCQBmAgkAkAMBCAUDYWNjAl82BQFqCQCRAwIIBQNhY2MCXzYFAWoCAzBAMAIBQAQIY3VyT3JkQW0JAQ1wYXJzZUludFZhbHVlAQkAkQMCBQtjdXJPcmRQYXJ0cwAABAhjdXJPcmRQcgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFC2N1ck9yZFBhcnRzAAEDAwkAZgIAAAUIY3VyT3JkUHIGCQBmAgAABQhuZXdPcmRQcgkAAgECF1ByaWNlIGNhbid0IGJlIG5lZ2F0aXZlBAljdXJPcmRVc2QJAGsDBQhjdXJPcmRBbQUIY3VyT3JkUHIFBU1VTFQ4BAljdXJPcmRWb2wJAQh0b1ZvbHVtZQMFCGN1ck9yZEFtBQdwa2dTaXplBQZpc1Byb2QDCQAAAgUIbmV3T3JkQW0AAAMJAGYCBQhjdXJPcmRBbQAACQCZCgcJAGQCBQFqAAEJAM0IAggFA2FjYwJfMgkApAMBBQZ3aEluaXQJAGUCCAUDYWNjAl8zBQljdXJPcmRWb2wJAGUCCAUDYWNjAl80BQljdXJPcmRVc2QIBQNhY2MCXzUIBQNhY2MCXzYFBmlzUHJvZAkAmQoHCQBkAgUBagABCQDNCAIIBQNhY2MCXzIJAKQDAQkAZQIFBndoSW5pdAUIY3VyT3JkQW0JAGQCCAUDYWNjAl8zBQljdXJPcmRWb2wIBQNhY2MCXzQIBQNhY2MCXzUIBQNhY2MCXzYFBmlzUHJvZAMJAGYCBQhuZXdPcmRBbQAAAwkAZgIAAAUIY3VyT3JkQW0JAJkKBwkAZAIFAWoAAQkAzQgCCAUDYWNjAl8yCQCkAwEJAGUCBQZ3aEluaXQFCGN1ck9yZEFtCQBkAgkAZAIIBQNhY2MCXzMFCW5ld09yZFZvbAUJY3VyT3JkVm9sCQBkAggFA2FjYwJfNAUJbmV3T3JkVXNkCAUDYWNjAl81CAUDYWNjAl82BQZpc1Byb2QJAJkKBwkAZAIFAWoAAQkAzQgCCAUDYWNjAl8yCQCkAwEFBndoSW5pdAkAZQIJAGQCCAUDYWNjAl8zBQluZXdPcmRWb2wFCWN1ck9yZFZvbAkAZQIJAGQCCAUDYWNjAl80BQluZXdPcmRVc2QFCWN1ck9yZFVzZAgFA2FjYwJfNQgFA2FjYwJfNgUGaXNQcm9kAwkAZgIAAAUIY3VyT3JkQW0EBmFtRGlmZgkAZQIFCGN1ck9yZEFtBQhuZXdPcmRBbQMJAGYCAAAJAGUCBQZ3aEluaXQFBmFtRGlmZgkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgIQQXR0ZW1wdCB0byB0YWtlIAkApAMBBQZhbURpZmYCGiBmcm9tIHdhcmVob3VzZSwgYnV0IG9ubHkgCQCkAwEFBndoSW5pdAIKIGF2YWlsYWJsZQkAmQoHCQBkAgUBagABCQDNCAIIBQNhY2MCXzIJAKQDAQkAZQIFBndoSW5pdAUGYW1EaWZmCQBlAgkAZAIIBQNhY2MCXzMFCWN1ck9yZFZvbAUJbmV3T3JkVm9sCAUDYWNjAl80CAUDYWNjAl81CAUDYWNjAl82BQZpc1Byb2QDCQBmAgAACQBkAgUGd2hJbml0BQhuZXdPcmRBbQkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgIQQXR0ZW1wdCB0byB0YWtlIAkApAMBCQEBLQEFCG5ld09yZEFtAhogZnJvbSB3YXJlaG91c2UsIGJ1dCBvbmx5IAkApAMBBQZ3aEluaXQCCiBhdmFpbGFibGUJAJkKBwkAZAIFAWoAAQkAzQgCCAUDYWNjAl8yCQCkAwEJAGQCBQZ3aEluaXQFCG5ld09yZEFtCQBlAgkAZQIIBQNhY2MCXzMFCW5ld09yZFZvbAUJY3VyT3JkVm9sCQBlAggFA2FjYwJfNAUJY3VyT3JkVXNkCAUDYWNjAl81CAUDYWNjAl82BQZpc1Byb2QBDGFjY2VwdENvbW1vbgIDYWNjCWJwT3JkSXRlbQQBaggFA2FjYwJfNwQGaXNQcm9kCAUDYWNjA18xMgQHcGtnU2l6ZQMFBmlzUHJvZAkBDXBhcnNlSW50VmFsdWUBCQCRAwIJALUJAgkAkQMCBRBwcm9kdWN0aW9uTWF0cml4BQFqAgFfBRFyZWNpcGVJZHhQYWNrc2l6ZQAABApicE9yZFBhcnRzCQC1CQIFCWJwT3JkSXRlbQIBQAMJAQIhPQIJAJADAQUKYnBPcmRQYXJ0cwACCQACAQIuSW5jb3JyZWN0IG9yZGVyIGZvcm1hdCwgc2hvdWxkIGJlIGFtb3VudEBwcmljZQQHYnBPcmRBbQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCmJwT3JkUGFydHMAAAQHYnBPcmRQcgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCmJwT3JkUGFydHMAAQMJAGYCAAAFB2JwT3JkUHIJAAIBAhdQcmljZSBjYW4ndCBiZSBuZWdhdGl2ZQQIYnBPcmRVc2QJAGsDBQdicE9yZEFtBQdicE9yZFByBQVNVUxUOAQGYnBJbml0CQENcGFyc2VJbnRWYWx1ZQEJAJEDAggFA2FjYwJfOAUBagQGd2hJbml0CQENcGFyc2VJbnRWYWx1ZQEJAJEDAggFA2FjYwJfOQUBagQKd2hPcmRQYXJ0cwkAtQkCCQCRAwIIBQNhY2MDXzEwBQFqAgFABAd3aE9yZEFtCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKd2hPcmRQYXJ0cwAABAd3aE9yZFByCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKd2hPcmRQYXJ0cwABAwMJAQIhPQIFB2JwT3JkQW0AAAkBAiE9AgUHYnBPcmRQcgUHd2hPcmRQcgcJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIKUHJpY2VzIG9mIAkAkQMCCAUDYWNjA18xMQUBagIXIGRvbid0IG1hdGNoISBXSCBwcmljZT0JAKQDAQUHd2hPcmRQcgINLCB5b3VyIHByaWNlPQkApAMBBQdicE9yZFByBAh3aE9yZFVzZAkAawMFB3doT3JkQW0FB3doT3JkUHIFBU1VTFQ4BAhkZWx0YVZvbAkBCHRvVm9sdW1lAwUHYnBPcmRBbQUHcGtnU2l6ZQUGaXNQcm9kAwkAAAIFB2JwT3JkQW0AAAkAnQoLCQDNCAIIBQNhY2MCXzEJAKQDAQUGd2hJbml0CQDNCAIIBQNhY2MCXzIJAJEDAggFA2FjYwNfMTAFAWoJAM0IAggFA2FjYwJfMwkApAMBBQZicEluaXQIBQNhY2MCXzQIBQNhY2MCXzUIBQNhY2MCXzYJAGQCCAUDYWNjAl83AAEIBQNhY2MCXzgIBQNhY2MCXzkIBQNhY2MDXzEwCAUDYWNjA18xMQMJAGYCBQdicE9yZEFtAAADCQBmAgAABQd3aE9yZEFtAwkAZgIFB2JwT3JkQW0JAQEtAQUHd2hPcmRBbQkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAg9BdHRlbXB0IHRvIGJ1eSAJAKQDAQUHYnBPcmRBbQIEIG9mIAkAkQMCCAUDYWNjA18xMQUBagIbLCBidXQgd2FyZWhvdXNlIG9ubHkgc2VsbHMgCQCkAwEJAQEtAQUHd2hPcmRBbQkAnQoLCQDNCAIIBQNhY2MCXzEJAKQDAQUGd2hJbml0CQDNCAIIBQNhY2MCXzIJAKwCAgkArAICCQCkAwEJAGQCBQd3aE9yZEFtBQdicE9yZEFtAgFACQCkAwEFB3doT3JkUHIJAM0IAggFA2FjYwJfMwkApAMBCQBkAgUGYnBJbml0BQdicE9yZEFtCQBkAggFA2FjYwJfNAUIZGVsdGFWb2wIBQNhY2MCXzUJAGQCCAUDYWNjAl82BQhicE9yZFVzZAkAZAIIBQNhY2MCXzcAAQgFA2FjYwJfOAgFA2FjYwJfOQgFA2FjYwNfMTAIBQNhY2MDXzExCQACAQkArAICCQCsAgICD0F0dGVtcHQgdG8gYnV5IAkAkQMCCAUDYWNjA18xMQUBagIgIHdoaWxlIHdhcmVob3VzZSBkb2Vzbid0IHNlbGwgaXQDCQBmAgUHd2hPcmRBbQAAAwkAZgIJAQEtAQUHYnBPcmRBbQUHd2hPcmRBbQkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhBBdHRlbXB0IHRvIHNlbGwgCQCkAwEJAQEtAQUHYnBPcmRBbQIEIG9mIAkAkQMCCAUDYWNjA18xMQUBagIaLCBidXQgd2FyZWhvdXNlIG9ubHkgYnV5cyAJAKQDAQUHd2hPcmRBbQMJAGYCCQEBLQEFB2JwT3JkQW0FBmJwSW5pdAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhBBdHRlbXB0IHRvIHNlbGwgCQCkAwEJAQEtAQUHYnBPcmRBbQIULCBidXQgeW91IG9ubHkgaGF2ZSAJAKQDAQUGYnBJbml0AgQgb2YgCQCRAwIIBQNhY2MDXzExBQFqCQCdCgsJAM0IAggFA2FjYwJfMQkApAMBCQBlAgUGd2hJbml0BQdicE9yZEFtCQDNCAIIBQNhY2MCXzIJAKwCAgkArAICCQCkAwEJAGQCBQd3aE9yZEFtBQdicE9yZEFtAgFACQCkAwEFB3doT3JkUHIJAM0IAggFA2FjYwJfMwkApAMBCQBkAgUGYnBJbml0BQdicE9yZEFtCQBlAggFA2FjYwJfNAUIZGVsdGFWb2wJAGUCCAUDYWNjAl81BQhicE9yZFVzZAgFA2FjYwJfNgkAZAIIBQNhY2MCXzcAAQgFA2FjYwJfOAgFA2FjYwJfOQgFA2FjYwNfMTAIBQNhY2MDXzExCQACAQkArAICCQCsAgICEEF0dGVtcHQgdG8gc2VsbCAJAJEDAggFA2FjYwNfMTEFAWoCHyB3aGlsZSB3YXJlaG91c2UgZG9lc24ndCBidXkgaXQHAWkBDWNvbnN0cnVjdG9yVjEBCHJlc3RBZGRyAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIRUGVybWlzc2lvbiBkZW5pZWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDmtleVJlc3RBZGRyZXNzAAUIcmVzdEFkZHIFA25pbAFpAQ1zZWxsUmVzb3VyY2VzAgdhbW91bnRzCW1pblByaWNlcwQHYmxvY2tlZAkBDGNoZWNrQmxvY2tlZAADCQAAAgUHYmxvY2tlZAUHYmxvY2tlZAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIqc2VsbFJlc291cmNlcyBkb2Vzbid0IHJlcXVpcmUgYW55IHBheW1lbnRzBAtjdXJMb2NhdGlvbgkAtQkCCQELdmFsdWVPckVsc2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkBQ9ERUZBVUxUTE9DQVRJT04CAV8DCQECIT0CCQCRAwIFC2N1ckxvY2F0aW9uBQpsb2NJZHhUeXBlAgFGCQACAQkArAICAi1EdWNrIGxvY2F0aW9uIHR5cGUgc2hvdWxkIGJlIEZhY3RvcnksIGJ1dCBpcyAJAJEDAgULY3VyTG9jYXRpb24FCmxvY0lkeFR5cGUEBWxvY0lkCQCRAwIFC2N1ckxvY2F0aW9uBQhsb2NJZHhJZAQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAdyZXNMaXN0CQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzAgFfCgEFYWRkZXICA2FjYwFqAwkAZgIJAJEDAgUHYW1vdW50cwUBagkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB3Jlc0xpc3QFAWoJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIJWW91IGhhdmUgCQCRAwIFB3Jlc0xpc3QFAWoCBCBvZiAJAJEDAgUIcmVzVHlwZXMFAWoCFCwgYnV0IHRyaWVkIHRvIHNlbGwgCQCkAwEJAJEDAgUHYW1vdW50cwUBagMJAGYCAAAJAJEDAgUHYW1vdW50cwUBagkAAgEJAKwCAgkArAICCQCsAgICJVlvdSB0cmllZCB0byBzZWxsIG5lZ2F0aXZlIGFtb3VudCBvZiAJAJEDAgUIcmVzVHlwZXMFAWoCAjogCQCkAwEJAJEDAgUHYW1vdW50cwUBagMJAGYCCQCRAwIFB2Ftb3VudHMFAWoAAAQBYgkBDHNlbGxJbnRlcm5hbAQFBWxvY0lkBQFqCQCRAwIFB2Ftb3VudHMFAWoJAJEDAgUJbWluUHJpY2VzBQFqCQCVCgMJAM0IAggFA2FjYwJfMQgFAWICXzEJAM0IAggFA2FjYwJfMgkApAMBCQBlAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB3Jlc0xpc3QFAWoJAJEDAgUHYW1vdW50cwUBagkAZAIIBQNhY2MCXzMIBQFiAl8yCQCVCgMIBQNhY2MCXzEJAM0IAggFA2FjYwJfMgkAkQMCBQdyZXNMaXN0BQFqCAUDYWNjAl8zBAZtZXJnZWQKAAIkbAkAzAgCAAAJAMwIAgABCQDMCAIAAgkAzAgCAAMJAMwIAgAECQDMCAIABQUDbmlsCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlQoDBQNuaWwFA25pbAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQVhZGRlcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgQHbmV3UGFjawkAuQkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAuQkCCAUGbWVyZ2VkAl8yAgFfCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0CQDMCAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAUDbmlsAgE6BAZyZXN1bHQJAQhhc1N0cmluZwEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag51cGRhdGVCYWNrcGFjawkAzAgCBQtkdWNrQXNzZXRJZAkAzAgCBQduZXdQYWNrBQNuaWwFA25pbAkAlAoCCQDNCAIIBQZtZXJnZWQCXzEJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcggFBm1lcmdlZAJfMwULdXNkdEFzc2V0SWQFBnJlc3VsdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQxidXlNYXRlcmlhbHMCB2Ftb3VudHMJbWF4UHJpY2VzBAdibG9ja2VkCQEMY2hlY2tCbG9ja2VkAAMJAAACBQdibG9ja2VkBQdibG9ja2VkBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQkApQgBCAUBaQZjYWxsZXICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAiJleGFjdGx5IDEgcGF5bWVudCBtdXN0IGJlIGF0dGFjaGVkBANwbXQJAJEDAggFAWkIcGF5bWVudHMAAAQDYW10CAUDcG10BmFtb3VudAQKcG10QXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCAUDcG10B2Fzc2V0SWQCHldBVkVTIGNhbid0IGJlIHVzZWQgYXMgcGF5bWVudAMJAQIhPQIFCnBtdEFzc2V0SWQFC3VzZHRBc3NldElkCQACAQITVVNEVCBwYXltZW50cyBvbmx5IQQLY3VyTG9jYXRpb24JALUJAgkBC3ZhbHVlT3JFbHNlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAUPREVGQVVMVExPQ0FUSU9OAgFfAwkBAiE9AgkAkQMCBQtjdXJMb2NhdGlvbgUKbG9jSWR4VHlwZQIBRgkAAgEJAKwCAgItRHVjayBsb2NhdGlvbiB0eXBlIHNob3VsZCBiZSBGYWN0b3J5LCBidXQgaXMgCQCRAwIFC2N1ckxvY2F0aW9uBQpsb2NJZHhUeXBlBAVsb2NJZAkAkQMCBQtjdXJMb2NhdGlvbgUIbG9jSWR4SWQEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBCQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQHbWF0TGlzdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAIBXwoBCG1VcGRhdGVyAgNhY2MBagMJAGYCAAAJAJEDAgUHYW1vdW50cwUBagkAAgEJAKwCAgkArAICCQCsAgICJFlvdSB0cmllZCB0byBidXkgbmVnYXRpdmUgYW1vdW50IG9mIAkAkQMCBQhtYXRUeXBlcwUBagICOiAJAKQDAQkAkQMCBQdhbW91bnRzBQFqAwkAZgIJAJEDAgUHYW1vdW50cwUBagAABAFiCQELYnV5SW50ZXJuYWwEBQVsb2NJZAUBagkAkQMCBQdhbW91bnRzBQFqCQCRAwIFCW1heFByaWNlcwUBagkAlQoDCQDNCAIIBQNhY2MCXzEIBQFiAl8xCQDNCAIIBQNhY2MCXzIJAKQDAQkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdtYXRMaXN0BQFqCAUBYgJfMwkAZAIIBQNhY2MCXzMIBQFiAl8yCQCVCgMIBQNhY2MCXzEJAM0IAggFA2FjYwJfMgkAkQMCBQdtYXRMaXN0BQFqCAUDYWNjAl8zBAZtZXJnZWQKAAIkbAkAzAgCAAAJAMwIAgABCQDMCAIAAgkAzAgCAAMJAMwIAgAECQDMCAIABQUDbmlsCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlQoDBQNuaWwFA25pbAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQhtVXBkYXRlcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgMJAGYCCAUGbWVyZ2VkAl8zBQNhbXQJAAIBCQCsAgIJAKwCAgkArAICAh9JbnN1ZmZpY2llbnQgcGF5bWVudCEgQXR0YWNoZWQ9CQCkAwEFA2FtdAILLCByZXF1aXJlZD0JAKQDAQgFBm1lcmdlZAJfMwQHbmV3UGFjawkAuQkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMJAMwIAgkAuQkCCAUGbWVyZ2VkAl8yAgFfCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAUDbmlsAgE6BAZyZXN1bHQJAQhhc1N0cmluZwEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag51cGRhdGVCYWNrcGFjawkAzAgCBQtkdWNrQXNzZXRJZAkAzAgCBQduZXdQYWNrBQNuaWwFA25pbAQEcmVzdAMJAGYCCQBlAgUDYW10CAUGbWVyZ2VkAl8zAAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyCQBlAgUDYW10CAUGbWVyZ2VkAl8zBQt1c2R0QXNzZXRJZAUDbmlsBQNuaWwEEGFjdGl2aXRpZXNBbW91bnQJAGkCCAUGbWVyZ2VkAl8zAGQJAJQKAgkAzQgCCQDOCAIIBQZtZXJnZWQCXzEFBHJlc3QJAQ5TY3JpcHRUcmFuc2ZlcgMFDHJlc3RDb250cmFjdAUQYWN0aXZpdGllc0Ftb3VudAULdXNkdEFzc2V0SWQFBnJlc3VsdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARFleGNoYW5nZVJlc291cmNlcwEHYW1vdW50cwQHYmxvY2tlZAkBDGNoZWNrQmxvY2tlZAADCQAAAgUHYmxvY2tlZAUHYmxvY2tlZAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIiZXhhY3RseSAxIHBheW1lbnQgbXVzdCBiZSBhdHRhY2hlZAQDcG10CQCRAwIIBQFpCHBheW1lbnRzAAAEA2FtdAgFA3BtdAZhbW91bnQECnBtdEFzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAggFA3BtdAdhc3NldElkAh5XQVZFUyBjYW4ndCBiZSB1c2VkIGFzIHBheW1lbnQDCQECIT0CBQpwbXRBc3NldElkBQt1c2R0QXNzZXRJZAkAAgECE1VTRFQgcGF5bWVudHMgb25seSEEC2N1ckxvY2F0aW9uCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQFD0RFRkFVTFRMT0NBVElPTgIBXwMJAQIhPQIJAJEDAgULY3VyTG9jYXRpb24FCmxvY0lkeFR5cGUCAUYJAAIBCQCsAgICLUR1Y2sgbG9jYXRpb24gdHlwZSBzaG91bGQgYmUgRmFjdG9yeSwgYnV0IGlzIAkAkQMCBQtjdXJMb2NhdGlvbgUKbG9jSWR4VHlwZQQFbG9jSWQJAJEDAgULY3VyTG9jYXRpb24FCGxvY0lkeElkBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEB3Jlc0xpc3QJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMCAV8EB21hdExpc3QJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQCAV8KAQlleGNoYW5nZXICA2FjYwFqBAV3aEtleQkBHmtleUZhY3RvcnlXYXJlaG91c2VCeUlkQW5kVHlwZQIFBWxvY0lkBQFqBAJ3MAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQV3aEtleQAABANhbWoJAJEDAgUHYW1vdW50cwUBagMJAGYCBQNhbWoJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdyZXNMaXN0BQFqCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgICCVlvdSBoYXZlIAkAkQMCBQdyZXNMaXN0BQFqAgQgb2YgCQCRAwIFCHJlc1R5cGVzBQFqAhgsIGJ1dCB0cmllZCB0byBleGNoYW5nZSAJAKQDAQUDYW1qAwkAZgIAAAUDYW1qCQACAQkArAICCQCsAgIJAKwCAgIpWW91IHRyaWVkIHRvIGV4Y2hhbmdlIG5lZ2F0aXZlIGFtb3VudCBvZiAJAJEDAgUIcmVzVHlwZXMFAWoCAjogCQCkAwEFA2FtagMJAGYCBQNhbWoAAAkAlgoECQDNCAIIBQNhY2MCXzEJAKQDAQkAZQIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdyZXNMaXN0BQFqBQNhbWoJAM0IAggFA2FjYwJfMgkApAMBCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB21hdExpc3QFAWoFA2FtagkAZAIIBQNhY2MCXzMJAGsDBQNhbWoFEFJFU09VUkNFUFJJQ0VNSU4FBU1VTFQ4CQDNCAIIBQNhY2MCXzQJAQxJbnRlZ2VyRW50cnkCBQV3aEtleQUCdzAJAJYKBAkAzQgCCAUDYWNjAl8xCQCRAwIFB3Jlc0xpc3QFAWoJAM0IAggFA2FjYwJfMgkAkQMCBQdtYXRMaXN0BQFqCAUDYWNjAl8zCAUDYWNjAl80BAZtZXJnZWQKAAIkbAkAzAgCAAAJAMwIAgABCQDMCAIAAgkAzAgCAAMJAMwIAgAECQDMCAIABQUDbmlsCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlgoEBQNuaWwFA25pbAAABQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCWV4Y2hhbmdlcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgMJAGYCCAUGbWVyZ2VkAl8zBQNhbXQJAAIBCQCsAgIJAKwCAgkArAICAh9JbnN1ZmZpY2llbnQgcGF5bWVudCEgQXR0YWNoZWQ9CQCkAwEFA2FtdAILLCByZXF1aXJlZD0JAKQDAQgFBm1lcmdlZAJfMwQHbmV3UGFjawkAuQkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAuQkCCAUGbWVyZ2VkAl8xAgFfCQDMCAIJALkJAggFBm1lcmdlZAJfMgIBXwkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QFA25pbAIBOgQGcmVzdWx0CQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIOdXBkYXRlQmFja3BhY2sJAMwIAgULZHVja0Fzc2V0SWQJAMwIAgUHbmV3UGFjawUDbmlsBQNuaWwEBHJlc3QDCQBmAgkAZQIFA2FtdAgFBm1lcmdlZAJfMwAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgkAZQIFA2FtdAgFBm1lcmdlZAJfMwULdXNkdEFzc2V0SWQFA25pbAUDbmlsBBBhY3Rpdml0aWVzQW1vdW50CQBpAggFBm1lcmdlZAJfMwBkCQCUCgIJAM0IAgkAzggCBQRyZXN0CAUGbWVyZ2VkAl80CQEOU2NyaXB0VHJhbnNmZXIDBQxyZXN0Q29udHJhY3QFEGFjdGl2aXRpZXNBbW91bnQFC3VzZHRBc3NldElkBQZyZXN1bHQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEKY3JhZnRHb29kcwIKcHJvZHVjdElkeAhxdWFudGl0eQQHYmxvY2tlZAkBDGNoZWNrQmxvY2tlZAADCQAAAgUHYmxvY2tlZAUHYmxvY2tlZAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECImV4YWN0bHkgMSBwYXltZW50IG11c3QgYmUgYXR0YWNoZWQEA3BtdAkAkQMCCAUBaQhwYXltZW50cwAABANhbXQIBQNwbXQGYW1vdW50BApwbXRBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIIBQNwbXQHYXNzZXRJZAIeV0FWRVMgY2FuJ3QgYmUgdXNlZCBhcyBwYXltZW50AwkBAiE9AgUKcG10QXNzZXRJZAULdXNkdEFzc2V0SWQJAAIBAhNVU0RUIHBheW1lbnRzIG9ubHkhAwkBAiE9AgUDYW10BQVNVUxUNgkAAgECKmV4YWN0bHkgMSBVU0RUIG11c3QgYmUgYXR0YWNoZWQgYXMgcGF5bWVudAMJAGcCAAAFCHF1YW50aXR5CQACAQIbUXVhbnRpdHkgc2hvdWxkIGJlIHBvc2l0aXZlBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQkApQgBCAUBaQZjYWxsZXICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQEC2N1ckxvY2F0aW9uCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQFD0RFRkFVTFRMT0NBVElPTgIBXwMJAQIhPQIJAJEDAgULY3VyTG9jYXRpb24FCmxvY0lkeFR5cGUCAU0JAAIBCQCsAgICMUR1Y2sgbG9jYXRpb24gdHlwZSBzaG91bGQgYmUgTWFudWZhY3RvcnksIGJ1dCBpcyAJAJEDAgULY3VyTG9jYXRpb24FCmxvY0lkeFR5cGUEBGNvbnQJAJEDAgULY3VyTG9jYXRpb24FD2xvY0lkeENvbnRpbmVudAQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAdtYXRMaXN0CQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0AgFfAwMJAGYCAAAFCnByb2R1Y3RJZHgGCQBnAgUKcHJvZHVjdElkeAkAkAMBBRBwcm9kdWN0aW9uTWF0cml4CQACAQkArAICAhRVbmtub3duIHByb2R1Y3QgaWR4PQkApAMBBQpwcm9kdWN0SWR4BAZyZWNpcGUJALUJAgkAkQMCBRBwcm9kdWN0aW9uTWF0cml4BQpwcm9kdWN0SWR4AgFfAwkBAiE9AgkAkAMBBQZyZWNpcGUJAGQCBQZOVU1SRVMAAwkAAgEJAKwCAgIXRmF0YWw6IHVua25vd24gcmVjaXBlOiAJAJEDAgUQcHJvZHVjdGlvbk1hdHJpeAUKcHJvZHVjdElkeAQOcHJvZHVjdENvbnRJZHgJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQZyZWNpcGUFEnJlY2lwZUlkeENvbnRpbmVudAMJAQIhPQIJAJEDAgUKY29udGluZW50cwUOcHJvZHVjdENvbnRJZHgFBGNvbnQJAAIBCQCsAgIJAKwCAgkArAICAh1UaGlzIHByb2R1Y3QgaXMgYXZhaWxhYmxlIGluIAkAkQMCBQpjb250aW5lbnRzBQ5wcm9kdWN0Q29udElkeAIRLCBidXQgeW91IGFyZSBpbiAFBGNvbnQECHByb2RMaXN0AwkAAAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAIABQNuaWwJALUJAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kAgFfCgEGZmlsbGVyAgNhY2MLaWdub3JlZEl0ZW0EAW4IBQNhY2MCXzIEAnhzAwkAZgIJAJADAQUIcHJvZExpc3QFAW4JAJEDAgUIcHJvZExpc3QFAW4CATAEAXgJAQ1wYXJzZUludFZhbHVlAQUCeHME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UGFjawUDbmlsBQNuaWwJAJQKAgUDbmlsBQZyZXN1bHQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQERc2V0V2FyZWhvdXNlT3JkZXICDGNhcmdvTGlzdFN0cgtsYW5kQXNzZXRJZAQEdXNlcggFAWkMb3JpZ2luQ2FsbGVyBARhZGRyCQClCAEFBHVzZXIEBnJlc3VsdAMJAQIhPQIFBHVzZXIFDHJlc3RDb250cmFjdAkBDGNoZWNrQmxvY2tlZAAHBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFC2xhbmRBc3NldElkAwkBASEBCQEJaXNEZWZpbmVkAQkAmggCBQ9zdGFraW5nQ29udHJhY3QJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQULbGFuZEFzc2V0SWQJAAIBCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkBAVvd25lcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFC2xhbmRBc3NldElkCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDCBpcyBvcnBoYW5lZAMDCQECIT0CBQR1c2VyBQxyZXN0Q29udHJhY3QJAQIhPQIFBW93bmVyBQRhZGRyBwkAAgEJAKwCAgUKTEFORFBSRUZJWAINIGlzIG5vdCB5b3VycwQKY2FyZ29QYXJ0cwkAvAkCBQxjYXJnb0xpc3RTdHICAToDCQECIT0CCQCQAwEFCmNhcmdvUGFydHMAAwkAAgECNGNhcmdvTGlzdFN0ciBzaG91bGQgY29udGFpbiBleGFjdGx5IDIgJzonIHNlcGFyYXRvcnMECHJlc1BhcnRzCQC1CQIJAJEDAgUKY2FyZ29QYXJ0cwAAAgFfBAhtYXRQYXJ0cwkAtQkCCQCRAwIFCmNhcmdvUGFydHMAAQIBXwQJcHJvZFBhcnRzAwkAAAIJAJEDAgUKY2FyZ29QYXJ0cwACAgAFA25pbAkAtQkCCQCRAwIFCmNhcmdvUGFydHMAAgIBXwMJAQIhPQIJAJADAQUIcmVzUGFydHMFBk5VTVJFUwkAAgECIEFsbCA2IHJlc291cmNlcyBzaG91bGQgYmUgcGFzc2VkAwkBAiE9AgkAkAMBBQhtYXRQYXJ0cwUGTlVNUkVTCQACAQIgQWxsIDYgbWF0ZXJpYWxzIHNob3VsZCBiZSBwYXNzZWQEAndoCQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIUZ2V0V2FyZWhvdXNlUkVBRE9OTFkJAMwIAgULbGFuZEFzc2V0SWQFA25pbAUDbmlsBAljdXJyZW50V2gJALwJAgUCd2gCAToECWN1cnJXaFJlcwkAtQkCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhSZXMCAV8ECWN1cnJXaE1hdAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhNYXQCAV8ECmN1cnJXaFByb2QDCQAAAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4UHJvZAIABQNuaWwJALUJAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4UHJvZAIBXwQFd2hWb2wJARdnZXRXYXJlaG91c2VUb3RhbFZvbHVtZQEJAJEDAgUJY3VycmVudFdoBQt3aElkeExldmVscwQGb3JkS2V5CQEOa2V5T3JkZXJCeUxhbmQBBQtsYW5kQXNzZXRJZAQKY3VycmVudE9yZAkBCGdldE9yZGVyAQUGb3JkS2V5BA1jdXJyZW50T3JkUmVzCQC1CQIJAJEDAgUKY3VycmVudE9yZAUJb3JkSWR4UmVzAgFfBA1jdXJyZW50T3JkTWF0CQC1CQIJAJEDAgUKY3VycmVudE9yZAUJb3JkSWR4TWF0AgFfBA5jdXJyZW50T3JkUHJvZAMJAAACCQCRAwIFCmN1cnJlbnRPcmQFCm9yZElkeFByb2QCAAUDbmlsCQC1CQIJAJEDAgUKY3VycmVudE9yZAUKb3JkSWR4UHJvZAIBXwQNdXNkdE5lZWQyTG9jawAABAFyCgACJGwFCHJlc1BhcnRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAmQoHAAAFA25pbAAAAAAFCWN1cnJXaFJlcwUNY3VycmVudE9yZFJlcwcKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCXNldENvbW1vbgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUC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cGF5bWVudHMAAAQDYW10CAUDcG10BmFtb3VudAQKcG10QXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCAUDcG10B2Fzc2V0SWQCHldBVkVTIGNhbid0IGJlIHVzZWQgYXMgcGF5bWVudAMJAQIhPQIFCnBtdEFzc2V0SWQFC3VzZHRBc3NldElkCQACAQITVVNEVCBwYXltZW50cyBvbmx5IQMJAQIhPQIFA2FtdAUIdXNkU2FsZG8JAAIBCQCsAgICElBheW1lbnQgbmVlZGVkIGlzIAkApAMBBQh1c2RTYWxkbwkAzAgCCQELU3RyaW5nRW50cnkCBQZvcmRLZXkFDGNhcmdvTGlzdFN0cgUDbmlsAwkAAAIFCHVzZFNhbGRvAAADCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhJObyBwYXltZW50cyBuZWVkZWQJAMwIAgkBC1N0cmluZ0VudHJ5AgUGb3JkS2V5BQxjYXJnb0xpc3RTdHIFA25pbAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECEk5vIHBheW1lbnRzIG5lZWRlZAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBBQVvd25lcgkBAS0BBQh1c2RTYWxkbwULdXNkdEFzc2V0SWQJAMwIAgkBC1N0cmluZ0VudHJ5AgUGb3JkS2V5BQxjYXJnb0xpc3RTdHIFA25pbAkAlAoCBQdhY3Rpb25zBQZyZXN1bHQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEUYWNjZXB0V2FyZWhvdXNlT3JkZXIDCmJwT3JkZXJTdHILbGFuZEFzc2V0SWQLZHVja0Fzc2V0SWQEB2Jsb2NrZWQJAQxjaGVja0Jsb2NrZWQAAwkAAAIFB2Jsb2NrZWQFB2Jsb2NrZWQEBmNhbGxlcggFAWkMb3JpZ2luQ2FsbGVyBApjYWxsZXJBZGRyCQClCAEFBmNhbGxlcgQRc3Rha2VkRHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFCmNhbGxlckFkZHICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQEC2N1ckxvY2F0aW9uCQELdmFsdWVPckVsc2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBD2tleUR1Y2tMb2NhdGlvbgEFEXN0YWtlZER1Y2tBc3NldElkBQ9ERUZBVUxUTE9DQVRJT04EA2xvYwkAtQkCCQEFdmFsdWUBBQtjdXJMb2NhdGlvbgIBXwMJAQIhPQIJAJEDAgUDbG9jBQpsb2NJZHhUeXBlAgFMCQACAQkArAICCQCsAgICFkR1Y2sgbG9jYXRpb24gdHlwZSBpcyAJAJEDAgUDbG9jBQpsb2NJZHhUeXBlAhEsIGJ1dCBzaG91bGQgYmUgTAMJAQIhPQIFEXN0YWtlZER1Y2tBc3NldElkBQtkdWNrQXNzZXRJZAkAAgEJAKwCAgkArAICCQCsAgICFFlvdXIgc3Rha2VkIGR1Y2sgaXMgBRFzdGFrZWREdWNrQXNzZXRJZAINLCBidXQgcGFzc2VkIAULZHVja0Fzc2V0SWQECWxhbmRBc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFC2xhbmRBc3NldElkAwkBASEBCQEJaXNEZWZpbmVkAQkAmggCBQ9zdGFraW5nQ29udHJhY3QJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQULbGFuZEFzc2V0SWQJAAIBCQCsAgIJAKwCAgIETkZUIAgFCWxhbmRBc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAQJbGFuZE93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQULbGFuZEFzc2V0SWQJAKwCAgkArAICAgRORlQgCAUJbGFuZEFzc2V0BG5hbWUCDCBpcyBvcnBoYW5lZAMJAAACBQlsYW5kT3duZXIFCmNhbGxlckFkZHIJAAIBAh5Zb3UgY2Fubm90IHRyYWRlIHdpdGggeW91cnNlbGYEDGJwT3JkZXJQYXJ0cwkAvAkCBQpicE9yZGVyU3RyAgE6AwkBAiE9AgkAkAMBBQxicE9yZGVyUGFydHMAAwkAAgECMmJwT3JkZXJTdHIgc2hvdWxkIGNvbnRhaW4gZXhhY3RseSAyICc6JyBzZXBhcmF0b3JzBAhicE9yZFJlcwkAtQkCCQCRAwIFDGJwT3JkZXJQYXJ0cwAAAgFfBAhicE9yZE1hdAkAtQkCCQCRAwIFDGJwT3JkZXJQYXJ0cwABAgFfBAlicE9yZFByb2QDCQAAAgkAkQMCBQxicE9yZGVyUGFydHMAAgIABQNuaWwJALUJAgkAkQMCBQxicE9yZGVyUGFydHMAAgIBXwMJAQIhPQIJAJADAQUIYnBPcmRSZXMFBk5VTVJFUwkAAgECIEFsbCA2IHJlc291cmNlcyBzaG91bGQgYmUgcGFzc2VkAwkBAiE9AgkAkAMBBQhicE9yZE1hdAUGTlVNUkVTCQACAQIgQWxsIDYgbWF0ZXJpYWxzIHNob3VsZCBiZSBwYXNzZWQEAndoCQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIUZ2V0V2FyZWhvdXNlUkVBRE9OTFkJAMwIAgULbGFuZEFzc2V0SWQFA25pbAUDbmlsBAljdXJyZW50V2gJALwJAgUCd2gCAToECWN1cnJXaFJlcwkAtQkCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhSZXMCAV8ECWN1cnJXaE1hdAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhNYXQCAV8ECmN1cnJXaFByb2QDCQAAAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4UHJvZAIABQNuaWwJALUJAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4UHJvZAIBXwQPY3VycldoTG9ja2VkVm9sCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgkAtQkCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhMT0ZUAgFfBQl2b2xMb2NrZWQEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BAlicFJlc0xpc3QJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMCAV8ECWJwTWF0TGlzdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAIBXwQKYnBQcm9kTGlzdAMJAAACCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QCAAUDbmlsCQC1CQIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAIBXwQGb3JkS2V5CQEOa2V5T3JkZXJCeUxhbmQBBQtsYW5kQXNzZXRJZAQFd2hPcmQJAQhnZXRPcmRlcgEFBm9yZEtleQQId2hPcmRSZXMJALUJAgkAkQMCBQV3aE9yZAUJb3JkSWR4UmVzAgFfBAh3aE9yZE1hdAkAtQkCCQCRAwIFBXdoT3JkBQlvcmRJZHhNYXQCAV8ECXdoT3JkUHJvZAMJAAACCQCRAwIFBXdoT3JkBQpvcmRJZHhQcm9kAgAFA25pbAkAtQkCCQCRAwIFBXdoT3JkBQpvcmRJZHhQcm9kAgFfBA11c2R0TmVlZDJMb2NrAAAEAXIKAAIkbAUIYnBPcmRSZXMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCeCgwFA25pbAUDbmlsBQNuaWwAAAAAAAAAAAUJYnBSZXNMaXN0BQljdXJyV2hSZXMFCHdoT3JkUmVzBQhyZXNUeXBlcwcKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBDGFjY2VwdENvbW1vbgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgQBbQoAAiRsBQhicE9yZE1hdAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJ4KDAUDbmlsBQNuaWwFA25pbAgFAXICXzQIBQFyAl81CAUBcgJfNgAABQlicE1hdExpc3QFCWN1cnJXaE1hdAUId2hPcmRNYXQFCG1hdFR5cGVzBwoBBSRmMV8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEMYWNjZXB0Q29tbW9uAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYxXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYxXzICCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECBQUkYWNjMAAAAAEAAgADAAQABQAGBAFwAwkBAiE9AgkAkAMBBQlicE9yZFByb2QAAAoAAiRsBQlicE9yZFByb2QKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCeCgwFA25pbAUDbmlsBQNuaWwIBQFtAl80CAUBbQJfNQgFAW0CXzYAAAUKYnBQcm9kTGlzdAUKY3VycldoUHJvZAUJd2hPcmRQcm9kBQlwcm9kVHlwZXMGCgEFJGYyXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQxhY2NlcHRDb21tb24CBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjJfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDUwCQEFJGYyXzICCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkAGgAbABwAHQAeAB8AIAAhACIAIwAkACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgkAngoMBQpjdXJyV2hQcm9kBQl3aE9yZFByb2QFCmJwUHJvZExpc3QIBQFtAl80CAUBbQJfNQgFAW0CXzYAAAUKYnBQcm9kTGlzdAUKY3VycldoUHJvZAUJd2hPcmRQcm9kBQlwcm9kVHlwZXMGBAh2b2xTYWxkbwgFAXACXzQEDG5ld0xvY2tlZFZvbAMJAGYCAAAJAGUCBQ9jdXJyV2hMb2NrZWRWb2wFCHZvbFNhbGRvAAAJAGUCBQ9jdXJyV2hMb2NrZWRWb2wFCHZvbFNhbGRvBAV3aFN0cgkAugkCCQDMCAIJAJEDAgUJY3VycmVudFdoBQt3aElkeExldmVscwkAzAgCCQC5CQIIBQFyAl8xAgFfCQDMCAIJALkJAggFAW0CXzECAV8JAMwIAgkAuQkCCAUBcAJfMQIBXwkAzAgCCQCkAwEFDG5ld0xvY2tlZFZvbAUDbmlsAgE6BAtuZXdXaE9yZFN0cgkAugkCCQDMCAIJALkJAggFAXICXzICAV8JAMwIAgkAuQkCCAUBbQJfMgIBXwkAzAgCCQC5CQIIBQFwAl8yAgFfBQNuaWwCAToECG5ld0JwU3RyCQC6CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCQC5CQIIBQFyAl8zAgFfCQDMCAIJALkJAggFAW0CXzMCAV8JAMwIAgkAuQkCCAUBcAJfMwIBXwUDbmlsAgE6BAZ3aFNhdmUJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag1zYXZlV2FyZWhvdXNlCQDMCAIFBXdoU3RyCQDMCAIFC2xhbmRBc3NldElkBQNuaWwFA25pbAMJAAACBQZ3aFNhdmUFBndoU2F2ZQQGYnBTYXZlCQD8BwQFD3N0YWtpbmdDb250cmFjdAIOdXBkYXRlQmFja3BhY2sJAMwIAgULZHVja0Fzc2V0SWQJAMwIAgUIbmV3QnBTdHIFA25pbAUDbmlsAwkAAAIFBmJwU2F2ZQUGYnBTYXZlBAdhY3Rpb25zCQDMCAIJAQtTdHJpbmdFbnRyeQIFBm9yZEtleQULbmV3V2hPcmRTdHIFA25pbAQNdXNkV2gyQnBTYWxkbwgFAXACXzUECGFjdGlvbnMxAwkAZgIFDXVzZFdoMkJwU2FsZG8AAAQLdXNkV2gyQnBGZWUJAGsDCAUBcAJfNQUKQVVDVElPTkZFRQUFTVVMVDYECHJlZkJ5S2V5CQEPa2V5QWRkcmVzc1JlZkJ5AQUKY2FsbGVyQWRkcgQFcmVmQnkJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0BQhyZWZCeUtleQMJAQlpc0RlZmluZWQBBQVyZWZCeQkAzQgCCQDNCAIJAM0IAgUHYWN0aW9ucwkBDlNjcmlwdFRyYW5zZmVyAwUGY2FsbGVyCQBlAggFAXACXzUJAGgCAAMFC3VzZFdoMkJwRmVlBQt1c2R0QXNzZXRJZAkBDlNjcmlwdFRyYW5zZmVyAwUMcmVzdENvbnRyYWN0BQt1c2RXaDJCcEZlZQULdXNkdEFzc2V0SWQJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQV2YWx1ZQEFBXJlZkJ5BQt1c2RXaDJCcEZlZQULdXNkdEFzc2V0SWQJAM0IAgkAzQgCBQdhY3Rpb25zCQEOU2NyaXB0VHJhbnNmZXIDBQZjYWxsZXIJAGUCCAUBcAJfNQkAaAIAAwULdXNkV2gyQnBGZWUFC3VzZHRBc3NldElkCQEOU2NyaXB0VHJhbnNmZXIDBQxyZXN0Q29udHJhY3QFC3VzZFdoMkJwRmVlBQt1c2R0QXNzZXRJZAUHYWN0aW9ucwQNdXNkQnAyV2hTYWxkbwgFAXACXzYDCQBmAgUNdXNkQnAyV2hTYWxkbwAAAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIiZXhhY3RseSAxIHBheW1lbnQgbXVzdCBiZSBhdHRhY2hlZAQDcG10CQCRAwIIBQFpCHBheW1lbnRzAAAEA2FtdAgFA3BtdAZhbW91bnQECnBtdEFzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAggFA3BtdAdhc3NldElkAh5XQVZFUyBjYW4ndCBiZSB1c2VkIGFzIHBheW1lbnQDCQECIT0CBQpwbXRBc3NldElkBQt1c2R0QXNzZXRJZAkAAgECE1VTRFQgcGF5bWVudHMgb25seSEDCQECIT0CBQNhbXQFDXVzZEJwMldoU2FsZG8JAAIBCQCsAgICElBheW1lbnQgbmVlZGVkIGlzIAkApAMBBQ11c2RCcDJXaFNhbGRvAwkAZgIFDk1JTlNIT1BQQVlNRU5UBQNhbXQJAAIBCQCsAgICG1BheW1lbnQgc2hvdWxkIGJlIGF0IGxlYXN0IAkApAMBBQ5NSU5TSE9QUEFZTUVOVAQLdXNkQnAyV2hGZWUJAGsDCAUBcAJfNgUKQVVDVElPTkZFRQUFTVVMVDYECHJlZkJ5S2V5CQEPa2V5QWRkcmVzc1JlZkJ5AQUJbGFuZE93bmVyBAVyZWZCeQkAnQgCBQ9zdGFraW5nQ29udHJhY3QFCHJlZkJ5S2V5AwkBCWlzRGVmaW5lZAEFBXJlZkJ5CQDNCAIJAM0IAgkAzQgCBQhhY3Rpb25zMQkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQUJbGFuZE93bmVyCQBlAggFAXACXzYJAGgCAAMFC3VzZEJwMldoRmVlBQt1c2R0QXNzZXRJZAkBDlNjcmlwdFRyYW5zZmVyAwUMcmVzdENvbnRyYWN0BQt1c2RCcDJXaEZlZQULdXNkdEFzc2V0SWQJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQV2YWx1ZQEFBXJlZkJ5BQt1c2RCcDJXaEZlZQULdXNkdEFzc2V0SWQJAM0IAgkAzQgCBQhhY3Rpb25zMQkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQUJbGFuZE93bmVyCQBlAggFAXACXzYJAGgCAAMFC3VzZEJwMldoRmVlBQt1c2R0QXNzZXRJZAkBDlNjcmlwdFRyYW5zZmVyAwUMcmVzdENvbnRyYWN0BQt1c2RCcDJXaEZlZQULdXNkdEFzc2V0SWQDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhJObyBwYXltZW50cyBuZWVkZWQFCGFjdGlvbnMxCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAItEsYY=", "height": 2598507, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: BFw3GrsqHpjMPjbPA57ur63We2yEsy1UiRaAmeg1vjW2 Next: 6Ht9SJk9iSqC6y2sMfiq1w1BV91zoHCUyvyzySfmaA3E Diff:
OldNewDifferences
180180
181181 let aJ = 2
182182
183-func aK (aL) = {
184- let h = aL
183+let aK = 3
184+
185+let aL = 0
186+
187+let aM = 1
188+
189+let aN = 2
190+
191+func aO (aP) = {
192+ let h = aP
185193 if ($isInstanceOf(h, "String"))
186194 then {
187- let aM = h
188- aM
195+ let aQ = h
196+ aQ
189197 }
190198 else throw("fail to cast into String")
191199 }
192200
193201
194-func aN (aO) = {
195- let aP = split(valueOrElse(getString(aO), "0@0_0@0_0@0_0@0_0@0_0@0:0@0_0@0_0@0_0@0_0@0_0@0:"), ":")
196-[if ((size(split(aP[aH], "_")) == B))
197- then aP[aH]
198- else "0@0_0@0_0@0_0@0_0@0_0@0", if ((size(split(aP[aI], "_")) == B))
199- then aP[aI]
200- else "0@0_0@0_0@0_0@0_0@0_0@0", aP[aJ]]
202+func aR (aS) = {
203+ let aT = split(valueOrElse(getString(aS), "0@0_0@0_0@0_0@0_0@0_0@0:0@0_0@0_0@0_0@0_0@0_0@0:"), ":")
204+[if ((size(split(aT[aL], "_")) == B))
205+ then aT[aL]
206+ else "0@0_0@0_0@0_0@0_0@0_0@0", if ((size(split(aT[aM], "_")) == B))
207+ then aT[aM]
208+ else "0@0_0@0_0@0_0@0_0@0_0@0", aT[aN]]
201209 }
202210
203211
204-func aQ (aR,aS,aT) = if (aT)
212+func aU (aV,aW,aX) = if (aX)
205213 then {
206- let aU = if ((aR >= 0))
207- then (((aR + aS) - 1) / aS)
208- else -((((-(aR) + aS) - 1) / aS))
209- (aU * d)
214+ let aY = if ((aV >= 0))
215+ then (((aV + aW) - 1) / aW)
216+ else -((((-(aV) + aW) - 1) / aW))
217+ (aY * d)
210218 }
211- else aR
219+ else aV
212220
213221
214-func aV (aW) = {
215- let aX = split(aW, "_")
216- ((J * (parseIntValue(aX[1]) + 1)) * parseIntValue(aX[0]))
222+func aZ (ba) = {
223+ let bb = split(ba, "_")
224+ ((J * (parseIntValue(bb[1]) + 1)) * parseIntValue(bb[0]))
217225 }
218226
219227
220-func aY (aZ) = {
221- let ba = aZ[aF]
222- if ((ba == ""))
228+func bc (bd) = {
229+ let be = bd[aF]
230+ if ((be == ""))
223231 then 0
224232 else {
225- func bb (bc,bd) = {
226- let x = bc._1
227- let aS = parseIntValue(split(Q[x], "_")[ad])
228- $Tuple2((x + 1), (bc._2 + aQ(parseIntValue(bd), aS, true)))
233+ func bf (bg,bh) = {
234+ let x = bg._1
235+ let aW = parseIntValue(split(Q[x], "_")[ad])
236+ $Tuple2((x + 1), (bg._2 + aU(parseIntValue(bh), aW, true)))
229237 }
230238
231-( let be = split_4C(ba, "_")
232- let bf = size(be)
233- let bg = $Tuple2(0, 0)
234- func bh (bi,bj) = if ((bj >= bf))
235- then bi
236- else bb(bi, be[bj])
239+( let bi = split_4C(be, "_")
240+ let bj = size(bi)
241+ let bk = $Tuple2(0, 0)
242+ func bl (bm,bn) = if ((bn >= bj))
243+ then bm
244+ else bf(bm, bi[bn])
237245
238- func bk (bi,bj) = if ((bj >= bf))
239- then bi
246+ func bo (bm,bn) = if ((bn >= bj))
247+ then bm
240248 else throw("List size exceeds 50")
241249
242- bk(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bg, 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
250+ bo(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bk, 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
243251 }
244252 }
245253
246254
247-func bl (bm,ah,aR,bn) = {
248- let bo = af(bm, ah)
249- let bp = valueOrElse(getInteger(bo), 0)
250- let bq = if ((bp > C))
255+func bp (bq,ah,aV,br) = {
256+ let bs = af(bq, ah)
257+ let bt = valueOrElse(getInteger(bs), 0)
258+ let bu = if ((bt > C))
251259 then 0
252- else if (((bp + aR) > C))
253- then (C - bp)
254- else aR
255- let br = (fraction(bq, ((F * D) - fraction(((100 * bp) + (50 * bq)), D, C)), e) + fraction((aR - bq), D, d))
256- let bs = (bn - (bn / 100))
257- if (((bs * aR) > (br * d)))
258- then throw((((((((((("Actual price = " + toString(br)) + " / ") + toString(aR)) + " < minPrice = ") + toString(bn)) + ", (") + bm) + ", ") + M[ah]) + ")"))
259- else $Tuple2(IntegerEntry(bo, (bp + aR)), br)
260+ else if (((bt + aV) > C))
261+ then (C - bt)
262+ else aV
263+ let bv = (fraction(bu, ((F * D) - fraction(((100 * bt) + (50 * bu)), D, C)), e) + fraction((aV - bu), D, d))
264+ let bw = (br - (br / 100))
265+ if (((bw * aV) > (bv * d)))
266+ then throw((((((((((("Actual price = " + toString(bv)) + " / ") + toString(aV)) + " < minPrice = ") + toString(br)) + ", (") + bq) + ", ") + M[ah]) + ")"))
267+ else $Tuple2(IntegerEntry(bs, (bt + aV)), bv)
260268 }
261269
262270
263-func bt (bm,bu,aR,bv) = {
264- let bo = af(bm, bu)
265- let bp = valueOrElse(getInteger(bo), 0)
266- let bw = if ((bp > C))
267- then min([aR, (bp - C)])
271+func bx (bq,by,aV,bz) = {
272+ let bs = af(bq, by)
273+ let bt = valueOrElse(getInteger(bs), 0)
274+ let bA = if ((bt > C))
275+ then min([aV, (bt - C)])
268276 else 0
269- let bx = min([bp, (aR - bw)])
270- let by = (bx + bw)
271- let bz = (fraction(bx, ((G * D) - fraction(((100 * bp) - (50 * bx)), D, C)), e) + fraction(bw, (2 * D), d))
272- let bA = (bv + (bv / 100))
273- if (((bz * d) > (bA * by)))
274- then throw((((((((((("Actual price = " + toString(bz)) + " / ") + toString(by)) + " > maxPrice = ") + toString(bv)) + ", (") + bm) + ", ") + N[bu]) + ")"))
275- else $Tuple3(IntegerEntry(bo, (bp - by)), bz, by)
277+ let bB = min([bt, (aV - bA)])
278+ let bC = (bB + bA)
279+ let bD = (fraction(bB, ((G * D) - fraction(((100 * bt) - (50 * bB)), D, C)), e) + fraction(bA, (2 * D), d))
280+ let bE = (bz + (bz / 100))
281+ if (((bD * d) > (bE * bC)))
282+ then throw((((((((((("Actual price = " + toString(bD)) + " / ") + toString(bC)) + " > maxPrice = ") + toString(bz)) + ", (") + bq) + ", ") + N[by]) + ")"))
283+ else $Tuple3(IntegerEntry(bs, (bt - bC)), bD, bC)
276284 }
277285
278286
279-func bB (bC) = {
280- let aP = split(valueOrElse(getString(z, bC), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
281-[toString(valueOrElse(parseInt(aP[ay]), 0)), if ((size(split(aP[az], "_")) == B))
282- then aP[az]
283- else "0_0_0_0_0_0", if ((size(split(aP[aA], "_")) == B))
284- then aP[aA]
285- else "0_0_0_0_0_0", aP[aB]]
287+func bF (bG) = {
288+ let aT = split(valueOrElse(getString(z, bG), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
289+[toString(valueOrElse(parseInt(aT[ay]), 0)), if ((size(split(aT[az], "_")) == B))
290+ then aT[az]
291+ else "0_0_0_0_0_0", if ((size(split(aT[aA], "_")) == B))
292+ then aT[aA]
293+ else "0_0_0_0_0_0", aT[aB]]
286294 }
287295
288296
289-func bD () = if (valueOrElse(getBoolean(z, ap()), false))
297+func bH () = if (valueOrElse(getBoolean(z, ap()), false))
290298 then throw("Contracts are under maintenance")
291299 else unit
292300
293301
294-func bE (bc,bd) = {
295- let bF = bc._1
296- let bG = bc._7
297- let aS = if (bG)
298- then parseIntValue(split(Q[bF], "_")[ad])
302+func bI (bg,bh) = {
303+ let bJ = bg._1
304+ let bK = bg._7
305+ let aW = if (bK)
306+ then parseIntValue(split(Q[bJ], "_")[ad])
299307 else 0
300- let bH = split(bd, "@")
301- if ((size(bH) != 2))
308+ let bL = split(bh, "@")
309+ if ((size(bL) != 2))
302310 then throw("Incorrect order format, should be amount@price")
303311 else {
304- let bI = parseIntValue(bH[0])
305- let bJ = parseIntValue(bH[1])
306- let bK = fraction(bI, bJ, d)
307- let bL = aQ(bI, aS, bG)
308- let bM = parseIntValue(bc._5[bF])
309- let bN = split(bc._6[bF], "@")
310- let bO = parseIntValue(bN[0])
311- let bP = parseIntValue(bN[1])
312- if (if ((0 > bP))
312+ let bM = parseIntValue(bL[0])
313+ let bN = parseIntValue(bL[1])
314+ let bO = fraction(bM, bN, d)
315+ let bP = aU(bM, aW, bK)
316+ let bQ = if ((size(bg._5) > bJ))
317+ then parseIntValue(bg._5[bJ])
318+ else 0
319+ let bR = split(if ((size(bg._6) > bJ))
320+ then bg._6[bJ]
321+ else "0@0", "@")
322+ let bS = parseIntValue(bR[0])
323+ let bT = parseIntValue(bR[1])
324+ if (if ((0 > bT))
313325 then true
314- else (0 > bJ))
326+ else (0 > bN))
315327 then throw("Price can't be negative")
316328 else {
317- let bQ = fraction(bO, bP, d)
318- let bR = aQ(bO, aS, bG)
319- if ((bI == 0))
320- then if ((bO > 0))
321- then $Tuple7((bF + 1), (bc._2 :+ toString(bM)), (bc._3 - bR), (bc._4 - bQ), bc._5, bc._6, bG)
322- else $Tuple7((bF + 1), (bc._2 :+ toString((bM - bO))), (bc._3 + bR), bc._4, bc._5, bc._6, bG)
323- else if ((bI > 0))
324- then if ((0 > bO))
325- then $Tuple7((bF + 1), (bc._2 :+ toString((bM - bO))), ((bc._3 + bL) + bR), (bc._4 + bK), bc._5, bc._6, bG)
326- else $Tuple7((bF + 1), (bc._2 :+ toString(bM)), ((bc._3 + bL) - bR), ((bc._4 + bK) - bQ), bc._5, bc._6, bG)
327- else if ((0 > bO))
329+ let bU = fraction(bS, bT, d)
330+ let bV = aU(bS, aW, bK)
331+ if ((bM == 0))
332+ then if ((bS > 0))
333+ then $Tuple7((bJ + 1), (bg._2 :+ toString(bQ)), (bg._3 - bV), (bg._4 - bU), bg._5, bg._6, bK)
334+ else $Tuple7((bJ + 1), (bg._2 :+ toString((bQ - bS))), (bg._3 + bV), bg._4, bg._5, bg._6, bK)
335+ else if ((bM > 0))
336+ then if ((0 > bS))
337+ then $Tuple7((bJ + 1), (bg._2 :+ toString((bQ - bS))), ((bg._3 + bP) + bV), (bg._4 + bO), bg._5, bg._6, bK)
338+ else $Tuple7((bJ + 1), (bg._2 :+ toString(bQ)), ((bg._3 + bP) - bV), ((bg._4 + bO) - bU), bg._5, bg._6, bK)
339+ else if ((0 > bS))
328340 then {
329- let bS = (bO - bI)
330- if ((0 > (bM - bS)))
331- then throw((((("Attempt to take " + toString(bS)) + " from warehouse, but only ") + toString(bM)) + " available"))
332- else $Tuple7((bF + 1), (bc._2 :+ toString((bM - bS))), ((bc._3 + bR) - bL), bc._4, bc._5, bc._6, bG)
341+ let bW = (bS - bM)
342+ if ((0 > (bQ - bW)))
343+ then throw((((("Attempt to take " + toString(bW)) + " from warehouse, but only ") + toString(bQ)) + " available"))
344+ else $Tuple7((bJ + 1), (bg._2 :+ toString((bQ - bW))), ((bg._3 + bV) - bP), bg._4, bg._5, bg._6, bK)
333345 }
334- else if ((0 > (bM + bI)))
335- then throw((((("Attempt to take " + toString(-(bI))) + " from warehouse, but only ") + toString(bM)) + " available"))
336- else $Tuple7((bF + 1), (bc._2 :+ toString((bM + bI))), ((bc._3 - bL) - bR), (bc._4 - bQ), bc._5, bc._6, bG)
346+ else if ((0 > (bQ + bM)))
347+ then throw((((("Attempt to take " + toString(-(bM))) + " from warehouse, but only ") + toString(bQ)) + " available"))
348+ else $Tuple7((bJ + 1), (bg._2 :+ toString((bQ + bM))), ((bg._3 - bP) - bV), (bg._4 - bU), bg._5, bg._6, bK)
337349 }
338350 }
339351 }
340352
341353
342-func bT (bc,bU) = {
343- let bF = bc._7
344- let bG = bc._12
345- let aS = if (bG)
346- then parseIntValue(split(Q[bF], "_")[ad])
354+func bX (bg,bY) = {
355+ let bJ = bg._7
356+ let bK = bg._12
357+ let aW = if (bK)
358+ then parseIntValue(split(Q[bJ], "_")[ad])
347359 else 0
348- let bV = split(bU, "@")
349- if ((size(bV) != 2))
360+ let bZ = split(bY, "@")
361+ if ((size(bZ) != 2))
350362 then throw("Incorrect order format, should be amount@price")
351363 else {
352- let bW = parseIntValue(bV[0])
353- let bX = parseIntValue(bV[1])
354- if ((0 > bX))
364+ let ca = parseIntValue(bZ[0])
365+ let cb = parseIntValue(bZ[1])
366+ if ((0 > cb))
355367 then throw("Price can't be negative")
356368 else {
357- let bY = fraction(bW, bX, d)
358- let bZ = parseIntValue(bc._8[bF])
359- let bM = parseIntValue(bc._9[bF])
360- let ca = split(bc._10[bF], "@")
361- let cb = parseIntValue(ca[0])
362- let cc = parseIntValue(ca[1])
363- if (if ((bW != 0))
364- then (bX != cc)
369+ let cc = fraction(ca, cb, d)
370+ let cd = parseIntValue(bg._8[bJ])
371+ let bQ = parseIntValue(bg._9[bJ])
372+ let ce = split(bg._10[bJ], "@")
373+ let cf = parseIntValue(ce[0])
374+ let cg = parseIntValue(ce[1])
375+ if (if ((ca != 0))
376+ then (cb != cg)
365377 else false)
366- then throw(((((("Prices of " + bc._11[bF]) + " don't match! WH price=") + toString(cc)) + ", your price=") + toString(bX)))
378+ then throw(((((("Prices of " + bg._11[bJ]) + " don't match! WH price=") + toString(cg)) + ", your price=") + toString(cb)))
367379 else {
368- let cd = fraction(cb, cc, d)
369- let ce = aQ(bW, aS, bG)
370- if ((bW == 0))
371- then $Tuple11((bc._1 :+ toString(bM)), (bc._2 :+ bc._10[bF]), (bc._3 :+ toString(bZ)), bc._4, bc._5, bc._6, (bc._7 + 1), bc._8, bc._9, bc._10, bc._11)
372- else if ((bW > 0))
373- then if ((0 > cb))
374- then if ((bW > -(cb)))
375- then throw(((((("Attempt to buy " + toString(bW)) + " of ") + bc._11[bF]) + ", but warehouse only sells ") + toString(-(cb))))
376- else $Tuple11((bc._1 :+ toString(bM)), (bc._2 :+ ((toString((cb + bW)) + "@") + toString(cc))), (bc._3 :+ toString((bZ + bW))), (bc._4 + ce), bc._5, (bc._6 + bY), (bc._7 + 1), bc._8, bc._9, bc._10, bc._11)
377- else throw((("Attempt to buy " + bc._11[bF]) + " while warehouse doesn't sell it"))
378- else if ((cb > 0))
379- then if ((-(bW) > cb))
380- then throw(((((("Attempt to sell " + toString(-(bW))) + " of ") + bc._11[bF]) + ", but warehouse only buys ") + toString(cb)))
381- else if ((-(bW) > bZ))
382- then throw(((((("Attempt to sell " + toString(-(bW))) + ", but you only have ") + toString(bZ)) + " of ") + bc._11[bF]))
383- else $Tuple11((bc._1 :+ toString((bM - bW))), (bc._2 :+ ((toString((cb + bW)) + "@") + toString(cc))), (bc._3 :+ toString((bZ + bW))), (bc._4 - ce), (bc._5 - bY), bc._6, (bc._7 + 1), bc._8, bc._9, bc._10, bc._11)
384- else throw((("Attempt to sell " + bc._11[bF]) + " while warehouse doesn't buy it"))
380+ let ch = fraction(cf, cg, d)
381+ let ci = aU(ca, aW, bK)
382+ if ((ca == 0))
383+ then $Tuple11((bg._1 :+ toString(bQ)), (bg._2 :+ bg._10[bJ]), (bg._3 :+ toString(cd)), bg._4, bg._5, bg._6, (bg._7 + 1), bg._8, bg._9, bg._10, bg._11)
384+ else if ((ca > 0))
385+ then if ((0 > cf))
386+ then if ((ca > -(cf)))
387+ then throw(((((("Attempt to buy " + toString(ca)) + " of ") + bg._11[bJ]) + ", but warehouse only sells ") + toString(-(cf))))
388+ else $Tuple11((bg._1 :+ toString(bQ)), (bg._2 :+ ((toString((cf + ca)) + "@") + toString(cg))), (bg._3 :+ toString((cd + ca))), (bg._4 + ci), bg._5, (bg._6 + cc), (bg._7 + 1), bg._8, bg._9, bg._10, bg._11)
389+ else throw((("Attempt to buy " + bg._11[bJ]) + " while warehouse doesn't sell it"))
390+ else if ((cf > 0))
391+ then if ((-(ca) > cf))
392+ then throw(((((("Attempt to sell " + toString(-(ca))) + " of ") + bg._11[bJ]) + ", but warehouse only buys ") + toString(cf)))
393+ else if ((-(ca) > cd))
394+ then throw(((((("Attempt to sell " + toString(-(ca))) + ", but you only have ") + toString(cd)) + " of ") + bg._11[bJ]))
395+ else $Tuple11((bg._1 :+ toString((bQ - ca))), (bg._2 :+ ((toString((cf + ca)) + "@") + toString(cg))), (bg._3 :+ toString((cd + ca))), (bg._4 - ci), (bg._5 - cc), bg._6, (bg._7 + 1), bg._8, bg._9, bg._10, bg._11)
396+ else throw((("Attempt to sell " + bg._11[bJ]) + " while warehouse doesn't buy it"))
385397 }
386398 }
387399 }
388400 }
389401
390402
391-@Callable(cf)
392-func constructorV1 (cg) = if ((cf.caller != this))
403+@Callable(cj)
404+func constructorV1 (ck) = if ((cj.caller != this))
393405 then throw("Permission denied")
394- else [StringEntry(s(), cg)]
406+ else [StringEntry(s(), ck)]
395407
396408
397409
398-@Callable(cf)
399-func sellResources (ch,ci) = {
400- let cj = bD()
401- if ((cj == cj))
410+@Callable(cj)
411+func sellResources (cl,cm) = {
412+ let cn = bH()
413+ if ((cn == cn))
402414 then {
403- let an = valueOrErrorMessage(getString(z, ak(toString(cf.caller))), "You don't have a duck staked")
404- if ((size(cf.payments) != 0))
415+ let an = valueOrErrorMessage(getString(z, ak(toString(cj.caller))), "You don't have a duck staked")
416+ if ((size(cj.payments) != 0))
405417 then throw("sellResources doesn't require any payments")
406418 else {
407- let ck = split(valueOrElse(getString(z, ao(an)), A), "_")
408- if ((ck[aw] != "F"))
409- then throw(("Duck location type should be Factory, but is " + ck[aw]))
419+ let co = split(valueOrElse(getString(z, ao(an)), A), "_")
420+ if ((co[aw] != "F"))
421+ then throw(("Duck location type should be Factory, but is " + co[aw]))
410422 else {
411- let bm = ck[ax]
412- let cl = bB(am(an))
413- let cm = split(cl[az], "_")
414- func cn (bc,bF) = if ((ch[bF] > parseIntValue(cm[bF])))
415- then throw(((((("You have " + cm[bF]) + " of ") + M[bF]) + ", but tried to sell ") + toString(ch[bF])))
416- else if ((0 > ch[bF]))
417- then throw(((("You tried to sell negative amount of " + M[bF]) + ": ") + toString(ch[bF])))
418- else if ((ch[bF] > 0))
423+ let bq = co[ax]
424+ let cp = bF(am(an))
425+ let cq = split(cp[az], "_")
426+ func cr (bg,bJ) = if ((cl[bJ] > parseIntValue(cq[bJ])))
427+ then throw(((((("You have " + cq[bJ]) + " of ") + M[bJ]) + ", but tried to sell ") + toString(cl[bJ])))
428+ else if ((0 > cl[bJ]))
429+ then throw(((("You tried to sell negative amount of " + M[bJ]) + ": ") + toString(cl[bJ])))
430+ else if ((cl[bJ] > 0))
419431 then {
420- let co = bl(bm, bF, ch[bF], ci[bF])
421- $Tuple3((bc._1 :+ co._1), (bc._2 :+ toString((parseIntValue(cm[bF]) - ch[bF]))), (bc._3 + co._2))
432+ let cs = bp(bq, bJ, cl[bJ], cm[bJ])
433+ $Tuple3((bg._1 :+ cs._1), (bg._2 :+ toString((parseIntValue(cq[bJ]) - cl[bJ]))), (bg._3 + cs._2))
422434 }
423- else $Tuple3(bc._1, (bc._2 :+ cm[bF]), bc._3)
435+ else $Tuple3(bg._1, (bg._2 :+ cq[bJ]), bg._3)
424436
425- let cp = {
426- let be = [0, 1, 2, 3, 4, 5]
427- let bf = size(be)
428- let bg = $Tuple3(nil, nil, 0)
429- func bh (bi,bj) = if ((bj >= bf))
430- then bi
431- else cn(bi, be[bj])
437+ let ct = {
438+ let bi = [0, 1, 2, 3, 4, 5]
439+ let bj = size(bi)
440+ let bk = $Tuple3(nil, nil, 0)
441+ func bl (bm,bn) = if ((bn >= bj))
442+ then bm
443+ else cr(bm, bi[bn])
432444
433- func bk (bi,bj) = if ((bj >= bf))
434- then bi
445+ func bo (bm,bn) = if ((bn >= bj))
446+ then bm
435447 else throw("List size exceeds 6")
436448
437- bk(bh(bh(bh(bh(bh(bh(bg, 0), 1), 2), 3), 4), 5), 6)
449+ bo(bl(bl(bl(bl(bl(bl(bk, 0), 1), 2), 3), 4), 5), 6)
438450 }
439- let cq = makeString([cl[ay], makeString(cp._2, "_"), cl[aA], cl[aB]], ":")
440- let cr = aK(invoke(z, "updateBackpack", [an, cq], nil))
441- $Tuple2((cp._1 :+ ScriptTransfer(cf.caller, cp._3, g)), cr)
451+ let cu = makeString([cp[ay], makeString(ct._2, "_"), cp[aA], cp[aB]], ":")
452+ let cv = aO(invoke(z, "updateBackpack", [an, cu], nil))
453+ $Tuple2((ct._1 :+ ScriptTransfer(cj.caller, ct._3, g)), cv)
442454 }
443455 }
444456 }
447459
448460
449461
450-@Callable(cf)
451-func buyMaterials (ch,cs) = {
452- let cj = bD()
453- if ((cj == cj))
462+@Callable(cj)
463+func buyMaterials (cl,cw) = {
464+ let cn = bH()
465+ if ((cn == cn))
454466 then {
455- let an = valueOrErrorMessage(getString(z, ak(toString(cf.caller))), "You don't have a duck staked")
456- if ((size(cf.payments) != 1))
467+ let an = valueOrErrorMessage(getString(z, ak(toString(cj.caller))), "You don't have a duck staked")
468+ if ((size(cj.payments) != 1))
457469 then throw("exactly 1 payment must be attached")
458470 else {
459- let ct = cf.payments[0]
460- let cu = ct.amount
461- let cv = valueOrErrorMessage(ct.assetId, "WAVES can't be used as payment")
462- if ((cv != g))
471+ let cx = cj.payments[0]
472+ let cy = cx.amount
473+ let cz = valueOrErrorMessage(cx.assetId, "WAVES can't be used as payment")
474+ if ((cz != g))
463475 then throw("USDT payments only!")
464476 else {
465- let ck = split(valueOrElse(getString(z, ao(an)), A), "_")
466- if ((ck[aw] != "F"))
467- then throw(("Duck location type should be Factory, but is " + ck[aw]))
477+ let co = split(valueOrElse(getString(z, ao(an)), A), "_")
478+ if ((co[aw] != "F"))
479+ then throw(("Duck location type should be Factory, but is " + co[aw]))
468480 else {
469- let bm = ck[ax]
470- let cl = bB(am(an))
471- let cw = split(cl[aA], "_")
472- func cx (bc,bF) = if ((0 > ch[bF]))
473- then throw(((("You tried to buy negative amount of " + N[bF]) + ": ") + toString(ch[bF])))
474- else if ((ch[bF] > 0))
481+ let bq = co[ax]
482+ let cp = bF(am(an))
483+ let cA = split(cp[aA], "_")
484+ func cB (bg,bJ) = if ((0 > cl[bJ]))
485+ then throw(((("You tried to buy negative amount of " + N[bJ]) + ": ") + toString(cl[bJ])))
486+ else if ((cl[bJ] > 0))
475487 then {
476- let co = bt(bm, bF, ch[bF], cs[bF])
477- $Tuple3((bc._1 :+ co._1), (bc._2 :+ toString((parseIntValue(cw[bF]) + co._3))), (bc._3 + co._2))
488+ let cs = bx(bq, bJ, cl[bJ], cw[bJ])
489+ $Tuple3((bg._1 :+ cs._1), (bg._2 :+ toString((parseIntValue(cA[bJ]) + cs._3))), (bg._3 + cs._2))
478490 }
479- else $Tuple3(bc._1, (bc._2 :+ cw[bF]), bc._3)
491+ else $Tuple3(bg._1, (bg._2 :+ cA[bJ]), bg._3)
480492
481- let cp = {
482- let be = [0, 1, 2, 3, 4, 5]
483- let bf = size(be)
484- let bg = $Tuple3(nil, nil, 0)
485- func bh (bi,bj) = if ((bj >= bf))
486- then bi
487- else cx(bi, be[bj])
493+ let ct = {
494+ let bi = [0, 1, 2, 3, 4, 5]
495+ let bj = size(bi)
496+ let bk = $Tuple3(nil, nil, 0)
497+ func bl (bm,bn) = if ((bn >= bj))
498+ then bm
499+ else cB(bm, bi[bn])
488500
489- func bk (bi,bj) = if ((bj >= bf))
490- then bi
501+ func bo (bm,bn) = if ((bn >= bj))
502+ then bm
491503 else throw("List size exceeds 6")
492504
493- bk(bh(bh(bh(bh(bh(bh(bg, 0), 1), 2), 3), 4), 5), 6)
505+ bo(bl(bl(bl(bl(bl(bl(bk, 0), 1), 2), 3), 4), 5), 6)
494506 }
495- if ((cp._3 > cu))
496- then throw(((("Insufficient payment! Attached=" + toString(cu)) + ", required=") + toString(cp._3)))
507+ if ((ct._3 > cy))
508+ then throw(((("Insufficient payment! Attached=" + toString(cy)) + ", required=") + toString(ct._3)))
497509 else {
498- let cq = makeString([cl[ay], cl[az], makeString(cp._2, "_"), cl[aB]], ":")
499- let cr = aK(invoke(z, "updateBackpack", [an, cq], nil))
500- let u = if (((cu - cp._3) > 0))
501- then [ScriptTransfer(cf.caller, (cu - cp._3), g)]
510+ let cu = makeString([cp[ay], cp[az], makeString(ct._2, "_"), cp[aB]], ":")
511+ let cv = aO(invoke(z, "updateBackpack", [an, cu], nil))
512+ let u = if (((cy - ct._3) > 0))
513+ then [ScriptTransfer(cj.caller, (cy - ct._3), g)]
502514 else nil
503- let cy = (cp._3 / 100)
504- $Tuple2(((cp._1 ++ u) :+ ScriptTransfer(y, cy, g)), cr)
515+ let cC = (ct._3 / 100)
516+ $Tuple2(((ct._1 ++ u) :+ ScriptTransfer(y, cC, g)), cv)
505517 }
506518 }
507519 }
512524
513525
514526
515-@Callable(cf)
516-func exchangeResources (ch) = {
517- let cj = bD()
518- if ((cj == cj))
527+@Callable(cj)
528+func exchangeResources (cl) = {
529+ let cn = bH()
530+ if ((cn == cn))
519531 then {
520- let an = valueOrErrorMessage(getString(z, ak(toString(cf.caller))), "You don't have a duck staked")
521- if ((size(cf.payments) != 1))
532+ let an = valueOrErrorMessage(getString(z, ak(toString(cj.caller))), "You don't have a duck staked")
533+ if ((size(cj.payments) != 1))
522534 then throw("exactly 1 payment must be attached")
523535 else {
524- let ct = cf.payments[0]
525- let cu = ct.amount
526- let cv = valueOrErrorMessage(ct.assetId, "WAVES can't be used as payment")
527- if ((cv != g))
536+ let cx = cj.payments[0]
537+ let cy = cx.amount
538+ let cz = valueOrErrorMessage(cx.assetId, "WAVES can't be used as payment")
539+ if ((cz != g))
528540 then throw("USDT payments only!")
529541 else {
530- let ck = split(valueOrElse(getString(z, ao(an)), A), "_")
531- if ((ck[aw] != "F"))
532- then throw(("Duck location type should be Factory, but is " + ck[aw]))
542+ let co = split(valueOrElse(getString(z, ao(an)), A), "_")
543+ if ((co[aw] != "F"))
544+ then throw(("Duck location type should be Factory, but is " + co[aw]))
533545 else {
534- let bm = ck[ax]
535- let cl = bB(am(an))
536- let cm = split(cl[az], "_")
537- let cw = split(cl[aA], "_")
538- func cz (bc,bF) = {
539- let bo = af(bm, bF)
540- let bp = valueOrElse(getInteger(bo), 0)
541- let cA = ch[bF]
542- if ((cA > parseIntValue(cm[bF])))
543- then throw(((((("You have " + cm[bF]) + " of ") + M[bF]) + ", but tried to exchange ") + toString(cA)))
544- else if ((0 > cA))
545- then throw(((("You tried to exchange negative amount of " + M[bF]) + ": ") + toString(cA)))
546- else if ((cA > 0))
547- then $Tuple4((bc._1 :+ toString((parseIntValue(cm[bF]) - cA))), (bc._2 :+ toString((parseIntValue(cw[bF]) + cA))), (bc._3 + fraction(cA, D, d)), (bc._4 :+ IntegerEntry(bo, bp)))
548- else $Tuple4((bc._1 :+ cm[bF]), (bc._2 :+ cw[bF]), bc._3, bc._4)
546+ let bq = co[ax]
547+ let cp = bF(am(an))
548+ let cq = split(cp[az], "_")
549+ let cA = split(cp[aA], "_")
550+ func cD (bg,bJ) = {
551+ let bs = af(bq, bJ)
552+ let bt = valueOrElse(getInteger(bs), 0)
553+ let cE = cl[bJ]
554+ if ((cE > parseIntValue(cq[bJ])))
555+ then throw(((((("You have " + cq[bJ]) + " of ") + M[bJ]) + ", but tried to exchange ") + toString(cE)))
556+ else if ((0 > cE))
557+ then throw(((("You tried to exchange negative amount of " + M[bJ]) + ": ") + toString(cE)))
558+ else if ((cE > 0))
559+ then $Tuple4((bg._1 :+ toString((parseIntValue(cq[bJ]) - cE))), (bg._2 :+ toString((parseIntValue(cA[bJ]) + cE))), (bg._3 + fraction(cE, D, d)), (bg._4 :+ IntegerEntry(bs, bt)))
560+ else $Tuple4((bg._1 :+ cq[bJ]), (bg._2 :+ cA[bJ]), bg._3, bg._4)
549561 }
550562
551- let cp = {
552- let be = [0, 1, 2, 3, 4, 5]
553- let bf = size(be)
554- let bg = $Tuple4(nil, nil, 0, nil)
555- func bh (bi,bj) = if ((bj >= bf))
556- then bi
557- else cz(bi, be[bj])
563+ let ct = {
564+ let bi = [0, 1, 2, 3, 4, 5]
565+ let bj = size(bi)
566+ let bk = $Tuple4(nil, nil, 0, nil)
567+ func bl (bm,bn) = if ((bn >= bj))
568+ then bm
569+ else cD(bm, bi[bn])
558570
559- func bk (bi,bj) = if ((bj >= bf))
560- then bi
571+ func bo (bm,bn) = if ((bn >= bj))
572+ then bm
561573 else throw("List size exceeds 6")
562574
563- bk(bh(bh(bh(bh(bh(bh(bg, 0), 1), 2), 3), 4), 5), 6)
575+ bo(bl(bl(bl(bl(bl(bl(bk, 0), 1), 2), 3), 4), 5), 6)
564576 }
565- if ((cp._3 > cu))
566- then throw(((("Insufficient payment! Attached=" + toString(cu)) + ", required=") + toString(cp._3)))
577+ if ((ct._3 > cy))
578+ then throw(((("Insufficient payment! Attached=" + toString(cy)) + ", required=") + toString(ct._3)))
567579 else {
568- let cq = makeString([cl[ay], makeString(cp._1, "_"), makeString(cp._2, "_"), cl[aB]], ":")
569- let cr = aK(invoke(z, "updateBackpack", [an, cq], nil))
570- let u = if (((cu - cp._3) > 0))
571- then [ScriptTransfer(cf.caller, (cu - cp._3), g)]
580+ let cu = makeString([cp[ay], makeString(ct._1, "_"), makeString(ct._2, "_"), cp[aB]], ":")
581+ let cv = aO(invoke(z, "updateBackpack", [an, cu], nil))
582+ let u = if (((cy - ct._3) > 0))
583+ then [ScriptTransfer(cj.caller, (cy - ct._3), g)]
572584 else nil
573- let cy = (cp._3 / 100)
574- $Tuple2(((u ++ cp._4) :+ ScriptTransfer(y, cy, g)), cr)
585+ let cC = (ct._3 / 100)
586+ $Tuple2(((u ++ ct._4) :+ ScriptTransfer(y, cC, g)), cv)
575587 }
576588 }
577589 }
582594
583595
584596
585-@Callable(cf)
586-func craftGoods (cB,cC) = {
587- let cj = bD()
588- if ((cj == cj))
589- then if ((size(cf.payments) != 1))
597+@Callable(cj)
598+func craftGoods (cF,cG) = {
599+ let cn = bH()
600+ if ((cn == cn))
601+ then if ((size(cj.payments) != 1))
590602 then throw("exactly 1 payment must be attached")
591603 else {
592- let ct = cf.payments[0]
593- let cu = ct.amount
594- let cv = valueOrErrorMessage(ct.assetId, "WAVES can't be used as payment")
595- if ((cv != g))
604+ let cx = cj.payments[0]
605+ let cy = cx.amount
606+ let cz = valueOrErrorMessage(cx.assetId, "WAVES can't be used as payment")
607+ if ((cz != g))
596608 then throw("USDT payments only!")
597- else if ((cu != b))
609+ else if ((cy != b))
598610 then throw("exactly 1 USDT must be attached as payment")
599- else if ((0 >= cC))
611+ else if ((0 >= cG))
600612 then throw("Quantity should be positive")
601613 else {
602- let an = valueOrErrorMessage(getString(z, ak(toString(cf.caller))), "You don't have a duck staked")
603- let ck = split(valueOrElse(getString(z, ao(an)), A), "_")
604- if ((ck[aw] != "M"))
605- then throw(("Duck location type should be Manufactory, but is " + ck[aw]))
614+ let an = valueOrErrorMessage(getString(z, ak(toString(cj.caller))), "You don't have a duck staked")
615+ let co = split(valueOrElse(getString(z, ao(an)), A), "_")
616+ if ((co[aw] != "M"))
617+ then throw(("Duck location type should be Manufactory, but is " + co[aw]))
606618 else {
607- let cD = ck[av]
608- let cl = bB(am(an))
609- let cw = split(cl[aA], "_")
610- if (if ((0 > cB))
619+ let cH = co[av]
620+ let cp = bF(am(an))
621+ let cA = split(cp[aA], "_")
622+ if (if ((0 > cF))
611623 then true
612- else (cB >= size(Q)))
613- then throw(("Unknown product idx=" + toString(cB)))
624+ else (cF >= size(Q)))
625+ then throw(("Unknown product idx=" + toString(cF)))
614626 else {
615- let cE = split(Q[cB], "_")
616- if ((size(cE) != (B + 3)))
617- then throw(("Fatal: unknown recipe: " + Q[cB]))
627+ let cI = split(Q[cF], "_")
628+ if ((size(cI) != (B + 3)))
629+ then throw(("Fatal: unknown recipe: " + Q[cF]))
618630 else {
619- let cF = parseIntValue(cE[ae])
620- if ((P[cF] != cD))
621- then throw(((("This product is available in " + P[cF]) + ", but you are in ") + cD))
631+ let cJ = parseIntValue(cI[ae])
632+ if ((P[cJ] != cH))
633+ then throw(((("This product is available in " + P[cJ]) + ", but you are in ") + cH))
622634 else {
623- let cG = if ((cl[aB] == ""))
635+ let cK = if ((cp[aB] == ""))
624636 then nil
625- else split(cl[aB], "_")
626- func cH (bc,cI) = {
627- let cJ = bc._2
628- let cK = if ((size(cG) > cJ))
629- then cG[cJ]
637+ else split(cp[aB], "_")
638+ func cL (bg,cM) = {
639+ let cN = bg._2
640+ let cO = if ((size(cK) > cN))
641+ then cK[cN]
630642 else "0"
631- let cL = parseIntValue(cK)
632- let aR = (cC * parseIntValue(cE[ad]))
633- let cM = if ((cJ == cB))
634- then toString((cL + aR))
635- else cK
636- $Tuple2((bc._1 :+ cM), (cJ + 1))
643+ let cP = parseIntValue(cO)
644+ let aV = (cG * parseIntValue(cI[ad]))
645+ let cQ = if ((cN == cF))
646+ then toString((cP + aV))
647+ else cO
648+ $Tuple2((bg._1 :+ cQ), (cN + 1))
637649 }
638650
639- let cN = ( let be = Q
640- let bf = size(be)
641- let bg = $Tuple2(nil, 0)
642- func bh (bi,bj) = if ((bj >= bf))
643- then bi
644- else cH(bi, be[bj])
651+ let cR = ( let bi = Q
652+ let bj = size(bi)
653+ let bk = $Tuple2(nil, 0)
654+ func bl (bm,bn) = if ((bn >= bj))
655+ then bm
656+ else cL(bm, bi[bn])
645657
646- func bk (bi,bj) = if ((bj >= bf))
647- then bi
658+ func bo (bm,bn) = if ((bn >= bj))
659+ then bm
648660 else throw("List size exceeds 50")
649661
650- bk(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bg, 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))._1
651- func cO (bc,bF) = {
652- let cP = ((parseIntValue(cE[bF]) * c) * cC)
653- let cQ = parseIntValue(cw[bF])
654- if ((cP > cQ))
655- then throw(((((((("You have " + cw[bF]) + " of ") + N[bF]) + ", but recipe requires ") + toString(cP)) + " for quantity ") + toString(cC)))
656- else if ((cP > 0))
657- then (bc :+ toString((cQ - cP)))
658- else (bc :+ cw[bF])
662+ bo(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bk, 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))._1
663+ func cS (bg,bJ) = {
664+ let cT = ((parseIntValue(cI[bJ]) * c) * cG)
665+ let cU = parseIntValue(cA[bJ])
666+ if ((cT > cU))
667+ then throw(((((((("You have " + cA[bJ]) + " of ") + N[bJ]) + ", but recipe requires ") + toString(cT)) + " for quantity ") + toString(cG)))
668+ else if ((cT > 0))
669+ then (bg :+ toString((cU - cT)))
670+ else (bg :+ cA[bJ])
659671 }
660672
661- let cp = {
662- let be = [0, 1, 2, 3, 4, 5]
663- let bf = size(be)
664- let bg = nil
665- func cR (bi,bj) = if ((bj >= bf))
666- then bi
667- else cO(bi, be[bj])
673+ let ct = {
674+ let bi = [0, 1, 2, 3, 4, 5]
675+ let bj = size(bi)
676+ let bk = nil
677+ func cV (bm,bn) = if ((bn >= bj))
678+ then bm
679+ else cS(bm, bi[bn])
668680
669- func cS (bi,bj) = if ((bj >= bf))
670- then bi
681+ func cW (bm,bn) = if ((bn >= bj))
682+ then bm
671683 else throw("List size exceeds 6")
672684
673- cS(cR(cR(cR(cR(cR(cR(bg, 0), 1), 2), 3), 4), 5), 6)
685+ cW(cV(cV(cV(cV(cV(cV(bk, 0), 1), 2), 3), 4), 5), 6)
674686 }
675- let cq = makeString([cl[ay], cl[az], makeString(cp, "_"), makeString(cN, "_")], ":")
676- let cr = aK(invoke(z, "updateBackpack", [an, cq], nil))
677- $Tuple2(nil, cr)
687+ let cu = makeString([cp[ay], cp[az], makeString(ct, "_"), makeString(cR, "_")], ":")
688+ let cv = aO(invoke(z, "updateBackpack", [an, cu], nil))
689+ $Tuple2(nil, cv)
678690 }
679691 }
680692 }
686698
687699
688700
689-@Callable(cf)
690-func setWarehouseOrder (cT,aj) = {
691- let cU = cf.originCaller
692- let au = toString(cU)
693- let cr = if ((cU != y))
694- then bD()
701+@Callable(cj)
702+func setWarehouseOrder (cX,aj) = {
703+ let cY = cj.originCaller
704+ let au = toString(cY)
705+ let cv = if ((cY != y))
706+ then bH()
695707 else false
696- let cV = value(assetInfo(fromBase58String(aj)))
708+ let cZ = value(assetInfo(fromBase58String(aj)))
697709 if (!(isDefined(getInteger(z, as(aj)))))
698- then throw((("NFT " + cV.name) + " is not staked"))
710+ then throw((("NFT " + cZ.name) + " is not staked"))
699711 else {
700- let cW = valueOrErrorMessage(getString(z, aq(aj)), (("NFT " + cV.name) + " is orphaned"))
701- if (if ((cU != y))
702- then (cW != au)
712+ let da = valueOrErrorMessage(getString(z, aq(aj)), (("NFT " + cZ.name) + " is orphaned"))
713+ if (if ((cY != y))
714+ then (da != au)
703715 else false)
704716 then throw((H + " is not yours"))
705717 else {
706- let cX = split_4C(cT, ":")
707- if ((size(cX) != 3))
718+ let db = split_4C(cX, ":")
719+ if ((size(db) != 3))
708720 then throw("cargoListStr should contain exactly 2 ':' separators")
709721 else {
710- let cY = split(cX[0], "_")
711- let cZ = split(cX[1], "_")
712- let da = if ((cX[2] == ""))
722+ let dc = split(db[0], "_")
723+ let dd = split(db[1], "_")
724+ let de = if ((db[2] == ""))
713725 then nil
714- else split(cX[2], "_")
715- if ((size(cY) != B))
726+ else split(db[2], "_")
727+ if ((size(dc) != B))
716728 then throw("All 6 resources should be passed")
717- else if ((size(cZ) != B))
729+ else if ((size(dd) != B))
718730 then throw("All 6 materials should be passed")
719731 else {
720- let db = aK(invoke(z, "getWarehouseREADONLY", [aj], nil))
721- let aZ = split_4C(db, ":")
722- let dc = split(aZ[aD], "_")
723- let dd = split(aZ[aE], "_")
724- let de = if ((aZ[aF] == ""))
732+ let df = aO(invoke(z, "getWarehouseREADONLY", [aj], nil))
733+ let bd = split_4C(df, ":")
734+ let dg = split(bd[aD], "_")
735+ let dh = split(bd[aE], "_")
736+ let di = if ((bd[aF] == ""))
725737 then nil
726- else split(aZ[aF], "_")
727- let df = aV(aZ[aC])
728- let aO = ai(aj)
729- let dg = aN(aO)
730- let dh = split(dg[aH], "_")
731- let di = split(dg[aI], "_")
732- let dj = if ((dg[aJ] == ""))
738+ else split(bd[aF], "_")
739+ let dj = aZ(bd[aC])
740+ let aS = ai(aj)
741+ let dk = aR(aS)
742+ let dl = split(dk[aL], "_")
743+ let dm = split(dk[aM], "_")
744+ let dn = if ((dk[aN] == ""))
733745 then nil
734- else split(dg[aJ], "_")
735- let dk = 0
736- let dl = {
737- let be = cY
738- let bf = size(be)
739- let bg = $Tuple7(0, nil, 0, 0, dc, dh, false)
740- func bh (bi,bj) = if ((bj >= bf))
741- then bi
742- else bE(bi, be[bj])
746+ else split(dk[aN], "_")
747+ let do = 0
748+ let dp = {
749+ let bi = dc
750+ let bj = size(bi)
751+ let bk = $Tuple7(0, nil, 0, 0, dg, dl, false)
752+ func bl (bm,bn) = if ((bn >= bj))
753+ then bm
754+ else bI(bm, bi[bn])
743755
744- func bk (bi,bj) = if ((bj >= bf))
745- then bi
756+ func bo (bm,bn) = if ((bn >= bj))
757+ then bm
746758 else throw("List size exceeds 6")
747759
748- bk(bh(bh(bh(bh(bh(bh(bg, 0), 1), 2), 3), 4), 5), 6)
760+ bo(bl(bl(bl(bl(bl(bl(bk, 0), 1), 2), 3), 4), 5), 6)
749761 }
750- let by = {
751- let be = cZ
752- let bf = size(be)
753- let bg = $Tuple7(0, nil, dl._3, dl._4, dd, di, false)
754- func cR (bi,bj) = if ((bj >= bf))
755- then bi
756- else bE(bi, be[bj])
762+ let bC = {
763+ let bi = dd
764+ let bj = size(bi)
765+ let bk = $Tuple7(0, nil, dp._3, dp._4, dh, dm, false)
766+ func cV (bm,bn) = if ((bn >= bj))
767+ then bm
768+ else bI(bm, bi[bn])
757769
758- func cS (bi,bj) = if ((bj >= bf))
759- then bi
770+ func cW (bm,bn) = if ((bn >= bj))
771+ then bm
760772 else throw("List size exceeds 6")
761773
762- cS(cR(cR(cR(cR(cR(cR(bg, 0), 1), 2), 3), 4), 5), 6)
774+ cW(cV(cV(cV(cV(cV(cV(bk, 0), 1), 2), 3), 4), 5), 6)
763775 }
764- let aP = if ((size(da) != 0))
776+ let aT = if ((size(de) != 0))
765777 then {
766- let be = da
767- let bf = size(be)
768- let bg = $Tuple7(0, nil, by._3, by._4, de, dj, true)
769- func dm (bi,bj) = if ((bj >= bf))
770- then bi
771- else bE(bi, be[bj])
778+ let bi = de
779+ let bj = size(bi)
780+ let bk = $Tuple7(0, nil, bC._3, bC._4, di, dn, true)
781+ func dq (bm,bn) = if ((bn >= bj))
782+ then bm
783+ else bI(bm, bi[bn])
772784
773- func dn (bi,bj) = if ((bj >= bf))
774- then bi
785+ func dr (bm,bn) = if ((bn >= bj))
786+ then bm
775787 else throw("List size exceeds 50")
776788
777- dn(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(bg, 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)
789+ dr(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(bk, 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)
778790 }
779- else $Tuple7(0, de, by._3, by._4, de, dj, true)
780- let do = aP._3
781- if ((do > df))
782- then throw((((("Attempt to reserve " + toString(do)) + " space, but only ") + toString(df)) + " warehouse space left"))
791+ else $Tuple7(0, di, bC._3, bC._4, di, dn, true)
792+ let ds = aT._3
793+ if ((ds > dj))
794+ then throw((((("Attempt to reserve " + toString(ds)) + " space, but only ") + toString(dj)) + " warehouse space left"))
783795 else {
784- let dp = makeString_2C([aZ[aC], makeString(dl._2, "_"), makeString(by._2, "_"), makeString(aP._2, "_"), toString(do)], ":")
785- let dq = invoke(z, "saveWarehouse", [dp, aj], nil)
786- if ((dq == dq))
796+ let dt = makeString_2C([bd[aC], makeString(dp._2, "_"), makeString(bC._2, "_"), makeString(aT._2, "_"), toString(ds)], ":")
797+ let du = invoke(z, "saveWarehouse", [dt, aj], nil)
798+ if ((du == du))
787799 then {
788- let dr = aP._4
789- let ds = if ((dr > 0))
790- then if ((size(cf.payments) != 1))
800+ let dv = aT._4
801+ let dw = if ((dv > 0))
802+ then if ((size(cj.payments) != 1))
791803 then throw("exactly 1 payment must be attached")
792804 else {
793- let ct = cf.payments[0]
794- let cu = ct.amount
795- let cv = valueOrErrorMessage(ct.assetId, "WAVES can't be used as payment")
796- if ((cv != g))
805+ let cx = cj.payments[0]
806+ let cy = cx.amount
807+ let cz = valueOrErrorMessage(cx.assetId, "WAVES can't be used as payment")
808+ if ((cz != g))
797809 then throw("USDT payments only!")
798- else if ((cu != dr))
799- then throw(("Payment needed is " + toString(dr)))
800- else [StringEntry(aO, cT)]
810+ else if ((cy != dv))
811+ then throw(("Payment needed is " + toString(dv)))
812+ else [StringEntry(aS, cX)]
801813 }
802- else if ((dr == 0))
803- then if ((size(cf.payments) != 0))
814+ else if ((dv == 0))
815+ then if ((size(cj.payments) != 0))
804816 then throw("No payments needed")
805- else [StringEntry(aO, cT)]
806- else if ((size(cf.payments) != 0))
817+ else [StringEntry(aS, cX)]
818+ else if ((size(cj.payments) != 0))
807819 then throw("No payments needed")
808- else [ScriptTransfer(addressFromStringValue(cW), -(dr), g), StringEntry(aO, cT)]
809- $Tuple2(ds, cr)
820+ else [ScriptTransfer(addressFromStringValue(da), -(dv), g), StringEntry(aS, cX)]
821+ $Tuple2(dw, cv)
810822 }
811823 else throw("Strict value is not equal to itself.")
812824 }
818830
819831
820832
821-@Callable(cf)
822-func acceptWarehouseOrder (dt,aj,an) = {
823- let cj = bD()
824- if ((cj == cj))
833+@Callable(cj)
834+func acceptWarehouseOrder (dx,aj,an) = {
835+ let cn = bH()
836+ if ((cn == cn))
825837 then {
826- let du = cf.originCaller
827- let dv = toString(du)
828- let dw = valueOrErrorMessage(getString(z, ak(dv)), "You don't have a duck staked")
829- let ck = valueOrElse(getString(z, ao(dw)), A)
830- let dx = split(value(ck), "_")
831- if ((dx[aw] != "L"))
832- then throw((("Duck location type is " + dx[aw]) + ", but should be L"))
833- else if ((dw != an))
834- then throw(((("Your staked duck is " + dw) + ", but passed ") + an))
838+ let dy = cj.originCaller
839+ let dz = toString(dy)
840+ let dA = valueOrErrorMessage(getString(z, ak(dz)), "You don't have a duck staked")
841+ let co = valueOrElse(getString(z, ao(dA)), A)
842+ let dB = split(value(co), "_")
843+ if ((dB[aw] != "L"))
844+ then throw((("Duck location type is " + dB[aw]) + ", but should be L"))
845+ else if ((dA != an))
846+ then throw(((("Your staked duck is " + dA) + ", but passed ") + an))
835847 else {
836- let dy = value(assetInfo(fromBase58String(aj)))
848+ let dC = value(assetInfo(fromBase58String(aj)))
837849 if (!(isDefined(getInteger(z, as(aj)))))
838- then throw((("NFT " + dy.name) + " is not staked"))
850+ then throw((("NFT " + dC.name) + " is not staked"))
839851 else {
840- let dz = valueOrErrorMessage(getString(z, aq(aj)), (("NFT " + dy.name) + " is orphaned"))
841- if ((dz == dv))
852+ let dD = valueOrErrorMessage(getString(z, aq(aj)), (("NFT " + dC.name) + " is orphaned"))
853+ if ((dD == dz))
842854 then throw("You cannot trade with yourself")
843855 else {
844- let dA = split_4C(dt, ":")
845- if ((size(dA) != 3))
856+ let dE = split_4C(dx, ":")
857+ if ((size(dE) != 3))
846858 then throw("bpOrderStr should contain exactly 2 ':' separators")
847859 else {
848- let dB = split(dA[0], "_")
849- let dC = split(dA[1], "_")
850- let dD = if ((dA[2] == ""))
860+ let dF = split(dE[0], "_")
861+ let dG = split(dE[1], "_")
862+ let dH = if ((dE[2] == ""))
851863 then nil
852- else split(dA[2], "_")
853- if ((size(dB) != B))
864+ else split(dE[2], "_")
865+ if ((size(dF) != B))
854866 then throw("All 6 resources should be passed")
855- else if ((size(dC) != B))
867+ else if ((size(dG) != B))
856868 then throw("All 6 materials should be passed")
857869 else {
858- let db = aK(invoke(z, "getWarehouseREADONLY", [aj], nil))
859- let aZ = split_4C(db, ":")
860- let dc = split(aZ[aD], "_")
861- let dd = split(aZ[aE], "_")
862- let de = if ((aZ[aF] == ""))
870+ let df = aO(invoke(z, "getWarehouseREADONLY", [aj], nil))
871+ let bd = split_4C(df, ":")
872+ let dg = split(bd[aD], "_")
873+ let dh = split(bd[aE], "_")
874+ let di = if ((bd[aF] == ""))
863875 then nil
864- else split(aZ[aF], "_")
865- let dE = parseIntValue(aZ[aG])
866- let bC = am(an)
867- let cl = bB(bC)
868- let dF = split(cl[az], "_")
869- let dG = split(cl[aA], "_")
870- let dH = if ((cl[aB] == ""))
876+ else split(bd[aF], "_")
877+ let dI = parseIntValue(split(bd[aG], "_")[aH])
878+ let bG = am(an)
879+ let cp = bF(bG)
880+ let dJ = split(cp[az], "_")
881+ let dK = split(cp[aA], "_")
882+ let dL = if ((cp[aB] == ""))
871883 then nil
872- else split(cl[aB], "_")
873- let aO = ai(aj)
874- let dI = aN(aO)
875- let dJ = split(dI[aH], "_")
876- let dK = split(dI[aI], "_")
877- let dL = if ((dI[aJ] == ""))
884+ else split(cp[aB], "_")
885+ let aS = ai(aj)
886+ let dM = aR(aS)
887+ let dN = split(dM[aL], "_")
888+ let dO = split(dM[aM], "_")
889+ let dP = if ((dM[aN] == ""))
878890 then nil
879- else split(dI[aJ], "_")
880- let dk = 0
881- let dl = {
882- let be = dB
883- let bf = size(be)
884- let bg = $Tuple12(nil, nil, nil, 0, 0, 0, 0, dF, dc, dJ, M, false)
885- func bh (bi,bj) = if ((bj >= bf))
886- then bi
887- else bT(bi, be[bj])
891+ else split(dM[aN], "_")
892+ let do = 0
893+ let dp = {
894+ let bi = dF
895+ let bj = size(bi)
896+ let bk = $Tuple12(nil, nil, nil, 0, 0, 0, 0, dJ, dg, dN, M, false)
897+ func bl (bm,bn) = if ((bn >= bj))
898+ then bm
899+ else bX(bm, bi[bn])
888900
889- func bk (bi,bj) = if ((bj >= bf))
890- then bi
901+ func bo (bm,bn) = if ((bn >= bj))
902+ then bm
891903 else throw("List size exceeds 6")
892904
893- bk(bh(bh(bh(bh(bh(bh(bg, 0), 1), 2), 3), 4), 5), 6)
905+ bo(bl(bl(bl(bl(bl(bl(bk, 0), 1), 2), 3), 4), 5), 6)
894906 }
895- let by = {
896- let be = dC
897- let bf = size(be)
898- let bg = $Tuple12(nil, nil, nil, dl._4, dl._5, dl._6, 0, dG, dd, dK, N, false)
899- func cR (bi,bj) = if ((bj >= bf))
900- then bi
901- else bT(bi, be[bj])
907+ let bC = {
908+ let bi = dG
909+ let bj = size(bi)
910+ let bk = $Tuple12(nil, nil, nil, dp._4, dp._5, dp._6, 0, dK, dh, dO, N, false)
911+ func cV (bm,bn) = if ((bn >= bj))
912+ then bm
913+ else bX(bm, bi[bn])
902914
903- func cS (bi,bj) = if ((bj >= bf))
904- then bi
915+ func cW (bm,bn) = if ((bn >= bj))
916+ then bm
905917 else throw("List size exceeds 6")
906918
907- cS(cR(cR(cR(cR(cR(cR(bg, 0), 1), 2), 3), 4), 5), 6)
919+ cW(cV(cV(cV(cV(cV(cV(bk, 0), 1), 2), 3), 4), 5), 6)
908920 }
909- let aP = if ((size(dD) != 0))
921+ let aT = if ((size(dH) != 0))
910922 then {
911- let be = dD
912- let bf = size(be)
913- let bg = $Tuple12(nil, nil, nil, by._4, by._5, by._6, 0, dH, de, dL, O, true)
914- func dm (bi,bj) = if ((bj >= bf))
915- then bi
916- else bT(bi, be[bj])
923+ let bi = dH
924+ let bj = size(bi)
925+ let bk = $Tuple12(nil, nil, nil, bC._4, bC._5, bC._6, 0, dL, di, dP, O, true)
926+ func dq (bm,bn) = if ((bn >= bj))
927+ then bm
928+ else bX(bm, bi[bn])
917929
918- func dn (bi,bj) = if ((bj >= bf))
919- then bi
930+ func dr (bm,bn) = if ((bn >= bj))
931+ then bm
920932 else throw("List size exceeds 50")
921933
922- dn(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(bg, 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)
934+ dr(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(bk, 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)
923935 }
924- else $Tuple12(de, dL, dH, by._4, by._5, by._6, 0, dH, de, dL, O, true)
925- let do = aP._4
926- let dM = if ((0 > (dE - do)))
936+ else $Tuple12(di, dP, dL, bC._4, bC._5, bC._6, 0, dL, di, dP, O, true)
937+ let ds = aT._4
938+ let dQ = if ((0 > (dI - ds)))
927939 then 0
928- else (dE - do)
929- let dp = makeString_2C([aZ[aC], makeString(dl._1, "_"), makeString(by._1, "_"), makeString(aP._1, "_"), toString(dM)], ":")
930- let dN = makeString_2C([makeString(dl._2, "_"), makeString(by._2, "_"), makeString(aP._2, "_")], ":")
931- let dO = makeString_2C([cl[ay], makeString(dl._3, "_"), makeString(by._3, "_"), makeString(aP._3, "_")], ":")
932- let dq = invoke(z, "saveWarehouse", [dp, aj], nil)
933- if ((dq == dq))
940+ else (dI - ds)
941+ let dt = makeString_2C([bd[aC], makeString(dp._1, "_"), makeString(bC._1, "_"), makeString(aT._1, "_"), toString(dQ)], ":")
942+ let dR = makeString_2C([makeString(dp._2, "_"), makeString(bC._2, "_"), makeString(aT._2, "_")], ":")
943+ let dS = makeString_2C([cp[ay], makeString(dp._3, "_"), makeString(bC._3, "_"), makeString(aT._3, "_")], ":")
944+ let du = invoke(z, "saveWarehouse", [dt, aj], nil)
945+ if ((du == du))
934946 then {
935- let dP = invoke(z, "updateBackpack", [an, dO], nil)
936- if ((dP == dP))
947+ let dT = invoke(z, "updateBackpack", [an, dS], nil)
948+ if ((dT == dT))
937949 then {
938- let ds = [StringEntry(aO, dN)]
939- let dQ = aP._5
940- let dR = if ((dQ > 0))
950+ let dw = [StringEntry(aS, dR)]
951+ let dU = aT._5
952+ let dV = if ((dU > 0))
941953 then {
942- let dS = fraction(aP._5, K, b)
943- let dT = at(dv)
944- let dU = getString(z, dT)
945- if (isDefined(dU))
946- then (((ds :+ ScriptTransfer(du, (aP._5 - (3 * dS)), g)) :+ ScriptTransfer(y, dS, g)) :+ ScriptTransfer(addressFromStringValue(value(dU)), dS, g))
947- else ((ds :+ ScriptTransfer(du, (aP._5 - (3 * dS)), g)) :+ ScriptTransfer(y, dS, g))
954+ let dW = fraction(aT._5, K, b)
955+ let dX = at(dz)
956+ let dY = getString(z, dX)
957+ if (isDefined(dY))
958+ then (((dw :+ ScriptTransfer(dy, (aT._5 - (3 * dW)), g)) :+ ScriptTransfer(y, dW, g)) :+ ScriptTransfer(addressFromStringValue(value(dY)), dW, g))
959+ else ((dw :+ ScriptTransfer(dy, (aT._5 - (3 * dW)), g)) :+ ScriptTransfer(y, dW, g))
948960 }
949- else ds
950- let dV = aP._6
951- if ((dV > 0))
952- then if ((size(cf.payments) != 1))
961+ else dw
962+ let dZ = aT._6
963+ if ((dZ > 0))
964+ then if ((size(cj.payments) != 1))
953965 then throw("exactly 1 payment must be attached")
954966 else {
955- let ct = cf.payments[0]
956- let cu = ct.amount
957- let cv = valueOrErrorMessage(ct.assetId, "WAVES can't be used as payment")
958- if ((cv != g))
967+ let cx = cj.payments[0]
968+ let cy = cx.amount
969+ let cz = valueOrErrorMessage(cx.assetId, "WAVES can't be used as payment")
970+ if ((cz != g))
959971 then throw("USDT payments only!")
960- else if ((cu != dV))
961- then throw(("Payment needed is " + toString(dV)))
962- else if ((L > cu))
972+ else if ((cy != dZ))
973+ then throw(("Payment needed is " + toString(dZ)))
974+ else if ((L > cy))
963975 then throw(("Payment should be at least " + toString(L)))
964976 else {
965- let dW = fraction(aP._6, K, b)
966- let dT = at(dz)
967- let dU = getString(z, dT)
968- if (isDefined(dU))
969- then (((dR :+ ScriptTransfer(addressFromStringValue(dz), (aP._6 - (3 * dW)), g)) :+ ScriptTransfer(y, dW, g)) :+ ScriptTransfer(addressFromStringValue(value(dU)), dW, g))
970- else ((dR :+ ScriptTransfer(addressFromStringValue(dz), (aP._6 - (3 * dW)), g)) :+ ScriptTransfer(y, dW, g))
977+ let ea = fraction(aT._6, K, b)
978+ let dX = at(dD)
979+ let dY = getString(z, dX)
980+ if (isDefined(dY))
981+ then (((dV :+ ScriptTransfer(addressFromStringValue(dD), (aT._6 - (3 * ea)), g)) :+ ScriptTransfer(y, ea, g)) :+ ScriptTransfer(addressFromStringValue(value(dY)), ea, g))
982+ else ((dV :+ ScriptTransfer(addressFromStringValue(dD), (aT._6 - (3 * ea)), g)) :+ ScriptTransfer(y, ea, g))
971983 }
972984 }
973- else if ((size(cf.payments) != 0))
985+ else if ((size(cj.payments) != 0))
974986 then throw("No payments needed")
975- else dR
987+ else dV
976988 }
977989 else throw("Strict value is not equal to itself.")
978990 }
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = "__"
55
66 let b = 1000000
77
88 let c = 10000000
99
1010 let d = 100000000
1111
1212 let e = 10000000000
1313
1414 let f = take(drop(this.bytes, 1), 1)
1515
1616 let g = {
1717 let h = f
1818 if ((base58'2W' == h))
1919 then base58'9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi'
2020 else if ((base58'2T' == h))
2121 then base58'6mWwf9mZBjVgkC54idpyaZLQfAosD914wT8fGf2iiY63'
2222 else throw("Unknown chain")
2323 }
2424
2525 let i = {
2626 let h = f
2727 if ((base58'2W' == h))
2828 then "3PQCuvFbvh4LkPUnrnU1z3jnbA1p9m3WNhv"
2929 else if ((base58'2T' == h))
3030 then "3MumkGGztCKAXpWDqxkddofqXSUbqQkvSJy"
3131 else throw("Unknown chain")
3232 }
3333
3434 func j (k,l) = valueOrErrorMessage(getString(k, l), makeString(["mandatory ", toString(k), ".", l, " is not defined"], ""))
3535
3636
3737 func m (l,n) = valueOrElse(getInteger(this, l), n)
3838
3939
4040 let o = 1
4141
4242 let p = 2
4343
4444 let q = 3
4545
4646 func r () = "%s__restConfig"
4747
4848
4949 func s () = "%s__restAddr"
5050
5151
5252 func t (u) = split_4C(j(u, r()), a)
5353
5454
5555 func v (w,x) = valueOrErrorMessage(addressFromString(w[x]), ("Rest cfg doesn't contain address at index " + toString(x)))
5656
5757
5858 let y = addressFromStringValue(valueOrElse(getString(this, s()), i))
5959
6060 let w = t(y)
6161
6262 let z = v(w, o)
6363
6464 let A = "Africa_F_Africa"
6565
6666 let B = 6
6767
6868 let C = 10000000000
6969
7070 let D = 39637
7171
7272 let E = 10000
7373
7474 let F = 200
7575
7676 let G = 300
7777
7878 let H = "LAND"
7979
8080 let I = "DUCK"
8181
8282 let J = 10000000000
8383
8484 let K = 10000
8585
8686 let L = 100000
8787
8888 let M = ["Oil", "Ore", "Wood", "Sand", "Clay", "Organic"]
8989
9090 let N = ["Fuel", "Metal", "Plank", "Glass", "Plastic", "Protein"]
9191
9292 let O = ["First Aid Kit", "Backpack", "Food Ration", "Jet Pack", "Shield"]
9393
9494 let P = ["Americas", "Europe", "Asia", "Africa", "Oceania"]
9595
9696 let Q = ["1_1_1_2_2_5_1_10_0", "2_2_2_4_4_10_1_10_0", "3_3_3_6_6_15_1_10_0", "2_5_5_2_7_5_2_100_1", "4_10_10_4_14_10_2_100_1", "6_15_15_6_21_15_2_100_1", "1_1_1_1_1_8_1_10_2", "2_2_2_2_2_16_1_10_2", "3_3_3_3_3_24_1_10_2", "9_9_1_5_5_1_5_100_3", "18_18_2_10_10_2_5_100_3", "27_27_3_15_15_3_5_100_3", "2_2_1_2_2_2_1_10_4", "4_4_2_4_4_4_1_10_4", "6_6_3_6_6_6_1_10_4"]
9797
9898 let R = 0
9999
100100 let S = 1
101101
102102 let T = 2
103103
104104 let U = 3
105105
106106 let V = 4
107107
108108 let W = 0
109109
110110 let X = 1
111111
112112 let Y = 2
113113
114114 let Z = 3
115115
116116 let aa = 4
117117
118118 let ab = 5
119119
120120 let ac = 6
121121
122122 let ad = 7
123123
124124 let ae = 8
125125
126126 func af (ag,ah) = ((("factoryWhByContinentAndRes_" + ag) + "_") + toString(ah))
127127
128128
129129 func ai (aj) = ("landOrder_" + aj)
130130
131131
132132 func ak (al) = ("stakedDuckByOwner_" + al)
133133
134134
135135 func am (an) = ("backPack_" + an)
136136
137137
138138 func ao (an) = ("duckLocation_" + an)
139139
140140
141141 func ap () = "contractsBlocked"
142142
143143
144144 func aq (ar) = ("nftOwner_" + ar)
145145
146146
147147 func as (ar) = ("stakedTime_" + ar)
148148
149149
150150 func at (au) = ("accRefBy_" + au)
151151
152152
153153 let av = 0
154154
155155 let aw = 1
156156
157157 let ax = 2
158158
159159 let ay = 0
160160
161161 let az = 1
162162
163163 let aA = 2
164164
165165 let aB = 3
166166
167167 let aC = 0
168168
169169 let aD = 1
170170
171171 let aE = 2
172172
173173 let aF = 3
174174
175175 let aG = 4
176176
177177 let aH = 0
178178
179179 let aI = 1
180180
181181 let aJ = 2
182182
183-func aK (aL) = {
184- let h = aL
183+let aK = 3
184+
185+let aL = 0
186+
187+let aM = 1
188+
189+let aN = 2
190+
191+func aO (aP) = {
192+ let h = aP
185193 if ($isInstanceOf(h, "String"))
186194 then {
187- let aM = h
188- aM
195+ let aQ = h
196+ aQ
189197 }
190198 else throw("fail to cast into String")
191199 }
192200
193201
194-func aN (aO) = {
195- let aP = split(valueOrElse(getString(aO), "0@0_0@0_0@0_0@0_0@0_0@0:0@0_0@0_0@0_0@0_0@0_0@0:"), ":")
196-[if ((size(split(aP[aH], "_")) == B))
197- then aP[aH]
198- else "0@0_0@0_0@0_0@0_0@0_0@0", if ((size(split(aP[aI], "_")) == B))
199- then aP[aI]
200- else "0@0_0@0_0@0_0@0_0@0_0@0", aP[aJ]]
202+func aR (aS) = {
203+ let aT = split(valueOrElse(getString(aS), "0@0_0@0_0@0_0@0_0@0_0@0:0@0_0@0_0@0_0@0_0@0_0@0:"), ":")
204+[if ((size(split(aT[aL], "_")) == B))
205+ then aT[aL]
206+ else "0@0_0@0_0@0_0@0_0@0_0@0", if ((size(split(aT[aM], "_")) == B))
207+ then aT[aM]
208+ else "0@0_0@0_0@0_0@0_0@0_0@0", aT[aN]]
201209 }
202210
203211
204-func aQ (aR,aS,aT) = if (aT)
212+func aU (aV,aW,aX) = if (aX)
205213 then {
206- let aU = if ((aR >= 0))
207- then (((aR + aS) - 1) / aS)
208- else -((((-(aR) + aS) - 1) / aS))
209- (aU * d)
214+ let aY = if ((aV >= 0))
215+ then (((aV + aW) - 1) / aW)
216+ else -((((-(aV) + aW) - 1) / aW))
217+ (aY * d)
210218 }
211- else aR
219+ else aV
212220
213221
214-func aV (aW) = {
215- let aX = split(aW, "_")
216- ((J * (parseIntValue(aX[1]) + 1)) * parseIntValue(aX[0]))
222+func aZ (ba) = {
223+ let bb = split(ba, "_")
224+ ((J * (parseIntValue(bb[1]) + 1)) * parseIntValue(bb[0]))
217225 }
218226
219227
220-func aY (aZ) = {
221- let ba = aZ[aF]
222- if ((ba == ""))
228+func bc (bd) = {
229+ let be = bd[aF]
230+ if ((be == ""))
223231 then 0
224232 else {
225- func bb (bc,bd) = {
226- let x = bc._1
227- let aS = parseIntValue(split(Q[x], "_")[ad])
228- $Tuple2((x + 1), (bc._2 + aQ(parseIntValue(bd), aS, true)))
233+ func bf (bg,bh) = {
234+ let x = bg._1
235+ let aW = parseIntValue(split(Q[x], "_")[ad])
236+ $Tuple2((x + 1), (bg._2 + aU(parseIntValue(bh), aW, true)))
229237 }
230238
231-( let be = split_4C(ba, "_")
232- let bf = size(be)
233- let bg = $Tuple2(0, 0)
234- func bh (bi,bj) = if ((bj >= bf))
235- then bi
236- else bb(bi, be[bj])
239+( let bi = split_4C(be, "_")
240+ let bj = size(bi)
241+ let bk = $Tuple2(0, 0)
242+ func bl (bm,bn) = if ((bn >= bj))
243+ then bm
244+ else bf(bm, bi[bn])
237245
238- func bk (bi,bj) = if ((bj >= bf))
239- then bi
246+ func bo (bm,bn) = if ((bn >= bj))
247+ then bm
240248 else throw("List size exceeds 50")
241249
242- bk(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bg, 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
250+ bo(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bk, 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
243251 }
244252 }
245253
246254
247-func bl (bm,ah,aR,bn) = {
248- let bo = af(bm, ah)
249- let bp = valueOrElse(getInteger(bo), 0)
250- let bq = if ((bp > C))
255+func bp (bq,ah,aV,br) = {
256+ let bs = af(bq, ah)
257+ let bt = valueOrElse(getInteger(bs), 0)
258+ let bu = if ((bt > C))
251259 then 0
252- else if (((bp + aR) > C))
253- then (C - bp)
254- else aR
255- let br = (fraction(bq, ((F * D) - fraction(((100 * bp) + (50 * bq)), D, C)), e) + fraction((aR - bq), D, d))
256- let bs = (bn - (bn / 100))
257- if (((bs * aR) > (br * d)))
258- then throw((((((((((("Actual price = " + toString(br)) + " / ") + toString(aR)) + " < minPrice = ") + toString(bn)) + ", (") + bm) + ", ") + M[ah]) + ")"))
259- else $Tuple2(IntegerEntry(bo, (bp + aR)), br)
260+ else if (((bt + aV) > C))
261+ then (C - bt)
262+ else aV
263+ let bv = (fraction(bu, ((F * D) - fraction(((100 * bt) + (50 * bu)), D, C)), e) + fraction((aV - bu), D, d))
264+ let bw = (br - (br / 100))
265+ if (((bw * aV) > (bv * d)))
266+ then throw((((((((((("Actual price = " + toString(bv)) + " / ") + toString(aV)) + " < minPrice = ") + toString(br)) + ", (") + bq) + ", ") + M[ah]) + ")"))
267+ else $Tuple2(IntegerEntry(bs, (bt + aV)), bv)
260268 }
261269
262270
263-func bt (bm,bu,aR,bv) = {
264- let bo = af(bm, bu)
265- let bp = valueOrElse(getInteger(bo), 0)
266- let bw = if ((bp > C))
267- then min([aR, (bp - C)])
271+func bx (bq,by,aV,bz) = {
272+ let bs = af(bq, by)
273+ let bt = valueOrElse(getInteger(bs), 0)
274+ let bA = if ((bt > C))
275+ then min([aV, (bt - C)])
268276 else 0
269- let bx = min([bp, (aR - bw)])
270- let by = (bx + bw)
271- let bz = (fraction(bx, ((G * D) - fraction(((100 * bp) - (50 * bx)), D, C)), e) + fraction(bw, (2 * D), d))
272- let bA = (bv + (bv / 100))
273- if (((bz * d) > (bA * by)))
274- then throw((((((((((("Actual price = " + toString(bz)) + " / ") + toString(by)) + " > maxPrice = ") + toString(bv)) + ", (") + bm) + ", ") + N[bu]) + ")"))
275- else $Tuple3(IntegerEntry(bo, (bp - by)), bz, by)
277+ let bB = min([bt, (aV - bA)])
278+ let bC = (bB + bA)
279+ let bD = (fraction(bB, ((G * D) - fraction(((100 * bt) - (50 * bB)), D, C)), e) + fraction(bA, (2 * D), d))
280+ let bE = (bz + (bz / 100))
281+ if (((bD * d) > (bE * bC)))
282+ then throw((((((((((("Actual price = " + toString(bD)) + " / ") + toString(bC)) + " > maxPrice = ") + toString(bz)) + ", (") + bq) + ", ") + N[by]) + ")"))
283+ else $Tuple3(IntegerEntry(bs, (bt - bC)), bD, bC)
276284 }
277285
278286
279-func bB (bC) = {
280- let aP = split(valueOrElse(getString(z, bC), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
281-[toString(valueOrElse(parseInt(aP[ay]), 0)), if ((size(split(aP[az], "_")) == B))
282- then aP[az]
283- else "0_0_0_0_0_0", if ((size(split(aP[aA], "_")) == B))
284- then aP[aA]
285- else "0_0_0_0_0_0", aP[aB]]
287+func bF (bG) = {
288+ let aT = split(valueOrElse(getString(z, bG), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
289+[toString(valueOrElse(parseInt(aT[ay]), 0)), if ((size(split(aT[az], "_")) == B))
290+ then aT[az]
291+ else "0_0_0_0_0_0", if ((size(split(aT[aA], "_")) == B))
292+ then aT[aA]
293+ else "0_0_0_0_0_0", aT[aB]]
286294 }
287295
288296
289-func bD () = if (valueOrElse(getBoolean(z, ap()), false))
297+func bH () = if (valueOrElse(getBoolean(z, ap()), false))
290298 then throw("Contracts are under maintenance")
291299 else unit
292300
293301
294-func bE (bc,bd) = {
295- let bF = bc._1
296- let bG = bc._7
297- let aS = if (bG)
298- then parseIntValue(split(Q[bF], "_")[ad])
302+func bI (bg,bh) = {
303+ let bJ = bg._1
304+ let bK = bg._7
305+ let aW = if (bK)
306+ then parseIntValue(split(Q[bJ], "_")[ad])
299307 else 0
300- let bH = split(bd, "@")
301- if ((size(bH) != 2))
308+ let bL = split(bh, "@")
309+ if ((size(bL) != 2))
302310 then throw("Incorrect order format, should be amount@price")
303311 else {
304- let bI = parseIntValue(bH[0])
305- let bJ = parseIntValue(bH[1])
306- let bK = fraction(bI, bJ, d)
307- let bL = aQ(bI, aS, bG)
308- let bM = parseIntValue(bc._5[bF])
309- let bN = split(bc._6[bF], "@")
310- let bO = parseIntValue(bN[0])
311- let bP = parseIntValue(bN[1])
312- if (if ((0 > bP))
312+ let bM = parseIntValue(bL[0])
313+ let bN = parseIntValue(bL[1])
314+ let bO = fraction(bM, bN, d)
315+ let bP = aU(bM, aW, bK)
316+ let bQ = if ((size(bg._5) > bJ))
317+ then parseIntValue(bg._5[bJ])
318+ else 0
319+ let bR = split(if ((size(bg._6) > bJ))
320+ then bg._6[bJ]
321+ else "0@0", "@")
322+ let bS = parseIntValue(bR[0])
323+ let bT = parseIntValue(bR[1])
324+ if (if ((0 > bT))
313325 then true
314- else (0 > bJ))
326+ else (0 > bN))
315327 then throw("Price can't be negative")
316328 else {
317- let bQ = fraction(bO, bP, d)
318- let bR = aQ(bO, aS, bG)
319- if ((bI == 0))
320- then if ((bO > 0))
321- then $Tuple7((bF + 1), (bc._2 :+ toString(bM)), (bc._3 - bR), (bc._4 - bQ), bc._5, bc._6, bG)
322- else $Tuple7((bF + 1), (bc._2 :+ toString((bM - bO))), (bc._3 + bR), bc._4, bc._5, bc._6, bG)
323- else if ((bI > 0))
324- then if ((0 > bO))
325- then $Tuple7((bF + 1), (bc._2 :+ toString((bM - bO))), ((bc._3 + bL) + bR), (bc._4 + bK), bc._5, bc._6, bG)
326- else $Tuple7((bF + 1), (bc._2 :+ toString(bM)), ((bc._3 + bL) - bR), ((bc._4 + bK) - bQ), bc._5, bc._6, bG)
327- else if ((0 > bO))
329+ let bU = fraction(bS, bT, d)
330+ let bV = aU(bS, aW, bK)
331+ if ((bM == 0))
332+ then if ((bS > 0))
333+ then $Tuple7((bJ + 1), (bg._2 :+ toString(bQ)), (bg._3 - bV), (bg._4 - bU), bg._5, bg._6, bK)
334+ else $Tuple7((bJ + 1), (bg._2 :+ toString((bQ - bS))), (bg._3 + bV), bg._4, bg._5, bg._6, bK)
335+ else if ((bM > 0))
336+ then if ((0 > bS))
337+ then $Tuple7((bJ + 1), (bg._2 :+ toString((bQ - bS))), ((bg._3 + bP) + bV), (bg._4 + bO), bg._5, bg._6, bK)
338+ else $Tuple7((bJ + 1), (bg._2 :+ toString(bQ)), ((bg._3 + bP) - bV), ((bg._4 + bO) - bU), bg._5, bg._6, bK)
339+ else if ((0 > bS))
328340 then {
329- let bS = (bO - bI)
330- if ((0 > (bM - bS)))
331- then throw((((("Attempt to take " + toString(bS)) + " from warehouse, but only ") + toString(bM)) + " available"))
332- else $Tuple7((bF + 1), (bc._2 :+ toString((bM - bS))), ((bc._3 + bR) - bL), bc._4, bc._5, bc._6, bG)
341+ let bW = (bS - bM)
342+ if ((0 > (bQ - bW)))
343+ then throw((((("Attempt to take " + toString(bW)) + " from warehouse, but only ") + toString(bQ)) + " available"))
344+ else $Tuple7((bJ + 1), (bg._2 :+ toString((bQ - bW))), ((bg._3 + bV) - bP), bg._4, bg._5, bg._6, bK)
333345 }
334- else if ((0 > (bM + bI)))
335- then throw((((("Attempt to take " + toString(-(bI))) + " from warehouse, but only ") + toString(bM)) + " available"))
336- else $Tuple7((bF + 1), (bc._2 :+ toString((bM + bI))), ((bc._3 - bL) - bR), (bc._4 - bQ), bc._5, bc._6, bG)
346+ else if ((0 > (bQ + bM)))
347+ then throw((((("Attempt to take " + toString(-(bM))) + " from warehouse, but only ") + toString(bQ)) + " available"))
348+ else $Tuple7((bJ + 1), (bg._2 :+ toString((bQ + bM))), ((bg._3 - bP) - bV), (bg._4 - bU), bg._5, bg._6, bK)
337349 }
338350 }
339351 }
340352
341353
342-func bT (bc,bU) = {
343- let bF = bc._7
344- let bG = bc._12
345- let aS = if (bG)
346- then parseIntValue(split(Q[bF], "_")[ad])
354+func bX (bg,bY) = {
355+ let bJ = bg._7
356+ let bK = bg._12
357+ let aW = if (bK)
358+ then parseIntValue(split(Q[bJ], "_")[ad])
347359 else 0
348- let bV = split(bU, "@")
349- if ((size(bV) != 2))
360+ let bZ = split(bY, "@")
361+ if ((size(bZ) != 2))
350362 then throw("Incorrect order format, should be amount@price")
351363 else {
352- let bW = parseIntValue(bV[0])
353- let bX = parseIntValue(bV[1])
354- if ((0 > bX))
364+ let ca = parseIntValue(bZ[0])
365+ let cb = parseIntValue(bZ[1])
366+ if ((0 > cb))
355367 then throw("Price can't be negative")
356368 else {
357- let bY = fraction(bW, bX, d)
358- let bZ = parseIntValue(bc._8[bF])
359- let bM = parseIntValue(bc._9[bF])
360- let ca = split(bc._10[bF], "@")
361- let cb = parseIntValue(ca[0])
362- let cc = parseIntValue(ca[1])
363- if (if ((bW != 0))
364- then (bX != cc)
369+ let cc = fraction(ca, cb, d)
370+ let cd = parseIntValue(bg._8[bJ])
371+ let bQ = parseIntValue(bg._9[bJ])
372+ let ce = split(bg._10[bJ], "@")
373+ let cf = parseIntValue(ce[0])
374+ let cg = parseIntValue(ce[1])
375+ if (if ((ca != 0))
376+ then (cb != cg)
365377 else false)
366- then throw(((((("Prices of " + bc._11[bF]) + " don't match! WH price=") + toString(cc)) + ", your price=") + toString(bX)))
378+ then throw(((((("Prices of " + bg._11[bJ]) + " don't match! WH price=") + toString(cg)) + ", your price=") + toString(cb)))
367379 else {
368- let cd = fraction(cb, cc, d)
369- let ce = aQ(bW, aS, bG)
370- if ((bW == 0))
371- then $Tuple11((bc._1 :+ toString(bM)), (bc._2 :+ bc._10[bF]), (bc._3 :+ toString(bZ)), bc._4, bc._5, bc._6, (bc._7 + 1), bc._8, bc._9, bc._10, bc._11)
372- else if ((bW > 0))
373- then if ((0 > cb))
374- then if ((bW > -(cb)))
375- then throw(((((("Attempt to buy " + toString(bW)) + " of ") + bc._11[bF]) + ", but warehouse only sells ") + toString(-(cb))))
376- else $Tuple11((bc._1 :+ toString(bM)), (bc._2 :+ ((toString((cb + bW)) + "@") + toString(cc))), (bc._3 :+ toString((bZ + bW))), (bc._4 + ce), bc._5, (bc._6 + bY), (bc._7 + 1), bc._8, bc._9, bc._10, bc._11)
377- else throw((("Attempt to buy " + bc._11[bF]) + " while warehouse doesn't sell it"))
378- else if ((cb > 0))
379- then if ((-(bW) > cb))
380- then throw(((((("Attempt to sell " + toString(-(bW))) + " of ") + bc._11[bF]) + ", but warehouse only buys ") + toString(cb)))
381- else if ((-(bW) > bZ))
382- then throw(((((("Attempt to sell " + toString(-(bW))) + ", but you only have ") + toString(bZ)) + " of ") + bc._11[bF]))
383- else $Tuple11((bc._1 :+ toString((bM - bW))), (bc._2 :+ ((toString((cb + bW)) + "@") + toString(cc))), (bc._3 :+ toString((bZ + bW))), (bc._4 - ce), (bc._5 - bY), bc._6, (bc._7 + 1), bc._8, bc._9, bc._10, bc._11)
384- else throw((("Attempt to sell " + bc._11[bF]) + " while warehouse doesn't buy it"))
380+ let ch = fraction(cf, cg, d)
381+ let ci = aU(ca, aW, bK)
382+ if ((ca == 0))
383+ then $Tuple11((bg._1 :+ toString(bQ)), (bg._2 :+ bg._10[bJ]), (bg._3 :+ toString(cd)), bg._4, bg._5, bg._6, (bg._7 + 1), bg._8, bg._9, bg._10, bg._11)
384+ else if ((ca > 0))
385+ then if ((0 > cf))
386+ then if ((ca > -(cf)))
387+ then throw(((((("Attempt to buy " + toString(ca)) + " of ") + bg._11[bJ]) + ", but warehouse only sells ") + toString(-(cf))))
388+ else $Tuple11((bg._1 :+ toString(bQ)), (bg._2 :+ ((toString((cf + ca)) + "@") + toString(cg))), (bg._3 :+ toString((cd + ca))), (bg._4 + ci), bg._5, (bg._6 + cc), (bg._7 + 1), bg._8, bg._9, bg._10, bg._11)
389+ else throw((("Attempt to buy " + bg._11[bJ]) + " while warehouse doesn't sell it"))
390+ else if ((cf > 0))
391+ then if ((-(ca) > cf))
392+ then throw(((((("Attempt to sell " + toString(-(ca))) + " of ") + bg._11[bJ]) + ", but warehouse only buys ") + toString(cf)))
393+ else if ((-(ca) > cd))
394+ then throw(((((("Attempt to sell " + toString(-(ca))) + ", but you only have ") + toString(cd)) + " of ") + bg._11[bJ]))
395+ else $Tuple11((bg._1 :+ toString((bQ - ca))), (bg._2 :+ ((toString((cf + ca)) + "@") + toString(cg))), (bg._3 :+ toString((cd + ca))), (bg._4 - ci), (bg._5 - cc), bg._6, (bg._7 + 1), bg._8, bg._9, bg._10, bg._11)
396+ else throw((("Attempt to sell " + bg._11[bJ]) + " while warehouse doesn't buy it"))
385397 }
386398 }
387399 }
388400 }
389401
390402
391-@Callable(cf)
392-func constructorV1 (cg) = if ((cf.caller != this))
403+@Callable(cj)
404+func constructorV1 (ck) = if ((cj.caller != this))
393405 then throw("Permission denied")
394- else [StringEntry(s(), cg)]
406+ else [StringEntry(s(), ck)]
395407
396408
397409
398-@Callable(cf)
399-func sellResources (ch,ci) = {
400- let cj = bD()
401- if ((cj == cj))
410+@Callable(cj)
411+func sellResources (cl,cm) = {
412+ let cn = bH()
413+ if ((cn == cn))
402414 then {
403- let an = valueOrErrorMessage(getString(z, ak(toString(cf.caller))), "You don't have a duck staked")
404- if ((size(cf.payments) != 0))
415+ let an = valueOrErrorMessage(getString(z, ak(toString(cj.caller))), "You don't have a duck staked")
416+ if ((size(cj.payments) != 0))
405417 then throw("sellResources doesn't require any payments")
406418 else {
407- let ck = split(valueOrElse(getString(z, ao(an)), A), "_")
408- if ((ck[aw] != "F"))
409- then throw(("Duck location type should be Factory, but is " + ck[aw]))
419+ let co = split(valueOrElse(getString(z, ao(an)), A), "_")
420+ if ((co[aw] != "F"))
421+ then throw(("Duck location type should be Factory, but is " + co[aw]))
410422 else {
411- let bm = ck[ax]
412- let cl = bB(am(an))
413- let cm = split(cl[az], "_")
414- func cn (bc,bF) = if ((ch[bF] > parseIntValue(cm[bF])))
415- then throw(((((("You have " + cm[bF]) + " of ") + M[bF]) + ", but tried to sell ") + toString(ch[bF])))
416- else if ((0 > ch[bF]))
417- then throw(((("You tried to sell negative amount of " + M[bF]) + ": ") + toString(ch[bF])))
418- else if ((ch[bF] > 0))
423+ let bq = co[ax]
424+ let cp = bF(am(an))
425+ let cq = split(cp[az], "_")
426+ func cr (bg,bJ) = if ((cl[bJ] > parseIntValue(cq[bJ])))
427+ then throw(((((("You have " + cq[bJ]) + " of ") + M[bJ]) + ", but tried to sell ") + toString(cl[bJ])))
428+ else if ((0 > cl[bJ]))
429+ then throw(((("You tried to sell negative amount of " + M[bJ]) + ": ") + toString(cl[bJ])))
430+ else if ((cl[bJ] > 0))
419431 then {
420- let co = bl(bm, bF, ch[bF], ci[bF])
421- $Tuple3((bc._1 :+ co._1), (bc._2 :+ toString((parseIntValue(cm[bF]) - ch[bF]))), (bc._3 + co._2))
432+ let cs = bp(bq, bJ, cl[bJ], cm[bJ])
433+ $Tuple3((bg._1 :+ cs._1), (bg._2 :+ toString((parseIntValue(cq[bJ]) - cl[bJ]))), (bg._3 + cs._2))
422434 }
423- else $Tuple3(bc._1, (bc._2 :+ cm[bF]), bc._3)
435+ else $Tuple3(bg._1, (bg._2 :+ cq[bJ]), bg._3)
424436
425- let cp = {
426- let be = [0, 1, 2, 3, 4, 5]
427- let bf = size(be)
428- let bg = $Tuple3(nil, nil, 0)
429- func bh (bi,bj) = if ((bj >= bf))
430- then bi
431- else cn(bi, be[bj])
437+ let ct = {
438+ let bi = [0, 1, 2, 3, 4, 5]
439+ let bj = size(bi)
440+ let bk = $Tuple3(nil, nil, 0)
441+ func bl (bm,bn) = if ((bn >= bj))
442+ then bm
443+ else cr(bm, bi[bn])
432444
433- func bk (bi,bj) = if ((bj >= bf))
434- then bi
445+ func bo (bm,bn) = if ((bn >= bj))
446+ then bm
435447 else throw("List size exceeds 6")
436448
437- bk(bh(bh(bh(bh(bh(bh(bg, 0), 1), 2), 3), 4), 5), 6)
449+ bo(bl(bl(bl(bl(bl(bl(bk, 0), 1), 2), 3), 4), 5), 6)
438450 }
439- let cq = makeString([cl[ay], makeString(cp._2, "_"), cl[aA], cl[aB]], ":")
440- let cr = aK(invoke(z, "updateBackpack", [an, cq], nil))
441- $Tuple2((cp._1 :+ ScriptTransfer(cf.caller, cp._3, g)), cr)
451+ let cu = makeString([cp[ay], makeString(ct._2, "_"), cp[aA], cp[aB]], ":")
452+ let cv = aO(invoke(z, "updateBackpack", [an, cu], nil))
453+ $Tuple2((ct._1 :+ ScriptTransfer(cj.caller, ct._3, g)), cv)
442454 }
443455 }
444456 }
445457 else throw("Strict value is not equal to itself.")
446458 }
447459
448460
449461
450-@Callable(cf)
451-func buyMaterials (ch,cs) = {
452- let cj = bD()
453- if ((cj == cj))
462+@Callable(cj)
463+func buyMaterials (cl,cw) = {
464+ let cn = bH()
465+ if ((cn == cn))
454466 then {
455- let an = valueOrErrorMessage(getString(z, ak(toString(cf.caller))), "You don't have a duck staked")
456- if ((size(cf.payments) != 1))
467+ let an = valueOrErrorMessage(getString(z, ak(toString(cj.caller))), "You don't have a duck staked")
468+ if ((size(cj.payments) != 1))
457469 then throw("exactly 1 payment must be attached")
458470 else {
459- let ct = cf.payments[0]
460- let cu = ct.amount
461- let cv = valueOrErrorMessage(ct.assetId, "WAVES can't be used as payment")
462- if ((cv != g))
471+ let cx = cj.payments[0]
472+ let cy = cx.amount
473+ let cz = valueOrErrorMessage(cx.assetId, "WAVES can't be used as payment")
474+ if ((cz != g))
463475 then throw("USDT payments only!")
464476 else {
465- let ck = split(valueOrElse(getString(z, ao(an)), A), "_")
466- if ((ck[aw] != "F"))
467- then throw(("Duck location type should be Factory, but is " + ck[aw]))
477+ let co = split(valueOrElse(getString(z, ao(an)), A), "_")
478+ if ((co[aw] != "F"))
479+ then throw(("Duck location type should be Factory, but is " + co[aw]))
468480 else {
469- let bm = ck[ax]
470- let cl = bB(am(an))
471- let cw = split(cl[aA], "_")
472- func cx (bc,bF) = if ((0 > ch[bF]))
473- then throw(((("You tried to buy negative amount of " + N[bF]) + ": ") + toString(ch[bF])))
474- else if ((ch[bF] > 0))
481+ let bq = co[ax]
482+ let cp = bF(am(an))
483+ let cA = split(cp[aA], "_")
484+ func cB (bg,bJ) = if ((0 > cl[bJ]))
485+ then throw(((("You tried to buy negative amount of " + N[bJ]) + ": ") + toString(cl[bJ])))
486+ else if ((cl[bJ] > 0))
475487 then {
476- let co = bt(bm, bF, ch[bF], cs[bF])
477- $Tuple3((bc._1 :+ co._1), (bc._2 :+ toString((parseIntValue(cw[bF]) + co._3))), (bc._3 + co._2))
488+ let cs = bx(bq, bJ, cl[bJ], cw[bJ])
489+ $Tuple3((bg._1 :+ cs._1), (bg._2 :+ toString((parseIntValue(cA[bJ]) + cs._3))), (bg._3 + cs._2))
478490 }
479- else $Tuple3(bc._1, (bc._2 :+ cw[bF]), bc._3)
491+ else $Tuple3(bg._1, (bg._2 :+ cA[bJ]), bg._3)
480492
481- let cp = {
482- let be = [0, 1, 2, 3, 4, 5]
483- let bf = size(be)
484- let bg = $Tuple3(nil, nil, 0)
485- func bh (bi,bj) = if ((bj >= bf))
486- then bi
487- else cx(bi, be[bj])
493+ let ct = {
494+ let bi = [0, 1, 2, 3, 4, 5]
495+ let bj = size(bi)
496+ let bk = $Tuple3(nil, nil, 0)
497+ func bl (bm,bn) = if ((bn >= bj))
498+ then bm
499+ else cB(bm, bi[bn])
488500
489- func bk (bi,bj) = if ((bj >= bf))
490- then bi
501+ func bo (bm,bn) = if ((bn >= bj))
502+ then bm
491503 else throw("List size exceeds 6")
492504
493- bk(bh(bh(bh(bh(bh(bh(bg, 0), 1), 2), 3), 4), 5), 6)
505+ bo(bl(bl(bl(bl(bl(bl(bk, 0), 1), 2), 3), 4), 5), 6)
494506 }
495- if ((cp._3 > cu))
496- then throw(((("Insufficient payment! Attached=" + toString(cu)) + ", required=") + toString(cp._3)))
507+ if ((ct._3 > cy))
508+ then throw(((("Insufficient payment! Attached=" + toString(cy)) + ", required=") + toString(ct._3)))
497509 else {
498- let cq = makeString([cl[ay], cl[az], makeString(cp._2, "_"), cl[aB]], ":")
499- let cr = aK(invoke(z, "updateBackpack", [an, cq], nil))
500- let u = if (((cu - cp._3) > 0))
501- then [ScriptTransfer(cf.caller, (cu - cp._3), g)]
510+ let cu = makeString([cp[ay], cp[az], makeString(ct._2, "_"), cp[aB]], ":")
511+ let cv = aO(invoke(z, "updateBackpack", [an, cu], nil))
512+ let u = if (((cy - ct._3) > 0))
513+ then [ScriptTransfer(cj.caller, (cy - ct._3), g)]
502514 else nil
503- let cy = (cp._3 / 100)
504- $Tuple2(((cp._1 ++ u) :+ ScriptTransfer(y, cy, g)), cr)
515+ let cC = (ct._3 / 100)
516+ $Tuple2(((ct._1 ++ u) :+ ScriptTransfer(y, cC, g)), cv)
505517 }
506518 }
507519 }
508520 }
509521 }
510522 else throw("Strict value is not equal to itself.")
511523 }
512524
513525
514526
515-@Callable(cf)
516-func exchangeResources (ch) = {
517- let cj = bD()
518- if ((cj == cj))
527+@Callable(cj)
528+func exchangeResources (cl) = {
529+ let cn = bH()
530+ if ((cn == cn))
519531 then {
520- let an = valueOrErrorMessage(getString(z, ak(toString(cf.caller))), "You don't have a duck staked")
521- if ((size(cf.payments) != 1))
532+ let an = valueOrErrorMessage(getString(z, ak(toString(cj.caller))), "You don't have a duck staked")
533+ if ((size(cj.payments) != 1))
522534 then throw("exactly 1 payment must be attached")
523535 else {
524- let ct = cf.payments[0]
525- let cu = ct.amount
526- let cv = valueOrErrorMessage(ct.assetId, "WAVES can't be used as payment")
527- if ((cv != g))
536+ let cx = cj.payments[0]
537+ let cy = cx.amount
538+ let cz = valueOrErrorMessage(cx.assetId, "WAVES can't be used as payment")
539+ if ((cz != g))
528540 then throw("USDT payments only!")
529541 else {
530- let ck = split(valueOrElse(getString(z, ao(an)), A), "_")
531- if ((ck[aw] != "F"))
532- then throw(("Duck location type should be Factory, but is " + ck[aw]))
542+ let co = split(valueOrElse(getString(z, ao(an)), A), "_")
543+ if ((co[aw] != "F"))
544+ then throw(("Duck location type should be Factory, but is " + co[aw]))
533545 else {
534- let bm = ck[ax]
535- let cl = bB(am(an))
536- let cm = split(cl[az], "_")
537- let cw = split(cl[aA], "_")
538- func cz (bc,bF) = {
539- let bo = af(bm, bF)
540- let bp = valueOrElse(getInteger(bo), 0)
541- let cA = ch[bF]
542- if ((cA > parseIntValue(cm[bF])))
543- then throw(((((("You have " + cm[bF]) + " of ") + M[bF]) + ", but tried to exchange ") + toString(cA)))
544- else if ((0 > cA))
545- then throw(((("You tried to exchange negative amount of " + M[bF]) + ": ") + toString(cA)))
546- else if ((cA > 0))
547- then $Tuple4((bc._1 :+ toString((parseIntValue(cm[bF]) - cA))), (bc._2 :+ toString((parseIntValue(cw[bF]) + cA))), (bc._3 + fraction(cA, D, d)), (bc._4 :+ IntegerEntry(bo, bp)))
548- else $Tuple4((bc._1 :+ cm[bF]), (bc._2 :+ cw[bF]), bc._3, bc._4)
546+ let bq = co[ax]
547+ let cp = bF(am(an))
548+ let cq = split(cp[az], "_")
549+ let cA = split(cp[aA], "_")
550+ func cD (bg,bJ) = {
551+ let bs = af(bq, bJ)
552+ let bt = valueOrElse(getInteger(bs), 0)
553+ let cE = cl[bJ]
554+ if ((cE > parseIntValue(cq[bJ])))
555+ then throw(((((("You have " + cq[bJ]) + " of ") + M[bJ]) + ", but tried to exchange ") + toString(cE)))
556+ else if ((0 > cE))
557+ then throw(((("You tried to exchange negative amount of " + M[bJ]) + ": ") + toString(cE)))
558+ else if ((cE > 0))
559+ then $Tuple4((bg._1 :+ toString((parseIntValue(cq[bJ]) - cE))), (bg._2 :+ toString((parseIntValue(cA[bJ]) + cE))), (bg._3 + fraction(cE, D, d)), (bg._4 :+ IntegerEntry(bs, bt)))
560+ else $Tuple4((bg._1 :+ cq[bJ]), (bg._2 :+ cA[bJ]), bg._3, bg._4)
549561 }
550562
551- let cp = {
552- let be = [0, 1, 2, 3, 4, 5]
553- let bf = size(be)
554- let bg = $Tuple4(nil, nil, 0, nil)
555- func bh (bi,bj) = if ((bj >= bf))
556- then bi
557- else cz(bi, be[bj])
563+ let ct = {
564+ let bi = [0, 1, 2, 3, 4, 5]
565+ let bj = size(bi)
566+ let bk = $Tuple4(nil, nil, 0, nil)
567+ func bl (bm,bn) = if ((bn >= bj))
568+ then bm
569+ else cD(bm, bi[bn])
558570
559- func bk (bi,bj) = if ((bj >= bf))
560- then bi
571+ func bo (bm,bn) = if ((bn >= bj))
572+ then bm
561573 else throw("List size exceeds 6")
562574
563- bk(bh(bh(bh(bh(bh(bh(bg, 0), 1), 2), 3), 4), 5), 6)
575+ bo(bl(bl(bl(bl(bl(bl(bk, 0), 1), 2), 3), 4), 5), 6)
564576 }
565- if ((cp._3 > cu))
566- then throw(((("Insufficient payment! Attached=" + toString(cu)) + ", required=") + toString(cp._3)))
577+ if ((ct._3 > cy))
578+ then throw(((("Insufficient payment! Attached=" + toString(cy)) + ", required=") + toString(ct._3)))
567579 else {
568- let cq = makeString([cl[ay], makeString(cp._1, "_"), makeString(cp._2, "_"), cl[aB]], ":")
569- let cr = aK(invoke(z, "updateBackpack", [an, cq], nil))
570- let u = if (((cu - cp._3) > 0))
571- then [ScriptTransfer(cf.caller, (cu - cp._3), g)]
580+ let cu = makeString([cp[ay], makeString(ct._1, "_"), makeString(ct._2, "_"), cp[aB]], ":")
581+ let cv = aO(invoke(z, "updateBackpack", [an, cu], nil))
582+ let u = if (((cy - ct._3) > 0))
583+ then [ScriptTransfer(cj.caller, (cy - ct._3), g)]
572584 else nil
573- let cy = (cp._3 / 100)
574- $Tuple2(((u ++ cp._4) :+ ScriptTransfer(y, cy, g)), cr)
585+ let cC = (ct._3 / 100)
586+ $Tuple2(((u ++ ct._4) :+ ScriptTransfer(y, cC, g)), cv)
575587 }
576588 }
577589 }
578590 }
579591 }
580592 else throw("Strict value is not equal to itself.")
581593 }
582594
583595
584596
585-@Callable(cf)
586-func craftGoods (cB,cC) = {
587- let cj = bD()
588- if ((cj == cj))
589- then if ((size(cf.payments) != 1))
597+@Callable(cj)
598+func craftGoods (cF,cG) = {
599+ let cn = bH()
600+ if ((cn == cn))
601+ then if ((size(cj.payments) != 1))
590602 then throw("exactly 1 payment must be attached")
591603 else {
592- let ct = cf.payments[0]
593- let cu = ct.amount
594- let cv = valueOrErrorMessage(ct.assetId, "WAVES can't be used as payment")
595- if ((cv != g))
604+ let cx = cj.payments[0]
605+ let cy = cx.amount
606+ let cz = valueOrErrorMessage(cx.assetId, "WAVES can't be used as payment")
607+ if ((cz != g))
596608 then throw("USDT payments only!")
597- else if ((cu != b))
609+ else if ((cy != b))
598610 then throw("exactly 1 USDT must be attached as payment")
599- else if ((0 >= cC))
611+ else if ((0 >= cG))
600612 then throw("Quantity should be positive")
601613 else {
602- let an = valueOrErrorMessage(getString(z, ak(toString(cf.caller))), "You don't have a duck staked")
603- let ck = split(valueOrElse(getString(z, ao(an)), A), "_")
604- if ((ck[aw] != "M"))
605- then throw(("Duck location type should be Manufactory, but is " + ck[aw]))
614+ let an = valueOrErrorMessage(getString(z, ak(toString(cj.caller))), "You don't have a duck staked")
615+ let co = split(valueOrElse(getString(z, ao(an)), A), "_")
616+ if ((co[aw] != "M"))
617+ then throw(("Duck location type should be Manufactory, but is " + co[aw]))
606618 else {
607- let cD = ck[av]
608- let cl = bB(am(an))
609- let cw = split(cl[aA], "_")
610- if (if ((0 > cB))
619+ let cH = co[av]
620+ let cp = bF(am(an))
621+ let cA = split(cp[aA], "_")
622+ if (if ((0 > cF))
611623 then true
612- else (cB >= size(Q)))
613- then throw(("Unknown product idx=" + toString(cB)))
624+ else (cF >= size(Q)))
625+ then throw(("Unknown product idx=" + toString(cF)))
614626 else {
615- let cE = split(Q[cB], "_")
616- if ((size(cE) != (B + 3)))
617- then throw(("Fatal: unknown recipe: " + Q[cB]))
627+ let cI = split(Q[cF], "_")
628+ if ((size(cI) != (B + 3)))
629+ then throw(("Fatal: unknown recipe: " + Q[cF]))
618630 else {
619- let cF = parseIntValue(cE[ae])
620- if ((P[cF] != cD))
621- then throw(((("This product is available in " + P[cF]) + ", but you are in ") + cD))
631+ let cJ = parseIntValue(cI[ae])
632+ if ((P[cJ] != cH))
633+ then throw(((("This product is available in " + P[cJ]) + ", but you are in ") + cH))
622634 else {
623- let cG = if ((cl[aB] == ""))
635+ let cK = if ((cp[aB] == ""))
624636 then nil
625- else split(cl[aB], "_")
626- func cH (bc,cI) = {
627- let cJ = bc._2
628- let cK = if ((size(cG) > cJ))
629- then cG[cJ]
637+ else split(cp[aB], "_")
638+ func cL (bg,cM) = {
639+ let cN = bg._2
640+ let cO = if ((size(cK) > cN))
641+ then cK[cN]
630642 else "0"
631- let cL = parseIntValue(cK)
632- let aR = (cC * parseIntValue(cE[ad]))
633- let cM = if ((cJ == cB))
634- then toString((cL + aR))
635- else cK
636- $Tuple2((bc._1 :+ cM), (cJ + 1))
643+ let cP = parseIntValue(cO)
644+ let aV = (cG * parseIntValue(cI[ad]))
645+ let cQ = if ((cN == cF))
646+ then toString((cP + aV))
647+ else cO
648+ $Tuple2((bg._1 :+ cQ), (cN + 1))
637649 }
638650
639- let cN = ( let be = Q
640- let bf = size(be)
641- let bg = $Tuple2(nil, 0)
642- func bh (bi,bj) = if ((bj >= bf))
643- then bi
644- else cH(bi, be[bj])
651+ let cR = ( let bi = Q
652+ let bj = size(bi)
653+ let bk = $Tuple2(nil, 0)
654+ func bl (bm,bn) = if ((bn >= bj))
655+ then bm
656+ else cL(bm, bi[bn])
645657
646- func bk (bi,bj) = if ((bj >= bf))
647- then bi
658+ func bo (bm,bn) = if ((bn >= bj))
659+ then bm
648660 else throw("List size exceeds 50")
649661
650- bk(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bg, 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))._1
651- func cO (bc,bF) = {
652- let cP = ((parseIntValue(cE[bF]) * c) * cC)
653- let cQ = parseIntValue(cw[bF])
654- if ((cP > cQ))
655- then throw(((((((("You have " + cw[bF]) + " of ") + N[bF]) + ", but recipe requires ") + toString(cP)) + " for quantity ") + toString(cC)))
656- else if ((cP > 0))
657- then (bc :+ toString((cQ - cP)))
658- else (bc :+ cw[bF])
662+ bo(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bk, 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))._1
663+ func cS (bg,bJ) = {
664+ let cT = ((parseIntValue(cI[bJ]) * c) * cG)
665+ let cU = parseIntValue(cA[bJ])
666+ if ((cT > cU))
667+ then throw(((((((("You have " + cA[bJ]) + " of ") + N[bJ]) + ", but recipe requires ") + toString(cT)) + " for quantity ") + toString(cG)))
668+ else if ((cT > 0))
669+ then (bg :+ toString((cU - cT)))
670+ else (bg :+ cA[bJ])
659671 }
660672
661- let cp = {
662- let be = [0, 1, 2, 3, 4, 5]
663- let bf = size(be)
664- let bg = nil
665- func cR (bi,bj) = if ((bj >= bf))
666- then bi
667- else cO(bi, be[bj])
673+ let ct = {
674+ let bi = [0, 1, 2, 3, 4, 5]
675+ let bj = size(bi)
676+ let bk = nil
677+ func cV (bm,bn) = if ((bn >= bj))
678+ then bm
679+ else cS(bm, bi[bn])
668680
669- func cS (bi,bj) = if ((bj >= bf))
670- then bi
681+ func cW (bm,bn) = if ((bn >= bj))
682+ then bm
671683 else throw("List size exceeds 6")
672684
673- cS(cR(cR(cR(cR(cR(cR(bg, 0), 1), 2), 3), 4), 5), 6)
685+ cW(cV(cV(cV(cV(cV(cV(bk, 0), 1), 2), 3), 4), 5), 6)
674686 }
675- let cq = makeString([cl[ay], cl[az], makeString(cp, "_"), makeString(cN, "_")], ":")
676- let cr = aK(invoke(z, "updateBackpack", [an, cq], nil))
677- $Tuple2(nil, cr)
687+ let cu = makeString([cp[ay], cp[az], makeString(ct, "_"), makeString(cR, "_")], ":")
688+ let cv = aO(invoke(z, "updateBackpack", [an, cu], nil))
689+ $Tuple2(nil, cv)
678690 }
679691 }
680692 }
681693 }
682694 }
683695 }
684696 else throw("Strict value is not equal to itself.")
685697 }
686698
687699
688700
689-@Callable(cf)
690-func setWarehouseOrder (cT,aj) = {
691- let cU = cf.originCaller
692- let au = toString(cU)
693- let cr = if ((cU != y))
694- then bD()
701+@Callable(cj)
702+func setWarehouseOrder (cX,aj) = {
703+ let cY = cj.originCaller
704+ let au = toString(cY)
705+ let cv = if ((cY != y))
706+ then bH()
695707 else false
696- let cV = value(assetInfo(fromBase58String(aj)))
708+ let cZ = value(assetInfo(fromBase58String(aj)))
697709 if (!(isDefined(getInteger(z, as(aj)))))
698- then throw((("NFT " + cV.name) + " is not staked"))
710+ then throw((("NFT " + cZ.name) + " is not staked"))
699711 else {
700- let cW = valueOrErrorMessage(getString(z, aq(aj)), (("NFT " + cV.name) + " is orphaned"))
701- if (if ((cU != y))
702- then (cW != au)
712+ let da = valueOrErrorMessage(getString(z, aq(aj)), (("NFT " + cZ.name) + " is orphaned"))
713+ if (if ((cY != y))
714+ then (da != au)
703715 else false)
704716 then throw((H + " is not yours"))
705717 else {
706- let cX = split_4C(cT, ":")
707- if ((size(cX) != 3))
718+ let db = split_4C(cX, ":")
719+ if ((size(db) != 3))
708720 then throw("cargoListStr should contain exactly 2 ':' separators")
709721 else {
710- let cY = split(cX[0], "_")
711- let cZ = split(cX[1], "_")
712- let da = if ((cX[2] == ""))
722+ let dc = split(db[0], "_")
723+ let dd = split(db[1], "_")
724+ let de = if ((db[2] == ""))
713725 then nil
714- else split(cX[2], "_")
715- if ((size(cY) != B))
726+ else split(db[2], "_")
727+ if ((size(dc) != B))
716728 then throw("All 6 resources should be passed")
717- else if ((size(cZ) != B))
729+ else if ((size(dd) != B))
718730 then throw("All 6 materials should be passed")
719731 else {
720- let db = aK(invoke(z, "getWarehouseREADONLY", [aj], nil))
721- let aZ = split_4C(db, ":")
722- let dc = split(aZ[aD], "_")
723- let dd = split(aZ[aE], "_")
724- let de = if ((aZ[aF] == ""))
732+ let df = aO(invoke(z, "getWarehouseREADONLY", [aj], nil))
733+ let bd = split_4C(df, ":")
734+ let dg = split(bd[aD], "_")
735+ let dh = split(bd[aE], "_")
736+ let di = if ((bd[aF] == ""))
725737 then nil
726- else split(aZ[aF], "_")
727- let df = aV(aZ[aC])
728- let aO = ai(aj)
729- let dg = aN(aO)
730- let dh = split(dg[aH], "_")
731- let di = split(dg[aI], "_")
732- let dj = if ((dg[aJ] == ""))
738+ else split(bd[aF], "_")
739+ let dj = aZ(bd[aC])
740+ let aS = ai(aj)
741+ let dk = aR(aS)
742+ let dl = split(dk[aL], "_")
743+ let dm = split(dk[aM], "_")
744+ let dn = if ((dk[aN] == ""))
733745 then nil
734- else split(dg[aJ], "_")
735- let dk = 0
736- let dl = {
737- let be = cY
738- let bf = size(be)
739- let bg = $Tuple7(0, nil, 0, 0, dc, dh, false)
740- func bh (bi,bj) = if ((bj >= bf))
741- then bi
742- else bE(bi, be[bj])
746+ else split(dk[aN], "_")
747+ let do = 0
748+ let dp = {
749+ let bi = dc
750+ let bj = size(bi)
751+ let bk = $Tuple7(0, nil, 0, 0, dg, dl, false)
752+ func bl (bm,bn) = if ((bn >= bj))
753+ then bm
754+ else bI(bm, bi[bn])
743755
744- func bk (bi,bj) = if ((bj >= bf))
745- then bi
756+ func bo (bm,bn) = if ((bn >= bj))
757+ then bm
746758 else throw("List size exceeds 6")
747759
748- bk(bh(bh(bh(bh(bh(bh(bg, 0), 1), 2), 3), 4), 5), 6)
760+ bo(bl(bl(bl(bl(bl(bl(bk, 0), 1), 2), 3), 4), 5), 6)
749761 }
750- let by = {
751- let be = cZ
752- let bf = size(be)
753- let bg = $Tuple7(0, nil, dl._3, dl._4, dd, di, false)
754- func cR (bi,bj) = if ((bj >= bf))
755- then bi
756- else bE(bi, be[bj])
762+ let bC = {
763+ let bi = dd
764+ let bj = size(bi)
765+ let bk = $Tuple7(0, nil, dp._3, dp._4, dh, dm, false)
766+ func cV (bm,bn) = if ((bn >= bj))
767+ then bm
768+ else bI(bm, bi[bn])
757769
758- func cS (bi,bj) = if ((bj >= bf))
759- then bi
770+ func cW (bm,bn) = if ((bn >= bj))
771+ then bm
760772 else throw("List size exceeds 6")
761773
762- cS(cR(cR(cR(cR(cR(cR(bg, 0), 1), 2), 3), 4), 5), 6)
774+ cW(cV(cV(cV(cV(cV(cV(bk, 0), 1), 2), 3), 4), 5), 6)
763775 }
764- let aP = if ((size(da) != 0))
776+ let aT = if ((size(de) != 0))
765777 then {
766- let be = da
767- let bf = size(be)
768- let bg = $Tuple7(0, nil, by._3, by._4, de, dj, true)
769- func dm (bi,bj) = if ((bj >= bf))
770- then bi
771- else bE(bi, be[bj])
778+ let bi = de
779+ let bj = size(bi)
780+ let bk = $Tuple7(0, nil, bC._3, bC._4, di, dn, true)
781+ func dq (bm,bn) = if ((bn >= bj))
782+ then bm
783+ else bI(bm, bi[bn])
772784
773- func dn (bi,bj) = if ((bj >= bf))
774- then bi
785+ func dr (bm,bn) = if ((bn >= bj))
786+ then bm
775787 else throw("List size exceeds 50")
776788
777- dn(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(bg, 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)
789+ dr(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(bk, 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)
778790 }
779- else $Tuple7(0, de, by._3, by._4, de, dj, true)
780- let do = aP._3
781- if ((do > df))
782- then throw((((("Attempt to reserve " + toString(do)) + " space, but only ") + toString(df)) + " warehouse space left"))
791+ else $Tuple7(0, di, bC._3, bC._4, di, dn, true)
792+ let ds = aT._3
793+ if ((ds > dj))
794+ then throw((((("Attempt to reserve " + toString(ds)) + " space, but only ") + toString(dj)) + " warehouse space left"))
783795 else {
784- let dp = makeString_2C([aZ[aC], makeString(dl._2, "_"), makeString(by._2, "_"), makeString(aP._2, "_"), toString(do)], ":")
785- let dq = invoke(z, "saveWarehouse", [dp, aj], nil)
786- if ((dq == dq))
796+ let dt = makeString_2C([bd[aC], makeString(dp._2, "_"), makeString(bC._2, "_"), makeString(aT._2, "_"), toString(ds)], ":")
797+ let du = invoke(z, "saveWarehouse", [dt, aj], nil)
798+ if ((du == du))
787799 then {
788- let dr = aP._4
789- let ds = if ((dr > 0))
790- then if ((size(cf.payments) != 1))
800+ let dv = aT._4
801+ let dw = if ((dv > 0))
802+ then if ((size(cj.payments) != 1))
791803 then throw("exactly 1 payment must be attached")
792804 else {
793- let ct = cf.payments[0]
794- let cu = ct.amount
795- let cv = valueOrErrorMessage(ct.assetId, "WAVES can't be used as payment")
796- if ((cv != g))
805+ let cx = cj.payments[0]
806+ let cy = cx.amount
807+ let cz = valueOrErrorMessage(cx.assetId, "WAVES can't be used as payment")
808+ if ((cz != g))
797809 then throw("USDT payments only!")
798- else if ((cu != dr))
799- then throw(("Payment needed is " + toString(dr)))
800- else [StringEntry(aO, cT)]
810+ else if ((cy != dv))
811+ then throw(("Payment needed is " + toString(dv)))
812+ else [StringEntry(aS, cX)]
801813 }
802- else if ((dr == 0))
803- then if ((size(cf.payments) != 0))
814+ else if ((dv == 0))
815+ then if ((size(cj.payments) != 0))
804816 then throw("No payments needed")
805- else [StringEntry(aO, cT)]
806- else if ((size(cf.payments) != 0))
817+ else [StringEntry(aS, cX)]
818+ else if ((size(cj.payments) != 0))
807819 then throw("No payments needed")
808- else [ScriptTransfer(addressFromStringValue(cW), -(dr), g), StringEntry(aO, cT)]
809- $Tuple2(ds, cr)
820+ else [ScriptTransfer(addressFromStringValue(da), -(dv), g), StringEntry(aS, cX)]
821+ $Tuple2(dw, cv)
810822 }
811823 else throw("Strict value is not equal to itself.")
812824 }
813825 }
814826 }
815827 }
816828 }
817829 }
818830
819831
820832
821-@Callable(cf)
822-func acceptWarehouseOrder (dt,aj,an) = {
823- let cj = bD()
824- if ((cj == cj))
833+@Callable(cj)
834+func acceptWarehouseOrder (dx,aj,an) = {
835+ let cn = bH()
836+ if ((cn == cn))
825837 then {
826- let du = cf.originCaller
827- let dv = toString(du)
828- let dw = valueOrErrorMessage(getString(z, ak(dv)), "You don't have a duck staked")
829- let ck = valueOrElse(getString(z, ao(dw)), A)
830- let dx = split(value(ck), "_")
831- if ((dx[aw] != "L"))
832- then throw((("Duck location type is " + dx[aw]) + ", but should be L"))
833- else if ((dw != an))
834- then throw(((("Your staked duck is " + dw) + ", but passed ") + an))
838+ let dy = cj.originCaller
839+ let dz = toString(dy)
840+ let dA = valueOrErrorMessage(getString(z, ak(dz)), "You don't have a duck staked")
841+ let co = valueOrElse(getString(z, ao(dA)), A)
842+ let dB = split(value(co), "_")
843+ if ((dB[aw] != "L"))
844+ then throw((("Duck location type is " + dB[aw]) + ", but should be L"))
845+ else if ((dA != an))
846+ then throw(((("Your staked duck is " + dA) + ", but passed ") + an))
835847 else {
836- let dy = value(assetInfo(fromBase58String(aj)))
848+ let dC = value(assetInfo(fromBase58String(aj)))
837849 if (!(isDefined(getInteger(z, as(aj)))))
838- then throw((("NFT " + dy.name) + " is not staked"))
850+ then throw((("NFT " + dC.name) + " is not staked"))
839851 else {
840- let dz = valueOrErrorMessage(getString(z, aq(aj)), (("NFT " + dy.name) + " is orphaned"))
841- if ((dz == dv))
852+ let dD = valueOrErrorMessage(getString(z, aq(aj)), (("NFT " + dC.name) + " is orphaned"))
853+ if ((dD == dz))
842854 then throw("You cannot trade with yourself")
843855 else {
844- let dA = split_4C(dt, ":")
845- if ((size(dA) != 3))
856+ let dE = split_4C(dx, ":")
857+ if ((size(dE) != 3))
846858 then throw("bpOrderStr should contain exactly 2 ':' separators")
847859 else {
848- let dB = split(dA[0], "_")
849- let dC = split(dA[1], "_")
850- let dD = if ((dA[2] == ""))
860+ let dF = split(dE[0], "_")
861+ let dG = split(dE[1], "_")
862+ let dH = if ((dE[2] == ""))
851863 then nil
852- else split(dA[2], "_")
853- if ((size(dB) != B))
864+ else split(dE[2], "_")
865+ if ((size(dF) != B))
854866 then throw("All 6 resources should be passed")
855- else if ((size(dC) != B))
867+ else if ((size(dG) != B))
856868 then throw("All 6 materials should be passed")
857869 else {
858- let db = aK(invoke(z, "getWarehouseREADONLY", [aj], nil))
859- let aZ = split_4C(db, ":")
860- let dc = split(aZ[aD], "_")
861- let dd = split(aZ[aE], "_")
862- let de = if ((aZ[aF] == ""))
870+ let df = aO(invoke(z, "getWarehouseREADONLY", [aj], nil))
871+ let bd = split_4C(df, ":")
872+ let dg = split(bd[aD], "_")
873+ let dh = split(bd[aE], "_")
874+ let di = if ((bd[aF] == ""))
863875 then nil
864- else split(aZ[aF], "_")
865- let dE = parseIntValue(aZ[aG])
866- let bC = am(an)
867- let cl = bB(bC)
868- let dF = split(cl[az], "_")
869- let dG = split(cl[aA], "_")
870- let dH = if ((cl[aB] == ""))
876+ else split(bd[aF], "_")
877+ let dI = parseIntValue(split(bd[aG], "_")[aH])
878+ let bG = am(an)
879+ let cp = bF(bG)
880+ let dJ = split(cp[az], "_")
881+ let dK = split(cp[aA], "_")
882+ let dL = if ((cp[aB] == ""))
871883 then nil
872- else split(cl[aB], "_")
873- let aO = ai(aj)
874- let dI = aN(aO)
875- let dJ = split(dI[aH], "_")
876- let dK = split(dI[aI], "_")
877- let dL = if ((dI[aJ] == ""))
884+ else split(cp[aB], "_")
885+ let aS = ai(aj)
886+ let dM = aR(aS)
887+ let dN = split(dM[aL], "_")
888+ let dO = split(dM[aM], "_")
889+ let dP = if ((dM[aN] == ""))
878890 then nil
879- else split(dI[aJ], "_")
880- let dk = 0
881- let dl = {
882- let be = dB
883- let bf = size(be)
884- let bg = $Tuple12(nil, nil, nil, 0, 0, 0, 0, dF, dc, dJ, M, false)
885- func bh (bi,bj) = if ((bj >= bf))
886- then bi
887- else bT(bi, be[bj])
891+ else split(dM[aN], "_")
892+ let do = 0
893+ let dp = {
894+ let bi = dF
895+ let bj = size(bi)
896+ let bk = $Tuple12(nil, nil, nil, 0, 0, 0, 0, dJ, dg, dN, M, false)
897+ func bl (bm,bn) = if ((bn >= bj))
898+ then bm
899+ else bX(bm, bi[bn])
888900
889- func bk (bi,bj) = if ((bj >= bf))
890- then bi
901+ func bo (bm,bn) = if ((bn >= bj))
902+ then bm
891903 else throw("List size exceeds 6")
892904
893- bk(bh(bh(bh(bh(bh(bh(bg, 0), 1), 2), 3), 4), 5), 6)
905+ bo(bl(bl(bl(bl(bl(bl(bk, 0), 1), 2), 3), 4), 5), 6)
894906 }
895- let by = {
896- let be = dC
897- let bf = size(be)
898- let bg = $Tuple12(nil, nil, nil, dl._4, dl._5, dl._6, 0, dG, dd, dK, N, false)
899- func cR (bi,bj) = if ((bj >= bf))
900- then bi
901- else bT(bi, be[bj])
907+ let bC = {
908+ let bi = dG
909+ let bj = size(bi)
910+ let bk = $Tuple12(nil, nil, nil, dp._4, dp._5, dp._6, 0, dK, dh, dO, N, false)
911+ func cV (bm,bn) = if ((bn >= bj))
912+ then bm
913+ else bX(bm, bi[bn])
902914
903- func cS (bi,bj) = if ((bj >= bf))
904- then bi
915+ func cW (bm,bn) = if ((bn >= bj))
916+ then bm
905917 else throw("List size exceeds 6")
906918
907- cS(cR(cR(cR(cR(cR(cR(bg, 0), 1), 2), 3), 4), 5), 6)
919+ cW(cV(cV(cV(cV(cV(cV(bk, 0), 1), 2), 3), 4), 5), 6)
908920 }
909- let aP = if ((size(dD) != 0))
921+ let aT = if ((size(dH) != 0))
910922 then {
911- let be = dD
912- let bf = size(be)
913- let bg = $Tuple12(nil, nil, nil, by._4, by._5, by._6, 0, dH, de, dL, O, true)
914- func dm (bi,bj) = if ((bj >= bf))
915- then bi
916- else bT(bi, be[bj])
923+ let bi = dH
924+ let bj = size(bi)
925+ let bk = $Tuple12(nil, nil, nil, bC._4, bC._5, bC._6, 0, dL, di, dP, O, true)
926+ func dq (bm,bn) = if ((bn >= bj))
927+ then bm
928+ else bX(bm, bi[bn])
917929
918- func dn (bi,bj) = if ((bj >= bf))
919- then bi
930+ func dr (bm,bn) = if ((bn >= bj))
931+ then bm
920932 else throw("List size exceeds 50")
921933
922- dn(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(bg, 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)
934+ dr(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(bk, 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)
923935 }
924- else $Tuple12(de, dL, dH, by._4, by._5, by._6, 0, dH, de, dL, O, true)
925- let do = aP._4
926- let dM = if ((0 > (dE - do)))
936+ else $Tuple12(di, dP, dL, bC._4, bC._5, bC._6, 0, dL, di, dP, O, true)
937+ let ds = aT._4
938+ let dQ = if ((0 > (dI - ds)))
927939 then 0
928- else (dE - do)
929- let dp = makeString_2C([aZ[aC], makeString(dl._1, "_"), makeString(by._1, "_"), makeString(aP._1, "_"), toString(dM)], ":")
930- let dN = makeString_2C([makeString(dl._2, "_"), makeString(by._2, "_"), makeString(aP._2, "_")], ":")
931- let dO = makeString_2C([cl[ay], makeString(dl._3, "_"), makeString(by._3, "_"), makeString(aP._3, "_")], ":")
932- let dq = invoke(z, "saveWarehouse", [dp, aj], nil)
933- if ((dq == dq))
940+ else (dI - ds)
941+ let dt = makeString_2C([bd[aC], makeString(dp._1, "_"), makeString(bC._1, "_"), makeString(aT._1, "_"), toString(dQ)], ":")
942+ let dR = makeString_2C([makeString(dp._2, "_"), makeString(bC._2, "_"), makeString(aT._2, "_")], ":")
943+ let dS = makeString_2C([cp[ay], makeString(dp._3, "_"), makeString(bC._3, "_"), makeString(aT._3, "_")], ":")
944+ let du = invoke(z, "saveWarehouse", [dt, aj], nil)
945+ if ((du == du))
934946 then {
935- let dP = invoke(z, "updateBackpack", [an, dO], nil)
936- if ((dP == dP))
947+ let dT = invoke(z, "updateBackpack", [an, dS], nil)
948+ if ((dT == dT))
937949 then {
938- let ds = [StringEntry(aO, dN)]
939- let dQ = aP._5
940- let dR = if ((dQ > 0))
950+ let dw = [StringEntry(aS, dR)]
951+ let dU = aT._5
952+ let dV = if ((dU > 0))
941953 then {
942- let dS = fraction(aP._5, K, b)
943- let dT = at(dv)
944- let dU = getString(z, dT)
945- if (isDefined(dU))
946- then (((ds :+ ScriptTransfer(du, (aP._5 - (3 * dS)), g)) :+ ScriptTransfer(y, dS, g)) :+ ScriptTransfer(addressFromStringValue(value(dU)), dS, g))
947- else ((ds :+ ScriptTransfer(du, (aP._5 - (3 * dS)), g)) :+ ScriptTransfer(y, dS, g))
954+ let dW = fraction(aT._5, K, b)
955+ let dX = at(dz)
956+ let dY = getString(z, dX)
957+ if (isDefined(dY))
958+ then (((dw :+ ScriptTransfer(dy, (aT._5 - (3 * dW)), g)) :+ ScriptTransfer(y, dW, g)) :+ ScriptTransfer(addressFromStringValue(value(dY)), dW, g))
959+ else ((dw :+ ScriptTransfer(dy, (aT._5 - (3 * dW)), g)) :+ ScriptTransfer(y, dW, g))
948960 }
949- else ds
950- let dV = aP._6
951- if ((dV > 0))
952- then if ((size(cf.payments) != 1))
961+ else dw
962+ let dZ = aT._6
963+ if ((dZ > 0))
964+ then if ((size(cj.payments) != 1))
953965 then throw("exactly 1 payment must be attached")
954966 else {
955- let ct = cf.payments[0]
956- let cu = ct.amount
957- let cv = valueOrErrorMessage(ct.assetId, "WAVES can't be used as payment")
958- if ((cv != g))
967+ let cx = cj.payments[0]
968+ let cy = cx.amount
969+ let cz = valueOrErrorMessage(cx.assetId, "WAVES can't be used as payment")
970+ if ((cz != g))
959971 then throw("USDT payments only!")
960- else if ((cu != dV))
961- then throw(("Payment needed is " + toString(dV)))
962- else if ((L > cu))
972+ else if ((cy != dZ))
973+ then throw(("Payment needed is " + toString(dZ)))
974+ else if ((L > cy))
963975 then throw(("Payment should be at least " + toString(L)))
964976 else {
965- let dW = fraction(aP._6, K, b)
966- let dT = at(dz)
967- let dU = getString(z, dT)
968- if (isDefined(dU))
969- then (((dR :+ ScriptTransfer(addressFromStringValue(dz), (aP._6 - (3 * dW)), g)) :+ ScriptTransfer(y, dW, g)) :+ ScriptTransfer(addressFromStringValue(value(dU)), dW, g))
970- else ((dR :+ ScriptTransfer(addressFromStringValue(dz), (aP._6 - (3 * dW)), g)) :+ ScriptTransfer(y, dW, g))
977+ let ea = fraction(aT._6, K, b)
978+ let dX = at(dD)
979+ let dY = getString(z, dX)
980+ if (isDefined(dY))
981+ then (((dV :+ ScriptTransfer(addressFromStringValue(dD), (aT._6 - (3 * ea)), g)) :+ ScriptTransfer(y, ea, g)) :+ ScriptTransfer(addressFromStringValue(value(dY)), ea, g))
982+ else ((dV :+ ScriptTransfer(addressFromStringValue(dD), (aT._6 - (3 * ea)), g)) :+ ScriptTransfer(y, ea, g))
971983 }
972984 }
973- else if ((size(cf.payments) != 0))
985+ else if ((size(cj.payments) != 0))
974986 then throw("No payments needed")
975- else dR
987+ else dV
976988 }
977989 else throw("Strict value is not equal to itself.")
978990 }
979991 else throw("Strict value is not equal to itself.")
980992 }
981993 }
982994 }
983995 }
984996 }
985997 }
986998 else throw("Strict value is not equal to itself.")
987999 }
9881000
9891001

github/deemru/w8io/026f985 
794.97 ms