tx · 3kdaZ5sHGDHH1LJEs8F2ULn5UyAp38iW61jJoZBE9ybX 3N8y4wxX3JC4TdrCJBXX16SjWf6X256hrep: -0.06200000 Waves 2023.10.25 21:02 [2814490] smart account 3N8y4wxX3JC4TdrCJBXX16SjWf6X256hrep > SELF 0.00000000 Waves
{ "type": 13, "id": "3kdaZ5sHGDHH1LJEs8F2ULn5UyAp38iW61jJoZBE9ybX", "fee": 6200000, "feeAssetId": null, "timestamp": 1698257000770, "version": 2, "chainId": 84, "sender": "3N8y4wxX3JC4TdrCJBXX16SjWf6X256hrep", "senderPublicKey": "7v5L7QkXxfkirALdyqmox38QCsa9jtfAtgUfHTh34eWq", "proofs": [ "2d8gog22qgUbLUhFJKTb6cDZtevzG5pLL88TryC1839qczNKPicTBTvBJZqgQsCAXkGWbkHNt3kU2PcybuNAoQLU" ], "script": "base64:BgKVAQgCEgQKAggYEgMKAQgSBAoCERESBAoCCAESAwoBARIFCgMREQgSBgoEEREICBIECgIRERIFCgMREQgSBgoEEREICBIDCgEREgMKARESBAoCEQgSBAoCAQESBQoDAQEIEgYKBAEBCAgSBAoCCAgSBQoDCAgIEgQKAggIEgUKAwgICBIDCgEREgMKAQgSAwoBARIDCgEIaQAHeHBUcmFkZQCQTgAHeHBDcmFmdACQTgAKeHBTZWxsVG9FcwCQTgAGeHBTaG9wAJBOAApMQU5EUFJFRklYAgRMQU5EAAZOVU1SRVMABgAPREVGQVVMVExPQ0FUSU9OAg9BZnJpY2FfRl9BZnJpY2EAEFJFU09VUkNFUFJJQ0VNSU4A1bUCAA1FU01BWFBBQ0tBR0VTAAoACUVTQlVZQ09FRgAEABVNSU5fVVNEVF9GRUVfREVMSVZFUlkA0IYDABdNSU5fVVNEVF9GRUVfREVMSVZFUlkxNQD4yQQAD0NSQUZUX1VTRFRfQ09TVADAhD0AFENSQUZUX0RFTElWRVJZX0NPRUZGAAoAFVVTRFQyQUNSRVNfTVVMVElQTElFUgAKAAhyZXNUeXBlcwkAzAgCAgNPaWwJAMwIAgIDT3JlCQDMCAICBFdvb2QJAMwIAgIEU2FuZAkAzAgCAgRDbGF5CQDMCAICB09yZ2FuaWMFA25pbAAIbWF0VHlwZXMJAMwIAgIERnVlbAkAzAgCAgVNZXRhbAkAzAgCAgVQbGFuawkAzAgCAgVHbGFzcwkAzAgCAgdQbGFzdGljCQDMCAICB1Byb3RlaW4FA25pbAAJcHJvZFR5cGVzCQDMCAICEEZpcnN0IEFpZCBLaXQgTDEJAMwIAgIQRmlyc3QgQWlkIEtpdCBMMgkAzAgCAhBGaXJzdCBBaWQgS2l0IEwzCQDMCAICC0JhY2twYWNrIEwxCQDMCAICC0JhY2twYWNrIEwyCQDMCAICC0JhY2twYWNrIEwzCQDMCAICDkZvb2QgUmF0aW9uIEwxCQDMCAICDkZvb2QgUmF0aW9uIEwyCQDMCAICDkZvb2QgUmF0aW9uIEwzCQDMCAICC0pldCBQYWNrIEwxCQDMCAICC0pldCBQYWNrIEwyCQDMCAICC0pldCBQYWNrIEwzCQDMCAICCVNoaWVsZCBMMQkAzAgCAglTaGllbGQgTDIJAMwIAgIJU2hpZWxkIEwzCQDMCAICB01pbmUgTDEJAMwIAgIHTWluZSBMMgkAzAgCAgdNaW5lIEwzCQDMCAICB1RyYXAgTDEJAMwIAgIHVHJhcCBMMgkAzAgCAgdUcmFwIEwzBQNuaWwACmNvbnRpbmVudHMJAMwIAgIIQW1lcmljYXMJAMwIAgIGRXVyb3BlCQDMCAICBEFzaWEJAMwIAgIGQWZyaWNhCQDMCAICB09jZWFuaWEFA25pbAAJQ09FRkYyTUFUAICt4gQAEHByb2R1Y3Rpb25NYXRyaXgJAMwIAgIlOF84XzhfMTdfMTdfNDJfMTJfMF8zMF8wLDAsMCwwLDAsMCwwXwkAzAgCAiU4XzhfOF8xN18xN180Ml8yNF8wXzYwXzAsMCw1LDIsMCwwLDBfCQDMCAICJzhfOF84XzE3XzE3XzQyXzM2XzBfMTIwXzAsMCwxMCw0LDAsMCwwXwkAzAgCAik4XzE5XzE5XzhfMjdfMTlfMjZfMV8yMF8wLDAsMCwwLDAsMCwwXzAwMQkAzAgCAik4XzE5XzE5XzhfMjdfMTlfNTJfMV80MF8wLDAsMCwwLDAsMCwwXzAwMQkAzAgCAik4XzE5XzE5XzhfMjdfMTlfNzhfMV84MF8wLDAsMCwwLDAsMCwwXzAwMQkAzAgCAiU4XzhfOF84XzhfNjBfMTNfMl8yXzAsMCwwLDAsMCwwLDBfMDExCQDMCAICJThfOF84XzhfOF82MF8yNl8yXzRfMCwwLDAsMCwwLDAsMF8wMTEJAMwIAgIlOF84XzhfOF84XzYwXzM5XzJfOF8wLDAsMCwwLDAsMCwwXzAxMQkAzAgCAikzMF8zMF8zXzE3XzE3XzNfMzBfM18zMF8wLDAsMCwwLDAsMCwwXzExMQkAzAgCAikzMF8zMF8zXzE3XzE3XzNfNjBfM181MF8wLDAsMCwwLDAsMCwwXzExMQkAzAgCAikzMF8zMF8zXzE3XzE3XzNfOTBfM183MF8wLDAsMCwwLDAsMCwwXzExMQkAzAgCAisxOF8xOF8xMF8xOF8xOF8xOF8xMV80XzEwXzAsMCwwLDAsMCwwLDBfMjAxCQDMCAICKzE4XzE4XzEwXzE4XzE4XzE4XzIyXzRfMjBfMCwwLDAsMCwwLDAsMF8yMDEJAMwIAgIrMThfMThfMTBfMThfMThfMThfMzNfNF8zMF8wLDAsMCwwLDAsMCwwXzIwMQkAzAgCAio0XzEzXzIyXzRfMzVfMjJfMjNfMF81MCwxLDBfMCwwLDAsMCwwLDAsMF8JAMwIAgIqNF8xM18yMl80XzM1XzIyXzQ2XzBfNTAsMSwxXzAsMiw1LDAsMCwwLDBfCQDMCAICKzRfMTNfMjJfNF8zNV8yMl82OV8wXzUwLDIsMV8wLDUsMTAsMCwwLDAsMF8JAMwIAgIqNV8yNV80MF81XzEwXzE1XzIwXzFfMzAsMSwxXzAsMCwwLDAsMCwwLDBfCQDMCAICKjVfMjVfNDBfNV8xMF8xNV80MF8xXzMwLDEsMl8yLDEsMywwLDAsMCwwXwkAzAgCAio1XzI1XzQwXzVfMTBfMTVfNjBfMV8zMCwxLDNfNSwyLDgsMCwwLDAsMF8FA25pbAAJcklkeENvZWZmAAYADXJJZHhDb250aW5lbnQABwAKUkVDSVBFU0laRQALAA5QUk9EVUNUUEtHU0laRQAKAAt3aElkeExldmVscwAAAAh3aElkeFJlcwABAAh3aElkeE1hdAACAAl3aElkeFByb2QAAwAJd2hJZHhMT0ZUAAQACXZvbExvY2tlZAAAAAh2b2xUb3RhbAADAApicElkeExldmVsAAAACGJwSWR4UmVzAAEACGJwSWR4TWF0AAIACWJwSWR4UHJvZAADAA9sb2NJZHhDb250aW5lbnQAAAAKbG9jSWR4VHlwZQABAAhsb2NJZHhJZAACARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBB2Fzc2V0SWQJAKwCAgIDbm9fBQdhc3NldElkARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQdhc3NldElkCQCsAgICA3N0XwUHYXNzZXRJZAEPa2V5QWRkcmVzc1JlZkJ5AQRhZGRyCQCsAgICCWFjY1JlZkJ5XwUEYWRkcgEUa2V5U3Rha2VkRHVja0J5T3duZXIBCW93bmVyQWRkcgkArAICAhJzdGFrZWREdWNrQnlPd25lcl8FCW93bmVyQWRkcgERa2V5QmFja3BhY2tCeUR1Y2sBC2R1Y2tBc3NldElkCQCsAgICCWJhY2tQYWNrXwULZHVja0Fzc2V0SWQBD2tleUR1Y2tMb2NhdGlvbgELZHVja0Fzc2V0SWQJAKwCAgINZHVja0xvY2F0aW9uXwULZHVja0Fzc2V0SWQBDmtleU9yZGVyQnlMYW5kAQtsYW5kQXNzZXRJZAkArAICAgpsYW5kT3JkZXJfBQtsYW5kQXNzZXRJZAEOa2V5RXNXYXJlaG91c2UAAhplbWVyZ2VuY3lXYXJlaG91c2VQcm9kdWN0cwAPZGVsaXZlcnlGdW5kS2V5AgxkZWxpdmVyeUZ1bmQAEWRlbGl2ZXJ5TG9ja2VkS2V5Ag5kZWxpdmVyeUxvY2tlZAESZ2V0UmVjaXBlTWF0ZXJpYWxzAQZyZWNpcGUJAGgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUGcmVjaXBlBQlySWR4Q29lZmYFCUNPRUZGMk1BVAAFY2hhaW4JAMkBAgkAygECCAUEdGhpcwVieXRlcwABAAEAC3VzZHRBc3NldElkBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwASCE2nqyCAM/TtG7yo7ui5O8yYLdC136B5ao1CP5qA//uQMJAAACAQFUBQckbWF0Y2gwASBVsdifcoeC7+XjW42sBatl3ppDoS8WuwXzGreHpfHFGAkAAgECDVVua25vd24gY2hhaW4AFWRlZmF1bHRSZXN0QWRkcmVzc1N0cgQHJG1hdGNoMAUFY2hhaW4DCQAAAgEBVwUHJG1hdGNoMAIjM1BRQ3V2RmJ2aDRMa1BVbnJuVTF6M2puYkExcDltM1dOaHYDCQAAAgEBVAUHJG1hdGNoMAIjM011bWtHR3p0Q0tBWHBXRHF4a2Rkb2ZxWFNVYnFRa3ZTSnkJAAIBAg1Vbmtub3duIGNoYWluAANTRVACAl9fAAVNVUxUNQCgjQYABU1VTFQ2AMCEPQAFTVVMVDgAgMLXLwAGTVVMVDEwAIDIr6AlAA5NSU5TSE9QUEFZTUVOVACgjQYABUlURVI2CQDMCAIAAAkAzAgCAAEJAMwIAgACCQDMCAIAAwkAzAgCAAQJAMwIAgAFBQNuaWwBD2dldFN0cmluZ09yRmFpbAIHYWRkcmVzcwNrZXkJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQdhZGRyZXNzBQNrZXkJALkJAgkAzAgCAgptYW5kYXRvcnkgCQDMCAIJAKUIAQUHYWRkcmVzcwkAzAgCAgEuCQDMCAIFA2tleQkAzAgCAg8gaXMgbm90IGRlZmluZWQFA25pbAIAABFJZHhDZmdTdGFraW5nRGFwcAABABRJZHhDZmdJbnZlc3RGdW5kRGFwcAAGAA9JZHhDZmdBY3Jlc0RhcHAACAEKa2V5UmVzdENmZwACDiVzX19yZXN0Q29uZmlnAQ5rZXlSZXN0QWRkcmVzcwACDCVzX19yZXN0QWRkcgERcmVhZFJlc3RDZmdPckZhaWwBBHJlc3QJALwJAgkBD2dldFN0cmluZ09yRmFpbAIFBHJlc3QJAQprZXlSZXN0Q2ZnAAUDU0VQARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCB3Jlc3RDZmcDaWR4CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkAkQMCBQdyZXN0Q2ZnBQNpZHgJAKwCAgIqUmVzdCBjZmcgZG9lc24ndCBjb250YWluIGFkZHJlc3MgYXQgaW5kZXggCQCkAwEFA2lkeAAMcmVzdENvbnRyYWN0CQERQGV4dHJOYXRpdmUoMTA2MikBCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMJAQ5rZXlSZXN0QWRkcmVzcwAFFWRlZmF1bHRSZXN0QWRkcmVzc1N0cgAHcmVzdENmZwkBEXJlYWRSZXN0Q2ZnT3JGYWlsAQUMcmVzdENvbnRyYWN0AA9zdGFraW5nQ29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQdyZXN0Q2ZnBRFJZHhDZmdTdGFraW5nRGFwcAASaW52ZXN0RnVuZENvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUHcmVzdENmZwUUSWR4Q2ZnSW52ZXN0RnVuZERhcHAADWFjcmVzQ29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQdyZXN0Q2ZnBQ9JZHhDZmdBY3Jlc0RhcHABCGFzU3RyaW5nAQF2BAckbWF0Y2gwBQF2AwkAAQIFByRtYXRjaDACBlN0cmluZwQBcwUHJG1hdGNoMAUBcwkAAgECGGZhaWwgdG8gY2FzdCBpbnRvIFN0cmluZwEFYXNJbnQBAXYEByRtYXRjaDAFAXYDCQABAgUHJG1hdGNoMAIDSW50BAFuBQckbWF0Y2gwBQFuCQACAQIVZmFpbCB0byBjYXN0IGludG8gSW50AQprZXlCbG9ja2VkAAIQY29udHJhY3RzQmxvY2tlZAEKZml4ZWRQb2ludAIDdmFsCGRlY2ltYWxzBAZ0ZW5Qb3cJAGwGAAoAAAUIZGVjaW1hbHMAAAAABQRET1dOBAdsb3dQYXJ0CQCkAwEJAGoCBQN2YWwFBnRlblBvdwQGemVyb2VzCQCwAgIJAKQDAQUGdGVuUG93CQBkAgABCQCxAgEFB2xvd1BhcnQJAKwCAgkArAICCQCsAgIJAKQDAQkAaQIFA3ZhbAUGdGVuUG93AgEuBQZ6ZXJvZXMFB2xvd1BhcnQAE0ZBQ1RPUllNQVhXQVJFSE9VU0UAgMivoCUADlNFTExNVUxUSVBMSUVSAMgBAA1CVVlNVUxUSVBMSUVSAKwCAApBVUNUSU9ORkVFAJBOAAxERUxJVkVSWV9GRUUAkE4ADkRFTElWRVJZX0ZFRTE1AJh1AR5rZXlGYWN0b3J5V2FyZWhvdXNlQnlJZEFuZFR5cGUCCWZhY3RvcnlJZAdyZXNUeXBlCQCsAgIJAKwCAgkArAICAhtmYWN0b3J5V2hCeUNvbnRpbmVudEFuZFJlc18FCWZhY3RvcnlJZAIBXwkApAMBBQdyZXNUeXBlAAlvcmRJZHhSZXMAAAAJb3JkSWR4TWF0AAEACm9yZElkeFByb2QAAgEIZ2V0T3JkZXIBBm9yZEtleQQBcAkAtQkCCQELdmFsdWVPckVsc2UCCQCiCAEFBm9yZEtleQIwMEAwXzBAMF8wQDBfMEAwXzBAMF8wQDA6MEAwXzBAMF8wQDBfMEAwXzBAMF8wQDA6AgE6CQDMCAIDCQAAAgkAkAMBCQC1CQIJAJEDAgUBcAUJb3JkSWR4UmVzAgFfBQZOVU1SRVMJAJEDAgUBcAUJb3JkSWR4UmVzAhcwQDBfMEAwXzBAMF8wQDBfMEAwXzBAMAkAzAgCAwkAAAIJAJADAQkAtQkCCQCRAwIFAXAFCW9yZElkeE1hdAIBXwUGTlVNUkVTCQCRAwIFAXAFCW9yZElkeE1hdAIXMEAwXzBAMF8wQDBfMEAwXzBAMF8wQDAJAMwIAgkAkQMCBQFwBQpvcmRJZHhQcm9kBQNuaWwBCHRvVm9sdW1lAwZhbW91bnQHcGtnU2l6ZQlpc1Byb2R1Y3QDBQlpc1Byb2R1Y3QEBHBrZ3MDCQBnAgUGYW1vdW50AAAJAGkCCQBlAgkAZAIFBmFtb3VudAUHcGtnU2l6ZQABBQdwa2dTaXplCQEBLQEJAGkCCQBlAgkAZAIJAQEtAQUGYW1vdW50BQdwa2dTaXplAAEFB3BrZ1NpemUJAGgCBQRwa2dzBQVNVUxUOAUGYW1vdW50AQxzZWxsSW50ZXJuYWwEBWxvY0lkB3Jlc1R5cGUGYW1vdW50CG1pblByaWNlBAV3aEtleQkBHmtleUZhY3RvcnlXYXJlaG91c2VCeUlkQW5kVHlwZQIFBWxvY0lkBQdyZXNUeXBlBAJ3MAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQV3aEtleQAABAJyMAMJAGYCBQJ3MAUTRkFDVE9SWU1BWFdBUkVIT1VTRQAAAwkAZgIJAGQCBQJ3MAUGYW1vdW50BRNGQUNUT1JZTUFYV0FSRUhPVVNFCQBlAgUTRkFDVE9SWU1BWFdBUkVIT1VTRQUCdzAFBmFtb3VudAQMdXNkdFJlY2VpdmVkCQBkAgkAawMFAnIwCQBlAgkAaAIFDlNFTExNVUxUSVBMSUVSBRBSRVNPVVJDRVBSSUNFTUlOCQBrAwkAZAIJAGgCAGQFAncwCQBoAgAyBQJyMAUQUkVTT1VSQ0VQUklDRU1JTgUTRkFDVE9SWU1BWFdBUkVIT1VTRQUGTVVMVDEwCQBrAwkAZQIFBmFtb3VudAUCcjAFEFJFU09VUkNFUFJJQ0VNSU4FBU1VTFQ4BAVtaW45OQkAZQIFCG1pblByaWNlCQBpAgUIbWluUHJpY2UAZAMJAGYCCQBoAgUFbWluOTkFBmFtb3VudAkAaAIFDHVzZHRSZWNlaXZlZAUFTVVMVDgJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICD0FjdHVhbCBwcmljZSA9IAkApAMBBQx1c2R0UmVjZWl2ZWQCAyAvIAkApAMBBQZhbW91bnQCDiA8IG1pblByaWNlID0gCQCkAwEFCG1pblByaWNlAgMsICgFBWxvY0lkAgIsIAkAkQMCBQhyZXNUeXBlcwUHcmVzVHlwZQIBKQkAlAoCCQEMSW50ZWdlckVudHJ5AgUFd2hLZXkJAGQCBQJ3MAUGYW1vdW50BQx1c2R0UmVjZWl2ZWQBC2J1eUludGVybmFsBAVsb2NJZAdtYXRUeXBlBmFtb3VudAhtYXhQcmljZQQFd2hLZXkJAR5rZXlGYWN0b3J5V2FyZWhvdXNlQnlJZEFuZFR5cGUCBQVsb2NJZAUHbWF0VHlwZQQCdzAJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUFd2hLZXkAAAQCbTEDCQBmAgUCdzAFE0ZBQ1RPUllNQVhXQVJFSE9VU0UJAJcDAQkAzAgCBQZhbW91bnQJAMwIAgkAZQIFAncwBRNGQUNUT1JZTUFYV0FSRUhPVVNFBQNuaWwAAAQCbTAJAJcDAQkAzAgCBQJ3MAkAzAgCCQBlAgUGYW1vdW50BQJtMQUDbmlsBAFtCQBkAgUCbTAFAm0xBAV3MG1pbgkAlwMBCQDMCAIFAncwCQDMCAIFE0ZBQ1RPUllNQVhXQVJFSE9VU0UFA25pbAQJdXNkdFNwZW50CQBkAgkAawMFAm0wCQBlAgkAaAIFDUJVWU1VTFRJUExJRVIFEFJFU09VUkNFUFJJQ0VNSU4JAGsDCQBlAgkAaAIAZAUFdzBtaW4JAGgCADIFAm0wBRBSRVNPVVJDRVBSSUNFTUlOBRNGQUNUT1JZTUFYV0FSRUhPVVNFBQZNVUxUMTAJAGsDBQJtMQkAaAIAAgUQUkVTT1VSQ0VQUklDRU1JTgUFTVVMVDgEBm1heDEwMQkAZAIFCG1heFByaWNlCQBpAgUIbWF4UHJpY2UAZAMJAGYCCQBoAgUJdXNkdFNwZW50BQVNVUxUOAkAaAIFBm1heDEwMQUBbQkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIPQWN0dWFsIHByaWNlID0gCQCkAwEFCXVzZHRTcGVudAIDIC8gCQCkAwEFAW0CDiA+IG1heFByaWNlID0gCQCkAwEFCG1heFByaWNlAgMsICgFBWxvY0lkAgIsIAkAkQMCBQhtYXRUeXBlcwUHbWF0VHlwZQIBKQkAlQoDCQEMSW50ZWdlckVudHJ5AgUFd2hLZXkJAGUCBQJ3MAUBbQUJdXNkdFNwZW50BQFtAQtnZXRCYWNrcGFjawEFYnBLZXkEAXAJALwJAgkBC3ZhbHVlT3JFbHNlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QFBWJwS2V5AhowOjBfMF8wXzBfMF8wOjBfMF8wXzBfMF8wOgIBOgkAzAgCCQCkAwEJAQt2YWx1ZU9yRWxzZQIJALYJAQkAkQMCBQFwBQpicElkeExldmVsAAAJAMwIAgMJAAACCQCQAwEJALUJAgkAkQMCBQFwBQhicElkeFJlcwIBXwUGTlVNUkVTCQCRAwIFAXAFCGJwSWR4UmVzAgswXzBfMF8wXzBfMAkAzAgCAwkAAAIJAJADAQkAtQkCCQCRAwIFAXAFCGJwSWR4TWF0AgFfBQZOVU1SRVMJAJEDAgUBcAUIYnBJZHhNYXQCCzBfMF8wXzBfMF8wCQDMCAIJAJEDAgUBcAUJYnBJZHhQcm9kBQNuaWwBDGNoZWNrQmxvY2tlZAADCQELdmFsdWVPckVsc2UCCQCbCAIFD3N0YWtpbmdDb250cmFjdAkBCmtleUJsb2NrZWQABwkAAgECH0NvbnRyYWN0cyBhcmUgdW5kZXIgbWFpbnRlbmFuY2UFBHVuaXQBBnByb2xvZwAJAQVhc0ludAEJAP0HBAUPc3Rha2luZ0NvbnRyYWN0AgpzYXZlTGFzdFR4BQNuaWwFA25pbAEJc2V0Q29tbW9uAgNhY2MPaWdub3JlZEl0ZXJhdG9yBAFqCAUDYWNjAl8xBARpdGVtAwkAZgIJAJADAQgFA2FjYwNfMTAFAWoJAJEDAggFA2FjYwNfMTAFAWoCAzBAMAQGaXNQcm9kCAUDYWNjAl84BAlpdGVtUGFydHMJALUJAgUEaXRlbQIBQAMJAQIhPQIJAJADAQUJaXRlbVBhcnRzAAIJAAIBAi5JbmNvcnJlY3Qgb3JkZXIgZm9ybWF0LCBzaG91bGQgYmUgYW1vdW50QHByaWNlBAhuZXdPcmRBbQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCWl0ZW1QYXJ0cwAABAhuZXdPcmRQcgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCWl0ZW1QYXJ0cwABBAluZXdPcmRVc2QDBQZpc1Byb2QJAGgCBQhuZXdPcmRBbQUIbmV3T3JkUHIJAGsDBQhuZXdPcmRBbQUIbmV3T3JkUHIFBU1VTFQ4BAluZXdPcmRWb2wJAQh0b1ZvbHVtZQMFCG5ld09yZEFtBQ5QUk9EVUNUUEtHU0laRQUGaXNQcm9kBAZ3aEluaXQDCQBmAgkAkAMBCAUDYWNjAl82BQFqCQENcGFyc2VJbnRWYWx1ZQEJAJEDAggFA2FjYwJfNgUBagAABAtjdXJPcmRQYXJ0cwkAtQkCAwkAZgIJAJADAQgFA2FjYwJfNwUBagkAkQMCCAUDYWNjAl83BQFqAgMwQDACAUAECGN1ck9yZEFtCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgULY3VyT3JkUGFydHMAAAQIY3VyT3JkUHIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQtjdXJPcmRQYXJ0cwABAwMJAGYCAAAFCGN1ck9yZFByBgkAZgIAAAUIbmV3T3JkUHIJAAIBAhdQcmljZSBjYW4ndCBiZSBuZWdhdGl2ZQQJY3VyT3JkVXNkAwUGaXNQcm9kCQBoAgUIY3VyT3JkQW0FCGN1ck9yZFByCQBrAwUIY3VyT3JkQW0FCGN1ck9yZFByBQVNVUxUOAMJAAACBQhuZXdPcmRBbQAAAwkAZgIFCGN1ck9yZEFtAAAJAJwKCgkAZAIFAWoAAQkAzQgCCAUDYWNjAl8yCQCkAwEFBndoSW5pdAgFA2FjYwJfMwgFA2FjYwJfNAkAZQIIBQNhY2MCXzUFCWN1ck9yZFVzZAgFA2FjYwJfNggFA2FjYwJfNwUGaXNQcm9kCQBkAggFA2FjYwJfOQkBCHRvVm9sdW1lAwUGd2hJbml0BQ5QUk9EVUNUUEtHU0laRQUGaXNQcm9kCAUDYWNjA18xMAkAnAoKCQBkAgUBagABCQDNCAIIBQNhY2MCXzIJAKQDAQkAZQIFBndoSW5pdAUIY3VyT3JkQW0IBQNhY2MCXzMIBQNhY2MCXzQIBQNhY2MCXzUIBQNhY2MCXzYIBQNhY2MCXzcFBmlzUHJvZAkAZAIIBQNhY2MCXzkJAQh0b1ZvbHVtZQMJAGUCBQZ3aEluaXQFCGN1ck9yZEFtBQ5QUk9EVUNUUEtHU0laRQUGaXNQcm9kCAUDYWNjA18xMAMJAGYCBQhuZXdPcmRBbQAAAwkAZgIAAAUIY3VyT3JkQW0JAJwKCgkAZAIFAWoAAQkAzQgCCAUDYWNjAl8yCQCkAwEJAGUCBQZ3aEluaXQFCGN1ck9yZEFtCQBkAggFA2FjYwJfMwUJbmV3T3JkVm9sCAUDYWNjAl80CQBkAggFA2FjYwJfNQUJbmV3T3JkVXNkCAUDYWNjAl82CAUDYWNjAl83BQZpc1Byb2QJAQh0b1ZvbHVtZQMJAGUCBQZ3aEluaXQFCGN1ck9yZEFtBQ5QUk9EVUNUUEtHU0laRQUGaXNQcm9kCAUDYWNjA18xMAkAnAoKCQBkAgUBagABCQDNCAIIBQNhY2MCXzIJAKQDAQUGd2hJbml0CQBkAggFA2FjYwJfMwUJbmV3T3JkVm9sCAUDYWNjAl80CQBlAgkAZAIIBQNhY2MCXzUFCW5ld09yZFVzZAUJY3VyT3JkVXNkCAUDYWNjAl82CAUDYWNjAl83BQZpc1Byb2QJAQh0b1ZvbHVtZQMFBndoSW5pdAUOUFJPRFVDVFBLR1NJWkUFBmlzUHJvZAgFA2FjYwNfMTADCQBmAgAABQhjdXJPcmRBbQQGYW1EaWZmCQBlAgUIY3VyT3JkQW0FCG5ld09yZEFtAwkAZgIAAAkAZQIFBndoSW5pdAUGYW1EaWZmCQACAQkArAICCQCsAgIJAKwCAgkArAICAhBBdHRlbXB0IHRvIHRha2UgCQCkAwEFBmFtRGlmZgIaIGZyb20gd2FyZWhvdXNlLCBidXQgb25seSAJAKQDAQUGd2hJbml0AgogYXZhaWxhYmxlCQCcCgoJAGQCBQFqAAEJAM0IAggFA2FjYwJfMgkApAMBCQBlAgUGd2hJbml0BQZhbURpZmYIBQNhY2MCXzMJAGUCCAUDYWNjAl80BQluZXdPcmRWb2wIBQNhY2MCXzUIBQNhY2MCXzYIBQNhY2MCXzcFBmlzUHJvZAkBCHRvVm9sdW1lAwkAZQIFBndoSW5pdAUGYW1EaWZmBQ5QUk9EVUNUUEtHU0laRQUGaXNQcm9kCAUDYWNjA18xMAMJAGYCAAAJAGQCBQZ3aEluaXQFCG5ld09yZEFtCQACAQkArAICCQCsAgIJAKwCAgkArAICAhBBdHRlbXB0IHRvIHRha2UgCQCkAwEJAQEtAQUIbmV3T3JkQW0CGiBmcm9tIHdhcmVob3VzZSwgYnV0IG9ubHkgCQCkAwEFBndoSW5pdAIKIGF2YWlsYWJsZQkAnAoKCQBkAgUBagABCQDNCAIIBQNhY2MCXzIJAKQDAQkAZAIFBndoSW5pdAUIbmV3T3JkQW0IBQNhY2MCXzMJAGUCCAUDYWNjAl80BQluZXdPcmRWb2wJAGUCCAUDYWNjAl81BQljdXJPcmRVc2QIBQNhY2MCXzYIBQNhY2MCXzcFBmlzUHJvZAkBCHRvVm9sdW1lAwkAZAIFBndoSW5pdAUIbmV3T3JkQW0FDlBST0RVQ1RQS0dTSVpFBQZpc1Byb2QIBQNhY2MDXzEwAQtzZXRJbnRlcm5hbAMJY3VycmVudFdoCmN1cnJlbnRPcmQGbmV3T3JkBAljdXJyV2hSZXMJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4UmVzAgFfBAljdXJyV2hNYXQJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4TWF0AgFfBApjdXJyV2hQcm9kAwkAAAIJAJEDAgUJY3VycmVudFdoBQl3aElkeFByb2QCAAUDbmlsCQC8CQIJAJEDAgUJY3VycmVudFdoBQl3aElkeFByb2QCAV8EDWN1cnJlbnRPcmRSZXMJALUJAgkAkQMCBQpjdXJyZW50T3JkBQlvcmRJZHhSZXMCAV8EDWN1cnJlbnRPcmRNYXQJALUJAgkAkQMCBQpjdXJyZW50T3JkBQlvcmRJZHhNYXQCAV8EDmN1cnJlbnRPcmRQcm9kAwkAAAIJAJEDAgUKY3VycmVudE9yZAUKb3JkSWR4UHJvZAIABQNuaWwJALwJAgkAkQMCBQpjdXJyZW50T3JkBQpvcmRJZHhQcm9kAgFfAwkBAiE9AgkAkAMBBQZuZXdPcmQAAwkAAgECM25ld09yZGVyU3RyIHNob3VsZCBjb250YWluIGV4YWN0bHkgMiAnOicgc2VwYXJhdG9ycwQIcmVzUGFydHMJALUJAgkAkQMCBQZuZXdPcmQAAAIBXwQIbWF0UGFydHMJALUJAgkAkQMCBQZuZXdPcmQAAQIBXwQJcHJvZFBhcnRzAwkAAAIJAJEDAgUGbmV3T3JkAAICAAUDbmlsCQC8CQIJAJEDAgUGbmV3T3JkAAICAV8DCQECIT0CCQCQAwEFCHJlc1BhcnRzBQZOVU1SRVMJAAIBAiBBbGwgNiByZXNvdXJjZXMgc2hvdWxkIGJlIHBhc3NlZAMJAQIhPQIJAJADAQUIbWF0UGFydHMFBk5VTVJFUwkAAgECIEFsbCA2IG1hdGVyaWFscyBzaG91bGQgYmUgcGFzc2VkBAFyCgACJGwFCHJlc1R5cGVzCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAnAoKAAAFA25pbAAAAAAAAAUJY3VycldoUmVzBQ1jdXJyZW50T3JkUmVzBwAABQhyZXNQYXJ0cwoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEJc2V0Q29tbW9uAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGBAFtCgACJGwFCG1hdFR5cGVzCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAnAoKAAAFA25pbAgFAXICXzMIBQFyAl80CAUBcgJfNQUJY3VycldoTWF0BQ1jdXJyZW50T3JkTWF0BwgFAXICXzkFCG1hdFBhcnRzCgEFJGYxXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQlzZXRDb21tb24CBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjFfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjFfMgIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYEAXAKAAIkbAUJcHJvZFR5cGVzCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAnAoKAAAFA25pbAgFAW0CXzMIBQFtAl80CAUBbQJfNQUKY3VycldoUHJvZAUOY3VycmVudE9yZFByb2QGCAUBbQJfOQUJcHJvZFBhcnRzCgEFJGYyXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQlzZXRDb21tb24CBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjJfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDUwCQEFJGYyXzICCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkAGgAbABwAHQAeAB8AIAAhACIAIwAkACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgkAmQoHCAUBcgJfMggFAW0CXzIIBQFwAl8yCAUBcAJfMwgFAXACXzQIBQFwAl81CAUBcAJfOQEMYWNjZXB0Q29tbW9uAgNhY2MJYnBPcmRJdGVtBAFqCAUDYWNjAl83BAZpc1Byb2QIBQNhY2MDXzEyBApicE9yZFBhcnRzCQC1CQIFCWJwT3JkSXRlbQIBQAMJAQIhPQIJAJADAQUKYnBPcmRQYXJ0cwACCQACAQIuSW5jb3JyZWN0IG9yZGVyIGZvcm1hdCwgc2hvdWxkIGJlIGFtb3VudEBwcmljZQQHYnBPcmRBbQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCmJwT3JkUGFydHMAAAQHYnBPcmRQcgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCmJwT3JkUGFydHMAAQMJAGYCAAAFB2JwT3JkUHIJAAIBAhdQcmljZSBjYW4ndCBiZSBuZWdhdGl2ZQQIYnBPcmRVc2QDBQZpc1Byb2QJAGgCBQdicE9yZEFtBQdicE9yZFByCQBrAwUHYnBPcmRBbQUHYnBPcmRQcgUFTVVMVDgEBmJwSW5pdAMJAGYCCQCQAwEIBQNhY2MCXzgFAWoJAQ1wYXJzZUludFZhbHVlAQkAkQMCCAUDYWNjAl84BQFqAAAEBndoSW5pdAMJAGYCCQCQAwEIBQNhY2MCXzkFAWoJAQ1wYXJzZUludFZhbHVlAQkAkQMCCAUDYWNjAl85BQFqAAAECXdoT3JkSW5pdAMJAGYCCQCQAwEIBQNhY2MDXzEwBQFqCQCRAwIIBQNhY2MDXzEwBQFqAgMwQDAECndoT3JkUGFydHMJALUJAgUJd2hPcmRJbml0AgFABAd3aE9yZEFtCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKd2hPcmRQYXJ0cwAABAd3aE9yZFByCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKd2hPcmRQYXJ0cwABAwMJAQIhPQIFB2JwT3JkQW0AAAkBAiE9AgUHYnBPcmRQcgUHd2hPcmRQcgcJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIKUHJpY2VzIG9mIAkAkQMCCAUDYWNjA18xMQUBagIXIGRvbid0IG1hdGNoISBXSCBwcmljZT0JAKQDAQUHd2hPcmRQcgINLCB5b3VyIHByaWNlPQkApAMBBQdicE9yZFByBAh3aE9yZFVzZAMFBmlzUHJvZAkAaAIFB3doT3JkQW0FB3doT3JkUHIJAGsDBQd3aE9yZEFtBQd3aE9yZFByBQVNVUxUOAQIZGVsdGFWb2wJAQh0b1ZvbHVtZQMFB2JwT3JkQW0FDlBST0RVQ1RQS0dTSVpFBQZpc1Byb2QDCQAAAgUHYnBPcmRBbQAACQCfCg0JAM0IAggFA2FjYwJfMQkApAMBBQZ3aEluaXQJAM0IAggFA2FjYwJfMgUJd2hPcmRJbml0CQDNCAIIBQNhY2MCXzMJAKQDAQUGYnBJbml0CAUDYWNjAl80CAUDYWNjAl81CAUDYWNjAl82CQBkAggFA2FjYwJfNwABCAUDYWNjAl84CAUDYWNjAl85CAUDYWNjA18xMAgFA2FjYwNfMTEFBmlzUHJvZAgFA2FjYwNfMTMDCQBmAgUHYnBPcmRBbQAAAwkAZgIAAAUHd2hPcmRBbQMJAGYCBQdicE9yZEFtCQEBLQEFB3doT3JkQW0JAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIPQXR0ZW1wdCB0byBidXkgCQCkAwEFB2JwT3JkQW0CBCBvZiAJAJEDAggFA2FjYwNfMTEFAWoCGywgYnV0IHdhcmVob3VzZSBvbmx5IHNlbGxzIAkApAMBCQEBLQEFB3doT3JkQW0JAJ8KDQkAzQgCCAUDYWNjAl8xCQCkAwEFBndoSW5pdAkAzQgCCAUDYWNjAl8yCQCsAgIJAKwCAgkApAMBCQBkAgUHd2hPcmRBbQUHYnBPcmRBbQIBQAkApAMBBQd3aE9yZFByCQDNCAIIBQNhY2MCXzMJAKQDAQkAZAIFBmJwSW5pdAUHYnBPcmRBbQkAZAIIBQNhY2MCXzQFCGRlbHRhVm9sCAUDYWNjAl81CQBkAggFA2FjYwJfNgUIYnBPcmRVc2QJAGQCCAUDYWNjAl83AAEIBQNhY2MCXzgIBQNhY2MCXzkIBQNhY2MDXzEwCAUDYWNjA18xMQUGaXNQcm9kCQBkAggFA2FjYwNfMTMDBQZpc1Byb2QJAGgCBQdicE9yZEFtBQVNVUxUOAUHYnBPcmRBbQkAAgEJAKwCAgkArAICAg9BdHRlbXB0IHRvIGJ1eSAJAJEDAggFA2FjYwNfMTEFAWoCICB3aGlsZSB3YXJlaG91c2UgZG9lc24ndCBzZWxsIGl0AwkAZgIFB3doT3JkQW0AAAMJAGYCCQEBLQEFB2JwT3JkQW0FB3doT3JkQW0JAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIQQXR0ZW1wdCB0byBzZWxsIAkApAMBCQEBLQEFB2JwT3JkQW0CBCBvZiAJAJEDAggFA2FjYwNfMTEFAWoCGiwgYnV0IHdhcmVob3VzZSBvbmx5IGJ1eXMgCQCkAwEFB3doT3JkQW0DCQBmAgkBAS0BBQdicE9yZEFtBQZicEluaXQJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIQQXR0ZW1wdCB0byBzZWxsIAkApAMBCQEBLQEFB2JwT3JkQW0CFCwgYnV0IHlvdSBvbmx5IGhhdmUgCQCkAwEFBmJwSW5pdAIEIG9mIAkAkQMCCAUDYWNjA18xMQUBagkAnwoNCQDNCAIIBQNhY2MCXzEJAKQDAQkAZQIFBndoSW5pdAUHYnBPcmRBbQkAzQgCCAUDYWNjAl8yCQCsAgIJAKwCAgkApAMBCQBkAgUHd2hPcmRBbQUHYnBPcmRBbQIBQAkApAMBBQd3aE9yZFByCQDNCAIIBQNhY2MCXzMJAKQDAQkAZAIFBmJwSW5pdAUHYnBPcmRBbQkAZQIIBQNhY2MCXzQFCGRlbHRhVm9sCQBlAggFA2FjYwJfNQUIYnBPcmRVc2QIBQNhY2MCXzYJAGQCCAUDYWNjAl83AAEIBQNhY2MCXzgIBQNhY2MCXzkIBQNhY2MDXzEwCAUDYWNjA18xMQUGaXNQcm9kCQBlAggFA2FjYwNfMTMDBQZpc1Byb2QJAGgCBQdicE9yZEFtBQVNVUxUOAUHYnBPcmRBbQkAAgEJAKwCAgkArAICAhBBdHRlbXB0IHRvIHNlbGwgCQCRAwIIBQNhY2MDXzExBQFqAh8gd2hpbGUgd2FyZWhvdXNlIGRvZXNuJ3QgYnV5IGl0ARNzZWxsUmVzb3VyY2VzQ29tbW9uBAdyZXNMaXN0DGZhY3RvcnlMb2NJZAdhbW91bnRzCW1pblByaWNlcwoBBWFkZGVyAgNhY2MBagMJAGYCCQCRAwIFB2Ftb3VudHMFAWoJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdyZXNMaXN0BQFqCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgICCVlvdSBoYXZlIAkAkQMCBQdyZXNMaXN0BQFqAgQgb2YgCQCRAwIFCHJlc1R5cGVzBQFqAhQsIGJ1dCB0cmllZCB0byBzZWxsIAkApAMBCQCRAwIFB2Ftb3VudHMFAWoDCQBmAgAACQCRAwIFB2Ftb3VudHMFAWoJAAIBCQCsAgIJAKwCAgkArAICAiVZb3UgdHJpZWQgdG8gc2VsbCBuZWdhdGl2ZSBhbW91bnQgb2YgCQCRAwIFCHJlc1R5cGVzBQFqAgI6IAkApAMBCQCRAwIFB2Ftb3VudHMFAWoDCQBmAgkAkQMCBQdhbW91bnRzBQFqAAAEAWIJAQxzZWxsSW50ZXJuYWwEBQxmYWN0b3J5TG9jSWQFAWoJAJEDAgUHYW1vdW50cwUBagkAkQMCBQltaW5QcmljZXMFAWoJAJYKBAkAzQgCCAUDYWNjAl8xCAUBYgJfMQkAzQgCCAUDYWNjAl8yCQCkAwEJAGUCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHcmVzTGlzdAUBagkAkQMCBQdhbW91bnRzBQFqCQBkAggFA2FjYwJfMwgFAWICXzIJAGQCCAUDYWNjAl80CQCRAwIFB2Ftb3VudHMFAWoJAJYKBAgFA2FjYwJfMQkAzQgCCAUDYWNjAl8yCQCRAwIFB3Jlc0xpc3QFAWoIBQNhY2MCXzMIBQNhY2MCXzQKAAIkbAUFSVRFUjYKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCWCgQFA25pbAUDbmlsAAAAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEFYWRkZXICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYBEmJ1eU1hdGVyaWFsc0NvbW1vbgQHbWF0TGlzdAxmYWN0b3J5TG9jSWQHYW1vdW50cwltYXhQcmljZXMKAQhtVXBkYXRlcgIDYWNjAWoDCQBmAgAACQCRAwIFB2Ftb3VudHMFAWoJAAIBCQCsAgIJAKwCAgkArAICAiRZb3UgdHJpZWQgdG8gYnV5IG5lZ2F0aXZlIGFtb3VudCBvZiAJAJEDAgUIbWF0VHlwZXMFAWoCAjogCQCkAwEJAJEDAgUHYW1vdW50cwUBagMJAGYCCQCRAwIFB2Ftb3VudHMFAWoAAAQBYgkBC2J1eUludGVybmFsBAUMZmFjdG9yeUxvY0lkBQFqCQCRAwIFB2Ftb3VudHMFAWoJAJEDAgUJbWF4UHJpY2VzBQFqCQCWCgQJAM0IAggFA2FjYwJfMQgFAWICXzEJAM0IAggFA2FjYwJfMgkApAMBCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB21hdExpc3QFAWoIBQFiAl8zCQBkAggFA2FjYwJfMwgFAWICXzIJAGQCCAUDYWNjAl80CQCRAwIFB2Ftb3VudHMFAWoJAJYKBAgFA2FjYwJfMQkAzQgCCAUDYWNjAl8yCQCRAwIFB21hdExpc3QFAWoIBQNhY2MCXzMIBQNhY2MCXzQKAAIkbAUFSVRFUjYKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCWCgQFA25pbAUDbmlsAAAAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEIbVVwZGF0ZXICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYBF2V4Y2hhbmdlUmVzb3VyY2VzQ29tbW9uAwdyZXNMaXN0B21hdExpc3QHYW1vdW50cwoBCWV4Y2hhbmdlcgIDYWNjAWoEA2FtagkAkQMCBQdhbW91bnRzBQFqAwkAZgIFA2FtagkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB3Jlc0xpc3QFAWoJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIJWW91IGhhdmUgCQCRAwIFB3Jlc0xpc3QFAWoCBCBvZiAJAJEDAgUIcmVzVHlwZXMFAWoCGCwgYnV0IHRyaWVkIHRvIGV4Y2hhbmdlIAkApAMBBQNhbWoDCQBmAgAABQNhbWoJAAIBCQCsAgIJAKwCAgkArAICAilZb3UgdHJpZWQgdG8gZXhjaGFuZ2UgbmVnYXRpdmUgYW1vdW50IG9mIAkAkQMCBQhyZXNUeXBlcwUBagICOiAJAKQDAQUDYW1qAwkAZgIFA2FtagAACQCWCgQJAM0IAggFA2FjYwJfMQkApAMBCQBlAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB3Jlc0xpc3QFAWoFA2FtagkAzQgCCAUDYWNjAl8yCQCkAwEJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHbWF0TGlzdAUBagUDYW1qCQBkAggFA2FjYwJfMwkAawMFA2FtagUQUkVTT1VSQ0VQUklDRU1JTgUFTVVMVDgJAGQCCAUDYWNjAl80BQNhbWoJAJYKBAkAzQgCCAUDYWNjAl8xCQCRAwIFB3Jlc0xpc3QFAWoJAM0IAggFA2FjYwJfMgkAkQMCBQdtYXRMaXN0BQFqCAUDYWNjAl8zCAUDYWNjAl80CgACJGwFBUlURVI2CgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlgoEBQNuaWwFA25pbAAAAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCWV4Y2hhbmdlcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgEQc2hvcDJ1c2VyQWN0aW9ucwMNdXNkV2gyQnBTYWxkbwpjYWxsZXJBZGRyC3JlY2VpdmVkRmVlAwkAZgIFDXVzZFdoMkJwU2FsZG8AAAQLdXNkV2gyQnBGZWUJAGsDBQ11c2RXaDJCcFNhbGRvBQpBVUNUSU9ORkVFBQVNVUxUNgMJAGcCBQtyZWNlaXZlZEZlZQkAZQIFDXVzZFdoMkJwU2FsZG8JAGgCAAMFC3VzZFdoMkJwRmVlCQACAQkArAICAitUaGlzIHRyYWRlIGRvZXMgbm90IGNvdmVyIGRlbGl2ZXJ5IGNvc3Qgb2YgCQEKZml4ZWRQb2ludAIFC3JlY2VpdmVkRmVlAAYECHJlZkJ5S2V5CQEPa2V5QWRkcmVzc1JlZkJ5AQUKY2FsbGVyQWRkcgQFcmVmQnkJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0BQhyZWZCeUtleQQGY2FsbGVyCQERQGV4dHJOYXRpdmUoMTA2MikBBQpjYWxsZXJBZGRyCQDNCAIJAM0IAgMJAQlpc0RlZmluZWQBBQVyZWZCeQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBCQEFdmFsdWUBBQVyZWZCeQULdXNkV2gyQnBGZWUFC3VzZHRBc3NldElkBQNuaWwFA25pbAkBDlNjcmlwdFRyYW5zZmVyAwUGY2FsbGVyCQBlAgkAZQIFDXVzZFdoMkJwU2FsZG8JAGgCAAMFC3VzZFdoMkJwRmVlBQtyZWNlaXZlZEZlZQULdXNkdEFzc2V0SWQJAQ5TY3JpcHRUcmFuc2ZlcgMFDHJlc3RDb250cmFjdAULdXNkV2gyQnBGZWUFC3VzZHRBc3NldElkBQNuaWwBEHVzZXIyc2hvcEFjdGlvbnMEDXVzZEJwMldoU2FsZG8EcG10cw1zaG9wTGFuZE93bmVyCHNwZW50RmVlAwkAZgIFDXVzZEJwMldoU2FsZG8AAAMJAQIhPQIJAJADAQUEcG10cwABCQACAQIiZXhhY3RseSAxIHBheW1lbnQgbXVzdCBiZSBhdHRhY2hlZAQDcG10CQCRAwIFBHBtdHMAAAQDYW10CAUDcG10BmFtb3VudAMDCQEBIQEJAQlpc0RlZmluZWQBCAUDcG10B2Fzc2V0SWQGCQECIT0CCQEFdmFsdWUBCAUDcG10B2Fzc2V0SWQFC3VzZHRBc3NldElkCQACAQITVVNEVCBwYXltZW50cyBvbmx5IQQQdXNkdFNwZW50V2l0aEZlZQkAZAIFDXVzZEJwMldoU2FsZG8FCHNwZW50RmVlAwkBAiE9AgUDYW10BRB1c2R0U3BlbnRXaXRoRmVlCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIfSW5zdWZmaWNpZW50IHBheW1lbnQhIEF0dGFjaGVkPQkBCmZpeGVkUG9pbnQCBQNhbXQABgILLCByZXF1aXJlZD0JAQpmaXhlZFBvaW50AgUNdXNkQnAyV2hTYWxkbwAGAgErCQEKZml4ZWRQb2ludAIFCHNwZW50RmVlAAYCDihkZWxpdmVyeSBmZWUpAwkAZgIFDk1JTlNIT1BQQVlNRU5UBQ11c2RCcDJXaFNhbGRvCQACAQkArAICAhJNaW4gc2hvcCB0cmFkZSBpcyAJAQpmaXhlZFBvaW50AgUOTUlOU0hPUFBBWU1FTlQABgQLdXNkQnAyV2hGZWUJAGsDBQ11c2RCcDJXaFNhbGRvBQpBVUNUSU9ORkVFBQVNVUxUNgQIcmVmQnlLZXkJAQ9rZXlBZGRyZXNzUmVmQnkBBQ1zaG9wTGFuZE93bmVyBAVyZWZCeQkAnQgCBQ9zdGFraW5nQ29udHJhY3QFCHJlZkJ5S2V5CQDNCAIJAM0IAgMJAQlpc0RlZmluZWQBBQVyZWZCeQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBCQEFdmFsdWUBBQVyZWZCeQULdXNkQnAyV2hGZWUFC3VzZHRBc3NldElkBQNuaWwFA25pbAkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQUNc2hvcExhbmRPd25lcgkAZQIFDXVzZEJwMldoU2FsZG8JAGgCAAMFC3VzZEJwMldoRmVlBQt1c2R0QXNzZXRJZAkBDlNjcmlwdFRyYW5zZmVyAwUMcmVzdENvbnRyYWN0BQt1c2RCcDJXaEZlZQULdXNkdEFzc2V0SWQDCQECIT0CCQCQAwEFBHBtdHMAAAkAAgECEk5vIHBheW1lbnRzIG5lZWRlZAUDbmlsARVhY2NlcHRTaG9wT3JkZXJDb21tb24GD3Nob3BMYW5kQXNzZXRJZApjYWxsZXJBZGRyCmJwT3JkZXJTdHIJYnBSZXNMaXN0CWJwTWF0TGlzdApicFByb2RMaXN0BAlsYW5kQXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQ9zaG9wTGFuZEFzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBCQCaCAIFD3N0YWtpbmdDb250cmFjdAkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQ9zaG9wTGFuZEFzc2V0SWQJAAIBCQCsAgIJAKwCAgIETkZUIAgFCWxhbmRBc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAQNc2hvcExhbmRPd25lcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFD3Nob3BMYW5kQXNzZXRJZAkArAICCQCsAgICBE5GVCAIBQlsYW5kQXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwkAAAIFDXNob3BMYW5kT3duZXIFCmNhbGxlckFkZHIJAAIBAh5Zb3UgY2Fubm90IHRyYWRlIHdpdGggeW91cnNlbGYEDGJwT3JkZXJQYXJ0cwkAvAkCBQpicE9yZGVyU3RyAgE6AwkBAiE9AgkAkAMBBQxicE9yZGVyUGFydHMAAwkAAgECMmJwT3JkZXJTdHIgc2hvdWxkIGNvbnRhaW4gZXhhY3RseSAyICc6JyBzZXBhcmF0b3JzBAhicE9yZFJlcwkAtQkCCQCRAwIFDGJwT3JkZXJQYXJ0cwAAAgFfBAhicE9yZE1hdAkAtQkCCQCRAwIFDGJwT3JkZXJQYXJ0cwABAgFfBAlicE9yZFByb2QDCQAAAgkAkQMCBQxicE9yZGVyUGFydHMAAgIABQNuaWwJALwJAgkAkQMCBQxicE9yZGVyUGFydHMAAgIBXwMJAQIhPQIJAJADAQUIYnBPcmRSZXMFBk5VTVJFUwkAAgECIEFsbCA2IHJlc291cmNlcyBzaG91bGQgYmUgcGFzc2VkAwkBAiE9AgkAkAMBBQhicE9yZE1hdAUGTlVNUkVTCQACAQIgQWxsIDYgbWF0ZXJpYWxzIHNob3VsZCBiZSBwYXNzZWQEAndoCQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIUZ2V0V2FyZWhvdXNlUkVBRE9OTFkJAMwIAgUPc2hvcExhbmRBc3NldElkBQNuaWwFA25pbAQJY3VycmVudFdoCQC8CQIFAndoAgE6BAljdXJyV2hSZXMJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4UmVzAgFfBAljdXJyV2hNYXQJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4TWF0AgFfBApjdXJyV2hQcm9kAwkAAAIJAJEDAgUJY3VycmVudFdoBQl3aElkeFByb2QCAAUDbmlsCQC8CQIJAJEDAgUJY3VycmVudFdoBQl3aElkeFByb2QCAV8ED2N1cnJXaExvY2tlZFZvbAkBDXBhcnNlSW50VmFsdWUBCQCRAwIJALUJAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4TE9GVAIBXwUJdm9sTG9ja2VkBAZvcmRLZXkJAQ5rZXlPcmRlckJ5TGFuZAEFD3Nob3BMYW5kQXNzZXRJZAQFd2hPcmQJAQhnZXRPcmRlcgEFBm9yZEtleQQId2hPcmRSZXMJALUJAgkAkQMCBQV3aE9yZAUJb3JkSWR4UmVzAgFfBAh3aE9yZE1hdAkAtQkCCQCRAwIFBXdoT3JkBQlvcmRJZHhNYXQCAV8ECXdoT3JkUHJvZAMJAAACCQCRAwIFBXdoT3JkBQpvcmRJZHhQcm9kAgAFA25pbAkAvAkCCQCRAwIFBXdoT3JkBQpvcmRJZHhQcm9kAgFfBAFyCgACJGwFCGJwT3JkUmVzCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAnwoNBQNuaWwFA25pbAUDbmlsAAAAAAAAAAAFCWJwUmVzTGlzdAUJY3VycldoUmVzBQh3aE9yZFJlcwUIcmVzVHlwZXMHAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBDGFjY2VwdENvbW1vbgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgQBbQoAAiRsBQhicE9yZE1hdAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJ8KDQUDbmlsBQNuaWwFA25pbAgFAXICXzQIBQFyAl81CAUBcgJfNgAABQlicE1hdExpc3QFCWN1cnJXaE1hdAUId2hPcmRNYXQFCG1hdFR5cGVzBwgFAXIDXzEzCgEFJGYxXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQxhY2NlcHRDb21tb24CBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjFfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjFfMgIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYEAXADCQECIT0CCQCQAwEFCWJwT3JkUHJvZAAACgACJGwFCWJwT3JkUHJvZAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJ8KDQUDbmlsBQNuaWwFA25pbAgFAW0CXzQIBQFtAl81CAUBbQJfNgAABQpicFByb2RMaXN0BQpjdXJyV2hQcm9kBQl3aE9yZFByb2QFCXByb2RUeXBlcwYIBQFtA18xMwoBBSRmMl8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEMYWNjZXB0Q29tbW9uAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYyXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyA1MAkBBSRmMl8yAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAAZABoAGwAcAB0AHgAfACAAIQAiACMAJAAlACYAJwAoACkAKgArACwALQAuAC8AMAAxADIJAJ8KDQUKY3VycldoUHJvZAUJd2hPcmRQcm9kBQpicFByb2RMaXN0CAUBbQJfNAgFAW0CXzUIBQFtAl82AAAFCmJwUHJvZExpc3QFCmN1cnJXaFByb2QFCXdoT3JkUHJvZAUJcHJvZFR5cGVzBggFAW0DXzEzBAh2b2xTYWxkbwgFAXACXzQEDG5ld0xvY2tlZFZvbAMJAGYCAAAJAGUCBQ9jdXJyV2hMb2NrZWRWb2wFCHZvbFNhbGRvAAAJAGUCBQ9jdXJyV2hMb2NrZWRWb2wFCHZvbFNhbGRvBAV3aFN0cgkAugkCCQDMCAIJAJEDAgUJY3VycmVudFdoBQt3aElkeExldmVscwkAzAgCCQC5CQIIBQFyAl8xAgFfCQDMCAIJALkJAggFAW0CXzECAV8JAMwIAgkAugkCCAUBcAJfMQIBXwkAzAgCCQCkAwEFDG5ld0xvY2tlZFZvbAUDbmlsAgE6BAtuZXdXaE9yZFN0cgkAugkCCQDMCAIJALkJAggFAXICXzICAV8JAMwIAgkAuQkCCAUBbQJfMgIBXwkAzAgCCQC6CQIIBQFwAl8yAgFfBQNuaWwCAToEBndoU2F2ZQkBCGFzU3RyaW5nAQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCDXNhdmVXYXJlaG91c2UJAMwIAgUFd2hTdHIJAMwIAgUPc2hvcExhbmRBc3NldElkBQNuaWwFA25pbAQOYWNjU3RhdHNSZXN1bHQJAQVhc0ludAEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag51cGRhdGVBY2NTdGF0cwkAzAgCBQ1zaG9wTGFuZE93bmVyCQDMCAIJAGsDBQZ4cFNob3AIBQFwA18xMwUFTVVMVDgFA25pbAUDbmlsCQCcCgoJAQtTdHJpbmdFbnRyeQIFBm9yZEtleQULbmV3V2hPcmRTdHIIBQFyAl8zCAUBbQJfMwgFAXACXzMIBQFwAl81CAUBcAJfNggFAXADXzEzBQ1zaG9wTGFuZE93bmVyBQZ3aFNhdmUFDmFjY1N0YXRzUmVzdWx0ARpzZWxsUmVzb3VyY2VzV29ybGRJbnRlcm5hbAEGYW1vdW50BAZvbmVSZXMJAGkCBQZhbW91bnQAHgQRb25lRmFjdG9yeUFtb3VudHMJAMwIAgUGb25lUmVzCQDMCAIFBm9uZVJlcwkAzAgCBQZvbmVSZXMJAMwIAgUGb25lUmVzCQDMCAIFBm9uZVJlcwkAzAgCBQZvbmVSZXMFA25pbAQBcwkApAMBBQZvbmVSZXMEB3Jlc0xpc3QJAMwIAgUBcwkAzAgCBQFzCQDMCAIFAXMJAMwIAgUBcwkAzAgCBQFzCQDMCAIFAXMFA25pbAQJbWluUHJpY2VzCQDMCAIAAAkAzAgCAAAJAMwIAgAACQDMCAIAAAkAzAgCAAAJAMwIAgAABQNuaWwKAQpvbmVGYWN0b3J5AgNhY2MJY29udGluZW50BAF4CQETc2VsbFJlc291cmNlc0NvbW1vbgQFB3Jlc0xpc3QFCWNvbnRpbmVudAURb25lRmFjdG9yeUFtb3VudHMFCW1pblByaWNlcwkAlQoDCQDOCAIIBQNhY2MCXzEIBQF4Al8xCQBkAggFA2FjYwJfMggFAXgCXzMJAGQCCAUDYWNjAl8zCAUBeAJfNAQNJHQwMjUyOTIyNTM4MgoAAiRsBQpjb250aW5lbnRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlQoDBQNuaWwAAAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQpvbmVGYWN0b3J5AgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA1CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQQOZmFjdG9yeUFjdGlvbnMIBQ0kdDAyNTI5MjI1MzgyAl8xBAx1c2R0UmVjZWl2ZWQIBQ0kdDAyNTI5MjI1MzgyAl8yBAh0b3RhbFJlcwgFDSR0MDI1MjkyMjUzODICXzMEA2ZlZQkAawMFDHVzZHRSZWNlaXZlZAUMREVMSVZFUllfRkVFBQVNVUxUNgQQYWN0aXZpdGllc0Ftb3VudAkAaQIFDHVzZHRSZWNlaXZlZABkBAh1c2R0TGVmdAkAZQIJAGUCBQx1c2R0UmVjZWl2ZWQFEGFjdGl2aXRpZXNBbW91bnQFA2ZlZQkAlwoFBQ5mYWN0b3J5QWN0aW9ucwUIdXNkdExlZnQFA2ZlZQUQYWN0aXZpdGllc0Ftb3VudAUIdG90YWxSZXMBEGNyYWZ0R29vZHNDb21tb24FB21hdExpc3QIcHJvZExpc3QUbWFudWZhY3RvcnlDb250aW5lbnQKcHJvZHVjdElkeAhxdWFudGl0eQMJAGcCAAAFCHF1YW50aXR5CQACAQIbUXVhbnRpdHkgc2hvdWxkIGJlIHBvc2l0aXZlAwMJAGYCAAAFCnByb2R1Y3RJZHgGCQBnAgUKcHJvZHVjdElkeAkAkAMBBRBwcm9kdWN0aW9uTWF0cml4CQACAQkArAICAhRVbmtub3duIHByb2R1Y3QgaWR4PQkApAMBBQpwcm9kdWN0SWR4BAZyZWNpcGUJALUJAgkAkQMCBRBwcm9kdWN0aW9uTWF0cml4BQpwcm9kdWN0SWR4AgFfAwkBAiE9AgkAkAMBBQZyZWNpcGUFClJFQ0lQRVNJWkUJAAIBCQCsAgICF0ZhdGFsOiB1bmtub3duIHJlY2lwZTogCQCRAwIFEHByb2R1Y3Rpb25NYXRyaXgFCnByb2R1Y3RJZHgEDnByb2R1Y3RDb250SWR4CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUGcmVjaXBlBQ1ySWR4Q29udGluZW50AwkBAiE9AgkAkQMCBQpjb250aW5lbnRzBQ5wcm9kdWN0Q29udElkeAUUbWFudWZhY3RvcnlDb250aW5lbnQJAAIBCQCsAgIJAKwCAgkArAICAh1UaGlzIHByb2R1Y3QgaXMgYXZhaWxhYmxlIGluIAkAkQMCBQpjb250aW5lbnRzBQ5wcm9kdWN0Q29udElkeAIJLCBub3QgaW4gBRRtYW51ZmFjdG9yeUNvbnRpbmVudAoBBmZpbGxlcgIDYWNjC2lnbm9yZWRJdGVtBAFuCAUDYWNjAl8yBAJ4cwMJAGYCCQCQAwEFCHByb2RMaXN0BQFuCQCRAwIFCHByb2RMaXN0BQFuAgEwBAF4CQENcGFyc2VJbnRWYWx1ZQEFAnhzBAZhbW91bnQJAGgCBQhxdWFudGl0eQUOUFJPRFVDVFBLR1NJWkUEAXkDCQAAAgUBbgUKcHJvZHVjdElkeAkApAMBCQBkAgUBeAUGYW1vdW50BQJ4cwkAlAoCCQDNCAIIBQNhY2MCXzEFAXkJAGQCBQFuAAEEB25ld1Byb2QICgACJGwFEHByb2R1Y3Rpb25NYXRyaXgKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCUCgIFA25pbAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQZmaWxsZXICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDUwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkAGgAbABwAHQAeAB8AIAAhACIAIwAkACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgJfMQoBCHByb2R1Y2VyAgNhY2MBagQHbmVlZE1hdAkAaAIJAGgCCQBoAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBnJlY2lwZQUBagUFTVVMVDUFCHF1YW50aXR5CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUGcmVjaXBlBQlySWR4Q29lZmYEB2hhdmVNYXQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdtYXRMaXN0BQFqAwkAZgIFB25lZWRNYXQFB2hhdmVNYXQJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICCVlvdSBoYXZlIAkBCmZpeGVkUG9pbnQCBQdoYXZlTWF0AAgCBCBvZiAJAJEDAgUIbWF0VHlwZXMFAWoCFiwgYnV0IHJlY2lwZSByZXF1aXJlcyAJAQpmaXhlZFBvaW50AgUHbmVlZE1hdAAIAg4gZm9yIHF1YW50aXR5IAkApAMBBQhxdWFudGl0eQMJAGYCBQduZWVkTWF0AAAJAJQKAgkAzQgCCAUDYWNjAl8xCQCkAwEJAGUCBQdoYXZlTWF0BQduZWVkTWF0CQBkAggFA2FjYwJfMgUHbmVlZE1hdAkAlAoCCQDNCAIIBQNhY2MCXzEJAJEDAgUHbWF0TGlzdAUBaggFA2FjYwJfMgQGbWVyZ2VkCgACJGwFBUlURVI2CgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCBQNuaWwAAAoBBSRmMV8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEIcHJvZHVjZXICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjFfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjFfMgIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYJAJUKAwgFBm1lcmdlZAJfMQUHbmV3UHJvZAgFBm1lcmdlZAJfMhgBaQEacmVjYWxjTG9ja2VkVm9sdW1lUkVBRE9OTFkCC2xhbmRBc3NldElkAndoBApjdXJyZW50T3JkCQEIZ2V0T3JkZXIBCQEOa2V5T3JkZXJCeUxhbmQBBQtsYW5kQXNzZXRJZAQBegkBC3NldEludGVybmFsAwUCd2gFCmN1cnJlbnRPcmQFCmN1cnJlbnRPcmQJAJQKAgUDbmlsCQBkAggFAXoCXzQIBQF6Al81AWkBDWNvbnN0cnVjdG9yVjEBCHJlc3RBZGRyAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIRUGVybWlzc2lvbiBkZW5pZWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDmtleVJlc3RBZGRyZXNzAAUIcmVzdEFkZHIFA25pbAFpAQ1zZWxsUmVzb3VyY2VzAgdhbW91bnRzCW1pblByaWNlcwQMcHJvbG9nUmVzdWx0CQEGcHJvbG9nAAMJAAACBQxwcm9sb2dSZXN1bHQFDHByb2xvZ1Jlc3VsdAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIqc2VsbFJlc291cmNlcyBkb2Vzbid0IHJlcXVpcmUgYW55IHBheW1lbnRzBAtjdXJMb2NhdGlvbgkAtQkCCQELdmFsdWVPckVsc2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkBQ9ERUZBVUxUTE9DQVRJT04CAV8DCQECIT0CCQCRAwIFC2N1ckxvY2F0aW9uBQpsb2NJZHhUeXBlAgFGCQACAQkArAICAi1EdWNrIGxvY2F0aW9uIHR5cGUgc2hvdWxkIGJlIEZhY3RvcnksIGJ1dCBpcyAJAJEDAgULY3VyTG9jYXRpb24FCmxvY0lkeFR5cGUEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBCQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQHcmVzTGlzdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwIBXwQNJHQwMjg5MTUyOTA0MQkBE3NlbGxSZXNvdXJjZXNDb21tb24EBQdyZXNMaXN0CQCRAwIFC2N1ckxvY2F0aW9uBQhsb2NJZHhJZAUHYW1vdW50cwUJbWluUHJpY2VzBA5mYWN0b3J5QWN0aW9ucwgFDSR0MDI4OTE1MjkwNDECXzEEBm5ld1JlcwgFDSR0MDI4OTE1MjkwNDECXzIEDHVzZHRSZWNlaXZlZAgFDSR0MDI4OTE1MjkwNDECXzMECHRvdGFsUmVzCAUNJHQwMjg5MTUyOTA0MQJfNAQQYWN0aXZpdGllc0Ftb3VudAkAaQIFDHVzZHRSZWNlaXZlZABkBAduZXdQYWNrCQC6CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCQC5CQIFBm5ld1JlcwIBXwkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QFA25pbAIBOgQOYmFja3BhY2tSZXN1bHQJAQhhc1N0cmluZwEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag51cGRhdGVCYWNrcGFjawkAzAgCBQtkdWNrQXNzZXRJZAkAzAgCBQduZXdQYWNrBQNuaWwFA25pbAQLc3RhdHNSZXN1bHQJAQVhc0ludAEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag91cGRhdGVEdWNrU3RhdHMJAMwIAgULZHVja0Fzc2V0SWQJAMwIAgkAawMFB3hwVHJhZGUFCHRvdGFsUmVzBQVNVUxUOAUDbmlsBQNuaWwJAJQKAgkAzQgCCQDNCAIFDmZhY3RvcnlBY3Rpb25zCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIJAGUCBQx1c2R0UmVjZWl2ZWQFEGFjdGl2aXRpZXNBbW91bnQFC3VzZHRBc3NldElkCQEOU2NyaXB0VHJhbnNmZXIDBQxyZXN0Q29udHJhY3QFEGFjdGl2aXRpZXNBbW91bnQFC3VzZHRBc3NldElkCQCVCgMFDmJhY2twYWNrUmVzdWx0BQxwcm9sb2dSZXN1bHQFC3N0YXRzUmVzdWx0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBEnNlbGxSZXNvdXJjZXNXb3JsZAIEYWRkcgZhbW91bnQDCQECIT0CCAUBaQZjYWxsZXIFDWFjcmVzQ29udHJhY3QJAAIBAhFQZXJtaXNzaW9uIGRlbmllZAQNJHQwMjk4MzMyOTk5MAkBGnNlbGxSZXNvdXJjZXNXb3JsZEludGVybmFsAQUGYW1vdW50BA5mYWN0b3J5QWN0aW9ucwgFDSR0MDI5ODMzMjk5OTACXzEECHVzZHRMZWZ0CAUNJHQwMjk4MzMyOTk5MAJfMgQDZmVlCAUNJHQwMjk4MzMyOTk5MAJfMwQQYWN0aXZpdGllc0Ftb3VudAgFDSR0MDI5ODMzMjk5OTACXzQECHRvdGFsUmVzCAUNJHQwMjk4MzMyOTk5MAJfNQMJAGcCAAAFCHVzZHRMZWZ0CQACAQkArAICAitUaGlzIHRyYWRlIGRvZXMgbm90IGNvdmVyIGRlbGl2ZXJ5IGNvc3Qgb2YgCQEKZml4ZWRQb2ludAIFA2ZlZQAGBAtzdGF0c1Jlc3VsdAkBBWFzSW50AQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCDnVwZGF0ZUFjY1N0YXRzCQDMCAIFBGFkZHIJAMwIAgkAawMFB3hwVHJhZGUFCHRvdGFsUmVzBQVNVUxUOAUDbmlsBQNuaWwJAJQKAgkAzQgCCQDNCAIJAM0IAgUOZmFjdG9yeUFjdGlvbnMJAQxJbnRlZ2VyRW50cnkCBQ9kZWxpdmVyeUZ1bmRLZXkJAGQCCQELdmFsdWVPckVsc2UCCQCfCAEFD2RlbGl2ZXJ5RnVuZEtleQAABQNmZWUJAQ5TY3JpcHRUcmFuc2ZlcgMFDHJlc3RDb250cmFjdAUQYWN0aXZpdGllc0Ftb3VudAULdXNkdEFzc2V0SWQJAQ5TY3JpcHRUcmFuc2ZlcgMFEmludmVzdEZ1bmRDb250cmFjdAUIdXNkdExlZnQFC3VzZHRBc3NldElkCQCUCgIFCHVzZHRMZWZ0BQtzdGF0c1Jlc3VsdAFpARpzZWxsUmVzb3VyY2VzV29ybGRSRUFET05MWQEGYW1vdW50BAh1c2R0TGVmdAgJARpzZWxsUmVzb3VyY2VzV29ybGRJbnRlcm5hbAEFBmFtb3VudAJfMgkAlAoCBQNuaWwFCHVzZHRMZWZ0AWkBGXNlbGxSZXNvdXJjZXNEdWNrRGVsaXZlcnkDB2Ftb3VudHMJbWluUHJpY2VzEGZhY3RvcnlDb250aW5lbnQEDHByb2xvZ1Jlc3VsdAkBBnByb2xvZwADCQAAAgUMcHJvbG9nUmVzdWx0BQxwcm9sb2dSZXN1bHQEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEUa2V5U3Rha2VkRHVja0J5T3duZXIBCQClCAEIBQFpBmNhbGxlcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECKnNlbGxSZXNvdXJjZXMgZG9lc24ndCByZXF1aXJlIGFueSBwYXltZW50cwQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAdyZXNMaXN0CQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzAgFfBA0kdDAzMTE0OTMxMjcwCQETc2VsbFJlc291cmNlc0NvbW1vbgQFB3Jlc0xpc3QFEGZhY3RvcnlDb250aW5lbnQFB2Ftb3VudHMFCW1pblByaWNlcwQOZmFjdG9yeUFjdGlvbnMIBQ0kdDAzMTE0OTMxMjcwAl8xBAZuZXdSZXMIBQ0kdDAzMTE0OTMxMjcwAl8yBAx1c2R0UmVjZWl2ZWQIBQ0kdDAzMTE0OTMxMjcwAl8zBAh0b3RhbFJlcwgFDSR0MDMxMTQ5MzEyNzACXzQEB25ld1BhY2sJALoJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIJALkJAgUGbmV3UmVzAgFfCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0CQDMCAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAUDbmlsAgE6BA5iYWNrcGFja1Jlc3VsdAkBCGFzU3RyaW5nAQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCDnVwZGF0ZUJhY2twYWNrCQDMCAIFC2R1Y2tBc3NldElkCQDMCAIFB25ld1BhY2sFA25pbAUDbmlsBAtzdGF0c1Jlc3VsdAkBBWFzSW50AQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCD3VwZGF0ZUR1Y2tTdGF0cwkAzAgCBQtkdWNrQXNzZXRJZAkAzAgCCQBrAwUHeHBUcmFkZQUIdG90YWxSZXMFBU1VTFQ4BQNuaWwFA25pbAQHZmVlUGFydAkAawMFDHVzZHRSZWNlaXZlZAUMREVMSVZFUllfRkVFBQVNVUxUNgQDZmVlCQCWAwEJAMwIAgUHZmVlUGFydAkAzAgCBRVNSU5fVVNEVF9GRUVfREVMSVZFUlkFA25pbAQQYWN0aXZpdGllc0Ftb3VudAkAaQIFDHVzZHRSZWNlaXZlZABkAwkAZwIFA2ZlZQkAZQIFDHVzZHRSZWNlaXZlZAUQYWN0aXZpdGllc0Ftb3VudAkAAgEJAKwCAgIrVGhpcyB0cmFkZSBkb2VzIG5vdCBjb3ZlciBkZWxpdmVyeSBjb3N0IG9mIAkBCmZpeGVkUG9pbnQCBQNmZWUABgQJZnVuZFRvdGFsCQELdmFsdWVPckVsc2UCCQCfCAEFD2RlbGl2ZXJ5RnVuZEtleQAACQCUCgIJAM0IAgkAzQgCCQDNCAIFDmZhY3RvcnlBY3Rpb25zCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIJAGUCCQBlAgUMdXNkdFJlY2VpdmVkBRBhY3Rpdml0aWVzQW1vdW50BQNmZWUFC3VzZHRBc3NldElkCQEMSW50ZWdlckVudHJ5AgUPZGVsaXZlcnlGdW5kS2V5CQBkAgUJZnVuZFRvdGFsBQNmZWUJAQ5TY3JpcHRUcmFuc2ZlcgMFDHJlc3RDb250cmFjdAUQYWN0aXZpdGllc0Ftb3VudAULdXNkdEFzc2V0SWQJAJUKAwUOYmFja3BhY2tSZXN1bHQFDHByb2xvZ1Jlc3VsdAULc3RhdHNSZXN1bHQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEZc2VsbFJlc291cmNlc0xhbmREZWxpdmVyeQQHYW1vdW50cwltaW5QcmljZXMLbGFuZEFzc2V0SWQQZmFjdG9yeUNvbnRpbmVudAQMcHJvbG9nUmVzdWx0CQEGcHJvbG9nAAMJAAACBQxwcm9sb2dSZXN1bHQFDHByb2xvZ1Jlc3VsdAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECKnNlbGxSZXNvdXJjZXMgZG9lc24ndCByZXF1aXJlIGFueSBwYXltZW50cwQEdXNlcggFAWkGY2FsbGVyBARhZGRyCQClCAEFBHVzZXIEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQULbGFuZEFzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBCQCaCAIFD3N0YWtpbmdDb250cmFjdAkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAkAAgEJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQEBW93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQULbGFuZEFzc2V0SWQJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwkBAiE9AgUFb3duZXIFBGFkZHIJAAIBCQCsAgIFCkxBTkRQUkVGSVgCDSBpcyBub3QgeW91cnMEAndoCQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIUZ2V0V2FyZWhvdXNlUkVBRE9OTFkJAMwIAgULbGFuZEFzc2V0SWQFA25pbAUDbmlsBAljdXJyZW50V2gJALwJAgUCd2gCAToEB3Jlc0xpc3QJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4UmVzAgFfBA0kdDAzMzE4NDMzMzA1CQETc2VsbFJlc291cmNlc0NvbW1vbgQFB3Jlc0xpc3QFEGZhY3RvcnlDb250aW5lbnQFB2Ftb3VudHMFCW1pblByaWNlcwQOZmFjdG9yeUFjdGlvbnMIBQ0kdDAzMzE4NDMzMzA1Al8xBAZuZXdSZXMIBQ0kdDAzMzE4NDMzMzA1Al8yBAx1c2R0UmVjZWl2ZWQIBQ0kdDAzMzE4NDMzMzA1Al8zBAh0b3RhbFJlcwgFDSR0MDMzMTg0MzMzMDUCXzQEBXdoU3RyCQC6CQIJAMwIAgkAkQMCBQljdXJyZW50V2gFC3doSWR4TGV2ZWxzCQDMCAIJALkJAgUGbmV3UmVzAgFfCQDMCAIJAJEDAgUJY3VycmVudFdoBQh3aElkeE1hdAkAzAgCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhQcm9kCQDMCAIJAJEDAgUJY3VycmVudFdoBQl3aElkeExPRlQFA25pbAIBOgQGd2hTYXZlCQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAINc2F2ZVdhcmVob3VzZQkAzAgCBQV3aFN0cgkAzAgCBQtsYW5kQXNzZXRJZAUDbmlsBQNuaWwEC3N0YXRzUmVzdWx0CQEFYXNJbnQBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIOdXBkYXRlQWNjU3RhdHMJAMwIAgUEYWRkcgkAzAgCCQBrAwUHeHBUcmFkZQUIdG90YWxSZXMFBU1VTFQ4BQNuaWwFA25pbAQHZmVlUGFydAkAawMFDHVzZHRSZWNlaXZlZAUMREVMSVZFUllfRkVFBQVNVUxUNgQDZmVlCQCWAwEJAMwIAgUHZmVlUGFydAkAzAgCBRVNSU5fVVNEVF9GRUVfREVMSVZFUlkFA25pbAQQYWN0aXZpdGllc0Ftb3VudAkAaQIFDHVzZHRSZWNlaXZlZABkAwkAZwIFA2ZlZQkAZQIFDHVzZHRSZWNlaXZlZAUQYWN0aXZpdGllc0Ftb3VudAkAAgEJAKwCAgIrVGhpcyB0cmFkZSBkb2VzIG5vdCBjb3ZlciBkZWxpdmVyeSBjb3N0IG9mIAkBCmZpeGVkUG9pbnQCBQNmZWUABgQJZnVuZFRvdGFsCQELdmFsdWVPckVsc2UCCQCfCAEFD2RlbGl2ZXJ5RnVuZEtleQAACQCUCgIJAM0IAgkAzQgCCQDNCAIFDmZhY3RvcnlBY3Rpb25zCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIJAGUCCQBlAgUMdXNkdFJlY2VpdmVkBRBhY3Rpdml0aWVzQW1vdW50BQNmZWUFC3VzZHRBc3NldElkCQEMSW50ZWdlckVudHJ5AgUPZGVsaXZlcnlGdW5kS2V5CQBkAgUJZnVuZFRvdGFsBQNmZWUJAQ5TY3JpcHRUcmFuc2ZlcgMFDHJlc3RDb250cmFjdAUQYWN0aXZpdGllc0Ftb3VudAULdXNkdEFzc2V0SWQJAJUKAwUGd2hTYXZlBQxwcm9sb2dSZXN1bHQFC3N0YXRzUmVzdWx0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBDGJ1eU1hdGVyaWFscwIHYW1vdW50cwltYXhQcmljZXMEDHByb2xvZ1Jlc3VsdAkBBnByb2xvZwADCQAAAgUMcHJvbG9nUmVzdWx0BQxwcm9sb2dSZXN1bHQEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEUa2V5U3Rha2VkRHVja0J5T3duZXIBCQClCAEIBQFpBmNhbGxlcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECImV4YWN0bHkgMSBwYXltZW50IG11c3QgYmUgYXR0YWNoZWQEA3BtdAkAkQMCCAUBaQhwYXltZW50cwAABANhbXQIBQNwbXQGYW1vdW50AwMJAQEhAQkBCWlzRGVmaW5lZAEIBQNwbXQHYXNzZXRJZAYJAQIhPQIJAQV2YWx1ZQEIBQNwbXQHYXNzZXRJZAULdXNkdEFzc2V0SWQJAAIBAhNVU0RUIHBheW1lbnRzIG9ubHkhBAtjdXJMb2NhdGlvbgkAtQkCCQELdmFsdWVPckVsc2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkBQ9ERUZBVUxUTE9DQVRJT04CAV8DCQECIT0CCQCRAwIFC2N1ckxvY2F0aW9uBQpsb2NJZHhUeXBlAgFGCQACAQkArAICAi1EdWNrIGxvY2F0aW9uIHR5cGUgc2hvdWxkIGJlIEZhY3RvcnksIGJ1dCBpcyAJAJEDAgULY3VyTG9jYXRpb24FCmxvY0lkeFR5cGUEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBCQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQHbWF0TGlzdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAIBXwQNJHQwMzUxMjkzNTI1MQkBEmJ1eU1hdGVyaWFsc0NvbW1vbgQFB21hdExpc3QJAJEDAgULY3VyTG9jYXRpb24FCGxvY0lkeElkBQdhbW91bnRzBQltYXhQcmljZXMEDmZhY3RvcnlBY3Rpb25zCAUNJHQwMzUxMjkzNTI1MQJfMQQGbmV3TWF0CAUNJHQwMzUxMjkzNTI1MQJfMgQJdXNkdFNwZW50CAUNJHQwMzUxMjkzNTI1MQJfMwQIdG90YWxNYXQIBQ0kdDAzNTEyOTM1MjUxAl80AwkAZgIFCXVzZHRTcGVudAUDYW10CQACAQkArAICCQCsAgIJAKwCAgIfSW5zdWZmaWNpZW50IHBheW1lbnQhIEF0dGFjaGVkPQkBCmZpeGVkUG9pbnQCBQNhbXQABgILLCByZXF1aXJlZD0JAQpmaXhlZFBvaW50AgUJdXNkdFNwZW50AAYEB25ld1BhY2sJALkJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzCQDMCAIJALkJAgUGbmV3TWF0AgFfCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAUDbmlsAgE6BA5iYWNrcGFja1Jlc3VsdAkBCGFzU3RyaW5nAQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCDnVwZGF0ZUJhY2twYWNrCQDMCAIFC2R1Y2tBc3NldElkCQDMCAIFB25ld1BhY2sFA25pbAUDbmlsBARyZXN0AwkAZgIJAGUCBQNhbXQFCXVzZHRTcGVudAAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgkAZQIFA2FtdAUJdXNkdFNwZW50BQt1c2R0QXNzZXRJZAUDbmlsBQNuaWwEEGFjdGl2aXRpZXNBbW91bnQJAGkCBQl1c2R0U3BlbnQAZAQLc3RhdHNSZXN1bHQJAQVhc0ludAEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag91cGRhdGVEdWNrU3RhdHMJAMwIAgULZHVja0Fzc2V0SWQJAMwIAgkAawMFB3hwVHJhZGUFCHRvdGFsTWF0BQVNVUxUOAUDbmlsBQNuaWwJAJQKAgkAzQgCCQDOCAIFDmZhY3RvcnlBY3Rpb25zBQRyZXN0CQEOU2NyaXB0VHJhbnNmZXIDBQxyZXN0Q29udHJhY3QFEGFjdGl2aXRpZXNBbW91bnQFC3VzZHRBc3NldElkCQCVCgMFDmJhY2twYWNrUmVzdWx0BQxwcm9sb2dSZXN1bHQFC3N0YXRzUmVzdWx0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBGGJ1eU1hdGVyaWFsc0R1Y2tEZWxpdmVyeQMHYW1vdW50cwltYXhQcmljZXMQZmFjdG9yeUNvbnRpbmVudAQMcHJvbG9nUmVzdWx0CQEGcHJvbG9nAAMJAAACBQxwcm9sb2dSZXN1bHQFDHByb2xvZ1Jlc3VsdAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIiZXhhY3RseSAxIHBheW1lbnQgbXVzdCBiZSBhdHRhY2hlZAQDcG10CQCRAwIIBQFpCHBheW1lbnRzAAAEA2FtdAgFA3BtdAZhbW91bnQDAwkBASEBCQEJaXNEZWZpbmVkAQgFA3BtdAdhc3NldElkBgkBAiE9AgkBBXZhbHVlAQgFA3BtdAdhc3NldElkBQt1c2R0QXNzZXRJZAkAAgECE1VTRFQgcGF5bWVudHMgb25seSEEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBCQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQHbWF0TGlzdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAIBXwQNJHQwMzY2OTUzNjgxMgkBEmJ1eU1hdGVyaWFsc0NvbW1vbgQFB21hdExpc3QFEGZhY3RvcnlDb250aW5lbnQFB2Ftb3VudHMFCW1heFByaWNlcwQOZmFjdG9yeUFjdGlvbnMIBQ0kdDAzNjY5NTM2ODEyAl8xBAZuZXdNYXQIBQ0kdDAzNjY5NTM2ODEyAl8yBAl1c2R0U3BlbnQIBQ0kdDAzNjY5NTM2ODEyAl8zBAh0b3RhbE1hdAgFDSR0MDM2Njk1MzY4MTICXzQEB25ld1BhY2sJALkJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzCQDMCAIJALkJAgUGbmV3TWF0AgFfCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAUDbmlsAgE6BA5iYWNrcGFja1Jlc3VsdAkBCGFzU3RyaW5nAQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCDnVwZGF0ZUJhY2twYWNrCQDMCAIFC2R1Y2tBc3NldElkCQDMCAIFB25ld1BhY2sFA25pbAUDbmlsBAtzdGF0c1Jlc3VsdAkBBWFzSW50AQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCD3VwZGF0ZUR1Y2tTdGF0cwkAzAgCBQtkdWNrQXNzZXRJZAkAzAgCCQBrAwUHeHBUcmFkZQUIdG90YWxNYXQFBU1VTFQ4BQNuaWwFA25pbAQHZmVlUGFydAkAawMFCXVzZHRTcGVudAUMREVMSVZFUllfRkVFBQVNVUxUNgQDZmVlCQCWAwEJAMwIAgUHZmVlUGFydAkAzAgCBRVNSU5fVVNEVF9GRUVfREVMSVZFUlkFA25pbAQQdXNkdFNwZW50V2l0aEZlZQkAZAIFCXVzZHRTcGVudAUDZmVlAwkAZgIFEHVzZHRTcGVudFdpdGhGZWUFA2FtdAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICH0luc3VmZmljaWVudCBwYXltZW50ISBBdHRhY2hlZD0JAQpmaXhlZFBvaW50AgUDYW10AAYCCywgcmVxdWlyZWQ9CQEKZml4ZWRQb2ludAIFCXVzZHRTcGVudAAGAgErCQEKZml4ZWRQb2ludAIFA2ZlZQAGAg4oZGVsaXZlcnkgZmVlKQQEcmVzdAMJAGYCCQBlAgUDYW10BRB1c2R0U3BlbnRXaXRoRmVlAAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyCQBlAgUDYW10BRB1c2R0U3BlbnRXaXRoRmVlBQt1c2R0QXNzZXRJZAUDbmlsBQNuaWwEEGFjdGl2aXRpZXNBbW91bnQJAGkCBQl1c2R0U3BlbnQAZAQJZnVuZFRvdGFsCQELdmFsdWVPckVsc2UCCQCfCAEFD2RlbGl2ZXJ5RnVuZEtleQAACQCUCgIJAM0IAgkAzQgCCQDOCAIFDmZhY3RvcnlBY3Rpb25zBQRyZXN0CQEOU2NyaXB0VHJhbnNmZXIDBQxyZXN0Q29udHJhY3QFEGFjdGl2aXRpZXNBbW91bnQFC3VzZHRBc3NldElkCQEMSW50ZWdlckVudHJ5AgUPZGVsaXZlcnlGdW5kS2V5CQBkAgUJZnVuZFRvdGFsBQNmZWUJAJUKAwUOYmFja3BhY2tSZXN1bHQFDHByb2xvZ1Jlc3VsdAULc3RhdHNSZXN1bHQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEYYnV5TWF0ZXJpYWxzTGFuZERlbGl2ZXJ5BAdhbW91bnRzCW1heFByaWNlcwtsYW5kQXNzZXRJZBBmYWN0b3J5Q29udGluZW50BAxwcm9sb2dSZXN1bHQJAQZwcm9sb2cAAwkAAAIFDHByb2xvZ1Jlc3VsdAUMcHJvbG9nUmVzdWx0AwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIiZXhhY3RseSAxIHBheW1lbnQgbXVzdCBiZSBhdHRhY2hlZAQDcG10CQCRAwIIBQFpCHBheW1lbnRzAAAEA2FtdAgFA3BtdAZhbW91bnQDAwkBASEBCQEJaXNEZWZpbmVkAQgFA3BtdAdhc3NldElkBgkBAiE9AgkBBXZhbHVlAQgFA3BtdAdhc3NldElkBQt1c2R0QXNzZXRJZAkAAgECE1VTRFQgcGF5bWVudHMgb25seSEEBHVzZXIIBQFpBmNhbGxlcgQEYWRkcgkApQgBBQR1c2VyBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFC2xhbmRBc3NldElkAwkBASEBCQEJaXNEZWZpbmVkAQkAmggCBQ9zdGFraW5nQ29udHJhY3QJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQULbGFuZEFzc2V0SWQJAAIBCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkBAVvd25lcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFC2xhbmRBc3NldElkCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDCBpcyBvcnBoYW5lZAMJAQIhPQIFBW93bmVyBQRhZGRyCQACAQkArAICBQpMQU5EUFJFRklYAg0gaXMgbm90IHlvdXJzBAJ3aAkBCGFzU3RyaW5nAQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCFGdldFdhcmVob3VzZVJFQURPTkxZCQDMCAIFC2xhbmRBc3NldElkBQNuaWwFA25pbAQJY3VycmVudFdoCQC8CQIFAndoAgE6BAdtYXRMaXN0CQC1CQIJAJEDAgUJY3VycmVudFdoBQh3aElkeE1hdAIBXwQNJHQwMzg5NzczOTA5NAkBEmJ1eU1hdGVyaWFsc0NvbW1vbgQFB21hdExpc3QFEGZhY3RvcnlDb250aW5lbnQFB2Ftb3VudHMFCW1heFByaWNlcwQOZmFjdG9yeUFjdGlvbnMIBQ0kdDAzODk3NzM5MDk0Al8xBAZuZXdNYXQIBQ0kdDAzODk3NzM5MDk0Al8yBAl1c2R0U3BlbnQIBQ0kdDAzODk3NzM5MDk0Al8zBAh0b3RhbE1hdAgFDSR0MDM4OTc3MzkwOTQCXzQEBXdoU3RyCQC6CQIJAMwIAgkAkQMCBQljdXJyZW50V2gFC3doSWR4TGV2ZWxzCQDMCAIJAJEDAgUJY3VycmVudFdoBQh3aElkeFJlcwkAzAgCCQC5CQIFBm5ld01hdAIBXwkAzAgCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhQcm9kCQDMCAIJAJEDAgUJY3VycmVudFdoBQl3aElkeExPRlQFA25pbAIBOgQGd2hTYXZlCQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAINc2F2ZVdhcmVob3VzZQkAzAgCBQV3aFN0cgkAzAgCBQtsYW5kQXNzZXRJZAUDbmlsBQNuaWwEC3N0YXRzUmVzdWx0CQEFYXNJbnQBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIOdXBkYXRlQWNjU3RhdHMJAMwIAgUEYWRkcgkAzAgCCQBrAwUHeHBUcmFkZQUIdG90YWxNYXQFBU1VTFQ4BQNuaWwFA25pbAQHZmVlUGFydAkAawMFCXVzZHRTcGVudAUMREVMSVZFUllfRkVFBQVNVUxUNgQDZmVlCQCWAwEJAMwIAgUHZmVlUGFydAkAzAgCBRVNSU5fVVNEVF9GRUVfREVMSVZFUlkFA25pbAQQdXNkdFNwZW50V2l0aEZlZQkAZAIFCXVzZHRTcGVudAUDZmVlAwkAZgIFEHVzZHRTcGVudFdpdGhGZWUFA2FtdAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICH0luc3VmZmljaWVudCBwYXltZW50ISBBdHRhY2hlZD0JAQpmaXhlZFBvaW50AgUDYW10AAYCCywgcmVxdWlyZWQ9CQEKZml4ZWRQb2ludAIFCXVzZHRTcGVudAAGAgErCQEKZml4ZWRQb2ludAIFA2ZlZQAGAg4oZGVsaXZlcnkgZmVlKQQEcmVzdAMJAGYCCQBlAgUDYW10BRB1c2R0U3BlbnRXaXRoRmVlAAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyCQBlAgUDYW10BRB1c2R0U3BlbnRXaXRoRmVlBQt1c2R0QXNzZXRJZAUDbmlsBQNuaWwEEGFjdGl2aXRpZXNBbW91bnQJAGkCBQl1c2R0U3BlbnQAZAQJZnVuZFRvdGFsCQELdmFsdWVPckVsc2UCCQCfCAEFD2RlbGl2ZXJ5RnVuZEtleQAACQCUCgIJAM0IAgkAzQgCCQDOCAIFDmZhY3RvcnlBY3Rpb25zBQRyZXN0CQEOU2NyaXB0VHJhbnNmZXIDBQxyZXN0Q29udHJhY3QFEGFjdGl2aXRpZXNBbW91bnQFC3VzZHRBc3NldElkCQEMSW50ZWdlckVudHJ5AgUPZGVsaXZlcnlGdW5kS2V5CQBkAgUJZnVuZFRvdGFsBQNmZWUJAJUKAwUGd2hTYXZlBQxwcm9sb2dSZXN1bHQFC3N0YXRzUmVzdWx0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBEWV4Y2hhbmdlUmVzb3VyY2VzAQdhbW91bnRzBAxwcm9sb2dSZXN1bHQJAQZwcm9sb2cAAwkAAAIFDHByb2xvZ1Jlc3VsdAUMcHJvbG9nUmVzdWx0BAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQkApQgBCAUBaQZjYWxsZXICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAiJleGFjdGx5IDEgcGF5bWVudCBtdXN0IGJlIGF0dGFjaGVkBANwbXQJAJEDAggFAWkIcGF5bWVudHMAAAQDYW10CAUDcG10BmFtb3VudAMDCQEBIQEJAQlpc0RlZmluZWQBCAUDcG10B2Fzc2V0SWQGCQECIT0CCQEFdmFsdWUBCAUDcG10B2Fzc2V0SWQFC3VzZHRBc3NldElkCQACAQITVVNEVCBwYXltZW50cyBvbmx5IQQLY3VyTG9jYXRpb24JALUJAgkBC3ZhbHVlT3JFbHNlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAUPREVGQVVMVExPQ0FUSU9OAgFfAwkBAiE9AgkAkQMCBQtjdXJMb2NhdGlvbgUKbG9jSWR4VHlwZQIBRgkAAgEJAKwCAgItRHVjayBsb2NhdGlvbiB0eXBlIHNob3VsZCBiZSBGYWN0b3J5LCBidXQgaXMgCQCRAwIFC2N1ckxvY2F0aW9uBQpsb2NJZHhUeXBlBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEB3Jlc0xpc3QJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMCAV8EB21hdExpc3QJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQCAV8EDSR0MDQxMTcyNDEyNzgJARdleGNoYW5nZVJlc291cmNlc0NvbW1vbgMFB3Jlc0xpc3QFB21hdExpc3QFB2Ftb3VudHMEBm5ld1JlcwgFDSR0MDQxMTcyNDEyNzgCXzEEBm5ld01hdAgFDSR0MDQxMTcyNDEyNzgCXzIECXVzZHRTcGVudAgFDSR0MDQxMTcyNDEyNzgCXzMEFHRvdGFsQW1vdW50Q29udmVydGVkCAUNJHQwNDExNzI0MTI3OAJfNAMJAGYCBQl1c2R0U3BlbnQFA2FtdAkAAgEJAKwCAgkArAICCQCsAgICH0luc3VmZmljaWVudCBwYXltZW50ISBBdHRhY2hlZD0JAQpmaXhlZFBvaW50AgUDYW10AAYCCywgcmVxdWlyZWQ9CQEKZml4ZWRQb2ludAIFCXVzZHRTcGVudAAGBAduZXdQYWNrCQC5CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCQC5CQIFBm5ld1JlcwIBXwkAzAgCCQC5CQIFBm5ld01hdAIBXwkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QFA25pbAIBOgQOYmFja3BhY2tSZXN1bHQJAQhhc1N0cmluZwEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag51cGRhdGVCYWNrcGFjawkAzAgCBQtkdWNrQXNzZXRJZAkAzAgCBQduZXdQYWNrBQNuaWwFA25pbAQEcmVzdAMJAGYCCQBlAgUDYW10BQl1c2R0U3BlbnQAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIJAGUCBQNhbXQFCXVzZHRTcGVudAULdXNkdEFzc2V0SWQFA25pbAUDbmlsBBBhY3Rpdml0aWVzQW1vdW50CQBpAgUJdXNkdFNwZW50AGQEC3N0YXRzUmVzdWx0CQEFYXNJbnQBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIPdXBkYXRlRHVja1N0YXRzCQDMCAIFC2R1Y2tBc3NldElkCQDMCAIJAGsDBQd4cFRyYWRlBRR0b3RhbEFtb3VudENvbnZlcnRlZAUFTVVMVDgFA25pbAUDbmlsCQCUCgIJAM0IAgUEcmVzdAkBDlNjcmlwdFRyYW5zZmVyAwUMcmVzdENvbnRyYWN0BRBhY3Rpdml0aWVzQW1vdW50BQt1c2R0QXNzZXRJZAkAlQoDBQ5iYWNrcGFja1Jlc3VsdAUMcHJvbG9nUmVzdWx0BQtzdGF0c1Jlc3VsdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAR1leGNoYW5nZVJlc291cmNlc0R1Y2tEZWxpdmVyeQEHYW1vdW50cwQMcHJvbG9nUmVzdWx0CQEGcHJvbG9nAAMJAAACBQxwcm9sb2dSZXN1bHQFDHByb2xvZ1Jlc3VsdAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIiZXhhY3RseSAxIHBheW1lbnQgbXVzdCBiZSBhdHRhY2hlZAQDcG10CQCRAwIIBQFpCHBheW1lbnRzAAAEA2FtdAgFA3BtdAZhbW91bnQDAwkBASEBCQEJaXNEZWZpbmVkAQgFA3BtdAdhc3NldElkBgkBAiE9AgkBBXZhbHVlAQgFA3BtdAdhc3NldElkBQt1c2R0QXNzZXRJZAkAAgECE1VTRFQgcGF5bWVudHMgb25seSEEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBCQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQHcmVzTGlzdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwIBXwQHbWF0TGlzdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAIBXwQNJHQwNDI3MTY0MjgyMgkBF2V4Y2hhbmdlUmVzb3VyY2VzQ29tbW9uAwUHcmVzTGlzdAUHbWF0TGlzdAUHYW1vdW50cwQGbmV3UmVzCAUNJHQwNDI3MTY0MjgyMgJfMQQGbmV3TWF0CAUNJHQwNDI3MTY0MjgyMgJfMgQJdXNkdFNwZW50CAUNJHQwNDI3MTY0MjgyMgJfMwQUdG90YWxBbW91bnRDb252ZXJ0ZWQIBQ0kdDA0MjcxNjQyODIyAl80BAdmZWVQYXJ0CQBrAwUJdXNkdFNwZW50BQ5ERUxJVkVSWV9GRUUxNQUFTVVMVDYEA2ZlZQkAlgMBCQDMCAIFB2ZlZVBhcnQJAMwIAgUXTUlOX1VTRFRfRkVFX0RFTElWRVJZMTUFA25pbAQQdXNkdFNwZW50V2l0aEZlZQkAZAIFCXVzZHRTcGVudAUDZmVlAwkAZgIFEHVzZHRTcGVudFdpdGhGZWUFA2FtdAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICH0luc3VmZmljaWVudCBwYXltZW50ISBBdHRhY2hlZD0JAQpmaXhlZFBvaW50AgUDYW10AAYCCywgcmVxdWlyZWQ9CQEKZml4ZWRQb2ludAIFCXVzZHRTcGVudAAGAgErCQEKZml4ZWRQb2ludAIFA2ZlZQAGAg4oZGVsaXZlcnkgZmVlKQQHbmV3UGFjawkAuQkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAuQkCBQZuZXdSZXMCAV8JAMwIAgkAuQkCBQZuZXdNYXQCAV8JAMwIAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kBQNuaWwCAToEDmJhY2twYWNrUmVzdWx0CQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIOdXBkYXRlQmFja3BhY2sJAMwIAgULZHVja0Fzc2V0SWQJAMwIAgUHbmV3UGFjawUDbmlsBQNuaWwEBHJlc3QDCQBmAgkAZQIFA2FtdAUQdXNkdFNwZW50V2l0aEZlZQAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgkAZQIFA2FtdAUQdXNkdFNwZW50V2l0aEZlZQULdXNkdEFzc2V0SWQFA25pbAUDbmlsBBBhY3Rpdml0aWVzQW1vdW50CQBpAgUJdXNkdFNwZW50AGQEC3N0YXRzUmVzdWx0CQEFYXNJbnQBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIPdXBkYXRlRHVja1N0YXRzCQDMCAIFC2R1Y2tBc3NldElkCQDMCAIJAGsDBQd4cFRyYWRlBRR0b3RhbEFtb3VudENvbnZlcnRlZAUFTVVMVDgFA25pbAUDbmlsBAlmdW5kVG90YWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUPZGVsaXZlcnlGdW5kS2V5AAAJAJQKAgkAzQgCCQDNCAIFBHJlc3QJAQ5TY3JpcHRUcmFuc2ZlcgMFDHJlc3RDb250cmFjdAUQYWN0aXZpdGllc0Ftb3VudAULdXNkdEFzc2V0SWQJAQxJbnRlZ2VyRW50cnkCBQ9kZWxpdmVyeUZ1bmRLZXkJAGQCBQlmdW5kVG90YWwFA2ZlZQkAlQoDBQ5iYWNrcGFja1Jlc3VsdAUMcHJvbG9nUmVzdWx0BQtzdGF0c1Jlc3VsdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAR1leGNoYW5nZVJlc291cmNlc0xhbmREZWxpdmVyeQIHYW1vdW50cwtsYW5kQXNzZXRJZAQMcHJvbG9nUmVzdWx0CQEGcHJvbG9nAAMJAAACBQxwcm9sb2dSZXN1bHQFDHByb2xvZ1Jlc3VsdAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECImV4YWN0bHkgMSBwYXltZW50IG11c3QgYmUgYXR0YWNoZWQEA3BtdAkAkQMCCAUBaQhwYXltZW50cwAABANhbXQIBQNwbXQGYW1vdW50AwMJAQEhAQkBCWlzRGVmaW5lZAEIBQNwbXQHYXNzZXRJZAYJAQIhPQIJAQV2YWx1ZQEIBQNwbXQHYXNzZXRJZAULdXNkdEFzc2V0SWQJAAIBAhNVU0RUIHBheW1lbnRzIG9ubHkhBAR1c2VyCAUBaQZjYWxsZXIEBGFkZHIJAKUIAQUEdXNlcgQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQtsYW5kQXNzZXRJZAMJAQEhAQkBCWlzRGVmaW5lZAEJAJoIAgUPc3Rha2luZ0NvbnRyYWN0CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkCQACAQkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAQFb3duZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQtsYW5kQXNzZXRJZAkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDCQECIT0CBQVvd25lcgUEYWRkcgkAAgEJAKwCAgUKTEFORFBSRUZJWAINIGlzIG5vdCB5b3VycwQCd2gJAQhhc1N0cmluZwEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0AhRnZXRXYXJlaG91c2VSRUFET05MWQkAzAgCBQtsYW5kQXNzZXRJZAUDbmlsBQNuaWwECWN1cnJlbnRXaAkAvAkCBQJ3aAIBOgQHcmVzTGlzdAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhSZXMCAV8EB21hdExpc3QJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4TWF0AgFfBA0kdDA0NTAwNzQ1MTEzCQEXZXhjaGFuZ2VSZXNvdXJjZXNDb21tb24DBQdyZXNMaXN0BQdtYXRMaXN0BQdhbW91bnRzBAZuZXdSZXMIBQ0kdDA0NTAwNzQ1MTEzAl8xBAZuZXdNYXQIBQ0kdDA0NTAwNzQ1MTEzAl8yBAl1c2R0U3BlbnQIBQ0kdDA0NTAwNzQ1MTEzAl8zBBR0b3RhbEFtb3VudENvbnZlcnRlZAgFDSR0MDQ1MDA3NDUxMTMCXzQEBXdoU3RyCQC6CQIJAMwIAgkAkQMCBQljdXJyZW50V2gFC3doSWR4TGV2ZWxzCQDMCAIJALkJAgUGbmV3UmVzAgFfCQDMCAIJALkJAgUGbmV3TWF0AgFfCQDMCAIJAJEDAgUJY3VycmVudFdoBQl3aElkeFByb2QJAMwIAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4TE9GVAUDbmlsAgE6BAZ3aFNhdmUJAQhhc1N0cmluZwEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag1zYXZlV2FyZWhvdXNlCQDMCAIFBXdoU3RyCQDMCAIFC2xhbmRBc3NldElkBQNuaWwFA25pbAQLc3RhdHNSZXN1bHQJAQVhc0ludAEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag51cGRhdGVBY2NTdGF0cwkAzAgCBQRhZGRyCQDMCAIJAGsDBQd4cFRyYWRlBRR0b3RhbEFtb3VudENvbnZlcnRlZAUFTVVMVDgFA25pbAUDbmlsBAdmZWVQYXJ0CQBrAwUJdXNkdFNwZW50BQ5ERUxJVkVSWV9GRUUxNQUFTVVMVDYEA2ZlZQkAlgMBCQDMCAIFB2ZlZVBhcnQJAMwIAgUXTUlOX1VTRFRfRkVFX0RFTElWRVJZMTUFA25pbAQQdXNkdFNwZW50V2l0aEZlZQkAZAIFCXVzZHRTcGVudAUDZmVlAwkAZgIFEHVzZHRTcGVudFdpdGhGZWUFA2FtdAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICH0luc3VmZmljaWVudCBwYXltZW50ISBBdHRhY2hlZD0JAQpmaXhlZFBvaW50AgUDYW10AAYCCywgcmVxdWlyZWQ9CQEKZml4ZWRQb2ludAIFCXVzZHRTcGVudAAGAgErCQEKZml4ZWRQb2ludAIFA2ZlZQAGAg4oZGVsaXZlcnkgZmVlKQQEcmVzdAMJAGYCCQBlAgUDYW10BRB1c2R0U3BlbnRXaXRoRmVlAAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyCQBlAgUDYW10BRB1c2R0U3BlbnRXaXRoRmVlBQt1c2R0QXNzZXRJZAUDbmlsBQNuaWwEEGFjdGl2aXRpZXNBbW91bnQJAGkCBQl1c2R0U3BlbnQAZAQJZnVuZFRvdGFsCQELdmFsdWVPckVsc2UCCQCfCAEFD2RlbGl2ZXJ5RnVuZEtleQAACQCUCgIJAM0IAgkAzQgCBQRyZXN0CQEOU2NyaXB0VHJhbnNmZXIDBQxyZXN0Q29udHJhY3QFEGFjdGl2aXRpZXNBbW91bnQFC3VzZHRBc3NldElkCQEMSW50ZWdlckVudHJ5AgUPZGVsaXZlcnlGdW5kS2V5CQBkAgUJZnVuZFRvdGFsBQNmZWUJAJUKAwUGd2hTYXZlBQxwcm9sb2dSZXN1bHQFC3N0YXRzUmVzdWx0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBCmNyYWZ0R29vZHMCCnByb2R1Y3RJZHgIcXVhbnRpdHkEDHByb2xvZ1Jlc3VsdAkBBnByb2xvZwADCQAAAgUMcHJvbG9nUmVzdWx0BQxwcm9sb2dSZXN1bHQDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAiJleGFjdGx5IDEgcGF5bWVudCBtdXN0IGJlIGF0dGFjaGVkBANwbXQJAJEDAggFAWkIcGF5bWVudHMAAAQDYW10CAUDcG10BmFtb3VudAMDCQEBIQEJAQlpc0RlZmluZWQBCAUDcG10B2Fzc2V0SWQGCQECIT0CCQEFdmFsdWUBCAUDcG10B2Fzc2V0SWQFC3VzZHRBc3NldElkCQACAQITVVNEVCBwYXltZW50cyBvbmx5IQMJAQIhPQIFA2FtdAUFTVVMVDYJAAIBCQCsAgIJAKwCAgIIZXhhY3RseSAJAQpmaXhlZFBvaW50AgUPQ1JBRlRfVVNEVF9DT1NUAAYCISBVU0RUIG11c3QgYmUgYXR0YWNoZWQgYXMgcGF5bWVudAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkBAtjdXJMb2NhdGlvbgkAtQkCCQELdmFsdWVPckVsc2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkBQ9ERUZBVUxUTE9DQVRJT04CAV8DCQECIT0CCQCRAwIFC2N1ckxvY2F0aW9uBQpsb2NJZHhUeXBlAgFNCQACAQkArAICAjFEdWNrIGxvY2F0aW9uIHR5cGUgc2hvdWxkIGJlIE1hbnVmYWN0b3J5LCBidXQgaXMgCQCRAwIFC2N1ckxvY2F0aW9uBQpsb2NJZHhUeXBlBARjb250CQCRAwIFC2N1ckxvY2F0aW9uBQ9sb2NJZHhDb250aW5lbnQEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBCQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQHbWF0TGlzdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAIBXwQIcHJvZExpc3QDCQAAAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kAgAFA25pbAkAvAkCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QCAV8EDSR0MDQ3NDM4NDc1MzUJARBjcmFmdEdvb2RzQ29tbW9uBQUHbWF0TGlzdAUIcHJvZExpc3QFBGNvbnQFCnByb2R1Y3RJZHgFCHF1YW50aXR5BAZuZXdNYXQIBQ0kdDA0NzQzODQ3NTM1Al8xBAduZXdQcm9kCAUNJHQwNDc0Mzg0NzUzNQJfMgQIbWF0U3BlbnQIBQ0kdDA0NzQzODQ3NTM1Al8zBAduZXdQYWNrCQC5CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwkAzAgCCQC5CQIFBm5ld01hdAIBXwkAzAgCCQC6CQIFB25ld1Byb2QCAV8FA25pbAIBOgQGcmVzdWx0CQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIOdXBkYXRlQmFja3BhY2sJAMwIAgULZHVja0Fzc2V0SWQJAMwIAgUHbmV3UGFjawUDbmlsBQNuaWwEC3N0YXRzUmVzdWx0CQEFYXNJbnQBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIPdXBkYXRlRHVja1N0YXRzCQDMCAIFC2R1Y2tBc3NldElkCQDMCAIJAGsDBQd4cENyYWZ0BQhtYXRTcGVudAUFTVVMVDgFA25pbAUDbmlsCQCUCgIFA25pbAkAlQoDBQZyZXN1bHQFDHByb2xvZ1Jlc3VsdAULc3RhdHNSZXN1bHQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEWY3JhZnRHb29kc0R1Y2tEZWxpdmVyeQMKcHJvZHVjdElkeAhxdWFudGl0eRRtYW51ZmFjdG9yeUNvbnRpbmVudAQMcHJvbG9nUmVzdWx0CQEGcHJvbG9nAAMJAAACBQxwcm9sb2dSZXN1bHQFDHByb2xvZ1Jlc3VsdAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIiZXhhY3RseSAxIHBheW1lbnQgbXVzdCBiZSBhdHRhY2hlZAQDcG10CQCRAwIIBQFpCHBheW1lbnRzAAAEA2FtdAgFA3BtdAZhbW91bnQDAwkBASEBCQEJaXNEZWZpbmVkAQgFA3BtdAdhc3NldElkBgkBAiE9AgkBBXZhbHVlAQgFA3BtdAdhc3NldElkBQt1c2R0QXNzZXRJZAkAAgECE1VTRFQgcGF5bWVudHMgb25seSEEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBCQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQHbWF0TGlzdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAIBXwQIcHJvZExpc3QDCQAAAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kAgAFA25pbAkAvAkCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QCAV8EDSR0MDQ4NjgzNDg3OTYJARBjcmFmdEdvb2RzQ29tbW9uBQUHbWF0TGlzdAUIcHJvZExpc3QFFG1hbnVmYWN0b3J5Q29udGluZW50BQpwcm9kdWN0SWR4BQhxdWFudGl0eQQGbmV3TWF0CAUNJHQwNDg2ODM0ODc5NgJfMQQHbmV3UHJvZAgFDSR0MDQ4NjgzNDg3OTYCXzIECG1hdFNwZW50CAUNJHQwNDg2ODM0ODc5NgJfMwQHbmV3UGFjawkAuQkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMJAMwIAgkAuQkCBQZuZXdNYXQCAV8JAMwIAgkAugkCBQduZXdQcm9kAgFfBQNuaWwCAToEDmJhY2twYWNrUmVzdWx0CQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIOdXBkYXRlQmFja3BhY2sJAMwIAgULZHVja0Fzc2V0SWQJAMwIAgUHbmV3UGFjawUDbmlsBQNuaWwEC3N0YXRzUmVzdWx0CQEFYXNJbnQBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIPdXBkYXRlRHVja1N0YXRzCQDMCAIFC2R1Y2tBc3NldElkCQDMCAIJAGsDBQd4cENyYWZ0BQhtYXRTcGVudAUFTVVMVDgFA25pbAUDbmlsBAdmZWVQYXJ0CQBrAwUIcXVhbnRpdHkFFU1JTl9VU0RUX0ZFRV9ERUxJVkVSWQUUQ1JBRlRfREVMSVZFUllfQ09FRkYEA2ZlZQkAlgMBCQDMCAIFB2ZlZVBhcnQJAMwIAgUVTUlOX1VTRFRfRkVFX0RFTElWRVJZBQNuaWwEEHVzZHRTcGVudFdpdGhGZWUJAGQCBQ9DUkFGVF9VU0RUX0NPU1QFA2ZlZQMJAGYCBRB1c2R0U3BlbnRXaXRoRmVlBQNhbXQJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAh9JbnN1ZmZpY2llbnQgcGF5bWVudCEgQXR0YWNoZWQ9CQEKZml4ZWRQb2ludAIFA2FtdAAGAgssIHJlcXVpcmVkPQkBCmZpeGVkUG9pbnQCBQ9DUkFGVF9VU0RUX0NPU1QABgIBKwkBCmZpeGVkUG9pbnQCBQNmZWUABgIOKGRlbGl2ZXJ5IGZlZSkEBHJlc3QDCQBmAgkAZQIFA2FtdAUQdXNkdFNwZW50V2l0aEZlZQAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgkAZQIFA2FtdAUQdXNkdFNwZW50V2l0aEZlZQULdXNkdEFzc2V0SWQFA25pbAUDbmlsBAlmdW5kVG90YWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUPZGVsaXZlcnlGdW5kS2V5AAAJAJQKAgkAzQgCBQRyZXN0CQEMSW50ZWdlckVudHJ5AgUPZGVsaXZlcnlGdW5kS2V5CQBkAgUJZnVuZFRvdGFsBQNmZWUJAJUKAwUOYmFja3BhY2tSZXN1bHQFDHByb2xvZ1Jlc3VsdAULc3RhdHNSZXN1bHQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEWY3JhZnRHb29kc0xhbmREZWxpdmVyeQQKcHJvZHVjdElkeAhxdWFudGl0eQtsYW5kQXNzZXRJZBRtYW51ZmFjdG9yeUNvbnRpbmVudAQMcHJvbG9nUmVzdWx0CQEGcHJvbG9nAAMJAAACBQxwcm9sb2dSZXN1bHQFDHByb2xvZ1Jlc3VsdAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECImV4YWN0bHkgMSBwYXltZW50IG11c3QgYmUgYXR0YWNoZWQEA3BtdAkAkQMCCAUBaQhwYXltZW50cwAABANhbXQIBQNwbXQGYW1vdW50AwMJAQEhAQkBCWlzRGVmaW5lZAEIBQNwbXQHYXNzZXRJZAYJAQIhPQIJAQV2YWx1ZQEIBQNwbXQHYXNzZXRJZAULdXNkdEFzc2V0SWQJAAIBAhNVU0RUIHBheW1lbnRzIG9ubHkhBAR1c2VyCAUBaQZjYWxsZXIEBGFkZHIJAKUIAQUEdXNlcgQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQtsYW5kQXNzZXRJZAMJAQEhAQkBCWlzRGVmaW5lZAEJAJoIAgUPc3Rha2luZ0NvbnRyYWN0CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkCQACAQkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAQFb3duZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQtsYW5kQXNzZXRJZAkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDCQECIT0CBQVvd25lcgUEYWRkcgkAAgEJAKwCAgUKTEFORFBSRUZJWAINIGlzIG5vdCB5b3VycwQCd2gJAQhhc1N0cmluZwEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0AhRnZXRXYXJlaG91c2VSRUFET05MWQkAzAgCBQtsYW5kQXNzZXRJZAUDbmlsBQNuaWwECWN1cnJlbnRXaAkAvAkCBQJ3aAIBOgQHbWF0TGlzdAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhNYXQCAV8ECHByb2RMaXN0AwkAAAIJAJEDAgUJY3VycmVudFdoBQl3aElkeFByb2QCAAUDbmlsCQC8CQIJAJEDAgUJY3VycmVudFdoBQl3aElkeFByb2QCAV8EDSR0MDUwOTYyNTEwNzUJARBjcmFmdEdvb2RzQ29tbW9uBQUHbWF0TGlzdAUIcHJvZExpc3QFFG1hbnVmYWN0b3J5Q29udGluZW50BQpwcm9kdWN0SWR4BQhxdWFudGl0eQQGbmV3TWF0CAUNJHQwNTA5NjI1MTA3NQJfMQQHbmV3UHJvZAgFDSR0MDUwOTYyNTEwNzUCXzIECG1hdFNwZW50CAUNJHQwNTA5NjI1MTA3NQJfMwQFd2hTdHIJALoJAgkAzAgCCQCRAwIFCWN1cnJlbnRXaAULd2hJZHhMZXZlbHMJAMwIAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4UmVzCQDMCAIJALkJAgUGbmV3TWF0AgFfCQDMCAIJALoJAgUHbmV3UHJvZAIBXwkAzAgCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhMT0ZUBQNuaWwCAToEBndoU2F2ZQkBCGFzU3RyaW5nAQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCDXNhdmVXYXJlaG91c2UJAMwIAgUFd2hTdHIJAMwIAgULbGFuZEFzc2V0SWQFA25pbAUDbmlsBAtzdGF0c1Jlc3VsdAkBBWFzSW50AQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCDnVwZGF0ZUFjY1N0YXRzCQDMCAIFBGFkZHIJAMwIAgkAawMFB3hwQ3JhZnQFCG1hdFNwZW50BQVNVUxUOAUDbmlsBQNuaWwEB2ZlZVBhcnQJAGsDBQhxdWFudGl0eQUVTUlOX1VTRFRfRkVFX0RFTElWRVJZBRRDUkFGVF9ERUxJVkVSWV9DT0VGRgQDZmVlCQCWAwEJAMwIAgUHZmVlUGFydAkAzAgCBRVNSU5fVVNEVF9GRUVfREVMSVZFUlkFA25pbAQQdXNkdFNwZW50V2l0aEZlZQkAZAIFD0NSQUZUX1VTRFRfQ09TVAUDZmVlAwkAZgIFEHVzZHRTcGVudFdpdGhGZWUFA2FtdAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICH0luc3VmZmljaWVudCBwYXltZW50ISBBdHRhY2hlZD0JAQpmaXhlZFBvaW50AgUDYW10AAYCCywgcmVxdWlyZWQ9CQEKZml4ZWRQb2ludAIFD0NSQUZUX1VTRFRfQ09TVAAGAgErCQEKZml4ZWRQb2ludAIFA2ZlZQAGAg4oZGVsaXZlcnkgZmVlKQQEcmVzdAMJAGYCCQBlAgUDYW10BRB1c2R0U3BlbnRXaXRoRmVlAAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyCQBlAgUDYW10BRB1c2R0U3BlbnRXaXRoRmVlBQt1c2R0QXNzZXRJZAUDbmlsBQNuaWwECWZ1bmRUb3RhbAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQ9kZWxpdmVyeUZ1bmRLZXkAAAkAlAoCCQDNCAIFBHJlc3QJAQxJbnRlZ2VyRW50cnkCBQ9kZWxpdmVyeUZ1bmRLZXkJAGQCBQlmdW5kVG90YWwFA2ZlZQkAlQoDBQZ3aFNhdmUFDHByb2xvZ1Jlc3VsdAULc3RhdHNSZXN1bHQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQERc2V0V2FyZWhvdXNlT3JkZXICC25ld09yZGVyU3RyC2xhbmRBc3NldElkBAR1c2VyCAUBaQxvcmlnaW5DYWxsZXIEBGFkZHIJAKUIAQUEdXNlcgQGcmVzdWx0AwkBAiE9AgUEdXNlcgUMcmVzdENvbnRyYWN0CQEMY2hlY2tCbG9ja2VkAAcEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQULbGFuZEFzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBCQCaCAIFD3N0YWtpbmdDb250cmFjdAkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAkAAgEJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQEBW93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQULbGFuZEFzc2V0SWQJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwMJAQIhPQIFBHVzZXIFDHJlc3RDb250cmFjdAkBAiE9AgUFb3duZXIFBGFkZHIHCQACAQkArAICBQpMQU5EUFJFRklYAg0gaXMgbm90IHlvdXJzBAhuZXdPcmRlcgkAvAkCBQtuZXdPcmRlclN0cgIBOgQCd2gJAQhhc1N0cmluZwEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0AhRnZXRXYXJlaG91c2VSRUFET05MWQkAzAgCBQtsYW5kQXNzZXRJZAUDbmlsBQNuaWwECWN1cnJlbnRXaAkAvAkCBQJ3aAIBOgQEbG9mdAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhMT0ZUAgFfBAd3aFRvdGFsCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAUIdm9sVG90YWwEBm9yZEtleQkBDmtleU9yZGVyQnlMYW5kAQULbGFuZEFzc2V0SWQECmN1cnJlbnRPcmQJAQhnZXRPcmRlcgEFBm9yZEtleQQBegkBC3NldEludGVybmFsAwUJY3VycmVudFdoBQpjdXJyZW50T3JkBQhuZXdPcmRlcgQLYnV5Vm9sU2FsZG8IBQF6Al80BAxzZWxsVm9sU2FsZG8IBQF6Al81BAp3aE9jY3VwaWVkCAUBegJfNwQId2hMb2NrZWQJAGQCBQtidXlWb2xTYWxkbwUMc2VsbFZvbFNhbGRvBAZ3aEZyZWUJAGUCCQBlAgUHd2hUb3RhbAUKd2hPY2N1cGllZAUId2hMb2NrZWQDCQBmAgAABQZ3aEZyZWUJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhNBdHRlbXB0IHRvIHJlc2VydmUgCQCkAwEFC2J1eVZvbFNhbGRvAhsgc3BhY2UgZm9yIGJ1eSBvcmRlcnMsIGFuZCAJAKQDAQUMc2VsbFZvbFNhbGRvAiUgc3BhY2UgZm9yIHNlbGwgb3JkZXJzIChhbmQgb2NjdXBpZWQ9CQCkAwEFCndoT2NjdXBpZWQCHyksIGxlYWRzIHRvIG5lZ2F0aXZlIGZyZWUgc3BhY2UEBXdoU3RyCQC6CQIJAMwIAgkAkQMCBQljdXJyZW50V2gFC3doSWR4TGV2ZWxzCQDMCAIJALkJAggFAXoCXzECAV8JAMwIAgkAuQkCCAUBegJfMgIBXwkAzAgCCQC6CQIIBQF6Al8zAgFfCQDMCAIJAKQDAQUId2hMb2NrZWQFA25pbAIBOgQGd2hTYXZlCQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAINc2F2ZVdhcmVob3VzZQkAzAgCBQV3aFN0cgkAzAgCBQtsYW5kQXNzZXRJZAUDbmlsBQNuaWwECHVzZFNhbGRvCAUBegJfNgQHYWN0aW9ucwMJAGYCBQh1c2RTYWxkbwAAAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIiZXhhY3RseSAxIHBheW1lbnQgbXVzdCBiZSBhdHRhY2hlZAQDcG10CQCRAwIIBQFpCHBheW1lbnRzAAAEA2FtdAgFA3BtdAZhbW91bnQECnBtdEFzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAggFA3BtdAdhc3NldElkAh5XQVZFUyBjYW4ndCBiZSB1c2VkIGFzIHBheW1lbnQDCQECIT0CBQpwbXRBc3NldElkBQt1c2R0QXNzZXRJZAkAAgECE1VTRFQgcGF5bWVudHMgb25seSEDCQECIT0CBQNhbXQFCHVzZFNhbGRvCQACAQkArAICAhJQYXltZW50IG5lZWRlZCBpcyAJAKQDAQUIdXNkU2FsZG8JAMwIAgkBC1N0cmluZ0VudHJ5AgUGb3JkS2V5BQtuZXdPcmRlclN0cgUDbmlsAwkAAAIFCHVzZFNhbGRvAAADCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhJObyBwYXltZW50cyBuZWVkZWQJAMwIAgkBC1N0cmluZ0VudHJ5AgUGb3JkS2V5BQtuZXdPcmRlclN0cgUDbmlsAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQISTm8gcGF5bWVudHMgbmVlZGVkCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEFBW93bmVyCQEBLQEFCHVzZFNhbGRvBQt1c2R0QXNzZXRJZAkAzAgCCQELU3RyaW5nRW50cnkCBQZvcmRLZXkFC25ld09yZGVyU3RyBQNuaWwJAJQKAgUHYWN0aW9ucwkAlAoCBQZyZXN1bHQFBndoU2F2ZQFpARRhY2NlcHRXYXJlaG91c2VPcmRlcgMKYnBPcmRlclN0cg9zaG9wTGFuZEFzc2V0SWQLZHVja0Fzc2V0SWQEDHByb2xvZ1Jlc3VsdAkBBnByb2xvZwADCQAAAgUMcHJvbG9nUmVzdWx0BQxwcm9sb2dSZXN1bHQEBmNhbGxlcggFAWkMb3JpZ2luQ2FsbGVyBApjYWxsZXJBZGRyCQClCAEFBmNhbGxlcgQRc3Rha2VkRHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFCmNhbGxlckFkZHICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQEC2N1ckxvY2F0aW9uCQELdmFsdWVPckVsc2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBD2tleUR1Y2tMb2NhdGlvbgEFEXN0YWtlZER1Y2tBc3NldElkBQ9ERUZBVUxUTE9DQVRJT04EA2xvYwkAtQkCCQEFdmFsdWUBBQtjdXJMb2NhdGlvbgIBXwMJAQIhPQIJAJEDAgUDbG9jBQpsb2NJZHhUeXBlAgFMCQACAQkArAICCQCsAgICFkR1Y2sgbG9jYXRpb24gdHlwZSBpcyAJAJEDAgUDbG9jBQpsb2NJZHhUeXBlAhEsIGJ1dCBzaG91bGQgYmUgTAMJAQIhPQIFEXN0YWtlZER1Y2tBc3NldElkBQtkdWNrQXNzZXRJZAkAAgEJAKwCAgkArAICCQCsAgICFFlvdXIgc3Rha2VkIGR1Y2sgaXMgBRFzdGFrZWREdWNrQXNzZXRJZAINLCBidXQgcGFzc2VkIAULZHVja0Fzc2V0SWQEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BAlicFJlc0xpc3QJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMCAV8ECWJwTWF0TGlzdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAIBXwQKYnBQcm9kTGlzdAMJAAACCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QCAAUDbmlsCQC8CQIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAIBXwQNJHQwNTY5ODg1NzIyOAkBFWFjY2VwdFNob3BPcmRlckNvbW1vbgYFD3Nob3BMYW5kQXNzZXRJZAUKY2FsbGVyQWRkcgUKYnBPcmRlclN0cgUJYnBSZXNMaXN0BQlicE1hdExpc3QFCmJwUHJvZExpc3QECnNob3BBY3Rpb24IBQ0kdDA1Njk4ODU3MjI4Al8xBApuZXdVc2VyUmVzCAUNJHQwNTY5ODg1NzIyOAJfMgQKbmV3VXNlck1hdAgFDSR0MDU2OTg4NTcyMjgCXzMEC25ld1VzZXJQcm9kCAUNJHQwNTY5ODg1NzIyOAJfNAQNdXNkV2gyQnBTYWxkbwgFDSR0MDU2OTg4NTcyMjgCXzUEDXVzZEJwMldoU2FsZG8IBQ0kdDA1Njk4ODU3MjI4Al82BAh4cEFtb3VudAgFDSR0MDU2OTg4NTcyMjgCXzcEDXNob3BMYW5kT3duZXIIBQ0kdDA1Njk4ODU3MjI4Al84BApzaG9wV2hTYXZlCAUNJHQwNTY5ODg1NzIyOAJfOQQOYWNjU3RhdHNSZXN1bHQIBQ0kdDA1Njk4ODU3MjI4A18xMAQIYWN0aW9uczEJAMwIAgUKc2hvcEFjdGlvbgkBEHNob3AydXNlckFjdGlvbnMDBQ11c2RXaDJCcFNhbGRvBQpjYWxsZXJBZGRyAAAECGFjdGlvbnMyCQEQdXNlcjJzaG9wQWN0aW9ucwQFDXVzZEJwMldoU2FsZG8IBQFpCHBheW1lbnRzBQ1zaG9wTGFuZE93bmVyAAAECG5ld0JwU3RyCQC6CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCQC5CQIFCm5ld1VzZXJSZXMCAV8JAMwIAgkAuQkCBQpuZXdVc2VyTWF0AgFfCQDMCAIJALoJAgULbmV3VXNlclByb2QCAV8FA25pbAIBOgQGYnBTYXZlCQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIOdXBkYXRlQmFja3BhY2sJAMwIAgULZHVja0Fzc2V0SWQJAMwIAgUIbmV3QnBTdHIFA25pbAUDbmlsBA9kdWNrU3RhdHNSZXN1bHQJAQVhc0ludAEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag91cGRhdGVEdWNrU3RhdHMJAMwIAgULZHVja0Fzc2V0SWQJAMwIAgkAawMFBnhwU2hvcAUIeHBBbW91bnQFBU1VTFQ4BQNuaWwFA25pbAkAlAoCCQDOCAIFCGFjdGlvbnMxBQhhY3Rpb25zMgkAlwoFBQxwcm9sb2dSZXN1bHQFCnNob3BXaFNhdmUFBmJwU2F2ZQUPZHVja1N0YXRzUmVzdWx0BQ5hY2NTdGF0c1Jlc3VsdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARthY2NlcHRTaG9wT3JkZXJEdWNrRGVsaXZlcnkCCG9yZGVyU3RyD3Nob3BMYW5kQXNzZXRJZAQMcHJvbG9nUmVzdWx0CQEGcHJvbG9nAAMJAAACBQxwcm9sb2dSZXN1bHQFDHByb2xvZ1Jlc3VsdAQGY2FsbGVyCAUBaQxvcmlnaW5DYWxsZXIECmNhbGxlckFkZHIJAKUIAQUGY2FsbGVyBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUKY2FsbGVyQWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkECWJwUmVzTGlzdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwIBXwQJYnBNYXRMaXN0CQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0AgFfBApicFByb2RMaXN0AwkAAAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAIABQNuaWwJALwJAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kAgFfBA0kdDA1ODU5MzU4ODMxCQEVYWNjZXB0U2hvcE9yZGVyQ29tbW9uBgUPc2hvcExhbmRBc3NldElkBQpjYWxsZXJBZGRyBQhvcmRlclN0cgUJYnBSZXNMaXN0BQlicE1hdExpc3QFCmJwUHJvZExpc3QECnNob3BBY3Rpb24IBQ0kdDA1ODU5MzU4ODMxAl8xBApuZXdVc2VyUmVzCAUNJHQwNTg1OTM1ODgzMQJfMgQKbmV3VXNlck1hdAgFDSR0MDU4NTkzNTg4MzECXzMEC25ld1VzZXJQcm9kCAUNJHQwNTg1OTM1ODgzMQJfNAQNdXNkV2gyQnBTYWxkbwgFDSR0MDU4NTkzNTg4MzECXzUEDXVzZEJwMldoU2FsZG8IBQ0kdDA1ODU5MzU4ODMxAl82BAh4cEFtb3VudAgFDSR0MDU4NTkzNTg4MzECXzcEDXNob3BMYW5kT3duZXIIBQ0kdDA1ODU5MzU4ODMxAl84BApzaG9wV2hTYXZlCAUNJHQwNTg1OTM1ODgzMQJfOQQOYWNjU3RhdHNSZXN1bHQIBQ0kdDA1ODU5MzU4ODMxA18xMAQPZGVsaXZlcnlGZWVQYXJ0CQBrAwkAZAIFDXVzZEJwMldoU2FsZG8FDXVzZFdoMkJwU2FsZG8FDERFTElWRVJZX0ZFRQUFTVVMVDYEC2RlbGl2ZXJ5RmVlCQCWAwEJAMwIAgUPZGVsaXZlcnlGZWVQYXJ0CQDMCAIFFU1JTl9VU0RUX0ZFRV9ERUxJVkVSWQUDbmlsBAhzcGVudEZlZQkAawMFC2RlbGl2ZXJ5RmVlBQ11c2RCcDJXaFNhbGRvCQBkAgUNdXNkQnAyV2hTYWxkbwUNdXNkV2gyQnBTYWxkbwQLcmVjZWl2ZWRGZWUJAGUCBQtkZWxpdmVyeUZlZQUIc3BlbnRGZWUECWZ1bmRUb3RhbAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQ9kZWxpdmVyeUZ1bmRLZXkAAAQIYWN0aW9uczEJAMwIAgUKc2hvcEFjdGlvbgkBEHNob3AydXNlckFjdGlvbnMDBQ11c2RXaDJCcFNhbGRvBQpjYWxsZXJBZGRyBQtyZWNlaXZlZEZlZQQIYWN0aW9uczIJARB1c2VyMnNob3BBY3Rpb25zBAUNdXNkQnAyV2hTYWxkbwgFAWkIcGF5bWVudHMFDXNob3BMYW5kT3duZXIFCHNwZW50RmVlBAhuZXdCcFN0cgkAugkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAuQkCBQpuZXdVc2VyUmVzAgFfCQDMCAIJALkJAgUKbmV3VXNlck1hdAIBXwkAzAgCCQC6CQIFC25ld1VzZXJQcm9kAgFfBQNuaWwCAToEBmJwU2F2ZQkBCGFzU3RyaW5nAQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCDnVwZGF0ZUJhY2twYWNrCQDMCAIFC2R1Y2tBc3NldElkCQDMCAIFCG5ld0JwU3RyBQNuaWwFA25pbAQPZHVja1N0YXRzUmVzdWx0CQEFYXNJbnQBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIPdXBkYXRlRHVja1N0YXRzCQDMCAIFC2R1Y2tBc3NldElkCQDMCAIJAGsDBQZ4cFNob3AFCHhwQW1vdW50BQVNVUxUOAUDbmlsBQNuaWwJAJQKAgkAzQgCCQDOCAIFCGFjdGlvbnMxBQhhY3Rpb25zMgkBDEludGVnZXJFbnRyeQIFD2RlbGl2ZXJ5RnVuZEtleQkAZAIFCWZ1bmRUb3RhbAULZGVsaXZlcnlGZWUJAJcKBQUMcHJvbG9nUmVzdWx0BQpzaG9wV2hTYXZlBQZicFNhdmUFD2R1Y2tTdGF0c1Jlc3VsdAUOYWNjU3RhdHNSZXN1bHQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEbYWNjZXB0U2hvcE9yZGVyTGFuZERlbGl2ZXJ5AwhvcmRlclN0cg9zaG9wTGFuZEFzc2V0SWQNbXlMYW5kQXNzZXRJZAQMcHJvbG9nUmVzdWx0CQEGcHJvbG9nAAMJAAACBQxwcm9sb2dSZXN1bHQFDHByb2xvZ1Jlc3VsdAQGY2FsbGVyCAUBaQxvcmlnaW5DYWxsZXIECmNhbGxlckFkZHIJAKUIAQUGY2FsbGVyBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFDW15TGFuZEFzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBCQCaCAIFD3N0YWtpbmdDb250cmFjdAkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQ1teUxhbmRBc3NldElkCQACAQkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAQFb3duZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQ1teUxhbmRBc3NldElkCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDCBpcyBvcnBoYW5lZAMJAQIhPQIFBW93bmVyBQpjYWxsZXJBZGRyCQACAQkArAICBQpMQU5EUFJFRklYAg0gaXMgbm90IHlvdXJzBAJ3aAkBCGFzU3RyaW5nAQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCFGdldFdhcmVob3VzZVJFQURPTkxZCQDMCAIFDW15TGFuZEFzc2V0SWQFA25pbAUDbmlsBAljdXJyZW50V2gJALwJAgUCd2gCAToEB3Jlc0xpc3QJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4UmVzAgFfBAdtYXRMaXN0CQC1CQIJAJEDAgUJY3VycmVudFdoBQh3aElkeE1hdAIBXwQIcHJvZExpc3QDCQAAAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4UHJvZAIABQNuaWwJALwJAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4UHJvZAIBXwQNJHQwNjA5NTI2MTE4NAkBFWFjY2VwdFNob3BPcmRlckNvbW1vbgYFD3Nob3BMYW5kQXNzZXRJZAUKY2FsbGVyQWRkcgUIb3JkZXJTdHIFB3Jlc0xpc3QFB21hdExpc3QFCHByb2RMaXN0BApzaG9wQWN0aW9uCAUNJHQwNjA5NTI2MTE4NAJfMQQKbmV3VXNlclJlcwgFDSR0MDYwOTUyNjExODQCXzIECm5ld1VzZXJNYXQIBQ0kdDA2MDk1MjYxMTg0Al8zBAtuZXdVc2VyUHJvZAgFDSR0MDYwOTUyNjExODQCXzQEDXVzZFdoMkJwU2FsZG8IBQ0kdDA2MDk1MjYxMTg0Al81BA11c2RCcDJXaFNhbGRvCAUNJHQwNjA5NTI2MTE4NAJfNgQIeHBBbW91bnQIBQ0kdDA2MDk1MjYxMTg0Al83BA1zaG9wTGFuZE93bmVyCAUNJHQwNjA5NTI2MTE4NAJfOAQKc2hvcFdoU2F2ZQgFDSR0MDYwOTUyNjExODQCXzkEDmFjY1N0YXRzUmVzdWx0CAUNJHQwNjA5NTI2MTE4NANfMTAED2RlbGl2ZXJ5RmVlUGFydAkAawMJAGQCBQ11c2RCcDJXaFNhbGRvBQ11c2RXaDJCcFNhbGRvBQxERUxJVkVSWV9GRUUFBU1VTFQ2BAtkZWxpdmVyeUZlZQkAlgMBCQDMCAIFD2RlbGl2ZXJ5RmVlUGFydAkAzAgCBRVNSU5fVVNEVF9GRUVfREVMSVZFUlkFA25pbAQIc3BlbnRGZWUJAGsDBQtkZWxpdmVyeUZlZQUNdXNkQnAyV2hTYWxkbwkAZAIFDXVzZEJwMldoU2FsZG8FDXVzZFdoMkJwU2FsZG8EC3JlY2VpdmVkRmVlCQBlAgULZGVsaXZlcnlGZWUFCHNwZW50RmVlBAlmdW5kVG90YWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUPZGVsaXZlcnlGdW5kS2V5AAAECGFjdGlvbnMxCQDMCAIFCnNob3BBY3Rpb24JARBzaG9wMnVzZXJBY3Rpb25zAwUNdXNkV2gyQnBTYWxkbwUKY2FsbGVyQWRkcgULcmVjZWl2ZWRGZWUECGFjdGlvbnMyCQEQdXNlcjJzaG9wQWN0aW9ucwQFDXVzZEJwMldoU2FsZG8IBQFpCHBheW1lbnRzBQ1zaG9wTGFuZE93bmVyBQhzcGVudEZlZQQFd2hTdHIJALoJAgkAzAgCCQCRAwIFCWN1cnJlbnRXaAULd2hJZHhMZXZlbHMJAMwIAgkAuQkCBQpuZXdVc2VyUmVzAgFfCQDMCAIJALkJAgUKbmV3VXNlck1hdAIBXwkAzAgCCQC5CQIFC25ld1VzZXJQcm9kAgFfCQDMCAIJAJEDAgUJY3VycmVudFdoBQl3aElkeExPRlQFA25pbAIBOgQGd2hTYXZlCQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAINc2F2ZVdhcmVob3VzZQkAzAgCBQV3aFN0cgkAzAgCBQ1teUxhbmRBc3NldElkBQNuaWwFA25pbAQLc3RhdHNSZXN1bHQJAQVhc0ludAEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag51cGRhdGVBY2NTdGF0cwkAzAgCBQpjYWxsZXJBZGRyCQDMCAIJAGsDBQZ4cFNob3AFCHhwQW1vdW50BQVNVUxUOAUDbmlsBQNuaWwJAJQKAgkAzQgCCQDOCAIFCGFjdGlvbnMxBQhhY3Rpb25zMgkBDEludGVnZXJFbnRyeQIFD2RlbGl2ZXJ5RnVuZEtleQkAZAIFCWZ1bmRUb3RhbAULZGVsaXZlcnlGZWUJAJcKBQUMcHJvbG9nUmVzdWx0BQpzaG9wV2hTYXZlBQZ3aFNhdmUFC3N0YXRzUmVzdWx0BQ5hY2NTdGF0c1Jlc3VsdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARBzZWxsUHJvZHVjdHNUb0VTAQdhbW91bnRzBAxwcm9sb2dSZXN1bHQJAQZwcm9sb2cAAwkAAAIFDHByb2xvZ1Jlc3VsdAUMcHJvbG9nUmVzdWx0AwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQISTm8gcGF5bWVudHMgbmVlZGVkBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQkApQgBCAUBaQZjYWxsZXICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQEC2N1ckxvY2F0aW9uCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQFD0RFRkFVTFRMT0NBVElPTgIBXwMJAQIhPQIJAJEDAgULY3VyTG9jYXRpb24FCmxvY0lkeFR5cGUCAUEJAAIBCQCsAgICLUR1Y2sgbG9jYXRpb24gdHlwZSBzaG91bGQgYmUgQWlycG9ydCwgYnV0IGlzIAkAkQMCBQtjdXJMb2NhdGlvbgUKbG9jSWR4VHlwZQQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAhwcm9kTGlzdAMJAAACCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QCAAUDbmlsCQC8CQIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAIBXwQFZXNLZXkJAQ5rZXlFc1dhcmVob3VzZQAECGV4aXN0U3RyCQCiCAEFBWVzS2V5BAxleGlzdEFtb3VudHMDCQEJaXNEZWZpbmVkAQUIZXhpc3RTdHIJALwJAgkBBXZhbHVlAQUIZXhpc3RTdHICAV8FA25pbAoBCG1vdmVQcm9kAgNhY2MJcmVjaXBlU3RyBAFqCAUDYWNjAl8xBAhxdWFudGl0eQMJAGYCCQCQAwEFB2Ftb3VudHMFAWoJAJEDAgUHYW1vdW50cwUBagAAAwkAZgIAAAUIcXVhbnRpdHkJAAIBAhtRdWFudGl0eSBjYW5ub3QgYmUgbmVnYXRpdmUEBnJlY2lwZQkAtQkCBQlyZWNpcGVTdHICAV8DCQECIT0CCQCQAwEFBnJlY2lwZQUKUkVDSVBFU0laRQkAAgEJAKwCAgIXRmF0YWw6IHVua25vd24gcmVjaXBlOiAFCXJlY2lwZVN0cgQJbWF4QW1vdW50CQBoAgUNRVNNQVhQQUNLQUdFUwUOUFJPRFVDVFBLR1NJWkUEC2V4aXN0QW1vdW50AwkAZgIJAJADAQUMZXhpc3RBbW91bnRzBQFqCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUMZXhpc3RBbW91bnRzBQFqAAAEBmNhbkJ1eQkAZQIFCW1heEFtb3VudAULZXhpc3RBbW91bnQDCQBmAgUIcXVhbnRpdHkFBmNhbkJ1eQkAAgEJAKwCAgkArAICCQCsAgICF1dhcmVob3VzZSBjYW4gYnV5IG9ubHkgCQCkAwEFBmNhbkJ1eQIEIG9mIAkAkQMCBQlwcm9kVHlwZXMFAWoECHRvdGFsTWF0CQESZ2V0UmVjaXBlTWF0ZXJpYWxzAQUGcmVjaXBlBAl1bml0UHJpY2UJAGsDCQBoAgUIdG90YWxNYXQFCUVTQlVZQ09FRgUQUkVTT1VSQ0VQUklDRU1JTgkAaAIFBU1VTFQ4BQ5QUk9EVUNUUEtHU0laRQQMYnBQcm9kQW1vdW50AwkAZgIJAJADAQUIcHJvZExpc3QFAWoJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQhwcm9kTGlzdAUBagAAAwkAZgIFCHF1YW50aXR5BQxicFByb2RBbW91bnQJAAIBCQCsAgIJAKwCAgkArAICAg5Zb3UgaGF2ZSBvbmx5IAkApAMBBQxicFByb2RBbW91bnQCBCBvZiAJAJEDAgUJcHJvZFR5cGVzBQFqCQCXCgUJAGQCBQFqAAEJAGQCCAUDYWNjAl8yCQBoAgUJdW5pdFByaWNlBQhxdWFudGl0eQkAzQgCCAUDYWNjAl8zCQCkAwEJAGUCBQxicFByb2RBbW91bnQFCHF1YW50aXR5CQDNCAIIBQNhY2MCXzQJAKQDAQkAZAIFC2V4aXN0QW1vdW50BQhxdWFudGl0eQkAZAIIBQNhY2MCXzUJAGgCBQh0b3RhbE1hdAUIcXVhbnRpdHkEBm1lcmdlZAoAAiRsBRBwcm9kdWN0aW9uTWF0cml4CgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlwoFAAAAAAUDbmlsBQNuaWwAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEIbW92ZVByb2QCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDUwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkAGgAbABwAHQAeAB8AIAAhACIAIwAkACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgQIbmV3QnBTdHIJALoJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0CQDMCAIJALoJAggFBm1lcmdlZAJfMwIBXwUDbmlsAgE6BAZicFNhdmUJAQhhc1N0cmluZwEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag51cGRhdGVCYWNrcGFjawkAzAgCBQtkdWNrQXNzZXRJZAkAzAgCBQhuZXdCcFN0cgUDbmlsBQNuaWwEC3N0YXRzUmVzdWx0CQEFYXNJbnQBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIPdXBkYXRlRHVja1N0YXRzCQDMCAIFC2R1Y2tBc3NldElkCQDMCAIJAGsDBQp4cFNlbGxUb0VzCAUGbWVyZ2VkAl81CQBoAgUFTVVMVDgACgUDbmlsBQNuaWwJAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCBQVlc0tleQkAugkCCAUGbWVyZ2VkAl80AgFfCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcggFBm1lcmdlZAJfMgULdXNkdEFzc2V0SWQFA25pbAkAlQoDBQZicFNhdmUFDHByb2xvZ1Jlc3VsdAULc3RhdHNSZXN1bHQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEPdXBkYXRlRXNTdG9yYWdlAQpuZXdTdG9yYWdlAwkBAiE9AggFAWkGY2FsbGVyBQ9zdGFraW5nQ29udHJhY3QJAAIBAhFQZXJtaXNzaW9uIGRlbmllZAkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ5rZXlFc1dhcmVob3VzZQAFCm5ld1N0b3JhZ2UFA25pbAUKbmV3U3RvcmFnZQFpARR1cGRhdGVEZWxpdmVyeUxvY2tlZAEJbmV3QW1vdW50AwkBAiE9AggFAWkGY2FsbGVyBQ9zdGFraW5nQ29udHJhY3QJAAIBAhFQZXJtaXNzaW9uIGRlbmllZAkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRFkZWxpdmVyeUxvY2tlZEtleQUJbmV3QW1vdW50BQNuaWwFCW5ld0Ftb3VudAFpARJzZW5kRGVsaXZlcnlSZXdhcmQBBGFkZHIDCQECIT0CCAUBaQZjYWxsZXIFD3N0YWtpbmdDb250cmFjdAkAAgECEVBlcm1pc3Npb24gZGVuaWVkBAlmdW5kVG90YWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUPZGVsaXZlcnlGdW5kS2V5AAAEC2xvY2tlZFRvdGFsCQELdmFsdWVPckVsc2UCCQCfCAEFEWRlbGl2ZXJ5TG9ja2VkS2V5AAAEC2FjcmVzQW1vdW50CQBoAgUVTUlOX1VTRFRfRkVFX0RFTElWRVJZBRVVU0RUMkFDUkVTX01VTFRJUExJRVIEC2FjcmVzUmVzdWx0CQD8BwQFDWFjcmVzQ29udHJhY3QCCXNlbmRBY3JlcwkAzAgCBQRhZGRyCQDMCAIFC2FjcmVzQW1vdW50BQNuaWwFA25pbAkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ9kZWxpdmVyeUZ1bmRLZXkJAGUCBQlmdW5kVG90YWwFFU1JTl9VU0RUX0ZFRV9ERUxJVkVSWQkAzAgCCQEMSW50ZWdlckVudHJ5AgURZGVsaXZlcnlMb2NrZWRLZXkJAGUCBQtsb2NrZWRUb3RhbAUVTUlOX1VTRFRfRkVFX0RFTElWRVJZBQNuaWwFC2FjcmVzUmVzdWx0AAiBl3E=", "height": 2814490, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 7ALzi2wC8GDNAAek1dKHzwo6FJH5MbWWw29m4W4GqJKg Next: 6mkTN5Top9xkhR4PSRPWV9P8hhpuYd1s4G1FZSvkfBZz Diff:
Old | New | Differences | |
---|---|---|---|
110 | 110 | func ac (ad) = (parseIntValue(ad[v]) * t) | |
111 | 111 | ||
112 | 112 | ||
113 | - | let ae = | |
113 | + | let ae = take(drop(this.bytes, 1), 1) | |
114 | 114 | ||
115 | - | let af = take(drop(this.bytes, 1), 1) | |
116 | - | ||
117 | - | let ag = { | |
118 | - | let ah = af | |
119 | - | if ((base58'2W' == ah)) | |
115 | + | let af = { | |
116 | + | let ag = ae | |
117 | + | if ((base58'2W' == ag)) | |
120 | 118 | then base58'9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi' | |
121 | - | else if ((base58'2T' == | |
119 | + | else if ((base58'2T' == ag)) | |
122 | 120 | then base58'6mWwf9mZBjVgkC54idpyaZLQfAosD914wT8fGf2iiY63' | |
123 | 121 | else throw("Unknown chain") | |
124 | 122 | } | |
125 | 123 | ||
126 | - | let | |
127 | - | let | |
128 | - | if ((base58'2W' == | |
124 | + | let ah = { | |
125 | + | let ag = ae | |
126 | + | if ((base58'2W' == ag)) | |
129 | 127 | then "3PQCuvFbvh4LkPUnrnU1z3jnbA1p9m3WNhv" | |
130 | - | else if ((base58'2T' == | |
128 | + | else if ((base58'2T' == ag)) | |
131 | 129 | then "3MumkGGztCKAXpWDqxkddofqXSUbqQkvSJy" | |
132 | 130 | else throw("Unknown chain") | |
133 | 131 | } | |
134 | 132 | ||
135 | - | let | |
133 | + | let ai = "__" | |
136 | 134 | ||
137 | - | let | |
135 | + | let aj = 100000 | |
138 | 136 | ||
139 | - | let | |
137 | + | let ak = 1000000 | |
140 | 138 | ||
141 | - | let | |
139 | + | let al = 100000000 | |
142 | 140 | ||
143 | - | let | |
141 | + | let am = 10000000000 | |
144 | 142 | ||
145 | - | let | |
143 | + | let an = 100000 | |
146 | 144 | ||
147 | - | let | |
145 | + | let ao = [0, 1, 2, 3, 4, 5] | |
148 | 146 | ||
149 | - | func | |
147 | + | func ap (aq,ar) = valueOrErrorMessage(getString(aq, ar), makeString(["mandatory ", toString(aq), ".", ar, " is not defined"], "")) | |
150 | 148 | ||
151 | 149 | ||
152 | - | let | |
150 | + | let as = 1 | |
153 | 151 | ||
154 | - | let | |
152 | + | let at = 6 | |
155 | 153 | ||
156 | - | let | |
154 | + | let au = 8 | |
157 | 155 | ||
158 | - | func | |
156 | + | func av () = "%s__restConfig" | |
159 | 157 | ||
160 | 158 | ||
161 | - | func | |
159 | + | func aw () = "%s__restAddr" | |
162 | 160 | ||
163 | 161 | ||
164 | - | func | |
162 | + | func ax (ay) = split_4C(ap(ay, av()), ai) | |
165 | 163 | ||
166 | 164 | ||
167 | - | func | |
165 | + | func az (aA,aB) = valueOrErrorMessage(addressFromString(aA[aB]), ("Rest cfg doesn't contain address at index " + toString(aB))) | |
168 | 166 | ||
169 | 167 | ||
170 | - | let | |
168 | + | let aC = addressFromStringValue(valueOrElse(getString(this, aw()), ah)) | |
171 | 169 | ||
172 | - | let | |
170 | + | let aA = ax(aC) | |
173 | 171 | ||
174 | - | let | |
172 | + | let aD = az(aA, as) | |
175 | 173 | ||
176 | - | let | |
174 | + | let aE = az(aA, at) | |
177 | 175 | ||
178 | - | let | |
176 | + | let aF = az(aA, au) | |
179 | 177 | ||
180 | - | func | |
181 | - | let | |
182 | - | if ($isInstanceOf( | |
178 | + | func aG (aH) = { | |
179 | + | let ag = aH | |
180 | + | if ($isInstanceOf(ag, "String")) | |
183 | 181 | then { | |
184 | - | let | |
185 | - | | |
182 | + | let aI = ag | |
183 | + | aI | |
186 | 184 | } | |
187 | 185 | else throw("fail to cast into String") | |
188 | 186 | } | |
189 | 187 | ||
190 | 188 | ||
191 | - | func | |
192 | - | let | |
193 | - | if ($isInstanceOf( | |
189 | + | func aJ (aH) = { | |
190 | + | let ag = aH | |
191 | + | if ($isInstanceOf(ag, "Int")) | |
194 | 192 | then { | |
195 | - | let | |
196 | - | | |
193 | + | let aK = ag | |
194 | + | aK | |
197 | 195 | } | |
198 | 196 | else throw("fail to cast into Int") | |
199 | 197 | } | |
200 | 198 | ||
201 | 199 | ||
202 | - | func | |
200 | + | func aL () = "contractsBlocked" | |
203 | 201 | ||
204 | 202 | ||
205 | - | func | |
206 | - | let | |
207 | - | let | |
208 | - | let | |
209 | - | (((toString(( | |
203 | + | func aM (aN,aO) = { | |
204 | + | let aP = pow(10, 0, aO, 0, 0, DOWN) | |
205 | + | let aQ = toString((aN % aP)) | |
206 | + | let aR = drop(toString(aP), (1 + size(aQ))) | |
207 | + | (((toString((aN / aP)) + ".") + aR) + aQ) | |
210 | 208 | } | |
211 | 209 | ||
212 | 210 | ||
213 | - | let | |
211 | + | let aS = 10000000000 | |
214 | 212 | ||
215 | - | let | |
213 | + | let aT = 200 | |
216 | 214 | ||
217 | - | let aV = 300 | |
215 | + | let aU = 300 | |
216 | + | ||
217 | + | let aV = 10000 | |
218 | 218 | ||
219 | 219 | let aW = 10000 | |
220 | 220 | ||
221 | - | let aX = | |
221 | + | let aX = 15000 | |
222 | 222 | ||
223 | - | let aY = 15000 | |
224 | - | ||
225 | - | func aZ (ba,bb) = ((("factoryWhByContinentAndRes_" + ba) + "_") + toString(bb)) | |
223 | + | func aY (aZ,ba) = ((("factoryWhByContinentAndRes_" + aZ) + "_") + toString(ba)) | |
226 | 224 | ||
227 | 225 | ||
228 | - | let | |
226 | + | let bb = 0 | |
229 | 227 | ||
230 | - | let | |
228 | + | let bc = 1 | |
231 | 229 | ||
232 | - | let | |
230 | + | let bd = 2 | |
233 | 231 | ||
234 | - | func | |
235 | - | let | |
236 | - | [if ((size(split( | |
237 | - | then | |
238 | - | else "0@0_0@0_0@0_0@0_0@0_0@0", if ((size(split( | |
239 | - | then | |
240 | - | else "0@0_0@0_0@0_0@0_0@0_0@0", | |
232 | + | func be (bf) = { | |
233 | + | let bg = split(valueOrElse(getString(bf), "0@0_0@0_0@0_0@0_0@0_0@0:0@0_0@0_0@0_0@0_0@0_0@0:"), ":") | |
234 | + | [if ((size(split(bg[bb], "_")) == f)) | |
235 | + | then bg[bb] | |
236 | + | else "0@0_0@0_0@0_0@0_0@0_0@0", if ((size(split(bg[bc], "_")) == f)) | |
237 | + | then bg[bc] | |
238 | + | else "0@0_0@0_0@0_0@0_0@0_0@0", bg[bd]] | |
241 | 239 | } | |
242 | 240 | ||
243 | 241 | ||
244 | - | func | |
242 | + | func bh (bi,bj,bk) = if (bk) | |
245 | 243 | then { | |
246 | - | let | |
247 | - | then ((( | |
248 | - | else -((((-( | |
249 | - | ( | |
244 | + | let bl = if ((bi >= 0)) | |
245 | + | then (((bi + bj) - 1) / bj) | |
246 | + | else -((((-(bi) + bj) - 1) / bj)) | |
247 | + | (bl * al) | |
250 | 248 | } | |
251 | - | else | |
249 | + | else bi | |
252 | 250 | ||
253 | 251 | ||
254 | - | func | |
255 | - | let | |
256 | - | let | |
257 | - | let | |
252 | + | func bm (bn,ba,bi,bo) = { | |
253 | + | let bp = aY(bn, ba) | |
254 | + | let bq = valueOrElse(getInteger(bp), 0) | |
255 | + | let br = if ((bq > aS)) | |
258 | 256 | then 0 | |
259 | - | else if ((( | |
260 | - | then ( | |
261 | - | else | |
262 | - | let | |
263 | - | let | |
264 | - | if ((( | |
265 | - | then throw((((((((((("Actual price = " + toString( | |
266 | - | else $Tuple2(IntegerEntry( | |
257 | + | else if (((bq + bi) > aS)) | |
258 | + | then (aS - bq) | |
259 | + | else bi | |
260 | + | let bs = (fraction(br, ((aT * h) - fraction(((100 * bq) + (50 * br)), h, aS)), am) + fraction((bi - br), h, al)) | |
261 | + | let bt = (bo - (bo / 100)) | |
262 | + | if (((bt * bi) > (bs * al))) | |
263 | + | then throw((((((((((("Actual price = " + toString(bs)) + " / ") + toString(bi)) + " < minPrice = ") + toString(bo)) + ", (") + bn) + ", ") + p[ba]) + ")")) | |
264 | + | else $Tuple2(IntegerEntry(bp, (bq + bi)), bs) | |
267 | 265 | } | |
268 | 266 | ||
269 | 267 | ||
270 | - | func | |
271 | - | let | |
272 | - | let | |
273 | - | let | |
274 | - | then min([ | |
268 | + | func bu (bn,bv,bi,bw) = { | |
269 | + | let bp = aY(bn, bv) | |
270 | + | let bq = valueOrElse(getInteger(bp), 0) | |
271 | + | let bx = if ((bq > aS)) | |
272 | + | then min([bi, (bq - aS)]) | |
275 | 273 | else 0 | |
276 | - | let | |
277 | - | let | |
278 | - | let | |
279 | - | let | |
280 | - | let | |
281 | - | if ((( | |
282 | - | then throw((((((((((("Actual price = " + toString( | |
283 | - | else $Tuple3(IntegerEntry( | |
274 | + | let by = min([bq, (bi - bx)]) | |
275 | + | let bz = (by + bx) | |
276 | + | let bA = min([bq, aS]) | |
277 | + | let bB = (fraction(by, ((aU * h) - fraction(((100 * bA) - (50 * by)), h, aS)), am) + fraction(bx, (2 * h), al)) | |
278 | + | let bC = (bw + (bw / 100)) | |
279 | + | if (((bB * al) > (bC * bz))) | |
280 | + | then throw((((((((((("Actual price = " + toString(bB)) + " / ") + toString(bz)) + " > maxPrice = ") + toString(bw)) + ", (") + bn) + ", ") + q[bv]) + ")")) | |
281 | + | else $Tuple3(IntegerEntry(bp, (bq - bz)), bB, bz) | |
284 | 282 | } | |
285 | 283 | ||
286 | 284 | ||
287 | - | func | |
288 | - | let | |
289 | - | [toString(valueOrElse(parseInt( | |
290 | - | then | |
291 | - | else "0_0_0_0_0_0", if ((size(split( | |
292 | - | then | |
293 | - | else "0_0_0_0_0_0", | |
285 | + | func bD (bE) = { | |
286 | + | let bg = split_4C(valueOrElse(getString(aD, bE), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":") | |
287 | + | [toString(valueOrElse(parseInt(bg[G]), 0)), if ((size(split(bg[H], "_")) == f)) | |
288 | + | then bg[H] | |
289 | + | else "0_0_0_0_0_0", if ((size(split(bg[I], "_")) == f)) | |
290 | + | then bg[I] | |
291 | + | else "0_0_0_0_0_0", bg[J]] | |
294 | 292 | } | |
295 | 293 | ||
296 | 294 | ||
297 | - | func | |
295 | + | func bF () = if (valueOrElse(getBoolean(aD, aL()), false)) | |
298 | 296 | then throw("Contracts are under maintenance") | |
299 | 297 | else unit | |
300 | 298 | ||
301 | 299 | ||
302 | - | func | |
300 | + | func bG () = aJ(reentrantInvoke(aD, "saveLastTx", nil, nil)) | |
303 | 301 | ||
304 | 302 | ||
305 | - | func | |
306 | - | let | |
307 | - | let | |
308 | - | then | |
303 | + | func bH (bI,bJ) = { | |
304 | + | let bK = bI._1 | |
305 | + | let bL = if ((size(bI._10) > bK)) | |
306 | + | then bI._10[bK] | |
309 | 307 | else "0@0" | |
310 | - | let | |
311 | - | let | |
312 | - | if ((size( | |
308 | + | let bM = bI._8 | |
309 | + | let bN = split(bL, "@") | |
310 | + | if ((size(bN) != 2)) | |
313 | 311 | then throw("Incorrect order format, should be amount@price") | |
314 | 312 | else { | |
315 | - | let | |
316 | - | let | |
317 | - | let | |
318 | - | then ( | |
319 | - | else fraction(bP, | |
320 | - | let | |
321 | - | let | |
322 | - | then parseIntValue( | |
313 | + | let bO = parseIntValue(bN[0]) | |
314 | + | let bP = parseIntValue(bN[1]) | |
315 | + | let bQ = if (bM) | |
316 | + | then (bO * bP) | |
317 | + | else fraction(bO, bP, al) | |
318 | + | let bR = bh(bO, y, bM) | |
319 | + | let bS = if ((size(bI._6) > bK)) | |
320 | + | then parseIntValue(bI._6[bK]) | |
323 | 321 | else 0 | |
324 | - | let | |
325 | - | then | |
322 | + | let bT = split(if ((size(bI._7) > bK)) | |
323 | + | then bI._7[bK] | |
326 | 324 | else "0@0", "@") | |
327 | - | let | |
328 | - | let | |
329 | - | if (if ((0 > | |
325 | + | let bU = parseIntValue(bT[0]) | |
326 | + | let bV = parseIntValue(bT[1]) | |
327 | + | if (if ((0 > bV)) | |
330 | 328 | then true | |
331 | - | else (0 > | |
329 | + | else (0 > bP)) | |
332 | 330 | then throw("Price can't be negative") | |
333 | 331 | else { | |
334 | - | let | |
335 | - | then ( | |
336 | - | else fraction(bV, | |
337 | - | if (( | |
338 | - | then if (( | |
339 | - | then $Tuple10(( | |
340 | - | else $Tuple10(( | |
341 | - | else if (( | |
342 | - | then if ((0 > | |
343 | - | then $Tuple10(( | |
344 | - | else $Tuple10(( | |
345 | - | else if ((0 > | |
332 | + | let bW = if (bM) | |
333 | + | then (bU * bV) | |
334 | + | else fraction(bU, bV, al) | |
335 | + | if ((bO == 0)) | |
336 | + | then if ((bU > 0)) | |
337 | + | then $Tuple10((bK + 1), (bI._2 :+ toString(bS)), bI._3, bI._4, (bI._5 - bW), bI._6, bI._7, bM, (bI._9 + bh(bS, y, bM)), bI._10) | |
338 | + | else $Tuple10((bK + 1), (bI._2 :+ toString((bS - bU))), bI._3, bI._4, bI._5, bI._6, bI._7, bM, (bI._9 + bh((bS - bU), y, bM)), bI._10) | |
339 | + | else if ((bO > 0)) | |
340 | + | then if ((0 > bU)) | |
341 | + | then $Tuple10((bK + 1), (bI._2 :+ toString((bS - bU))), (bI._3 + bR), bI._4, (bI._5 + bQ), bI._6, bI._7, bM, bh((bS - bU), y, bM), bI._10) | |
342 | + | else $Tuple10((bK + 1), (bI._2 :+ toString(bS)), (bI._3 + bR), bI._4, ((bI._5 + bQ) - bW), bI._6, bI._7, bM, bh(bS, y, bM), bI._10) | |
343 | + | else if ((0 > bU)) | |
346 | 344 | then { | |
347 | - | let | |
348 | - | if ((0 > ( | |
349 | - | then throw((((("Attempt to take " + toString( | |
350 | - | else $Tuple10(( | |
345 | + | let bX = (bU - bO) | |
346 | + | if ((0 > (bS - bX))) | |
347 | + | then throw((((("Attempt to take " + toString(bX)) + " from warehouse, but only ") + toString(bS)) + " available")) | |
348 | + | else $Tuple10((bK + 1), (bI._2 :+ toString((bS - bX))), bI._3, (bI._4 - bR), bI._5, bI._6, bI._7, bM, bh((bS - bX), y, bM), bI._10) | |
351 | 349 | } | |
352 | - | else if ((0 > ( | |
353 | - | then throw((((("Attempt to take " + toString(-( | |
354 | - | else $Tuple10(( | |
350 | + | else if ((0 > (bS + bO))) | |
351 | + | then throw((((("Attempt to take " + toString(-(bO))) + " from warehouse, but only ") + toString(bS)) + " available")) | |
352 | + | else $Tuple10((bK + 1), (bI._2 :+ toString((bS + bO))), bI._3, (bI._4 - bR), (bI._5 - bW), bI._6, bI._7, bM, bh((bS + bO), y, bM), bI._10) | |
355 | 353 | } | |
356 | 354 | } | |
357 | 355 | } | |
358 | 356 | ||
359 | 357 | ||
360 | - | func | |
361 | - | let | |
362 | - | let | |
363 | - | let | |
358 | + | func bY (bZ,ca,cb) = { | |
359 | + | let cc = split(bZ[A], "_") | |
360 | + | let cd = split(bZ[B], "_") | |
361 | + | let ce = if ((bZ[C] == "")) | |
364 | 362 | then nil | |
365 | - | else split_4C( | |
366 | - | let | |
367 | - | let | |
368 | - | let | |
363 | + | else split_4C(bZ[C], "_") | |
364 | + | let cf = split(ca[bb], "_") | |
365 | + | let cg = split(ca[bc], "_") | |
366 | + | let ch = if ((ca[bd] == "")) | |
369 | 367 | then nil | |
370 | - | else split_4C( | |
371 | - | if ((size( | |
368 | + | else split_4C(ca[bd], "_") | |
369 | + | if ((size(cb) != 3)) | |
372 | 370 | then throw("newOrderStr should contain exactly 2 ':' separators") | |
373 | 371 | else { | |
374 | - | let | |
375 | - | let | |
376 | - | let | |
372 | + | let ci = split(cb[0], "_") | |
373 | + | let cj = split(cb[1], "_") | |
374 | + | let ck = if ((cb[2] == "")) | |
377 | 375 | then nil | |
378 | - | else split_4C( | |
379 | - | if ((size( | |
376 | + | else split_4C(cb[2], "_") | |
377 | + | if ((size(ci) != f)) | |
380 | 378 | then throw("All 6 resources should be passed") | |
381 | - | else if ((size( | |
379 | + | else if ((size(cj) != f)) | |
382 | 380 | then throw("All 6 materials should be passed") | |
383 | 381 | else { | |
384 | - | let | |
385 | - | let | |
386 | - | let | |
387 | - | let | |
388 | - | func | |
389 | - | then | |
390 | - | else | |
382 | + | let cl = { | |
383 | + | let cm = p | |
384 | + | let cn = size(cm) | |
385 | + | let co = $Tuple10(0, nil, 0, 0, 0, cc, cf, false, 0, ci) | |
386 | + | func cp (cq,cr) = if ((cr >= cn)) | |
387 | + | then cq | |
388 | + | else bH(cq, cm[cr]) | |
391 | 389 | ||
392 | - | func | |
393 | - | then | |
390 | + | func cs (cq,cr) = if ((cr >= cn)) | |
391 | + | then cq | |
394 | 392 | else throw("List size exceeds 6") | |
395 | 393 | ||
396 | - | | |
394 | + | cs(cp(cp(cp(cp(cp(cp(co, 0), 1), 2), 3), 4), 5), 6) | |
397 | 395 | } | |
398 | - | let | |
399 | - | let | |
400 | - | let | |
401 | - | let | |
402 | - | func | |
403 | - | then | |
404 | - | else | |
396 | + | let bz = { | |
397 | + | let cm = q | |
398 | + | let cn = size(cm) | |
399 | + | let co = $Tuple10(0, nil, cl._3, cl._4, cl._5, cd, cg, false, cl._9, cj) | |
400 | + | func ct (cq,cr) = if ((cr >= cn)) | |
401 | + | then cq | |
402 | + | else bH(cq, cm[cr]) | |
405 | 403 | ||
406 | - | func | |
407 | - | then | |
404 | + | func cu (cq,cr) = if ((cr >= cn)) | |
405 | + | then cq | |
408 | 406 | else throw("List size exceeds 6") | |
409 | 407 | ||
410 | - | | |
408 | + | cu(ct(ct(ct(ct(ct(ct(co, 0), 1), 2), 3), 4), 5), 6) | |
411 | 409 | } | |
412 | - | let | |
413 | - | let | |
414 | - | let | |
415 | - | let | |
416 | - | func | |
417 | - | then | |
418 | - | else | |
410 | + | let bg = { | |
411 | + | let cm = r | |
412 | + | let cn = size(cm) | |
413 | + | let co = $Tuple10(0, nil, bz._3, bz._4, bz._5, ce, ch, true, bz._9, ck) | |
414 | + | func cv (cq,cr) = if ((cr >= cn)) | |
415 | + | then cq | |
416 | + | else bH(cq, cm[cr]) | |
419 | 417 | ||
420 | - | func | |
421 | - | then | |
418 | + | func cw (cq,cr) = if ((cr >= cn)) | |
419 | + | then cq | |
422 | 420 | else throw("List size exceeds 50") | |
423 | 421 | ||
424 | - | | |
422 | + | cw(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(co, 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) | |
425 | 423 | } | |
426 | - | $Tuple7( | |
424 | + | $Tuple7(cl._2, bz._2, bg._2, bg._3, bg._4, bg._5, bg._9) | |
427 | 425 | } | |
428 | 426 | } | |
429 | 427 | } | |
430 | 428 | ||
431 | 429 | ||
432 | - | func | |
433 | - | let | |
434 | - | let | |
435 | - | let | |
436 | - | if ((size( | |
430 | + | func cx (bI,cy) = { | |
431 | + | let bK = bI._7 | |
432 | + | let bM = bI._12 | |
433 | + | let cz = split(cy, "@") | |
434 | + | if ((size(cz) != 2)) | |
437 | 435 | then throw("Incorrect order format, should be amount@price") | |
438 | 436 | else { | |
439 | - | let | |
440 | - | let | |
441 | - | if ((0 > | |
437 | + | let cA = parseIntValue(cz[0]) | |
438 | + | let cB = parseIntValue(cz[1]) | |
439 | + | if ((0 > cB)) | |
442 | 440 | then throw("Price can't be negative") | |
443 | 441 | else { | |
444 | - | let | |
445 | - | then ( | |
446 | - | else fraction(cB, | |
447 | - | let | |
448 | - | then parseIntValue( | |
442 | + | let cC = if (bM) | |
443 | + | then (cA * cB) | |
444 | + | else fraction(cA, cB, al) | |
445 | + | let cD = if ((size(bI._8) > bK)) | |
446 | + | then parseIntValue(bI._8[bK]) | |
449 | 447 | else 0 | |
450 | - | let | |
451 | - | then parseIntValue( | |
448 | + | let bS = if ((size(bI._9) > bK)) | |
449 | + | then parseIntValue(bI._9[bK]) | |
452 | 450 | else 0 | |
453 | - | let | |
454 | - | then | |
451 | + | let cE = if ((size(bI._10) > bK)) | |
452 | + | then bI._10[bK] | |
455 | 453 | else "0@0" | |
456 | - | let | |
457 | - | let | |
458 | - | let | |
459 | - | if (if (( | |
460 | - | then ( | |
454 | + | let cF = split(cE, "@") | |
455 | + | let cG = parseIntValue(cF[0]) | |
456 | + | let cH = parseIntValue(cF[1]) | |
457 | + | if (if ((cA != 0)) | |
458 | + | then (cB != cH) | |
461 | 459 | else false) | |
462 | - | then throw(((((("Prices of " + | |
460 | + | then throw(((((("Prices of " + bI._11[bK]) + " don't match! WH price=") + toString(cH)) + ", your price=") + toString(cB))) | |
463 | 461 | else { | |
464 | - | let | |
465 | - | then ( | |
466 | - | else fraction(cH, | |
467 | - | let | |
468 | - | if (( | |
469 | - | then $Tuple13(( | |
470 | - | else if (( | |
471 | - | then if ((0 > | |
472 | - | then if (( | |
473 | - | then throw(((((("Attempt to buy " + toString( | |
474 | - | else $Tuple13(( | |
475 | - | then ( | |
476 | - | else | |
477 | - | else throw((("Attempt to buy " + | |
478 | - | else if (( | |
479 | - | then if ((-( | |
480 | - | then throw(((((("Attempt to sell " + toString(-( | |
481 | - | else if ((-( | |
482 | - | then throw(((((("Attempt to sell " + toString(-( | |
483 | - | else $Tuple13(( | |
484 | - | then ( | |
485 | - | else | |
486 | - | else throw((("Attempt to sell " + | |
462 | + | let cI = if (bM) | |
463 | + | then (cG * cH) | |
464 | + | else fraction(cG, cH, al) | |
465 | + | let cJ = bh(cA, y, bM) | |
466 | + | if ((cA == 0)) | |
467 | + | then $Tuple13((bI._1 :+ toString(bS)), (bI._2 :+ cE), (bI._3 :+ toString(cD)), bI._4, bI._5, bI._6, (bI._7 + 1), bI._8, bI._9, bI._10, bI._11, bM, bI._13) | |
468 | + | else if ((cA > 0)) | |
469 | + | then if ((0 > cG)) | |
470 | + | then if ((cA > -(cG))) | |
471 | + | then throw(((((("Attempt to buy " + toString(cA)) + " of ") + bI._11[bK]) + ", but warehouse only sells ") + toString(-(cG)))) | |
472 | + | else $Tuple13((bI._1 :+ toString(bS)), (bI._2 :+ ((toString((cG + cA)) + "@") + toString(cH))), (bI._3 :+ toString((cD + cA))), (bI._4 + cJ), bI._5, (bI._6 + cC), (bI._7 + 1), bI._8, bI._9, bI._10, bI._11, bM, (bI._13 + (if (bM) | |
473 | + | then (cA * al) | |
474 | + | else cA))) | |
475 | + | else throw((("Attempt to buy " + bI._11[bK]) + " while warehouse doesn't sell it")) | |
476 | + | else if ((cG > 0)) | |
477 | + | then if ((-(cA) > cG)) | |
478 | + | then throw(((((("Attempt to sell " + toString(-(cA))) + " of ") + bI._11[bK]) + ", but warehouse only buys ") + toString(cG))) | |
479 | + | else if ((-(cA) > cD)) | |
480 | + | then throw(((((("Attempt to sell " + toString(-(cA))) + ", but you only have ") + toString(cD)) + " of ") + bI._11[bK])) | |
481 | + | else $Tuple13((bI._1 :+ toString((bS - cA))), (bI._2 :+ ((toString((cG + cA)) + "@") + toString(cH))), (bI._3 :+ toString((cD + cA))), (bI._4 - cJ), (bI._5 - cC), bI._6, (bI._7 + 1), bI._8, bI._9, bI._10, bI._11, bM, (bI._13 - (if (bM) | |
482 | + | then (cA * al) | |
483 | + | else cA))) | |
484 | + | else throw((("Attempt to sell " + bI._11[bK]) + " while warehouse doesn't buy it")) | |
487 | 485 | } | |
488 | 486 | } | |
489 | 487 | } | |
490 | 488 | } | |
491 | 489 | ||
492 | 490 | ||
493 | - | func | |
494 | - | func | |
495 | - | then throw(((((("You have " + | |
496 | - | else if ((0 > | |
497 | - | then throw(((("You tried to sell negative amount of " + p[ | |
498 | - | else if (( | |
491 | + | func cK (cL,cM,cN,cO) = { | |
492 | + | func cP (bI,bK) = if ((cN[bK] > parseIntValue(cL[bK]))) | |
493 | + | then throw(((((("You have " + cL[bK]) + " of ") + p[bK]) + ", but tried to sell ") + toString(cN[bK]))) | |
494 | + | else if ((0 > cN[bK])) | |
495 | + | then throw(((("You tried to sell negative amount of " + p[bK]) + ": ") + toString(cN[bK]))) | |
496 | + | else if ((cN[bK] > 0)) | |
499 | 497 | then { | |
500 | - | let | |
501 | - | $Tuple4(( | |
498 | + | let cQ = bm(cM, bK, cN[bK], cO[bK]) | |
499 | + | $Tuple4((bI._1 :+ cQ._1), (bI._2 :+ toString((parseIntValue(cL[bK]) - cN[bK]))), (bI._3 + cQ._2), (bI._4 + cN[bK])) | |
502 | 500 | } | |
503 | - | else $Tuple4( | |
501 | + | else $Tuple4(bI._1, (bI._2 :+ cL[bK]), bI._3, bI._4) | |
504 | 502 | ||
505 | - | let | |
506 | - | let | |
507 | - | let | |
508 | - | func | |
509 | - | then | |
510 | - | else | |
503 | + | let cm = ao | |
504 | + | let cn = size(cm) | |
505 | + | let co = $Tuple4(nil, nil, 0, 0) | |
506 | + | func cp (cq,cr) = if ((cr >= cn)) | |
507 | + | then cq | |
508 | + | else cP(cq, cm[cr]) | |
511 | 509 | ||
512 | - | func | |
513 | - | then | |
510 | + | func cs (cq,cr) = if ((cr >= cn)) | |
511 | + | then cq | |
514 | 512 | else throw("List size exceeds 6") | |
515 | 513 | ||
516 | - | | |
514 | + | cs(cp(cp(cp(cp(cp(cp(co, 0), 1), 2), 3), 4), 5), 6) | |
517 | 515 | } | |
518 | 516 | ||
519 | 517 | ||
520 | - | func | |
521 | - | func | |
522 | - | then throw(((("You tried to buy negative amount of " + q[ | |
523 | - | else if (( | |
518 | + | func cR (cS,cM,cN,cT) = { | |
519 | + | func cU (bI,bK) = if ((0 > cN[bK])) | |
520 | + | then throw(((("You tried to buy negative amount of " + q[bK]) + ": ") + toString(cN[bK]))) | |
521 | + | else if ((cN[bK] > 0)) | |
524 | 522 | then { | |
525 | - | let | |
526 | - | $Tuple4(( | |
523 | + | let cQ = bu(cM, bK, cN[bK], cT[bK]) | |
524 | + | $Tuple4((bI._1 :+ cQ._1), (bI._2 :+ toString((parseIntValue(cS[bK]) + cQ._3))), (bI._3 + cQ._2), (bI._4 + cN[bK])) | |
527 | 525 | } | |
528 | - | else $Tuple4( | |
526 | + | else $Tuple4(bI._1, (bI._2 :+ cS[bK]), bI._3, bI._4) | |
529 | 527 | ||
530 | - | let | |
531 | - | let | |
532 | - | let | |
533 | - | func | |
534 | - | then | |
535 | - | else | |
528 | + | let cm = ao | |
529 | + | let cn = size(cm) | |
530 | + | let co = $Tuple4(nil, nil, 0, 0) | |
531 | + | func cp (cq,cr) = if ((cr >= cn)) | |
532 | + | then cq | |
533 | + | else cU(cq, cm[cr]) | |
536 | 534 | ||
537 | - | func | |
538 | - | then | |
535 | + | func cs (cq,cr) = if ((cr >= cn)) | |
536 | + | then cq | |
539 | 537 | else throw("List size exceeds 6") | |
540 | 538 | ||
541 | - | | |
539 | + | cs(cp(cp(cp(cp(cp(cp(co, 0), 1), 2), 3), 4), 5), 6) | |
542 | 540 | } | |
543 | 541 | ||
544 | 542 | ||
545 | - | func | |
546 | - | func | |
547 | - | let | |
548 | - | if (( | |
549 | - | then throw(((((("You have " + | |
550 | - | else if ((0 > | |
551 | - | then throw(((("You tried to exchange negative amount of " + p[ | |
552 | - | else if (( | |
553 | - | then $Tuple4(( | |
554 | - | else $Tuple4(( | |
543 | + | func cV (cL,cS,cN) = { | |
544 | + | func cW (bI,bK) = { | |
545 | + | let cX = cN[bK] | |
546 | + | if ((cX > parseIntValue(cL[bK]))) | |
547 | + | then throw(((((("You have " + cL[bK]) + " of ") + p[bK]) + ", but tried to exchange ") + toString(cX))) | |
548 | + | else if ((0 > cX)) | |
549 | + | then throw(((("You tried to exchange negative amount of " + p[bK]) + ": ") + toString(cX))) | |
550 | + | else if ((cX > 0)) | |
551 | + | then $Tuple4((bI._1 :+ toString((parseIntValue(cL[bK]) - cX))), (bI._2 :+ toString((parseIntValue(cS[bK]) + cX))), (bI._3 + fraction(cX, h, al)), (bI._4 + cX)) | |
552 | + | else $Tuple4((bI._1 :+ cL[bK]), (bI._2 :+ cS[bK]), bI._3, bI._4) | |
555 | 553 | } | |
556 | 554 | ||
557 | - | let | |
558 | - | let | |
559 | - | let | |
560 | - | func | |
561 | - | then | |
562 | - | else | |
555 | + | let cm = ao | |
556 | + | let cn = size(cm) | |
557 | + | let co = $Tuple4(nil, nil, 0, 0) | |
558 | + | func cp (cq,cr) = if ((cr >= cn)) | |
559 | + | then cq | |
560 | + | else cW(cq, cm[cr]) | |
563 | 561 | ||
564 | - | func | |
565 | - | then | |
562 | + | func cs (cq,cr) = if ((cr >= cn)) | |
563 | + | then cq | |
566 | 564 | else throw("List size exceeds 6") | |
567 | 565 | ||
568 | - | | |
566 | + | cs(cp(cp(cp(cp(cp(cp(co, 0), 1), 2), 3), 4), 5), 6) | |
569 | 567 | } | |
570 | 568 | ||
571 | 569 | ||
572 | - | func | |
570 | + | func cY (cZ,da,db) = if ((cZ > 0)) | |
573 | 571 | then { | |
574 | - | let | |
575 | - | if (( | |
576 | - | then throw(("This trade does not cover delivery cost of " + | |
572 | + | let dc = fraction(cZ, aV, ak) | |
573 | + | if ((db >= (cZ - (3 * dc)))) | |
574 | + | then throw(("This trade does not cover delivery cost of " + aM(db, 6))) | |
577 | 575 | else { | |
578 | - | let | |
579 | - | let | |
580 | - | let | |
581 | - | (((if (isDefined( | |
582 | - | then [ScriptTransfer(addressFromStringValue(value( | |
583 | - | else nil) :+ ScriptTransfer( | |
576 | + | let dd = Q(da) | |
577 | + | let de = getString(aD, dd) | |
578 | + | let df = addressFromStringValue(da) | |
579 | + | (((if (isDefined(de)) | |
580 | + | then [ScriptTransfer(addressFromStringValue(value(de)), dc, af)] | |
581 | + | else nil) :+ ScriptTransfer(df, ((cZ - (3 * dc)) - db), af)) :+ ScriptTransfer(aC, dc, af)) | |
584 | 582 | } | |
585 | 583 | } | |
586 | 584 | else nil | |
587 | 585 | ||
588 | 586 | ||
589 | - | func | |
590 | - | then if ((size( | |
587 | + | func dg (dh,di,dj,dk) = if ((dh > 0)) | |
588 | + | then if ((size(di) != 1)) | |
591 | 589 | then throw("exactly 1 payment must be attached") | |
592 | 590 | else { | |
593 | - | let | |
594 | - | let | |
595 | - | if (if (!(isDefined( | |
591 | + | let dl = di[0] | |
592 | + | let dm = dl.amount | |
593 | + | if (if (!(isDefined(dl.assetId))) | |
596 | 594 | then true | |
597 | - | else (value( | |
595 | + | else (value(dl.assetId) != af)) | |
598 | 596 | then throw("USDT payments only!") | |
599 | 597 | else { | |
600 | - | let | |
601 | - | if (( | |
602 | - | then throw((((((("Insufficient payment! Attached=" + | |
603 | - | else if (( | |
604 | - | then throw(("Min shop trade is " + | |
598 | + | let dn = (dh + dk) | |
599 | + | if ((dm != dn)) | |
600 | + | then throw((((((("Insufficient payment! Attached=" + aM(dm, 6)) + ", required=") + aM(dh, 6)) + "+") + aM(dk, 6)) + "(delivery fee)")) | |
601 | + | else if ((an > dh)) | |
602 | + | then throw(("Min shop trade is " + aM(an, 6))) | |
605 | 603 | else { | |
606 | - | let | |
607 | - | let | |
608 | - | let | |
609 | - | (((if (isDefined( | |
610 | - | then [ScriptTransfer(addressFromStringValue(value( | |
611 | - | else nil) :+ ScriptTransfer(addressFromStringValue( | |
604 | + | let do = fraction(dh, aV, ak) | |
605 | + | let dd = Q(dj) | |
606 | + | let de = getString(aD, dd) | |
607 | + | (((if (isDefined(de)) | |
608 | + | then [ScriptTransfer(addressFromStringValue(value(de)), do, af)] | |
609 | + | else nil) :+ ScriptTransfer(addressFromStringValue(dj), (dh - (3 * do)), af)) :+ ScriptTransfer(aC, do, af)) | |
612 | 610 | } | |
613 | 611 | } | |
614 | 612 | } | |
615 | - | else if ((size( | |
613 | + | else if ((size(di) != 0)) | |
616 | 614 | then throw("No payments needed") | |
617 | 615 | else nil | |
618 | 616 | ||
619 | 617 | ||
620 | - | func | |
621 | - | let | |
622 | - | if (!(isDefined(getInteger( | |
623 | - | then throw((("NFT " + | |
618 | + | func dp (dq,da,dr,ds,dt,du) = { | |
619 | + | let dv = value(assetInfo(fromBase58String(dq))) | |
620 | + | if (!(isDefined(getInteger(aD, P(dq))))) | |
621 | + | then throw((("NFT " + dv.name) + " is not staked")) | |
624 | 622 | else { | |
625 | - | let | |
626 | - | if (( | |
623 | + | let dj = valueOrErrorMessage(getString(aD, N(dq)), (("NFT " + dv.name) + " is orphaned")) | |
624 | + | if ((dj == da)) | |
627 | 625 | then throw("You cannot trade with yourself") | |
628 | 626 | else { | |
629 | - | let | |
630 | - | if ((size( | |
627 | + | let dw = split_4C(dr, ":") | |
628 | + | if ((size(dw) != 3)) | |
631 | 629 | then throw("bpOrderStr should contain exactly 2 ':' separators") | |
632 | 630 | else { | |
633 | - | let | |
634 | - | let | |
635 | - | let | |
631 | + | let dx = split(dw[0], "_") | |
632 | + | let dy = split(dw[1], "_") | |
633 | + | let dz = if ((dw[2] == "")) | |
636 | 634 | then nil | |
637 | - | else split_4C( | |
638 | - | if ((size( | |
635 | + | else split_4C(dw[2], "_") | |
636 | + | if ((size(dx) != f)) | |
639 | 637 | then throw("All 6 resources should be passed") | |
640 | - | else if ((size( | |
638 | + | else if ((size(dy) != f)) | |
641 | 639 | then throw("All 6 materials should be passed") | |
642 | 640 | else { | |
643 | - | let | |
644 | - | let | |
645 | - | let | |
646 | - | let | |
647 | - | let | |
641 | + | let dA = aG(invoke(aD, "getWarehouseREADONLY", [dq], nil)) | |
642 | + | let bZ = split_4C(dA, ":") | |
643 | + | let cc = split(bZ[A], "_") | |
644 | + | let cd = split(bZ[B], "_") | |
645 | + | let ce = if ((bZ[C] == "")) | |
648 | 646 | then nil | |
649 | - | else split_4C( | |
650 | - | let | |
651 | - | let | |
652 | - | let | |
653 | - | let | |
654 | - | let | |
655 | - | let | |
647 | + | else split_4C(bZ[C], "_") | |
648 | + | let dB = parseIntValue(split(bZ[D], "_")[E]) | |
649 | + | let bf = X(dq) | |
650 | + | let dC = be(bf) | |
651 | + | let dD = split(dC[bb], "_") | |
652 | + | let dE = split(dC[bc], "_") | |
653 | + | let dF = if ((dC[bd] == "")) | |
656 | 654 | then nil | |
657 | - | else split_4C( | |
658 | - | let | |
659 | - | let | |
660 | - | let | |
661 | - | let | |
662 | - | func | |
663 | - | then | |
664 | - | else | |
655 | + | else split_4C(dC[bd], "_") | |
656 | + | let cl = { | |
657 | + | let cm = dx | |
658 | + | let cn = size(cm) | |
659 | + | let co = $Tuple13(nil, nil, nil, 0, 0, 0, 0, ds, cc, dD, p, false, 0) | |
660 | + | func cp (cq,cr) = if ((cr >= cn)) | |
661 | + | then cq | |
662 | + | else cx(cq, cm[cr]) | |
665 | 663 | ||
666 | - | func | |
667 | - | then | |
664 | + | func cs (cq,cr) = if ((cr >= cn)) | |
665 | + | then cq | |
668 | 666 | else throw("List size exceeds 6") | |
669 | 667 | ||
670 | - | | |
668 | + | cs(cp(cp(cp(cp(cp(cp(co, 0), 1), 2), 3), 4), 5), 6) | |
671 | 669 | } | |
672 | - | let | |
673 | - | let | |
674 | - | let | |
675 | - | let | |
676 | - | func | |
677 | - | then | |
678 | - | else | |
670 | + | let bz = { | |
671 | + | let cm = dy | |
672 | + | let cn = size(cm) | |
673 | + | let co = $Tuple13(nil, nil, nil, cl._4, cl._5, cl._6, 0, dt, cd, dE, q, false, cl._13) | |
674 | + | func ct (cq,cr) = if ((cr >= cn)) | |
675 | + | then cq | |
676 | + | else cx(cq, cm[cr]) | |
679 | 677 | ||
680 | - | func | |
681 | - | then | |
678 | + | func cu (cq,cr) = if ((cr >= cn)) | |
679 | + | then cq | |
682 | 680 | else throw("List size exceeds 6") | |
683 | 681 | ||
684 | - | | |
682 | + | cu(ct(ct(ct(ct(ct(ct(co, 0), 1), 2), 3), 4), 5), 6) | |
685 | 683 | } | |
686 | - | let | |
684 | + | let bg = if ((size(dz) != 0)) | |
687 | 685 | then { | |
688 | - | let | |
689 | - | let | |
690 | - | let | |
691 | - | func | |
692 | - | then | |
693 | - | else | |
686 | + | let cm = dz | |
687 | + | let cn = size(cm) | |
688 | + | let co = $Tuple13(nil, nil, nil, bz._4, bz._5, bz._6, 0, du, ce, dF, r, true, bz._13) | |
689 | + | func cv (cq,cr) = if ((cr >= cn)) | |
690 | + | then cq | |
691 | + | else cx(cq, cm[cr]) | |
694 | 692 | ||
695 | - | func | |
696 | - | then | |
693 | + | func cw (cq,cr) = if ((cr >= cn)) | |
694 | + | then cq | |
697 | 695 | else throw("List size exceeds 50") | |
698 | 696 | ||
699 | - | | |
697 | + | cw(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(co, 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) | |
700 | 698 | } | |
701 | - | else $Tuple13( | |
702 | - | let | |
703 | - | let | |
699 | + | else $Tuple13(ce, dF, du, bz._4, bz._5, bz._6, 0, du, ce, dF, r, true, bz._13) | |
700 | + | let dG = bg._4 | |
701 | + | let dH = if ((0 > (dB - dG))) | |
704 | 702 | then 0 | |
705 | - | else ( | |
706 | - | let | |
707 | - | let | |
708 | - | let | |
709 | - | let | |
710 | - | $Tuple10(StringEntry( | |
703 | + | else (dB - dG) | |
704 | + | let dI = makeString_2C([bZ[z], makeString(cl._1, "_"), makeString(bz._1, "_"), makeString_2C(bg._1, "_"), toString(dH)], ":") | |
705 | + | let dJ = makeString_2C([makeString(cl._2, "_"), makeString(bz._2, "_"), makeString_2C(bg._2, "_")], ":") | |
706 | + | let dK = aG(invoke(aD, "saveWarehouse", [dI, dq], nil)) | |
707 | + | let dL = aJ(invoke(aD, "updateAccStats", [dj, fraction(d, bg._13, al)], nil)) | |
708 | + | $Tuple10(StringEntry(bf, dJ), cl._3, bz._3, bg._3, bg._5, bg._6, bg._13, dj, dK, dL) | |
711 | 709 | } | |
712 | 710 | } | |
713 | 711 | } | |
715 | 713 | } | |
716 | 714 | ||
717 | 715 | ||
718 | - | func | |
719 | - | let | |
720 | - | let | |
721 | - | let | |
722 | - | let | |
723 | - | let | |
724 | - | func | |
725 | - | let | |
726 | - | $Tuple3(( | |
716 | + | func dM (bi) = { | |
717 | + | let dN = (bi / 30) | |
718 | + | let dO = [dN, dN, dN, dN, dN, dN] | |
719 | + | let aI = toString(dN) | |
720 | + | let cL = [aI, aI, aI, aI, aI, aI] | |
721 | + | let cO = [0, 0, 0, 0, 0, 0] | |
722 | + | func dP (bI,dQ) = { | |
723 | + | let dR = cK(cL, dQ, dO, cO) | |
724 | + | $Tuple3((bI._1 ++ dR._1), (bI._2 + dR._3), (bI._3 + dR._4)) | |
727 | 725 | } | |
728 | 726 | ||
729 | - | let | |
730 | - | let | |
731 | - | let | |
732 | - | let | |
733 | - | func | |
734 | - | then | |
735 | - | else | |
727 | + | let dS = { | |
728 | + | let cm = s | |
729 | + | let cn = size(cm) | |
730 | + | let co = $Tuple3(nil, 0, 0) | |
731 | + | func cp (cq,cr) = if ((cr >= cn)) | |
732 | + | then cq | |
733 | + | else dP(cq, cm[cr]) | |
736 | 734 | ||
737 | - | func | |
738 | - | then | |
735 | + | func cs (cq,cr) = if ((cr >= cn)) | |
736 | + | then cq | |
739 | 737 | else throw("List size exceeds 5") | |
740 | 738 | ||
741 | - | | |
739 | + | cs(cp(cp(cp(cp(cp(co, 0), 1), 2), 3), 4), 5) | |
742 | 740 | } | |
743 | - | let | |
744 | - | let | |
745 | - | let | |
746 | - | let | |
747 | - | let | |
748 | - | let | |
749 | - | $Tuple5( | |
741 | + | let dT = dS._1 | |
742 | + | let bs = dS._2 | |
743 | + | let dU = dS._3 | |
744 | + | let dV = fraction(bs, aW, ak) | |
745 | + | let dW = (bs / 100) | |
746 | + | let dX = ((bs - dW) - dV) | |
747 | + | $Tuple5(dT, dX, dV, dW, dU) | |
750 | 748 | } | |
751 | 749 | ||
752 | 750 | ||
753 | - | func | |
751 | + | func dY (cS,dZ,ea,eb,ec) = if ((0 >= ec)) | |
754 | 752 | then throw("Quantity should be positive") | |
755 | - | else if (if ((0 > | |
753 | + | else if (if ((0 > eb)) | |
756 | 754 | then true | |
757 | - | else ( | |
758 | - | then throw(("Unknown product idx=" + toString( | |
755 | + | else (eb >= size(u))) | |
756 | + | then throw(("Unknown product idx=" + toString(eb))) | |
759 | 757 | else { | |
760 | - | let ad = split(u[ | |
758 | + | let ad = split(u[eb], "_") | |
761 | 759 | if ((size(ad) != x)) | |
762 | - | then throw(("Fatal: unknown recipe: " + u[ | |
760 | + | then throw(("Fatal: unknown recipe: " + u[eb])) | |
763 | 761 | else { | |
764 | - | let | |
765 | - | if ((s[ | |
766 | - | then throw(((("This product is available in " + s[ | |
762 | + | let ed = parseIntValue(ad[w]) | |
763 | + | if ((s[ed] != ea)) | |
764 | + | then throw(((("This product is available in " + s[ed]) + ", not in ") + ea)) | |
767 | 765 | else { | |
768 | - | func | |
769 | - | let | |
770 | - | let | |
771 | - | then | |
766 | + | func ee (bI,ef) = { | |
767 | + | let aK = bI._2 | |
768 | + | let eg = if ((size(dZ) > aK)) | |
769 | + | then dZ[aK] | |
772 | 770 | else "0" | |
773 | - | let | |
774 | - | let | |
775 | - | let | |
776 | - | then toString(( | |
777 | - | else | |
778 | - | $Tuple2(( | |
771 | + | let dR = parseIntValue(eg) | |
772 | + | let bi = (ec * y) | |
773 | + | let eh = if ((aK == eb)) | |
774 | + | then toString((dR + bi)) | |
775 | + | else eg | |
776 | + | $Tuple2((bI._1 :+ eh), (aK + 1)) | |
779 | 777 | } | |
780 | 778 | ||
781 | - | let | |
782 | - | let | |
783 | - | let | |
784 | - | func | |
785 | - | then | |
786 | - | else | |
779 | + | let ei = ( let cm = u | |
780 | + | let cn = size(cm) | |
781 | + | let co = $Tuple2(nil, 0) | |
782 | + | func cp (cq,cr) = if ((cr >= cn)) | |
783 | + | then cq | |
784 | + | else ee(cq, cm[cr]) | |
787 | 785 | ||
788 | - | func | |
789 | - | then | |
786 | + | func cs (cq,cr) = if ((cr >= cn)) | |
787 | + | then cq | |
790 | 788 | else throw("List size exceeds 50") | |
791 | 789 | ||
792 | - | | |
793 | - | func | |
794 | - | let | |
795 | - | let | |
796 | - | if (( | |
797 | - | then throw(((((((("You have " + | |
798 | - | else if (( | |
799 | - | then $Tuple2(( | |
800 | - | else $Tuple2(( | |
790 | + | cs(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(co, 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 | |
791 | + | func ej (bI,bK) = { | |
792 | + | let ek = (((parseIntValue(ad[bK]) * aj) * ec) * parseIntValue(ad[v])) | |
793 | + | let el = parseIntValue(cS[bK]) | |
794 | + | if ((ek > el)) | |
795 | + | then throw(((((((("You have " + aM(el, 8)) + " of ") + q[bK]) + ", but recipe requires ") + aM(ek, 8)) + " for quantity ") + toString(ec))) | |
796 | + | else if ((ek > 0)) | |
797 | + | then $Tuple2((bI._1 :+ toString((el - ek))), (bI._2 + ek)) | |
798 | + | else $Tuple2((bI._1 :+ cS[bK]), bI._2) | |
801 | 799 | } | |
802 | 800 | ||
803 | - | let | |
804 | - | let | |
805 | - | let | |
806 | - | let | |
807 | - | func | |
808 | - | then | |
809 | - | else | |
801 | + | let em = { | |
802 | + | let cm = ao | |
803 | + | let cn = size(cm) | |
804 | + | let co = $Tuple2(nil, 0) | |
805 | + | func ct (cq,cr) = if ((cr >= cn)) | |
806 | + | then cq | |
807 | + | else ej(cq, cm[cr]) | |
810 | 808 | ||
811 | - | func | |
812 | - | then | |
809 | + | func cu (cq,cr) = if ((cr >= cn)) | |
810 | + | then cq | |
813 | 811 | else throw("List size exceeds 6") | |
814 | 812 | ||
815 | - | | |
813 | + | cu(ct(ct(ct(ct(ct(ct(co, 0), 1), 2), 3), 4), 5), 6) | |
816 | 814 | } | |
817 | - | $Tuple3( | |
815 | + | $Tuple3(em._1, ei, em._2) | |
818 | 816 | } | |
819 | 817 | } | |
820 | 818 | } | |
821 | 819 | ||
822 | 820 | ||
823 | - | @Callable( | |
824 | - | func recalcLockedVolumeREADONLY (Y, | |
825 | - | let | |
826 | - | let | |
827 | - | $Tuple2(nil, ( | |
821 | + | @Callable(en) | |
822 | + | func recalcLockedVolumeREADONLY (Y,dA) = { | |
823 | + | let ca = be(X(Y)) | |
824 | + | let eo = bY(dA, ca, ca) | |
825 | + | $Tuple2(nil, (eo._4 + eo._5)) | |
828 | 826 | } | |
829 | 827 | ||
830 | 828 | ||
831 | 829 | ||
832 | - | @Callable( | |
833 | - | func constructorV1 ( | |
830 | + | @Callable(en) | |
831 | + | func constructorV1 (ep) = if ((en.caller != this)) | |
834 | 832 | then throw("Permission denied") | |
835 | - | else [StringEntry( | |
833 | + | else [StringEntry(aw(), ep)] | |
836 | 834 | ||
837 | 835 | ||
838 | 836 | ||
839 | - | @Callable( | |
840 | - | func sellResources (cO | |
841 | - | let | |
842 | - | if (( | |
837 | + | @Callable(en) | |
838 | + | func sellResources (cN,cO) = { | |
839 | + | let eq = bG() | |
840 | + | if ((eq == eq)) | |
843 | 841 | then { | |
844 | - | let V = valueOrErrorMessage(getString( | |
845 | - | if ((size( | |
842 | + | let V = valueOrErrorMessage(getString(aD, S(toString(en.caller))), "You don't have a duck staked") | |
843 | + | if ((size(en.payments) != 0)) | |
846 | 844 | then throw("sellResources doesn't require any payments") | |
847 | 845 | else { | |
848 | - | let | |
849 | - | if (( | |
850 | - | then throw(("Duck location type should be Factory, but is " + | |
846 | + | let er = split(valueOrElse(getString(aD, W(V)), g), "_") | |
847 | + | if ((er[L] != "F")) | |
848 | + | then throw(("Duck location type should be Factory, but is " + er[L])) | |
851 | 849 | else { | |
852 | - | let | |
853 | - | let | |
854 | - | let | |
855 | - | let | |
856 | - | let | |
857 | - | let | |
858 | - | let | |
859 | - | let | |
860 | - | let | |
861 | - | let | |
862 | - | let | |
863 | - | $Tuple2((( | |
850 | + | let es = bD(U(V)) | |
851 | + | let cL = split(es[H], "_") | |
852 | + | let et = cK(cL, er[M], cN, cO) | |
853 | + | let dT = et._1 | |
854 | + | let eu = et._2 | |
855 | + | let bs = et._3 | |
856 | + | let dU = et._4 | |
857 | + | let dW = (bs / 100) | |
858 | + | let ev = makeString_2C([es[G], makeString(eu, "_"), es[I], es[J]], ":") | |
859 | + | let ew = aG(invoke(aD, "updateBackpack", [V, ev], nil)) | |
860 | + | let ex = aJ(invoke(aD, "updateDuckStats", [V, fraction(a, dU, al)], nil)) | |
861 | + | $Tuple2(((dT :+ ScriptTransfer(en.caller, (bs - dW), af)) :+ ScriptTransfer(aC, dW, af)), $Tuple3(ew, eq, ex)) | |
864 | 862 | } | |
865 | 863 | } | |
866 | 864 | } | |
869 | 867 | ||
870 | 868 | ||
871 | 869 | ||
872 | - | @Callable( | |
873 | - | func sellResourcesWorld (R, | |
870 | + | @Callable(en) | |
871 | + | func sellResourcesWorld (R,bi) = if ((en.caller != aF)) | |
874 | 872 | then throw("Permission denied") | |
875 | 873 | else { | |
876 | - | let | |
877 | - | let | |
878 | - | let | |
879 | - | let | |
880 | - | let | |
881 | - | let | |
882 | - | if ((0 >= | |
883 | - | then throw(("This trade does not cover delivery cost of " + | |
874 | + | let ey = dM(bi) | |
875 | + | let dT = ey._1 | |
876 | + | let dX = ey._2 | |
877 | + | let dV = ey._3 | |
878 | + | let dW = ey._4 | |
879 | + | let dU = ey._5 | |
880 | + | if ((0 >= dX)) | |
881 | + | then throw(("This trade does not cover delivery cost of " + aM(dV, 6))) | |
884 | 882 | else { | |
885 | - | let | |
886 | - | $Tuple2(((( | |
883 | + | let ex = aJ(invoke(aD, "updateAccStats", [R, fraction(a, dU, al)], nil)) | |
884 | + | $Tuple2((((dT :+ IntegerEntry(aa, (valueOrElse(getInteger(aa), 0) + dV))) :+ ScriptTransfer(aC, dW, af)) :+ ScriptTransfer(aE, dX, af)), $Tuple2(dX, ex)) | |
887 | 885 | } | |
888 | 886 | } | |
889 | 887 | ||
890 | 888 | ||
891 | 889 | ||
892 | - | @Callable( | |
893 | - | func sellResourcesWorldREADONLY ( | |
894 | - | let | |
895 | - | $Tuple2(nil, | |
890 | + | @Callable(en) | |
891 | + | func sellResourcesWorldREADONLY (bi) = { | |
892 | + | let dX = dM(bi)._2 | |
893 | + | $Tuple2(nil, dX) | |
896 | 894 | } | |
897 | 895 | ||
898 | 896 | ||
899 | 897 | ||
900 | - | @Callable(eo) | |
901 | - | func sellResourcesDuckDelivery (cO,cP,eA) = if (!(ae)) | |
902 | - | then throw("Delivery feature is turned off!") | |
903 | - | else { | |
904 | - | let er = bH() | |
905 | - | if ((er == er)) | |
906 | - | then { | |
907 | - | let V = valueOrErrorMessage(getString(aE, S(toString(eo.caller))), "You don't have a duck staked") | |
908 | - | if ((size(eo.payments) != 0)) | |
909 | - | then throw("sellResources doesn't require any payments") | |
898 | + | @Callable(en) | |
899 | + | func sellResourcesDuckDelivery (cN,cO,ez) = { | |
900 | + | let eq = bG() | |
901 | + | if ((eq == eq)) | |
902 | + | then { | |
903 | + | let V = valueOrErrorMessage(getString(aD, S(toString(en.caller))), "You don't have a duck staked") | |
904 | + | if ((size(en.payments) != 0)) | |
905 | + | then throw("sellResources doesn't require any payments") | |
906 | + | else { | |
907 | + | let es = bD(U(V)) | |
908 | + | let cL = split(es[H], "_") | |
909 | + | let eA = cK(cL, ez, cN, cO) | |
910 | + | let dT = eA._1 | |
911 | + | let eu = eA._2 | |
912 | + | let bs = eA._3 | |
913 | + | let dU = eA._4 | |
914 | + | let ev = makeString_2C([es[G], makeString(eu, "_"), es[I], es[J]], ":") | |
915 | + | let ew = aG(invoke(aD, "updateBackpack", [V, ev], nil)) | |
916 | + | let ex = aJ(invoke(aD, "updateDuckStats", [V, fraction(a, dU, al)], nil)) | |
917 | + | let eB = fraction(bs, aW, ak) | |
918 | + | let dV = max([eB, k]) | |
919 | + | let dW = (bs / 100) | |
920 | + | if ((dV >= (bs - dW))) | |
921 | + | then throw(("This trade does not cover delivery cost of " + aM(dV, 6))) | |
922 | + | else { | |
923 | + | let eC = valueOrElse(getInteger(aa), 0) | |
924 | + | $Tuple2((((dT :+ ScriptTransfer(en.caller, ((bs - dW) - dV), af)) :+ IntegerEntry(aa, (eC + dV))) :+ ScriptTransfer(aC, dW, af)), $Tuple3(ew, eq, ex)) | |
925 | + | } | |
926 | + | } | |
927 | + | } | |
928 | + | else throw("Strict value is not equal to itself.") | |
929 | + | } | |
930 | + | ||
931 | + | ||
932 | + | ||
933 | + | @Callable(en) | |
934 | + | func sellResourcesLandDelivery (cN,cO,Y,ez) = { | |
935 | + | let eq = bG() | |
936 | + | if ((eq == eq)) | |
937 | + | then if ((size(en.payments) != 0)) | |
938 | + | then throw("sellResources doesn't require any payments") | |
939 | + | else { | |
940 | + | let eD = en.caller | |
941 | + | let R = toString(eD) | |
942 | + | let eE = value(assetInfo(fromBase58String(Y))) | |
943 | + | if (!(isDefined(getInteger(aD, P(Y))))) | |
944 | + | then throw((("NFT " + eE.name) + " is not staked")) | |
910 | 945 | else { | |
911 | - | let et = bE(U(V)) | |
912 | - | let cM = split(et[H], "_") | |
913 | - | let eB = cL(cM, eA, cO, cP) | |
914 | - | let dU = eB._1 | |
915 | - | let ev = eB._2 | |
916 | - | let bt = eB._3 | |
917 | - | let dV = eB._4 | |
918 | - | let ew = makeString_2C([et[G], makeString(ev, "_"), et[I], et[J]], ":") | |
919 | - | let ex = aH(invoke(aE, "updateBackpack", [V, ew], nil)) | |
920 | - | let ey = aK(invoke(aE, "updateDuckStats", [V, fraction(a, dV, am)], nil)) | |
921 | - | let eC = fraction(bt, aX, al) | |
922 | - | let dW = max([eC, k]) | |
923 | - | let dX = (bt / 100) | |
924 | - | if ((dW >= (bt - dX))) | |
925 | - | then throw(("This trade does not cover delivery cost of " + aN(dW, 6))) | |
946 | + | let eF = valueOrErrorMessage(getString(aD, N(Y)), (("NFT " + eE.name) + " is orphaned")) | |
947 | + | if ((eF != R)) | |
948 | + | then throw((e + " is not yours")) | |
926 | 949 | else { | |
927 | - | let eD = valueOrElse(getInteger(aa), 0) | |
928 | - | $Tuple2((((dU :+ ScriptTransfer(eo.caller, ((bt - dX) - dW), ag)) :+ IntegerEntry(aa, (eD + dW))) :+ ScriptTransfer(aD, dX, ag)), $Tuple3(ex, er, ey)) | |
950 | + | let dA = aG(invoke(aD, "getWarehouseREADONLY", [Y], nil)) | |
951 | + | let bZ = split_4C(dA, ":") | |
952 | + | let cL = split(bZ[A], "_") | |
953 | + | let eG = cK(cL, ez, cN, cO) | |
954 | + | let dT = eG._1 | |
955 | + | let eu = eG._2 | |
956 | + | let bs = eG._3 | |
957 | + | let dU = eG._4 | |
958 | + | let dI = makeString_2C([bZ[z], makeString(eu, "_"), bZ[B], bZ[C], bZ[D]], ":") | |
959 | + | let dK = aG(invoke(aD, "saveWarehouse", [dI, Y], nil)) | |
960 | + | let ex = aJ(invoke(aD, "updateAccStats", [R, fraction(a, dU, al)], nil)) | |
961 | + | let eB = fraction(bs, aW, ak) | |
962 | + | let dV = max([eB, k]) | |
963 | + | let dW = (bs / 100) | |
964 | + | if ((dV >= (bs - dW))) | |
965 | + | then throw(("This trade does not cover delivery cost of " + aM(dV, 6))) | |
966 | + | else { | |
967 | + | let eC = valueOrElse(getInteger(aa), 0) | |
968 | + | $Tuple2((((dT :+ ScriptTransfer(en.caller, ((bs - dW) - dV), af)) :+ IntegerEntry(aa, (eC + dV))) :+ ScriptTransfer(aC, dW, af)), $Tuple3(dK, eq, ex)) | |
969 | + | } | |
929 | 970 | } | |
930 | 971 | } | |
931 | 972 | } | |
932 | - | ||
933 | - | ||
973 | + | else throw("Strict value is not equal to itself.") | |
974 | + | } | |
934 | 975 | ||
935 | 976 | ||
936 | 977 | ||
937 | - | @Callable(eo) | |
938 | - | func sellResourcesLandDelivery (cO,cP,Y,eA) = if (!(ae)) | |
939 | - | then throw("Delivery feature is turned off!") | |
940 | - | else { | |
941 | - | let er = bH() | |
942 | - | if ((er == er)) | |
943 | - | then if ((size(eo.payments) != 0)) | |
944 | - | then throw("sellResources doesn't require any payments") | |
945 | - | else { | |
946 | - | let eE = eo.caller | |
947 | - | let R = toString(eE) | |
948 | - | let eF = value(assetInfo(fromBase58String(Y))) | |
949 | - | if (!(isDefined(getInteger(aE, P(Y))))) | |
950 | - | then throw((("NFT " + eF.name) + " is not staked")) | |
951 | - | else { | |
952 | - | let eG = valueOrErrorMessage(getString(aE, N(Y)), (("NFT " + eF.name) + " is orphaned")) | |
953 | - | if ((eG != R)) | |
954 | - | then throw((e + " is not yours")) | |
955 | - | else { | |
956 | - | let dB = aH(invoke(aE, "getWarehouseREADONLY", [Y], nil)) | |
957 | - | let ca = split_4C(dB, ":") | |
958 | - | let cM = split(ca[A], "_") | |
959 | - | let eH = cL(cM, eA, cO, cP) | |
960 | - | let dU = eH._1 | |
961 | - | let ev = eH._2 | |
962 | - | let bt = eH._3 | |
963 | - | let dV = eH._4 | |
964 | - | let dJ = makeString_2C([ca[z], makeString(ev, "_"), ca[B], ca[C], ca[D]], ":") | |
965 | - | let dL = aH(invoke(aE, "saveWarehouse", [dJ, Y], nil)) | |
966 | - | let ey = aK(invoke(aE, "updateAccStats", [R, fraction(a, dV, am)], nil)) | |
967 | - | let eC = fraction(bt, aX, al) | |
968 | - | let dW = max([eC, k]) | |
969 | - | let dX = (bt / 100) | |
970 | - | if ((dW >= (bt - dX))) | |
971 | - | then throw(("This trade does not cover delivery cost of " + aN(dW, 6))) | |
972 | - | else { | |
973 | - | let eD = valueOrElse(getInteger(aa), 0) | |
974 | - | $Tuple2((((dU :+ ScriptTransfer(eo.caller, ((bt - dX) - dW), ag)) :+ IntegerEntry(aa, (eD + dW))) :+ ScriptTransfer(aD, dX, ag)), $Tuple3(dL, er, ey)) | |
975 | - | } | |
976 | - | } | |
977 | - | } | |
978 | - | } | |
979 | - | else throw("Strict value is not equal to itself.") | |
980 | - | } | |
981 | - | ||
982 | - | ||
983 | - | ||
984 | - | @Callable(eo) | |
985 | - | func buyMaterials (cO,cU) = { | |
986 | - | let er = bH() | |
987 | - | if ((er == er)) | |
978 | + | @Callable(en) | |
979 | + | func buyMaterials (cN,cT) = { | |
980 | + | let eq = bG() | |
981 | + | if ((eq == eq)) | |
988 | 982 | then { | |
989 | - | let V = valueOrErrorMessage(getString( | |
990 | - | if ((size( | |
983 | + | let V = valueOrErrorMessage(getString(aD, S(toString(en.caller))), "You don't have a duck staked") | |
984 | + | if ((size(en.payments) != 1)) | |
991 | 985 | then throw("exactly 1 payment must be attached") | |
992 | 986 | else { | |
993 | - | let | |
994 | - | let | |
995 | - | if (if (!(isDefined( | |
987 | + | let dl = en.payments[0] | |
988 | + | let dm = dl.amount | |
989 | + | if (if (!(isDefined(dl.assetId))) | |
996 | 990 | then true | |
997 | - | else (value( | |
991 | + | else (value(dl.assetId) != af)) | |
998 | 992 | then throw("USDT payments only!") | |
999 | 993 | else { | |
1000 | - | let | |
1001 | - | if (( | |
1002 | - | then throw(("Duck location type should be Factory, but is " + | |
994 | + | let er = split(valueOrElse(getString(aD, W(V)), g), "_") | |
995 | + | if ((er[L] != "F")) | |
996 | + | then throw(("Duck location type should be Factory, but is " + er[L])) | |
1003 | 997 | else { | |
1004 | - | let | |
1005 | - | let | |
1006 | - | let | |
1007 | - | let | |
1008 | - | let | |
1009 | - | let | |
1010 | - | let | |
1011 | - | if (( | |
1012 | - | then throw(((("Insufficient payment! Attached=" + | |
998 | + | let es = bD(U(V)) | |
999 | + | let cS = split(es[I], "_") | |
1000 | + | let eH = cR(cS, er[M], cN, cT) | |
1001 | + | let dT = eH._1 | |
1002 | + | let eI = eH._2 | |
1003 | + | let bB = eH._3 | |
1004 | + | let eJ = eH._4 | |
1005 | + | if ((bB > dm)) | |
1006 | + | then throw(((("Insufficient payment! Attached=" + aM(dm, 6)) + ", required=") + aM(bB, 6))) | |
1013 | 1007 | else { | |
1014 | - | let | |
1015 | - | let | |
1016 | - | let | |
1017 | - | then [ScriptTransfer( | |
1008 | + | let ev = makeString([es[G], es[H], makeString(eI, "_"), es[J]], ":") | |
1009 | + | let ew = aG(invoke(aD, "updateBackpack", [V, ev], nil)) | |
1010 | + | let ay = if (((dm - bB) > 0)) | |
1011 | + | then [ScriptTransfer(en.caller, (dm - bB), af)] | |
1018 | 1012 | else nil | |
1019 | - | let | |
1020 | - | let | |
1021 | - | $Tuple2((( | |
1013 | + | let dW = (bB / 100) | |
1014 | + | let ex = aJ(invoke(aD, "updateDuckStats", [V, fraction(a, eJ, al)], nil)) | |
1015 | + | $Tuple2(((dT ++ ay) :+ ScriptTransfer(aC, dW, af)), $Tuple3(ew, eq, ex)) | |
1022 | 1016 | } | |
1023 | 1017 | } | |
1024 | 1018 | } | |
1029 | 1023 | ||
1030 | 1024 | ||
1031 | 1025 | ||
1032 | - | @Callable(eo) | |
1033 | - | func buyMaterialsDuckDelivery (cO,cU,eA) = if (!(ae)) | |
1034 | - | then throw("Delivery feature is turned off!") | |
1035 | - | else { | |
1036 | - | let er = bH() | |
1037 | - | if ((er == er)) | |
1038 | - | then { | |
1039 | - | let V = valueOrErrorMessage(getString(aE, S(toString(eo.caller))), "You don't have a duck staked") | |
1040 | - | if ((size(eo.payments) != 1)) | |
1041 | - | then throw("exactly 1 payment must be attached") | |
1026 | + | @Callable(en) | |
1027 | + | func buyMaterialsDuckDelivery (cN,cT,ez) = { | |
1028 | + | let eq = bG() | |
1029 | + | if ((eq == eq)) | |
1030 | + | then { | |
1031 | + | let V = valueOrErrorMessage(getString(aD, S(toString(en.caller))), "You don't have a duck staked") | |
1032 | + | if ((size(en.payments) != 1)) | |
1033 | + | then throw("exactly 1 payment must be attached") | |
1034 | + | else { | |
1035 | + | let dl = en.payments[0] | |
1036 | + | let dm = dl.amount | |
1037 | + | if (if (!(isDefined(dl.assetId))) | |
1038 | + | then true | |
1039 | + | else (value(dl.assetId) != af)) | |
1040 | + | then throw("USDT payments only!") | |
1041 | + | else { | |
1042 | + | let es = bD(U(V)) | |
1043 | + | let cS = split(es[I], "_") | |
1044 | + | let eK = cR(cS, ez, cN, cT) | |
1045 | + | let dT = eK._1 | |
1046 | + | let eI = eK._2 | |
1047 | + | let bB = eK._3 | |
1048 | + | let eJ = eK._4 | |
1049 | + | let ev = makeString([es[G], es[H], makeString(eI, "_"), es[J]], ":") | |
1050 | + | let ew = aG(invoke(aD, "updateBackpack", [V, ev], nil)) | |
1051 | + | let ex = aJ(invoke(aD, "updateDuckStats", [V, fraction(a, eJ, al)], nil)) | |
1052 | + | let eB = fraction(bB, aW, ak) | |
1053 | + | let dV = max([eB, k]) | |
1054 | + | let dn = (bB + dV) | |
1055 | + | if ((dn > dm)) | |
1056 | + | then throw((((((("Insufficient payment! Attached=" + aM(dm, 6)) + ", required=") + aM(bB, 6)) + "+") + aM(dV, 6)) + "(delivery fee)")) | |
1057 | + | else { | |
1058 | + | let ay = if (((dm - dn) > 0)) | |
1059 | + | then [ScriptTransfer(en.caller, (dm - dn), af)] | |
1060 | + | else nil | |
1061 | + | let dW = (bB / 100) | |
1062 | + | let eC = valueOrElse(getInteger(aa), 0) | |
1063 | + | $Tuple2((((dT ++ ay) :+ ScriptTransfer(aC, dW, af)) :+ IntegerEntry(aa, (eC + dV))), $Tuple3(ew, eq, ex)) | |
1064 | + | } | |
1065 | + | } | |
1066 | + | } | |
1067 | + | } | |
1068 | + | else throw("Strict value is not equal to itself.") | |
1069 | + | } | |
1070 | + | ||
1071 | + | ||
1072 | + | ||
1073 | + | @Callable(en) | |
1074 | + | func buyMaterialsLandDelivery (cN,cT,Y,ez) = { | |
1075 | + | let eq = bG() | |
1076 | + | if ((eq == eq)) | |
1077 | + | then if ((size(en.payments) != 1)) | |
1078 | + | then throw("exactly 1 payment must be attached") | |
1079 | + | else { | |
1080 | + | let dl = en.payments[0] | |
1081 | + | let dm = dl.amount | |
1082 | + | if (if (!(isDefined(dl.assetId))) | |
1083 | + | then true | |
1084 | + | else (value(dl.assetId) != af)) | |
1085 | + | then throw("USDT payments only!") | |
1042 | 1086 | else { | |
1043 | - | let dm = eo.payments[0] | |
1044 | - | let dn = dm.amount | |
1045 | - | if (if (!(isDefined(dm.assetId))) | |
1046 | - | then true | |
1047 | - | else (value(dm.assetId) != ag)) | |
1048 | - | then throw("USDT payments only!") | |
1087 | + | let eD = en.caller | |
1088 | + | let R = toString(eD) | |
1089 | + | let eE = value(assetInfo(fromBase58String(Y))) | |
1090 | + | if (!(isDefined(getInteger(aD, P(Y))))) | |
1091 | + | then throw((("NFT " + eE.name) + " is not staked")) | |
1049 | 1092 | else { | |
1050 | - | let et = bE(U(V)) | |
1051 | - | let cT = split(et[I], "_") | |
1052 | - | let eL = cS(cT, eA, cO, cU) | |
1053 | - | let dU = eL._1 | |
1054 | - | let eJ = eL._2 | |
1055 | - | let bC = eL._3 | |
1056 | - | let eK = eL._4 | |
1057 | - | let ew = makeString([et[G], et[H], makeString(eJ, "_"), et[J]], ":") | |
1058 | - | let ex = aH(invoke(aE, "updateBackpack", [V, ew], nil)) | |
1059 | - | let ey = aK(invoke(aE, "updateDuckStats", [V, fraction(a, eK, am)], nil)) | |
1060 | - | let eC = fraction(bC, aX, al) | |
1061 | - | let dW = max([eC, k]) | |
1062 | - | let do = (bC + dW) | |
1063 | - | if ((do > dn)) | |
1064 | - | then throw((((((("Insufficient payment! Attached=" + aN(dn, 6)) + ", required=") + aN(bC, 6)) + "+") + aN(dW, 6)) + "(delivery fee)")) | |
1093 | + | let eF = valueOrErrorMessage(getString(aD, N(Y)), (("NFT " + eE.name) + " is orphaned")) | |
1094 | + | if ((eF != R)) | |
1095 | + | then throw((e + " is not yours")) | |
1065 | 1096 | else { | |
1066 | - | let az = if (((dn - do) > 0)) | |
1067 | - | then [ScriptTransfer(eo.caller, (dn - do), ag)] | |
1068 | - | else nil | |
1069 | - | let dX = (bC / 100) | |
1070 | - | let eD = valueOrElse(getInteger(aa), 0) | |
1071 | - | $Tuple2((((dU ++ az) :+ ScriptTransfer(aD, dX, ag)) :+ IntegerEntry(aa, (eD + dW))), $Tuple3(ex, er, ey)) | |
1097 | + | let dA = aG(invoke(aD, "getWarehouseREADONLY", [Y], nil)) | |
1098 | + | let bZ = split_4C(dA, ":") | |
1099 | + | let cS = split(bZ[B], "_") | |
1100 | + | let eL = cR(cS, ez, cN, cT) | |
1101 | + | let dT = eL._1 | |
1102 | + | let eI = eL._2 | |
1103 | + | let bB = eL._3 | |
1104 | + | let eJ = eL._4 | |
1105 | + | let dI = makeString_2C([bZ[z], bZ[A], makeString(eI, "_"), bZ[C], bZ[D]], ":") | |
1106 | + | let dK = aG(invoke(aD, "saveWarehouse", [dI, Y], nil)) | |
1107 | + | let ex = aJ(invoke(aD, "updateAccStats", [R, fraction(a, eJ, al)], nil)) | |
1108 | + | let eB = fraction(bB, aW, ak) | |
1109 | + | let dV = max([eB, k]) | |
1110 | + | let dn = (bB + dV) | |
1111 | + | if ((dn > dm)) | |
1112 | + | then throw((((((("Insufficient payment! Attached=" + aM(dm, 6)) + ", required=") + aM(bB, 6)) + "+") + aM(dV, 6)) + "(delivery fee)")) | |
1113 | + | else { | |
1114 | + | let ay = if (((dm - dn) > 0)) | |
1115 | + | then [ScriptTransfer(en.caller, (dm - dn), af)] | |
1116 | + | else nil | |
1117 | + | let dW = (bB / 100) | |
1118 | + | let eC = valueOrElse(getInteger(aa), 0) | |
1119 | + | $Tuple2((((dT ++ ay) :+ ScriptTransfer(aC, dW, af)) :+ IntegerEntry(aa, (eC + dV))), $Tuple3(dK, eq, ex)) | |
1120 | + | } | |
1072 | 1121 | } | |
1073 | 1122 | } | |
1074 | 1123 | } | |
1075 | 1124 | } | |
1076 | - | ||
1077 | - | ||
1125 | + | else throw("Strict value is not equal to itself.") | |
1126 | + | } | |
1078 | 1127 | ||
1079 | 1128 | ||
1080 | 1129 | ||
1081 | - | @Callable( | |
1082 | - | func | |
1083 | - | | |
1084 | - | | |
1085 | - | | |
1086 | - | | |
1087 | - | | |
1130 | + | @Callable(en) | |
1131 | + | func exchangeResources (cN) = { | |
1132 | + | let eq = bG() | |
1133 | + | if ((eq == eq)) | |
1134 | + | then { | |
1135 | + | let V = valueOrErrorMessage(getString(aD, S(toString(en.caller))), "You don't have a duck staked") | |
1136 | + | if ((size(en.payments) != 1)) | |
1088 | 1137 | then throw("exactly 1 payment must be attached") | |
1089 | 1138 | else { | |
1090 | - | let | |
1091 | - | let | |
1092 | - | if (if (!(isDefined( | |
1139 | + | let dl = en.payments[0] | |
1140 | + | let dm = dl.amount | |
1141 | + | if (if (!(isDefined(dl.assetId))) | |
1093 | 1142 | then true | |
1094 | - | else (value( | |
1143 | + | else (value(dl.assetId) != af)) | |
1095 | 1144 | then throw("USDT payments only!") | |
1096 | 1145 | else { | |
1097 | - | let eE = eo.caller | |
1098 | - | let R = toString(eE) | |
1099 | - | let eF = value(assetInfo(fromBase58String(Y))) | |
1100 | - | if (!(isDefined(getInteger(aE, P(Y))))) | |
1101 | - | then throw((("NFT " + eF.name) + " is not staked")) | |
1146 | + | let er = split(valueOrElse(getString(aD, W(V)), g), "_") | |
1147 | + | if ((er[L] != "F")) | |
1148 | + | then throw(("Duck location type should be Factory, but is " + er[L])) | |
1102 | 1149 | else { | |
1103 | - | let eG = valueOrErrorMessage(getString(aE, N(Y)), (("NFT " + eF.name) + " is orphaned")) | |
1104 | - | if ((eG != R)) | |
1105 | - | then throw((e + " is not yours")) | |
1150 | + | let es = bD(U(V)) | |
1151 | + | let cL = split(es[H], "_") | |
1152 | + | let cS = split(es[I], "_") | |
1153 | + | let eM = cV(cL, cS, cN) | |
1154 | + | let eu = eM._1 | |
1155 | + | let eI = eM._2 | |
1156 | + | let bB = eM._3 | |
1157 | + | let eN = eM._4 | |
1158 | + | if ((bB > dm)) | |
1159 | + | then throw(((("Insufficient payment! Attached=" + aM(dm, 6)) + ", required=") + aM(bB, 6))) | |
1106 | 1160 | else { | |
1107 | - | let dB = aH(invoke(aE, "getWarehouseREADONLY", [Y], nil)) | |
1108 | - | let ca = split_4C(dB, ":") | |
1109 | - | let cT = split(ca[B], "_") | |
1110 | - | let eM = cS(cT, eA, cO, cU) | |
1111 | - | let dU = eM._1 | |
1112 | - | let eJ = eM._2 | |
1113 | - | let bC = eM._3 | |
1114 | - | let eK = eM._4 | |
1115 | - | let dJ = makeString_2C([ca[z], ca[A], makeString(eJ, "_"), ca[C], ca[D]], ":") | |
1116 | - | let dL = aH(invoke(aE, "saveWarehouse", [dJ, Y], nil)) | |
1117 | - | let ey = aK(invoke(aE, "updateAccStats", [R, fraction(a, eK, am)], nil)) | |
1118 | - | let eC = fraction(bC, aX, al) | |
1119 | - | let dW = max([eC, k]) | |
1120 | - | let do = (bC + dW) | |
1121 | - | if ((do > dn)) | |
1122 | - | then throw((((((("Insufficient payment! Attached=" + aN(dn, 6)) + ", required=") + aN(bC, 6)) + "+") + aN(dW, 6)) + "(delivery fee)")) | |
1123 | - | else { | |
1124 | - | let az = if (((dn - do) > 0)) | |
1125 | - | then [ScriptTransfer(eo.caller, (dn - do), ag)] | |
1126 | - | else nil | |
1127 | - | let dX = (bC / 100) | |
1128 | - | let eD = valueOrElse(getInteger(aa), 0) | |
1129 | - | $Tuple2((((dU ++ az) :+ ScriptTransfer(aD, dX, ag)) :+ IntegerEntry(aa, (eD + dW))), $Tuple3(dL, er, ey)) | |
1130 | - | } | |
1131 | - | } | |
1132 | - | } | |
1133 | - | } | |
1134 | - | } | |
1135 | - | else throw("Strict value is not equal to itself.") | |
1136 | - | } | |
1137 | - | ||
1138 | - | ||
1139 | - | ||
1140 | - | @Callable(eo) | |
1141 | - | func exchangeResources (cO) = { | |
1142 | - | let er = bH() | |
1143 | - | if ((er == er)) | |
1144 | - | then { | |
1145 | - | let V = valueOrErrorMessage(getString(aE, S(toString(eo.caller))), "You don't have a duck staked") | |
1146 | - | if ((size(eo.payments) != 1)) | |
1147 | - | then throw("exactly 1 payment must be attached") | |
1148 | - | else { | |
1149 | - | let dm = eo.payments[0] | |
1150 | - | let dn = dm.amount | |
1151 | - | if (if (!(isDefined(dm.assetId))) | |
1152 | - | then true | |
1153 | - | else (value(dm.assetId) != ag)) | |
1154 | - | then throw("USDT payments only!") | |
1155 | - | else { | |
1156 | - | let es = split(valueOrElse(getString(aE, W(V)), g), "_") | |
1157 | - | if ((es[L] != "F")) | |
1158 | - | then throw(("Duck location type should be Factory, but is " + es[L])) | |
1159 | - | else { | |
1160 | - | let et = bE(U(V)) | |
1161 | - | let cM = split(et[H], "_") | |
1162 | - | let cT = split(et[I], "_") | |
1163 | - | let eN = cW(cM, cT, cO) | |
1164 | - | let ev = eN._1 | |
1165 | - | let eJ = eN._2 | |
1166 | - | let bC = eN._3 | |
1167 | - | let eO = eN._4 | |
1168 | - | if ((bC > dn)) | |
1169 | - | then throw(((("Insufficient payment! Attached=" + aN(dn, 6)) + ", required=") + aN(bC, 6))) | |
1170 | - | else { | |
1171 | - | let ew = makeString([et[G], makeString(ev, "_"), makeString(eJ, "_"), et[J]], ":") | |
1172 | - | let ex = aH(invoke(aE, "updateBackpack", [V, ew], nil)) | |
1173 | - | let az = if (((dn - bC) > 0)) | |
1174 | - | then [ScriptTransfer(eo.caller, (dn - bC), ag)] | |
1161 | + | let ev = makeString([es[G], makeString(eu, "_"), makeString(eI, "_"), es[J]], ":") | |
1162 | + | let ew = aG(invoke(aD, "updateBackpack", [V, ev], nil)) | |
1163 | + | let ay = if (((dm - bB) > 0)) | |
1164 | + | then [ScriptTransfer(en.caller, (dm - bB), af)] | |
1175 | 1165 | else nil | |
1176 | - | let | |
1177 | - | let | |
1178 | - | $Tuple2(( | |
1166 | + | let dW = (bB / 100) | |
1167 | + | let ex = aJ(invoke(aD, "updateDuckStats", [V, fraction(a, eN, al)], nil)) | |
1168 | + | $Tuple2((ay :+ ScriptTransfer(aC, dW, af)), $Tuple3(ew, eq, ex)) | |
1179 | 1169 | } | |
1180 | 1170 | } | |
1181 | 1171 | } | |
1186 | 1176 | ||
1187 | 1177 | ||
1188 | 1178 | ||
1189 | - | @Callable(eo) | |
1190 | - | func exchangeResourcesDuckDelivery (cO) = if (!(ae)) | |
1191 | - | then throw("Delivery feature is turned off!") | |
1192 | - | else { | |
1193 | - | let er = bH() | |
1194 | - | if ((er == er)) | |
1195 | - | then { | |
1196 | - | let V = valueOrErrorMessage(getString(aE, S(toString(eo.caller))), "You don't have a duck staked") | |
1197 | - | if ((size(eo.payments) != 1)) | |
1198 | - | then throw("exactly 1 payment must be attached") | |
1179 | + | @Callable(en) | |
1180 | + | func exchangeResourcesDuckDelivery (cN) = { | |
1181 | + | let eq = bG() | |
1182 | + | if ((eq == eq)) | |
1183 | + | then { | |
1184 | + | let V = valueOrErrorMessage(getString(aD, S(toString(en.caller))), "You don't have a duck staked") | |
1185 | + | if ((size(en.payments) != 1)) | |
1186 | + | then throw("exactly 1 payment must be attached") | |
1187 | + | else { | |
1188 | + | let dl = en.payments[0] | |
1189 | + | let dm = dl.amount | |
1190 | + | if (if (!(isDefined(dl.assetId))) | |
1191 | + | then true | |
1192 | + | else (value(dl.assetId) != af)) | |
1193 | + | then throw("USDT payments only!") | |
1194 | + | else { | |
1195 | + | let es = bD(U(V)) | |
1196 | + | let cL = split(es[H], "_") | |
1197 | + | let cS = split(es[I], "_") | |
1198 | + | let eO = cV(cL, cS, cN) | |
1199 | + | let eu = eO._1 | |
1200 | + | let eI = eO._2 | |
1201 | + | let bB = eO._3 | |
1202 | + | let eN = eO._4 | |
1203 | + | let eB = fraction(bB, aX, ak) | |
1204 | + | let dV = max([eB, l]) | |
1205 | + | let dn = (bB + dV) | |
1206 | + | if ((dn > dm)) | |
1207 | + | then throw((((((("Insufficient payment! Attached=" + aM(dm, 6)) + ", required=") + aM(bB, 6)) + "+") + aM(dV, 6)) + "(delivery fee)")) | |
1208 | + | else { | |
1209 | + | let ev = makeString([es[G], makeString(eu, "_"), makeString(eI, "_"), es[J]], ":") | |
1210 | + | let ew = aG(invoke(aD, "updateBackpack", [V, ev], nil)) | |
1211 | + | let ay = if (((dm - dn) > 0)) | |
1212 | + | then [ScriptTransfer(en.caller, (dm - dn), af)] | |
1213 | + | else nil | |
1214 | + | let dW = (bB / 100) | |
1215 | + | let ex = aJ(invoke(aD, "updateDuckStats", [V, fraction(a, eN, al)], nil)) | |
1216 | + | let eC = valueOrElse(getInteger(aa), 0) | |
1217 | + | $Tuple2(((ay :+ ScriptTransfer(aC, dW, af)) :+ IntegerEntry(aa, (eC + dV))), $Tuple3(ew, eq, ex)) | |
1218 | + | } | |
1219 | + | } | |
1220 | + | } | |
1221 | + | } | |
1222 | + | else throw("Strict value is not equal to itself.") | |
1223 | + | } | |
1224 | + | ||
1225 | + | ||
1226 | + | ||
1227 | + | @Callable(en) | |
1228 | + | func exchangeResourcesLandDelivery (cN,Y) = { | |
1229 | + | let eq = bG() | |
1230 | + | if ((eq == eq)) | |
1231 | + | then if ((size(en.payments) != 1)) | |
1232 | + | then throw("exactly 1 payment must be attached") | |
1233 | + | else { | |
1234 | + | let dl = en.payments[0] | |
1235 | + | let dm = dl.amount | |
1236 | + | if (if (!(isDefined(dl.assetId))) | |
1237 | + | then true | |
1238 | + | else (value(dl.assetId) != af)) | |
1239 | + | then throw("USDT payments only!") | |
1199 | 1240 | else { | |
1200 | - | let dm = eo.payments[0] | |
1201 | - | let dn = dm.amount | |
1202 | - | if (if (!(isDefined(dm.assetId))) | |
1203 | - | then true | |
1204 | - | else (value(dm.assetId) != ag)) | |
1205 | - | then throw("USDT payments only!") | |
1241 | + | let eD = en.caller | |
1242 | + | let R = toString(eD) | |
1243 | + | let eE = value(assetInfo(fromBase58String(Y))) | |
1244 | + | if (!(isDefined(getInteger(aD, P(Y))))) | |
1245 | + | then throw((("NFT " + eE.name) + " is not staked")) | |
1206 | 1246 | else { | |
1207 | - | let et = bE(U(V)) | |
1208 | - | let cM = split(et[H], "_") | |
1209 | - | let cT = split(et[I], "_") | |
1210 | - | let eP = cW(cM, cT, cO) | |
1211 | - | let ev = eP._1 | |
1212 | - | let eJ = eP._2 | |
1213 | - | let bC = eP._3 | |
1214 | - | let eO = eP._4 | |
1215 | - | let eC = fraction(bC, aY, al) | |
1216 | - | let dW = max([eC, l]) | |
1217 | - | let do = (bC + dW) | |
1218 | - | if ((do > dn)) | |
1219 | - | then throw((((((("Insufficient payment! Attached=" + aN(dn, 6)) + ", required=") + aN(bC, 6)) + "+") + aN(dW, 6)) + "(delivery fee)")) | |
1247 | + | let eF = valueOrErrorMessage(getString(aD, N(Y)), (("NFT " + eE.name) + " is orphaned")) | |
1248 | + | if ((eF != R)) | |
1249 | + | then throw((e + " is not yours")) | |
1220 | 1250 | else { | |
1221 | - | let ew = makeString([et[G], makeString(ev, "_"), makeString(eJ, "_"), et[J]], ":") | |
1222 | - | let ex = aH(invoke(aE, "updateBackpack", [V, ew], nil)) | |
1223 | - | let az = if (((dn - do) > 0)) | |
1224 | - | then [ScriptTransfer(eo.caller, (dn - do), ag)] | |
1225 | - | else nil | |
1226 | - | let dX = (bC / 100) | |
1227 | - | let ey = aK(invoke(aE, "updateDuckStats", [V, fraction(a, eO, am)], nil)) | |
1228 | - | let eD = valueOrElse(getInteger(aa), 0) | |
1229 | - | $Tuple2(((az :+ ScriptTransfer(aD, dX, ag)) :+ IntegerEntry(aa, (eD + dW))), $Tuple3(ex, er, ey)) | |
1251 | + | let dA = aG(invoke(aD, "getWarehouseREADONLY", [Y], nil)) | |
1252 | + | let bZ = split_4C(dA, ":") | |
1253 | + | let cL = split(bZ[A], "_") | |
1254 | + | let cS = split(bZ[B], "_") | |
1255 | + | let eP = cV(cL, cS, cN) | |
1256 | + | let eu = eP._1 | |
1257 | + | let eI = eP._2 | |
1258 | + | let bB = eP._3 | |
1259 | + | let eN = eP._4 | |
1260 | + | let dI = makeString_2C([bZ[z], makeString(eu, "_"), makeString(eI, "_"), bZ[C], bZ[D]], ":") | |
1261 | + | let dK = aG(invoke(aD, "saveWarehouse", [dI, Y], nil)) | |
1262 | + | let ex = aJ(invoke(aD, "updateAccStats", [R, fraction(a, eN, al)], nil)) | |
1263 | + | let eB = fraction(bB, aX, ak) | |
1264 | + | let dV = max([eB, l]) | |
1265 | + | let dn = (bB + dV) | |
1266 | + | if ((dn > dm)) | |
1267 | + | then throw((((((("Insufficient payment! Attached=" + aM(dm, 6)) + ", required=") + aM(bB, 6)) + "+") + aM(dV, 6)) + "(delivery fee)")) | |
1268 | + | else { | |
1269 | + | let ay = if (((dm - dn) > 0)) | |
1270 | + | then [ScriptTransfer(en.caller, (dm - dn), af)] | |
1271 | + | else nil | |
1272 | + | let dW = (bB / 100) | |
1273 | + | let eC = valueOrElse(getInteger(aa), 0) | |
1274 | + | $Tuple2(((ay :+ ScriptTransfer(aC, dW, af)) :+ IntegerEntry(aa, (eC + dV))), $Tuple3(dK, eq, ex)) | |
1275 | + | } | |
1230 | 1276 | } | |
1231 | 1277 | } | |
1232 | 1278 | } | |
1233 | 1279 | } | |
1234 | - | ||
1235 | - | ||
1280 | + | else throw("Strict value is not equal to itself.") | |
1281 | + | } | |
1236 | 1282 | ||
1237 | 1283 | ||
1238 | 1284 | ||
1239 | - | @Callable(eo) | |
1240 | - | func exchangeResourcesLandDelivery (cO,Y) = if (!(ae)) | |
1241 | - | then throw("Delivery feature is turned off!") | |
1242 | - | else { | |
1243 | - | let er = bH() | |
1244 | - | if ((er == er)) | |
1245 | - | then if ((size(eo.payments) != 1)) | |
1246 | - | then throw("exactly 1 payment must be attached") | |
1247 | - | else { | |
1248 | - | let dm = eo.payments[0] | |
1249 | - | let dn = dm.amount | |
1250 | - | if (if (!(isDefined(dm.assetId))) | |
1251 | - | then true | |
1252 | - | else (value(dm.assetId) != ag)) | |
1253 | - | then throw("USDT payments only!") | |
1254 | - | else { | |
1255 | - | let eE = eo.caller | |
1256 | - | let R = toString(eE) | |
1257 | - | let eF = value(assetInfo(fromBase58String(Y))) | |
1258 | - | if (!(isDefined(getInteger(aE, P(Y))))) | |
1259 | - | then throw((("NFT " + eF.name) + " is not staked")) | |
1260 | - | else { | |
1261 | - | let eG = valueOrErrorMessage(getString(aE, N(Y)), (("NFT " + eF.name) + " is orphaned")) | |
1262 | - | if ((eG != R)) | |
1263 | - | then throw((e + " is not yours")) | |
1264 | - | else { | |
1265 | - | let dB = aH(invoke(aE, "getWarehouseREADONLY", [Y], nil)) | |
1266 | - | let ca = split_4C(dB, ":") | |
1267 | - | let cM = split(ca[A], "_") | |
1268 | - | let cT = split(ca[B], "_") | |
1269 | - | let eQ = cW(cM, cT, cO) | |
1270 | - | let ev = eQ._1 | |
1271 | - | let eJ = eQ._2 | |
1272 | - | let bC = eQ._3 | |
1273 | - | let eO = eQ._4 | |
1274 | - | let dJ = makeString_2C([ca[z], makeString(ev, "_"), makeString(eJ, "_"), ca[C], ca[D]], ":") | |
1275 | - | let dL = aH(invoke(aE, "saveWarehouse", [dJ, Y], nil)) | |
1276 | - | let ey = aK(invoke(aE, "updateAccStats", [R, fraction(a, eO, am)], nil)) | |
1277 | - | let eC = fraction(bC, aY, al) | |
1278 | - | let dW = max([eC, l]) | |
1279 | - | let do = (bC + dW) | |
1280 | - | if ((do > dn)) | |
1281 | - | then throw((((((("Insufficient payment! Attached=" + aN(dn, 6)) + ", required=") + aN(bC, 6)) + "+") + aN(dW, 6)) + "(delivery fee)")) | |
1282 | - | else { | |
1283 | - | let az = if (((dn - do) > 0)) | |
1284 | - | then [ScriptTransfer(eo.caller, (dn - do), ag)] | |
1285 | - | else nil | |
1286 | - | let dX = (bC / 100) | |
1287 | - | let eD = valueOrElse(getInteger(aa), 0) | |
1288 | - | $Tuple2(((az :+ ScriptTransfer(aD, dX, ag)) :+ IntegerEntry(aa, (eD + dW))), $Tuple3(dL, er, ey)) | |
1289 | - | } | |
1290 | - | } | |
1291 | - | } | |
1292 | - | } | |
1293 | - | } | |
1294 | - | else throw("Strict value is not equal to itself.") | |
1295 | - | } | |
1296 | - | ||
1297 | - | ||
1298 | - | ||
1299 | - | @Callable(eo) | |
1300 | - | func craftGoods (ec,ed) = { | |
1301 | - | let er = bH() | |
1302 | - | if ((er == er)) | |
1303 | - | then if ((size(eo.payments) != 1)) | |
1285 | + | @Callable(en) | |
1286 | + | func craftGoods (eb,ec) = { | |
1287 | + | let eq = bG() | |
1288 | + | if ((eq == eq)) | |
1289 | + | then if ((size(en.payments) != 1)) | |
1304 | 1290 | then throw("exactly 1 payment must be attached") | |
1305 | 1291 | else { | |
1306 | - | let | |
1307 | - | let | |
1308 | - | if (if (!(isDefined( | |
1292 | + | let dl = en.payments[0] | |
1293 | + | let dm = dl.amount | |
1294 | + | if (if (!(isDefined(dl.assetId))) | |
1309 | 1295 | then true | |
1310 | - | else (value( | |
1296 | + | else (value(dl.assetId) != af)) | |
1311 | 1297 | then throw("USDT payments only!") | |
1312 | - | else if (( | |
1313 | - | then throw((("exactly " + | |
1298 | + | else if ((dm != ak)) | |
1299 | + | then throw((("exactly " + aM(m, 6)) + " USDT must be attached as payment")) | |
1314 | 1300 | else { | |
1315 | - | let V = valueOrErrorMessage(getString( | |
1316 | - | let | |
1317 | - | if (( | |
1318 | - | then throw(("Duck location type should be Manufactory, but is " + | |
1301 | + | let V = valueOrErrorMessage(getString(aD, S(toString(en.caller))), "You don't have a duck staked") | |
1302 | + | let er = split(valueOrElse(getString(aD, W(V)), g), "_") | |
1303 | + | if ((er[L] != "M")) | |
1304 | + | then throw(("Duck location type should be Manufactory, but is " + er[L])) | |
1319 | 1305 | else { | |
1320 | - | let | |
1321 | - | let | |
1322 | - | let | |
1323 | - | let | |
1306 | + | let eQ = er[K] | |
1307 | + | let es = bD(U(V)) | |
1308 | + | let cS = split(es[I], "_") | |
1309 | + | let dZ = if ((es[J] == "")) | |
1324 | 1310 | then nil | |
1325 | - | else split_4C( | |
1326 | - | let | |
1327 | - | let | |
1328 | - | let | |
1329 | - | let | |
1330 | - | let | |
1331 | - | let | |
1332 | - | let | |
1333 | - | $Tuple2(nil, $Tuple3( | |
1311 | + | else split_4C(es[J], "_") | |
1312 | + | let eR = dY(cS, dZ, eQ, eb, ec) | |
1313 | + | let eI = eR._1 | |
1314 | + | let ei = eR._2 | |
1315 | + | let eS = eR._3 | |
1316 | + | let ev = makeString([es[G], es[H], makeString(eI, "_"), makeString_2C(ei, "_")], ":") | |
1317 | + | let eT = aG(invoke(aD, "updateBackpack", [V, ev], nil)) | |
1318 | + | let ex = aJ(invoke(aD, "updateDuckStats", [V, fraction(b, eS, al)], nil)) | |
1319 | + | $Tuple2(nil, $Tuple3(eT, eq, ex)) | |
1334 | 1320 | } | |
1335 | 1321 | } | |
1336 | 1322 | } | |
1339 | 1325 | ||
1340 | 1326 | ||
1341 | 1327 | ||
1342 | - | @Callable(eo) | |
1343 | - | func craftGoodsDuckDelivery (ec,ed,eb) = if (!(ae)) | |
1344 | - | then throw("Delivery feature is turned off!") | |
1345 | - | else { | |
1346 | - | let er = bH() | |
1347 | - | if ((er == er)) | |
1348 | - | then { | |
1349 | - | let V = valueOrErrorMessage(getString(aE, S(toString(eo.caller))), "You don't have a duck staked") | |
1350 | - | if ((size(eo.payments) != 1)) | |
1351 | - | then throw("exactly 1 payment must be attached") | |
1328 | + | @Callable(en) | |
1329 | + | func craftGoodsDuckDelivery (eb,ec,ea) = { | |
1330 | + | let eq = bG() | |
1331 | + | if ((eq == eq)) | |
1332 | + | then { | |
1333 | + | let V = valueOrErrorMessage(getString(aD, S(toString(en.caller))), "You don't have a duck staked") | |
1334 | + | if ((size(en.payments) != 1)) | |
1335 | + | then throw("exactly 1 payment must be attached") | |
1336 | + | else { | |
1337 | + | let dl = en.payments[0] | |
1338 | + | let dm = dl.amount | |
1339 | + | if (if (!(isDefined(dl.assetId))) | |
1340 | + | then true | |
1341 | + | else (value(dl.assetId) != af)) | |
1342 | + | then throw("USDT payments only!") | |
1343 | + | else { | |
1344 | + | let es = bD(U(V)) | |
1345 | + | let cS = split(es[I], "_") | |
1346 | + | let dZ = if ((es[J] == "")) | |
1347 | + | then nil | |
1348 | + | else split_4C(es[J], "_") | |
1349 | + | let eU = dY(cS, dZ, ea, eb, ec) | |
1350 | + | let eI = eU._1 | |
1351 | + | let ei = eU._2 | |
1352 | + | let eS = eU._3 | |
1353 | + | let ev = makeString([es[G], es[H], makeString(eI, "_"), makeString_2C(ei, "_")], ":") | |
1354 | + | let ew = aG(invoke(aD, "updateBackpack", [V, ev], nil)) | |
1355 | + | let ex = aJ(invoke(aD, "updateDuckStats", [V, fraction(b, eS, al)], nil)) | |
1356 | + | let eB = fraction(ec, k, n) | |
1357 | + | let dV = max([eB, k]) | |
1358 | + | let dn = (m + dV) | |
1359 | + | if ((dn > dm)) | |
1360 | + | then throw((((((("Insufficient payment! Attached=" + aM(dm, 6)) + ", required=") + aM(m, 6)) + "+") + aM(dV, 6)) + "(delivery fee)")) | |
1361 | + | else { | |
1362 | + | let ay = if (((dm - dn) > 0)) | |
1363 | + | then [ScriptTransfer(en.caller, (dm - dn), af)] | |
1364 | + | else nil | |
1365 | + | let eC = valueOrElse(getInteger(aa), 0) | |
1366 | + | $Tuple2((ay :+ IntegerEntry(aa, (eC + dV))), $Tuple3(ew, eq, ex)) | |
1367 | + | } | |
1368 | + | } | |
1369 | + | } | |
1370 | + | } | |
1371 | + | else throw("Strict value is not equal to itself.") | |
1372 | + | } | |
1373 | + | ||
1374 | + | ||
1375 | + | ||
1376 | + | @Callable(en) | |
1377 | + | func craftGoodsLandDelivery (eb,ec,Y,ea) = { | |
1378 | + | let eq = bG() | |
1379 | + | if ((eq == eq)) | |
1380 | + | then if ((size(en.payments) != 1)) | |
1381 | + | then throw("exactly 1 payment must be attached") | |
1382 | + | else { | |
1383 | + | let dl = en.payments[0] | |
1384 | + | let dm = dl.amount | |
1385 | + | if (if (!(isDefined(dl.assetId))) | |
1386 | + | then true | |
1387 | + | else (value(dl.assetId) != af)) | |
1388 | + | then throw("USDT payments only!") | |
1352 | 1389 | else { | |
1353 | - | let dm = eo.payments[0] | |
1354 | - | let dn = dm.amount | |
1355 | - | if (if (!(isDefined(dm.assetId))) | |
1356 | - | then true | |
1357 | - | else (value(dm.assetId) != ag)) | |
1358 | - | then throw("USDT payments only!") | |
1390 | + | let eD = en.caller | |
1391 | + | let R = toString(eD) | |
1392 | + | let eE = value(assetInfo(fromBase58String(Y))) | |
1393 | + | if (!(isDefined(getInteger(aD, P(Y))))) | |
1394 | + | then throw((("NFT " + eE.name) + " is not staked")) | |
1359 | 1395 | else { | |
1360 | - | let et = bE(U(V)) | |
1361 | - | let cT = split(et[I], "_") | |
1362 | - | let ea = if ((et[J] == "")) | |
1363 | - | then nil | |
1364 | - | else split_4C(et[J], "_") | |
1365 | - | let eV = dZ(cT, ea, eb, ec, ed) | |
1366 | - | let eJ = eV._1 | |
1367 | - | let ej = eV._2 | |
1368 | - | let eT = eV._3 | |
1369 | - | let ew = makeString([et[G], et[H], makeString(eJ, "_"), makeString_2C(ej, "_")], ":") | |
1370 | - | let ex = aH(invoke(aE, "updateBackpack", [V, ew], nil)) | |
1371 | - | let ey = aK(invoke(aE, "updateDuckStats", [V, fraction(b, eT, am)], nil)) | |
1372 | - | let eC = fraction(ed, k, n) | |
1373 | - | let dW = max([eC, k]) | |
1374 | - | let do = (m + dW) | |
1375 | - | if ((do > dn)) | |
1376 | - | then throw((((((("Insufficient payment! Attached=" + aN(dn, 6)) + ", required=") + aN(m, 6)) + "+") + aN(dW, 6)) + "(delivery fee)")) | |
1396 | + | let eF = valueOrErrorMessage(getString(aD, N(Y)), (("NFT " + eE.name) + " is orphaned")) | |
1397 | + | if ((eF != R)) | |
1398 | + | then throw((e + " is not yours")) | |
1377 | 1399 | else { | |
1378 | - | let az = if (((dn - do) > 0)) | |
1379 | - | then [ScriptTransfer(eo.caller, (dn - do), ag)] | |
1380 | - | else nil | |
1381 | - | let eD = valueOrElse(getInteger(aa), 0) | |
1382 | - | $Tuple2((az :+ IntegerEntry(aa, (eD + dW))), $Tuple3(ex, er, ey)) | |
1400 | + | let dA = aG(invoke(aD, "getWarehouseREADONLY", [Y], nil)) | |
1401 | + | let bZ = split_4C(dA, ":") | |
1402 | + | let cS = split(bZ[B], "_") | |
1403 | + | let dZ = if ((bZ[C] == "")) | |
1404 | + | then nil | |
1405 | + | else split_4C(bZ[C], "_") | |
1406 | + | let eV = dY(cS, dZ, ea, eb, ec) | |
1407 | + | let eI = eV._1 | |
1408 | + | let ei = eV._2 | |
1409 | + | let eS = eV._3 | |
1410 | + | let dI = makeString_2C([bZ[z], bZ[A], makeString(eI, "_"), makeString_2C(ei, "_"), bZ[D]], ":") | |
1411 | + | let dK = aG(invoke(aD, "saveWarehouse", [dI, Y], nil)) | |
1412 | + | let ex = aJ(invoke(aD, "updateAccStats", [R, fraction(b, eS, al)], nil)) | |
1413 | + | let eB = fraction(ec, k, n) | |
1414 | + | let dV = max([eB, k]) | |
1415 | + | let dn = (m + dV) | |
1416 | + | if ((dn > dm)) | |
1417 | + | then throw((((((("Insufficient payment! Attached=" + aM(dm, 6)) + ", required=") + aM(m, 6)) + "+") + aM(dV, 6)) + "(delivery fee)")) | |
1418 | + | else { | |
1419 | + | let ay = if (((dm - dn) > 0)) | |
1420 | + | then [ScriptTransfer(en.caller, (dm - dn), af)] | |
1421 | + | else nil | |
1422 | + | let eC = valueOrElse(getInteger(aa), 0) | |
1423 | + | $Tuple2((ay :+ IntegerEntry(aa, (eC + dV))), $Tuple3(dK, eq, ex)) | |
1424 | + | } | |
1383 | 1425 | } | |
1384 | 1426 | } | |
1385 | 1427 | } | |
1386 | 1428 | } | |
1387 | - | ||
1388 | - | ||
1429 | + | else throw("Strict value is not equal to itself.") | |
1430 | + | } | |
1389 | 1431 | ||
1390 | 1432 | ||
1391 | 1433 | ||
1392 | - | @Callable(eo) | |
1393 | - | func craftGoodsLandDelivery (ec,ed,Y,eb) = if (!(ae)) | |
1394 | - | then throw("Delivery feature is turned off!") | |
1395 | - | else { | |
1396 | - | let er = bH() | |
1397 | - | if ((er == er)) | |
1398 | - | then if ((size(eo.payments) != 1)) | |
1399 | - | then throw("exactly 1 payment must be attached") | |
1400 | - | else { | |
1401 | - | let dm = eo.payments[0] | |
1402 | - | let dn = dm.amount | |
1403 | - | if (if (!(isDefined(dm.assetId))) | |
1404 | - | then true | |
1405 | - | else (value(dm.assetId) != ag)) | |
1406 | - | then throw("USDT payments only!") | |
1407 | - | else { | |
1408 | - | let eE = eo.caller | |
1409 | - | let R = toString(eE) | |
1410 | - | let eF = value(assetInfo(fromBase58String(Y))) | |
1411 | - | if (!(isDefined(getInteger(aE, P(Y))))) | |
1412 | - | then throw((("NFT " + eF.name) + " is not staked")) | |
1413 | - | else { | |
1414 | - | let eG = valueOrErrorMessage(getString(aE, N(Y)), (("NFT " + eF.name) + " is orphaned")) | |
1415 | - | if ((eG != R)) | |
1416 | - | then throw((e + " is not yours")) | |
1417 | - | else { | |
1418 | - | let dB = aH(invoke(aE, "getWarehouseREADONLY", [Y], nil)) | |
1419 | - | let ca = split_4C(dB, ":") | |
1420 | - | let cT = split(ca[B], "_") | |
1421 | - | let ea = if ((ca[C] == "")) | |
1422 | - | then nil | |
1423 | - | else split_4C(ca[C], "_") | |
1424 | - | let eW = dZ(cT, ea, eb, ec, ed) | |
1425 | - | let eJ = eW._1 | |
1426 | - | let ej = eW._2 | |
1427 | - | let eT = eW._3 | |
1428 | - | let dJ = makeString_2C([ca[z], ca[A], makeString(eJ, "_"), makeString_2C(ej, "_"), ca[D]], ":") | |
1429 | - | let dL = aH(invoke(aE, "saveWarehouse", [dJ, Y], nil)) | |
1430 | - | let ey = aK(invoke(aE, "updateAccStats", [R, fraction(b, eT, am)], nil)) | |
1431 | - | let eC = fraction(ed, k, n) | |
1432 | - | let dW = max([eC, k]) | |
1433 | - | let do = (m + dW) | |
1434 | - | if ((do > dn)) | |
1435 | - | then throw((((((("Insufficient payment! Attached=" + aN(dn, 6)) + ", required=") + aN(m, 6)) + "+") + aN(dW, 6)) + "(delivery fee)")) | |
1436 | - | else { | |
1437 | - | let az = if (((dn - do) > 0)) | |
1438 | - | then [ScriptTransfer(eo.caller, (dn - do), ag)] | |
1439 | - | else nil | |
1440 | - | let eD = valueOrElse(getInteger(aa), 0) | |
1441 | - | $Tuple2((az :+ IntegerEntry(aa, (eD + dW))), $Tuple3(dL, er, ey)) | |
1442 | - | } | |
1443 | - | } | |
1444 | - | } | |
1445 | - | } | |
1446 | - | } | |
1447 | - | else throw("Strict value is not equal to itself.") | |
1448 | - | } | |
1449 | - | ||
1450 | - | ||
1451 | - | ||
1452 | - | @Callable(eo) | |
1453 | - | func setWarehouseOrder (eX,Y) = { | |
1454 | - | let eE = eo.originCaller | |
1455 | - | let R = toString(eE) | |
1456 | - | let eU = if ((eE != aD)) | |
1457 | - | then bG() | |
1434 | + | @Callable(en) | |
1435 | + | func setWarehouseOrder (eW,Y) = { | |
1436 | + | let eD = en.originCaller | |
1437 | + | let R = toString(eD) | |
1438 | + | let eT = if ((eD != aC)) | |
1439 | + | then bF() | |
1458 | 1440 | else false | |
1459 | - | let | |
1460 | - | if (!(isDefined(getInteger( | |
1461 | - | then throw((("NFT " + | |
1441 | + | let eE = value(assetInfo(fromBase58String(Y))) | |
1442 | + | if (!(isDefined(getInteger(aD, P(Y))))) | |
1443 | + | then throw((("NFT " + eE.name) + " is not staked")) | |
1462 | 1444 | else { | |
1463 | - | let | |
1464 | - | if (if (( | |
1465 | - | then ( | |
1445 | + | let eF = valueOrErrorMessage(getString(aD, N(Y)), (("NFT " + eE.name) + " is orphaned")) | |
1446 | + | if (if ((eD != aC)) | |
1447 | + | then (eF != R) | |
1466 | 1448 | else false) | |
1467 | 1449 | then throw((e + " is not yours")) | |
1468 | 1450 | else { | |
1469 | - | let | |
1470 | - | let | |
1471 | - | let | |
1472 | - | let | |
1473 | - | let | |
1474 | - | let | |
1475 | - | let | |
1476 | - | let | |
1477 | - | let | |
1478 | - | let | |
1479 | - | let | |
1480 | - | let | |
1481 | - | let | |
1482 | - | if ((0 > | |
1483 | - | then throw((((((("Attempt to reserve " + toString( | |
1451 | + | let eX = split_4C(eW, ":") | |
1452 | + | let dA = aG(invoke(aD, "getWarehouseREADONLY", [Y], nil)) | |
1453 | + | let bZ = split_4C(dA, ":") | |
1454 | + | let eY = split(bZ[D], "_") | |
1455 | + | let eZ = parseIntValue(eY[F]) | |
1456 | + | let bf = X(Y) | |
1457 | + | let ca = be(bf) | |
1458 | + | let eo = bY(bZ, ca, eX) | |
1459 | + | let fa = eo._4 | |
1460 | + | let fb = eo._5 | |
1461 | + | let fc = eo._7 | |
1462 | + | let fd = (fa + fb) | |
1463 | + | let fe = ((eZ - fc) - fd) | |
1464 | + | if ((0 > fe)) | |
1465 | + | then throw((((((("Attempt to reserve " + toString(fa)) + " space for buy orders, and ") + toString(fb)) + " space for sell orders (and occupied=") + toString(fc)) + "), leads to negative free space")) | |
1484 | 1466 | else { | |
1485 | - | let | |
1486 | - | let | |
1487 | - | let | |
1488 | - | let | |
1489 | - | then if ((size( | |
1467 | + | let dI = makeString_2C([bZ[z], makeString(eo._1, "_"), makeString(eo._2, "_"), makeString_2C(eo._3, "_"), toString(fd)], ":") | |
1468 | + | let dK = aG(invoke(aD, "saveWarehouse", [dI, Y], nil)) | |
1469 | + | let ff = eo._6 | |
1470 | + | let fg = if ((ff > 0)) | |
1471 | + | then if ((size(en.payments) != 1)) | |
1490 | 1472 | then throw("exactly 1 payment must be attached") | |
1491 | 1473 | else { | |
1492 | - | let | |
1493 | - | let | |
1494 | - | let | |
1495 | - | if (( | |
1474 | + | let dl = en.payments[0] | |
1475 | + | let dm = dl.amount | |
1476 | + | let fh = valueOrErrorMessage(dl.assetId, "WAVES can't be used as payment") | |
1477 | + | if ((fh != af)) | |
1496 | 1478 | then throw("USDT payments only!") | |
1497 | - | else if (( | |
1498 | - | then throw(("Payment needed is " + toString( | |
1499 | - | else [StringEntry( | |
1479 | + | else if ((dm != ff)) | |
1480 | + | then throw(("Payment needed is " + toString(ff))) | |
1481 | + | else [StringEntry(bf, eW)] | |
1500 | 1482 | } | |
1501 | - | else if (( | |
1502 | - | then if ((size( | |
1483 | + | else if ((ff == 0)) | |
1484 | + | then if ((size(en.payments) != 0)) | |
1503 | 1485 | then throw("No payments needed") | |
1504 | - | else [StringEntry( | |
1505 | - | else if ((size( | |
1486 | + | else [StringEntry(bf, eW)] | |
1487 | + | else if ((size(en.payments) != 0)) | |
1506 | 1488 | then throw("No payments needed") | |
1507 | - | else [ScriptTransfer(addressFromStringValue( | |
1508 | - | $Tuple2( | |
1489 | + | else [ScriptTransfer(addressFromStringValue(eF), -(ff), af), StringEntry(bf, eW)] | |
1490 | + | $Tuple2(fg, $Tuple2(eT, dK)) | |
1509 | 1491 | } | |
1510 | 1492 | } | |
1511 | 1493 | } | |
1513 | 1495 | ||
1514 | 1496 | ||
1515 | 1497 | ||
1516 | - | @Callable( | |
1517 | - | func acceptWarehouseOrder ( | |
1518 | - | let | |
1519 | - | if (( | |
1498 | + | @Callable(en) | |
1499 | + | func acceptWarehouseOrder (dr,dq,V) = { | |
1500 | + | let eq = bG() | |
1501 | + | if ((eq == eq)) | |
1520 | 1502 | then { | |
1521 | - | let | |
1522 | - | let | |
1523 | - | let | |
1524 | - | let | |
1525 | - | let | |
1526 | - | if (( | |
1527 | - | then throw((("Duck location type is " + | |
1528 | - | else if (( | |
1529 | - | then throw(((("Your staked duck is " + | |
1503 | + | let df = en.originCaller | |
1504 | + | let da = toString(df) | |
1505 | + | let fi = valueOrErrorMessage(getString(aD, S(da)), "You don't have a duck staked") | |
1506 | + | let er = valueOrElse(getString(aD, W(fi)), g) | |
1507 | + | let fj = split(value(er), "_") | |
1508 | + | if ((fj[L] != "L")) | |
1509 | + | then throw((("Duck location type is " + fj[L]) + ", but should be L")) | |
1510 | + | else if ((fi != V)) | |
1511 | + | then throw(((("Your staked duck is " + fi) + ", but passed ") + V)) | |
1530 | 1512 | else { | |
1531 | - | let | |
1532 | - | let | |
1533 | - | let | |
1534 | - | let | |
1535 | - | let | |
1513 | + | let bE = U(V) | |
1514 | + | let es = bD(bE) | |
1515 | + | let ds = split(es[H], "_") | |
1516 | + | let dt = split(es[I], "_") | |
1517 | + | let du = if ((es[J] == "")) | |
1536 | 1518 | then nil | |
1537 | - | else split_4C( | |
1538 | - | let | |
1539 | - | let | |
1540 | - | let | |
1541 | - | let | |
1542 | - | let | |
1543 | - | let | |
1544 | - | let | |
1545 | - | let | |
1546 | - | let | |
1547 | - | let | |
1548 | - | let | |
1549 | - | let | |
1550 | - | let | |
1551 | - | let | |
1552 | - | let | |
1553 | - | let | |
1554 | - | $Tuple2(( | |
1519 | + | else split_4C(es[J], "_") | |
1520 | + | let fk = dp(dq, da, dr, ds, dt, du) | |
1521 | + | let fl = fk._1 | |
1522 | + | let fm = fk._2 | |
1523 | + | let fn = fk._3 | |
1524 | + | let fo = fk._4 | |
1525 | + | let cZ = fk._5 | |
1526 | + | let dh = fk._6 | |
1527 | + | let fp = fk._7 | |
1528 | + | let dj = fk._8 | |
1529 | + | let fq = fk._9 | |
1530 | + | let dL = fk._10 | |
1531 | + | let fr = [fl, cY(cZ, da, 0)] | |
1532 | + | let fs = dg(dh, en.payments, dj, 0) | |
1533 | + | let ft = makeString_2C([es[G], makeString(fm, "_"), makeString(fn, "_"), makeString_2C(fo, "_")], ":") | |
1534 | + | let fu = aG(invoke(aD, "updateBackpack", [V, ft], nil)) | |
1535 | + | let fv = aJ(invoke(aD, "updateDuckStats", [V, fraction(d, fp, al)], nil)) | |
1536 | + | $Tuple2((fr ++ fs), $Tuple5(eq, fq, fu, fv, dL)) | |
1555 | 1537 | } | |
1556 | 1538 | } | |
1557 | 1539 | else throw("Strict value is not equal to itself.") | |
1559 | 1541 | ||
1560 | 1542 | ||
1561 | 1543 | ||
1562 | - | @Callable(eo) | |
1563 | - | func acceptShopOrderDuckDelivery (fx,dr) = if (!(ae)) | |
1564 | - | then throw("Delivery feature is turned off!") | |
1565 | - | else { | |
1566 | - | let er = bH() | |
1567 | - | if ((er == er)) | |
1568 | - | then { | |
1569 | - | let dg = eo.originCaller | |
1570 | - | let db = toString(dg) | |
1571 | - | let V = valueOrErrorMessage(getString(aE, S(db)), "You don't have a duck staked") | |
1572 | - | let bF = U(V) | |
1573 | - | let et = bE(bF) | |
1574 | - | let dt = split(et[H], "_") | |
1575 | - | let du = split(et[I], "_") | |
1576 | - | let dv = if ((et[J] == "")) | |
1577 | - | then nil | |
1578 | - | else split_4C(et[J], "_") | |
1579 | - | let fy = dq(dr, db, fx, dt, du, dv) | |
1580 | - | let fm = fy._1 | |
1581 | - | let fn = fy._2 | |
1582 | - | let fo = fy._3 | |
1583 | - | let fp = fy._4 | |
1584 | - | let da = fy._5 | |
1585 | - | let di = fy._6 | |
1586 | - | let fq = fy._7 | |
1587 | - | let dk = fy._8 | |
1588 | - | let fr = fy._9 | |
1589 | - | let dM = fy._10 | |
1590 | - | let fz = fraction((di + da), aX, al) | |
1591 | - | let fA = max([fz, k]) | |
1592 | - | let dl = fraction(fA, di, (di + da)) | |
1593 | - | let dc = (fA - dl) | |
1594 | - | let eD = valueOrElse(getInteger(aa), 0) | |
1595 | - | let fs = [fm, cZ(da, db, dc)] | |
1596 | - | let ft = dh(di, eo.payments, dk, dl) | |
1597 | - | let fu = makeString_2C([et[G], makeString(fn, "_"), makeString(fo, "_"), makeString_2C(fp, "_")], ":") | |
1598 | - | let fv = aH(invoke(aE, "updateBackpack", [V, fu], nil)) | |
1599 | - | let fw = aK(invoke(aE, "updateDuckStats", [V, fraction(d, fq, am)], nil)) | |
1600 | - | $Tuple2(((fs ++ ft) :+ IntegerEntry(aa, (eD + fA))), $Tuple5(er, fr, fv, fw, dM)) | |
1601 | - | } | |
1602 | - | else throw("Strict value is not equal to itself.") | |
1603 | - | } | |
1544 | + | @Callable(en) | |
1545 | + | func acceptShopOrderDuckDelivery (fw,dq) = { | |
1546 | + | let eq = bG() | |
1547 | + | if ((eq == eq)) | |
1548 | + | then { | |
1549 | + | let df = en.originCaller | |
1550 | + | let da = toString(df) | |
1551 | + | let V = valueOrErrorMessage(getString(aD, S(da)), "You don't have a duck staked") | |
1552 | + | let bE = U(V) | |
1553 | + | let es = bD(bE) | |
1554 | + | let ds = split(es[H], "_") | |
1555 | + | let dt = split(es[I], "_") | |
1556 | + | let du = if ((es[J] == "")) | |
1557 | + | then nil | |
1558 | + | else split_4C(es[J], "_") | |
1559 | + | let fx = dp(dq, da, fw, ds, dt, du) | |
1560 | + | let fl = fx._1 | |
1561 | + | let fm = fx._2 | |
1562 | + | let fn = fx._3 | |
1563 | + | let fo = fx._4 | |
1564 | + | let cZ = fx._5 | |
1565 | + | let dh = fx._6 | |
1566 | + | let fp = fx._7 | |
1567 | + | let dj = fx._8 | |
1568 | + | let fq = fx._9 | |
1569 | + | let dL = fx._10 | |
1570 | + | let fy = fraction((dh + cZ), aW, ak) | |
1571 | + | let fz = max([fy, k]) | |
1572 | + | let dk = fraction(fz, dh, (dh + cZ)) | |
1573 | + | let db = (fz - dk) | |
1574 | + | let eC = valueOrElse(getInteger(aa), 0) | |
1575 | + | let fr = [fl, cY(cZ, da, db)] | |
1576 | + | let fs = dg(dh, en.payments, dj, dk) | |
1577 | + | let ft = makeString_2C([es[G], makeString(fm, "_"), makeString(fn, "_"), makeString_2C(fo, "_")], ":") | |
1578 | + | let fu = aG(invoke(aD, "updateBackpack", [V, ft], nil)) | |
1579 | + | let fv = aJ(invoke(aD, "updateDuckStats", [V, fraction(d, fp, al)], nil)) | |
1580 | + | $Tuple2(((fr ++ fs) :+ IntegerEntry(aa, (eC + fz))), $Tuple5(eq, fq, fu, fv, dL)) | |
1581 | + | } | |
1582 | + | else throw("Strict value is not equal to itself.") | |
1583 | + | } | |
1604 | 1584 | ||
1605 | 1585 | ||
1606 | 1586 | ||
1607 | - | @Callable(eo) | |
1608 | - | func acceptShopOrderLandDelivery (fx,dr,fB) = if (!(ae)) | |
1609 | - | then throw("Delivery feature is turned off!") | |
1610 | - | else { | |
1611 | - | let er = bH() | |
1612 | - | if ((er == er)) | |
1613 | - | then { | |
1614 | - | let dg = eo.originCaller | |
1615 | - | let db = toString(dg) | |
1616 | - | let eF = value(assetInfo(fromBase58String(fB))) | |
1617 | - | if (!(isDefined(getInteger(aE, P(fB))))) | |
1618 | - | then throw((("NFT " + eF.name) + " is not staked")) | |
1619 | - | else { | |
1620 | - | let eG = valueOrErrorMessage(getString(aE, N(fB)), (("NFT " + eF.name) + " is orphaned")) | |
1621 | - | if ((eG != db)) | |
1622 | - | then throw((e + " is not yours")) | |
1623 | - | else { | |
1624 | - | let dB = aH(invoke(aE, "getWarehouseREADONLY", [fB], nil)) | |
1625 | - | let ca = split_4C(dB, ":") | |
1626 | - | let cM = split(ca[A], "_") | |
1627 | - | let cT = split(ca[B], "_") | |
1628 | - | let ea = if ((ca[C] == "")) | |
1629 | - | then nil | |
1630 | - | else split_4C(ca[C], "_") | |
1631 | - | let fC = dq(dr, db, fx, cM, cT, ea) | |
1632 | - | let fm = fC._1 | |
1633 | - | let fn = fC._2 | |
1634 | - | let fo = fC._3 | |
1635 | - | let fp = fC._4 | |
1636 | - | let da = fC._5 | |
1637 | - | let di = fC._6 | |
1638 | - | let fq = fC._7 | |
1639 | - | let dk = fC._8 | |
1640 | - | let fr = fC._9 | |
1641 | - | let dM = fC._10 | |
1642 | - | let fz = fraction((di + da), aX, al) | |
1643 | - | let fA = max([fz, k]) | |
1644 | - | let dl = fraction(fA, di, (di + da)) | |
1645 | - | let dc = (fA - dl) | |
1646 | - | let eD = valueOrElse(getInteger(aa), 0) | |
1647 | - | let fs = [fm, cZ(da, db, dc)] | |
1648 | - | let ft = dh(di, eo.payments, dk, dl) | |
1649 | - | let dJ = makeString_2C([ca[z], makeString(fn, "_"), makeString(fo, "_"), makeString(fp, "_"), ca[D]], ":") | |
1650 | - | let dL = aH(invoke(aE, "saveWarehouse", [dJ, fB], nil)) | |
1651 | - | let ey = aK(invoke(aE, "updateAccStats", [db, fraction(d, fq, am)], nil)) | |
1652 | - | $Tuple2(((fs ++ ft) :+ IntegerEntry(aa, (eD + fA))), $Tuple5(er, fr, dL, ey, dM)) | |
1653 | - | } | |
1654 | - | } | |
1655 | - | } | |
1656 | - | else throw("Strict value is not equal to itself.") | |
1657 | - | } | |
1587 | + | @Callable(en) | |
1588 | + | func acceptShopOrderLandDelivery (fw,dq,fA) = { | |
1589 | + | let eq = bG() | |
1590 | + | if ((eq == eq)) | |
1591 | + | then { | |
1592 | + | let df = en.originCaller | |
1593 | + | let da = toString(df) | |
1594 | + | let eE = value(assetInfo(fromBase58String(fA))) | |
1595 | + | if (!(isDefined(getInteger(aD, P(fA))))) | |
1596 | + | then throw((("NFT " + eE.name) + " is not staked")) | |
1597 | + | else { | |
1598 | + | let eF = valueOrErrorMessage(getString(aD, N(fA)), (("NFT " + eE.name) + " is orphaned")) | |
1599 | + | if ((eF != da)) | |
1600 | + | then throw((e + " is not yours")) | |
1601 | + | else { | |
1602 | + | let dA = aG(invoke(aD, "getWarehouseREADONLY", [fA], nil)) | |
1603 | + | let bZ = split_4C(dA, ":") | |
1604 | + | let cL = split(bZ[A], "_") | |
1605 | + | let cS = split(bZ[B], "_") | |
1606 | + | let dZ = if ((bZ[C] == "")) | |
1607 | + | then nil | |
1608 | + | else split_4C(bZ[C], "_") | |
1609 | + | let fB = dp(dq, da, fw, cL, cS, dZ) | |
1610 | + | let fl = fB._1 | |
1611 | + | let fm = fB._2 | |
1612 | + | let fn = fB._3 | |
1613 | + | let fo = fB._4 | |
1614 | + | let cZ = fB._5 | |
1615 | + | let dh = fB._6 | |
1616 | + | let fp = fB._7 | |
1617 | + | let dj = fB._8 | |
1618 | + | let fq = fB._9 | |
1619 | + | let dL = fB._10 | |
1620 | + | let fy = fraction((dh + cZ), aW, ak) | |
1621 | + | let fz = max([fy, k]) | |
1622 | + | let dk = fraction(fz, dh, (dh + cZ)) | |
1623 | + | let db = (fz - dk) | |
1624 | + | let eC = valueOrElse(getInteger(aa), 0) | |
1625 | + | let fr = [fl, cY(cZ, da, db)] | |
1626 | + | let fs = dg(dh, en.payments, dj, dk) | |
1627 | + | let dI = makeString_2C([bZ[z], makeString(fm, "_"), makeString(fn, "_"), makeString(fo, "_"), bZ[D]], ":") | |
1628 | + | let dK = aG(invoke(aD, "saveWarehouse", [dI, fA], nil)) | |
1629 | + | let ex = aJ(invoke(aD, "updateAccStats", [da, fraction(d, fp, al)], nil)) | |
1630 | + | $Tuple2(((fr ++ fs) :+ IntegerEntry(aa, (eC + fz))), $Tuple5(eq, fq, dK, ex, dL)) | |
1631 | + | } | |
1632 | + | } | |
1633 | + | } | |
1634 | + | else throw("Strict value is not equal to itself.") | |
1635 | + | } | |
1658 | 1636 | ||
1659 | 1637 | ||
1660 | 1638 | ||
1661 | - | @Callable( | |
1662 | - | func sellProductsToES ( | |
1663 | - | let | |
1664 | - | if (( | |
1665 | - | then if ((size( | |
1639 | + | @Callable(en) | |
1640 | + | func sellProductsToES (cN) = { | |
1641 | + | let eq = bG() | |
1642 | + | if ((eq == eq)) | |
1643 | + | then if ((size(en.payments) != 0)) | |
1666 | 1644 | then throw("No payments needed") | |
1667 | 1645 | else { | |
1668 | - | let V = valueOrErrorMessage(getString( | |
1669 | - | let | |
1670 | - | if (( | |
1671 | - | then throw(("Duck location type should be Airport, but is " + | |
1646 | + | let V = valueOrErrorMessage(getString(aD, S(toString(en.caller))), "You don't have a duck staked") | |
1647 | + | let er = split(valueOrElse(getString(aD, W(V)), g), "_") | |
1648 | + | if ((er[L] != "A")) | |
1649 | + | then throw(("Duck location type should be Airport, but is " + er[L])) | |
1672 | 1650 | else { | |
1673 | - | let | |
1674 | - | let | |
1651 | + | let es = bD(U(V)) | |
1652 | + | let dZ = if ((es[J] == "")) | |
1675 | 1653 | then nil | |
1676 | - | else split_4C( | |
1677 | - | let | |
1678 | - | let | |
1679 | - | let | |
1680 | - | then split_4C(value( | |
1654 | + | else split_4C(es[J], "_") | |
1655 | + | let fC = Z() | |
1656 | + | let fD = getString(fC) | |
1657 | + | let fE = if (isDefined(fD)) | |
1658 | + | then split_4C(value(fD), "_") | |
1681 | 1659 | else nil | |
1682 | - | func | |
1683 | - | let | |
1684 | - | let | |
1685 | - | then | |
1660 | + | func fF (bI,fG) = { | |
1661 | + | let bK = bI._1 | |
1662 | + | let ec = if ((size(cN) > bK)) | |
1663 | + | then cN[bK] | |
1686 | 1664 | else 0 | |
1687 | - | if ((0 > | |
1665 | + | if ((0 > ec)) | |
1688 | 1666 | then throw("Quantity cannot be negative") | |
1689 | 1667 | else { | |
1690 | - | let ad = split( | |
1668 | + | let ad = split(fG, "_") | |
1691 | 1669 | if ((size(ad) != x)) | |
1692 | - | then throw(("Fatal: unknown recipe: " + | |
1670 | + | then throw(("Fatal: unknown recipe: " + fG)) | |
1693 | 1671 | else { | |
1694 | - | let | |
1695 | - | let | |
1696 | - | then parseIntValue( | |
1672 | + | let fH = (i * y) | |
1673 | + | let fI = if ((size(fE) > bK)) | |
1674 | + | then parseIntValue(fE[bK]) | |
1697 | 1675 | else 0 | |
1698 | - | let | |
1699 | - | if (( | |
1700 | - | then throw(((("Warehouse can buy only " + toString( | |
1676 | + | let fJ = (fH - fI) | |
1677 | + | if ((ec > fJ)) | |
1678 | + | then throw(((("Warehouse can buy only " + toString(fJ)) + " of ") + r[bK])) | |
1701 | 1679 | else { | |
1702 | - | let | |
1703 | - | let | |
1704 | - | let | |
1705 | - | then parseIntValue( | |
1680 | + | let eJ = ac(ad) | |
1681 | + | let fK = fraction((eJ * j), h, (al * y)) | |
1682 | + | let fL = if ((size(dZ) > bK)) | |
1683 | + | then parseIntValue(dZ[bK]) | |
1706 | 1684 | else 0 | |
1707 | - | if (( | |
1708 | - | then throw(((("You have only " + toString( | |
1709 | - | else $Tuple5(( | |
1685 | + | if ((ec > fL)) | |
1686 | + | then throw(((("You have only " + toString(fL)) + " of ") + r[bK])) | |
1687 | + | else $Tuple5((bK + 1), (bI._2 + (fK * ec)), (bI._3 :+ toString((fL - ec))), (bI._4 :+ toString((fI + ec))), (bI._5 + (eJ * ec))) | |
1710 | 1688 | } | |
1711 | 1689 | } | |
1712 | 1690 | } | |
1713 | 1691 | } | |
1714 | 1692 | ||
1715 | - | let | |
1716 | - | let | |
1717 | - | let | |
1718 | - | let | |
1719 | - | func | |
1720 | - | then | |
1721 | - | else | |
1693 | + | let em = { | |
1694 | + | let cm = u | |
1695 | + | let cn = size(cm) | |
1696 | + | let co = $Tuple5(0, 0, nil, nil, 0) | |
1697 | + | func cp (cq,cr) = if ((cr >= cn)) | |
1698 | + | then cq | |
1699 | + | else fF(cq, cm[cr]) | |
1722 | 1700 | ||
1723 | - | func | |
1724 | - | then | |
1701 | + | func cs (cq,cr) = if ((cr >= cn)) | |
1702 | + | then cq | |
1725 | 1703 | else throw("List size exceeds 50") | |
1726 | 1704 | ||
1727 | - | | |
1705 | + | cs(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(co, 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) | |
1728 | 1706 | } | |
1729 | - | let | |
1730 | - | let | |
1731 | - | let | |
1732 | - | $Tuple2([StringEntry( | |
1707 | + | let ft = makeString_2C([es[G], es[H], es[I], makeString_2C(em._3, "_")], ":") | |
1708 | + | let fu = aG(invoke(aD, "updateBackpack", [V, ft], nil)) | |
1709 | + | let ex = aJ(invoke(aD, "updateDuckStats", [V, fraction(c, em._5, (al * 10))], nil)) | |
1710 | + | $Tuple2([StringEntry(fC, makeString_2C(em._4, "_")), ScriptTransfer(en.caller, em._2, af)], $Tuple3(fu, eq, ex)) | |
1733 | 1711 | } | |
1734 | 1712 | } | |
1735 | 1713 | else throw("Strict value is not equal to itself.") | |
1737 | 1715 | ||
1738 | 1716 | ||
1739 | 1717 | ||
1740 | - | @Callable( | |
1741 | - | func updateEsStorage ( | |
1718 | + | @Callable(en) | |
1719 | + | func updateEsStorage (fM) = if ((en.caller != aD)) | |
1742 | 1720 | then throw("Permission denied") | |
1743 | - | else $Tuple2([StringEntry(Z(), | |
1721 | + | else $Tuple2([StringEntry(Z(), fM)], fM) | |
1744 | 1722 | ||
1745 | 1723 | ||
1746 | 1724 | ||
1747 | - | @Callable( | |
1748 | - | func updateDeliveryLocked ( | |
1725 | + | @Callable(en) | |
1726 | + | func updateDeliveryLocked (fN) = if ((en.caller != aD)) | |
1749 | 1727 | then throw("Permission denied") | |
1750 | - | else $Tuple2([IntegerEntry(ab, | |
1728 | + | else $Tuple2([IntegerEntry(ab, fN)], fN) | |
1751 | 1729 | ||
1752 | 1730 | ||
1753 | 1731 | ||
1754 | - | @Callable( | |
1755 | - | func sendDeliveryReward (R) = if (( | |
1732 | + | @Callable(en) | |
1733 | + | func sendDeliveryReward (R) = if ((en.caller != aD)) | |
1756 | 1734 | then throw("Permission denied") | |
1757 | 1735 | else { | |
1758 | - | let | |
1759 | - | let | |
1760 | - | let | |
1761 | - | let | |
1762 | - | $Tuple2([IntegerEntry(aa, ( | |
1736 | + | let eC = valueOrElse(getInteger(aa), 0) | |
1737 | + | let fO = valueOrElse(getInteger(ab), 0) | |
1738 | + | let fP = (k * o) | |
1739 | + | let fQ = invoke(aF, "sendAcres", [R, fP], nil) | |
1740 | + | $Tuple2([IntegerEntry(aa, (eC - k)), IntegerEntry(ab, (fO - k))], fQ) | |
1763 | 1741 | } | |
1764 | 1742 | ||
1765 | 1743 |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 6 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let a = 10000 | |
5 | 5 | ||
6 | 6 | let b = 10000 | |
7 | 7 | ||
8 | 8 | let c = 10000 | |
9 | 9 | ||
10 | 10 | let d = 10000 | |
11 | 11 | ||
12 | 12 | let e = "LAND" | |
13 | 13 | ||
14 | 14 | let f = 6 | |
15 | 15 | ||
16 | 16 | let g = "Africa_F_Africa" | |
17 | 17 | ||
18 | 18 | let h = 39637 | |
19 | 19 | ||
20 | 20 | let i = 10 | |
21 | 21 | ||
22 | 22 | let j = 4 | |
23 | 23 | ||
24 | 24 | let k = 50000 | |
25 | 25 | ||
26 | 26 | let l = 75000 | |
27 | 27 | ||
28 | 28 | let m = 1000000 | |
29 | 29 | ||
30 | 30 | let n = 10 | |
31 | 31 | ||
32 | 32 | let o = 10 | |
33 | 33 | ||
34 | 34 | let p = ["Oil", "Ore", "Wood", "Sand", "Clay", "Organic"] | |
35 | 35 | ||
36 | 36 | let q = ["Fuel", "Metal", "Plank", "Glass", "Plastic", "Protein"] | |
37 | 37 | ||
38 | 38 | let r = ["First Aid Kit L1", "First Aid Kit L2", "First Aid Kit L3", "Backpack L1", "Backpack L2", "Backpack L3", "Food Ration L1", "Food Ration L2", "Food Ration L3", "Jet Pack L1", "Jet Pack L2", "Jet Pack L3", "Shield L1", "Shield L2", "Shield L3", "Mine L1", "Mine L2", "Mine L3", "Trap L1", "Trap L2", "Trap L3"] | |
39 | 39 | ||
40 | 40 | let s = ["Americas", "Europe", "Asia", "Africa", "Oceania"] | |
41 | 41 | ||
42 | 42 | let t = 10000000 | |
43 | 43 | ||
44 | 44 | let u = ["8_8_8_17_17_42_12_0_30_0,0,0,0,0,0,0_", "8_8_8_17_17_42_24_0_60_0,0,5,2,0,0,0_", "8_8_8_17_17_42_36_0_120_0,0,10,4,0,0,0_", "8_19_19_8_27_19_26_1_20_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_52_1_40_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_78_1_80_0,0,0,0,0,0,0_001", "8_8_8_8_8_60_13_2_2_0,0,0,0,0,0,0_011", "8_8_8_8_8_60_26_2_4_0,0,0,0,0,0,0_011", "8_8_8_8_8_60_39_2_8_0,0,0,0,0,0,0_011", "30_30_3_17_17_3_30_3_30_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_60_3_50_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_90_3_70_0,0,0,0,0,0,0_111", "18_18_10_18_18_18_11_4_10_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_22_4_20_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_33_4_30_0,0,0,0,0,0,0_201", "4_13_22_4_35_22_23_0_50,1,0_0,0,0,0,0,0,0_", "4_13_22_4_35_22_46_0_50,1,1_0,2,5,0,0,0,0_", "4_13_22_4_35_22_69_0_50,2,1_0,5,10,0,0,0,0_", "5_25_40_5_10_15_20_1_30,1,1_0,0,0,0,0,0,0_", "5_25_40_5_10_15_40_1_30,1,2_2,1,3,0,0,0,0_", "5_25_40_5_10_15_60_1_30,1,3_5,2,8,0,0,0,0_"] | |
45 | 45 | ||
46 | 46 | let v = 6 | |
47 | 47 | ||
48 | 48 | let w = 7 | |
49 | 49 | ||
50 | 50 | let x = 11 | |
51 | 51 | ||
52 | 52 | let y = 10 | |
53 | 53 | ||
54 | 54 | let z = 0 | |
55 | 55 | ||
56 | 56 | let A = 1 | |
57 | 57 | ||
58 | 58 | let B = 2 | |
59 | 59 | ||
60 | 60 | let C = 3 | |
61 | 61 | ||
62 | 62 | let D = 4 | |
63 | 63 | ||
64 | 64 | let E = 0 | |
65 | 65 | ||
66 | 66 | let F = 3 | |
67 | 67 | ||
68 | 68 | let G = 0 | |
69 | 69 | ||
70 | 70 | let H = 1 | |
71 | 71 | ||
72 | 72 | let I = 2 | |
73 | 73 | ||
74 | 74 | let J = 3 | |
75 | 75 | ||
76 | 76 | let K = 0 | |
77 | 77 | ||
78 | 78 | let L = 1 | |
79 | 79 | ||
80 | 80 | let M = 2 | |
81 | 81 | ||
82 | 82 | func N (O) = ("no_" + O) | |
83 | 83 | ||
84 | 84 | ||
85 | 85 | func P (O) = ("st_" + O) | |
86 | 86 | ||
87 | 87 | ||
88 | 88 | func Q (R) = ("accRefBy_" + R) | |
89 | 89 | ||
90 | 90 | ||
91 | 91 | func S (T) = ("stakedDuckByOwner_" + T) | |
92 | 92 | ||
93 | 93 | ||
94 | 94 | func U (V) = ("backPack_" + V) | |
95 | 95 | ||
96 | 96 | ||
97 | 97 | func W (V) = ("duckLocation_" + V) | |
98 | 98 | ||
99 | 99 | ||
100 | 100 | func X (Y) = ("landOrder_" + Y) | |
101 | 101 | ||
102 | 102 | ||
103 | 103 | func Z () = "emergencyWarehouseProducts" | |
104 | 104 | ||
105 | 105 | ||
106 | 106 | let aa = "deliveryFund" | |
107 | 107 | ||
108 | 108 | let ab = "deliveryLocked" | |
109 | 109 | ||
110 | 110 | func ac (ad) = (parseIntValue(ad[v]) * t) | |
111 | 111 | ||
112 | 112 | ||
113 | - | let ae = | |
113 | + | let ae = take(drop(this.bytes, 1), 1) | |
114 | 114 | ||
115 | - | let af = take(drop(this.bytes, 1), 1) | |
116 | - | ||
117 | - | let ag = { | |
118 | - | let ah = af | |
119 | - | if ((base58'2W' == ah)) | |
115 | + | let af = { | |
116 | + | let ag = ae | |
117 | + | if ((base58'2W' == ag)) | |
120 | 118 | then base58'9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi' | |
121 | - | else if ((base58'2T' == | |
119 | + | else if ((base58'2T' == ag)) | |
122 | 120 | then base58'6mWwf9mZBjVgkC54idpyaZLQfAosD914wT8fGf2iiY63' | |
123 | 121 | else throw("Unknown chain") | |
124 | 122 | } | |
125 | 123 | ||
126 | - | let | |
127 | - | let | |
128 | - | if ((base58'2W' == | |
124 | + | let ah = { | |
125 | + | let ag = ae | |
126 | + | if ((base58'2W' == ag)) | |
129 | 127 | then "3PQCuvFbvh4LkPUnrnU1z3jnbA1p9m3WNhv" | |
130 | - | else if ((base58'2T' == | |
128 | + | else if ((base58'2T' == ag)) | |
131 | 129 | then "3MumkGGztCKAXpWDqxkddofqXSUbqQkvSJy" | |
132 | 130 | else throw("Unknown chain") | |
133 | 131 | } | |
134 | 132 | ||
135 | - | let | |
133 | + | let ai = "__" | |
136 | 134 | ||
137 | - | let | |
135 | + | let aj = 100000 | |
138 | 136 | ||
139 | - | let | |
137 | + | let ak = 1000000 | |
140 | 138 | ||
141 | - | let | |
139 | + | let al = 100000000 | |
142 | 140 | ||
143 | - | let | |
141 | + | let am = 10000000000 | |
144 | 142 | ||
145 | - | let | |
143 | + | let an = 100000 | |
146 | 144 | ||
147 | - | let | |
145 | + | let ao = [0, 1, 2, 3, 4, 5] | |
148 | 146 | ||
149 | - | func | |
147 | + | func ap (aq,ar) = valueOrErrorMessage(getString(aq, ar), makeString(["mandatory ", toString(aq), ".", ar, " is not defined"], "")) | |
150 | 148 | ||
151 | 149 | ||
152 | - | let | |
150 | + | let as = 1 | |
153 | 151 | ||
154 | - | let | |
152 | + | let at = 6 | |
155 | 153 | ||
156 | - | let | |
154 | + | let au = 8 | |
157 | 155 | ||
158 | - | func | |
156 | + | func av () = "%s__restConfig" | |
159 | 157 | ||
160 | 158 | ||
161 | - | func | |
159 | + | func aw () = "%s__restAddr" | |
162 | 160 | ||
163 | 161 | ||
164 | - | func | |
162 | + | func ax (ay) = split_4C(ap(ay, av()), ai) | |
165 | 163 | ||
166 | 164 | ||
167 | - | func | |
165 | + | func az (aA,aB) = valueOrErrorMessage(addressFromString(aA[aB]), ("Rest cfg doesn't contain address at index " + toString(aB))) | |
168 | 166 | ||
169 | 167 | ||
170 | - | let | |
168 | + | let aC = addressFromStringValue(valueOrElse(getString(this, aw()), ah)) | |
171 | 169 | ||
172 | - | let | |
170 | + | let aA = ax(aC) | |
173 | 171 | ||
174 | - | let | |
172 | + | let aD = az(aA, as) | |
175 | 173 | ||
176 | - | let | |
174 | + | let aE = az(aA, at) | |
177 | 175 | ||
178 | - | let | |
176 | + | let aF = az(aA, au) | |
179 | 177 | ||
180 | - | func | |
181 | - | let | |
182 | - | if ($isInstanceOf( | |
178 | + | func aG (aH) = { | |
179 | + | let ag = aH | |
180 | + | if ($isInstanceOf(ag, "String")) | |
183 | 181 | then { | |
184 | - | let | |
185 | - | | |
182 | + | let aI = ag | |
183 | + | aI | |
186 | 184 | } | |
187 | 185 | else throw("fail to cast into String") | |
188 | 186 | } | |
189 | 187 | ||
190 | 188 | ||
191 | - | func | |
192 | - | let | |
193 | - | if ($isInstanceOf( | |
189 | + | func aJ (aH) = { | |
190 | + | let ag = aH | |
191 | + | if ($isInstanceOf(ag, "Int")) | |
194 | 192 | then { | |
195 | - | let | |
196 | - | | |
193 | + | let aK = ag | |
194 | + | aK | |
197 | 195 | } | |
198 | 196 | else throw("fail to cast into Int") | |
199 | 197 | } | |
200 | 198 | ||
201 | 199 | ||
202 | - | func | |
200 | + | func aL () = "contractsBlocked" | |
203 | 201 | ||
204 | 202 | ||
205 | - | func | |
206 | - | let | |
207 | - | let | |
208 | - | let | |
209 | - | (((toString(( | |
203 | + | func aM (aN,aO) = { | |
204 | + | let aP = pow(10, 0, aO, 0, 0, DOWN) | |
205 | + | let aQ = toString((aN % aP)) | |
206 | + | let aR = drop(toString(aP), (1 + size(aQ))) | |
207 | + | (((toString((aN / aP)) + ".") + aR) + aQ) | |
210 | 208 | } | |
211 | 209 | ||
212 | 210 | ||
213 | - | let | |
211 | + | let aS = 10000000000 | |
214 | 212 | ||
215 | - | let | |
213 | + | let aT = 200 | |
216 | 214 | ||
217 | - | let aV = 300 | |
215 | + | let aU = 300 | |
216 | + | ||
217 | + | let aV = 10000 | |
218 | 218 | ||
219 | 219 | let aW = 10000 | |
220 | 220 | ||
221 | - | let aX = | |
221 | + | let aX = 15000 | |
222 | 222 | ||
223 | - | let aY = 15000 | |
224 | - | ||
225 | - | func aZ (ba,bb) = ((("factoryWhByContinentAndRes_" + ba) + "_") + toString(bb)) | |
223 | + | func aY (aZ,ba) = ((("factoryWhByContinentAndRes_" + aZ) + "_") + toString(ba)) | |
226 | 224 | ||
227 | 225 | ||
228 | - | let | |
226 | + | let bb = 0 | |
229 | 227 | ||
230 | - | let | |
228 | + | let bc = 1 | |
231 | 229 | ||
232 | - | let | |
230 | + | let bd = 2 | |
233 | 231 | ||
234 | - | func | |
235 | - | let | |
236 | - | [if ((size(split( | |
237 | - | then | |
238 | - | else "0@0_0@0_0@0_0@0_0@0_0@0", if ((size(split( | |
239 | - | then | |
240 | - | else "0@0_0@0_0@0_0@0_0@0_0@0", | |
232 | + | func be (bf) = { | |
233 | + | let bg = split(valueOrElse(getString(bf), "0@0_0@0_0@0_0@0_0@0_0@0:0@0_0@0_0@0_0@0_0@0_0@0:"), ":") | |
234 | + | [if ((size(split(bg[bb], "_")) == f)) | |
235 | + | then bg[bb] | |
236 | + | else "0@0_0@0_0@0_0@0_0@0_0@0", if ((size(split(bg[bc], "_")) == f)) | |
237 | + | then bg[bc] | |
238 | + | else "0@0_0@0_0@0_0@0_0@0_0@0", bg[bd]] | |
241 | 239 | } | |
242 | 240 | ||
243 | 241 | ||
244 | - | func | |
242 | + | func bh (bi,bj,bk) = if (bk) | |
245 | 243 | then { | |
246 | - | let | |
247 | - | then ((( | |
248 | - | else -((((-( | |
249 | - | ( | |
244 | + | let bl = if ((bi >= 0)) | |
245 | + | then (((bi + bj) - 1) / bj) | |
246 | + | else -((((-(bi) + bj) - 1) / bj)) | |
247 | + | (bl * al) | |
250 | 248 | } | |
251 | - | else | |
249 | + | else bi | |
252 | 250 | ||
253 | 251 | ||
254 | - | func | |
255 | - | let | |
256 | - | let | |
257 | - | let | |
252 | + | func bm (bn,ba,bi,bo) = { | |
253 | + | let bp = aY(bn, ba) | |
254 | + | let bq = valueOrElse(getInteger(bp), 0) | |
255 | + | let br = if ((bq > aS)) | |
258 | 256 | then 0 | |
259 | - | else if ((( | |
260 | - | then ( | |
261 | - | else | |
262 | - | let | |
263 | - | let | |
264 | - | if ((( | |
265 | - | then throw((((((((((("Actual price = " + toString( | |
266 | - | else $Tuple2(IntegerEntry( | |
257 | + | else if (((bq + bi) > aS)) | |
258 | + | then (aS - bq) | |
259 | + | else bi | |
260 | + | let bs = (fraction(br, ((aT * h) - fraction(((100 * bq) + (50 * br)), h, aS)), am) + fraction((bi - br), h, al)) | |
261 | + | let bt = (bo - (bo / 100)) | |
262 | + | if (((bt * bi) > (bs * al))) | |
263 | + | then throw((((((((((("Actual price = " + toString(bs)) + " / ") + toString(bi)) + " < minPrice = ") + toString(bo)) + ", (") + bn) + ", ") + p[ba]) + ")")) | |
264 | + | else $Tuple2(IntegerEntry(bp, (bq + bi)), bs) | |
267 | 265 | } | |
268 | 266 | ||
269 | 267 | ||
270 | - | func | |
271 | - | let | |
272 | - | let | |
273 | - | let | |
274 | - | then min([ | |
268 | + | func bu (bn,bv,bi,bw) = { | |
269 | + | let bp = aY(bn, bv) | |
270 | + | let bq = valueOrElse(getInteger(bp), 0) | |
271 | + | let bx = if ((bq > aS)) | |
272 | + | then min([bi, (bq - aS)]) | |
275 | 273 | else 0 | |
276 | - | let | |
277 | - | let | |
278 | - | let | |
279 | - | let | |
280 | - | let | |
281 | - | if ((( | |
282 | - | then throw((((((((((("Actual price = " + toString( | |
283 | - | else $Tuple3(IntegerEntry( | |
274 | + | let by = min([bq, (bi - bx)]) | |
275 | + | let bz = (by + bx) | |
276 | + | let bA = min([bq, aS]) | |
277 | + | let bB = (fraction(by, ((aU * h) - fraction(((100 * bA) - (50 * by)), h, aS)), am) + fraction(bx, (2 * h), al)) | |
278 | + | let bC = (bw + (bw / 100)) | |
279 | + | if (((bB * al) > (bC * bz))) | |
280 | + | then throw((((((((((("Actual price = " + toString(bB)) + " / ") + toString(bz)) + " > maxPrice = ") + toString(bw)) + ", (") + bn) + ", ") + q[bv]) + ")")) | |
281 | + | else $Tuple3(IntegerEntry(bp, (bq - bz)), bB, bz) | |
284 | 282 | } | |
285 | 283 | ||
286 | 284 | ||
287 | - | func | |
288 | - | let | |
289 | - | [toString(valueOrElse(parseInt( | |
290 | - | then | |
291 | - | else "0_0_0_0_0_0", if ((size(split( | |
292 | - | then | |
293 | - | else "0_0_0_0_0_0", | |
285 | + | func bD (bE) = { | |
286 | + | let bg = split_4C(valueOrElse(getString(aD, bE), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":") | |
287 | + | [toString(valueOrElse(parseInt(bg[G]), 0)), if ((size(split(bg[H], "_")) == f)) | |
288 | + | then bg[H] | |
289 | + | else "0_0_0_0_0_0", if ((size(split(bg[I], "_")) == f)) | |
290 | + | then bg[I] | |
291 | + | else "0_0_0_0_0_0", bg[J]] | |
294 | 292 | } | |
295 | 293 | ||
296 | 294 | ||
297 | - | func | |
295 | + | func bF () = if (valueOrElse(getBoolean(aD, aL()), false)) | |
298 | 296 | then throw("Contracts are under maintenance") | |
299 | 297 | else unit | |
300 | 298 | ||
301 | 299 | ||
302 | - | func | |
300 | + | func bG () = aJ(reentrantInvoke(aD, "saveLastTx", nil, nil)) | |
303 | 301 | ||
304 | 302 | ||
305 | - | func | |
306 | - | let | |
307 | - | let | |
308 | - | then | |
303 | + | func bH (bI,bJ) = { | |
304 | + | let bK = bI._1 | |
305 | + | let bL = if ((size(bI._10) > bK)) | |
306 | + | then bI._10[bK] | |
309 | 307 | else "0@0" | |
310 | - | let | |
311 | - | let | |
312 | - | if ((size( | |
308 | + | let bM = bI._8 | |
309 | + | let bN = split(bL, "@") | |
310 | + | if ((size(bN) != 2)) | |
313 | 311 | then throw("Incorrect order format, should be amount@price") | |
314 | 312 | else { | |
315 | - | let | |
316 | - | let | |
317 | - | let | |
318 | - | then ( | |
319 | - | else fraction(bP, | |
320 | - | let | |
321 | - | let | |
322 | - | then parseIntValue( | |
313 | + | let bO = parseIntValue(bN[0]) | |
314 | + | let bP = parseIntValue(bN[1]) | |
315 | + | let bQ = if (bM) | |
316 | + | then (bO * bP) | |
317 | + | else fraction(bO, bP, al) | |
318 | + | let bR = bh(bO, y, bM) | |
319 | + | let bS = if ((size(bI._6) > bK)) | |
320 | + | then parseIntValue(bI._6[bK]) | |
323 | 321 | else 0 | |
324 | - | let | |
325 | - | then | |
322 | + | let bT = split(if ((size(bI._7) > bK)) | |
323 | + | then bI._7[bK] | |
326 | 324 | else "0@0", "@") | |
327 | - | let | |
328 | - | let | |
329 | - | if (if ((0 > | |
325 | + | let bU = parseIntValue(bT[0]) | |
326 | + | let bV = parseIntValue(bT[1]) | |
327 | + | if (if ((0 > bV)) | |
330 | 328 | then true | |
331 | - | else (0 > | |
329 | + | else (0 > bP)) | |
332 | 330 | then throw("Price can't be negative") | |
333 | 331 | else { | |
334 | - | let | |
335 | - | then ( | |
336 | - | else fraction(bV, | |
337 | - | if (( | |
338 | - | then if (( | |
339 | - | then $Tuple10(( | |
340 | - | else $Tuple10(( | |
341 | - | else if (( | |
342 | - | then if ((0 > | |
343 | - | then $Tuple10(( | |
344 | - | else $Tuple10(( | |
345 | - | else if ((0 > | |
332 | + | let bW = if (bM) | |
333 | + | then (bU * bV) | |
334 | + | else fraction(bU, bV, al) | |
335 | + | if ((bO == 0)) | |
336 | + | then if ((bU > 0)) | |
337 | + | then $Tuple10((bK + 1), (bI._2 :+ toString(bS)), bI._3, bI._4, (bI._5 - bW), bI._6, bI._7, bM, (bI._9 + bh(bS, y, bM)), bI._10) | |
338 | + | else $Tuple10((bK + 1), (bI._2 :+ toString((bS - bU))), bI._3, bI._4, bI._5, bI._6, bI._7, bM, (bI._9 + bh((bS - bU), y, bM)), bI._10) | |
339 | + | else if ((bO > 0)) | |
340 | + | then if ((0 > bU)) | |
341 | + | then $Tuple10((bK + 1), (bI._2 :+ toString((bS - bU))), (bI._3 + bR), bI._4, (bI._5 + bQ), bI._6, bI._7, bM, bh((bS - bU), y, bM), bI._10) | |
342 | + | else $Tuple10((bK + 1), (bI._2 :+ toString(bS)), (bI._3 + bR), bI._4, ((bI._5 + bQ) - bW), bI._6, bI._7, bM, bh(bS, y, bM), bI._10) | |
343 | + | else if ((0 > bU)) | |
346 | 344 | then { | |
347 | - | let | |
348 | - | if ((0 > ( | |
349 | - | then throw((((("Attempt to take " + toString( | |
350 | - | else $Tuple10(( | |
345 | + | let bX = (bU - bO) | |
346 | + | if ((0 > (bS - bX))) | |
347 | + | then throw((((("Attempt to take " + toString(bX)) + " from warehouse, but only ") + toString(bS)) + " available")) | |
348 | + | else $Tuple10((bK + 1), (bI._2 :+ toString((bS - bX))), bI._3, (bI._4 - bR), bI._5, bI._6, bI._7, bM, bh((bS - bX), y, bM), bI._10) | |
351 | 349 | } | |
352 | - | else if ((0 > ( | |
353 | - | then throw((((("Attempt to take " + toString(-( | |
354 | - | else $Tuple10(( | |
350 | + | else if ((0 > (bS + bO))) | |
351 | + | then throw((((("Attempt to take " + toString(-(bO))) + " from warehouse, but only ") + toString(bS)) + " available")) | |
352 | + | else $Tuple10((bK + 1), (bI._2 :+ toString((bS + bO))), bI._3, (bI._4 - bR), (bI._5 - bW), bI._6, bI._7, bM, bh((bS + bO), y, bM), bI._10) | |
355 | 353 | } | |
356 | 354 | } | |
357 | 355 | } | |
358 | 356 | ||
359 | 357 | ||
360 | - | func | |
361 | - | let | |
362 | - | let | |
363 | - | let | |
358 | + | func bY (bZ,ca,cb) = { | |
359 | + | let cc = split(bZ[A], "_") | |
360 | + | let cd = split(bZ[B], "_") | |
361 | + | let ce = if ((bZ[C] == "")) | |
364 | 362 | then nil | |
365 | - | else split_4C( | |
366 | - | let | |
367 | - | let | |
368 | - | let | |
363 | + | else split_4C(bZ[C], "_") | |
364 | + | let cf = split(ca[bb], "_") | |
365 | + | let cg = split(ca[bc], "_") | |
366 | + | let ch = if ((ca[bd] == "")) | |
369 | 367 | then nil | |
370 | - | else split_4C( | |
371 | - | if ((size( | |
368 | + | else split_4C(ca[bd], "_") | |
369 | + | if ((size(cb) != 3)) | |
372 | 370 | then throw("newOrderStr should contain exactly 2 ':' separators") | |
373 | 371 | else { | |
374 | - | let | |
375 | - | let | |
376 | - | let | |
372 | + | let ci = split(cb[0], "_") | |
373 | + | let cj = split(cb[1], "_") | |
374 | + | let ck = if ((cb[2] == "")) | |
377 | 375 | then nil | |
378 | - | else split_4C( | |
379 | - | if ((size( | |
376 | + | else split_4C(cb[2], "_") | |
377 | + | if ((size(ci) != f)) | |
380 | 378 | then throw("All 6 resources should be passed") | |
381 | - | else if ((size( | |
379 | + | else if ((size(cj) != f)) | |
382 | 380 | then throw("All 6 materials should be passed") | |
383 | 381 | else { | |
384 | - | let | |
385 | - | let | |
386 | - | let | |
387 | - | let | |
388 | - | func | |
389 | - | then | |
390 | - | else | |
382 | + | let cl = { | |
383 | + | let cm = p | |
384 | + | let cn = size(cm) | |
385 | + | let co = $Tuple10(0, nil, 0, 0, 0, cc, cf, false, 0, ci) | |
386 | + | func cp (cq,cr) = if ((cr >= cn)) | |
387 | + | then cq | |
388 | + | else bH(cq, cm[cr]) | |
391 | 389 | ||
392 | - | func | |
393 | - | then | |
390 | + | func cs (cq,cr) = if ((cr >= cn)) | |
391 | + | then cq | |
394 | 392 | else throw("List size exceeds 6") | |
395 | 393 | ||
396 | - | | |
394 | + | cs(cp(cp(cp(cp(cp(cp(co, 0), 1), 2), 3), 4), 5), 6) | |
397 | 395 | } | |
398 | - | let | |
399 | - | let | |
400 | - | let | |
401 | - | let | |
402 | - | func | |
403 | - | then | |
404 | - | else | |
396 | + | let bz = { | |
397 | + | let cm = q | |
398 | + | let cn = size(cm) | |
399 | + | let co = $Tuple10(0, nil, cl._3, cl._4, cl._5, cd, cg, false, cl._9, cj) | |
400 | + | func ct (cq,cr) = if ((cr >= cn)) | |
401 | + | then cq | |
402 | + | else bH(cq, cm[cr]) | |
405 | 403 | ||
406 | - | func | |
407 | - | then | |
404 | + | func cu (cq,cr) = if ((cr >= cn)) | |
405 | + | then cq | |
408 | 406 | else throw("List size exceeds 6") | |
409 | 407 | ||
410 | - | | |
408 | + | cu(ct(ct(ct(ct(ct(ct(co, 0), 1), 2), 3), 4), 5), 6) | |
411 | 409 | } | |
412 | - | let | |
413 | - | let | |
414 | - | let | |
415 | - | let | |
416 | - | func | |
417 | - | then | |
418 | - | else | |
410 | + | let bg = { | |
411 | + | let cm = r | |
412 | + | let cn = size(cm) | |
413 | + | let co = $Tuple10(0, nil, bz._3, bz._4, bz._5, ce, ch, true, bz._9, ck) | |
414 | + | func cv (cq,cr) = if ((cr >= cn)) | |
415 | + | then cq | |
416 | + | else bH(cq, cm[cr]) | |
419 | 417 | ||
420 | - | func | |
421 | - | then | |
418 | + | func cw (cq,cr) = if ((cr >= cn)) | |
419 | + | then cq | |
422 | 420 | else throw("List size exceeds 50") | |
423 | 421 | ||
424 | - | | |
422 | + | cw(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(co, 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) | |
425 | 423 | } | |
426 | - | $Tuple7( | |
424 | + | $Tuple7(cl._2, bz._2, bg._2, bg._3, bg._4, bg._5, bg._9) | |
427 | 425 | } | |
428 | 426 | } | |
429 | 427 | } | |
430 | 428 | ||
431 | 429 | ||
432 | - | func | |
433 | - | let | |
434 | - | let | |
435 | - | let | |
436 | - | if ((size( | |
430 | + | func cx (bI,cy) = { | |
431 | + | let bK = bI._7 | |
432 | + | let bM = bI._12 | |
433 | + | let cz = split(cy, "@") | |
434 | + | if ((size(cz) != 2)) | |
437 | 435 | then throw("Incorrect order format, should be amount@price") | |
438 | 436 | else { | |
439 | - | let | |
440 | - | let | |
441 | - | if ((0 > | |
437 | + | let cA = parseIntValue(cz[0]) | |
438 | + | let cB = parseIntValue(cz[1]) | |
439 | + | if ((0 > cB)) | |
442 | 440 | then throw("Price can't be negative") | |
443 | 441 | else { | |
444 | - | let | |
445 | - | then ( | |
446 | - | else fraction(cB, | |
447 | - | let | |
448 | - | then parseIntValue( | |
442 | + | let cC = if (bM) | |
443 | + | then (cA * cB) | |
444 | + | else fraction(cA, cB, al) | |
445 | + | let cD = if ((size(bI._8) > bK)) | |
446 | + | then parseIntValue(bI._8[bK]) | |
449 | 447 | else 0 | |
450 | - | let | |
451 | - | then parseIntValue( | |
448 | + | let bS = if ((size(bI._9) > bK)) | |
449 | + | then parseIntValue(bI._9[bK]) | |
452 | 450 | else 0 | |
453 | - | let | |
454 | - | then | |
451 | + | let cE = if ((size(bI._10) > bK)) | |
452 | + | then bI._10[bK] | |
455 | 453 | else "0@0" | |
456 | - | let | |
457 | - | let | |
458 | - | let | |
459 | - | if (if (( | |
460 | - | then ( | |
454 | + | let cF = split(cE, "@") | |
455 | + | let cG = parseIntValue(cF[0]) | |
456 | + | let cH = parseIntValue(cF[1]) | |
457 | + | if (if ((cA != 0)) | |
458 | + | then (cB != cH) | |
461 | 459 | else false) | |
462 | - | then throw(((((("Prices of " + | |
460 | + | then throw(((((("Prices of " + bI._11[bK]) + " don't match! WH price=") + toString(cH)) + ", your price=") + toString(cB))) | |
463 | 461 | else { | |
464 | - | let | |
465 | - | then ( | |
466 | - | else fraction(cH, | |
467 | - | let | |
468 | - | if (( | |
469 | - | then $Tuple13(( | |
470 | - | else if (( | |
471 | - | then if ((0 > | |
472 | - | then if (( | |
473 | - | then throw(((((("Attempt to buy " + toString( | |
474 | - | else $Tuple13(( | |
475 | - | then ( | |
476 | - | else | |
477 | - | else throw((("Attempt to buy " + | |
478 | - | else if (( | |
479 | - | then if ((-( | |
480 | - | then throw(((((("Attempt to sell " + toString(-( | |
481 | - | else if ((-( | |
482 | - | then throw(((((("Attempt to sell " + toString(-( | |
483 | - | else $Tuple13(( | |
484 | - | then ( | |
485 | - | else | |
486 | - | else throw((("Attempt to sell " + | |
462 | + | let cI = if (bM) | |
463 | + | then (cG * cH) | |
464 | + | else fraction(cG, cH, al) | |
465 | + | let cJ = bh(cA, y, bM) | |
466 | + | if ((cA == 0)) | |
467 | + | then $Tuple13((bI._1 :+ toString(bS)), (bI._2 :+ cE), (bI._3 :+ toString(cD)), bI._4, bI._5, bI._6, (bI._7 + 1), bI._8, bI._9, bI._10, bI._11, bM, bI._13) | |
468 | + | else if ((cA > 0)) | |
469 | + | then if ((0 > cG)) | |
470 | + | then if ((cA > -(cG))) | |
471 | + | then throw(((((("Attempt to buy " + toString(cA)) + " of ") + bI._11[bK]) + ", but warehouse only sells ") + toString(-(cG)))) | |
472 | + | else $Tuple13((bI._1 :+ toString(bS)), (bI._2 :+ ((toString((cG + cA)) + "@") + toString(cH))), (bI._3 :+ toString((cD + cA))), (bI._4 + cJ), bI._5, (bI._6 + cC), (bI._7 + 1), bI._8, bI._9, bI._10, bI._11, bM, (bI._13 + (if (bM) | |
473 | + | then (cA * al) | |
474 | + | else cA))) | |
475 | + | else throw((("Attempt to buy " + bI._11[bK]) + " while warehouse doesn't sell it")) | |
476 | + | else if ((cG > 0)) | |
477 | + | then if ((-(cA) > cG)) | |
478 | + | then throw(((((("Attempt to sell " + toString(-(cA))) + " of ") + bI._11[bK]) + ", but warehouse only buys ") + toString(cG))) | |
479 | + | else if ((-(cA) > cD)) | |
480 | + | then throw(((((("Attempt to sell " + toString(-(cA))) + ", but you only have ") + toString(cD)) + " of ") + bI._11[bK])) | |
481 | + | else $Tuple13((bI._1 :+ toString((bS - cA))), (bI._2 :+ ((toString((cG + cA)) + "@") + toString(cH))), (bI._3 :+ toString((cD + cA))), (bI._4 - cJ), (bI._5 - cC), bI._6, (bI._7 + 1), bI._8, bI._9, bI._10, bI._11, bM, (bI._13 - (if (bM) | |
482 | + | then (cA * al) | |
483 | + | else cA))) | |
484 | + | else throw((("Attempt to sell " + bI._11[bK]) + " while warehouse doesn't buy it")) | |
487 | 485 | } | |
488 | 486 | } | |
489 | 487 | } | |
490 | 488 | } | |
491 | 489 | ||
492 | 490 | ||
493 | - | func | |
494 | - | func | |
495 | - | then throw(((((("You have " + | |
496 | - | else if ((0 > | |
497 | - | then throw(((("You tried to sell negative amount of " + p[ | |
498 | - | else if (( | |
491 | + | func cK (cL,cM,cN,cO) = { | |
492 | + | func cP (bI,bK) = if ((cN[bK] > parseIntValue(cL[bK]))) | |
493 | + | then throw(((((("You have " + cL[bK]) + " of ") + p[bK]) + ", but tried to sell ") + toString(cN[bK]))) | |
494 | + | else if ((0 > cN[bK])) | |
495 | + | then throw(((("You tried to sell negative amount of " + p[bK]) + ": ") + toString(cN[bK]))) | |
496 | + | else if ((cN[bK] > 0)) | |
499 | 497 | then { | |
500 | - | let | |
501 | - | $Tuple4(( | |
498 | + | let cQ = bm(cM, bK, cN[bK], cO[bK]) | |
499 | + | $Tuple4((bI._1 :+ cQ._1), (bI._2 :+ toString((parseIntValue(cL[bK]) - cN[bK]))), (bI._3 + cQ._2), (bI._4 + cN[bK])) | |
502 | 500 | } | |
503 | - | else $Tuple4( | |
501 | + | else $Tuple4(bI._1, (bI._2 :+ cL[bK]), bI._3, bI._4) | |
504 | 502 | ||
505 | - | let | |
506 | - | let | |
507 | - | let | |
508 | - | func | |
509 | - | then | |
510 | - | else | |
503 | + | let cm = ao | |
504 | + | let cn = size(cm) | |
505 | + | let co = $Tuple4(nil, nil, 0, 0) | |
506 | + | func cp (cq,cr) = if ((cr >= cn)) | |
507 | + | then cq | |
508 | + | else cP(cq, cm[cr]) | |
511 | 509 | ||
512 | - | func | |
513 | - | then | |
510 | + | func cs (cq,cr) = if ((cr >= cn)) | |
511 | + | then cq | |
514 | 512 | else throw("List size exceeds 6") | |
515 | 513 | ||
516 | - | | |
514 | + | cs(cp(cp(cp(cp(cp(cp(co, 0), 1), 2), 3), 4), 5), 6) | |
517 | 515 | } | |
518 | 516 | ||
519 | 517 | ||
520 | - | func | |
521 | - | func | |
522 | - | then throw(((("You tried to buy negative amount of " + q[ | |
523 | - | else if (( | |
518 | + | func cR (cS,cM,cN,cT) = { | |
519 | + | func cU (bI,bK) = if ((0 > cN[bK])) | |
520 | + | then throw(((("You tried to buy negative amount of " + q[bK]) + ": ") + toString(cN[bK]))) | |
521 | + | else if ((cN[bK] > 0)) | |
524 | 522 | then { | |
525 | - | let | |
526 | - | $Tuple4(( | |
523 | + | let cQ = bu(cM, bK, cN[bK], cT[bK]) | |
524 | + | $Tuple4((bI._1 :+ cQ._1), (bI._2 :+ toString((parseIntValue(cS[bK]) + cQ._3))), (bI._3 + cQ._2), (bI._4 + cN[bK])) | |
527 | 525 | } | |
528 | - | else $Tuple4( | |
526 | + | else $Tuple4(bI._1, (bI._2 :+ cS[bK]), bI._3, bI._4) | |
529 | 527 | ||
530 | - | let | |
531 | - | let | |
532 | - | let | |
533 | - | func | |
534 | - | then | |
535 | - | else | |
528 | + | let cm = ao | |
529 | + | let cn = size(cm) | |
530 | + | let co = $Tuple4(nil, nil, 0, 0) | |
531 | + | func cp (cq,cr) = if ((cr >= cn)) | |
532 | + | then cq | |
533 | + | else cU(cq, cm[cr]) | |
536 | 534 | ||
537 | - | func | |
538 | - | then | |
535 | + | func cs (cq,cr) = if ((cr >= cn)) | |
536 | + | then cq | |
539 | 537 | else throw("List size exceeds 6") | |
540 | 538 | ||
541 | - | | |
539 | + | cs(cp(cp(cp(cp(cp(cp(co, 0), 1), 2), 3), 4), 5), 6) | |
542 | 540 | } | |
543 | 541 | ||
544 | 542 | ||
545 | - | func | |
546 | - | func | |
547 | - | let | |
548 | - | if (( | |
549 | - | then throw(((((("You have " + | |
550 | - | else if ((0 > | |
551 | - | then throw(((("You tried to exchange negative amount of " + p[ | |
552 | - | else if (( | |
553 | - | then $Tuple4(( | |
554 | - | else $Tuple4(( | |
543 | + | func cV (cL,cS,cN) = { | |
544 | + | func cW (bI,bK) = { | |
545 | + | let cX = cN[bK] | |
546 | + | if ((cX > parseIntValue(cL[bK]))) | |
547 | + | then throw(((((("You have " + cL[bK]) + " of ") + p[bK]) + ", but tried to exchange ") + toString(cX))) | |
548 | + | else if ((0 > cX)) | |
549 | + | then throw(((("You tried to exchange negative amount of " + p[bK]) + ": ") + toString(cX))) | |
550 | + | else if ((cX > 0)) | |
551 | + | then $Tuple4((bI._1 :+ toString((parseIntValue(cL[bK]) - cX))), (bI._2 :+ toString((parseIntValue(cS[bK]) + cX))), (bI._3 + fraction(cX, h, al)), (bI._4 + cX)) | |
552 | + | else $Tuple4((bI._1 :+ cL[bK]), (bI._2 :+ cS[bK]), bI._3, bI._4) | |
555 | 553 | } | |
556 | 554 | ||
557 | - | let | |
558 | - | let | |
559 | - | let | |
560 | - | func | |
561 | - | then | |
562 | - | else | |
555 | + | let cm = ao | |
556 | + | let cn = size(cm) | |
557 | + | let co = $Tuple4(nil, nil, 0, 0) | |
558 | + | func cp (cq,cr) = if ((cr >= cn)) | |
559 | + | then cq | |
560 | + | else cW(cq, cm[cr]) | |
563 | 561 | ||
564 | - | func | |
565 | - | then | |
562 | + | func cs (cq,cr) = if ((cr >= cn)) | |
563 | + | then cq | |
566 | 564 | else throw("List size exceeds 6") | |
567 | 565 | ||
568 | - | | |
566 | + | cs(cp(cp(cp(cp(cp(cp(co, 0), 1), 2), 3), 4), 5), 6) | |
569 | 567 | } | |
570 | 568 | ||
571 | 569 | ||
572 | - | func | |
570 | + | func cY (cZ,da,db) = if ((cZ > 0)) | |
573 | 571 | then { | |
574 | - | let | |
575 | - | if (( | |
576 | - | then throw(("This trade does not cover delivery cost of " + | |
572 | + | let dc = fraction(cZ, aV, ak) | |
573 | + | if ((db >= (cZ - (3 * dc)))) | |
574 | + | then throw(("This trade does not cover delivery cost of " + aM(db, 6))) | |
577 | 575 | else { | |
578 | - | let | |
579 | - | let | |
580 | - | let | |
581 | - | (((if (isDefined( | |
582 | - | then [ScriptTransfer(addressFromStringValue(value( | |
583 | - | else nil) :+ ScriptTransfer( | |
576 | + | let dd = Q(da) | |
577 | + | let de = getString(aD, dd) | |
578 | + | let df = addressFromStringValue(da) | |
579 | + | (((if (isDefined(de)) | |
580 | + | then [ScriptTransfer(addressFromStringValue(value(de)), dc, af)] | |
581 | + | else nil) :+ ScriptTransfer(df, ((cZ - (3 * dc)) - db), af)) :+ ScriptTransfer(aC, dc, af)) | |
584 | 582 | } | |
585 | 583 | } | |
586 | 584 | else nil | |
587 | 585 | ||
588 | 586 | ||
589 | - | func | |
590 | - | then if ((size( | |
587 | + | func dg (dh,di,dj,dk) = if ((dh > 0)) | |
588 | + | then if ((size(di) != 1)) | |
591 | 589 | then throw("exactly 1 payment must be attached") | |
592 | 590 | else { | |
593 | - | let | |
594 | - | let | |
595 | - | if (if (!(isDefined( | |
591 | + | let dl = di[0] | |
592 | + | let dm = dl.amount | |
593 | + | if (if (!(isDefined(dl.assetId))) | |
596 | 594 | then true | |
597 | - | else (value( | |
595 | + | else (value(dl.assetId) != af)) | |
598 | 596 | then throw("USDT payments only!") | |
599 | 597 | else { | |
600 | - | let | |
601 | - | if (( | |
602 | - | then throw((((((("Insufficient payment! Attached=" + | |
603 | - | else if (( | |
604 | - | then throw(("Min shop trade is " + | |
598 | + | let dn = (dh + dk) | |
599 | + | if ((dm != dn)) | |
600 | + | then throw((((((("Insufficient payment! Attached=" + aM(dm, 6)) + ", required=") + aM(dh, 6)) + "+") + aM(dk, 6)) + "(delivery fee)")) | |
601 | + | else if ((an > dh)) | |
602 | + | then throw(("Min shop trade is " + aM(an, 6))) | |
605 | 603 | else { | |
606 | - | let | |
607 | - | let | |
608 | - | let | |
609 | - | (((if (isDefined( | |
610 | - | then [ScriptTransfer(addressFromStringValue(value( | |
611 | - | else nil) :+ ScriptTransfer(addressFromStringValue( | |
604 | + | let do = fraction(dh, aV, ak) | |
605 | + | let dd = Q(dj) | |
606 | + | let de = getString(aD, dd) | |
607 | + | (((if (isDefined(de)) | |
608 | + | then [ScriptTransfer(addressFromStringValue(value(de)), do, af)] | |
609 | + | else nil) :+ ScriptTransfer(addressFromStringValue(dj), (dh - (3 * do)), af)) :+ ScriptTransfer(aC, do, af)) | |
612 | 610 | } | |
613 | 611 | } | |
614 | 612 | } | |
615 | - | else if ((size( | |
613 | + | else if ((size(di) != 0)) | |
616 | 614 | then throw("No payments needed") | |
617 | 615 | else nil | |
618 | 616 | ||
619 | 617 | ||
620 | - | func | |
621 | - | let | |
622 | - | if (!(isDefined(getInteger( | |
623 | - | then throw((("NFT " + | |
618 | + | func dp (dq,da,dr,ds,dt,du) = { | |
619 | + | let dv = value(assetInfo(fromBase58String(dq))) | |
620 | + | if (!(isDefined(getInteger(aD, P(dq))))) | |
621 | + | then throw((("NFT " + dv.name) + " is not staked")) | |
624 | 622 | else { | |
625 | - | let | |
626 | - | if (( | |
623 | + | let dj = valueOrErrorMessage(getString(aD, N(dq)), (("NFT " + dv.name) + " is orphaned")) | |
624 | + | if ((dj == da)) | |
627 | 625 | then throw("You cannot trade with yourself") | |
628 | 626 | else { | |
629 | - | let | |
630 | - | if ((size( | |
627 | + | let dw = split_4C(dr, ":") | |
628 | + | if ((size(dw) != 3)) | |
631 | 629 | then throw("bpOrderStr should contain exactly 2 ':' separators") | |
632 | 630 | else { | |
633 | - | let | |
634 | - | let | |
635 | - | let | |
631 | + | let dx = split(dw[0], "_") | |
632 | + | let dy = split(dw[1], "_") | |
633 | + | let dz = if ((dw[2] == "")) | |
636 | 634 | then nil | |
637 | - | else split_4C( | |
638 | - | if ((size( | |
635 | + | else split_4C(dw[2], "_") | |
636 | + | if ((size(dx) != f)) | |
639 | 637 | then throw("All 6 resources should be passed") | |
640 | - | else if ((size( | |
638 | + | else if ((size(dy) != f)) | |
641 | 639 | then throw("All 6 materials should be passed") | |
642 | 640 | else { | |
643 | - | let | |
644 | - | let | |
645 | - | let | |
646 | - | let | |
647 | - | let | |
641 | + | let dA = aG(invoke(aD, "getWarehouseREADONLY", [dq], nil)) | |
642 | + | let bZ = split_4C(dA, ":") | |
643 | + | let cc = split(bZ[A], "_") | |
644 | + | let cd = split(bZ[B], "_") | |
645 | + | let ce = if ((bZ[C] == "")) | |
648 | 646 | then nil | |
649 | - | else split_4C( | |
650 | - | let | |
651 | - | let | |
652 | - | let | |
653 | - | let | |
654 | - | let | |
655 | - | let | |
647 | + | else split_4C(bZ[C], "_") | |
648 | + | let dB = parseIntValue(split(bZ[D], "_")[E]) | |
649 | + | let bf = X(dq) | |
650 | + | let dC = be(bf) | |
651 | + | let dD = split(dC[bb], "_") | |
652 | + | let dE = split(dC[bc], "_") | |
653 | + | let dF = if ((dC[bd] == "")) | |
656 | 654 | then nil | |
657 | - | else split_4C( | |
658 | - | let | |
659 | - | let | |
660 | - | let | |
661 | - | let | |
662 | - | func | |
663 | - | then | |
664 | - | else | |
655 | + | else split_4C(dC[bd], "_") | |
656 | + | let cl = { | |
657 | + | let cm = dx | |
658 | + | let cn = size(cm) | |
659 | + | let co = $Tuple13(nil, nil, nil, 0, 0, 0, 0, ds, cc, dD, p, false, 0) | |
660 | + | func cp (cq,cr) = if ((cr >= cn)) | |
661 | + | then cq | |
662 | + | else cx(cq, cm[cr]) | |
665 | 663 | ||
666 | - | func | |
667 | - | then | |
664 | + | func cs (cq,cr) = if ((cr >= cn)) | |
665 | + | then cq | |
668 | 666 | else throw("List size exceeds 6") | |
669 | 667 | ||
670 | - | | |
668 | + | cs(cp(cp(cp(cp(cp(cp(co, 0), 1), 2), 3), 4), 5), 6) | |
671 | 669 | } | |
672 | - | let | |
673 | - | let | |
674 | - | let | |
675 | - | let | |
676 | - | func | |
677 | - | then | |
678 | - | else | |
670 | + | let bz = { | |
671 | + | let cm = dy | |
672 | + | let cn = size(cm) | |
673 | + | let co = $Tuple13(nil, nil, nil, cl._4, cl._5, cl._6, 0, dt, cd, dE, q, false, cl._13) | |
674 | + | func ct (cq,cr) = if ((cr >= cn)) | |
675 | + | then cq | |
676 | + | else cx(cq, cm[cr]) | |
679 | 677 | ||
680 | - | func | |
681 | - | then | |
678 | + | func cu (cq,cr) = if ((cr >= cn)) | |
679 | + | then cq | |
682 | 680 | else throw("List size exceeds 6") | |
683 | 681 | ||
684 | - | | |
682 | + | cu(ct(ct(ct(ct(ct(ct(co, 0), 1), 2), 3), 4), 5), 6) | |
685 | 683 | } | |
686 | - | let | |
684 | + | let bg = if ((size(dz) != 0)) | |
687 | 685 | then { | |
688 | - | let | |
689 | - | let | |
690 | - | let | |
691 | - | func | |
692 | - | then | |
693 | - | else | |
686 | + | let cm = dz | |
687 | + | let cn = size(cm) | |
688 | + | let co = $Tuple13(nil, nil, nil, bz._4, bz._5, bz._6, 0, du, ce, dF, r, true, bz._13) | |
689 | + | func cv (cq,cr) = if ((cr >= cn)) | |
690 | + | then cq | |
691 | + | else cx(cq, cm[cr]) | |
694 | 692 | ||
695 | - | func | |
696 | - | then | |
693 | + | func cw (cq,cr) = if ((cr >= cn)) | |
694 | + | then cq | |
697 | 695 | else throw("List size exceeds 50") | |
698 | 696 | ||
699 | - | | |
697 | + | cw(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(co, 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) | |
700 | 698 | } | |
701 | - | else $Tuple13( | |
702 | - | let | |
703 | - | let | |
699 | + | else $Tuple13(ce, dF, du, bz._4, bz._5, bz._6, 0, du, ce, dF, r, true, bz._13) | |
700 | + | let dG = bg._4 | |
701 | + | let dH = if ((0 > (dB - dG))) | |
704 | 702 | then 0 | |
705 | - | else ( | |
706 | - | let | |
707 | - | let | |
708 | - | let | |
709 | - | let | |
710 | - | $Tuple10(StringEntry( | |
703 | + | else (dB - dG) | |
704 | + | let dI = makeString_2C([bZ[z], makeString(cl._1, "_"), makeString(bz._1, "_"), makeString_2C(bg._1, "_"), toString(dH)], ":") | |
705 | + | let dJ = makeString_2C([makeString(cl._2, "_"), makeString(bz._2, "_"), makeString_2C(bg._2, "_")], ":") | |
706 | + | let dK = aG(invoke(aD, "saveWarehouse", [dI, dq], nil)) | |
707 | + | let dL = aJ(invoke(aD, "updateAccStats", [dj, fraction(d, bg._13, al)], nil)) | |
708 | + | $Tuple10(StringEntry(bf, dJ), cl._3, bz._3, bg._3, bg._5, bg._6, bg._13, dj, dK, dL) | |
711 | 709 | } | |
712 | 710 | } | |
713 | 711 | } | |
714 | 712 | } | |
715 | 713 | } | |
716 | 714 | ||
717 | 715 | ||
718 | - | func | |
719 | - | let | |
720 | - | let | |
721 | - | let | |
722 | - | let | |
723 | - | let | |
724 | - | func | |
725 | - | let | |
726 | - | $Tuple3(( | |
716 | + | func dM (bi) = { | |
717 | + | let dN = (bi / 30) | |
718 | + | let dO = [dN, dN, dN, dN, dN, dN] | |
719 | + | let aI = toString(dN) | |
720 | + | let cL = [aI, aI, aI, aI, aI, aI] | |
721 | + | let cO = [0, 0, 0, 0, 0, 0] | |
722 | + | func dP (bI,dQ) = { | |
723 | + | let dR = cK(cL, dQ, dO, cO) | |
724 | + | $Tuple3((bI._1 ++ dR._1), (bI._2 + dR._3), (bI._3 + dR._4)) | |
727 | 725 | } | |
728 | 726 | ||
729 | - | let | |
730 | - | let | |
731 | - | let | |
732 | - | let | |
733 | - | func | |
734 | - | then | |
735 | - | else | |
727 | + | let dS = { | |
728 | + | let cm = s | |
729 | + | let cn = size(cm) | |
730 | + | let co = $Tuple3(nil, 0, 0) | |
731 | + | func cp (cq,cr) = if ((cr >= cn)) | |
732 | + | then cq | |
733 | + | else dP(cq, cm[cr]) | |
736 | 734 | ||
737 | - | func | |
738 | - | then | |
735 | + | func cs (cq,cr) = if ((cr >= cn)) | |
736 | + | then cq | |
739 | 737 | else throw("List size exceeds 5") | |
740 | 738 | ||
741 | - | | |
739 | + | cs(cp(cp(cp(cp(cp(co, 0), 1), 2), 3), 4), 5) | |
742 | 740 | } | |
743 | - | let | |
744 | - | let | |
745 | - | let | |
746 | - | let | |
747 | - | let | |
748 | - | let | |
749 | - | $Tuple5( | |
741 | + | let dT = dS._1 | |
742 | + | let bs = dS._2 | |
743 | + | let dU = dS._3 | |
744 | + | let dV = fraction(bs, aW, ak) | |
745 | + | let dW = (bs / 100) | |
746 | + | let dX = ((bs - dW) - dV) | |
747 | + | $Tuple5(dT, dX, dV, dW, dU) | |
750 | 748 | } | |
751 | 749 | ||
752 | 750 | ||
753 | - | func | |
751 | + | func dY (cS,dZ,ea,eb,ec) = if ((0 >= ec)) | |
754 | 752 | then throw("Quantity should be positive") | |
755 | - | else if (if ((0 > | |
753 | + | else if (if ((0 > eb)) | |
756 | 754 | then true | |
757 | - | else ( | |
758 | - | then throw(("Unknown product idx=" + toString( | |
755 | + | else (eb >= size(u))) | |
756 | + | then throw(("Unknown product idx=" + toString(eb))) | |
759 | 757 | else { | |
760 | - | let ad = split(u[ | |
758 | + | let ad = split(u[eb], "_") | |
761 | 759 | if ((size(ad) != x)) | |
762 | - | then throw(("Fatal: unknown recipe: " + u[ | |
760 | + | then throw(("Fatal: unknown recipe: " + u[eb])) | |
763 | 761 | else { | |
764 | - | let | |
765 | - | if ((s[ | |
766 | - | then throw(((("This product is available in " + s[ | |
762 | + | let ed = parseIntValue(ad[w]) | |
763 | + | if ((s[ed] != ea)) | |
764 | + | then throw(((("This product is available in " + s[ed]) + ", not in ") + ea)) | |
767 | 765 | else { | |
768 | - | func | |
769 | - | let | |
770 | - | let | |
771 | - | then | |
766 | + | func ee (bI,ef) = { | |
767 | + | let aK = bI._2 | |
768 | + | let eg = if ((size(dZ) > aK)) | |
769 | + | then dZ[aK] | |
772 | 770 | else "0" | |
773 | - | let | |
774 | - | let | |
775 | - | let | |
776 | - | then toString(( | |
777 | - | else | |
778 | - | $Tuple2(( | |
771 | + | let dR = parseIntValue(eg) | |
772 | + | let bi = (ec * y) | |
773 | + | let eh = if ((aK == eb)) | |
774 | + | then toString((dR + bi)) | |
775 | + | else eg | |
776 | + | $Tuple2((bI._1 :+ eh), (aK + 1)) | |
779 | 777 | } | |
780 | 778 | ||
781 | - | let | |
782 | - | let | |
783 | - | let | |
784 | - | func | |
785 | - | then | |
786 | - | else | |
779 | + | let ei = ( let cm = u | |
780 | + | let cn = size(cm) | |
781 | + | let co = $Tuple2(nil, 0) | |
782 | + | func cp (cq,cr) = if ((cr >= cn)) | |
783 | + | then cq | |
784 | + | else ee(cq, cm[cr]) | |
787 | 785 | ||
788 | - | func | |
789 | - | then | |
786 | + | func cs (cq,cr) = if ((cr >= cn)) | |
787 | + | then cq | |
790 | 788 | else throw("List size exceeds 50") | |
791 | 789 | ||
792 | - | | |
793 | - | func | |
794 | - | let | |
795 | - | let | |
796 | - | if (( | |
797 | - | then throw(((((((("You have " + | |
798 | - | else if (( | |
799 | - | then $Tuple2(( | |
800 | - | else $Tuple2(( | |
790 | + | cs(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(co, 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 | |
791 | + | func ej (bI,bK) = { | |
792 | + | let ek = (((parseIntValue(ad[bK]) * aj) * ec) * parseIntValue(ad[v])) | |
793 | + | let el = parseIntValue(cS[bK]) | |
794 | + | if ((ek > el)) | |
795 | + | then throw(((((((("You have " + aM(el, 8)) + " of ") + q[bK]) + ", but recipe requires ") + aM(ek, 8)) + " for quantity ") + toString(ec))) | |
796 | + | else if ((ek > 0)) | |
797 | + | then $Tuple2((bI._1 :+ toString((el - ek))), (bI._2 + ek)) | |
798 | + | else $Tuple2((bI._1 :+ cS[bK]), bI._2) | |
801 | 799 | } | |
802 | 800 | ||
803 | - | let | |
804 | - | let | |
805 | - | let | |
806 | - | let | |
807 | - | func | |
808 | - | then | |
809 | - | else | |
801 | + | let em = { | |
802 | + | let cm = ao | |
803 | + | let cn = size(cm) | |
804 | + | let co = $Tuple2(nil, 0) | |
805 | + | func ct (cq,cr) = if ((cr >= cn)) | |
806 | + | then cq | |
807 | + | else ej(cq, cm[cr]) | |
810 | 808 | ||
811 | - | func | |
812 | - | then | |
809 | + | func cu (cq,cr) = if ((cr >= cn)) | |
810 | + | then cq | |
813 | 811 | else throw("List size exceeds 6") | |
814 | 812 | ||
815 | - | | |
813 | + | cu(ct(ct(ct(ct(ct(ct(co, 0), 1), 2), 3), 4), 5), 6) | |
816 | 814 | } | |
817 | - | $Tuple3( | |
815 | + | $Tuple3(em._1, ei, em._2) | |
818 | 816 | } | |
819 | 817 | } | |
820 | 818 | } | |
821 | 819 | ||
822 | 820 | ||
823 | - | @Callable( | |
824 | - | func recalcLockedVolumeREADONLY (Y, | |
825 | - | let | |
826 | - | let | |
827 | - | $Tuple2(nil, ( | |
821 | + | @Callable(en) | |
822 | + | func recalcLockedVolumeREADONLY (Y,dA) = { | |
823 | + | let ca = be(X(Y)) | |
824 | + | let eo = bY(dA, ca, ca) | |
825 | + | $Tuple2(nil, (eo._4 + eo._5)) | |
828 | 826 | } | |
829 | 827 | ||
830 | 828 | ||
831 | 829 | ||
832 | - | @Callable( | |
833 | - | func constructorV1 ( | |
830 | + | @Callable(en) | |
831 | + | func constructorV1 (ep) = if ((en.caller != this)) | |
834 | 832 | then throw("Permission denied") | |
835 | - | else [StringEntry( | |
833 | + | else [StringEntry(aw(), ep)] | |
836 | 834 | ||
837 | 835 | ||
838 | 836 | ||
839 | - | @Callable( | |
840 | - | func sellResources (cO | |
841 | - | let | |
842 | - | if (( | |
837 | + | @Callable(en) | |
838 | + | func sellResources (cN,cO) = { | |
839 | + | let eq = bG() | |
840 | + | if ((eq == eq)) | |
843 | 841 | then { | |
844 | - | let V = valueOrErrorMessage(getString( | |
845 | - | if ((size( | |
842 | + | let V = valueOrErrorMessage(getString(aD, S(toString(en.caller))), "You don't have a duck staked") | |
843 | + | if ((size(en.payments) != 0)) | |
846 | 844 | then throw("sellResources doesn't require any payments") | |
847 | 845 | else { | |
848 | - | let | |
849 | - | if (( | |
850 | - | then throw(("Duck location type should be Factory, but is " + | |
846 | + | let er = split(valueOrElse(getString(aD, W(V)), g), "_") | |
847 | + | if ((er[L] != "F")) | |
848 | + | then throw(("Duck location type should be Factory, but is " + er[L])) | |
851 | 849 | else { | |
852 | - | let | |
853 | - | let | |
854 | - | let | |
855 | - | let | |
856 | - | let | |
857 | - | let | |
858 | - | let | |
859 | - | let | |
860 | - | let | |
861 | - | let | |
862 | - | let | |
863 | - | $Tuple2((( | |
850 | + | let es = bD(U(V)) | |
851 | + | let cL = split(es[H], "_") | |
852 | + | let et = cK(cL, er[M], cN, cO) | |
853 | + | let dT = et._1 | |
854 | + | let eu = et._2 | |
855 | + | let bs = et._3 | |
856 | + | let dU = et._4 | |
857 | + | let dW = (bs / 100) | |
858 | + | let ev = makeString_2C([es[G], makeString(eu, "_"), es[I], es[J]], ":") | |
859 | + | let ew = aG(invoke(aD, "updateBackpack", [V, ev], nil)) | |
860 | + | let ex = aJ(invoke(aD, "updateDuckStats", [V, fraction(a, dU, al)], nil)) | |
861 | + | $Tuple2(((dT :+ ScriptTransfer(en.caller, (bs - dW), af)) :+ ScriptTransfer(aC, dW, af)), $Tuple3(ew, eq, ex)) | |
864 | 862 | } | |
865 | 863 | } | |
866 | 864 | } | |
867 | 865 | else throw("Strict value is not equal to itself.") | |
868 | 866 | } | |
869 | 867 | ||
870 | 868 | ||
871 | 869 | ||
872 | - | @Callable( | |
873 | - | func sellResourcesWorld (R, | |
870 | + | @Callable(en) | |
871 | + | func sellResourcesWorld (R,bi) = if ((en.caller != aF)) | |
874 | 872 | then throw("Permission denied") | |
875 | 873 | else { | |
876 | - | let | |
877 | - | let | |
878 | - | let | |
879 | - | let | |
880 | - | let | |
881 | - | let | |
882 | - | if ((0 >= | |
883 | - | then throw(("This trade does not cover delivery cost of " + | |
874 | + | let ey = dM(bi) | |
875 | + | let dT = ey._1 | |
876 | + | let dX = ey._2 | |
877 | + | let dV = ey._3 | |
878 | + | let dW = ey._4 | |
879 | + | let dU = ey._5 | |
880 | + | if ((0 >= dX)) | |
881 | + | then throw(("This trade does not cover delivery cost of " + aM(dV, 6))) | |
884 | 882 | else { | |
885 | - | let | |
886 | - | $Tuple2(((( | |
883 | + | let ex = aJ(invoke(aD, "updateAccStats", [R, fraction(a, dU, al)], nil)) | |
884 | + | $Tuple2((((dT :+ IntegerEntry(aa, (valueOrElse(getInteger(aa), 0) + dV))) :+ ScriptTransfer(aC, dW, af)) :+ ScriptTransfer(aE, dX, af)), $Tuple2(dX, ex)) | |
887 | 885 | } | |
888 | 886 | } | |
889 | 887 | ||
890 | 888 | ||
891 | 889 | ||
892 | - | @Callable( | |
893 | - | func sellResourcesWorldREADONLY ( | |
894 | - | let | |
895 | - | $Tuple2(nil, | |
890 | + | @Callable(en) | |
891 | + | func sellResourcesWorldREADONLY (bi) = { | |
892 | + | let dX = dM(bi)._2 | |
893 | + | $Tuple2(nil, dX) | |
896 | 894 | } | |
897 | 895 | ||
898 | 896 | ||
899 | 897 | ||
900 | - | @Callable(eo) | |
901 | - | func sellResourcesDuckDelivery (cO,cP,eA) = if (!(ae)) | |
902 | - | then throw("Delivery feature is turned off!") | |
903 | - | else { | |
904 | - | let er = bH() | |
905 | - | if ((er == er)) | |
906 | - | then { | |
907 | - | let V = valueOrErrorMessage(getString(aE, S(toString(eo.caller))), "You don't have a duck staked") | |
908 | - | if ((size(eo.payments) != 0)) | |
909 | - | then throw("sellResources doesn't require any payments") | |
898 | + | @Callable(en) | |
899 | + | func sellResourcesDuckDelivery (cN,cO,ez) = { | |
900 | + | let eq = bG() | |
901 | + | if ((eq == eq)) | |
902 | + | then { | |
903 | + | let V = valueOrErrorMessage(getString(aD, S(toString(en.caller))), "You don't have a duck staked") | |
904 | + | if ((size(en.payments) != 0)) | |
905 | + | then throw("sellResources doesn't require any payments") | |
906 | + | else { | |
907 | + | let es = bD(U(V)) | |
908 | + | let cL = split(es[H], "_") | |
909 | + | let eA = cK(cL, ez, cN, cO) | |
910 | + | let dT = eA._1 | |
911 | + | let eu = eA._2 | |
912 | + | let bs = eA._3 | |
913 | + | let dU = eA._4 | |
914 | + | let ev = makeString_2C([es[G], makeString(eu, "_"), es[I], es[J]], ":") | |
915 | + | let ew = aG(invoke(aD, "updateBackpack", [V, ev], nil)) | |
916 | + | let ex = aJ(invoke(aD, "updateDuckStats", [V, fraction(a, dU, al)], nil)) | |
917 | + | let eB = fraction(bs, aW, ak) | |
918 | + | let dV = max([eB, k]) | |
919 | + | let dW = (bs / 100) | |
920 | + | if ((dV >= (bs - dW))) | |
921 | + | then throw(("This trade does not cover delivery cost of " + aM(dV, 6))) | |
922 | + | else { | |
923 | + | let eC = valueOrElse(getInteger(aa), 0) | |
924 | + | $Tuple2((((dT :+ ScriptTransfer(en.caller, ((bs - dW) - dV), af)) :+ IntegerEntry(aa, (eC + dV))) :+ ScriptTransfer(aC, dW, af)), $Tuple3(ew, eq, ex)) | |
925 | + | } | |
926 | + | } | |
927 | + | } | |
928 | + | else throw("Strict value is not equal to itself.") | |
929 | + | } | |
930 | + | ||
931 | + | ||
932 | + | ||
933 | + | @Callable(en) | |
934 | + | func sellResourcesLandDelivery (cN,cO,Y,ez) = { | |
935 | + | let eq = bG() | |
936 | + | if ((eq == eq)) | |
937 | + | then if ((size(en.payments) != 0)) | |
938 | + | then throw("sellResources doesn't require any payments") | |
939 | + | else { | |
940 | + | let eD = en.caller | |
941 | + | let R = toString(eD) | |
942 | + | let eE = value(assetInfo(fromBase58String(Y))) | |
943 | + | if (!(isDefined(getInteger(aD, P(Y))))) | |
944 | + | then throw((("NFT " + eE.name) + " is not staked")) | |
910 | 945 | else { | |
911 | - | let et = bE(U(V)) | |
912 | - | let cM = split(et[H], "_") | |
913 | - | let eB = cL(cM, eA, cO, cP) | |
914 | - | let dU = eB._1 | |
915 | - | let ev = eB._2 | |
916 | - | let bt = eB._3 | |
917 | - | let dV = eB._4 | |
918 | - | let ew = makeString_2C([et[G], makeString(ev, "_"), et[I], et[J]], ":") | |
919 | - | let ex = aH(invoke(aE, "updateBackpack", [V, ew], nil)) | |
920 | - | let ey = aK(invoke(aE, "updateDuckStats", [V, fraction(a, dV, am)], nil)) | |
921 | - | let eC = fraction(bt, aX, al) | |
922 | - | let dW = max([eC, k]) | |
923 | - | let dX = (bt / 100) | |
924 | - | if ((dW >= (bt - dX))) | |
925 | - | then throw(("This trade does not cover delivery cost of " + aN(dW, 6))) | |
946 | + | let eF = valueOrErrorMessage(getString(aD, N(Y)), (("NFT " + eE.name) + " is orphaned")) | |
947 | + | if ((eF != R)) | |
948 | + | then throw((e + " is not yours")) | |
926 | 949 | else { | |
927 | - | let eD = valueOrElse(getInteger(aa), 0) | |
928 | - | $Tuple2((((dU :+ ScriptTransfer(eo.caller, ((bt - dX) - dW), ag)) :+ IntegerEntry(aa, (eD + dW))) :+ ScriptTransfer(aD, dX, ag)), $Tuple3(ex, er, ey)) | |
950 | + | let dA = aG(invoke(aD, "getWarehouseREADONLY", [Y], nil)) | |
951 | + | let bZ = split_4C(dA, ":") | |
952 | + | let cL = split(bZ[A], "_") | |
953 | + | let eG = cK(cL, ez, cN, cO) | |
954 | + | let dT = eG._1 | |
955 | + | let eu = eG._2 | |
956 | + | let bs = eG._3 | |
957 | + | let dU = eG._4 | |
958 | + | let dI = makeString_2C([bZ[z], makeString(eu, "_"), bZ[B], bZ[C], bZ[D]], ":") | |
959 | + | let dK = aG(invoke(aD, "saveWarehouse", [dI, Y], nil)) | |
960 | + | let ex = aJ(invoke(aD, "updateAccStats", [R, fraction(a, dU, al)], nil)) | |
961 | + | let eB = fraction(bs, aW, ak) | |
962 | + | let dV = max([eB, k]) | |
963 | + | let dW = (bs / 100) | |
964 | + | if ((dV >= (bs - dW))) | |
965 | + | then throw(("This trade does not cover delivery cost of " + aM(dV, 6))) | |
966 | + | else { | |
967 | + | let eC = valueOrElse(getInteger(aa), 0) | |
968 | + | $Tuple2((((dT :+ ScriptTransfer(en.caller, ((bs - dW) - dV), af)) :+ IntegerEntry(aa, (eC + dV))) :+ ScriptTransfer(aC, dW, af)), $Tuple3(dK, eq, ex)) | |
969 | + | } | |
929 | 970 | } | |
930 | 971 | } | |
931 | 972 | } | |
932 | - | ||
933 | - | ||
973 | + | else throw("Strict value is not equal to itself.") | |
974 | + | } | |
934 | 975 | ||
935 | 976 | ||
936 | 977 | ||
937 | - | @Callable(eo) | |
938 | - | func sellResourcesLandDelivery (cO,cP,Y,eA) = if (!(ae)) | |
939 | - | then throw("Delivery feature is turned off!") | |
940 | - | else { | |
941 | - | let er = bH() | |
942 | - | if ((er == er)) | |
943 | - | then if ((size(eo.payments) != 0)) | |
944 | - | then throw("sellResources doesn't require any payments") | |
945 | - | else { | |
946 | - | let eE = eo.caller | |
947 | - | let R = toString(eE) | |
948 | - | let eF = value(assetInfo(fromBase58String(Y))) | |
949 | - | if (!(isDefined(getInteger(aE, P(Y))))) | |
950 | - | then throw((("NFT " + eF.name) + " is not staked")) | |
951 | - | else { | |
952 | - | let eG = valueOrErrorMessage(getString(aE, N(Y)), (("NFT " + eF.name) + " is orphaned")) | |
953 | - | if ((eG != R)) | |
954 | - | then throw((e + " is not yours")) | |
955 | - | else { | |
956 | - | let dB = aH(invoke(aE, "getWarehouseREADONLY", [Y], nil)) | |
957 | - | let ca = split_4C(dB, ":") | |
958 | - | let cM = split(ca[A], "_") | |
959 | - | let eH = cL(cM, eA, cO, cP) | |
960 | - | let dU = eH._1 | |
961 | - | let ev = eH._2 | |
962 | - | let bt = eH._3 | |
963 | - | let dV = eH._4 | |
964 | - | let dJ = makeString_2C([ca[z], makeString(ev, "_"), ca[B], ca[C], ca[D]], ":") | |
965 | - | let dL = aH(invoke(aE, "saveWarehouse", [dJ, Y], nil)) | |
966 | - | let ey = aK(invoke(aE, "updateAccStats", [R, fraction(a, dV, am)], nil)) | |
967 | - | let eC = fraction(bt, aX, al) | |
968 | - | let dW = max([eC, k]) | |
969 | - | let dX = (bt / 100) | |
970 | - | if ((dW >= (bt - dX))) | |
971 | - | then throw(("This trade does not cover delivery cost of " + aN(dW, 6))) | |
972 | - | else { | |
973 | - | let eD = valueOrElse(getInteger(aa), 0) | |
974 | - | $Tuple2((((dU :+ ScriptTransfer(eo.caller, ((bt - dX) - dW), ag)) :+ IntegerEntry(aa, (eD + dW))) :+ ScriptTransfer(aD, dX, ag)), $Tuple3(dL, er, ey)) | |
975 | - | } | |
976 | - | } | |
977 | - | } | |
978 | - | } | |
979 | - | else throw("Strict value is not equal to itself.") | |
980 | - | } | |
981 | - | ||
982 | - | ||
983 | - | ||
984 | - | @Callable(eo) | |
985 | - | func buyMaterials (cO,cU) = { | |
986 | - | let er = bH() | |
987 | - | if ((er == er)) | |
978 | + | @Callable(en) | |
979 | + | func buyMaterials (cN,cT) = { | |
980 | + | let eq = bG() | |
981 | + | if ((eq == eq)) | |
988 | 982 | then { | |
989 | - | let V = valueOrErrorMessage(getString( | |
990 | - | if ((size( | |
983 | + | let V = valueOrErrorMessage(getString(aD, S(toString(en.caller))), "You don't have a duck staked") | |
984 | + | if ((size(en.payments) != 1)) | |
991 | 985 | then throw("exactly 1 payment must be attached") | |
992 | 986 | else { | |
993 | - | let | |
994 | - | let | |
995 | - | if (if (!(isDefined( | |
987 | + | let dl = en.payments[0] | |
988 | + | let dm = dl.amount | |
989 | + | if (if (!(isDefined(dl.assetId))) | |
996 | 990 | then true | |
997 | - | else (value( | |
991 | + | else (value(dl.assetId) != af)) | |
998 | 992 | then throw("USDT payments only!") | |
999 | 993 | else { | |
1000 | - | let | |
1001 | - | if (( | |
1002 | - | then throw(("Duck location type should be Factory, but is " + | |
994 | + | let er = split(valueOrElse(getString(aD, W(V)), g), "_") | |
995 | + | if ((er[L] != "F")) | |
996 | + | then throw(("Duck location type should be Factory, but is " + er[L])) | |
1003 | 997 | else { | |
1004 | - | let | |
1005 | - | let | |
1006 | - | let | |
1007 | - | let | |
1008 | - | let | |
1009 | - | let | |
1010 | - | let | |
1011 | - | if (( | |
1012 | - | then throw(((("Insufficient payment! Attached=" + | |
998 | + | let es = bD(U(V)) | |
999 | + | let cS = split(es[I], "_") | |
1000 | + | let eH = cR(cS, er[M], cN, cT) | |
1001 | + | let dT = eH._1 | |
1002 | + | let eI = eH._2 | |
1003 | + | let bB = eH._3 | |
1004 | + | let eJ = eH._4 | |
1005 | + | if ((bB > dm)) | |
1006 | + | then throw(((("Insufficient payment! Attached=" + aM(dm, 6)) + ", required=") + aM(bB, 6))) | |
1013 | 1007 | else { | |
1014 | - | let | |
1015 | - | let | |
1016 | - | let | |
1017 | - | then [ScriptTransfer( | |
1008 | + | let ev = makeString([es[G], es[H], makeString(eI, "_"), es[J]], ":") | |
1009 | + | let ew = aG(invoke(aD, "updateBackpack", [V, ev], nil)) | |
1010 | + | let ay = if (((dm - bB) > 0)) | |
1011 | + | then [ScriptTransfer(en.caller, (dm - bB), af)] | |
1018 | 1012 | else nil | |
1019 | - | let | |
1020 | - | let | |
1021 | - | $Tuple2((( | |
1013 | + | let dW = (bB / 100) | |
1014 | + | let ex = aJ(invoke(aD, "updateDuckStats", [V, fraction(a, eJ, al)], nil)) | |
1015 | + | $Tuple2(((dT ++ ay) :+ ScriptTransfer(aC, dW, af)), $Tuple3(ew, eq, ex)) | |
1022 | 1016 | } | |
1023 | 1017 | } | |
1024 | 1018 | } | |
1025 | 1019 | } | |
1026 | 1020 | } | |
1027 | 1021 | else throw("Strict value is not equal to itself.") | |
1028 | 1022 | } | |
1029 | 1023 | ||
1030 | 1024 | ||
1031 | 1025 | ||
1032 | - | @Callable(eo) | |
1033 | - | func buyMaterialsDuckDelivery (cO,cU,eA) = if (!(ae)) | |
1034 | - | then throw("Delivery feature is turned off!") | |
1035 | - | else { | |
1036 | - | let er = bH() | |
1037 | - | if ((er == er)) | |
1038 | - | then { | |
1039 | - | let V = valueOrErrorMessage(getString(aE, S(toString(eo.caller))), "You don't have a duck staked") | |
1040 | - | if ((size(eo.payments) != 1)) | |
1041 | - | then throw("exactly 1 payment must be attached") | |
1026 | + | @Callable(en) | |
1027 | + | func buyMaterialsDuckDelivery (cN,cT,ez) = { | |
1028 | + | let eq = bG() | |
1029 | + | if ((eq == eq)) | |
1030 | + | then { | |
1031 | + | let V = valueOrErrorMessage(getString(aD, S(toString(en.caller))), "You don't have a duck staked") | |
1032 | + | if ((size(en.payments) != 1)) | |
1033 | + | then throw("exactly 1 payment must be attached") | |
1034 | + | else { | |
1035 | + | let dl = en.payments[0] | |
1036 | + | let dm = dl.amount | |
1037 | + | if (if (!(isDefined(dl.assetId))) | |
1038 | + | then true | |
1039 | + | else (value(dl.assetId) != af)) | |
1040 | + | then throw("USDT payments only!") | |
1041 | + | else { | |
1042 | + | let es = bD(U(V)) | |
1043 | + | let cS = split(es[I], "_") | |
1044 | + | let eK = cR(cS, ez, cN, cT) | |
1045 | + | let dT = eK._1 | |
1046 | + | let eI = eK._2 | |
1047 | + | let bB = eK._3 | |
1048 | + | let eJ = eK._4 | |
1049 | + | let ev = makeString([es[G], es[H], makeString(eI, "_"), es[J]], ":") | |
1050 | + | let ew = aG(invoke(aD, "updateBackpack", [V, ev], nil)) | |
1051 | + | let ex = aJ(invoke(aD, "updateDuckStats", [V, fraction(a, eJ, al)], nil)) | |
1052 | + | let eB = fraction(bB, aW, ak) | |
1053 | + | let dV = max([eB, k]) | |
1054 | + | let dn = (bB + dV) | |
1055 | + | if ((dn > dm)) | |
1056 | + | then throw((((((("Insufficient payment! Attached=" + aM(dm, 6)) + ", required=") + aM(bB, 6)) + "+") + aM(dV, 6)) + "(delivery fee)")) | |
1057 | + | else { | |
1058 | + | let ay = if (((dm - dn) > 0)) | |
1059 | + | then [ScriptTransfer(en.caller, (dm - dn), af)] | |
1060 | + | else nil | |
1061 | + | let dW = (bB / 100) | |
1062 | + | let eC = valueOrElse(getInteger(aa), 0) | |
1063 | + | $Tuple2((((dT ++ ay) :+ ScriptTransfer(aC, dW, af)) :+ IntegerEntry(aa, (eC + dV))), $Tuple3(ew, eq, ex)) | |
1064 | + | } | |
1065 | + | } | |
1066 | + | } | |
1067 | + | } | |
1068 | + | else throw("Strict value is not equal to itself.") | |
1069 | + | } | |
1070 | + | ||
1071 | + | ||
1072 | + | ||
1073 | + | @Callable(en) | |
1074 | + | func buyMaterialsLandDelivery (cN,cT,Y,ez) = { | |
1075 | + | let eq = bG() | |
1076 | + | if ((eq == eq)) | |
1077 | + | then if ((size(en.payments) != 1)) | |
1078 | + | then throw("exactly 1 payment must be attached") | |
1079 | + | else { | |
1080 | + | let dl = en.payments[0] | |
1081 | + | let dm = dl.amount | |
1082 | + | if (if (!(isDefined(dl.assetId))) | |
1083 | + | then true | |
1084 | + | else (value(dl.assetId) != af)) | |
1085 | + | then throw("USDT payments only!") | |
1042 | 1086 | else { | |
1043 | - | let dm = eo.payments[0] | |
1044 | - | let dn = dm.amount | |
1045 | - | if (if (!(isDefined(dm.assetId))) | |
1046 | - | then true | |
1047 | - | else (value(dm.assetId) != ag)) | |
1048 | - | then throw("USDT payments only!") | |
1087 | + | let eD = en.caller | |
1088 | + | let R = toString(eD) | |
1089 | + | let eE = value(assetInfo(fromBase58String(Y))) | |
1090 | + | if (!(isDefined(getInteger(aD, P(Y))))) | |
1091 | + | then throw((("NFT " + eE.name) + " is not staked")) | |
1049 | 1092 | else { | |
1050 | - | let et = bE(U(V)) | |
1051 | - | let cT = split(et[I], "_") | |
1052 | - | let eL = cS(cT, eA, cO, cU) | |
1053 | - | let dU = eL._1 | |
1054 | - | let eJ = eL._2 | |
1055 | - | let bC = eL._3 | |
1056 | - | let eK = eL._4 | |
1057 | - | let ew = makeString([et[G], et[H], makeString(eJ, "_"), et[J]], ":") | |
1058 | - | let ex = aH(invoke(aE, "updateBackpack", [V, ew], nil)) | |
1059 | - | let ey = aK(invoke(aE, "updateDuckStats", [V, fraction(a, eK, am)], nil)) | |
1060 | - | let eC = fraction(bC, aX, al) | |
1061 | - | let dW = max([eC, k]) | |
1062 | - | let do = (bC + dW) | |
1063 | - | if ((do > dn)) | |
1064 | - | then throw((((((("Insufficient payment! Attached=" + aN(dn, 6)) + ", required=") + aN(bC, 6)) + "+") + aN(dW, 6)) + "(delivery fee)")) | |
1093 | + | let eF = valueOrErrorMessage(getString(aD, N(Y)), (("NFT " + eE.name) + " is orphaned")) | |
1094 | + | if ((eF != R)) | |
1095 | + | then throw((e + " is not yours")) | |
1065 | 1096 | else { | |
1066 | - | let az = if (((dn - do) > 0)) | |
1067 | - | then [ScriptTransfer(eo.caller, (dn - do), ag)] | |
1068 | - | else nil | |
1069 | - | let dX = (bC / 100) | |
1070 | - | let eD = valueOrElse(getInteger(aa), 0) | |
1071 | - | $Tuple2((((dU ++ az) :+ ScriptTransfer(aD, dX, ag)) :+ IntegerEntry(aa, (eD + dW))), $Tuple3(ex, er, ey)) | |
1097 | + | let dA = aG(invoke(aD, "getWarehouseREADONLY", [Y], nil)) | |
1098 | + | let bZ = split_4C(dA, ":") | |
1099 | + | let cS = split(bZ[B], "_") | |
1100 | + | let eL = cR(cS, ez, cN, cT) | |
1101 | + | let dT = eL._1 | |
1102 | + | let eI = eL._2 | |
1103 | + | let bB = eL._3 | |
1104 | + | let eJ = eL._4 | |
1105 | + | let dI = makeString_2C([bZ[z], bZ[A], makeString(eI, "_"), bZ[C], bZ[D]], ":") | |
1106 | + | let dK = aG(invoke(aD, "saveWarehouse", [dI, Y], nil)) | |
1107 | + | let ex = aJ(invoke(aD, "updateAccStats", [R, fraction(a, eJ, al)], nil)) | |
1108 | + | let eB = fraction(bB, aW, ak) | |
1109 | + | let dV = max([eB, k]) | |
1110 | + | let dn = (bB + dV) | |
1111 | + | if ((dn > dm)) | |
1112 | + | then throw((((((("Insufficient payment! Attached=" + aM(dm, 6)) + ", required=") + aM(bB, 6)) + "+") + aM(dV, 6)) + "(delivery fee)")) | |
1113 | + | else { | |
1114 | + | let ay = if (((dm - dn) > 0)) | |
1115 | + | then [ScriptTransfer(en.caller, (dm - dn), af)] | |
1116 | + | else nil | |
1117 | + | let dW = (bB / 100) | |
1118 | + | let eC = valueOrElse(getInteger(aa), 0) | |
1119 | + | $Tuple2((((dT ++ ay) :+ ScriptTransfer(aC, dW, af)) :+ IntegerEntry(aa, (eC + dV))), $Tuple3(dK, eq, ex)) | |
1120 | + | } | |
1072 | 1121 | } | |
1073 | 1122 | } | |
1074 | 1123 | } | |
1075 | 1124 | } | |
1076 | - | ||
1077 | - | ||
1125 | + | else throw("Strict value is not equal to itself.") | |
1126 | + | } | |
1078 | 1127 | ||
1079 | 1128 | ||
1080 | 1129 | ||
1081 | - | @Callable( | |
1082 | - | func | |
1083 | - | | |
1084 | - | | |
1085 | - | | |
1086 | - | | |
1087 | - | | |
1130 | + | @Callable(en) | |
1131 | + | func exchangeResources (cN) = { | |
1132 | + | let eq = bG() | |
1133 | + | if ((eq == eq)) | |
1134 | + | then { | |
1135 | + | let V = valueOrErrorMessage(getString(aD, S(toString(en.caller))), "You don't have a duck staked") | |
1136 | + | if ((size(en.payments) != 1)) | |
1088 | 1137 | then throw("exactly 1 payment must be attached") | |
1089 | 1138 | else { | |
1090 | - | let | |
1091 | - | let | |
1092 | - | if (if (!(isDefined( | |
1139 | + | let dl = en.payments[0] | |
1140 | + | let dm = dl.amount | |
1141 | + | if (if (!(isDefined(dl.assetId))) | |
1093 | 1142 | then true | |
1094 | - | else (value( | |
1143 | + | else (value(dl.assetId) != af)) | |
1095 | 1144 | then throw("USDT payments only!") | |
1096 | 1145 | else { | |
1097 | - | let eE = eo.caller | |
1098 | - | let R = toString(eE) | |
1099 | - | let eF = value(assetInfo(fromBase58String(Y))) | |
1100 | - | if (!(isDefined(getInteger(aE, P(Y))))) | |
1101 | - | then throw((("NFT " + eF.name) + " is not staked")) | |
1146 | + | let er = split(valueOrElse(getString(aD, W(V)), g), "_") | |
1147 | + | if ((er[L] != "F")) | |
1148 | + | then throw(("Duck location type should be Factory, but is " + er[L])) | |
1102 | 1149 | else { | |
1103 | - | let eG = valueOrErrorMessage(getString(aE, N(Y)), (("NFT " + eF.name) + " is orphaned")) | |
1104 | - | if ((eG != R)) | |
1105 | - | then throw((e + " is not yours")) | |
1150 | + | let es = bD(U(V)) | |
1151 | + | let cL = split(es[H], "_") | |
1152 | + | let cS = split(es[I], "_") | |
1153 | + | let eM = cV(cL, cS, cN) | |
1154 | + | let eu = eM._1 | |
1155 | + | let eI = eM._2 | |
1156 | + | let bB = eM._3 | |
1157 | + | let eN = eM._4 | |
1158 | + | if ((bB > dm)) | |
1159 | + | then throw(((("Insufficient payment! Attached=" + aM(dm, 6)) + ", required=") + aM(bB, 6))) | |
1106 | 1160 | else { | |
1107 | - | let dB = aH(invoke(aE, "getWarehouseREADONLY", [Y], nil)) | |
1108 | - | let ca = split_4C(dB, ":") | |
1109 | - | let cT = split(ca[B], "_") | |
1110 | - | let eM = cS(cT, eA, cO, cU) | |
1111 | - | let dU = eM._1 | |
1112 | - | let eJ = eM._2 | |
1113 | - | let bC = eM._3 | |
1114 | - | let eK = eM._4 | |
1115 | - | let dJ = makeString_2C([ca[z], ca[A], makeString(eJ, "_"), ca[C], ca[D]], ":") | |
1116 | - | let dL = aH(invoke(aE, "saveWarehouse", [dJ, Y], nil)) | |
1117 | - | let ey = aK(invoke(aE, "updateAccStats", [R, fraction(a, eK, am)], nil)) | |
1118 | - | let eC = fraction(bC, aX, al) | |
1119 | - | let dW = max([eC, k]) | |
1120 | - | let do = (bC + dW) | |
1121 | - | if ((do > dn)) | |
1122 | - | then throw((((((("Insufficient payment! Attached=" + aN(dn, 6)) + ", required=") + aN(bC, 6)) + "+") + aN(dW, 6)) + "(delivery fee)")) | |
1123 | - | else { | |
1124 | - | let az = if (((dn - do) > 0)) | |
1125 | - | then [ScriptTransfer(eo.caller, (dn - do), ag)] | |
1126 | - | else nil | |
1127 | - | let dX = (bC / 100) | |
1128 | - | let eD = valueOrElse(getInteger(aa), 0) | |
1129 | - | $Tuple2((((dU ++ az) :+ ScriptTransfer(aD, dX, ag)) :+ IntegerEntry(aa, (eD + dW))), $Tuple3(dL, er, ey)) | |
1130 | - | } | |
1131 | - | } | |
1132 | - | } | |
1133 | - | } | |
1134 | - | } | |
1135 | - | else throw("Strict value is not equal to itself.") | |
1136 | - | } | |
1137 | - | ||
1138 | - | ||
1139 | - | ||
1140 | - | @Callable(eo) | |
1141 | - | func exchangeResources (cO) = { | |
1142 | - | let er = bH() | |
1143 | - | if ((er == er)) | |
1144 | - | then { | |
1145 | - | let V = valueOrErrorMessage(getString(aE, S(toString(eo.caller))), "You don't have a duck staked") | |
1146 | - | if ((size(eo.payments) != 1)) | |
1147 | - | then throw("exactly 1 payment must be attached") | |
1148 | - | else { | |
1149 | - | let dm = eo.payments[0] | |
1150 | - | let dn = dm.amount | |
1151 | - | if (if (!(isDefined(dm.assetId))) | |
1152 | - | then true | |
1153 | - | else (value(dm.assetId) != ag)) | |
1154 | - | then throw("USDT payments only!") | |
1155 | - | else { | |
1156 | - | let es = split(valueOrElse(getString(aE, W(V)), g), "_") | |
1157 | - | if ((es[L] != "F")) | |
1158 | - | then throw(("Duck location type should be Factory, but is " + es[L])) | |
1159 | - | else { | |
1160 | - | let et = bE(U(V)) | |
1161 | - | let cM = split(et[H], "_") | |
1162 | - | let cT = split(et[I], "_") | |
1163 | - | let eN = cW(cM, cT, cO) | |
1164 | - | let ev = eN._1 | |
1165 | - | let eJ = eN._2 | |
1166 | - | let bC = eN._3 | |
1167 | - | let eO = eN._4 | |
1168 | - | if ((bC > dn)) | |
1169 | - | then throw(((("Insufficient payment! Attached=" + aN(dn, 6)) + ", required=") + aN(bC, 6))) | |
1170 | - | else { | |
1171 | - | let ew = makeString([et[G], makeString(ev, "_"), makeString(eJ, "_"), et[J]], ":") | |
1172 | - | let ex = aH(invoke(aE, "updateBackpack", [V, ew], nil)) | |
1173 | - | let az = if (((dn - bC) > 0)) | |
1174 | - | then [ScriptTransfer(eo.caller, (dn - bC), ag)] | |
1161 | + | let ev = makeString([es[G], makeString(eu, "_"), makeString(eI, "_"), es[J]], ":") | |
1162 | + | let ew = aG(invoke(aD, "updateBackpack", [V, ev], nil)) | |
1163 | + | let ay = if (((dm - bB) > 0)) | |
1164 | + | then [ScriptTransfer(en.caller, (dm - bB), af)] | |
1175 | 1165 | else nil | |
1176 | - | let | |
1177 | - | let | |
1178 | - | $Tuple2(( | |
1166 | + | let dW = (bB / 100) | |
1167 | + | let ex = aJ(invoke(aD, "updateDuckStats", [V, fraction(a, eN, al)], nil)) | |
1168 | + | $Tuple2((ay :+ ScriptTransfer(aC, dW, af)), $Tuple3(ew, eq, ex)) | |
1179 | 1169 | } | |
1180 | 1170 | } | |
1181 | 1171 | } | |
1182 | 1172 | } | |
1183 | 1173 | } | |
1184 | 1174 | else throw("Strict value is not equal to itself.") | |
1185 | 1175 | } | |
1186 | 1176 | ||
1187 | 1177 | ||
1188 | 1178 | ||
1189 | - | @Callable(eo) | |
1190 | - | func exchangeResourcesDuckDelivery (cO) = if (!(ae)) | |
1191 | - | then throw("Delivery feature is turned off!") | |
1192 | - | else { | |
1193 | - | let er = bH() | |
1194 | - | if ((er == er)) | |
1195 | - | then { | |
1196 | - | let V = valueOrErrorMessage(getString(aE, S(toString(eo.caller))), "You don't have a duck staked") | |
1197 | - | if ((size(eo.payments) != 1)) | |
1198 | - | then throw("exactly 1 payment must be attached") | |
1179 | + | @Callable(en) | |
1180 | + | func exchangeResourcesDuckDelivery (cN) = { | |
1181 | + | let eq = bG() | |
1182 | + | if ((eq == eq)) | |
1183 | + | then { | |
1184 | + | let V = valueOrErrorMessage(getString(aD, S(toString(en.caller))), "You don't have a duck staked") | |
1185 | + | if ((size(en.payments) != 1)) | |
1186 | + | then throw("exactly 1 payment must be attached") | |
1187 | + | else { | |
1188 | + | let dl = en.payments[0] | |
1189 | + | let dm = dl.amount | |
1190 | + | if (if (!(isDefined(dl.assetId))) | |
1191 | + | then true | |
1192 | + | else (value(dl.assetId) != af)) | |
1193 | + | then throw("USDT payments only!") | |
1194 | + | else { | |
1195 | + | let es = bD(U(V)) | |
1196 | + | let cL = split(es[H], "_") | |
1197 | + | let cS = split(es[I], "_") | |
1198 | + | let eO = cV(cL, cS, cN) | |
1199 | + | let eu = eO._1 | |
1200 | + | let eI = eO._2 | |
1201 | + | let bB = eO._3 | |
1202 | + | let eN = eO._4 | |
1203 | + | let eB = fraction(bB, aX, ak) | |
1204 | + | let dV = max([eB, l]) | |
1205 | + | let dn = (bB + dV) | |
1206 | + | if ((dn > dm)) | |
1207 | + | then throw((((((("Insufficient payment! Attached=" + aM(dm, 6)) + ", required=") + aM(bB, 6)) + "+") + aM(dV, 6)) + "(delivery fee)")) | |
1208 | + | else { | |
1209 | + | let ev = makeString([es[G], makeString(eu, "_"), makeString(eI, "_"), es[J]], ":") | |
1210 | + | let ew = aG(invoke(aD, "updateBackpack", [V, ev], nil)) | |
1211 | + | let ay = if (((dm - dn) > 0)) | |
1212 | + | then [ScriptTransfer(en.caller, (dm - dn), af)] | |
1213 | + | else nil | |
1214 | + | let dW = (bB / 100) | |
1215 | + | let ex = aJ(invoke(aD, "updateDuckStats", [V, fraction(a, eN, al)], nil)) | |
1216 | + | let eC = valueOrElse(getInteger(aa), 0) | |
1217 | + | $Tuple2(((ay :+ ScriptTransfer(aC, dW, af)) :+ IntegerEntry(aa, (eC + dV))), $Tuple3(ew, eq, ex)) | |
1218 | + | } | |
1219 | + | } | |
1220 | + | } | |
1221 | + | } | |
1222 | + | else throw("Strict value is not equal to itself.") | |
1223 | + | } | |
1224 | + | ||
1225 | + | ||
1226 | + | ||
1227 | + | @Callable(en) | |
1228 | + | func exchangeResourcesLandDelivery (cN,Y) = { | |
1229 | + | let eq = bG() | |
1230 | + | if ((eq == eq)) | |
1231 | + | then if ((size(en.payments) != 1)) | |
1232 | + | then throw("exactly 1 payment must be attached") | |
1233 | + | else { | |
1234 | + | let dl = en.payments[0] | |
1235 | + | let dm = dl.amount | |
1236 | + | if (if (!(isDefined(dl.assetId))) | |
1237 | + | then true | |
1238 | + | else (value(dl.assetId) != af)) | |
1239 | + | then throw("USDT payments only!") | |
1199 | 1240 | else { | |
1200 | - | let dm = eo.payments[0] | |
1201 | - | let dn = dm.amount | |
1202 | - | if (if (!(isDefined(dm.assetId))) | |
1203 | - | then true | |
1204 | - | else (value(dm.assetId) != ag)) | |
1205 | - | then throw("USDT payments only!") | |
1241 | + | let eD = en.caller | |
1242 | + | let R = toString(eD) | |
1243 | + | let eE = value(assetInfo(fromBase58String(Y))) | |
1244 | + | if (!(isDefined(getInteger(aD, P(Y))))) | |
1245 | + | then throw((("NFT " + eE.name) + " is not staked")) | |
1206 | 1246 | else { | |
1207 | - | let et = bE(U(V)) | |
1208 | - | let cM = split(et[H], "_") | |
1209 | - | let cT = split(et[I], "_") | |
1210 | - | let eP = cW(cM, cT, cO) | |
1211 | - | let ev = eP._1 | |
1212 | - | let eJ = eP._2 | |
1213 | - | let bC = eP._3 | |
1214 | - | let eO = eP._4 | |
1215 | - | let eC = fraction(bC, aY, al) | |
1216 | - | let dW = max([eC, l]) | |
1217 | - | let do = (bC + dW) | |
1218 | - | if ((do > dn)) | |
1219 | - | then throw((((((("Insufficient payment! Attached=" + aN(dn, 6)) + ", required=") + aN(bC, 6)) + "+") + aN(dW, 6)) + "(delivery fee)")) | |
1247 | + | let eF = valueOrErrorMessage(getString(aD, N(Y)), (("NFT " + eE.name) + " is orphaned")) | |
1248 | + | if ((eF != R)) | |
1249 | + | then throw((e + " is not yours")) | |
1220 | 1250 | else { | |
1221 | - | let ew = makeString([et[G], makeString(ev, "_"), makeString(eJ, "_"), et[J]], ":") | |
1222 | - | let ex = aH(invoke(aE, "updateBackpack", [V, ew], nil)) | |
1223 | - | let az = if (((dn - do) > 0)) | |
1224 | - | then [ScriptTransfer(eo.caller, (dn - do), ag)] | |
1225 | - | else nil | |
1226 | - | let dX = (bC / 100) | |
1227 | - | let ey = aK(invoke(aE, "updateDuckStats", [V, fraction(a, eO, am)], nil)) | |
1228 | - | let eD = valueOrElse(getInteger(aa), 0) | |
1229 | - | $Tuple2(((az :+ ScriptTransfer(aD, dX, ag)) :+ IntegerEntry(aa, (eD + dW))), $Tuple3(ex, er, ey)) | |
1251 | + | let dA = aG(invoke(aD, "getWarehouseREADONLY", [Y], nil)) | |
1252 | + | let bZ = split_4C(dA, ":") | |
1253 | + | let cL = split(bZ[A], "_") | |
1254 | + | let cS = split(bZ[B], "_") | |
1255 | + | let eP = cV(cL, cS, cN) | |
1256 | + | let eu = eP._1 | |
1257 | + | let eI = eP._2 | |
1258 | + | let bB = eP._3 | |
1259 | + | let eN = eP._4 | |
1260 | + | let dI = makeString_2C([bZ[z], makeString(eu, "_"), makeString(eI, "_"), bZ[C], bZ[D]], ":") | |
1261 | + | let dK = aG(invoke(aD, "saveWarehouse", [dI, Y], nil)) | |
1262 | + | let ex = aJ(invoke(aD, "updateAccStats", [R, fraction(a, eN, al)], nil)) | |
1263 | + | let eB = fraction(bB, aX, ak) | |
1264 | + | let dV = max([eB, l]) | |
1265 | + | let dn = (bB + dV) | |
1266 | + | if ((dn > dm)) | |
1267 | + | then throw((((((("Insufficient payment! Attached=" + aM(dm, 6)) + ", required=") + aM(bB, 6)) + "+") + aM(dV, 6)) + "(delivery fee)")) | |
1268 | + | else { | |
1269 | + | let ay = if (((dm - dn) > 0)) | |
1270 | + | then [ScriptTransfer(en.caller, (dm - dn), af)] | |
1271 | + | else nil | |
1272 | + | let dW = (bB / 100) | |
1273 | + | let eC = valueOrElse(getInteger(aa), 0) | |
1274 | + | $Tuple2(((ay :+ ScriptTransfer(aC, dW, af)) :+ IntegerEntry(aa, (eC + dV))), $Tuple3(dK, eq, ex)) | |
1275 | + | } | |
1230 | 1276 | } | |
1231 | 1277 | } | |
1232 | 1278 | } | |
1233 | 1279 | } | |
1234 | - | ||
1235 | - | ||
1280 | + | else throw("Strict value is not equal to itself.") | |
1281 | + | } | |
1236 | 1282 | ||
1237 | 1283 | ||
1238 | 1284 | ||
1239 | - | @Callable(eo) | |
1240 | - | func exchangeResourcesLandDelivery (cO,Y) = if (!(ae)) | |
1241 | - | then throw("Delivery feature is turned off!") | |
1242 | - | else { | |
1243 | - | let er = bH() | |
1244 | - | if ((er == er)) | |
1245 | - | then if ((size(eo.payments) != 1)) | |
1246 | - | then throw("exactly 1 payment must be attached") | |
1247 | - | else { | |
1248 | - | let dm = eo.payments[0] | |
1249 | - | let dn = dm.amount | |
1250 | - | if (if (!(isDefined(dm.assetId))) | |
1251 | - | then true | |
1252 | - | else (value(dm.assetId) != ag)) | |
1253 | - | then throw("USDT payments only!") | |
1254 | - | else { | |
1255 | - | let eE = eo.caller | |
1256 | - | let R = toString(eE) | |
1257 | - | let eF = value(assetInfo(fromBase58String(Y))) | |
1258 | - | if (!(isDefined(getInteger(aE, P(Y))))) | |
1259 | - | then throw((("NFT " + eF.name) + " is not staked")) | |
1260 | - | else { | |
1261 | - | let eG = valueOrErrorMessage(getString(aE, N(Y)), (("NFT " + eF.name) + " is orphaned")) | |
1262 | - | if ((eG != R)) | |
1263 | - | then throw((e + " is not yours")) | |
1264 | - | else { | |
1265 | - | let dB = aH(invoke(aE, "getWarehouseREADONLY", [Y], nil)) | |
1266 | - | let ca = split_4C(dB, ":") | |
1267 | - | let cM = split(ca[A], "_") | |
1268 | - | let cT = split(ca[B], "_") | |
1269 | - | let eQ = cW(cM, cT, cO) | |
1270 | - | let ev = eQ._1 | |
1271 | - | let eJ = eQ._2 | |
1272 | - | let bC = eQ._3 | |
1273 | - | let eO = eQ._4 | |
1274 | - | let dJ = makeString_2C([ca[z], makeString(ev, "_"), makeString(eJ, "_"), ca[C], ca[D]], ":") | |
1275 | - | let dL = aH(invoke(aE, "saveWarehouse", [dJ, Y], nil)) | |
1276 | - | let ey = aK(invoke(aE, "updateAccStats", [R, fraction(a, eO, am)], nil)) | |
1277 | - | let eC = fraction(bC, aY, al) | |
1278 | - | let dW = max([eC, l]) | |
1279 | - | let do = (bC + dW) | |
1280 | - | if ((do > dn)) | |
1281 | - | then throw((((((("Insufficient payment! Attached=" + aN(dn, 6)) + ", required=") + aN(bC, 6)) + "+") + aN(dW, 6)) + "(delivery fee)")) | |
1282 | - | else { | |
1283 | - | let az = if (((dn - do) > 0)) | |
1284 | - | then [ScriptTransfer(eo.caller, (dn - do), ag)] | |
1285 | - | else nil | |
1286 | - | let dX = (bC / 100) | |
1287 | - | let eD = valueOrElse(getInteger(aa), 0) | |
1288 | - | $Tuple2(((az :+ ScriptTransfer(aD, dX, ag)) :+ IntegerEntry(aa, (eD + dW))), $Tuple3(dL, er, ey)) | |
1289 | - | } | |
1290 | - | } | |
1291 | - | } | |
1292 | - | } | |
1293 | - | } | |
1294 | - | else throw("Strict value is not equal to itself.") | |
1295 | - | } | |
1296 | - | ||
1297 | - | ||
1298 | - | ||
1299 | - | @Callable(eo) | |
1300 | - | func craftGoods (ec,ed) = { | |
1301 | - | let er = bH() | |
1302 | - | if ((er == er)) | |
1303 | - | then if ((size(eo.payments) != 1)) | |
1285 | + | @Callable(en) | |
1286 | + | func craftGoods (eb,ec) = { | |
1287 | + | let eq = bG() | |
1288 | + | if ((eq == eq)) | |
1289 | + | then if ((size(en.payments) != 1)) | |
1304 | 1290 | then throw("exactly 1 payment must be attached") | |
1305 | 1291 | else { | |
1306 | - | let | |
1307 | - | let | |
1308 | - | if (if (!(isDefined( | |
1292 | + | let dl = en.payments[0] | |
1293 | + | let dm = dl.amount | |
1294 | + | if (if (!(isDefined(dl.assetId))) | |
1309 | 1295 | then true | |
1310 | - | else (value( | |
1296 | + | else (value(dl.assetId) != af)) | |
1311 | 1297 | then throw("USDT payments only!") | |
1312 | - | else if (( | |
1313 | - | then throw((("exactly " + | |
1298 | + | else if ((dm != ak)) | |
1299 | + | then throw((("exactly " + aM(m, 6)) + " USDT must be attached as payment")) | |
1314 | 1300 | else { | |
1315 | - | let V = valueOrErrorMessage(getString( | |
1316 | - | let | |
1317 | - | if (( | |
1318 | - | then throw(("Duck location type should be Manufactory, but is " + | |
1301 | + | let V = valueOrErrorMessage(getString(aD, S(toString(en.caller))), "You don't have a duck staked") | |
1302 | + | let er = split(valueOrElse(getString(aD, W(V)), g), "_") | |
1303 | + | if ((er[L] != "M")) | |
1304 | + | then throw(("Duck location type should be Manufactory, but is " + er[L])) | |
1319 | 1305 | else { | |
1320 | - | let | |
1321 | - | let | |
1322 | - | let | |
1323 | - | let | |
1306 | + | let eQ = er[K] | |
1307 | + | let es = bD(U(V)) | |
1308 | + | let cS = split(es[I], "_") | |
1309 | + | let dZ = if ((es[J] == "")) | |
1324 | 1310 | then nil | |
1325 | - | else split_4C( | |
1326 | - | let | |
1327 | - | let | |
1328 | - | let | |
1329 | - | let | |
1330 | - | let | |
1331 | - | let | |
1332 | - | let | |
1333 | - | $Tuple2(nil, $Tuple3( | |
1311 | + | else split_4C(es[J], "_") | |
1312 | + | let eR = dY(cS, dZ, eQ, eb, ec) | |
1313 | + | let eI = eR._1 | |
1314 | + | let ei = eR._2 | |
1315 | + | let eS = eR._3 | |
1316 | + | let ev = makeString([es[G], es[H], makeString(eI, "_"), makeString_2C(ei, "_")], ":") | |
1317 | + | let eT = aG(invoke(aD, "updateBackpack", [V, ev], nil)) | |
1318 | + | let ex = aJ(invoke(aD, "updateDuckStats", [V, fraction(b, eS, al)], nil)) | |
1319 | + | $Tuple2(nil, $Tuple3(eT, eq, ex)) | |
1334 | 1320 | } | |
1335 | 1321 | } | |
1336 | 1322 | } | |
1337 | 1323 | else throw("Strict value is not equal to itself.") | |
1338 | 1324 | } | |
1339 | 1325 | ||
1340 | 1326 | ||
1341 | 1327 | ||
1342 | - | @Callable(eo) | |
1343 | - | func craftGoodsDuckDelivery (ec,ed,eb) = if (!(ae)) | |
1344 | - | then throw("Delivery feature is turned off!") | |
1345 | - | else { | |
1346 | - | let er = bH() | |
1347 | - | if ((er == er)) | |
1348 | - | then { | |
1349 | - | let V = valueOrErrorMessage(getString(aE, S(toString(eo.caller))), "You don't have a duck staked") | |
1350 | - | if ((size(eo.payments) != 1)) | |
1351 | - | then throw("exactly 1 payment must be attached") | |
1328 | + | @Callable(en) | |
1329 | + | func craftGoodsDuckDelivery (eb,ec,ea) = { | |
1330 | + | let eq = bG() | |
1331 | + | if ((eq == eq)) | |
1332 | + | then { | |
1333 | + | let V = valueOrErrorMessage(getString(aD, S(toString(en.caller))), "You don't have a duck staked") | |
1334 | + | if ((size(en.payments) != 1)) | |
1335 | + | then throw("exactly 1 payment must be attached") | |
1336 | + | else { | |
1337 | + | let dl = en.payments[0] | |
1338 | + | let dm = dl.amount | |
1339 | + | if (if (!(isDefined(dl.assetId))) | |
1340 | + | then true | |
1341 | + | else (value(dl.assetId) != af)) | |
1342 | + | then throw("USDT payments only!") | |
1343 | + | else { | |
1344 | + | let es = bD(U(V)) | |
1345 | + | let cS = split(es[I], "_") | |
1346 | + | let dZ = if ((es[J] == "")) | |
1347 | + | then nil | |
1348 | + | else split_4C(es[J], "_") | |
1349 | + | let eU = dY(cS, dZ, ea, eb, ec) | |
1350 | + | let eI = eU._1 | |
1351 | + | let ei = eU._2 | |
1352 | + | let eS = eU._3 | |
1353 | + | let ev = makeString([es[G], es[H], makeString(eI, "_"), makeString_2C(ei, "_")], ":") | |
1354 | + | let ew = aG(invoke(aD, "updateBackpack", [V, ev], nil)) | |
1355 | + | let ex = aJ(invoke(aD, "updateDuckStats", [V, fraction(b, eS, al)], nil)) | |
1356 | + | let eB = fraction(ec, k, n) | |
1357 | + | let dV = max([eB, k]) | |
1358 | + | let dn = (m + dV) | |
1359 | + | if ((dn > dm)) | |
1360 | + | then throw((((((("Insufficient payment! Attached=" + aM(dm, 6)) + ", required=") + aM(m, 6)) + "+") + aM(dV, 6)) + "(delivery fee)")) | |
1361 | + | else { | |
1362 | + | let ay = if (((dm - dn) > 0)) | |
1363 | + | then [ScriptTransfer(en.caller, (dm - dn), af)] | |
1364 | + | else nil | |
1365 | + | let eC = valueOrElse(getInteger(aa), 0) | |
1366 | + | $Tuple2((ay :+ IntegerEntry(aa, (eC + dV))), $Tuple3(ew, eq, ex)) | |
1367 | + | } | |
1368 | + | } | |
1369 | + | } | |
1370 | + | } | |
1371 | + | else throw("Strict value is not equal to itself.") | |
1372 | + | } | |
1373 | + | ||
1374 | + | ||
1375 | + | ||
1376 | + | @Callable(en) | |
1377 | + | func craftGoodsLandDelivery (eb,ec,Y,ea) = { | |
1378 | + | let eq = bG() | |
1379 | + | if ((eq == eq)) | |
1380 | + | then if ((size(en.payments) != 1)) | |
1381 | + | then throw("exactly 1 payment must be attached") | |
1382 | + | else { | |
1383 | + | let dl = en.payments[0] | |
1384 | + | let dm = dl.amount | |
1385 | + | if (if (!(isDefined(dl.assetId))) | |
1386 | + | then true | |
1387 | + | else (value(dl.assetId) != af)) | |
1388 | + | then throw("USDT payments only!") | |
1352 | 1389 | else { | |
1353 | - | let dm = eo.payments[0] | |
1354 | - | let dn = dm.amount | |
1355 | - | if (if (!(isDefined(dm.assetId))) | |
1356 | - | then true | |
1357 | - | else (value(dm.assetId) != ag)) | |
1358 | - | then throw("USDT payments only!") | |
1390 | + | let eD = en.caller | |
1391 | + | let R = toString(eD) | |
1392 | + | let eE = value(assetInfo(fromBase58String(Y))) | |
1393 | + | if (!(isDefined(getInteger(aD, P(Y))))) | |
1394 | + | then throw((("NFT " + eE.name) + " is not staked")) | |
1359 | 1395 | else { | |
1360 | - | let et = bE(U(V)) | |
1361 | - | let cT = split(et[I], "_") | |
1362 | - | let ea = if ((et[J] == "")) | |
1363 | - | then nil | |
1364 | - | else split_4C(et[J], "_") | |
1365 | - | let eV = dZ(cT, ea, eb, ec, ed) | |
1366 | - | let eJ = eV._1 | |
1367 | - | let ej = eV._2 | |
1368 | - | let eT = eV._3 | |
1369 | - | let ew = makeString([et[G], et[H], makeString(eJ, "_"), makeString_2C(ej, "_")], ":") | |
1370 | - | let ex = aH(invoke(aE, "updateBackpack", [V, ew], nil)) | |
1371 | - | let ey = aK(invoke(aE, "updateDuckStats", [V, fraction(b, eT, am)], nil)) | |
1372 | - | let eC = fraction(ed, k, n) | |
1373 | - | let dW = max([eC, k]) | |
1374 | - | let do = (m + dW) | |
1375 | - | if ((do > dn)) | |
1376 | - | then throw((((((("Insufficient payment! Attached=" + aN(dn, 6)) + ", required=") + aN(m, 6)) + "+") + aN(dW, 6)) + "(delivery fee)")) | |
1396 | + | let eF = valueOrErrorMessage(getString(aD, N(Y)), (("NFT " + eE.name) + " is orphaned")) | |
1397 | + | if ((eF != R)) | |
1398 | + | then throw((e + " is not yours")) | |
1377 | 1399 | else { | |
1378 | - | let az = if (((dn - do) > 0)) | |
1379 | - | then [ScriptTransfer(eo.caller, (dn - do), ag)] | |
1380 | - | else nil | |
1381 | - | let eD = valueOrElse(getInteger(aa), 0) | |
1382 | - | $Tuple2((az :+ IntegerEntry(aa, (eD + dW))), $Tuple3(ex, er, ey)) | |
1400 | + | let dA = aG(invoke(aD, "getWarehouseREADONLY", [Y], nil)) | |
1401 | + | let bZ = split_4C(dA, ":") | |
1402 | + | let cS = split(bZ[B], "_") | |
1403 | + | let dZ = if ((bZ[C] == "")) | |
1404 | + | then nil | |
1405 | + | else split_4C(bZ[C], "_") | |
1406 | + | let eV = dY(cS, dZ, ea, eb, ec) | |
1407 | + | let eI = eV._1 | |
1408 | + | let ei = eV._2 | |
1409 | + | let eS = eV._3 | |
1410 | + | let dI = makeString_2C([bZ[z], bZ[A], makeString(eI, "_"), makeString_2C(ei, "_"), bZ[D]], ":") | |
1411 | + | let dK = aG(invoke(aD, "saveWarehouse", [dI, Y], nil)) | |
1412 | + | let ex = aJ(invoke(aD, "updateAccStats", [R, fraction(b, eS, al)], nil)) | |
1413 | + | let eB = fraction(ec, k, n) | |
1414 | + | let dV = max([eB, k]) | |
1415 | + | let dn = (m + dV) | |
1416 | + | if ((dn > dm)) | |
1417 | + | then throw((((((("Insufficient payment! Attached=" + aM(dm, 6)) + ", required=") + aM(m, 6)) + "+") + aM(dV, 6)) + "(delivery fee)")) | |
1418 | + | else { | |
1419 | + | let ay = if (((dm - dn) > 0)) | |
1420 | + | then [ScriptTransfer(en.caller, (dm - dn), af)] | |
1421 | + | else nil | |
1422 | + | let eC = valueOrElse(getInteger(aa), 0) | |
1423 | + | $Tuple2((ay :+ IntegerEntry(aa, (eC + dV))), $Tuple3(dK, eq, ex)) | |
1424 | + | } | |
1383 | 1425 | } | |
1384 | 1426 | } | |
1385 | 1427 | } | |
1386 | 1428 | } | |
1387 | - | ||
1388 | - | ||
1429 | + | else throw("Strict value is not equal to itself.") | |
1430 | + | } | |
1389 | 1431 | ||
1390 | 1432 | ||
1391 | 1433 | ||
1392 | - | @Callable(eo) | |
1393 | - | func craftGoodsLandDelivery (ec,ed,Y,eb) = if (!(ae)) | |
1394 | - | then throw("Delivery feature is turned off!") | |
1395 | - | else { | |
1396 | - | let er = bH() | |
1397 | - | if ((er == er)) | |
1398 | - | then if ((size(eo.payments) != 1)) | |
1399 | - | then throw("exactly 1 payment must be attached") | |
1400 | - | else { | |
1401 | - | let dm = eo.payments[0] | |
1402 | - | let dn = dm.amount | |
1403 | - | if (if (!(isDefined(dm.assetId))) | |
1404 | - | then true | |
1405 | - | else (value(dm.assetId) != ag)) | |
1406 | - | then throw("USDT payments only!") | |
1407 | - | else { | |
1408 | - | let eE = eo.caller | |
1409 | - | let R = toString(eE) | |
1410 | - | let eF = value(assetInfo(fromBase58String(Y))) | |
1411 | - | if (!(isDefined(getInteger(aE, P(Y))))) | |
1412 | - | then throw((("NFT " + eF.name) + " is not staked")) | |
1413 | - | else { | |
1414 | - | let eG = valueOrErrorMessage(getString(aE, N(Y)), (("NFT " + eF.name) + " is orphaned")) | |
1415 | - | if ((eG != R)) | |
1416 | - | then throw((e + " is not yours")) | |
1417 | - | else { | |
1418 | - | let dB = aH(invoke(aE, "getWarehouseREADONLY", [Y], nil)) | |
1419 | - | let ca = split_4C(dB, ":") | |
1420 | - | let cT = split(ca[B], "_") | |
1421 | - | let ea = if ((ca[C] == "")) | |
1422 | - | then nil | |
1423 | - | else split_4C(ca[C], "_") | |
1424 | - | let eW = dZ(cT, ea, eb, ec, ed) | |
1425 | - | let eJ = eW._1 | |
1426 | - | let ej = eW._2 | |
1427 | - | let eT = eW._3 | |
1428 | - | let dJ = makeString_2C([ca[z], ca[A], makeString(eJ, "_"), makeString_2C(ej, "_"), ca[D]], ":") | |
1429 | - | let dL = aH(invoke(aE, "saveWarehouse", [dJ, Y], nil)) | |
1430 | - | let ey = aK(invoke(aE, "updateAccStats", [R, fraction(b, eT, am)], nil)) | |
1431 | - | let eC = fraction(ed, k, n) | |
1432 | - | let dW = max([eC, k]) | |
1433 | - | let do = (m + dW) | |
1434 | - | if ((do > dn)) | |
1435 | - | then throw((((((("Insufficient payment! Attached=" + aN(dn, 6)) + ", required=") + aN(m, 6)) + "+") + aN(dW, 6)) + "(delivery fee)")) | |
1436 | - | else { | |
1437 | - | let az = if (((dn - do) > 0)) | |
1438 | - | then [ScriptTransfer(eo.caller, (dn - do), ag)] | |
1439 | - | else nil | |
1440 | - | let eD = valueOrElse(getInteger(aa), 0) | |
1441 | - | $Tuple2((az :+ IntegerEntry(aa, (eD + dW))), $Tuple3(dL, er, ey)) | |
1442 | - | } | |
1443 | - | } | |
1444 | - | } | |
1445 | - | } | |
1446 | - | } | |
1447 | - | else throw("Strict value is not equal to itself.") | |
1448 | - | } | |
1449 | - | ||
1450 | - | ||
1451 | - | ||
1452 | - | @Callable(eo) | |
1453 | - | func setWarehouseOrder (eX,Y) = { | |
1454 | - | let eE = eo.originCaller | |
1455 | - | let R = toString(eE) | |
1456 | - | let eU = if ((eE != aD)) | |
1457 | - | then bG() | |
1434 | + | @Callable(en) | |
1435 | + | func setWarehouseOrder (eW,Y) = { | |
1436 | + | let eD = en.originCaller | |
1437 | + | let R = toString(eD) | |
1438 | + | let eT = if ((eD != aC)) | |
1439 | + | then bF() | |
1458 | 1440 | else false | |
1459 | - | let | |
1460 | - | if (!(isDefined(getInteger( | |
1461 | - | then throw((("NFT " + | |
1441 | + | let eE = value(assetInfo(fromBase58String(Y))) | |
1442 | + | if (!(isDefined(getInteger(aD, P(Y))))) | |
1443 | + | then throw((("NFT " + eE.name) + " is not staked")) | |
1462 | 1444 | else { | |
1463 | - | let | |
1464 | - | if (if (( | |
1465 | - | then ( | |
1445 | + | let eF = valueOrErrorMessage(getString(aD, N(Y)), (("NFT " + eE.name) + " is orphaned")) | |
1446 | + | if (if ((eD != aC)) | |
1447 | + | then (eF != R) | |
1466 | 1448 | else false) | |
1467 | 1449 | then throw((e + " is not yours")) | |
1468 | 1450 | else { | |
1469 | - | let | |
1470 | - | let | |
1471 | - | let | |
1472 | - | let | |
1473 | - | let | |
1474 | - | let | |
1475 | - | let | |
1476 | - | let | |
1477 | - | let | |
1478 | - | let | |
1479 | - | let | |
1480 | - | let | |
1481 | - | let | |
1482 | - | if ((0 > | |
1483 | - | then throw((((((("Attempt to reserve " + toString( | |
1451 | + | let eX = split_4C(eW, ":") | |
1452 | + | let dA = aG(invoke(aD, "getWarehouseREADONLY", [Y], nil)) | |
1453 | + | let bZ = split_4C(dA, ":") | |
1454 | + | let eY = split(bZ[D], "_") | |
1455 | + | let eZ = parseIntValue(eY[F]) | |
1456 | + | let bf = X(Y) | |
1457 | + | let ca = be(bf) | |
1458 | + | let eo = bY(bZ, ca, eX) | |
1459 | + | let fa = eo._4 | |
1460 | + | let fb = eo._5 | |
1461 | + | let fc = eo._7 | |
1462 | + | let fd = (fa + fb) | |
1463 | + | let fe = ((eZ - fc) - fd) | |
1464 | + | if ((0 > fe)) | |
1465 | + | then throw((((((("Attempt to reserve " + toString(fa)) + " space for buy orders, and ") + toString(fb)) + " space for sell orders (and occupied=") + toString(fc)) + "), leads to negative free space")) | |
1484 | 1466 | else { | |
1485 | - | let | |
1486 | - | let | |
1487 | - | let | |
1488 | - | let | |
1489 | - | then if ((size( | |
1467 | + | let dI = makeString_2C([bZ[z], makeString(eo._1, "_"), makeString(eo._2, "_"), makeString_2C(eo._3, "_"), toString(fd)], ":") | |
1468 | + | let dK = aG(invoke(aD, "saveWarehouse", [dI, Y], nil)) | |
1469 | + | let ff = eo._6 | |
1470 | + | let fg = if ((ff > 0)) | |
1471 | + | then if ((size(en.payments) != 1)) | |
1490 | 1472 | then throw("exactly 1 payment must be attached") | |
1491 | 1473 | else { | |
1492 | - | let | |
1493 | - | let | |
1494 | - | let | |
1495 | - | if (( | |
1474 | + | let dl = en.payments[0] | |
1475 | + | let dm = dl.amount | |
1476 | + | let fh = valueOrErrorMessage(dl.assetId, "WAVES can't be used as payment") | |
1477 | + | if ((fh != af)) | |
1496 | 1478 | then throw("USDT payments only!") | |
1497 | - | else if (( | |
1498 | - | then throw(("Payment needed is " + toString( | |
1499 | - | else [StringEntry( | |
1479 | + | else if ((dm != ff)) | |
1480 | + | then throw(("Payment needed is " + toString(ff))) | |
1481 | + | else [StringEntry(bf, eW)] | |
1500 | 1482 | } | |
1501 | - | else if (( | |
1502 | - | then if ((size( | |
1483 | + | else if ((ff == 0)) | |
1484 | + | then if ((size(en.payments) != 0)) | |
1503 | 1485 | then throw("No payments needed") | |
1504 | - | else [StringEntry( | |
1505 | - | else if ((size( | |
1486 | + | else [StringEntry(bf, eW)] | |
1487 | + | else if ((size(en.payments) != 0)) | |
1506 | 1488 | then throw("No payments needed") | |
1507 | - | else [ScriptTransfer(addressFromStringValue( | |
1508 | - | $Tuple2( | |
1489 | + | else [ScriptTransfer(addressFromStringValue(eF), -(ff), af), StringEntry(bf, eW)] | |
1490 | + | $Tuple2(fg, $Tuple2(eT, dK)) | |
1509 | 1491 | } | |
1510 | 1492 | } | |
1511 | 1493 | } | |
1512 | 1494 | } | |
1513 | 1495 | ||
1514 | 1496 | ||
1515 | 1497 | ||
1516 | - | @Callable( | |
1517 | - | func acceptWarehouseOrder ( | |
1518 | - | let | |
1519 | - | if (( | |
1498 | + | @Callable(en) | |
1499 | + | func acceptWarehouseOrder (dr,dq,V) = { | |
1500 | + | let eq = bG() | |
1501 | + | if ((eq == eq)) | |
1520 | 1502 | then { | |
1521 | - | let | |
1522 | - | let | |
1523 | - | let | |
1524 | - | let | |
1525 | - | let | |
1526 | - | if (( | |
1527 | - | then throw((("Duck location type is " + | |
1528 | - | else if (( | |
1529 | - | then throw(((("Your staked duck is " + | |
1503 | + | let df = en.originCaller | |
1504 | + | let da = toString(df) | |
1505 | + | let fi = valueOrErrorMessage(getString(aD, S(da)), "You don't have a duck staked") | |
1506 | + | let er = valueOrElse(getString(aD, W(fi)), g) | |
1507 | + | let fj = split(value(er), "_") | |
1508 | + | if ((fj[L] != "L")) | |
1509 | + | then throw((("Duck location type is " + fj[L]) + ", but should be L")) | |
1510 | + | else if ((fi != V)) | |
1511 | + | then throw(((("Your staked duck is " + fi) + ", but passed ") + V)) | |
1530 | 1512 | else { | |
1531 | - | let | |
1532 | - | let | |
1533 | - | let | |
1534 | - | let | |
1535 | - | let | |
1513 | + | let bE = U(V) | |
1514 | + | let es = bD(bE) | |
1515 | + | let ds = split(es[H], "_") | |
1516 | + | let dt = split(es[I], "_") | |
1517 | + | let du = if ((es[J] == "")) | |
1536 | 1518 | then nil | |
1537 | - | else split_4C( | |
1538 | - | let | |
1539 | - | let | |
1540 | - | let | |
1541 | - | let | |
1542 | - | let | |
1543 | - | let | |
1544 | - | let | |
1545 | - | let | |
1546 | - | let | |
1547 | - | let | |
1548 | - | let | |
1549 | - | let | |
1550 | - | let | |
1551 | - | let | |
1552 | - | let | |
1553 | - | let | |
1554 | - | $Tuple2(( | |
1519 | + | else split_4C(es[J], "_") | |
1520 | + | let fk = dp(dq, da, dr, ds, dt, du) | |
1521 | + | let fl = fk._1 | |
1522 | + | let fm = fk._2 | |
1523 | + | let fn = fk._3 | |
1524 | + | let fo = fk._4 | |
1525 | + | let cZ = fk._5 | |
1526 | + | let dh = fk._6 | |
1527 | + | let fp = fk._7 | |
1528 | + | let dj = fk._8 | |
1529 | + | let fq = fk._9 | |
1530 | + | let dL = fk._10 | |
1531 | + | let fr = [fl, cY(cZ, da, 0)] | |
1532 | + | let fs = dg(dh, en.payments, dj, 0) | |
1533 | + | let ft = makeString_2C([es[G], makeString(fm, "_"), makeString(fn, "_"), makeString_2C(fo, "_")], ":") | |
1534 | + | let fu = aG(invoke(aD, "updateBackpack", [V, ft], nil)) | |
1535 | + | let fv = aJ(invoke(aD, "updateDuckStats", [V, fraction(d, fp, al)], nil)) | |
1536 | + | $Tuple2((fr ++ fs), $Tuple5(eq, fq, fu, fv, dL)) | |
1555 | 1537 | } | |
1556 | 1538 | } | |
1557 | 1539 | else throw("Strict value is not equal to itself.") | |
1558 | 1540 | } | |
1559 | 1541 | ||
1560 | 1542 | ||
1561 | 1543 | ||
1562 | - | @Callable(eo) | |
1563 | - | func acceptShopOrderDuckDelivery (fx,dr) = if (!(ae)) | |
1564 | - | then throw("Delivery feature is turned off!") | |
1565 | - | else { | |
1566 | - | let er = bH() | |
1567 | - | if ((er == er)) | |
1568 | - | then { | |
1569 | - | let dg = eo.originCaller | |
1570 | - | let db = toString(dg) | |
1571 | - | let V = valueOrErrorMessage(getString(aE, S(db)), "You don't have a duck staked") | |
1572 | - | let bF = U(V) | |
1573 | - | let et = bE(bF) | |
1574 | - | let dt = split(et[H], "_") | |
1575 | - | let du = split(et[I], "_") | |
1576 | - | let dv = if ((et[J] == "")) | |
1577 | - | then nil | |
1578 | - | else split_4C(et[J], "_") | |
1579 | - | let fy = dq(dr, db, fx, dt, du, dv) | |
1580 | - | let fm = fy._1 | |
1581 | - | let fn = fy._2 | |
1582 | - | let fo = fy._3 | |
1583 | - | let fp = fy._4 | |
1584 | - | let da = fy._5 | |
1585 | - | let di = fy._6 | |
1586 | - | let fq = fy._7 | |
1587 | - | let dk = fy._8 | |
1588 | - | let fr = fy._9 | |
1589 | - | let dM = fy._10 | |
1590 | - | let fz = fraction((di + da), aX, al) | |
1591 | - | let fA = max([fz, k]) | |
1592 | - | let dl = fraction(fA, di, (di + da)) | |
1593 | - | let dc = (fA - dl) | |
1594 | - | let eD = valueOrElse(getInteger(aa), 0) | |
1595 | - | let fs = [fm, cZ(da, db, dc)] | |
1596 | - | let ft = dh(di, eo.payments, dk, dl) | |
1597 | - | let fu = makeString_2C([et[G], makeString(fn, "_"), makeString(fo, "_"), makeString_2C(fp, "_")], ":") | |
1598 | - | let fv = aH(invoke(aE, "updateBackpack", [V, fu], nil)) | |
1599 | - | let fw = aK(invoke(aE, "updateDuckStats", [V, fraction(d, fq, am)], nil)) | |
1600 | - | $Tuple2(((fs ++ ft) :+ IntegerEntry(aa, (eD + fA))), $Tuple5(er, fr, fv, fw, dM)) | |
1601 | - | } | |
1602 | - | else throw("Strict value is not equal to itself.") | |
1603 | - | } | |
1544 | + | @Callable(en) | |
1545 | + | func acceptShopOrderDuckDelivery (fw,dq) = { | |
1546 | + | let eq = bG() | |
1547 | + | if ((eq == eq)) | |
1548 | + | then { | |
1549 | + | let df = en.originCaller | |
1550 | + | let da = toString(df) | |
1551 | + | let V = valueOrErrorMessage(getString(aD, S(da)), "You don't have a duck staked") | |
1552 | + | let bE = U(V) | |
1553 | + | let es = bD(bE) | |
1554 | + | let ds = split(es[H], "_") | |
1555 | + | let dt = split(es[I], "_") | |
1556 | + | let du = if ((es[J] == "")) | |
1557 | + | then nil | |
1558 | + | else split_4C(es[J], "_") | |
1559 | + | let fx = dp(dq, da, fw, ds, dt, du) | |
1560 | + | let fl = fx._1 | |
1561 | + | let fm = fx._2 | |
1562 | + | let fn = fx._3 | |
1563 | + | let fo = fx._4 | |
1564 | + | let cZ = fx._5 | |
1565 | + | let dh = fx._6 | |
1566 | + | let fp = fx._7 | |
1567 | + | let dj = fx._8 | |
1568 | + | let fq = fx._9 | |
1569 | + | let dL = fx._10 | |
1570 | + | let fy = fraction((dh + cZ), aW, ak) | |
1571 | + | let fz = max([fy, k]) | |
1572 | + | let dk = fraction(fz, dh, (dh + cZ)) | |
1573 | + | let db = (fz - dk) | |
1574 | + | let eC = valueOrElse(getInteger(aa), 0) | |
1575 | + | let fr = [fl, cY(cZ, da, db)] | |
1576 | + | let fs = dg(dh, en.payments, dj, dk) | |
1577 | + | let ft = makeString_2C([es[G], makeString(fm, "_"), makeString(fn, "_"), makeString_2C(fo, "_")], ":") | |
1578 | + | let fu = aG(invoke(aD, "updateBackpack", [V, ft], nil)) | |
1579 | + | let fv = aJ(invoke(aD, "updateDuckStats", [V, fraction(d, fp, al)], nil)) | |
1580 | + | $Tuple2(((fr ++ fs) :+ IntegerEntry(aa, (eC + fz))), $Tuple5(eq, fq, fu, fv, dL)) | |
1581 | + | } | |
1582 | + | else throw("Strict value is not equal to itself.") | |
1583 | + | } | |
1604 | 1584 | ||
1605 | 1585 | ||
1606 | 1586 | ||
1607 | - | @Callable(eo) | |
1608 | - | func acceptShopOrderLandDelivery (fx,dr,fB) = if (!(ae)) | |
1609 | - | then throw("Delivery feature is turned off!") | |
1610 | - | else { | |
1611 | - | let er = bH() | |
1612 | - | if ((er == er)) | |
1613 | - | then { | |
1614 | - | let dg = eo.originCaller | |
1615 | - | let db = toString(dg) | |
1616 | - | let eF = value(assetInfo(fromBase58String(fB))) | |
1617 | - | if (!(isDefined(getInteger(aE, P(fB))))) | |
1618 | - | then throw((("NFT " + eF.name) + " is not staked")) | |
1619 | - | else { | |
1620 | - | let eG = valueOrErrorMessage(getString(aE, N(fB)), (("NFT " + eF.name) + " is orphaned")) | |
1621 | - | if ((eG != db)) | |
1622 | - | then throw((e + " is not yours")) | |
1623 | - | else { | |
1624 | - | let dB = aH(invoke(aE, "getWarehouseREADONLY", [fB], nil)) | |
1625 | - | let ca = split_4C(dB, ":") | |
1626 | - | let cM = split(ca[A], "_") | |
1627 | - | let cT = split(ca[B], "_") | |
1628 | - | let ea = if ((ca[C] == "")) | |
1629 | - | then nil | |
1630 | - | else split_4C(ca[C], "_") | |
1631 | - | let fC = dq(dr, db, fx, cM, cT, ea) | |
1632 | - | let fm = fC._1 | |
1633 | - | let fn = fC._2 | |
1634 | - | let fo = fC._3 | |
1635 | - | let fp = fC._4 | |
1636 | - | let da = fC._5 | |
1637 | - | let di = fC._6 | |
1638 | - | let fq = fC._7 | |
1639 | - | let dk = fC._8 | |
1640 | - | let fr = fC._9 | |
1641 | - | let dM = fC._10 | |
1642 | - | let fz = fraction((di + da), aX, al) | |
1643 | - | let fA = max([fz, k]) | |
1644 | - | let dl = fraction(fA, di, (di + da)) | |
1645 | - | let dc = (fA - dl) | |
1646 | - | let eD = valueOrElse(getInteger(aa), 0) | |
1647 | - | let fs = [fm, cZ(da, db, dc)] | |
1648 | - | let ft = dh(di, eo.payments, dk, dl) | |
1649 | - | let dJ = makeString_2C([ca[z], makeString(fn, "_"), makeString(fo, "_"), makeString(fp, "_"), ca[D]], ":") | |
1650 | - | let dL = aH(invoke(aE, "saveWarehouse", [dJ, fB], nil)) | |
1651 | - | let ey = aK(invoke(aE, "updateAccStats", [db, fraction(d, fq, am)], nil)) | |
1652 | - | $Tuple2(((fs ++ ft) :+ IntegerEntry(aa, (eD + fA))), $Tuple5(er, fr, dL, ey, dM)) | |
1653 | - | } | |
1654 | - | } | |
1655 | - | } | |
1656 | - | else throw("Strict value is not equal to itself.") | |
1657 | - | } | |
1587 | + | @Callable(en) | |
1588 | + | func acceptShopOrderLandDelivery (fw,dq,fA) = { | |
1589 | + | let eq = bG() | |
1590 | + | if ((eq == eq)) | |
1591 | + | then { | |
1592 | + | let df = en.originCaller | |
1593 | + | let da = toString(df) | |
1594 | + | let eE = value(assetInfo(fromBase58String(fA))) | |
1595 | + | if (!(isDefined(getInteger(aD, P(fA))))) | |
1596 | + | then throw((("NFT " + eE.name) + " is not staked")) | |
1597 | + | else { | |
1598 | + | let eF = valueOrErrorMessage(getString(aD, N(fA)), (("NFT " + eE.name) + " is orphaned")) | |
1599 | + | if ((eF != da)) | |
1600 | + | then throw((e + " is not yours")) | |
1601 | + | else { | |
1602 | + | let dA = aG(invoke(aD, "getWarehouseREADONLY", [fA], nil)) | |
1603 | + | let bZ = split_4C(dA, ":") | |
1604 | + | let cL = split(bZ[A], "_") | |
1605 | + | let cS = split(bZ[B], "_") | |
1606 | + | let dZ = if ((bZ[C] == "")) | |
1607 | + | then nil | |
1608 | + | else split_4C(bZ[C], "_") | |
1609 | + | let fB = dp(dq, da, fw, cL, cS, dZ) | |
1610 | + | let fl = fB._1 | |
1611 | + | let fm = fB._2 | |
1612 | + | let fn = fB._3 | |
1613 | + | let fo = fB._4 | |
1614 | + | let cZ = fB._5 | |
1615 | + | let dh = fB._6 | |
1616 | + | let fp = fB._7 | |
1617 | + | let dj = fB._8 | |
1618 | + | let fq = fB._9 | |
1619 | + | let dL = fB._10 | |
1620 | + | let fy = fraction((dh + cZ), aW, ak) | |
1621 | + | let fz = max([fy, k]) | |
1622 | + | let dk = fraction(fz, dh, (dh + cZ)) | |
1623 | + | let db = (fz - dk) | |
1624 | + | let eC = valueOrElse(getInteger(aa), 0) | |
1625 | + | let fr = [fl, cY(cZ, da, db)] | |
1626 | + | let fs = dg(dh, en.payments, dj, dk) | |
1627 | + | let dI = makeString_2C([bZ[z], makeString(fm, "_"), makeString(fn, "_"), makeString(fo, "_"), bZ[D]], ":") | |
1628 | + | let dK = aG(invoke(aD, "saveWarehouse", [dI, fA], nil)) | |
1629 | + | let ex = aJ(invoke(aD, "updateAccStats", [da, fraction(d, fp, al)], nil)) | |
1630 | + | $Tuple2(((fr ++ fs) :+ IntegerEntry(aa, (eC + fz))), $Tuple5(eq, fq, dK, ex, dL)) | |
1631 | + | } | |
1632 | + | } | |
1633 | + | } | |
1634 | + | else throw("Strict value is not equal to itself.") | |
1635 | + | } | |
1658 | 1636 | ||
1659 | 1637 | ||
1660 | 1638 | ||
1661 | - | @Callable( | |
1662 | - | func sellProductsToES ( | |
1663 | - | let | |
1664 | - | if (( | |
1665 | - | then if ((size( | |
1639 | + | @Callable(en) | |
1640 | + | func sellProductsToES (cN) = { | |
1641 | + | let eq = bG() | |
1642 | + | if ((eq == eq)) | |
1643 | + | then if ((size(en.payments) != 0)) | |
1666 | 1644 | then throw("No payments needed") | |
1667 | 1645 | else { | |
1668 | - | let V = valueOrErrorMessage(getString( | |
1669 | - | let | |
1670 | - | if (( | |
1671 | - | then throw(("Duck location type should be Airport, but is " + | |
1646 | + | let V = valueOrErrorMessage(getString(aD, S(toString(en.caller))), "You don't have a duck staked") | |
1647 | + | let er = split(valueOrElse(getString(aD, W(V)), g), "_") | |
1648 | + | if ((er[L] != "A")) | |
1649 | + | then throw(("Duck location type should be Airport, but is " + er[L])) | |
1672 | 1650 | else { | |
1673 | - | let | |
1674 | - | let | |
1651 | + | let es = bD(U(V)) | |
1652 | + | let dZ = if ((es[J] == "")) | |
1675 | 1653 | then nil | |
1676 | - | else split_4C( | |
1677 | - | let | |
1678 | - | let | |
1679 | - | let | |
1680 | - | then split_4C(value( | |
1654 | + | else split_4C(es[J], "_") | |
1655 | + | let fC = Z() | |
1656 | + | let fD = getString(fC) | |
1657 | + | let fE = if (isDefined(fD)) | |
1658 | + | then split_4C(value(fD), "_") | |
1681 | 1659 | else nil | |
1682 | - | func | |
1683 | - | let | |
1684 | - | let | |
1685 | - | then | |
1660 | + | func fF (bI,fG) = { | |
1661 | + | let bK = bI._1 | |
1662 | + | let ec = if ((size(cN) > bK)) | |
1663 | + | then cN[bK] | |
1686 | 1664 | else 0 | |
1687 | - | if ((0 > | |
1665 | + | if ((0 > ec)) | |
1688 | 1666 | then throw("Quantity cannot be negative") | |
1689 | 1667 | else { | |
1690 | - | let ad = split( | |
1668 | + | let ad = split(fG, "_") | |
1691 | 1669 | if ((size(ad) != x)) | |
1692 | - | then throw(("Fatal: unknown recipe: " + | |
1670 | + | then throw(("Fatal: unknown recipe: " + fG)) | |
1693 | 1671 | else { | |
1694 | - | let | |
1695 | - | let | |
1696 | - | then parseIntValue( | |
1672 | + | let fH = (i * y) | |
1673 | + | let fI = if ((size(fE) > bK)) | |
1674 | + | then parseIntValue(fE[bK]) | |
1697 | 1675 | else 0 | |
1698 | - | let | |
1699 | - | if (( | |
1700 | - | then throw(((("Warehouse can buy only " + toString( | |
1676 | + | let fJ = (fH - fI) | |
1677 | + | if ((ec > fJ)) | |
1678 | + | then throw(((("Warehouse can buy only " + toString(fJ)) + " of ") + r[bK])) | |
1701 | 1679 | else { | |
1702 | - | let | |
1703 | - | let | |
1704 | - | let | |
1705 | - | then parseIntValue( | |
1680 | + | let eJ = ac(ad) | |
1681 | + | let fK = fraction((eJ * j), h, (al * y)) | |
1682 | + | let fL = if ((size(dZ) > bK)) | |
1683 | + | then parseIntValue(dZ[bK]) | |
1706 | 1684 | else 0 | |
1707 | - | if (( | |
1708 | - | then throw(((("You have only " + toString( | |
1709 | - | else $Tuple5(( | |
1685 | + | if ((ec > fL)) | |
1686 | + | then throw(((("You have only " + toString(fL)) + " of ") + r[bK])) | |
1687 | + | else $Tuple5((bK + 1), (bI._2 + (fK * ec)), (bI._3 :+ toString((fL - ec))), (bI._4 :+ toString((fI + ec))), (bI._5 + (eJ * ec))) | |
1710 | 1688 | } | |
1711 | 1689 | } | |
1712 | 1690 | } | |
1713 | 1691 | } | |
1714 | 1692 | ||
1715 | - | let | |
1716 | - | let | |
1717 | - | let | |
1718 | - | let | |
1719 | - | func | |
1720 | - | then | |
1721 | - | else | |
1693 | + | let em = { | |
1694 | + | let cm = u | |
1695 | + | let cn = size(cm) | |
1696 | + | let co = $Tuple5(0, 0, nil, nil, 0) | |
1697 | + | func cp (cq,cr) = if ((cr >= cn)) | |
1698 | + | then cq | |
1699 | + | else fF(cq, cm[cr]) | |
1722 | 1700 | ||
1723 | - | func | |
1724 | - | then | |
1701 | + | func cs (cq,cr) = if ((cr >= cn)) | |
1702 | + | then cq | |
1725 | 1703 | else throw("List size exceeds 50") | |
1726 | 1704 | ||
1727 | - | | |
1705 | + | cs(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(co, 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) | |
1728 | 1706 | } | |
1729 | - | let | |
1730 | - | let | |
1731 | - | let | |
1732 | - | $Tuple2([StringEntry( | |
1707 | + | let ft = makeString_2C([es[G], es[H], es[I], makeString_2C(em._3, "_")], ":") | |
1708 | + | let fu = aG(invoke(aD, "updateBackpack", [V, ft], nil)) | |
1709 | + | let ex = aJ(invoke(aD, "updateDuckStats", [V, fraction(c, em._5, (al * 10))], nil)) | |
1710 | + | $Tuple2([StringEntry(fC, makeString_2C(em._4, "_")), ScriptTransfer(en.caller, em._2, af)], $Tuple3(fu, eq, ex)) | |
1733 | 1711 | } | |
1734 | 1712 | } | |
1735 | 1713 | else throw("Strict value is not equal to itself.") | |
1736 | 1714 | } | |
1737 | 1715 | ||
1738 | 1716 | ||
1739 | 1717 | ||
1740 | - | @Callable( | |
1741 | - | func updateEsStorage ( | |
1718 | + | @Callable(en) | |
1719 | + | func updateEsStorage (fM) = if ((en.caller != aD)) | |
1742 | 1720 | then throw("Permission denied") | |
1743 | - | else $Tuple2([StringEntry(Z(), | |
1721 | + | else $Tuple2([StringEntry(Z(), fM)], fM) | |
1744 | 1722 | ||
1745 | 1723 | ||
1746 | 1724 | ||
1747 | - | @Callable( | |
1748 | - | func updateDeliveryLocked ( | |
1725 | + | @Callable(en) | |
1726 | + | func updateDeliveryLocked (fN) = if ((en.caller != aD)) | |
1749 | 1727 | then throw("Permission denied") | |
1750 | - | else $Tuple2([IntegerEntry(ab, | |
1728 | + | else $Tuple2([IntegerEntry(ab, fN)], fN) | |
1751 | 1729 | ||
1752 | 1730 | ||
1753 | 1731 | ||
1754 | - | @Callable( | |
1755 | - | func sendDeliveryReward (R) = if (( | |
1732 | + | @Callable(en) | |
1733 | + | func sendDeliveryReward (R) = if ((en.caller != aD)) | |
1756 | 1734 | then throw("Permission denied") | |
1757 | 1735 | else { | |
1758 | - | let | |
1759 | - | let | |
1760 | - | let | |
1761 | - | let | |
1762 | - | $Tuple2([IntegerEntry(aa, ( | |
1736 | + | let eC = valueOrElse(getInteger(aa), 0) | |
1737 | + | let fO = valueOrElse(getInteger(ab), 0) | |
1738 | + | let fP = (k * o) | |
1739 | + | let fQ = invoke(aF, "sendAcres", [R, fP], nil) | |
1740 | + | $Tuple2([IntegerEntry(aa, (eC - k)), IntegerEntry(ab, (fO - k))], fQ) | |
1763 | 1741 | } | |
1764 | 1742 | ||
1765 | 1743 |
github/deemru/w8io/169f3d6 1169.70 ms ◑