tx · 8EyLgHdrs3HwReaftE8W4z247DBBXvAfVHo3s6k8FjgU

3MvRWw2FPEimFCTGtK7qY9uAJbM7XJ4ZfJS:  -0.43000000 Waves

2023.06.21 10:43 [2632125] smart account 3MvRWw2FPEimFCTGtK7qY9uAJbM7XJ4ZfJS > SELF 0.00000000 Waves

{ "type": 13, "id": "8EyLgHdrs3HwReaftE8W4z247DBBXvAfVHo3s6k8FjgU", "fee": 43000000, "feeAssetId": null, "timestamp": 1687333387330, "version": 2, "chainId": 84, "sender": "3MvRWw2FPEimFCTGtK7qY9uAJbM7XJ4ZfJS", "senderPublicKey": "HP8sssVq1866F7CaPQJwgFrt6fsqhQjKwM84cL1wjD2a", "proofs": [ "2ifZQ6V9caVQFiGBV6dy9nqmLDGfQVEBVDhxjcg1Mkh6feQFQQq1V7VbErSvdJGFPmgSC61g7KSYYVh19cwbeAiG" ], "script": "base64:BgKKAQgCEgcKBQgBCAEBEgMKAQgSBAoCCAgSBQoDCBgYEgUKAwgBCBIECgIIARIGCgQBCAgBEgUKAwEICBIDCgEIEgMKAQgSBQoDCAgBEgYKBAgBCAgSDgoMCAgIAQQRGBgRAQEYEgoKCAgICAEECAEYEg4KDAgICAEEGBgYGBgBGBIKCggICAEBAQEBAWUAB1NGX1BPT0wCAlNGAAdXWF9QT09MAgJXWAAPQ0FQX0ZFRV9OT19MT0FOAgljYXBOb0xvYW4ADENBUF9GRUVfTE9BTgIHY2FwTG9hbgAUU1RPUExPU1NfRkVFX05PX0xPQU4CDnN0b3BMb3NzTm9Mb2FuAA1TVE9QTE9TU19MT0FOAgxzdG9wTG9zc0xvYW4ACExPQU5fRkVFAgRsb2FuAAtOT19MT0FOX0ZFRQIGbm9Mb2FuAAZOT19GRUUCBW5vRmVlAAZTQ0FMRTgAgMLXLwAHU0NBTEUxMACAyK+gJQAKRkVFX1NDQUxFNgDAhD0AFGtTRlBvb2xBQXNzZXRCYWxhbmNlAg9BX2Fzc2V0X2JhbGFuY2UAFGtTRlBvb2xCQXNzZXRCYWxhbmNlAg9CX2Fzc2V0X2JhbGFuY2UAD2tTRlBvb2xBQXNzZXRJZAIKQV9hc3NldF9pZAAPa1NGUG9vbEJBc3NldElkAgpCX2Fzc2V0X2lkAA5rU0ZQb29sU2hhcmVJZAIOc2hhcmVfYXNzZXRfaWQAEmtTRlBvb2xTaGFyZVN1cHBseQISc2hhcmVfYXNzZXRfc3VwcGx5AAprU0ZQb29sRmVlAgpjb21taXNzaW9uAA1rVXNlclBvc2l0aW9uAg5fdXNlcl9wb3NpdGlvbgARa1VzZXJQb3NpdGlvblBvb2wCE191c2VyX3Bvc2l0aW9uX3Bvb2wAEWtVc2VyQm9ycm93QW1vdW50AhxfdXNlcl9wb3NpdGlvbl9ib3Jyb3dfYW1vdW50ABJrVXNlckJvcnJvd0Fzc2V0SWQCHl91c2VyX3Bvc2l0aW9uX2JvcnJvd19hc3NldF9pZAAQa1VzZXJQb3NpdGlvbk51bQIVX3VzZXJfcG9zaXRpb25fbnVtYmVyABVrVXNlclBvc2l0aW9uSW50ZXJlc3QCF191c2VyX3Bvc2l0aW9uX2ludGVyZXN0AAprUG9vbFRvdGFsAgtfcG9vbF90b3RhbAAOa1Bvb2xUb3RhbExvYW4CEF9wb29sX3RvdGFsX2xvYW4AEWtQb29sSW50ZXJlc3RMb2FuAhNfcG9vbF9pbnRlcmVzdF9sb2FuABNrUG9vbEludGVyZXN0Tm9Mb2FuAhZfcG9vbF9pbnRlcmVzdF9ub19sb2FuABVrQXhseUluRmVlV2l0aG91dExvYW4CFl9heGx5X2ZlZV93aXRob3V0X2xvYW4AEmtBeGx5SW5GZWVXaXRoTG9hbgITX2F4bHlfZmVlX3dpdGhfbG9hbgARa0F4bHlOb0xvYW5DYXBGZWUCF19heGx5X2ZlZV9jYXBfd2l0aF9sb2FuABNrQXhseVdpdGhMb2FuQ2FwRmVlAhVfYXhseV9mZWVfY2FwX25vX2xvYW4AFmtBeGx5U3RvcExvc3NOb0xvYW5GZWUCHF9heGx5X2ZlZV9zdG9wbG9zc193aXRoX2xvYW4AFGtBeGx5U3RvcExvc3NMb2FuRmVlAhpfYXhseV9mZWVfc3RvcGxvc3Nfbm9fbG9hbgAKa1JlcXVlc3RJZAILX3JlcXVlc3RfaWQADGtSZXF1ZXN0SXRlcgINcmVxdWVzdHNfaXRlcgAFa1Bvb2wCBXBvb2xfAAprU2hhcmVQb29sAg5fcG9vbF9zaGFyZV9pZAAOa1Bvb2xDYXBDaGFuZ2UCEF9wb29sX2NhcF9jaGFuZ2UAD2tUb2tlbkxhc3RQcmljZQIKbGFzdF9wcmljZQANa1VzZXJTdG9wTG9zcwIKX3N0b3BfbG9zcwAJa01vbmV5Qm94Ag5heGx5X21vbmV5X2JveAAOa1NGRmFybWluZ0FkZHICE3N3b3BmaV9mYXJtaW5nX2FkZHIADGtMZW5kU2VydmljZQIRbGVuZF9zZXJ2aWNlX2FkZHIADGtBZG1pbkNhbGxQSwISYWRtaW5fY2FsbF9wdWJfa2V5AAxrUHJpY2VPcmFjbGUCDHByaWNlX29yYWNsZQALa0V4Q29udHJhY3QCEWV4Y2hhbmdlX2NvbnRyYWN0AA9rV3hTd2FwQ29udHJhY3QCEHd4X3N3YXBfY29udHJhY3QACG1vbmV5Qm94CQEHQWRkcmVzcwEJANkEAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMFCWtNb25leUJveAIYTm8gYXhseSBtb25leUJveCBhZGRyZXNzAApleENvbnRyYWN0CQEHQWRkcmVzcwEJANkEAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMFC2tFeENvbnRyYWN0AhxObyBleGNoYW5nZSBjb250cmFjdCBhZGRyZXNzAA9wcmljZU9yYWNsZUFkZHIJAQdBZGRyZXNzAQkA2QQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwUMa1ByaWNlT3JhY2xlAhdObyBwcmljZSBvcmFjbGUgYWRkcmVzcwAOd3hTd2FwQ29udHJhY3QJAQdBZGRyZXNzAQkA2QQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwUPa1d4U3dhcENvbnRyYWN0AhJObyB3eCBzd2FwIGFkZHJlc3MABlNXT1BJRAEgNAETVo5gRuJ+W6m4AUeC57EAJhKbduROS6KgfJxt7oEABFdYSUQBIMZSHoFO6m7jPMCXsA5fLPJq6e2dsobRmkJ4qGB9PhuxAQ5nZXRMZW5kU3J2QWRkcgAJAQdBZGRyZXNzAQkA2QQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwUMa0xlbmRTZXJ2aWNlAhtDYW4ndCBnZXQgbGVuZCBzZXJ2aWNlIGFkZHIBEGdldEFkbWluQ2FsbEFkZHIACQCnCAEJANkEAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMFDGtBZG1pbkNhbGxQSwIbQ2FuJ3QgZ2V0IGxlbmQgc2VydmljZSBhZGRyAQtpc0FkbWluQ2FsbAEBaQMJAAACCAUBaQZjYWxsZXIJARBnZXRBZG1pbkNhbGxBZGRyAAUEdW5pdAkAAgECIU9ubHkgYWRtaW4gY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgEKaXNTZWxmQ2FsbAEBaQMJAAACCAUBaQZjYWxsZXIFBHRoaXMFBHVuaXQJAAIBAitPbmx5IGNvbnRyYWN0IGl0c2VsZiBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uAQppc0xhbmRDYWxsAQFpAwkAAAIIBQFpBmNhbGxlcgkBDmdldExlbmRTcnZBZGRyAAUEdW5pdAkAAgECKU9ubHkgbGFuZCBjb250cmFjdCBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uAQ5hY2NvdW50QmFsYW5jZQEHYXNzZXRJZAQHJG1hdGNoMAUHYXNzZXRJZAMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAJpZAUHJG1hdGNoMAkA8AcCBQR0aGlzBQJpZAMJAAECBQckbWF0Y2gwAgRVbml0BAV3YXZlcwUHJG1hdGNoMAgJAO8HAQUEdGhpcwlhdmFpbGFibGUJAAIBAgtNYXRjaCBlcnJvcgENZ2V0U0ZQb29sRGF0YQEIcG9vbEFkZHIJAJcKBQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFCHBvb2xBZGRyBQ9rU0ZQb29sQUFzc2V0SWQCGUNhbid0IGdldCBwb29sIEEgYXNzZXQgaWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQhwb29sQWRkcgUPa1NGUG9vbEJBc3NldElkAhlDYW4ndCBnZXQgcG9vbCBCIGFzc2V0IGlkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUIcG9vbEFkZHIFFGtTRlBvb2xBQXNzZXRCYWxhbmNlAh5DYW4ndCBnZXQgcG9vbCBBIGFzc2V0IGJhbGFuY2UJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQhwb29sQWRkcgUUa1NGUG9vbEJBc3NldEJhbGFuY2UCHkNhbid0IGdldCBwb29sIEIgYXNzZXQgYmFsYW5jZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFCHBvb2xBZGRyBQ5rU0ZQb29sU2hhcmVJZAIYQ2FuJ3QgZ2V0IHNoYXJlIGFzc2V0IGlkAQ1nZXRXWFBvb2xEYXRhAQhwb29sQWRkcgQDY2ZnCgABQAkA/AcEBQhwb29sQWRkcgIcZ2V0UG9vbENvbmZpZ1dyYXBwZXJSRUFET05MWQUDbmlsBQNuaWwDCQABAgUBQAIJTGlzdFtBbnldBQFACQACAQkArAICCQADAQUBQAIeIGNvdWxkbid0IGJlIGNhc3QgdG8gTGlzdFtBbnldAwkAAAIFA2NmZwUDY2ZnBANhSWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgoAAUAJAJEDAgUDY2ZnAAQDCQABAgUBQAIGU3RyaW5nBQFABQR1bml0AhlDYW4ndCBnZXQgcG9vbCBBIGFzc2V0IGlkBANiSWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgoAAUAJAJEDAgUDY2ZnAAUDCQABAgUBQAIGU3RyaW5nBQFABQR1bml0AhlDYW4ndCBnZXQgcG9vbCBCIGFzc2V0IGlkBAdzaGFyZUlkCQETdmFsdWVPckVycm9yTWVzc2FnZQIKAAFACQCRAwIFA2NmZwADAwkAAQIFAUACBlN0cmluZwUBQAUEdW5pdAIaQ2FuJ3QgZ2V0IHBvb2wgTFAgYXNzZXQgaWQEBGJhbEEKAAFACQD8BwQFCHBvb2xBZGRyAhxnZXRBY2NCYWxhbmNlV3JhcHBlclJFQURPTkxZCQDMCAIFA2FJZAUDbmlsBQNuaWwDCQABAgUBQAIDSW50BQFACQACAQkArAICCQADAQUBQAIYIGNvdWxkbid0IGJlIGNhc3QgdG8gSW50AwkAAAIFBGJhbEEFBGJhbEEEBGJhbEIKAAFACQD8BwQFCHBvb2xBZGRyAhxnZXRBY2NCYWxhbmNlV3JhcHBlclJFQURPTkxZCQDMCAIFA2JJZAUDbmlsBQNuaWwDCQABAgUBQAIDSW50BQFACQACAQkArAICCQADAQUBQAIYIGNvdWxkbid0IGJlIGNhc3QgdG8gSW50AwkAAAIFBGJhbEIFBGJhbEIJAJcKBQUDYUlkBQNiSWQFBGJhbEEFBGJhbEIFB3NoYXJlSWQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BC2dldFBvb2xEYXRhAghwb29sQWRkcgR0eXBlAwkAAAIFBHR5cGUFB1NGX1BPT0wJAQ1nZXRTRlBvb2xEYXRhAQUIcG9vbEFkZHIDCQAAAgUEdHlwZQUHV1hfUE9PTAkBDWdldFdYUG9vbERhdGEBBQhwb29sQWRkcgkAAgECD1dyb25nIHBvb2wgdHlwZQEOZ2V0U2hhcmVTdXBwbHkDCHBvb2xBZGRyBHR5cGUHc2hhcmVJZAMJAAACBQR0eXBlBQdTRl9QT09MCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUIcG9vbEFkZHIFEmtTRlBvb2xTaGFyZVN1cHBseQIcQ2FuJ3QgZ2V0IHNoYXJlIGFzc2V0IHN1cHBseQMJAAACBQR0eXBlBQdXWF9QT09MCAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDsBwEJANkEAQUHc2hhcmVJZAINV3JvbmcgU2hhcmVJZAhxdWFudGl0eQkAAgECD1dyb25nIHBvb2wgdHlwZQERZ2V0UG9vbFRvdGFsU2hhcmUBBHBvb2wJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICBQRwb29sBQprUG9vbFRvdGFsAAABGWdldFBvb2xUb3RhbFNoYXJlV2l0aExvYW4BBHBvb2wJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICBQRwb29sBQ5rUG9vbFRvdGFsTG9hbgAAARhnZXROZXdVc2VyUG9zaXRpb25OdW1iZXIBBHVzZXIJAGQCCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgUEdXNlcgUQa1VzZXJQb3NpdGlvbk51bQAAAAEBCmdldEF4bHlGZWUCBHBvb2wHZmVlVHlwZQMJAAACBQdmZWVUeXBlBQxDQVBfRkVFX0xPQU4JARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgUEcG9vbAUTa0F4bHlXaXRoTG9hbkNhcEZlZQMJAAACBQdmZWVUeXBlBQ9DQVBfRkVFX05PX0xPQU4JARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgUEcG9vbAURa0F4bHlOb0xvYW5DYXBGZWUDCQAAAgUHZmVlVHlwZQUITE9BTl9GRUUJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgUEcG9vbAUSa0F4bHlJbkZlZVdpdGhMb2FuAwkAAAIFB2ZlZVR5cGUFC05PX0xPQU5fRkVFCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQCsAgIFBHBvb2wFFWtBeGx5SW5GZWVXaXRob3V0TG9hbgMJAAACBQdmZWVUeXBlBQZOT19GRUUAAAkAAgECDldyb25nIGZlZSB0eXBlARBnZXRTRkZhcm1pbmdBZGRyAAkBB0FkZHJlc3MBCQDZBAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzBQ5rU0ZGYXJtaW5nQWRkcgIdQ2FuJ3QgZ2V0IHN3b3BmaSBmYXJtaW5nIGFkZHIBEGdldFdYRmFybWluZ0FkZHIBCHBvb2xBZGRyBAlmQ29udHJhY3QJAQdBZGRyZXNzAQkA2QQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUIcG9vbEFkZHICEyVzX19mYWN0b3J5Q29udHJhY3QCIkNhbid0IGdldCBXWCBmYWN0b3J5IGNvbnRyYWN0IGFkZHIECmZhY3Ryb3lDZmcJALUJAgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFCWZDb250cmFjdAIRJXNfX2ZhY3RvcnlDb25maWcCGENhbid0IGdldCBXWCBmYWN0b3J5IGNmZwICX18JAQdBZGRyZXNzAQkA2QQBCQCRAwIFCmZhY3Ryb3lDZmcAAQEMYXNzZXRJZFRvU3RyAQdhc3NldElkBAckbWF0Y2gwBQdhc3NldElkAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEAmlkBQckbWF0Y2gwCQDYBAEFAmlkAwkAAQIFByRtYXRjaDACBFVuaXQEBXdhdmVzBQckbWF0Y2gwAgVXQVZFUwkAAgECC01hdGNoIGVycm9yAQ5hc3NldElkRnJvbVN0cgEHYXNzZXRJZAMJAAACBQdhc3NldElkAgVXQVZFUwUEdW5pdAkA2QQBBQdhc3NldElkARBnZXRBc3NldERlY2ltYWxzAQdhc3NldElkAwkAAAIFB2Fzc2V0SWQCBVdBVkVTAAgEByRtYXRjaDAJAOwHAQkA2QQBBQdhc3NldElkAwkAAQIFByRtYXRjaDACBUFzc2V0BAVhc3NldAUHJG1hdGNoMAgFBWFzc2V0CGRlY2ltYWxzCQACAQIQQ2FuJ3QgZmluZCBhc3NldAERZ2V0QXNzZXRQcmVjaXRpb24BB2Fzc2V0SWQJAGwGAAoAAAkBEGdldEFzc2V0RGVjaW1hbHMBBQdhc3NldElkAAAAAAUERE9XTgEOZ2V0QXNzZXRzUHJpY2UBCGFzc2V0SWRzCgEJZ2V0UHJpY2VzAgFhB2Fzc2V0SWQECmFzc2V0UHJpY2UICgABQAkA/AcEBQ9wcmljZU9yYWNsZUFkZHICCWdldFRXQVA2MAkAzAgCBQdh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YmFsQgQNJHQwMTAxMDMxMDQwOAMJAAACBQVwVHlwZQUHU0ZfUE9PTAkAlAoCBQNuaWwFA25pbAkAlAoCCQC1CQIKAAFACQD8BwQFCHBvb2xBZGRyAiBldmFsdWF0ZVB1dEJ5QW1vdW50QXNzZXRSRUFET05MWQkAzAgCBQRwbXRBBQNuaWwFA25pbAMJAAECBQFAAgZTdHJpbmcFAUAJAAIBCQCsAgIJAAMBBQFAAhsgY291bGRuJ3QgYmUgY2FzdCB0byBTdHJpbmcCAl9fCQC1CQIKAAFACQD8BwQFCHBvb2xBZGRyAh9ldmFsdWF0ZVB1dEJ5UHJpY2VBc3NldFJFQURPTkxZCQDMCAIFBHBtdEIFA25pbAUDbmlsAwkAAQIFAUACBlN0cmluZwUBQAkAAgEJAKwCAgkAAwEFAUACGyBjb3VsZG4ndCBiZSBjYXN0IHRvIFN0cmluZwICX18DCQAAAgUNJHQwMTAxMDMxMDQwOAUNJHQwMTAxMDMxMDQwOAQKZXZhbFB1dEluQggFDSR0MDEwMTAzMTA0MDgCXzIECmV2YWxQdXRJbkEIBQ0kdDAxMDEwMzEwNDA4Al8xBA0kdDAxMDQxODEwNjE0AwkAAAIFBXBUeXBlBQdTRl9QT09MCQCUCgIJAGsDBQZTQ0FMRTgFBHBtdEEFBGJhbEEJAGsDBQZTQ0FMRTgFBHBtdEIFBGJhbEIJAJQKAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCmV2YWxQdXRJbkEAAQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCmV2YWxQdXRJbkIAAQQGcmF0aW9BCAUNJHQwMTA0MTgxMDYxNAJfMQQGcmF0aW9CCAUNJHQwMTA0MTgxMDYxNAJfMgQNJHQwMTA2MjAxMTEwMgMJAGYCBQZyYXRpb0IFBnJhdGlvQQQDcG10AwkAAAIFBXBUeXBlBQdTRl9QT09MCQBuBAUEYmFsQgUGcmF0aW9BBQZTQ0FMRTgFB0NFSUxJTkcJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQpldmFsUHV0SW5BAAgJAJcKBQUEcG10QQUDcG10CQBlAgUEcG10QgUDcG10BQNiSWQFBnJhdGlvQgQDcG10AwkAAAIFBXBUeXBlBQdTRl9QT09MCQBuBAUEYmFsQQUGcmF0aW9CBQZTQ0FMRTgFB0NFSUxJTkcJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQpldmFsUHV0SW5CAAcJAJcKBQUDcG10BQRwbXRCCQBlAgUEcG10QQUDcG10BQNhSWQFBnJhdGlvQQQGcG10SW5BCAUNJHQwMTA2MjAxMTEwMgJfMQQGcG10SW5CCAUNJHQwMTA2MjAxMTEwMgJfMgQGY2hhbmdlCAUNJHQwMTA2MjAxMTEwMgJfMwQNY2hhbmdlQXNzZXRJZAgFDSR0MDEwNjIwMTExMDICXzQEAmxwCAUNJHQwMTA2MjAxMTEwMgJfNQkAlwoFBQZwbXRJbkEFBnBtdEluQgUGY2hhbmdlBQ1jaGFuZ2VBc3NldElkBQJscAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgEYcmVwbGVuaXNoVHdvVG9rZW5zQnlUeXBlBghwb29sQWRkcgVwVHlwZQRwbXRBA2FJZARwbXRCA2JJZAQIcGF5bWVudHMJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQ5hc3NldElkRnJvbVN0cgEFA2FJZAUEcG10QQkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBDmFzc2V0SWRGcm9tU3RyAQUDYklkBQRwbXRCBQNuaWwDCQAAAgUFcFR5cGUFB1NGX1BPT0wJAPwHBAUIcG9vbEFkZHICDGNhbGxGdW5jdGlvbgkAzAgCAhZyZXBsZW5pc2hXaXRoVHdvVG9rZW5zCQDMCAIJAMwIAgIFZmFsc2UJAMwIAgIBMAUDbmlsBQNuaWwFCHBheW1lbnRzCQD8BwQFCHBvb2xBZGRyAgNwdXQJAMwIAgDAhD0JAMwIAgcFA25pbAUIcGF5bWVudHMBF3JlcGxlbmlzaE9uZVRva2VuQnlUeXBlBAhwb29sQWRkcgVwVHlwZQNwbXQFcG10SWQECHBheW1lbnRzCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQEOYXNzZXRJZEZyb21TdHIBBQVwbXRJZAUDcG10BQNuaWwDCQAAAgUFcFR5cGUFB1NGX1BPT0wJAPwHBAUIcG9vbEFkZHICDGNhbGxGdW5jdGlvbgkAzAgCAhVyZXBsZW5pc2hXaXRoT25lVG9rZW4JAMwIAgkAzAgCAgEwCQDMCAICBWZhbHNlCQDMCAICATAFA25pbAUDbmlsBQhwYXltZW50cwkA/AcEBQhwb29sQWRkcgIJcHV0T25lVGtuCQDMCAIAAAkAzAgCBwUDbmlsBQhwYXltZW50cwEHc3Rha2VMUAQEcG9vbAVwVHlwZQdzaGFyZUlkBmFtb3VudAQIcGF5bWVudHMJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJANkEAQUHc2hhcmVJZAUGYW1vdW50BQNuaWwDCQAAAgUFcFR5cGUFB1NGX1BPT0wJAPwHBAkBEGdldFNGRmFybWluZ0FkZHIAAg9sb2NrU2hhcmVUb2tlbnMJAMwIAgUEcG9vbAkAzAgCAAAFA25pbAUIcGF5bWVudHMJAPwHBAkBEGdldFdYRmFybWluZ0FkZHIBCQERQGV4dHJOYXRpdmUoMTA2MikBBQRwb29sAgVzdGFrZQUDbmlsBQhwYXltZW50cwEJdW5zdGFrZUxQBARwb29sBXBUeXBlB3NoYXJlSWQGYW1vdW50BA0kdDAxMjMzMjEyNjg5AwkAAAIFBXBUeXBlBQdTRl9QT09MCQCVCgMJARBnZXRTRkZhcm1pbmdBZGRyAAITd2l0aGRyYXdTaGFyZVRva2VucwkAzAgCBQRwb29sCQDMCAIFBmFtb3VudAUDbmlsAwkAAAIFBXBUeXBlBQdXWF9QT09MCQCVCgMJARBnZXRXWEZhcm1pbmdBZGRyAQkBB0FkZHJlc3MBCQDZBAEFBHBvb2wCB3Vuc3Rha2UJAMwIAgUHc2hhcmVJZAkAzAgCBQZhbW91bnQFA25pbAkAAgECD1dyb25nIHBvb2wgdHlwZQQIZmFybUFkZHIIBQ0kdDAxMjMzMjEyNjg5Al8xBAVmTmFtZQgFDSR0MDEyMzMyMTI2ODkCXzIEBnBhcmFtcwgFDSR0MDEyMzMyMTI2ODkCXzMEA2ludgkA/AcEBQhmYXJtQWRkcgUFZk5hbWUFBnBhcmFtcwUDbmlsAwkAAAIFA2ludgUDaW52BQZhbW91bnQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BEWNhbGNBbW91bnRUb1BheVNGBwRwb29sCGFzc2V0SWRBCGFzc2V0SWRCBGJhbEEEYmFsQhBhbW91bnRUb2tlblRvR2V0D2Fzc2V0VG9rZW5Ub0dldAQIcG9vbEFkZHIJAQdBZGRyZXNzAQkA2QQBBQRwb29sBAlmZWVTY2FsZTYAwIQ9BANmZWUJARFAZXh0ck5hdGl2ZSgxMDUwKQIFCHBvb2xBZGRyBQprU0ZQb29sRmVlBAxhbW50R2V0Tm9GZWUJAGsDBRBhbW91bnRUb2tlblRvR2V0BQlmZWVTY2FsZTYJAGUCBQlmZWVTY2FsZTYFA2ZlZQQNJHQwMTMxMDIxMzM5MAMJAAACBQ9hc3NldFRva2VuVG9HZXQFCGFzc2V0SWRBBAthbW91bnRUb1BheQkAawMFBGJhbEEFDGFtbnRHZXROb0ZlZQkAZQIFBGJhbEIFDGFtbnRHZXROb0ZlZQkAlAoCBQthbW91bnRUb1BheQUIYXNzZXRJZEIEC2Ftb3VudFRvUGF5CQBrAwUEYmFsQgUMYW1udEdldE5vRmVlCQBlAgUEYmFsQQUMYW1udEdldE5vRmVlCQCUCgIFC2Ftb3VudFRvUGF5BQhhc3NldElkQQQLYW1vdW50VG9QYXkIBQ0kdDAxMzEwMjEzMzkwAl8xBAphc3NldFRvUGF5CAUNJHQwMTMxMDIxMzM5MAJfMgkAlAoCBQphc3NldFRvUGF5BQthbW91bnRUb1BheQERY2FsY0Ftb3VudFRvUGF5V1gHBHBvb2wIYXNzZXRJZEEIYXNzZXRJZEIEYmFsQQRiYWxCEGFtb3VudFRva2VuVG9HZXQPYXNzZXRUb2tlblRvR2V0BAVwckZlZQkBEUBleHRyTmF0aXZlKDEwNTApAgUOd3hTd2FwQ29udHJhY3QCDyVzX19wcm90b2NvbEZlZQQEcEZlZQkBEUBleHRyTmF0aXZlKDEwNTApAgUOd3hTd2FwQ29udHJhY3QCCyVzX19wb29sRmVlBAhmZWVTY2FsZQkAtgIBAIDC1y8EDSR0MDEzNzI5MTQwMzcDCQAAAgUPYXNzZXRUb2tlblRvR2V0BQhhc3NldElkQQQLYW1vdW50VG9QYXkJAGsDBQRiYWxBBRBhbW91bnRUb2tlblRvR2V0CQBlAgUEYmFsQgUQYW1vdW50VG9rZW5Ub0dldAkAlAoCBQthbW91bnRUb1BheQUIYXNzZXRJZEIEC2Ftb3VudFRvUGF5CQBrAwUEYmFsQgUQYW1vdW50VG9rZW5Ub0dldAkAZQIFBGJhbEEFEGFtb3VudFRva2VuVG9HZXQJAJQKAgULYW1vdW50VG9QYXkFCGFzc2V0SWRBBAthbW91bnRUb1BheQgFDSR0MDEzNzI5MTQwMzcCXzEECmFzc2V0VG9QYXkIBQ0kdDAxMzcyOTE0MDM3Al8yBBJhbW91bnRUb1BheVdpdGhGZWUJAKADAQkAvAIDCQC2AgEFC2Ftb3VudFRvUGF5BQhmZWVTY2FsZQkAuAICBQhmZWVTY2FsZQkAtgIBCQBkAgUFcHJGZWUFBHBGZWUJAJQKAgUKYXNzZXRUb1BheQUSYW1vdW50VG9QYXlXaXRoRmVlARBleGNoYW5nZURpcmVjdGx5CAR0eXBlBHBvb2wIYXNzZXRJZEEIYXNzZXRJZEIEYmFsQQRiYWxCEGFtb3VudFRva2VuVG9HZXQPYXNzZXRUb2tlblRvR2V0AwkAAAIFBHR5cGUFB1NGX1BPT0wEDSR0MDE0Mzc1MTQ0OTcJARFjYWxjQW1vdW50VG9QYXlTRgcFBHBvb2wFCGFzc2V0SWRBBQhhc3NldElkQgUEYmFsQQUEYmFsQgUQYW1vdW50VG9rZW5Ub0dldAUPYXNzZXRUb2tlblRvR2V0BAphc3NldFRvUGF5CAUNJHQwMTQzNzUxNDQ5NwJfMQQLYW1vdW50VG9QYXkIBQ0kdDAxNDM3NTE0NDk3Al8yCQD8BwQJARFAZXh0ck5hdGl2ZSgxMDYyKQEFBHBvb2wCDGNhbGxGdW5jdGlvbgkAzAgCAghleGNoYW5nZQkAzAgCCQDMCAICATEFA25pbAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQEOYXNzZXRJZEZyb21TdHIBBQphc3NldFRvUGF5BQthbW91bnRUb1BheQUDbmlsBA0kdDAxNDY0ODE0NzcwCQERY2FsY0Ftb3VudFRvUGF5V1gHBQRwb29sBQhhc3NldElkQQUIYXNzZXRJZEIFBGJhbEEFBGJhbEIFEGFtb3VudFRva2VuVG9HZXQFD2Fzc2V0VG9rZW5Ub0dldAQKYXNzZXRUb1BheQgFDSR0MDE0NjQ4MTQ3NzACXzEEC2Ftb3VudFRvUGF5CAUNJHQwMTQ2NDgxNDc3MAJfMgkA/AcEBQ53eFN3YXBDb250cmFjdAIEc3dhcAkAzAgCAAEJAMwIAgUPYXNzZXRUb2tlblRvR2V0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T0wJARFjYWxjQW1vdW50VG9QYXlTRgcFBHBvb2wFA2FJZAUDYklkBQRiYWxBBQRiYWxCBQ1hbW91bnRUb0dldEV4BQ1ib3Jyb3dBc3NldElkCQERY2FsY0Ftb3VudFRvUGF5V1gHBQRwb29sBQNhSWQFA2JJZAUEYmFsQQUEYmFsQgUNYW1vdW50VG9HZXRFeAUNYm9ycm93QXNzZXRJZAkAlAoCAgAAAAQKYXNzZXRUb1BheQgFDSR0MDE2OTk0MTcyOTcCXzEEC2Ftb3VudFRvUGF5CAUNJHQwMTY5OTQxNzI5NwJfMgMJAAACBQ1ib3Jyb3dBc3NldElkBQNhSWQJAJQKAgkAZQIJAGQCBQpnZXRBbW91bnRBBQ1hbW91bnRUb0dldEV4BQxib3Jyb3dBbW91bnQJAGUCBQpnZXRBbW91bnRCBQthbW91bnRUb1BheQkAlAoCCQBlAgUKZ2V0QW1vdW50QQULYW1vdW50VG9QYXkJAGUCCQBkAgUKZ2V0QW1vdW50QgUNYW1vdW50VG9HZXRFeAUMYm9ycm93QW1vdW50CQCUCgIFCmdldEFtb3VudEEFCmdldEFtb3VudEIBC2NsYWltRmFybWVkAgR0eXBlBHBvb2wDCQAAAgUEdHlwZQUHU0ZfUE9PTAQJYmFsQmVmb3JlCQEOYWNjb3VudEJhbGFuY2UBBQZTV09QSUQDCQAAAgUJYmFsQmVmb3JlBQliYWxCZWZvcmUEA2ludgkA/AcECQEQZ2V0U0ZGYXJtaW5nQWRkcgACBWNsYWltCQDMCAIFBHBvb2wFA25pbAUDbmlsAwkAAAIFA2ludgUDaW52BAhiYWxBZnRlcgkBDmFjY291bnRCYWxhbmNlAQUGU1dPUElECQCUCgIJAGUCBQhiYWxBZnRlcgUJYmFsQmVmb3JlBQZTV09QSUQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4DCQAAAgUEdHlwZQUHV1hfUE9PTAQJYmFsQmVmb3JlCQEOYWNjb3VudEJhbGFuY2UBBQRXWElEAwkAAAIFCWJhbEJlZm9yZQUJYmFsQmVmb3JlBANpbnYJAPwHBAkBEGdldFdYRmFybWluZ0FkZHIBCQEHQWRkcmVzcwEJANkEAQUEcG9vbAIHY2xhaW1XWAkAzAgCBQRwb29sBQNuaWwFA25pbAMJAAACBQNpbnYFA2ludgQIYmFsQWZ0ZXIJAQ5hY2NvdW50QmFsYW5jZQEFBFdYSUQJAJQKAgkAZQIFCGJhbEFmdGVyBQliYWxCZWZvcmUFBFdYSUQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAg9Xcm9uZyBwb29sIHR5cGUBD3JlcGxlbmlzaEJ5VHlwZQoFcFR5cGUEcG9vbAdmZWVUeXBlBHBtdEEDYUlkBHBtdEIDYklkBGJhbEEEYmFsQgRMUElkBA9scEJhbGFuY2VCZWZvcmUJAQ5hY2NvdW50QmFsYW5jZQEJANkEAQUETFBJZAMJAAACBQ9scEJhbGFuY2VCZWZvcmUFD2xwQmFsYW5jZUJlZm9yZQQIcG9vbEFkZHIJARFAZXh0ck5hdGl2ZSgxMDYyKQEFBHBvb2wEDSR0MDE4NDk0MTg5MTADAwkAZgIFBHBtdEEAAAkAZgIFBHBtdEIAAAcEDSR0MDE4NTYwMTg2NzYJARhjYWxjUmVwbGVuaXNoQnlUd29Ub2tlbnMIBQVwVHlwZQUIcG9vbEFkZHIFBHBtdEEFA2FJZAUEcG10QgUDYklkBQRiYWxBBQRiYWxCBAZwbXRJbkEIBQ0kdDAxODU2MDE4Njc2Al8xBAZwbXRJbkIIBQ0kdDAxODU2MDE4Njc2Al8yBAZjaGFuZ2UIBQ0kdDAxODU2MDE4Njc2Al8zBAhjaGFuZ2VJZAgFDSR0MDE4NTYwMTg2NzYCXzQEA2ludgkBGHJlcGxlbmlzaFR3b1Rva2Vuc0J5VHlwZQYFCHBvb2xBZGRyBQVwVHlwZQUGcG10SW5BBQNhSWQFBnBtdEluQgUDYklkAwkAAAIFA2ludgUDaW52CQCUCgIFBmNoYW5nZQUIY2hhbmdlSWQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4DCQBmAgUEcG10QQAACQCUCgIFBHBtdEEFA2FJZAMJAGYCBQRwbXRCAAAJAJQKAgUEcG10QgUDYklkCQACAQIQcG10cyBtdXN0IGJlID4gMAQGY2hhbmdlCAUNJHQwMTg0OTQxODkxMAJfMQQIY2hhbmdlSWQIBQ0kdDAxODQ5NDE4OTEwAl8yBANpbnYDCQBmAgUGY2hhbmdlAAAJARdyZXBsZW5pc2hPbmVUb2tlbkJ5VHlwZQQFCHBvb2xBZGRyBQVwVHlwZQUGY2hhbmdlBQhjaGFuZ2VJZAUDbmlsAwkAAAIFA2ludgUDaW52BA5scEJhbGFuY2VBZnRlcgkBDmFjY291bnRCYWxhbmNlAQkA2QQBBQRMUElkBAt0b3RhbFN0YWtlZAkAZQIFDmxwQmFsYW5jZUFmdGVyBQ9scEJhbGFuY2VCZWZvcmUEDWF4bHlGZWVBbW91bnQJAGsDBQt0b3RhbFN0YWtlZAkBCmdldEF4bHlGZWUCBQRwb29sBQdmZWVUeXBlBQpGRUVfU0NBTEU2BBF1c2VyU2hhcmVGb3JTdGFrZQkAZQIFC3RvdGFsU3Rha2VkBQ1heGx5RmVlQW1vdW50AwkAZwIAAAURdXNlclNoYXJlRm9yU3Rha2UJAAIBAihhbW91bnQgb2Ygc3Rha2VkIHNoYXJldG9rZW5zIG11c3QgYmUgPiAwBAVpbnZMUAkBB3N0YWtlTFAEBQRwb29sBQVwVHlwZQUETFBJZAURdXNlclNoYXJlRm9yU3Rha2UDCQAAAgUFaW52TFAFBWludkxQCQCUCgIFEXVzZXJTaGFyZUZvclN0YWtlBQ1heGx5RmVlQW1vdW50CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuARByZXBsZW5pc2hFbnRyaWVzCARwb29sBHVzZXIMc3Rha2VkQW1vdW50DWF4bHlGZWVBbW91bnQGcG9zTnVtB3NoYXJlSWQEdHlwZQh3aXRoTG9hbgQLdG90YWxBbW91bnQJARFnZXRQb29sVG90YWxTaGFyZQEFBHBvb2wED3RvdGFsQW1vdW50TG9hbgkBGWdldFBvb2xUb3RhbFNoYXJlV2l0aExvYW4BBQRwb29sBA0kdDAxOTc2ODIwMDA2AwUId2l0aExvYW4JAJQKAgkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkArAICBQRwb29sBRFrUG9vbEludGVyZXN0TG9hbgkAZAIFD3RvdGFsQW1vdW50TG9hbgUMc3Rha2VkQW1vdW50CQCUCgIJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgUEcG9vbAUTa1Bvb2xJbnRlcmVzdE5vTG9hbgUPdG90YWxBbW91bnRMb2FuBA9jdXJQb29sSW50ZXJlc3QIBQ0kdDAxOTc2ODIwMDA2Al8xBBN0b3RhbFN0YWtlZFdpdGhMb2FuCAUNJHQwMTk3NjgyMDAwNgJfMgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBQprUG9vbFRvdGFsCQBkAgULdG90YWxBbW91bnQFDHN0YWtlZEFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBQ5rUG9vbFRvdGFsTG9hbgUTdG90YWxTdGFrZWRXaXRoTG9hbgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXICAV8JAKQDAQUGcG9zTnVtBQ1rVXNlclBvc2l0aW9uBQxzdGFrZWRBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfCQCkAwEFBnBvc051bQUVa1VzZXJQb3NpdGlvbkludGVyZXN0BQ9jdXJQb29sSW50ZXJlc3QJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgUEdXNlcgIBXwkApAMBBQZwb3NOdW0FEWtVc2VyUG9zaXRpb25Qb29sBQRwb29sCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHVzZXIFEGtVc2VyUG9zaXRpb25OdW0FBnBvc051bQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQhtb25leUJveAUNYXhseUZlZUFtb3VudAkA2QQBBQdzaGFyZUlkBQNuaWwBDmV4Y2hhbmdlS2VlcGVyCgd0b1Rva2VuCXBtdEFtb3VudAhwbXRBc3NldAlhbW91bnRzSW4JYWRkcmVzc2VzD2Fzc2V0c1RvUmVjZWl2ZQtlc3RSZWNlaXZlZBFzbGlwcGFnZVRvbGVyYW5jZQttaW5SZWNlaXZlZAdvcHRpb25zBBJ0b2tlbkJhbGFuY2VCZWZvcmUJAQ5hY2NvdW50QmFsYW5jZQEJAQ5hc3NldElkRnJvbVN0cgEFB3RvVG9rZW4DCQAAAgUSdG9rZW5CYWxhbmNlQmVmb3JlBRJ0b2tlbkJhbGFuY2VCZWZvcmUEA2ludgkA/AcEBQpleENvbnRyYWN0AgRzd2FwCQDMCAIFCWFtb3VudHNJbgkAzAgCBQlhZGRyZXNzZXMJAMwIAgUPYXNzZXRzVG9SZWNlaXZlCQDMCAIFC2VzdFJlY2VpdmVkCQDMCAIFEXNsaXBwYWdlVG9sZXJhbmNlCQDMCAIFC21pblJlY2VpdmVkCQDMCAIFB29wdGlvbnMFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUIcG10QXNzZXQFCXBtdEFtb3VudAUDbmlsAwkAAAIFA2ludgUDaW52CQBlAgkBDmFjY291bnRCYWxhbmNlAQkBDmFzc2V0SWRGcm9tU3RyAQUHdG9Ub2tlbgUSdG9rZW5CYWxhbmNlQmVmb3JlCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQ5leGNoYW5nZVB1enpsZQYHdG9Ub2tlbglwbXRBbW91bnQIcG10QXNzZXQJcm91dGVzU3RyDG1pblRvUmVjZWl2ZQdvcHRpb25zBBJ0b2tlbkJhbGFuY2VCZWZvcmUJAQ5hY2NvdW50QmFsYW5jZQEJAQ5hc3NldElkRnJvbVN0cgEFB3RvVG9rZW4DCQAAAgUSdG9rZW5CYWxhbmNlQmVmb3JlBRJ0b2tlbkJhbGFuY2VCZWZvcmUEA2ludgkA/AcEBQpleENvbnRyYWN0AgpwdXp6bGVTd2FwCQDMCAIFCXJvdXRlc1N0cgkAzAgCBQxtaW5Ub1JlY2VpdmUJAMwIAgUHb3B0aW9ucwUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQhwbXRBc3NldAUJcG10QW1vdW50BQNuaWwDCQAAAgUDaW52BQNpbnYJAGUCCQEOYWNjb3VudEJhbGFuY2UBCQEOYXNzZXRJZEZyb21TdHIBBQd0b1Rva2VuBRJ0b2tlbkJhbGFuY2VCZWZvcmUJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BDmV4Y2hhbmdlU3dvcEZpCgd0b1Rva2VuCXBtdEFtb3VudAhwbXRBc3NldApleGNoYW5nZXJzDmV4Y2hhbmdlcnNUeXBlBWFyZ3MxBWFyZ3MyEXJvdXRpbmdBc3NldHNLZXlzEm1pbkFtb3VudFRvUmVjZWl2ZQdvcHRpb25zBBJ0b2tlbkJhbGFuY2VCZWZvcmUJAQ5hY2NvdW50QmFsYW5jZQEJAQ5hc3NldElkRnJvbVN0cgEFB3RvVG9rZW4DCQAAAgUSdG9rZW5CYWxhbmNlQmVmb3JlBRJ0b2tlbkJhbGFuY2VCZWZvcmUEA2ludgkA/AcEBQpleENvbnRyYWN0Agpzd29wZmlTd2FwCQDMCAIFCmV4Y2hhbmdlcnMJAMwIAgUOZXhjaGFuZ2Vyc1R5cGUJAMwIAgUFYXJnczEJAMwIAgUFYXJnczIJAMwIAgURcm91dGluZ0Fzc2V0c0tleXMJAMwIAgUSbWluQW1vdW50VG9SZWNlaXZlCQDMCAIFB29wdGlvbnMFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUIcG10QXNzZXQFCXBtdEFtb3VudAUDbmlsAwkAAAIFA2ludgUDaW52CQBlAgkBDmFjY291bnRCYWxhbmNlAQkBDmFzc2V0SWRGcm9tU3RyAQUHdG9Ub2tlbgUSdG9rZW5CYWxhbmNlQmVmb3JlCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQpjYXBpdGFsaXplBARwb29sBXBUeXBlB3Rva2VuSWQLdG9rZW5BbW91bnQECHBvb2xBZGRyCQEHQWRkcmVzcwEJANkEAQUEcG9vbAQNJHQwMjIzNTcyMjQyMwkBC2dldFBvb2xEYXRhAgUIcG9vbEFkZHIFBXBUeXBlBANBSWQIBQ0kdDAyMjM1NzIyNDIzAl8xBANCSWQIBQ0kdDAyMjM1NzIyNDIzAl8yBARiYWxBCAUNJHQwMjIzNTcyMjQyMwJfMwQEYmFsQggFDSR0MDIyMzU3MjI0MjMCXzQEB3NoYXJlSWQIBQ0kdDAyMjM1NzIyNDIzAl81AwMJAQIhPQIFB3Rva2VuSWQFA0FJZAkBAiE9AgUHdG9rZW5JZAUDQklkBwkAAgECC1dyb25nIGFzc2V0BA0kdDAyMjUwODIyNTg4AwkAAAIFB3Rva2VuSWQFA0FJZAkAlAoCBQt0b2tlbkFtb3VudAAACQCUCgIAAAULdG9rZW5BbW91bnQEBHBtdEEIBQ0kdDAyMjUwODIyNTg4Al8xBARwbXRCCAUNJHQwMjI1MDgyMjU4OAJfMgQNJHQwMjI1OTEyMjY5NQkBD3JlcGxlbmlzaEJ5VHlwZQoFBXBUeXBlBQRwb29sBQZOT19GRUUFBHBtdEEFA0FJZAUEcG10QgUDQklkBQRiYWxBBQRiYWxCBQdzaGFyZUlkBAxzdGFrZWRBbW91bnQIBQ0kdDAyMjU5MTIyNjk1Al8xBAJuZggFDSR0MDIyNTkxMjI2OTUCXzIEE2N1clBvb2xJbnRlcmVzdExvYW4JAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICBQRwb29sBRFrUG9vbEludGVyZXN0TG9hbgAABBVjdXJQb29sSW50ZXJlc3ROb0xvYW4JAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICBQRwb29sBRNrUG9vbEludGVyZXN0Tm9Mb2FuAAAEEHRvdGFsU2hhcmVBbW91bnQJARFnZXRQb29sVG90YWxTaGFyZQEFBHBvb2wEGHRvdGFsU2hhcmVBbW91bnRXaXRoTG9hbgkBGWdldFBvb2xUb3RhbFNoYXJlV2l0aExvYW4BBQRwb29sBAtsb2FuUGVyY2VudAkAawMFGHRvdGFsU2hhcmVBbW91bnRXaXRoTG9hbgUGU0NBTEU4BRB0b3RhbFNoYXJlQW1vdW50BApzdGFrZWRMb2FuCQBrAwUMc3Rha2VkQW1vdW50BQtsb2FuUGVyY2VudAUGU0NBTEU4BAxzdGFrZWROb0xvYW4JAGUCBQxzdGFrZWRBbW91bnQFCnN0YWtlZExvYW4ED25ld0ludGVyZXN0TG9hbgMJAGYCBRh0b3RhbFNoYXJlQW1vdW50V2l0aExvYW4AAAkAZAIFE2N1clBvb2xJbnRlcmVzdExvYW4JAGsDBQpzdGFrZWRMb2FuBQdTQ0FMRTEwBRh0b3RhbFNoYXJlQW1vdW50V2l0aExvYW4AAAQRbmV3SW50ZXJlc3ROb0xvYW4DCQBmAgkAZQIFEHRvdGFsU2hhcmVBbW91bnQFGHRvdGFsU2hhcmVBbW91bnRXaXRoTG9hbgAACQBkAgUVY3VyUG9vbEludGVyZXN0Tm9Mb2FuCQBrAwUMc3Rha2VkTm9Mb2FuBQdTQ0FMRTEwCQBlAgUQdG90YWxTaGFyZUFtb3VudAUYdG90YWxTaGFyZUFtb3VudFdpdGhMb2FuAAAEC2F4bHlGZWVMb2FuCQBrAwUKc3Rha2VkTG9hbgkBCmdldEF4bHlGZWUCBQRwb29sBQxDQVBfRkVFX0xPQU4FCkZFRV9TQ0FMRTYEDWF4bHlGZWVOb0xvYW4JAGsDBQxzdGFrZWROb0xvYW4JAQpnZXRBeGx5RmVlAgUEcG9vbAUPQ0FQX0ZFRV9OT19MT0FOBQpGRUVfU0NBTEU2BAdheGx5RmVlCQEJdW5zdGFrZUxQBAUEcG9vbAUFcFR5cGUFB3NoYXJlSWQJAGQCBQtheGx5RmVlTG9hbgUNYXhseUZlZU5vTG9hbgMJAAACBQdheGx5RmVlBQdheGx5RmVlCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAURa1Bvb2xJbnRlcmVzdExvYW4FD25ld0ludGVyZXN0TG9hbgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBRNrUG9vbEludGVyZXN0Tm9Mb2FuBRFuZXdJbnRlcmVzdE5vTG9hbgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBQprUG9vbFRvdGFsCQBlAgkAZAIFEHRvdGFsU2hhcmVBbW91bnQFDHN0YWtlZEFtb3VudAUHYXhseUZlZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBQ5rUG9vbFRvdGFsTG9hbgkAZQIJAGQCBRh0b3RhbFNoYXJlQW1vdW50V2l0aExvYW4FCnN0YWtlZExvYW4FC2F4bHlGZWVMb2FuCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFCG1vbmV5Qm94CQBkAgULYXhseUZlZUxvYW4FDWF4bHlGZWVOb0xvYW4JANkEAQUHc2hhcmVJZAUDbmlsCQEOZ2V0Q3Vyc0VudHJpZXMDBQNBSWQFA0JJZAUHc2hhcmVJZAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgESd2l0aGRyYXdBbW91bnRDYWxjBARwb29sD3VzZXJDYW5XaXRoZHJhdwRkZWJ0C2JvcnJvd0Fzc2V0BAhwb29sQWRkcgkBB0FkZHJlc3MBCQDZBAEFBHBvb2wEBXBUeXBlCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwkArAICBQVrUG9vbAUEcG9vbAIMVW5rbm93biBwb29sBA0kdDAyNDQ2MzI0NTM5CQELZ2V0UG9vbERhdGECBQhwb29sQWRkcgUFcFR5cGUECGFzc2V0SWRBCAUNJHQwMjQ0NjMyNDUzOQJfMQQIYXNzZXRJZEIIBQ0kdDAyNDQ2MzI0NTM5Al8yBARiYWxBCAUNJHQwMjQ0NjMyNDUzOQJfMwQEYmFsQggFDSR0MDI0NDYzMjQ1MzkCXzQEB3NoYXJlSWQIBQ0kdDAyNDQ2MzI0NTM5Al81BAtjQmFsQUJlZm9yZQkBDmFjY291bnRCYWxhbmNlAQkBDmFzc2V0SWRGcm9tU3RyAQUIYXNzZXRJZEEDCQAAAgULY0JhbEFCZWZvcmUFC2NCYWxBQmVmb3JlBAtjQmFsQkJlZm9yZQkBDmFjY291bnRCYWxhbmNlAQkBDmFzc2V0SWRGcm9tU3RyAQUIYXNzZXRJZEIDCQAAAgULY0JhbEJCZWZvcmUFC2NCYWxCQmVmb3JlBANpbnYDCQAAAgUFcFR5cGUFB1NGX1BPT0wJAPwHBAUIcG9vbEFkZHICDGNhbGxGdW5jdGlvbgkAzAgCAgh3aXRoZHJhdwkAzAgCCQDMCAIJAKQDAQUPdXNlckNhbldpdGhkcmF3BQNuaWwFA25pbAUDbmlsBANpbnYJAQl1bnN0YWtlTFAEBQRwb29sBQVwVHlwZQUHc2hhcmVJZAUPdXNlckNhbldpdGhkcmF3AwkAAAIFA2ludgUDaW52CQD8BwQFCHBvb2xBZGRyAgNnZXQFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBDmFzc2V0SWRGcm9tU3RyAQUHc2hhcmVJZAUPdXNlckNhbldpdGhkcmF3BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4DCQAAAgUDaW52BQNpbnYECmNCYWxBQWZ0ZXIJAQ5hY2NvdW50QmFsYW5jZQEJAQ5hc3NldElkRnJvbVN0cgEFCGFzc2V0SWRBBApjQmFsQkFmdGVyCQEOYWNjb3VudEJhbGFuY2UBCQEOYXNzZXRJZEZyb21TdHIBBQhhc3NldElkQgQNJHQwMjUxMDIyNTE5MQkAlAoCCQBlAgUKY0JhbEFBZnRlcgULY0JhbEFCZWZvcmUJAGUCBQpjQmFsQkFmdGVyBQtjQmFsQkJlZm9yZQQNdG9rZW5zQW1vdW50QQgFDSR0MDI1MTAyMjUxOTECXzEEDXRva2Vuc0Ftb3VudEIIBQ0kdDAyNTEwMjI1MTkxAl8yBA0kdDAyNTE5NDI1ODkwAwkAZgIFBGRlYnQAAAQNYW1vdW50VG9HZXRFeAMDCQAAAgULYm9ycm93QXNzZXQFCGFzc2V0SWRBCQBmAgUEZGVidAUNdG9rZW5zQW1vdW50QQcJAGUCBQRkZWJ0BQ10b2tlbnNBbW91bnRBAwMJAAACBQtib3Jyb3dBc3NldAUIYXNzZXRJZEIJAGYCBQRkZWJ0BQ10b2tlbnNBbW91bnRCBwkAZQIFBGRlYnQFDXRva2Vuc0Ftb3VudEIAAAQFZXhJbnYDCQBmAgUNYW1vdW50VG9HZXRFeAAACQEQZXhjaGFuZ2VEaXJlY3RseQgFBXBUeXBlBQRwb29sBQhhc3NldElkQQUIYXNzZXRJZEIFBGJhbEEFBGJhbEIFDWFtb3VudFRvR2V0RXgFC2JvcnJvd0Fzc2V0AAADCQAAAgUFZXhJbnYFBWV4SW52BA9jQmFsQUFmdGVyUmVwYXkJAQ5hY2NvdW50QmFsYW5jZQEJAQ5hc3NldElkRnJvbVN0cgEFCGFzc2V0SWRBBA9jQmFsQkFmdGVyUmVwYXkJAQ5hY2NvdW50QmFsYW5jZQEJAQ5hc3NldElkRnJvbVN0cgEFCGFzc2V0SWRCCQCUCgIJAGUCBQ9jQmFsQUFmdGVyUmVwYXkFC2NCYWxBQmVmb3JlCQBlAgUPY0JhbEJBZnRlclJlcGF5BQtjQmFsQkJlZm9yZQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAlAoCBQ10b2tlbnNBbW91bnRBBQ10b2tlbnNBbW91bnRCBA10b1VzZXJBbW91bnRBCAUNJHQwMjUxOTQyNTg5MAJfMQQNdG9Vc2VyQW1vdW50QggFDSR0MDI1MTk0MjU4OTACXzIJAJkKBwUNdG9Vc2VyQW1vdW50QQUIYXNzZXRJZEEFDXRvVXNlckFtb3VudEIFCGFzc2V0SWRCBQpjQmFsQUFmdGVyBQpjQmFsQkFmdGVyBQdzaGFyZUlkCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuARh1c2VyQ2FuV2l0aGRyYXdTaGFyZUNhbGMEBHVzZXIEcG9vbAVwb3NJZAhib3Jyb3dlZAQHcEFtb3VudAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFBHRoaXMJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfBQVwb3NJZAUNa1VzZXJQb3NpdGlvbgIQVW5rbm93biBwb3NpdGlvbgQMdXNlckludGVyZXN0CQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgIBXwUFcG9zSWQFFWtVc2VyUG9zaXRpb25JbnRlcmVzdAQMcG9vbEludGVyZXN0AwUIYm9ycm93ZWQJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgUEcG9vbAURa1Bvb2xJbnRlcmVzdExvYW4JARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgUEcG9vbAUTa1Bvb2xJbnRlcmVzdE5vTG9hbgkAZAIFB3BBbW91bnQJAGsDBQdwQW1vdW50CQBlAgUMcG9vbEludGVyZXN0BQx1c2VySW50ZXJlc3QFB1NDQUxFMTABDndpdGhkcmF3VG9Vc2VyBAR1c2VyBHBvb2wFcG9zSWQIc3RvcExvc3MEB3BBbW91bnQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgIBXwUFcG9zSWQFDWtVc2VyUG9zaXRpb24CEFVua25vd24gcG9zaXRpb24EDHVzZXJJbnRlcmVzdAkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXICAV8FBXBvc0lkBRVrVXNlclBvc2l0aW9uSW50ZXJlc3QEDGJvcnJvd0Ftb3VudAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgIBXwUFcG9zSWQFEWtVc2VyQm9ycm93QW1vdW50AAAED3VzZXJDYW5XaXRoZHJhdwkBGHVzZXJDYW5XaXRoZHJhd1NoYXJlQ2FsYwQFBHVzZXIFBHBvb2wFBXBvc0lkCQBmAgUMYm9ycm93QW1vdW50AAAEDnBvb2xUb3RhbFNoYXJlCQERZ2V0UG9vbFRvdGFsU2hhcmUBBQRwb29sBAh1c2VyQWRkcgkBB0FkZHJlc3MBCQDZBAEFBHVzZXIEC2JvcnJvd0Fzc2V0CQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfBQVwb3NJZAUSa1VzZXJCb3Jyb3dBc3NldElkAgAEBGRlYnQDCQBmAgUMYm9ycm93QW1vdW50AAAKAAFACQD8BwQJAQ5nZXRMZW5kU3J2QWRkcgACDGdldEFzc2V0RGVidAkAzAgCBwkAzAgCCQCsAgIJAKwCAgUEdXNlcgIBXwUFcG9zSWQJAMwIAgULYm9ycm93QXNzZXQFA25pbAUDbmlsAwkAAQIFAUACA0ludAUBQAkAAgEJAKwCAgkAAwEFAUACGCBjb3VsZG4ndCBiZSBjYXN0IHRvIEludAAABA0kdDAyNzM4OTI3NTQyCQESd2l0aGRyYXdBbW91bnRDYWxjBAUEcG9vbAUPdXNlckNhbldpdGhkcmF3BQRkZWJ0BQtib3Jyb3dBc3NldAMJAAACBQ0kdDAyNzM4OTI3NTQyBQ0kdDAyNzM4OTI3NTQyBAdzaGFyZUlkCAUNJHQwMjczODkyNzU0MgJfNwQKY0JhbEJBZnRlcggFDSR0MDI3Mzg5Mjc1NDICXzYECmNCYWxBQWZ0ZXIIBQ0kdDAyNzM4OTI3NTQyAl81BAhhc3NldElkQggFDSR0MDI3Mzg5Mjc1NDICXzQEDXRvVXNlckFtb3VudEIIBQ0kdDAyNzM4OTI3NTQyAl8zBAhhc3NldElkQQgFDSR0MDI3Mzg5Mjc1NDICXzIEDXRvVXNlckFtb3VudEEIBQ0kdDAyNzM4OTI3NTQyAl8xBAtjbG9zZURidEludgMJAGYCBQRkZWJ0AAAJAPwHBAkBDmdldExlbmRTcnZBZGRyAAIIcmVwYXlGb3IJAMwIAgkArAICCQCsAgIFBHVzZXICAV8FBXBvc0lkBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQ5hc3NldElkRnJvbVN0cgEFC2JvcnJvd0Fzc2V0BQRkZWJ0BQNuaWwAAAMJAAACBQtjbG9zZURidEludgULY2xvc2VEYnRJbnYJAM4IAgkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgIBXwUFcG9zSWQFDWtVc2VyUG9zaXRpb24JAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXICAV8FBXBvc0lkBRVrVXNlclBvc2l0aW9uSW50ZXJlc3QJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAUKa1Bvb2xUb3RhbAkAZQIFDnBvb2xUb3RhbFNoYXJlBQ91c2VyQ2FuV2l0aGRyYXcJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUIdXNlckFkZHIFDXRvVXNlckFtb3VudEEJAQ5hc3NldElkRnJvbVN0cgEFCGFzc2V0SWRBCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFCHVzZXJBZGRyBQ10b1VzZXJBbW91bnRCCQEOYXNzZXRJZEZyb21TdHIBBQhhc3NldElkQgUDbmlsCQEOZ2V0Q3Vyc0VudHJpZXMDBQhhc3NldElkQQUIYXNzZXRJZEIFB3NoYXJlSWQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BDHBhcnNlUmVxdWVzdAEJcmVxdWVzdElkBAdyZXF1ZXN0CQC1CQIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzCQCsAgIFCXJlcXVlc3RJZAUKa1JlcXVlc3RJZAkArAICAhNObyByZXF1ZXN0IHdpdGggaWQgBQlyZXF1ZXN0SWQCASwEBHVzZXIJAJEDAgUHcmVxdWVzdAAABARwb29sCQCRAwIFB3JlcXVlc3QAAQQEcG10QQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB3JlcXVlc3QAAgQDQUlkCQCRAwIFB3JlcXVlc3QAAwQEcG10QgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB3JlcXVlc3QABAQDQklkCQCRAwIFB3JlcXVlc3QABQQEYmFsQQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB3JlcXVlc3QABgQEYmFsQgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB3JlcXVlc3QABwQHc2hhcmVJZAkAkQMCBQdyZXF1ZXN0AAgEB2J3QXNzZXQJAJEDAgUHcmVxdWVzdAAJBAhid0Ftb3VudAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB3JlcXVlc3QACgkAnQoLBQR1c2VyBQRwb29sBQRwbXRBBQNBSWQFBHBtdEIFA0JJZAUEYmFsQQUEYmFsQgUHc2hhcmVJZAUHYndBc3NldAUIYndBbW91bnQBEGNhbGNCb3Jyb3dBbW91bnQGBHBtdEEEcG10QgNhSWQDYklkCGxldmVyYWdlCGJvcnJvd0lkBAdkUHJpY2VBCAoAAUAJAPwHBAUPcHJpY2VPcmFjbGVBZGRyAglnZXRUV0FQNjAJAMwIAgUDYUlkCQDMCAIHBQNuaWwFA25pbAMJAAECBQFAAgooSW50LCBJbnQpBQFACQACAQkArAICCQADAQUBQAIfIGNvdWxkbid0IGJlIGNhc3QgdG8gKEludCwgSW50KQJfMgQHZFByaWNlQggKAAFACQD8BwQFD3ByaWNlT3JhY2xlQWRkcgIJZ2V0VFdBUDYwCQDMCAIFA2JJZAkAzAgCBwUDbmlsBQNuaWwDCQABAgUBQAIKKEludCwgSW50KQUBQAkAAgEJAKwCAgkAAwEFAUACHyBjb3VsZG4ndCBiZSBjYXN0IHRvIChJbnQsIEludCkCXzIEBmRlY1ByQQkAbAYACgAACQEQZ2V0QXNzZXREZWNpbWFscwEFA2FJZAAAAAAFBERPV04EBmRlY1ByQgkAbAYACgAACQEQZ2V0QXNzZXREZWNpbWFscwEFA2JJZAAAAAAFBERPV04EDHBheWRJbkRvbGxhcgkAZAIJAGsDBQdkUHJpY2VBBQRwbXRBBQZkZWNQckEJAGsDBQdkUHJpY2VCBQRwbXRCBQZkZWNQckIEDSR0MDI5MjI4MjkzMjUDCQAAAgUIYm9ycm93SWQFA2FJZAkAlAoCBQdkUHJpY2VBBQZkZWNQckEJAJQKAgUHZFByaWNlQgUGZGVjUHJCBAtib3Jyb3dQcmljZQgFDSR0MDI5MjI4MjkzMjUCXzEEC2JvcnJvd0RlY1ByCAUNJHQwMjkyMjgyOTMyNQJfMgkAawMJAGsDBQxwYXlkSW5Eb2xsYXIJAGUCBQhsZXZlcmFnZQBkAGQFC2JvcnJvd0RlY1ByBQtib3Jyb3dQcmljZRABaQEXY2FsY1ByaWNlSW1wYWN0RVZBTE9OTFkFBHBvb2wIbGV2ZXJhZ2UIYm9ycm93SWQEcG10QQRwbXRCAwMJAGYCAGQFCGxldmVyYWdlBgkAZgIFCGxldmVyYWdlAKwCCQACAQIfTGV2ZXJhZ2UgY2FuJ3QgYmUgPDEwMCBhbmQgPjMwMAQFcFR5cGUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzCQCsAgIFBWtQb29sBQRwb29sAhJQb29sIGlzIG5vdCBpbml0ZWQEDSR0MDI5NzQzMjk4MzMJAQtnZXRQb29sRGF0YQIJAQdBZGRyZXNzAQkA2QQBBQRwb29sBQVwVHlwZQQDQUlkCAUNJHQwMjk3NDMyOTgzMwJfMQQDQklkCAUNJHQwMjk3NDMyOTgzMwJfMgQEYmFsQQgFDSR0MDI5NzQzMjk4MzMCXzMEBGJhbEIIBQ0kdDAyOTc0MzI5ODMzAl80BAdzaGFyZUlkCAUNJHQwMjk3NDMyOTgzMwJfNQQMYm9ycm93QW1vdW50AwkAZgIFCGxldmVyYWdlAGQJARBjYWxjQm9ycm93QW1vdW50BgUEcG10QQUEcG10QgUDQUlkBQNCSWQFCGxldmVyYWdlBQhib3Jyb3dJZAAABA0kdDAyOTk2ODMwMDc1AwkAAAIFCGJvcnJvd0lkBQNBSWQJAJQKAgkAZAIFBHBtdEEFDGJvcnJvd0Ftb3VudAUEcG10QgkAlAoCBQRwbXRBCQBkAgUEcG10QgUMYm9ycm93QW1vdW50BAZwYXlJbkEIBQ0kdDAyOTk2ODMwMDc1Al8xBAZwYXlJbkIIBQ0kdDAyOTk2ODMwMDc1Al8yBA0kdDAzMDA3ODMwMTcxCQETY2FsY1JlcGxlbmlzaExQVmlydAgFBXBUeXBlBQRwb29sBQZwYXlJbkEFA0FJZAUGcGF5SW5CBQNCSWQFBGJhbEEFBGJhbEIECGxwQW1vdW50CAUNJHQwMzAwNzgzMDE3MQJfMQQEbG9zcwgFDSR0MDMwMDc4MzAxNzECXzIECWltcGFjdE1vZAMJAGYCAAAFBGxvc3MJAGgCBQRsb3NzAP///////////wEFBGxvc3MJAJQKAgUDbmlsCQDMCAIFCWltcGFjdE1vZAUDbmlsAWkBGmdldFNoYXJlQXNzZXRQcmljZVJFQURPTkxZAQdzaGFyZUlkBAtzaGFyZVByaWNlcwkBDWdldFNoYXJlUHJpY2UBBQdzaGFyZUlkCQCUCgIFA25pbAULc2hhcmVQcmljZXMBaQEiZ2V0VXNlclBvc2l0aW9uU2hhcmVBbW91bnRSRUFET05MWQIEdXNlcgZwb3NOdW0EBHBvb2wJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzCQCsAgIJAKwCAgkArAICBQR1c2VyAgFfBQZwb3NOdW0FEWtVc2VyUG9zaXRpb25Qb29sAhBVbmtub3duIHBvc2l0aW9uBAxib3Jyb3dBbW91bnQJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfBQZwb3NOdW0FEWtVc2VyQm9ycm93QW1vdW50BA91c2VyQ2FuV2l0aGRyYXcJARh1c2VyQ2FuV2l0aGRyYXdTaGFyZUNhbGMEBQR1c2VyBQRwb29sBQZwb3NOdW0JAGYCBQxib3Jyb3dBbW91bnQAAAkAlAoCBQNuaWwFD3VzZXJDYW5XaXRoZHJhdwFpASBnZXRVc2VyUG9zaXRpb25JbkRvbGxhcnNSRUFET05MWQMEdXNlcgVwb29scwZwb3NOdW0KAQd1c2VyUG9zAgFhBHBvb2wEDSR0MDMwOTg0MzEwMTgFAWEECHRvdGFsUG9zCAUNJHQwMzA5ODQzMTAxOAJfMQQHcG9zRGVidAgFDSR0MDMwOTg0MzEwMTgCXzIEBWluZGV4CAUNJHQwMzA5ODQzMTAxOAJfMwQFcFR5cGUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzCQCsAgIFBWtQb29sBQRwb29sAhJQb29sIGlzIG5vdCBpbml0ZWQEDSR0MDMxMTEwMzEyMDAJAQtnZXRQb29sRGF0YQIJAQdBZGRyZXNzAQkA2QQBBQRwb29sBQVwVHlwZQQDQUlkCAUNJHQwMzExMTAzMTIwMAJfMQQDQklkCAUNJHQwMzExMTAzMTIwMAJfMgQEYmFsQQgFDSR0MDMxMTEwMzEyMDACXzMEBGJhbEIIBQ0kdDAzMTExMDMxMjAwAl80BAdzaGFyZUlkCAUNJHQwMzExMTAzMTIwMAJfNQQMYm9ycm93QW1vdW50CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfCQCRAwIFBnBvc051bQUFaW5kZXgFEWtVc2VyQm9ycm93QW1vdW50AAAED3VzZXJDYW5XaXRoZHJhdwkBGHVzZXJDYW5XaXRoZHJhd1NoYXJlQ2FsYwQFBHVzZXIFBHBvb2wJAJEDAgUGcG9zTnVtBQVpbmRleAkAZgIFDGJvcnJvd0Ftb3VudAAABAtzaGFyZVByaWNlcwkBDWdldFNoYXJlUHJpY2UBBQdzaGFyZUlkBApkZWNQclNoYXJlCQBsBgAKAAAJARBnZXRBc3NldERlY2ltYWxzAQUHc2hhcmVJZAAAAAAFBERPV04EBnNoYXJlRAkAawMFD3VzZXJDYW5XaXRoZHJhdwULc2hhcmVQcmljZXMFCmRlY1ByU2hhcmUDCQAAAgUMYm9y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BAgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQFA0FJZAgJAJEDAggFAWkIcGF5bWVudHMAAQZhbW91bnQFA0JJZAMJAAACCQCQAwEIBQFpCHBheW1lbnRzAAEDCQAAAgkBDGFzc2V0SWRUb1N0cgEICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAUDQUlkCQCWCgQICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BQNBSWQAAAUDQklkAwkAAAIJAQxhc3NldElkVG9TdHIBCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQFA0JJZAkAlgoEAAAFA0FJZAgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQFA0JJZAkAAgECDVdyb25nIHBheW1lbnQJAAIBAhxPbmUgb3IgdHdvIHBheW1lbnRzIGV4cGVjdGVkBARwbXRBCAUNJHQwMzI3MTQzMzM1MQJfMQQJcG10QXNzZXRBCAUNJHQwMzI3MTQzMzM1MQJfMgQEcG10QggFDSR0MDMyNzE0MzMzNTECXzMECXBtdEFzc2V0QggFDSR0MDMyNzE0MzMzNTECXzQECW5ld1Bvc051bQkBGGdldE5ld1VzZXJQb3NpdGlvbk51bWJlcgEJAKUIAQgFAWkGY2FsbGVyAwkAZgIFCGxldmVyYWdlAGQEDGJvcnJvd0Ftb3VudAkBEGNhbGNCb3Jyb3dBbW91bnQGBQRwbXRBBQRwbXRCBQlwbXRBc3NldEEFCXBtdEFzc2V0QgUIbGV2ZXJhZ2UFCGJvcnJvd0lkBAdyZXF1ZXN0CQC5CQIJAMwIAgkApQgBCAUBaQZjYWxsZXIJAMwIAgUEcG9vbAkAzAgCCQCkAwEFBHBtdEEJAMwIAgUJcG10QXNzZXRBCQDMCAIJAKQDAQUEcG10QgkAzAgCBQlwbXRBc3NldEIJAMwIAgkApAMBBQRiYWxBCQDMCAIJAKQDAQUEYmFsQgkAzAgCBQdzaGFyZUlkCQDMCAIFCGJvcnJvd0lkCQDMCAIJAKQDAQUMYm9ycm93QW1vdW50BQNuaWwCASwEDG5ld1JlcXVlc3RJZAoAAUAJAPwHBAUEdGhpcwIQY3JlYXRlTmV3UmVxdWVzdAkAzAgCBQdyZXF1ZXN0BQNuaWwFA25pbAMJAAECBQFAAgNJbnQFAUAJAAIBCQCsAgIJAAMBBQFAAhggY291bGRuJ3QgYmUgY2FzdCB0byBJbnQDCQAAAgUMbmV3UmVxdWVzdElkBQxuZXdSZXF1ZXN0SWQEBGFyZ3MJAMwIAgkArAICCQCsAgIJAKUIAQgFAWkGY2FsbGVyAgFfCQCkAwEFCW5ld1Bvc051bQkAzAgCBQdzaGFyZUlkCQDMCAIFCGJvcnJvd0lkCQDMCAIFDGJvcnJvd0Ftb3VudAkAzAgCCQClCAEFBHRoaXMJAMwIAgIRcmVwbGVuaXNoRnJvbUxhbmQJAMwIAgkApAMBCQETdmFsdWVPckVycm9yTWVzc2FnZQIFDG5ld1JlcXVlc3RJZAIYQ2FuJ3QgY3JlYXRlIG5ldyByZXF1ZXN0BQNuaWwEA2ludgkA/QcECQEOZ2V0TGVuZFNydkFkZHIAAg1mbGFzaFBvc2l0aW9uBQRhcmdzBQNuaWwDCQAAAgUDaW52BQNpbnYFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgQNJHQwMzQyNzkzNDM5MQkBD3JlcGxlbmlzaEJ5VHlwZQoFBXBUeXBlBQRwb29sBQtOT19MT0FOX0ZFRQUEcG10QQUDQUlkBQRwbXRCBQNCSWQFBGJhbEEFBGJhbEIFB3NoYXJlSWQECnVzZXJTdGFrZWQIBQ0kdDAzNDI3OTM0MzkxAl8xBAdheGx5RmVlCAUNJHQwMzQyNzkzNDM5MQJfMgkAzggCCQEQcmVwbGVuaXNoRW50cmllcwgFBHBvb2wJAKUIAQgFAWkGY2FsbGVyBQp1c2VyU3Rha2VkBQdheGx5RmVlBQluZXdQb3NOdW0FB3NoYXJlSWQFBXBUeXBlBwkBDmdldEN1cnNFbnRyaWVzAwUDQUlkBQNCSWQFB3NoYXJlSWQBaQEId2l0aGRyYXcCBHBvb2wFcG9zSWQJAQ53aXRoZHJhd1RvVXNlcgQJAKUIAQgFAWkGY2FsbGVyBQRwb29sCQCkAwEFBXBvc0lkBwFpARRjcmVhdGVVcGRhdGVTdG9wTG9zcwQFcG9zSWQGcG9vbElkB2Fzc2V0SWQFcHJpY2UEEHRva2VuT3JhY2xlUHJpY2UICgABQAkA/AcEBQ9wcmljZU9yYWNsZUFkZHICCWdldFRXQVA2MAkAzAgCBQdhc3NldElkCQDMCAIHBQNuaWwFA25pbAMJAAECBQFAAgooSW50LCBJbnQpBQFACQACAQkArAICCQADAQUBQAIfIGNvdWxkbid0IGJlIGNhc3QgdG8gKEludCwgSW50KQJfMQMJAQEhAQkBCWlzRGVmaW5lZAEJAJoIAgUEdGhpcwkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFBnBvb2xJZAIBXwkApQgBCAUBaQZjYWxsZXICAV8JAKQDAQUFcG9zSWQFDWtVc2VyUG9zaXRpb24JAAIBAhpUaGVyZSBhcmUgbm8gdXNlciBwb3NpdGlvbgMJAGcCAAAFBXByaWNlCQACAQIcUHJpY2UgbXVzdCBiZSBncmVhdGVyIHRoYW4gMAMJAGYCBQVwcmljZQUQdG9rZW5PcmFjbGVQcmljZQkAAgECK1ByaWNlIG11c3QgYmUgbGVzcyB0aGFuIGN1cnJlbnQgdG9rZW4gcHJpY2UJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkApQgBCAUBaQZjYWxsZXICAV8JAKQDAQUFcG9zSWQCAV8FBnBvb2xJZAIBXwUHYXNzZXRJZAUNa1VzZXJTdG9wTG9zcwUFcHJpY2UFA25pbAFpAQ5kZWxldGVTdG9wTG9zcwMFcG9zSWQGcG9vbElkB2Fzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBCQCaCAIFBHRoaXMJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkApQgBCAUBaQZjYWxsZXICAV8JAKQDAQUFcG9zSWQCAV8FBnBvb2xJZAIBXwUHYXNzZXRJZAUNa1VzZXJTdG9wTG9zcwkAAgECCE5vIGVudHJ5CQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkApQgBCAUBaQZjYWxsZXICAV8JAKQDAQUFcG9zSWQCAV8FBnBvb2xJZAIBXwUHYXNzZXRJZAUNa1VzZXJTdG9wTG9zcwUDbmlsAWkBEGNyZWF0ZU5ld1JlcXVlc3QBBnBhcmFtcwkBC3ZhbHVlT3JFbHNlAgkBCmlzU2VsZkNhbGwBBQFpBAxuZXdSZXF1ZXN0SWQJAGQCCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFDGtSZXF1ZXN0SXRlcgAAAAEJAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKQDAQUMbmV3UmVxdWVzdElkBQprUmVxdWVzdElkBQZwYXJhbXMJAMwIAgkBDEludGVnZXJFbnRyeQIFDGtSZXF1ZXN0SXRlcgUMbmV3UmVxdWVzdElkBQNuaWwFDG5ld1JlcXVlc3RJZAFpARFyZXBsZW5pc2hGcm9tTGFuZAEJcmVxdWVzdElkCQELdmFsdWVPckVsc2UCCQEKaXNMYW5kQ2FsbAEFAWkEDSR0MDM2MTQ0MzYyNDgJAQxwYXJzZVJlcXVlc3QBBQlyZXF1ZXN0SWQEBHVzZXIIBQ0kdDAzNjE0NDM2MjQ4Al8xBARwb29sCAUNJHQwMzYxNDQzNjI0OAJfMgQEcG10QQgFDSR0MDM2MTQ0MzYyNDgCXzMEA0FJZAgFDSR0MDM2MTQ0MzYyNDgCXzQEBHBtdEIIBQ0kdDAzNjE0NDM2MjQ4Al81BANCSWQIBQ0kdDAzNjE0NDM2MjQ4Al82BARiYWxBCAUNJHQwMzYxNDQzNjI0OAJfNwQEYmFsQggFDSR0MDM2MTQ0MzYyNDgCXzgEB3NoYXJlSWQIBQ0kdDAzNjE0NDM2MjQ4Al85BAdid0Fzc2V0CAUNJHQwMzYxNDQzNjI0OANfMTAECGJ3QW1vdW50CAUNJHQwMzYxNDQzNjI0OANfMTEDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhJXcm9uZyBwYXltZW50IHNpemUDAwkBAiE9AgkBDGFzc2V0SWRUb1N0cgEICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAUHYndBc3NldAYJAQIhPQIICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BQhid0Ftb3VudAkAAgECDVdyb25nIHBheW1lbnQEDSR0MDM2NDM4MzY1NjIDCQAAAgUDQUlkBQdid0Fzc2V0CQCUCgIJAGQCBQRwbXRBCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAUEcG10QgkAlAoCBQRwbXRBCQBkAgUEcG10QggJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQEB3BtdEFsbEEIBQ0kdDAzNjQzODM2NTYyAl8xBAdwbXRBbGxCCAUNJHQwMzY0MzgzNjU2MgJfMgQFcFR5cGUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzCQCsAgIFBWtQb29sBQRwb29sAgxVbmtub3duIHBvb2wEDSR0MDM2NjQ0MzY3NTkJAQ9yZXBsZW5pc2hCeVR5cGUKBQVwVHlwZQUEcG9vbAUITE9BTl9GRUUFB3BtdEFsbEEFA0FJZAUHcG10QWxsQgUDQklkBQRiYWxBBQRiYWxCBQdzaGFyZUlkBAp1c2VyU3Rha2VkCAUNJHQwMzY2NDQzNjc1OQJfMQQHYXhseUZlZQgFDSR0MDM2NjQ0MzY3NTkCXzIEBnBvc051bQkBGGdldE5ld1VzZXJQb3NpdGlvbk51bWJlcgEFBHVzZXIEDWJvcnJvd0VudHJpZXMJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfCQCkAwEFBnBvc051bQURa1VzZXJCb3Jyb3dBbW91bnQFCGJ3QW1vdW50CQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfCQCkAwEFBnBvc051bQUSa1VzZXJCb3Jyb3dBc3NldElkBQdid0Fzc2V0BQNuaWwEB2VudHJpZXMJARByZXBsZW5pc2hFbnRyaWVzCAUEcG9vbAUEdXNlcgUKdXNlclN0YWtlZAUHYXhseUZlZQUGcG9zTnVtBQdzaGFyZUlkBQVwVHlwZQYJAJQKAgkAzQgCCQDOCAIJAM4IAgUHZW50cmllcwkBDmdldEN1cnNFbnRyaWVzAwUDQUlkBQNCSWQFB3NoYXJlSWQFDWJvcnJvd0VudHJpZXMJAQtEZWxldGVFbnRyeQEJAKwCAgUJcmVxdWVzdElkBQprUmVxdWVzdElkBQp1c2VyU3Rha2VkAWkBCWxpcXVpZGF0ZQMEdXNlcgVwb3NJZA9saXF1aWRhdGVBbW91bnQJAQt2YWx1ZU9yRWxzZQIJAQppc0xhbmRDYWxsAQUBaQQEcG9vbAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMJAKwCAgkArAICCQCsAgIFBHVzZXICAV8FBXBvc0lkBRFrVXNlclBvc2l0aW9uUG9vbAILbm8gcG9zaXRpb24EBXBUeXBlCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwkArAICBQVrUG9vbAUEcG9vbAISUG9vbCBpcyBub3QgaW5pdGVkBA0kdDAzNzUzODM3NjI4CQELZ2V0UG9vbERhdGECCQEHQWRkcmVzcwEJANkEAQUEcG9vbAUFcFR5cGUEA0FJZAgFDSR0MDM3NTM4Mzc2MjgCXzEEA0JJZAgFDSR0MDM3NTM4Mzc2MjgCXzIEBGJhbEEIBQ0kdDAzNzUzODM3NjI4Al8zBARiYWxCCAUNJHQwMzc1MzgzNzYyOAJfNAQHc2hhcmVJZAgFDSR0MDM3NTM4Mzc2MjgCXzUEBmFtb3VudAkBCXVuc3Rha2VMUAQFBHBvb2wFBXBUeXBlBQdzaGFyZUlkBQ9saXF1aWRhdGVBbW91bnQEDGJvcnJvd0Ftb3VudAkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXICAV8FBXBvc0lkBRFrVXNlckJvcnJvd0Ftb3VudAQLYm9ycm93QXNzZXQJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfBQVwb3NJZAUSa1VzZXJCb3Jyb3dBc3NldElkBA91c2VyQ2FuV2l0aGRyYXcJARh1c2VyQ2FuV2l0aGRyYXdTaGFyZUNhbGMEBQR1c2VyBQRwb29sBQVwb3NJZAkAZgIFDGJvcnJvd0Ftb3VudAAAAwkAAAIFDGJvcnJvd0Ftb3VudAAACQACAQIrWW91IGNhbid0IGxpcXVpZGF0ZSBwb3NpdGlvbiB3aXRob3V0IGJvcnJvdwkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXICAV8FBXBvc0lkBRVrVXNlclBvc2l0aW9uSW50ZXJlc3QJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgUEcG9vbAURa1Bvb2xJbnRlcmVzdExvYW4JAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAUOa1Bvb2xUb3RhbExvYW4JAGUCCQEZZ2V0UG9vbFRvdGFsU2hhcmVXaXRoTG9hbgEFBHBvb2wFD2xpcXVpZGF0ZUFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBQprUG9vbFRvdGFsCQBlAgkBEWdldFBvb2xUb3RhbFNoYXJlAQUEcG9vbAUPbGlxdWlkYXRlQW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgIBXwUFcG9zSWQFDWtVc2VyUG9zaXRpb24JAGUCBQ91c2VyQ2FuV2l0aGRyYXcFD2xpcXVpZGF0ZUFtb3VudAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFBmFtb3VudAkA2QQBBQdzaGFyZUlkBQNuaWwBaQEIc3RvcExvc3MEBHVzZXIFcG9zSWQEcG9vbAdhc3NldElkCQELdmFsdWVPckVsc2UCCQELaXNBZG1pbkNhbGwBBQFpBBB0b2tlbk9yYWNsZVByaWNlCAoAAUAJAPwHBAUPcHJpY2VPcmFjbGVBZGRyAglnZXRUV0FQNjAJAMwIAgUHYXNzZXRJZAkAzAgCBwUDbmlsBQNuaWwDCQABAgUBQAIKKEludCwgSW50KQUBQAkAAgEJAKwCAgkAAwEFAUACHyBjb3VsZG4ndCBiZSBjYXN0IHRvIChJbnQsIEludCkCXzEDCQEBIQEJAQlpc0RlZmluZWQBCQCaCAIFBHRoaXMJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUEdXNlcgIBXwkApAMBBQVwb3NJZAIBXwUEcG9vbAIBXwUHYXNzZXRJZAUNa1VzZXJTdG9wTG9zcwkAAgECCE5vIGVudHJ5CQDNCAIJAQ53aXRoZHJhd1RvVXNlcgQJAKUIAQgFAWkGY2FsbGVyBQRwb29sCQCkAwEFBXBvc0lkBgkBC0RlbGV0ZUVudHJ5AQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQR1c2VyAgFfCQCkAwEFBXBvc0lkAgFfBQRwb29sAgFfBQdhc3NldElkBQ1rVXNlclN0b3BMb3NzAWkBEmNhcGl0YWxpemVFeEtlZXBlcgwEcG9vbAR0eXBlCXRva2VuVG9JZBBhbW91bnRUb0V4Y2hhbmdlBWNsYWltCWFtb3VudHNJbglhZGRyZXNzZXMPYXNzZXRzVG9SZWNlaXZlC2VzdFJlY2VpdmVkEXNsaXBwYWdlVG9sZXJhbmNlC21pblJlY2VpdmVkB29wdGlvbnMJAQt2YWx1ZU9yRWxzZQIJAQtpc0FkbWluQ2FsbAEFAWkEDSR0MDM5NDE0Mzk2MDgDBQVjbGFpbQkBC2NsYWltRmFybWVkAgUEdHlwZQUEcG9vbAQMY2xhaW1lZEFzc2V0AwkAAAIFBHR5cGUFB1NGX1BPT0wFBlNXT1BJRAUEV1hJRAkAlAoCBRBhbW91bnRUb0V4Y2hhbmdlBQxjbGFpbWVkQXNzZXQEDWNsYWltZWRBbW91bnQIBQ0kdDAzOTQxNDM5NjA4Al8xBAxjbGFpbWVkQXNzZXQIBQ0kdDAzOTQxNDM5NjA4Al8yBA9leGNoYW5nZWRBbW91bnQJAQ5leGNoYW5nZUtlZXBlcgoFCXRva2VuVG9JZAUQYW1vdW50VG9FeGNoYW5nZQUMY2xhaW1lZEFzc2V0BQlhbW91bnRzSW4FCWFkZHJlc3NlcwUPYXNzZXRzVG9SZWNlaXZlBQtlc3RSZWNlaXZlZAURc2xpcHBhZ2VUb2xlcmFuY2UFC21pblJlY2VpdmVkBQdvcHRpb25zBAZjaGFuZ2UJAGUCBQ1jbGFpbWVkQW1vdW50BRBhbW91bnRUb0V4Y2hhbmdlBAtjaGFuZ2VFbnRyeQMJAGYCBQZjaGFuZ2UAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBQ5rUG9vbENhcENoYW5nZQkAZAIFBmNoYW5nZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIFBHBvb2wFDmtQb29sQ2FwQ2hhbmdlAAAFA25pbAUDbmlsCQDOCAIJAQpjYXBpdGFsaXplBAUEcG9vbAUEdHlwZQUJdG9rZW5Ub0lkBQ9leGNoYW5nZWRBbW91bnQFC2NoYW5nZUVudHJ5AWkBEmNhcGl0YWxpemVFeFB1enpsZQgEcG9vbAR0eXBlCXRva2VuVG9JZBBhbW91bnRUb0V4Y2hhbmdlBWNsYWltCXJvdXRlc1N0cgxtaW5Ub1JlY2VpdmUHb3B0aW9ucwkBC3ZhbHVlT3JFbHNlAgkBC2lzQWRtaW5DYWxsAQUBaQQNJHQwNDAyOTM0MDQ4NwMFBWNsYWltCQELY2xhaW1GYXJtZWQCBQR0eXBlBQRwb29sBAxjbGFpbWVkQXNzZXQDCQAAAgUEdHlwZQUHU0ZfUE9PTAUGU1dPUElEBQRXWElECQCUCgIFEGFtb3VudFRvRXhjaGFuZ2UFDGNsYWltZWRBc3NldAQNY2xhaW1lZEFtb3VudAgFDSR0MDQwMjkzNDA0ODcCXzEEDGNsYWltZWRBc3NldAgFDSR0MDQwMjkzNDA0ODcCXzIED2V4Y2hhbmdlZEFtb3VudAkBDmV4Y2hhbmdlUHV6emxlBgUJdG9rZW5Ub0lkBRBhbW91bnRUb0V4Y2hhbmdlBQxjbGFpbWVkQXNzZXQFCXJvdXRlc1N0cgUMbWluVG9SZWNlaXZlBQdvcHRpb25zBAZjaGFuZ2UJAGUCBQ1jbGFpbWVkQW1vdW50BRBhbW91bnRUb0V4Y2hhbmdlBAtjaGFuZ2VFbnRyeQMJAGYCBQZjaGFuZ2UAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBQ5rUG9vbENhcENoYW5nZQkAZAIFBmNoYW5nZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIFBHBvb2wFDmtQb29sQ2FwQ2hhbmdlAAAFA25pbAUDbmlsCQDOCAIJAQpjYXBpdGFsaXplBAUEcG9vbAUEdHlwZQUJdG9rZW5Ub0lkBQ9leGNoYW5nZWRBbW91bnQFC2NoYW5nZUVudHJ5AWkBEmNhcGl0YWxpemVFeFN3b3BGaQwEcG9vbAR0eXBlCXRva2VuVG9JZBBhbW91bnRUb0V4Y2hhbmdlBWNsYWltCmV4Y2hhbmdlcnMOZXhjaGFuZ2Vyc1R5cGUFYXJnczEFYXJnczIRcm91dGluZ0Fzc2V0c0tleXMSbWluQW1vdW50VG9SZWNlaXZlB29wdGlvbnMJAQt2YWx1ZU9yRWxzZQIJAQtpc0FkbWluQ2FsbAEFAWkEDSR0MDQxMjM4NDE0MzIDBQVjbGFpbQkBC2NsYWltRmFybWVkAgUEdHlwZQUEcG9vbAQMY2xhaW1lZEFzc2V0AwkAAAIFBHR5cGUFB1NGX1BPT0wFBlNXT1BJRAUEV1hJRAkAlAoCBRBhbW91bnRUb0V4Y2hhbmdlBQxjbGFpbWVkQXNzZXQEDWNsYWltZWRBbW91bnQIBQ0kdDA0MTIzODQxNDMyAl8xBAxjbGFpbWVkQXNzZXQIBQ0kdDA0MTIzODQxNDMyAl8yBA9leGNoYW5nZWRBbW91bnQJAQ5leGNoYW5nZVN3b3BGaQoFCXRva2VuVG9JZAUQYW1vdW50VG9FeGNoYW5nZQUMY2xhaW1lZEFzc2V0BQpleGNoYW5nZXJzBQ5leGNoYW5nZXJzVHlwZQUFYXJnczEFBWFyZ3MyBRFyb3V0aW5nQXNzZXRzS2V5cwUSbWluQW1vdW50VG9SZWNlaXZlBQdvcHRpb25zBAZjaGFuZ2UJAGUCBQ1jbGFpbWVkQW1vdW50BRBhbW91bnRUb0V4Y2hhbmdlBAtjaGFuZ2VFbnRyeQMJAGYCBQZjaGFuZ2UAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBQ5rUG9vbENhcENoYW5nZQkAZAIFBmNoYW5nZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIFBHBvb2wFDmtQb29sQ2FwQ2hhbmdlAAAFA25pbAUDbmlsCQDOCAIJAQpjYXBpdGFsaXplBAUEcG9vbAUEdHlwZQUJdG9rZW5Ub0lkBQ9leGNoYW5nZWRBbW91bnQFC2NoYW5nZUVudHJ5AWkBC2luaXROZXdQb29sCAR0eXBlCHBvb2xBZGRyC2luRmVlTm9Mb2FuCWluRmVlTG9hbgxjYXBGZWVOb0xvYW4OY2FwRmVlV2l0aExvYW4Rc3RvcGxvc3NGZWVOb0xvYW4Tc3RvcGxvc3NGZWVXaXRoTG9hbgkBC3ZhbHVlT3JFbHNlAgkBC2lzQWRtaW5DYWxsAQUBaQMDCQECIT0CBQR0eXBlBQdTRl9QT09MCQECIT0CBQR0eXBlBQdXWF9QT09MBwkAAgECCldyb25nIHR5cGUEDSR0MDQyMTUzNDIyNDcJAQtnZXRQb29sRGF0YQIJAQdBZGRyZXNzAQkA2QQBBQhwb29sQWRkcgUEdHlwZQQDYUlkCAUNJHQwNDIxNTM0MjI0NwJfMQQDYklkCAUNJHQwNDIxNTM0MjI0NwJfMgQEYUJhbAgFDSR0MDQyMTUzNDIyNDcCXzMEBGJCYWwIBQ0kdDA0MjE1MzQyMjQ3Al80BAdzaGFyZUlkCAUNJHQwNDIxNTM0MjI0NwJfNQkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQhwb29sQWRkcgUVa0F4bHlJbkZlZVdpdGhvdXRMb2FuBQtpbkZlZU5vTG9hbgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQhwb29sQWRkcgUSa0F4bHlJbkZlZVdpdGhMb2FuBQlpbkZlZUxvYW4JAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUIcG9vbEFkZHIFEWtBeGx5Tm9Mb2FuQ2FwRmVlBQxjYXBGZWVOb0xvYW4JAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUIcG9vbEFkZHIFE2tBeGx5V2l0aExvYW5DYXBGZWUFDmNhcEZlZVdpdGhMb2FuCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFCHBvb2xBZGRyBRZrQXhseVN0b3BMb3NzTm9Mb2FuRmVlBRFzdG9wbG9zc0ZlZU5vTG9hbgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQhwb29sQWRkcgUUa0F4bHlTdG9wTG9zc0xvYW5GZWUFE3N0b3Bsb3NzRmVlV2l0aExvYW4JAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUIcG9vbEFkZHIFEWtQb29sSW50ZXJlc3RMb2FuAAAJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUIcG9vbEFkZHIFE2tQb29sSW50ZXJlc3ROb0xvYW4AAAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIFBWtQb29sBQhwb29sQWRkcgUEdHlwZQkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIFB3NoYXJlSWQFCmtTaGFyZVBvb2wFCHBvb2xBZGRyBQNuaWwBAnR4AQZ2ZXJpZnkACQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAACAUCdHgPc2VuZGVyUHVibGljS2V5QfqShQ==", "height": 2632125, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: MKVGba9sen5yMEmFZwnYPjKw6jrWayBc21yHXCrWDL1 Next: DkrajyVuHSZoq41ZYhY7Z5okBAj1mYq3nSf2cftwnWHr Diff:
OldNewDifferences
11961196 let fx = fw._1
11971197 let fy = fw._2
11981198 let be = valueOrErrorMessage(getString(this, (L + aC)), "Unknown pool")
1199- let fz = cM(be, aC, g, bw, dF, bx, dG, aw, ax, av)
1199+ let fz = cM(be, aC, g, fx, dF, fy, dG, aw, ax, av)
12001200 let fr = fz._1
12011201 let dV = fz._2
12021202 let cY = aE(aF)
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = "SF"
55
66 let b = "WX"
77
88 let c = "capNoLoan"
99
1010 let d = "capLoan"
1111
1212 let e = "stopLossNoLoan"
1313
1414 let f = "stopLossLoan"
1515
1616 let g = "loan"
1717
1818 let h = "noLoan"
1919
2020 let i = "noFee"
2121
2222 let j = 100000000
2323
2424 let k = 10000000000
2525
2626 let l = 1000000
2727
2828 let m = "A_asset_balance"
2929
3030 let n = "B_asset_balance"
3131
3232 let o = "A_asset_id"
3333
3434 let p = "B_asset_id"
3535
3636 let q = "share_asset_id"
3737
3838 let r = "share_asset_supply"
3939
4040 let s = "commission"
4141
4242 let t = "_user_position"
4343
4444 let u = "_user_position_pool"
4545
4646 let v = "_user_position_borrow_amount"
4747
4848 let w = "_user_position_borrow_asset_id"
4949
5050 let x = "_user_position_number"
5151
5252 let y = "_user_position_interest"
5353
5454 let z = "_pool_total"
5555
5656 let A = "_pool_total_loan"
5757
5858 let B = "_pool_interest_loan"
5959
6060 let C = "_pool_interest_no_loan"
6161
6262 let D = "_axly_fee_without_loan"
6363
6464 let E = "_axly_fee_with_loan"
6565
6666 let F = "_axly_fee_cap_with_loan"
6767
6868 let G = "_axly_fee_cap_no_loan"
6969
7070 let H = "_axly_fee_stoploss_with_loan"
7171
7272 let I = "_axly_fee_stoploss_no_loan"
7373
7474 let J = "_request_id"
7575
7676 let K = "requests_iter"
7777
7878 let L = "pool_"
7979
8080 let M = "_pool_share_id"
8181
8282 let N = "_pool_cap_change"
8383
8484 let O = "last_price"
8585
8686 let P = "_stop_loss"
8787
8888 let Q = "axly_money_box"
8989
9090 let R = "swopfi_farming_addr"
9191
9292 let S = "lend_service_addr"
9393
9494 let T = "admin_call_pub_key"
9595
9696 let U = "price_oracle"
9797
9898 let V = "exchange_contract"
9999
100100 let W = "wx_swap_contract"
101101
102102 let X = Address(fromBase58String(valueOrErrorMessage(getString(this, Q), "No axly moneyBox address")))
103103
104104 let Y = Address(fromBase58String(valueOrErrorMessage(getString(this, V), "No exchange contract address")))
105105
106106 let Z = Address(fromBase58String(valueOrErrorMessage(getString(this, U), "No price oracle address")))
107107
108108 let aa = Address(fromBase58String(valueOrErrorMessage(getString(this, W), "No wx swap address")))
109109
110110 let ab = base58'4W19ndijcc2CsQa9HGW2dfXKTVXhnneWWttxXrtjPmEp'
111111
112112 let ac = base58'EMAMLxDnv3xiz8RXg8Btj33jcEw3wLczL3JKYYmuubpc'
113113
114114 func ad () = Address(fromBase58String(valueOrErrorMessage(getString(this, S), "Can't get lend service addr")))
115115
116116
117117 func ae () = addressFromPublicKey(fromBase58String(valueOrErrorMessage(getString(this, T), "Can't get lend service addr")))
118118
119119
120120 func af (ag) = if ((ag.caller == ae()))
121121 then unit
122122 else throw("Only admin can call this function")
123123
124124
125125 func ah (ag) = if ((ag.caller == this))
126126 then unit
127127 else throw("Only contract itself can call this function")
128128
129129
130130 func ai (ag) = if ((ag.caller == ad()))
131131 then unit
132132 else throw("Only land contract can call this function")
133133
134134
135135 func aj (ak) = {
136136 let al = ak
137137 if ($isInstanceOf(al, "ByteVector"))
138138 then {
139139 let am = al
140140 assetBalance(this, am)
141141 }
142142 else if ($isInstanceOf(al, "Unit"))
143143 then {
144144 let an = al
145145 wavesBalance(this).available
146146 }
147147 else throw("Match error")
148148 }
149149
150150
151151 func ao (ap) = $Tuple5(valueOrErrorMessage(getString(ap, o), "Can't get pool A asset id"), valueOrErrorMessage(getString(ap, p), "Can't get pool B asset id"), valueOrErrorMessage(getInteger(ap, m), "Can't get pool A asset balance"), valueOrErrorMessage(getInteger(ap, n), "Can't get pool B asset balance"), valueOrErrorMessage(getString(ap, q), "Can't get share asset id"))
152152
153153
154154 func aq (ap) = {
155155 let ar = {
156156 let as = invoke(ap, "getPoolConfigWrapperREADONLY", nil, nil)
157157 if ($isInstanceOf(as, "List[Any]"))
158158 then as
159159 else throw(($getType(as) + " couldn't be cast to List[Any]"))
160160 }
161161 if ((ar == ar))
162162 then {
163163 let at = valueOrErrorMessage({
164164 let as = ar[4]
165165 if ($isInstanceOf(as, "String"))
166166 then as
167167 else unit
168168 }, "Can't get pool A asset id")
169169 let au = valueOrErrorMessage({
170170 let as = ar[5]
171171 if ($isInstanceOf(as, "String"))
172172 then as
173173 else unit
174174 }, "Can't get pool B asset id")
175175 let av = valueOrErrorMessage({
176176 let as = ar[3]
177177 if ($isInstanceOf(as, "String"))
178178 then as
179179 else unit
180180 }, "Can't get pool LP asset id")
181181 let aw = {
182182 let as = invoke(ap, "getAccBalanceWrapperREADONLY", [at], nil)
183183 if ($isInstanceOf(as, "Int"))
184184 then as
185185 else throw(($getType(as) + " couldn't be cast to Int"))
186186 }
187187 if ((aw == aw))
188188 then {
189189 let ax = {
190190 let as = invoke(ap, "getAccBalanceWrapperREADONLY", [au], nil)
191191 if ($isInstanceOf(as, "Int"))
192192 then as
193193 else throw(($getType(as) + " couldn't be cast to Int"))
194194 }
195195 if ((ax == ax))
196196 then $Tuple5(at, au, aw, ax, av)
197197 else throw("Strict value is not equal to itself.")
198198 }
199199 else throw("Strict value is not equal to itself.")
200200 }
201201 else throw("Strict value is not equal to itself.")
202202 }
203203
204204
205205 func ay (ap,az) = if ((az == a))
206206 then ao(ap)
207207 else if ((az == b))
208208 then aq(ap)
209209 else throw("Wrong pool type")
210210
211211
212212 func aA (ap,az,av) = if ((az == a))
213213 then valueOrErrorMessage(getInteger(ap, r), "Can't get share asset supply")
214214 else if ((az == b))
215215 then valueOrErrorMessage(assetInfo(fromBase58String(av)), "Wrong ShareId").quantity
216216 else throw("Wrong pool type")
217217
218218
219219 func aB (aC) = valueOrElse(getInteger(this, (aC + z)), 0)
220220
221221
222222 func aD (aC) = valueOrElse(getInteger(this, (aC + A)), 0)
223223
224224
225225 func aE (aF) = (valueOrElse(getInteger(this, (aF + x)), 0) + 1)
226226
227227
228228 func aG (aC,aH) = if ((aH == d))
229229 then getIntegerValue(this, (aC + G))
230230 else if ((aH == c))
231231 then getIntegerValue(this, (aC + F))
232232 else if ((aH == g))
233233 then getIntegerValue(this, (aC + E))
234234 else if ((aH == h))
235235 then getIntegerValue(this, (aC + D))
236236 else if ((aH == i))
237237 then 0
238238 else throw("Wrong fee type")
239239
240240
241241 func aI () = Address(fromBase58String(valueOrErrorMessage(getString(this, R), "Can't get swopfi farming addr")))
242242
243243
244244 func aJ (ap) = {
245245 let aK = Address(fromBase58String(valueOrErrorMessage(getString(ap, "%s__factoryContract"), "Can't get WX factory contract addr")))
246246 let aL = split(valueOrErrorMessage(getString(aK, "%s__factoryConfig"), "Can't get WX factory cfg"), "__")
247247 Address(fromBase58String(aL[1]))
248248 }
249249
250250
251251 func aM (ak) = {
252252 let al = ak
253253 if ($isInstanceOf(al, "ByteVector"))
254254 then {
255255 let am = al
256256 toBase58String(am)
257257 }
258258 else if ($isInstanceOf(al, "Unit"))
259259 then {
260260 let an = al
261261 "WAVES"
262262 }
263263 else throw("Match error")
264264 }
265265
266266
267267 func aN (ak) = if ((ak == "WAVES"))
268268 then unit
269269 else fromBase58String(ak)
270270
271271
272272 func aO (ak) = if ((ak == "WAVES"))
273273 then 8
274274 else {
275275 let al = assetInfo(fromBase58String(ak))
276276 if ($isInstanceOf(al, "Asset"))
277277 then {
278278 let aP = al
279279 aP.decimals
280280 }
281281 else throw("Can't find asset")
282282 }
283283
284284
285285 func aQ (ak) = pow(10, 0, aO(ak), 0, 0, DOWN)
286286
287287
288288 func aR (aS) = {
289289 func aT (aU,ak) = {
290290 let aV = ( let as = invoke(Z, "getTWAP60", [ak, false], nil)
291291 if ($isInstanceOf(as, "(Int, Int)"))
292292 then as
293293 else throw(($getType(as) + " couldn't be cast to (Int, Int)")))._2
294294 (aU :+ aV)
295295 }
296296
297297 let aW = aS
298298 let aX = size(aW)
299299 let aY = nil
300300 func aZ (ba,bb) = if ((bb >= aX))
301301 then ba
302302 else aT(ba, aW[bb])
303303
304304 func bc (ba,bb) = if ((bb >= aX))
305305 then ba
306306 else throw("List size exceeds 50")
307307
308308 bc(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aY, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50)
309309 }
310310
311311
312312 func bd (av) = {
313313 let aC = valueOrErrorMessage(getString(this, (av + M)), "Can't find pool addr by share id")
314314 let ap = Address(fromBase58String(aC))
315315 let be = valueOrErrorMessage(getString(this, (L + aC)), "Pool is not inited")
316316 let bf = ay(ap, be)
317317 let at = bf._1
318318 let au = bf._2
319319 let bg = bf._3
320320 let bh = bf._4
321321 let bi = ( let as = invoke(Z, "getTWAP60", [at, false], nil)
322322 if ($isInstanceOf(as, "(Int, Int)"))
323323 then as
324324 else throw(($getType(as) + " couldn't be cast to (Int, Int)")))._2
325325 let bj = ( let as = invoke(Z, "getTWAP60", [au, false], nil)
326326 if ($isInstanceOf(as, "(Int, Int)"))
327327 then as
328328 else throw(($getType(as) + " couldn't be cast to (Int, Int)")))._2
329329 let bk = aA(ap, be, av)
330330 let bl = pow(10, 0, aO(at), 0, 0, DOWN)
331331 let bm = pow(10, 0, aO(au), 0, 0, DOWN)
332332 let bn = pow(10, 0, aO(av), 0, 0, DOWN)
333333 let bo = (fraction(bg, bi, bl) + fraction(bh, bj, bm))
334334 fraction(bo, bn, bk)
335335 }
336336
337337
338338 func bp (bq) = {
339339 func aT (aU,av) = (aU :+ bd(av))
340340
341341 let aW = bq
342342 let aX = size(aW)
343343 let aY = nil
344344 func aZ (ba,bb) = if ((bb >= aX))
345345 then ba
346346 else aT(ba, aW[bb])
347347
348348 func bc (ba,bb) = if ((bb >= aX))
349349 then ba
350350 else throw("List size exceeds 20")
351351
352352 bc(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aY, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
353353 }
354354
355355
356356 func br (at,au,av) = {
357357 let bs = aR([at, au])
358358 let bt = bd(av)
359359 let bu = [toString(bs[0]), toString(bs[1]), toString(bt)]
360360 [StringEntry(O, makeString(bu, ","))]
361361 }
362362
363363
364364 func bv (be,ap,bw,at,bx,au,aw,ax) = {
365365 let by = if ((be == a))
366366 then $Tuple2(nil, nil)
367367 else $Tuple2(split({
368368 let as = invoke(ap, "evaluatePutByAmountAssetREADONLY", [bw], nil)
369369 if ($isInstanceOf(as, "String"))
370370 then as
371371 else throw(($getType(as) + " couldn't be cast to String"))
372372 }, "__"), split({
373373 let as = invoke(ap, "evaluatePutByPriceAssetREADONLY", [bx], nil)
374374 if ($isInstanceOf(as, "String"))
375375 then as
376376 else throw(($getType(as) + " couldn't be cast to String"))
377377 }, "__"))
378378 if ((by == by))
379379 then {
380380 let bz = by._2
381381 let bA = by._1
382382 let bB = if ((be == a))
383383 then $Tuple2(fraction(j, bw, aw), fraction(j, bx, ax))
384384 else $Tuple2(parseIntValue(bA[1]), parseIntValue(bz[1]))
385385 let bC = bB._1
386386 let bD = bB._2
387387 let bE = if ((bD > bC))
388388 then {
389389 let bF = if ((be == a))
390390 then fraction(ax, bC, j, CEILING)
391391 else parseIntValue(bA[8])
392392 $Tuple5(bw, bF, (bx - bF), au, bD)
393393 }
394394 else {
395395 let bF = if ((be == a))
396396 then fraction(aw, bD, j, CEILING)
397397 else parseIntValue(bz[7])
398398 $Tuple5(bF, bx, (bw - bF), at, bC)
399399 }
400400 let bG = bE._1
401401 let bH = bE._2
402402 let bI = bE._3
403403 let bJ = bE._4
404404 let bK = bE._5
405405 $Tuple5(bG, bH, bI, bJ, bK)
406406 }
407407 else throw("Strict value is not equal to itself.")
408408 }
409409
410410
411411 func bL (ap,be,bw,at,bx,au) = {
412412 let bM = [AttachedPayment(aN(at), bw), AttachedPayment(aN(au), bx)]
413413 if ((be == a))
414414 then invoke(ap, "callFunction", ["replenishWithTwoTokens", ["false", "0"]], bM)
415415 else invoke(ap, "put", [1000000, false], bM)
416416 }
417417
418418
419419 func bN (ap,be,bF,bO) = {
420420 let bM = [AttachedPayment(aN(bO), bF)]
421421 if ((be == a))
422422 then invoke(ap, "callFunction", ["replenishWithOneToken", ["0", "false", "0"]], bM)
423423 else invoke(ap, "putOneTkn", [0, false], bM)
424424 }
425425
426426
427427 func bP (aC,be,av,bQ) = {
428428 let bM = [AttachedPayment(fromBase58String(av), bQ)]
429429 if ((be == a))
430430 then invoke(aI(), "lockShareTokens", [aC, 0], bM)
431431 else invoke(aJ(addressFromStringValue(aC)), "stake", nil, bM)
432432 }
433433
434434
435435 func bR (aC,be,av,bQ) = {
436436 let bS = if ((be == a))
437437 then $Tuple3(aI(), "withdrawShareTokens", [aC, bQ])
438438 else if ((be == b))
439439 then $Tuple3(aJ(Address(fromBase58String(aC))), "unstake", [av, bQ])
440440 else throw("Wrong pool type")
441441 let bT = bS._1
442442 let bU = bS._2
443443 let bV = bS._3
444444 let bW = invoke(bT, bU, bV, nil)
445445 if ((bW == bW))
446446 then bQ
447447 else throw("Strict value is not equal to itself.")
448448 }
449449
450450
451451 func bX (aC,bY,bZ,aw,ax,ca,cb) = {
452452 let ap = Address(fromBase58String(aC))
453453 let cc = 1000000
454454 let cd = getIntegerValue(ap, s)
455455 let ce = fraction(ca, cc, (cc - cd))
456456 let cf = if ((cb == bY))
457457 then {
458458 let cg = fraction(aw, ce, (ax - ce))
459459 $Tuple2(cg, bZ)
460460 }
461461 else {
462462 let cg = fraction(ax, ce, (aw - ce))
463463 $Tuple2(cg, bY)
464464 }
465465 let cg = cf._1
466466 let ch = cf._2
467467 $Tuple2(ch, cg)
468468 }
469469
470470
471471 func ci (aC,bY,bZ,aw,ax,ca,cb) = {
472472 let cj = getIntegerValue(aa, "%s__protocolFee")
473473 let ck = getIntegerValue(aa, "%s__poolFee")
474474 let cl = toBigInt(100000000)
475475 let cm = if ((cb == bY))
476476 then {
477477 let cg = fraction(aw, ca, (ax - ca))
478478 $Tuple2(cg, bZ)
479479 }
480480 else {
481481 let cg = fraction(ax, ca, (aw - ca))
482482 $Tuple2(cg, bY)
483483 }
484484 let cg = cm._1
485485 let ch = cm._2
486486 let cn = toInt(fraction(toBigInt(cg), cl, (cl - toBigInt((cj + ck)))))
487487 $Tuple2(ch, cn)
488488 }
489489
490490
491491 func co (az,aC,bY,bZ,aw,ax,ca,cb) = if ((az == a))
492492 then {
493493 let cp = bX(aC, bY, bZ, aw, ax, ca, cb)
494494 let ch = cp._1
495495 let cg = cp._2
496496 invoke(addressFromStringValue(aC), "callFunction", ["exchange", ["1"]], [AttachedPayment(aN(ch), cg)])
497497 }
498498 else {
499499 let cq = ci(aC, bY, bZ, aw, ax, ca, cb)
500500 let ch = cq._1
501501 let cg = cq._2
502502 invoke(aa, "swap", [1, cb, toString(this)], [AttachedPayment(aN(ch), cg)])
503503 }
504504
505505
506506 func cr (be,aC,bw,at,bx,au,aw,ax) = {
507507 let ap = addressFromStringValue(aC)
508508 if ((be == a))
509509 then {
510510 let bW = {
511511 let as = invoke(ap, "callFunction", ["calcLPReplenishDiffPropREADONLY", [toString(bw), toString(bx), "0"]], nil)
512512 if ($isInstanceOf(as, "List[Any]"))
513513 then as
514514 else throw(($getType(as) + " couldn't be cast to List[Any]"))
515515 }
516516 if ((bW == bW))
517517 then $Tuple2({
518518 let as = bW[0]
519519 if ($isInstanceOf(as, "Int"))
520520 then as
521521 else throw(($getType(as) + " couldn't be cast to Int"))
522522 }, {
523523 let as = bW[1]
524524 if ($isInstanceOf(as, "Int"))
525525 then as
526526 else throw(($getType(as) + " couldn't be cast to Int"))
527527 })
528528 else throw("Strict value is not equal to itself.")
529529 }
530530 else if ((be == b))
531531 then {
532532 let cs = if (if ((bw > 0))
533533 then (bx > 0)
534534 else false)
535535 then {
536536 let ct = bv(be, ap, bw, at, bx, au, aw, ax)
537537 let bG = ct._1
538538 let bH = ct._2
539539 let bI = ct._3
540540 let cu = ct._4
541541 let cv = ct._5
542542 $Tuple3(bI, cu, cv)
543543 }
544544 else if ((bw > 0))
545545 then $Tuple3(bw, at, 0)
546546 else $Tuple3(bx, au, 0)
547547 let bI = cs._1
548548 let cu = cs._2
549549 let cw = cs._3
550550 let cx = if ((bI > 0))
551551 then {
552552 let bW = {
553553 let as = invoke(ap, "putOneTknREADONLY", [cu, bI], nil)
554554 if ($isInstanceOf(as, "(Int, Int, Int)"))
555555 then as
556556 else throw(($getType(as) + " couldn't be cast to (Int, Int, Int)"))
557557 }
558558 if ((bW == bW))
559559 then $Tuple2(bW._1, bW._3)
560560 else throw("Strict value is not equal to itself.")
561561 }
562562 else $Tuple2(0, 0)
563563 let cy = cx._1
564564 let cz = cx._2
565565 $Tuple2((cw + cy), cz)
566566 }
567567 else throw("Wrong pool type")
568568 }
569569
570570
571571 func cA (be,aC,cv,av,at,au,aw,ax,cB,cC) = {
572572 let ap = addressFromStringValue(aC)
573573 let cD = if ((be == a))
574574 then {
575575 let bW = {
576576 let as = invoke(ap, "callFunction", ["withdrawREADONLY", [toString(cv), toString(aw), toString(ax)]], nil)
577577 if ($isInstanceOf(as, "List[Any]"))
578578 then as
579579 else throw(($getType(as) + " couldn't be cast to List[Any]"))
580580 }
581581 if ((bW == bW))
582582 then $Tuple2({
583583 let as = bW[0]
584584 if ($isInstanceOf(as, "Int"))
585585 then as
586586 else throw(($getType(as) + " couldn't be cast to Int"))
587587 }, {
588588 let as = bW[1]
589589 if ($isInstanceOf(as, "Int"))
590590 then as
591591 else throw(($getType(as) + " couldn't be cast to Int"))
592592 })
593593 else throw("Strict value is not equal to itself.")
594594 }
595595 else if ((be == b))
596596 then {
597597 let cE = split({
598598 let as = invoke(ap, "evaluateGetREADONLY", [av, cv], nil)
599599 if ($isInstanceOf(as, "String"))
600600 then as
601601 else throw(($getType(as) + " couldn't be cast to String"))
602602 }, "__")
603603 if ((cE == cE))
604604 then $Tuple2(parseIntValue(cE[1]), parseIntValue(cE[2]))
605605 else throw("Strict value is not equal to itself.")
606606 }
607607 else throw("Wrong pool type")
608608 let cF = cD._1
609609 let cG = cD._2
610610 if ((cB > 0))
611611 then {
612612 let cH = if (if ((cC == at))
613613 then (cB > cF)
614614 else false)
615615 then (cB - cF)
616616 else if (if ((cC == au))
617617 then (cB > cG)
618618 else false)
619619 then (cB - cG)
620620 else 0
621621 let cI = if ((cH > 0))
622622 then if ((be == a))
623623 then bX(aC, at, au, aw, ax, cH, cC)
624624 else ci(aC, at, au, aw, ax, cH, cC)
625625 else $Tuple2("", 0)
626626 let ch = cI._1
627627 let cg = cI._2
628628 if ((cC == at))
629629 then $Tuple2(((cF + cH) - cB), (cG - cg))
630630 else $Tuple2((cF - cg), ((cG + cH) - cB))
631631 }
632632 else $Tuple2(cF, cG)
633633 }
634634
635635
636636 func cJ (az,aC) = if ((az == a))
637637 then {
638638 let cK = aj(ab)
639639 if ((cK == cK))
640640 then {
641641 let bW = invoke(aI(), "claim", [aC], nil)
642642 if ((bW == bW))
643643 then {
644644 let cL = aj(ab)
645645 $Tuple2((cL - cK), ab)
646646 }
647647 else throw("Strict value is not equal to itself.")
648648 }
649649 else throw("Strict value is not equal to itself.")
650650 }
651651 else if ((az == b))
652652 then {
653653 let cK = aj(ac)
654654 if ((cK == cK))
655655 then {
656656 let bW = invoke(aJ(Address(fromBase58String(aC))), "claimWX", [aC], nil)
657657 if ((bW == bW))
658658 then {
659659 let cL = aj(ac)
660660 $Tuple2((cL - cK), ac)
661661 }
662662 else throw("Strict value is not equal to itself.")
663663 }
664664 else throw("Strict value is not equal to itself.")
665665 }
666666 else throw("Wrong pool type")
667667
668668
669669 func cM (be,aC,aH,bw,at,bx,au,aw,ax,cN) = {
670670 let cO = aj(fromBase58String(cN))
671671 if ((cO == cO))
672672 then {
673673 let ap = addressFromStringValue(aC)
674674 let cP = if (if ((bw > 0))
675675 then (bx > 0)
676676 else false)
677677 then {
678678 let cQ = bv(be, ap, bw, at, bx, au, aw, ax)
679679 let bG = cQ._1
680680 let bH = cQ._2
681681 let bI = cQ._3
682682 let cu = cQ._4
683683 let bW = bL(ap, be, bG, at, bH, au)
684684 if ((bW == bW))
685685 then $Tuple2(bI, cu)
686686 else throw("Strict value is not equal to itself.")
687687 }
688688 else if ((bw > 0))
689689 then $Tuple2(bw, at)
690690 else if ((bx > 0))
691691 then $Tuple2(bx, au)
692692 else throw("pmts must be > 0")
693693 let bI = cP._1
694694 let cu = cP._2
695695 let bW = if ((bI > 0))
696696 then bN(ap, be, bI, cu)
697697 else nil
698698 if ((bW == bW))
699699 then {
700700 let cR = aj(fromBase58String(cN))
701701 let cS = (cR - cO)
702702 let cT = fraction(cS, aG(aC, aH), l)
703703 let cU = (cS - cT)
704704 if ((0 >= cU))
705705 then throw("amount of staked sharetokens must be > 0")
706706 else {
707707 let cV = bP(aC, be, cN, cU)
708708 if ((cV == cV))
709709 then $Tuple2(cU, cT)
710710 else throw("Strict value is not equal to itself.")
711711 }
712712 }
713713 else throw("Strict value is not equal to itself.")
714714 }
715715 else throw("Strict value is not equal to itself.")
716716 }
717717
718718
719719 func cW (aC,aF,cX,cT,cY,av,az,cZ) = {
720720 let da = aB(aC)
721721 let db = aD(aC)
722722 let dc = if (cZ)
723723 then $Tuple2(getIntegerValue(this, (aC + B)), (db + cX))
724724 else $Tuple2(getIntegerValue(this, (aC + C)), db)
725725 let dd = dc._1
726726 let de = dc._2
727727 [IntegerEntry((aC + z), (da + cX)), IntegerEntry((aC + A), de), IntegerEntry((((((aC + "_") + aF) + "_") + toString(cY)) + t), cX), IntegerEntry((((((aC + "_") + aF) + "_") + toString(cY)) + y), dd), StringEntry((((aF + "_") + toString(cY)) + u), aC), IntegerEntry((aF + x), cY), ScriptTransfer(X, cT, fromBase58String(av))]
728728 }
729729
730730
731731 func df (dg,dh,di,dj,dk,dl,dm,dn,do,dp) = {
732732 let dq = aj(aN(dg))
733733 if ((dq == dq))
734734 then {
735735 let bW = invoke(Y, "swap", [dj, dk, dl, dm, dn, do, dp], [AttachedPayment(di, dh)])
736736 if ((bW == bW))
737737 then (aj(aN(dg)) - dq)
738738 else throw("Strict value is not equal to itself.")
739739 }
740740 else throw("Strict value is not equal to itself.")
741741 }
742742
743743
744744 func dr (dg,dh,di,ds,dt,dp) = {
745745 let dq = aj(aN(dg))
746746 if ((dq == dq))
747747 then {
748748 let bW = invoke(Y, "puzzleSwap", [ds, dt, dp], [AttachedPayment(di, dh)])
749749 if ((bW == bW))
750750 then (aj(aN(dg)) - dq)
751751 else throw("Strict value is not equal to itself.")
752752 }
753753 else throw("Strict value is not equal to itself.")
754754 }
755755
756756
757757 func du (dg,dh,di,dv,dw,dx,dy,dz,dA,dp) = {
758758 let dq = aj(aN(dg))
759759 if ((dq == dq))
760760 then {
761761 let bW = invoke(Y, "swopfiSwap", [dv, dw, dx, dy, dz, dA, dp], [AttachedPayment(di, dh)])
762762 if ((bW == bW))
763763 then (aj(aN(dg)) - dq)
764764 else throw("Strict value is not equal to itself.")
765765 }
766766 else throw("Strict value is not equal to itself.")
767767 }
768768
769769
770770 func dB (aC,be,dC,dD) = {
771771 let ap = Address(fromBase58String(aC))
772772 let dE = ay(ap, be)
773773 let dF = dE._1
774774 let dG = dE._2
775775 let aw = dE._3
776776 let ax = dE._4
777777 let av = dE._5
778778 if (if ((dC != dF))
779779 then (dC != dG)
780780 else false)
781781 then throw("Wrong asset")
782782 else {
783783 let dH = if ((dC == dF))
784784 then $Tuple2(dD, 0)
785785 else $Tuple2(0, dD)
786786 let bw = dH._1
787787 let bx = dH._2
788788 let dI = cM(be, aC, i, bw, dF, bx, dG, aw, ax, av)
789789 let cX = dI._1
790790 let dJ = dI._2
791791 let dK = valueOrElse(getInteger(this, (aC + B)), 0)
792792 let dL = valueOrElse(getInteger(this, (aC + C)), 0)
793793 let dM = aB(aC)
794794 let dN = aD(aC)
795795 let dO = fraction(dN, j, dM)
796796 let dP = fraction(cX, dO, j)
797797 let dQ = (cX - dP)
798798 let dR = if ((dN > 0))
799799 then (dK + fraction(dP, k, dN))
800800 else 0
801801 let dS = if (((dM - dN) > 0))
802802 then (dL + fraction(dQ, k, (dM - dN)))
803803 else 0
804804 let dT = fraction(dP, aG(aC, d), l)
805805 let dU = fraction(dQ, aG(aC, c), l)
806806 let dV = bR(aC, be, av, (dT + dU))
807807 if ((dV == dV))
808808 then ([IntegerEntry((aC + B), dR), IntegerEntry((aC + C), dS), IntegerEntry((aC + z), ((dM + cX) - dV)), IntegerEntry((aC + A), ((dN + dP) - dT)), ScriptTransfer(X, (dT + dU), fromBase58String(av))] ++ br(dF, dG, av))
809809 else throw("Strict value is not equal to itself.")
810810 }
811811 }
812812
813813
814814 func dW (aC,dX,dY,dZ) = {
815815 let ap = Address(fromBase58String(aC))
816816 let be = valueOrErrorMessage(getString(this, (L + aC)), "Unknown pool")
817817 let ea = ay(ap, be)
818818 let bY = ea._1
819819 let bZ = ea._2
820820 let aw = ea._3
821821 let ax = ea._4
822822 let av = ea._5
823823 let eb = aj(aN(bY))
824824 if ((eb == eb))
825825 then {
826826 let ec = aj(aN(bZ))
827827 if ((ec == ec))
828828 then {
829829 let bW = if ((be == a))
830830 then invoke(ap, "callFunction", ["withdraw", [toString(dX)]], nil)
831831 else {
832832 let bW = bR(aC, be, av, dX)
833833 if ((bW == bW))
834834 then invoke(ap, "get", nil, [AttachedPayment(aN(av), dX)])
835835 else throw("Strict value is not equal to itself.")
836836 }
837837 if ((bW == bW))
838838 then {
839839 let ed = aj(aN(bY))
840840 let ee = aj(aN(bZ))
841841 let ef = $Tuple2((ed - eb), (ee - ec))
842842 let eg = ef._1
843843 let eh = ef._2
844844 let ei = if ((dY > 0))
845845 then {
846846 let cH = if (if ((dZ == bY))
847847 then (dY > eg)
848848 else false)
849849 then (dY - eg)
850850 else if (if ((dZ == bZ))
851851 then (dY > eh)
852852 else false)
853853 then (dY - eh)
854854 else 0
855855 let ej = if ((cH > 0))
856856 then co(be, aC, bY, bZ, aw, ax, cH, dZ)
857857 else 0
858858 if ((ej == ej))
859859 then {
860860 let ek = aj(aN(bY))
861861 let el = aj(aN(bZ))
862862 $Tuple2((ek - eb), (el - ec))
863863 }
864864 else throw("Strict value is not equal to itself.")
865865 }
866866 else $Tuple2(eg, eh)
867867 let em = ei._1
868868 let en = ei._2
869869 $Tuple7(em, bY, en, bZ, ed, ee, av)
870870 }
871871 else throw("Strict value is not equal to itself.")
872872 }
873873 else throw("Strict value is not equal to itself.")
874874 }
875875 else throw("Strict value is not equal to itself.")
876876 }
877877
878878
879879 func eo (aF,aC,ep,eq) = {
880880 let er = valueOrErrorMessage(getInteger(this, (((((aC + "_") + aF) + "_") + ep) + t)), "Unknown position")
881881 let es = getIntegerValue(this, (((((aC + "_") + aF) + "_") + ep) + y))
882882 let et = if (eq)
883883 then getIntegerValue(this, (aC + B))
884884 else getIntegerValue(this, (aC + C))
885885 (er + fraction(er, (et - es), k))
886886 }
887887
888888
889889 func eu (aF,aC,ep,ev) = {
890890 let er = valueOrErrorMessage(getInteger(this, (((((aC + "_") + aF) + "_") + ep) + t)), "Unknown position")
891891 let es = getIntegerValue(this, (((((aC + "_") + aF) + "_") + ep) + y))
892892 let cB = valueOrElse(getInteger(this, (((((aC + "_") + aF) + "_") + ep) + v)), 0)
893893 let dX = eo(aF, aC, ep, (cB > 0))
894894 let ew = aB(aC)
895895 let ex = Address(fromBase58String(aF))
896896 let dZ = valueOrElse(getString(this, (((((aC + "_") + aF) + "_") + ep) + w)), "")
897897 let dY = if ((cB > 0))
898898 then {
899899 let as = invoke(ad(), "getAssetDebt", [false, ((aF + "_") + ep), dZ], nil)
900900 if ($isInstanceOf(as, "Int"))
901901 then as
902902 else throw(($getType(as) + " couldn't be cast to Int"))
903903 }
904904 else 0
905905 let ey = dW(aC, dX, dY, dZ)
906906 if ((ey == ey))
907907 then {
908908 let av = ey._7
909909 let ee = ey._6
910910 let ed = ey._5
911911 let bZ = ey._4
912912 let en = ey._3
913913 let bY = ey._2
914914 let em = ey._1
915915 let ez = if ((dY > 0))
916916 then invoke(ad(), "repayFor", [((aF + "_") + ep)], [AttachedPayment(aN(dZ), dY)])
917917 else 0
918918 if ((ez == ez))
919919 then ([DeleteEntry((((((aC + "_") + aF) + "_") + ep) + t)), DeleteEntry((((((aC + "_") + aF) + "_") + ep) + y)), IntegerEntry((aC + z), (ew - dX)), ScriptTransfer(ex, em, aN(bY)), ScriptTransfer(ex, en, aN(bZ))] ++ br(bY, bZ, av))
920920 else throw("Strict value is not equal to itself.")
921921 }
922922 else throw("Strict value is not equal to itself.")
923923 }
924924
925925
926926 func eA (eB) = {
927927 let eC = split(valueOrErrorMessage(getString(this, (eB + J)), ("No request with id " + eB)), ",")
928928 let aF = eC[0]
929929 let aC = eC[1]
930930 let bw = parseIntValue(eC[2])
931931 let dF = eC[3]
932932 let bx = parseIntValue(eC[4])
933933 let dG = eC[5]
934934 let aw = parseIntValue(eC[6])
935935 let ax = parseIntValue(eC[7])
936936 let av = eC[8]
937937 let eD = eC[9]
938938 let eE = parseIntValue(eC[10])
939939 $Tuple11(aF, aC, bw, dF, bx, dG, aw, ax, av, eD, eE)
940940 }
941941
942942
943943 func eF (bw,bx,at,au,eG,eH) = {
944944 let bi = ( let as = invoke(Z, "getTWAP60", [at, false], nil)
945945 if ($isInstanceOf(as, "(Int, Int)"))
946946 then as
947947 else throw(($getType(as) + " couldn't be cast to (Int, Int)")))._2
948948 let bj = ( let as = invoke(Z, "getTWAP60", [au, false], nil)
949949 if ($isInstanceOf(as, "(Int, Int)"))
950950 then as
951951 else throw(($getType(as) + " couldn't be cast to (Int, Int)")))._2
952952 let eI = pow(10, 0, aO(at), 0, 0, DOWN)
953953 let eJ = pow(10, 0, aO(au), 0, 0, DOWN)
954954 let eK = (fraction(bi, bw, eI) + fraction(bj, bx, eJ))
955955 let eL = if ((eH == at))
956956 then $Tuple2(bi, eI)
957957 else $Tuple2(bj, eJ)
958958 let eM = eL._1
959959 let eN = eL._2
960960 fraction(fraction(eK, (eG - 100), 100), eN, eM)
961961 }
962962
963963
964964 @Callable(ag)
965965 func calcPriceImpactEVALONLY (aC,eG,eH,bw,bx) = if (if ((100 > eG))
966966 then true
967967 else (eG > 300))
968968 then throw("Leverage can't be <100 and >300")
969969 else {
970970 let be = valueOrErrorMessage(getString(this, (L + aC)), "Pool is not inited")
971971 let eO = ay(Address(fromBase58String(aC)), be)
972972 let dF = eO._1
973973 let dG = eO._2
974974 let aw = eO._3
975975 let ax = eO._4
976976 let av = eO._5
977977 let cB = if ((eG > 100))
978978 then eF(bw, bx, dF, dG, eG, eH)
979979 else 0
980980 let eP = if ((eH == dF))
981981 then $Tuple2((bw + cB), bx)
982982 else $Tuple2(bw, (bx + cB))
983983 let eQ = eP._1
984984 let eR = eP._2
985985 let eS = cr(be, aC, eQ, dF, eR, dG, aw, ax)
986986 let cv = eS._1
987987 let cz = eS._2
988988 let eT = if ((0 > cz))
989989 then (cz * -1)
990990 else cz
991991 $Tuple2(nil, [eT])
992992 }
993993
994994
995995
996996 @Callable(ag)
997997 func getShareAssetPriceREADONLY (av) = {
998998 let eU = bd(av)
999999 $Tuple2(nil, eU)
10001000 }
10011001
10021002
10031003
10041004 @Callable(ag)
10051005 func getUserPositionShareAmountREADONLY (aF,cY) = {
10061006 let aC = valueOrErrorMessage(getString(this, (((aF + "_") + cY) + u)), "Unknown position")
10071007 let cB = getIntegerValue(this, (((((aC + "_") + aF) + "_") + cY) + v))
10081008 let dX = eo(aF, aC, cY, (cB > 0))
10091009 $Tuple2(nil, dX)
10101010 }
10111011
10121012
10131013
10141014 @Callable(ag)
10151015 func getUserPositionInDollarsREADONLY (aF,eV,cY) = {
10161016 func eW (aU,aC) = {
10171017 let eX = aU
10181018 let eY = eX._1
10191019 let eZ = eX._2
10201020 let fa = eX._3
10211021 let be = valueOrErrorMessage(getString(this, (L + aC)), "Pool is not inited")
10221022 let fb = ay(Address(fromBase58String(aC)), be)
10231023 let dF = fb._1
10241024 let dG = fb._2
10251025 let aw = fb._3
10261026 let ax = fb._4
10271027 let av = fb._5
10281028 let cB = valueOrElse(getInteger(this, (((((aC + "_") + aF) + "_") + cY[fa]) + v)), 0)
10291029 let dX = eo(aF, aC, cY[fa], (cB > 0))
10301030 let eU = bd(av)
10311031 let fc = pow(10, 0, aO(av), 0, 0, DOWN)
10321032 let fd = fraction(dX, eU, fc)
10331033 if ((cB == 0))
10341034 then $Tuple3((eY :+ fd), (eZ :+ 0), (fa + 1))
10351035 else {
10361036 let dZ = getStringValue(this, (((((aC + "_") + aF) + "_") + cY[fa]) + w))
10371037 let dY = {
10381038 let as = invoke(ad(), "getAssetDebt", [false, ((aF + "_") + cY[fa]), dZ], nil)
10391039 if ($isInstanceOf(as, "Int"))
10401040 then as
10411041 else throw(($getType(as) + " couldn't be cast to Int"))
10421042 }
10431043 let fe = ( let as = invoke(Z, "getTWAP60", [dZ, false], nil)
10441044 if ($isInstanceOf(as, "(Int, Int)"))
10451045 then as
10461046 else throw(($getType(as) + " couldn't be cast to (Int, Int)")))._1
10471047 let ff = pow(10, 0, aO(dZ), 0, 0, DOWN)
10481048 let fg = fraction(dY, fe, ff)
10491049 $Tuple3((eY :+ fd), (eZ :+ fg), (fa + 1))
10501050 }
10511051 }
10521052
10531053 let fh = {
10541054 let aW = eV
10551055 let aX = size(aW)
10561056 let aY = $Tuple3(nil, nil, 0)
10571057 func aZ (ba,bb) = if ((bb >= aX))
10581058 then ba
10591059 else eW(ba, aW[bb])
10601060
10611061 func bc (ba,bb) = if ((bb >= aX))
10621062 then ba
10631063 else throw("List size exceeds 20")
10641064
10651065 bc(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aZ(aY, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
10661066 }
10671067 let fi = fh._1
10681068 let dY = fh._2
10691069 $Tuple2(nil, $Tuple2(fi, dY))
10701070 }
10711071
10721072
10731073
10741074 @Callable(ag)
10751075 func replenish (aC,eG,eH) = if (if ((100 > eG))
10761076 then true
10771077 else (eG > 300))
10781078 then throw("Leverage can't be <100 and >300")
10791079 else {
10801080 let be = valueOrErrorMessage(getString(this, (L + aC)), "Pool is not inited")
10811081 let fj = ay(Address(fromBase58String(aC)), be)
10821082 let dF = fj._1
10831083 let dG = fj._2
10841084 let aw = fj._3
10851085 let ax = fj._4
10861086 let av = fj._5
10871087 let fk = if ((size(ag.payments) == 2))
10881088 then if ((aM(ag.payments[0].assetId) != dF))
10891089 then throw("Wrong payment asset A")
10901090 else if ((aM(ag.payments[1].assetId) != dG))
10911091 then throw("Wrong payment asset B")
10921092 else $Tuple4(ag.payments[0].amount, dF, ag.payments[1].amount, dG)
10931093 else if ((size(ag.payments) == 1))
10941094 then if ((aM(ag.payments[0].assetId) == dF))
10951095 then $Tuple4(ag.payments[0].amount, dF, 0, dG)
10961096 else if ((aM(ag.payments[0].assetId) == dG))
10971097 then $Tuple4(0, dF, ag.payments[0].amount, dG)
10981098 else throw("Wrong payment")
10991099 else throw("One or two payments expected")
11001100 let bw = fk._1
11011101 let fl = fk._2
11021102 let bx = fk._3
11031103 let fm = fk._4
11041104 let fn = aE(toString(ag.caller))
11051105 if ((eG > 100))
11061106 then {
11071107 let cB = eF(bw, bx, fl, fm, eG, eH)
11081108 let eC = makeString([toString(ag.caller), aC, toString(bw), fl, toString(bx), fm, toString(aw), toString(ax), av, eH, toString(cB)], ",")
11091109 let fo = {
11101110 let as = invoke(this, "createNewRequest", [eC], nil)
11111111 if ($isInstanceOf(as, "Int"))
11121112 then as
11131113 else throw(($getType(as) + " couldn't be cast to Int"))
11141114 }
11151115 if ((fo == fo))
11161116 then {
11171117 let fp = [((toString(ag.caller) + "_") + toString(fn)), av, eH, cB, toString(this), "replenishFromLand", toString(valueOrErrorMessage(fo, "Can't create new request"))]
11181118 let bW = reentrantInvoke(ad(), "flashPosition", fp, nil)
11191119 if ((bW == bW))
11201120 then nil
11211121 else throw("Strict value is not equal to itself.")
11221122 }
11231123 else throw("Strict value is not equal to itself.")
11241124 }
11251125 else {
11261126 let fq = cM(be, aC, h, bw, dF, bx, dG, aw, ax, av)
11271127 let fr = fq._1
11281128 let dV = fq._2
11291129 (cW(aC, toString(ag.caller), fr, dV, fn, av, be, false) ++ br(dF, dG, av))
11301130 }
11311131 }
11321132
11331133
11341134
11351135 @Callable(ag)
11361136 func withdraw (aC,ep) = eu(toString(ag.caller), aC, toString(ep), false)
11371137
11381138
11391139
11401140 @Callable(ag)
11411141 func createUpdateStopLoss (ep,fs,ak,ft) = {
11421142 let fu = ( let as = invoke(Z, "getTWAP60", [ak, false], nil)
11431143 if ($isInstanceOf(as, "(Int, Int)"))
11441144 then as
11451145 else throw(($getType(as) + " couldn't be cast to (Int, Int)")))._1
11461146 if (!(isDefined(getInteger(this, (((((fs + "_") + toString(ag.caller)) + "_") + toString(ep)) + t)))))
11471147 then throw("There are no user position")
11481148 else if ((0 >= ft))
11491149 then throw("Price must be greater than 0")
11501150 else if ((ft > fu))
11511151 then throw("Price must be less than current token price")
11521152 else [IntegerEntry((((((((toString(ag.caller) + "_") + toString(ep)) + "_") + fs) + "_") + ak) + P), ft)]
11531153 }
11541154
11551155
11561156
11571157 @Callable(ag)
11581158 func deleteStopLoss (ep,fs,ak) = if (!(isDefined(getInteger(this, (((((((toString(ag.caller) + "_") + toString(ep)) + "_") + fs) + "_") + ak) + P)))))
11591159 then throw("No entry")
11601160 else [DeleteEntry((((((((toString(ag.caller) + "_") + toString(ep)) + "_") + fs) + "_") + ak) + P))]
11611161
11621162
11631163
11641164 @Callable(ag)
11651165 func createNewRequest (bV) = valueOrElse(ah(ag), {
11661166 let fo = (valueOrElse(getInteger(this, K), 0) + 1)
11671167 $Tuple2([StringEntry((toString(fo) + J), bV), IntegerEntry(K, fo)], fo)
11681168 })
11691169
11701170
11711171
11721172 @Callable(ag)
11731173 func replenishFromLand (eB) = valueOrElse(ai(ag), {
11741174 let fv = eA(eB)
11751175 let aF = fv._1
11761176 let aC = fv._2
11771177 let bw = fv._3
11781178 let dF = fv._4
11791179 let bx = fv._5
11801180 let dG = fv._6
11811181 let aw = fv._7
11821182 let ax = fv._8
11831183 let av = fv._9
11841184 let eD = fv._10
11851185 let eE = fv._11
11861186 if ((size(ag.payments) != 1))
11871187 then throw("Wrong payment size")
11881188 else if (if ((aM(ag.payments[0].assetId) != eD))
11891189 then true
11901190 else (ag.payments[0].amount != eE))
11911191 then throw("Wrong payment")
11921192 else {
11931193 let fw = if ((dF == eD))
11941194 then $Tuple2((bw + ag.payments[0].amount), bx)
11951195 else $Tuple2(bw, (bx + ag.payments[0].amount))
11961196 let fx = fw._1
11971197 let fy = fw._2
11981198 let be = valueOrErrorMessage(getString(this, (L + aC)), "Unknown pool")
1199- let fz = cM(be, aC, g, bw, dF, bx, dG, aw, ax, av)
1199+ let fz = cM(be, aC, g, fx, dF, fy, dG, aw, ax, av)
12001200 let fr = fz._1
12011201 let dV = fz._2
12021202 let cY = aE(aF)
12031203 let fA = [IntegerEntry((((((aC + "_") + aF) + "_") + toString(cY)) + v), eE), StringEntry((((((aC + "_") + aF) + "_") + toString(cY)) + w), eD)]
12041204 let fB = cW(aC, aF, fr, dV, cY, av, be, true)
12051205 $Tuple2((((fB ++ br(dF, dG, av)) ++ fA) :+ DeleteEntry((eB + J))), fr)
12061206 }
12071207 })
12081208
12091209
12101210
12111211 @Callable(ag)
12121212 func liquidate (aF,ep,fC) = valueOrElse(ai(ag), {
12131213 let aC = valueOrErrorMessage(getString(this, (((aF + "_") + ep) + u)), "no position")
12141214 let be = valueOrErrorMessage(getString(this, (L + aC)), "Pool is not inited")
12151215 let fD = ay(Address(fromBase58String(aC)), be)
12161216 let dF = fD._1
12171217 let dG = fD._2
12181218 let aw = fD._3
12191219 let ax = fD._4
12201220 let av = fD._5
12211221 let bQ = bR(aC, be, av, fC)
12221222 let cB = getIntegerValue(this, (((((aC + "_") + aF) + "_") + ep) + v))
12231223 let dZ = getStringValue(this, (((((aC + "_") + aF) + "_") + ep) + w))
12241224 let dX = eo(aF, aC, ep, (cB > 0))
12251225 if ((cB == 0))
12261226 then throw("You can't liquidate position without borrow")
12271227 else [IntegerEntry((((((aC + "_") + aF) + "_") + ep) + y), getIntegerValue(this, (aC + B))), IntegerEntry((aC + A), (aD(aC) - fC)), IntegerEntry((aC + z), (aB(aC) - fC)), IntegerEntry((((((aC + "_") + aF) + "_") + ep) + t), (dX - fC)), ScriptTransfer(ag.caller, bQ, fromBase58String(av))]
12281228 })
12291229
12301230
12311231
12321232 @Callable(ag)
12331233 func stopLoss (aF,ep,aC,ak) = valueOrElse(af(ag), {
12341234 let fu = ( let as = invoke(Z, "getTWAP60", [ak, false], nil)
12351235 if ($isInstanceOf(as, "(Int, Int)"))
12361236 then as
12371237 else throw(($getType(as) + " couldn't be cast to (Int, Int)")))._1
12381238 if (!(isDefined(getInteger(this, (((((((aF + "_") + toString(ep)) + "_") + aC) + "_") + ak) + P)))))
12391239 then throw("No entry")
12401240 else (eu(toString(ag.caller), aC, toString(ep), true) :+ DeleteEntry((((((((aF + "_") + toString(ep)) + "_") + aC) + "_") + ak) + P)))
12411241 })
12421242
12431243
12441244
12451245 @Callable(ag)
12461246 func capitalizeExKeeper (aC,az,fE,fF,fG,dj,dk,dl,dm,dn,do,dp) = valueOrElse(af(ag), {
12471247 let fH = if (fG)
12481248 then cJ(az, aC)
12491249 else {
12501250 let fI = if ((az == a))
12511251 then ab
12521252 else ac
12531253 $Tuple2(fF, fI)
12541254 }
12551255 let fJ = fH._1
12561256 let fI = fH._2
12571257 let fK = df(fE, fF, fI, dj, dk, dl, dm, dn, do, dp)
12581258 let bI = (fJ - fF)
12591259 let fL = if ((bI > 0))
12601260 then [IntegerEntry((aC + N), (bI + valueOrElse(getInteger(this, (aC + N)), 0)))]
12611261 else nil
12621262 (dB(aC, az, fE, fK) ++ fL)
12631263 })
12641264
12651265
12661266
12671267 @Callable(ag)
12681268 func capitalizeExPuzzle (aC,az,fE,fF,fG,ds,dt,dp) = valueOrElse(af(ag), {
12691269 let fM = if (fG)
12701270 then cJ(az, aC)
12711271 else {
12721272 let fI = if ((az == a))
12731273 then ab
12741274 else ac
12751275 $Tuple2(fF, fI)
12761276 }
12771277 let fJ = fM._1
12781278 let fI = fM._2
12791279 let fK = dr(fE, fF, fI, ds, dt, dp)
12801280 let bI = (fJ - fF)
12811281 let fL = if ((bI > 0))
12821282 then [IntegerEntry((aC + N), (bI + valueOrElse(getInteger(this, (aC + N)), 0)))]
12831283 else nil
12841284 (dB(aC, az, fE, fK) ++ fL)
12851285 })
12861286
12871287
12881288
12891289 @Callable(ag)
12901290 func capitalizeExSwopFi (aC,az,fE,fF,fG,dv,dw,dx,dy,dz,dA,dp) = valueOrElse(af(ag), {
12911291 let fN = if (fG)
12921292 then cJ(az, aC)
12931293 else {
12941294 let fI = if ((az == a))
12951295 then ab
12961296 else ac
12971297 $Tuple2(fF, fI)
12981298 }
12991299 let fJ = fN._1
13001300 let fI = fN._2
13011301 let fK = du(fE, fF, fI, dv, dw, dx, dy, dz, dA, dp)
13021302 let bI = (fJ - fF)
13031303 let fL = if ((bI > 0))
13041304 then [IntegerEntry((aC + N), (bI + valueOrElse(getInteger(this, (aC + N)), 0)))]
13051305 else nil
13061306 (dB(aC, az, fE, fK) ++ fL)
13071307 })
13081308
13091309
13101310
13111311 @Callable(ag)
13121312 func initNewPool (az,ap,fO,fP,fQ,fR,fS,fT) = valueOrElse(af(ag), if (if ((az != a))
13131313 then (az != b)
13141314 else false)
13151315 then throw("Wrong type")
13161316 else {
13171317 let fU = ay(Address(fromBase58String(ap)), az)
13181318 let at = fU._1
13191319 let au = fU._2
13201320 let fV = fU._3
13211321 let fW = fU._4
13221322 let av = fU._5
13231323 [IntegerEntry((ap + D), fO), IntegerEntry((ap + E), fP), IntegerEntry((ap + F), fQ), IntegerEntry((ap + G), fR), IntegerEntry((ap + H), fS), IntegerEntry((ap + I), fT), IntegerEntry((ap + B), 0), IntegerEntry((ap + C), 0), StringEntry((L + ap), az), StringEntry((av + M), ap)]
13241324 })
13251325
13261326
13271327 @Verifier(fX)
13281328 func fY () = sigVerify(fX.bodyBytes, fX.proofs[0], fX.senderPublicKey)
13291329

github/deemru/w8io/026f985 
165.69 ms