tx · FkuR2AKnycwJR59r9Mgy8GG3GLAE3iofBYjFjCYi6msH

3N6VKmg8fcTLVZtzTGJTd2gfjmK3VYobQf1:  -0.03700000 Waves

2023.07.27 15:54 [2684285] smart account 3N6VKmg8fcTLVZtzTGJTd2gfjmK3VYobQf1 > SELF 0.00000000 Waves

{ "type": 13, "id": "FkuR2AKnycwJR59r9Mgy8GG3GLAE3iofBYjFjCYi6msH", "fee": 3700000, "feeAssetId": null, "timestamp": 1690462436135, "version": 2, "chainId": 84, "sender": "3N6VKmg8fcTLVZtzTGJTd2gfjmK3VYobQf1", "senderPublicKey": "A2kf7bN5S7rrpJUdubvPFNzkrSEL8uTN8Hc2Sya5cZth", "proofs": [ "3gGeWraoxrQvuFn36wiQxX5YFFEM21VHRTkx42L2mnmjeVEViN8LZHnAsZV8FJc2FBaE8sRj4VJEtWMzrUPL366k" ], "script": "base64:BgKPAQgCEhAKDgEICAEBAQEBAQgBAQEBEgQKAggIEgMKAQgSABIECgIIARIECgIBBBIDCgEIEgMKAQgSEAoOCAEBAQEBAQgBAQEBAQgSDAoKCAEBAQgBAQEBCBIFCgMICAESCAoGCAgBAQEBEg4KDAgIAQEBAQEBCAgBARIDCgEBEgQKAgEIEgQKAgEIEgQKAgEISgAUa19jb29yZGluYXRvckFkZHJlc3MCFGtfY29vcmRpbmF0b3JBZGRyZXNzAA9rX2FkbWluX2FkZHJlc3MCD2tfYWRtaW5fYWRkcmVzcwANa19xdW90ZV9hc3NldAINa19xdW90ZV9hc3NldAAFa19hbW0CBWtfYW1tABFrX21hbmFnZXJfYWRkcmVzcwIRa19tYW5hZ2VyX2FkZHJlc3MAEmtfcG9zaXRpb25TZXF1ZW5jZQISa19wb3NpdGlvblNlcXVlbmNlAA5rX3Bvc2l0aW9uU2l6ZQIOa19wb3NpdGlvblNpemUAEGtfZXhlY3V0ZWRPcmRlcnMCEGtfZXhlY3V0ZWRPcmRlcnMAEGtfY2FuY2VsZWRPcmRlcnMCEGtfY2FuY2VsZWRPcmRlcnMAB2tfb3JkZXICB2tfb3JkZXIADmtfb3JkZXJSZXF1ZXN0AgprX29yZGVyUmVxAA1rX2xhc3RPcmRlcklkAg1rX2xhc3RPcmRlcklkABBrX3RyYWRlck9yZGVyQ250AhBrX3RyYWRlck9yZGVyQ250ABBrX3RyYWRlck9yZGVySWRzAhBrX3RyYWRlck9yZGVySWRzAA1rX3NwcmVhZExpbWl0Ag1rX3NwcmVhZExpbWl0AA9rX29ubHlXaGl0ZWxpc3QCD2tfb25seVdoaXRlbGlzdAATa193aGl0ZWxpc3RFeGVjdXRvcgITa193aGl0ZWxpc3RFeGVjdXRvcgAIa19zZW5kZXICCGtfc2VuZGVyAA1rX2luaXRpYWxpemVkAg1rX2luaXRpYWxpemVkAARTVE9QAAEABFRBS0UAAgAFTElNSVQAAwAGTUFSS0VUAAQABExPTkcAAQAFU0hPUlQAAgAISU5DUkVBU0UAAQAIREVDUkVBU0UAAgAZTUFYX1RSQURFUl9PUkRFUlNfUEVSX0FNTQAKAARUSU1FCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAAMREVDSU1BTF9VTklUCQBoAgABCQBoAgkAaAIJAGgCCQBoAgkAaAIACgAKAAoACgAKAAoBA2FicwECX3gDCQBmAgUCX3gAAAUCX3gJAQEtAQUCX3gBBGRpdmQCAl94Al95CQBuBAUCX3gFDERFQ0lNQUxfVU5JVAUCX3kFCEhBTEZFVkVOAQRtdWxkAgJfeAJfeQkAbgQFAl94BQJfeQUMREVDSU1BTF9VTklUBQhIQUxGRVZFTgEEbWludgICX3gCX3kDCQBmAgUCX3gFAl95BQJfeQUCX3gBDnRvQ29tcG9zaXRlS2V5AgRfa2V5CF9hZGRyZXNzCQCsAgIJAKwCAgUEX2tleQIBXwUIX2FkZHJlc3MBEGV4ZWN1dGVkT3JkZXJLZXkBCF9vcmRlcklkCQCsAgIJAKwCAgUQa19leGVjdXRlZE9yZGVycwIBXwkApAMBBQhfb3JkZXJJZAEQY2FuY2VsZWRPcmRlcktleQEIX29yZGVySWQJAKwCAgkArAICBRBrX2NhbmNlbGVkT3JkZXJzAgFfCQCkAwEFCF9vcmRlcklkAQhvcmRlcktleQEIX29yZGVySWQJAQ50b0NvbXBvc2l0ZUtleQIFB2tfb3JkZXIJAKQDAQUIX29yZGVySWQBD29yZGVyUmVxdWVzdEtleQIIX29yZGVySWQFX3R5cGUJAKwCAgkArAICCQCsAgIJAKwCAgUOa19vcmRlclJlcXVlc3QCAV8JAKQDAQUIX29yZGVySWQCAV8JAKQDAQUFX3R5cGUBE3RyYWRlck9yZGVyQ291bnRLZXkCBF9hbW0HX3RyYWRlcgkArAICCQCsAgIJAKwCAgkArAICBRBrX3RyYWRlck9yZGVyQ250AgFfBQRfYW1tAgFfBQdfdHJhZGVyARF0cmFkZXJPcmRlcklkc0tleQIEX2FtbQdfdHJhZGVyCQCsAgIJAKwCAgkArAICCQCsAgIFEGtfdHJhZGVyT3JkZXJJZHMCAV8FBF9hbW0CAV8FB190cmFkZXIBC2Nvb3JkaW5hdG9yAAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMFFGtfY29vcmRpbmF0b3JBZGRyZXNzAhNDb29yZGluYXRvciBub3Qgc2V0AQxhZG1pbkFkZHJlc3MACQCmCAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQtjb29yZGluYXRvcgAFD2tfYWRtaW5fYWRkcmVzcwEKcXVvdGVBc3NldAAJANkEAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBC2Nvb3JkaW5hdG9yAAUNa19xdW90ZV9hc3NldAEObWFuYWdlckFkZHJlc3MACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBC2Nvb3JkaW5hdG9yAAURa19tYW5hZ2VyX2FkZHJlc3MCD01hbmFnZXIgbm90IHNldAELaXNXaGl0ZWxpc3QBCF9hZGRyZXNzCQELdmFsdWVPckVsc2UCCQCbCAIJAQtjb29yZGluYXRvcgAJAQ50b0NvbXBvc2l0ZUtleQIFBWtfYW1tBQhfYWRkcmVzcwcBC2luaXRpYWxpemVkAAkBC3ZhbHVlT3JFbHNlAgkAmwgCBQR0aGlzBQ1rX2luaXRpYWxpemVkBwEHaXNWYWxpZAEIX29yZGVySWQDCQELdmFsdWVPckVsc2UCCQCbCAIFBHRoaXMJARBleGVjdXRlZE9yZGVyS2V5AQUIX29yZGVySWQHCQACAQkArAICAhhPcmRlciBhbHJlYWR5IGV4ZWN1dGVkOiAJAKQDAQUIX29yZGVySWQDCQELdmFsdWVPckVsc2UCCQCbCAIFBHRoaXMJARBjYW5jZWxlZE9yZGVyS2V5AQUIX29yZGVySWQHCQACAQkArAICAhlPcmRlciBhbHJlYWR5IGNhbmNlbGxlZDogCQCkAwEFCF9vcmRlcklkBgEOZ2V0U3ByZWFkTGltaXQACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUEdGhpcwUNa19zcHJlYWRMaW1pdAIUU3ByZWFkIGxpbWl0IG5vdCBzZXQBDmN1cnJlbnRPcmRlcklkAAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQ1rX2xhc3RPcmRlcklkAAABE2dldFRyYWRlck9yZGVyQ291bnQCBF9hbW0HX3RyYWRlcgQDa2V5CQETdHJhZGVyT3JkZXJDb3VudEtleQIFBF9hbW0FB190cmFkZXIJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUDa2V5AAABEnRyYWRlckFtbU9yZGVyc0lkcwIEX2FtbQdfdHJhZGVyBANrZXkJARF0cmFkZXJPcmRlcklkc0tleQIFBF9hbW0FB190cmFkZXIEA3ZhbAkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzBQNrZXkCAAMJAAACBQN2YWwCAAUDbmlsCQC1CQIFA3ZhbAIBLAEQaGF2ZU9yZGVyUmVxdWVzdAIIX29yZGVySWQFX3R5cGUEA2tleQkBD29yZGVyUmVxdWVzdEtleQIFCF9vcmRlcklkBQVfdHlwZQkBCWlzRGVmaW5lZAEJAJ0IAgUEdGhpcwUDa2V5AQ9nZXRPcmRlclJlcXVlc3QCCF9vcmRlcklkBV90eXBlBANrZXkJAQ9vcmRlclJlcXVlc3RLZXkCBQhfb3JkZXJJZAUFX3R5cGUED29yZGVyUmVxdWVzdFN0cgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMFA2tleQkArAICAhtOb3Qgb3JkZXIgcmVxdWVzdCBmb3Iga2V5OiAFA2tleQQUb3JkZXJSZXF1ZXN0UGFydExpc3QJALUJAgUPb3JkZXJSZXF1ZXN0U3RyAgEsBAdvcmRlcklkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJALYJAQkAkQMCBRRvcmRlclJlcXVlc3RQYXJ0TGlzdAAAAg9JbnZhbGlkIG9yZGVySWQEA2FtbQkAkQMCBRRvcmRlclJlcXVlc3RQYXJ0TGlzdAABBAZ0cmFkZXIJAJEDAgUUb3JkZXJSZXF1ZXN0UGFydExpc3QAAgQEdHlwZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQC2CQEJAJEDAgUUb3JkZXJSZXF1ZXN0UGFydExpc3QAAwIMSW52YWxpZCB0eXBlBAx0cmlnZ2VyUHJpY2UJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAtgkBCQCRAwIFFG9yZGVyUmVxdWVzdFBhcnRMaXN0AAQCFEludmFsaWQgdHJpZ2dlclByaWNlBApsaW1pdFByaWNlCQETdmFsdWVPckVycm9yTWVzc2FnZQIJALYJAQkAkQMCBRRvcmRlclJlcXVlc3RQYXJ0TGlzdAAFAhJJbnZhbGlkIGxpbWl0UHJpY2UJAJgKBgUHb3JkZXJJZAUDYW1tBQZ0cmFkZXIFBHR5cGUFDHRyaWdnZXJQcmljZQUKbGltaXRQcmljZQEIZ2V0T3JkZXIBCF9vcmRlcklkBAhvcmRlclN0cgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMJAQhvcmRlcktleQEFCF9vcmRlcklkCQCsAgICEkludmFsaWQgb3JkZXIgaWQ6IAkApAMBBQhfb3JkZXJJZAQNb3JkZXJQYXJ0TGlzdAkAtQkCBQhvcmRlclN0cgIBLAQDYW1tCQCRAwIFDW9yZGVyUGFydExpc3QAAAQGdHJhZGVyCQCRAwIFDW9yZGVyUGFydExpc3QAAQQIYW1vdW50SW4JARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAtgkBCQCRAwIFDW9yZGVyUGFydExpc3QAAgIQSW52YWxpZCBhbW91bnRJbgQIbGV2ZXJhZ2UJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAtgkBCQCRAwIFDW9yZGVyUGFydExpc3QAAwIQSW52YWxpZCBsZXZlcmFnZQQEdHlwZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQC2CQEJAJEDAgUNb3JkZXJQYXJ0TGlzdAAEAgxJbnZhbGlkIHR5cGUEDHRyaWdnZXJQcmljZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQC2CQEJAJEDAgUNb3JkZXJQYXJ0TGlzdAAFAhRJbnZhbGlkIHRyaWdnZXJQcmljZQQLcGF5bWVudFVzZG4JARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAtgkBCQCRAwIFDW9yZGVyUGFydExpc3QABgITSW52YWxpZCBwYXltZW50VXNkbgQEc2lkZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQC2CQEJAJEDAgUNb3JkZXJQYXJ0TGlzdAAHAgxJbnZhbGlkIHNpZGUEB3JlZkxpbmsJAJEDAgUNb3JkZXJQYXJ0TGlzdAAIBApwb3NpdGlvbklkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJALYJAQkAkQMCBQ1vcmRlclBhcnRMaXN0AAkCEkludmFsaWQgcG9zaXRpb25JZAQKbGltaXRQcmljZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQC2CQEJAJEDAgUNb3JkZXJQYXJ0TGlzdAAKAhJJbnZhbGlkIGxpbWl0UHJpY2UECmV4cGlyYXRpb24DCQBmAgkAkAMBBQ1vcmRlclBhcnRMaXN0AAsJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAtgkBCQCRAwIFDW9yZGVyUGFydExpc3QACwISSW52YWxpZCBleHBpcmF0aW9uAAAEC21hcmtldFByaWNlAwkAZgIJAJADAQUNb3JkZXJQYXJ0TGlzdAAMCQETdmFsdWVPckVycm9yTWVzc2FnZQIJALYJAQkAkQMCBQ1vcmRlclBhcnRMaXN0AAwCGEludmFsaWQgb3JkZXJNYXJrZXRQcmljZQAACQCfCg0FA2FtbQUGdHJhZGVyBQhhbW91bnRJbgUIbGV2ZXJhZ2UFBHR5cGUFDHRyaWdnZXJQcmljZQULcGF5bWVudFVzZG4FBHNpZGUFB3JlZkxpbmsFCnBvc2l0aW9uSWQFCmxpbWl0UHJpY2UFCmV4cGlyYXRpb24FC21hcmtldFByaWNlAQ5nZXRNYXJrZXRQcmljZQEEX2FtbQQBcwkA/AcECQERQGV4dHJOYXRpdmUoMTA2MikBBQRfYW1tAhBjb21wdXRlU3BvdFByaWNlBQNuaWwFA25pbAMJAAACBQFzBQFzBANyZXMEByRtYXRjaDAFAXMDCQABAgUHJG1hdGNoMAIDSW50BAF0BQckbWF0Y2gwBQF0CQACAQIfSW52YWxpZCBjb21wdXRlU3BvdFByaWNlIHJlc3VsdAkBBXZhbHVlAQUDcmVzCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQZnZXRGZWUCBF9hbW0HX3RyYWRlcgQBcwkA/AcECQERQGV4dHJOYXRpdmUoMTA2MikBBQRfYW1tAh9jb21wdXRlRmVlRm9yVHJhZGVyV2l0aEFydGlmYWN0CQDMCAIFB190cmFkZXIJAMwIAgIABQNuaWwFA25pbAMJAAACBQFzBQFzBANyZXMEByRtYXRjaDAFAXMDCQABAgUHJG1hdGNoMAIOKEludCwgQm9vbGVhbikEAXQFByRtYXRjaDAIBQF0Al8xCQACAQIuSW52YWxpZCBjb21wdXRlRmVlRm9yVHJhZGVyV2l0aEFydGlmYWN0IHJlc3VsdAkBBXZhbHVlAQUDcmVzCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuARRnZXRQb3NpdGlvbkRpcmVjdGlvbgIKX29yZGVyU2lkZQpfb3JkZXJUeXBlAwMJAAACBQpfb3JkZXJUeXBlBQRUQUtFBgkAAAIFCl9vcmRlclR5cGUFBFNUT1ADCQAAAgUKX29yZGVyU2lkZQUETE9ORwUFU0hPUlQFBExPTkcFCl9vcmRlclNpZGUBD2dldFBvc2l0aW9uU2l6ZQMEX2FtbQdfdHJhZGVyCl9kaXJlY3Rpb24EA2FtbQkBEUBleHRyTmF0aXZlKDEwNjIpAQUEX2FtbQQLcG9zaXRpb25LZXkJAKwCAgkArAICBQdfdHJhZGVyAgFfCQCkAwEFCl9kaXJlY3Rpb24EB3NpemVLZXkJAQ50b0NvbXBvc2l0ZUtleQIFDmtfcG9zaXRpb25TaXplBQtwb3NpdGlvbktleQkBC3ZhbHVlT3JFbHNlAgkAmggCBQNhbW0FB3NpemVLZXkAAAENZ2V0UG9zaXRpb25JZAMEX2FtbQdfdHJhZGVyCl9kaXJlY3Rpb24EA2FtbQkBEUBleHRyTmF0aXZlKDEwNjIpAQUEX2FtbQQLcG9zaXRpb25LZXkJAKwCAgkArAICBQdfdHJhZGVyAgFfCQCkAwEFCl9kaXJlY3Rpb24EBnNlcUtleQkBDnRvQ29tcG9zaXRlS2V5AgUSa19wb3NpdGlvblNlcXVlbmNlBQtwb3NpdGlvbktleQkBC3ZhbHVlT3JFbHNlAgkAmggCBQNhbW0FBnNlcUtleQAAAQlnZXRTcHJlYWQBBl9wcmljZQkBBG11bGQCBQZfcHJpY2UJAQ5nZXRTcHJlYWRMaW1pdAABGGlzT25seVdoaXRlbGlzdEV4ZWN1dG9ycwAJAQt2YWx1ZU9yRWxzZQIJAJsIAgUEdGhpcwUPa19vbmx5V2hpdGVsaXN0BwETaXNXaGl0ZWxpc3RFeGVjdXRvcgEJX2V4ZWN1dG9yCQELdmFsdWVPckVsc2UCCQCbCAIFBHRoaXMJAQ50b0NvbXBvc2l0ZUtleQIFE2tfd2hpdGVsaXN0RXhlY3V0b3IFCV9leGVjdXRvcgcBCXNhdmVPcmRlcg4IX29yZGVySWQEX2FtbQdfdHJhZGVyCV9hbW91bnRJbglfbGV2ZXJhZ2UFX3R5cGUNX3RyaWdnZXJQcmljZQxfcGF5bWVudFVzZG4FX3NpZGUIX3JlZkxpbmsLX3Bvc2l0aW9uSWQLX2xpbWl0UHJpY2ULX2V4cGlyYXRpb24RX29yZGVyTWFya2V0UHJpY2UECG9yZGVyU3RyCQC5CQIJAMwIAgUEX2FtbQkAzAgCBQdfdHJhZGVyCQDMCAIJAKQDAQUJX2Ftb3VudEluCQDMCAIJAKQDAQUJX2xldmVyYWdlCQDMCAIJAKQDAQUFX3R5cGUJAMwIAgkApAMBBQ1fdHJpZ2dlclByaWNlCQDMCAIJAKQDAQUMX3BheW1lbnRVc2RuCQDMCAIJAKQDAQUFX3NpZGUJAMwIAgUIX3JlZkxpbmsJAMwIAgkApAMBBQtfcG9zaXRpb25JZAkAzAgCCQCkAwEFC19saW1pdFByaWNlCQDMCAIJAKQDAQULX2V4cGlyYXRpb24JAMwIAgkApAMBBRFfb3JkZXJNYXJrZXRQcmljZQUDbmlsAgEsCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQhvcmRlcktleQEFCF9vcmRlcklkBQhvcmRlclN0cgUDbmlsARBzYXZlT3JkZXJSZXF1ZXN0Bghfb3JkZXJJZARfYW1tB190cmFkZXIFX3R5cGUNX3RyaWdnZXJQcmljZQtfbGltaXRQcmljZQQLb3JkZXJSZXFTdHIJALkJAgkAzAgCCQCkAwEFCF9vcmRlcklkCQDMCAIFBF9hbW0JAMwIAgUHX3RyYWRlcgkAzAgCCQCkAwEFBV90eXBlCQDMCAIJAKQDAQUNX3RyaWdnZXJQcmljZQkAzAgCCQCkAwEFC19saW1pdFByaWNlBQNuaWwCASwJAMwIAgkBC1N0cmluZ0VudHJ5AgkBD29yZGVyUmVxdWVzdEtleQIFCF9vcmRlcklkBQVfdHlwZQULb3JkZXJSZXFTdHIFA25pbAEQdXBkYXRlT3JkZXJJZFN0cgMPX29yZGVySWRzTmV3U3RyBF9hbW0HX3RyYWRlcgkAzAgCCQELU3RyaW5nRW50cnkCCQERdHJhZGVyT3JkZXJJZHNLZXkCBQRfYW1tBQdfdHJhZGVyBQ9fb3JkZXJJZHNOZXdTdHIFA25pbAEUYWRkUmVtb3ZlT3JkZXJJZExpc3QFCV9vcmRlcklkcwhfb3JkZXJJZARfYW1tB190cmFkZXIEX2FkZAQLb3JkZXJJZHNOZXcDBQRfYWRkCQDNCAIFCV9vcmRlcklkcwkApAMBBQhfb3JkZXJJZAkA0QgCBQlfb3JkZXJJZHMJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAzwgCBQlfb3JkZXJJZHMJAKQDAQUIX29yZGVySWQJAKwCAgISTm8gb3JkZXIgd2l0aCBpZDogCQCkAwEFCF9vcmRlcklkBQtvcmRlcklkc05ldwEQYWRkUmVtb3ZlT3JkZXJJZAQIX29yZGVySWQEX2FtbQdfdHJhZGVyBF9hZGQECG9yZGVySWRzCQESdHJhZGVyQW1tT3JkZXJzSWRzAgUEX2FtbQUHX3RyYWRlcgQLb3JkZXJJZHNOZXcJARRhZGRSZW1vdmVPcmRlcklkTGlzdAUFCG9yZGVySWRzBQhfb3JkZXJJZAUEX2FtbQUHX3RyYWRlcgUEX2FkZAQOb3JkZXJJZHNOZXdTdHIJALkJAgULb3JkZXJJZHNOZXcCASwJARB1cGRhdGVPcmRlcklkU3RyAwUOb3JkZXJJZHNOZXdTdHIFBF9hbW0FB190cmFkZXIBFnVwZGF0ZVRyYWRlck9yZGVyQ291bnQDBF9hbW0HX3RyYWRlcgZfY291bnQDCQBmAgAABQZfY291bnQJAAIBCQCsAgICFUludmFsaWQgb3JkZXIgY291bnQ6IAkApAMBBQZfY291bnQJAMwIAgkBDEludGVnZXJFbnRyeQIJARN0cmFkZXJPcmRlckNvdW50S2V5AgUEX2FtbQUHX3RyYWRlcgUGX2NvdW50BQNuaWwBEXVwZGF0ZUxhc3RPcmRlcklkAQxfbGFzdE9yZGVySWQJAMwIAgkBDEludGVnZXJFbnRyeQIFDWtfbGFzdE9yZGVySWQFDF9sYXN0T3JkZXJJZAUDbmlsARBtYXJrRXhlY3V0ZU9yZGVyAQhfb3JkZXJJZAkAzAgCCQEMQm9vbGVhbkVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUQa19leGVjdXRlZE9yZGVycwkApAMBBQhfb3JkZXJJZAYFA25pbAEPbWFya0NhbmNlbE9yZGVyAQhfb3JkZXJJZAkAzAgCCQEMQm9vbGVhbkVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUQa19jYW5jZWxlZE9yZGVycwkApAMBBQhfb3JkZXJJZAYFA25pbAEOZ2V0UG9zaXRpb25JZHMCBF9hbW0HX3RyYWRlcgQQbG9uZ1Bvc2l0aW9uU2l6ZQkBD2dldFBvc2l0aW9uU2l6ZQMFBF9hbW0FB190cmFkZXIFBExPTkcEFWN1cnJlbnRMb25nUG9zaXRpb25JZAMJAQIhPQIFEGxvbmdQb3NpdGlvblNpemUAAAkBDWdldFBvc2l0aW9uSWQDBQRfYW1tBQdfdHJhZGVyBQRMT05HAAAEEXNob3J0UG9zaXRpb25TaXplCQEPZ2V0UG9zaXRpb25TaXplAwUEX2FtbQUHX3RyYWRlcgUFU0hPUlQEFmN1cnJlbnRTaG9ydFBvc2l0aW9uSWQDCQECIT0CBRFzaG9ydFBvc2l0aW9uU2l6ZQAACQENZ2V0UG9zaXRpb25JZAMFBF9hbW0FB190cmFkZXIFBVNIT1JUAAAJAMwIAgUVY3VycmVudExvbmdQb3NpdGlvbklkCQDMCAIFFmN1cnJlbnRTaG9ydFBvc2l0aW9uSWQFA25pbAESY2hlY2tWYWxpZEV4ZWN1dG9yAQdfY2FsbGVyAwkBGGlzT25seVdoaXRlbGlzdEV4ZWN1dG9ycwAJARNpc1doaXRlbGlzdEV4ZWN1dG9yAQkApQgBBQdfY2FsbGVyBhEBaQERaW50ZXJuYWxTYXZlT3JkZXIOCF9vcmRlcklkBF9hbW0HX3RyYWRlcglfYW1vdW50SW4JX2xldmVyYWdlBV90eXBlDV90cmlnZ2VyUHJpY2UMX3BheW1lbnRVc2RuBV9zaWRlCF9yZWZMaW5rC19wb3NpdGlvbklkC19saW1pdFByaWNlC19leHBpcmF0aW9uEV9vcmRlck1hcmtldFByaWNlAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIgSW52YWxpZCBzYXZlT3JkZXJJbnRlcm5hbCBwYXJhbXMJAQlzYXZlT3JkZXIOBQhfb3JkZXJJZAUEX2FtbQUHX3RyYWRlcgUJX2Ftb3VudEluBQlfbGV2ZXJhZ2UFBV90eXBlBQ1fdHJpZ2dlclByaWNlBQxfcGF5bWVudFVzZG4FBV9zaWRlBQhfcmVmTGluawULX3Bvc2l0aW9uSWQFC19saW1pdFByaWNlBQtfZXhwaXJhdGlvbgURX29yZGVyTWFya2V0UHJpY2UBaQESY2xlYW5VcFN0YWxlT3JkZXJzAgRfYW1tB190cmFkZXIEBm9yZGVycwkBEnRyYWRlckFtbU9yZGVyc0lkcwIFBF9hbW0FB190cmFkZXIEC3Bvc2l0aW9uSWRzCQEOZ2V0UG9zaXRpb25JZHMCBQRfYW1tBQdfdHJhZGVyCgEKY2xlYW5VcE9uZQIEX2FjYwhfb3JkZXJJZAQKb3JkZXJJZEludAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQC2CQEFCF9vcmRlcklkAhBJbnZhbGlkIG9yZGVyIGlkBA0kdDAxMzExMzEzMzM4CQEIZ2V0T3JkZXIBBQpvcmRlcklkSW50BANfeDEIBQ0kdDAxMzExMzEzMzM4Al8xBANfeDIIBQ0kdDAxMzExMzEzMzM4Al8yBANfeDMIBQ0kdDAxMzExMzEzMzM4Al8zBANfeDQIBQ0kdDAxMzExMzEzMzM4Al80BAVfdHlwZQgFDSR0MDEzMTEzMTMzMzgCXzUEA194NQgFDSR0MDEzMTEzMTMzMzgCXzYEDF9wYXltZW50VXNkbggFDSR0MDEzMTEzMTMzMzgCXzcEA194NggFDSR0MDEzMTEzMTMzMzgCXzgEA194NwgFDSR0MDEzMTEzMTMzMzgCXzkEC19wb3NpdGlvbklkCAUNJHQwMTMxMTMxMzMzOANfMTAEA194OAgFDSR0MDEzMTEzMTMzMzgDXzExBAtfZXhwaXJhdGlvbggFDSR0MDEzMTEzMTMzMzgDXzEyBBpjYW5jZWxUYWtlU3RvcE9mTm9Qb3NpdGlvbgMDAwkAAAIFBV90eXBlBQRTVE9QBgkAAAIFBV90eXBlBQRUQUtFCQECIT0CCQCRAwIFC3Bvc2l0aW9uSWRzAAAFC19wb3NpdGlvbklkBwkBAiE9AgkAkQMCBQtwb3NpdGlvbklkcwABBQtfcG9zaXRpb25JZAcEFGNhbmNlbExpbWl0SWZFeHBpcmVkAwMJAAACBQVfdHlwZQUFTElNSVQGCQAAAgUFX3R5cGUFBk1BUktFVAkAZwIFBFRJTUUFC19leHBpcmF0aW9uBwMDBRpjYW5jZWxUYWtlU3RvcE9mTm9Qb3NpdGlvbgYFFGNhbmNlbExpbWl0SWZFeHBpcmVkBAZjaGFuZ2UJAQ9tYXJrQ2FuY2VsT3JkZXIBBQpvcmRlcklkSW50BAxuZXdPcmRlckxpc3QJARRhZGRSZW1vdmVPcmRlcklkTGlzdAUIBQRfYWNjAl8xBQpvcmRlcklkSW50BQRfYW1tBQdfdHJhZGVyBwQPcGF5bWVudFRvUmV0dXJuAwMJAAACBQVfdHlwZQUFTElNSVQGCQAAAgUFX3R5cGUFBk1BUktFVAUMX3BheW1lbnRVc2RuAAAJAJUKAwUMbmV3T3JkZXJMaXN0CQDOCAIIBQRfYWNjAl8yBQZjaGFuZ2UJAGQCCAUEX2FjYwJfMwUPcGF5bWVudFRvUmV0dXJuBQRfYWNjBA0kdDAxNDA0MDE0MTM1CgACJGwFBm9yZGVycwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJUKAwUGb3JkZXJzBQNuaWwAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEKY2xlYW5VcE9uZQIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgQJbmV3T3JkZXJzCAUNJHQwMTQwNDAxNDEzNQJfMQQNY2FuY2VsQWN0aW9ucwgFDSR0MDE0MDQwMTQxMzUCXzIED3BheW1lbnRUb1JldHVybggFDSR0MDE0MDQwMTQxMzUCXzMECHdpdGhkcmF3AwkAZgIFD3BheW1lbnRUb1JldHVybgAABAd1bnN0YWtlCQD8BwQJAQ5tYW5hZ2VyQWRkcmVzcwACCHdpdGhkcmF3CQDMCAIJANgEAQkBCnF1b3RlQXNzZXQACQDMCAIFD3BheW1lbnRUb1JldHVybgUDbmlsBQNuaWwDCQAAAgUHdW5zdGFrZQUHdW5zdGFrZQUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQNuaWwDCQAAAgUId2l0aGRyYXcFCHdpdGhkcmF3CQDOCAIJAM4IAgkAzggCBQ1jYW5jZWxBY3Rpb25zCQEWdXBkYXRlVHJhZGVyT3JkZXJDb3VudAMFBF9hbW0FB190cmFkZXIJAJADAQUJbmV3T3JkZXJzCQEQdXBkYXRlT3JkZXJJZFN0cgMJALkJAgUJbmV3T3JkZXJzAgEsBQRfYW1tBQdfdHJhZGVyCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEFB190cmFkZXIFD3BheW1lbnRUb1JldHVybgkBCnF1b3RlQXNzZXQABQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEKc2V0Q29udGV4dAEHX3NlbmRlcgMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECDk9ubHkgc2VsZi1jYWxsCQDMCAIJAQtTdHJpbmdFbnRyeQIFCGtfc2VuZGVyBQdfc2VuZGVyBQNuaWwBaQEMcmVzZXRDb250ZXh0AAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECDk9ubHkgc2VsZi1jYWxsCQDMCAIJAQtEZWxldGVFbnRyeQEFCGtfc2VuZGVyBQNuaWwBaQEKaW5pdGlhbGl6ZQIMX2Nvb3JkaW5hdG9yDF9zcHJlYWRMaW1pdAMDAwkBC2luaXRpYWxpemVkAAYDCQBmAgAABQxfc3ByZWFkTGltaXQGCQBmAgUMX3NwcmVhZExpbWl0CQBpAgUMREVDSU1BTF9VTklUAAoGCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAhRVbmFibGUgdG8gaW5pdGlhbGl6ZQkAzAgCCQELU3RyaW5nRW50cnkCBRRrX2Nvb3JkaW5hdG9yQWRkcmVzcwkApQgBCQERQGV4dHJOYXRpdmUoMTA2MikBBQxfY29vcmRpbmF0b3IJAMwIAgkBDEludGVnZXJFbnRyeQIFDWtfc3ByZWFkTGltaXQFDF9zcHJlYWRMaW1pdAkAzAgCCQEMQm9vbGVhbkVudHJ5AgUNa19pbml0aWFsaXplZAYFA25pbAFpAQ5jaGFuZ2VTZXR0aW5ncwIMX3NwcmVhZExpbWl0Dl9vbmx5V2hpdGVsaXN0AwMJAQIhPQIIBQFpBmNhbGxlcgkBDGFkbWluQWRkcmVzcwAGAwkAZgIAAAUMX3NwcmVhZExpbWl0BgkAZgIFDF9zcHJlYWRMaW1pdAkAaQIFDERFQ0lNQUxfVU5JVAAKCQACAQIdSW52YWxpZCBjaGFuZ2VTZXR0aW5ncyBwYXJhbXMJAMwIAgkBDEludGVnZXJFbnRyeQIFDWtfc3ByZWFkTGltaXQFDF9zcHJlYWRMaW1pdAkAzAgCCQEMQm9vbGVhbkVudHJ5AgUPa19vbmx5V2hpdGVsaXN0BQ5fb25seVdoaXRlbGlzdAUDbmlsAWkBDGFkZFdoaXRlbGlzdAEFX2xpc3QDCQECIT0CCAUBaQZjYWxsZXIJAQxhZG1pbkFkZHJlc3MACQACAQIbSW52YWxpZCBhZGRXaGl0ZWxpc3QgcGFyYW1zCgENdG9BZGRyZXNzTGlzdAIEX2FjYwVfYWRkcgQHYWRkcmVzcwkBEUBleHRyTmF0aXZlKDEwNjIpAQUFX2FkZHIDCQAAAgUHYWRkcmVzcwUHYWRkcmVzcwkAzQgCBQRfYWNjCQEMQm9vbGVhbkVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUTa193aGl0ZWxpc3RFeGVjdXRvcgkApQgBBQdhZGRyZXNzBgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgoAAiRsCQC8CQIFBV9saXN0AgEsCgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQ10b0FkZHJlc3NMaXN0AgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAyMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQBaQEPcmVtb3ZlV2hpdGVsaXN0AQVfbGlzdAMJAQIhPQIIBQFpBmNhbGxlcgkBDGFkbWluQWRkcmVzcwAJAAIBAh5JbnZhbGlkIHJlbW92ZVdoaXRlbGlzdCBwYXJhbXMKAQ10b0FkZHJlc3NMaXN0AgRfYWNjBV9hZGRyBAdhZGRyZXNzCQERQGV4dHJOYXRpdmUoMTA2MikBBQVfYWRkcgMJAAACBQdhZGRyZXNzBQdhZGRyZXNzCQDNCAIFBF9hY2MJAQxCb29sZWFuRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBRNrX3doaXRlbGlzdEV4ZWN1dG9yCQClCAEFB2FkZHJlc3MHCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCgACJGwJALwJAgUFX2xpc3QCASwKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBDXRvQWRkcmVzc0xpc3QCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDIwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAFpAQtjcmVhdGVPcmRlcg4EX2FtbQVfdHlwZQ1fdHJpZ2dlclByaWNlC19saW1pdFByaWNlCV9hbW91bnRJbglfbGV2ZXJhZ2UFX3NpZGUIX3JlZkxpbmsRX3N0b3BUcmlnZ2VyUHJpY2UPX3N0b3BMaW1pdFByaWNlEV90YWtlVHJpZ2dlclByaWNlD190YWtlTGltaXRQcmljZQtfZXhwaXJhdGlvbgpfcHJpY2VEYXRhBAdfdHJhZGVyCQClCAEIBQFpBmNhbGxlcgQLdXBkYXRlUHJpY2UJAPwHBAkBEUBleHRyTmF0aXZlKDEwNjIpAQUEX2FtbQIMdXBkYXRlT3JhY2xlCQDMCAIFCl9wcmljZURhdGEFA25pbAUDbmlsAwkAAAIFC3VwZGF0ZVByaWNlBQt1cGRhdGVQcmljZQQHY2xlYW5VcAkA/AcEBQR0aGlzAhJjbGVhblVwU3RhbGVPcmRlcnMJAMwIAgUEX2FtbQkAzAgCBQdfdHJhZGVyBQNuaWwFA25pbAMJAAACBQdjbGVhblVwBQdjbGVhblVwAwkAZgIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECNUludmFsaWQgY3JlYXRlT3JkZXIgcGFyYW1ldGVyczogaW52YWxpZCBwYXltZW50IGNvdW50BA0kdDAxODY0NDE4ODk2AwkAAAIJAJADAQgFAWkIcGF5bWVudHMAAQkAlAoCCQDYBAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAggJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkAhBJbnZhbGlkIGFzc2V0IGlkCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAkAlAoCAgAAAAQOcGF5bWVudEFzc2V0SWQIBQ0kdDAxODY0NDE4ODk2Al8xBA1wYXltZW50QW1vdW50CAUNJHQwMTg2NDQxODg5NgJfMgQGZG9DYWxsCQD8BwQFBHRoaXMCE2ludGVybmFsQ3JlYXRlT3JkZXIJAMwIAgUHX3RyYWRlcgkAzAgCBQRfYW1tCQDMCAIFBV90eXBlCQDMCAIFDV90cmlnZ2VyUHJpY2UJAMwIAgULX2xpbWl0UHJpY2UJAMwIAgUJX2Ftb3VudEluCQDMCAIFCV9sZXZlcmFnZQkAzAgCBQVfc2lkZQkAzAgCBQhfcmVmTGluawkAzAgCBQ5wYXltZW50QXNzZXRJZAkAzAgCBQ1wYXltZW50QW1vdW50CQDMCAIFC19leHBpcmF0aW9uBQNuaWwFA25pbAMJAAACBQZkb0NhbGwFBmRvQ2FsbAQHb3JkZXJJZAQHJG1hdGNoMAUGZG9DYWxsAwkAAQIFByRtYXRjaDACA0ludAQBdAUHJG1hdGNoMAUBdAkAAgECG0ludmFsaWQgSUQgb2YgY3JlYXRlZCBvcmRlcgMDCQAAAgUFX3R5cGUFBUxJTUlUBgkAAAIFBV90eXBlBQZNQVJLRVQECG1ha2VTdG9wAwkAZgIFEV9zdG9wVHJpZ2dlclByaWNlAAAECmRvTWFrZVN0b3AJAPwHBAUEdGhpcwIaaW50ZXJuYWxDcmVhdGVPcmRlclJlcXVlc3QJAMwIAgUHX3RyYWRlcgkAzAgCBQRfYW1tCQDMCAIFB29yZGVySWQJAMwIAgUEU1RPUAkAzAgCBRFfc3RvcFRyaWdnZXJQcmljZQkAzAgCBQ9fc3RvcExpbWl0UHJpY2UFA25pbAUDbmlsAwkAAAIFCmRvTWFrZVN0b3AFCmRvTWFrZVN0b3AFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUDbmlsBAhtYWtlVGFrZQMJAGYCBRFfdGFrZVRyaWdnZXJQcmljZQAABApkb01ha2VUYWtlCQD8BwQFBHRoaXMCGmludGVybmFsQ3JlYXRlT3JkZXJSZXF1ZXN0CQDMCAIFB190cmFkZXIJAMwIAgUEX2FtbQkAzAgCBQdvcmRlcklkCQDMCAIFBFRBS0UJAMwIAgURX3Rha2VUcmlnZ2VyUHJpY2UJAMwIAgUPX3Rha2VMaW1pdFByaWNlBQNuaWwFA25pbAMJAAACBQpkb01ha2VUYWtlBQpkb01ha2VUYWtlBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FA25pbAkAzggCBQhtYWtlU3RvcAUIbWFrZVRha2UFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARxpbmNyZWFzZVBvc2l0aW9uV2l0aFN0b3BMb3NzCgRfYW1tCl9kaXJlY3Rpb24JX2xldmVyYWdlE19taW5CYXNlQXNzZXRBbW91bnQIX3JlZkxpbmsRX3N0b3BUcmlnZ2VyUHJpY2UPX3N0b3BMaW1pdFByaWNlEV90YWtlVHJpZ2dlclByaWNlD190YWtlTGltaXRQcmljZQpfcHJpY2VEYXRhBAdfdHJhZGVyCQClCAEIBQFpBmNhbGxlcgQHY2xlYW5VcAkA/AcEBQR0aGlzAhJjbGVhblVwU3RhbGVPcmRlcnMJAMwIAgUEX2FtbQkAzAgCBQdfdHJhZGVyBQNuaWwFA25pbAMJAAACBQdjbGVhblVwBQdjbGVhblVwAwMJAQEhAQkBC2luaXRpYWxpemVkAAYJAQEhAQkBC2lzV2hpdGVsaXN0AQUEX2FtbQkAAgECL0ludmFsaWQgaW5jcmVhc2VQb3NpdGlvbldpdGhTdG9wTG9zcyBwYXJhbWV0ZXJzBAxwb3NpdGlvblNpemUJAQ9nZXRQb3NpdGlvblNpemUDBQRfYW1tBQdfdHJhZGVyBQpfZGlyZWN0aW9uAwkBAiE9AgUMcG9zaXRpb25TaXplAAAJAAIBAkJJbnZhbGlkIGluY3JlYXNlUG9zaXRpb25XaXRoU3RvcExvc3MgcGFyYW1ldGVyczogb25seSBuZXcgcG9zaXRpb24EDGRvU2V0Q29udGV4dAkA/AcEBQR0aGlzAgpzZXRDb250ZXh0CQDMCAIFB190cmFkZXIFA25pbAUDbmlsAwkAAAIFDGRvU2V0Q29udGV4dAUMZG9TZXRDb250ZXh0BA5kb09wZW5Qb3NpdGlvbgkA/AcECQERQGV4dHJOYXRpdmUoMTA2MikBBQRfYW1tAhBpbmNyZWFzZVBvc2l0aW9uCQDMCAIFCl9kaXJlY3Rpb24JAMwIAgUJX2xldmVyYWdlCQDMCAIFE19taW5CYXNlQXNzZXRBbW91bnQJAMwIAgUIX3JlZkxpbmsJAMwIAgUKX3ByaWNlRGF0YQUDbmlsCAUBaQhwYXltZW50cwMJAAACBQ5kb09wZW5Qb3NpdGlvbgUOZG9PcGVuUG9zaXRpb24EDmRvUmVzZXRDb250ZXh0CQD8BwQFBHRoaXMCDHJlc2V0Q29udGV4dAUDbmlsBQNuaWwDCQAAAgUOZG9SZXNldENvbnRleHQFDmRvUmVzZXRDb250ZXh0BBJvcGVuZWRQb3NpdGlvblNpemUJAQ9nZXRQb3NpdGlvblNpemUDBQRfYW1tBQdfdHJhZGVyBQpfZGlyZWN0aW9uAwkAAAIFEm9wZW5lZFBvc2l0aW9uU2l6ZQUSb3BlbmVkUG9zaXRpb25TaXplBAhhbW91bnRJbgkBA2FicwEFEm9wZW5lZFBvc2l0aW9uU2l6ZQMJAAACBQhhbW91bnRJbgUIYW1vdW50SW4EDHN0b3BMb3NzU2lkZQMJAGYCAAAFEm9wZW5lZFBvc2l0aW9uU2l6ZQUETE9ORwUFU0hPUlQEDWNoZWNrQW1vdW50SW4DCQBnAgAABQhhbW91bnRJbgQEZGF0YQkAuQkCCQDMCAIFBF9hbW0JAMwIAgUHX3RyYWRlcgkAzAgCCQCkAwEFCl9kaXJlY3Rpb24JAMwIAgkApAMBBQlfbGV2ZXJhZ2UJAMwIAgkApAMBBRNfbWluQmFzZUFzc2V0QW1vdW50CQDMCAIFCF9yZWZMaW5rCQDMCAIFCl9wcmljZURhdGEFA25pbAIBLAkAAgEJAKwCAgkArAICCQCsAgICEUludmFsaWQgYW1vdW50SW49CQCkAwEFCGFtb3VudEluAiEgYWZ0ZXIgc3VjY2VzcyBpbmNyZWFzZVBvc2l0aW9uOiAFBGRhdGEAAAMJAAACBQ1jaGVja0Ftb3VudEluBQ1jaGVja0Ftb3VudEluBBFkb0NyZWF0ZVN0b3BPcmRlcgMJAGYCBRFfc3RvcFRyaWdnZXJQcmljZQAABBFkb0NyZWF0ZVN0b3BPcmRlcgkA/AcEBQR0aGlzAhNpbnRlcm5hbENyZWF0ZU9yZGVyCQDMCAIFB190cmFkZXIJAMwIAgUEX2FtbQkAzAgCBQRTVE9QCQDMCAIFEV9zdG9wVHJpZ2dlclByaWNlCQDMCAIFD19zdG9wTGltaXRQcmljZQkAzAgCBQhhbW91bnRJbgkAzAgCAAAJAMwIAgUMc3RvcExvc3NTaWRlCQDMCAIFCF9yZWZMaW5rCQDMCAICAAkAzAgCAAAJAMwIAgAABQNuaWwFA25pbAMJAAACBRFkb0NyZWF0ZVN0b3BPcmRlcgURZG9DcmVhdGVTdG9wT3JkZXIFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUDbmlsAwkAAAIFEWRvQ3JlYXRlU3RvcE9yZGVyBRFkb0NyZWF0ZVN0b3BPcmRlcgQRZG9DcmVhdGVUYWtlT3JkZXIDCQBmAgURX3Rha2VUcmlnZ2VyUHJpY2UAAAQRZG9DcmVhdGVUYWtlT3JkZXIJAPwHBAUEdGhpcwITaW50ZXJuYWxDcmVhdGVPcmRlcgkAzAgCBQdfdHJhZGVyCQDMCAIFBF9hbW0JAMwIAgUEVEFLRQkAzAgCBRFfdGFrZVRyaWdnZXJQcmljZQkAzAgCBQ9fdGFrZUxpbWl0UHJpY2UJAMwIAgUIYW1vdW50SW4JAMwIAgAACQDMCAIFDHN0b3BMb3NzU2lkZQkAzAgCBQhfcmVmTGluawkAzAgCAgAJAMwIAgAACQDMCAIAAAUDbmlsBQNuaWwDCQAAAgURZG9DcmVhdGVUYWtlT3JkZXIFEWRvQ3JlYXRlVGFrZU9yZGVyBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FA25pbAMJAAACBRFkb0NyZWF0ZVRha2VPcmRlcgURZG9DcmVhdGVUYWtlT3JkZXIFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARlpbnRlcm5hbE1hcmtPcmRlckV4ZWN1dGVkAwRfYW1tB190cmFkZXIIX29yZGVySWQDAwMJAQEhAQkBC2luaXRpYWxpemVkAAYJAQEhAQkBC2lzV2hpdGVsaXN0AQUEX2FtbQYJAQEhAQkAAAIIBQFpBmNhbGxlcgUEdGhpcwkAAgECLEludmFsaWQgaW50ZXJuYWxNYXJrT3JkZXJFeGVjdXRlZCBwYXJhbWV0ZXJzBBNuZXdUcmFkZXJPcmRlckNvdW50CQBlAgkBE2dldFRyYWRlck9yZGVyQ291bnQCBQRfYW1tBQdfdHJhZGVyAAEJAM4IAgkAzggCCQEWdXBkYXRlVHJhZGVyT3JkZXJDb3VudAMFBF9hbW0FB190cmFkZXIFE25ld1RyYWRlck9yZGVyQ291bnQJARBhZGRSZW1vdmVPcmRlcklkBAUIX29yZGVySWQFBF9hbW0FB190cmFkZXIHCQEQbWFya0V4ZWN1dGVPcmRlcgEFCF9vcmRlcklkAWkBGmludGVybmFsQ3JlYXRlT3JkZXJSZXF1ZXN0BgdfdHJhZGVyBF9hbW0IX29yZGVySWQFX3R5cGUNX3RyaWdnZXJQcmljZQtfbGltaXRQcmljZQMDAwMDCQEBIQEJAQtpbml0aWFsaXplZAAGCQEBIQEJAQtpc1doaXRlbGlzdAEFBF9hbW0GCQBnAgAABQ1fdHJpZ2dlclByaWNlBgkAZgIAAAULX2xpbWl0UHJpY2UGCQEBIQEJAAACCAUBaQZjYWxsZXIFBHRoaXMJAAIBAi1JbnZhbGlkIGludGVybmFsQ3JlYXRlT3JkZXJSZXF1ZXN0IHBhcmFtZXRlcnMJARBzYXZlT3JkZXJSZXF1ZXN0BgUIX29yZGVySWQFBF9hbW0FB190cmFkZXIFBV90eXBlBQ1fdHJpZ2dlclByaWNlBQtfbGltaXRQcmljZQFpARNpbnRlcm5hbENyZWF0ZU9yZGVyDAdfdHJhZGVyBF9hbW0FX3R5cGUNX3RyaWdnZXJQcmljZQtfbGltaXRQcmljZQlfYW1vdW50SW4JX2xldmVyYWdlBV9zaWRlCF9yZWZMaW5rD19wYXltZW50QXNzZXRJZA5fcGF5bWVudEFtb3VudAtfZXhwaXJhdGlvbgMDAwMDAwMDAwMJAQEhAQkBC2luaXRpYWxpemVkAAYJAQEhAQkBC2lzV2hpdGVsaXN0AQUEX2FtbQYJAGYCAAAFDV90cmlnZ2VyUHJpY2UGCQBmAgAABQtfbGltaXRQcmljZQYJAGcCAAAFCV9hbW91bnRJbgYJAGYCAAAFCV9sZXZlcmFnZQYJAQEhAQMJAAACBQVfc2lkZQUETE9ORwYJAAACBQVfc2lkZQUFU0hPUlQGCQEBIQEDAwMJAAACBQVfdHlwZQUEU1RPUAYJAAACBQVfdHlwZQUEVEFLRQYJAAACBQVfdHlwZQUFTElNSVQGCQAAAgUFX3R5cGUFBk1BUktFVAYJAQEhAQkAAAIIBQFpBmNhbGxlcgUEdGhpcwYJAGYCAAAFC19leHBpcmF0aW9uCQACAQImSW52YWxpZCBpbnRlcm5hbENyZWF0ZU9yZGVyIHBhcmFtZXRlcnMEB29yZGVySWQJAGQCCQEOY3VycmVudE9yZGVySWQAAAEEEXBvc2l0aW9uRGlyZWN0aW9uCQEUZ2V0UG9zaXRpb25EaXJlY3Rpb24CBQVfc2lkZQUFX3R5cGUEE25ld1RyYWRlck9yZGVyQ291bnQJAGQCCQETZ2V0VHJhZGVyT3JkZXJDb3VudAIFBF9hbW0FB190cmFkZXIAAQQMcG9zaXRpb25TaXplCQEPZ2V0UG9zaXRpb25TaXplAwUEX2FtbQUHX3RyYWRlcgURcG9zaXRpb25EaXJlY3Rpb24EEG9yZGVyTWFya2V0UHJpY2UJAQ5nZXRNYXJrZXRQcmljZQEFBF9hbW0ECl9kaXJlY3Rpb24DAwMJAAACBQxwb3NpdGlvblNpemUAAAYDCQBmAgUMcG9zaXRpb25TaXplAAAJAAACBQVfc2lkZQUETE9ORwcGAwkAZgIAAAUMcG9zaXRpb25TaXplCQAAAgUFX3NpZGUFBVNIT1JUBwUISU5DUkVBU0UFCERFQ1JFQVNFAwMJAAACBQxwb3NpdGlvblNpemUAAAMJAAACBQVfdHlwZQUEU1RPUAYJAAACBQVfdHlwZQUEVEFLRQcJAAIBAitDYW4gbm90IGNyZWF0ZSBTVE9QL1RBS0Ugb3JkZXI6IG5vIHBvc2l0aW9uBAt1c2RuUGF5bWVudAMJAAACBQpfZGlyZWN0aW9uBQhJTkNSRUFTRQMDCQECIT0CBQ9fcGF5bWVudEFzc2V0SWQJANgEAQkBCnF1b3RlQXNzZXQABgkBAiE9AgUOX3BheW1lbnRBbW91bnQFCV9hbW91bnRJbgkAAgECNEludmFsaWQgY3JlYXRlTGltaXRPcmRlciBwYXJhbWV0ZXJzOiBpbnZhbGlkIHBheW1lbnQEBXN0YWtlCQD8BwQJAQ5tYW5hZ2VyQWRkcmVzcwACB2RlcG9zaXQFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBCnF1b3RlQXNzZXQABQ5fcGF5bWVudEFtb3VudAUDbmlsAwkAAAIFBXN0YWtlBQVzdGFrZQUOX3BheW1lbnRBbW91bnQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAMJAAACBQt1c2RuUGF5bWVudAULdXNkblBheW1lbnQECnBvc2l0aW9uSWQDCQECIT0CBQxwb3NpdGlvblNpemUAAAkBDWdldFBvc2l0aW9uSWQDBQRfYW1tBQdfdHJhZGVyBRFwb3NpdGlvbkRpcmVjdGlvbgAAAwMDCQAAAgUFX3R5cGUFBFNUT1AGCQAAAgUFX3R5cGUFBFRBS0UJAAACBQpwb3NpdGlvbklkAAAHCQACAQI/U1RPUCBhbmQgVEFLRSBvcmRlciBzaG91bGQgYmUgYXNzaWduZWQgdG8gcG9zaXRpb24gd2l0aCBpZCAhPSAwAwkAZgIFE25ld1RyYWRlck9yZGVyQ291bnQFGU1BWF9UUkFERVJfT1JERVJTX1BFUl9BTU0JAAIBAjBJbnZhbGlkIGNyZWF0ZUxpbWl0T3JkZXIgcGFyYW1ldGVyczogb3JkZXIgY291bnQECWNoYW5nZVNldAkAzggCCQDOCAIJAM4IAgkBCXNhdmVPcmRlcg4FB29yZGVySWQFBF9hbW0FB190cmFkZXIFCV9hbW91bnRJbgUJX2xldmVyYWdlBQVfdHlwZQUNX3RyaWdnZXJQcmljZQULdXNkblBheW1lbnQFBV9zaWRlBQhfcmVmTGluawUKcG9zaXRpb25JZAULX2xpbWl0UHJpY2UFC19leHBpcmF0aW9uBRBvcmRlck1hcmtldFByaWNlCQEQYWRkUmVtb3ZlT3JkZXJJZAQFB29yZGVySWQFBF9hbW0FB190cmFkZXIGCQEWdXBkYXRlVHJhZGVyT3JkZXJDb3VudAMFBF9hbW0FB190cmFkZXIFE25ld1RyYWRlck9yZGVyQ291bnQJARF1cGRhdGVMYXN0T3JkZXJJZAEFB29yZGVySWQJAJQKAgUJY2hhbmdlU2V0BQdvcmRlcklkCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBC2NhbmNlbE9yZGVyAQhfb3JkZXJJZAQNJHQwMjg1NjkyODcxOQkBCGdldE9yZGVyAQUIX29yZGVySWQEBF9hbW0IBQ0kdDAyODU2OTI4NzE5Al8xBAdfdHJhZGVyCAUNJHQwMjg1NjkyODcxOQJfMgQJX2Ftb3VudEluCAUNJHQwMjg1NjkyODcxOQJfMwQJX2xldmVyYWdlCAUNJHQwMjg1NjkyODcxOQJfNAQFX3R5cGUIBQ0kdDAyODU2OTI4NzE5Al81BA1fdHJpZ2dlclByaWNlCAUNJHQwMjg1NjkyODcxOQJfNgQLX2Ftb3VudFVzZG4IBQ0kdDAyODU2OTI4NzE5Al83AwMDCQEBIQEJAQtpbml0aWFsaXplZAAGCQEBIQEJAQdpc1ZhbGlkAQUIX29yZGVySWQGCQEBIQEJAAACCQClCAEIBQFpBmNhbGxlcgUHX3RyYWRlcgkAAgECHkludmFsaWQgY2FuY2VsT3JkZXIgcGFyYW1ldGVycwQHY2xlYW5VcAkA/AcEBQR0aGlzAhJjbGVhblVwU3RhbGVPcmRlcnMJAMwIAgUEX2FtbQkAzAgCBQdfdHJhZGVyBQNuaWwFA25pbAMJAAACBQdjbGVhblVwBQdjbGVhblVwBBNuZXdUcmFkZXJPcmRlckNvdW50CQBlAgkBE2dldFRyYWRlck9yZGVyQ291bnQCBQRfYW1tBQdfdHJhZGVyAAEECHdpdGhkcmF3AwkAZgIFC19hbW91bnRVc2RuAAAEB3Vuc3Rha2UJAPwHBAkBDm1hbmFnZXJBZGRyZXNzAAIId2l0aGRyYXcJAMwIAgkA2AQBCQEKcXVvdGVBc3NldAAJAMwIAgULX2Ftb3VudFVzZG4FA25pbAUDbmlsAwkAAAIFB3Vuc3Rha2UFB3Vuc3Rha2UFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUDbmlsAwkAAAIFCHdpdGhkcmF3BQh3aXRoZHJhdwkAzggCCQDOCAIJAM4IAgkBD21hcmtDYW5jZWxPcmRlcgEFCF9vcmRlcklkCQEQYWRkUmVtb3ZlT3JkZXJJZAQFCF9vcmRlcklkBQRfYW1tBQdfdHJhZGVyBwkBFnVwZGF0ZVRyYWRlck9yZGVyQ291bnQDBQRfYW1tBQdfdHJhZGVyBRNuZXdUcmFkZXJPcmRlckNvdW50AwkAZgIFC19hbW91bnRVc2RuAAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQtfYW1vdW50VXNkbgkBCnF1b3RlQXNzZXQABQNuaWwFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQxleGVjdXRlT3JkZXICCF9vcmRlcklkCl9wcmljZURhdGEEDSR0MDI5OTM3MzAyMDAJAQhnZXRPcmRlcgEFCF9vcmRlcklkBARfYW1tCAUNJHQwMjk5MzczMDIwMAJfMQQHX3RyYWRlcggFDSR0MDI5OTM3MzAyMDACXzIECV9hbW91bnRJbggFDSR0MDI5OTM3MzAyMDACXzMECV9sZXZlcmFnZQgFDSR0MDI5OTM3MzAyMDACXzQEBV90eXBlCAUNJHQwMjk5MzczMDIwMAJfNQQNX3RyaWdnZXJQcmljZQgFDSR0MDI5OTM3MzAyMDACXzYEC19hbW91bnRVc2RuCAUNJHQwMjk5MzczMDIwMAJfNwQFX3NpZGUIBQ0kdDAyOTkzNzMwMjAwAl84BAhfcmVmTGluawgFDSR0MDI5OTM3MzAyMDACXzkEC19wb3NpdGlvbklkCAUNJHQwMjk5MzczMDIwMANfMTAEC19saW1pdFByaWNlCAUNJHQwMjk5MzczMDIwMANfMTEEC19leHBpcmF0aW9uCAUNJHQwMjk5MzczMDIwMANfMTIEEV9vcmRlck1hcmtldFByaWNlCAUNJHQwMjk5MzczMDIwMANfMTMEC3VwZGF0ZVByaWNlCQD8BwQJARFAZXh0ck5hdGl2ZSgxMDYyKQEFBF9hbW0CDHVwZGF0ZU9yYWNsZQkAzAgCBQpfcHJpY2VEYXRhBQNuaWwFA25pbAMJAAACBQt1cGRhdGVQcmljZQULdXBkYXRlUHJpY2UEB2NsZWFuVXAJAPwHBAUEdGhpcwISY2xlYW5VcFN0YWxlT3JkZXJzCQDMCAIFBF9hbW0JAMwIAgUHX3RyYWRlcgUDbmlsBQNuaWwDCQAAAgUHY2xlYW5VcAUHY2xlYW5VcAQHX2NhbGxlcgMJAAACCAUBaQZjYWxsZXIFBHRoaXMIBQFpDG9yaWdpbkNhbGxlcggFAWkGY2FsbGVyAwkAAAIFB19jYWxsZXIFB19jYWxsZXIEEXBvc2l0aW9uRGlyZWN0aW9uCQEUZ2V0UG9zaXRpb25EaXJlY3Rpb24CBQVfc2lkZQUFX3R5cGUDAwMJAQEhAQkBC2luaXRpYWxpemVkAAYJAQEhAQkBB2lzVmFsaWQBBQhfb3JkZXJJZAYJAQEhAQkBEmNoZWNrVmFsaWRFeGVjdXRvcgEFB19jYWxsZXIJAAIBAh9JbnZhbGlkIGV4ZWN1dGVPcmRlciBwYXJhbWV0ZXJzBAxwb3NpdGlvblNpemUJAQ9nZXRQb3NpdGlvblNpemUDBQRfYW1tBQdfdHJhZGVyBRFwb3NpdGlvbkRpcmVjdGlvbgMJAAACBQxwb3NpdGlvblNpemUFDHBvc2l0aW9uU2l6ZQQRY3VycmVudFBvc2l0aW9uSWQDCQECIT0CBQxwb3NpdGlvblNpemUAAAkBDWdldFBvc2l0aW9uSWQDBQRfYW1tBQdfdHJhZGVyBRFwb3NpdGlvbkRpcmVjdGlvbgAABA0kdDAzMDk0NjM2MTk3AwkAAAIFBV90eXBlBQRTVE9QBBJfcG9zaXRpb25EaXJlY3Rpb24DCQBmAgUMcG9zaXRpb25TaXplAAAFBExPTkcDCQBmAgAABQxwb3NpdGlvblNpemUFBVNIT1JUCQACAQIsQ2FuIG5vdCBleGVjdXRlIFNUT1Agb3JkZXI6IG5vIG9wZW4gcG9zaXRpb24EC21hcmtldFByaWNlCQEOZ2V0TWFya2V0UHJpY2UBBQRfYW1tBAxpc0V4ZWN1dGFibGUDCQAAAgUFX3NpZGUFEl9wb3NpdGlvbkRpcmVjdGlvbgkAAgECJ0NhbiBub3QgZXhlY3V0ZSBTVE9QIG9yZGVyOiByZWR1Y2Ugb25seQMJAQIhPQIFEWN1cnJlbnRQb3NpdGlvbklkBQtfcG9zaXRpb25JZAkAAgECK0NhbiBub3QgZXhlY3V0ZSBTVE9QIG9yZGVyOiBwb3NpdGlvbiBjbG9zZWQDCQAAAgUSX3Bvc2l0aW9uRGlyZWN0aW9uBQRMT05HCQBnAgUNX3RyaWdnZXJQcmljZQULbWFya2V0UHJpY2UJAGcCBQttYXJrZXRQcmljZQUNX3RyaWdnZXJQcmljZQMFDGlzRXhlY3V0YWJsZQkAlQoDAg1jbG9zZVBvc2l0aW9uCQDMCAIJAQRtaW52AgUJX2Ftb3VudEluCQEDYWJzAQUMcG9zaXRpb25TaXplCQDMCAIFEXBvc2l0aW9uRGlyZWN0aW9uCQDMCAIJAQRtdWxkAgULX2xpbWl0UHJpY2UJAQNhYnMBBQxwb3NpdGlvblNpemUJAMwIAgcJAMwIAgUKX3ByaWNlRGF0YQUDbmlsBQNuaWwJAAIBAjFDYW4gbm90IGV4ZWN1dGUgU1RPUCBvcmRlcjogdHJpZ2dlclByaWNlIG1pc21hdGNoAwkAAAIFBV90eXBlBQRUQUtFBBJfcG9zaXRpb25EaXJlY3Rpb24DCQBmAgUMcG9zaXRpb25TaXplAAAFBExPTkcDCQBmAgAABQxwb3NpdGlvblNpemUFBVNIT1JUCQACAQIsQ2FuIG5vdCBleGVjdXRlIFNUT1Agb3JkZXI6IG5vIG9wZW4gcG9zaXRpb24EC21hcmtldFByaWNlCQEOZ2V0TWFya2V0UHJpY2UBBQRfYW1tBAxpc0V4ZWN1dGFibGUDCQAAAgUFX3NpZGUFEl9wb3NpdGlvbkRpcmVjdGlvbgkAAgECJ0NhbiBub3QgZXhlY3V0ZSBUQUtFIG9yZGVyOiByZWR1Y2Ugb25seQMJAQIhPQIFEWN1cnJlbnRQb3NpdGlvbklkBQtfcG9zaXRpb25JZAkAAgEJAKwCAgkArAICCQCsAgICLENhbiBub3QgZXhlY3V0ZSBUQUtFIG9yZGVyOiBwb3NpdGlvbiBjbG9zZWQgCQCkAwEFEWN1cnJlbnRQb3NpdGlvbklkAgIhPQkApAMBBQtfcG9zaXRpb25JZAMJAAACBRJfcG9zaXRpb25EaXJlY3Rpb24FBExPTkcJAGcCBQttYXJrZXRQcmljZQUNX3RyaWdnZXJQcmljZQkAZwIFDV90cmlnZ2VyUHJpY2UFC21hcmtldFByaWNlAwUMaXNFeGVjdXRhYmxlCQCVCgMCDWNsb3NlUG9zaXRpb24JAMwIAgkBBG1pbnYCBQlfYW1vdW50SW4JAQNhYnMBBQxwb3NpdGlvblNpemUJAMwIAgURcG9zaXRpb25EaXJlY3Rpb24JAMwIAgkBBG11bGQCBQtfbGltaXRQcmljZQkBA2FicwEFDHBvc2l0aW9uU2l6ZQkAzAgCBwkAzAgCBQpfcHJpY2VEYXRhBQNuaWwFA25pbAkAAgECMUNhbiBub3QgZXhlY3V0ZSBUQUtFIG9yZGVyOiB0cmlnZ2VyUHJpY2UgbWlzbWF0Y2gDCQAAAgUFX3R5cGUFBUxJTUlUBAttYXJrZXRQcmljZQkBDmdldE1hcmtldFByaWNlAQUEX2FtbQQSaXNFeGVjdXRhYmxlQnlTdG9wAwkAAAIFC19saW1pdFByaWNlAAAGAwkAAAIFBV9zaWRlBQRMT05HCQBnAgULbWFya2V0UHJpY2UFC19saW1pdFByaWNlCQBnAgULX2xpbWl0UHJpY2UFC21hcmtldFByaWNlBBtpc0V4ZWN1dGFibGVGb3JUcmlnZ2VyUHJpY2UDCQAAAgUFX3NpZGUFBExPTkcJAGcCBQ1fdHJpZ2dlclByaWNlBQttYXJrZXRQcmljZQkAZwIFC21hcmtldFByaWNlBQ1fdHJpZ2dlclByaWNlBBdpc0V4ZWN1dGFibGVCeVRpbWVzdGFtcAMDCQAAAgULX2V4cGlyYXRpb24AAAYJAGcCBQtfZXhwaXJhdGlvbgUEVElNRQYHBAxpc0V4ZWN1dGFibGUDAwUSaXNFeGVjdXRhYmxlQnlTdG9wBRtpc0V4ZWN1dGFibGVGb3JUcmlnZ2VyUHJpY2UHBRdpc0V4ZWN1dGFibGVCeVRpbWVzdGFtcAcDBQxpc0V4ZWN1dGFibGUEDG1hcmdpbkFtb3VudAkBBGRpdmQCBQtfYW1vdW50VXNkbgkAZAIJAQRtdWxkAgkBBmdldEZlZQIFBF9hbW0FB190cmFkZXIFCV9sZXZlcmFnZQUMREVDSU1BTF9VTklUBAxvcGVuTm90aW9uYWwJAQRtdWxkAgUMbWFyZ2luQW1vdW50BQlfbGV2ZXJhZ2UEF2lkZWFsTWluQmFzZUFzc2V0QW1vdW50CQEEZGl2ZAIFDG9wZW5Ob3Rpb25hbAUNX3RyaWdnZXJQcmljZQQSbWluQmFzZUFzc2V0QW1vdW50CQBlAgUXaWRlYWxNaW5CYXNlQXNzZXRBbW91bnQJAQRtdWxkAgUXaWRlYWxNaW5CYXNlQXNzZXRBbW91bnQJAQ5nZXRTcHJlYWRMaW1pdAAJAJUKAwIQaW5jcmVhc2VQb3NpdGlvbgkAzAgCBQVfc2lkZQkAzAgCBQlfbGV2ZXJhZ2UJAMwIAgUSbWluQmFzZUFzc2V0QW1vdW50CQDMCAIFCF9yZWZMaW5rCQDMCAIFCl9wcmljZURhdGEFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBCnF1b3RlQXNzZXQABQtfYW1vdW50VXNkbgUDbmlsAwMDBRJpc0V4ZWN1dGFibGVCeVN0b3AFF2lzRXhlY3V0YWJsZUJ5VGltZXN0YW1wBwkBAiE9AgULX2xpbWl0UHJpY2UAAAcEDWRvVXBkYXRlT3JkZXIJAPwHBAUEdGhpcwIRaW50ZXJuYWxTYXZlT3JkZXIJAMwIAgUIX29yZGVySWQJAMwIAgUEX2FtbQkAzAgCBQdfdHJhZGVyCQDMCAIFCV9hbW91bnRJbgkAzAgCBQlfbGV2ZXJhZ2UJAMwIAgUFX3R5cGUJAMwIAgUNX3RyaWdnZXJQcmljZQkAzAgCBQtfYW1vdW50VXNkbgkAzAgCBQVfc2lkZQkAzAgCBQhfcmVmTGluawkAzAgCBQtfcG9zaXRpb25JZAkAzAgCAAAJAMwIAgULX2V4cGlyYXRpb24JAMwIAgURX29yZGVyTWFya2V0UHJpY2UFA25pbAUDbmlsAwkAAAIFDWRvVXBkYXRlT3JkZXIFDWRvVXBkYXRlT3JkZXIJAJUKAwIABQNuaWwFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECMkNhbiBub3QgZXhlY3V0ZSBMSU1JVCBvcmRlcjogdHJpZ2dlclByaWNlIG1pc21hdGNoAwkAAAIFBV90eXBlBQZNQVJLRVQEC21hcmtldFByaWNlCQEOZ2V0TWFya2V0UHJpY2UBBQRfYW1tBBdpc0V4ZWN1dGFibGVCeVRpbWVzdGFtcAMDCQAAAgULX2V4cGlyYXRpb24AAAYJAGcCBQtfZXhwaXJhdGlvbgUEVElNRQYHBAxpc0V4ZWN1dGFibGUFF2lzRXhlY3V0YWJsZUJ5VGltZXN0YW1wAwUMaXNFeGVjdXRhYmxlCQCVCgMCEGluY3JlYXNlUG9zaXRpb24JAMwIAgUFX3NpZGUJAMwIAgUJX2xldmVyYWdlCQDMCAIAAAkAzAgCBQhfcmVmTGluawkAzAgCBQpfcHJpY2VEYXRhBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQpxdW90ZUFzc2V0AAULX2Ftb3VudFVzZG4FA25pbAkAAgECMUNhbiBub3QgZXhlY3V0ZSBNQVJLRVQgb3JkZXI6IGV4cGlyYXRpb24gbWlzbWF0Y2gJAAIBCQCsAgICFEludmFsaWQgb3JkZXIgdHlwZTogCQCkAwEFBV90eXBlBAZtZXRob2QIBQ0kdDAzMDk0NjM2MTk3Al8xBARhcmdzCAUNJHQwMzA5NDYzNjE5NwJfMgQIcGF5bWVudHMIBQ0kdDAzMDk0NjM2MTk3Al8zBAh3aXRoZHJhdwMJAAACCQCQAwEFCHBheW1lbnRzAAEEB3Vuc3Rha2UJAPwHBAkBDm1hbmFnZXJBZGRyZXNzAAIId2l0aGRyYXcJAMwIAgkA2AQBCQEKcXVvdGVBc3NldAAJAMwIAggJAJEDAgUIcGF5bWVudHMAAAZhbW91bnQFA25pbAUDbmlsAwkAAAIFB3Vuc3Rha2UFB3Vuc3Rha2UFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUDbmlsAwkAAAIFCHdpdGhkcmF3BQh3aXRoZHJhdwMJAQIhPQIFBm1ldGhvZAIABAxkb1NldENvbnRleHQJAPwHBAUEdGhpcwIKc2V0Q29udGV4dAkAzAgCBQdfdHJhZGVyBQNuaWwFA25pbAMJAAACBQxkb1NldENvbnRleHQFDGRvU2V0Q29udGV4dAQPZG9DbG9zZVBvc2l0aW9uCQD8BwQJARFAZXh0ck5hdGl2ZSgxMDYyKQEFBF9hbW0FBm1ldGhvZAUEYXJncwUIcGF5bWVudHMDCQAAAgUPZG9DbG9zZVBvc2l0aW9uBQ9kb0Nsb3NlUG9zaXRpb24EDmRvUmVzZXRDb250ZXh0CQD8BwQFBHRoaXMCDHJlc2V0Q29udGV4dAUDbmlsBQNuaWwDCQAAAgUOZG9SZXNldENvbnRleHQFDmRvUmVzZXRDb250ZXh0BBNleGVjdXRlT3JkZXJSZXF1ZXN0AwMJAAACBQVfdHlwZQUFTElNSVQGCQAAAgUFX3R5cGUFBk1BUktFVAQPbmV3UG9zaXRpb25TaXplCQEPZ2V0UG9zaXRpb25TaXplAwUEX2FtbQUHX3RyYWRlcgURcG9zaXRpb25EaXJlY3Rpb24DCQAAAgUPbmV3UG9zaXRpb25TaXplBQ9uZXdQb3NpdGlvblNpemUEDW5ld1Bvc2l0aW9uSWQJAQ1nZXRQb3NpdGlvbklkAwUEX2FtbQUHX3RyYWRlcgURcG9zaXRpb25EaXJlY3Rpb24DCQAAAgUNbmV3UG9zaXRpb25JZAUNbmV3UG9zaXRpb25JZAQRcG9zaXRpb25TaXplRGVsdGEJAGUCBQ9uZXdQb3NpdGlvblNpemUFDHBvc2l0aW9uU2l6ZQQOY2xvc2VPcmRlclNpZGUDCQBmAgUPbmV3UG9zaXRpb25TaXplAAAFBVNIT1JUBQRMT05HBA1tYWtlVGFrZU9yZGVyAwkBEGhhdmVPcmRlclJlcXVlc3QCBQhfb3JkZXJJZAUEVEFLRQQNJHQwMzcyMzEzNzQ0NAkBD2dldE9yZGVyUmVxdWVzdAIFCF9vcmRlcklkBQRUQUtFBApuZXdPcmRlcklkCAUNJHQwMzcyMzEzNzQ0NAJfMQQGbmV3QW1tCAUNJHQwMzcyMzEzNzQ0NAJfMgQJbmV3VHJhZGVyCAUNJHQwMzcyMzEzNzQ0NAJfMwQHbmV3VHlwZQgFDSR0MDM3MjMxMzc0NDQCXzQED25ld1RyaWdnZXJQcmljZQgFDSR0MDM3MjMxMzc0NDQCXzUEDW5ld0xpbWl0UHJpY2UIBQ0kdDAzNzIzMTM3NDQ0Al82BAZkb0NhbGwJAPwHBAUEdGhpcwITaW50ZXJuYWxDcmVhdGVPcmRlcgkAzAgCBQluZXdUcmFkZXIJAMwIAgUGbmV3QW1tCQDMCAIFB25ld1R5cGUJAMwIAgUPbmV3VHJpZ2dlclByaWNlCQDMCAIFDW5ld0xpbWl0UHJpY2UJAMwIAgURcG9zaXRpb25TaXplRGVsdGEJAMwIAgAACQDMCAIFDmNsb3NlT3JkZXJTaWRlCQDMCAICAAkAzAgCAgAJAMwIAgAACQDMCAIAAAUDbmlsBQNuaWwDCQAAAgUGZG9DYWxsBQZkb0NhbGwFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUDbmlsAwkAAAIFDW1ha2VUYWtlT3JkZXIFDW1ha2VUYWtlT3JkZXIEDW1ha2VTdG9wT3JkZXIDCQEQaGF2ZU9yZGVyUmVxdWVzdAIFCF9vcmRlcklkBQRTVE9QBA0kdDAzODA2NzM4MjgwCQEPZ2V0T3JkZXJSZXF1ZXN0AgUIX29yZGVySWQFBFNUT1AECm5ld09yZGVySWQIBQ0kdDAzODA2NzM4MjgwAl8xBAZuZXdBbW0IBQ0kdDAzODA2NzM4MjgwAl8yBAluZXdUcmFkZXIIBQ0kdDAzODA2NzM4MjgwAl8zBAduZXdUeXBlCAUNJHQwMzgwNjczODI4MAJfNAQPbmV3VHJpZ2dlclByaWNlCAUNJHQwMzgwNjczODI4MAJfNQQNbmV3TGltaXRQcmljZQgFDSR0MDM4MDY3MzgyODACXzYEBmRvQ2FsbAkA/AcEBQR0aGlzAhNpbnRlcm5hbENyZWF0ZU9yZGVyCQDMCAIFCW5ld1RyYWRlcgkAzAgCBQZuZXdBbW0JAMwIAgUHbmV3VHlwZQkAzAgCBQ9uZXdUcmlnZ2VyUHJpY2UJAMwIAgUNbmV3TGltaXRQcmljZQkAzAgCBRFwb3NpdGlvblNpemVEZWx0YQkAzAgCAAAJAMwIAgUOY2xvc2VPcmRlclNpZGUJAMwIAgIACQDMCAICAAkAzAgCAAAJAMwIAgAABQNuaWwFA25pbAMJAAACBQZkb0NhbGwFBmRvQ2FsbAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQNuaWwDCQAAAgUNbWFrZVN0b3BPcmRlcgUNbWFrZVN0b3BPcmRlcgkAzggCBQ1tYWtlVGFrZU9yZGVyBQ1tYWtlU3RvcE9yZGVyCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQNuaWwDCQAAAgUTZXhlY3V0ZU9yZGVyUmVxdWVzdAUTZXhlY3V0ZU9yZGVyUmVxdWVzdAQTZG9NYXJrT3JkZXJFeGVjdXRlZAkA/AcEBQR0aGlzAhlpbnRlcm5hbE1hcmtPcmRlckV4ZWN1dGVkCQDMCAIFBF9hbW0JAMwIAgUHX3RyYWRlcgkAzAgCBQhfb3JkZXJJZAUDbmlsBQNuaWwDCQAAAgUTZG9NYXJrT3JkZXJFeGVjdXRlZAUTZG9NYXJrT3JkZXJFeGVjdXRlZAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEUdmlld19jYW5FeGVjdXRlT3JkZXICCF9vcmRlcklkCl9wcmljZURhdGEEAXMJAPwHBAUEdGhpcwIMZXhlY3V0ZU9yZGVyCQDMCAIFCF9vcmRlcklkCQDMCAIFCl9wcmljZURhdGEFA25pbAUDbmlsAwkAAAIFAXMFAXMJAAIBAgdTdWNjZXNzCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBGXZpZXdfY2FuQWN0aXZhdGVTdG9wT3JkZXICCF9vcmRlcklkCl9wcmljZURhdGEEAXMJAPwHBAUEdGhpcwIRYWN0aXZhdGVTdG9wT3JkZXIJAMwIAgUIX29yZGVySWQJAMwIAgUKX3ByaWNlRGF0YQUDbmlsBQNuaWwDCQAAAgUBcwUBcwkAAgECB1N1Y2Nlc3MJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BAnR4AQZ2ZXJpZnkABA5jb29yZGluYXRvclN0cgkAnQgCBQR0aGlzBRRrX2Nvb3JkaW5hdG9yQWRkcmVzcwMJAQlpc0RlZmluZWQBBQ5jb29yZGluYXRvclN0cgQFYWRtaW4JAJ0IAgkBEUBleHRyTmF0aXZlKDEwNjIpAQkBBXZhbHVlAQUOY29vcmRpbmF0b3JTdHIFD2tfYWRtaW5fYWRkcmVzcwMJAQlpc0RlZmluZWQBBQVhZG1pbgkBC3ZhbHVlT3JFbHNlAgkAmwgCCQERQGV4dHJOYXRpdmUoMTA2MikBCQEFdmFsdWUBBQVhZG1pbgkArAICCQCsAgIJAKwCAgIHc3RhdHVzXwkApQgBBQR0aGlzAgFfCQDYBAEIBQJ0eAJpZAcJAAIBAi51bmFibGUgdG8gdmVyaWZ5OiBhZG1pbiBub3Qgc2V0IGluIGNvb3JkaW5hdG9yCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAACAUCdHgPc2VuZGVyUHVibGljS2V5zP3F3Q==", "height": 2684285, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: NPfrjd7jFwnFDy2cdaaj35Bnuggps7Hk2oi7NeSSW4x Next: none Diff:
OldNewDifferences
321321 func bG (bH) = if (aW())
322322 then aX(toString(bH))
323323 else true
324+
325+
326+@Callable(bI)
327+func internalSaveOrder (O,U,V,ba,bb,S,bc,bd,be,bf,bg,bh,bi,bj) = if ((bI.caller != this))
328+ then throw("Invalid saveOrderInternal params")
329+ else aZ(O, U, V, ba, bb, S, bc, bd, be, bf, bg, bh, bi, bj)
330+
324331
325332
326333 @Callable(bI)
880887 let aE = aF(U)
881888 let dl = if ((bh == 0))
882889 then true
883- else if ((bh > bj))
890+ else if ((be == x))
884891 then (aE >= bh)
885892 else (bh >= aE)
886893 let dm = if ((be == x))
904911 let dr = (dq - I(dq, ae()))
905912 $Tuple3("increasePosition", [be, bb, dr, bf, cA], [AttachedPayment(Z(), df)])
906913 }
907- else throw("Can not execute LIMIT order: triggerPrice mismatch")
914+ else if (if (if (dl)
915+ then dn
916+ else false)
917+ then (bh != 0)
918+ else false)
919+ then {
920+ let ds = invoke(this, "internalSaveOrder", [O, U, V, ba, bb, S, bc, df, be, bf, bg, 0, bi, bj], nil)
921+ if ((ds == ds))
922+ then $Tuple3("", nil, nil)
923+ else throw("Strict value is not equal to itself.")
924+ }
925+ else throw("Can not execute LIMIT order: triggerPrice mismatch")
908926 }
909927 else if ((S == w))
910928 then {
920938 else throw("Can not execute MARKET order: expiration mismatch")
921939 }
922940 else throw(("Invalid order type: " + toString(S)))
923- let ds = di._1
924- let dt = di._2
925- let du = di._3
926- let cm = if ((size(du) == 1))
941+ let dt = di._1
942+ let du = di._2
943+ let dv = di._3
944+ let cm = if ((size(dv) == 1))
927945 then {
928- let cn = invoke(aa(), "withdraw", [toBase58String(Z()), du[0].amount], nil)
946+ let cn = invoke(aa(), "withdraw", [toBase58String(Z()), dv[0].amount], nil)
929947 if ((cn == cn))
930948 then nil
931949 else throw("Strict value is not equal to itself.")
932950 }
933951 else nil
934952 if ((cm == cm))
935- then {
936- let cN = invoke(this, "setContext", [V], nil)
937- if ((cN == cN))
938- then {
939- let dv = invoke(addressFromStringValue(U), ds, dt, du)
940- if ((dv == dv))
941- then {
942- let cP = invoke(this, "resetContext", nil, nil)
943- if ((cP == cP))
944- then {
945- let dw = if (if ((S == v))
946- then true
947- else (S == w))
948- then {
949- let dx = aO(U, V, cZ)
950- if ((dx == dx))
951- then {
952- let dy = aS(U, V, cZ)
953- if ((dy == dy))
954- then {
955- let dz = (dx - cM)
956- let dA = if ((dx > 0))
957- then y
958- else x
959- let dB = if (ak(O, u))
960- then {
961- let dC = al(O, u)
962- let dD = dC._1
963- let dE = dC._2
964- let dF = dC._3
965- let dG = dC._4
966- let dH = dC._5
967- let dI = dC._6
968- let cG = invoke(this, "internalCreateOrder", [dF, dE, dG, dH, dI, dz, 0, dA, "", "", 0, 0], nil)
969- if ((cG == cG))
970- then nil
971- else throw("Strict value is not equal to itself.")
972- }
973- else nil
974- if ((dB == dB))
975- then {
976- let dJ = if (ak(O, t))
977- then {
978- let dK = al(O, t)
979- let dD = dK._1
980- let dE = dK._2
981- let dF = dK._3
982- let dG = dK._4
983- let dH = dK._5
984- let dI = dK._6
985- let cG = invoke(this, "internalCreateOrder", [dF, dE, dG, dH, dI, dz, 0, dA, "", "", 0, 0], nil)
986- if ((cG == cG))
987- then nil
988- else throw("Strict value is not equal to itself.")
989- }
990- else nil
991- if ((dJ == dJ))
992- then (dB ++ dJ)
993- else throw("Strict value is not equal to itself.")
994- }
995- else throw("Strict value is not equal to itself.")
996- }
997- else throw("Strict value is not equal to itself.")
998- }
999- else throw("Strict value is not equal to itself.")
1000- }
1001- else nil
1002- if ((dw == dw))
1003- then {
1004- let dL = invoke(this, "internalMarkOrderExecuted", [U, V, O], nil)
1005- if ((dL == dL))
1006- then nil
1007- else throw("Strict value is not equal to itself.")
1008- }
1009- else throw("Strict value is not equal to itself.")
1010- }
1011- else throw("Strict value is not equal to itself.")
1012- }
1013- else throw("Strict value is not equal to itself.")
1014- }
1015- else throw("Strict value is not equal to itself.")
1016- }
953+ then if ((dt != ""))
954+ then {
955+ let cN = invoke(this, "setContext", [V], nil)
956+ if ((cN == cN))
957+ then {
958+ let dw = invoke(addressFromStringValue(U), dt, du, dv)
959+ if ((dw == dw))
960+ then {
961+ let cP = invoke(this, "resetContext", nil, nil)
962+ if ((cP == cP))
963+ then {
964+ let dx = if (if ((S == v))
965+ then true
966+ else (S == w))
967+ then {
968+ let dy = aO(U, V, cZ)
969+ if ((dy == dy))
970+ then {
971+ let dz = aS(U, V, cZ)
972+ if ((dz == dz))
973+ then {
974+ let dA = (dy - cM)
975+ let dB = if ((dy > 0))
976+ then y
977+ else x
978+ let dC = if (ak(O, u))
979+ then {
980+ let dD = al(O, u)
981+ let dE = dD._1
982+ let dF = dD._2
983+ let dG = dD._3
984+ let dH = dD._4
985+ let dI = dD._5
986+ let dJ = dD._6
987+ let cG = invoke(this, "internalCreateOrder", [dG, dF, dH, dI, dJ, dA, 0, dB, "", "", 0, 0], nil)
988+ if ((cG == cG))
989+ then nil
990+ else throw("Strict value is not equal to itself.")
991+ }
992+ else nil
993+ if ((dC == dC))
994+ then {
995+ let dK = if (ak(O, t))
996+ then {
997+ let dL = al(O, t)
998+ let dE = dL._1
999+ let dF = dL._2
1000+ let dG = dL._3
1001+ let dH = dL._4
1002+ let dI = dL._5
1003+ let dJ = dL._6
1004+ let cG = invoke(this, "internalCreateOrder", [dG, dF, dH, dI, dJ, dA, 0, dB, "", "", 0, 0], nil)
1005+ if ((cG == cG))
1006+ then nil
1007+ else throw("Strict value is not equal to itself.")
1008+ }
1009+ else nil
1010+ if ((dK == dK))
1011+ then (dC ++ dK)
1012+ else throw("Strict value is not equal to itself.")
1013+ }
1014+ else throw("Strict value is not equal to itself.")
1015+ }
1016+ else throw("Strict value is not equal to itself.")
1017+ }
1018+ else throw("Strict value is not equal to itself.")
1019+ }
1020+ else nil
1021+ if ((dx == dx))
1022+ then {
1023+ let dM = invoke(this, "internalMarkOrderExecuted", [U, V, O], nil)
1024+ if ((dM == dM))
1025+ then nil
1026+ else throw("Strict value is not equal to itself.")
1027+ }
1028+ else throw("Strict value is not equal to itself.")
1029+ }
1030+ else throw("Strict value is not equal to itself.")
1031+ }
1032+ else throw("Strict value is not equal to itself.")
1033+ }
1034+ else throw("Strict value is not equal to itself.")
1035+ }
1036+ else nil
10171037 else throw("Strict value is not equal to itself.")
10181038 }
10191039 else throw("Strict value is not equal to itself.")
10371057 }
10381058
10391059
1040-@Verifier(dM)
1041-func dN () = {
1042- let dO = getString(this, a)
1043- if (isDefined(dO))
1060+
1061+@Callable(bI)
1062+func view_canActivateStopOrder (O,cA) = {
1063+ let aG = invoke(this, "activateStopOrder", [O, cA], nil)
1064+ if ((aG == aG))
1065+ then throw("Success")
1066+ else throw("Strict value is not equal to itself.")
1067+ }
1068+
1069+
1070+@Verifier(dN)
1071+func dO () = {
1072+ let dP = getString(this, a)
1073+ if (isDefined(dP))
10441074 then {
1045- let dP = getString(addressFromStringValue(value(dO)), b)
1046- if (isDefined(dP))
1047- then valueOrElse(getBoolean(addressFromStringValue(value(dP)), ((("status_" + toString(this)) + "_") + toBase58String(dM.id))), false)
1075+ let dQ = getString(addressFromStringValue(value(dP)), b)
1076+ if (isDefined(dQ))
1077+ then valueOrElse(getBoolean(addressFromStringValue(value(dQ)), ((("status_" + toString(this)) + "_") + toBase58String(dN.id))), false)
10481078 else throw("unable to verify: admin not set in coordinator")
10491079 }
1050- else sigVerify(dM.bodyBytes, dM.proofs[0], dM.senderPublicKey)
1080+ else sigVerify(dN.bodyBytes, dN.proofs[0], dN.senderPublicKey)
10511081 }
10521082
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_address"
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_executedOrders"
1919
2020 let i = "k_canceledOrders"
2121
2222 let j = "k_order"
2323
2424 let k = "k_orderReq"
2525
2626 let l = "k_lastOrderId"
2727
2828 let m = "k_traderOrderCnt"
2929
3030 let n = "k_traderOrderIds"
3131
3232 let o = "k_spreadLimit"
3333
3434 let p = "k_onlyWhitelist"
3535
3636 let q = "k_whitelistExecutor"
3737
3838 let r = "k_sender"
3939
4040 let s = "k_initialized"
4141
4242 let t = 1
4343
4444 let u = 2
4545
4646 let v = 3
4747
4848 let w = 4
4949
5050 let x = 1
5151
5252 let y = 2
5353
5454 let z = 1
5555
5656 let A = 2
5757
5858 let B = 10
5959
6060 let C = lastBlock.timestamp
6161
6262 let D = (1 * (((((10 * 10) * 10) * 10) * 10) * 10))
6363
6464 func E (F) = if ((F > 0))
6565 then F
6666 else -(F)
6767
6868
6969 func G (F,H) = fraction(F, D, H, HALFEVEN)
7070
7171
7272 func I (F,H) = fraction(F, H, D, HALFEVEN)
7373
7474
7575 func J (F,H) = if ((F > H))
7676 then H
7777 else F
7878
7979
8080 func K (L,M) = ((L + "_") + M)
8181
8282
8383 func N (O) = ((h + "_") + toString(O))
8484
8585
8686 func P (O) = ((i + "_") + toString(O))
8787
8888
8989 func Q (O) = K(j, toString(O))
9090
9191
9292 func R (O,S) = ((((k + "_") + toString(O)) + "_") + toString(S))
9393
9494
9595 func T (U,V) = ((((m + "_") + U) + "_") + V)
9696
9797
9898 func W (U,V) = ((((n + "_") + U) + "_") + V)
9999
100100
101101 func X () = valueOrErrorMessage(addressFromString(getStringValue(this, a)), "Coordinator not set")
102102
103103
104104 func Y () = addressFromString(getStringValue(X(), b))
105105
106106
107107 func Z () = fromBase58String(getStringValue(X(), c))
108108
109109
110110 func aa () = valueOrErrorMessage(addressFromString(getStringValue(X(), e)), "Manager not set")
111111
112112
113113 func ab (M) = valueOrElse(getBoolean(X(), K(d, M)), false)
114114
115115
116116 func ac () = valueOrElse(getBoolean(this, s), false)
117117
118118
119119 func ad (O) = if (valueOrElse(getBoolean(this, N(O)), false))
120120 then throw(("Order already executed: " + toString(O)))
121121 else if (valueOrElse(getBoolean(this, P(O)), false))
122122 then throw(("Order already cancelled: " + toString(O)))
123123 else true
124124
125125
126126 func ae () = valueOrErrorMessage(getInteger(this, o), "Spread limit not set")
127127
128128
129129 func af () = valueOrElse(getInteger(this, l), 0)
130130
131131
132132 func ag (U,V) = {
133133 let ah = T(U, V)
134134 valueOrElse(getInteger(this, ah), 0)
135135 }
136136
137137
138138 func ai (U,V) = {
139139 let ah = W(U, V)
140140 let aj = valueOrElse(getString(this, ah), "")
141141 if ((aj == ""))
142142 then nil
143143 else split(aj, ",")
144144 }
145145
146146
147147 func ak (O,S) = {
148148 let ah = R(O, S)
149149 isDefined(getString(this, ah))
150150 }
151151
152152
153153 func al (O,S) = {
154154 let ah = R(O, S)
155155 let am = valueOrErrorMessage(getString(this, ah), ("Not order request for key: " + ah))
156156 let an = split(am, ",")
157157 let ao = valueOrErrorMessage(parseInt(an[0]), "Invalid orderId")
158158 let ap = an[1]
159159 let aq = an[2]
160160 let ar = valueOrErrorMessage(parseInt(an[3]), "Invalid type")
161161 let as = valueOrErrorMessage(parseInt(an[4]), "Invalid triggerPrice")
162162 let at = valueOrErrorMessage(parseInt(an[5]), "Invalid limitPrice")
163163 $Tuple6(ao, ap, aq, ar, as, at)
164164 }
165165
166166
167167 func au (O) = {
168168 let av = valueOrErrorMessage(getString(this, Q(O)), ("Invalid order id: " + toString(O)))
169169 let aw = split(av, ",")
170170 let ap = aw[0]
171171 let aq = aw[1]
172172 let ax = valueOrErrorMessage(parseInt(aw[2]), "Invalid amountIn")
173173 let ay = valueOrErrorMessage(parseInt(aw[3]), "Invalid leverage")
174174 let ar = valueOrErrorMessage(parseInt(aw[4]), "Invalid type")
175175 let as = valueOrErrorMessage(parseInt(aw[5]), "Invalid triggerPrice")
176176 let az = valueOrErrorMessage(parseInt(aw[6]), "Invalid paymentUsdn")
177177 let aA = valueOrErrorMessage(parseInt(aw[7]), "Invalid side")
178178 let aB = aw[8]
179179 let aC = valueOrErrorMessage(parseInt(aw[9]), "Invalid positionId")
180180 let at = valueOrErrorMessage(parseInt(aw[10]), "Invalid limitPrice")
181181 let aD = if ((size(aw) > 11))
182182 then valueOrErrorMessage(parseInt(aw[11]), "Invalid expiration")
183183 else 0
184184 let aE = if ((size(aw) > 12))
185185 then valueOrErrorMessage(parseInt(aw[12]), "Invalid orderMarketPrice")
186186 else 0
187187 $Tuple13(ap, aq, ax, ay, ar, as, az, aA, aB, aC, at, aD, aE)
188188 }
189189
190190
191191 func aF (U) = {
192192 let aG = invoke(addressFromStringValue(U), "computeSpotPrice", nil, nil)
193193 if ((aG == aG))
194194 then {
195195 let aH = {
196196 let aI = aG
197197 if ($isInstanceOf(aI, "Int"))
198198 then {
199199 let aJ = aI
200200 aJ
201201 }
202202 else throw("Invalid computeSpotPrice result")
203203 }
204204 value(aH)
205205 }
206206 else throw("Strict value is not equal to itself.")
207207 }
208208
209209
210210 func aK (U,V) = {
211211 let aG = invoke(addressFromStringValue(U), "computeFeeForTraderWithArtifact", [V, ""], nil)
212212 if ((aG == aG))
213213 then {
214214 let aH = {
215215 let aI = aG
216216 if ($isInstanceOf(aI, "(Int, Boolean)"))
217217 then {
218218 let aJ = aI
219219 aJ._1
220220 }
221221 else throw("Invalid computeFeeForTraderWithArtifact result")
222222 }
223223 value(aH)
224224 }
225225 else throw("Strict value is not equal to itself.")
226226 }
227227
228228
229229 func aL (aM,aN) = if (if ((aN == u))
230230 then true
231231 else (aN == t))
232232 then if ((aM == x))
233233 then y
234234 else x
235235 else aM
236236
237237
238238 func aO (U,V,aP) = {
239239 let ap = addressFromStringValue(U)
240240 let aQ = ((V + "_") + toString(aP))
241241 let aR = K(g, aQ)
242242 valueOrElse(getInteger(ap, aR), 0)
243243 }
244244
245245
246246 func aS (U,V,aP) = {
247247 let ap = addressFromStringValue(U)
248248 let aQ = ((V + "_") + toString(aP))
249249 let aT = K(f, aQ)
250250 valueOrElse(getInteger(ap, aT), 0)
251251 }
252252
253253
254254 func aU (aV) = I(aV, ae())
255255
256256
257257 func aW () = valueOrElse(getBoolean(this, p), false)
258258
259259
260260 func aX (aY) = valueOrElse(getBoolean(this, K(q, aY)), false)
261261
262262
263263 func aZ (O,U,V,ba,bb,S,bc,bd,be,bf,bg,bh,bi,bj) = {
264264 let av = makeString([U, V, toString(ba), toString(bb), toString(S), toString(bc), toString(bd), toString(be), bf, toString(bg), toString(bh), toString(bi), toString(bj)], ",")
265265 [StringEntry(Q(O), av)]
266266 }
267267
268268
269269 func bk (O,U,V,S,bc,bh) = {
270270 let bl = makeString([toString(O), U, V, toString(S), toString(bc), toString(bh)], ",")
271271 [StringEntry(R(O, S), bl)]
272272 }
273273
274274
275275 func bm (bn,U,V) = [StringEntry(W(U, V), bn)]
276276
277277
278278 func bo (bp,O,U,V,bq) = {
279279 let br = if (bq)
280280 then (bp :+ toString(O))
281281 else removeByIndex(bp, valueOrErrorMessage(indexOf(bp, toString(O)), ("No order with id: " + toString(O))))
282282 br
283283 }
284284
285285
286286 func bs (O,U,V,bq) = {
287287 let bt = ai(U, V)
288288 let br = bo(bt, O, U, V, bq)
289289 let bu = makeString(br, ",")
290290 bm(bu, U, V)
291291 }
292292
293293
294294 func bv (U,V,bw) = if ((0 > bw))
295295 then throw(("Invalid order count: " + toString(bw)))
296296 else [IntegerEntry(T(U, V), bw)]
297297
298298
299299 func bx (by) = [IntegerEntry(l, by)]
300300
301301
302302 func bz (O) = [BooleanEntry(K(h, toString(O)), true)]
303303
304304
305305 func bA (O) = [BooleanEntry(K(i, toString(O)), true)]
306306
307307
308308 func bB (U,V) = {
309309 let bC = aO(U, V, x)
310310 let bD = if ((bC != 0))
311311 then aS(U, V, x)
312312 else 0
313313 let bE = aO(U, V, y)
314314 let bF = if ((bE != 0))
315315 then aS(U, V, y)
316316 else 0
317317 [bD, bF]
318318 }
319319
320320
321321 func bG (bH) = if (aW())
322322 then aX(toString(bH))
323323 else true
324+
325+
326+@Callable(bI)
327+func internalSaveOrder (O,U,V,ba,bb,S,bc,bd,be,bf,bg,bh,bi,bj) = if ((bI.caller != this))
328+ then throw("Invalid saveOrderInternal params")
329+ else aZ(O, U, V, ba, bb, S, bc, bd, be, bf, bg, bh, bi, bj)
330+
324331
325332
326333 @Callable(bI)
327334 func cleanUpStaleOrders (U,V) = {
328335 let bJ = ai(U, V)
329336 let bK = bB(U, V)
330337 func bL (bM,O) = {
331338 let bN = valueOrErrorMessage(parseInt(O), "Invalid order id")
332339 let bO = au(bN)
333340 let bP = bO._1
334341 let bQ = bO._2
335342 let bR = bO._3
336343 let bS = bO._4
337344 let S = bO._5
338345 let bT = bO._6
339346 let bd = bO._7
340347 let bU = bO._8
341348 let bV = bO._9
342349 let bg = bO._10
343350 let bW = bO._11
344351 let bi = bO._12
345352 let bX = if (if (if ((S == t))
346353 then true
347354 else (S == u))
348355 then (bK[0] != bg)
349356 else false)
350357 then (bK[1] != bg)
351358 else false
352359 let bY = if (if ((S == v))
353360 then true
354361 else (S == w))
355362 then (C >= bi)
356363 else false
357364 if (if (bX)
358365 then true
359366 else bY)
360367 then {
361368 let bZ = bA(bN)
362369 let ca = bo(bM._1, bN, U, V, false)
363370 let cb = if (if ((S == v))
364371 then true
365372 else (S == w))
366373 then bd
367374 else 0
368375 $Tuple3(ca, (bM._2 ++ bZ), (bM._3 + cb))
369376 }
370377 else bM
371378 }
372379
373380 let cc = {
374381 let cd = bJ
375382 let ce = size(cd)
376383 let cf = $Tuple3(bJ, nil, 0)
377384 func cg (ch,ci) = if ((ci >= ce))
378385 then ch
379386 else bL(ch, cd[ci])
380387
381388 func cj (ch,ci) = if ((ci >= ce))
382389 then ch
383390 else throw("List size exceeds 10")
384391
385392 cj(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cf, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
386393 }
387394 let ck = cc._1
388395 let cl = cc._2
389396 let cb = cc._3
390397 let cm = if ((cb > 0))
391398 then {
392399 let cn = invoke(aa(), "withdraw", [toBase58String(Z()), cb], nil)
393400 if ((cn == cn))
394401 then nil
395402 else throw("Strict value is not equal to itself.")
396403 }
397404 else nil
398405 if ((cm == cm))
399406 then (((cl ++ bv(U, V, size(ck))) ++ bm(makeString(ck, ","), U, V)) ++ [ScriptTransfer(addressFromStringValue(V), cb, Z())])
400407 else throw("Strict value is not equal to itself.")
401408 }
402409
403410
404411
405412 @Callable(bI)
406413 func setContext (co) = if ((bI.caller != this))
407414 then throw("Only self-call")
408415 else [StringEntry(r, co)]
409416
410417
411418
412419 @Callable(bI)
413420 func resetContext () = if ((bI.caller != this))
414421 then throw("Only self-call")
415422 else [DeleteEntry(r)]
416423
417424
418425
419426 @Callable(bI)
420427 func initialize (cp,cq) = if (if (if (ac())
421428 then true
422429 else if ((0 > cq))
423430 then true
424431 else (cq > (D / 10)))
425432 then true
426433 else (bI.caller != this))
427434 then throw("Unable to initialize")
428435 else [StringEntry(a, toString(addressFromStringValue(cp))), IntegerEntry(o, cq), BooleanEntry(s, true)]
429436
430437
431438
432439 @Callable(bI)
433440 func changeSettings (cq,cr) = if (if ((bI.caller != Y()))
434441 then true
435442 else if ((0 > cq))
436443 then true
437444 else (cq > (D / 10)))
438445 then throw("Invalid changeSettings params")
439446 else [IntegerEntry(o, cq), BooleanEntry(p, cr)]
440447
441448
442449
443450 @Callable(bI)
444451 func addWhitelist (cs) = if ((bI.caller != Y()))
445452 then throw("Invalid addWhitelist params")
446453 else {
447454 func ct (bM,cu) = {
448455 let cv = addressFromStringValue(cu)
449456 if ((cv == cv))
450457 then (bM :+ BooleanEntry(K(q, toString(cv)), true))
451458 else throw("Strict value is not equal to itself.")
452459 }
453460
454461 let cd = split_4C(cs, ",")
455462 let ce = size(cd)
456463 let cf = nil
457464 func cg (ch,ci) = if ((ci >= ce))
458465 then ch
459466 else ct(ch, cd[ci])
460467
461468 func cj (ch,ci) = if ((ci >= ce))
462469 then ch
463470 else throw("List size exceeds 20")
464471
465472 cj(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cf, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
466473 }
467474
468475
469476
470477 @Callable(bI)
471478 func removeWhitelist (cs) = if ((bI.caller != Y()))
472479 then throw("Invalid removeWhitelist params")
473480 else {
474481 func ct (bM,cu) = {
475482 let cv = addressFromStringValue(cu)
476483 if ((cv == cv))
477484 then (bM :+ BooleanEntry(K(q, toString(cv)), false))
478485 else throw("Strict value is not equal to itself.")
479486 }
480487
481488 let cd = split_4C(cs, ",")
482489 let ce = size(cd)
483490 let cf = nil
484491 func cg (ch,ci) = if ((ci >= ce))
485492 then ch
486493 else ct(ch, cd[ci])
487494
488495 func cj (ch,ci) = if ((ci >= ce))
489496 then ch
490497 else throw("List size exceeds 20")
491498
492499 cj(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cf, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
493500 }
494501
495502
496503
497504 @Callable(bI)
498505 func createOrder (U,S,bc,bh,ba,bb,be,bf,cw,cx,cy,cz,bi,cA) = {
499506 let V = toString(bI.caller)
500507 let cB = invoke(addressFromStringValue(U), "updateOracle", [cA], nil)
501508 if ((cB == cB))
502509 then {
503510 let cC = invoke(this, "cleanUpStaleOrders", [U, V], nil)
504511 if ((cC == cC))
505512 then if ((size(bI.payments) > 1))
506513 then throw("Invalid createOrder parameters: invalid payment count")
507514 else {
508515 let cD = if ((size(bI.payments) == 1))
509516 then $Tuple2(toBase58String(valueOrErrorMessage(bI.payments[0].assetId, "Invalid asset id")), bI.payments[0].amount)
510517 else $Tuple2("", 0)
511518 let cE = cD._1
512519 let cF = cD._2
513520 let cG = invoke(this, "internalCreateOrder", [V, U, S, bc, bh, ba, bb, be, bf, cE, cF, bi], nil)
514521 if ((cG == cG))
515522 then {
516523 let ao = {
517524 let aI = cG
518525 if ($isInstanceOf(aI, "Int"))
519526 then {
520527 let aJ = aI
521528 aJ
522529 }
523530 else throw("Invalid ID of created order")
524531 }
525532 if (if ((S == v))
526533 then true
527534 else (S == w))
528535 then {
529536 let cH = if ((cw > 0))
530537 then {
531538 let cI = invoke(this, "internalCreateOrderRequest", [V, U, ao, t, cw, cx], nil)
532539 if ((cI == cI))
533540 then nil
534541 else throw("Strict value is not equal to itself.")
535542 }
536543 else nil
537544 let cJ = if ((cy > 0))
538545 then {
539546 let cK = invoke(this, "internalCreateOrderRequest", [V, U, ao, u, cy, cz], nil)
540547 if ((cK == cK))
541548 then nil
542549 else throw("Strict value is not equal to itself.")
543550 }
544551 else nil
545552 (cH ++ cJ)
546553 }
547554 else nil
548555 }
549556 else throw("Strict value is not equal to itself.")
550557 }
551558 else throw("Strict value is not equal to itself.")
552559 }
553560 else throw("Strict value is not equal to itself.")
554561 }
555562
556563
557564
558565 @Callable(bI)
559566 func increasePositionWithStopLoss (U,aP,bb,cL,bf,cw,cx,cy,cz,cA) = {
560567 let V = toString(bI.caller)
561568 let cC = invoke(this, "cleanUpStaleOrders", [U, V], nil)
562569 if ((cC == cC))
563570 then if (if (!(ac()))
564571 then true
565572 else !(ab(U)))
566573 then throw("Invalid increasePositionWithStopLoss parameters")
567574 else {
568575 let cM = aO(U, V, aP)
569576 if ((cM != 0))
570577 then throw("Invalid increasePositionWithStopLoss parameters: only new position")
571578 else {
572579 let cN = invoke(this, "setContext", [V], nil)
573580 if ((cN == cN))
574581 then {
575582 let cO = invoke(addressFromStringValue(U), "increasePosition", [aP, bb, cL, bf, cA], bI.payments)
576583 if ((cO == cO))
577584 then {
578585 let cP = invoke(this, "resetContext", nil, nil)
579586 if ((cP == cP))
580587 then {
581588 let cQ = aO(U, V, aP)
582589 if ((cQ == cQ))
583590 then {
584591 let ax = E(cQ)
585592 if ((ax == ax))
586593 then {
587594 let cR = if ((0 > cQ))
588595 then x
589596 else y
590597 let cS = if ((0 >= ax))
591598 then {
592599 let cT = makeString([U, V, toString(aP), toString(bb), toString(cL), bf, cA], ",")
593600 throw(((("Invalid amountIn=" + toString(ax)) + " after success increasePosition: ") + cT))
594601 }
595602 else 0
596603 if ((cS == cS))
597604 then {
598605 let cU = if ((cw > 0))
599606 then {
600607 let cU = invoke(this, "internalCreateOrder", [V, U, t, cw, cx, ax, 0, cR, bf, "", 0, 0], nil)
601608 if ((cU == cU))
602609 then nil
603610 else throw("Strict value is not equal to itself.")
604611 }
605612 else nil
606613 if ((cU == cU))
607614 then {
608615 let cV = if ((cy > 0))
609616 then {
610617 let cV = invoke(this, "internalCreateOrder", [V, U, u, cy, cz, ax, 0, cR, bf, "", 0, 0], nil)
611618 if ((cV == cV))
612619 then nil
613620 else throw("Strict value is not equal to itself.")
614621 }
615622 else nil
616623 if ((cV == cV))
617624 then nil
618625 else throw("Strict value is not equal to itself.")
619626 }
620627 else throw("Strict value is not equal to itself.")
621628 }
622629 else throw("Strict value is not equal to itself.")
623630 }
624631 else throw("Strict value is not equal to itself.")
625632 }
626633 else throw("Strict value is not equal to itself.")
627634 }
628635 else throw("Strict value is not equal to itself.")
629636 }
630637 else throw("Strict value is not equal to itself.")
631638 }
632639 else throw("Strict value is not equal to itself.")
633640 }
634641 }
635642 else throw("Strict value is not equal to itself.")
636643 }
637644
638645
639646
640647 @Callable(bI)
641648 func internalMarkOrderExecuted (U,V,O) = if (if (if (!(ac()))
642649 then true
643650 else !(ab(U)))
644651 then true
645652 else !((bI.caller == this)))
646653 then throw("Invalid internalMarkOrderExecuted parameters")
647654 else {
648655 let cW = (ag(U, V) - 1)
649656 ((bv(U, V, cW) ++ bs(O, U, V, false)) ++ bz(O))
650657 }
651658
652659
653660
654661 @Callable(bI)
655662 func internalCreateOrderRequest (V,U,O,S,bc,bh) = if (if (if (if (if (!(ac()))
656663 then true
657664 else !(ab(U)))
658665 then true
659666 else (0 >= bc))
660667 then true
661668 else (0 > bh))
662669 then true
663670 else !((bI.caller == this)))
664671 then throw("Invalid internalCreateOrderRequest parameters")
665672 else bk(O, U, V, S, bc, bh)
666673
667674
668675
669676 @Callable(bI)
670677 func internalCreateOrder (V,U,S,bc,bh,ba,bb,be,bf,cX,cY,bi) = if (if (if (if (if (if (if (if (if (if (!(ac()))
671678 then true
672679 else !(ab(U)))
673680 then true
674681 else (0 > bc))
675682 then true
676683 else (0 > bh))
677684 then true
678685 else (0 >= ba))
679686 then true
680687 else (0 > bb))
681688 then true
682689 else !(if ((be == x))
683690 then true
684691 else (be == y)))
685692 then true
686693 else !(if (if (if ((S == t))
687694 then true
688695 else (S == u))
689696 then true
690697 else (S == v))
691698 then true
692699 else (S == w)))
693700 then true
694701 else !((bI.caller == this)))
695702 then true
696703 else (0 > bi))
697704 then throw("Invalid internalCreateOrder parameters")
698705 else {
699706 let ao = (af() + 1)
700707 let cZ = aL(be, S)
701708 let cW = (ag(U, V) + 1)
702709 let cM = aO(U, V, cZ)
703710 let da = aF(U)
704711 let aP = if (if (if ((cM == 0))
705712 then true
706713 else if ((cM > 0))
707714 then (be == x)
708715 else false)
709716 then true
710717 else if ((0 > cM))
711718 then (be == y)
712719 else false)
713720 then z
714721 else A
715722 if (if ((cM == 0))
716723 then if ((S == t))
717724 then true
718725 else (S == u)
719726 else false)
720727 then throw("Can not create STOP/TAKE order: no position")
721728 else {
722729 let db = if ((aP == z))
723730 then if (if ((cX != toBase58String(Z())))
724731 then true
725732 else (cY != ba))
726733 then throw("Invalid createLimitOrder parameters: invalid payment")
727734 else {
728735 let dc = invoke(aa(), "deposit", nil, [AttachedPayment(Z(), cY)])
729736 if ((dc == dc))
730737 then cY
731738 else throw("Strict value is not equal to itself.")
732739 }
733740 else 0
734741 if ((db == db))
735742 then {
736743 let aC = if ((cM != 0))
737744 then aS(U, V, cZ)
738745 else 0
739746 if (if (if ((S == t))
740747 then true
741748 else (S == u))
742749 then (aC == 0)
743750 else false)
744751 then throw("STOP and TAKE order should be assigned to position with id != 0")
745752 else if ((cW > B))
746753 then throw("Invalid createLimitOrder parameters: order count")
747754 else {
748755 let dd = (((aZ(ao, U, V, ba, bb, S, bc, db, be, bf, aC, bh, bi, da) ++ bs(ao, U, V, true)) ++ bv(U, V, cW)) ++ bx(ao))
749756 $Tuple2(dd, ao)
750757 }
751758 }
752759 else throw("Strict value is not equal to itself.")
753760 }
754761 }
755762
756763
757764
758765 @Callable(bI)
759766 func cancelOrder (O) = {
760767 let de = au(O)
761768 let U = de._1
762769 let V = de._2
763770 let ba = de._3
764771 let bb = de._4
765772 let S = de._5
766773 let bc = de._6
767774 let df = de._7
768775 if (if (if (!(ac()))
769776 then true
770777 else !(ad(O)))
771778 then true
772779 else !((toString(bI.caller) == V)))
773780 then throw("Invalid cancelOrder parameters")
774781 else {
775782 let cC = invoke(this, "cleanUpStaleOrders", [U, V], nil)
776783 if ((cC == cC))
777784 then {
778785 let cW = (ag(U, V) - 1)
779786 let cm = if ((df > 0))
780787 then {
781788 let cn = invoke(aa(), "withdraw", [toBase58String(Z()), df], nil)
782789 if ((cn == cn))
783790 then nil
784791 else throw("Strict value is not equal to itself.")
785792 }
786793 else nil
787794 if ((cm == cm))
788795 then (((bA(O) ++ bs(O, U, V, false)) ++ bv(U, V, cW)) ++ (if ((df > 0))
789796 then [ScriptTransfer(bI.caller, df, Z())]
790797 else nil))
791798 else throw("Strict value is not equal to itself.")
792799 }
793800 else throw("Strict value is not equal to itself.")
794801 }
795802 }
796803
797804
798805
799806 @Callable(bI)
800807 func executeOrder (O,cA) = {
801808 let dg = au(O)
802809 let U = dg._1
803810 let V = dg._2
804811 let ba = dg._3
805812 let bb = dg._4
806813 let S = dg._5
807814 let bc = dg._6
808815 let df = dg._7
809816 let be = dg._8
810817 let bf = dg._9
811818 let bg = dg._10
812819 let bh = dg._11
813820 let bi = dg._12
814821 let bj = dg._13
815822 let cB = invoke(addressFromStringValue(U), "updateOracle", [cA], nil)
816823 if ((cB == cB))
817824 then {
818825 let cC = invoke(this, "cleanUpStaleOrders", [U, V], nil)
819826 if ((cC == cC))
820827 then {
821828 let bH = if ((bI.caller == this))
822829 then bI.originCaller
823830 else bI.caller
824831 if ((bH == bH))
825832 then {
826833 let cZ = aL(be, S)
827834 if (if (if (!(ac()))
828835 then true
829836 else !(ad(O)))
830837 then true
831838 else !(bG(bH)))
832839 then throw("Invalid executeOrder parameters")
833840 else {
834841 let cM = aO(U, V, cZ)
835842 if ((cM == cM))
836843 then {
837844 let dh = if ((cM != 0))
838845 then aS(U, V, cZ)
839846 else 0
840847 let di = if ((S == t))
841848 then {
842849 let dj = if ((cM > 0))
843850 then x
844851 else if ((0 > cM))
845852 then y
846853 else throw("Can not execute STOP order: no open position")
847854 let aE = aF(U)
848855 let dk = if ((be == dj))
849856 then throw("Can not execute STOP order: reduce only")
850857 else if ((dh != bg))
851858 then throw("Can not execute STOP order: position closed")
852859 else if ((dj == x))
853860 then (bc >= aE)
854861 else (aE >= bc)
855862 if (dk)
856863 then $Tuple3("closePosition", [J(ba, E(cM)), cZ, I(bh, E(cM)), false, cA], nil)
857864 else throw("Can not execute STOP order: triggerPrice mismatch")
858865 }
859866 else if ((S == u))
860867 then {
861868 let dj = if ((cM > 0))
862869 then x
863870 else if ((0 > cM))
864871 then y
865872 else throw("Can not execute STOP order: no open position")
866873 let aE = aF(U)
867874 let dk = if ((be == dj))
868875 then throw("Can not execute TAKE order: reduce only")
869876 else if ((dh != bg))
870877 then throw(((("Can not execute TAKE order: position closed " + toString(dh)) + "!=") + toString(bg)))
871878 else if ((dj == x))
872879 then (aE >= bc)
873880 else (bc >= aE)
874881 if (dk)
875882 then $Tuple3("closePosition", [J(ba, E(cM)), cZ, I(bh, E(cM)), false, cA], nil)
876883 else throw("Can not execute TAKE order: triggerPrice mismatch")
877884 }
878885 else if ((S == v))
879886 then {
880887 let aE = aF(U)
881888 let dl = if ((bh == 0))
882889 then true
883- else if ((bh > bj))
890+ else if ((be == x))
884891 then (aE >= bh)
885892 else (bh >= aE)
886893 let dm = if ((be == x))
887894 then (bc >= aE)
888895 else (aE >= bc)
889896 let dn = if (if ((bi == 0))
890897 then true
891898 else (bi >= C))
892899 then true
893900 else false
894901 let dk = if (if (dl)
895902 then dm
896903 else false)
897904 then dn
898905 else false
899906 if (dk)
900907 then {
901908 let do = G(df, (I(aK(U, V), bb) + D))
902909 let dp = I(do, bb)
903910 let dq = G(dp, bc)
904911 let dr = (dq - I(dq, ae()))
905912 $Tuple3("increasePosition", [be, bb, dr, bf, cA], [AttachedPayment(Z(), df)])
906913 }
907- else throw("Can not execute LIMIT order: triggerPrice mismatch")
914+ else if (if (if (dl)
915+ then dn
916+ else false)
917+ then (bh != 0)
918+ else false)
919+ then {
920+ let ds = invoke(this, "internalSaveOrder", [O, U, V, ba, bb, S, bc, df, be, bf, bg, 0, bi, bj], nil)
921+ if ((ds == ds))
922+ then $Tuple3("", nil, nil)
923+ else throw("Strict value is not equal to itself.")
924+ }
925+ else throw("Can not execute LIMIT order: triggerPrice mismatch")
908926 }
909927 else if ((S == w))
910928 then {
911929 let aE = aF(U)
912930 let dn = if (if ((bi == 0))
913931 then true
914932 else (bi >= C))
915933 then true
916934 else false
917935 let dk = dn
918936 if (dk)
919937 then $Tuple3("increasePosition", [be, bb, 0, bf, cA], [AttachedPayment(Z(), df)])
920938 else throw("Can not execute MARKET order: expiration mismatch")
921939 }
922940 else throw(("Invalid order type: " + toString(S)))
923- let ds = di._1
924- let dt = di._2
925- let du = di._3
926- let cm = if ((size(du) == 1))
941+ let dt = di._1
942+ let du = di._2
943+ let dv = di._3
944+ let cm = if ((size(dv) == 1))
927945 then {
928- let cn = invoke(aa(), "withdraw", [toBase58String(Z()), du[0].amount], nil)
946+ let cn = invoke(aa(), "withdraw", [toBase58String(Z()), dv[0].amount], nil)
929947 if ((cn == cn))
930948 then nil
931949 else throw("Strict value is not equal to itself.")
932950 }
933951 else nil
934952 if ((cm == cm))
935- then {
936- let cN = invoke(this, "setContext", [V], nil)
937- if ((cN == cN))
938- then {
939- let dv = invoke(addressFromStringValue(U), ds, dt, du)
940- if ((dv == dv))
941- then {
942- let cP = invoke(this, "resetContext", nil, nil)
943- if ((cP == cP))
944- then {
945- let dw = if (if ((S == v))
946- then true
947- else (S == w))
948- then {
949- let dx = aO(U, V, cZ)
950- if ((dx == dx))
951- then {
952- let dy = aS(U, V, cZ)
953- if ((dy == dy))
954- then {
955- let dz = (dx - cM)
956- let dA = if ((dx > 0))
957- then y
958- else x
959- let dB = if (ak(O, u))
960- then {
961- let dC = al(O, u)
962- let dD = dC._1
963- let dE = dC._2
964- let dF = dC._3
965- let dG = dC._4
966- let dH = dC._5
967- let dI = dC._6
968- let cG = invoke(this, "internalCreateOrder", [dF, dE, dG, dH, dI, dz, 0, dA, "", "", 0, 0], nil)
969- if ((cG == cG))
970- then nil
971- else throw("Strict value is not equal to itself.")
972- }
973- else nil
974- if ((dB == dB))
975- then {
976- let dJ = if (ak(O, t))
977- then {
978- let dK = al(O, t)
979- let dD = dK._1
980- let dE = dK._2
981- let dF = dK._3
982- let dG = dK._4
983- let dH = dK._5
984- let dI = dK._6
985- let cG = invoke(this, "internalCreateOrder", [dF, dE, dG, dH, dI, dz, 0, dA, "", "", 0, 0], nil)
986- if ((cG == cG))
987- then nil
988- else throw("Strict value is not equal to itself.")
989- }
990- else nil
991- if ((dJ == dJ))
992- then (dB ++ dJ)
993- else throw("Strict value is not equal to itself.")
994- }
995- else throw("Strict value is not equal to itself.")
996- }
997- else throw("Strict value is not equal to itself.")
998- }
999- else throw("Strict value is not equal to itself.")
1000- }
1001- else nil
1002- if ((dw == dw))
1003- then {
1004- let dL = invoke(this, "internalMarkOrderExecuted", [U, V, O], nil)
1005- if ((dL == dL))
1006- then nil
1007- else throw("Strict value is not equal to itself.")
1008- }
1009- else throw("Strict value is not equal to itself.")
1010- }
1011- else throw("Strict value is not equal to itself.")
1012- }
1013- else throw("Strict value is not equal to itself.")
1014- }
1015- else throw("Strict value is not equal to itself.")
1016- }
953+ then if ((dt != ""))
954+ then {
955+ let cN = invoke(this, "setContext", [V], nil)
956+ if ((cN == cN))
957+ then {
958+ let dw = invoke(addressFromStringValue(U), dt, du, dv)
959+ if ((dw == dw))
960+ then {
961+ let cP = invoke(this, "resetContext", nil, nil)
962+ if ((cP == cP))
963+ then {
964+ let dx = if (if ((S == v))
965+ then true
966+ else (S == w))
967+ then {
968+ let dy = aO(U, V, cZ)
969+ if ((dy == dy))
970+ then {
971+ let dz = aS(U, V, cZ)
972+ if ((dz == dz))
973+ then {
974+ let dA = (dy - cM)
975+ let dB = if ((dy > 0))
976+ then y
977+ else x
978+ let dC = if (ak(O, u))
979+ then {
980+ let dD = al(O, u)
981+ let dE = dD._1
982+ let dF = dD._2
983+ let dG = dD._3
984+ let dH = dD._4
985+ let dI = dD._5
986+ let dJ = dD._6
987+ let cG = invoke(this, "internalCreateOrder", [dG, dF, dH, dI, dJ, dA, 0, dB, "", "", 0, 0], nil)
988+ if ((cG == cG))
989+ then nil
990+ else throw("Strict value is not equal to itself.")
991+ }
992+ else nil
993+ if ((dC == dC))
994+ then {
995+ let dK = if (ak(O, t))
996+ then {
997+ let dL = al(O, t)
998+ let dE = dL._1
999+ let dF = dL._2
1000+ let dG = dL._3
1001+ let dH = dL._4
1002+ let dI = dL._5
1003+ let dJ = dL._6
1004+ let cG = invoke(this, "internalCreateOrder", [dG, dF, dH, dI, dJ, dA, 0, dB, "", "", 0, 0], nil)
1005+ if ((cG == cG))
1006+ then nil
1007+ else throw("Strict value is not equal to itself.")
1008+ }
1009+ else nil
1010+ if ((dK == dK))
1011+ then (dC ++ dK)
1012+ else throw("Strict value is not equal to itself.")
1013+ }
1014+ else throw("Strict value is not equal to itself.")
1015+ }
1016+ else throw("Strict value is not equal to itself.")
1017+ }
1018+ else throw("Strict value is not equal to itself.")
1019+ }
1020+ else nil
1021+ if ((dx == dx))
1022+ then {
1023+ let dM = invoke(this, "internalMarkOrderExecuted", [U, V, O], nil)
1024+ if ((dM == dM))
1025+ then nil
1026+ else throw("Strict value is not equal to itself.")
1027+ }
1028+ else throw("Strict value is not equal to itself.")
1029+ }
1030+ else throw("Strict value is not equal to itself.")
1031+ }
1032+ else throw("Strict value is not equal to itself.")
1033+ }
1034+ else throw("Strict value is not equal to itself.")
1035+ }
1036+ else nil
10171037 else throw("Strict value is not equal to itself.")
10181038 }
10191039 else throw("Strict value is not equal to itself.")
10201040 }
10211041 }
10221042 else throw("Strict value is not equal to itself.")
10231043 }
10241044 else throw("Strict value is not equal to itself.")
10251045 }
10261046 else throw("Strict value is not equal to itself.")
10271047 }
10281048
10291049
10301050
10311051 @Callable(bI)
10321052 func view_canExecuteOrder (O,cA) = {
10331053 let aG = invoke(this, "executeOrder", [O, cA], nil)
10341054 if ((aG == aG))
10351055 then throw("Success")
10361056 else throw("Strict value is not equal to itself.")
10371057 }
10381058
10391059
1040-@Verifier(dM)
1041-func dN () = {
1042- let dO = getString(this, a)
1043- if (isDefined(dO))
1060+
1061+@Callable(bI)
1062+func view_canActivateStopOrder (O,cA) = {
1063+ let aG = invoke(this, "activateStopOrder", [O, cA], nil)
1064+ if ((aG == aG))
1065+ then throw("Success")
1066+ else throw("Strict value is not equal to itself.")
1067+ }
1068+
1069+
1070+@Verifier(dN)
1071+func dO () = {
1072+ let dP = getString(this, a)
1073+ if (isDefined(dP))
10441074 then {
1045- let dP = getString(addressFromStringValue(value(dO)), b)
1046- if (isDefined(dP))
1047- then valueOrElse(getBoolean(addressFromStringValue(value(dP)), ((("status_" + toString(this)) + "_") + toBase58String(dM.id))), false)
1075+ let dQ = getString(addressFromStringValue(value(dP)), b)
1076+ if (isDefined(dQ))
1077+ then valueOrElse(getBoolean(addressFromStringValue(value(dQ)), ((("status_" + toString(this)) + "_") + toBase58String(dN.id))), false)
10481078 else throw("unable to verify: admin not set in coordinator")
10491079 }
1050- else sigVerify(dM.bodyBytes, dM.proofs[0], dM.senderPublicKey)
1080+ else sigVerify(dN.bodyBytes, dN.proofs[0], dN.senderPublicKey)
10511081 }
10521082

github/deemru/w8io/169f3d6 
185.07 ms