tx · CJfPP9nTcmQhWTV9H5z8nbRrrhfbbzXGenHpoukSBZWk

3MxqS3CD3DRbyvyMLCLq3JoiSSi5qTuRMFd:  -0.04600000 Waves

2022.06.28 13:03 [2116141] smart account 3MxqS3CD3DRbyvyMLCLq3JoiSSi5qTuRMFd > SELF 0.00000000 Waves

{ "type": 13, "id": "CJfPP9nTcmQhWTV9H5z8nbRrrhfbbzXGenHpoukSBZWk", "fee": 4600000, "feeAssetId": null, "timestamp": 1656410676560, "version": 2, "chainId": 84, "sender": "3MxqS3CD3DRbyvyMLCLq3JoiSSi5qTuRMFd", "senderPublicKey": "3JKx86V3GnbRtGTLNKaRKFkhb7v1aMTLpKMz28o43DE6", "proofs": [ "H7pJPv1LPvWdNzfmAbMBFBxRWDuG9GCbyD4KJqfnGmRuk7BGrjrMbyppTxxu1KcFNnp25YAaPEGdEJgmtnQR6tt" ], "script": "base64:AAIFAAAAAAAAAEUIAhIAEgASCQoHAQEBAQEBARIOCgwBAQEBAQEBCAgIAQESBgoEAQEBARIFCgMBAQESABIDCgEBEgASAwoBCBIAEgMKAQgAAABpAAAAAAlrX29yYV9rZXkCAAAACWtfb3JhX2tleQAAAAAFa19vcmECAAAABWtfb3JhAAAAAAlrX2JhbGFuY2UCAAAACWtfYmFsYW5jZQAAAAAOa19wb3NpdGlvblNpemUCAAAADmtfcG9zaXRpb25TaXplAAAAABBrX3Bvc2l0aW9uTWFyZ2luAgAAABBrX3Bvc2l0aW9uTWFyZ2luAAAAABZrX3Bvc2l0aW9uT3Blbk5vdGlvbmFsAgAAABZrX3Bvc2l0aW9uT3Blbk5vdGlvbmFsAAAAAC5rX3Bvc2l0aW9uTGFzdFVwZGF0ZWRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAgAAABJrX3Bvc2l0aW9uRnJhY3Rpb24AAAAADWtfaW5pdGlhbGl6ZWQCAAAADWtfaW5pdGlhbGl6ZWQAAAAACGtfcGF1c2VkAgAAAAhrX3BhdXNlZAAAAAAFa19mZWUCAAAABWtfZmVlAAAAAA9rX2Z1bmRpbmdQZXJpb2QCAAAAD2tfZnVuZGluZ1BlcmlvZAAAAAARa19pbml0TWFyZ2luUmF0aW8CAAAAEWtfaW5pdE1hcmdpblJhdGlvAAAAABhrX21haW50ZW5hbmNlTWFyZ2luUmF0aW8CAAAABWtfbW1yAAAAABVrX2xpcXVpZGF0aW9uRmVlUmF0aW8CAAAAFWtfbGlxdWlkYXRpb25GZWVSYXRpbwAAAAANa19zcHJlYWRMaW1pdAIAAAANa19zcHJlYWRMaW1pdAAAAAAQa19tYXhQcmljZUltcGFjdAIAAAAQa19tYXhQcmljZUltcGFjdAAAAAANa19sYXN0RGF0YVN0cgIAAAANa19sYXN0RGF0YVN0cgAAAAAOa19sYXN0TWludXRlSWQCAAAADmtfbGFzdE1pbnV0ZUlkAAAAAB1rX3R3YXBEYXRhTGFzdEN1bXVsYXRpdmVQcmljZQIAAAAda190d2FwRGF0YUxhc3RDdW11bGF0aXZlUHJpY2UAAAAAE2tfdHdhcERhdGFMYXN0UHJpY2UCAAAAE2tfdHdhcERhdGFMYXN0UHJpY2UAAAAABmtfdHdhcAIAAAAGa190d2FwAAAAABFrX2Jhc2VBc3N0Rm5kRGVsdAIAAAAQa19iYXNlQXNzZXREZWx0YQAAAAAha19sYXRlc3RDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAgAAABdrX2xhdGVzdFByZW1pdW1GcmFjdGlvbgAAAAASa19uZXh0RnVuZGluZ0Jsb2NrAgAAAB5rX25leHRGdW5kaW5nQmxvY2tNaW5UaW1lc3RhbXAAAAAADWtfZnVuZGluZ1JhdGUCAAAADWtfZnVuZGluZ1JhdGUAAAAAE2tfcXVvdGVBc3NldFJlc2VydmUCAAAACGtfcXRBc3RSAAAAABJrX2Jhc2VBc3NldFJlc2VydmUCAAAACGtfYnNBc3RSAAAAABJrX2Jhc2VBc3N0Rm5kRGUxbHQCAAAAEGtfYmFzZUFzc2V0RGVsdGEAAAAAE2tfdG90YWxQb3NpdGlvblNpemUCAAAAE2tfdG90YWxQb3NpdGlvblNpemUAAAAAFGtfY3VtdWxhdGl2ZU5vdGlvbmFsAgAAABRrX2N1bXVsYXRpdmVOb3Rpb25hbAAAAAAXa19vcGVuSW50ZXJlc2V0Tm90aW9uYWwCAAAAF2tfb3BlbkludGVyZXNldE5vdGlvbmFsAAAAABRrX2Nvb3JkaW5hdG9yQWRkcmVzcwIAAAAUa19jb29yZGluYXRvckFkZHJlc3MAAAAAE2tfaW5zdXJhbmNlX2FkZHJlc3MCAAAAE2tfaW5zdXJhbmNlX2FkZHJlc3MAAAAAD2tfYWRtaW5fYWRkcmVzcwIAAAAPa19hZG1pbl9hZGRyZXNzAAAAABJrX2FkbWluX3B1YmxpY19rZXkCAAAAEmtfYWRtaW5fcHVibGljX2tleQAAAAANa19xdW90ZV9hc3NldAIAAAANa19xdW90ZV9hc3NldAAAAAAPa19xdW90ZV9zdGFraW5nAgAAAA9rX3F1b3RlX3N0YWtpbmcAAAAAEWtfc3Rha2luZ19hZGRyZXNzAgAAABFrX3N0YWtpbmdfYWRkcmVzcwEAAAALY29vcmRpbmF0b3IAAAAACQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQmAAAAAQkBAAAAEUBleHRyTmF0aXZlKDEwNTMpAAAAAgUAAAAEdGhpcwUAAAAUa19jb29yZGluYXRvckFkZHJlc3MCAAAAE0Nvb3JkaW5hdG9yIG5vdCBzZXQBAAAADGFkbWluQWRkcmVzcwAAAAAJAAQmAAAAAQkBAAAAEUBleHRyTmF0aXZlKDEwNTMpAAAAAgkBAAAAC2Nvb3JkaW5hdG9yAAAAAAUAAAAPa19hZG1pbl9hZGRyZXNzAQAAAA5hZG1pblB1YmxpY0tleQAAAAAJAAJZAAAAAQkBAAAAEUBleHRyTmF0aXZlKDEwNTMpAAAAAgkBAAAAC2Nvb3JkaW5hdG9yAAAAAAUAAAASa19hZG1pbl9wdWJsaWNfa2V5AQAAAApxdW90ZUFzc2V0AAAAAAkAAlkAAAABCQEAAAARQGV4dHJOYXRpdmUoMTA1MykAAAACCQEAAAALY29vcmRpbmF0b3IAAAAABQAAAA1rX3F1b3RlX2Fzc2V0AQAAABFxdW90ZUFzc2V0U3Rha2luZwAAAAAJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABCYAAAABCQEAAAARQGV4dHJOYXRpdmUoMTA1MykAAAACCQEAAAALY29vcmRpbmF0b3IAAAAABQAAAA9rX3F1b3RlX3N0YWtpbmcCAAAAHFF1b3RlIGFzc2V0ZSBzdGFraW5nIG5vdCBzZXQBAAAADnN0YWtpbmdBZGRyZXNzAAAAAAkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEJgAAAAEJAQAAABFAZXh0ck5hdGl2ZSgxMDUzKQAAAAIJAQAAAAtjb29yZGluYXRvcgAAAAAFAAAAEWtfc3Rha2luZ19hZGRyZXNzAgAAABFJbnN1cmFuY2Ugbm90IHNldAEAAAAQaW5zdXJhbmNlQWRkcmVzcwAAAAAJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABCYAAAABCQEAAAARQGV4dHJOYXRpdmUoMTA1MykAAAACCQEAAAALY29vcmRpbmF0b3IAAAAABQAAABNrX2luc3VyYW5jZV9hZGRyZXNzAgAAABFJbnN1cmFuY2Ugbm90IHNldAAAAAAIRElSX0xPTkcAAAAAAAAAAAEAAAAACURJUl9TSE9SVAAAAAAAAAAAAgAAAAAWRlVORElOR19CTE9DS19JTlRFUlZBTAAAAAAAAAAAPAAAAAANVFdBUF9JTlRFUlZBTAAA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AAABBQAAAA9rX2Z1bmRpbmdQZXJpb2QBAAAAFGZ1bmRpbmdQZXJpb2REZWNpbWFsAAAAAAkAAGgAAAACCQEAAAAQZnVuZGluZ1BlcmlvZFJhdwAAAAAFAAAADERFQ0lNQUxfVU5JVAEAAAAUZnVuZGluZ1BlcmlvZFNlY29uZHMAAAAACQAAaAAAAAIJAQAAABBmdW5kaW5nUGVyaW9kUmF3AAAAAAUAAAAHU0VDT05EUwEAAAADbW1yAAAAAAkBAAAAA2ludAAAAAEFAAAAGGtfbWFpbnRlbmFuY2VNYXJnaW5SYXRpbwEAAAATbGlxdWlkYXRpb25GZWVSYXRpbwAAAAAJAQAAAANpbnQAAAABBQAAABVrX2xpcXVpZGF0aW9uRmVlUmF0aW8BAAAAC3NwcmVhZExpbWl0AAAAAAkBAAAAA2ludAAAAAEFAAAADWtfc3ByZWFkTGltaXQBAAAADm1heFByaWNlSW1wYWN0AAAAAAkBAAAAA2ludAAAAAEFAAAAEGtfbWF4UHJpY2VJbXBhY3QBAAAAC2dldFBvc2l0aW9uAAAAAQAAAAdpbnZlc29yBAAAAA9wb3NpdGlvblNpemVPcHQJAAQaAAAAAgUAAAAEdGhpcwkBAAAADnRvQ29tcG9zaXRlS2V5AAAAAgUAAAAOa19wb3NpdGlvblNpemUFAAAAB2ludmVzb3IEAAAAByRtYXRjaDAFAAAAD3Bvc2l0aW9uU2l6ZU9wdAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAxwb3NpdGlvblNpemUFAAAAByRtYXRjaDAJAAUWAAAABAUAAAAMcG9zaXRpb25TaXplCQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAAAR0aGlzCQEAAAAOdG9Db21wb3NpdGVLZXkAAAACBQAAABBrX3Bvc2l0aW9uTWFyZ2luBQAAAAdpbnZlc29yCQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAAAR0aGlzCQEAAAAOdG9Db21wb3NpdGVLZXkAAAACBQAAABZrX3Bvc2l0aW9uT3Blbk5vdGlvbmFsBQAAAAdpbnZlc29yCQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAAAR0aGlzCQEAAAAOdG9Db21wb3NpdGVLZXkAAAACBQAAAC5rX3Bvc2l0aW9uTGFzdFVwZGF0ZWRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uBQAAAAdpbnZlc29yCQAFFgAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAE3JlcXVpcmVPcGVuUG9zaXRpb24AAAABAAAAB190cmFkZXIDCQAAAAAAAAIICQEAAAALZ2V0UG9zaXRpb24AAAABBQAAAAdfdHJhZGVyAAAAAl8xAAAAAAAAAAAACQAAAgAAAAECAAAAEE5vIG9wZW4gcG9zaXRpb24GAQAAAAtpbml0aWFsaXplZAAAAAAJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQbAAAAAgUAAAAEdGhpcwUAAAANa19pbml0aWFsaXplZAcBAAAABnBhdXNlZAAAAAAJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQbAAAAAgUAAAAEdGhpcwUAAAAIa19wYXVzZWQHAQAAAA11cGRhdGVSZXNlcnZlAAAAAwAAAAZfaXNBZGQAAAARX3F1b3RlQXNzZXRBbW91bnQAAAAQX2Jhc2VBc3NldEFtb3VudAMFAAAABl9pc0FkZAQAAAAHbmV3QmFzZQkAAGUAAAACCQEAAAAGYnNBc3RSAAAAAAUAAAAQX2Jhc2VBc3NldEFtb3VudAMJAABnAAAAAgAAAAAAAAAAAAUAAAAHbmV3QmFzZQkAAAIAAAABAgAAACpUeCBsZWFkIHRvIGJhc2UgYXNzZXQgcmVzZXJ2ZSA8PSAwLCByZXZlcnQJAAUXAAAABQkAAGQAAAACCQEAAAAGcXRBc3RSAAAAAAUAAAARX3F1b3RlQXNzZXRBbW91bnQFAAAAB25ld0Jhc2UJAABlAAAAAgkBAAAAD2Jhc2VBc3N0Rm5kRGVsdAAAAAAFAAAAEF9iYXNlQXNzZXRBbW91bnQJAABkAAAAAgkBAAAAEXRvdGFsUG9zaXRpb25TaXplAAAAAAUAAAAQX2Jhc2VBc3NldEFtb3VudAkAAGQAAAACCQEAAAASY3VtdWxhdGl2ZU5vdGlvbmFsAAAAAAUAAAARX3F1b3RlQXNzZXRBbW91bnQEAAAACG5ld1F1b3RlCQAAZQAAAAIJAQAAAAZxdEFzdFIAAAAABQAAABFfcXVvdGVBc3NldEFtb3VudAMJAABnAAAAAgAAAAAAAAAAAAUAAAAIbmV3UXVvdGUJAAACAAAAAQIAAAAqVHggbGVhZCB0byBiYXNlIHF1b3RlIHJlc2VydmUgPD0gMCwgcmV2ZXJ0CQAFFwAAAAUFAAAACG5ld1F1b3RlCQAAZAAAAAIJAQAAAAZic0FzdFIAAAAABQAAABBfYmFzZUFzc2V0QW1vdW50CQAAZAAAAAIJAQAAAA9iYXNlQXNzdEZuZERlbHQAAAAABQAAABBfYmFzZUFzc2V0QW1vdW50CQAAZQAAAAIJAQAAABF0b3RhbFBvc2l0aW9uU2l6ZQAAAAAFAAAAEF9iYXNlQXNzZXRBbW91bnQJAABlAAAAAgkBAAAAEmN1bXVsYXRpdmVOb3Rpb25hbAAAAAAFAAAAEV9xdW90ZUFzc2V0QW1vdW50AQAAAAlzd2FwSW5wdXQAAAACAAAABl9pc0FkZAAAABFfcXVvdGVBc3NldEFtb3VudAQAAAAHX3F0QXN0UgkBAAAABnF0QXN0UgAAAAAEAAAAB19ic0FzdFIJAQAAAAZic0FzdFIAAAAABAAAAAtwcmljZUJlZm9yZQkBAAAABGRpdmQAAAACBQAAAAdfcXRBc3RSBQAAAAdfYnNBc3RSBAAAACdhbW91bnRCYXNlQXNzZXRCb3VnaHRXaXRob3V0UHJpY2VJbXBhY3QJAQAAAARtdWxkAAAAAgUAAAARX3F1b3RlQXNzZXRBbW91bnQFAAAAC3ByaWNlQmVmb3JlBAAAAAFrCQEAAAAEbXVsZAAAAAIFAAAAB19xdEFzdFIFAAAAB19ic0FzdFIEAAAAFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIDBQAAAAZfaXNBZGQJAABkAAAAAgUAAAAHX3F0QXN0UgUAAAARX3F1b3RlQXNzZXRBbW91bnQJAABlAAAAAgUAAAAHX3F0QXN0UgUAAAARX3F1b3RlQXNzZXRBbW91bnQEAAAAFWJhc2VBc3NldFJlc2VydmVBZnRlcgkBAAAABGRpdmQAAAACBQAAAAFrBQAAABZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyBAAAABhhbW91bnRCYXNlQXNzZXRCb3VnaHRBYnMJAQAAAANhYnMAAAABCQAAZQAAAAIFAAAAFWJhc2VBc3NldFJlc2VydmVBZnRlcgUAAAAHX2JzQXN0UgQAAAAVYW1vdW50QmFzZUFzc2V0Qm91Z2h0AwUAAAAGX2lzQWRkBQAAABhhbW91bnRCYXNlQXNzZXRCb3VnaHRBYnMJAQAAAAEtAAAAAQUAAAAYYW1vdW50QmFzZUFzc2V0Qm91Z2h0QWJzBAAAAAtwcmljZUltcGFjdAkAAGkAAAACCQAAZQAAAAIFAAAAJ2Ftb3VudEJhc2VBc3NldEJvdWdodFdpdGhvdXRQcmljZUltcGFjdAUAAAAYYW1vdW50QmFzZUFzc2V0Qm91Z2h0QWJzBQAAACdhbW91bnRCYXNlQXNzZXRCb3VnaHRXaXRob3V0UHJpY2VJbXBhY3QEAAAAE21heFByaWNlSW1wYWN0VmFsdWUJAQAAAA5tYXhQcmljZUltcGFjdAAAAAADCQAAZgAAAAIFAAAAC3ByaWNlSW1wYWN0BQAAABNtYXhQcmljZUltcGFjdFZhbHVlCQAAAgAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAADVByaWNlIGltcGFjdCAJAAGkAAAAAQUAAAALcHJpY2VJbXBhY3QCAAAAFCA+IG1heCBwcmljZSBpbXBhY3QgCQABpAAAAAEFAAAAE21heFByaWNlSW1wYWN0VmFsdWUEAAAADCR0MDk4NjcxMDExNQkBAAAADXVwZGF0ZVJlc2VydmUAAAADBQAAAAZfaXNBZGQFAAAAEV9xdW90ZUFzc2V0QW1vdW50BQAAABhhbW91bnRCYXNlQXNzZXRCb3VnaHRBYnMEAAAAF3F1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIxCAUAAAAMJHQwOTg2NzEwMTE1AAAAAl8xBAAAABZiYXNlQXNzZXRSZXNlcnZlQWZ0ZXIxCAUAAAAMJHQwOTg2NzEwMTE1AAAAAl8yBAAAACViYXNlQXNzZXREZWx0YVRoaXNGdW5kaW5nUGVyaW9kQWZ0ZXIxCAUAAAAMJHQwOTg2NzEwMTE1AAAAAl8zBAAAABd0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyMQgFAAAADCR0MDk4NjcxMDExNQAAAAJfNAQAAAAYY3VtdWxhdGl2ZU5vdGlvbmFsQWZ0ZXIxCAUAAAAMJHQwOTg2NzEwMTE1AAAAAl81CQAFGAAAAAYFAAAAFWFtb3VudEJhc2VBc3NldEJvdWdodAUAAAAXcXVvdGVBc3NldFJlc2VydmVBZnRlcjEFAAAAFmJhc2VBc3NldFJlc2VydmVBZnRlcjEFAAAAJWJhc2VBc3NldERlbHRhVGhpc0Z1bmRpbmdQZXJpb2RBZnRlcjEFAAAAF3RvdGFsUG9zaXRpb25TaXplQWZ0ZXIxBQAAABhjdW11bGF0aXZlTm90aW9uYWxBZnRlcjEBAAAAImNhbGNSZW1haW5NYXJnaW5XaXRoRnVuZGluZ1BheW1lbnQAAAAEAAAAEF9vbGRQb3NpdGlvblNpemUAAAASX29sZFBvc2l0aW9uTWFyZ2luAAAAFV9vbGRQb3NpdGlvbkxzdFVwZENQRgAAAAxfbWFyZ2luRGVsdGEEAAAACl9sYXRlc3RDUEYJAQAAAAlsYXRlc3RDUEYAAAAABAAAAA5mdW5kaW5nUGF5bWVudAMJAQAAAAIhPQAAAAIFAAAAEF9vbGRQb3NpdGlvblNpemUAAAAAAAAAAAAJAQAAAARtdWxkAAAAAgkAAGUAAAACBQAAAApfbGF0ZXN0Q1BGBQAAABVfb2xkUG9zaXRpb25Mc3RVcGRDUEYFAAAAEF9vbGRQb3NpdGlvblNpemUAAAAAAAAAAAAEAAAADHNpZ25lZE1hcmdpbgkAAGQAAAACCQAAZQAAAAIFAAAADF9tYXJnaW5EZWx0YQUAAAAOZnVuZGluZ1BheW1lbnQFAAAAEl9vbGRQb3NpdGlvbk1hcmdpbgQAAAANJHQwMTA3MzMxMDg2MAMJAABmAAAAAgAAAAAAAAAAAAUAAAAMc2lnbmVkTWFyZ2luCQAFFAAAAAIAAAAAAAAAAAAJAQAAAANhYnMAAAABBQAAAAxzaWduZWRNYXJnaW4JAAUUAAAAAgkBAAAAA2FicwAAAAEFAAAADHNpZ25lZE1hcmdpbgAAAAAAAAAAAAQAAAAMcmVtYWluTWFyZ2luCAUAAAANJHQwMTA3MzMxMDg2MAAAAAJfMQQAAAAHYmFkRGVidAgFAAAADSR0MDEwNzMzMTA4NjAAAAACXzIJAAUWAAAABAUAAAAMcmVtYWluTWFyZ2luBQAAAAdiYWREZWJ0BQAAAA5mdW5kaW5nUGF5bWVudAUAAAAKX2xhdGVzdENQRgEAAAAaZ2V0T3V0cHV0UHJpY2VXaXRoUmVzZXJ2ZXMAAAAEAAAABF9hZGQAAAAQX2Jhc2VBc3NldEFtb3VudAAAABVfcXVvdGVBc3NldFBvb2xBbW91bnQAAAAUX2Jhc2VBc3NldFBvb2xBbW91bnQDCQAAAAAAAAIFAAAAEF9iYXNlQXNzZXRBbW91bnQAAAAAAAAAAAAJAAACAAAAAQIAAAAZSW52YWxpZCBiYXNlIGFzc2V0IGFtb3VudAQAAAABawkBAAAABG11bGQAAAACBQAAABVfcXVvdGVBc3NldFBvb2xBbW91bnQFAAAAFF9iYXNlQXNzZXRQb29sQW1vdW50BAAAABhiYXNlQXNzZXRQb29sQW1vdW50QWZ0ZXIDBQAAAARfYWRkCQAAZAAAAAIFAAAAFF9iYXNlQXNzZXRQb29sQW1vdW50BQAAABBfYmFzZUFzc2V0QW1vdW50CQAAZQAAAAIFAAAAFF9iYXNlQXNzZXRQb29sQW1vdW50BQAAABBfYmFzZUFzc2V0QW1vdW50BAAAAA9xdW90ZUFzc2V0QWZ0ZXIJAQAAAARkaXZkAAAAAgUAAAABawUAAAAYYmFzZUFzc2V0UG9vbEFtb3VudEFmdGVyBAAAAA5xdW90ZUFzc2V0U29sZAkBAAAAA2FicwAAAAEJAABlAAAAAgUAAAAPcXVvdGVBc3NldEFmdGVyBQAAABVfcXVvdGVBc3NldFBvb2xBbW91bnQEAAAADSR0MDExNTA5MTE3NDUJAQAAAA11cGRhdGVSZXNlcnZlAAAAAwkBAAAAASEAAAABBQAAAARfYWRkBQAAAA5xdW90ZUFzc2V0U29sZAUAAAAQX2Jhc2VBc3NldEFtb3VudAQAAAAXcXVvdGVBc3NldFJlc2VydmVBZnRlcjEIBQAAAA0kdDAxMTUwOTExNzQ1AAAAAl8xBAAAABZiYXNlQXNzZXRSZXNlcnZlQWZ0ZXIxCAUAAAANJHQwMTE1MDkxMTc0NQAAAAJfMgQAAAAlYmFzZUFzc2V0RGVsdGFUaGlzRnVuZGluZ1BlcmlvZEFmdGVyMQgFAAAADSR0MDExNTA5MTE3NDUAAAACXzMEAAAAF3RvdGFsUG9zaXRpb25TaXplQWZ0ZXIxCAUAAAANJHQwMTE1MDkxMTc0NQAAAAJfNAQAAAAYY3VtdWxhdGl2ZU5vdGlvbmFsQWZ0ZXIxCAUAAAANJHQwMTE1MDkxMTc0NQAAAAJfNQkABRgAAAAGBQAAAA5xdW90ZUFzc2V0U29sZAUAAAAXcXVvdGVBc3NldFJlc2VydmVBZnRlcjEFAAAAFmJhc2VBc3NldFJlc2VydmVBZnRlcjEFAAAAJWJhc2VBc3NldERlbHRhVGhpc0Z1bmRpbmdQZXJpb2RBZnRlcjEFAAAAF3RvdGFsUG9zaXRpb25TaXplQWZ0ZXIxBQAAABhjdW11bGF0aXZlTm90aW9uYWxBZnRlcjEBAAAAEmdldE9yYWNsZVR3YXBQcmljZQAAAAAEAAAABm9yYWNsZQkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEJgAAAAEJAQAAABFAZXh0ck5hdGl2ZSgxMDUzKQAAAAIFAAAABHRoaXMFAAAABWtfb3JhAgAAAAAEAAAACHByaWNlS2V5CQEAAAARQGV4dHJOYXRpdmUoMTA1MykAAAACBQAAAAR0aGlzBQAAAAlrX29yYV9rZXkJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAABm9yYWNsZQUAAAAIcHJpY2VLZXkBAAAADGdldFNwb3RQcmljZQAAAAAEAAAAB19xdEFzdFIJAQAAAAZxdEFzdFIAAAAABAAAAAdfYnNBc3RSCQEAAAAGYnNBc3RSAAAAAAkBAAAABGRpdmQAAAACBQAAAAdfcXRBc3RSBQAAAAdfYnNBc3RSAQAAABZpc092ZXJGbHVjdHVhdGlvbkxpbWl0AAAAAAQAAAALb3JhY2xlUHJpY2UJAQAAABJnZXRPcmFjbGVUd2FwUHJpY2UAAAAABAAAAAxjdXJyZW50UHJpY2UJAQAAAAxnZXRTcG90UHJpY2UAAAAACQAAZgAAAAIJAQAAAARkaXZkAAAAAgkBAAAAA2FicwAAAAEJAABlAAAAAgUAAAALb3JhY2xlUHJpY2UFAAAADGN1cnJlbnRQcmljZQUAAAALb3JhY2xlUHJpY2UJAQAAAAtzcHJlYWRMaW1pdAAAAAABAAAAI2dldFBvc2l0aW9uTm90aW9uYWxBbmRVbnJlYWxpemVkUG5sAAAAAgAAAAdfdHJhZGVyAAAAB19vcHRpb24EAAAADSR0MDEyNTIwMTI2NDgJAQAAAAtnZXRQb3NpdGlvbgAAAAEFAAAAB190cmFkZXIEAAAADHBvc2l0aW9uU2l6ZQgFAAAADSR0MDEyNTIwMTI2NDgAAAACXzEEAAAADnBvc2l0aW9uTWFyZ2luCAUAAAANJHQwMTI1MjAxMjY0OAAAAAJfMgQAAAAUcG9zaXRpb25PcGVuTm90aW9uYWwIBQAAAA0kdDAxMjUyMDEyNjQ4AAAAAl8zBAAAABFwb3NpdGlvbkxzdFVwZENQRggFAAAADSR0MDEyNTIwMTI2NDgAAAACXzQEAAAAD3Bvc2l0aW9uU2l6ZUFicwkBAAAAA2FicwAAAAEFAAAADHBvc2l0aW9uU2l6ZQMJAAAAAAAAAgUAAAAPcG9zaXRpb25TaXplQWJzAAAAAAAAAAAACQAAAgAAAAECAAAAFUludmFsaWQgcG9zaXRpb24gc2l6ZQQAAAAHaXNTaG9ydAkAAGYAAAACAAAAAAAAAAAABQAAAAxwb3NpdGlvblNpemUEAAAAEHBvc2l0aW9uTm90aW9uYWwDCQAAAAAAAAIFAAAAB19vcHRpb24FAAAAD1BOTF9PUFRJT05fU1BPVAQAAAANJHQwMTI4OTUxMzA1OAkBAAAAGmdldE91dHB1dFByaWNlV2l0aFJlc2VydmVzAAAABAkBAAAAASEAAAABBQAAAAdpc1Nob3J0BQAAAA9wb3NpdGlvblNpemVBYnMJAQAAAAZxdEFzdFIAAAAACQEAAAAGYnNBc3RSAAAAAAQAAAATb3V0UG9zaXRpb25Ob3Rpb25hbAgFAAAADSR0MDEyODk1MTMwNTgAAAACXzEEAAAAAngxCAUAAAANJHQwMTI4OTUxMzA1OAAAAAJfMgQAAAACeDIIBQAAAA0kdDAxMjg5NTEzMDU4AAAAAl8zBAAAAAJ4MwgFAAAADSR0MDEyODk1MTMwNTgAAAACXzQFAAAAE291dFBvc2l0aW9uTm90aW9uYWwJAABoAAAAAgUAAAAPcG9zaXRpb25TaXplQWJzCQEAAAASZ2V0T3JhY2xlVHdhcFByaWNlAAAAAAQAAAANdW5yZWFsaXplZFBubAMFAAAAB2lzU2hvcnQJAABlAAAAAgUAAAAUcG9zaXRpb25PcGVuTm90aW9uYWwFAAAAEHBvc2l0aW9uTm90aW9uYWwJAABlAAAAAgUAAAAQcG9zaXRpb25Ob3Rpb25hbAUAAAAUcG9zaXRpb25PcGVuTm90aW9uYWwJAAUUAAAAAgUAAAAQcG9zaXRpb25Ob3Rpb25hbAUAAAANdW5yZWFsaXplZFBubAEAAAAWZ2V0TWFyZ2luUmF0aW9CeU9wdGlvbgAAAAIAAAAHX3RyYWRlcgAAAAdfb3B0aW9uCgEAAAABeAAAAAAAAAAAAAAAAAAEAAAADSR0MDEzNDgyMTM1OTMJAQAAAAtnZXRQb3NpdGlvbgAAAAEFAAAAB190cmFkZXIEAAAADHBvc2l0aW9uU2l6ZQgFAAAADSR0MDEzNDgyMTM1OTMAAAACXzEEAAAADnBvc2l0aW9uTWFyZ2luCAUAAAANJHQwMTM0ODIxMzU5MwAAAAJfMgQAAAADcG9uCAUAAAANJHQwMTM0ODIxMzU5MwAAAAJfMwQAAAARcG9zaXRpb25Mc3RVcGRDUEYIBQAAAA0kdDAxMzQ4MjEzNTkzAAAAAl80BAAAAA0kdDAxMzU5OTEzNjkyCQEAAAAjZ2V0UG9zaXRpb25Ob3Rpb25hbEFuZFVucmVhbGl6ZWRQbmwAAAACBQAAAAdfdHJhZGVyBQAAAAdfb3B0aW9uBAAAABBwb3NpdGlvbk5vdGlvbmFsCAUAAAANJHQwMTM1OTkxMzY5MgAAAAJfMQQAAAANdW5yZWFsaXplZFBubAgFAAAADSR0MDEzNTk5MTM2OTIAAAACXzIEAAAADSR0MDEzNjk3MTM4NjMJAQAAACJjYWxjUmVtYWluTWFyZ2luV2l0aEZ1bmRpbmdQYXltZW50AAAABAUAAAAMcG9zaXRpb25TaXplBQAAAA5wb3NpdGlvbk1hcmdpbgUAAAARcG9zaXRpb25Mc3RVcGRDUEYFAAAADXVucmVhbGl6ZWRQbmwEAAAADHJlbWFpbk1hcmdpbggFAAAADSR0MDEzNjk3MTM4NjMAAAACXzEEAAAAB2JhZERlYnQIBQAAAA0kdDAxMzY5NzEzODYzAAAAAl8yCQEAAAAEZGl2ZAAAAAIJAABlAAAAAgUAAAAMcmVtYWluTWFyZ2luBQAAAAdiYWREZWJ0BQAAABBwb3NpdGlvbk5vdGlvbmFsAQAAAA5nZXRNYXJnaW5SYXRpbwAAAAEAAAAHX3RyYWRlcgkBAAAAFmdldE1hcmdpblJhdGlvQnlPcHRpb24AAAACBQAAAAdfdHJhZGVyBQAAAA9QTkxfT1BUSU9OX1NQT1QBAAAAFWludGVybmFsQ2xvc2VQb3NpdGlvbgAAAAEAAAAHX3RyYWRlcgQAAAANJHQwMTQwNTkxNDE3MAkBAAAAC2dldFBvc2l0aW9uAAAAAQUAAAAHX3RyYWRlcgQAAAAMcG9zaXRpb25TaXplCAUAAAANJHQwMTQwNTkxNDE3MAAAAAJfMQQAAAAOcG9zaXRpb25NYXJnaW4IBQAAAA0kdDAxNDA1OTE0MTcwAAAAAl8yBAAAAANwb24IBQAAAA0kdDAxNDA1OTE0MTcwAAAAAl8zBAAAABFwb3NpdGlvbkxzdFVwZENQRggFAAAADSR0MDE0MDU5MTQxNzAAAAACXzQEAAAADSR0MDE0MTc2MTQyNjMJAQAAACNnZXRQb3NpdGlvbk5vdGlvbmFsQW5kVW5yZWFsaXplZFBubAAAAAIFAAAAB190cmFkZXIFAAAAD1BOTF9PUFRJT05fU1BPVAQAAAACeDEIBQAAAA0kdDAxNDE3NjE0MjYzAAAAAl8xBAAAAA11bnJlYWxpemVkUG5sCAUAAAANJHQwMTQxNzYxNDI2MwAAAAJfMgQAAAANJHQwMTQyNjgxNDQ0MAkBAAAAImNhbGNSZW1haW5NYXJnaW5XaXRoRnVuZGluZ1BheW1lbnQAAAAEBQAAAAxwb3NpdGlvblNpemUFAAAADnBvc2l0aW9uTWFyZ2luBQAAABFwb3NpdGlvbkxzdFVwZENQRgUAAAANdW5yZWFsaXplZFBubAQAAAAMcmVtYWluTWFyZ2luCAUAAAANJHQwMTQyNjgxNDQ0MAAAAAJfMQQAAAAHYmFkRGVidAgFAAAADSR0MDE0MjY4MTQ0NDAAAAACXzIEAAAAAngyCAUAAAANJHQwMTQyNjgxNDQ0MAAAAAJfMwQAAAAVZXhjaGFuZ2VkUG9zaXRpb25TaXplCQEAAAABLQAAAAEFAAAADHBvc2l0aW9uU2l6ZQQAAAALcmVhbGl6ZWRQbmwFAAAADXVucmVhbGl6ZWRQbmwEAAAADW1hcmdpblRvVmF1bHQJAQAAAAEtAAAAAQUAAAAMcmVtYWluTWFyZ2luBAAAAA0kdDAxNDU2NzE0OTAwCQEAAAAaZ2V0T3V0cHV0UHJpY2VXaXRoUmVzZXJ2ZXMAAAAECQAAZgAAAAIFAAAADHBvc2l0aW9uU2l6ZQAAAAAAAAAAAAkBAAAAA2FicwAAAAEFAAAADHBvc2l0aW9uU2l6ZQkBAAAABnF0QXN0UgAAAAAJAQAAAAZic0FzdFIAAAAABAAAABlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50CAUAAAANJHQwMTQ1NjcxNDkwMAAAAAJfMQQAAAAWcXVvdGVBc3NldFJlc2VydmVBZnRlcggFAAAADSR0MDE0NTY3MTQ5MDAAAAACXzIEAAAAFWJhc2VBc3NldFJlc2VydmVBZnRlcggFAAAADSR0MDE0NTY3MTQ5MDAAAAACXzMEAAAAJGJhc2VBc3NldERlbHRhVGhpc0Z1bmRpbmdQZXJpb2RBZnRlcggFAAAADSR0MDE0NTY3MTQ5MDAAAAACXzQEAAAAFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIIBQAAAA0kdDAxNDU2NzE0OTAwAAAAAl81BAAAABdjdW11bGF0aXZlTm90aW9uYWxBZnRlcggFAAAADSR0MDE0NTY3MTQ5MDAAAAACXzYEAAAAGm9wZW5JbnRlcmVzZXROb3Rpb25hbEFmdGVyCQAAZQAAAAIJAQAAABVvcGVuSW50ZXJlc2V0Tm90aW9uYWwAAAAABQAAAANwb24JAAUdAAAACwUAAAAVZXhjaGFuZ2VkUG9zaXRpb25TaXplBQAAAAdiYWREZWJ0BQAAAAtyZWFsaXplZFBubAUAAAANbWFyZ2luVG9WYXVsdAUAAAAWcXVvdGVBc3NldFJlc2VydmVBZnRlcgUAAAAVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyBQAAACRiYXNlQXNzZXREZWx0YVRoaXNGdW5kaW5nUGVyaW9kQWZ0ZXIFAAAAFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIFAAAAF2N1bXVsYXRpdmVOb3Rpb25hbEFmdGVyBQAAABpvcGVuSW50ZXJlc2V0Tm90aW9uYWxBZnRlcgUAAAAZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAEAAAAQZ2V0VHdhcFNwb3RQcmljZQAAAAAEAAAACG1pbnV0ZUlkCQAAaQAAAAIJAABpAAAAAggFAAAACWxhc3RCbG9jawAAAAl0aW1lc3RhbXAAAAAAAAAAA+gAAAAAAAAAADwEAAAADXN0YXJ0TWludXRlSWQJAABlAAAAAgUAAAAIbWludXRlSWQFAAAADVRXQVBfSU5URVJWQUwEAAAAB2xp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YXN0UHJpY2UCAAAAAV8JAAGkAAAAAQUAAAAIbWF4SW5kZXgAAAAAAAAAAAAEAAAAFXN0YXJ0Q3VtbXVsYXRpdmVQcmljZQkAAGQAAAACBQAAABhzdGFydExhc3RDdW11bGF0aXZlUHJpY2UJAABoAAAAAgkAAGUAAAACBQAAAA1zdGFydE1pbnV0ZUlkBQAAAAhtYXhJbmRleAUAAAAOc3RhcnRMYXN0UHJpY2UJAABpAAAAAgkAAGUAAAACBQAAABNub3dDdW1tdWxhdGl2ZVByaWNlBQAAABVzdGFydEN1bW11bGF0aXZlUHJpY2UFAAAADVRXQVBfSU5URVJWQUwBAAAADnVwZGF0ZVNldHRpbmdzAAAABwAAABBfaW5pdE1hcmdpblJhdGlvAAAABF9tbXIAAAAUX2xpcXVpZGF0aW9uRmVlUmF0aW8AAAAOX2Z1bmRpbmdQZXJpb2QAAAAEX2ZlZQAAAAxfc3ByZWFkTGltaXQAAAAPX21heFByaWNlSW1wYWN0CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABFrX2luaXRNYXJnaW5SYXRpbwUAAAAQX2luaXRNYXJnaW5SYXRpbwkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAYa19tYWludGVuYW5jZU1hcmdpblJhdGlvBQAAAARfbW1yCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABVrX2xpcXVpZGF0aW9uRmVlUmF0aW8FAAAAFF9saXF1aWRhdGlvbkZlZVJhdGlvCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAA9rX2Z1bmRpbmdQZXJpb2QFAAAADl9mdW5kaW5nUGVyaW9kCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAVrX2ZlZQUAAAAEX2ZlZQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAANa19zcHJlYWRMaW1pdAUAAAAMX3NwcmVhZExpbWl0CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABBrX21heFByaWNlSW1wYWN0BQAAAA9fbWF4UHJpY2VJbXBhY3QFAAAAA25pbAEAAAANdXBkYXRlRnVuZGluZwAAAAQAAAAKX2Jhc2VBRFRGUAAAABFfbmV4dEZ1bmRpbmdCbG9jawAAAApfbGF0ZXN0Q1BGAAAADF9mdW5kaW5nUmF0ZQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAARa19iYXNlQXNzdEZuZERlbHQFAAAACl9iYXNlQURURlAJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAEmtfbmV4dEZ1bmRpbmdCbG9jawUAAAARX25leHRGdW5kaW5nQmxvY2sJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAIWtfbGF0ZXN0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgUAAAAKX2xhdGVzdENQRgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAANa19mdW5kaW5nUmF0ZQUAAAAMX2Z1bmRpbmdSYXRlBQAAAANuaWwBAAAADnVwZGF0ZVBvc2l0aW9uAAAABQAAAAhfYWRkcmVzcwAAAAVfc2l6ZQAAAAdfbWFyZ2luAAAADF9vcGVuTm90aW5hbAAAAApfTHN0VXBkQ1BGCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAOdG9Db21wb3NpdGVLZXkAAAACBQAAAA5rX3Bvc2l0aW9uU2l6ZQUAAAAIX2FkZHJlc3MFAAAABV9zaXplCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAOdG9Db21wb3NpdGVLZXkAAAACBQAAABBrX3Bvc2l0aW9uTWFyZ2luBQAAAAhfYWRkcmVzcwUAAAAHX21hcmdpbgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAADnRvQ29tcG9zaXRlS2V5AAAAAgUAAAAWa19wb3NpdGlvbk9wZW5Ob3Rpb25hbAUAAAAIX2FkZHJlc3MFAAAADF9vcGVuTm90aW5hbAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAADnRvQ29tcG9zaXRlS2V5AAAAAgUAAAAua19wb3NpdGlvbkxhc3RVcGRhdGVkQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgUAAAAIX2FkZHJlc3MFAAAACl9Mc3RVcGRDUEYFAAAAA25pbAEAAAAK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ZXJ2ZQUAAAAHX2JzQXN0UgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAARa19iYXNlQXNzdEZuZERlbHQFAAAAJV9iYXNlQXNzZXREZWx0YVRoaXNGdW5kaW5nUGVyaW9kQWZ0ZXIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAE2tfdG90YWxQb3NpdGlvblNpemUFAAAAF190b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABRrX2N1bXVsYXRpdmVOb3Rpb25hbAUAAAAYX2N1bXVsYXRpdmVOb3Rpb25hbEFmdGVyCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABdrX29wZW5JbnRlcmVzZXROb3Rpb25hbAUAAAAWX29wZW5JbnRlcmVzZXROb3Rpb25hbAUAAAADbmlsCQEAAAAKYXBwZW5kVHdhcAAAAAEJAQAAAARkaXZkAAAAAgUAAAAHX3F0QXN0UgUAAAAHX2JzQXN0UgEAAAAOZGVsZXRlUG9zaXRpb24AAAABAAAACF9hZGRyZXNzCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEJAQAAAA50b0NvbXBvc2l0ZUtleQAAAAIFAAAADmtfcG9zaXRpb25TaXplBQAAAAhfYWRkcmVzcwkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQEAAAAOdG9Db21wb3NpdGVLZXkAAAACBQAAABBrX3Bvc2l0aW9uTWFyZ2luBQAAAAhfYWRkcmVzcwkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQEAAAAOdG9Db21wb3NpdGVLZXkAAAACBQAAABZrX3Bvc2l0aW9uT3Blbk5vdGlvbmFsBQAAAAhfYWRkcmVzcwkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQEAAAAOdG9Db21wb3NpdGVLZXkAAAACBQAAAC5rX3Bvc2l0aW9uTGFzdFVwZGF0ZWRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uBQAAAAhfYWRkcmVzcwUAAAADbmlsAQAAAAh3aXRoZHJhdwAAAAIAAAAIX2FkZHJlc3MAAAAHX2Ftb3VudAQAAAAHYmFsYW5jZQkAA/AAAAACBQAAAAR0aGlzCQEAAAAKcXVvdGVBc3NldAAAAAADCQAAZgAAAAIFAAAAB19hbW91bnQFAAAAB2JhbGFuY2UJAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAATVW5hYmxlIHRvIHdpdGhkcmF3IAkAAaQAAAABBQAAAAdfYW1vdW50AgAAABcgZnJvbSBjb250cmFjdCBiYWxhbmNlIAkAAaQAAAABBQAAAAdiYWxhbmNlCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAACF9hZGRyZXNzBQAAAAdfYW1vdW50CQEAAAAKcXVvdGVBc3NldAAAAAAFAAAAA25pbAEAAAANdXBkYXRlQmFsYW5jZQAAAAEAAAABaQMJAABmAAAAAgAAAAAAAAAAAAUAAAABaQkAAAIAAAABAgAAAAdCYWxhbmNlCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAlrX2JhbGFuY2UFAAAAAWkFAAAAA25pbAEAAAALdHJhbnNmZXJGZWUAAAABAAAAAWkJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwkBAAAADnN0YWtpbmdBZGRyZXNzAAAAAAUAAAABaQkBAAAACnF1b3RlQXNzZXQAAAAABQAAAANuaWwAAAAMAAAAAWkBAAAABXBhdXNlAAAAAAMJAQAAAAIhPQAAAAIIBQAAAAFpAAAABmNhbGxlcgkBAAAADGFkbWluQWRkcmVzcwAAAAAJAAACAAAAAQIAAAAaSW52YWxpZCB0b2dnbGVQYXVzZSBwYXJhbXMJAARMAAAAAgkBAAAADEJvb2xlYW5FbnRyeQAAAAIFAAAACGtfcGF1c2VkBgUAAAADbmlsAAAAAWkBAAAAB3VucGF1c2UAAAAAAwkBAAAAAiE9AAAAAggFAAAAAWkAAAAGY2FsbGVyCQEAAAAMYWRtaW5BZGRyZXNzAAAAAAkAAAIAAAABAgAAABpJbnZhbGlkIHRvZ2dsZVBhdXNlIHBhcmFtcwkABEwAAAACCQEAAAAMQm9vbGVhbkVudHJ5AAAAAgUAAAAIa19wYXVzZWQHBQAAAANuaWwAAAABaQEAAAAOY2hhbmdlU2V0dGluZ3MAAAAHAAAAEF9pbml0TWFyZ2luUmF0aW8AAAAEX21tcgAAABRfbGlxdWlkYXRpb25GZWVSYXRpbwAAAA5fZnVuZGluZ1BlcmlvZAAAAARfZmVlAAAADF9zcHJlYWRMaW1pdAAAAA9fbWF4UHJpY2VJbXBhY3QDCQEAAAACIT0AAAACCAUAAAABaQAAAAZjYWxsZXIJAQAAAAxhZG1pbkFkZHJlc3MAAAAACQAAAgAAAAECAAAAHUludmFsaWQgY2hhbmdlU2V0dGluZ3MgcGFyYW1zCQEAAAAOdXBkYXRlU2V0dGluZ3MAAAAHBQAAABBfaW5pdE1hcmdpblJhdGlvBQAAAARfbW1yBQAAABRfbGlxdWlkYXRpb25GZWVSYXRpbwUAAAAOX2Z1bmRpbmdQZXJpb2QFAAAABF9mZWUFAAAADF9zcHJlYWRMaW1pdAUAAAAPX21heFByaWNlSW1wYWN0AAAAAWkBAAAACmluaXRpYWxpemUAAAAMAAAAB19xdEFzdFIAAAAHX2JzQXN0UgAAAA5fZnVuZGluZ1BlcmlvZAAAABBfaW5pdE1hcmdpblJhdGlvAAAABF9tbXIAAAAUX2xpcXVpZGF0aW9uRmVlUmF0aW8AAAAEX2ZlZQAAAAdfb3JhY2xlAAAACl9vcmFjbGVLZXkAAAAMX2Nvb3JkaW5hdG9yAAAADF9zcHJlYWRMaW1pdAAAAA9fbWF4UHJpY2VJbXBhY3QDAwMDAwMDAwMDCQAAZwAAAAIAAAAAAAAAAAAFAAAAB19xdEFzdFIGCQAAZwAAAAIAAAAAAAAAAAAFAAAAB19ic0FzdFIGCQAAZwAAAAIAAAAAAAAAAAAFAAAADl9mdW5kaW5nUGVyaW9kBgkAAGcAAAACAAAAAAAAAAAABQAAABBfaW5pdE1hcmdpblJhdGlvBgkAAGcAAAACAAAAAAAAAAAABQAAAARfbW1yBgkAAGcAAAACAAAAAAAAAAAABQAAABRfbGlxdWlkYXRpb25GZWVSYXRpbwYJAABnAAAAAgAAAAAAAAAAAAUAAAAEX2ZlZQYJAABnAAAAAgAAAAAAAAAAAAUAAAAMX3NwcmVhZExpbWl0BgkAAGcAAAACAAAAAAAAAAAABQAAAA9fbWF4UHJpY2VJbXBhY3QGCQEAAAALaW5pdGlhbGl6ZWQAAAAACQAAAgAAAAECAAAAHUludmFsaWQgaW5pdGlhbGl6ZSBwYXJhbWV0ZXJzCQAETgAAAAIJAAROAAAAAgkABE4AAAACCQAETgAAAAIJAQAAAAl1cGRhdGVBbW0AAAAGBQAAAAdfcXRBc3RSBQAAAAdfYnNBc3RSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQEAAAAOdXBkYXRlU2V0dGluZ3MAAAAHBQAAABBfaW5pdE1hcmdpblJhdGlvBQAAAARfbW1yBQAAABRfbGlxdWlkYXRpb25GZWVSYXRpbwUAAAAOX2Z1bmRpbmdQZXJpb2QFAAAABF9mZWUFAAAADF9zcHJlYWRMaW1pdAUAAAAPX21heFByaWNlSW1wYWN0CQEAAAANdXBkYXRlRnVuZGluZwAAAAQAAAAAAAAAAAAJAABkAAAAAggFAAAACWxhc3RCbG9jawAAAAl0aW1lc3RhbXAFAAAADl9mdW5kaW5nUGVyaW9kAAAAAAAAAAAAAAAAAAAAAAAACQEAAAANdXBkYXRlQmFsYW5jZQAAAAEAAAAAAAAAAAAJAARMAAAAAgkBAAAADEJvb2xlYW5FbnRyeQAAAAIFAAAADWtfaW5pdGlhbGl6ZWQGCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAABWtfb3JhBQAAAAdfb3JhY2xlCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAACWtfb3JhX2tleQUAAAAKX29yYWNsZUtleQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAABRrX2Nvb3JkaW5hdG9yQWRkcmVzcwUAAAAMX2Nvb3JkaW5hdG9yBQAAAANuaWwAAAABaQEAAAAQZGVjcmVhc2VQb3NpdGlvbgAAAAQAAAAKX2RpcmVjdGlvbgAAAAdfYW1vdW50AAAACV9sZXZlcmFnZQAAABNfbWluQmFzZUFzc2V0QW1vdW50AwMDAwMDAwkBAAAAAiE9AAAAAgUAAAAKX2RpcmVjdGlvbgUAAAAIRElSX0xPTkcJAQAAAAIhPQAAAAIFAAAACl9kaXJlY3Rpb24FAAAACURJUl9TSE9SVAcGCQAAZwAAAAIAAAAAAAAAAAAFAAAAB19hbW91bnQGAwkAAGYAAAACCQAAaAAAAAIAAAAAAAAAAAEFAAAADERFQ0lNQUxfVU5JVAUAAAAJX2xldmVyYWdlBgkAAGYAAAACBQAAAAlfbGV2ZXJhZ2UJAABoAAAAAgAAAAAAAAAAAwUAAAAMREVDSU1BTF9VTklUBgkBAAAAASEAAAABCQEAAAALaW5pdGlhbGl6ZWQAAAAABgkBAAAAASEAAAABCQEAAAAWcmVxdWlyZU1vcmVNYXJnaW5SYXRpbwAAAAMJAQAAAARkaXZkAAAAAgUAAAAMREVDSU1BTF9VTklUBQAAAAlfbGV2ZXJhZ2UJAQAAAA9pbml0TWFyZ2luUmF0aW8AAAAABgYJAQAAAAZwYXVzZWQAAAAACQAAAgAAAAECAAAAI0ludmFsaWQgZGVjcmVhc2VQb3NpdGlvbiBwYXJhbWV0ZXJzBAAAAA0kdDAyMzQ1OTIzNjExCQEAAAALZ2V0UG9zaXRpb24AAAABCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgQAAAAPb2xkUG9zaXRpb25TaXplCAUAAAANJHQwMjM0NTkyMzYxMQAAAAJfMQQAAAARb2xkUG9zaXRpb25NYXJnaW4IBQAAAA0kdDAyMzQ1OTIzNjExAAAAAl8yBAAAABdvbGRQb3NpdGlvbk9wZW5Ob3Rpb25hbAgFAAAADSR0MDIzNDU5MjM2MTEAAAACXzMEAAAAFG9sZFBvc2l0aW9uTHN0VXBkQ1BGCAUAAAANJHQwMjM0NTkyMzYxMQAAAAJfNAQAAAANaXNOZXdQb3NpdGlvbgkAAAAAAAACBQAAAA9vbGRQb3NpdGlvblNpemUAAAAAAAAAAAAEAAAAD2lzU2FtZURpcmVjdGlvbgMJAABmAAAAAgUAAAAPb2xkUG9zaXRpb25TaXplAAAAAAAAAAAACQAAAAAAAAIFAAAACl9kaXJlY3Rpb24FAAAACERJUl9MT05HCQAAAAAAAAIFAAAACl9kaXJlY3Rpb24FAAAACURJUl9TSE9SVAQAAAAOZXhwYW5kRXhpc3RpbmcDCQEAAAABIQAAAAEFAAAADWlzTmV3UG9zaXRpb24FAAAAD2lzU2FtZURpcmVjdGlvbgcEAAAABWlzQWRkCQAAAAAAAAIFAAAACl9kaXJlY3Rpb24FAAAACERJUl9MT05HBAAAAA0kdDAyMzkwMDI2Nzk4AwMFAAAADWlzTmV3UG9zaXRpb24GBQAAAA5leHBhbmRFeGlzdGluZwkAAAIAAAABAgAAADVVc2UgaW5jcmVhc2VQb3NpdGlvbiB0byBvcGVuIG5ldyBvciBpbmNyZWFzZSBwb3NpdGlvbgQAAAAMb3Blbk5vdGlvbmFsCQEAAAAEbXVsZAAAAAIFAAAAB19hbW91bnQFAAAACV9sZXZlcmFnZQQAAAANJHQwMjQ0MDUyNDUyMQkBAAAAI2dldFBvc2l0aW9uTm90aW9uYWxBbmRVbnJlYWxpemVkUG5sAAAAAgkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIFAAAAD1BOTF9PUFRJT05fU1BPVAQAAAATb2xkUG9zaXRpb25Ob3Rpb25hbAgFAAAADSR0MDI0NDA1MjQ1MjEAAAACXzEEAAAADXVucmVhbGl6ZWRQbmwIBQAAAA0kdDAyNDQwNTI0NTIxAAAAAl8yAwkAAGYAAAACBQAAABNvbGRQb3NpdGlvbk5vdGlvbmFsBQAAAAxvcGVuTm90aW9uYWwEAAAADSR0MDI0NTgzMjQ4NjMJAQAAAAlzd2FwSW5wdXQAAAACBQAAAAVpc0FkZAUAAAAMb3Blbk5vdGlvbmFsBAAAABVleGNoYW5nZWRQb3NpdGlvblNpemUIBQAAAA0kdDAyNDU4MzI0ODYzAAAAAl8xBAAAABZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyCAUAAAANJHQwMjQ1ODMyNDg2MwAAAAJfMgQAAAAVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyCAUAAAANJHQwMjQ1ODMyNDg2MwAAAAJfMwQAAAAkYmFzZUFzc2V0RGVsdGFUaGlzRnVuZGluZ1BlcmlvZEFmdGVyCAUAAAANJHQwMjQ1ODMyNDg2MwAAAAJfNAQAAAAWdG90YWxQb3NpdGlvblNpemVBZnRlcggFAAAADSR0MDI0NTgzMjQ4NjMAAAACXzUEAAAAF2N1bXVsYXRpdmVOb3Rpb25hbEFmdGVyCAUAAAANJHQwMjQ1ODMyNDg2MwAAAAJfNgQAAAAYZXhjaGFuZ2VkUG9zaXRpb25TaXplQWJzCQEAAAADYWJzAAAAAQUAAAAVZXhjaGFuZ2VkUG9zaXRpb25TaXplAwMJAQAAAAIhPQAAAAIFAAAAE19taW5CYXNlQXNzZXRBbW91bnQAAAAAAAAAAAAJAABmAAAAAgUAAAATX21pbkJhc2VBc3NldEFtb3VudAUAAAAYZXhjaGFuZ2VkUG9zaXRpb25TaXplQWJzBwkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAACZUb28gbGl0dGxlIGJhc3NlIGFzc2V0IGV4Y2hhbmdlZCwgZ290IAkAAaQAAAABBQAAABhleGNoYW5nZWRQb3NpdGlvblNpemVBYnMCAAAACiBleHBlY3RlZCAJAAGkAAAAAQUAAAATX21pbkJhc2VBc3NldEFtb3VudAQAAAALcmVhbGl6ZWRQbmwDCQEAAAACIT0AAAACBQAAAA9vbGRQb3NpdGlvblNpemUAAAAAAAAAAAAJAQAAAARkaXZkAAAAAgkBAAAABG11bGQAAAACBQAAAA11bnJlYWxpemVkUG5sBQAAABhleGNoYW5nZWRQb3NpdGlvblNpemVBYnMFAAAAD29sZFBvc2l0aW9uU2l6ZQAAAAAAAAAAAAQAAAANJHQwMjU0MDQyNTY3NQkBAAAAImNhbGNSZW1haW5NYXJnaW5XaXRoRnVuZGluZ1BheW1lbnQAAAAEBQAAAA9vbGRQb3NpdGlvblNpemUFAAAAEW9sZFBvc2l0aW9uTWFyZ2luBQAAABRvbGRQb3NpdGlvbkxzdFVwZENQRgUAAAALcmVhbGl6ZWRQbmwEAAAADHJlbWFpbk1hcmdpbggFAAAADSR0MDI1NDA0MjU2NzUAAAACXzEEAAAAB2JhZERlYnQIBQAAAA0kdDAyNTQwNDI1Njc1AAAAAl8yBAAAAA5mdW5kaW5nUGF5bWVudAgFAAAADSR0MDI1NDA0MjU2NzUAAAACXzMEAAAADG9sZExhdGVzdENQRggFAAAADSR0MDI1NDA0MjU2NzUAAAACXzQEAAAAGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQFAAAADG9wZW5Ob3Rpb25hbAQAAAASdW5yZWFsaXplZFBubEFmdGVyCQAAZQAAAAIFAAAADXVucmVhbGl6ZWRQbmwFAAAAC3JlYWxpemVkUG5sBAAAABJyZW1haW5PcGVuTm90aW9uYWwDCQAAZgAAAAIFAAAAD29sZFBvc2l0aW9uU2l6ZQAAAAAAAAAAAAkAAGUAAAACCQAAZQAAAAIFAAAAE29sZFBvc2l0aW9uTm90aW9uYWwFAAAAGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQFAAAAEnVucmVhbGl6ZWRQbmxBZnRlcgkAAGUAAAACCQAAZAAAAAIFAAAAEnVucmVhbGl6ZWRQbmxBZnRlcgUAAAATb2xkUG9zaXRpb25Ob3Rpb25hbAUAAAAZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAkABRwAAAAKCQAAZAAAAAIFAAAAD29sZFBvc2l0aW9uU2l6ZQUAAAAVZXhjaGFuZ2VkUG9zaXRpb25TaXplBQAAAAxyZW1haW5NYXJnaW4JAQAAAANhYnMAAAABBQAAABJyZW1haW5PcGVuTm90aW9uYWwFAAAADG9sZExhdGVzdENQRgUAAAAVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyBQAAABZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyBQAAACRiYXNlQXNzZXREZWx0YVRoaXNGdW5kaW5nUGVyaW9kQWZ0ZXIFAAAAFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIFAAAAF2N1bXVsYXRpdmVOb3Rpb25hbEFmdGVyCQAAZQAAAAIJAQAAABVvcGVuSW50ZXJlc2V0Tm90aW9uYWwAAAAABQAAAAxvcGVuTm90aW9uYWwJAAACAAAAAQIAAAAUQ2xvc2UgcG9zaXRpb24gZmlyc3QEAAAAD25ld1Bvc2l0aW9uU2l6ZQgFAAAADSR0MDIzOTAwMjY3OTgAAAACXzEEAAAAF25ld1Bvc2l0aW9uUmVtYWluTWFyZ2luCAUAAAANJHQwMjM5MDAyNjc5OAAAAAJfMgQAAAAWbmV3UG9zaWlvbk9wZW5Ob3Rpb25hbAgFAAAADSR0MDIzOTAwMjY3OTgAAAACXzMEAAAAFG5ld1Bvc2l0aW9uTGF0ZXN0Q1BGCAUAAAANJHQwMjM5MDAyNjc5OAAAAAJfNAQAAAAVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyCAUAAAANJHQwMjM5MDAyNjc5OAAAAAJfNQQAAAAWcXVvdGVBc3NldFJlc2VydmVBZnRlcggFAAAADSR0MDIzOTAwMjY3OTgAAAACXzYEAAAAJGJhc2VBc3NldERlbHRhVGhpc0Z1bmRpbmdQZXJpb2RBZnRlcggFAAAADSR0MDIzOTAwMjY3OTgAAAACXzcEAAAAFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIIBQAAAA0kdDAyMzkwMDI2Nzk4AAAAAl84BAAAABdjdW11bGF0aXZlTm90aW9uYWxBZnRlcggFAAAADSR0MDIzOTAwMjY3OTgAAAACXzkEAAAAGm9wZW5JbnRlcmVzZXROb3Rpb25hbEFmdGVyCAUAAAANJHQwMjM5MDAyNjc5OAAAAANfMTAJAAROAAAAAgkBAAAADnVwZGF0ZVBvc2l0aW9uAAAABQkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIFAAAAD25ld1Bvc2l0aW9uU2l6ZQUAAAAXbmV3UG9zaXRpb25SZW1haW5NYXJnaW4FAAAAFm5ld1Bvc2lpb25PcGVuTm90aW9uYWwFAAAAFG5ld1Bvc2l0aW9uTGF0ZXN0Q1BGCQEAAAAJdXBkYXRlQW1tAAAABgUAAAAWcXVvdGVBc3NldFJlc2VydmVBZnRlcgUAAAAVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyBQAAACRiYXNlQXNzZXREZWx0YVRoaXNGdW5kaW5nUGVyaW9kQWZ0ZXIFAAAAFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIFAAAAF2N1bXVsYXRpdmVOb3Rpb25hbEFmdGVyBQAAABpvcGVuSW50ZXJlc2V0Tm90aW9uYWxBZnRlcgAAAAFpAQAAABBpbmNyZWFzZVBvc2l0aW9uAAAAAwAAAApfZGlyZWN0aW9uAAAACV9sZXZlcmFnZQAAABNfbWluQmFzZUFzc2V0QW1vdW50BAAAAApfcmF3QW1vdW50CAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAZhbW91bnQDAwMDAwMDAwkBAAAAAiE9AAAAAgUAAAAKX2RpcmVjdGlvbgUAAAAIRElSX0xPTkcJAQAAAAIhPQAAAAIFAAAACl9kaXJlY3Rpb24FAAAACURJUl9TSE9SVAcGCQAAZwAAAAIAAAAAAAAAAAAFAAAACl9yYXdBbW91bnQGAwkAAGYAAAACCQAAaAAAAAIAAAAAAAAAAAEFAAAADERFQ0lNQUxfVU5JVAUAAAAJX2xldmVyYWdlBgkAAGYAAAACBQAAAAlfbGV2ZXJhZ2UJAABoAAAAAgAAAAAAAAAAAwUAAAAMREVDSU1BTF9VTklUBgkBAAAAASEAAAABCQEAAAALaW5pdGlhbGl6ZWQAAAAABgkBAAAAAiE9AAAAAggJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAHYXNzZXRJZAkBAAAACnF1b3RlQXNzZXQAAAAABgkBAAAAASEAAAABCQEAAAAWcmVxdWlyZU1vcmVNYXJnaW5SYXRpbwAAAAMJAQAAAARkaXZkAAAAAgUAAAAMREVDSU1BTF9VTklUBQAAAAlfbGV2ZXJhZ2UJAQAAAA9pbml0TWFyZ2luUmF0aW8AAAAABgYJAQAAAAZwYXVzZWQAAAAACQAAAgAAAAECAAAAI0ludmFsaWQgaW5jcmVhc2VQb3NpdGlvbiBwYXJhbWV0ZXJzBAAAAAlmZWVBbW91bnQJAQAAAARtdWxkAAAAAgUAAAAKX3Jhd0Ftb3VudAkBAAAAA2ZlZQAAAAAEAAAAB19hbW91bnQJAABlAAAAAgUAAAAKX3Jhd0Ftb3VudAUAAAAJZmVlQW1vdW50BAAAAA0kdDAyNzgzMzI3OTg1CQEAAAALZ2V0UG9zaXRpb24AAAABCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgQAAAAPb2xkUG9zaXRpb25TaXplCAUAAAANJHQwMjc4MzMyNzk4NQAAAAJfMQQAAAARb2xkUG9zaXRpb25NYXJnaW4IBQAAAA0kdDAyNzgzMzI3OTg1AAAAAl8yBAAAABdvbGRQb3NpdGlvbk9wZW5Ob3Rpb25hbAgFAAAADSR0MDI3ODMzMjc5ODUAAAACXzMEAAAAFG9sZFBvc2l0aW9uTHN0VXBkQ1BGCAUAAAANJHQwMjc4MzMyNzk4NQAAAAJfNAQAAAANaXNOZXdQb3NpdGlvbgkAAAAAAAACBQAAAA9vbGRQb3NpdGlvblNpemUAAAAAAAAAAAAEAAAAD2lzU2FtZURpcmVjdGlvbgMJAABmAAAAAgUAAAAPb2xkUG9zaXRpb25TaXplAAAAAAAAAAAACQAAAAAAAAIFAAAACl9kaXJlY3Rpb24FAAAACERJUl9MT05HCQAAAAAAAAIFAAAACl9kaXJlY3Rpb24FAAAACURJUl9TSE9SVAQAAAAOZXhwYW5kRXhpc3RpbmcDCQEAAAABIQAAAAEFAAAADWlzTmV3UG9zaXRpb24FAAAAD2lzU2FtZURpcmVjdGlvbgcEAAAABWlzQWRkCQAAAAAAAAIFAAAACl9kaXJlY3Rpb24FAAAACERJUl9MT05HBAAAAA0kdDAyODI3NDMwNTYzAwMFAAAADWlzTmV3UG9zaXRpb24GBQAAAA5leHBhbmRFeGlzdGluZwQAAAAMb3Blbk5vdGlvbmFsCQEAAAAEbXVsZAAAAAIFAAAAB19hbW91bnQFAAAACV9sZXZlcmFnZQQAAAANJHQwMjg2OTcyODk0OQkBAAAACXN3YXBJbnB1dAAAAAIFAAAABWlzQWRkBQAAAAxvcGVuTm90aW9uYWwEAAAAFWFtb3VudEJhc2VBc3NldEJvdWdodAgFAAAADSR0MDI4Njk3Mjg5NDkAAAACXzEEAAAAFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIIBQAAAA0kdDAyODY5NzI4OTQ5AAAAAl8yBAAAABViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIIBQAAAA0kdDAyODY5NzI4OTQ5AAAAAl8zBAAAACRiYXNlQXNzZXREZWx0YVRoaXNGdW5kaW5nUGVyaW9kQWZ0ZXIIBQAAAA0kdDAyODY5NzI4OTQ5AAAAAl80BAAAABZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCAUAAAANJHQwMjg2OTcyODk0OQAAAAJfNQQAAAAXY3VtdWxhdGl2ZU5vdGlvbmFsQWZ0ZXIIBQAAAA0kdDAyODY5NzI4OTQ5AAAAAl82AwMJAQAAAAIhPQAAAAIFAAAAE19taW5CYXNlQXNzZXRBbW91bnQAAAAAAAAAAAAJAABmAAAAAgUAAAATX21pbkJhc2VBc3NldEFtb3VudAkBAAAAA2FicwAAAAEFAAAAFWFtb3VudEJhc2VBc3NldEJvdWdodAcJAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAANTGltaXQgZXJyb3I6IAkAAaQAAAABCQEAAAADYWJzAAAAAQUAAAAVYW1vdW50QmFzZUFzc2V0Qm91Z2h0AgAAAAMgPCAJAAGkAAAAAQUAAAATX21pbkJhc2VBc3NldEFtb3VudAQAAAAPbmV3UG9zaXRpb25TaXplCQAAZAAAAAIFAAAAD29sZFBvc2l0aW9uU2l6ZQUAAAAVYW1vdW50QmFzZUFzc2V0Qm91Z2h0BAAAABlpbmNyZWFzZU1hcmdpblJlcXVpcmVtZW50CQEAAAAEZGl2ZAAAAAIFAAAADG9wZW5Ob3Rpb25hbAUAAAAJX2xldmVyYWdlBAAAAA0kdDAyOTMzMDI5NTgzCQEAAAAiY2FsY1JlbWFpbk1hcmdpbldpdGhGdW5kaW5nUGF5bWVudAAAAAQFAAAAD29sZFBvc2l0aW9uU2l6ZQUAAAARb2xkUG9zaXRpb25NYXJnaW4FAAAAFG9sZFBvc2l0aW9uTHN0VXBkQ1BGBQAAABlpbmNyZWFzZU1hcmdpblJlcXVpcmVtZW50BAAAAAxyZW1haW5NYXJnaW4IBQAAAA0kdDAyOTMzMDI5NTgzAAAAAl8xBAAAAAJ4MQgFAAAADSR0MDI5MzMwMjk1ODMAAAACXzIEAAAAAngyCAUAAAANJHQwMjkzMzAyOTU4MwAAAAJfMwQAAAAMb2xkTGF0ZXN0Q1BGCAUAAAANJHQwMjkzMzAyOTU4MwAAAAJfNAkABRwAAAAKBQAAAA9uZXdQb3NpdGlvblNpemUFAAAADHJlbWFpbk1hcmdpbgkAAGQAAAACBQAAABdvbGRQb3NpdGlvbk9wZW5Ob3Rpb25hbAUAAAAMb3Blbk5vdGlvbmFsBQAAAAxvbGRMYXRlc3RDUEYFAAAAFWJhc2VBc3NldFJlc2VydmVBZnRlcgUAAAAWcXVvdGVBc3NldFJlc2VydmVBZnRlcgUAAAAkYmFzZUFzc2V0RGVsdGFUaGlzRnVuZGluZ1BlcmlvZEFmdGVyBQAAABZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyBQAAABdjdW11bGF0aXZlTm90aW9uYWxBZnRlcgkAAGQAAAACCQEAAAAVb3BlbkludGVyZXNldE5vdGlvbmFsAAAAAAUAAAAMb3Blbk5vdGlvbmFsBAAAAAxvcGVuTm90aW9uYWwJAQAAAARtdWxkAAAAAgUAAAAHX2Ftb3VudAUAAAAJX2xldmVyYWdlBAAAAA0kdDAzMDI1NjMwMzcyCQEAAAAjZ2V0UG9zaXRpb25Ob3Rpb25hbEFuZFVucmVhbGl6ZWRQbmwAAAACCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgUAAAAPUE5MX09QVElPTl9TUE9UBAAAABNvbGRQb3NpdGlvbk5vdGlvbmFsCAUAAAANJHQwMzAyNTYzMDM3MgAAAAJfMQQAAAANdW5yZWFsaXplZFBubAgFAAAADSR0MDMwMjU2MzAzNzIAAAACXzIDCQAAZgAAAAIFAAAAE29sZFBvc2l0aW9uTm90aW9uYWwFAAAADG9wZW5Ob3Rpb25hbAkAAAIAAAABAgAAAC5Vc2UgZGVjcmVhc2VQb3NpdGlvbiB0byBkZWNyZWFzZSBwb3NpdGlvbiBzaXplCQAAAgAAAAECAAAAFENsb3NlIHBvc2l0aW9uIGZpcnN0BAAAAA9uZXdQb3NpdGlvblNpemUIBQAAAA0kdDAyODI3NDMwNTYzAAAAAl8xBAAAABduZXdQb3NpdGlvblJlbWFpbk1hcmdpbggFAAAADSR0MDI4Mjc0MzA1NjMAAAACXzIEAAAAFm5ld1Bvc2lpb25PcGVuTm90aW9uYWwIBQAAAA0kdDAyODI3NDMwNTYzAAAAAl8zBAAAABRuZXdQb3NpdGlvbkxhdGVzdENQRggFAAAADSR0MDI4Mjc0MzA1NjMAAAACXzQEAAAAFWJhc2VBc3NldFJlc2VydmVBZnRlcggFAAAADSR0MDI4Mjc0MzA1NjMAAAACXzUEAAAAFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIIBQAAAA0kdDAyODI3NDMwNTYzAAAAAl82BAAAACRiYXNlQXNzZXREZWx0YVRoaXNGdW5kaW5nUGVyaW9kQWZ0ZXIIBQAAAA0kdDAyODI3NDMwNTYzAAAAAl83BAAAABZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCAUAAAANJHQwMjgyNzQzMDU2MwAAAAJfOAQAAAAXY3VtdWxhdGl2ZU5vdGlvbmFsQWZ0ZXIIBQAAAA0kdDAyODI3NDMwNTYzAAAAAl85BAAAABpvcGVuSW50ZXJlc2V0Tm90aW9uYWxBZnRlcggFAAAADSR0MDI4Mjc0MzA1NjMAAAADXzEwBAAAAAxmZWVUb1N0YWtlcnMJAABpAAAAAgUAAAAJZmVlQW1vdW50AAAAAAAAAAACBAAAAA5mZWVUb0luc3VyYW5jZQkAAGUAAAACBQAAAAlmZWVBbW91bnQFAAAADGZlZVRvU3Rha2VycwQAAAAFc3Rha2UJAAP8AAAABAkBAAAAEXF1b3RlQXNzZXRTdGFraW5nAAAAAAIAAAAObG9ja05ldXRyaW5vU1AJAARMAAAAAgkABCUAAAABCQEAAAAOc3Rha2luZ0FkZHJlc3MAAAAACQAETAAAAAIFAAAACEFMTF9GRUVTBQAAAANuaWwJAARMAAAAAgkBAAAAD0F0dGFjaGVkUGF5bWVudAAAAAIJAQAAAApxdW90ZUFzc2V0AAAAAAUAAAAHX2Ftb3VudAUAAAADbmlsAwkAAAAAAAACBQAAAAVzdGFrZQUAAAAFc3Rha2UEAAAAEGRlcG9zaXRJbnN1cmFuY2UJAAP8AAAABAkBAAAAEGluc3VyYW5jZUFkZHJlc3MAAAAAAgAAAAdkZXBvc2l0BQAAAANuaWwJAARMAAAAAgkBAAAAD0F0dGFjaGVkUGF5bWVudAAAAAIJAQAAAApxdW90ZUFzc2V0AAAAAAUAAAAOZmVlVG9JbnN1cmFuY2UFAAAAA25pbAMJAAAAAAAAAgUAAAAQZGVwb3NpdEluc3VyYW5jZQUAAAAQZGVwb3NpdEluc3VyYW5jZQkABE4AAAACCQAETgAAAAIJAAROAAAAAgkBAAAADnVwZGF0ZVBvc2l0aW9uAAAABQkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIFAAAAD25ld1Bvc2l0aW9uU2l6ZQUAAAAXbmV3UG9zaXRpb25SZW1haW5NYXJnaW4FAAAAFm5ld1Bvc2lpb25PcGVuTm90aW9uYWwFAAAAFG5ld1Bvc2l0aW9uTGF0ZXN0Q1BGCQEAAAAJdXBkYXRlQW1tAAAABgUAAAAWcXVvdGVBc3NldFJlc2VydmVBZnRlcgUAAAAVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyBQAAACRiYXNlQXNzZXREZWx0YVRoaXNGdW5kaW5nUGVyaW9kQWZ0ZXIFAAAAFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIFAAAAF2N1bXVsYXRpdmVOb3Rpb25hbEFmdGVyBQAAABpvcGVuSW50ZXJlc2V0Tm90aW9uYWxBZnRlcgkBAAAAC3RyYW5zZmVyRmVlAAAAAQUAAAAMZmVlVG9TdGFrZXJzCQEAAAANdXBkYXRlQmFsYW5jZQAAAAEJAABkAAAAAgkBAAAACGNiYWxhbmNlAAAAAAUAAAAHX2Ftb3VudAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0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ASEAAAABCQEAAAALaW5pdGlhbGl6ZWQAAAAABgkBAAAABnBhdXNlZAAAAAAJAAACAAAAAQIAAAAfSW52YWxpZCByZW1vdmVNYXJnaW4gcGFyYW1ldGVycwQAAAANJHQwMzI5MjMzMzA3NQkBAAAAC2dldFBvc2l0aW9uAAAAAQkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIEAAAAD29sZFBvc2l0aW9uU2l6ZQgFAAAADSR0MDMyOTIzMzMwNzUAAAACXzEEAAAAEW9sZFBvc2l0aW9uTWFyZ2luCAUAAAANJHQwMzI5MjMzMzA3NQAAAAJfMgQAAAAXb2xkUG9zaXRpb25PcGVuTm90aW9uYWwIBQAAAA0kdDAzMjkyMzMzMDc1AAAAAl8zBAAAABRvbGRQb3NpdGlvbkxzdFVwZENQRggFAAAADSR0MDMyOTIzMzMwNzUAAAACXzQEAAAAC21hcmdpbkRlbHRhCQEAAAABLQAAAAEFAAAAB19hbW91bnQEAAAADSR0MDMzMTEyMzMzMDcJAQAAACJjYWxjUmVtYWluTWFyZ2luV2l0aEZ1bmRpbmdQYXltZW50AAAABAUAAAAPb2xkUG9zaXRpb25TaXplBQAAABFvbGRQb3NpdGlvbk1hcmdpbgUAAAAUb2xkUG9zaXRpb25Mc3RVcGRDUEYFAAAAC21hcmdpbkRlbHRhBAAAAAxyZW1haW5NYXJnaW4IBQAAAA0kdDAzMzExMjMzMzA3AAAAAl8xBAAAAAdiYWREZWJ0CAUAAAANJHQwMzMxMTIzMzMwNwAAAAJfMgQAAAACeDEIBQAAAA0kdDAzMzExMjMzMzA3AAAAAl8zBAAAAApsYXRlc3RDUEYxCAUAAAANJHQwMzMxMTIzMzMwNwAAAAJfNAMJAQAAAAIhPQAAAAIFAAAAB2JhZERlYnQAAAAAAAAAAAAJAAACAAAAAQIAAAAbSW52YWxpZCBhZGRlZCBtYXJnaW4gYW1vdW50BAAAAAd1bnN0YWtlCQAD/AAAAAQJAQAAABFxdW90ZUFzc2V0U3Rha2luZwAAAAACAAAADnVubG9ja05ldXRyaW5vCQAETAAAAAIFAAAAB19hbW91bnQJAARMAAAAAgkAAlgAAAABCQEAAAAKcXVvdGVBc3NldAAAAAAFAAAAA25pbAUAAAADbmlsAwkAAAAAAAACBQAAAAd1bnN0YWtlBQAAAAd1bnN0YWtlCQAETgAAAAIJAAROAAAAAgkBAAAADnVwZGF0ZVBvc2l0aW9uAAAABQkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIFAAAAD29sZFBvc2l0aW9uU2l6ZQUAAAAMcmVtYWluTWFyZ2luBQAAABdvbGRQb3NpdGlvbk9wZW5Ob3Rpb25hbAUAAAAKbGF0ZXN0Q1BGMQkBAAAACHdpdGhkcmF3AAAAAggFAAAAAWkAAAAGY2FsbGVyBQAAAAdfYW1vdW50CQEAAAANdXBkYXRlQmFsYW5jZQAAAAEJAABlAAAAAgkBAAAACGNiYWxhbmNlAAAAAAUAAAAHX2Ftb3VudAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABaQEAAAANY2xvc2VQb3NpdGlvbgAAAAADAwMJAQAAAAEhAAAAAQkBAAAAE3JlcXVpcmVPcGVuUG9zaXRpb24AAAABCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgYJAQAAAAEhAAAAAQkBAAAAC2luaXRpYWxpemVkAAAAAAYJAQAAAAZwYXVzZWQAAAAACQAAAgAAAAECAAAAIEludmFsaWQgY2xvc2VQb3NpdGlvbiBwYXJhbWV0ZXJzBAAAAA0kdDAzNDAyOTM0Mzg3CQEAAAAVaW50ZXJuYWxDbG9zZVBvc2l0aW9uAAAAAQkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIEAAAAAngxCAUAAAANJHQwMzQwMjkzNDM4NwAAAAJfMQQAAAAHYmFkRGVidAgFAAAADSR0MDM0MDI5MzQzODcAAAACXzIEAAAAC3JlYWxpemVkUG5sCAUAAAANJHQwMzQwMjkzNDM4NwAAAAJfMwQAAAANbWFyZ2luVG9WYXVsdAgFAAAADSR0MDM0MDI5MzQzODcAAAACXzQEAAAAFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIIBQAAAA0kdDAzNDAyOTM0Mzg3AAAAAl81BAAAABViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIIBQAAAA0kdDAzNDAyOTM0Mzg3AAAAAl82BAAAACRiYXNlQXNzZXREZWx0YVRoaXNGdW5kaW5nUGVyaW9kQWZ0ZXIIBQAAAA0kdDAzNDAyOTM0Mzg3AAAAAl83BAAAABZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCAUAAAANJHQwMzQwMjkzNDM4NwAAAAJfOAQAAAAXY3VtdWxhdGl2ZU5vdGlvbmFsQWZ0ZXIIBQAAAA0kdDAzNDAyOTM0Mzg3AAAAAl85BAAAABpvcGVuSW50ZXJlc2V0Tm90aW9uYWxBZnRlcggFAAAADSR0MDM0MDI5MzQzODcAAAADXzEwAwkAAGYAAAACBQAAAAdiYWREZWJ0AAAAAAAAAAAACQAAAgAAAAECAAAAJlVuYWJsZSB0byBjbG9zZSBwb3NpdGlvbiB3aXRoIGJhZCBkZWJ0BAAAAA53aXRoZHJhd0Ftb3VudAkBAAAAA2FicwAAAAEFAAAADW1hcmdpblRvVmF1bHQEAAAAAmJkCQAAZQAAAAIJAQAAAAhjYmFsYW5jZQAAAAAFAAAADndpdGhkcmF3QW1vdW50BAAAAA0kdDAzNDU4MDM0Njc2AwkAAGYAAAACAAAAAAAAAAAABQAAAAJiZAkABRQAAAACAAAAAAAAAAAACQEAAAADYWJzAAAAAQUAAAACYmQJAAUUAAAAAgUAAAACYmQAAAAAAAAAAAAEAAAAAm5iCAUAAAANJHQwMzQ1ODAzNDY3NgAAAAJfMQQAAAAFZnJvbWkIBQAAAA0kdDAzNDU4MDM0Njc2AAAAAl8yBAAAAAF4AwkAAGYAAAACBQAAAAVmcm9taQAAAAAAAAAAAAQAAAARd2l0aGRyYXdJbnN1cmFuY2UJAAP8AAAABAkBAAAAEGluc3VyYW5jZUFkZHJlc3MAAAAAAgAAAAh3aXRoZHJhdwkABEwAAAACBQAAAAVmcm9taQUAAAADbmlsBQAAAANuaWwDCQAAAAAAAAIFAAAAEXdpdGhkcmF3SW5zdXJhbmNlBQAAABF3aXRoZHJhd0luc3VyYW5jZQUAAAADbmlsCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUAAAADbmlsAwkAAAAAAAACBQAAAAF4BQAAAAF4BAAAAAd1bnN0YWtlCQAD/AAAAAQJAQAAABFxdW90ZUFzc2V0U3Rha2luZwAAAAACAAAADnVubG9ja05ldXRyaW5vCQAETAAAAAIJAABlAAAAAgUAAAAOd2l0aGRyYXdBbW91bnQFAAAABWZyb21pCQAETAAAAAIJAAJYAAAAAQkBAAAACnF1b3RlQXNzZXQAAAAABQAAAANuaWwFAAAAA25pbAMJAAAAAAAAAgUAAAAHdW5zdGFrZQUAAAAHdW5zdGFrZQkABE4AAAACCQAETgAAAAIJAAROAAAAAgkBAAAADmRlbGV0ZVBvc2l0aW9uAAAAAQkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIJAQAAAAl1cGRhdGVBbW0AAAAGBQAAABZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyBQAAABViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIFAAAAJGJhc2VBc3NldERlbHRhVGhpc0Z1bmRpbmdQZXJpb2RBZnRlcgUAAAAWdG90YWxQb3NpdGlvblNpemVBZnRlcgUAAAAXY3VtdWxhdGl2ZU5vdGlvbmFsQWZ0ZXIFAAAAGm9wZW5JbnRlcmVzZXROb3Rpb25hbEFmdGVyCQEAAAAId2l0aGRyYXcAAAACCAUAAAABaQAAAAZjYWxsZXIFAAAADndpdGhkcmF3QW1vdW50CQEAAAANdXBkYXRlQmFsYW5jZQAAAAEFAAAAAm5iCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABaQEAAAAJbGlxdWlkYXRlAAAAAQAAAAdfdHJhZGVyBAAAAAttYXJnaW5SYXRpbwMJAQAAABZpc092ZXJGbHVjdHVhdGlvbkxpbWl0AAAAAAkBAAAAFmdldE1hcmdpblJhdGlvQnlPcHRpb24AAAACBQAAAAdfdHJhZGVyBQAAABFQTkxfT1BUSU9OX09SQUNMRQkBAAAAFmdldE1hcmdpblJhdGlvQnlPcHRpb24AAAACBQAAAAdfdHJhZGVyBQAAAA9QTkxfT1BUSU9OX1NQT1QDAwMJAQAAAAEhAAAAAQkBAAAAFnJlcXVpcmVNb3JlTWFyZ2luUmF0aW8AAAADBQAAAAttYXJnaW5SYXRpbwkBAAAAA21tcgAAAAAHBgkBAAAAASEAAAABCQEAAAALaW5pdGlhbGl6ZWQAAAAABgkBAAAABnBhdXNlZAAAAAAJAAACAAAAAQIAAAATVW5hYmxlIHRvIGxpcXVpZGF0ZQQAAAANJHQwMzU4NDgzNjE3OAkBAAAAFWludGVybmFsQ2xvc2VQb3NpdGlvbgAAAAEFAAAAB190cmFkZXIEAAAAAngxCAUAAAANJHQwMzU4NDgzNjE3OAAAAAJfMQQAAAAHYmFkRGVidAgFAAAADSR0MDM1ODQ4MzYxNzgAAAACXzIEAAAAAngyCAUAAAANJHQwMzU4NDgzNjE3OAAAAAJfMwQAAAANbWFyZ2luVG9WYXVsdAgFAAAADSR0MDM1ODQ4MzYxNzgAAAACXzQEAAAAFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIIBQAAAA0kdDAzNTg0ODM2MTc4AAAAAl81BAAAABViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIIBQAAAA0kdDAzNTg0ODM2MTc4AAAAAl82BAAAACRiYXNlQXNzZXREZWx0YVRoaXNGdW5kaW5nUGVyaW9kQWZ0ZXIIBQAAAA0kdDAzNTg0ODM2MTc4AAAAAl83BAAAABZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCAUAAAANJHQwMzU4NDgzNjE3OAAAAAJfOAQAAAAXY3VtdWxhdGl2ZU5vdGlvbmFsQWZ0ZXIIBQAAAA0kdDAzNTg0ODM2MTc4AAAAAl85BAAAABpvcGVuSW50ZXJlc2V0Tm90aW9uYWxBZnRlcggFAAAADSR0MDM1ODQ4MzYxNzgAAAADXzEwBAAAABlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50CAUAAAANJHQwMzU4NDgzNjE3OAAAAANfMTEEAAAAD2ZlZVRvTGlxdWlkYXRvcgkAAGkAAAACCQEAAAAEbXVsZAAAAAIFAAAAGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQJAQAAABNsaXF1aWRhdGlvbkZlZVJhdGlvAAAAAAAAAAAAAAAAAgQAAAANJHQwMzYyNjgzNjY3MgMJAABmAAAAAgUAAAAPZmVlVG9MaXF1aWRhdG9yBQAAAA1tYXJnaW5Ub1ZhdWx0CQAFFQAAAAMJAABlAAAAAgUAAAAPZmVlVG9MaXF1aWRhdG9yBQAAAA1tYXJnaW5Ub1ZhdWx0BQAAAA1tYXJnaW5Ub1ZhdWx0CQAAZQAAAAIJAABkAAAAAgUAAAAHYmFkRGVidAUAAAAPZmVlVG9MaXF1aWRhdG9yBQAAAA1tYXJnaW5Ub1ZhdWx0CQAFFQAAAAMAAAAAAAAAAAAJAABlAAAAAgUAAAANbWFyZ2luVG9WYXVsdAUAAAAPZmVlVG9MaXF1aWRhdG9yBQAAAAdiYWREZWJ0BAAAABJsaXF1aWRhdGlvbkJhZERlYnQIBQAAAA0kdDAzNjI2ODM2NjcyAAAAAl8xBAAAAAxyZW1haW5NYXJnaW4IBQAAAA0kdDAzNjI2ODM2NjcyAAAAAl8yBAAAAAx0b3RhbEJhZERlYnQIBQAAAA0kdDAzNjI2ODM2NjcyAAAAAl8zBAAAAAJiZAkAAGUAAAACCQEAAAAIY2JhbGFuY2UAAAAABQAAAA9mZWVUb0xpcXVpZGF0b3IEAAAADSR0MDM2NzIwMzY4MDgDCQAAZgAAAAIAAAAAAAAAAAAFAAAAAmJkCQAFFAAAAAIAAAAAAAAAAAAJAQAAAANhYnMAAAABBQAAAAJiZAkABRQAAAACBQAAAAJiZAAAAAAAAAAAAAQAAAACbmIIBQAAAA0kdDAzNjcyMDM2ODA4AAAAAl8xBAAAAAVmcm9taQgFAAAADSR0MDM2NzIwMzY4MDgAAAACXzIEAAAAAXgDCQAAZgAAAAIFAAAABWZyb21pAAAAAAAAAAAABAAAABF3aXRoZHJhd0luc3VyYW5jZQkAA/wAAAAECQEAAAAQaW5zdXJhbmNlQWRkcmVzcwAAAAACAAAACHdpdGhkcmF3CQAETAAAAAIFAAAABWZyb21pBQAAAANuaWwFAAAAA25pbAMJAAAAAAAAAgUAAAARd2l0aGRyYXdJbnN1cmFuY2UFAAAAEXdpdGhkcmF3SW5zdXJhbmNlBQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQAAAANuaWwDCQAAAAAAAAIFAAAAAXgFAAAAAXgEAAAAB3Vuc3Rha2UJAAP8AAAABAkBAAAAEXF1b3RlQXNzZXRTdGFraW5nAAAAAAIAAAAOdW5sb2NrTmV1dHJpbm8JAARMAAAAAgkAAGUAAAACBQAAAA9mZWVUb0xpcXVpZGF0b3IFAAAABWZyb21pCQAETAAAAAIJAAJYAAAAAQkBAAAACnF1b3RlQXNzZXQAAAAABQAAAANuaWwFAAAAA25pbAMJAAAAAAAAAgUAAAAHdW5zdGFrZQUAAAAHdW5zdGFrZQkABE4AAAACCQAETgAAAAIJAAROAAAAAgkBAAAADmRlbGV0ZVBvc2l0aW9uAAAAAQUAAAAHX3RyYWRlcgkBAAAACXVwZGF0ZUFtbQAAAAYFAAAAFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIFAAAAFWJhc2VBc3NldFJlc2VydmVBZnRlcgUAAAAkYmFzZUFzc2V0RGVsdGFUaGlzRnVuZGluZ1BlcmlvZEFmdGVyBQAAABZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyBQAAABdjdW11bGF0aXZlTm90aW9uYWxBZnRlcgUAAAAab3BlbkludGVyZXNldE5vdGlvbmFsQWZ0ZXIJAQAAAAh3aXRoZHJhdwAAAAIIBQAAAAFpAAAABmNhbGxlcgUAAAAPZmVlVG9MaXF1aWRhdG9yCQEAAAANdXBkYXRlQmFsYW5jZQAAAAEFAAAAAm5iCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABaQEAAAAKcGF5RnVuZGluZwAAAAAEAAAAFWZ1bmRpbmdCbG9ja1RpbWVzdGFtcAkBAAAAGW5leHRGdW5kaW5nQmxvY2tUaW1lc3RhbXAAAAAAAwMDCQAAZgAAAAIFAAAAFWZ1bmRpbmdCbG9ja1RpbWVzdGFtcAgFAAAACWxhc3RCbG9jawAAAAl0aW1lc3RhbXAGCQEAAAABIQAAAAEJAQAAAAtpbml0aWFsaXplZAAAAAAGCQEAAAAGcGF1c2VkAAAAAAkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAACFJbnZhbGlkIGZ1bmRpbmcgYmxvY2sgdGltZXN0YW1wOiAJAAGkAAAAAQgFAAAACWxhc3RCbG9jawAAAAl0aW1lc3RhbXACAAAAAyA8IAkAAaQAAAABBQAAABVmdW5kaW5nQmxvY2tUaW1lc3RhbXAEAAAAD3VuZGVybHlpbmdQcmljZQkBAAAAEmdldE9yYWNsZVR3YXBQcmljZQAAAAAEAAAADXNwb3RUd2FwUHJpY2UJAQAAABBnZXRUd2FwU3BvdFByaWNlAAAAAAQAAAAHcHJlbWl1bQkAAGUAAAACBQAAAA1zcG90VHdhcFByaWNlBQAAAA91bmRlcmx5aW5nUHJpY2UEAAAAD3ByZW1pdW1GcmFjdGlvbgkBAAAABGRpdmQAAAACCQEAAAAEbXVsZAAAAAIFAAAAB3ByZW1pdW0JAQAAABRmdW5kaW5nUGVyaW9kRGVjaW1hbAAAAAAFAAAAB09ORV9EQVkJAQAAAA11cGRhdGVGdW5kaW5nAAAABAAAAAAAAAAAAAkAAGQAAAACBQAAABVmdW5kaW5nQmxvY2tUaW1lc3RhbXAJAQAAABRmdW5kaW5nUGVyaW9kU2Vjb25kcwAAAAAJAABkAAAAAgkBAAAACWxhdGVzdENQRgAAAAAFAAAAD3ByZW1pdW1GcmFjdGlvbgkBAAAABGRpdmQAAAACBQAAAA9wcmVtaXVtRnJhY3Rpb24FAAAAD3VuZGVybHlpbmdQcmljZQAAAAFpAQAAAAV2X2dldAAAAAEAAAAHX3RyYWRlcgQAAAANJHQwMzgyODIzODMzNQkBAAAAFWludGVybmFsQ2xvc2VQb3NpdGlvbgAAAAEFAAAAB190cmFkZXIEAAAAAngxCAUAAAANJHQwMzgyODIzODMzNQAAAAJfMQQAAAACeDIIBQAAAA0kdDAzODI4MjM4MzM1AAAAAl8yBAAAAAJ4MwgFAAAADSR0MDM4MjgyMzgzMzUAAAACXzMEAAAAAng0CAUAAAANJHQwMzgyODIzODMzNQAAAAJfNAkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQEAAAABcwAAAAEFAAAAAngyCQEAAAABcwAAAAEFAAAAAngzCQEAAAABcwAAAAEFAAAAAng0CQEAAAABcwAAAAEJAQAAAA5nZXRNYXJnaW5SYXRpbwAAAAEFAAAAB190cmFkZXIAAAABAAAAAnR4AQAAAAZ2ZXJpZnkAAAAACQAB9AAAAAMIBQAAAAJ0eAAAAAlib2R5Qnl0ZXMJAAGRAAAAAggFAAAAAnR4AAAABnByb29mcwAAAAAAAAAAAAkBAAAADmFkbWluUHVibGljS2V5AAAAAI/h53Q=", "height": 2116141, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 6k3u1m9eQ9qmhJqpkwfX6KXEsDnZLfBztF2Rvw238Ht8 Next: 8wPJuhUvPX4ievTjioZtpy9cWoNCoquJADKrfpRjydjp Diff:
OldNewDifferences
4343
4444 let u = "k_twap"
4545
46-let v = "k_latestPremiumFraction"
46+let v = "k_baseAssetDelta"
4747
48-let w = "k_nextFundingBlockMinTimestamp"
48+let w = "k_latestPremiumFraction"
4949
50-let x = "k_fundingRate"
50+let x = "k_nextFundingBlockMinTimestamp"
5151
52-let y = "k_qtAstR"
52+let y = "k_fundingRate"
5353
54-let z = "k_bsAstR"
54+let z = "k_qtAstR"
5555
56-let A = "k_baseAssetDelta"
56+let A = "k_bsAstR"
5757
58-let B = "k_totalPositionSize"
58+let B = "k_baseAssetDelta"
5959
60-let C = "k_cumulativeNotional"
60+let C = "k_totalPositionSize"
6161
62-let D = "k_openInteresetNotional"
62+let D = "k_cumulativeNotional"
6363
64-let E = "k_coordinatorAddress"
64+let E = "k_openInteresetNotional"
6565
66-let F = "k_insurance_address"
66+let F = "k_coordinatorAddress"
6767
68-let G = "k_admin_address"
68+let G = "k_insurance_address"
6969
70-let H = "k_admin_public_key"
70+let H = "k_admin_address"
7171
72-let I = "k_quote_asset"
72+let I = "k_admin_public_key"
7373
74-let J = "k_quote_staking"
74+let J = "k_quote_asset"
7575
76-let K = "k_staking_address"
76+let K = "k_quote_staking"
7777
78-func L () = valueOrErrorMessage(addressFromString(getStringValue(this, E)), "Coordinator not set")
78+let L = "k_staking_address"
79+
80+func M () = valueOrErrorMessage(addressFromString(getStringValue(this, F)), "Coordinator not set")
7981
8082
81-func M () = addressFromString(getStringValue(L(), G))
83+func N () = addressFromString(getStringValue(M(), H))
8284
8385
84-func N () = fromBase58String(getStringValue(L(), H))
86+func O () = fromBase58String(getStringValue(M(), I))
8587
8688
87-func O () = fromBase58String(getStringValue(L(), I))
89+func P () = fromBase58String(getStringValue(M(), J))
8890
8991
90-func P () = valueOrErrorMessage(addressFromString(getStringValue(L(), J)), "Quote assete staking not set")
92+func Q () = valueOrErrorMessage(addressFromString(getStringValue(M(), K)), "Quote assete staking not set")
9193
9294
93-func Q () = valueOrErrorMessage(addressFromString(getStringValue(L(), K)), "Insurance not set")
95+func R () = valueOrErrorMessage(addressFromString(getStringValue(M(), L)), "Insurance not set")
9496
9597
96-func R () = valueOrErrorMessage(addressFromString(getStringValue(L(), F)), "Insurance not set")
98+func S () = valueOrErrorMessage(addressFromString(getStringValue(M(), G)), "Insurance not set")
9799
98100
99-let S = 1
101+let T = 1
100102
101-let T = 2
103+let U = 2
102104
103-let U = 60
105+let V = 60
104106
105-let V = 15
107+let W = 15
106108
107-let W = 1000
109+let X = 1000
108110
109-let X = (1 * (((((10 * 10) * 10) * 10) * 10) * 10))
111+let Y = (1 * (((((10 * 10) * 10) * 10) * 10) * 10))
110112
111-let Y = (86400 * X)
113+let Z = (86400 * Y)
112114
113-let Z = 100
115+let aa = 100
114116
115-let aa = 1
117+let ab = 1
116118
117-let ab = 2
119+let ac = 2
118120
119-func ac (ad) = (toString(ad) + ",")
121+func ad (ae) = (toString(ae) + ",")
120122
121123
122-func ae (ad,af) = fraction(ad, X, af, HALFEVEN)
124+func af (ae,ag) = fraction(ae, Y, ag, HALFEVEN)
123125
124126
125-func ag (ad,af) = fraction(ad, af, X, HALFEVEN)
127+func ah (ae,ag) = fraction(ae, ag, Y, HALFEVEN)
126128
127129
128-func ah (ad) = if ((ad > 0))
129- then ad
130- else -(ad)
130+func ai (ae) = if ((ae > 0))
131+ then ae
132+ else -(ae)
131133
132134
133-func ai (aj,ak) = ((aj + "_") + ak)
135+func aj (ak,al) = ((ak + "_") + al)
134136
135137
136-func al (am,an,ao) = {
137- let ap = (am - an)
138- if (if (ao)
139- then (0 > ap)
138+func am (an,ao,ap) = {
139+ let aq = (an - ao)
140+ if (if (ap)
141+ then (0 > aq)
140142 else false)
141143 then throw("Invalid margin")
142- else if (if (!(ao))
143- then (ap >= 0)
144+ else if (if (!(ap))
145+ then (aq >= 0)
144146 else false)
145147 then throw("Invalid margin")
146148 else true
147149 }
148150
149151
150-func aq (ar) = valueOrErrorMessage(getInteger(this, ar), ("no value for " + ar))
152+func ar (as) = valueOrErrorMessage(getInteger(this, as), ("no value for " + as))
151153
152154
153-func as () = aq(c)
155+func at () = ar(c)
154156
155157
156-func at () = aq(j)
158+func au () = ar(j)
157159
158160
159-func au () = aq(l)
161+func av () = ar(l)
160162
161163
162-func av () = aq(y)
164+func aw () = ar(z)
163165
164166
165-func aw () = aq(z)
167+func ax () = ar(A)
166168
167169
168-func ax () = aq(A)
170+func ay () = ar(v)
169171
170172
171-func ay () = aq(B)
173+func az () = ar(C)
172174
173175
174-func az () = aq(C)
176+func aA () = ar(D)
175177
176178
177-func aA () = aq(v)
179+func aB () = ar(w)
178180
179181
180-func aB () = aq(D)
182+func aC () = ar(E)
181183
182184
183-func aC () = aq(w)
185+func aD () = ar(x)
184186
185187
186-func aD () = aq(k)
188+func aE () = ar(k)
187189
188190
189-func aE () = (aD() * X)
191+func aF () = (aE() * Y)
190192
191193
192-func aF () = (aD() * W)
194+func aG () = (aE() * X)
193195
194196
195-func aG () = aq(m)
197+func aH () = ar(m)
196198
197199
198-func aH () = aq(n)
200+func aI () = ar(n)
199201
200202
201-func aI () = aq(o)
203+func aJ () = ar(o)
202204
203205
204-func aJ () = aq(p)
206+func aK () = ar(p)
205207
206208
207-func aK (aL) = {
208- let aM = getInteger(this, ai(d, aL))
209- let aN = aM
210- if ($isInstanceOf(aN, "Int"))
209+func aL (aM) = {
210+ let aN = getInteger(this, aj(d, aM))
211+ let aO = aN
212+ if ($isInstanceOf(aO, "Int"))
211213 then {
212- let aO = aN
213- $Tuple4(aO, getIntegerValue(this, ai(e, aL)), getIntegerValue(this, ai(f, aL)), getIntegerValue(this, ai(g, aL)))
214+ let aP = aO
215+ $Tuple4(aP, getIntegerValue(this, aj(e, aM)), getIntegerValue(this, aj(f, aM)), getIntegerValue(this, aj(g, aM)))
214216 }
215217 else $Tuple4(0, 0, 0, 0)
216218 }
217219
218220
219-func aP (aQ) = if ((aK(aQ)._1 == 0))
221+func aQ (aR) = if ((aL(aR)._1 == 0))
220222 then throw("No open position")
221223 else true
222224
223225
224-func aR () = valueOrElse(getBoolean(this, h), false)
226+func aS () = valueOrElse(getBoolean(this, h), false)
225227
226228
227-func aS () = valueOrElse(getBoolean(this, i), false)
229+func aT () = valueOrElse(getBoolean(this, i), false)
228230
229231
230-func aT (aU,aV,aW) = if (aU)
232+func aU (aV,aW,aX) = if (aV)
231233 then {
232- let aX = (aw() - aW)
233- if ((0 >= aX))
234+ let aY = (ax() - aX)
235+ if ((0 >= aY))
234236 then throw("Tx lead to base asset reserve <= 0, revert")
235- else $Tuple5((av() + aV), aX, (ax() - aW), (ay() + aW), (az() + aV))
237+ else $Tuple5((aw() + aW), aY, (ay() - aX), (az() + aX), (aA() + aW))
236238 }
237239 else {
238- let aY = (av() - aV)
239- if ((0 >= aY))
240+ let aZ = (aw() - aW)
241+ if ((0 >= aZ))
240242 then throw("Tx lead to base quote reserve <= 0, revert")
241- else $Tuple5(aY, (aw() + aW), (ax() + aW), (ay() - aW), (az() - aV))
243+ else $Tuple5(aZ, (ax() + aX), (ay() + aX), (az() - aX), (aA() - aW))
242244 }
243245
244246
245-func aZ (aU,aV) = {
246- let ba = av()
247+func ba (aV,aW) = {
247248 let bb = aw()
248- let bc = ae(ba, bb)
249- let bd = ag(aV, bc)
250- let ar = ag(ba, bb)
251- let be = if (aU)
252- then (ba + aV)
253- else (ba - aV)
254- let bf = ae(ar, be)
255- let bg = ah((bf - bb))
256- let bh = if (aU)
257- then bg
258- else -(bg)
259- let bi = ((bd - bg) / bd)
260- let bj = aJ()
261- if ((bi > bj))
262- then throw(((("Price impact " + toString(bi)) + " > max price impact ") + toString(bj)))
249+ let bc = ax()
250+ let bd = af(bb, bc)
251+ let be = ah(aW, bd)
252+ let as = ah(bb, bc)
253+ let bf = if (aV)
254+ then (bb + aW)
255+ else (bb - aW)
256+ let bg = af(as, bf)
257+ let bh = ai((bg - bc))
258+ let bi = if (aV)
259+ then bh
260+ else -(bh)
261+ let bj = ((be - bh) / be)
262+ let bk = aK()
263+ if ((bj > bk))
264+ then throw(((("Price impact " + toString(bj)) + " > max price impact ") + toString(bk)))
263265 else {
264- let bk = aT(aU, aV, bg)
265- let bl = bk._1
266- let bm = bk._2
267- let bn = bk._3
268- let bo = bk._4
269- let bp = bk._5
270- $Tuple6(bh, bl, bm, bn, bo, bp)
266+ let bl = aU(aV, aW, bh)
267+ let bm = bl._1
268+ let bn = bl._2
269+ let bo = bl._3
270+ let bp = bl._4
271+ let bq = bl._5
272+ $Tuple6(bi, bm, bn, bo, bp, bq)
271273 }
272274 }
273275
274276
275-func bq (br,bs,bt,bu) = {
276- let bv = aA()
277- let bw = if ((br != 0))
278- then ag((bv - bt), br)
277+func br (bs,bt,bu,bv) = {
278+ let bw = aB()
279+ let bx = if ((bs != 0))
280+ then ah((bw - bu), bs)
279281 else 0
280- let bx = ((bu - bw) + bs)
281- let by = if ((0 > bx))
282- then $Tuple2(0, ah(bx))
283- else $Tuple2(ah(bx), 0)
284- let bz = by._1
285- let bA = by._2
286- $Tuple4(bz, bA, bw, bv)
282+ let by = ((bv - bx) + bt)
283+ let bz = if ((0 > by))
284+ then $Tuple2(0, ai(by))
285+ else $Tuple2(ai(by), 0)
286+ let bA = bz._1
287+ let bB = bz._2
288+ $Tuple4(bA, bB, bx, bw)
287289 }
288290
289291
290-func bB (bC,aW,bD,bE) = if ((aW == 0))
292+func bC (bD,aX,bE,bF) = if ((aX == 0))
291293 then throw("Invalid base asset amount")
292294 else {
293- let ar = ag(bD, bE)
294- let bF = if (bC)
295- then (bE + aW)
296- else (bE - aW)
297- let bG = ae(ar, bF)
298- let bH = ah((bG - bD))
299- let bI = aT(!(bC), bH, aW)
300- let bl = bI._1
301- let bm = bI._2
302- let bn = bI._3
303- let bo = bI._4
304- let bp = bI._5
305- $Tuple6(bH, bl, bm, bn, bo, bp)
295+ let as = ah(bE, bF)
296+ let bG = if (bD)
297+ then (bF + aX)
298+ else (bF - aX)
299+ let bH = af(as, bG)
300+ let bI = ai((bH - bE))
301+ let bJ = aU(!(bD), bI, aX)
302+ let bm = bJ._1
303+ let bn = bJ._2
304+ let bo = bJ._3
305+ let bp = bJ._4
306+ let bq = bJ._5
307+ $Tuple6(bI, bm, bn, bo, bp, bq)
306308 }
307309
308310
309-func bJ () = {
310- let bK = valueOrErrorMessage(addressFromString(getStringValue(this, b)), "")
311- let bL = getStringValue(this, a)
312- getIntegerValue(bK, bL)
313- }
314-
315-
316-func bM () = {
317- let ba = av()
318- let bb = aw()
319- ae(ba, bb)
311+func bK () = {
312+ let bL = valueOrErrorMessage(addressFromString(getStringValue(this, b)), "")
313+ let bM = getStringValue(this, a)
314+ getIntegerValue(bL, bM)
320315 }
321316
322317
323318 func bN () = {
324- let bO = bJ()
325- let bP = bM()
326- (ae(ah((bO - bP)), bO) > aI())
319+ let bb = aw()
320+ let bc = ax()
321+ af(bb, bc)
327322 }
328323
329324
330-func bQ (aQ,bR) = {
331- let bS = aK(aQ)
332- let aO = bS._1
333- let bT = bS._2
334- let bU = bS._3
335- let bV = bS._4
336- let bW = ah(aO)
337- if ((bW == 0))
325+func bO () = {
326+ let bP = bK()
327+ let bQ = bN()
328+ (af(ai((bP - bQ)), bP) > aJ())
329+ }
330+
331+
332+func bR (aR,bS) = {
333+ let bT = aL(aR)
334+ let aP = bT._1
335+ let bU = bT._2
336+ let bV = bT._3
337+ let bW = bT._4
338+ let bX = ai(aP)
339+ if ((bX == 0))
338340 then throw("Invalid position size")
339341 else {
340- let bX = (0 > aO)
341- let bY = if ((bR == aa))
342+ let bY = (0 > aP)
343+ let bZ = if ((bS == ab))
342344 then {
343- let bZ = bB(!(bX), bW, av(), aw())
344- let ca = bZ._1
345- let cb = bZ._2
346- let cc = bZ._3
347- let cd = bZ._4
348- ca
345+ let ca = bC(!(bY), bX, aw(), ax())
346+ let cb = ca._1
347+ let cc = ca._2
348+ let cd = ca._3
349+ let ce = ca._4
350+ cb
349351 }
350- else (bW * bJ())
351- let ce = if (bX)
352- then (bU - bY)
353- else (bY - bU)
354- $Tuple2(bY, ce)
352+ else (bX * bK())
353+ let cf = if (bY)
354+ then (bV - bZ)
355+ else (bZ - bV)
356+ $Tuple2(bZ, cf)
355357 }
356358 }
357359
358360
359-func cf (aQ,bR) = {
360- func cg () = 0
361+func cg (aR,bS) = {
362+ func ch () = 0
361363
362- let ch = aK(aQ)
363- let aO = ch._1
364- let bT = ch._2
365- let bU = ch._3
366- let bV = ch._4
367- let ci = bQ(aQ, bR)
368- let bY = ci._1
369- let ce = ci._2
370- let cj = bq(aO, bT, bV, ce)
371- let bz = cj._1
372- let bA = cj._2
373- ae((bz - bA), bY)
364+ let ci = aL(aR)
365+ let aP = ci._1
366+ let bU = ci._2
367+ let cj = ci._3
368+ let bW = ci._4
369+ let ck = bR(aR, bS)
370+ let bZ = ck._1
371+ let cf = ck._2
372+ let cl = br(aP, bU, bW, cf)
373+ let bA = cl._1
374+ let bB = cl._2
375+ af((bA - bB), bZ)
374376 }
375377
376378
377-func ck (aQ) = cf(aQ, aa)
379+func cm (aR) = cg(aR, ab)
378380
379381
380-func cl (aQ) = {
381- let cm = aK(aQ)
382- let aO = cm._1
383- let bT = cm._2
384- let bU = cm._3
385- let bV = cm._4
386- let cn = bQ(aQ, aa)
387- let cb = cn._1
388- let ce = cn._2
389- let co = bq(aO, bT, bV, ce)
390- let bz = co._1
391- let bA = co._2
392- let cc = co._3
393- let cp = -(aO)
394- let cq = ce
395- let cr = -(bz)
396- let cs = bB((aO > 0), ah(aO), av(), aw())
397- let ct = cs._1
398- let be = cs._2
399- let bf = cs._3
400- let cu = cs._4
401- let cv = cs._5
402- let cw = cs._6
403- let cx = (aB() - bU)
404- $Tuple11(cp, bA, cq, cr, be, bf, cu, cv, cw, cx, ct)
382+func cn (aR) = {
383+ let co = aL(aR)
384+ let aP = co._1
385+ let bU = co._2
386+ let cj = co._3
387+ let bW = co._4
388+ let cp = bR(aR, ab)
389+ let cc = cp._1
390+ let cf = cp._2
391+ let cq = br(aP, bU, bW, cf)
392+ let bA = cq._1
393+ let bB = cq._2
394+ let cd = cq._3
395+ let cr = -(aP)
396+ let cs = cf
397+ let ct = -(bA)
398+ let cu = bC((aP > 0), ai(aP), aw(), ax())
399+ let cv = cu._1
400+ let bf = cu._2
401+ let bg = cu._3
402+ let cw = cu._4
403+ let cx = cu._5
404+ let cy = cu._6
405+ let cz = (aC() - cj)
406+ $Tuple11(cr, bB, cs, ct, bf, bg, cw, cx, cy, cz, cv)
405407 }
406408
407409
408-func cy () = {
409- let cz = ((lastBlock.timestamp / 1000) / 60)
410- let cA = (cz - V)
411- let cB = valueOrElse(getString(this, q), "")
412- let cC = split(cB, ",")
413- func cD (cE,cF) = if ((cA >= parseIntValue(cF)))
414- then (cE :+ parseIntValue(cF))
415- else cE
410+func cA () = {
411+ let cB = ((lastBlock.timestamp / 1000) / 60)
412+ let cC = (cB - W)
413+ let cD = valueOrElse(getString(this, q), "")
414+ let cE = split(cD, ",")
415+ func cF (cG,cH) = if ((cC >= parseIntValue(cH)))
416+ then (cG :+ parseIntValue(cH))
417+ else cG
416418
417- let cG = {
418- let cH = cC
419- let cI = size(cH)
420- let cJ = nil
421- func cK (cL,cM) = if ((cM >= cI))
422- then cL
423- else cD(cL, cH[cM])
419+ let cI = {
420+ let cJ = cE
421+ let cK = size(cJ)
422+ let cL = nil
423+ func cM (cN,cO) = if ((cO >= cK))
424+ then cN
425+ else cF(cN, cJ[cO])
424426
425- func cN (cL,cM) = if ((cM >= cI))
426- then cL
427- else throw("List size exceeds 15")
427+ func cP (cN,cO) = if ((cO >= cK))
428+ then cN
429+ else throw("List size exceeds 20")
428430
429- cN(cK(cK(cK(cK(cK(cK(cK(cK(cK(cK(cK(cK(cK(cK(cK(cJ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
431+ cP(cM(cM(cM(cM(cM(cM(cM(cM(cM(cM(cM(cM(cM(cM(cM(cM(cM(cM(cM(cM(cL, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
430432 }
431- let cO = max(cG)
432- let cP = valueOrElse(getInteger(this, r), 0)
433- let cQ = valueOrElse(getInteger(this, ((s + "_") + toString(cP))), 0)
434- let cR = valueOrElse(getInteger(this, ((t + "_") + toString(cP))), 0)
435- let cS = (cQ + ((cz - cP) * cR))
436- let cT = valueOrElse(getInteger(this, ((s + "_") + toString(cO))), 0)
437- let cU = valueOrElse(getInteger(this, ((t + "_") + toString(cO))), 0)
438- let cV = (cT + ((cA - cO) * cU))
439- ((cS - cV) / V)
433+ let cQ = max(cI)
434+ let cR = valueOrElse(getInteger(this, r), 0)
435+ let cS = valueOrElse(getInteger(this, ((s + "_") + toString(cR))), 0)
436+ let cT = valueOrElse(getInteger(this, ((t + "_") + toString(cR))), 0)
437+ let cU = (cS + ((cB - cR) * cT))
438+ let cV = valueOrElse(getInteger(this, ((s + "_") + toString(cQ))), 0)
439+ let cW = valueOrElse(getInteger(this, ((t + "_") + toString(cQ))), 0)
440+ let cX = (cV + ((cC - cQ) * cW))
441+ ((cU - cX) / W)
440442 }
441443
442444
443-func cW (cX,cY,cZ,da,db,dc,dd) = [IntegerEntry(l, cX), IntegerEntry(m, cY), IntegerEntry(n, cZ), IntegerEntry(k, da), IntegerEntry(j, db), IntegerEntry(o, dc), IntegerEntry(p, dd)]
445+func cY (cZ,da,db,dc,dd,de,df) = [IntegerEntry(l, cZ), IntegerEntry(m, da), IntegerEntry(n, db), IntegerEntry(k, dc), IntegerEntry(j, dd), IntegerEntry(o, de), IntegerEntry(p, df)]
444446
445447
446-func de (df,dg,bv,dh) = [IntegerEntry(A, df), IntegerEntry(w, dg), IntegerEntry(v, bv), IntegerEntry(x, dh)]
448+func dg (dh,di,bw,dj) = [IntegerEntry(v, dh), IntegerEntry(x, di), IntegerEntry(w, bw), IntegerEntry(y, dj)]
447449
448450
449-func di (ak,dj,dk,dl,dm) = [IntegerEntry(ai(d, ak), dj), IntegerEntry(ai(e, ak), dk), IntegerEntry(ai(f, ak), dl), IntegerEntry(ai(g, ak), dm)]
451+func dk (al,dl,dm,dn,do) = [IntegerEntry(aj(d, al), dl), IntegerEntry(aj(e, al), dm), IntegerEntry(aj(f, al), dn), IntegerEntry(aj(g, al), do)]
450452
451453
452-func dn (do) = {
453- let cz = ((lastBlock.timestamp / 1000) / 60)
454- let dp = valueOrElse(getInteger(this, r), 0)
455- if ((dp > cz))
454+func dp (dq) = {
455+ let cB = ((lastBlock.timestamp / 1000) / 60)
456+ let dr = valueOrElse(getInteger(this, r), 0)
457+ if ((dr > cB))
456458 then throw("TWAP out-of-order")
457459 else {
458- let cP = if ((dp == 0))
459- then cz
460- else dp
461- let cB = valueOrElse(getString(this, q), "")
462- let dq = split(cB, ",")
463- let cC = if ((size(dq) > V))
464- then (removeByIndex(dq, 0) :+ toString(cz))
465- else (dq :+ toString(cz))
466- let dr = valueOrElse(getInteger(this, ((s + "_") + toString(dp))), 0)
467- let ds = valueOrElse(getInteger(this, ((t + "_") + toString(dp))), do)
468- let dt = (dr + ((cz - cP) * ds))
469- func du (cE,dv) = ((cE + dv) + ",")
460+ let cR = if ((dr == 0))
461+ then cB
462+ else dr
463+ let cD = valueOrElse(getString(this, q), "")
464+ let ds = split(cD, ",")
465+ let cE = if ((size(ds) > W))
466+ then (removeByIndex(ds, 0) :+ toString(cB))
467+ else (ds :+ toString(cB))
468+ let dt = valueOrElse(getInteger(this, ((s + "_") + toString(dr))), 0)
469+ let du = valueOrElse(getInteger(this, ((t + "_") + toString(dr))), dq)
470+ let dv = (dt + ((cB - cR) * du))
471+ func dw (cG,dx) = ((cG + dx) + ",")
470472
471- let dw = {
472- let cH = cC
473- let cI = size(cH)
474- let cJ = ""
475- func cK (cL,cM) = if ((cM >= cI))
476- then cL
477- else du(cL, cH[cM])
473+ let dy = {
474+ let cJ = cE
475+ let cK = size(cJ)
476+ let cL = ""
477+ func cM (cN,cO) = if ((cO >= cK))
478+ then cN
479+ else dw(cN, cJ[cO])
478480
479- func cN (cL,cM) = if ((cM >= cI))
480- then cL
481- else throw("List size exceeds 15")
481+ func cP (cN,cO) = if ((cO >= cK))
482+ then cN
483+ else throw("List size exceeds 20")
482484
483- cN(cK(cK(cK(cK(cK(cK(cK(cK(cK(cK(cK(cK(cK(cK(cK(cJ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
485+ cP(cM(cM(cM(cM(cM(cM(cM(cM(cM(cM(cM(cM(cM(cM(cM(cM(cM(cM(cM(cM(cL, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
484486 }
485- let dx = dropRight(dw, 1)
486- let dy = if ((take(dx, 1) == ","))
487- then drop(dx, 1)
488- else dx
489-[IntegerEntry(((s + "_") + toString(cz)), dt), IntegerEntry(((t + "_") + toString(cz)), do), IntegerEntry(r, cz), StringEntry(q, dy)]
487+ let dz = dropRight(dy, 1)
488+ let dA = if ((take(dz, 1) == ","))
489+ then drop(dz, 1)
490+ else dz
491+[IntegerEntry(((s + "_") + toString(cB)), dv), IntegerEntry(((t + "_") + toString(cB)), dq), IntegerEntry(r, cB), StringEntry(q, dA)]
490492 }
491493 }
492494
493495
494-func dz (ba,bb,dA,dB,dC,dD) = ([IntegerEntry(y, ba), IntegerEntry(z, bb), IntegerEntry(A, dA), IntegerEntry(B, dB), IntegerEntry(C, dC), IntegerEntry(D, dD)] ++ dn(ae(ba, bb)))
496+func dB (bb,bc,dC,dD,dE,dF) = ([IntegerEntry(z, bb), IntegerEntry(A, bc), IntegerEntry(v, dC), IntegerEntry(C, dD), IntegerEntry(D, dE), IntegerEntry(E, dF)] ++ dp(af(bb, bc)))
495497
496498
497-func dE (ak) = [DeleteEntry(ai(d, ak)), DeleteEntry(ai(e, ak)), DeleteEntry(ai(f, ak)), DeleteEntry(ai(g, ak))]
499+func dG (al) = [DeleteEntry(aj(d, al)), DeleteEntry(aj(e, al)), DeleteEntry(aj(f, al)), DeleteEntry(aj(g, al))]
498500
499501
500-func dF (ak,dG) = {
501- let dH = assetBalance(this, O())
502- if ((dG > dH))
503- then throw(((("Unable to withdraw " + toString(dG)) + " from contract balance ") + toString(dH)))
504- else [ScriptTransfer(ak, dG, O())]
502+func dH (al,dI) = {
503+ let dJ = assetBalance(this, P())
504+ if ((dI > dJ))
505+ then throw(((("Unable to withdraw " + toString(dI)) + " from contract balance ") + toString(dJ)))
506+ else [ScriptTransfer(al, dI, P())]
505507 }
506508
507509
508-func dI (dJ) = if ((0 > dJ))
510+func dK (dL) = if ((0 > dL))
509511 then throw("Balance")
510- else [IntegerEntry(c, dJ)]
512+ else [IntegerEntry(c, dL)]
511513
512514
513-func dK (dJ) = [ScriptTransfer(Q(), dJ, O())]
515+func dM (dL) = [ScriptTransfer(R(), dL, P())]
514516
515517
516-@Callable(dJ)
517-func pause () = if ((dJ.caller != M()))
518+@Callable(dL)
519+func pause () = if ((dL.caller != N()))
518520 then throw("Invalid togglePause params")
519521 else [BooleanEntry(i, true)]
520522
521523
522524
523-@Callable(dJ)
524-func unpause () = if ((dJ.caller != M()))
525+@Callable(dL)
526+func unpause () = if ((dL.caller != N()))
525527 then throw("Invalid togglePause params")
526528 else [BooleanEntry(i, false)]
527529
528530
529531
530-@Callable(dJ)
531-func changeSettings (cX,cY,cZ,da,db,dc,dd) = if ((dJ.caller != M()))
532+@Callable(dL)
533+func changeSettings (cZ,da,db,dc,dd,de,df) = if ((dL.caller != N()))
532534 then throw("Invalid changeSettings params")
533- else cW(cX, cY, cZ, da, db, dc, dd)
535+ else cY(cZ, da, db, dc, dd, de, df)
534536
535537
536538
537-@Callable(dJ)
538-func initialize (ba,bb,da,cX,cY,cZ,db,dL,dM,dN,dc,dd) = if (if (if (if (if (if (if (if (if (if ((0 >= ba))
539+@Callable(dL)
540+func initialize (bb,bc,dc,cZ,da,db,dd,dN,dO,dP,de,df) = if (if (if (if (if (if (if (if (if (if ((0 >= bb))
539541 then true
540- else (0 >= bb))
542+ else (0 >= bc))
543+ then true
544+ else (0 >= dc))
545+ then true
546+ else (0 >= cZ))
541547 then true
542548 else (0 >= da))
543549 then true
544- else (0 >= cX))
545- then true
546- else (0 >= cY))
547- then true
548- else (0 >= cZ))
549- then true
550550 else (0 >= db))
551- then true
552- else (0 >= dc))
553551 then true
554552 else (0 >= dd))
555553 then true
556- else aR())
554+ else (0 >= de))
555+ then true
556+ else (0 >= df))
557+ then true
558+ else aS())
557559 then throw("Invalid initialize parameters")
558- else ((((dz(ba, bb, 0, 0, 0, 0) ++ cW(cX, cY, cZ, da, db, dc, dd)) ++ de(0, (lastBlock.timestamp + da), 0, 0)) ++ dI(0)) ++ [BooleanEntry(h, true), StringEntry(b, dL), StringEntry(a, dM), StringEntry(E, dN)])
560+ else ((((dB(bb, bc, 0, 0, 0, 0) ++ cY(cZ, da, db, dc, dd, de, df)) ++ dg(0, (lastBlock.timestamp + dc), 0, 0)) ++ dK(0)) ++ [BooleanEntry(h, true), StringEntry(b, dN), StringEntry(a, dO), StringEntry(F, dP)])
559561
560562
561563
562-@Callable(dJ)
563-func decreasePosition (dO,dG,dP,dQ) = if (if (if (if (if (if (if ((dO != S))
564- then (dO != T)
564+@Callable(dL)
565+func decreasePosition (dQ,dI,dR,dS) = if (if (if (if (if (if (if ((dQ != T))
566+ then (dQ != U)
565567 else false)
566568 then true
567- else (0 >= dG))
569+ else (0 >= dI))
568570 then true
569- else if (((1 * X) > dP))
571+ else if (((1 * Y) > dR))
570572 then true
571- else (dP > (3 * X)))
573+ else (dR > (3 * Y)))
572574 then true
573- else !(aR()))
575+ else !(aS()))
574576 then true
575- else !(al(ae(X, dP), au(), true)))
577+ else !(am(af(Y, dR), av(), true)))
576578 then true
577- else aS())
579+ else aT())
578580 then throw("Invalid decreasePosition parameters")
579581 else {
580- let dR = aK(toString(dJ.caller))
581- let dS = dR._1
582- let dT = dR._2
583- let dU = dR._3
584- let dV = dR._4
585- let dW = (dS == 0)
586- let dX = if ((dS > 0))
587- then (dO == S)
588- else (dO == T)
589- let dY = if (!(dW))
590- then dX
582+ let dT = aL(toString(dL.caller))
583+ let dU = dT._1
584+ let dV = dT._2
585+ let dW = dT._3
586+ let dX = dT._4
587+ let dY = (dU == 0)
588+ let dZ = if ((dU > 0))
589+ then (dQ == T)
590+ else (dQ == U)
591+ let ea = if (!(dY))
592+ then dZ
591593 else false
592- let dZ = (dO == S)
593- let ea = if (if (dW)
594+ let eb = (dQ == T)
595+ let ec = if (if (dY)
594596 then true
595- else dY)
597+ else ea)
596598 then throw("Use increasePosition to open new or increase position")
597599 else {
598- let eb = ag(dG, dP)
599- let ec = bQ(toString(dJ.caller), aa)
600- let ed = ec._1
601- let ce = ec._2
602- if ((ed > eb))
600+ let ed = ah(dI, dR)
601+ let ee = bR(toString(dL.caller), ab)
602+ let ef = ee._1
603+ let cf = ee._2
604+ if ((ef > ed))
603605 then {
604- let ee = aZ(dZ, eb)
605- let cp = ee._1
606- let be = ee._2
607- let bf = ee._3
608- let cu = ee._4
609- let cv = ee._5
610- let cw = ee._6
611- let ef = ah(cp)
612- if (if ((dQ != 0))
613- then (dQ > ef)
606+ let eg = ba(eb, ed)
607+ let cr = eg._1
608+ let bf = eg._2
609+ let bg = eg._3
610+ let cw = eg._4
611+ let cx = eg._5
612+ let cy = eg._6
613+ let eh = ai(cr)
614+ if (if ((dS != 0))
615+ then (dS > eh)
614616 else false)
615- then throw(((("Too little basse asset exchanged, got " + toString(ef)) + " expected ") + toString(dQ)))
617+ then throw(((("Too little basse asset exchanged, got " + toString(eh)) + " expected ") + toString(dS)))
616618 else {
617- let cq = if ((dS != 0))
618- then ae(ag(ce, ef), dS)
619+ let cs = if ((dU != 0))
620+ then af(ah(cf, eh), dU)
619621 else 0
620- let eg = bq(dS, dT, dV, cq)
621- let bz = eg._1
622- let bA = eg._2
623- let bw = eg._3
624- let eh = eg._4
625- let ct = eb
626- let ei = (ce - cq)
627- let ej = if ((dS > 0))
628- then ((ed - ct) - ei)
629- else ((ei + ed) - ct)
630- $Tuple10((dS + cp), bz, ah(ej), eh, bf, be, cu, cv, cw, (aB() - eb))
622+ let ei = br(dU, dV, dX, cs)
623+ let bA = ei._1
624+ let bB = ei._2
625+ let bx = ei._3
626+ let ej = ei._4
627+ let cv = ed
628+ let ek = (cf - cs)
629+ let el = if ((dU > 0))
630+ then ((ef - cv) - ek)
631+ else ((ek + ef) - cv)
632+ $Tuple10((dU + cr), bA, ai(el), ej, bg, bf, cw, cx, cy, (aC() - ed))
631633 }
632634 }
633635 else throw("Close position first")
634636 }
635- let ek = ea._1
636- let el = ea._2
637- let em = ea._3
638- let en = ea._4
639- let bf = ea._5
640- let be = ea._6
641- let cu = ea._7
642- let cv = ea._8
643- let cw = ea._9
644- let cx = ea._10
645- (di(toString(dJ.caller), ek, el, em, en) ++ dz(be, bf, cu, cv, cw, cx))
637+ let em = ec._1
638+ let en = ec._2
639+ let eo = ec._3
640+ let ep = ec._4
641+ let bg = ec._5
642+ let bf = ec._6
643+ let cw = ec._7
644+ let cx = ec._8
645+ let cy = ec._9
646+ let cz = ec._10
647+ (dk(toString(dL.caller), em, en, eo, ep) ++ dB(bf, bg, cw, cx, cy, cz))
646648 }
647649
648650
649651
650-@Callable(dJ)
651-func increasePosition (dO,dP,dQ) = {
652- let eo = dJ.payments[0].amount
653- if (if (if (if (if (if (if (if ((dO != S))
654- then (dO != T)
652+@Callable(dL)
653+func increasePosition (dQ,dR,dS) = {
654+ let eq = dL.payments[0].amount
655+ if (if (if (if (if (if (if (if ((dQ != T))
656+ then (dQ != U)
655657 else false)
656658 then true
657- else (0 >= eo))
659+ else (0 >= eq))
658660 then true
659- else if (((1 * X) > dP))
661+ else if (((1 * Y) > dR))
660662 then true
661- else (dP > (3 * X)))
663+ else (dR > (3 * Y)))
662664 then true
663- else !(aR()))
665+ else !(aS()))
664666 then true
665- else (dJ.payments[0].assetId != O()))
667+ else (dL.payments[0].assetId != P()))
666668 then true
667- else !(al(ae(X, dP), au(), true)))
669+ else !(am(af(Y, dR), av(), true)))
668670 then true
669- else aS())
671+ else aT())
670672 then throw("Invalid increasePosition parameters")
671673 else {
672- let ep = ag(eo, at())
673- let dG = (eo - ep)
674- let eq = aK(toString(dJ.caller))
675- let dS = eq._1
676- let dT = eq._2
677- let dU = eq._3
678- let dV = eq._4
679- let dW = (dS == 0)
680- let dX = if ((dS > 0))
681- then (dO == S)
682- else (dO == T)
683- let dY = if (!(dW))
684- then dX
674+ let er = ah(eq, au())
675+ let dI = (eq - er)
676+ let es = aL(toString(dL.caller))
677+ let dU = es._1
678+ let dV = es._2
679+ let dW = es._3
680+ let dX = es._4
681+ let dY = (dU == 0)
682+ let dZ = if ((dU > 0))
683+ then (dQ == T)
684+ else (dQ == U)
685+ let ea = if (!(dY))
686+ then dZ
685687 else false
686- let dZ = (dO == S)
687- let er = if (if (dW)
688+ let eb = (dQ == T)
689+ let et = if (if (dY)
688690 then true
689- else dY)
691+ else ea)
690692 then {
691- let eb = ag(dG, dP)
692- let es = aZ(dZ, eb)
693- let bh = es._1
694- let be = es._2
695- let bf = es._3
696- let cu = es._4
697- let cv = es._5
698- let cw = es._6
699- if (if ((dQ != 0))
700- then (dQ > ah(bh))
693+ let ed = ah(dI, dR)
694+ let eu = ba(eb, ed)
695+ let bi = eu._1
696+ let bf = eu._2
697+ let bg = eu._3
698+ let cw = eu._4
699+ let cx = eu._5
700+ let cy = eu._6
701+ if (if ((dS != 0))
702+ then (dS > ai(bi))
701703 else false)
702- then throw(((("Limit error: " + toString(ah(bh))) + " < ") + toString(dQ)))
704+ then throw(((("Limit error: " + toString(ai(bi))) + " < ") + toString(dS)))
703705 else {
704- let ek = (dS + bh)
705- let et = ae(eb, dP)
706- let eu = bq(dS, dT, dV, et)
707- let bz = eu._1
708- let cb = eu._2
709- let cc = eu._3
710- let eh = eu._4
711- $Tuple10(ek, bz, (dU + eb), eh, bf, be, cu, cv, cw, (aB() + eb))
706+ let em = (dU + bi)
707+ let ev = af(ed, dR)
708+ let ew = br(dU, dV, dX, ev)
709+ let bA = ew._1
710+ let cc = ew._2
711+ let cd = ew._3
712+ let ej = ew._4
713+ $Tuple10(em, bA, (dW + ed), ej, bg, bf, cw, cx, cy, (aC() + ed))
712714 }
713715 }
714716 else {
715- let eb = ag(dG, dP)
716- let ev = bQ(toString(dJ.caller), aa)
717- let ed = ev._1
718- let ce = ev._2
719- if ((ed > eb))
717+ let ed = ah(dI, dR)
718+ let ex = bR(toString(dL.caller), ab)
719+ let ef = ex._1
720+ let cf = ex._2
721+ if ((ef > ed))
720722 then throw("Use decreasePosition to decrease position size")
721723 else throw("Close position first")
722724 }
723- let ek = er._1
724- let el = er._2
725- let em = er._3
726- let en = er._4
727- let bf = er._5
728- let be = er._6
729- let cu = er._7
730- let cv = er._8
731- let cw = er._9
732- let cx = er._10
733- let ew = (ep / 2)
734- let ex = (ep - ew)
735- let ey = invoke(P(), "lockNeutrinoSP", [toString(Q()), Z], [AttachedPayment(O(), dG)])
736- if ((ey == ey))
725+ let em = et._1
726+ let en = et._2
727+ let eo = et._3
728+ let ep = et._4
729+ let bg = et._5
730+ let bf = et._6
731+ let cw = et._7
732+ let cx = et._8
733+ let cy = et._9
734+ let cz = et._10
735+ let ey = (er / 2)
736+ let ez = (er - ey)
737+ let eA = invoke(Q(), "lockNeutrinoSP", [toString(R()), aa], [AttachedPayment(P(), dI)])
738+ if ((eA == eA))
737739 then {
738- let ez = invoke(R(), "deposit", nil, [AttachedPayment(O(), ex)])
739- if ((ez == ez))
740- then (((di(toString(dJ.caller), ek, el, em, en) ++ dz(be, bf, cu, cv, cw, cx)) ++ dK(ew)) ++ dI((as() + dG)))
740+ let eB = invoke(S(), "deposit", nil, [AttachedPayment(P(), ez)])
741+ if ((eB == eB))
742+ then (((dk(toString(dL.caller), em, en, eo, ep) ++ dB(bf, bg, cw, cx, cy, cz)) ++ dM(ey)) ++ dK((at() + dI)))
741743 else throw("Strict value is not equal to itself.")
742744 }
743745 else throw("Strict value is not equal to itself.")
746748
747749
748750
749-@Callable(dJ)
751+@Callable(dL)
750752 func addMargin () = {
751- let eo = dJ.payments[0].amount
752- if (if (if (if ((dJ.payments[0].assetId != O()))
753+ let eq = dL.payments[0].amount
754+ if (if (if (if ((dL.payments[0].assetId != P()))
753755 then true
754- else !(aP(toString(dJ.caller))))
756+ else !(aQ(toString(dL.caller))))
755757 then true
756- else !(aR()))
758+ else !(aS()))
757759 then true
758- else aS())
760+ else aT())
759761 then throw("Invalid addMargin parameters")
760762 else {
761- let ep = ag(eo, at())
762- let dG = (eo - ep)
763- let eA = aK(toString(dJ.caller))
764- let dS = eA._1
765- let dT = eA._2
766- let dU = eA._3
767- let dV = eA._4
768- let ew = (ep / 2)
769- let ex = (ep - ew)
770- let ey = invoke(P(), "lockNeutrinoSP", [toString(Q()), Z], [AttachedPayment(O(), dG)])
771- if ((ey == ey))
763+ let er = ah(eq, au())
764+ let dI = (eq - er)
765+ let eC = aL(toString(dL.caller))
766+ let dU = eC._1
767+ let dV = eC._2
768+ let dW = eC._3
769+ let dX = eC._4
770+ let ey = (er / 2)
771+ let ez = (er - ey)
772+ let eA = invoke(Q(), "lockNeutrinoSP", [toString(R()), aa], [AttachedPayment(P(), dI)])
773+ if ((eA == eA))
772774 then {
773- let ez = invoke(R(), "deposit", nil, [AttachedPayment(O(), ex)])
774- if ((ez == ez))
775- then ((di(toString(dJ.caller), dS, (dT + dJ.payments[0].amount), dU, dV) ++ dK(ew)) ++ dI((as() + dG)))
775+ let eB = invoke(S(), "deposit", nil, [AttachedPayment(P(), ez)])
776+ if ((eB == eB))
777+ then ((dk(toString(dL.caller), dU, (dV + dL.payments[0].amount), dW, dX) ++ dM(ey)) ++ dK((at() + dI)))
776778 else throw("Strict value is not equal to itself.")
777779 }
778780 else throw("Strict value is not equal to itself.")
781783
782784
783785
784-@Callable(dJ)
785-func removeMargin (dG) = if (if (if (if ((0 >= dG))
786+@Callable(dL)
787+func removeMargin (dI) = if (if (if (if ((0 >= dI))
786788 then true
787- else !(aP(toString(dJ.caller))))
789+ else !(aQ(toString(dL.caller))))
788790 then true
789- else !(aR()))
791+ else !(aS()))
790792 then true
791- else aS())
793+ else aT())
792794 then throw("Invalid removeMargin parameters")
793795 else {
794- let eB = aK(toString(dJ.caller))
795- let dS = eB._1
796- let dT = eB._2
797- let dU = eB._3
798- let dV = eB._4
799- let eC = -(dG)
800- let eD = bq(dS, dT, dV, eC)
801- let bz = eD._1
802- let bA = eD._2
803- let cb = eD._3
804- let eE = eD._4
805- if ((bA != 0))
796+ let eD = aL(toString(dL.caller))
797+ let dU = eD._1
798+ let dV = eD._2
799+ let dW = eD._3
800+ let dX = eD._4
801+ let eE = -(dI)
802+ let eF = br(dU, dV, dX, eE)
803+ let bA = eF._1
804+ let bB = eF._2
805+ let cc = eF._3
806+ let eG = eF._4
807+ if ((bB != 0))
806808 then throw("Invalid added margin amount")
807809 else {
808- let eF = invoke(P(), "unlockNeutrino", [dG, toBase58String(O())], nil)
809- if ((eF == eF))
810- then ((di(toString(dJ.caller), dS, bz, dU, eE) ++ dF(dJ.caller, dG)) ++ dI((as() - dG)))
810+ let eH = invoke(Q(), "unlockNeutrino", [dI, toBase58String(P())], nil)
811+ if ((eH == eH))
812+ then ((dk(toString(dL.caller), dU, bA, dW, eG) ++ dH(dL.caller, dI)) ++ dK((at() - dI)))
811813 else throw("Strict value is not equal to itself.")
812814 }
813815 }
814816
815817
816818
817-@Callable(dJ)
818-func closePosition () = if (if (if (!(aP(toString(dJ.caller))))
819+@Callable(dL)
820+func closePosition () = if (if (if (!(aQ(toString(dL.caller))))
819821 then true
820- else !(aR()))
822+ else !(aS()))
821823 then true
822- else aS())
824+ else aT())
823825 then throw("Invalid closePosition parameters")
824826 else {
825- let eG = cl(toString(dJ.caller))
826- let cb = eG._1
827- let bA = eG._2
828- let cq = eG._3
829- let cr = eG._4
830- let be = eG._5
831- let bf = eG._6
832- let cu = eG._7
833- let cv = eG._8
834- let cw = eG._9
835- let cx = eG._10
836- if ((bA > 0))
827+ let eI = cn(toString(dL.caller))
828+ let cc = eI._1
829+ let bB = eI._2
830+ let cs = eI._3
831+ let ct = eI._4
832+ let bf = eI._5
833+ let bg = eI._6
834+ let cw = eI._7
835+ let cx = eI._8
836+ let cy = eI._9
837+ let cz = eI._10
838+ if ((bB > 0))
837839 then throw("Unable to close position with bad debt")
838840 else {
839- let eH = ah(cr)
840- let eI = (as() - eH)
841- let eJ = if ((0 > eI))
842- then $Tuple2(0, ah(eI))
843- else $Tuple2(eI, 0)
844- let eK = eJ._1
845- let eL = eJ._2
846- let cg = if ((eL > 0))
841+ let eJ = ai(ct)
842+ let eK = (at() - eJ)
843+ let eL = if ((0 > eK))
844+ then $Tuple2(0, ai(eK))
845+ else $Tuple2(eK, 0)
846+ let eM = eL._1
847+ let eN = eL._2
848+ let ch = if ((eN > 0))
847849 then {
848- let eM = invoke(R(), "withdraw", [eL], nil)
849- if ((eM == eM))
850+ let eO = invoke(S(), "withdraw", [eN], nil)
851+ if ((eO == eO))
850852 then nil
851853 else throw("Strict value is not equal to itself.")
852854 }
853855 else nil
854- if ((cg == cg))
856+ if ((ch == ch))
855857 then {
856- let eF = invoke(P(), "unlockNeutrino", [(eH - eL), toBase58String(O())], nil)
857- if ((eF == eF))
858- then (((dE(toString(dJ.caller)) ++ dz(be, bf, cu, cv, cw, cx)) ++ dF(dJ.caller, eH)) ++ dI(eK))
858+ let eH = invoke(Q(), "unlockNeutrino", [(eJ - eN), toBase58String(P())], nil)
859+ if ((eH == eH))
860+ then (((dG(toString(dL.caller)) ++ dB(bf, bg, cw, cx, cy, cz)) ++ dH(dL.caller, eJ)) ++ dK(eM))
859861 else throw("Strict value is not equal to itself.")
860862 }
861863 else throw("Strict value is not equal to itself.")
864866
865867
866868
867-@Callable(dJ)
868-func liquidate (aQ) = {
869- let eN = if (bN())
870- then cf(aQ, ab)
871- else cf(aQ, aa)
872- if (if (if (!(al(eN, aG(), false)))
869+@Callable(dL)
870+func liquidate (aR) = {
871+ let eP = if (bO())
872+ then cg(aR, ac)
873+ else cg(aR, ab)
874+ if (if (if (!(am(eP, aH(), false)))
873875 then true
874- else !(aR()))
876+ else !(aS()))
875877 then true
876- else aS())
878+ else aT())
877879 then throw("Unable to liquidate")
878880 else {
879- let eO = cl(aQ)
880- let cb = eO._1
881- let bA = eO._2
882- let cc = eO._3
883- let cr = eO._4
884- let be = eO._5
885- let bf = eO._6
886- let cu = eO._7
887- let cv = eO._8
888- let cw = eO._9
889- let cx = eO._10
890- let ct = eO._11
891- let eP = (ag(ct, aH()) / 2)
892- let eQ = if ((eP > cr))
893- then $Tuple3((eP - cr), cr, ((bA + eP) - cr))
894- else $Tuple3(0, (cr - eP), bA)
895- let eR = eQ._1
896- let bz = eQ._2
897- let eS = eQ._3
898- let eI = (as() - eP)
899- let eT = if ((0 > eI))
900- then $Tuple2(0, ah(eI))
901- else $Tuple2(eI, 0)
902- let eK = eT._1
903- let eL = eT._2
904- let cg = if ((eL > 0))
881+ let eQ = cn(aR)
882+ let cc = eQ._1
883+ let bB = eQ._2
884+ let cd = eQ._3
885+ let ct = eQ._4
886+ let bf = eQ._5
887+ let bg = eQ._6
888+ let cw = eQ._7
889+ let cx = eQ._8
890+ let cy = eQ._9
891+ let cz = eQ._10
892+ let cv = eQ._11
893+ let eR = (ah(cv, aI()) / 2)
894+ let eS = if ((eR > ct))
895+ then $Tuple3((eR - ct), ct, ((bB + eR) - ct))
896+ else $Tuple3(0, (ct - eR), bB)
897+ let eT = eS._1
898+ let bA = eS._2
899+ let eU = eS._3
900+ let eK = (at() - eR)
901+ let eV = if ((0 > eK))
902+ then $Tuple2(0, ai(eK))
903+ else $Tuple2(eK, 0)
904+ let eM = eV._1
905+ let eN = eV._2
906+ let ch = if ((eN > 0))
905907 then {
906- let eM = invoke(R(), "withdraw", [eL], nil)
907- if ((eM == eM))
908+ let eO = invoke(S(), "withdraw", [eN], nil)
909+ if ((eO == eO))
908910 then nil
909911 else throw("Strict value is not equal to itself.")
910912 }
911913 else nil
912- if ((cg == cg))
914+ if ((ch == ch))
913915 then {
914- let eF = invoke(P(), "unlockNeutrino", [(eP - eL), toBase58String(O())], nil)
915- if ((eF == eF))
916- then (((dE(aQ) ++ dz(be, bf, cu, cv, cw, cx)) ++ dF(dJ.caller, eP)) ++ dI(eK))
916+ let eH = invoke(Q(), "unlockNeutrino", [(eR - eN), toBase58String(P())], nil)
917+ if ((eH == eH))
918+ then (((dG(aR) ++ dB(bf, bg, cw, cx, cy, cz)) ++ dH(dL.caller, eR)) ++ dK(eM))
917919 else throw("Strict value is not equal to itself.")
918920 }
919921 else throw("Strict value is not equal to itself.")
922924
923925
924926
925-@Callable(dJ)
927+@Callable(dL)
926928 func payFunding () = {
927- let eU = aC()
928- if (if (if ((eU > lastBlock.timestamp))
929+ let eW = aD()
930+ if (if (if ((eW > lastBlock.timestamp))
929931 then true
930- else !(aR()))
932+ else !(aS()))
931933 then true
932- else aS())
933- then throw(((("Invalid funding block timestamp: " + toString(lastBlock.timestamp)) + " < ") + toString(eU)))
934+ else aT())
935+ then throw(((("Invalid funding block timestamp: " + toString(lastBlock.timestamp)) + " < ") + toString(eW)))
934936 else {
935- let eV = bJ()
936- let eW = cy()
937- let eX = (eW - eV)
938- let eY = ae(ag(eX, aE()), Y)
939- de(0, (eU + aF()), (aA() + eY), ae(eY, eV))
937+ let eX = bK()
938+ let eY = cA()
939+ let eZ = (eY - eX)
940+ let fa = af(ah(eZ, aF()), Z)
941+ dg(0, (eW + aG()), (aB() + fa), af(fa, eX))
940942 }
941943 }
942944
943945
944946
945-@Callable(dJ)
946-func v_get (aQ) = {
947- let eZ = cl(aQ)
948- let cb = eZ._1
949- let cc = eZ._2
950- let cd = eZ._3
951- let fa = eZ._4
952- throw((((ac(cc) + ac(cd)) + ac(fa)) + ac(ck(aQ))))
947+@Callable(dL)
948+func v_get (aR) = {
949+ let fb = cn(aR)
950+ let cc = fb._1
951+ let cd = fb._2
952+ let ce = fb._3
953+ let fc = fb._4
954+ throw((((ad(cd) + ad(ce)) + ad(fc)) + ad(cm(aR))))
953955 }
954956
955957
956-@Verifier(fb)
957-func fc () = sigVerify(fb.bodyBytes, fb.proofs[0], N())
958+@Verifier(fd)
959+func fe () = sigVerify(fd.bodyBytes, fd.proofs[0], O())
958960
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = "k_ora_key"
55
66 let b = "k_ora"
77
88 let c = "k_balance"
99
1010 let d = "k_positionSize"
1111
1212 let e = "k_positionMargin"
1313
1414 let f = "k_positionOpenNotional"
1515
1616 let g = "k_positionFraction"
1717
1818 let h = "k_initialized"
1919
2020 let i = "k_paused"
2121
2222 let j = "k_fee"
2323
2424 let k = "k_fundingPeriod"
2525
2626 let l = "k_initMarginRatio"
2727
2828 let m = "k_mmr"
2929
3030 let n = "k_liquidationFeeRatio"
3131
3232 let o = "k_spreadLimit"
3333
3434 let p = "k_maxPriceImpact"
3535
3636 let q = "k_lastDataStr"
3737
3838 let r = "k_lastMinuteId"
3939
4040 let s = "k_twapDataLastCumulativePrice"
4141
4242 let t = "k_twapDataLastPrice"
4343
4444 let u = "k_twap"
4545
46-let v = "k_latestPremiumFraction"
46+let v = "k_baseAssetDelta"
4747
48-let w = "k_nextFundingBlockMinTimestamp"
48+let w = "k_latestPremiumFraction"
4949
50-let x = "k_fundingRate"
50+let x = "k_nextFundingBlockMinTimestamp"
5151
52-let y = "k_qtAstR"
52+let y = "k_fundingRate"
5353
54-let z = "k_bsAstR"
54+let z = "k_qtAstR"
5555
56-let A = "k_baseAssetDelta"
56+let A = "k_bsAstR"
5757
58-let B = "k_totalPositionSize"
58+let B = "k_baseAssetDelta"
5959
60-let C = "k_cumulativeNotional"
60+let C = "k_totalPositionSize"
6161
62-let D = "k_openInteresetNotional"
62+let D = "k_cumulativeNotional"
6363
64-let E = "k_coordinatorAddress"
64+let E = "k_openInteresetNotional"
6565
66-let F = "k_insurance_address"
66+let F = "k_coordinatorAddress"
6767
68-let G = "k_admin_address"
68+let G = "k_insurance_address"
6969
70-let H = "k_admin_public_key"
70+let H = "k_admin_address"
7171
72-let I = "k_quote_asset"
72+let I = "k_admin_public_key"
7373
74-let J = "k_quote_staking"
74+let J = "k_quote_asset"
7575
76-let K = "k_staking_address"
76+let K = "k_quote_staking"
7777
78-func L () = valueOrErrorMessage(addressFromString(getStringValue(this, E)), "Coordinator not set")
78+let L = "k_staking_address"
79+
80+func M () = valueOrErrorMessage(addressFromString(getStringValue(this, F)), "Coordinator not set")
7981
8082
81-func M () = addressFromString(getStringValue(L(), G))
83+func N () = addressFromString(getStringValue(M(), H))
8284
8385
84-func N () = fromBase58String(getStringValue(L(), H))
86+func O () = fromBase58String(getStringValue(M(), I))
8587
8688
87-func O () = fromBase58String(getStringValue(L(), I))
89+func P () = fromBase58String(getStringValue(M(), J))
8890
8991
90-func P () = valueOrErrorMessage(addressFromString(getStringValue(L(), J)), "Quote assete staking not set")
92+func Q () = valueOrErrorMessage(addressFromString(getStringValue(M(), K)), "Quote assete staking not set")
9193
9294
93-func Q () = valueOrErrorMessage(addressFromString(getStringValue(L(), K)), "Insurance not set")
95+func R () = valueOrErrorMessage(addressFromString(getStringValue(M(), L)), "Insurance not set")
9496
9597
96-func R () = valueOrErrorMessage(addressFromString(getStringValue(L(), F)), "Insurance not set")
98+func S () = valueOrErrorMessage(addressFromString(getStringValue(M(), G)), "Insurance not set")
9799
98100
99-let S = 1
101+let T = 1
100102
101-let T = 2
103+let U = 2
102104
103-let U = 60
105+let V = 60
104106
105-let V = 15
107+let W = 15
106108
107-let W = 1000
109+let X = 1000
108110
109-let X = (1 * (((((10 * 10) * 10) * 10) * 10) * 10))
111+let Y = (1 * (((((10 * 10) * 10) * 10) * 10) * 10))
110112
111-let Y = (86400 * X)
113+let Z = (86400 * Y)
112114
113-let Z = 100
115+let aa = 100
114116
115-let aa = 1
117+let ab = 1
116118
117-let ab = 2
119+let ac = 2
118120
119-func ac (ad) = (toString(ad) + ",")
121+func ad (ae) = (toString(ae) + ",")
120122
121123
122-func ae (ad,af) = fraction(ad, X, af, HALFEVEN)
124+func af (ae,ag) = fraction(ae, Y, ag, HALFEVEN)
123125
124126
125-func ag (ad,af) = fraction(ad, af, X, HALFEVEN)
127+func ah (ae,ag) = fraction(ae, ag, Y, HALFEVEN)
126128
127129
128-func ah (ad) = if ((ad > 0))
129- then ad
130- else -(ad)
130+func ai (ae) = if ((ae > 0))
131+ then ae
132+ else -(ae)
131133
132134
133-func ai (aj,ak) = ((aj + "_") + ak)
135+func aj (ak,al) = ((ak + "_") + al)
134136
135137
136-func al (am,an,ao) = {
137- let ap = (am - an)
138- if (if (ao)
139- then (0 > ap)
138+func am (an,ao,ap) = {
139+ let aq = (an - ao)
140+ if (if (ap)
141+ then (0 > aq)
140142 else false)
141143 then throw("Invalid margin")
142- else if (if (!(ao))
143- then (ap >= 0)
144+ else if (if (!(ap))
145+ then (aq >= 0)
144146 else false)
145147 then throw("Invalid margin")
146148 else true
147149 }
148150
149151
150-func aq (ar) = valueOrErrorMessage(getInteger(this, ar), ("no value for " + ar))
152+func ar (as) = valueOrErrorMessage(getInteger(this, as), ("no value for " + as))
151153
152154
153-func as () = aq(c)
155+func at () = ar(c)
154156
155157
156-func at () = aq(j)
158+func au () = ar(j)
157159
158160
159-func au () = aq(l)
161+func av () = ar(l)
160162
161163
162-func av () = aq(y)
164+func aw () = ar(z)
163165
164166
165-func aw () = aq(z)
167+func ax () = ar(A)
166168
167169
168-func ax () = aq(A)
170+func ay () = ar(v)
169171
170172
171-func ay () = aq(B)
173+func az () = ar(C)
172174
173175
174-func az () = aq(C)
176+func aA () = ar(D)
175177
176178
177-func aA () = aq(v)
179+func aB () = ar(w)
178180
179181
180-func aB () = aq(D)
182+func aC () = ar(E)
181183
182184
183-func aC () = aq(w)
185+func aD () = ar(x)
184186
185187
186-func aD () = aq(k)
188+func aE () = ar(k)
187189
188190
189-func aE () = (aD() * X)
191+func aF () = (aE() * Y)
190192
191193
192-func aF () = (aD() * W)
194+func aG () = (aE() * X)
193195
194196
195-func aG () = aq(m)
197+func aH () = ar(m)
196198
197199
198-func aH () = aq(n)
200+func aI () = ar(n)
199201
200202
201-func aI () = aq(o)
203+func aJ () = ar(o)
202204
203205
204-func aJ () = aq(p)
206+func aK () = ar(p)
205207
206208
207-func aK (aL) = {
208- let aM = getInteger(this, ai(d, aL))
209- let aN = aM
210- if ($isInstanceOf(aN, "Int"))
209+func aL (aM) = {
210+ let aN = getInteger(this, aj(d, aM))
211+ let aO = aN
212+ if ($isInstanceOf(aO, "Int"))
211213 then {
212- let aO = aN
213- $Tuple4(aO, getIntegerValue(this, ai(e, aL)), getIntegerValue(this, ai(f, aL)), getIntegerValue(this, ai(g, aL)))
214+ let aP = aO
215+ $Tuple4(aP, getIntegerValue(this, aj(e, aM)), getIntegerValue(this, aj(f, aM)), getIntegerValue(this, aj(g, aM)))
214216 }
215217 else $Tuple4(0, 0, 0, 0)
216218 }
217219
218220
219-func aP (aQ) = if ((aK(aQ)._1 == 0))
221+func aQ (aR) = if ((aL(aR)._1 == 0))
220222 then throw("No open position")
221223 else true
222224
223225
224-func aR () = valueOrElse(getBoolean(this, h), false)
226+func aS () = valueOrElse(getBoolean(this, h), false)
225227
226228
227-func aS () = valueOrElse(getBoolean(this, i), false)
229+func aT () = valueOrElse(getBoolean(this, i), false)
228230
229231
230-func aT (aU,aV,aW) = if (aU)
232+func aU (aV,aW,aX) = if (aV)
231233 then {
232- let aX = (aw() - aW)
233- if ((0 >= aX))
234+ let aY = (ax() - aX)
235+ if ((0 >= aY))
234236 then throw("Tx lead to base asset reserve <= 0, revert")
235- else $Tuple5((av() + aV), aX, (ax() - aW), (ay() + aW), (az() + aV))
237+ else $Tuple5((aw() + aW), aY, (ay() - aX), (az() + aX), (aA() + aW))
236238 }
237239 else {
238- let aY = (av() - aV)
239- if ((0 >= aY))
240+ let aZ = (aw() - aW)
241+ if ((0 >= aZ))
240242 then throw("Tx lead to base quote reserve <= 0, revert")
241- else $Tuple5(aY, (aw() + aW), (ax() + aW), (ay() - aW), (az() - aV))
243+ else $Tuple5(aZ, (ax() + aX), (ay() + aX), (az() - aX), (aA() - aW))
242244 }
243245
244246
245-func aZ (aU,aV) = {
246- let ba = av()
247+func ba (aV,aW) = {
247248 let bb = aw()
248- let bc = ae(ba, bb)
249- let bd = ag(aV, bc)
250- let ar = ag(ba, bb)
251- let be = if (aU)
252- then (ba + aV)
253- else (ba - aV)
254- let bf = ae(ar, be)
255- let bg = ah((bf - bb))
256- let bh = if (aU)
257- then bg
258- else -(bg)
259- let bi = ((bd - bg) / bd)
260- let bj = aJ()
261- if ((bi > bj))
262- then throw(((("Price impact " + toString(bi)) + " > max price impact ") + toString(bj)))
249+ let bc = ax()
250+ let bd = af(bb, bc)
251+ let be = ah(aW, bd)
252+ let as = ah(bb, bc)
253+ let bf = if (aV)
254+ then (bb + aW)
255+ else (bb - aW)
256+ let bg = af(as, bf)
257+ let bh = ai((bg - bc))
258+ let bi = if (aV)
259+ then bh
260+ else -(bh)
261+ let bj = ((be - bh) / be)
262+ let bk = aK()
263+ if ((bj > bk))
264+ then throw(((("Price impact " + toString(bj)) + " > max price impact ") + toString(bk)))
263265 else {
264- let bk = aT(aU, aV, bg)
265- let bl = bk._1
266- let bm = bk._2
267- let bn = bk._3
268- let bo = bk._4
269- let bp = bk._5
270- $Tuple6(bh, bl, bm, bn, bo, bp)
266+ let bl = aU(aV, aW, bh)
267+ let bm = bl._1
268+ let bn = bl._2
269+ let bo = bl._3
270+ let bp = bl._4
271+ let bq = bl._5
272+ $Tuple6(bi, bm, bn, bo, bp, bq)
271273 }
272274 }
273275
274276
275-func bq (br,bs,bt,bu) = {
276- let bv = aA()
277- let bw = if ((br != 0))
278- then ag((bv - bt), br)
277+func br (bs,bt,bu,bv) = {
278+ let bw = aB()
279+ let bx = if ((bs != 0))
280+ then ah((bw - bu), bs)
279281 else 0
280- let bx = ((bu - bw) + bs)
281- let by = if ((0 > bx))
282- then $Tuple2(0, ah(bx))
283- else $Tuple2(ah(bx), 0)
284- let bz = by._1
285- let bA = by._2
286- $Tuple4(bz, bA, bw, bv)
282+ let by = ((bv - bx) + bt)
283+ let bz = if ((0 > by))
284+ then $Tuple2(0, ai(by))
285+ else $Tuple2(ai(by), 0)
286+ let bA = bz._1
287+ let bB = bz._2
288+ $Tuple4(bA, bB, bx, bw)
287289 }
288290
289291
290-func bB (bC,aW,bD,bE) = if ((aW == 0))
292+func bC (bD,aX,bE,bF) = if ((aX == 0))
291293 then throw("Invalid base asset amount")
292294 else {
293- let ar = ag(bD, bE)
294- let bF = if (bC)
295- then (bE + aW)
296- else (bE - aW)
297- let bG = ae(ar, bF)
298- let bH = ah((bG - bD))
299- let bI = aT(!(bC), bH, aW)
300- let bl = bI._1
301- let bm = bI._2
302- let bn = bI._3
303- let bo = bI._4
304- let bp = bI._5
305- $Tuple6(bH, bl, bm, bn, bo, bp)
295+ let as = ah(bE, bF)
296+ let bG = if (bD)
297+ then (bF + aX)
298+ else (bF - aX)
299+ let bH = af(as, bG)
300+ let bI = ai((bH - bE))
301+ let bJ = aU(!(bD), bI, aX)
302+ let bm = bJ._1
303+ let bn = bJ._2
304+ let bo = bJ._3
305+ let bp = bJ._4
306+ let bq = bJ._5
307+ $Tuple6(bI, bm, bn, bo, bp, bq)
306308 }
307309
308310
309-func bJ () = {
310- let bK = valueOrErrorMessage(addressFromString(getStringValue(this, b)), "")
311- let bL = getStringValue(this, a)
312- getIntegerValue(bK, bL)
313- }
314-
315-
316-func bM () = {
317- let ba = av()
318- let bb = aw()
319- ae(ba, bb)
311+func bK () = {
312+ let bL = valueOrErrorMessage(addressFromString(getStringValue(this, b)), "")
313+ let bM = getStringValue(this, a)
314+ getIntegerValue(bL, bM)
320315 }
321316
322317
323318 func bN () = {
324- let bO = bJ()
325- let bP = bM()
326- (ae(ah((bO - bP)), bO) > aI())
319+ let bb = aw()
320+ let bc = ax()
321+ af(bb, bc)
327322 }
328323
329324
330-func bQ (aQ,bR) = {
331- let bS = aK(aQ)
332- let aO = bS._1
333- let bT = bS._2
334- let bU = bS._3
335- let bV = bS._4
336- let bW = ah(aO)
337- if ((bW == 0))
325+func bO () = {
326+ let bP = bK()
327+ let bQ = bN()
328+ (af(ai((bP - bQ)), bP) > aJ())
329+ }
330+
331+
332+func bR (aR,bS) = {
333+ let bT = aL(aR)
334+ let aP = bT._1
335+ let bU = bT._2
336+ let bV = bT._3
337+ let bW = bT._4
338+ let bX = ai(aP)
339+ if ((bX == 0))
338340 then throw("Invalid position size")
339341 else {
340- let bX = (0 > aO)
341- let bY = if ((bR == aa))
342+ let bY = (0 > aP)
343+ let bZ = if ((bS == ab))
342344 then {
343- let bZ = bB(!(bX), bW, av(), aw())
344- let ca = bZ._1
345- let cb = bZ._2
346- let cc = bZ._3
347- let cd = bZ._4
348- ca
345+ let ca = bC(!(bY), bX, aw(), ax())
346+ let cb = ca._1
347+ let cc = ca._2
348+ let cd = ca._3
349+ let ce = ca._4
350+ cb
349351 }
350- else (bW * bJ())
351- let ce = if (bX)
352- then (bU - bY)
353- else (bY - bU)
354- $Tuple2(bY, ce)
352+ else (bX * bK())
353+ let cf = if (bY)
354+ then (bV - bZ)
355+ else (bZ - bV)
356+ $Tuple2(bZ, cf)
355357 }
356358 }
357359
358360
359-func cf (aQ,bR) = {
360- func cg () = 0
361+func cg (aR,bS) = {
362+ func ch () = 0
361363
362- let ch = aK(aQ)
363- let aO = ch._1
364- let bT = ch._2
365- let bU = ch._3
366- let bV = ch._4
367- let ci = bQ(aQ, bR)
368- let bY = ci._1
369- let ce = ci._2
370- let cj = bq(aO, bT, bV, ce)
371- let bz = cj._1
372- let bA = cj._2
373- ae((bz - bA), bY)
364+ let ci = aL(aR)
365+ let aP = ci._1
366+ let bU = ci._2
367+ let cj = ci._3
368+ let bW = ci._4
369+ let ck = bR(aR, bS)
370+ let bZ = ck._1
371+ let cf = ck._2
372+ let cl = br(aP, bU, bW, cf)
373+ let bA = cl._1
374+ let bB = cl._2
375+ af((bA - bB), bZ)
374376 }
375377
376378
377-func ck (aQ) = cf(aQ, aa)
379+func cm (aR) = cg(aR, ab)
378380
379381
380-func cl (aQ) = {
381- let cm = aK(aQ)
382- let aO = cm._1
383- let bT = cm._2
384- let bU = cm._3
385- let bV = cm._4
386- let cn = bQ(aQ, aa)
387- let cb = cn._1
388- let ce = cn._2
389- let co = bq(aO, bT, bV, ce)
390- let bz = co._1
391- let bA = co._2
392- let cc = co._3
393- let cp = -(aO)
394- let cq = ce
395- let cr = -(bz)
396- let cs = bB((aO > 0), ah(aO), av(), aw())
397- let ct = cs._1
398- let be = cs._2
399- let bf = cs._3
400- let cu = cs._4
401- let cv = cs._5
402- let cw = cs._6
403- let cx = (aB() - bU)
404- $Tuple11(cp, bA, cq, cr, be, bf, cu, cv, cw, cx, ct)
382+func cn (aR) = {
383+ let co = aL(aR)
384+ let aP = co._1
385+ let bU = co._2
386+ let cj = co._3
387+ let bW = co._4
388+ let cp = bR(aR, ab)
389+ let cc = cp._1
390+ let cf = cp._2
391+ let cq = br(aP, bU, bW, cf)
392+ let bA = cq._1
393+ let bB = cq._2
394+ let cd = cq._3
395+ let cr = -(aP)
396+ let cs = cf
397+ let ct = -(bA)
398+ let cu = bC((aP > 0), ai(aP), aw(), ax())
399+ let cv = cu._1
400+ let bf = cu._2
401+ let bg = cu._3
402+ let cw = cu._4
403+ let cx = cu._5
404+ let cy = cu._6
405+ let cz = (aC() - cj)
406+ $Tuple11(cr, bB, cs, ct, bf, bg, cw, cx, cy, cz, cv)
405407 }
406408
407409
408-func cy () = {
409- let cz = ((lastBlock.timestamp / 1000) / 60)
410- let cA = (cz - V)
411- let cB = valueOrElse(getString(this, q), "")
412- let cC = split(cB, ",")
413- func cD (cE,cF) = if ((cA >= parseIntValue(cF)))
414- then (cE :+ parseIntValue(cF))
415- else cE
410+func cA () = {
411+ let cB = ((lastBlock.timestamp / 1000) / 60)
412+ let cC = (cB - W)
413+ let cD = valueOrElse(getString(this, q), "")
414+ let cE = split(cD, ",")
415+ func cF (cG,cH) = if ((cC >= parseIntValue(cH)))
416+ then (cG :+ parseIntValue(cH))
417+ else cG
416418
417- let cG = {
418- let cH = cC
419- let cI = size(cH)
420- let cJ = nil
421- func cK (cL,cM) = if ((cM >= cI))
422- then cL
423- else cD(cL, cH[cM])
419+ let cI = {
420+ let cJ = cE
421+ let cK = size(cJ)
422+ let cL = nil
423+ func cM (cN,cO) = if ((cO >= cK))
424+ then cN
425+ else cF(cN, cJ[cO])
424426
425- func cN (cL,cM) = if ((cM >= cI))
426- then cL
427- else throw("List size exceeds 15")
427+ func cP (cN,cO) = if ((cO >= cK))
428+ then cN
429+ else throw("List size exceeds 20")
428430
429- cN(cK(cK(cK(cK(cK(cK(cK(cK(cK(cK(cK(cK(cK(cK(cK(cJ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
431+ cP(cM(cM(cM(cM(cM(cM(cM(cM(cM(cM(cM(cM(cM(cM(cM(cM(cM(cM(cM(cM(cL, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
430432 }
431- let cO = max(cG)
432- let cP = valueOrElse(getInteger(this, r), 0)
433- let cQ = valueOrElse(getInteger(this, ((s + "_") + toString(cP))), 0)
434- let cR = valueOrElse(getInteger(this, ((t + "_") + toString(cP))), 0)
435- let cS = (cQ + ((cz - cP) * cR))
436- let cT = valueOrElse(getInteger(this, ((s + "_") + toString(cO))), 0)
437- let cU = valueOrElse(getInteger(this, ((t + "_") + toString(cO))), 0)
438- let cV = (cT + ((cA - cO) * cU))
439- ((cS - cV) / V)
433+ let cQ = max(cI)
434+ let cR = valueOrElse(getInteger(this, r), 0)
435+ let cS = valueOrElse(getInteger(this, ((s + "_") + toString(cR))), 0)
436+ let cT = valueOrElse(getInteger(this, ((t + "_") + toString(cR))), 0)
437+ let cU = (cS + ((cB - cR) * cT))
438+ let cV = valueOrElse(getInteger(this, ((s + "_") + toString(cQ))), 0)
439+ let cW = valueOrElse(getInteger(this, ((t + "_") + toString(cQ))), 0)
440+ let cX = (cV + ((cC - cQ) * cW))
441+ ((cU - cX) / W)
440442 }
441443
442444
443-func cW (cX,cY,cZ,da,db,dc,dd) = [IntegerEntry(l, cX), IntegerEntry(m, cY), IntegerEntry(n, cZ), IntegerEntry(k, da), IntegerEntry(j, db), IntegerEntry(o, dc), IntegerEntry(p, dd)]
445+func cY (cZ,da,db,dc,dd,de,df) = [IntegerEntry(l, cZ), IntegerEntry(m, da), IntegerEntry(n, db), IntegerEntry(k, dc), IntegerEntry(j, dd), IntegerEntry(o, de), IntegerEntry(p, df)]
444446
445447
446-func de (df,dg,bv,dh) = [IntegerEntry(A, df), IntegerEntry(w, dg), IntegerEntry(v, bv), IntegerEntry(x, dh)]
448+func dg (dh,di,bw,dj) = [IntegerEntry(v, dh), IntegerEntry(x, di), IntegerEntry(w, bw), IntegerEntry(y, dj)]
447449
448450
449-func di (ak,dj,dk,dl,dm) = [IntegerEntry(ai(d, ak), dj), IntegerEntry(ai(e, ak), dk), IntegerEntry(ai(f, ak), dl), IntegerEntry(ai(g, ak), dm)]
451+func dk (al,dl,dm,dn,do) = [IntegerEntry(aj(d, al), dl), IntegerEntry(aj(e, al), dm), IntegerEntry(aj(f, al), dn), IntegerEntry(aj(g, al), do)]
450452
451453
452-func dn (do) = {
453- let cz = ((lastBlock.timestamp / 1000) / 60)
454- let dp = valueOrElse(getInteger(this, r), 0)
455- if ((dp > cz))
454+func dp (dq) = {
455+ let cB = ((lastBlock.timestamp / 1000) / 60)
456+ let dr = valueOrElse(getInteger(this, r), 0)
457+ if ((dr > cB))
456458 then throw("TWAP out-of-order")
457459 else {
458- let cP = if ((dp == 0))
459- then cz
460- else dp
461- let cB = valueOrElse(getString(this, q), "")
462- let dq = split(cB, ",")
463- let cC = if ((size(dq) > V))
464- then (removeByIndex(dq, 0) :+ toString(cz))
465- else (dq :+ toString(cz))
466- let dr = valueOrElse(getInteger(this, ((s + "_") + toString(dp))), 0)
467- let ds = valueOrElse(getInteger(this, ((t + "_") + toString(dp))), do)
468- let dt = (dr + ((cz - cP) * ds))
469- func du (cE,dv) = ((cE + dv) + ",")
460+ let cR = if ((dr == 0))
461+ then cB
462+ else dr
463+ let cD = valueOrElse(getString(this, q), "")
464+ let ds = split(cD, ",")
465+ let cE = if ((size(ds) > W))
466+ then (removeByIndex(ds, 0) :+ toString(cB))
467+ else (ds :+ toString(cB))
468+ let dt = valueOrElse(getInteger(this, ((s + "_") + toString(dr))), 0)
469+ let du = valueOrElse(getInteger(this, ((t + "_") + toString(dr))), dq)
470+ let dv = (dt + ((cB - cR) * du))
471+ func dw (cG,dx) = ((cG + dx) + ",")
470472
471- let dw = {
472- let cH = cC
473- let cI = size(cH)
474- let cJ = ""
475- func cK (cL,cM) = if ((cM >= cI))
476- then cL
477- else du(cL, cH[cM])
473+ let dy = {
474+ let cJ = cE
475+ let cK = size(cJ)
476+ let cL = ""
477+ func cM (cN,cO) = if ((cO >= cK))
478+ then cN
479+ else dw(cN, cJ[cO])
478480
479- func cN (cL,cM) = if ((cM >= cI))
480- then cL
481- else throw("List size exceeds 15")
481+ func cP (cN,cO) = if ((cO >= cK))
482+ then cN
483+ else throw("List size exceeds 20")
482484
483- cN(cK(cK(cK(cK(cK(cK(cK(cK(cK(cK(cK(cK(cK(cK(cK(cJ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
485+ cP(cM(cM(cM(cM(cM(cM(cM(cM(cM(cM(cM(cM(cM(cM(cM(cM(cM(cM(cM(cM(cL, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
484486 }
485- let dx = dropRight(dw, 1)
486- let dy = if ((take(dx, 1) == ","))
487- then drop(dx, 1)
488- else dx
489-[IntegerEntry(((s + "_") + toString(cz)), dt), IntegerEntry(((t + "_") + toString(cz)), do), IntegerEntry(r, cz), StringEntry(q, dy)]
487+ let dz = dropRight(dy, 1)
488+ let dA = if ((take(dz, 1) == ","))
489+ then drop(dz, 1)
490+ else dz
491+[IntegerEntry(((s + "_") + toString(cB)), dv), IntegerEntry(((t + "_") + toString(cB)), dq), IntegerEntry(r, cB), StringEntry(q, dA)]
490492 }
491493 }
492494
493495
494-func dz (ba,bb,dA,dB,dC,dD) = ([IntegerEntry(y, ba), IntegerEntry(z, bb), IntegerEntry(A, dA), IntegerEntry(B, dB), IntegerEntry(C, dC), IntegerEntry(D, dD)] ++ dn(ae(ba, bb)))
496+func dB (bb,bc,dC,dD,dE,dF) = ([IntegerEntry(z, bb), IntegerEntry(A, bc), IntegerEntry(v, dC), IntegerEntry(C, dD), IntegerEntry(D, dE), IntegerEntry(E, dF)] ++ dp(af(bb, bc)))
495497
496498
497-func dE (ak) = [DeleteEntry(ai(d, ak)), DeleteEntry(ai(e, ak)), DeleteEntry(ai(f, ak)), DeleteEntry(ai(g, ak))]
499+func dG (al) = [DeleteEntry(aj(d, al)), DeleteEntry(aj(e, al)), DeleteEntry(aj(f, al)), DeleteEntry(aj(g, al))]
498500
499501
500-func dF (ak,dG) = {
501- let dH = assetBalance(this, O())
502- if ((dG > dH))
503- then throw(((("Unable to withdraw " + toString(dG)) + " from contract balance ") + toString(dH)))
504- else [ScriptTransfer(ak, dG, O())]
502+func dH (al,dI) = {
503+ let dJ = assetBalance(this, P())
504+ if ((dI > dJ))
505+ then throw(((("Unable to withdraw " + toString(dI)) + " from contract balance ") + toString(dJ)))
506+ else [ScriptTransfer(al, dI, P())]
505507 }
506508
507509
508-func dI (dJ) = if ((0 > dJ))
510+func dK (dL) = if ((0 > dL))
509511 then throw("Balance")
510- else [IntegerEntry(c, dJ)]
512+ else [IntegerEntry(c, dL)]
511513
512514
513-func dK (dJ) = [ScriptTransfer(Q(), dJ, O())]
515+func dM (dL) = [ScriptTransfer(R(), dL, P())]
514516
515517
516-@Callable(dJ)
517-func pause () = if ((dJ.caller != M()))
518+@Callable(dL)
519+func pause () = if ((dL.caller != N()))
518520 then throw("Invalid togglePause params")
519521 else [BooleanEntry(i, true)]
520522
521523
522524
523-@Callable(dJ)
524-func unpause () = if ((dJ.caller != M()))
525+@Callable(dL)
526+func unpause () = if ((dL.caller != N()))
525527 then throw("Invalid togglePause params")
526528 else [BooleanEntry(i, false)]
527529
528530
529531
530-@Callable(dJ)
531-func changeSettings (cX,cY,cZ,da,db,dc,dd) = if ((dJ.caller != M()))
532+@Callable(dL)
533+func changeSettings (cZ,da,db,dc,dd,de,df) = if ((dL.caller != N()))
532534 then throw("Invalid changeSettings params")
533- else cW(cX, cY, cZ, da, db, dc, dd)
535+ else cY(cZ, da, db, dc, dd, de, df)
534536
535537
536538
537-@Callable(dJ)
538-func initialize (ba,bb,da,cX,cY,cZ,db,dL,dM,dN,dc,dd) = if (if (if (if (if (if (if (if (if (if ((0 >= ba))
539+@Callable(dL)
540+func initialize (bb,bc,dc,cZ,da,db,dd,dN,dO,dP,de,df) = if (if (if (if (if (if (if (if (if (if ((0 >= bb))
539541 then true
540- else (0 >= bb))
542+ else (0 >= bc))
543+ then true
544+ else (0 >= dc))
545+ then true
546+ else (0 >= cZ))
541547 then true
542548 else (0 >= da))
543549 then true
544- else (0 >= cX))
545- then true
546- else (0 >= cY))
547- then true
548- else (0 >= cZ))
549- then true
550550 else (0 >= db))
551- then true
552- else (0 >= dc))
553551 then true
554552 else (0 >= dd))
555553 then true
556- else aR())
554+ else (0 >= de))
555+ then true
556+ else (0 >= df))
557+ then true
558+ else aS())
557559 then throw("Invalid initialize parameters")
558- else ((((dz(ba, bb, 0, 0, 0, 0) ++ cW(cX, cY, cZ, da, db, dc, dd)) ++ de(0, (lastBlock.timestamp + da), 0, 0)) ++ dI(0)) ++ [BooleanEntry(h, true), StringEntry(b, dL), StringEntry(a, dM), StringEntry(E, dN)])
560+ else ((((dB(bb, bc, 0, 0, 0, 0) ++ cY(cZ, da, db, dc, dd, de, df)) ++ dg(0, (lastBlock.timestamp + dc), 0, 0)) ++ dK(0)) ++ [BooleanEntry(h, true), StringEntry(b, dN), StringEntry(a, dO), StringEntry(F, dP)])
559561
560562
561563
562-@Callable(dJ)
563-func decreasePosition (dO,dG,dP,dQ) = if (if (if (if (if (if (if ((dO != S))
564- then (dO != T)
564+@Callable(dL)
565+func decreasePosition (dQ,dI,dR,dS) = if (if (if (if (if (if (if ((dQ != T))
566+ then (dQ != U)
565567 else false)
566568 then true
567- else (0 >= dG))
569+ else (0 >= dI))
568570 then true
569- else if (((1 * X) > dP))
571+ else if (((1 * Y) > dR))
570572 then true
571- else (dP > (3 * X)))
573+ else (dR > (3 * Y)))
572574 then true
573- else !(aR()))
575+ else !(aS()))
574576 then true
575- else !(al(ae(X, dP), au(), true)))
577+ else !(am(af(Y, dR), av(), true)))
576578 then true
577- else aS())
579+ else aT())
578580 then throw("Invalid decreasePosition parameters")
579581 else {
580- let dR = aK(toString(dJ.caller))
581- let dS = dR._1
582- let dT = dR._2
583- let dU = dR._3
584- let dV = dR._4
585- let dW = (dS == 0)
586- let dX = if ((dS > 0))
587- then (dO == S)
588- else (dO == T)
589- let dY = if (!(dW))
590- then dX
582+ let dT = aL(toString(dL.caller))
583+ let dU = dT._1
584+ let dV = dT._2
585+ let dW = dT._3
586+ let dX = dT._4
587+ let dY = (dU == 0)
588+ let dZ = if ((dU > 0))
589+ then (dQ == T)
590+ else (dQ == U)
591+ let ea = if (!(dY))
592+ then dZ
591593 else false
592- let dZ = (dO == S)
593- let ea = if (if (dW)
594+ let eb = (dQ == T)
595+ let ec = if (if (dY)
594596 then true
595- else dY)
597+ else ea)
596598 then throw("Use increasePosition to open new or increase position")
597599 else {
598- let eb = ag(dG, dP)
599- let ec = bQ(toString(dJ.caller), aa)
600- let ed = ec._1
601- let ce = ec._2
602- if ((ed > eb))
600+ let ed = ah(dI, dR)
601+ let ee = bR(toString(dL.caller), ab)
602+ let ef = ee._1
603+ let cf = ee._2
604+ if ((ef > ed))
603605 then {
604- let ee = aZ(dZ, eb)
605- let cp = ee._1
606- let be = ee._2
607- let bf = ee._3
608- let cu = ee._4
609- let cv = ee._5
610- let cw = ee._6
611- let ef = ah(cp)
612- if (if ((dQ != 0))
613- then (dQ > ef)
606+ let eg = ba(eb, ed)
607+ let cr = eg._1
608+ let bf = eg._2
609+ let bg = eg._3
610+ let cw = eg._4
611+ let cx = eg._5
612+ let cy = eg._6
613+ let eh = ai(cr)
614+ if (if ((dS != 0))
615+ then (dS > eh)
614616 else false)
615- then throw(((("Too little basse asset exchanged, got " + toString(ef)) + " expected ") + toString(dQ)))
617+ then throw(((("Too little basse asset exchanged, got " + toString(eh)) + " expected ") + toString(dS)))
616618 else {
617- let cq = if ((dS != 0))
618- then ae(ag(ce, ef), dS)
619+ let cs = if ((dU != 0))
620+ then af(ah(cf, eh), dU)
619621 else 0
620- let eg = bq(dS, dT, dV, cq)
621- let bz = eg._1
622- let bA = eg._2
623- let bw = eg._3
624- let eh = eg._4
625- let ct = eb
626- let ei = (ce - cq)
627- let ej = if ((dS > 0))
628- then ((ed - ct) - ei)
629- else ((ei + ed) - ct)
630- $Tuple10((dS + cp), bz, ah(ej), eh, bf, be, cu, cv, cw, (aB() - eb))
622+ let ei = br(dU, dV, dX, cs)
623+ let bA = ei._1
624+ let bB = ei._2
625+ let bx = ei._3
626+ let ej = ei._4
627+ let cv = ed
628+ let ek = (cf - cs)
629+ let el = if ((dU > 0))
630+ then ((ef - cv) - ek)
631+ else ((ek + ef) - cv)
632+ $Tuple10((dU + cr), bA, ai(el), ej, bg, bf, cw, cx, cy, (aC() - ed))
631633 }
632634 }
633635 else throw("Close position first")
634636 }
635- let ek = ea._1
636- let el = ea._2
637- let em = ea._3
638- let en = ea._4
639- let bf = ea._5
640- let be = ea._6
641- let cu = ea._7
642- let cv = ea._8
643- let cw = ea._9
644- let cx = ea._10
645- (di(toString(dJ.caller), ek, el, em, en) ++ dz(be, bf, cu, cv, cw, cx))
637+ let em = ec._1
638+ let en = ec._2
639+ let eo = ec._3
640+ let ep = ec._4
641+ let bg = ec._5
642+ let bf = ec._6
643+ let cw = ec._7
644+ let cx = ec._8
645+ let cy = ec._9
646+ let cz = ec._10
647+ (dk(toString(dL.caller), em, en, eo, ep) ++ dB(bf, bg, cw, cx, cy, cz))
646648 }
647649
648650
649651
650-@Callable(dJ)
651-func increasePosition (dO,dP,dQ) = {
652- let eo = dJ.payments[0].amount
653- if (if (if (if (if (if (if (if ((dO != S))
654- then (dO != T)
652+@Callable(dL)
653+func increasePosition (dQ,dR,dS) = {
654+ let eq = dL.payments[0].amount
655+ if (if (if (if (if (if (if (if ((dQ != T))
656+ then (dQ != U)
655657 else false)
656658 then true
657- else (0 >= eo))
659+ else (0 >= eq))
658660 then true
659- else if (((1 * X) > dP))
661+ else if (((1 * Y) > dR))
660662 then true
661- else (dP > (3 * X)))
663+ else (dR > (3 * Y)))
662664 then true
663- else !(aR()))
665+ else !(aS()))
664666 then true
665- else (dJ.payments[0].assetId != O()))
667+ else (dL.payments[0].assetId != P()))
666668 then true
667- else !(al(ae(X, dP), au(), true)))
669+ else !(am(af(Y, dR), av(), true)))
668670 then true
669- else aS())
671+ else aT())
670672 then throw("Invalid increasePosition parameters")
671673 else {
672- let ep = ag(eo, at())
673- let dG = (eo - ep)
674- let eq = aK(toString(dJ.caller))
675- let dS = eq._1
676- let dT = eq._2
677- let dU = eq._3
678- let dV = eq._4
679- let dW = (dS == 0)
680- let dX = if ((dS > 0))
681- then (dO == S)
682- else (dO == T)
683- let dY = if (!(dW))
684- then dX
674+ let er = ah(eq, au())
675+ let dI = (eq - er)
676+ let es = aL(toString(dL.caller))
677+ let dU = es._1
678+ let dV = es._2
679+ let dW = es._3
680+ let dX = es._4
681+ let dY = (dU == 0)
682+ let dZ = if ((dU > 0))
683+ then (dQ == T)
684+ else (dQ == U)
685+ let ea = if (!(dY))
686+ then dZ
685687 else false
686- let dZ = (dO == S)
687- let er = if (if (dW)
688+ let eb = (dQ == T)
689+ let et = if (if (dY)
688690 then true
689- else dY)
691+ else ea)
690692 then {
691- let eb = ag(dG, dP)
692- let es = aZ(dZ, eb)
693- let bh = es._1
694- let be = es._2
695- let bf = es._3
696- let cu = es._4
697- let cv = es._5
698- let cw = es._6
699- if (if ((dQ != 0))
700- then (dQ > ah(bh))
693+ let ed = ah(dI, dR)
694+ let eu = ba(eb, ed)
695+ let bi = eu._1
696+ let bf = eu._2
697+ let bg = eu._3
698+ let cw = eu._4
699+ let cx = eu._5
700+ let cy = eu._6
701+ if (if ((dS != 0))
702+ then (dS > ai(bi))
701703 else false)
702- then throw(((("Limit error: " + toString(ah(bh))) + " < ") + toString(dQ)))
704+ then throw(((("Limit error: " + toString(ai(bi))) + " < ") + toString(dS)))
703705 else {
704- let ek = (dS + bh)
705- let et = ae(eb, dP)
706- let eu = bq(dS, dT, dV, et)
707- let bz = eu._1
708- let cb = eu._2
709- let cc = eu._3
710- let eh = eu._4
711- $Tuple10(ek, bz, (dU + eb), eh, bf, be, cu, cv, cw, (aB() + eb))
706+ let em = (dU + bi)
707+ let ev = af(ed, dR)
708+ let ew = br(dU, dV, dX, ev)
709+ let bA = ew._1
710+ let cc = ew._2
711+ let cd = ew._3
712+ let ej = ew._4
713+ $Tuple10(em, bA, (dW + ed), ej, bg, bf, cw, cx, cy, (aC() + ed))
712714 }
713715 }
714716 else {
715- let eb = ag(dG, dP)
716- let ev = bQ(toString(dJ.caller), aa)
717- let ed = ev._1
718- let ce = ev._2
719- if ((ed > eb))
717+ let ed = ah(dI, dR)
718+ let ex = bR(toString(dL.caller), ab)
719+ let ef = ex._1
720+ let cf = ex._2
721+ if ((ef > ed))
720722 then throw("Use decreasePosition to decrease position size")
721723 else throw("Close position first")
722724 }
723- let ek = er._1
724- let el = er._2
725- let em = er._3
726- let en = er._4
727- let bf = er._5
728- let be = er._6
729- let cu = er._7
730- let cv = er._8
731- let cw = er._9
732- let cx = er._10
733- let ew = (ep / 2)
734- let ex = (ep - ew)
735- let ey = invoke(P(), "lockNeutrinoSP", [toString(Q()), Z], [AttachedPayment(O(), dG)])
736- if ((ey == ey))
725+ let em = et._1
726+ let en = et._2
727+ let eo = et._3
728+ let ep = et._4
729+ let bg = et._5
730+ let bf = et._6
731+ let cw = et._7
732+ let cx = et._8
733+ let cy = et._9
734+ let cz = et._10
735+ let ey = (er / 2)
736+ let ez = (er - ey)
737+ let eA = invoke(Q(), "lockNeutrinoSP", [toString(R()), aa], [AttachedPayment(P(), dI)])
738+ if ((eA == eA))
737739 then {
738- let ez = invoke(R(), "deposit", nil, [AttachedPayment(O(), ex)])
739- if ((ez == ez))
740- then (((di(toString(dJ.caller), ek, el, em, en) ++ dz(be, bf, cu, cv, cw, cx)) ++ dK(ew)) ++ dI((as() + dG)))
740+ let eB = invoke(S(), "deposit", nil, [AttachedPayment(P(), ez)])
741+ if ((eB == eB))
742+ then (((dk(toString(dL.caller), em, en, eo, ep) ++ dB(bf, bg, cw, cx, cy, cz)) ++ dM(ey)) ++ dK((at() + dI)))
741743 else throw("Strict value is not equal to itself.")
742744 }
743745 else throw("Strict value is not equal to itself.")
744746 }
745747 }
746748
747749
748750
749-@Callable(dJ)
751+@Callable(dL)
750752 func addMargin () = {
751- let eo = dJ.payments[0].amount
752- if (if (if (if ((dJ.payments[0].assetId != O()))
753+ let eq = dL.payments[0].amount
754+ if (if (if (if ((dL.payments[0].assetId != P()))
753755 then true
754- else !(aP(toString(dJ.caller))))
756+ else !(aQ(toString(dL.caller))))
755757 then true
756- else !(aR()))
758+ else !(aS()))
757759 then true
758- else aS())
760+ else aT())
759761 then throw("Invalid addMargin parameters")
760762 else {
761- let ep = ag(eo, at())
762- let dG = (eo - ep)
763- let eA = aK(toString(dJ.caller))
764- let dS = eA._1
765- let dT = eA._2
766- let dU = eA._3
767- let dV = eA._4
768- let ew = (ep / 2)
769- let ex = (ep - ew)
770- let ey = invoke(P(), "lockNeutrinoSP", [toString(Q()), Z], [AttachedPayment(O(), dG)])
771- if ((ey == ey))
763+ let er = ah(eq, au())
764+ let dI = (eq - er)
765+ let eC = aL(toString(dL.caller))
766+ let dU = eC._1
767+ let dV = eC._2
768+ let dW = eC._3
769+ let dX = eC._4
770+ let ey = (er / 2)
771+ let ez = (er - ey)
772+ let eA = invoke(Q(), "lockNeutrinoSP", [toString(R()), aa], [AttachedPayment(P(), dI)])
773+ if ((eA == eA))
772774 then {
773- let ez = invoke(R(), "deposit", nil, [AttachedPayment(O(), ex)])
774- if ((ez == ez))
775- then ((di(toString(dJ.caller), dS, (dT + dJ.payments[0].amount), dU, dV) ++ dK(ew)) ++ dI((as() + dG)))
775+ let eB = invoke(S(), "deposit", nil, [AttachedPayment(P(), ez)])
776+ if ((eB == eB))
777+ then ((dk(toString(dL.caller), dU, (dV + dL.payments[0].amount), dW, dX) ++ dM(ey)) ++ dK((at() + dI)))
776778 else throw("Strict value is not equal to itself.")
777779 }
778780 else throw("Strict value is not equal to itself.")
779781 }
780782 }
781783
782784
783785
784-@Callable(dJ)
785-func removeMargin (dG) = if (if (if (if ((0 >= dG))
786+@Callable(dL)
787+func removeMargin (dI) = if (if (if (if ((0 >= dI))
786788 then true
787- else !(aP(toString(dJ.caller))))
789+ else !(aQ(toString(dL.caller))))
788790 then true
789- else !(aR()))
791+ else !(aS()))
790792 then true
791- else aS())
793+ else aT())
792794 then throw("Invalid removeMargin parameters")
793795 else {
794- let eB = aK(toString(dJ.caller))
795- let dS = eB._1
796- let dT = eB._2
797- let dU = eB._3
798- let dV = eB._4
799- let eC = -(dG)
800- let eD = bq(dS, dT, dV, eC)
801- let bz = eD._1
802- let bA = eD._2
803- let cb = eD._3
804- let eE = eD._4
805- if ((bA != 0))
796+ let eD = aL(toString(dL.caller))
797+ let dU = eD._1
798+ let dV = eD._2
799+ let dW = eD._3
800+ let dX = eD._4
801+ let eE = -(dI)
802+ let eF = br(dU, dV, dX, eE)
803+ let bA = eF._1
804+ let bB = eF._2
805+ let cc = eF._3
806+ let eG = eF._4
807+ if ((bB != 0))
806808 then throw("Invalid added margin amount")
807809 else {
808- let eF = invoke(P(), "unlockNeutrino", [dG, toBase58String(O())], nil)
809- if ((eF == eF))
810- then ((di(toString(dJ.caller), dS, bz, dU, eE) ++ dF(dJ.caller, dG)) ++ dI((as() - dG)))
810+ let eH = invoke(Q(), "unlockNeutrino", [dI, toBase58String(P())], nil)
811+ if ((eH == eH))
812+ then ((dk(toString(dL.caller), dU, bA, dW, eG) ++ dH(dL.caller, dI)) ++ dK((at() - dI)))
811813 else throw("Strict value is not equal to itself.")
812814 }
813815 }
814816
815817
816818
817-@Callable(dJ)
818-func closePosition () = if (if (if (!(aP(toString(dJ.caller))))
819+@Callable(dL)
820+func closePosition () = if (if (if (!(aQ(toString(dL.caller))))
819821 then true
820- else !(aR()))
822+ else !(aS()))
821823 then true
822- else aS())
824+ else aT())
823825 then throw("Invalid closePosition parameters")
824826 else {
825- let eG = cl(toString(dJ.caller))
826- let cb = eG._1
827- let bA = eG._2
828- let cq = eG._3
829- let cr = eG._4
830- let be = eG._5
831- let bf = eG._6
832- let cu = eG._7
833- let cv = eG._8
834- let cw = eG._9
835- let cx = eG._10
836- if ((bA > 0))
827+ let eI = cn(toString(dL.caller))
828+ let cc = eI._1
829+ let bB = eI._2
830+ let cs = eI._3
831+ let ct = eI._4
832+ let bf = eI._5
833+ let bg = eI._6
834+ let cw = eI._7
835+ let cx = eI._8
836+ let cy = eI._9
837+ let cz = eI._10
838+ if ((bB > 0))
837839 then throw("Unable to close position with bad debt")
838840 else {
839- let eH = ah(cr)
840- let eI = (as() - eH)
841- let eJ = if ((0 > eI))
842- then $Tuple2(0, ah(eI))
843- else $Tuple2(eI, 0)
844- let eK = eJ._1
845- let eL = eJ._2
846- let cg = if ((eL > 0))
841+ let eJ = ai(ct)
842+ let eK = (at() - eJ)
843+ let eL = if ((0 > eK))
844+ then $Tuple2(0, ai(eK))
845+ else $Tuple2(eK, 0)
846+ let eM = eL._1
847+ let eN = eL._2
848+ let ch = if ((eN > 0))
847849 then {
848- let eM = invoke(R(), "withdraw", [eL], nil)
849- if ((eM == eM))
850+ let eO = invoke(S(), "withdraw", [eN], nil)
851+ if ((eO == eO))
850852 then nil
851853 else throw("Strict value is not equal to itself.")
852854 }
853855 else nil
854- if ((cg == cg))
856+ if ((ch == ch))
855857 then {
856- let eF = invoke(P(), "unlockNeutrino", [(eH - eL), toBase58String(O())], nil)
857- if ((eF == eF))
858- then (((dE(toString(dJ.caller)) ++ dz(be, bf, cu, cv, cw, cx)) ++ dF(dJ.caller, eH)) ++ dI(eK))
858+ let eH = invoke(Q(), "unlockNeutrino", [(eJ - eN), toBase58String(P())], nil)
859+ if ((eH == eH))
860+ then (((dG(toString(dL.caller)) ++ dB(bf, bg, cw, cx, cy, cz)) ++ dH(dL.caller, eJ)) ++ dK(eM))
859861 else throw("Strict value is not equal to itself.")
860862 }
861863 else throw("Strict value is not equal to itself.")
862864 }
863865 }
864866
865867
866868
867-@Callable(dJ)
868-func liquidate (aQ) = {
869- let eN = if (bN())
870- then cf(aQ, ab)
871- else cf(aQ, aa)
872- if (if (if (!(al(eN, aG(), false)))
869+@Callable(dL)
870+func liquidate (aR) = {
871+ let eP = if (bO())
872+ then cg(aR, ac)
873+ else cg(aR, ab)
874+ if (if (if (!(am(eP, aH(), false)))
873875 then true
874- else !(aR()))
876+ else !(aS()))
875877 then true
876- else aS())
878+ else aT())
877879 then throw("Unable to liquidate")
878880 else {
879- let eO = cl(aQ)
880- let cb = eO._1
881- let bA = eO._2
882- let cc = eO._3
883- let cr = eO._4
884- let be = eO._5
885- let bf = eO._6
886- let cu = eO._7
887- let cv = eO._8
888- let cw = eO._9
889- let cx = eO._10
890- let ct = eO._11
891- let eP = (ag(ct, aH()) / 2)
892- let eQ = if ((eP > cr))
893- then $Tuple3((eP - cr), cr, ((bA + eP) - cr))
894- else $Tuple3(0, (cr - eP), bA)
895- let eR = eQ._1
896- let bz = eQ._2
897- let eS = eQ._3
898- let eI = (as() - eP)
899- let eT = if ((0 > eI))
900- then $Tuple2(0, ah(eI))
901- else $Tuple2(eI, 0)
902- let eK = eT._1
903- let eL = eT._2
904- let cg = if ((eL > 0))
881+ let eQ = cn(aR)
882+ let cc = eQ._1
883+ let bB = eQ._2
884+ let cd = eQ._3
885+ let ct = eQ._4
886+ let bf = eQ._5
887+ let bg = eQ._6
888+ let cw = eQ._7
889+ let cx = eQ._8
890+ let cy = eQ._9
891+ let cz = eQ._10
892+ let cv = eQ._11
893+ let eR = (ah(cv, aI()) / 2)
894+ let eS = if ((eR > ct))
895+ then $Tuple3((eR - ct), ct, ((bB + eR) - ct))
896+ else $Tuple3(0, (ct - eR), bB)
897+ let eT = eS._1
898+ let bA = eS._2
899+ let eU = eS._3
900+ let eK = (at() - eR)
901+ let eV = if ((0 > eK))
902+ then $Tuple2(0, ai(eK))
903+ else $Tuple2(eK, 0)
904+ let eM = eV._1
905+ let eN = eV._2
906+ let ch = if ((eN > 0))
905907 then {
906- let eM = invoke(R(), "withdraw", [eL], nil)
907- if ((eM == eM))
908+ let eO = invoke(S(), "withdraw", [eN], nil)
909+ if ((eO == eO))
908910 then nil
909911 else throw("Strict value is not equal to itself.")
910912 }
911913 else nil
912- if ((cg == cg))
914+ if ((ch == ch))
913915 then {
914- let eF = invoke(P(), "unlockNeutrino", [(eP - eL), toBase58String(O())], nil)
915- if ((eF == eF))
916- then (((dE(aQ) ++ dz(be, bf, cu, cv, cw, cx)) ++ dF(dJ.caller, eP)) ++ dI(eK))
916+ let eH = invoke(Q(), "unlockNeutrino", [(eR - eN), toBase58String(P())], nil)
917+ if ((eH == eH))
918+ then (((dG(aR) ++ dB(bf, bg, cw, cx, cy, cz)) ++ dH(dL.caller, eR)) ++ dK(eM))
917919 else throw("Strict value is not equal to itself.")
918920 }
919921 else throw("Strict value is not equal to itself.")
920922 }
921923 }
922924
923925
924926
925-@Callable(dJ)
927+@Callable(dL)
926928 func payFunding () = {
927- let eU = aC()
928- if (if (if ((eU > lastBlock.timestamp))
929+ let eW = aD()
930+ if (if (if ((eW > lastBlock.timestamp))
929931 then true
930- else !(aR()))
932+ else !(aS()))
931933 then true
932- else aS())
933- then throw(((("Invalid funding block timestamp: " + toString(lastBlock.timestamp)) + " < ") + toString(eU)))
934+ else aT())
935+ then throw(((("Invalid funding block timestamp: " + toString(lastBlock.timestamp)) + " < ") + toString(eW)))
934936 else {
935- let eV = bJ()
936- let eW = cy()
937- let eX = (eW - eV)
938- let eY = ae(ag(eX, aE()), Y)
939- de(0, (eU + aF()), (aA() + eY), ae(eY, eV))
937+ let eX = bK()
938+ let eY = cA()
939+ let eZ = (eY - eX)
940+ let fa = af(ah(eZ, aF()), Z)
941+ dg(0, (eW + aG()), (aB() + fa), af(fa, eX))
940942 }
941943 }
942944
943945
944946
945-@Callable(dJ)
946-func v_get (aQ) = {
947- let eZ = cl(aQ)
948- let cb = eZ._1
949- let cc = eZ._2
950- let cd = eZ._3
951- let fa = eZ._4
952- throw((((ac(cc) + ac(cd)) + ac(fa)) + ac(ck(aQ))))
947+@Callable(dL)
948+func v_get (aR) = {
949+ let fb = cn(aR)
950+ let cc = fb._1
951+ let cd = fb._2
952+ let ce = fb._3
953+ let fc = fb._4
954+ throw((((ad(cd) + ad(ce)) + ad(fc)) + ad(cm(aR))))
953955 }
954956
955957
956-@Verifier(fb)
957-func fc () = sigVerify(fb.bodyBytes, fb.proofs[0], N())
958+@Verifier(fd)
959+func fe () = sigVerify(fd.bodyBytes, fd.proofs[0], O())
958960

github/deemru/w8io/873ac7e 
342.44 ms