tx · 8pufVNXoeFDDA7ypxXQtZreGZ19ENt7DP81pHVvJkABX

3MyKAZyGakn6DvvgePYccmeEFR5XufZHPmD:  -0.05000000 Waves

2022.09.02 17:02 [2211597] smart account 3MyKAZyGakn6DvvgePYccmeEFR5XufZHPmD > SELF 0.00000000 Waves

{ "type": 13, "id": "8pufVNXoeFDDA7ypxXQtZreGZ19ENt7DP81pHVvJkABX", "fee": 5000000, "feeAssetId": null, "timestamp": 1662127381594, "version": 2, "chainId": 84, "sender": "3MyKAZyGakn6DvvgePYccmeEFR5XufZHPmD", "senderPublicKey": "6gi3c71QVs4Magr73Vi1QYfh6uvwCWeRju3mGGSVT2R4", "proofs": [ "4KvhRQFbZtWjQ3LXZJazm2TWAGexFLwBmm3kVTUBVSrQHzd6xd7A9tbk7XbeiNvkej5QDFgXiMqqJY8FyaNWKEHR" ], "script": "base64:BgJiCAISABIAEgMKAQESAwoBARILCgkBAQEBAQEBAQESEAoOAQEBAQEBAQgICAEBAQESAwoBARIFCgMBAQESBQoDAQEBEgASAwoBARIAEgMKAQgSABIDCgEIEgMKAQgSBAoCCAGDAQAJa19vcmFfa2V5AglrX29yYV9rZXkAD2tfb3JhX2Jsb2NrX2tleQIPa19vcmFfYmxvY2tfa2V5AAVrX29yYQIFa19vcmEACWtfYmFsYW5jZQIJa19iYWxhbmNlAA5rX3Bvc2l0aW9uU2l6ZQIOa19wb3NpdGlvblNpemUAEGtfcG9zaXRpb25NYXJnaW4CEGtfcG9zaXRpb25NYXJnaW4AFmtfcG9zaXRpb25PcGVuTm90aW9uYWwCFmtfcG9zaXRpb25PcGVuTm90aW9uYWwALmtfcG9zaXRpb25MYXN0VXBkYXRlZEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24CEmtfcG9zaXRpb25GcmFjdGlvbgAUa19wb3NpdGlvbkNsb3NlZERhdGUCFGtfcG9zaXRpb25DbG9zZWREYXRlAA1rX2luaXRpYWxpemVkAg1rX2luaXRpYWxpemVkAAhrX3BhdXNlZAIIa19wYXVzZWQABWtfZmVlAgVrX2ZlZQAPa19mdW5kaW5nUGVyaW9kAg9rX2Z1bmRpbmdQZXJpb2QAEWtfaW5pdE1hcmdpblJhdGlvAhFrX2luaXRNYXJnaW5SYXRpbwAYa19tYWludGVuYW5jZU1hcmdpblJhdGlvAgVrX21tcgAVa19saXF1aWRhdGlvbkZlZVJhdGlvAhVrX2xpcXVpZGF0aW9uRmVlUmF0aW8AGWtfcGFydGlhbExpcXVpZGF0aW9uUmF0aW8CFmtfcGFydExpcXVpZGF0aW9uUmF0aW8ADWtfc3ByZWFkTGltaXQCDWtfc3ByZWFkTGltaXQAEGtfbWF4UHJpY2VJbXBhY3QCEGtfbWF4UHJpY2VJbXBhY3QAEGtfbWF4UHJpY2VTcHJlYWQCEGtfbWF4UHJpY2VTcHJlYWQADWtfbGFzdERhdGFTdHICDWtfbGFzdERhdGFTdHIADmtfbGFzdE1pbnV0ZUlkAg5rX2xhc3RNaW51dGVJZAAda190d2FwRGF0YUxhc3RDdW11bGF0aXZlUHJpY2UCHWtfdHdhcERhdGFMYXN0Q3VtdWxhdGl2ZVByaWNlABNrX3R3YXBEYXRhTGFzdFByaWNlAhNrX3R3YXBEYXRhTGFzdFByaWNlABprX3R3YXBEYXRhUHJldmlvdXNNaW51dGVJZAIaa190d2FwRGF0YVByZXZpb3VzTWludXRlSWQAJWtfbGF0ZXN0TG9uZ0N1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24CG2tfbGF0ZXN0TG9uZ1ByZW1pdW1GcmFjdGlvbgAma19sYXRlc3RTaG9ydEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24CHGtfbGF0ZXN0U2hvcnRQcmVtaXVtRnJhY3Rpb24AEmtfbmV4dEZ1bmRpbmdCbG9jawIea19uZXh0RnVuZGluZ0Jsb2NrTWluVGltZXN0YW1wABFrX2xvbmdGdW5kaW5nUmF0ZQIRa19sb25nRnVuZGluZ1JhdGUAEmtfc2hvcnRGdW5kaW5nUmF0ZQISa19zaG9ydEZ1bmRpbmdSYXRlABNrX3F1b3RlQXNzZXRSZXNlcnZlAghrX3F0QXN0UgASa19iYXNlQXNzZXRSZXNlcnZlAghrX2JzQXN0UgATa190b3RhbFBvc2l0aW9uU2l6ZQITa190b3RhbFBvc2l0aW9uU2l6ZQAXa190b3RhbExvbmdQb3NpdGlvblNpemUCF2tfdG90YWxMb25nUG9zaXRpb25TaXplABhrX3RvdGFsU2hvcnRQb3NpdGlvblNpemUCGGtfdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQAUa19jdW11bGF0aXZlTm90aW9uYWwCFGtfY3VtdWxhdGl2ZU5vdGlvbmFsABZrX29wZW5JbnRlcmVzdE5vdGlvbmFsAhZrX29wZW5JbnRlcmVzdE5vdGlvbmFsABRrX2Nvb3JkaW5hdG9yQWRkcmVzcwIUa19jb29yZGluYXRvckFkZHJlc3MAE2tfaW5zdXJhbmNlX2FkZHJlc3MCE2tfaW5zdXJhbmNlX2FkZHJlc3MAD2tfYWRtaW5fYWRkcmVzcwIPa19hZG1pbl9hZGRyZXNzABJrX2FkbWluX3B1YmxpY19rZXkCEmtfYWRtaW5fcHVibGljX2tleQANa19xdW90ZV9hc3NldAINa19xdW90ZV9hc3NldAAPa19xdW90ZV9zdGFraW5nAg9rX3F1b3RlX3N0YWtpbmcAEWtfc3Rha2luZ19hZGRyZXNzAhFrX3N0YWtpbmdfYWRkcmVzcwAPa19taW5lcl9hZGRyZXNzAg9rX21pbmVyX2FkZHJlc3MAEGtfb3JkZXJzX2FkZHJlc3MCEGtfb3JkZXJzX2FkZHJlc3MBC2Nvb3JkaW5hdG9yAAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMFFGtfY29vcmRpbmF0b3JBZGRyZXNzAhNDb29yZGluYXRvciBub3Qgc2V0AQxhZG1pbkFkZHJlc3MACQCmCAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQtjb29yZGluYXRvcgAFD2tfYWRtaW5fYWRkcmVzcwEOYWRtaW5QdWJsaWNLZXkACQDZBAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQtjb29yZGluYXRvcgAFEmtfYWRtaW5fcHVibGljX2tleQEKcXVvdGVBc3NldAAJANkEAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBC2Nvb3JkaW5hdG9yAAUNa19xdW90ZV9hc3NldAERcXVvdGVBc3NldFN0YWtpbmcACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBC2Nvb3JkaW5hdG9yAAUPa19xdW90ZV9zdGFraW5nAhtRdW90ZSBhc3NldCBzdGFraW5nIG5vdCBzZXQBDnN0YWtpbmdBZGRyZXNzAAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQtjb29yZGluYXRvcgAFEWtfc3Rha2luZ19hZGRyZXNzAg9TdGFraW5nIG5vdCBzZXQBEGluc3VyYW5jZUFkZHJlc3MACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBC2Nvb3JkaW5hdG9yAAUTa19pbnN1cmFuY2VfYWRkcmVzcwIRSW5zdXJhbmNlIG5vdCBzZXQBDG1pbmVyQWRkcmVzcwAJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQERQGV4dHJOYXRpdmUoMTA1MykCCQELY29vcmRpbmF0b3IABQ9rX21pbmVyX2FkZHJlc3MCDU1pbmVyIG5vdCBzZXQBDW9yZGVyc0FkZHJlc3MACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBC2Nvb3JkaW5hdG9yAAUQa19vcmRlcnNfYWRkcmVzcwIOT3JkZXJzIG5vdCBzZXQACERJUl9MT05HAAEACURJUl9TSE9SVAACAA1UV0FQX0lOVEVSVkFMAA8AD09SQUNMRV9JTlRFUlZBTAAPAAdTRUNPTkRTAOgHAAxERUNJTUFMX1VOSVQJAGgCAAEJAGgCCQBoAgkAaAIJAGgCCQBoAgAKAAoACgAKAAoACgAHT05FX0RBWQkAaAIAgKMFBQxERUNJTUFMX1VOSVQACEFMTF9GRUVTAGQAD1BOTF9PUFRJT05fU1BPVAABABFQTkxfT1BUSU9OX09SQUNMRQACAQFzAQJfeAkArAICCQCkAwEFAl94AgEsAQRkaXZkAgJfeAJfeQkAbgQFAl94BQxERUNJTUFMX1VOSVQFAl95BQhIQUxGRVZFTgEEbXVsZAICX3gCX3kJAG4EBQJfeAUCX3kFDERFQ0lNQUxfVU5JVAUISEFMRkVWRU4BA2FicwECX3gDCQBmAgUCX3gAAAUCX3gJAQEtAQUCX3gBBHZtYXgCAl94Al95AwkAZwIFAl94BQJfeQUCX3gFAl95AQ50b0NvbXBvc2l0ZUtleQIEX2tleQhfYWRkcmVzcwkArAICCQCsAgIFBF9rZXkCAV8FCF9hZGRyZXNzAQlsaXN0VG9TdHIBBV9saXN0CgEFX2pvaW4CC2FjY3VtdWxhdG9yA3ZhbAkArAICCQCsAgIFC2FjY3VtdWxhdG9yBQN2YWwCASwECm5ld0xpc3RTdHIKAAIkbAUFX2xpc3QKAAIkcwkAkAMBBQIkbAoABSRhY2MwAgAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBBV9qb2luAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAyMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQEC25ld0xpc3RTdHJVCQCzAgIFCm5ld0xpc3RTdHIAAQQLbmV3TGlzdFN0clIDCQAAAgkArwICBQtuZXdMaXN0U3RyVQABAgEsCQCwAgIFC25ld0xpc3RTdHJVAAEFC25ld0xpc3RTdHJVBQtuZXdMaXN0U3RyUgEJc3RyVG9MaXN0AQRfc3RyCQC1CQIFBF9zdHICASwBC3B1c2hUb1F1ZXVlAwVfbGlzdAhfbWF4U2l6ZQZfdmFsdWUDCQBmAgkAkAMBBQVfbGlzdAUIX21heFNpemUJAM0IAgkA0QgCBQVfbGlzdAAABQZfdmFsdWUJAM0IAgUFX2xpc3QFBl92YWx1ZQEDaW50AQFrCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUEdGhpcwUBawkArAICAg1ubyB2YWx1ZSBmb3IgBQFrAQhjYmFsYW5jZQAJAQNpbnQBBQlrX2JhbGFuY2UBA2ZlZQAJAQNpbnQBBQVrX2ZlZQEPaW5pdE1hcmdpblJhdGlvAAkBA2ludAEFEWtfaW5pdE1hcmdpblJhdGlvAQZxdEFzdFIACQEDaW50AQUTa19xdW90ZUFzc2V0UmVzZXJ2ZQEGYnNBc3RSAAkBA2ludAEFEmtfYmFzZUFzc2V0UmVzZXJ2ZQERdG90YWxQb3NpdGlvblNpemUACQEDaW50AQUTa190b3RhbFBvc2l0aW9uU2l6ZQESY3VtdWxhdGl2ZU5vdGlvbmFsAAkBA2ludAEFFGtfY3VtdWxhdGl2ZU5vdGlvbmFsARRvcGVuSW50ZXJlc3ROb3Rpb25hbAAJAQNpbnQBBRZrX29wZW5JbnRlcmVzdE5vdGlvbmFsARluZXh0RnVuZGluZ0Jsb2NrVGltZXN0YW1wAAkBA2ludAEFEmtfbmV4dEZ1bmRpbmdCbG9jawEQZnVuZGluZ1BlcmlvZFJhdwAJAQNpbnQBBQ9rX2Z1bmRpbmdQZXJpb2QBFGZ1bmRpbmdQZXJpb2REZWNpbWFsAAkAaAIJARBmdW5kaW5nUGVyaW9kUmF3AAUMREVDSU1BTF9VTklUARRmdW5kaW5nUGVyaW9kU2Vjb25kcwAJAGgCCQEQZnVuZGluZ1BlcmlvZFJhdwAFB1NFQ09ORFMBFm1haW50ZW5hbmNlTWFyZ2luUmF0aW8ACQEDaW50AQUYa19tYWludGVuYW5jZU1hcmdpblJhdGlvARNsaXF1aWRhdGlvbkZlZVJhdGlvAAkBA2ludAEFFWtfbGlxdWlkYXRpb25GZWVSYXRpbwEXcGFydGlhbExpcXVpZGF0aW9uUmF0aW8ACQEDaW50AQUZa19wYXJ0aWFsTGlxdWlkYXRpb25SYXRpbwELc3ByZWFkTGltaXQACQEDaW50AQUNa19zcHJlYWRMaW1pdAEObWF4UHJpY2VJbXBhY3QACQEDaW50AQUQa19tYXhQcmljZUltcGFjdAEObWF4UHJpY2VTcHJlYWQACQEDaW50AQUQa19tYXhQcmljZVNwcmVhZAEjbGF0ZXN0TG9uZ0N1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24ACQEDaW50AQUla19sYXRlc3RMb25nQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgEkbGF0ZXN0U2hvcnRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAAkBA2ludAEFJmtfbGF0ZXN0U2hvcnRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uARZ0b3RhbFNob3J0UG9zaXRpb25TaXplAAkBA2ludAEFGGtfdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQEVdG90YWxMb25nUG9zaXRpb25TaXplAAkBA2ludAEFF2tfdG90YWxMb25nUG9zaXRpb25TaXplAQ9nZXRBY3R1YWxDYWxsZXIBAWkJAQt2YWx1ZU9yRWxzZQIJAJ0IAgkBDW9yZGVyc0FkZHJlc3MAAghrX3NlbmRlcgkApQgBCAUBaQZjYWxsZXIBFnJlcXVpcmVNb3JlTWFyZ2luUmF0aW8DDF9tYXJnaW5SYXRpbxBfYmFzZU1hcmdpblJhdGlvFF9sYXJnZXJUaGFuT3JFcXVhbFRvBBRyZW1haW5pbmdNYXJnaW5SYXRpbwkAZQIFDF9tYXJnaW5SYXRpbwUQX2Jhc2VNYXJnaW5SYXRpbwMDBRRfbGFyZ2VyVGhhbk9yRXF1YWxUbwkAZgIAAAUUcmVtYWluaW5nTWFyZ2luUmF0aW8HCQACAQIOSW52YWxpZCBtYXJnaW4DAwkBASEBBRRfbGFyZ2VyVGhhbk9yRXF1YWxUbwkAZwIFFHJlbWFpbmluZ01hcmdpblJhdGlvAAAHCQACAQIOSW52YWxpZCBtYXJnaW4GAR9sYXRlc3RDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAQ1fcG9zaXRpb25TaXplAwkAAAIFDV9wb3NpdGlvblNpemUAAAkAAgECLFNob3VsZCBub3QgYmUgY2FsbGVkIHdpdGggX3Bvc2l0aW9uU2l6ZSA9PSAwAwkAZgIFDV9wb3NpdGlvblNpemUAAAkBI2xhdGVzdExvbmdDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAAkBJGxhdGVzdFNob3J0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgABC2dldFBvc2l0aW9uAQdfdHJhZGVyBA9wb3NpdGlvblNpemVPcHQJAJoIAgUEdGhpcwkBDnRvQ29tcG9zaXRlS2V5AgUOa19wb3NpdGlvblNpemUFB190cmFkZXIEByRtYXRjaDAFD3Bvc2l0aW9uU2l6ZU9wdAMJAAECBQckbWF0Y2gwAgNJbnQEDHBvc2l0aW9uU2l6ZQUHJG1hdGNoMAkAlgoEBQxwb3NpdGlvblNpemUJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAQ50b0NvbXBvc2l0ZUtleQIFEGtfcG9zaXRpb25NYXJnaW4FB190cmFkZXIJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAQ50b0NvbXBvc2l0ZUtleQIFFmtfcG9zaXRpb25PcGVuTm90aW9uYWwFB190cmFkZXIJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAQ50b0NvbXBvc2l0ZUtleQIFLmtfcG9zaXRpb25MYXN0VXBkYXRlZEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24FB190cmFkZXIJAJYKBAAAAAAAAAAAARNyZXF1aXJlT3BlblBvc2l0aW9uAQdfdHJhZGVyAwkAAAIICQELZ2V0UG9zaXRpb24BBQdfdHJhZGVyAl8xAAAJAAIBAhBObyBvcGVuIHBvc2l0aW9uBgELaW5pdGlhbGl6ZWQACQELdmFsdWVPckVsc2UCCQCbCAIFBHRoaXMFDWtfaW5pdGlhbGl6ZWQHAQZwYXVzZWQACQELdmFsdWVPckVsc2UCCQCbCAIFBHRoaXMFCGtfcGF1c2VkBwENdXBkYXRlUmVzZXJ2ZQMGX2lzQWRkEV9xdW90ZUFzc2V0QW1vdW50EF9iYXNlQXNzZXRBbW91bnQDBQZfaXNBZGQEB25ld0Jhc2UJAGUCCQEGYnNBc3RSAAUQX2Jhc2VBc3NldEFtb3VudAMJAGcCAAAFB25ld0Jhc2UJAAIBAipUeCBsZWFkIHRvIGJhc2UgYXNzZXQgcmVzZXJ2ZSA8PSAwLCByZXZlcnQJAJYKBAkAZAIJAQZxdEFzdFIABRFfcXVvdGVBc3NldEFtb3VudAUHbmV3QmFzZQkAZAIJARF0b3RhbFBvc2l0aW9uU2l6ZQAFEF9iYXNlQXNzZXRBbW91bnQJAGQCCQESY3VtdWxhdGl2ZU5vdGlvbmFsAAURX3F1b3RlQXNzZXRBbW91bnQECG5ld1F1b3RlCQBlAgkBBnF0QXN0UgAFEV9xdW90ZUFzc2V0QW1vdW50AwkAZwIAAAUIbmV3UXVvdGUJAAIBAipUeCBsZWFkIHRvIGJhc2UgcXVvdGUgcmVzZXJ2ZSA8PSAwLCByZXZlcnQJAJYKBAUIbmV3UXVvdGUJAGQCCQEGYnNBc3RSAAUQX2Jhc2VBc3NldEFtb3VudAkAZQIJARF0b3RhbFBvc2l0aW9uU2l6ZQAFEF9iYXNlQXNzZXRBbW91bnQJAGUCCQESY3VtdWxhdGl2ZU5vdGlvbmFsAAURX3F1b3RlQXNzZXRBbW91bnQBCXN3YXBJbnB1dAIGX2lzQWRkEV9xdW90ZUFzc2V0QW1vdW50BAdfcXRBc3RSCQEGcXRBc3RSAAQHX2JzQXN0UgkBBmJzQXN0UgAEAWsJAQRtdWxkAgUHX3F0QXN0UgUHX2JzQXN0UgQWcXVvdGVBc3NldFJlc2VydmVBZnRlcgMFBl9pc0FkZAkAZAIFB19xdEFzdFIFEV9xdW90ZUFzc2V0QW1vdW50CQBlAgUHX3F0QXN0UgURX3F1b3RlQXNzZXRBbW91bnQEFWJhc2VBc3NldFJlc2VydmVBZnRlcgkBBGRpdmQCBQFrBRZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyBBhhbW91bnRCYXNlQXNzZXRCb3VnaHRBYnMJAQNhYnMBCQBlAgUVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyBQdfYnNBc3RSBBVhbW91bnRCYXNlQXNzZXRCb3VnaHQDBQZfaXNBZGQFGGFtb3VudEJhc2VBc3NldEJvdWdodEFicwkBAS0BBRhhbW91bnRCYXNlQXNzZXRCb3VnaHRBYnMEDSR0MDEyNjA1MTI3OTgJAQ11cGRhdGVSZXNlcnZlAwUGX2lzQWRkBRFfcXVvdGVBc3NldEFtb3VudAUYYW1vdW50QmFzZUFzc2V0Qm91Z2h0QWJzBBdxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyMQgFDSR0MDEyNjA1MTI3OTgCXzEEFmJhc2VBc3NldFJlc2VydmVBZnRlcjEIBQ0kdDAxMjYwNTEyNzk4Al8yBBd0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyMQgFDSR0MDEyNjA1MTI3OTgCXzMEGGN1bXVsYXRpdmVOb3Rpb25hbEFmdGVyMQgFDSR0MDEyNjA1MTI3OTgCXzQEC3ByaWNlQmVmb3JlCQEEZGl2ZAIFB19xdEFzdFIFB19ic0FzdFIEC21hcmtldFByaWNlCQEEZGl2ZAIFEV9xdW90ZUFzc2V0QW1vdW50BRhhbW91bnRCYXNlQXNzZXRCb3VnaHRBYnMECXByaWNlRGlmZgkBA2FicwEJAGUCBQtwcmljZUJlZm9yZQULbWFya2V0UHJpY2UEC3ByaWNlSW1wYWN0CQBlAgUMREVDSU1BTF9VTklUCQEEZGl2ZAIFC3ByaWNlQmVmb3JlCQBkAgULcHJpY2VCZWZvcmUFCXByaWNlRGlmZgQTbWF4UHJpY2VJbXBhY3RWYWx1ZQkBDm1heFByaWNlSW1wYWN0AAMJAGYCBQtwcmljZUltcGFjdAUTbWF4UHJpY2VJbXBhY3RWYWx1ZQkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgINUHJpY2UgaW1wYWN0IAkApAMBBQtwcmljZUltcGFjdAIUID4gbWF4IHByaWNlIGltcGFjdCAJAKQDAQUTbWF4UHJpY2VJbXBhY3RWYWx1ZQIVIGJlZm9yZSBxdW90ZSBhc3NldDogCQCkAwEFB19xdEFzdFICFCBiZWZvcmUgYmFzZSBhc3NldDogCQCkAwEFB19ic0FzdFICISBxdW90ZSBhc3NldCBhbW91bnQgdG8gZXhjaGFuZ2U6IAkApAMBBRFfcXVvdGVBc3NldEFtb3VudAIPIHByaWNlIGJlZm9yZTogCQCkAwEFC3ByaWNlQmVmb3JlAg4gbWFya2V0UHJpY2U6IAkApAMBBQttYXJrZXRQcmljZQkAlwoFBRVhbW91bnRCYXNlQXNzZXRCb3VnaHQFF3F1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIxBRZiYXNlQXNzZXRSZXNlcnZlQWZ0ZXIxBRd0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyMQUYY3VtdWxhdGl2ZU5vdGlvbmFsQWZ0ZXIxASJjYWxjUmVtYWluTWFyZ2luV2l0aEZ1bmRpbmdQYXltZW50BBBfb2xkUG9zaXRpb25TaXplEl9vbGRQb3NpdGlvbk1hcmdpbiVfb2xkUG9zaXRpb25DdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uDF9tYXJnaW5EZWx0YQQOZnVuZGluZ1BheW1lbnQDCQECIT0CBRBfb2xkUG9zaXRpb25TaXplAAAEIF9sYXRlc3RDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uCQEfbGF0ZXN0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgEFEF9vbGRQb3NpdGlvblNpemUJAQRtdWxkAgkAZQIFIF9sYXRlc3RDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uBSVfb2xkUG9zaXRpb25DdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uBRBfb2xkUG9zaXRpb25TaXplAAAEDHNpZ25lZE1hcmdpbgkAZAIJAGUCBQxfbWFyZ2luRGVsdGEFDmZ1bmRpbmdQYXltZW50BRJfb2xkUG9zaXRpb25NYXJnaW4EDSR0MDE0Mjg5MTQ0MTYDCQBmAgAABQxzaWduZWRNYXJnaW4JAJQKAgAACQEDYWJzAQUMc2lnbmVkTWFyZ2luCQCUCgIJAQNhYnMBBQxzaWduZWRNYXJnaW4AAAQMcmVtYWluTWFyZ2luCAUNJHQwMTQyODkxNDQxNgJfMQQHYmFkRGVidAgFDSR0MDE0Mjg5MTQ0MTYCXzIJAJUKAwUMcmVtYWluTWFyZ2luBQdiYWREZWJ0BQ5mdW5kaW5nUGF5bWVudAEWc3dhcE91dHB1dFdpdGhSZXNlcnZlcwUGX2lzQWRkEF9iYXNlQXNzZXRBbW91bnQUX2NoZWNrTWF4UHJpY2VJbXBhY3QSX3F1b3RlQXNzZXRSZXNlcnZlEV9iYXNlQXNzZXRSZXNlcnZlBAtwcmljZUJlZm9yZQkBBGRpdmQCBRJfcXVvdGVBc3NldFJlc2VydmUFEV9iYXNlQXNzZXRSZXNlcnZlAwkAAAIFEF9iYXNlQXNzZXRBbW91bnQAAAkAAgECGUludmFsaWQgYmFzZSBhc3NldCBhbW91bnQEAWsJAQRtdWxkAgUSX3F1b3RlQXNzZXRSZXNlcnZlBRFfYmFzZUFzc2V0UmVzZXJ2ZQQYYmFzZUFzc2V0UG9vbEFtb3VudEFmdGVyAwUGX2lzQWRkCQBkAgURX2Jhc2VBc3NldFJlc2VydmUFEF9iYXNlQXNzZXRBbW91bnQJAGUCBRFfYmFzZUFzc2V0UmVzZXJ2ZQUQX2Jhc2VBc3NldEFtb3VudAQPcXVvdGVBc3NldEFmdGVyCQEEZGl2ZAIFAWsFGGJhc2VBc3NldFBvb2xBbW91bnRBZnRlcgQOcXVvdGVBc3NldFNvbGQJAQNhYnMBCQBlAgUPcXVvdGVBc3NldEFmdGVyBRJfcXVvdGVBc3NldFJlc2VydmUEE21heFByaWNlSW1wYWN0VmFsdWUJAQ5tYXhQcmljZUltcGFjdAAEDSR0MDE1MzkzMTU1ODYJAQ11cGRhdGVSZXNlcnZlAwkBASEBBQZfaXNBZGQFDnF1b3RlQXNzZXRTb2xkBRBfYmFzZUFzc2V0QW1vdW50BBdxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyMQgFDSR0MDE1MzkzMTU1ODYCXzEEFmJhc2VBc3NldFJlc2VydmVBZnRlcjEIBQ0kdDAxNTM5MzE1NTg2Al8yBBd0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyMQgFDSR0MDE1MzkzMTU1ODYCXzMEGGN1bXVsYXRpdmVOb3Rpb25hbEFmdGVyMQgFDSR0MDE1MzkzMTU1ODYCXzQEC21hcmtldFByaWNlCQEEZGl2ZAIFDnF1b3RlQXNzZXRTb2xkBRBfYmFzZUFzc2V0QW1vdW50BAlwcmljZURpZmYJAQNhYnMBCQBlAgULcHJpY2VCZWZvcmUFC21hcmtldFByaWNlBAtwcmljZUltcGFjdAkAZQIFDERFQ0lNQUxfVU5JVAkBBGRpdmQCBQtwcmljZUJlZm9yZQkAZAIFC3ByaWNlQmVmb3JlBQlwcmljZURpZmYDAwkAZgIFC3ByaWNlSW1wYWN0BRNtYXhQcmljZUltcGFjdFZhbHVlBRRfY2hlY2tNYXhQcmljZUltcGFjdAcJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICDVByaWNlIGltcGFjdCAJAKQDAQULcHJpY2VJbXBhY3QCFCA+IG1heCBwcmljZSBpbXBhY3QgCQCkAwEFE21heFByaWNlSW1wYWN0VmFsdWUCFSBiZWZvcmUgcXVvdGUgYXNzZXQ6IAkApAMBBRJfcXVvdGVBc3NldFJlc2VydmUCFCBiZWZvcmUgYmFzZSBhc3NldDogCQCkAwEFEV9iYXNlQXNzZXRSZXNlcnZlAiAgYmFzZSBhc3NldCBhbW91bnQgdG8gZXhjaGFuZ2U6IAkApAMBBRBfYmFzZUFzc2V0QW1vdW50Ag8gcHJpY2UgYmVmb3JlOiAJAKQDAQULcHJpY2VCZWZvcmUCDyBtYXJrZXQgcHJpY2U6IAkApAMBBQttYXJrZXRQcmljZQkAmgoIBQ5xdW90ZUFzc2V0U29sZAUXcXVvdGVBc3NldFJlc2VydmVBZnRlcjEFFmJhc2VBc3NldFJlc2VydmVBZnRlcjEFF3RvdGFsUG9zaXRpb25TaXplQWZ0ZXIxBRhjdW11bGF0aXZlTm90aW9uYWxBZnRlcjEJAGUCCQEVdG90YWxMb25nUG9zaXRpb25TaXplAAMFBl9pc0FkZAkBA2FicwEFEF9iYXNlQXNzZXRBbW91bnQAAAkAZQIJARZ0b3RhbFNob3J0UG9zaXRpb25TaXplAAMJAQEhAQUGX2lzQWRkCQEDYWJzAQUQX2Jhc2VBc3NldEFtb3VudAAABQtwcmljZUltcGFjdAEKc3dhcE91dHB1dAMGX2lzQWRkEF9iYXNlQXNzZXRBbW91bnQUX2NoZWNrTWF4UHJpY2VJbXBhY3QJARZzd2FwT3V0cHV0V2l0aFJlc2VydmVzBQUGX2lzQWRkBRBfYmFzZUFzc2V0QW1vdW50BRRfY2hlY2tNYXhQcmljZUltcGFjdAkBBnF0QXN0UgAJAQZic0FzdFIAARJnZXRPcmFjbGVUd2FwUHJpY2UABAZvcmFjbGUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzBQVrX29yYQIABAhwcmljZUtleQkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwUJa19vcmFfa2V5BAhibG9ja0tleQkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwUPa19vcmFfYmxvY2tfa2V5BAlsYXN0VmFsdWUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQZvcmFjbGUFCHByaWNlS2V5CQCsAgIJAKwCAgkArAICAiJDYW4gbm90IGdldCBvcmFjbGUgcHJpY2UuIE9yYWNsZTogCQClCAEFBm9yYWNsZQIGIGtleTogBQhwcmljZUtleQUJbGFzdFZhbHVlARlyZXF1aXJlTm90T3ZlclNwcmVhZExpbWl0AhJfcXVvdGVBc3NldFJlc2VydmURX2Jhc2VBc3NldFJlc2VydmUEC29yYWNsZVByaWNlCQESZ2V0T3JhY2xlVHdhcFByaWNlAAQKcHJpY2VBZnRlcgkBBGRpdmQCBRJfcXVvdGVBc3NldFJlc2VydmUFEV9iYXNlQXNzZXRSZXNlcnZlBAxhdmVyYWdlUHJpY2UJAQRkaXZkAgkAZAIFC29yYWNsZVByaWNlBQpwcmljZUFmdGVyCQBoAgACBQxERUNJTUFMX1VOSVQEDGFic1ByaWNlRGlmZgkBBGRpdmQCCQEDYWJzAQkAZQIFC29yYWNsZVByaWNlBQpwcmljZUFmdGVyBQxhdmVyYWdlUHJpY2UDCQBmAgUMYWJzUHJpY2VEaWZmCQEObWF4UHJpY2VTcHJlYWQACQACAQkArAICCQCsAgIJAKwCAgINUHJpY2Ugc3ByZWFkIAkApAMBBQxhYnNQcmljZURpZmYCFCA+IG1heCBwcmljZSBzcHJlYWQgCQCkAwEJAQ5tYXhQcmljZVNwcmVhZAAGAQxnZXRTcG90UHJpY2UABBJfcXVvdGVBc3NldFJlc2VydmUJAQZxdEFzdFIABBFfYmFzZUFzc2V0UmVzZXJ2ZQkBBmJzQXN0UgAJAQRkaXZkAgUSX3F1b3RlQXNzZXRSZXNlcnZlBRFfYmFzZUFzc2V0UmVzZXJ2ZQEWaXNPdmVyRmx1Y3R1YXRpb25MaW1pdAAEC29yYWNsZVByaWNlCQESZ2V0T3JhY2xlVHdhcFByaWNlAAQMY3VycmVudFByaWNlCQEMZ2V0U3BvdFByaWNlAAkAZgIJAQRkaXZkAgkBA2FicwEJAGUCBQtvcmFjbGVQcmljZQUMY3VycmVudFByaWNlBQtvcmFjbGVQcmljZQkBC3NwcmVhZExpbWl0AAEfZ2V0UG9zaXRpb25BZGp1c3RlZE9wZW5Ob3Rpb25hbAQNX3Bvc2l0aW9uU2l6ZQdfb3B0aW9uEl9xdW90ZUFzc2V0UmVzZXJ2ZRFfYmFzZUFzc2V0UmVzZXJ2ZQQPcG9zaXRpb25TaXplQWJzCQEDYWJzAQUNX3Bvc2l0aW9uU2l6ZQQHaXNTaG9ydAkAZgIAAAUNX3Bvc2l0aW9uU2l6ZQQQcG9zaXRpb25Ob3Rpb25hbAMJAAACBQdfb3B0aW9uBQ9QTkxfT1BUSU9OX1NQT1QEDSR0MDE4ODA0MTg5NzUJARZzd2FwT3V0cHV0V2l0aFJlc2VydmVzBQkBASEBBQdpc1Nob3J0BQ9wb3NpdGlvblNpemVBYnMHBRJfcXVvdGVBc3NldFJlc2VydmUFEV9iYXNlQXNzZXRSZXNlcnZlBBNvdXRQb3NpdGlvbk5vdGlvbmFsCAUNJHQwMTg4MDQxODk3NQJfMQQCeDEIBQ0kdDAxODgwNDE4OTc1Al8yBAJ4MggFDSR0MDE4ODA0MTg5NzUCXzMEAngzCAUNJHQwMTg4MDQxODk3NQJfNAUTb3V0UG9zaXRpb25Ob3Rpb25hbAkBBG11bGQCBQ9wb3NpdGlvblNpemVBYnMJARJnZXRPcmFjbGVUd2FwUHJpY2UABRBwb3NpdGlvbk5vdGlvbmFsASNnZXRQb3NpdGlvbk5vdGlvbmFsQW5kVW5yZWFsaXplZFBubAIHX3RyYWRlcgdfb3B0aW9uBA0kdDAxOTM2OTE5NDk3CQELZ2V0UG9zaXRpb24BBQdfdHJhZGVyBAxwb3NpdGlvblNpemUIBQ0kdDAxOTM2OTE5NDk3Al8xBA5wb3NpdGlvbk1hcmdpbggFDSR0MDE5MzY5MTk0OTcCXzIEFHBvc2l0aW9uT3Blbk5vdGlvbmFsCAUNJHQwMTkzNjkxOTQ5NwJfMwQRcG9zaXRpb25Mc3RVcGRDUEYIBQ0kdDAxOTM2OTE5NDk3Al80AwkAAAIFDHBvc2l0aW9uU2l6ZQAACQACAQIVSW52YWxpZCBwb3NpdGlvbiBzaXplBAdpc1Nob3J0CQBmAgAABQxwb3NpdGlvblNpemUEEHBvc2l0aW9uTm90aW9uYWwJAR9nZXRQb3NpdGlvbkFkanVzdGVkT3Blbk5vdGlvbmFsBAUMcG9zaXRpb25TaXplBQdfb3B0aW9uCQEGcXRBc3RSAAkBBmJzQXN0UgAEDXVucmVhbGl6ZWRQbmwDBQdpc1Nob3J0CQBlAgUUcG9zaXRpb25PcGVuTm90aW9uYWwFEHBvc2l0aW9uTm90aW9uYWwJAGUCBRBwb3NpdGlvbk5vdGlvbmFsBRRwb3NpdGlvbk9wZW5Ob3Rpb25hbAkAlAoCBRBwb3NpdGlvbk5vdGlvbmFsBQ11bnJlYWxpemVkUG5sAQ9jYWxjTWFyZ2luUmF0aW8DDV9yZW1haW5NYXJnaW4IX2JhZERlYnQRX3Bvc2l0aW9uTm90aW9uYWwJAQRkaXZkAgkAZQIFDV9yZW1haW5NYXJnaW4FCF9iYWREZWJ0BRFfcG9zaXRpb25Ob3Rpb25hbAEWZ2V0TWFyZ2luUmF0aW9CeU9wdGlvbgIHX3RyYWRlcgdfb3B0aW9uBA0kdDAyMDMzMDIwNDQxCQELZ2V0UG9zaXRpb24BBQdfdHJhZGVyBAxwb3NpdGlvblNpemUIBQ0kdDAyMDMzMDIwNDQxAl8xBA5wb3NpdGlvbk1hcmdpbggFDSR0MDIwMzMwMjA0NDECXzIEA3BvbggFDSR0MDIwMzMwMjA0NDECXzMEEXBvc2l0aW9uTHN0VXBkQ1BGCAUNJHQwMjAzMzAyMDQ0MQJfNAQNJHQwMjA0NDcyMDU0MAkBI2dldFBvc2l0aW9uTm90aW9uYWxBbmRVbnJlYWxpemVkUG5sAgUHX3RyYWRlcgUHX29wdGlvbgQQcG9zaXRpb25Ob3Rpb25hbAgFDSR0MDIwNDQ3MjA1NDACXzEEDXVucmVhbGl6ZWRQbmwIBQ0kdDAyMDQ0NzIwNTQwAl8yBA0kdDAyMDU0NTIwNzExCQEiY2FsY1JlbWFpbk1hcmdpbldpdGhGdW5kaW5nUGF5bWVudAQFDHBvc2l0aW9uU2l6ZQUOcG9zaXRpb25NYXJnaW4FEXBvc2l0aW9uTHN0VXBkQ1BGBQ11bnJlYWxpemVkUG5sBAxyZW1haW5NYXJnaW4IBQ0kdDAyMDU0NTIwNzExAl8xBAdiYWREZWJ0CAUNJHQwMjA1NDUyMDcxMQJfMgkBD2NhbGNNYXJnaW5SYXRpbwMFDHJlbWFpbk1hcmdpbgUHYmFkRGVidAUQcG9zaXRpb25Ob3Rpb25hbAEOZ2V0TWFyZ2luUmF0aW8BB190cmFkZXIJARZnZXRNYXJnaW5SYXRpb0J5T3B0aW9uAgUHX3RyYWRlcgUPUE5MX09QVElPTl9TUE9UARtnZXRQYXJ0aWFsTGlxdWlkYXRpb25BbW91bnQCB190cmFkZXINX3Bvc2l0aW9uU2l6ZQQMbWF4aW11bVJhdGlvCQEEdm1heAIJARdwYXJ0aWFsTGlxdWlkYXRpb25SYXRpbwAJAGUCBQxERUNJTUFMX1VOSVQJAQRkaXZkAgkBDmdldE1hcmdpblJhdGlvAQUHX3RyYWRlcgkBFm1haW50ZW5hbmNlTWFyZ2luUmF0aW8ABBhtYXhFeGNoYW5nZWRQb3NpdGlvblNpemUJAQRtdWxkAgkBA2FicwEFDV9wb3NpdGlvblNpemUFDG1heGltdW1SYXRpbwQKc3dhcFJlc3VsdAkBCnN3YXBPdXRwdXQDCQBmAgUNX3Bvc2l0aW9uU2l6ZQAABRhtYXhFeGNoYW5nZWRQb3NpdGlvblNpemUHBBxtYXhFeGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50CAUKc3dhcFJlc3VsdAJfMQQLcHJpY2VJbXBhY3QIBQpzd2FwUmVzdWx0Al84AwkAZgIJAQ5tYXhQcmljZUltcGFjdAAFC3ByaWNlSW1wYWN0BRxtYXhFeGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50BBVleGNoYW5nZWRQb3NpdGlvblNpemUJAQRtdWxkAgkBA2FicwEFDV9wb3NpdGlvblNpemUJARdwYXJ0aWFsTGlxdWlkYXRpb25SYXRpbwAEGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQICQEKc3dhcE91dHB1dAMJAGYCBQ1fcG9zaXRpb25TaXplAAAFFWV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQcCXzEFGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQBFWludGVybmFsQ2xvc2VQb3NpdGlvbgIHX3RyYWRlchRfY2hlY2tNYXhQcmljZUltcGFjdAQNJHQwMjE4OTMyMjAyMQkBC2dldFBvc2l0aW9uAQUHX3RyYWRlcgQMcG9zaXRpb25TaXplCAUNJHQwMjE4OTMyMjAyMQJfMQQOcG9zaXRpb25NYXJnaW4IBQ0kdDAyMTg5MzIyMDIxAl8yBBRwb3NpdGlvbk9wZW5Ob3Rpb25hbAgFDSR0MDIxODkzMjIwMjECXzMEEXBvc2l0aW9uTHN0VXBkQ1BGCAUNJHQwMjE4OTMyMjAyMQJfNAQNdW5yZWFsaXplZFBubAgJASNnZXRQb3NpdGlvbk5vdGlvbmFsQW5kVW5yZWFsaXplZFBubAIFB190cmFkZXIFD1BOTF9PUFRJT05fU1BPVAJfMgQNJHQwMjIxMTYyMjI4NAkBImNhbGNSZW1haW5NYXJnaW5XaXRoRnVuZGluZ1BheW1lbnQEBQxwb3NpdGlvblNpemUFDnBvc2l0aW9uTWFyZ2luBRFwb3NpdGlvbkxzdFVwZENQRgUNdW5yZWFsaXplZFBubAQMcmVtYWluTWFyZ2luCAUNJHQwMjIxMTYyMjI4NAJfMQQHYmFkRGVidAgFDSR0MDIyMTE2MjIyODQCXzIEFWV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQkBAS0BBQxwb3NpdGlvblNpemUEC3JlYWxpemVkUG5sBQ11bnJlYWxpemVkUG5sBA1tYXJnaW5Ub1ZhdWx0CQEBLQEFDHJlbWFpbk1hcmdpbgQNJHQwMjI0MTEyMjcyMgkBCnN3YXBPdXRwdXQDCQBmAgUMcG9zaXRpb25TaXplAAAJAQNhYnMBBQxwb3NpdGlvblNpemUFFF9jaGVja01heFByaWNlSW1wYWN0BBlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50CAUNJHQwMjI0MTEyMjcyMgJfMQQWcXVvdGVBc3NldFJlc2VydmVBZnRlcggFDSR0MDIyNDExMjI3MjICXzIEFWJhc2VBc3NldFJlc2VydmVBZnRlcggFDSR0MDIyNDExMjI3MjICXzMEFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIIBQ0kdDAyMjQxMTIyNzIyAl80BBdjdW11bGF0aXZlTm90aW9uYWxBZnRlcggFDSR0MDIyNDExMjI3MjICXzUEDnRvdGFsTG9uZ0FmdGVyCAUNJHQwMjI0MTEyMjcyMgJfNgQPdG90YWxTaG9ydEFmdGVyCAUNJHQwMjI0MTEyMjcyMgJfNwQZb3BlbkludGVyZXN0Tm90aW9uYWxBZnRlcgkAZQIJARRvcGVuSW50ZXJlc3ROb3Rpb25hbAAFFHBvc2l0aW9uT3Blbk5vdGlvbmFsCQCeCgwFFWV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQUHYmFkRGVidAULcmVhbGl6ZWRQbmwFDW1hcmdpblRvVmF1bHQFFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIFFWJhc2VBc3NldFJlc2VydmVBZnRlcgUWdG90YWxQb3NpdGlvblNpemVBZnRlcgUXY3VtdWxhdGl2ZU5vdGlvbmFsQWZ0ZXIFGW9wZW5JbnRlcmVzdE5vdGlvbmFsQWZ0ZXIFGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQFDnRvdGFsTG9uZ0FmdGVyBQ90b3RhbFNob3J0QWZ0ZXIBEGdldFR3YXBTcG90UHJpY2UABAhtaW51dGVJZAkAaQIJAGkCCAUJbGFzdEJsb2NrCXRpbWVzdGFtcADoBwA8BA1zdGFydE1pbnV0ZUlkCQBlAgUIbWludXRlSWQFDVRXQVBfSU5URVJWQUwEB2xpc3RTdHIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwUNa19sYXN0RGF0YVN0cgIABARsaXN0CQC1CQIFB2xpc3RTdHICASwKAQhmaWx0ZXJGbgILYWNjdW11bGF0b3IEbmV4dAMJAGcCBQ1zdGFydE1pbnV0ZUlkCQENcGFyc2VJbnRWYWx1ZQEFBG5leHQJAM0IAgULYWNjdW11bGF0b3IJAQ1wYXJzZUludFZhbHVlAQUEbmV4dAULYWNjdW11bGF0b3IEBWxpc3RGCgACJGwFBGxpc3QKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCGZpbHRlckZuAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAyMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQECG1heEluZGV4AwkAZgIJAJADAQUFbGlzdEYAAAkAlgMBBQVsaXN0RgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxpc3QAAAQMbGFzdE1pbnV0ZUlkCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFDmtfbGFzdE1pbnV0ZUlkAAAEFmVuZExhc3RDdW11bGF0aXZlUHJpY2UJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICCQCsAgIFHWtfdHdhcERhdGFMYXN0Q3VtdWxhdGl2ZVByaWNlAgFfCQCkAwEFDGxhc3RNaW51dGVJZAAABAxlbmRMYXN0UHJpY2UJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICCQCsAgIFE2tfdHdhcERhdGFMYXN0UHJpY2UCAV8JAKQDAQUMbGFzdE1pbnV0ZUlkAAAEEm5vd0N1bXVsYXRpdmVQcmljZQkAZAIFFmVuZExhc3RDdW11bGF0aXZlUHJpY2UJAGgCCQBlAgUIbWludXRlSWQFDGxhc3RNaW51dGVJZAUMZW5kTGFzdFByaWNlBBhzdGFydExhc3RDdW11bGF0aXZlUHJpY2UJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICCQCsAgIFHWtfdHdhcERhdGFMYXN0Q3VtdWxhdGl2ZVByaWNlAgFfCQCkAwEFCG1heEluZGV4AAAEDnN0YXJ0TGFzdFByaWNlCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgkArAICBRNrX3R3YXBEYXRhTGFzdFByaWNlAgFfCQCkAwEFCG1heEluZGV4AAAEFHN0YXJ0Q3VtdWxhdGl2ZVByaWNlCQBkAgUYc3RhcnRMYXN0Q3VtdWxhdGl2ZVByaWNlCQBoAgkAZQIFDXN0YXJ0TWludXRlSWQFCG1heEluZGV4BQ5zdGFydExhc3RQcmljZQkAaQIJAGUCBRJub3dDdW11bGF0aXZlUHJpY2UFFHN0YXJ0Q3VtdWxhdGl2ZVByaWNlBQ1UV0FQX0lOVEVSVkFMAQ51cGRhdGVTZXR0aW5ncwkQX2luaXRNYXJnaW5SYXRpbwRfbW1yFF9saXF1aWRhdGlvbkZlZVJhdGlvDl9mdW5kaW5nUGVyaW9kBF9mZWUMX3NwcmVhZExpbWl0D19tYXhQcmljZUltcGFjdBhfcGFydGlhbExpcXVpZGF0aW9uUmF0aW8PX21heFByaWNlU3ByZWFkCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRFrX2luaXRNYXJnaW5SYXRpbwUQX2luaXRNYXJnaW5SYXRpbwkAzAgCCQEMSW50ZWdlckVudHJ5AgUYa19tYWludGVuYW5jZU1hcmdpblJhdGlvBQRfbW1yCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRVrX2xpcXVpZGF0aW9uRmVlUmF0aW8FFF9saXF1aWRhdGlvbkZlZVJhdGlvCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ9rX2Z1bmRpbmdQZXJpb2QFDl9mdW5kaW5nUGVyaW9kCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQVrX2ZlZQUEX2ZlZQkAzAgCCQEMSW50ZWdlckVudHJ5AgUNa19zcHJlYWRMaW1pdAUMX3NwcmVhZExpbWl0CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRBrX21heFByaWNlSW1wYWN0BQ9fbWF4UHJpY2VJbXBhY3QJAMwIAgkBDEludGVnZXJFbnRyeQIFGWtfcGFydGlhbExpcXVpZGF0aW9uUmF0aW8FGF9wYXJ0aWFsTGlxdWlkYXRpb25SYXRpbwkAzAgCCQEMSW50ZWdlckVudHJ5AgUQa19tYXhQcmljZVNwcmVhZAUPX21heFByaWNlU3ByZWFkBQNuaWwBDXVwZGF0ZUZ1bmRpbmcFEV9uZXh0RnVuZGluZ0Jsb2NrJF9sYXRlc3RMb25nQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbiVfbGF0ZXN0U2hvcnRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uEF9sb25nRnVuZGluZ1JhdGURX3Nob3J0RnVuZGluZ1JhdGUJAMwIAgkBDEludGVnZXJFbnRyeQIFEmtfbmV4dEZ1bmRpbmdCbG9jawURX25leHRGdW5kaW5nQmxvY2sJAMwIAgkBDEludGVnZXJFbnRyeQIFJWtfbGF0ZXN0TG9uZ0N1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24FJF9sYXRlc3RMb25nQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgkAzAgCCQEMSW50ZWdlckVudHJ5AgUma19sYXRlc3RTaG9ydEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24FJV9sYXRlc3RTaG9ydEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24JAMwIAgkBDEludGVnZXJFbnRyeQIFEWtfbG9uZ0Z1bmRpbmdSYXRlBRBfbG9uZ0Z1bmRpbmdSYXRlCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRJrX3Nob3J0RnVuZGluZ1JhdGUFEV9zaG9ydEZ1bmRpbmdSYXRlBQNuaWwBDnVwZGF0ZVBvc2l0aW9uBQhfYWRkcmVzcwVfc2l6ZQdfbWFyZ2luDV9vcGVuTm90aW9uYWwgX2xhdGVzdEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24JAMwIAgkBDEludGVnZXJFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFDmtfcG9zaXRpb25TaXplBQhfYWRkcmVzcwUFX3NpemUJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFEGtfcG9zaXRpb25NYXJnaW4FCF9hZGRyZXNzBQdfbWFyZ2luCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBRZrX3Bvc2l0aW9uT3Blbk5vdGlvbmFsBQhfYWRkcmVzcwUNX29wZW5Ob3Rpb25hbAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUua19wb3NpdGlvbkxhc3RVcGRhdGVkQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgUIX2FkZHJlc3MFIF9sYXRlc3RDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uBQNuaWwBCmFwcGVuZFR3YXABBXByaWNlBAhtaW51dGVJZAkAaQIJAGkCCAUJbGFzdEJsb2NrCXRpbWVzdGFtcADoBwA8BBBwcmV2aW91c01pbnV0ZUlkCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFDmtfbGFzdE1pbnV0ZUlkAAADCQBmAgUQcHJldmlvdXNNaW51dGVJZAUIbWludXRlSWQJAAIBAhFUV0FQIG91dC1vZi1vcmRlcgQMbGFzdE1pbnV0ZUlkAwkAAAIFEHByZXZpb3VzTWludXRlSWQAAAUIbWludXRlSWQFEHByZXZpb3VzTWludXRlSWQDCQBmAgUIbWludXRlSWQFEHByZXZpb3VzTWludXRlSWQEE3ByZXZDdW11bGF0aXZlUHJpY2UJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICCQCsAgIFHWtfdHdhcERhdGFMYXN0Q3VtdWxhdGl2ZVByaWNlAgFfCQCkAwEFEHByZXZpb3VzTWludXRlSWQAAAQJcHJldlByaWNlCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgkArAICBRNrX3R3YXBEYXRhTGFzdFByaWNlAgFfCQCkAwEFEHByZXZpb3VzTWludXRlSWQFBXByaWNlBBNsYXN0Q3VtdWxhdGl2ZVByaWNlCQBkAgUTcHJldkN1bXVsYXRpdmVQcmljZQkAaAIJAGUCBQhtaW51dGVJZAUMbGFzdE1pbnV0ZUlkBQlwcmV2UHJpY2UEBGxpc3QJAQtwdXNoVG9RdWV1ZQMJAQlzdHJUb0xpc3QBCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMFDWtfbGFzdERhdGFTdHICAAUNVFdBUF9JTlRFUlZBTAkApAMBBQhtaW51dGVJZAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUda190d2FwRGF0YUxhc3RDdW11bGF0aXZlUHJpY2UJAKQDAQUIbWludXRlSWQFE2xhc3RDdW11bGF0aXZlUHJpY2UJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFE2tfdHdhcERhdGFMYXN0UHJpY2UJAKQDAQUIbWludXRlSWQFBXByaWNlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBRprX3R3YXBEYXRhUHJldmlvdXNNaW51dGVJZAkApAMBBQhtaW51dGVJZAUQcHJldmlvdXNNaW51dGVJZAkAzAgCCQEMSW50ZWdlckVudHJ5AgUOa19sYXN0TWludXRlSWQFCG1pbnV0ZUlkCQDMCAIJAQtTdHJpbmdFbnRyeQIFDWtfbGFzdERhdGFTdHIJAQlsaXN0VG9TdHIBBQRsaXN0BQNuaWwEGHR3YXBEYXRhUHJldmlvdXNNaW51dGVJZAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQEOdG9Db21wb3NpdGVLZXkCBRprX3R3YXBEYXRhUHJldmlvdXNNaW51dGVJZAkApAMBBQhtaW51dGVJZAAABBNwcmV2Q3VtdWxhdGl2ZVByaWNlCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAQ50b0NvbXBvc2l0ZUtleQIFHWtfdHdhcERhdGFMYXN0Q3VtdWxhdGl2ZVByaWNlCQCkAwEFGHR3YXBEYXRhUHJldmlvdXNNaW51dGVJZAAABAlwcmV2UHJpY2UJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkBDnRvQ29tcG9zaXRlS2V5AgUTa190d2FwRGF0YUxhc3RQcmljZQkApAMBBRh0d2FwRGF0YVByZXZpb3VzTWludXRlSWQFBXByaWNlBBNsYXN0Q3VtdWxhdGl2ZVByaWNlCQBkAgUTcHJldkN1bXVsYXRpdmVQcmljZQkAaAIJAGUCBQhtaW51dGVJZAUYdHdhcERhdGFQcmV2aW91c01pbnV0ZUlkBQlwcmV2UHJpY2UJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFHWtfdHdhcERhdGFMYXN0Q3VtdWxhdGl2ZVByaWNlCQCkAwEFCG1pbnV0ZUlkBRNsYXN0Q3VtdWxhdGl2ZVByaWNlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBRNrX3R3YXBEYXRhTGFzdFByaWNlCQCkAwEFCG1pbnV0ZUlkBQVwcmljZQUDbmlsARF1cGRhdGVBbW1SZXNlcnZlcwIHX3F0QXN0UgdfYnNBc3RSCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRNrX3F1b3RlQXNzZXRSZXNlcnZlBQdfcXRBc3RSCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRJrX2Jhc2VBc3NldFJlc2VydmUFB19ic0FzdFIFA25pbAEJdXBkYXRlQW1tBwdfcXRBc3RSB19ic0FzdFIXX3RvdGFsUG9zaXRpb25TaXplQWZ0ZXIYX2N1bXVsYXRpdmVOb3Rpb25hbEFmdGVyFV9vcGVuSW50ZXJlc3ROb3Rpb25hbBZfdG90YWxMb25nUG9zaXRpb25TaXplF190b3RhbFNob3J0UG9zaXRpb25TaXplAwkBAiE9AgkAZQIFFl90b3RhbExvbmdQb3NpdGlvblNpemUFF190b3RhbFNob3J0UG9zaXRpb25TaXplBRdfdG90YWxQb3NpdGlvblNpemVBZnRlcgkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhhJbnZhbGlkIEFNTSBzdGF0ZSBkYXRhOiAJAKQDAQUWX3RvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQIEICsgIAkApAMBBRdfdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQIEICE9IAkApAMBBRdfdG90YWxQb3NpdGlvblNpemVBZnRlcgkAzggCCQDOCAIJARF1cGRhdGVBbW1SZXNlcnZlcwIFB19xdEFzdFIFB19ic0FzdFIJAMwIAgkBDEludGVnZXJFbnRyeQIFE2tfdG90YWxQb3NpdGlvblNpemUFF190b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRRrX2N1bXVsYXRpdmVOb3Rpb25hbAUYX2N1bXVsYXRpdmVOb3Rpb25hbEFmdGVyCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRZrX29wZW5JbnRlcmVzdE5vdGlvbmFsBRVfb3BlbkludGVyZXN0Tm90aW9uYWwJAMwIAgkBDEludGVnZXJFbnRyeQIFF2tfdG90YWxMb25nUG9zaXRpb25TaXplBRZfdG90YWxMb25nUG9zaXRpb25TaXplCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRhrX3RvdGFsU2hvcnRQb3NpdGlvblNpemUFF190b3RhbFNob3J0UG9zaXRpb25TaXplBQNuaWwJAQphcHBlbmRUd2FwAQkBBGRpdmQCBQdfcXRBc3RSBQdfYnNBc3RSAQ5kZWxldGVQb3NpdGlvbgEIX2FkZHJlc3MJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBDnRvQ29tcG9zaXRlS2V5AgUOa19wb3NpdGlvblNpemUFCF9hZGRyZXNzCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ50b0NvbXBvc2l0ZUtleQIFEGtfcG9zaXRpb25NYXJnaW4FCF9hZGRyZXNzCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ50b0NvbXBvc2l0ZUtleQIFFmtfcG9zaXRpb25PcGVuTm90aW9uYWwFCF9hZGRyZXNzCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ50b0NvbXBvc2l0ZUtleQIFLmtfcG9zaXRpb25MYXN0VXBkYXRlZEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24FCF9hZGRyZXNzCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBRRrX3Bvc2l0aW9uQ2xvc2VkRGF0ZQUIX2FkZHJlc3MIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQNuaWwBCHdpdGhkcmF3AghfYWRkcmVzcwdfYW1vdW50BAdiYWxhbmNlCQDwBwIFBHRoaXMJAQpxdW90ZUFzc2V0AAMJAGYCBQdfYW1vdW50BQdiYWxhbmNlCQACAQkArAICCQCsAgIJAKwCAgITVW5hYmxlIHRvIHdpdGhkcmF3IAkApAMBBQdfYW1vdW50AhcgZnJvbSBjb250cmFjdCBiYWxhbmNlIAkApAMBBQdiYWxhbmNlCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFCF9hZGRyZXNzBQdfYW1vdW50CQEKcXVvdGVBc3NldAAFA25pbAENdXBkYXRlQmFsYW5jZQEBaQMJAGYCAAAFAWkJAAIBAgdCYWxhbmNlCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlrX2JhbGFuY2UFAWkFA25pbAELdHJhbnNmZXJGZWUBAWkJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBDnN0YWtpbmdBZGRyZXNzAAUBaQkBCnF1b3RlQXNzZXQABQNuaWwRAWkBBXBhdXNlAAMJAQIhPQIIBQFpBmNhbGxlcgkBDGFkbWluQWRkcmVzcwAJAAIBAhpJbnZhbGlkIHRvZ2dsZVBhdXNlIHBhcmFtcwkAzAgCCQEMQm9vbGVhbkVudHJ5AgUIa19wYXVzZWQGBQNuaWwBaQEHdW5wYXVzZQADCQECIT0CCAUBaQZjYWxsZXIJAQxhZG1pbkFkZHJlc3MACQACAQIaSW52YWxpZCB0b2dnbGVQYXVzZSBwYXJhbXMJAMwIAgkBDEJvb2xlYW5FbnRyeQIFCGtfcGF1c2VkBwUDbmlsAWkBDGFkZExpcXVpZGl0eQERX3F1b3RlQXNzZXRBbW91bnQDAwkBAiE9AggFAWkGY2FsbGVyCQEMYWRtaW5BZGRyZXNzAAYJAGcCAAAFEV9xdW90ZUFzc2V0QW1vdW50CQACAQIbSW52YWxpZCBhZGRMaXF1aWRpdHkgcGFyYW1zBAdfcXRBc3RSCQEGcXRBc3RSAAQHX2JzQXN0UgkBBmJzQXN0UgAEBXByaWNlCQEEZGl2ZAIFB19xdEFzdFIFB19ic0FzdFIEFGJhc2VBc3NldEFtb3VudFRvQWRkCQEEZGl2ZAIFEV9xdW90ZUFzc2V0QW1vdW50BQVwcmljZQQLcXRBc3RSQWZ0ZXIJAGQCBQdfcXRBc3RSBRFfcXVvdGVBc3NldEFtb3VudAQLYnNBc3RSQWZ0ZXIJAGQCBQdfYnNBc3RSBRRiYXNlQXNzZXRBbW91bnRUb0FkZAkBEXVwZGF0ZUFtbVJlc2VydmVzAgULcXRBc3RSQWZ0ZXIFC2JzQXN0UkFmdGVyAWkBD3JlbW92ZUxpcXVpZGl0eQERX3F1b3RlQXNzZXRBbW91bnQDAwkBAiE9AggFAWkGY2FsbGVyCQEMYWRtaW5BZGRyZXNzAAYJAGcCAAAFEV9xdW90ZUFzc2V0QW1vdW50CQACAQIeSW52YWxpZCByZW1vdmVMaXF1aWRpdHkgcGFyYW1zBAdfcXRBc3RSCQEGcXRBc3RSAAQHX2JzQXN0UgkBBmJzQXN0UgAEBXByaWNlCQEEZGl2ZAIFB19xdEFzdFIFB19ic0FzdFIEF2Jhc2VBc3NldEFtb3VudFRvUmVtb3ZlCQEEZGl2ZAIFEV9xdW90ZUFzc2V0QW1vdW50BQVwcmljZQQLcXRBc3RSQWZ0ZXIJAGUCBQdfcXRBc3RSBRFfcXVvdGVBc3NldEFtb3VudAQLYnNBc3RSQWZ0ZXIJAGUCBQdfYnNBc3RSBRdiYXNlQXNzZXRBbW91bnRUb1JlbW92ZQkBEXVwZGF0ZUFtbVJlc2VydmVzAgULcXRBc3RSQWZ0ZXIFC2JzQXN0UkFmdGVyAWkBDmNoYW5nZVNldHRpbmdzCRBfaW5pdE1hcmdpblJhdGlvBF9tbXIUX2xpcXVpZGF0aW9uRmVlUmF0aW8OX2Z1bmRpbmdQZXJpb2QEX2ZlZQxfc3ByZWFkTGltaXQPX21heFByaWNlSW1wYWN0GF9wYXJ0aWFsTGlxdWlkYXRpb25SYXRpbw9fbWF4UHJpY2VTcHJlYWQDCQECIT0CCAUBaQZjYWxsZXIJAQxhZG1pbkFkZHJlc3MACQACAQIdSW52YWxpZCBjaGFuZ2VTZXR0aW5ncyBwYXJhbXMJAQ51cGRhdGVTZXR0aW5ncwkFEF9pbml0TWFyZ2luUmF0aW8FBF9tbXIFFF9saXF1aWRhdGlvbkZlZVJhdGlvBQ5fZnVuZGluZ1BlcmlvZAUEX2ZlZQUMX3NwcmVhZExpbWl0BQ9fbWF4UHJpY2VJbXBhY3QFGF9wYXJ0aWFsTGlxdWlkYXRpb25SYXRpbwUPX21heFByaWNlU3ByZWFkAWkBCmluaXRpYWxpemUOB19xdEFzdFIHX2JzQXN0Ug5fZnVuZGluZ1BlcmlvZBBfaW5pdE1hcmdpblJhdGlvBF9tbXIUX2xpcXVpZGF0aW9uRmVlUmF0aW8EX2ZlZQdfb3JhY2xlCl9vcmFjbGVLZXkMX2Nvb3JkaW5hdG9yDF9zcHJlYWRMaW1pdA9fbWF4UHJpY2VJbXBhY3QYX3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvD19tYXhQcmljZVNwcmVhZAMDAwMDAwMDAwMDAwkAZwIAAAUHX3F0QXN0UgYJAGcCAAAFB19ic0FzdFIGCQBnAgAABQ5fZnVuZGluZ1BlcmlvZAYJAGcCAAAFEF9pbml0TWFyZ2luUmF0aW8GCQBnAgAABQRfbW1yBgkAZwIAAAUUX2xpcXVpZGF0aW9uRmVlUmF0aW8GCQBnAgAABQRfZmVlBgkAZwIAAAUMX3NwcmVhZExpbWl0BgkAZwIAAAUPX21heFByaWNlSW1wYWN0BgkAZwIAAAUYX3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvBgkAZwIAAAUPX21heFByaWNlU3ByZWFkBgkBC2luaXRpYWxpemVkAAkAAgECHUludmFsaWQgaW5pdGlhbGl6ZSBwYXJhbWV0ZXJzCQDOCAIJAM4IAgkAzggCCQDOCAIJAQl1cGRhdGVBbW0HBQdfcXRBc3RSBQdfYnNBc3RSAAAAAAAAAAAAAAkBDnVwZGF0ZVNldHRpbmdzCQUQX2luaXRNYXJnaW5SYXRpbwUEX21tcgUUX2xpcXVpZGF0aW9uRmVlUmF0aW8FDl9mdW5kaW5nUGVyaW9kBQRfZmVlBQxfc3ByZWFkTGltaXQFD19tYXhQcmljZUltcGFjdAUYX3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvBQ9fbWF4UHJpY2VTcHJlYWQJAQ11cGRhdGVGdW5kaW5nBQkAZAIIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQ5fZnVuZGluZ1BlcmlvZAAAAAAAAAAACQENdXBkYXRlQmFsYW5jZQEAAAkAzAgCCQEMQm9vbGVhbkVudHJ5AgUNa19pbml0aWFsaXplZAYJAMwIAgkBC1N0cmluZ0VudHJ5AgUFa19vcmEFB19vcmFjbGUJAMwIAgkBC1N0cmluZ0VudHJ5AgUJa19vcmFfa2V5BQpfb3JhY2xlS2V5CQDMCAIJAQtTdHJpbmdFbnRyeQIFFGtfY29vcmRpbmF0b3JBZGRyZXNzBQxfY29vcmRpbmF0b3IFA25pbAFpARJzZXRJbml0TWFyZ2luUmF0aW8BEF9pbml0TWFyZ2luUmF0aW8DAwkAZwIAAAUQX2luaXRNYXJnaW5SYXRpbwYJAQEhAQkBC2luaXRpYWxpemVkAAkAAgECJUludmFsaWQgc2V0SW5pdE1hcmdpblJhdGlvIHBhcmFtZXRlcnMJAQ51cGRhdGVTZXR0aW5ncwkFEF9pbml0TWFyZ2luUmF0aW8JARZtYWludGVuYW5jZU1hcmdpblJhdGlvAAkBE2xpcXVpZGF0aW9uRmVlUmF0aW8ACQEQZnVuZGluZ1BlcmlvZFJhdwAJAQNmZWUACQELc3ByZWFkTGltaXQACQEObWF4UHJpY2VJbXBhY3QACQEXcGFydGlhbExpcXVpZGF0aW9uUmF0aW8ACQEObWF4UHJpY2VTcHJlYWQAAWkBEGRlY3JlYXNlUG9zaXRpb24DB19hbW91bnQJX2xldmVyYWdlE19taW5CYXNlQXNzZXRBbW91bnQDAwMDAwkAZwIAAAUHX2Ftb3VudAYJAQEhAQkBC2luaXRpYWxpemVkAAYJAQEhAQkBFnJlcXVpcmVNb3JlTWFyZ2luUmF0aW8DCQEEZGl2ZAIFDERFQ0lNQUxfVU5JVAUJX2xldmVyYWdlCQEPaW5pdE1hcmdpblJhdGlvAAYGCQEBIQEJARNyZXF1aXJlT3BlblBvc2l0aW9uAQkApQgBCAUBaQZjYWxsZXIGCQEGcGF1c2VkAAkAAgECI0ludmFsaWQgZGVjcmVhc2VQb3NpdGlvbiBwYXJhbWV0ZXJzBA0kdDAzNDcwMTM0ODUzCQELZ2V0UG9zaXRpb24BCQClCAEIBQFpBmNhbGxlcgQPb2xkUG9zaXRpb25TaXplCAUNJHQwMzQ3MDEzNDg1MwJfMQQRb2xkUG9zaXRpb25NYXJnaW4IBQ0kdDAzNDcwMTM0ODUzAl8yBBdvbGRQb3NpdGlvbk9wZW5Ob3Rpb25hbAgFDSR0MDM0NzAxMzQ4NTMCXzMEFG9sZFBvc2l0aW9uTHN0VXBkQ1BGCAUNJHQwMzQ3MDEzNDg1MwJfNAQKX2RpcmVjdGlvbgMJAGYCBQ9vbGRQb3NpdGlvblNpemUAAAUJRElSX1NIT1JUBQhESVJfTE9ORwQFaXNBZGQJAAACBQpfZGlyZWN0aW9uBQhESVJfTE9ORwQMb3Blbk5vdGlvbmFsCQEEbXVsZAIFB19hbW91bnQFCV9sZXZlcmFnZQQNJHQwMzUwMjYzNTE0MgkBI2dldFBvc2l0aW9uTm90aW9uYWxBbmRVbnJlYWxpemVkUG5sAgkApQgBCAUBaQZjYWxsZXIFD1BOTF9PUFRJT05fU1BPVAQTb2xkUG9zaXRpb25Ob3Rpb25hbAgFDSR0MDM1MDI2MzUxNDICXzEEDXVucmVhbGl6ZWRQbmwIBQ0kdDAzNTAyNjM1MTQyAl8yBA0kdDAzNTE0ODM3Njk3AwkAZgIFE29sZFBvc2l0aW9uTm90aW9uYWwFDG9wZW5Ob3Rpb25hbAQNJHQwMzU1MjUzNTc0NAkBCXN3YXBJbnB1dAIFBWlzQWRkBQxvcGVuTm90aW9uYWwEFWV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQgFDSR0MDM1NTI1MzU3NDQCXzEEFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDAzNTUyNTM1NzQ0Al8yBBViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDAzNTUyNTM1NzQ0Al8zBBZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCAUNJHQwMzU1MjUzNTc0NAJfNAQXY3VtdWxhdGl2ZU5vdGlvbmFsQWZ0ZXIIBQ0kdDAzNTUyNTM1NzQ0Al81BBhleGNoYW5nZWRQb3NpdGlvblNpemVBYnMJAQNhYnMBBRVleGNoYW5nZWRQb3NpdGlvblNpemUDAwkBAiE9AgUTX21pbkJhc2VBc3NldEFtb3VudAAACQBmAgUTX21pbkJhc2VBc3NldEFtb3VudAUYZXhjaGFuZ2VkUG9zaXRpb25TaXplQWJzBwkAAgEJAKwCAgkArAICCQCsAgICJVRvbyBsaXR0bGUgYmFzZSBhc3NldCBleGNoYW5nZWQsIGdvdCAJAKQDAQUYZXhjaGFuZ2VkUG9zaXRpb25TaXplQWJzAgogZXhwZWN0ZWQgCQCkAwEFE19taW5CYXNlQXNzZXRBbW91bnQEC3JlYWxpemVkUG5sCQEEZGl2ZAIJAQRtdWxkAgUNdW5yZWFsaXplZFBubAUYZXhjaGFuZ2VkUG9zaXRpb25TaXplQWJzCQEDYWJzAQUPb2xkUG9zaXRpb25TaXplBA0kdDAzNjE4MTM2NDI2CQEiY2FsY1JlbWFpbk1hcmdpbldpdGhGdW5kaW5nUGF5bWVudAQFD29sZFBvc2l0aW9uU2l6ZQURb2xkUG9zaXRpb25NYXJnaW4FFG9sZFBvc2l0aW9uTHN0VXBkQ1BGBQtyZWFsaXplZFBubAQMcmVtYWluTWFyZ2luCAUNJHQwMzYxODEzNjQyNgJfMQQHYmFkRGVidAgFDSR0MDM2MTgxMzY0MjYCXzIEDmZ1bmRpbmdQYXltZW50CAUNJHQwMzYxODEzNjQyNgJfMwQZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAUMb3Blbk5vdGlvbmFsBBJ1bnJlYWxpemVkUG5sQWZ0ZXIJAGUCBQ11bnJlYWxpemVkUG5sBQtyZWFsaXplZFBubAQScmVtYWluT3Blbk5vdGlvbmFsAwkAZgIFD29sZFBvc2l0aW9uU2l6ZQAACQBlAgkAZQIFE29sZFBvc2l0aW9uTm90aW9uYWwFGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQFEnVucmVhbGl6ZWRQbmxBZnRlcgkAZQIJAGQCBRJ1bnJlYWxpemVkUG5sQWZ0ZXIFE29sZFBvc2l0aW9uTm90aW9uYWwFGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQED25ld1Bvc2l0aW9uU2l6ZQkAZAIFD29sZFBvc2l0aW9uU2l6ZQUVZXhjaGFuZ2VkUG9zaXRpb25TaXplCQCdCgsFD25ld1Bvc2l0aW9uU2l6ZQUMcmVtYWluTWFyZ2luCQEDYWJzAQUScmVtYWluT3Blbk5vdGlvbmFsCQEfbGF0ZXN0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgEFD25ld1Bvc2l0aW9uU2l6ZQUVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyBRZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyBRZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyBRdjdW11bGF0aXZlTm90aW9uYWxBZnRlcgkAZQIJARRvcGVuSW50ZXJlc3ROb3Rpb25hbAAFDG9wZW5Ob3Rpb25hbAkAZQIJARV0b3RhbExvbmdQb3NpdGlvblNpemUAAwkAZgIFD25ld1Bvc2l0aW9uU2l6ZQAACQEDYWJzAQUVZXhjaGFuZ2VkUG9zaXRpb25TaXplAAAJAGUCCQEWdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQADCQBmAgAABQ9uZXdQb3NpdGlvblNpemUJAQNhYnMBBRVleGNoYW5nZWRQb3NpdGlvblNpemUAAAkAAgECFENsb3NlIHBvc2l0aW9uIGZpcnN0BA9uZXdQb3NpdGlvblNpemUIBQ0kdDAzNTE0ODM3Njk3Al8xBBduZXdQb3NpdGlvblJlbWFpbk1hcmdpbggFDSR0MDM1MTQ4Mzc2OTcCXzIEF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsCAUNJHQwMzUxNDgzNzY5NwJfMwQUbmV3UG9zaXRpb25MYXRlc3RDUEYIBQ0kdDAzNTE0ODM3Njk3Al80BBViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDAzNTE0ODM3Njk3Al81BBZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyCAUNJHQwMzUxNDgzNzY5NwJfNgQWdG90YWxQb3NpdGlvblNpemVBZnRlcggFDSR0MDM1MTQ4Mzc2OTcCXzcEF2N1bXVsYXRpdmVOb3Rpb25hbEFmdGVyCAUNJHQwMzUxNDgzNzY5NwJfOAQZb3BlbkludGVyZXN0Tm90aW9uYWxBZnRlcggFDSR0MDM1MTQ4Mzc2OTcCXzkEDnRvdGFsTG9uZ0FmdGVyCAUNJHQwMzUxNDgzNzY5NwNfMTAED3RvdGFsU2hvcnRBZnRlcggFDSR0MDM1MTQ4Mzc2OTcDXzExBA5ub3RpZnlOb3Rpb25hbAkA/AcECQEMbWluZXJBZGRyZXNzAAIObm90aWZ5Tm90aW9uYWwJAMwIAgkApQgBCAUBaQZjYWxsZXIJAMwIAgUXbmV3UG9zaXRpb25PcGVuTm90aW9uYWwFA25pbAUDbmlsAwkAAAIFDm5vdGlmeU5vdGlvbmFsBQ5ub3RpZnlOb3Rpb25hbAkAzggCCQEOdXBkYXRlUG9zaXRpb24FCQClCAEIBQFpBmNhbGxlcgUPbmV3UG9zaXRpb25TaXplBRduZXdQb3NpdGlvblJlbWFpbk1hcmdpbgUXbmV3UG9zaXRpb25PcGVuTm90aW9uYWwFFG5ld1Bvc2l0aW9uTGF0ZXN0Q1BGCQEJdXBkYXRlQW1tBwUWcXVvdGVBc3NldFJlc2VydmVBZnRlcgUVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyBRZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyBRdjdW11bGF0aXZlTm90aW9uYWxBZnRlcgUZb3BlbkludGVyZXN0Tm90aW9uYWxBZnRlcgUOdG90YWxMb25nQWZ0ZXIFD3RvdGFsU2hvcnRBZnRlcgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARBpbmNyZWFzZVBvc2l0aW9uAwpfZGlyZWN0aW9uCV9sZXZlcmFnZRNfbWluQmFzZUFzc2V0QW1vdW50BApfcmF3QW1vdW50CAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAMDAwMDAwMJAQIhPQIFCl9kaXJlY3Rpb24FCERJUl9MT05HCQECIT0CBQpfZGlyZWN0aW9uBQlESVJfU0hPUlQHBgkAZwIAAAUKX3Jhd0Ftb3VudAYJAQEhAQkBC2luaXRpYWxpemVkAAYJAQIhPQIICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAkBCnF1b3RlQXNzZXQABgkBASEBCQEWcmVxdWlyZU1vcmVNYXJnaW5SYXRpbwMJAQRkaXZkAgUMREVDSU1BTF9VTklUBQlfbGV2ZXJhZ2UJAQ9pbml0TWFyZ2luUmF0aW8ABgYJAQZwYXVzZWQACQACAQIjSW52YWxpZCBpbmNyZWFzZVBvc2l0aW9uIHBhcmFtZXRlcnMECWZlZUFtb3VudAkBBG11bGQCBQpfcmF3QW1vdW50CQEDZmVlAAQHX2Ftb3VudAkAZQIFCl9yYXdBbW91bnQFCWZlZUFtb3VudAQNJHQwMzg4MTUzODk2NwkBC2dldFBvc2l0aW9uAQkApQgBCAUBaQZjYWxsZXIED29sZFBvc2l0aW9uU2l6ZQgFDSR0MDM4ODE1Mzg5NjcCXzEEEW9sZFBvc2l0aW9uTWFyZ2luCAUNJHQwMzg4MTUzODk2NwJfMgQXb2xkUG9zaXRpb25PcGVuTm90aW9uYWwIBQ0kdDAzODgxNTM4OTY3Al8zBBRvbGRQb3NpdGlvbkxzdFVwZENQRggFDSR0MDM4ODE1Mzg5NjcCXzQEDWlzTmV3UG9zaXRpb24JAAACBQ9vbGRQb3NpdGlvblNpemUAAAQPaXNTYW1lRGlyZWN0aW9uAwkAZgIFD29sZFBvc2l0aW9uU2l6ZQAACQAAAgUKX2RpcmVjdGlvbgUIRElSX0xPTkcJAAACBQpfZGlyZWN0aW9uBQlESVJfU0hPUlQEDmV4cGFuZEV4aXN0aW5nAwkBASEBBQ1pc05ld1Bvc2l0aW9uBQ9pc1NhbWVEaXJlY3Rpb24HBAVpc0FkZAkAAAIFCl9kaXJlY3Rpb24FCERJUl9MT05HBA0kdDAzOTI1NjQxODI0AwMFDWlzTmV3UG9zaXRpb24GBQ5leHBhbmRFeGlzdGluZwQMb3Blbk5vdGlvbmFsCQEEbXVsZAIFB19hbW91bnQFCV9sZXZlcmFnZQQNJHQwMzk2ODAzOTg4NgkBCXN3YXBJbnB1dAIFBWlzQWRkBQxvcGVuTm90aW9uYWwEFWFtb3VudEJhc2VBc3NldEJvdWdodAgFDSR0MDM5NjgwMzk4ODYCXzEEFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDAzOTY4MDM5ODg2Al8yBBViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDAzOTY4MDM5ODg2Al8zBBZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCAUNJHQwMzk2ODAzOTg4NgJfNAQXY3VtdWxhdGl2ZU5vdGlvbmFsQWZ0ZXIIBQ0kdDAzOTY4MDM5ODg2Al81AwMJAQIhPQIFE19taW5CYXNlQXNzZXRBbW91bnQAAAkAZgIFE19taW5CYXNlQXNzZXRBbW91bnQJAQNhYnMBBRVhbW91bnRCYXNlQXNzZXRCb3VnaHQHCQACAQkArAICCQCsAgIJAKwCAgINTGltaXQgZXJyb3I6IAkApAMBCQEDYWJzAQUVYW1vdW50QmFzZUFzc2V0Qm91Z2h0AgMgPCAJAKQDAQUTX21pbkJhc2VBc3NldEFtb3VudAQPbmV3UG9zaXRpb25TaXplCQBkAgUPb2xkUG9zaXRpb25TaXplBRVhbW91bnRCYXNlQXNzZXRCb3VnaHQEGWluY3JlYXNlTWFyZ2luUmVxdWlyZW1lbnQJAQRkaXZkAgUMb3Blbk5vdGlvbmFsBQlfbGV2ZXJhZ2UEDSR0MDQwMjY3NDA1MDYJASJjYWxjUmVtYWluTWFyZ2luV2l0aEZ1bmRpbmdQYXltZW50BAUPb2xkUG9zaXRpb25TaXplBRFvbGRQb3NpdGlvbk1hcmdpbgUUb2xkUG9zaXRpb25Mc3RVcGRDUEYFGWluY3JlYXNlTWFyZ2luUmVxdWlyZW1lbnQEDHJlbWFpbk1hcmdpbggFDSR0MDQwMjY3NDA1MDYCXzEEAngxCAUNJHQwNDAyNjc0MDUwNgJfMgQCeDIIBQ0kdDA0MDI2NzQwNTA2Al8zAwkBASEBCQEZcmVxdWlyZU5vdE92ZXJTcHJlYWRMaW1pdAIFFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIFFWJhc2VBc3NldFJlc2VydmVBZnRlcgkAAgECFU92ZXIgbWF4IHNwcmVhZCBsaW1pdAkAnQoLBQ9uZXdQb3NpdGlvblNpemUFDHJlbWFpbk1hcmdpbgkAZAIFF29sZFBvc2l0aW9uT3Blbk5vdGlvbmFsBQxvcGVuTm90aW9uYWwJAR9sYXRlc3RDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAQUPbmV3UG9zaXRpb25TaXplBRViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIFFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIFFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIFF2N1bXVsYXRpdmVOb3Rpb25hbEFmdGVyCQBkAgkBFG9wZW5JbnRlcmVzdE5vdGlvbmFsAAUMb3Blbk5vdGlvbmFsCQBkAgkBFXRvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQADCQBmAgUPbmV3UG9zaXRpb25TaXplAAAJAQNhYnMBBRVhbW91bnRCYXNlQXNzZXRCb3VnaHQAAAkAZAIJARZ0b3RhbFNob3J0UG9zaXRpb25TaXplAAMJAGYCAAAFD25ld1Bvc2l0aW9uU2l6ZQkBA2FicwEFFWFtb3VudEJhc2VBc3NldEJvdWdodAAABAxvcGVuTm90aW9uYWwJAQRtdWxkAgUHX2Ftb3VudAUJX2xldmVyYWdlBA0kdDA0MTUxNzQxNjMzCQEjZ2V0UG9zaXRpb25Ob3Rpb25hbEFuZFVucmVhbGl6ZWRQbmwCCQClCAEIBQFpBmNhbGxlcgUPUE5MX09QVElPTl9TUE9UBBNvbGRQb3NpdGlvbk5vdGlvbmFsCAUNJHQwNDE1MTc0MTYzMwJfMQQNdW5yZWFsaXplZFBubAgFDSR0MDQxNTE3NDE2MzMCXzIDCQBmAgUTb2xkUG9zaXRpb25Ob3Rpb25hbAUMb3Blbk5vdGlvbmFsCQACAQIuVXNlIGRlY3JlYXNlUG9zaXRpb24gdG8gZGVjcmVhc2UgcG9zaXRpb24gc2l6ZQkAAgECFENsb3NlIHBvc2l0aW9uIGZpcnN0BA9uZXdQb3NpdGlvblNpemUIBQ0kdDAzOTI1NjQxODI0Al8xBBduZXdQb3NpdGlvblJlbWFpbk1hcmdpbggFDSR0MDM5MjU2NDE4MjQCXzIEF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsCAUNJHQwMzkyNTY0MTgyNAJfMwQUbmV3UG9zaXRpb25MYXRlc3RDUEYIBQ0kdDAzOTI1NjQxODI0Al80BBViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDAzOTI1NjQxODI0Al81BBZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyCAUNJHQwMzkyNTY0MTgyNAJfNgQWdG90YWxQb3NpdGlvblNpemVBZnRlcggFDSR0MDM5MjU2NDE4MjQCXzcEF2N1bXVsYXRpdmVOb3Rpb25hbEFmdGVyCAUNJHQwMzkyNTY0MTgyNAJfOAQZb3BlbkludGVyZXN0Tm90aW9uYWxBZnRlcggFDSR0MDM5MjU2NDE4MjQCXzkEDnRvdGFsTG9uZ0FmdGVyCAUNJHQwMzkyNTY0MTgyNANfMTAED3RvdGFsU2hvcnRBZnRlcggFDSR0MDM5MjU2NDE4MjQDXzExBAxmZWVUb1N0YWtlcnMJAGkCBQlmZWVBbW91bnQAAgQOZmVlVG9JbnN1cmFuY2UJAGUCBQlmZWVBbW91bnQFDGZlZVRvU3Rha2VycwQFc3Rha2UJAPwHBAkBEXF1b3RlQXNzZXRTdGFraW5nAAIObG9ja05ldXRyaW5vU1AJAMwIAgkApQgBCQEOc3Rha2luZ0FkZHJlc3MACQDMCAIFCEFMTF9GRUVTBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQpxdW90ZUFzc2V0AAUHX2Ftb3VudAUDbmlsAwkAAAIFBXN0YWtlBQVzdGFrZQQQZGVwb3NpdEluc3VyYW5jZQkA/AcECQEQaW5zdXJhbmNlQWRkcmVzcwACB2RlcG9zaXQFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBCnF1b3RlQXNzZXQABQ5mZWVUb0luc3VyYW5jZQUDbmlsAwkAAAIFEGRlcG9zaXRJbnN1cmFuY2UFEGRlcG9zaXRJbnN1cmFuY2UECW5vdGlmeUZlZQkA/AcECQEMbWluZXJBZGRyZXNzAAIKbm90aWZ5RmVlcwkAzAgCCQClCAEIBQFpBmNhbGxlcgkAzAgCBQlmZWVBbW91bnQFA25pbAUDbmlsAwkAAAIFCW5vdGlmeUZlZQUJbm90aWZ5RmVlBA5ub3RpZnlOb3Rpb25hbAkA/AcECQEMbWluZXJBZGRyZXNzAAIObm90aWZ5Tm90aW9uYWwJAMwIAgkApQgBCAUBaQZjYWxsZXIJAMwIAgUXbmV3UG9zaXRpb25PcGVuTm90aW9uYWwFA25pbAUDbmlsAwkAAAIFDm5vdGlmeU5vdGlvbmFsBQ5ub3RpZnlOb3Rpb25hbAkAzggCCQDOCAIJAM4IAgkBDnVwZGF0ZVBvc2l0aW9uBQkApQgBCAUBaQZjYWxsZXIFD25ld1Bvc2l0aW9uU2l6ZQUXbmV3UG9zaXRpb25SZW1haW5NYXJnaW4FF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsBRRuZXdQb3NpdGlvbkxhdGVzdENQRgkBCXVwZGF0ZUFtbQcFFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIFFWJhc2VBc3NldFJlc2VydmVBZnRlcgUWdG90YWxQb3NpdGlvblNpemVBZnRlcgUXY3VtdWxhdGl2ZU5vdGlvbmFsQWZ0ZXIFGW9wZW5JbnRlcmVzdE5vdGlvbmFsQWZ0ZXIFDnRvdGFsTG9uZ0FmdGVyBQ90b3RhbFNob3J0QWZ0ZXIJAQt0cmFuc2ZlckZlZQEFDGZlZVRvU3Rha2VycwkBDXVwZGF0ZUJhbGFuY2UBCQBkAgkBCGNiYWxhbmNlAAUHX2Ftb3VudAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQlhZGRNYXJnaW4ABApfcmF3QW1vdW50CAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAMDAwMJAQIhPQIICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAkBCnF1b3RlQXNzZXQABgkBASEBCQETcmVxdWlyZU9wZW5Qb3NpdGlvbgEJAKUIAQgFAWkGY2FsbGVyBgkBASEBCQELaW5pdGlhbGl6ZWQABgkBBnBhdXNlZAAJAAIBAhxJbnZhbGlkIGFkZE1hcmdpbiBwYXJhbWV0ZXJzBAlmZWVBbW91bnQJAQRtdWxkAgUKX3Jhd0Ftb3VudAkBA2ZlZQAEB19hbW91bnQJAGUCBQpfcmF3QW1vdW50BQlmZWVBbW91bnQEDSR0MDQzMzgwNDM1MzIJAQtnZXRQb3NpdGlvbgEJAKUIAQgFAWkGY2FsbGVyBA9vbGRQb3NpdGlvblNpemUIBQ0kdDA0MzM4MDQzNTMyAl8xBBFvbGRQb3NpdGlvbk1hcmdpbggFDSR0MDQzMzgwNDM1MzICXzIEF29sZFBvc2l0aW9uT3Blbk5vdGlvbmFsCAUNJHQwNDMzODA0MzUzMgJfMwQUb2xkUG9zaXRpb25Mc3RVcGRDUEYIBQ0kdDA0MzM4MDQzNTMyAl80BAxmZWVUb1N0YWtlcnMJAGkCBQlmZWVBbW91bnQAAgQOZmVlVG9JbnN1cmFuY2UJAGUCBQlmZWVBbW91bnQFDGZlZVRvU3Rha2VycwQFc3Rha2UJAPwHBAkBEXF1b3RlQXNzZXRTdGFraW5nAAIObG9ja05ldXRyaW5vU1AJAMwIAgkApQgBCQEOc3Rha2luZ0FkZHJlc3MACQDMCAIFCEFMTF9GRUVTBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQpxdW90ZUFzc2V0AAUHX2Ftb3VudAUDbmlsAwkAAAIFBXN0YWtlBQVzdGFrZQQQZGVwb3NpdEluc3VyYW5jZQkA/AcECQEQaW5zdXJhbmNlQWRkcmVzcwACB2RlcG9zaXQFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBCnF1b3RlQXNzZXQABQ5mZWVUb0luc3VyYW5jZQUDbmlsAwkAAAIFEGRlcG9zaXRJbnN1cmFuY2UFEGRlcG9zaXRJbnN1cmFuY2UECW5vdGlmeUZlZQkA/AcECQEMbWluZXJBZGRyZXNzAAIKbm90aWZ5RmVlcwkAzAgCCQClCAEIBQFpBmNhbGxlcgkAzAgCBQlmZWVBbW91bnQFA25pbAUDbmlsAwkAAAIFCW5vdGlmeUZlZQUJbm90aWZ5RmVlCQDOCAIJAM4IAgkBDnVwZGF0ZVBvc2l0aW9uBQkApQgBCAUBaQZjYWxsZXIFD29sZFBvc2l0aW9uU2l6ZQkAZAIFEW9sZFBvc2l0aW9uTWFyZ2luBQdfYW1vdW50BRdvbGRQb3NpdGlvbk9wZW5Ob3Rpb25hbAUUb2xkUG9zaXRpb25Mc3RVcGRDUEYJAQt0cmFuc2ZlckZlZQEFDGZlZVRvU3Rha2VycwkBDXVwZGF0ZUJhbGFuY2UBCQBkAgkBCGNiYWxhbmNlAAUHX2Ftb3VudAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQxyZW1vdmVNYXJnaW4BB19hbW91bnQDAwMDCQBnAgAABQdfYW1vdW50BgkBASEBCQETcmVxdWlyZU9wZW5Qb3NpdGlvbgEJAKUIAQgFAWkGY2FsbGVyBgkBASEBCQELaW5pdGlhbGl6ZWQABgkBBnBhdXNlZAAJAAIBAh9JbnZhbGlkIHJlbW92ZU1hcmdpbiBwYXJhbWV0ZXJzBA0kdDA0NDU4MTQ0NzMzCQELZ2V0UG9zaXRpb24BCQClCAEIBQFpBmNhbGxlcgQPb2xkUG9zaXRpb25TaXplCAUNJHQwNDQ1ODE0NDczMwJfMQQRb2xkUG9zaXRpb25NYXJnaW4IBQ0kdDA0NDU4MTQ0NzMzAl8yBBdvbGRQb3NpdGlvbk9wZW5Ob3Rpb25hbAgFDSR0MDQ0NTgxNDQ3MzMCXzMEFG9sZFBvc2l0aW9uTHN0VXBkQ1BGCAUNJHQwNDQ1ODE0NDczMwJfNAQLbWFyZ2luRGVsdGEJAQEtAQUHX2Ftb3VudAQNJHQwNDQ3NzA0NDk0OQkBImNhbGNSZW1haW5NYXJnaW5XaXRoRnVuZGluZ1BheW1lbnQEBQ9vbGRQb3NpdGlvblNpemUFEW9sZFBvc2l0aW9uTWFyZ2luBRRvbGRQb3NpdGlvbkxzdFVwZENQRgULbWFyZ2luRGVsdGEEDHJlbWFpbk1hcmdpbggFDSR0MDQ0NzcwNDQ5NDkCXzEEB2JhZERlYnQIBQ0kdDA0NDc3MDQ0OTQ5Al8yAwkBAiE9AgUHYmFkRGVidAAACQACAQIdSW52YWxpZCByZW1vdmVkIG1hcmdpbiBhbW91bnQEC21hcmdpblJhdGlvCQEPY2FsY01hcmdpblJhdGlvAwUMcmVtYWluTWFyZ2luBQdiYWREZWJ0BRdvbGRQb3NpdGlvbk9wZW5Ob3Rpb25hbAMJAQEhAQkBFnJlcXVpcmVNb3JlTWFyZ2luUmF0aW8DBQttYXJnaW5SYXRpbwkBD2luaXRNYXJnaW5SYXRpbwAGCQACAQkArAICCQCsAgIJAKwCAgIZVG9vIG11Y2ggbWFyZ2luIHJlbW92ZWQ6IAkApAMBBQttYXJnaW5SYXRpbwIDIDwgCQCkAwEJAQ9pbml0TWFyZ2luUmF0aW8ABAd1bnN0YWtlCQD8BwQJARFxdW90ZUFzc2V0U3Rha2luZwACDnVubG9ja05ldXRyaW5vCQDMCAIFB19hbW91bnQJAMwIAgkA2AQBCQEKcXVvdGVBc3NldAAFA25pbAUDbmlsAwkAAAIFB3Vuc3Rha2UFB3Vuc3Rha2UJAM4IAgkAzggCCQEOdXBkYXRlUG9zaXRpb24FCQClCAEIBQFpBmNhbGxlcgUPb2xkUG9zaXRpb25TaXplBQxyZW1haW5NYXJnaW4FF29sZFBvc2l0aW9uT3Blbk5vdGlvbmFsCQEfbGF0ZXN0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgEFD29sZFBvc2l0aW9uU2l6ZQkBCHdpdGhkcmF3AggFAWkGY2FsbGVyBQdfYW1vdW50CQENdXBkYXRlQmFsYW5jZQEJAGUCCQEIY2JhbGFuY2UABQdfYW1vdW50CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBDWNsb3NlUG9zaXRpb24ABAZjYWxsZXIJAQ9nZXRBY3R1YWxDYWxsZXIBBQFpBA1jYWxsZXJBZGRyZXNzCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQUGY2FsbGVyAg5JbnZhbGlkIGNhbGxlcgMDAwkBASEBCQETcmVxdWlyZU9wZW5Qb3NpdGlvbgEFBmNhbGxlcgYJAQEhAQkBC2luaXRpYWxpemVkAAYJAQZwYXVzZWQACQACAQIgSW52YWxpZCBjbG9zZVBvc2l0aW9uIHBhcmFtZXRlcnMEDSR0MDQ2MTUyNDY1MjkJARVpbnRlcm5hbENsb3NlUG9zaXRpb24CBQZjYWxsZXIGBAJ4MQgFDSR0MDQ2MTUyNDY1MjkCXzEED3Bvc2l0aW9uQmFkRGVidAgFDSR0MDQ2MTUyNDY1MjkCXzIEC3JlYWxpemVkUG5sCAUNJHQwNDYxNTI0NjUyOQJfMwQNbWFyZ2luVG9WYXVsdAgFDSR0MDQ2MTUyNDY1MjkCXzQEFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDA0NjE1MjQ2NTI5Al81BBViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDA0NjE1MjQ2NTI5Al82BBZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCAUNJHQwNDYxNTI0NjUyOQJfNwQXY3VtdWxhdGl2ZU5vdGlvbmFsQWZ0ZXIIBQ0kdDA0NjE1MjQ2NTI5Al84BBlvcGVuSW50ZXJlc3ROb3Rpb25hbEFmdGVyCAUNJHQwNDYxNTI0NjUyOQJfOQQCeDIIBQ0kdDA0NjE1MjQ2NTI5A18xMAQOdG90YWxMb25nQWZ0ZXIIBQ0kdDA0NjE1MjQ2NTI5A18xMQQPdG90YWxTaG9ydEFmdGVyCAUNJHQwNDYxNTI0NjUyOQNfMTIDCQBmAgUPcG9zaXRpb25CYWREZWJ0AAAJAAIBAiZVbmFibGUgdG8gY2xvc2UgcG9zaXRpb24gd2l0aCBiYWQgZGVidAQOd2l0aGRyYXdBbW91bnQJAQNhYnMBBQ1tYXJnaW5Ub1ZhdWx0BAphbW1CYWxhbmNlCQBlAgkBCGNiYWxhbmNlAAUOd2l0aGRyYXdBbW91bnQEDSR0MDQ2NzM4NDY4ODADCQBmAgAABQphbW1CYWxhbmNlCQCUCgIAAAkBA2FicwEFCmFtbUJhbGFuY2UJAJQKAgUKYW1tQmFsYW5jZQAABA1hbW1OZXdCYWxhbmNlCAUNJHQwNDY3Mzg0Njg4MAJfMQQQZ2V0RnJvbUluc3VyYW5jZQgFDSR0MDQ2NzM4NDY4ODACXzIEAXgDCQBmAgUQZ2V0RnJvbUluc3VyYW5jZQAABBF3aXRoZHJhd0luc3VyYW5jZQkA/AcECQEQaW5zdXJhbmNlQWRkcmVzcwACCHdpdGhkcmF3CQDMCAIFEGdldEZyb21JbnN1cmFuY2UFA25pbAUDbmlsAwkAAAIFEXdpdGhkcmF3SW5zdXJhbmNlBRF3aXRoZHJhd0luc3VyYW5jZQUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQNuaWwDCQAAAgUBeAUBeAQHdW5zdGFrZQkA/AcECQERcXVvdGVBc3NldFN0YWtpbmcAAg51bmxvY2tOZXV0cmlubwkAzAgCCQBlAgUOd2l0aGRyYXdBbW91bnQFEGdldEZyb21JbnN1cmFuY2UJAMwIAgkA2AQBCQEKcXVvdGVBc3NldAAFA25pbAUDbmlsAwkAAAIFB3Vuc3Rha2UFB3Vuc3Rha2UEDm5vdGlmeU5vdGlvbmFsCQD8BwQJAQxtaW5lckFkZHJlc3MAAg5ub3RpZnlOb3Rpb25hbAkAzAgCBQZjYWxsZXIJAMwIAgAABQNuaWwFA25pbAMJAAACBQ5ub3RpZnlOb3Rpb25hbAUObm90aWZ5Tm90aW9uYWwJAM4IAgkAzggCCQDOCAIJAQ5kZWxldGVQb3NpdGlvbgEFBmNhbGxlcgkBCXVwZGF0ZUFtbQcFFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIFFWJhc2VBc3NldFJlc2VydmVBZnRlcgUWdG90YWxQb3NpdGlvblNpemVBZnRlcgUXY3VtdWxhdGl2ZU5vdGlvbmFsQWZ0ZXIFGW9wZW5JbnRlcmVzdE5vdGlvbmFsQWZ0ZXIFDnRvdGFsTG9uZ0FmdGVyBQ90b3RhbFNob3J0QWZ0ZXIJAQh3aXRoZHJhdwIFDWNhbGxlckFkZHJlc3MFDndpdGhkcmF3QW1vdW50CQENdXBkYXRlQmFsYW5jZQEFDWFtbU5ld0JhbGFuY2UJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEJbGlxdWlkYXRlAQdfdHJhZGVyBA9zcG90TWFyZ2luUmF0aW8JARZnZXRNYXJnaW5SYXRpb0J5T3B0aW9uAgUHX3RyYWRlcgUPUE5MX09QVElPTl9TUE9UBAttYXJnaW5SYXRpbwMJARZpc092ZXJGbHVjdHVhdGlvbkxpbWl0AAQRb3JhY2xlTWFyZ2luUmF0aW8JARZnZXRNYXJnaW5SYXRpb0J5T3B0aW9uAgUHX3RyYWRlcgURUE5MX09QVElPTl9PUkFDTEUJAQR2bWF4AgUPc3BvdE1hcmdpblJhdGlvBRFvcmFjbGVNYXJnaW5SYXRpbwUPc3BvdE1hcmdpblJhdGlvAwMDAwkBASEBCQEWcmVxdWlyZU1vcmVNYXJnaW5SYXRpbwMFC21hcmdpblJhdGlvCQEWbWFpbnRlbmFuY2VNYXJnaW5SYXRpbwAHBgkBASEBCQETcmVxdWlyZU9wZW5Qb3NpdGlvbgEFB190cmFkZXIGCQEBIQEJAQtpbml0aWFsaXplZAAGCQEGcGF1c2VkAAkAAgECE1VuYWJsZSB0byBsaXF1aWRhdGUDAwMJAGYCBQ9zcG90TWFyZ2luUmF0aW8JARNsaXF1aWRhdGlvbkZlZVJhdGlvAAkAZgIJARdwYXJ0aWFsTGlxdWlkYXRpb25SYXRpbwAAAAcJAGYCBQxERUNJTUFMX1VOSVQJARdwYXJ0aWFsTGlxdWlkYXRpb25SYXRpbwAHBA0kdDA0ODk2MDQ5MTEwCQELZ2V0UG9zaXRpb24BBQdfdHJhZGVyBA9vbGRQb3NpdGlvblNpemUIBQ0kdDA0ODk2MDQ5MTEwAl8xBBFvbGRQb3NpdGlvbk1hcmdpbggFDSR0MDQ4OTYwNDkxMTACXzIEF29sZFBvc2l0aW9uT3Blbk5vdGlvbmFsCAUNJHQwNDg5NjA0OTExMAJfMwQUb2xkUG9zaXRpb25Mc3RVcGRDUEYIBQ0kdDA0ODk2MDQ5MTEwAl80BApfZGlyZWN0aW9uAwkAZgIFD29sZFBvc2l0aW9uU2l6ZQAABQlESVJfU0hPUlQFCERJUl9MT05HBAVpc0FkZAkAAAIFCl9kaXJlY3Rpb24FCERJUl9MT05HBBlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50CQEbZ2V0UGFydGlhbExpcXVpZGF0aW9uQW1vdW50AgUHX3RyYWRlcgUPb2xkUG9zaXRpb25TaXplBA0kdDA0OTMzNTQ5NDM5CQEjZ2V0UG9zaXRpb25Ob3Rpb25hbEFuZFVucmVhbGl6ZWRQbmwCBQdfdHJhZGVyBQ9QTkxfT1BUSU9OX1NQT1QEE29sZFBvc2l0aW9uTm90aW9uYWwIBQ0kdDA0OTMzNTQ5NDM5Al8xBA11bnJlYWxpemVkUG5sCAUNJHQwNDkzMzU0OTQzOQJfMgQNJHQwNDk0NDc0OTczNwkBCXN3YXBJbnB1dAIFBWlzQWRkBRlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50BBVleGNoYW5nZWRQb3NpdGlvblNpemUIBQ0kdDA0OTQ0NzQ5NzM3Al8xBBZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyCAUNJHQwNDk0NDc0OTczNwJfMgQVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyCAUNJHQwNDk0NDc0OTczNwJfMwQWdG90YWxQb3NpdGlvblNpemVBZnRlcggFDSR0MDQ5NDQ3NDk3MzcCXzQEF2N1bXVsYXRpdmVOb3Rpb25hbEFmdGVyCAUNJHQwNDk0NDc0OTczNwJfNQQLcmVhbGl6ZWRQbmwJAQRkaXZkAgkBBG11bGQCBQ11bnJlYWxpemVkUG5sCQEDYWJzAQUVZXhjaGFuZ2VkUG9zaXRpb25TaXplCQEDYWJzAQUPb2xkUG9zaXRpb25TaXplBA0kdDA0OTg0NDUwMDc3CQEiY2FsY1JlbWFpbk1hcmdpbldpdGhGdW5kaW5nUGF5bWVudAQFD29sZFBvc2l0aW9uU2l6ZQURb2xkUG9zaXRpb25NYXJnaW4FFG9sZFBvc2l0aW9uTHN0VXBkQ1BGBQtyZWFsaXplZFBubAQMcmVtYWluTWFyZ2luCAUNJHQwNDk4NDQ1MDA3NwJfMQQHYmFkRGVidAgFDSR0MDQ5ODQ0NTAwNzcCXzIEDmZ1bmRpbmdQYXltZW50CAUNJHQwNDk4NDQ1MDA3NwJfMwQSdW5yZWFsaXplZFBubEFmdGVyCQBlAgUNdW5yZWFsaXplZFBubAULcmVhbGl6ZWRQbmwEEnJlbWFpbk9wZW5Ob3Rpb25hbAMJAGYCBQ9vbGRQb3NpdGlvblNpemUAAAkAZQIJAGUCBRNvbGRQb3NpdGlvbk5vdGlvbmFsBRlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50BRJ1bnJlYWxpemVkUG5sQWZ0ZXIJAGUCCQBkAgUSdW5yZWFsaXplZFBubEFmdGVyBRNvbGRQb3NpdGlvbk5vdGlvbmFsBRlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50BBJsaXF1aWRhdGlvblBlbmFsdHkJAQRtdWxkAgUZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAkBE2xpcXVpZGF0aW9uRmVlUmF0aW8ABA9mZWVUb0xpcXVpZGF0b3IJAGkCBRJsaXF1aWRhdGlvblBlbmFsdHkAAgQOZmVlVG9JbnN1cmFuY2UJAGUCBRJsaXF1aWRhdGlvblBlbmFsdHkFD2ZlZVRvTGlxdWlkYXRvcgQRbmV3UG9zaXRpb25NYXJnaW4JAGUCBQxyZW1haW5NYXJnaW4FEmxpcXVpZGF0aW9uUGVuYWx0eQQPbmV3UG9zaXRpb25TaXplCQBkAgUPb2xkUG9zaXRpb25TaXplBRVleGNoYW5nZWRQb3NpdGlvblNpemUEF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsCQEDYWJzAQUScmVtYWluT3Blbk5vdGlvbmFsBBRuZXdQb3NpdGlvbkxzdFVwZENQRgkBH2xhdGVzdEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24BBQ9uZXdQb3NpdGlvblNpemUEGW9wZW5JbnRlcmVzdE5vdGlvbmFsQWZ0ZXIJAGUCCQEUb3BlbkludGVyZXN0Tm90aW9uYWwABRlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50BAphbW1CYWxhbmNlCQBlAgkBCGNiYWxhbmNlAAUSbGlxdWlkYXRpb25QZW5hbHR5BA0kdDA1MTI1MDUxMzkzAwkAZgIAAAUKYW1tQmFsYW5jZQkAlAoCAAAJAQNhYnMBBQphbW1CYWxhbmNlCQCUCgIFCmFtbUJhbGFuY2UAAAQNbmV3QW1tQmFsYW5jZQgFDSR0MDUxMjUwNTEzOTMCXzEEEXRha2VGcm9tSW5zdXJhbmNlCAUNJHQwNTEyNTA1MTM5MwJfMgQBeAMJAGYCBRF0YWtlRnJvbUluc3VyYW5jZQAABBF3aXRoZHJhd0luc3VyYW5jZQkA/AcECQEQaW5zdXJhbmNlQWRkcmVzcwACCHdpdGhkcmF3CQDMCAIFEXRha2VGcm9tSW5zdXJhbmNlBQNuaWwFA25pbAMJAAACBRF3aXRoZHJhd0luc3VyYW5jZQURd2l0aGRyYXdJbnN1cmFuY2UFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUDbmlsAwkAAAIFAXgFAXgEB3Vuc3Rha2UJAPwHBAkBEXF1b3RlQXNzZXRTdGFraW5nAAIOdW5sb2NrTmV1dHJpbm8JAMwIAgkAZQIFEmxpcXVpZGF0aW9uUGVuYWx0eQURdGFrZUZyb21JbnN1cmFuY2UJAMwIAgkA2AQBCQEKcXVvdGVBc3NldAAFA25pbAUDbmlsAwkAAAIFB3Vuc3Rha2UFB3Vuc3Rha2UEEGRlcG9zaXRJbnN1cmFuY2UJAPwHBAkBEGluc3VyYW5jZUFkZHJlc3MAAgdkZXBvc2l0BQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQpxdW90ZUFzc2V0AAUOZmVlVG9JbnN1cmFuY2UFA25pbAMJAAACBRBkZXBvc2l0SW5zdXJhbmNlBRBkZXBvc2l0SW5zdXJhbmNlBA5ub3RpZnlOb3Rpb25hbAkA/AcECQEMbWluZXJBZGRyZXNzAAIObm90aWZ5Tm90aW9uYWwJAMwIAgUHX3RyYWRlcgkAzAgCBRduZXdQb3NpdGlvbk9wZW5Ob3Rpb25hbAUDbmlsBQNuaWwDCQAAAgUObm90aWZ5Tm90aW9uYWwFDm5vdGlmeU5vdGlvbmFsCQDOCAIJAM4IAgkAzggCCQEOdXBkYXRlUG9zaXRpb24FBQdfdHJhZGVyBQ9uZXdQb3NpdGlvblNpemUFEW5ld1Bvc2l0aW9uTWFyZ2luBRduZXdQb3NpdGlvbk9wZW5Ob3Rpb25hbAUUbmV3UG9zaXRpb25Mc3RVcGRDUEYJAQl1cGRhdGVBbW0HBRZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyBRViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIFFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIFF2N1bXVsYXRpdmVOb3Rpb25hbEFmdGVyBRlvcGVuSW50ZXJlc3ROb3Rpb25hbEFmdGVyCQBlAgkBFXRvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQADCQBmAgUPbmV3UG9zaXRpb25TaXplAAAJAQNhYnMBBRVleGNoYW5nZWRQb3NpdGlvblNpemUAAAkAZQIJARZ0b3RhbFNob3J0UG9zaXRpb25TaXplAAMJAGYCAAAFD25ld1Bvc2l0aW9uU2l6ZQkBA2FicwEFFWV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQAACQEId2l0aGRyYXcCCAUBaQZjYWxsZXIFD2ZlZVRvTGlxdWlkYXRvcgkBDXVwZGF0ZUJhbGFuY2UBBQ1uZXdBbW1CYWxhbmNlCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBA0kdDA1Mjg0OTUzMzA0CQEVaW50ZXJuYWxDbG9zZVBvc2l0aW9uAgUHX3RyYWRlcgcEAngxCAUNJHQwNTI4NDk1MzMwNAJfMQQHYmFkRGVidAgFDSR0MDUyODQ5NTMzMDQCXzIEAngyCAUNJHQwNTI4NDk1MzMwNAJfMwQCeDMIBQ0kdDA1Mjg0OTUzMzA0Al80BBZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyCAUNJHQwNTI4NDk1MzMwNAJfNQQVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyCAUNJHQwNTI4NDk1MzMwNAJfNgQWdG90YWxQb3NpdGlvblNpemVBZnRlcggFDSR0MDUyODQ5NTMzMDQCXzcEF2N1bXVsYXRpdmVOb3Rpb25hbEFmdGVyCAUNJHQwNTI4NDk1MzMwNAJfOAQZb3BlbkludGVyZXN0Tm90aW9uYWxBZnRlcggFDSR0MDUyODQ5NTMzMDQCXzkEGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQIBQ0kdDA1Mjg0OTUzMzA0A18xMAQOdG90YWxMb25nQWZ0ZXIIBQ0kdDA1Mjg0OTUzMzA0A18xMQQPdG90YWxTaG9ydEFmdGVyCAUNJHQwNTI4NDk1MzMwNANfMTIEEmxpcXVpZGF0aW9uUGVuYWx0eQkBBG11bGQCBRlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50CQETbGlxdWlkYXRpb25GZWVSYXRpbwAED2ZlZVRvTGlxdWlkYXRvcgkAaQIFEmxpcXVpZGF0aW9uUGVuYWx0eQACBA5mZWVUb0luc3VyYW5jZQkAZQIFEmxpcXVpZGF0aW9uUGVuYWx0eQUPZmVlVG9MaXF1aWRhdG9yBAphbW1CYWxhbmNlCQBlAgkBCGNiYWxhbmNlAAUSbGlxdWlkYXRpb25QZW5hbHR5BA0kdDA1MzcxNjUzODU5AwkAZgIAAAUKYW1tQmFsYW5jZQkAlAoCAAAJAQNhYnMBBQphbW1CYWxhbmNlCQCUCgIFCmFtbUJhbGFuY2UAAAQNbmV3QW1tQmFsYW5jZQgFDSR0MDUzNzE2NTM4NTkCXzEEEXRha2VGcm9tSW5zdXJhbmNlCAUNJHQwNTM3MTY1Mzg1OQJfMgQBeAMJAGYCBRF0YWtlRnJvbUluc3VyYW5jZQAABBF3aXRoZHJhd0luc3VyYW5jZQkA/AcECQEQaW5zdXJhbmNlQWRkcmVzcwACCHdpdGhkcmF3CQDMCAIFEXRha2VGcm9tSW5zdXJhbmNlBQNuaWwFA25pbAMJAAACBRF3aXRoZHJhd0luc3VyYW5jZQURd2l0aGRyYXdJbnN1cmFuY2UFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUDbmlsAwkAAAIFAXgFAXgEB3Vuc3Rha2UJAPwHBAkBEXF1b3RlQXNzZXRTdGFraW5nAAIOdW5sb2NrTmV1dHJpbm8JAMwIAgkAZQIFEmxpcXVpZGF0aW9uUGVuYWx0eQURdGFrZUZyb21JbnN1cmFuY2UJAMwIAgkA2AQBCQEKcXVvdGVBc3NldAAFA25pbAUDbmlsAwkAAAIFB3Vuc3Rha2UFB3Vuc3Rha2UEEGRlcG9zaXRJbnN1cmFuY2UJAPwHBAkBEGluc3VyYW5jZUFkZHJlc3MAAgdkZXBvc2l0BQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQpxdW90ZUFzc2V0AAUOZmVlVG9JbnN1cmFuY2UFA25pbAMJAAACBRBkZXBvc2l0SW5zdXJhbmNlBRBkZXBvc2l0SW5zdXJhbmNlBA5ub3RpZnlOb3Rpb25hbAkA/AcECQEMbWluZXJBZGRyZXNzAAIObm90aWZ5Tm90aW9uYWwJAMwIAgUHX3RyYWRlcgkAzAgCAAAFA25pbAUDbmlsAwkAAAIFDm5vdGlmeU5vdGlvbmFsBQ5ub3RpZnlOb3Rpb25hbAkAzggCCQDOCAIJAM4IAgkBDmRlbGV0ZVBvc2l0aW9uAQUHX3RyYWRlcgkBCXVwZGF0ZUFtbQcFFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIFFWJhc2VBc3NldFJlc2VydmVBZnRlcgUWdG90YWxQb3NpdGlvblNpemVBZnRlcgUXY3VtdWxhdGl2ZU5vdGlvbmFsQWZ0ZXIFGW9wZW5JbnRlcmVzdE5vdGlvbmFsQWZ0ZXIFDnRvdGFsTG9uZ0FmdGVyBQ90b3RhbFNob3J0QWZ0ZXIJAQh3aXRoZHJhdwIIBQFpBmNhbGxlcgUPZmVlVG9MaXF1aWRhdG9yCQENdXBkYXRlQmFsYW5jZQEFDW5ld0FtbUJhbGFuY2UJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEKcGF5RnVuZGluZwAEFWZ1bmRpbmdCbG9ja1RpbWVzdGFtcAkBGW5leHRGdW5kaW5nQmxvY2tUaW1lc3RhbXAAAwMDCQBmAgUVZnVuZGluZ0Jsb2NrVGltZXN0YW1wCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAYJAQEhAQkBC2luaXRpYWxpemVkAAYJAQZwYXVzZWQACQACAQkArAICCQCsAgIJAKwCAgIhSW52YWxpZCBmdW5kaW5nIGJsb2NrIHRpbWVzdGFtcDogCQCkAwEIBQlsYXN0QmxvY2sJdGltZXN0YW1wAgMgPCAJAKQDAQUVZnVuZGluZ0Jsb2NrVGltZXN0YW1wBA91bmRlcmx5aW5nUHJpY2UJARJnZXRPcmFjbGVUd2FwUHJpY2UABA1zcG90VHdhcFByaWNlCQEQZ2V0VHdhcFNwb3RQcmljZQAEB3ByZW1pdW0JAGUCBQ1zcG90VHdhcFByaWNlBQ91bmRlcmx5aW5nUHJpY2UEDSR0MDU1NDQ3NTY3ODIDAwkAAAIJARZ0b3RhbFNob3J0UG9zaXRpb25TaXplAAAABgkAAAIJARV0b3RhbExvbmdQb3NpdGlvblNpemUAAAAJAJQKAgAAAAADCQBmAgAABQdwcmVtaXVtBBRzaG9ydFByZW1pdW1GcmFjdGlvbgkBBGRpdmQCCQEEbXVsZAIFB3ByZW1pdW0JARRmdW5kaW5nUGVyaW9kRGVjaW1hbAAFB09ORV9EQVkEE2xvbmdQcmVtaXVtRnJhY3Rpb24JAQRkaXZkAgkBBG11bGQCBRRzaG9ydFByZW1pdW1GcmFjdGlvbgkBFnRvdGFsU2hvcnRQb3NpdGlvblNpemUACQEVdG90YWxMb25nUG9zaXRpb25TaXplAAkAlAoCBRRzaG9ydFByZW1pdW1GcmFjdGlvbgUTbG9uZ1ByZW1pdW1GcmFjdGlvbgQTbG9uZ1ByZW1pdW1GcmFjdGlvbgkBBGRpdmQCCQEEbXVsZAIFB3ByZW1pdW0JARRmdW5kaW5nUGVyaW9kRGVjaW1hbAAFB09ORV9EQVkEFHNob3J0UHJlbWl1bUZyYWN0aW9uCQEEZGl2ZAIJAQRtdWxkAgUTbG9uZ1ByZW1pdW1GcmFjdGlvbgkBFXRvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQAJARZ0b3RhbFNob3J0UG9zaXRpb25TaXplAAkAlAoCBRRzaG9ydFByZW1pdW1GcmFjdGlvbgUTbG9uZ1ByZW1pdW1GcmFjdGlvbgQUc2hvcnRQcmVtaXVtRnJhY3Rpb24IBQ0kdDA1NTQ0NzU2NzgyAl8xBBNsb25nUHJlbWl1bUZyYWN0aW9uCAUNJHQwNTU0NDc1Njc4MgJfMgkBDXVwZGF0ZUZ1bmRpbmcFCQBkAgUVZnVuZGluZ0Jsb2NrVGltZXN0YW1wCQEUZnVuZGluZ1BlcmlvZFNlY29uZHMACQBkAgkBI2xhdGVzdExvbmdDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAAUTbG9uZ1ByZW1pdW1GcmFjdGlvbgkAZAIJASRsYXRlc3RTaG9ydEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24ABRRzaG9ydFByZW1pdW1GcmFjdGlvbgkBBGRpdmQCBRNsb25nUHJlbWl1bUZyYWN0aW9uBQ91bmRlcmx5aW5nUHJpY2UJAQRkaXZkAgUUc2hvcnRQcmVtaXVtRnJhY3Rpb24FD3VuZGVybHlpbmdQcmljZQFpAQV2X2dldAEHX3RyYWRlcgQNJHQwNTcxNTc1NzIxNwkBFWludGVybmFsQ2xvc2VQb3NpdGlvbgIFB190cmFkZXIHBAJ4MQgFDSR0MDU3MTU3NTcyMTcCXzEEAngyCAUNJHQwNTcxNTc1NzIxNwJfMgQCeDMIBQ0kdDA1NzE1NzU3MjE3Al8zBAJ4NAgFDSR0MDU3MTU3NTcyMTcCXzQJAAIBCQCsAgIJAKwCAgkArAICCQEBcwEFAngyCQEBcwEFAngzCQEBcwEFAng0CQEBcwEJAQ5nZXRNYXJnaW5SYXRpbwEFB190cmFkZXIBaQEndmlld19jYWxjUmVtYWluTWFyZ2luV2l0aEZ1bmRpbmdQYXltZW50AQdfdHJhZGVyBA0kdDA1NzM2NDU3NDc1CQELZ2V0UG9zaXRpb24BBQdfdHJhZGVyBAxwb3NpdGlvblNpemUIBQ0kdDA1NzM2NDU3NDc1Al8xBA5wb3NpdGlvbk1hcmdpbggFDSR0MDU3MzY0NTc0NzUCXzIEA3BvbggFDSR0MDU3MzY0NTc0NzUCXzMEEXBvc2l0aW9uTHN0VXBkQ1BGCAUNJHQwNTczNjQ1NzQ3NQJfNAQNJHQwNTc0ODA1NzU4MQkBI2dldFBvc2l0aW9uTm90aW9uYWxBbmRVbnJlYWxpemVkUG5sAgUHX3RyYWRlcgUPUE5MX09QVElPTl9TUE9UBBBwb3NpdGlvbk5vdGlvbmFsCAUNJHQwNTc0ODA1NzU4MQJfMQQNdW5yZWFsaXplZFBubAgFDSR0MDU3NDgwNTc1ODECXzIEDSR0MDU3NTg2NTc3NjgJASJjYWxjUmVtYWluTWFyZ2luV2l0aEZ1bmRpbmdQYXltZW50BAUMcG9zaXRpb25TaXplBQ5wb3NpdGlvbk1hcmdpbgURcG9zaXRpb25Mc3RVcGRDUEYFDXVucmVhbGl6ZWRQbmwEDHJlbWFpbk1hcmdpbggFDSR0MDU3NTg2NTc3NjgCXzEEB2JhZERlYnQIBQ0kdDA1NzU4NjU3NzY4Al8yBA5mdW5kaW5nUGF5bWVudAgFDSR0MDU3NTg2NTc3NjgCXzMJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkBAXMBBQxyZW1haW5NYXJnaW4JAQFzAQUOZnVuZGluZ1BheW1lbnQJAQFzAQkBDmdldE1hcmdpblJhdGlvAQUHX3RyYWRlcgkBAXMBBQ11bnJlYWxpemVkUG5sCQEBcwEFB2JhZERlYnQJAQFzAQUQcG9zaXRpb25Ob3Rpb25hbAFpAQ5mb3JjZU1vdmVBc3NldAIHX3RyYWRlcgdfYW1vdW50AwMJAQIhPQIJAKcIAQkBDmFkbWluUHVibGljS2V5AAgFAWkGY2FsbGVyBgkAZgIAAAUHX2Ftb3VudAkAAgECIUludmFsaWQgZm9yY2VNb3ZlQXNzZXQgcGFyYW1ldGVycwQHdW5zdGFrZQkA/AcECQERcXVvdGVBc3NldFN0YWtpbmcAAg51bmxvY2tOZXV0cmlubwkAzAgCBQdfYW1vdW50CQDMCAIJANgEAQkBCnF1b3RlQXNzZXQABQNuaWwFA25pbAMJAAACBQd1bnN0YWtlBQd1bnN0YWtlCQDOCAIJAQh3aXRoZHJhdwIJARFAZXh0ck5hdGl2ZSgxMDYyKQEFB190cmFkZXIFB19hbW91bnQJAQ11cGRhdGVCYWxhbmNlAQkAZQIJAQhjYmFsYW5jZQAFB19hbW91bnQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BAnR4AQZ2ZXJpZnkACQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAACQEOYWRtaW5QdWJsaWNLZXkAfvFdHQ==", "height": 2211597, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 4wuhLQnkgRXUmTK25QfM5XrZ5dnvTmmwtTrhTEYVxPYN Next: FD79HV7nt9cMqbeiNzydMJbJ9aX8DrRNFKqqPLUWKLUh Diff:
OldNewDifferences
1717
1818 let h = "k_positionFraction"
1919
20-let i = "k_initialized"
20+let i = "k_positionClosedDate"
2121
22-let j = "k_paused"
22+let j = "k_initialized"
2323
24-let k = "k_fee"
24+let k = "k_paused"
2525
26-let l = "k_fundingPeriod"
26+let l = "k_fee"
2727
28-let m = "k_initMarginRatio"
28+let m = "k_fundingPeriod"
2929
30-let n = "k_mmr"
30+let n = "k_initMarginRatio"
3131
32-let o = "k_liquidationFeeRatio"
32+let o = "k_mmr"
3333
34-let p = "k_partLiquidationRatio"
34+let p = "k_liquidationFeeRatio"
3535
36-let q = "k_spreadLimit"
36+let q = "k_partLiquidationRatio"
3737
38-let r = "k_maxPriceImpact"
38+let r = "k_spreadLimit"
3939
40-let s = "k_maxPriceSpread"
40+let s = "k_maxPriceImpact"
4141
42-let t = "k_lastDataStr"
42+let t = "k_maxPriceSpread"
4343
44-let u = "k_lastMinuteId"
44+let u = "k_lastDataStr"
4545
46-let v = "k_twapDataLastCumulativePrice"
46+let v = "k_lastMinuteId"
4747
48-let w = "k_twapDataLastPrice"
48+let w = "k_twapDataLastCumulativePrice"
4949
50-let x = "k_twapDataPreviousMinuteId"
50+let x = "k_twapDataLastPrice"
5151
52-let y = "k_latestLongPremiumFraction"
52+let y = "k_twapDataPreviousMinuteId"
5353
54-let z = "k_latestShortPremiumFraction"
54+let z = "k_latestLongPremiumFraction"
5555
56-let A = "k_nextFundingBlockMinTimestamp"
56+let A = "k_latestShortPremiumFraction"
5757
58-let B = "k_longFundingRate"
58+let B = "k_nextFundingBlockMinTimestamp"
5959
60-let C = "k_shortFundingRate"
60+let C = "k_longFundingRate"
6161
62-let D = "k_qtAstR"
62+let D = "k_shortFundingRate"
6363
64-let E = "k_bsAstR"
64+let E = "k_qtAstR"
6565
66-let F = "k_totalPositionSize"
66+let F = "k_bsAstR"
6767
68-let G = "k_totalLongPositionSize"
68+let G = "k_totalPositionSize"
6969
70-let H = "k_totalShortPositionSize"
70+let H = "k_totalLongPositionSize"
7171
72-let I = "k_cumulativeNotional"
72+let I = "k_totalShortPositionSize"
7373
74-let J = "k_openInterestNotional"
74+let J = "k_cumulativeNotional"
7575
76-let K = "k_coordinatorAddress"
76+let K = "k_openInterestNotional"
7777
78-let L = "k_insurance_address"
78+let L = "k_coordinatorAddress"
7979
80-let M = "k_admin_address"
80+let M = "k_insurance_address"
8181
82-let N = "k_admin_public_key"
82+let N = "k_admin_address"
8383
84-let O = "k_quote_asset"
84+let O = "k_admin_public_key"
8585
86-let P = "k_quote_staking"
86+let P = "k_quote_asset"
8787
88-let Q = "k_staking_address"
88+let Q = "k_quote_staking"
8989
90-let R = "k_miner_address"
90+let R = "k_staking_address"
9191
92-func S () = valueOrErrorMessage(addressFromString(getStringValue(this, K)), "Coordinator not set")
92+let S = "k_miner_address"
93+
94+let T = "k_orders_address"
95+
96+func U () = valueOrErrorMessage(addressFromString(getStringValue(this, L)), "Coordinator not set")
9397
9498
95-func T () = addressFromString(getStringValue(S(), M))
99+func V () = addressFromString(getStringValue(U(), N))
96100
97101
98-func U () = fromBase58String(getStringValue(S(), N))
102+func W () = fromBase58String(getStringValue(U(), O))
99103
100104
101-func V () = fromBase58String(getStringValue(S(), O))
105+func X () = fromBase58String(getStringValue(U(), P))
102106
103107
104-func W () = valueOrErrorMessage(addressFromString(getStringValue(S(), P)), "Quote asset staking not set")
108+func Y () = valueOrErrorMessage(addressFromString(getStringValue(U(), Q)), "Quote asset staking not set")
105109
106110
107-func X () = valueOrErrorMessage(addressFromString(getStringValue(S(), Q)), "Insurance not set")
111+func Z () = valueOrErrorMessage(addressFromString(getStringValue(U(), R)), "Staking not set")
108112
109113
110-func Y () = valueOrErrorMessage(addressFromString(getStringValue(S(), L)), "Insurance not set")
114+func aa () = valueOrErrorMessage(addressFromString(getStringValue(U(), M)), "Insurance not set")
111115
112116
113-func Z () = valueOrErrorMessage(addressFromString(getStringValue(S(), R)), "Insurance not set")
117+func ab () = valueOrErrorMessage(addressFromString(getStringValue(U(), S)), "Miner not set")
114118
115119
116-let aa = 1
117-
118-let ab = 2
119-
120-let ac = 15
121-
122-let ad = 15
123-
124-let ae = 1000
125-
126-let af = (1 * (((((10 * 10) * 10) * 10) * 10) * 10))
127-
128-let ag = (86400 * af)
129-
130-let ah = 100
131-
132-let ai = 1
133-
134-let aj = 2
135-
136-func ak (al) = (toString(al) + ",")
120+func ac () = valueOrErrorMessage(addressFromString(getStringValue(U(), T)), "Orders not set")
137121
138122
139-func am (al,an) = fraction(al, af, an, HALFEVEN)
123+let ad = 1
124+
125+let ae = 2
126+
127+let af = 15
128+
129+let ag = 15
130+
131+let ah = 1000
132+
133+let ai = (1 * (((((10 * 10) * 10) * 10) * 10) * 10))
134+
135+let aj = (86400 * ai)
136+
137+let ak = 100
138+
139+let al = 1
140+
141+let am = 2
142+
143+func an (ao) = (toString(ao) + ",")
140144
141145
142-func ao (al,an) = fraction(al, an, af, HALFEVEN)
146+func ap (ao,aq) = fraction(ao, ai, aq, HALFEVEN)
143147
144148
145-func ap (al) = if ((al > 0))
146- then al
147- else -(al)
149+func ar (ao,aq) = fraction(ao, aq, ai, HALFEVEN)
148150
149151
150-func aq (al,an) = if ((al >= an))
151- then al
152- else an
152+func as (ao) = if ((ao > 0))
153+ then ao
154+ else -(ao)
153155
154156
155-func ar (as,at) = ((as + "_") + at)
157+func at (ao,aq) = if ((ao >= aq))
158+ then ao
159+ else aq
156160
157161
158-func au (av) = {
159- func aw (ax,ay) = ((ax + ay) + ",")
162+func au (av,aw) = ((av + "_") + aw)
160163
161- let az = {
162- let aA = av
163- let aB = size(aA)
164- let aC = ""
165- func aD (aE,aF) = if ((aF >= aB))
166- then aE
167- else aw(aE, aA[aF])
168164
169- func aG (aE,aF) = if ((aF >= aB))
170- then aE
165+func ax (ay) = {
166+ func az (aA,aB) = ((aA + aB) + ",")
167+
168+ let aC = {
169+ let aD = ay
170+ let aE = size(aD)
171+ let aF = ""
172+ func aG (aH,aI) = if ((aI >= aE))
173+ then aH
174+ else az(aH, aD[aI])
175+
176+ func aJ (aH,aI) = if ((aI >= aE))
177+ then aH
171178 else throw("List size exceeds 20")
172179
173- aG(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aC, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
180+ aJ(aG(aG(aG(aG(aG(aG(aG(aG(aG(aG(aG(aG(aG(aG(aG(aG(aG(aG(aG(aG(aF, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
174181 }
175- let aH = dropRight(az, 1)
176- let aI = if ((take(aH, 1) == ","))
177- then drop(aH, 1)
178- else aH
179- aI
182+ let aK = dropRight(aC, 1)
183+ let aL = if ((take(aK, 1) == ","))
184+ then drop(aK, 1)
185+ else aK
186+ aL
180187 }
181188
182189
183-func aJ (aK) = split(aK, ",")
190+func aM (aN) = split(aN, ",")
184191
185192
186-func aL (av,aM,aN) = if ((size(av) > aM))
187- then (removeByIndex(av, 0) :+ aN)
188- else (av :+ aN)
193+func aO (ay,aP,aQ) = if ((size(ay) > aP))
194+ then (removeByIndex(ay, 0) :+ aQ)
195+ else (ay :+ aQ)
189196
190197
191-func aO (aP) = valueOrErrorMessage(getInteger(this, aP), ("no value for " + aP))
198+func aR (aS) = valueOrErrorMessage(getInteger(this, aS), ("no value for " + aS))
192199
193200
194-func aQ () = aO(d)
201+func aT () = aR(d)
195202
196203
197-func aR () = aO(k)
204+func aU () = aR(l)
198205
199206
200-func aS () = aO(m)
207+func aV () = aR(n)
201208
202209
203-func aT () = aO(D)
210+func aW () = aR(E)
204211
205212
206-func aU () = aO(E)
213+func aX () = aR(F)
207214
208215
209-func aV () = aO(F)
216+func aY () = aR(G)
210217
211218
212-func aW () = aO(I)
219+func aZ () = aR(J)
213220
214221
215-func aX () = aO(J)
222+func ba () = aR(K)
216223
217224
218-func aY () = aO(A)
225+func bb () = aR(B)
219226
220227
221-func aZ () = aO(l)
228+func bc () = aR(m)
222229
223230
224-func ba () = (aZ() * af)
231+func bd () = (bc() * ai)
225232
226233
227-func bb () = (aZ() * ae)
234+func be () = (bc() * ah)
228235
229236
230-func bc () = aO(n)
237+func bf () = aR(o)
231238
232239
233-func bd () = aO(o)
240+func bg () = aR(p)
234241
235242
236-func be () = aO(p)
243+func bh () = aR(q)
237244
238245
239-func bf () = aO(q)
246+func bi () = aR(r)
240247
241248
242-func bg () = aO(r)
249+func bj () = aR(s)
243250
244251
245-func bh () = aO(s)
252+func bk () = aR(t)
246253
247254
248-func bi () = aO(y)
255+func bl () = aR(z)
249256
250257
251-func bj () = aO(z)
258+func bm () = aR(A)
252259
253260
254-func bk () = aO(H)
261+func bn () = aR(I)
255262
256263
257-func bl () = aO(G)
264+func bo () = aR(H)
258265
259266
260-func bm (bn,bo,bp) = {
261- let bq = (bn - bo)
262- if (if (bp)
263- then (0 > bq)
267+func bp (bq) = valueOrElse(getString(ac(), "k_sender"), toString(bq.caller))
268+
269+
270+func br (bs,bt,bu) = {
271+ let bv = (bs - bt)
272+ if (if (bu)
273+ then (0 > bv)
264274 else false)
265275 then throw("Invalid margin")
266- else if (if (!(bp))
267- then (bq >= 0)
276+ else if (if (!(bu))
277+ then (bv >= 0)
268278 else false)
269279 then throw("Invalid margin")
270280 else true
271281 }
272282
273283
274-func br (bs) = if ((bs == 0))
284+func bw (bx) = if ((bx == 0))
275285 then throw("Should not be called with _positionSize == 0")
276- else if ((bs > 0))
277- then bi()
278- else bj()
286+ else if ((bx > 0))
287+ then bl()
288+ else bm()
279289
280290
281-func bt (bu) = {
282- let bv = getInteger(this, ar(e, bu))
283- let bw = bv
284- if ($isInstanceOf(bw, "Int"))
291+func by (bz) = {
292+ let bA = getInteger(this, au(e, bz))
293+ let bB = bA
294+ if ($isInstanceOf(bB, "Int"))
285295 then {
286- let bx = bw
287- $Tuple4(bx, getIntegerValue(this, ar(f, bu)), getIntegerValue(this, ar(g, bu)), getIntegerValue(this, ar(h, bu)))
296+ let bC = bB
297+ $Tuple4(bC, getIntegerValue(this, au(f, bz)), getIntegerValue(this, au(g, bz)), getIntegerValue(this, au(h, bz)))
288298 }
289299 else $Tuple4(0, 0, 0, 0)
290300 }
291301
292302
293-func by (bu) = if ((bt(bu)._1 == 0))
303+func bD (bz) = if ((by(bz)._1 == 0))
294304 then throw("No open position")
295305 else true
296306
297307
298-func bz () = valueOrElse(getBoolean(this, i), false)
308+func bE () = valueOrElse(getBoolean(this, j), false)
299309
300310
301-func bA () = valueOrElse(getBoolean(this, j), false)
311+func bF () = valueOrElse(getBoolean(this, k), false)
302312
303313
304-func bB (bC,bD,bE) = if (bC)
314+func bG (bH,bI,bJ) = if (bH)
305315 then {
306- let bF = (aU() - bE)
307- if ((0 >= bF))
316+ let bK = (aX() - bJ)
317+ if ((0 >= bK))
308318 then throw("Tx lead to base asset reserve <= 0, revert")
309- else $Tuple4((aT() + bD), bF, (aV() + bE), (aW() + bD))
319+ else $Tuple4((aW() + bI), bK, (aY() + bJ), (aZ() + bI))
310320 }
311321 else {
312- let bG = (aT() - bD)
313- if ((0 >= bG))
322+ let bL = (aW() - bI)
323+ if ((0 >= bL))
314324 then throw("Tx lead to base quote reserve <= 0, revert")
315- else $Tuple4(bG, (aU() + bE), (aV() - bE), (aW() - bD))
325+ else $Tuple4(bL, (aX() + bJ), (aY() - bJ), (aZ() - bI))
316326 }
317327
318328
319-func bH (bC,bD) = {
320- let bI = aT()
321- let bJ = aU()
322- let aP = ao(bI, bJ)
323- let bK = if (bC)
324- then (bI + bD)
325- else (bI - bD)
326- let bL = am(aP, bK)
327- let bM = ap((bL - bJ))
328- let bN = if (bC)
329- then bM
330- else -(bM)
331- let bO = bB(bC, bD, bM)
332- let bP = bO._1
333- let bQ = bO._2
334- let bR = bO._3
335- let bS = bO._4
336- let bT = am(bI, bJ)
337- let bU = am(bD, bM)
338- let bV = ap((bT - bU))
339- let bW = (af - am(bT, (bT + bV)))
340- let bX = bg()
341- if ((bW > bX))
342- then throw(((((((((((((("Price impact " + toString(bW)) + " > max price impact ") + toString(bX)) + " before quote asset: ") + toString(bI)) + " before base asset: ") + toString(bJ)) + " quote asset amount to exchange: ") + toString(bD)) + " price before: ") + toString(bT)) + " marketPrice: ") + toString(bU)))
343- else $Tuple5(bN, bP, bQ, bR, bS)
329+func bM (bH,bI) = {
330+ let bN = aW()
331+ let bO = aX()
332+ let aS = ar(bN, bO)
333+ let bP = if (bH)
334+ then (bN + bI)
335+ else (bN - bI)
336+ let bQ = ap(aS, bP)
337+ let bR = as((bQ - bO))
338+ let bS = if (bH)
339+ then bR
340+ else -(bR)
341+ let bT = bG(bH, bI, bR)
342+ let bU = bT._1
343+ let bV = bT._2
344+ let bW = bT._3
345+ let bX = bT._4
346+ let bY = ap(bN, bO)
347+ let bZ = ap(bI, bR)
348+ let ca = as((bY - bZ))
349+ let cb = (ai - ap(bY, (bY + ca)))
350+ let cc = bj()
351+ if ((cb > cc))
352+ then throw(((((((((((((("Price impact " + toString(cb)) + " > max price impact ") + toString(cc)) + " before quote asset: ") + toString(bN)) + " before base asset: ") + toString(bO)) + " quote asset amount to exchange: ") + toString(bI)) + " price before: ") + toString(bY)) + " marketPrice: ") + toString(bZ)))
353+ else $Tuple5(bS, bU, bV, bW, bX)
344354 }
345355
346356
347-func bY (bZ,ca,cb,cc) = {
348- let cd = if ((bZ != 0))
357+func cd (ce,cf,cg,ch) = {
358+ let ci = if ((ce != 0))
349359 then {
350- let ce = br(bZ)
351- ao((ce - cb), bZ)
360+ let cj = bw(ce)
361+ ar((cj - cg), ce)
352362 }
353363 else 0
354- let cf = ((cc - cd) + ca)
355- let cg = if ((0 > cf))
356- then $Tuple2(0, ap(cf))
357- else $Tuple2(ap(cf), 0)
358- let ch = cg._1
359- let ci = cg._2
360- $Tuple3(ch, ci, cd)
364+ let ck = ((ch - ci) + cf)
365+ let cl = if ((0 > ck))
366+ then $Tuple2(0, as(ck))
367+ else $Tuple2(as(ck), 0)
368+ let cm = cl._1
369+ let cn = cl._2
370+ $Tuple3(cm, cn, ci)
361371 }
362372
363373
364-func cj (bC,bE,ck,cl,cm) = {
365- let bT = am(cl, cm)
366- if ((bE == 0))
374+func co (bH,bJ,cp,cq,cr) = {
375+ let bY = ap(cq, cr)
376+ if ((bJ == 0))
367377 then throw("Invalid base asset amount")
368378 else {
369- let aP = ao(cl, cm)
370- let cn = if (bC)
371- then (cm + bE)
372- else (cm - bE)
373- let co = am(aP, cn)
374- let cp = ap((co - cl))
375- let bX = bg()
376- let cq = bB(!(bC), cp, bE)
377- let bP = cq._1
378- let bQ = cq._2
379- let bR = cq._3
380- let bS = cq._4
381- let bU = am(cp, bE)
382- let bV = ap((bT - bU))
383- let bW = (af - am(bT, (bT + bV)))
384- if (if ((bW > bX))
385- then ck
379+ let aS = ar(cq, cr)
380+ let cs = if (bH)
381+ then (cr + bJ)
382+ else (cr - bJ)
383+ let ct = ap(aS, cs)
384+ let cu = as((ct - cq))
385+ let cc = bj()
386+ let cv = bG(!(bH), cu, bJ)
387+ let bU = cv._1
388+ let bV = cv._2
389+ let bW = cv._3
390+ let bX = cv._4
391+ let bZ = ap(cu, bJ)
392+ let ca = as((bY - bZ))
393+ let cb = (ai - ap(bY, (bY + ca)))
394+ if (if ((cb > cc))
395+ then cp
386396 else false)
387- then throw(((((((((((((("Price impact " + toString(bW)) + " > max price impact ") + toString(bX)) + " before quote asset: ") + toString(cl)) + " before base asset: ") + toString(cm)) + " base asset amount to exchange: ") + toString(bE)) + " price before: ") + toString(bT)) + " market price: ") + toString(bU)))
388- else $Tuple8(cp, bP, bQ, bR, bS, (bl() - (if (bC)
389- then ap(bE)
390- else 0)), (bk() - (if (!(bC))
391- then ap(bE)
392- else 0)), bW)
397+ then throw(((((((((((((("Price impact " + toString(cb)) + " > max price impact ") + toString(cc)) + " before quote asset: ") + toString(cq)) + " before base asset: ") + toString(cr)) + " base asset amount to exchange: ") + toString(bJ)) + " price before: ") + toString(bY)) + " market price: ") + toString(bZ)))
398+ else $Tuple8(cu, bU, bV, bW, bX, (bo() - (if (bH)
399+ then as(bJ)
400+ else 0)), (bn() - (if (!(bH))
401+ then as(bJ)
402+ else 0)), cb)
393403 }
394404 }
395405
396406
397-func cr (bC,bE,ck) = cj(bC, bE, ck, aT(), aU())
407+func cw (bH,bJ,cp) = co(bH, bJ, cp, aW(), aX())
398408
399409
400-func cs () = {
401- let ct = valueOrErrorMessage(addressFromString(getStringValue(this, c)), "")
402- let cu = getStringValue(this, a)
403- let cv = getStringValue(this, b)
404- let cw = valueOrErrorMessage(getInteger(ct, cu), ((("Can not get oracle price. Oracle: " + toString(ct)) + " key: ") + cu))
405- cw
410+func cx () = {
411+ let cy = valueOrErrorMessage(addressFromString(getStringValue(this, c)), "")
412+ let cz = getStringValue(this, a)
413+ let cA = getStringValue(this, b)
414+ let cB = valueOrErrorMessage(getInteger(cy, cz), ((("Can not get oracle price. Oracle: " + toString(cy)) + " key: ") + cz))
415+ cB
406416 }
407417
408418
409-func cx (cl,cm) = {
410- let cy = cs()
411- let cz = am(cl, cm)
412- let cA = am((cy + cz), (2 * af))
413- let cB = am(ap((cy - cz)), cA)
414- if ((cB > bh()))
415- then throw(((("Price spread " + toString(cB)) + " > max price spread ") + toString(bh())))
419+func cC (cq,cr) = {
420+ let cD = cx()
421+ let cE = ap(cq, cr)
422+ let cF = ap((cD + cE), (2 * ai))
423+ let cG = ap(as((cD - cE)), cF)
424+ if ((cG > bk()))
425+ then throw(((("Price spread " + toString(cG)) + " > max price spread ") + toString(bk())))
416426 else true
417427 }
418428
419429
420-func cC () = {
421- let cl = aT()
422- let cm = aU()
423- am(cl, cm)
430+func cH () = {
431+ let cq = aW()
432+ let cr = aX()
433+ ap(cq, cr)
424434 }
425435
426436
427-func cD () = {
428- let cy = cs()
429- let cE = cC()
430- (am(ap((cy - cE)), cy) > bf())
437+func cI () = {
438+ let cD = cx()
439+ let cJ = cH()
440+ (ap(as((cD - cJ)), cD) > bi())
431441 }
432442
433443
434-func cF (bs,cG,cl,cm) = {
435- let cH = ap(bs)
436- let cI = (0 > bs)
437- let cJ = if ((cG == ai))
444+func cK (bx,cL,cq,cr) = {
445+ let cM = as(bx)
446+ let cN = (0 > bx)
447+ let cO = if ((cL == al))
438448 then {
439- let cK = cj(!(cI), cH, false, cl, cm)
440- let cL = cK._1
441- let cM = cK._2
442- let cN = cK._3
443- let cO = cK._4
444- cL
449+ let cP = co(!(cN), cM, false, cq, cr)
450+ let cQ = cP._1
451+ let cR = cP._2
452+ let cS = cP._3
453+ let cT = cP._4
454+ cQ
445455 }
446- else ao(cH, cs())
447- cJ
456+ else ar(cM, cx())
457+ cO
448458 }
449459
450460
451-func cP (bu,cG) = {
452- let cQ = bt(bu)
453- let bx = cQ._1
454- let cR = cQ._2
455- let cS = cQ._3
456- let cT = cQ._4
457- if ((bx == 0))
461+func cU (bz,cL) = {
462+ let cV = by(bz)
463+ let bC = cV._1
464+ let cW = cV._2
465+ let cX = cV._3
466+ let cY = cV._4
467+ if ((bC == 0))
458468 then throw("Invalid position size")
459469 else {
460- let cI = (0 > bx)
461- let cJ = cF(bx, cG, aT(), aU())
462- let cU = if (cI)
463- then (cS - cJ)
464- else (cJ - cS)
465- $Tuple2(cJ, cU)
470+ let cN = (0 > bC)
471+ let cO = cK(bC, cL, aW(), aX())
472+ let cZ = if (cN)
473+ then (cX - cO)
474+ else (cO - cX)
475+ $Tuple2(cO, cZ)
466476 }
467477 }
468478
469479
470-func cV (cW,cX,cY) = am((cW - cX), cY)
480+func da (db,dc,dd) = ap((db - dc), dd)
471481
472482
473-func cZ (bu,cG) = {
474- let da = bt(bu)
475- let bx = da._1
476- let cR = da._2
477- let db = da._3
478- let cT = da._4
479- let dc = cP(bu, cG)
480- let cJ = dc._1
481- let cU = dc._2
482- let dd = bY(bx, cR, cT, cU)
483- let ch = dd._1
484- let ci = dd._2
485- cV(ch, ci, cJ)
483+func de (bz,cL) = {
484+ let df = by(bz)
485+ let bC = df._1
486+ let cW = df._2
487+ let dg = df._3
488+ let cY = df._4
489+ let dh = cU(bz, cL)
490+ let cO = dh._1
491+ let cZ = dh._2
492+ let di = cd(bC, cW, cY, cZ)
493+ let cm = di._1
494+ let cn = di._2
495+ da(cm, cn, cO)
486496 }
487497
488498
489-func de (bu) = cZ(bu, ai)
499+func dj (bz) = de(bz, al)
490500
491501
492-func df (bu,bs) = {
493- let dg = aq(be(), (af - am(de(bu), bc())))
494- let dh = ao(ap(bs), dg)
495- let di = cr((bs > 0), dh, false)
496- let dj = di._1
497- let bW = di._8
498- if ((bg() > bW))
499- then dj
502+func dk (bz,bx) = {
503+ let dl = at(bh(), (ai - ap(dj(bz), bf())))
504+ let dm = ar(as(bx), dl)
505+ let dn = cw((bx > 0), dm, false)
506+ let do = dn._1
507+ let cb = dn._8
508+ if ((bj() > cb))
509+ then do
500510 else {
501- let dk = ao(ap(bs), be())
502- let dl = cr((bs > 0), dk, false)._1
503- dl
511+ let dp = ar(as(bx), bh())
512+ let dq = cw((bx > 0), dp, false)._1
513+ dq
504514 }
505515 }
506516
507517
508-func dm (bu,ck) = {
509- let dn = bt(bu)
510- let bx = dn._1
511- let cR = dn._2
512- let cS = dn._3
513- let cT = dn._4
514- let cU = cP(bu, ai)._2
515- let do = bY(bx, cR, cT, cU)
516- let ch = do._1
517- let ci = do._2
518- let dk = -(bx)
519- let dp = cU
520- let dq = -(ch)
521- let dr = cr((bx > 0), ap(bx), ck)
522- let dl = dr._1
523- let bK = dr._2
524- let bL = dr._3
525- let ds = dr._4
526- let dt = dr._5
527- let du = dr._6
528- let dv = dr._7
529- let dw = (aX() - cS)
530- $Tuple12(dk, ci, dp, dq, bK, bL, ds, dt, dw, dl, du, dv)
518+func dr (bz,cp) = {
519+ let ds = by(bz)
520+ let bC = ds._1
521+ let cW = ds._2
522+ let cX = ds._3
523+ let cY = ds._4
524+ let cZ = cU(bz, al)._2
525+ let dt = cd(bC, cW, cY, cZ)
526+ let cm = dt._1
527+ let cn = dt._2
528+ let dp = -(bC)
529+ let du = cZ
530+ let dv = -(cm)
531+ let dw = cw((bC > 0), as(bC), cp)
532+ let dq = dw._1
533+ let bP = dw._2
534+ let bQ = dw._3
535+ let dx = dw._4
536+ let dy = dw._5
537+ let dz = dw._6
538+ let dA = dw._7
539+ let dB = (ba() - cX)
540+ $Tuple12(dp, cn, du, dv, bP, bQ, dx, dy, dB, dq, dz, dA)
531541 }
532542
533543
534-func dx () = {
535- let dy = ((lastBlock.timestamp / 1000) / 60)
536- let dz = (dy - ac)
537- let dA = valueOrElse(getString(this, t), "")
538- let dB = split(dA, ",")
539- func dC (ax,dD) = if ((dz >= parseIntValue(dD)))
540- then (ax :+ parseIntValue(dD))
541- else ax
544+func dC () = {
545+ let dD = ((lastBlock.timestamp / 1000) / 60)
546+ let dE = (dD - af)
547+ let dF = valueOrElse(getString(this, u), "")
548+ let dG = split(dF, ",")
549+ func dH (aA,dI) = if ((dE >= parseIntValue(dI)))
550+ then (aA :+ parseIntValue(dI))
551+ else aA
542552
543- let dE = {
544- let aA = dB
545- let aB = size(aA)
546- let aC = nil
547- func aD (aE,aF) = if ((aF >= aB))
548- then aE
549- else dC(aE, aA[aF])
553+ let dJ = {
554+ let aD = dG
555+ let aE = size(aD)
556+ let aF = nil
557+ func aG (aH,aI) = if ((aI >= aE))
558+ then aH
559+ else dH(aH, aD[aI])
550560
551- func aG (aE,aF) = if ((aF >= aB))
552- then aE
561+ func aJ (aH,aI) = if ((aI >= aE))
562+ then aH
553563 else throw("List size exceeds 20")
554564
555- aG(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aC, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
565+ aJ(aG(aG(aG(aG(aG(aG(aG(aG(aG(aG(aG(aG(aG(aG(aG(aG(aG(aG(aG(aG(aF, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
556566 }
557- let dF = if ((size(dE) > 0))
558- then max(dE)
559- else parseIntValue(dB[0])
560- let dG = valueOrElse(getInteger(this, u), 0)
561- let dH = valueOrElse(getInteger(this, ((v + "_") + toString(dG))), 0)
562- let dI = valueOrElse(getInteger(this, ((w + "_") + toString(dG))), 0)
563- let dJ = (dH + ((dy - dG) * dI))
564- let dK = valueOrElse(getInteger(this, ((v + "_") + toString(dF))), 0)
565- let dL = valueOrElse(getInteger(this, ((w + "_") + toString(dF))), 0)
566- let dM = (dK + ((dz - dF) * dL))
567- ((dJ - dM) / ac)
567+ let dK = if ((size(dJ) > 0))
568+ then max(dJ)
569+ else parseIntValue(dG[0])
570+ let dL = valueOrElse(getInteger(this, v), 0)
571+ let dM = valueOrElse(getInteger(this, ((w + "_") + toString(dL))), 0)
572+ let dN = valueOrElse(getInteger(this, ((x + "_") + toString(dL))), 0)
573+ let dO = (dM + ((dD - dL) * dN))
574+ let dP = valueOrElse(getInteger(this, ((w + "_") + toString(dK))), 0)
575+ let dQ = valueOrElse(getInteger(this, ((x + "_") + toString(dK))), 0)
576+ let dR = (dP + ((dE - dK) * dQ))
577+ ((dO - dR) / af)
568578 }
569579
570580
571-func dN (dO,dP,dQ,dR,dS,dT,dU,dV,dW) = [IntegerEntry(m, dO), IntegerEntry(n, dP), IntegerEntry(o, dQ), IntegerEntry(l, dR), IntegerEntry(k, dS), IntegerEntry(q, dT), IntegerEntry(r, dU), IntegerEntry(p, dV), IntegerEntry(s, dW)]
581+func dS (dT,dU,dV,dW,dX,dY,dZ,ea,eb) = [IntegerEntry(n, dT), IntegerEntry(o, dU), IntegerEntry(p, dV), IntegerEntry(m, dW), IntegerEntry(l, dX), IntegerEntry(r, dY), IntegerEntry(s, dZ), IntegerEntry(q, ea), IntegerEntry(t, eb)]
572582
573583
574-func dX (dY,dZ,ea,eb,ec) = [IntegerEntry(A, dY), IntegerEntry(y, dZ), IntegerEntry(z, ea), IntegerEntry(B, eb), IntegerEntry(C, ec)]
584+func ec (ed,ee,ef,eg,eh) = [IntegerEntry(B, ed), IntegerEntry(z, ee), IntegerEntry(A, ef), IntegerEntry(C, eg), IntegerEntry(D, eh)]
575585
576586
577-func ed (at,ee,ef,eg,ce) = [IntegerEntry(ar(e, at), ee), IntegerEntry(ar(f, at), ef), IntegerEntry(ar(g, at), eg), IntegerEntry(ar(h, at), ce)]
587+func ei (aw,ej,ek,el,cj) = [IntegerEntry(au(e, aw), ej), IntegerEntry(au(f, aw), ek), IntegerEntry(au(g, aw), el), IntegerEntry(au(h, aw), cj)]
578588
579589
580-func eh (ei) = {
581- let dy = ((lastBlock.timestamp / 1000) / 60)
582- let ej = valueOrElse(getInteger(this, u), 0)
583- if ((ej > dy))
590+func em (en) = {
591+ let dD = ((lastBlock.timestamp / 1000) / 60)
592+ let eo = valueOrElse(getInteger(this, v), 0)
593+ if ((eo > dD))
584594 then throw("TWAP out-of-order")
585595 else {
586- let dG = if ((ej == 0))
587- then dy
588- else ej
589- if ((dy > ej))
596+ let dL = if ((eo == 0))
597+ then dD
598+ else eo
599+ if ((dD > eo))
590600 then {
591- let ek = valueOrElse(getInteger(this, ((v + "_") + toString(ej))), 0)
592- let el = valueOrElse(getInteger(this, ((w + "_") + toString(ej))), ei)
593- let em = (ek + ((dy - dG) * el))
594- let dB = aL(aJ(valueOrElse(getString(this, t), "")), ac, toString(dy))
595-[IntegerEntry(ar(v, toString(dy)), em), IntegerEntry(ar(w, toString(dy)), ei), IntegerEntry(ar(x, toString(dy)), ej), IntegerEntry(u, dy), StringEntry(t, au(dB))]
601+ let ep = valueOrElse(getInteger(this, ((w + "_") + toString(eo))), 0)
602+ let eq = valueOrElse(getInteger(this, ((x + "_") + toString(eo))), en)
603+ let er = (ep + ((dD - dL) * eq))
604+ let dG = aO(aM(valueOrElse(getString(this, u), "")), af, toString(dD))
605+[IntegerEntry(au(w, toString(dD)), er), IntegerEntry(au(x, toString(dD)), en), IntegerEntry(au(y, toString(dD)), eo), IntegerEntry(v, dD), StringEntry(u, ax(dG))]
596606 }
597607 else {
598- let en = valueOrElse(getInteger(this, ar(x, toString(dy))), 0)
599- let ek = valueOrElse(getInteger(this, ar(v, toString(en))), 0)
600- let el = valueOrElse(getInteger(this, ar(w, toString(en))), ei)
601- let em = (ek + ((dy - en) * el))
602-[IntegerEntry(ar(v, toString(dy)), em), IntegerEntry(ar(w, toString(dy)), ei)]
608+ let es = valueOrElse(getInteger(this, au(y, toString(dD))), 0)
609+ let ep = valueOrElse(getInteger(this, au(w, toString(es))), 0)
610+ let eq = valueOrElse(getInteger(this, au(x, toString(es))), en)
611+ let er = (ep + ((dD - es) * eq))
612+[IntegerEntry(au(w, toString(dD)), er), IntegerEntry(au(x, toString(dD)), en)]
603613 }
604614 }
605615 }
606616
607617
608-func eo (bI,bJ) = [IntegerEntry(D, bI), IntegerEntry(E, bJ)]
618+func et (bN,bO) = [IntegerEntry(E, bN), IntegerEntry(F, bO)]
609619
610620
611-func ep (bI,bJ,eq,er,es,et,eu) = if (((et - eu) != eq))
612- then throw(((((("Invalid AMM state data: " + toString(et)) + " + ") + toString(eu)) + " != ") + toString(eq)))
613- else ((eo(bI, bJ) ++ [IntegerEntry(F, eq), IntegerEntry(I, er), IntegerEntry(J, es), IntegerEntry(G, et), IntegerEntry(H, eu)]) ++ eh(am(bI, bJ)))
621+func eu (bN,bO,ev,ew,ex,ey,ez) = if (((ey - ez) != ev))
622+ then throw(((((("Invalid AMM state data: " + toString(ey)) + " + ") + toString(ez)) + " != ") + toString(ev)))
623+ else ((et(bN, bO) ++ [IntegerEntry(G, ev), IntegerEntry(J, ew), IntegerEntry(K, ex), IntegerEntry(H, ey), IntegerEntry(I, ez)]) ++ em(ap(bN, bO)))
614624
615625
616-func ev (at) = [DeleteEntry(ar(e, at)), DeleteEntry(ar(f, at)), DeleteEntry(ar(g, at)), DeleteEntry(ar(h, at))]
626+func eA (aw) = [DeleteEntry(au(e, aw)), DeleteEntry(au(f, aw)), DeleteEntry(au(g, aw)), DeleteEntry(au(h, aw)), IntegerEntry(au(i, aw), lastBlock.timestamp)]
617627
618628
619-func ew (at,ex) = {
620- let ey = assetBalance(this, V())
621- if ((ex > ey))
622- then throw(((("Unable to withdraw " + toString(ex)) + " from contract balance ") + toString(ey)))
623- else [ScriptTransfer(at, ex, V())]
629+func eB (aw,eC) = {
630+ let eD = assetBalance(this, X())
631+ if ((eC > eD))
632+ then throw(((("Unable to withdraw " + toString(eC)) + " from contract balance ") + toString(eD)))
633+ else [ScriptTransfer(aw, eC, X())]
624634 }
625635
626636
627-func ez (eA) = if ((0 > eA))
637+func eE (bq) = if ((0 > bq))
628638 then throw("Balance")
629- else [IntegerEntry(d, eA)]
639+ else [IntegerEntry(d, bq)]
630640
631641
632-func eB (eA) = [ScriptTransfer(X(), eA, V())]
642+func eF (bq) = [ScriptTransfer(Z(), bq, X())]
633643
634644
635-@Callable(eA)
636-func pause () = if ((eA.caller != T()))
645+@Callable(bq)
646+func pause () = if ((bq.caller != V()))
637647 then throw("Invalid togglePause params")
638- else [BooleanEntry(j, true)]
648+ else [BooleanEntry(k, true)]
639649
640650
641651
642-@Callable(eA)
643-func unpause () = if ((eA.caller != T()))
652+@Callable(bq)
653+func unpause () = if ((bq.caller != V()))
644654 then throw("Invalid togglePause params")
645- else [BooleanEntry(j, false)]
655+ else [BooleanEntry(k, false)]
646656
647657
648658
649-@Callable(eA)
650-func addLiquidity (bD) = if (if ((eA.caller != T()))
659+@Callable(bq)
660+func addLiquidity (bI) = if (if ((bq.caller != V()))
651661 then true
652- else (0 >= bD))
662+ else (0 >= bI))
653663 then throw("Invalid addLiquidity params")
654664 else {
655- let bI = aT()
656- let bJ = aU()
657- let ei = am(bI, bJ)
658- let eC = am(bD, ei)
659- let eD = (bI + bD)
660- let eE = (bJ + eC)
661- eo(eD, eE)
665+ let bN = aW()
666+ let bO = aX()
667+ let en = ap(bN, bO)
668+ let eG = ap(bI, en)
669+ let eH = (bN + bI)
670+ let eI = (bO + eG)
671+ et(eH, eI)
662672 }
663673
664674
665675
666-@Callable(eA)
667-func removeLiquidity (bD) = if (if ((eA.caller != T()))
676+@Callable(bq)
677+func removeLiquidity (bI) = if (if ((bq.caller != V()))
668678 then true
669- else (0 >= bD))
679+ else (0 >= bI))
670680 then throw("Invalid removeLiquidity params")
671681 else {
672- let bI = aT()
673- let bJ = aU()
674- let ei = am(bI, bJ)
675- let eF = am(bD, ei)
676- let eD = (bI - bD)
677- let eE = (bJ - eF)
678- eo(eD, eE)
682+ let bN = aW()
683+ let bO = aX()
684+ let en = ap(bN, bO)
685+ let eJ = ap(bI, en)
686+ let eH = (bN - bI)
687+ let eI = (bO - eJ)
688+ et(eH, eI)
679689 }
680690
681691
682692
683-@Callable(eA)
684-func changeSettings (dO,dP,dQ,dR,dS,dT,dU,dV,dW) = if ((eA.caller != T()))
693+@Callable(bq)
694+func changeSettings (dT,dU,dV,dW,dX,dY,dZ,ea,eb) = if ((bq.caller != V()))
685695 then throw("Invalid changeSettings params")
686- else dN(dO, dP, dQ, dR, dS, dT, dU, dV, dW)
696+ else dS(dT, dU, dV, dW, dX, dY, dZ, ea, eb)
687697
688698
689699
690-@Callable(eA)
691-func initialize (bI,bJ,dR,dO,dP,dQ,dS,eG,eH,eI,dT,dU,dV,dW) = if (if (if (if (if (if (if (if (if (if (if (if ((0 >= bI))
700+@Callable(bq)
701+func initialize (bN,bO,dW,dT,dU,dV,dX,eK,eL,eM,dY,dZ,ea,eb) = if (if (if (if (if (if (if (if (if (if (if (if ((0 >= bN))
692702 then true
693- else (0 >= bJ))
703+ else (0 >= bO))
694704 then true
695- else (0 >= dR))
696- then true
697- else (0 >= dO))
698- then true
699- else (0 >= dP))
700- then true
701- else (0 >= dQ))
702- then true
703- else (0 >= dS))
705+ else (0 >= dW))
704706 then true
705707 else (0 >= dT))
706708 then true
708710 then true
709711 else (0 >= dV))
710712 then true
711- else (0 >= dW))
713+ else (0 >= dX))
712714 then true
713- else bz())
715+ else (0 >= dY))
716+ then true
717+ else (0 >= dZ))
718+ then true
719+ else (0 >= ea))
720+ then true
721+ else (0 >= eb))
722+ then true
723+ else bE())
714724 then throw("Invalid initialize parameters")
715- else ((((ep(bI, bJ, 0, 0, 0, 0, 0) ++ dN(dO, dP, dQ, dR, dS, dT, dU, dV, dW)) ++ dX((lastBlock.timestamp + dR), 0, 0, 0, 0)) ++ ez(0)) ++ [BooleanEntry(i, true), StringEntry(c, eG), StringEntry(a, eH), StringEntry(K, eI)])
725+ else ((((eu(bN, bO, 0, 0, 0, 0, 0) ++ dS(dT, dU, dV, dW, dX, dY, dZ, ea, eb)) ++ ec((lastBlock.timestamp + dW), 0, 0, 0, 0)) ++ eE(0)) ++ [BooleanEntry(j, true), StringEntry(c, eK), StringEntry(a, eL), StringEntry(L, eM)])
716726
717727
718728
719-@Callable(eA)
720-func setInitMarginRatio (dO) = if (if ((0 >= dO))
729+@Callable(bq)
730+func setInitMarginRatio (dT) = if (if ((0 >= dT))
721731 then true
722- else !(bz()))
732+ else !(bE()))
723733 then throw("Invalid setInitMarginRatio parameters")
724- else dN(dO, bc(), bd(), aZ(), aR(), bf(), bg(), be(), bh())
734+ else dS(dT, bf(), bg(), bc(), aU(), bi(), bj(), bh(), bk())
725735
726736
727737
728-@Callable(eA)
729-func decreasePosition (ex,eJ,eK) = if (if (if (if (if ((0 >= ex))
738+@Callable(bq)
739+func decreasePosition (eC,eN,eO) = if (if (if (if (if ((0 >= eC))
730740 then true
731- else !(bz()))
741+ else !(bE()))
732742 then true
733- else !(bm(am(af, eJ), aS(), true)))
743+ else !(br(ap(ai, eN), aV(), true)))
734744 then true
735- else !(by(toString(eA.caller))))
745+ else !(bD(toString(bq.caller))))
736746 then true
737- else bA())
747+ else bF())
738748 then throw("Invalid decreasePosition parameters")
739749 else {
740- let eL = bt(toString(eA.caller))
741- let eM = eL._1
742- let eN = eL._2
743- let eO = eL._3
744- let eP = eL._4
745- let eQ = if ((eM > 0))
746- then ab
747- else aa
748- let eR = (eQ == aa)
749- let eS = ao(ex, eJ)
750- let eT = cP(toString(eA.caller), ai)
751- let eU = eT._1
752- let cU = eT._2
753- let eV = if ((eU > eS))
750+ let eP = by(toString(bq.caller))
751+ let eQ = eP._1
752+ let eR = eP._2
753+ let eS = eP._3
754+ let eT = eP._4
755+ let eU = if ((eQ > 0))
756+ then ae
757+ else ad
758+ let eV = (eU == ad)
759+ let eW = ar(eC, eN)
760+ let eX = cU(toString(bq.caller), al)
761+ let eY = eX._1
762+ let cZ = eX._2
763+ let eZ = if ((eY > eW))
754764 then {
755- let eW = bH(eR, eS)
756- let dk = eW._1
757- let bK = eW._2
758- let bL = eW._3
759- let ds = eW._4
760- let dt = eW._5
761- let eX = ap(dk)
762- if (if ((eK != 0))
763- then (eK > eX)
765+ let fa = bM(eV, eW)
766+ let dp = fa._1
767+ let bP = fa._2
768+ let bQ = fa._3
769+ let dx = fa._4
770+ let dy = fa._5
771+ let fb = as(dp)
772+ if (if ((eO != 0))
773+ then (eO > fb)
764774 else false)
765- then throw(((("Too little base asset exchanged, got " + toString(eX)) + " expected ") + toString(eK)))
775+ then throw(((("Too little base asset exchanged, got " + toString(fb)) + " expected ") + toString(eO)))
766776 else {
767- let dp = am(ao(cU, eX), ap(eM))
768- let eY = bY(eM, eN, eP, dp)
769- let ch = eY._1
770- let ci = eY._2
771- let cd = eY._3
772- let dl = eS
773- let eZ = (cU - dp)
774- let fa = if ((eM > 0))
775- then ((eU - dl) - eZ)
776- else ((eZ + eU) - dl)
777- let fb = (eM + dk)
778- $Tuple11(fb, ch, ap(fa), br(fb), bL, bK, ds, dt, (aX() - eS), (bl() - (if ((fb > 0))
779- then ap(dk)
780- else 0)), (bk() - (if ((0 > fb))
781- then ap(dk)
777+ let du = ap(ar(cZ, fb), as(eQ))
778+ let fc = cd(eQ, eR, eT, du)
779+ let cm = fc._1
780+ let cn = fc._2
781+ let ci = fc._3
782+ let dq = eW
783+ let fd = (cZ - du)
784+ let fe = if ((eQ > 0))
785+ then ((eY - dq) - fd)
786+ else ((fd + eY) - dq)
787+ let ff = (eQ + dp)
788+ $Tuple11(ff, cm, as(fe), bw(ff), bQ, bP, dx, dy, (ba() - eW), (bo() - (if ((ff > 0))
789+ then as(dp)
790+ else 0)), (bn() - (if ((0 > ff))
791+ then as(dp)
782792 else 0)))
783793 }
784794 }
785795 else throw("Close position first")
786- let fb = eV._1
787- let fc = eV._2
788- let fd = eV._3
789- let fe = eV._4
790- let bL = eV._5
791- let bK = eV._6
792- let ds = eV._7
793- let dt = eV._8
794- let dw = eV._9
795- let du = eV._10
796- let dv = eV._11
797- let ff = invoke(Z(), "notifyNotional", [toString(eA.caller), fd], nil)
798- if ((ff == ff))
799- then (ed(toString(eA.caller), fb, fc, fd, fe) ++ ep(bK, bL, ds, dt, dw, du, dv))
796+ let ff = eZ._1
797+ let fg = eZ._2
798+ let fh = eZ._3
799+ let fi = eZ._4
800+ let bQ = eZ._5
801+ let bP = eZ._6
802+ let dx = eZ._7
803+ let dy = eZ._8
804+ let dB = eZ._9
805+ let dz = eZ._10
806+ let dA = eZ._11
807+ let fj = invoke(ab(), "notifyNotional", [toString(bq.caller), fh], nil)
808+ if ((fj == fj))
809+ then (ei(toString(bq.caller), ff, fg, fh, fi) ++ eu(bP, bQ, dx, dy, dB, dz, dA))
800810 else throw("Strict value is not equal to itself.")
801811 }
802812
803813
804814
805-@Callable(eA)
806-func increasePosition (eQ,eJ,eK) = {
807- let fg = eA.payments[0].amount
808- if (if (if (if (if (if (if ((eQ != aa))
809- then (eQ != ab)
815+@Callable(bq)
816+func increasePosition (eU,eN,eO) = {
817+ let fk = bq.payments[0].amount
818+ if (if (if (if (if (if (if ((eU != ad))
819+ then (eU != ae)
810820 else false)
811821 then true
812- else (0 >= fg))
822+ else (0 >= fk))
813823 then true
814- else !(bz()))
824+ else !(bE()))
815825 then true
816- else (eA.payments[0].assetId != V()))
826+ else (bq.payments[0].assetId != X()))
817827 then true
818- else !(bm(am(af, eJ), aS(), true)))
828+ else !(br(ap(ai, eN), aV(), true)))
819829 then true
820- else bA())
830+ else bF())
821831 then throw("Invalid increasePosition parameters")
822832 else {
823- let fh = ao(fg, aR())
824- let ex = (fg - fh)
825- let fi = bt(toString(eA.caller))
826- let eM = fi._1
827- let eN = fi._2
828- let eO = fi._3
829- let eP = fi._4
830- let fj = (eM == 0)
831- let fk = if ((eM > 0))
832- then (eQ == aa)
833- else (eQ == ab)
834- let fl = if (!(fj))
835- then fk
833+ let fl = ar(fk, aU())
834+ let eC = (fk - fl)
835+ let fm = by(toString(bq.caller))
836+ let eQ = fm._1
837+ let eR = fm._2
838+ let eS = fm._3
839+ let eT = fm._4
840+ let fn = (eQ == 0)
841+ let fo = if ((eQ > 0))
842+ then (eU == ad)
843+ else (eU == ae)
844+ let fp = if (!(fn))
845+ then fo
836846 else false
837- let eR = (eQ == aa)
838- let fm = if (if (fj)
847+ let eV = (eU == ad)
848+ let fq = if (if (fn)
839849 then true
840- else fl)
850+ else fp)
841851 then {
842- let eS = ao(ex, eJ)
843- let fn = bH(eR, eS)
844- let bN = fn._1
845- let bK = fn._2
846- let bL = fn._3
847- let ds = fn._4
848- let dt = fn._5
849- if (if ((eK != 0))
850- then (eK > ap(bN))
852+ let eW = ar(eC, eN)
853+ let fr = bM(eV, eW)
854+ let bS = fr._1
855+ let bP = fr._2
856+ let bQ = fr._3
857+ let dx = fr._4
858+ let dy = fr._5
859+ if (if ((eO != 0))
860+ then (eO > as(bS))
851861 else false)
852- then throw(((("Limit error: " + toString(ap(bN))) + " < ") + toString(eK)))
862+ then throw(((("Limit error: " + toString(as(bS))) + " < ") + toString(eO)))
853863 else {
854- let fb = (eM + bN)
855- let fo = am(eS, eJ)
856- let fp = bY(eM, eN, eP, fo)
857- let ch = fp._1
858- let cM = fp._2
859- let cN = fp._3
860- if (!(cx(bK, bL)))
864+ let ff = (eQ + bS)
865+ let fs = ap(eW, eN)
866+ let ft = cd(eQ, eR, eT, fs)
867+ let cm = ft._1
868+ let cR = ft._2
869+ let cS = ft._3
870+ if (!(cC(bP, bQ)))
861871 then throw("Over max spread limit")
862- else $Tuple11(fb, ch, (eO + eS), br(fb), bL, bK, ds, dt, (aX() + eS), (bl() + (if ((fb > 0))
863- then ap(bN)
864- else 0)), (bk() + (if ((0 > fb))
865- then ap(bN)
872+ else $Tuple11(ff, cm, (eS + eW), bw(ff), bQ, bP, dx, dy, (ba() + eW), (bo() + (if ((ff > 0))
873+ then as(bS)
874+ else 0)), (bn() + (if ((0 > ff))
875+ then as(bS)
866876 else 0)))
867877 }
868878 }
869879 else {
870- let eS = ao(ex, eJ)
871- let fq = cP(toString(eA.caller), ai)
872- let eU = fq._1
873- let cU = fq._2
874- if ((eU > eS))
880+ let eW = ar(eC, eN)
881+ let fu = cU(toString(bq.caller), al)
882+ let eY = fu._1
883+ let cZ = fu._2
884+ if ((eY > eW))
875885 then throw("Use decreasePosition to decrease position size")
876886 else throw("Close position first")
877887 }
878- let fb = fm._1
879- let fc = fm._2
880- let fd = fm._3
881- let fe = fm._4
882- let bL = fm._5
883- let bK = fm._6
884- let ds = fm._7
885- let dt = fm._8
886- let dw = fm._9
887- let du = fm._10
888- let dv = fm._11
889- let fr = (fh / 2)
890- let fs = (fh - fr)
891- let ft = invoke(W(), "lockNeutrinoSP", [toString(X()), ah], [AttachedPayment(V(), ex)])
892- if ((ft == ft))
888+ let ff = fq._1
889+ let fg = fq._2
890+ let fh = fq._3
891+ let fi = fq._4
892+ let bQ = fq._5
893+ let bP = fq._6
894+ let dx = fq._7
895+ let dy = fq._8
896+ let dB = fq._9
897+ let dz = fq._10
898+ let dA = fq._11
899+ let fv = (fl / 2)
900+ let fw = (fl - fv)
901+ let fx = invoke(Y(), "lockNeutrinoSP", [toString(Z()), ak], [AttachedPayment(X(), eC)])
902+ if ((fx == fx))
893903 then {
894- let fu = invoke(Y(), "deposit", nil, [AttachedPayment(V(), fs)])
895- if ((fu == fu))
904+ let fy = invoke(aa(), "deposit", nil, [AttachedPayment(X(), fw)])
905+ if ((fy == fy))
896906 then {
897- let fv = invoke(Z(), "notifyFees", [toString(eA.caller), fh], nil)
898- if ((fv == fv))
907+ let fz = invoke(ab(), "notifyFees", [toString(bq.caller), fl], nil)
908+ if ((fz == fz))
899909 then {
900- let ff = invoke(Z(), "notifyNotional", [toString(eA.caller), fd], nil)
901- if ((ff == ff))
902- then (((ed(toString(eA.caller), fb, fc, fd, fe) ++ ep(bK, bL, ds, dt, dw, du, dv)) ++ eB(fr)) ++ ez((aQ() + ex)))
910+ let fj = invoke(ab(), "notifyNotional", [toString(bq.caller), fh], nil)
911+ if ((fj == fj))
912+ then (((ei(toString(bq.caller), ff, fg, fh, fi) ++ eu(bP, bQ, dx, dy, dB, dz, dA)) ++ eF(fv)) ++ eE((aT() + eC)))
903913 else throw("Strict value is not equal to itself.")
904914 }
905915 else throw("Strict value is not equal to itself.")
912922
913923
914924
915-@Callable(eA)
925+@Callable(bq)
916926 func addMargin () = {
917- let fg = eA.payments[0].amount
918- if (if (if (if ((eA.payments[0].assetId != V()))
927+ let fk = bq.payments[0].amount
928+ if (if (if (if ((bq.payments[0].assetId != X()))
919929 then true
920- else !(by(toString(eA.caller))))
930+ else !(bD(toString(bq.caller))))
921931 then true
922- else !(bz()))
932+ else !(bE()))
923933 then true
924- else bA())
934+ else bF())
925935 then throw("Invalid addMargin parameters")
926936 else {
927- let fh = ao(fg, aR())
928- let ex = (fg - fh)
929- let fw = bt(toString(eA.caller))
930- let eM = fw._1
931- let eN = fw._2
932- let eO = fw._3
933- let eP = fw._4
934- let fr = (fh / 2)
935- let fs = (fh - fr)
936- let ft = invoke(W(), "lockNeutrinoSP", [toString(X()), ah], [AttachedPayment(V(), ex)])
937- if ((ft == ft))
937+ let fl = ar(fk, aU())
938+ let eC = (fk - fl)
939+ let fA = by(toString(bq.caller))
940+ let eQ = fA._1
941+ let eR = fA._2
942+ let eS = fA._3
943+ let eT = fA._4
944+ let fv = (fl / 2)
945+ let fw = (fl - fv)
946+ let fx = invoke(Y(), "lockNeutrinoSP", [toString(Z()), ak], [AttachedPayment(X(), eC)])
947+ if ((fx == fx))
938948 then {
939- let fu = invoke(Y(), "deposit", nil, [AttachedPayment(V(), fs)])
940- if ((fu == fu))
949+ let fy = invoke(aa(), "deposit", nil, [AttachedPayment(X(), fw)])
950+ if ((fy == fy))
941951 then {
942- let fv = invoke(Z(), "notifyFees", [toString(eA.caller), fh], nil)
943- if ((fv == fv))
944- then ((ed(toString(eA.caller), eM, (eN + ex), eO, eP) ++ eB(fr)) ++ ez((aQ() + ex)))
952+ let fz = invoke(ab(), "notifyFees", [toString(bq.caller), fl], nil)
953+ if ((fz == fz))
954+ then ((ei(toString(bq.caller), eQ, (eR + eC), eS, eT) ++ eF(fv)) ++ eE((aT() + eC)))
945955 else throw("Strict value is not equal to itself.")
946956 }
947957 else throw("Strict value is not equal to itself.")
952962
953963
954964
955-@Callable(eA)
956-func removeMargin (ex) = if (if (if (if ((0 >= ex))
965+@Callable(bq)
966+func removeMargin (eC) = if (if (if (if ((0 >= eC))
957967 then true
958- else !(by(toString(eA.caller))))
968+ else !(bD(toString(bq.caller))))
959969 then true
960- else !(bz()))
970+ else !(bE()))
961971 then true
962- else bA())
972+ else bF())
963973 then throw("Invalid removeMargin parameters")
964974 else {
965- let fx = bt(toString(eA.caller))
966- let eM = fx._1
967- let eN = fx._2
968- let eO = fx._3
969- let eP = fx._4
970- let fy = -(ex)
971- let fz = bY(eM, eN, eP, fy)
972- let ch = fz._1
973- let ci = fz._2
974- if ((ci != 0))
975+ let fB = by(toString(bq.caller))
976+ let eQ = fB._1
977+ let eR = fB._2
978+ let eS = fB._3
979+ let eT = fB._4
980+ let fC = -(eC)
981+ let fD = cd(eQ, eR, eT, fC)
982+ let cm = fD._1
983+ let cn = fD._2
984+ if ((cn != 0))
975985 then throw("Invalid removed margin amount")
976986 else {
977- let fA = cV(ch, ci, eO)
978- if (!(bm(fA, aS(), true)))
979- then throw(((("Too much margin removed: " + toString(fA)) + " < ") + toString(aS())))
987+ let fE = da(cm, cn, eS)
988+ if (!(br(fE, aV(), true)))
989+ then throw(((("Too much margin removed: " + toString(fE)) + " < ") + toString(aV())))
980990 else {
981- let fB = invoke(W(), "unlockNeutrino", [ex, toBase58String(V())], nil)
982- if ((fB == fB))
983- then ((ed(toString(eA.caller), eM, ch, eO, br(eM)) ++ ew(eA.caller, ex)) ++ ez((aQ() - ex)))
991+ let fF = invoke(Y(), "unlockNeutrino", [eC, toBase58String(X())], nil)
992+ if ((fF == fF))
993+ then ((ei(toString(bq.caller), eQ, cm, eS, bw(eQ)) ++ eB(bq.caller, eC)) ++ eE((aT() - eC)))
984994 else throw("Strict value is not equal to itself.")
985995 }
986996 }
988998
989999
9901000
991-@Callable(eA)
992-func closePosition () = if (if (if (!(by(toString(eA.caller))))
993- then true
994- else !(bz()))
995- then true
996- else bA())
997- then throw("Invalid closePosition parameters")
998- else {
999- let fC = dm(toString(eA.caller), true)
1000- let cM = fC._1
1001- let fD = fC._2
1002- let dp = fC._3
1003- let dq = fC._4
1004- let bK = fC._5
1005- let bL = fC._6
1006- let ds = fC._7
1007- let dt = fC._8
1008- let dw = fC._9
1009- let cN = fC._10
1010- let du = fC._11
1011- let dv = fC._12
1012- if ((fD > 0))
1013- then throw("Unable to close position with bad debt")
1014- else {
1015- let fE = ap(dq)
1016- let fF = (aQ() - fE)
1017- let fG = if ((0 > fF))
1018- then $Tuple2(0, ap(fF))
1019- else $Tuple2(fF, 0)
1020- let fH = fG._1
1021- let fI = fG._2
1022- let fJ = if ((fI > 0))
1001+@Callable(bq)
1002+func closePosition () = {
1003+ let fG = bp(bq)
1004+ let fH = valueOrErrorMessage(addressFromString(fG), "Invalid caller")
1005+ if (if (if (!(bD(fG)))
1006+ then true
1007+ else !(bE()))
1008+ then true
1009+ else bF())
1010+ then throw("Invalid closePosition parameters")
1011+ else {
1012+ let fI = dr(fG, true)
1013+ let cR = fI._1
1014+ let fJ = fI._2
1015+ let du = fI._3
1016+ let dv = fI._4
1017+ let bP = fI._5
1018+ let bQ = fI._6
1019+ let dx = fI._7
1020+ let dy = fI._8
1021+ let dB = fI._9
1022+ let cS = fI._10
1023+ let dz = fI._11
1024+ let dA = fI._12
1025+ if ((fJ > 0))
1026+ then throw("Unable to close position with bad debt")
1027+ else {
1028+ let fK = as(dv)
1029+ let fL = (aT() - fK)
1030+ let fM = if ((0 > fL))
1031+ then $Tuple2(0, as(fL))
1032+ else $Tuple2(fL, 0)
1033+ let fN = fM._1
1034+ let fO = fM._2
1035+ let fP = if ((fO > 0))
1036+ then {
1037+ let fQ = invoke(aa(), "withdraw", [fO], nil)
1038+ if ((fQ == fQ))
1039+ then nil
1040+ else throw("Strict value is not equal to itself.")
1041+ }
1042+ else nil
1043+ if ((fP == fP))
1044+ then {
1045+ let fF = invoke(Y(), "unlockNeutrino", [(fK - fO), toBase58String(X())], nil)
1046+ if ((fF == fF))
1047+ then {
1048+ let fj = invoke(ab(), "notifyNotional", [fG, 0], nil)
1049+ if ((fj == fj))
1050+ then (((eA(fG) ++ eu(bP, bQ, dx, dy, dB, dz, dA)) ++ eB(fH, fK)) ++ eE(fN))
1051+ else throw("Strict value is not equal to itself.")
1052+ }
1053+ else throw("Strict value is not equal to itself.")
1054+ }
1055+ else throw("Strict value is not equal to itself.")
1056+ }
1057+ }
1058+ }
1059+
1060+
1061+
1062+@Callable(bq)
1063+func liquidate (bz) = {
1064+ let fR = de(bz, al)
1065+ let fE = if (cI())
1066+ then {
1067+ let fS = de(bz, am)
1068+ at(fR, fS)
1069+ }
1070+ else fR
1071+ if (if (if (if (!(br(fE, bf(), false)))
1072+ then true
1073+ else !(bD(bz)))
1074+ then true
1075+ else !(bE()))
1076+ then true
1077+ else bF())
1078+ then throw("Unable to liquidate")
1079+ else if (if (if ((fR > bg()))
1080+ then (bh() > 0)
1081+ else false)
1082+ then (ai > bh())
1083+ else false)
1084+ then {
1085+ let fT = by(bz)
1086+ let eQ = fT._1
1087+ let eR = fT._2
1088+ let eS = fT._3
1089+ let eT = fT._4
1090+ let eU = if ((eQ > 0))
1091+ then ae
1092+ else ad
1093+ let eV = (eU == ad)
1094+ let dq = dk(bz, eQ)
1095+ let fU = cU(bz, al)
1096+ let eY = fU._1
1097+ let cZ = fU._2
1098+ let fV = bM(eV, dq)
1099+ let dp = fV._1
1100+ let bP = fV._2
1101+ let bQ = fV._3
1102+ let dx = fV._4
1103+ let dy = fV._5
1104+ let du = ap(ar(cZ, as(dp)), as(eQ))
1105+ let fW = cd(eQ, eR, eT, du)
1106+ let cm = fW._1
1107+ let cn = fW._2
1108+ let ci = fW._3
1109+ let fd = (cZ - du)
1110+ let fe = if ((eQ > 0))
1111+ then ((eY - dq) - fd)
1112+ else ((fd + eY) - dq)
1113+ let fX = ar(dq, bg())
1114+ let fY = (fX / 2)
1115+ let fw = (fX - fY)
1116+ let fZ = (cm - fX)
1117+ let ff = (eQ + dp)
1118+ let fh = as(fe)
1119+ let ga = bw(ff)
1120+ let dB = (ba() - dq)
1121+ let fL = (aT() - fX)
1122+ let gb = if ((0 > fL))
1123+ then $Tuple2(0, as(fL))
1124+ else $Tuple2(fL, 0)
1125+ let gc = gb._1
1126+ let gd = gb._2
1127+ let fP = if ((gd > 0))
10231128 then {
1024- let fK = invoke(Y(), "withdraw", [fI], nil)
1025- if ((fK == fK))
1129+ let fQ = invoke(aa(), "withdraw", [gd], nil)
1130+ if ((fQ == fQ))
10261131 then nil
10271132 else throw("Strict value is not equal to itself.")
10281133 }
10291134 else nil
1030- if ((fJ == fJ))
1135+ if ((fP == fP))
10311136 then {
1032- let fB = invoke(W(), "unlockNeutrino", [(fE - fI), toBase58String(V())], nil)
1033- if ((fB == fB))
1137+ let fF = invoke(Y(), "unlockNeutrino", [(fX - gd), toBase58String(X())], nil)
1138+ if ((fF == fF))
10341139 then {
1035- let ff = invoke(Z(), "notifyNotional", [toString(eA.caller), 0], nil)
1036- if ((ff == ff))
1037- then (((ev(toString(eA.caller)) ++ ep(bK, bL, ds, dt, dw, du, dv)) ++ ew(eA.caller, fE)) ++ ez(fH))
1038- else throw("Strict value is not equal to itself.")
1039- }
1040- else throw("Strict value is not equal to itself.")
1041- }
1042- else throw("Strict value is not equal to itself.")
1043- }
1044- }
1045-
1046-
1047-
1048-@Callable(eA)
1049-func liquidate (bu) = {
1050- let fL = cZ(bu, ai)
1051- let fA = if (cD())
1052- then {
1053- let fM = cZ(bu, aj)
1054- aq(fL, fM)
1055- }
1056- else fL
1057- if (if (if (if (!(bm(fA, bc(), false)))
1058- then true
1059- else !(by(bu)))
1060- then true
1061- else !(bz()))
1062- then true
1063- else bA())
1064- then throw("Unable to liquidate")
1065- else if (if (if ((fL > bd()))
1066- then (be() > 0)
1067- else false)
1068- then (af > be())
1069- else false)
1070- then {
1071- let fN = bt(bu)
1072- let eM = fN._1
1073- let eN = fN._2
1074- let eO = fN._3
1075- let eP = fN._4
1076- let eQ = if ((eM > 0))
1077- then ab
1078- else aa
1079- let eR = (eQ == aa)
1080- let dl = df(bu, eM)
1081- let fO = cP(bu, ai)
1082- let eU = fO._1
1083- let cU = fO._2
1084- let fP = bH(eR, dl)
1085- let dk = fP._1
1086- let bK = fP._2
1087- let bL = fP._3
1088- let ds = fP._4
1089- let dt = fP._5
1090- let dp = am(ao(cU, ap(dk)), ap(eM))
1091- let fQ = bY(eM, eN, eP, dp)
1092- let ch = fQ._1
1093- let ci = fQ._2
1094- let cd = fQ._3
1095- let eZ = (cU - dp)
1096- let fa = if ((eM > 0))
1097- then ((eU - dl) - eZ)
1098- else ((eZ + eU) - dl)
1099- let fR = ao(dl, bd())
1100- let fS = (fR / 2)
1101- let fs = (fR - fS)
1102- let fT = (ch - fR)
1103- let fb = (eM + dk)
1104- let fd = ap(fa)
1105- let fU = br(fb)
1106- let dw = (aX() - dl)
1107- let fF = (aQ() - fR)
1108- let fV = if ((0 > fF))
1109- then $Tuple2(0, ap(fF))
1110- else $Tuple2(fF, 0)
1111- let fW = fV._1
1112- let fX = fV._2
1113- let fJ = if ((fX > 0))
1114- then {
1115- let fK = invoke(Y(), "withdraw", [fX], nil)
1116- if ((fK == fK))
1117- then nil
1118- else throw("Strict value is not equal to itself.")
1119- }
1120- else nil
1121- if ((fJ == fJ))
1122- then {
1123- let fB = invoke(W(), "unlockNeutrino", [(fR - fX), toBase58String(V())], nil)
1124- if ((fB == fB))
1125- then {
1126- let fu = invoke(Y(), "deposit", nil, [AttachedPayment(V(), fs)])
1127- if ((fu == fu))
1140+ let fy = invoke(aa(), "deposit", nil, [AttachedPayment(X(), fw)])
1141+ if ((fy == fy))
11281142 then {
1129- let ff = invoke(Z(), "notifyNotional", [bu, fd], nil)
1130- if ((ff == ff))
1131- then (((ed(bu, fb, fT, fd, fU) ++ ep(bK, bL, ds, dt, dw, (bl() - (if ((fb > 0))
1132- then ap(dk)
1133- else 0)), (bk() - (if ((0 > fb))
1134- then ap(dk)
1135- else 0)))) ++ ew(eA.caller, fS)) ++ ez(fW))
1143+ let fj = invoke(ab(), "notifyNotional", [bz, fh], nil)
1144+ if ((fj == fj))
1145+ then (((ei(bz, ff, fZ, fh, ga) ++ eu(bP, bQ, dx, dy, dB, (bo() - (if ((ff > 0))
1146+ then as(dp)
1147+ else 0)), (bn() - (if ((0 > ff))
1148+ then as(dp)
1149+ else 0)))) ++ eB(bq.caller, fY)) ++ eE(gc))
11361150 else throw("Strict value is not equal to itself.")
11371151 }
11381152 else throw("Strict value is not equal to itself.")
11421156 else throw("Strict value is not equal to itself.")
11431157 }
11441158 else {
1145- let fY = dm(bu, false)
1146- let cM = fY._1
1147- let ci = fY._2
1148- let cN = fY._3
1149- let cO = fY._4
1150- let bK = fY._5
1151- let bL = fY._6
1152- let ds = fY._7
1153- let dt = fY._8
1154- let dw = fY._9
1155- let dl = fY._10
1156- let du = fY._11
1157- let dv = fY._12
1158- let fR = ao(dl, bd())
1159- let fS = (fR / 2)
1160- let fs = (fR - fS)
1161- let fF = (aQ() - fR)
1162- let fZ = if ((0 > fF))
1163- then $Tuple2(0, ap(fF))
1164- else $Tuple2(fF, 0)
1165- let fW = fZ._1
1166- let fX = fZ._2
1167- let fJ = if ((fX > 0))
1159+ let ge = dr(bz, false)
1160+ let cR = ge._1
1161+ let cn = ge._2
1162+ let cS = ge._3
1163+ let cT = ge._4
1164+ let bP = ge._5
1165+ let bQ = ge._6
1166+ let dx = ge._7
1167+ let dy = ge._8
1168+ let dB = ge._9
1169+ let dq = ge._10
1170+ let dz = ge._11
1171+ let dA = ge._12
1172+ let fX = ar(dq, bg())
1173+ let fY = (fX / 2)
1174+ let fw = (fX - fY)
1175+ let fL = (aT() - fX)
1176+ let gf = if ((0 > fL))
1177+ then $Tuple2(0, as(fL))
1178+ else $Tuple2(fL, 0)
1179+ let gc = gf._1
1180+ let gd = gf._2
1181+ let fP = if ((gd > 0))
11681182 then {
1169- let fK = invoke(Y(), "withdraw", [fX], nil)
1170- if ((fK == fK))
1183+ let fQ = invoke(aa(), "withdraw", [gd], nil)
1184+ if ((fQ == fQ))
11711185 then nil
11721186 else throw("Strict value is not equal to itself.")
11731187 }
11741188 else nil
1175- if ((fJ == fJ))
1189+ if ((fP == fP))
11761190 then {
1177- let fB = invoke(W(), "unlockNeutrino", [(fR - fX), toBase58String(V())], nil)
1178- if ((fB == fB))
1191+ let fF = invoke(Y(), "unlockNeutrino", [(fX - gd), toBase58String(X())], nil)
1192+ if ((fF == fF))
11791193 then {
1180- let fu = invoke(Y(), "deposit", nil, [AttachedPayment(V(), fs)])
1181- if ((fu == fu))
1194+ let fy = invoke(aa(), "deposit", nil, [AttachedPayment(X(), fw)])
1195+ if ((fy == fy))
11821196 then {
1183- let ff = invoke(Z(), "notifyNotional", [bu, 0], nil)
1184- if ((ff == ff))
1185- then (((ev(bu) ++ ep(bK, bL, ds, dt, dw, du, dv)) ++ ew(eA.caller, fS)) ++ ez(fW))
1197+ let fj = invoke(ab(), "notifyNotional", [bz, 0], nil)
1198+ if ((fj == fj))
1199+ then (((eA(bz) ++ eu(bP, bQ, dx, dy, dB, dz, dA)) ++ eB(bq.caller, fY)) ++ eE(gc))
11861200 else throw("Strict value is not equal to itself.")
11871201 }
11881202 else throw("Strict value is not equal to itself.")
11951209
11961210
11971211
1198-@Callable(eA)
1212+@Callable(bq)
11991213 func payFunding () = {
1200- let ga = aY()
1201- if (if (if ((ga > lastBlock.timestamp))
1214+ let gg = bb()
1215+ if (if (if ((gg > lastBlock.timestamp))
12021216 then true
1203- else !(bz()))
1217+ else !(bE()))
12041218 then true
1205- else bA())
1206- then throw(((("Invalid funding block timestamp: " + toString(lastBlock.timestamp)) + " < ") + toString(ga)))
1219+ else bF())
1220+ then throw(((("Invalid funding block timestamp: " + toString(lastBlock.timestamp)) + " < ") + toString(gg)))
12071221 else {
1208- let gb = cs()
1209- let gc = dx()
1210- let gd = (gc - gb)
1211- let ge = if (if ((bk() == 0))
1222+ let gh = cx()
1223+ let gi = dC()
1224+ let gj = (gi - gh)
1225+ let gk = if (if ((bn() == 0))
12121226 then true
1213- else (bl() == 0))
1227+ else (bo() == 0))
12141228 then $Tuple2(0, 0)
1215- else if ((0 > gd))
1229+ else if ((0 > gj))
12161230 then {
1217- let gf = am(ao(gd, ba()), ag)
1218- let gg = am(ao(gf, bk()), bl())
1219- $Tuple2(gf, gg)
1231+ let gl = ap(ar(gj, bd()), aj)
1232+ let gm = ap(ar(gl, bn()), bo())
1233+ $Tuple2(gl, gm)
12201234 }
12211235 else {
1222- let gg = am(ao(gd, ba()), ag)
1223- let gf = am(ao(gg, bl()), bk())
1224- $Tuple2(gf, gg)
1236+ let gm = ap(ar(gj, bd()), aj)
1237+ let gl = ap(ar(gm, bo()), bn())
1238+ $Tuple2(gl, gm)
12251239 }
1226- let gf = ge._1
1227- let gg = ge._2
1228- dX((ga + bb()), (bi() + gg), (bj() + gf), am(gg, gb), am(gf, gb))
1240+ let gl = gk._1
1241+ let gm = gk._2
1242+ ec((gg + be()), (bl() + gm), (bm() + gl), ap(gm, gh), ap(gl, gh))
12291243 }
12301244 }
12311245
12321246
12331247
1234-@Callable(eA)
1235-func v_get (bu) = {
1236- let gh = dm(bu, false)
1237- let cM = gh._1
1238- let cN = gh._2
1239- let cO = gh._3
1240- let gi = gh._4
1241- throw((((ak(cN) + ak(cO)) + ak(gi)) + ak(de(bu))))
1248+@Callable(bq)
1249+func v_get (bz) = {
1250+ let gn = dr(bz, false)
1251+ let cR = gn._1
1252+ let cS = gn._2
1253+ let cT = gn._3
1254+ let go = gn._4
1255+ throw((((an(cS) + an(cT)) + an(go)) + an(dj(bz))))
12421256 }
12431257
12441258
12451259
1246-@Callable(eA)
1247-func view_calcRemainMarginWithFundingPayment (bu) = {
1248- let gj = bt(bu)
1249- let bx = gj._1
1250- let cR = gj._2
1251- let db = gj._3
1252- let cT = gj._4
1253- let gk = cP(bu, ai)
1254- let cJ = gk._1
1255- let cU = gk._2
1256- let gl = bY(bx, cR, cT, cU)
1257- let ch = gl._1
1258- let ci = gl._2
1259- let cd = gl._3
1260- throw((((((ak(ch) + ak(cd)) + ak(de(bu))) + ak(cU)) + ak(ci)) + ak(cJ)))
1260+@Callable(bq)
1261+func view_calcRemainMarginWithFundingPayment (bz) = {
1262+ let gp = by(bz)
1263+ let bC = gp._1
1264+ let cW = gp._2
1265+ let dg = gp._3
1266+ let cY = gp._4
1267+ let gq = cU(bz, al)
1268+ let cO = gq._1
1269+ let cZ = gq._2
1270+ let gr = cd(bC, cW, cY, cZ)
1271+ let cm = gr._1
1272+ let cn = gr._2
1273+ let ci = gr._3
1274+ throw((((((an(cm) + an(ci)) + an(dj(bz))) + an(cZ)) + an(cn)) + an(cO)))
12611275 }
12621276
12631277
12641278
1265-@Callable(eA)
1266-func forceMoveAsset (bu,ex) = if (if ((addressFromPublicKey(U()) != eA.caller))
1279+@Callable(bq)
1280+func forceMoveAsset (bz,eC) = if (if ((addressFromPublicKey(W()) != bq.caller))
12671281 then true
1268- else (0 > ex))
1282+ else (0 > eC))
12691283 then throw("Invalid forceMoveAsset parameters")
12701284 else {
1271- let fB = invoke(W(), "unlockNeutrino", [ex, toBase58String(V())], nil)
1272- if ((fB == fB))
1273- then (ew(addressFromStringValue(bu), ex) ++ ez((aQ() - ex)))
1285+ let fF = invoke(Y(), "unlockNeutrino", [eC, toBase58String(X())], nil)
1286+ if ((fF == fF))
1287+ then (eB(addressFromStringValue(bz), eC) ++ eE((aT() - eC)))
12741288 else throw("Strict value is not equal to itself.")
12751289 }
12761290
12771291
1278-@Verifier(gm)
1279-func gn () = sigVerify(gm.bodyBytes, gm.proofs[0], U())
1292+@Verifier(gs)
1293+func gt () = sigVerify(gs.bodyBytes, gs.proofs[0], W())
12801294
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = "k_ora_key"
55
66 let b = "k_ora_block_key"
77
88 let c = "k_ora"
99
1010 let d = "k_balance"
1111
1212 let e = "k_positionSize"
1313
1414 let f = "k_positionMargin"
1515
1616 let g = "k_positionOpenNotional"
1717
1818 let h = "k_positionFraction"
1919
20-let i = "k_initialized"
20+let i = "k_positionClosedDate"
2121
22-let j = "k_paused"
22+let j = "k_initialized"
2323
24-let k = "k_fee"
24+let k = "k_paused"
2525
26-let l = "k_fundingPeriod"
26+let l = "k_fee"
2727
28-let m = "k_initMarginRatio"
28+let m = "k_fundingPeriod"
2929
30-let n = "k_mmr"
30+let n = "k_initMarginRatio"
3131
32-let o = "k_liquidationFeeRatio"
32+let o = "k_mmr"
3333
34-let p = "k_partLiquidationRatio"
34+let p = "k_liquidationFeeRatio"
3535
36-let q = "k_spreadLimit"
36+let q = "k_partLiquidationRatio"
3737
38-let r = "k_maxPriceImpact"
38+let r = "k_spreadLimit"
3939
40-let s = "k_maxPriceSpread"
40+let s = "k_maxPriceImpact"
4141
42-let t = "k_lastDataStr"
42+let t = "k_maxPriceSpread"
4343
44-let u = "k_lastMinuteId"
44+let u = "k_lastDataStr"
4545
46-let v = "k_twapDataLastCumulativePrice"
46+let v = "k_lastMinuteId"
4747
48-let w = "k_twapDataLastPrice"
48+let w = "k_twapDataLastCumulativePrice"
4949
50-let x = "k_twapDataPreviousMinuteId"
50+let x = "k_twapDataLastPrice"
5151
52-let y = "k_latestLongPremiumFraction"
52+let y = "k_twapDataPreviousMinuteId"
5353
54-let z = "k_latestShortPremiumFraction"
54+let z = "k_latestLongPremiumFraction"
5555
56-let A = "k_nextFundingBlockMinTimestamp"
56+let A = "k_latestShortPremiumFraction"
5757
58-let B = "k_longFundingRate"
58+let B = "k_nextFundingBlockMinTimestamp"
5959
60-let C = "k_shortFundingRate"
60+let C = "k_longFundingRate"
6161
62-let D = "k_qtAstR"
62+let D = "k_shortFundingRate"
6363
64-let E = "k_bsAstR"
64+let E = "k_qtAstR"
6565
66-let F = "k_totalPositionSize"
66+let F = "k_bsAstR"
6767
68-let G = "k_totalLongPositionSize"
68+let G = "k_totalPositionSize"
6969
70-let H = "k_totalShortPositionSize"
70+let H = "k_totalLongPositionSize"
7171
72-let I = "k_cumulativeNotional"
72+let I = "k_totalShortPositionSize"
7373
74-let J = "k_openInterestNotional"
74+let J = "k_cumulativeNotional"
7575
76-let K = "k_coordinatorAddress"
76+let K = "k_openInterestNotional"
7777
78-let L = "k_insurance_address"
78+let L = "k_coordinatorAddress"
7979
80-let M = "k_admin_address"
80+let M = "k_insurance_address"
8181
82-let N = "k_admin_public_key"
82+let N = "k_admin_address"
8383
84-let O = "k_quote_asset"
84+let O = "k_admin_public_key"
8585
86-let P = "k_quote_staking"
86+let P = "k_quote_asset"
8787
88-let Q = "k_staking_address"
88+let Q = "k_quote_staking"
8989
90-let R = "k_miner_address"
90+let R = "k_staking_address"
9191
92-func S () = valueOrErrorMessage(addressFromString(getStringValue(this, K)), "Coordinator not set")
92+let S = "k_miner_address"
93+
94+let T = "k_orders_address"
95+
96+func U () = valueOrErrorMessage(addressFromString(getStringValue(this, L)), "Coordinator not set")
9397
9498
95-func T () = addressFromString(getStringValue(S(), M))
99+func V () = addressFromString(getStringValue(U(), N))
96100
97101
98-func U () = fromBase58String(getStringValue(S(), N))
102+func W () = fromBase58String(getStringValue(U(), O))
99103
100104
101-func V () = fromBase58String(getStringValue(S(), O))
105+func X () = fromBase58String(getStringValue(U(), P))
102106
103107
104-func W () = valueOrErrorMessage(addressFromString(getStringValue(S(), P)), "Quote asset staking not set")
108+func Y () = valueOrErrorMessage(addressFromString(getStringValue(U(), Q)), "Quote asset staking not set")
105109
106110
107-func X () = valueOrErrorMessage(addressFromString(getStringValue(S(), Q)), "Insurance not set")
111+func Z () = valueOrErrorMessage(addressFromString(getStringValue(U(), R)), "Staking not set")
108112
109113
110-func Y () = valueOrErrorMessage(addressFromString(getStringValue(S(), L)), "Insurance not set")
114+func aa () = valueOrErrorMessage(addressFromString(getStringValue(U(), M)), "Insurance not set")
111115
112116
113-func Z () = valueOrErrorMessage(addressFromString(getStringValue(S(), R)), "Insurance not set")
117+func ab () = valueOrErrorMessage(addressFromString(getStringValue(U(), S)), "Miner not set")
114118
115119
116-let aa = 1
117-
118-let ab = 2
119-
120-let ac = 15
121-
122-let ad = 15
123-
124-let ae = 1000
125-
126-let af = (1 * (((((10 * 10) * 10) * 10) * 10) * 10))
127-
128-let ag = (86400 * af)
129-
130-let ah = 100
131-
132-let ai = 1
133-
134-let aj = 2
135-
136-func ak (al) = (toString(al) + ",")
120+func ac () = valueOrErrorMessage(addressFromString(getStringValue(U(), T)), "Orders not set")
137121
138122
139-func am (al,an) = fraction(al, af, an, HALFEVEN)
123+let ad = 1
124+
125+let ae = 2
126+
127+let af = 15
128+
129+let ag = 15
130+
131+let ah = 1000
132+
133+let ai = (1 * (((((10 * 10) * 10) * 10) * 10) * 10))
134+
135+let aj = (86400 * ai)
136+
137+let ak = 100
138+
139+let al = 1
140+
141+let am = 2
142+
143+func an (ao) = (toString(ao) + ",")
140144
141145
142-func ao (al,an) = fraction(al, an, af, HALFEVEN)
146+func ap (ao,aq) = fraction(ao, ai, aq, HALFEVEN)
143147
144148
145-func ap (al) = if ((al > 0))
146- then al
147- else -(al)
149+func ar (ao,aq) = fraction(ao, aq, ai, HALFEVEN)
148150
149151
150-func aq (al,an) = if ((al >= an))
151- then al
152- else an
152+func as (ao) = if ((ao > 0))
153+ then ao
154+ else -(ao)
153155
154156
155-func ar (as,at) = ((as + "_") + at)
157+func at (ao,aq) = if ((ao >= aq))
158+ then ao
159+ else aq
156160
157161
158-func au (av) = {
159- func aw (ax,ay) = ((ax + ay) + ",")
162+func au (av,aw) = ((av + "_") + aw)
160163
161- let az = {
162- let aA = av
163- let aB = size(aA)
164- let aC = ""
165- func aD (aE,aF) = if ((aF >= aB))
166- then aE
167- else aw(aE, aA[aF])
168164
169- func aG (aE,aF) = if ((aF >= aB))
170- then aE
165+func ax (ay) = {
166+ func az (aA,aB) = ((aA + aB) + ",")
167+
168+ let aC = {
169+ let aD = ay
170+ let aE = size(aD)
171+ let aF = ""
172+ func aG (aH,aI) = if ((aI >= aE))
173+ then aH
174+ else az(aH, aD[aI])
175+
176+ func aJ (aH,aI) = if ((aI >= aE))
177+ then aH
171178 else throw("List size exceeds 20")
172179
173- aG(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aC, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
180+ aJ(aG(aG(aG(aG(aG(aG(aG(aG(aG(aG(aG(aG(aG(aG(aG(aG(aG(aG(aG(aG(aF, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
174181 }
175- let aH = dropRight(az, 1)
176- let aI = if ((take(aH, 1) == ","))
177- then drop(aH, 1)
178- else aH
179- aI
182+ let aK = dropRight(aC, 1)
183+ let aL = if ((take(aK, 1) == ","))
184+ then drop(aK, 1)
185+ else aK
186+ aL
180187 }
181188
182189
183-func aJ (aK) = split(aK, ",")
190+func aM (aN) = split(aN, ",")
184191
185192
186-func aL (av,aM,aN) = if ((size(av) > aM))
187- then (removeByIndex(av, 0) :+ aN)
188- else (av :+ aN)
193+func aO (ay,aP,aQ) = if ((size(ay) > aP))
194+ then (removeByIndex(ay, 0) :+ aQ)
195+ else (ay :+ aQ)
189196
190197
191-func aO (aP) = valueOrErrorMessage(getInteger(this, aP), ("no value for " + aP))
198+func aR (aS) = valueOrErrorMessage(getInteger(this, aS), ("no value for " + aS))
192199
193200
194-func aQ () = aO(d)
201+func aT () = aR(d)
195202
196203
197-func aR () = aO(k)
204+func aU () = aR(l)
198205
199206
200-func aS () = aO(m)
207+func aV () = aR(n)
201208
202209
203-func aT () = aO(D)
210+func aW () = aR(E)
204211
205212
206-func aU () = aO(E)
213+func aX () = aR(F)
207214
208215
209-func aV () = aO(F)
216+func aY () = aR(G)
210217
211218
212-func aW () = aO(I)
219+func aZ () = aR(J)
213220
214221
215-func aX () = aO(J)
222+func ba () = aR(K)
216223
217224
218-func aY () = aO(A)
225+func bb () = aR(B)
219226
220227
221-func aZ () = aO(l)
228+func bc () = aR(m)
222229
223230
224-func ba () = (aZ() * af)
231+func bd () = (bc() * ai)
225232
226233
227-func bb () = (aZ() * ae)
234+func be () = (bc() * ah)
228235
229236
230-func bc () = aO(n)
237+func bf () = aR(o)
231238
232239
233-func bd () = aO(o)
240+func bg () = aR(p)
234241
235242
236-func be () = aO(p)
243+func bh () = aR(q)
237244
238245
239-func bf () = aO(q)
246+func bi () = aR(r)
240247
241248
242-func bg () = aO(r)
249+func bj () = aR(s)
243250
244251
245-func bh () = aO(s)
252+func bk () = aR(t)
246253
247254
248-func bi () = aO(y)
255+func bl () = aR(z)
249256
250257
251-func bj () = aO(z)
258+func bm () = aR(A)
252259
253260
254-func bk () = aO(H)
261+func bn () = aR(I)
255262
256263
257-func bl () = aO(G)
264+func bo () = aR(H)
258265
259266
260-func bm (bn,bo,bp) = {
261- let bq = (bn - bo)
262- if (if (bp)
263- then (0 > bq)
267+func bp (bq) = valueOrElse(getString(ac(), "k_sender"), toString(bq.caller))
268+
269+
270+func br (bs,bt,bu) = {
271+ let bv = (bs - bt)
272+ if (if (bu)
273+ then (0 > bv)
264274 else false)
265275 then throw("Invalid margin")
266- else if (if (!(bp))
267- then (bq >= 0)
276+ else if (if (!(bu))
277+ then (bv >= 0)
268278 else false)
269279 then throw("Invalid margin")
270280 else true
271281 }
272282
273283
274-func br (bs) = if ((bs == 0))
284+func bw (bx) = if ((bx == 0))
275285 then throw("Should not be called with _positionSize == 0")
276- else if ((bs > 0))
277- then bi()
278- else bj()
286+ else if ((bx > 0))
287+ then bl()
288+ else bm()
279289
280290
281-func bt (bu) = {
282- let bv = getInteger(this, ar(e, bu))
283- let bw = bv
284- if ($isInstanceOf(bw, "Int"))
291+func by (bz) = {
292+ let bA = getInteger(this, au(e, bz))
293+ let bB = bA
294+ if ($isInstanceOf(bB, "Int"))
285295 then {
286- let bx = bw
287- $Tuple4(bx, getIntegerValue(this, ar(f, bu)), getIntegerValue(this, ar(g, bu)), getIntegerValue(this, ar(h, bu)))
296+ let bC = bB
297+ $Tuple4(bC, getIntegerValue(this, au(f, bz)), getIntegerValue(this, au(g, bz)), getIntegerValue(this, au(h, bz)))
288298 }
289299 else $Tuple4(0, 0, 0, 0)
290300 }
291301
292302
293-func by (bu) = if ((bt(bu)._1 == 0))
303+func bD (bz) = if ((by(bz)._1 == 0))
294304 then throw("No open position")
295305 else true
296306
297307
298-func bz () = valueOrElse(getBoolean(this, i), false)
308+func bE () = valueOrElse(getBoolean(this, j), false)
299309
300310
301-func bA () = valueOrElse(getBoolean(this, j), false)
311+func bF () = valueOrElse(getBoolean(this, k), false)
302312
303313
304-func bB (bC,bD,bE) = if (bC)
314+func bG (bH,bI,bJ) = if (bH)
305315 then {
306- let bF = (aU() - bE)
307- if ((0 >= bF))
316+ let bK = (aX() - bJ)
317+ if ((0 >= bK))
308318 then throw("Tx lead to base asset reserve <= 0, revert")
309- else $Tuple4((aT() + bD), bF, (aV() + bE), (aW() + bD))
319+ else $Tuple4((aW() + bI), bK, (aY() + bJ), (aZ() + bI))
310320 }
311321 else {
312- let bG = (aT() - bD)
313- if ((0 >= bG))
322+ let bL = (aW() - bI)
323+ if ((0 >= bL))
314324 then throw("Tx lead to base quote reserve <= 0, revert")
315- else $Tuple4(bG, (aU() + bE), (aV() - bE), (aW() - bD))
325+ else $Tuple4(bL, (aX() + bJ), (aY() - bJ), (aZ() - bI))
316326 }
317327
318328
319-func bH (bC,bD) = {
320- let bI = aT()
321- let bJ = aU()
322- let aP = ao(bI, bJ)
323- let bK = if (bC)
324- then (bI + bD)
325- else (bI - bD)
326- let bL = am(aP, bK)
327- let bM = ap((bL - bJ))
328- let bN = if (bC)
329- then bM
330- else -(bM)
331- let bO = bB(bC, bD, bM)
332- let bP = bO._1
333- let bQ = bO._2
334- let bR = bO._3
335- let bS = bO._4
336- let bT = am(bI, bJ)
337- let bU = am(bD, bM)
338- let bV = ap((bT - bU))
339- let bW = (af - am(bT, (bT + bV)))
340- let bX = bg()
341- if ((bW > bX))
342- then throw(((((((((((((("Price impact " + toString(bW)) + " > max price impact ") + toString(bX)) + " before quote asset: ") + toString(bI)) + " before base asset: ") + toString(bJ)) + " quote asset amount to exchange: ") + toString(bD)) + " price before: ") + toString(bT)) + " marketPrice: ") + toString(bU)))
343- else $Tuple5(bN, bP, bQ, bR, bS)
329+func bM (bH,bI) = {
330+ let bN = aW()
331+ let bO = aX()
332+ let aS = ar(bN, bO)
333+ let bP = if (bH)
334+ then (bN + bI)
335+ else (bN - bI)
336+ let bQ = ap(aS, bP)
337+ let bR = as((bQ - bO))
338+ let bS = if (bH)
339+ then bR
340+ else -(bR)
341+ let bT = bG(bH, bI, bR)
342+ let bU = bT._1
343+ let bV = bT._2
344+ let bW = bT._3
345+ let bX = bT._4
346+ let bY = ap(bN, bO)
347+ let bZ = ap(bI, bR)
348+ let ca = as((bY - bZ))
349+ let cb = (ai - ap(bY, (bY + ca)))
350+ let cc = bj()
351+ if ((cb > cc))
352+ then throw(((((((((((((("Price impact " + toString(cb)) + " > max price impact ") + toString(cc)) + " before quote asset: ") + toString(bN)) + " before base asset: ") + toString(bO)) + " quote asset amount to exchange: ") + toString(bI)) + " price before: ") + toString(bY)) + " marketPrice: ") + toString(bZ)))
353+ else $Tuple5(bS, bU, bV, bW, bX)
344354 }
345355
346356
347-func bY (bZ,ca,cb,cc) = {
348- let cd = if ((bZ != 0))
357+func cd (ce,cf,cg,ch) = {
358+ let ci = if ((ce != 0))
349359 then {
350- let ce = br(bZ)
351- ao((ce - cb), bZ)
360+ let cj = bw(ce)
361+ ar((cj - cg), ce)
352362 }
353363 else 0
354- let cf = ((cc - cd) + ca)
355- let cg = if ((0 > cf))
356- then $Tuple2(0, ap(cf))
357- else $Tuple2(ap(cf), 0)
358- let ch = cg._1
359- let ci = cg._2
360- $Tuple3(ch, ci, cd)
364+ let ck = ((ch - ci) + cf)
365+ let cl = if ((0 > ck))
366+ then $Tuple2(0, as(ck))
367+ else $Tuple2(as(ck), 0)
368+ let cm = cl._1
369+ let cn = cl._2
370+ $Tuple3(cm, cn, ci)
361371 }
362372
363373
364-func cj (bC,bE,ck,cl,cm) = {
365- let bT = am(cl, cm)
366- if ((bE == 0))
374+func co (bH,bJ,cp,cq,cr) = {
375+ let bY = ap(cq, cr)
376+ if ((bJ == 0))
367377 then throw("Invalid base asset amount")
368378 else {
369- let aP = ao(cl, cm)
370- let cn = if (bC)
371- then (cm + bE)
372- else (cm - bE)
373- let co = am(aP, cn)
374- let cp = ap((co - cl))
375- let bX = bg()
376- let cq = bB(!(bC), cp, bE)
377- let bP = cq._1
378- let bQ = cq._2
379- let bR = cq._3
380- let bS = cq._4
381- let bU = am(cp, bE)
382- let bV = ap((bT - bU))
383- let bW = (af - am(bT, (bT + bV)))
384- if (if ((bW > bX))
385- then ck
379+ let aS = ar(cq, cr)
380+ let cs = if (bH)
381+ then (cr + bJ)
382+ else (cr - bJ)
383+ let ct = ap(aS, cs)
384+ let cu = as((ct - cq))
385+ let cc = bj()
386+ let cv = bG(!(bH), cu, bJ)
387+ let bU = cv._1
388+ let bV = cv._2
389+ let bW = cv._3
390+ let bX = cv._4
391+ let bZ = ap(cu, bJ)
392+ let ca = as((bY - bZ))
393+ let cb = (ai - ap(bY, (bY + ca)))
394+ if (if ((cb > cc))
395+ then cp
386396 else false)
387- then throw(((((((((((((("Price impact " + toString(bW)) + " > max price impact ") + toString(bX)) + " before quote asset: ") + toString(cl)) + " before base asset: ") + toString(cm)) + " base asset amount to exchange: ") + toString(bE)) + " price before: ") + toString(bT)) + " market price: ") + toString(bU)))
388- else $Tuple8(cp, bP, bQ, bR, bS, (bl() - (if (bC)
389- then ap(bE)
390- else 0)), (bk() - (if (!(bC))
391- then ap(bE)
392- else 0)), bW)
397+ then throw(((((((((((((("Price impact " + toString(cb)) + " > max price impact ") + toString(cc)) + " before quote asset: ") + toString(cq)) + " before base asset: ") + toString(cr)) + " base asset amount to exchange: ") + toString(bJ)) + " price before: ") + toString(bY)) + " market price: ") + toString(bZ)))
398+ else $Tuple8(cu, bU, bV, bW, bX, (bo() - (if (bH)
399+ then as(bJ)
400+ else 0)), (bn() - (if (!(bH))
401+ then as(bJ)
402+ else 0)), cb)
393403 }
394404 }
395405
396406
397-func cr (bC,bE,ck) = cj(bC, bE, ck, aT(), aU())
407+func cw (bH,bJ,cp) = co(bH, bJ, cp, aW(), aX())
398408
399409
400-func cs () = {
401- let ct = valueOrErrorMessage(addressFromString(getStringValue(this, c)), "")
402- let cu = getStringValue(this, a)
403- let cv = getStringValue(this, b)
404- let cw = valueOrErrorMessage(getInteger(ct, cu), ((("Can not get oracle price. Oracle: " + toString(ct)) + " key: ") + cu))
405- cw
410+func cx () = {
411+ let cy = valueOrErrorMessage(addressFromString(getStringValue(this, c)), "")
412+ let cz = getStringValue(this, a)
413+ let cA = getStringValue(this, b)
414+ let cB = valueOrErrorMessage(getInteger(cy, cz), ((("Can not get oracle price. Oracle: " + toString(cy)) + " key: ") + cz))
415+ cB
406416 }
407417
408418
409-func cx (cl,cm) = {
410- let cy = cs()
411- let cz = am(cl, cm)
412- let cA = am((cy + cz), (2 * af))
413- let cB = am(ap((cy - cz)), cA)
414- if ((cB > bh()))
415- then throw(((("Price spread " + toString(cB)) + " > max price spread ") + toString(bh())))
419+func cC (cq,cr) = {
420+ let cD = cx()
421+ let cE = ap(cq, cr)
422+ let cF = ap((cD + cE), (2 * ai))
423+ let cG = ap(as((cD - cE)), cF)
424+ if ((cG > bk()))
425+ then throw(((("Price spread " + toString(cG)) + " > max price spread ") + toString(bk())))
416426 else true
417427 }
418428
419429
420-func cC () = {
421- let cl = aT()
422- let cm = aU()
423- am(cl, cm)
430+func cH () = {
431+ let cq = aW()
432+ let cr = aX()
433+ ap(cq, cr)
424434 }
425435
426436
427-func cD () = {
428- let cy = cs()
429- let cE = cC()
430- (am(ap((cy - cE)), cy) > bf())
437+func cI () = {
438+ let cD = cx()
439+ let cJ = cH()
440+ (ap(as((cD - cJ)), cD) > bi())
431441 }
432442
433443
434-func cF (bs,cG,cl,cm) = {
435- let cH = ap(bs)
436- let cI = (0 > bs)
437- let cJ = if ((cG == ai))
444+func cK (bx,cL,cq,cr) = {
445+ let cM = as(bx)
446+ let cN = (0 > bx)
447+ let cO = if ((cL == al))
438448 then {
439- let cK = cj(!(cI), cH, false, cl, cm)
440- let cL = cK._1
441- let cM = cK._2
442- let cN = cK._3
443- let cO = cK._4
444- cL
449+ let cP = co(!(cN), cM, false, cq, cr)
450+ let cQ = cP._1
451+ let cR = cP._2
452+ let cS = cP._3
453+ let cT = cP._4
454+ cQ
445455 }
446- else ao(cH, cs())
447- cJ
456+ else ar(cM, cx())
457+ cO
448458 }
449459
450460
451-func cP (bu,cG) = {
452- let cQ = bt(bu)
453- let bx = cQ._1
454- let cR = cQ._2
455- let cS = cQ._3
456- let cT = cQ._4
457- if ((bx == 0))
461+func cU (bz,cL) = {
462+ let cV = by(bz)
463+ let bC = cV._1
464+ let cW = cV._2
465+ let cX = cV._3
466+ let cY = cV._4
467+ if ((bC == 0))
458468 then throw("Invalid position size")
459469 else {
460- let cI = (0 > bx)
461- let cJ = cF(bx, cG, aT(), aU())
462- let cU = if (cI)
463- then (cS - cJ)
464- else (cJ - cS)
465- $Tuple2(cJ, cU)
470+ let cN = (0 > bC)
471+ let cO = cK(bC, cL, aW(), aX())
472+ let cZ = if (cN)
473+ then (cX - cO)
474+ else (cO - cX)
475+ $Tuple2(cO, cZ)
466476 }
467477 }
468478
469479
470-func cV (cW,cX,cY) = am((cW - cX), cY)
480+func da (db,dc,dd) = ap((db - dc), dd)
471481
472482
473-func cZ (bu,cG) = {
474- let da = bt(bu)
475- let bx = da._1
476- let cR = da._2
477- let db = da._3
478- let cT = da._4
479- let dc = cP(bu, cG)
480- let cJ = dc._1
481- let cU = dc._2
482- let dd = bY(bx, cR, cT, cU)
483- let ch = dd._1
484- let ci = dd._2
485- cV(ch, ci, cJ)
483+func de (bz,cL) = {
484+ let df = by(bz)
485+ let bC = df._1
486+ let cW = df._2
487+ let dg = df._3
488+ let cY = df._4
489+ let dh = cU(bz, cL)
490+ let cO = dh._1
491+ let cZ = dh._2
492+ let di = cd(bC, cW, cY, cZ)
493+ let cm = di._1
494+ let cn = di._2
495+ da(cm, cn, cO)
486496 }
487497
488498
489-func de (bu) = cZ(bu, ai)
499+func dj (bz) = de(bz, al)
490500
491501
492-func df (bu,bs) = {
493- let dg = aq(be(), (af - am(de(bu), bc())))
494- let dh = ao(ap(bs), dg)
495- let di = cr((bs > 0), dh, false)
496- let dj = di._1
497- let bW = di._8
498- if ((bg() > bW))
499- then dj
502+func dk (bz,bx) = {
503+ let dl = at(bh(), (ai - ap(dj(bz), bf())))
504+ let dm = ar(as(bx), dl)
505+ let dn = cw((bx > 0), dm, false)
506+ let do = dn._1
507+ let cb = dn._8
508+ if ((bj() > cb))
509+ then do
500510 else {
501- let dk = ao(ap(bs), be())
502- let dl = cr((bs > 0), dk, false)._1
503- dl
511+ let dp = ar(as(bx), bh())
512+ let dq = cw((bx > 0), dp, false)._1
513+ dq
504514 }
505515 }
506516
507517
508-func dm (bu,ck) = {
509- let dn = bt(bu)
510- let bx = dn._1
511- let cR = dn._2
512- let cS = dn._3
513- let cT = dn._4
514- let cU = cP(bu, ai)._2
515- let do = bY(bx, cR, cT, cU)
516- let ch = do._1
517- let ci = do._2
518- let dk = -(bx)
519- let dp = cU
520- let dq = -(ch)
521- let dr = cr((bx > 0), ap(bx), ck)
522- let dl = dr._1
523- let bK = dr._2
524- let bL = dr._3
525- let ds = dr._4
526- let dt = dr._5
527- let du = dr._6
528- let dv = dr._7
529- let dw = (aX() - cS)
530- $Tuple12(dk, ci, dp, dq, bK, bL, ds, dt, dw, dl, du, dv)
518+func dr (bz,cp) = {
519+ let ds = by(bz)
520+ let bC = ds._1
521+ let cW = ds._2
522+ let cX = ds._3
523+ let cY = ds._4
524+ let cZ = cU(bz, al)._2
525+ let dt = cd(bC, cW, cY, cZ)
526+ let cm = dt._1
527+ let cn = dt._2
528+ let dp = -(bC)
529+ let du = cZ
530+ let dv = -(cm)
531+ let dw = cw((bC > 0), as(bC), cp)
532+ let dq = dw._1
533+ let bP = dw._2
534+ let bQ = dw._3
535+ let dx = dw._4
536+ let dy = dw._5
537+ let dz = dw._6
538+ let dA = dw._7
539+ let dB = (ba() - cX)
540+ $Tuple12(dp, cn, du, dv, bP, bQ, dx, dy, dB, dq, dz, dA)
531541 }
532542
533543
534-func dx () = {
535- let dy = ((lastBlock.timestamp / 1000) / 60)
536- let dz = (dy - ac)
537- let dA = valueOrElse(getString(this, t), "")
538- let dB = split(dA, ",")
539- func dC (ax,dD) = if ((dz >= parseIntValue(dD)))
540- then (ax :+ parseIntValue(dD))
541- else ax
544+func dC () = {
545+ let dD = ((lastBlock.timestamp / 1000) / 60)
546+ let dE = (dD - af)
547+ let dF = valueOrElse(getString(this, u), "")
548+ let dG = split(dF, ",")
549+ func dH (aA,dI) = if ((dE >= parseIntValue(dI)))
550+ then (aA :+ parseIntValue(dI))
551+ else aA
542552
543- let dE = {
544- let aA = dB
545- let aB = size(aA)
546- let aC = nil
547- func aD (aE,aF) = if ((aF >= aB))
548- then aE
549- else dC(aE, aA[aF])
553+ let dJ = {
554+ let aD = dG
555+ let aE = size(aD)
556+ let aF = nil
557+ func aG (aH,aI) = if ((aI >= aE))
558+ then aH
559+ else dH(aH, aD[aI])
550560
551- func aG (aE,aF) = if ((aF >= aB))
552- then aE
561+ func aJ (aH,aI) = if ((aI >= aE))
562+ then aH
553563 else throw("List size exceeds 20")
554564
555- aG(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aC, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
565+ aJ(aG(aG(aG(aG(aG(aG(aG(aG(aG(aG(aG(aG(aG(aG(aG(aG(aG(aG(aG(aG(aF, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
556566 }
557- let dF = if ((size(dE) > 0))
558- then max(dE)
559- else parseIntValue(dB[0])
560- let dG = valueOrElse(getInteger(this, u), 0)
561- let dH = valueOrElse(getInteger(this, ((v + "_") + toString(dG))), 0)
562- let dI = valueOrElse(getInteger(this, ((w + "_") + toString(dG))), 0)
563- let dJ = (dH + ((dy - dG) * dI))
564- let dK = valueOrElse(getInteger(this, ((v + "_") + toString(dF))), 0)
565- let dL = valueOrElse(getInteger(this, ((w + "_") + toString(dF))), 0)
566- let dM = (dK + ((dz - dF) * dL))
567- ((dJ - dM) / ac)
567+ let dK = if ((size(dJ) > 0))
568+ then max(dJ)
569+ else parseIntValue(dG[0])
570+ let dL = valueOrElse(getInteger(this, v), 0)
571+ let dM = valueOrElse(getInteger(this, ((w + "_") + toString(dL))), 0)
572+ let dN = valueOrElse(getInteger(this, ((x + "_") + toString(dL))), 0)
573+ let dO = (dM + ((dD - dL) * dN))
574+ let dP = valueOrElse(getInteger(this, ((w + "_") + toString(dK))), 0)
575+ let dQ = valueOrElse(getInteger(this, ((x + "_") + toString(dK))), 0)
576+ let dR = (dP + ((dE - dK) * dQ))
577+ ((dO - dR) / af)
568578 }
569579
570580
571-func dN (dO,dP,dQ,dR,dS,dT,dU,dV,dW) = [IntegerEntry(m, dO), IntegerEntry(n, dP), IntegerEntry(o, dQ), IntegerEntry(l, dR), IntegerEntry(k, dS), IntegerEntry(q, dT), IntegerEntry(r, dU), IntegerEntry(p, dV), IntegerEntry(s, dW)]
581+func dS (dT,dU,dV,dW,dX,dY,dZ,ea,eb) = [IntegerEntry(n, dT), IntegerEntry(o, dU), IntegerEntry(p, dV), IntegerEntry(m, dW), IntegerEntry(l, dX), IntegerEntry(r, dY), IntegerEntry(s, dZ), IntegerEntry(q, ea), IntegerEntry(t, eb)]
572582
573583
574-func dX (dY,dZ,ea,eb,ec) = [IntegerEntry(A, dY), IntegerEntry(y, dZ), IntegerEntry(z, ea), IntegerEntry(B, eb), IntegerEntry(C, ec)]
584+func ec (ed,ee,ef,eg,eh) = [IntegerEntry(B, ed), IntegerEntry(z, ee), IntegerEntry(A, ef), IntegerEntry(C, eg), IntegerEntry(D, eh)]
575585
576586
577-func ed (at,ee,ef,eg,ce) = [IntegerEntry(ar(e, at), ee), IntegerEntry(ar(f, at), ef), IntegerEntry(ar(g, at), eg), IntegerEntry(ar(h, at), ce)]
587+func ei (aw,ej,ek,el,cj) = [IntegerEntry(au(e, aw), ej), IntegerEntry(au(f, aw), ek), IntegerEntry(au(g, aw), el), IntegerEntry(au(h, aw), cj)]
578588
579589
580-func eh (ei) = {
581- let dy = ((lastBlock.timestamp / 1000) / 60)
582- let ej = valueOrElse(getInteger(this, u), 0)
583- if ((ej > dy))
590+func em (en) = {
591+ let dD = ((lastBlock.timestamp / 1000) / 60)
592+ let eo = valueOrElse(getInteger(this, v), 0)
593+ if ((eo > dD))
584594 then throw("TWAP out-of-order")
585595 else {
586- let dG = if ((ej == 0))
587- then dy
588- else ej
589- if ((dy > ej))
596+ let dL = if ((eo == 0))
597+ then dD
598+ else eo
599+ if ((dD > eo))
590600 then {
591- let ek = valueOrElse(getInteger(this, ((v + "_") + toString(ej))), 0)
592- let el = valueOrElse(getInteger(this, ((w + "_") + toString(ej))), ei)
593- let em = (ek + ((dy - dG) * el))
594- let dB = aL(aJ(valueOrElse(getString(this, t), "")), ac, toString(dy))
595-[IntegerEntry(ar(v, toString(dy)), em), IntegerEntry(ar(w, toString(dy)), ei), IntegerEntry(ar(x, toString(dy)), ej), IntegerEntry(u, dy), StringEntry(t, au(dB))]
601+ let ep = valueOrElse(getInteger(this, ((w + "_") + toString(eo))), 0)
602+ let eq = valueOrElse(getInteger(this, ((x + "_") + toString(eo))), en)
603+ let er = (ep + ((dD - dL) * eq))
604+ let dG = aO(aM(valueOrElse(getString(this, u), "")), af, toString(dD))
605+[IntegerEntry(au(w, toString(dD)), er), IntegerEntry(au(x, toString(dD)), en), IntegerEntry(au(y, toString(dD)), eo), IntegerEntry(v, dD), StringEntry(u, ax(dG))]
596606 }
597607 else {
598- let en = valueOrElse(getInteger(this, ar(x, toString(dy))), 0)
599- let ek = valueOrElse(getInteger(this, ar(v, toString(en))), 0)
600- let el = valueOrElse(getInteger(this, ar(w, toString(en))), ei)
601- let em = (ek + ((dy - en) * el))
602-[IntegerEntry(ar(v, toString(dy)), em), IntegerEntry(ar(w, toString(dy)), ei)]
608+ let es = valueOrElse(getInteger(this, au(y, toString(dD))), 0)
609+ let ep = valueOrElse(getInteger(this, au(w, toString(es))), 0)
610+ let eq = valueOrElse(getInteger(this, au(x, toString(es))), en)
611+ let er = (ep + ((dD - es) * eq))
612+[IntegerEntry(au(w, toString(dD)), er), IntegerEntry(au(x, toString(dD)), en)]
603613 }
604614 }
605615 }
606616
607617
608-func eo (bI,bJ) = [IntegerEntry(D, bI), IntegerEntry(E, bJ)]
618+func et (bN,bO) = [IntegerEntry(E, bN), IntegerEntry(F, bO)]
609619
610620
611-func ep (bI,bJ,eq,er,es,et,eu) = if (((et - eu) != eq))
612- then throw(((((("Invalid AMM state data: " + toString(et)) + " + ") + toString(eu)) + " != ") + toString(eq)))
613- else ((eo(bI, bJ) ++ [IntegerEntry(F, eq), IntegerEntry(I, er), IntegerEntry(J, es), IntegerEntry(G, et), IntegerEntry(H, eu)]) ++ eh(am(bI, bJ)))
621+func eu (bN,bO,ev,ew,ex,ey,ez) = if (((ey - ez) != ev))
622+ then throw(((((("Invalid AMM state data: " + toString(ey)) + " + ") + toString(ez)) + " != ") + toString(ev)))
623+ else ((et(bN, bO) ++ [IntegerEntry(G, ev), IntegerEntry(J, ew), IntegerEntry(K, ex), IntegerEntry(H, ey), IntegerEntry(I, ez)]) ++ em(ap(bN, bO)))
614624
615625
616-func ev (at) = [DeleteEntry(ar(e, at)), DeleteEntry(ar(f, at)), DeleteEntry(ar(g, at)), DeleteEntry(ar(h, at))]
626+func eA (aw) = [DeleteEntry(au(e, aw)), DeleteEntry(au(f, aw)), DeleteEntry(au(g, aw)), DeleteEntry(au(h, aw)), IntegerEntry(au(i, aw), lastBlock.timestamp)]
617627
618628
619-func ew (at,ex) = {
620- let ey = assetBalance(this, V())
621- if ((ex > ey))
622- then throw(((("Unable to withdraw " + toString(ex)) + " from contract balance ") + toString(ey)))
623- else [ScriptTransfer(at, ex, V())]
629+func eB (aw,eC) = {
630+ let eD = assetBalance(this, X())
631+ if ((eC > eD))
632+ then throw(((("Unable to withdraw " + toString(eC)) + " from contract balance ") + toString(eD)))
633+ else [ScriptTransfer(aw, eC, X())]
624634 }
625635
626636
627-func ez (eA) = if ((0 > eA))
637+func eE (bq) = if ((0 > bq))
628638 then throw("Balance")
629- else [IntegerEntry(d, eA)]
639+ else [IntegerEntry(d, bq)]
630640
631641
632-func eB (eA) = [ScriptTransfer(X(), eA, V())]
642+func eF (bq) = [ScriptTransfer(Z(), bq, X())]
633643
634644
635-@Callable(eA)
636-func pause () = if ((eA.caller != T()))
645+@Callable(bq)
646+func pause () = if ((bq.caller != V()))
637647 then throw("Invalid togglePause params")
638- else [BooleanEntry(j, true)]
648+ else [BooleanEntry(k, true)]
639649
640650
641651
642-@Callable(eA)
643-func unpause () = if ((eA.caller != T()))
652+@Callable(bq)
653+func unpause () = if ((bq.caller != V()))
644654 then throw("Invalid togglePause params")
645- else [BooleanEntry(j, false)]
655+ else [BooleanEntry(k, false)]
646656
647657
648658
649-@Callable(eA)
650-func addLiquidity (bD) = if (if ((eA.caller != T()))
659+@Callable(bq)
660+func addLiquidity (bI) = if (if ((bq.caller != V()))
651661 then true
652- else (0 >= bD))
662+ else (0 >= bI))
653663 then throw("Invalid addLiquidity params")
654664 else {
655- let bI = aT()
656- let bJ = aU()
657- let ei = am(bI, bJ)
658- let eC = am(bD, ei)
659- let eD = (bI + bD)
660- let eE = (bJ + eC)
661- eo(eD, eE)
665+ let bN = aW()
666+ let bO = aX()
667+ let en = ap(bN, bO)
668+ let eG = ap(bI, en)
669+ let eH = (bN + bI)
670+ let eI = (bO + eG)
671+ et(eH, eI)
662672 }
663673
664674
665675
666-@Callable(eA)
667-func removeLiquidity (bD) = if (if ((eA.caller != T()))
676+@Callable(bq)
677+func removeLiquidity (bI) = if (if ((bq.caller != V()))
668678 then true
669- else (0 >= bD))
679+ else (0 >= bI))
670680 then throw("Invalid removeLiquidity params")
671681 else {
672- let bI = aT()
673- let bJ = aU()
674- let ei = am(bI, bJ)
675- let eF = am(bD, ei)
676- let eD = (bI - bD)
677- let eE = (bJ - eF)
678- eo(eD, eE)
682+ let bN = aW()
683+ let bO = aX()
684+ let en = ap(bN, bO)
685+ let eJ = ap(bI, en)
686+ let eH = (bN - bI)
687+ let eI = (bO - eJ)
688+ et(eH, eI)
679689 }
680690
681691
682692
683-@Callable(eA)
684-func changeSettings (dO,dP,dQ,dR,dS,dT,dU,dV,dW) = if ((eA.caller != T()))
693+@Callable(bq)
694+func changeSettings (dT,dU,dV,dW,dX,dY,dZ,ea,eb) = if ((bq.caller != V()))
685695 then throw("Invalid changeSettings params")
686- else dN(dO, dP, dQ, dR, dS, dT, dU, dV, dW)
696+ else dS(dT, dU, dV, dW, dX, dY, dZ, ea, eb)
687697
688698
689699
690-@Callable(eA)
691-func initialize (bI,bJ,dR,dO,dP,dQ,dS,eG,eH,eI,dT,dU,dV,dW) = if (if (if (if (if (if (if (if (if (if (if (if ((0 >= bI))
700+@Callable(bq)
701+func initialize (bN,bO,dW,dT,dU,dV,dX,eK,eL,eM,dY,dZ,ea,eb) = if (if (if (if (if (if (if (if (if (if (if (if ((0 >= bN))
692702 then true
693- else (0 >= bJ))
703+ else (0 >= bO))
694704 then true
695- else (0 >= dR))
696- then true
697- else (0 >= dO))
698- then true
699- else (0 >= dP))
700- then true
701- else (0 >= dQ))
702- then true
703- else (0 >= dS))
705+ else (0 >= dW))
704706 then true
705707 else (0 >= dT))
706708 then true
707709 else (0 >= dU))
708710 then true
709711 else (0 >= dV))
710712 then true
711- else (0 >= dW))
713+ else (0 >= dX))
712714 then true
713- else bz())
715+ else (0 >= dY))
716+ then true
717+ else (0 >= dZ))
718+ then true
719+ else (0 >= ea))
720+ then true
721+ else (0 >= eb))
722+ then true
723+ else bE())
714724 then throw("Invalid initialize parameters")
715- else ((((ep(bI, bJ, 0, 0, 0, 0, 0) ++ dN(dO, dP, dQ, dR, dS, dT, dU, dV, dW)) ++ dX((lastBlock.timestamp + dR), 0, 0, 0, 0)) ++ ez(0)) ++ [BooleanEntry(i, true), StringEntry(c, eG), StringEntry(a, eH), StringEntry(K, eI)])
725+ else ((((eu(bN, bO, 0, 0, 0, 0, 0) ++ dS(dT, dU, dV, dW, dX, dY, dZ, ea, eb)) ++ ec((lastBlock.timestamp + dW), 0, 0, 0, 0)) ++ eE(0)) ++ [BooleanEntry(j, true), StringEntry(c, eK), StringEntry(a, eL), StringEntry(L, eM)])
716726
717727
718728
719-@Callable(eA)
720-func setInitMarginRatio (dO) = if (if ((0 >= dO))
729+@Callable(bq)
730+func setInitMarginRatio (dT) = if (if ((0 >= dT))
721731 then true
722- else !(bz()))
732+ else !(bE()))
723733 then throw("Invalid setInitMarginRatio parameters")
724- else dN(dO, bc(), bd(), aZ(), aR(), bf(), bg(), be(), bh())
734+ else dS(dT, bf(), bg(), bc(), aU(), bi(), bj(), bh(), bk())
725735
726736
727737
728-@Callable(eA)
729-func decreasePosition (ex,eJ,eK) = if (if (if (if (if ((0 >= ex))
738+@Callable(bq)
739+func decreasePosition (eC,eN,eO) = if (if (if (if (if ((0 >= eC))
730740 then true
731- else !(bz()))
741+ else !(bE()))
732742 then true
733- else !(bm(am(af, eJ), aS(), true)))
743+ else !(br(ap(ai, eN), aV(), true)))
734744 then true
735- else !(by(toString(eA.caller))))
745+ else !(bD(toString(bq.caller))))
736746 then true
737- else bA())
747+ else bF())
738748 then throw("Invalid decreasePosition parameters")
739749 else {
740- let eL = bt(toString(eA.caller))
741- let eM = eL._1
742- let eN = eL._2
743- let eO = eL._3
744- let eP = eL._4
745- let eQ = if ((eM > 0))
746- then ab
747- else aa
748- let eR = (eQ == aa)
749- let eS = ao(ex, eJ)
750- let eT = cP(toString(eA.caller), ai)
751- let eU = eT._1
752- let cU = eT._2
753- let eV = if ((eU > eS))
750+ let eP = by(toString(bq.caller))
751+ let eQ = eP._1
752+ let eR = eP._2
753+ let eS = eP._3
754+ let eT = eP._4
755+ let eU = if ((eQ > 0))
756+ then ae
757+ else ad
758+ let eV = (eU == ad)
759+ let eW = ar(eC, eN)
760+ let eX = cU(toString(bq.caller), al)
761+ let eY = eX._1
762+ let cZ = eX._2
763+ let eZ = if ((eY > eW))
754764 then {
755- let eW = bH(eR, eS)
756- let dk = eW._1
757- let bK = eW._2
758- let bL = eW._3
759- let ds = eW._4
760- let dt = eW._5
761- let eX = ap(dk)
762- if (if ((eK != 0))
763- then (eK > eX)
765+ let fa = bM(eV, eW)
766+ let dp = fa._1
767+ let bP = fa._2
768+ let bQ = fa._3
769+ let dx = fa._4
770+ let dy = fa._5
771+ let fb = as(dp)
772+ if (if ((eO != 0))
773+ then (eO > fb)
764774 else false)
765- then throw(((("Too little base asset exchanged, got " + toString(eX)) + " expected ") + toString(eK)))
775+ then throw(((("Too little base asset exchanged, got " + toString(fb)) + " expected ") + toString(eO)))
766776 else {
767- let dp = am(ao(cU, eX), ap(eM))
768- let eY = bY(eM, eN, eP, dp)
769- let ch = eY._1
770- let ci = eY._2
771- let cd = eY._3
772- let dl = eS
773- let eZ = (cU - dp)
774- let fa = if ((eM > 0))
775- then ((eU - dl) - eZ)
776- else ((eZ + eU) - dl)
777- let fb = (eM + dk)
778- $Tuple11(fb, ch, ap(fa), br(fb), bL, bK, ds, dt, (aX() - eS), (bl() - (if ((fb > 0))
779- then ap(dk)
780- else 0)), (bk() - (if ((0 > fb))
781- then ap(dk)
777+ let du = ap(ar(cZ, fb), as(eQ))
778+ let fc = cd(eQ, eR, eT, du)
779+ let cm = fc._1
780+ let cn = fc._2
781+ let ci = fc._3
782+ let dq = eW
783+ let fd = (cZ - du)
784+ let fe = if ((eQ > 0))
785+ then ((eY - dq) - fd)
786+ else ((fd + eY) - dq)
787+ let ff = (eQ + dp)
788+ $Tuple11(ff, cm, as(fe), bw(ff), bQ, bP, dx, dy, (ba() - eW), (bo() - (if ((ff > 0))
789+ then as(dp)
790+ else 0)), (bn() - (if ((0 > ff))
791+ then as(dp)
782792 else 0)))
783793 }
784794 }
785795 else throw("Close position first")
786- let fb = eV._1
787- let fc = eV._2
788- let fd = eV._3
789- let fe = eV._4
790- let bL = eV._5
791- let bK = eV._6
792- let ds = eV._7
793- let dt = eV._8
794- let dw = eV._9
795- let du = eV._10
796- let dv = eV._11
797- let ff = invoke(Z(), "notifyNotional", [toString(eA.caller), fd], nil)
798- if ((ff == ff))
799- then (ed(toString(eA.caller), fb, fc, fd, fe) ++ ep(bK, bL, ds, dt, dw, du, dv))
796+ let ff = eZ._1
797+ let fg = eZ._2
798+ let fh = eZ._3
799+ let fi = eZ._4
800+ let bQ = eZ._5
801+ let bP = eZ._6
802+ let dx = eZ._7
803+ let dy = eZ._8
804+ let dB = eZ._9
805+ let dz = eZ._10
806+ let dA = eZ._11
807+ let fj = invoke(ab(), "notifyNotional", [toString(bq.caller), fh], nil)
808+ if ((fj == fj))
809+ then (ei(toString(bq.caller), ff, fg, fh, fi) ++ eu(bP, bQ, dx, dy, dB, dz, dA))
800810 else throw("Strict value is not equal to itself.")
801811 }
802812
803813
804814
805-@Callable(eA)
806-func increasePosition (eQ,eJ,eK) = {
807- let fg = eA.payments[0].amount
808- if (if (if (if (if (if (if ((eQ != aa))
809- then (eQ != ab)
815+@Callable(bq)
816+func increasePosition (eU,eN,eO) = {
817+ let fk = bq.payments[0].amount
818+ if (if (if (if (if (if (if ((eU != ad))
819+ then (eU != ae)
810820 else false)
811821 then true
812- else (0 >= fg))
822+ else (0 >= fk))
813823 then true
814- else !(bz()))
824+ else !(bE()))
815825 then true
816- else (eA.payments[0].assetId != V()))
826+ else (bq.payments[0].assetId != X()))
817827 then true
818- else !(bm(am(af, eJ), aS(), true)))
828+ else !(br(ap(ai, eN), aV(), true)))
819829 then true
820- else bA())
830+ else bF())
821831 then throw("Invalid increasePosition parameters")
822832 else {
823- let fh = ao(fg, aR())
824- let ex = (fg - fh)
825- let fi = bt(toString(eA.caller))
826- let eM = fi._1
827- let eN = fi._2
828- let eO = fi._3
829- let eP = fi._4
830- let fj = (eM == 0)
831- let fk = if ((eM > 0))
832- then (eQ == aa)
833- else (eQ == ab)
834- let fl = if (!(fj))
835- then fk
833+ let fl = ar(fk, aU())
834+ let eC = (fk - fl)
835+ let fm = by(toString(bq.caller))
836+ let eQ = fm._1
837+ let eR = fm._2
838+ let eS = fm._3
839+ let eT = fm._4
840+ let fn = (eQ == 0)
841+ let fo = if ((eQ > 0))
842+ then (eU == ad)
843+ else (eU == ae)
844+ let fp = if (!(fn))
845+ then fo
836846 else false
837- let eR = (eQ == aa)
838- let fm = if (if (fj)
847+ let eV = (eU == ad)
848+ let fq = if (if (fn)
839849 then true
840- else fl)
850+ else fp)
841851 then {
842- let eS = ao(ex, eJ)
843- let fn = bH(eR, eS)
844- let bN = fn._1
845- let bK = fn._2
846- let bL = fn._3
847- let ds = fn._4
848- let dt = fn._5
849- if (if ((eK != 0))
850- then (eK > ap(bN))
852+ let eW = ar(eC, eN)
853+ let fr = bM(eV, eW)
854+ let bS = fr._1
855+ let bP = fr._2
856+ let bQ = fr._3
857+ let dx = fr._4
858+ let dy = fr._5
859+ if (if ((eO != 0))
860+ then (eO > as(bS))
851861 else false)
852- then throw(((("Limit error: " + toString(ap(bN))) + " < ") + toString(eK)))
862+ then throw(((("Limit error: " + toString(as(bS))) + " < ") + toString(eO)))
853863 else {
854- let fb = (eM + bN)
855- let fo = am(eS, eJ)
856- let fp = bY(eM, eN, eP, fo)
857- let ch = fp._1
858- let cM = fp._2
859- let cN = fp._3
860- if (!(cx(bK, bL)))
864+ let ff = (eQ + bS)
865+ let fs = ap(eW, eN)
866+ let ft = cd(eQ, eR, eT, fs)
867+ let cm = ft._1
868+ let cR = ft._2
869+ let cS = ft._3
870+ if (!(cC(bP, bQ)))
861871 then throw("Over max spread limit")
862- else $Tuple11(fb, ch, (eO + eS), br(fb), bL, bK, ds, dt, (aX() + eS), (bl() + (if ((fb > 0))
863- then ap(bN)
864- else 0)), (bk() + (if ((0 > fb))
865- then ap(bN)
872+ else $Tuple11(ff, cm, (eS + eW), bw(ff), bQ, bP, dx, dy, (ba() + eW), (bo() + (if ((ff > 0))
873+ then as(bS)
874+ else 0)), (bn() + (if ((0 > ff))
875+ then as(bS)
866876 else 0)))
867877 }
868878 }
869879 else {
870- let eS = ao(ex, eJ)
871- let fq = cP(toString(eA.caller), ai)
872- let eU = fq._1
873- let cU = fq._2
874- if ((eU > eS))
880+ let eW = ar(eC, eN)
881+ let fu = cU(toString(bq.caller), al)
882+ let eY = fu._1
883+ let cZ = fu._2
884+ if ((eY > eW))
875885 then throw("Use decreasePosition to decrease position size")
876886 else throw("Close position first")
877887 }
878- let fb = fm._1
879- let fc = fm._2
880- let fd = fm._3
881- let fe = fm._4
882- let bL = fm._5
883- let bK = fm._6
884- let ds = fm._7
885- let dt = fm._8
886- let dw = fm._9
887- let du = fm._10
888- let dv = fm._11
889- let fr = (fh / 2)
890- let fs = (fh - fr)
891- let ft = invoke(W(), "lockNeutrinoSP", [toString(X()), ah], [AttachedPayment(V(), ex)])
892- if ((ft == ft))
888+ let ff = fq._1
889+ let fg = fq._2
890+ let fh = fq._3
891+ let fi = fq._4
892+ let bQ = fq._5
893+ let bP = fq._6
894+ let dx = fq._7
895+ let dy = fq._8
896+ let dB = fq._9
897+ let dz = fq._10
898+ let dA = fq._11
899+ let fv = (fl / 2)
900+ let fw = (fl - fv)
901+ let fx = invoke(Y(), "lockNeutrinoSP", [toString(Z()), ak], [AttachedPayment(X(), eC)])
902+ if ((fx == fx))
893903 then {
894- let fu = invoke(Y(), "deposit", nil, [AttachedPayment(V(), fs)])
895- if ((fu == fu))
904+ let fy = invoke(aa(), "deposit", nil, [AttachedPayment(X(), fw)])
905+ if ((fy == fy))
896906 then {
897- let fv = invoke(Z(), "notifyFees", [toString(eA.caller), fh], nil)
898- if ((fv == fv))
907+ let fz = invoke(ab(), "notifyFees", [toString(bq.caller), fl], nil)
908+ if ((fz == fz))
899909 then {
900- let ff = invoke(Z(), "notifyNotional", [toString(eA.caller), fd], nil)
901- if ((ff == ff))
902- then (((ed(toString(eA.caller), fb, fc, fd, fe) ++ ep(bK, bL, ds, dt, dw, du, dv)) ++ eB(fr)) ++ ez((aQ() + ex)))
910+ let fj = invoke(ab(), "notifyNotional", [toString(bq.caller), fh], nil)
911+ if ((fj == fj))
912+ then (((ei(toString(bq.caller), ff, fg, fh, fi) ++ eu(bP, bQ, dx, dy, dB, dz, dA)) ++ eF(fv)) ++ eE((aT() + eC)))
903913 else throw("Strict value is not equal to itself.")
904914 }
905915 else throw("Strict value is not equal to itself.")
906916 }
907917 else throw("Strict value is not equal to itself.")
908918 }
909919 else throw("Strict value is not equal to itself.")
910920 }
911921 }
912922
913923
914924
915-@Callable(eA)
925+@Callable(bq)
916926 func addMargin () = {
917- let fg = eA.payments[0].amount
918- if (if (if (if ((eA.payments[0].assetId != V()))
927+ let fk = bq.payments[0].amount
928+ if (if (if (if ((bq.payments[0].assetId != X()))
919929 then true
920- else !(by(toString(eA.caller))))
930+ else !(bD(toString(bq.caller))))
921931 then true
922- else !(bz()))
932+ else !(bE()))
923933 then true
924- else bA())
934+ else bF())
925935 then throw("Invalid addMargin parameters")
926936 else {
927- let fh = ao(fg, aR())
928- let ex = (fg - fh)
929- let fw = bt(toString(eA.caller))
930- let eM = fw._1
931- let eN = fw._2
932- let eO = fw._3
933- let eP = fw._4
934- let fr = (fh / 2)
935- let fs = (fh - fr)
936- let ft = invoke(W(), "lockNeutrinoSP", [toString(X()), ah], [AttachedPayment(V(), ex)])
937- if ((ft == ft))
937+ let fl = ar(fk, aU())
938+ let eC = (fk - fl)
939+ let fA = by(toString(bq.caller))
940+ let eQ = fA._1
941+ let eR = fA._2
942+ let eS = fA._3
943+ let eT = fA._4
944+ let fv = (fl / 2)
945+ let fw = (fl - fv)
946+ let fx = invoke(Y(), "lockNeutrinoSP", [toString(Z()), ak], [AttachedPayment(X(), eC)])
947+ if ((fx == fx))
938948 then {
939- let fu = invoke(Y(), "deposit", nil, [AttachedPayment(V(), fs)])
940- if ((fu == fu))
949+ let fy = invoke(aa(), "deposit", nil, [AttachedPayment(X(), fw)])
950+ if ((fy == fy))
941951 then {
942- let fv = invoke(Z(), "notifyFees", [toString(eA.caller), fh], nil)
943- if ((fv == fv))
944- then ((ed(toString(eA.caller), eM, (eN + ex), eO, eP) ++ eB(fr)) ++ ez((aQ() + ex)))
952+ let fz = invoke(ab(), "notifyFees", [toString(bq.caller), fl], nil)
953+ if ((fz == fz))
954+ then ((ei(toString(bq.caller), eQ, (eR + eC), eS, eT) ++ eF(fv)) ++ eE((aT() + eC)))
945955 else throw("Strict value is not equal to itself.")
946956 }
947957 else throw("Strict value is not equal to itself.")
948958 }
949959 else throw("Strict value is not equal to itself.")
950960 }
951961 }
952962
953963
954964
955-@Callable(eA)
956-func removeMargin (ex) = if (if (if (if ((0 >= ex))
965+@Callable(bq)
966+func removeMargin (eC) = if (if (if (if ((0 >= eC))
957967 then true
958- else !(by(toString(eA.caller))))
968+ else !(bD(toString(bq.caller))))
959969 then true
960- else !(bz()))
970+ else !(bE()))
961971 then true
962- else bA())
972+ else bF())
963973 then throw("Invalid removeMargin parameters")
964974 else {
965- let fx = bt(toString(eA.caller))
966- let eM = fx._1
967- let eN = fx._2
968- let eO = fx._3
969- let eP = fx._4
970- let fy = -(ex)
971- let fz = bY(eM, eN, eP, fy)
972- let ch = fz._1
973- let ci = fz._2
974- if ((ci != 0))
975+ let fB = by(toString(bq.caller))
976+ let eQ = fB._1
977+ let eR = fB._2
978+ let eS = fB._3
979+ let eT = fB._4
980+ let fC = -(eC)
981+ let fD = cd(eQ, eR, eT, fC)
982+ let cm = fD._1
983+ let cn = fD._2
984+ if ((cn != 0))
975985 then throw("Invalid removed margin amount")
976986 else {
977- let fA = cV(ch, ci, eO)
978- if (!(bm(fA, aS(), true)))
979- then throw(((("Too much margin removed: " + toString(fA)) + " < ") + toString(aS())))
987+ let fE = da(cm, cn, eS)
988+ if (!(br(fE, aV(), true)))
989+ then throw(((("Too much margin removed: " + toString(fE)) + " < ") + toString(aV())))
980990 else {
981- let fB = invoke(W(), "unlockNeutrino", [ex, toBase58String(V())], nil)
982- if ((fB == fB))
983- then ((ed(toString(eA.caller), eM, ch, eO, br(eM)) ++ ew(eA.caller, ex)) ++ ez((aQ() - ex)))
991+ let fF = invoke(Y(), "unlockNeutrino", [eC, toBase58String(X())], nil)
992+ if ((fF == fF))
993+ then ((ei(toString(bq.caller), eQ, cm, eS, bw(eQ)) ++ eB(bq.caller, eC)) ++ eE((aT() - eC)))
984994 else throw("Strict value is not equal to itself.")
985995 }
986996 }
987997 }
988998
989999
9901000
991-@Callable(eA)
992-func closePosition () = if (if (if (!(by(toString(eA.caller))))
993- then true
994- else !(bz()))
995- then true
996- else bA())
997- then throw("Invalid closePosition parameters")
998- else {
999- let fC = dm(toString(eA.caller), true)
1000- let cM = fC._1
1001- let fD = fC._2
1002- let dp = fC._3
1003- let dq = fC._4
1004- let bK = fC._5
1005- let bL = fC._6
1006- let ds = fC._7
1007- let dt = fC._8
1008- let dw = fC._9
1009- let cN = fC._10
1010- let du = fC._11
1011- let dv = fC._12
1012- if ((fD > 0))
1013- then throw("Unable to close position with bad debt")
1014- else {
1015- let fE = ap(dq)
1016- let fF = (aQ() - fE)
1017- let fG = if ((0 > fF))
1018- then $Tuple2(0, ap(fF))
1019- else $Tuple2(fF, 0)
1020- let fH = fG._1
1021- let fI = fG._2
1022- let fJ = if ((fI > 0))
1001+@Callable(bq)
1002+func closePosition () = {
1003+ let fG = bp(bq)
1004+ let fH = valueOrErrorMessage(addressFromString(fG), "Invalid caller")
1005+ if (if (if (!(bD(fG)))
1006+ then true
1007+ else !(bE()))
1008+ then true
1009+ else bF())
1010+ then throw("Invalid closePosition parameters")
1011+ else {
1012+ let fI = dr(fG, true)
1013+ let cR = fI._1
1014+ let fJ = fI._2
1015+ let du = fI._3
1016+ let dv = fI._4
1017+ let bP = fI._5
1018+ let bQ = fI._6
1019+ let dx = fI._7
1020+ let dy = fI._8
1021+ let dB = fI._9
1022+ let cS = fI._10
1023+ let dz = fI._11
1024+ let dA = fI._12
1025+ if ((fJ > 0))
1026+ then throw("Unable to close position with bad debt")
1027+ else {
1028+ let fK = as(dv)
1029+ let fL = (aT() - fK)
1030+ let fM = if ((0 > fL))
1031+ then $Tuple2(0, as(fL))
1032+ else $Tuple2(fL, 0)
1033+ let fN = fM._1
1034+ let fO = fM._2
1035+ let fP = if ((fO > 0))
1036+ then {
1037+ let fQ = invoke(aa(), "withdraw", [fO], nil)
1038+ if ((fQ == fQ))
1039+ then nil
1040+ else throw("Strict value is not equal to itself.")
1041+ }
1042+ else nil
1043+ if ((fP == fP))
1044+ then {
1045+ let fF = invoke(Y(), "unlockNeutrino", [(fK - fO), toBase58String(X())], nil)
1046+ if ((fF == fF))
1047+ then {
1048+ let fj = invoke(ab(), "notifyNotional", [fG, 0], nil)
1049+ if ((fj == fj))
1050+ then (((eA(fG) ++ eu(bP, bQ, dx, dy, dB, dz, dA)) ++ eB(fH, fK)) ++ eE(fN))
1051+ else throw("Strict value is not equal to itself.")
1052+ }
1053+ else throw("Strict value is not equal to itself.")
1054+ }
1055+ else throw("Strict value is not equal to itself.")
1056+ }
1057+ }
1058+ }
1059+
1060+
1061+
1062+@Callable(bq)
1063+func liquidate (bz) = {
1064+ let fR = de(bz, al)
1065+ let fE = if (cI())
1066+ then {
1067+ let fS = de(bz, am)
1068+ at(fR, fS)
1069+ }
1070+ else fR
1071+ if (if (if (if (!(br(fE, bf(), false)))
1072+ then true
1073+ else !(bD(bz)))
1074+ then true
1075+ else !(bE()))
1076+ then true
1077+ else bF())
1078+ then throw("Unable to liquidate")
1079+ else if (if (if ((fR > bg()))
1080+ then (bh() > 0)
1081+ else false)
1082+ then (ai > bh())
1083+ else false)
1084+ then {
1085+ let fT = by(bz)
1086+ let eQ = fT._1
1087+ let eR = fT._2
1088+ let eS = fT._3
1089+ let eT = fT._4
1090+ let eU = if ((eQ > 0))
1091+ then ae
1092+ else ad
1093+ let eV = (eU == ad)
1094+ let dq = dk(bz, eQ)
1095+ let fU = cU(bz, al)
1096+ let eY = fU._1
1097+ let cZ = fU._2
1098+ let fV = bM(eV, dq)
1099+ let dp = fV._1
1100+ let bP = fV._2
1101+ let bQ = fV._3
1102+ let dx = fV._4
1103+ let dy = fV._5
1104+ let du = ap(ar(cZ, as(dp)), as(eQ))
1105+ let fW = cd(eQ, eR, eT, du)
1106+ let cm = fW._1
1107+ let cn = fW._2
1108+ let ci = fW._3
1109+ let fd = (cZ - du)
1110+ let fe = if ((eQ > 0))
1111+ then ((eY - dq) - fd)
1112+ else ((fd + eY) - dq)
1113+ let fX = ar(dq, bg())
1114+ let fY = (fX / 2)
1115+ let fw = (fX - fY)
1116+ let fZ = (cm - fX)
1117+ let ff = (eQ + dp)
1118+ let fh = as(fe)
1119+ let ga = bw(ff)
1120+ let dB = (ba() - dq)
1121+ let fL = (aT() - fX)
1122+ let gb = if ((0 > fL))
1123+ then $Tuple2(0, as(fL))
1124+ else $Tuple2(fL, 0)
1125+ let gc = gb._1
1126+ let gd = gb._2
1127+ let fP = if ((gd > 0))
10231128 then {
1024- let fK = invoke(Y(), "withdraw", [fI], nil)
1025- if ((fK == fK))
1129+ let fQ = invoke(aa(), "withdraw", [gd], nil)
1130+ if ((fQ == fQ))
10261131 then nil
10271132 else throw("Strict value is not equal to itself.")
10281133 }
10291134 else nil
1030- if ((fJ == fJ))
1135+ if ((fP == fP))
10311136 then {
1032- let fB = invoke(W(), "unlockNeutrino", [(fE - fI), toBase58String(V())], nil)
1033- if ((fB == fB))
1137+ let fF = invoke(Y(), "unlockNeutrino", [(fX - gd), toBase58String(X())], nil)
1138+ if ((fF == fF))
10341139 then {
1035- let ff = invoke(Z(), "notifyNotional", [toString(eA.caller), 0], nil)
1036- if ((ff == ff))
1037- then (((ev(toString(eA.caller)) ++ ep(bK, bL, ds, dt, dw, du, dv)) ++ ew(eA.caller, fE)) ++ ez(fH))
1038- else throw("Strict value is not equal to itself.")
1039- }
1040- else throw("Strict value is not equal to itself.")
1041- }
1042- else throw("Strict value is not equal to itself.")
1043- }
1044- }
1045-
1046-
1047-
1048-@Callable(eA)
1049-func liquidate (bu) = {
1050- let fL = cZ(bu, ai)
1051- let fA = if (cD())
1052- then {
1053- let fM = cZ(bu, aj)
1054- aq(fL, fM)
1055- }
1056- else fL
1057- if (if (if (if (!(bm(fA, bc(), false)))
1058- then true
1059- else !(by(bu)))
1060- then true
1061- else !(bz()))
1062- then true
1063- else bA())
1064- then throw("Unable to liquidate")
1065- else if (if (if ((fL > bd()))
1066- then (be() > 0)
1067- else false)
1068- then (af > be())
1069- else false)
1070- then {
1071- let fN = bt(bu)
1072- let eM = fN._1
1073- let eN = fN._2
1074- let eO = fN._3
1075- let eP = fN._4
1076- let eQ = if ((eM > 0))
1077- then ab
1078- else aa
1079- let eR = (eQ == aa)
1080- let dl = df(bu, eM)
1081- let fO = cP(bu, ai)
1082- let eU = fO._1
1083- let cU = fO._2
1084- let fP = bH(eR, dl)
1085- let dk = fP._1
1086- let bK = fP._2
1087- let bL = fP._3
1088- let ds = fP._4
1089- let dt = fP._5
1090- let dp = am(ao(cU, ap(dk)), ap(eM))
1091- let fQ = bY(eM, eN, eP, dp)
1092- let ch = fQ._1
1093- let ci = fQ._2
1094- let cd = fQ._3
1095- let eZ = (cU - dp)
1096- let fa = if ((eM > 0))
1097- then ((eU - dl) - eZ)
1098- else ((eZ + eU) - dl)
1099- let fR = ao(dl, bd())
1100- let fS = (fR / 2)
1101- let fs = (fR - fS)
1102- let fT = (ch - fR)
1103- let fb = (eM + dk)
1104- let fd = ap(fa)
1105- let fU = br(fb)
1106- let dw = (aX() - dl)
1107- let fF = (aQ() - fR)
1108- let fV = if ((0 > fF))
1109- then $Tuple2(0, ap(fF))
1110- else $Tuple2(fF, 0)
1111- let fW = fV._1
1112- let fX = fV._2
1113- let fJ = if ((fX > 0))
1114- then {
1115- let fK = invoke(Y(), "withdraw", [fX], nil)
1116- if ((fK == fK))
1117- then nil
1118- else throw("Strict value is not equal to itself.")
1119- }
1120- else nil
1121- if ((fJ == fJ))
1122- then {
1123- let fB = invoke(W(), "unlockNeutrino", [(fR - fX), toBase58String(V())], nil)
1124- if ((fB == fB))
1125- then {
1126- let fu = invoke(Y(), "deposit", nil, [AttachedPayment(V(), fs)])
1127- if ((fu == fu))
1140+ let fy = invoke(aa(), "deposit", nil, [AttachedPayment(X(), fw)])
1141+ if ((fy == fy))
11281142 then {
1129- let ff = invoke(Z(), "notifyNotional", [bu, fd], nil)
1130- if ((ff == ff))
1131- then (((ed(bu, fb, fT, fd, fU) ++ ep(bK, bL, ds, dt, dw, (bl() - (if ((fb > 0))
1132- then ap(dk)
1133- else 0)), (bk() - (if ((0 > fb))
1134- then ap(dk)
1135- else 0)))) ++ ew(eA.caller, fS)) ++ ez(fW))
1143+ let fj = invoke(ab(), "notifyNotional", [bz, fh], nil)
1144+ if ((fj == fj))
1145+ then (((ei(bz, ff, fZ, fh, ga) ++ eu(bP, bQ, dx, dy, dB, (bo() - (if ((ff > 0))
1146+ then as(dp)
1147+ else 0)), (bn() - (if ((0 > ff))
1148+ then as(dp)
1149+ else 0)))) ++ eB(bq.caller, fY)) ++ eE(gc))
11361150 else throw("Strict value is not equal to itself.")
11371151 }
11381152 else throw("Strict value is not equal to itself.")
11391153 }
11401154 else throw("Strict value is not equal to itself.")
11411155 }
11421156 else throw("Strict value is not equal to itself.")
11431157 }
11441158 else {
1145- let fY = dm(bu, false)
1146- let cM = fY._1
1147- let ci = fY._2
1148- let cN = fY._3
1149- let cO = fY._4
1150- let bK = fY._5
1151- let bL = fY._6
1152- let ds = fY._7
1153- let dt = fY._8
1154- let dw = fY._9
1155- let dl = fY._10
1156- let du = fY._11
1157- let dv = fY._12
1158- let fR = ao(dl, bd())
1159- let fS = (fR / 2)
1160- let fs = (fR - fS)
1161- let fF = (aQ() - fR)
1162- let fZ = if ((0 > fF))
1163- then $Tuple2(0, ap(fF))
1164- else $Tuple2(fF, 0)
1165- let fW = fZ._1
1166- let fX = fZ._2
1167- let fJ = if ((fX > 0))
1159+ let ge = dr(bz, false)
1160+ let cR = ge._1
1161+ let cn = ge._2
1162+ let cS = ge._3
1163+ let cT = ge._4
1164+ let bP = ge._5
1165+ let bQ = ge._6
1166+ let dx = ge._7
1167+ let dy = ge._8
1168+ let dB = ge._9
1169+ let dq = ge._10
1170+ let dz = ge._11
1171+ let dA = ge._12
1172+ let fX = ar(dq, bg())
1173+ let fY = (fX / 2)
1174+ let fw = (fX - fY)
1175+ let fL = (aT() - fX)
1176+ let gf = if ((0 > fL))
1177+ then $Tuple2(0, as(fL))
1178+ else $Tuple2(fL, 0)
1179+ let gc = gf._1
1180+ let gd = gf._2
1181+ let fP = if ((gd > 0))
11681182 then {
1169- let fK = invoke(Y(), "withdraw", [fX], nil)
1170- if ((fK == fK))
1183+ let fQ = invoke(aa(), "withdraw", [gd], nil)
1184+ if ((fQ == fQ))
11711185 then nil
11721186 else throw("Strict value is not equal to itself.")
11731187 }
11741188 else nil
1175- if ((fJ == fJ))
1189+ if ((fP == fP))
11761190 then {
1177- let fB = invoke(W(), "unlockNeutrino", [(fR - fX), toBase58String(V())], nil)
1178- if ((fB == fB))
1191+ let fF = invoke(Y(), "unlockNeutrino", [(fX - gd), toBase58String(X())], nil)
1192+ if ((fF == fF))
11791193 then {
1180- let fu = invoke(Y(), "deposit", nil, [AttachedPayment(V(), fs)])
1181- if ((fu == fu))
1194+ let fy = invoke(aa(), "deposit", nil, [AttachedPayment(X(), fw)])
1195+ if ((fy == fy))
11821196 then {
1183- let ff = invoke(Z(), "notifyNotional", [bu, 0], nil)
1184- if ((ff == ff))
1185- then (((ev(bu) ++ ep(bK, bL, ds, dt, dw, du, dv)) ++ ew(eA.caller, fS)) ++ ez(fW))
1197+ let fj = invoke(ab(), "notifyNotional", [bz, 0], nil)
1198+ if ((fj == fj))
1199+ then (((eA(bz) ++ eu(bP, bQ, dx, dy, dB, dz, dA)) ++ eB(bq.caller, fY)) ++ eE(gc))
11861200 else throw("Strict value is not equal to itself.")
11871201 }
11881202 else throw("Strict value is not equal to itself.")
11891203 }
11901204 else throw("Strict value is not equal to itself.")
11911205 }
11921206 else throw("Strict value is not equal to itself.")
11931207 }
11941208 }
11951209
11961210
11971211
1198-@Callable(eA)
1212+@Callable(bq)
11991213 func payFunding () = {
1200- let ga = aY()
1201- if (if (if ((ga > lastBlock.timestamp))
1214+ let gg = bb()
1215+ if (if (if ((gg > lastBlock.timestamp))
12021216 then true
1203- else !(bz()))
1217+ else !(bE()))
12041218 then true
1205- else bA())
1206- then throw(((("Invalid funding block timestamp: " + toString(lastBlock.timestamp)) + " < ") + toString(ga)))
1219+ else bF())
1220+ then throw(((("Invalid funding block timestamp: " + toString(lastBlock.timestamp)) + " < ") + toString(gg)))
12071221 else {
1208- let gb = cs()
1209- let gc = dx()
1210- let gd = (gc - gb)
1211- let ge = if (if ((bk() == 0))
1222+ let gh = cx()
1223+ let gi = dC()
1224+ let gj = (gi - gh)
1225+ let gk = if (if ((bn() == 0))
12121226 then true
1213- else (bl() == 0))
1227+ else (bo() == 0))
12141228 then $Tuple2(0, 0)
1215- else if ((0 > gd))
1229+ else if ((0 > gj))
12161230 then {
1217- let gf = am(ao(gd, ba()), ag)
1218- let gg = am(ao(gf, bk()), bl())
1219- $Tuple2(gf, gg)
1231+ let gl = ap(ar(gj, bd()), aj)
1232+ let gm = ap(ar(gl, bn()), bo())
1233+ $Tuple2(gl, gm)
12201234 }
12211235 else {
1222- let gg = am(ao(gd, ba()), ag)
1223- let gf = am(ao(gg, bl()), bk())
1224- $Tuple2(gf, gg)
1236+ let gm = ap(ar(gj, bd()), aj)
1237+ let gl = ap(ar(gm, bo()), bn())
1238+ $Tuple2(gl, gm)
12251239 }
1226- let gf = ge._1
1227- let gg = ge._2
1228- dX((ga + bb()), (bi() + gg), (bj() + gf), am(gg, gb), am(gf, gb))
1240+ let gl = gk._1
1241+ let gm = gk._2
1242+ ec((gg + be()), (bl() + gm), (bm() + gl), ap(gm, gh), ap(gl, gh))
12291243 }
12301244 }
12311245
12321246
12331247
1234-@Callable(eA)
1235-func v_get (bu) = {
1236- let gh = dm(bu, false)
1237- let cM = gh._1
1238- let cN = gh._2
1239- let cO = gh._3
1240- let gi = gh._4
1241- throw((((ak(cN) + ak(cO)) + ak(gi)) + ak(de(bu))))
1248+@Callable(bq)
1249+func v_get (bz) = {
1250+ let gn = dr(bz, false)
1251+ let cR = gn._1
1252+ let cS = gn._2
1253+ let cT = gn._3
1254+ let go = gn._4
1255+ throw((((an(cS) + an(cT)) + an(go)) + an(dj(bz))))
12421256 }
12431257
12441258
12451259
1246-@Callable(eA)
1247-func view_calcRemainMarginWithFundingPayment (bu) = {
1248- let gj = bt(bu)
1249- let bx = gj._1
1250- let cR = gj._2
1251- let db = gj._3
1252- let cT = gj._4
1253- let gk = cP(bu, ai)
1254- let cJ = gk._1
1255- let cU = gk._2
1256- let gl = bY(bx, cR, cT, cU)
1257- let ch = gl._1
1258- let ci = gl._2
1259- let cd = gl._3
1260- throw((((((ak(ch) + ak(cd)) + ak(de(bu))) + ak(cU)) + ak(ci)) + ak(cJ)))
1260+@Callable(bq)
1261+func view_calcRemainMarginWithFundingPayment (bz) = {
1262+ let gp = by(bz)
1263+ let bC = gp._1
1264+ let cW = gp._2
1265+ let dg = gp._3
1266+ let cY = gp._4
1267+ let gq = cU(bz, al)
1268+ let cO = gq._1
1269+ let cZ = gq._2
1270+ let gr = cd(bC, cW, cY, cZ)
1271+ let cm = gr._1
1272+ let cn = gr._2
1273+ let ci = gr._3
1274+ throw((((((an(cm) + an(ci)) + an(dj(bz))) + an(cZ)) + an(cn)) + an(cO)))
12611275 }
12621276
12631277
12641278
1265-@Callable(eA)
1266-func forceMoveAsset (bu,ex) = if (if ((addressFromPublicKey(U()) != eA.caller))
1279+@Callable(bq)
1280+func forceMoveAsset (bz,eC) = if (if ((addressFromPublicKey(W()) != bq.caller))
12671281 then true
1268- else (0 > ex))
1282+ else (0 > eC))
12691283 then throw("Invalid forceMoveAsset parameters")
12701284 else {
1271- let fB = invoke(W(), "unlockNeutrino", [ex, toBase58String(V())], nil)
1272- if ((fB == fB))
1273- then (ew(addressFromStringValue(bu), ex) ++ ez((aQ() - ex)))
1285+ let fF = invoke(Y(), "unlockNeutrino", [eC, toBase58String(X())], nil)
1286+ if ((fF == fF))
1287+ then (eB(addressFromStringValue(bz), eC) ++ eE((aT() - eC)))
12741288 else throw("Strict value is not equal to itself.")
12751289 }
12761290
12771291
1278-@Verifier(gm)
1279-func gn () = sigVerify(gm.bodyBytes, gm.proofs[0], U())
1292+@Verifier(gs)
1293+func gt () = sigVerify(gs.bodyBytes, gs.proofs[0], W())
12801294

github/deemru/w8io/873ac7e 
450.71 ms