tx · 55a9BMiBtVZw1LcNSVCNgmPnqSwbnVDoS2VJij6DDpUd

3NC3GcwFK9knYYKT2SRc7nWxc5SXc2aKBQ6:  -0.07500000 Waves

2023.01.21 20:05 [2415004] smart account 3NC3GcwFK9knYYKT2SRc7nWxc5SXc2aKBQ6 > SELF 0.00000000 Waves

{ "type": 13, "id": "55a9BMiBtVZw1LcNSVCNgmPnqSwbnVDoS2VJij6DDpUd", "fee": 7500000, "feeAssetId": null, "timestamp": 1674320697045, "version": 2, "chainId": 84, "sender": "3NC3GcwFK9knYYKT2SRc7nWxc5SXc2aKBQ6", "senderPublicKey": "5GAkpjTakesSgVm3A22kYMBvNpM8C1KpqWfyC7YyB84y", "proofs": [ "261QzFJGUBVMbpi2Aam2pBy2jGk2Wmfk33ZAjMtkSB1NYv8dp4DjssMTTn4emKryxSdFGyJfTRrLFKVFifjGvpeC" ], "script": "base64:BgJxCAISABIAEgASABIDCgEBEgMKAQESDwoNAQEBAQEBAQEBAQEBARIVChMBAQEBAQEBCAgICAEBAQEBAQEBEgYKBAEBAQgSABIDCgEBEgUKAwEBBBIDCgEIEgASABIDCgEIEgMKAQESABIAEgASBAoCCAjEAQAJa19vcmFfa2V5AglrX29yYV9rZXkAD2tfb3JhX2Jsb2NrX2tleQIPa19vcmFfYmxvY2tfa2V5AA5rX29yYV9vcGVuX2tleQIOa19vcmFfb3Blbl9rZXkABWtfb3JhAgVrX29yYQAJa19iYWxhbmNlAglrX2JhbGFuY2UACmtfc2VxdWVuY2UCCmtfc2VxdWVuY2UADmtfcG9zaXRpb25TaXplAg5rX3Bvc2l0aW9uU2l6ZQAQa19wb3NpdGlvbk1hcmdpbgIQa19wb3NpdGlvbk1hcmdpbgAWa19wb3NpdGlvbk9wZW5Ob3Rpb25hbAIWa19wb3NpdGlvbk9wZW5Ob3Rpb25hbAAua19wb3NpdGlvbkxhc3RVcGRhdGVkQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgISa19wb3NpdGlvbkZyYWN0aW9uABJrX3Bvc2l0aW9uU2VxdWVuY2UCEmtfcG9zaXRpb25TZXF1ZW5jZQAPa19wb3NpdGlvbkFzc2V0Ag9rX3Bvc2l0aW9uQXNzZXQADWtfcG9zaXRpb25GZWUCDWtfcG9zaXRpb25GZWUAHmtfcG9zaXRpb25MYXN0VXBkYXRlZFRpbWVzdGFtcAITa19wb3NpdGlvblRpbWVzdGFtcAANa19pbml0aWFsaXplZAINa19pbml0aWFsaXplZAAIa19wYXVzZWQCCGtfcGF1c2VkAAtrX2Nsb3NlT25seQILa19jbG9zZU9ubHkABWtfZmVlAgVrX2ZlZQANa19yb2xsb3ZlckZlZQIOa19yb2xsb3Zlcl9mZWUAD2tfZnVuZGluZ1BlcmlvZAIPa19mdW5kaW5nUGVyaW9kABFrX2luaXRNYXJnaW5SYXRpbwIRa19pbml0TWFyZ2luUmF0aW8AGGtfbWFpbnRlbmFuY2VNYXJnaW5SYXRpbwIFa19tbXIAFWtfbGlxdWlkYXRpb25GZWVSYXRpbwIVa19saXF1aWRhdGlvbkZlZVJhdGlvABlrX3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvAhZrX3BhcnRMaXF1aWRhdGlvblJhdGlvAA1rX3NwcmVhZExpbWl0Ag1rX3NwcmVhZExpbWl0ABBrX21heFByaWNlSW1wYWN0AhBrX21heFByaWNlSW1wYWN0ABBrX21heFByaWNlU3ByZWFkAhBrX21heFByaWNlU3ByZWFkABFrX21heE9wZW5Ob3Rpb25hbAIRa19tYXhPcGVuTm90aW9uYWwAFWtfZmVlVG9TdGFrZXJzUGVyY2VudAIVa19mZWVUb1N0YWtlcnNQZXJjZW50ABBrX21heE9yYWNsZURlbGF5AhBrX21heE9yYWNsZURlbGF5AA1rX2xhc3REYXRhU3RyAg1rX2xhc3REYXRhU3RyAA5rX2xhc3RNaW51dGVJZAIOa19sYXN0TWludXRlSWQAHWtfdHdhcERhdGFMYXN0Q3VtdWxhdGl2ZVByaWNlAh1rX3R3YXBEYXRhTGFzdEN1bXVsYXRpdmVQcmljZQATa190d2FwRGF0YUxhc3RQcmljZQITa190d2FwRGF0YUxhc3RQcmljZQAaa190d2FwRGF0YVByZXZpb3VzTWludXRlSWQCGmtfdHdhcERhdGFQcmV2aW91c01pbnV0ZUlkACVrX2xhdGVzdExvbmdDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAhtrX2xhdGVzdExvbmdQcmVtaXVtRnJhY3Rpb24AJmtfbGF0ZXN0U2hvcnRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAhxrX2xhdGVzdFNob3J0UHJlbWl1bUZyYWN0aW9uABJrX25leHRGdW5kaW5nQmxvY2sCHmtfbmV4dEZ1bmRpbmdCbG9ja01pblRpbWVzdGFtcAARa19sb25nRnVuZGluZ1JhdGUCEWtfbG9uZ0Z1bmRpbmdSYXRlABJrX3Nob3J0RnVuZGluZ1JhdGUCEmtfc2hvcnRGdW5kaW5nUmF0ZQATa19xdW90ZUFzc2V0UmVzZXJ2ZQIIa19xdEFzdFIAEmtfYmFzZUFzc2V0UmVzZXJ2ZQIIa19ic0FzdFIAEmtfcXVvdGVBc3NldFdlaWdodAIIa19xdEFzdFcAEWtfYmFzZUFzc2V0V2VpZ2h0AghrX2JzQXN0VwATa190b3RhbFBvc2l0aW9uU2l6ZQITa190b3RhbFBvc2l0aW9uU2l6ZQAXa190b3RhbExvbmdQb3NpdGlvblNpemUCF2tfdG90YWxMb25nUG9zaXRpb25TaXplABhrX3RvdGFsU2hvcnRQb3NpdGlvblNpemUCGGtfdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQAWa19vcGVuSW50ZXJlc3ROb3Rpb25hbAIWa19vcGVuSW50ZXJlc3ROb3Rpb25hbAATa19vcGVuSW50ZXJlc3RTaG9ydAITa19vcGVuSW50ZXJlc3RTaG9ydAASa19vcGVuSW50ZXJlc3RMb25nAhJrX29wZW5JbnRlcmVzdExvbmcAFGtfY29vcmRpbmF0b3JBZGRyZXNzAhRrX2Nvb3JkaW5hdG9yQWRkcmVzcwAPa192YXVsdF9hZGRyZXNzAg9rX3ZhdWx0X2FkZHJlc3MAD2tfYWRtaW5fYWRkcmVzcwIPa19hZG1pbl9hZGRyZXNzABJrX2FkbWluX3B1YmxpY19rZXkCEmtfYWRtaW5fcHVibGljX2tleQANa19xdW90ZV9hc3NldAINa19xdW90ZV9hc3NldAAPa19xdW90ZV9zdGFraW5nAg9rX3F1b3RlX3N0YWtpbmcAEWtfc3Rha2luZ19hZGRyZXNzAhFrX3N0YWtpbmdfYWRkcmVzcwAPa19taW5lcl9hZGRyZXNzAg9rX21pbmVyX2FkZHJlc3MAEGtfb3JkZXJzX2FkZHJlc3MCEGtfb3JkZXJzX2FkZHJlc3MAEmtfcmVmZXJyYWxfYWRkcmVzcwISa19yZWZlcnJhbF9hZGRyZXNzABJrX2V4Y2hhbmdlX2FkZHJlc3MCEmtfZXhjaGFuZ2VfYWRkcmVzcwAVa19uZnRfbWFuYWdlcl9hZGRyZXNzAhVrX25mdF9tYW5hZ2VyX2FkZHJlc3MBDnRvQ29tcG9zaXRlS2V5AgRfa2V5CF9hZGRyZXNzCQCsAgIJAKwCAgUEX2tleQIBXwUIX2FkZHJlc3MBC2Nvb3JkaW5hdG9yAAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMFFGtfY29vcmRpbmF0b3JBZGRyZXNzAhNDb29yZGluYXRvciBub3Qgc2V0AQxhZG1pbkFkZHJlc3MACQCmCAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQtjb29yZGluYXRvcgAFD2tfYWRtaW5fYWRkcmVzcwEOYWRtaW5QdWJsaWNLZXkACQDZBAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQtjb29yZGluYXRvcgAFEmtfYWRtaW5fcHVibGljX2tleQEKcXVvdGVBc3NldAAJANkEAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBC2Nvb3JkaW5hdG9yAAUNa19xdW90ZV9hc3NldAERcXVvdGVBc3NldFN0YWtpbmcACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBC2Nvb3JkaW5hdG9yAAUPa19xdW90ZV9zdGFraW5nAhtRdW90ZSBhc3NldCBzdGFraW5nIG5vdCBzZXQBDnN0YWtpbmdBZGRyZXNzAAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQtjb29yZGluYXRvcgAFEWtfc3Rha2luZ19hZGRyZXNzAg9TdGFraW5nIG5vdCBzZXQBDHZhdWx0QWRkcmVzcwAJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQERQGV4dHJOYXRpdmUoMTA1MykCCQELY29vcmRpbmF0b3IABQ9rX3ZhdWx0X2FkZHJlc3MCDVZhdWx0IG5vdCBzZXQBDG1pbmVyQWRkcmVzcwAJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQERQGV4dHJOYXRpdmUoMTA1MykCCQELY29vcmRpbmF0b3IABQ9rX21pbmVyX2FkZHJlc3MCDU1pbmVyIG5vdCBzZXQBDW9yZGVyc0FkZHJlc3MACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBC2Nvb3JkaW5hdG9yAAUQa19vcmRlcnNfYWRkcmVzcwIOT3JkZXJzIG5vdCBzZXQBD3JlZmVycmFsQWRkcmVzcwAJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQERQGV4dHJOYXRpdmUoMTA1MykCCQELY29vcmRpbmF0b3IABRJrX3JlZmVycmFsX2FkZHJlc3MCEFJlZmVycmFsIG5vdCBzZXQBEW5mdE1hbmFnZXJBZGRyZXNzAAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQtjb29yZGluYXRvcgAFFWtfbmZ0X21hbmFnZXJfYWRkcmVzcwITTkZUIE1hbmFnZXIgbm90IHNldAELc3dhcEFkZHJlc3MACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIJAQtjb29yZGluYXRvcgAFEmtfZXhjaGFuZ2VfYWRkcmVzcwIPTm8gc3dhcCBhZGRyZXNzAhRJbnZhbGlkIHN3YXAgYWRkcmVzcwANa190b2tlbl9wYXJhbQINa190b2tlbl9wYXJhbQAMa190b2tlbl90eXBlAgxrX3Rva2VuX3R5cGUAGEZFRV9SRURVQ1RJT05fVE9LRU5fVFlQRQINZmVlX3JlZHVjdGlvbgAIRElSX0xPTkcAAQAJRElSX1NIT1JUAAIADVRXQVBfSU5URVJWQUwADwAPT1JBQ0xFX0lOVEVSVkFMAA8AB1NFQ09ORFMA6AcAD0RFQ0lNQUxfTlVNQkVSUwAGAAxERUNJTUFMX1VOSVQJAGgCAAEJAGgCCQBoAgkAaAIJAGgCCQBoAgAKAAoACgAKAAoACgAPTUlOVVRFU19JTl9ZRUFSCQBoAgCgiiAFDERFQ0lNQUxfVU5JVAAHT05FX0RBWQkAaAIAgKMFBQxERUNJTUFMX1VOSVQACEFMTF9GRUVTAGQAD1BOTF9PUFRJT05fU1BPVAABABFQTkxfT1BUSU9OX09SQUNMRQACAQFzAQJfeAkArAICCQCkAwEFAl94AgEsAQRkaXZkAgJfeAJfeQkAbgQFAl94BQxERUNJTUFMX1VOSVQFAl95BQhIQUxGRVZFTgEEbXVsZAICX3gCX3kJAG4EBQJfeAUCX3kFDERFQ0lNQUxfVU5JVAUISEFMRkVWRU4BBXNxcnRkAQJfeAkBBHNxcnQEBQJfeAUPREVDSU1BTF9OVU1CRVJTBQ9ERUNJTUFMX05VTUJFUlMFCEhBTEZFVkVOAQRwb3dkAgJfeAJfeQkAbAYFAl94BQ9ERUNJTUFMX05VTUJFUlMFAl95BQ9ERUNJTUFMX05VTUJFUlMFD0RFQ0lNQUxfTlVNQkVSUwUISEFMRkVWRU4BBWJkaXZkAgJfeAJfeQkAvQIEBQJfeAkAtgIBBQxERUNJTUFMX1VOSVQFAl95BQhIQUxGRVZFTgEFYm11bGQCAl94Al95CQC9AgQFAl94BQJfeQkAtgIBBQxERUNJTUFMX1VOSVQFCEhBTEZFVkVOAQZic3FydGQBAl94CQEKc3FydEJpZ0ludAQFAl94BQ9ERUNJTUFMX05VTUJFUlMFD0RFQ0lNQUxfTlVNQkVSUwUISEFMRkVWRU4BBWJwb3dkAgJfeAJfeQkAdgYFAl94BQ9ERUNJTUFMX05VTUJFUlMFAl95BQ9ERUNJTUFMX05VTUJFUlMFD0RFQ0lNQUxfTlVNQkVSUwUISEFMRkVWRU4BA2FicwECX3gDCQBmAgUCX3gAAAUCX3gJAQEtAQUCX3gBBHZtYXgCAl94Al95AwkAZwIFAl94BQJfeQUCX3gFAl95AQlsaXN0VG9TdHIBBV9saXN0AwkAAAIJAJADAQUFX2xpc3QAAAIACQC5CQIFBV9saXN0AgEsAQlzdHJUb0xpc3QBBF9zdHIDCQAAAgUEX3N0cgIABQNuaWwJALUJAgUEX3N0cgIBLAELcHVzaFRvUXVldWUDBV9saXN0CF9tYXhTaXplBl92YWx1ZQMJAGYCCQCQAwEFBV9saXN0BQhfbWF4U2l6ZQkAzQgCCQDRCAIFBV9saXN0AAAFBl92YWx1ZQkAzQgCBQVfbGlzdAUGX3ZhbHVlAQNpbnQBAWsJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQR0aGlzBQFrCQCsAgICDW5vIHZhbHVlIGZvciAFAWsBBWludE9yAgFrA2RlZgkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQFrBQNkZWYBBHN0ckECCF9hZGRyZXNzBF9rZXkEA3ZhbAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFCF9hZGRyZXNzBQRfa2V5CQCsAgICEU5vIHZhbHVlIGZvciBrZXkgBQRfa2V5BQN2YWwBBGludEECCF9hZGRyZXNzBF9rZXkEA3ZhbAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFCF9hZGRyZXNzBQRfa2V5CQCsAgICEU5vIHZhbHVlIGZvciBrZXkgBQRfa2V5BQN2YWwBCGNiYWxhbmNlAAkBA2ludAEFCWtfYmFsYW5jZQEDZmVlAAkBA2ludAEFBWtfZmVlAQ9yb2xsb3ZlckZlZVJhdGUACQEDaW50AQUNa19yb2xsb3ZlckZlZQEPaW5pdE1hcmdpblJhdGlvAAkBA2ludAEFEWtfaW5pdE1hcmdpblJhdGlvAQZxdEFzdFIACQEDaW50AQUTa19xdW90ZUFzc2V0UmVzZXJ2ZQEGYnNBc3RSAAkBA2ludAEFEmtfYmFzZUFzc2V0UmVzZXJ2ZQEGcXRBc3RXAAkBBWludE9yAgUSa19xdW90ZUFzc2V0V2VpZ2h0BQxERUNJTUFMX1VOSVQBBmJzQXN0VwAJAQVpbnRPcgIFEWtfYmFzZUFzc2V0V2VpZ2h0BQxERUNJTUFMX1VOSVQBEXRvdGFsUG9zaXRpb25TaXplAAkBA2ludAEFE2tfdG90YWxQb3NpdGlvblNpemUBFG9wZW5JbnRlcmVzdE5vdGlvbmFsAAkBA2ludAEFFmtfb3BlbkludGVyZXN0Tm90aW9uYWwBEW9wZW5JbnRlcmVzdFNob3J0AAkBA2ludAEFE2tfb3BlbkludGVyZXN0U2hvcnQBEG9wZW5JbnRlcmVzdExvbmcACQEDaW50AQUSa19vcGVuSW50ZXJlc3RMb25nARluZXh0RnVuZGluZ0Jsb2NrVGltZXN0YW1wAAkBA2ludAEFEmtfbmV4dEZ1bmRpbmdCbG9jawEQZnVuZGluZ1BlcmlvZFJhdwAJAQNpbnQBBQ9rX2Z1bmRpbmdQZXJpb2QBFGZ1bmRpbmdQZXJpb2REZWNpbWFsAAkAaAIJARBmdW5kaW5nUGVyaW9kUmF3AAUMREVDSU1BTF9VTklUARRmdW5kaW5nUGVyaW9kU2Vjb25kcwAJAGgCCQEQZnVuZGluZ1BlcmlvZFJhdwAFB1NFQ09ORFMBFm1haW50ZW5hbmNlTWFyZ2luUmF0aW8ACQEDaW50AQUYa19tYWludGVuYW5jZU1hcmdpblJhdGlvARNsaXF1aWRhdGlvbkZlZVJhdGlvAAkBA2ludAEFFWtfbGlxdWlkYXRpb25GZWVSYXRpbwEXcGFydGlhbExpcXVpZGF0aW9uUmF0aW8ACQEDaW50AQUZa19wYXJ0aWFsTGlxdWlkYXRpb25SYXRpbwELc3ByZWFkTGltaXQACQEDaW50AQUNa19zcHJlYWRMaW1pdAEObWF4UHJpY2VJbXBhY3QACQEDaW50AQUQa19tYXhQcmljZUltcGFjdAEObWF4UHJpY2VTcHJlYWQACQEDaW50AQUQa19tYXhQcmljZVNwcmVhZAEPbWF4T3Blbk5vdGlvbmFsAAkBA2ludAEFEWtfbWF4T3Blbk5vdGlvbmFsASNsYXRlc3RMb25nQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgAJAQNpbnQBBSVrX2xhdGVzdExvbmdDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uASRsYXRlc3RTaG9ydEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24ACQEDaW50AQUma19sYXRlc3RTaG9ydEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24BFnRvdGFsU2hvcnRQb3NpdGlvblNpemUACQEDaW50AQUYa190b3RhbFNob3J0UG9zaXRpb25TaXplARV0b3RhbExvbmdQb3NpdGlvblNpemUACQEDaW50AQUXa190b3RhbExvbmdQb3NpdGlvblNpemUBDGxhc3RTZXF1ZW5jZQAJAQVpbnRPcgIFCmtfc2VxdWVuY2UAAAETZmVlVG9TdGFrZXJzUGVyY2VudAAJAQNpbnQBBRVrX2ZlZVRvU3Rha2Vyc1BlcmNlbnQBDm1heE9yYWNsZURlbGF5AAkBA2ludAEFEGtfbWF4T3JhY2xlRGVsYXkBDWxhc3RUaW1lc3RhbXAACAUJbGFzdEJsb2NrCXRpbWVzdGFtcAEPZ2V0QWN0dWFsQ2FsbGVyAQFpCQELdmFsdWVPckVsc2UCCQCdCAIJAQ1vcmRlcnNBZGRyZXNzAAIIa19zZW5kZXIJAKUIAQgFAWkGY2FsbGVyARZyZXF1aXJlTW9yZU1hcmdpblJhdGlvAwxfbWFyZ2luUmF0aW8QX2Jhc2VNYXJnaW5SYXRpbxRfbGFyZ2VyVGhhbk9yRXF1YWxUbwQUcmVtYWluaW5nTWFyZ2luUmF0aW8JAGUCBQxfbWFyZ2luUmF0aW8FEF9iYXNlTWFyZ2luUmF0aW8DAwUUX2xhcmdlclRoYW5PckVxdWFsVG8JAGYCAAAFFHJlbWFpbmluZ01hcmdpblJhdGlvBwkAAgEJAKwCAgkArAICCQCsAgICEEludmFsaWQgbWFyZ2luOiAJAKQDAQUMX21hcmdpblJhdGlvAgMgPCAJAKQDAQUQX2Jhc2VNYXJnaW5SYXRpbwMDCQEBIQEFFF9sYXJnZXJUaGFuT3JFcXVhbFRvCQBnAgUUcmVtYWluaW5nTWFyZ2luUmF0aW8AAAcJAAIBCQCsAgIJAKwCAgkArAICAhBJbnZhbGlkIG1hcmdpbjogCQCkAwEFDF9tYXJnaW5SYXRpbwIDID4gCQCkAwEFEF9iYXNlTWFyZ2luUmF0aW8GAR9sYXRlc3RDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAQ1fcG9zaXRpb25TaXplAwkAAAIFDV9wb3NpdGlvblNpemUAAAkAAgECLFNob3VsZCBub3QgYmUgY2FsbGVkIHdpdGggX3Bvc2l0aW9uU2l6ZSA9PSAwAwkAZgIFDV9wb3NpdGlvblNpemUAAAkBI2xhdGVzdExvbmdDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAAkBJGxhdGVzdFNob3J0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgABC2dldFBvc2l0aW9uAQdfdHJhZGVyBA9wb3NpdGlvblNpemVPcHQJAJoIAgUEdGhpcwkBDnRvQ29tcG9zaXRlS2V5AgUOa19wb3NpdGlvblNpemUFB190cmFkZXIEByRtYXRjaDAFD3Bvc2l0aW9uU2l6ZU9wdAMJAAECBQckbWF0Y2gwAgNJbnQEDHBvc2l0aW9uU2l6ZQUHJG1hdGNoMAkAlwoFBQxwb3NpdGlvblNpemUJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAQ50b0NvbXBvc2l0ZUtleQIFEGtfcG9zaXRpb25NYXJnaW4FB190cmFkZXIJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAQ50b0NvbXBvc2l0ZUtleQIFFmtfcG9zaXRpb25PcGVuTm90aW9uYWwFB190cmFkZXIJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAQ50b0NvbXBvc2l0ZUtleQIFLmtfcG9zaXRpb25MYXN0VXBkYXRlZEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24FB190cmFkZXIJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAQ50b0NvbXBvc2l0ZUtleQIFHmtfcG9zaXRpb25MYXN0VXBkYXRlZFRpbWVzdGFtcAUHX3RyYWRlcgkAlwoFAAAAAAAAAAAAAAEQZ2V0UG9zaXRpb25Bc3NldAEHX3RyYWRlcgQQcG9zaXRpb25Bc3NldE9wdAkAnQgCBQR0aGlzCQEOdG9Db21wb3NpdGVLZXkCBQ9rX3Bvc2l0aW9uQXNzZXQFB190cmFkZXIEByRtYXRjaDAFEHBvc2l0aW9uQXNzZXRPcHQDCQABAgUHJG1hdGNoMAIGU3RyaW5nBA1wb3NpdGlvbkFzc2V0BQckbWF0Y2gwBQ1wb3NpdGlvbkFzc2V0CQDYBAEJAQpxdW90ZUFzc2V0AAEOZ2V0UG9zaXRpb25GZWUBB190cmFkZXIEDnBvc2l0aW9uRmVlT3B0CQCaCAIFBHRoaXMJAQ50b0NvbXBvc2l0ZUtleQIFDWtfcG9zaXRpb25GZWUFB190cmFkZXIEByRtYXRjaDAFDnBvc2l0aW9uRmVlT3B0AwkAAQIFByRtYXRjaDACA0ludAQLcG9zaXRpb25GZWUFByRtYXRjaDAFC3Bvc2l0aW9uRmVlCQEDZmVlAAETcmVxdWlyZU9wZW5Qb3NpdGlvbgEHX3RyYWRlcgMJAAACCAkBC2dldFBvc2l0aW9uAQUHX3RyYWRlcgJfMQAACQACAQIQTm8gb3BlbiBwb3NpdGlvbgYBC2luaXRpYWxpemVkAAkBC3ZhbHVlT3JFbHNlAgkAmwgCBQR0aGlzBQ1rX2luaXRpYWxpemVkBwEGcGF1c2VkAAkBC3ZhbHVlT3JFbHNlAgkAmwgCBQR0aGlzBQhrX3BhdXNlZAcBCWNsb3NlT25seQAJAQt2YWx1ZU9yRWxzZQIJAJsIAgUEdGhpcwULa19jbG9zZU9ubHkHAQ11cGRhdGVSZXNlcnZlAwZfaXNBZGQRX3F1b3RlQXNzZXRBbW91bnQQX2Jhc2VBc3NldEFtb3VudAMFBl9pc0FkZAQHbmV3QmFzZQkAZQIJAQZic0FzdFIABRBfYmFzZUFzc2V0QW1vdW50AwkAZwIAAAUHbmV3QmFzZQkAAgECKlR4IGxlYWQgdG8gYmFzZSBhc3NldCByZXNlcnZlIDw9IDAsIHJldmVydAkAlQoDCQBkAgkBBnF0QXN0UgAFEV9xdW90ZUFzc2V0QW1vdW50BQduZXdCYXNlCQBkAgkBEXRvdGFsUG9zaXRpb25TaXplAAUQX2Jhc2VBc3NldEFtb3VudAQIbmV3UXVvdGUJAGUCCQEGcXRBc3RSAAURX3F1b3RlQXNzZXRBbW91bnQDCQBnAgAABQhuZXdRdW90ZQkAAgECKlR4IGxlYWQgdG8gYmFzZSBxdW90ZSByZXNlcnZlIDw9IDAsIHJldmVydAkAlQoDBQhuZXdRdW90ZQkAZAIJAQZic0FzdFIABRBfYmFzZUFzc2V0QW1vdW50CQBlAgkBEXRvdGFsUG9zaXRpb25TaXplAAUQX2Jhc2VBc3NldEFtb3VudAENY2FsY0ludmFyaWFudAIHX3F0QXN0UgdfYnNBc3RSBAdicXRBc3RSCQC2AgEFB19xdEFzdFIEB2Jic0FzdFIJALYCAQUHX2JzQXN0UgkBBWJtdWxkAgUHYnF0QXN0UgUHYmJzQXN0UgEJc3dhcElucHV0AgZfaXNBZGQRX3F1b3RlQXNzZXRBbW91bnQEB19xdEFzdFIJAQZxdEFzdFIABAdfYnNBc3RSCQEGYnNBc3RSAAQHX3F0QXN0VwkBBnF0QXN0VwAEB19ic0FzdFcJAQZic0FzdFcABBhxdW90ZUFzc2V0QW1vdW50QWRqdXN0ZWQJAQRkaXZkAgURX3F1b3RlQXNzZXRBbW91bnQFB19xdEFzdFcEAWsJAQ1jYWxjSW52YXJpYW50AgUHX3F0QXN0UgUHX2JzQXN0UgQWcXVvdGVBc3NldFJlc2VydmVBZnRlcgMFBl9pc0FkZAkAZAIFB19xdEFzdFIFGHF1b3RlQXNzZXRBbW91bnRBZGp1c3RlZAkAZQIFB19xdEFzdFIFGHF1b3RlQXNzZXRBbW91bnRBZGp1c3RlZAQVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyCQCgAwEJAQViZGl2ZAIFAWsJALYCAQUWcXVvdGVBc3NldFJlc2VydmVBZnRlcgQYYW1vdW50QmFzZUFzc2V0Qm91Z2h0QWJzCQEDYWJzAQkAZQIFFWJhc2VBc3NldFJlc2VydmVBZnRlcgUHX2JzQXN0UgQVYW1vdW50QmFzZUFzc2V0Qm91Z2h0AwUGX2lzQWRkBRhhbW91bnRCYXNlQXNzZXRCb3VnaHRBYnMJAQEtAQUYYW1vdW50QmFzZUFzc2V0Qm91Z2h0QWJzBA0kdDAxNzAzNjE3MjA2CQENdXBkYXRlUmVzZXJ2ZQMFBl9pc0FkZAUYcXVvdGVBc3NldEFtb3VudEFkanVzdGVkBRhhbW91bnRCYXNlQXNzZXRCb3VnaHRBYnMEF3F1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIxCAUNJHQwMTcwMzYxNzIwNgJfMQQWYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyMQgFDSR0MDE3MDM2MTcyMDYCXzIEF3RvdGFsUG9zaXRpb25TaXplQWZ0ZXIxCAUNJHQwMTcwMzYxNzIwNgJfMwQLcHJpY2VCZWZvcmUJAQRkaXZkAgkBBG11bGQCBQdfcXRBc3RSBQdfcXRBc3RXCQEEbXVsZAIFB19ic0FzdFIFB19ic0FzdFcEC21hcmtldFByaWNlCQEEZGl2ZAIFEV9xdW90ZUFzc2V0QW1vdW50BRhhbW91bnRCYXNlQXNzZXRCb3VnaHRBYnMECXByaWNlRGlmZgkBA2FicwEJAGUCBQtwcmljZUJlZm9yZQULbWFya2V0UHJpY2UEC3ByaWNlSW1wYWN0CQBlAgUMREVDSU1BTF9VTklUCQEEZGl2ZAIFC3ByaWNlQmVmb3JlCQBkAgULcHJpY2VCZWZvcmUFCXByaWNlRGlmZgQTbWF4UHJpY2VJbXBhY3RWYWx1ZQkBDm1heFByaWNlSW1wYWN0AAMJAGYCBQtwcmljZUltcGFjdAUTbWF4UHJpY2VJbXBhY3RWYWx1ZQkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgINUHJpY2UgaW1wYWN0IAkApAMBBQtwcmljZUltcGFjdAIUID4gbWF4IHByaWNlIGltcGFjdCAJAKQDAQUTbWF4UHJpY2VJbXBhY3RWYWx1ZQIVIGJlZm9yZSBxdW90ZSBhc3NldDogCQCkAwEFB19xdEFzdFICFCBiZWZvcmUgYmFzZSBhc3NldDogCQCkAwEFB19ic0FzdFICISBxdW90ZSBhc3NldCBhbW91bnQgdG8gZXhjaGFuZ2U6IAkApAMBBRFfcXVvdGVBc3NldEFtb3VudAIPIHByaWNlIGJlZm9yZTogCQCkAwEFC3ByaWNlQmVmb3JlAg4gbWFya2V0UHJpY2U6IAkApAMBBQttYXJrZXRQcmljZQkAlgoEBRVhbW91bnRCYXNlQXNzZXRCb3VnaHQFF3F1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIxBRZiYXNlQXNzZXRSZXNlcnZlQWZ0ZXIxBRd0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyMQEPY2FsY1JvbGxvdmVyRmVlAhJfb2xkUG9zaXRpb25NYXJnaW4gX29sZFBvc2l0aW9uTGFzdFVwZGF0ZWRUaW1lc3RhbXAED3Bvc2l0aW9uTWludXRlcwkAaAIJAGkCCQBpAgkAZQIJAQ1sYXN0VGltZXN0YW1wAAUgX29sZFBvc2l0aW9uTGFzdFVwZGF0ZWRUaW1lc3RhbXAA6AcAPAUMREVDSU1BTF9VTklUBAtyb2xsb3ZlckZlZQkBBGRpdmQCCQEEbXVsZAIJAQRtdWxkAgUSX29sZFBvc2l0aW9uTWFyZ2luBQ9wb3NpdGlvbk1pbnV0ZXMJAQ9yb2xsb3ZlckZlZVJhdGUABQ9NSU5VVEVTX0lOX1lFQVIFC3JvbGxvdmVyRmVlATBjYWxjUmVtYWluTWFyZ2luV2l0aEZ1bmRpbmdQYXltZW50QW5kUm9sbG92ZXJGZWUFEF9vbGRQb3NpdGlvblNpemUSX29sZFBvc2l0aW9uTWFyZ2luJV9vbGRQb3NpdGlvbkN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24gX29sZFBvc2l0aW9uTGFzdFVwZGF0ZWRUaW1lc3RhbXAMX21hcmdpbkRlbHRhBA5mdW5kaW5nUGF5bWVudAMJAQIhPQIFEF9vbGRQb3NpdGlvblNpemUAAAQgX2xhdGVzdEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24JAR9sYXRlc3RDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAQUQX29sZFBvc2l0aW9uU2l6ZQkBBG11bGQCCQBlAgUgX2xhdGVzdEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24FJV9vbGRQb3NpdGlvbkN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24FEF9vbGRQb3NpdGlvblNpemUAAAQLcm9sbG92ZXJGZWUJAQ9jYWxjUm9sbG92ZXJGZWUCBRJfb2xkUG9zaXRpb25NYXJnaW4FIF9vbGRQb3NpdGlvbkxhc3RVcGRhdGVkVGltZXN0YW1wBAxzaWduZWRNYXJnaW4JAGQCCQBlAgkAZQIFDF9tYXJnaW5EZWx0YQULcm9sbG92ZXJGZWUFDmZ1bmRpbmdQYXltZW50BRJfb2xkUG9zaXRpb25NYXJnaW4EDSR0MDE5NDYxMTk1ODgDCQBmAgAABQxzaWduZWRNYXJnaW4JAJQKAgAACQEDYWJzAQUMc2lnbmVkTWFyZ2luCQCUCgIJAQNhYnMBBQxzaWduZWRNYXJnaW4AAAQMcmVtYWluTWFyZ2luCAUNJHQwMTk0NjExOTU4OAJfMQQHYmFkRGVidAgFDSR0MDE5NDYxMTk1ODgCXzIJAJYKBAUMcmVtYWluTWFyZ2luBQdiYWREZWJ0BQ5mdW5kaW5nUGF5bWVudAULcm9sbG92ZXJGZWUBFnN3YXBPdXRwdXRXaXRoUmVzZXJ2ZXMHBl9pc0FkZBBfYmFzZUFzc2V0QW1vdW50FF9jaGVja01heFByaWNlSW1wYWN0El9xdW90ZUFzc2V0UmVzZXJ2ZRFfcXVvdGVBc3NldFdlaWdodBFfYmFzZUFzc2V0UmVzZXJ2ZRBfYmFzZUFzc2V0V2VpZ2h0BAtwcmljZUJlZm9yZQkBBGRpdmQCCQEEbXVsZAIFEl9xdW90ZUFzc2V0UmVzZXJ2ZQURX3F1b3RlQXNzZXRXZWlnaHQJAQRtdWxkAgURX2Jhc2VBc3NldFJlc2VydmUFEF9iYXNlQXNzZXRXZWlnaHQDCQAAAgUQX2Jhc2VBc3NldEFtb3VudAAACQACAQIZSW52YWxpZCBiYXNlIGFzc2V0IGFtb3VudAQBawkBDWNhbGNJbnZhcmlhbnQCBRJfcXVvdGVBc3NldFJlc2VydmUFEV9iYXNlQXNzZXRSZXNlcnZlBBhiYXNlQXNzZXRQb29sQW1vdW50QWZ0ZXIDBQZfaXNBZGQJAGQCBRFfYmFzZUFzc2V0UmVzZXJ2ZQUQX2Jhc2VBc3NldEFtb3VudAkAZQIFEV9iYXNlQXNzZXRSZXNlcnZlBRBfYmFzZUFzc2V0QW1vdW50BA9xdW90ZUFzc2V0QWZ0ZXIJAKADAQkBBWJkaXZkAgUBawkAtgIBBRhiYXNlQXNzZXRQb29sQW1vdW50QWZ0ZXIED3F1b3RlQXNzZXREZWx0YQkBA2FicwEJAGUCBQ9xdW90ZUFzc2V0QWZ0ZXIFEl9xdW90ZUFzc2V0UmVzZXJ2ZQQOcXVvdGVBc3NldFNvbGQJAQRtdWxkAgUPcXVvdGVBc3NldERlbHRhBRFfcXVvdGVBc3NldFdlaWdodAQTbWF4UHJpY2VJbXBhY3RWYWx1ZQkBDm1heFByaWNlSW1wYWN0AAQNJHQwMjA4NTAyMTAxMgkBDXVwZGF0ZVJlc2VydmUDCQEBIQEFBl9pc0FkZAUPcXVvdGVBc3NldERlbHRhBRBfYmFzZUFzc2V0QW1vdW50BBdxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyMQgFDSR0MDIwODUwMjEwMTICXzEEFmJhc2VBc3NldFJlc2VydmVBZnRlcjEIBQ0kdDAyMDg1MDIxMDEyAl8yBBd0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyMQgFDSR0MDIwODUwMjEwMTICXzMEC21hcmtldFByaWNlCQEEZGl2ZAIFDnF1b3RlQXNzZXRTb2xkBRBfYmFzZUFzc2V0QW1vdW50BAlwcmljZURpZmYJAQNhYnMBCQBlAgULcHJpY2VCZWZvcmUFC21hcmtldFByaWNlBAtwcmljZUltcGFjdAkAZQIFDERFQ0lNQUxfVU5JVAkBBGRpdmQCBQtwcmljZUJlZm9yZQkAZAIFC3ByaWNlQmVmb3JlBQlwcmljZURpZmYDAwkAZgIFC3ByaWNlSW1wYWN0BRNtYXhQcmljZUltcGFjdFZhbHVlBRRfY2hlY2tNYXhQcmljZUltcGFjdAcJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICDVByaWNlIGltcGFjdCAJAKQDAQULcHJpY2VJbXBhY3QCFCA+IG1heCBwcmljZSBpbXBhY3QgCQCkAwEFE21heFByaWNlSW1wYWN0VmFsdWUCFSBiZWZvcmUgcXVvdGUgYXNzZXQ6IAkApAMBBRJfcXVvdGVBc3NldFJlc2VydmUCFCBiZWZvcmUgYmFzZSBhc3NldDogCQCkAwEFEV9iYXNlQXNzZXRSZXNlcnZlAiAgYmFzZSBhc3NldCBhbW91bnQgdG8gZXhjaGFuZ2U6IAkApAMBBRBfYmFzZUFzc2V0QW1vdW50Ag8gcHJpY2UgYmVmb3JlOiAJAKQDAQULcHJpY2VCZWZvcmUCDyBtYXJrZXQgcHJpY2U6IAkApAMBBQttYXJrZXRQcmljZQkAmQoHBQ5xdW90ZUFzc2V0U29sZAUXcXVvdGVBc3NldFJlc2VydmVBZnRlcjEFFmJhc2VBc3NldFJlc2VydmVBZnRlcjEFF3RvdGFsUG9zaXRpb25TaXplQWZ0ZXIxCQBlAgkBFXRvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQADBQZfaXNBZGQJAQNhYnMBBRBfYmFzZUFzc2V0QW1vdW50AAAJAGUCCQEWdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQADCQEBIQEFBl9pc0FkZAkBA2FicwEFEF9iYXNlQXNzZXRBbW91bnQAAAULcHJpY2VJbXBhY3QBCnN3YXBPdXRwdXQDBl9pc0FkZBBfYmFzZUFzc2V0QW1vdW50FF9jaGVja01heFByaWNlSW1wYWN0CQEWc3dhcE91dHB1dFdpdGhSZXNlcnZlcwcFBl9pc0FkZAUQX2Jhc2VBc3NldEFtb3VudAUUX2NoZWNrTWF4UHJpY2VJbXBhY3QJAQZxdEFzdFIACQEGcXRBc3RXAAkBBmJzQXN0UgAJAQZic0FzdFcAAQ5nZXRPcmFjbGVQcmljZQAEBm9yYWNsZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzBQVrX29yYQkArAICAgpObyB2YWx1ZTogBQVrX29yYQIABAhwcmljZUtleQkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzBQlrX29yYV9rZXkJAKwCAgIKTm8gdmFsdWU6IAUJa19vcmFfa2V5BAlsYXN0VmFsdWUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQZvcmFjbGUFCHByaWNlS2V5CQCsAgIJAKwCAgkArAICAiJDYW4gbm90IGdldCBvcmFjbGUgcHJpY2UuIE9yYWNsZTogCQClCAEFBm9yYWNsZQIGIGtleTogBQhwcmljZUtleQQIYmxvY2tLZXkJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwUPa19vcmFfYmxvY2tfa2V5AgADCQECIT0CBQhibG9ja0tleQIABAxjdXJyZW50QmxvY2sIBQlsYXN0QmxvY2sGaGVpZ2h0BA9sYXN0T3JhY2xlQmxvY2sJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQZvcmFjbGUFCGJsb2NrS2V5CQCsAgIJAKwCAgkArAICAiJDYW4gbm90IGdldCBvcmFjbGUgYmxvY2suIE9yYWNsZTogCQClCAEFBm9yYWNsZQIGIGtleTogBQhibG9ja0tleQMJAGYCCQBlAgUMY3VycmVudEJsb2NrBQ9sYXN0T3JhY2xlQmxvY2sJAQ5tYXhPcmFjbGVEZWxheQAJAAIBCQCsAgIJAKwCAgkArAICAiZPcmFjbGUgc3RhbGUgZGF0YS4gTGFzdCBvcmFjbGUgYmxvY2s6IAkApAMBBQ9sYXN0T3JhY2xlQmxvY2sCECBjdXJyZW50IGJsb2NrOiAJAKQDAQUMY3VycmVudEJsb2NrBQlsYXN0VmFsdWUFCWxhc3RWYWx1ZQEOaXNNYXJrZXRDbG9zZWQABAZvcmFjbGUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzBQVrX29yYQIABAdvcGVuS2V5CQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMFDmtfb3JhX29wZW5fa2V5AgADCQECIT0CBQdvcGVuS2V5AgAEBmlzT3BlbgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCbCAIFBm9yYWNsZQUHb3BlbktleQkArAICCQCsAgIJAKwCAgIrQ2FuIG5vdCBnZXQgb3JhY2xlIGlzIG9wZW4vY2xvc2VkLiBPcmFjbGU6IAkApQgBBQZvcmFjbGUCBiBrZXk6IAUHb3BlbktleQkBASEBBQZpc09wZW4HAQxhYnNQcmljZURpZmYFDF9vcmFjbGVQcmljZRJfcXVvdGVBc3NldFJlc2VydmURX2Jhc2VBc3NldFJlc2VydmUHX3F0QXN0VwdfYnNBc3RXBApwcmljZUFmdGVyCQEEZGl2ZAIJAQRtdWxkAgUSX3F1b3RlQXNzZXRSZXNlcnZlBQdfcXRBc3RXCQEEbXVsZAIFEV9iYXNlQXNzZXRSZXNlcnZlBQdfYnNBc3RXBAxhdmVyYWdlUHJpY2UJAQRkaXZkAgkAZAIFDF9vcmFjbGVQcmljZQUKcHJpY2VBZnRlcgkAaAIAAgUMREVDSU1BTF9VTklUBAxhYnNQcmljZURpZmYJAQRkaXZkAgkBA2FicwEJAGUCBQxfb3JhY2xlUHJpY2UFCnByaWNlQWZ0ZXIFDGF2ZXJhZ2VQcmljZQUMYWJzUHJpY2VEaWZmARlyZXF1aXJlTm90T3ZlclNwcmVhZExpbWl0AhJfcXVvdGVBc3NldFJlc2VydmURX2Jhc2VBc3NldFJlc2VydmUEC29yYWNsZVByaWNlCQEOZ2V0T3JhY2xlUHJpY2UABAdfcXRBc3RXCQEGcXRBc3RXAAQHX2JzQXN0VwkBBmJzQXN0VwAEEmFic1ByaWNlRGlmZkJlZm9yZQkBDGFic1ByaWNlRGlmZgUFC29yYWNsZVByaWNlCQEGcXRBc3RSAAkBBmJzQXN0UgAFB19xdEFzdFcFB19ic0FzdFcEEWFic1ByaWNlRGlmZkFmdGVyCQEMYWJzUHJpY2VEaWZmBQULb3JhY2xlUHJpY2UFEl9xdW90ZUFzc2V0UmVzZXJ2ZQURX2Jhc2VBc3NldFJlc2VydmUFB19xdEFzdFcFB19ic0FzdFcDAwkAZgIFEWFic1ByaWNlRGlmZkFmdGVyCQEObWF4UHJpY2VTcHJlYWQACQBmAgURYWJzUHJpY2VEaWZmQWZ0ZXIFEmFic1ByaWNlRGlmZkJlZm9yZQcJAAIBCQCsAgIJAKwCAgkArAICAg1QcmljZSBzcHJlYWQgCQCkAwEFEWFic1ByaWNlRGlmZkFmdGVyAhQgPiBtYXggcHJpY2Ugc3ByZWFkIAkApAMBCQEObWF4UHJpY2VTcHJlYWQABgEdcmVxdWlyZU5vdE92ZXJNYXhPcGVuTm90aW9uYWwCEV9sb25nT3Blbk5vdGlvbmFsEl9zaG9ydE9wZW5Ob3Rpb25hbAQQX21heE9wZW5Ob3Rpb25hbAkBD21heE9wZW5Ob3Rpb25hbAADCQBmAgURX2xvbmdPcGVuTm90aW9uYWwFEF9tYXhPcGVuTm90aW9uYWwJAAIBCQCsAgIJAKwCAgkArAICAhNMb25nIG9wZW4gbm90aW9uYWwgCQCkAwEFEV9sb25nT3Blbk5vdGlvbmFsAhUgPiBtYXggb3BlbiBub3Rpb25hbCAJAKQDAQUQX21heE9wZW5Ob3Rpb25hbAMJAGYCBRJfc2hvcnRPcGVuTm90aW9uYWwFEF9tYXhPcGVuTm90aW9uYWwJAAIBCQCsAgIJAKwCAgkArAICAhRTaG9ydCBvcGVuIG5vdGlvbmFsIAkApAMBBRJfc2hvcnRPcGVuTm90aW9uYWwCFSA+IG1heCBvcGVuIG5vdGlvbmFsIAkApAMBBRBfbWF4T3Blbk5vdGlvbmFsBgEMZ2V0U3BvdFByaWNlAAQSX3F1b3RlQXNzZXRSZXNlcnZlCQEGcXRBc3RSAAQRX2Jhc2VBc3NldFJlc2VydmUJAQZic0FzdFIABAdfcXRBc3RXCQEGcXRBc3RXAAQHX2JzQXN0VwkBBmJzQXN0VwAJAQRkaXZkAgkBBG11bGQCBRJfcXVvdGVBc3NldFJlc2VydmUFB19xdEFzdFcJAQRtdWxkAgURX2Jhc2VBc3NldFJlc2VydmUFB19ic0FzdFcBFmlzT3ZlckZsdWN0dWF0aW9uTGltaXQABAtvcmFjbGVQcmljZQkBDmdldE9yYWNsZVByaWNlAAQMY3VycmVudFByaWNlCQEMZ2V0U3BvdFByaWNlAAkAZgIJAQRkaXZkAgkBA2FicwEJAGUCBQtvcmFjbGVQcmljZQUMY3VycmVudFByaWNlBQtvcmFjbGVQcmljZQkBC3NwcmVhZExpbWl0AAEfZ2V0UG9zaXRpb25BZGp1c3RlZE9wZW5Ob3Rpb25hbAYNX3Bvc2l0aW9uU2l6ZQdfb3B0aW9uEl9xdW90ZUFzc2V0UmVzZXJ2ZRFfcXVvdGVBc3NldFdlaWdodBFfYmFzZUFzc2V0UmVzZXJ2ZRBfYmFzZUFzc2V0V2VpZ2h0BA9wb3NpdGlvblNpemVBYnMJAQNhYnMBBQ1fcG9zaXRpb25TaXplBAdpc1Nob3J0CQBmAgAABQ1fcG9zaXRpb25TaXplBBBwb3NpdGlvbk5vdGlvbmFsAwkAAAIFB19vcHRpb24FD1BOTF9PUFRJT05fU1BPVAQTb3V0UG9zaXRpb25Ob3Rpb25hbAgJARZzd2FwT3V0cHV0V2l0aFJlc2VydmVzBwkBASEBBQdpc1Nob3J0BQ9wb3NpdGlvblNpemVBYnMHBRJfcXVvdGVBc3NldFJlc2VydmUFEV9xdW90ZUFzc2V0V2VpZ2h0BRFfYmFzZUFzc2V0UmVzZXJ2ZQUQX2Jhc2VBc3NldFdlaWdodAJfMQUTb3V0UG9zaXRpb25Ob3Rpb25hbAkBBG11bGQCBQ9wb3NpdGlvblNpemVBYnMJAQ5nZXRPcmFjbGVQcmljZQAFEHBvc2l0aW9uTm90aW9uYWwBK2dldFBvc2l0aW9uTm90aW9uYWxBbmRVbnJlYWxpemVkUG5sQnlWYWx1ZXMHDV9wb3NpdGlvblNpemUVX3Bvc2l0aW9uT3Blbk5vdGlvbmFsEl9xdW90ZUFzc2V0UmVzZXJ2ZRFfcXVvdGVBc3NldFdlaWdodBFfYmFzZUFzc2V0UmVzZXJ2ZRBfYmFzZUFzc2V0V2VpZ2h0B19vcHRpb24DCQAAAgUNX3Bvc2l0aW9uU2l6ZQAACQACAQIVSW52YWxpZCBwb3NpdGlvbiBzaXplBAdpc1Nob3J0CQBmAgAABQ1fcG9zaXRpb25TaXplBBBwb3NpdGlvbk5vdGlvbmFsCQEfZ2V0UG9zaXRpb25BZGp1c3RlZE9wZW5Ob3Rpb25hbAYFDV9wb3NpdGlvblNpemUFB19vcHRpb24FEl9xdW90ZUFzc2V0UmVzZXJ2ZQURX3F1b3RlQXNzZXRXZWlnaHQFEV9iYXNlQXNzZXRSZXNlcnZlBRBfYmFzZUFzc2V0V2VpZ2h0BA11bnJlYWxpemVkUG5sAwUHaXNTaG9ydAkAZQIFFV9wb3NpdGlvbk9wZW5Ob3Rpb25hbAUQcG9zaXRpb25Ob3Rpb25hbAkAZQIFEHBvc2l0aW9uTm90aW9uYWwFFV9wb3NpdGlvbk9wZW5Ob3Rpb25hbAkAlAoCBRBwb3NpdGlvbk5vdGlvbmFsBQ11bnJlYWxpemVkUG5sASNnZXRQb3NpdGlvbk5vdGlvbmFsQW5kVW5yZWFsaXplZFBubAIHX3RyYWRlcgdfb3B0aW9uBA0kdDAyODU3NzI4NzA1CQELZ2V0UG9zaXRpb24BBQdfdHJhZGVyBAxwb3NpdGlvblNpemUIBQ0kdDAyODU3NzI4NzA1Al8xBA5wb3NpdGlvbk1hcmdpbggFDSR0MDI4NTc3Mjg3MDUCXzIEFHBvc2l0aW9uT3Blbk5vdGlvbmFsCAUNJHQwMjg1NzcyODcwNQJfMwQRcG9zaXRpb25Mc3RVcGRDUEYIBQ0kdDAyODU3NzI4NzA1Al80CQErZ2V0UG9zaXRpb25Ob3Rpb25hbEFuZFVucmVhbGl6ZWRQbmxCeVZhbHVlcwcFDHBvc2l0aW9uU2l6ZQUUcG9zaXRpb25PcGVuTm90aW9uYWwJAQZxdEFzdFIACQEGcXRBc3RXAAkBBmJzQXN0UgAJAQZic0FzdFcABQdfb3B0aW9uAQ9jYWxjTWFyZ2luUmF0aW8DDV9yZW1haW5NYXJnaW4IX2JhZERlYnQRX3Bvc2l0aW9uTm90aW9uYWwJAQRkaXZkAgkAZQIFDV9yZW1haW5NYXJnaW4FCF9iYWREZWJ0BRFfcG9zaXRpb25Ob3Rpb25hbAEWZ2V0TWFyZ2luUmF0aW9CeU9wdGlvbgIHX3RyYWRlcgdfb3B0aW9uBA0kdDAyOTIyMDI5MzYxCQELZ2V0UG9zaXRpb24BBQdfdHJhZGVyBAxwb3NpdGlvblNpemUIBQ0kdDAyOTIyMDI5MzYxAl8xBA5wb3NpdGlvbk1hcmdpbggFDSR0MDI5MjIwMjkzNjECXzIEA3BvbggFDSR0MDI5MjIwMjkzNjECXzMEFnBvc2l0aW9uTGFzdFVwZGF0ZWRDUEYIBQ0kdDAyOTIyMDI5MzYxAl80BBFwb3NpdGlvblRpbWVzdGFtcAgFDSR0MDI5MjIwMjkzNjECXzUEDSR0MDI5MzY3Mjk0NjAJASNnZXRQb3NpdGlvbk5vdGlvbmFsQW5kVW5yZWFsaXplZFBubAIFB190cmFkZXIFB19vcHRpb24EEHBvc2l0aW9uTm90aW9uYWwIBQ0kdDAyOTM2NzI5NDYwAl8xBA11bnJlYWxpemVkUG5sCAUNJHQwMjkzNjcyOTQ2MAJfMgQNJHQwMjk0NjUyOTY3NwkBMGNhbGNSZW1haW5NYXJnaW5XaXRoRnVuZGluZ1BheW1lbnRBbmRSb2xsb3ZlckZlZQUFDHBvc2l0aW9uU2l6ZQUOcG9zaXRpb25NYXJnaW4FFnBvc2l0aW9uTGFzdFVwZGF0ZWRDUEYFEXBvc2l0aW9uVGltZXN0YW1wBQ11bnJlYWxpemVkUG5sBAxyZW1haW5NYXJnaW4IBQ0kdDAyOTQ2NTI5Njc3Al8xBAdiYWREZWJ0CAUNJHQwMjk0NjUyOTY3NwJfMgkBD2NhbGNNYXJnaW5SYXRpbwMFDHJlbWFpbk1hcmdpbgUHYmFkRGVidAUQcG9zaXRpb25Ob3Rpb25hbAEOZ2V0TWFyZ2luUmF0aW8BB190cmFkZXIJARZnZXRNYXJnaW5SYXRpb0J5T3B0aW9uAgUHX3RyYWRlcgUPUE5MX09QVElPTl9TUE9UARtnZXRQYXJ0aWFsTGlxdWlkYXRpb25BbW91bnQCB190cmFkZXINX3Bvc2l0aW9uU2l6ZQQMbWF4aW11bVJhdGlvCQEEdm1heAIJARdwYXJ0aWFsTGlxdWlkYXRpb25SYXRpbwAJAGUCBQxERUNJTUFMX1VOSVQJAQRkaXZkAgkBDmdldE1hcmdpblJhdGlvAQUHX3RyYWRlcgkBFm1haW50ZW5hbmNlTWFyZ2luUmF0aW8ABBhtYXhFeGNoYW5nZWRQb3NpdGlvblNpemUJAQRtdWxkAgkBA2FicwEFDV9wb3NpdGlvblNpemUFDG1heGltdW1SYXRpbwQKc3dhcFJlc3VsdAkBCnN3YXBPdXRwdXQDCQBmAgUNX3Bvc2l0aW9uU2l6ZQAABRhtYXhFeGNoYW5nZWRQb3NpdGlvblNpemUHBBxtYXhFeGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50CAUKc3dhcFJlc3VsdAJfMQQLcHJpY2VJbXBhY3QIBQpzd2FwUmVzdWx0Al83AwkAZgIJAQ5tYXhQcmljZUltcGFjdAAFC3ByaWNlSW1wYWN0BRhtYXhFeGNoYW5nZWRQb3NpdGlvblNpemUJAQRtdWxkAgkBA2FicwEFDV9wb3NpdGlvblNpemUJARdwYXJ0aWFsTGlxdWlkYXRpb25SYXRpbwABFWludGVybmFsQ2xvc2VQb3NpdGlvbgYHX3RyYWRlcgVfc2l6ZQRfZmVlFF9taW5RdW90ZUFzc2V0QW1vdW50DF9hZGRUb01hcmdpbhRfY2hlY2tNYXhQcmljZUltcGFjdAQNJHQwMzA3MjEzMDg3NwkBC2dldFBvc2l0aW9uAQUHX3RyYWRlcgQPb2xkUG9zaXRpb25TaXplCAUNJHQwMzA3MjEzMDg3NwJfMQQRb2xkUG9zaXRpb25NYXJnaW4IBQ0kdDAzMDcyMTMwODc3Al8yBBdvbGRQb3NpdGlvbk9wZW5Ob3Rpb25hbAgFDSR0MDMwNzIxMzA4NzcCXzMEFG9sZFBvc2l0aW9uTHN0VXBkQ1BGCAUNJHQwMzA3MjEzMDg3NwJfNAQUb2xkUG9zaXRpb25UaW1lc3RhbXAIBQ0kdDAzMDcyMTMwODc3Al81BA5pc0xvbmdQb3NpdGlvbgkAZgIFD29sZFBvc2l0aW9uU2l6ZQAABBJhYnNPbGRQb3NpdGlvblNpemUJAQNhYnMBBQ9vbGRQb3NpdGlvblNpemUDAwkAZwIFEmFic09sZFBvc2l0aW9uU2l6ZQUFX3NpemUJAGYCBQVfc2l6ZQAABwQOaXNQYXJ0aWFsQ2xvc2UJAGYCBRJhYnNPbGRQb3NpdGlvblNpemUFBV9zaXplBA0kdDAzMTE2OTMxNjIwCQEKc3dhcE91dHB1dAMJAGYCBQ9vbGRQb3NpdGlvblNpemUAAAUFX3NpemUFFF9jaGVja01heFByaWNlSW1wYWN0BBlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50CAUNJHQwMzExNjkzMTYyMAJfMQQWcXVvdGVBc3NldFJlc2VydmVBZnRlcggFDSR0MDMxMTY5MzE2MjACXzIEFWJhc2VBc3NldFJlc2VydmVBZnRlcggFDSR0MDMxMTY5MzE2MjACXzMEFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIIBQ0kdDAzMTE2OTMxNjIwAl80BBVleGNoYW5nZWRQb3NpdGlvblNpemUDCQBmAgUPb2xkUG9zaXRpb25TaXplAAAJAQEtAQUFX3NpemUFBV9zaXplBA0kdDAzMTgzNTMyMDQyCQEjZ2V0UG9zaXRpb25Ob3Rpb25hbEFuZFVucmVhbGl6ZWRQbmwCBQdfdHJhZGVyBQ9QTkxfT1BUSU9OX1NQT1QEE29sZFBvc2l0aW9uTm90aW9uYWwIBQ0kdDAzMTgzNTMyMDQyAl8xBA11bnJlYWxpemVkUG5sCAUNJHQwMzE4MzUzMjA0MgJfMgQNcmVhbGl6ZWRSYXRpbwkBBGRpdmQCCQEDYWJzAQUVZXhjaGFuZ2VkUG9zaXRpb25TaXplBRJhYnNPbGRQb3NpdGlvblNpemUEC3JlYWxpemVkUG5sCQEEbXVsZAIFDXVucmVhbGl6ZWRQbmwFDXJlYWxpemVkUmF0aW8EDSR0MDMyMzgzMzI2MjkJATBjYWxjUmVtYWluTWFyZ2luV2l0aEZ1bmRpbmdQYXltZW50QW5kUm9sbG92ZXJGZWUFBQ9vbGRQb3NpdGlvblNpemUFEW9sZFBvc2l0aW9uTWFyZ2luBRRvbGRQb3NpdGlvbkxzdFVwZENQRgUUb2xkUG9zaXRpb25UaW1lc3RhbXAFDXVucmVhbGl6ZWRQbmwEEnJlbWFpbk1hcmdpbkJlZm9yZQgFDSR0MDMyMzgzMzI2MjkCXzEEAngxCAUNJHQwMzIzODMzMjYyOQJfMgQCeDIIBQ0kdDAzMjM4MzMyNjI5Al8zBAtyb2xsb3ZlckZlZQgFDSR0MDMyMzgzMzI2MjkCXzQED3Bvc2l0aW9uQmFkRGVidAgJATBjYWxjUmVtYWluTWFyZ2luV2l0aEZ1bmRpbmdQYXltZW50QW5kUm9sbG92ZXJGZWUFBQ9vbGRQb3NpdGlvblNpemUFEW9sZFBvc2l0aW9uTWFyZ2luBRRvbGRQb3NpdGlvbkxzdFVwZENQRgUUb2xkUG9zaXRpb25UaW1lc3RhbXAFC3JlYWxpemVkUG5sAl8yBBByZWFsaXplZENsb3NlRmVlCQEEbXVsZAIJAQRtdWxkAgUTb2xkUG9zaXRpb25Ob3Rpb25hbAUNcmVhbGl6ZWRSYXRpbwUEX2ZlZQQSdW5yZWFsaXplZFBubEFmdGVyCQBlAgUNdW5yZWFsaXplZFBubAULcmVhbGl6ZWRQbmwEEnJlbWFpbk9wZW5Ob3Rpb25hbAMJAGYCBQ9vbGRQb3NpdGlvblNpemUAAAkAZQIJAGUCBRNvbGRQb3NpdGlvbk5vdGlvbmFsBRlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50BRJ1bnJlYWxpemVkUG5sQWZ0ZXIJAGUCCQBkAgUSdW5yZWFsaXplZFBubEFmdGVyBRNvbGRQb3NpdGlvbk5vdGlvbmFsBRlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50BA9uZXdQb3NpdGlvblNpemUJAGQCBQ9vbGRQb3NpdGlvblNpemUFFWV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQQNJHQwMzQwMzUzNDQyMQMJAAACBQ9uZXdQb3NpdGlvblNpemUAAAkAlAoCAAAAAAkAlAoCCQEDYWJzAQUScmVtYWluT3Blbk5vdGlvbmFsCQEfbGF0ZXN0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgEFD25ld1Bvc2l0aW9uU2l6ZQQXbmV3UG9zaXRpb25PcGVuTm90aW9uYWwIBQ0kdDAzNDAzNTM0NDIxAl8xBBRuZXdQb3NpdGlvbkxzdFVwZENQRggFDSR0MDM0MDM1MzQ0MjECXzIEEW9wZW5Ob3Rpb25hbERlbHRhCQBlAgUXb2xkUG9zaXRpb25PcGVuTm90aW9uYWwFF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsBAttYXJnaW5SYXRpbwkBFmdldE1hcmdpblJhdGlvQnlPcHRpb24CBQdfdHJhZGVyBQ9QTkxfT1BUSU9OX1NQT1QEHm5ld1Bvc2l0aW9uTWFyZ2luV2l0aFNhbWVSYXRpbwMJAGYCBQ9vbGRQb3NpdGlvblNpemUAAAkAZQIJAQRtdWxkAgkAZAIFF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsBRJ1bnJlYWxpemVkUG5sQWZ0ZXIFC21hcmdpblJhdGlvBRJ1bnJlYWxpemVkUG5sQWZ0ZXIJAGUCCQEEbXVsZAIJAGUCBRduZXdQb3NpdGlvbk9wZW5Ob3Rpb25hbAUSdW5yZWFsaXplZFBubEFmdGVyBQttYXJnaW5SYXRpbwUSdW5yZWFsaXplZFBubEFmdGVyBBFtYXJnaW5Ub1RyYWRlclJhdwkAZQIJAGUCBRJyZW1haW5NYXJnaW5CZWZvcmUJAGQCBR5uZXdQb3NpdGlvbk1hcmdpbldpdGhTYW1lUmF0aW8FEnVucmVhbGl6ZWRQbmxBZnRlcgUQcmVhbGl6ZWRDbG9zZUZlZQQObWFyZ2luVG9UcmFkZXIDCQBmAgAABRFtYXJnaW5Ub1RyYWRlclJhdwkAAgECN0ludmFsaWQgaW50ZXJuYWxDbG9zZVBvc2l0aW9uIHBhcmFtczogdW5hYmxlIHRvIHBheSBmZWUFEW1hcmdpblRvVHJhZGVyUmF3BBFuZXdQb3NpdGlvbk1hcmdpbgMFDF9hZGRUb01hcmdpbgkAZAIFHm5ld1Bvc2l0aW9uTWFyZ2luV2l0aFNhbWVSYXRpbwUObWFyZ2luVG9UcmFkZXIFHm5ld1Bvc2l0aW9uTWFyZ2luV2l0aFNhbWVSYXRpbwMDCQECIT0CBRRfbWluUXVvdGVBc3NldEFtb3VudAAACQBmAgUUX21pblF1b3RlQXNzZXRBbW91bnQFGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQHCQACAQkArAICCQCsAgIJAKwCAgINTGltaXQgZXJyb3I6IAkApAMBBRlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50AgMgPCAJAKQDAQUUX21pblF1b3RlQXNzZXRBbW91bnQJAKMKEQUPbmV3UG9zaXRpb25TaXplBRFuZXdQb3NpdGlvbk1hcmdpbgUXbmV3UG9zaXRpb25PcGVuTm90aW9uYWwFFG5ld1Bvc2l0aW9uTHN0VXBkQ1BGBQ9wb3NpdGlvbkJhZERlYnQFC3JlYWxpemVkUG5sAwMFDF9hZGRUb01hcmdpbgUOaXNQYXJ0aWFsQ2xvc2UHAAAFDm1hcmdpblRvVHJhZGVyBRZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyBRViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIFFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIJAGUCCQEUb3BlbkludGVyZXN0Tm90aW9uYWwABRFvcGVuTm90aW9uYWxEZWx0YQkAZQIJARV0b3RhbExvbmdQb3NpdGlvblNpemUAAwUOaXNMb25nUG9zaXRpb24JAQNhYnMBBRVleGNoYW5nZWRQb3NpdGlvblNpemUAAAkAZQIJARZ0b3RhbFNob3J0UG9zaXRpb25TaXplAAMJAQEhAQUOaXNMb25nUG9zaXRpb24JAQNhYnMBBRVleGNoYW5nZWRQb3NpdGlvblNpemUAAAkAZQIJARBvcGVuSW50ZXJlc3RMb25nAAMFDmlzTG9uZ1Bvc2l0aW9uBRFvcGVuTm90aW9uYWxEZWx0YQAACQBlAgkBEW9wZW5JbnRlcmVzdFNob3J0AAMJAQEhAQUOaXNMb25nUG9zaXRpb24FEW9wZW5Ob3Rpb25hbERlbHRhAAAJAGQCBRByZWFsaXplZENsb3NlRmVlBQtyb2xsb3ZlckZlZQUZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAkAAgECO0ludmFsaWQgaW50ZXJuYWxDbG9zZVBvc2l0aW9uIHBhcmFtczogaW52YWxpZCBwb3NpdGlvbiBzaXplARBnZXRUd2FwU3BvdFByaWNlAAQIbWludXRlSWQJAGkCCQBpAgkBDWxhc3RUaW1lc3RhbXAAAOgHADwEDXN0YXJ0TWludXRlSWQJAGUCBQhtaW51dGVJZAUNVFdBUF9JTlRFUlZBTAQHbGlzdFN0cgkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzBQ1rX2xhc3REYXRhU3RyAgAEBGxpc3QJALUJAgUHbGlzdFN0cgIBLAoBCGZpbHRlckZuAgthY2N1bXVsYXRvcgRuZXh0AwkAZwIFDXN0YXJ0TWludXRlSWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAtgkBBQRuZXh0CQCsAgICH2dldFR3YXBTcG90UHJpY2U6IGludmFsaWQgaW50OiAFB2xpc3RTdHIJAM0IAgULYWNjdW11bGF0b3IJAQ1wYXJzZUludFZhbHVlAQUEbmV4dAULYWNjdW11bGF0b3IEBWxpc3RGCgACJGwFBGxpc3QKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCGZpbHRlckZuAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAyMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQECG1heEluZGV4AwkAZgIJAJADAQUFbGlzdEYAAAkAlgMBBQVsaXN0RgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQC2CQEJAJEDAgUEbGlzdAAACQCsAgICH2dldFR3YXBTcG90UHJpY2U6IGludmFsaWQgaW50OiAFB2xpc3RTdHIEDGxhc3RNaW51dGVJZAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQ5rX2xhc3RNaW51dGVJZAAABBZlbmRMYXN0Q3VtdWxhdGl2ZVByaWNlCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgkArAICBR1rX3R3YXBEYXRhTGFzdEN1bXVsYXRpdmVQcmljZQIBXwkApAMBBQxsYXN0TWludXRlSWQAAAQMZW5kTGFzdFByaWNlCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgkArAICBRNrX3R3YXBEYXRhTGFzdFByaWNlAgFfCQCkAwEFDGxhc3RNaW51dGVJZAAABBJub3dDdW11bGF0aXZlUHJpY2UJAGQCBRZlbmRMYXN0Q3VtdWxhdGl2ZVByaWNlCQBoAgkAZQIFCG1pbnV0ZUlkBQxsYXN0TWludXRlSWQFDGVuZExhc3RQcmljZQQYc3RhcnRMYXN0Q3VtdWxhdGl2ZVByaWNlCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgkArAICBR1rX3R3YXBEYXRhTGFzdEN1bXVsYXRpdmVQcmljZQIBXwkApAMBBQhtYXhJbmRleAAABA5zdGFydExhc3RQcmljZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgUTa190d2FwRGF0YUxhc3RQcmljZQIBXwkApAMBBQhtYXhJbmRleAAABBRzdGFydEN1bXVsYXRpdmVQcmljZQkAZAIFGHN0YXJ0TGFzdEN1bXVsYXRpdmVQcmljZQkAaAIJAGUCBQ1zdGFydE1pbnV0ZUlkBQhtYXhJbmRleAUOc3RhcnRMYXN0UHJpY2UJAGkCCQBlAgUSbm93Q3VtdWxhdGl2ZVByaWNlBRRzdGFydEN1bXVsYXRpdmVQcmljZQUNVFdBUF9JTlRFUlZBTAETZ2V0VGVybWluYWxBbW1TdGF0ZQAEDV9wb3NpdGlvblNpemUJARF0b3RhbFBvc2l0aW9uU2l6ZQADCQAAAgUNX3Bvc2l0aW9uU2l6ZQAACQCUCgIJAQZxdEFzdFIACQEGYnNBc3RSAAQJZGlyZWN0aW9uCQBmAgUNX3Bvc2l0aW9uU2l6ZQAABA0kdDAzOTAyNDM5MjAzCQEKc3dhcE91dHB1dAMFCWRpcmVjdGlvbgkBA2FicwEFDV9wb3NpdGlvblNpemUHBBVjdXJyZW50TmV0TWFya2V0VmFsdWUIBQ0kdDAzOTAyNDM5MjAzAl8xBBl0ZXJtaW5hbFF1b3RlQXNzZXRSZXNlcnZlCAUNJHQwMzkwMjQzOTIwMwJfMgQYdGVybWluYWxCYXNlQXNzZXRSZXNlcnZlCAUNJHQwMzkwMjQzOTIwMwJfMwkAlAoCBRl0ZXJtaW5hbFF1b3RlQXNzZXRSZXNlcnZlBRh0ZXJtaW5hbEJhc2VBc3NldFJlc2VydmUBE2dldFF1b3RlQXNzZXRXZWlnaHQEEGJhc2VBc3NldFJlc2VydmURdG90YWxQb3NpdGlvblNpemURcXVvdGVBc3NldFJlc2VydmULdGFyZ2V0UHJpY2UEAWIJALYCAQUQYmFzZUFzc2V0UmVzZXJ2ZQQCc3oJALYCAQURdG90YWxQb3NpdGlvblNpemUEAXEJALYCAQURcXVvdGVBc3NldFJlc2VydmUEAXAJALYCAQULdGFyZ2V0UHJpY2UEAWsJAQVibXVsZAIFAXEFAWIEBG5ld0IJALcCAgUBYgUCc3oEBG5ld1EJAQViZGl2ZAIFAWsFBG5ld0IEAXoJAQViZGl2ZAIFBG5ld1EFBG5ld0IEBnJlc3VsdAkBBWJkaXZkAgUBcAUBegkAoAMBBQZyZXN1bHQBFGdldFN5bmNUZXJtaW5hbFByaWNlAw5fdGVybWluYWxQcmljZQdfcXRBc3RSB19ic0FzdFIEDV9wb3NpdGlvblNpemUJARF0b3RhbFBvc2l0aW9uU2l6ZQADCQAAAgUNX3Bvc2l0aW9uU2l6ZQAABAluZXdRdEFzdFcJAQRkaXZkAgkBBG11bGQCBQ5fdGVybWluYWxQcmljZQUHX2JzQXN0UgUHX3F0QXN0UgkAlQoDBQluZXdRdEFzdFcFDERFQ0lNQUxfVU5JVAAABAlkaXJlY3Rpb24JAGYCBQ1fcG9zaXRpb25TaXplAAAEFWN1cnJlbnROZXRNYXJrZXRWYWx1ZQgJAQpzd2FwT3V0cHV0AwUJZGlyZWN0aW9uCQEDYWJzAQUNX3Bvc2l0aW9uU2l6ZQcCXzEECW5ld1F0QXN0VwkBE2dldFF1b3RlQXNzZXRXZWlnaHQEBQdfYnNBc3RSBQ1fcG9zaXRpb25TaXplBQdfcXRBc3RSBQ5fdGVybWluYWxQcmljZQQJbmV3QnNBc3RXBQxERUNJTUFMX1VOSVQEDW1hcmdpblRvVmF1bHQICQErZ2V0UG9zaXRpb25Ob3Rpb25hbEFuZFVucmVhbGl6ZWRQbmxCeVZhbHVlcwcFDV9wb3NpdGlvblNpemUFFWN1cnJlbnROZXRNYXJrZXRWYWx1ZQUHX3F0QXN0UgUJbmV3UXRBc3RXBQdfYnNBc3RSBQluZXdCc0FzdFcFD1BOTF9PUFRJT05fU1BPVAJfMgkAlQoDBQluZXdRdEFzdFcFCW5ld0JzQXN0VwUNbWFyZ2luVG9WYXVsdAEKZ2V0RnVuZGluZwAED3VuZGVybHlpbmdQcmljZQkBDmdldE9yYWNsZVByaWNlAAQNc3BvdFR3YXBQcmljZQkBEGdldFR3YXBTcG90UHJpY2UABAdwcmVtaXVtCQBlAgUNc3BvdFR3YXBQcmljZQUPdW5kZXJseWluZ1ByaWNlAwMDCQAAAgkBFnRvdGFsU2hvcnRQb3NpdGlvblNpemUAAAAGCQAAAgkBFXRvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQAAAAYJAQ5pc01hcmtldENsb3NlZAAJAJQKAgAAAAADCQBmAgAABQdwcmVtaXVtBBRzaG9ydFByZW1pdW1GcmFjdGlvbgkBBGRpdmQCCQEEbXVsZAIFB3ByZW1pdW0JARRmdW5kaW5nUGVyaW9kRGVjaW1hbAAFB09ORV9EQVkEE2xvbmdQcmVtaXVtRnJhY3Rpb24JAQRkaXZkAgkBBG11bGQCBRRzaG9ydFByZW1pdW1GcmFjdGlvbgkBFnRvdGFsU2hvcnRQb3NpdGlvblNpemUACQEVdG90YWxMb25nUG9zaXRpb25TaXplAAkAlAoCBRRzaG9ydFByZW1pdW1GcmFjdGlvbgUTbG9uZ1ByZW1pdW1GcmFjdGlvbgQTbG9uZ1ByZW1pdW1GcmFjdGlvbgkBBGRpdmQCCQEEbXVsZAIFB3ByZW1pdW0JARRmdW5kaW5nUGVyaW9kRGVjaW1hbAAFB09ORV9EQVkEFHNob3J0UHJlbWl1bUZyYWN0aW9uCQEEZGl2ZAIJAQRtdWxkAgUTbG9uZ1ByZW1pdW1GcmFjdGlvbgkBFXRvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQAJARZ0b3RhbFNob3J0UG9zaXRpb25TaXplAAkAlAoCBRRzaG9ydFByZW1pdW1GcmFjdGlvbgUTbG9uZ1ByZW1pdW1GcmFjdGlvbgEOZ2V0QWRqdXN0ZWRGZWUCC19hcnRpZmFjdElkEF9iYXNlRmVlRGlzY291bnQECmJhc2VGZWVSYXcJAQNmZWUABAdiYXNlRmVlCQEEbXVsZAIFCmJhc2VGZWVSYXcFEF9iYXNlRmVlRGlzY291bnQEDSR0MDQyMDY0NDI1NTkDCQECIT0CBQtfYXJ0aWZhY3RJZAIABAxhcnRpZmFjdEtpbmQJAQRzdHJBAgkBEW5mdE1hbmFnZXJBZGRyZXNzAAkBDnRvQ29tcG9zaXRlS2V5AgUMa190b2tlbl90eXBlBQtfYXJ0aWZhY3RJZAMJAAACBQxhcnRpZmFjdEtpbmQFGEZFRV9SRURVQ1RJT05fVE9LRU5fVFlQRQQJcmVkdWN0aW9uCQEEaW50QQIJARFuZnRNYW5hZ2VyQWRkcmVzcwAJAQ50b0NvbXBvc2l0ZUtleQIFDWtfdG9rZW5fcGFyYW0FC19hcnRpZmFjdElkBAthZGp1c3RlZEZlZQkBBG11bGQCBQdiYXNlRmVlBQlyZWR1Y3Rpb24JAJQKAgULYWRqdXN0ZWRGZWUGCQACAQIZSW52YWxpZCBhdHRhY2hlZCBhcnRpZmFjdAkAlAoCBQdiYXNlRmVlBwQLYWRqdXN0ZWRGZWUIBQ0kdDA0MjA2NDQyNTU5Al8xBAxidXJuQXJ0aWZhY3QIBQ0kdDA0MjA2NDQyNTU5Al8yCQCUCgIFC2FkanVzdGVkRmVlBQxidXJuQXJ0aWZhY3QBF2lzU2FtZUFzc2V0T3JOb1Bvc2l0aW9uAgdfdHJhZGVyCF9hc3NldElkBA9vbGRQb3NpdGlvblNpemUICQELZ2V0UG9zaXRpb24BBQdfdHJhZGVyAl8xAwkAAAIFD29sZFBvc2l0aW9uU2l6ZQAABgkAAAIJARBnZXRQb3NpdGlvbkFzc2V0AQUHX3RyYWRlcgUIX2Fzc2V0SWQBC2lzU2FtZUFzc2V0AgdfdHJhZGVyCF9hc3NldElkCQAAAgkBEGdldFBvc2l0aW9uQXNzZXQBBQdfdHJhZGVyBQhfYXNzZXRJZAEYZ2V0Rm9yVHJhZGVyV2l0aEFydGlmYWN0AgdfdHJhZGVyC19hcnRpZmFjdElkBBBkb0dldEZlZURpc2NvdW50CQD8BwQJAQxtaW5lckFkZHJlc3MAAhJjb21wdXRlRmVlRGlzY291bnQJAMwIAgUHX3RyYWRlcgUDbmlsBQNuaWwDCQAAAgUQZG9HZXRGZWVEaXNjb3VudAUQZG9HZXRGZWVEaXNjb3VudAQLZmVlRGlzY291bnQEByRtYXRjaDAFEGRvR2V0RmVlRGlzY291bnQDCQABAgUHJG1hdGNoMAIDSW50BAF4BQckbWF0Y2gwBQF4CQACAQIhSW52YWxpZCBjb21wdXRlRmVlRGlzY291bnQgcmVzdWx0BA0kdDA0MzIzOTQzMzEzCQEOZ2V0QWRqdXN0ZWRGZWUCBQtfYXJ0aWZhY3RJZAULZmVlRGlzY291bnQEC2FkanVzdGVkRmVlCAUNJHQwNDMyMzk0MzMxMwJfMQQMYnVybkFydGlmYWN0CAUNJHQwNDMyMzk0MzMxMwJfMgkAlAoCBQthZGp1c3RlZEZlZQUMYnVybkFydGlmYWN0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQ1nZXRBcnRpZmFjdElkAQFpBAphcnRpZmFjdElkAwkAZgIJAJADAQgFAWkIcGF5bWVudHMAAQkA2AQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIICQCRAwIIBQFpCHBheW1lbnRzAAEHYXNzZXRJZAISSW52YWxpZCBhcnRpZmFjdElkAgAFCmFydGlmYWN0SWQBDWRpc3RyaWJ1dGVGZWUBCl9mZWVBbW91bnQEDGZlZVRvU3Rha2VycwkBBG11bGQCBQpfZmVlQW1vdW50CQETZmVlVG9TdGFrZXJzUGVyY2VudAAECmZlZVRvVmF1bHQJAGUCBQpfZmVlQW1vdW50BQxmZWVUb1N0YWtlcnMJAJQKAgUMZmVlVG9TdGFrZXJzBQpmZWVUb1ZhdWx0AQ51cGRhdGVTZXR0aW5ncw0QX2luaXRNYXJnaW5SYXRpbwRfbW1yFF9saXF1aWRhdGlvbkZlZVJhdGlvDl9mdW5kaW5nUGVyaW9kBF9mZWUMX3NwcmVhZExpbWl0D19tYXhQcmljZUltcGFjdBhfcGFydGlhbExpcXVpZGF0aW9uUmF0aW8PX21heFByaWNlU3ByZWFkEF9tYXhPcGVuTm90aW9uYWwUX2ZlZVRvU3Rha2Vyc1BlcmNlbnQPX21heE9yYWNsZURlbGF5DF9yb2xsb3ZlckZlZQkAzAgCCQEMSW50ZWdlckVudHJ5AgURa19pbml0TWFyZ2luUmF0aW8FEF9pbml0TWFyZ2luUmF0aW8JAMwIAgkBDEludGVnZXJFbnRyeQIFGGtfbWFpbnRlbmFuY2VNYXJnaW5SYXRpbwUEX21tcgkAzAgCCQEMSW50ZWdlckVudHJ5AgUVa19saXF1aWRhdGlvbkZlZVJhdGlvBRRfbGlxdWlkYXRpb25GZWVSYXRpbwkAzAgCCQEMSW50ZWdlckVudHJ5AgUPa19mdW5kaW5nUGVyaW9kBQ5fZnVuZGluZ1BlcmlvZAkAzAgCCQEMSW50ZWdlckVudHJ5AgUFa19mZWUFBF9mZWUJAMwIAgkBDEludGVnZXJFbnRyeQIFDWtfc3ByZWFkTGltaXQFDF9zcHJlYWRMaW1pdAkAzAgCCQEMSW50ZWdlckVudHJ5AgUQa19tYXhQcmljZUltcGFjdAUPX21heFByaWNlSW1wYWN0CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRlrX3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvBRhfcGFydGlhbExpcXVpZGF0aW9uUmF0aW8JAMwIAgkBDEludGVnZXJFbnRyeQIFEGtfbWF4UHJpY2VTcHJlYWQFD19tYXhQcmljZVNwcmVhZAkAzAgCCQEMSW50ZWdlckVudHJ5AgURa19tYXhPcGVuTm90aW9uYWwFEF9tYXhPcGVuTm90aW9uYWwJAMwIAgkBDEludGVnZXJFbnRyeQIFFWtfZmVlVG9TdGFrZXJzUGVyY2VudAUUX2ZlZVRvU3Rha2Vyc1BlcmNlbnQJAMwIAgkBDEludGVnZXJFbnRyeQIFEGtfbWF4T3JhY2xlRGVsYXkFFF9mZWVUb1N0YWtlcnNQZXJjZW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ1rX3JvbGxvdmVyRmVlBQxfcm9sbG92ZXJGZWUFA25pbAENdXBkYXRlRnVuZGluZwURX25leHRGdW5kaW5nQmxvY2skX2xhdGVzdExvbmdDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uJV9sYXRlc3RTaG9ydEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24QX2xvbmdGdW5kaW5nUmF0ZRFfc2hvcnRGdW5kaW5nUmF0ZQkAzAgCCQEMSW50ZWdlckVudHJ5AgUSa19uZXh0RnVuZGluZ0Jsb2NrBRFfbmV4dEZ1bmRpbmdCbG9jawkAzAgCCQEMSW50ZWdlckVudHJ5AgUla19sYXRlc3RMb25nQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgUkX2xhdGVzdExvbmdDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uCQDMCAIJAQxJbnRlZ2VyRW50cnkCBSZrX2xhdGVzdFNob3J0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgUlX2xhdGVzdFNob3J0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgkAzAgCCQEMSW50ZWdlckVudHJ5AgURa19sb25nRnVuZGluZ1JhdGUFEF9sb25nRnVuZGluZ1JhdGUJAMwIAgkBDEludGVnZXJFbnRyeQIFEmtfc2hvcnRGdW5kaW5nUmF0ZQURX3Nob3J0RnVuZGluZ1JhdGUFA25pbAEfaW5jcmVtZW50UG9zaXRpb25TZXF1ZW5jZU51bWJlcgIOX2lzTmV3UG9zaXRpb24IX2FkZHJlc3MDBQ5faXNOZXdQb3NpdGlvbgQPY3VycmVudFNlcXVlbmNlCQEMbGFzdFNlcXVlbmNlAAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUSa19wb3NpdGlvblNlcXVlbmNlBQhfYWRkcmVzcwkAZAIFD2N1cnJlbnRTZXF1ZW5jZQABCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQprX3NlcXVlbmNlCQBkAgUPY3VycmVudFNlcXVlbmNlAAEFA25pbAUDbmlsARF1cGRhdGVQb3NpdGlvbkZlZQMOX2lzTmV3UG9zaXRpb24IX2FkZHJlc3MEX2ZlZQMFDl9pc05ld1Bvc2l0aW9uCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBQ1rX3Bvc2l0aW9uRmVlBQhfYWRkcmVzcwUEX2ZlZQUDbmlsBQNuaWwBDnVwZGF0ZVBvc2l0aW9uBghfYWRkcmVzcwVfc2l6ZQdfbWFyZ2luDV9vcGVuTm90aW9uYWwgX2xhdGVzdEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24QX2xhdGVzdFRpbWVzdGFtcAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUOa19wb3NpdGlvblNpemUFCF9hZGRyZXNzBQVfc2l6ZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUQa19wb3NpdGlvbk1hcmdpbgUIX2FkZHJlc3MFB19tYXJnaW4JAMwIAgkBDEludGVnZXJFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFFmtfcG9zaXRpb25PcGVuTm90aW9uYWwFCF9hZGRyZXNzBQ1fb3Blbk5vdGlvbmFsCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBS5rX3Bvc2l0aW9uTGFzdFVwZGF0ZWRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uBQhfYWRkcmVzcwUgX2xhdGVzdEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24JAMwIAgkBDEludGVnZXJFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFHmtfcG9zaXRpb25MYXN0VXBkYXRlZFRpbWVzdGFtcAUIX2FkZHJlc3MFEF9sYXRlc3RUaW1lc3RhbXAFA25pbAEKYXBwZW5kVHdhcAEGX3ByaWNlBAhtaW51dGVJZAkAaQIJAGkCCQENbGFzdFRpbWVzdGFtcAAA6AcAPAQQcHJldmlvdXNNaW51dGVJZAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQ5rX2xhc3RNaW51dGVJZAAAAwkAZgIFEHByZXZpb3VzTWludXRlSWQFCG1pbnV0ZUlkCQACAQIRVFdBUCBvdXQtb2Ytb3JkZXIEDGxhc3RNaW51dGVJZAMJAAACBRBwcmV2aW91c01pbnV0ZUlkAAAFCG1pbnV0ZUlkBRBwcmV2aW91c01pbnV0ZUlkAwkAZgIFCG1pbnV0ZUlkBRBwcmV2aW91c01pbnV0ZUlkBBNwcmV2Q3VtdWxhdGl2ZVByaWNlCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgkArAICBR1rX3R3YXBEYXRhTGFzdEN1bXVsYXRpdmVQcmljZQIBXwkApAMBBRBwcmV2aW91c01pbnV0ZUlkAAAECXByZXZQcmljZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgUTa190d2FwRGF0YUxhc3RQcmljZQIBXwkApAMBBRBwcmV2aW91c01pbnV0ZUlkBQZfcHJpY2UEE2xhc3RDdW11bGF0aXZlUHJpY2UJAGQCBRNwcmV2Q3VtdWxhdGl2ZVByaWNlCQBoAgkAZQIFCG1pbnV0ZUlkBQxsYXN0TWludXRlSWQFCXByZXZQcmljZQQEbGlzdAkBC3B1c2hUb1F1ZXVlAwkBCXN0clRvTGlzdAEJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwUNa19sYXN0RGF0YVN0cgIABQ1UV0FQX0lOVEVSVkFMCQCkAwEFCG1pbnV0ZUlkCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBR1rX3R3YXBEYXRhTGFzdEN1bXVsYXRpdmVQcmljZQkApAMBBQhtaW51dGVJZAUTbGFzdEN1bXVsYXRpdmVQcmljZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUTa190d2FwRGF0YUxhc3RQcmljZQkApAMBBQhtaW51dGVJZAUGX3ByaWNlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBRprX3R3YXBEYXRhUHJldmlvdXNNaW51dGVJZAkApAMBBQhtaW51dGVJZAUQcHJldmlvdXNNaW51dGVJZAkAzAgCCQEMSW50ZWdlckVudHJ5AgUOa19sYXN0TWludXRlSWQFCG1pbnV0ZUlkCQDMCAIJAQtTdHJpbmdFbnRyeQIFDWtfbGFzdERhdGFTdHIJAQlsaXN0VG9TdHIBBQRsaXN0BQNuaWwEGHR3YXBEYXRhUHJldmlvdXNNaW51dGVJZAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQEOdG9Db21wb3NpdGVLZXkCBRprX3R3YXBEYXRhUHJldmlvdXNNaW51dGVJZAkApAMBBQhtaW51dGVJZAAABBNwcmV2Q3VtdWxhdGl2ZVByaWNlCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAQ50b0NvbXBvc2l0ZUtleQIFHWtfdHdhcERhdGFMYXN0Q3VtdWxhdGl2ZVByaWNlCQCkAwEFGHR3YXBEYXRhUHJldmlvdXNNaW51dGVJZAAABAlwcmV2UHJpY2UJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkBDnRvQ29tcG9zaXRlS2V5AgUTa190d2FwRGF0YUxhc3RQcmljZQkApAMBBRh0d2FwRGF0YVByZXZpb3VzTWludXRlSWQFBl9wcmljZQQTbGFzdEN1bXVsYXRpdmVQcmljZQkAZAIFE3ByZXZDdW11bGF0aXZlUHJpY2UJAGgCCQBlAgUIbWludXRlSWQFGHR3YXBEYXRhUHJldmlvdXNNaW51dGVJZAUJcHJldlByaWNlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBR1rX3R3YXBEYXRhTGFzdEN1bXVsYXRpdmVQcmljZQkApAMBBQhtaW51dGVJZAUTbGFzdEN1bXVsYXRpdmVQcmljZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUTa190d2FwRGF0YUxhc3RQcmljZQkApAMBBQhtaW51dGVJZAUGX3ByaWNlBQNuaWwBEXVwZGF0ZUFtbVJlc2VydmVzAgdfcXRBc3RSB19ic0FzdFIJAMwIAgkBDEludGVnZXJFbnRyeQIFE2tfcXVvdGVBc3NldFJlc2VydmUFB19xdEFzdFIJAMwIAgkBDEludGVnZXJFbnRyeQIFEmtfYmFzZUFzc2V0UmVzZXJ2ZQUHX2JzQXN0UgUDbmlsARB1cGRhdGVBbW1XZWlnaHRzAgdfcXRBc3RXB19ic0FzdFcJAMwIAgkBDEludGVnZXJFbnRyeQIFEmtfcXVvdGVBc3NldFdlaWdodAUHX3F0QXN0VwkAzAgCCQEMSW50ZWdlckVudHJ5AgURa19iYXNlQXNzZXRXZWlnaHQFB19ic0FzdFcFA25pbAEJdXBkYXRlQW1tCAdfcXRBc3RSB19ic0FzdFIXX3RvdGFsUG9zaXRpb25TaXplQWZ0ZXIVX29wZW5JbnRlcmVzdE5vdGlvbmFsFl90b3RhbExvbmdQb3NpdGlvblNpemUXX3RvdGFsU2hvcnRQb3NpdGlvblNpemUWX3RvdGFsTG9uZ09wZW5Ob3Rpb25hbBdfdG90YWxTaG9ydE9wZW5Ob3Rpb25hbAQHX3F0QXN0VwkBBnF0QXN0VwAEB19ic0FzdFcJAQZic0FzdFcAAwkBAiE9AgkAZQIFFl90b3RhbExvbmdQb3NpdGlvblNpemUFF190b3RhbFNob3J0UG9zaXRpb25TaXplBRdfdG90YWxQb3NpdGlvblNpemVBZnRlcgkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhhJbnZhbGlkIEFNTSBzdGF0ZSBkYXRhOiAJAKQDAQUWX3RvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQIEICsgIAkApAMBBRdfdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQIEICE9IAkApAMBBRdfdG90YWxQb3NpdGlvblNpemVBZnRlcgkAzggCCQDOCAIJARF1cGRhdGVBbW1SZXNlcnZlcwIFB19xdEFzdFIFB19ic0FzdFIJAMwIAgkBDEludGVnZXJFbnRyeQIFE2tfdG90YWxQb3NpdGlvblNpemUFF190b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRZrX29wZW5JbnRlcmVzdE5vdGlvbmFsBRVfb3BlbkludGVyZXN0Tm90aW9uYWwJAMwIAgkBDEludGVnZXJFbnRyeQIFF2tfdG90YWxMb25nUG9zaXRpb25TaXplBRZfdG90YWxMb25nUG9zaXRpb25TaXplCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRhrX3RvdGFsU2hvcnRQb3NpdGlvblNpemUFF190b3RhbFNob3J0UG9zaXRpb25TaXplCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRJrX29wZW5JbnRlcmVzdExvbmcFFl90b3RhbExvbmdPcGVuTm90aW9uYWwJAMwIAgkBDEludGVnZXJFbnRyeQIFE2tfb3BlbkludGVyZXN0U2hvcnQFF190b3RhbFNob3J0T3Blbk5vdGlvbmFsBQNuaWwJAQphcHBlbmRUd2FwAQkBBGRpdmQCCQEEbXVsZAIFB19xdEFzdFIFB19xdEFzdFcJAQRtdWxkAgUHX2JzQXN0UgUHX2JzQXN0VwEOZGVsZXRlUG9zaXRpb24BCF9hZGRyZXNzCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ50b0NvbXBvc2l0ZUtleQIFDmtfcG9zaXRpb25TaXplBQhfYWRkcmVzcwkAzAgCCQELRGVsZXRlRW50cnkBCQEOdG9Db21wb3NpdGVLZXkCBRBrX3Bvc2l0aW9uTWFyZ2luBQhfYWRkcmVzcwkAzAgCCQELRGVsZXRlRW50cnkBCQEOdG9Db21wb3NpdGVLZXkCBRZrX3Bvc2l0aW9uT3Blbk5vdGlvbmFsBQhfYWRkcmVzcwkAzAgCCQELRGVsZXRlRW50cnkBCQEOdG9Db21wb3NpdGVLZXkCBS5rX3Bvc2l0aW9uTGFzdFVwZGF0ZWRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uBQhfYWRkcmVzcwkAzAgCCQELRGVsZXRlRW50cnkBCQEOdG9Db21wb3NpdGVLZXkCBQ9rX3Bvc2l0aW9uQXNzZXQFCF9hZGRyZXNzCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ50b0NvbXBvc2l0ZUtleQIFDWtfcG9zaXRpb25GZWUFCF9hZGRyZXNzCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ50b0NvbXBvc2l0ZUtleQIFHmtfcG9zaXRpb25MYXN0VXBkYXRlZFRpbWVzdGFtcAUIX2FkZHJlc3MFA25pbAEId2l0aGRyYXcCCF9hZGRyZXNzB19hbW91bnQEB2JhbGFuY2UJAPAHAgUEdGhpcwkBCnF1b3RlQXNzZXQAAwkAZgIFB19hbW91bnQFB2JhbGFuY2UJAAIBCQCsAgIJAKwCAgkArAICAhNVbmFibGUgdG8gd2l0aGRyYXcgCQCkAwEFB19hbW91bnQCFyBmcm9tIGNvbnRyYWN0IGJhbGFuY2UgCQCkAwEFB2JhbGFuY2UJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUIX2FkZHJlc3MFB19hbW91bnQJAQpxdW90ZUFzc2V0AAUDbmlsAQ11cGRhdGVCYWxhbmNlAQFpAwkAZgIAAAUBaQkAAgECB0JhbGFuY2UJAMwIAgkBDEludGVnZXJFbnRyeQIFCWtfYmFsYW5jZQUBaQUDbmlsAQt0cmFuc2ZlckZlZQEBaQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEOc3Rha2luZ0FkZHJlc3MABQFpCQEKcXVvdGVBc3NldAAFA25pbAEOZG9CdXJuQXJ0aWZhY3QCDV9idXJuQXJ0aWZhY3QBaQMFDV9idXJuQXJ0aWZhY3QJAMwIAgkBBEJ1cm4CCQETdmFsdWVPckVycm9yTWVzc2FnZQIICQCRAwIIBQFpCHBheW1lbnRzAAEHYXNzZXRJZAIQSW52YWxpZCBhcnRpZmFjdAABBQNuaWwFA25pbBUBaQEFcGF1c2UAAwkBAiE9AggFAWkGY2FsbGVyCQEMYWRtaW5BZGRyZXNzAAkAAgECFEludmFsaWQgcGF1c2UgcGFyYW1zCQDMCAIJAQxCb29sZWFuRW50cnkCBQhrX3BhdXNlZAYFA25pbAFpAQd1bnBhdXNlAAMJAQIhPQIIBQFpBmNhbGxlcgkBDGFkbWluQWRkcmVzcwAJAAIBAhZJbnZhbGlkIHVucGF1c2UgcGFyYW1zCQDMCAIJAQxCb29sZWFuRW50cnkCBQhrX3BhdXNlZAcFA25pbAFpAQxzZXRDbG9zZU9ubHkAAwkBAiE9AggFAWkGY2FsbGVyCQEMYWRtaW5BZGRyZXNzAAkAAgECG0ludmFsaWQgc2V0Q2xvc2VPbmx5IHBhcmFtcwkAzAgCCQEMQm9vbGVhbkVudHJ5AgULa19jbG9zZU9ubHkGBQNuaWwBaQEOdW5zZXRDbG9zZU9ubHkAAwkBAiE9AggFAWkGY2FsbGVyCQEMYWRtaW5BZGRyZXNzAAkAAgECHUludmFsaWQgdW5zZXRDbG9zZU9ubHkgcGFyYW1zCQDMCAIJAQxCb29sZWFuRW50cnkCBQtrX2Nsb3NlT25seQcFA25pbAFpAQxhZGRMaXF1aWRpdHkBEV9xdW90ZUFzc2V0QW1vdW50AwMJAQIhPQIIBQFpBmNhbGxlcgkBDGFkbWluQWRkcmVzcwAGCQBnAgAABRFfcXVvdGVBc3NldEFtb3VudAkAAgECG0ludmFsaWQgYWRkTGlxdWlkaXR5IHBhcmFtcwQHX3F0QXN0UgkBBnF0QXN0UgAEB19ic0FzdFIJAQZic0FzdFIABAdfcXRBc3RXCQEGcXRBc3RXAAQHX2JzQXN0VwkBBmJzQXN0VwAEBXByaWNlCQEEZGl2ZAIJAQRtdWxkAgUHX3F0QXN0UgUHX3F0QXN0VwkBBG11bGQCBQdfYnNBc3RSBQdfYnNBc3RXBAtxdEFzdFJBZnRlcgkAZAIFB19xdEFzdFIFEV9xdW90ZUFzc2V0QW1vdW50BBRiYXNlQXNzZXRBbW91bnRUb0FkZAkAZQIJAQRkaXZkAgkBBG11bGQCBQtxdEFzdFJBZnRlcgUHX3F0QXN0VwUFcHJpY2UFB19ic0FzdFIEC2JzQXN0UkFmdGVyCQBkAgUHX2JzQXN0UgUUYmFzZUFzc2V0QW1vdW50VG9BZGQEDSR0MDUyNzIwNTI4NzEJARRnZXRTeW5jVGVybWluYWxQcmljZQMJAQ5nZXRPcmFjbGVQcmljZQAFC3F0QXN0UkFmdGVyBQtic0FzdFJBZnRlcgQTbmV3UXVvdGVBc3NldFdlaWdodAgFDSR0MDUyNzIwNTI4NzECXzEEEm5ld0Jhc2VBc3NldFdlaWdodAgFDSR0MDUyNzIwNTI4NzECXzIEDW1hcmdpblRvVmF1bHQIBQ0kdDA1MjcyMDUyODcxAl8zBA1kb0V4Y2hhbmdlUG5MAwkBAiE9AgUNbWFyZ2luVG9WYXVsdAAABA1kb0V4Y2hhbmdlUG5MCQD8BwQJAQx2YXVsdEFkZHJlc3MAAhVleGNoYW5nZUZyZWVBbmRMb2NrZWQJAMwIAgUNbWFyZ2luVG9WYXVsdAUDbmlsBQNuaWwDCQAAAgUNZG9FeGNoYW5nZVBuTAUNZG9FeGNoYW5nZVBuTAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQNuaWwDCQAAAgUNZG9FeGNoYW5nZVBuTAUNZG9FeGNoYW5nZVBuTAkAzggCCQERdXBkYXRlQW1tUmVzZXJ2ZXMCBQtxdEFzdFJBZnRlcgULYnNBc3RSQWZ0ZXIJARB1cGRhdGVBbW1XZWlnaHRzAgUTbmV3UXVvdGVBc3NldFdlaWdodAUSbmV3QmFzZUFzc2V0V2VpZ2h0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBD3JlbW92ZUxpcXVpZGl0eQERX3F1b3RlQXNzZXRBbW91bnQDAwkBAiE9AggFAWkGY2FsbGVyCQEMYWRtaW5BZGRyZXNzAAYJAGcCBRFfcXVvdGVBc3NldEFtb3VudAAACQACAQIeSW52YWxpZCByZW1vdmVMaXF1aWRpdHkgcGFyYW1zBAdfcXRBc3RSCQEGcXRBc3RSAAQHX2JzQXN0UgkBBmJzQXN0UgAEB19xdEFzdFcJAQZxdEFzdFcABAdfYnNBc3RXCQEGYnNBc3RXAAQFcHJpY2UJAQRkaXZkAgkBBG11bGQCBQdfcXRBc3RSBQdfcXRBc3RXCQEEbXVsZAIFB19ic0FzdFIFB19ic0FzdFcEC3F0QXN0UkFmdGVyCQBlAgUHX3F0QXN0UgURX3F1b3RlQXNzZXRBbW91bnQEF2Jhc2VBc3NldEFtb3VudFRvUmVtb3ZlCQEDYWJzAQkAZQIJAQRkaXZkAgkBBG11bGQCBQtxdEFzdFJBZnRlcgUHX3F0QXN0VwUFcHJpY2UFB19ic0FzdFIEC2JzQXN0UkFmdGVyCQBlAgUHX2JzQXN0UgUXYmFzZUFzc2V0QW1vdW50VG9SZW1vdmUEDSR0MDUzODAzNTM5NTQJARRnZXRTeW5jVGVybWluYWxQcmljZQMJAQ5nZXRPcmFjbGVQcmljZQAFC3F0QXN0UkFmdGVyBQtic0FzdFJBZnRlcgQTbmV3UXVvdGVBc3NldFdlaWdodAgFDSR0MDUzODAzNTM5NTQCXzEEEm5ld0Jhc2VBc3NldFdlaWdodAgFDSR0MDUzODAzNTM5NTQCXzIEDW1hcmdpblRvVmF1bHQIBQ0kdDA1MzgwMzUzOTU0Al8zBA1kb0V4Y2hhbmdlUG5MAwkBAiE9AgUNbWFyZ2luVG9WYXVsdAAABA1kb0V4Y2hhbmdlUG5MCQD8BwQJAQx2YXVsdEFkZHJlc3MAAhVleGNoYW5nZUZyZWVBbmRMb2NrZWQJAMwIAgUNbWFyZ2luVG9WYXVsdAUDbmlsBQNuaWwDCQAAAgUNZG9FeGNoYW5nZVBuTAUNZG9FeGNoYW5nZVBuTAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQNuaWwDCQAAAgUNZG9FeGNoYW5nZVBuTAUNZG9FeGNoYW5nZVBuTAkAzggCCQERdXBkYXRlQW1tUmVzZXJ2ZXMCBQtxdEFzdFJBZnRlcgULYnNBc3RSQWZ0ZXIJARB1cGRhdGVBbW1XZWlnaHRzAgUTbmV3UXVvdGVBc3NldFdlaWdodAUSbmV3QmFzZUFzc2V0V2VpZ2h0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBDmNoYW5nZVNldHRpbmdzDRBfaW5pdE1hcmdpblJhdGlvBF9tbXIUX2xpcXVpZGF0aW9uRmVlUmF0aW8OX2Z1bmRpbmdQZXJpb2QEX2ZlZQxfc3ByZWFkTGltaXQPX21heFByaWNlSW1wYWN0GF9wYXJ0aWFsTGlxdWlkYXRpb25SYXRpbw9fbWF4UHJpY2VTcHJlYWQQX21heE9wZW5Ob3Rpb25hbBRfZmVlVG9TdGFrZXJzUGVyY2VudA9fbWF4T3JhY2xlRGVsYXkMX3JvbGxvdmVyRmVlAwkBAiE9AggFAWkGY2FsbGVyCQEMYWRtaW5BZGRyZXNzAAkAAgECHUludmFsaWQgY2hhbmdlU2V0dGluZ3MgcGFyYW1zCQEOdXBkYXRlU2V0dGluZ3MNBRBfaW5pdE1hcmdpblJhdGlvBQRfbW1yBRRfbGlxdWlkYXRpb25GZWVSYXRpbwUOX2Z1bmRpbmdQZXJpb2QFBF9mZWUFDF9zcHJlYWRMaW1pdAUPX21heFByaWNlSW1wYWN0BRhfcGFydGlhbExpcXVpZGF0aW9uUmF0aW8FD19tYXhQcmljZVNwcmVhZAUQX21heE9wZW5Ob3Rpb25hbAUUX2ZlZVRvU3Rha2Vyc1BlcmNlbnQFD19tYXhPcmFjbGVEZWxheQUMX3JvbGxvdmVyRmVlAWkBCmluaXRpYWxpemUTB19xdEFzdFIHX2JzQXN0Ug5fZnVuZGluZ1BlcmlvZBBfaW5pdE1hcmdpblJhdGlvBF9tbXIUX2xpcXVpZGF0aW9uRmVlUmF0aW8EX2ZlZQdfb3JhY2xlCl9vcmFjbGVLZXkPX29yYWNsZUJsb2NrS2V5DF9jb29yZGluYXRvcgxfc3ByZWFkTGltaXQPX21heFByaWNlSW1wYWN0GF9wYXJ0aWFsTGlxdWlkYXRpb25SYXRpbw9fbWF4UHJpY2VTcHJlYWQQX21heE9wZW5Ob3Rpb25hbBRfZmVlVG9TdGFrZXJzUGVyY2VudA9fbWF4T3JhY2xlRGVsYXkMX3JvbGxvdmVyRmVlAwMDAwMDAwMDAwMDAwMDAwMJAGcCAAAFB19xdEFzdFIGCQBnAgAABQdfYnNBc3RSBgkAZwIAAAUOX2Z1bmRpbmdQZXJpb2QGCQBnAgAABRBfaW5pdE1hcmdpblJhdGlvBgkAZwIAAAUEX21tcgYJAGcCAAAFFF9saXF1aWRhdGlvbkZlZVJhdGlvBgkAZwIAAAUEX2ZlZQYJAGcCAAAFDF9zcHJlYWRMaW1pdAYJAGcCAAAFD19tYXhQcmljZUltcGFjdAYJAGcCAAAFGF9wYXJ0aWFsTGlxdWlkYXRpb25SYXRpbwYJAGcCAAAFD19tYXhQcmljZVNwcmVhZAYJAGcCAAAFEF9tYXhPcGVuTm90aW9uYWwGCQBnAgAABRRfZmVlVG9TdGFrZXJzUGVyY2VudAYJAGYCBRRfZmVlVG9TdGFrZXJzUGVyY2VudAUMREVDSU1BTF9VTklUBgkAZwIAAAUPX21heE9yYWNsZURlbGF5BgkAZwIAAAUMX3JvbGxvdmVyRmVlBgkBC2luaXRpYWxpemVkAAkAAgECHUludmFsaWQgaW5pdGlhbGl6ZSBwYXJhbWV0ZXJzCQDOCAIJAM4IAgkAzggCCQDOCAIJAQl1cGRhdGVBbW0IBQdfcXRBc3RSBQdfYnNBc3RSAAAAAAAAAAAAAAAACQEOdXBkYXRlU2V0dGluZ3MNBRBfaW5pdE1hcmdpblJhdGlvBQRfbW1yBRRfbGlxdWlkYXRpb25GZWVSYXRpbwUOX2Z1bmRpbmdQZXJpb2QFBF9mZWUFDF9zcHJlYWRMaW1pdAUPX21heFByaWNlSW1wYWN0BRhfcGFydGlhbExpcXVpZGF0aW9uUmF0aW8FD19tYXhQcmljZVNwcmVhZAUQX21heE9wZW5Ob3Rpb25hbAUUX2ZlZVRvU3Rha2Vyc1BlcmNlbnQFD19tYXhPcmFjbGVEZWxheQUMX3JvbGxvdmVyRmVlCQENdXBkYXRlRnVuZGluZwUJAGQCCQENbGFzdFRpbWVzdGFtcAAFDl9mdW5kaW5nUGVyaW9kAAAAAAAAAAAJAQ11cGRhdGVCYWxhbmNlAQAACQDMCAIJAQxCb29sZWFuRW50cnkCBQ1rX2luaXRpYWxpemVkBgkAzAgCCQELU3RyaW5nRW50cnkCBQVrX29yYQUHX29yYWNsZQkAzAgCCQELU3RyaW5nRW50cnkCBQlrX29yYV9rZXkFCl9vcmFjbGVLZXkJAMwIAgkBC1N0cmluZ0VudHJ5AgUPa19vcmFfYmxvY2tfa2V5BQ9fb3JhY2xlQmxvY2tLZXkJAMwIAgkBC1N0cmluZ0VudHJ5AgUUa19jb29yZGluYXRvckFkZHJlc3MFDF9jb29yZGluYXRvcgUDbmlsAWkBEGluY3JlYXNlUG9zaXRpb24ECl9kaXJlY3Rpb24JX2xldmVyYWdlE19taW5CYXNlQXNzZXRBbW91bnQIX3JlZkxpbmsEBHN5bmMJAPwHBAUEdGhpcwIZc3luY1Rlcm1pbmFsUHJpY2VUb09yYWNsZQUDbmlsBQNuaWwDCQAAAgUEc3luYwUEc3luYwQHX3RyYWRlcgkBD2dldEFjdHVhbENhbGxlcgEFAWkECl9yYXdBbW91bnQICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BAhfYXNzZXRJZAgJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBAtfYXNzZXRJZFN0cgkA2AQBCQEFdmFsdWUBBQhfYXNzZXRJZAQMaXNRdW90ZUFzc2V0CQAAAgUIX2Fzc2V0SWQJAQpxdW90ZUFzc2V0AAMDAwMDAwMDAwMJAQIhPQIFCl9kaXJlY3Rpb24FCERJUl9MT05HCQECIT0CBQpfZGlyZWN0aW9uBQlESVJfU0hPUlQHBgkAZwIAAAUKX3Jhd0Ftb3VudAYJAQEhAQkBC2luaXRpYWxpemVkAAYJAQEhAQUMaXNRdW90ZUFzc2V0BgkBASEBCQEXaXNTYW1lQXNzZXRPck5vUG9zaXRpb24CBQdfdHJhZGVyBQtfYXNzZXRJZFN0cgYJAQEhAQkBFnJlcXVpcmVNb3JlTWFyZ2luUmF0aW8DCQEEZGl2ZAIFDERFQ0lNQUxfVU5JVAUJX2xldmVyYWdlCQEPaW5pdE1hcmdpblJhdGlvAAYGCQEGcGF1c2VkAAYJAQljbG9zZU9ubHkABgkBDmlzTWFya2V0Q2xvc2VkAAkAAgECI0ludmFsaWQgaW5jcmVhc2VQb3NpdGlvbiBwYXJhbWV0ZXJzBA0kdDA1NzY0NTU3Nzk0CQEYZ2V0Rm9yVHJhZGVyV2l0aEFydGlmYWN0AgUHX3RyYWRlcgkBDWdldEFydGlmYWN0SWQBBQFpBAthZGp1c3RlZEZlZQgFDSR0MDU3NjQ1NTc3OTQCXzEEDGJ1cm5BcnRpZmFjdAgFDSR0MDU3NjQ1NTc3OTQCXzIEB19hbW91bnQJAQRkaXZkAgUKX3Jhd0Ftb3VudAkAZAIJAQRtdWxkAgULYWRqdXN0ZWRGZWUFCV9sZXZlcmFnZQUMREVDSU1BTF9VTklUBBNkaXN0cmlidXRlRmVlQW1vdW50CQBlAgUKX3Jhd0Ftb3VudAUHX2Ftb3VudAQOcmVmZXJyZXJGZWVBbnkJAPwHBAkBD3JlZmVycmFsQWRkcmVzcwACFWFjY2VwdFBheW1lbnRXaXRoTGluawkAzAgCBQdfdHJhZGVyCQDMCAIFCF9yZWZMaW5rBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQpxdW90ZUFzc2V0AAUTZGlzdHJpYnV0ZUZlZUFtb3VudAUDbmlsAwkAAAIFDnJlZmVycmVyRmVlQW55BQ5yZWZlcnJlckZlZUFueQQLcmVmZXJyZXJGZWUEByRtYXRjaDAFDnJlZmVycmVyRmVlQW55AwkAAQIFByRtYXRjaDACA0ludAQBeAUHJG1hdGNoMAUBeAkAAgECE0ludmFsaWQgcmVmZXJyZXJGZWUECWZlZUFtb3VudAkAZQIFE2Rpc3RyaWJ1dGVGZWVBbW91bnQFC3JlZmVycmVyRmVlBA0kdDA1ODI5MDU4NDU4CQELZ2V0UG9zaXRpb24BBQdfdHJhZGVyBA9vbGRQb3NpdGlvblNpemUIBQ0kdDA1ODI5MDU4NDU4Al8xBBFvbGRQb3NpdGlvbk1hcmdpbggFDSR0MDU4MjkwNTg0NTgCXzIEF29sZFBvc2l0aW9uT3Blbk5vdGlvbmFsCAUNJHQwNTgyOTA1ODQ1OAJfMwQUb2xkUG9zaXRpb25Mc3RVcGRDUEYIBQ0kdDA1ODI5MDU4NDU4Al80BBRvbGRQb3NpdGlvblRpbWVzdGFtcAgFDSR0MDU4MjkwNTg0NTgCXzUEDWlzTmV3UG9zaXRpb24JAAACBQ9vbGRQb3NpdGlvblNpemUAAAQPaXNTYW1lRGlyZWN0aW9uAwkAZgIFD29sZFBvc2l0aW9uU2l6ZQAACQAAAgUKX2RpcmVjdGlvbgUIRElSX0xPTkcJAAACBQpfZGlyZWN0aW9uBQlESVJfU0hPUlQEDmV4cGFuZEV4aXN0aW5nAwkBASEBBQ1pc05ld1Bvc2l0aW9uBQ9pc1NhbWVEaXJlY3Rpb24HBAVpc0FkZAkAAAIFCl9kaXJlY3Rpb24FCERJUl9MT05HBA0kdDA1ODc0NzYxODY4AwMFDWlzTmV3UG9zaXRpb24GBQ5leHBhbmRFeGlzdGluZwQMb3Blbk5vdGlvbmFsCQEEbXVsZAIFB19hbW91bnQFCV9sZXZlcmFnZQQNJHQwNTkyNTY1OTQyOQkBCXN3YXBJbnB1dAIFBWlzQWRkBQxvcGVuTm90aW9uYWwEFWFtb3VudEJhc2VBc3NldEJvdWdodAgFDSR0MDU5MjU2NTk0MjkCXzEEFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDA1OTI1NjU5NDI5Al8yBBViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDA1OTI1NjU5NDI5Al8zBBZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCAUNJHQwNTkyNTY1OTQyOQJfNAMDCQECIT0CBRNfbWluQmFzZUFzc2V0QW1vdW50AAAJAGYCBRNfbWluQmFzZUFzc2V0QW1vdW50CQEDYWJzAQUVYW1vdW50QmFzZUFzc2V0Qm91Z2h0BwkAAgEJAKwCAgkArAICCQCsAgICDUxpbWl0IGVycm9yOiAJAKQDAQkBA2FicwEFFWFtb3VudEJhc2VBc3NldEJvdWdodAIDIDwgCQCkAwEFE19taW5CYXNlQXNzZXRBbW91bnQED25ld1Bvc2l0aW9uU2l6ZQkAZAIFD29sZFBvc2l0aW9uU2l6ZQUVYW1vdW50QmFzZUFzc2V0Qm91Z2h0BBp0b3RhbExvbmdPcGVuSW50ZXJlc3RBZnRlcgkAZAIJARBvcGVuSW50ZXJlc3RMb25nAAMJAGYCBQ9uZXdQb3NpdGlvblNpemUAAAUMb3Blbk5vdGlvbmFsAAAEG3RvdGFsU2hvcnRPcGVuSW50ZXJlc3RBZnRlcgkAZAIJARFvcGVuSW50ZXJlc3RTaG9ydAADCQBmAgAABQ9uZXdQb3NpdGlvblNpemUFDG9wZW5Ob3Rpb25hbAAABA0kdDA1OTk3NTYwMjUwCQEwY2FsY1JlbWFpbk1hcmdpbldpdGhGdW5kaW5nUGF5bWVudEFuZFJvbGxvdmVyRmVlBQUPb2xkUG9zaXRpb25TaXplBRFvbGRQb3NpdGlvbk1hcmdpbgUUb2xkUG9zaXRpb25Mc3RVcGRDUEYFFG9sZFBvc2l0aW9uVGltZXN0YW1wBQdfYW1vdW50BAxyZW1haW5NYXJnaW4IBQ0kdDA1OTk3NTYwMjUwAl8xBAJ4MQgFDSR0MDU5OTc1NjAyNTACXzIEAngyCAUNJHQwNTk5NzU2MDI1MAJfMwQLcm9sbG92ZXJGZWUIBQ0kdDA1OTk3NTYwMjUwAl80AwkBASEBCQEZcmVxdWlyZU5vdE92ZXJTcHJlYWRMaW1pdAIFFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIFFWJhc2VBc3NldFJlc2VydmVBZnRlcgkAAgECFU92ZXIgbWF4IHNwcmVhZCBsaW1pdAMJAQEhAQkBHXJlcXVpcmVOb3RPdmVyTWF4T3Blbk5vdGlvbmFsAgUadG90YWxMb25nT3BlbkludGVyZXN0QWZ0ZXIFG3RvdGFsU2hvcnRPcGVuSW50ZXJlc3RBZnRlcgkAAgECFk92ZXIgbWF4IG9wZW4gbm90aW9uYWwJAKAKDgUPbmV3UG9zaXRpb25TaXplBQxyZW1haW5NYXJnaW4JAGQCBRdvbGRQb3NpdGlvbk9wZW5Ob3Rpb25hbAUMb3Blbk5vdGlvbmFsCQEfbGF0ZXN0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgEFD25ld1Bvc2l0aW9uU2l6ZQkBDWxhc3RUaW1lc3RhbXAABRViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIFFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIFFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIJAGQCCQEUb3BlbkludGVyZXN0Tm90aW9uYWwABQxvcGVuTm90aW9uYWwJAGQCCQEVdG90YWxMb25nUG9zaXRpb25TaXplAAMJAGYCBQ9uZXdQb3NpdGlvblNpemUAAAkBA2FicwEFFWFtb3VudEJhc2VBc3NldEJvdWdodAAACQBkAgkBFnRvdGFsU2hvcnRQb3NpdGlvblNpemUAAwkAZgIAAAUPbmV3UG9zaXRpb25TaXplCQEDYWJzAQUVYW1vdW50QmFzZUFzc2V0Qm91Z2h0AAAFGnRvdGFsTG9uZ09wZW5JbnRlcmVzdEFmdGVyBRt0b3RhbFNob3J0T3BlbkludGVyZXN0QWZ0ZXIFC3JvbGxvdmVyRmVlBAxvcGVuTm90aW9uYWwJAQRtdWxkAgUHX2Ftb3VudAUJX2xldmVyYWdlBA0kdDA2MTU2ODYxNjg0CQEjZ2V0UG9zaXRpb25Ob3Rpb25hbEFuZFVucmVhbGl6ZWRQbmwCCQClCAEIBQFpBmNhbGxlcgUPUE5MX09QVElPTl9TUE9UBBNvbGRQb3NpdGlvbk5vdGlvbmFsCAUNJHQwNjE1Njg2MTY4NAJfMQQNdW5yZWFsaXplZFBubAgFDSR0MDYxNTY4NjE2ODQCXzIDCQBmAgUTb2xkUG9zaXRpb25Ob3Rpb25hbAUMb3Blbk5vdGlvbmFsCQACAQIuVXNlIGRlY3JlYXNlUG9zaXRpb24gdG8gZGVjcmVhc2UgcG9zaXRpb24gc2l6ZQkAAgECFENsb3NlIHBvc2l0aW9uIGZpcnN0BA9uZXdQb3NpdGlvblNpemUIBQ0kdDA1ODc0NzYxODY4Al8xBBduZXdQb3NpdGlvblJlbWFpbk1hcmdpbggFDSR0MDU4NzQ3NjE4NjgCXzIEF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsCAUNJHQwNTg3NDc2MTg2OAJfMwQUbmV3UG9zaXRpb25MYXRlc3RDUEYIBQ0kdDA1ODc0NzYxODY4Al80BBRuZXdQb3NpdGlvblRpbWVzdGFtcAgFDSR0MDU4NzQ3NjE4NjgCXzUEFWJhc2VBc3NldFJlc2VydmVBZnRlcggFDSR0MDU4NzQ3NjE4NjgCXzYEFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDA1ODc0NzYxODY4Al83BBZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCAUNJHQwNTg3NDc2MTg2OAJfOAQZb3BlbkludGVyZXN0Tm90aW9uYWxBZnRlcggFDSR0MDU4NzQ3NjE4NjgCXzkEDnRvdGFsTG9uZ0FmdGVyCAUNJHQwNTg3NDc2MTg2OANfMTAED3RvdGFsU2hvcnRBZnRlcggFDSR0MDU4NzQ3NjE4NjgDXzExBBp0b3RhbExvbmdPcGVuSW50ZXJlc3RBZnRlcggFDSR0MDU4NzQ3NjE4NjgDXzEyBBt0b3RhbFNob3J0T3BlbkludGVyZXN0QWZ0ZXIIBQ0kdDA1ODc0NzYxODY4A18xMwQLcm9sbG92ZXJGZWUIBQ0kdDA1ODc0NzYxODY4A18xNAQNJHQwNjE4NzQ2MTk0NQkBDWRpc3RyaWJ1dGVGZWUBCQBkAgUJZmVlQW1vdW50BQtyb2xsb3ZlckZlZQQMZmVlVG9TdGFrZXJzCAUNJHQwNjE4NzQ2MTk0NQJfMQQKZmVlVG9WYXVsdAgFDSR0MDYxODc0NjE5NDUCXzIEBXN0YWtlAwUMaXNRdW90ZUFzc2V0BAVzdGFrZQkA/AcECQEMdmF1bHRBZGRyZXNzAAIJYWRkTG9ja2VkCQDMCAIHBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQpxdW90ZUFzc2V0AAUHX2Ftb3VudAUDbmlsAwkAAAIFBXN0YWtlBQVzdGFrZQUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQNuaWwDCQAAAgUFc3Rha2UFBXN0YWtlBAxkZXBvc2l0VmF1bHQJAPwHBAkBDHZhdWx0QWRkcmVzcwACB2FkZEZyZWUFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBCnF1b3RlQXNzZXQABQpmZWVUb1ZhdWx0BQNuaWwDCQAAAgUMZGVwb3NpdFZhdWx0BQxkZXBvc2l0VmF1bHQECW5vdGlmeUZlZQkA/AcECQEMbWluZXJBZGRyZXNzAAIKbm90aWZ5RmVlcwkAzAgCBQdfdHJhZGVyCQDMCAIFCWZlZUFtb3VudAUDbmlsBQNuaWwDCQAAAgUJbm90aWZ5RmVlBQlub3RpZnlGZWUEDm5vdGlmeU5vdGlvbmFsCQD8BwQJAQxtaW5lckFkZHJlc3MAAg5ub3RpZnlOb3Rpb25hbAkAzAgCBQdfdHJhZGVyCQDMCAIFF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsBQNuaWwFA25pbAMJAAACBQ5ub3RpZnlOb3Rpb25hbAUObm90aWZ5Tm90aW9uYWwJAM4IAgkAzggCCQDOCAIJAM4IAgkAzggCCQDOCAIJAQ51cGRhdGVQb3NpdGlvbgYFB190cmFkZXIFD25ld1Bvc2l0aW9uU2l6ZQUXbmV3UG9zaXRpb25SZW1haW5NYXJnaW4FF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsBRRuZXdQb3NpdGlvbkxhdGVzdENQRgUUbmV3UG9zaXRpb25UaW1lc3RhbXAJAR9pbmNyZW1lbnRQb3NpdGlvblNlcXVlbmNlTnVtYmVyAgUNaXNOZXdQb3NpdGlvbgUHX3RyYWRlcgkBEXVwZGF0ZVBvc2l0aW9uRmVlAwUNaXNOZXdQb3NpdGlvbgUHX3RyYWRlcgULYWRqdXN0ZWRGZWUJAQl1cGRhdGVBbW0IBRZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyBRViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIFFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIFGW9wZW5JbnRlcmVzdE5vdGlvbmFsQWZ0ZXIFDnRvdGFsTG9uZ0FmdGVyBQ90b3RhbFNob3J0QWZ0ZXIFGnRvdGFsTG9uZ09wZW5JbnRlcmVzdEFmdGVyBRt0b3RhbFNob3J0T3BlbkludGVyZXN0QWZ0ZXIJAQt0cmFuc2ZlckZlZQEFDGZlZVRvU3Rha2VycwkBDXVwZGF0ZUJhbGFuY2UBCQBkAgkBCGNiYWxhbmNlAAUHX2Ftb3VudAkBDmRvQnVybkFydGlmYWN0AgUMYnVybkFydGlmYWN0BQFpCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBCWFkZE1hcmdpbgAEBHN5bmMJAPwHBAUEdGhpcwIZc3luY1Rlcm1pbmFsUHJpY2VUb09yYWNsZQUDbmlsBQNuaWwDCQAAAgUEc3luYwUEc3luYwQHX3RyYWRlcgkApQgBCAUBaQZjYWxsZXIEB19hbW91bnQICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BAhfYXNzZXRJZAgJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBAtfYXNzZXRJZFN0cgkA2AQBCQEFdmFsdWUBBQhfYXNzZXRJZAQMaXNRdW90ZUFzc2V0CQAAAgUIX2Fzc2V0SWQJAQpxdW90ZUFzc2V0AAMDAwMDAwMJAQEhAQUMaXNRdW90ZUFzc2V0BgkBASEBCQETcmVxdWlyZU9wZW5Qb3NpdGlvbgEJAKUIAQgFAWkGY2FsbGVyBgkBASEBCQELaXNTYW1lQXNzZXQCBQdfdHJhZGVyBQtfYXNzZXRJZFN0cgYJAQEhAQkBC2luaXRpYWxpemVkAAYJAQZwYXVzZWQABgkBCWNsb3NlT25seQAGCQEOaXNNYXJrZXRDbG9zZWQACQACAQIcSW52YWxpZCBhZGRNYXJnaW4gcGFyYW1ldGVycwQNJHQwNjM4NzE2NDAzOQkBC2dldFBvc2l0aW9uAQUHX3RyYWRlcgQPb2xkUG9zaXRpb25TaXplCAUNJHQwNjM4NzE2NDAzOQJfMQQRb2xkUG9zaXRpb25NYXJnaW4IBQ0kdDA2Mzg3MTY0MDM5Al8yBBdvbGRQb3NpdGlvbk9wZW5Ob3Rpb25hbAgFDSR0MDYzODcxNjQwMzkCXzMEFG9sZFBvc2l0aW9uTHN0VXBkQ1BGCAUNJHQwNjM4NzE2NDAzOQJfNAQUb2xkUG9zaXRpb25UaW1lc3RhbXAIBQ0kdDA2Mzg3MTY0MDM5Al81BAVzdGFrZQkA/AcECQEMdmF1bHRBZGRyZXNzAAIJYWRkTG9ja2VkCQDMCAIHBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQpxdW90ZUFzc2V0AAUHX2Ftb3VudAUDbmlsAwkAAAIFBXN0YWtlBQVzdGFrZQQLcm9sbG92ZXJGZWUJAQ9jYWxjUm9sbG92ZXJGZWUCBRFvbGRQb3NpdGlvbk1hcmdpbgUUb2xkUG9zaXRpb25UaW1lc3RhbXAEFmRvVHJhbnNmZXJGZWVUb1N0YWtlcnMDCQBmAgULcm9sbG92ZXJGZWUAAAQNJHQwNjQzMjk2NDM4OAkBDWRpc3RyaWJ1dGVGZWUBBQtyb2xsb3ZlckZlZQQMZmVlVG9TdGFrZXJzCAUNJHQwNjQzMjk2NDM4OAJfMQQKZmVlVG9WYXVsdAgFDSR0MDY0MzI5NjQzODgCXzIEB3Vuc3Rha2UJAPwHBAkBDHZhdWx0QWRkcmVzcwACDndpdGhkcmF3TG9ja2VkCQDMCAIFDGZlZVRvU3Rha2VycwUDbmlsBQNuaWwDCQAAAgUHdW5zdGFrZQUHdW5zdGFrZQQLbG9ja0JhZERlYnQJAPwHBAkBDHZhdWx0QWRkcmVzcwACFWV4Y2hhbmdlRnJlZUFuZExvY2tlZAkAzAgCCQEBLQEFCmZlZVRvVmF1bHQFA25pbAUDbmlsAwkAAAIFC2xvY2tCYWREZWJ0BQtsb2NrQmFkRGVidAkBC3RyYW5zZmVyRmVlAQUMZmVlVG9TdGFrZXJzCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQNuaWwDCQAAAgUWZG9UcmFuc2ZlckZlZVRvU3Rha2VycwUWZG9UcmFuc2ZlckZlZVRvU3Rha2VycwkAzggCCQDOCAIJAQ51cGRhdGVQb3NpdGlvbgYFB190cmFkZXIFD29sZFBvc2l0aW9uU2l6ZQkAZAIJAGUCBRFvbGRQb3NpdGlvbk1hcmdpbgULcm9sbG92ZXJGZWUFB19hbW91bnQFF29sZFBvc2l0aW9uT3Blbk5vdGlvbmFsBRRvbGRQb3NpdGlvbkxzdFVwZENQRgkBDWxhc3RUaW1lc3RhbXAACQENdXBkYXRlQmFsYW5jZQEJAGUCCQBkAgkBCGNiYWxhbmNlAAUHX2Ftb3VudAULcm9sbG92ZXJGZWUFFmRvVHJhbnNmZXJGZWVUb1N0YWtlcnMJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEMcmVtb3ZlTWFyZ2luAQdfYW1vdW50BARzeW5jCQD8BwQFBHRoaXMCGXN5bmNUZXJtaW5hbFByaWNlVG9PcmFjbGUFA25pbAUDbmlsAwkAAAIFBHN5bmMFBHN5bmMEB190cmFkZXIJAKUIAQgFAWkGY2FsbGVyAwMDAwMJAGcCAAAFB19hbW91bnQGCQEBIQEJARNyZXF1aXJlT3BlblBvc2l0aW9uAQUHX3RyYWRlcgYJAQEhAQkBC2luaXRpYWxpemVkAAYJAQZwYXVzZWQABgkBDmlzTWFya2V0Q2xvc2VkAAkAAgECH0ludmFsaWQgcmVtb3ZlTWFyZ2luIHBhcmFtZXRlcnMEDSR0MDY1NDMxNjU1OTkJAQtnZXRQb3NpdGlvbgEFB190cmFkZXIED29sZFBvc2l0aW9uU2l6ZQgFDSR0MDY1NDMxNjU1OTkCXzEEEW9sZFBvc2l0aW9uTWFyZ2luCAUNJHQwNjU0MzE2NTU5OQJfMgQXb2xkUG9zaXRpb25PcGVuTm90aW9uYWwIBQ0kdDA2NTQzMTY1NTk5Al8zBBRvbGRQb3NpdGlvbkxzdFVwZENQRggFDSR0MDY1NDMxNjU1OTkCXzQEFG9sZFBvc2l0aW9uVGltZXN0YW1wCAUNJHQwNjU0MzE2NTU5OQJfNQQNJHQwNjU2MDU2NTg1NAkBMGNhbGNSZW1haW5NYXJnaW5XaXRoRnVuZGluZ1BheW1lbnRBbmRSb2xsb3ZlckZlZQUFD29sZFBvc2l0aW9uU2l6ZQURb2xkUG9zaXRpb25NYXJnaW4FFG9sZFBvc2l0aW9uTHN0VXBkQ1BGBRRvbGRQb3NpdGlvblRpbWVzdGFtcAkBAS0BBQdfYW1vdW50BAxyZW1haW5NYXJnaW4IBQ0kdDA2NTYwNTY1ODU0Al8xBAdiYWREZWJ0CAUNJHQwNjU2MDU2NTg1NAJfMgQOZnVuZGluZ1BheW1lbnQIBQ0kdDA2NTYwNTY1ODU0Al8zBAtyb2xsb3ZlckZlZQgFDSR0MDY1NjA1NjU4NTQCXzQDCQECIT0CBQdiYWREZWJ0AAAJAAIBAh1JbnZhbGlkIHJlbW92ZWQgbWFyZ2luIGFtb3VudAQLbWFyZ2luUmF0aW8JAQ9jYWxjTWFyZ2luUmF0aW8DBQxyZW1haW5NYXJnaW4FB2JhZERlYnQFF29sZFBvc2l0aW9uT3Blbk5vdGlvbmFsAwkBASEBCQEWcmVxdWlyZU1vcmVNYXJnaW5SYXRpbwMFC21hcmdpblJhdGlvCQEPaW5pdE1hcmdpblJhdGlvAAYJAAIBCQCsAgIJAKwCAgkArAICAhlUb28gbXVjaCBtYXJnaW4gcmVtb3ZlZDogCQCkAwEFC21hcmdpblJhdGlvAgMgPCAJAKQDAQkBD2luaXRNYXJnaW5SYXRpbwAEDSR0MDY2MjQwNjYyOTkJAQ1kaXN0cmlidXRlRmVlAQULcm9sbG92ZXJGZWUEDGZlZVRvU3Rha2VycwgFDSR0MDY2MjQwNjYyOTkCXzEECmZlZVRvVmF1bHQIBQ0kdDA2NjI0MDY2Mjk5Al8yBBZkb1RyYW5zZmVyRmVlVG9TdGFrZXJzAwkAZgIFC3JvbGxvdmVyRmVlAAAEC2xvY2tCYWREZWJ0CQD8BwQJAQx2YXVsdEFkZHJlc3MAAhVleGNoYW5nZUZyZWVBbmRMb2NrZWQJAMwIAgkBAS0BBQpmZWVUb1ZhdWx0BQNuaWwFA25pbAMJAAACBQtsb2NrQmFkRGVidAULbG9ja0JhZERlYnQJAQt0cmFuc2ZlckZlZQEFDGZlZVRvU3Rha2VycwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUDbmlsAwkAAAIFFmRvVHJhbnNmZXJGZWVUb1N0YWtlcnMFFmRvVHJhbnNmZXJGZWVUb1N0YWtlcnMEB3Vuc3Rha2UJAPwHBAkBDHZhdWx0QWRkcmVzcwACDndpdGhkcmF3TG9ja2VkCQDMCAIJAGQCBQdfYW1vdW50BQxmZWVUb1N0YWtlcnMFA25pbAUDbmlsAwkAAAIFB3Vuc3Rha2UFB3Vuc3Rha2UJAM4IAgkAzggCCQDOCAIJAQ51cGRhdGVQb3NpdGlvbgYFB190cmFkZXIFD29sZFBvc2l0aW9uU2l6ZQUMcmVtYWluTWFyZ2luBRdvbGRQb3NpdGlvbk9wZW5Ob3Rpb25hbAkBH2xhdGVzdEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24BBQ9vbGRQb3NpdGlvblNpemUJAQ1sYXN0VGltZXN0YW1wAAkBCHdpdGhkcmF3AggFAWkGY2FsbGVyBQdfYW1vdW50CQENdXBkYXRlQmFsYW5jZQEJAGUCCQBlAgkBCGNiYWxhbmNlAAUHX2Ftb3VudAULcm9sbG92ZXJGZWUFFmRvVHJhbnNmZXJGZWVUb1N0YWtlcnMJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQENY2xvc2VQb3NpdGlvbgMFX3NpemUUX21pblF1b3RlQXNzZXRBbW91bnQMX2FkZFRvTWFyZ2luBARzeW5jCQD8BwQFBHRoaXMCGXN5bmNUZXJtaW5hbFByaWNlVG9PcmFjbGUFA25pbAUDbmlsAwkAAAIFBHN5bmMFBHN5bmMEB190cmFkZXIJAQ9nZXRBY3R1YWxDYWxsZXIBBQFpBA5fdHJhZGVyQWRkcmVzcwkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEFB190cmFkZXICDkludmFsaWQgY2FsbGVyBAtwb3NpdGlvbkZlZQkBDmdldFBvc2l0aW9uRmVlAQUHX3RyYWRlcgMDAwMDAwkBASEBCQETcmVxdWlyZU9wZW5Qb3NpdGlvbgEFB190cmFkZXIGCQEBIQEJAQtpbml0aWFsaXplZAAGCQEGcGF1c2VkAAYJAGcCAAAFBV9zaXplBgkAZgIAAAUUX21pblF1b3RlQXNzZXRBbW91bnQGCQEOaXNNYXJrZXRDbG9zZWQACQACAQIgSW52YWxpZCBjbG9zZVBvc2l0aW9uIHBhcmFtZXRlcnMEDSR0MDY3ODMxNjc5NzEJAQtnZXRQb3NpdGlvbgEFB190cmFkZXIED29sZFBvc2l0aW9uU2l6ZQgFDSR0MDY3ODMxNjc5NzECXzEEEW9sZFBvc2l0aW9uTWFyZ2luCAUNJHQwNjc4MzE2Nzk3MQJfMgQXb2xkUG9zaXRpb25PcGVuTm90aW9uYWwIBQ0kdDA2NzgzMTY3OTcxAl8zBBRvbGRQb3NpdGlvbkxzdFVwZENQRggFDSR0MDY3ODMxNjc5NzECXzQEDSR0MDY3OTc3Njg1NTAJARVpbnRlcm5hbENsb3NlUG9zaXRpb24GBQdfdHJhZGVyBQVfc2l6ZQULcG9zaXRpb25GZWUFFF9taW5RdW90ZUFzc2V0QW1vdW50BQxfYWRkVG9NYXJnaW4GBA9uZXdQb3NpdGlvblNpemUIBQ0kdDA2Nzk3NzY4NTUwAl8xBBFuZXdQb3NpdGlvbk1hcmdpbggFDSR0MDY3OTc3Njg1NTACXzIEF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsCAUNJHQwNjc5Nzc2ODU1MAJfMwQUbmV3UG9zaXRpb25Mc3RVcGRDUEYIBQ0kdDA2Nzk3NzY4NTUwAl80BA9wb3NpdGlvbkJhZERlYnQIBQ0kdDA2Nzk3NzY4NTUwAl81BAtyZWFsaXplZFBubAgFDSR0MDY3OTc3Njg1NTACXzYEDm1hcmdpblRvVHJhZGVyCAUNJHQwNjc5Nzc2ODU1MAJfNwQWcXVvdGVBc3NldFJlc2VydmVBZnRlcggFDSR0MDY3OTc3Njg1NTACXzgEFWJhc2VBc3NldFJlc2VydmVBZnRlcggFDSR0MDY3OTc3Njg1NTACXzkEFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIIBQ0kdDA2Nzk3NzY4NTUwA18xMAQZb3BlbkludGVyZXN0Tm90aW9uYWxBZnRlcggFDSR0MDY3OTc3Njg1NTADXzExBA50b3RhbExvbmdBZnRlcggFDSR0MDY3OTc3Njg1NTADXzEyBA90b3RhbFNob3J0QWZ0ZXIIBQ0kdDA2Nzk3NzY4NTUwA18xMwQadG90YWxMb25nT3BlbkludGVyZXN0QWZ0ZXIIBQ0kdDA2Nzk3NzY4NTUwA18xNAQbdG90YWxTaG9ydE9wZW5JbnRlcmVzdEFmdGVyCAUNJHQwNjc5Nzc2ODU1MANfMTUEC3JlYWxpemVkRmVlCAUNJHQwNjc5Nzc2ODU1MANfMTYDCQBmAgUPcG9zaXRpb25CYWREZWJ0AAAJAAIBAipJbnZhbGlkIGNsb3NlUG9zaXRpb24gcGFyYW1ldGVyczogYmFkIGRlYnQEDmlzUGFydGlhbENsb3NlCQECIT0CBQ9uZXdQb3NpdGlvblNpemUAAAQOd2l0aGRyYXdBbW91bnQJAGQCBQ5tYXJnaW5Ub1RyYWRlcgULcmVhbGl6ZWRGZWUECmFtbUJhbGFuY2UJAGUCCQEIY2JhbGFuY2UABQ53aXRoZHJhd0Ftb3VudAQNYW1tTmV3QmFsYW5jZQMJAGYCAAAFCmFtbUJhbGFuY2UAAAUKYW1tQmFsYW5jZQQHdW5zdGFrZQkA/AcECQEMdmF1bHRBZGRyZXNzAAIOd2l0aGRyYXdMb2NrZWQJAMwIAgUOd2l0aGRyYXdBbW91bnQFA25pbAUDbmlsAwkAAAIFB3Vuc3Rha2UFB3Vuc3Rha2UEDSR0MDY5MDYwNjkxMTkJAQ1kaXN0cmlidXRlRmVlAQULcmVhbGl6ZWRGZWUEDGZlZVRvU3Rha2VycwgFDSR0MDY5MDYwNjkxMTkCXzEECmZlZVRvVmF1bHQIBQ0kdDA2OTA2MDY5MTE5Al8yBAxkZXBvc2l0VmF1bHQJAPwHBAkBDHZhdWx0QWRkcmVzcwACB2FkZEZyZWUFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBCnF1b3RlQXNzZXQABQpmZWVUb1ZhdWx0BQNuaWwDCQAAAgUMZGVwb3NpdFZhdWx0BQxkZXBvc2l0VmF1bHQECW5vdGlmeUZlZQkA/AcECQEMbWluZXJBZGRyZXNzAAIKbm90aWZ5RmVlcwkAzAgCBQdfdHJhZGVyCQDMCAIFC3JlYWxpemVkRmVlBQNuaWwFA25pbAMJAAACBQlub3RpZnlGZWUFCW5vdGlmeUZlZQQObm90aWZ5Tm90aW9uYWwJAPwHBAkBDG1pbmVyQWRkcmVzcwACDm5vdGlmeU5vdGlvbmFsCQDMCAIFB190cmFkZXIJAMwIAgUXbmV3UG9zaXRpb25PcGVuTm90aW9uYWwFA25pbAUDbmlsAwkAAAIFDm5vdGlmeU5vdGlvbmFsBQ5ub3RpZnlOb3Rpb25hbAkAzggCCQDOCAIJAM4IAgkAzggCAwUOaXNQYXJ0aWFsQ2xvc2UJAQ51cGRhdGVQb3NpdGlvbgYFB190cmFkZXIFD25ld1Bvc2l0aW9uU2l6ZQURbmV3UG9zaXRpb25NYXJnaW4FF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsBRRuZXdQb3NpdGlvbkxzdFVwZENQRgkBDWxhc3RUaW1lc3RhbXAACQEOZGVsZXRlUG9zaXRpb24BBQdfdHJhZGVyCQEJdXBkYXRlQW1tCAUWcXVvdGVBc3NldFJlc2VydmVBZnRlcgUVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyBRZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyBRlvcGVuSW50ZXJlc3ROb3Rpb25hbEFmdGVyBQ50b3RhbExvbmdBZnRlcgUPdG90YWxTaG9ydEFmdGVyBRp0b3RhbExvbmdPcGVuSW50ZXJlc3RBZnRlcgUbdG90YWxTaG9ydE9wZW5JbnRlcmVzdEFmdGVyAwkAZgIFDm1hcmdpblRvVHJhZGVyAAAJAQh3aXRoZHJhdwIFDl90cmFkZXJBZGRyZXNzBQ5tYXJnaW5Ub1RyYWRlcgUDbmlsCQENdXBkYXRlQmFsYW5jZQEFDWFtbU5ld0JhbGFuY2UJAQt0cmFuc2ZlckZlZQEFDGZlZVRvU3Rha2VycwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQlsaXF1aWRhdGUBB190cmFkZXIEBHN5bmMJAPwHBAUEdGhpcwIZc3luY1Rlcm1pbmFsUHJpY2VUb09yYWNsZQUDbmlsBQNuaWwDCQAAAgUEc3luYwUEc3luYwQPc3BvdE1hcmdpblJhdGlvCQEWZ2V0TWFyZ2luUmF0aW9CeU9wdGlvbgIFB190cmFkZXIFD1BOTF9PUFRJT05fU1BPVAQWbGlxdWlkYXRpb25NYXJnaW5SYXRpbwMJARZpc092ZXJGbHVjdHVhdGlvbkxpbWl0AAQRb3JhY2xlTWFyZ2luUmF0aW8JARZnZXRNYXJnaW5SYXRpb0J5T3B0aW9uAgUHX3RyYWRlcgURUE5MX09QVElPTl9PUkFDTEUJAQR2bWF4AgUPc3BvdE1hcmdpblJhdGlvBRFvcmFjbGVNYXJnaW5SYXRpbwUPc3BvdE1hcmdpblJhdGlvAwMDAwMJAQEhAQkBFnJlcXVpcmVNb3JlTWFyZ2luUmF0aW8DBRZsaXF1aWRhdGlvbk1hcmdpblJhdGlvCQEWbWFpbnRlbmFuY2VNYXJnaW5SYXRpbwAHBgkBASEBCQETcmVxdWlyZU9wZW5Qb3NpdGlvbgEFB190cmFkZXIGCQEBIQEJAQtpbml0aWFsaXplZAAGCQEGcGF1c2VkAAYJAQ5pc01hcmtldENsb3NlZAAJAAIBAhNVbmFibGUgdG8gbGlxdWlkYXRlBBRpc1BhcnRpYWxMaXF1aWRhdGlvbgMDCQBmAgUPc3BvdE1hcmdpblJhdGlvCQETbGlxdWlkYXRpb25GZWVSYXRpbwAGCQBmAgkBF3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvAAAABgkAZgIFDERFQ0lNQUxfVU5JVAkBF3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvAAQPb2xkUG9zaXRpb25TaXplCAkBC2dldFBvc2l0aW9uAQUHX3RyYWRlcgJfMQQPcG9zaXRpb25TaXplQWJzCQEDYWJzAQUPb2xkUG9zaXRpb25TaXplBA0kdDA3MTQzMjcxNzU1AwUUaXNQYXJ0aWFsTGlxdWlkYXRpb24ED2xpcXVpZGF0aW9uU2l6ZQkBG2dldFBhcnRpYWxMaXF1aWRhdGlvbkFtb3VudAIFB190cmFkZXIFD29sZFBvc2l0aW9uU2l6ZQQQbGlxdWlkYXRpb25SYXRpbwkBBGRpdmQCCQEDYWJzAQUPbGlxdWlkYXRpb25TaXplBQ9wb3NpdGlvblNpemVBYnMJAJQKAgUQbGlxdWlkYXRpb25SYXRpbwkBA2FicwEFD2xpcXVpZGF0aW9uU2l6ZQkAlAoCAAAFD3Bvc2l0aW9uU2l6ZUFicwQQbGlxdWlkYXRpb25SYXRpbwgFDSR0MDcxNDMyNzE3NTUCXzEED2xpcXVpZGF0aW9uU2l6ZQgFDSR0MDcxNDMyNzE3NTUCXzIEDSR0MDcxNzYxNzIzODcJARVpbnRlcm5hbENsb3NlUG9zaXRpb24GBQdfdHJhZGVyAwUUaXNQYXJ0aWFsTGlxdWlkYXRpb24FD2xpcXVpZGF0aW9uU2l6ZQUPcG9zaXRpb25TaXplQWJzCQETbGlxdWlkYXRpb25GZWVSYXRpbwAAAAYHBA9uZXdQb3NpdGlvblNpemUIBQ0kdDA3MTc2MTcyMzg3Al8xBBFuZXdQb3NpdGlvbk1hcmdpbggFDSR0MDcxNzYxNzIzODcCXzIEF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsCAUNJHQwNzE3NjE3MjM4NwJfMwQUbmV3UG9zaXRpb25Mc3RVcGRDUEYIBQ0kdDA3MTc2MTcyMzg3Al80BA9wb3NpdGlvbkJhZERlYnQIBQ0kdDA3MTc2MTcyMzg3Al81BAtyZWFsaXplZFBubAgFDSR0MDcxNzYxNzIzODcCXzYEDm1hcmdpblRvVHJhZGVyCAUNJHQwNzE3NjE3MjM4NwJfNwQWcXVvdGVBc3NldFJlc2VydmVBZnRlcggFDSR0MDcxNzYxNzIzODcCXzgEFWJhc2VBc3NldFJlc2VydmVBZnRlcggFDSR0MDcxNzYxNzIzODcCXzkEFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIIBQ0kdDA3MTc2MTcyMzg3A18xMAQZb3BlbkludGVyZXN0Tm90aW9uYWxBZnRlcggFDSR0MDcxNzYxNzIzODcDXzExBA50b3RhbExvbmdBZnRlcggFDSR0MDcxNzYxNzIzODcDXzEyBA90b3RhbFNob3J0QWZ0ZXIIBQ0kdDA3MTc2MTcyMzg3A18xMwQadG90YWxMb25nT3BlbkludGVyZXN0QWZ0ZXIIBQ0kdDA3MTc2MTcyMzg3A18xNAQbdG90YWxTaG9ydE9wZW5JbnRlcmVzdEFmdGVyCAUNJHQwNzE3NjE3MjM4NwNfMTUEEmxpcXVpZGF0aW9uUGVuYWx0eQgFDSR0MDcxNzYxNzIzODcDXzE2BA9mZWVUb0xpcXVpZGF0b3IJAGkCBRJsaXF1aWRhdGlvblBlbmFsdHkAAgQKZmVlVG9WYXVsdAkAZQIFEmxpcXVpZGF0aW9uUGVuYWx0eQUPZmVlVG9MaXF1aWRhdG9yBAphbW1CYWxhbmNlCQBlAgkBCGNiYWxhbmNlAAUSbGlxdWlkYXRpb25QZW5hbHR5BA1uZXdBbW1CYWxhbmNlAwkAZgIAAAUKYW1tQmFsYW5jZQAABQphbW1CYWxhbmNlBAtsb2NrQmFkRGVidAMJAGYCBQ9wb3NpdGlvbkJhZERlYnQAAAQLbG9ja0JhZERlYnQJAPwHBAkBDHZhdWx0QWRkcmVzcwACFWV4Y2hhbmdlRnJlZUFuZExvY2tlZAkAzAgCBQ9wb3NpdGlvbkJhZERlYnQFA25pbAUDbmlsAwkAAAIFC2xvY2tCYWREZWJ0BQtsb2NrQmFkRGVidAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQNuaWwDCQAAAgULbG9ja0JhZERlYnQFC2xvY2tCYWREZWJ0BAd1bnN0YWtlCQD8BwQJAQx2YXVsdEFkZHJlc3MAAg53aXRoZHJhd0xvY2tlZAkAzAgCBRJsaXF1aWRhdGlvblBlbmFsdHkFA25pbAUDbmlsAwkAAAIFB3Vuc3Rha2UFB3Vuc3Rha2UEEGRlcG9zaXRJbnN1cmFuY2UJAPwHBAkBDHZhdWx0QWRkcmVzcwACB2FkZEZyZWUFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBCnF1b3RlQXNzZXQABQpmZWVUb1ZhdWx0BQNuaWwDCQAAAgUQZGVwb3NpdEluc3VyYW5jZQUQZGVwb3NpdEluc3VyYW5jZQQObm90aWZ5Tm90aW9uYWwJAPwHBAkBDG1pbmVyQWRkcmVzcwACDm5vdGlmeU5vdGlvbmFsCQDMCAIFB190cmFkZXIJAMwIAgUXbmV3UG9zaXRpb25PcGVuTm90aW9uYWwFA25pbAUDbmlsAwkAAAIFDm5vdGlmeU5vdGlvbmFsBQ5ub3RpZnlOb3Rpb25hbAkAzggCCQDOCAIJAM4IAgMFFGlzUGFydGlhbExpcXVpZGF0aW9uCQEOdXBkYXRlUG9zaXRpb24GBQdfdHJhZGVyBQ9uZXdQb3NpdGlvblNpemUFEW5ld1Bvc2l0aW9uTWFyZ2luBRduZXdQb3NpdGlvbk9wZW5Ob3Rpb25hbAUUbmV3UG9zaXRpb25Mc3RVcGRDUEYJAQ1sYXN0VGltZXN0YW1wAAkBDmRlbGV0ZVBvc2l0aW9uAQUHX3RyYWRlcgkBCXVwZGF0ZUFtbQgFFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIFFWJhc2VBc3NldFJlc2VydmVBZnRlcgUWdG90YWxQb3NpdGlvblNpemVBZnRlcgUZb3BlbkludGVyZXN0Tm90aW9uYWxBZnRlcgUOdG90YWxMb25nQWZ0ZXIFD3RvdGFsU2hvcnRBZnRlcgUadG90YWxMb25nT3BlbkludGVyZXN0QWZ0ZXIFG3RvdGFsU2hvcnRPcGVuSW50ZXJlc3RBZnRlcgkBCHdpdGhkcmF3AggFAWkGY2FsbGVyBQ9mZWVUb0xpcXVpZGF0b3IJAQ11cGRhdGVCYWxhbmNlAQUNbmV3QW1tQmFsYW5jZQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQpwYXlGdW5kaW5nAAQEc3luYwkA/AcEBQR0aGlzAhlzeW5jVGVybWluYWxQcmljZVRvT3JhY2xlBQNuaWwFA25pbAMJAAACBQRzeW5jBQRzeW5jBBVmdW5kaW5nQmxvY2tUaW1lc3RhbXAJARluZXh0RnVuZGluZ0Jsb2NrVGltZXN0YW1wAAMDAwkAZgIFFWZ1bmRpbmdCbG9ja1RpbWVzdGFtcAkBDWxhc3RUaW1lc3RhbXAABgkBASEBCQELaW5pdGlhbGl6ZWQABgkBBnBhdXNlZAAJAAIBCQCsAgIJAKwCAgkArAICAiFJbnZhbGlkIGZ1bmRpbmcgYmxvY2sgdGltZXN0YW1wOiAJAKQDAQkBDWxhc3RUaW1lc3RhbXAAAgMgPCAJAKQDAQUVZnVuZGluZ0Jsb2NrVGltZXN0YW1wBA91bmRlcmx5aW5nUHJpY2UJAQ5nZXRPcmFjbGVQcmljZQAEDSR0MDc0MzUzNzQ0MTUJAQpnZXRGdW5kaW5nAAQUc2hvcnRQcmVtaXVtRnJhY3Rpb24IBQ0kdDA3NDM1Mzc0NDE1Al8xBBNsb25nUHJlbWl1bUZyYWN0aW9uCAUNJHQwNzQzNTM3NDQxNQJfMgkBDXVwZGF0ZUZ1bmRpbmcFCQBkAgUVZnVuZGluZ0Jsb2NrVGltZXN0YW1wCQEUZnVuZGluZ1BlcmlvZFNlY29uZHMACQBkAgkBI2xhdGVzdExvbmdDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAAUTbG9uZ1ByZW1pdW1GcmFjdGlvbgkAZAIJASRsYXRlc3RTaG9ydEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24ABRRzaG9ydFByZW1pdW1GcmFjdGlvbgkBBGRpdmQCBRNsb25nUHJlbWl1bUZyYWN0aW9uBQ91bmRlcmx5aW5nUHJpY2UJAQRkaXZkAgUUc2hvcnRQcmVtaXVtRnJhY3Rpb24FD3VuZGVybHlpbmdQcmljZQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARlzeW5jVGVybWluYWxQcmljZVRvT3JhY2xlAAQHX3F0QXN0UgkBBnF0QXN0UgAEB19ic0FzdFIJAQZic0FzdFIABA0kdDA3NDg0Nzc0OTgyCQEUZ2V0U3luY1Rlcm1pbmFsUHJpY2UDCQEOZ2V0T3JhY2xlUHJpY2UABQdfcXRBc3RSBQdfYnNBc3RSBBNuZXdRdW90ZUFzc2V0V2VpZ2h0CAUNJHQwNzQ4NDc3NDk4MgJfMQQSbmV3QmFzZUFzc2V0V2VpZ2h0CAUNJHQwNzQ4NDc3NDk4MgJfMgQNbWFyZ2luVG9WYXVsdAgFDSR0MDc0ODQ3NzQ5ODICXzMEDWRvRXhjaGFuZ2VQbkwDCQECIT0CBQ1tYXJnaW5Ub1ZhdWx0AAAEDWRvRXhjaGFuZ2VQbkwJAPwHBAkBDHZhdWx0QWRkcmVzcwACFWV4Y2hhbmdlRnJlZUFuZExvY2tlZAkAzAgCBQ1tYXJnaW5Ub1ZhdWx0BQNuaWwFA25pbAMJAAACBQ1kb0V4Y2hhbmdlUG5MBQ1kb0V4Y2hhbmdlUG5MBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FA25pbAMJAAACBQ1kb0V4Y2hhbmdlUG5MBQ1kb0V4Y2hhbmdlUG5MCQDOCAIJARB1cGRhdGVBbW1XZWlnaHRzAgUTbmV3UXVvdGVBc3NldFdlaWdodAUSbmV3QmFzZUFzc2V0V2VpZ2h0CQEKYXBwZW5kVHdhcAEJAQRkaXZkAgkBBG11bGQCBQdfcXRBc3RSBRNuZXdRdW90ZUFzc2V0V2VpZ2h0CQEEbXVsZAIFB19ic0FzdFIFEm5ld0Jhc2VBc3NldFdlaWdodAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpASd2aWV3X2NhbGNSZW1haW5NYXJnaW5XaXRoRnVuZGluZ1BheW1lbnQBB190cmFkZXIEBHN5bmMJAPwHBAUEdGhpcwIZc3luY1Rlcm1pbmFsUHJpY2VUb09yYWNsZQUDbmlsBQNuaWwDCQAAAgUEc3luYwUEc3luYwQNJHQwNzU1NTE3NTY3NQkBC2dldFBvc2l0aW9uAQUHX3RyYWRlcgQMcG9zaXRpb25TaXplCAUNJHQwNzU1NTE3NTY3NQJfMQQOcG9zaXRpb25NYXJnaW4IBQ0kdDA3NTU1MTc1Njc1Al8yBANwb24IBQ0kdDA3NTU1MTc1Njc1Al8zBBFwb3NpdGlvbkxzdFVwZENQRggFDSR0MDc1NTUxNzU2NzUCXzQEEXBvc2l0aW9uVGltZXN0YW1wCAUNJHQwNzU1NTE3NTY3NQJfNQQNJHQwNzU2Nzg3NTc3OQkBI2dldFBvc2l0aW9uTm90aW9uYWxBbmRVbnJlYWxpemVkUG5sAgUHX3RyYWRlcgUPUE5MX09QVElPTl9TUE9UBBBwb3NpdGlvbk5vdGlvbmFsCAUNJHQwNzU2Nzg3NTc3OQJfMQQNdW5yZWFsaXplZFBubAgFDSR0MDc1Njc4NzU3NzkCXzIEDSR0MDc1NzgyNzYwMDYJATBjYWxjUmVtYWluTWFyZ2luV2l0aEZ1bmRpbmdQYXltZW50QW5kUm9sbG92ZXJGZWUFBQxwb3NpdGlvblNpemUFDnBvc2l0aW9uTWFyZ2luBRFwb3NpdGlvbkxzdFVwZENQRgURcG9zaXRpb25UaW1lc3RhbXAFDXVucmVhbGl6ZWRQbmwEDHJlbWFpbk1hcmdpbggFDSR0MDc1NzgyNzYwMDYCXzEEB2JhZERlYnQIBQ0kdDA3NTc4Mjc2MDA2Al8yBA5mdW5kaW5nUGF5bWVudAgFDSR0MDc1NzgyNzYwMDYCXzMEC3JvbGxvdmVyRmVlCAUNJHQwNzU3ODI3NjAwNgJfNAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAQFzAQUMcmVtYWluTWFyZ2luCQEBcwEFDmZ1bmRpbmdQYXltZW50CQEBcwEJAQ5nZXRNYXJnaW5SYXRpbwEFB190cmFkZXIJAQFzAQUNdW5yZWFsaXplZFBubAkBAXMBBQdiYWREZWJ0CQEBcwEFEHBvc2l0aW9uTm90aW9uYWwJAQFzAQULcm9sbG92ZXJGZWUJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEVdmlld19nZXRQZWdBZGp1c3RDb3N0AQZfcHJpY2UEB19xdEFzdFIJAQZxdEFzdFIABAdfYnNBc3RSCQEGYnNBc3RSAAQGcmVzdWx0CQEUZ2V0U3luY1Rlcm1pbmFsUHJpY2UDBQZfcHJpY2UFB19xdEFzdFIFB19ic0FzdFIJAAIBCQCkAwEIBQZyZXN1bHQCXzMBaQEYdmlld19nZXRUZXJtaW5hbEFtbVByaWNlAAQNJHQwNzY0NDI3NjUyMwkBE2dldFRlcm1pbmFsQW1tU3RhdGUABBl0ZXJtaW5hbFF1b3RlQXNzZXRSZXNlcnZlCAUNJHQwNzY0NDI3NjUyMwJfMQQYdGVybWluYWxCYXNlQXNzZXRSZXNlcnZlCAUNJHQwNzY0NDI3NjUyMwJfMgQFcHJpY2UJAQRkaXZkAgkBBG11bGQCBRl0ZXJtaW5hbFF1b3RlQXNzZXRSZXNlcnZlCQEGcXRBc3RXAAkBBG11bGQCBRh0ZXJtaW5hbEJhc2VBc3NldFJlc2VydmUJAQZic0FzdFcACQACAQkApAMBBQVwcmljZQFpAQ92aWV3X2dldEZ1bmRpbmcABA91bmRlcmx5aW5nUHJpY2UJAQ5nZXRPcmFjbGVQcmljZQAEDSR0MDc2NzM4NzY4MDAJAQpnZXRGdW5kaW5nAAQUc2hvcnRQcmVtaXVtRnJhY3Rpb24IBQ0kdDA3NjczODc2ODAwAl8xBBNsb25nUHJlbWl1bUZyYWN0aW9uCAUNJHQwNzY3Mzg3NjgwMAJfMgQLbG9uZ0Z1bmRpbmcJAQRkaXZkAgUTbG9uZ1ByZW1pdW1GcmFjdGlvbgUPdW5kZXJseWluZ1ByaWNlBAxzaG9ydEZ1bmRpbmcJAQRkaXZkAgUUc2hvcnRQcmVtaXVtRnJhY3Rpb24FD3VuZGVybHlpbmdQcmljZQkAAgEJAKwCAgkArAICCQCsAgIJAQFzAQULbG9uZ0Z1bmRpbmcJAQFzAQUMc2hvcnRGdW5kaW5nCQEBcwEJARBnZXRUd2FwU3BvdFByaWNlAAkBAXMBCQEOZ2V0T3JhY2xlUHJpY2UAAWkBEGNvbXB1dGVTcG90UHJpY2UABAZyZXN1bHQJAQxnZXRTcG90UHJpY2UACQCUCgIFA25pbAUGcmVzdWx0AWkBH2NvbXB1dGVGZWVGb3JUcmFkZXJXaXRoQXJ0aWZhY3QCB190cmFkZXILX2FydGlmYWN0SWQEBnJlc3VsdAkBGGdldEZvclRyYWRlcldpdGhBcnRpZmFjdAIFB190cmFkZXIFC19hcnRpZmFjdElkCQCUCgIFA25pbAUGcmVzdWx0AQJ0eAEGdmVyaWZ5AAkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAkBDmFkbWluUHVibGljS2V5AP5v8SI=", "height": 2415004, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: ALbafyQFaGSpkuqRPvWjNcaDSSZYHYvpY916UR55TQVv Next: EKwSsGao7Q9g5SQjyAqESnKtazdjozYyzr53WRrYrBWp Diff:
OldNewDifferences
2727
2828 let m = "k_positionFee"
2929
30-let n = "k_initialized"
30+let n = "k_positionTimestamp"
3131
32-let o = "k_paused"
32+let o = "k_initialized"
3333
34-let p = "k_closeOnly"
34+let p = "k_paused"
3535
36-let q = "k_fee"
36+let q = "k_closeOnly"
3737
38-let r = "k_fundingPeriod"
38+let r = "k_fee"
3939
40-let s = "k_initMarginRatio"
40+let s = "k_rollover_fee"
4141
42-let t = "k_mmr"
42+let t = "k_fundingPeriod"
4343
44-let u = "k_liquidationFeeRatio"
44+let u = "k_initMarginRatio"
4545
46-let v = "k_partLiquidationRatio"
46+let v = "k_mmr"
4747
48-let w = "k_spreadLimit"
48+let w = "k_liquidationFeeRatio"
4949
50-let x = "k_maxPriceImpact"
50+let x = "k_partLiquidationRatio"
5151
52-let y = "k_maxPriceSpread"
52+let y = "k_spreadLimit"
5353
54-let z = "k_maxOpenNotional"
54+let z = "k_maxPriceImpact"
5555
56-let A = "k_feeToStakersPercent"
56+let A = "k_maxPriceSpread"
5757
58-let B = "k_maxOracleDelay"
58+let B = "k_maxOpenNotional"
5959
60-let C = "k_lastDataStr"
60+let C = "k_feeToStakersPercent"
6161
62-let D = "k_lastMinuteId"
62+let D = "k_maxOracleDelay"
6363
64-let E = "k_twapDataLastCumulativePrice"
64+let E = "k_lastDataStr"
6565
66-let F = "k_twapDataLastPrice"
66+let F = "k_lastMinuteId"
6767
68-let G = "k_twapDataPreviousMinuteId"
68+let G = "k_twapDataLastCumulativePrice"
6969
70-let H = "k_latestLongPremiumFraction"
70+let H = "k_twapDataLastPrice"
7171
72-let I = "k_latestShortPremiumFraction"
72+let I = "k_twapDataPreviousMinuteId"
7373
74-let J = "k_nextFundingBlockMinTimestamp"
74+let J = "k_latestLongPremiumFraction"
7575
76-let K = "k_longFundingRate"
76+let K = "k_latestShortPremiumFraction"
7777
78-let L = "k_shortFundingRate"
78+let L = "k_nextFundingBlockMinTimestamp"
7979
80-let M = "k_qtAstR"
80+let M = "k_longFundingRate"
8181
82-let N = "k_bsAstR"
82+let N = "k_shortFundingRate"
8383
84-let O = "k_qtAstW"
84+let O = "k_qtAstR"
8585
86-let P = "k_bsAstW"
86+let P = "k_bsAstR"
8787
88-let Q = "k_totalPositionSize"
88+let Q = "k_qtAstW"
8989
90-let R = "k_totalLongPositionSize"
90+let R = "k_bsAstW"
9191
92-let S = "k_totalShortPositionSize"
92+let S = "k_totalPositionSize"
9393
94-let T = "k_openInterestNotional"
94+let T = "k_totalLongPositionSize"
9595
96-let U = "k_openInterestShort"
96+let U = "k_totalShortPositionSize"
9797
98-let V = "k_openInterestLong"
98+let V = "k_openInterestNotional"
9999
100-let W = "k_coordinatorAddress"
100+let W = "k_openInterestShort"
101101
102-let X = "k_vault_address"
102+let X = "k_openInterestLong"
103103
104-let Y = "k_admin_address"
104+let Y = "k_coordinatorAddress"
105105
106-let Z = "k_admin_public_key"
106+let Z = "k_vault_address"
107107
108-let aa = "k_quote_asset"
108+let aa = "k_admin_address"
109109
110-let ab = "k_quote_staking"
110+let ab = "k_admin_public_key"
111111
112-let ac = "k_staking_address"
112+let ac = "k_quote_asset"
113113
114-let ad = "k_miner_address"
114+let ad = "k_quote_staking"
115115
116-let ae = "k_orders_address"
116+let ae = "k_staking_address"
117117
118-let af = "k_referral_address"
118+let af = "k_miner_address"
119119
120-let ag = "k_collateral_address"
120+let ag = "k_orders_address"
121121
122-let ah = "k_exchange_address"
122+let ah = "k_referral_address"
123123
124-let ai = "k_nft_manager_address"
124+let ai = "k_exchange_address"
125125
126-let aj = "k_trader_market_asset_collateral"
126+let aj = "k_nft_manager_address"
127127
128128 func ak (al,am) = ((al + "_") + am)
129129
130130
131-func an () = valueOrErrorMessage(addressFromString(getStringValue(this, W)), "Coordinator not set")
131+func an () = valueOrErrorMessage(addressFromString(getStringValue(this, Y)), "Coordinator not set")
132132
133133
134-func ao () = addressFromString(getStringValue(an(), Y))
134+func ao () = addressFromString(getStringValue(an(), aa))
135135
136136
137-func ap () = fromBase58String(getStringValue(an(), Z))
137+func ap () = fromBase58String(getStringValue(an(), ab))
138138
139139
140-func aq () = fromBase58String(getStringValue(an(), aa))
140+func aq () = fromBase58String(getStringValue(an(), ac))
141141
142142
143-func ar () = valueOrErrorMessage(addressFromString(getStringValue(an(), ab)), "Quote asset staking not set")
143+func ar () = valueOrErrorMessage(addressFromString(getStringValue(an(), ad)), "Quote asset staking not set")
144144
145145
146-func as () = valueOrErrorMessage(addressFromString(getStringValue(an(), ac)), "Staking not set")
146+func as () = valueOrErrorMessage(addressFromString(getStringValue(an(), ae)), "Staking not set")
147147
148148
149-func at () = valueOrErrorMessage(addressFromString(getStringValue(an(), X)), "Vault not set")
149+func at () = valueOrErrorMessage(addressFromString(getStringValue(an(), Z)), "Vault not set")
150150
151151
152-func au () = valueOrErrorMessage(addressFromString(getStringValue(an(), ad)), "Miner not set")
152+func au () = valueOrErrorMessage(addressFromString(getStringValue(an(), af)), "Miner not set")
153153
154154
155-func av () = valueOrErrorMessage(addressFromString(getStringValue(an(), ae)), "Orders not set")
155+func av () = valueOrErrorMessage(addressFromString(getStringValue(an(), ag)), "Orders not set")
156156
157157
158-func aw () = valueOrErrorMessage(addressFromString(getStringValue(an(), af)), "Referral not set")
158+func aw () = valueOrErrorMessage(addressFromString(getStringValue(an(), ah)), "Referral not set")
159159
160160
161-func ax () = valueOrErrorMessage(addressFromString(getStringValue(an(), ai)), "NFT Manager not set")
161+func ax () = valueOrErrorMessage(addressFromString(getStringValue(an(), aj)), "NFT Manager not set")
162162
163163
164-func ay () = valueOrErrorMessage(addressFromString(getStringValue(an(), ag)), "Collateral Manager not set")
164+func ay () = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(an(), ai), "No swap address")), "Invalid swap address")
165165
166166
167-func az () = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(an(), ah), "No swap address")), "Invalid swap address")
167+let az = "k_token_param"
168+
169+let aA = "k_token_type"
170+
171+let aB = "fee_reduction"
172+
173+let aC = 1
174+
175+let aD = 2
176+
177+let aE = 15
178+
179+let aF = 15
180+
181+let aG = 1000
182+
183+let aH = 6
184+
185+let aI = (1 * (((((10 * 10) * 10) * 10) * 10) * 10))
186+
187+let aJ = (525600 * aI)
188+
189+let aK = (86400 * aI)
190+
191+let aL = 100
192+
193+let aM = 1
194+
195+let aN = 2
196+
197+func aO (aP) = (toString(aP) + ",")
168198
169199
170-let aA = "k_whitelist_asset"
171-
172-func aB (aC) = valueOrElse(getBoolean(ay(), ak(aA, aC)), false)
200+func aQ (aP,aR) = fraction(aP, aI, aR, HALFEVEN)
173201
174202
175-let aD = "k_token_param"
176-
177-let aE = "k_token_type"
178-
179-let aF = "fee_reduction"
180-
181-let aG = 1
182-
183-let aH = 2
184-
185-let aI = 15
186-
187-let aJ = 15
188-
189-let aK = 1000
190-
191-let aL = 6
192-
193-let aM = (1 * (((((10 * 10) * 10) * 10) * 10) * 10))
194-
195-let aN = (86400 * aM)
196-
197-let aO = 100
198-
199-let aP = 1
200-
201-let aQ = 2
202-
203-func aR (aS) = (toString(aS) + ",")
203+func aS (aP,aR) = fraction(aP, aR, aI, HALFEVEN)
204204
205205
206-func aT (aS,aU) = fraction(aS, aM, aU, HALFEVEN)
206+func aT (aP) = sqrt(aP, aH, aH, HALFEVEN)
207207
208208
209-func aV (aS,aU) = fraction(aS, aU, aM, HALFEVEN)
209+func aU (aP,aR) = pow(aP, aH, aR, aH, aH, HALFEVEN)
210210
211211
212-func aW (aS) = sqrt(aS, aL, aL, HALFEVEN)
212+func aV (aP,aR) = fraction(aP, toBigInt(aI), aR, HALFEVEN)
213213
214214
215-func aX (aS,aU) = pow(aS, aL, aU, aL, aL, HALFEVEN)
215+func aW (aP,aR) = fraction(aP, aR, toBigInt(aI), HALFEVEN)
216216
217217
218-func aY (aS,aU) = fraction(aS, toBigInt(aM), aU, HALFEVEN)
218+func aX (aP) = sqrtBigInt(aP, aH, aH, HALFEVEN)
219219
220220
221-func aZ (aS,aU) = fraction(aS, aU, toBigInt(aM), HALFEVEN)
221+func aY (aP,aR) = pow(aP, aH, aR, aH, aH, HALFEVEN)
222222
223223
224-func ba (aS) = sqrtBigInt(aS, aL, aL, HALFEVEN)
224+func aZ (aP) = if ((aP > 0))
225+ then aP
226+ else -(aP)
225227
226228
227-func bb (aS,aU) = pow(aS, aL, aU, aL, aL, HALFEVEN)
229+func ba (aP,aR) = if ((aP >= aR))
230+ then aP
231+ else aR
228232
229233
230-func bc (aS) = if ((aS > 0))
231- then aS
232- else -(aS)
234+func bb (bc) = if ((size(bc) == 0))
235+ then ""
236+ else makeString(bc, ",")
233237
234238
235-func bd (aS,aU) = if ((aS >= aU))
236- then aS
237- else aU
239+func bd (be) = if ((be == ""))
240+ then nil
241+ else split(be, ",")
238242
239243
240-func be (bf) = {
241- func bg (bh,bi) = ((bh + bi) + ",")
244+func bf (bc,bg,bh) = if ((size(bc) > bg))
245+ then (removeByIndex(bc, 0) :+ bh)
246+ else (bc :+ bh)
242247
243- let bj = {
244- let bk = bf
245- let bl = size(bk)
246- let bm = ""
247- func bn (bo,bp) = if ((bp >= bl))
248- then bo
249- else bg(bo, bk[bp])
250248
251- func bq (bo,bp) = if ((bp >= bl))
252- then bo
253- else throw("List size exceeds 20")
249+func bi (bj) = valueOrErrorMessage(getInteger(this, bj), ("no value for " + bj))
254250
255- bq(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bm, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
256- }
257- let br = dropRight(bj, 1)
258- let bs = if ((take(br, 1) == ","))
259- then drop(br, 1)
260- else br
261- bs
251+
252+func bk (bj,bl) = valueOrElse(getInteger(this, bj), bl)
253+
254+
255+func bm (am,al) = {
256+ let bn = valueOrErrorMessage(getString(am, al), ("No value for key " + al))
257+ bn
262258 }
263259
264260
265-func bt (bu) = split(bu, ",")
266-
267-
268-func bv (bf,bw,bx) = if ((size(bf) > bw))
269- then (removeByIndex(bf, 0) :+ bx)
270- else (bf :+ bx)
271-
272-
273-func by (bz) = valueOrErrorMessage(getInteger(this, bz), ("no value for " + bz))
274-
275-
276-func bA (bz,bB) = valueOrElse(getInteger(this, bz), bB)
277-
278-
279-func bC (am,al) = {
280- let bi = valueOrErrorMessage(getString(am, al), ("No value for key " + al))
281- bi
261+func bo (am,al) = {
262+ let bn = valueOrErrorMessage(getInteger(am, al), ("No value for key " + al))
263+ bn
282264 }
283265
284266
285-func bD (am,al) = {
286- let bi = valueOrErrorMessage(getInteger(am, al), ("No value for key " + al))
287- bi
288- }
267+func bp () = bi(e)
289268
290269
291-func bE () = by(e)
270+func bq () = bi(r)
292271
293272
294-func bF () = by(q)
273+func br () = bi(s)
295274
296275
297-func bG () = by(s)
276+func bs () = bi(u)
298277
299278
300-func bH () = by(M)
279+func bt () = bi(O)
301280
302281
303-func bI () = by(N)
282+func bu () = bi(P)
304283
305284
306-func bJ () = bA(O, aM)
285+func bv () = bk(Q, aI)
307286
308287
309-func bK () = bA(P, aM)
288+func bw () = bk(R, aI)
310289
311290
312-func bL () = by(Q)
291+func bx () = bi(S)
313292
314293
315-func bM () = by(T)
294+func by () = bi(V)
316295
317296
318-func bN () = by(U)
297+func bz () = bi(W)
319298
320299
321-func bO () = by(V)
300+func bA () = bi(X)
322301
323302
324-func bP () = by(J)
303+func bB () = bi(L)
325304
326305
327-func bQ () = by(r)
306+func bC () = bi(t)
328307
329308
330-func bR () = (bQ() * aM)
309+func bD () = (bC() * aI)
331310
332311
333-func bS () = (bQ() * aK)
312+func bE () = (bC() * aG)
334313
335314
336-func bT () = by(t)
315+func bF () = bi(v)
337316
338317
339-func bU () = by(u)
318+func bG () = bi(w)
340319
341320
342-func bV () = by(v)
321+func bH () = bi(x)
343322
344323
345-func bW () = by(w)
324+func bI () = bi(y)
346325
347326
348-func bX () = by(x)
327+func bJ () = bi(z)
349328
350329
351-func bY () = by(y)
330+func bK () = bi(A)
352331
353332
354-func bZ () = by(z)
333+func bL () = bi(B)
355334
356335
357-func ca () = by(H)
336+func bM () = bi(J)
358337
359338
360-func cb () = by(I)
339+func bN () = bi(K)
361340
362341
363-func cc () = by(S)
342+func bO () = bi(U)
364343
365344
366-func cd () = by(R)
345+func bP () = bi(T)
367346
368347
369-func ce () = bA(f, 0)
348+func bQ () = bk(f, 0)
370349
371350
372-func cf () = by(A)
351+func bR () = bi(C)
373352
374353
375-func cg () = by(B)
354+func bS () = bi(D)
376355
377356
378-func ch (ci) = valueOrElse(getString(av(), "k_sender"), toString(ci.caller))
357+func bT () = lastBlock.timestamp
379358
380359
381-func cj (ck,cl,cm) = {
382- let cn = (ck - cl)
383- if (if (cm)
384- then (0 > cn)
360+func bU (bV) = valueOrElse(getString(av(), "k_sender"), toString(bV.caller))
361+
362+
363+func bW (bX,bY,bZ) = {
364+ let ca = (bX - bY)
365+ if (if (bZ)
366+ then (0 > ca)
385367 else false)
386- then throw(((("Invalid margin: " + toString(ck)) + " < ") + toString(cl)))
387- else if (if (!(cm))
388- then (cn >= 0)
368+ then throw(((("Invalid margin: " + toString(bX)) + " < ") + toString(bY)))
369+ else if (if (!(bZ))
370+ then (ca >= 0)
389371 else false)
390- then throw(((("Invalid margin: " + toString(ck)) + " > ") + toString(cl)))
372+ then throw(((("Invalid margin: " + toString(bX)) + " > ") + toString(bY)))
391373 else true
392374 }
393375
394376
395-func co (cp) = if ((cp == 0))
377+func cb (cc) = if ((cc == 0))
396378 then throw("Should not be called with _positionSize == 0")
397- else if ((cp > 0))
398- then ca()
399- else cb()
379+ else if ((cc > 0))
380+ then bM()
381+ else bN()
400382
401383
402-func cq (cr) = {
403- let cs = getInteger(this, ak(g, cr))
404- let ct = cs
405- if ($isInstanceOf(ct, "Int"))
384+func cd (ce) = {
385+ let cf = getInteger(this, ak(g, ce))
386+ let cg = cf
387+ if ($isInstanceOf(cg, "Int"))
406388 then {
407- let cu = ct
408- $Tuple4(cu, getIntegerValue(this, ak(h, cr)), getIntegerValue(this, ak(i, cr)), getIntegerValue(this, ak(j, cr)))
389+ let ch = cg
390+ $Tuple5(ch, getIntegerValue(this, ak(h, ce)), getIntegerValue(this, ak(i, ce)), getIntegerValue(this, ak(j, ce)), getIntegerValue(this, ak(n, ce)))
409391 }
410- else $Tuple4(0, 0, 0, 0)
392+ else $Tuple5(0, 0, 0, 0, 0)
411393 }
412394
413395
414-func cv (cr) = {
415- let cw = getString(this, ak(l, cr))
416- let ct = cw
417- if ($isInstanceOf(ct, "String"))
396+func ci (ce) = {
397+ let cj = getString(this, ak(l, ce))
398+ let cg = cj
399+ if ($isInstanceOf(cg, "String"))
418400 then {
419- let cx = ct
420- cx
401+ let ck = cg
402+ ck
421403 }
422404 else toBase58String(aq())
423405 }
424406
425407
426-func cy (cr) = {
427- let cz = getInteger(this, ak(m, cr))
428- let ct = cz
429- if ($isInstanceOf(ct, "Int"))
408+func cl (ce) = {
409+ let cm = getInteger(this, ak(m, ce))
410+ let cg = cm
411+ if ($isInstanceOf(cg, "Int"))
430412 then {
431- let cA = ct
432- cA
413+ let cn = cg
414+ cn
433415 }
434- else bF()
416+ else bq()
435417 }
436418
437419
438-func cB (cr) = if ((cq(cr)._1 == 0))
420+func co (ce) = if ((cd(ce)._1 == 0))
439421 then throw("No open position")
440422 else true
441423
442424
443-func cC () = valueOrElse(getBoolean(this, n), false)
425+func cp () = valueOrElse(getBoolean(this, o), false)
444426
445427
446-func cD () = valueOrElse(getBoolean(this, o), false)
428+func cq () = valueOrElse(getBoolean(this, p), false)
447429
448430
449-func cE () = valueOrElse(getBoolean(this, p), false)
431+func cr () = valueOrElse(getBoolean(this, q), false)
450432
451433
452-func cF (cG,cH,cI) = if (cG)
434+func cs (ct,cu,cv) = if (ct)
453435 then {
454- let cJ = (bI() - cI)
455- if ((0 >= cJ))
436+ let cw = (bu() - cv)
437+ if ((0 >= cw))
456438 then throw("Tx lead to base asset reserve <= 0, revert")
457- else $Tuple3((bH() + cH), cJ, (bL() + cI))
439+ else $Tuple3((bt() + cu), cw, (bx() + cv))
458440 }
459441 else {
460- let cK = (bH() - cH)
461- if ((0 >= cK))
442+ let cx = (bt() - cu)
443+ if ((0 >= cx))
462444 then throw("Tx lead to base quote reserve <= 0, revert")
463- else $Tuple3(cK, (bI() + cI), (bL() - cI))
445+ else $Tuple3(cx, (bu() + cv), (bx() - cv))
464446 }
465447
466448
467-func cL (cM,cN) = {
468- let cO = toBigInt(cM)
469- let cP = toBigInt(cN)
470- aZ(cO, cP)
449+func cy (cz,cA) = {
450+ let cB = toBigInt(cz)
451+ let cC = toBigInt(cA)
452+ aW(cB, cC)
471453 }
472454
473455
474-func cQ (cG,cH) = {
475- let cM = bH()
476- let cN = bI()
477- let cR = bJ()
478- let cS = bK()
479- let cT = aT(cH, cR)
480- let bz = cL(cM, cN)
481- let cU = if (cG)
482- then (cM + cT)
483- else (cM - cT)
484- let cV = toInt(aY(bz, toBigInt(cU)))
485- let cW = bc((cV - cN))
486- let cX = if (cG)
487- then cW
488- else -(cW)
489- let cY = cF(cG, cT, cW)
490- let cZ = cY._1
491- let da = cY._2
492- let db = cY._3
493- let dc = aT(aV(cM, cR), aV(cN, cS))
494- let dd = aT(cH, cW)
495- let de = bc((dc - dd))
496- let df = (aM - aT(dc, (dc + de)))
497- let dg = bX()
498- if ((df > dg))
499- then throw(((((((((((((("Price impact " + toString(df)) + " > max price impact ") + toString(dg)) + " before quote asset: ") + toString(cM)) + " before base asset: ") + toString(cN)) + " quote asset amount to exchange: ") + toString(cH)) + " price before: ") + toString(dc)) + " marketPrice: ") + toString(dd)))
500- else $Tuple4(cX, cZ, da, db)
456+func cD (ct,cu) = {
457+ let cz = bt()
458+ let cA = bu()
459+ let cE = bv()
460+ let cF = bw()
461+ let cG = aQ(cu, cE)
462+ let bj = cy(cz, cA)
463+ let cH = if (ct)
464+ then (cz + cG)
465+ else (cz - cG)
466+ let cI = toInt(aV(bj, toBigInt(cH)))
467+ let cJ = aZ((cI - cA))
468+ let cK = if (ct)
469+ then cJ
470+ else -(cJ)
471+ let cL = cs(ct, cG, cJ)
472+ let cM = cL._1
473+ let cN = cL._2
474+ let cO = cL._3
475+ let cP = aQ(aS(cz, cE), aS(cA, cF))
476+ let cQ = aQ(cu, cJ)
477+ let cR = aZ((cP - cQ))
478+ let cS = (aI - aQ(cP, (cP + cR)))
479+ let cT = bJ()
480+ if ((cS > cT))
481+ then throw(((((((((((((("Price impact " + toString(cS)) + " > max price impact ") + toString(cT)) + " before quote asset: ") + toString(cz)) + " before base asset: ") + toString(cA)) + " quote asset amount to exchange: ") + toString(cu)) + " price before: ") + toString(cP)) + " marketPrice: ") + toString(cQ)))
482+ else $Tuple4(cK, cM, cN, cO)
501483 }
502484
503485
504-func dh (di,dj,dk,dl) = {
505- let dm = if ((di != 0))
506- then {
507- let dn = co(di)
508- aV((dn - dk), di)
509- }
510- else 0
511- let do = ((dl - dm) + dj)
512- let dp = if ((0 > do))
513- then $Tuple2(0, bc(do))
514- else $Tuple2(bc(do), 0)
515- let dq = dp._1
516- let dr = dp._2
517- $Tuple3(dq, dr, dm)
486+func cU (cV,cW) = {
487+ let cX = ((((bT() - cW) / 1000) / 60) * aI)
488+ let cY = aQ(aS(aS(cV, cX), br()), aJ)
489+ cY
518490 }
519491
520492
521-func ds (cG,cI,dt,du,dv,dw,dx) = {
522- let dc = aT(aV(du, dv), aV(dw, dx))
523- if ((cI == 0))
493+func cZ (da,cV,db,cW,dc) = {
494+ let dd = if ((da != 0))
495+ then {
496+ let de = cb(da)
497+ aS((de - db), da)
498+ }
499+ else 0
500+ let cY = cU(cV, cW)
501+ let df = (((dc - cY) - dd) + cV)
502+ let dg = if ((0 > df))
503+ then $Tuple2(0, aZ(df))
504+ else $Tuple2(aZ(df), 0)
505+ let dh = dg._1
506+ let di = dg._2
507+ $Tuple4(dh, di, dd, cY)
508+ }
509+
510+
511+func dj (ct,cv,dk,dl,dm,dn,do) = {
512+ let cP = aQ(aS(dl, dm), aS(dn, do))
513+ if ((cv == 0))
524514 then throw("Invalid base asset amount")
525515 else {
526- let bz = cL(du, dw)
527- let dy = if (cG)
528- then (dw + cI)
529- else (dw - cI)
530- let dz = toInt(aY(bz, toBigInt(dy)))
531- let dA = bc((dz - du))
532- let dB = aV(dA, dv)
533- let dg = bX()
534- let dC = cF(!(cG), dA, cI)
535- let cZ = dC._1
536- let da = dC._2
537- let db = dC._3
538- let dd = aT(dB, cI)
539- let de = bc((dc - dd))
540- let df = (aM - aT(dc, (dc + de)))
541- if (if ((df > dg))
542- then dt
516+ let bj = cy(dl, dn)
517+ let dp = if (ct)
518+ then (dn + cv)
519+ else (dn - cv)
520+ let dq = toInt(aV(bj, toBigInt(dp)))
521+ let dr = aZ((dq - dl))
522+ let ds = aS(dr, dm)
523+ let cT = bJ()
524+ let dt = cs(!(ct), dr, cv)
525+ let cM = dt._1
526+ let cN = dt._2
527+ let cO = dt._3
528+ let cQ = aQ(ds, cv)
529+ let cR = aZ((cP - cQ))
530+ let cS = (aI - aQ(cP, (cP + cR)))
531+ if (if ((cS > cT))
532+ then dk
543533 else false)
544- then throw(((((((((((((("Price impact " + toString(df)) + " > max price impact ") + toString(dg)) + " before quote asset: ") + toString(du)) + " before base asset: ") + toString(dw)) + " base asset amount to exchange: ") + toString(cI)) + " price before: ") + toString(dc)) + " market price: ") + toString(dd)))
545- else $Tuple7(dB, cZ, da, db, (cd() - (if (cG)
546- then bc(cI)
547- else 0)), (cc() - (if (!(cG))
548- then bc(cI)
549- else 0)), df)
534+ then throw(((((((((((((("Price impact " + toString(cS)) + " > max price impact ") + toString(cT)) + " before quote asset: ") + toString(dl)) + " before base asset: ") + toString(dn)) + " base asset amount to exchange: ") + toString(cv)) + " price before: ") + toString(cP)) + " market price: ") + toString(cQ)))
535+ else $Tuple7(ds, cM, cN, cO, (bP() - (if (ct)
536+ then aZ(cv)
537+ else 0)), (bO() - (if (!(ct))
538+ then aZ(cv)
539+ else 0)), cS)
550540 }
551541 }
552542
553543
554-func dD (cG,cI,dt) = ds(cG, cI, dt, bH(), bJ(), bI(), bK())
544+func du (ct,cv,dk) = dj(ct, cv, dk, bt(), bv(), bu(), bw())
555545
556546
557-func dE () = {
558- let dF = valueOrErrorMessage(addressFromString(getStringValue(this, d)), "")
559- let dG = getStringValue(this, a)
560- let dH = valueOrErrorMessage(getInteger(dF, dG), ((("Can not get oracle price. Oracle: " + toString(dF)) + " key: ") + dG))
561- let dI = valueOrElse(getString(this, b), "")
562- if ((dI != ""))
547+func dv () = {
548+ let dw = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(this, d), ("No value: " + d))), "")
549+ let dx = valueOrElse(getString(this, a), ("No value: " + a))
550+ let dy = valueOrErrorMessage(getInteger(dw, dx), ((("Can not get oracle price. Oracle: " + toString(dw)) + " key: ") + dx))
551+ let dz = valueOrElse(getString(this, b), "")
552+ if ((dz != ""))
563553 then {
564- let dJ = lastBlock.height
565- let dK = valueOrErrorMessage(getInteger(dF, dI), ((("Can not get oracle block. Oracle: " + toString(dF)) + " key: ") + dI))
566- if (((dJ - dK) > cg()))
567- then throw(((("Oracle stale data. Last oracle block: " + toString(dK)) + " current block: ") + toString(dJ)))
568- else dH
554+ let dA = lastBlock.height
555+ let dB = valueOrErrorMessage(getInteger(dw, dz), ((("Can not get oracle block. Oracle: " + toString(dw)) + " key: ") + dz))
556+ if (((dA - dB) > bS()))
557+ then throw(((("Oracle stale data. Last oracle block: " + toString(dB)) + " current block: ") + toString(dA)))
558+ else dy
569559 }
570- else dH
560+ else dy
571561 }
572562
573563
574-func dL () = {
575- let dF = valueOrErrorMessage(addressFromString(getStringValue(this, d)), "")
576- let dM = valueOrElse(getString(this, c), "")
577- if ((dM != ""))
564+func dC () = {
565+ let dw = valueOrErrorMessage(addressFromString(getStringValue(this, d)), "")
566+ let dD = valueOrElse(getString(this, c), "")
567+ if ((dD != ""))
578568 then {
579- let dN = valueOrErrorMessage(getBoolean(dF, dM), ((("Can not get oracle is open/closed. Oracle: " + toString(dF)) + " key: ") + dM))
580- !(dN)
569+ let dE = valueOrErrorMessage(getBoolean(dw, dD), ((("Can not get oracle is open/closed. Oracle: " + toString(dw)) + " key: ") + dD))
570+ !(dE)
581571 }
582572 else false
583573 }
584574
585575
586-func dO (dP,du,dw,cR,cS) = {
587- let dQ = aT(aV(du, cR), aV(dw, cS))
588- let dR = aT((dP + dQ), (2 * aM))
589- let dO = aT(bc((dP - dQ)), dR)
590- dO
576+func dF (dG,dl,dn,cE,cF) = {
577+ let dH = aQ(aS(dl, cE), aS(dn, cF))
578+ let dI = aQ((dG + dH), (2 * aI))
579+ let dF = aQ(aZ((dG - dH)), dI)
580+ dF
591581 }
592582
593583
594-func dS (du,dw) = {
595- let dT = dE()
596- let cR = bJ()
597- let cS = bK()
598- let dU = dO(dT, bH(), bI(), cR, cS)
599- let dV = dO(dT, du, dw, cR, cS)
600- if (if ((dV > bY()))
601- then (dV > dU)
584+func dJ (dl,dn) = {
585+ let dK = dv()
586+ let cE = bv()
587+ let cF = bw()
588+ let dL = dF(dK, bt(), bu(), cE, cF)
589+ let dM = dF(dK, dl, dn, cE, cF)
590+ if (if ((dM > bK()))
591+ then (dM > dL)
602592 else false)
603- then throw(((("Price spread " + toString(dV)) + " > max price spread ") + toString(bY())))
593+ then throw(((("Price spread " + toString(dM)) + " > max price spread ") + toString(bK())))
604594 else true
605595 }
606596
607597
608-func dW (dX,dY) = {
609- let dZ = bZ()
610- if ((dX > dZ))
611- then throw(((("Long open notional " + toString(dX)) + " > max open notional ") + toString(dZ)))
612- else if ((dY > dZ))
613- then throw(((("Short open notional " + toString(dY)) + " > max open notional ") + toString(dZ)))
598+func dN (dO,dP) = {
599+ let dQ = bL()
600+ if ((dO > dQ))
601+ then throw(((("Long open notional " + toString(dO)) + " > max open notional ") + toString(dQ)))
602+ else if ((dP > dQ))
603+ then throw(((("Short open notional " + toString(dP)) + " > max open notional ") + toString(dQ)))
614604 else true
615605 }
616606
617607
618-func ea () = {
619- let du = bH()
620- let dw = bI()
621- let cR = bJ()
622- let cS = bK()
623- aT(aV(du, cR), aV(dw, cS))
608+func dR () = {
609+ let dl = bt()
610+ let dn = bu()
611+ let cE = bv()
612+ let cF = bw()
613+ aQ(aS(dl, cE), aS(dn, cF))
624614 }
625615
626616
627-func eb () = {
628- let dT = dE()
629- let ec = ea()
630- (aT(bc((dT - ec)), dT) > bW())
617+func dS () = {
618+ let dK = dv()
619+ let dT = dR()
620+ (aQ(aZ((dK - dT)), dK) > bI())
631621 }
632622
633623
634-func ed (cp,ee,du,dv,dw,dx) = {
635- let ef = bc(cp)
636- let eg = (0 > cp)
637- let eh = if ((ee == aP))
624+func dU (cc,dV,dl,dm,dn,do) = {
625+ let dW = aZ(cc)
626+ let dX = (0 > cc)
627+ let dY = if ((dV == aM))
638628 then {
639- let ei = ds(!(eg), ef, false, du, dv, dw, dx)
640- let ej = ei._1
641- let ek = ei._2
642- let el = ei._3
643- let em = ei._4
644- ej
629+ let dZ = dj(!(dX), dW, false, dl, dm, dn, do)._1
630+ dZ
645631 }
646- else aV(ef, dE())
647- eh
632+ else aS(dW, dv())
633+ dY
648634 }
649635
650636
651-func en (cp,eo,du,dv,dw,dx,ee) = if ((cp == 0))
637+func ea (cc,eb,dl,dm,dn,do,dV) = if ((cc == 0))
652638 then throw("Invalid position size")
653639 else {
654- let eg = (0 > cp)
655- let eh = ed(cp, ee, du, dv, dw, dx)
656- let ep = if (eg)
657- then (eo - eh)
658- else (eh - eo)
659- $Tuple2(eh, ep)
640+ let dX = (0 > cc)
641+ let dY = dU(cc, dV, dl, dm, dn, do)
642+ let ec = if (dX)
643+ then (eb - dY)
644+ else (dY - eb)
645+ $Tuple2(dY, ec)
660646 }
661647
662648
663-func eq (cr,ee) = {
664- let er = cq(cr)
665- let cu = er._1
666- let es = er._2
667- let et = er._3
668- let eu = er._4
669- en(cu, et, bH(), bJ(), bI(), bK(), ee)
649+func ed (ce,dV) = {
650+ let ee = cd(ce)
651+ let ch = ee._1
652+ let ef = ee._2
653+ let eg = ee._3
654+ let eh = ee._4
655+ ea(ch, eg, bt(), bv(), bu(), bw(), dV)
670656 }
671657
672658
673-func ev (ew,ex,ey) = aT((ew - ex), ey)
659+func ei (ej,ek,el) = aQ((ej - ek), el)
674660
675661
676-func ez (cr,ee) = {
677- let eA = cq(cr)
678- let cu = eA._1
679- let es = eA._2
680- let eB = eA._3
681- let eu = eA._4
682- let eC = eq(cr, ee)
683- let eh = eC._1
684- let ep = eC._2
685- let eD = dh(cu, es, eu, ep)
686- let dq = eD._1
687- let dr = eD._2
688- ev(dq, dr, eh)
662+func em (ce,dV) = {
663+ let en = cd(ce)
664+ let ch = en._1
665+ let ef = en._2
666+ let eo = en._3
667+ let ep = en._4
668+ let eq = en._5
669+ let er = ed(ce, dV)
670+ let dY = er._1
671+ let ec = er._2
672+ let es = cZ(ch, ef, ep, eq, ec)
673+ let dh = es._1
674+ let di = es._2
675+ ei(dh, di, dY)
689676 }
690677
691678
692-func eE (cr) = ez(cr, aP)
679+func et (ce) = em(ce, aM)
693680
694681
695-func eF (cr,cp) = {
696- let eG = bd(bV(), (aM - aT(eE(cr), bT())))
697- let eH = aV(bc(cp), eG)
698- let eI = dD((cp > 0), eH, false)
699- let eJ = eI._1
700- let df = eI._7
701- if ((bX() > df))
702- then eJ
682+func eu (ce,cc) = {
683+ let ev = ba(bH(), (aI - aQ(et(ce), bF())))
684+ let ew = aS(aZ(cc), ev)
685+ let ex = du((cc > 0), ew, false)
686+ let ey = ex._1
687+ let cS = ex._7
688+ if ((bJ() > cS))
689+ then ew
690+ else aS(aZ(cc), bH())
691+ }
692+
693+
694+func ez (ce,eA,eB,eC,eD,dk) = {
695+ let eE = cd(ce)
696+ let eF = eE._1
697+ let eG = eE._2
698+ let eH = eE._3
699+ let eI = eE._4
700+ let eJ = eE._5
701+ let eK = (eF > 0)
702+ let eL = aZ(eF)
703+ if (if ((eL >= eA))
704+ then (eA > 0)
705+ else false)
706+ then {
707+ let eM = (eL > eA)
708+ let eN = du((eF > 0), eA, dk)
709+ let eO = eN._1
710+ let cH = eN._2
711+ let cI = eN._3
712+ let eP = eN._4
713+ let eQ = if ((eF > 0))
714+ then -(eA)
715+ else eA
716+ let eR = ed(ce, aM)
717+ let eS = eR._1
718+ let ec = eR._2
719+ let eT = aQ(aZ(eQ), eL)
720+ let eU = aS(ec, eT)
721+ let eV = cZ(eF, eG, eI, eJ, ec)
722+ let eW = eV._1
723+ let eX = eV._2
724+ let eY = eV._3
725+ let cY = eV._4
726+ let eZ = cZ(eF, eG, eI, eJ, eU)._2
727+ let fa = aS(aS(eS, eT), eB)
728+ let fb = (ec - eU)
729+ let fc = if ((eF > 0))
730+ then ((eS - eO) - fb)
731+ else ((fb + eS) - eO)
732+ let fd = (eF + eQ)
733+ let fe = if ((fd == 0))
734+ then $Tuple2(0, 0)
735+ else $Tuple2(aZ(fc), cb(fd))
736+ let ff = fe._1
737+ let fg = fe._2
738+ let fh = (eH - ff)
739+ let fi = em(ce, aM)
740+ let fj = if ((eF > 0))
741+ then (aS((ff + fb), fi) - fb)
742+ else (aS((ff - fb), fi) - fb)
743+ let fk = ((eW - (fj + fb)) - fa)
744+ let fl = if ((0 > fk))
745+ then throw("Invalid internalClosePosition params: unable to pay fee")
746+ else fk
747+ let fm = if (eD)
748+ then (fj + fl)
749+ else fj
750+ if (if ((eC != 0))
751+ then (eC > eO)
752+ else false)
753+ then throw(((("Limit error: " + toString(eO)) + " < ") + toString(eC)))
754+ else $Tuple17(fd, fm, ff, fg, eZ, eU, if (if (eD)
755+ then eM
756+ else false)
757+ then 0
758+ else fl, cH, cI, eP, (by() - fh), (bP() - (if (eK)
759+ then aZ(eQ)
760+ else 0)), (bO() - (if (!(eK))
761+ then aZ(eQ)
762+ else 0)), (bA() - (if (eK)
763+ then fh
764+ else 0)), (bz() - (if (!(eK))
765+ then fh
766+ else 0)), (fa + cY), eO)
767+ }
768+ else throw("Invalid internalClosePosition params: invalid position size")
769+ }
770+
771+
772+func fn () = {
773+ let fo = ((bT() / 1000) / 60)
774+ let fp = (fo - aE)
775+ let fq = valueOrElse(getString(this, E), "")
776+ let fr = split(fq, ",")
777+ func fs (ft,fu) = if ((fp >= valueOrErrorMessage(parseInt(fu), ("getTwapSpotPrice: invalid int: " + fq))))
778+ then (ft :+ parseIntValue(fu))
779+ else ft
780+
781+ let fv = {
782+ let fw = fr
783+ let fx = size(fw)
784+ let fy = nil
785+ func fz (fA,fB) = if ((fB >= fx))
786+ then fA
787+ else fs(fA, fw[fB])
788+
789+ func fC (fA,fB) = if ((fB >= fx))
790+ then fA
791+ else throw("List size exceeds 20")
792+
793+ fC(fz(fz(fz(fz(fz(fz(fz(fz(fz(fz(fz(fz(fz(fz(fz(fz(fz(fz(fz(fz(fy, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
794+ }
795+ let fD = if ((size(fv) > 0))
796+ then max(fv)
797+ else valueOrErrorMessage(parseInt(fr[0]), ("getTwapSpotPrice: invalid int: " + fq))
798+ let fE = valueOrElse(getInteger(this, F), 0)
799+ let fF = valueOrElse(getInteger(this, ((G + "_") + toString(fE))), 0)
800+ let fG = valueOrElse(getInteger(this, ((H + "_") + toString(fE))), 0)
801+ let fH = (fF + ((fo - fE) * fG))
802+ let fI = valueOrElse(getInteger(this, ((G + "_") + toString(fD))), 0)
803+ let fJ = valueOrElse(getInteger(this, ((H + "_") + toString(fD))), 0)
804+ let fK = (fI + ((fp - fD) * fJ))
805+ ((fH - fK) / aE)
806+ }
807+
808+
809+func fL () = {
810+ let cc = bx()
811+ if ((cc == 0))
812+ then $Tuple2(bt(), bu())
703813 else {
704- let eK = aV(bc(cp), bV())
705- let eL = dD((cp > 0), eK, false)._1
706- eL
814+ let fM = (cc > 0)
815+ let fN = du(fM, aZ(cc), false)
816+ let fO = fN._1
817+ let fP = fN._2
818+ let fQ = fN._3
819+ $Tuple2(fP, fQ)
707820 }
708821 }
709822
710823
711-func eM (cr,dt) = {
712- let eN = cq(cr)
713- let cu = eN._1
714- let es = eN._2
715- let et = eN._3
716- let eu = eN._4
717- let ep = eq(cr, aP)._2
718- let eO = dh(cu, es, eu, ep)
719- let dq = eO._1
720- let dr = eO._2
721- let eK = -(cu)
722- let eP = ep
723- let eQ = -(dq)
724- let eR = dD((cu > 0), bc(cu), dt)
725- let eL = eR._1
726- let cU = eR._2
727- let cV = eR._3
728- let eS = eR._4
729- let eT = eR._5
730- let eU = eR._6
731- let eV = (bM() - et)
732- $Tuple13(eK, dr, eP, eQ, cU, cV, eS, eV, eL, eT, eU, (bO() - (if ((cu > 0))
733- then et
734- else 0)), (bN() - (if ((0 > cu))
735- then et
736- else 0)))
824+func fR (fS,bx,fT,fU) = {
825+ let fV = toBigInt(fS)
826+ let fW = toBigInt(bx)
827+ let fX = toBigInt(fT)
828+ let fY = toBigInt(fU)
829+ let bj = aW(fX, fV)
830+ let fZ = (fV + fW)
831+ let ga = aV(bj, fZ)
832+ let gb = aV(ga, fZ)
833+ let gc = aV(fY, gb)
834+ toInt(gc)
737835 }
738836
739837
740-func eW () = {
741- let eX = ((lastBlock.timestamp / 1000) / 60)
742- let eY = (eX - aI)
743- let eZ = valueOrElse(getString(this, C), "")
744- let fa = split(eZ, ",")
745- func fb (bh,fc) = if ((eY >= parseIntValue(fc)))
746- then (bh :+ parseIntValue(fc))
747- else bh
748-
749- let fd = {
750- let bk = fa
751- let bl = size(bk)
752- let bm = nil
753- func bn (bo,bp) = if ((bp >= bl))
754- then bo
755- else fb(bo, bk[bp])
756-
757- func bq (bo,bp) = if ((bp >= bl))
758- then bo
759- else throw("List size exceeds 20")
760-
761- bq(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bm, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
762- }
763- let fe = if ((size(fd) > 0))
764- then max(fd)
765- else parseIntValue(fa[0])
766- let ff = valueOrElse(getInteger(this, D), 0)
767- let fg = valueOrElse(getInteger(this, ((E + "_") + toString(ff))), 0)
768- let fh = valueOrElse(getInteger(this, ((F + "_") + toString(ff))), 0)
769- let fi = (fg + ((eX - ff) * fh))
770- let fj = valueOrElse(getInteger(this, ((E + "_") + toString(fe))), 0)
771- let fk = valueOrElse(getInteger(this, ((F + "_") + toString(fe))), 0)
772- let fl = (fj + ((eY - fe) * fk))
773- ((fi - fl) / aI)
774- }
775-
776-
777-func fm () = {
778- let cp = bL()
779- if ((cp == 0))
780- then $Tuple2(bH(), bI())
838+func gd (ge,cz,cA) = {
839+ let cc = bx()
840+ if ((cc == 0))
841+ then {
842+ let gf = aQ(aS(ge, cA), cz)
843+ $Tuple3(gf, aI, 0)
844+ }
781845 else {
782- let fn = (cp > 0)
783- let fo = dD(fn, bc(cp), false)
784- let fp = fo._1
785- let fq = fo._2
786- let fr = fo._3
787- $Tuple2(fq, fr)
846+ let fM = (cc > 0)
847+ let fO = du(fM, aZ(cc), false)._1
848+ let gf = fR(cA, cc, cz, ge)
849+ let gg = aI
850+ let gh = ea(cc, fO, cz, gf, cA, gg, aM)._2
851+ $Tuple3(gf, gg, gh)
788852 }
789853 }
790854
791855
792-func fs (ft,bL,fu,fv) = {
793- let fw = toBigInt(ft)
794- let fx = toBigInt(bL)
795- let fy = toBigInt(fu)
796- let fz = toBigInt(fv)
797- let bz = aZ(fy, fw)
798- let fA = (fw + fx)
799- let fB = aY(bz, fA)
800- let fC = aY(fB, fA)
801- let fD = aY(fz, fC)
802- toInt(fD)
803- }
804-
805-
806-func fE (fF,cM,cN) = {
807- let cp = bL()
808- if ((cp == 0))
809- then {
810- let fG = aT(aV(fF, cN), cM)
811- $Tuple3(fG, aM, 0)
812- }
813- else {
814- let fn = (cp > 0)
815- let fp = dD(fn, bc(cp), false)._1
816- let fG = fs(cN, cp, cM, fF)
817- let fH = aM
818- let eQ = en(cp, fp, cM, fG, cN, fH, aP)._2
819- $Tuple3(fG, fH, eQ)
820- }
821- }
822-
823-
824-func fI () = {
825- let fJ = dE()
826- let fK = eW()
827- let fL = (fK - fJ)
828- if (if (if ((cc() == 0))
856+func gi () = {
857+ let gj = dv()
858+ let gk = fn()
859+ let gl = (gk - gj)
860+ if (if (if ((bO() == 0))
829861 then true
830- else (cd() == 0))
862+ else (bP() == 0))
831863 then true
832- else dL())
864+ else dC())
833865 then $Tuple2(0, 0)
834- else if ((0 > fL))
866+ else if ((0 > gl))
835867 then {
836- let fM = aT(aV(fL, bR()), aN)
837- let fN = aT(aV(fM, cc()), cd())
838- $Tuple2(fM, fN)
868+ let gm = aQ(aS(gl, bD()), aK)
869+ let gn = aQ(aS(gm, bO()), bP())
870+ $Tuple2(gm, gn)
839871 }
840872 else {
841- let fN = aT(aV(fL, bR()), aN)
842- let fM = aT(aV(fN, cd()), cc())
843- $Tuple2(fM, fN)
873+ let gn = aQ(aS(gl, bD()), aK)
874+ let gm = aQ(aS(gn, bP()), bO())
875+ $Tuple2(gm, gn)
844876 }
845877 }
846878
847879
848-func fO (fP,fQ) = {
849- let fR = bF()
850- let fS = aV(fR, fQ)
851- let fT = if ((fP != ""))
880+func go (gp,gq) = {
881+ let gr = bq()
882+ let gs = aS(gr, gq)
883+ let gt = if ((gp != ""))
852884 then {
853- let fU = bC(ax(), ak(aE, fP))
854- if ((fU == aF))
885+ let gu = bm(ax(), ak(aA, gp))
886+ if ((gu == aB))
855887 then {
856- let fV = bD(ax(), ak(aD, fP))
857- let fW = aV(fS, fV)
858- $Tuple2(fW, true)
888+ let gv = bo(ax(), ak(az, gp))
889+ let gw = aS(gs, gv)
890+ $Tuple2(gw, true)
859891 }
860892 else throw("Invalid attached artifact")
861893 }
862- else $Tuple2(fS, false)
863- let fW = fT._1
864- let fX = fT._2
865- $Tuple2(fW, fX)
894+ else $Tuple2(gs, false)
895+ let gw = gt._1
896+ let gx = gt._2
897+ $Tuple2(gw, gx)
866898 }
867899
868900
869-func fY (cr,aC) = {
870- let fZ = cq(cr)._1
871- if ((fZ == 0))
901+func gy (ce,gz) = {
902+ let eF = cd(ce)._1
903+ if ((eF == 0))
872904 then true
873- else (cv(cr) == aC)
905+ else (ci(ce) == gz)
874906 }
875907
876908
877-func ga (cr,aC) = (cv(cr) == aC)
909+func gA (ce,gz) = (ci(ce) == gz)
878910
879911
880-func gb (gc,aC,cr) = ((((((aj + "_") + gc) + "_") + aC) + "_") + cr)
881-
882-
883-func gd (cr) = {
884- let cx = cv(cr)
885- if ((cx == toBase58String(aq())))
886- then $Tuple2(0, cx)
887- else {
888- let ge = gb(toString(this), cx, cr)
889- let gf = valueOrElse(getInteger(ay(), ge), 0)
890- $Tuple2(gf, cx)
891- }
892- }
893-
894-
895-func gg (cr,fP) = {
896- let gh = invoke(au(), "computeFeeDiscount", [cr], nil)
897- if ((gh == gh))
912+func gB (ce,gp) = {
913+ let gC = invoke(au(), "computeFeeDiscount", [ce], nil)
914+ if ((gC == gC))
898915 then {
899- let gi = {
900- let ct = gh
901- if ($isInstanceOf(ct, "Int"))
916+ let gD = {
917+ let cg = gC
918+ if ($isInstanceOf(cg, "Int"))
902919 then {
903- let gj = ct
904- gj
920+ let gE = cg
921+ gE
905922 }
906923 else throw("Invalid computeFeeDiscount result")
907924 }
908- let gk = fO(fP, gi)
909- let fW = gk._1
910- let fX = gk._2
911- $Tuple2(fW, fX)
925+ let gF = go(gp, gD)
926+ let gw = gF._1
927+ let gx = gF._2
928+ $Tuple2(gw, gx)
912929 }
913930 else throw("Strict value is not equal to itself.")
914931 }
915932
916933
917-func gl (ci) = {
918- let gm = if ((size(ci.payments) > 1))
919- then toBase58String(valueOrErrorMessage(ci.payments[1].assetId, "Invalid artifactId"))
934+func gG (bV) = {
935+ let gH = if ((size(bV.payments) > 1))
936+ then toBase58String(valueOrErrorMessage(bV.payments[1].assetId, "Invalid artifactId"))
920937 else ""
921- gm
938+ gH
922939 }
923940
924941
925-func gn (go) = {
926- let gp = aV(go, cf())
927- let gq = (go - gp)
928- $Tuple2(gp, gq)
942+func gI (gJ) = {
943+ let gK = aS(gJ, bR())
944+ let gL = (gJ - gK)
945+ $Tuple2(gK, gL)
929946 }
930947
931948
932-func gr (gs,gt,gu,gv,gw,gx,gy,gz,gA,dZ,gB,gC) = [IntegerEntry(s, gs), IntegerEntry(t, gt), IntegerEntry(u, gu), IntegerEntry(r, gv), IntegerEntry(q, gw), IntegerEntry(w, gx), IntegerEntry(x, gy), IntegerEntry(v, gz), IntegerEntry(y, gA), IntegerEntry(z, dZ), IntegerEntry(A, gB), IntegerEntry(B, gB)]
949+func gM (gN,gO,gP,gQ,eB,gR,gS,gT,gU,dQ,gV,gW,gX) = [IntegerEntry(u, gN), IntegerEntry(v, gO), IntegerEntry(w, gP), IntegerEntry(t, gQ), IntegerEntry(r, eB), IntegerEntry(y, gR), IntegerEntry(z, gS), IntegerEntry(x, gT), IntegerEntry(A, gU), IntegerEntry(B, dQ), IntegerEntry(C, gV), IntegerEntry(D, gV), IntegerEntry(s, gX)]
933950
934951
935-func gD (gE,gF,gG,gH,gI) = [IntegerEntry(J, gE), IntegerEntry(H, gF), IntegerEntry(I, gG), IntegerEntry(K, gH), IntegerEntry(L, gI)]
952+func gY (gZ,ha,hb,hc,hd) = [IntegerEntry(L, gZ), IntegerEntry(J, ha), IntegerEntry(K, hb), IntegerEntry(M, hc), IntegerEntry(N, hd)]
936953
937954
938-func gJ (am,aC) = [StringEntry(ak(l, am), aC)]
939-
940-
941-func gK (gL,am) = if (gL)
955+func he (hf,am) = if (hf)
942956 then {
943- let gM = ce()
944-[IntegerEntry(ak(k, am), (gM + 1)), IntegerEntry(f, (gM + 1))]
957+ let hg = bQ()
958+[IntegerEntry(ak(k, am), (hg + 1)), IntegerEntry(f, (hg + 1))]
945959 }
946960 else nil
947961
948962
949-func gN (gL,am,gw) = if (gL)
950- then [IntegerEntry(ak(m, am), gw)]
963+func hh (hf,am,eB) = if (hf)
964+ then [IntegerEntry(ak(m, am), eB)]
951965 else nil
952966
953967
954-func gO (am,gP,gQ,gR,dn) = [IntegerEntry(ak(g, am), gP), IntegerEntry(ak(h, am), gQ), IntegerEntry(ak(i, am), gR), IntegerEntry(ak(j, am), dn)]
968+func hi (am,eA,hj,hk,de,hl) = [IntegerEntry(ak(g, am), eA), IntegerEntry(ak(h, am), hj), IntegerEntry(ak(i, am), hk), IntegerEntry(ak(j, am), de), IntegerEntry(ak(n, am), hl)]
955969
956970
957-func gS (gT) = {
958- let eX = ((lastBlock.timestamp / 1000) / 60)
959- let gU = valueOrElse(getInteger(this, D), 0)
960- if ((gU > eX))
971+func hm (hn) = {
972+ let fo = ((bT() / 1000) / 60)
973+ let ho = valueOrElse(getInteger(this, F), 0)
974+ if ((ho > fo))
961975 then throw("TWAP out-of-order")
962976 else {
963- let ff = if ((gU == 0))
964- then eX
965- else gU
966- if ((eX > gU))
977+ let fE = if ((ho == 0))
978+ then fo
979+ else ho
980+ if ((fo > ho))
967981 then {
968- let gV = valueOrElse(getInteger(this, ((E + "_") + toString(gU))), 0)
969- let gW = valueOrElse(getInteger(this, ((F + "_") + toString(gU))), gT)
970- let gX = (gV + ((eX - ff) * gW))
971- let fa = bv(bt(valueOrElse(getString(this, C), "")), aI, toString(eX))
972-[IntegerEntry(ak(E, toString(eX)), gX), IntegerEntry(ak(F, toString(eX)), gT), IntegerEntry(ak(G, toString(eX)), gU), IntegerEntry(D, eX), StringEntry(C, be(fa))]
982+ let hp = valueOrElse(getInteger(this, ((G + "_") + toString(ho))), 0)
983+ let hq = valueOrElse(getInteger(this, ((H + "_") + toString(ho))), hn)
984+ let hr = (hp + ((fo - fE) * hq))
985+ let fr = bf(bd(valueOrElse(getString(this, E), "")), aE, toString(fo))
986+[IntegerEntry(ak(G, toString(fo)), hr), IntegerEntry(ak(H, toString(fo)), hn), IntegerEntry(ak(I, toString(fo)), ho), IntegerEntry(F, fo), StringEntry(E, bb(fr))]
973987 }
974988 else {
975- let gY = valueOrElse(getInteger(this, ak(G, toString(eX))), 0)
976- let gV = valueOrElse(getInteger(this, ak(E, toString(gY))), 0)
977- let gW = valueOrElse(getInteger(this, ak(F, toString(gY))), gT)
978- let gX = (gV + ((eX - gY) * gW))
979-[IntegerEntry(ak(E, toString(eX)), gX), IntegerEntry(ak(F, toString(eX)), gT)]
989+ let hs = valueOrElse(getInteger(this, ak(I, toString(fo))), 0)
990+ let hp = valueOrElse(getInteger(this, ak(G, toString(hs))), 0)
991+ let hq = valueOrElse(getInteger(this, ak(H, toString(hs))), hn)
992+ let hr = (hp + ((fo - hs) * hq))
993+[IntegerEntry(ak(G, toString(fo)), hr), IntegerEntry(ak(H, toString(fo)), hn)]
980994 }
981995 }
982996 }
983997
984998
985-func gZ (cM,cN) = [IntegerEntry(M, cM), IntegerEntry(N, cN)]
999+func ht (cz,cA) = [IntegerEntry(O, cz), IntegerEntry(P, cA)]
9861000
9871001
988-func ha (cR,cS) = [IntegerEntry(O, cR), IntegerEntry(P, cS)]
1002+func hu (cE,cF) = [IntegerEntry(Q, cE), IntegerEntry(R, cF)]
9891003
9901004
991-func hb (cM,cN,hc,hd,he,hf,hg,hh) = {
992- let cR = bJ()
993- let cS = bK()
994- if (((he - hf) != hc))
995- then throw(((((("Invalid AMM state data: " + toString(he)) + " + ") + toString(hf)) + " != ") + toString(hc)))
996- else ((gZ(cM, cN) ++ [IntegerEntry(Q, hc), IntegerEntry(T, hd), IntegerEntry(R, he), IntegerEntry(S, hf), IntegerEntry(V, hg), IntegerEntry(U, hh)]) ++ gS(aT(aV(cM, cR), aV(cN, cS))))
1005+func hv (cz,cA,hw,hx,hy,hz,hA,hB) = {
1006+ let cE = bv()
1007+ let cF = bw()
1008+ if (((hy - hz) != hw))
1009+ then throw(((((("Invalid AMM state data: " + toString(hy)) + " + ") + toString(hz)) + " != ") + toString(hw)))
1010+ else ((ht(cz, cA) ++ [IntegerEntry(S, hw), IntegerEntry(V, hx), IntegerEntry(T, hy), IntegerEntry(U, hz), IntegerEntry(X, hA), IntegerEntry(W, hB)]) ++ hm(aQ(aS(cz, cE), aS(cA, cF))))
9971011 }
9981012
9991013
1000-func hi (am) = [DeleteEntry(ak(g, am)), DeleteEntry(ak(h, am)), DeleteEntry(ak(i, am)), DeleteEntry(ak(j, am)), DeleteEntry(ak(l, am))]
1014+func hC (am) = [DeleteEntry(ak(g, am)), DeleteEntry(ak(h, am)), DeleteEntry(ak(i, am)), DeleteEntry(ak(j, am)), DeleteEntry(ak(l, am)), DeleteEntry(ak(m, am)), DeleteEntry(ak(n, am))]
10011015
10021016
1003-func hj (am,hk) = {
1004- let hl = assetBalance(this, aq())
1005- if ((hk > hl))
1006- then throw(((("Unable to withdraw " + toString(hk)) + " from contract balance ") + toString(hl)))
1007- else [ScriptTransfer(am, hk, aq())]
1017+func hD (am,hE) = {
1018+ let hF = assetBalance(this, aq())
1019+ if ((hE > hF))
1020+ then throw(((("Unable to withdraw " + toString(hE)) + " from contract balance ") + toString(hF)))
1021+ else [ScriptTransfer(am, hE, aq())]
10081022 }
10091023
10101024
1011-func hm (ci) = if ((0 > ci))
1025+func hG (bV) = if ((0 > bV))
10121026 then throw("Balance")
1013- else [IntegerEntry(e, ci)]
1027+ else [IntegerEntry(e, bV)]
10141028
10151029
1016-func hn (ci) = [ScriptTransfer(as(), ci, aq())]
1030+func hH (bV) = [ScriptTransfer(as(), bV, aq())]
10171031
10181032
1019-func ho (hp,ci) = if (hp)
1020- then [Burn(valueOrErrorMessage(ci.payments[1].assetId, "Invalid artifact"), 1)]
1033+func hI (hJ,bV) = if (hJ)
1034+ then [Burn(valueOrErrorMessage(bV.payments[1].assetId, "Invalid artifact"), 1)]
10211035 else nil
10221036
10231037
1024-@Callable(ci)
1025-func pause () = if ((ci.caller != ao()))
1038+@Callable(bV)
1039+func pause () = if ((bV.caller != ao()))
10261040 then throw("Invalid pause params")
1027- else [BooleanEntry(o, true)]
1028-
1029-
1030-
1031-@Callable(ci)
1032-func unpause () = if ((ci.caller != ao()))
1033- then throw("Invalid unpause params")
1034- else [BooleanEntry(o, false)]
1035-
1036-
1037-
1038-@Callable(ci)
1039-func setCloseOnly () = if ((ci.caller != ao()))
1040- then throw("Invalid setCloseOnly params")
10411041 else [BooleanEntry(p, true)]
10421042
10431043
10441044
1045-@Callable(ci)
1046-func unsetCloseOnly () = if ((ci.caller != ao()))
1047- then throw("Invalid unsetCloseOnly params")
1045+@Callable(bV)
1046+func unpause () = if ((bV.caller != ao()))
1047+ then throw("Invalid unpause params")
10481048 else [BooleanEntry(p, false)]
10491049
10501050
10511051
1052-@Callable(ci)
1053-func addLiquidity (cH) = if (if ((ci.caller != ao()))
1052+@Callable(bV)
1053+func setCloseOnly () = if ((bV.caller != ao()))
1054+ then throw("Invalid setCloseOnly params")
1055+ else [BooleanEntry(q, true)]
1056+
1057+
1058+
1059+@Callable(bV)
1060+func unsetCloseOnly () = if ((bV.caller != ao()))
1061+ then throw("Invalid unsetCloseOnly params")
1062+ else [BooleanEntry(q, false)]
1063+
1064+
1065+
1066+@Callable(bV)
1067+func addLiquidity (cu) = if (if ((bV.caller != ao()))
10541068 then true
1055- else (0 >= cH))
1069+ else (0 >= cu))
10561070 then throw("Invalid addLiquidity params")
10571071 else {
1058- let cM = bH()
1059- let cN = bI()
1060- let cR = bJ()
1061- let cS = bK()
1062- let hq = aT(aV(cM, cR), aV(cN, cS))
1063- let hr = (cM + cH)
1064- let hs = (aT(aV(hr, cR), hq) - cN)
1065- let ht = (cN + hs)
1066- let hu = fE(dE(), hr, ht)
1067- let hv = hu._1
1068- let hw = hu._2
1069- let eQ = hu._3
1070- let hx = if ((eQ != 0))
1072+ let cz = bt()
1073+ let cA = bu()
1074+ let cE = bv()
1075+ let cF = bw()
1076+ let hK = aQ(aS(cz, cE), aS(cA, cF))
1077+ let hL = (cz + cu)
1078+ let hM = (aQ(aS(hL, cE), hK) - cA)
1079+ let hN = (cA + hM)
1080+ let hO = gd(dv(), hL, hN)
1081+ let hP = hO._1
1082+ let hQ = hO._2
1083+ let gh = hO._3
1084+ let hR = if ((gh != 0))
10711085 then {
1072- let hx = invoke(at(), "exchangeFreeAndLocked", [eQ], nil)
1073- if ((hx == hx))
1086+ let hR = invoke(at(), "exchangeFreeAndLocked", [gh], nil)
1087+ if ((hR == hR))
10741088 then nil
10751089 else throw("Strict value is not equal to itself.")
10761090 }
10771091 else nil
1078- if ((hx == hx))
1079- then (gZ(hr, ht) ++ ha(hv, hw))
1092+ if ((hR == hR))
1093+ then (ht(hL, hN) ++ hu(hP, hQ))
10801094 else throw("Strict value is not equal to itself.")
10811095 }
10821096
10831097
10841098
1085-@Callable(ci)
1086-func removeLiquidity (cH) = if (if ((ci.caller != ao()))
1099+@Callable(bV)
1100+func removeLiquidity (cu) = if (if ((bV.caller != ao()))
10871101 then true
1088- else (cH >= 0))
1102+ else (cu >= 0))
10891103 then throw("Invalid removeLiquidity params")
10901104 else {
1091- let cM = bH()
1092- let cN = bI()
1093- let cR = bJ()
1094- let cS = bK()
1095- let hq = aT(aV(cM, cR), aV(cN, cS))
1096- let hr = (cM - cH)
1097- let hy = bc((aT(aV(hr, cR), hq) - cN))
1098- let ht = (cN - hy)
1099- let hz = fE(dE(), hr, ht)
1100- let hv = hz._1
1101- let hw = hz._2
1102- let eQ = hz._3
1103- let hx = if ((eQ != 0))
1105+ let cz = bt()
1106+ let cA = bu()
1107+ let cE = bv()
1108+ let cF = bw()
1109+ let hK = aQ(aS(cz, cE), aS(cA, cF))
1110+ let hL = (cz - cu)
1111+ let hS = aZ((aQ(aS(hL, cE), hK) - cA))
1112+ let hN = (cA - hS)
1113+ let hT = gd(dv(), hL, hN)
1114+ let hP = hT._1
1115+ let hQ = hT._2
1116+ let gh = hT._3
1117+ let hR = if ((gh != 0))
11041118 then {
1105- let hx = invoke(at(), "exchangeFreeAndLocked", [eQ], nil)
1106- if ((hx == hx))
1119+ let hR = invoke(at(), "exchangeFreeAndLocked", [gh], nil)
1120+ if ((hR == hR))
11071121 then nil
11081122 else throw("Strict value is not equal to itself.")
11091123 }
11101124 else nil
1111- if ((hx == hx))
1112- then (gZ(hr, ht) ++ ha(hv, hw))
1125+ if ((hR == hR))
1126+ then (ht(hL, hN) ++ hu(hP, hQ))
11131127 else throw("Strict value is not equal to itself.")
11141128 }
11151129
11161130
11171131
1118-@Callable(ci)
1119-func changeSettings (gs,gt,gu,gv,gw,gx,gy,gz,gA,dZ,gB,gC) = if ((ci.caller != ao()))
1132+@Callable(bV)
1133+func changeSettings (gN,gO,gP,gQ,eB,gR,gS,gT,gU,dQ,gV,gW,gX) = if ((bV.caller != ao()))
11201134 then throw("Invalid changeSettings params")
1121- else gr(gs, gt, gu, gv, gw, gx, gy, gz, gA, dZ, gB, gC)
1135+ else gM(gN, gO, gP, gQ, eB, gR, gS, gT, gU, dQ, gV, gW, gX)
11221136
11231137
11241138
1125-@Callable(ci)
1126-func initialize (cM,cN,gv,gs,gt,gu,gw,hA,hB,hC,hD,gx,gy,gz,gA,dZ,gB,gC) = if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if ((0 >= cM))
1139+@Callable(bV)
1140+func initialize (cz,cA,gQ,gN,gO,gP,eB,hU,hV,hW,hX,gR,gS,gT,gU,dQ,gV,gW,gX) = if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if ((0 >= cz))
11271141 then true
1128- else (0 >= cN))
1142+ else (0 >= cA))
11291143 then true
1130- else (0 >= gv))
1144+ else (0 >= gQ))
11311145 then true
1132- else (0 >= gs))
1146+ else (0 >= gN))
11331147 then true
1134- else (0 >= gt))
1148+ else (0 >= gO))
11351149 then true
1136- else (0 >= gu))
1150+ else (0 >= gP))
11371151 then true
1138- else (0 >= gw))
1152+ else (0 >= eB))
11391153 then true
1140- else (0 >= gx))
1154+ else (0 >= gR))
11411155 then true
1142- else (0 >= gy))
1156+ else (0 >= gS))
11431157 then true
1144- else (0 >= gz))
1158+ else (0 >= gT))
11451159 then true
1146- else (0 >= gA))
1160+ else (0 >= gU))
11471161 then true
1148- else (0 >= dZ))
1162+ else (0 >= dQ))
11491163 then true
1150- else (0 >= gB))
1164+ else (0 >= gV))
11511165 then true
1152- else (gB > aM))
1166+ else (gV > aI))
11531167 then true
1154- else (0 >= gC))
1168+ else (0 >= gW))
11551169 then true
1156- else cC())
1170+ else (0 >= gX))
1171+ then true
1172+ else cp())
11571173 then throw("Invalid initialize parameters")
1158- else ((((hb(cM, cN, 0, 0, 0, 0, 0, 0) ++ gr(gs, gt, gu, gv, gw, gx, gy, gz, gA, dZ, gB, gC)) ++ gD((lastBlock.timestamp + gv), 0, 0, 0, 0)) ++ hm(0)) ++ [BooleanEntry(n, true), StringEntry(d, hA), StringEntry(a, hB), StringEntry(b, hC), StringEntry(W, hD)])
1174+ else ((((hv(cz, cA, 0, 0, 0, 0, 0, 0) ++ gM(gN, gO, gP, gQ, eB, gR, gS, gT, gU, dQ, gV, gW, gX)) ++ gY((bT() + gQ), 0, 0, 0, 0)) ++ hG(0)) ++ [BooleanEntry(o, true), StringEntry(d, hU), StringEntry(a, hV), StringEntry(b, hW), StringEntry(Y, hX)])
11591175
11601176
11611177
1162-@Callable(ci)
1163-func increasePosition (hE,hF,hG,hH) = {
1164- let hI = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1165- if ((hI == hI))
1178+@Callable(bV)
1179+func increasePosition (hY,hZ,ia,ib) = {
1180+ let ic = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1181+ if ((ic == ic))
11661182 then {
1167- let cr = ch(ci)
1168- let hJ = ci.payments[0].amount
1169- let aC = ci.payments[0].assetId
1170- let hK = toBase58String(value(aC))
1171- let hL = (aC == aq())
1172- let hM = aB(hK)
1173- if (if (if (if (if (if (if (if (if (if ((hE != aG))
1174- then (hE != aH)
1183+ let ce = bU(bV)
1184+ let id = bV.payments[0].amount
1185+ let gz = bV.payments[0].assetId
1186+ let ie = toBase58String(value(gz))
1187+ let if = (gz == aq())
1188+ if (if (if (if (if (if (if (if (if (if ((hY != aC))
1189+ then (hY != aD)
11751190 else false)
11761191 then true
1177- else (0 >= hJ))
1192+ else (0 >= id))
11781193 then true
1179- else !(cC()))
1194+ else !(cp()))
11801195 then true
1181- else if (!(hL))
1182- then !(hM)
1183- else false)
1196+ else !(if))
11841197 then true
1185- else !(fY(cr, hK)))
1198+ else !(gy(ce, ie)))
11861199 then true
1187- else !(cj(aT(aM, hF), bG(), true)))
1200+ else !(bW(aQ(aI, hZ), bs(), true)))
11881201 then true
1189- else cD())
1202+ else cq())
11901203 then true
1191- else cE())
1204+ else cr())
11921205 then true
1193- else dL())
1206+ else dC())
11941207 then throw("Invalid increasePosition parameters")
11951208 else {
1196- let hN = gg(cr, gl(ci))
1197- let fW = hN._1
1198- let fX = hN._2
1199- let hk = aT(hJ, (aV(fW, hF) + aM))
1200- let hO = (hJ - hk)
1201- let hP = if (hM)
1209+ let ig = gB(ce, gG(bV))
1210+ let gw = ig._1
1211+ let gx = ig._2
1212+ let hE = aQ(id, (aS(gw, hZ) + aI))
1213+ let ih = (id - hE)
1214+ let ii = invoke(aw(), "acceptPaymentWithLink", [ce, ib], [AttachedPayment(aq(), ih)])
1215+ if ((ii == ii))
12021216 then {
1203- let hQ = invoke(ay(), "borrow", [cr], [AttachedPayment(aC, hk)])
1204- if ((hQ == hQ))
1217+ let ij = {
1218+ let cg = ii
1219+ if ($isInstanceOf(cg, "Int"))
1220+ then {
1221+ let gE = cg
1222+ gE
1223+ }
1224+ else throw("Invalid referrerFee")
1225+ }
1226+ let ik = (ih - ij)
1227+ let il = cd(ce)
1228+ let eF = il._1
1229+ let eG = il._2
1230+ let eH = il._3
1231+ let eI = il._4
1232+ let eJ = il._5
1233+ let im = (eF == 0)
1234+ let in = if ((eF > 0))
1235+ then (hY == aC)
1236+ else (hY == aD)
1237+ let io = if (!(im))
1238+ then in
1239+ else false
1240+ let ip = (hY == aC)
1241+ let iq = if (if (im)
1242+ then true
1243+ else io)
12051244 then {
1206- let hR = assetBalance(this, aq())
1207- if ((hR == hR))
1208- then {
1209- let hS = invoke(az(), "swap", [toBase58String(aq()), 0], [AttachedPayment(aC, hO)])
1210- if ((hS == hS))
1211- then {
1212- let hT = assetBalance(this, aq())
1213- if ((hT == hT))
1214- then {
1215- let hU = (hT - hR)
1216- if ((hU == hU))
1217- then hU
1218- else throw("Strict value is not equal to itself.")
1219- }
1220- else throw("Strict value is not equal to itself.")
1221- }
1222- else throw("Strict value is not equal to itself.")
1245+ let ir = aS(hE, hZ)
1246+ let is = cD(ip, ir)
1247+ let cK = is._1
1248+ let cH = is._2
1249+ let cI = is._3
1250+ let eP = is._4
1251+ if (if ((ia != 0))
1252+ then (ia > aZ(cK))
1253+ else false)
1254+ then throw(((("Limit error: " + toString(aZ(cK))) + " < ") + toString(ia)))
1255+ else {
1256+ let fd = (eF + cK)
1257+ let it = (bA() + (if ((fd > 0))
1258+ then ir
1259+ else 0))
1260+ let iu = (bz() + (if ((0 > fd))
1261+ then ir
1262+ else 0))
1263+ let iv = cZ(eF, eG, eI, eJ, hE)
1264+ let dh = iv._1
1265+ let eX = iv._2
1266+ let eY = iv._3
1267+ let cY = iv._4
1268+ if (!(dJ(cH, cI)))
1269+ then throw("Over max spread limit")
1270+ else if (!(dN(it, iu)))
1271+ then throw("Over max open notional")
1272+ else $Tuple14(fd, dh, (eH + ir), cb(fd), bT(), cI, cH, eP, (by() + ir), (bP() + (if ((fd > 0))
1273+ then aZ(cK)
1274+ else 0)), (bO() + (if ((0 > fd))
1275+ then aZ(cK)
1276+ else 0)), it, iu, cY)
12231277 }
1278+ }
1279+ else {
1280+ let ir = aS(hE, hZ)
1281+ let iw = ed(toString(bV.caller), aM)
1282+ let eS = iw._1
1283+ let ec = iw._2
1284+ if ((eS > ir))
1285+ then throw("Use decreasePosition to decrease position size")
1286+ else throw("Close position first")
1287+ }
1288+ let fd = iq._1
1289+ let ix = iq._2
1290+ let ff = iq._3
1291+ let iy = iq._4
1292+ let iz = iq._5
1293+ let cI = iq._6
1294+ let cH = iq._7
1295+ let eP = iq._8
1296+ let iA = iq._9
1297+ let iB = iq._10
1298+ let iC = iq._11
1299+ let it = iq._12
1300+ let iu = iq._13
1301+ let cY = iq._14
1302+ let iD = gI((ik + cY))
1303+ let gK = iD._1
1304+ let gL = iD._2
1305+ let iE = if (if)
1306+ then {
1307+ let iE = invoke(at(), "addLocked", [false], [AttachedPayment(aq(), hE)])
1308+ if ((iE == iE))
1309+ then nil
12241310 else throw("Strict value is not equal to itself.")
12251311 }
1226- else throw("Strict value is not equal to itself.")
1227- }
1228- else hO
1229- if ((hP == hP))
1230- then {
1231- let hV = invoke(aw(), "acceptPaymentWithLink", [cr, hH], [AttachedPayment(aq(), hP)])
1232- if ((hV == hV))
1312+ else nil
1313+ if ((iE == iE))
12331314 then {
1234- let hW = {
1235- let ct = hV
1236- if ($isInstanceOf(ct, "Int"))
1237- then {
1238- let gj = ct
1239- gj
1240- }
1241- else throw("Invalid referrerFee")
1242- }
1243- let hX = (hP - hW)
1244- let hY = cq(cr)
1245- let fZ = hY._1
1246- let hZ = hY._2
1247- let ia = hY._3
1248- let ib = hY._4
1249- let ic = (fZ == 0)
1250- let id = if ((fZ > 0))
1251- then (hE == aG)
1252- else (hE == aH)
1253- let ie = if (!(ic))
1254- then id
1255- else false
1256- let if = (hE == aG)
1257- let ig = if (if (ic)
1258- then true
1259- else ie)
1315+ let iF = invoke(at(), "addFree", nil, [AttachedPayment(aq(), gL)])
1316+ if ((iF == iF))
12601317 then {
1261- let ih = aV(hk, hF)
1262- let ii = cQ(if, ih)
1263- let cX = ii._1
1264- let cU = ii._2
1265- let cV = ii._3
1266- let eS = ii._4
1267- if (if ((hG != 0))
1268- then (hG > bc(cX))
1269- else false)
1270- then throw(((("Limit error: " + toString(bc(cX))) + " < ") + toString(hG)))
1271- else {
1272- let ij = (fZ + cX)
1273- let ik = (bO() + (if ((ij > 0))
1274- then ih
1275- else 0))
1276- let il = (bN() + (if ((0 > ij))
1277- then ih
1278- else 0))
1279- let im = dh(fZ, hZ, ib, hk)
1280- let dq = im._1
1281- let ek = im._2
1282- let el = im._3
1283- if (!(dS(cU, cV)))
1284- then throw("Over max spread limit")
1285- else if (!(dW(ik, il)))
1286- then throw("Over max open notional")
1287- else $Tuple12(ij, dq, (ia + ih), co(ij), cV, cU, eS, (bM() + ih), (cd() + (if ((ij > 0))
1288- then bc(cX)
1289- else 0)), (cc() + (if ((0 > ij))
1290- then bc(cX)
1291- else 0)), ik, il)
1292- }
1293- }
1294- else {
1295- let ih = aV(hk, hF)
1296- let in = eq(toString(ci.caller), aP)
1297- let io = in._1
1298- let ep = in._2
1299- if ((io > ih))
1300- then throw("Use decreasePosition to decrease position size")
1301- else throw("Close position first")
1302- }
1303- let ij = ig._1
1304- let ip = ig._2
1305- let iq = ig._3
1306- let ir = ig._4
1307- let cV = ig._5
1308- let cU = ig._6
1309- let eS = ig._7
1310- let eV = ig._8
1311- let eT = ig._9
1312- let eU = ig._10
1313- let ik = ig._11
1314- let il = ig._12
1315- let is = gn(hX)
1316- let gp = is._1
1317- let gq = is._2
1318- let it = if (hL)
1319- then {
1320- let it = invoke(at(), "addLocked", [false], [AttachedPayment(aq(), hk)])
1321- if ((it == it))
1322- then nil
1323- else throw("Strict value is not equal to itself.")
1324- }
1325- else nil
1326- if ((it == it))
1327- then {
1328- let iu = invoke(at(), "addFree", nil, [AttachedPayment(aq(), gq)])
1329- if ((iu == iu))
1318+ let iG = invoke(au(), "notifyFees", [ce, ik], nil)
1319+ if ((iG == iG))
13301320 then {
1331- let iv = invoke(au(), "notifyFees", [cr, hX], nil)
1332- if ((iv == iv))
1333- then {
1334- let iw = invoke(au(), "notifyNotional", [cr, iq], nil)
1335- if ((iw == iw))
1336- then (((((((gO(cr, ij, ip, iq, ir) ++ gK(ic, cr)) ++ gN(ic, cr, fW)) ++ gJ(cr, hK)) ++ hb(cU, cV, eS, eV, eT, eU, ik, il)) ++ hn(gp)) ++ hm((bE() + hk))) ++ ho(fX, ci))
1337- else throw("Strict value is not equal to itself.")
1338- }
1321+ let iH = invoke(au(), "notifyNotional", [ce, ff], nil)
1322+ if ((iH == iH))
1323+ then ((((((hi(ce, fd, ix, ff, iy, iz) ++ he(im, ce)) ++ hh(im, ce, gw)) ++ hv(cH, cI, eP, iA, iB, iC, it, iu)) ++ hH(gK)) ++ hG((bp() + hE))) ++ hI(gx, bV))
13391324 else throw("Strict value is not equal to itself.")
13401325 }
13411326 else throw("Strict value is not equal to itself.")
13521337
13531338
13541339
1355-@Callable(ci)
1340+@Callable(bV)
13561341 func addMargin () = {
1357- let hI = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1358- if ((hI == hI))
1342+ let ic = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1343+ if ((ic == ic))
13591344 then {
1360- let cr = toString(ci.caller)
1361- let hk = ci.payments[0].amount
1362- let aC = ci.payments[0].assetId
1363- let hK = toBase58String(value(aC))
1364- let hL = (aC == aq())
1365- let hM = aB(hK)
1366- if (if (if (if (if (if (if (if (!(hL))
1367- then !(hM)
1368- else false)
1345+ let ce = toString(bV.caller)
1346+ let hE = bV.payments[0].amount
1347+ let gz = bV.payments[0].assetId
1348+ let ie = toBase58String(value(gz))
1349+ let if = (gz == aq())
1350+ if (if (if (if (if (if (if (!(if))
13691351 then true
1370- else !(cB(toString(ci.caller))))
1352+ else !(co(toString(bV.caller))))
13711353 then true
1372- else !(ga(cr, hK)))
1354+ else !(gA(ce, ie)))
13731355 then true
1374- else !(cC()))
1356+ else !(cp()))
13751357 then true
1376- else cD())
1358+ else cq())
13771359 then true
1378- else cE())
1360+ else cr())
13791361 then true
1380- else dL())
1362+ else dC())
13811363 then throw("Invalid addMargin parameters")
13821364 else {
1383- let ix = cq(cr)
1384- let fZ = ix._1
1385- let hZ = ix._2
1386- let ia = ix._3
1387- let ib = ix._4
1388- let it = if (hL)
1365+ let iI = cd(ce)
1366+ let eF = iI._1
1367+ let eG = iI._2
1368+ let eH = iI._3
1369+ let eI = iI._4
1370+ let eJ = iI._5
1371+ let iE = invoke(at(), "addLocked", [false], [AttachedPayment(aq(), hE)])
1372+ if ((iE == iE))
13891373 then {
1390- let it = invoke(at(), "addLocked", [false], [AttachedPayment(aq(), hk)])
1391- if ((it == it))
1392- then nil
1374+ let cY = cU(eG, eJ)
1375+ let iJ = if ((cY > 0))
1376+ then {
1377+ let iK = gI(cY)
1378+ let gK = iK._1
1379+ let gL = iK._2
1380+ let iL = invoke(at(), "withdrawLocked", [gK], nil)
1381+ if ((iL == iL))
1382+ then {
1383+ let iM = invoke(at(), "exchangeFreeAndLocked", [-(gL)], nil)
1384+ if ((iM == iM))
1385+ then hH(gK)
1386+ else throw("Strict value is not equal to itself.")
1387+ }
1388+ else throw("Strict value is not equal to itself.")
1389+ }
1390+ else nil
1391+ if ((iJ == iJ))
1392+ then ((hi(ce, eF, ((eG - cY) + hE), eH, eI, bT()) ++ hG(((bp() + hE) - cY))) ++ iJ)
13931393 else throw("Strict value is not equal to itself.")
13941394 }
1395- else nil
1396- if ((it == it))
1397- then (gO(cr, fZ, (hZ + hk), ia, ib) ++ hm((bE() + hk)))
13981395 else throw("Strict value is not equal to itself.")
13991396 }
14001397 }
14031400
14041401
14051402
1406-@Callable(ci)
1407-func removeMargin (hk) = {
1408- let hI = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1409- if ((hI == hI))
1403+@Callable(bV)
1404+func removeMargin (hE) = {
1405+ let ic = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1406+ if ((ic == ic))
14101407 then {
1411- let cr = toString(ci.caller)
1412- if (if (if (if (if ((0 >= hk))
1408+ let ce = toString(bV.caller)
1409+ if (if (if (if (if ((0 >= hE))
14131410 then true
1414- else !(cB(cr)))
1411+ else !(co(ce)))
14151412 then true
1416- else !(cC()))
1413+ else !(cp()))
14171414 then true
1418- else cD())
1415+ else cq())
14191416 then true
1420- else dL())
1417+ else dC())
14211418 then throw("Invalid removeMargin parameters")
14221419 else {
1423- let iy = cq(cr)
1424- let fZ = iy._1
1425- let hZ = iy._2
1426- let ia = iy._3
1427- let ib = iy._4
1428- let iz = -(hk)
1429- let iA = dh(fZ, hZ, ib, iz)
1430- let dq = iA._1
1431- let dr = iA._2
1432- if ((dr != 0))
1420+ let iN = cd(ce)
1421+ let eF = iN._1
1422+ let eG = iN._2
1423+ let eH = iN._3
1424+ let eI = iN._4
1425+ let eJ = iN._5
1426+ let iO = cZ(eF, eG, eI, eJ, -(hE))
1427+ let dh = iO._1
1428+ let di = iO._2
1429+ let dd = iO._3
1430+ let cY = iO._4
1431+ if ((di != 0))
14331432 then throw("Invalid removed margin amount")
14341433 else {
1435- let iB = ev(dq, dr, ia)
1436- if (!(cj(iB, bG(), true)))
1437- then throw(((("Too much margin removed: " + toString(iB)) + " < ") + toString(bG())))
1434+ let fi = ei(dh, di, eH)
1435+ if (!(bW(fi, bs(), true)))
1436+ then throw(((("Too much margin removed: " + toString(fi)) + " < ") + toString(bs())))
14381437 else {
1439- let iC = toBase58String(aq())
1440- let iD = gd(cr)
1441- let iE = iD._1
1442- let iF = iD._2
1443- let iG = if ((hk > iE))
1444- then iE
1445- else hk
1446- let iH = if ((iE > hk))
1447- then 0
1448- else (hk - iE)
1449- let iI = (iE - iG)
1450- let iJ = if ((iI > 0))
1451- then nil
1452- else gJ(cr, iC)
1453- let iK = if (((iG + iH) != hk))
1454- then throw(((((("toRepay=" + toString(iG)) + " + toWithdraw=") + toString(iH)) + " != ") + toString(hk)))
1438+ let iP = gI(cY)
1439+ let gK = iP._1
1440+ let gL = iP._2
1441+ let iJ = if ((cY > 0))
1442+ then {
1443+ let iM = invoke(at(), "exchangeFreeAndLocked", [-(gL)], nil)
1444+ if ((iM == iM))
1445+ then hH(gK)
1446+ else throw("Strict value is not equal to itself.")
1447+ }
14551448 else nil
1456- if ((iK == iK))
1449+ if ((iJ == iJ))
14571450 then {
1458- let iL = if ((iH > 0))
1459- then {
1460- let iL = invoke(at(), "withdrawLocked", [iH], nil)
1461- if ((iL == iL))
1462- then nil
1463- else throw("Strict value is not equal to itself.")
1464- }
1465- else nil
1451+ let iL = invoke(at(), "withdrawLocked", [(hE + gK)], nil)
14661452 if ((iL == iL))
1467- then {
1468- let iM = if ((iG > 0))
1469- then {
1470- let iN = invoke(ay(), "repay", [cr, iG, iF], nil)
1471- if ((iN == iN))
1472- then [ScriptTransfer(ci.caller, iG, fromBase58String(iF))]
1473- else throw("Strict value is not equal to itself.")
1474- }
1475- else nil
1476- if ((iM == iM))
1477- then ((((gO(cr, fZ, dq, ia, co(fZ)) ++ (if ((iH > 0))
1478- then hj(ci.caller, iH)
1479- else nil)) ++ hm((bE() - hk))) ++ iJ) ++ iM)
1480- else throw("Strict value is not equal to itself.")
1481- }
1453+ then (((hi(ce, eF, dh, eH, cb(eF), bT()) ++ hD(bV.caller, hE)) ++ hG(((bp() - hE) - cY))) ++ iJ)
14821454 else throw("Strict value is not equal to itself.")
14831455 }
14841456 else throw("Strict value is not equal to itself.")
14911463
14921464
14931465
1494-@Callable(ci)
1495-func closePosition (gP,iO,iP) = {
1496- let hI = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1497- if ((hI == hI))
1466+@Callable(bV)
1467+func closePosition (eA,eC,eD) = {
1468+ let ic = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1469+ if ((ic == ic))
14981470 then {
1499- let cr = ch(ci)
1500- let iQ = valueOrErrorMessage(addressFromString(cr), "Invalid caller")
1501- let cA = cy(cr)
1502- if (if (if (if (if (if (!(cB(cr)))
1471+ let ce = bU(bV)
1472+ let iQ = valueOrErrorMessage(addressFromString(ce), "Invalid caller")
1473+ let cn = cl(ce)
1474+ if (if (if (if (if (if (!(co(ce)))
15031475 then true
1504- else !(cC()))
1476+ else !(cp()))
15051477 then true
1506- else cD())
1478+ else cq())
15071479 then true
1508- else (0 >= gP))
1480+ else (0 >= eA))
15091481 then true
1510- else (0 > iO))
1482+ else (0 > eC))
15111483 then true
1512- else dL())
1484+ else dC())
15131485 then throw("Invalid closePosition parameters")
15141486 else {
1515- let iR = cq(cr)
1516- let fZ = iR._1
1517- let hZ = iR._2
1518- let ia = iR._3
1519- let ib = iR._4
1520- let iS = if ((bc(fZ) > gP))
1521- then {
1522- let iT = dD((fZ > 0), gP, true)
1523- let eL = iT._1
1524- let cU = iT._2
1525- let cV = iT._3
1526- let eS = iT._4
1527- let eK = if ((fZ > 0))
1528- then -(gP)
1529- else gP
1530- let iU = eq(cr, aP)
1531- let io = iU._1
1532- let ep = iU._2
1533- let iV = ez(cr, aP)
1534- let iW = aT(bc(eK), bc(fZ))
1535- let eP = aV(ep, iW)
1536- let iX = aV(aV(io, iW), cA)
1537- let iY = dh(fZ, hZ, ib, ep)._1
1538- let iZ = dh(fZ, hZ, ib, eP)._2
1539- let ja = (ep - eP)
1540- let jb = if ((fZ > 0))
1541- then ((io - eL) - ja)
1542- else ((ja + io) - eL)
1543- let iq = bc(jb)
1544- let ij = (fZ + eK)
1545- let jc = co(ij)
1546- let jd = (ia - iq)
1547- let eV = (bM() - jd)
1548- let je = if ((fZ > 0))
1549- then (aV((iq + ja), iV) - ja)
1550- else (aV((iq - ja), iV) - ja)
1551- let jf = ((iY - (je + ja)) - iX)
1552- let jg = if ((0 > jf))
1553- then throw("Margin error: unable to pay close fee")
1554- else jf
1555- if (if ((iO != 0))
1556- then (iO > eL)
1557- else false)
1558- then throw(((("Limit error: " + toString(eL)) + " < ") + toString(iO)))
1559- else $Tuple16(ij, if (iP)
1560- then (je + jg)
1561- else je, iq, jc, iZ, eP, if (iP)
1562- then 0
1563- else jg, cU, cV, eS, eV, (cd() - (if ((ij > 0))
1564- then bc(eK)
1565- else 0)), (cc() - (if ((0 > ij))
1566- then bc(eK)
1567- else 0)), (bO() - (if ((ij > 0))
1568- then jd
1569- else 0)), (bN() - (if ((0 > ij))
1570- then jd
1571- else 0)), iX)
1572- }
1573- else if ((gP > bc(fZ)))
1574- then throw("Invalid closePosition parameters")
1575- else {
1576- let jh = eM(cr, true)
1577- let el = jh._1
1578- let iZ = jh._2
1579- let eP = jh._3
1580- let ji = jh._4
1581- let cU = jh._5
1582- let cV = jh._6
1583- let eS = jh._7
1584- let eV = jh._8
1585- let eL = jh._9
1586- let eT = jh._10
1587- let eU = jh._11
1588- let ik = jh._12
1589- let il = jh._13
1590- let iX = aV(eL, cA)
1591- let jf = (bc(ji) - iX)
1592- let jg = if ((0 > jf))
1593- then throw(((((((("Margin error: unable to pay close fee: " + toString(iX)) + " margin: ") + toString(ji)) + " fee percent: ") + toString(cA)) + " notional: ") + toString(eL)))
1594- else jf
1595- if (if ((iO != 0))
1596- then (iO > eL)
1597- else false)
1598- then throw(((("Limit error: " + toString(eL)) + " < ") + toString(iO)))
1599- else $Tuple16(0, 0, 0, 0, iZ, eP, jg, cU, cV, eS, eV, eT, eU, ik, il, iX)
1600- }
1601- let ij = iS._1
1602- let je = iS._2
1603- let iq = iS._3
1604- let jc = iS._4
1605- let iZ = iS._5
1606- let eP = iS._6
1607- let jg = iS._7
1608- let cU = iS._8
1609- let cV = iS._9
1610- let eS = iS._10
1611- let eV = iS._11
1612- let eT = iS._12
1613- let eU = iS._13
1614- let ik = iS._14
1615- let il = iS._15
1616- let iX = iS._16
1617- if ((iZ > 0))
1618- then throw("Unable to close position with bad debt")
1487+ let iR = cd(ce)
1488+ let eF = iR._1
1489+ let eG = iR._2
1490+ let eH = iR._3
1491+ let eI = iR._4
1492+ let iS = ez(ce, eA, cn, eC, eD, true)
1493+ let fd = iS._1
1494+ let fm = iS._2
1495+ let ff = iS._3
1496+ let fg = iS._4
1497+ let eZ = iS._5
1498+ let eU = iS._6
1499+ let fl = iS._7
1500+ let cH = iS._8
1501+ let cI = iS._9
1502+ let eP = iS._10
1503+ let iA = iS._11
1504+ let iB = iS._12
1505+ let iC = iS._13
1506+ let it = iS._14
1507+ let iu = iS._15
1508+ let iT = iS._16
1509+ if ((eZ > 0))
1510+ then throw("Invalid closePosition parameters: bad debt")
16191511 else {
1620- let jj = (ij != 0)
1621- let jk = (jg + iX)
1622- let jl = (bE() - jk)
1623- let jm = if ((0 > jl))
1624- then $Tuple2(0, bc(jl))
1625- else $Tuple2(jl, 0)
1626- let jn = jm._1
1627- let jo = jm._2
1628- let jp = gd(cr)
1629- let iE = jp._1
1630- let iF = jp._2
1631- let jq = if ((iE > 0))
1632- then if ((jk >= iE))
1633- then {
1634- let iN = invoke(ay(), "repay", [cr, iE, iF], nil)
1635- if ((iN == iN))
1636- then $Tuple3(iE, (jk - iE), jj)
1637- else throw("Strict value is not equal to itself.")
1638- }
1639- else {
1640- let jr = invoke(ay(), if (jj)
1641- then "repay"
1642- else "realizePartiallyAndClose", [cr, jk, iF], nil)
1643- if ((jr == jr))
1644- then $Tuple3(jk, 0, false)
1645- else throw("Strict value is not equal to itself.")
1646- }
1647- else $Tuple3(0, jk, false)
1648- if ((jq == jq))
1512+ let eM = (fd != 0)
1513+ let iU = (fl + iT)
1514+ let iV = (bp() - iU)
1515+ let iW = if ((0 > iV))
1516+ then 0
1517+ else iV
1518+ let iL = invoke(at(), "withdrawLocked", [iU], nil)
1519+ if ((iL == iL))
16491520 then {
1650- let js = jq._3
1651- let jt = jq._2
1652- let ju = jq._1
1653- let jv = if ((jt >= iX))
1654- then $Tuple3(ju, (jt - iX), iX)
1655- else {
1656- let jw = (iX - jt)
1657- let jx = (ju - jw)
1658- let hR = assetBalance(this, aq())
1659- if ((hR == hR))
1521+ let iX = gI(iT)
1522+ let gK = iX._1
1523+ let gL = iX._2
1524+ let iF = invoke(at(), "addFree", nil, [AttachedPayment(aq(), gL)])
1525+ if ((iF == iF))
1526+ then {
1527+ let iG = invoke(au(), "notifyFees", [ce, iT], nil)
1528+ if ((iG == iG))
16601529 then {
1661- let hS = invoke(az(), "swap", [toBase58String(aq()), 0], [AttachedPayment(fromBase58String(iF), jw)])
1662- if ((hS == hS))
1663- then {
1664- let hT = assetBalance(this, aq())
1665- if ((hT == hT))
1666- then {
1667- let hU = (hT - hR)
1668- if ((hU == hU))
1669- then $Tuple3(jx, 0, (jt + hU))
1670- else throw("Strict value is not equal to itself.")
1671- }
1672- else throw("Strict value is not equal to itself.")
1673- }
1674- else throw("Strict value is not equal to itself.")
1675- }
1676- else throw("Strict value is not equal to itself.")
1677- }
1678- if ((jv == jv))
1679- then {
1680- let jy = jv._3
1681- let jz = jv._2
1682- let jx = jv._1
1683- let jA = if ((jt > 0))
1684- then {
1685- let jA = invoke(at(), "withdrawLocked", [jt], nil)
1686- if ((jA == jA))
1687- then nil
1688- else throw("Strict value is not equal to itself.")
1689- }
1690- else nil
1691- if ((jA == jA))
1692- then {
1693- let jB = gn(jy)
1694- let gp = jB._1
1695- let gq = jB._2
1696- let iu = invoke(at(), "addFree", nil, [AttachedPayment(aq(), gq)])
1697- if ((iu == iu))
1698- then {
1699- let iv = invoke(au(), "notifyFees", [cr, iX], nil)
1700- if ((iv == iv))
1701- then {
1702- let iw = invoke(au(), "notifyNotional", [cr, iq], nil)
1703- if ((iw == iw))
1704- then (((((((if (jj)
1705- then gO(cr, ij, je, iq, jc)
1706- else hi(cr)) ++ (if (js)
1707- then {
1708- let iC = toBase58String(aq())
1709- gJ(cr, iC)
1710- }
1711- else nil)) ++ hb(cU, cV, eS, eV, eT, eU, ik, il)) ++ hn(gp)) ++ (if ((jz > 0))
1712- then hj(iQ, jz)
1713- else nil)) ++ hm(jn)) ++ (if ((jx > 0))
1714- then [ScriptTransfer(iQ, jx, fromBase58String(iF))]
1715- else nil))
1716- else throw("Strict value is not equal to itself.")
1717- }
1718- else throw("Strict value is not equal to itself.")
1719- }
1530+ let iH = invoke(au(), "notifyNotional", [ce, ff], nil)
1531+ if ((iH == iH))
1532+ then (((((if (eM)
1533+ then hi(ce, fd, fm, ff, fg, bT())
1534+ else hC(ce)) ++ hv(cH, cI, eP, iA, iB, iC, it, iu)) ++ (if ((fl > 0))
1535+ then hD(iQ, fl)
1536+ else nil)) ++ hG(iW)) ++ hH(gK))
17201537 else throw("Strict value is not equal to itself.")
17211538 }
17221539 else throw("Strict value is not equal to itself.")
17321549
17331550
17341551
1735-@Callable(ci)
1736-func liquidate (cr) = {
1737- let hI = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1738- if ((hI == hI))
1552+@Callable(bV)
1553+func liquidate (ce) = {
1554+ let ic = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1555+ if ((ic == ic))
17391556 then {
1740- let jC = ez(cr, aP)
1741- let iB = if (eb())
1557+ let iY = em(ce, aM)
1558+ let iZ = if (dS())
17421559 then {
1743- let jD = ez(cr, aQ)
1744- bd(jC, jD)
1560+ let ja = em(ce, aN)
1561+ ba(iY, ja)
17451562 }
1746- else jC
1747- if (if (if (if (if (!(cj(iB, bT(), false)))
1563+ else iY
1564+ if (if (if (if (if (!(bW(iZ, bF(), false)))
17481565 then true
1749- else !(cB(cr)))
1566+ else !(co(ce)))
17501567 then true
1751- else !(cC()))
1568+ else !(cp()))
17521569 then true
1753- else cD())
1570+ else cq())
17541571 then true
1755- else dL())
1572+ else dC())
17561573 then throw("Unable to liquidate")
1757- else if (if (if ((jC > bU()))
1758- then (bV() > 0)
1759- else false)
1760- then (aM > bV())
1761- else false)
1762- then {
1763- let jE = cq(cr)
1764- let fZ = jE._1
1765- let hZ = jE._2
1766- let ia = jE._3
1767- let ib = jE._4
1768- let hE = if ((fZ > 0))
1769- then aH
1770- else aG
1771- let if = (hE == aG)
1772- let eL = eF(cr, fZ)
1773- let jF = eq(cr, aP)
1774- let io = jF._1
1775- let ep = jF._2
1776- let jG = cQ(if, eL)
1777- let eK = jG._1
1778- let cU = jG._2
1779- let cV = jG._3
1780- let eS = jG._4
1781- let jH = aT(bc(eK), bc(fZ))
1782- let eP = aV(ep, jH)
1783- let jI = dh(fZ, hZ, ib, eP)
1784- let dq = jI._1
1785- let dr = jI._2
1786- let dm = jI._3
1787- let ja = (ep - eP)
1788- let jb = if ((fZ > 0))
1789- then ((io - eL) - ja)
1790- else ((ja + io) - eL)
1791- let jJ = aV(eL, bU())
1792- let jK = (jJ / 2)
1793- let gq = (jJ - jK)
1794- let je = (dq - jJ)
1795- let ij = (fZ + eK)
1796- let iq = bc(jb)
1797- let jd = (ia - iq)
1798- let jc = co(ij)
1799- let eV = (bM() - jd)
1800- let jl = (bE() - jJ)
1801- let jL = if ((0 > jl))
1802- then $Tuple2(0, bc(jl))
1803- else $Tuple2(jl, 0)
1804- let jM = jL._1
1805- let jo = jL._2
1806- let jN = gd(cr)
1807- let iE = jN._1
1808- let iF = jN._2
1809- let jO = if ((iE > 0))
1810- then {
1811- let jP = aV(iE, jH)
1812- let jr = invoke(ay(), "realizePartially", [cr, iF, jP], nil)
1813- if ((jr == jr))
1814- then nil
1815- else throw("Strict value is not equal to itself.")
1816- }
1817- else nil
1818- if ((jO == jO))
1819- then {
1820- let jA = invoke(at(), "withdrawLocked", [jJ], nil)
1821- if ((jA == jA))
1822- then {
1823- let jQ = invoke(at(), "addFree", nil, [AttachedPayment(aq(), gq)])
1824- if ((jQ == jQ))
1825- then {
1826- let iw = invoke(au(), "notifyNotional", [cr, iq], nil)
1827- if ((iw == iw))
1828- then (((gO(cr, ij, je, iq, jc) ++ hb(cU, cV, eS, eV, (cd() - (if ((ij > 0))
1829- then bc(eK)
1830- else 0)), (cc() - (if ((0 > ij))
1831- then bc(eK)
1832- else 0)), (bO() - (if ((ij > 0))
1833- then jd
1834- else 0)), (bN() - (if ((0 > ij))
1835- then jd
1836- else 0)))) ++ hj(ci.caller, jK)) ++ hm(jM))
1837- else throw("Strict value is not equal to itself.")
1838- }
1839- else throw("Strict value is not equal to itself.")
1840- }
1841- else throw("Strict value is not equal to itself.")
1842- }
1843- else throw("Strict value is not equal to itself.")
1844- }
1845- else {
1846- let jR = eM(cr, false)
1847- let ek = jR._1
1848- let dr = jR._2
1849- let el = jR._3
1850- let em = jR._4
1851- let cU = jR._5
1852- let cV = jR._6
1853- let eS = jR._7
1854- let eV = jR._8
1855- let eL = jR._9
1856- let eT = jR._10
1857- let eU = jR._11
1858- let ik = jR._12
1859- let il = jR._13
1860- let jJ = aV(eL, bU())
1861- let jK = (jJ / 2)
1862- let gq = (jJ - jK)
1863- let jl = (bE() - jJ)
1864- let jS = if ((0 > jl))
1865- then $Tuple2(0, bc(jl))
1866- else $Tuple2(jl, 0)
1867- let jM = jS._1
1868- let jo = jS._2
1869- let jT = gd(cr)
1870- let iE = jT._1
1871- let iF = jT._2
1872- let jO = if ((iE > 0))
1873- then {
1874- let jr = invoke(ay(), "realizePartiallyAndClose", [cr, 0, iF], nil)
1875- if ((jr == jr))
1876- then nil
1877- else throw("Strict value is not equal to itself.")
1878- }
1879- else nil
1880- if ((jO == jO))
1881- then {
1882- let gj = if ((dr > 0))
1883- then {
1884- let jU = invoke(at(), "exchangeFreeAndLocked", [dr], nil)
1885- if ((jU == jU))
1886- then nil
1887- else throw("Strict value is not equal to itself.")
1888- }
1889- else nil
1890- if ((gj == gj))
1891- then {
1892- let jA = invoke(at(), "withdrawLocked", [jJ], nil)
1893- if ((jA == jA))
1894- then {
1895- let jQ = invoke(at(), "addFree", nil, [AttachedPayment(aq(), gq)])
1896- if ((jQ == jQ))
1897- then {
1898- let iw = invoke(au(), "notifyNotional", [cr, 0], nil)
1899- if ((iw == iw))
1900- then (((hi(cr) ++ hb(cU, cV, eS, eV, eT, eU, ik, il)) ++ hj(ci.caller, jK)) ++ hm(jM))
1901- else throw("Strict value is not equal to itself.")
1902- }
1903- else throw("Strict value is not equal to itself.")
1904- }
1905- else throw("Strict value is not equal to itself.")
1906- }
1907- else throw("Strict value is not equal to itself.")
1908- }
1909- else throw("Strict value is not equal to itself.")
1910- }
1911- }
1912- else throw("Strict value is not equal to itself.")
1913- }
1914-
1915-
1916-
1917-@Callable(ci)
1918-func payFunding () = {
1919- let hI = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1920- if ((hI == hI))
1921- then {
1922- let jV = bP()
1923- if (if (if ((jV > lastBlock.timestamp))
1924- then true
1925- else !(cC()))
1926- then true
1927- else cD())
1928- then throw(((("Invalid funding block timestamp: " + toString(lastBlock.timestamp)) + " < ") + toString(jV)))
19291574 else {
1930- let fJ = dE()
1931- let jW = fI()
1932- let fM = jW._1
1933- let fN = jW._2
1934- gD((jV + bS()), (ca() + fN), (cb() + fM), aT(fN, fJ), aT(fM, fJ))
1575+ let jb = if (if ((iY > bG()))
1576+ then true
1577+ else (bH() > 0))
1578+ then true
1579+ else (aI > bH())
1580+ let eF = cd(ce)._1
1581+ let dW = aZ(eF)
1582+ let jc = if (jb)
1583+ then {
1584+ let jd = eu(ce, eF)
1585+ let je = aQ(aZ(jd), dW)
1586+ $Tuple2(je, aZ(jd))
1587+ }
1588+ else $Tuple2(0, dW)
1589+ let je = jc._1
1590+ let jd = jc._2
1591+ let jf = ez(ce, if (jb)
1592+ then jd
1593+ else dW, bG(), 0, true, false)
1594+ let fd = jf._1
1595+ let fm = jf._2
1596+ let ff = jf._3
1597+ let fg = jf._4
1598+ let eZ = jf._5
1599+ let eU = jf._6
1600+ let fl = jf._7
1601+ let cH = jf._8
1602+ let cI = jf._9
1603+ let eP = jf._10
1604+ let iA = jf._11
1605+ let iB = jf._12
1606+ let iC = jf._13
1607+ let it = jf._14
1608+ let iu = jf._15
1609+ let jg = jf._16
1610+ let jh = (jg / 2)
1611+ let gL = (jg - jh)
1612+ let iV = (bp() - jg)
1613+ let ji = if ((0 > iV))
1614+ then 0
1615+ else iV
1616+ let iM = if ((eZ > 0))
1617+ then {
1618+ let iM = invoke(at(), "exchangeFreeAndLocked", [eZ], nil)
1619+ if ((iM == iM))
1620+ then nil
1621+ else throw("Strict value is not equal to itself.")
1622+ }
1623+ else nil
1624+ if ((iM == iM))
1625+ then {
1626+ let iL = invoke(at(), "withdrawLocked", [jg], nil)
1627+ if ((iL == iL))
1628+ then {
1629+ let jj = invoke(at(), "addFree", nil, [AttachedPayment(aq(), gL)])
1630+ if ((jj == jj))
1631+ then {
1632+ let iH = invoke(au(), "notifyNotional", [ce, ff], nil)
1633+ if ((iH == iH))
1634+ then ((((if (jb)
1635+ then hi(ce, fd, fm, ff, fg, bT())
1636+ else hC(ce)) ++ hv(cH, cI, eP, iA, iB, iC, it, iu)) ++ hD(bV.caller, jh)) ++ hG(ji))
1637+ else throw("Strict value is not equal to itself.")
1638+ }
1639+ else throw("Strict value is not equal to itself.")
1640+ }
1641+ else throw("Strict value is not equal to itself.")
1642+ }
1643+ else throw("Strict value is not equal to itself.")
19351644 }
19361645 }
19371646 else throw("Strict value is not equal to itself.")
19391648
19401649
19411650
1942-@Callable(ci)
1943-func syncTerminalPriceToOracle () = {
1944- let cM = bH()
1945- let cN = bI()
1946- let jX = fE(dE(), cM, cN)
1947- let hv = jX._1
1948- let hw = jX._2
1949- let eQ = jX._3
1950- let hx = if ((eQ != 0))
1651+@Callable(bV)
1652+func payFunding () = {
1653+ let ic = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1654+ if ((ic == ic))
19511655 then {
1952- let hx = invoke(at(), "exchangeFreeAndLocked", [eQ], nil)
1953- if ((hx == hx))
1954- then nil
1955- else throw("Strict value is not equal to itself.")
1956- }
1957- else nil
1958- if ((hx == hx))
1959- then (ha(hv, hw) ++ gS(aT(aV(cM, hv), aV(cN, hw))))
1960- else throw("Strict value is not equal to itself.")
1961- }
1962-
1963-
1964-
1965-@Callable(ci)
1966-func view_calcRemainMarginWithFundingPayment (cr) = {
1967- let hI = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1968- if ((hI == hI))
1969- then {
1970- let jY = cq(cr)
1971- let cu = jY._1
1972- let es = jY._2
1973- let eB = jY._3
1974- let eu = jY._4
1975- let jZ = eq(cr, aP)
1976- let eh = jZ._1
1977- let ep = jZ._2
1978- let ka = dh(cu, es, eu, ep)
1979- let dq = ka._1
1980- let dr = ka._2
1981- let dm = ka._3
1982- throw((((((aR(dq) + aR(dm)) + aR(eE(cr))) + aR(ep)) + aR(dr)) + aR(eh)))
1656+ let jk = bB()
1657+ if (if (if ((jk > bT()))
1658+ then true
1659+ else !(cp()))
1660+ then true
1661+ else cq())
1662+ then throw(((("Invalid funding block timestamp: " + toString(bT())) + " < ") + toString(jk)))
1663+ else {
1664+ let gj = dv()
1665+ let jl = gi()
1666+ let gm = jl._1
1667+ let gn = jl._2
1668+ gY((jk + bE()), (bM() + gn), (bN() + gm), aQ(gn, gj), aQ(gm, gj))
1669+ }
19831670 }
19841671 else throw("Strict value is not equal to itself.")
19851672 }
19861673
19871674
19881675
1989-@Callable(ci)
1990-func view_getPegAdjustCost (gT) = {
1991- let cM = bH()
1992- let cN = bI()
1993- let fD = fE(gT, cM, cN)
1994- throw(toString(fD._3))
1676+@Callable(bV)
1677+func syncTerminalPriceToOracle () = {
1678+ let cz = bt()
1679+ let cA = bu()
1680+ let jm = gd(dv(), cz, cA)
1681+ let hP = jm._1
1682+ let hQ = jm._2
1683+ let gh = jm._3
1684+ let hR = if ((gh != 0))
1685+ then {
1686+ let hR = invoke(at(), "exchangeFreeAndLocked", [gh], nil)
1687+ if ((hR == hR))
1688+ then nil
1689+ else throw("Strict value is not equal to itself.")
1690+ }
1691+ else nil
1692+ if ((hR == hR))
1693+ then (hu(hP, hQ) ++ hm(aQ(aS(cz, hP), aS(cA, hQ))))
1694+ else throw("Strict value is not equal to itself.")
19951695 }
19961696
19971697
19981698
1999-@Callable(ci)
2000-func view_getTerminalAmmPrice () = {
2001- let kb = fm()
2002- let fq = kb._1
2003- let fr = kb._2
2004- let hq = aT(aV(fq, bJ()), aV(fr, bK()))
2005- throw(toString(hq))
1699+@Callable(bV)
1700+func view_calcRemainMarginWithFundingPayment (ce) = {
1701+ let ic = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1702+ if ((ic == ic))
1703+ then {
1704+ let jn = cd(ce)
1705+ let ch = jn._1
1706+ let ef = jn._2
1707+ let eo = jn._3
1708+ let eh = jn._4
1709+ let eq = jn._5
1710+ let jo = ed(ce, aM)
1711+ let dY = jo._1
1712+ let ec = jo._2
1713+ let jp = cZ(ch, ef, eh, eq, ec)
1714+ let dh = jp._1
1715+ let di = jp._2
1716+ let dd = jp._3
1717+ let cY = jp._4
1718+ throw(((((((aO(dh) + aO(dd)) + aO(et(ce))) + aO(ec)) + aO(di)) + aO(dY)) + aO(cY)))
1719+ }
1720+ else throw("Strict value is not equal to itself.")
20061721 }
20071722
20081723
20091724
2010-@Callable(ci)
2011-func view_getFunding () = {
2012- let fJ = dE()
2013- let kc = fI()
2014- let fM = kc._1
2015- let fN = kc._2
2016- let kd = aT(fN, fJ)
2017- let ke = aT(fM, fJ)
2018- throw((((aR(kd) + aR(ke)) + aR(eW())) + aR(dE())))
1725+@Callable(bV)
1726+func view_getPegAdjustCost (hn) = {
1727+ let cz = bt()
1728+ let cA = bu()
1729+ let gc = gd(hn, cz, cA)
1730+ throw(toString(gc._3))
20191731 }
20201732
20211733
20221734
2023-@Callable(ci)
2024-func view_getBorrowedByTrader (cr) = {
2025- let kf = gd(cr)
2026- let iE = kf._1
2027- let iF = kf._2
2028- throw((aR(iE) + iF))
1735+@Callable(bV)
1736+func view_getTerminalAmmPrice () = {
1737+ let jq = fL()
1738+ let fP = jq._1
1739+ let fQ = jq._2
1740+ let hK = aQ(aS(fP, bv()), aS(fQ, bw()))
1741+ throw(toString(hK))
20291742 }
20301743
20311744
20321745
2033-@Callable(ci)
2034-func computeSpotPrice () = {
2035- let fD = ea()
2036- $Tuple2(nil, fD)
1746+@Callable(bV)
1747+func view_getFunding () = {
1748+ let gj = dv()
1749+ let jr = gi()
1750+ let gm = jr._1
1751+ let gn = jr._2
1752+ let js = aQ(gn, gj)
1753+ let jt = aQ(gm, gj)
1754+ throw((((aO(js) + aO(jt)) + aO(fn())) + aO(dv())))
20371755 }
20381756
20391757
20401758
2041-@Callable(ci)
2042-func computeFeeForTraderWithArtifact (cr,fP) = {
2043- let fD = gg(cr, fP)
2044- $Tuple2(nil, fD)
1759+@Callable(bV)
1760+func computeSpotPrice () = {
1761+ let gc = dR()
1762+ $Tuple2(nil, gc)
20451763 }
20461764
20471765
2048-@Verifier(kg)
2049-func kh () = sigVerify(kg.bodyBytes, kg.proofs[0], ap())
1766+
1767+@Callable(bV)
1768+func computeFeeForTraderWithArtifact (ce,gp) = {
1769+ let gc = gB(ce, gp)
1770+ $Tuple2(nil, gc)
1771+ }
1772+
1773+
1774+@Verifier(ju)
1775+func jv () = sigVerify(ju.bodyBytes, ju.proofs[0], ap())
20501776
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_open_key"
99
1010 let d = "k_ora"
1111
1212 let e = "k_balance"
1313
1414 let f = "k_sequence"
1515
1616 let g = "k_positionSize"
1717
1818 let h = "k_positionMargin"
1919
2020 let i = "k_positionOpenNotional"
2121
2222 let j = "k_positionFraction"
2323
2424 let k = "k_positionSequence"
2525
2626 let l = "k_positionAsset"
2727
2828 let m = "k_positionFee"
2929
30-let n = "k_initialized"
30+let n = "k_positionTimestamp"
3131
32-let o = "k_paused"
32+let o = "k_initialized"
3333
34-let p = "k_closeOnly"
34+let p = "k_paused"
3535
36-let q = "k_fee"
36+let q = "k_closeOnly"
3737
38-let r = "k_fundingPeriod"
38+let r = "k_fee"
3939
40-let s = "k_initMarginRatio"
40+let s = "k_rollover_fee"
4141
42-let t = "k_mmr"
42+let t = "k_fundingPeriod"
4343
44-let u = "k_liquidationFeeRatio"
44+let u = "k_initMarginRatio"
4545
46-let v = "k_partLiquidationRatio"
46+let v = "k_mmr"
4747
48-let w = "k_spreadLimit"
48+let w = "k_liquidationFeeRatio"
4949
50-let x = "k_maxPriceImpact"
50+let x = "k_partLiquidationRatio"
5151
52-let y = "k_maxPriceSpread"
52+let y = "k_spreadLimit"
5353
54-let z = "k_maxOpenNotional"
54+let z = "k_maxPriceImpact"
5555
56-let A = "k_feeToStakersPercent"
56+let A = "k_maxPriceSpread"
5757
58-let B = "k_maxOracleDelay"
58+let B = "k_maxOpenNotional"
5959
60-let C = "k_lastDataStr"
60+let C = "k_feeToStakersPercent"
6161
62-let D = "k_lastMinuteId"
62+let D = "k_maxOracleDelay"
6363
64-let E = "k_twapDataLastCumulativePrice"
64+let E = "k_lastDataStr"
6565
66-let F = "k_twapDataLastPrice"
66+let F = "k_lastMinuteId"
6767
68-let G = "k_twapDataPreviousMinuteId"
68+let G = "k_twapDataLastCumulativePrice"
6969
70-let H = "k_latestLongPremiumFraction"
70+let H = "k_twapDataLastPrice"
7171
72-let I = "k_latestShortPremiumFraction"
72+let I = "k_twapDataPreviousMinuteId"
7373
74-let J = "k_nextFundingBlockMinTimestamp"
74+let J = "k_latestLongPremiumFraction"
7575
76-let K = "k_longFundingRate"
76+let K = "k_latestShortPremiumFraction"
7777
78-let L = "k_shortFundingRate"
78+let L = "k_nextFundingBlockMinTimestamp"
7979
80-let M = "k_qtAstR"
80+let M = "k_longFundingRate"
8181
82-let N = "k_bsAstR"
82+let N = "k_shortFundingRate"
8383
84-let O = "k_qtAstW"
84+let O = "k_qtAstR"
8585
86-let P = "k_bsAstW"
86+let P = "k_bsAstR"
8787
88-let Q = "k_totalPositionSize"
88+let Q = "k_qtAstW"
8989
90-let R = "k_totalLongPositionSize"
90+let R = "k_bsAstW"
9191
92-let S = "k_totalShortPositionSize"
92+let S = "k_totalPositionSize"
9393
94-let T = "k_openInterestNotional"
94+let T = "k_totalLongPositionSize"
9595
96-let U = "k_openInterestShort"
96+let U = "k_totalShortPositionSize"
9797
98-let V = "k_openInterestLong"
98+let V = "k_openInterestNotional"
9999
100-let W = "k_coordinatorAddress"
100+let W = "k_openInterestShort"
101101
102-let X = "k_vault_address"
102+let X = "k_openInterestLong"
103103
104-let Y = "k_admin_address"
104+let Y = "k_coordinatorAddress"
105105
106-let Z = "k_admin_public_key"
106+let Z = "k_vault_address"
107107
108-let aa = "k_quote_asset"
108+let aa = "k_admin_address"
109109
110-let ab = "k_quote_staking"
110+let ab = "k_admin_public_key"
111111
112-let ac = "k_staking_address"
112+let ac = "k_quote_asset"
113113
114-let ad = "k_miner_address"
114+let ad = "k_quote_staking"
115115
116-let ae = "k_orders_address"
116+let ae = "k_staking_address"
117117
118-let af = "k_referral_address"
118+let af = "k_miner_address"
119119
120-let ag = "k_collateral_address"
120+let ag = "k_orders_address"
121121
122-let ah = "k_exchange_address"
122+let ah = "k_referral_address"
123123
124-let ai = "k_nft_manager_address"
124+let ai = "k_exchange_address"
125125
126-let aj = "k_trader_market_asset_collateral"
126+let aj = "k_nft_manager_address"
127127
128128 func ak (al,am) = ((al + "_") + am)
129129
130130
131-func an () = valueOrErrorMessage(addressFromString(getStringValue(this, W)), "Coordinator not set")
131+func an () = valueOrErrorMessage(addressFromString(getStringValue(this, Y)), "Coordinator not set")
132132
133133
134-func ao () = addressFromString(getStringValue(an(), Y))
134+func ao () = addressFromString(getStringValue(an(), aa))
135135
136136
137-func ap () = fromBase58String(getStringValue(an(), Z))
137+func ap () = fromBase58String(getStringValue(an(), ab))
138138
139139
140-func aq () = fromBase58String(getStringValue(an(), aa))
140+func aq () = fromBase58String(getStringValue(an(), ac))
141141
142142
143-func ar () = valueOrErrorMessage(addressFromString(getStringValue(an(), ab)), "Quote asset staking not set")
143+func ar () = valueOrErrorMessage(addressFromString(getStringValue(an(), ad)), "Quote asset staking not set")
144144
145145
146-func as () = valueOrErrorMessage(addressFromString(getStringValue(an(), ac)), "Staking not set")
146+func as () = valueOrErrorMessage(addressFromString(getStringValue(an(), ae)), "Staking not set")
147147
148148
149-func at () = valueOrErrorMessage(addressFromString(getStringValue(an(), X)), "Vault not set")
149+func at () = valueOrErrorMessage(addressFromString(getStringValue(an(), Z)), "Vault not set")
150150
151151
152-func au () = valueOrErrorMessage(addressFromString(getStringValue(an(), ad)), "Miner not set")
152+func au () = valueOrErrorMessage(addressFromString(getStringValue(an(), af)), "Miner not set")
153153
154154
155-func av () = valueOrErrorMessage(addressFromString(getStringValue(an(), ae)), "Orders not set")
155+func av () = valueOrErrorMessage(addressFromString(getStringValue(an(), ag)), "Orders not set")
156156
157157
158-func aw () = valueOrErrorMessage(addressFromString(getStringValue(an(), af)), "Referral not set")
158+func aw () = valueOrErrorMessage(addressFromString(getStringValue(an(), ah)), "Referral not set")
159159
160160
161-func ax () = valueOrErrorMessage(addressFromString(getStringValue(an(), ai)), "NFT Manager not set")
161+func ax () = valueOrErrorMessage(addressFromString(getStringValue(an(), aj)), "NFT Manager not set")
162162
163163
164-func ay () = valueOrErrorMessage(addressFromString(getStringValue(an(), ag)), "Collateral Manager not set")
164+func ay () = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(an(), ai), "No swap address")), "Invalid swap address")
165165
166166
167-func az () = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(an(), ah), "No swap address")), "Invalid swap address")
167+let az = "k_token_param"
168+
169+let aA = "k_token_type"
170+
171+let aB = "fee_reduction"
172+
173+let aC = 1
174+
175+let aD = 2
176+
177+let aE = 15
178+
179+let aF = 15
180+
181+let aG = 1000
182+
183+let aH = 6
184+
185+let aI = (1 * (((((10 * 10) * 10) * 10) * 10) * 10))
186+
187+let aJ = (525600 * aI)
188+
189+let aK = (86400 * aI)
190+
191+let aL = 100
192+
193+let aM = 1
194+
195+let aN = 2
196+
197+func aO (aP) = (toString(aP) + ",")
168198
169199
170-let aA = "k_whitelist_asset"
171-
172-func aB (aC) = valueOrElse(getBoolean(ay(), ak(aA, aC)), false)
200+func aQ (aP,aR) = fraction(aP, aI, aR, HALFEVEN)
173201
174202
175-let aD = "k_token_param"
176-
177-let aE = "k_token_type"
178-
179-let aF = "fee_reduction"
180-
181-let aG = 1
182-
183-let aH = 2
184-
185-let aI = 15
186-
187-let aJ = 15
188-
189-let aK = 1000
190-
191-let aL = 6
192-
193-let aM = (1 * (((((10 * 10) * 10) * 10) * 10) * 10))
194-
195-let aN = (86400 * aM)
196-
197-let aO = 100
198-
199-let aP = 1
200-
201-let aQ = 2
202-
203-func aR (aS) = (toString(aS) + ",")
203+func aS (aP,aR) = fraction(aP, aR, aI, HALFEVEN)
204204
205205
206-func aT (aS,aU) = fraction(aS, aM, aU, HALFEVEN)
206+func aT (aP) = sqrt(aP, aH, aH, HALFEVEN)
207207
208208
209-func aV (aS,aU) = fraction(aS, aU, aM, HALFEVEN)
209+func aU (aP,aR) = pow(aP, aH, aR, aH, aH, HALFEVEN)
210210
211211
212-func aW (aS) = sqrt(aS, aL, aL, HALFEVEN)
212+func aV (aP,aR) = fraction(aP, toBigInt(aI), aR, HALFEVEN)
213213
214214
215-func aX (aS,aU) = pow(aS, aL, aU, aL, aL, HALFEVEN)
215+func aW (aP,aR) = fraction(aP, aR, toBigInt(aI), HALFEVEN)
216216
217217
218-func aY (aS,aU) = fraction(aS, toBigInt(aM), aU, HALFEVEN)
218+func aX (aP) = sqrtBigInt(aP, aH, aH, HALFEVEN)
219219
220220
221-func aZ (aS,aU) = fraction(aS, aU, toBigInt(aM), HALFEVEN)
221+func aY (aP,aR) = pow(aP, aH, aR, aH, aH, HALFEVEN)
222222
223223
224-func ba (aS) = sqrtBigInt(aS, aL, aL, HALFEVEN)
224+func aZ (aP) = if ((aP > 0))
225+ then aP
226+ else -(aP)
225227
226228
227-func bb (aS,aU) = pow(aS, aL, aU, aL, aL, HALFEVEN)
229+func ba (aP,aR) = if ((aP >= aR))
230+ then aP
231+ else aR
228232
229233
230-func bc (aS) = if ((aS > 0))
231- then aS
232- else -(aS)
234+func bb (bc) = if ((size(bc) == 0))
235+ then ""
236+ else makeString(bc, ",")
233237
234238
235-func bd (aS,aU) = if ((aS >= aU))
236- then aS
237- else aU
239+func bd (be) = if ((be == ""))
240+ then nil
241+ else split(be, ",")
238242
239243
240-func be (bf) = {
241- func bg (bh,bi) = ((bh + bi) + ",")
244+func bf (bc,bg,bh) = if ((size(bc) > bg))
245+ then (removeByIndex(bc, 0) :+ bh)
246+ else (bc :+ bh)
242247
243- let bj = {
244- let bk = bf
245- let bl = size(bk)
246- let bm = ""
247- func bn (bo,bp) = if ((bp >= bl))
248- then bo
249- else bg(bo, bk[bp])
250248
251- func bq (bo,bp) = if ((bp >= bl))
252- then bo
253- else throw("List size exceeds 20")
249+func bi (bj) = valueOrErrorMessage(getInteger(this, bj), ("no value for " + bj))
254250
255- bq(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bm, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
256- }
257- let br = dropRight(bj, 1)
258- let bs = if ((take(br, 1) == ","))
259- then drop(br, 1)
260- else br
261- bs
251+
252+func bk (bj,bl) = valueOrElse(getInteger(this, bj), bl)
253+
254+
255+func bm (am,al) = {
256+ let bn = valueOrErrorMessage(getString(am, al), ("No value for key " + al))
257+ bn
262258 }
263259
264260
265-func bt (bu) = split(bu, ",")
266-
267-
268-func bv (bf,bw,bx) = if ((size(bf) > bw))
269- then (removeByIndex(bf, 0) :+ bx)
270- else (bf :+ bx)
271-
272-
273-func by (bz) = valueOrErrorMessage(getInteger(this, bz), ("no value for " + bz))
274-
275-
276-func bA (bz,bB) = valueOrElse(getInteger(this, bz), bB)
277-
278-
279-func bC (am,al) = {
280- let bi = valueOrErrorMessage(getString(am, al), ("No value for key " + al))
281- bi
261+func bo (am,al) = {
262+ let bn = valueOrErrorMessage(getInteger(am, al), ("No value for key " + al))
263+ bn
282264 }
283265
284266
285-func bD (am,al) = {
286- let bi = valueOrErrorMessage(getInteger(am, al), ("No value for key " + al))
287- bi
288- }
267+func bp () = bi(e)
289268
290269
291-func bE () = by(e)
270+func bq () = bi(r)
292271
293272
294-func bF () = by(q)
273+func br () = bi(s)
295274
296275
297-func bG () = by(s)
276+func bs () = bi(u)
298277
299278
300-func bH () = by(M)
279+func bt () = bi(O)
301280
302281
303-func bI () = by(N)
282+func bu () = bi(P)
304283
305284
306-func bJ () = bA(O, aM)
285+func bv () = bk(Q, aI)
307286
308287
309-func bK () = bA(P, aM)
288+func bw () = bk(R, aI)
310289
311290
312-func bL () = by(Q)
291+func bx () = bi(S)
313292
314293
315-func bM () = by(T)
294+func by () = bi(V)
316295
317296
318-func bN () = by(U)
297+func bz () = bi(W)
319298
320299
321-func bO () = by(V)
300+func bA () = bi(X)
322301
323302
324-func bP () = by(J)
303+func bB () = bi(L)
325304
326305
327-func bQ () = by(r)
306+func bC () = bi(t)
328307
329308
330-func bR () = (bQ() * aM)
309+func bD () = (bC() * aI)
331310
332311
333-func bS () = (bQ() * aK)
312+func bE () = (bC() * aG)
334313
335314
336-func bT () = by(t)
315+func bF () = bi(v)
337316
338317
339-func bU () = by(u)
318+func bG () = bi(w)
340319
341320
342-func bV () = by(v)
321+func bH () = bi(x)
343322
344323
345-func bW () = by(w)
324+func bI () = bi(y)
346325
347326
348-func bX () = by(x)
327+func bJ () = bi(z)
349328
350329
351-func bY () = by(y)
330+func bK () = bi(A)
352331
353332
354-func bZ () = by(z)
333+func bL () = bi(B)
355334
356335
357-func ca () = by(H)
336+func bM () = bi(J)
358337
359338
360-func cb () = by(I)
339+func bN () = bi(K)
361340
362341
363-func cc () = by(S)
342+func bO () = bi(U)
364343
365344
366-func cd () = by(R)
345+func bP () = bi(T)
367346
368347
369-func ce () = bA(f, 0)
348+func bQ () = bk(f, 0)
370349
371350
372-func cf () = by(A)
351+func bR () = bi(C)
373352
374353
375-func cg () = by(B)
354+func bS () = bi(D)
376355
377356
378-func ch (ci) = valueOrElse(getString(av(), "k_sender"), toString(ci.caller))
357+func bT () = lastBlock.timestamp
379358
380359
381-func cj (ck,cl,cm) = {
382- let cn = (ck - cl)
383- if (if (cm)
384- then (0 > cn)
360+func bU (bV) = valueOrElse(getString(av(), "k_sender"), toString(bV.caller))
361+
362+
363+func bW (bX,bY,bZ) = {
364+ let ca = (bX - bY)
365+ if (if (bZ)
366+ then (0 > ca)
385367 else false)
386- then throw(((("Invalid margin: " + toString(ck)) + " < ") + toString(cl)))
387- else if (if (!(cm))
388- then (cn >= 0)
368+ then throw(((("Invalid margin: " + toString(bX)) + " < ") + toString(bY)))
369+ else if (if (!(bZ))
370+ then (ca >= 0)
389371 else false)
390- then throw(((("Invalid margin: " + toString(ck)) + " > ") + toString(cl)))
372+ then throw(((("Invalid margin: " + toString(bX)) + " > ") + toString(bY)))
391373 else true
392374 }
393375
394376
395-func co (cp) = if ((cp == 0))
377+func cb (cc) = if ((cc == 0))
396378 then throw("Should not be called with _positionSize == 0")
397- else if ((cp > 0))
398- then ca()
399- else cb()
379+ else if ((cc > 0))
380+ then bM()
381+ else bN()
400382
401383
402-func cq (cr) = {
403- let cs = getInteger(this, ak(g, cr))
404- let ct = cs
405- if ($isInstanceOf(ct, "Int"))
384+func cd (ce) = {
385+ let cf = getInteger(this, ak(g, ce))
386+ let cg = cf
387+ if ($isInstanceOf(cg, "Int"))
406388 then {
407- let cu = ct
408- $Tuple4(cu, getIntegerValue(this, ak(h, cr)), getIntegerValue(this, ak(i, cr)), getIntegerValue(this, ak(j, cr)))
389+ let ch = cg
390+ $Tuple5(ch, getIntegerValue(this, ak(h, ce)), getIntegerValue(this, ak(i, ce)), getIntegerValue(this, ak(j, ce)), getIntegerValue(this, ak(n, ce)))
409391 }
410- else $Tuple4(0, 0, 0, 0)
392+ else $Tuple5(0, 0, 0, 0, 0)
411393 }
412394
413395
414-func cv (cr) = {
415- let cw = getString(this, ak(l, cr))
416- let ct = cw
417- if ($isInstanceOf(ct, "String"))
396+func ci (ce) = {
397+ let cj = getString(this, ak(l, ce))
398+ let cg = cj
399+ if ($isInstanceOf(cg, "String"))
418400 then {
419- let cx = ct
420- cx
401+ let ck = cg
402+ ck
421403 }
422404 else toBase58String(aq())
423405 }
424406
425407
426-func cy (cr) = {
427- let cz = getInteger(this, ak(m, cr))
428- let ct = cz
429- if ($isInstanceOf(ct, "Int"))
408+func cl (ce) = {
409+ let cm = getInteger(this, ak(m, ce))
410+ let cg = cm
411+ if ($isInstanceOf(cg, "Int"))
430412 then {
431- let cA = ct
432- cA
413+ let cn = cg
414+ cn
433415 }
434- else bF()
416+ else bq()
435417 }
436418
437419
438-func cB (cr) = if ((cq(cr)._1 == 0))
420+func co (ce) = if ((cd(ce)._1 == 0))
439421 then throw("No open position")
440422 else true
441423
442424
443-func cC () = valueOrElse(getBoolean(this, n), false)
425+func cp () = valueOrElse(getBoolean(this, o), false)
444426
445427
446-func cD () = valueOrElse(getBoolean(this, o), false)
428+func cq () = valueOrElse(getBoolean(this, p), false)
447429
448430
449-func cE () = valueOrElse(getBoolean(this, p), false)
431+func cr () = valueOrElse(getBoolean(this, q), false)
450432
451433
452-func cF (cG,cH,cI) = if (cG)
434+func cs (ct,cu,cv) = if (ct)
453435 then {
454- let cJ = (bI() - cI)
455- if ((0 >= cJ))
436+ let cw = (bu() - cv)
437+ if ((0 >= cw))
456438 then throw("Tx lead to base asset reserve <= 0, revert")
457- else $Tuple3((bH() + cH), cJ, (bL() + cI))
439+ else $Tuple3((bt() + cu), cw, (bx() + cv))
458440 }
459441 else {
460- let cK = (bH() - cH)
461- if ((0 >= cK))
442+ let cx = (bt() - cu)
443+ if ((0 >= cx))
462444 then throw("Tx lead to base quote reserve <= 0, revert")
463- else $Tuple3(cK, (bI() + cI), (bL() - cI))
445+ else $Tuple3(cx, (bu() + cv), (bx() - cv))
464446 }
465447
466448
467-func cL (cM,cN) = {
468- let cO = toBigInt(cM)
469- let cP = toBigInt(cN)
470- aZ(cO, cP)
449+func cy (cz,cA) = {
450+ let cB = toBigInt(cz)
451+ let cC = toBigInt(cA)
452+ aW(cB, cC)
471453 }
472454
473455
474-func cQ (cG,cH) = {
475- let cM = bH()
476- let cN = bI()
477- let cR = bJ()
478- let cS = bK()
479- let cT = aT(cH, cR)
480- let bz = cL(cM, cN)
481- let cU = if (cG)
482- then (cM + cT)
483- else (cM - cT)
484- let cV = toInt(aY(bz, toBigInt(cU)))
485- let cW = bc((cV - cN))
486- let cX = if (cG)
487- then cW
488- else -(cW)
489- let cY = cF(cG, cT, cW)
490- let cZ = cY._1
491- let da = cY._2
492- let db = cY._3
493- let dc = aT(aV(cM, cR), aV(cN, cS))
494- let dd = aT(cH, cW)
495- let de = bc((dc - dd))
496- let df = (aM - aT(dc, (dc + de)))
497- let dg = bX()
498- if ((df > dg))
499- then throw(((((((((((((("Price impact " + toString(df)) + " > max price impact ") + toString(dg)) + " before quote asset: ") + toString(cM)) + " before base asset: ") + toString(cN)) + " quote asset amount to exchange: ") + toString(cH)) + " price before: ") + toString(dc)) + " marketPrice: ") + toString(dd)))
500- else $Tuple4(cX, cZ, da, db)
456+func cD (ct,cu) = {
457+ let cz = bt()
458+ let cA = bu()
459+ let cE = bv()
460+ let cF = bw()
461+ let cG = aQ(cu, cE)
462+ let bj = cy(cz, cA)
463+ let cH = if (ct)
464+ then (cz + cG)
465+ else (cz - cG)
466+ let cI = toInt(aV(bj, toBigInt(cH)))
467+ let cJ = aZ((cI - cA))
468+ let cK = if (ct)
469+ then cJ
470+ else -(cJ)
471+ let cL = cs(ct, cG, cJ)
472+ let cM = cL._1
473+ let cN = cL._2
474+ let cO = cL._3
475+ let cP = aQ(aS(cz, cE), aS(cA, cF))
476+ let cQ = aQ(cu, cJ)
477+ let cR = aZ((cP - cQ))
478+ let cS = (aI - aQ(cP, (cP + cR)))
479+ let cT = bJ()
480+ if ((cS > cT))
481+ then throw(((((((((((((("Price impact " + toString(cS)) + " > max price impact ") + toString(cT)) + " before quote asset: ") + toString(cz)) + " before base asset: ") + toString(cA)) + " quote asset amount to exchange: ") + toString(cu)) + " price before: ") + toString(cP)) + " marketPrice: ") + toString(cQ)))
482+ else $Tuple4(cK, cM, cN, cO)
501483 }
502484
503485
504-func dh (di,dj,dk,dl) = {
505- let dm = if ((di != 0))
506- then {
507- let dn = co(di)
508- aV((dn - dk), di)
509- }
510- else 0
511- let do = ((dl - dm) + dj)
512- let dp = if ((0 > do))
513- then $Tuple2(0, bc(do))
514- else $Tuple2(bc(do), 0)
515- let dq = dp._1
516- let dr = dp._2
517- $Tuple3(dq, dr, dm)
486+func cU (cV,cW) = {
487+ let cX = ((((bT() - cW) / 1000) / 60) * aI)
488+ let cY = aQ(aS(aS(cV, cX), br()), aJ)
489+ cY
518490 }
519491
520492
521-func ds (cG,cI,dt,du,dv,dw,dx) = {
522- let dc = aT(aV(du, dv), aV(dw, dx))
523- if ((cI == 0))
493+func cZ (da,cV,db,cW,dc) = {
494+ let dd = if ((da != 0))
495+ then {
496+ let de = cb(da)
497+ aS((de - db), da)
498+ }
499+ else 0
500+ let cY = cU(cV, cW)
501+ let df = (((dc - cY) - dd) + cV)
502+ let dg = if ((0 > df))
503+ then $Tuple2(0, aZ(df))
504+ else $Tuple2(aZ(df), 0)
505+ let dh = dg._1
506+ let di = dg._2
507+ $Tuple4(dh, di, dd, cY)
508+ }
509+
510+
511+func dj (ct,cv,dk,dl,dm,dn,do) = {
512+ let cP = aQ(aS(dl, dm), aS(dn, do))
513+ if ((cv == 0))
524514 then throw("Invalid base asset amount")
525515 else {
526- let bz = cL(du, dw)
527- let dy = if (cG)
528- then (dw + cI)
529- else (dw - cI)
530- let dz = toInt(aY(bz, toBigInt(dy)))
531- let dA = bc((dz - du))
532- let dB = aV(dA, dv)
533- let dg = bX()
534- let dC = cF(!(cG), dA, cI)
535- let cZ = dC._1
536- let da = dC._2
537- let db = dC._3
538- let dd = aT(dB, cI)
539- let de = bc((dc - dd))
540- let df = (aM - aT(dc, (dc + de)))
541- if (if ((df > dg))
542- then dt
516+ let bj = cy(dl, dn)
517+ let dp = if (ct)
518+ then (dn + cv)
519+ else (dn - cv)
520+ let dq = toInt(aV(bj, toBigInt(dp)))
521+ let dr = aZ((dq - dl))
522+ let ds = aS(dr, dm)
523+ let cT = bJ()
524+ let dt = cs(!(ct), dr, cv)
525+ let cM = dt._1
526+ let cN = dt._2
527+ let cO = dt._3
528+ let cQ = aQ(ds, cv)
529+ let cR = aZ((cP - cQ))
530+ let cS = (aI - aQ(cP, (cP + cR)))
531+ if (if ((cS > cT))
532+ then dk
543533 else false)
544- then throw(((((((((((((("Price impact " + toString(df)) + " > max price impact ") + toString(dg)) + " before quote asset: ") + toString(du)) + " before base asset: ") + toString(dw)) + " base asset amount to exchange: ") + toString(cI)) + " price before: ") + toString(dc)) + " market price: ") + toString(dd)))
545- else $Tuple7(dB, cZ, da, db, (cd() - (if (cG)
546- then bc(cI)
547- else 0)), (cc() - (if (!(cG))
548- then bc(cI)
549- else 0)), df)
534+ then throw(((((((((((((("Price impact " + toString(cS)) + " > max price impact ") + toString(cT)) + " before quote asset: ") + toString(dl)) + " before base asset: ") + toString(dn)) + " base asset amount to exchange: ") + toString(cv)) + " price before: ") + toString(cP)) + " market price: ") + toString(cQ)))
535+ else $Tuple7(ds, cM, cN, cO, (bP() - (if (ct)
536+ then aZ(cv)
537+ else 0)), (bO() - (if (!(ct))
538+ then aZ(cv)
539+ else 0)), cS)
550540 }
551541 }
552542
553543
554-func dD (cG,cI,dt) = ds(cG, cI, dt, bH(), bJ(), bI(), bK())
544+func du (ct,cv,dk) = dj(ct, cv, dk, bt(), bv(), bu(), bw())
555545
556546
557-func dE () = {
558- let dF = valueOrErrorMessage(addressFromString(getStringValue(this, d)), "")
559- let dG = getStringValue(this, a)
560- let dH = valueOrErrorMessage(getInteger(dF, dG), ((("Can not get oracle price. Oracle: " + toString(dF)) + " key: ") + dG))
561- let dI = valueOrElse(getString(this, b), "")
562- if ((dI != ""))
547+func dv () = {
548+ let dw = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(this, d), ("No value: " + d))), "")
549+ let dx = valueOrElse(getString(this, a), ("No value: " + a))
550+ let dy = valueOrErrorMessage(getInteger(dw, dx), ((("Can not get oracle price. Oracle: " + toString(dw)) + " key: ") + dx))
551+ let dz = valueOrElse(getString(this, b), "")
552+ if ((dz != ""))
563553 then {
564- let dJ = lastBlock.height
565- let dK = valueOrErrorMessage(getInteger(dF, dI), ((("Can not get oracle block. Oracle: " + toString(dF)) + " key: ") + dI))
566- if (((dJ - dK) > cg()))
567- then throw(((("Oracle stale data. Last oracle block: " + toString(dK)) + " current block: ") + toString(dJ)))
568- else dH
554+ let dA = lastBlock.height
555+ let dB = valueOrErrorMessage(getInteger(dw, dz), ((("Can not get oracle block. Oracle: " + toString(dw)) + " key: ") + dz))
556+ if (((dA - dB) > bS()))
557+ then throw(((("Oracle stale data. Last oracle block: " + toString(dB)) + " current block: ") + toString(dA)))
558+ else dy
569559 }
570- else dH
560+ else dy
571561 }
572562
573563
574-func dL () = {
575- let dF = valueOrErrorMessage(addressFromString(getStringValue(this, d)), "")
576- let dM = valueOrElse(getString(this, c), "")
577- if ((dM != ""))
564+func dC () = {
565+ let dw = valueOrErrorMessage(addressFromString(getStringValue(this, d)), "")
566+ let dD = valueOrElse(getString(this, c), "")
567+ if ((dD != ""))
578568 then {
579- let dN = valueOrErrorMessage(getBoolean(dF, dM), ((("Can not get oracle is open/closed. Oracle: " + toString(dF)) + " key: ") + dM))
580- !(dN)
569+ let dE = valueOrErrorMessage(getBoolean(dw, dD), ((("Can not get oracle is open/closed. Oracle: " + toString(dw)) + " key: ") + dD))
570+ !(dE)
581571 }
582572 else false
583573 }
584574
585575
586-func dO (dP,du,dw,cR,cS) = {
587- let dQ = aT(aV(du, cR), aV(dw, cS))
588- let dR = aT((dP + dQ), (2 * aM))
589- let dO = aT(bc((dP - dQ)), dR)
590- dO
576+func dF (dG,dl,dn,cE,cF) = {
577+ let dH = aQ(aS(dl, cE), aS(dn, cF))
578+ let dI = aQ((dG + dH), (2 * aI))
579+ let dF = aQ(aZ((dG - dH)), dI)
580+ dF
591581 }
592582
593583
594-func dS (du,dw) = {
595- let dT = dE()
596- let cR = bJ()
597- let cS = bK()
598- let dU = dO(dT, bH(), bI(), cR, cS)
599- let dV = dO(dT, du, dw, cR, cS)
600- if (if ((dV > bY()))
601- then (dV > dU)
584+func dJ (dl,dn) = {
585+ let dK = dv()
586+ let cE = bv()
587+ let cF = bw()
588+ let dL = dF(dK, bt(), bu(), cE, cF)
589+ let dM = dF(dK, dl, dn, cE, cF)
590+ if (if ((dM > bK()))
591+ then (dM > dL)
602592 else false)
603- then throw(((("Price spread " + toString(dV)) + " > max price spread ") + toString(bY())))
593+ then throw(((("Price spread " + toString(dM)) + " > max price spread ") + toString(bK())))
604594 else true
605595 }
606596
607597
608-func dW (dX,dY) = {
609- let dZ = bZ()
610- if ((dX > dZ))
611- then throw(((("Long open notional " + toString(dX)) + " > max open notional ") + toString(dZ)))
612- else if ((dY > dZ))
613- then throw(((("Short open notional " + toString(dY)) + " > max open notional ") + toString(dZ)))
598+func dN (dO,dP) = {
599+ let dQ = bL()
600+ if ((dO > dQ))
601+ then throw(((("Long open notional " + toString(dO)) + " > max open notional ") + toString(dQ)))
602+ else if ((dP > dQ))
603+ then throw(((("Short open notional " + toString(dP)) + " > max open notional ") + toString(dQ)))
614604 else true
615605 }
616606
617607
618-func ea () = {
619- let du = bH()
620- let dw = bI()
621- let cR = bJ()
622- let cS = bK()
623- aT(aV(du, cR), aV(dw, cS))
608+func dR () = {
609+ let dl = bt()
610+ let dn = bu()
611+ let cE = bv()
612+ let cF = bw()
613+ aQ(aS(dl, cE), aS(dn, cF))
624614 }
625615
626616
627-func eb () = {
628- let dT = dE()
629- let ec = ea()
630- (aT(bc((dT - ec)), dT) > bW())
617+func dS () = {
618+ let dK = dv()
619+ let dT = dR()
620+ (aQ(aZ((dK - dT)), dK) > bI())
631621 }
632622
633623
634-func ed (cp,ee,du,dv,dw,dx) = {
635- let ef = bc(cp)
636- let eg = (0 > cp)
637- let eh = if ((ee == aP))
624+func dU (cc,dV,dl,dm,dn,do) = {
625+ let dW = aZ(cc)
626+ let dX = (0 > cc)
627+ let dY = if ((dV == aM))
638628 then {
639- let ei = ds(!(eg), ef, false, du, dv, dw, dx)
640- let ej = ei._1
641- let ek = ei._2
642- let el = ei._3
643- let em = ei._4
644- ej
629+ let dZ = dj(!(dX), dW, false, dl, dm, dn, do)._1
630+ dZ
645631 }
646- else aV(ef, dE())
647- eh
632+ else aS(dW, dv())
633+ dY
648634 }
649635
650636
651-func en (cp,eo,du,dv,dw,dx,ee) = if ((cp == 0))
637+func ea (cc,eb,dl,dm,dn,do,dV) = if ((cc == 0))
652638 then throw("Invalid position size")
653639 else {
654- let eg = (0 > cp)
655- let eh = ed(cp, ee, du, dv, dw, dx)
656- let ep = if (eg)
657- then (eo - eh)
658- else (eh - eo)
659- $Tuple2(eh, ep)
640+ let dX = (0 > cc)
641+ let dY = dU(cc, dV, dl, dm, dn, do)
642+ let ec = if (dX)
643+ then (eb - dY)
644+ else (dY - eb)
645+ $Tuple2(dY, ec)
660646 }
661647
662648
663-func eq (cr,ee) = {
664- let er = cq(cr)
665- let cu = er._1
666- let es = er._2
667- let et = er._3
668- let eu = er._4
669- en(cu, et, bH(), bJ(), bI(), bK(), ee)
649+func ed (ce,dV) = {
650+ let ee = cd(ce)
651+ let ch = ee._1
652+ let ef = ee._2
653+ let eg = ee._3
654+ let eh = ee._4
655+ ea(ch, eg, bt(), bv(), bu(), bw(), dV)
670656 }
671657
672658
673-func ev (ew,ex,ey) = aT((ew - ex), ey)
659+func ei (ej,ek,el) = aQ((ej - ek), el)
674660
675661
676-func ez (cr,ee) = {
677- let eA = cq(cr)
678- let cu = eA._1
679- let es = eA._2
680- let eB = eA._3
681- let eu = eA._4
682- let eC = eq(cr, ee)
683- let eh = eC._1
684- let ep = eC._2
685- let eD = dh(cu, es, eu, ep)
686- let dq = eD._1
687- let dr = eD._2
688- ev(dq, dr, eh)
662+func em (ce,dV) = {
663+ let en = cd(ce)
664+ let ch = en._1
665+ let ef = en._2
666+ let eo = en._3
667+ let ep = en._4
668+ let eq = en._5
669+ let er = ed(ce, dV)
670+ let dY = er._1
671+ let ec = er._2
672+ let es = cZ(ch, ef, ep, eq, ec)
673+ let dh = es._1
674+ let di = es._2
675+ ei(dh, di, dY)
689676 }
690677
691678
692-func eE (cr) = ez(cr, aP)
679+func et (ce) = em(ce, aM)
693680
694681
695-func eF (cr,cp) = {
696- let eG = bd(bV(), (aM - aT(eE(cr), bT())))
697- let eH = aV(bc(cp), eG)
698- let eI = dD((cp > 0), eH, false)
699- let eJ = eI._1
700- let df = eI._7
701- if ((bX() > df))
702- then eJ
682+func eu (ce,cc) = {
683+ let ev = ba(bH(), (aI - aQ(et(ce), bF())))
684+ let ew = aS(aZ(cc), ev)
685+ let ex = du((cc > 0), ew, false)
686+ let ey = ex._1
687+ let cS = ex._7
688+ if ((bJ() > cS))
689+ then ew
690+ else aS(aZ(cc), bH())
691+ }
692+
693+
694+func ez (ce,eA,eB,eC,eD,dk) = {
695+ let eE = cd(ce)
696+ let eF = eE._1
697+ let eG = eE._2
698+ let eH = eE._3
699+ let eI = eE._4
700+ let eJ = eE._5
701+ let eK = (eF > 0)
702+ let eL = aZ(eF)
703+ if (if ((eL >= eA))
704+ then (eA > 0)
705+ else false)
706+ then {
707+ let eM = (eL > eA)
708+ let eN = du((eF > 0), eA, dk)
709+ let eO = eN._1
710+ let cH = eN._2
711+ let cI = eN._3
712+ let eP = eN._4
713+ let eQ = if ((eF > 0))
714+ then -(eA)
715+ else eA
716+ let eR = ed(ce, aM)
717+ let eS = eR._1
718+ let ec = eR._2
719+ let eT = aQ(aZ(eQ), eL)
720+ let eU = aS(ec, eT)
721+ let eV = cZ(eF, eG, eI, eJ, ec)
722+ let eW = eV._1
723+ let eX = eV._2
724+ let eY = eV._3
725+ let cY = eV._4
726+ let eZ = cZ(eF, eG, eI, eJ, eU)._2
727+ let fa = aS(aS(eS, eT), eB)
728+ let fb = (ec - eU)
729+ let fc = if ((eF > 0))
730+ then ((eS - eO) - fb)
731+ else ((fb + eS) - eO)
732+ let fd = (eF + eQ)
733+ let fe = if ((fd == 0))
734+ then $Tuple2(0, 0)
735+ else $Tuple2(aZ(fc), cb(fd))
736+ let ff = fe._1
737+ let fg = fe._2
738+ let fh = (eH - ff)
739+ let fi = em(ce, aM)
740+ let fj = if ((eF > 0))
741+ then (aS((ff + fb), fi) - fb)
742+ else (aS((ff - fb), fi) - fb)
743+ let fk = ((eW - (fj + fb)) - fa)
744+ let fl = if ((0 > fk))
745+ then throw("Invalid internalClosePosition params: unable to pay fee")
746+ else fk
747+ let fm = if (eD)
748+ then (fj + fl)
749+ else fj
750+ if (if ((eC != 0))
751+ then (eC > eO)
752+ else false)
753+ then throw(((("Limit error: " + toString(eO)) + " < ") + toString(eC)))
754+ else $Tuple17(fd, fm, ff, fg, eZ, eU, if (if (eD)
755+ then eM
756+ else false)
757+ then 0
758+ else fl, cH, cI, eP, (by() - fh), (bP() - (if (eK)
759+ then aZ(eQ)
760+ else 0)), (bO() - (if (!(eK))
761+ then aZ(eQ)
762+ else 0)), (bA() - (if (eK)
763+ then fh
764+ else 0)), (bz() - (if (!(eK))
765+ then fh
766+ else 0)), (fa + cY), eO)
767+ }
768+ else throw("Invalid internalClosePosition params: invalid position size")
769+ }
770+
771+
772+func fn () = {
773+ let fo = ((bT() / 1000) / 60)
774+ let fp = (fo - aE)
775+ let fq = valueOrElse(getString(this, E), "")
776+ let fr = split(fq, ",")
777+ func fs (ft,fu) = if ((fp >= valueOrErrorMessage(parseInt(fu), ("getTwapSpotPrice: invalid int: " + fq))))
778+ then (ft :+ parseIntValue(fu))
779+ else ft
780+
781+ let fv = {
782+ let fw = fr
783+ let fx = size(fw)
784+ let fy = nil
785+ func fz (fA,fB) = if ((fB >= fx))
786+ then fA
787+ else fs(fA, fw[fB])
788+
789+ func fC (fA,fB) = if ((fB >= fx))
790+ then fA
791+ else throw("List size exceeds 20")
792+
793+ fC(fz(fz(fz(fz(fz(fz(fz(fz(fz(fz(fz(fz(fz(fz(fz(fz(fz(fz(fz(fz(fy, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
794+ }
795+ let fD = if ((size(fv) > 0))
796+ then max(fv)
797+ else valueOrErrorMessage(parseInt(fr[0]), ("getTwapSpotPrice: invalid int: " + fq))
798+ let fE = valueOrElse(getInteger(this, F), 0)
799+ let fF = valueOrElse(getInteger(this, ((G + "_") + toString(fE))), 0)
800+ let fG = valueOrElse(getInteger(this, ((H + "_") + toString(fE))), 0)
801+ let fH = (fF + ((fo - fE) * fG))
802+ let fI = valueOrElse(getInteger(this, ((G + "_") + toString(fD))), 0)
803+ let fJ = valueOrElse(getInteger(this, ((H + "_") + toString(fD))), 0)
804+ let fK = (fI + ((fp - fD) * fJ))
805+ ((fH - fK) / aE)
806+ }
807+
808+
809+func fL () = {
810+ let cc = bx()
811+ if ((cc == 0))
812+ then $Tuple2(bt(), bu())
703813 else {
704- let eK = aV(bc(cp), bV())
705- let eL = dD((cp > 0), eK, false)._1
706- eL
814+ let fM = (cc > 0)
815+ let fN = du(fM, aZ(cc), false)
816+ let fO = fN._1
817+ let fP = fN._2
818+ let fQ = fN._3
819+ $Tuple2(fP, fQ)
707820 }
708821 }
709822
710823
711-func eM (cr,dt) = {
712- let eN = cq(cr)
713- let cu = eN._1
714- let es = eN._2
715- let et = eN._3
716- let eu = eN._4
717- let ep = eq(cr, aP)._2
718- let eO = dh(cu, es, eu, ep)
719- let dq = eO._1
720- let dr = eO._2
721- let eK = -(cu)
722- let eP = ep
723- let eQ = -(dq)
724- let eR = dD((cu > 0), bc(cu), dt)
725- let eL = eR._1
726- let cU = eR._2
727- let cV = eR._3
728- let eS = eR._4
729- let eT = eR._5
730- let eU = eR._6
731- let eV = (bM() - et)
732- $Tuple13(eK, dr, eP, eQ, cU, cV, eS, eV, eL, eT, eU, (bO() - (if ((cu > 0))
733- then et
734- else 0)), (bN() - (if ((0 > cu))
735- then et
736- else 0)))
824+func fR (fS,bx,fT,fU) = {
825+ let fV = toBigInt(fS)
826+ let fW = toBigInt(bx)
827+ let fX = toBigInt(fT)
828+ let fY = toBigInt(fU)
829+ let bj = aW(fX, fV)
830+ let fZ = (fV + fW)
831+ let ga = aV(bj, fZ)
832+ let gb = aV(ga, fZ)
833+ let gc = aV(fY, gb)
834+ toInt(gc)
737835 }
738836
739837
740-func eW () = {
741- let eX = ((lastBlock.timestamp / 1000) / 60)
742- let eY = (eX - aI)
743- let eZ = valueOrElse(getString(this, C), "")
744- let fa = split(eZ, ",")
745- func fb (bh,fc) = if ((eY >= parseIntValue(fc)))
746- then (bh :+ parseIntValue(fc))
747- else bh
748-
749- let fd = {
750- let bk = fa
751- let bl = size(bk)
752- let bm = nil
753- func bn (bo,bp) = if ((bp >= bl))
754- then bo
755- else fb(bo, bk[bp])
756-
757- func bq (bo,bp) = if ((bp >= bl))
758- then bo
759- else throw("List size exceeds 20")
760-
761- bq(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bm, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
762- }
763- let fe = if ((size(fd) > 0))
764- then max(fd)
765- else parseIntValue(fa[0])
766- let ff = valueOrElse(getInteger(this, D), 0)
767- let fg = valueOrElse(getInteger(this, ((E + "_") + toString(ff))), 0)
768- let fh = valueOrElse(getInteger(this, ((F + "_") + toString(ff))), 0)
769- let fi = (fg + ((eX - ff) * fh))
770- let fj = valueOrElse(getInteger(this, ((E + "_") + toString(fe))), 0)
771- let fk = valueOrElse(getInteger(this, ((F + "_") + toString(fe))), 0)
772- let fl = (fj + ((eY - fe) * fk))
773- ((fi - fl) / aI)
774- }
775-
776-
777-func fm () = {
778- let cp = bL()
779- if ((cp == 0))
780- then $Tuple2(bH(), bI())
838+func gd (ge,cz,cA) = {
839+ let cc = bx()
840+ if ((cc == 0))
841+ then {
842+ let gf = aQ(aS(ge, cA), cz)
843+ $Tuple3(gf, aI, 0)
844+ }
781845 else {
782- let fn = (cp > 0)
783- let fo = dD(fn, bc(cp), false)
784- let fp = fo._1
785- let fq = fo._2
786- let fr = fo._3
787- $Tuple2(fq, fr)
846+ let fM = (cc > 0)
847+ let fO = du(fM, aZ(cc), false)._1
848+ let gf = fR(cA, cc, cz, ge)
849+ let gg = aI
850+ let gh = ea(cc, fO, cz, gf, cA, gg, aM)._2
851+ $Tuple3(gf, gg, gh)
788852 }
789853 }
790854
791855
792-func fs (ft,bL,fu,fv) = {
793- let fw = toBigInt(ft)
794- let fx = toBigInt(bL)
795- let fy = toBigInt(fu)
796- let fz = toBigInt(fv)
797- let bz = aZ(fy, fw)
798- let fA = (fw + fx)
799- let fB = aY(bz, fA)
800- let fC = aY(fB, fA)
801- let fD = aY(fz, fC)
802- toInt(fD)
803- }
804-
805-
806-func fE (fF,cM,cN) = {
807- let cp = bL()
808- if ((cp == 0))
809- then {
810- let fG = aT(aV(fF, cN), cM)
811- $Tuple3(fG, aM, 0)
812- }
813- else {
814- let fn = (cp > 0)
815- let fp = dD(fn, bc(cp), false)._1
816- let fG = fs(cN, cp, cM, fF)
817- let fH = aM
818- let eQ = en(cp, fp, cM, fG, cN, fH, aP)._2
819- $Tuple3(fG, fH, eQ)
820- }
821- }
822-
823-
824-func fI () = {
825- let fJ = dE()
826- let fK = eW()
827- let fL = (fK - fJ)
828- if (if (if ((cc() == 0))
856+func gi () = {
857+ let gj = dv()
858+ let gk = fn()
859+ let gl = (gk - gj)
860+ if (if (if ((bO() == 0))
829861 then true
830- else (cd() == 0))
862+ else (bP() == 0))
831863 then true
832- else dL())
864+ else dC())
833865 then $Tuple2(0, 0)
834- else if ((0 > fL))
866+ else if ((0 > gl))
835867 then {
836- let fM = aT(aV(fL, bR()), aN)
837- let fN = aT(aV(fM, cc()), cd())
838- $Tuple2(fM, fN)
868+ let gm = aQ(aS(gl, bD()), aK)
869+ let gn = aQ(aS(gm, bO()), bP())
870+ $Tuple2(gm, gn)
839871 }
840872 else {
841- let fN = aT(aV(fL, bR()), aN)
842- let fM = aT(aV(fN, cd()), cc())
843- $Tuple2(fM, fN)
873+ let gn = aQ(aS(gl, bD()), aK)
874+ let gm = aQ(aS(gn, bP()), bO())
875+ $Tuple2(gm, gn)
844876 }
845877 }
846878
847879
848-func fO (fP,fQ) = {
849- let fR = bF()
850- let fS = aV(fR, fQ)
851- let fT = if ((fP != ""))
880+func go (gp,gq) = {
881+ let gr = bq()
882+ let gs = aS(gr, gq)
883+ let gt = if ((gp != ""))
852884 then {
853- let fU = bC(ax(), ak(aE, fP))
854- if ((fU == aF))
885+ let gu = bm(ax(), ak(aA, gp))
886+ if ((gu == aB))
855887 then {
856- let fV = bD(ax(), ak(aD, fP))
857- let fW = aV(fS, fV)
858- $Tuple2(fW, true)
888+ let gv = bo(ax(), ak(az, gp))
889+ let gw = aS(gs, gv)
890+ $Tuple2(gw, true)
859891 }
860892 else throw("Invalid attached artifact")
861893 }
862- else $Tuple2(fS, false)
863- let fW = fT._1
864- let fX = fT._2
865- $Tuple2(fW, fX)
894+ else $Tuple2(gs, false)
895+ let gw = gt._1
896+ let gx = gt._2
897+ $Tuple2(gw, gx)
866898 }
867899
868900
869-func fY (cr,aC) = {
870- let fZ = cq(cr)._1
871- if ((fZ == 0))
901+func gy (ce,gz) = {
902+ let eF = cd(ce)._1
903+ if ((eF == 0))
872904 then true
873- else (cv(cr) == aC)
905+ else (ci(ce) == gz)
874906 }
875907
876908
877-func ga (cr,aC) = (cv(cr) == aC)
909+func gA (ce,gz) = (ci(ce) == gz)
878910
879911
880-func gb (gc,aC,cr) = ((((((aj + "_") + gc) + "_") + aC) + "_") + cr)
881-
882-
883-func gd (cr) = {
884- let cx = cv(cr)
885- if ((cx == toBase58String(aq())))
886- then $Tuple2(0, cx)
887- else {
888- let ge = gb(toString(this), cx, cr)
889- let gf = valueOrElse(getInteger(ay(), ge), 0)
890- $Tuple2(gf, cx)
891- }
892- }
893-
894-
895-func gg (cr,fP) = {
896- let gh = invoke(au(), "computeFeeDiscount", [cr], nil)
897- if ((gh == gh))
912+func gB (ce,gp) = {
913+ let gC = invoke(au(), "computeFeeDiscount", [ce], nil)
914+ if ((gC == gC))
898915 then {
899- let gi = {
900- let ct = gh
901- if ($isInstanceOf(ct, "Int"))
916+ let gD = {
917+ let cg = gC
918+ if ($isInstanceOf(cg, "Int"))
902919 then {
903- let gj = ct
904- gj
920+ let gE = cg
921+ gE
905922 }
906923 else throw("Invalid computeFeeDiscount result")
907924 }
908- let gk = fO(fP, gi)
909- let fW = gk._1
910- let fX = gk._2
911- $Tuple2(fW, fX)
925+ let gF = go(gp, gD)
926+ let gw = gF._1
927+ let gx = gF._2
928+ $Tuple2(gw, gx)
912929 }
913930 else throw("Strict value is not equal to itself.")
914931 }
915932
916933
917-func gl (ci) = {
918- let gm = if ((size(ci.payments) > 1))
919- then toBase58String(valueOrErrorMessage(ci.payments[1].assetId, "Invalid artifactId"))
934+func gG (bV) = {
935+ let gH = if ((size(bV.payments) > 1))
936+ then toBase58String(valueOrErrorMessage(bV.payments[1].assetId, "Invalid artifactId"))
920937 else ""
921- gm
938+ gH
922939 }
923940
924941
925-func gn (go) = {
926- let gp = aV(go, cf())
927- let gq = (go - gp)
928- $Tuple2(gp, gq)
942+func gI (gJ) = {
943+ let gK = aS(gJ, bR())
944+ let gL = (gJ - gK)
945+ $Tuple2(gK, gL)
929946 }
930947
931948
932-func gr (gs,gt,gu,gv,gw,gx,gy,gz,gA,dZ,gB,gC) = [IntegerEntry(s, gs), IntegerEntry(t, gt), IntegerEntry(u, gu), IntegerEntry(r, gv), IntegerEntry(q, gw), IntegerEntry(w, gx), IntegerEntry(x, gy), IntegerEntry(v, gz), IntegerEntry(y, gA), IntegerEntry(z, dZ), IntegerEntry(A, gB), IntegerEntry(B, gB)]
949+func gM (gN,gO,gP,gQ,eB,gR,gS,gT,gU,dQ,gV,gW,gX) = [IntegerEntry(u, gN), IntegerEntry(v, gO), IntegerEntry(w, gP), IntegerEntry(t, gQ), IntegerEntry(r, eB), IntegerEntry(y, gR), IntegerEntry(z, gS), IntegerEntry(x, gT), IntegerEntry(A, gU), IntegerEntry(B, dQ), IntegerEntry(C, gV), IntegerEntry(D, gV), IntegerEntry(s, gX)]
933950
934951
935-func gD (gE,gF,gG,gH,gI) = [IntegerEntry(J, gE), IntegerEntry(H, gF), IntegerEntry(I, gG), IntegerEntry(K, gH), IntegerEntry(L, gI)]
952+func gY (gZ,ha,hb,hc,hd) = [IntegerEntry(L, gZ), IntegerEntry(J, ha), IntegerEntry(K, hb), IntegerEntry(M, hc), IntegerEntry(N, hd)]
936953
937954
938-func gJ (am,aC) = [StringEntry(ak(l, am), aC)]
939-
940-
941-func gK (gL,am) = if (gL)
955+func he (hf,am) = if (hf)
942956 then {
943- let gM = ce()
944-[IntegerEntry(ak(k, am), (gM + 1)), IntegerEntry(f, (gM + 1))]
957+ let hg = bQ()
958+[IntegerEntry(ak(k, am), (hg + 1)), IntegerEntry(f, (hg + 1))]
945959 }
946960 else nil
947961
948962
949-func gN (gL,am,gw) = if (gL)
950- then [IntegerEntry(ak(m, am), gw)]
963+func hh (hf,am,eB) = if (hf)
964+ then [IntegerEntry(ak(m, am), eB)]
951965 else nil
952966
953967
954-func gO (am,gP,gQ,gR,dn) = [IntegerEntry(ak(g, am), gP), IntegerEntry(ak(h, am), gQ), IntegerEntry(ak(i, am), gR), IntegerEntry(ak(j, am), dn)]
968+func hi (am,eA,hj,hk,de,hl) = [IntegerEntry(ak(g, am), eA), IntegerEntry(ak(h, am), hj), IntegerEntry(ak(i, am), hk), IntegerEntry(ak(j, am), de), IntegerEntry(ak(n, am), hl)]
955969
956970
957-func gS (gT) = {
958- let eX = ((lastBlock.timestamp / 1000) / 60)
959- let gU = valueOrElse(getInteger(this, D), 0)
960- if ((gU > eX))
971+func hm (hn) = {
972+ let fo = ((bT() / 1000) / 60)
973+ let ho = valueOrElse(getInteger(this, F), 0)
974+ if ((ho > fo))
961975 then throw("TWAP out-of-order")
962976 else {
963- let ff = if ((gU == 0))
964- then eX
965- else gU
966- if ((eX > gU))
977+ let fE = if ((ho == 0))
978+ then fo
979+ else ho
980+ if ((fo > ho))
967981 then {
968- let gV = valueOrElse(getInteger(this, ((E + "_") + toString(gU))), 0)
969- let gW = valueOrElse(getInteger(this, ((F + "_") + toString(gU))), gT)
970- let gX = (gV + ((eX - ff) * gW))
971- let fa = bv(bt(valueOrElse(getString(this, C), "")), aI, toString(eX))
972-[IntegerEntry(ak(E, toString(eX)), gX), IntegerEntry(ak(F, toString(eX)), gT), IntegerEntry(ak(G, toString(eX)), gU), IntegerEntry(D, eX), StringEntry(C, be(fa))]
982+ let hp = valueOrElse(getInteger(this, ((G + "_") + toString(ho))), 0)
983+ let hq = valueOrElse(getInteger(this, ((H + "_") + toString(ho))), hn)
984+ let hr = (hp + ((fo - fE) * hq))
985+ let fr = bf(bd(valueOrElse(getString(this, E), "")), aE, toString(fo))
986+[IntegerEntry(ak(G, toString(fo)), hr), IntegerEntry(ak(H, toString(fo)), hn), IntegerEntry(ak(I, toString(fo)), ho), IntegerEntry(F, fo), StringEntry(E, bb(fr))]
973987 }
974988 else {
975- let gY = valueOrElse(getInteger(this, ak(G, toString(eX))), 0)
976- let gV = valueOrElse(getInteger(this, ak(E, toString(gY))), 0)
977- let gW = valueOrElse(getInteger(this, ak(F, toString(gY))), gT)
978- let gX = (gV + ((eX - gY) * gW))
979-[IntegerEntry(ak(E, toString(eX)), gX), IntegerEntry(ak(F, toString(eX)), gT)]
989+ let hs = valueOrElse(getInteger(this, ak(I, toString(fo))), 0)
990+ let hp = valueOrElse(getInteger(this, ak(G, toString(hs))), 0)
991+ let hq = valueOrElse(getInteger(this, ak(H, toString(hs))), hn)
992+ let hr = (hp + ((fo - hs) * hq))
993+[IntegerEntry(ak(G, toString(fo)), hr), IntegerEntry(ak(H, toString(fo)), hn)]
980994 }
981995 }
982996 }
983997
984998
985-func gZ (cM,cN) = [IntegerEntry(M, cM), IntegerEntry(N, cN)]
999+func ht (cz,cA) = [IntegerEntry(O, cz), IntegerEntry(P, cA)]
9861000
9871001
988-func ha (cR,cS) = [IntegerEntry(O, cR), IntegerEntry(P, cS)]
1002+func hu (cE,cF) = [IntegerEntry(Q, cE), IntegerEntry(R, cF)]
9891003
9901004
991-func hb (cM,cN,hc,hd,he,hf,hg,hh) = {
992- let cR = bJ()
993- let cS = bK()
994- if (((he - hf) != hc))
995- then throw(((((("Invalid AMM state data: " + toString(he)) + " + ") + toString(hf)) + " != ") + toString(hc)))
996- else ((gZ(cM, cN) ++ [IntegerEntry(Q, hc), IntegerEntry(T, hd), IntegerEntry(R, he), IntegerEntry(S, hf), IntegerEntry(V, hg), IntegerEntry(U, hh)]) ++ gS(aT(aV(cM, cR), aV(cN, cS))))
1005+func hv (cz,cA,hw,hx,hy,hz,hA,hB) = {
1006+ let cE = bv()
1007+ let cF = bw()
1008+ if (((hy - hz) != hw))
1009+ then throw(((((("Invalid AMM state data: " + toString(hy)) + " + ") + toString(hz)) + " != ") + toString(hw)))
1010+ else ((ht(cz, cA) ++ [IntegerEntry(S, hw), IntegerEntry(V, hx), IntegerEntry(T, hy), IntegerEntry(U, hz), IntegerEntry(X, hA), IntegerEntry(W, hB)]) ++ hm(aQ(aS(cz, cE), aS(cA, cF))))
9971011 }
9981012
9991013
1000-func hi (am) = [DeleteEntry(ak(g, am)), DeleteEntry(ak(h, am)), DeleteEntry(ak(i, am)), DeleteEntry(ak(j, am)), DeleteEntry(ak(l, am))]
1014+func hC (am) = [DeleteEntry(ak(g, am)), DeleteEntry(ak(h, am)), DeleteEntry(ak(i, am)), DeleteEntry(ak(j, am)), DeleteEntry(ak(l, am)), DeleteEntry(ak(m, am)), DeleteEntry(ak(n, am))]
10011015
10021016
1003-func hj (am,hk) = {
1004- let hl = assetBalance(this, aq())
1005- if ((hk > hl))
1006- then throw(((("Unable to withdraw " + toString(hk)) + " from contract balance ") + toString(hl)))
1007- else [ScriptTransfer(am, hk, aq())]
1017+func hD (am,hE) = {
1018+ let hF = assetBalance(this, aq())
1019+ if ((hE > hF))
1020+ then throw(((("Unable to withdraw " + toString(hE)) + " from contract balance ") + toString(hF)))
1021+ else [ScriptTransfer(am, hE, aq())]
10081022 }
10091023
10101024
1011-func hm (ci) = if ((0 > ci))
1025+func hG (bV) = if ((0 > bV))
10121026 then throw("Balance")
1013- else [IntegerEntry(e, ci)]
1027+ else [IntegerEntry(e, bV)]
10141028
10151029
1016-func hn (ci) = [ScriptTransfer(as(), ci, aq())]
1030+func hH (bV) = [ScriptTransfer(as(), bV, aq())]
10171031
10181032
1019-func ho (hp,ci) = if (hp)
1020- then [Burn(valueOrErrorMessage(ci.payments[1].assetId, "Invalid artifact"), 1)]
1033+func hI (hJ,bV) = if (hJ)
1034+ then [Burn(valueOrErrorMessage(bV.payments[1].assetId, "Invalid artifact"), 1)]
10211035 else nil
10221036
10231037
1024-@Callable(ci)
1025-func pause () = if ((ci.caller != ao()))
1038+@Callable(bV)
1039+func pause () = if ((bV.caller != ao()))
10261040 then throw("Invalid pause params")
1027- else [BooleanEntry(o, true)]
1028-
1029-
1030-
1031-@Callable(ci)
1032-func unpause () = if ((ci.caller != ao()))
1033- then throw("Invalid unpause params")
1034- else [BooleanEntry(o, false)]
1035-
1036-
1037-
1038-@Callable(ci)
1039-func setCloseOnly () = if ((ci.caller != ao()))
1040- then throw("Invalid setCloseOnly params")
10411041 else [BooleanEntry(p, true)]
10421042
10431043
10441044
1045-@Callable(ci)
1046-func unsetCloseOnly () = if ((ci.caller != ao()))
1047- then throw("Invalid unsetCloseOnly params")
1045+@Callable(bV)
1046+func unpause () = if ((bV.caller != ao()))
1047+ then throw("Invalid unpause params")
10481048 else [BooleanEntry(p, false)]
10491049
10501050
10511051
1052-@Callable(ci)
1053-func addLiquidity (cH) = if (if ((ci.caller != ao()))
1052+@Callable(bV)
1053+func setCloseOnly () = if ((bV.caller != ao()))
1054+ then throw("Invalid setCloseOnly params")
1055+ else [BooleanEntry(q, true)]
1056+
1057+
1058+
1059+@Callable(bV)
1060+func unsetCloseOnly () = if ((bV.caller != ao()))
1061+ then throw("Invalid unsetCloseOnly params")
1062+ else [BooleanEntry(q, false)]
1063+
1064+
1065+
1066+@Callable(bV)
1067+func addLiquidity (cu) = if (if ((bV.caller != ao()))
10541068 then true
1055- else (0 >= cH))
1069+ else (0 >= cu))
10561070 then throw("Invalid addLiquidity params")
10571071 else {
1058- let cM = bH()
1059- let cN = bI()
1060- let cR = bJ()
1061- let cS = bK()
1062- let hq = aT(aV(cM, cR), aV(cN, cS))
1063- let hr = (cM + cH)
1064- let hs = (aT(aV(hr, cR), hq) - cN)
1065- let ht = (cN + hs)
1066- let hu = fE(dE(), hr, ht)
1067- let hv = hu._1
1068- let hw = hu._2
1069- let eQ = hu._3
1070- let hx = if ((eQ != 0))
1072+ let cz = bt()
1073+ let cA = bu()
1074+ let cE = bv()
1075+ let cF = bw()
1076+ let hK = aQ(aS(cz, cE), aS(cA, cF))
1077+ let hL = (cz + cu)
1078+ let hM = (aQ(aS(hL, cE), hK) - cA)
1079+ let hN = (cA + hM)
1080+ let hO = gd(dv(), hL, hN)
1081+ let hP = hO._1
1082+ let hQ = hO._2
1083+ let gh = hO._3
1084+ let hR = if ((gh != 0))
10711085 then {
1072- let hx = invoke(at(), "exchangeFreeAndLocked", [eQ], nil)
1073- if ((hx == hx))
1086+ let hR = invoke(at(), "exchangeFreeAndLocked", [gh], nil)
1087+ if ((hR == hR))
10741088 then nil
10751089 else throw("Strict value is not equal to itself.")
10761090 }
10771091 else nil
1078- if ((hx == hx))
1079- then (gZ(hr, ht) ++ ha(hv, hw))
1092+ if ((hR == hR))
1093+ then (ht(hL, hN) ++ hu(hP, hQ))
10801094 else throw("Strict value is not equal to itself.")
10811095 }
10821096
10831097
10841098
1085-@Callable(ci)
1086-func removeLiquidity (cH) = if (if ((ci.caller != ao()))
1099+@Callable(bV)
1100+func removeLiquidity (cu) = if (if ((bV.caller != ao()))
10871101 then true
1088- else (cH >= 0))
1102+ else (cu >= 0))
10891103 then throw("Invalid removeLiquidity params")
10901104 else {
1091- let cM = bH()
1092- let cN = bI()
1093- let cR = bJ()
1094- let cS = bK()
1095- let hq = aT(aV(cM, cR), aV(cN, cS))
1096- let hr = (cM - cH)
1097- let hy = bc((aT(aV(hr, cR), hq) - cN))
1098- let ht = (cN - hy)
1099- let hz = fE(dE(), hr, ht)
1100- let hv = hz._1
1101- let hw = hz._2
1102- let eQ = hz._3
1103- let hx = if ((eQ != 0))
1105+ let cz = bt()
1106+ let cA = bu()
1107+ let cE = bv()
1108+ let cF = bw()
1109+ let hK = aQ(aS(cz, cE), aS(cA, cF))
1110+ let hL = (cz - cu)
1111+ let hS = aZ((aQ(aS(hL, cE), hK) - cA))
1112+ let hN = (cA - hS)
1113+ let hT = gd(dv(), hL, hN)
1114+ let hP = hT._1
1115+ let hQ = hT._2
1116+ let gh = hT._3
1117+ let hR = if ((gh != 0))
11041118 then {
1105- let hx = invoke(at(), "exchangeFreeAndLocked", [eQ], nil)
1106- if ((hx == hx))
1119+ let hR = invoke(at(), "exchangeFreeAndLocked", [gh], nil)
1120+ if ((hR == hR))
11071121 then nil
11081122 else throw("Strict value is not equal to itself.")
11091123 }
11101124 else nil
1111- if ((hx == hx))
1112- then (gZ(hr, ht) ++ ha(hv, hw))
1125+ if ((hR == hR))
1126+ then (ht(hL, hN) ++ hu(hP, hQ))
11131127 else throw("Strict value is not equal to itself.")
11141128 }
11151129
11161130
11171131
1118-@Callable(ci)
1119-func changeSettings (gs,gt,gu,gv,gw,gx,gy,gz,gA,dZ,gB,gC) = if ((ci.caller != ao()))
1132+@Callable(bV)
1133+func changeSettings (gN,gO,gP,gQ,eB,gR,gS,gT,gU,dQ,gV,gW,gX) = if ((bV.caller != ao()))
11201134 then throw("Invalid changeSettings params")
1121- else gr(gs, gt, gu, gv, gw, gx, gy, gz, gA, dZ, gB, gC)
1135+ else gM(gN, gO, gP, gQ, eB, gR, gS, gT, gU, dQ, gV, gW, gX)
11221136
11231137
11241138
1125-@Callable(ci)
1126-func initialize (cM,cN,gv,gs,gt,gu,gw,hA,hB,hC,hD,gx,gy,gz,gA,dZ,gB,gC) = if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if ((0 >= cM))
1139+@Callable(bV)
1140+func initialize (cz,cA,gQ,gN,gO,gP,eB,hU,hV,hW,hX,gR,gS,gT,gU,dQ,gV,gW,gX) = if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if ((0 >= cz))
11271141 then true
1128- else (0 >= cN))
1142+ else (0 >= cA))
11291143 then true
1130- else (0 >= gv))
1144+ else (0 >= gQ))
11311145 then true
1132- else (0 >= gs))
1146+ else (0 >= gN))
11331147 then true
1134- else (0 >= gt))
1148+ else (0 >= gO))
11351149 then true
1136- else (0 >= gu))
1150+ else (0 >= gP))
11371151 then true
1138- else (0 >= gw))
1152+ else (0 >= eB))
11391153 then true
1140- else (0 >= gx))
1154+ else (0 >= gR))
11411155 then true
1142- else (0 >= gy))
1156+ else (0 >= gS))
11431157 then true
1144- else (0 >= gz))
1158+ else (0 >= gT))
11451159 then true
1146- else (0 >= gA))
1160+ else (0 >= gU))
11471161 then true
1148- else (0 >= dZ))
1162+ else (0 >= dQ))
11491163 then true
1150- else (0 >= gB))
1164+ else (0 >= gV))
11511165 then true
1152- else (gB > aM))
1166+ else (gV > aI))
11531167 then true
1154- else (0 >= gC))
1168+ else (0 >= gW))
11551169 then true
1156- else cC())
1170+ else (0 >= gX))
1171+ then true
1172+ else cp())
11571173 then throw("Invalid initialize parameters")
1158- else ((((hb(cM, cN, 0, 0, 0, 0, 0, 0) ++ gr(gs, gt, gu, gv, gw, gx, gy, gz, gA, dZ, gB, gC)) ++ gD((lastBlock.timestamp + gv), 0, 0, 0, 0)) ++ hm(0)) ++ [BooleanEntry(n, true), StringEntry(d, hA), StringEntry(a, hB), StringEntry(b, hC), StringEntry(W, hD)])
1174+ else ((((hv(cz, cA, 0, 0, 0, 0, 0, 0) ++ gM(gN, gO, gP, gQ, eB, gR, gS, gT, gU, dQ, gV, gW, gX)) ++ gY((bT() + gQ), 0, 0, 0, 0)) ++ hG(0)) ++ [BooleanEntry(o, true), StringEntry(d, hU), StringEntry(a, hV), StringEntry(b, hW), StringEntry(Y, hX)])
11591175
11601176
11611177
1162-@Callable(ci)
1163-func increasePosition (hE,hF,hG,hH) = {
1164- let hI = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1165- if ((hI == hI))
1178+@Callable(bV)
1179+func increasePosition (hY,hZ,ia,ib) = {
1180+ let ic = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1181+ if ((ic == ic))
11661182 then {
1167- let cr = ch(ci)
1168- let hJ = ci.payments[0].amount
1169- let aC = ci.payments[0].assetId
1170- let hK = toBase58String(value(aC))
1171- let hL = (aC == aq())
1172- let hM = aB(hK)
1173- if (if (if (if (if (if (if (if (if (if ((hE != aG))
1174- then (hE != aH)
1183+ let ce = bU(bV)
1184+ let id = bV.payments[0].amount
1185+ let gz = bV.payments[0].assetId
1186+ let ie = toBase58String(value(gz))
1187+ let if = (gz == aq())
1188+ if (if (if (if (if (if (if (if (if (if ((hY != aC))
1189+ then (hY != aD)
11751190 else false)
11761191 then true
1177- else (0 >= hJ))
1192+ else (0 >= id))
11781193 then true
1179- else !(cC()))
1194+ else !(cp()))
11801195 then true
1181- else if (!(hL))
1182- then !(hM)
1183- else false)
1196+ else !(if))
11841197 then true
1185- else !(fY(cr, hK)))
1198+ else !(gy(ce, ie)))
11861199 then true
1187- else !(cj(aT(aM, hF), bG(), true)))
1200+ else !(bW(aQ(aI, hZ), bs(), true)))
11881201 then true
1189- else cD())
1202+ else cq())
11901203 then true
1191- else cE())
1204+ else cr())
11921205 then true
1193- else dL())
1206+ else dC())
11941207 then throw("Invalid increasePosition parameters")
11951208 else {
1196- let hN = gg(cr, gl(ci))
1197- let fW = hN._1
1198- let fX = hN._2
1199- let hk = aT(hJ, (aV(fW, hF) + aM))
1200- let hO = (hJ - hk)
1201- let hP = if (hM)
1209+ let ig = gB(ce, gG(bV))
1210+ let gw = ig._1
1211+ let gx = ig._2
1212+ let hE = aQ(id, (aS(gw, hZ) + aI))
1213+ let ih = (id - hE)
1214+ let ii = invoke(aw(), "acceptPaymentWithLink", [ce, ib], [AttachedPayment(aq(), ih)])
1215+ if ((ii == ii))
12021216 then {
1203- let hQ = invoke(ay(), "borrow", [cr], [AttachedPayment(aC, hk)])
1204- if ((hQ == hQ))
1217+ let ij = {
1218+ let cg = ii
1219+ if ($isInstanceOf(cg, "Int"))
1220+ then {
1221+ let gE = cg
1222+ gE
1223+ }
1224+ else throw("Invalid referrerFee")
1225+ }
1226+ let ik = (ih - ij)
1227+ let il = cd(ce)
1228+ let eF = il._1
1229+ let eG = il._2
1230+ let eH = il._3
1231+ let eI = il._4
1232+ let eJ = il._5
1233+ let im = (eF == 0)
1234+ let in = if ((eF > 0))
1235+ then (hY == aC)
1236+ else (hY == aD)
1237+ let io = if (!(im))
1238+ then in
1239+ else false
1240+ let ip = (hY == aC)
1241+ let iq = if (if (im)
1242+ then true
1243+ else io)
12051244 then {
1206- let hR = assetBalance(this, aq())
1207- if ((hR == hR))
1208- then {
1209- let hS = invoke(az(), "swap", [toBase58String(aq()), 0], [AttachedPayment(aC, hO)])
1210- if ((hS == hS))
1211- then {
1212- let hT = assetBalance(this, aq())
1213- if ((hT == hT))
1214- then {
1215- let hU = (hT - hR)
1216- if ((hU == hU))
1217- then hU
1218- else throw("Strict value is not equal to itself.")
1219- }
1220- else throw("Strict value is not equal to itself.")
1221- }
1222- else throw("Strict value is not equal to itself.")
1245+ let ir = aS(hE, hZ)
1246+ let is = cD(ip, ir)
1247+ let cK = is._1
1248+ let cH = is._2
1249+ let cI = is._3
1250+ let eP = is._4
1251+ if (if ((ia != 0))
1252+ then (ia > aZ(cK))
1253+ else false)
1254+ then throw(((("Limit error: " + toString(aZ(cK))) + " < ") + toString(ia)))
1255+ else {
1256+ let fd = (eF + cK)
1257+ let it = (bA() + (if ((fd > 0))
1258+ then ir
1259+ else 0))
1260+ let iu = (bz() + (if ((0 > fd))
1261+ then ir
1262+ else 0))
1263+ let iv = cZ(eF, eG, eI, eJ, hE)
1264+ let dh = iv._1
1265+ let eX = iv._2
1266+ let eY = iv._3
1267+ let cY = iv._4
1268+ if (!(dJ(cH, cI)))
1269+ then throw("Over max spread limit")
1270+ else if (!(dN(it, iu)))
1271+ then throw("Over max open notional")
1272+ else $Tuple14(fd, dh, (eH + ir), cb(fd), bT(), cI, cH, eP, (by() + ir), (bP() + (if ((fd > 0))
1273+ then aZ(cK)
1274+ else 0)), (bO() + (if ((0 > fd))
1275+ then aZ(cK)
1276+ else 0)), it, iu, cY)
12231277 }
1278+ }
1279+ else {
1280+ let ir = aS(hE, hZ)
1281+ let iw = ed(toString(bV.caller), aM)
1282+ let eS = iw._1
1283+ let ec = iw._2
1284+ if ((eS > ir))
1285+ then throw("Use decreasePosition to decrease position size")
1286+ else throw("Close position first")
1287+ }
1288+ let fd = iq._1
1289+ let ix = iq._2
1290+ let ff = iq._3
1291+ let iy = iq._4
1292+ let iz = iq._5
1293+ let cI = iq._6
1294+ let cH = iq._7
1295+ let eP = iq._8
1296+ let iA = iq._9
1297+ let iB = iq._10
1298+ let iC = iq._11
1299+ let it = iq._12
1300+ let iu = iq._13
1301+ let cY = iq._14
1302+ let iD = gI((ik + cY))
1303+ let gK = iD._1
1304+ let gL = iD._2
1305+ let iE = if (if)
1306+ then {
1307+ let iE = invoke(at(), "addLocked", [false], [AttachedPayment(aq(), hE)])
1308+ if ((iE == iE))
1309+ then nil
12241310 else throw("Strict value is not equal to itself.")
12251311 }
1226- else throw("Strict value is not equal to itself.")
1227- }
1228- else hO
1229- if ((hP == hP))
1230- then {
1231- let hV = invoke(aw(), "acceptPaymentWithLink", [cr, hH], [AttachedPayment(aq(), hP)])
1232- if ((hV == hV))
1312+ else nil
1313+ if ((iE == iE))
12331314 then {
1234- let hW = {
1235- let ct = hV
1236- if ($isInstanceOf(ct, "Int"))
1237- then {
1238- let gj = ct
1239- gj
1240- }
1241- else throw("Invalid referrerFee")
1242- }
1243- let hX = (hP - hW)
1244- let hY = cq(cr)
1245- let fZ = hY._1
1246- let hZ = hY._2
1247- let ia = hY._3
1248- let ib = hY._4
1249- let ic = (fZ == 0)
1250- let id = if ((fZ > 0))
1251- then (hE == aG)
1252- else (hE == aH)
1253- let ie = if (!(ic))
1254- then id
1255- else false
1256- let if = (hE == aG)
1257- let ig = if (if (ic)
1258- then true
1259- else ie)
1315+ let iF = invoke(at(), "addFree", nil, [AttachedPayment(aq(), gL)])
1316+ if ((iF == iF))
12601317 then {
1261- let ih = aV(hk, hF)
1262- let ii = cQ(if, ih)
1263- let cX = ii._1
1264- let cU = ii._2
1265- let cV = ii._3
1266- let eS = ii._4
1267- if (if ((hG != 0))
1268- then (hG > bc(cX))
1269- else false)
1270- then throw(((("Limit error: " + toString(bc(cX))) + " < ") + toString(hG)))
1271- else {
1272- let ij = (fZ + cX)
1273- let ik = (bO() + (if ((ij > 0))
1274- then ih
1275- else 0))
1276- let il = (bN() + (if ((0 > ij))
1277- then ih
1278- else 0))
1279- let im = dh(fZ, hZ, ib, hk)
1280- let dq = im._1
1281- let ek = im._2
1282- let el = im._3
1283- if (!(dS(cU, cV)))
1284- then throw("Over max spread limit")
1285- else if (!(dW(ik, il)))
1286- then throw("Over max open notional")
1287- else $Tuple12(ij, dq, (ia + ih), co(ij), cV, cU, eS, (bM() + ih), (cd() + (if ((ij > 0))
1288- then bc(cX)
1289- else 0)), (cc() + (if ((0 > ij))
1290- then bc(cX)
1291- else 0)), ik, il)
1292- }
1293- }
1294- else {
1295- let ih = aV(hk, hF)
1296- let in = eq(toString(ci.caller), aP)
1297- let io = in._1
1298- let ep = in._2
1299- if ((io > ih))
1300- then throw("Use decreasePosition to decrease position size")
1301- else throw("Close position first")
1302- }
1303- let ij = ig._1
1304- let ip = ig._2
1305- let iq = ig._3
1306- let ir = ig._4
1307- let cV = ig._5
1308- let cU = ig._6
1309- let eS = ig._7
1310- let eV = ig._8
1311- let eT = ig._9
1312- let eU = ig._10
1313- let ik = ig._11
1314- let il = ig._12
1315- let is = gn(hX)
1316- let gp = is._1
1317- let gq = is._2
1318- let it = if (hL)
1319- then {
1320- let it = invoke(at(), "addLocked", [false], [AttachedPayment(aq(), hk)])
1321- if ((it == it))
1322- then nil
1323- else throw("Strict value is not equal to itself.")
1324- }
1325- else nil
1326- if ((it == it))
1327- then {
1328- let iu = invoke(at(), "addFree", nil, [AttachedPayment(aq(), gq)])
1329- if ((iu == iu))
1318+ let iG = invoke(au(), "notifyFees", [ce, ik], nil)
1319+ if ((iG == iG))
13301320 then {
1331- let iv = invoke(au(), "notifyFees", [cr, hX], nil)
1332- if ((iv == iv))
1333- then {
1334- let iw = invoke(au(), "notifyNotional", [cr, iq], nil)
1335- if ((iw == iw))
1336- then (((((((gO(cr, ij, ip, iq, ir) ++ gK(ic, cr)) ++ gN(ic, cr, fW)) ++ gJ(cr, hK)) ++ hb(cU, cV, eS, eV, eT, eU, ik, il)) ++ hn(gp)) ++ hm((bE() + hk))) ++ ho(fX, ci))
1337- else throw("Strict value is not equal to itself.")
1338- }
1321+ let iH = invoke(au(), "notifyNotional", [ce, ff], nil)
1322+ if ((iH == iH))
1323+ then ((((((hi(ce, fd, ix, ff, iy, iz) ++ he(im, ce)) ++ hh(im, ce, gw)) ++ hv(cH, cI, eP, iA, iB, iC, it, iu)) ++ hH(gK)) ++ hG((bp() + hE))) ++ hI(gx, bV))
13391324 else throw("Strict value is not equal to itself.")
13401325 }
13411326 else throw("Strict value is not equal to itself.")
13421327 }
13431328 else throw("Strict value is not equal to itself.")
13441329 }
13451330 else throw("Strict value is not equal to itself.")
13461331 }
13471332 else throw("Strict value is not equal to itself.")
13481333 }
13491334 }
13501335 else throw("Strict value is not equal to itself.")
13511336 }
13521337
13531338
13541339
1355-@Callable(ci)
1340+@Callable(bV)
13561341 func addMargin () = {
1357- let hI = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1358- if ((hI == hI))
1342+ let ic = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1343+ if ((ic == ic))
13591344 then {
1360- let cr = toString(ci.caller)
1361- let hk = ci.payments[0].amount
1362- let aC = ci.payments[0].assetId
1363- let hK = toBase58String(value(aC))
1364- let hL = (aC == aq())
1365- let hM = aB(hK)
1366- if (if (if (if (if (if (if (if (!(hL))
1367- then !(hM)
1368- else false)
1345+ let ce = toString(bV.caller)
1346+ let hE = bV.payments[0].amount
1347+ let gz = bV.payments[0].assetId
1348+ let ie = toBase58String(value(gz))
1349+ let if = (gz == aq())
1350+ if (if (if (if (if (if (if (!(if))
13691351 then true
1370- else !(cB(toString(ci.caller))))
1352+ else !(co(toString(bV.caller))))
13711353 then true
1372- else !(ga(cr, hK)))
1354+ else !(gA(ce, ie)))
13731355 then true
1374- else !(cC()))
1356+ else !(cp()))
13751357 then true
1376- else cD())
1358+ else cq())
13771359 then true
1378- else cE())
1360+ else cr())
13791361 then true
1380- else dL())
1362+ else dC())
13811363 then throw("Invalid addMargin parameters")
13821364 else {
1383- let ix = cq(cr)
1384- let fZ = ix._1
1385- let hZ = ix._2
1386- let ia = ix._3
1387- let ib = ix._4
1388- let it = if (hL)
1365+ let iI = cd(ce)
1366+ let eF = iI._1
1367+ let eG = iI._2
1368+ let eH = iI._3
1369+ let eI = iI._4
1370+ let eJ = iI._5
1371+ let iE = invoke(at(), "addLocked", [false], [AttachedPayment(aq(), hE)])
1372+ if ((iE == iE))
13891373 then {
1390- let it = invoke(at(), "addLocked", [false], [AttachedPayment(aq(), hk)])
1391- if ((it == it))
1392- then nil
1374+ let cY = cU(eG, eJ)
1375+ let iJ = if ((cY > 0))
1376+ then {
1377+ let iK = gI(cY)
1378+ let gK = iK._1
1379+ let gL = iK._2
1380+ let iL = invoke(at(), "withdrawLocked", [gK], nil)
1381+ if ((iL == iL))
1382+ then {
1383+ let iM = invoke(at(), "exchangeFreeAndLocked", [-(gL)], nil)
1384+ if ((iM == iM))
1385+ then hH(gK)
1386+ else throw("Strict value is not equal to itself.")
1387+ }
1388+ else throw("Strict value is not equal to itself.")
1389+ }
1390+ else nil
1391+ if ((iJ == iJ))
1392+ then ((hi(ce, eF, ((eG - cY) + hE), eH, eI, bT()) ++ hG(((bp() + hE) - cY))) ++ iJ)
13931393 else throw("Strict value is not equal to itself.")
13941394 }
1395- else nil
1396- if ((it == it))
1397- then (gO(cr, fZ, (hZ + hk), ia, ib) ++ hm((bE() + hk)))
13981395 else throw("Strict value is not equal to itself.")
13991396 }
14001397 }
14011398 else throw("Strict value is not equal to itself.")
14021399 }
14031400
14041401
14051402
1406-@Callable(ci)
1407-func removeMargin (hk) = {
1408- let hI = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1409- if ((hI == hI))
1403+@Callable(bV)
1404+func removeMargin (hE) = {
1405+ let ic = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1406+ if ((ic == ic))
14101407 then {
1411- let cr = toString(ci.caller)
1412- if (if (if (if (if ((0 >= hk))
1408+ let ce = toString(bV.caller)
1409+ if (if (if (if (if ((0 >= hE))
14131410 then true
1414- else !(cB(cr)))
1411+ else !(co(ce)))
14151412 then true
1416- else !(cC()))
1413+ else !(cp()))
14171414 then true
1418- else cD())
1415+ else cq())
14191416 then true
1420- else dL())
1417+ else dC())
14211418 then throw("Invalid removeMargin parameters")
14221419 else {
1423- let iy = cq(cr)
1424- let fZ = iy._1
1425- let hZ = iy._2
1426- let ia = iy._3
1427- let ib = iy._4
1428- let iz = -(hk)
1429- let iA = dh(fZ, hZ, ib, iz)
1430- let dq = iA._1
1431- let dr = iA._2
1432- if ((dr != 0))
1420+ let iN = cd(ce)
1421+ let eF = iN._1
1422+ let eG = iN._2
1423+ let eH = iN._3
1424+ let eI = iN._4
1425+ let eJ = iN._5
1426+ let iO = cZ(eF, eG, eI, eJ, -(hE))
1427+ let dh = iO._1
1428+ let di = iO._2
1429+ let dd = iO._3
1430+ let cY = iO._4
1431+ if ((di != 0))
14331432 then throw("Invalid removed margin amount")
14341433 else {
1435- let iB = ev(dq, dr, ia)
1436- if (!(cj(iB, bG(), true)))
1437- then throw(((("Too much margin removed: " + toString(iB)) + " < ") + toString(bG())))
1434+ let fi = ei(dh, di, eH)
1435+ if (!(bW(fi, bs(), true)))
1436+ then throw(((("Too much margin removed: " + toString(fi)) + " < ") + toString(bs())))
14381437 else {
1439- let iC = toBase58String(aq())
1440- let iD = gd(cr)
1441- let iE = iD._1
1442- let iF = iD._2
1443- let iG = if ((hk > iE))
1444- then iE
1445- else hk
1446- let iH = if ((iE > hk))
1447- then 0
1448- else (hk - iE)
1449- let iI = (iE - iG)
1450- let iJ = if ((iI > 0))
1451- then nil
1452- else gJ(cr, iC)
1453- let iK = if (((iG + iH) != hk))
1454- then throw(((((("toRepay=" + toString(iG)) + " + toWithdraw=") + toString(iH)) + " != ") + toString(hk)))
1438+ let iP = gI(cY)
1439+ let gK = iP._1
1440+ let gL = iP._2
1441+ let iJ = if ((cY > 0))
1442+ then {
1443+ let iM = invoke(at(), "exchangeFreeAndLocked", [-(gL)], nil)
1444+ if ((iM == iM))
1445+ then hH(gK)
1446+ else throw("Strict value is not equal to itself.")
1447+ }
14551448 else nil
1456- if ((iK == iK))
1449+ if ((iJ == iJ))
14571450 then {
1458- let iL = if ((iH > 0))
1459- then {
1460- let iL = invoke(at(), "withdrawLocked", [iH], nil)
1461- if ((iL == iL))
1462- then nil
1463- else throw("Strict value is not equal to itself.")
1464- }
1465- else nil
1451+ let iL = invoke(at(), "withdrawLocked", [(hE + gK)], nil)
14661452 if ((iL == iL))
1467- then {
1468- let iM = if ((iG > 0))
1469- then {
1470- let iN = invoke(ay(), "repay", [cr, iG, iF], nil)
1471- if ((iN == iN))
1472- then [ScriptTransfer(ci.caller, iG, fromBase58String(iF))]
1473- else throw("Strict value is not equal to itself.")
1474- }
1475- else nil
1476- if ((iM == iM))
1477- then ((((gO(cr, fZ, dq, ia, co(fZ)) ++ (if ((iH > 0))
1478- then hj(ci.caller, iH)
1479- else nil)) ++ hm((bE() - hk))) ++ iJ) ++ iM)
1480- else throw("Strict value is not equal to itself.")
1481- }
1453+ then (((hi(ce, eF, dh, eH, cb(eF), bT()) ++ hD(bV.caller, hE)) ++ hG(((bp() - hE) - cY))) ++ iJ)
14821454 else throw("Strict value is not equal to itself.")
14831455 }
14841456 else throw("Strict value is not equal to itself.")
14851457 }
14861458 }
14871459 }
14881460 }
14891461 else throw("Strict value is not equal to itself.")
14901462 }
14911463
14921464
14931465
1494-@Callable(ci)
1495-func closePosition (gP,iO,iP) = {
1496- let hI = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1497- if ((hI == hI))
1466+@Callable(bV)
1467+func closePosition (eA,eC,eD) = {
1468+ let ic = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1469+ if ((ic == ic))
14981470 then {
1499- let cr = ch(ci)
1500- let iQ = valueOrErrorMessage(addressFromString(cr), "Invalid caller")
1501- let cA = cy(cr)
1502- if (if (if (if (if (if (!(cB(cr)))
1471+ let ce = bU(bV)
1472+ let iQ = valueOrErrorMessage(addressFromString(ce), "Invalid caller")
1473+ let cn = cl(ce)
1474+ if (if (if (if (if (if (!(co(ce)))
15031475 then true
1504- else !(cC()))
1476+ else !(cp()))
15051477 then true
1506- else cD())
1478+ else cq())
15071479 then true
1508- else (0 >= gP))
1480+ else (0 >= eA))
15091481 then true
1510- else (0 > iO))
1482+ else (0 > eC))
15111483 then true
1512- else dL())
1484+ else dC())
15131485 then throw("Invalid closePosition parameters")
15141486 else {
1515- let iR = cq(cr)
1516- let fZ = iR._1
1517- let hZ = iR._2
1518- let ia = iR._3
1519- let ib = iR._4
1520- let iS = if ((bc(fZ) > gP))
1521- then {
1522- let iT = dD((fZ > 0), gP, true)
1523- let eL = iT._1
1524- let cU = iT._2
1525- let cV = iT._3
1526- let eS = iT._4
1527- let eK = if ((fZ > 0))
1528- then -(gP)
1529- else gP
1530- let iU = eq(cr, aP)
1531- let io = iU._1
1532- let ep = iU._2
1533- let iV = ez(cr, aP)
1534- let iW = aT(bc(eK), bc(fZ))
1535- let eP = aV(ep, iW)
1536- let iX = aV(aV(io, iW), cA)
1537- let iY = dh(fZ, hZ, ib, ep)._1
1538- let iZ = dh(fZ, hZ, ib, eP)._2
1539- let ja = (ep - eP)
1540- let jb = if ((fZ > 0))
1541- then ((io - eL) - ja)
1542- else ((ja + io) - eL)
1543- let iq = bc(jb)
1544- let ij = (fZ + eK)
1545- let jc = co(ij)
1546- let jd = (ia - iq)
1547- let eV = (bM() - jd)
1548- let je = if ((fZ > 0))
1549- then (aV((iq + ja), iV) - ja)
1550- else (aV((iq - ja), iV) - ja)
1551- let jf = ((iY - (je + ja)) - iX)
1552- let jg = if ((0 > jf))
1553- then throw("Margin error: unable to pay close fee")
1554- else jf
1555- if (if ((iO != 0))
1556- then (iO > eL)
1557- else false)
1558- then throw(((("Limit error: " + toString(eL)) + " < ") + toString(iO)))
1559- else $Tuple16(ij, if (iP)
1560- then (je + jg)
1561- else je, iq, jc, iZ, eP, if (iP)
1562- then 0
1563- else jg, cU, cV, eS, eV, (cd() - (if ((ij > 0))
1564- then bc(eK)
1565- else 0)), (cc() - (if ((0 > ij))
1566- then bc(eK)
1567- else 0)), (bO() - (if ((ij > 0))
1568- then jd
1569- else 0)), (bN() - (if ((0 > ij))
1570- then jd
1571- else 0)), iX)
1572- }
1573- else if ((gP > bc(fZ)))
1574- then throw("Invalid closePosition parameters")
1575- else {
1576- let jh = eM(cr, true)
1577- let el = jh._1
1578- let iZ = jh._2
1579- let eP = jh._3
1580- let ji = jh._4
1581- let cU = jh._5
1582- let cV = jh._6
1583- let eS = jh._7
1584- let eV = jh._8
1585- let eL = jh._9
1586- let eT = jh._10
1587- let eU = jh._11
1588- let ik = jh._12
1589- let il = jh._13
1590- let iX = aV(eL, cA)
1591- let jf = (bc(ji) - iX)
1592- let jg = if ((0 > jf))
1593- then throw(((((((("Margin error: unable to pay close fee: " + toString(iX)) + " margin: ") + toString(ji)) + " fee percent: ") + toString(cA)) + " notional: ") + toString(eL)))
1594- else jf
1595- if (if ((iO != 0))
1596- then (iO > eL)
1597- else false)
1598- then throw(((("Limit error: " + toString(eL)) + " < ") + toString(iO)))
1599- else $Tuple16(0, 0, 0, 0, iZ, eP, jg, cU, cV, eS, eV, eT, eU, ik, il, iX)
1600- }
1601- let ij = iS._1
1602- let je = iS._2
1603- let iq = iS._3
1604- let jc = iS._4
1605- let iZ = iS._5
1606- let eP = iS._6
1607- let jg = iS._7
1608- let cU = iS._8
1609- let cV = iS._9
1610- let eS = iS._10
1611- let eV = iS._11
1612- let eT = iS._12
1613- let eU = iS._13
1614- let ik = iS._14
1615- let il = iS._15
1616- let iX = iS._16
1617- if ((iZ > 0))
1618- then throw("Unable to close position with bad debt")
1487+ let iR = cd(ce)
1488+ let eF = iR._1
1489+ let eG = iR._2
1490+ let eH = iR._3
1491+ let eI = iR._4
1492+ let iS = ez(ce, eA, cn, eC, eD, true)
1493+ let fd = iS._1
1494+ let fm = iS._2
1495+ let ff = iS._3
1496+ let fg = iS._4
1497+ let eZ = iS._5
1498+ let eU = iS._6
1499+ let fl = iS._7
1500+ let cH = iS._8
1501+ let cI = iS._9
1502+ let eP = iS._10
1503+ let iA = iS._11
1504+ let iB = iS._12
1505+ let iC = iS._13
1506+ let it = iS._14
1507+ let iu = iS._15
1508+ let iT = iS._16
1509+ if ((eZ > 0))
1510+ then throw("Invalid closePosition parameters: bad debt")
16191511 else {
1620- let jj = (ij != 0)
1621- let jk = (jg + iX)
1622- let jl = (bE() - jk)
1623- let jm = if ((0 > jl))
1624- then $Tuple2(0, bc(jl))
1625- else $Tuple2(jl, 0)
1626- let jn = jm._1
1627- let jo = jm._2
1628- let jp = gd(cr)
1629- let iE = jp._1
1630- let iF = jp._2
1631- let jq = if ((iE > 0))
1632- then if ((jk >= iE))
1633- then {
1634- let iN = invoke(ay(), "repay", [cr, iE, iF], nil)
1635- if ((iN == iN))
1636- then $Tuple3(iE, (jk - iE), jj)
1637- else throw("Strict value is not equal to itself.")
1638- }
1639- else {
1640- let jr = invoke(ay(), if (jj)
1641- then "repay"
1642- else "realizePartiallyAndClose", [cr, jk, iF], nil)
1643- if ((jr == jr))
1644- then $Tuple3(jk, 0, false)
1645- else throw("Strict value is not equal to itself.")
1646- }
1647- else $Tuple3(0, jk, false)
1648- if ((jq == jq))
1512+ let eM = (fd != 0)
1513+ let iU = (fl + iT)
1514+ let iV = (bp() - iU)
1515+ let iW = if ((0 > iV))
1516+ then 0
1517+ else iV
1518+ let iL = invoke(at(), "withdrawLocked", [iU], nil)
1519+ if ((iL == iL))
16491520 then {
1650- let js = jq._3
1651- let jt = jq._2
1652- let ju = jq._1
1653- let jv = if ((jt >= iX))
1654- then $Tuple3(ju, (jt - iX), iX)
1655- else {
1656- let jw = (iX - jt)
1657- let jx = (ju - jw)
1658- let hR = assetBalance(this, aq())
1659- if ((hR == hR))
1521+ let iX = gI(iT)
1522+ let gK = iX._1
1523+ let gL = iX._2
1524+ let iF = invoke(at(), "addFree", nil, [AttachedPayment(aq(), gL)])
1525+ if ((iF == iF))
1526+ then {
1527+ let iG = invoke(au(), "notifyFees", [ce, iT], nil)
1528+ if ((iG == iG))
16601529 then {
1661- let hS = invoke(az(), "swap", [toBase58String(aq()), 0], [AttachedPayment(fromBase58String(iF), jw)])
1662- if ((hS == hS))
1663- then {
1664- let hT = assetBalance(this, aq())
1665- if ((hT == hT))
1666- then {
1667- let hU = (hT - hR)
1668- if ((hU == hU))
1669- then $Tuple3(jx, 0, (jt + hU))
1670- else throw("Strict value is not equal to itself.")
1671- }
1672- else throw("Strict value is not equal to itself.")
1673- }
1674- else throw("Strict value is not equal to itself.")
1675- }
1676- else throw("Strict value is not equal to itself.")
1677- }
1678- if ((jv == jv))
1679- then {
1680- let jy = jv._3
1681- let jz = jv._2
1682- let jx = jv._1
1683- let jA = if ((jt > 0))
1684- then {
1685- let jA = invoke(at(), "withdrawLocked", [jt], nil)
1686- if ((jA == jA))
1687- then nil
1688- else throw("Strict value is not equal to itself.")
1689- }
1690- else nil
1691- if ((jA == jA))
1692- then {
1693- let jB = gn(jy)
1694- let gp = jB._1
1695- let gq = jB._2
1696- let iu = invoke(at(), "addFree", nil, [AttachedPayment(aq(), gq)])
1697- if ((iu == iu))
1698- then {
1699- let iv = invoke(au(), "notifyFees", [cr, iX], nil)
1700- if ((iv == iv))
1701- then {
1702- let iw = invoke(au(), "notifyNotional", [cr, iq], nil)
1703- if ((iw == iw))
1704- then (((((((if (jj)
1705- then gO(cr, ij, je, iq, jc)
1706- else hi(cr)) ++ (if (js)
1707- then {
1708- let iC = toBase58String(aq())
1709- gJ(cr, iC)
1710- }
1711- else nil)) ++ hb(cU, cV, eS, eV, eT, eU, ik, il)) ++ hn(gp)) ++ (if ((jz > 0))
1712- then hj(iQ, jz)
1713- else nil)) ++ hm(jn)) ++ (if ((jx > 0))
1714- then [ScriptTransfer(iQ, jx, fromBase58String(iF))]
1715- else nil))
1716- else throw("Strict value is not equal to itself.")
1717- }
1718- else throw("Strict value is not equal to itself.")
1719- }
1530+ let iH = invoke(au(), "notifyNotional", [ce, ff], nil)
1531+ if ((iH == iH))
1532+ then (((((if (eM)
1533+ then hi(ce, fd, fm, ff, fg, bT())
1534+ else hC(ce)) ++ hv(cH, cI, eP, iA, iB, iC, it, iu)) ++ (if ((fl > 0))
1535+ then hD(iQ, fl)
1536+ else nil)) ++ hG(iW)) ++ hH(gK))
17201537 else throw("Strict value is not equal to itself.")
17211538 }
17221539 else throw("Strict value is not equal to itself.")
17231540 }
17241541 else throw("Strict value is not equal to itself.")
17251542 }
17261543 else throw("Strict value is not equal to itself.")
17271544 }
17281545 }
17291546 }
17301547 else throw("Strict value is not equal to itself.")
17311548 }
17321549
17331550
17341551
1735-@Callable(ci)
1736-func liquidate (cr) = {
1737- let hI = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1738- if ((hI == hI))
1552+@Callable(bV)
1553+func liquidate (ce) = {
1554+ let ic = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1555+ if ((ic == ic))
17391556 then {
1740- let jC = ez(cr, aP)
1741- let iB = if (eb())
1557+ let iY = em(ce, aM)
1558+ let iZ = if (dS())
17421559 then {
1743- let jD = ez(cr, aQ)
1744- bd(jC, jD)
1560+ let ja = em(ce, aN)
1561+ ba(iY, ja)
17451562 }
1746- else jC
1747- if (if (if (if (if (!(cj(iB, bT(), false)))
1563+ else iY
1564+ if (if (if (if (if (!(bW(iZ, bF(), false)))
17481565 then true
1749- else !(cB(cr)))
1566+ else !(co(ce)))
17501567 then true
1751- else !(cC()))
1568+ else !(cp()))
17521569 then true
1753- else cD())
1570+ else cq())
17541571 then true
1755- else dL())
1572+ else dC())
17561573 then throw("Unable to liquidate")
1757- else if (if (if ((jC > bU()))
1758- then (bV() > 0)
1759- else false)
1760- then (aM > bV())
1761- else false)
1762- then {
1763- let jE = cq(cr)
1764- let fZ = jE._1
1765- let hZ = jE._2
1766- let ia = jE._3
1767- let ib = jE._4
1768- let hE = if ((fZ > 0))
1769- then aH
1770- else aG
1771- let if = (hE == aG)
1772- let eL = eF(cr, fZ)
1773- let jF = eq(cr, aP)
1774- let io = jF._1
1775- let ep = jF._2
1776- let jG = cQ(if, eL)
1777- let eK = jG._1
1778- let cU = jG._2
1779- let cV = jG._3
1780- let eS = jG._4
1781- let jH = aT(bc(eK), bc(fZ))
1782- let eP = aV(ep, jH)
1783- let jI = dh(fZ, hZ, ib, eP)
1784- let dq = jI._1
1785- let dr = jI._2
1786- let dm = jI._3
1787- let ja = (ep - eP)
1788- let jb = if ((fZ > 0))
1789- then ((io - eL) - ja)
1790- else ((ja + io) - eL)
1791- let jJ = aV(eL, bU())
1792- let jK = (jJ / 2)
1793- let gq = (jJ - jK)
1794- let je = (dq - jJ)
1795- let ij = (fZ + eK)
1796- let iq = bc(jb)
1797- let jd = (ia - iq)
1798- let jc = co(ij)
1799- let eV = (bM() - jd)
1800- let jl = (bE() - jJ)
1801- let jL = if ((0 > jl))
1802- then $Tuple2(0, bc(jl))
1803- else $Tuple2(jl, 0)
1804- let jM = jL._1
1805- let jo = jL._2
1806- let jN = gd(cr)
1807- let iE = jN._1
1808- let iF = jN._2
1809- let jO = if ((iE > 0))
1810- then {
1811- let jP = aV(iE, jH)
1812- let jr = invoke(ay(), "realizePartially", [cr, iF, jP], nil)
1813- if ((jr == jr))
1814- then nil
1815- else throw("Strict value is not equal to itself.")
1816- }
1817- else nil
1818- if ((jO == jO))
1819- then {
1820- let jA = invoke(at(), "withdrawLocked", [jJ], nil)
1821- if ((jA == jA))
1822- then {
1823- let jQ = invoke(at(), "addFree", nil, [AttachedPayment(aq(), gq)])
1824- if ((jQ == jQ))
1825- then {
1826- let iw = invoke(au(), "notifyNotional", [cr, iq], nil)
1827- if ((iw == iw))
1828- then (((gO(cr, ij, je, iq, jc) ++ hb(cU, cV, eS, eV, (cd() - (if ((ij > 0))
1829- then bc(eK)
1830- else 0)), (cc() - (if ((0 > ij))
1831- then bc(eK)
1832- else 0)), (bO() - (if ((ij > 0))
1833- then jd
1834- else 0)), (bN() - (if ((0 > ij))
1835- then jd
1836- else 0)))) ++ hj(ci.caller, jK)) ++ hm(jM))
1837- else throw("Strict value is not equal to itself.")
1838- }
1839- else throw("Strict value is not equal to itself.")
1840- }
1841- else throw("Strict value is not equal to itself.")
1842- }
1843- else throw("Strict value is not equal to itself.")
1844- }
1845- else {
1846- let jR = eM(cr, false)
1847- let ek = jR._1
1848- let dr = jR._2
1849- let el = jR._3
1850- let em = jR._4
1851- let cU = jR._5
1852- let cV = jR._6
1853- let eS = jR._7
1854- let eV = jR._8
1855- let eL = jR._9
1856- let eT = jR._10
1857- let eU = jR._11
1858- let ik = jR._12
1859- let il = jR._13
1860- let jJ = aV(eL, bU())
1861- let jK = (jJ / 2)
1862- let gq = (jJ - jK)
1863- let jl = (bE() - jJ)
1864- let jS = if ((0 > jl))
1865- then $Tuple2(0, bc(jl))
1866- else $Tuple2(jl, 0)
1867- let jM = jS._1
1868- let jo = jS._2
1869- let jT = gd(cr)
1870- let iE = jT._1
1871- let iF = jT._2
1872- let jO = if ((iE > 0))
1873- then {
1874- let jr = invoke(ay(), "realizePartiallyAndClose", [cr, 0, iF], nil)
1875- if ((jr == jr))
1876- then nil
1877- else throw("Strict value is not equal to itself.")
1878- }
1879- else nil
1880- if ((jO == jO))
1881- then {
1882- let gj = if ((dr > 0))
1883- then {
1884- let jU = invoke(at(), "exchangeFreeAndLocked", [dr], nil)
1885- if ((jU == jU))
1886- then nil
1887- else throw("Strict value is not equal to itself.")
1888- }
1889- else nil
1890- if ((gj == gj))
1891- then {
1892- let jA = invoke(at(), "withdrawLocked", [jJ], nil)
1893- if ((jA == jA))
1894- then {
1895- let jQ = invoke(at(), "addFree", nil, [AttachedPayment(aq(), gq)])
1896- if ((jQ == jQ))
1897- then {
1898- let iw = invoke(au(), "notifyNotional", [cr, 0], nil)
1899- if ((iw == iw))
1900- then (((hi(cr) ++ hb(cU, cV, eS, eV, eT, eU, ik, il)) ++ hj(ci.caller, jK)) ++ hm(jM))
1901- else throw("Strict value is not equal to itself.")
1902- }
1903- else throw("Strict value is not equal to itself.")
1904- }
1905- else throw("Strict value is not equal to itself.")
1906- }
1907- else throw("Strict value is not equal to itself.")
1908- }
1909- else throw("Strict value is not equal to itself.")
1910- }
1911- }
1912- else throw("Strict value is not equal to itself.")
1913- }
1914-
1915-
1916-
1917-@Callable(ci)
1918-func payFunding () = {
1919- let hI = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1920- if ((hI == hI))
1921- then {
1922- let jV = bP()
1923- if (if (if ((jV > lastBlock.timestamp))
1924- then true
1925- else !(cC()))
1926- then true
1927- else cD())
1928- then throw(((("Invalid funding block timestamp: " + toString(lastBlock.timestamp)) + " < ") + toString(jV)))
19291574 else {
1930- let fJ = dE()
1931- let jW = fI()
1932- let fM = jW._1
1933- let fN = jW._2
1934- gD((jV + bS()), (ca() + fN), (cb() + fM), aT(fN, fJ), aT(fM, fJ))
1575+ let jb = if (if ((iY > bG()))
1576+ then true
1577+ else (bH() > 0))
1578+ then true
1579+ else (aI > bH())
1580+ let eF = cd(ce)._1
1581+ let dW = aZ(eF)
1582+ let jc = if (jb)
1583+ then {
1584+ let jd = eu(ce, eF)
1585+ let je = aQ(aZ(jd), dW)
1586+ $Tuple2(je, aZ(jd))
1587+ }
1588+ else $Tuple2(0, dW)
1589+ let je = jc._1
1590+ let jd = jc._2
1591+ let jf = ez(ce, if (jb)
1592+ then jd
1593+ else dW, bG(), 0, true, false)
1594+ let fd = jf._1
1595+ let fm = jf._2
1596+ let ff = jf._3
1597+ let fg = jf._4
1598+ let eZ = jf._5
1599+ let eU = jf._6
1600+ let fl = jf._7
1601+ let cH = jf._8
1602+ let cI = jf._9
1603+ let eP = jf._10
1604+ let iA = jf._11
1605+ let iB = jf._12
1606+ let iC = jf._13
1607+ let it = jf._14
1608+ let iu = jf._15
1609+ let jg = jf._16
1610+ let jh = (jg / 2)
1611+ let gL = (jg - jh)
1612+ let iV = (bp() - jg)
1613+ let ji = if ((0 > iV))
1614+ then 0
1615+ else iV
1616+ let iM = if ((eZ > 0))
1617+ then {
1618+ let iM = invoke(at(), "exchangeFreeAndLocked", [eZ], nil)
1619+ if ((iM == iM))
1620+ then nil
1621+ else throw("Strict value is not equal to itself.")
1622+ }
1623+ else nil
1624+ if ((iM == iM))
1625+ then {
1626+ let iL = invoke(at(), "withdrawLocked", [jg], nil)
1627+ if ((iL == iL))
1628+ then {
1629+ let jj = invoke(at(), "addFree", nil, [AttachedPayment(aq(), gL)])
1630+ if ((jj == jj))
1631+ then {
1632+ let iH = invoke(au(), "notifyNotional", [ce, ff], nil)
1633+ if ((iH == iH))
1634+ then ((((if (jb)
1635+ then hi(ce, fd, fm, ff, fg, bT())
1636+ else hC(ce)) ++ hv(cH, cI, eP, iA, iB, iC, it, iu)) ++ hD(bV.caller, jh)) ++ hG(ji))
1637+ else throw("Strict value is not equal to itself.")
1638+ }
1639+ else throw("Strict value is not equal to itself.")
1640+ }
1641+ else throw("Strict value is not equal to itself.")
1642+ }
1643+ else throw("Strict value is not equal to itself.")
19351644 }
19361645 }
19371646 else throw("Strict value is not equal to itself.")
19381647 }
19391648
19401649
19411650
1942-@Callable(ci)
1943-func syncTerminalPriceToOracle () = {
1944- let cM = bH()
1945- let cN = bI()
1946- let jX = fE(dE(), cM, cN)
1947- let hv = jX._1
1948- let hw = jX._2
1949- let eQ = jX._3
1950- let hx = if ((eQ != 0))
1651+@Callable(bV)
1652+func payFunding () = {
1653+ let ic = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1654+ if ((ic == ic))
19511655 then {
1952- let hx = invoke(at(), "exchangeFreeAndLocked", [eQ], nil)
1953- if ((hx == hx))
1954- then nil
1955- else throw("Strict value is not equal to itself.")
1956- }
1957- else nil
1958- if ((hx == hx))
1959- then (ha(hv, hw) ++ gS(aT(aV(cM, hv), aV(cN, hw))))
1960- else throw("Strict value is not equal to itself.")
1961- }
1962-
1963-
1964-
1965-@Callable(ci)
1966-func view_calcRemainMarginWithFundingPayment (cr) = {
1967- let hI = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1968- if ((hI == hI))
1969- then {
1970- let jY = cq(cr)
1971- let cu = jY._1
1972- let es = jY._2
1973- let eB = jY._3
1974- let eu = jY._4
1975- let jZ = eq(cr, aP)
1976- let eh = jZ._1
1977- let ep = jZ._2
1978- let ka = dh(cu, es, eu, ep)
1979- let dq = ka._1
1980- let dr = ka._2
1981- let dm = ka._3
1982- throw((((((aR(dq) + aR(dm)) + aR(eE(cr))) + aR(ep)) + aR(dr)) + aR(eh)))
1656+ let jk = bB()
1657+ if (if (if ((jk > bT()))
1658+ then true
1659+ else !(cp()))
1660+ then true
1661+ else cq())
1662+ then throw(((("Invalid funding block timestamp: " + toString(bT())) + " < ") + toString(jk)))
1663+ else {
1664+ let gj = dv()
1665+ let jl = gi()
1666+ let gm = jl._1
1667+ let gn = jl._2
1668+ gY((jk + bE()), (bM() + gn), (bN() + gm), aQ(gn, gj), aQ(gm, gj))
1669+ }
19831670 }
19841671 else throw("Strict value is not equal to itself.")
19851672 }
19861673
19871674
19881675
1989-@Callable(ci)
1990-func view_getPegAdjustCost (gT) = {
1991- let cM = bH()
1992- let cN = bI()
1993- let fD = fE(gT, cM, cN)
1994- throw(toString(fD._3))
1676+@Callable(bV)
1677+func syncTerminalPriceToOracle () = {
1678+ let cz = bt()
1679+ let cA = bu()
1680+ let jm = gd(dv(), cz, cA)
1681+ let hP = jm._1
1682+ let hQ = jm._2
1683+ let gh = jm._3
1684+ let hR = if ((gh != 0))
1685+ then {
1686+ let hR = invoke(at(), "exchangeFreeAndLocked", [gh], nil)
1687+ if ((hR == hR))
1688+ then nil
1689+ else throw("Strict value is not equal to itself.")
1690+ }
1691+ else nil
1692+ if ((hR == hR))
1693+ then (hu(hP, hQ) ++ hm(aQ(aS(cz, hP), aS(cA, hQ))))
1694+ else throw("Strict value is not equal to itself.")
19951695 }
19961696
19971697
19981698
1999-@Callable(ci)
2000-func view_getTerminalAmmPrice () = {
2001- let kb = fm()
2002- let fq = kb._1
2003- let fr = kb._2
2004- let hq = aT(aV(fq, bJ()), aV(fr, bK()))
2005- throw(toString(hq))
1699+@Callable(bV)
1700+func view_calcRemainMarginWithFundingPayment (ce) = {
1701+ let ic = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1702+ if ((ic == ic))
1703+ then {
1704+ let jn = cd(ce)
1705+ let ch = jn._1
1706+ let ef = jn._2
1707+ let eo = jn._3
1708+ let eh = jn._4
1709+ let eq = jn._5
1710+ let jo = ed(ce, aM)
1711+ let dY = jo._1
1712+ let ec = jo._2
1713+ let jp = cZ(ch, ef, eh, eq, ec)
1714+ let dh = jp._1
1715+ let di = jp._2
1716+ let dd = jp._3
1717+ let cY = jp._4
1718+ throw(((((((aO(dh) + aO(dd)) + aO(et(ce))) + aO(ec)) + aO(di)) + aO(dY)) + aO(cY)))
1719+ }
1720+ else throw("Strict value is not equal to itself.")
20061721 }
20071722
20081723
20091724
2010-@Callable(ci)
2011-func view_getFunding () = {
2012- let fJ = dE()
2013- let kc = fI()
2014- let fM = kc._1
2015- let fN = kc._2
2016- let kd = aT(fN, fJ)
2017- let ke = aT(fM, fJ)
2018- throw((((aR(kd) + aR(ke)) + aR(eW())) + aR(dE())))
1725+@Callable(bV)
1726+func view_getPegAdjustCost (hn) = {
1727+ let cz = bt()
1728+ let cA = bu()
1729+ let gc = gd(hn, cz, cA)
1730+ throw(toString(gc._3))
20191731 }
20201732
20211733
20221734
2023-@Callable(ci)
2024-func view_getBorrowedByTrader (cr) = {
2025- let kf = gd(cr)
2026- let iE = kf._1
2027- let iF = kf._2
2028- throw((aR(iE) + iF))
1735+@Callable(bV)
1736+func view_getTerminalAmmPrice () = {
1737+ let jq = fL()
1738+ let fP = jq._1
1739+ let fQ = jq._2
1740+ let hK = aQ(aS(fP, bv()), aS(fQ, bw()))
1741+ throw(toString(hK))
20291742 }
20301743
20311744
20321745
2033-@Callable(ci)
2034-func computeSpotPrice () = {
2035- let fD = ea()
2036- $Tuple2(nil, fD)
1746+@Callable(bV)
1747+func view_getFunding () = {
1748+ let gj = dv()
1749+ let jr = gi()
1750+ let gm = jr._1
1751+ let gn = jr._2
1752+ let js = aQ(gn, gj)
1753+ let jt = aQ(gm, gj)
1754+ throw((((aO(js) + aO(jt)) + aO(fn())) + aO(dv())))
20371755 }
20381756
20391757
20401758
2041-@Callable(ci)
2042-func computeFeeForTraderWithArtifact (cr,fP) = {
2043- let fD = gg(cr, fP)
2044- $Tuple2(nil, fD)
1759+@Callable(bV)
1760+func computeSpotPrice () = {
1761+ let gc = dR()
1762+ $Tuple2(nil, gc)
20451763 }
20461764
20471765
2048-@Verifier(kg)
2049-func kh () = sigVerify(kg.bodyBytes, kg.proofs[0], ap())
1766+
1767+@Callable(bV)
1768+func computeFeeForTraderWithArtifact (ce,gp) = {
1769+ let gc = gB(ce, gp)
1770+ $Tuple2(nil, gc)
1771+ }
1772+
1773+
1774+@Verifier(ju)
1775+func jv () = sigVerify(ju.bodyBytes, ju.proofs[0], ap())
20501776

github/deemru/w8io/c3f4982 
511.34 ms