tx · B31DZk3ko2YH8wv3zNiqGzLwMABX4ySinT8muNVBTaRX

3MvRWw2FPEimFCTGtK7qY9uAJbM7XJ4ZfJS:  -0.04400000 Waves

2023.05.29 12:16 [2599073] smart account 3MvRWw2FPEimFCTGtK7qY9uAJbM7XJ4ZfJS > SELF 0.00000000 Waves

{ "type": 13, "id": "B31DZk3ko2YH8wv3zNiqGzLwMABX4ySinT8muNVBTaRX", "fee": 4400000, "feeAssetId": null, "timestamp": 1685351856136, "version": 2, "chainId": 84, "sender": "3MvRWw2FPEimFCTGtK7qY9uAJbM7XJ4ZfJS", "senderPublicKey": "HP8sssVq1866F7CaPQJwgFrt6fsqhQjKwM84cL1wjD2a", "proofs": [ "XGnnPrgnLwpPw4J7n7gUC2DSMb4CtbxToVKyArqwWFFnq8xaJBFyR9aSeDfH3gnHApFQReEP8jpAEoYU87cHmmv" ], "script": "base64:BgKUAQgCEgUKAwgBCBIDCgEIEgMKAQgSBAoCCAgSBQoDCAEIEgMKAQgSBAoCCAESBgoEAQgIARIFCgMBCAgSAwoBCBIGCgQIAQgIEgUKAwgIARIOCgwICAgBBBEYGBEBARgSCgoICAgIAQQIARgSDgoMCAgIAQQYGBgYGAEYEgoKCAgIAQEBAQEBEgYKBAgICAESBAoCCAhbAAdTRl9QT09MAgJTRgAHV1hfUE9PTAICV1gAD0NBUF9GRUVfTk9fTE9BTgIJY2FwTm9Mb2FuAAxDQVBfRkVFX0xPQU4CB2NhcExvYW4AFFNUT1BMT1NTX0ZFRV9OT19MT0FOAgljYXBOb0xvYW4ADVNUT1BMT1NTX0xPQU4CB2NhcExvYW4ACExPQU5fRkVFAgRsb2FuAAtOT19MT0FOX0ZFRQIGbm9Mb2FuAAZOT19GRUUCBW5vRmVlAAZTQ0FMRTgAgMLXLwAHU0NBTEUxMACAyK+gJQAKRkVFX1NDQUxFNgDAhD0AFGtTRlBvb2xBQXNzZXRCYWxhbmNlAg9BX2Fzc2V0X2JhbGFuY2UAFGtTRlBvb2xCQXNzZXRCYWxhbmNlAg9CX2Fzc2V0X2JhbGFuY2UAD2tTRlBvb2xBQXNzZXRJZAIKQV9hc3NldF9pZAAPa1NGUG9vbEJBc3NldElkAgpCX2Fzc2V0X2lkAA5rU0ZQb29sU2hhcmVJZAIOc2hhcmVfYXNzZXRfaWQAEmtTRlBvb2xTaGFyZVN1cHBseQISc2hhcmVfYXNzZXRfc3VwcGx5AAprU0ZQb29sRmVlAgpjb21taXNzaW9uAA1rVXNlclBvc2l0aW9uAg5fdXNlcl9wb3NpdGlvbgARa1VzZXJQb3NpdGlvblBvb2wCE191c2VyX3Bvc2l0aW9uX3Bvb2wAEWtVc2VyQm9ycm93QW1vdW50AhxfdXNlcl9wb3NpdGlvbl9ib3Jyb3dfYW1vdW50ABJrVXNlckJvcnJvd0Fzc2V0SWQCHl91c2VyX3Bvc2l0aW9uX2JvcnJvd19hc3NldF9pZAAQa1VzZXJQb3NpdGlvbk51bQIVX3VzZXJfcG9zaXRpb25fbnVtYmVyABVrVXNlclBvc2l0aW9uSW50ZXJlc3QCF191c2VyX3Bvc2l0aW9uX2ludGVyZXN0AAprUG9vbFRvdGFsAgtfcG9vbF90b3RhbAAOa1Bvb2xUb3RhbExvYW4CEF9wb29sX3RvdGFsX2xvYW4AEWtQb29sSW50ZXJlc3RMb2FuAhNfcG9vbF9pbnRlcmVzdF9sb2FuABNrUG9vbEludGVyZXN0Tm9Mb2FuAhZfcG9vbF9pbnRlcmVzdF9ub19sb2FuABVrQXhseUluRmVlV2l0aG91dExvYW4CFl9heGx5X2ZlZV93aXRob3V0X2xvYW4AEmtBeGx5SW5GZWVXaXRoTG9hbgITX2F4bHlfZmVlX3dpdGhfbG9hbgARa0F4bHlOb0xvYW5DYXBGZWUCF19heGx5X2ZlZV9jYXBfd2l0aF9sb2FuABNrQXhseVdpdGhMb2FuQ2FwRmVlAhVfYXhseV9mZWVfY2FwX25vX2xvYW4AFmtBeGx5U3RvcExvc3NOb0xvYW5GZWUCHF9heGx5X2ZlZV9zdG9wbG9zc193aXRoX2xvYW4AFGtBeGx5U3RvcExvc3NMb2FuRmVlAhpfYXhseV9mZWVfc3RvcGxvc3Nfbm9fbG9hbgAKa1JlcXVlc3RJZAILX3JlcXVlc3RfaWQADGtSZXF1ZXN0SXRlcgINcmVxdWVzdHNfaXRlcgAFa1Bvb2wCBXBvb2xfAAprU2hhcmVQb29sAg5fcG9vbF9zaGFyZV9pZAAOa1Bvb2xDYXBDaGFuZ2UCEF9wb29sX2NhcF9jaGFuZ2UAD2tUb2tlbkxhc3RQcmljZQILX2xhc3RfcHJpY2UADWtVc2VyU3RvcExvc3MCCl9zdG9wX2xvc3MACWtNb25leUJveAIOYXhseV9tb25leV9ib3gADmtTRkZhcm1pbmdBZGRyAhNzd29wZmlfZmFybWluZ19hZGRyAAxrTGVuZFNlcnZpY2UCEWxlbmRfc2VydmljZV9hZGRyAAxrUHJpY2VPcmFjbGUCDHByaWNlX29yYWNsZQALa0V4Q29udHJhY3QCEWV4Y2hhbmdlX2NvbnRyYWN0AA9rV3hTd2FwQ29udHJhY3QCEHd4X3N3YXBfY29udHJhY3QACG1vbmV5Qm94CQEHQWRkcmVzcwEJANkEAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMFCWtNb25leUJveAIYTm8gYXhseSBtb25leUJveCBhZGRyZXNzAApleENvbnRyYWN0CQEHQWRkcmVzcwEJANkEAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMFC2tFeENvbnRyYWN0AhxObyBleGNoYW5nZSBjb250cmFjdCBhZGRyZXNzAA9wcmljZU9yYWNsZUFkZHIJAQdBZGRyZXNzAQkA2QQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwUMa1ByaWNlT3JhY2xlAhdObyBwcmljZSBvcmFjbGUgYWRkcmVzcwAOd3hTd2FwQ29udHJhY3QJAQdBZGRyZXNzAQkA2QQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwUPa1d4U3dhcENvbnRyYWN0AhJObyB3eCBzd2FwIGFkZHJlc3MABlNXT1BJRAEgNAETVo5gRuJ+W6m4AUeC57EAJhKbduROS6KgfJxt7oEABFdYSUQBIMZSHoFO6m7jPMCXsA5fLPJq6e2dsobRmkJ4qGB9PhuxAQppc1NlbGZDYWxsAQFpAwkAAAIIBQFpBmNhbGxlcgUEdGhpcwUEdW5pdAkAAgECK09ubHkgY29udHJhY3QgaXRzZWxmIGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24BDmFjY291bnRCYWxhbmNlAQdhc3NldElkBAckbWF0Y2gwBQdhc3NldElkAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEAmlkBQckbWF0Y2gwCQDwBwIFBHRoaXMFAmlkAwkAAQIFByRtYXRjaDACBFVuaXQEBXdhdmVzBQckbWF0Y2gwCAkA7wcBBQR0aGlzCWF2YWlsYWJsZQkAAgECC01hdGNoIGVycm9yAQ1nZXRTRlBvb2xEYXRhAQhwb29sQWRkcgkAlwoFCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUIcG9vbEFkZHIFD2tTRlBvb2xBQXNzZXRJZAIZQ2FuJ3QgZ2V0IHBvb2wgQSBhc3NldCBpZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFCHBvb2xBZGRyBQ9rU0ZQb29sQkFzc2V0SWQCGUNhbid0IGdldCBwb29sIEIgYXNzZXQgaWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQhwb29sQWRkcgUUa1NGUG9vbEFBc3NldEJhbGFuY2UCHkNhbid0IGdldCBwb29sIEEgYXNzZXQgYmFsYW5jZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFCHBvb2xBZGRyBRRrU0ZQb29sQkFzc2V0QmFsYW5jZQIeQ2FuJ3QgZ2V0IHBvb2wgQiBhc3NldCBiYWxhbmNlCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUIcG9vbEFkZHIFDmtTRlBvb2xTaGFyZUlkAhhDYW4ndCBnZXQgc2hhcmUgYXNzZXQgaWQBDWdldFdYUG9vbERhdGEBCHBvb2xBZGRyBANjZmcKAAFACQD8BwQFCHBvb2xBZGRyAhxnZXRQb29sQ29uZmlnV3JhcHBlclJFQURPTkxZBQNuaWwFA25pbAMJAAECBQFAAglMaXN0W0FueV0FAUAJAAIBCQCsAgIJAAMBBQFAAh4gY291bGRuJ3QgYmUgY2FzdCB0byBMaXN0W0FueV0DCQAAAgUDY2ZnBQNjZmcEA2FJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCgABQAkAkQMCBQNjZmcABAMJAAECBQFAAgZTdHJpbmcFAUAFBHVuaXQCGUNhbid0IGdldCBwb29sIEEgYXNzZXQgaWQEA2JJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCgABQAkAkQMCBQNjZmcABQMJAAECBQFAAgZTdHJpbmcFAUAFBHVuaXQCGUNhbid0IGdldCBwb29sIEIgYXNzZXQgaWQEB3NoYXJlSWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgoAAUAJAJEDAgUDY2ZnAAMDCQABAgUBQAIGU3RyaW5nBQFABQR1bml0AhpDYW4ndCBnZXQgcG9vbCBMUCBhc3NldCBpZAQEYmFsQQoAAUAJAPwHBAUIcG9vbEFkZHICHGdldEFjY0JhbGFuY2VXcmFwcGVyUkVBRE9OTFkJAMwIAgUDYUlkBQNuaWwFA25pbAMJAAECBQFAAgNJbnQFAUAJAAIBCQCsAgIJAAMBBQFAAhggY291bGRuJ3QgYmUgY2FzdCB0byBJbnQDCQAAAgUEYmFsQQUEYmFsQQQEYmFsQgoAAUAJAPwHBAUIcG9vbEFkZHICHGdldEFjY0JhbGFuY2VXcmFwcGVyUkVBRE9OTFkJAMwIAgUDYklkBQNuaWwFA25pbAMJAAECBQFAAgNJbnQFAUAJAAIBCQCsAgIJAAMBBQFAAhggY291bGRuJ3QgYmUgY2FzdCB0byBJbnQDCQAAAgUEYmFsQgUEYmFsQgkAlwoFBQNhSWQFA2JJZAUEYmFsQQUEYmFsQgUHc2hhcmVJZAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgELZ2V0UG9vbERhdGECCHBvb2xBZGRyBHR5cGUDCQAAAgUEdHlwZQUHU0ZfUE9PTAkBDWdldFNGUG9vbERhdGEBBQhwb29sQWRkcgMJAAACBQR0eXBlBQdXWF9QT09MCQENZ2V0V1hQb29sRGF0YQEFCHBvb2xBZGRyCQACAQIPV3JvbmcgcG9vbCB0eXBlAQ5nZXRTaGFyZVN1cHBseQMIcG9vbEFkZHIEdHlwZQdzaGFyZUlkAwkAAAIFBHR5cGUFB1NGX1BPT0wJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQhwb29sQWRkcgUSa1NGUG9vbFNoYXJlU3VwcGx5AhxDYW4ndCBnZXQgc2hhcmUgYXNzZXQgc3VwcGx5AwkAAAIFBHR5cGUFB1dYX1BPT0wICQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQkA2QQBBQdzaGFyZUlkAg1Xcm9uZyBTaGFyZUlkCHF1YW50aXR5CQACAQIPV3JvbmcgcG9vbCB0eXBlARFnZXRQb29sVG90YWxTaGFyZQEEcG9vbAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIFBHBvb2wFCmtQb29sVG90YWwAAAEZZ2V0UG9vbFRvdGFsU2hhcmVXaXRoTG9hbgEEcG9vbAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIFBHBvb2wFDmtQb29sVG90YWxMb2FuAAABGGdldE5ld1VzZXJQb3NpdGlvbk51bWJlcgIEcG9vbAR1c2VyCQBkAgkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIFBHVzZXIFEGtVc2VyUG9zaXRpb25OdW0AAAABAQpnZXRBeGx5RmVlAgRwb29sB2ZlZVR5cGUDCQAAAgUHZmVlVHlwZQUMQ0FQX0ZFRV9MT0FOCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQCsAgIFBHBvb2wFE2tBeGx5V2l0aExvYW5DYXBGZWUDCQAAAgUHZmVlVHlwZQUPQ0FQX0ZFRV9OT19MT0FOCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQCsAgIFBHBvb2wFEWtBeGx5Tm9Mb2FuQ2FwRmVlAwkAAAIFB2ZlZVR5cGUFCExPQU5fRkVFCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQCsAgIFBHBvb2wFEmtBeGx5SW5GZWVXaXRoTG9hbgMJAAACBQdmZWVUeXBlBQtOT19MT0FOX0ZFRQkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkArAICBQRwb29sBRVrQXhseUluRmVlV2l0aG91dExvYW4JAAIBAg5Xcm9uZyBmZWUgdHlwZQEQZ2V0U0ZGYXJtaW5nQWRkcgAJAQdBZGRyZXNzAQkA2QQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwUOa1NGRmFybWluZ0FkZHICHUNhbid0IGdldCBzd29wZmkgZmFybWluZyBhZGRyARBnZXRXWEZhcm1pbmdBZGRyAQhwb29sQWRkcgQJZkNvbnRyYWN0CQEHQWRkcmVzcwEJANkEAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFCHBvb2xBZGRyAhMlc19fZmFjdG9yeUNvbnRyYWN0AiJDYW4ndCBnZXQgV1ggZmFjdG9yeSBjb250cmFjdCBhZGRyBApmYWN0cm95Q2ZnCQC1CQIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQlmQ29udHJhY3QCESVzX19mYWN0b3J5Q29uZmlnAhhDYW4ndCBnZXQgV1ggZmFjdG9yeSBjZmcCAl9fCQEHQWRkcmVzcwEJANkEAQkAkQMCBQpmYWN0cm95Q2ZnAAEBDmdldExlbmRTcnZBZGRyAAkBB0FkZHJlc3MBCQDZBAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzBQxrTGVuZFNlcnZpY2UCG0Nhbid0IGdldCBsZW5kIHNlcnZpY2UgYWRkcgEMYXNzZXRJZFRvU3RyAQdhc3NldElkBAckbWF0Y2gwBQdhc3NldElkAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEAmlkBQckbWF0Y2gwCQDYBAEFAmlkAwkAAQIFByRtYXRjaDACBFVuaXQEBXdhdmVzBQckbWF0Y2gwAgVXQVZFUwkAAgECC01hdGNoIGVycm9yAQ5hc3NldElkRnJvbVN0cgEHYXNzZXRJZAMJAAACBQdhc3NldElkAgVXQVZFUwUEdW5pdAkA2QQBBQdhc3NldElkARBnZXRBc3NldERlY2ltYWxzAQdhc3NldElkAwkAAAIFB2Fzc2V0SWQCBVdBVkVTAAgEByRtYXRjaDAJAOwHAQkA2QQBBQdhc3NldElkAwkAAQIFByRtYXRjaDACBUFzc2V0BAVhc3NldAUHJG1hdGNoMAgFBWFzc2V0CGRlY2ltYWxzCQACAQIQQ2FuJ3QgZmluZCBhc3NldAERZ2V0QXNzZXRQcmVjaXRpb24BB2Fzc2V0SWQJAGwGAAoAAAkBEGdldEFzc2V0RGVjaW1hbHMBBQdhc3NldElkAAAAAAUERE9XTgEOZ2V0QXNzZXRzUHJpY2UBCGFzc2V0SWRzCgEJZ2V0UHJpY2VzAgFhB2Fzc2V0SWQECmFzc2V0UHJpY2UICgABQAkA/AcEBQ9wcmljZU9yYWNsZUFkZHICCWdldFRXQVA2MAkAzAgCBQdhc3NldElkCQDMCAIHBQNuaWwFA25pbAMJAAECBQFAAgooSW50LCBJbnQpBQFACQACAQkArAICCQADAQUBQAIfIGNvdWxkbid0IGJlIGNhc3QgdG8gKEludCwgSW50KQJfMgkAzQgCBQFhBQphc3NldFByaWNlCgACJGwFCGFzc2V0SWRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQlnZXRQcmljZXMCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFUxpc3Qgc2l6ZSBleGNlZWRzIDEwMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAAZABoAGwAcAB0AHgAfACAAIQAiACMAJAAlACYAJwAoACkAKgArACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQA6ADsAPAA9AD4APwBAAEEAQgBDAEQARQBGAEcASABJAEoASwBMAE0ATgBPAFAAUQBSAFMAVABVAFYAVwBYAFkAWgBbAFwAXQBeAF8AYABhAGIAYwBkAQ1nZXRTaGFyZVByaWNlAQhzaGFyZUlkcwoBCWdldFByaWNlcwIBYQdzaGFyZUlkBARwb29sCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwkArAICBQdzaGFyZUlkBQprU2hhcmVQb29sAiBDYW4ndCBmaW5kIHBvb2wgYWRkciBieSBzaGFyZSBpZAQIcG9vbEFkZHIJAQdBZGRyZXNzAQkA2QQBBQRwb29sBAVwVHlwZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMJAKwCAgUFa1Bvb2wFBHBvb2wCElBvb2wgaXMgbm90IGluaXRlZAQLJHQwODM3Njg0NDEJAQtnZXRQb29sRGF0YQIFCHBvb2xBZGRyBQVwVHlwZQQDYUlkCAULJHQwODM3Njg0NDECXzEEA2JJZAgFCyR0MDgzNzY4NDQxAl8yBAhhQmFsYW5jZQgFCyR0MDgzNzY4NDQxAl8zBAhiQmFsYW5jZQgFCyR0MDgzNzY4NDQxAl80BAdkUHJpY2VBCAoAAUAJAPwHBAUPcHJpY2VPcmFjbGVBZGRyAglnZXRUV0FQNjAJAMwIAgUDYUlkCQDMCAIHBQNuaWwFA25pbAMJAAECBQFAAgooSW50LCBJbnQpBQFACQACAQkArAICCQADAQUBQAIfIGNvdWxkbid0IGJlIGNhc3QgdG8gKEludCwgSW50KQJfMgQHZFByaWNlQggKAAFACQD8BwQFD3ByaWNlT3JhY2xlQWRkcgIJZ2V0VFdBUDYwCQDMCAIFA2JJZAkAzAgCBwUDbmlsBQNuaWwDCQABAgUBQAIKKEludCwgSW50KQUBQAkAAgEJAKwCAgkAAwEFAUACHyBjb3VsZG4ndCBiZSBjYXN0IHRvIChJbnQsIEludCkCXzIEC3NoYXJlU3VwcGx5CQEOZ2V0U2hhcmVTdXBwbHkDBQhwb29sQWRkcgUFcFR5cGUFB3NoYXJlSWQECkFQcmVjaXNpb24JAGwGAAoAAAkBEGdldEFzc2V0RGVjaW1hbHMBBQNhSWQAAAAABQRET1dOBApCUHJlY2lzaW9uCQBsBgAKAAAJARBnZXRBc3NldERlY2ltYWxzAQUDYklkAAAAAAUERE9XTgQOc2hhcmVQcmVjaXNpb24JAGwGAAoAAAkBEGdldEFzc2V0RGVjaW1hbHMBBQdzaGFyZUlkAAAAAAUERE9XTgQDc3VtCQBkAgkAawMFCGFCYWxhbmNlBQdkUHJpY2VBBQpBUHJlY2lzaW9uCQBrAwUIYkJhbGFuY2UFB2RQcmljZUIFCkJQcmVjaXNpb24ECnNoYXJlUHJpY2UJAGsDBQNzdW0FDnNoYXJlUHJlY2lzaW9uBQtzaGFyZVN1cHBseQkAzQgCBQFhBQpzaGFyZVByaWNlCgACJGwFCHNoYXJlSWRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQlnZXRQcmljZXMCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDUwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkAGgAbABwAHQAeAB8AIAAhACIAIwAkACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgEOZ2V0Q3Vyc0VudHJpZXMDA2FJZANiSWQHc2hhcmVJZAQMYXNzZXRzUHJpY2VzCQEOZ2V0QXNzZXRzUHJpY2UBCQDMCAIFA2FJZAkAzAgCBQNiSWQFA25pbAQKc2hhcmVQcmljZQkBDWdldFNoYXJlUHJpY2UBCQDMCAIFB3NoYXJlSWQFA25pbAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQNhSWQFD2tUb2tlbkxhc3RQcmljZQkAkQMCBQxhc3NldHNQcmljZXMAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQNiSWQFD2tUb2tlbkxhc3RQcmljZQkAkQMCBQxhc3NldHNQcmljZXMAAQkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQdzaGFyZUlkBQ9rVG9rZW5MYXN0UHJpY2UJAJEDAgUKc2hhcmVQcmljZQAABQNuaWwBD3JlcGxlbmlzaFN3b3BGaQkEcG9vbAdmZWVUeXBlBHBtdEEJcG10QXNzZXRBBHBtdEIJcG10QXNzZXRCBGJhbEEEYmFsQgdzaGFyZUlkBBJzaGFyZUJhbGFuY2VCZWZvcmUJAQ5hY2NvdW50QmFsYW5jZQEJANkEAQUHc2hhcmVJZAMJAAACBRJzaGFyZUJhbGFuY2VCZWZvcmUFEnNoYXJlQmFsYW5jZUJlZm9yZQQIcG9vbEFkZHIJAQdBZGRyZXNzAQkA2QQBBQRwb29sBAZyYXRpb0EJAGsDBQZTQ0FMRTgFBHBtdEEFBGJhbEEEBnJhdGlvQgkAawMFBlNDQUxFOAUEcG10QgUEYmFsQgQMJHQwOTk0NjEwMjM4AwkAZgIFBnJhdGlvQgUGcmF0aW9BBANwbXQJAG4EBQRiYWxCBQZyYXRpb0EFBlNDQUxFOAUHQ0VJTElORwkAlgoEBQRwbXRBBQNwbXQJAGUCBQRwbXRCBQNwbXQFCXBtdEFzc2V0QgQDcG10CQBuBAUEYmFsQQUGcmF0aW9CBQZTQ0FMRTgFB0NFSUxJTkcJAJYKBAUDcG10BQRwbXRCCQBlAgUEcG10QQUDcG10BQlwbXRBc3NldEEECnBtdEFtb3VudEEIBQwkdDA5OTQ2MTAyMzgCXzEECnBtdEFtb3VudEIIBQwkdDA5OTQ2MTAyMzgCXzIEBmNoYW5nZQgFDCR0MDk5NDYxMDIzOAJfMwQNY2hhbmdlQXNzZXRJZAgFDCR0MDk5NDYxMDIzOAJfNAQEaW52MQMDCQBmAgUKcG10QW1vdW50QQAACQBmAgUKcG10QW1vdW50QgAABwQIcGF5bWVudHMJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQ5hc3NldElkRnJvbVN0cgEFCXBtdEFzc2V0QQUKcG10QW1vdW50QQkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBDmFzc2V0SWRGcm9tU3RyAQUJcG10QXNzZXRCBQpwbXRBbW91bnRCBQNuaWwJAPwHBAUIcG9vbEFkZHICDGNhbGxGdW5jdGlvbgkAzAgCAhZyZXBsZW5pc2hXaXRoVHdvVG9rZW5zCQDMCAIJAMwIAgIFZmFsc2UJAMwIAgIBMAUDbmlsBQNuaWwFCHBheW1lbnRzAAADCQAAAgUEaW52MQUEaW52MQQEaW52MgMJAGYCBQZjaGFuZ2UAAAQIcGF5bWVudHMJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQ5hc3NldElkRnJvbVN0cgEFDWNoYW5nZUFzc2V0SWQFBmNoYW5nZQUDbmlsBAR2YXJzCQDMCAICATAJAMwIAgIFZmFsc2UJAMwIAgIBMAUDbmlsCQD8BwQFCHBvb2xBZGRyAgxjYWxsRnVuY3Rpb24JAMwIAgIVcmVwbGVuaXNoV2l0aE9uZVRva2VuCQDMCAIFBHZhcnMFA25pbAUIcGF5bWVudHMAAAMJAAACBQRpbnYyBQRpbnYyBBFzaGFyZUJhbGFuY2VBZnRlcgkBDmFjY291bnRCYWxhbmNlAQkA2QQBBQdzaGFyZUlkBAt0b3RhbFN0YWtlZAkAZQIFEXNoYXJlQmFsYW5jZUFmdGVyBRJzaGFyZUJhbGFuY2VCZWZvcmUEDWF4bHlGZWVBbW91bnQJAGsDBQt0b3RhbFN0YWtlZAkBCmdldEF4bHlGZWUCBQRwb29sBQdmZWVUeXBlBQpGRUVfU0NBTEU2BBF1c2VyU2hhcmVGb3JTdGFrZQkAZQIFC3RvdGFsU3Rha2VkBQ1heGx5RmVlQW1vdW50AwkAZwIAAAURdXNlclNoYXJlRm9yU3Rha2UJAAIBAihhbW91bnQgb2Ygc3Rha2VkIHNoYXJldG9rZW5zIG11c3QgYmUgPiAwBARpbnYzCQD8BwQJARBnZXRTRkZhcm1pbmdBZGRyAAIPbG9ja1NoYXJlVG9rZW5zCQDMCAIFBHBvb2wJAMwIAgAABQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJANkEAQUHc2hhcmVJZAURdXNlclNoYXJlRm9yU3Rha2UFA25pbAMJAAACBQRpbnYzBQRpbnYzCQCUCgIFEXVzZXJTaGFyZUZvclN0YWtlBQ1heGx5RmVlQW1vdW50CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQtyZXBsZW5pc2hXWAcEcG9vbAdmZWVUeXBlBHBtdEEJcG10QXNzZXRBBHBtdEIJcG10QXNzZXRCB3NoYXJlSWQECHBvb2xBZGRyCQEHQWRkcmVzcwEJANkEAQUEcG9vbAQNJHQwMTE2ODkxMjUzOAMDCQBmAgUEcG10QQAACQBmAgUEcG10QgAABwQKZXZhbFB1dEluQQkAtQkCCgABQAkA/AcEBQhwb29sQWRkcgIgZXZhbHVhdGVQdXRCeUFtb3VudEFzc2V0UkVBRE9OTFkJAMwIAgUEcG10QQUDbmlsBQNuaWwDCQABAgUBQAIGU3RyaW5nBQFACQACAQkArAICCQADAQUBQAIbIGNvdWxkbid0IGJlIGNhc3QgdG8gU3RyaW5nAgJfXwMJAAACBQpldmFsUHV0SW5BBQpldmFsUHV0SW5BBApldmFsUHV0SW5CCQC1CQIKAAFACQD8BwQFCHBvb2xBZGRyAh9ldmFsdWF0ZVB1dEJ5UHJpY2VBc3NldFJFQURPTkxZCQDMCAIFBHBtdEIFA25pbAUDbmlsAwkAAQIFAUACBlN0cmluZwUBQAkAAgEJAKwCAgkAAwEFAUACGyBjb3VsZG4ndCBiZSBjYXN0IHRvIFN0cmluZwICX18DCQAAAgUKZXZhbFB1dEluQgUKZXZhbFB1dEluQgQFbHBJbkEJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQpldmFsUHV0SW5BAAEEBWxwSW5CCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKZXZhbFB1dEluQgABAwkAZgIFBWxwSW5CBQVscEluQQQGcG10SW5CCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKZXZhbFB1dEluQQAICQCWCgQFBHBtdEEFBnBtdEluQgkAZQIFBHBtdEIFBnBtdEluQgUJcG10QXNzZXRCBAZwbXRJbkEJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQpldmFsUHV0SW5CAAcJAJYKBAUGcG10SW5BBQRwbXRCCQBlAgUEcG10QQUGcG10SW5BBQlwbXRBc3NldEEJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4DCQBmAgUEcG10QQAACQCWCgQFBHBtdEEFBHBtdEIFBHBtdEEFCXBtdEFzc2V0QQMJAGYCBQRwbXRCAAAJAJYKBAUEcG10QQUEcG10QgUEcG10QgUJcG10QXNzZXRCCQACAQIQcG10cyBtdXN0IGJlID4gMAQKcG10QW1vdW50QQgFDSR0MDExNjg5MTI1MzgCXzEECnBtdEFtb3VudEIIBQ0kdDAxMTY4OTEyNTM4Al8yBAZjaGFuZ2UIBQ0kdDAxMTY4OTEyNTM4Al8zBA1jaGFuZ2VBc3NldElkCAUNJHQwMTE2ODkxMjUzOAJfNAQSc2hhcmVCYWxhbmNlQmVmb3JlCQEOYWNjb3VudEJhbGFuY2UBCQDZBAEFB3NoYXJlSWQDCQAAAgUSc2hhcmVCYWxhbmNlQmVmb3JlBRJzaGFyZUJhbGFuY2VCZWZvcmUEBGludjEDAwkAZgIFCnBtdEFtb3VudEEAAAkAZgIFCnBtdEFtb3VudEIAAAcECHBheW1lbnRzCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQEOYXNzZXRJZEZyb21TdHIBBQlwbXRBc3NldEEFCnBtdEFtb3VudEEJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQ5hc3NldElkRnJvbVN0cgEFCXBtdEFzc2V0QgUKcG10QW1vdW50QgUDbmlsCQD8BwQFCHBvb2xBZGRyAgNwdXQJAMwIAgDAhD0JAMwIAgcFA25pbAUIcGF5bWVudHMAAAMJAAACBQRpbnYxBQRpbnYxBARpbnYyAwkAZgIFBmNoYW5nZQAABAhwYXltZW50cwkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBDmFzc2V0SWRGcm9tU3RyAQUNY2hhbmdlQXNzZXRJZAUGY2hhbmdlBQNuaWwJAPwHBAUIcG9vbEFkZHICCXB1dE9uZVRrbgkAzAgCAAAJAMwIAgcFA25pbAUIcGF5bWVudHMAAAMJAAACBQRpbnYyBQRpbnYyBBFzaGFyZUJhbGFuY2VBZnRlcgkBDmFjY291bnRCYWxhbmNlAQkA2QQBBQdzaGFyZUlkBAt0b3RhbFN0YWtlZAkAZQIFEXNoYXJlQmFsYW5jZUFmdGVyBRJzaGFyZUJhbGFuY2VCZWZvcmUEDWF4bHlGZWVBbW91bnQJAGsDBQt0b3RhbFN0YWtlZAkBCmdldEF4bHlGZWUCBQRwb29sBQdmZWVUeXBlBQpGRUVfU0NBTEU2BBF1c2VyU2hhcmVGb3JTdGFrZQkAZQIFC3RvdGFsU3Rha2VkBQ1heGx5RmVlQW1vdW50AwkAZwIAAAURdXNlclNoYXJlRm9yU3Rha2UJAAIBAihhbW91bnQgb2Ygc3Rha2VkIHNoYXJldG9rZW5zIG11c3QgYmUgPiAwBARpbnYzCQD8BwQJARBnZXRXWEZhcm1pbmdBZGRyAQUIcG9vbEFkZHICBXN0YWtlBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJANkEAQUHc2hhcmVJZAURdXNlclNoYXJlRm9yU3Rha2UFA25pbAMJAAACBQRpbnYzBQRpbnYzCQCUCgIFEXVzZXJTaGFyZUZvclN0YWtlBQ1heGx5RmVlQW1vdW50CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQ9yZXBsZW5pc2hCeVR5cGUKBHR5cGUEcG9vbAdmZWVUeXBlBHBtdEEDQUlkBHBtdEIDQklkBGJhbEEEYmFsQgdzaGFyZUlkAwkAAAIFBHR5cGUFB1NGX1BPT0wJAQ9yZXBsZW5pc2hTd29wRmkJBQRwb29sBQdmZWVUeXBlBQRwbXRBBQNBSWQFBHBtdEIFA0JJZAUEYmFsQQUEYmFsQgUHc2hhcmVJZAMJAAACBQR0eXBlBQdXWF9QT09MCQELcmVwbGVuaXNoV1gHBQRwb29sBQdmZWVUeXBlBQRwbXRBBQNBSWQFBHBtdEIFA0JJZAUHc2hhcmVJZAkAAgECD1dyb25nIHBvb2wgdHlwZQEQcmVwbGVuaXNoRW50cmllcwgEcG9vbAR1c2VyDHN0YWtlZEFtb3VudA1heGx5RmVlQW1vdW50BnBvc051bQdzaGFyZUlkBHR5cGUId2l0aExvYW4EC3RvdGFsQW1vdW50CQERZ2V0UG9vbFRvdGFsU2hhcmUBBQRwb29sBA90b3RhbEFtb3VudExvYW4JARlnZXRQb29sVG90YWxTaGFyZVdpdGhMb2FuAQUEcG9vbAQNJHQwMTQ1NTYxNDc5NAMFCHdpdGhMb2FuCQCUCgIJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgUEcG9vbAURa1Bvb2xJbnRlcmVzdExvYW4JAGQCBQ90b3RhbEFtb3VudExvYW4FDHN0YWtlZEFtb3VudAkAlAoCCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQCsAgIFBHBvb2wFE2tQb29sSW50ZXJlc3ROb0xvYW4FD3RvdGFsQW1vdW50TG9hbgQPY3VyUG9vbEludGVyZXN0CAUNJHQwMTQ1NTYxNDc5NAJfMQQTdG90YWxTdGFrZWRXaXRoTG9hbggFDSR0MDE0NTU2MTQ3OTQCXzIJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAUKa1Bvb2xUb3RhbAkAZAIFC3RvdGFsQW1vdW50BQxzdGFrZWRBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAUOa1Bvb2xUb3RhbExvYW4JAGQCBQ90b3RhbEFtb3VudExvYW4FDHN0YWtlZEFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXICAV8JAKQDAQUGcG9zTnVtBQ1rVXNlclBvc2l0aW9uBQxzdGFrZWRBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfCQCkAwEFBnBvc051bQUVa1VzZXJQb3NpdGlvbkludGVyZXN0BQ9jdXJQb29sSW50ZXJlc3QJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgUEdXNlcgIBXwkApAMBBQZwb3NOdW0FEWtVc2VyUG9zaXRpb25Qb29sBQRwb29sCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHVzZXIFEGtVc2VyUG9zaXRpb25OdW0FBnBvc051bQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQhtb25leUJveAUNYXhseUZlZUFtb3VudAkA2QQBBQdzaGFyZUlkBQNuaWwBC2NsYWltRmFybWVkAgR0eXBlBHBvb2wDCQAAAgUEdHlwZQUHU0ZfUE9PTAQJYmFsQmVmb3JlCQEOYWNjb3VudEJhbGFuY2UBBQZTV09QSUQDCQAAAgUJYmFsQmVmb3JlBQliYWxCZWZvcmUEA2ludgkA/AcECQEQZ2V0U0ZGYXJtaW5nQWRkcgACBWNsYWltCQDMCAIFBHBvb2wFA25pbAUDbmlsAwkAAAIFA2ludgUDaW52BAhiYWxBZnRlcgkBDmFjY291bnRCYWxhbmNlAQUGU1dPUElECQCUCgIJAGUCBQhiYWxBZnRlcgUJYmFsQmVmb3JlBQZTV09QSUQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4DCQAAAgUEdHlwZQUHV1hfUE9PTAQJYmFsQmVmb3JlCQEOYWNjb3VudEJhbGFuY2UBBQRXWElEAwkAAAIFCWJhbEJlZm9yZQUJYmFsQmVmb3JlBANpbnYJAPwHBAkBEGdldFdYRmFybWluZ0FkZHIBCQEHQWRkcmVzcwEJANkEAQUEcG9vbAIHY2xhaW1XWAkAzAgCBQRwb29sBQNuaWwFA25pbAMJAAACBQNpbnYFA2ludgQIYmFsQWZ0ZXIJAQ5hY2NvdW50QmFsYW5jZQEFBFdYSUQJAJQKAgkAZQIFCGJhbEFmdGVyBQliYWxCZWZvcmUFBFdYSUQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAg9Xcm9uZyBwb29sIHR5cGUBDmV4Y2hhbmdlS2VlcGVyCgd0b1Rva2VuCXBtdEFtb3VudAhwbXRBc3NldAlhbW91bnRzSW4JYWRkcmVzc2VzD2Fzc2V0c1RvUmVjZWl2ZQtlc3RSZWNlaXZlZBFzbGlwcGFnZVRvbGVyYW5jZQttaW5SZWNlaXZlZAdvcHRpb25zBBJ0b2tlbkJhbGFuY2VCZWZvcmUJAQ5hY2NvdW50QmFsYW5jZQEJAQ5hc3NldElkRnJvbVN0cgEFB3RvVG9rZW4DCQAAAgUSdG9rZW5CYWxhbmNlQmVmb3JlBRJ0b2tlbkJhbGFuY2VCZWZvcmUEA2ludgkA/AcEBQpleENvbnRyYWN0AgRzd2FwCQDMCAIFCWFtb3VudHNJbgkAzAgCBQlhZGRyZXNzZXMJAMwIAgUPYXNzZXRzVG9SZWNlaXZlCQDMCAIFC2VzdFJlY2VpdmVkCQDMCAIFEXNsaXBwYWdlVG9sZXJhbmNlCQDMCAIFC21pblJlY2VpdmVkCQDMCAIFB29wdGlvbnMFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUIcG10QXNzZXQFCXBtdEFtb3VudAUDbmlsAwkAAAIFA2ludgUDaW52CQBlAgkBDmFjY291bnRCYWxhbmNlAQkBDmFzc2V0SWRGcm9tU3RyAQUHdG9Ub2tlbgUSdG9rZW5CYWxhbmNlQmVmb3JlCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQ5leGNoYW5nZVB1enpsZQYHdG9Ub2tlbglwbXRBbW91bnQIcG10QXNzZXQJcm91dGVzU3RyDG1pblRvUmVjZWl2ZQdvcHRpb25zBBJ0b2tlbkJhbGFuY2VCZWZvcmUJAQ5hY2NvdW50QmFsYW5jZQEJAQ5hc3NldElkRnJvbVN0cgEFB3RvVG9rZW4DCQAAAgUSdG9rZW5CYWxhbmNlQmVmb3JlBRJ0b2tlbkJhbGFuY2VCZWZvcmUEA2ludgkA/AcEBQpleENvbnRyYWN0AgpwdXp6bGVTd2FwCQDMCAIFCXJvdXRlc1N0cgkAzAgCBQxtaW5Ub1JlY2VpdmUJAMwIAgUHb3B0aW9ucwUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQhwbXRBc3NldAUJcG10QW1vdW50BQNuaWwDCQAAAgUDaW52BQNpbnYJAGUCCQEOYWNjb3VudEJhbGFuY2UBCQEOYXNzZXRJZEZyb21TdHIBBQd0b1Rva2VuBRJ0b2tlbkJhbGFuY2VCZWZvcmUJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BDmV4Y2hhbmdlU3dvcEZpCgd0b1Rva2VuCXBtdEFtb3VudAhwbXRBc3NldApleGNoYW5nZXJzDmV4Y2hhbmdlcnNUeXBlBWFyZ3MxBWFyZ3MyEXJvdXRpbmdBc3NldHNLZXlzEm1pbkFtb3VudFRvUmVjZWl2ZQdvcHRpb25zBBJ0b2tlbkJhbGFuY2VCZWZvcmUJAQ5hY2NvdW50QmFsYW5jZQEJAQ5hc3NldElkRnJvbVN0cgEFB3RvVG9rZW4DCQAAAgUSdG9rZW5CYWxhbmNlQmVmb3JlBRJ0b2tlbkJhbGFuY2VCZWZvcmUEA2ludgkA/AcEBQpleENvbnRyYWN0Agpzd29wZmlTd2FwCQDMCAIFCmV4Y2hhbmdlcnMJAMwIAgUOZXhjaGFuZ2Vyc1R5cGUJAMwIAgUFYXJnczEJAMwIAgUFYXJnczIJAMwIAgURcm91dGluZ0Fzc2V0c0tleXMJAMwIAgUSbWluQW1vdW50VG9SZWNlaXZlCQDMCAIFB29wdGlvbnMFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUIcG10QXNzZXQFCXBtdEFtb3VudAUDbmlsAwkAAAIFA2ludgUDaW52CQBlAgkBDmFjY291bnRCYWxhbmNlAQkBDmFzc2V0SWRGcm9tU3RyAQUHdG9Ub2tlbgUSdG9rZW5CYWxhbmNlQmVmb3JlCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQpjYXBpdGFsaXplBARwb29sBXBUeXBlB3Rva2VuSWQLdG9rZW5BbW91bnQECHBvb2xBZGRyCQEHQWRkcmVzcwEJANkEAQUEcG9vbAQNJHQwMTc3NjAxNzgzOQkBC2dldFBvb2xEYXRhAgUIcG9vbEFkZHIFBXBUeXBlBANBSWQIBQ0kdDAxNzc2MDE3ODM5Al8xBANCSWQIBQ0kdDAxNzc2MDE3ODM5Al8yBARiYWxBCAUNJHQwMTc3NjAxNzgzOQJfMwQEYmFsQggFDSR0MDE3NzYwMTc4MzkCXzQEB3NoYXJlSWQIBQ0kdDAxNzc2MDE3ODM5Al81BA0kdDAxNzg0MjE3OTIyAwkAAAIFB3Rva2VuSWQFA0FJZAkAlAoCBQt0b2tlbkFtb3VudAAACQCUCgIAAAULdG9rZW5BbW91bnQEBHBtdEEIBQ0kdDAxNzg0MjE3OTIyAl8xBARwbXRCCAUNJHQwMTc4NDIxNzkyMgJfMgQNJHQwMTc5MjUxODAyOQkBD3JlcGxlbmlzaEJ5VHlwZQoFBXBUeXBlBQRwb29sBQZOT19GRUUFBHBtdEEFA0FJZAUEcG10QgUDQklkBQRiYWxBBQRiYWxCBQdzaGFyZUlkBAxzdGFrZWRBbW91bnQIBQ0kdDAxNzkyNTE4MDI5Al8xBAJuZggFDSR0MDE3OTI1MTgwMjkCXzIEE2N1clBvb2xJbnRlcmVzdExvYW4JAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICBQRwb29sBRFrUG9vbEludGVyZXN0TG9hbgAABBVjdXJQb29sSW50ZXJlc3ROb0xvYW4JAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICBQRwb29sBRNrUG9vbEludGVyZXN0Tm9Mb2FuAAAEEHRvdGFsU2hhcmVBbW91bnQJARFnZXRQb29sVG90YWxTaGFyZQEFBHBvb2wEGHRvdGFsU2hhcmVBbW91bnRXaXRoTG9hbgkBGWdldFBvb2xUb3RhbFNoYXJlV2l0aExvYW4BBQRwb29sBAtsb2FuUGVyY2VudAkAawMFGHRvdGFsU2hhcmVBbW91bnRXaXRoTG9hbgUGU0NBTEU4BRB0b3RhbFNoYXJlQW1vdW50BApzdGFrZWRMb2FuCQBrAwUMc3Rha2VkQW1vdW50BQtsb2FuUGVyY2VudAUGU0NBTEU4BAxzdGFrZWROb0xvYW4JAGUCBQxzdGFrZWRBbW91bnQFCnN0YWtlZExvYW4ED25ld0ludGVyZXN0TG9hbgkAZAIFE2N1clBvb2xJbnRlcmVzdExvYW4JAGsDBQpzdGFrZWRMb2FuBQdTQ0FMRTEwBRh0b3RhbFNoYXJlQW1vdW50V2l0aExvYW4EEW5ld0ludGVyZXN0Tm9Mb2FuCQBkAgUVY3VyUG9vbEludGVyZXN0Tm9Mb2FuCQBrAwUMc3Rha2VkTm9Mb2FuBQdTQ0FMRTEwCQBlAgUQdG90YWxTaGFyZUFtb3VudAUYdG90YWxTaGFyZUFtb3VudFdpdGhMb2FuBAtheGx5RmVlTG9hbgkAawMFCnN0YWtlZExvYW4JAQpnZXRBeGx5RmVlAgUEcG9vbAUMQ0FQX0ZFRV9MT0FOBQpGRUVfU0NBTEU2BA1heGx5RmVlTm9Mb2FuCQBrAwUMc3Rha2VkTm9Mb2FuCQEKZ2V0QXhseUZlZQIFBHBvb2wFD0NBUF9GRUVfTk9fTE9BTgUKRkVFX1NDQUxFNgkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHBvb2wFEWtQb29sSW50ZXJlc3RMb2FuBQ9uZXdJbnRlcmVzdExvYW4JAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAUTa1Bvb2xJbnRlcmVzdE5vTG9hbgURbmV3SW50ZXJlc3ROb0xvYW4JAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAUKa1Bvb2xUb3RhbAkAZQIJAGUCCQBkAgUQdG90YWxTaGFyZUFtb3VudAUMc3Rha2VkQW1vdW50BQtheGx5RmVlTG9hbgUNYXhseUZlZU5vTG9hbgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBQ5rUG9vbFRvdGFsTG9hbgkAZQIJAGQCBRh0b3RhbFNoYXJlQW1vdW50V2l0aExvYW4FCnN0YWtlZExvYW4FC2F4bHlGZWVMb2FuCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFCG1vbmV5Qm94CQBkAgULYXhseUZlZUxvYW4FDWF4bHlGZWVOb0xvYW4JANkEAQUHc2hhcmVJZAUDbmlsCQEOZ2V0Q3Vyc0VudHJpZXMDBQNBSWQFA0JJZAUHc2hhcmVJZAESZXhjaGFuZ2VEaXJlY3RseVNGBwRwb29sCGFzc2V0SWRBCGFzc2V0SWRCBGJhbEEEYmFsQhBhbW91bnRUb2tlblRvR2V0D2Fzc2V0VG9rZW5Ub0dldAQIcG9vbEFkZHIJAQdBZGRyZXNzAQkA2QQBBQRwb29sBAlmZWVTY2FsZTYAwIQ9BANmZWUJARFAZXh0ck5hdGl2ZSgxMDUwKQIFCHBvb2xBZGRyBQprU0ZQb29sRmVlBAxhbW50R2V0Tm9GZWUJAGsDBRBhbW91bnRUb2tlblRvR2V0BQlmZWVTY2FsZTYJAGUCBQlmZWVTY2FsZTYFA2ZlZQQNJHQwMTk3MTcyMDAwNQMJAAACBQ9hc3NldFRva2VuVG9HZXQFCGFzc2V0SWRBBAthbW91bnRUb1BheQkAawMFBGJhbEEFDGFtbnRHZXROb0ZlZQkAZQIFBGJhbEIFDGFtbnRHZXROb0ZlZQkAlAoCBQthbW91bnRUb1BheQUIYXNzZXRJZEIEC2Ftb3VudFRvUGF5CQBrAwUEYmFsQgUMYW1udEdldE5vRmVlCQBlAgUEYmFsQQUMYW1udEdldE5vRmVlCQCUCgIFC2Ftb3VudFRvUGF5BQhhc3NldElkQQQLYW1vdW50VG9QYXkIBQ0kdDAxOTcxNzIwMDA1Al8xBAphc3NldFRvUGF5CAUNJHQwMTk3MTcyMDAwNQJfMgkA/AcEBQhwb29sQWRkcgIMY2FsbEZ1bmN0aW9uCQDMCAICCGV4Y2hhbmdlCQDMCAIJAMwIAgIBMQUDbmlsBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQ5hc3NldElkRnJvbVN0cgEFCmFzc2V0VG9QYXkFC2Ftb3VudFRvUGF5BQNuaWwBEmV4Y2hhbmdlRGlyZWN0bHlXWAcEcG9vbAhhc3NldElkQQhhc3NldElkQgRiYWxBBGJhbEIQYW1vdW50VG9rZW5Ub0dldA9hc3NldFRva2VuVG9HZXQECHBvb2xBZGRyCQEHQWRkcmVzcwEJANkEAQUEcG9vbAQFcHJGZWUJARFAZXh0ck5hdGl2ZSgxMDUwKQIFDnd4U3dhcENvbnRyYWN0Ag8lc19fcHJvdG9jb2xGZWUEBHBGZWUJARFAZXh0ck5hdGl2ZSgxMDUwKQIFDnd4U3dhcENvbnRyYWN0Agslc19fcG9vbEZlZQQIZmVlU2NhbGUJALYCAQCAwtcvBA0kdDAyMDQ4NDIwNzkyAwkAAAIFD2Fzc2V0VG9rZW5Ub0dldAUIYXNzZXRJZEEEC2Ftb3VudFRvUGF5CQBrAwUEYmFsQQUQYW1vdW50VG9rZW5Ub0dldAkAZQIFBGJhbEIFEGFtb3VudFRva2VuVG9HZXQJAJQKAgULYW1vdW50VG9QYXkFCGFzc2V0SWRCBAthbW91bnRUb1BheQkAawMFBGJhbEIFEGFtb3VudFRva2VuVG9HZXQJAGUCBQRiYWxBBRBhbW91bnRUb2tlblRvR2V0CQCUCgIFC2Ftb3VudFRvUGF5BQhhc3NldElkQQQLYW1vdW50VG9QYXkIBQ0kdDAyMDQ4NDIwNzkyAl8xBAphc3NldFRvUGF5CAUNJHQwMjA0ODQyMDc5MgJfMgQSYW1vdW50VG9QYXlXaXRoRmVlCQCgAwEJALwCAwkAtgIBBQthbW91bnRUb1BheQUIZmVlU2NhbGUJALgCAgUIZmVlU2NhbGUJALYCAQkAZAIFBXByRmVlBQRwRmVlCQD8BwQFDnd4U3dhcENvbnRyYWN0AgRzd2FwCQDMCAIAAQkAzAgCBQ9hc3NldFRva2VuVG9HZXQJAMwIAgkApQgBBQR0aGlzBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQ5hc3NldElkRnJvbVN0cgEFCmFzc2V0VG9QYXkFEmFtb3VudFRvUGF5V2l0aEZlZQUDbmlsARBleGNoYW5nZURpcmVjdGx5CAR0eXBlBHBvb2wIYXNzZXRJZEEIYXNzZXRJZEIEYmFsQQRiYWxCEGFtb3VudFRva2VuVG9HZXQPYXNzZXRUb2tlblRvR2V0AwkAAAIFBHR5cGUFB1NGX1BPT0wJARJleGNoYW5nZURpcmVjdGx5U0YHBQRwb29sBQhhc3NldElkQQUIYXNzZXRJZEIFBGJhbEEFBGJhbEIFEGFtb3VudFRva2VuVG9HZXQFD2Fzc2V0VG9rZW5Ub0dldAkBEmV4Y2hhbmdlRGlyZWN0bHlXWAcFBHBvb2wFCGFzc2V0SWRBBQhhc3NldElkQgUEYmFsQQUEYmFsQgUQYW1vdW50VG9rZW5Ub0dldAUPYXNzZXRUb2tlblRvR2V0ARJ3aXRoZHJhd0Ftb3VudENhbGMEBHBvb2wPdXNlckNhbldpdGhkcmF3BGRlYnQLYm9ycm93QXNzZXQECHBvb2xBZGRyCQEHQWRkcmVzcwEJANkEAQUEcG9vbAQFcFR5cGUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzCQCsAgIFBWtQb29sBQRwb29sAgxVbmtub3duIHBvb2wEDSR0MDIxNjU3MjE3MzMJAQtnZXRQb29sRGF0YQIFCHBvb2xBZGRyBQVwVHlwZQQIYXNzZXRJZEEIBQ0kdDAyMTY1NzIxNzMzAl8xBAhhc3NldElkQggFDSR0MDIxNjU3MjE3MzMCXzIEBGJhbEEIBQ0kdDAyMTY1NzIxNzMzAl8zBARiYWxCCAUNJHQwMjE2NTcyMTczMwJfNAQHc2hhcmVJZAgFDSR0MDIxNjU3MjE3MzMCXzUEC2NCYWxBQmVmb3JlCQEOYWNjb3VudEJhbGFuY2UBCQEOYXNzZXRJZEZyb21TdHIBBQhhc3NldElkQQMJAAACBQtjQmFsQUJlZm9yZQULY0JhbEFCZWZvcmUEC2NCYWxCQmVmb3JlCQEOYWNjb3VudEJhbGFuY2UBCQEOYXNzZXRJZEZyb21TdHIBBQhhc3NldElkQgMJAAACBQtjQmFsQkJlZm9yZQULY0JhbEJCZWZvcmUEA2ludgMJAAACBQVwVHlwZQUHU0ZfUE9PTAkA/AcEBQhwb29sQWRkcgIMY2FsbEZ1bmN0aW9uCQDMCAICCHdpdGhkcmF3CQDMCAIJAMwIAgkApAMBBQ91c2VyQ2FuV2l0aGRyYXcFA25pbAUDbmlsBQNuaWwDCQAAAgUFcFR5cGUFB1dYX1BPT0wJAPwHBAUIcG9vbEFkZHICDXVuc3Rha2VBbmRHZXQJAMwIAgUPdXNlckNhbldpdGhkcmF3BQNuaWwFA25pbAkAAgECE1dyb25nIHBvc2l0aW9uIHR5cGUDCQAAAgUDaW52BQNpbnYECmNCYWxBQWZ0ZXIJAQ5hY2NvdW50QmFsYW5jZQEJAQ5hc3NldElkRnJvbVN0cgEFCGFzc2V0SWRBBApjQmFsQkFmdGVyCQEOYWNjb3VudEJhbGFuY2UBCQEOYXNzZXRJZEZyb21TdHIBBQhhc3NldElkQgQNJHQwMjIyNDUyMjMzNAkAlAoCCQBlAgUKY0JhbEFBZnRlcgULY0JhbEFCZWZvcmUJAGUCBQpjQmFsQkFmdGVyBQtjQmFsQkJlZm9yZQQNdG9rZW5zQW1vdW50QQgFDSR0MDIyMjQ1MjIzMzQCXzEEDXRva2Vuc0Ftb3VudEIIBQ0kdDAyMjI0NTIyMzM0Al8yBA0kdDAyMjMzNzIzMDMzAwkAZgIFBGRlYnQAAAQNYW1vdW50VG9HZXRFeAMDCQAAAgULYm9ycm93QXNzZXQFCGFzc2V0SWRBCQBmAgUEZGVidAUNdG9rZW5zQW1vdW50QQcJAGUCBQRkZWJ0BQ10b2tlbnNBbW91bnRBAwMJAAACBQtib3Jyb3dBc3NldAUIYXNzZXRJZEIJAGYCBQRkZWJ0BQ10b2tlbnNBbW91bnRCBwkAZQIFBGRlYnQFDXRva2Vuc0Ftb3VudEIAAAQFZXhJbnYDCQBmAgUNYW1vdW50VG9HZXRFeAAACQEQZXhjaGFuZ2VEaXJlY3RseQgFBXBUeXBlBQRwb29sBQhhc3NldElkQQUIYXNzZXRJZEIFBGJhbEEFBGJhbEIFDWFtb3VudFRvR2V0RXgFC2JvcnJvd0Fzc2V0AAADCQAAAgUFZXhJbnYFBWV4SW52BA9jQmFsQUFmdGVyUmVwYXkJAQ5hY2NvdW50QmFsYW5jZQEJAQ5hc3NldElkRnJvbVN0cgEFCGFzc2V0SWRBBA9jQmFsQkFmdGVyUmVwYXkJAQ5hY2NvdW50QmFsYW5jZQEJAQ5hc3NldElkRnJvbVN0cgEFCGFzc2V0SWRCCQCUCgIJAGUCBQ9jQmFsQUFmdGVyUmVwYXkFC2NCYWxBQmVmb3JlCQBlAgUPY0JhbEJBZnRlclJlcGF5BQtjQmFsQkJlZm9yZQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAlAoCBQ10b2tlbnNBbW91bnRBBQ10b2tlbnNBbW91bnRCBA10b1VzZXJBbW91bnRBCAUNJHQwMjIzMzcyMzAzMwJfMQQNdG9Vc2VyQW1vdW50QggFDSR0MDIyMzM3MjMwMzMCXzIJAJkKBwUNdG9Vc2VyQW1vdW50QQUIYXNzZXRJZEEFDXRvVXNlckFtb3VudEIFCGFzc2V0SWRCBQpjQmFsQUFmdGVyBQpjQmFsQkFmdGVyBQdzaGFyZUlkCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuARh1c2VyQ2FuV2l0aGRyYXdTaGFyZUNhbGMEBHVzZXIEcG9vbAVwb3NJZAhib3Jyb3dlZAQHcEFtb3VudAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFBHRoaXMJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfBQVwb3NJZAUNa1VzZXJQb3NpdGlvbgIQVW5rbm93biBwb3NpdGlvbgQMdXNlckludGVyZXN0CQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgIBXwUFcG9zSWQFFWtVc2VyUG9zaXRpb25JbnRlcmVzdAQMcG9vbEludGVyZXN0AwUIYm9ycm93ZWQJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgUEcG9vbAURa1Bvb2xJbnRlcmVzdExvYW4JARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgUEcG9vbAUTa1Bvb2xJbnRlcmVzdE5vTG9hbgkAZAIFB3BBbW91bnQJAGsDBQdwQW1vdW50CQBlAgUMcG9vbEludGVyZXN0BQx1c2VySW50ZXJlc3QFB1NDQUxFMTABDndpdGhkcmF3VG9Vc2VyBAR1c2VyBHBvb2wFcG9zSWQIc3RvcExvc3MEB3BBbW91bnQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgIBXwUFcG9zSWQFDWtVc2VyUG9zaXRpb24CEFVua25vd24gcG9zaXRpb24EDHVzZXJJbnRlcmVzdAkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXICAV8FBXBvc0lkBRVrVXNlclBvc2l0aW9uSW50ZXJlc3QEDGJvcnJvd0Ftb3VudAkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXICAV8FBXBvc0lkBRFrVXNlckJvcnJvd0Ftb3VudAQPdXNlckNhbldpdGhkcmF3CQEYdXNlckNhbldpdGhkcmF3U2hhcmVDYWxjBAUEdXNlcgUEcG9vbAUFcG9zSWQJAGYCBQxib3Jyb3dBbW91bnQAAAQOcG9vbFRvdGFsU2hhcmUJARFnZXRQb29sVG90YWxTaGFyZQEFBHBvb2wECHVzZXJBZGRyCQEHQWRkcmVzcwEJANkEAQUEdXNlcgQLYm9ycm93QXNzZXQJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfBQVwb3NJZAUSa1VzZXJCb3Jyb3dBc3NldElkBARkZWJ0AwkAZgIFDGJvcnJvd0Ftb3VudAAACgABQAkA/AcECQEOZ2V0TGVuZFNydkFkZHIAAgxnZXRBc3NldERlYnQJAMwIAgcJAMwIAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfBQVwb3NJZAkAzAgCBQtib3Jyb3dBc3NldAUDbmlsBQNuaWwDCQABAgUBQAIDSW50BQFACQACAQkArAICCQADAQUBQAIYIGNvdWxkbid0IGJlIGNhc3QgdG8gSW50AAAEDSR0MDI0NTI0MjQ2NzcJARJ3aXRoZHJhd0Ftb3VudENhbGMEBQRwb29sBQ91c2VyQ2FuV2l0aGRyYXcFBGRlYnQFC2JvcnJvd0Fzc2V0AwkAAAIFDSR0MDI0NTI0MjQ2NzcFDSR0MDI0NTI0MjQ2NzcEB3NoYXJlSWQIBQ0kdDAyNDUyNDI0Njc3Al83BApjQmFsQkFmdGVyCAUNJHQwMjQ1MjQyNDY3NwJfNgQKY0JhbEFBZnRlcggFDSR0MDI0NTI0MjQ2NzcCXzUECGFzc2V0SWRCCAUNJHQwMjQ1MjQyNDY3NwJfNAQNdG9Vc2VyQW1vdW50QggFDSR0MDI0NTI0MjQ2NzcCXzMECGFzc2V0SWRBCAUNJHQwMjQ1MjQyNDY3NwJfMgQNdG9Vc2VyQW1vdW50QQgFDSR0MDI0NTI0MjQ2NzcCXzEEC2Nsb3NlRGJ0SW52AwkAZgIFBGRlYnQAAAkA/AcECQEOZ2V0TGVuZFNydkFkZHIAAghyZXBheUZvcgkAzAgCCQCsAgIJAKwCAgUEdXNlcgIBXwUFcG9zSWQFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBDmFzc2V0SWRGcm9tU3RyAQULYm9ycm93QXNzZXQFBGRlYnQFA25pbAAAAwkAAAIFC2Nsb3NlRGJ0SW52BQtjbG9zZURidEludgkAzggCCQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfBQVwb3NJZAUNa1VzZXJQb3NpdGlvbgkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgIBXwUFcG9zSWQFFWtVc2VyUG9zaXRpb25JbnRlcmVzdAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBQprUG9vbFRvdGFsCQBlAgUOcG9vbFRvdGFsU2hhcmUFD3VzZXJDYW5XaXRoZHJhdwkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQh1c2VyQWRkcgUNdG9Vc2VyQW1vdW50QQkBDmFzc2V0SWRGcm9tU3RyAQUIYXNzZXRJZEEJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUIdXNlckFkZHIFDXRvVXNlckFtb3VudEIJAQ5hc3NldElkRnJvbVN0cgEFCGFzc2V0SWRCBQNuaWwJAQ5nZXRDdXJzRW50cmllcwMFCGFzc2V0SWRBBQhhc3NldElkQgUHc2hhcmVJZAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgEMcGFyc2VSZXF1ZXN0AQlyZXF1ZXN0SWQEB3JlcXVlc3QJALUJAgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMJAKwCAgUJcmVxdWVzdElkBQprUmVxdWVzdElkCQCsAgICE05vIHJlcXVlc3Qgd2l0aCBpZCAFCXJlcXVlc3RJZAIBLAQEdXNlcgkAkQMCBQdyZXF1ZXN0AAAEBHBvb2wJAJEDAgUHcmVxdWVzdAABBARwbXRBCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHcmVxdWVzdAACBANBSWQJAJEDAgUHcmVxdWVzdAADBARwbXRCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHcmVxdWVzdAAEBANCSWQJAJEDAgUHcmVxdWVzdAAFBARiYWxBCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHcmVxdWVzdAAGBARiYWxCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHcmVxdWVzdAAHBAdzaGFyZUlkCQCRAwIFB3JlcXVlc3QACAQHYndBc3NldAkAkQMCBQdyZXF1ZXN0AAkECGJ3QW1vdW50CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHcmVxdWVzdAAKCQCdCgsFBHVzZXIFBHBvb2wFBHBtdEEFA0FJZAUEcG10QgUDQklkBQRiYWxBBQRiYWxCBQdzaGFyZUlkBQdid0Fzc2V0BQhid0Ftb3VudAEJdW5zdGFrZUxQBARwb29sBXBUeXBlB3NoYXJlSWQGYW1vdW50BA0kdDAyNTkzOTI2Mjk2AwkAAAIFBXBUeXBlBQdTRl9QT09MCQCVCgMJARBnZXRTRkZhcm1pbmdBZGRyAAITd2l0aGRyYXdTaGFyZVRva2VucwkAzAgCBQRwb29sCQDMCAIFBmFtb3VudAUDbmlsAwkAAAIFBXBUeXBlBQdXWF9QT09MCQCVCgMJARBnZXRXWEZhcm1pbmdBZGRyAQkBB0FkZHJlc3MBCQDZBAEFBHBvb2wCB3Vuc3Rha2UJAMwIAgUHc2hhcmVJZAkAzAgCBQZhbW91bnQFA25pbAkAAgECD1dyb25nIHBvb2wgdHlwZQQIZmFybUFkZHIIBQ0kdDAyNTkzOTI2Mjk2Al8xBAVmTmFtZQgFDSR0MDI1OTM5MjYyOTYCXzIEBnBhcmFtcwgFDSR0MDI1OTM5MjYyOTYCXzMEA2ludgkA/AcEBQhmYXJtQWRkcgUFZk5hbWUFBnBhcmFtcwUDbmlsAwkAAAIFA2ludgUDaW52BQZhbW91bnQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4SAWkBEXJlcGxlbmlzaEVWQUxPTkxZAwRwb29sCGxldmVyYWdlDWJvcnJvd0Fzc2V0SWQDAwkAZgIAZAUIbGV2ZXJhZ2UGCQBmAgUIbGV2ZXJhZ2UArAIJAAIBAh9MZXZlcmFnZSBjYW4ndCBiZSA8MTAwIGFuZCA+MzAwBAVwVHlwZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMJAKwCAgUFa1Bvb2wFBHBvb2wCElBvb2wgaXMgbm90IGluaXRlZAQNJHQwMjY2NzAyNjc2MAkBC2dldFBvb2xEYXRhAgkBB0FkZHJlc3MBCQDZBAEFBHBvb2wFBXBUeXBlBANBSWQIBQ0kdDAyNjY3MDI2NzYwAl8xBANCSWQIBQ0kdDAyNjY3MDI2NzYwAl8yBARiYWxBCAUNJHQwMjY2NzAyNjc2MAJfMwQEYmFsQggFDSR0MDI2NjcwMjY3NjACXzQEB3NoYXJlSWQIBQ0kdDAyNjY3MDI2NzYwAl81BA0kdDAyNjc2MzI3NDAwAwkAAAIJAJADAQgFAWkIcGF5bWVudHMAAgMJAQIhPQIJAQxhc3NldElkVG9TdHIBCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQFA0FJZAkAAgECFVdyb25nIHBheW1lbnQgYXNzZXQgQQMJAQIhPQIJAQxhc3NldElkVG9TdHIBCAkAkQMCCAUBaQhwYXltZW50cwABB2Fzc2V0SWQFA0JJZAkAAgECFVdyb25nIHBheW1lbnQgYXNzZXQgQgkAlgoECAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAUDQUlkCAkAkQMCCAUBaQhwYXltZW50cwABBmFtb3VudAUDQklkAwkAAAIJAJADAQgFAWkIcGF5bWVudHMAAQMJAAACCQEMYXNzZXRJZFRvU3RyAQgJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBQNBSWQJAJYKBAgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQFA0FJZAAABQNCSWQDCQAAAgkBDGFzc2V0SWRUb1N0cgEICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAUDQklkCQCWCgQAAAUDQUlkCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAUDQklkCQACAQINV3JvbmcgcGF5bWVudAkAAgECHE9uZSBvciB0d28gcGF5bWVudHMgZXhwZWN0ZWQEBHBtdEEIBQ0kdDAyNjc2MzI3NDAwAl8xBAlwbXRBc3NldEEIBQ0kdDAyNjc2MzI3NDAwAl8yBARwbXRCCAUNJHQwMjY3NjMyNzQwMAJfMwQJcG10QXNzZXRCCAUNJHQwMjY3NjMyNzQwMAJfNAQNJHQwMjc0MDMyODg1NAMJAGYCBQhsZXZlcmFnZQBkBAdkUHJpY2VBCAoAAUAJAPwHBAUPcHJpY2VPcmFjbGVBZGRyAglnZXRUV0FQNjAJAMwIAgUJcG10QXNzZXRBCQDMCAIHBQNuaWwFA25pbAMJAAECBQFAAgooSW50LCBJbnQpBQFACQACAQkArAICCQADAQUBQAIfIGNvdWxkbid0IGJlIGNhc3QgdG8gKEludCwgSW50KQJfMgQHZFByaWNlQggKAAFACQD8BwQFD3ByaWNlT3JhY2xlQWRkcgIJZ2V0VFdBUDYwCQDMCAIFCXBtdEFzc2V0QgkAzAgCBwUDbmlsBQNuaWwDCQABAgUBQAIKKEludCwgSW50KQUBQAkAAgEJAKwCAgkAAwEFAUACHyBjb3VsZG4ndCBiZSBjYXN0IHRvIChJbnQsIEludCkCXzIEDHBheWRJbkRvbGxhcgkAZAIJAGsDBQdkUHJpY2VBBQRwbXRBCQBsBgAKAAAJARBnZXRBc3NldERlY2ltYWxzAQUJcG10QXNzZXRBAAAAAAUERE9XTgkAawMFB2RQcmljZUIFBHBtdEIJAGwGAAoAAAkBEGdldEFzc2V0RGVjaW1hbHMBBQlwbXRBc3NldEIAAAAABQRET1dOBAxib3Jyb3dBbW91bnQJAGsDBQxwYXlkSW5Eb2xsYXIJAGUCBQhsZXZlcmFnZQBkAGQEB3JlcXVlc3QJALkJAgkAzAgCCQClCAEIBQFpBmNhbGxlcgkAzAgCBQRwb29sCQDMCAIJAKQDAQUEcG10QQkAzAgCBQlwbXRBc3NldEEJAMwIAgkApAMBBQRwbXRCCQDMCAIFCXBtdEFzc2V0QgkAzAgCCQCkAwEFBGJhbEEJAMwIAgkApAMBBQRiYWxCCQDMCAIFB3NoYXJlSWQJAMwIAgUNYm9ycm93QXNzZXRJZAkAzAgCCQCkAwEFDGJvcnJvd0Ftb3VudAkAzAgCCQCkAwEAAQUDbmlsAgEsBAxuZXdSZXF1ZXN0SWQKAAFACQD8BwQFBHRoaXMCEGNyZWF0ZU5ld1JlcXVlc3QJAMwIAgUHcmVxdWVzdAUDbmlsBQNuaWwDCQABAgUBQAIDSW50BQFACQACAQkArAICCQADAQUBQAIYIGNvdWxkbid0IGJlIGNhc3QgdG8gSW50AwkAAAIFDG5ld1JlcXVlc3RJZAUMbmV3UmVxdWVzdElkBARhcmdzCQDMCAIJAKwCAgkArAICCQClCAEIBQFpBmNhbGxlcgIBXwkApAMBAAEJAMwIAgUHc2hhcmVJZAkAzAgCBQ1ib3Jyb3dBc3NldElkCQDMCAIFDGJvcnJvd0Ftb3VudAkAzAgCCQClCAEFBHRoaXMJAMwIAgIZcmVwbGVuaXNoRnJvbUxhbmRFVkFMT05MWQkAzAgCCQCkAwEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgUMbmV3UmVxdWVzdElkAhhDYW4ndCBjcmVhdGUgbmV3IHJlcXVlc3QFA25pbAQDaW52CQD9BwQJAQ5nZXRMZW5kU3J2QWRkcgACDWZsYXNoUG9zaXRpb24FBGFyZ3MFA25pbAMJAAACBQNpbnYFA2ludgkAlAoCCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzAhVFVkFMT05MWV9TVEFLRURBTU9VTlQFDGJvcnJvd0Ftb3VudAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAlAoCCAkBD3JlcGxlbmlzaEJ5VHlwZQoFBXBUeXBlBQRwb29sBQtOT19MT0FOX0ZFRQUEcG10QQUDQUlkBQRwbXRCBQNCSWQFBGJhbEEFBGJhbEIFB3NoYXJlSWQCXzEAAAQKdXNlclN0YWtlZAgFDSR0MDI3NDAzMjg4NTQCXzEEDGJvcnJvd0Ftb3VudAgFDSR0MDI3NDAzMjg4NTQCXzIEDSR0MDI4ODU4MjkwMjUJARJ3aXRoZHJhd0Ftb3VudENhbGMEBQRwb29sBQp1c2VyU3Rha2VkBQxib3Jyb3dBbW91bnQFDWJvcnJvd0Fzc2V0SWQDCQAAAgUNJHQwMjg4NTgyOTAyNQUNJHQwMjg4NTgyOTAyNQQTdXNlckdldEJCZWZvcmVSZXBheQgFDSR0MDI4ODU4MjkwMjUCXzYEE3VzZXJHZXRBQmVmb3JlUmVwYXkIBQ0kdDAyODg1ODI5MDI1Al81BAhhc3NldElkQggFDSR0MDI4ODU4MjkwMjUCXzQEDXRvVXNlckFtb3VudEIIBQ0kdDAyODg1ODI5MDI1Al8zBAhhc3NldElkQQgFDSR0MDI4ODU4MjkwMjUCXzIEDXRvVXNlckFtb3VudEEIBQ0kdDAyODg1ODI5MDI1Al8xBA0kdDAyOTAyODI5MTQzCQELZ2V0UG9vbERhdGECCQEHQWRkcmVzcwEJANkEAQUEcG9vbAUFcFR5cGUECEFJZEFmdGVyCAUNJHQwMjkwMjgyOTE0MwJfMQQIQklkQWZ0ZXIIBQ0kdDAyOTAyODI5MTQzAl8yBAliYWxBQWZ0ZXIIBQ0kdDAyOTAyODI5MTQzAl8zBAliYWxCQWZ0ZXIIBQ0kdDAyOTAyODI5MTQzAl80BAxzaGFyZUlkQWZ0ZXIIBQ0kdDAyOTAyODI5MTQzAl81BAtyYXRpb0JlZm9yZQkAawMFBGJhbEIFBlNDQUxFOAUEYmFsQQQKcmF0aW9BZnRlcgkAawMFCWJhbEJBZnRlcgUGU0NBTEU4BQliYWxBQWZ0ZXIEBmltcGFjdAkAZQIFBlNDQUxFOAkAawMFC3JhdGlvQmVmb3JlBQZTQ0FMRTgFCnJhdGlvQWZ0ZXIECGltY2F0TW9kAwkAZgIAAAUGaW1wYWN0CQBoAgUGaW1wYWN0AP///////////wEFBmltcGFjdAkAlAoCBQNuaWwJAMwIAgUTdXNlckdldEFCZWZvcmVSZXBheQkAzAgCBRN1c2VyR2V0QkJlZm9yZVJlcGF5CQDMCAIFCGltY2F0TW9kBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEZcmVwbGVuaXNoRnJvbUxhbmRFVkFMT05MWQEJcmVxdWVzdElkBA0kdDAyOTUxMzI5NjE3CQEMcGFyc2VSZXF1ZXN0AQUJcmVxdWVzdElkBAR1c2VyCAUNJHQwMjk1MTMyOTYxNwJfMQQEcG9vbAgFDSR0MDI5NTEzMjk2MTcCXzIEBHBtdEEIBQ0kdDAyOTUxMzI5NjE3Al8zBANBSWQIBQ0kdDAyOTUxMzI5NjE3Al80BARwbXRCCAUNJHQwMjk1MTMyOTYxNwJfNQQDQklkCAUNJHQwMjk1MTMyOTYxNwJfNgQEYmFsQQgFDSR0MDI5NTEzMjk2MTcCXzcEBGJhbEIIBQ0kdDAyOTUxMzI5NjE3Al84BAdzaGFyZUlkCAUNJHQwMjk1MTMyOTYxNwJfOQQHYndBc3NldAgFDSR0MDI5NTEzMjk2MTcDXzEwBAhid0Ftb3VudAgFDSR0MDI5NTEzMjk2MTcDXzExAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQISV3JvbmcgcGF5bWVudCBzaXplAwMJAQIhPQIJAQxhc3NldElkVG9TdHIBCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQFB2J3QXNzZXQGCQECIT0CCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAUIYndBbW91bnQJAAIBAg1Xcm9uZyBwYXltZW50BA0kdDAyOTgwNzI5OTMxAwkAAAIFA0FJZAUHYndBc3NldAkAlAoCCQBkAgUEcG10QQgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQFBHBtdEIJAJQKAgUEcG10QQkAZAIFBHBtdEIICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BAdwbXRBbGxBCAUNJHQwMjk4MDcyOTkzMQJfMQQHcG10QWxsQggFDSR0MDI5ODA3Mjk5MzECXzIEBXBUeXBlCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwkArAICBQVrUG9vbAUEcG9vbAIMVW5rbm93biBwb29sBA0kdDAzMDAxMzMwMTIyCQEPcmVwbGVuaXNoQnlUeXBlCgUFcFR5cGUFBHBvb2wFCExPQU5fRkVFBQRwbXRBBQNBSWQFBHBtdEIFA0JJZAUEYmFsQQUEYmFsQgUHc2hhcmVJZAQKdXNlclN0YWtlZAgFDSR0MDMwMDEzMzAxMjICXzEEB2F4bHlGZWUIBQ0kdDAzMDAxMzMwMTIyAl8yCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQICFUVWQUxPTkxZX1NUQUtFREFNT1VOVAUKdXNlclN0YWtlZAUDbmlsBQp1c2VyU3Rha2VkAWkBGmdldFNoYXJlQXNzZXRQcmljZVJFQURPTkxZAQdzaGFyZUlkBAtzaGFyZVByaWNlcwkBDWdldFNoYXJlUHJpY2UBCQDMCAIFB3NoYXJlSWQFA25pbAkAlAoCBQNuaWwJAJEDAgULc2hhcmVQcmljZXMAAAFpASJnZXRVc2VyUG9zaXRpb25TaGFyZUFtb3VudFJFQURPTkxZAgR1c2VyBnBvc051bQQEcG9vbAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMJAKwCAgkArAICCQCsAgIFBHVzZXICAV8FBnBvc051bQURa1VzZXJQb3NpdGlvblBvb2wCEFVua25vd24gcG9zaXRpb24EDGJvcnJvd0Ftb3VudAkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXICAV8FBnBvc051bQURa1VzZXJCb3Jyb3dBbW91bnQED3VzZXJDYW5XaXRoZHJhdwkBGHVzZXJDYW5XaXRoZHJhd1NoYXJlQ2FsYwQFBHVzZXIFBHBvb2wFBnBvc051bQkAZgIFDGJvcnJvd0Ftb3VudAAACQCUCgIFA25pbAUPdXNlckNhbldpdGhkcmF3AWkBCXJlcGxlbmlzaAMEcG9vbAhsZXZlcmFnZQ1ib3Jyb3dBc3NldElkAwMJAGYCAGQFCGxldmVyYWdlBgkAZgIFCGxldmVyYWdlAKwCCQACAQIfTGV2ZXJhZ2UgY2FuJ3QgYmUgPDEwMCBhbmQgPjMwMAQFcFR5cGUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzCQCsAgIFBWtQb29sBQRwb29sAhJQb29sIGlzIG5vdCBpbml0ZWQEDSR0MDMxMDM4MzExMjgJAQtnZXRQb29sRGF0YQIJAQdBZGRyZXNzAQkA2QQBBQRwb29sBQVwVHlwZQQDQUlkCAUNJHQwMzEwMzgzMTEyOAJfMQQDQklkCAUNJHQwMzEwMzgzMTEyOAJfMgQEYmFsQQgFDSR0MDMxMDM4MzExMjgCXzMEBGJhbEIIBQ0kdDAzMTAzODMxMTI4Al80BAdzaGFyZUlkCAUNJHQwMzEwMzgzMTEyOAJfNQQNJHQwMzExMzEzMTc2OAMJAAACCQCQAwEIBQFpCHBheW1lbnRzAAIDCQECIT0CCQEMYXNzZXRJZFRvU3RyAQgJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBQNBSWQJAAIBAhVXcm9uZyBwYXltZW50IGFzc2V0IEEDCQECIT0CCQEMYXNzZXRJZFRvU3RyAQgJAJEDAggFAWkIcGF5bWVudHMAAQdhc3NldElkBQNCSWQJAAIBAhVXcm9uZyBwYXltZW50IGFzc2V0IEIJAJYKBAgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQFA0FJZAgJAJEDAggFAWkIcGF5bWVudHMAAQZhbW91bnQFA0JJZAMJAAACCQCQAwEIBQFpCHBheW1lbnRzAAEDCQAAAgkBDGFzc2V0SWRUb1N0cgEICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAUDQUlkCQCWCgQICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BQNBSWQAAAUDQklkAwkAAAIJAQxhc3NldElkVG9TdHIBCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQFA0JJZAkAlgoEAAAFA0FJZAgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQFA0JJZAkAAgECDVdyb25nIHBheW1lbnQJAAIBAhxPbmUgb3IgdHdvIHBheW1lbnRzIGV4cGVjdGVkBARwbXRBCAUNJHQwMzExMzEzMTc2OAJfMQQJcG10QXNzZXRBCAUNJHQwMzExMzEzMTc2OAJfMgQEcG10QggFDSR0MDMxMTMxMzE3NjgCXzMECXBtdEFzc2V0QggFDSR0MDMxMTMxMzE3NjgCXzQECW5ld1Bvc051bQkBGGdldE5ld1VzZXJQb3NpdGlvbk51bWJlcgIFBHBvb2wJAKUIAQgFAWkGY2FsbGVyAwkAZgIFCGxldmVyYWdlAGQEB2RQcmljZUEICgABQAkA/AcEBQ9wcmljZU9yYWNsZUFkZHICCWdldFRXQVA2MAkAzAgCBQlwbXRBc3NldEEJAMwIAgcFA25pbAUDbmlsAwkAAQIFAUACCihJbnQsIEludCkFAUAJAAIBCQCsAgIJAAMBBQFAAh8gY291bGRuJ3QgYmUgY2FzdCB0byAoSW50LCBJbnQpAl8yBAdkUHJpY2VCCAoAAUAJAPwHBAUPcHJpY2VPcmFjbGVBZGRyAglnZXRUV0FQNjAJAMwIAgUJcG10QXNzZXRCCQDMCAIHBQNuaWwFA25pbAMJAAECBQFAAgooSW50LCBJbnQpBQFACQACAQkArAICCQADAQUBQAIfIGNvdWxkbid0IGJlIGNhc3QgdG8gKEludCwgSW50KQJfMgQMcGF5ZEluRG9sbGFyCQBkAgkAawMFB2RQcmljZUEFBHBtdEEJAGwGAAoAAAkBEGdldEFzc2V0RGVjaW1hbHMBBQlwbXRBc3NldEEAAAAABQRET1dOCQBrAwUHZFByaWNlQgUEcG10QgkAbAYACgAACQEQZ2V0QXNzZXREZWNpbWFscwEFCXBtdEFzc2V0QgAAAAAFBERPV04EDGJvcnJvd0Ftb3VudAkAawMFDHBheWRJbkRvbGxhcgkAZQIFCGxldmVyYWdlAGQAZAQHcmVxdWVzdAkAuQkCCQDMCAIJAKUIAQgFAWkGY2FsbGVyCQDMCAIFBHBvb2wJAMwIAgkApAMBBQRwbXRBCQDMCAIFCXBtdEFzc2V0QQkAzAgCCQCkAwEFBHBtdEIJAMwIAgUJcG10QXNzZXRCCQDMCAIJAKQDAQUEYmFsQQkAzAgCCQCkAwEFBGJhbEIJAMwIAgUHc2hhcmVJZAkAzAgCBQ1ib3Jyb3dBc3NldElkCQDMCAIJAKQDAQUMYm9ycm93QW1vdW50BQNuaWwCASwEDG5ld1JlcXVlc3RJZAoAAUAJAPwHBAUEdGhpcwIQY3JlYXRlTmV3UmVxdWVzdAkAzAgCBQdyZXF1ZXN0BQNuaWwFA25pbAMJAAECBQFAAgNJbnQFAUAJAAIBCQCsAgIJAAMBBQFAAhggY291bGRuJ3QgYmUgY2FzdCB0byBJbnQDCQAAAgUMbmV3UmVxdWVzdElkBQxuZXdSZXF1ZXN0SWQEBGFyZ3MJAMwIAgkArAICCQCsAgIJAKUIAQgFAWkGY2FsbGVyAgFfCQCkAwEFCW5ld1Bvc051bQkAzAgCBQdzaGFyZUlkCQDMCAIFDWJvcnJvd0Fzc2V0SWQJAMwIAgUMYm9ycm93QW1vdW50CQDMCAIJAKUIAQUEdGhpcwkAzAgCAhFyZXBsZW5pc2hGcm9tTGFuZAkAzAgCCQCkAwEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgUMbmV3UmVxdWVzdElkAhhDYW4ndCBjcmVhdGUgbmV3IHJlcXVlc3QFA25pbAQDaW52CQD9BwQJAQ5nZXRMZW5kU3J2QWRkcgACDWZsYXNoUG9zaXRpb24FBGFyZ3MFA25pbAMJAAACBQNpbnYFA2ludgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBA0kdDAzMzA2NTMzMTc3CQEPcmVwbGVuaXNoQnlUeXBlCgUFcFR5cGUFBHBvb2wFC05PX0xPQU5fRkVFBQRwbXRBBQNBSWQFBHBtdEIFA0JJZAUEYmFsQQUEYmFsQgUHc2hhcmVJZAQKdXNlclN0YWtlZAgFDSR0MDMzMDY1MzMxNzcCXzEEB2F4bHlGZWUIBQ0kdDAzMzA2NTMzMTc3Al8yCQDOCAIJARByZXBsZW5pc2hFbnRyaWVzCAUEcG9vbAkApQgBCAUBaQZjYWxsZXIFCnVzZXJTdGFrZWQFB2F4bHlGZWUFCW5ld1Bvc051bQUHc2hhcmVJZAUFcFR5cGUHCQEOZ2V0Q3Vyc0VudHJpZXMDBQNBSWQFA0JJZAUHc2hhcmVJZAFpARFyZXBsZW5pc2hGcm9tTGFuZAEJcmVxdWVzdElkBA0kdDAzMzM4ODMzNDkyCQEMcGFyc2VSZXF1ZXN0AQUJcmVxdWVzdElkBAR1c2VyCAUNJHQwMzMzODgzMzQ5MgJfMQQEcG9vbAgFDSR0MDMzMzg4MzM0OTICXzIEBHBtdEEIBQ0kdDAzMzM4ODMzNDkyAl8zBANBSWQIBQ0kdDAzMzM4ODMzNDkyAl80BARwbXRCCAUNJHQwMzMzODgzMzQ5MgJfNQQDQklkCAUNJHQwMzMzODgzMzQ5MgJfNgQEYmFsQQgFDSR0MDMzMzg4MzM0OTICXzcEBGJhbEIIBQ0kdDAzMzM4ODMzNDkyAl84BAdzaGFyZUlkCAUNJHQwMzMzODgzMzQ5MgJfOQQHYndBc3NldAgFDSR0MDMzMzg4MzM0OTIDXzEwBAhid0Ftb3VudAgFDSR0MDMzMzg4MzM0OTIDXzExAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQISV3JvbmcgcGF5bWVudCBzaXplAwMJAQIhPQIJAQxhc3NldElkVG9TdHIBCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQFB2J3QXNzZXQGCQECIT0CCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAUIYndBbW91bnQJAAIBAg1Xcm9uZyBwYXltZW50BA0kdDAzMzY4MjMzODA2AwkAAAIFA0FJZAUHYndBc3NldAkAlAoCCQBkAgUEcG10QQgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQFBHBtdEIJAJQKAgUEcG10QQkAZAIFBHBtdEIICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BAdwbXRBbGxBCAUNJHQwMzM2ODIzMzgwNgJfMQQHcG10QWxsQggFDSR0MDMzNjgyMzM4MDYCXzIEBXBUeXBlCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwkArAICBQVrUG9vbAUEcG9vbAIMVW5rbm93biBwb29sBA0kdDAzMzg4ODMzOTk3CQEPcmVwbGVuaXNoQnlUeXBlCgUFcFR5cGUFBHBvb2wFCExPQU5fRkVFBQRwbXRBBQNBSWQFBHBtdEIFA0JJZAUEYmFsQQUEYmFsQgUHc2hhcmVJZAQKdXNlclN0YWtlZAgFDSR0MDMzODg4MzM5OTcCXzEEB2F4bHlGZWUIBQ0kdDAzMzg4ODMzOTk3Al8yBAZwb3NOdW0JARhnZXROZXdVc2VyUG9zaXRpb25OdW1iZXICBQRwb29sCQClCAEIBQFpBmNhbGxlcgQNYm9ycm93RW50cmllcwkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXICAV8JAKQDAQUGcG9zTnVtBRFrVXNlckJvcnJvd0Ftb3VudAUIYndBbW91bnQJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXICAV8JAKQDAQUGcG9zTnVtBRJrVXNlckJvcnJvd0Fzc2V0SWQFB2J3QXNzZXQFA25pbAQHZW50cmllcwkBEHJlcGxlbmlzaEVudHJpZXMIBQRwb29sBQR1c2VyBQp1c2VyU3Rha2VkBQdheGx5RmVlBQZwb3NOdW0FB3NoYXJlSWQFBXBUeXBlBgkAlAoCCQDNCAIJAM4IAgkAzggCBQdlbnRyaWVzCQEOZ2V0Q3Vyc0VudHJpZXMDBQNBSWQFA0JJZAUHc2hhcmVJZAUNYm9ycm93RW50cmllcwkBC0RlbGV0ZUVudHJ5AQkArAICBQlyZXF1ZXN0SWQFCmtSZXF1ZXN0SWQFCnVzZXJTdGFrZWQBaQEId2l0aGRyYXcCBHBvb2wFcG9zSWQJAQ53aXRoZHJhd1RvVXNlcgQJAKUIAQgFAWkGY2FsbGVyBQRwb29sCQCkAwEFBXBvc0lkBwFpARRjcmVhdGVVcGRhdGVTdG9wTG9zcwQFcG9zSWQGcG9vbElkB2Fzc2V0SWQFcHJpY2UEEHRva2VuT3JhY2xlUHJpY2UICgABQAkA/AcEBQ9wcmljZU9yYWNsZUFkZHICCWdldFRXQVA2MAkAzAgCBQdhc3NldElkCQDMCAIHBQNuaWwFA25pbAMJAAECBQFAAgooSW50LCBJbnQpBQFACQACAQkArAICCQADAQUBQAIfIGNvdWxkbid0IGJlIGNhc3QgdG8gKEludCwgSW50KQJfMQMJAQEhAQkBCWlzRGVmaW5lZAEJAJoIAgUEdGhpcwkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFBnBvb2xJZAIBXwkApQgBCAUBaQZjYWxsZXICAV8JAKQDAQUFcG9zSWQFDWtVc2VyUG9zaXRpb24JAAIBAhpUaGVyZSBhcmUgbm8gdXNlciBwb3NpdGlvbgMJAGcCAAAFBXByaWNlCQACAQIcUHJpY2UgbXVzdCBiZSBncmVhdGVyIHRoYW4gMAMJAGYCBQVwcmljZQUQdG9rZW5PcmFjbGVQcmljZQkAAgECK1ByaWNlIG11c3QgYmUgbGVzcyB0aGFuIGN1cnJlbnQgdG9rZW4gcHJpY2UJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkApQgBCAUBaQZjYWxsZXICAV8JAKQDAQUFcG9zSWQCAV8FBnBvb2xJZAIBXwUHYXNzZXRJZAUNa1VzZXJTdG9wTG9zcwUFcHJpY2UFA25pbAFpAQ5kZWxldGVTdG9wTG9zcwMFcG9zSWQGcG9vbElkB2Fzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBCQCaCAIFBHRoaXMJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkApQgBCAUBaQZjYWxsZXICAV8JAKQDAQUFcG9zSWQCAV8FBnBvb2xJZAIBXwUHYXNzZXRJZAUNa1VzZXJTdG9wTG9zcwkAAgECCE5vIGVudHJ5CQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkApQgBCAUBaQZjYWxsZXICAV8JAKQDAQUFcG9zSWQCAV8FBnBvb2xJZAIBXwUHYXNzZXRJZAUNa1VzZXJTdG9wTG9zcwUDbmlsAWkBEGNyZWF0ZU5ld1JlcXVlc3QBBnBhcmFtcwkBC3ZhbHVlT3JFbHNlAgkBCmlzU2VsZkNhbGwBBQFpBAxuZXdSZXF1ZXN0SWQJAGQCCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFDGtSZXF1ZXN0SXRlcgAAAAEJAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKQDAQUMbmV3UmVxdWVzdElkBQprUmVxdWVzdElkBQZwYXJhbXMJAMwIAgkBDEludGVnZXJFbnRyeQIFDGtSZXF1ZXN0SXRlcgUMbmV3UmVxdWVzdElkBQNuaWwFDG5ld1JlcXVlc3RJZAFpAQhzdG9wTG9zcwQEdXNlcgVwb3NJZARwb29sB2Fzc2V0SWQEEHRva2VuT3JhY2xlUHJpY2UICgABQAkA/AcEBQ9wcmljZU9yYWNsZUFkZHICCWdldFRXQVA2MAkAzAgCBQdhc3NldElkCQDMCAIHBQNuaWwFA25pbAMJAAECBQFAAgooSW50LCBJbnQpBQFACQACAQkArAICCQADAQUBQAIfIGNvdWxkbid0IGJlIGNhc3QgdG8gKEludCwgSW50KQJfMQMJAQEhAQkBCWlzRGVmaW5lZAEJAJoIAgUEdGhpcwkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQR1c2VyAgFfCQCkAwEFBXBvc0lkAgFfBQRwb29sAgFfBQdhc3NldElkBQ1rVXNlclN0b3BMb3NzCQACAQIITm8gZW50cnkJAM0IAgkBDndpdGhkcmF3VG9Vc2VyBAkApQgBCAUBaQZjYWxsZXIFBHBvb2wJAKQDAQUFcG9zSWQGCQELRGVsZXRlRW50cnkBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFBHVzZXICAV8JAKQDAQUFcG9zSWQCAV8FBHBvb2wCAV8FB2Fzc2V0SWQFDWtVc2VyU3RvcExvc3MBaQEJbGlxdWlkYXRlAwR1c2VyBXBvc0lkD2xpcXVpZGF0ZUFtb3VudAQEcG9vbAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMJAKwCAgkArAICCQCsAgIFBHVzZXICAV8FBXBvc0lkBRFrVXNlclBvc2l0aW9uUG9vbAILbm8gcG9zaXRpb24EBXBUeXBlCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwkArAICBQVrUG9vbAUEcG9vbAISUG9vbCBpcyBub3QgaW5pdGVkBA0kdDAzNjc4MDM2ODcwCQELZ2V0UG9vbERhdGECCQEHQWRkcmVzcwEJANkEAQUEcG9vbAUFcFR5cGUEA0FJZAgFDSR0MDM2NzgwMzY4NzACXzEEA0JJZAgFDSR0MDM2NzgwMzY4NzACXzIEBGJhbEEIBQ0kdDAzNjc4MDM2ODcwAl8zBARiYWxCCAUNJHQwMzY3ODAzNjg3MAJfNAQHc2hhcmVJZAgFDSR0MDM2NzgwMzY4NzACXzUEBmFtb3VudAkBCXVuc3Rha2VMUAQFBHBvb2wFBXBUeXBlBQdzaGFyZUlkBQ9saXF1aWRhdGVBbW91bnQEDGJvcnJvd0Ftb3VudAkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXICAV8FBXBvc0lkBRFrVXNlckJvcnJvd0Ftb3VudAQLYm9ycm93QXNzZXQJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfBQVwb3NJZAUSa1VzZXJCb3Jyb3dBc3NldElkBA91c2VyQ2FuV2l0aGRyYXcJARh1c2VyQ2FuV2l0aGRyYXdTaGFyZUNhbGMEBQR1c2VyBQRwb29sBQVwb3NJZAkAZgIFDGJvcnJvd0Ftb3VudAAAAwkAZgIFDGJvcnJvd0Ftb3VudAAACQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgIBXwUFcG9zSWQFFWtVc2VyUG9zaXRpb25JbnRlcmVzdAkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkArAICBQRwb29sBRFrUG9vbEludGVyZXN0TG9hbgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBQ5rUG9vbFRvdGFsTG9hbgkAZQIJARlnZXRQb29sVG90YWxTaGFyZVdpdGhMb2FuAQUEcG9vbAUPbGlxdWlkYXRlQW1vdW50BQNuaWwJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXICAV8FBXBvc0lkBRVrVXNlclBvc2l0aW9uSW50ZXJlc3QJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgUEcG9vbAUTa1Bvb2xJbnRlcmVzdE5vTG9hbgUDbmlsCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHBvb2wFCmtQb29sVG90YWwJAGUCCQERZ2V0UG9vbFRvdGFsU2hhcmUBBQRwb29sBQ9saXF1aWRhdGVBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfBQVwb3NJZAUNa1VzZXJQb3NpdGlvbgkAZQIFD3VzZXJDYW5XaXRoZHJhdwUPbGlxdWlkYXRlQW1vdW50CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgUGYW1vdW50CQDZBAEFB3NoYXJlSWQFA25pbAFpARJjYXBpdGFsaXplRXhLZWVwZXIMBHBvb2wEdHlwZQl0b2tlblRvSWQQYW1vdW50VG9FeGNoYW5nZQVjbGFpbQlhbW91bnRzSW4JYWRkcmVzc2VzD2Fzc2V0c1RvUmVjZWl2ZQtlc3RSZWNlaXZlZBFzbGlwcGFnZVRvbGVyYW5jZQttaW5SZWNlaXZlZAdvcHRpb25zBA0kdDAzODIxMDM4NDA0AwUFY2xhaW0JAQtjbGFpbUZhcm1lZAIFBHR5cGUFBHBvb2wEDGNsYWltZWRBc3NldAMJAAACBQR0eXBlBQdTRl9QT09MBQZTV09QSUQFBFdYSUQJAJQKAgUQYW1vdW50VG9FeGNoYW5nZQUMY2xhaW1lZEFzc2V0BA1jbGFpbWVkQW1vdW50CAUNJHQwMzgyMTAzODQwNAJfMQQMY2xhaW1lZEFzc2V0CAUNJHQwMzgyMTAzODQwNAJfMgQPZXhjaGFuZ2VkQW1vdW50CQEOZXhjaGFuZ2VLZWVwZXIKBQl0b2tlblRvSWQFEGFtb3VudFRvRXhjaGFuZ2UFDGNsYWltZWRBc3NldAUJYW1vdW50c0luBQlhZGRyZXNzZXMFD2Fzc2V0c1RvUmVjZWl2ZQULZXN0UmVjZWl2ZWQFEXNsaXBwYWdlVG9sZXJhbmNlBQttaW5SZWNlaXZlZAUHb3B0aW9ucwQGY2hhbmdlCQBlAgUNY2xhaW1lZEFtb3VudAUQYW1vdW50VG9FeGNoYW5nZQQLY2hhbmdlRW50cnkDCQBmAgUGY2hhbmdlAAAJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAUOa1Bvb2xDYXBDaGFuZ2UJAGQCBQZjaGFuZ2UJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICBQRwb29sBQ5rUG9vbENhcENoYW5nZQAABQNuaWwFA25pbAkAzggCCQEKY2FwaXRhbGl6ZQQFBHBvb2wFBHR5cGUFCXRva2VuVG9JZAUPZXhjaGFuZ2VkQW1vdW50BQtjaGFuZ2VFbnRyeQFpARJjYXBpdGFsaXplRXhQdXp6bGUIBHBvb2wEdHlwZQl0b2tlblRvSWQQYW1vdW50VG9FeGNoYW5nZQVjbGFpbQlyb3V0ZXNTdHIMbWluVG9SZWNlaXZlB29wdGlvbnMEDSR0MDM5MDYxMzkyNTUDBQVjbGFpbQkBC2NsYWltRmFybWVkAgUEdHlwZQUEcG9vbAQMY2xhaW1lZEFzc2V0AwkAAAIFBHR5cGUFB1NGX1BPT0wFBlNXT1BJRAUEV1hJRAkAlAoCBRBhbW91bnRUb0V4Y2hhbmdlBQxjbGFpbWVkQXNzZXQEDWNsYWltZWRBbW91bnQIBQ0kdDAzOTA2MTM5MjU1Al8xBAxjbGFpbWVkQXNzZXQIBQ0kdDAzOTA2MTM5MjU1Al8yBA9leGNoYW5nZWRBbW91bnQJAQ5leGNoYW5nZVB1enpsZQYFCXRva2VuVG9JZAUQYW1vdW50VG9FeGNoYW5nZQUMY2xhaW1lZEFzc2V0BQlyb3V0ZXNTdHIFDG1pblRvUmVjZWl2ZQUHb3B0aW9ucwQGY2hhbmdlCQBlAgUNY2xhaW1lZEFtb3VudAUQYW1vdW50VG9FeGNoYW5nZQQLY2hhbmdlRW50cnkDCQBmAgUGY2hhbmdlAAAJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAUOa1Bvb2xDYXBDaGFuZ2UJAGQCBQZjaGFuZ2UJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICBQRwb29sBQ5rUG9vbENhcENoYW5nZQAABQNuaWwFA25pbAkAzggCCQEKY2FwaXRhbGl6ZQQFBHBvb2wFBHR5cGUFCXRva2VuVG9JZAUPZXhjaGFuZ2VkQW1vdW50BQtjaGFuZ2VFbnRyeQFpARJjYXBpdGFsaXplRXhTd29wRmkMBHBvb2wEdHlwZQl0b2tlblRvSWQQYW1vdW50VG9FeGNoYW5nZQVjbGFpbQpleGNoYW5nZXJzDmV4Y2hhbmdlcnNUeXBlBWFyZ3MxBWFyZ3MyEXJvdXRpbmdBc3NldHNLZXlzEm1pbkFtb3VudFRvUmVjZWl2ZQdvcHRpb25zBA0kdDAzOTk3ODQwMTcyAwUFY2xhaW0JAQtjbGFpbUZhcm1lZAIFBHR5cGUFBHBvb2wEDGNsYWltZWRBc3NldAMJAAACBQR0eXBlBQdTRl9QT09MBQZTV09QSUQFBFdYSUQJAJQKAgUQYW1vdW50VG9FeGNoYW5nZQUMY2xhaW1lZEFzc2V0BA1jbGFpbWVkQW1vdW50CAUNJHQwMzk5Nzg0MDE3MgJfMQQMY2xhaW1lZEFzc2V0CAUNJHQwMzk5Nzg0MDE3MgJfMgQPZXhjaGFuZ2VkQW1vdW50CQEOZXhjaGFuZ2VTd29wRmkKBQl0b2tlblRvSWQFEGFtb3VudFRvRXhjaGFuZ2UFDGNsYWltZWRBc3NldAUKZXhjaGFuZ2VycwUOZXhjaGFuZ2Vyc1R5cGUFBWFyZ3MxBQVhcmdzMgURcm91dGluZ0Fzc2V0c0tleXMFEm1pbkFtb3VudFRvUmVjZWl2ZQUHb3B0aW9ucwQGY2hhbmdlCQBlAgUNY2xhaW1lZEFtb3VudAUQYW1vdW50VG9FeGNoYW5nZQQLY2hhbmdlRW50cnkDCQBmAgUGY2hhbmdlAAAJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAUOa1Bvb2xDYXBDaGFuZ2UJAGQCBQZjaGFuZ2UJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICBQRwb29sBQ5rUG9vbENhcENoYW5nZQAABQNuaWwFA25pbAkAzggCCQEKY2FwaXRhbGl6ZQQFBHBvb2wFBHR5cGUFCXRva2VuVG9JZAUPZXhjaGFuZ2VkQW1vdW50BQtjaGFuZ2VFbnRyeQFpAQtpbml0TmV3UG9vbAgEdHlwZQhwb29sQWRkcgtpbkZlZU5vTG9hbglpbkZlZUxvYW4MY2FwRmVlTm9Mb2FuDmNhcEZlZVdpdGhMb2FuEXN0b3Bsb3NzRmVlTm9Mb2FuE3N0b3Bsb3NzRmVlV2l0aExvYW4DAwkBAiE9AgUEdHlwZQUHU0ZfUE9PTAkBAiE9AgUEdHlwZQUHV1hfUE9PTAcJAAIBAgpXcm9uZyB0eXBlBA0kdDA0MDg2NTQwOTU5CQELZ2V0UG9vbERhdGECCQEHQWRkcmVzcwEJANkEAQUIcG9vbEFkZHIFBHR5cGUEA2FJZAgFDSR0MDQwODY1NDA5NTkCXzEEA2JJZAgFDSR0MDQwODY1NDA5NTkCXzIEBGFCYWwIBQ0kdDA0MDg2NTQwOTU5Al8zBARiQmFsCAUNJHQwNDA4NjU0MDk1OQJfNAQHc2hhcmVJZAgFDSR0MDQwODY1NDA5NTkCXzUJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUIcG9vbEFkZHIFFWtBeGx5SW5GZWVXaXRob3V0TG9hbgULaW5GZWVOb0xvYW4JAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUIcG9vbEFkZHIFEmtBeGx5SW5GZWVXaXRoTG9hbgUJaW5GZWVMb2FuCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFCHBvb2xBZGRyBRFrQXhseU5vTG9hbkNhcEZlZQUMY2FwRmVlTm9Mb2FuCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFCHBvb2xBZGRyBRNrQXhseVdpdGhMb2FuQ2FwRmVlBQ5jYXBGZWVXaXRoTG9hbgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQhwb29sQWRkcgUWa0F4bHlTdG9wTG9zc05vTG9hbkZlZQURc3RvcGxvc3NGZWVOb0xvYW4JAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUIcG9vbEFkZHIFFGtBeGx5U3RvcExvc3NMb2FuRmVlBRNzdG9wbG9zc0ZlZVdpdGhMb2FuCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFCHBvb2xBZGRyBRFrUG9vbEludGVyZXN0TG9hbgAACQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFCHBvb2xBZGRyBRNrUG9vbEludGVyZXN0Tm9Mb2FuAAAJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICBQVrUG9vbAUIcG9vbEFkZHIFBHR5cGUJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICBQdzaGFyZUlkBQprU2hhcmVQb29sBQhwb29sQWRkcgUDbmlsAWkBDmNhcGl0YWxpemVUZXN0BARwb29sBXBUeXBlB3Rva2VuSWQLdG9rZW5BbW91bnQECHBvb2xBZGRyCQEHQWRkcmVzcwEJANkEAQUEcG9vbAQNJHQwNDE3NTU0MTgzNAkBC2dldFBvb2xEYXRhAgUIcG9vbEFkZHIFBXBUeXBlBANBSWQIBQ0kdDA0MTc1NTQxODM0Al8xBANCSWQIBQ0kdDA0MTc1NTQxODM0Al8yBARiYWxBCAUNJHQwNDE3NTU0MTgzNAJfMwQEYmFsQggFDSR0MDQxNzU1NDE4MzQCXzQEB3NoYXJlSWQIBQ0kdDA0MTc1NTQxODM0Al81BA0kdDA0MTgzNzQxOTE3AwkAAAIFB3Rva2VuSWQFA0FJZAkAlAoCBQt0b2tlbkFtb3VudAAACQCUCgIAAAULdG9rZW5BbW91bnQEBHBtdEEIBQ0kdDA0MTgzNzQxOTE3Al8xBARwbXRCCAUNJHQwNDE4Mzc0MTkxNwJfMgQNJHQwNDE5MjA0MjAyNAkBD3JlcGxlbmlzaEJ5VHlwZQoFBXBUeXBlBQRwb29sBQZOT19GRUUFBHBtdEEFA0FJZAUEcG10QgUDQklkBQRiYWxBBQRiYWxCBQdzaGFyZUlkBAxzdGFrZWRBbW91bnQIBQ0kdDA0MTkyMDQyMDI0Al8xBAJuZggFDSR0MDQxOTIwNDIwMjQCXzIEE2N1clBvb2xJbnRlcmVzdExvYW4JAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICBQRwb29sBRFrUG9vbEludGVyZXN0TG9hbgAABBVjdXJQb29sSW50ZXJlc3ROb0xvYW4JAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICBQRwb29sBRNrUG9vbEludGVyZXN0Tm9Mb2FuAAAEEHRvdGFsU2hhcmVBbW91bnQJARFnZXRQb29sVG90YWxTaGFyZQEFBHBvb2wEGHRvdGFsU2hhcmVBbW91bnRXaXRoTG9hbgkBGWdldFBvb2xUb3RhbFNoYXJlV2l0aExvYW4BBQRwb29sBAtsb2FuUGVyY2VudAkAawMFGHRvdGFsU2hhcmVBbW91bnRXaXRoTG9hbgUGU0NBTEU4BRB0b3RhbFNoYXJlQW1vdW50BApzdGFrZWRMb2FuCQBrAwUMc3Rha2VkQW1vdW50BQtsb2FuUGVyY2VudAUGU0NBTEU4BAxzdGFrZWROb0xvYW4JAGUCBQxzdGFrZWRBbW91bnQFCnN0YWtlZExvYW4ED25ld0ludGVyZXN0TG9hbgkAZAIFE2N1clBvb2xJbnRlcmVzdExvYW4JAGsDBQpzdGFrZWRMb2FuBQdTQ0FMRTEwBRh0b3RhbFNoYXJlQW1vdW50V2l0aExvYW4EEW5ld0ludGVyZXN0Tm9Mb2FuCQBkAgUVY3VyUG9vbEludGVyZXN0Tm9Mb2FuCQBrAwUMc3Rha2VkTm9Mb2FuBQdTQ0FMRTEwCQBlAgUQdG90YWxTaGFyZUFtb3VudAUYdG90YWxTaGFyZUFtb3VudFdpdGhMb2FuBAtheGx5RmVlTG9hbgkAawMFCnN0YWtlZExvYW4JAQpnZXRBeGx5RmVlAgUEcG9vbAUMQ0FQX0ZFRV9MT0FOBQpGRUVfU0NBTEU2BA1heGx5RmVlTm9Mb2FuCQBrAwUMc3Rha2VkTm9Mb2FuCQEKZ2V0QXhseUZlZQIFBHBvb2wFD0NBUF9GRUVfTk9fTE9BTgUKRkVFX1NDQUxFNgkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHBvb2wFEWtQb29sSW50ZXJlc3RMb2FuBQ9uZXdJbnRlcmVzdExvYW4JAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAUTa1Bvb2xJbnRlcmVzdE5vTG9hbgURbmV3SW50ZXJlc3ROb0xvYW4JAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAUKa1Bvb2xUb3RhbAkAZQIJAGUCCQBkAgUQdG90YWxTaGFyZUFtb3VudAUMc3Rha2VkQW1vdW50BQtheGx5RmVlTG9hbgUNYXhseUZlZU5vTG9hbgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBQ5rUG9vbFRvdGFsTG9hbgkAZQIJAGQCBRh0b3RhbFNoYXJlQW1vdW50V2l0aExvYW4FCnN0YWtlZExvYW4FC2F4bHlGZWVMb2FuCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFCG1vbmV5Qm94CQBkAgULYXhseUZlZUxvYW4FDWF4bHlGZWVOb0xvYW4JANkEAQUHc2hhcmVJZAUDbmlsCQEOZ2V0Q3Vyc0VudHJpZXMDBQNBSWQFA0JJZAUHc2hhcmVJZAFpAQ9jbGFpbUZhcm1lZFRlc3QCBHR5cGUEcG9vbAMJAAACBQR0eXBlBQdTRl9QT09MBAliYWxCZWZvcmUJAQ5hY2NvdW50QmFsYW5jZQEFBlNXT1BJRAMJAAACBQliYWxCZWZvcmUFCWJhbEJlZm9yZQQDaW52CQD8BwQJARBnZXRTRkZhcm1pbmdBZGRyAAIFY2xhaW0JAMwIAgUEcG9vbAUDbmlsBQNuaWwDCQAAAgUDaW52BQNpbnYECGJhbEFmdGVyCQEOYWNjb3VudEJhbGFuY2UBBQZTV09QSUQJAJQKAgUDbmlsCQCUCgIJAGUCBQhiYWxBZnRlcgUJYmFsQmVmb3JlBQZTV09QSUQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4DCQAAAgUEdHlwZQUHV1hfUE9PTAQJYmFsQmVmb3JlCQEOYWNjb3VudEJhbGFuY2UBBQRXWElEAwkAAAIFCWJhbEJlZm9yZQUJYmFsQmVmb3JlBANpbnYJAPwHBAkBEGdldFdYRmFybWluZ0FkZHIBCQEHQWRkcmVzcwEJANkEAQUEcG9vbAIHY2xhaW1XWAkAzAgCBQRwb29sBQNuaWwFA25pbAMJAAACBQNpbnYFA2ludgQIYmFsQWZ0ZXIJAQ5hY2NvdW50QmFsYW5jZQEFBFdYSUQJAJQKAgUDbmlsCQCUCgIJAGUCBQhiYWxBZnRlcgUJYmFsQmVmb3JlBQRXWElECQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIPV3JvbmcgcG9vbCB0eXBlAQJ0eAEGdmVyaWZ5AAkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAgFAnR4D3NlbmRlclB1YmxpY0tleUPgVsc=", "height": 2599073, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: ETtGC1P8ePAT56tYtpKM1n92zYeMTc6xxKMrnRp8CATv Next: 68dT47WUUScS9TySW4QnZK7i6Jt4CktNbH5sQZds1dM8 Diff:
OldNewDifferences
784784 }
785785
786786
787+func eb (ax,bb,aq,ec) = {
788+ let ed = if ((bb == a))
789+ then $Tuple3(aD(), "withdrawShareTokens", [ax, ec])
790+ else if ((bb == b))
791+ then $Tuple3(aE(Address(fromBase58String(ax))), "unstake", [aq, ec])
792+ else throw("Wrong pool type")
793+ let ee = ed._1
794+ let ef = ed._2
795+ let eg = ed._3
796+ let ci = invoke(ee, ef, eg, nil)
797+ if ((ci == ci))
798+ then ec
799+ else throw("Strict value is not equal to itself.")
800+ }
801+
802+
787803 @Callable(ad)
788-func replenishEVALONLY (ax,eb,ec) = if (if ((100 > eb))
804+func replenishEVALONLY (ax,eh,ei) = if (if ((100 > eh))
789805 then true
790- else (eb > 300))
806+ else (eh > 300))
791807 then throw("Leverage can't be <100 and >300")
792808 else {
793809 let bb = valueOrErrorMessage(getString(this, (L + ax)), "Pool is not inited")
794- let ed = at(Address(fromBase58String(ax)), bb)
795- let bV = ed._1
796- let bW = ed._2
797- let ar = ed._3
798- let as = ed._4
799- let aq = ed._5
800- let ee = if ((size(ad.payments) == 2))
810+ let ej = at(Address(fromBase58String(ax)), bb)
811+ let bV = ej._1
812+ let bW = ej._2
813+ let ar = ej._3
814+ let as = ej._4
815+ let aq = ej._5
816+ let ek = if ((size(ad.payments) == 2))
801817 then if ((aI(ad.payments[0].assetId) != bV))
802818 then throw("Wrong payment asset A")
803819 else if ((aI(ad.payments[1].assetId) != bW))
810826 then $Tuple4(0, bV, ad.payments[0].amount, bW)
811827 else throw("Wrong payment")
812828 else throw("One or two payments expected")
813- let bq = ee._1
814- let br = ee._2
815- let bs = ee._3
816- let bt = ee._4
817- let ef = if ((eb > 100))
829+ let bq = ek._1
830+ let br = ek._2
831+ let bs = ek._3
832+ let bt = ek._4
833+ let el = if ((eh > 100))
818834 then {
819835 let bf = ( let an = invoke(Y, "getTWAP60", [br, false], nil)
820836 if ($isInstanceOf(an, "(Int, Int)"))
824840 if ($isInstanceOf(an, "(Int, Int)"))
825841 then an
826842 else throw(($getType(an) + " couldn't be cast to (Int, Int)")))._2
827- let eg = (fraction(bf, bq, pow(10, 0, aK(br), 0, 0, DOWN)) + fraction(bg, bs, pow(10, 0, aK(bt), 0, 0, DOWN)))
828- let dR = fraction(eg, (eb - 100), 100)
829- let dY = makeString([toString(ad.caller), ax, toString(bq), br, toString(bs), bt, toString(ar), toString(as), aq, ec, toString(dR), toString(1)], ",")
830- let eh = {
843+ let em = (fraction(bf, bq, pow(10, 0, aK(br), 0, 0, DOWN)) + fraction(bg, bs, pow(10, 0, aK(bt), 0, 0, DOWN)))
844+ let dR = fraction(em, (eh - 100), 100)
845+ let dY = makeString([toString(ad.caller), ax, toString(bq), br, toString(bs), bt, toString(ar), toString(as), aq, ei, toString(dR), toString(1)], ",")
846+ let en = {
831847 let an = invoke(this, "createNewRequest", [dY], nil)
832848 if ($isInstanceOf(an, "Int"))
833849 then an
834850 else throw(($getType(an) + " couldn't be cast to Int"))
835851 }
836- if ((eh == eh))
852+ if ((en == en))
837853 then {
838- let ei = [((toString(ad.caller) + "_") + toString(1)), aq, ec, dR, toString(this), "replenishFromLandEVALONLY", toString(valueOrErrorMessage(eh, "Can't create new request"))]
839- let ci = reentrantInvoke(aH(), "flashPosition", ei, nil)
854+ let eo = [((toString(ad.caller) + "_") + toString(1)), aq, ei, dR, toString(this), "replenishFromLandEVALONLY", toString(valueOrErrorMessage(en, "Can't create new request"))]
855+ let ci = reentrantInvoke(aH(), "flashPosition", eo, nil)
840856 if ((ci == ci))
841857 then $Tuple2(getIntegerValue(this, "EVALONLY_STAKEDAMOUNT"), dR)
842858 else throw("Strict value is not equal to itself.")
844860 else throw("Strict value is not equal to itself.")
845861 }
846862 else $Tuple2(bU(bb, ax, h, bq, bV, bs, bW, ar, as, aq)._1, 0)
847- let ej = ef._1
848- let dR = ef._2
849- let ek = dq(ax, ej, dR, ec)
850- if ((ek == ek))
863+ let ep = el._1
864+ let dR = el._2
865+ let eq = dq(ax, ep, dR, ei)
866+ if ((eq == eq))
851867 then {
852- let el = ek._6
853- let em = ek._5
854- let da = ek._4
855- let dI = ek._3
856- let cZ = ek._2
857- let dH = ek._1
858- let en = at(Address(fromBase58String(ax)), bb)
859- let eo = en._1
860- let ep = en._2
861- let eq = en._3
862- let er = en._4
863- let es = en._5
864- let et = fraction(as, j, ar)
865- let eu = fraction(er, j, eq)
866- let ev = (j - fraction(et, j, eu))
867- let ew = if ((0 > ev))
868- then (ev * -1)
869- else ev
870- $Tuple2(nil, [em, el, ew])
868+ let er = eq._6
869+ let es = eq._5
870+ let da = eq._4
871+ let dI = eq._3
872+ let cZ = eq._2
873+ let dH = eq._1
874+ let et = at(Address(fromBase58String(ax)), bb)
875+ let eu = et._1
876+ let ev = et._2
877+ let ew = et._3
878+ let ex = et._4
879+ let ey = et._5
880+ let ez = fraction(as, j, ar)
881+ let eA = fraction(ex, j, ew)
882+ let eB = (j - fraction(ez, j, eA))
883+ let eC = if ((0 > eB))
884+ then (eB * -1)
885+ else eB
886+ $Tuple2(nil, [es, er, eC])
871887 }
872888 else throw("Strict value is not equal to itself.")
873889 }
876892
877893 @Callable(ad)
878894 func replenishFromLandEVALONLY (dX) = {
879- let ex = dW(dX)
880- let aA = ex._1
881- let ax = ex._2
882- let bq = ex._3
883- let bV = ex._4
884- let bs = ex._5
885- let bW = ex._6
886- let ar = ex._7
887- let as = ex._8
888- let aq = ex._9
889- let dZ = ex._10
890- let ea = ex._11
895+ let eD = dW(dX)
896+ let aA = eD._1
897+ let ax = eD._2
898+ let bq = eD._3
899+ let bV = eD._4
900+ let bs = eD._5
901+ let bW = eD._6
902+ let ar = eD._7
903+ let as = eD._8
904+ let aq = eD._9
905+ let dZ = eD._10
906+ let ea = eD._11
891907 if ((size(ad.payments) != 1))
892908 then throw("Wrong payment size")
893909 else if (if ((aI(ad.payments[0].assetId) != dZ))
895911 else (ad.payments[0].amount != ea))
896912 then throw("Wrong payment")
897913 else {
898- let ey = if ((bV == dZ))
914+ let eE = if ((bV == dZ))
899915 then $Tuple2((bq + ad.payments[0].amount), bs)
900916 else $Tuple2(bq, (bs + ad.payments[0].amount))
901- let ez = ey._1
902- let eA = ey._2
917+ let eF = eE._1
918+ let eG = eE._2
903919 let bb = valueOrErrorMessage(getString(this, (L + ax)), "Unknown pool")
904- let eB = bU(bb, ax, g, bq, bV, bs, bW, ar, as, aq)
905- let ej = eB._1
906- let eC = eB._2
907- $Tuple2([IntegerEntry("EVALONLY_STAKEDAMOUNT", ej)], ej)
920+ let eH = bU(bb, ax, g, bq, bV, bs, bW, ar, as, aq)
921+ let ep = eH._1
922+ let eI = eH._2
923+ $Tuple2([IntegerEntry("EVALONLY_STAKEDAMOUNT", ep)], ep)
908924 }
909925 }
910926
912928
913929 @Callable(ad)
914930 func getShareAssetPriceREADONLY (aq) = {
915- let eD = aZ([aq])
916- $Tuple2(nil, eD[0])
931+ let eJ = aZ([aq])
932+ $Tuple2(nil, eJ[0])
917933 }
918934
919935
929945
930946
931947 @Callable(ad)
932-func replenish (ax,eb,ec) = if (if ((100 > eb))
948+func replenish (ax,eh,ei) = if (if ((100 > eh))
933949 then true
934- else (eb > 300))
950+ else (eh > 300))
935951 then throw("Leverage can't be <100 and >300")
936952 else {
937953 let bb = valueOrErrorMessage(getString(this, (L + ax)), "Pool is not inited")
938- let eE = at(Address(fromBase58String(ax)), bb)
939- let bV = eE._1
940- let bW = eE._2
941- let ar = eE._3
942- let as = eE._4
943- let aq = eE._5
944- let eF = if ((size(ad.payments) == 2))
954+ let eK = at(Address(fromBase58String(ax)), bb)
955+ let bV = eK._1
956+ let bW = eK._2
957+ let ar = eK._3
958+ let as = eK._4
959+ let aq = eK._5
960+ let eL = if ((size(ad.payments) == 2))
945961 then if ((aI(ad.payments[0].assetId) != bV))
946962 then throw("Wrong payment asset A")
947963 else if ((aI(ad.payments[1].assetId) != bW))
954970 then $Tuple4(0, bV, ad.payments[0].amount, bW)
955971 else throw("Wrong payment")
956972 else throw("One or two payments expected")
957- let bq = eF._1
958- let br = eF._2
959- let bs = eF._3
960- let bt = eF._4
961- let eG = az(ax, toString(ad.caller))
962- if ((eb > 100))
973+ let bq = eL._1
974+ let br = eL._2
975+ let bs = eL._3
976+ let bt = eL._4
977+ let eM = az(ax, toString(ad.caller))
978+ if ((eh > 100))
963979 then {
964980 let bf = ( let an = invoke(Y, "getTWAP60", [br, false], nil)
965981 if ($isInstanceOf(an, "(Int, Int)"))
969985 if ($isInstanceOf(an, "(Int, Int)"))
970986 then an
971987 else throw(($getType(an) + " couldn't be cast to (Int, Int)")))._2
972- let eg = (fraction(bf, bq, pow(10, 0, aK(br), 0, 0, DOWN)) + fraction(bg, bs, pow(10, 0, aK(bt), 0, 0, DOWN)))
973- let dR = fraction(eg, (eb - 100), 100)
974- let dY = makeString([toString(ad.caller), ax, toString(bq), br, toString(bs), bt, toString(ar), toString(as), aq, ec, toString(dR)], ",")
975- let eh = {
988+ let em = (fraction(bf, bq, pow(10, 0, aK(br), 0, 0, DOWN)) + fraction(bg, bs, pow(10, 0, aK(bt), 0, 0, DOWN)))
989+ let dR = fraction(em, (eh - 100), 100)
990+ let dY = makeString([toString(ad.caller), ax, toString(bq), br, toString(bs), bt, toString(ar), toString(as), aq, ei, toString(dR)], ",")
991+ let en = {
976992 let an = invoke(this, "createNewRequest", [dY], nil)
977993 if ($isInstanceOf(an, "Int"))
978994 then an
979995 else throw(($getType(an) + " couldn't be cast to Int"))
980996 }
981- if ((eh == eh))
997+ if ((en == en))
982998 then {
983- let ei = [((toString(ad.caller) + "_") + toString(eG)), aq, ec, dR, toString(this), "replenishFromLand", toString(valueOrErrorMessage(eh, "Can't create new request"))]
984- let ci = reentrantInvoke(aH(), "flashPosition", ei, nil)
999+ let eo = [((toString(ad.caller) + "_") + toString(eM)), aq, ei, dR, toString(this), "replenishFromLand", toString(valueOrErrorMessage(en, "Can't create new request"))]
1000+ let ci = reentrantInvoke(aH(), "flashPosition", eo, nil)
9851001 if ((ci == ci))
9861002 then nil
9871003 else throw("Strict value is not equal to itself.")
9891005 else throw("Strict value is not equal to itself.")
9901006 }
9911007 else {
992- let eH = bU(bb, ax, h, bq, bV, bs, bW, ar, as, aq)
993- let ej = eH._1
994- let eC = eH._2
995- (bX(ax, toString(ad.caller), ej, eC, eG, aq, bb, false) ++ bn(bV, bW, aq))
1008+ let eN = bU(bb, ax, h, bq, bV, bs, bW, ar, as, aq)
1009+ let ep = eN._1
1010+ let eI = eN._2
1011+ (bX(ax, toString(ad.caller), ep, eI, eM, aq, bb, false) ++ bn(bV, bW, aq))
9961012 }
9971013 }
9981014
10001016
10011017 @Callable(ad)
10021018 func replenishFromLand (dX) = {
1003- let eI = dW(dX)
1004- let aA = eI._1
1005- let ax = eI._2
1006- let bq = eI._3
1007- let bV = eI._4
1008- let bs = eI._5
1009- let bW = eI._6
1010- let ar = eI._7
1011- let as = eI._8
1012- let aq = eI._9
1013- let dZ = eI._10
1014- let ea = eI._11
1019+ let eO = dW(dX)
1020+ let aA = eO._1
1021+ let ax = eO._2
1022+ let bq = eO._3
1023+ let bV = eO._4
1024+ let bs = eO._5
1025+ let bW = eO._6
1026+ let ar = eO._7
1027+ let as = eO._8
1028+ let aq = eO._9
1029+ let dZ = eO._10
1030+ let ea = eO._11
10151031 if ((size(ad.payments) != 1))
10161032 then throw("Wrong payment size")
10171033 else if (if ((aI(ad.payments[0].assetId) != dZ))
10191035 else (ad.payments[0].amount != ea))
10201036 then throw("Wrong payment")
10211037 else {
1022- let eJ = if ((bV == dZ))
1038+ let eP = if ((bV == dZ))
10231039 then $Tuple2((bq + ad.payments[0].amount), bs)
10241040 else $Tuple2(bq, (bs + ad.payments[0].amount))
1025- let ez = eJ._1
1026- let eA = eJ._2
1041+ let eF = eP._1
1042+ let eG = eP._2
10271043 let bb = valueOrErrorMessage(getString(this, (L + ax)), "Unknown pool")
1028- let eK = bU(bb, ax, g, bq, bV, bs, bW, ar, as, aq)
1029- let ej = eK._1
1030- let eC = eK._2
1044+ let eQ = bU(bb, ax, g, bq, bV, bs, bW, ar, as, aq)
1045+ let ep = eQ._1
1046+ let eI = eQ._2
10311047 let bZ = az(ax, toString(ad.caller))
1032- let eL = [IntegerEntry((((((ax + "_") + aA) + "_") + toString(bZ)) + v), ea), StringEntry((((((ax + "_") + aA) + "_") + toString(bZ)) + w), dZ)]
1033- let eM = bX(ax, aA, ej, eC, bZ, aq, bb, true)
1034- $Tuple2((((eM ++ bn(bV, bW, aq)) ++ eL) :+ DeleteEntry((dX + J))), ej)
1048+ let eR = [IntegerEntry((((((ax + "_") + aA) + "_") + toString(bZ)) + v), ea), StringEntry((((((ax + "_") + aA) + "_") + toString(bZ)) + w), dZ)]
1049+ let eS = bX(ax, aA, ep, eI, bZ, aq, bb, true)
1050+ $Tuple2((((eS ++ bn(bV, bW, aq)) ++ eR) :+ DeleteEntry((dX + J))), ep)
10351051 }
10361052 }
10371053
10431059
10441060
10451061 @Callable(ad)
1046-func createUpdateStopLoss (dK,eN,af,eO) = {
1047- let eP = ( let an = invoke(Y, "getTWAP60", [af, false], nil)
1062+func createUpdateStopLoss (dK,eT,af,eU) = {
1063+ let eV = ( let an = invoke(Y, "getTWAP60", [af, false], nil)
10481064 if ($isInstanceOf(an, "(Int, Int)"))
10491065 then an
10501066 else throw(($getType(an) + " couldn't be cast to (Int, Int)")))._1
1051- if (!(isDefined(getInteger(this, (((((eN + "_") + toString(ad.caller)) + "_") + toString(dK)) + t)))))
1067+ if (!(isDefined(getInteger(this, (((((eT + "_") + toString(ad.caller)) + "_") + toString(dK)) + t)))))
10521068 then throw("There are no user position")
1053- else if ((0 >= eO))
1069+ else if ((0 >= eU))
10541070 then throw("Price must be greater than 0")
1055- else if ((eO > eP))
1071+ else if ((eU > eV))
10561072 then throw("Price must be less than current token price")
1057- else [IntegerEntry((((((((toString(ad.caller) + "_") + toString(dK)) + "_") + eN) + "_") + af) + P), eO)]
1073+ else [IntegerEntry((((((((toString(ad.caller) + "_") + toString(dK)) + "_") + eT) + "_") + af) + P), eU)]
10581074 }
10591075
10601076
10611077
10621078 @Callable(ad)
1063-func deleteStopLoss (dK,eN,af) = if (!(isDefined(getInteger(this, (((((((toString(ad.caller) + "_") + toString(dK)) + "_") + eN) + "_") + af) + P)))))
1079+func deleteStopLoss (dK,eT,af) = if (!(isDefined(getInteger(this, (((((((toString(ad.caller) + "_") + toString(dK)) + "_") + eT) + "_") + af) + P)))))
10641080 then throw("No entry")
1065- else [DeleteEntry((((((((toString(ad.caller) + "_") + toString(dK)) + "_") + eN) + "_") + af) + P))]
1081+ else [DeleteEntry((((((((toString(ad.caller) + "_") + toString(dK)) + "_") + eT) + "_") + af) + P))]
10661082
10671083
10681084
10691085 @Callable(ad)
1070-func createNewRequest (eQ) = valueOrElse(ac(ad), {
1071- let eh = (valueOrElse(getInteger(this, K), 0) + 1)
1072- $Tuple2([StringEntry((toString(eh) + J), eQ), IntegerEntry(K, eh)], eh)
1086+func createNewRequest (eg) = valueOrElse(ac(ad), {
1087+ let en = (valueOrElse(getInteger(this, K), 0) + 1)
1088+ $Tuple2([StringEntry((toString(en) + J), eg), IntegerEntry(K, en)], en)
10731089 })
10741090
10751091
10761092
10771093 @Callable(ad)
10781094 func stopLoss (aA,dK,ax,af) = {
1079- let eP = ( let an = invoke(Y, "getTWAP60", [af, false], nil)
1095+ let eV = ( let an = invoke(Y, "getTWAP60", [af, false], nil)
10801096 if ($isInstanceOf(an, "(Int, Int)"))
10811097 then an
10821098 else throw(($getType(an) + " couldn't be cast to (Int, Int)")))._1
10881104
10891105
10901106 @Callable(ad)
1091-func liquidate (aA,dK,ax,eR) = {
1107+func liquidate (aA,dK,eW) = {
1108+ let ax = valueOrErrorMessage(getString(this, (((aA + "_") + dK) + u)), "no position")
10921109 let bb = valueOrErrorMessage(getString(this, (L + ax)), "Pool is not inited")
1093- let eS = at(Address(fromBase58String(ax)), bb)
1094- let bV = eS._1
1095- let bW = eS._2
1096- let ar = eS._3
1097- let as = eS._4
1098- let aq = eS._5
1099- let dM = valueOrErrorMessage(getInteger(this, (((((ax + "_") + aA) + "_") + toString(dK)) + t)), "Unknown position")
1100- let dN = getIntegerValue(this, (((((ax + "_") + aA) + "_") + toString(dK)) + y))
1101- let dS = aw(ax)
1102- let dT = Address(fromBase58String(aA))
1103- let dR = getIntegerValue(this, (((((ax + "_") + aA) + "_") + toString(dK)) + v))
1104- let dt = getStringValue(this, (((((ax + "_") + aA) + "_") + toString(dK)) + w))
1105- let eT = if ((dR > 0))
1106- then $Tuple2({
1107- let an = invoke(aH(), "getAssetDebt", [false, ((((ax + "_") + aA) + "_") + toString(dK)), dt], nil)
1108- if ($isInstanceOf(an, "Int"))
1109- then an
1110- else throw(($getType(an) + " couldn't be cast to Int"))
1111- }, getIntegerValue(this, (ax + B)))
1112- else $Tuple2(0, getIntegerValue(this, (ax + C)))
1113- let ds = eT._1
1114- let dO = eT._2
1115- let dr = (dM + fraction(dM, (dO - dN), k))
1116- let bm = aZ([aq])[0]
1117- let eU = aN([dt])[0]
1118- let eV = fraction(dr, bm, aK(aq))
1119- let eW = fraction(dR, eU, aM(dt))
1120- let eX = (eV - eW)
1121- nil
1110+ let eX = at(Address(fromBase58String(ax)), bb)
1111+ let bV = eX._1
1112+ let bW = eX._2
1113+ let ar = eX._3
1114+ let as = eX._4
1115+ let aq = eX._5
1116+ let ec = eb(ax, bb, aq, eW)
1117+ let dR = getIntegerValue(this, (((((ax + "_") + aA) + "_") + dK) + v))
1118+ let dt = getStringValue(this, (((((ax + "_") + aA) + "_") + dK) + w))
1119+ let dr = dJ(aA, ax, dK, (dR > 0))
1120+ if ((dR > 0))
1121+ then [IntegerEntry((((((ax + "_") + aA) + "_") + dK) + y), getIntegerValue(this, (ax + B))), IntegerEntry((ax + A), (ay(ax) - eW))]
1122+ else ([IntegerEntry((((((ax + "_") + aA) + "_") + dK) + y), getIntegerValue(this, (ax + C)))] ++ [IntegerEntry((ax + z), (aw(ax) - eW)), IntegerEntry((((((ax + "_") + aA) + "_") + dK) + t), (dr - eW)), ScriptTransfer(ad.caller, ec, fromBase58String(aq))])
11221123 }
11231124
11241125
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 = "capNoLoan"
1313
1414 let f = "capLoan"
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 = "price_oracle"
9595
9696 let U = "exchange_contract"
9797
9898 let V = "wx_swap_contract"
9999
100100 let W = Address(fromBase58String(valueOrErrorMessage(getString(this, Q), "No axly moneyBox address")))
101101
102102 let X = Address(fromBase58String(valueOrErrorMessage(getString(this, U), "No exchange contract address")))
103103
104104 let Y = Address(fromBase58String(valueOrErrorMessage(getString(this, T), "No price oracle address")))
105105
106106 let Z = Address(fromBase58String(valueOrErrorMessage(getString(this, V), "No wx swap address")))
107107
108108 let aa = base58'4W19ndijcc2CsQa9HGW2dfXKTVXhnneWWttxXrtjPmEp'
109109
110110 let ab = base58'EMAMLxDnv3xiz8RXg8Btj33jcEw3wLczL3JKYYmuubpc'
111111
112112 func ac (ad) = if ((ad.caller == this))
113113 then unit
114114 else throw("Only contract itself can call this function")
115115
116116
117117 func ae (af) = {
118118 let ag = af
119119 if ($isInstanceOf(ag, "ByteVector"))
120120 then {
121121 let ah = ag
122122 assetBalance(this, ah)
123123 }
124124 else if ($isInstanceOf(ag, "Unit"))
125125 then {
126126 let ai = ag
127127 wavesBalance(this).available
128128 }
129129 else throw("Match error")
130130 }
131131
132132
133133 func aj (ak) = $Tuple5(valueOrErrorMessage(getString(ak, o), "Can't get pool A asset id"), valueOrErrorMessage(getString(ak, p), "Can't get pool B asset id"), valueOrErrorMessage(getInteger(ak, m), "Can't get pool A asset balance"), valueOrErrorMessage(getInteger(ak, n), "Can't get pool B asset balance"), valueOrErrorMessage(getString(ak, q), "Can't get share asset id"))
134134
135135
136136 func al (ak) = {
137137 let am = {
138138 let an = invoke(ak, "getPoolConfigWrapperREADONLY", nil, nil)
139139 if ($isInstanceOf(an, "List[Any]"))
140140 then an
141141 else throw(($getType(an) + " couldn't be cast to List[Any]"))
142142 }
143143 if ((am == am))
144144 then {
145145 let ao = valueOrErrorMessage({
146146 let an = am[4]
147147 if ($isInstanceOf(an, "String"))
148148 then an
149149 else unit
150150 }, "Can't get pool A asset id")
151151 let ap = valueOrErrorMessage({
152152 let an = am[5]
153153 if ($isInstanceOf(an, "String"))
154154 then an
155155 else unit
156156 }, "Can't get pool B asset id")
157157 let aq = valueOrErrorMessage({
158158 let an = am[3]
159159 if ($isInstanceOf(an, "String"))
160160 then an
161161 else unit
162162 }, "Can't get pool LP asset id")
163163 let ar = {
164164 let an = invoke(ak, "getAccBalanceWrapperREADONLY", [ao], nil)
165165 if ($isInstanceOf(an, "Int"))
166166 then an
167167 else throw(($getType(an) + " couldn't be cast to Int"))
168168 }
169169 if ((ar == ar))
170170 then {
171171 let as = {
172172 let an = invoke(ak, "getAccBalanceWrapperREADONLY", [ap], nil)
173173 if ($isInstanceOf(an, "Int"))
174174 then an
175175 else throw(($getType(an) + " couldn't be cast to Int"))
176176 }
177177 if ((as == as))
178178 then $Tuple5(ao, ap, ar, as, aq)
179179 else throw("Strict value is not equal to itself.")
180180 }
181181 else throw("Strict value is not equal to itself.")
182182 }
183183 else throw("Strict value is not equal to itself.")
184184 }
185185
186186
187187 func at (ak,au) = if ((au == a))
188188 then aj(ak)
189189 else if ((au == b))
190190 then al(ak)
191191 else throw("Wrong pool type")
192192
193193
194194 func av (ak,au,aq) = if ((au == a))
195195 then valueOrErrorMessage(getInteger(ak, r), "Can't get share asset supply")
196196 else if ((au == b))
197197 then valueOrErrorMessage(assetInfo(fromBase58String(aq)), "Wrong ShareId").quantity
198198 else throw("Wrong pool type")
199199
200200
201201 func aw (ax) = valueOrElse(getInteger(this, (ax + z)), 0)
202202
203203
204204 func ay (ax) = valueOrElse(getInteger(this, (ax + A)), 0)
205205
206206
207207 func az (ax,aA) = (valueOrElse(getInteger(this, (aA + x)), 0) + 1)
208208
209209
210210 func aB (ax,aC) = if ((aC == d))
211211 then getIntegerValue(this, (ax + G))
212212 else if ((aC == c))
213213 then getIntegerValue(this, (ax + F))
214214 else if ((aC == g))
215215 then getIntegerValue(this, (ax + E))
216216 else if ((aC == h))
217217 then getIntegerValue(this, (ax + D))
218218 else throw("Wrong fee type")
219219
220220
221221 func aD () = Address(fromBase58String(valueOrErrorMessage(getString(this, R), "Can't get swopfi farming addr")))
222222
223223
224224 func aE (ak) = {
225225 let aF = Address(fromBase58String(valueOrErrorMessage(getString(ak, "%s__factoryContract"), "Can't get WX factory contract addr")))
226226 let aG = split(valueOrErrorMessage(getString(aF, "%s__factoryConfig"), "Can't get WX factory cfg"), "__")
227227 Address(fromBase58String(aG[1]))
228228 }
229229
230230
231231 func aH () = Address(fromBase58String(valueOrErrorMessage(getString(this, S), "Can't get lend service addr")))
232232
233233
234234 func aI (af) = {
235235 let ag = af
236236 if ($isInstanceOf(ag, "ByteVector"))
237237 then {
238238 let ah = ag
239239 toBase58String(ah)
240240 }
241241 else if ($isInstanceOf(ag, "Unit"))
242242 then {
243243 let ai = ag
244244 "WAVES"
245245 }
246246 else throw("Match error")
247247 }
248248
249249
250250 func aJ (af) = if ((af == "WAVES"))
251251 then unit
252252 else fromBase58String(af)
253253
254254
255255 func aK (af) = if ((af == "WAVES"))
256256 then 8
257257 else {
258258 let ag = assetInfo(fromBase58String(af))
259259 if ($isInstanceOf(ag, "Asset"))
260260 then {
261261 let aL = ag
262262 aL.decimals
263263 }
264264 else throw("Can't find asset")
265265 }
266266
267267
268268 func aM (af) = pow(10, 0, aK(af), 0, 0, DOWN)
269269
270270
271271 func aN (aO) = {
272272 func aP (aQ,af) = {
273273 let aR = ( let an = invoke(Y, "getTWAP60", [af, false], nil)
274274 if ($isInstanceOf(an, "(Int, Int)"))
275275 then an
276276 else throw(($getType(an) + " couldn't be cast to (Int, Int)")))._2
277277 (aQ :+ aR)
278278 }
279279
280280 let aS = aO
281281 let aT = size(aS)
282282 let aU = nil
283283 func aV (aW,aX) = if ((aX >= aT))
284284 then aW
285285 else aP(aW, aS[aX])
286286
287287 func aY (aW,aX) = if ((aX >= aT))
288288 then aW
289289 else throw("List size exceeds 100")
290290
291291 aY(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aU, 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), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100)
292292 }
293293
294294
295295 func aZ (ba) = {
296296 func aP (aQ,aq) = {
297297 let ax = valueOrErrorMessage(getString(this, (aq + M)), "Can't find pool addr by share id")
298298 let ak = Address(fromBase58String(ax))
299299 let bb = valueOrErrorMessage(getString(this, (L + ax)), "Pool is not inited")
300300 let bc = at(ak, bb)
301301 let ao = bc._1
302302 let ap = bc._2
303303 let bd = bc._3
304304 let be = bc._4
305305 let bf = ( let an = invoke(Y, "getTWAP60", [ao, false], nil)
306306 if ($isInstanceOf(an, "(Int, Int)"))
307307 then an
308308 else throw(($getType(an) + " couldn't be cast to (Int, Int)")))._2
309309 let bg = ( let an = invoke(Y, "getTWAP60", [ap, false], nil)
310310 if ($isInstanceOf(an, "(Int, Int)"))
311311 then an
312312 else throw(($getType(an) + " couldn't be cast to (Int, Int)")))._2
313313 let bh = av(ak, bb, aq)
314314 let bi = pow(10, 0, aK(ao), 0, 0, DOWN)
315315 let bj = pow(10, 0, aK(ap), 0, 0, DOWN)
316316 let bk = pow(10, 0, aK(aq), 0, 0, DOWN)
317317 let bl = (fraction(bd, bf, bi) + fraction(be, bg, bj))
318318 let bm = fraction(bl, bk, bh)
319319 (aQ :+ bm)
320320 }
321321
322322 let aS = ba
323323 let aT = size(aS)
324324 let aU = nil
325325 func aV (aW,aX) = if ((aX >= aT))
326326 then aW
327327 else aP(aW, aS[aX])
328328
329329 func aY (aW,aX) = if ((aX >= aT))
330330 then aW
331331 else throw("List size exceeds 50")
332332
333333 aY(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aU, 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)
334334 }
335335
336336
337337 func bn (ao,ap,aq) = {
338338 let bo = aN([ao, ap])
339339 let bm = aZ([aq])
340340 [IntegerEntry((ao + O), bo[0]), IntegerEntry((ap + O), bo[1]), IntegerEntry((aq + O), bm[0])]
341341 }
342342
343343
344344 func bp (ax,aC,bq,br,bs,bt,ar,as,aq) = {
345345 let bu = ae(fromBase58String(aq))
346346 if ((bu == bu))
347347 then {
348348 let ak = Address(fromBase58String(ax))
349349 let bv = fraction(j, bq, ar)
350350 let bw = fraction(j, bs, as)
351351 let bx = if ((bw > bv))
352352 then {
353353 let by = fraction(as, bv, j, CEILING)
354354 $Tuple4(bq, by, (bs - by), bt)
355355 }
356356 else {
357357 let by = fraction(ar, bw, j, CEILING)
358358 $Tuple4(by, bs, (bq - by), br)
359359 }
360360 let bz = bx._1
361361 let bA = bx._2
362362 let bB = bx._3
363363 let bC = bx._4
364364 let bD = if (if ((bz > 0))
365365 then (bA > 0)
366366 else false)
367367 then {
368368 let bE = [AttachedPayment(aJ(br), bz), AttachedPayment(aJ(bt), bA)]
369369 invoke(ak, "callFunction", ["replenishWithTwoTokens", ["false", "0"]], bE)
370370 }
371371 else 0
372372 if ((bD == bD))
373373 then {
374374 let bF = if ((bB > 0))
375375 then {
376376 let bE = [AttachedPayment(aJ(bC), bB)]
377377 let bG = ["0", "false", "0"]
378378 invoke(ak, "callFunction", ["replenishWithOneToken", bG], bE)
379379 }
380380 else 0
381381 if ((bF == bF))
382382 then {
383383 let bH = ae(fromBase58String(aq))
384384 let bI = (bH - bu)
385385 let bJ = fraction(bI, aB(ax, aC), l)
386386 let bK = (bI - bJ)
387387 if ((0 >= bK))
388388 then throw("amount of staked sharetokens must be > 0")
389389 else {
390390 let bL = invoke(aD(), "lockShareTokens", [ax, 0], [AttachedPayment(fromBase58String(aq), bK)])
391391 if ((bL == bL))
392392 then $Tuple2(bK, bJ)
393393 else throw("Strict value is not equal to itself.")
394394 }
395395 }
396396 else throw("Strict value is not equal to itself.")
397397 }
398398 else throw("Strict value is not equal to itself.")
399399 }
400400 else throw("Strict value is not equal to itself.")
401401 }
402402
403403
404404 func bM (ax,aC,bq,br,bs,bt,aq) = {
405405 let ak = Address(fromBase58String(ax))
406406 let bN = if (if ((bq > 0))
407407 then (bs > 0)
408408 else false)
409409 then {
410410 let bO = split({
411411 let an = invoke(ak, "evaluatePutByAmountAssetREADONLY", [bq], nil)
412412 if ($isInstanceOf(an, "String"))
413413 then an
414414 else throw(($getType(an) + " couldn't be cast to String"))
415415 }, "__")
416416 if ((bO == bO))
417417 then {
418418 let bP = split({
419419 let an = invoke(ak, "evaluatePutByPriceAssetREADONLY", [bs], nil)
420420 if ($isInstanceOf(an, "String"))
421421 then an
422422 else throw(($getType(an) + " couldn't be cast to String"))
423423 }, "__")
424424 if ((bP == bP))
425425 then {
426426 let bQ = parseIntValue(bO[1])
427427 let bR = parseIntValue(bP[1])
428428 if ((bR > bQ))
429429 then {
430430 let bS = parseIntValue(bO[8])
431431 $Tuple4(bq, bS, (bs - bS), bt)
432432 }
433433 else {
434434 let bT = parseIntValue(bP[7])
435435 $Tuple4(bT, bs, (bq - bT), br)
436436 }
437437 }
438438 else throw("Strict value is not equal to itself.")
439439 }
440440 else throw("Strict value is not equal to itself.")
441441 }
442442 else if ((bq > 0))
443443 then $Tuple4(bq, bs, bq, br)
444444 else if ((bs > 0))
445445 then $Tuple4(bq, bs, bs, bt)
446446 else throw("pmts must be > 0")
447447 let bz = bN._1
448448 let bA = bN._2
449449 let bB = bN._3
450450 let bC = bN._4
451451 let bu = ae(fromBase58String(aq))
452452 if ((bu == bu))
453453 then {
454454 let bD = if (if ((bz > 0))
455455 then (bA > 0)
456456 else false)
457457 then {
458458 let bE = [AttachedPayment(aJ(br), bz), AttachedPayment(aJ(bt), bA)]
459459 invoke(ak, "put", [1000000, false], bE)
460460 }
461461 else 0
462462 if ((bD == bD))
463463 then {
464464 let bF = if ((bB > 0))
465465 then {
466466 let bE = [AttachedPayment(aJ(bC), bB)]
467467 invoke(ak, "putOneTkn", [0, false], bE)
468468 }
469469 else 0
470470 if ((bF == bF))
471471 then {
472472 let bH = ae(fromBase58String(aq))
473473 let bI = (bH - bu)
474474 let bJ = fraction(bI, aB(ax, aC), l)
475475 let bK = (bI - bJ)
476476 if ((0 >= bK))
477477 then throw("amount of staked sharetokens must be > 0")
478478 else {
479479 let bL = invoke(aE(ak), "stake", nil, [AttachedPayment(fromBase58String(aq), bK)])
480480 if ((bL == bL))
481481 then $Tuple2(bK, bJ)
482482 else throw("Strict value is not equal to itself.")
483483 }
484484 }
485485 else throw("Strict value is not equal to itself.")
486486 }
487487 else throw("Strict value is not equal to itself.")
488488 }
489489 else throw("Strict value is not equal to itself.")
490490 }
491491
492492
493493 func bU (au,ax,aC,bq,bV,bs,bW,ar,as,aq) = if ((au == a))
494494 then bp(ax, aC, bq, bV, bs, bW, ar, as, aq)
495495 else if ((au == b))
496496 then bM(ax, aC, bq, bV, bs, bW, aq)
497497 else throw("Wrong pool type")
498498
499499
500500 func bX (ax,aA,bY,bJ,bZ,aq,au,ca) = {
501501 let cb = aw(ax)
502502 let cc = ay(ax)
503503 let cd = if (ca)
504504 then $Tuple2(getIntegerValue(this, (ax + B)), (cc + bY))
505505 else $Tuple2(getIntegerValue(this, (ax + C)), cc)
506506 let ce = cd._1
507507 let cf = cd._2
508508 [IntegerEntry((ax + z), (cb + bY)), IntegerEntry((ax + A), (cc + bY)), IntegerEntry((((((ax + "_") + aA) + "_") + toString(bZ)) + t), bY), IntegerEntry((((((ax + "_") + aA) + "_") + toString(bZ)) + y), ce), StringEntry((((aA + "_") + toString(bZ)) + u), ax), IntegerEntry((aA + x), bZ), ScriptTransfer(W, bJ, fromBase58String(aq))]
509509 }
510510
511511
512512 func cg (au,ax) = if ((au == a))
513513 then {
514514 let ch = ae(aa)
515515 if ((ch == ch))
516516 then {
517517 let ci = invoke(aD(), "claim", [ax], nil)
518518 if ((ci == ci))
519519 then {
520520 let cj = ae(aa)
521521 $Tuple2((cj - ch), aa)
522522 }
523523 else throw("Strict value is not equal to itself.")
524524 }
525525 else throw("Strict value is not equal to itself.")
526526 }
527527 else if ((au == b))
528528 then {
529529 let ch = ae(ab)
530530 if ((ch == ch))
531531 then {
532532 let ci = invoke(aE(Address(fromBase58String(ax))), "claimWX", [ax], nil)
533533 if ((ci == ci))
534534 then {
535535 let cj = ae(ab)
536536 $Tuple2((cj - ch), ab)
537537 }
538538 else throw("Strict value is not equal to itself.")
539539 }
540540 else throw("Strict value is not equal to itself.")
541541 }
542542 else throw("Wrong pool type")
543543
544544
545545 func ck (cl,cm,cn,co,cp,cq,cr,cs,ct,cu) = {
546546 let cv = ae(aJ(cl))
547547 if ((cv == cv))
548548 then {
549549 let ci = invoke(X, "swap", [co, cp, cq, cr, cs, ct, cu], [AttachedPayment(cn, cm)])
550550 if ((ci == ci))
551551 then (ae(aJ(cl)) - cv)
552552 else throw("Strict value is not equal to itself.")
553553 }
554554 else throw("Strict value is not equal to itself.")
555555 }
556556
557557
558558 func cw (cl,cm,cn,cx,cy,cu) = {
559559 let cv = ae(aJ(cl))
560560 if ((cv == cv))
561561 then {
562562 let ci = invoke(X, "puzzleSwap", [cx, cy, cu], [AttachedPayment(cn, cm)])
563563 if ((ci == ci))
564564 then (ae(aJ(cl)) - cv)
565565 else throw("Strict value is not equal to itself.")
566566 }
567567 else throw("Strict value is not equal to itself.")
568568 }
569569
570570
571571 func cz (cl,cm,cn,cA,cB,cC,cD,cE,cF,cu) = {
572572 let cv = ae(aJ(cl))
573573 if ((cv == cv))
574574 then {
575575 let ci = invoke(X, "swopfiSwap", [cA, cB, cC, cD, cE, cF, cu], [AttachedPayment(cn, cm)])
576576 if ((ci == ci))
577577 then (ae(aJ(cl)) - cv)
578578 else throw("Strict value is not equal to itself.")
579579 }
580580 else throw("Strict value is not equal to itself.")
581581 }
582582
583583
584584 func cG (ax,bb,cH,cI) = {
585585 let ak = Address(fromBase58String(ax))
586586 let cJ = at(ak, bb)
587587 let bV = cJ._1
588588 let bW = cJ._2
589589 let ar = cJ._3
590590 let as = cJ._4
591591 let aq = cJ._5
592592 let cK = if ((cH == bV))
593593 then $Tuple2(cI, 0)
594594 else $Tuple2(0, cI)
595595 let bq = cK._1
596596 let bs = cK._2
597597 let cL = bU(bb, ax, i, bq, bV, bs, bW, ar, as, aq)
598598 let bY = cL._1
599599 let cM = cL._2
600600 let cN = valueOrElse(getInteger(this, (ax + B)), 0)
601601 let cO = valueOrElse(getInteger(this, (ax + C)), 0)
602602 let cP = aw(ax)
603603 let cQ = ay(ax)
604604 let cR = fraction(cQ, j, cP)
605605 let cS = fraction(bY, cR, j)
606606 let cT = (bY - cS)
607607 let cU = (cN + fraction(cS, k, cQ))
608608 let cV = (cO + fraction(cT, k, (cP - cQ)))
609609 let cW = fraction(cS, aB(ax, d), l)
610610 let cX = fraction(cT, aB(ax, c), l)
611611 ([IntegerEntry((ax + B), cU), IntegerEntry((ax + C), cV), IntegerEntry((ax + z), (((cP + bY) - cW) - cX)), IntegerEntry((ax + A), ((cQ + cS) - cW)), ScriptTransfer(W, (cW + cX), fromBase58String(aq))] ++ bn(bV, bW, aq))
612612 }
613613
614614
615615 func cY (ax,cZ,da,ar,as,db,dc) = {
616616 let ak = Address(fromBase58String(ax))
617617 let dd = 1000000
618618 let de = getIntegerValue(ak, s)
619619 let df = fraction(db, dd, (dd - de))
620620 let dg = if ((dc == cZ))
621621 then {
622622 let dh = fraction(ar, df, (as - df))
623623 $Tuple2(dh, da)
624624 }
625625 else {
626626 let dh = fraction(as, df, (ar - df))
627627 $Tuple2(dh, cZ)
628628 }
629629 let dh = dg._1
630630 let di = dg._2
631631 invoke(ak, "callFunction", ["exchange", ["1"]], [AttachedPayment(aJ(di), dh)])
632632 }
633633
634634
635635 func dj (ax,cZ,da,ar,as,db,dc) = {
636636 let ak = Address(fromBase58String(ax))
637637 let dk = getIntegerValue(Z, "%s__protocolFee")
638638 let dl = getIntegerValue(Z, "%s__poolFee")
639639 let dm = toBigInt(100000000)
640640 let dn = if ((dc == cZ))
641641 then {
642642 let dh = fraction(ar, db, (as - db))
643643 $Tuple2(dh, da)
644644 }
645645 else {
646646 let dh = fraction(as, db, (ar - db))
647647 $Tuple2(dh, cZ)
648648 }
649649 let dh = dn._1
650650 let di = dn._2
651651 let do = toInt(fraction(toBigInt(dh), dm, (dm - toBigInt((dk + dl)))))
652652 invoke(Z, "swap", [1, dc, toString(this)], [AttachedPayment(aJ(di), do)])
653653 }
654654
655655
656656 func dp (au,ax,cZ,da,ar,as,db,dc) = if ((au == a))
657657 then cY(ax, cZ, da, ar, as, db, dc)
658658 else dj(ax, cZ, da, ar, as, db, dc)
659659
660660
661661 func dq (ax,dr,ds,dt) = {
662662 let ak = Address(fromBase58String(ax))
663663 let bb = valueOrErrorMessage(getString(this, (L + ax)), "Unknown pool")
664664 let du = at(ak, bb)
665665 let cZ = du._1
666666 let da = du._2
667667 let ar = du._3
668668 let as = du._4
669669 let aq = du._5
670670 let dv = ae(aJ(cZ))
671671 if ((dv == dv))
672672 then {
673673 let dw = ae(aJ(da))
674674 if ((dw == dw))
675675 then {
676676 let ci = if ((bb == a))
677677 then invoke(ak, "callFunction", ["withdraw", [toString(dr)]], nil)
678678 else if ((bb == b))
679679 then invoke(ak, "unstakeAndGet", [dr], nil)
680680 else throw("Wrong position type")
681681 if ((ci == ci))
682682 then {
683683 let dx = ae(aJ(cZ))
684684 let dy = ae(aJ(da))
685685 let dz = $Tuple2((dx - dv), (dy - dw))
686686 let dA = dz._1
687687 let dB = dz._2
688688 let dC = if ((ds > 0))
689689 then {
690690 let dD = if (if ((dt == cZ))
691691 then (ds > dA)
692692 else false)
693693 then (ds - dA)
694694 else if (if ((dt == da))
695695 then (ds > dB)
696696 else false)
697697 then (ds - dB)
698698 else 0
699699 let dE = if ((dD > 0))
700700 then dp(bb, ax, cZ, da, ar, as, dD, dt)
701701 else 0
702702 if ((dE == dE))
703703 then {
704704 let dF = ae(aJ(cZ))
705705 let dG = ae(aJ(da))
706706 $Tuple2((dF - dv), (dG - dw))
707707 }
708708 else throw("Strict value is not equal to itself.")
709709 }
710710 else $Tuple2(dA, dB)
711711 let dH = dC._1
712712 let dI = dC._2
713713 $Tuple7(dH, cZ, dI, da, dx, dy, aq)
714714 }
715715 else throw("Strict value is not equal to itself.")
716716 }
717717 else throw("Strict value is not equal to itself.")
718718 }
719719 else throw("Strict value is not equal to itself.")
720720 }
721721
722722
723723 func dJ (aA,ax,dK,dL) = {
724724 let dM = valueOrErrorMessage(getInteger(this, (((((ax + "_") + aA) + "_") + dK) + t)), "Unknown position")
725725 let dN = getIntegerValue(this, (((((ax + "_") + aA) + "_") + dK) + y))
726726 let dO = if (dL)
727727 then getIntegerValue(this, (ax + B))
728728 else getIntegerValue(this, (ax + C))
729729 (dM + fraction(dM, (dO - dN), k))
730730 }
731731
732732
733733 func dP (aA,ax,dK,dQ) = {
734734 let dM = valueOrErrorMessage(getInteger(this, (((((ax + "_") + aA) + "_") + dK) + t)), "Unknown position")
735735 let dN = getIntegerValue(this, (((((ax + "_") + aA) + "_") + dK) + y))
736736 let dR = getIntegerValue(this, (((((ax + "_") + aA) + "_") + dK) + v))
737737 let dr = dJ(aA, ax, dK, (dR > 0))
738738 let dS = aw(ax)
739739 let dT = Address(fromBase58String(aA))
740740 let dt = getStringValue(this, (((((ax + "_") + aA) + "_") + dK) + w))
741741 let ds = if ((dR > 0))
742742 then {
743743 let an = invoke(aH(), "getAssetDebt", [false, ((((ax + "_") + aA) + "_") + dK), dt], nil)
744744 if ($isInstanceOf(an, "Int"))
745745 then an
746746 else throw(($getType(an) + " couldn't be cast to Int"))
747747 }
748748 else 0
749749 let dU = dq(ax, dr, ds, dt)
750750 if ((dU == dU))
751751 then {
752752 let aq = dU._7
753753 let dy = dU._6
754754 let dx = dU._5
755755 let da = dU._4
756756 let dI = dU._3
757757 let cZ = dU._2
758758 let dH = dU._1
759759 let dV = if ((ds > 0))
760760 then invoke(aH(), "repayFor", [((aA + "_") + dK)], [AttachedPayment(aJ(dt), ds)])
761761 else 0
762762 if ((dV == dV))
763763 then ([DeleteEntry((((((ax + "_") + aA) + "_") + dK) + t)), DeleteEntry((((((ax + "_") + aA) + "_") + dK) + y)), IntegerEntry((ax + z), (dS - dr)), ScriptTransfer(dT, dH, aJ(cZ)), ScriptTransfer(dT, dI, aJ(da))] ++ bn(cZ, da, aq))
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 dW (dX) = {
771771 let dY = split(valueOrErrorMessage(getString(this, (dX + J)), ("No request with id " + dX)), ",")
772772 let aA = dY[0]
773773 let ax = dY[1]
774774 let bq = parseIntValue(dY[2])
775775 let bV = dY[3]
776776 let bs = parseIntValue(dY[4])
777777 let bW = dY[5]
778778 let ar = parseIntValue(dY[6])
779779 let as = parseIntValue(dY[7])
780780 let aq = dY[8]
781781 let dZ = dY[9]
782782 let ea = parseIntValue(dY[10])
783783 $Tuple11(aA, ax, bq, bV, bs, bW, ar, as, aq, dZ, ea)
784784 }
785785
786786
787+func eb (ax,bb,aq,ec) = {
788+ let ed = if ((bb == a))
789+ then $Tuple3(aD(), "withdrawShareTokens", [ax, ec])
790+ else if ((bb == b))
791+ then $Tuple3(aE(Address(fromBase58String(ax))), "unstake", [aq, ec])
792+ else throw("Wrong pool type")
793+ let ee = ed._1
794+ let ef = ed._2
795+ let eg = ed._3
796+ let ci = invoke(ee, ef, eg, nil)
797+ if ((ci == ci))
798+ then ec
799+ else throw("Strict value is not equal to itself.")
800+ }
801+
802+
787803 @Callable(ad)
788-func replenishEVALONLY (ax,eb,ec) = if (if ((100 > eb))
804+func replenishEVALONLY (ax,eh,ei) = if (if ((100 > eh))
789805 then true
790- else (eb > 300))
806+ else (eh > 300))
791807 then throw("Leverage can't be <100 and >300")
792808 else {
793809 let bb = valueOrErrorMessage(getString(this, (L + ax)), "Pool is not inited")
794- let ed = at(Address(fromBase58String(ax)), bb)
795- let bV = ed._1
796- let bW = ed._2
797- let ar = ed._3
798- let as = ed._4
799- let aq = ed._5
800- let ee = if ((size(ad.payments) == 2))
810+ let ej = at(Address(fromBase58String(ax)), bb)
811+ let bV = ej._1
812+ let bW = ej._2
813+ let ar = ej._3
814+ let as = ej._4
815+ let aq = ej._5
816+ let ek = if ((size(ad.payments) == 2))
801817 then if ((aI(ad.payments[0].assetId) != bV))
802818 then throw("Wrong payment asset A")
803819 else if ((aI(ad.payments[1].assetId) != bW))
804820 then throw("Wrong payment asset B")
805821 else $Tuple4(ad.payments[0].amount, bV, ad.payments[1].amount, bW)
806822 else if ((size(ad.payments) == 1))
807823 then if ((aI(ad.payments[0].assetId) == bV))
808824 then $Tuple4(ad.payments[0].amount, bV, 0, bW)
809825 else if ((aI(ad.payments[0].assetId) == bW))
810826 then $Tuple4(0, bV, ad.payments[0].amount, bW)
811827 else throw("Wrong payment")
812828 else throw("One or two payments expected")
813- let bq = ee._1
814- let br = ee._2
815- let bs = ee._3
816- let bt = ee._4
817- let ef = if ((eb > 100))
829+ let bq = ek._1
830+ let br = ek._2
831+ let bs = ek._3
832+ let bt = ek._4
833+ let el = if ((eh > 100))
818834 then {
819835 let bf = ( let an = invoke(Y, "getTWAP60", [br, false], nil)
820836 if ($isInstanceOf(an, "(Int, Int)"))
821837 then an
822838 else throw(($getType(an) + " couldn't be cast to (Int, Int)")))._2
823839 let bg = ( let an = invoke(Y, "getTWAP60", [bt, false], nil)
824840 if ($isInstanceOf(an, "(Int, Int)"))
825841 then an
826842 else throw(($getType(an) + " couldn't be cast to (Int, Int)")))._2
827- let eg = (fraction(bf, bq, pow(10, 0, aK(br), 0, 0, DOWN)) + fraction(bg, bs, pow(10, 0, aK(bt), 0, 0, DOWN)))
828- let dR = fraction(eg, (eb - 100), 100)
829- let dY = makeString([toString(ad.caller), ax, toString(bq), br, toString(bs), bt, toString(ar), toString(as), aq, ec, toString(dR), toString(1)], ",")
830- let eh = {
843+ let em = (fraction(bf, bq, pow(10, 0, aK(br), 0, 0, DOWN)) + fraction(bg, bs, pow(10, 0, aK(bt), 0, 0, DOWN)))
844+ let dR = fraction(em, (eh - 100), 100)
845+ let dY = makeString([toString(ad.caller), ax, toString(bq), br, toString(bs), bt, toString(ar), toString(as), aq, ei, toString(dR), toString(1)], ",")
846+ let en = {
831847 let an = invoke(this, "createNewRequest", [dY], nil)
832848 if ($isInstanceOf(an, "Int"))
833849 then an
834850 else throw(($getType(an) + " couldn't be cast to Int"))
835851 }
836- if ((eh == eh))
852+ if ((en == en))
837853 then {
838- let ei = [((toString(ad.caller) + "_") + toString(1)), aq, ec, dR, toString(this), "replenishFromLandEVALONLY", toString(valueOrErrorMessage(eh, "Can't create new request"))]
839- let ci = reentrantInvoke(aH(), "flashPosition", ei, nil)
854+ let eo = [((toString(ad.caller) + "_") + toString(1)), aq, ei, dR, toString(this), "replenishFromLandEVALONLY", toString(valueOrErrorMessage(en, "Can't create new request"))]
855+ let ci = reentrantInvoke(aH(), "flashPosition", eo, nil)
840856 if ((ci == ci))
841857 then $Tuple2(getIntegerValue(this, "EVALONLY_STAKEDAMOUNT"), dR)
842858 else throw("Strict value is not equal to itself.")
843859 }
844860 else throw("Strict value is not equal to itself.")
845861 }
846862 else $Tuple2(bU(bb, ax, h, bq, bV, bs, bW, ar, as, aq)._1, 0)
847- let ej = ef._1
848- let dR = ef._2
849- let ek = dq(ax, ej, dR, ec)
850- if ((ek == ek))
863+ let ep = el._1
864+ let dR = el._2
865+ let eq = dq(ax, ep, dR, ei)
866+ if ((eq == eq))
851867 then {
852- let el = ek._6
853- let em = ek._5
854- let da = ek._4
855- let dI = ek._3
856- let cZ = ek._2
857- let dH = ek._1
858- let en = at(Address(fromBase58String(ax)), bb)
859- let eo = en._1
860- let ep = en._2
861- let eq = en._3
862- let er = en._4
863- let es = en._5
864- let et = fraction(as, j, ar)
865- let eu = fraction(er, j, eq)
866- let ev = (j - fraction(et, j, eu))
867- let ew = if ((0 > ev))
868- then (ev * -1)
869- else ev
870- $Tuple2(nil, [em, el, ew])
868+ let er = eq._6
869+ let es = eq._5
870+ let da = eq._4
871+ let dI = eq._3
872+ let cZ = eq._2
873+ let dH = eq._1
874+ let et = at(Address(fromBase58String(ax)), bb)
875+ let eu = et._1
876+ let ev = et._2
877+ let ew = et._3
878+ let ex = et._4
879+ let ey = et._5
880+ let ez = fraction(as, j, ar)
881+ let eA = fraction(ex, j, ew)
882+ let eB = (j - fraction(ez, j, eA))
883+ let eC = if ((0 > eB))
884+ then (eB * -1)
885+ else eB
886+ $Tuple2(nil, [es, er, eC])
871887 }
872888 else throw("Strict value is not equal to itself.")
873889 }
874890
875891
876892
877893 @Callable(ad)
878894 func replenishFromLandEVALONLY (dX) = {
879- let ex = dW(dX)
880- let aA = ex._1
881- let ax = ex._2
882- let bq = ex._3
883- let bV = ex._4
884- let bs = ex._5
885- let bW = ex._6
886- let ar = ex._7
887- let as = ex._8
888- let aq = ex._9
889- let dZ = ex._10
890- let ea = ex._11
895+ let eD = dW(dX)
896+ let aA = eD._1
897+ let ax = eD._2
898+ let bq = eD._3
899+ let bV = eD._4
900+ let bs = eD._5
901+ let bW = eD._6
902+ let ar = eD._7
903+ let as = eD._8
904+ let aq = eD._9
905+ let dZ = eD._10
906+ let ea = eD._11
891907 if ((size(ad.payments) != 1))
892908 then throw("Wrong payment size")
893909 else if (if ((aI(ad.payments[0].assetId) != dZ))
894910 then true
895911 else (ad.payments[0].amount != ea))
896912 then throw("Wrong payment")
897913 else {
898- let ey = if ((bV == dZ))
914+ let eE = if ((bV == dZ))
899915 then $Tuple2((bq + ad.payments[0].amount), bs)
900916 else $Tuple2(bq, (bs + ad.payments[0].amount))
901- let ez = ey._1
902- let eA = ey._2
917+ let eF = eE._1
918+ let eG = eE._2
903919 let bb = valueOrErrorMessage(getString(this, (L + ax)), "Unknown pool")
904- let eB = bU(bb, ax, g, bq, bV, bs, bW, ar, as, aq)
905- let ej = eB._1
906- let eC = eB._2
907- $Tuple2([IntegerEntry("EVALONLY_STAKEDAMOUNT", ej)], ej)
920+ let eH = bU(bb, ax, g, bq, bV, bs, bW, ar, as, aq)
921+ let ep = eH._1
922+ let eI = eH._2
923+ $Tuple2([IntegerEntry("EVALONLY_STAKEDAMOUNT", ep)], ep)
908924 }
909925 }
910926
911927
912928
913929 @Callable(ad)
914930 func getShareAssetPriceREADONLY (aq) = {
915- let eD = aZ([aq])
916- $Tuple2(nil, eD[0])
931+ let eJ = aZ([aq])
932+ $Tuple2(nil, eJ[0])
917933 }
918934
919935
920936
921937 @Callable(ad)
922938 func getUserPositionShareAmountREADONLY (aA,bZ) = {
923939 let ax = valueOrErrorMessage(getString(this, (((aA + "_") + bZ) + u)), "Unknown position")
924940 let dR = getIntegerValue(this, (((((ax + "_") + aA) + "_") + bZ) + v))
925941 let dr = dJ(aA, ax, bZ, (dR > 0))
926942 $Tuple2(nil, dr)
927943 }
928944
929945
930946
931947 @Callable(ad)
932-func replenish (ax,eb,ec) = if (if ((100 > eb))
948+func replenish (ax,eh,ei) = if (if ((100 > eh))
933949 then true
934- else (eb > 300))
950+ else (eh > 300))
935951 then throw("Leverage can't be <100 and >300")
936952 else {
937953 let bb = valueOrErrorMessage(getString(this, (L + ax)), "Pool is not inited")
938- let eE = at(Address(fromBase58String(ax)), bb)
939- let bV = eE._1
940- let bW = eE._2
941- let ar = eE._3
942- let as = eE._4
943- let aq = eE._5
944- let eF = if ((size(ad.payments) == 2))
954+ let eK = at(Address(fromBase58String(ax)), bb)
955+ let bV = eK._1
956+ let bW = eK._2
957+ let ar = eK._3
958+ let as = eK._4
959+ let aq = eK._5
960+ let eL = if ((size(ad.payments) == 2))
945961 then if ((aI(ad.payments[0].assetId) != bV))
946962 then throw("Wrong payment asset A")
947963 else if ((aI(ad.payments[1].assetId) != bW))
948964 then throw("Wrong payment asset B")
949965 else $Tuple4(ad.payments[0].amount, bV, ad.payments[1].amount, bW)
950966 else if ((size(ad.payments) == 1))
951967 then if ((aI(ad.payments[0].assetId) == bV))
952968 then $Tuple4(ad.payments[0].amount, bV, 0, bW)
953969 else if ((aI(ad.payments[0].assetId) == bW))
954970 then $Tuple4(0, bV, ad.payments[0].amount, bW)
955971 else throw("Wrong payment")
956972 else throw("One or two payments expected")
957- let bq = eF._1
958- let br = eF._2
959- let bs = eF._3
960- let bt = eF._4
961- let eG = az(ax, toString(ad.caller))
962- if ((eb > 100))
973+ let bq = eL._1
974+ let br = eL._2
975+ let bs = eL._3
976+ let bt = eL._4
977+ let eM = az(ax, toString(ad.caller))
978+ if ((eh > 100))
963979 then {
964980 let bf = ( let an = invoke(Y, "getTWAP60", [br, false], nil)
965981 if ($isInstanceOf(an, "(Int, Int)"))
966982 then an
967983 else throw(($getType(an) + " couldn't be cast to (Int, Int)")))._2
968984 let bg = ( let an = invoke(Y, "getTWAP60", [bt, false], nil)
969985 if ($isInstanceOf(an, "(Int, Int)"))
970986 then an
971987 else throw(($getType(an) + " couldn't be cast to (Int, Int)")))._2
972- let eg = (fraction(bf, bq, pow(10, 0, aK(br), 0, 0, DOWN)) + fraction(bg, bs, pow(10, 0, aK(bt), 0, 0, DOWN)))
973- let dR = fraction(eg, (eb - 100), 100)
974- let dY = makeString([toString(ad.caller), ax, toString(bq), br, toString(bs), bt, toString(ar), toString(as), aq, ec, toString(dR)], ",")
975- let eh = {
988+ let em = (fraction(bf, bq, pow(10, 0, aK(br), 0, 0, DOWN)) + fraction(bg, bs, pow(10, 0, aK(bt), 0, 0, DOWN)))
989+ let dR = fraction(em, (eh - 100), 100)
990+ let dY = makeString([toString(ad.caller), ax, toString(bq), br, toString(bs), bt, toString(ar), toString(as), aq, ei, toString(dR)], ",")
991+ let en = {
976992 let an = invoke(this, "createNewRequest", [dY], nil)
977993 if ($isInstanceOf(an, "Int"))
978994 then an
979995 else throw(($getType(an) + " couldn't be cast to Int"))
980996 }
981- if ((eh == eh))
997+ if ((en == en))
982998 then {
983- let ei = [((toString(ad.caller) + "_") + toString(eG)), aq, ec, dR, toString(this), "replenishFromLand", toString(valueOrErrorMessage(eh, "Can't create new request"))]
984- let ci = reentrantInvoke(aH(), "flashPosition", ei, nil)
999+ let eo = [((toString(ad.caller) + "_") + toString(eM)), aq, ei, dR, toString(this), "replenishFromLand", toString(valueOrErrorMessage(en, "Can't create new request"))]
1000+ let ci = reentrantInvoke(aH(), "flashPosition", eo, nil)
9851001 if ((ci == ci))
9861002 then nil
9871003 else throw("Strict value is not equal to itself.")
9881004 }
9891005 else throw("Strict value is not equal to itself.")
9901006 }
9911007 else {
992- let eH = bU(bb, ax, h, bq, bV, bs, bW, ar, as, aq)
993- let ej = eH._1
994- let eC = eH._2
995- (bX(ax, toString(ad.caller), ej, eC, eG, aq, bb, false) ++ bn(bV, bW, aq))
1008+ let eN = bU(bb, ax, h, bq, bV, bs, bW, ar, as, aq)
1009+ let ep = eN._1
1010+ let eI = eN._2
1011+ (bX(ax, toString(ad.caller), ep, eI, eM, aq, bb, false) ++ bn(bV, bW, aq))
9961012 }
9971013 }
9981014
9991015
10001016
10011017 @Callable(ad)
10021018 func replenishFromLand (dX) = {
1003- let eI = dW(dX)
1004- let aA = eI._1
1005- let ax = eI._2
1006- let bq = eI._3
1007- let bV = eI._4
1008- let bs = eI._5
1009- let bW = eI._6
1010- let ar = eI._7
1011- let as = eI._8
1012- let aq = eI._9
1013- let dZ = eI._10
1014- let ea = eI._11
1019+ let eO = dW(dX)
1020+ let aA = eO._1
1021+ let ax = eO._2
1022+ let bq = eO._3
1023+ let bV = eO._4
1024+ let bs = eO._5
1025+ let bW = eO._6
1026+ let ar = eO._7
1027+ let as = eO._8
1028+ let aq = eO._9
1029+ let dZ = eO._10
1030+ let ea = eO._11
10151031 if ((size(ad.payments) != 1))
10161032 then throw("Wrong payment size")
10171033 else if (if ((aI(ad.payments[0].assetId) != dZ))
10181034 then true
10191035 else (ad.payments[0].amount != ea))
10201036 then throw("Wrong payment")
10211037 else {
1022- let eJ = if ((bV == dZ))
1038+ let eP = if ((bV == dZ))
10231039 then $Tuple2((bq + ad.payments[0].amount), bs)
10241040 else $Tuple2(bq, (bs + ad.payments[0].amount))
1025- let ez = eJ._1
1026- let eA = eJ._2
1041+ let eF = eP._1
1042+ let eG = eP._2
10271043 let bb = valueOrErrorMessage(getString(this, (L + ax)), "Unknown pool")
1028- let eK = bU(bb, ax, g, bq, bV, bs, bW, ar, as, aq)
1029- let ej = eK._1
1030- let eC = eK._2
1044+ let eQ = bU(bb, ax, g, bq, bV, bs, bW, ar, as, aq)
1045+ let ep = eQ._1
1046+ let eI = eQ._2
10311047 let bZ = az(ax, toString(ad.caller))
1032- let eL = [IntegerEntry((((((ax + "_") + aA) + "_") + toString(bZ)) + v), ea), StringEntry((((((ax + "_") + aA) + "_") + toString(bZ)) + w), dZ)]
1033- let eM = bX(ax, aA, ej, eC, bZ, aq, bb, true)
1034- $Tuple2((((eM ++ bn(bV, bW, aq)) ++ eL) :+ DeleteEntry((dX + J))), ej)
1048+ let eR = [IntegerEntry((((((ax + "_") + aA) + "_") + toString(bZ)) + v), ea), StringEntry((((((ax + "_") + aA) + "_") + toString(bZ)) + w), dZ)]
1049+ let eS = bX(ax, aA, ep, eI, bZ, aq, bb, true)
1050+ $Tuple2((((eS ++ bn(bV, bW, aq)) ++ eR) :+ DeleteEntry((dX + J))), ep)
10351051 }
10361052 }
10371053
10381054
10391055
10401056 @Callable(ad)
10411057 func withdraw (ax,dK) = dP(toString(ad.caller), ax, toString(dK), false)
10421058
10431059
10441060
10451061 @Callable(ad)
1046-func createUpdateStopLoss (dK,eN,af,eO) = {
1047- let eP = ( let an = invoke(Y, "getTWAP60", [af, false], nil)
1062+func createUpdateStopLoss (dK,eT,af,eU) = {
1063+ let eV = ( let an = invoke(Y, "getTWAP60", [af, false], nil)
10481064 if ($isInstanceOf(an, "(Int, Int)"))
10491065 then an
10501066 else throw(($getType(an) + " couldn't be cast to (Int, Int)")))._1
1051- if (!(isDefined(getInteger(this, (((((eN + "_") + toString(ad.caller)) + "_") + toString(dK)) + t)))))
1067+ if (!(isDefined(getInteger(this, (((((eT + "_") + toString(ad.caller)) + "_") + toString(dK)) + t)))))
10521068 then throw("There are no user position")
1053- else if ((0 >= eO))
1069+ else if ((0 >= eU))
10541070 then throw("Price must be greater than 0")
1055- else if ((eO > eP))
1071+ else if ((eU > eV))
10561072 then throw("Price must be less than current token price")
1057- else [IntegerEntry((((((((toString(ad.caller) + "_") + toString(dK)) + "_") + eN) + "_") + af) + P), eO)]
1073+ else [IntegerEntry((((((((toString(ad.caller) + "_") + toString(dK)) + "_") + eT) + "_") + af) + P), eU)]
10581074 }
10591075
10601076
10611077
10621078 @Callable(ad)
1063-func deleteStopLoss (dK,eN,af) = if (!(isDefined(getInteger(this, (((((((toString(ad.caller) + "_") + toString(dK)) + "_") + eN) + "_") + af) + P)))))
1079+func deleteStopLoss (dK,eT,af) = if (!(isDefined(getInteger(this, (((((((toString(ad.caller) + "_") + toString(dK)) + "_") + eT) + "_") + af) + P)))))
10641080 then throw("No entry")
1065- else [DeleteEntry((((((((toString(ad.caller) + "_") + toString(dK)) + "_") + eN) + "_") + af) + P))]
1081+ else [DeleteEntry((((((((toString(ad.caller) + "_") + toString(dK)) + "_") + eT) + "_") + af) + P))]
10661082
10671083
10681084
10691085 @Callable(ad)
1070-func createNewRequest (eQ) = valueOrElse(ac(ad), {
1071- let eh = (valueOrElse(getInteger(this, K), 0) + 1)
1072- $Tuple2([StringEntry((toString(eh) + J), eQ), IntegerEntry(K, eh)], eh)
1086+func createNewRequest (eg) = valueOrElse(ac(ad), {
1087+ let en = (valueOrElse(getInteger(this, K), 0) + 1)
1088+ $Tuple2([StringEntry((toString(en) + J), eg), IntegerEntry(K, en)], en)
10731089 })
10741090
10751091
10761092
10771093 @Callable(ad)
10781094 func stopLoss (aA,dK,ax,af) = {
1079- let eP = ( let an = invoke(Y, "getTWAP60", [af, false], nil)
1095+ let eV = ( let an = invoke(Y, "getTWAP60", [af, false], nil)
10801096 if ($isInstanceOf(an, "(Int, Int)"))
10811097 then an
10821098 else throw(($getType(an) + " couldn't be cast to (Int, Int)")))._1
10831099 if (!(isDefined(getInteger(this, (((((((aA + "_") + toString(dK)) + "_") + ax) + "_") + af) + P)))))
10841100 then throw("No entry")
10851101 else (dP(toString(ad.caller), ax, toString(dK), true) :+ DeleteEntry((((((((aA + "_") + toString(dK)) + "_") + ax) + "_") + af) + P)))
10861102 }
10871103
10881104
10891105
10901106 @Callable(ad)
1091-func liquidate (aA,dK,ax,eR) = {
1107+func liquidate (aA,dK,eW) = {
1108+ let ax = valueOrErrorMessage(getString(this, (((aA + "_") + dK) + u)), "no position")
10921109 let bb = valueOrErrorMessage(getString(this, (L + ax)), "Pool is not inited")
1093- let eS = at(Address(fromBase58String(ax)), bb)
1094- let bV = eS._1
1095- let bW = eS._2
1096- let ar = eS._3
1097- let as = eS._4
1098- let aq = eS._5
1099- let dM = valueOrErrorMessage(getInteger(this, (((((ax + "_") + aA) + "_") + toString(dK)) + t)), "Unknown position")
1100- let dN = getIntegerValue(this, (((((ax + "_") + aA) + "_") + toString(dK)) + y))
1101- let dS = aw(ax)
1102- let dT = Address(fromBase58String(aA))
1103- let dR = getIntegerValue(this, (((((ax + "_") + aA) + "_") + toString(dK)) + v))
1104- let dt = getStringValue(this, (((((ax + "_") + aA) + "_") + toString(dK)) + w))
1105- let eT = if ((dR > 0))
1106- then $Tuple2({
1107- let an = invoke(aH(), "getAssetDebt", [false, ((((ax + "_") + aA) + "_") + toString(dK)), dt], nil)
1108- if ($isInstanceOf(an, "Int"))
1109- then an
1110- else throw(($getType(an) + " couldn't be cast to Int"))
1111- }, getIntegerValue(this, (ax + B)))
1112- else $Tuple2(0, getIntegerValue(this, (ax + C)))
1113- let ds = eT._1
1114- let dO = eT._2
1115- let dr = (dM + fraction(dM, (dO - dN), k))
1116- let bm = aZ([aq])[0]
1117- let eU = aN([dt])[0]
1118- let eV = fraction(dr, bm, aK(aq))
1119- let eW = fraction(dR, eU, aM(dt))
1120- let eX = (eV - eW)
1121- nil
1110+ let eX = at(Address(fromBase58String(ax)), bb)
1111+ let bV = eX._1
1112+ let bW = eX._2
1113+ let ar = eX._3
1114+ let as = eX._4
1115+ let aq = eX._5
1116+ let ec = eb(ax, bb, aq, eW)
1117+ let dR = getIntegerValue(this, (((((ax + "_") + aA) + "_") + dK) + v))
1118+ let dt = getStringValue(this, (((((ax + "_") + aA) + "_") + dK) + w))
1119+ let dr = dJ(aA, ax, dK, (dR > 0))
1120+ if ((dR > 0))
1121+ then [IntegerEntry((((((ax + "_") + aA) + "_") + dK) + y), getIntegerValue(this, (ax + B))), IntegerEntry((ax + A), (ay(ax) - eW))]
1122+ else ([IntegerEntry((((((ax + "_") + aA) + "_") + dK) + y), getIntegerValue(this, (ax + C)))] ++ [IntegerEntry((ax + z), (aw(ax) - eW)), IntegerEntry((((((ax + "_") + aA) + "_") + dK) + t), (dr - eW)), ScriptTransfer(ad.caller, ec, fromBase58String(aq))])
11221123 }
11231124
11241125
11251126
11261127 @Callable(ad)
11271128 func capitalizeExKeeper (ax,au,eY,eZ,fa,co,cp,cq,cr,cs,ct,cu) = {
11281129 let fb = if (fa)
11291130 then cg(au, ax)
11301131 else {
11311132 let fc = if ((au == a))
11321133 then aa
11331134 else ab
11341135 $Tuple2(eZ, fc)
11351136 }
11361137 let fd = fb._1
11371138 let fc = fb._2
11381139 let fe = ck(eY, eZ, fc, co, cp, cq, cr, cs, ct, cu)
11391140 let bB = (fd - eZ)
11401141 let ff = if ((bB > 0))
11411142 then [IntegerEntry((ax + N), (bB + valueOrElse(getInteger(this, (ax + N)), 0)))]
11421143 else nil
11431144 (cG(ax, au, eY, fe) ++ ff)
11441145 }
11451146
11461147
11471148
11481149 @Callable(ad)
11491150 func capitalizeExPuzzle (ax,au,eY,eZ,fa,cx,cy,cu) = {
11501151 let fg = if (fa)
11511152 then cg(au, ax)
11521153 else {
11531154 let fc = if ((au == a))
11541155 then aa
11551156 else ab
11561157 $Tuple2(eZ, fc)
11571158 }
11581159 let fd = fg._1
11591160 let fc = fg._2
11601161 let fe = cw(eY, eZ, fc, cx, cy, cu)
11611162 let bB = (fd - eZ)
11621163 let ff = if ((bB > 0))
11631164 then [IntegerEntry((ax + N), (bB + valueOrElse(getInteger(this, (ax + N)), 0)))]
11641165 else nil
11651166 (cG(ax, au, eY, fe) ++ ff)
11661167 }
11671168
11681169
11691170
11701171 @Callable(ad)
11711172 func capitalizeExSwopFi (ax,au,eY,eZ,fa,cA,cB,cC,cD,cE,cF,cu) = {
11721173 let fh = if (fa)
11731174 then cg(au, ax)
11741175 else {
11751176 let fc = if ((au == a))
11761177 then aa
11771178 else ab
11781179 $Tuple2(eZ, fc)
11791180 }
11801181 let fd = fh._1
11811182 let fc = fh._2
11821183 let fe = cz(eY, eZ, fc, cA, cB, cC, cD, cE, cF, cu)
11831184 let bB = (fd - eZ)
11841185 let ff = if ((bB > 0))
11851186 then [IntegerEntry((ax + N), (bB + valueOrElse(getInteger(this, (ax + N)), 0)))]
11861187 else nil
11871188 (cG(ax, au, eY, fe) ++ ff)
11881189 }
11891190
11901191
11911192
11921193 @Callable(ad)
11931194 func initNewPool (au,ak,fi,fj,fk,fl,fm,fn) = if (if ((au != a))
11941195 then (au != b)
11951196 else false)
11961197 then throw("Wrong type")
11971198 else {
11981199 let fo = at(Address(fromBase58String(ak)), au)
11991200 let ao = fo._1
12001201 let ap = fo._2
12011202 let fp = fo._3
12021203 let fq = fo._4
12031204 let aq = fo._5
12041205 [IntegerEntry((ak + D), fi), IntegerEntry((ak + E), fj), IntegerEntry((ak + F), fk), IntegerEntry((ak + G), fl), IntegerEntry((ak + H), fm), IntegerEntry((ak + I), fn), IntegerEntry((ak + B), 0), IntegerEntry((ak + C), 0), StringEntry((L + ak), au), StringEntry((aq + M), ak)]
12051206 }
12061207
12071208
12081209
12091210 @Callable(ad)
12101211 func capitalizeTest (ax,bb,cH,cI) = {
12111212 let ak = Address(fromBase58String(ax))
12121213 let fr = at(ak, bb)
12131214 let bV = fr._1
12141215 let bW = fr._2
12151216 let ar = fr._3
12161217 let as = fr._4
12171218 let aq = fr._5
12181219 let fs = if ((cH == bV))
12191220 then $Tuple2(cI, 0)
12201221 else $Tuple2(0, cI)
12211222 let bq = fs._1
12221223 let bs = fs._2
12231224 let ft = bU(bb, ax, i, bq, bV, bs, bW, ar, as, aq)
12241225 let bY = ft._1
12251226 let cM = ft._2
12261227 let cN = valueOrElse(getInteger(this, (ax + B)), 0)
12271228 let cO = valueOrElse(getInteger(this, (ax + C)), 0)
12281229 let cP = aw(ax)
12291230 let cQ = ay(ax)
12301231 let cR = fraction(cQ, j, cP)
12311232 let cS = fraction(bY, cR, j)
12321233 let cT = (bY - cS)
12331234 let cU = (cN + fraction(cS, k, cQ))
12341235 let cV = (cO + fraction(cT, k, (cP - cQ)))
12351236 let cW = fraction(cS, aB(ax, d), l)
12361237 let cX = fraction(cT, aB(ax, c), l)
12371238 ([IntegerEntry((ax + B), cU), IntegerEntry((ax + C), cV), IntegerEntry((ax + z), (((cP + bY) - cW) - cX)), IntegerEntry((ax + A), ((cQ + cS) - cW)), ScriptTransfer(W, (cW + cX), fromBase58String(aq))] ++ bn(bV, bW, aq))
12381239 }
12391240
12401241
12411242
12421243 @Callable(ad)
12431244 func claimFarmedTest (au,ax) = if ((au == a))
12441245 then {
12451246 let ch = ae(aa)
12461247 if ((ch == ch))
12471248 then {
12481249 let ci = invoke(aD(), "claim", [ax], nil)
12491250 if ((ci == ci))
12501251 then {
12511252 let cj = ae(aa)
12521253 $Tuple2(nil, $Tuple2((cj - ch), aa))
12531254 }
12541255 else throw("Strict value is not equal to itself.")
12551256 }
12561257 else throw("Strict value is not equal to itself.")
12571258 }
12581259 else if ((au == b))
12591260 then {
12601261 let ch = ae(ab)
12611262 if ((ch == ch))
12621263 then {
12631264 let ci = invoke(aE(Address(fromBase58String(ax))), "claimWX", [ax], nil)
12641265 if ((ci == ci))
12651266 then {
12661267 let cj = ae(ab)
12671268 $Tuple2(nil, $Tuple2((cj - ch), ab))
12681269 }
12691270 else throw("Strict value is not equal to itself.")
12701271 }
12711272 else throw("Strict value is not equal to itself.")
12721273 }
12731274 else throw("Wrong pool type")
12741275
12751276
12761277 @Verifier(fu)
12771278 func fv () = sigVerify(fu.bodyBytes, fu.proofs[0], fu.senderPublicKey)
12781279

github/deemru/w8io/169f3d6 
176.90 ms