tx · G7FXZm7SAJJt3w4FYMYKa97zdrFBQqRBG961NkLTHbhM

3N9kbR6BQEQV7pwBfDFzprJtNofgi6fSJ6Y:  -0.03700000 Waves

2022.12.26 22:41 [2377687] smart account 3N9kbR6BQEQV7pwBfDFzprJtNofgi6fSJ6Y > SELF 0.00000000 Waves

{ "type": 13, "id": "G7FXZm7SAJJt3w4FYMYKa97zdrFBQqRBG961NkLTHbhM", "fee": 3700000, "feeAssetId": null, "timestamp": 1672083711726, "version": 2, "chainId": 84, "sender": "3N9kbR6BQEQV7pwBfDFzprJtNofgi6fSJ6Y", "senderPublicKey": "EajGg1J8duApPELWPw9gVkPwAKFC9hujhvCcne4FunUa", "proofs": [ "21kJCcLCXnTkdFUvArfDVVWk3dUoryr3i3Yw3c9DFQf9vuniYX1r5UXi1NorTVWueRMT5EXFV1kaPNt1u6WvKMhZ" ], "script": "base64:BgJLCAISBAoCCAgSAwoBCBIAEgMKAQgSCgoICAEBAQEBAQgSCwoJCAEBAQgBAQEBEg0KCwgIAQEBAQEBCAgBEgMKAQESAwoBARIDCgEBOwAUa19jb29yZGluYXRvckFkZHJlc3MCFGtfY29vcmRpbmF0b3JBZGRyZXNzABJrX2FkbWluX3B1YmxpY19rZXkCEmtfYWRtaW5fcHVibGljX2tleQANa19xdW90ZV9hc3NldAINa19xdW90ZV9hc3NldAAFa19hbW0CBWtfYW1tABFrX21hbmFnZXJfYWRkcmVzcwIRa19tYW5hZ2VyX2FkZHJlc3MAEmtfcG9zaXRpb25TZXF1ZW5jZQISa19wb3NpdGlvblNlcXVlbmNlAA5rX3Bvc2l0aW9uU2l6ZQIOa19wb3NpdGlvblNpemUABWtfZmVlAgVrX2ZlZQAQa19leGVjdXRlZE9yZGVycwIQa19leGVjdXRlZE9yZGVycwAQa19jYW5jZWxlZE9yZGVycwIQa19jYW5jZWxlZE9yZGVycwAHa19vcmRlcgIHa19vcmRlcgANa19sYXN0T3JkZXJJZAINa19sYXN0T3JkZXJJZAAQa190cmFkZXJPcmRlckNudAIQa190cmFkZXJPcmRlckNudAAQa190cmFkZXJPcmRlcklkcwIQa190cmFkZXJPcmRlcklkcwAIa19zZW5kZXICCGtfc2VuZGVyAA1rX2luaXRpYWxpemVkAg1rX2luaXRpYWxpemVkAARTVE9QAAEABFRBS0UAAgAFTElNSVQAAwAETE9ORwABAAVTSE9SVAACAAhJTkNSRUFTRQABAAhERUNSRUFTRQACABlNQVhfVFJBREVSX09SREVSU19QRVJfQU1NAAUABFRJTUUIBQlsYXN0QmxvY2sJdGltZXN0YW1wAAxERUNJTUFMX1VOSVQJAGgCAAEJAGgCCQBoAgkAaAIJAGgCCQBoAgAKAAoACgAKAAoACgAMU1BSRUFEX0xJTUlUCQBpAgUMREVDSU1BTF9VTklUAMgBAQNhYnMBAl94AwkAZgIFAl94AAAFAl94CQEBLQEFAl94AQRkaXZkAgJfeAJfeQkAbgQFAl94BQxERUNJTUFMX1VOSVQFAl95BQhIQUxGRVZFTgEEbXVsZAICX3gCX3kJAG4EBQJfeAUCX3kFDERFQ0lNQUxfVU5JVAUISEFMRkVWRU4BBG1pbnYCAl94Al95AwkAZgIFAl94BQJfeQUCX3kFAl94AQ50b0NvbXBvc2l0ZUtleQIEX2tleQhfYWRkcmVzcwkArAICCQCsAgIFBF9rZXkCAV8FCF9hZGRyZXNzARBleGVjdXRlZE9yZGVyS2V5AQhfb3JkZXJJZAkArAICCQCsAgIFEGtfZXhlY3V0ZWRPcmRlcnMCAV8JAKQDAQUIX29yZGVySWQBEGNhbmNlbGVkT3JkZXJLZXkBCF9vcmRlcklkCQCsAgIJAKwCAgUQa19jYW5jZWxlZE9yZGVycwIBXwkApAMBBQhfb3JkZXJJZAEIb3JkZXJLZXkBCF9vcmRlcklkCQEOdG9Db21wb3NpdGVLZXkCBQdrX29yZGVyCQCkAwEFCF9vcmRlcklkARN0cmFkZXJPcmRlckNvdW50S2V5AgRfYW1tB190cmFkZXIJAKwCAgkArAICCQCsAgIJAKwCAgUQa190cmFkZXJPcmRlckNudAIBXwUEX2FtbQIBXwUHX3RyYWRlcgERdHJhZGVyT3JkZXJJZHNLZXkCBF9hbW0HX3RyYWRlcgkArAICCQCsAgIJAKwCAgkArAICBRBrX3RyYWRlck9yZGVySWRzAgFfBQRfYW1tAgFfBQdfdHJhZGVyAQtjb29yZGluYXRvcgAJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzBRRrX2Nvb3JkaW5hdG9yQWRkcmVzcwITQ29vcmRpbmF0b3Igbm90IHNldAEKcXVvdGVBc3NldAAJANkEAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBC2Nvb3JkaW5hdG9yAAUNa19xdW90ZV9hc3NldAEObWFuYWdlckFkZHJlc3MACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBC2Nvb3JkaW5hdG9yAAURa19tYW5hZ2VyX2FkZHJlc3MCD01hbmFnZXIgbm90IHNldAELaXNXaGl0ZWxpc3QBCF9hZGRyZXNzCQELdmFsdWVPckVsc2UCCQCbCAIJAQtjb29yZGluYXRvcgAJAQ50b0NvbXBvc2l0ZUtleQIFBWtfYW1tBQhfYWRkcmVzcwcBDmFkbWluUHVibGljS2V5AAkA2QQBCQERQGV4dHJOYXRpdmUoMTA1MykCCQELY29vcmRpbmF0b3IABRJrX2FkbWluX3B1YmxpY19rZXkBC2luaXRpYWxpemVkAAkBC3ZhbHVlT3JFbHNlAgkAmwgCBQR0aGlzBQ1rX2luaXRpYWxpemVkBwEHaXNWYWxpZAEIX29yZGVySWQDCQELdmFsdWVPckVsc2UCCQCbCAIFBHRoaXMJARBleGVjdXRlZE9yZGVyS2V5AQUIX29yZGVySWQHCQACAQkArAICAhhPcmRlciBhbHJlYWR5IGV4ZWN1dGVkOiAJAKQDAQUIX29yZGVySWQDCQELdmFsdWVPckVsc2UCCQCbCAIFBHRoaXMJARBjYW5jZWxlZE9yZGVyS2V5AQUIX29yZGVySWQHCQACAQkArAICAhlPcmRlciBhbHJlYWR5IGNhbmNlbGxlZDogCQCkAwEFCF9vcmRlcklkBgEOY3VycmVudE9yZGVySWQACQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFDWtfbGFzdE9yZGVySWQAAAETZ2V0VHJhZGVyT3JkZXJDb3VudAIEX2FtbQdfdHJhZGVyBANrZXkJARN0cmFkZXJPcmRlckNvdW50S2V5AgUEX2FtbQUHX3RyYWRlcgkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQNrZXkAAAESdHJhZGVyQW1tT3JkZXJzSWRzAgRfYW1tB190cmFkZXIEA2tleQkBEXRyYWRlck9yZGVySWRzS2V5AgUEX2FtbQUHX3RyYWRlcgQDdmFsCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMFA2tleQIAAwkAAAIFA3ZhbAIABQNuaWwJALUJAgUDdmFsAgEsAQhnZXRPcmRlcgEIX29yZGVySWQECG9yZGVyU3RyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwkBCG9yZGVyS2V5AQUIX29yZGVySWQJAKwCAgISSW52YWxpZCBvcmRlciBpZDogCQCkAwEFCF9vcmRlcklkBA1vcmRlclBhcnRMaXN0CQC1CQIFCG9yZGVyU3RyAgEsBANhbW0JAJEDAgUNb3JkZXJQYXJ0TGlzdAAABAZ0cmFkZXIJAJEDAgUNb3JkZXJQYXJ0TGlzdAABBAhhbW91bnRJbgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQC2CQEJAJEDAgUNb3JkZXJQYXJ0TGlzdAACAhBJbnZhbGlkIGFtb3VudEluBAhsZXZlcmFnZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQC2CQEJAJEDAgUNb3JkZXJQYXJ0TGlzdAADAhBJbnZhbGlkIGxldmVyYWdlBAR0eXBlCQETdmFsdWVPckVycm9yTWVzc2FnZQIJALYJAQkAkQMCBQ1vcmRlclBhcnRMaXN0AAQCDEludmFsaWQgdHlwZQQMdHJpZ2dlclByaWNlCQETdmFsdWVPckVycm9yTWVzc2FnZQIJALYJAQkAkQMCBQ1vcmRlclBhcnRMaXN0AAUCFEludmFsaWQgdHJpZ2dlclByaWNlBAtwYXltZW50VXNkbgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQC2CQEJAJEDAgUNb3JkZXJQYXJ0TGlzdAAGAhNJbnZhbGlkIHBheW1lbnRVc2RuBARzaWRlCQETdmFsdWVPckVycm9yTWVzc2FnZQIJALYJAQkAkQMCBQ1vcmRlclBhcnRMaXN0AAcCDEludmFsaWQgc2lkZQQHcmVmTGluawkAkQMCBQ1vcmRlclBhcnRMaXN0AAgECnBvc2l0aW9uSWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAtgkBCQCRAwIFDW9yZGVyUGFydExpc3QACQISSW52YWxpZCBwb3NpdGlvbklkBApsaW1pdFByaWNlCQETdmFsdWVPckVycm9yTWVzc2FnZQIJALYJAQkAkQMCBQ1vcmRlclBhcnRMaXN0AAoCEkludmFsaWQgbGltaXRQcmljZQkAnQoLBQNhbW0FBnRyYWRlcgUIYW1vdW50SW4FCGxldmVyYWdlBQR0eXBlBQx0cmlnZ2VyUHJpY2UFC3BheW1lbnRVc2RuBQRzaWRlBQdyZWZMaW5rBQpwb3NpdGlvbklkBQpsaW1pdFByaWNlAQ5nZXRNYXJrZXRQcmljZQEEX2FtbQQBcwkA/AcECQERQGV4dHJOYXRpdmUoMTA2MikBBQRfYW1tAhBjb21wdXRlU3BvdFByaWNlBQNuaWwFA25pbAMJAAACBQFzBQFzBANyZXMEByRtYXRjaDAFAXMDCQABAgUHJG1hdGNoMAIDSW50BAF0BQckbWF0Y2gwBQF0CQACAQIfSW52YWxpZCBjb21wdXRlU3BvdFByaWNlIHJlc3VsdAkBBXZhbHVlAQUDcmVzCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQZnZXRGZWUCBF9hbW0HX3RyYWRlcgQBcwkA/AcECQERQGV4dHJOYXRpdmUoMTA2MikBBQRfYW1tAh9jb21wdXRlRmVlRm9yVHJhZGVyV2l0aEFydGlmYWN0CQDMCAIFB190cmFkZXIJAMwIAgIABQNuaWwFA25pbAMJAAACBQFzBQFzBANyZXMEByRtYXRjaDAFAXMDCQABAgUHJG1hdGNoMAIOKEludCwgQm9vbGVhbikEAXQFByRtYXRjaDAIBQF0Al8xCQACAQIuSW52YWxpZCBjb21wdXRlRmVlRm9yVHJhZGVyV2l0aEFydGlmYWN0IHJlc3VsdAkBBXZhbHVlAQUDcmVzCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQ9nZXRQb3NpdGlvblNpemUCBF9hbW0HX3RyYWRlcgQDYW1tCQERQGV4dHJOYXRpdmUoMTA2MikBBQRfYW1tBAdzaXplS2V5CQEOdG9Db21wb3NpdGVLZXkCBQ5rX3Bvc2l0aW9uU2l6ZQUHX3RyYWRlcgkBC3ZhbHVlT3JFbHNlAgkAmggCBQNhbW0FB3NpemVLZXkAAAENZ2V0UG9zaXRpb25JZAIEX2FtbQdfdHJhZGVyBANhbW0JARFAZXh0ck5hdGl2ZSgxMDYyKQEFBF9hbW0EBnNlcUtleQkBDnRvQ29tcG9zaXRlS2V5AgUSa19wb3NpdGlvblNlcXVlbmNlBQdfdHJhZGVyCQELdmFsdWVPckVsc2UCCQCaCAIFA2FtbQUGc2VxS2V5AAABCWdldFNwcmVhZAEGX3ByaWNlCQEEbXVsZAIFBl9wcmljZQUMU1BSRUFEX0xJTUlUAQlzYXZlT3JkZXIMCF9vcmRlcklkBF9hbW0HX3RyYWRlcglfYW1vdW50SW4JX2xldmVyYWdlBV90eXBlDV90cmlnZ2VyUHJpY2UMX3BheW1lbnRVc2RuBV9zaWRlCF9yZWZMaW5rC19wb3NpdGlvbklkC19saW1pdFByaWNlBAhvcmRlclN0cgkAuQkCCQDMCAIFBF9hbW0JAMwIAgUHX3RyYWRlcgkAzAgCCQCkAwEFCV9hbW91bnRJbgkAzAgCCQCkAwEFCV9sZXZlcmFnZQkAzAgCCQCkAwEFBV90eXBlCQDMCAIJAKQDAQUNX3RyaWdnZXJQcmljZQkAzAgCCQCkAwEFDF9wYXltZW50VXNkbgkAzAgCCQCkAwEFBV9zaWRlCQDMCAIFCF9yZWZMaW5rCQDMCAIJAKQDAQULX3Bvc2l0aW9uSWQJAMwIAgkApAMBBQtfbGltaXRQcmljZQUDbmlsAgEsCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQhvcmRlcktleQEFCF9vcmRlcklkBQhvcmRlclN0cgUDbmlsARBhZGRSZW1vdmVPcmRlcklkBAhfb3JkZXJJZARfYW1tB190cmFkZXIEX2FkZAQIb3JkZXJJZHMJARJ0cmFkZXJBbW1PcmRlcnNJZHMCBQRfYW1tBQdfdHJhZGVyBAtvcmRlcklkc05ldwMFBF9hZGQJAM0IAgUIb3JkZXJJZHMJAKQDAQUIX29yZGVySWQJANEIAgUIb3JkZXJJZHMJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAzwgCBQhvcmRlcklkcwkApAMBBQhfb3JkZXJJZAkArAICAhJObyBvcmRlciB3aXRoIGlkOiAJAKQDAQUIX29yZGVySWQEDm9yZGVySWRzTmV3U3RyCQC5CQIFC29yZGVySWRzTmV3AgEsCQDMCAIJAQtTdHJpbmdFbnRyeQIJARF0cmFkZXJPcmRlcklkc0tleQIFBF9hbW0FB190cmFkZXIFDm9yZGVySWRzTmV3U3RyBQNuaWwBFnVwZGF0ZVRyYWRlck9yZGVyQ291bnQDBF9hbW0HX3RyYWRlcgZfY291bnQJAMwIAgkBDEludGVnZXJFbnRyeQIJARN0cmFkZXJPcmRlckNvdW50S2V5AgUEX2FtbQUHX3RyYWRlcgUGX2NvdW50BQNuaWwBEXVwZGF0ZUxhc3RPcmRlcklkAQxfbGFzdE9yZGVySWQJAMwIAgkBDEludGVnZXJFbnRyeQIFDWtfbGFzdE9yZGVySWQFDF9sYXN0T3JkZXJJZAUDbmlsARBtYXJrRXhlY3V0ZU9yZGVyAQhfb3JkZXJJZAkAzAgCCQEMQm9vbGVhbkVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUQa19leGVjdXRlZE9yZGVycwkApAMBBQhfb3JkZXJJZAYFA25pbAEPbWFya0NhbmNlbE9yZGVyAQhfb3JkZXJJZAkAzAgCCQEMQm9vbGVhbkVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUQa19jYW5jZWxlZE9yZGVycwkApAMBBQhfb3JkZXJJZAYFA25pbAoBaQESY2xlYW5VcFN0YWxlT3JkZXJzAgRfYW1tB190cmFkZXIEBm9yZGVycwkBEnRyYWRlckFtbU9yZGVyc0lkcwIFBF9hbW0FB190cmFkZXIECm9yZGVyQ291bnQJARNnZXRUcmFkZXJPcmRlckNvdW50AgUEX2FtbQUHX3RyYWRlcgoBCmNsZWFuVXBPbmUCBF9hY2MIX29yZGVySWQECm9yZGVySWRJbnQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAtgkBBQhfb3JkZXJJZAIQSW52YWxpZCBvcmRlciBpZAQLJHQwODM4Mzg1NzgJAQhnZXRPcmRlcgEFCm9yZGVySWRJbnQEA194MQgFCyR0MDgzODM4NTc4Al8xBANfeDIIBQskdDA4MzgzODU3OAJfMgQDX3gzCAULJHQwODM4Mzg1NzgCXzMEA194NAgFCyR0MDgzODM4NTc4Al80BAVfdHlwZQgFCyR0MDgzODM4NTc4Al81BANfeDUIBQskdDA4MzgzODU3OAJfNgQDX3g2CAULJHQwODM4Mzg1NzgCXzcEA194NwgFCyR0MDgzODM4NTc4Al84BANfeDgIBQskdDA4MzgzODU3OAJfOQQLX3Bvc2l0aW9uSWQIBQskdDA4MzgzODU3OANfMTAEA194OQgFCyR0MDgzODM4NTc4A18xMQQMcG9zaXRpb25TaXplCQEPZ2V0UG9zaXRpb25TaXplAgUEX2FtbQUHX3RyYWRlcgQRY3VycmVudFBvc2l0aW9uSWQDCQECIT0CBQxwb3NpdGlvblNpemUAAAkBDWdldFBvc2l0aW9uSWQCBQRfYW1tBQdfdHJhZGVyAAADAwMJAAACBQVfdHlwZQUEU1RPUAYJAAACBQVfdHlwZQUEVEFLRQkBAiE9AgURY3VycmVudFBvc2l0aW9uSWQFC19wb3NpdGlvbklkBwQGY2hhbmdlCQDOCAIJAQ9tYXJrQ2FuY2VsT3JkZXIBBQpvcmRlcklkSW50CQEQYWRkUmVtb3ZlT3JkZXJJZAQFCm9yZGVySWRJbnQFBF9hbW0FB190cmFkZXIHCQCUCgIJAGQCCAUEX2FjYwJfMQABCQDOCAIIBQRfYWNjAl8yBQZjaGFuZ2UFBF9hY2MEBnJlc3VsdAoAAiRsBQZvcmRlcnMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCUCgIAAAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQpjbGVhblVwT25lAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA1CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQkAzggCCAUGcmVzdWx0Al8yCQEWdXBkYXRlVHJhZGVyT3JkZXJDb3VudAMFBF9hbW0FB190cmFkZXIJAGUCBQpvcmRlckNvdW50CAUGcmVzdWx0Al8xAWkBCnNldENvbnRleHQBB19zZW5kZXIDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAg5Pbmx5IHNlbGYtY2FsbAkAzAgCCQELU3RyaW5nRW50cnkCBQhrX3NlbmRlcgUHX3NlbmRlcgUDbmlsAWkBDHJlc2V0Q29udGV4dAADCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAg5Pbmx5IHNlbGYtY2FsbAkAzAgCCQELRGVsZXRlRW50cnkBBQhrX3NlbmRlcgUDbmlsAWkBCmluaXRpYWxpemUBDF9jb29yZGluYXRvcgMJAQtpbml0aWFsaXplZAAJAAIBAhNBbHJlYWR5IGluaXRpYWxpemVkCQDMCAIJAQtTdHJpbmdFbnRyeQIFFGtfY29vcmRpbmF0b3JBZGRyZXNzBQxfY29vcmRpbmF0b3IJAMwIAgkBDEJvb2xlYW5FbnRyeQIFDWtfaW5pdGlhbGl6ZWQGBQNuaWwBaQELY3JlYXRlT3JkZXIIBF9hbW0FX3R5cGUNX3RyaWdnZXJQcmljZQtfbGltaXRQcmljZQlfYW1vdW50SW4JX2xldmVyYWdlBV9zaWRlCF9yZWZMaW5rBAdfdHJhZGVyCQClCAEIBQFpBmNhbGxlcgQHY2xlYW5VcAkA/AcEBQR0aGlzAhJjbGVhblVwU3RhbGVPcmRlcnMJAMwIAgUEX2FtbQkAzAgCBQdfdHJhZGVyBQNuaWwFA25pbAMJAAACBQdjbGVhblVwBQdjbGVhblVwAwkAZgIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECNUludmFsaWQgY3JlYXRlT3JkZXIgcGFyYW1ldGVyczogaW52YWxpZCBwYXltZW50IGNvdW50BA0kdDAxMDI4NzEwNTM5AwkAAAIJAJADAQgFAWkIcGF5bWVudHMAAQkAlAoCCQDYBAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAggJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkAhBJbnZhbGlkIGFzc2V0IGlkCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAkAlAoCAgAAAAQOcGF5bWVudEFzc2V0SWQIBQ0kdDAxMDI4NzEwNTM5Al8xBA1wYXltZW50QW1vdW50CAUNJHQwMTAyODcxMDUzOQJfMgQGZG9DYWxsCQD8BwQFBHRoaXMCE2ludGVybmFsQ3JlYXRlT3JkZXIJAMwIAgUHX3RyYWRlcgkAzAgCBQRfYW1tCQDMCAIFBV90eXBlCQDMCAIFDV90cmlnZ2VyUHJpY2UJAMwIAgULX2xpbWl0UHJpY2UJAMwIAgUJX2Ftb3VudEluCQDMCAIFCV9sZXZlcmFnZQkAzAgCBQVfc2lkZQkAzAgCBQhfcmVmTGluawkAzAgCBQ5wYXltZW50QXNzZXRJZAkAzAgCBQ1wYXltZW50QW1vdW50BQNuaWwFA25pbAMJAAACBQZkb0NhbGwFBmRvQ2FsbAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBHGluY3JlYXNlUG9zaXRpb25XaXRoU3RvcExvc3MJBF9hbW0KX2RpcmVjdGlvbglfbGV2ZXJhZ2UTX21pbkJhc2VBc3NldEFtb3VudAhfcmVmTGluaxFfc3RvcFRyaWdnZXJQcmljZQ9fc3RvcExpbWl0UHJpY2URX3Rha2VUcmlnZ2VyUHJpY2UPX3Rha2VMaW1pdFByaWNlBAdfdHJhZGVyCQClCAEIBQFpBmNhbGxlcgQHY2xlYW5VcAkA/AcEBQR0aGlzAhJjbGVhblVwU3RhbGVPcmRlcnMJAMwIAgUEX2FtbQkAzAgCBQdfdHJhZGVyBQNuaWwFA25pbAMJAAACBQdjbGVhblVwBQdjbGVhblVwAwMJAQEhAQkBC2luaXRpYWxpemVkAAYJAQEhAQkBC2lzV2hpdGVsaXN0AQUEX2FtbQkAAgECL0ludmFsaWQgaW5jcmVhc2VQb3NpdGlvbldpdGhTdG9wTG9zcyBwYXJhbWV0ZXJzBAxwb3NpdGlvblNpemUJAQ9nZXRQb3NpdGlvblNpemUCBQRfYW1tBQdfdHJhZGVyAwkBAiE9AgUMcG9zaXRpb25TaXplAAAJAAIBAkJJbnZhbGlkIGluY3JlYXNlUG9zaXRpb25XaXRoU3RvcExvc3MgcGFyYW1ldGVyczogb25seSBuZXcgcG9zaXRpb24EDGRvU2V0Q29udGV4dAkA/AcEBQR0aGlzAgpzZXRDb250ZXh0CQDMCAIFB190cmFkZXIFA25pbAUDbmlsAwkAAAIFDGRvU2V0Q29udGV4dAUMZG9TZXRDb250ZXh0BA9kb0Nsb3NlUG9zaXRpb24JAPwHBAkBEUBleHRyTmF0aXZlKDEwNjIpAQUEX2FtbQIQaW5jcmVhc2VQb3NpdGlvbgkAzAgCBQpfZGlyZWN0aW9uCQDMCAIFCV9sZXZlcmFnZQkAzAgCBRNfbWluQmFzZUFzc2V0QW1vdW50CQDMCAIFCF9yZWZMaW5rBQNuaWwIBQFpCHBheW1lbnRzAwkAAAIFD2RvQ2xvc2VQb3NpdGlvbgUPZG9DbG9zZVBvc2l0aW9uBA5kb1Jlc2V0Q29udGV4dAkA/AcEBQR0aGlzAgxyZXNldENvbnRleHQFA25pbAUDbmlsAwkAAAIFDmRvUmVzZXRDb250ZXh0BQ5kb1Jlc2V0Q29udGV4dAQSb3BlbmVkUG9zaXRpb25TaXplCQEPZ2V0UG9zaXRpb25TaXplAgUEX2FtbQUHX3RyYWRlcgMJAAACBRJvcGVuZWRQb3NpdGlvblNpemUFEm9wZW5lZFBvc2l0aW9uU2l6ZQQIYW1vdW50SW4JAQNhYnMBBRJvcGVuZWRQb3NpdGlvblNpemUEDHN0b3BMb3NzU2lkZQMJAGYCAAAFEm9wZW5lZFBvc2l0aW9uU2l6ZQUETE9ORwUFU0hPUlQEEWRvQ3JlYXRlU3RvcE9yZGVyAwkAZgIFEV9zdG9wVHJpZ2dlclByaWNlAAAEEWRvQ3JlYXRlU3RvcE9yZGVyCQD8BwQFBHRoaXMCE2ludGVybmFsQ3JlYXRlT3JkZXIJAMwIAgUHX3RyYWRlcgkAzAgCBQRfYW1tCQDMCAIFBFNUT1AJAMwIAgURX3N0b3BUcmlnZ2VyUHJpY2UJAMwIAgUPX3N0b3BMaW1pdFByaWNlCQDMCAIFCGFtb3VudEluCQDMCAIAAAkAzAgCBQxzdG9wTG9zc1NpZGUJAMwIAgUIX3JlZkxpbmsJAMwIAgIACQDMCAIAAAUDbmlsBQNuaWwDCQAAAgURZG9DcmVhdGVTdG9wT3JkZXIFEWRvQ3JlYXRlU3RvcE9yZGVyBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FA25pbAMJAAACBRFkb0NyZWF0ZVN0b3BPcmRlcgURZG9DcmVhdGVTdG9wT3JkZXIEEWRvQ3JlYXRlVGFrZU9yZGVyAwkAZgIFEV90YWtlVHJpZ2dlclByaWNlAAAEEWRvQ3JlYXRlVGFrZU9yZGVyCQD8BwQFBHRoaXMCE2ludGVybmFsQ3JlYXRlT3JkZXIJAMwIAgUHX3RyYWRlcgkAzAgCBQRfYW1tCQDMCAIFBFRBS0UJAMwIAgURX3Rha2VUcmlnZ2VyUHJpY2UJAMwIAgUPX3Rha2VMaW1pdFByaWNlCQDMCAIFCGFtb3VudEluCQDMCAIAAAkAzAgCBQxzdG9wTG9zc1NpZGUJAMwIAgUIX3JlZkxpbmsJAMwIAgIACQDMCAIAAAUDbmlsBQNuaWwDCQAAAgURZG9DcmVhdGVUYWtlT3JkZXIFEWRvQ3JlYXRlVGFrZU9yZGVyBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FA25pbAMJAAACBRFkb0NyZWF0ZVRha2VPcmRlcgURZG9DcmVhdGVUYWtlT3JkZXIFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARNpbnRlcm5hbENyZWF0ZU9yZGVyCwdfdHJhZGVyBF9hbW0FX3R5cGUNX3RyaWdnZXJQcmljZQtfbGltaXRQcmljZQlfYW1vdW50SW4JX2xldmVyYWdlBV9zaWRlCF9yZWZMaW5rD19wYXltZW50QXNzZXRJZA5fcGF5bWVudEFtb3VudAMDAwMDAwMDAwkBASEBCQELaW5pdGlhbGl6ZWQABgkBASEBCQELaXNXaGl0ZWxpc3QBBQRfYW1tBgkAZwIAAAUNX3RyaWdnZXJQcmljZQYJAGYCAAAFC19saW1pdFByaWNlBgkAZwIAAAUJX2Ftb3VudEluBgkAZgIAAAUJX2xldmVyYWdlBgkBASEBAwkAAAIFBV9zaWRlBQRMT05HBgkAAAIFBV9zaWRlBQVTSE9SVAYJAQEhAQMDCQAAAgUFX3R5cGUFBFNUT1AGCQAAAgUFX3R5cGUFBFRBS0UGCQAAAgUFX3R5cGUFBUxJTUlUBgkBASEBCQAAAggFAWkGY2FsbGVyBQR0aGlzCQACAQIeSW52YWxpZCBjcmVhdGVPcmRlciBwYXJhbWV0ZXJzBAdvcmRlcklkCQBkAgkBDmN1cnJlbnRPcmRlcklkAAABBBNuZXdUcmFkZXJPcmRlckNvdW50CQBkAgkBE2dldFRyYWRlck9yZGVyQ291bnQCBQRfYW1tBQdfdHJhZGVyAAEEDHBvc2l0aW9uU2l6ZQkBD2dldFBvc2l0aW9uU2l6ZQIFBF9hbW0FB190cmFkZXIECl9kaXJlY3Rpb24DAwMJAAACBQxwb3NpdGlvblNpemUAAAYDCQBmAgUMcG9zaXRpb25TaXplAAAJAAACBQVfc2lkZQUETE9ORwcGAwkAZgIAAAUMcG9zaXRpb25TaXplCQAAAgUFX3NpZGUFBVNIT1JUBwUISU5DUkVBU0UFCERFQ1JFQVNFAwMJAAACBQxwb3NpdGlvblNpemUAAAMJAAACBQVfdHlwZQUEU1RPUAYJAAACBQVfdHlwZQUEVEFLRQcJAAIBAitDYW4gbm90IGNyZWF0ZSBTVE9QL1RBS0Ugb3JkZXI6IG5vIHBvc2l0aW9uBAt1c2RuUGF5bWVudAMJAAACBQpfZGlyZWN0aW9uBQhJTkNSRUFTRQMDCQECIT0CBQ9fcGF5bWVudEFzc2V0SWQJANgEAQkBCnF1b3RlQXNzZXQABgkBAiE9AgUOX3BheW1lbnRBbW91bnQFCV9hbW91bnRJbgkAAgECNEludmFsaWQgY3JlYXRlTGltaXRPcmRlciBwYXJhbWV0ZXJzOiBpbnZhbGlkIHBheW1lbnQEBXN0YWtlCQD8BwQJAQ5tYW5hZ2VyQWRkcmVzcwACB2RlcG9zaXQFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBCnF1b3RlQXNzZXQABQ5fcGF5bWVudEFtb3VudAUDbmlsAwkAAAIFBXN0YWtlBQVzdGFrZQUOX3BheW1lbnRBbW91bnQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAMJAAACBQt1c2RuUGF5bWVudAULdXNkblBheW1lbnQECnBvc2l0aW9uSWQDCQECIT0CBQxwb3NpdGlvblNpemUAAAkBDWdldFBvc2l0aW9uSWQCBQRfYW1tBQdfdHJhZGVyAAADCQBmAgUTbmV3VHJhZGVyT3JkZXJDb3VudAUZTUFYX1RSQURFUl9PUkRFUlNfUEVSX0FNTQkAAgECMEludmFsaWQgY3JlYXRlTGltaXRPcmRlciBwYXJhbWV0ZXJzOiBvcmRlciBjb3VudAkAzggCCQDOCAIJAM4IAgkBCXNhdmVPcmRlcgwFB29yZGVySWQFBF9hbW0FB190cmFkZXIFCV9hbW91bnRJbgUJX2xldmVyYWdlBQVfdHlwZQUNX3RyaWdnZXJQcmljZQULdXNkblBheW1lbnQFBV9zaWRlBQhfcmVmTGluawUKcG9zaXRpb25JZAULX2xpbWl0UHJpY2UJARBhZGRSZW1vdmVPcmRlcklkBAUHb3JkZXJJZAUEX2FtbQUHX3RyYWRlcgYJARZ1cGRhdGVUcmFkZXJPcmRlckNvdW50AwUEX2FtbQUHX3RyYWRlcgUTbmV3VHJhZGVyT3JkZXJDb3VudAkBEXVwZGF0ZUxhc3RPcmRlcklkAQUHb3JkZXJJZAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQtjYW5jZWxPcmRlcgEIX29yZGVySWQEDSR0MDE1OTA4MTYxMjcJAQhnZXRPcmRlcgEFCF9vcmRlcklkBARfYW1tCAUNJHQwMTU5MDgxNjEyNwJfMQQHX3RyYWRlcggFDSR0MDE1OTA4MTYxMjcCXzIECV9hbW91bnRJbggFDSR0MDE1OTA4MTYxMjcCXzMECV9sZXZlcmFnZQgFDSR0MDE1OTA4MTYxMjcCXzQEBV90eXBlCAUNJHQwMTU5MDgxNjEyNwJfNQQNX3RyaWdnZXJQcmljZQgFDSR0MDE1OTA4MTYxMjcCXzYEC19hbW91bnRVc2RuCAUNJHQwMTU5MDgxNjEyNwJfNwQFX3NpZGUIBQ0kdDAxNTkwODE2MTI3Al84BAhfcmVmTGluawgFDSR0MDE1OTA4MTYxMjcCXzkEC19wb3NpdGlvbklkCAUNJHQwMTU5MDgxNjEyNwNfMTAEC19saW1pdFByaWNlCAUNJHQwMTU5MDgxNjEyNwNfMTEDAwMJAQEhAQkBC2luaXRpYWxpemVkAAYJAQEhAQkBB2lzVmFsaWQBBQhfb3JkZXJJZAYJAQEhAQkAAAIJAKUIAQgFAWkGY2FsbGVyBQdfdHJhZGVyCQACAQIeSW52YWxpZCBjYW5jZWxPcmRlciBwYXJhbWV0ZXJzBAdjbGVhblVwCQD8BwQFBHRoaXMCEmNsZWFuVXBTdGFsZU9yZGVycwkAzAgCBQRfYW1tCQDMCAIFB190cmFkZXIFA25pbAUDbmlsAwkAAAIFB2NsZWFuVXAFB2NsZWFuVXAEE25ld1RyYWRlck9yZGVyQ291bnQJAGUCCQETZ2V0VHJhZGVyT3JkZXJDb3VudAIFBF9hbW0FB190cmFkZXIAAQQId2l0aGRyYXcDCQBmAgULX2Ftb3VudFVzZG4AAAQHdW5zdGFrZQkA/AcECQEObWFuYWdlckFkZHJlc3MAAgh3aXRoZHJhdwkAzAgCCQDYBAEJAQpxdW90ZUFzc2V0AAkAzAgCBQtfYW1vdW50VXNkbgUDbmlsBQNuaWwDCQAAAgUHdW5zdGFrZQUHdW5zdGFrZQUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQNuaWwDCQAAAgUId2l0aGRyYXcFCHdpdGhkcmF3CQDOCAIJAM4IAgkAzggCCQEPbWFya0NhbmNlbE9yZGVyAQUIX29yZGVySWQJARBhZGRSZW1vdmVPcmRlcklkBAUIX29yZGVySWQFBF9hbW0FB190cmFkZXIHCQEWdXBkYXRlVHJhZGVyT3JkZXJDb3VudAMFBF9hbW0FB190cmFkZXIFE25ld1RyYWRlck9yZGVyQ291bnQDCQBmAgULX2Ftb3VudFVzZG4AAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFC19hbW91bnRVc2RuCQEKcXVvdGVBc3NldAAFA25pbAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBDGV4ZWN1dGVPcmRlcgEIX29yZGVySWQEDSR0MDE3MDk4MTczMTcJAQhnZXRPcmRlcgEFCF9vcmRlcklkBARfYW1tCAUNJHQwMTcwOTgxNzMxNwJfMQQHX3RyYWRlcggFDSR0MDE3MDk4MTczMTcCXzIECV9hbW91bnRJbggFDSR0MDE3MDk4MTczMTcCXzMECV9sZXZlcmFnZQgFDSR0MDE3MDk4MTczMTcCXzQEBV90eXBlCAUNJHQwMTcwOTgxNzMxNwJfNQQNX3RyaWdnZXJQcmljZQgFDSR0MDE3MDk4MTczMTcCXzYEC19hbW91bnRVc2RuCAUNJHQwMTcwOTgxNzMxNwJfNwQFX3NpZGUIBQ0kdDAxNzA5ODE3MzE3Al84BAhfcmVmTGluawgFDSR0MDE3MDk4MTczMTcCXzkEC19wb3NpdGlvbklkCAUNJHQwMTcwOTgxNzMxNwNfMTAEC19saW1pdFByaWNlCAUNJHQwMTcwOTgxNzMxNwNfMTEEB2NsZWFuVXAJAPwHBAUEdGhpcwISY2xlYW5VcFN0YWxlT3JkZXJzCQDMCAIFBF9hbW0JAMwIAgUHX3RyYWRlcgUDbmlsBQNuaWwDCQAAAgUHY2xlYW5VcAUHY2xlYW5VcAMDCQEBIQEJAQtpbml0aWFsaXplZAAGCQEBIQEJAQdpc1ZhbGlkAQUIX29yZGVySWQJAAIBAh9JbnZhbGlkIGV4ZWN1dGVPcmRlciBwYXJhbWV0ZXJzBAxwb3NpdGlvblNpemUJAQ9nZXRQb3NpdGlvblNpemUCBQRfYW1tBQdfdHJhZGVyBBFjdXJyZW50UG9zaXRpb25JZAMJAQIhPQIFDHBvc2l0aW9uU2l6ZQAACQENZ2V0UG9zaXRpb25JZAIFBF9hbW0FB190cmFkZXIAAAQNJHQwMTc3MjEyMTU0MgMJAAACBQVfdHlwZQUEU1RPUAQSX3Bvc2l0aW9uRGlyZWN0aW9uAwkAZgIFDHBvc2l0aW9uU2l6ZQAABQRMT05HAwkAZgIAAAUMcG9zaXRpb25TaXplBQVTSE9SVAkAAgECLENhbiBub3QgZXhlY3V0ZSBTVE9QIG9yZGVyOiBubyBvcGVuIHBvc2l0aW9uBAttYXJrZXRQcmljZQkBDmdldE1hcmtldFByaWNlAQUEX2FtbQQMaXNFeGVjdXRhYmxlAwkAAAIFBV9zaWRlBRJfcG9zaXRpb25EaXJlY3Rpb24JAAIBAidDYW4gbm90IGV4ZWN1dGUgU1RPUCBvcmRlcjogcmVkdWNlIG9ubHkDCQECIT0CBRFjdXJyZW50UG9zaXRpb25JZAULX3Bvc2l0aW9uSWQJAAIBAitDYW4gbm90IGV4ZWN1dGUgU1RPUCBvcmRlcjogcG9zaXRpb24gY2xvc2VkAwkAAAIFEl9wb3NpdGlvbkRpcmVjdGlvbgUETE9ORwkAZwIFDV90cmlnZ2VyUHJpY2UFC21hcmtldFByaWNlCQBnAgULbWFya2V0UHJpY2UFDV90cmlnZ2VyUHJpY2UDBQxpc0V4ZWN1dGFibGUJAJUKAwINY2xvc2VQb3NpdGlvbgkAzAgCCQEEbWludgIFCV9hbW91bnRJbgkBA2FicwEFDHBvc2l0aW9uU2l6ZQkAzAgCCQEEbXVsZAIFC19saW1pdFByaWNlCQEDYWJzAQUMcG9zaXRpb25TaXplBQNuaWwFA25pbAkAAgECMUNhbiBub3QgZXhlY3V0ZSBTVE9QIG9yZGVyOiB0cmlnZ2VyUHJpY2UgbWlzbWF0Y2gDCQAAAgUFX3R5cGUFBFRBS0UEEl9wb3NpdGlvbkRpcmVjdGlvbgMJAGYCBQxwb3NpdGlvblNpemUAAAUETE9ORwMJAGYCAAAFDHBvc2l0aW9uU2l6ZQUFU0hPUlQJAAIBAixDYW4gbm90IGV4ZWN1dGUgU1RPUCBvcmRlcjogbm8gb3BlbiBwb3NpdGlvbgQLbWFya2V0UHJpY2UJAQ5nZXRNYXJrZXRQcmljZQEFBF9hbW0EDGlzRXhlY3V0YWJsZQMJAAACBQVfc2lkZQUSX3Bvc2l0aW9uRGlyZWN0aW9uCQACAQInQ2FuIG5vdCBleGVjdXRlIFRBS0Ugb3JkZXI6IHJlZHVjZSBvbmx5AwkBAiE9AgURY3VycmVudFBvc2l0aW9uSWQFC19wb3NpdGlvbklkCQACAQkArAICCQCsAgIJAKwCAgIsQ2FuIG5vdCBleGVjdXRlIFRBS0Ugb3JkZXI6IHBvc2l0aW9uIGNsb3NlZCAJAKQDAQURY3VycmVudFBvc2l0aW9uSWQCAiE9CQCkAwEFC19wb3NpdGlvbklkAwkAAAIFEl9wb3NpdGlvbkRpcmVjdGlvbgUETE9ORwkAZwIFC21hcmtldFByaWNlBQ1fdHJpZ2dlclByaWNlCQBnAgUNX3RyaWdnZXJQcmljZQULbWFya2V0UHJpY2UDBQxpc0V4ZWN1dGFibGUJAJUKAwINY2xvc2VQb3NpdGlvbgkAzAgCCQEEbWludgIFCV9hbW91bnRJbgkBA2FicwEFDHBvc2l0aW9uU2l6ZQkAzAgCCQEEbXVsZAIFC19saW1pdFByaWNlCQEDYWJzAQUMcG9zaXRpb25TaXplBQNuaWwFA25pbAkAAgECMUNhbiBub3QgZXhlY3V0ZSBUQUtFIG9yZGVyOiB0cmlnZ2VyUHJpY2UgbWlzbWF0Y2gDCQAAAgUFX3R5cGUFBUxJTUlUBAttYXJrZXRQcmljZQkBDmdldE1hcmtldFByaWNlAQUEX2FtbQQGc3ByZWFkAwkAAAIFC19saW1pdFByaWNlAAAJAQlnZXRTcHJlYWQBBQ1fdHJpZ2dlclByaWNlCQEDYWJzAQkAZQIFDV90cmlnZ2VyUHJpY2UFC19saW1pdFByaWNlBAxpc0V4ZWN1dGFibGUDCQBnAgULbWFya2V0UHJpY2UJAGUCBQ1fdHJpZ2dlclByaWNlBQZzcHJlYWQJAGcCCQBkAgUNX3RyaWdnZXJQcmljZQUGc3ByZWFkBQttYXJrZXRQcmljZQcDBQxpc0V4ZWN1dGFibGUEEl9wb3NpdGlvbkRpcmVjdGlvbgMJAGYCBQxwb3NpdGlvblNpemUAAAUETE9ORwMJAGYCAAAFDHBvc2l0aW9uU2l6ZQUFU0hPUlQA////////////AQQJZGlyZWN0aW9uAwkAAAIFDHBvc2l0aW9uU2l6ZQAABQhJTkNSRUFTRQMJAAACBRJfcG9zaXRpb25EaXJlY3Rpb24FBV9zaWRlBQhJTkNSRUFTRQUIREVDUkVBU0UDCQAAAgUJZGlyZWN0aW9uBQhJTkNSRUFTRQQPYW1vdW50SW5XaXRoRmVlCQBlAgULX2Ftb3VudFVzZG4JAQRtdWxkAgULX2Ftb3VudFVzZG4JAQZnZXRGZWUCBQRfYW1tBQdfdHJhZGVyCQCVCgMCEGluY3JlYXNlUG9zaXRpb24JAMwIAgUFX3NpZGUJAMwIAgUJX2xldmVyYWdlCQDMCAIDCQAAAgULX2xpbWl0UHJpY2UAAAAACQEEZGl2ZAIFD2Ftb3VudEluV2l0aEZlZQULX2xpbWl0UHJpY2UJAMwIAgUIX3JlZkxpbmsFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBCnF1b3RlQXNzZXQABQtfYW1vdW50VXNkbgUDbmlsCQCVCgMCDWNsb3NlUG9zaXRpb24JAMwIAgUJX2Ftb3VudEluCQDMCAIJAQRtdWxkAgUJX2Ftb3VudEluBQtfbGltaXRQcmljZQUDbmlsBQNuaWwJAAIBAjJDYW4gbm90IGV4ZWN1dGUgTElNSVQgb3JkZXI6IHRyaWdnZXJQcmljZSBtaXNtYXRjaAkAAgEJAKwCAgIUSW52YWxpZCBvcmRlciB0eXBlOiAJAKQDAQUFX3R5cGUEBm1ldGhvZAgFDSR0MDE3NzIxMjE1NDICXzEEBGFyZ3MIBQ0kdDAxNzcyMTIxNTQyAl8yBAhwYXltZW50cwgFDSR0MDE3NzIxMjE1NDICXzMECHdpdGhkcmF3AwkAAAIJAJADAQUIcGF5bWVudHMAAQQHdW5zdGFrZQkA/AcECQEObWFuYWdlckFkZHJlc3MAAgh3aXRoZHJhdwkAzAgCCQDYBAEJAQpxdW90ZUFzc2V0AAkAzAgCCAkAkQMCBQhwYXltZW50cwAABmFtb3VudAUDbmlsBQNuaWwDCQAAAgUHdW5zdGFrZQUHdW5zdGFrZQUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQNuaWwDCQAAAgUId2l0aGRyYXcFCHdpdGhkcmF3BAxkb1NldENvbnRleHQJAPwHBAUEdGhpcwIKc2V0Q29udGV4dAkAzAgCBQdfdHJhZGVyBQNuaWwFA25pbAMJAAACBQxkb1NldENvbnRleHQFDGRvU2V0Q29udGV4dAQPZG9DbG9zZVBvc2l0aW9uCQD8BwQJARFAZXh0ck5hdGl2ZSgxMDYyKQEFBF9hbW0FBm1ldGhvZAUEYXJncwUIcGF5bWVudHMDCQAAAgUPZG9DbG9zZVBvc2l0aW9uBQ9kb0Nsb3NlUG9zaXRpb24EDmRvUmVzZXRDb250ZXh0CQD8BwQFBHRoaXMCDHJlc2V0Q29udGV4dAUDbmlsBQNuaWwDCQAAAgUOZG9SZXNldENvbnRleHQFDmRvUmVzZXRDb250ZXh0BBNuZXdUcmFkZXJPcmRlckNvdW50CQBlAgkBE2dldFRyYWRlck9yZGVyQ291bnQCBQRfYW1tBQdfdHJhZGVyAAEJAM4IAgkAzggCCQEWdXBkYXRlVHJhZGVyT3JkZXJDb3VudAMFBF9hbW0FB190cmFkZXIFE25ld1RyYWRlck9yZGVyQ291bnQJARBhZGRSZW1vdmVPcmRlcklkBAUIX29yZGVySWQFBF9hbW0FB190cmFkZXIHCQEQbWFya0V4ZWN1dGVPcmRlcgEFCF9vcmRlcklkCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBFHZpZXdfY2FuRXhlY3V0ZU9yZGVyAQhfb3JkZXJJZAQBcwkA/AcEBQR0aGlzAgxleGVjdXRlT3JkZXIJAMwIAgUIX29yZGVySWQFA25pbAUDbmlsAwkAAAIFAXMFAXMJAAIBAgdTdWNjZXNzCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQJ0eAEGdmVyaWZ5AAkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAkBDmFkbWluUHVibGljS2V5ABy9SNs=", "height": 2377687, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: Fj8LyeAxMh3HyxXSCJcfdzuxbkP34QExpoCxpuGYvYrU Next: Etj6dUa2n6myFoCEbpYbRn5tSEgTQfA1DFDKs8ejWgs Diff:
OldNewDifferences
236236 @Callable(aZ)
237237 func cleanUpStaleOrders (P,Q) = {
238238 let ba = ac(P, Q)
239- func bb (bc,L) = {
240- let bd = valueOrErrorMessage(parseInt(L), "Invalid order id")
241- let be = ae(bd)
242- let bf = be._1
243- let bg = be._2
244- let bh = be._3
245- let bi = be._4
246- let aH = be._5
247- let bj = be._6
248- let bk = be._7
249- let bl = be._8
250- let bm = be._9
251- let aM = be._10
252- let bn = be._11
253- let bo = ay(P, Q)
254- let bp = if ((bo != 0))
239+ let bb = aa(P, Q)
240+ func bc (bd,L) = {
241+ let be = valueOrErrorMessage(parseInt(L), "Invalid order id")
242+ let bf = ae(be)
243+ let bg = bf._1
244+ let bh = bf._2
245+ let bi = bf._3
246+ let bj = bf._4
247+ let aH = bf._5
248+ let bk = bf._6
249+ let bl = bf._7
250+ let bm = bf._8
251+ let bn = bf._9
252+ let aM = bf._10
253+ let bo = bf._11
254+ let bp = ay(P, Q)
255+ let bq = if ((bp != 0))
255256 then aA(P, Q)
256257 else 0
257258 if (if (if ((aH == q))
258259 then true
259260 else (aH == r))
260- then (bp != aM)
261+ then (bq != aM)
261262 else false)
262263 then {
263- let bq = (aY(bd) ++ aO(bd, P, Q, false))
264- (bc ++ bq)
264+ let br = (aY(be) ++ aO(be, P, Q, false))
265+ $Tuple2((bd._1 + 1), (bd._2 ++ br))
265266 }
266- else bc
267+ else bd
267268 }
268269
269- let br = ba
270- let bs = size(br)
271- let bt = nil
272- func bu (bv,bw) = if ((bw >= bs))
273- then bv
274- else bb(bv, br[bw])
270+ let bs = {
271+ let bt = ba
272+ let bu = size(bt)
273+ let bv = $Tuple2(0, nil)
274+ func bw (bx,by) = if ((by >= bu))
275+ then bx
276+ else bc(bx, bt[by])
275277
276- func bx (bv,bw) = if ((bw >= bs))
277- then bv
278- else throw("List size exceeds 5")
278+ func bz (bx,by) = if ((by >= bu))
279+ then bx
280+ else throw("List size exceeds 5")
279281
280- bx(bu(bu(bu(bu(bu(bt, 0), 1), 2), 3), 4), 5)
282+ bz(bw(bw(bw(bw(bw(bv, 0), 1), 2), 3), 4), 5)
283+ }
284+ (bs._2 ++ aT(P, Q, (bb - bs._1)))
281285 }
282286
283287
284288
285289 @Callable(aZ)
286-func setContext (by) = if ((aZ.caller != this))
290+func setContext (bA) = if ((aZ.caller != this))
287291 then throw("Only self-call")
288- else [StringEntry(o, by)]
292+ else [StringEntry(o, bA)]
289293
290294
291295
297301
298302
299303 @Callable(aZ)
300-func initialize (bz) = if (X())
304+func initialize (bB) = if (X())
301305 then throw("Already initialized")
302- else [StringEntry(a, bz), BooleanEntry(p, true)]
306+ else [StringEntry(a, bB), BooleanEntry(p, true)]
303307
304308
305309
306310 @Callable(aZ)
307311 func createOrder (P,aH,aI,aN,aF,aG,aK,aL) = {
308312 let Q = toString(aZ.caller)
309- let bA = invoke(this, "cleanUpStaleOrders", [P, Q], nil)
310- if ((bA == bA))
313+ let bC = invoke(this, "cleanUpStaleOrders", [P, Q], nil)
314+ if ((bC == bC))
311315 then if ((size(aZ.payments) > 1))
312316 then throw("Invalid createOrder parameters: invalid payment count")
313317 else {
314- let bB = if ((size(aZ.payments) == 1))
318+ let bD = if ((size(aZ.payments) == 1))
315319 then $Tuple2(toBase58String(valueOrErrorMessage(aZ.payments[0].assetId, "Invalid asset id")), aZ.payments[0].amount)
316320 else $Tuple2("", 0)
317- let bC = bB._1
318- let bD = bB._2
319- let bE = invoke(this, "internalCreateOrder", [Q, P, aH, aI, aN, aF, aG, aK, aL, bC, bD], nil)
320- if ((bE == bE))
321+ let bE = bD._1
322+ let bF = bD._2
323+ let bG = invoke(this, "internalCreateOrder", [Q, P, aH, aI, aN, aF, aG, aK, aL, bE, bF], nil)
324+ if ((bG == bG))
321325 then nil
322326 else throw("Strict value is not equal to itself.")
323327 }
327331
328332
329333 @Callable(aZ)
330-func increasePositionWithStopLoss (P,bF,aG,bG,aL,bH,bI,bJ,bK) = {
334+func increasePositionWithStopLoss (P,bH,aG,bI,aL,bJ,bK,bL,bM) = {
331335 let Q = toString(aZ.caller)
332- let bA = invoke(this, "cleanUpStaleOrders", [P, Q], nil)
333- if ((bA == bA))
336+ let bC = invoke(this, "cleanUpStaleOrders", [P, Q], nil)
337+ if ((bC == bC))
334338 then if (if (!(X()))
335339 then true
336340 else !(V(P)))
337341 then throw("Invalid increasePositionWithStopLoss parameters")
338342 else {
339- let bo = ay(P, Q)
340- if ((bo != 0))
343+ let bp = ay(P, Q)
344+ if ((bp != 0))
341345 then throw("Invalid increasePositionWithStopLoss parameters: only new position")
342346 else {
343- let bL = invoke(this, "setContext", [Q], nil)
344- if ((bL == bL))
347+ let bN = invoke(this, "setContext", [Q], nil)
348+ if ((bN == bN))
345349 then {
346- let bM = invoke(addressFromStringValue(P), "increasePosition", [bF, aG, bG, aL], aZ.payments)
347- if ((bM == bM))
350+ let bO = invoke(addressFromStringValue(P), "increasePosition", [bH, aG, bI, aL], aZ.payments)
351+ if ((bO == bO))
348352 then {
349- let bN = invoke(this, "resetContext", nil, nil)
350- if ((bN == bN))
353+ let bP = invoke(this, "resetContext", nil, nil)
354+ if ((bP == bP))
351355 then {
352- let bO = ay(P, Q)
353- if ((bO == bO))
356+ let bQ = ay(P, Q)
357+ if ((bQ == bQ))
354358 then {
355- let aj = B(bO)
356- let bP = if ((0 > bO))
359+ let aj = B(bQ)
360+ let bR = if ((0 > bQ))
357361 then t
358362 else u
359- let bQ = if ((bH > 0))
363+ let bS = if ((bJ > 0))
360364 then {
361- let bQ = invoke(this, "internalCreateOrder", [Q, P, q, bH, bI, aj, 0, bP, aL, "", 0], nil)
362- if ((bQ == bQ))
365+ let bS = invoke(this, "internalCreateOrder", [Q, P, q, bJ, bK, aj, 0, bR, aL, "", 0], nil)
366+ if ((bS == bS))
363367 then nil
364368 else throw("Strict value is not equal to itself.")
365369 }
366370 else nil
367- if ((bQ == bQ))
371+ if ((bS == bS))
368372 then {
369- let bR = if ((bJ > 0))
373+ let bT = if ((bL > 0))
370374 then {
371- let bR = invoke(this, "internalCreateOrder", [Q, P, r, bJ, bK, aj, 0, bP, aL, "", 0], nil)
372- if ((bR == bR))
375+ let bT = invoke(this, "internalCreateOrder", [Q, P, r, bL, bM, aj, 0, bR, aL, "", 0], nil)
376+ if ((bT == bT))
373377 then nil
374378 else throw("Strict value is not equal to itself.")
375379 }
376380 else nil
377- if ((bR == bR))
381+ if ((bT == bT))
378382 then nil
379383 else throw("Strict value is not equal to itself.")
380384 }
395399
396400
397401 @Callable(aZ)
398-func internalCreateOrder (Q,P,aH,aI,aN,aF,aG,aK,aL,bS,bT) = if (if (if (if (if (if (if (if (if (!(X()))
402+func internalCreateOrder (Q,P,aH,aI,aN,aF,aG,aK,aL,bU,bV) = if (if (if (if (if (if (if (if (if (!(X()))
399403 then true
400404 else !(V(P)))
401405 then true
420424 else !((aZ.caller == this)))
421425 then throw("Invalid createOrder parameters")
422426 else {
423- let bU = (Z() + 1)
424- let bV = (aa(P, Q) + 1)
425- let bo = ay(P, Q)
426- let bF = if (if (if ((bo == 0))
427+ let bW = (Z() + 1)
428+ let bX = (aa(P, Q) + 1)
429+ let bp = ay(P, Q)
430+ let bH = if (if (if ((bp == 0))
427431 then true
428- else if ((bo > 0))
432+ else if ((bp > 0))
429433 then (aK == t)
430434 else false)
431435 then true
432- else if ((0 > bo))
436+ else if ((0 > bp))
433437 then (aK == u)
434438 else false)
435439 then v
436440 else w
437- if (if ((bo == 0))
441+ if (if ((bp == 0))
438442 then if ((aH == q))
439443 then true
440444 else (aH == r)
441445 else false)
442446 then throw("Can not create STOP/TAKE order: no position")
443447 else {
444- let bW = if ((bF == v))
445- then if (if ((bS != toBase58String(T())))
448+ let bY = if ((bH == v))
449+ then if (if ((bU != toBase58String(T())))
446450 then true
447- else (bT != aF))
451+ else (bV != aF))
448452 then throw("Invalid createLimitOrder parameters: invalid payment")
449453 else {
450- let bX = invoke(U(), "deposit", nil, [AttachedPayment(T(), bT)])
451- if ((bX == bX))
452- then bT
454+ let bZ = invoke(U(), "deposit", nil, [AttachedPayment(T(), bV)])
455+ if ((bZ == bZ))
456+ then bV
453457 else throw("Strict value is not equal to itself.")
454458 }
455459 else 0
456- if ((bW == bW))
460+ if ((bY == bY))
457461 then {
458- let aq = if ((bo != 0))
462+ let aq = if ((bp != 0))
459463 then aA(P, Q)
460464 else 0
461- if ((bV > x))
465+ if ((bX > x))
462466 then throw("Invalid createLimitOrder parameters: order count")
463- else (((aE(bU, P, Q, aF, aG, aH, aI, bW, aK, aL, aq, aN) ++ aO(bU, P, Q, true)) ++ aT(P, Q, bV)) ++ aV(bU))
467+ else (((aE(bW, P, Q, aF, aG, aH, aI, bY, aK, aL, aq, aN) ++ aO(bW, P, Q, true)) ++ aT(P, Q, bX)) ++ aV(bW))
464468 }
465469 else throw("Strict value is not equal to itself.")
466470 }
470474
471475 @Callable(aZ)
472476 func cancelOrder (L) = {
473- let bY = ae(L)
474- let P = bY._1
475- let Q = bY._2
476- let aF = bY._3
477- let aG = bY._4
478- let aH = bY._5
479- let aI = bY._6
480- let bZ = bY._7
481- let aK = bY._8
482- let aL = bY._9
483- let aM = bY._10
484- let aN = bY._11
477+ let ca = ae(L)
478+ let P = ca._1
479+ let Q = ca._2
480+ let aF = ca._3
481+ let aG = ca._4
482+ let aH = ca._5
483+ let aI = ca._6
484+ let cb = ca._7
485+ let aK = ca._8
486+ let aL = ca._9
487+ let aM = ca._10
488+ let aN = ca._11
485489 if (if (if (!(X()))
486490 then true
487491 else !(Y(L)))
489493 else !((toString(aZ.caller) == Q)))
490494 then throw("Invalid cancelOrder parameters")
491495 else {
492- let bA = invoke(this, "cleanUpStaleOrders", [P, Q], nil)
493- if ((bA == bA))
496+ let bC = invoke(this, "cleanUpStaleOrders", [P, Q], nil)
497+ if ((bC == bC))
494498 then {
495- let bV = (aa(P, Q) - 1)
496- let ca = if ((bZ > 0))
499+ let bX = (aa(P, Q) - 1)
500+ let cc = if ((cb > 0))
497501 then {
498- let cb = invoke(U(), "withdraw", [toBase58String(T()), bZ], nil)
499- if ((cb == cb))
502+ let cd = invoke(U(), "withdraw", [toBase58String(T()), cb], nil)
503+ if ((cd == cd))
500504 then nil
501505 else throw("Strict value is not equal to itself.")
502506 }
503507 else nil
504- if ((ca == ca))
505- then (((aY(L) ++ aO(L, P, Q, false)) ++ aT(P, Q, bV)) ++ (if ((bZ > 0))
506- then [ScriptTransfer(aZ.caller, bZ, T())]
508+ if ((cc == cc))
509+ then (((aY(L) ++ aO(L, P, Q, false)) ++ aT(P, Q, bX)) ++ (if ((cb > 0))
510+ then [ScriptTransfer(aZ.caller, cb, T())]
507511 else nil))
508512 else throw("Strict value is not equal to itself.")
509513 }
515519
516520 @Callable(aZ)
517521 func executeOrder (L) = {
518- let cc = ae(L)
519- let P = cc._1
520- let Q = cc._2
521- let aF = cc._3
522- let aG = cc._4
523- let aH = cc._5
524- let aI = cc._6
525- let bZ = cc._7
526- let aK = cc._8
527- let aL = cc._9
528- let aM = cc._10
529- let aN = cc._11
530- let bA = invoke(this, "cleanUpStaleOrders", [P, Q], nil)
531- if ((bA == bA))
522+ let ce = ae(L)
523+ let P = ce._1
524+ let Q = ce._2
525+ let aF = ce._3
526+ let aG = ce._4
527+ let aH = ce._5
528+ let aI = ce._6
529+ let cb = ce._7
530+ let aK = ce._8
531+ let aL = ce._9
532+ let aM = ce._10
533+ let aN = ce._11
534+ let bC = invoke(this, "cleanUpStaleOrders", [P, Q], nil)
535+ if ((bC == bC))
532536 then if (if (!(X()))
533537 then true
534538 else !(Y(L)))
535539 then throw("Invalid executeOrder parameters")
536540 else {
537- let bo = ay(P, Q)
538- let bp = if ((bo != 0))
541+ let bp = ay(P, Q)
542+ let bq = if ((bp != 0))
539543 then aA(P, Q)
540544 else 0
541- let cd = if ((aH == q))
545+ let cf = if ((aH == q))
542546 then {
543- let ce = if ((bo > 0))
547+ let cg = if ((bp > 0))
544548 then t
545- else if ((0 > bo))
549+ else if ((0 > bp))
546550 then u
547551 else throw("Can not execute STOP order: no open position")
548- let cf = as(P)
549- let cg = if ((aK == ce))
552+ let ch = as(P)
553+ let ci = if ((aK == cg))
550554 then throw("Can not execute STOP order: reduce only")
551- else if ((bp != aM))
555+ else if ((bq != aM))
552556 then throw("Can not execute STOP order: position closed")
553- else if ((ce == t))
554- then (aI >= cf)
555- else (cf >= aI)
556- if (cg)
557- then $Tuple3("closePosition", [G(aF, B(bo)), F(aN, B(bo))], nil)
557+ else if ((cg == t))
558+ then (aI >= ch)
559+ else (ch >= aI)
560+ if (ci)
561+ then $Tuple3("closePosition", [G(aF, B(bp)), F(aN, B(bp))], nil)
558562 else throw("Can not execute STOP order: triggerPrice mismatch")
559563 }
560564 else if ((aH == r))
561565 then {
562- let ce = if ((bo > 0))
566+ let cg = if ((bp > 0))
563567 then t
564- else if ((0 > bo))
568+ else if ((0 > bp))
565569 then u
566570 else throw("Can not execute STOP order: no open position")
567- let cf = as(P)
568- let cg = if ((aK == ce))
571+ let ch = as(P)
572+ let ci = if ((aK == cg))
569573 then throw("Can not execute TAKE order: reduce only")
570- else if ((bp != aM))
571- then throw(((("Can not execute TAKE order: position closed " + toString(bp)) + "!=") + toString(aM)))
572- else if ((ce == t))
573- then (cf >= aI)
574- else (aI >= cf)
575- if (cg)
576- then $Tuple3("closePosition", [G(aF, B(bo)), F(aN, B(bo))], nil)
574+ else if ((bq != aM))
575+ then throw(((("Can not execute TAKE order: position closed " + toString(bq)) + "!=") + toString(aM)))
576+ else if ((cg == t))
577+ then (ch >= aI)
578+ else (aI >= ch)
579+ if (ci)
580+ then $Tuple3("closePosition", [G(aF, B(bp)), F(aN, B(bp))], nil)
577581 else throw("Can not execute TAKE order: triggerPrice mismatch")
578582 }
579583 else if ((aH == s))
580584 then {
581- let cf = as(P)
582- let ch = if ((aN == 0))
585+ let ch = as(P)
586+ let cj = if ((aN == 0))
583587 then aC(aI)
584588 else B((aI - aN))
585- let cg = if ((cf >= (aI - ch)))
586- then ((aI + ch) >= cf)
589+ let ci = if ((ch >= (aI - cj)))
590+ then ((aI + cj) >= ch)
587591 else false
588- if (cg)
592+ if (ci)
589593 then {
590- let ce = if ((bo > 0))
594+ let cg = if ((bp > 0))
591595 then t
592- else if ((0 > bo))
596+ else if ((0 > bp))
593597 then u
594598 else -1
595- let ci = if ((bo == 0))
599+ let ck = if ((bp == 0))
596600 then v
597- else if ((ce == aK))
601+ else if ((cg == aK))
598602 then v
599603 else w
600- if ((ci == v))
604+ if ((ck == v))
601605 then {
602- let cj = (bZ - F(bZ, ax(P, Q)))
606+ let cl = (cb - F(cb, ax(P, Q)))
603607 $Tuple3("increasePosition", [aK, aG, if ((aN == 0))
604608 then 0
605- else D(cj, aN), aL], [AttachedPayment(T(), bZ)])
609+ else D(cl, aN), aL], [AttachedPayment(T(), cb)])
606610 }
607611 else $Tuple3("closePosition", [aF, F(aF, aN)], nil)
608612 }
609613 else throw("Can not execute LIMIT order: triggerPrice mismatch")
610614 }
611615 else throw(("Invalid order type: " + toString(aH)))
612- let ck = cd._1
613- let cl = cd._2
614- let cm = cd._3
615- let ca = if ((size(cm) == 1))
616+ let cm = cf._1
617+ let cn = cf._2
618+ let co = cf._3
619+ let cc = if ((size(co) == 1))
616620 then {
617- let cb = invoke(U(), "withdraw", [toBase58String(T()), cm[0].amount], nil)
618- if ((cb == cb))
621+ let cd = invoke(U(), "withdraw", [toBase58String(T()), co[0].amount], nil)
622+ if ((cd == cd))
619623 then nil
620624 else throw("Strict value is not equal to itself.")
621625 }
622626 else nil
623- if ((ca == ca))
627+ if ((cc == cc))
624628 then {
625- let bL = invoke(this, "setContext", [Q], nil)
626- if ((bL == bL))
629+ let bN = invoke(this, "setContext", [Q], nil)
630+ if ((bN == bN))
627631 then {
628- let bM = invoke(addressFromStringValue(P), ck, cl, cm)
629- if ((bM == bM))
632+ let bO = invoke(addressFromStringValue(P), cm, cn, co)
633+ if ((bO == bO))
630634 then {
631- let bN = invoke(this, "resetContext", nil, nil)
632- if ((bN == bN))
635+ let bP = invoke(this, "resetContext", nil, nil)
636+ if ((bP == bP))
633637 then {
634- let bV = (aa(P, Q) - 1)
635- ((aT(P, Q, bV) ++ aO(L, P, Q, false)) ++ aX(L))
638+ let bX = (aa(P, Q) - 1)
639+ ((aT(P, Q, bX) ++ aO(L, P, Q, false)) ++ aX(L))
636640 }
637641 else throw("Strict value is not equal to itself.")
638642 }
656660 }
657661
658662
659-@Verifier(cn)
660-func co () = sigVerify(cn.bodyBytes, cn.proofs[0], W())
663+@Verifier(cp)
664+func cq () = sigVerify(cp.bodyBytes, cp.proofs[0], W())
661665
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = "k_coordinatorAddress"
55
66 let b = "k_admin_public_key"
77
88 let c = "k_quote_asset"
99
1010 let d = "k_amm"
1111
1212 let e = "k_manager_address"
1313
1414 let f = "k_positionSequence"
1515
1616 let g = "k_positionSize"
1717
1818 let h = "k_fee"
1919
2020 let i = "k_executedOrders"
2121
2222 let j = "k_canceledOrders"
2323
2424 let k = "k_order"
2525
2626 let l = "k_lastOrderId"
2727
2828 let m = "k_traderOrderCnt"
2929
3030 let n = "k_traderOrderIds"
3131
3232 let o = "k_sender"
3333
3434 let p = "k_initialized"
3535
3636 let q = 1
3737
3838 let r = 2
3939
4040 let s = 3
4141
4242 let t = 1
4343
4444 let u = 2
4545
4646 let v = 1
4747
4848 let w = 2
4949
5050 let x = 5
5151
5252 let y = lastBlock.timestamp
5353
5454 let z = (1 * (((((10 * 10) * 10) * 10) * 10) * 10))
5555
5656 let A = (z / 200)
5757
5858 func B (C) = if ((C > 0))
5959 then C
6060 else -(C)
6161
6262
6363 func D (C,E) = fraction(C, z, E, HALFEVEN)
6464
6565
6666 func F (C,E) = fraction(C, E, z, HALFEVEN)
6767
6868
6969 func G (C,E) = if ((C > E))
7070 then E
7171 else C
7272
7373
7474 func H (I,J) = ((I + "_") + J)
7575
7676
7777 func K (L) = ((i + "_") + toString(L))
7878
7979
8080 func M (L) = ((j + "_") + toString(L))
8181
8282
8383 func N (L) = H(k, toString(L))
8484
8585
8686 func O (P,Q) = ((((m + "_") + P) + "_") + Q)
8787
8888
8989 func R (P,Q) = ((((n + "_") + P) + "_") + Q)
9090
9191
9292 func S () = valueOrErrorMessage(addressFromString(getStringValue(this, a)), "Coordinator not set")
9393
9494
9595 func T () = fromBase58String(getStringValue(S(), c))
9696
9797
9898 func U () = valueOrErrorMessage(addressFromString(getStringValue(S(), e)), "Manager not set")
9999
100100
101101 func V (J) = valueOrElse(getBoolean(S(), H(d, J)), false)
102102
103103
104104 func W () = fromBase58String(getStringValue(S(), b))
105105
106106
107107 func X () = valueOrElse(getBoolean(this, p), false)
108108
109109
110110 func Y (L) = if (valueOrElse(getBoolean(this, K(L)), false))
111111 then throw(("Order already executed: " + toString(L)))
112112 else if (valueOrElse(getBoolean(this, M(L)), false))
113113 then throw(("Order already cancelled: " + toString(L)))
114114 else true
115115
116116
117117 func Z () = valueOrElse(getInteger(this, l), 0)
118118
119119
120120 func aa (P,Q) = {
121121 let ab = O(P, Q)
122122 valueOrElse(getInteger(this, ab), 0)
123123 }
124124
125125
126126 func ac (P,Q) = {
127127 let ab = R(P, Q)
128128 let ad = valueOrElse(getString(this, ab), "")
129129 if ((ad == ""))
130130 then nil
131131 else split(ad, ",")
132132 }
133133
134134
135135 func ae (L) = {
136136 let af = valueOrErrorMessage(getString(this, N(L)), ("Invalid order id: " + toString(L)))
137137 let ag = split(af, ",")
138138 let ah = ag[0]
139139 let ai = ag[1]
140140 let aj = valueOrErrorMessage(parseInt(ag[2]), "Invalid amountIn")
141141 let ak = valueOrErrorMessage(parseInt(ag[3]), "Invalid leverage")
142142 let al = valueOrErrorMessage(parseInt(ag[4]), "Invalid type")
143143 let am = valueOrErrorMessage(parseInt(ag[5]), "Invalid triggerPrice")
144144 let an = valueOrErrorMessage(parseInt(ag[6]), "Invalid paymentUsdn")
145145 let ao = valueOrErrorMessage(parseInt(ag[7]), "Invalid side")
146146 let ap = ag[8]
147147 let aq = valueOrErrorMessage(parseInt(ag[9]), "Invalid positionId")
148148 let ar = valueOrErrorMessage(parseInt(ag[10]), "Invalid limitPrice")
149149 $Tuple11(ah, ai, aj, ak, al, am, an, ao, ap, aq, ar)
150150 }
151151
152152
153153 func as (P) = {
154154 let at = invoke(addressFromStringValue(P), "computeSpotPrice", nil, nil)
155155 if ((at == at))
156156 then {
157157 let au = {
158158 let av = at
159159 if ($isInstanceOf(av, "Int"))
160160 then {
161161 let aw = av
162162 aw
163163 }
164164 else throw("Invalid computeSpotPrice result")
165165 }
166166 value(au)
167167 }
168168 else throw("Strict value is not equal to itself.")
169169 }
170170
171171
172172 func ax (P,Q) = {
173173 let at = invoke(addressFromStringValue(P), "computeFeeForTraderWithArtifact", [Q, ""], nil)
174174 if ((at == at))
175175 then {
176176 let au = {
177177 let av = at
178178 if ($isInstanceOf(av, "(Int, Boolean)"))
179179 then {
180180 let aw = av
181181 aw._1
182182 }
183183 else throw("Invalid computeFeeForTraderWithArtifact result")
184184 }
185185 value(au)
186186 }
187187 else throw("Strict value is not equal to itself.")
188188 }
189189
190190
191191 func ay (P,Q) = {
192192 let ah = addressFromStringValue(P)
193193 let az = H(g, Q)
194194 valueOrElse(getInteger(ah, az), 0)
195195 }
196196
197197
198198 func aA (P,Q) = {
199199 let ah = addressFromStringValue(P)
200200 let aB = H(f, Q)
201201 valueOrElse(getInteger(ah, aB), 0)
202202 }
203203
204204
205205 func aC (aD) = F(aD, A)
206206
207207
208208 func aE (L,P,Q,aF,aG,aH,aI,aJ,aK,aL,aM,aN) = {
209209 let af = makeString([P, Q, toString(aF), toString(aG), toString(aH), toString(aI), toString(aJ), toString(aK), aL, toString(aM), toString(aN)], ",")
210210 [StringEntry(N(L), af)]
211211 }
212212
213213
214214 func aO (L,P,Q,aP) = {
215215 let aQ = ac(P, Q)
216216 let aR = if (aP)
217217 then (aQ :+ toString(L))
218218 else removeByIndex(aQ, valueOrErrorMessage(indexOf(aQ, toString(L)), ("No order with id: " + toString(L))))
219219 let aS = makeString(aR, ",")
220220 [StringEntry(R(P, Q), aS)]
221221 }
222222
223223
224224 func aT (P,Q,aU) = [IntegerEntry(O(P, Q), aU)]
225225
226226
227227 func aV (aW) = [IntegerEntry(l, aW)]
228228
229229
230230 func aX (L) = [BooleanEntry(H(i, toString(L)), true)]
231231
232232
233233 func aY (L) = [BooleanEntry(H(j, toString(L)), true)]
234234
235235
236236 @Callable(aZ)
237237 func cleanUpStaleOrders (P,Q) = {
238238 let ba = ac(P, Q)
239- func bb (bc,L) = {
240- let bd = valueOrErrorMessage(parseInt(L), "Invalid order id")
241- let be = ae(bd)
242- let bf = be._1
243- let bg = be._2
244- let bh = be._3
245- let bi = be._4
246- let aH = be._5
247- let bj = be._6
248- let bk = be._7
249- let bl = be._8
250- let bm = be._9
251- let aM = be._10
252- let bn = be._11
253- let bo = ay(P, Q)
254- let bp = if ((bo != 0))
239+ let bb = aa(P, Q)
240+ func bc (bd,L) = {
241+ let be = valueOrErrorMessage(parseInt(L), "Invalid order id")
242+ let bf = ae(be)
243+ let bg = bf._1
244+ let bh = bf._2
245+ let bi = bf._3
246+ let bj = bf._4
247+ let aH = bf._5
248+ let bk = bf._6
249+ let bl = bf._7
250+ let bm = bf._8
251+ let bn = bf._9
252+ let aM = bf._10
253+ let bo = bf._11
254+ let bp = ay(P, Q)
255+ let bq = if ((bp != 0))
255256 then aA(P, Q)
256257 else 0
257258 if (if (if ((aH == q))
258259 then true
259260 else (aH == r))
260- then (bp != aM)
261+ then (bq != aM)
261262 else false)
262263 then {
263- let bq = (aY(bd) ++ aO(bd, P, Q, false))
264- (bc ++ bq)
264+ let br = (aY(be) ++ aO(be, P, Q, false))
265+ $Tuple2((bd._1 + 1), (bd._2 ++ br))
265266 }
266- else bc
267+ else bd
267268 }
268269
269- let br = ba
270- let bs = size(br)
271- let bt = nil
272- func bu (bv,bw) = if ((bw >= bs))
273- then bv
274- else bb(bv, br[bw])
270+ let bs = {
271+ let bt = ba
272+ let bu = size(bt)
273+ let bv = $Tuple2(0, nil)
274+ func bw (bx,by) = if ((by >= bu))
275+ then bx
276+ else bc(bx, bt[by])
275277
276- func bx (bv,bw) = if ((bw >= bs))
277- then bv
278- else throw("List size exceeds 5")
278+ func bz (bx,by) = if ((by >= bu))
279+ then bx
280+ else throw("List size exceeds 5")
279281
280- bx(bu(bu(bu(bu(bu(bt, 0), 1), 2), 3), 4), 5)
282+ bz(bw(bw(bw(bw(bw(bv, 0), 1), 2), 3), 4), 5)
283+ }
284+ (bs._2 ++ aT(P, Q, (bb - bs._1)))
281285 }
282286
283287
284288
285289 @Callable(aZ)
286-func setContext (by) = if ((aZ.caller != this))
290+func setContext (bA) = if ((aZ.caller != this))
287291 then throw("Only self-call")
288- else [StringEntry(o, by)]
292+ else [StringEntry(o, bA)]
289293
290294
291295
292296 @Callable(aZ)
293297 func resetContext () = if ((aZ.caller != this))
294298 then throw("Only self-call")
295299 else [DeleteEntry(o)]
296300
297301
298302
299303 @Callable(aZ)
300-func initialize (bz) = if (X())
304+func initialize (bB) = if (X())
301305 then throw("Already initialized")
302- else [StringEntry(a, bz), BooleanEntry(p, true)]
306+ else [StringEntry(a, bB), BooleanEntry(p, true)]
303307
304308
305309
306310 @Callable(aZ)
307311 func createOrder (P,aH,aI,aN,aF,aG,aK,aL) = {
308312 let Q = toString(aZ.caller)
309- let bA = invoke(this, "cleanUpStaleOrders", [P, Q], nil)
310- if ((bA == bA))
313+ let bC = invoke(this, "cleanUpStaleOrders", [P, Q], nil)
314+ if ((bC == bC))
311315 then if ((size(aZ.payments) > 1))
312316 then throw("Invalid createOrder parameters: invalid payment count")
313317 else {
314- let bB = if ((size(aZ.payments) == 1))
318+ let bD = if ((size(aZ.payments) == 1))
315319 then $Tuple2(toBase58String(valueOrErrorMessage(aZ.payments[0].assetId, "Invalid asset id")), aZ.payments[0].amount)
316320 else $Tuple2("", 0)
317- let bC = bB._1
318- let bD = bB._2
319- let bE = invoke(this, "internalCreateOrder", [Q, P, aH, aI, aN, aF, aG, aK, aL, bC, bD], nil)
320- if ((bE == bE))
321+ let bE = bD._1
322+ let bF = bD._2
323+ let bG = invoke(this, "internalCreateOrder", [Q, P, aH, aI, aN, aF, aG, aK, aL, bE, bF], nil)
324+ if ((bG == bG))
321325 then nil
322326 else throw("Strict value is not equal to itself.")
323327 }
324328 else throw("Strict value is not equal to itself.")
325329 }
326330
327331
328332
329333 @Callable(aZ)
330-func increasePositionWithStopLoss (P,bF,aG,bG,aL,bH,bI,bJ,bK) = {
334+func increasePositionWithStopLoss (P,bH,aG,bI,aL,bJ,bK,bL,bM) = {
331335 let Q = toString(aZ.caller)
332- let bA = invoke(this, "cleanUpStaleOrders", [P, Q], nil)
333- if ((bA == bA))
336+ let bC = invoke(this, "cleanUpStaleOrders", [P, Q], nil)
337+ if ((bC == bC))
334338 then if (if (!(X()))
335339 then true
336340 else !(V(P)))
337341 then throw("Invalid increasePositionWithStopLoss parameters")
338342 else {
339- let bo = ay(P, Q)
340- if ((bo != 0))
343+ let bp = ay(P, Q)
344+ if ((bp != 0))
341345 then throw("Invalid increasePositionWithStopLoss parameters: only new position")
342346 else {
343- let bL = invoke(this, "setContext", [Q], nil)
344- if ((bL == bL))
347+ let bN = invoke(this, "setContext", [Q], nil)
348+ if ((bN == bN))
345349 then {
346- let bM = invoke(addressFromStringValue(P), "increasePosition", [bF, aG, bG, aL], aZ.payments)
347- if ((bM == bM))
350+ let bO = invoke(addressFromStringValue(P), "increasePosition", [bH, aG, bI, aL], aZ.payments)
351+ if ((bO == bO))
348352 then {
349- let bN = invoke(this, "resetContext", nil, nil)
350- if ((bN == bN))
353+ let bP = invoke(this, "resetContext", nil, nil)
354+ if ((bP == bP))
351355 then {
352- let bO = ay(P, Q)
353- if ((bO == bO))
356+ let bQ = ay(P, Q)
357+ if ((bQ == bQ))
354358 then {
355- let aj = B(bO)
356- let bP = if ((0 > bO))
359+ let aj = B(bQ)
360+ let bR = if ((0 > bQ))
357361 then t
358362 else u
359- let bQ = if ((bH > 0))
363+ let bS = if ((bJ > 0))
360364 then {
361- let bQ = invoke(this, "internalCreateOrder", [Q, P, q, bH, bI, aj, 0, bP, aL, "", 0], nil)
362- if ((bQ == bQ))
365+ let bS = invoke(this, "internalCreateOrder", [Q, P, q, bJ, bK, aj, 0, bR, aL, "", 0], nil)
366+ if ((bS == bS))
363367 then nil
364368 else throw("Strict value is not equal to itself.")
365369 }
366370 else nil
367- if ((bQ == bQ))
371+ if ((bS == bS))
368372 then {
369- let bR = if ((bJ > 0))
373+ let bT = if ((bL > 0))
370374 then {
371- let bR = invoke(this, "internalCreateOrder", [Q, P, r, bJ, bK, aj, 0, bP, aL, "", 0], nil)
372- if ((bR == bR))
375+ let bT = invoke(this, "internalCreateOrder", [Q, P, r, bL, bM, aj, 0, bR, aL, "", 0], nil)
376+ if ((bT == bT))
373377 then nil
374378 else throw("Strict value is not equal to itself.")
375379 }
376380 else nil
377- if ((bR == bR))
381+ if ((bT == bT))
378382 then nil
379383 else throw("Strict value is not equal to itself.")
380384 }
381385 else throw("Strict value is not equal to itself.")
382386 }
383387 else throw("Strict value is not equal to itself.")
384388 }
385389 else throw("Strict value is not equal to itself.")
386390 }
387391 else throw("Strict value is not equal to itself.")
388392 }
389393 else throw("Strict value is not equal to itself.")
390394 }
391395 }
392396 else throw("Strict value is not equal to itself.")
393397 }
394398
395399
396400
397401 @Callable(aZ)
398-func internalCreateOrder (Q,P,aH,aI,aN,aF,aG,aK,aL,bS,bT) = if (if (if (if (if (if (if (if (if (!(X()))
402+func internalCreateOrder (Q,P,aH,aI,aN,aF,aG,aK,aL,bU,bV) = if (if (if (if (if (if (if (if (if (!(X()))
399403 then true
400404 else !(V(P)))
401405 then true
402406 else (0 >= aI))
403407 then true
404408 else (0 > aN))
405409 then true
406410 else (0 >= aF))
407411 then true
408412 else (0 > aG))
409413 then true
410414 else !(if ((aK == t))
411415 then true
412416 else (aK == u)))
413417 then true
414418 else !(if (if ((aH == q))
415419 then true
416420 else (aH == r))
417421 then true
418422 else (aH == s)))
419423 then true
420424 else !((aZ.caller == this)))
421425 then throw("Invalid createOrder parameters")
422426 else {
423- let bU = (Z() + 1)
424- let bV = (aa(P, Q) + 1)
425- let bo = ay(P, Q)
426- let bF = if (if (if ((bo == 0))
427+ let bW = (Z() + 1)
428+ let bX = (aa(P, Q) + 1)
429+ let bp = ay(P, Q)
430+ let bH = if (if (if ((bp == 0))
427431 then true
428- else if ((bo > 0))
432+ else if ((bp > 0))
429433 then (aK == t)
430434 else false)
431435 then true
432- else if ((0 > bo))
436+ else if ((0 > bp))
433437 then (aK == u)
434438 else false)
435439 then v
436440 else w
437- if (if ((bo == 0))
441+ if (if ((bp == 0))
438442 then if ((aH == q))
439443 then true
440444 else (aH == r)
441445 else false)
442446 then throw("Can not create STOP/TAKE order: no position")
443447 else {
444- let bW = if ((bF == v))
445- then if (if ((bS != toBase58String(T())))
448+ let bY = if ((bH == v))
449+ then if (if ((bU != toBase58String(T())))
446450 then true
447- else (bT != aF))
451+ else (bV != aF))
448452 then throw("Invalid createLimitOrder parameters: invalid payment")
449453 else {
450- let bX = invoke(U(), "deposit", nil, [AttachedPayment(T(), bT)])
451- if ((bX == bX))
452- then bT
454+ let bZ = invoke(U(), "deposit", nil, [AttachedPayment(T(), bV)])
455+ if ((bZ == bZ))
456+ then bV
453457 else throw("Strict value is not equal to itself.")
454458 }
455459 else 0
456- if ((bW == bW))
460+ if ((bY == bY))
457461 then {
458- let aq = if ((bo != 0))
462+ let aq = if ((bp != 0))
459463 then aA(P, Q)
460464 else 0
461- if ((bV > x))
465+ if ((bX > x))
462466 then throw("Invalid createLimitOrder parameters: order count")
463- else (((aE(bU, P, Q, aF, aG, aH, aI, bW, aK, aL, aq, aN) ++ aO(bU, P, Q, true)) ++ aT(P, Q, bV)) ++ aV(bU))
467+ else (((aE(bW, P, Q, aF, aG, aH, aI, bY, aK, aL, aq, aN) ++ aO(bW, P, Q, true)) ++ aT(P, Q, bX)) ++ aV(bW))
464468 }
465469 else throw("Strict value is not equal to itself.")
466470 }
467471 }
468472
469473
470474
471475 @Callable(aZ)
472476 func cancelOrder (L) = {
473- let bY = ae(L)
474- let P = bY._1
475- let Q = bY._2
476- let aF = bY._3
477- let aG = bY._4
478- let aH = bY._5
479- let aI = bY._6
480- let bZ = bY._7
481- let aK = bY._8
482- let aL = bY._9
483- let aM = bY._10
484- let aN = bY._11
477+ let ca = ae(L)
478+ let P = ca._1
479+ let Q = ca._2
480+ let aF = ca._3
481+ let aG = ca._4
482+ let aH = ca._5
483+ let aI = ca._6
484+ let cb = ca._7
485+ let aK = ca._8
486+ let aL = ca._9
487+ let aM = ca._10
488+ let aN = ca._11
485489 if (if (if (!(X()))
486490 then true
487491 else !(Y(L)))
488492 then true
489493 else !((toString(aZ.caller) == Q)))
490494 then throw("Invalid cancelOrder parameters")
491495 else {
492- let bA = invoke(this, "cleanUpStaleOrders", [P, Q], nil)
493- if ((bA == bA))
496+ let bC = invoke(this, "cleanUpStaleOrders", [P, Q], nil)
497+ if ((bC == bC))
494498 then {
495- let bV = (aa(P, Q) - 1)
496- let ca = if ((bZ > 0))
499+ let bX = (aa(P, Q) - 1)
500+ let cc = if ((cb > 0))
497501 then {
498- let cb = invoke(U(), "withdraw", [toBase58String(T()), bZ], nil)
499- if ((cb == cb))
502+ let cd = invoke(U(), "withdraw", [toBase58String(T()), cb], nil)
503+ if ((cd == cd))
500504 then nil
501505 else throw("Strict value is not equal to itself.")
502506 }
503507 else nil
504- if ((ca == ca))
505- then (((aY(L) ++ aO(L, P, Q, false)) ++ aT(P, Q, bV)) ++ (if ((bZ > 0))
506- then [ScriptTransfer(aZ.caller, bZ, T())]
508+ if ((cc == cc))
509+ then (((aY(L) ++ aO(L, P, Q, false)) ++ aT(P, Q, bX)) ++ (if ((cb > 0))
510+ then [ScriptTransfer(aZ.caller, cb, T())]
507511 else nil))
508512 else throw("Strict value is not equal to itself.")
509513 }
510514 else throw("Strict value is not equal to itself.")
511515 }
512516 }
513517
514518
515519
516520 @Callable(aZ)
517521 func executeOrder (L) = {
518- let cc = ae(L)
519- let P = cc._1
520- let Q = cc._2
521- let aF = cc._3
522- let aG = cc._4
523- let aH = cc._5
524- let aI = cc._6
525- let bZ = cc._7
526- let aK = cc._8
527- let aL = cc._9
528- let aM = cc._10
529- let aN = cc._11
530- let bA = invoke(this, "cleanUpStaleOrders", [P, Q], nil)
531- if ((bA == bA))
522+ let ce = ae(L)
523+ let P = ce._1
524+ let Q = ce._2
525+ let aF = ce._3
526+ let aG = ce._4
527+ let aH = ce._5
528+ let aI = ce._6
529+ let cb = ce._7
530+ let aK = ce._8
531+ let aL = ce._9
532+ let aM = ce._10
533+ let aN = ce._11
534+ let bC = invoke(this, "cleanUpStaleOrders", [P, Q], nil)
535+ if ((bC == bC))
532536 then if (if (!(X()))
533537 then true
534538 else !(Y(L)))
535539 then throw("Invalid executeOrder parameters")
536540 else {
537- let bo = ay(P, Q)
538- let bp = if ((bo != 0))
541+ let bp = ay(P, Q)
542+ let bq = if ((bp != 0))
539543 then aA(P, Q)
540544 else 0
541- let cd = if ((aH == q))
545+ let cf = if ((aH == q))
542546 then {
543- let ce = if ((bo > 0))
547+ let cg = if ((bp > 0))
544548 then t
545- else if ((0 > bo))
549+ else if ((0 > bp))
546550 then u
547551 else throw("Can not execute STOP order: no open position")
548- let cf = as(P)
549- let cg = if ((aK == ce))
552+ let ch = as(P)
553+ let ci = if ((aK == cg))
550554 then throw("Can not execute STOP order: reduce only")
551- else if ((bp != aM))
555+ else if ((bq != aM))
552556 then throw("Can not execute STOP order: position closed")
553- else if ((ce == t))
554- then (aI >= cf)
555- else (cf >= aI)
556- if (cg)
557- then $Tuple3("closePosition", [G(aF, B(bo)), F(aN, B(bo))], nil)
557+ else if ((cg == t))
558+ then (aI >= ch)
559+ else (ch >= aI)
560+ if (ci)
561+ then $Tuple3("closePosition", [G(aF, B(bp)), F(aN, B(bp))], nil)
558562 else throw("Can not execute STOP order: triggerPrice mismatch")
559563 }
560564 else if ((aH == r))
561565 then {
562- let ce = if ((bo > 0))
566+ let cg = if ((bp > 0))
563567 then t
564- else if ((0 > bo))
568+ else if ((0 > bp))
565569 then u
566570 else throw("Can not execute STOP order: no open position")
567- let cf = as(P)
568- let cg = if ((aK == ce))
571+ let ch = as(P)
572+ let ci = if ((aK == cg))
569573 then throw("Can not execute TAKE order: reduce only")
570- else if ((bp != aM))
571- then throw(((("Can not execute TAKE order: position closed " + toString(bp)) + "!=") + toString(aM)))
572- else if ((ce == t))
573- then (cf >= aI)
574- else (aI >= cf)
575- if (cg)
576- then $Tuple3("closePosition", [G(aF, B(bo)), F(aN, B(bo))], nil)
574+ else if ((bq != aM))
575+ then throw(((("Can not execute TAKE order: position closed " + toString(bq)) + "!=") + toString(aM)))
576+ else if ((cg == t))
577+ then (ch >= aI)
578+ else (aI >= ch)
579+ if (ci)
580+ then $Tuple3("closePosition", [G(aF, B(bp)), F(aN, B(bp))], nil)
577581 else throw("Can not execute TAKE order: triggerPrice mismatch")
578582 }
579583 else if ((aH == s))
580584 then {
581- let cf = as(P)
582- let ch = if ((aN == 0))
585+ let ch = as(P)
586+ let cj = if ((aN == 0))
583587 then aC(aI)
584588 else B((aI - aN))
585- let cg = if ((cf >= (aI - ch)))
586- then ((aI + ch) >= cf)
589+ let ci = if ((ch >= (aI - cj)))
590+ then ((aI + cj) >= ch)
587591 else false
588- if (cg)
592+ if (ci)
589593 then {
590- let ce = if ((bo > 0))
594+ let cg = if ((bp > 0))
591595 then t
592- else if ((0 > bo))
596+ else if ((0 > bp))
593597 then u
594598 else -1
595- let ci = if ((bo == 0))
599+ let ck = if ((bp == 0))
596600 then v
597- else if ((ce == aK))
601+ else if ((cg == aK))
598602 then v
599603 else w
600- if ((ci == v))
604+ if ((ck == v))
601605 then {
602- let cj = (bZ - F(bZ, ax(P, Q)))
606+ let cl = (cb - F(cb, ax(P, Q)))
603607 $Tuple3("increasePosition", [aK, aG, if ((aN == 0))
604608 then 0
605- else D(cj, aN), aL], [AttachedPayment(T(), bZ)])
609+ else D(cl, aN), aL], [AttachedPayment(T(), cb)])
606610 }
607611 else $Tuple3("closePosition", [aF, F(aF, aN)], nil)
608612 }
609613 else throw("Can not execute LIMIT order: triggerPrice mismatch")
610614 }
611615 else throw(("Invalid order type: " + toString(aH)))
612- let ck = cd._1
613- let cl = cd._2
614- let cm = cd._3
615- let ca = if ((size(cm) == 1))
616+ let cm = cf._1
617+ let cn = cf._2
618+ let co = cf._3
619+ let cc = if ((size(co) == 1))
616620 then {
617- let cb = invoke(U(), "withdraw", [toBase58String(T()), cm[0].amount], nil)
618- if ((cb == cb))
621+ let cd = invoke(U(), "withdraw", [toBase58String(T()), co[0].amount], nil)
622+ if ((cd == cd))
619623 then nil
620624 else throw("Strict value is not equal to itself.")
621625 }
622626 else nil
623- if ((ca == ca))
627+ if ((cc == cc))
624628 then {
625- let bL = invoke(this, "setContext", [Q], nil)
626- if ((bL == bL))
629+ let bN = invoke(this, "setContext", [Q], nil)
630+ if ((bN == bN))
627631 then {
628- let bM = invoke(addressFromStringValue(P), ck, cl, cm)
629- if ((bM == bM))
632+ let bO = invoke(addressFromStringValue(P), cm, cn, co)
633+ if ((bO == bO))
630634 then {
631- let bN = invoke(this, "resetContext", nil, nil)
632- if ((bN == bN))
635+ let bP = invoke(this, "resetContext", nil, nil)
636+ if ((bP == bP))
633637 then {
634- let bV = (aa(P, Q) - 1)
635- ((aT(P, Q, bV) ++ aO(L, P, Q, false)) ++ aX(L))
638+ let bX = (aa(P, Q) - 1)
639+ ((aT(P, Q, bX) ++ aO(L, P, Q, false)) ++ aX(L))
636640 }
637641 else throw("Strict value is not equal to itself.")
638642 }
639643 else throw("Strict value is not equal to itself.")
640644 }
641645 else throw("Strict value is not equal to itself.")
642646 }
643647 else throw("Strict value is not equal to itself.")
644648 }
645649 else throw("Strict value is not equal to itself.")
646650 }
647651
648652
649653
650654 @Callable(aZ)
651655 func view_canExecuteOrder (L) = {
652656 let at = invoke(this, "executeOrder", [L], nil)
653657 if ((at == at))
654658 then throw("Success")
655659 else throw("Strict value is not equal to itself.")
656660 }
657661
658662
659-@Verifier(cn)
660-func co () = sigVerify(cn.bodyBytes, cn.proofs[0], W())
663+@Verifier(cp)
664+func cq () = sigVerify(cp.bodyBytes, cp.proofs[0], W())
661665

github/deemru/w8io/169f3d6 
141.30 ms