tx · HmQ6iRFWf9urBmbKXyRjEMw9bXcfxuKUdvVif1Y8gwq

3NC3GcwFK9knYYKT2SRc7nWxc5SXc2aKBQ6:  -0.07500000 Waves

2023.02.04 14:53 [2434847] smart account 3NC3GcwFK9knYYKT2SRc7nWxc5SXc2aKBQ6 > SELF 0.00000000 Waves

{ "type": 13, "id": "HmQ6iRFWf9urBmbKXyRjEMw9bXcfxuKUdvVif1Y8gwq", "fee": 7500000, "feeAssetId": null, "timestamp": 1675511634103, "version": 2, "chainId": 84, "sender": "3NC3GcwFK9knYYKT2SRc7nWxc5SXc2aKBQ6", "senderPublicKey": "5GAkpjTakesSgVm3A22kYMBvNpM8C1KpqWfyC7YyB84y", "proofs": [ "5rv1NzUYnjPxYSqFodf62C5guEqS1cZUxENrMufQAcBQ4t1EiJnZwgN2bd8aNvNWSaCXu3AbUn7CU9h2kFdczT6n" ], "script": "base64:BgJyCAISABIAEgASABIDCgEBEgMKAQESDwoNAQEBAQEBAQEBAQEBARIUChIBAQEBAQEBCAgIAQEBAQEBAQESBgoEAQEBCBIAEgMKAQESBQoDAQEEEgMKAQgSABIAEgASAwoBCBIDCgEBEgASABIAEgQKAggIvAEADGtfYmFzZU9yYWNsZQIMa19iYXNlT3JhY2xlAA1rX3F1b3RlT3JhY2xlAg1rX3F1b3RlT3JhY2xlAAlrX2JhbGFuY2UCCWtfYmFsYW5jZQAKa19zZXF1ZW5jZQIKa19zZXF1ZW5jZQAOa19wb3NpdGlvblNpemUCDmtfcG9zaXRpb25TaXplABBrX3Bvc2l0aW9uTWFyZ2luAhBrX3Bvc2l0aW9uTWFyZ2luABZrX3Bvc2l0aW9uT3Blbk5vdGlvbmFsAhZrX3Bvc2l0aW9uT3Blbk5vdGlvbmFsAC5rX3Bvc2l0aW9uTGFzdFVwZGF0ZWRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAhJrX3Bvc2l0aW9uRnJhY3Rpb24AEmtfcG9zaXRpb25TZXF1ZW5jZQISa19wb3NpdGlvblNlcXVlbmNlAA9rX3Bvc2l0aW9uQXNzZXQCD2tfcG9zaXRpb25Bc3NldAANa19wb3NpdGlvbkZlZQINa19wb3NpdGlvbkZlZQAea19wb3NpdGlvbkxhc3RVcGRhdGVkVGltZXN0YW1wAhNrX3Bvc2l0aW9uVGltZXN0YW1wAA1rX2luaXRpYWxpemVkAg1rX2luaXRpYWxpemVkAAhrX3BhdXNlZAIIa19wYXVzZWQAC2tfY2xvc2VPbmx5AgtrX2Nsb3NlT25seQAFa19mZWUCBWtfZmVlAA1rX3JvbGxvdmVyRmVlAg5rX3JvbGxvdmVyX2ZlZQAPa19mdW5kaW5nUGVyaW9kAg9rX2Z1bmRpbmdQZXJpb2QAEWtfaW5pdE1hcmdpblJhdGlvAhFrX2luaXRNYXJnaW5SYXRpbwAYa19tYWludGVuYW5jZU1hcmdpblJhdGlvAgVrX21tcgAVa19saXF1aWRhdGlvbkZlZVJhdGlvAhVrX2xpcXVpZGF0aW9uRmVlUmF0aW8AGWtfcGFydGlhbExpcXVpZGF0aW9uUmF0aW8CFmtfcGFydExpcXVpZGF0aW9uUmF0aW8ADWtfc3ByZWFkTGltaXQCDWtfc3ByZWFkTGltaXQAEGtfbWF4UHJpY2VJbXBhY3QCEGtfbWF4UHJpY2VJbXBhY3QAEGtfbWF4UHJpY2VTcHJlYWQCEGtfbWF4UHJpY2VTcHJlYWQAEWtfbWF4T3Blbk5vdGlvbmFsAhFrX21heE9wZW5Ob3Rpb25hbAAVa19mZWVUb1N0YWtlcnNQZXJjZW50AhVrX2ZlZVRvU3Rha2Vyc1BlcmNlbnQAEGtfbWF4T3JhY2xlRGVsYXkCEGtfbWF4T3JhY2xlRGVsYXkADWtfbGFzdERhdGFTdHICDWtfbGFzdERhdGFTdHIADmtfbGFzdE1pbnV0ZUlkAg5rX2xhc3RNaW51dGVJZAAda190d2FwRGF0YUxhc3RDdW11bGF0aXZlUHJpY2UCHWtfdHdhcERhdGFMYXN0Q3VtdWxhdGl2ZVByaWNlABNrX3R3YXBEYXRhTGFzdFByaWNlAhNrX3R3YXBEYXRhTGFzdFByaWNlABprX3R3YXBEYXRhUHJldmlvdXNNaW51dGVJZAIaa190d2FwRGF0YVByZXZpb3VzTWludXRlSWQAJWtfbGF0ZXN0TG9uZ0N1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24CG2tfbGF0ZXN0TG9uZ1ByZW1pdW1GcmFjdGlvbgAma19sYXRlc3RTaG9ydEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24CHGtfbGF0ZXN0U2hvcnRQcmVtaXVtRnJhY3Rpb24AEmtfbmV4dEZ1bmRpbmdCbG9jawIea19uZXh0RnVuZGluZ0Jsb2NrTWluVGltZXN0YW1wABFrX2xvbmdGdW5kaW5nUmF0ZQIRa19sb25nRnVuZGluZ1JhdGUAEmtfc2hvcnRGdW5kaW5nUmF0ZQISa19zaG9ydEZ1bmRpbmdSYXRlABNrX3F1b3RlQXNzZXRSZXNlcnZlAghrX3F0QXN0UgASa19iYXNlQXNzZXRSZXNlcnZlAghrX2JzQXN0UgASa19xdW90ZUFzc2V0V2VpZ2h0AghrX3F0QXN0VwARa19iYXNlQXNzZXRXZWlnaHQCCGtfYnNBc3RXABNrX3RvdGFsUG9zaXRpb25TaXplAhNrX3RvdGFsUG9zaXRpb25TaXplABdrX3RvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQIXa190b3RhbExvbmdQb3NpdGlvblNpemUAGGtfdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQIYa190b3RhbFNob3J0UG9zaXRpb25TaXplABZrX29wZW5JbnRlcmVzdE5vdGlvbmFsAhZrX29wZW5JbnRlcmVzdE5vdGlvbmFsABNrX29wZW5JbnRlcmVzdFNob3J0AhNrX29wZW5JbnRlcmVzdFNob3J0ABJrX29wZW5JbnRlcmVzdExvbmcCEmtfb3BlbkludGVyZXN0TG9uZwAIa19sYXN0VHgCCGtfbGFzdFR4ABRrX2Nvb3JkaW5hdG9yQWRkcmVzcwIUa19jb29yZGluYXRvckFkZHJlc3MAD2tfdmF1bHRfYWRkcmVzcwIPa192YXVsdF9hZGRyZXNzAA9rX2FkbWluX2FkZHJlc3MCD2tfYWRtaW5fYWRkcmVzcwANa19xdW90ZV9hc3NldAINa19xdW90ZV9hc3NldAAPa19xdW90ZV9zdGFraW5nAg9rX3F1b3RlX3N0YWtpbmcAEWtfc3Rha2luZ19hZGRyZXNzAhFrX3N0YWtpbmdfYWRkcmVzcwAPa19taW5lcl9hZGRyZXNzAg9rX21pbmVyX2FkZHJlc3MAEGtfb3JkZXJzX2FkZHJlc3MCEGtfb3JkZXJzX2FkZHJlc3MAEmtfcmVmZXJyYWxfYWRkcmVzcwISa19yZWZlcnJhbF9hZGRyZXNzABJrX2V4Y2hhbmdlX2FkZHJlc3MCEmtfZXhjaGFuZ2VfYWRkcmVzcwAVa19uZnRfbWFuYWdlcl9hZGRyZXNzAhVrX25mdF9tYW5hZ2VyX2FkZHJlc3MBDnRvQ29tcG9zaXRlS2V5AgRfa2V5CF9hZGRyZXNzCQCsAgIJAKwCAgUEX2tleQIBXwUIX2FkZHJlc3MBC2Nvb3JkaW5hdG9yAAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMFFGtfY29vcmRpbmF0b3JBZGRyZXNzAhNDb29yZGluYXRvciBub3Qgc2V0AQxhZG1pbkFkZHJlc3MACQCmCAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQtjb29yZGluYXRvcgAFD2tfYWRtaW5fYWRkcmVzcwEKcXVvdGVBc3NldAAJANkEAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBC2Nvb3JkaW5hdG9yAAUNa19xdW90ZV9hc3NldAERcXVvdGVBc3NldFN0YWtpbmcACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBC2Nvb3JkaW5hdG9yAAUPa19xdW90ZV9zdGFraW5nAhtRdW90ZSBhc3NldCBzdGFraW5nIG5vdCBzZXQBDnN0YWtpbmdBZGRyZXNzAAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQtjb29yZGluYXRvcgAFEWtfc3Rha2luZ19hZGRyZXNzAg9TdGFraW5nIG5vdCBzZXQBDHZhdWx0QWRkcmVzcwAJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQERQGV4dHJOYXRpdmUoMTA1MykCCQELY29vcmRpbmF0b3IABQ9rX3ZhdWx0X2FkZHJlc3MCDVZhdWx0IG5vdCBzZXQBDG1pbmVyQWRkcmVzcwAJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQERQGV4dHJOYXRpdmUoMTA1MykCCQELY29vcmRpbmF0b3IABQ9rX21pbmVyX2FkZHJlc3MCDU1pbmVyIG5vdCBzZXQBDW9yZGVyc0FkZHJlc3MACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBC2Nvb3JkaW5hdG9yAAUQa19vcmRlcnNfYWRkcmVzcwIOT3JkZXJzIG5vdCBzZXQBD3JlZmVycmFsQWRkcmVzcwAJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQERQGV4dHJOYXRpdmUoMTA1MykCCQELY29vcmRpbmF0b3IABRJrX3JlZmVycmFsX2FkZHJlc3MCEFJlZmVycmFsIG5vdCBzZXQBEW5mdE1hbmFnZXJBZGRyZXNzAAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQtjb29yZGluYXRvcgAFFWtfbmZ0X21hbmFnZXJfYWRkcmVzcwITTkZUIE1hbmFnZXIgbm90IHNldAANa190b2tlbl9wYXJhbQINa190b2tlbl9wYXJhbQAMa190b2tlbl90eXBlAgxrX3Rva2VuX3R5cGUAGEZFRV9SRURVQ1RJT05fVE9LRU5fVFlQRQINZmVlX3JlZHVjdGlvbgAIRElSX0xPTkcAAQAJRElSX1NIT1JUAAIADVRXQVBfSU5URVJWQUwADwAHU0VDT05EUwDoBwAPREVDSU1BTF9OVU1CRVJTAAYADERFQ0lNQUxfVU5JVAkAaAIAAQkAaAIJAGgCCQBoAgkAaAIJAGgCAAoACgAKAAoACgAKAA9NSU5VVEVTX0lOX1lFQVIJAGgCAKCKIAUMREVDSU1BTF9VTklUAAdPTkVfREFZCQBoAgCAowUFDERFQ0lNQUxfVU5JVAAPUE5MX09QVElPTl9TUE9UAAEAEVBOTF9PUFRJT05fT1JBQ0xFAAIBAXMBAl94CQCsAgIJAKQDAQUCX3gCASwBBGRpdmQCAl94Al95CQBuBAUCX3gFDERFQ0lNQUxfVU5JVAUCX3kFCEhBTEZFVkVOAQRtdWxkAgJfeAJfeQkAbgQFAl94BQJfeQUMREVDSU1BTF9VTklUBQhIQUxGRVZFTgEFYmRpdmQCAl94Al95CQC9AgQFAl94CQC2AgEFDERFQ0lNQUxfVU5JVAUCX3kFCEhBTEZFVkVOAQVibXVsZAICX3gCX3kJAL0CBAUCX3gFAl95CQC2AgEFDERFQ0lNQUxfVU5JVAUISEFMRkVWRU4BA2FicwECX3gDCQBmAgUCX3gAAAUCX3gJAQEtAQUCX3gBBHZtYXgCAl94Al95AwkAZwIFAl94BQJfeQUCX3gFAl95AQlsaXN0VG9TdHIBBV9saXN0AwkAAAIJAJADAQUFX2xpc3QAAAIACQC5CQIFBV9saXN0AgEsAQlzdHJUb0xpc3QBBF9zdHIDCQAAAgUEX3N0cgIABQNuaWwJALUJAgUEX3N0cgIBLAELcHVzaFRvUXVldWUDBV9saXN0CF9tYXhTaXplBl92YWx1ZQMJAGYCCQCQAwEFBV9saXN0BQhfbWF4U2l6ZQkAzQgCCQDRCAIFBV9saXN0AAAFBl92YWx1ZQkAzQgCBQVfbGlzdAUGX3ZhbHVlAQNpbnQBAWsJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQR0aGlzBQFrCQCsAgICDW5vIHZhbHVlIGZvciAFAWsBBWludE9yAgFrA2RlZgkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQFrBQNkZWYBBHN0ckECCF9hZGRyZXNzBF9rZXkEA3ZhbAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFCF9hZGRyZXNzBQRfa2V5CQCsAgICEU5vIHZhbHVlIGZvciBrZXkgBQRfa2V5BQN2YWwBBGludEECCF9hZGRyZXNzBF9rZXkEA3ZhbAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFCF9hZGRyZXNzBQRfa2V5CQCsAgICEU5vIHZhbHVlIGZvciBrZXkgBQRfa2V5BQN2YWwBCGNiYWxhbmNlAAkBA2ludAEFCWtfYmFsYW5jZQEDZmVlAAkBA2ludAEFBWtfZmVlAQ9yb2xsb3ZlckZlZVJhdGUACQEDaW50AQUNa19yb2xsb3ZlckZlZQEPaW5pdE1hcmdpblJhdGlvAAkBA2ludAEFEWtfaW5pdE1hcmdpblJhdGlvAQZxdEFzdFIACQEDaW50AQUTa19xdW90ZUFzc2V0UmVzZXJ2ZQEGYnNBc3RSAAkBA2ludAEFEmtfYmFzZUFzc2V0UmVzZXJ2ZQEGcXRBc3RXAAkBBWludE9yAgUSa19xdW90ZUFzc2V0V2VpZ2h0BQxERUNJTUFMX1VOSVQBBmJzQXN0VwAJAQVpbnRPcgIFEWtfYmFzZUFzc2V0V2VpZ2h0BQxERUNJTUFMX1VOSVQBEXRvdGFsUG9zaXRpb25TaXplAAkBA2ludAEFE2tfdG90YWxQb3NpdGlvblNpemUBFG9wZW5JbnRlcmVzdE5vdGlvbmFsAAkBA2ludAEFFmtfb3BlbkludGVyZXN0Tm90aW9uYWwBEW9wZW5JbnRlcmVzdFNob3J0AAkBA2ludAEFE2tfb3BlbkludGVyZXN0U2hvcnQBEG9wZW5JbnRlcmVzdExvbmcACQEDaW50AQUSa19vcGVuSW50ZXJlc3RMb25nARluZXh0RnVuZGluZ0Jsb2NrVGltZXN0YW1wAAkBA2ludAEFEmtfbmV4dEZ1bmRpbmdCbG9jawEQZnVuZGluZ1BlcmlvZFJhdwAJAQNpbnQBBQ9rX2Z1bmRpbmdQZXJpb2QBFGZ1bmRpbmdQZXJpb2REZWNpbWFsAAkAaAIJARBmdW5kaW5nUGVyaW9kUmF3AAUMREVDSU1BTF9VTklUARRmdW5kaW5nUGVyaW9kU2Vjb25kcwAJAGgCCQEQZnVuZGluZ1BlcmlvZFJhdwAFB1NFQ09ORFMBFm1haW50ZW5hbmNlTWFyZ2luUmF0aW8ACQEDaW50AQUYa19tYWludGVuYW5jZU1hcmdpblJhdGlvARNsaXF1aWRhdGlvbkZlZVJhdGlvAAkBA2ludAEFFWtfbGlxdWlkYXRpb25GZWVSYXRpbwEXcGFydGlhbExpcXVpZGF0aW9uUmF0aW8ACQEDaW50AQUZa19wYXJ0aWFsTGlxdWlkYXRpb25SYXRpbwELc3ByZWFkTGltaXQACQEDaW50AQUNa19zcHJlYWRMaW1pdAEObWF4UHJpY2VJbXBhY3QACQEDaW50AQUQa19tYXhQcmljZUltcGFjdAEObWF4UHJpY2VTcHJlYWQACQEDaW50AQUQa19tYXhQcmljZVNwcmVhZAEPbWF4T3Blbk5vdGlvbmFsAAkBA2ludAEFEWtfbWF4T3Blbk5vdGlvbmFsASNsYXRlc3RMb25nQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgAJAQNpbnQBBSVrX2xhdGVzdExvbmdDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uASRsYXRlc3RTaG9ydEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24ACQEDaW50AQUma19sYXRlc3RTaG9ydEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24BFnRvdGFsU2hvcnRQb3NpdGlvblNpemUACQEDaW50AQUYa190b3RhbFNob3J0UG9zaXRpb25TaXplARV0b3RhbExvbmdQb3NpdGlvblNpemUACQEDaW50AQUXa190b3RhbExvbmdQb3NpdGlvblNpemUBDGxhc3RTZXF1ZW5jZQAJAQVpbnRPcgIFCmtfc2VxdWVuY2UAAAETZmVlVG9TdGFrZXJzUGVyY2VudAAJAQNpbnQBBRVrX2ZlZVRvU3Rha2Vyc1BlcmNlbnQBDm1heE9yYWNsZURlbGF5AAkBA2ludAEFEGtfbWF4T3JhY2xlRGVsYXkBDWxhc3RUaW1lc3RhbXAACAUJbGFzdEJsb2NrCXRpbWVzdGFtcAEPZ2V0QWN0dWFsQ2FsbGVyAQFpCQELdmFsdWVPckVsc2UCCQCdCAIJAQ1vcmRlcnNBZGRyZXNzAAIIa19zZW5kZXIJAKUIAQgFAWkGY2FsbGVyARZyZXF1aXJlTW9yZU1hcmdpblJhdGlvAwxfbWFyZ2luUmF0aW8QX2Jhc2VNYXJnaW5SYXRpbxRfbGFyZ2VyVGhhbk9yRXF1YWxUbwQUcmVtYWluaW5nTWFyZ2luUmF0aW8JAGUCBQxfbWFyZ2luUmF0aW8FEF9iYXNlTWFyZ2luUmF0aW8DAwUUX2xhcmdlclRoYW5PckVxdWFsVG8JAGYCAAAFFHJlbWFpbmluZ01hcmdpblJhdGlvBwkAAgEJAKwCAgkArAICCQCsAgICEEludmFsaWQgbWFyZ2luOiAJAKQDAQUMX21hcmdpblJhdGlvAgMgPCAJAKQDAQUQX2Jhc2VNYXJnaW5SYXRpbwMDCQEBIQEFFF9sYXJnZXJUaGFuT3JFcXVhbFRvCQBnAgUUcmVtYWluaW5nTWFyZ2luUmF0aW8AAAcJAAIBCQCsAgIJAKwCAgkArAICAhBJbnZhbGlkIG1hcmdpbjogCQCkAwEFDF9tYXJnaW5SYXRpbwIDID4gCQCkAwEFEF9iYXNlTWFyZ2luUmF0aW8GAR9sYXRlc3RDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAQ1fcG9zaXRpb25TaXplAwkAAAIFDV9wb3NpdGlvblNpemUAAAkAAgECLFNob3VsZCBub3QgYmUgY2FsbGVkIHdpdGggX3Bvc2l0aW9uU2l6ZSA9PSAwAwkAZgIFDV9wb3NpdGlvblNpemUAAAkBI2xhdGVzdExvbmdDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAAkBJGxhdGVzdFNob3J0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgABC2dldFBvc2l0aW9uAQdfdHJhZGVyBA9wb3NpdGlvblNpemVPcHQJAJoIAgUEdGhpcwkBDnRvQ29tcG9zaXRlS2V5AgUOa19wb3NpdGlvblNpemUFB190cmFkZXIEByRtYXRjaDAFD3Bvc2l0aW9uU2l6ZU9wdAMJAAECBQckbWF0Y2gwAgNJbnQEDHBvc2l0aW9uU2l6ZQUHJG1hdGNoMAkAlwoFBQxwb3NpdGlvblNpemUJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAQ50b0NvbXBvc2l0ZUtleQIFEGtfcG9zaXRpb25NYXJnaW4FB190cmFkZXIJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAQ50b0NvbXBvc2l0ZUtleQIFFmtfcG9zaXRpb25PcGVuTm90aW9uYWwFB190cmFkZXIJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAQ50b0NvbXBvc2l0ZUtleQIFLmtfcG9zaXRpb25MYXN0VXBkYXRlZEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24FB190cmFkZXIJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAQ50b0NvbXBvc2l0ZUtleQIFHmtfcG9zaXRpb25MYXN0VXBkYXRlZFRpbWVzdGFtcAUHX3RyYWRlcgkAlwoFAAAAAAAAAAAAAAEQZ2V0UG9zaXRpb25Bc3NldAEHX3RyYWRlcgQQcG9zaXRpb25Bc3NldE9wdAkAnQgCBQR0aGlzCQEOdG9Db21wb3NpdGVLZXkCBQ9rX3Bvc2l0aW9uQXNzZXQFB190cmFkZXIEByRtYXRjaDAFEHBvc2l0aW9uQXNzZXRPcHQDCQABAgUHJG1hdGNoMAIGU3RyaW5nBA1wb3NpdGlvbkFzc2V0BQckbWF0Y2gwBQ1wb3NpdGlvbkFzc2V0CQDYBAEJAQpxdW90ZUFzc2V0AAEOZ2V0UG9zaXRpb25GZWUBB190cmFkZXIEDnBvc2l0aW9uRmVlT3B0CQCaCAIFBHRoaXMJAQ50b0NvbXBvc2l0ZUtleQIFDWtfcG9zaXRpb25GZWUFB190cmFkZXIEByRtYXRjaDAFDnBvc2l0aW9uRmVlT3B0AwkAAQIFByRtYXRjaDACA0ludAQLcG9zaXRpb25GZWUFByRtYXRjaDAFC3Bvc2l0aW9uRmVlCQEDZmVlAAETcmVxdWlyZU9wZW5Qb3NpdGlvbgEHX3RyYWRlcgMJAAACCAkBC2dldFBvc2l0aW9uAQUHX3RyYWRlcgJfMQAACQACAQIQTm8gb3BlbiBwb3NpdGlvbgYBDWdldE9yYWNsZURhdGEBA2tleQQNb3JhY2xlRGF0YVN0cgkAnQgCBQR0aGlzBQNrZXkDAwkBCWlzRGVmaW5lZAEFDW9yYWNsZURhdGFTdHIJAQIhPQIJAQV2YWx1ZQEFDW9yYWNsZURhdGFTdHICAAcECm9yYWNsZURhdGEJALUJAgkBBXZhbHVlAQUNb3JhY2xlRGF0YVN0cgIBLAQNb3JhY2xlQWRkcmVzcwkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJAJEDAgUKb3JhY2xlRGF0YQAACQCsAgICG0ludmFsaWQgb3JhY2xlIGFkZHJlc3MgaW46IAkBBXZhbHVlAQUNb3JhY2xlRGF0YVN0cgQIcHJpY2VLZXkJAJEDAgUKb3JhY2xlRGF0YQABBAhibG9ja0tleQkAkQMCBQpvcmFjbGVEYXRhAAIEB29wZW5LZXkJAJEDAgUKb3JhY2xlRGF0YQADCQCWCgQFDW9yYWNsZUFkZHJlc3MFCHByaWNlS2V5BQhibG9ja0tleQUHb3BlbktleQUEdW5pdAELaW5pdGlhbGl6ZWQACQELdmFsdWVPckVsc2UCCQCbCAIFBHRoaXMFDWtfaW5pdGlhbGl6ZWQHAQZwYXVzZWQACQELdmFsdWVPckVsc2UCCQCbCAIFBHRoaXMFCGtfcGF1c2VkBwEJY2xvc2VPbmx5AAkBC3ZhbHVlT3JFbHNlAgkAmwgCBQR0aGlzBQtrX2Nsb3NlT25seQcBDXVwZGF0ZVJlc2VydmUDBl9pc0FkZBFfcXVvdGVBc3NldEFtb3VudBBfYmFzZUFzc2V0QW1vdW50AwUGX2lzQWRkBAduZXdCYXNlCQBlAgkBBmJzQXN0UgAFEF9iYXNlQXNzZXRBbW91bnQDCQBnAgAABQduZXdCYXNlCQACAQIqVHggbGVhZCB0byBiYXNlIGFzc2V0IHJlc2VydmUgPD0gMCwgcmV2ZXJ0CQCVCgMJAGQCCQEGcXRBc3RSAAURX3F1b3RlQXNzZXRBbW91bnQFB25ld0Jhc2UJAGQCCQERdG90YWxQb3NpdGlvblNpemUABRBfYmFzZUFzc2V0QW1vdW50BAhuZXdRdW90ZQkAZQIJAQZxdEFzdFIABRFfcXVvdGVBc3NldEFtb3VudAMJAGcCAAAFCG5ld1F1b3RlCQACAQIqVHggbGVhZCB0byBiYXNlIHF1b3RlIHJlc2VydmUgPD0gMCwgcmV2ZXJ0CQCVCgMFCG5ld1F1b3RlCQBkAgkBBmJzQXN0UgAFEF9iYXNlQXNzZXRBbW91bnQJAGUCCQERdG90YWxQb3NpdGlvblNpemUABRBfYmFzZUFzc2V0QW1vdW50AQ1jYWxjSW52YXJpYW50AgdfcXRBc3RSB19ic0FzdFIEB2JxdEFzdFIJALYCAQUHX3F0QXN0UgQHYmJzQXN0UgkAtgIBBQdfYnNBc3RSCQEFYm11bGQCBQdicXRBc3RSBQdiYnNBc3RSAQlzd2FwSW5wdXQCBl9pc0FkZBFfcXVvdGVBc3NldEFtb3VudAQHX3F0QXN0UgkBBnF0QXN0UgAEB19ic0FzdFIJAQZic0FzdFIABAdfcXRBc3RXCQEGcXRBc3RXAAQHX2JzQXN0VwkBBmJzQXN0VwAEGHF1b3RlQXNzZXRBbW91bnRBZGp1c3RlZAkBBGRpdmQCBRFfcXVvdGVBc3NldEFtb3VudAUHX3F0QXN0VwQBawkBDWNhbGNJbnZhcmlhbnQCBQdfcXRBc3RSBQdfYnNBc3RSBBZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyAwUGX2lzQWRkCQBkAgUHX3F0QXN0UgUYcXVvdGVBc3NldEFtb3VudEFkanVzdGVkCQBlAgUHX3F0QXN0UgUYcXVvdGVBc3NldEFtb3VudEFkanVzdGVkBBViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIJAKADAQkBBWJkaXZkAgUBawkAtgIBBRZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyBBhhbW91bnRCYXNlQXNzZXRCb3VnaHRBYnMJAQNhYnMBCQBlAgUVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyBQdfYnNBc3RSBBVhbW91bnRCYXNlQXNzZXRCb3VnaHQDBQZfaXNBZGQFGGFtb3VudEJhc2VBc3NldEJvdWdodEFicwkBAS0BBRhhbW91bnRCYXNlQXNzZXRCb3VnaHRBYnMEDSR0MDE2NzIyMTY4OTIJAQ11cGRhdGVSZXNlcnZlAwUGX2lzQWRkBRhxdW90ZUFzc2V0QW1vdW50QWRqdXN0ZWQFGGFtb3VudEJhc2VBc3NldEJvdWdodEFicwQXcXVvdGVBc3NldFJlc2VydmVBZnRlcjEIBQ0kdDAxNjcyMjE2ODkyAl8xBBZiYXNlQXNzZXRSZXNlcnZlQWZ0ZXIxCAUNJHQwMTY3MjIxNjg5MgJfMgQXdG90YWxQb3NpdGlvblNpemVBZnRlcjEIBQ0kdDAxNjcyMjE2ODkyAl8zBAtwcmljZUJlZm9yZQkBBGRpdmQCCQEEbXVsZAIFB19xdEFzdFIFB19xdEFzdFcJAQRtdWxkAgUHX2JzQXN0UgUHX2JzQXN0VwQLbWFya2V0UHJpY2UJAQRkaXZkAgURX3F1b3RlQXNzZXRBbW91bnQFGGFtb3VudEJhc2VBc3NldEJvdWdodEFicwQJcHJpY2VEaWZmCQEDYWJzAQkAZQIFC3ByaWNlQmVmb3JlBQttYXJrZXRQcmljZQQLcHJpY2VJbXBhY3QJAGUCBQxERUNJTUFMX1VOSVQJAQRkaXZkAgULcHJpY2VCZWZvcmUJAGQCBQtwcmljZUJlZm9yZQUJcHJpY2VEaWZmBBNtYXhQcmljZUltcGFjdFZhbHVlCQEObWF4UHJpY2VJbXBhY3QAAwkAZgIFC3ByaWNlSW1wYWN0BRNtYXhQcmljZUltcGFjdFZhbHVlCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAg1QcmljZSBpbXBhY3QgCQCkAwEFC3ByaWNlSW1wYWN0AhQgPiBtYXggcHJpY2UgaW1wYWN0IAkApAMBBRNtYXhQcmljZUltcGFjdFZhbHVlAhUgYmVmb3JlIHF1b3RlIGFzc2V0OiAJAKQDAQUHX3F0QXN0UgIUIGJlZm9yZSBiYXNlIGFzc2V0OiAJAKQDAQUHX2JzQXN0UgIhIHF1b3RlIGFzc2V0IGFtb3VudCB0byBleGNoYW5nZTogCQCkAwEFEV9xdW90ZUFzc2V0QW1vdW50Ag8gcHJpY2UgYmVmb3JlOiAJAKQDAQULcHJpY2VCZWZvcmUCDiBtYXJrZXRQcmljZTogCQCkAwEFC21hcmtldFByaWNlCQCWCgQFFWFtb3VudEJhc2VBc3NldEJvdWdodAUXcXVvdGVBc3NldFJlc2VydmVBZnRlcjEFFmJhc2VBc3NldFJlc2VydmVBZnRlcjEFF3RvdGFsUG9zaXRpb25TaXplQWZ0ZXIxAQ9jYWxjUm9sbG92ZXJGZWUCEl9vbGRQb3NpdGlvbk1hcmdpbiBfb2xkUG9zaXRpb25MYXN0VXBkYXRlZFRpbWVzdGFtcAQPcG9zaXRpb25NaW51dGVzCQBoAgkAaQIJAGkCCQBlAgkBDWxhc3RUaW1lc3RhbXAABSBfb2xkUG9zaXRpb25MYXN0VXBkYXRlZFRpbWVzdGFtcADoBwA8BQxERUNJTUFMX1VOSVQEC3JvbGxvdmVyRmVlCQEEZGl2ZAIJAQRtdWxkAgkBBG11bGQCBRJfb2xkUG9zaXRpb25NYXJnaW4FD3Bvc2l0aW9uTWludXRlcwkBD3JvbGxvdmVyRmVlUmF0ZQAFD01JTlVURVNfSU5fWUVBUgULcm9sbG92ZXJGZWUBMGNhbGNSZW1haW5NYXJnaW5XaXRoRnVuZGluZ1BheW1lbnRBbmRSb2xsb3ZlckZlZQUQX29sZFBvc2l0aW9uU2l6ZRJfb2xkUG9zaXRpb25NYXJnaW4lX29sZFBvc2l0aW9uQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbiBfb2xkUG9zaXRpb25MYXN0VXBkYXRlZFRpbWVzdGFtcAxfbWFyZ2luRGVsdGEEDmZ1bmRpbmdQYXltZW50AwkBAiE9AgUQX29sZFBvc2l0aW9uU2l6ZQAABCBfbGF0ZXN0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgkBH2xhdGVzdEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24BBRBfb2xkUG9zaXRpb25TaXplCQEEbXVsZAIJAGUCBSBfbGF0ZXN0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgUlX29sZFBvc2l0aW9uQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgUQX29sZFBvc2l0aW9uU2l6ZQAABAtyb2xsb3ZlckZlZQkBD2NhbGNSb2xsb3ZlckZlZQIFEl9vbGRQb3NpdGlvbk1hcmdpbgUgX29sZFBvc2l0aW9uTGFzdFVwZGF0ZWRUaW1lc3RhbXAEDHNpZ25lZE1hcmdpbgkAZAIJAGUCCQBlAgUMX21hcmdpbkRlbHRhBQtyb2xsb3ZlckZlZQUOZnVuZGluZ1BheW1lbnQFEl9vbGRQb3NpdGlvbk1hcmdpbgQNJHQwMTkxNDcxOTI3NAMJAGYCAAAFDHNpZ25lZE1hcmdpbgkAlAoCAAAJAQNhYnMBBQxzaWduZWRNYXJnaW4JAJQKAgkBA2FicwEFDHNpZ25lZE1hcmdpbgAABAxyZW1haW5NYXJnaW4IBQ0kdDAxOTE0NzE5Mjc0Al8xBAdiYWREZWJ0CAUNJHQwMTkxNDcxOTI3NAJfMgkAlgoEBQxyZW1haW5NYXJnaW4FB2JhZERlYnQFDmZ1bmRpbmdQYXltZW50BQtyb2xsb3ZlckZlZQEWc3dhcE91dHB1dFdpdGhSZXNlcnZlcwcGX2lzQWRkEF9iYXNlQXNzZXRBbW91bnQUX2NoZWNrTWF4UHJpY2VJbXBhY3QSX3F1b3RlQXNzZXRSZXNlcnZlEV9xdW90ZUFzc2V0V2VpZ2h0EV9iYXNlQXNzZXRSZXNlcnZlEF9iYXNlQXNzZXRXZWlnaHQEC3ByaWNlQmVmb3JlCQEEZGl2ZAIJAQRtdWxkAgUSX3F1b3RlQXNzZXRSZXNlcnZlBRFfcXVvdGVBc3NldFdlaWdodAkBBG11bGQCBRFfYmFzZUFzc2V0UmVzZXJ2ZQUQX2Jhc2VBc3NldFdlaWdodAMJAAACBRBfYmFzZUFzc2V0QW1vdW50AAAJAAIBAhlJbnZhbGlkIGJhc2UgYXNzZXQgYW1vdW50BAFrCQENY2FsY0ludmFyaWFudAIFEl9xdW90ZUFzc2V0UmVzZXJ2ZQURX2Jhc2VBc3NldFJlc2VydmUEGGJhc2VBc3NldFBvb2xBbW91bnRBZnRlcgMFBl9pc0FkZAkAZAIFEV9iYXNlQXNzZXRSZXNlcnZlBRBfYmFzZUFzc2V0QW1vdW50CQBlAgURX2Jhc2VBc3NldFJlc2VydmUFEF9iYXNlQXNzZXRBbW91bnQED3F1b3RlQXNzZXRBZnRlcgkAoAMBCQEFYmRpdmQCBQFrCQC2AgEFGGJhc2VBc3NldFBvb2xBbW91bnRBZnRlcgQPcXVvdGVBc3NldERlbHRhCQEDYWJzAQkAZQIFD3F1b3RlQXNzZXRBZnRlcgUSX3F1b3RlQXNzZXRSZXNlcnZlBA5xdW90ZUFzc2V0U29sZAkBBG11bGQCBQ9xdW90ZUFzc2V0RGVsdGEFEV9xdW90ZUFzc2V0V2VpZ2h0BBNtYXhQcmljZUltcGFjdFZhbHVlCQEObWF4UHJpY2VJbXBhY3QABA0kdDAyMDUzNjIwNjk4CQENdXBkYXRlUmVzZXJ2ZQMJAQEhAQUGX2lzQWRkBQ9xdW90ZUFzc2V0RGVsdGEFEF9iYXNlQXNzZXRBbW91bnQEF3F1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIxCAUNJHQwMjA1MzYyMDY5OAJfMQQWYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyMQgFDSR0MDIwNTM2MjA2OTgCXzIEF3RvdGFsUG9zaXRpb25TaXplQWZ0ZXIxCAUNJHQwMjA1MzYyMDY5OAJfMwQLbWFya2V0UHJpY2UJAQRkaXZkAgUOcXVvdGVBc3NldFNvbGQFEF9iYXNlQXNzZXRBbW91bnQECXByaWNlRGlmZgkBA2FicwEJAGUCBQtwcmljZUJlZm9yZQULbWFya2V0UHJpY2UEC3ByaWNlSW1wYWN0CQBlAgUMREVDSU1BTF9VTklUCQEEZGl2ZAIFC3ByaWNlQmVmb3JlCQBkAgULcHJpY2VCZWZvcmUFCXByaWNlRGlmZgMDCQBmAgULcHJpY2VJbXBhY3QFE21heFByaWNlSW1wYWN0VmFsdWUFFF9jaGVja01heFByaWNlSW1wYWN0BwkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgINUHJpY2UgaW1wYWN0IAkApAMBBQtwcmljZUltcGFjdAIUID4gbWF4IHByaWNlIGltcGFjdCAJAKQDAQUTbWF4UHJpY2VJbXBhY3RWYWx1ZQIVIGJlZm9yZSBxdW90ZSBhc3NldDogCQCkAwEFEl9xdW90ZUFzc2V0UmVzZXJ2ZQIUIGJlZm9yZSBiYXNlIGFzc2V0OiAJAKQDAQURX2Jhc2VBc3NldFJlc2VydmUCICBiYXNlIGFzc2V0IGFtb3VudCB0byBleGNoYW5nZTogCQCkAwEFEF9iYXNlQXNzZXRBbW91bnQCDyBwcmljZSBiZWZvcmU6IAkApAMBBQtwcmljZUJlZm9yZQIPIG1hcmtldCBwcmljZTogCQCkAwEFC21hcmtldFByaWNlCQCZCgcFDnF1b3RlQXNzZXRTb2xkBRdxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyMQUWYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyMQUXdG90YWxQb3NpdGlvblNpemVBZnRlcjEJAGUCCQEVdG90YWxMb25nUG9zaXRpb25TaXplAAMFBl9pc0FkZAkBA2FicwEFEF9iYXNlQXNzZXRBbW91bnQAAAkAZQIJARZ0b3RhbFNob3J0UG9zaXRpb25TaXplAAMJAQEhAQUGX2lzQWRkCQEDYWJzAQUQX2Jhc2VBc3NldEFtb3VudAAABQtwcmljZUltcGFjdAEKc3dhcE91dHB1dAMGX2lzQWRkEF9iYXNlQXNzZXRBbW91bnQUX2NoZWNrTWF4UHJpY2VJbXBhY3QJARZzd2FwT3V0cHV0V2l0aFJlc2VydmVzBwUGX2lzQWRkBRBfYmFzZUFzc2V0QW1vdW50BRRfY2hlY2tNYXhQcmljZUltcGFjdAkBBnF0QXN0UgAJAQZxdEFzdFcACQEGYnNBc3RSAAkBBmJzQXN0VwABE2dldE9yYWNsZVByaWNlVmFsdWUDBm9yYWNsZQhwcmljZUtleQhibG9ja0tleQQJbGFzdFZhbHVlCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUGb3JhY2xlBQhwcmljZUtleQkArAICCQCsAgIJAKwCAgIiQ2FuIG5vdCBnZXQgb3JhY2xlIHByaWNlLiBPcmFjbGU6IAkApQgBBQZvcmFjbGUCBiBrZXk6IAUIcHJpY2VLZXkDCQECIT0CBQhibG9ja0tleQIABAxjdXJyZW50QmxvY2sIBQlsYXN0QmxvY2sGaGVpZ2h0BA9sYXN0T3JhY2xlQmxvY2sJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQZvcmFjbGUFCGJsb2NrS2V5CQCsAgIJAKwCAgkArAICAiJDYW4gbm90IGdldCBvcmFjbGUgYmxvY2suIE9yYWNsZTogCQClCAEFBm9yYWNsZQIGIGtleTogBQhibG9ja0tleQMJAGYCCQBlAgUMY3VycmVudEJsb2NrBQ9sYXN0T3JhY2xlQmxvY2sJAQ5tYXhPcmFjbGVEZWxheQAJAAIBCQCsAgIJAKwCAgkArAICAiZPcmFjbGUgc3RhbGUgZGF0YS4gTGFzdCBvcmFjbGUgYmxvY2s6IAkApAMBBQ9sYXN0T3JhY2xlQmxvY2sCECBjdXJyZW50IGJsb2NrOiAJAKQDAQUMY3VycmVudEJsb2NrBQlsYXN0VmFsdWUFCWxhc3RWYWx1ZQEOZ2V0T3JhY2xlUHJpY2UABApiYXNlT3JhY2xlCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAQ1nZXRPcmFjbGVEYXRhAQUMa19iYXNlT3JhY2xlAhlObyBiYXNlIGFzc2V0IG9yYWNsZSBkYXRhBA9iYXNlT3JhY2xlUHJpY2UJARNnZXRPcmFjbGVQcmljZVZhbHVlAwgFCmJhc2VPcmFjbGUCXzEIBQpiYXNlT3JhY2xlAl8yCAUKYmFzZU9yYWNsZQJfMwQLcXVvdGVPcmFjbGUJAQ1nZXRPcmFjbGVEYXRhAQUNa19xdW90ZU9yYWNsZQQQcXVvdGVPcmFjbGVQcmljZQMJAQlpc0RlZmluZWQBBQtxdW90ZU9yYWNsZQQMcXVvdGVPcmFjbGVWCQEFdmFsdWUBBQtxdW90ZU9yYWNsZQkBE2dldE9yYWNsZVByaWNlVmFsdWUDCAUMcXVvdGVPcmFjbGVWAl8xCAUMcXVvdGVPcmFjbGVWAl8yCAUMcXVvdGVPcmFjbGVWAl8zBQxERUNJTUFMX1VOSVQJAQRkaXZkAgUPYmFzZU9yYWNsZVByaWNlBRBxdW90ZU9yYWNsZVByaWNlAQ5pc01hcmtldENsb3NlZAAECmJhc2VPcmFjbGUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkBDWdldE9yYWNsZURhdGEBBQxrX2Jhc2VPcmFjbGUCGU5vIGJhc2UgYXNzZXQgb3JhY2xlIGRhdGEEBm9yYWNsZQgFCmJhc2VPcmFjbGUCXzEEB29wZW5LZXkIBQpiYXNlT3JhY2xlAl80AwkBAiE9AgUHb3BlbktleQIABAZpc09wZW4JARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmwgCBQZvcmFjbGUFB29wZW5LZXkJAKwCAgkArAICCQCsAgICK0NhbiBub3QgZ2V0IG9yYWNsZSBpcyBvcGVuL2Nsb3NlZC4gT3JhY2xlOiAJAKUIAQUGb3JhY2xlAgYga2V5OiAFB29wZW5LZXkJAQEhAQUGaXNPcGVuBwEMYWJzUHJpY2VEaWZmBQxfb3JhY2xlUHJpY2USX3F1b3RlQXNzZXRSZXNlcnZlEV9iYXNlQXNzZXRSZXNlcnZlB19xdEFzdFcHX2JzQXN0VwQKcHJpY2VBZnRlcgkBBGRpdmQCCQEEbXVsZAIFEl9xdW90ZUFzc2V0UmVzZXJ2ZQUHX3F0QXN0VwkBBG11bGQCBRFfYmFzZUFzc2V0UmVzZXJ2ZQUHX2JzQXN0VwQMYXZlcmFnZVByaWNlCQEEZGl2ZAIJAGQCBQxfb3JhY2xlUHJpY2UFCnByaWNlQWZ0ZXIJAGgCAAIFDERFQ0lNQUxfVU5JVAQMYWJzUHJpY2VEaWZmCQEEZGl2ZAIJAQNhYnMBCQBlAgUMX29yYWNsZVByaWNlBQpwcmljZUFmdGVyBQxhdmVyYWdlUHJpY2UFDGFic1ByaWNlRGlmZgEZcmVxdWlyZU5vdE92ZXJTcHJlYWRMaW1pdAISX3F1b3RlQXNzZXRSZXNlcnZlEV9iYXNlQXNzZXRSZXNlcnZlBAtvcmFjbGVQcmljZQkBDmdldE9yYWNsZVByaWNlAAQHX3F0QXN0VwkBBnF0QXN0VwAEB19ic0FzdFcJAQZic0FzdFcABBJhYnNQcmljZURpZmZCZWZvcmUJAQxhYnNQcmljZURpZmYFBQtvcmFjbGVQcmljZQkBBnF0QXN0UgAJAQZic0FzdFIABQdfcXRBc3RXBQdfYnNBc3RXBBFhYnNQcmljZURpZmZBZnRlcgkBDGFic1ByaWNlRGlmZgUFC29yYWNsZVByaWNlBRJfcXVvdGVBc3NldFJlc2VydmUFEV9iYXNlQXNzZXRSZXNlcnZlBQdfcXRBc3RXBQdfYnNBc3RXAwMJAGYCBRFhYnNQcmljZURpZmZBZnRlcgkBDm1heFByaWNlU3ByZWFkAAkAZgIFEWFic1ByaWNlRGlmZkFmdGVyBRJhYnNQcmljZURpZmZCZWZvcmUHCQACAQkArAICCQCsAgIJAKwCAgINUHJpY2Ugc3ByZWFkIAkApAMBBRFhYnNQcmljZURpZmZBZnRlcgIUID4gbWF4IHByaWNlIHNwcmVhZCAJAKQDAQkBDm1heFByaWNlU3ByZWFkAAYBHXJlcXVpcmVOb3RPdmVyTWF4T3Blbk5vdGlvbmFsAhFfbG9uZ09wZW5Ob3Rpb25hbBJfc2hvcnRPcGVuTm90aW9uYWwEEF9tYXhPcGVuTm90aW9uYWwJAQ9tYXhPcGVuTm90aW9uYWwAAwkAZgIFEV9sb25nT3Blbk5vdGlvbmFsBRBfbWF4T3Blbk5vdGlvbmFsCQACAQkArAICCQCsAgIJAKwCAgITTG9uZyBvcGVuIG5vdGlvbmFsIAkApAMBBRFfbG9uZ09wZW5Ob3Rpb25hbAIVID4gbWF4IG9wZW4gbm90aW9uYWwgCQCkAwEFEF9tYXhPcGVuTm90aW9uYWwDCQBmAgUSX3Nob3J0T3Blbk5vdGlvbmFsBRBfbWF4T3Blbk5vdGlvbmFsCQACAQkArAICCQCsAgIJAKwCAgIUU2hvcnQgb3BlbiBub3Rpb25hbCAJAKQDAQUSX3Nob3J0T3Blbk5vdGlvbmFsAhUgPiBtYXggb3BlbiBub3Rpb25hbCAJAKQDAQUQX21heE9wZW5Ob3Rpb25hbAYBDGdldFNwb3RQcmljZQAEEl9xdW90ZUFzc2V0UmVzZXJ2ZQkBBnF0QXN0UgAEEV9iYXNlQXNzZXRSZXNlcnZlCQEGYnNBc3RSAAQHX3F0QXN0VwkBBnF0QXN0VwAEB19ic0FzdFcJAQZic0FzdFcACQEEZGl2ZAIJAQRtdWxkAgUSX3F1b3RlQXNzZXRSZXNlcnZlBQdfcXRBc3RXCQEEbXVsZAIFEV9iYXNlQXNzZXRSZXNlcnZlBQdfYnNBc3RXARZpc092ZXJGbHVjdHVhdGlvbkxpbWl0AAQLb3JhY2xlUHJpY2UJAQ5nZXRPcmFjbGVQcmljZQAEDGN1cnJlbnRQcmljZQkBDGdldFNwb3RQcmljZQAJAGYCCQEEZGl2ZAIJAQNhYnMBCQBlAgULb3JhY2xlUHJpY2UFDGN1cnJlbnRQcmljZQULb3JhY2xlUHJpY2UJAQtzcHJlYWRMaW1pdAABH2dldFBvc2l0aW9uQWRqdXN0ZWRPcGVuTm90aW9uYWwGDV9wb3NpdGlvblNpemUHX29wdGlvbhJfcXVvdGVBc3NldFJlc2VydmURX3F1b3RlQXNzZXRXZWlnaHQRX2Jhc2VBc3NldFJlc2VydmUQX2Jhc2VBc3NldFdlaWdodAQPcG9zaXRpb25TaXplQWJzCQEDYWJzAQUNX3Bvc2l0aW9uU2l6ZQQHaXNTaG9ydAkAZgIAAAUNX3Bvc2l0aW9uU2l6ZQQQcG9zaXRpb25Ob3Rpb25hbAMJAAACBQdfb3B0aW9uBQ9QTkxfT1BUSU9OX1NQT1QEE291dFBvc2l0aW9uTm90aW9uYWwICQEWc3dhcE91dHB1dFdpdGhSZXNlcnZlcwcJAQEhAQUHaXNTaG9ydAUPcG9zaXRpb25TaXplQWJzBwUSX3F1b3RlQXNzZXRSZXNlcnZlBRFfcXVvdGVBc3NldFdlaWdodAURX2Jhc2VBc3NldFJlc2VydmUFEF9iYXNlQXNzZXRXZWlnaHQCXzEFE291dFBvc2l0aW9uTm90aW9uYWwJAQRtdWxkAgUPcG9zaXRpb25TaXplQWJzCQEOZ2V0T3JhY2xlUHJpY2UABRBwb3NpdGlvbk5vdGlvbmFsAStnZXRQb3NpdGlvbk5vdGlvbmFsQW5kVW5yZWFsaXplZFBubEJ5VmFsdWVzBw1fcG9zaXRpb25TaXplFV9wb3NpdGlvbk9wZW5Ob3Rpb25hbBJfcXVvdGVBc3NldFJlc2VydmURX3F1b3RlQXNzZXRXZWlnaHQRX2Jhc2VBc3NldFJlc2VydmUQX2Jhc2VBc3NldFdlaWdodAdfb3B0aW9uAwkAAAIFDV9wb3NpdGlvblNpemUAAAkAAgECFUludmFsaWQgcG9zaXRpb24gc2l6ZQQHaXNTaG9ydAkAZgIAAAUNX3Bvc2l0aW9uU2l6ZQQQcG9zaXRpb25Ob3Rpb25hbAkBH2dldFBvc2l0aW9uQWRqdXN0ZWRPcGVuTm90aW9uYWwGBQ1fcG9zaXRpb25TaXplBQdfb3B0aW9uBRJfcXVvdGVBc3NldFJlc2VydmUFEV9xdW90ZUFzc2V0V2VpZ2h0BRFfYmFzZUFzc2V0UmVzZXJ2ZQUQX2Jhc2VBc3NldFdlaWdodAQNdW5yZWFsaXplZFBubAMFB2lzU2hvcnQJAGUCBRVfcG9zaXRpb25PcGVuTm90aW9uYWwFEHBvc2l0aW9uTm90aW9uYWwJAGUCBRBwb3NpdGlvbk5vdGlvbmFsBRVfcG9zaXRpb25PcGVuTm90aW9uYWwJAJQKAgUQcG9zaXRpb25Ob3Rpb25hbAUNdW5yZWFsaXplZFBubAEjZ2V0UG9zaXRpb25Ob3Rpb25hbEFuZFVucmVhbGl6ZWRQbmwCB190cmFkZXIHX29wdGlvbgQNJHQwMjg1NzYyODcwNAkBC2dldFBvc2l0aW9uAQUHX3RyYWRlcgQMcG9zaXRpb25TaXplCAUNJHQwMjg1NzYyODcwNAJfMQQOcG9zaXRpb25NYXJnaW4IBQ0kdDAyODU3NjI4NzA0Al8yBBRwb3NpdGlvbk9wZW5Ob3Rpb25hbAgFDSR0MDI4NTc2Mjg3MDQCXzMEEXBvc2l0aW9uTHN0VXBkQ1BGCAUNJHQwMjg1NzYyODcwNAJfNAkBK2dldFBvc2l0aW9uTm90aW9uYWxBbmRVbnJlYWxpemVkUG5sQnlWYWx1ZXMHBQxwb3NpdGlvblNpemUFFHBvc2l0aW9uT3Blbk5vdGlvbmFsCQEGcXRBc3RSAAkBBnF0QXN0VwAJAQZic0FzdFIACQEGYnNBc3RXAAUHX29wdGlvbgEPY2FsY01hcmdpblJhdGlvAw1fcmVtYWluTWFyZ2luCF9iYWREZWJ0EV9wb3NpdGlvbk5vdGlvbmFsCQEEZGl2ZAIJAGUCBQ1fcmVtYWluTWFyZ2luBQhfYmFkRGVidAURX3Bvc2l0aW9uTm90aW9uYWwBFmdldE1hcmdpblJhdGlvQnlPcHRpb24CB190cmFkZXIHX29wdGlvbgQNJHQwMjkyMTkyOTM2MAkBC2dldFBvc2l0aW9uAQUHX3RyYWRlcgQMcG9zaXRpb25TaXplCAUNJHQwMjkyMTkyOTM2MAJfMQQOcG9zaXRpb25NYXJnaW4IBQ0kdDAyOTIxOTI5MzYwAl8yBANwb24IBQ0kdDAyOTIxOTI5MzYwAl8zBBZwb3NpdGlvbkxhc3RVcGRhdGVkQ1BGCAUNJHQwMjkyMTkyOTM2MAJfNAQRcG9zaXRpb25UaW1lc3RhbXAIBQ0kdDAyOTIxOTI5MzYwAl81BA0kdDAyOTM2NjI5NDU5CQEjZ2V0UG9zaXRpb25Ob3Rpb25hbEFuZFVucmVhbGl6ZWRQbmwCBQdfdHJhZGVyBQdfb3B0aW9uBBBwb3NpdGlvbk5vdGlvbmFsCAUNJHQwMjkzNjYyOTQ1OQJfMQQNdW5yZWFsaXplZFBubAgFDSR0MDI5MzY2Mjk0NTkCXzIEDSR0MDI5NDY0Mjk2NzYJATBjYWxjUmVtYWluTWFyZ2luV2l0aEZ1bmRpbmdQYXltZW50QW5kUm9sbG92ZXJGZWUFBQxwb3NpdGlvblNpemUFDnBvc2l0aW9uTWFyZ2luBRZwb3NpdGlvbkxhc3RVcGRhdGVkQ1BGBRFwb3NpdGlvblRpbWVzdGFtcAUNdW5yZWFsaXplZFBubAQMcmVtYWluTWFyZ2luCAUNJHQwMjk0NjQyOTY3NgJfMQQHYmFkRGVidAgFDSR0MDI5NDY0Mjk2NzYCXzIJAQ9jYWxjTWFyZ2luUmF0aW8DBQxyZW1haW5NYXJnaW4FB2JhZERlYnQFEHBvc2l0aW9uTm90aW9uYWwBDmdldE1hcmdpblJhdGlvAQdfdHJhZGVyCQEWZ2V0TWFyZ2luUmF0aW9CeU9wdGlvbgIFB190cmFkZXIFD1BOTF9PUFRJT05fU1BPVAEbZ2V0UGFydGlhbExpcXVpZGF0aW9uQW1vdW50AgdfdHJhZGVyDV9wb3NpdGlvblNpemUEDG1heGltdW1SYXRpbwkBBHZtYXgCCQEXcGFydGlhbExpcXVpZGF0aW9uUmF0aW8ACQBlAgUMREVDSU1BTF9VTklUCQEEZGl2ZAIJAQ5nZXRNYXJnaW5SYXRpbwEFB190cmFkZXIJARZtYWludGVuYW5jZU1hcmdpblJhdGlvAAQYbWF4RXhjaGFuZ2VkUG9zaXRpb25TaXplCQEEbXVsZAIJAQNhYnMBBQ1fcG9zaXRpb25TaXplBQxtYXhpbXVtUmF0aW8ECnN3YXBSZXN1bHQJAQpzd2FwT3V0cHV0AwkAZgIFDV9wb3NpdGlvblNpemUAAAUYbWF4RXhjaGFuZ2VkUG9zaXRpb25TaXplBwQcbWF4RXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAgFCnN3YXBSZXN1bHQCXzEEC3ByaWNlSW1wYWN0CAUKc3dhcFJlc3VsdAJfNwMJAGYCCQEObWF4UHJpY2VJbXBhY3QABQtwcmljZUltcGFjdAUYbWF4RXhjaGFuZ2VkUG9zaXRpb25TaXplCQEEbXVsZAIJAQNhYnMBBQ1fcG9zaXRpb25TaXplCQEXcGFydGlhbExpcXVpZGF0aW9uUmF0aW8AARVpbnRlcm5hbENsb3NlUG9zaXRpb24HB190cmFkZXIFX3NpemUEX2ZlZRRfbWluUXVvdGVBc3NldEFtb3VudAxfYWRkVG9NYXJnaW4UX2NoZWNrTWF4UHJpY2VJbXBhY3QKX2xpcXVpZGF0ZQQNJHQwMzA3NDMzMDg5OQkBC2dldFBvc2l0aW9uAQUHX3RyYWRlcgQPb2xkUG9zaXRpb25TaXplCAUNJHQwMzA3NDMzMDg5OQJfMQQRb2xkUG9zaXRpb25NYXJnaW4IBQ0kdDAzMDc0MzMwODk5Al8yBBdvbGRQb3NpdGlvbk9wZW5Ob3Rpb25hbAgFDSR0MDMwNzQzMzA4OTkCXzMEFG9sZFBvc2l0aW9uTHN0VXBkQ1BGCAUNJHQwMzA3NDMzMDg5OQJfNAQUb2xkUG9zaXRpb25UaW1lc3RhbXAIBQ0kdDAzMDc0MzMwODk5Al81BA5pc0xvbmdQb3NpdGlvbgkAZgIFD29sZFBvc2l0aW9uU2l6ZQAABBJhYnNPbGRQb3NpdGlvblNpemUJAQNhYnMBBQ9vbGRQb3NpdGlvblNpemUDAwkAZwIFEmFic09sZFBvc2l0aW9uU2l6ZQUFX3NpemUJAGYCBQVfc2l6ZQAABwQOaXNQYXJ0aWFsQ2xvc2UJAGYCBRJhYnNPbGRQb3NpdGlvblNpemUFBV9zaXplBA0kdDAzMTE5MTMxNjQyCQEKc3dhcE91dHB1dAMJAGYCBQ9vbGRQb3NpdGlvblNpemUAAAUFX3NpemUFFF9jaGVja01heFByaWNlSW1wYWN0BBlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50CAUNJHQwMzExOTEzMTY0MgJfMQQWcXVvdGVBc3NldFJlc2VydmVBZnRlcggFDSR0MDMxMTkxMzE2NDICXzIEFWJhc2VBc3NldFJlc2VydmVBZnRlcggFDSR0MDMxMTkxMzE2NDICXzMEFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIIBQ0kdDAzMTE5MTMxNjQyAl80BBVleGNoYW5nZWRQb3NpdGlvblNpemUDCQBmAgUPb2xkUG9zaXRpb25TaXplAAAJAQEtAQUFX3NpemUFBV9zaXplBA0kdDAzMTg1NzMyMDY0CQEjZ2V0UG9zaXRpb25Ob3Rpb25hbEFuZFVucmVhbGl6ZWRQbmwCBQdfdHJhZGVyBQ9QTkxfT1BUSU9OX1NQT1QEE29sZFBvc2l0aW9uTm90aW9uYWwIBQ0kdDAzMTg1NzMyMDY0Al8xBA11bnJlYWxpemVkUG5sCAUNJHQwMzE4NTczMjA2NAJfMgQNcmVhbGl6ZWRSYXRpbwkBBGRpdmQCCQEDYWJzAQUVZXhjaGFuZ2VkUG9zaXRpb25TaXplBRJhYnNPbGRQb3NpdGlvblNpemUEC3JlYWxpemVkUG5sCQEEbXVsZAIFDXVucmVhbGl6ZWRQbmwFDXJlYWxpemVkUmF0aW8EDSR0MDMyNDA1MzI2NTEJATBjYWxjUmVtYWluTWFyZ2luV2l0aEZ1bmRpbmdQYXltZW50QW5kUm9sbG92ZXJGZWUFBQ9vbGRQb3NpdGlvblNpemUFEW9sZFBvc2l0aW9uTWFyZ2luBRRvbGRQb3NpdGlvbkxzdFVwZENQRgUUb2xkUG9zaXRpb25UaW1lc3RhbXAFDXVucmVhbGl6ZWRQbmwEEnJlbWFpbk1hcmdpbkJlZm9yZQgFDSR0MDMyNDA1MzI2NTECXzEEAngxCAUNJHQwMzI0MDUzMjY1MQJfMgQCeDIIBQ0kdDAzMjQwNTMyNjUxAl8zBAtyb2xsb3ZlckZlZQgFDSR0MDMyNDA1MzI2NTECXzQED3Bvc2l0aW9uQmFkRGVidAgJATBjYWxjUmVtYWluTWFyZ2luV2l0aEZ1bmRpbmdQYXltZW50QW5kUm9sbG92ZXJGZWUFBQ9vbGRQb3NpdGlvblNpemUFEW9sZFBvc2l0aW9uTWFyZ2luBRRvbGRQb3NpdGlvbkxzdFVwZENQRgUUb2xkUG9zaXRpb25UaW1lc3RhbXAFC3JlYWxpemVkUG5sAl8yBBByZWFsaXplZENsb3NlRmVlCQEEbXVsZAIJAQRtdWxkAgUTb2xkUG9zaXRpb25Ob3Rpb25hbAUNcmVhbGl6ZWRSYXRpbwUEX2ZlZQQSdW5yZWFsaXplZFBubEFmdGVyCQBlAgUNdW5yZWFsaXplZFBubAULcmVhbGl6ZWRQbmwEEnJlbWFpbk9wZW5Ob3Rpb25hbAMJAGYCBQ9vbGRQb3NpdGlvblNpemUAAAkAZQIJAGUCBRNvbGRQb3NpdGlvbk5vdGlvbmFsBRlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50BRJ1bnJlYWxpemVkUG5sQWZ0ZXIJAGUCCQBkAgUSdW5yZWFsaXplZFBubEFmdGVyBRNvbGRQb3NpdGlvbk5vdGlvbmFsBRlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50BA9uZXdQb3NpdGlvblNpemUJAGQCBQ9vbGRQb3NpdGlvblNpemUFFWV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQQNJHQwMzQwNTczNDQ0MwMJAAACBQ9uZXdQb3NpdGlvblNpemUAAAkAlAoCAAAAAAkAlAoCCQEDYWJzAQUScmVtYWluT3Blbk5vdGlvbmFsCQEfbGF0ZXN0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgEFD25ld1Bvc2l0aW9uU2l6ZQQXbmV3UG9zaXRpb25PcGVuTm90aW9uYWwIBQ0kdDAzNDA1NzM0NDQzAl8xBBRuZXdQb3NpdGlvbkxzdFVwZENQRggFDSR0MDM0MDU3MzQ0NDMCXzIEEW9wZW5Ob3Rpb25hbERlbHRhCQBlAgUXb2xkUG9zaXRpb25PcGVuTm90aW9uYWwFF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsBAttYXJnaW5SYXRpbwkBFmdldE1hcmdpblJhdGlvQnlPcHRpb24CBQdfdHJhZGVyBQ9QTkxfT1BUSU9OX1NQT1QEHm5ld1Bvc2l0aW9uTWFyZ2luV2l0aFNhbWVSYXRpbwMJAGYCBQ9vbGRQb3NpdGlvblNpemUAAAkAZQIJAQRtdWxkAgkAZAIFF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsBRJ1bnJlYWxpemVkUG5sQWZ0ZXIFC21hcmdpblJhdGlvBRJ1bnJlYWxpemVkUG5sQWZ0ZXIJAGUCCQEEbXVsZAIJAGUCBRduZXdQb3NpdGlvbk9wZW5Ob3Rpb25hbAUSdW5yZWFsaXplZFBubEFmdGVyBQttYXJnaW5SYXRpbwUSdW5yZWFsaXplZFBubEFmdGVyBBFtYXJnaW5Ub1RyYWRlclJhdwkAZQIJAGUCBRJyZW1haW5NYXJnaW5CZWZvcmUJAGQCBR5uZXdQb3NpdGlvbk1hcmdpbldpdGhTYW1lUmF0aW8FEnVucmVhbGl6ZWRQbmxBZnRlcgUQcmVhbGl6ZWRDbG9zZUZlZQQObWFyZ2luVG9UcmFkZXIDCQBmAgAABRFtYXJnaW5Ub1RyYWRlclJhdwMFCl9saXF1aWRhdGUAAAkAAgECN0ludmFsaWQgaW50ZXJuYWxDbG9zZVBvc2l0aW9uIHBhcmFtczogdW5hYmxlIHRvIHBheSBmZWUFEW1hcmdpblRvVHJhZGVyUmF3BBFuZXdQb3NpdGlvbk1hcmdpbgMFDF9hZGRUb01hcmdpbgkAZAIFHm5ld1Bvc2l0aW9uTWFyZ2luV2l0aFNhbWVSYXRpbwUObWFyZ2luVG9UcmFkZXIFHm5ld1Bvc2l0aW9uTWFyZ2luV2l0aFNhbWVSYXRpbwMDCQECIT0CBRRfbWluUXVvdGVBc3NldEFtb3VudAAACQBmAgUUX21pblF1b3RlQXNzZXRBbW91bnQFGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQHCQACAQkArAICCQCsAgIJAKwCAgINTGltaXQgZXJyb3I6IAkApAMBBRlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50AgMgPCAJAKQDAQUUX21pblF1b3RlQXNzZXRBbW91bnQJAKMKEQUPbmV3UG9zaXRpb25TaXplBRFuZXdQb3NpdGlvbk1hcmdpbgUXbmV3UG9zaXRpb25PcGVuTm90aW9uYWwFFG5ld1Bvc2l0aW9uTHN0VXBkQ1BGBQ9wb3NpdGlvbkJhZERlYnQFC3JlYWxpemVkUG5sAwMFDF9hZGRUb01hcmdpbgUOaXNQYXJ0aWFsQ2xvc2UHAAAFDm1hcmdpblRvVHJhZGVyBRZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyBRViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIFFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIJAGUCCQEUb3BlbkludGVyZXN0Tm90aW9uYWwABRFvcGVuTm90aW9uYWxEZWx0YQkAZQIJARV0b3RhbExvbmdQb3NpdGlvblNpemUAAwUOaXNMb25nUG9zaXRpb24JAQNhYnMBBRVleGNoYW5nZWRQb3NpdGlvblNpemUAAAkAZQIJARZ0b3RhbFNob3J0UG9zaXRpb25TaXplAAMJAQEhAQUOaXNMb25nUG9zaXRpb24JAQNhYnMBBRVleGNoYW5nZWRQb3NpdGlvblNpemUAAAkAZQIJARBvcGVuSW50ZXJlc3RMb25nAAMFDmlzTG9uZ1Bvc2l0aW9uBRFvcGVuTm90aW9uYWxEZWx0YQAACQBlAgkBEW9wZW5JbnRlcmVzdFNob3J0AAMJAQEhAQUOaXNMb25nUG9zaXRpb24FEW9wZW5Ob3Rpb25hbERlbHRhAAAJAGQCBRByZWFsaXplZENsb3NlRmVlBQtyb2xsb3ZlckZlZQUZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAkAAgEJAKwCAgkArAICCQCsAgICPUludmFsaWQgaW50ZXJuYWxDbG9zZVBvc2l0aW9uIHBhcmFtczogaW52YWxpZCBwb3NpdGlvbiBzaXplOiAJAKQDAQUFX3NpemUCBiBtYXg6IAkApAMBBRJhYnNPbGRQb3NpdGlvblNpemUBEGdldFR3YXBTcG90UHJpY2UABAhtaW51dGVJZAkAaQIJAGkCCQENbGFzdFRpbWVzdGFtcAAA6AcAPAQNc3RhcnRNaW51dGVJZAkAZQIFCG1pbnV0ZUlkBQ1UV0FQX0lOVEVSVkFMBAdsaXN0U3RyCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMFDWtfbGFzdERhdGFTdHICAAQEbGlzdAkAtQkCBQdsaXN0U3RyAgEsCgEIZmlsdGVyRm4CC2FjY3VtdWxhdG9yBG5leHQDCQBnAgUNc3RhcnRNaW51dGVJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQC2CQEFBG5leHQJAKwCAgIfZ2V0VHdhcFNwb3RQcmljZTogaW52YWxpZCBpbnQ6IAUHbGlzdFN0cgkAzQgCBQthY2N1bXVsYXRvcgkBDXBhcnNlSW50VmFsdWUBBQRuZXh0BQthY2N1bXVsYXRvcgQFbGlzdEYKAAIkbAUEbGlzdAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEIZmlsdGVyRm4CBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDIwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAQIbWF4SW5kZXgDCQBmAgkAkAMBBQVsaXN0RgAACQCWAwEFBWxpc3RGCQETdmFsdWVPckVycm9yTWVzc2FnZQIJALYJAQkAkQMCBQRsaXN0AAAJAKwCAgIfZ2V0VHdhcFNwb3RQcmljZTogaW52YWxpZCBpbnQ6IAUHbGlzdFN0cgQMbGFzdE1pbnV0ZUlkCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFDmtfbGFzdE1pbnV0ZUlkAAAEFmVuZExhc3RDdW11bGF0aXZlUHJpY2UJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICCQCsAgIFHWtfdHdhcERhdGFMYXN0Q3VtdWxhdGl2ZVByaWNlAgFfCQCkAwEFDGxhc3RNaW51dGVJZAAABAxlbmRMYXN0UHJpY2UJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICCQCsAgIFE2tfdHdhcERhdGFMYXN0UHJpY2UCAV8JAKQDAQUMbGFzdE1pbnV0ZUlkAAAEEm5vd0N1bXVsYXRpdmVQcmljZQkAZAIFFmVuZExhc3RDdW11bGF0aXZlUHJpY2UJAGgCCQBlAgUIbWludXRlSWQFDGxhc3RNaW51dGVJZAUMZW5kTGFzdFByaWNlBBhzdGFydExhc3RDdW11bGF0aXZlUHJpY2UJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICCQCsAgIFHWtfdHdhcERhdGFMYXN0Q3VtdWxhdGl2ZVByaWNlAgFfCQCkAwEFCG1heEluZGV4AAAEDnN0YXJ0TGFzdFByaWNlCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgkArAICBRNrX3R3YXBEYXRhTGFzdFByaWNlAgFfCQCkAwEFCG1heEluZGV4AAAEFHN0YXJ0Q3VtdWxhdGl2ZVByaWNlCQBkAgUYc3RhcnRMYXN0Q3VtdWxhdGl2ZVByaWNlCQBoAgkAZQIFDXN0YXJ0TWludXRlSWQFCG1heEluZGV4BQ5zdGFydExhc3RQcmljZQkAaQIJAGUCBRJub3dDdW11bGF0aXZlUHJpY2UFFHN0YXJ0Q3VtdWxhdGl2ZVByaWNlBQ1UV0FQX0lOVEVSVkFMARNnZXRUZXJtaW5hbEFtbVN0YXRlAAQNX3Bvc2l0aW9uU2l6ZQkBEXRvdGFsUG9zaXRpb25TaXplAAMJAAACBQ1fcG9zaXRpb25TaXplAAAJAJQKAgkBBnF0QXN0UgAJAQZic0FzdFIABAlkaXJlY3Rpb24JAGYCBQ1fcG9zaXRpb25TaXplAAAEDSR0MDM5MTgwMzkzNTkJAQpzd2FwT3V0cHV0AwUJZGlyZWN0aW9uCQEDYWJzAQUNX3Bvc2l0aW9uU2l6ZQcEFWN1cnJlbnROZXRNYXJrZXRWYWx1ZQgFDSR0MDM5MTgwMzkzNTkCXzEEGXRlcm1pbmFsUXVvdGVBc3NldFJlc2VydmUIBQ0kdDAzOTE4MDM5MzU5Al8yBBh0ZXJtaW5hbEJhc2VBc3NldFJlc2VydmUIBQ0kdDAzOTE4MDM5MzU5Al8zCQCUCgIFGXRlcm1pbmFsUXVvdGVBc3NldFJlc2VydmUFGHRlcm1pbmFsQmFzZUFzc2V0UmVzZXJ2ZQETZ2V0UXVvdGVBc3NldFdlaWdodAQQYmFzZUFzc2V0UmVzZXJ2ZRF0b3RhbFBvc2l0aW9uU2l6ZRFxdW90ZUFzc2V0UmVzZXJ2ZQt0YXJnZXRQcmljZQQBYgkAtgIBBRBiYXNlQXNzZXRSZXNlcnZlBAJzegkAtgIBBRF0b3RhbFBvc2l0aW9uU2l6ZQQBcQkAtgIBBRFxdW90ZUFzc2V0UmVzZXJ2ZQQBcAkAtgIBBQt0YXJnZXRQcmljZQQBawkBBWJtdWxkAgUBcQUBYgQEbmV3QgkAtwICBQFiBQJzegQEbmV3UQkBBWJkaXZkAgUBawUEbmV3QgQBegkBBWJkaXZkAgUEbmV3UQUEbmV3QgQGcmVzdWx0CQEFYmRpdmQCBQFwBQF6CQCgAwEFBnJlc3VsdAEUZ2V0U3luY1Rlcm1pbmFsUHJpY2UDDl90ZXJtaW5hbFByaWNlB19xdEFzdFIHX2JzQXN0UgQNX3Bvc2l0aW9uU2l6ZQkBEXRvdGFsUG9zaXRpb25TaXplAAMJAAACBQ1fcG9zaXRpb25TaXplAAAECW5ld1F0QXN0VwkBBGRpdmQCCQEEbXVsZAIFDl90ZXJtaW5hbFByaWNlBQdfYnNBc3RSBQdfcXRBc3RSCQCVCgMFCW5ld1F0QXN0VwUMREVDSU1BTF9VTklUAAAECWRpcmVjdGlvbgkAZgIFDV9wb3NpdGlvblNpemUAAAQVY3VycmVudE5ldE1hcmtldFZhbHVlCAkBCnN3YXBPdXRwdXQDBQlkaXJlY3Rpb24JAQNhYnMBBQ1fcG9zaXRpb25TaXplBwJfMQQJbmV3UXRBc3RXCQETZ2V0UXVvdGVBc3NldFdlaWdodAQFB19ic0FzdFIFDV9wb3NpdGlvblNpemUFB19xdEFzdFIFDl90ZXJtaW5hbFByaWNlBAluZXdCc0FzdFcFDERFQ0lNQUxfVU5JVAQNbWFyZ2luVG9WYXVsdAgJAStnZXRQb3NpdGlvbk5vdGlvbmFsQW5kVW5yZWFsaXplZFBubEJ5VmFsdWVzBwUNX3Bvc2l0aW9uU2l6ZQUVY3VycmVudE5ldE1hcmtldFZhbHVlBQdfcXRBc3RSBQluZXdRdEFzdFcFB19ic0FzdFIFCW5ld0JzQXN0VwUPUE5MX09QVElPTl9TUE9UAl8yCQCVCgMFCW5ld1F0QXN0VwUJbmV3QnNBc3RXBQ1tYXJnaW5Ub1ZhdWx0AQpnZXRGdW5kaW5nAAQPdW5kZXJseWluZ1ByaWNlCQEOZ2V0T3JhY2xlUHJpY2UABA1zcG90VHdhcFByaWNlCQEQZ2V0VHdhcFNwb3RQcmljZQAEB3ByZW1pdW0JAGUCBQ1zcG90VHdhcFByaWNlBQ91bmRlcmx5aW5nUHJpY2UDAwMJAAACCQEWdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQAAAAYJAAACCQEVdG90YWxMb25nUG9zaXRpb25TaXplAAAABgkBDmlzTWFya2V0Q2xvc2VkAAkAlAoCAAAAAAMJAGYCAAAFB3ByZW1pdW0EFHNob3J0UHJlbWl1bUZyYWN0aW9uCQEEZGl2ZAIJAQRtdWxkAgUHcHJlbWl1bQkBFGZ1bmRpbmdQZXJpb2REZWNpbWFsAAUHT05FX0RBWQQTbG9uZ1ByZW1pdW1GcmFjdGlvbgkBBGRpdmQCCQEEbXVsZAIFFHNob3J0UHJlbWl1bUZyYWN0aW9uCQEWdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQAJARV0b3RhbExvbmdQb3NpdGlvblNpemUACQCUCgIFFHNob3J0UHJlbWl1bUZyYWN0aW9uBRNsb25nUHJlbWl1bUZyYWN0aW9uBBNsb25nUHJlbWl1bUZyYWN0aW9uCQEEZGl2ZAIJAQRtdWxkAgUHcHJlbWl1bQkBFGZ1bmRpbmdQZXJpb2REZWNpbWFsAAUHT05FX0RBWQQUc2hvcnRQcmVtaXVtRnJhY3Rpb24JAQRkaXZkAgkBBG11bGQCBRNsb25nUHJlbWl1bUZyYWN0aW9uCQEVdG90YWxMb25nUG9zaXRpb25TaXplAAkBFnRvdGFsU2hvcnRQb3NpdGlvblNpemUACQCUCgIFFHNob3J0UHJlbWl1bUZyYWN0aW9uBRNsb25nUHJlbWl1bUZyYWN0aW9uAQ5nZXRBZGp1c3RlZEZlZQILX2FydGlmYWN0SWQQX2Jhc2VGZWVEaXNjb3VudAQKYmFzZUZlZVJhdwkBA2ZlZQAEB2Jhc2VGZWUJAQRtdWxkAgUKYmFzZUZlZVJhdwUQX2Jhc2VGZWVEaXNjb3VudAQNJHQwNDIyMjA0MjcxNQMJAQIhPQIFC19hcnRpZmFjdElkAgAEDGFydGlmYWN0S2luZAkBBHN0ckECCQERbmZ0TWFuYWdlckFkZHJlc3MACQEOdG9Db21wb3NpdGVLZXkCBQxrX3Rva2VuX3R5cGUFC19hcnRpZmFjdElkAwkAAAIFDGFydGlmYWN0S2luZAUYRkVFX1JFRFVDVElPTl9UT0tFTl9UWVBFBAlyZWR1Y3Rpb24JAQRpbnRBAgkBEW5mdE1hbmFnZXJBZGRyZXNzAAkBDnRvQ29tcG9zaXRlS2V5AgUNa190b2tlbl9wYXJhbQULX2FydGlmYWN0SWQEC2FkanVzdGVkRmVlCQEEbXVsZAIFB2Jhc2VGZWUFCXJlZHVjdGlvbgkAlAoCBQthZGp1c3RlZEZlZQYJAAIBAhlJbnZhbGlkIGF0dGFjaGVkIGFydGlmYWN0CQCUCgIFB2Jhc2VGZWUHBAthZGp1c3RlZEZlZQgFDSR0MDQyMjIwNDI3MTUCXzEEDGJ1cm5BcnRpZmFjdAgFDSR0MDQyMjIwNDI3MTUCXzIJAJQKAgULYWRqdXN0ZWRGZWUFDGJ1cm5BcnRpZmFjdAEXaXNTYW1lQXNzZXRPck5vUG9zaXRpb24CB190cmFkZXIIX2Fzc2V0SWQED29sZFBvc2l0aW9uU2l6ZQgJAQtnZXRQb3NpdGlvbgEFB190cmFkZXICXzEDCQAAAgUPb2xkUG9zaXRpb25TaXplAAAGCQAAAgkBEGdldFBvc2l0aW9uQXNzZXQBBQdfdHJhZGVyBQhfYXNzZXRJZAELaXNTYW1lQXNzZXQCB190cmFkZXIIX2Fzc2V0SWQJAAACCQEQZ2V0UG9zaXRpb25Bc3NldAEFB190cmFkZXIFCF9hc3NldElkARhnZXRGb3JUcmFkZXJXaXRoQXJ0aWZhY3QCB190cmFkZXILX2FydGlmYWN0SWQEEGRvR2V0RmVlRGlzY291bnQJAPwHBAkBDG1pbmVyQWRkcmVzcwACEmNvbXB1dGVGZWVEaXNjb3VudAkAzAgCBQdfdHJhZGVyBQNuaWwFA25pbAMJAAACBRBkb0dldEZlZURpc2NvdW50BRBkb0dldEZlZURpc2NvdW50BAtmZWVEaXNjb3VudAQHJG1hdGNoMAUQZG9HZXRGZWVEaXNjb3VudAMJAAECBQckbWF0Y2gwAgNJbnQEAXgFByRtYXRjaDAFAXgJAAIBAiFJbnZhbGlkIGNvbXB1dGVGZWVEaXNjb3VudCByZXN1bHQEDSR0MDQzMzk1NDM0NjkJAQ5nZXRBZGp1c3RlZEZlZQIFC19hcnRpZmFjdElkBQtmZWVEaXNjb3VudAQLYWRqdXN0ZWRGZWUIBQ0kdDA0MzM5NTQzNDY5Al8xBAxidXJuQXJ0aWZhY3QIBQ0kdDA0MzM5NTQzNDY5Al8yCQCUCgIFC2FkanVzdGVkRmVlBQxidXJuQXJ0aWZhY3QJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BDWdldEFydGlmYWN0SWQBAWkECmFydGlmYWN0SWQDCQBmAgkAkAMBCAUBaQhwYXltZW50cwABCQDYBAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAggJAJEDAggFAWkIcGF5bWVudHMAAQdhc3NldElkAhJJbnZhbGlkIGFydGlmYWN0SWQCAAUKYXJ0aWZhY3RJZAENZGlzdHJpYnV0ZUZlZQEKX2ZlZUFtb3VudAQMZmVlVG9TdGFrZXJzCQEEbXVsZAIFCl9mZWVBbW91bnQJARNmZWVUb1N0YWtlcnNQZXJjZW50AAQKZmVlVG9WYXVsdAkAZQIFCl9mZWVBbW91bnQFDGZlZVRvU3Rha2VycwkAlAoCBQxmZWVUb1N0YWtlcnMFCmZlZVRvVmF1bHQBDnVwZGF0ZVNldHRpbmdzDRBfaW5pdE1hcmdpblJhdGlvBF9tbXIUX2xpcXVpZGF0aW9uRmVlUmF0aW8OX2Z1bmRpbmdQZXJpb2QEX2ZlZQxfc3ByZWFkTGltaXQPX21heFByaWNlSW1wYWN0GF9wYXJ0aWFsTGlxdWlkYXRpb25SYXRpbw9fbWF4UHJpY2VTcHJlYWQQX21heE9wZW5Ob3Rpb25hbBRfZmVlVG9TdGFrZXJzUGVyY2VudA9fbWF4T3JhY2xlRGVsYXkMX3JvbGxvdmVyRmVlCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRFrX2luaXRNYXJnaW5SYXRpbwUQX2luaXRNYXJnaW5SYXRpbwkAzAgCCQEMSW50ZWdlckVudHJ5AgUYa19tYWludGVuYW5jZU1hcmdpblJhdGlvBQRfbW1yCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRVrX2xpcXVpZGF0aW9uRmVlUmF0aW8FFF9saXF1aWRhdGlvbkZlZVJhdGlvCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ9rX2Z1bmRpbmdQZXJpb2QFDl9mdW5kaW5nUGVyaW9kCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQVrX2ZlZQUEX2ZlZQkAzAgCCQEMSW50ZWdlckVudHJ5AgUNa19zcHJlYWRMaW1pdAUMX3NwcmVhZExpbWl0CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRBrX21heFByaWNlSW1wYWN0BQ9fbWF4UHJpY2VJbXBhY3QJAMwIAgkBDEludGVnZXJFbnRyeQIFGWtfcGFydGlhbExpcXVpZGF0aW9uUmF0aW8FGF9wYXJ0aWFsTGlxdWlkYXRpb25SYXRpbwkAzAgCCQEMSW50ZWdlckVudHJ5AgUQa19tYXhQcmljZVNwcmVhZAUPX21heFByaWNlU3ByZWFkCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRFrX21heE9wZW5Ob3Rpb25hbAUQX21heE9wZW5Ob3Rpb25hbAkAzAgCCQEMSW50ZWdlckVudHJ5AgUVa19mZWVUb1N0YWtlcnNQZXJjZW50BRRfZmVlVG9TdGFrZXJzUGVyY2VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgUQa19tYXhPcmFjbGVEZWxheQUUX2ZlZVRvU3Rha2Vyc1BlcmNlbnQJAMwIAgkBDEludGVnZXJFbnRyeQIFDWtfcm9sbG92ZXJGZWUFDF9yb2xsb3ZlckZlZQUDbmlsAQ11cGRhdGVGdW5kaW5nBRFfbmV4dEZ1bmRpbmdCbG9jayRfbGF0ZXN0TG9uZ0N1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24lX2xhdGVzdFNob3J0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbhBfbG9uZ0Z1bmRpbmdSYXRlEV9zaG9ydEZ1bmRpbmdSYXRlCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRJrX25leHRGdW5kaW5nQmxvY2sFEV9uZXh0RnVuZGluZ0Jsb2NrCQDMCAIJAQxJbnRlZ2VyRW50cnkCBSVrX2xhdGVzdExvbmdDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uBSRfbGF0ZXN0TG9uZ0N1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24JAMwIAgkBDEludGVnZXJFbnRyeQIFJmtfbGF0ZXN0U2hvcnRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uBSVfbGF0ZXN0U2hvcnRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRFrX2xvbmdGdW5kaW5nUmF0ZQUQX2xvbmdGdW5kaW5nUmF0ZQkAzAgCCQEMSW50ZWdlckVudHJ5AgUSa19zaG9ydEZ1bmRpbmdSYXRlBRFfc2hvcnRGdW5kaW5nUmF0ZQUDbmlsAR9pbmNyZW1lbnRQb3NpdGlvblNlcXVlbmNlTnVtYmVyAg5faXNOZXdQb3NpdGlvbghfYWRkcmVzcwMFDl9pc05ld1Bvc2l0aW9uBA9jdXJyZW50U2VxdWVuY2UJAQxsYXN0U2VxdWVuY2UACQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBRJrX3Bvc2l0aW9uU2VxdWVuY2UFCF9hZGRyZXNzCQBkAgUPY3VycmVudFNlcXVlbmNlAAEJAMwIAgkBDEludGVnZXJFbnRyeQIFCmtfc2VxdWVuY2UJAGQCBQ9jdXJyZW50U2VxdWVuY2UAAQUDbmlsBQNuaWwBEXVwZGF0ZVBvc2l0aW9uRmVlAw5faXNOZXdQb3NpdGlvbghfYWRkcmVzcwRfZmVlAwUOX2lzTmV3UG9zaXRpb24JAMwIAgkBDEludGVnZXJFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFDWtfcG9zaXRpb25GZWUFCF9hZGRyZXNzBQRfZmVlBQNuaWwFA25pbAEOdXBkYXRlUG9zaXRpb24GCF9hZGRyZXNzBV9zaXplB19tYXJnaW4NX29wZW5Ob3Rpb25hbCBfbGF0ZXN0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbhBfbGF0ZXN0VGltZXN0YW1wCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBQ5rX3Bvc2l0aW9uU2l6ZQUIX2FkZHJlc3MFBV9zaXplCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBRBrX3Bvc2l0aW9uTWFyZ2luBQhfYWRkcmVzcwUHX21hcmdpbgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUWa19wb3NpdGlvbk9wZW5Ob3Rpb25hbAUIX2FkZHJlc3MFDV9vcGVuTm90aW9uYWwJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFLmtfcG9zaXRpb25MYXN0VXBkYXRlZEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24FCF9hZGRyZXNzBSBfbGF0ZXN0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUea19wb3NpdGlvbkxhc3RVcGRhdGVkVGltZXN0YW1wBQhfYWRkcmVzcwUQX2xhdGVzdFRpbWVzdGFtcAUDbmlsAQphcHBlbmRUd2FwAQZfcHJpY2UECG1pbnV0ZUlkCQBpAgkAaQIJAQ1sYXN0VGltZXN0YW1wAADoBwA8BBBwcmV2aW91c01pbnV0ZUlkCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFDmtfbGFzdE1pbnV0ZUlkAAADCQBmAgUQcHJldmlvdXNNaW51dGVJZAUIbWludXRlSWQJAAIBAhFUV0FQIG91dC1vZi1vcmRlcgQMbGFzdE1pbnV0ZUlkAwkAAAIFEHByZXZpb3VzTWludXRlSWQAAAUIbWludXRlSWQFEHByZXZpb3VzTWludXRlSWQDCQBmAgUIbWludXRlSWQFEHByZXZpb3VzTWludXRlSWQEE3ByZXZDdW11bGF0aXZlUHJpY2UJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICCQCsAgIFHWtfdHdhcERhdGFMYXN0Q3VtdWxhdGl2ZVByaWNlAgFfCQCkAwEFEHByZXZpb3VzTWludXRlSWQAAAQJcHJldlByaWNlCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgkArAICBRNrX3R3YXBEYXRhTGFzdFByaWNlAgFfCQCkAwEFEHByZXZpb3VzTWludXRlSWQFBl9wcmljZQQTbGFzdEN1bXVsYXRpdmVQcmljZQkAZAIFE3ByZXZDdW11bGF0aXZlUHJpY2UJAGgCCQBlAgUIbWludXRlSWQFDGxhc3RNaW51dGVJZAUJcHJldlByaWNlBARsaXN0CQELcHVzaFRvUXVldWUDCQEJc3RyVG9MaXN0AQkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzBQ1rX2xhc3REYXRhU3RyAgAFDVRXQVBfSU5URVJWQUwJAKQDAQUIbWludXRlSWQJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFHWtfdHdhcERhdGFMYXN0Q3VtdWxhdGl2ZVByaWNlCQCkAwEFCG1pbnV0ZUlkBRNsYXN0Q3VtdWxhdGl2ZVByaWNlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBRNrX3R3YXBEYXRhTGFzdFByaWNlCQCkAwEFCG1pbnV0ZUlkBQZfcHJpY2UJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFGmtfdHdhcERhdGFQcmV2aW91c01pbnV0ZUlkCQCkAwEFCG1pbnV0ZUlkBRBwcmV2aW91c01pbnV0ZUlkCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ5rX2xhc3RNaW51dGVJZAUIbWludXRlSWQJAMwIAgkBC1N0cmluZ0VudHJ5AgUNa19sYXN0RGF0YVN0cgkBCWxpc3RUb1N0cgEFBGxpc3QFA25pbAQYdHdhcERhdGFQcmV2aW91c01pbnV0ZUlkCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAQ50b0NvbXBvc2l0ZUtleQIFGmtfdHdhcERhdGFQcmV2aW91c01pbnV0ZUlkCQCkAwEFCG1pbnV0ZUlkAAAEE3ByZXZDdW11bGF0aXZlUHJpY2UJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkBDnRvQ29tcG9zaXRlS2V5AgUda190d2FwRGF0YUxhc3RDdW11bGF0aXZlUHJpY2UJAKQDAQUYdHdhcERhdGFQcmV2aW91c01pbnV0ZUlkAAAECXByZXZQcmljZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQEOdG9Db21wb3NpdGVLZXkCBRNrX3R3YXBEYXRhTGFzdFByaWNlCQCkAwEFGHR3YXBEYXRhUHJldmlvdXNNaW51dGVJZAUGX3ByaWNlBBNsYXN0Q3VtdWxhdGl2ZVByaWNlCQBkAgUTcHJldkN1bXVsYXRpdmVQcmljZQkAaAIJAGUCBQhtaW51dGVJZAUYdHdhcERhdGFQcmV2aW91c01pbnV0ZUlkBQlwcmV2UHJpY2UJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFHWtfdHdhcERhdGFMYXN0Q3VtdWxhdGl2ZVByaWNlCQCkAwEFCG1pbnV0ZUlkBRNsYXN0Q3VtdWxhdGl2ZVByaWNlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBRNrX3R3YXBEYXRhTGFzdFByaWNlCQCkAwEFCG1pbnV0ZUlkBQZfcHJpY2UFA25pbAERdXBkYXRlQW1tUmVzZXJ2ZXMCB19xdEFzdFIHX2JzQXN0UgkAzAgCCQEMSW50ZWdlckVudHJ5AgUTa19xdW90ZUFzc2V0UmVzZXJ2ZQUHX3F0QXN0UgkAzAgCCQEMSW50ZWdlckVudHJ5AgUSa19iYXNlQXNzZXRSZXNlcnZlBQdfYnNBc3RSBQNuaWwBEHVwZGF0ZUFtbVdlaWdodHMCB19xdEFzdFcHX2JzQXN0VwkAzAgCCQEMSW50ZWdlckVudHJ5AgUSa19xdW90ZUFzc2V0V2VpZ2h0BQdfcXRBc3RXCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRFrX2Jhc2VBc3NldFdlaWdodAUHX2JzQXN0VwUDbmlsAQl1cGRhdGVBbW0IB19xdEFzdFIHX2JzQXN0UhdfdG90YWxQb3NpdGlvblNpemVBZnRlchVfb3BlbkludGVyZXN0Tm90aW9uYWwWX3RvdGFsTG9uZ1Bvc2l0aW9uU2l6ZRdfdG90YWxTaG9ydFBvc2l0aW9uU2l6ZRZfdG90YWxMb25nT3Blbk5vdGlvbmFsF190b3RhbFNob3J0T3Blbk5vdGlvbmFsBAdfcXRBc3RXCQEGcXRBc3RXAAQHX2JzQXN0VwkBBmJzQXN0VwADCQECIT0CCQBlAgUWX3RvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQUXX3RvdGFsU2hvcnRQb3NpdGlvblNpemUFF190b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgICGEludmFsaWQgQU1NIHN0YXRlIGRhdGE6IAkApAMBBRZfdG90YWxMb25nUG9zaXRpb25TaXplAgQgKyAgCQCkAwEFF190b3RhbFNob3J0UG9zaXRpb25TaXplAgQgIT0gCQCkAwEFF190b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCQDOCAIJAM4IAgkBEXVwZGF0ZUFtbVJlc2VydmVzAgUHX3F0QXN0UgUHX2JzQXN0UgkAzAgCCQEMSW50ZWdlckVudHJ5AgUTa190b3RhbFBvc2l0aW9uU2l6ZQUXX3RvdGFsUG9zaXRpb25TaXplQWZ0ZXIJAMwIAgkBDEludGVnZXJFbnRyeQIFFmtfb3BlbkludGVyZXN0Tm90aW9uYWwFFV9vcGVuSW50ZXJlc3ROb3Rpb25hbAkAzAgCCQEMSW50ZWdlckVudHJ5AgUXa190b3RhbExvbmdQb3NpdGlvblNpemUFFl90b3RhbExvbmdQb3NpdGlvblNpemUJAMwIAgkBDEludGVnZXJFbnRyeQIFGGtfdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQUXX3RvdGFsU2hvcnRQb3NpdGlvblNpemUJAMwIAgkBDEludGVnZXJFbnRyeQIFEmtfb3BlbkludGVyZXN0TG9uZwUWX3RvdGFsTG9uZ09wZW5Ob3Rpb25hbAkAzAgCCQEMSW50ZWdlckVudHJ5AgUTa19vcGVuSW50ZXJlc3RTaG9ydAUXX3RvdGFsU2hvcnRPcGVuTm90aW9uYWwFA25pbAkBCmFwcGVuZFR3YXABCQEEZGl2ZAIJAQRtdWxkAgUHX3F0QXN0UgUHX3F0QXN0VwkBBG11bGQCBQdfYnNBc3RSBQdfYnNBc3RXAQ5kZWxldGVQb3NpdGlvbgEIX2FkZHJlc3MJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBDnRvQ29tcG9zaXRlS2V5AgUOa19wb3NpdGlvblNpemUFCF9hZGRyZXNzCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ50b0NvbXBvc2l0ZUtleQIFEGtfcG9zaXRpb25NYXJnaW4FCF9hZGRyZXNzCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ50b0NvbXBvc2l0ZUtleQIFFmtfcG9zaXRpb25PcGVuTm90aW9uYWwFCF9hZGRyZXNzCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ50b0NvbXBvc2l0ZUtleQIFLmtfcG9zaXRpb25MYXN0VXBkYXRlZEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24FCF9hZGRyZXNzCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ50b0NvbXBvc2l0ZUtleQIFD2tfcG9zaXRpb25Bc3NldAUIX2FkZHJlc3MJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBDnRvQ29tcG9zaXRlS2V5AgUNa19wb3NpdGlvbkZlZQUIX2FkZHJlc3MJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBDnRvQ29tcG9zaXRlS2V5AgUea19wb3NpdGlvbkxhc3RVcGRhdGVkVGltZXN0YW1wBQhfYWRkcmVzcwUDbmlsAQh3aXRoZHJhdwIIX2FkZHJlc3MHX2Ftb3VudAQHYmFsYW5jZQkA8AcCBQR0aGlzCQEKcXVvdGVBc3NldAADCQBmAgUHX2Ftb3VudAUHYmFsYW5jZQkAAgEJAKwCAgkArAICCQCsAgICE1VuYWJsZSB0byB3aXRoZHJhdyAJAKQDAQUHX2Ftb3VudAIXIGZyb20gY29udHJhY3QgYmFsYW5jZSAJAKQDAQUHYmFsYW5jZQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQhfYWRkcmVzcwUHX2Ftb3VudAkBCnF1b3RlQXNzZXQABQNuaWwBDXVwZGF0ZUJhbGFuY2UBAWkDCQBmAgAABQFpCQACAQIHQmFsYW5jZQkAzAgCCQEMSW50ZWdlckVudHJ5AgUJa19iYWxhbmNlBQFpBQNuaWwBC3RyYW5zZmVyRmVlAQFpCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQ5zdGFraW5nQWRkcmVzcwAFAWkJAQpxdW90ZUFzc2V0AAUDbmlsAQ5kb0J1cm5BcnRpZmFjdAINX2J1cm5BcnRpZmFjdAFpAwUNX2J1cm5BcnRpZmFjdAkAzAgCCQEEQnVybgIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAggJAJEDAggFAWkIcGF5bWVudHMAAQdhc3NldElkAhBJbnZhbGlkIGFydGlmYWN0AAEFA25pbAUDbmlsFgFpAQVwYXVzZQADCQECIT0CCAUBaQZjYWxsZXIJAQxhZG1pbkFkZHJlc3MACQACAQIUSW52YWxpZCBwYXVzZSBwYXJhbXMJAMwIAgkBDEJvb2xlYW5FbnRyeQIFCGtfcGF1c2VkBgUDbmlsAWkBB3VucGF1c2UAAwkBAiE9AggFAWkGY2FsbGVyCQEMYWRtaW5BZGRyZXNzAAkAAgECFkludmFsaWQgdW5wYXVzZSBwYXJhbXMJAMwIAgkBDEJvb2xlYW5FbnRyeQIFCGtfcGF1c2VkBwUDbmlsAWkBDHNldENsb3NlT25seQADCQECIT0CCAUBaQZjYWxsZXIJAQxhZG1pbkFkZHJlc3MACQACAQIbSW52YWxpZCBzZXRDbG9zZU9ubHkgcGFyYW1zCQDMCAIJAQxCb29sZWFuRW50cnkCBQtrX2Nsb3NlT25seQYFA25pbAFpAQ51bnNldENsb3NlT25seQADCQECIT0CCAUBaQZjYWxsZXIJAQxhZG1pbkFkZHJlc3MACQACAQIdSW52YWxpZCB1bnNldENsb3NlT25seSBwYXJhbXMJAMwIAgkBDEJvb2xlYW5FbnRyeQIFC2tfY2xvc2VPbmx5BwUDbmlsAWkBDGFkZExpcXVpZGl0eQERX3F1b3RlQXNzZXRBbW91bnQDAwkBAiE9AggFAWkGY2FsbGVyCQEMYWRtaW5BZGRyZXNzAAYJAGcCAAAFEV9xdW90ZUFzc2V0QW1vdW50CQACAQIbSW52YWxpZCBhZGRMaXF1aWRpdHkgcGFyYW1zBAdfcXRBc3RSCQEGcXRBc3RSAAQHX2JzQXN0UgkBBmJzQXN0UgAEB19xdEFzdFcJAQZxdEFzdFcABAdfYnNBc3RXCQEGYnNBc3RXAAQFcHJpY2UJAQRkaXZkAgkBBG11bGQCBQdfcXRBc3RSBQdfcXRBc3RXCQEEbXVsZAIFB19ic0FzdFIFB19ic0FzdFcEC3F0QXN0UkFmdGVyCQBkAgUHX3F0QXN0UgURX3F1b3RlQXNzZXRBbW91bnQEFGJhc2VBc3NldEFtb3VudFRvQWRkCQBlAgkBBGRpdmQCCQEEbXVsZAIFC3F0QXN0UkFmdGVyBQdfcXRBc3RXBQVwcmljZQUHX2JzQXN0UgQLYnNBc3RSQWZ0ZXIJAGQCBQdfYnNBc3RSBRRiYXNlQXNzZXRBbW91bnRUb0FkZAQNJHQwNTI4NzY1MzAyNwkBFGdldFN5bmNUZXJtaW5hbFByaWNlAwkBDmdldE9yYWNsZVByaWNlAAULcXRBc3RSQWZ0ZXIFC2JzQXN0UkFmdGVyBBNuZXdRdW90ZUFzc2V0V2VpZ2h0CAUNJHQwNTI4NzY1MzAyNwJfMQQSbmV3QmFzZUFzc2V0V2VpZ2h0CAUNJHQwNTI4NzY1MzAyNwJfMgQNbWFyZ2luVG9WYXVsdAgFDSR0MDUyODc2NTMwMjcCXzMEDWRvRXhjaGFuZ2VQbkwDCQECIT0CBQ1tYXJnaW5Ub1ZhdWx0AAAEDWRvRXhjaGFuZ2VQbkwJAPwHBAkBDHZhdWx0QWRkcmVzcwACFWV4Y2hhbmdlRnJlZUFuZExvY2tlZAkAzAgCBQ1tYXJnaW5Ub1ZhdWx0BQNuaWwFA25pbAMJAAACBQ1kb0V4Y2hhbmdlUG5MBQ1kb0V4Y2hhbmdlUG5MBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FA25pbAMJAAACBQ1kb0V4Y2hhbmdlUG5MBQ1kb0V4Y2hhbmdlUG5MCQDOCAIJARF1cGRhdGVBbW1SZXNlcnZlcwIFC3F0QXN0UkFmdGVyBQtic0FzdFJBZnRlcgkBEHVwZGF0ZUFtbVdlaWdodHMCBRNuZXdRdW90ZUFzc2V0V2VpZ2h0BRJuZXdCYXNlQXNzZXRXZWlnaHQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEPcmVtb3ZlTGlxdWlkaXR5ARFfcXVvdGVBc3NldEFtb3VudAMDCQECIT0CCAUBaQZjYWxsZXIJAQxhZG1pbkFkZHJlc3MABgkAZwIFEV9xdW90ZUFzc2V0QW1vdW50AAAJAAIBAh5JbnZhbGlkIHJlbW92ZUxpcXVpZGl0eSBwYXJhbXMEB19xdEFzdFIJAQZxdEFzdFIABAdfYnNBc3RSCQEGYnNBc3RSAAQHX3F0QXN0VwkBBnF0QXN0VwAEB19ic0FzdFcJAQZic0FzdFcABAVwcmljZQkBBGRpdmQCCQEEbXVsZAIFB19xdEFzdFIFB19xdEFzdFcJAQRtdWxkAgUHX2JzQXN0UgUHX2JzQXN0VwQLcXRBc3RSQWZ0ZXIJAGUCBQdfcXRBc3RSBRFfcXVvdGVBc3NldEFtb3VudAQXYmFzZUFzc2V0QW1vdW50VG9SZW1vdmUJAQNhYnMBCQBlAgkBBGRpdmQCCQEEbXVsZAIFC3F0QXN0UkFmdGVyBQdfcXRBc3RXBQVwcmljZQUHX2JzQXN0UgQLYnNBc3RSQWZ0ZXIJAGUCBQdfYnNBc3RSBRdiYXNlQXNzZXRBbW91bnRUb1JlbW92ZQQNJHQwNTM5NTk1NDExMAkBFGdldFN5bmNUZXJtaW5hbFByaWNlAwkBDmdldE9yYWNsZVByaWNlAAULcXRBc3RSQWZ0ZXIFC2JzQXN0UkFmdGVyBBNuZXdRdW90ZUFzc2V0V2VpZ2h0CAUNJHQwNTM5NTk1NDExMAJfMQQSbmV3QmFzZUFzc2V0V2VpZ2h0CAUNJHQwNTM5NTk1NDExMAJfMgQNbWFyZ2luVG9WYXVsdAgFDSR0MDUzOTU5NTQxMTACXzMEDWRvRXhjaGFuZ2VQbkwDCQECIT0CBQ1tYXJnaW5Ub1ZhdWx0AAAEDWRvRXhjaGFuZ2VQbkwJAPwHBAkBDHZhdWx0QWRkcmVzcwACFWV4Y2hhbmdlRnJlZUFuZExvY2tlZAkAzAgCBQ1tYXJnaW5Ub1ZhdWx0BQNuaWwFA25pbAMJAAACBQ1kb0V4Y2hhbmdlUG5MBQ1kb0V4Y2hhbmdlUG5MBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FA25pbAMJAAACBQ1kb0V4Y2hhbmdlUG5MBQ1kb0V4Y2hhbmdlUG5MCQDOCAIJARF1cGRhdGVBbW1SZXNlcnZlcwIFC3F0QXN0UkFmdGVyBQtic0FzdFJBZnRlcgkBEHVwZGF0ZUFtbVdlaWdodHMCBRNuZXdRdW90ZUFzc2V0V2VpZ2h0BRJuZXdCYXNlQXNzZXRXZWlnaHQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEOY2hhbmdlU2V0dGluZ3MNEF9pbml0TWFyZ2luUmF0aW8EX21tchRfbGlxdWlkYXRpb25GZWVSYXRpbw5fZnVuZGluZ1BlcmlvZARfZmVlDF9zcHJlYWRMaW1pdA9fbWF4UHJpY2VJbXBhY3QYX3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvD19tYXhQcmljZVNwcmVhZBBfbWF4T3Blbk5vdGlvbmFsFF9mZWVUb1N0YWtlcnNQZXJjZW50D19tYXhPcmFjbGVEZWxheQxfcm9sbG92ZXJGZWUDCQECIT0CCAUBaQZjYWxsZXIJAQxhZG1pbkFkZHJlc3MACQACAQIdSW52YWxpZCBjaGFuZ2VTZXR0aW5ncyBwYXJhbXMJAQ51cGRhdGVTZXR0aW5ncw0FEF9pbml0TWFyZ2luUmF0aW8FBF9tbXIFFF9saXF1aWRhdGlvbkZlZVJhdGlvBQ5fZnVuZGluZ1BlcmlvZAUEX2ZlZQUMX3NwcmVhZExpbWl0BQ9fbWF4UHJpY2VJbXBhY3QFGF9wYXJ0aWFsTGlxdWlkYXRpb25SYXRpbwUPX21heFByaWNlU3ByZWFkBRBfbWF4T3Blbk5vdGlvbmFsBRRfZmVlVG9TdGFrZXJzUGVyY2VudAUPX21heE9yYWNsZURlbGF5BQxfcm9sbG92ZXJGZWUBaQEKaW5pdGlhbGl6ZRIHX3F0QXN0UgdfYnNBc3RSDl9mdW5kaW5nUGVyaW9kEF9pbml0TWFyZ2luUmF0aW8EX21tchRfbGlxdWlkYXRpb25GZWVSYXRpbwRfZmVlD19iYXNlT3JhY2xlRGF0YRBfcXVvdGVPcmFjbGVEYXRhDF9jb29yZGluYXRvcgxfc3ByZWFkTGltaXQPX21heFByaWNlSW1wYWN0GF9wYXJ0aWFsTGlxdWlkYXRpb25SYXRpbw9fbWF4UHJpY2VTcHJlYWQQX21heE9wZW5Ob3Rpb25hbBRfZmVlVG9TdGFrZXJzUGVyY2VudA9fbWF4T3JhY2xlRGVsYXkMX3JvbGxvdmVyRmVlAwMDAwMDAwMDAwMDAwMDAwMDCQBnAgAABQdfcXRBc3RSBgkAZwIAAAUHX2JzQXN0UgYJAGcCAAAFDl9mdW5kaW5nUGVyaW9kBgkAZwIAAAUQX2luaXRNYXJnaW5SYXRpbwYJAGcCAAAFBF9tbXIGCQBnAgAABRRfbGlxdWlkYXRpb25GZWVSYXRpbwYJAGcCAAAFBF9mZWUGCQBnAgAABQxfc3ByZWFkTGltaXQGCQBnAgAABQ9fbWF4UHJpY2VJbXBhY3QGCQBnAgAABRhfcGFydGlhbExpcXVpZGF0aW9uUmF0aW8GCQBnAgAABQ9fbWF4UHJpY2VTcHJlYWQGCQBnAgAABRBfbWF4T3Blbk5vdGlvbmFsBgkAZwIAAAUUX2ZlZVRvU3Rha2Vyc1BlcmNlbnQGCQBmAgUUX2ZlZVRvU3Rha2Vyc1BlcmNlbnQFDERFQ0lNQUxfVU5JVAYJAGcCAAAFD19tYXhPcmFjbGVEZWxheQYJAGcCAAAFDF9yb2xsb3ZlckZlZQYJAQtpbml0aWFsaXplZAAGCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAh1JbnZhbGlkIGluaXRpYWxpemUgcGFyYW1ldGVycwkAzggCCQDOCAIJAM4IAgkAzggCCQEJdXBkYXRlQW1tCAUHX3F0QXN0UgUHX2JzQXN0UgAAAAAAAAAAAAAAAAkBDnVwZGF0ZVNldHRpbmdzDQUQX2luaXRNYXJnaW5SYXRpbwUEX21tcgUUX2xpcXVpZGF0aW9uRmVlUmF0aW8FDl9mdW5kaW5nUGVyaW9kBQRfZmVlBQxfc3ByZWFkTGltaXQFD19tYXhQcmljZUltcGFjdAUYX3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvBQ9fbWF4UHJpY2VTcHJlYWQFEF9tYXhPcGVuTm90aW9uYWwFFF9mZWVUb1N0YWtlcnNQZXJjZW50BQ9fbWF4T3JhY2xlRGVsYXkFDF9yb2xsb3ZlckZlZQkBDXVwZGF0ZUZ1bmRpbmcFCQBkAgkBDWxhc3RUaW1lc3RhbXAABQ5fZnVuZGluZ1BlcmlvZAAAAAAAAAAACQENdXBkYXRlQmFsYW5jZQEAAAkAzAgCCQEMQm9vbGVhbkVudHJ5AgUNa19pbml0aWFsaXplZAYJAMwIAgkBC1N0cmluZ0VudHJ5AgUMa19iYXNlT3JhY2xlBQ9fYmFzZU9yYWNsZURhdGEJAMwIAgkBC1N0cmluZ0VudHJ5AgUNa19xdW90ZU9yYWNsZQUQX3F1b3RlT3JhY2xlRGF0YQkAzAgCCQELU3RyaW5nRW50cnkCBRRrX2Nvb3JkaW5hdG9yQWRkcmVzcwkApQgBCQERQGV4dHJOYXRpdmUoMTA2MikBBQxfY29vcmRpbmF0b3IFA25pbAFpARBpbmNyZWFzZVBvc2l0aW9uBApfZGlyZWN0aW9uCV9sZXZlcmFnZRNfbWluQmFzZUFzc2V0QW1vdW50CF9yZWZMaW5rBARzeW5jCQD8BwQFBHRoaXMCGXN5bmNUZXJtaW5hbFByaWNlVG9PcmFjbGUFA25pbAUDbmlsAwkAAAIFBHN5bmMFBHN5bmMEEGVuc3VyZUNhbGxlZE9uY2UJAPwHBAUEdGhpcwIQZW5zdXJlQ2FsbGVkT25jZQUDbmlsBQNuaWwDCQAAAgUQZW5zdXJlQ2FsbGVkT25jZQUQZW5zdXJlQ2FsbGVkT25jZQQHX3RyYWRlcgkBD2dldEFjdHVhbENhbGxlcgEFAWkECl9yYXdBbW91bnQICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BAhfYXNzZXRJZAgJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBAtfYXNzZXRJZFN0cgkA2AQBCQEFdmFsdWUBBQhfYXNzZXRJZAQMaXNRdW90ZUFzc2V0CQAAAgUIX2Fzc2V0SWQJAQpxdW90ZUFzc2V0AAMDAwMDAwMDAwMJAQIhPQIFCl9kaXJlY3Rpb24FCERJUl9MT05HCQECIT0CBQpfZGlyZWN0aW9uBQlESVJfU0hPUlQHBgkAZwIAAAUKX3Jhd0Ftb3VudAYJAQEhAQkBC2luaXRpYWxpemVkAAYJAQEhAQUMaXNRdW90ZUFzc2V0BgkBASEBCQEXaXNTYW1lQXNzZXRPck5vUG9zaXRpb24CBQdfdHJhZGVyBQtfYXNzZXRJZFN0cgYJAQEhAQkBFnJlcXVpcmVNb3JlTWFyZ2luUmF0aW8DCQEEZGl2ZAIFDERFQ0lNQUxfVU5JVAUJX2xldmVyYWdlCQEPaW5pdE1hcmdpblJhdGlvAAYGCQEGcGF1c2VkAAYJAQljbG9zZU9ubHkABgkBDmlzTWFya2V0Q2xvc2VkAAkAAgECI0ludmFsaWQgaW5jcmVhc2VQb3NpdGlvbiBwYXJhbWV0ZXJzBA0kdDA1Nzg4ODU4MDM3CQEYZ2V0Rm9yVHJhZGVyV2l0aEFydGlmYWN0AgUHX3RyYWRlcgkBDWdldEFydGlmYWN0SWQBBQFpBAthZGp1c3RlZEZlZQgFDSR0MDU3ODg4NTgwMzcCXzEEDGJ1cm5BcnRpZmFjdAgFDSR0MDU3ODg4NTgwMzcCXzIEB19hbW91bnQJAQRkaXZkAgUKX3Jhd0Ftb3VudAkAZAIJAQRtdWxkAgULYWRqdXN0ZWRGZWUFCV9sZXZlcmFnZQUMREVDSU1BTF9VTklUBBNkaXN0cmlidXRlRmVlQW1vdW50CQBlAgUKX3Jhd0Ftb3VudAUHX2Ftb3VudAQOcmVmZXJyZXJGZWVBbnkJAPwHBAkBD3JlZmVycmFsQWRkcmVzcwACFWFjY2VwdFBheW1lbnRXaXRoTGluawkAzAgCBQdfdHJhZGVyCQDMCAIFCF9yZWZMaW5rBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQpxdW90ZUFzc2V0AAUTZGlzdHJpYnV0ZUZlZUFtb3VudAUDbmlsAwkAAAIFDnJlZmVycmVyRmVlQW55BQ5yZWZlcnJlckZlZUFueQQLcmVmZXJyZXJGZWUEByRtYXRjaDAFDnJlZmVycmVyRmVlQW55AwkAAQIFByRtYXRjaDACA0ludAQBeAUHJG1hdGNoMAUBeAkAAgECE0ludmFsaWQgcmVmZXJyZXJGZWUECWZlZUFtb3VudAkAZQIFE2Rpc3RyaWJ1dGVGZWVBbW91bnQFC3JlZmVycmVyRmVlBA0kdDA1ODUzMzU4NzAxCQELZ2V0UG9zaXRpb24BBQdfdHJhZGVyBA9vbGRQb3NpdGlvblNpemUIBQ0kdDA1ODUzMzU4NzAxAl8xBBFvbGRQb3NpdGlvbk1hcmdpbggFDSR0MDU4NTMzNTg3MDECXzIEF29sZFBvc2l0aW9uT3Blbk5vdGlvbmFsCAUNJHQwNTg1MzM1ODcwMQJfMwQUb2xkUG9zaXRpb25Mc3RVcGRDUEYIBQ0kdDA1ODUzMzU4NzAxAl80BBRvbGRQb3NpdGlvblRpbWVzdGFtcAgFDSR0MDU4NTMzNTg3MDECXzUEDWlzTmV3UG9zaXRpb24JAAACBQ9vbGRQb3NpdGlvblNpemUAAAQPaXNTYW1lRGlyZWN0aW9uAwkAZgIFD29sZFBvc2l0aW9uU2l6ZQAACQAAAgUKX2RpcmVjdGlvbgUIRElSX0xPTkcJAAACBQpfZGlyZWN0aW9uBQlESVJfU0hPUlQEDmV4cGFuZEV4aXN0aW5nAwkBASEBBQ1pc05ld1Bvc2l0aW9uBQ9pc1NhbWVEaXJlY3Rpb24HBAVpc0FkZAkAAAIFCl9kaXJlY3Rpb24FCERJUl9MT05HBA0kdDA1ODk5MDYyMTExAwMFDWlzTmV3UG9zaXRpb24GBQ5leHBhbmRFeGlzdGluZwQMb3Blbk5vdGlvbmFsCQEEbXVsZAIFB19hbW91bnQFCV9sZXZlcmFnZQQNJHQwNTk0OTk1OTY3MgkBCXN3YXBJbnB1dAIFBWlzQWRkBQxvcGVuTm90aW9uYWwEFWFtb3VudEJhc2VBc3NldEJvdWdodAgFDSR0MDU5NDk5NTk2NzICXzEEFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDA1OTQ5OTU5NjcyAl8yBBViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDA1OTQ5OTU5NjcyAl8zBBZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCAUNJHQwNTk0OTk1OTY3MgJfNAMDCQECIT0CBRNfbWluQmFzZUFzc2V0QW1vdW50AAAJAGYCBRNfbWluQmFzZUFzc2V0QW1vdW50CQEDYWJzAQUVYW1vdW50QmFzZUFzc2V0Qm91Z2h0BwkAAgEJAKwCAgkArAICCQCsAgICDUxpbWl0IGVycm9yOiAJAKQDAQkBA2FicwEFFWFtb3VudEJhc2VBc3NldEJvdWdodAIDIDwgCQCkAwEFE19taW5CYXNlQXNzZXRBbW91bnQED25ld1Bvc2l0aW9uU2l6ZQkAZAIFD29sZFBvc2l0aW9uU2l6ZQUVYW1vdW50QmFzZUFzc2V0Qm91Z2h0BBp0b3RhbExvbmdPcGVuSW50ZXJlc3RBZnRlcgkAZAIJARBvcGVuSW50ZXJlc3RMb25nAAMJAGYCBQ9uZXdQb3NpdGlvblNpemUAAAUMb3Blbk5vdGlvbmFsAAAEG3RvdGFsU2hvcnRPcGVuSW50ZXJlc3RBZnRlcgkAZAIJARFvcGVuSW50ZXJlc3RTaG9ydAADCQBmAgAABQ9uZXdQb3NpdGlvblNpemUFDG9wZW5Ob3Rpb25hbAAABA0kdDA2MDIxODYwNDkzCQEwY2FsY1JlbWFpbk1hcmdpbldpdGhGdW5kaW5nUGF5bWVudEFuZFJvbGxvdmVyRmVlBQUPb2xkUG9zaXRpb25TaXplBRFvbGRQb3NpdGlvbk1hcmdpbgUUb2xkUG9zaXRpb25Mc3RVcGRDUEYFFG9sZFBvc2l0aW9uVGltZXN0YW1wBQdfYW1vdW50BAxyZW1haW5NYXJnaW4IBQ0kdDA2MDIxODYwNDkzAl8xBAJ4MQgFDSR0MDYwMjE4NjA0OTMCXzIEAngyCAUNJHQwNjAyMTg2MDQ5MwJfMwQLcm9sbG92ZXJGZWUIBQ0kdDA2MDIxODYwNDkzAl80AwkBASEBCQEZcmVxdWlyZU5vdE92ZXJTcHJlYWRMaW1pdAIFFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIFFWJhc2VBc3NldFJlc2VydmVBZnRlcgkAAgECFU92ZXIgbWF4IHNwcmVhZCBsaW1pdAMJAQEhAQkBHXJlcXVpcmVOb3RPdmVyTWF4T3Blbk5vdGlvbmFsAgUadG90YWxMb25nT3BlbkludGVyZXN0QWZ0ZXIFG3RvdGFsU2hvcnRPcGVuSW50ZXJlc3RBZnRlcgkAAgECFk92ZXIgbWF4IG9wZW4gbm90aW9uYWwJAKAKDgUPbmV3UG9zaXRpb25TaXplBQxyZW1haW5NYXJnaW4JAGQCBRdvbGRQb3NpdGlvbk9wZW5Ob3Rpb25hbAUMb3Blbk5vdGlvbmFsCQEfbGF0ZXN0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgEFD25ld1Bvc2l0aW9uU2l6ZQkBDWxhc3RUaW1lc3RhbXAABRViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIFFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIFFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIJAGQCCQEUb3BlbkludGVyZXN0Tm90aW9uYWwABQxvcGVuTm90aW9uYWwJAGQCCQEVdG90YWxMb25nUG9zaXRpb25TaXplAAMJAGYCBQ9uZXdQb3NpdGlvblNpemUAAAkBA2FicwEFFWFtb3VudEJhc2VBc3NldEJvdWdodAAACQBkAgkBFnRvdGFsU2hvcnRQb3NpdGlvblNpemUAAwkAZgIAAAUPbmV3UG9zaXRpb25TaXplCQEDYWJzAQUVYW1vdW50QmFzZUFzc2V0Qm91Z2h0AAAFGnRvdGFsTG9uZ09wZW5JbnRlcmVzdEFmdGVyBRt0b3RhbFNob3J0T3BlbkludGVyZXN0QWZ0ZXIFC3JvbGxvdmVyRmVlBAxvcGVuTm90aW9uYWwJAQRtdWxkAgUHX2Ftb3VudAUJX2xldmVyYWdlBA0kdDA2MTgxMTYxOTI3CQEjZ2V0UG9zaXRpb25Ob3Rpb25hbEFuZFVucmVhbGl6ZWRQbmwCCQClCAEIBQFpBmNhbGxlcgUPUE5MX09QVElPTl9TUE9UBBNvbGRQb3NpdGlvbk5vdGlvbmFsCAUNJHQwNjE4MTE2MTkyNwJfMQQNdW5yZWFsaXplZFBubAgFDSR0MDYxODExNjE5MjcCXzIDCQBmAgUTb2xkUG9zaXRpb25Ob3Rpb25hbAUMb3Blbk5vdGlvbmFsCQACAQIuVXNlIGRlY3JlYXNlUG9zaXRpb24gdG8gZGVjcmVhc2UgcG9zaXRpb24gc2l6ZQkAAgECFENsb3NlIHBvc2l0aW9uIGZpcnN0BA9uZXdQb3NpdGlvblNpemUIBQ0kdDA1ODk5MDYyMTExAl8xBBduZXdQb3NpdGlvblJlbWFpbk1hcmdpbggFDSR0MDU4OTkwNjIxMTECXzIEF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsCAUNJHQwNTg5OTA2MjExMQJfMwQUbmV3UG9zaXRpb25MYXRlc3RDUEYIBQ0kdDA1ODk5MDYyMTExAl80BBRuZXdQb3NpdGlvblRpbWVzdGFtcAgFDSR0MDU4OTkwNjIxMTECXzUEFWJhc2VBc3NldFJlc2VydmVBZnRlcggFDSR0MDU4OTkwNjIxMTECXzYEFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDA1ODk5MDYyMTExAl83BBZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCAUNJHQwNTg5OTA2MjExMQJfOAQZb3BlbkludGVyZXN0Tm90aW9uYWxBZnRlcggFDSR0MDU4OTkwNjIxMTECXzkEDnRvdGFsTG9uZ0FmdGVyCAUNJHQwNTg5OTA2MjExMQNfMTAED3RvdGFsU2hvcnRBZnRlcggFDSR0MDU4OTkwNjIxMTEDXzExBBp0b3RhbExvbmdPcGVuSW50ZXJlc3RBZnRlcggFDSR0MDU4OTkwNjIxMTEDXzEyBBt0b3RhbFNob3J0T3BlbkludGVyZXN0QWZ0ZXIIBQ0kdDA1ODk5MDYyMTExA18xMwQLcm9sbG92ZXJGZWUIBQ0kdDA1ODk5MDYyMTExA18xNAQNJHQwNjIxMTc2MjE4OAkBDWRpc3RyaWJ1dGVGZWUBCQBkAgUJZmVlQW1vdW50BQtyb2xsb3ZlckZlZQQMZmVlVG9TdGFrZXJzCAUNJHQwNjIxMTc2MjE4OAJfMQQKZmVlVG9WYXVsdAgFDSR0MDYyMTE3NjIxODgCXzIEBXN0YWtlAwkAZwIFB19hbW91bnQFC3JvbGxvdmVyRmVlCQD8BwQJAQx2YXVsdEFkZHJlc3MAAglhZGRMb2NrZWQFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBCnF1b3RlQXNzZXQACQBlAgUHX2Ftb3VudAULcm9sbG92ZXJGZWUFA25pbAkA/AcECQEMdmF1bHRBZGRyZXNzAAIOd2l0aGRyYXdMb2NrZWQJAMwIAgkAZQIFC3JvbGxvdmVyRmVlBQdfYW1vdW50BQNuaWwFA25pbAMJAAACBQVzdGFrZQUFc3Rha2UEDGRlcG9zaXRWYXVsdAkA/AcECQEMdmF1bHRBZGRyZXNzAAIHYWRkRnJlZQUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQEKcXVvdGVBc3NldAAFCmZlZVRvVmF1bHQFA25pbAMJAAACBQxkZXBvc2l0VmF1bHQFDGRlcG9zaXRWYXVsdAQJbm90aWZ5RmVlCQD8BwQJAQxtaW5lckFkZHJlc3MAAgpub3RpZnlGZWVzCQDMCAIFB190cmFkZXIJAMwIAgUJZmVlQW1vdW50BQNuaWwFA25pbAMJAAACBQlub3RpZnlGZWUFCW5vdGlmeUZlZQQObm90aWZ5Tm90aW9uYWwJAPwHBAkBDG1pbmVyQWRkcmVzcwACDm5vdGlmeU5vdGlvbmFsCQDMCAIFB190cmFkZXIJAMwIAgUXbmV3UG9zaXRpb25PcGVuTm90aW9uYWwFA25pbAUDbmlsAwkAAAIFDm5vdGlmeU5vdGlvbmFsBQ5ub3RpZnlOb3Rpb25hbAkAzggCCQDOCAIJAM4IAgkAzggCCQDOCAIJAM4IAgkBDnVwZGF0ZVBvc2l0aW9uBgUHX3RyYWRlcgUPbmV3UG9zaXRpb25TaXplBRduZXdQb3NpdGlvblJlbWFpbk1hcmdpbgUXbmV3UG9zaXRpb25PcGVuTm90aW9uYWwFFG5ld1Bvc2l0aW9uTGF0ZXN0Q1BGBRRuZXdQb3NpdGlvblRpbWVzdGFtcAkBH2luY3JlbWVudFBvc2l0aW9uU2VxdWVuY2VOdW1iZXICBQ1pc05ld1Bvc2l0aW9uBQdfdHJhZGVyCQERdXBkYXRlUG9zaXRpb25GZWUDBQ1pc05ld1Bvc2l0aW9uBQdfdHJhZGVyBQthZGp1c3RlZEZlZQkBCXVwZGF0ZUFtbQgFFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIFFWJhc2VBc3NldFJlc2VydmVBZnRlcgUWdG90YWxQb3NpdGlvblNpemVBZnRlcgUZb3BlbkludGVyZXN0Tm90aW9uYWxBZnRlcgUOdG90YWxMb25nQWZ0ZXIFD3RvdGFsU2hvcnRBZnRlcgUadG90YWxMb25nT3BlbkludGVyZXN0QWZ0ZXIFG3RvdGFsU2hvcnRPcGVuSW50ZXJlc3RBZnRlcgkBC3RyYW5zZmVyRmVlAQUMZmVlVG9TdGFrZXJzCQENdXBkYXRlQmFsYW5jZQEJAGUCCQBkAgkBCGNiYWxhbmNlAAUHX2Ftb3VudAULcm9sbG92ZXJGZWUJAQ5kb0J1cm5BcnRpZmFjdAIFDGJ1cm5BcnRpZmFjdAUBaQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQlhZGRNYXJnaW4ABARzeW5jCQD8BwQFBHRoaXMCGXN5bmNUZXJtaW5hbFByaWNlVG9PcmFjbGUFA25pbAUDbmlsAwkAAAIFBHN5bmMFBHN5bmMEEGVuc3VyZUNhbGxlZE9uY2UJAPwHBAUEdGhpcwIQZW5zdXJlQ2FsbGVkT25jZQUDbmlsBQNuaWwDCQAAAgUQZW5zdXJlQ2FsbGVkT25jZQUQZW5zdXJlQ2FsbGVkT25jZQQHX3RyYWRlcgkApQgBCAUBaQZjYWxsZXIEB19hbW91bnQICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BAhfYXNzZXRJZAgJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBAtfYXNzZXRJZFN0cgkA2AQBCQEFdmFsdWUBBQhfYXNzZXRJZAQMaXNRdW90ZUFzc2V0CQAAAgUIX2Fzc2V0SWQJAQpxdW90ZUFzc2V0AAMDAwMDAwMJAQEhAQUMaXNRdW90ZUFzc2V0BgkBASEBCQETcmVxdWlyZU9wZW5Qb3NpdGlvbgEJAKUIAQgFAWkGY2FsbGVyBgkBASEBCQELaXNTYW1lQXNzZXQCBQdfdHJhZGVyBQtfYXNzZXRJZFN0cgYJAQEhAQkBC2luaXRpYWxpemVkAAYJAQZwYXVzZWQABgkBCWNsb3NlT25seQAGCQEOaXNNYXJrZXRDbG9zZWQACQACAQIcSW52YWxpZCBhZGRNYXJnaW4gcGFyYW1ldGVycwQNJHQwNjQyOTk2NDQ2NwkBC2dldFBvc2l0aW9uAQUHX3RyYWRlcgQPb2xkUG9zaXRpb25TaXplCAUNJHQwNjQyOTk2NDQ2NwJfMQQRb2xkUG9zaXRpb25NYXJnaW4IBQ0kdDA2NDI5OTY0NDY3Al8yBBdvbGRQb3NpdGlvbk9wZW5Ob3Rpb25hbAgFDSR0MDY0Mjk5NjQ0NjcCXzMEFG9sZFBvc2l0aW9uTHN0VXBkQ1BGCAUNJHQwNjQyOTk2NDQ2NwJfNAQUb2xkUG9zaXRpb25UaW1lc3RhbXAIBQ0kdDA2NDI5OTY0NDY3Al81BAVzdGFrZQkA/AcECQEMdmF1bHRBZGRyZXNzAAIJYWRkTG9ja2VkBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQpxdW90ZUFzc2V0AAUHX2Ftb3VudAUDbmlsAwkAAAIFBXN0YWtlBQVzdGFrZQQLcm9sbG92ZXJGZWUJAQ9jYWxjUm9sbG92ZXJGZWUCBRFvbGRQb3NpdGlvbk1hcmdpbgUUb2xkUG9zaXRpb25UaW1lc3RhbXAEFmRvVHJhbnNmZXJGZWVUb1N0YWtlcnMDCQBmAgULcm9sbG92ZXJGZWUAAAQNJHQwNjQ3NTI2NDgxMQkBDWRpc3RyaWJ1dGVGZWUBBQtyb2xsb3ZlckZlZQQMZmVlVG9TdGFrZXJzCAUNJHQwNjQ3NTI2NDgxMQJfMQQKZmVlVG9WYXVsdAgFDSR0MDY0NzUyNjQ4MTECXzIEB3Vuc3Rha2UJAPwHBAkBDHZhdWx0QWRkcmVzcwACDndpdGhkcmF3TG9ja2VkCQDMCAIFDGZlZVRvU3Rha2VycwUDbmlsBQNuaWwDCQAAAgUHdW5zdGFrZQUHdW5zdGFrZQQLbG9ja0JhZERlYnQJAPwHBAkBDHZhdWx0QWRkcmVzcwACFWV4Y2hhbmdlRnJlZUFuZExvY2tlZAkAzAgCCQEBLQEFCmZlZVRvVmF1bHQFA25pbAUDbmlsAwkAAAIFC2xvY2tCYWREZWJ0BQtsb2NrQmFkRGVidAkBC3RyYW5zZmVyRmVlAQUMZmVlVG9TdGFrZXJzCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQNuaWwDCQAAAgUWZG9UcmFuc2ZlckZlZVRvU3Rha2VycwUWZG9UcmFuc2ZlckZlZVRvU3Rha2VycwkAzggCCQDOCAIJAQ51cGRhdGVQb3NpdGlvbgYFB190cmFkZXIFD29sZFBvc2l0aW9uU2l6ZQkAZAIJAGUCBRFvbGRQb3NpdGlvbk1hcmdpbgULcm9sbG92ZXJGZWUFB19hbW91bnQFF29sZFBvc2l0aW9uT3Blbk5vdGlvbmFsBRRvbGRQb3NpdGlvbkxzdFVwZENQRgkBDWxhc3RUaW1lc3RhbXAACQENdXBkYXRlQmFsYW5jZQEJAGUCCQBkAgkBCGNiYWxhbmNlAAUHX2Ftb3VudAULcm9sbG92ZXJGZWUFFmRvVHJhbnNmZXJGZWVUb1N0YWtlcnMJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEMcmVtb3ZlTWFyZ2luAQdfYW1vdW50BARzeW5jCQD8BwQFBHRoaXMCGXN5bmNUZXJtaW5hbFByaWNlVG9PcmFjbGUFA25pbAUDbmlsAwkAAAIFBHN5bmMFBHN5bmMEEGVuc3VyZUNhbGxlZE9uY2UJAPwHBAUEdGhpcwIQZW5zdXJlQ2FsbGVkT25jZQUDbmlsBQNuaWwDCQAAAgUQZW5zdXJlQ2FsbGVkT25jZQUQZW5zdXJlQ2FsbGVkT25jZQQHX3RyYWRlcgkApQgBCAUBaQZjYWxsZXIDAwMDAwkAZwIAAAUHX2Ftb3VudAYJAQEhAQkBE3JlcXVpcmVPcGVuUG9zaXRpb24BBQdfdHJhZGVyBgkBASEBCQELaW5pdGlhbGl6ZWQABgkBBnBhdXNlZAAGCQEOaXNNYXJrZXRDbG9zZWQACQACAQIfSW52YWxpZCByZW1vdmVNYXJnaW4gcGFyYW1ldGVycwQNJHQwNjU5MjM2NjA5MQkBC2dldFBvc2l0aW9uAQUHX3RyYWRlcgQPb2xkUG9zaXRpb25TaXplCAUNJHQwNjU5MjM2NjA5MQJfMQQRb2xkUG9zaXRpb25NYXJnaW4IBQ0kdDA2NTkyMzY2MDkxAl8yBBdvbGRQb3NpdGlvbk9wZW5Ob3Rpb25hbAgFDSR0MDY1OTIzNjYwOTECXzMEFG9sZFBvc2l0aW9uTHN0VXBkQ1BGCAUNJHQwNjU5MjM2NjA5MQJfNAQUb2xkUG9zaXRpb25UaW1lc3RhbXAIBQ0kdDA2NTkyMzY2MDkxAl81BA0kdDA2NjA5NzY2MzQ2CQEwY2FsY1JlbWFpbk1hcmdpbldpdGhGdW5kaW5nUGF5bWVudEFuZFJvbGxvdmVyRmVlBQUPb2xkUG9zaXRpb25TaXplBRFvbGRQb3NpdGlvbk1hcmdpbgUUb2xkUG9zaXRpb25Mc3RVcGRDUEYFFG9sZFBvc2l0aW9uVGltZXN0YW1wCQEBLQEFB19hbW91bnQEDHJlbWFpbk1hcmdpbggFDSR0MDY2MDk3NjYzNDYCXzEEB2JhZERlYnQIBQ0kdDA2NjA5NzY2MzQ2Al8yBA5mdW5kaW5nUGF5bWVudAgFDSR0MDY2MDk3NjYzNDYCXzMEC3JvbGxvdmVyRmVlCAUNJHQwNjYwOTc2NjM0NgJfNAMJAQIhPQIFB2JhZERlYnQAAAkAAgECHUludmFsaWQgcmVtb3ZlZCBtYXJnaW4gYW1vdW50BAttYXJnaW5SYXRpbwkBD2NhbGNNYXJnaW5SYXRpbwMFDHJlbWFpbk1hcmdpbgUHYmFkRGVidAUXb2xkUG9zaXRpb25PcGVuTm90aW9uYWwDCQEBIQEJARZyZXF1aXJlTW9yZU1hcmdpblJhdGlvAwULbWFyZ2luUmF0aW8JAQ9pbml0TWFyZ2luUmF0aW8ABgkAAgEJAKwCAgkArAICCQCsAgICGVRvbyBtdWNoIG1hcmdpbiByZW1vdmVkOiAJAKQDAQULbWFyZ2luUmF0aW8CAyA8IAkApAMBCQEPaW5pdE1hcmdpblJhdGlvAAQNJHQwNjY3MzI2Njc5MQkBDWRpc3RyaWJ1dGVGZWUBBQtyb2xsb3ZlckZlZQQMZmVlVG9TdGFrZXJzCAUNJHQwNjY3MzI2Njc5MQJfMQQKZmVlVG9WYXVsdAgFDSR0MDY2NzMyNjY3OTECXzIEFmRvVHJhbnNmZXJGZWVUb1N0YWtlcnMDCQBmAgULcm9sbG92ZXJGZWUAAAQLbG9ja0JhZERlYnQJAPwHBAkBDHZhdWx0QWRkcmVzcwACFWV4Y2hhbmdlRnJlZUFuZExvY2tlZAkAzAgCCQEBLQEFCmZlZVRvVmF1bHQFA25pbAUDbmlsAwkAAAIFC2xvY2tCYWREZWJ0BQtsb2NrQmFkRGVidAkBC3RyYW5zZmVyRmVlAQUMZmVlVG9TdGFrZXJzCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQNuaWwDCQAAAgUWZG9UcmFuc2ZlckZlZVRvU3Rha2VycwUWZG9UcmFuc2ZlckZlZVRvU3Rha2VycwQHdW5zdGFrZQkA/AcECQEMdmF1bHRBZGRyZXNzAAIOd2l0aGRyYXdMb2NrZWQJAMwIAgkAZAIFB19hbW91bnQFDGZlZVRvU3Rha2VycwUDbmlsBQNuaWwDCQAAAgUHdW5zdGFrZQUHdW5zdGFrZQkAzggCCQDOCAIJAM4IAgkBDnVwZGF0ZVBvc2l0aW9uBgUHX3RyYWRlcgUPb2xkUG9zaXRpb25TaXplBQxyZW1haW5NYXJnaW4FF29sZFBvc2l0aW9uT3Blbk5vdGlvbmFsCQEfbGF0ZXN0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgEFD29sZFBvc2l0aW9uU2l6ZQkBDWxhc3RUaW1lc3RhbXAACQEId2l0aGRyYXcCCAUBaQZjYWxsZXIFB19hbW91bnQJAQ11cGRhdGVCYWxhbmNlAQkAZQIJAGUCCQEIY2JhbGFuY2UABQdfYW1vdW50BQtyb2xsb3ZlckZlZQUWZG9UcmFuc2ZlckZlZVRvU3Rha2VycwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQ1jbG9zZVBvc2l0aW9uAwVfc2l6ZRRfbWluUXVvdGVBc3NldEFtb3VudAxfYWRkVG9NYXJnaW4EBHN5bmMJAPwHBAUEdGhpcwIZc3luY1Rlcm1pbmFsUHJpY2VUb09yYWNsZQUDbmlsBQNuaWwDCQAAAgUEc3luYwUEc3luYwQQZW5zdXJlQ2FsbGVkT25jZQkA/AcEBQR0aGlzAhBlbnN1cmVDYWxsZWRPbmNlBQNuaWwFA25pbAMJAAACBRBlbnN1cmVDYWxsZWRPbmNlBRBlbnN1cmVDYWxsZWRPbmNlBAdfdHJhZGVyCQEPZ2V0QWN0dWFsQ2FsbGVyAQUBaQQOX3RyYWRlckFkZHJlc3MJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBBQdfdHJhZGVyAg5JbnZhbGlkIGNhbGxlcgQLcG9zaXRpb25GZWUJAQ5nZXRQb3NpdGlvbkZlZQEFB190cmFkZXIDAwMDAwMJAQEhAQkBE3JlcXVpcmVPcGVuUG9zaXRpb24BBQdfdHJhZGVyBgkBASEBCQELaW5pdGlhbGl6ZWQABgkBBnBhdXNlZAAGCQBnAgAABQVfc2l6ZQYJAGYCAAAFFF9taW5RdW90ZUFzc2V0QW1vdW50BgkBDmlzTWFya2V0Q2xvc2VkAAkAAgECIEludmFsaWQgY2xvc2VQb3NpdGlvbiBwYXJhbWV0ZXJzBBRvbGRQb3NpdGlvblRpbWVzdGFtcAgJAQtnZXRQb3NpdGlvbgEFB190cmFkZXICXzUEDSR0MDY4NDQ4NjkwMzMJARVpbnRlcm5hbENsb3NlUG9zaXRpb24HBQdfdHJhZGVyBQVfc2l6ZQULcG9zaXRpb25GZWUFFF9taW5RdW90ZUFzc2V0QW1vdW50BQxfYWRkVG9NYXJnaW4GBgQPbmV3UG9zaXRpb25TaXplCAUNJHQwNjg0NDg2OTAzMwJfMQQRbmV3UG9zaXRpb25NYXJnaW4IBQ0kdDA2ODQ0ODY5MDMzAl8yBBduZXdQb3NpdGlvbk9wZW5Ob3Rpb25hbAgFDSR0MDY4NDQ4NjkwMzMCXzMEFG5ld1Bvc2l0aW9uTHN0VXBkQ1BGCAUNJHQwNjg0NDg2OTAzMwJfNAQPcG9zaXRpb25CYWREZWJ0CAUNJHQwNjg0NDg2OTAzMwJfNQQLcmVhbGl6ZWRQbmwIBQ0kdDA2ODQ0ODY5MDMzAl82BA5tYXJnaW5Ub1RyYWRlcggFDSR0MDY4NDQ4NjkwMzMCXzcEFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDA2ODQ0ODY5MDMzAl84BBViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDA2ODQ0ODY5MDMzAl85BBZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCAUNJHQwNjg0NDg2OTAzMwNfMTAEGW9wZW5JbnRlcmVzdE5vdGlvbmFsQWZ0ZXIIBQ0kdDA2ODQ0ODY5MDMzA18xMQQOdG90YWxMb25nQWZ0ZXIIBQ0kdDA2ODQ0ODY5MDMzA18xMgQPdG90YWxTaG9ydEFmdGVyCAUNJHQwNjg0NDg2OTAzMwNfMTMEGnRvdGFsTG9uZ09wZW5JbnRlcmVzdEFmdGVyCAUNJHQwNjg0NDg2OTAzMwNfMTQEG3RvdGFsU2hvcnRPcGVuSW50ZXJlc3RBZnRlcggFDSR0MDY4NDQ4NjkwMzMDXzE1BAtyZWFsaXplZEZlZQgFDSR0MDY4NDQ4NjkwMzMDXzE2AwkAZgIFD3Bvc2l0aW9uQmFkRGVidAAACQACAQIqSW52YWxpZCBjbG9zZVBvc2l0aW9uIHBhcmFtZXRlcnM6IGJhZCBkZWJ0AwkAZwIFFG9sZFBvc2l0aW9uVGltZXN0YW1wCQENbGFzdFRpbWVzdGFtcAAJAAIBAlNJbnZhbGlkIGNsb3NlUG9zaXRpb24gcGFyYW1ldGVyczogd2FpdCBhdCBsZWFzdCAxIGJsb2NrIGJlZm9yZSBjbG9zaW5nIHRoZSBwb3NpdGlvbgQOaXNQYXJ0aWFsQ2xvc2UJAQIhPQIFD25ld1Bvc2l0aW9uU2l6ZQAABA53aXRoZHJhd0Ftb3VudAkAZAIFDm1hcmdpblRvVHJhZGVyBQtyZWFsaXplZEZlZQQKYW1tQmFsYW5jZQkAZQIJAQhjYmFsYW5jZQAFDndpdGhkcmF3QW1vdW50BA1hbW1OZXdCYWxhbmNlAwkAZgIAAAUKYW1tQmFsYW5jZQAABQphbW1CYWxhbmNlBAd1bnN0YWtlCQD8BwQJAQx2YXVsdEFkZHJlc3MAAg53aXRoZHJhd0xvY2tlZAkAzAgCBQ53aXRoZHJhd0Ftb3VudAUDbmlsBQNuaWwDCQAAAgUHdW5zdGFrZQUHdW5zdGFrZQQNJHQwNjk3MDU2OTc2NAkBDWRpc3RyaWJ1dGVGZWUBBQtyZWFsaXplZEZlZQQMZmVlVG9TdGFrZXJzCAUNJHQwNjk3MDU2OTc2NAJfMQQKZmVlVG9WYXVsdAgFDSR0MDY5NzA1Njk3NjQCXzIEDGRlcG9zaXRWYXVsdAkA/AcECQEMdmF1bHRBZGRyZXNzAAIHYWRkRnJlZQUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQEKcXVvdGVBc3NldAAFCmZlZVRvVmF1bHQFA25pbAMJAAACBQxkZXBvc2l0VmF1bHQFDGRlcG9zaXRWYXVsdAQJbm90aWZ5RmVlCQD8BwQJAQxtaW5lckFkZHJlc3MAAgpub3RpZnlGZWVzCQDMCAIFB190cmFkZXIJAMwIAgULcmVhbGl6ZWRGZWUFA25pbAUDbmlsAwkAAAIFCW5vdGlmeUZlZQUJbm90aWZ5RmVlBA5ub3RpZnlOb3Rpb25hbAkA/AcECQEMbWluZXJBZGRyZXNzAAIObm90aWZ5Tm90aW9uYWwJAMwIAgUHX3RyYWRlcgkAzAgCBRduZXdQb3NpdGlvbk9wZW5Ob3Rpb25hbAUDbmlsBQNuaWwDCQAAAgUObm90aWZ5Tm90aW9uYWwFDm5vdGlmeU5vdGlvbmFsCQDOCAIJAM4IAgkAzggCCQDOCAIDBQ5pc1BhcnRpYWxDbG9zZQkBDnVwZGF0ZVBvc2l0aW9uBgUHX3RyYWRlcgUPbmV3UG9zaXRpb25TaXplBRFuZXdQb3NpdGlvbk1hcmdpbgUXbmV3UG9zaXRpb25PcGVuTm90aW9uYWwFFG5ld1Bvc2l0aW9uTHN0VXBkQ1BGCQENbGFzdFRpbWVzdGFtcAAJAQ5kZWxldGVQb3NpdGlvbgEFB190cmFkZXIJAQl1cGRhdGVBbW0IBRZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyBRViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIFFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIFGW9wZW5JbnRlcmVzdE5vdGlvbmFsQWZ0ZXIFDnRvdGFsTG9uZ0FmdGVyBQ90b3RhbFNob3J0QWZ0ZXIFGnRvdGFsTG9uZ09wZW5JbnRlcmVzdEFmdGVyBRt0b3RhbFNob3J0T3BlbkludGVyZXN0QWZ0ZXIDCQBmAgUObWFyZ2luVG9UcmFkZXIAAAkBCHdpdGhkcmF3AgUOX3RyYWRlckFkZHJlc3MFDm1hcmdpblRvVHJhZGVyBQNuaWwJAQ11cGRhdGVCYWxhbmNlAQUNYW1tTmV3QmFsYW5jZQkBC3RyYW5zZmVyRmVlAQUMZmVlVG9TdGFrZXJzCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBCWxpcXVpZGF0ZQEHX3RyYWRlcgQEc3luYwkA/AcEBQR0aGlzAhlzeW5jVGVybWluYWxQcmljZVRvT3JhY2xlBQNuaWwFA25pbAMJAAACBQRzeW5jBQRzeW5jBA9zcG90TWFyZ2luUmF0aW8JARZnZXRNYXJnaW5SYXRpb0J5T3B0aW9uAgUHX3RyYWRlcgUPUE5MX09QVElPTl9TUE9UBBZsaXF1aWRhdGlvbk1hcmdpblJhdGlvAwkBFmlzT3ZlckZsdWN0dWF0aW9uTGltaXQABBFvcmFjbGVNYXJnaW5SYXRpbwkBFmdldE1hcmdpblJhdGlvQnlPcHRpb24CBQdfdHJhZGVyBRFQTkxfT1BUSU9OX09SQUNMRQkBBHZtYXgCBQ9zcG90TWFyZ2luUmF0aW8FEW9yYWNsZU1hcmdpblJhdGlvBQ9zcG90TWFyZ2luUmF0aW8DAwMDAwkBASEBCQEWcmVxdWlyZU1vcmVNYXJnaW5SYXRpbwMFFmxpcXVpZGF0aW9uTWFyZ2luUmF0aW8JARZtYWludGVuYW5jZU1hcmdpblJhdGlvAAcGCQEBIQEJARNyZXF1aXJlT3BlblBvc2l0aW9uAQUHX3RyYWRlcgYJAQEhAQkBC2luaXRpYWxpemVkAAYJAQZwYXVzZWQABgkBDmlzTWFya2V0Q2xvc2VkAAkAAgECE1VuYWJsZSB0byBsaXF1aWRhdGUEFGlzUGFydGlhbExpcXVpZGF0aW9uAwMJAGYCBQ9zcG90TWFyZ2luUmF0aW8JARNsaXF1aWRhdGlvbkZlZVJhdGlvAAkAZgIJARdwYXJ0aWFsTGlxdWlkYXRpb25SYXRpbwAAAAcJAGYCBQxERUNJTUFMX1VOSVQJARdwYXJ0aWFsTGlxdWlkYXRpb25SYXRpbwAHBA9vbGRQb3NpdGlvblNpemUICQELZ2V0UG9zaXRpb24BBQdfdHJhZGVyAl8xBA9wb3NpdGlvblNpemVBYnMJAQNhYnMBBQ9vbGRQb3NpdGlvblNpemUEDSR0MDcyMDc3NzI0MDADBRRpc1BhcnRpYWxMaXF1aWRhdGlvbgQPbGlxdWlkYXRpb25TaXplCQEbZ2V0UGFydGlhbExpcXVpZGF0aW9uQW1vdW50AgUHX3RyYWRlcgUPb2xkUG9zaXRpb25TaXplBBBsaXF1aWRhdGlvblJhdGlvCQEEZGl2ZAIJAQNhYnMBBQ9saXF1aWRhdGlvblNpemUFD3Bvc2l0aW9uU2l6ZUFicwkAlAoCBRBsaXF1aWRhdGlvblJhdGlvCQEDYWJzAQUPbGlxdWlkYXRpb25TaXplCQCUCgIAAAUPcG9zaXRpb25TaXplQWJzBBBsaXF1aWRhdGlvblJhdGlvCAUNJHQwNzIwNzc3MjQwMAJfMQQPbGlxdWlkYXRpb25TaXplCAUNJHQwNzIwNzc3MjQwMAJfMgQNJHQwNzI0MDY3MzA0NAkBFWludGVybmFsQ2xvc2VQb3NpdGlvbgcFB190cmFkZXIDBRRpc1BhcnRpYWxMaXF1aWRhdGlvbgUPbGlxdWlkYXRpb25TaXplBQ9wb3NpdGlvblNpemVBYnMJARNsaXF1aWRhdGlvbkZlZVJhdGlvAAAABgcGBA9uZXdQb3NpdGlvblNpemUIBQ0kdDA3MjQwNjczMDQ0Al8xBBFuZXdQb3NpdGlvbk1hcmdpbggFDSR0MDcyNDA2NzMwNDQCXzIEF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsCAUNJHQwNzI0MDY3MzA0NAJfMwQUbmV3UG9zaXRpb25Mc3RVcGRDUEYIBQ0kdDA3MjQwNjczMDQ0Al80BA9wb3NpdGlvbkJhZERlYnQIBQ0kdDA3MjQwNjczMDQ0Al81BAtyZWFsaXplZFBubAgFDSR0MDcyNDA2NzMwNDQCXzYEDm1hcmdpblRvVHJhZGVyCAUNJHQwNzI0MDY3MzA0NAJfNwQWcXVvdGVBc3NldFJlc2VydmVBZnRlcggFDSR0MDcyNDA2NzMwNDQCXzgEFWJhc2VBc3NldFJlc2VydmVBZnRlcggFDSR0MDcyNDA2NzMwNDQCXzkEFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIIBQ0kdDA3MjQwNjczMDQ0A18xMAQZb3BlbkludGVyZXN0Tm90aW9uYWxBZnRlcggFDSR0MDcyNDA2NzMwNDQDXzExBA50b3RhbExvbmdBZnRlcggFDSR0MDcyNDA2NzMwNDQDXzEyBA90b3RhbFNob3J0QWZ0ZXIIBQ0kdDA3MjQwNjczMDQ0A18xMwQadG90YWxMb25nT3BlbkludGVyZXN0QWZ0ZXIIBQ0kdDA3MjQwNjczMDQ0A18xNAQbdG90YWxTaG9ydE9wZW5JbnRlcmVzdEFmdGVyCAUNJHQwNzI0MDY3MzA0NANfMTUEEmxpcXVpZGF0aW9uUGVuYWx0eQgFDSR0MDcyNDA2NzMwNDQDXzE2BA9mZWVUb0xpcXVpZGF0b3IJAGkCBRJsaXF1aWRhdGlvblBlbmFsdHkAAgQKZmVlVG9WYXVsdAkAZQIFEmxpcXVpZGF0aW9uUGVuYWx0eQUPZmVlVG9MaXF1aWRhdG9yBAphbW1CYWxhbmNlCQBlAgkBCGNiYWxhbmNlAAUSbGlxdWlkYXRpb25QZW5hbHR5BA1uZXdBbW1CYWxhbmNlAwkAZgIAAAUKYW1tQmFsYW5jZQAABQphbW1CYWxhbmNlBAtsb2NrQmFkRGVidAMJAGYCBQ9wb3NpdGlvbkJhZERlYnQAAAQLbG9ja0JhZERlYnQJAPwHBAkBDHZhdWx0QWRkcmVzcwACFWV4Y2hhbmdlRnJlZUFuZExvY2tlZAkAzAgCCQBkAgUPcG9zaXRpb25CYWREZWJ0BRJsaXF1aWRhdGlvblBlbmFsdHkFA25pbAUDbmlsAwkAAAIFC2xvY2tCYWREZWJ0BQtsb2NrQmFkRGVidAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQNuaWwDCQAAAgULbG9ja0JhZERlYnQFC2xvY2tCYWREZWJ0BAd1bnN0YWtlCQD8BwQJAQx2YXVsdEFkZHJlc3MAAg53aXRoZHJhd0xvY2tlZAkAzAgCBRJsaXF1aWRhdGlvblBlbmFsdHkFA25pbAUDbmlsAwkAAAIFB3Vuc3Rha2UFB3Vuc3Rha2UEEGRlcG9zaXRJbnN1cmFuY2UJAPwHBAkBDHZhdWx0QWRkcmVzcwACB2FkZEZyZWUFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBCnF1b3RlQXNzZXQABQpmZWVUb1ZhdWx0BQNuaWwDCQAAAgUQZGVwb3NpdEluc3VyYW5jZQUQZGVwb3NpdEluc3VyYW5jZQQObm90aWZ5Tm90aW9uYWwJAPwHBAkBDG1pbmVyQWRkcmVzcwACDm5vdGlmeU5vdGlvbmFsCQDMCAIFB190cmFkZXIJAMwIAgUXbmV3UG9zaXRpb25PcGVuTm90aW9uYWwFA25pbAUDbmlsAwkAAAIFDm5vdGlmeU5vdGlvbmFsBQ5ub3RpZnlOb3Rpb25hbAkAzggCCQDOCAIJAM4IAgMFFGlzUGFydGlhbExpcXVpZGF0aW9uCQEOdXBkYXRlUG9zaXRpb24GBQdfdHJhZGVyBQ9uZXdQb3NpdGlvblNpemUFEW5ld1Bvc2l0aW9uTWFyZ2luBRduZXdQb3NpdGlvbk9wZW5Ob3Rpb25hbAUUbmV3UG9zaXRpb25Mc3RVcGRDUEYJAQ1sYXN0VGltZXN0YW1wAAkBDmRlbGV0ZVBvc2l0aW9uAQUHX3RyYWRlcgkBCXVwZGF0ZUFtbQgFFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIFFWJhc2VBc3NldFJlc2VydmVBZnRlcgUWdG90YWxQb3NpdGlvblNpemVBZnRlcgUZb3BlbkludGVyZXN0Tm90aW9uYWxBZnRlcgUOdG90YWxMb25nQWZ0ZXIFD3RvdGFsU2hvcnRBZnRlcgUadG90YWxMb25nT3BlbkludGVyZXN0QWZ0ZXIFG3RvdGFsU2hvcnRPcGVuSW50ZXJlc3RBZnRlcgkBCHdpdGhkcmF3AggFAWkGY2FsbGVyBQ9mZWVUb0xpcXVpZGF0b3IJAQ11cGRhdGVCYWxhbmNlAQUNbmV3QW1tQmFsYW5jZQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQpwYXlGdW5kaW5nAAQEc3luYwkA/AcEBQR0aGlzAhlzeW5jVGVybWluYWxQcmljZVRvT3JhY2xlBQNuaWwFA25pbAMJAAACBQRzeW5jBQRzeW5jBBVmdW5kaW5nQmxvY2tUaW1lc3RhbXAJARluZXh0RnVuZGluZ0Jsb2NrVGltZXN0YW1wAAMDAwkAZgIFFWZ1bmRpbmdCbG9ja1RpbWVzdGFtcAkBDWxhc3RUaW1lc3RhbXAABgkBASEBCQELaW5pdGlhbGl6ZWQABgkBBnBhdXNlZAAJAAIBCQCsAgIJAKwCAgkArAICAiFJbnZhbGlkIGZ1bmRpbmcgYmxvY2sgdGltZXN0YW1wOiAJAKQDAQkBDWxhc3RUaW1lc3RhbXAAAgMgPCAJAKQDAQUVZnVuZGluZ0Jsb2NrVGltZXN0YW1wBA91bmRlcmx5aW5nUHJpY2UJAQ5nZXRPcmFjbGVQcmljZQAEDSR0MDc1MDMxNzUwOTMJAQpnZXRGdW5kaW5nAAQUc2hvcnRQcmVtaXVtRnJhY3Rpb24IBQ0kdDA3NTAzMTc1MDkzAl8xBBNsb25nUHJlbWl1bUZyYWN0aW9uCAUNJHQwNzUwMzE3NTA5MwJfMgkBDXVwZGF0ZUZ1bmRpbmcFCQBkAgUVZnVuZGluZ0Jsb2NrVGltZXN0YW1wCQEUZnVuZGluZ1BlcmlvZFNlY29uZHMACQBkAgkBI2xhdGVzdExvbmdDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAAUTbG9uZ1ByZW1pdW1GcmFjdGlvbgkAZAIJASRsYXRlc3RTaG9ydEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24ABRRzaG9ydFByZW1pdW1GcmFjdGlvbgkBBGRpdmQCBRNsb25nUHJlbWl1bUZyYWN0aW9uBQ91bmRlcmx5aW5nUHJpY2UJAQRkaXZkAgUUc2hvcnRQcmVtaXVtRnJhY3Rpb24FD3VuZGVybHlpbmdQcmljZQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARlzeW5jVGVybWluYWxQcmljZVRvT3JhY2xlAAQHX3F0QXN0UgkBBnF0QXN0UgAEB19ic0FzdFIJAQZic0FzdFIABA0kdDA3NTUyNTc1ODkxCQEUZ2V0U3luY1Rlcm1pbmFsUHJpY2UDCQEOZ2V0T3JhY2xlUHJpY2UABQdfcXRBc3RSBQdfYnNBc3RSBBNuZXdRdW90ZUFzc2V0V2VpZ2h0CAUNJHQwNzU1MjU3NTg5MQJfMQQSbmV3QmFzZUFzc2V0V2VpZ2h0CAUNJHQwNzU1MjU3NTg5MQJfMgQNbWFyZ2luVG9WYXVsdAgFDSR0MDc1NTI1NzU4OTECXzMEEG1hcmdpblRvVmF1bHRBZGoDAwkAZgIAAAUNbWFyZ2luVG9WYXVsdAkAZgIJAQNhYnMBBQ1tYXJnaW5Ub1ZhdWx0CQEIY2JhbGFuY2UABwkBAS0BCQEIY2JhbGFuY2UABQ1tYXJnaW5Ub1ZhdWx0BA1kb0V4Y2hhbmdlUG5MAwkBAiE9AgUQbWFyZ2luVG9WYXVsdEFkagAABA1kb0V4Y2hhbmdlUG5MCQD8BwQJAQx2YXVsdEFkZHJlc3MAAhVleGNoYW5nZUZyZWVBbmRMb2NrZWQJAMwIAgUQbWFyZ2luVG9WYXVsdEFkagUDbmlsBQNuaWwDCQAAAgUNZG9FeGNoYW5nZVBuTAUNZG9FeGNoYW5nZVBuTAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQNuaWwDCQAAAgUNZG9FeGNoYW5nZVBuTAUNZG9FeGNoYW5nZVBuTAkAzggCCQDOCAIJAQ11cGRhdGVCYWxhbmNlAQkAZAIJAQhjYmFsYW5jZQAFEG1hcmdpblRvVmF1bHRBZGoJARB1cGRhdGVBbW1XZWlnaHRzAgUTbmV3UXVvdGVBc3NldFdlaWdodAUSbmV3QmFzZUFzc2V0V2VpZ2h0CQEKYXBwZW5kVHdhcAEJAQRkaXZkAgkBBG11bGQCBQdfcXRBc3RSBRNuZXdRdW90ZUFzc2V0V2VpZ2h0CQEEbXVsZAIFB19ic0FzdFIFEm5ld0Jhc2VBc3NldFdlaWdodAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARBlbnN1cmVDYWxsZWRPbmNlAAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECIkludmFsaWQgc2F2ZUN1cnJlbnRUeElkIHBhcmFtZXRlcnMEBmxhc3RUeAkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzBQhrX2xhc3RUeAIAAwkBAiE9AgUGbGFzdFR4CQDYBAEIBQFpDXRyYW5zYWN0aW9uSWQJAMwIAgkBC1N0cmluZ0VudHJ5AgUIa19sYXN0VHgFBmxhc3RUeAUDbmlsCQACAQIpQ2FuIG5vdCBjYWxsIHZBTU0gbWV0aG9kcyB0d2ljZSBpbiBvbmUgdHgBaQEndmlld19jYWxjUmVtYWluTWFyZ2luV2l0aEZ1bmRpbmdQYXltZW50AQdfdHJhZGVyBARzeW5jCQD8BwQFBHRoaXMCGXN5bmNUZXJtaW5hbFByaWNlVG9PcmFjbGUFA25pbAUDbmlsAwkAAAIFBHN5bmMFBHN5bmMEDSR0MDc3MDUwNzcxNzQJAQtnZXRQb3NpdGlvbgEFB190cmFkZXIEDHBvc2l0aW9uU2l6ZQgFDSR0MDc3MDUwNzcxNzQCXzEEDnBvc2l0aW9uTWFyZ2luCAUNJHQwNzcwNTA3NzE3NAJfMgQDcG9uCAUNJHQwNzcwNTA3NzE3NAJfMwQRcG9zaXRpb25Mc3RVcGRDUEYIBQ0kdDA3NzA1MDc3MTc0Al80BBFwb3NpdGlvblRpbWVzdGFtcAgFDSR0MDc3MDUwNzcxNzQCXzUEDSR0MDc3MTc3NzcyNzgJASNnZXRQb3NpdGlvbk5vdGlvbmFsQW5kVW5yZWFsaXplZFBubAIFB190cmFkZXIFD1BOTF9PUFRJT05fU1BPVAQQcG9zaXRpb25Ob3Rpb25hbAgFDSR0MDc3MTc3NzcyNzgCXzEEDXVucmVhbGl6ZWRQbmwIBQ0kdDA3NzE3Nzc3Mjc4Al8yBA0kdDA3NzI4MTc3NTA1CQEwY2FsY1JlbWFpbk1hcmdpbldpdGhGdW5kaW5nUGF5bWVudEFuZFJvbGxvdmVyRmVlBQUMcG9zaXRpb25TaXplBQ5wb3NpdGlvbk1hcmdpbgURcG9zaXRpb25Mc3RVcGRDUEYFEXBvc2l0aW9uVGltZXN0YW1wBQ11bnJlYWxpemVkUG5sBAxyZW1haW5NYXJnaW4IBQ0kdDA3NzI4MTc3NTA1Al8xBAdiYWREZWJ0CAUNJHQwNzcyODE3NzUwNQJfMgQOZnVuZGluZ1BheW1lbnQIBQ0kdDA3NzI4MTc3NTA1Al8zBAtyb2xsb3ZlckZlZQgFDSR0MDc3MjgxNzc1MDUCXzQJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQEBcwEFDHJlbWFpbk1hcmdpbgkBAXMBBQ5mdW5kaW5nUGF5bWVudAkBAXMBCQEOZ2V0TWFyZ2luUmF0aW8BBQdfdHJhZGVyCQEBcwEFDXVucmVhbGl6ZWRQbmwJAQFzAQUHYmFkRGVidAkBAXMBBRBwb3NpdGlvbk5vdGlvbmFsCQEBcwEFC3JvbGxvdmVyRmVlCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBFXZpZXdfZ2V0UGVnQWRqdXN0Q29zdAEGX3ByaWNlBAdfcXRBc3RSCQEGcXRBc3RSAAQHX2JzQXN0UgkBBmJzQXN0UgAEBnJlc3VsdAkBFGdldFN5bmNUZXJtaW5hbFByaWNlAwUGX3ByaWNlBQdfcXRBc3RSBQdfYnNBc3RSCQACAQkApAMBCAUGcmVzdWx0Al8zAWkBGHZpZXdfZ2V0VGVybWluYWxBbW1QcmljZQAEDSR0MDc3OTQxNzgwMjIJARNnZXRUZXJtaW5hbEFtbVN0YXRlAAQZdGVybWluYWxRdW90ZUFzc2V0UmVzZXJ2ZQgFDSR0MDc3OTQxNzgwMjICXzEEGHRlcm1pbmFsQmFzZUFzc2V0UmVzZXJ2ZQgFDSR0MDc3OTQxNzgwMjICXzIEBXByaWNlCQEEZGl2ZAIJAQRtdWxkAgUZdGVybWluYWxRdW90ZUFzc2V0UmVzZXJ2ZQkBBnF0QXN0VwAJAQRtdWxkAgUYdGVybWluYWxCYXNlQXNzZXRSZXNlcnZlCQEGYnNBc3RXAAkAAgEJAKQDAQUFcHJpY2UBaQEPdmlld19nZXRGdW5kaW5nAAQPdW5kZXJseWluZ1ByaWNlCQEOZ2V0T3JhY2xlUHJpY2UABA0kdDA3ODIzNzc4Mjk5CQEKZ2V0RnVuZGluZwAEFHNob3J0UHJlbWl1bUZyYWN0aW9uCAUNJHQwNzgyMzc3ODI5OQJfMQQTbG9uZ1ByZW1pdW1GcmFjdGlvbggFDSR0MDc4MjM3NzgyOTkCXzIEC2xvbmdGdW5kaW5nCQEEZGl2ZAIFE2xvbmdQcmVtaXVtRnJhY3Rpb24FD3VuZGVybHlpbmdQcmljZQQMc2hvcnRGdW5kaW5nCQEEZGl2ZAIFFHNob3J0UHJlbWl1bUZyYWN0aW9uBQ91bmRlcmx5aW5nUHJpY2UJAAIBCQCsAgIJAKwCAgkArAICCQEBcwEFC2xvbmdGdW5kaW5nCQEBcwEFDHNob3J0RnVuZGluZwkBAXMBCQEQZ2V0VHdhcFNwb3RQcmljZQAJAQFzAQkBDmdldE9yYWNsZVByaWNlAAFpARBjb21wdXRlU3BvdFByaWNlAAQEc3luYwkA/AcEBQR0aGlzAhlzeW5jVGVybWluYWxQcmljZVRvT3JhY2xlBQNuaWwFA25pbAMJAAACBQRzeW5jBQRzeW5jBAZyZXN1bHQJAQxnZXRTcG90UHJpY2UACQCUCgIFA25pbAUGcmVzdWx0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBH2NvbXB1dGVGZWVGb3JUcmFkZXJXaXRoQXJ0aWZhY3QCB190cmFkZXILX2FydGlmYWN0SWQEBnJlc3VsdAkBGGdldEZvclRyYWRlcldpdGhBcnRpZmFjdAIFB190cmFkZXIFC19hcnRpZmFjdElkCQCUCgIFA25pbAUGcmVzdWx0AQJ0eAEGdmVyaWZ5AAQOY29vcmRpbmF0b3JTdHIJAJ0IAgUEdGhpcwUUa19jb29yZGluYXRvckFkZHJlc3MDCQEJaXNEZWZpbmVkAQUOY29vcmRpbmF0b3JTdHIEBWFkbWluCQCdCAIJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQV2YWx1ZQEFDmNvb3JkaW5hdG9yU3RyBQ9rX2FkbWluX2FkZHJlc3MDCQEJaXNEZWZpbmVkAQUFYWRtaW4JAQt2YWx1ZU9yRWxzZQIJAJsIAgkBEUBleHRyTmF0aXZlKDEwNjIpAQkBBXZhbHVlAQUFYWRtaW4JAKwCAgkArAICCQCsAgICB3N0YXR1c18JAKUIAQUEdGhpcwIBXwkA2AQBCAUCdHgCaWQHCQACAQIudW5hYmxlIHRvIHZlcmlmeTogYWRtaW4gbm90IHNldCBpbiBjb29yZGluYXRvcgkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAgFAnR4D3NlbmRlclB1YmxpY0tlecpxFRg=", "height": 2434847, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 6xqywtqazTsapZYHsX25FKBj9MqVodqsrugPa7aFaXrn Next: 3oCRZkPUNrSNC5qk6VrmnuQfcmxBau4e9DxSRECnarfX Diff:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let a = "k_ora_key"
4+let a = "k_baseOracle"
55
6-let b = "k_ora_block_key"
6+let b = "k_quoteOracle"
77
8-let c = "k_ora_open_key"
8+let c = "k_balance"
99
10-let d = "k_ora"
10+let d = "k_sequence"
1111
12-let e = "k_balance"
12+let e = "k_positionSize"
1313
14-let f = "k_sequence"
14+let f = "k_positionMargin"
1515
16-let g = "k_positionSize"
16+let g = "k_positionOpenNotional"
1717
18-let h = "k_positionMargin"
18+let h = "k_positionFraction"
1919
20-let i = "k_positionOpenNotional"
20+let i = "k_positionSequence"
2121
22-let j = "k_positionFraction"
22+let j = "k_positionAsset"
2323
24-let k = "k_positionSequence"
24+let k = "k_positionFee"
2525
26-let l = "k_positionAsset"
26+let l = "k_positionTimestamp"
2727
28-let m = "k_positionFee"
28+let m = "k_initialized"
2929
30-let n = "k_positionTimestamp"
30+let n = "k_paused"
3131
32-let o = "k_initialized"
32+let o = "k_closeOnly"
3333
34-let p = "k_paused"
34+let p = "k_fee"
3535
36-let q = "k_closeOnly"
36+let q = "k_rollover_fee"
3737
38-let r = "k_fee"
38+let r = "k_fundingPeriod"
3939
40-let s = "k_rollover_fee"
40+let s = "k_initMarginRatio"
4141
42-let t = "k_fundingPeriod"
42+let t = "k_mmr"
4343
44-let u = "k_initMarginRatio"
44+let u = "k_liquidationFeeRatio"
4545
46-let v = "k_mmr"
46+let v = "k_partLiquidationRatio"
4747
48-let w = "k_liquidationFeeRatio"
48+let w = "k_spreadLimit"
4949
50-let x = "k_partLiquidationRatio"
50+let x = "k_maxPriceImpact"
5151
52-let y = "k_spreadLimit"
52+let y = "k_maxPriceSpread"
5353
54-let z = "k_maxPriceImpact"
54+let z = "k_maxOpenNotional"
5555
56-let A = "k_maxPriceSpread"
56+let A = "k_feeToStakersPercent"
5757
58-let B = "k_maxOpenNotional"
58+let B = "k_maxOracleDelay"
5959
60-let C = "k_feeToStakersPercent"
60+let C = "k_lastDataStr"
6161
62-let D = "k_maxOracleDelay"
62+let D = "k_lastMinuteId"
6363
64-let E = "k_lastDataStr"
64+let E = "k_twapDataLastCumulativePrice"
6565
66-let F = "k_lastMinuteId"
66+let F = "k_twapDataLastPrice"
6767
68-let G = "k_twapDataLastCumulativePrice"
68+let G = "k_twapDataPreviousMinuteId"
6969
70-let H = "k_twapDataLastPrice"
70+let H = "k_latestLongPremiumFraction"
7171
72-let I = "k_twapDataPreviousMinuteId"
72+let I = "k_latestShortPremiumFraction"
7373
74-let J = "k_latestLongPremiumFraction"
74+let J = "k_nextFundingBlockMinTimestamp"
7575
76-let K = "k_latestShortPremiumFraction"
76+let K = "k_longFundingRate"
7777
78-let L = "k_nextFundingBlockMinTimestamp"
78+let L = "k_shortFundingRate"
7979
80-let M = "k_longFundingRate"
80+let M = "k_qtAstR"
8181
82-let N = "k_shortFundingRate"
82+let N = "k_bsAstR"
8383
84-let O = "k_qtAstR"
84+let O = "k_qtAstW"
8585
86-let P = "k_bsAstR"
86+let P = "k_bsAstW"
8787
88-let Q = "k_qtAstW"
88+let Q = "k_totalPositionSize"
8989
90-let R = "k_bsAstW"
90+let R = "k_totalLongPositionSize"
9191
92-let S = "k_totalPositionSize"
92+let S = "k_totalShortPositionSize"
9393
94-let T = "k_totalLongPositionSize"
94+let T = "k_openInterestNotional"
9595
96-let U = "k_totalShortPositionSize"
96+let U = "k_openInterestShort"
9797
98-let V = "k_openInterestNotional"
98+let V = "k_openInterestLong"
9999
100-let W = "k_openInterestShort"
100+let W = "k_lastTx"
101101
102-let X = "k_openInterestLong"
102+let X = "k_coordinatorAddress"
103103
104-let Y = "k_coordinatorAddress"
104+let Y = "k_vault_address"
105105
106-let Z = "k_vault_address"
106+let Z = "k_admin_address"
107107
108-let aa = "k_admin_address"
108+let aa = "k_quote_asset"
109109
110-let ab = "k_admin_public_key"
110+let ab = "k_quote_staking"
111111
112-let ac = "k_quote_asset"
112+let ac = "k_staking_address"
113113
114-let ad = "k_quote_staking"
114+let ad = "k_miner_address"
115115
116-let ae = "k_staking_address"
116+let ae = "k_orders_address"
117117
118-let af = "k_miner_address"
118+let af = "k_referral_address"
119119
120-let ag = "k_orders_address"
120+let ag = "k_exchange_address"
121121
122-let ah = "k_referral_address"
122+let ah = "k_nft_manager_address"
123123
124-let ai = "k_exchange_address"
125-
126-let aj = "k_nft_manager_address"
127-
128-func ak (al,am) = ((al + "_") + am)
124+func ai (aj,ak) = ((aj + "_") + ak)
129125
130126
131-func an () = valueOrErrorMessage(addressFromString(getStringValue(this, Y)), "Coordinator not set")
127+func al () = valueOrErrorMessage(addressFromString(getStringValue(this, X)), "Coordinator not set")
132128
133129
134-func ao () = addressFromString(getStringValue(an(), aa))
130+func am () = addressFromString(getStringValue(al(), Z))
135131
136132
137-func ap () = fromBase58String(getStringValue(an(), ab))
133+func an () = fromBase58String(getStringValue(al(), aa))
138134
139135
140-func aq () = fromBase58String(getStringValue(an(), ac))
136+func ao () = valueOrErrorMessage(addressFromString(getStringValue(al(), ab)), "Quote asset staking not set")
141137
142138
143-func ar () = valueOrErrorMessage(addressFromString(getStringValue(an(), ad)), "Quote asset staking not set")
139+func ap () = valueOrErrorMessage(addressFromString(getStringValue(al(), ac)), "Staking not set")
144140
145141
146-func as () = valueOrErrorMessage(addressFromString(getStringValue(an(), ae)), "Staking not set")
142+func aq () = valueOrErrorMessage(addressFromString(getStringValue(al(), Y)), "Vault not set")
147143
148144
149-func at () = valueOrErrorMessage(addressFromString(getStringValue(an(), Z)), "Vault not set")
145+func ar () = valueOrErrorMessage(addressFromString(getStringValue(al(), ad)), "Miner not set")
150146
151147
152-func au () = valueOrErrorMessage(addressFromString(getStringValue(an(), af)), "Miner not set")
148+func as () = valueOrErrorMessage(addressFromString(getStringValue(al(), ae)), "Orders not set")
153149
154150
155-func av () = valueOrErrorMessage(addressFromString(getStringValue(an(), ag)), "Orders not set")
151+func at () = valueOrErrorMessage(addressFromString(getStringValue(al(), af)), "Referral not set")
156152
157153
158-func aw () = valueOrErrorMessage(addressFromString(getStringValue(an(), ah)), "Referral not set")
154+func au () = valueOrErrorMessage(addressFromString(getStringValue(al(), ah)), "NFT Manager not set")
159155
160156
161-func ax () = valueOrErrorMessage(addressFromString(getStringValue(an(), aj)), "NFT Manager not set")
157+let av = "k_token_param"
158+
159+let aw = "k_token_type"
160+
161+let ax = "fee_reduction"
162+
163+let ay = 1
164+
165+let az = 2
166+
167+let aA = 15
168+
169+let aB = 1000
170+
171+let aC = 6
172+
173+let aD = (1 * (((((10 * 10) * 10) * 10) * 10) * 10))
174+
175+let aE = (525600 * aD)
176+
177+let aF = (86400 * aD)
178+
179+let aG = 1
180+
181+let aH = 2
182+
183+func aI (aJ) = (toString(aJ) + ",")
162184
163185
164-func ay () = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(an(), ai), "No swap address")), "Invalid swap address")
186+func aK (aJ,aL) = fraction(aJ, aD, aL, HALFEVEN)
165187
166188
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) + ",")
189+func aM (aJ,aL) = fraction(aJ, aL, aD, HALFEVEN)
198190
199191
200-func aQ (aP,aR) = fraction(aP, aI, aR, HALFEVEN)
192+func aN (aJ,aL) = fraction(aJ, toBigInt(aD), aL, HALFEVEN)
201193
202194
203-func aS (aP,aR) = fraction(aP, aR, aI, HALFEVEN)
195+func aO (aJ,aL) = fraction(aJ, aL, toBigInt(aD), HALFEVEN)
204196
205197
206-func aT (aP) = sqrt(aP, aH, aH, HALFEVEN)
198+func aP (aJ) = if ((aJ > 0))
199+ then aJ
200+ else -(aJ)
207201
208202
209-func aU (aP,aR) = pow(aP, aH, aR, aH, aH, HALFEVEN)
203+func aQ (aJ,aL) = if ((aJ >= aL))
204+ then aJ
205+ else aL
210206
211207
212-func aV (aP,aR) = fraction(aP, toBigInt(aI), aR, HALFEVEN)
208+func aR (aS) = if ((size(aS) == 0))
209+ then ""
210+ else makeString(aS, ",")
213211
214212
215-func aW (aP,aR) = fraction(aP, aR, toBigInt(aI), HALFEVEN)
213+func aT (aU) = if ((aU == ""))
214+ then nil
215+ else split(aU, ",")
216216
217217
218-func aX (aP) = sqrtBigInt(aP, aH, aH, HALFEVEN)
218+func aV (aS,aW,aX) = if ((size(aS) > aW))
219+ then (removeByIndex(aS, 0) :+ aX)
220+ else (aS :+ aX)
219221
220222
221-func aY (aP,aR) = pow(aP, aH, aR, aH, aH, HALFEVEN)
223+func aY (aZ) = valueOrErrorMessage(getInteger(this, aZ), ("no value for " + aZ))
222224
223225
224-func aZ (aP) = if ((aP > 0))
225- then aP
226- else -(aP)
226+func ba (aZ,bb) = valueOrElse(getInteger(this, aZ), bb)
227227
228228
229-func ba (aP,aR) = if ((aP >= aR))
230- then aP
231- else aR
232-
233-
234-func bb (bc) = if ((size(bc) == 0))
235- then ""
236- else makeString(bc, ",")
237-
238-
239-func bd (be) = if ((be == ""))
240- then nil
241- else split(be, ",")
242-
243-
244-func bf (bc,bg,bh) = if ((size(bc) > bg))
245- then (removeByIndex(bc, 0) :+ bh)
246- else (bc :+ bh)
247-
248-
249-func bi (bj) = valueOrErrorMessage(getInteger(this, bj), ("no value for " + bj))
250-
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
229+func bc (ak,aj) = {
230+ let bd = valueOrErrorMessage(getString(ak, aj), ("No value for key " + aj))
231+ bd
258232 }
259233
260234
261-func bo (am,al) = {
262- let bn = valueOrErrorMessage(getInteger(am, al), ("No value for key " + al))
263- bn
235+func be (ak,aj) = {
236+ let bd = valueOrErrorMessage(getInteger(ak, aj), ("No value for key " + aj))
237+ bd
264238 }
265239
266240
267-func bp () = bi(e)
241+func bf () = aY(c)
268242
269243
270-func bq () = bi(r)
244+func bg () = aY(p)
271245
272246
273-func br () = bi(s)
247+func bh () = aY(q)
274248
275249
276-func bs () = bi(u)
250+func bi () = aY(s)
277251
278252
279-func bt () = bi(O)
253+func bj () = aY(M)
280254
281255
282-func bu () = bi(P)
256+func bk () = aY(N)
283257
284258
285-func bv () = bk(Q, aI)
259+func bl () = ba(O, aD)
286260
287261
288-func bw () = bk(R, aI)
262+func bm () = ba(P, aD)
289263
290264
291-func bx () = bi(S)
265+func bn () = aY(Q)
292266
293267
294-func by () = bi(V)
268+func bo () = aY(T)
295269
296270
297-func bz () = bi(W)
271+func bp () = aY(U)
298272
299273
300-func bA () = bi(X)
274+func bq () = aY(V)
301275
302276
303-func bB () = bi(L)
277+func br () = aY(J)
304278
305279
306-func bC () = bi(t)
280+func bs () = aY(r)
307281
308282
309-func bD () = (bC() * aI)
283+func bt () = (bs() * aD)
310284
311285
312-func bE () = (bC() * aG)
286+func bu () = (bs() * aB)
313287
314288
315-func bF () = bi(v)
289+func bv () = aY(t)
316290
317291
318-func bG () = bi(w)
292+func bw () = aY(u)
319293
320294
321-func bH () = bi(x)
295+func bx () = aY(v)
322296
323297
324-func bI () = bi(y)
298+func by () = aY(w)
325299
326300
327-func bJ () = bi(z)
301+func bz () = aY(x)
328302
329303
330-func bK () = bi(A)
304+func bA () = aY(y)
331305
332306
333-func bL () = bi(B)
307+func bB () = aY(z)
334308
335309
336-func bM () = bi(J)
310+func bC () = aY(H)
337311
338312
339-func bN () = bi(K)
313+func bD () = aY(I)
340314
341315
342-func bO () = bi(U)
316+func bE () = aY(S)
343317
344318
345-func bP () = bi(T)
319+func bF () = aY(R)
346320
347321
348-func bQ () = bk(f, 0)
322+func bG () = ba(d, 0)
349323
350324
351-func bR () = bi(C)
325+func bH () = aY(A)
352326
353327
354-func bS () = bi(D)
328+func bI () = aY(B)
355329
356330
357-func bT () = lastBlock.timestamp
331+func bJ () = lastBlock.timestamp
358332
359333
360-func bU (bV) = valueOrElse(getString(av(), "k_sender"), toString(bV.caller))
334+func bK (bL) = valueOrElse(getString(as(), "k_sender"), toString(bL.caller))
361335
362336
363-func bW (bX,bY,bZ) = {
364- let ca = (bX - bY)
365- if (if (bZ)
366- then (0 > ca)
337+func bM (bN,bO,bP) = {
338+ let bQ = (bN - bO)
339+ if (if (bP)
340+ then (0 > bQ)
367341 else false)
368- then throw(((("Invalid margin: " + toString(bX)) + " < ") + toString(bY)))
369- else if (if (!(bZ))
370- then (ca >= 0)
342+ then throw(((("Invalid margin: " + toString(bN)) + " < ") + toString(bO)))
343+ else if (if (!(bP))
344+ then (bQ >= 0)
371345 else false)
372- then throw(((("Invalid margin: " + toString(bX)) + " > ") + toString(bY)))
346+ then throw(((("Invalid margin: " + toString(bN)) + " > ") + toString(bO)))
373347 else true
374348 }
375349
376350
377-func cb (cc) = if ((cc == 0))
351+func bR (bS) = if ((bS == 0))
378352 then throw("Should not be called with _positionSize == 0")
379- else if ((cc > 0))
380- then bM()
381- else bN()
353+ else if ((bS > 0))
354+ then bC()
355+ else bD()
382356
383357
384-func cd (ce) = {
385- let cf = getInteger(this, ak(g, ce))
386- let cg = cf
387- if ($isInstanceOf(cg, "Int"))
358+func bT (bU) = {
359+ let bV = getInteger(this, ai(e, bU))
360+ let bW = bV
361+ if ($isInstanceOf(bW, "Int"))
388362 then {
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)))
363+ let bX = bW
364+ $Tuple5(bX, getIntegerValue(this, ai(f, bU)), getIntegerValue(this, ai(g, bU)), getIntegerValue(this, ai(h, bU)), getIntegerValue(this, ai(l, bU)))
391365 }
392366 else $Tuple5(0, 0, 0, 0, 0)
393367 }
394368
395369
396-func ci (ce) = {
397- let cj = getString(this, ak(l, ce))
398- let cg = cj
399- if ($isInstanceOf(cg, "String"))
370+func bY (bU) = {
371+ let bZ = getString(this, ai(j, bU))
372+ let bW = bZ
373+ if ($isInstanceOf(bW, "String"))
400374 then {
401- let ck = cg
402- ck
375+ let ca = bW
376+ ca
403377 }
404- else toBase58String(aq())
378+ else toBase58String(an())
405379 }
406380
407381
408-func cl (ce) = {
409- let cm = getInteger(this, ak(m, ce))
410- let cg = cm
411- if ($isInstanceOf(cg, "Int"))
382+func cb (bU) = {
383+ let cc = getInteger(this, ai(k, bU))
384+ let bW = cc
385+ if ($isInstanceOf(bW, "Int"))
412386 then {
413- let cn = cg
414- cn
387+ let cd = bW
388+ cd
415389 }
416- else bq()
390+ else bg()
417391 }
418392
419393
420-func co (ce) = if ((cd(ce)._1 == 0))
394+func ce (bU) = if ((bT(bU)._1 == 0))
421395 then throw("No open position")
422396 else true
397+
398+
399+func cf (cg) = {
400+ let ch = getString(this, cg)
401+ if (if (isDefined(ch))
402+ then (value(ch) != "")
403+ else false)
404+ then {
405+ let ci = split(value(ch), ",")
406+ let cj = valueOrErrorMessage(addressFromString(ci[0]), ("Invalid oracle address in: " + value(ch)))
407+ let ck = ci[1]
408+ let cl = ci[2]
409+ let cm = ci[3]
410+ $Tuple4(cj, ck, cl, cm)
411+ }
412+ else unit
413+ }
414+
415+
416+func cn () = valueOrElse(getBoolean(this, m), false)
417+
418+
419+func co () = valueOrElse(getBoolean(this, n), false)
423420
424421
425422 func cp () = valueOrElse(getBoolean(this, o), false)
426423
427424
428-func cq () = valueOrElse(getBoolean(this, p), false)
429-
430-
431-func cr () = valueOrElse(getBoolean(this, q), false)
432-
433-
434-func cs (ct,cu,cv) = if (ct)
425+func cq (cr,cs,ct) = if (cr)
435426 then {
436- let cw = (bu() - cv)
437- if ((0 >= cw))
427+ let cu = (bk() - ct)
428+ if ((0 >= cu))
438429 then throw("Tx lead to base asset reserve <= 0, revert")
439- else $Tuple3((bt() + cu), cw, (bx() + cv))
430+ else $Tuple3((bj() + cs), cu, (bn() + ct))
440431 }
441432 else {
442- let cx = (bt() - cu)
443- if ((0 >= cx))
433+ let cv = (bj() - cs)
434+ if ((0 >= cv))
444435 then throw("Tx lead to base quote reserve <= 0, revert")
445- else $Tuple3(cx, (bu() + cv), (bx() - cv))
436+ else $Tuple3(cv, (bk() + ct), (bn() - ct))
446437 }
447438
448439
449-func cy (cz,cA) = {
450- let cB = toBigInt(cz)
451- let cC = toBigInt(cA)
452- aW(cB, cC)
440+func cw (cx,cy) = {
441+ let cz = toBigInt(cx)
442+ let cA = toBigInt(cy)
443+ aO(cz, cA)
453444 }
454445
455446
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)
447+func cB (cr,cs) = {
448+ let cx = bj()
449+ let cy = bk()
450+ let cC = bl()
451+ let cD = bm()
452+ let cE = aK(cs, cC)
453+ let aZ = cw(cx, cy)
454+ let cF = if (cr)
455+ then (cx + cE)
456+ else (cx - cE)
457+ let cG = toInt(aN(aZ, toBigInt(cF)))
458+ let cH = aP((cG - cy))
459+ let cI = if (cr)
460+ then cH
461+ else -(cH)
462+ let cJ = cq(cr, cE, cH)
463+ let cK = cJ._1
464+ let cL = cJ._2
465+ let cM = cJ._3
466+ let cN = aK(aM(cx, cC), aM(cy, cD))
467+ let cO = aK(cs, cH)
468+ let cP = aP((cN - cO))
469+ let cQ = (aD - aK(cN, (cN + cP)))
470+ let cR = bz()
471+ if ((cQ > cR))
472+ then throw(((((((((((((("Price impact " + toString(cQ)) + " > max price impact ") + toString(cR)) + " before quote asset: ") + toString(cx)) + " before base asset: ") + toString(cy)) + " quote asset amount to exchange: ") + toString(cs)) + " price before: ") + toString(cN)) + " marketPrice: ") + toString(cO)))
473+ else $Tuple4(cI, cK, cL, cM)
483474 }
484475
485476
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
477+func cS (cT,cU) = {
478+ let cV = ((((bJ() - cU) / 1000) / 60) * aD)
479+ let cW = aK(aM(aM(cT, cV), bh()), aE)
480+ cW
490481 }
491482
492483
493-func cZ (da,cV,db,cW,dc) = {
494- let dd = if ((da != 0))
484+func cX (cY,cT,cZ,cU,da) = {
485+ let db = if ((cY != 0))
495486 then {
496- let de = cb(da)
497- aS((de - db), da)
487+ let dc = bR(cY)
488+ aM((dc - cZ), cY)
498489 }
499490 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)
491+ let cW = cS(cT, cU)
492+ let dd = (((da - cW) - db) + cT)
493+ let de = if ((0 > dd))
494+ then $Tuple2(0, aP(dd))
495+ else $Tuple2(aP(dd), 0)
496+ let df = de._1
497+ let dg = de._2
498+ $Tuple4(df, dg, db, cW)
508499 }
509500
510501
511-func dj (ct,cv,dk,dl,dm,dn,do) = {
512- let cP = aQ(aS(dl, dm), aS(dn, do))
513- if ((cv == 0))
502+func dh (cr,ct,di,dj,dk,dl,dm) = {
503+ let cN = aK(aM(dj, dk), aM(dl, dm))
504+ if ((ct == 0))
514505 then throw("Invalid base asset amount")
515506 else {
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
507+ let aZ = cw(dj, dl)
508+ let dn = if (cr)
509+ then (dl + ct)
510+ else (dl - ct)
511+ let do = toInt(aN(aZ, toBigInt(dn)))
512+ let dp = aP((do - dj))
513+ let dq = aM(dp, dk)
514+ let cR = bz()
515+ let dr = cq(!(cr), dp, ct)
516+ let cK = dr._1
517+ let cL = dr._2
518+ let cM = dr._3
519+ let cO = aK(dq, ct)
520+ let cP = aP((cN - cO))
521+ let cQ = (aD - aK(cN, (cN + cP)))
522+ if (if ((cQ > cR))
523+ then di
533524 else false)
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)
525+ then throw(((((((((((((("Price impact " + toString(cQ)) + " > max price impact ") + toString(cR)) + " before quote asset: ") + toString(dj)) + " before base asset: ") + toString(dl)) + " base asset amount to exchange: ") + toString(ct)) + " price before: ") + toString(cN)) + " market price: ") + toString(cO)))
526+ else $Tuple7(dq, cK, cL, cM, (bF() - (if (cr)
527+ then aP(ct)
528+ else 0)), (bE() - (if (!(cr))
529+ then aP(ct)
530+ else 0)), cQ)
540531 }
541532 }
542533
543534
544-func du (ct,cv,dk) = dj(ct, cv, dk, bt(), bv(), bu(), bw())
535+func ds (cr,ct,di) = dh(cr, ct, di, bj(), bl(), bk(), bm())
545536
546537
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 != ""))
538+func dt (du,ck,cl) = {
539+ let dv = valueOrErrorMessage(getInteger(du, ck), ((("Can not get oracle price. Oracle: " + toString(du)) + " key: ") + ck))
540+ if ((cl != ""))
553541 then {
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
542+ let dw = lastBlock.height
543+ let dx = valueOrErrorMessage(getInteger(du, cl), ((("Can not get oracle block. Oracle: " + toString(du)) + " key: ") + cl))
544+ if (((dw - dx) > bI()))
545+ then throw(((("Oracle stale data. Last oracle block: " + toString(dx)) + " current block: ") + toString(dw)))
546+ else dv
559547 }
560- else dy
548+ else dv
561549 }
562550
563551
564-func dC () = {
565- let dw = valueOrErrorMessage(addressFromString(getStringValue(this, d)), "")
566- let dD = valueOrElse(getString(this, c), "")
567- if ((dD != ""))
552+func dy () = {
553+ let dz = valueOrErrorMessage(cf(a), "No base asset oracle data")
554+ let dA = dt(dz._1, dz._2, dz._3)
555+ let dB = cf(b)
556+ let dC = if (isDefined(dB))
568557 then {
569- let dE = valueOrErrorMessage(getBoolean(dw, dD), ((("Can not get oracle is open/closed. Oracle: " + toString(dw)) + " key: ") + dD))
570- !(dE)
558+ let dD = value(dB)
559+ dt(dD._1, dD._2, dD._3)
560+ }
561+ else aD
562+ aK(dA, dC)
563+ }
564+
565+
566+func dE () = {
567+ let dz = valueOrErrorMessage(cf(a), "No base asset oracle data")
568+ let du = dz._1
569+ let cm = dz._4
570+ if ((cm != ""))
571+ then {
572+ let dF = valueOrErrorMessage(getBoolean(du, cm), ((("Can not get oracle is open/closed. Oracle: " + toString(du)) + " key: ") + cm))
573+ !(dF)
571574 }
572575 else false
573576 }
574577
575578
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
579+func dG (dH,dj,dl,cC,cD) = {
580+ let dI = aK(aM(dj, cC), aM(dl, cD))
581+ let dJ = aK((dH + dI), (2 * aD))
582+ let dG = aK(aP((dH - dI)), dJ)
583+ dG
581584 }
582585
583586
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)
587+func dK (dj,dl) = {
588+ let dL = dy()
589+ let cC = bl()
590+ let cD = bm()
591+ let dM = dG(dL, bj(), bk(), cC, cD)
592+ let dN = dG(dL, dj, dl, cC, cD)
593+ if (if ((dN > bA()))
594+ then (dN > dM)
592595 else false)
593- then throw(((("Price spread " + toString(dM)) + " > max price spread ") + toString(bK())))
596+ then throw(((("Price spread " + toString(dN)) + " > max price spread ") + toString(bA())))
594597 else true
595598 }
596599
597600
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)))
601+func dO (dP,dQ) = {
602+ let dR = bB()
603+ if ((dP > dR))
604+ then throw(((("Long open notional " + toString(dP)) + " > max open notional ") + toString(dR)))
605+ else if ((dQ > dR))
606+ then throw(((("Short open notional " + toString(dQ)) + " > max open notional ") + toString(dR)))
604607 else true
605608 }
606609
607610
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))
611+func dS () = {
612+ let dj = bj()
613+ let dl = bk()
614+ let cC = bl()
615+ let cD = bm()
616+ aK(aM(dj, cC), aM(dl, cD))
614617 }
615618
616619
617-func dS () = {
618- let dK = dv()
619- let dT = dR()
620- (aQ(aZ((dK - dT)), dK) > bI())
620+func dT () = {
621+ let dL = dy()
622+ let dU = dS()
623+ (aK(aP((dL - dU)), dL) > by())
621624 }
622625
623626
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))
627+func dV (bS,dW,dj,dk,dl,dm) = {
628+ let dX = aP(bS)
629+ let dY = (0 > bS)
630+ let dZ = if ((dW == aG))
628631 then {
629- let dZ = dj(!(dX), dW, false, dl, dm, dn, do)._1
630- dZ
632+ let ea = dh(!(dY), dX, false, dj, dk, dl, dm)._1
633+ ea
631634 }
632- else aS(dW, dv())
633- dY
635+ else aM(dX, dy())
636+ dZ
634637 }
635638
636639
637-func ea (cc,eb,dl,dm,dn,do,dV) = if ((cc == 0))
640+func eb (bS,ec,dj,dk,dl,dm,dW) = if ((bS == 0))
638641 then throw("Invalid position size")
639642 else {
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)
643+ let dY = (0 > bS)
644+ let dZ = dV(bS, dW, dj, dk, dl, dm)
645+ let ed = if (dY)
646+ then (ec - dZ)
647+ else (dZ - ec)
648+ $Tuple2(dZ, ed)
646649 }
647650
648651
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)
652+func ee (bU,dW) = {
653+ let ef = bT(bU)
654+ let bX = ef._1
655+ let eg = ef._2
656+ let eh = ef._3
657+ let ei = ef._4
658+ eb(bX, eh, bj(), bl(), bk(), bm(), dW)
656659 }
657660
658661
659-func ei (ej,ek,el) = aQ((ej - ek), el)
662+func ej (ek,el,em) = aK((ek - el), em)
660663
661664
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)
665+func en (bU,dW) = {
666+ let eo = bT(bU)
667+ let bX = eo._1
668+ let eg = eo._2
669+ let ep = eo._3
670+ let eq = eo._4
671+ let er = eo._5
672+ let es = ee(bU, dW)
673+ let dZ = es._1
674+ let ed = es._2
675+ let et = cX(bX, eg, eq, er, ed)
676+ let df = et._1
677+ let dg = et._2
678+ ej(df, dg, dZ)
676679 }
677680
678681
679-func et (ce) = em(ce, aM)
682+func eu (bU) = en(bU, aG)
680683
681684
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())
685+func ev (bU,bS) = {
686+ let ew = aQ(bx(), (aD - aK(eu(bU), bv())))
687+ let ex = aM(aP(bS), ew)
688+ let ey = ds((bS > 0), ex, false)
689+ let ez = ey._1
690+ let cQ = ey._7
691+ if ((bz() > cQ))
692+ then ex
693+ else aM(aP(bS), bx())
691694 }
692695
693696
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)
697+func eA (bU,eB,eC,eD,eE,di,eF) = {
698+ let eG = bT(bU)
699+ let eH = eG._1
700+ let eI = eG._2
701+ let eJ = eG._3
702+ let eK = eG._4
703+ let eL = eG._5
704+ let eM = (eH > 0)
705+ let eN = aP(eH)
706+ if (if ((eN >= eB))
707+ then (eB > 0)
705708 else false)
706709 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))
710+ let eO = (eN > eB)
711+ let eP = ds((eH > 0), eB, di)
712+ let eQ = eP._1
713+ let cF = eP._2
714+ let cG = eP._3
715+ let eR = eP._4
716+ let eS = if ((eH > 0))
717+ then -(eB)
718+ else eB
719+ let eT = ee(bU, aG)
720+ let eU = eT._1
721+ let ed = eT._2
722+ let eV = aK(aP(eS), eN)
723+ let eW = aM(ed, eV)
724+ let eX = cX(eH, eI, eK, eL, ed)
725+ let eY = eX._1
726+ let eZ = eX._2
727+ let fa = eX._3
728+ let cW = eX._4
729+ let fb = cX(eH, eI, eK, eL, eW)._2
730+ let fc = aM(aM(eU, eV), eC)
731+ let fd = (ed - eW)
732+ let fe = if ((eH > 0))
733+ then ((eU - eQ) - fd)
734+ else ((fd + eU) - eQ)
735+ let ff = (eH + eS)
736+ let fg = if ((ff == 0))
734737 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)
738+ else $Tuple2(aP(fe), bR(ff))
739+ let fh = fg._1
740+ let fi = fg._2
741+ let fj = (eJ - fh)
742+ let fk = en(bU, aG)
743+ let fl = if ((eH > 0))
744+ then (aM((fh + fd), fk) - fd)
745+ else (aM((fh - fd), fk) - fd)
746+ let fm = ((eY - (fl + fd)) - fc)
747+ let fn = if ((0 > fm))
748+ then if (eF)
749+ then 0
750+ else throw("Invalid internalClosePosition params: unable to pay fee")
751+ else fm
752+ let fo = if (eE)
753+ then (fl + fn)
754+ else fl
755+ if (if ((eD != 0))
756+ then (eD > eQ)
752757 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
758+ then throw(((("Limit error: " + toString(eQ)) + " < ") + toString(eD)))
759+ else $Tuple17(ff, fo, fh, fi, fb, eW, if (if (eE)
760+ then eO
756761 else false)
757762 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)
763+ else fn, cF, cG, eR, (bo() - fj), (bF() - (if (eM)
764+ then aP(eS)
765+ else 0)), (bE() - (if (!(eM))
766+ then aP(eS)
767+ else 0)), (bq() - (if (eM)
768+ then fj
769+ else 0)), (bp() - (if (!(eM))
770+ then fj
771+ else 0)), (fc + cW), eQ)
767772 }
768- else throw("Invalid internalClosePosition params: invalid position size")
773+ else throw(((("Invalid internalClosePosition params: invalid position size: " + toString(eB)) + " max: ") + toString(eN)))
769774 }
770775
771776
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
777+func fp () = {
778+ let fq = ((bJ() / 1000) / 60)
779+ let fr = (fq - aA)
780+ let fs = valueOrElse(getString(this, C), "")
781+ let ft = split(fs, ",")
782+ func fu (fv,fw) = if ((fr >= valueOrErrorMessage(parseInt(fw), ("getTwapSpotPrice: invalid int: " + fs))))
783+ then (fv :+ parseIntValue(fw))
784+ else fv
780785
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])
786+ let fx = {
787+ let fy = ft
788+ let fz = size(fy)
789+ let fA = nil
790+ func fB (fC,fD) = if ((fD >= fz))
791+ then fC
792+ else fu(fC, fy[fD])
788793
789- func fC (fA,fB) = if ((fB >= fx))
790- then fA
794+ func fE (fC,fD) = if ((fD >= fz))
795+ then fC
791796 else throw("List size exceeds 20")
792797
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)
798+ fE(fB(fB(fB(fB(fB(fB(fB(fB(fB(fB(fB(fB(fB(fB(fB(fB(fB(fB(fB(fB(fA, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
794799 }
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)
800+ let fF = if ((size(fx) > 0))
801+ then max(fx)
802+ else valueOrErrorMessage(parseInt(ft[0]), ("getTwapSpotPrice: invalid int: " + fs))
803+ let fG = valueOrElse(getInteger(this, D), 0)
804+ let fH = valueOrElse(getInteger(this, ((E + "_") + toString(fG))), 0)
805+ let fI = valueOrElse(getInteger(this, ((F + "_") + toString(fG))), 0)
806+ let fJ = (fH + ((fq - fG) * fI))
807+ let fK = valueOrElse(getInteger(this, ((E + "_") + toString(fF))), 0)
808+ let fL = valueOrElse(getInteger(this, ((F + "_") + toString(fF))), 0)
809+ let fM = (fK + ((fr - fF) * fL))
810+ ((fJ - fM) / aA)
806811 }
807812
808813
809-func fL () = {
810- let cc = bx()
811- if ((cc == 0))
812- then $Tuple2(bt(), bu())
814+func fN () = {
815+ let bS = bn()
816+ if ((bS == 0))
817+ then $Tuple2(bj(), bk())
813818 else {
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)
819+ let fO = (bS > 0)
820+ let fP = ds(fO, aP(bS), false)
821+ let fQ = fP._1
822+ let fR = fP._2
823+ let fS = fP._3
824+ $Tuple2(fR, fS)
820825 }
821826 }
822827
823828
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)
829+func fT (fU,bn,fV,fW) = {
830+ let fX = toBigInt(fU)
831+ let fY = toBigInt(bn)
832+ let fZ = toBigInt(fV)
833+ let ga = toBigInt(fW)
834+ let aZ = aO(fZ, fX)
835+ let gb = (fX + fY)
836+ let gc = aN(aZ, gb)
837+ let gd = aN(gc, gb)
838+ let ge = aN(ga, gd)
839+ toInt(ge)
835840 }
836841
837842
838-func gd (ge,cz,cA) = {
839- let cc = bx()
840- if ((cc == 0))
843+func gf (gg,cx,cy) = {
844+ let bS = bn()
845+ if ((bS == 0))
841846 then {
842- let gf = aQ(aS(ge, cA), cz)
843- $Tuple3(gf, aI, 0)
847+ let gh = aK(aM(gg, cy), cx)
848+ $Tuple3(gh, aD, 0)
844849 }
845850 else {
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)
851+ let fO = (bS > 0)
852+ let fQ = ds(fO, aP(bS), false)._1
853+ let gh = fT(cy, bS, cx, gg)
854+ let gi = aD
855+ let gj = eb(bS, fQ, cx, gh, cy, gi, aG)._2
856+ $Tuple3(gh, gi, gj)
852857 }
853858 }
854859
855860
856-func gi () = {
857- let gj = dv()
858- let gk = fn()
859- let gl = (gk - gj)
860- if (if (if ((bO() == 0))
861+func gk () = {
862+ let gl = dy()
863+ let gm = fp()
864+ let gn = (gm - gl)
865+ if (if (if ((bE() == 0))
861866 then true
862- else (bP() == 0))
867+ else (bF() == 0))
863868 then true
864- else dC())
869+ else dE())
865870 then $Tuple2(0, 0)
866- else if ((0 > gl))
871+ else if ((0 > gn))
867872 then {
868- let gm = aQ(aS(gl, bD()), aK)
869- let gn = aQ(aS(gm, bO()), bP())
870- $Tuple2(gm, gn)
873+ let go = aK(aM(gn, bt()), aF)
874+ let gp = aK(aM(go, bE()), bF())
875+ $Tuple2(go, gp)
871876 }
872877 else {
873- let gn = aQ(aS(gl, bD()), aK)
874- let gm = aQ(aS(gn, bP()), bO())
875- $Tuple2(gm, gn)
878+ let gp = aK(aM(gn, bt()), aF)
879+ let go = aK(aM(gp, bF()), bE())
880+ $Tuple2(go, gp)
876881 }
877882 }
878883
879884
880-func go (gp,gq) = {
881- let gr = bq()
882- let gs = aS(gr, gq)
883- let gt = if ((gp != ""))
885+func gq (gr,gs) = {
886+ let gt = bg()
887+ let gu = aM(gt, gs)
888+ let gv = if ((gr != ""))
884889 then {
885- let gu = bm(ax(), ak(aA, gp))
886- if ((gu == aB))
890+ let gw = bc(au(), ai(aw, gr))
891+ if ((gw == ax))
887892 then {
888- let gv = bo(ax(), ak(az, gp))
889- let gw = aS(gs, gv)
890- $Tuple2(gw, true)
893+ let gx = be(au(), ai(av, gr))
894+ let gy = aM(gu, gx)
895+ $Tuple2(gy, true)
891896 }
892897 else throw("Invalid attached artifact")
893898 }
894- else $Tuple2(gs, false)
895- let gw = gt._1
896- let gx = gt._2
897- $Tuple2(gw, gx)
899+ else $Tuple2(gu, false)
900+ let gy = gv._1
901+ let gz = gv._2
902+ $Tuple2(gy, gz)
898903 }
899904
900905
901-func gy (ce,gz) = {
902- let eF = cd(ce)._1
903- if ((eF == 0))
906+func gA (bU,gB) = {
907+ let eH = bT(bU)._1
908+ if ((eH == 0))
904909 then true
905- else (ci(ce) == gz)
910+ else (bY(bU) == gB)
906911 }
907912
908913
909-func gA (ce,gz) = (ci(ce) == gz)
914+func gC (bU,gB) = (bY(bU) == gB)
910915
911916
912-func gB (ce,gp) = {
913- let gC = invoke(au(), "computeFeeDiscount", [ce], nil)
914- if ((gC == gC))
917+func gD (bU,gr) = {
918+ let gE = invoke(ar(), "computeFeeDiscount", [bU], nil)
919+ if ((gE == gE))
915920 then {
916- let gD = {
917- let cg = gC
918- if ($isInstanceOf(cg, "Int"))
921+ let gF = {
922+ let bW = gE
923+ if ($isInstanceOf(bW, "Int"))
919924 then {
920- let gE = cg
921- gE
925+ let gG = bW
926+ gG
922927 }
923928 else throw("Invalid computeFeeDiscount result")
924929 }
925- let gF = go(gp, gD)
926- let gw = gF._1
927- let gx = gF._2
928- $Tuple2(gw, gx)
930+ let gH = gq(gr, gF)
931+ let gy = gH._1
932+ let gz = gH._2
933+ $Tuple2(gy, gz)
929934 }
930935 else throw("Strict value is not equal to itself.")
931936 }
932937
933938
934-func gG (bV) = {
935- let gH = if ((size(bV.payments) > 1))
936- then toBase58String(valueOrErrorMessage(bV.payments[1].assetId, "Invalid artifactId"))
939+func gI (bL) = {
940+ let gJ = if ((size(bL.payments) > 1))
941+ then toBase58String(valueOrErrorMessage(bL.payments[1].assetId, "Invalid artifactId"))
937942 else ""
938- gH
943+ gJ
939944 }
940945
941946
942-func gI (gJ) = {
943- let gK = aS(gJ, bR())
944- let gL = (gJ - gK)
945- $Tuple2(gK, gL)
947+func gK (gL) = {
948+ let gM = aM(gL, bH())
949+ let gN = (gL - gM)
950+ $Tuple2(gM, gN)
946951 }
947952
948953
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)]
954+func gO (gP,gQ,gR,gS,eC,gT,gU,gV,gW,dR,gX,gY,gZ) = [IntegerEntry(s, gP), IntegerEntry(t, gQ), IntegerEntry(u, gR), IntegerEntry(r, gS), IntegerEntry(p, eC), IntegerEntry(w, gT), IntegerEntry(x, gU), IntegerEntry(v, gV), IntegerEntry(y, gW), IntegerEntry(z, dR), IntegerEntry(A, gX), IntegerEntry(B, gX), IntegerEntry(q, gZ)]
950955
951956
952-func gY (gZ,ha,hb,hc,hd) = [IntegerEntry(L, gZ), IntegerEntry(J, ha), IntegerEntry(K, hb), IntegerEntry(M, hc), IntegerEntry(N, hd)]
957+func ha (hb,hc,hd,he,hf) = [IntegerEntry(J, hb), IntegerEntry(H, hc), IntegerEntry(I, hd), IntegerEntry(K, he), IntegerEntry(L, hf)]
953958
954959
955-func he (hf,am) = if (hf)
960+func hg (hh,ak) = if (hh)
956961 then {
957- let hg = bQ()
958-[IntegerEntry(ak(k, am), (hg + 1)), IntegerEntry(f, (hg + 1))]
962+ let hi = bG()
963+[IntegerEntry(ai(i, ak), (hi + 1)), IntegerEntry(d, (hi + 1))]
959964 }
960965 else nil
961966
962967
963-func hh (hf,am,eB) = if (hf)
964- then [IntegerEntry(ak(m, am), eB)]
968+func hj (hh,ak,eC) = if (hh)
969+ then [IntegerEntry(ai(k, ak), eC)]
965970 else nil
966971
967972
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)]
973+func hk (ak,eB,hl,hm,dc,hn) = [IntegerEntry(ai(e, ak), eB), IntegerEntry(ai(f, ak), hl), IntegerEntry(ai(g, ak), hm), IntegerEntry(ai(h, ak), dc), IntegerEntry(ai(l, ak), hn)]
969974
970975
971-func hm (hn) = {
972- let fo = ((bT() / 1000) / 60)
973- let ho = valueOrElse(getInteger(this, F), 0)
974- if ((ho > fo))
976+func ho (hp) = {
977+ let fq = ((bJ() / 1000) / 60)
978+ let hq = valueOrElse(getInteger(this, D), 0)
979+ if ((hq > fq))
975980 then throw("TWAP out-of-order")
976981 else {
977- let fE = if ((ho == 0))
978- then fo
979- else ho
980- if ((fo > ho))
982+ let fG = if ((hq == 0))
983+ then fq
984+ else hq
985+ if ((fq > hq))
981986 then {
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))]
987+ let hr = valueOrElse(getInteger(this, ((E + "_") + toString(hq))), 0)
988+ let hs = valueOrElse(getInteger(this, ((F + "_") + toString(hq))), hp)
989+ let ht = (hr + ((fq - fG) * hs))
990+ let ft = aV(aT(valueOrElse(getString(this, C), "")), aA, toString(fq))
991+[IntegerEntry(ai(E, toString(fq)), ht), IntegerEntry(ai(F, toString(fq)), hp), IntegerEntry(ai(G, toString(fq)), hq), IntegerEntry(D, fq), StringEntry(C, aR(ft))]
987992 }
988993 else {
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)]
994+ let hu = valueOrElse(getInteger(this, ai(G, toString(fq))), 0)
995+ let hr = valueOrElse(getInteger(this, ai(E, toString(hu))), 0)
996+ let hs = valueOrElse(getInteger(this, ai(F, toString(hu))), hp)
997+ let ht = (hr + ((fq - hu) * hs))
998+[IntegerEntry(ai(E, toString(fq)), ht), IntegerEntry(ai(F, toString(fq)), hp)]
994999 }
9951000 }
9961001 }
9971002
9981003
999-func ht (cz,cA) = [IntegerEntry(O, cz), IntegerEntry(P, cA)]
1004+func hv (cx,cy) = [IntegerEntry(M, cx), IntegerEntry(N, cy)]
10001005
10011006
1002-func hu (cE,cF) = [IntegerEntry(Q, cE), IntegerEntry(R, cF)]
1007+func hw (cC,cD) = [IntegerEntry(O, cC), IntegerEntry(P, cD)]
10031008
10041009
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))))
1010+func hx (cx,cy,hy,hz,hA,hB,hC,hD) = {
1011+ let cC = bl()
1012+ let cD = bm()
1013+ if (((hA - hB) != hy))
1014+ then throw(((((("Invalid AMM state data: " + toString(hA)) + " + ") + toString(hB)) + " != ") + toString(hy)))
1015+ else ((hv(cx, cy) ++ [IntegerEntry(Q, hy), IntegerEntry(T, hz), IntegerEntry(R, hA), IntegerEntry(S, hB), IntegerEntry(V, hC), IntegerEntry(U, hD)]) ++ ho(aK(aM(cx, cC), aM(cy, cD))))
10111016 }
10121017
10131018
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))]
1019+func hE (ak) = [DeleteEntry(ai(e, ak)), DeleteEntry(ai(f, ak)), DeleteEntry(ai(g, ak)), DeleteEntry(ai(h, ak)), DeleteEntry(ai(j, ak)), DeleteEntry(ai(k, ak)), DeleteEntry(ai(l, ak))]
10151020
10161021
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())]
1022+func hF (ak,hG) = {
1023+ let hH = assetBalance(this, an())
1024+ if ((hG > hH))
1025+ then throw(((("Unable to withdraw " + toString(hG)) + " from contract balance ") + toString(hH)))
1026+ else [ScriptTransfer(ak, hG, an())]
10221027 }
10231028
10241029
1025-func hG (bV) = if ((0 > bV))
1030+func hI (bL) = if ((0 > bL))
10261031 then throw("Balance")
1027- else [IntegerEntry(e, bV)]
1032+ else [IntegerEntry(c, bL)]
10281033
10291034
1030-func hH (bV) = [ScriptTransfer(as(), bV, aq())]
1035+func hJ (bL) = [ScriptTransfer(ap(), bL, an())]
10311036
10321037
1033-func hI (hJ,bV) = if (hJ)
1034- then [Burn(valueOrErrorMessage(bV.payments[1].assetId, "Invalid artifact"), 1)]
1038+func hK (hL,bL) = if (hL)
1039+ then [Burn(valueOrErrorMessage(bL.payments[1].assetId, "Invalid artifact"), 1)]
10351040 else nil
10361041
10371042
1038-@Callable(bV)
1039-func pause () = if ((bV.caller != ao()))
1043+@Callable(bL)
1044+func pause () = if ((bL.caller != am()))
10401045 then throw("Invalid pause params")
1041- else [BooleanEntry(p, true)]
1046+ else [BooleanEntry(n, true)]
10421047
10431048
10441049
1045-@Callable(bV)
1046-func unpause () = if ((bV.caller != ao()))
1050+@Callable(bL)
1051+func unpause () = if ((bL.caller != am()))
10471052 then throw("Invalid unpause params")
1048- else [BooleanEntry(p, false)]
1053+ else [BooleanEntry(n, false)]
10491054
10501055
10511056
1052-@Callable(bV)
1053-func setCloseOnly () = if ((bV.caller != ao()))
1057+@Callable(bL)
1058+func setCloseOnly () = if ((bL.caller != am()))
10541059 then throw("Invalid setCloseOnly params")
1055- else [BooleanEntry(q, true)]
1060+ else [BooleanEntry(o, true)]
10561061
10571062
10581063
1059-@Callable(bV)
1060-func unsetCloseOnly () = if ((bV.caller != ao()))
1064+@Callable(bL)
1065+func unsetCloseOnly () = if ((bL.caller != am()))
10611066 then throw("Invalid unsetCloseOnly params")
1062- else [BooleanEntry(q, false)]
1067+ else [BooleanEntry(o, false)]
10631068
10641069
10651070
1066-@Callable(bV)
1067-func addLiquidity (cu) = if (if ((bV.caller != ao()))
1071+@Callable(bL)
1072+func addLiquidity (cs) = if (if ((bL.caller != am()))
10681073 then true
1069- else (0 >= cu))
1074+ else (0 >= cs))
10701075 then throw("Invalid addLiquidity params")
10711076 else {
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))
1077+ let cx = bj()
1078+ let cy = bk()
1079+ let cC = bl()
1080+ let cD = bm()
1081+ let hM = aK(aM(cx, cC), aM(cy, cD))
1082+ let hN = (cx + cs)
1083+ let hO = (aK(aM(hN, cC), hM) - cy)
1084+ let hP = (cy + hO)
1085+ let hQ = gf(dy(), hN, hP)
1086+ let hR = hQ._1
1087+ let hS = hQ._2
1088+ let gj = hQ._3
1089+ let hT = if ((gj != 0))
10851090 then {
1086- let hR = invoke(at(), "exchangeFreeAndLocked", [gh], nil)
1087- if ((hR == hR))
1091+ let hT = invoke(aq(), "exchangeFreeAndLocked", [gj], nil)
1092+ if ((hT == hT))
10881093 then nil
10891094 else throw("Strict value is not equal to itself.")
10901095 }
10911096 else nil
1092- if ((hR == hR))
1093- then (ht(hL, hN) ++ hu(hP, hQ))
1097+ if ((hT == hT))
1098+ then (hv(hN, hP) ++ hw(hR, hS))
10941099 else throw("Strict value is not equal to itself.")
10951100 }
10961101
10971102
10981103
1099-@Callable(bV)
1100-func removeLiquidity (cu) = if (if ((bV.caller != ao()))
1104+@Callable(bL)
1105+func removeLiquidity (cs) = if (if ((bL.caller != am()))
11011106 then true
1102- else (cu >= 0))
1107+ else (cs >= 0))
11031108 then throw("Invalid removeLiquidity params")
11041109 else {
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))
1110+ let cx = bj()
1111+ let cy = bk()
1112+ let cC = bl()
1113+ let cD = bm()
1114+ let hM = aK(aM(cx, cC), aM(cy, cD))
1115+ let hN = (cx - cs)
1116+ let hU = aP((aK(aM(hN, cC), hM) - cy))
1117+ let hP = (cy - hU)
1118+ let hV = gf(dy(), hN, hP)
1119+ let hR = hV._1
1120+ let hS = hV._2
1121+ let gj = hV._3
1122+ let hT = if ((gj != 0))
11181123 then {
1119- let hR = invoke(at(), "exchangeFreeAndLocked", [gh], nil)
1120- if ((hR == hR))
1124+ let hT = invoke(aq(), "exchangeFreeAndLocked", [gj], nil)
1125+ if ((hT == hT))
11211126 then nil
11221127 else throw("Strict value is not equal to itself.")
11231128 }
11241129 else nil
1125- if ((hR == hR))
1126- then (ht(hL, hN) ++ hu(hP, hQ))
1130+ if ((hT == hT))
1131+ then (hv(hN, hP) ++ hw(hR, hS))
11271132 else throw("Strict value is not equal to itself.")
11281133 }
11291134
11301135
11311136
1132-@Callable(bV)
1133-func changeSettings (gN,gO,gP,gQ,eB,gR,gS,gT,gU,dQ,gV,gW,gX) = if ((bV.caller != ao()))
1137+@Callable(bL)
1138+func changeSettings (gP,gQ,gR,gS,eC,gT,gU,gV,gW,dR,gX,gY,gZ) = if ((bL.caller != am()))
11341139 then throw("Invalid changeSettings params")
1135- else gM(gN, gO, gP, gQ, eB, gR, gS, gT, gU, dQ, gV, gW, gX)
1140+ else gO(gP, gQ, gR, gS, eC, gT, gU, gV, gW, dR, gX, gY, gZ)
11361141
11371142
11381143
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))
1144+@Callable(bL)
1145+func initialize (cx,cy,gS,gP,gQ,gR,eC,hW,hX,hY,gT,gU,gV,gW,dR,gX,gY,gZ) = if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if ((0 >= cx))
11411146 then true
1142- else (0 >= cA))
1147+ else (0 >= cy))
1148+ then true
1149+ else (0 >= gS))
1150+ then true
1151+ else (0 >= gP))
11431152 then true
11441153 else (0 >= gQ))
11451154 then true
1146- else (0 >= gN))
1147- then true
1148- else (0 >= gO))
1149- then true
1150- else (0 >= gP))
1151- then true
1152- else (0 >= eB))
1153- then true
11541155 else (0 >= gR))
11551156 then true
1156- else (0 >= gS))
1157+ else (0 >= eC))
11571158 then true
11581159 else (0 >= gT))
11591160 then true
11601161 else (0 >= gU))
11611162 then true
1162- else (0 >= dQ))
1163- then true
11641163 else (0 >= gV))
1165- then true
1166- else (gV > aI))
11671164 then true
11681165 else (0 >= gW))
11691166 then true
1167+ else (0 >= dR))
1168+ then true
11701169 else (0 >= gX))
11711170 then true
1172- else cp())
1171+ else (gX > aD))
1172+ then true
1173+ else (0 >= gY))
1174+ then true
1175+ else (0 >= gZ))
1176+ then true
1177+ else cn())
1178+ then true
1179+ else (bL.caller != this))
11731180 then throw("Invalid initialize parameters")
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)])
1181+ else ((((hx(cx, cy, 0, 0, 0, 0, 0, 0) ++ gO(gP, gQ, gR, gS, eC, gT, gU, gV, gW, dR, gX, gY, gZ)) ++ ha((bJ() + gS), 0, 0, 0, 0)) ++ hI(0)) ++ [BooleanEntry(m, true), StringEntry(a, hW), StringEntry(b, hX), StringEntry(X, toString(addressFromStringValue(hY)))])
11751182
11761183
11771184
1178-@Callable(bV)
1179-func increasePosition (hY,hZ,ia,ib) = {
1180- let ic = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1181- if ((ic == ic))
1185+@Callable(bL)
1186+func increasePosition (hZ,ia,ib,ic) = {
1187+ let id = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1188+ if ((id == id))
11821189 then {
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)
1190- else false)
1191- then true
1192- else (0 >= id))
1193- then true
1194- else !(cp()))
1195- then true
1196- else !(if))
1197- then true
1198- else !(gy(ce, ie)))
1199- then true
1200- else !(bW(aQ(aI, hZ), bs(), true)))
1201- then true
1202- else cq())
1203- then true
1204- else cr())
1205- then true
1206- else dC())
1207- then throw("Invalid increasePosition parameters")
1208- else {
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))
1216- then {
1217- let ij = {
1218- let cg = ii
1219- if ($isInstanceOf(cg, "Int"))
1220- then {
1221- let gE = cg
1222- gE
1190+ let ie = invoke(this, "ensureCalledOnce", nil, nil)
1191+ if ((ie == ie))
1192+ then {
1193+ let bU = bK(bL)
1194+ let if = bL.payments[0].amount
1195+ let gB = bL.payments[0].assetId
1196+ let ig = toBase58String(value(gB))
1197+ let ih = (gB == an())
1198+ if (if (if (if (if (if (if (if (if (if ((hZ != ay))
1199+ then (hZ != az)
1200+ else false)
1201+ then true
1202+ else (0 >= if))
1203+ then true
1204+ else !(cn()))
1205+ then true
1206+ else !(ih))
1207+ then true
1208+ else !(gA(bU, ig)))
1209+ then true
1210+ else !(bM(aK(aD, ia), bi(), true)))
1211+ then true
1212+ else co())
1213+ then true
1214+ else cp())
1215+ then true
1216+ else dE())
1217+ then throw("Invalid increasePosition parameters")
1218+ else {
1219+ let ii = gD(bU, gI(bL))
1220+ let gy = ii._1
1221+ let gz = ii._2
1222+ let hG = aK(if, (aM(gy, ia) + aD))
1223+ let ij = (if - hG)
1224+ let ik = invoke(at(), "acceptPaymentWithLink", [bU, ic], [AttachedPayment(an(), ij)])
1225+ if ((ik == ik))
1226+ then {
1227+ let il = {
1228+ let bW = ik
1229+ if ($isInstanceOf(bW, "Int"))
1230+ then {
1231+ let gG = bW
1232+ gG
1233+ }
1234+ else throw("Invalid referrerFee")
12231235 }
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)
1236+ let im = (ij - il)
1237+ let in = bT(bU)
1238+ let eH = in._1
1239+ let eI = in._2
1240+ let eJ = in._3
1241+ let eK = in._4
1242+ let eL = in._5
1243+ let io = (eH == 0)
1244+ let ip = if ((eH > 0))
1245+ then (hZ == ay)
1246+ else (hZ == az)
1247+ let iq = if (!(io))
1248+ then ip
1249+ else false
1250+ let ir = (hZ == ay)
1251+ let is = if (if (io)
1252+ then true
1253+ else iq)
1254+ then {
1255+ let it = aM(hG, ia)
1256+ let iu = cB(ir, it)
1257+ let cI = iu._1
1258+ let cF = iu._2
1259+ let cG = iu._3
1260+ let eR = iu._4
1261+ if (if ((ib != 0))
1262+ then (ib > aP(cI))
1263+ else false)
1264+ then throw(((("Limit error: " + toString(aP(cI))) + " < ") + toString(ib)))
1265+ else {
1266+ let ff = (eH + cI)
1267+ let iv = (bq() + (if ((ff > 0))
1268+ then it
1269+ else 0))
1270+ let iw = (bp() + (if ((0 > ff))
1271+ then it
1272+ else 0))
1273+ let ix = cX(eH, eI, eK, eL, hG)
1274+ let df = ix._1
1275+ let eZ = ix._2
1276+ let fa = ix._3
1277+ let cW = ix._4
1278+ if (!(dK(cF, cG)))
1279+ then throw("Over max spread limit")
1280+ else if (!(dO(iv, iw)))
1281+ then throw("Over max open notional")
1282+ else $Tuple14(ff, df, (eJ + it), bR(ff), bJ(), cG, cF, eR, (bo() + it), (bF() + (if ((ff > 0))
1283+ then aP(cI)
1284+ else 0)), (bE() + (if ((0 > ff))
1285+ then aP(cI)
1286+ else 0)), iv, iw, cW)
1287+ }
1288+ }
1289+ else {
1290+ let it = aM(hG, ia)
1291+ let iy = ee(toString(bL.caller), aG)
1292+ let eU = iy._1
1293+ let ed = iy._2
1294+ if ((eU > it))
1295+ then throw("Use decreasePosition to decrease position size")
1296+ else throw("Close position first")
1297+ }
1298+ let ff = is._1
1299+ let iz = is._2
1300+ let fh = is._3
1301+ let iA = is._4
1302+ let iB = is._5
1303+ let cG = is._6
1304+ let cF = is._7
1305+ let eR = is._8
1306+ let iC = is._9
1307+ let iD = is._10
1308+ let iE = is._11
1309+ let iv = is._12
1310+ let iw = is._13
1311+ let cW = is._14
1312+ let iF = gK((im + cW))
1313+ let gM = iF._1
1314+ let gN = iF._2
1315+ let iG = if ((hG >= cW))
1316+ then invoke(aq(), "addLocked", nil, [AttachedPayment(an(), (hG - cW))])
1317+ else invoke(aq(), "withdrawLocked", [(cW - hG)], nil)
1318+ if ((iG == iG))
1319+ then {
1320+ let iH = invoke(aq(), "addFree", nil, [AttachedPayment(an(), gN)])
1321+ if ((iH == iH))
1322+ then {
1323+ let iI = invoke(ar(), "notifyFees", [bU, im], nil)
1324+ if ((iI == iI))
1325+ then {
1326+ let iJ = invoke(ar(), "notifyNotional", [bU, fh], nil)
1327+ if ((iJ == iJ))
1328+ then ((((((hk(bU, ff, iz, fh, iA, iB) ++ hg(io, bU)) ++ hj(io, bU, gy)) ++ hx(cF, cG, eR, iC, iD, iE, iv, iw)) ++ hJ(gM)) ++ hI(((bf() + hG) - cW))) ++ hK(gz, bL))
1329+ else throw("Strict value is not equal to itself.")
1330+ }
1331+ else throw("Strict value is not equal to itself.")
1332+ }
1333+ else throw("Strict value is not equal to itself.")
1334+ }
1335+ else throw("Strict value is not equal to itself.")
1336+ }
1337+ else throw("Strict value is not equal to itself.")
1338+ }
1339+ }
1340+ else throw("Strict value is not equal to itself.")
1341+ }
1342+ else throw("Strict value is not equal to itself.")
1343+ }
1344+
1345+
1346+
1347+@Callable(bL)
1348+func addMargin () = {
1349+ let id = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1350+ if ((id == id))
1351+ then {
1352+ let ie = invoke(this, "ensureCalledOnce", nil, nil)
1353+ if ((ie == ie))
1354+ then {
1355+ let bU = toString(bL.caller)
1356+ let hG = bL.payments[0].amount
1357+ let gB = bL.payments[0].assetId
1358+ let ig = toBase58String(value(gB))
1359+ let ih = (gB == an())
1360+ if (if (if (if (if (if (if (!(ih))
1361+ then true
1362+ else !(ce(toString(bL.caller))))
1363+ then true
1364+ else !(gC(bU, ig)))
1365+ then true
1366+ else !(cn()))
1367+ then true
1368+ else co())
1369+ then true
1370+ else cp())
1371+ then true
1372+ else dE())
1373+ then throw("Invalid addMargin parameters")
1374+ else {
1375+ let iK = bT(bU)
1376+ let eH = iK._1
1377+ let eI = iK._2
1378+ let eJ = iK._3
1379+ let eK = iK._4
1380+ let eL = iK._5
1381+ let iG = invoke(aq(), "addLocked", nil, [AttachedPayment(an(), hG)])
1382+ if ((iG == iG))
12441383 then {
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)))
1384+ let cW = cS(eI, eL)
1385+ let iL = if ((cW > 0))
1386+ then {
1387+ let iM = gK(cW)
1388+ let gM = iM._1
1389+ let gN = iM._2
1390+ let iN = invoke(aq(), "withdrawLocked", [gM], nil)
1391+ if ((iN == iN))
1392+ then {
1393+ let iO = invoke(aq(), "exchangeFreeAndLocked", [-(gN)], nil)
1394+ if ((iO == iO))
1395+ then hJ(gM)
1396+ else throw("Strict value is not equal to itself.")
1397+ }
1398+ else throw("Strict value is not equal to itself.")
1399+ }
1400+ else nil
1401+ if ((iL == iL))
1402+ then ((hk(bU, eH, ((eI - cW) + hG), eJ, eK, bJ()) ++ hI(((bf() + hG) - cW))) ++ iL)
1403+ else throw("Strict value is not equal to itself.")
1404+ }
1405+ else throw("Strict value is not equal to itself.")
1406+ }
1407+ }
1408+ else throw("Strict value is not equal to itself.")
1409+ }
1410+ else throw("Strict value is not equal to itself.")
1411+ }
1412+
1413+
1414+
1415+@Callable(bL)
1416+func removeMargin (hG) = {
1417+ let id = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1418+ if ((id == id))
1419+ then {
1420+ let ie = invoke(this, "ensureCalledOnce", nil, nil)
1421+ if ((ie == ie))
1422+ then {
1423+ let bU = toString(bL.caller)
1424+ if (if (if (if (if ((0 >= hG))
1425+ then true
1426+ else !(ce(bU)))
1427+ then true
1428+ else !(cn()))
1429+ then true
1430+ else co())
1431+ then true
1432+ else dE())
1433+ then throw("Invalid removeMargin parameters")
1434+ else {
1435+ let iP = bT(bU)
1436+ let eH = iP._1
1437+ let eI = iP._2
1438+ let eJ = iP._3
1439+ let eK = iP._4
1440+ let eL = iP._5
1441+ let iQ = cX(eH, eI, eK, eL, -(hG))
1442+ let df = iQ._1
1443+ let dg = iQ._2
1444+ let db = iQ._3
1445+ let cW = iQ._4
1446+ if ((dg != 0))
1447+ then throw("Invalid removed margin amount")
1448+ else {
1449+ let fk = ej(df, dg, eJ)
1450+ if (!(bM(fk, bi(), true)))
1451+ then throw(((("Too much margin removed: " + toString(fk)) + " < ") + toString(bi())))
12551452 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)
1453+ let iR = gK(cW)
1454+ let gM = iR._1
1455+ let gN = iR._2
1456+ let iL = if ((cW > 0))
1457+ then {
1458+ let iO = invoke(aq(), "exchangeFreeAndLocked", [-(gN)], nil)
1459+ if ((iO == iO))
1460+ then hJ(gM)
1461+ else throw("Strict value is not equal to itself.")
1462+ }
1463+ else nil
1464+ if ((iL == iL))
1465+ then {
1466+ let iN = invoke(aq(), "withdrawLocked", [(hG + gM)], nil)
1467+ if ((iN == iN))
1468+ then (((hk(bU, eH, df, eJ, bR(eH), bJ()) ++ hF(bL.caller, hG)) ++ hI(((bf() - hG) - cW))) ++ iL)
1469+ else throw("Strict value is not equal to itself.")
1470+ }
1471+ else throw("Strict value is not equal to itself.")
12771472 }
12781473 }
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 ((hE >= cY))
1306- then invoke(at(), "addLocked", nil, [AttachedPayment(aq(), (hE - cY))])
1307- else invoke(at(), "withdrawLocked", [(cY - hE)], nil)
1308- if ((iE == iE))
1474+ }
1475+ }
1476+ else throw("Strict value is not equal to itself.")
1477+ }
1478+ else throw("Strict value is not equal to itself.")
1479+ }
1480+
1481+
1482+
1483+@Callable(bL)
1484+func closePosition (eB,eD,eE) = {
1485+ let id = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1486+ if ((id == id))
1487+ then {
1488+ let ie = invoke(this, "ensureCalledOnce", nil, nil)
1489+ if ((ie == ie))
1490+ then {
1491+ let bU = bK(bL)
1492+ let iS = valueOrErrorMessage(addressFromString(bU), "Invalid caller")
1493+ let cd = cb(bU)
1494+ if (if (if (if (if (if (!(ce(bU)))
1495+ then true
1496+ else !(cn()))
1497+ then true
1498+ else co())
1499+ then true
1500+ else (0 >= eB))
1501+ then true
1502+ else (0 > eD))
1503+ then true
1504+ else dE())
1505+ then throw("Invalid closePosition parameters")
1506+ else {
1507+ let eL = bT(bU)._5
1508+ let iT = eA(bU, eB, cd, eD, eE, true, true)
1509+ let ff = iT._1
1510+ let fo = iT._2
1511+ let fh = iT._3
1512+ let fi = iT._4
1513+ let fb = iT._5
1514+ let eW = iT._6
1515+ let fn = iT._7
1516+ let cF = iT._8
1517+ let cG = iT._9
1518+ let eR = iT._10
1519+ let iC = iT._11
1520+ let iD = iT._12
1521+ let iE = iT._13
1522+ let iv = iT._14
1523+ let iw = iT._15
1524+ let iU = iT._16
1525+ if ((fb > 0))
1526+ then throw("Invalid closePosition parameters: bad debt")
1527+ else if ((eL >= bJ()))
1528+ then throw("Invalid closePosition parameters: wait at least 1 block before closing the position")
1529+ else {
1530+ let eO = (ff != 0)
1531+ let iV = (fn + iU)
1532+ let iW = (bf() - iV)
1533+ let iX = if ((0 > iW))
1534+ then 0
1535+ else iW
1536+ let iN = invoke(aq(), "withdrawLocked", [iV], nil)
1537+ if ((iN == iN))
1538+ then {
1539+ let iY = gK(iU)
1540+ let gM = iY._1
1541+ let gN = iY._2
1542+ let iH = invoke(aq(), "addFree", nil, [AttachedPayment(an(), gN)])
1543+ if ((iH == iH))
1544+ then {
1545+ let iI = invoke(ar(), "notifyFees", [bU, iU], nil)
1546+ if ((iI == iI))
1547+ then {
1548+ let iJ = invoke(ar(), "notifyNotional", [bU, fh], nil)
1549+ if ((iJ == iJ))
1550+ then (((((if (eO)
1551+ then hk(bU, ff, fo, fh, fi, bJ())
1552+ else hE(bU)) ++ hx(cF, cG, eR, iC, iD, iE, iv, iw)) ++ (if ((fn > 0))
1553+ then hF(iS, fn)
1554+ else nil)) ++ hI(iX)) ++ hJ(gM))
1555+ else throw("Strict value is not equal to itself.")
1556+ }
1557+ else throw("Strict value is not equal to itself.")
1558+ }
1559+ else throw("Strict value is not equal to itself.")
1560+ }
1561+ else throw("Strict value is not equal to itself.")
1562+ }
1563+ }
1564+ }
1565+ else throw("Strict value is not equal to itself.")
1566+ }
1567+ else throw("Strict value is not equal to itself.")
1568+ }
1569+
1570+
1571+
1572+@Callable(bL)
1573+func liquidate (bU) = {
1574+ let id = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1575+ if ((id == id))
1576+ then {
1577+ let iZ = en(bU, aG)
1578+ let ja = if (dT())
1579+ then {
1580+ let jb = en(bU, aH)
1581+ aQ(iZ, jb)
1582+ }
1583+ else iZ
1584+ if (if (if (if (if (!(bM(ja, bv(), false)))
1585+ then true
1586+ else !(ce(bU)))
1587+ then true
1588+ else !(cn()))
1589+ then true
1590+ else co())
1591+ then true
1592+ else dE())
1593+ then throw("Unable to liquidate")
1594+ else {
1595+ let jc = if (if ((iZ > bw()))
1596+ then (bx() > 0)
1597+ else false)
1598+ then (aD > bx())
1599+ else false
1600+ let eH = bT(bU)._1
1601+ let dX = aP(eH)
1602+ let jd = if (jc)
1603+ then {
1604+ let je = ev(bU, eH)
1605+ let jf = aK(aP(je), dX)
1606+ $Tuple2(jf, aP(je))
1607+ }
1608+ else $Tuple2(0, dX)
1609+ let jf = jd._1
1610+ let je = jd._2
1611+ let jg = eA(bU, if (jc)
1612+ then je
1613+ else dX, bw(), 0, true, false, true)
1614+ let ff = jg._1
1615+ let fo = jg._2
1616+ let fh = jg._3
1617+ let fi = jg._4
1618+ let fb = jg._5
1619+ let eW = jg._6
1620+ let fn = jg._7
1621+ let cF = jg._8
1622+ let cG = jg._9
1623+ let eR = jg._10
1624+ let iC = jg._11
1625+ let iD = jg._12
1626+ let iE = jg._13
1627+ let iv = jg._14
1628+ let iw = jg._15
1629+ let jh = jg._16
1630+ let ji = (jh / 2)
1631+ let gN = (jh - ji)
1632+ let iW = (bf() - jh)
1633+ let jj = if ((0 > iW))
1634+ then 0
1635+ else iW
1636+ let iO = if ((fb > 0))
1637+ then {
1638+ let iO = invoke(aq(), "exchangeFreeAndLocked", [(fb + jh)], nil)
1639+ if ((iO == iO))
1640+ then nil
1641+ else throw("Strict value is not equal to itself.")
1642+ }
1643+ else nil
1644+ if ((iO == iO))
1645+ then {
1646+ let iN = invoke(aq(), "withdrawLocked", [jh], nil)
1647+ if ((iN == iN))
13091648 then {
1310- let iF = invoke(at(), "addFree", nil, [AttachedPayment(aq(), gL)])
1311- if ((iF == iF))
1649+ let jk = invoke(aq(), "addFree", nil, [AttachedPayment(an(), gN)])
1650+ if ((jk == jk))
13121651 then {
1313- let iG = invoke(au(), "notifyFees", [ce, ik], nil)
1314- if ((iG == iG))
1315- then {
1316- let iH = invoke(au(), "notifyNotional", [ce, ff], nil)
1317- if ((iH == iH))
1318- 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) - cY))) ++ hI(gx, bV))
1319- else throw("Strict value is not equal to itself.")
1320- }
1652+ let iJ = invoke(ar(), "notifyNotional", [bU, fh], nil)
1653+ if ((iJ == iJ))
1654+ then ((((if (jc)
1655+ then hk(bU, ff, fo, fh, fi, bJ())
1656+ else hE(bU)) ++ hx(cF, cG, eR, iC, iD, iE, iv, iw)) ++ hF(bL.caller, ji)) ++ hI(jj))
13211657 else throw("Strict value is not equal to itself.")
13221658 }
13231659 else throw("Strict value is not equal to itself.")
13321668
13331669
13341670
1335-@Callable(bV)
1336-func addMargin () = {
1337- let ic = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1338- if ((ic == ic))
1671+@Callable(bL)
1672+func payFunding () = {
1673+ let id = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1674+ if ((id == id))
13391675 then {
1340- let ce = toString(bV.caller)
1341- let hE = bV.payments[0].amount
1342- let gz = bV.payments[0].assetId
1343- let ie = toBase58String(value(gz))
1344- let if = (gz == aq())
1345- if (if (if (if (if (if (if (!(if))
1676+ let jl = br()
1677+ if (if (if ((jl > bJ()))
13461678 then true
1347- else !(co(toString(bV.caller))))
1679+ else !(cn()))
13481680 then true
1349- else !(gA(ce, ie)))
1350- then true
1351- else !(cp()))
1352- then true
1353- else cq())
1354- then true
1355- else cr())
1356- then true
1357- else dC())
1358- then throw("Invalid addMargin parameters")
1681+ else co())
1682+ then throw(((("Invalid funding block timestamp: " + toString(bJ())) + " < ") + toString(jl)))
13591683 else {
1360- let iI = cd(ce)
1361- let eF = iI._1
1362- let eG = iI._2
1363- let eH = iI._3
1364- let eI = iI._4
1365- let eJ = iI._5
1366- let iE = invoke(at(), "addLocked", nil, [AttachedPayment(aq(), hE)])
1367- if ((iE == iE))
1368- then {
1369- let cY = cU(eG, eJ)
1370- let iJ = if ((cY > 0))
1371- then {
1372- let iK = gI(cY)
1373- let gK = iK._1
1374- let gL = iK._2
1375- let iL = invoke(at(), "withdrawLocked", [gK], nil)
1376- if ((iL == iL))
1377- then {
1378- let iM = invoke(at(), "exchangeFreeAndLocked", [-(gL)], nil)
1379- if ((iM == iM))
1380- then hH(gK)
1381- else throw("Strict value is not equal to itself.")
1382- }
1383- else throw("Strict value is not equal to itself.")
1384- }
1385- else nil
1386- if ((iJ == iJ))
1387- then ((hi(ce, eF, ((eG - cY) + hE), eH, eI, bT()) ++ hG(((bp() + hE) - cY))) ++ iJ)
1388- else throw("Strict value is not equal to itself.")
1389- }
1390- else throw("Strict value is not equal to itself.")
1684+ let gl = dy()
1685+ let jm = gk()
1686+ let go = jm._1
1687+ let gp = jm._2
1688+ ha((jl + bu()), (bC() + gp), (bD() + go), aK(gp, gl), aK(go, gl))
13911689 }
13921690 }
13931691 else throw("Strict value is not equal to itself.")
13951693
13961694
13971695
1398-@Callable(bV)
1399-func removeMargin (hE) = {
1400- let ic = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1401- if ((ic == ic))
1696+@Callable(bL)
1697+func syncTerminalPriceToOracle () = {
1698+ let cx = bj()
1699+ let cy = bk()
1700+ let jn = gf(dy(), cx, cy)
1701+ let hR = jn._1
1702+ let hS = jn._2
1703+ let gj = jn._3
1704+ let jo = if (if ((0 > gj))
1705+ then (aP(gj) > bf())
1706+ else false)
1707+ then -(bf())
1708+ else gj
1709+ let hT = if ((jo != 0))
14021710 then {
1403- let ce = toString(bV.caller)
1404- if (if (if (if (if ((0 >= hE))
1405- then true
1406- else !(co(ce)))
1407- then true
1408- else !(cp()))
1409- then true
1410- else cq())
1411- then true
1412- else dC())
1413- then throw("Invalid removeMargin parameters")
1414- else {
1415- let iN = cd(ce)
1416- let eF = iN._1
1417- let eG = iN._2
1418- let eH = iN._3
1419- let eI = iN._4
1420- let eJ = iN._5
1421- let iO = cZ(eF, eG, eI, eJ, -(hE))
1422- let dh = iO._1
1423- let di = iO._2
1424- let dd = iO._3
1425- let cY = iO._4
1426- if ((di != 0))
1427- then throw("Invalid removed margin amount")
1428- else {
1429- let fi = ei(dh, di, eH)
1430- if (!(bW(fi, bs(), true)))
1431- then throw(((("Too much margin removed: " + toString(fi)) + " < ") + toString(bs())))
1432- else {
1433- let iP = gI(cY)
1434- let gK = iP._1
1435- let gL = iP._2
1436- let iJ = if ((cY > 0))
1437- then {
1438- let iM = invoke(at(), "exchangeFreeAndLocked", [-(gL)], nil)
1439- if ((iM == iM))
1440- then hH(gK)
1441- else throw("Strict value is not equal to itself.")
1442- }
1443- else nil
1444- if ((iJ == iJ))
1445- then {
1446- let iL = invoke(at(), "withdrawLocked", [(hE + gK)], nil)
1447- if ((iL == iL))
1448- then (((hi(ce, eF, dh, eH, cb(eF), bT()) ++ hD(bV.caller, hE)) ++ hG(((bp() - hE) - cY))) ++ iJ)
1449- else throw("Strict value is not equal to itself.")
1450- }
1451- else throw("Strict value is not equal to itself.")
1452- }
1453- }
1454- }
1711+ let hT = invoke(aq(), "exchangeFreeAndLocked", [jo], nil)
1712+ if ((hT == hT))
1713+ then nil
1714+ else throw("Strict value is not equal to itself.")
1715+ }
1716+ else nil
1717+ if ((hT == hT))
1718+ then ((hI((bf() + jo)) ++ hw(hR, hS)) ++ ho(aK(aM(cx, hR), aM(cy, hS))))
1719+ else throw("Strict value is not equal to itself.")
1720+ }
1721+
1722+
1723+
1724+@Callable(bL)
1725+func ensureCalledOnce () = if ((bL.caller != this))
1726+ then throw("Invalid saveCurrentTxId parameters")
1727+ else {
1728+ let jp = valueOrElse(getString(this, W), "")
1729+ if ((jp != toBase58String(bL.transactionId)))
1730+ then [StringEntry(W, jp)]
1731+ else throw("Can not call vAMM methods twice in one tx")
1732+ }
1733+
1734+
1735+
1736+@Callable(bL)
1737+func view_calcRemainMarginWithFundingPayment (bU) = {
1738+ let id = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1739+ if ((id == id))
1740+ then {
1741+ let jq = bT(bU)
1742+ let bX = jq._1
1743+ let eg = jq._2
1744+ let ep = jq._3
1745+ let ei = jq._4
1746+ let er = jq._5
1747+ let jr = ee(bU, aG)
1748+ let dZ = jr._1
1749+ let ed = jr._2
1750+ let js = cX(bX, eg, ei, er, ed)
1751+ let df = js._1
1752+ let dg = js._2
1753+ let db = js._3
1754+ let cW = js._4
1755+ throw(((((((aI(df) + aI(db)) + aI(eu(bU))) + aI(ed)) + aI(dg)) + aI(dZ)) + aI(cW)))
14551756 }
14561757 else throw("Strict value is not equal to itself.")
14571758 }
14581759
14591760
14601761
1461-@Callable(bV)
1462-func closePosition (eA,eC,eD) = {
1463- let ic = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1464- if ((ic == ic))
1762+@Callable(bL)
1763+func view_getPegAdjustCost (hp) = {
1764+ let cx = bj()
1765+ let cy = bk()
1766+ let ge = gf(hp, cx, cy)
1767+ throw(toString(ge._3))
1768+ }
1769+
1770+
1771+
1772+@Callable(bL)
1773+func view_getTerminalAmmPrice () = {
1774+ let jt = fN()
1775+ let fR = jt._1
1776+ let fS = jt._2
1777+ let hM = aK(aM(fR, bl()), aM(fS, bm()))
1778+ throw(toString(hM))
1779+ }
1780+
1781+
1782+
1783+@Callable(bL)
1784+func view_getFunding () = {
1785+ let gl = dy()
1786+ let ju = gk()
1787+ let go = ju._1
1788+ let gp = ju._2
1789+ let jv = aK(gp, gl)
1790+ let jw = aK(go, gl)
1791+ throw((((aI(jv) + aI(jw)) + aI(fp())) + aI(dy())))
1792+ }
1793+
1794+
1795+
1796+@Callable(bL)
1797+func computeSpotPrice () = {
1798+ let id = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1799+ if ((id == id))
14651800 then {
1466- let ce = bU(bV)
1467- let iQ = valueOrErrorMessage(addressFromString(ce), "Invalid caller")
1468- let cn = cl(ce)
1469- if (if (if (if (if (if (!(co(ce)))
1470- then true
1471- else !(cp()))
1472- then true
1473- else cq())
1474- then true
1475- else (0 >= eA))
1476- then true
1477- else (0 > eC))
1478- then true
1479- else dC())
1480- then throw("Invalid closePosition parameters")
1481- else {
1482- let iR = cd(ce)
1483- let eF = iR._1
1484- let eG = iR._2
1485- let eH = iR._3
1486- let eI = iR._4
1487- let iS = ez(ce, eA, cn, eC, eD, true)
1488- let fd = iS._1
1489- let fm = iS._2
1490- let ff = iS._3
1491- let fg = iS._4
1492- let eZ = iS._5
1493- let eU = iS._6
1494- let fl = iS._7
1495- let cH = iS._8
1496- let cI = iS._9
1497- let eP = iS._10
1498- let iA = iS._11
1499- let iB = iS._12
1500- let iC = iS._13
1501- let it = iS._14
1502- let iu = iS._15
1503- let iT = iS._16
1504- if ((eZ > 0))
1505- then throw("Invalid closePosition parameters: bad debt")
1506- else {
1507- let eM = (fd != 0)
1508- let iU = (fl + iT)
1509- let iV = (bp() - iU)
1510- let iW = if ((0 > iV))
1511- then 0
1512- else iV
1513- let iL = invoke(at(), "withdrawLocked", [iU], nil)
1514- if ((iL == iL))
1515- then {
1516- let iX = gI(iT)
1517- let gK = iX._1
1518- let gL = iX._2
1519- let iF = invoke(at(), "addFree", nil, [AttachedPayment(aq(), gL)])
1520- if ((iF == iF))
1521- then {
1522- let iG = invoke(au(), "notifyFees", [ce, iT], nil)
1523- if ((iG == iG))
1524- then {
1525- let iH = invoke(au(), "notifyNotional", [ce, ff], nil)
1526- if ((iH == iH))
1527- then (((((if (eM)
1528- then hi(ce, fd, fm, ff, fg, bT())
1529- else hC(ce)) ++ hv(cH, cI, eP, iA, iB, iC, it, iu)) ++ (if ((fl > 0))
1530- then hD(iQ, fl)
1531- else nil)) ++ hG(iW)) ++ hH(gK))
1532- else throw("Strict value is not equal to itself.")
1533- }
1534- else throw("Strict value is not equal to itself.")
1535- }
1536- else throw("Strict value is not equal to itself.")
1537- }
1538- else throw("Strict value is not equal to itself.")
1539- }
1540- }
1801+ let ge = dS()
1802+ $Tuple2(nil, ge)
15411803 }
15421804 else throw("Strict value is not equal to itself.")
15431805 }
15441806
15451807
15461808
1547-@Callable(bV)
1548-func liquidate (ce) = {
1549- let ic = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1550- if ((ic == ic))
1551- then {
1552- let iY = em(ce, aM)
1553- let iZ = if (dS())
1554- then {
1555- let ja = em(ce, aN)
1556- ba(iY, ja)
1557- }
1558- else iY
1559- if (if (if (if (if (!(bW(iZ, bF(), false)))
1560- then true
1561- else !(co(ce)))
1562- then true
1563- else !(cp()))
1564- then true
1565- else cq())
1566- then true
1567- else dC())
1568- then throw("Unable to liquidate")
1569- else {
1570- let jb = if (if ((iY > bG()))
1571- then true
1572- else (bH() > 0))
1573- then true
1574- else (aI > bH())
1575- let eF = cd(ce)._1
1576- let dW = aZ(eF)
1577- let jc = if (jb)
1578- then {
1579- let jd = eu(ce, eF)
1580- let je = aQ(aZ(jd), dW)
1581- $Tuple2(je, aZ(jd))
1582- }
1583- else $Tuple2(0, dW)
1584- let je = jc._1
1585- let jd = jc._2
1586- let jf = ez(ce, if (jb)
1587- then jd
1588- else dW, bG(), 0, true, false)
1589- let fd = jf._1
1590- let fm = jf._2
1591- let ff = jf._3
1592- let fg = jf._4
1593- let eZ = jf._5
1594- let eU = jf._6
1595- let fl = jf._7
1596- let cH = jf._8
1597- let cI = jf._9
1598- let eP = jf._10
1599- let iA = jf._11
1600- let iB = jf._12
1601- let iC = jf._13
1602- let it = jf._14
1603- let iu = jf._15
1604- let jg = jf._16
1605- let jh = (jg / 2)
1606- let gL = (jg - jh)
1607- let iV = (bp() - jg)
1608- let ji = if ((0 > iV))
1609- then 0
1610- else iV
1611- let iM = if ((eZ > 0))
1612- then {
1613- let iM = invoke(at(), "exchangeFreeAndLocked", [eZ], nil)
1614- if ((iM == iM))
1615- then nil
1616- else throw("Strict value is not equal to itself.")
1617- }
1618- else nil
1619- if ((iM == iM))
1620- then {
1621- let iL = invoke(at(), "withdrawLocked", [jg], nil)
1622- if ((iL == iL))
1623- then {
1624- let jj = invoke(at(), "addFree", nil, [AttachedPayment(aq(), gL)])
1625- if ((jj == jj))
1626- then {
1627- let iH = invoke(au(), "notifyNotional", [ce, ff], nil)
1628- if ((iH == iH))
1629- then ((((if (jb)
1630- then hi(ce, fd, fm, ff, fg, bT())
1631- else hC(ce)) ++ hv(cH, cI, eP, iA, iB, iC, it, iu)) ++ hD(bV.caller, jh)) ++ hG(ji))
1632- else throw("Strict value is not equal to itself.")
1633- }
1634- else throw("Strict value is not equal to itself.")
1635- }
1636- else throw("Strict value is not equal to itself.")
1637- }
1638- else throw("Strict value is not equal to itself.")
1639- }
1640- }
1641- else throw("Strict value is not equal to itself.")
1809+@Callable(bL)
1810+func computeFeeForTraderWithArtifact (bU,gr) = {
1811+ let ge = gD(bU, gr)
1812+ $Tuple2(nil, ge)
16421813 }
16431814
16441815
1645-
1646-@Callable(bV)
1647-func payFunding () = {
1648- let ic = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1649- if ((ic == ic))
1816+@Verifier(jx)
1817+func jy () = {
1818+ let jz = getString(this, X)
1819+ if (isDefined(jz))
16501820 then {
1651- let jk = bB()
1652- if (if (if ((jk > bT()))
1653- then true
1654- else !(cp()))
1655- then true
1656- else cq())
1657- then throw(((("Invalid funding block timestamp: " + toString(bT())) + " < ") + toString(jk)))
1658- else {
1659- let gj = dv()
1660- let jl = gi()
1661- let gm = jl._1
1662- let gn = jl._2
1663- gY((jk + bE()), (bM() + gn), (bN() + gm), aQ(gn, gj), aQ(gm, gj))
1664- }
1821+ let jA = getString(addressFromStringValue(value(jz)), Z)
1822+ if (isDefined(jA))
1823+ then valueOrElse(getBoolean(addressFromStringValue(value(jA)), ((("status_" + toString(this)) + "_") + toBase58String(jx.id))), false)
1824+ else throw("unable to verify: admin not set in coordinator")
16651825 }
1666- else throw("Strict value is not equal to itself.")
1826+ else sigVerify(jx.bodyBytes, jx.proofs[0], jx.senderPublicKey)
16671827 }
1668-
1669-
1670-
1671-@Callable(bV)
1672-func syncTerminalPriceToOracle () = {
1673- let cz = bt()
1674- let cA = bu()
1675- let jm = gd(dv(), cz, cA)
1676- let hP = jm._1
1677- let hQ = jm._2
1678- let gh = jm._3
1679- let hR = if ((gh != 0))
1680- then {
1681- let hR = invoke(at(), "exchangeFreeAndLocked", [gh], nil)
1682- if ((hR == hR))
1683- then nil
1684- else throw("Strict value is not equal to itself.")
1685- }
1686- else nil
1687- if ((hR == hR))
1688- then ((hG((bp() + gh)) ++ hu(hP, hQ)) ++ hm(aQ(aS(cz, hP), aS(cA, hQ))))
1689- else throw("Strict value is not equal to itself.")
1690- }
1691-
1692-
1693-
1694-@Callable(bV)
1695-func view_calcRemainMarginWithFundingPayment (ce) = {
1696- let ic = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1697- if ((ic == ic))
1698- then {
1699- let jn = cd(ce)
1700- let ch = jn._1
1701- let ef = jn._2
1702- let eo = jn._3
1703- let eh = jn._4
1704- let eq = jn._5
1705- let jo = ed(ce, aM)
1706- let dY = jo._1
1707- let ec = jo._2
1708- let jp = cZ(ch, ef, eh, eq, ec)
1709- let dh = jp._1
1710- let di = jp._2
1711- let dd = jp._3
1712- let cY = jp._4
1713- throw(((((((aO(dh) + aO(dd)) + aO(et(ce))) + aO(ec)) + aO(di)) + aO(dY)) + aO(cY)))
1714- }
1715- else throw("Strict value is not equal to itself.")
1716- }
1717-
1718-
1719-
1720-@Callable(bV)
1721-func view_getPegAdjustCost (hn) = {
1722- let cz = bt()
1723- let cA = bu()
1724- let gc = gd(hn, cz, cA)
1725- throw(toString(gc._3))
1726- }
1727-
1728-
1729-
1730-@Callable(bV)
1731-func view_getTerminalAmmPrice () = {
1732- let jq = fL()
1733- let fP = jq._1
1734- let fQ = jq._2
1735- let hK = aQ(aS(fP, bv()), aS(fQ, bw()))
1736- throw(toString(hK))
1737- }
1738-
1739-
1740-
1741-@Callable(bV)
1742-func view_getFunding () = {
1743- let gj = dv()
1744- let jr = gi()
1745- let gm = jr._1
1746- let gn = jr._2
1747- let js = aQ(gn, gj)
1748- let jt = aQ(gm, gj)
1749- throw((((aO(js) + aO(jt)) + aO(fn())) + aO(dv())))
1750- }
1751-
1752-
1753-
1754-@Callable(bV)
1755-func computeSpotPrice () = {
1756- let ic = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1757- if ((ic == ic))
1758- then {
1759- let gc = dR()
1760- $Tuple2(nil, gc)
1761- }
1762- else throw("Strict value is not equal to itself.")
1763- }
1764-
1765-
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())
17761828
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let a = "k_ora_key"
4+let a = "k_baseOracle"
55
6-let b = "k_ora_block_key"
6+let b = "k_quoteOracle"
77
8-let c = "k_ora_open_key"
8+let c = "k_balance"
99
10-let d = "k_ora"
10+let d = "k_sequence"
1111
12-let e = "k_balance"
12+let e = "k_positionSize"
1313
14-let f = "k_sequence"
14+let f = "k_positionMargin"
1515
16-let g = "k_positionSize"
16+let g = "k_positionOpenNotional"
1717
18-let h = "k_positionMargin"
18+let h = "k_positionFraction"
1919
20-let i = "k_positionOpenNotional"
20+let i = "k_positionSequence"
2121
22-let j = "k_positionFraction"
22+let j = "k_positionAsset"
2323
24-let k = "k_positionSequence"
24+let k = "k_positionFee"
2525
26-let l = "k_positionAsset"
26+let l = "k_positionTimestamp"
2727
28-let m = "k_positionFee"
28+let m = "k_initialized"
2929
30-let n = "k_positionTimestamp"
30+let n = "k_paused"
3131
32-let o = "k_initialized"
32+let o = "k_closeOnly"
3333
34-let p = "k_paused"
34+let p = "k_fee"
3535
36-let q = "k_closeOnly"
36+let q = "k_rollover_fee"
3737
38-let r = "k_fee"
38+let r = "k_fundingPeriod"
3939
40-let s = "k_rollover_fee"
40+let s = "k_initMarginRatio"
4141
42-let t = "k_fundingPeriod"
42+let t = "k_mmr"
4343
44-let u = "k_initMarginRatio"
44+let u = "k_liquidationFeeRatio"
4545
46-let v = "k_mmr"
46+let v = "k_partLiquidationRatio"
4747
48-let w = "k_liquidationFeeRatio"
48+let w = "k_spreadLimit"
4949
50-let x = "k_partLiquidationRatio"
50+let x = "k_maxPriceImpact"
5151
52-let y = "k_spreadLimit"
52+let y = "k_maxPriceSpread"
5353
54-let z = "k_maxPriceImpact"
54+let z = "k_maxOpenNotional"
5555
56-let A = "k_maxPriceSpread"
56+let A = "k_feeToStakersPercent"
5757
58-let B = "k_maxOpenNotional"
58+let B = "k_maxOracleDelay"
5959
60-let C = "k_feeToStakersPercent"
60+let C = "k_lastDataStr"
6161
62-let D = "k_maxOracleDelay"
62+let D = "k_lastMinuteId"
6363
64-let E = "k_lastDataStr"
64+let E = "k_twapDataLastCumulativePrice"
6565
66-let F = "k_lastMinuteId"
66+let F = "k_twapDataLastPrice"
6767
68-let G = "k_twapDataLastCumulativePrice"
68+let G = "k_twapDataPreviousMinuteId"
6969
70-let H = "k_twapDataLastPrice"
70+let H = "k_latestLongPremiumFraction"
7171
72-let I = "k_twapDataPreviousMinuteId"
72+let I = "k_latestShortPremiumFraction"
7373
74-let J = "k_latestLongPremiumFraction"
74+let J = "k_nextFundingBlockMinTimestamp"
7575
76-let K = "k_latestShortPremiumFraction"
76+let K = "k_longFundingRate"
7777
78-let L = "k_nextFundingBlockMinTimestamp"
78+let L = "k_shortFundingRate"
7979
80-let M = "k_longFundingRate"
80+let M = "k_qtAstR"
8181
82-let N = "k_shortFundingRate"
82+let N = "k_bsAstR"
8383
84-let O = "k_qtAstR"
84+let O = "k_qtAstW"
8585
86-let P = "k_bsAstR"
86+let P = "k_bsAstW"
8787
88-let Q = "k_qtAstW"
88+let Q = "k_totalPositionSize"
8989
90-let R = "k_bsAstW"
90+let R = "k_totalLongPositionSize"
9191
92-let S = "k_totalPositionSize"
92+let S = "k_totalShortPositionSize"
9393
94-let T = "k_totalLongPositionSize"
94+let T = "k_openInterestNotional"
9595
96-let U = "k_totalShortPositionSize"
96+let U = "k_openInterestShort"
9797
98-let V = "k_openInterestNotional"
98+let V = "k_openInterestLong"
9999
100-let W = "k_openInterestShort"
100+let W = "k_lastTx"
101101
102-let X = "k_openInterestLong"
102+let X = "k_coordinatorAddress"
103103
104-let Y = "k_coordinatorAddress"
104+let Y = "k_vault_address"
105105
106-let Z = "k_vault_address"
106+let Z = "k_admin_address"
107107
108-let aa = "k_admin_address"
108+let aa = "k_quote_asset"
109109
110-let ab = "k_admin_public_key"
110+let ab = "k_quote_staking"
111111
112-let ac = "k_quote_asset"
112+let ac = "k_staking_address"
113113
114-let ad = "k_quote_staking"
114+let ad = "k_miner_address"
115115
116-let ae = "k_staking_address"
116+let ae = "k_orders_address"
117117
118-let af = "k_miner_address"
118+let af = "k_referral_address"
119119
120-let ag = "k_orders_address"
120+let ag = "k_exchange_address"
121121
122-let ah = "k_referral_address"
122+let ah = "k_nft_manager_address"
123123
124-let ai = "k_exchange_address"
125-
126-let aj = "k_nft_manager_address"
127-
128-func ak (al,am) = ((al + "_") + am)
124+func ai (aj,ak) = ((aj + "_") + ak)
129125
130126
131-func an () = valueOrErrorMessage(addressFromString(getStringValue(this, Y)), "Coordinator not set")
127+func al () = valueOrErrorMessage(addressFromString(getStringValue(this, X)), "Coordinator not set")
132128
133129
134-func ao () = addressFromString(getStringValue(an(), aa))
130+func am () = addressFromString(getStringValue(al(), Z))
135131
136132
137-func ap () = fromBase58String(getStringValue(an(), ab))
133+func an () = fromBase58String(getStringValue(al(), aa))
138134
139135
140-func aq () = fromBase58String(getStringValue(an(), ac))
136+func ao () = valueOrErrorMessage(addressFromString(getStringValue(al(), ab)), "Quote asset staking not set")
141137
142138
143-func ar () = valueOrErrorMessage(addressFromString(getStringValue(an(), ad)), "Quote asset staking not set")
139+func ap () = valueOrErrorMessage(addressFromString(getStringValue(al(), ac)), "Staking not set")
144140
145141
146-func as () = valueOrErrorMessage(addressFromString(getStringValue(an(), ae)), "Staking not set")
142+func aq () = valueOrErrorMessage(addressFromString(getStringValue(al(), Y)), "Vault not set")
147143
148144
149-func at () = valueOrErrorMessage(addressFromString(getStringValue(an(), Z)), "Vault not set")
145+func ar () = valueOrErrorMessage(addressFromString(getStringValue(al(), ad)), "Miner not set")
150146
151147
152-func au () = valueOrErrorMessage(addressFromString(getStringValue(an(), af)), "Miner not set")
148+func as () = valueOrErrorMessage(addressFromString(getStringValue(al(), ae)), "Orders not set")
153149
154150
155-func av () = valueOrErrorMessage(addressFromString(getStringValue(an(), ag)), "Orders not set")
151+func at () = valueOrErrorMessage(addressFromString(getStringValue(al(), af)), "Referral not set")
156152
157153
158-func aw () = valueOrErrorMessage(addressFromString(getStringValue(an(), ah)), "Referral not set")
154+func au () = valueOrErrorMessage(addressFromString(getStringValue(al(), ah)), "NFT Manager not set")
159155
160156
161-func ax () = valueOrErrorMessage(addressFromString(getStringValue(an(), aj)), "NFT Manager not set")
157+let av = "k_token_param"
158+
159+let aw = "k_token_type"
160+
161+let ax = "fee_reduction"
162+
163+let ay = 1
164+
165+let az = 2
166+
167+let aA = 15
168+
169+let aB = 1000
170+
171+let aC = 6
172+
173+let aD = (1 * (((((10 * 10) * 10) * 10) * 10) * 10))
174+
175+let aE = (525600 * aD)
176+
177+let aF = (86400 * aD)
178+
179+let aG = 1
180+
181+let aH = 2
182+
183+func aI (aJ) = (toString(aJ) + ",")
162184
163185
164-func ay () = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(an(), ai), "No swap address")), "Invalid swap address")
186+func aK (aJ,aL) = fraction(aJ, aD, aL, HALFEVEN)
165187
166188
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) + ",")
189+func aM (aJ,aL) = fraction(aJ, aL, aD, HALFEVEN)
198190
199191
200-func aQ (aP,aR) = fraction(aP, aI, aR, HALFEVEN)
192+func aN (aJ,aL) = fraction(aJ, toBigInt(aD), aL, HALFEVEN)
201193
202194
203-func aS (aP,aR) = fraction(aP, aR, aI, HALFEVEN)
195+func aO (aJ,aL) = fraction(aJ, aL, toBigInt(aD), HALFEVEN)
204196
205197
206-func aT (aP) = sqrt(aP, aH, aH, HALFEVEN)
198+func aP (aJ) = if ((aJ > 0))
199+ then aJ
200+ else -(aJ)
207201
208202
209-func aU (aP,aR) = pow(aP, aH, aR, aH, aH, HALFEVEN)
203+func aQ (aJ,aL) = if ((aJ >= aL))
204+ then aJ
205+ else aL
210206
211207
212-func aV (aP,aR) = fraction(aP, toBigInt(aI), aR, HALFEVEN)
208+func aR (aS) = if ((size(aS) == 0))
209+ then ""
210+ else makeString(aS, ",")
213211
214212
215-func aW (aP,aR) = fraction(aP, aR, toBigInt(aI), HALFEVEN)
213+func aT (aU) = if ((aU == ""))
214+ then nil
215+ else split(aU, ",")
216216
217217
218-func aX (aP) = sqrtBigInt(aP, aH, aH, HALFEVEN)
218+func aV (aS,aW,aX) = if ((size(aS) > aW))
219+ then (removeByIndex(aS, 0) :+ aX)
220+ else (aS :+ aX)
219221
220222
221-func aY (aP,aR) = pow(aP, aH, aR, aH, aH, HALFEVEN)
223+func aY (aZ) = valueOrErrorMessage(getInteger(this, aZ), ("no value for " + aZ))
222224
223225
224-func aZ (aP) = if ((aP > 0))
225- then aP
226- else -(aP)
226+func ba (aZ,bb) = valueOrElse(getInteger(this, aZ), bb)
227227
228228
229-func ba (aP,aR) = if ((aP >= aR))
230- then aP
231- else aR
232-
233-
234-func bb (bc) = if ((size(bc) == 0))
235- then ""
236- else makeString(bc, ",")
237-
238-
239-func bd (be) = if ((be == ""))
240- then nil
241- else split(be, ",")
242-
243-
244-func bf (bc,bg,bh) = if ((size(bc) > bg))
245- then (removeByIndex(bc, 0) :+ bh)
246- else (bc :+ bh)
247-
248-
249-func bi (bj) = valueOrErrorMessage(getInteger(this, bj), ("no value for " + bj))
250-
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
229+func bc (ak,aj) = {
230+ let bd = valueOrErrorMessage(getString(ak, aj), ("No value for key " + aj))
231+ bd
258232 }
259233
260234
261-func bo (am,al) = {
262- let bn = valueOrErrorMessage(getInteger(am, al), ("No value for key " + al))
263- bn
235+func be (ak,aj) = {
236+ let bd = valueOrErrorMessage(getInteger(ak, aj), ("No value for key " + aj))
237+ bd
264238 }
265239
266240
267-func bp () = bi(e)
241+func bf () = aY(c)
268242
269243
270-func bq () = bi(r)
244+func bg () = aY(p)
271245
272246
273-func br () = bi(s)
247+func bh () = aY(q)
274248
275249
276-func bs () = bi(u)
250+func bi () = aY(s)
277251
278252
279-func bt () = bi(O)
253+func bj () = aY(M)
280254
281255
282-func bu () = bi(P)
256+func bk () = aY(N)
283257
284258
285-func bv () = bk(Q, aI)
259+func bl () = ba(O, aD)
286260
287261
288-func bw () = bk(R, aI)
262+func bm () = ba(P, aD)
289263
290264
291-func bx () = bi(S)
265+func bn () = aY(Q)
292266
293267
294-func by () = bi(V)
268+func bo () = aY(T)
295269
296270
297-func bz () = bi(W)
271+func bp () = aY(U)
298272
299273
300-func bA () = bi(X)
274+func bq () = aY(V)
301275
302276
303-func bB () = bi(L)
277+func br () = aY(J)
304278
305279
306-func bC () = bi(t)
280+func bs () = aY(r)
307281
308282
309-func bD () = (bC() * aI)
283+func bt () = (bs() * aD)
310284
311285
312-func bE () = (bC() * aG)
286+func bu () = (bs() * aB)
313287
314288
315-func bF () = bi(v)
289+func bv () = aY(t)
316290
317291
318-func bG () = bi(w)
292+func bw () = aY(u)
319293
320294
321-func bH () = bi(x)
295+func bx () = aY(v)
322296
323297
324-func bI () = bi(y)
298+func by () = aY(w)
325299
326300
327-func bJ () = bi(z)
301+func bz () = aY(x)
328302
329303
330-func bK () = bi(A)
304+func bA () = aY(y)
331305
332306
333-func bL () = bi(B)
307+func bB () = aY(z)
334308
335309
336-func bM () = bi(J)
310+func bC () = aY(H)
337311
338312
339-func bN () = bi(K)
313+func bD () = aY(I)
340314
341315
342-func bO () = bi(U)
316+func bE () = aY(S)
343317
344318
345-func bP () = bi(T)
319+func bF () = aY(R)
346320
347321
348-func bQ () = bk(f, 0)
322+func bG () = ba(d, 0)
349323
350324
351-func bR () = bi(C)
325+func bH () = aY(A)
352326
353327
354-func bS () = bi(D)
328+func bI () = aY(B)
355329
356330
357-func bT () = lastBlock.timestamp
331+func bJ () = lastBlock.timestamp
358332
359333
360-func bU (bV) = valueOrElse(getString(av(), "k_sender"), toString(bV.caller))
334+func bK (bL) = valueOrElse(getString(as(), "k_sender"), toString(bL.caller))
361335
362336
363-func bW (bX,bY,bZ) = {
364- let ca = (bX - bY)
365- if (if (bZ)
366- then (0 > ca)
337+func bM (bN,bO,bP) = {
338+ let bQ = (bN - bO)
339+ if (if (bP)
340+ then (0 > bQ)
367341 else false)
368- then throw(((("Invalid margin: " + toString(bX)) + " < ") + toString(bY)))
369- else if (if (!(bZ))
370- then (ca >= 0)
342+ then throw(((("Invalid margin: " + toString(bN)) + " < ") + toString(bO)))
343+ else if (if (!(bP))
344+ then (bQ >= 0)
371345 else false)
372- then throw(((("Invalid margin: " + toString(bX)) + " > ") + toString(bY)))
346+ then throw(((("Invalid margin: " + toString(bN)) + " > ") + toString(bO)))
373347 else true
374348 }
375349
376350
377-func cb (cc) = if ((cc == 0))
351+func bR (bS) = if ((bS == 0))
378352 then throw("Should not be called with _positionSize == 0")
379- else if ((cc > 0))
380- then bM()
381- else bN()
353+ else if ((bS > 0))
354+ then bC()
355+ else bD()
382356
383357
384-func cd (ce) = {
385- let cf = getInteger(this, ak(g, ce))
386- let cg = cf
387- if ($isInstanceOf(cg, "Int"))
358+func bT (bU) = {
359+ let bV = getInteger(this, ai(e, bU))
360+ let bW = bV
361+ if ($isInstanceOf(bW, "Int"))
388362 then {
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)))
363+ let bX = bW
364+ $Tuple5(bX, getIntegerValue(this, ai(f, bU)), getIntegerValue(this, ai(g, bU)), getIntegerValue(this, ai(h, bU)), getIntegerValue(this, ai(l, bU)))
391365 }
392366 else $Tuple5(0, 0, 0, 0, 0)
393367 }
394368
395369
396-func ci (ce) = {
397- let cj = getString(this, ak(l, ce))
398- let cg = cj
399- if ($isInstanceOf(cg, "String"))
370+func bY (bU) = {
371+ let bZ = getString(this, ai(j, bU))
372+ let bW = bZ
373+ if ($isInstanceOf(bW, "String"))
400374 then {
401- let ck = cg
402- ck
375+ let ca = bW
376+ ca
403377 }
404- else toBase58String(aq())
378+ else toBase58String(an())
405379 }
406380
407381
408-func cl (ce) = {
409- let cm = getInteger(this, ak(m, ce))
410- let cg = cm
411- if ($isInstanceOf(cg, "Int"))
382+func cb (bU) = {
383+ let cc = getInteger(this, ai(k, bU))
384+ let bW = cc
385+ if ($isInstanceOf(bW, "Int"))
412386 then {
413- let cn = cg
414- cn
387+ let cd = bW
388+ cd
415389 }
416- else bq()
390+ else bg()
417391 }
418392
419393
420-func co (ce) = if ((cd(ce)._1 == 0))
394+func ce (bU) = if ((bT(bU)._1 == 0))
421395 then throw("No open position")
422396 else true
397+
398+
399+func cf (cg) = {
400+ let ch = getString(this, cg)
401+ if (if (isDefined(ch))
402+ then (value(ch) != "")
403+ else false)
404+ then {
405+ let ci = split(value(ch), ",")
406+ let cj = valueOrErrorMessage(addressFromString(ci[0]), ("Invalid oracle address in: " + value(ch)))
407+ let ck = ci[1]
408+ let cl = ci[2]
409+ let cm = ci[3]
410+ $Tuple4(cj, ck, cl, cm)
411+ }
412+ else unit
413+ }
414+
415+
416+func cn () = valueOrElse(getBoolean(this, m), false)
417+
418+
419+func co () = valueOrElse(getBoolean(this, n), false)
423420
424421
425422 func cp () = valueOrElse(getBoolean(this, o), false)
426423
427424
428-func cq () = valueOrElse(getBoolean(this, p), false)
429-
430-
431-func cr () = valueOrElse(getBoolean(this, q), false)
432-
433-
434-func cs (ct,cu,cv) = if (ct)
425+func cq (cr,cs,ct) = if (cr)
435426 then {
436- let cw = (bu() - cv)
437- if ((0 >= cw))
427+ let cu = (bk() - ct)
428+ if ((0 >= cu))
438429 then throw("Tx lead to base asset reserve <= 0, revert")
439- else $Tuple3((bt() + cu), cw, (bx() + cv))
430+ else $Tuple3((bj() + cs), cu, (bn() + ct))
440431 }
441432 else {
442- let cx = (bt() - cu)
443- if ((0 >= cx))
433+ let cv = (bj() - cs)
434+ if ((0 >= cv))
444435 then throw("Tx lead to base quote reserve <= 0, revert")
445- else $Tuple3(cx, (bu() + cv), (bx() - cv))
436+ else $Tuple3(cv, (bk() + ct), (bn() - ct))
446437 }
447438
448439
449-func cy (cz,cA) = {
450- let cB = toBigInt(cz)
451- let cC = toBigInt(cA)
452- aW(cB, cC)
440+func cw (cx,cy) = {
441+ let cz = toBigInt(cx)
442+ let cA = toBigInt(cy)
443+ aO(cz, cA)
453444 }
454445
455446
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)
447+func cB (cr,cs) = {
448+ let cx = bj()
449+ let cy = bk()
450+ let cC = bl()
451+ let cD = bm()
452+ let cE = aK(cs, cC)
453+ let aZ = cw(cx, cy)
454+ let cF = if (cr)
455+ then (cx + cE)
456+ else (cx - cE)
457+ let cG = toInt(aN(aZ, toBigInt(cF)))
458+ let cH = aP((cG - cy))
459+ let cI = if (cr)
460+ then cH
461+ else -(cH)
462+ let cJ = cq(cr, cE, cH)
463+ let cK = cJ._1
464+ let cL = cJ._2
465+ let cM = cJ._3
466+ let cN = aK(aM(cx, cC), aM(cy, cD))
467+ let cO = aK(cs, cH)
468+ let cP = aP((cN - cO))
469+ let cQ = (aD - aK(cN, (cN + cP)))
470+ let cR = bz()
471+ if ((cQ > cR))
472+ then throw(((((((((((((("Price impact " + toString(cQ)) + " > max price impact ") + toString(cR)) + " before quote asset: ") + toString(cx)) + " before base asset: ") + toString(cy)) + " quote asset amount to exchange: ") + toString(cs)) + " price before: ") + toString(cN)) + " marketPrice: ") + toString(cO)))
473+ else $Tuple4(cI, cK, cL, cM)
483474 }
484475
485476
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
477+func cS (cT,cU) = {
478+ let cV = ((((bJ() - cU) / 1000) / 60) * aD)
479+ let cW = aK(aM(aM(cT, cV), bh()), aE)
480+ cW
490481 }
491482
492483
493-func cZ (da,cV,db,cW,dc) = {
494- let dd = if ((da != 0))
484+func cX (cY,cT,cZ,cU,da) = {
485+ let db = if ((cY != 0))
495486 then {
496- let de = cb(da)
497- aS((de - db), da)
487+ let dc = bR(cY)
488+ aM((dc - cZ), cY)
498489 }
499490 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)
491+ let cW = cS(cT, cU)
492+ let dd = (((da - cW) - db) + cT)
493+ let de = if ((0 > dd))
494+ then $Tuple2(0, aP(dd))
495+ else $Tuple2(aP(dd), 0)
496+ let df = de._1
497+ let dg = de._2
498+ $Tuple4(df, dg, db, cW)
508499 }
509500
510501
511-func dj (ct,cv,dk,dl,dm,dn,do) = {
512- let cP = aQ(aS(dl, dm), aS(dn, do))
513- if ((cv == 0))
502+func dh (cr,ct,di,dj,dk,dl,dm) = {
503+ let cN = aK(aM(dj, dk), aM(dl, dm))
504+ if ((ct == 0))
514505 then throw("Invalid base asset amount")
515506 else {
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
507+ let aZ = cw(dj, dl)
508+ let dn = if (cr)
509+ then (dl + ct)
510+ else (dl - ct)
511+ let do = toInt(aN(aZ, toBigInt(dn)))
512+ let dp = aP((do - dj))
513+ let dq = aM(dp, dk)
514+ let cR = bz()
515+ let dr = cq(!(cr), dp, ct)
516+ let cK = dr._1
517+ let cL = dr._2
518+ let cM = dr._3
519+ let cO = aK(dq, ct)
520+ let cP = aP((cN - cO))
521+ let cQ = (aD - aK(cN, (cN + cP)))
522+ if (if ((cQ > cR))
523+ then di
533524 else false)
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)
525+ then throw(((((((((((((("Price impact " + toString(cQ)) + " > max price impact ") + toString(cR)) + " before quote asset: ") + toString(dj)) + " before base asset: ") + toString(dl)) + " base asset amount to exchange: ") + toString(ct)) + " price before: ") + toString(cN)) + " market price: ") + toString(cO)))
526+ else $Tuple7(dq, cK, cL, cM, (bF() - (if (cr)
527+ then aP(ct)
528+ else 0)), (bE() - (if (!(cr))
529+ then aP(ct)
530+ else 0)), cQ)
540531 }
541532 }
542533
543534
544-func du (ct,cv,dk) = dj(ct, cv, dk, bt(), bv(), bu(), bw())
535+func ds (cr,ct,di) = dh(cr, ct, di, bj(), bl(), bk(), bm())
545536
546537
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 != ""))
538+func dt (du,ck,cl) = {
539+ let dv = valueOrErrorMessage(getInteger(du, ck), ((("Can not get oracle price. Oracle: " + toString(du)) + " key: ") + ck))
540+ if ((cl != ""))
553541 then {
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
542+ let dw = lastBlock.height
543+ let dx = valueOrErrorMessage(getInteger(du, cl), ((("Can not get oracle block. Oracle: " + toString(du)) + " key: ") + cl))
544+ if (((dw - dx) > bI()))
545+ then throw(((("Oracle stale data. Last oracle block: " + toString(dx)) + " current block: ") + toString(dw)))
546+ else dv
559547 }
560- else dy
548+ else dv
561549 }
562550
563551
564-func dC () = {
565- let dw = valueOrErrorMessage(addressFromString(getStringValue(this, d)), "")
566- let dD = valueOrElse(getString(this, c), "")
567- if ((dD != ""))
552+func dy () = {
553+ let dz = valueOrErrorMessage(cf(a), "No base asset oracle data")
554+ let dA = dt(dz._1, dz._2, dz._3)
555+ let dB = cf(b)
556+ let dC = if (isDefined(dB))
568557 then {
569- let dE = valueOrErrorMessage(getBoolean(dw, dD), ((("Can not get oracle is open/closed. Oracle: " + toString(dw)) + " key: ") + dD))
570- !(dE)
558+ let dD = value(dB)
559+ dt(dD._1, dD._2, dD._3)
560+ }
561+ else aD
562+ aK(dA, dC)
563+ }
564+
565+
566+func dE () = {
567+ let dz = valueOrErrorMessage(cf(a), "No base asset oracle data")
568+ let du = dz._1
569+ let cm = dz._4
570+ if ((cm != ""))
571+ then {
572+ let dF = valueOrErrorMessage(getBoolean(du, cm), ((("Can not get oracle is open/closed. Oracle: " + toString(du)) + " key: ") + cm))
573+ !(dF)
571574 }
572575 else false
573576 }
574577
575578
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
579+func dG (dH,dj,dl,cC,cD) = {
580+ let dI = aK(aM(dj, cC), aM(dl, cD))
581+ let dJ = aK((dH + dI), (2 * aD))
582+ let dG = aK(aP((dH - dI)), dJ)
583+ dG
581584 }
582585
583586
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)
587+func dK (dj,dl) = {
588+ let dL = dy()
589+ let cC = bl()
590+ let cD = bm()
591+ let dM = dG(dL, bj(), bk(), cC, cD)
592+ let dN = dG(dL, dj, dl, cC, cD)
593+ if (if ((dN > bA()))
594+ then (dN > dM)
592595 else false)
593- then throw(((("Price spread " + toString(dM)) + " > max price spread ") + toString(bK())))
596+ then throw(((("Price spread " + toString(dN)) + " > max price spread ") + toString(bA())))
594597 else true
595598 }
596599
597600
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)))
601+func dO (dP,dQ) = {
602+ let dR = bB()
603+ if ((dP > dR))
604+ then throw(((("Long open notional " + toString(dP)) + " > max open notional ") + toString(dR)))
605+ else if ((dQ > dR))
606+ then throw(((("Short open notional " + toString(dQ)) + " > max open notional ") + toString(dR)))
604607 else true
605608 }
606609
607610
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))
611+func dS () = {
612+ let dj = bj()
613+ let dl = bk()
614+ let cC = bl()
615+ let cD = bm()
616+ aK(aM(dj, cC), aM(dl, cD))
614617 }
615618
616619
617-func dS () = {
618- let dK = dv()
619- let dT = dR()
620- (aQ(aZ((dK - dT)), dK) > bI())
620+func dT () = {
621+ let dL = dy()
622+ let dU = dS()
623+ (aK(aP((dL - dU)), dL) > by())
621624 }
622625
623626
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))
627+func dV (bS,dW,dj,dk,dl,dm) = {
628+ let dX = aP(bS)
629+ let dY = (0 > bS)
630+ let dZ = if ((dW == aG))
628631 then {
629- let dZ = dj(!(dX), dW, false, dl, dm, dn, do)._1
630- dZ
632+ let ea = dh(!(dY), dX, false, dj, dk, dl, dm)._1
633+ ea
631634 }
632- else aS(dW, dv())
633- dY
635+ else aM(dX, dy())
636+ dZ
634637 }
635638
636639
637-func ea (cc,eb,dl,dm,dn,do,dV) = if ((cc == 0))
640+func eb (bS,ec,dj,dk,dl,dm,dW) = if ((bS == 0))
638641 then throw("Invalid position size")
639642 else {
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)
643+ let dY = (0 > bS)
644+ let dZ = dV(bS, dW, dj, dk, dl, dm)
645+ let ed = if (dY)
646+ then (ec - dZ)
647+ else (dZ - ec)
648+ $Tuple2(dZ, ed)
646649 }
647650
648651
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)
652+func ee (bU,dW) = {
653+ let ef = bT(bU)
654+ let bX = ef._1
655+ let eg = ef._2
656+ let eh = ef._3
657+ let ei = ef._4
658+ eb(bX, eh, bj(), bl(), bk(), bm(), dW)
656659 }
657660
658661
659-func ei (ej,ek,el) = aQ((ej - ek), el)
662+func ej (ek,el,em) = aK((ek - el), em)
660663
661664
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)
665+func en (bU,dW) = {
666+ let eo = bT(bU)
667+ let bX = eo._1
668+ let eg = eo._2
669+ let ep = eo._3
670+ let eq = eo._4
671+ let er = eo._5
672+ let es = ee(bU, dW)
673+ let dZ = es._1
674+ let ed = es._2
675+ let et = cX(bX, eg, eq, er, ed)
676+ let df = et._1
677+ let dg = et._2
678+ ej(df, dg, dZ)
676679 }
677680
678681
679-func et (ce) = em(ce, aM)
682+func eu (bU) = en(bU, aG)
680683
681684
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())
685+func ev (bU,bS) = {
686+ let ew = aQ(bx(), (aD - aK(eu(bU), bv())))
687+ let ex = aM(aP(bS), ew)
688+ let ey = ds((bS > 0), ex, false)
689+ let ez = ey._1
690+ let cQ = ey._7
691+ if ((bz() > cQ))
692+ then ex
693+ else aM(aP(bS), bx())
691694 }
692695
693696
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)
697+func eA (bU,eB,eC,eD,eE,di,eF) = {
698+ let eG = bT(bU)
699+ let eH = eG._1
700+ let eI = eG._2
701+ let eJ = eG._3
702+ let eK = eG._4
703+ let eL = eG._5
704+ let eM = (eH > 0)
705+ let eN = aP(eH)
706+ if (if ((eN >= eB))
707+ then (eB > 0)
705708 else false)
706709 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))
710+ let eO = (eN > eB)
711+ let eP = ds((eH > 0), eB, di)
712+ let eQ = eP._1
713+ let cF = eP._2
714+ let cG = eP._3
715+ let eR = eP._4
716+ let eS = if ((eH > 0))
717+ then -(eB)
718+ else eB
719+ let eT = ee(bU, aG)
720+ let eU = eT._1
721+ let ed = eT._2
722+ let eV = aK(aP(eS), eN)
723+ let eW = aM(ed, eV)
724+ let eX = cX(eH, eI, eK, eL, ed)
725+ let eY = eX._1
726+ let eZ = eX._2
727+ let fa = eX._3
728+ let cW = eX._4
729+ let fb = cX(eH, eI, eK, eL, eW)._2
730+ let fc = aM(aM(eU, eV), eC)
731+ let fd = (ed - eW)
732+ let fe = if ((eH > 0))
733+ then ((eU - eQ) - fd)
734+ else ((fd + eU) - eQ)
735+ let ff = (eH + eS)
736+ let fg = if ((ff == 0))
734737 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)
738+ else $Tuple2(aP(fe), bR(ff))
739+ let fh = fg._1
740+ let fi = fg._2
741+ let fj = (eJ - fh)
742+ let fk = en(bU, aG)
743+ let fl = if ((eH > 0))
744+ then (aM((fh + fd), fk) - fd)
745+ else (aM((fh - fd), fk) - fd)
746+ let fm = ((eY - (fl + fd)) - fc)
747+ let fn = if ((0 > fm))
748+ then if (eF)
749+ then 0
750+ else throw("Invalid internalClosePosition params: unable to pay fee")
751+ else fm
752+ let fo = if (eE)
753+ then (fl + fn)
754+ else fl
755+ if (if ((eD != 0))
756+ then (eD > eQ)
752757 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
758+ then throw(((("Limit error: " + toString(eQ)) + " < ") + toString(eD)))
759+ else $Tuple17(ff, fo, fh, fi, fb, eW, if (if (eE)
760+ then eO
756761 else false)
757762 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)
763+ else fn, cF, cG, eR, (bo() - fj), (bF() - (if (eM)
764+ then aP(eS)
765+ else 0)), (bE() - (if (!(eM))
766+ then aP(eS)
767+ else 0)), (bq() - (if (eM)
768+ then fj
769+ else 0)), (bp() - (if (!(eM))
770+ then fj
771+ else 0)), (fc + cW), eQ)
767772 }
768- else throw("Invalid internalClosePosition params: invalid position size")
773+ else throw(((("Invalid internalClosePosition params: invalid position size: " + toString(eB)) + " max: ") + toString(eN)))
769774 }
770775
771776
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
777+func fp () = {
778+ let fq = ((bJ() / 1000) / 60)
779+ let fr = (fq - aA)
780+ let fs = valueOrElse(getString(this, C), "")
781+ let ft = split(fs, ",")
782+ func fu (fv,fw) = if ((fr >= valueOrErrorMessage(parseInt(fw), ("getTwapSpotPrice: invalid int: " + fs))))
783+ then (fv :+ parseIntValue(fw))
784+ else fv
780785
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])
786+ let fx = {
787+ let fy = ft
788+ let fz = size(fy)
789+ let fA = nil
790+ func fB (fC,fD) = if ((fD >= fz))
791+ then fC
792+ else fu(fC, fy[fD])
788793
789- func fC (fA,fB) = if ((fB >= fx))
790- then fA
794+ func fE (fC,fD) = if ((fD >= fz))
795+ then fC
791796 else throw("List size exceeds 20")
792797
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)
798+ fE(fB(fB(fB(fB(fB(fB(fB(fB(fB(fB(fB(fB(fB(fB(fB(fB(fB(fB(fB(fB(fA, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
794799 }
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)
800+ let fF = if ((size(fx) > 0))
801+ then max(fx)
802+ else valueOrErrorMessage(parseInt(ft[0]), ("getTwapSpotPrice: invalid int: " + fs))
803+ let fG = valueOrElse(getInteger(this, D), 0)
804+ let fH = valueOrElse(getInteger(this, ((E + "_") + toString(fG))), 0)
805+ let fI = valueOrElse(getInteger(this, ((F + "_") + toString(fG))), 0)
806+ let fJ = (fH + ((fq - fG) * fI))
807+ let fK = valueOrElse(getInteger(this, ((E + "_") + toString(fF))), 0)
808+ let fL = valueOrElse(getInteger(this, ((F + "_") + toString(fF))), 0)
809+ let fM = (fK + ((fr - fF) * fL))
810+ ((fJ - fM) / aA)
806811 }
807812
808813
809-func fL () = {
810- let cc = bx()
811- if ((cc == 0))
812- then $Tuple2(bt(), bu())
814+func fN () = {
815+ let bS = bn()
816+ if ((bS == 0))
817+ then $Tuple2(bj(), bk())
813818 else {
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)
819+ let fO = (bS > 0)
820+ let fP = ds(fO, aP(bS), false)
821+ let fQ = fP._1
822+ let fR = fP._2
823+ let fS = fP._3
824+ $Tuple2(fR, fS)
820825 }
821826 }
822827
823828
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)
829+func fT (fU,bn,fV,fW) = {
830+ let fX = toBigInt(fU)
831+ let fY = toBigInt(bn)
832+ let fZ = toBigInt(fV)
833+ let ga = toBigInt(fW)
834+ let aZ = aO(fZ, fX)
835+ let gb = (fX + fY)
836+ let gc = aN(aZ, gb)
837+ let gd = aN(gc, gb)
838+ let ge = aN(ga, gd)
839+ toInt(ge)
835840 }
836841
837842
838-func gd (ge,cz,cA) = {
839- let cc = bx()
840- if ((cc == 0))
843+func gf (gg,cx,cy) = {
844+ let bS = bn()
845+ if ((bS == 0))
841846 then {
842- let gf = aQ(aS(ge, cA), cz)
843- $Tuple3(gf, aI, 0)
847+ let gh = aK(aM(gg, cy), cx)
848+ $Tuple3(gh, aD, 0)
844849 }
845850 else {
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)
851+ let fO = (bS > 0)
852+ let fQ = ds(fO, aP(bS), false)._1
853+ let gh = fT(cy, bS, cx, gg)
854+ let gi = aD
855+ let gj = eb(bS, fQ, cx, gh, cy, gi, aG)._2
856+ $Tuple3(gh, gi, gj)
852857 }
853858 }
854859
855860
856-func gi () = {
857- let gj = dv()
858- let gk = fn()
859- let gl = (gk - gj)
860- if (if (if ((bO() == 0))
861+func gk () = {
862+ let gl = dy()
863+ let gm = fp()
864+ let gn = (gm - gl)
865+ if (if (if ((bE() == 0))
861866 then true
862- else (bP() == 0))
867+ else (bF() == 0))
863868 then true
864- else dC())
869+ else dE())
865870 then $Tuple2(0, 0)
866- else if ((0 > gl))
871+ else if ((0 > gn))
867872 then {
868- let gm = aQ(aS(gl, bD()), aK)
869- let gn = aQ(aS(gm, bO()), bP())
870- $Tuple2(gm, gn)
873+ let go = aK(aM(gn, bt()), aF)
874+ let gp = aK(aM(go, bE()), bF())
875+ $Tuple2(go, gp)
871876 }
872877 else {
873- let gn = aQ(aS(gl, bD()), aK)
874- let gm = aQ(aS(gn, bP()), bO())
875- $Tuple2(gm, gn)
878+ let gp = aK(aM(gn, bt()), aF)
879+ let go = aK(aM(gp, bF()), bE())
880+ $Tuple2(go, gp)
876881 }
877882 }
878883
879884
880-func go (gp,gq) = {
881- let gr = bq()
882- let gs = aS(gr, gq)
883- let gt = if ((gp != ""))
885+func gq (gr,gs) = {
886+ let gt = bg()
887+ let gu = aM(gt, gs)
888+ let gv = if ((gr != ""))
884889 then {
885- let gu = bm(ax(), ak(aA, gp))
886- if ((gu == aB))
890+ let gw = bc(au(), ai(aw, gr))
891+ if ((gw == ax))
887892 then {
888- let gv = bo(ax(), ak(az, gp))
889- let gw = aS(gs, gv)
890- $Tuple2(gw, true)
893+ let gx = be(au(), ai(av, gr))
894+ let gy = aM(gu, gx)
895+ $Tuple2(gy, true)
891896 }
892897 else throw("Invalid attached artifact")
893898 }
894- else $Tuple2(gs, false)
895- let gw = gt._1
896- let gx = gt._2
897- $Tuple2(gw, gx)
899+ else $Tuple2(gu, false)
900+ let gy = gv._1
901+ let gz = gv._2
902+ $Tuple2(gy, gz)
898903 }
899904
900905
901-func gy (ce,gz) = {
902- let eF = cd(ce)._1
903- if ((eF == 0))
906+func gA (bU,gB) = {
907+ let eH = bT(bU)._1
908+ if ((eH == 0))
904909 then true
905- else (ci(ce) == gz)
910+ else (bY(bU) == gB)
906911 }
907912
908913
909-func gA (ce,gz) = (ci(ce) == gz)
914+func gC (bU,gB) = (bY(bU) == gB)
910915
911916
912-func gB (ce,gp) = {
913- let gC = invoke(au(), "computeFeeDiscount", [ce], nil)
914- if ((gC == gC))
917+func gD (bU,gr) = {
918+ let gE = invoke(ar(), "computeFeeDiscount", [bU], nil)
919+ if ((gE == gE))
915920 then {
916- let gD = {
917- let cg = gC
918- if ($isInstanceOf(cg, "Int"))
921+ let gF = {
922+ let bW = gE
923+ if ($isInstanceOf(bW, "Int"))
919924 then {
920- let gE = cg
921- gE
925+ let gG = bW
926+ gG
922927 }
923928 else throw("Invalid computeFeeDiscount result")
924929 }
925- let gF = go(gp, gD)
926- let gw = gF._1
927- let gx = gF._2
928- $Tuple2(gw, gx)
930+ let gH = gq(gr, gF)
931+ let gy = gH._1
932+ let gz = gH._2
933+ $Tuple2(gy, gz)
929934 }
930935 else throw("Strict value is not equal to itself.")
931936 }
932937
933938
934-func gG (bV) = {
935- let gH = if ((size(bV.payments) > 1))
936- then toBase58String(valueOrErrorMessage(bV.payments[1].assetId, "Invalid artifactId"))
939+func gI (bL) = {
940+ let gJ = if ((size(bL.payments) > 1))
941+ then toBase58String(valueOrErrorMessage(bL.payments[1].assetId, "Invalid artifactId"))
937942 else ""
938- gH
943+ gJ
939944 }
940945
941946
942-func gI (gJ) = {
943- let gK = aS(gJ, bR())
944- let gL = (gJ - gK)
945- $Tuple2(gK, gL)
947+func gK (gL) = {
948+ let gM = aM(gL, bH())
949+ let gN = (gL - gM)
950+ $Tuple2(gM, gN)
946951 }
947952
948953
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)]
954+func gO (gP,gQ,gR,gS,eC,gT,gU,gV,gW,dR,gX,gY,gZ) = [IntegerEntry(s, gP), IntegerEntry(t, gQ), IntegerEntry(u, gR), IntegerEntry(r, gS), IntegerEntry(p, eC), IntegerEntry(w, gT), IntegerEntry(x, gU), IntegerEntry(v, gV), IntegerEntry(y, gW), IntegerEntry(z, dR), IntegerEntry(A, gX), IntegerEntry(B, gX), IntegerEntry(q, gZ)]
950955
951956
952-func gY (gZ,ha,hb,hc,hd) = [IntegerEntry(L, gZ), IntegerEntry(J, ha), IntegerEntry(K, hb), IntegerEntry(M, hc), IntegerEntry(N, hd)]
957+func ha (hb,hc,hd,he,hf) = [IntegerEntry(J, hb), IntegerEntry(H, hc), IntegerEntry(I, hd), IntegerEntry(K, he), IntegerEntry(L, hf)]
953958
954959
955-func he (hf,am) = if (hf)
960+func hg (hh,ak) = if (hh)
956961 then {
957- let hg = bQ()
958-[IntegerEntry(ak(k, am), (hg + 1)), IntegerEntry(f, (hg + 1))]
962+ let hi = bG()
963+[IntegerEntry(ai(i, ak), (hi + 1)), IntegerEntry(d, (hi + 1))]
959964 }
960965 else nil
961966
962967
963-func hh (hf,am,eB) = if (hf)
964- then [IntegerEntry(ak(m, am), eB)]
968+func hj (hh,ak,eC) = if (hh)
969+ then [IntegerEntry(ai(k, ak), eC)]
965970 else nil
966971
967972
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)]
973+func hk (ak,eB,hl,hm,dc,hn) = [IntegerEntry(ai(e, ak), eB), IntegerEntry(ai(f, ak), hl), IntegerEntry(ai(g, ak), hm), IntegerEntry(ai(h, ak), dc), IntegerEntry(ai(l, ak), hn)]
969974
970975
971-func hm (hn) = {
972- let fo = ((bT() / 1000) / 60)
973- let ho = valueOrElse(getInteger(this, F), 0)
974- if ((ho > fo))
976+func ho (hp) = {
977+ let fq = ((bJ() / 1000) / 60)
978+ let hq = valueOrElse(getInteger(this, D), 0)
979+ if ((hq > fq))
975980 then throw("TWAP out-of-order")
976981 else {
977- let fE = if ((ho == 0))
978- then fo
979- else ho
980- if ((fo > ho))
982+ let fG = if ((hq == 0))
983+ then fq
984+ else hq
985+ if ((fq > hq))
981986 then {
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))]
987+ let hr = valueOrElse(getInteger(this, ((E + "_") + toString(hq))), 0)
988+ let hs = valueOrElse(getInteger(this, ((F + "_") + toString(hq))), hp)
989+ let ht = (hr + ((fq - fG) * hs))
990+ let ft = aV(aT(valueOrElse(getString(this, C), "")), aA, toString(fq))
991+[IntegerEntry(ai(E, toString(fq)), ht), IntegerEntry(ai(F, toString(fq)), hp), IntegerEntry(ai(G, toString(fq)), hq), IntegerEntry(D, fq), StringEntry(C, aR(ft))]
987992 }
988993 else {
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)]
994+ let hu = valueOrElse(getInteger(this, ai(G, toString(fq))), 0)
995+ let hr = valueOrElse(getInteger(this, ai(E, toString(hu))), 0)
996+ let hs = valueOrElse(getInteger(this, ai(F, toString(hu))), hp)
997+ let ht = (hr + ((fq - hu) * hs))
998+[IntegerEntry(ai(E, toString(fq)), ht), IntegerEntry(ai(F, toString(fq)), hp)]
994999 }
9951000 }
9961001 }
9971002
9981003
999-func ht (cz,cA) = [IntegerEntry(O, cz), IntegerEntry(P, cA)]
1004+func hv (cx,cy) = [IntegerEntry(M, cx), IntegerEntry(N, cy)]
10001005
10011006
1002-func hu (cE,cF) = [IntegerEntry(Q, cE), IntegerEntry(R, cF)]
1007+func hw (cC,cD) = [IntegerEntry(O, cC), IntegerEntry(P, cD)]
10031008
10041009
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))))
1010+func hx (cx,cy,hy,hz,hA,hB,hC,hD) = {
1011+ let cC = bl()
1012+ let cD = bm()
1013+ if (((hA - hB) != hy))
1014+ then throw(((((("Invalid AMM state data: " + toString(hA)) + " + ") + toString(hB)) + " != ") + toString(hy)))
1015+ else ((hv(cx, cy) ++ [IntegerEntry(Q, hy), IntegerEntry(T, hz), IntegerEntry(R, hA), IntegerEntry(S, hB), IntegerEntry(V, hC), IntegerEntry(U, hD)]) ++ ho(aK(aM(cx, cC), aM(cy, cD))))
10111016 }
10121017
10131018
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))]
1019+func hE (ak) = [DeleteEntry(ai(e, ak)), DeleteEntry(ai(f, ak)), DeleteEntry(ai(g, ak)), DeleteEntry(ai(h, ak)), DeleteEntry(ai(j, ak)), DeleteEntry(ai(k, ak)), DeleteEntry(ai(l, ak))]
10151020
10161021
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())]
1022+func hF (ak,hG) = {
1023+ let hH = assetBalance(this, an())
1024+ if ((hG > hH))
1025+ then throw(((("Unable to withdraw " + toString(hG)) + " from contract balance ") + toString(hH)))
1026+ else [ScriptTransfer(ak, hG, an())]
10221027 }
10231028
10241029
1025-func hG (bV) = if ((0 > bV))
1030+func hI (bL) = if ((0 > bL))
10261031 then throw("Balance")
1027- else [IntegerEntry(e, bV)]
1032+ else [IntegerEntry(c, bL)]
10281033
10291034
1030-func hH (bV) = [ScriptTransfer(as(), bV, aq())]
1035+func hJ (bL) = [ScriptTransfer(ap(), bL, an())]
10311036
10321037
1033-func hI (hJ,bV) = if (hJ)
1034- then [Burn(valueOrErrorMessage(bV.payments[1].assetId, "Invalid artifact"), 1)]
1038+func hK (hL,bL) = if (hL)
1039+ then [Burn(valueOrErrorMessage(bL.payments[1].assetId, "Invalid artifact"), 1)]
10351040 else nil
10361041
10371042
1038-@Callable(bV)
1039-func pause () = if ((bV.caller != ao()))
1043+@Callable(bL)
1044+func pause () = if ((bL.caller != am()))
10401045 then throw("Invalid pause params")
1041- else [BooleanEntry(p, true)]
1046+ else [BooleanEntry(n, true)]
10421047
10431048
10441049
1045-@Callable(bV)
1046-func unpause () = if ((bV.caller != ao()))
1050+@Callable(bL)
1051+func unpause () = if ((bL.caller != am()))
10471052 then throw("Invalid unpause params")
1048- else [BooleanEntry(p, false)]
1053+ else [BooleanEntry(n, false)]
10491054
10501055
10511056
1052-@Callable(bV)
1053-func setCloseOnly () = if ((bV.caller != ao()))
1057+@Callable(bL)
1058+func setCloseOnly () = if ((bL.caller != am()))
10541059 then throw("Invalid setCloseOnly params")
1055- else [BooleanEntry(q, true)]
1060+ else [BooleanEntry(o, true)]
10561061
10571062
10581063
1059-@Callable(bV)
1060-func unsetCloseOnly () = if ((bV.caller != ao()))
1064+@Callable(bL)
1065+func unsetCloseOnly () = if ((bL.caller != am()))
10611066 then throw("Invalid unsetCloseOnly params")
1062- else [BooleanEntry(q, false)]
1067+ else [BooleanEntry(o, false)]
10631068
10641069
10651070
1066-@Callable(bV)
1067-func addLiquidity (cu) = if (if ((bV.caller != ao()))
1071+@Callable(bL)
1072+func addLiquidity (cs) = if (if ((bL.caller != am()))
10681073 then true
1069- else (0 >= cu))
1074+ else (0 >= cs))
10701075 then throw("Invalid addLiquidity params")
10711076 else {
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))
1077+ let cx = bj()
1078+ let cy = bk()
1079+ let cC = bl()
1080+ let cD = bm()
1081+ let hM = aK(aM(cx, cC), aM(cy, cD))
1082+ let hN = (cx + cs)
1083+ let hO = (aK(aM(hN, cC), hM) - cy)
1084+ let hP = (cy + hO)
1085+ let hQ = gf(dy(), hN, hP)
1086+ let hR = hQ._1
1087+ let hS = hQ._2
1088+ let gj = hQ._3
1089+ let hT = if ((gj != 0))
10851090 then {
1086- let hR = invoke(at(), "exchangeFreeAndLocked", [gh], nil)
1087- if ((hR == hR))
1091+ let hT = invoke(aq(), "exchangeFreeAndLocked", [gj], nil)
1092+ if ((hT == hT))
10881093 then nil
10891094 else throw("Strict value is not equal to itself.")
10901095 }
10911096 else nil
1092- if ((hR == hR))
1093- then (ht(hL, hN) ++ hu(hP, hQ))
1097+ if ((hT == hT))
1098+ then (hv(hN, hP) ++ hw(hR, hS))
10941099 else throw("Strict value is not equal to itself.")
10951100 }
10961101
10971102
10981103
1099-@Callable(bV)
1100-func removeLiquidity (cu) = if (if ((bV.caller != ao()))
1104+@Callable(bL)
1105+func removeLiquidity (cs) = if (if ((bL.caller != am()))
11011106 then true
1102- else (cu >= 0))
1107+ else (cs >= 0))
11031108 then throw("Invalid removeLiquidity params")
11041109 else {
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))
1110+ let cx = bj()
1111+ let cy = bk()
1112+ let cC = bl()
1113+ let cD = bm()
1114+ let hM = aK(aM(cx, cC), aM(cy, cD))
1115+ let hN = (cx - cs)
1116+ let hU = aP((aK(aM(hN, cC), hM) - cy))
1117+ let hP = (cy - hU)
1118+ let hV = gf(dy(), hN, hP)
1119+ let hR = hV._1
1120+ let hS = hV._2
1121+ let gj = hV._3
1122+ let hT = if ((gj != 0))
11181123 then {
1119- let hR = invoke(at(), "exchangeFreeAndLocked", [gh], nil)
1120- if ((hR == hR))
1124+ let hT = invoke(aq(), "exchangeFreeAndLocked", [gj], nil)
1125+ if ((hT == hT))
11211126 then nil
11221127 else throw("Strict value is not equal to itself.")
11231128 }
11241129 else nil
1125- if ((hR == hR))
1126- then (ht(hL, hN) ++ hu(hP, hQ))
1130+ if ((hT == hT))
1131+ then (hv(hN, hP) ++ hw(hR, hS))
11271132 else throw("Strict value is not equal to itself.")
11281133 }
11291134
11301135
11311136
1132-@Callable(bV)
1133-func changeSettings (gN,gO,gP,gQ,eB,gR,gS,gT,gU,dQ,gV,gW,gX) = if ((bV.caller != ao()))
1137+@Callable(bL)
1138+func changeSettings (gP,gQ,gR,gS,eC,gT,gU,gV,gW,dR,gX,gY,gZ) = if ((bL.caller != am()))
11341139 then throw("Invalid changeSettings params")
1135- else gM(gN, gO, gP, gQ, eB, gR, gS, gT, gU, dQ, gV, gW, gX)
1140+ else gO(gP, gQ, gR, gS, eC, gT, gU, gV, gW, dR, gX, gY, gZ)
11361141
11371142
11381143
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))
1144+@Callable(bL)
1145+func initialize (cx,cy,gS,gP,gQ,gR,eC,hW,hX,hY,gT,gU,gV,gW,dR,gX,gY,gZ) = if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if ((0 >= cx))
11411146 then true
1142- else (0 >= cA))
1147+ else (0 >= cy))
1148+ then true
1149+ else (0 >= gS))
1150+ then true
1151+ else (0 >= gP))
11431152 then true
11441153 else (0 >= gQ))
11451154 then true
1146- else (0 >= gN))
1147- then true
1148- else (0 >= gO))
1149- then true
1150- else (0 >= gP))
1151- then true
1152- else (0 >= eB))
1153- then true
11541155 else (0 >= gR))
11551156 then true
1156- else (0 >= gS))
1157+ else (0 >= eC))
11571158 then true
11581159 else (0 >= gT))
11591160 then true
11601161 else (0 >= gU))
11611162 then true
1162- else (0 >= dQ))
1163- then true
11641163 else (0 >= gV))
1165- then true
1166- else (gV > aI))
11671164 then true
11681165 else (0 >= gW))
11691166 then true
1167+ else (0 >= dR))
1168+ then true
11701169 else (0 >= gX))
11711170 then true
1172- else cp())
1171+ else (gX > aD))
1172+ then true
1173+ else (0 >= gY))
1174+ then true
1175+ else (0 >= gZ))
1176+ then true
1177+ else cn())
1178+ then true
1179+ else (bL.caller != this))
11731180 then throw("Invalid initialize parameters")
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)])
1181+ else ((((hx(cx, cy, 0, 0, 0, 0, 0, 0) ++ gO(gP, gQ, gR, gS, eC, gT, gU, gV, gW, dR, gX, gY, gZ)) ++ ha((bJ() + gS), 0, 0, 0, 0)) ++ hI(0)) ++ [BooleanEntry(m, true), StringEntry(a, hW), StringEntry(b, hX), StringEntry(X, toString(addressFromStringValue(hY)))])
11751182
11761183
11771184
1178-@Callable(bV)
1179-func increasePosition (hY,hZ,ia,ib) = {
1180- let ic = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1181- if ((ic == ic))
1185+@Callable(bL)
1186+func increasePosition (hZ,ia,ib,ic) = {
1187+ let id = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1188+ if ((id == id))
11821189 then {
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)
1190- else false)
1191- then true
1192- else (0 >= id))
1193- then true
1194- else !(cp()))
1195- then true
1196- else !(if))
1197- then true
1198- else !(gy(ce, ie)))
1199- then true
1200- else !(bW(aQ(aI, hZ), bs(), true)))
1201- then true
1202- else cq())
1203- then true
1204- else cr())
1205- then true
1206- else dC())
1207- then throw("Invalid increasePosition parameters")
1208- else {
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))
1216- then {
1217- let ij = {
1218- let cg = ii
1219- if ($isInstanceOf(cg, "Int"))
1220- then {
1221- let gE = cg
1222- gE
1190+ let ie = invoke(this, "ensureCalledOnce", nil, nil)
1191+ if ((ie == ie))
1192+ then {
1193+ let bU = bK(bL)
1194+ let if = bL.payments[0].amount
1195+ let gB = bL.payments[0].assetId
1196+ let ig = toBase58String(value(gB))
1197+ let ih = (gB == an())
1198+ if (if (if (if (if (if (if (if (if (if ((hZ != ay))
1199+ then (hZ != az)
1200+ else false)
1201+ then true
1202+ else (0 >= if))
1203+ then true
1204+ else !(cn()))
1205+ then true
1206+ else !(ih))
1207+ then true
1208+ else !(gA(bU, ig)))
1209+ then true
1210+ else !(bM(aK(aD, ia), bi(), true)))
1211+ then true
1212+ else co())
1213+ then true
1214+ else cp())
1215+ then true
1216+ else dE())
1217+ then throw("Invalid increasePosition parameters")
1218+ else {
1219+ let ii = gD(bU, gI(bL))
1220+ let gy = ii._1
1221+ let gz = ii._2
1222+ let hG = aK(if, (aM(gy, ia) + aD))
1223+ let ij = (if - hG)
1224+ let ik = invoke(at(), "acceptPaymentWithLink", [bU, ic], [AttachedPayment(an(), ij)])
1225+ if ((ik == ik))
1226+ then {
1227+ let il = {
1228+ let bW = ik
1229+ if ($isInstanceOf(bW, "Int"))
1230+ then {
1231+ let gG = bW
1232+ gG
1233+ }
1234+ else throw("Invalid referrerFee")
12231235 }
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)
1236+ let im = (ij - il)
1237+ let in = bT(bU)
1238+ let eH = in._1
1239+ let eI = in._2
1240+ let eJ = in._3
1241+ let eK = in._4
1242+ let eL = in._5
1243+ let io = (eH == 0)
1244+ let ip = if ((eH > 0))
1245+ then (hZ == ay)
1246+ else (hZ == az)
1247+ let iq = if (!(io))
1248+ then ip
1249+ else false
1250+ let ir = (hZ == ay)
1251+ let is = if (if (io)
1252+ then true
1253+ else iq)
1254+ then {
1255+ let it = aM(hG, ia)
1256+ let iu = cB(ir, it)
1257+ let cI = iu._1
1258+ let cF = iu._2
1259+ let cG = iu._3
1260+ let eR = iu._4
1261+ if (if ((ib != 0))
1262+ then (ib > aP(cI))
1263+ else false)
1264+ then throw(((("Limit error: " + toString(aP(cI))) + " < ") + toString(ib)))
1265+ else {
1266+ let ff = (eH + cI)
1267+ let iv = (bq() + (if ((ff > 0))
1268+ then it
1269+ else 0))
1270+ let iw = (bp() + (if ((0 > ff))
1271+ then it
1272+ else 0))
1273+ let ix = cX(eH, eI, eK, eL, hG)
1274+ let df = ix._1
1275+ let eZ = ix._2
1276+ let fa = ix._3
1277+ let cW = ix._4
1278+ if (!(dK(cF, cG)))
1279+ then throw("Over max spread limit")
1280+ else if (!(dO(iv, iw)))
1281+ then throw("Over max open notional")
1282+ else $Tuple14(ff, df, (eJ + it), bR(ff), bJ(), cG, cF, eR, (bo() + it), (bF() + (if ((ff > 0))
1283+ then aP(cI)
1284+ else 0)), (bE() + (if ((0 > ff))
1285+ then aP(cI)
1286+ else 0)), iv, iw, cW)
1287+ }
1288+ }
1289+ else {
1290+ let it = aM(hG, ia)
1291+ let iy = ee(toString(bL.caller), aG)
1292+ let eU = iy._1
1293+ let ed = iy._2
1294+ if ((eU > it))
1295+ then throw("Use decreasePosition to decrease position size")
1296+ else throw("Close position first")
1297+ }
1298+ let ff = is._1
1299+ let iz = is._2
1300+ let fh = is._3
1301+ let iA = is._4
1302+ let iB = is._5
1303+ let cG = is._6
1304+ let cF = is._7
1305+ let eR = is._8
1306+ let iC = is._9
1307+ let iD = is._10
1308+ let iE = is._11
1309+ let iv = is._12
1310+ let iw = is._13
1311+ let cW = is._14
1312+ let iF = gK((im + cW))
1313+ let gM = iF._1
1314+ let gN = iF._2
1315+ let iG = if ((hG >= cW))
1316+ then invoke(aq(), "addLocked", nil, [AttachedPayment(an(), (hG - cW))])
1317+ else invoke(aq(), "withdrawLocked", [(cW - hG)], nil)
1318+ if ((iG == iG))
1319+ then {
1320+ let iH = invoke(aq(), "addFree", nil, [AttachedPayment(an(), gN)])
1321+ if ((iH == iH))
1322+ then {
1323+ let iI = invoke(ar(), "notifyFees", [bU, im], nil)
1324+ if ((iI == iI))
1325+ then {
1326+ let iJ = invoke(ar(), "notifyNotional", [bU, fh], nil)
1327+ if ((iJ == iJ))
1328+ then ((((((hk(bU, ff, iz, fh, iA, iB) ++ hg(io, bU)) ++ hj(io, bU, gy)) ++ hx(cF, cG, eR, iC, iD, iE, iv, iw)) ++ hJ(gM)) ++ hI(((bf() + hG) - cW))) ++ hK(gz, bL))
1329+ else throw("Strict value is not equal to itself.")
1330+ }
1331+ else throw("Strict value is not equal to itself.")
1332+ }
1333+ else throw("Strict value is not equal to itself.")
1334+ }
1335+ else throw("Strict value is not equal to itself.")
1336+ }
1337+ else throw("Strict value is not equal to itself.")
1338+ }
1339+ }
1340+ else throw("Strict value is not equal to itself.")
1341+ }
1342+ else throw("Strict value is not equal to itself.")
1343+ }
1344+
1345+
1346+
1347+@Callable(bL)
1348+func addMargin () = {
1349+ let id = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1350+ if ((id == id))
1351+ then {
1352+ let ie = invoke(this, "ensureCalledOnce", nil, nil)
1353+ if ((ie == ie))
1354+ then {
1355+ let bU = toString(bL.caller)
1356+ let hG = bL.payments[0].amount
1357+ let gB = bL.payments[0].assetId
1358+ let ig = toBase58String(value(gB))
1359+ let ih = (gB == an())
1360+ if (if (if (if (if (if (if (!(ih))
1361+ then true
1362+ else !(ce(toString(bL.caller))))
1363+ then true
1364+ else !(gC(bU, ig)))
1365+ then true
1366+ else !(cn()))
1367+ then true
1368+ else co())
1369+ then true
1370+ else cp())
1371+ then true
1372+ else dE())
1373+ then throw("Invalid addMargin parameters")
1374+ else {
1375+ let iK = bT(bU)
1376+ let eH = iK._1
1377+ let eI = iK._2
1378+ let eJ = iK._3
1379+ let eK = iK._4
1380+ let eL = iK._5
1381+ let iG = invoke(aq(), "addLocked", nil, [AttachedPayment(an(), hG)])
1382+ if ((iG == iG))
12441383 then {
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)))
1384+ let cW = cS(eI, eL)
1385+ let iL = if ((cW > 0))
1386+ then {
1387+ let iM = gK(cW)
1388+ let gM = iM._1
1389+ let gN = iM._2
1390+ let iN = invoke(aq(), "withdrawLocked", [gM], nil)
1391+ if ((iN == iN))
1392+ then {
1393+ let iO = invoke(aq(), "exchangeFreeAndLocked", [-(gN)], nil)
1394+ if ((iO == iO))
1395+ then hJ(gM)
1396+ else throw("Strict value is not equal to itself.")
1397+ }
1398+ else throw("Strict value is not equal to itself.")
1399+ }
1400+ else nil
1401+ if ((iL == iL))
1402+ then ((hk(bU, eH, ((eI - cW) + hG), eJ, eK, bJ()) ++ hI(((bf() + hG) - cW))) ++ iL)
1403+ else throw("Strict value is not equal to itself.")
1404+ }
1405+ else throw("Strict value is not equal to itself.")
1406+ }
1407+ }
1408+ else throw("Strict value is not equal to itself.")
1409+ }
1410+ else throw("Strict value is not equal to itself.")
1411+ }
1412+
1413+
1414+
1415+@Callable(bL)
1416+func removeMargin (hG) = {
1417+ let id = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1418+ if ((id == id))
1419+ then {
1420+ let ie = invoke(this, "ensureCalledOnce", nil, nil)
1421+ if ((ie == ie))
1422+ then {
1423+ let bU = toString(bL.caller)
1424+ if (if (if (if (if ((0 >= hG))
1425+ then true
1426+ else !(ce(bU)))
1427+ then true
1428+ else !(cn()))
1429+ then true
1430+ else co())
1431+ then true
1432+ else dE())
1433+ then throw("Invalid removeMargin parameters")
1434+ else {
1435+ let iP = bT(bU)
1436+ let eH = iP._1
1437+ let eI = iP._2
1438+ let eJ = iP._3
1439+ let eK = iP._4
1440+ let eL = iP._5
1441+ let iQ = cX(eH, eI, eK, eL, -(hG))
1442+ let df = iQ._1
1443+ let dg = iQ._2
1444+ let db = iQ._3
1445+ let cW = iQ._4
1446+ if ((dg != 0))
1447+ then throw("Invalid removed margin amount")
1448+ else {
1449+ let fk = ej(df, dg, eJ)
1450+ if (!(bM(fk, bi(), true)))
1451+ then throw(((("Too much margin removed: " + toString(fk)) + " < ") + toString(bi())))
12551452 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)
1453+ let iR = gK(cW)
1454+ let gM = iR._1
1455+ let gN = iR._2
1456+ let iL = if ((cW > 0))
1457+ then {
1458+ let iO = invoke(aq(), "exchangeFreeAndLocked", [-(gN)], nil)
1459+ if ((iO == iO))
1460+ then hJ(gM)
1461+ else throw("Strict value is not equal to itself.")
1462+ }
1463+ else nil
1464+ if ((iL == iL))
1465+ then {
1466+ let iN = invoke(aq(), "withdrawLocked", [(hG + gM)], nil)
1467+ if ((iN == iN))
1468+ then (((hk(bU, eH, df, eJ, bR(eH), bJ()) ++ hF(bL.caller, hG)) ++ hI(((bf() - hG) - cW))) ++ iL)
1469+ else throw("Strict value is not equal to itself.")
1470+ }
1471+ else throw("Strict value is not equal to itself.")
12771472 }
12781473 }
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 ((hE >= cY))
1306- then invoke(at(), "addLocked", nil, [AttachedPayment(aq(), (hE - cY))])
1307- else invoke(at(), "withdrawLocked", [(cY - hE)], nil)
1308- if ((iE == iE))
1474+ }
1475+ }
1476+ else throw("Strict value is not equal to itself.")
1477+ }
1478+ else throw("Strict value is not equal to itself.")
1479+ }
1480+
1481+
1482+
1483+@Callable(bL)
1484+func closePosition (eB,eD,eE) = {
1485+ let id = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1486+ if ((id == id))
1487+ then {
1488+ let ie = invoke(this, "ensureCalledOnce", nil, nil)
1489+ if ((ie == ie))
1490+ then {
1491+ let bU = bK(bL)
1492+ let iS = valueOrErrorMessage(addressFromString(bU), "Invalid caller")
1493+ let cd = cb(bU)
1494+ if (if (if (if (if (if (!(ce(bU)))
1495+ then true
1496+ else !(cn()))
1497+ then true
1498+ else co())
1499+ then true
1500+ else (0 >= eB))
1501+ then true
1502+ else (0 > eD))
1503+ then true
1504+ else dE())
1505+ then throw("Invalid closePosition parameters")
1506+ else {
1507+ let eL = bT(bU)._5
1508+ let iT = eA(bU, eB, cd, eD, eE, true, true)
1509+ let ff = iT._1
1510+ let fo = iT._2
1511+ let fh = iT._3
1512+ let fi = iT._4
1513+ let fb = iT._5
1514+ let eW = iT._6
1515+ let fn = iT._7
1516+ let cF = iT._8
1517+ let cG = iT._9
1518+ let eR = iT._10
1519+ let iC = iT._11
1520+ let iD = iT._12
1521+ let iE = iT._13
1522+ let iv = iT._14
1523+ let iw = iT._15
1524+ let iU = iT._16
1525+ if ((fb > 0))
1526+ then throw("Invalid closePosition parameters: bad debt")
1527+ else if ((eL >= bJ()))
1528+ then throw("Invalid closePosition parameters: wait at least 1 block before closing the position")
1529+ else {
1530+ let eO = (ff != 0)
1531+ let iV = (fn + iU)
1532+ let iW = (bf() - iV)
1533+ let iX = if ((0 > iW))
1534+ then 0
1535+ else iW
1536+ let iN = invoke(aq(), "withdrawLocked", [iV], nil)
1537+ if ((iN == iN))
1538+ then {
1539+ let iY = gK(iU)
1540+ let gM = iY._1
1541+ let gN = iY._2
1542+ let iH = invoke(aq(), "addFree", nil, [AttachedPayment(an(), gN)])
1543+ if ((iH == iH))
1544+ then {
1545+ let iI = invoke(ar(), "notifyFees", [bU, iU], nil)
1546+ if ((iI == iI))
1547+ then {
1548+ let iJ = invoke(ar(), "notifyNotional", [bU, fh], nil)
1549+ if ((iJ == iJ))
1550+ then (((((if (eO)
1551+ then hk(bU, ff, fo, fh, fi, bJ())
1552+ else hE(bU)) ++ hx(cF, cG, eR, iC, iD, iE, iv, iw)) ++ (if ((fn > 0))
1553+ then hF(iS, fn)
1554+ else nil)) ++ hI(iX)) ++ hJ(gM))
1555+ else throw("Strict value is not equal to itself.")
1556+ }
1557+ else throw("Strict value is not equal to itself.")
1558+ }
1559+ else throw("Strict value is not equal to itself.")
1560+ }
1561+ else throw("Strict value is not equal to itself.")
1562+ }
1563+ }
1564+ }
1565+ else throw("Strict value is not equal to itself.")
1566+ }
1567+ else throw("Strict value is not equal to itself.")
1568+ }
1569+
1570+
1571+
1572+@Callable(bL)
1573+func liquidate (bU) = {
1574+ let id = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1575+ if ((id == id))
1576+ then {
1577+ let iZ = en(bU, aG)
1578+ let ja = if (dT())
1579+ then {
1580+ let jb = en(bU, aH)
1581+ aQ(iZ, jb)
1582+ }
1583+ else iZ
1584+ if (if (if (if (if (!(bM(ja, bv(), false)))
1585+ then true
1586+ else !(ce(bU)))
1587+ then true
1588+ else !(cn()))
1589+ then true
1590+ else co())
1591+ then true
1592+ else dE())
1593+ then throw("Unable to liquidate")
1594+ else {
1595+ let jc = if (if ((iZ > bw()))
1596+ then (bx() > 0)
1597+ else false)
1598+ then (aD > bx())
1599+ else false
1600+ let eH = bT(bU)._1
1601+ let dX = aP(eH)
1602+ let jd = if (jc)
1603+ then {
1604+ let je = ev(bU, eH)
1605+ let jf = aK(aP(je), dX)
1606+ $Tuple2(jf, aP(je))
1607+ }
1608+ else $Tuple2(0, dX)
1609+ let jf = jd._1
1610+ let je = jd._2
1611+ let jg = eA(bU, if (jc)
1612+ then je
1613+ else dX, bw(), 0, true, false, true)
1614+ let ff = jg._1
1615+ let fo = jg._2
1616+ let fh = jg._3
1617+ let fi = jg._4
1618+ let fb = jg._5
1619+ let eW = jg._6
1620+ let fn = jg._7
1621+ let cF = jg._8
1622+ let cG = jg._9
1623+ let eR = jg._10
1624+ let iC = jg._11
1625+ let iD = jg._12
1626+ let iE = jg._13
1627+ let iv = jg._14
1628+ let iw = jg._15
1629+ let jh = jg._16
1630+ let ji = (jh / 2)
1631+ let gN = (jh - ji)
1632+ let iW = (bf() - jh)
1633+ let jj = if ((0 > iW))
1634+ then 0
1635+ else iW
1636+ let iO = if ((fb > 0))
1637+ then {
1638+ let iO = invoke(aq(), "exchangeFreeAndLocked", [(fb + jh)], nil)
1639+ if ((iO == iO))
1640+ then nil
1641+ else throw("Strict value is not equal to itself.")
1642+ }
1643+ else nil
1644+ if ((iO == iO))
1645+ then {
1646+ let iN = invoke(aq(), "withdrawLocked", [jh], nil)
1647+ if ((iN == iN))
13091648 then {
1310- let iF = invoke(at(), "addFree", nil, [AttachedPayment(aq(), gL)])
1311- if ((iF == iF))
1649+ let jk = invoke(aq(), "addFree", nil, [AttachedPayment(an(), gN)])
1650+ if ((jk == jk))
13121651 then {
1313- let iG = invoke(au(), "notifyFees", [ce, ik], nil)
1314- if ((iG == iG))
1315- then {
1316- let iH = invoke(au(), "notifyNotional", [ce, ff], nil)
1317- if ((iH == iH))
1318- 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) - cY))) ++ hI(gx, bV))
1319- else throw("Strict value is not equal to itself.")
1320- }
1652+ let iJ = invoke(ar(), "notifyNotional", [bU, fh], nil)
1653+ if ((iJ == iJ))
1654+ then ((((if (jc)
1655+ then hk(bU, ff, fo, fh, fi, bJ())
1656+ else hE(bU)) ++ hx(cF, cG, eR, iC, iD, iE, iv, iw)) ++ hF(bL.caller, ji)) ++ hI(jj))
13211657 else throw("Strict value is not equal to itself.")
13221658 }
13231659 else throw("Strict value is not equal to itself.")
13241660 }
13251661 else throw("Strict value is not equal to itself.")
13261662 }
13271663 else throw("Strict value is not equal to itself.")
13281664 }
13291665 }
13301666 else throw("Strict value is not equal to itself.")
13311667 }
13321668
13331669
13341670
1335-@Callable(bV)
1336-func addMargin () = {
1337- let ic = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1338- if ((ic == ic))
1671+@Callable(bL)
1672+func payFunding () = {
1673+ let id = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1674+ if ((id == id))
13391675 then {
1340- let ce = toString(bV.caller)
1341- let hE = bV.payments[0].amount
1342- let gz = bV.payments[0].assetId
1343- let ie = toBase58String(value(gz))
1344- let if = (gz == aq())
1345- if (if (if (if (if (if (if (!(if))
1676+ let jl = br()
1677+ if (if (if ((jl > bJ()))
13461678 then true
1347- else !(co(toString(bV.caller))))
1679+ else !(cn()))
13481680 then true
1349- else !(gA(ce, ie)))
1350- then true
1351- else !(cp()))
1352- then true
1353- else cq())
1354- then true
1355- else cr())
1356- then true
1357- else dC())
1358- then throw("Invalid addMargin parameters")
1681+ else co())
1682+ then throw(((("Invalid funding block timestamp: " + toString(bJ())) + " < ") + toString(jl)))
13591683 else {
1360- let iI = cd(ce)
1361- let eF = iI._1
1362- let eG = iI._2
1363- let eH = iI._3
1364- let eI = iI._4
1365- let eJ = iI._5
1366- let iE = invoke(at(), "addLocked", nil, [AttachedPayment(aq(), hE)])
1367- if ((iE == iE))
1368- then {
1369- let cY = cU(eG, eJ)
1370- let iJ = if ((cY > 0))
1371- then {
1372- let iK = gI(cY)
1373- let gK = iK._1
1374- let gL = iK._2
1375- let iL = invoke(at(), "withdrawLocked", [gK], nil)
1376- if ((iL == iL))
1377- then {
1378- let iM = invoke(at(), "exchangeFreeAndLocked", [-(gL)], nil)
1379- if ((iM == iM))
1380- then hH(gK)
1381- else throw("Strict value is not equal to itself.")
1382- }
1383- else throw("Strict value is not equal to itself.")
1384- }
1385- else nil
1386- if ((iJ == iJ))
1387- then ((hi(ce, eF, ((eG - cY) + hE), eH, eI, bT()) ++ hG(((bp() + hE) - cY))) ++ iJ)
1388- else throw("Strict value is not equal to itself.")
1389- }
1390- else throw("Strict value is not equal to itself.")
1684+ let gl = dy()
1685+ let jm = gk()
1686+ let go = jm._1
1687+ let gp = jm._2
1688+ ha((jl + bu()), (bC() + gp), (bD() + go), aK(gp, gl), aK(go, gl))
13911689 }
13921690 }
13931691 else throw("Strict value is not equal to itself.")
13941692 }
13951693
13961694
13971695
1398-@Callable(bV)
1399-func removeMargin (hE) = {
1400- let ic = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1401- if ((ic == ic))
1696+@Callable(bL)
1697+func syncTerminalPriceToOracle () = {
1698+ let cx = bj()
1699+ let cy = bk()
1700+ let jn = gf(dy(), cx, cy)
1701+ let hR = jn._1
1702+ let hS = jn._2
1703+ let gj = jn._3
1704+ let jo = if (if ((0 > gj))
1705+ then (aP(gj) > bf())
1706+ else false)
1707+ then -(bf())
1708+ else gj
1709+ let hT = if ((jo != 0))
14021710 then {
1403- let ce = toString(bV.caller)
1404- if (if (if (if (if ((0 >= hE))
1405- then true
1406- else !(co(ce)))
1407- then true
1408- else !(cp()))
1409- then true
1410- else cq())
1411- then true
1412- else dC())
1413- then throw("Invalid removeMargin parameters")
1414- else {
1415- let iN = cd(ce)
1416- let eF = iN._1
1417- let eG = iN._2
1418- let eH = iN._3
1419- let eI = iN._4
1420- let eJ = iN._5
1421- let iO = cZ(eF, eG, eI, eJ, -(hE))
1422- let dh = iO._1
1423- let di = iO._2
1424- let dd = iO._3
1425- let cY = iO._4
1426- if ((di != 0))
1427- then throw("Invalid removed margin amount")
1428- else {
1429- let fi = ei(dh, di, eH)
1430- if (!(bW(fi, bs(), true)))
1431- then throw(((("Too much margin removed: " + toString(fi)) + " < ") + toString(bs())))
1432- else {
1433- let iP = gI(cY)
1434- let gK = iP._1
1435- let gL = iP._2
1436- let iJ = if ((cY > 0))
1437- then {
1438- let iM = invoke(at(), "exchangeFreeAndLocked", [-(gL)], nil)
1439- if ((iM == iM))
1440- then hH(gK)
1441- else throw("Strict value is not equal to itself.")
1442- }
1443- else nil
1444- if ((iJ == iJ))
1445- then {
1446- let iL = invoke(at(), "withdrawLocked", [(hE + gK)], nil)
1447- if ((iL == iL))
1448- then (((hi(ce, eF, dh, eH, cb(eF), bT()) ++ hD(bV.caller, hE)) ++ hG(((bp() - hE) - cY))) ++ iJ)
1449- else throw("Strict value is not equal to itself.")
1450- }
1451- else throw("Strict value is not equal to itself.")
1452- }
1453- }
1454- }
1711+ let hT = invoke(aq(), "exchangeFreeAndLocked", [jo], nil)
1712+ if ((hT == hT))
1713+ then nil
1714+ else throw("Strict value is not equal to itself.")
1715+ }
1716+ else nil
1717+ if ((hT == hT))
1718+ then ((hI((bf() + jo)) ++ hw(hR, hS)) ++ ho(aK(aM(cx, hR), aM(cy, hS))))
1719+ else throw("Strict value is not equal to itself.")
1720+ }
1721+
1722+
1723+
1724+@Callable(bL)
1725+func ensureCalledOnce () = if ((bL.caller != this))
1726+ then throw("Invalid saveCurrentTxId parameters")
1727+ else {
1728+ let jp = valueOrElse(getString(this, W), "")
1729+ if ((jp != toBase58String(bL.transactionId)))
1730+ then [StringEntry(W, jp)]
1731+ else throw("Can not call vAMM methods twice in one tx")
1732+ }
1733+
1734+
1735+
1736+@Callable(bL)
1737+func view_calcRemainMarginWithFundingPayment (bU) = {
1738+ let id = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1739+ if ((id == id))
1740+ then {
1741+ let jq = bT(bU)
1742+ let bX = jq._1
1743+ let eg = jq._2
1744+ let ep = jq._3
1745+ let ei = jq._4
1746+ let er = jq._5
1747+ let jr = ee(bU, aG)
1748+ let dZ = jr._1
1749+ let ed = jr._2
1750+ let js = cX(bX, eg, ei, er, ed)
1751+ let df = js._1
1752+ let dg = js._2
1753+ let db = js._3
1754+ let cW = js._4
1755+ throw(((((((aI(df) + aI(db)) + aI(eu(bU))) + aI(ed)) + aI(dg)) + aI(dZ)) + aI(cW)))
14551756 }
14561757 else throw("Strict value is not equal to itself.")
14571758 }
14581759
14591760
14601761
1461-@Callable(bV)
1462-func closePosition (eA,eC,eD) = {
1463- let ic = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1464- if ((ic == ic))
1762+@Callable(bL)
1763+func view_getPegAdjustCost (hp) = {
1764+ let cx = bj()
1765+ let cy = bk()
1766+ let ge = gf(hp, cx, cy)
1767+ throw(toString(ge._3))
1768+ }
1769+
1770+
1771+
1772+@Callable(bL)
1773+func view_getTerminalAmmPrice () = {
1774+ let jt = fN()
1775+ let fR = jt._1
1776+ let fS = jt._2
1777+ let hM = aK(aM(fR, bl()), aM(fS, bm()))
1778+ throw(toString(hM))
1779+ }
1780+
1781+
1782+
1783+@Callable(bL)
1784+func view_getFunding () = {
1785+ let gl = dy()
1786+ let ju = gk()
1787+ let go = ju._1
1788+ let gp = ju._2
1789+ let jv = aK(gp, gl)
1790+ let jw = aK(go, gl)
1791+ throw((((aI(jv) + aI(jw)) + aI(fp())) + aI(dy())))
1792+ }
1793+
1794+
1795+
1796+@Callable(bL)
1797+func computeSpotPrice () = {
1798+ let id = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1799+ if ((id == id))
14651800 then {
1466- let ce = bU(bV)
1467- let iQ = valueOrErrorMessage(addressFromString(ce), "Invalid caller")
1468- let cn = cl(ce)
1469- if (if (if (if (if (if (!(co(ce)))
1470- then true
1471- else !(cp()))
1472- then true
1473- else cq())
1474- then true
1475- else (0 >= eA))
1476- then true
1477- else (0 > eC))
1478- then true
1479- else dC())
1480- then throw("Invalid closePosition parameters")
1481- else {
1482- let iR = cd(ce)
1483- let eF = iR._1
1484- let eG = iR._2
1485- let eH = iR._3
1486- let eI = iR._4
1487- let iS = ez(ce, eA, cn, eC, eD, true)
1488- let fd = iS._1
1489- let fm = iS._2
1490- let ff = iS._3
1491- let fg = iS._4
1492- let eZ = iS._5
1493- let eU = iS._6
1494- let fl = iS._7
1495- let cH = iS._8
1496- let cI = iS._9
1497- let eP = iS._10
1498- let iA = iS._11
1499- let iB = iS._12
1500- let iC = iS._13
1501- let it = iS._14
1502- let iu = iS._15
1503- let iT = iS._16
1504- if ((eZ > 0))
1505- then throw("Invalid closePosition parameters: bad debt")
1506- else {
1507- let eM = (fd != 0)
1508- let iU = (fl + iT)
1509- let iV = (bp() - iU)
1510- let iW = if ((0 > iV))
1511- then 0
1512- else iV
1513- let iL = invoke(at(), "withdrawLocked", [iU], nil)
1514- if ((iL == iL))
1515- then {
1516- let iX = gI(iT)
1517- let gK = iX._1
1518- let gL = iX._2
1519- let iF = invoke(at(), "addFree", nil, [AttachedPayment(aq(), gL)])
1520- if ((iF == iF))
1521- then {
1522- let iG = invoke(au(), "notifyFees", [ce, iT], nil)
1523- if ((iG == iG))
1524- then {
1525- let iH = invoke(au(), "notifyNotional", [ce, ff], nil)
1526- if ((iH == iH))
1527- then (((((if (eM)
1528- then hi(ce, fd, fm, ff, fg, bT())
1529- else hC(ce)) ++ hv(cH, cI, eP, iA, iB, iC, it, iu)) ++ (if ((fl > 0))
1530- then hD(iQ, fl)
1531- else nil)) ++ hG(iW)) ++ hH(gK))
1532- else throw("Strict value is not equal to itself.")
1533- }
1534- else throw("Strict value is not equal to itself.")
1535- }
1536- else throw("Strict value is not equal to itself.")
1537- }
1538- else throw("Strict value is not equal to itself.")
1539- }
1540- }
1801+ let ge = dS()
1802+ $Tuple2(nil, ge)
15411803 }
15421804 else throw("Strict value is not equal to itself.")
15431805 }
15441806
15451807
15461808
1547-@Callable(bV)
1548-func liquidate (ce) = {
1549- let ic = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1550- if ((ic == ic))
1551- then {
1552- let iY = em(ce, aM)
1553- let iZ = if (dS())
1554- then {
1555- let ja = em(ce, aN)
1556- ba(iY, ja)
1557- }
1558- else iY
1559- if (if (if (if (if (!(bW(iZ, bF(), false)))
1560- then true
1561- else !(co(ce)))
1562- then true
1563- else !(cp()))
1564- then true
1565- else cq())
1566- then true
1567- else dC())
1568- then throw("Unable to liquidate")
1569- else {
1570- let jb = if (if ((iY > bG()))
1571- then true
1572- else (bH() > 0))
1573- then true
1574- else (aI > bH())
1575- let eF = cd(ce)._1
1576- let dW = aZ(eF)
1577- let jc = if (jb)
1578- then {
1579- let jd = eu(ce, eF)
1580- let je = aQ(aZ(jd), dW)
1581- $Tuple2(je, aZ(jd))
1582- }
1583- else $Tuple2(0, dW)
1584- let je = jc._1
1585- let jd = jc._2
1586- let jf = ez(ce, if (jb)
1587- then jd
1588- else dW, bG(), 0, true, false)
1589- let fd = jf._1
1590- let fm = jf._2
1591- let ff = jf._3
1592- let fg = jf._4
1593- let eZ = jf._5
1594- let eU = jf._6
1595- let fl = jf._7
1596- let cH = jf._8
1597- let cI = jf._9
1598- let eP = jf._10
1599- let iA = jf._11
1600- let iB = jf._12
1601- let iC = jf._13
1602- let it = jf._14
1603- let iu = jf._15
1604- let jg = jf._16
1605- let jh = (jg / 2)
1606- let gL = (jg - jh)
1607- let iV = (bp() - jg)
1608- let ji = if ((0 > iV))
1609- then 0
1610- else iV
1611- let iM = if ((eZ > 0))
1612- then {
1613- let iM = invoke(at(), "exchangeFreeAndLocked", [eZ], nil)
1614- if ((iM == iM))
1615- then nil
1616- else throw("Strict value is not equal to itself.")
1617- }
1618- else nil
1619- if ((iM == iM))
1620- then {
1621- let iL = invoke(at(), "withdrawLocked", [jg], nil)
1622- if ((iL == iL))
1623- then {
1624- let jj = invoke(at(), "addFree", nil, [AttachedPayment(aq(), gL)])
1625- if ((jj == jj))
1626- then {
1627- let iH = invoke(au(), "notifyNotional", [ce, ff], nil)
1628- if ((iH == iH))
1629- then ((((if (jb)
1630- then hi(ce, fd, fm, ff, fg, bT())
1631- else hC(ce)) ++ hv(cH, cI, eP, iA, iB, iC, it, iu)) ++ hD(bV.caller, jh)) ++ hG(ji))
1632- else throw("Strict value is not equal to itself.")
1633- }
1634- else throw("Strict value is not equal to itself.")
1635- }
1636- else throw("Strict value is not equal to itself.")
1637- }
1638- else throw("Strict value is not equal to itself.")
1639- }
1640- }
1641- else throw("Strict value is not equal to itself.")
1809+@Callable(bL)
1810+func computeFeeForTraderWithArtifact (bU,gr) = {
1811+ let ge = gD(bU, gr)
1812+ $Tuple2(nil, ge)
16421813 }
16431814
16441815
1645-
1646-@Callable(bV)
1647-func payFunding () = {
1648- let ic = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1649- if ((ic == ic))
1816+@Verifier(jx)
1817+func jy () = {
1818+ let jz = getString(this, X)
1819+ if (isDefined(jz))
16501820 then {
1651- let jk = bB()
1652- if (if (if ((jk > bT()))
1653- then true
1654- else !(cp()))
1655- then true
1656- else cq())
1657- then throw(((("Invalid funding block timestamp: " + toString(bT())) + " < ") + toString(jk)))
1658- else {
1659- let gj = dv()
1660- let jl = gi()
1661- let gm = jl._1
1662- let gn = jl._2
1663- gY((jk + bE()), (bM() + gn), (bN() + gm), aQ(gn, gj), aQ(gm, gj))
1664- }
1821+ let jA = getString(addressFromStringValue(value(jz)), Z)
1822+ if (isDefined(jA))
1823+ then valueOrElse(getBoolean(addressFromStringValue(value(jA)), ((("status_" + toString(this)) + "_") + toBase58String(jx.id))), false)
1824+ else throw("unable to verify: admin not set in coordinator")
16651825 }
1666- else throw("Strict value is not equal to itself.")
1826+ else sigVerify(jx.bodyBytes, jx.proofs[0], jx.senderPublicKey)
16671827 }
1668-
1669-
1670-
1671-@Callable(bV)
1672-func syncTerminalPriceToOracle () = {
1673- let cz = bt()
1674- let cA = bu()
1675- let jm = gd(dv(), cz, cA)
1676- let hP = jm._1
1677- let hQ = jm._2
1678- let gh = jm._3
1679- let hR = if ((gh != 0))
1680- then {
1681- let hR = invoke(at(), "exchangeFreeAndLocked", [gh], nil)
1682- if ((hR == hR))
1683- then nil
1684- else throw("Strict value is not equal to itself.")
1685- }
1686- else nil
1687- if ((hR == hR))
1688- then ((hG((bp() + gh)) ++ hu(hP, hQ)) ++ hm(aQ(aS(cz, hP), aS(cA, hQ))))
1689- else throw("Strict value is not equal to itself.")
1690- }
1691-
1692-
1693-
1694-@Callable(bV)
1695-func view_calcRemainMarginWithFundingPayment (ce) = {
1696- let ic = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1697- if ((ic == ic))
1698- then {
1699- let jn = cd(ce)
1700- let ch = jn._1
1701- let ef = jn._2
1702- let eo = jn._3
1703- let eh = jn._4
1704- let eq = jn._5
1705- let jo = ed(ce, aM)
1706- let dY = jo._1
1707- let ec = jo._2
1708- let jp = cZ(ch, ef, eh, eq, ec)
1709- let dh = jp._1
1710- let di = jp._2
1711- let dd = jp._3
1712- let cY = jp._4
1713- throw(((((((aO(dh) + aO(dd)) + aO(et(ce))) + aO(ec)) + aO(di)) + aO(dY)) + aO(cY)))
1714- }
1715- else throw("Strict value is not equal to itself.")
1716- }
1717-
1718-
1719-
1720-@Callable(bV)
1721-func view_getPegAdjustCost (hn) = {
1722- let cz = bt()
1723- let cA = bu()
1724- let gc = gd(hn, cz, cA)
1725- throw(toString(gc._3))
1726- }
1727-
1728-
1729-
1730-@Callable(bV)
1731-func view_getTerminalAmmPrice () = {
1732- let jq = fL()
1733- let fP = jq._1
1734- let fQ = jq._2
1735- let hK = aQ(aS(fP, bv()), aS(fQ, bw()))
1736- throw(toString(hK))
1737- }
1738-
1739-
1740-
1741-@Callable(bV)
1742-func view_getFunding () = {
1743- let gj = dv()
1744- let jr = gi()
1745- let gm = jr._1
1746- let gn = jr._2
1747- let js = aQ(gn, gj)
1748- let jt = aQ(gm, gj)
1749- throw((((aO(js) + aO(jt)) + aO(fn())) + aO(dv())))
1750- }
1751-
1752-
1753-
1754-@Callable(bV)
1755-func computeSpotPrice () = {
1756- let ic = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1757- if ((ic == ic))
1758- then {
1759- let gc = dR()
1760- $Tuple2(nil, gc)
1761- }
1762- else throw("Strict value is not equal to itself.")
1763- }
1764-
1765-
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())
17761828

github/deemru/w8io/c3f4982 
526.25 ms