tx · 4uCgi9fCunMPoQfmBHk13j8x7aQY2QPNforZqdh9Grmf

3MvRWw2FPEimFCTGtK7qY9uAJbM7XJ4ZfJS:  -0.04200000 Waves

2023.07.06 12:10 [2653851] smart account 3MvRWw2FPEimFCTGtK7qY9uAJbM7XJ4ZfJS > SELF 0.00000000 Waves

{ "type": 13, "id": "4uCgi9fCunMPoQfmBHk13j8x7aQY2QPNforZqdh9Grmf", "fee": 4200000, "feeAssetId": null, "timestamp": 1688634662762, "version": 2, "chainId": 84, "sender": "3MvRWw2FPEimFCTGtK7qY9uAJbM7XJ4ZfJS", "senderPublicKey": "HP8sssVq1866F7CaPQJwgFrt6fsqhQjKwM84cL1wjD2a", "proofs": [ "3Z3AAdoY3BvNAYEHwHsqqyAu6q9if6NLryYKpX1xDDJL94tRUxL98miPd1iLppK79pgRXJypohmgDLxBcJvpad5N" ], "script": "base64:BgKPAQgCEgMKAQgSBAoCCAgSBQoDCBgYEgUKAwgBCBIECgIIARIGCgQBCAgBEgUKAwEICBILCgkICAgICAgICAgSAwoBCBIDCgEIEgUKAwgIARIGCgQIAQgIEg4KDAgICAEEERgYEQEBGBIKCggICAgBBAgBGBIOCgwICAgBBBgYGBgYARgSCwoJCAgBAQEBAQEEbgAHU0ZfUE9PTAICU0YAB1dYX1BPT0wCAldYAA9DQVBfRkVFX05PX0xPQU4CCWNhcE5vTG9hbgAMQ0FQX0ZFRV9MT0FOAgdjYXBMb2FuABRTVE9QTE9TU19GRUVfTk9fTE9BTgIOc3RvcExvc3NOb0xvYW4ADVNUT1BMT1NTX0xPQU4CDHN0b3BMb3NzTG9hbgAITE9BTl9GRUUCBGxvYW4AC05PX0xPQU5fRkVFAgZub0xvYW4ABk5PX0ZFRQIFbm9GZWUABlNDQUxFOACAwtcvAAdTQ0FMRTEwAIDIr6AlAAdTQ0FMRTE2CQC2AgEAgICE/qbe4REACkZFRV9TQ0FMRTYAwIQ9ABRrU0ZQb29sQUFzc2V0QmFsYW5jZQIPQV9hc3NldF9iYWxhbmNlABRrU0ZQb29sQkFzc2V0QmFsYW5jZQIPQl9hc3NldF9iYWxhbmNlAA9rU0ZQb29sQUFzc2V0SWQCCkFfYXNzZXRfaWQAD2tTRlBvb2xCQXNzZXRJZAIKQl9hc3NldF9pZAAOa1NGUG9vbFNoYXJlSWQCDnNoYXJlX2Fzc2V0X2lkABJrU0ZQb29sU2hhcmVTdXBwbHkCEnNoYXJlX2Fzc2V0X3N1cHBseQAKa1NGUG9vbEZlZQIKY29tbWlzc2lvbgANa1VzZXJQb3NpdGlvbgIOX3VzZXJfcG9zaXRpb24AEWtVc2VyUG9zaXRpb25Qb29sAhNfdXNlcl9wb3NpdGlvbl9wb29sABFrVXNlckJvcnJvd0Ftb3VudAIcX3VzZXJfcG9zaXRpb25fYm9ycm93X2Ftb3VudAASa1VzZXJCb3Jyb3dBc3NldElkAh5fdXNlcl9wb3NpdGlvbl9ib3Jyb3dfYXNzZXRfaWQAEGtVc2VyUG9zaXRpb25OdW0CFV91c2VyX3Bvc2l0aW9uX251bWJlcgAVa1VzZXJQb3NpdGlvbkludGVyZXN0AhdfdXNlcl9wb3NpdGlvbl9pbnRlcmVzdAAKa1Bvb2xUb3RhbAILX3Bvb2xfdG90YWwADmtQb29sVG90YWxMb2FuAhBfcG9vbF90b3RhbF9sb2FuABFrUG9vbEludGVyZXN0TG9hbgITX3Bvb2xfaW50ZXJlc3RfbG9hbgATa1Bvb2xJbnRlcmVzdE5vTG9hbgIWX3Bvb2xfaW50ZXJlc3Rfbm9fbG9hbgAOa1Bvb2xDYW5Cb3Jyb3cCEF9wb29sX2Nhbl9ib3Jyb3cAFWtBeGx5SW5GZWVXaXRob3V0TG9hbgIWX2F4bHlfZmVlX3dpdGhvdXRfbG9hbgASa0F4bHlJbkZlZVdpdGhMb2FuAhNfYXhseV9mZWVfd2l0aF9sb2FuABFrQXhseU5vTG9hbkNhcEZlZQIXX2F4bHlfZmVlX2NhcF93aXRoX2xvYW4AE2tBeGx5V2l0aExvYW5DYXBGZWUCFV9heGx5X2ZlZV9jYXBfbm9fbG9hbgAWa0F4bHlTdG9wTG9zc05vTG9hbkZlZQIcX2F4bHlfZmVlX3N0b3Bsb3NzX3dpdGhfbG9hbgAUa0F4bHlTdG9wTG9zc0xvYW5GZWUCGl9heGx5X2ZlZV9zdG9wbG9zc19ub19sb2FuAAprUmVxdWVzdElkAgtfcmVxdWVzdF9pZAAMa1JlcXVlc3RJdGVyAg1yZXF1ZXN0c19pdGVyAAVrUG9vbAIFcG9vbF8ACmtTaGFyZVBvb2wCDl9wb29sX3NoYXJlX2lkAA5rUG9vbENhcENoYW5nZQIQX3Bvb2xfY2FwX2NoYW5nZQAPa1Rva2VuTGFzdFByaWNlAgpsYXN0X3ByaWNlAA5rUHJpY2VJbk9yYWNsZQIHX3R3YXA1QgANa1VzZXJTdG9wTG9zcwIKX3N0b3BfbG9zcwAJa01vbmV5Qm94Ag5heGx5X21vbmV5X2JveAAOa1NGRmFybWluZ0FkZHICE3N3b3BmaV9mYXJtaW5nX2FkZHIADGtMZW5kU2VydmljZQIRbGVuZF9zZXJ2aWNlX2FkZHIADGtBZG1pbkNhbGxQSwISYWRtaW5fY2FsbF9wdWJfa2V5AAxrUHJpY2VPcmFjbGUCDHByaWNlX29yYWNsZQALa0V4Q29udHJhY3QCEWV4Y2hhbmdlX2NvbnRyYWN0AA9rV3hTd2FwQ29udHJhY3QCEHd4X3N3YXBfY29udHJhY3QAB2tTd29wSWQCB3N3b3BfaWQABWtXeElkAgV3eF9pZAAIbW9uZXlCb3gJAQdBZGRyZXNzAQkA2QQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwUJa01vbmV5Qm94AhhObyBheGx5IG1vbmV5Qm94IGFkZHJlc3MACmV4Q29udHJhY3QJAQdBZGRyZXNzAQkA2QQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwULa0V4Q29udHJhY3QCHE5vIGV4Y2hhbmdlIGNvbnRyYWN0IGFkZHJlc3MAD3ByaWNlT3JhY2xlQWRkcgkBB0FkZHJlc3MBCQDZBAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzBQxrUHJpY2VPcmFjbGUCF05vIHByaWNlIG9yYWNsZSBhZGRyZXNzAA53eFN3YXBDb250cmFjdAkBB0FkZHJlc3MBCQDZBAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzBQ9rV3hTd2FwQ29udHJhY3QCEk5vIHd4IHN3YXAgYWRkcmVzcwAGU1dPUElECQDZBAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzBQdrU3dvcElkAgpObyBzd29wIGlkAARXWElECQDZBAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzBQVrV3hJZAIITm8gd3ggaWQBDmdldExlbmRTcnZBZGRyAAkBB0FkZHJlc3MBCQDZBAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzBQxrTGVuZFNlcnZpY2UCG0Nhbid0IGdldCBsZW5kIHNlcnZpY2UgYWRkcgEQZ2V0QWRtaW5DYWxsQWRkcgAJAKcIAQkA2QQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwUMa0FkbWluQ2FsbFBLAhRDYW4ndCBnZXQgYWRtaW4gYWRkcgELaXNBZG1pbkNhbGwBAWkDCQAAAggFAWkGY2FsbGVyCQEQZ2V0QWRtaW5DYWxsQWRkcgAFBHVuaXQJAAIBAiFPbmx5IGFkbWluIGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24BCmlzU2VsZkNhbGwBAWkDCQAAAggFAWkGY2FsbGVyBQR0aGlzBQR1bml0CQACAQIrT25seSBjb250cmFjdCBpdHNlbGYgY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgEKaXNMYW5kQ2FsbAEBaQMJAAACCAUBaQZjYWxsZXIJAQ5nZXRMZW5kU3J2QWRkcgAFBHVuaXQJAAIBAilPbmx5IGxhbmQgY29udHJhY3QgY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgEOYWNjb3VudEJhbGFuY2UBB2Fzc2V0SWQEByRtYXRjaDAFB2Fzc2V0SWQDCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQCaWQFByRtYXRjaDAJAPAHAgUEdGhpcwUCaWQDCQABAgUHJG1hdGNoMAIEVW5pdAQFd2F2ZXMFByRtYXRjaDAICQDvBwEFBHRoaXMJYXZhaWxhYmxlCQACAQILTWF0Y2ggZXJyb3IBEWdldFNGUG9vbEJhbGFuY2VzAQhwb29sQWRkcgkAlAoCCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUIcG9vbEFkZHIFFGtTRlBvb2xBQXNzZXRCYWxhbmNlAh5DYW4ndCBnZXQgcG9vbCBBIGFzc2V0IGJhbGFuY2UJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQhwb29sQWRkcgUUa1NGUG9vbEJBc3NldEJhbGFuY2UCHkNhbid0IGdldCBwb29sIEIgYXNzZXQgYmFsYW5jZQERZ2V0V1hQb29sQmFsYW5jZXMDCHBvb2xBZGRyA2FJZANiSWQJAJQKAgoAAUAJAPwHBAUIcG9vbEFkZHICHGdldEFjY0JhbGFuY2VXcmFwcGVyUkVBRE9OTFkJAMwIAgUDYUlkBQNuaWwFA25pbAMJAAECBQFAAgNJbnQFAUAJAAIBCQCsAgIJAAMBBQFAAhggY291bGRuJ3QgYmUgY2FzdCB0byBJbnQKAAFACQD8BwQFCHBvb2xBZGRyAhxnZXRBY2NCYWxhbmNlV3JhcHBlclJFQURPTkxZCQDMCAIFA2JJZAUDbmlsBQNuaWwDCQABAgUBQAIDSW50BQFACQACAQkArAICCQADAQUBQAIYIGNvdWxkbid0IGJlIGNhc3QgdG8gSW50AQ9nZXRQb29sQmFsYW5jZXMECHBvb2xBZGRyBHR5cGUDYUlkA2JJZAMJAAACBQR0eXBlBQdTRl9QT09MCQERZ2V0U0ZQb29sQmFsYW5jZXMBBQhwb29sQWRkcgMJAAACBQR0eXBlBQdXWF9QT09MCQERZ2V0V1hQb29sQmFsYW5jZXMDBQhwb29sQWRkcgUDYUlkBQNiSWQJAAIBAg9Xcm9uZyBwb29sIHR5cGUBDWdldFNGUG9vbERhdGEBCHBvb2xBZGRyBAskdDA1OTM2NTk4NQkBEWdldFNGUG9vbEJhbGFuY2VzAQUIcG9vbEFkZHIDCQAAAgULJHQwNTkzNjU5ODUFCyR0MDU5MzY1OTg1BARiYWxCCAULJHQwNTkzNjU5ODUCXzIEBGJhbEEIBQskdDA1OTM2NTk4NQJfMQkAlwoFCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUIcG9vbEFkZHIFD2tTRlBvb2xBQXNzZXRJZAIZQ2FuJ3QgZ2V0IHBvb2wgQSBhc3NldCBpZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFCHBvb2xBZGRyBQ9rU0ZQb29sQkFzc2V0SWQCGUNhbid0IGdldCBwb29sIEIgYXNzZXQgaWQFBGJhbEEFBGJhbEIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQhwb29sQWRkcgUOa1NGUG9vbFNoYXJlSWQCGENhbid0IGdldCBzaGFyZSBhc3NldCBpZAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgENZ2V0V1hQb29sRGF0YQEIcG9vbEFkZHIEA2NmZwoAAUAJAPwHBAUIcG9vbEFkZHICHGdldFBvb2xDb25maWdXcmFwcGVyUkVBRE9OTFkFA25pbAUDbmlsAwkAAQIFAUACCUxpc3RbQW55XQUBQAkAAgEJAKwCAgkAAwEFAUACHiBjb3VsZG4ndCBiZSBjYXN0IHRvIExpc3RbQW55XQMJAAACBQNjZmcFA2NmZwQDYUlkCQETdmFsdWVPckVycm9yTWVzc2FnZQIKAAFACQCRAwIFA2NmZwAEAwkAAQIFAUACBlN0cmluZwUBQAUEdW5pdAIZQ2FuJ3QgZ2V0IHBvb2wgQSBhc3NldCBpZAQDYklkCQETdmFsdWVPckVycm9yTWVzc2FnZQIKAAFACQCRAwIFA2NmZwAFAwkAAQIFAUACBlN0cmluZwUBQAUEdW5pdAIZQ2FuJ3QgZ2V0IHBvb2wgQiBhc3NldCBpZAQHc2hhcmVJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCgABQAkAkQMCBQNjZmcAAwMJAAECBQFAAgZTdHJpbmcFAUAFBHVuaXQCGkNhbid0IGdldCBwb29sIExQIGFzc2V0IGlkBAskdDA2NjYwNjcxOQkBEWdldFdYUG9vbEJhbGFuY2VzAwUIcG9vbEFkZHIFA2FJZAUDYklkAwkAAAIFCyR0MDY2NjA2NzE5BQskdDA2NjYwNjcxOQQEYmFsQggFCyR0MDY2NjA2NzE5Al8yBARiYWxBCAULJHQwNjY2MDY3MTkCXzEJAJcKBQUDYUlkBQNiSWQFBGJhbEEFBGJhbEIFB3NoYXJlSWQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BC2dldFBvb2xEYXRhAghwb29sQWRkcgR0eXBlAwkAAAIFBHR5cGUFB1NGX1BPT0wJAQ1nZXRTRlBvb2xEYXRhAQUIcG9vbEFkZHIDCQAAAgUEdHlwZQUHV1hfUE9PTAkBDWdldFdYUG9vbERhdGEBBQhwb29sQWRkcgkAAgECD1dyb25nIHBvb2wgdHlwZQEOZ2V0U2hhcmVTdXBwbHkDCHBvb2xBZGRyBHR5cGUHc2hhcmVJZAMJAAACBQR0eXBlBQdTRl9QT09MCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUIcG9vbEFkZHIFEmtTRlBvb2xTaGFyZVN1cHBseQIcQ2FuJ3QgZ2V0IHNoYXJlIGFzc2V0IHN1cHBseQMJAAACBQR0eXBlBQdXWF9QT09MCAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDsBwEJANkEAQUHc2hhcmVJZAINV3JvbmcgU2hhcmVJZAhxdWFudGl0eQkAAgECD1dyb25nIHBvb2wgdHlwZQERZ2V0UG9vbFRvdGFsU2hhcmUBBHBvb2wJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICBQRwb29sBQprUG9vbFRvdGFsAAABGWdldFBvb2xUb3RhbFNoYXJlV2l0aExvYW4BBHBvb2wJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICBQRwb29sBQ5rUG9vbFRvdGFsTG9hbgAAARhnZXROZXdVc2VyUG9zaXRpb25OdW1iZXIBBHVzZXIJAGQCCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgUEdXNlcgUQa1VzZXJQb3NpdGlvbk51bQAAAAEBCmdldEF4bHlGZWUCBHBvb2wHZmVlVHlwZQMJAAACBQdmZWVUeXBlBQxDQVBfRkVFX0xPQU4JARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgUEcG9vbAUTa0F4bHlXaXRoTG9hbkNhcEZlZQMJAAACBQdmZWVUeXBlBQ9DQVBfRkVFX05PX0xPQU4JARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgUEcG9vbAURa0F4bHlOb0xvYW5DYXBGZWUDCQAAAgUHZmVlVHlwZQUITE9BTl9GRUUJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgUEcG9vbAUSa0F4bHlJbkZlZVdpdGhMb2FuAwkAAAIFB2ZlZVR5cGUFC05PX0xPQU5fRkVFCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQCsAgIFBHBvb2wFFWtBeGx5SW5GZWVXaXRob3V0TG9hbgMJAAACBQdmZWVUeXBlBQZOT19GRUUAAAkAAgECDldyb25nIGZlZSB0eXBlARBnZXRTRkZhcm1pbmdBZGRyAAkBB0FkZHJlc3MBCQDZBAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzBQ5rU0ZGYXJtaW5nQWRkcgIdQ2FuJ3QgZ2V0IHN3b3BmaSBmYXJtaW5nIGFkZHIBEGdldFdYRmFybWluZ0FkZHIBCHBvb2xBZGRyBAlmQ29udHJhY3QJAQdBZGRyZXNzAQkA2QQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUIcG9vbEFkZHICEyVzX19mYWN0b3J5Q29udHJhY3QCIkNhbid0IGdldCBXWCBmYWN0b3J5IGNvbnRyYWN0IGFkZHIECmZhY3Ryb3lDZmcJALUJAgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFCWZDb250cmFjdAIRJXNfX2ZhY3RvcnlDb25maWcCGENhbid0IGdldCBXWCBmYWN0b3J5IGNmZwICX18JAQdBZGRyZXNzAQkA2QQBCQCRAwIFCmZhY3Ryb3lDZmcAAQEMYXNzZXRJZFRvU3RyAQdhc3NldElkBAckbWF0Y2gwBQdhc3NldElkAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEAmlkBQckbWF0Y2gwCQDYBAEFAmlkAwkAAQIFByRtYXRjaDACBFVuaXQEBXdhdmVzBQckbWF0Y2gwAgVXQVZFUwkAAgECDE5vdCBBc3NldCBpZAEOYXNzZXRJZEZyb21TdHIBB2Fzc2V0SWQDCQAAAgUHYXNzZXRJZAIFV0FWRVMFBHVuaXQJANkEAQUHYXNzZXRJZAEQZ2V0QXNzZXREZWNpbWFscwEHYXNzZXRJZAMJAAACBQdhc3NldElkAgVXQVZFUwAIBAckbWF0Y2gwCQDsBwEJANkEAQUHYXNzZXRJZAMJAAECBQckbWF0Y2gwAgVBc3NldAQFYXNzZXQFByRtYXRjaDAIBQVhc3NldAhkZWNpbWFscwkAAgECEENhbid0IGZpbmQgYXNzZXQBEWdldEFzc2V0UHJlY2l0aW9uAQdhc3NldElkCQBsBgAKAAAJARBnZXRBc3NldERlY2ltYWxzAQUHYXNzZXRJZAAAAAAFBERPV04BDmdldEFzc2V0c1ByaWNlAQhhc3NldElkcwoBCWdldFByaWNlcwIBYQdhc3NldElkBAphc3NldFByaWNlCQERQGV4dHJOYXRpdmUoMTA1MCkCBQ9wcmljZU9yYWNsZUFkZHIJAKwCAgUHYXNzZXRJZAUOa1ByaWNlSW5PcmFjbGUJAM0IAgUBYQUKYXNzZXRQcmljZQoAAiRsBQhhc3NldElkcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEJZ2V0UHJpY2VzAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyA1MAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAAZABoAGwAcAB0AHgAfACAAIQAiACMAJAAlACYAJwAoACkAKgArACwALQAuAC8AMAAxADIBDWdldFNoYXJlUHJpY2UBB3NoYXJlSWQEBHBvb2wJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzCQCsAgIFB3NoYXJlSWQFCmtTaGFyZVBvb2wCIENhbid0IGZpbmQgcG9vbCBhZGRyIGJ5IHNoYXJlIGlkBAhwb29sQWRkcgkBB0FkZHJlc3MBCQDZBAEFBHBvb2wEBXBUeXBlCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwkArAICBQVrUG9vbAUEcG9vbAISUG9vbCBpcyBub3QgaW5pdGVkBAskdDA5NzExOTc3NgkBC2dldFBvb2xEYXRhAgUIcG9vbEFkZHIFBXBUeXBlBANhSWQIBQskdDA5NzExOTc3NgJfMQQDYklkCAULJHQwOTcxMTk3NzYCXzIECGFCYWxhbmNlCAULJHQwOTcxMTk3NzYCXzMECGJCYWxhbmNlCAULJHQwOTcxMTk3NzYCXzQEB2RQcmljZUEJARFAZXh0ck5hdGl2ZSgxMDUwKQIFD3ByaWNlT3JhY2xlQWRkcgkArAICBQNhSWQFDmtQcmljZUluT3JhY2xlBAdkUHJpY2VCCQERQGV4dHJOYXRpdmUoMTA1MCkCBQ9wcmljZU9yYWNsZUFkZHIJAKwCAgUDYklkBQ5rUHJpY2VJbk9yYWNsZQQLc2hhcmVTdXBwbHkJAQ5nZXRTaGFyZVN1cHBseQMFCHBvb2xBZGRyBQVwVHlwZQUHc2hhcmVJZAQKQVByZWNpc2lvbgkAbAYACgAACQEQZ2V0QXNzZXREZWNpbWFscwEFA2FJZAAAAAAFBERPV04ECkJQcmVjaXNpb24JAGwGAAoAAAkBEGdldEFzc2V0RGVjaW1hbHMBBQNiSWQAAAAABQRET1dOBA5zaGFyZVByZWNpc2lvbgkAbAYACgAACQEQZ2V0QXNzZXREZWNpbWFscwEFB3NoYXJlSWQAAAAABQRET1dOBANzdW0JAGQCCQBrAwUIYUJhbGFuY2UFB2RQcmljZUEFCkFQcmVjaXNpb24JAGsDBQhiQmFsYW5jZQUHZFByaWNlQgUKQlByZWNpc2lvbgkAawMFA3N1bQUOc2hhcmVQcmVjaXNpb24FC3NoYXJlU3VwcGx5AQ5nZXRTaGFyZVByaWNlcwEIc2hhcmVJZHMKAQlnZXRQcmljZXMCAWEHc2hhcmVJZAkAzQgCBQFhCQENZ2V0U2hhcmVQcmljZQEFB3NoYXJlSWQKAAIkbAUIc2hhcmVJZHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCWdldFByaWNlcwIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMjAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUAQ5nZXRDdXJzRW50cmllcwQDYUlkA2JJZAdzaGFyZUlkCHdBbW91bnRzBAxhc3NldHNQcmljZXMJAQ5nZXRBc3NldHNQcmljZQEJAMwIAgUDYUlkCQDMCAIFA2JJZAUDbmlsBApzaGFyZVByaWNlCQENZ2V0U2hhcmVQcmljZQEFB3NoYXJlSWQEBnByaWNlcwkAzggCCQDMCAIJAKQDAQkAkQMCBQxhc3NldHNQcmljZXMAAAkAzAgCCQCkAwEJAJEDAgUMYXNzZXRzUHJpY2VzAAEJAMwIAgkApAMBBQpzaGFyZVByaWNlBQNuaWwFCHdBbW91bnRzCQDMCAIJAQtTdHJpbmdFbnRyeQIFD2tUb2tlbkxhc3RQcmljZQkAuQkCBQZwcmljZXMCASwFA25pbAEYY2FsY1JlcGxlbmlzaEJ5VHdvVG9rZW5zCAVwVHlwZQhwb29sQWRkcgRwbXRBA2FJZARwbXRCA2JJZARiYWxBBGJhbEIDCQAAAgUFcFR5cGUFB1NGX1BPT0wEBHJlcGwKAAFACQD8BwQFCHBvb2xBZGRyAgxjYWxsRnVuY3Rpb24JAMwIAgIgY2FsY0xQUmVwbGVuaXNoVHdvVG9rZW5zUkVBRE9OTFkJAMwIAgkAzAgCCQCkAwEFBHBtdEEJAMwIAgkApAMBBQRwbXRCBQNuaWwFA25pbAUDbmlsAwkAAQIFAUACCUxpc3RbQW55XQUBQAkAAgEJAKwCAgkAAwEFAUACHiBjb3VsZG4ndCBiZSBjYXN0IHRvIExpc3RbQW55XQMJAAACBQRyZXBsBQRyZXBsCQCXCgUKAAFACQCRAwIFBHJlcGwAAwMJAAECBQFAAgNJbnQFAUAJAAIBCQCsAgIJAAMBBQFAAhggY291bGRuJ3QgYmUgY2FzdCB0byBJbnQKAAFACQCRAwIFBHJlcGwABAMJAAECBQFAAgNJbnQFAUAJAAIBCQCsAgIJAAMBBQFAAhggY291bGRuJ3QgYmUgY2FzdCB0byBJbnQKAAFACQCRAwIFBHJlcGwAAQMJAAECBQFAAgNJbnQFAUAJAAIBCQCsAgIJAAMBBQFAAhggY291bGRuJ3QgYmUgY2FzdCB0byBJbnQJAQxhc3NldElkVG9TdHIBCQCRAwIFBHJlcGwAAgoAAUAJAJEDAgUEcmVwbAAAAwkAAQIFAUACA0ludAUBQAkAAgEJAKwCAgkAAwEFAUACGCBjb3VsZG4ndCBiZSBjYXN0IHRvIEludAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgQNJHQwMTEyOTYxMTU0NgkAlAoCCQC1CQIKAAFACQD8BwQFCHBvb2xBZGRyAiBldmFsdWF0ZVB1dEJ5QW1vdW50QXNzZXRSRUFET05MWQkAzAgCBQRwbXRBBQNuaWwFA25pbAMJAAECBQFAAgZTdHJpbmcFAUAJAAIBCQCsAgIJAAMBBQFAAhsgY291bGRuJ3QgYmUgY2FzdCB0byBTdHJpbmcCAl9fCQC1CQIKAAFACQD8BwQFCHBvb2xBZGRyAh9ldmFsdWF0ZVB1dEJ5UHJpY2VBc3NldFJFQURPTkxZCQDMCAIFBHBtdEIFA25pbAUDbmlsAwkAAQIFAUACBlN0cmluZwUBQAkAAgEJAKwCAgkAAwEFAUACGyBjb3VsZG4ndCBiZSBjYXN0IHRvIFN0cmluZwICX18DCQAAAgUNJHQwMTEyOTYxMTU0NgUNJHQwMTEyOTYxMTU0NgQKZXZhbFB1dEluQggFDSR0MDExMjk2MTE1NDYCXzIECmV2YWxQdXRJbkEIBQ0kdDAxMTI5NjExNTQ2Al8xBAVscEluQQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCmV2YWxQdXRJbkEAAQQFbHBJbkIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQpldmFsUHV0SW5CAAEDCQBmAgUFbHBJbkIFBWxwSW5BBANwbXQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQpldmFsUHV0SW5BAAgJAJcKBQUEcG10QQUDcG10CQBlAgUEcG10QgUDcG10BQNiSWQFBWxwSW5CBANwbXQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQpldmFsUHV0SW5CAAcJAJcKBQUDcG10BQRwbXRCCQBlAgUEcG10QQUDcG10BQNhSWQFBWxwSW5BCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuARhyZXBsZW5pc2hUd29Ub2tlbnNCeVR5cGUGCHBvb2xBZGRyBXBUeXBlBHBtdEEDYUlkBHBtdEIDYklkBAhwYXltZW50cwkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBDmFzc2V0SWRGcm9tU3RyAQUDYUlkBQRwbXRBCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQEOYXNzZXRJZEZyb21TdHIBBQNiSWQFBHBtdEIFA25pbAMJAAACBQVwVHlwZQUHU0ZfUE9PTAkA/AcEBQhwb29sQWRkcgIMY2FsbEZ1bmN0aW9uCQDMCAICFnJlcGxlbmlzaFdpdGhUd29Ub2tlbnMJAMwIAgkAzAgCAgVmYWxzZQkAzAgCAgEwBQNuaWwFA25pbAUIcGF5bWVudHMJAPwHBAUIcG9vbEFkZHICA3B1dAkAzAgCAMCEPQkAzAgCBwUDbmlsBQhwYXltZW50cwEXcmVwbGVuaXNoT25lVG9rZW5CeVR5cGUECHBvb2xBZGRyBXBUeXBlA3BtdAVwbXRJZAQIcGF5bWVudHMJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQ5hc3NldElkRnJvbVN0cgEFBXBtdElkBQNwbXQFA25pbAMJAAACBQVwVHlwZQUHU0ZfUE9PTAkA/AcEBQhwb29sQWRkcgIMY2FsbEZ1bmN0aW9uCQDMCAICFXJlcGxlbmlzaFdpdGhPbmVUb2tlbgkAzAgCCQDMCAICATAJAMwIAgIFZmFsc2UJAMwIAgIBMAUDbmlsBQNuaWwFCHBheW1lbnRzCQD8BwQFCHBvb2xBZGRyAglwdXRPbmVUa24JAMwIAgAACQDMCAIHBQNuaWwFCHBheW1lbnRzAQdzdGFrZUxQBARwb29sBXBUeXBlB3NoYXJlSWQGYW1vdW50BAhwYXltZW50cwkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkA2QQBBQdzaGFyZUlkBQZhbW91bnQFA25pbAMJAAACBQVwVHlwZQUHU0ZfUE9PTAkA/AcECQEQZ2V0U0ZGYXJtaW5nQWRkcgACD2xvY2tTaGFyZVRva2VucwkAzAgCBQRwb29sCQDMCAIAAAUDbmlsBQhwYXltZW50cwkA/AcECQEQZ2V0V1hGYXJtaW5nQWRkcgEJARFAZXh0ck5hdGl2ZSgxMDYyKQEFBHBvb2wCBXN0YWtlBQNuaWwFCHBheW1lbnRzAQl1bnN0YWtlTFAEBHBvb2wFcFR5cGUHc2hhcmVJZAZhbW91bnQEDSR0MDEzMDMxMTMzODgDCQAAAgUFcFR5cGUFB1NGX1BPT0wJAJUKAwkBEGdldFNGRmFybWluZ0FkZHIAAhN3aXRoZHJhd1NoYXJlVG9rZW5zCQDMCAIFBHBvb2wJAMwIAgUGYW1vdW50BQNuaWwDCQAAAgUFcFR5cGUFB1dYX1BPT0wJAJUKAwkBEGdldFdYRmFybWluZ0FkZHIBCQEHQWRkcmVzcwEJANkEAQUEcG9vbAIHdW5zdGFrZQkAzAgCBQdzaGFyZUlkCQDMCAIFBmFtb3VudAUDbmlsCQACAQIPV3JvbmcgcG9vbCB0eXBlBAhmYXJtQWRkcggFDSR0MDEzMDMxMTMzODgCXzEEBWZOYW1lCAUNJHQwMTMwMzExMzM4OAJfMgQGcGFyYW1zCAUNJHQwMTMwMzExMzM4OAJfMwQDaW52CQD8BwQFCGZhcm1BZGRyBQVmTmFtZQUGcGFyYW1zBQNuaWwDCQAAAgUDaW52BQNpbnYFBmFtb3VudAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgERY2FsY0Ftb3VudFRvUGF5U0YHBHBvb2wIYXNzZXRJZEEIYXNzZXRJZEIEYmFsQQRiYWxCEGFtb3VudFRva2VuVG9HZXQPYXNzZXRUb2tlblRvR2V0BAhwb29sQWRkcgkBB0FkZHJlc3MBCQDZBAEFBHBvb2wECWZlZVNjYWxlNgDAhD0EA2ZlZQkBEUBleHRyTmF0aXZlKDEwNTApAgUIcG9vbEFkZHIFCmtTRlBvb2xGZWUEDGFtbnRHZXROb0ZlZQkAbgQFEGFtb3VudFRva2VuVG9HZXQFCWZlZVNjYWxlNgkAZQIFCWZlZVNjYWxlNgUDZmVlBQdDRUlMSU5HBA0kdDAxMzgxMDE0MTE2AwkAAAIFD2Fzc2V0VG9rZW5Ub0dldAUIYXNzZXRJZEEEC2Ftb3VudFRvUGF5CQBuBAUMYW1udEdldE5vRmVlBQRiYWxCCQBlAgUEYmFsQQUMYW1udEdldE5vRmVlBQdDRUlMSU5HCQCUCgIFC2Ftb3VudFRvUGF5BQhhc3NldElkQgQLYW1vdW50VG9QYXkJAG4EBQxhbW50R2V0Tm9GZWUFBGJhbEEJAGUCBQRiYWxCBQxhbW50R2V0Tm9GZWUFB0NFSUxJTkcJAJQKAgULYW1vdW50VG9QYXkFCGFzc2V0SWRBBAthbW91bnRUb1BheQgFDSR0MDEzODEwMTQxMTYCXzEECmFzc2V0VG9QYXkIBQ0kdDAxMzgxMDE0MTE2Al8yCQCUCgIFCmFzc2V0VG9QYXkFC2Ftb3VudFRvUGF5ARFjYWxjQW1vdW50VG9QYXlXWAcEcG9vbAhhc3NldElkQQhhc3NldElkQgRiYWxBBGJhbEIQYW1vdW50VG9rZW5Ub0dldA9hc3NldFRva2VuVG9HZXQEBXByRmVlCQERQGV4dHJOYXRpdmUoMTA1MCkCBQ53eFN3YXBDb250cmFjdAIPJXNfX3Byb3RvY29sRmVlBARwRmVlCQERQGV4dHJOYXRpdmUoMTA1MCkCBQ53eFN3YXBDb250cmFjdAILJXNfX3Bvb2xGZWUECGZlZVNjYWxlCQC2AgEAgMLXLwQNJHQwMTQ0NTUxNDc2MwMJAAACBQ9hc3NldFRva2VuVG9HZXQFCGFzc2V0SWRBBAthbW91bnRUb1BheQkAawMFEGFtb3VudFRva2VuVG9HZXQFBGJhbEIJAGUCBQRiYWxBBRBhbW91bnRUb2tlblRvR2V0CQCUCgIFC2Ftb3VudFRvUGF5BQhhc3NldElkQgQLYW1vdW50VG9QYXkJAGsDBRBhbW91bnRUb2tlblRvR2V0BQRiYWxBCQBlAgUEYmFsQgUQYW1vdW50VG9rZW5Ub0dldAkAlAoCBQthbW91bnRUb1BheQUIYXNzZXRJZEEEC2Ftb3VudFRvUGF5CAUNJHQwMTQ0NTUxNDc2MwJfMQQKYXNzZXRUb1BheQgFDSR0MDE0NDU1MTQ3NjMCXzIEEmFtb3VudFRvUGF5V2l0aEZlZQkAoAMBCQC9AgQJALYCAQULYW1vdW50VG9QYXkFCGZlZVNjYWxlCQC4AgIFCGZlZVNjYWxlCQC2AgEJAGQCBQVwckZlZQUEcEZlZQUHQ0VJTElORwkAlAoCBQphc3NldFRvUGF5BRJhbW91bnRUb1BheVdpdGhGZWUBEGV4Y2hhbmdlRGlyZWN0bHkIBHR5cGUEcG9vbAhhc3NldElkQQhhc3NldElkQgRiYWxBBGJhbEIQYW1vdW50VG9rZW5Ub0dldA9hc3NldFRva2VuVG9HZXQDCQAAAgUEdHlwZQUHU0ZfUE9PTAQNJHQwMTUxMDgxNTIzMAkBEWNhbGNBbW91bnRUb1BheVNGBwUEcG9vbAUIYXNzZXRJZEEFCGFzc2V0SWRCBQRiYWxBBQRiYWxCBRBhbW91bnRUb2tlblRvR2V0BQ9hc3NldFRva2VuVG9HZXQECmFzc2V0VG9QYXkIBQ0kdDAxNTEwODE1MjMwAl8xBAthbW91bnRUb1BheQgFDSR0MDE1MTA4MTUyMzACXzIJAPwHBAkBEUBleHRyTmF0aXZlKDEwNjIpAQUEcG9vbAIMY2FsbEZ1bmN0aW9uCQDMCAICCGV4Y2hhbmdlCQDMCAIJAMwIAgkApAMBBRBhbW91bnRUb2tlblRvR2V0BQNuaWwFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBDmFzc2V0SWRGcm9tU3RyAQUKYXNzZXRUb1BheQULYW1vdW50VG9QYXkFA25pbAQNJHQwMTU0MDUxNTUyNwkBEWNhbGNBbW91bnRUb1BheVdYBwUEcG9vbAUIYXNzZXRJZEEFCGFzc2V0SWRCBQRiYWxBBQRiYWxCBRBhbW91bnRUb2tlblRvR2V0BQ9hc3NldFRva2VuVG9HZXQECmFzc2V0VG9QYXkIBQ0kdDAxNTQwNTE1NTI3Al8xBAthbW91bnRUb1BheQgFDSR0MDE1NDA1MTU1MjcCXzIJAPwHBAUOd3hTd2FwQ29udHJhY3QCBHN3YXAJAMwIAgUQYW1vdW50VG9rZW5Ub0dldAkAzAgCBQ9hc3NldFRva2VuVG9HZXQJAMwIAgkApQgBBQR0aGlzBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQ5hc3NldElkRnJvbVN0cgEFCmFzc2V0VG9QYXkFC2Ftb3VudFRvUGF5BQNuaWwBGmNhbGNXaXRoZHJhd0xQRnJvbVBvb2xWaXJ0BAhwb29sQWRkcgVwVHlwZQdzaGFyZUlkD3VzZXJDYW5XaXRoZHJhdwQNJHQwMTU3ODkxNjE3NgMJAAACBQVwVHlwZQUHU0ZfUE9PTAQDaW52CgABQAkA/AcEBQhwb29sQWRkcgIMY2FsbEZ1bmN0aW9uCQDMCAICEHdpdGhkcmF3UkVBRE9OTFkJAMwIAgkAzAgCCQCkAwEFD3VzZXJDYW5XaXRoZHJhdwUDbmlsBQNuaWwFA25pbAMJAAECBQFAAgooSW50LCBJbnQpBQFACQACAQkArAICCQADAQUBQAIfIGNvdWxkbid0IGJlIGNhc3QgdG8gKEludCwgSW50KQMJAAACBQNpbnYFA2ludgkAlAoCCAUDaW52Al8xCAUDaW52Al8yCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBANpbnYJALUJAgoAAUAJAPwHBAUIcG9vbEFkZHICE2V2YWx1YXRlR2V0UkVBRE9OTFkJAMwIAgUHc2hhcmVJZAkAzAgCBQ91c2VyQ2FuV2l0aGRyYXcFA25pbAUDbmlsAwkAAQIFAUACBlN0cmluZwUBQAkAAgEJAKwCAgkAAwEFAUACGyBjb3VsZG4ndCBiZSBjYXN0IHRvIFN0cmluZwICX18DCQAAAgUDaW52BQNpbnYJAJQKAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFA2ludgABCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUDaW52AAIJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4EB2Ftb3VudEEIBQ0kdDAxNTc4OTE2MTc2Al8xBAdhbW91bnRCCAUNJHQwMTU3ODkxNjE3NgJfMgkAlAoCBQdhbW91bnRBBQdhbW91bnRCAQtjbGFpbUZhcm1lZAIEdHlwZQRwb29sAwkAAAIFBHR5cGUFB1NGX1BPT0wECWJhbEJlZm9yZQkBDmFjY291bnRCYWxhbmNlAQUGU1dPUElEAwkAAAIFCWJhbEJlZm9yZQUJYmFsQmVmb3JlBANpbnYJAPwHBAkBEGdldFNGRmFybWluZ0FkZHIAAgVjbGFpbQkAzAgCBQRwb29sBQNuaWwFA25pbAMJAAACBQNpbnYFA2ludgQIYmFsQWZ0ZXIJAQ5hY2NvdW50QmFsYW5jZQEFBlNXT1BJRAkAlAoCCQBlAgUIYmFsQWZ0ZXIFCWJhbEJlZm9yZQUGU1dPUElECQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAwkAAAIFBHR5cGUFB1dYX1BPT0wECWJhbEJlZm9yZQkBDmFjY291bnRCYWxhbmNlAQUEV1hJRAMJAAACBQliYWxCZWZvcmUFCWJhbEJlZm9yZQQDaW52CQD8BwQJARBnZXRXWEZhcm1pbmdBZGRyAQkBB0FkZHJlc3MBCQDZBAEFBHBvb2wCB2NsYWltV1gJAMwIAgUEcG9vbAUDbmlsBQNuaWwDCQAAAgUDaW52BQNpbnYECGJhbEFmdGVyCQEOYWNjb3VudEJhbGFuY2UBBQRXWElECQCUCgIJAGUCBQhiYWxBZnRlcgUJYmFsQmVmb3JlBQRXWElECQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIPV3JvbmcgcG9vbCB0eXBlAQ9yZXBsZW5pc2hCeVR5cGUKBXBUeXBlBHBvb2wHZmVlVHlwZQRwbXRBA2FJZARwbXRCA2JJZARiYWxBBGJhbEIETFBJZAQPbHBCYWxhbmNlQmVmb3JlCQEOYWNjb3VudEJhbGFuY2UBCQDZBAEFBExQSWQDCQAAAgUPbHBCYWxhbmNlQmVmb3JlBQ9scEJhbGFuY2VCZWZvcmUECHBvb2xBZGRyCQERQGV4dHJOYXRpdmUoMTA2MikBBQRwb29sBA0kdDAxNzE2MjE3NTc4AwMJAGYCBQRwbXRBAAAJAGYCBQRwbXRCAAAHBA0kdDAxNzIyODE3MzQ0CQEYY2FsY1JlcGxlbmlzaEJ5VHdvVG9rZW5zCAUFcFR5cGUFCHBvb2xBZGRyBQRwbXRBBQNhSWQFBHBtdEIFA2JJZAUEYmFsQQUEYmFsQgQGcG10SW5BCAUNJHQwMTcyMjgxNzM0NAJfMQQGcG10SW5CCAUNJHQwMTcyMjgxNzM0NAJfMgQGY2hhbmdlCAUNJHQwMTcyMjgxNzM0NAJfMwQIY2hhbmdlSWQIBQ0kdDAxNzIyODE3MzQ0Al80BANpbnYJARhyZXBsZW5pc2hUd29Ub2tlbnNCeVR5cGUGBQhwb29sQWRkcgUFcFR5cGUFBnBtdEluQQUDYUlkBQZwbXRJbkIFA2JJZAMJAAACBQNpbnYFA2ludgkAlAoCBQZjaGFuZ2UFCGNoYW5nZUlkCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAwkAZgIFBHBtdEEAAAkAlAoCBQRwbXRBBQNhSWQDCQBmAgUEcG10QgAACQCUCgIFBHBtdEIFA2JJZAkAAgECEHBtdHMgbXVzdCBiZSA+IDAEBmNoYW5nZQgFDSR0MDE3MTYyMTc1NzgCXzEECGNoYW5nZUlkCAUNJHQwMTcxNjIxNzU3OAJfMgQDaW52AwkAZgIFBmNoYW5nZQAACQEXcmVwbGVuaXNoT25lVG9rZW5CeVR5cGUEBQhwb29sQWRkcgUFcFR5cGUFBmNoYW5nZQUIY2hhbmdlSWQFA25pbAMJAAACBQNpbnYFA2ludgQObHBCYWxhbmNlQWZ0ZXIJAQ5hY2NvdW50QmFsYW5jZQEJANkEAQUETFBJZAQLdG90YWxTdGFrZWQJAGUCBQ5scEJhbGFuY2VBZnRlcgUPbHBCYWxhbmNlQmVmb3JlBA1heGx5RmVlQW1vdW50CQBrAwULdG90YWxTdGFrZWQJAQpnZXRBeGx5RmVlAgUEcG9vbAUHZmVlVHlwZQUKRkVFX1NDQUxFNgQRdXNlclNoYXJlRm9yU3Rha2UJAGUCBQt0b3RhbFN0YWtlZAUNYXhseUZlZUFtb3VudAMJAGcCAAAFEXVzZXJTaGFyZUZvclN0YWtlCQACAQIoYW1vdW50IG9mIHN0YWtlZCBzaGFyZXRva2VucyBtdXN0IGJlID4gMAQFaW52TFAJAQdzdGFrZUxQBAUEcG9vbAUFcFR5cGUFBExQSWQFEXVzZXJTaGFyZUZvclN0YWtlAwkAAAIFBWludkxQBQVpbnZMUAkAlAoCBRF1c2VyU2hhcmVGb3JTdGFrZQUNYXhseUZlZUFtb3VudAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgEQcmVwbGVuaXNoRW50cmllcwgEcG9vbAR1c2VyDHN0YWtlZEFtb3VudA1heGx5RmVlQW1vdW50BnBvc051bQdzaGFyZUlkBHR5cGUId2l0aExvYW4EC3RvdGFsQW1vdW50CQERZ2V0UG9vbFRvdGFsU2hhcmUBBQRwb29sBA90b3RhbEFtb3VudExvYW4JARlnZXRQb29sVG90YWxTaGFyZVdpdGhMb2FuAQUEcG9vbAQNJHQwMTg0MzYxODY3NAMFCHdpdGhMb2FuCQCUCgIJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgUEcG9vbAURa1Bvb2xJbnRlcmVzdExvYW4JAGQCBQ90b3RhbEFtb3VudExvYW4FDHN0YWtlZEFtb3VudAkAlAoCCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQCsAgIFBHBvb2wFE2tQb29sSW50ZXJlc3ROb0xvYW4FD3RvdGFsQW1vdW50TG9hbgQPY3VyUG9vbEludGVyZXN0CAUNJHQwMTg0MzYxODY3NAJfMQQTdG90YWxTdGFrZWRXaXRoTG9hbggFDSR0MDE4NDM2MTg2NzQCXzIJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAUKa1Bvb2xUb3RhbAkAZAIFC3RvdGFsQW1vdW50BQxzdGFrZWRBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAUOa1Bvb2xUb3RhbExvYW4FE3RvdGFsU3Rha2VkV2l0aExvYW4JAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfCQCkAwEFBnBvc051bQUNa1VzZXJQb3NpdGlvbgUMc3Rha2VkQW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgIBXwkApAMBBQZwb3NOdW0FFWtVc2VyUG9zaXRpb25JbnRlcmVzdAUPY3VyUG9vbEludGVyZXN0CQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIFBHVzZXICAV8JAKQDAQUGcG9zTnVtBRFrVXNlclBvc2l0aW9uUG9vbAUEcG9vbAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQR1c2VyBRBrVXNlclBvc2l0aW9uTnVtBQZwb3NOdW0JAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUIbW9uZXlCb3gFDWF4bHlGZWVBbW91bnQJANkEAQUHc2hhcmVJZAUDbmlsAQ5leGNoYW5nZUtlZXBlcgoHdG9Ub2tlbglwbXRBbW91bnQIcG10QXNzZXQJYW1vdW50c0luCWFkZHJlc3Nlcw9hc3NldHNUb1JlY2VpdmULZXN0UmVjZWl2ZWQRc2xpcHBhZ2VUb2xlcmFuY2ULbWluUmVjZWl2ZWQHb3B0aW9ucwQSdG9rZW5CYWxhbmNlQmVmb3JlCQEOYWNjb3VudEJhbGFuY2UBCQEOYXNzZXRJZEZyb21TdHIBBQd0b1Rva2VuAwkAAAIFEnRva2VuQmFsYW5jZUJlZm9yZQUSdG9rZW5CYWxhbmNlQmVmb3JlBANpbnYJAPwHBAUKZXhDb250cmFjdAIEc3dhcAkAzAgCBQlhbW91bnRzSW4JAMwIAgUJYWRkcmVzc2VzCQDMCAIFD2Fzc2V0c1RvUmVjZWl2ZQkAzAgCBQtlc3RSZWNlaXZlZAkAzAgCBRFzbGlwcGFnZVRvbGVyYW5jZQkAzAgCBQttaW5SZWNlaXZlZAkAzAgCBQdvcHRpb25zBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFCHBtdEFzc2V0BQlwbXRBbW91bnQFA25pbAMJAAACBQNpbnYFA2ludgkAZQIJAQ5hY2NvdW50QmFsYW5jZQEJAQ5hc3NldElkRnJvbVN0cgEFB3RvVG9rZW4FEnRva2VuQmFsYW5jZUJlZm9yZQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgEOZXhjaGFuZ2VQdXp6bGUGB3RvVG9rZW4JcG10QW1vdW50CHBtdEFzc2V0CXJvdXRlc1N0cgxtaW5Ub1JlY2VpdmUHb3B0aW9ucwQSdG9rZW5CYWxhbmNlQmVmb3JlCQEOYWNjb3VudEJhbGFuY2UBCQEOYXNzZXRJZEZyb21TdHIBBQd0b1Rva2VuAwkAAAIFEnRva2VuQmFsYW5jZUJlZm9yZQUSdG9rZW5CYWxhbmNlQmVmb3JlBANpbnYJAPwHBAUKZXhDb250cmFjdAIKcHV6emxlU3dhcAkAzAgCBQlyb3V0ZXNTdHIJAMwIAgUMbWluVG9SZWNlaXZlCQDMCAIFB29wdGlvbnMFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUIcG10QXNzZXQFCXBtdEFtb3VudAUDbmlsAwkAAAIFA2ludgUDaW52CQBlAgkBDmFjY291bnRCYWxhbmNlAQkBDmFzc2V0SWRGcm9tU3RyAQUHdG9Ub2tlbgUSdG9rZW5CYWxhbmNlQmVmb3JlCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQ5leGNoYW5nZVN3b3BGaQoHdG9Ub2tlbglwbXRBbW91bnQIcG10QXNzZXQKZXhjaGFuZ2Vycw5leGNoYW5nZXJzVHlwZQVhcmdzMQVhcmdzMhFyb3V0aW5nQXNzZXRzS2V5cxJtaW5BbW91bnRUb1JlY2VpdmUHb3B0aW9ucwQSdG9rZW5CYWxhbmNlQmVmb3JlCQEOYWNjb3VudEJhbGFuY2UBCQEOYXNzZXRJZEZyb21TdHIBBQd0b1Rva2VuAwkAAAIFEnRva2VuQmFsYW5jZUJlZm9yZQUSdG9rZW5CYWxhbmNlQmVmb3JlBANpbnYJAPwHBAUKZXhDb250cmFjdAIKc3dvcGZpU3dhcAkAzAgCBQpleGNoYW5nZXJzCQDMCAIFDmV4Y2hhbmdlcnNUeXBlCQDMCAIFBWFyZ3MxCQDMCAIFBWFyZ3MyCQDMCAIFEXJvdXRpbmdBc3NldHNLZXlzCQDMCAIFEm1pbkFtb3VudFRvUmVjZWl2ZQkAzAgCBQdvcHRpb25zBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFCHBtdEFzc2V0BQlwbXRBbW91bnQFA25pbAMJAAACBQNpbnYFA2ludgkAZQIJAQ5hY2NvdW50QmFsYW5jZQEJAQ5hc3NldElkRnJvbVN0cgEFB3RvVG9rZW4FEnRva2VuQmFsYW5jZUJlZm9yZQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgEKY2FwaXRhbGl6ZQQEcG9vbAVwVHlwZQd0b2tlbklkC3Rva2VuQW1vdW50BAhwb29sQWRkcgkBB0FkZHJlc3MBCQDZBAEFBHBvb2wEDSR0MDIxMDI1MjEwOTEJAQtnZXRQb29sRGF0YQIFCHBvb2xBZGRyBQVwVHlwZQQDQUlkCAUNJHQwMjEwMjUyMTA5MQJfMQQDQklkCAUNJHQwMjEwMjUyMTA5MQJfMgQEYmFsQQgFDSR0MDIxMDI1MjEwOTECXzMEBGJhbEIIBQ0kdDAyMTAyNTIxMDkxAl80BAdzaGFyZUlkCAUNJHQwMjEwMjUyMTA5MQJfNQMDCQECIT0CBQd0b2tlbklkBQNBSWQJAQIhPQIFB3Rva2VuSWQFA0JJZAcJAAIBAgtXcm9uZyBhc3NldAQNJHQwMjExNzYyMTI1NgMJAAACBQd0b2tlbklkBQNBSWQJAJQKAgULdG9rZW5BbW91bnQAAAkAlAoCAAAFC3Rva2VuQW1vdW50BARwbXRBCAUNJHQwMjExNzYyMTI1NgJfMQQEcG10QggFDSR0MDIxMTc2MjEyNTYCXzIEDSR0MDIxMjU5MjEzNjMJAQ9yZXBsZW5pc2hCeVR5cGUKBQVwVHlwZQUEcG9vbAUGTk9fRkVFBQRwbXRBBQNBSWQFBHBtdEIFA0JJZAUEYmFsQQUEYmFsQgUHc2hhcmVJZAQMc3Rha2VkQW1vdW50CAUNJHQwMjEyNTkyMTM2MwJfMQQCbmYIBQ0kdDAyMTI1OTIxMzYzAl8yBBNjdXJQb29sSW50ZXJlc3RMb2FuCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgUEcG9vbAURa1Bvb2xJbnRlcmVzdExvYW4AAAQVY3VyUG9vbEludGVyZXN0Tm9Mb2FuCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgUEcG9vbAUTa1Bvb2xJbnRlcmVzdE5vTG9hbgAABBB0b3RhbFNoYXJlQW1vdW50CQERZ2V0UG9vbFRvdGFsU2hhcmUBBQRwb29sBBh0b3RhbFNoYXJlQW1vdW50V2l0aExvYW4JARlnZXRQb29sVG90YWxTaGFyZVdpdGhMb2FuAQUEcG9vbAQLbG9hblBlcmNlbnQJAGsDBRh0b3RhbFNoYXJlQW1vdW50V2l0aExvYW4FBlNDQUxFOAUQdG90YWxTaGFyZUFtb3VudAQKc3Rha2VkTG9hbgkAawMFDHN0YWtlZEFtb3VudAULbG9hblBlcmNlbnQFBlNDQUxFOAQMc3Rha2VkTm9Mb2FuCQBlAgUMc3Rha2VkQW1vdW50BQpzdGFrZWRMb2FuBA9uZXdJbnRlcmVzdExvYW4DCQBmAgUYdG90YWxTaGFyZUFtb3VudFdpdGhMb2FuAAAJAGQCBRNjdXJQb29sSW50ZXJlc3RMb2FuCQBrAwUKc3Rha2VkTG9hbgUHU0NBTEUxMAUYdG90YWxTaGFyZUFtb3VudFdpdGhMb2FuAAAEEW5ld0ludGVyZXN0Tm9Mb2FuAwkAZgIJAGUCBRB0b3RhbFNoYXJlQW1vdW50BRh0b3RhbFNoYXJlQW1vdW50V2l0aExvYW4AAAkAZAIFFWN1clBvb2xJbnRlcmVzdE5vTG9hbgkAawMFDHN0YWtlZE5vTG9hbgUHU0NBTEUxMAkAZQIFEHRvdGFsU2hhcmVBbW91bnQFGHRvdGFsU2hhcmVBbW91bnRXaXRoTG9hbgAABAtheGx5RmVlTG9hbgkAawMFCnN0YWtlZExvYW4JAQpnZXRBeGx5RmVlAgUEcG9vbAUMQ0FQX0ZFRV9MT0FOBQpGRUVfU0NBTEU2BA1heGx5RmVlTm9Mb2FuCQBrAwUMc3Rha2VkTm9Mb2FuCQEKZ2V0QXhseUZlZQIFBHBvb2wFD0NBUF9GRUVfTk9fTE9BTgUKRkVFX1NDQUxFNgQHYXhseUZlZQkBCXVuc3Rha2VMUAQFBHBvb2wFBXBUeXBlBQdzaGFyZUlkCQBkAgULYXhseUZlZUxvYW4FDWF4bHlGZWVOb0xvYW4DCQAAAgUHYXhseUZlZQUHYXhseUZlZQkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHBvb2wFEWtQb29sSW50ZXJlc3RMb2FuBQ9uZXdJbnRlcmVzdExvYW4JAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAUTa1Bvb2xJbnRlcmVzdE5vTG9hbgURbmV3SW50ZXJlc3ROb0xvYW4JAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAUKa1Bvb2xUb3RhbAkAZQIJAGQCBRB0b3RhbFNoYXJlQW1vdW50BQxzdGFrZWRBbW91bnQFB2F4bHlGZWUJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAUOa1Bvb2xUb3RhbExvYW4JAGUCCQBkAgUYdG90YWxTaGFyZUFtb3VudFdpdGhMb2FuBQpzdGFrZWRMb2FuBQtheGx5RmVlTG9hbgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQhtb25leUJveAkAZAIFC2F4bHlGZWVMb2FuBQ1heGx5RmVlTm9Mb2FuCQDZBAEFB3NoYXJlSWQFA25pbAkBDmdldEN1cnNFbnRyaWVzBAUDQUlkBQNCSWQFB3NoYXJlSWQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgESd2l0aGRyYXdBbW91bnRDYWxjBARwb29sD3VzZXJDYW5XaXRoZHJhdwRkZWJ0C2JvcnJvd0Fzc2V0BAhwb29sQWRkcgkBB0FkZHJlc3MBCQDZBAEFBHBvb2wEBXBUeXBlCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwkArAICBQVrUG9vbAUEcG9vbAIMVW5rbm93biBwb29sBA0kdDAyMzEzNTIzMjExCQELZ2V0UG9vbERhdGECBQhwb29sQWRkcgUFcFR5cGUECGFzc2V0SWRBCAUNJHQwMjMxMzUyMzIxMQJfMQQIYXNzZXRJZEIIBQ0kdDAyMzEzNTIzMjExAl8yBARiYWxBCAUNJHQwMjMxMzUyMzIxMQJfMwQEYmFsQggFDSR0MDIzMTM1MjMyMTECXzQEB3NoYXJlSWQIBQ0kdDAyMzEzNTIzMjExAl81BAtjQmFsQUJlZm9yZQkBDmFjY291bnRCYWxhbmNlAQkBDmFzc2V0SWRGcm9tU3RyAQUIYXNzZXRJZEEDCQAAAgULY0JhbEFCZWZvcmUFC2NCYWxBQmVmb3JlBAtjQmFsQkJlZm9yZQkBDmFjY291bnRCYWxhbmNlAQkBDmFzc2V0SWRGcm9tU3RyAQUIYXNzZXRJZEIDCQAAAgULY0JhbEJCZWZvcmUFC2NCYWxCQmVmb3JlBANpbnYDCQAAAgUFcFR5cGUFB1NGX1BPT0wJAPwHBAUIcG9vbEFkZHICDGNhbGxGdW5jdGlvbgkAzAgCAgh3aXRoZHJhdwkAzAgCCQDMCAIJAKQDAQUPdXNlckNhbldpdGhkcmF3BQNuaWwFA25pbAUDbmlsBANpbnYJAQl1bnN0YWtlTFAEBQRwb29sBQVwVHlwZQUHc2hhcmVJZAUPdXNlckNhbldpdGhkcmF3AwkAAAIFA2ludgUDaW52CQD8BwQFCHBvb2xBZGRyAgNnZXQFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBDmFzc2V0SWRGcm9tU3RyAQUHc2hhcmVJZAUPdXNlckNhbldpdGhkcmF3BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4DCQAAAgUDaW52BQNpbnYECmNCYWxBQWZ0ZXIJAQ5hY2NvdW50QmFsYW5jZQEJAQ5hc3NldElkRnJvbVN0cgEFCGFzc2V0SWRBBApjQmFsQkFmdGVyCQEOYWNjb3VudEJhbGFuY2UBCQEOYXNzZXRJZEZyb21TdHIBBQhhc3NldElkQgQNJHQwMjM3NzQyMzg2MwkAlAoCCQBlAgUKY0JhbEFBZnRlcgULY0JhbEFCZWZvcmUJAGUCBQpjQmFsQkFmdGVyBQtjQmFsQkJlZm9yZQQNdG9rZW5zQW1vdW50QQgFDSR0MDIzNzc0MjM4NjMCXzEEDXRva2Vuc0Ftb3VudEIIBQ0kdDAyMzc3NDIzODYzAl8yBA0kdDAyMzg2NjI0NzIwAwkAZgIFBGRlYnQAAAQNYW1vdW50VG9HZXRFeAMDCQAAAgULYm9ycm93QXNzZXQFCGFzc2V0SWRBCQBmAgUEZGVidAUNdG9rZW5zQW1vdW50QQcJAGUCBQRkZWJ0BQ10b2tlbnNBbW91bnRBAwMJAAACBQtib3Jyb3dBc3NldAUIYXNzZXRJZEIJAGYCBQRkZWJ0BQ10b2tlbnNBbW91bnRCBwkAZQIFBGRlYnQFDXRva2Vuc0Ftb3VudEIAAAQFZXhJbnYDCQBmAgUNYW1vdW50VG9HZXRFeAAACQEQZXhjaGFuZ2VEaXJlY3RseQgFBXBUeXBlBQRwb29sBQhhc3NldElkQQUIYXNzZXRJZEIJAGUCBQRiYWxBBQ10b2tlbnNBbW91bnRBCQBlAgUEYmFsQgUNdG9rZW5zQW1vdW50QgUNYW1vdW50VG9HZXRFeAULYm9ycm93QXNzZXQFA25pbAMJAAACBQVleEludgUFZXhJbnYED2NCYWxBQWZ0ZXJSZXBheQkBDmFjY291bnRCYWxhbmNlAQkBDmFzc2V0SWRGcm9tU3RyAQUIYXNzZXRJZEEED2NCYWxCQWZ0ZXJSZXBheQkBDmFjY291bnRCYWxhbmNlAQkBDmFzc2V0SWRGcm9tU3RyAQUIYXNzZXRJZEIDCQAAAgULYm9ycm93QXNzZXQFCGFzc2V0SWRBCQCUCgIJAGUCCQBlAgUPY0JhbEFBZnRlclJlcGF5BQtjQmFsQUJlZm9yZQUEZGVidAkAZQIFD2NCYWxCQWZ0ZXJSZXBheQULY0JhbEJCZWZvcmUJAJQKAgkAZQIFD2NCYWxBQWZ0ZXJSZXBheQULY0JhbEFCZWZvcmUJAGUCCQBlAgUPY0JhbEJBZnRlclJlcGF5BQtjQmFsQkJlZm9yZQUEZGVidAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAlAoCBQ10b2tlbnNBbW91bnRBBQ10b2tlbnNBbW91bnRCBAd0b1VzZXJBCAUNJHQwMjM4NjYyNDcyMAJfMQQHdG9Vc2VyQggFDSR0MDIzODY2MjQ3MjACXzIJAJkKBwUHdG9Vc2VyQQUIYXNzZXRJZEEFB3RvVXNlckIFCGFzc2V0SWRCBQpjQmFsQUFmdGVyBQpjQmFsQkFmdGVyBQdzaGFyZUlkCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuARh1c2VyQ2FuV2l0aGRyYXdTaGFyZUNhbGMEBHVzZXIEcG9vbAVwb3NJZAhib3Jyb3dlZAQHcEFtb3VudAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFBHRoaXMJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfBQVwb3NJZAUNa1VzZXJQb3NpdGlvbgIQVW5rbm93biBwb3NpdGlvbgQMdXNlckludGVyZXN0CQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgIBXwUFcG9zSWQFFWtVc2VyUG9zaXRpb25JbnRlcmVzdAQMcG9vbEludGVyZXN0AwUIYm9ycm93ZWQJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgUEcG9vbAURa1Bvb2xJbnRlcmVzdExvYW4JARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgUEcG9vbAUTa1Bvb2xJbnRlcmVzdE5vTG9hbgkAZAIFB3BBbW91bnQJAGsDBQdwQW1vdW50CQBlAgUMcG9vbEludGVyZXN0BQx1c2VySW50ZXJlc3QFB1NDQUxFMTABDndpdGhkcmF3VG9Vc2VyBAR1c2VyBHBvb2wFcG9zSWQIc3RvcExvc3MEB3BBbW91bnQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgIBXwUFcG9zSWQFDWtVc2VyUG9zaXRpb24CEFVua25vd24gcG9zaXRpb24EDGJvcnJvd0Ftb3VudAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgIBXwUFcG9zSWQFEWtVc2VyQm9ycm93QW1vdW50AAAED3VzZXJDYW5XaXRoZHJhdwkBGHVzZXJDYW5XaXRoZHJhd1NoYXJlQ2FsYwQFBHVzZXIFBHBvb2wFBXBvc0lkCQBmAgUMYm9ycm93QW1vdW50AAAEDnBvb2xUb3RhbFNoYXJlCQERZ2V0UG9vbFRvdGFsU2hhcmUBBQRwb29sBAh1c2VyQWRkcgkBB0FkZHJlc3MBCQDZBAEFBHVzZXIEC2JvcnJvd0Fzc2V0CQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfBQVwb3NJZAUSa1VzZXJCb3Jyb3dBc3NldElkAgAEBGRlYnQDCQBmAgUMYm9ycm93QW1vdW50AAAKAAFACQD8BwQJAQ5nZXRMZW5kU3J2QWRkcgACDGdldEFzc2V0RGVidAkAzAgCBwkAzAgCCQCsAgIJAKwCAgUEdXNlcgIBXwUFcG9zSWQJAMwIAgULYm9ycm93QXNzZXQFA25pbAUDbmlsAwkAAQIFAUACA0ludAUBQAkAAgEJAKwCAgkAAwEFAUACGCBjb3VsZG4ndCBiZSBjYXN0IHRvIEludAAABA0kdDAyNjEwODI2MjYxCQESd2l0aGRyYXdBbW91bnRDYWxjBAUEcG9vbAUPdXNlckNhbldpdGhkcmF3BQRkZWJ0BQtib3Jyb3dBc3NldAMJAAACBQ0kdDAyNjEwODI2MjYxBQ0kdDAyNjEwODI2MjYxBAdzaGFyZUlkCAUNJHQwMjYxMDgyNjI2MQJfNwQKY0JhbEJBZnRlcggFDSR0MDI2MTA4MjYyNjECXzYECmNCYWxBQWZ0ZXIIBQ0kdDAyNjEwODI2MjYxAl81BAhhc3NldElkQggFDSR0MDI2MTA4MjYyNjECXzQEDXRvVXNlckFtb3VudEIIBQ0kdDAyNjEwODI2MjYxAl8zBAhhc3NldElkQQgFDSR0MDI2MTA4MjYyNjECXzIEDXRvVXNlckFtb3VudEEIBQ0kdDAyNjEwODI2MjYxAl8xBAtjbG9zZURidEludgMJAGYCBQRkZWJ0AAAJAPwHBAkBDmdldExlbmRTcnZBZGRyAAIIcmVwYXlGb3IJAMwIAgkArAICCQCsAgIFBHVzZXICAV8FBXBvc0lkBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQ5hc3NldElkRnJvbVN0cgEFC2JvcnJvd0Fzc2V0BQRkZWJ0BQNuaWwAAAMJAAACBQtjbG9zZURidEludgULY2xvc2VEYnRJbnYJAM4IAgkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgIBXwUFcG9zSWQFDWtVc2VyUG9zaXRpb24JAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXICAV8FBXBvc0lkBRVrVXNlclBvc2l0aW9uSW50ZXJlc3QJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAUKa1Bvb2xUb3RhbAkAZQIFDnBvb2xUb3RhbFNoYXJlBQ91c2VyQ2FuV2l0aGRyYXcJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUIdXNlckFkZHIFDXRvVXNlckFtb3VudEEJAQ5hc3NldElkRnJvbVN0cgEFCGFzc2V0SWRBCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFCHVzZXJBZGRyBQ10b1VzZXJBbW91bnRCCQEOYXNzZXRJZEZyb21TdHIBBQhhc3NldElkQgUDbmlsCQEOZ2V0Q3Vyc0VudHJpZXMEBQhhc3NldElkQQUIYXNzZXRJZEIFB3NoYXJlSWQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgEMcGFyc2VSZXF1ZXN0AQlyZXF1ZXN0SWQEB3JlcXVlc3QJALUJAgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMJAKwCAgUJcmVxdWVzdElkBQprUmVxdWVzdElkCQCsAgICE05vIHJlcXVlc3Qgd2l0aCBpZCAFCXJlcXVlc3RJZAIBLAQEdXNlcgkAkQMCBQdyZXF1ZXN0AAAEBHBvb2wJAJEDAgUHcmVxdWVzdAABBARwbXRBCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHcmVxdWVzdAACBANBSWQJAJEDAgUHcmVxdWVzdAADBARwbXRCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHcmVxdWVzdAAEBANCSWQJAJEDAgUHcmVxdWVzdAAFBARiYWxBCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHcmVxdWVzdAAGBARiYWxCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHcmVxdWVzdAAHBAdzaGFyZUlkCQCRAwIFB3JlcXVlc3QACAQHYndBc3NldAkAkQMCBQdyZXF1ZXN0AAkECGJ3QW1vdW50CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHcmVxdWVzdAAKCQCdCgsFBHVzZXIFBHBvb2wFBHBtdEEFA0FJZAUEcG10QgUDQklkBQRiYWxBBQRiYWxCBQdzaGFyZUlkBQdid0Fzc2V0BQhid0Ftb3VudAEQY2FsY0JvcnJvd0Ftb3VudAYEcG10QQRwbXRCA2FJZANiSWQIbGV2ZXJhZ2UIYm9ycm93SWQEB2RQcmljZUEJARFAZXh0ck5hdGl2ZSgxMDUwKQIFD3ByaWNlT3JhY2xlQWRkcgkArAICBQNhSWQFDmtQcmljZUluT3JhY2xlBAdkUHJpY2VCCQERQGV4dHJOYXRpdmUoMTA1MCkCBQ9wcmljZU9yYWNsZUFkZHIJAKwCAgUDYklkBQ5rUHJpY2VJbk9yYWNsZQQGZGVjUHJBCQBsBgAKAAAJARBnZXRBc3NldERlY2ltYWxzAQUDYUlkAAAAAAUERE9XTgQGZGVjUHJCCQBsBgAKAAAJARBnZXRBc3NldERlY2ltYWxzAQUDYklkAAAAAAUERE9XTgQMcGF5ZEluRG9sbGFyCQBkAgkAawMFB2RQcmljZUEFBHBtdEEFBmRlY1ByQQkAawMFB2RQcmljZUIFBHBtdEIFBmRlY1ByQgQNJHQwMjc5MDUyODAwMgMJAAACBQhib3Jyb3dJZAUDYUlkCQCUCgIFB2RQcmljZUEFBmRlY1ByQQkAlAoCBQdkUHJpY2VCBQZkZWNQckIEC2JvcnJvd1ByaWNlCAUNJHQwMjc5MDUyODAwMgJfMQQLYm9ycm93RGVjUHIIBQ0kdDAyNzkwNTI4MDAyAl8yCQBrAwkAawMFDHBheWRJbkRvbGxhcgkAZQIFCGxldmVyYWdlAGQAZAULYm9ycm93RGVjUHIFC2JvcnJvd1ByaWNlARJwYXJzZVJlcGxlbmlzaFBtdHMDBHBtdHMDQUlkA0JJZAMJAAACCQCQAwEFBHBtdHMAAgMJAQIhPQIJAQxhc3NldElkVG9TdHIBCAkAkQMCBQRwbXRzAAAHYXNzZXRJZAUDQUlkCQACAQIVV3JvbmcgcGF5bWVudCBhc3NldCBBAwkBAiE9AgkBDGFzc2V0SWRUb1N0cgEICQCRAwIFBHBtdHMAAQdhc3NldElkBQNCSWQJAAIBAhVXcm9uZyBwYXltZW50IGFzc2V0IEIJAJYKBAgJAJEDAgUEcG10cwAABmFtb3VudAUDQUlkCAkAkQMCBQRwbXRzAAEGYW1vdW50BQNCSWQDCQAAAgkAkAMBBQRwbXRzAAEDCQAAAgkBDGFzc2V0SWRUb1N0cgEICQCRAwIFBHBtdHMAAAdhc3NldElkBQNBSWQJAJYKBAgJAJEDAgUEcG10cwAABmFtb3VudAUDQUlkAAAFA0JJZAMJAAACCQEMYXNzZXRJZFRvU3RyAQgJAJEDAgUEcG10cwAAB2Fzc2V0SWQFA0JJZAkAlgoEAAAFA0FJZAgJAJEDAgUEcG10cwAABmFtb3VudAUDQklkCQACAQINV3JvbmcgcGF5bWVudAkAAgECHE9uZSBvciB0d28gcGF5bWVudHMgZXhwZWN0ZWQBD2NhbGNQcmljZUltcGFjdAQEYmFsQQRiYWxCB25ld0JhbEEHbmV3QmFsQgQDcHJpCQBoAgkAZQIFBlNDQUxFOAkAawMJAGsDBQRiYWxCBQZTQ0FMRTgFBGJhbEEFBlNDQUxFOAkAawMFB25ld0JhbEIFBlNDQUxFOAUHbmV3QmFsQQBkAwkAZgIAAAUDcHJpCQBoAgUDcHJpAP///////////wEFA3ByaRABaQEaZ2V0U2hhcmVBc3NldFByaWNlUkVBRE9OTFkBB3NoYXJlSWQEC3NoYXJlUHJpY2VzCQENZ2V0U2hhcmVQcmljZQEFB3NoYXJlSWQJAJQKAgUDbmlsBQtzaGFyZVByaWNlcwFpASJnZXRVc2VyUG9zaXRpb25TaGFyZUFtb3VudFJFQURPTkxZAgR1c2VyBnBvc051bQQEcG9vbAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMJAKwCAgkArAICCQCsAgIFBHVzZXICAV8FBnBvc051bQURa1VzZXJQb3NpdGlvblBvb2wCEFVua25vd24gcG9zaXRpb24EDGJvcnJvd0Ftb3VudAkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXICAV8FBnBvc051bQURa1VzZXJCb3Jyb3dBbW91bnQED3VzZXJDYW5XaXRoZHJhdwkBGHVzZXJDYW5XaXRoZHJhd1NoYXJlQ2FsYwQFBHVzZXIFBHBvb2wFBnBvc051bQkAZgIFDGJvcnJvd0Ftb3VudAAACQCUCgIFA25pbAUPdXNlckNhbldpdGhkcmF3AWkBIGdldFVzZXJQb3NpdGlvbkluRG9sbGFyc1JFQURPTkxZAwR1c2VyBXBvb2xzBnBvc051bQoBB3VzZXJQb3MCAWEEcG9vbAQNJHQwMjk3MDEyOTczNQUBYQQIdG90YWxQb3MIBQ0kdDAyOTcwMTI5NzM1Al8xBAdwb3NEZWJ0CAUNJHQwMjk3MDEyOTczNQJfMgQFaW5kZXgIBQ0kdDAyOTcwMTI5NzM1Al8zBAVwVHlwZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMJAKwCAgUFa1Bvb2wFBHBvb2wCElBvb2wgaXMgbm90IGluaXRlZAQNJHQwMjk4MjcyOTkxNwkBC2dldFBvb2xEYXRhAgkBB0FkZHJlc3MBCQDZBAEFBHBvb2wFBXBUeXBlBANBSWQIBQ0kdDAyOTgyNzI5OTE3Al8xBANCSWQIBQ0kdDAyOTgyNzI5OTE3Al8yBARiYWxBCAUNJHQwMjk4MjcyOTkxNwJfMwQEYmFsQggFDSR0MDI5ODI3Mjk5MTcCXzQEB3NoYXJlSWQIBQ0kdDAyOTgyNzI5OTE3Al81BAxib3Jyb3dBbW91bnQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXICAV8JAJEDAgUGcG9zTnVtBQVpbmRleAURa1VzZXJCb3Jyb3dBbW91bnQAAAQPdXNlckNhbldpdGhkcmF3CQEYdXNlckNhbldpdGhkcmF3U2hhcmVDYWxjBAUEdXNlcgUEcG9vbAkAkQMCBQZwb3NOdW0FBWluZGV4CQBmAgUMYm9ycm93QW1vdW50AAAEC3NoYXJlUHJpY2VzCQENZ2V0U2hhcmVQcmljZQEFB3NoYXJlSWQECmRlY1ByU2hhcmUJAGwGAAoAAAkBEGdldEFzc2V0RGVjaW1hbHMBBQdzaGFyZUlkAAAAAAUERE9XTgQGc2hhcmVECQBrAwUPdXNlckNhbldpdGhkcmF3BQtzaGFyZVByaWNlcwUKZGVjUHJTaGFyZQMJAAACBQxib3Jyb3dBbW91bnQAAAkAlQoDCQDNCAIFCHRvdGFsUG9zBQZzaGFyZUQJAM0IAgUHcG9zRGVidAAACQBkAgUFaW5kZXgAAQQLYm9ycm93QXNzZXQJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfCQCRAwIFBnBvc051bQUFaW5kZXgFEmtVc2VyQm9ycm93QXNzZXRJZAQEZGVidAoAAUAJAPwHBAkBDmdldExlbmRTcnZBZGRyAAIMZ2V0QXNzZXREZWJ0CQDMCAIHCQDMCAIJAKwCAgkArAICBQR1c2VyAgFfCQCRAwIFBnBvc051bQUFaW5kZXgJAMwIAgULYm9ycm93QXNzZXQFA25pbAUDbmlsAwkAAQIFAUACA0ludAUBQAkAAgEJAKwCAgkAAwEFAUACGCBjb3VsZG4ndCBiZSBjYXN0IHRvIEludAQQYm9ycm93QXNzZXRQcmljZQkBEUBleHRyTmF0aXZlKDEwNTApAgUPcHJpY2VPcmFjbGVBZGRyCQCsAgIFC2JvcnJvd0Fzc2V0BQ5rUHJpY2VJbk9yYWNsZQQNZGVjUHJCb3Jyb3dJZAkAbAYACgAACQEQZ2V0QXNzZXREZWNpbWFscwEFC2JvcnJvd0Fzc2V0AAAAAAUERE9XTgQFZGVidEQJAGsDBQRkZWJ0BRBib3Jyb3dBc3NldFByaWNlBQ1kZWNQckJvcnJvd0lkCQCVCgMJAM0IAgUIdG90YWxQb3MFBnNoYXJlRAkAzQgCBQdwb3NEZWJ0BQVkZWJ0RAkAZAIFBWluZGV4AAEEDSR0MDMwOTM3MzA5OTIKAAIkbAUFcG9vbHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCVCgMFA25pbAUDbmlsAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBB3VzZXJQb3MCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDIwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAQDcG9zCAUNJHQwMzA5MzczMDk5MgJfMQQEZGVidAgFDSR0MDMwOTM3MzA5OTICXzIJAJQKAgUDbmlsCQCUCgIFA3BvcwUEZGVidAFpAQlyZXBsZW5pc2gDBHBvb2wIbGV2ZXJhZ2UIYm9ycm93SWQDAwkAZgIAZAUIbGV2ZXJhZ2UGCQBmAgUIbGV2ZXJhZ2UArAIJAAIBAh9MZXZlcmFnZSBjYW4ndCBiZSA8MTAwIGFuZCA+MzAwAwMJAQEhAQkBEUBleHRyTmF0aXZlKDEwNTEpAgUEdGhpcwkArAICBQRwb29sBQ5rUG9vbENhbkJvcnJvdwkAZgIFCGxldmVyYWdlAGQHCQACAQIdWW91IGNhbid0IGJvcnJvdyBpbiB0aGlzIHBvb2wEBXBUeXBlCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwkArAICBQVrUG9vbAUEcG9vbAISUG9vbCBpcyBub3QgaW5pdGVkBA0kdDAzMTQzMjMxNTIyCQELZ2V0UG9vbERhdGECCQEHQWRkcmVzcwEJANkEAQUEcG9vbAUFcFR5cGUEA0FJZAgFDSR0MDMxNDMyMzE1MjICXzEEA0JJZAgFDSR0MDMxNDMyMzE1MjICXzIEBGJhbEEIBQ0kdDAzMTQzMjMxNTIyAl8zBARiYWxCCAUNJHQwMzE0MzIzMTUyMgJfNAQHc2hhcmVJZAgFDSR0MDMxNDMyMzE1MjICXzUEDSR0MDMxNTI1MzE2MDYJARJwYXJzZVJlcGxlbmlzaFBtdHMDCAUBaQhwYXltZW50cwUDQUlkBQNCSWQEBHBtdEEIBQ0kdDAzMTUyNTMxNjA2Al8xBAlwbXRBc3NldEEIBQ0kdDAzMTUyNTMxNjA2Al8yBARwbXRCCAUNJHQwMzE1MjUzMTYwNgJfMwQJcG10QXNzZXRCCAUNJHQwMzE1MjUzMTYwNgJfNAQEdXNlcgkApQgBCAUBaQZjYWxsZXIECW5ld1Bvc051bQkBGGdldE5ld1VzZXJQb3NpdGlvbk51bWJlcgEFBHVzZXIDCQBmAgUIbGV2ZXJhZ2UAZAQMYm9ycm93QW1vdW50CQEQY2FsY0JvcnJvd0Ftb3VudAYFBHBtdEEFBHBtdEIFCXBtdEFzc2V0QQUJcG10QXNzZXRCBQhsZXZlcmFnZQUIYm9ycm93SWQEB3JlcXVlc3QJALkJAgkAzAgCBQR1c2VyCQDMCAIFBHBvb2wJAMwIAgkApAMBBQRwbXRBCQDMCAIFCXBtdEFzc2V0QQkAzAgCCQCkAwEFBHBtdEIJAMwIAgUJcG10QXNzZXRCCQDMCAIJAKQDAQUEYmFsQQkAzAgCCQCkAwEFBGJhbEIJAMwIAgUHc2hhcmVJZAkAzAgCBQhib3Jyb3dJZAkAzAgCCQCkAwEFDGJvcnJvd0Ftb3VudAUDbmlsAgEsBAxuZXdSZXF1ZXN0SWQKAAFACQD8BwQFBHRoaXMCEGNyZWF0ZU5ld1JlcXVlc3QJAMwIAgUHcmVxdWVzdAUDbmlsBQNuaWwDCQABAgUBQAIDSW50BQFACQACAQkArAICCQADAQUBQAIYIGNvdWxkbid0IGJlIGNhc3QgdG8gSW50AwkAAAIFDG5ld1JlcXVlc3RJZAUMbmV3UmVxdWVzdElkBARhcmdzCQDMCAIJAKwCAgkArAICBQR1c2VyAgFfCQCkAwEFCW5ld1Bvc051bQkAzAgCBQdzaGFyZUlkCQDMCAIFCGJvcnJvd0lkCQDMCAIFDGJvcnJvd0Ftb3VudAkAzAgCCQClCAEFBHRoaXMJAMwIAgIRcmVwbGVuaXNoRnJvbUxhbmQJAMwIAgkApAMBCQETdmFsdWVPckVycm9yTWVzc2FnZQIFDG5ld1JlcXVlc3RJZAIYQ2FuJ3QgY3JlYXRlIG5ldyByZXF1ZXN0BQNuaWwEA2ludgkA/QcECQEOZ2V0TGVuZFNydkFkZHIAAg1mbGFzaFBvc2l0aW9uBQRhcmdzBQNuaWwDCQAAAgUDaW52BQNpbnYECnVzZXJTdGFrZWQJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfCQCkAwEFCW5ld1Bvc051bQUNa1VzZXJQb3NpdGlvbgQNJHQwMzI2MTkzMjcxMwkBD2dldFBvb2xCYWxhbmNlcwQJAQdBZGRyZXNzAQkA2QQBBQRwb29sBQVwVHlwZQUDQUlkBQNCSWQDCQAAAgUNJHQwMzI2MTkzMjcxMwUNJHQwMzI2MTkzMjcxMwQHbmV3QmFsQggFDSR0MDMyNjE5MzI3MTMCXzIEB25ld0JhbEEIBQ0kdDAzMjYxOTMyNzEzAl8xBAhwckltcGFjdAkBD2NhbGNQcmljZUltcGFjdAQFBGJhbEEFBGJhbEIFB25ld0JhbEEFB25ld0JhbEIEDSR0MDMyNzgzMzI4OTgJARpjYWxjV2l0aGRyYXdMUEZyb21Qb29sVmlydAQJAQdBZGRyZXNzAQkA2QQBBQRwb29sBQVwVHlwZQUHc2hhcmVJZAUKdXNlclN0YWtlZAQId0Ftb3VudEEIBQ0kdDAzMjc4MzMyODk4Al8xBAh3QW1vdW50QggFDSR0MDMyNzgzMzI4OTgCXzIJAJQKAgUDbmlsCQDMCAIFCHBySW1wYWN0CQDMCAIFCHdBbW91bnRBCQDMCAIFCHdBbW91bnRCBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4EDSR0MDMyOTUxMzMwNjMJAQ9yZXBsZW5pc2hCeVR5cGUKBQVwVHlwZQUEcG9vbAULTk9fTE9BTl9GRUUFBHBtdEEFA0FJZAUEcG10QgUDQklkBQRiYWxBBQRiYWxCBQdzaGFyZUlkBAp1c2VyU3Rha2VkCAUNJHQwMzI5NTEzMzA2MwJfMQQHYXhseUZlZQgFDSR0MDMyOTUxMzMwNjMCXzIEDSR0MDMzMDY5MzMxNjMJAQ9nZXRQb29sQmFsYW5jZXMECQEHQWRkcmVzcwEJANkEAQUEcG9vbAUFcFR5cGUFA0FJZAUDQklkAwkAAAIFDSR0MDMzMDY5MzMxNjMFDSR0MDMzMDY5MzMxNjMEB25ld0JhbEIIBQ0kdDAzMzA2OTMzMTYzAl8yBAduZXdCYWxBCAUNJHQwMzMwNjkzMzE2MwJfMQQIcHJJbXBhY3QJAQ9jYWxjUHJpY2VJbXBhY3QEBQRiYWxBBQRiYWxCBQduZXdCYWxBBQduZXdCYWxCBA0kdDAzMzIzMzMzMzQ4CQEaY2FsY1dpdGhkcmF3TFBGcm9tUG9vbFZpcnQECQEHQWRkcmVzcwEJANkEAQUEcG9vbAUFcFR5cGUFB3NoYXJlSWQFCnVzZXJTdGFrZWQECHdBbW91bnRBCAUNJHQwMzMyMzMzMzM0OAJfMQQId0Ftb3VudEIIBQ0kdDAzMzIzMzMzMzQ4Al8yCQCUCgIJAM4IAgkBEHJlcGxlbmlzaEVudHJpZXMIBQRwb29sBQR1c2VyBQp1c2VyU3Rha2VkBQdheGx5RmVlBQluZXdQb3NOdW0FB3NoYXJlSWQFBXBUeXBlBwkBDmdldEN1cnNFbnRyaWVzBAUDQUlkBQNCSWQFB3NoYXJlSWQJAMwIAgkApAMBBQh3QW1vdW50QQkAzAgCCQCkAwEFCHdBbW91bnRCBQNuaWwJAMwIAgUIcHJJbXBhY3QJAMwIAgUId0Ftb3VudEEJAMwIAgUId0Ftb3VudEIFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQh3aXRoZHJhdwIEcG9vbAVwb3NJZAkBDndpdGhkcmF3VG9Vc2VyBAkApQgBCAUBaQZjYWxsZXIFBHBvb2wJAKQDAQUFcG9zSWQHAWkBFGNyZWF0ZVVwZGF0ZVN0b3BMb3NzBAVwb3NJZAZwb29sSWQHYXNzZXRJZAVwcmljZQQQdG9rZW5PcmFjbGVQcmljZQkBEUBleHRyTmF0aXZlKDEwNTApAgUPcHJpY2VPcmFjbGVBZGRyCQCsAgIFB2Fzc2V0SWQFDmtQcmljZUluT3JhY2xlAwkBASEBCQEJaXNEZWZpbmVkAQkAmggCBQR0aGlzCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUGcG9vbElkAgFfCQClCAEIBQFpBmNhbGxlcgIBXwkApAMBBQVwb3NJZAUNa1VzZXJQb3NpdGlvbgkAAgECGlRoZXJlIGFyZSBubyB1c2VyIHBvc2l0aW9uAwkAZwIAAAUFcHJpY2UJAAIBAhxQcmljZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwAwkAZgIFBXByaWNlBRB0b2tlbk9yYWNsZVByaWNlCQACAQIrUHJpY2UgbXVzdCBiZSBsZXNzIHRoYW4gY3VycmVudCB0b2tlbiBwcmljZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQClCAEIBQFpBmNhbGxlcgIBXwkApAMBBQVwb3NJZAIBXwUGcG9vbElkAgFfBQdhc3NldElkBQ1rVXNlclN0b3BMb3NzBQVwcmljZQUDbmlsAWkBDmRlbGV0ZVN0b3BMb3NzAwVwb3NJZAZwb29sSWQHYXNzZXRJZAMJAQEhAQkBCWlzRGVmaW5lZAEJAJoIAgUEdGhpcwkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQClCAEIBQFpBmNhbGxlcgIBXwkApAMBBQVwb3NJZAIBXwUGcG9vbElkAgFfBQdhc3NldElkBQ1rVXNlclN0b3BMb3NzCQACAQIITm8gZW50cnkJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQClCAEIBQFpBmNhbGxlcgIBXwkApAMBBQVwb3NJZAIBXwUGcG9vbElkAgFfBQdhc3NldElkBQ1rVXNlclN0b3BMb3NzBQNuaWwBaQEEaW5pdAkMbW9uZXlCb3hBZGRyDXNmRmFybWluZ0FkZHIIbGVuZEFkZHIPcHJpY2VPcmFjbGVBZGRyEGtlZXBlckV4Q29udHJhY3QOd3hTd2FwQ29udHJhY3QLc3dvcEFzc2V0SWQJd3hBc3NldElkC2FkbWluUHViS2V5AwkBCWlzRGVmaW5lZAEJAKIIAQUJa01vbmV5Qm94CQACAQIOQWxyZWFkeSBpbml0ZWQJAMwIAgkBC1N0cmluZ0VudHJ5AgUJa01vbmV5Qm94BQxtb25leUJveEFkZHIJAMwIAgkBC1N0cmluZ0VudHJ5AgUOa1NGRmFybWluZ0FkZHIFDXNmRmFybWluZ0FkZHIJAMwIAgkBC1N0cmluZ0VudHJ5AgUMa0xlbmRTZXJ2aWNlBQhsZW5kQWRkcgkAzAgCCQELU3RyaW5nRW50cnkCBQxrUHJpY2VPcmFjbGUFD3ByaWNlT3JhY2xlQWRkcgkAzAgCCQELU3RyaW5nRW50cnkCBQtrRXhDb250cmFjdAUQa2VlcGVyRXhDb250cmFjdAkAzAgCCQELU3RyaW5nRW50cnkCBQ9rV3hTd2FwQ29udHJhY3QFDnd4U3dhcENvbnRyYWN0CQDMCAIJAQtTdHJpbmdFbnRyeQIFB2tTd29wSWQFC3N3b3BBc3NldElkCQDMCAIJAQtTdHJpbmdFbnRyeQIFBWtXeElkBQl3eEFzc2V0SWQJAMwIAgkBC1N0cmluZ0VudHJ5AgUMa0FkbWluQ2FsbFBLBQthZG1pblB1YktleQUDbmlsAWkBEGNyZWF0ZU5ld1JlcXVlc3QBBnBhcmFtcwkBC3ZhbHVlT3JFbHNlAgkBCmlzU2VsZkNhbGwBBQFpBAxuZXdSZXF1ZXN0SWQJAGQCCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFDGtSZXF1ZXN0SXRlcgAAAAEJAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKQDAQUMbmV3UmVxdWVzdElkBQprUmVxdWVzdElkBQZwYXJhbXMJAMwIAgkBDEludGVnZXJFbnRyeQIFDGtSZXF1ZXN0SXRlcgUMbmV3UmVxdWVzdElkBQNuaWwFDG5ld1JlcXVlc3RJZAFpARFyZXBsZW5pc2hGcm9tTGFuZAEJcmVxdWVzdElkCQELdmFsdWVPckVsc2UCCQEKaXNMYW5kQ2FsbAEFAWkEDSR0MDM1ODc0MzU5NzgJAQxwYXJzZVJlcXVlc3QBBQlyZXF1ZXN0SWQEBHVzZXIIBQ0kdDAzNTg3NDM1OTc4Al8xBARwb29sCAUNJHQwMzU4NzQzNTk3OAJfMgQEcG10QQgFDSR0MDM1ODc0MzU5NzgCXzMEA0FJZAgFDSR0MDM1ODc0MzU5NzgCXzQEBHBtdEIIBQ0kdDAzNTg3NDM1OTc4Al81BANCSWQIBQ0kdDAzNTg3NDM1OTc4Al82BARiYWxBCAUNJHQwMzU4NzQzNTk3OAJfNwQEYmFsQggFDSR0MDM1ODc0MzU5NzgCXzgEB3NoYXJlSWQIBQ0kdDAzNTg3NDM1OTc4Al85BAdid0Fzc2V0CAUNJHQwMzU4NzQzNTk3OANfMTAECGJ3QW1vdW50CAUNJHQwMzU4NzQzNTk3OANfMTEDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhJXcm9uZyBwYXltZW50IHNpemUDAwkBAiE9AgkBDGFzc2V0SWRUb1N0cgEICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAUHYndBc3NldAYJAQIhPQIICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BQhid0Ftb3VudAkAAgECDVdyb25nIHBheW1lbnQEDSR0MDM2MTY4MzYyOTIDCQAAAgUDQUlkBQdid0Fzc2V0CQCUCgIJAGQCBQRwbXRBCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAUEcG10QgkAlAoCBQRwbXRBCQBkAgUEcG10QggJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQEB3BtdEFsbEEIBQ0kdDAzNjE2ODM2MjkyAl8xBAdwbXRBbGxCCAUNJHQwMzYxNjgzNjI5MgJfMgQFcFR5cGUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzCQCsAgIFBWtQb29sBQRwb29sAgxVbmtub3duIHBvb2wEDSR0MDM2Mzc0MzY0ODkJAQ9yZXBsZW5pc2hCeVR5cGUKBQVwVHlwZQUEcG9vbAUITE9BTl9GRUUFB3BtdEFsbEEFA0FJZAUHcG10QWxsQgUDQklkBQRiYWxBBQRiYWxCBQdzaGFyZUlkBAp1c2VyU3Rha2VkCAUNJHQwMzYzNzQzNjQ4OQJfMQQHYXhseUZlZQgFDSR0MDM2Mzc0MzY0ODkCXzIEBnBvc051bQkBGGdldE5ld1VzZXJQb3NpdGlvbk51bWJlcgEFBHVzZXIEDWJvcnJvd0VudHJpZXMJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfCQCkAwEFBnBvc051bQURa1VzZXJCb3Jyb3dBbW91bnQFCGJ3QW1vdW50CQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfCQCkAwEFBnBvc051bQUSa1VzZXJCb3Jyb3dBc3NldElkBQdid0Fzc2V0BQNuaWwEB2VudHJpZXMJARByZXBsZW5pc2hFbnRyaWVzCAUEcG9vbAUEdXNlcgUKdXNlclN0YWtlZAUHYXhseUZlZQUGcG9zTnVtBQdzaGFyZUlkBQVwVHlwZQYEDSR0MDM2ODQ5MzY5NjQJARpjYWxjV2l0aGRyYXdMUEZyb21Qb29sVmlydAQJAQdBZGRyZXNzAQkA2QQBBQRwb29sBQVwVHlwZQUHc2hhcmVJZAUKdXNlclN0YWtlZAQId0Ftb3VudEEIBQ0kdDAzNjg0OTM2OTY0Al8xBAh3QW1vdW50QggFDSR0MDM2ODQ5MzY5NjQCXzIJAJQKAgkAzQgCCQDOCAIJAM4IAgUHZW50cmllcwkBDmdldEN1cnNFbnRyaWVzBAUDQUlkBQNCSWQFB3NoYXJlSWQJAMwIAgkApAMBBQh3QW1vdW50QQkAzAgCCQCkAwEFCHdBbW91bnRCBQNuaWwFDWJvcnJvd0VudHJpZXMJAQtEZWxldGVFbnRyeQEJAKwCAgUJcmVxdWVzdElkBQprUmVxdWVzdElkBQp1c2VyU3Rha2VkAWkBCWxpcXVpZGF0ZQMEdXNlcgVwb3NJZA9saXF1aWRhdGVBbW91bnQJAQt2YWx1ZU9yRWxzZQIJAQppc0xhbmRDYWxsAQUBaQQEcG9vbAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMJAKwCAgkArAICCQCsAgIFBHVzZXICAV8FBXBvc0lkBRFrVXNlclBvc2l0aW9uUG9vbAILbm8gcG9zaXRpb24EBXBUeXBlCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwkArAICBQVrUG9vbAUEcG9vbAISUG9vbCBpcyBub3QgaW5pdGVkBA0kdDAzNzQ1ODM3NTQ4CQELZ2V0UG9vbERhdGECCQEHQWRkcmVzcwEJANkEAQUEcG9vbAUFcFR5cGUEA0FJZAgFDSR0MDM3NDU4Mzc1NDgCXzEEA0JJZAgFDSR0MDM3NDU4Mzc1NDgCXzIEBGJhbEEIBQ0kdDAzNzQ1ODM3NTQ4Al8zBARiYWxCCAUNJHQwMzc0NTgzNzU0OAJfNAQHc2hhcmVJZAgFDSR0MDM3NDU4Mzc1NDgCXzUEBmFtb3VudAkBCXVuc3Rha2VMUAQFBHBvb2wFBXBUeXBlBQdzaGFyZUlkBQ9saXF1aWRhdGVBbW91bnQEDGJvcnJvd0Ftb3VudAkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXICAV8FBXBvc0lkBRFrVXNlckJvcnJvd0Ftb3VudAQLYm9ycm93QXNzZXQJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfBQVwb3NJZAUSa1VzZXJCb3Jyb3dBc3NldElkBA91c2VyQ2FuV2l0aGRyYXcJARh1c2VyQ2FuV2l0aGRyYXdTaGFyZUNhbGMEBQR1c2VyBQRwb29sBQVwb3NJZAkAZgIFDGJvcnJvd0Ftb3VudAAAAwkAAAIFDGJvcnJvd0Ftb3VudAAACQACAQIrWW91IGNhbid0IGxpcXVpZGF0ZSBwb3NpdGlvbiB3aXRob3V0IGJvcnJvdwkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXICAV8FBXBvc0lkBRVrVXNlclBvc2l0aW9uSW50ZXJlc3QJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgUEcG9vbAURa1Bvb2xJbnRlcmVzdExvYW4JAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAUOa1Bvb2xUb3RhbExvYW4JAGUCCQEZZ2V0UG9vbFRvdGFsU2hhcmVXaXRoTG9hbgEFBHBvb2wFD2xpcXVpZGF0ZUFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBQprUG9vbFRvdGFsCQBlAgkBEWdldFBvb2xUb3RhbFNoYXJlAQUEcG9vbAUPbGlxdWlkYXRlQW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgIBXwUFcG9zSWQFDWtVc2VyUG9zaXRpb24JAGUCBQ91c2VyQ2FuV2l0aGRyYXcFD2xpcXVpZGF0ZUFtb3VudAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFBmFtb3VudAkA2QQBBQdzaGFyZUlkBQNuaWwBaQEIc3RvcExvc3MEBHVzZXIFcG9zSWQEcG9vbAdhc3NldElkCQELdmFsdWVPckVsc2UCCQELaXNBZG1pbkNhbGwBBQFpBBB0b2tlbk9yYWNsZVByaWNlCQERQGV4dHJOYXRpdmUoMTA1MCkCBQ9wcmljZU9yYWNsZUFkZHIJAKwCAgUHYXNzZXRJZAUOa1ByaWNlSW5PcmFjbGUDCQEBIQEJAQlpc0RlZmluZWQBCQCaCAIFBHRoaXMJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUEdXNlcgIBXwkApAMBBQVwb3NJZAIBXwUEcG9vbAIBXwUHYXNzZXRJZAUNa1VzZXJTdG9wTG9zcwkAAgECCE5vIGVudHJ5CQDNCAIJAQ53aXRoZHJhd1RvVXNlcgQJAKUIAQgFAWkGY2FsbGVyBQRwb29sCQCkAwEFBXBvc0lkBgkBC0RlbGV0ZUVudHJ5AQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQR1c2VyAgFfCQCkAwEFBXBvc0lkAgFfBQRwb29sAgFfBQdhc3NldElkBQ1rVXNlclN0b3BMb3NzAWkBEmNhcGl0YWxpemVFeEtlZXBlcgwEcG9vbAR0eXBlCXRva2VuVG9JZBBhbW91bnRUb0V4Y2hhbmdlBWNsYWltCWFtb3VudHNJbglhZGRyZXNzZXMPYXNzZXRzVG9SZWNlaXZlC2VzdFJlY2VpdmVkEXNsaXBwYWdlVG9sZXJhbmNlC21pblJlY2VpdmVkB29wdGlvbnMJAQt2YWx1ZU9yRWxzZQIJAQtpc0FkbWluQ2FsbAEFAWkEDSR0MDM5MzExMzk1MDUDBQVjbGFpbQkBC2NsYWltRmFybWVkAgUEdHlwZQUEcG9vbAQMY2xhaW1lZEFzc2V0AwkAAAIFBHR5cGUFB1NGX1BPT0wFBlNXT1BJRAUEV1hJRAkAlAoCBRBhbW91bnRUb0V4Y2hhbmdlBQxjbGFpbWVkQXNzZXQEDWNsYWltZWRBbW91bnQIBQ0kdDAzOTMxMTM5NTA1Al8xBAxjbGFpbWVkQXNzZXQIBQ0kdDAzOTMxMTM5NTA1Al8yBA9leGNoYW5nZWRBbW91bnQJAQ5leGNoYW5nZUtlZXBlcgoFCXRva2VuVG9JZAUQYW1vdW50VG9FeGNoYW5nZQUMY2xhaW1lZEFzc2V0BQlhbW91bnRzSW4FCWFkZHJlc3NlcwUPYXNzZXRzVG9SZWNlaXZlBQtlc3RSZWNlaXZlZAURc2xpcHBhZ2VUb2xlcmFuY2UFC21pblJlY2VpdmVkBQdvcHRpb25zBAZjaGFuZ2UJAGUCBQ1jbGFpbWVkQW1vdW50BRBhbW91bnRUb0V4Y2hhbmdlBAtjaGFuZ2VFbnRyeQMJAGYCBQZjaGFuZ2UAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBQ5rUG9vbENhcENoYW5nZQkAZAIFBmNoYW5nZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIFBHBvb2wFDmtQb29sQ2FwQ2hhbmdlAAAFA25pbAUDbmlsCQDOCAIJAQpjYXBpdGFsaXplBAUEcG9vbAUEdHlwZQUJdG9rZW5Ub0lkBQ9leGNoYW5nZWRBbW91bnQFC2NoYW5nZUVudHJ5AWkBEmNhcGl0YWxpemVFeFB1enpsZQgEcG9vbAR0eXBlCXRva2VuVG9JZBBhbW91bnRUb0V4Y2hhbmdlBWNsYWltCXJvdXRlc1N0cgxtaW5Ub1JlY2VpdmUHb3B0aW9ucwkBC3ZhbHVlT3JFbHNlAgkBC2lzQWRtaW5DYWxsAQUBaQQNJHQwNDAxOTA0MDM4NAMFBWNsYWltCQELY2xhaW1GYXJtZWQCBQR0eXBlBQRwb29sBAxjbGFpbWVkQXNzZXQDCQAAAgUEdHlwZQUHU0ZfUE9PTAUGU1dPUElEBQRXWElECQCUCgIFEGFtb3VudFRvRXhjaGFuZ2UFDGNsYWltZWRBc3NldAQNY2xhaW1lZEFtb3VudAgFDSR0MDQwMTkwNDAzODQCXzEEDGNsYWltZWRBc3NldAgFDSR0MDQwMTkwNDAzODQCXzIED2V4Y2hhbmdlZEFtb3VudAkBDmV4Y2hhbmdlUHV6emxlBgUJdG9rZW5Ub0lkBRBhbW91bnRUb0V4Y2hhbmdlBQxjbGFpbWVkQXNzZXQFCXJvdXRlc1N0cgUMbWluVG9SZWNlaXZlBQdvcHRpb25zBAZjaGFuZ2UJAGUCBQ1jbGFpbWVkQW1vdW50BRBhbW91bnRUb0V4Y2hhbmdlBAtjaGFuZ2VFbnRyeQMJAGYCBQZjaGFuZ2UAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBQ5rUG9vbENhcENoYW5nZQkAZAIFBmNoYW5nZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIFBHBvb2wFDmtQb29sQ2FwQ2hhbmdlAAAFA25pbAUDbmlsCQDOCAIJAQpjYXBpdGFsaXplBAUEcG9vbAUEdHlwZQUJdG9rZW5Ub0lkBQ9leGNoYW5nZWRBbW91bnQFC2NoYW5nZUVudHJ5AWkBEmNhcGl0YWxpemVFeFN3b3BGaQwEcG9vbAR0eXBlCXRva2VuVG9JZBBhbW91bnRUb0V4Y2hhbmdlBWNsYWltCmV4Y2hhbmdlcnMOZXhjaGFuZ2Vyc1R5cGUFYXJnczEFYXJnczIRcm91dGluZ0Fzc2V0c0tleXMSbWluQW1vdW50VG9SZWNlaXZlB29wdGlvbnMJAQt2YWx1ZU9yRWxzZQIJAQtpc0FkbWluQ2FsbAEFAWkEDSR0MDQxMTM1NDEzMjkDBQVjbGFpbQkBC2NsYWltRmFybWVkAgUEdHlwZQUEcG9vbAQMY2xhaW1lZEFzc2V0AwkAAAIFBHR5cGUFB1NGX1BPT0wFBlNXT1BJRAUEV1hJRAkAlAoCBRBhbW91bnRUb0V4Y2hhbmdlBQxjbGFpbWVkQXNzZXQEDWNsYWltZWRBbW91bnQIBQ0kdDA0MTEzNTQxMzI5Al8xBAxjbGFpbWVkQXNzZXQIBQ0kdDA0MTEzNTQxMzI5Al8yBA9leGNoYW5nZWRBbW91bnQJAQ5leGNoYW5nZVN3b3BGaQoFCXRva2VuVG9JZAUQYW1vdW50VG9FeGNoYW5nZQUMY2xhaW1lZEFzc2V0BQpleGNoYW5nZXJzBQ5leGNoYW5nZXJzVHlwZQUFYXJnczEFBWFyZ3MyBRFyb3V0aW5nQXNzZXRzS2V5cwUSbWluQW1vdW50VG9SZWNlaXZlBQdvcHRpb25zBAZjaGFuZ2UJAGUCBQ1jbGFpbWVkQW1vdW50BRBhbW91bnRUb0V4Y2hhbmdlBAtjaGFuZ2VFbnRyeQMJAGYCBQZjaGFuZ2UAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBQ5rUG9vbENhcENoYW5nZQkAZAIFBmNoYW5nZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIFBHBvb2wFDmtQb29sQ2FwQ2hhbmdlAAAFA25pbAUDbmlsCQDOCAIJAQpjYXBpdGFsaXplBAUEcG9vbAUEdHlwZQUJdG9rZW5Ub0lkBQ9leGNoYW5nZWRBbW91bnQFC2NoYW5nZUVudHJ5AWkBC2luaXROZXdQb29sCQR0eXBlCHBvb2xBZGRyC2luRmVlTm9Mb2FuCWluRmVlTG9hbgxjYXBGZWVOb0xvYW4OY2FwRmVlV2l0aExvYW4Rc3RvcGxvc3NGZWVOb0xvYW4Tc3RvcGxvc3NGZWVXaXRoTG9hbgljYW5Cb3Jyb3cJAQt2YWx1ZU9yRWxzZQIJAQtpc0FkbWluQ2FsbAEFAWkDAwkBAiE9AgUEdHlwZQUHU0ZfUE9PTAkBAiE9AgUEdHlwZQUHV1hfUE9PTAcJAAIBAgpXcm9uZyB0eXBlBA0kdDA0MjA3MDQyMTY0CQELZ2V0UG9vbERhdGECCQEHQWRkcmVzcwEJANkEAQUIcG9vbEFkZHIFBHR5cGUEA2FJZAgFDSR0MDQyMDcwNDIxNjQCXzEEA2JJZAgFDSR0MDQyMDcwNDIxNjQCXzIEBGFCYWwIBQ0kdDA0MjA3MDQyMTY0Al8zBARiQmFsCAUNJHQwNDIwNzA0MjE2NAJfNAQHc2hhcmVJZAgFDSR0MDQyMDcwNDIxNjQCXzUJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUIcG9vbEFkZHIFFWtBeGx5SW5GZWVXaXRob3V0TG9hbgULaW5GZWVOb0xvYW4JAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUIcG9vbEFkZHIFEmtBeGx5SW5GZWVXaXRoTG9hbgUJaW5GZWVMb2FuCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFCHBvb2xBZGRyBRFrQXhseU5vTG9hbkNhcEZlZQUMY2FwRmVlTm9Mb2FuCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFCHBvb2xBZGRyBRNrQXhseVdpdGhMb2FuQ2FwRmVlBQ5jYXBGZWVXaXRoTG9hbgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQhwb29sQWRkcgUWa0F4bHlTdG9wTG9zc05vTG9hbkZlZQURc3RvcGxvc3NGZWVOb0xvYW4JAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUIcG9vbEFkZHIFFGtBeGx5U3RvcExvc3NMb2FuRmVlBRNzdG9wbG9zc0ZlZVdpdGhMb2FuCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFCHBvb2xBZGRyBRFrUG9vbEludGVyZXN0TG9hbgAACQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFCHBvb2xBZGRyBRNrUG9vbEludGVyZXN0Tm9Mb2FuAAAJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICBQVrUG9vbAUIcG9vbEFkZHIFBHR5cGUJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICBQdzaGFyZUlkBQprU2hhcmVQb29sBQhwb29sQWRkcgkAzAgCCQEMQm9vbGVhbkVudHJ5AgkArAICBQhwb29sQWRkcgUOa1Bvb2xDYW5Cb3Jyb3cFCWNhbkJvcnJvdwUDbmlsAQJ0eAEGdmVyaWZ5AAkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAgFAnR4D3NlbmRlclB1YmxpY0tlecyC8gY=", "height": 2653851, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 2VkR1ADyCjUa3VgPDuYD6Lrz8UowiEFDFPh2p9ptL6QD Next: JBuqH64sDbEgp5ujCnL39kaS2G1hNJy1k4DCmr2MsK7z Diff:
OldNewDifferences
158158 }
159159
160160
161-func at (au) = $Tuple5(valueOrErrorMessage(getString(au, p), "Can't get pool A asset id"), valueOrErrorMessage(getString(au, q), "Can't get pool B asset id"), valueOrErrorMessage(getInteger(au, n), "Can't get pool A asset balance"), valueOrErrorMessage(getInteger(au, o), "Can't get pool B asset balance"), valueOrErrorMessage(getString(au, r), "Can't get share asset id"))
161+func at (au) = $Tuple2(valueOrErrorMessage(getInteger(au, n), "Can't get pool A asset balance"), valueOrErrorMessage(getInteger(au, o), "Can't get pool B asset balance"))
162162
163163
164-func av (au) = {
165- let aw = {
166- let ax = invoke(au, "getPoolConfigWrapperREADONLY", nil, nil)
167- if ($isInstanceOf(ax, "List[Any]"))
168- then ax
169- else throw(($getType(ax) + " couldn't be cast to List[Any]"))
164+func av (au,aw,ax) = $Tuple2({
165+ let ay = invoke(au, "getAccBalanceWrapperREADONLY", [aw], nil)
166+ if ($isInstanceOf(ay, "Int"))
167+ then ay
168+ else throw(($getType(ay) + " couldn't be cast to Int"))
169+ }, {
170+ let ay = invoke(au, "getAccBalanceWrapperREADONLY", [ax], nil)
171+ if ($isInstanceOf(ay, "Int"))
172+ then ay
173+ else throw(($getType(ay) + " couldn't be cast to Int"))
174+ })
175+
176+
177+func az (au,aA,aw,ax) = if ((aA == a))
178+ then at(au)
179+ else if ((aA == b))
180+ then av(au, aw, ax)
181+ else throw("Wrong pool type")
182+
183+
184+func aB (au) = {
185+ let aC = at(au)
186+ if ((aC == aC))
187+ then {
188+ let aD = aC._2
189+ let aE = aC._1
190+ $Tuple5(valueOrErrorMessage(getString(au, p), "Can't get pool A asset id"), valueOrErrorMessage(getString(au, q), "Can't get pool B asset id"), aE, aD, valueOrErrorMessage(getString(au, r), "Can't get share asset id"))
191+ }
192+ else throw("Strict value is not equal to itself.")
193+ }
194+
195+
196+func aF (au) = {
197+ let aG = {
198+ let ay = invoke(au, "getPoolConfigWrapperREADONLY", nil, nil)
199+ if ($isInstanceOf(ay, "List[Any]"))
200+ then ay
201+ else throw(($getType(ay) + " couldn't be cast to List[Any]"))
170202 }
171- if ((aw == aw))
203+ if ((aG == aG))
172204 then {
173- let ay = valueOrErrorMessage({
174- let ax = aw[4]
175- if ($isInstanceOf(ax, "String"))
176- then ax
205+ let aw = valueOrErrorMessage({
206+ let ay = aG[4]
207+ if ($isInstanceOf(ay, "String"))
208+ then ay
177209 else unit
178210 }, "Can't get pool A asset id")
179- let az = valueOrErrorMessage({
180- let ax = aw[5]
181- if ($isInstanceOf(ax, "String"))
182- then ax
211+ let ax = valueOrErrorMessage({
212+ let ay = aG[5]
213+ if ($isInstanceOf(ay, "String"))
214+ then ay
183215 else unit
184216 }, "Can't get pool B asset id")
185- let aA = valueOrErrorMessage({
186- let ax = aw[3]
187- if ($isInstanceOf(ax, "String"))
188- then ax
217+ let aH = valueOrErrorMessage({
218+ let ay = aG[3]
219+ if ($isInstanceOf(ay, "String"))
220+ then ay
189221 else unit
190222 }, "Can't get pool LP asset id")
191- let aB = {
192- let ax = invoke(au, "getAccBalanceWrapperREADONLY", [ay], nil)
193- if ($isInstanceOf(ax, "Int"))
194- then ax
195- else throw(($getType(ax) + " couldn't be cast to Int"))
196- }
197- if ((aB == aB))
223+ let aI = av(au, aw, ax)
224+ if ((aI == aI))
198225 then {
199- let aC = {
200- let ax = invoke(au, "getAccBalanceWrapperREADONLY", [az], nil)
201- if ($isInstanceOf(ax, "Int"))
202- then ax
203- else throw(($getType(ax) + " couldn't be cast to Int"))
204- }
205- if ((aC == aC))
206- then $Tuple5(ay, az, aB, aC, aA)
207- else throw("Strict value is not equal to itself.")
226+ let aD = aI._2
227+ let aE = aI._1
228+ $Tuple5(aw, ax, aE, aD, aH)
208229 }
209230 else throw("Strict value is not equal to itself.")
210231 }
212233 }
213234
214235
215-func aD (au,aE) = if ((aE == a))
216- then at(au)
217- else if ((aE == b))
218- then av(au)
236+func aJ (au,aA) = if ((aA == a))
237+ then aB(au)
238+ else if ((aA == b))
239+ then aF(au)
219240 else throw("Wrong pool type")
220241
221242
222-func aF (au,aE,aA) = if ((aE == a))
243+func aK (au,aA,aH) = if ((aA == a))
223244 then valueOrErrorMessage(getInteger(au, s), "Can't get share asset supply")
224- else if ((aE == b))
225- then valueOrErrorMessage(assetInfo(fromBase58String(aA)), "Wrong ShareId").quantity
245+ else if ((aA == b))
246+ then valueOrErrorMessage(assetInfo(fromBase58String(aH)), "Wrong ShareId").quantity
226247 else throw("Wrong pool type")
227248
228249
229-func aG (aH) = valueOrElse(getInteger(this, (aH + A)), 0)
250+func aL (aM) = valueOrElse(getInteger(this, (aM + A)), 0)
230251
231252
232-func aI (aH) = valueOrElse(getInteger(this, (aH + B)), 0)
253+func aN (aM) = valueOrElse(getInteger(this, (aM + B)), 0)
233254
234255
235-func aJ (aK) = (valueOrElse(getInteger(this, (aK + y)), 0) + 1)
256+func aO (aP) = (valueOrElse(getInteger(this, (aP + y)), 0) + 1)
236257
237258
238-func aL (aH,aM) = if ((aM == d))
239- then getIntegerValue(this, (aH + I))
240- else if ((aM == c))
241- then getIntegerValue(this, (aH + H))
242- else if ((aM == g))
243- then getIntegerValue(this, (aH + G))
244- else if ((aM == h))
245- then getIntegerValue(this, (aH + F))
246- else if ((aM == i))
259+func aQ (aM,aR) = if ((aR == d))
260+ then getIntegerValue(this, (aM + I))
261+ else if ((aR == c))
262+ then getIntegerValue(this, (aM + H))
263+ else if ((aR == g))
264+ then getIntegerValue(this, (aM + G))
265+ else if ((aR == h))
266+ then getIntegerValue(this, (aM + F))
267+ else if ((aR == i))
247268 then 0
248269 else throw("Wrong fee type")
249270
250271
251-func aN () = Address(fromBase58String(valueOrErrorMessage(getString(this, U), "Can't get swopfi farming addr")))
272+func aS () = Address(fromBase58String(valueOrErrorMessage(getString(this, U), "Can't get swopfi farming addr")))
252273
253274
254-func aO (au) = {
255- let aP = Address(fromBase58String(valueOrErrorMessage(getString(au, "%s__factoryContract"), "Can't get WX factory contract addr")))
256- let aQ = split(valueOrErrorMessage(getString(aP, "%s__factoryConfig"), "Can't get WX factory cfg"), "__")
257- Address(fromBase58String(aQ[1]))
275+func aT (au) = {
276+ let aU = Address(fromBase58String(valueOrErrorMessage(getString(au, "%s__factoryContract"), "Can't get WX factory contract addr")))
277+ let aV = split(valueOrErrorMessage(getString(aU, "%s__factoryConfig"), "Can't get WX factory cfg"), "__")
278+ Address(fromBase58String(aV[1]))
258279 }
259280
260281
261-func aR (ap) = {
282+func aW (ap) = {
262283 let aq = ap
263284 if ($isInstanceOf(aq, "ByteVector"))
264285 then {
274295 }
275296
276297
277-func aS (ap) = if ((ap == "WAVES"))
298+func aX (ap) = if ((ap == "WAVES"))
278299 then unit
279300 else fromBase58String(ap)
280301
281302
282-func aT (ap) = if ((ap == "WAVES"))
303+func aY (ap) = if ((ap == "WAVES"))
283304 then 8
284305 else {
285306 let aq = assetInfo(fromBase58String(ap))
286307 if ($isInstanceOf(aq, "Asset"))
287308 then {
288- let aU = aq
289- aU.decimals
309+ let aZ = aq
310+ aZ.decimals
290311 }
291312 else throw("Can't find asset")
292313 }
293314
294315
295-func aV (ap) = pow(10, 0, aT(ap), 0, 0, DOWN)
316+func ba (ap) = pow(10, 0, aY(ap), 0, 0, DOWN)
296317
297318
298-func aW (aX) = {
299- func aY (aZ,ap) = {
300- let ba = getIntegerValue(ae, (ap + R))
301- (aZ :+ ba)
319+func bb (bc) = {
320+ func bd (be,ap) = {
321+ let bf = getIntegerValue(ae, (ap + R))
322+ (be :+ bf)
302323 }
303324
304- let bb = aX
305- let bc = size(bb)
306- let bd = nil
307- func be (bf,bg) = if ((bg >= bc))
308- then bf
309- else aY(bf, bb[bg])
325+ let bg = bc
326+ let bh = size(bg)
327+ let bi = nil
328+ func bj (bk,bl) = if ((bl >= bh))
329+ then bk
330+ else bd(bk, bg[bl])
310331
311- func bh (bf,bg) = if ((bg >= bc))
312- then bf
332+ func bm (bk,bl) = if ((bl >= bh))
333+ then bk
313334 else throw("List size exceeds 50")
314335
315- bh(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(bd, 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)
336+ bm(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bi, 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)
316337 }
317338
318339
319-func bi (aA) = {
320- let aH = valueOrErrorMessage(getString(this, (aA + O)), "Can't find pool addr by share id")
321- let au = Address(fromBase58String(aH))
322- let bj = valueOrErrorMessage(getString(this, (N + aH)), "Pool is not inited")
323- let bk = aD(au, bj)
324- let ay = bk._1
325- let az = bk._2
326- let bl = bk._3
327- let bm = bk._4
328- let bn = getIntegerValue(ae, (ay + R))
329- let bo = getIntegerValue(ae, (az + R))
330- let bp = aF(au, bj, aA)
331- let bq = pow(10, 0, aT(ay), 0, 0, DOWN)
332- let br = pow(10, 0, aT(az), 0, 0, DOWN)
333- let bs = pow(10, 0, aT(aA), 0, 0, DOWN)
334- let bt = (fraction(bl, bn, bq) + fraction(bm, bo, br))
335- fraction(bt, bs, bp)
340+func bn (aH) = {
341+ let aM = valueOrErrorMessage(getString(this, (aH + O)), "Can't find pool addr by share id")
342+ let au = Address(fromBase58String(aM))
343+ let bo = valueOrErrorMessage(getString(this, (N + aM)), "Pool is not inited")
344+ let bp = aJ(au, bo)
345+ let aw = bp._1
346+ let ax = bp._2
347+ let bq = bp._3
348+ let br = bp._4
349+ let bs = getIntegerValue(ae, (aw + R))
350+ let bt = getIntegerValue(ae, (ax + R))
351+ let bu = aK(au, bo, aH)
352+ let bv = pow(10, 0, aY(aw), 0, 0, DOWN)
353+ let bw = pow(10, 0, aY(ax), 0, 0, DOWN)
354+ let bx = pow(10, 0, aY(aH), 0, 0, DOWN)
355+ let by = (fraction(bq, bs, bv) + fraction(br, bt, bw))
356+ fraction(by, bx, bu)
336357 }
337358
338359
339-func bu (bv) = {
340- func aY (aZ,aA) = (aZ :+ bi(aA))
360+func bz (bA) = {
361+ func bd (be,aH) = (be :+ bn(aH))
341362
342- let bb = bv
343- let bc = size(bb)
344- let bd = nil
345- func be (bf,bg) = if ((bg >= bc))
346- then bf
347- else aY(bf, bb[bg])
363+ let bg = bA
364+ let bh = size(bg)
365+ let bi = nil
366+ func bj (bk,bl) = if ((bl >= bh))
367+ then bk
368+ else bd(bk, bg[bl])
348369
349- func bh (bf,bg) = if ((bg >= bc))
350- then bf
370+ func bm (bk,bl) = if ((bl >= bh))
371+ then bk
351372 else throw("List size exceeds 20")
352373
353- bh(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(bd, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
374+ bm(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bi, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
354375 }
355376
356377
357-func bw (ay,az,aA,bx) = {
358- let by = aW([ay, az])
359- let bz = bi(aA)
360- let bA = ([toString(by[0]), toString(by[1]), toString(bz)] ++ bx)
361-[StringEntry(Q, makeString(bA, ","))]
378+func bB (aw,ax,aH,bC) = {
379+ let bD = bb([aw, ax])
380+ let bE = bn(aH)
381+ let bF = ([toString(bD[0]), toString(bD[1]), toString(bE)] ++ bC)
382+[StringEntry(Q, makeString(bF, ","))]
362383 }
363384
364385
365-func bB (bj,au,bC,ay,bD,az,aB,aC) = if ((bj == a))
386+func bG (bo,au,bH,aw,bI,ax,aE,aD) = if ((bo == a))
366387 then {
367- let bE = {
368- let ax = invoke(au, "callFunction", ["calcLPReplenishTwoTokensREADONLY", [toString(bC), toString(bD)]], nil)
369- if ($isInstanceOf(ax, "List[Any]"))
370- then ax
371- else throw(($getType(ax) + " couldn't be cast to List[Any]"))
388+ let bJ = {
389+ let ay = invoke(au, "callFunction", ["calcLPReplenishTwoTokensREADONLY", [toString(bH), toString(bI)]], nil)
390+ if ($isInstanceOf(ay, "List[Any]"))
391+ then ay
392+ else throw(($getType(ay) + " couldn't be cast to List[Any]"))
372393 }
373- if ((bE == bE))
394+ if ((bJ == bJ))
374395 then $Tuple5({
375- let ax = bE[3]
376- if ($isInstanceOf(ax, "Int"))
377- then ax
378- else throw(($getType(ax) + " couldn't be cast to Int"))
396+ let ay = bJ[3]
397+ if ($isInstanceOf(ay, "Int"))
398+ then ay
399+ else throw(($getType(ay) + " couldn't be cast to Int"))
379400 }, {
380- let ax = bE[4]
381- if ($isInstanceOf(ax, "Int"))
382- then ax
383- else throw(($getType(ax) + " couldn't be cast to Int"))
401+ let ay = bJ[4]
402+ if ($isInstanceOf(ay, "Int"))
403+ then ay
404+ else throw(($getType(ay) + " couldn't be cast to Int"))
384405 }, {
385- let ax = bE[1]
386- if ($isInstanceOf(ax, "Int"))
387- then ax
388- else throw(($getType(ax) + " couldn't be cast to Int"))
389- }, aR(bE[2]), {
390- let ax = bE[0]
391- if ($isInstanceOf(ax, "Int"))
392- then ax
393- else throw(($getType(ax) + " couldn't be cast to Int"))
406+ let ay = bJ[1]
407+ if ($isInstanceOf(ay, "Int"))
408+ then ay
409+ else throw(($getType(ay) + " couldn't be cast to Int"))
410+ }, aW(bJ[2]), {
411+ let ay = bJ[0]
412+ if ($isInstanceOf(ay, "Int"))
413+ then ay
414+ else throw(($getType(ay) + " couldn't be cast to Int"))
394415 })
395416 else throw("Strict value is not equal to itself.")
396417 }
397418 else {
398- let bF = $Tuple2(split({
399- let ax = invoke(au, "evaluatePutByAmountAssetREADONLY", [bC], nil)
400- if ($isInstanceOf(ax, "String"))
401- then ax
402- else throw(($getType(ax) + " couldn't be cast to String"))
419+ let bK = $Tuple2(split({
420+ let ay = invoke(au, "evaluatePutByAmountAssetREADONLY", [bH], nil)
421+ if ($isInstanceOf(ay, "String"))
422+ then ay
423+ else throw(($getType(ay) + " couldn't be cast to String"))
403424 }, "__"), split({
404- let ax = invoke(au, "evaluatePutByPriceAssetREADONLY", [bD], nil)
405- if ($isInstanceOf(ax, "String"))
406- then ax
407- else throw(($getType(ax) + " couldn't be cast to String"))
425+ let ay = invoke(au, "evaluatePutByPriceAssetREADONLY", [bI], nil)
426+ if ($isInstanceOf(ay, "String"))
427+ then ay
428+ else throw(($getType(ay) + " couldn't be cast to String"))
408429 }, "__"))
409- if ((bF == bF))
430+ if ((bK == bK))
410431 then {
411- let bG = bF._2
412- let bH = bF._1
413- let bI = parseIntValue(bH[1])
414- let bJ = parseIntValue(bG[1])
415- if ((bJ > bI))
432+ let bL = bK._2
433+ let bM = bK._1
434+ let bN = parseIntValue(bM[1])
435+ let bO = parseIntValue(bL[1])
436+ if ((bO > bN))
416437 then {
417- let bK = parseIntValue(bH[8])
418- $Tuple5(bC, bK, (bD - bK), az, bJ)
438+ let bP = parseIntValue(bM[8])
439+ $Tuple5(bH, bP, (bI - bP), ax, bO)
419440 }
420441 else {
421- let bK = parseIntValue(bG[7])
422- $Tuple5(bK, bD, (bC - bK), ay, bI)
442+ let bP = parseIntValue(bL[7])
443+ $Tuple5(bP, bI, (bH - bP), aw, bN)
423444 }
424445 }
425446 else throw("Strict value is not equal to itself.")
426447 }
427448
428449
429-func bL (au,bj,bC,ay,bD,az) = {
430- let bM = [AttachedPayment(aS(ay), bC), AttachedPayment(aS(az), bD)]
431- if ((bj == a))
432- then invoke(au, "callFunction", ["replenishWithTwoTokens", ["false", "0"]], bM)
433- else invoke(au, "put", [1000000, false], bM)
450+func bQ (au,bo,bH,aw,bI,ax) = {
451+ let bR = [AttachedPayment(aX(aw), bH), AttachedPayment(aX(ax), bI)]
452+ if ((bo == a))
453+ then invoke(au, "callFunction", ["replenishWithTwoTokens", ["false", "0"]], bR)
454+ else invoke(au, "put", [1000000, false], bR)
434455 }
435456
436457
437-func bN (au,bj,bK,bO) = {
438- let bM = [AttachedPayment(aS(bO), bK)]
439- if ((bj == a))
440- then invoke(au, "callFunction", ["replenishWithOneToken", ["0", "false", "0"]], bM)
441- else invoke(au, "putOneTkn", [0, false], bM)
458+func bS (au,bo,bP,bT) = {
459+ let bR = [AttachedPayment(aX(bT), bP)]
460+ if ((bo == a))
461+ then invoke(au, "callFunction", ["replenishWithOneToken", ["0", "false", "0"]], bR)
462+ else invoke(au, "putOneTkn", [0, false], bR)
442463 }
443464
444465
445-func bP (aH,bj,aA,bQ) = {
446- let bM = [AttachedPayment(fromBase58String(aA), bQ)]
447- if ((bj == a))
448- then invoke(aN(), "lockShareTokens", [aH, 0], bM)
449- else invoke(aO(addressFromStringValue(aH)), "stake", nil, bM)
466+func bU (aM,bo,aH,bV) = {
467+ let bR = [AttachedPayment(fromBase58String(aH), bV)]
468+ if ((bo == a))
469+ then invoke(aS(), "lockShareTokens", [aM, 0], bR)
470+ else invoke(aT(addressFromStringValue(aM)), "stake", nil, bR)
450471 }
451472
452473
453-func bR (aH,bj,aA,bQ) = {
454- let bS = if ((bj == a))
455- then $Tuple3(aN(), "withdrawShareTokens", [aH, bQ])
456- else if ((bj == b))
457- then $Tuple3(aO(Address(fromBase58String(aH))), "unstake", [aA, bQ])
474+func bW (aM,bo,aH,bV) = {
475+ let bX = if ((bo == a))
476+ then $Tuple3(aS(), "withdrawShareTokens", [aM, bV])
477+ else if ((bo == b))
478+ then $Tuple3(aT(Address(fromBase58String(aM))), "unstake", [aH, bV])
458479 else throw("Wrong pool type")
459- let bT = bS._1
460- let bU = bS._2
461- let bV = bS._3
462- let bW = invoke(bT, bU, bV, nil)
463- if ((bW == bW))
464- then bQ
480+ let bY = bX._1
481+ let bZ = bX._2
482+ let ca = bX._3
483+ let cb = invoke(bY, bZ, ca, nil)
484+ if ((cb == cb))
485+ then bV
465486 else throw("Strict value is not equal to itself.")
466487 }
467488
468489
469-func bX (aH,bY,bZ,aB,aC,ca,cb) = {
470- let au = Address(fromBase58String(aH))
471- let cc = 1000000
472- let cd = getIntegerValue(au, t)
473- let ce = fraction(ca, cc, (cc - cd), CEILING)
474- let cf = if ((cb == bY))
490+func cc (aM,cd,ce,aE,aD,cf,cg) = {
491+ let au = Address(fromBase58String(aM))
492+ let ch = 1000000
493+ let ci = getIntegerValue(au, t)
494+ let cj = fraction(cf, ch, (ch - ci), CEILING)
495+ let ck = if ((cg == cd))
475496 then {
476- let cg = fraction(ce, aC, (aB - ce), CEILING)
477- $Tuple2(cg, bZ)
497+ let cl = fraction(cj, aD, (aE - cj), CEILING)
498+ $Tuple2(cl, ce)
478499 }
479500 else {
480- let cg = fraction(ce, aB, (aC - ce), CEILING)
481- $Tuple2(cg, bY)
501+ let cl = fraction(cj, aE, (aD - cj), CEILING)
502+ $Tuple2(cl, cd)
482503 }
483- let cg = cf._1
484- let ch = cf._2
485- $Tuple2(ch, cg)
504+ let cl = ck._1
505+ let cm = ck._2
506+ $Tuple2(cm, cl)
486507 }
487508
488509
489-func ci (aH,bY,bZ,aB,aC,ca,cb) = {
490- let cj = getIntegerValue(af, "%s__protocolFee")
491- let ck = getIntegerValue(af, "%s__poolFee")
492- let cl = toBigInt(100000000)
493- let cm = if ((cb == bY))
510+func cn (aM,cd,ce,aE,aD,cf,cg) = {
511+ let co = getIntegerValue(af, "%s__protocolFee")
512+ let cp = getIntegerValue(af, "%s__poolFee")
513+ let cq = toBigInt(100000000)
514+ let cr = if ((cg == cd))
494515 then {
495- let cg = fraction(ca, aC, (aB - ca))
496- $Tuple2(cg, bZ)
516+ let cl = fraction(cf, aD, (aE - cf))
517+ $Tuple2(cl, ce)
497518 }
498519 else {
499- let cg = fraction(ca, aB, (aC - ca))
500- $Tuple2(cg, bY)
520+ let cl = fraction(cf, aE, (aD - cf))
521+ $Tuple2(cl, cd)
501522 }
502- let cg = cm._1
503- let ch = cm._2
504- let cn = toInt(fraction(toBigInt(cg), cl, (cl - toBigInt((cj + ck))), CEILING))
505- $Tuple2(ch, cn)
523+ let cl = cr._1
524+ let cm = cr._2
525+ let cs = toInt(fraction(toBigInt(cl), cq, (cq - toBigInt((co + cp))), CEILING))
526+ $Tuple2(cm, cs)
506527 }
507528
508529
509-func co (aE,aH,bY,bZ,aB,aC,ca,cb) = if ((aE == a))
530+func ct (aA,aM,cd,ce,aE,aD,cf,cg) = if ((aA == a))
510531 then {
511- let cp = bX(aH, bY, bZ, aB, aC, ca, cb)
512- let ch = cp._1
513- let cg = cp._2
514- invoke(addressFromStringValue(aH), "callFunction", ["exchange", [toString(ca)]], [AttachedPayment(aS(ch), cg)])
532+ let cu = cc(aM, cd, ce, aE, aD, cf, cg)
533+ let cm = cu._1
534+ let cl = cu._2
535+ invoke(addressFromStringValue(aM), "callFunction", ["exchange", [toString(cf)]], [AttachedPayment(aX(cm), cl)])
515536 }
516537 else {
517- let cq = ci(aH, bY, bZ, aB, aC, ca, cb)
518- let ch = cq._1
519- let cg = cq._2
520- invoke(af, "swap", [ca, cb, toString(this)], [AttachedPayment(aS(ch), cg)])
538+ let cv = cn(aM, cd, ce, aE, aD, cf, cg)
539+ let cm = cv._1
540+ let cl = cv._2
541+ invoke(af, "swap", [cf, cg, toString(this)], [AttachedPayment(aX(cm), cl)])
521542 }
522543
523544
524-func cr (bj,aH,bC,ay,bD,az,aB,aC) = {
525- let au = addressFromStringValue(aH)
526- if ((bj == a))
545+func cw (au,bo,aH,cx) = {
546+ let cy = if ((bo == a))
527547 then {
528- let bW = {
529- let ax = invoke(au, "callFunction", ["calcLPReplenishDiffPropREADONLY", [toString(bC), toString(bD), "0"]], nil)
530- if ($isInstanceOf(ax, "List[Any]"))
531- then ax
532- else throw(($getType(ax) + " couldn't be cast to List[Any]"))
548+ let cb = {
549+ let ay = invoke(au, "callFunction", ["withdrawREADONLY", [toString(cx)]], nil)
550+ if ($isInstanceOf(ay, "(Int, Int)"))
551+ then ay
552+ else throw(($getType(ay) + " couldn't be cast to (Int, Int)"))
533553 }
534- if ((bW == bW))
535- then $Tuple2({
536- let ax = bW[0]
537- if ($isInstanceOf(ax, "Int"))
538- then ax
539- else throw(($getType(ax) + " couldn't be cast to Int"))
540- }, {
541- let ax = bW[1]
542- if ($isInstanceOf(ax, "Int"))
543- then ax
544- else throw(($getType(ax) + " couldn't be cast to Int"))
545- })
554+ if ((cb == cb))
555+ then $Tuple2(cb._1, cb._2)
546556 else throw("Strict value is not equal to itself.")
547557 }
548- else if ((bj == b))
549- then {
550- let cs = if (if ((bC > 0))
551- then (bD > 0)
552- else false)
553- then {
554- let ct = bB(bj, au, bC, ay, bD, az, aB, aC)
555- let cu = ct._1
556- let cv = ct._2
557- let cw = ct._3
558- let cx = ct._4
559- let cy = ct._5
560- $Tuple3(cw, cx, cy)
561- }
562- else if ((bC > 0))
563- then $Tuple3(bC, ay, 0)
564- else $Tuple3(bD, az, 0)
565- let cw = cs._1
566- let cx = cs._2
567- let cz = cs._3
568- let cA = if ((cw > 0))
569- then {
570- let bW = {
571- let ax = invoke(au, "putOneTknREADONLY", [cx, cw], nil)
572- if ($isInstanceOf(ax, "(Int, Int, Int)"))
573- then ax
574- else throw(($getType(ax) + " couldn't be cast to (Int, Int, Int)"))
575- }
576- if ((bW == bW))
577- then $Tuple2(bW._1, bW._3)
578- else throw("Strict value is not equal to itself.")
579- }
580- else $Tuple2(0, 0)
581- let cB = cA._1
582- let cC = cA._2
583- $Tuple2((cz + cB), cC)
584- }
585- else throw("Wrong pool type")
558+ else {
559+ let cb = split({
560+ let ay = invoke(au, "evaluateGetREADONLY", [aH, cx], nil)
561+ if ($isInstanceOf(ay, "String"))
562+ then ay
563+ else throw(($getType(ay) + " couldn't be cast to String"))
564+ }, "__")
565+ if ((cb == cb))
566+ then $Tuple2(parseIntValue(cb[1]), parseIntValue(cb[2]))
567+ else throw("Strict value is not equal to itself.")
568+ }
569+ let cz = cy._1
570+ let cA = cy._2
571+ $Tuple2(cz, cA)
586572 }
587573
588574
589-func cD (au,bj,aA,cE) = {
590- let cF = if ((bj == a))
591- then {
592- let bW = {
593- let ax = invoke(au, "callFunction", ["withdrawREADONLY", [toString(cE)]], nil)
594- if ($isInstanceOf(ax, "(Int, Int)"))
595- then ax
596- else throw(($getType(ax) + " couldn't be cast to (Int, Int)"))
597- }
598- if ((bW == bW))
599- then $Tuple2(bW._1, bW._2)
600- else throw("Strict value is not equal to itself.")
601- }
602- else {
603- let bW = split({
604- let ax = invoke(au, "evaluateGetREADONLY", [aA, cE], nil)
605- if ($isInstanceOf(ax, "String"))
606- then ax
607- else throw(($getType(ax) + " couldn't be cast to String"))
608- }, "__")
609- if ((bW == bW))
610- then $Tuple2(parseIntValue(bW[1]), parseIntValue(bW[2]))
611- else throw("Strict value is not equal to itself.")
612- }
613- let cG = cF._1
614- let cH = cF._2
615- $Tuple2(cG, cH)
616- }
617-
618-
619-func cI (bj,aH,cy,aA,ay,az,aB,aC,cJ,cK) = {
620- let au = addressFromStringValue(aH)
621- let cL = cD(au, bj, aA, cy)
622- let cM = cL._1
623- let cN = cL._2
624- if ((cJ > 0))
625- then {
626- let cO = if (if ((cK == ay))
627- then (cJ > cM)
628- else false)
629- then (cJ - cM)
630- else if (if ((cK == az))
631- then (cJ > cN)
632- else false)
633- then (cJ - cN)
634- else 0
635- let cP = if ((cO > 0))
636- then if ((bj == a))
637- then bX(aH, ay, az, aB, aC, cO, cK)
638- else ci(aH, ay, az, aB, aC, cO, cK)
639- else $Tuple2("", 0)
640- let ch = cP._1
641- let cg = cP._2
642- if ((cK == ay))
643- then $Tuple2(((cM + cO) - cJ), (cN - cg))
644- else $Tuple2((cM - cg), ((cN + cO) - cJ))
645- }
646- else $Tuple2(cM, cN)
647- }
648-
649-
650-func cQ (aE,aH) = if ((aE == a))
575+func cB (aA,aM) = if ((aA == a))
651576 then {
652- let cR = ao(ag)
653- if ((cR == cR))
577+ let cC = ao(ag)
578+ if ((cC == cC))
654579 then {
655- let bW = invoke(aN(), "claim", [aH], nil)
656- if ((bW == bW))
580+ let cb = invoke(aS(), "claim", [aM], nil)
581+ if ((cb == cb))
657582 then {
658- let cS = ao(ag)
659- $Tuple2((cS - cR), ag)
583+ let cD = ao(ag)
584+ $Tuple2((cD - cC), ag)
660585 }
661586 else throw("Strict value is not equal to itself.")
662587 }
663588 else throw("Strict value is not equal to itself.")
664589 }
665- else if ((aE == b))
590+ else if ((aA == b))
666591 then {
667- let cR = ao(ah)
668- if ((cR == cR))
592+ let cC = ao(ah)
593+ if ((cC == cC))
669594 then {
670- let bW = invoke(aO(Address(fromBase58String(aH))), "claimWX", [aH], nil)
671- if ((bW == bW))
595+ let cb = invoke(aT(Address(fromBase58String(aM))), "claimWX", [aM], nil)
596+ if ((cb == cb))
672597 then {
673- let cS = ao(ah)
674- $Tuple2((cS - cR), ah)
598+ let cD = ao(ah)
599+ $Tuple2((cD - cC), ah)
675600 }
676601 else throw("Strict value is not equal to itself.")
677602 }
680605 else throw("Wrong pool type")
681606
682607
683-func cT (bj,aH,aM,bC,ay,bD,az,aB,aC,cU) = {
684- let cV = ao(fromBase58String(cU))
685- if ((cV == cV))
608+func cE (bo,aM,aR,bH,aw,bI,ax,aE,aD,cF) = {
609+ let cG = ao(fromBase58String(cF))
610+ if ((cG == cG))
686611 then {
687- let au = addressFromStringValue(aH)
688- let cW = if (if ((bC > 0))
689- then (bD > 0)
612+ let au = addressFromStringValue(aM)
613+ let cH = if (if ((bH > 0))
614+ then (bI > 0)
690615 else false)
691616 then {
692- let cX = bB(bj, au, bC, ay, bD, az, aB, aC)
693- let cu = cX._1
694- let cv = cX._2
695- let cw = cX._3
696- let cx = cX._4
697- let bW = bL(au, bj, cu, ay, cv, az)
698- if ((bW == bW))
699- then $Tuple2(cw, cx)
617+ let cI = bG(bo, au, bH, aw, bI, ax, aE, aD)
618+ let cJ = cI._1
619+ let cK = cI._2
620+ let cL = cI._3
621+ let cM = cI._4
622+ let cb = bQ(au, bo, cJ, aw, cK, ax)
623+ if ((cb == cb))
624+ then $Tuple2(cL, cM)
700625 else throw("Strict value is not equal to itself.")
701626 }
702- else if ((bC > 0))
703- then $Tuple2(bC, ay)
704- else if ((bD > 0))
705- then $Tuple2(bD, az)
627+ else if ((bH > 0))
628+ then $Tuple2(bH, aw)
629+ else if ((bI > 0))
630+ then $Tuple2(bI, ax)
706631 else throw("pmts must be > 0")
707- let cw = cW._1
708- let cx = cW._2
709- let bW = if ((cw > 0))
710- then bN(au, bj, cw, cx)
632+ let cL = cH._1
633+ let cM = cH._2
634+ let cb = if ((cL > 0))
635+ then bS(au, bo, cL, cM)
711636 else nil
712- if ((bW == bW))
637+ if ((cb == cb))
713638 then {
714- let cY = ao(fromBase58String(cU))
715- let cZ = (cY - cV)
716- let da = fraction(cZ, aL(aH, aM), m)
717- let db = (cZ - da)
718- if ((0 >= db))
639+ let cN = ao(fromBase58String(cF))
640+ let cO = (cN - cG)
641+ let cP = fraction(cO, aQ(aM, aR), m)
642+ let cQ = (cO - cP)
643+ if ((0 >= cQ))
719644 then throw("amount of staked sharetokens must be > 0")
720645 else {
721- let dc = bP(aH, bj, cU, db)
722- if ((dc == dc))
723- then $Tuple2(db, da)
646+ let cR = bU(aM, bo, cF, cQ)
647+ if ((cR == cR))
648+ then $Tuple2(cQ, cP)
724649 else throw("Strict value is not equal to itself.")
725650 }
726651 }
730655 }
731656
732657
733-func dd (aH,aK,de,da,df,aA,aE,dg) = {
734- let dh = aG(aH)
735- let di = aI(aH)
736- let dj = if (dg)
737- then $Tuple2(getIntegerValue(this, (aH + C)), (di + de))
738- else $Tuple2(getIntegerValue(this, (aH + D)), di)
739- let dk = dj._1
740- let dl = dj._2
741-[IntegerEntry((aH + A), (dh + de)), IntegerEntry((aH + B), dl), IntegerEntry((((((aH + "_") + aK) + "_") + toString(df)) + u), de), IntegerEntry((((((aH + "_") + aK) + "_") + toString(df)) + z), dk), StringEntry((((aK + "_") + toString(df)) + v), aH), IntegerEntry((aK + y), df), ScriptTransfer(ac, da, fromBase58String(aA))]
658+func cS (aM,aP,cT,cP,cU,aH,aA,cV) = {
659+ let cW = aL(aM)
660+ let cX = aN(aM)
661+ let cY = if (cV)
662+ then $Tuple2(getIntegerValue(this, (aM + C)), (cX + cT))
663+ else $Tuple2(getIntegerValue(this, (aM + D)), cX)
664+ let cZ = cY._1
665+ let da = cY._2
666+[IntegerEntry((aM + A), (cW + cT)), IntegerEntry((aM + B), da), IntegerEntry((((((aM + "_") + aP) + "_") + toString(cU)) + u), cT), IntegerEntry((((((aM + "_") + aP) + "_") + toString(cU)) + z), cZ), StringEntry((((aP + "_") + toString(cU)) + v), aM), IntegerEntry((aP + y), cU), ScriptTransfer(ac, cP, fromBase58String(aH))]
742667 }
743668
744669
745-func dm (dn,do,dp,dq,dr,ds,dt,du,dv,dw) = {
746- let dx = ao(aS(dn))
747- if ((dx == dx))
670+func db (dc,dd,de,df,dg,dh,di,dj,dk,dl) = {
671+ let dm = ao(aX(dc))
672+ if ((dm == dm))
748673 then {
749- let bW = invoke(ad, "swap", [dq, dr, ds, dt, du, dv, dw], [AttachedPayment(dp, do)])
750- if ((bW == bW))
751- then (ao(aS(dn)) - dx)
674+ let cb = invoke(ad, "swap", [df, dg, dh, di, dj, dk, dl], [AttachedPayment(de, dd)])
675+ if ((cb == cb))
676+ then (ao(aX(dc)) - dm)
752677 else throw("Strict value is not equal to itself.")
753678 }
754679 else throw("Strict value is not equal to itself.")
755680 }
756681
757682
758-func dy (dn,do,dp,dz,dA,dw) = {
759- let dx = ao(aS(dn))
760- if ((dx == dx))
683+func dn (dc,dd,de,do,dp,dl) = {
684+ let dm = ao(aX(dc))
685+ if ((dm == dm))
761686 then {
762- let bW = invoke(ad, "puzzleSwap", [dz, dA, dw], [AttachedPayment(dp, do)])
763- if ((bW == bW))
764- then (ao(aS(dn)) - dx)
687+ let cb = invoke(ad, "puzzleSwap", [do, dp, dl], [AttachedPayment(de, dd)])
688+ if ((cb == cb))
689+ then (ao(aX(dc)) - dm)
765690 else throw("Strict value is not equal to itself.")
766691 }
767692 else throw("Strict value is not equal to itself.")
768693 }
769694
770695
771-func dB (dn,do,dp,dC,dD,dE,dF,dG,dH,dw) = {
772- let dx = ao(aS(dn))
773- if ((dx == dx))
696+func dq (dc,dd,de,dr,ds,dt,du,dv,dw,dl) = {
697+ let dm = ao(aX(dc))
698+ if ((dm == dm))
774699 then {
775- let bW = invoke(ad, "swopfiSwap", [dC, dD, dE, dF, dG, dH, dw], [AttachedPayment(dp, do)])
776- if ((bW == bW))
777- then (ao(aS(dn)) - dx)
700+ let cb = invoke(ad, "swopfiSwap", [dr, ds, dt, du, dv, dw, dl], [AttachedPayment(de, dd)])
701+ if ((cb == cb))
702+ then (ao(aX(dc)) - dm)
778703 else throw("Strict value is not equal to itself.")
779704 }
780705 else throw("Strict value is not equal to itself.")
781706 }
782707
783708
784-func dI (aH,bj,dJ,dK) = {
785- let au = Address(fromBase58String(aH))
786- let dL = aD(au, bj)
787- let dM = dL._1
788- let dN = dL._2
789- let aB = dL._3
790- let aC = dL._4
791- let aA = dL._5
792- if (if ((dJ != dM))
793- then (dJ != dN)
709+func dx (aM,bo,dy,dz) = {
710+ let au = Address(fromBase58String(aM))
711+ let dA = aJ(au, bo)
712+ let dB = dA._1
713+ let dC = dA._2
714+ let aE = dA._3
715+ let aD = dA._4
716+ let aH = dA._5
717+ if (if ((dy != dB))
718+ then (dy != dC)
794719 else false)
795720 then throw("Wrong asset")
796721 else {
797- let dO = if ((dJ == dM))
798- then $Tuple2(dK, 0)
799- else $Tuple2(0, dK)
800- let bC = dO._1
801- let bD = dO._2
802- let dP = cT(bj, aH, i, bC, dM, bD, dN, aB, aC, aA)
803- let de = dP._1
804- let dQ = dP._2
805- let dR = valueOrElse(getInteger(this, (aH + C)), 0)
806- let dS = valueOrElse(getInteger(this, (aH + D)), 0)
807- let dT = aG(aH)
808- let dU = aI(aH)
809- let dV = fraction(dU, j, dT)
810- let dW = fraction(de, dV, j)
811- let dX = (de - dW)
812- let dY = if ((dU > 0))
813- then (dR + fraction(dW, k, dU))
722+ let dD = if ((dy == dB))
723+ then $Tuple2(dz, 0)
724+ else $Tuple2(0, dz)
725+ let bH = dD._1
726+ let bI = dD._2
727+ let dE = cE(bo, aM, i, bH, dB, bI, dC, aE, aD, aH)
728+ let cT = dE._1
729+ let dF = dE._2
730+ let dG = valueOrElse(getInteger(this, (aM + C)), 0)
731+ let dH = valueOrElse(getInteger(this, (aM + D)), 0)
732+ let dI = aL(aM)
733+ let dJ = aN(aM)
734+ let dK = fraction(dJ, j, dI)
735+ let dL = fraction(cT, dK, j)
736+ let dM = (cT - dL)
737+ let dN = if ((dJ > 0))
738+ then (dG + fraction(dL, k, dJ))
814739 else 0
815- let dZ = if (((dT - dU) > 0))
816- then (dS + fraction(dX, k, (dT - dU)))
740+ let dO = if (((dI - dJ) > 0))
741+ then (dH + fraction(dM, k, (dI - dJ)))
817742 else 0
818- let ea = fraction(dW, aL(aH, d), m)
819- let eb = fraction(dX, aL(aH, c), m)
820- let ec = bR(aH, bj, aA, (ea + eb))
821- if ((ec == ec))
822- then ([IntegerEntry((aH + C), dY), IntegerEntry((aH + D), dZ), IntegerEntry((aH + A), ((dT + de) - ec)), IntegerEntry((aH + B), ((dU + dW) - ea)), ScriptTransfer(ac, (ea + eb), fromBase58String(aA))] ++ bw(dM, dN, aA, nil))
743+ let dP = fraction(dL, aQ(aM, d), m)
744+ let dQ = fraction(dM, aQ(aM, c), m)
745+ let dR = bW(aM, bo, aH, (dP + dQ))
746+ if ((dR == dR))
747+ then ([IntegerEntry((aM + C), dN), IntegerEntry((aM + D), dO), IntegerEntry((aM + A), ((dI + cT) - dR)), IntegerEntry((aM + B), ((dJ + dL) - dP)), ScriptTransfer(ac, (dP + dQ), fromBase58String(aH))] ++ bB(dB, dC, aH, nil))
823748 else throw("Strict value is not equal to itself.")
824749 }
825750 }
826751
827752
828-func ed (aH,cE,ee,ef) = {
829- let au = Address(fromBase58String(aH))
830- let bj = valueOrErrorMessage(getString(this, (N + aH)), "Unknown pool")
831- let eg = aD(au, bj)
832- let bY = eg._1
833- let bZ = eg._2
834- let aB = eg._3
835- let aC = eg._4
836- let aA = eg._5
837- let eh = ao(aS(bY))
838- if ((eh == eh))
753+func dS (aM,cx,dT,dU) = {
754+ let au = Address(fromBase58String(aM))
755+ let bo = valueOrErrorMessage(getString(this, (N + aM)), "Unknown pool")
756+ let dV = aJ(au, bo)
757+ let cd = dV._1
758+ let ce = dV._2
759+ let aE = dV._3
760+ let aD = dV._4
761+ let aH = dV._5
762+ let dW = ao(aX(cd))
763+ if ((dW == dW))
839764 then {
840- let ei = ao(aS(bZ))
841- if ((ei == ei))
765+ let dX = ao(aX(ce))
766+ if ((dX == dX))
842767 then {
843- let bW = if ((bj == a))
844- then invoke(au, "callFunction", ["withdraw", [toString(cE)]], nil)
768+ let cb = if ((bo == a))
769+ then invoke(au, "callFunction", ["withdraw", [toString(cx)]], nil)
845770 else {
846- let bW = bR(aH, bj, aA, cE)
847- if ((bW == bW))
848- then invoke(au, "get", nil, [AttachedPayment(aS(aA), cE)])
771+ let cb = bW(aM, bo, aH, cx)
772+ if ((cb == cb))
773+ then invoke(au, "get", nil, [AttachedPayment(aX(aH), cx)])
849774 else throw("Strict value is not equal to itself.")
850775 }
851- if ((bW == bW))
776+ if ((cb == cb))
852777 then {
853- let ej = ao(aS(bY))
854- let ek = ao(aS(bZ))
855- let el = $Tuple2((ej - eh), (ek - ei))
856- let em = el._1
857- let en = el._2
858- let eo = if ((ee > 0))
778+ let dY = ao(aX(cd))
779+ let dZ = ao(aX(ce))
780+ let ea = $Tuple2((dY - dW), (dZ - dX))
781+ let eb = ea._1
782+ let ec = ea._2
783+ let ed = if ((dT > 0))
859784 then {
860- let cO = if (if ((ef == bY))
861- then (ee > em)
785+ let ee = if (if ((dU == cd))
786+ then (dT > eb)
862787 else false)
863- then (ee - em)
864- else if (if ((ef == bZ))
865- then (ee > en)
788+ then (dT - eb)
789+ else if (if ((dU == ce))
790+ then (dT > ec)
866791 else false)
867- then (ee - en)
792+ then (dT - ec)
868793 else 0
869- let ep = if ((cO > 0))
870- then co(bj, aH, bY, bZ, (aB - em), (aC - en), cO, ef)
794+ let ef = if ((ee > 0))
795+ then ct(bo, aM, cd, ce, (aE - eb), (aD - ec), ee, dU)
871796 else nil
872- if ((ep == ep))
797+ if ((ef == ef))
873798 then {
874- let eq = ao(aS(bY))
875- let er = ao(aS(bZ))
876- if ((ef == bY))
877- then $Tuple2(((eq - eh) - ee), (er - ei))
878- else $Tuple2((eq - eh), ((er - ei) - ee))
799+ let eg = ao(aX(cd))
800+ let eh = ao(aX(ce))
801+ if ((dU == cd))
802+ then $Tuple2(((eg - dW) - dT), (eh - dX))
803+ else $Tuple2((eg - dW), ((eh - dX) - dT))
879804 }
880805 else throw("Strict value is not equal to itself.")
881806 }
882- else $Tuple2(em, en)
883- let es = eo._1
884- let et = eo._2
885- $Tuple7(es, bY, et, bZ, ej, ek, aA)
807+ else $Tuple2(eb, ec)
808+ let ei = ed._1
809+ let ej = ed._2
810+ $Tuple7(ei, cd, ej, ce, dY, dZ, aH)
886811 }
887812 else throw("Strict value is not equal to itself.")
888813 }
892817 }
893818
894819
895-func eu (aK,aH,ev,ew) = {
896- let ex = valueOrErrorMessage(getInteger(this, (((((aH + "_") + aK) + "_") + ev) + u)), "Unknown position")
897- let ey = getIntegerValue(this, (((((aH + "_") + aK) + "_") + ev) + z))
898- let ez = if (ew)
899- then getIntegerValue(this, (aH + C))
900- else getIntegerValue(this, (aH + D))
901- (ex + fraction(ex, (ez - ey), k))
820+func ek (aP,aM,el,em) = {
821+ let en = valueOrErrorMessage(getInteger(this, (((((aM + "_") + aP) + "_") + el) + u)), "Unknown position")
822+ let eo = getIntegerValue(this, (((((aM + "_") + aP) + "_") + el) + z))
823+ let ep = if (em)
824+ then getIntegerValue(this, (aM + C))
825+ else getIntegerValue(this, (aM + D))
826+ (en + fraction(en, (ep - eo), k))
902827 }
903828
904829
905-func eA (aK,aH,ev,eB) = {
906- let ex = valueOrErrorMessage(getInteger(this, (((((aH + "_") + aK) + "_") + ev) + u)), "Unknown position")
907- let cJ = valueOrElse(getInteger(this, (((((aH + "_") + aK) + "_") + ev) + w)), 0)
908- let cE = eu(aK, aH, ev, (cJ > 0))
909- let eC = aG(aH)
910- let eD = Address(fromBase58String(aK))
911- let ef = valueOrElse(getString(this, (((((aH + "_") + aK) + "_") + ev) + x)), "")
912- let ee = if ((cJ > 0))
830+func eq (aP,aM,el,er) = {
831+ let en = valueOrErrorMessage(getInteger(this, (((((aM + "_") + aP) + "_") + el) + u)), "Unknown position")
832+ let es = valueOrElse(getInteger(this, (((((aM + "_") + aP) + "_") + el) + w)), 0)
833+ let cx = ek(aP, aM, el, (es > 0))
834+ let et = aL(aM)
835+ let eu = Address(fromBase58String(aP))
836+ let dU = valueOrElse(getString(this, (((((aM + "_") + aP) + "_") + el) + x)), "")
837+ let dT = if ((es > 0))
913838 then {
914- let ax = invoke(ai(), "getAssetDebt", [false, ((aK + "_") + ev), ef], nil)
915- if ($isInstanceOf(ax, "Int"))
916- then ax
917- else throw(($getType(ax) + " couldn't be cast to Int"))
839+ let ay = invoke(ai(), "getAssetDebt", [false, ((aP + "_") + el), dU], nil)
840+ if ($isInstanceOf(ay, "Int"))
841+ then ay
842+ else throw(($getType(ay) + " couldn't be cast to Int"))
918843 }
919844 else 0
920- let eE = ed(aH, cE, ee, ef)
921- if ((eE == eE))
845+ let ev = dS(aM, cx, dT, dU)
846+ if ((ev == ev))
922847 then {
923- let aA = eE._7
924- let ek = eE._6
925- let ej = eE._5
926- let bZ = eE._4
927- let eF = eE._3
928- let bY = eE._2
929- let eG = eE._1
930- let eH = if ((ee > 0))
931- then invoke(ai(), "repayFor", [((aK + "_") + ev)], [AttachedPayment(aS(ef), ee)])
848+ let aH = ev._7
849+ let dZ = ev._6
850+ let dY = ev._5
851+ let ce = ev._4
852+ let ew = ev._3
853+ let cd = ev._2
854+ let ex = ev._1
855+ let ey = if ((dT > 0))
856+ then invoke(ai(), "repayFor", [((aP + "_") + el)], [AttachedPayment(aX(dU), dT)])
932857 else 0
933- if ((eH == eH))
934- then ([DeleteEntry((((((aH + "_") + aK) + "_") + ev) + u)), DeleteEntry((((((aH + "_") + aK) + "_") + ev) + z)), IntegerEntry((aH + A), (eC - cE)), ScriptTransfer(eD, eG, aS(bY)), ScriptTransfer(eD, eF, aS(bZ))] ++ bw(bY, bZ, aA, nil))
858+ if ((ey == ey))
859+ then ([DeleteEntry((((((aM + "_") + aP) + "_") + el) + u)), DeleteEntry((((((aM + "_") + aP) + "_") + el) + z)), IntegerEntry((aM + A), (et - cx)), ScriptTransfer(eu, ex, aX(cd)), ScriptTransfer(eu, ew, aX(ce))] ++ bB(cd, ce, aH, nil))
935860 else throw("Strict value is not equal to itself.")
936861 }
937862 else throw("Strict value is not equal to itself.")
938863 }
939864
940865
941-func eI (eJ) = {
942- let eK = split(valueOrErrorMessage(getString(this, (eJ + L)), ("No request with id " + eJ)), ",")
943- let aK = eK[0]
944- let aH = eK[1]
945- let bC = parseIntValue(eK[2])
946- let dM = eK[3]
947- let bD = parseIntValue(eK[4])
948- let dN = eK[5]
949- let aB = parseIntValue(eK[6])
950- let aC = parseIntValue(eK[7])
951- let aA = eK[8]
952- let eL = eK[9]
953- let eM = parseIntValue(eK[10])
954- $Tuple11(aK, aH, bC, dM, bD, dN, aB, aC, aA, eL, eM)
866+func ez (eA) = {
867+ let eB = split(valueOrErrorMessage(getString(this, (eA + L)), ("No request with id " + eA)), ",")
868+ let aP = eB[0]
869+ let aM = eB[1]
870+ let bH = parseIntValue(eB[2])
871+ let dB = eB[3]
872+ let bI = parseIntValue(eB[4])
873+ let dC = eB[5]
874+ let aE = parseIntValue(eB[6])
875+ let aD = parseIntValue(eB[7])
876+ let aH = eB[8]
877+ let eC = eB[9]
878+ let eD = parseIntValue(eB[10])
879+ $Tuple11(aP, aM, bH, dB, bI, dC, aE, aD, aH, eC, eD)
955880 }
956881
957882
958-func eN (bC,bD,ay,az,eO,eP) = {
959- let bn = getIntegerValue(ae, (ay + R))
960- let bo = getIntegerValue(ae, (az + R))
961- let eQ = pow(10, 0, aT(ay), 0, 0, DOWN)
962- let eR = pow(10, 0, aT(az), 0, 0, DOWN)
963- let eS = (fraction(bn, bC, eQ) + fraction(bo, bD, eR))
964- let eT = if ((eP == ay))
965- then $Tuple2(bn, eQ)
966- else $Tuple2(bo, eR)
967- let eU = eT._1
968- let eV = eT._2
969- fraction(fraction(eS, (eO - 100), 100), eV, eU)
883+func eE (bH,bI,aw,ax,eF,eG) = {
884+ let bs = getIntegerValue(ae, (aw + R))
885+ let bt = getIntegerValue(ae, (ax + R))
886+ let eH = pow(10, 0, aY(aw), 0, 0, DOWN)
887+ let eI = pow(10, 0, aY(ax), 0, 0, DOWN)
888+ let eJ = (fraction(bs, bH, eH) + fraction(bt, bI, eI))
889+ let eK = if ((eG == aw))
890+ then $Tuple2(bs, eH)
891+ else $Tuple2(bt, eI)
892+ let eL = eK._1
893+ let eM = eK._2
894+ fraction(fraction(eJ, (eF - 100), 100), eM, eL)
895+ }
896+
897+
898+func eN (eO,dB,dC) = if ((size(eO) == 2))
899+ then if ((aW(eO[0].assetId) != dB))
900+ then throw("Wrong payment asset A")
901+ else if ((aW(eO[1].assetId) != dC))
902+ then throw("Wrong payment asset B")
903+ else $Tuple4(eO[0].amount, dB, eO[1].amount, dC)
904+ else if ((size(eO) == 1))
905+ then if ((aW(eO[0].assetId) == dB))
906+ then $Tuple4(eO[0].amount, dB, 0, dC)
907+ else if ((aW(eO[0].assetId) == dC))
908+ then $Tuple4(0, dB, eO[0].amount, dC)
909+ else throw("Wrong payment")
910+ else throw("One or two payments expected")
911+
912+
913+func eP (aE,aD,eQ,eR) = {
914+ let eS = ((j - fraction(fraction(aD, j, aE), j, fraction(eR, j, eQ))) * 100)
915+ if ((0 > eS))
916+ then (eS * -1)
917+ else eS
970918 }
971919
972920
973921 @Callable(al)
974-func calcPriceImpactEVALONLY (aH,eO,eP,bC,bD) = if (if ((100 > eO))
975- then true
976- else (eO > 300))
977- then throw("Leverage can't be <100 and >300")
978- else {
979- let bj = valueOrErrorMessage(getString(this, (N + aH)), "Pool is not inited")
980- let eW = aD(Address(fromBase58String(aH)), bj)
981- let dM = eW._1
982- let dN = eW._2
983- let aB = eW._3
984- let aC = eW._4
985- let aA = eW._5
986- let cJ = if ((eO > 100))
987- then eN(bC, bD, dM, dN, eO, eP)
988- else 0
989- let eX = if ((eP == dM))
990- then $Tuple2((bC + cJ), bD)
991- else $Tuple2(bC, (bD + cJ))
992- let eY = eX._1
993- let eZ = eX._2
994- let fa = cr(bj, aH, eY, dM, eZ, dN, aB, aC)
995- let cy = fa._1
996- let cC = fa._2
997- let fb = if ((0 > cC))
998- then (cC * -1)
999- else cC
1000- $Tuple2(nil, [fb])
1001- }
922+func getShareAssetPriceREADONLY (aH) = {
923+ let eT = bn(aH)
924+ $Tuple2(nil, eT)
925+ }
1002926
1003927
1004928
1005929 @Callable(al)
1006-func replenishFromLandEVALONLY (eJ) = valueOrElse(an(al), {
1007- let fc = eI(eJ)
1008- let aK = fc._1
1009- let aH = fc._2
1010- let bC = fc._3
1011- let dM = fc._4
1012- let bD = fc._5
1013- let dN = fc._6
1014- let aB = fc._7
1015- let aC = fc._8
1016- let aA = fc._9
1017- let eL = fc._10
1018- let eM = fc._11
930+func getUserPositionShareAmountREADONLY (aP,cU) = {
931+ let aM = valueOrErrorMessage(getString(this, (((aP + "_") + cU) + v)), "Unknown position")
932+ let es = getIntegerValue(this, (((((aM + "_") + aP) + "_") + cU) + w))
933+ let cx = ek(aP, aM, cU, (es > 0))
934+ $Tuple2(nil, cx)
935+ }
936+
937+
938+
939+@Callable(al)
940+func getUserPositionInDollarsREADONLY (aP,eU,cU) = {
941+ func eV (be,aM) = {
942+ let eW = be
943+ let eX = eW._1
944+ let eY = eW._2
945+ let eZ = eW._3
946+ let bo = valueOrErrorMessage(getString(this, (N + aM)), "Pool is not inited")
947+ let fa = aJ(Address(fromBase58String(aM)), bo)
948+ let dB = fa._1
949+ let dC = fa._2
950+ let aE = fa._3
951+ let aD = fa._4
952+ let aH = fa._5
953+ let es = valueOrElse(getInteger(this, (((((aM + "_") + aP) + "_") + cU[eZ]) + w)), 0)
954+ let cx = ek(aP, aM, cU[eZ], (es > 0))
955+ let eT = bn(aH)
956+ let fb = pow(10, 0, aY(aH), 0, 0, DOWN)
957+ let fc = fraction(cx, eT, fb)
958+ if ((es == 0))
959+ then $Tuple3((eX :+ fc), (eY :+ 0), (eZ + 1))
960+ else {
961+ let dU = getStringValue(this, (((((aM + "_") + aP) + "_") + cU[eZ]) + x))
962+ let dT = {
963+ let ay = invoke(ai(), "getAssetDebt", [false, ((aP + "_") + cU[eZ]), dU], nil)
964+ if ($isInstanceOf(ay, "Int"))
965+ then ay
966+ else throw(($getType(ay) + " couldn't be cast to Int"))
967+ }
968+ let fd = getIntegerValue(ae, (dU + R))
969+ let fe = pow(10, 0, aY(dU), 0, 0, DOWN)
970+ let ff = fraction(dT, fd, fe)
971+ $Tuple3((eX :+ fc), (eY :+ ff), (eZ + 1))
972+ }
973+ }
974+
975+ let fg = {
976+ let bg = eU
977+ let bh = size(bg)
978+ let bi = $Tuple3(nil, nil, 0)
979+ func bj (bk,bl) = if ((bl >= bh))
980+ then bk
981+ else eV(bk, bg[bl])
982+
983+ func bm (bk,bl) = if ((bl >= bh))
984+ then bk
985+ else throw("List size exceeds 20")
986+
987+ bm(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bi, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
988+ }
989+ let fh = fg._1
990+ let dT = fg._2
991+ $Tuple2(nil, $Tuple2(fh, dT))
992+ }
993+
994+
995+
996+@Callable(al)
997+func replenish (aM,eF,eG) = if (if ((100 > eF))
998+ then true
999+ else (eF > 300))
1000+ then throw("Leverage can't be <100 and >300")
1001+ else if (if (!(getBooleanValue(this, (aM + E))))
1002+ then (eF > 100)
1003+ else false)
1004+ then throw("You can't borrow in this pool")
1005+ else {
1006+ let bo = valueOrErrorMessage(getString(this, (N + aM)), "Pool is not inited")
1007+ let fi = aJ(Address(fromBase58String(aM)), bo)
1008+ let dB = fi._1
1009+ let dC = fi._2
1010+ let aE = fi._3
1011+ let aD = fi._4
1012+ let aH = fi._5
1013+ let fj = eN(al.payments, dB, dC)
1014+ let bH = fj._1
1015+ let fk = fj._2
1016+ let bI = fj._3
1017+ let fl = fj._4
1018+ let aP = toString(al.caller)
1019+ let fm = aO(aP)
1020+ if ((eF > 100))
1021+ then {
1022+ let es = eE(bH, bI, fk, fl, eF, eG)
1023+ let eB = makeString([aP, aM, toString(bH), fk, toString(bI), fl, toString(aE), toString(aD), aH, eG, toString(es)], ",")
1024+ let fn = {
1025+ let ay = invoke(this, "createNewRequest", [eB], nil)
1026+ if ($isInstanceOf(ay, "Int"))
1027+ then ay
1028+ else throw(($getType(ay) + " couldn't be cast to Int"))
1029+ }
1030+ if ((fn == fn))
1031+ then {
1032+ let fo = [((aP + "_") + toString(fm)), aH, eG, es, toString(this), "replenishFromLand", toString(valueOrErrorMessage(fn, "Can't create new request"))]
1033+ let cb = reentrantInvoke(ai(), "flashPosition", fo, nil)
1034+ if ((cb == cb))
1035+ then {
1036+ let fp = getIntegerValue(this, (((((aM + "_") + aP) + "_") + toString(fm)) + u))
1037+ let fq = az(Address(fromBase58String(aM)), bo, dB, dC)
1038+ if ((fq == fq))
1039+ then {
1040+ let eR = fq._2
1041+ let eQ = fq._1
1042+ let fr = eP(aE, aD, eQ, eR)
1043+ let fs = cw(Address(fromBase58String(aM)), bo, aH, fp)
1044+ let ft = fs._1
1045+ let fu = fs._2
1046+ $Tuple2(nil, [fr, ft, fu])
1047+ }
1048+ else throw("Strict value is not equal to itself.")
1049+ }
1050+ else throw("Strict value is not equal to itself.")
1051+ }
1052+ else throw("Strict value is not equal to itself.")
1053+ }
1054+ else {
1055+ let fv = cE(bo, aM, h, bH, dB, bI, dC, aE, aD, aH)
1056+ let fp = fv._1
1057+ let dR = fv._2
1058+ let fw = az(Address(fromBase58String(aM)), bo, dB, dC)
1059+ if ((fw == fw))
1060+ then {
1061+ let eR = fw._2
1062+ let eQ = fw._1
1063+ let fr = eP(aE, aD, eQ, eR)
1064+ let fx = cw(Address(fromBase58String(aM)), bo, aH, fp)
1065+ let ft = fx._1
1066+ let fu = fx._2
1067+ $Tuple2((cS(aM, aP, fp, dR, fm, aH, bo, false) ++ bB(dB, dC, aH, [toString(ft), toString(fu)])), [fr, ft, fu])
1068+ }
1069+ else throw("Strict value is not equal to itself.")
1070+ }
1071+ }
1072+
1073+
1074+
1075+@Callable(al)
1076+func withdraw (aM,el) = eq(toString(al.caller), aM, toString(el), false)
1077+
1078+
1079+
1080+@Callable(al)
1081+func createUpdateStopLoss (el,fy,ap,fz) = {
1082+ let fA = getIntegerValue(ae, (ap + R))
1083+ if (!(isDefined(getInteger(this, (((((fy + "_") + toString(al.caller)) + "_") + toString(el)) + u)))))
1084+ then throw("There are no user position")
1085+ else if ((0 >= fz))
1086+ then throw("Price must be greater than 0")
1087+ else if ((fz > fA))
1088+ then throw("Price must be less than current token price")
1089+ else [IntegerEntry((((((((toString(al.caller) + "_") + toString(el)) + "_") + fy) + "_") + ap) + S), fz)]
1090+ }
1091+
1092+
1093+
1094+@Callable(al)
1095+func deleteStopLoss (el,fy,ap) = if (!(isDefined(getInteger(this, (((((((toString(al.caller) + "_") + toString(el)) + "_") + fy) + "_") + ap) + S)))))
1096+ then throw("No entry")
1097+ else [DeleteEntry((((((((toString(al.caller) + "_") + toString(el)) + "_") + fy) + "_") + ap) + S))]
1098+
1099+
1100+
1101+@Callable(al)
1102+func init (fB,fC,fD,ae,fE,af,fF,fG,fH) = if (isDefined(getString(T)))
1103+ then throw("Already inited")
1104+ else [StringEntry(T, fB), StringEntry(U, fC), StringEntry(V, fD), StringEntry(X, ae), StringEntry(Y, fE), StringEntry(Z, af), StringEntry(aa, fF), StringEntry(ab, fG), StringEntry(W, fH)]
1105+
1106+
1107+
1108+@Callable(al)
1109+func createNewRequest (ca) = valueOrElse(am(al), {
1110+ let fn = (valueOrElse(getInteger(this, M), 0) + 1)
1111+ $Tuple2([StringEntry((toString(fn) + L), ca), IntegerEntry(M, fn)], fn)
1112+ })
1113+
1114+
1115+
1116+@Callable(al)
1117+func replenishFromLand (eA) = valueOrElse(an(al), {
1118+ let fI = ez(eA)
1119+ let aP = fI._1
1120+ let aM = fI._2
1121+ let bH = fI._3
1122+ let dB = fI._4
1123+ let bI = fI._5
1124+ let dC = fI._6
1125+ let aE = fI._7
1126+ let aD = fI._8
1127+ let aH = fI._9
1128+ let eC = fI._10
1129+ let eD = fI._11
10191130 if ((size(al.payments) != 1))
10201131 then throw("Wrong payment size")
1021- else if (if ((aR(al.payments[0].assetId) != eL))
1132+ else if (if ((aW(al.payments[0].assetId) != eC))
10221133 then true
1023- else (al.payments[0].amount != eM))
1134+ else (al.payments[0].amount != eD))
10241135 then throw("Wrong payment")
10251136 else {
1026- let fd = if ((dM == eL))
1027- then $Tuple2((bC + al.payments[0].amount), bD)
1028- else $Tuple2(bC, (bD + al.payments[0].amount))
1029- let fe = fd._1
1030- let ff = fd._2
1031- let bj = valueOrErrorMessage(getString(this, (N + aH)), "Unknown pool")
1032- let fg = cT(bj, aH, g, fe, dM, ff, dN, aB, aC, aA)
1033- let fh = fg._1
1034- let ec = fg._2
1035- let df = aJ(aK)
1036- let fi = [IntegerEntry((((((aH + "_") + aK) + "_") + toString(df)) + w), eM), StringEntry((((((aH + "_") + aK) + "_") + toString(df)) + x), eL)]
1037- let fj = dd(aH, aK, fh, ec, df, aA, bj, true)
1038- nil
1137+ let fJ = if ((dB == eC))
1138+ then $Tuple2((bH + al.payments[0].amount), bI)
1139+ else $Tuple2(bH, (bI + al.payments[0].amount))
1140+ let fK = fJ._1
1141+ let fL = fJ._2
1142+ let bo = valueOrErrorMessage(getString(this, (N + aM)), "Unknown pool")
1143+ let fM = cE(bo, aM, g, fK, dB, fL, dC, aE, aD, aH)
1144+ let fp = fM._1
1145+ let dR = fM._2
1146+ let cU = aO(aP)
1147+ let fN = [IntegerEntry((((((aM + "_") + aP) + "_") + toString(cU)) + w), eD), StringEntry((((((aM + "_") + aP) + "_") + toString(cU)) + x), eC)]
1148+ let fO = cS(aM, aP, fp, dR, cU, aH, bo, true)
1149+ let fP = cw(Address(fromBase58String(aM)), bo, aH, fp)
1150+ let ft = fP._1
1151+ let fu = fP._2
1152+ $Tuple2((((fO ++ bB(dB, dC, aH, [toString(ft), toString(fu)])) ++ fN) :+ DeleteEntry((eA + L))), fp)
10391153 }
10401154 })
10411155
10421156
10431157
10441158 @Callable(al)
1045-func getShareAssetPriceREADONLY (aA) = {
1046- let fk = bi(aA)
1047- $Tuple2(nil, fk)
1048- }
1049-
1050-
1051-
1052-@Callable(al)
1053-func getUserPositionShareAmountREADONLY (aK,df) = {
1054- let aH = valueOrErrorMessage(getString(this, (((aK + "_") + df) + v)), "Unknown position")
1055- let cJ = getIntegerValue(this, (((((aH + "_") + aK) + "_") + df) + w))
1056- let cE = eu(aK, aH, df, (cJ > 0))
1057- $Tuple2(nil, cE)
1058- }
1059-
1060-
1061-
1062-@Callable(al)
1063-func getUserPositionInDollarsREADONLY (aK,fl,df) = {
1064- func fm (aZ,aH) = {
1065- let fn = aZ
1066- let fo = fn._1
1067- let fp = fn._2
1068- let fq = fn._3
1069- let bj = valueOrErrorMessage(getString(this, (N + aH)), "Pool is not inited")
1070- let fr = aD(Address(fromBase58String(aH)), bj)
1071- let dM = fr._1
1072- let dN = fr._2
1073- let aB = fr._3
1074- let aC = fr._4
1075- let aA = fr._5
1076- let cJ = valueOrElse(getInteger(this, (((((aH + "_") + aK) + "_") + df[fq]) + w)), 0)
1077- let cE = eu(aK, aH, df[fq], (cJ > 0))
1078- let fk = bi(aA)
1079- let fs = pow(10, 0, aT(aA), 0, 0, DOWN)
1080- let ft = fraction(cE, fk, fs)
1081- if ((cJ == 0))
1082- then $Tuple3((fo :+ ft), (fp :+ 0), (fq + 1))
1083- else {
1084- let ef = getStringValue(this, (((((aH + "_") + aK) + "_") + df[fq]) + x))
1085- let ee = {
1086- let ax = invoke(ai(), "getAssetDebt", [false, ((aK + "_") + df[fq]), ef], nil)
1087- if ($isInstanceOf(ax, "Int"))
1088- then ax
1089- else throw(($getType(ax) + " couldn't be cast to Int"))
1090- }
1091- let fu = getIntegerValue(ae, (ef + R))
1092- let fv = pow(10, 0, aT(ef), 0, 0, DOWN)
1093- let fw = fraction(ee, fu, fv)
1094- $Tuple3((fo :+ ft), (fp :+ fw), (fq + 1))
1095- }
1096- }
1097-
1098- let fx = {
1099- let bb = fl
1100- let bc = size(bb)
1101- let bd = $Tuple3(nil, nil, 0)
1102- func be (bf,bg) = if ((bg >= bc))
1103- then bf
1104- else fm(bf, bb[bg])
1105-
1106- func bh (bf,bg) = if ((bg >= bc))
1107- then bf
1108- else throw("List size exceeds 20")
1109-
1110- bh(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(bd, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
1111- }
1112- let fy = fx._1
1113- let ee = fx._2
1114- $Tuple2(nil, $Tuple2(fy, ee))
1115- }
1116-
1117-
1118-
1119-@Callable(al)
1120-func replenish (aH,eO,eP) = if (if ((100 > eO))
1121- then true
1122- else (eO > 300))
1123- then throw("Leverage can't be <100 and >300")
1124- else if (if (!(getBooleanValue(this, (aH + E))))
1125- then (eO > 100)
1126- else false)
1127- then throw("You can't borrow in this pool")
1128- else {
1129- let bj = valueOrErrorMessage(getString(this, (N + aH)), "Pool is not inited")
1130- let fz = aD(Address(fromBase58String(aH)), bj)
1131- let dM = fz._1
1132- let dN = fz._2
1133- let aB = fz._3
1134- let aC = fz._4
1135- let aA = fz._5
1136- let fA = if ((size(al.payments) == 2))
1137- then if ((aR(al.payments[0].assetId) != dM))
1138- then throw("Wrong payment asset A")
1139- else if ((aR(al.payments[1].assetId) != dN))
1140- then throw("Wrong payment asset B")
1141- else $Tuple4(al.payments[0].amount, dM, al.payments[1].amount, dN)
1142- else if ((size(al.payments) == 1))
1143- then if ((aR(al.payments[0].assetId) == dM))
1144- then $Tuple4(al.payments[0].amount, dM, 0, dN)
1145- else if ((aR(al.payments[0].assetId) == dN))
1146- then $Tuple4(0, dM, al.payments[0].amount, dN)
1147- else throw("Wrong payment")
1148- else throw("One or two payments expected")
1149- let bC = fA._1
1150- let fB = fA._2
1151- let bD = fA._3
1152- let fC = fA._4
1153- let fD = aJ(toString(al.caller))
1154- if ((eO > 100))
1155- then {
1156- let cJ = eN(bC, bD, fB, fC, eO, eP)
1157- let eK = makeString([toString(al.caller), aH, toString(bC), fB, toString(bD), fC, toString(aB), toString(aC), aA, eP, toString(cJ)], ",")
1158- let fE = {
1159- let ax = invoke(this, "createNewRequest", [eK], nil)
1160- if ($isInstanceOf(ax, "Int"))
1161- then ax
1162- else throw(($getType(ax) + " couldn't be cast to Int"))
1163- }
1164- if ((fE == fE))
1165- then {
1166- let fF = [((toString(al.caller) + "_") + toString(fD)), aA, eP, cJ, toString(this), "replenishFromLand", toString(valueOrErrorMessage(fE, "Can't create new request"))]
1167- let bW = reentrantInvoke(ai(), "flashPosition", fF, nil)
1168- if ((bW == bW))
1169- then nil
1170- else throw("Strict value is not equal to itself.")
1171- }
1172- else throw("Strict value is not equal to itself.")
1173- }
1174- else {
1175- let fG = cT(bj, aH, h, bC, dM, bD, dN, aB, aC, aA)
1176- let fh = fG._1
1177- let ec = fG._2
1178- let fH = cD(Address(fromBase58String(aH)), bj, aA, fh)
1179- let fI = fH._1
1180- let fJ = fH._2
1181- (dd(aH, toString(al.caller), fh, ec, fD, aA, bj, false) ++ bw(dM, dN, aA, [toString(fI), toString(fJ)]))
1182- }
1183- }
1184-
1185-
1186-
1187-@Callable(al)
1188-func withdraw (aH,ev) = eA(toString(al.caller), aH, toString(ev), false)
1189-
1190-
1191-
1192-@Callable(al)
1193-func createUpdateStopLoss (ev,fK,ap,fL) = {
1194- let fM = getIntegerValue(ae, (ap + R))
1195- if (!(isDefined(getInteger(this, (((((fK + "_") + toString(al.caller)) + "_") + toString(ev)) + u)))))
1196- then throw("There are no user position")
1197- else if ((0 >= fL))
1198- then throw("Price must be greater than 0")
1199- else if ((fL > fM))
1200- then throw("Price must be less than current token price")
1201- else [IntegerEntry((((((((toString(al.caller) + "_") + toString(ev)) + "_") + fK) + "_") + ap) + S), fL)]
1202- }
1203-
1204-
1205-
1206-@Callable(al)
1207-func deleteStopLoss (ev,fK,ap) = if (!(isDefined(getInteger(this, (((((((toString(al.caller) + "_") + toString(ev)) + "_") + fK) + "_") + ap) + S)))))
1208- then throw("No entry")
1209- else [DeleteEntry((((((((toString(al.caller) + "_") + toString(ev)) + "_") + fK) + "_") + ap) + S))]
1210-
1211-
1212-
1213-@Callable(al)
1214-func init (fN,fO,fP,ae,fQ,af,fR,fS,fT) = if (isDefined(getString(T)))
1215- then throw("Already inited")
1216- else [StringEntry(T, fN), StringEntry(U, fO), StringEntry(V, fP), StringEntry(X, ae), StringEntry(Y, fQ), StringEntry(Z, af), StringEntry(aa, fR), StringEntry(ab, fS), StringEntry(W, fT)]
1217-
1218-
1219-
1220-@Callable(al)
1221-func createNewRequest (bV) = valueOrElse(am(al), {
1222- let fE = (valueOrElse(getInteger(this, M), 0) + 1)
1223- $Tuple2([StringEntry((toString(fE) + L), bV), IntegerEntry(M, fE)], fE)
1159+func liquidate (aP,el,fQ) = valueOrElse(an(al), {
1160+ let aM = valueOrErrorMessage(getString(this, (((aP + "_") + el) + v)), "no position")
1161+ let bo = valueOrErrorMessage(getString(this, (N + aM)), "Pool is not inited")
1162+ let fR = aJ(Address(fromBase58String(aM)), bo)
1163+ let dB = fR._1
1164+ let dC = fR._2
1165+ let aE = fR._3
1166+ let aD = fR._4
1167+ let aH = fR._5
1168+ let bV = bW(aM, bo, aH, fQ)
1169+ let es = getIntegerValue(this, (((((aM + "_") + aP) + "_") + el) + w))
1170+ let dU = getStringValue(this, (((((aM + "_") + aP) + "_") + el) + x))
1171+ let cx = ek(aP, aM, el, (es > 0))
1172+ if ((es == 0))
1173+ then throw("You can't liquidate position without borrow")
1174+ else [IntegerEntry((((((aM + "_") + aP) + "_") + el) + z), getIntegerValue(this, (aM + C))), IntegerEntry((aM + B), (aN(aM) - fQ)), IntegerEntry((aM + A), (aL(aM) - fQ)), IntegerEntry((((((aM + "_") + aP) + "_") + el) + u), (cx - fQ)), ScriptTransfer(al.caller, bV, fromBase58String(aH))]
12241175 })
12251176
12261177
12271178
12281179 @Callable(al)
1229-func replenishFromLand (eJ) = valueOrElse(an(al), {
1230- let fU = eI(eJ)
1231- let aK = fU._1
1232- let aH = fU._2
1233- let bC = fU._3
1234- let dM = fU._4
1235- let bD = fU._5
1236- let dN = fU._6
1237- let aB = fU._7
1238- let aC = fU._8
1239- let aA = fU._9
1240- let eL = fU._10
1241- let eM = fU._11
1242- if ((size(al.payments) != 1))
1243- then throw("Wrong payment size")
1244- else if (if ((aR(al.payments[0].assetId) != eL))
1245- then true
1246- else (al.payments[0].amount != eM))
1247- then throw("Wrong payment")
1248- else {
1249- let fV = if ((dM == eL))
1250- then $Tuple2((bC + al.payments[0].amount), bD)
1251- else $Tuple2(bC, (bD + al.payments[0].amount))
1252- let fe = fV._1
1253- let ff = fV._2
1254- let bj = valueOrErrorMessage(getString(this, (N + aH)), "Unknown pool")
1255- let fW = cT(bj, aH, g, fe, dM, ff, dN, aB, aC, aA)
1256- let fh = fW._1
1257- let ec = fW._2
1258- let df = aJ(aK)
1259- let fi = [IntegerEntry((((((aH + "_") + aK) + "_") + toString(df)) + w), eM), StringEntry((((((aH + "_") + aK) + "_") + toString(df)) + x), eL)]
1260- let fj = dd(aH, aK, fh, ec, df, aA, bj, true)
1261- let fX = cD(Address(fromBase58String(aH)), bj, aA, fh)
1262- let fI = fX._1
1263- let fJ = fX._2
1264- $Tuple2((((fj ++ bw(dM, dN, aA, [toString(fI), toString(fJ)])) ++ fi) :+ DeleteEntry((eJ + L))), fh)
1265- }
1180+func stopLoss (aP,el,aM,ap) = valueOrElse(ak(al), {
1181+ let fA = getIntegerValue(ae, (ap + R))
1182+ if (!(isDefined(getInteger(this, (((((((aP + "_") + toString(el)) + "_") + aM) + "_") + ap) + S)))))
1183+ then throw("No entry")
1184+ else (eq(toString(al.caller), aM, toString(el), true) :+ DeleteEntry((((((((aP + "_") + toString(el)) + "_") + aM) + "_") + ap) + S)))
12661185 })
12671186
12681187
12691188
12701189 @Callable(al)
1271-func liquidate (aK,ev,fY) = valueOrElse(an(al), {
1272- let aH = valueOrErrorMessage(getString(this, (((aK + "_") + ev) + v)), "no position")
1273- let bj = valueOrErrorMessage(getString(this, (N + aH)), "Pool is not inited")
1274- let fZ = aD(Address(fromBase58String(aH)), bj)
1275- let dM = fZ._1
1276- let dN = fZ._2
1277- let aB = fZ._3
1278- let aC = fZ._4
1279- let aA = fZ._5
1280- let bQ = bR(aH, bj, aA, fY)
1281- let cJ = getIntegerValue(this, (((((aH + "_") + aK) + "_") + ev) + w))
1282- let ef = getStringValue(this, (((((aH + "_") + aK) + "_") + ev) + x))
1283- let cE = eu(aK, aH, ev, (cJ > 0))
1284- if ((cJ == 0))
1285- then throw("You can't liquidate position without borrow")
1286- else [IntegerEntry((((((aH + "_") + aK) + "_") + ev) + z), getIntegerValue(this, (aH + C))), IntegerEntry((aH + B), (aI(aH) - fY)), IntegerEntry((aH + A), (aG(aH) - fY)), IntegerEntry((((((aH + "_") + aK) + "_") + ev) + u), (cE - fY)), ScriptTransfer(al.caller, bQ, fromBase58String(aA))]
1190+func capitalizeExKeeper (aM,aA,fS,fT,fU,df,dg,dh,di,dj,dk,dl) = valueOrElse(ak(al), {
1191+ let fV = if (fU)
1192+ then cB(aA, aM)
1193+ else {
1194+ let fW = if ((aA == a))
1195+ then ag
1196+ else ah
1197+ $Tuple2(fT, fW)
1198+ }
1199+ let fX = fV._1
1200+ let fW = fV._2
1201+ let fY = db(fS, fT, fW, df, dg, dh, di, dj, dk, dl)
1202+ let cL = (fX - fT)
1203+ let fZ = if ((cL > 0))
1204+ then [IntegerEntry((aM + P), (cL + valueOrElse(getInteger(this, (aM + P)), 0)))]
1205+ else nil
1206+ (dx(aM, aA, fS, fY) ++ fZ)
12871207 })
12881208
12891209
12901210
12911211 @Callable(al)
1292-func stopLoss (aK,ev,aH,ap) = valueOrElse(ak(al), {
1293- let fM = getIntegerValue(ae, (ap + R))
1294- if (!(isDefined(getInteger(this, (((((((aK + "_") + toString(ev)) + "_") + aH) + "_") + ap) + S)))))
1295- then throw("No entry")
1296- else (eA(toString(al.caller), aH, toString(ev), true) :+ DeleteEntry((((((((aK + "_") + toString(ev)) + "_") + aH) + "_") + ap) + S)))
1212+func capitalizeExPuzzle (aM,aA,fS,fT,fU,do,dp,dl) = valueOrElse(ak(al), {
1213+ let ga = if (fU)
1214+ then cB(aA, aM)
1215+ else {
1216+ let fW = if ((aA == a))
1217+ then ag
1218+ else ah
1219+ $Tuple2(fT, fW)
1220+ }
1221+ let fX = ga._1
1222+ let fW = ga._2
1223+ let fY = dn(fS, fT, fW, do, dp, dl)
1224+ let cL = (fX - fT)
1225+ let fZ = if ((cL > 0))
1226+ then [IntegerEntry((aM + P), (cL + valueOrElse(getInteger(this, (aM + P)), 0)))]
1227+ else nil
1228+ (dx(aM, aA, fS, fY) ++ fZ)
12971229 })
12981230
12991231
13001232
13011233 @Callable(al)
1302-func capitalizeExKeeper (aH,aE,ga,gb,gc,dq,dr,ds,dt,du,dv,dw) = valueOrElse(ak(al), {
1303- let gd = if (gc)
1304- then cQ(aE, aH)
1234+func capitalizeExSwopFi (aM,aA,fS,fT,fU,dr,ds,dt,du,dv,dw,dl) = valueOrElse(ak(al), {
1235+ let gb = if (fU)
1236+ then cB(aA, aM)
13051237 else {
1306- let ge = if ((aE == a))
1238+ let fW = if ((aA == a))
13071239 then ag
13081240 else ah
1309- $Tuple2(gb, ge)
1241+ $Tuple2(fT, fW)
13101242 }
1311- let gf = gd._1
1312- let ge = gd._2
1313- let gg = dm(ga, gb, ge, dq, dr, ds, dt, du, dv, dw)
1314- let cw = (gf - gb)
1315- let gh = if ((cw > 0))
1316- then [IntegerEntry((aH + P), (cw + valueOrElse(getInteger(this, (aH + P)), 0)))]
1243+ let fX = gb._1
1244+ let fW = gb._2
1245+ let fY = dq(fS, fT, fW, dr, ds, dt, du, dv, dw, dl)
1246+ let cL = (fX - fT)
1247+ let fZ = if ((cL > 0))
1248+ then [IntegerEntry((aM + P), (cL + valueOrElse(getInteger(this, (aM + P)), 0)))]
13171249 else nil
1318- (dI(aH, aE, ga, gg) ++ gh)
1250+ (dx(aM, aA, fS, fY) ++ fZ)
13191251 })
13201252
13211253
13221254
13231255 @Callable(al)
1324-func capitalizeExPuzzle (aH,aE,ga,gb,gc,dz,dA,dw) = valueOrElse(ak(al), {
1325- let gi = if (gc)
1326- then cQ(aE, aH)
1327- else {
1328- let ge = if ((aE == a))
1329- then ag
1330- else ah
1331- $Tuple2(gb, ge)
1332- }
1333- let gf = gi._1
1334- let ge = gi._2
1335- let gg = dy(ga, gb, ge, dz, dA, dw)
1336- let cw = (gf - gb)
1337- let gh = if ((cw > 0))
1338- then [IntegerEntry((aH + P), (cw + valueOrElse(getInteger(this, (aH + P)), 0)))]
1339- else nil
1340- (dI(aH, aE, ga, gg) ++ gh)
1341- })
1342-
1343-
1344-
1345-@Callable(al)
1346-func capitalizeExSwopFi (aH,aE,ga,gb,gc,dC,dD,dE,dF,dG,dH,dw) = valueOrElse(ak(al), {
1347- let gj = if (gc)
1348- then cQ(aE, aH)
1349- else {
1350- let ge = if ((aE == a))
1351- then ag
1352- else ah
1353- $Tuple2(gb, ge)
1354- }
1355- let gf = gj._1
1356- let ge = gj._2
1357- let gg = dB(ga, gb, ge, dC, dD, dE, dF, dG, dH, dw)
1358- let cw = (gf - gb)
1359- let gh = if ((cw > 0))
1360- then [IntegerEntry((aH + P), (cw + valueOrElse(getInteger(this, (aH + P)), 0)))]
1361- else nil
1362- (dI(aH, aE, ga, gg) ++ gh)
1363- })
1364-
1365-
1366-
1367-@Callable(al)
1368-func initNewPool (aE,au,gk,gl,gm,gn,go,gp,gq) = valueOrElse(ak(al), if (if ((aE != a))
1369- then (aE != b)
1256+func initNewPool (aA,au,gc,gd,ge,gf,gg,gh,gi) = valueOrElse(ak(al), if (if ((aA != a))
1257+ then (aA != b)
13701258 else false)
13711259 then throw("Wrong type")
13721260 else {
1373- let gr = aD(Address(fromBase58String(au)), aE)
1374- let ay = gr._1
1375- let az = gr._2
1376- let gs = gr._3
1377- let gt = gr._4
1378- let aA = gr._5
1379-[IntegerEntry((au + F), gk), IntegerEntry((au + G), gl), IntegerEntry((au + H), gm), IntegerEntry((au + I), gn), IntegerEntry((au + J), go), IntegerEntry((au + K), gp), IntegerEntry((au + C), 0), IntegerEntry((au + D), 0), StringEntry((N + au), aE), StringEntry((aA + O), au), BooleanEntry((au + E), gq)]
1261+ let gj = aJ(Address(fromBase58String(au)), aA)
1262+ let aw = gj._1
1263+ let ax = gj._2
1264+ let gk = gj._3
1265+ let gl = gj._4
1266+ let aH = gj._5
1267+[IntegerEntry((au + F), gc), IntegerEntry((au + G), gd), IntegerEntry((au + H), ge), IntegerEntry((au + I), gf), IntegerEntry((au + J), gg), IntegerEntry((au + K), gh), IntegerEntry((au + C), 0), IntegerEntry((au + D), 0), StringEntry((N + au), aA), StringEntry((aH + O), au), BooleanEntry((au + E), gi)]
13801268 })
13811269
13821270
1383-@Verifier(gu)
1384-func gv () = sigVerify(gu.bodyBytes, gu.proofs[0], gu.senderPublicKey)
1271+@Verifier(gm)
1272+func gn () = sigVerify(gm.bodyBytes, gm.proofs[0], gm.senderPublicKey)
13851273
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = "SF"
55
66 let b = "WX"
77
88 let c = "capNoLoan"
99
1010 let d = "capLoan"
1111
1212 let e = "stopLossNoLoan"
1313
1414 let f = "stopLossLoan"
1515
1616 let g = "loan"
1717
1818 let h = "noLoan"
1919
2020 let i = "noFee"
2121
2222 let j = 100000000
2323
2424 let k = 10000000000
2525
2626 let l = toBigInt(10000000000000000)
2727
2828 let m = 1000000
2929
3030 let n = "A_asset_balance"
3131
3232 let o = "B_asset_balance"
3333
3434 let p = "A_asset_id"
3535
3636 let q = "B_asset_id"
3737
3838 let r = "share_asset_id"
3939
4040 let s = "share_asset_supply"
4141
4242 let t = "commission"
4343
4444 let u = "_user_position"
4545
4646 let v = "_user_position_pool"
4747
4848 let w = "_user_position_borrow_amount"
4949
5050 let x = "_user_position_borrow_asset_id"
5151
5252 let y = "_user_position_number"
5353
5454 let z = "_user_position_interest"
5555
5656 let A = "_pool_total"
5757
5858 let B = "_pool_total_loan"
5959
6060 let C = "_pool_interest_loan"
6161
6262 let D = "_pool_interest_no_loan"
6363
6464 let E = "_pool_can_borrow"
6565
6666 let F = "_axly_fee_without_loan"
6767
6868 let G = "_axly_fee_with_loan"
6969
7070 let H = "_axly_fee_cap_with_loan"
7171
7272 let I = "_axly_fee_cap_no_loan"
7373
7474 let J = "_axly_fee_stoploss_with_loan"
7575
7676 let K = "_axly_fee_stoploss_no_loan"
7777
7878 let L = "_request_id"
7979
8080 let M = "requests_iter"
8181
8282 let N = "pool_"
8383
8484 let O = "_pool_share_id"
8585
8686 let P = "_pool_cap_change"
8787
8888 let Q = "last_price"
8989
9090 let R = "_twap5B"
9191
9292 let S = "_stop_loss"
9393
9494 let T = "axly_money_box"
9595
9696 let U = "swopfi_farming_addr"
9797
9898 let V = "lend_service_addr"
9999
100100 let W = "admin_call_pub_key"
101101
102102 let X = "price_oracle"
103103
104104 let Y = "exchange_contract"
105105
106106 let Z = "wx_swap_contract"
107107
108108 let aa = "swop_id"
109109
110110 let ab = "wx_id"
111111
112112 let ac = Address(fromBase58String(valueOrErrorMessage(getString(this, T), "No axly moneyBox address")))
113113
114114 let ad = Address(fromBase58String(valueOrErrorMessage(getString(this, Y), "No exchange contract address")))
115115
116116 let ae = Address(fromBase58String(valueOrErrorMessage(getString(this, X), "No price oracle address")))
117117
118118 let af = Address(fromBase58String(valueOrErrorMessage(getString(this, Z), "No wx swap address")))
119119
120120 let ag = fromBase58String(valueOrErrorMessage(getString(this, aa), "No swop id"))
121121
122122 let ah = fromBase58String(valueOrErrorMessage(getString(this, ab), "No wx id"))
123123
124124 func ai () = Address(fromBase58String(valueOrErrorMessage(getString(this, V), "Can't get lend service addr")))
125125
126126
127127 func aj () = addressFromPublicKey(fromBase58String(valueOrErrorMessage(getString(this, W), "Can't get admin addr")))
128128
129129
130130 func ak (al) = if ((al.caller == aj()))
131131 then unit
132132 else throw("Only admin can call this function")
133133
134134
135135 func am (al) = if ((al.caller == this))
136136 then unit
137137 else throw("Only contract itself can call this function")
138138
139139
140140 func an (al) = if ((al.caller == ai()))
141141 then unit
142142 else throw("Only land contract can call this function")
143143
144144
145145 func ao (ap) = {
146146 let aq = ap
147147 if ($isInstanceOf(aq, "ByteVector"))
148148 then {
149149 let ar = aq
150150 assetBalance(this, ar)
151151 }
152152 else if ($isInstanceOf(aq, "Unit"))
153153 then {
154154 let as = aq
155155 wavesBalance(this).available
156156 }
157157 else throw("Match error")
158158 }
159159
160160
161-func at (au) = $Tuple5(valueOrErrorMessage(getString(au, p), "Can't get pool A asset id"), valueOrErrorMessage(getString(au, q), "Can't get pool B asset id"), valueOrErrorMessage(getInteger(au, n), "Can't get pool A asset balance"), valueOrErrorMessage(getInteger(au, o), "Can't get pool B asset balance"), valueOrErrorMessage(getString(au, r), "Can't get share asset id"))
161+func at (au) = $Tuple2(valueOrErrorMessage(getInteger(au, n), "Can't get pool A asset balance"), valueOrErrorMessage(getInteger(au, o), "Can't get pool B asset balance"))
162162
163163
164-func av (au) = {
165- let aw = {
166- let ax = invoke(au, "getPoolConfigWrapperREADONLY", nil, nil)
167- if ($isInstanceOf(ax, "List[Any]"))
168- then ax
169- else throw(($getType(ax) + " couldn't be cast to List[Any]"))
164+func av (au,aw,ax) = $Tuple2({
165+ let ay = invoke(au, "getAccBalanceWrapperREADONLY", [aw], nil)
166+ if ($isInstanceOf(ay, "Int"))
167+ then ay
168+ else throw(($getType(ay) + " couldn't be cast to Int"))
169+ }, {
170+ let ay = invoke(au, "getAccBalanceWrapperREADONLY", [ax], nil)
171+ if ($isInstanceOf(ay, "Int"))
172+ then ay
173+ else throw(($getType(ay) + " couldn't be cast to Int"))
174+ })
175+
176+
177+func az (au,aA,aw,ax) = if ((aA == a))
178+ then at(au)
179+ else if ((aA == b))
180+ then av(au, aw, ax)
181+ else throw("Wrong pool type")
182+
183+
184+func aB (au) = {
185+ let aC = at(au)
186+ if ((aC == aC))
187+ then {
188+ let aD = aC._2
189+ let aE = aC._1
190+ $Tuple5(valueOrErrorMessage(getString(au, p), "Can't get pool A asset id"), valueOrErrorMessage(getString(au, q), "Can't get pool B asset id"), aE, aD, valueOrErrorMessage(getString(au, r), "Can't get share asset id"))
191+ }
192+ else throw("Strict value is not equal to itself.")
193+ }
194+
195+
196+func aF (au) = {
197+ let aG = {
198+ let ay = invoke(au, "getPoolConfigWrapperREADONLY", nil, nil)
199+ if ($isInstanceOf(ay, "List[Any]"))
200+ then ay
201+ else throw(($getType(ay) + " couldn't be cast to List[Any]"))
170202 }
171- if ((aw == aw))
203+ if ((aG == aG))
172204 then {
173- let ay = valueOrErrorMessage({
174- let ax = aw[4]
175- if ($isInstanceOf(ax, "String"))
176- then ax
205+ let aw = valueOrErrorMessage({
206+ let ay = aG[4]
207+ if ($isInstanceOf(ay, "String"))
208+ then ay
177209 else unit
178210 }, "Can't get pool A asset id")
179- let az = valueOrErrorMessage({
180- let ax = aw[5]
181- if ($isInstanceOf(ax, "String"))
182- then ax
211+ let ax = valueOrErrorMessage({
212+ let ay = aG[5]
213+ if ($isInstanceOf(ay, "String"))
214+ then ay
183215 else unit
184216 }, "Can't get pool B asset id")
185- let aA = valueOrErrorMessage({
186- let ax = aw[3]
187- if ($isInstanceOf(ax, "String"))
188- then ax
217+ let aH = valueOrErrorMessage({
218+ let ay = aG[3]
219+ if ($isInstanceOf(ay, "String"))
220+ then ay
189221 else unit
190222 }, "Can't get pool LP asset id")
191- let aB = {
192- let ax = invoke(au, "getAccBalanceWrapperREADONLY", [ay], nil)
193- if ($isInstanceOf(ax, "Int"))
194- then ax
195- else throw(($getType(ax) + " couldn't be cast to Int"))
196- }
197- if ((aB == aB))
223+ let aI = av(au, aw, ax)
224+ if ((aI == aI))
198225 then {
199- let aC = {
200- let ax = invoke(au, "getAccBalanceWrapperREADONLY", [az], nil)
201- if ($isInstanceOf(ax, "Int"))
202- then ax
203- else throw(($getType(ax) + " couldn't be cast to Int"))
204- }
205- if ((aC == aC))
206- then $Tuple5(ay, az, aB, aC, aA)
207- else throw("Strict value is not equal to itself.")
226+ let aD = aI._2
227+ let aE = aI._1
228+ $Tuple5(aw, ax, aE, aD, aH)
208229 }
209230 else throw("Strict value is not equal to itself.")
210231 }
211232 else throw("Strict value is not equal to itself.")
212233 }
213234
214235
215-func aD (au,aE) = if ((aE == a))
216- then at(au)
217- else if ((aE == b))
218- then av(au)
236+func aJ (au,aA) = if ((aA == a))
237+ then aB(au)
238+ else if ((aA == b))
239+ then aF(au)
219240 else throw("Wrong pool type")
220241
221242
222-func aF (au,aE,aA) = if ((aE == a))
243+func aK (au,aA,aH) = if ((aA == a))
223244 then valueOrErrorMessage(getInteger(au, s), "Can't get share asset supply")
224- else if ((aE == b))
225- then valueOrErrorMessage(assetInfo(fromBase58String(aA)), "Wrong ShareId").quantity
245+ else if ((aA == b))
246+ then valueOrErrorMessage(assetInfo(fromBase58String(aH)), "Wrong ShareId").quantity
226247 else throw("Wrong pool type")
227248
228249
229-func aG (aH) = valueOrElse(getInteger(this, (aH + A)), 0)
250+func aL (aM) = valueOrElse(getInteger(this, (aM + A)), 0)
230251
231252
232-func aI (aH) = valueOrElse(getInteger(this, (aH + B)), 0)
253+func aN (aM) = valueOrElse(getInteger(this, (aM + B)), 0)
233254
234255
235-func aJ (aK) = (valueOrElse(getInteger(this, (aK + y)), 0) + 1)
256+func aO (aP) = (valueOrElse(getInteger(this, (aP + y)), 0) + 1)
236257
237258
238-func aL (aH,aM) = if ((aM == d))
239- then getIntegerValue(this, (aH + I))
240- else if ((aM == c))
241- then getIntegerValue(this, (aH + H))
242- else if ((aM == g))
243- then getIntegerValue(this, (aH + G))
244- else if ((aM == h))
245- then getIntegerValue(this, (aH + F))
246- else if ((aM == i))
259+func aQ (aM,aR) = if ((aR == d))
260+ then getIntegerValue(this, (aM + I))
261+ else if ((aR == c))
262+ then getIntegerValue(this, (aM + H))
263+ else if ((aR == g))
264+ then getIntegerValue(this, (aM + G))
265+ else if ((aR == h))
266+ then getIntegerValue(this, (aM + F))
267+ else if ((aR == i))
247268 then 0
248269 else throw("Wrong fee type")
249270
250271
251-func aN () = Address(fromBase58String(valueOrErrorMessage(getString(this, U), "Can't get swopfi farming addr")))
272+func aS () = Address(fromBase58String(valueOrErrorMessage(getString(this, U), "Can't get swopfi farming addr")))
252273
253274
254-func aO (au) = {
255- let aP = Address(fromBase58String(valueOrErrorMessage(getString(au, "%s__factoryContract"), "Can't get WX factory contract addr")))
256- let aQ = split(valueOrErrorMessage(getString(aP, "%s__factoryConfig"), "Can't get WX factory cfg"), "__")
257- Address(fromBase58String(aQ[1]))
275+func aT (au) = {
276+ let aU = Address(fromBase58String(valueOrErrorMessage(getString(au, "%s__factoryContract"), "Can't get WX factory contract addr")))
277+ let aV = split(valueOrErrorMessage(getString(aU, "%s__factoryConfig"), "Can't get WX factory cfg"), "__")
278+ Address(fromBase58String(aV[1]))
258279 }
259280
260281
261-func aR (ap) = {
282+func aW (ap) = {
262283 let aq = ap
263284 if ($isInstanceOf(aq, "ByteVector"))
264285 then {
265286 let ar = aq
266287 toBase58String(ar)
267288 }
268289 else if ($isInstanceOf(aq, "Unit"))
269290 then {
270291 let as = aq
271292 "WAVES"
272293 }
273294 else throw("Not Asset id")
274295 }
275296
276297
277-func aS (ap) = if ((ap == "WAVES"))
298+func aX (ap) = if ((ap == "WAVES"))
278299 then unit
279300 else fromBase58String(ap)
280301
281302
282-func aT (ap) = if ((ap == "WAVES"))
303+func aY (ap) = if ((ap == "WAVES"))
283304 then 8
284305 else {
285306 let aq = assetInfo(fromBase58String(ap))
286307 if ($isInstanceOf(aq, "Asset"))
287308 then {
288- let aU = aq
289- aU.decimals
309+ let aZ = aq
310+ aZ.decimals
290311 }
291312 else throw("Can't find asset")
292313 }
293314
294315
295-func aV (ap) = pow(10, 0, aT(ap), 0, 0, DOWN)
316+func ba (ap) = pow(10, 0, aY(ap), 0, 0, DOWN)
296317
297318
298-func aW (aX) = {
299- func aY (aZ,ap) = {
300- let ba = getIntegerValue(ae, (ap + R))
301- (aZ :+ ba)
319+func bb (bc) = {
320+ func bd (be,ap) = {
321+ let bf = getIntegerValue(ae, (ap + R))
322+ (be :+ bf)
302323 }
303324
304- let bb = aX
305- let bc = size(bb)
306- let bd = nil
307- func be (bf,bg) = if ((bg >= bc))
308- then bf
309- else aY(bf, bb[bg])
325+ let bg = bc
326+ let bh = size(bg)
327+ let bi = nil
328+ func bj (bk,bl) = if ((bl >= bh))
329+ then bk
330+ else bd(bk, bg[bl])
310331
311- func bh (bf,bg) = if ((bg >= bc))
312- then bf
332+ func bm (bk,bl) = if ((bl >= bh))
333+ then bk
313334 else throw("List size exceeds 50")
314335
315- bh(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(bd, 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)
336+ bm(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bi, 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)
316337 }
317338
318339
319-func bi (aA) = {
320- let aH = valueOrErrorMessage(getString(this, (aA + O)), "Can't find pool addr by share id")
321- let au = Address(fromBase58String(aH))
322- let bj = valueOrErrorMessage(getString(this, (N + aH)), "Pool is not inited")
323- let bk = aD(au, bj)
324- let ay = bk._1
325- let az = bk._2
326- let bl = bk._3
327- let bm = bk._4
328- let bn = getIntegerValue(ae, (ay + R))
329- let bo = getIntegerValue(ae, (az + R))
330- let bp = aF(au, bj, aA)
331- let bq = pow(10, 0, aT(ay), 0, 0, DOWN)
332- let br = pow(10, 0, aT(az), 0, 0, DOWN)
333- let bs = pow(10, 0, aT(aA), 0, 0, DOWN)
334- let bt = (fraction(bl, bn, bq) + fraction(bm, bo, br))
335- fraction(bt, bs, bp)
340+func bn (aH) = {
341+ let aM = valueOrErrorMessage(getString(this, (aH + O)), "Can't find pool addr by share id")
342+ let au = Address(fromBase58String(aM))
343+ let bo = valueOrErrorMessage(getString(this, (N + aM)), "Pool is not inited")
344+ let bp = aJ(au, bo)
345+ let aw = bp._1
346+ let ax = bp._2
347+ let bq = bp._3
348+ let br = bp._4
349+ let bs = getIntegerValue(ae, (aw + R))
350+ let bt = getIntegerValue(ae, (ax + R))
351+ let bu = aK(au, bo, aH)
352+ let bv = pow(10, 0, aY(aw), 0, 0, DOWN)
353+ let bw = pow(10, 0, aY(ax), 0, 0, DOWN)
354+ let bx = pow(10, 0, aY(aH), 0, 0, DOWN)
355+ let by = (fraction(bq, bs, bv) + fraction(br, bt, bw))
356+ fraction(by, bx, bu)
336357 }
337358
338359
339-func bu (bv) = {
340- func aY (aZ,aA) = (aZ :+ bi(aA))
360+func bz (bA) = {
361+ func bd (be,aH) = (be :+ bn(aH))
341362
342- let bb = bv
343- let bc = size(bb)
344- let bd = nil
345- func be (bf,bg) = if ((bg >= bc))
346- then bf
347- else aY(bf, bb[bg])
363+ let bg = bA
364+ let bh = size(bg)
365+ let bi = nil
366+ func bj (bk,bl) = if ((bl >= bh))
367+ then bk
368+ else bd(bk, bg[bl])
348369
349- func bh (bf,bg) = if ((bg >= bc))
350- then bf
370+ func bm (bk,bl) = if ((bl >= bh))
371+ then bk
351372 else throw("List size exceeds 20")
352373
353- bh(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(bd, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
374+ bm(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bi, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
354375 }
355376
356377
357-func bw (ay,az,aA,bx) = {
358- let by = aW([ay, az])
359- let bz = bi(aA)
360- let bA = ([toString(by[0]), toString(by[1]), toString(bz)] ++ bx)
361-[StringEntry(Q, makeString(bA, ","))]
378+func bB (aw,ax,aH,bC) = {
379+ let bD = bb([aw, ax])
380+ let bE = bn(aH)
381+ let bF = ([toString(bD[0]), toString(bD[1]), toString(bE)] ++ bC)
382+[StringEntry(Q, makeString(bF, ","))]
362383 }
363384
364385
365-func bB (bj,au,bC,ay,bD,az,aB,aC) = if ((bj == a))
386+func bG (bo,au,bH,aw,bI,ax,aE,aD) = if ((bo == a))
366387 then {
367- let bE = {
368- let ax = invoke(au, "callFunction", ["calcLPReplenishTwoTokensREADONLY", [toString(bC), toString(bD)]], nil)
369- if ($isInstanceOf(ax, "List[Any]"))
370- then ax
371- else throw(($getType(ax) + " couldn't be cast to List[Any]"))
388+ let bJ = {
389+ let ay = invoke(au, "callFunction", ["calcLPReplenishTwoTokensREADONLY", [toString(bH), toString(bI)]], nil)
390+ if ($isInstanceOf(ay, "List[Any]"))
391+ then ay
392+ else throw(($getType(ay) + " couldn't be cast to List[Any]"))
372393 }
373- if ((bE == bE))
394+ if ((bJ == bJ))
374395 then $Tuple5({
375- let ax = bE[3]
376- if ($isInstanceOf(ax, "Int"))
377- then ax
378- else throw(($getType(ax) + " couldn't be cast to Int"))
396+ let ay = bJ[3]
397+ if ($isInstanceOf(ay, "Int"))
398+ then ay
399+ else throw(($getType(ay) + " couldn't be cast to Int"))
379400 }, {
380- let ax = bE[4]
381- if ($isInstanceOf(ax, "Int"))
382- then ax
383- else throw(($getType(ax) + " couldn't be cast to Int"))
401+ let ay = bJ[4]
402+ if ($isInstanceOf(ay, "Int"))
403+ then ay
404+ else throw(($getType(ay) + " couldn't be cast to Int"))
384405 }, {
385- let ax = bE[1]
386- if ($isInstanceOf(ax, "Int"))
387- then ax
388- else throw(($getType(ax) + " couldn't be cast to Int"))
389- }, aR(bE[2]), {
390- let ax = bE[0]
391- if ($isInstanceOf(ax, "Int"))
392- then ax
393- else throw(($getType(ax) + " couldn't be cast to Int"))
406+ let ay = bJ[1]
407+ if ($isInstanceOf(ay, "Int"))
408+ then ay
409+ else throw(($getType(ay) + " couldn't be cast to Int"))
410+ }, aW(bJ[2]), {
411+ let ay = bJ[0]
412+ if ($isInstanceOf(ay, "Int"))
413+ then ay
414+ else throw(($getType(ay) + " couldn't be cast to Int"))
394415 })
395416 else throw("Strict value is not equal to itself.")
396417 }
397418 else {
398- let bF = $Tuple2(split({
399- let ax = invoke(au, "evaluatePutByAmountAssetREADONLY", [bC], nil)
400- if ($isInstanceOf(ax, "String"))
401- then ax
402- else throw(($getType(ax) + " couldn't be cast to String"))
419+ let bK = $Tuple2(split({
420+ let ay = invoke(au, "evaluatePutByAmountAssetREADONLY", [bH], nil)
421+ if ($isInstanceOf(ay, "String"))
422+ then ay
423+ else throw(($getType(ay) + " couldn't be cast to String"))
403424 }, "__"), split({
404- let ax = invoke(au, "evaluatePutByPriceAssetREADONLY", [bD], nil)
405- if ($isInstanceOf(ax, "String"))
406- then ax
407- else throw(($getType(ax) + " couldn't be cast to String"))
425+ let ay = invoke(au, "evaluatePutByPriceAssetREADONLY", [bI], nil)
426+ if ($isInstanceOf(ay, "String"))
427+ then ay
428+ else throw(($getType(ay) + " couldn't be cast to String"))
408429 }, "__"))
409- if ((bF == bF))
430+ if ((bK == bK))
410431 then {
411- let bG = bF._2
412- let bH = bF._1
413- let bI = parseIntValue(bH[1])
414- let bJ = parseIntValue(bG[1])
415- if ((bJ > bI))
432+ let bL = bK._2
433+ let bM = bK._1
434+ let bN = parseIntValue(bM[1])
435+ let bO = parseIntValue(bL[1])
436+ if ((bO > bN))
416437 then {
417- let bK = parseIntValue(bH[8])
418- $Tuple5(bC, bK, (bD - bK), az, bJ)
438+ let bP = parseIntValue(bM[8])
439+ $Tuple5(bH, bP, (bI - bP), ax, bO)
419440 }
420441 else {
421- let bK = parseIntValue(bG[7])
422- $Tuple5(bK, bD, (bC - bK), ay, bI)
442+ let bP = parseIntValue(bL[7])
443+ $Tuple5(bP, bI, (bH - bP), aw, bN)
423444 }
424445 }
425446 else throw("Strict value is not equal to itself.")
426447 }
427448
428449
429-func bL (au,bj,bC,ay,bD,az) = {
430- let bM = [AttachedPayment(aS(ay), bC), AttachedPayment(aS(az), bD)]
431- if ((bj == a))
432- then invoke(au, "callFunction", ["replenishWithTwoTokens", ["false", "0"]], bM)
433- else invoke(au, "put", [1000000, false], bM)
450+func bQ (au,bo,bH,aw,bI,ax) = {
451+ let bR = [AttachedPayment(aX(aw), bH), AttachedPayment(aX(ax), bI)]
452+ if ((bo == a))
453+ then invoke(au, "callFunction", ["replenishWithTwoTokens", ["false", "0"]], bR)
454+ else invoke(au, "put", [1000000, false], bR)
434455 }
435456
436457
437-func bN (au,bj,bK,bO) = {
438- let bM = [AttachedPayment(aS(bO), bK)]
439- if ((bj == a))
440- then invoke(au, "callFunction", ["replenishWithOneToken", ["0", "false", "0"]], bM)
441- else invoke(au, "putOneTkn", [0, false], bM)
458+func bS (au,bo,bP,bT) = {
459+ let bR = [AttachedPayment(aX(bT), bP)]
460+ if ((bo == a))
461+ then invoke(au, "callFunction", ["replenishWithOneToken", ["0", "false", "0"]], bR)
462+ else invoke(au, "putOneTkn", [0, false], bR)
442463 }
443464
444465
445-func bP (aH,bj,aA,bQ) = {
446- let bM = [AttachedPayment(fromBase58String(aA), bQ)]
447- if ((bj == a))
448- then invoke(aN(), "lockShareTokens", [aH, 0], bM)
449- else invoke(aO(addressFromStringValue(aH)), "stake", nil, bM)
466+func bU (aM,bo,aH,bV) = {
467+ let bR = [AttachedPayment(fromBase58String(aH), bV)]
468+ if ((bo == a))
469+ then invoke(aS(), "lockShareTokens", [aM, 0], bR)
470+ else invoke(aT(addressFromStringValue(aM)), "stake", nil, bR)
450471 }
451472
452473
453-func bR (aH,bj,aA,bQ) = {
454- let bS = if ((bj == a))
455- then $Tuple3(aN(), "withdrawShareTokens", [aH, bQ])
456- else if ((bj == b))
457- then $Tuple3(aO(Address(fromBase58String(aH))), "unstake", [aA, bQ])
474+func bW (aM,bo,aH,bV) = {
475+ let bX = if ((bo == a))
476+ then $Tuple3(aS(), "withdrawShareTokens", [aM, bV])
477+ else if ((bo == b))
478+ then $Tuple3(aT(Address(fromBase58String(aM))), "unstake", [aH, bV])
458479 else throw("Wrong pool type")
459- let bT = bS._1
460- let bU = bS._2
461- let bV = bS._3
462- let bW = invoke(bT, bU, bV, nil)
463- if ((bW == bW))
464- then bQ
480+ let bY = bX._1
481+ let bZ = bX._2
482+ let ca = bX._3
483+ let cb = invoke(bY, bZ, ca, nil)
484+ if ((cb == cb))
485+ then bV
465486 else throw("Strict value is not equal to itself.")
466487 }
467488
468489
469-func bX (aH,bY,bZ,aB,aC,ca,cb) = {
470- let au = Address(fromBase58String(aH))
471- let cc = 1000000
472- let cd = getIntegerValue(au, t)
473- let ce = fraction(ca, cc, (cc - cd), CEILING)
474- let cf = if ((cb == bY))
490+func cc (aM,cd,ce,aE,aD,cf,cg) = {
491+ let au = Address(fromBase58String(aM))
492+ let ch = 1000000
493+ let ci = getIntegerValue(au, t)
494+ let cj = fraction(cf, ch, (ch - ci), CEILING)
495+ let ck = if ((cg == cd))
475496 then {
476- let cg = fraction(ce, aC, (aB - ce), CEILING)
477- $Tuple2(cg, bZ)
497+ let cl = fraction(cj, aD, (aE - cj), CEILING)
498+ $Tuple2(cl, ce)
478499 }
479500 else {
480- let cg = fraction(ce, aB, (aC - ce), CEILING)
481- $Tuple2(cg, bY)
501+ let cl = fraction(cj, aE, (aD - cj), CEILING)
502+ $Tuple2(cl, cd)
482503 }
483- let cg = cf._1
484- let ch = cf._2
485- $Tuple2(ch, cg)
504+ let cl = ck._1
505+ let cm = ck._2
506+ $Tuple2(cm, cl)
486507 }
487508
488509
489-func ci (aH,bY,bZ,aB,aC,ca,cb) = {
490- let cj = getIntegerValue(af, "%s__protocolFee")
491- let ck = getIntegerValue(af, "%s__poolFee")
492- let cl = toBigInt(100000000)
493- let cm = if ((cb == bY))
510+func cn (aM,cd,ce,aE,aD,cf,cg) = {
511+ let co = getIntegerValue(af, "%s__protocolFee")
512+ let cp = getIntegerValue(af, "%s__poolFee")
513+ let cq = toBigInt(100000000)
514+ let cr = if ((cg == cd))
494515 then {
495- let cg = fraction(ca, aC, (aB - ca))
496- $Tuple2(cg, bZ)
516+ let cl = fraction(cf, aD, (aE - cf))
517+ $Tuple2(cl, ce)
497518 }
498519 else {
499- let cg = fraction(ca, aB, (aC - ca))
500- $Tuple2(cg, bY)
520+ let cl = fraction(cf, aE, (aD - cf))
521+ $Tuple2(cl, cd)
501522 }
502- let cg = cm._1
503- let ch = cm._2
504- let cn = toInt(fraction(toBigInt(cg), cl, (cl - toBigInt((cj + ck))), CEILING))
505- $Tuple2(ch, cn)
523+ let cl = cr._1
524+ let cm = cr._2
525+ let cs = toInt(fraction(toBigInt(cl), cq, (cq - toBigInt((co + cp))), CEILING))
526+ $Tuple2(cm, cs)
506527 }
507528
508529
509-func co (aE,aH,bY,bZ,aB,aC,ca,cb) = if ((aE == a))
530+func ct (aA,aM,cd,ce,aE,aD,cf,cg) = if ((aA == a))
510531 then {
511- let cp = bX(aH, bY, bZ, aB, aC, ca, cb)
512- let ch = cp._1
513- let cg = cp._2
514- invoke(addressFromStringValue(aH), "callFunction", ["exchange", [toString(ca)]], [AttachedPayment(aS(ch), cg)])
532+ let cu = cc(aM, cd, ce, aE, aD, cf, cg)
533+ let cm = cu._1
534+ let cl = cu._2
535+ invoke(addressFromStringValue(aM), "callFunction", ["exchange", [toString(cf)]], [AttachedPayment(aX(cm), cl)])
515536 }
516537 else {
517- let cq = ci(aH, bY, bZ, aB, aC, ca, cb)
518- let ch = cq._1
519- let cg = cq._2
520- invoke(af, "swap", [ca, cb, toString(this)], [AttachedPayment(aS(ch), cg)])
538+ let cv = cn(aM, cd, ce, aE, aD, cf, cg)
539+ let cm = cv._1
540+ let cl = cv._2
541+ invoke(af, "swap", [cf, cg, toString(this)], [AttachedPayment(aX(cm), cl)])
521542 }
522543
523544
524-func cr (bj,aH,bC,ay,bD,az,aB,aC) = {
525- let au = addressFromStringValue(aH)
526- if ((bj == a))
545+func cw (au,bo,aH,cx) = {
546+ let cy = if ((bo == a))
527547 then {
528- let bW = {
529- let ax = invoke(au, "callFunction", ["calcLPReplenishDiffPropREADONLY", [toString(bC), toString(bD), "0"]], nil)
530- if ($isInstanceOf(ax, "List[Any]"))
531- then ax
532- else throw(($getType(ax) + " couldn't be cast to List[Any]"))
548+ let cb = {
549+ let ay = invoke(au, "callFunction", ["withdrawREADONLY", [toString(cx)]], nil)
550+ if ($isInstanceOf(ay, "(Int, Int)"))
551+ then ay
552+ else throw(($getType(ay) + " couldn't be cast to (Int, Int)"))
533553 }
534- if ((bW == bW))
535- then $Tuple2({
536- let ax = bW[0]
537- if ($isInstanceOf(ax, "Int"))
538- then ax
539- else throw(($getType(ax) + " couldn't be cast to Int"))
540- }, {
541- let ax = bW[1]
542- if ($isInstanceOf(ax, "Int"))
543- then ax
544- else throw(($getType(ax) + " couldn't be cast to Int"))
545- })
554+ if ((cb == cb))
555+ then $Tuple2(cb._1, cb._2)
546556 else throw("Strict value is not equal to itself.")
547557 }
548- else if ((bj == b))
549- then {
550- let cs = if (if ((bC > 0))
551- then (bD > 0)
552- else false)
553- then {
554- let ct = bB(bj, au, bC, ay, bD, az, aB, aC)
555- let cu = ct._1
556- let cv = ct._2
557- let cw = ct._3
558- let cx = ct._4
559- let cy = ct._5
560- $Tuple3(cw, cx, cy)
561- }
562- else if ((bC > 0))
563- then $Tuple3(bC, ay, 0)
564- else $Tuple3(bD, az, 0)
565- let cw = cs._1
566- let cx = cs._2
567- let cz = cs._3
568- let cA = if ((cw > 0))
569- then {
570- let bW = {
571- let ax = invoke(au, "putOneTknREADONLY", [cx, cw], nil)
572- if ($isInstanceOf(ax, "(Int, Int, Int)"))
573- then ax
574- else throw(($getType(ax) + " couldn't be cast to (Int, Int, Int)"))
575- }
576- if ((bW == bW))
577- then $Tuple2(bW._1, bW._3)
578- else throw("Strict value is not equal to itself.")
579- }
580- else $Tuple2(0, 0)
581- let cB = cA._1
582- let cC = cA._2
583- $Tuple2((cz + cB), cC)
584- }
585- else throw("Wrong pool type")
558+ else {
559+ let cb = split({
560+ let ay = invoke(au, "evaluateGetREADONLY", [aH, cx], nil)
561+ if ($isInstanceOf(ay, "String"))
562+ then ay
563+ else throw(($getType(ay) + " couldn't be cast to String"))
564+ }, "__")
565+ if ((cb == cb))
566+ then $Tuple2(parseIntValue(cb[1]), parseIntValue(cb[2]))
567+ else throw("Strict value is not equal to itself.")
568+ }
569+ let cz = cy._1
570+ let cA = cy._2
571+ $Tuple2(cz, cA)
586572 }
587573
588574
589-func cD (au,bj,aA,cE) = {
590- let cF = if ((bj == a))
591- then {
592- let bW = {
593- let ax = invoke(au, "callFunction", ["withdrawREADONLY", [toString(cE)]], nil)
594- if ($isInstanceOf(ax, "(Int, Int)"))
595- then ax
596- else throw(($getType(ax) + " couldn't be cast to (Int, Int)"))
597- }
598- if ((bW == bW))
599- then $Tuple2(bW._1, bW._2)
600- else throw("Strict value is not equal to itself.")
601- }
602- else {
603- let bW = split({
604- let ax = invoke(au, "evaluateGetREADONLY", [aA, cE], nil)
605- if ($isInstanceOf(ax, "String"))
606- then ax
607- else throw(($getType(ax) + " couldn't be cast to String"))
608- }, "__")
609- if ((bW == bW))
610- then $Tuple2(parseIntValue(bW[1]), parseIntValue(bW[2]))
611- else throw("Strict value is not equal to itself.")
612- }
613- let cG = cF._1
614- let cH = cF._2
615- $Tuple2(cG, cH)
616- }
617-
618-
619-func cI (bj,aH,cy,aA,ay,az,aB,aC,cJ,cK) = {
620- let au = addressFromStringValue(aH)
621- let cL = cD(au, bj, aA, cy)
622- let cM = cL._1
623- let cN = cL._2
624- if ((cJ > 0))
625- then {
626- let cO = if (if ((cK == ay))
627- then (cJ > cM)
628- else false)
629- then (cJ - cM)
630- else if (if ((cK == az))
631- then (cJ > cN)
632- else false)
633- then (cJ - cN)
634- else 0
635- let cP = if ((cO > 0))
636- then if ((bj == a))
637- then bX(aH, ay, az, aB, aC, cO, cK)
638- else ci(aH, ay, az, aB, aC, cO, cK)
639- else $Tuple2("", 0)
640- let ch = cP._1
641- let cg = cP._2
642- if ((cK == ay))
643- then $Tuple2(((cM + cO) - cJ), (cN - cg))
644- else $Tuple2((cM - cg), ((cN + cO) - cJ))
645- }
646- else $Tuple2(cM, cN)
647- }
648-
649-
650-func cQ (aE,aH) = if ((aE == a))
575+func cB (aA,aM) = if ((aA == a))
651576 then {
652- let cR = ao(ag)
653- if ((cR == cR))
577+ let cC = ao(ag)
578+ if ((cC == cC))
654579 then {
655- let bW = invoke(aN(), "claim", [aH], nil)
656- if ((bW == bW))
580+ let cb = invoke(aS(), "claim", [aM], nil)
581+ if ((cb == cb))
657582 then {
658- let cS = ao(ag)
659- $Tuple2((cS - cR), ag)
583+ let cD = ao(ag)
584+ $Tuple2((cD - cC), ag)
660585 }
661586 else throw("Strict value is not equal to itself.")
662587 }
663588 else throw("Strict value is not equal to itself.")
664589 }
665- else if ((aE == b))
590+ else if ((aA == b))
666591 then {
667- let cR = ao(ah)
668- if ((cR == cR))
592+ let cC = ao(ah)
593+ if ((cC == cC))
669594 then {
670- let bW = invoke(aO(Address(fromBase58String(aH))), "claimWX", [aH], nil)
671- if ((bW == bW))
595+ let cb = invoke(aT(Address(fromBase58String(aM))), "claimWX", [aM], nil)
596+ if ((cb == cb))
672597 then {
673- let cS = ao(ah)
674- $Tuple2((cS - cR), ah)
598+ let cD = ao(ah)
599+ $Tuple2((cD - cC), ah)
675600 }
676601 else throw("Strict value is not equal to itself.")
677602 }
678603 else throw("Strict value is not equal to itself.")
679604 }
680605 else throw("Wrong pool type")
681606
682607
683-func cT (bj,aH,aM,bC,ay,bD,az,aB,aC,cU) = {
684- let cV = ao(fromBase58String(cU))
685- if ((cV == cV))
608+func cE (bo,aM,aR,bH,aw,bI,ax,aE,aD,cF) = {
609+ let cG = ao(fromBase58String(cF))
610+ if ((cG == cG))
686611 then {
687- let au = addressFromStringValue(aH)
688- let cW = if (if ((bC > 0))
689- then (bD > 0)
612+ let au = addressFromStringValue(aM)
613+ let cH = if (if ((bH > 0))
614+ then (bI > 0)
690615 else false)
691616 then {
692- let cX = bB(bj, au, bC, ay, bD, az, aB, aC)
693- let cu = cX._1
694- let cv = cX._2
695- let cw = cX._3
696- let cx = cX._4
697- let bW = bL(au, bj, cu, ay, cv, az)
698- if ((bW == bW))
699- then $Tuple2(cw, cx)
617+ let cI = bG(bo, au, bH, aw, bI, ax, aE, aD)
618+ let cJ = cI._1
619+ let cK = cI._2
620+ let cL = cI._3
621+ let cM = cI._4
622+ let cb = bQ(au, bo, cJ, aw, cK, ax)
623+ if ((cb == cb))
624+ then $Tuple2(cL, cM)
700625 else throw("Strict value is not equal to itself.")
701626 }
702- else if ((bC > 0))
703- then $Tuple2(bC, ay)
704- else if ((bD > 0))
705- then $Tuple2(bD, az)
627+ else if ((bH > 0))
628+ then $Tuple2(bH, aw)
629+ else if ((bI > 0))
630+ then $Tuple2(bI, ax)
706631 else throw("pmts must be > 0")
707- let cw = cW._1
708- let cx = cW._2
709- let bW = if ((cw > 0))
710- then bN(au, bj, cw, cx)
632+ let cL = cH._1
633+ let cM = cH._2
634+ let cb = if ((cL > 0))
635+ then bS(au, bo, cL, cM)
711636 else nil
712- if ((bW == bW))
637+ if ((cb == cb))
713638 then {
714- let cY = ao(fromBase58String(cU))
715- let cZ = (cY - cV)
716- let da = fraction(cZ, aL(aH, aM), m)
717- let db = (cZ - da)
718- if ((0 >= db))
639+ let cN = ao(fromBase58String(cF))
640+ let cO = (cN - cG)
641+ let cP = fraction(cO, aQ(aM, aR), m)
642+ let cQ = (cO - cP)
643+ if ((0 >= cQ))
719644 then throw("amount of staked sharetokens must be > 0")
720645 else {
721- let dc = bP(aH, bj, cU, db)
722- if ((dc == dc))
723- then $Tuple2(db, da)
646+ let cR = bU(aM, bo, cF, cQ)
647+ if ((cR == cR))
648+ then $Tuple2(cQ, cP)
724649 else throw("Strict value is not equal to itself.")
725650 }
726651 }
727652 else throw("Strict value is not equal to itself.")
728653 }
729654 else throw("Strict value is not equal to itself.")
730655 }
731656
732657
733-func dd (aH,aK,de,da,df,aA,aE,dg) = {
734- let dh = aG(aH)
735- let di = aI(aH)
736- let dj = if (dg)
737- then $Tuple2(getIntegerValue(this, (aH + C)), (di + de))
738- else $Tuple2(getIntegerValue(this, (aH + D)), di)
739- let dk = dj._1
740- let dl = dj._2
741-[IntegerEntry((aH + A), (dh + de)), IntegerEntry((aH + B), dl), IntegerEntry((((((aH + "_") + aK) + "_") + toString(df)) + u), de), IntegerEntry((((((aH + "_") + aK) + "_") + toString(df)) + z), dk), StringEntry((((aK + "_") + toString(df)) + v), aH), IntegerEntry((aK + y), df), ScriptTransfer(ac, da, fromBase58String(aA))]
658+func cS (aM,aP,cT,cP,cU,aH,aA,cV) = {
659+ let cW = aL(aM)
660+ let cX = aN(aM)
661+ let cY = if (cV)
662+ then $Tuple2(getIntegerValue(this, (aM + C)), (cX + cT))
663+ else $Tuple2(getIntegerValue(this, (aM + D)), cX)
664+ let cZ = cY._1
665+ let da = cY._2
666+[IntegerEntry((aM + A), (cW + cT)), IntegerEntry((aM + B), da), IntegerEntry((((((aM + "_") + aP) + "_") + toString(cU)) + u), cT), IntegerEntry((((((aM + "_") + aP) + "_") + toString(cU)) + z), cZ), StringEntry((((aP + "_") + toString(cU)) + v), aM), IntegerEntry((aP + y), cU), ScriptTransfer(ac, cP, fromBase58String(aH))]
742667 }
743668
744669
745-func dm (dn,do,dp,dq,dr,ds,dt,du,dv,dw) = {
746- let dx = ao(aS(dn))
747- if ((dx == dx))
670+func db (dc,dd,de,df,dg,dh,di,dj,dk,dl) = {
671+ let dm = ao(aX(dc))
672+ if ((dm == dm))
748673 then {
749- let bW = invoke(ad, "swap", [dq, dr, ds, dt, du, dv, dw], [AttachedPayment(dp, do)])
750- if ((bW == bW))
751- then (ao(aS(dn)) - dx)
674+ let cb = invoke(ad, "swap", [df, dg, dh, di, dj, dk, dl], [AttachedPayment(de, dd)])
675+ if ((cb == cb))
676+ then (ao(aX(dc)) - dm)
752677 else throw("Strict value is not equal to itself.")
753678 }
754679 else throw("Strict value is not equal to itself.")
755680 }
756681
757682
758-func dy (dn,do,dp,dz,dA,dw) = {
759- let dx = ao(aS(dn))
760- if ((dx == dx))
683+func dn (dc,dd,de,do,dp,dl) = {
684+ let dm = ao(aX(dc))
685+ if ((dm == dm))
761686 then {
762- let bW = invoke(ad, "puzzleSwap", [dz, dA, dw], [AttachedPayment(dp, do)])
763- if ((bW == bW))
764- then (ao(aS(dn)) - dx)
687+ let cb = invoke(ad, "puzzleSwap", [do, dp, dl], [AttachedPayment(de, dd)])
688+ if ((cb == cb))
689+ then (ao(aX(dc)) - dm)
765690 else throw("Strict value is not equal to itself.")
766691 }
767692 else throw("Strict value is not equal to itself.")
768693 }
769694
770695
771-func dB (dn,do,dp,dC,dD,dE,dF,dG,dH,dw) = {
772- let dx = ao(aS(dn))
773- if ((dx == dx))
696+func dq (dc,dd,de,dr,ds,dt,du,dv,dw,dl) = {
697+ let dm = ao(aX(dc))
698+ if ((dm == dm))
774699 then {
775- let bW = invoke(ad, "swopfiSwap", [dC, dD, dE, dF, dG, dH, dw], [AttachedPayment(dp, do)])
776- if ((bW == bW))
777- then (ao(aS(dn)) - dx)
700+ let cb = invoke(ad, "swopfiSwap", [dr, ds, dt, du, dv, dw, dl], [AttachedPayment(de, dd)])
701+ if ((cb == cb))
702+ then (ao(aX(dc)) - dm)
778703 else throw("Strict value is not equal to itself.")
779704 }
780705 else throw("Strict value is not equal to itself.")
781706 }
782707
783708
784-func dI (aH,bj,dJ,dK) = {
785- let au = Address(fromBase58String(aH))
786- let dL = aD(au, bj)
787- let dM = dL._1
788- let dN = dL._2
789- let aB = dL._3
790- let aC = dL._4
791- let aA = dL._5
792- if (if ((dJ != dM))
793- then (dJ != dN)
709+func dx (aM,bo,dy,dz) = {
710+ let au = Address(fromBase58String(aM))
711+ let dA = aJ(au, bo)
712+ let dB = dA._1
713+ let dC = dA._2
714+ let aE = dA._3
715+ let aD = dA._4
716+ let aH = dA._5
717+ if (if ((dy != dB))
718+ then (dy != dC)
794719 else false)
795720 then throw("Wrong asset")
796721 else {
797- let dO = if ((dJ == dM))
798- then $Tuple2(dK, 0)
799- else $Tuple2(0, dK)
800- let bC = dO._1
801- let bD = dO._2
802- let dP = cT(bj, aH, i, bC, dM, bD, dN, aB, aC, aA)
803- let de = dP._1
804- let dQ = dP._2
805- let dR = valueOrElse(getInteger(this, (aH + C)), 0)
806- let dS = valueOrElse(getInteger(this, (aH + D)), 0)
807- let dT = aG(aH)
808- let dU = aI(aH)
809- let dV = fraction(dU, j, dT)
810- let dW = fraction(de, dV, j)
811- let dX = (de - dW)
812- let dY = if ((dU > 0))
813- then (dR + fraction(dW, k, dU))
722+ let dD = if ((dy == dB))
723+ then $Tuple2(dz, 0)
724+ else $Tuple2(0, dz)
725+ let bH = dD._1
726+ let bI = dD._2
727+ let dE = cE(bo, aM, i, bH, dB, bI, dC, aE, aD, aH)
728+ let cT = dE._1
729+ let dF = dE._2
730+ let dG = valueOrElse(getInteger(this, (aM + C)), 0)
731+ let dH = valueOrElse(getInteger(this, (aM + D)), 0)
732+ let dI = aL(aM)
733+ let dJ = aN(aM)
734+ let dK = fraction(dJ, j, dI)
735+ let dL = fraction(cT, dK, j)
736+ let dM = (cT - dL)
737+ let dN = if ((dJ > 0))
738+ then (dG + fraction(dL, k, dJ))
814739 else 0
815- let dZ = if (((dT - dU) > 0))
816- then (dS + fraction(dX, k, (dT - dU)))
740+ let dO = if (((dI - dJ) > 0))
741+ then (dH + fraction(dM, k, (dI - dJ)))
817742 else 0
818- let ea = fraction(dW, aL(aH, d), m)
819- let eb = fraction(dX, aL(aH, c), m)
820- let ec = bR(aH, bj, aA, (ea + eb))
821- if ((ec == ec))
822- then ([IntegerEntry((aH + C), dY), IntegerEntry((aH + D), dZ), IntegerEntry((aH + A), ((dT + de) - ec)), IntegerEntry((aH + B), ((dU + dW) - ea)), ScriptTransfer(ac, (ea + eb), fromBase58String(aA))] ++ bw(dM, dN, aA, nil))
743+ let dP = fraction(dL, aQ(aM, d), m)
744+ let dQ = fraction(dM, aQ(aM, c), m)
745+ let dR = bW(aM, bo, aH, (dP + dQ))
746+ if ((dR == dR))
747+ then ([IntegerEntry((aM + C), dN), IntegerEntry((aM + D), dO), IntegerEntry((aM + A), ((dI + cT) - dR)), IntegerEntry((aM + B), ((dJ + dL) - dP)), ScriptTransfer(ac, (dP + dQ), fromBase58String(aH))] ++ bB(dB, dC, aH, nil))
823748 else throw("Strict value is not equal to itself.")
824749 }
825750 }
826751
827752
828-func ed (aH,cE,ee,ef) = {
829- let au = Address(fromBase58String(aH))
830- let bj = valueOrErrorMessage(getString(this, (N + aH)), "Unknown pool")
831- let eg = aD(au, bj)
832- let bY = eg._1
833- let bZ = eg._2
834- let aB = eg._3
835- let aC = eg._4
836- let aA = eg._5
837- let eh = ao(aS(bY))
838- if ((eh == eh))
753+func dS (aM,cx,dT,dU) = {
754+ let au = Address(fromBase58String(aM))
755+ let bo = valueOrErrorMessage(getString(this, (N + aM)), "Unknown pool")
756+ let dV = aJ(au, bo)
757+ let cd = dV._1
758+ let ce = dV._2
759+ let aE = dV._3
760+ let aD = dV._4
761+ let aH = dV._5
762+ let dW = ao(aX(cd))
763+ if ((dW == dW))
839764 then {
840- let ei = ao(aS(bZ))
841- if ((ei == ei))
765+ let dX = ao(aX(ce))
766+ if ((dX == dX))
842767 then {
843- let bW = if ((bj == a))
844- then invoke(au, "callFunction", ["withdraw", [toString(cE)]], nil)
768+ let cb = if ((bo == a))
769+ then invoke(au, "callFunction", ["withdraw", [toString(cx)]], nil)
845770 else {
846- let bW = bR(aH, bj, aA, cE)
847- if ((bW == bW))
848- then invoke(au, "get", nil, [AttachedPayment(aS(aA), cE)])
771+ let cb = bW(aM, bo, aH, cx)
772+ if ((cb == cb))
773+ then invoke(au, "get", nil, [AttachedPayment(aX(aH), cx)])
849774 else throw("Strict value is not equal to itself.")
850775 }
851- if ((bW == bW))
776+ if ((cb == cb))
852777 then {
853- let ej = ao(aS(bY))
854- let ek = ao(aS(bZ))
855- let el = $Tuple2((ej - eh), (ek - ei))
856- let em = el._1
857- let en = el._2
858- let eo = if ((ee > 0))
778+ let dY = ao(aX(cd))
779+ let dZ = ao(aX(ce))
780+ let ea = $Tuple2((dY - dW), (dZ - dX))
781+ let eb = ea._1
782+ let ec = ea._2
783+ let ed = if ((dT > 0))
859784 then {
860- let cO = if (if ((ef == bY))
861- then (ee > em)
785+ let ee = if (if ((dU == cd))
786+ then (dT > eb)
862787 else false)
863- then (ee - em)
864- else if (if ((ef == bZ))
865- then (ee > en)
788+ then (dT - eb)
789+ else if (if ((dU == ce))
790+ then (dT > ec)
866791 else false)
867- then (ee - en)
792+ then (dT - ec)
868793 else 0
869- let ep = if ((cO > 0))
870- then co(bj, aH, bY, bZ, (aB - em), (aC - en), cO, ef)
794+ let ef = if ((ee > 0))
795+ then ct(bo, aM, cd, ce, (aE - eb), (aD - ec), ee, dU)
871796 else nil
872- if ((ep == ep))
797+ if ((ef == ef))
873798 then {
874- let eq = ao(aS(bY))
875- let er = ao(aS(bZ))
876- if ((ef == bY))
877- then $Tuple2(((eq - eh) - ee), (er - ei))
878- else $Tuple2((eq - eh), ((er - ei) - ee))
799+ let eg = ao(aX(cd))
800+ let eh = ao(aX(ce))
801+ if ((dU == cd))
802+ then $Tuple2(((eg - dW) - dT), (eh - dX))
803+ else $Tuple2((eg - dW), ((eh - dX) - dT))
879804 }
880805 else throw("Strict value is not equal to itself.")
881806 }
882- else $Tuple2(em, en)
883- let es = eo._1
884- let et = eo._2
885- $Tuple7(es, bY, et, bZ, ej, ek, aA)
807+ else $Tuple2(eb, ec)
808+ let ei = ed._1
809+ let ej = ed._2
810+ $Tuple7(ei, cd, ej, ce, dY, dZ, aH)
886811 }
887812 else throw("Strict value is not equal to itself.")
888813 }
889814 else throw("Strict value is not equal to itself.")
890815 }
891816 else throw("Strict value is not equal to itself.")
892817 }
893818
894819
895-func eu (aK,aH,ev,ew) = {
896- let ex = valueOrErrorMessage(getInteger(this, (((((aH + "_") + aK) + "_") + ev) + u)), "Unknown position")
897- let ey = getIntegerValue(this, (((((aH + "_") + aK) + "_") + ev) + z))
898- let ez = if (ew)
899- then getIntegerValue(this, (aH + C))
900- else getIntegerValue(this, (aH + D))
901- (ex + fraction(ex, (ez - ey), k))
820+func ek (aP,aM,el,em) = {
821+ let en = valueOrErrorMessage(getInteger(this, (((((aM + "_") + aP) + "_") + el) + u)), "Unknown position")
822+ let eo = getIntegerValue(this, (((((aM + "_") + aP) + "_") + el) + z))
823+ let ep = if (em)
824+ then getIntegerValue(this, (aM + C))
825+ else getIntegerValue(this, (aM + D))
826+ (en + fraction(en, (ep - eo), k))
902827 }
903828
904829
905-func eA (aK,aH,ev,eB) = {
906- let ex = valueOrErrorMessage(getInteger(this, (((((aH + "_") + aK) + "_") + ev) + u)), "Unknown position")
907- let cJ = valueOrElse(getInteger(this, (((((aH + "_") + aK) + "_") + ev) + w)), 0)
908- let cE = eu(aK, aH, ev, (cJ > 0))
909- let eC = aG(aH)
910- let eD = Address(fromBase58String(aK))
911- let ef = valueOrElse(getString(this, (((((aH + "_") + aK) + "_") + ev) + x)), "")
912- let ee = if ((cJ > 0))
830+func eq (aP,aM,el,er) = {
831+ let en = valueOrErrorMessage(getInteger(this, (((((aM + "_") + aP) + "_") + el) + u)), "Unknown position")
832+ let es = valueOrElse(getInteger(this, (((((aM + "_") + aP) + "_") + el) + w)), 0)
833+ let cx = ek(aP, aM, el, (es > 0))
834+ let et = aL(aM)
835+ let eu = Address(fromBase58String(aP))
836+ let dU = valueOrElse(getString(this, (((((aM + "_") + aP) + "_") + el) + x)), "")
837+ let dT = if ((es > 0))
913838 then {
914- let ax = invoke(ai(), "getAssetDebt", [false, ((aK + "_") + ev), ef], nil)
915- if ($isInstanceOf(ax, "Int"))
916- then ax
917- else throw(($getType(ax) + " couldn't be cast to Int"))
839+ let ay = invoke(ai(), "getAssetDebt", [false, ((aP + "_") + el), dU], nil)
840+ if ($isInstanceOf(ay, "Int"))
841+ then ay
842+ else throw(($getType(ay) + " couldn't be cast to Int"))
918843 }
919844 else 0
920- let eE = ed(aH, cE, ee, ef)
921- if ((eE == eE))
845+ let ev = dS(aM, cx, dT, dU)
846+ if ((ev == ev))
922847 then {
923- let aA = eE._7
924- let ek = eE._6
925- let ej = eE._5
926- let bZ = eE._4
927- let eF = eE._3
928- let bY = eE._2
929- let eG = eE._1
930- let eH = if ((ee > 0))
931- then invoke(ai(), "repayFor", [((aK + "_") + ev)], [AttachedPayment(aS(ef), ee)])
848+ let aH = ev._7
849+ let dZ = ev._6
850+ let dY = ev._5
851+ let ce = ev._4
852+ let ew = ev._3
853+ let cd = ev._2
854+ let ex = ev._1
855+ let ey = if ((dT > 0))
856+ then invoke(ai(), "repayFor", [((aP + "_") + el)], [AttachedPayment(aX(dU), dT)])
932857 else 0
933- if ((eH == eH))
934- then ([DeleteEntry((((((aH + "_") + aK) + "_") + ev) + u)), DeleteEntry((((((aH + "_") + aK) + "_") + ev) + z)), IntegerEntry((aH + A), (eC - cE)), ScriptTransfer(eD, eG, aS(bY)), ScriptTransfer(eD, eF, aS(bZ))] ++ bw(bY, bZ, aA, nil))
858+ if ((ey == ey))
859+ then ([DeleteEntry((((((aM + "_") + aP) + "_") + el) + u)), DeleteEntry((((((aM + "_") + aP) + "_") + el) + z)), IntegerEntry((aM + A), (et - cx)), ScriptTransfer(eu, ex, aX(cd)), ScriptTransfer(eu, ew, aX(ce))] ++ bB(cd, ce, aH, nil))
935860 else throw("Strict value is not equal to itself.")
936861 }
937862 else throw("Strict value is not equal to itself.")
938863 }
939864
940865
941-func eI (eJ) = {
942- let eK = split(valueOrErrorMessage(getString(this, (eJ + L)), ("No request with id " + eJ)), ",")
943- let aK = eK[0]
944- let aH = eK[1]
945- let bC = parseIntValue(eK[2])
946- let dM = eK[3]
947- let bD = parseIntValue(eK[4])
948- let dN = eK[5]
949- let aB = parseIntValue(eK[6])
950- let aC = parseIntValue(eK[7])
951- let aA = eK[8]
952- let eL = eK[9]
953- let eM = parseIntValue(eK[10])
954- $Tuple11(aK, aH, bC, dM, bD, dN, aB, aC, aA, eL, eM)
866+func ez (eA) = {
867+ let eB = split(valueOrErrorMessage(getString(this, (eA + L)), ("No request with id " + eA)), ",")
868+ let aP = eB[0]
869+ let aM = eB[1]
870+ let bH = parseIntValue(eB[2])
871+ let dB = eB[3]
872+ let bI = parseIntValue(eB[4])
873+ let dC = eB[5]
874+ let aE = parseIntValue(eB[6])
875+ let aD = parseIntValue(eB[7])
876+ let aH = eB[8]
877+ let eC = eB[9]
878+ let eD = parseIntValue(eB[10])
879+ $Tuple11(aP, aM, bH, dB, bI, dC, aE, aD, aH, eC, eD)
955880 }
956881
957882
958-func eN (bC,bD,ay,az,eO,eP) = {
959- let bn = getIntegerValue(ae, (ay + R))
960- let bo = getIntegerValue(ae, (az + R))
961- let eQ = pow(10, 0, aT(ay), 0, 0, DOWN)
962- let eR = pow(10, 0, aT(az), 0, 0, DOWN)
963- let eS = (fraction(bn, bC, eQ) + fraction(bo, bD, eR))
964- let eT = if ((eP == ay))
965- then $Tuple2(bn, eQ)
966- else $Tuple2(bo, eR)
967- let eU = eT._1
968- let eV = eT._2
969- fraction(fraction(eS, (eO - 100), 100), eV, eU)
883+func eE (bH,bI,aw,ax,eF,eG) = {
884+ let bs = getIntegerValue(ae, (aw + R))
885+ let bt = getIntegerValue(ae, (ax + R))
886+ let eH = pow(10, 0, aY(aw), 0, 0, DOWN)
887+ let eI = pow(10, 0, aY(ax), 0, 0, DOWN)
888+ let eJ = (fraction(bs, bH, eH) + fraction(bt, bI, eI))
889+ let eK = if ((eG == aw))
890+ then $Tuple2(bs, eH)
891+ else $Tuple2(bt, eI)
892+ let eL = eK._1
893+ let eM = eK._2
894+ fraction(fraction(eJ, (eF - 100), 100), eM, eL)
895+ }
896+
897+
898+func eN (eO,dB,dC) = if ((size(eO) == 2))
899+ then if ((aW(eO[0].assetId) != dB))
900+ then throw("Wrong payment asset A")
901+ else if ((aW(eO[1].assetId) != dC))
902+ then throw("Wrong payment asset B")
903+ else $Tuple4(eO[0].amount, dB, eO[1].amount, dC)
904+ else if ((size(eO) == 1))
905+ then if ((aW(eO[0].assetId) == dB))
906+ then $Tuple4(eO[0].amount, dB, 0, dC)
907+ else if ((aW(eO[0].assetId) == dC))
908+ then $Tuple4(0, dB, eO[0].amount, dC)
909+ else throw("Wrong payment")
910+ else throw("One or two payments expected")
911+
912+
913+func eP (aE,aD,eQ,eR) = {
914+ let eS = ((j - fraction(fraction(aD, j, aE), j, fraction(eR, j, eQ))) * 100)
915+ if ((0 > eS))
916+ then (eS * -1)
917+ else eS
970918 }
971919
972920
973921 @Callable(al)
974-func calcPriceImpactEVALONLY (aH,eO,eP,bC,bD) = if (if ((100 > eO))
975- then true
976- else (eO > 300))
977- then throw("Leverage can't be <100 and >300")
978- else {
979- let bj = valueOrErrorMessage(getString(this, (N + aH)), "Pool is not inited")
980- let eW = aD(Address(fromBase58String(aH)), bj)
981- let dM = eW._1
982- let dN = eW._2
983- let aB = eW._3
984- let aC = eW._4
985- let aA = eW._5
986- let cJ = if ((eO > 100))
987- then eN(bC, bD, dM, dN, eO, eP)
988- else 0
989- let eX = if ((eP == dM))
990- then $Tuple2((bC + cJ), bD)
991- else $Tuple2(bC, (bD + cJ))
992- let eY = eX._1
993- let eZ = eX._2
994- let fa = cr(bj, aH, eY, dM, eZ, dN, aB, aC)
995- let cy = fa._1
996- let cC = fa._2
997- let fb = if ((0 > cC))
998- then (cC * -1)
999- else cC
1000- $Tuple2(nil, [fb])
1001- }
922+func getShareAssetPriceREADONLY (aH) = {
923+ let eT = bn(aH)
924+ $Tuple2(nil, eT)
925+ }
1002926
1003927
1004928
1005929 @Callable(al)
1006-func replenishFromLandEVALONLY (eJ) = valueOrElse(an(al), {
1007- let fc = eI(eJ)
1008- let aK = fc._1
1009- let aH = fc._2
1010- let bC = fc._3
1011- let dM = fc._4
1012- let bD = fc._5
1013- let dN = fc._6
1014- let aB = fc._7
1015- let aC = fc._8
1016- let aA = fc._9
1017- let eL = fc._10
1018- let eM = fc._11
930+func getUserPositionShareAmountREADONLY (aP,cU) = {
931+ let aM = valueOrErrorMessage(getString(this, (((aP + "_") + cU) + v)), "Unknown position")
932+ let es = getIntegerValue(this, (((((aM + "_") + aP) + "_") + cU) + w))
933+ let cx = ek(aP, aM, cU, (es > 0))
934+ $Tuple2(nil, cx)
935+ }
936+
937+
938+
939+@Callable(al)
940+func getUserPositionInDollarsREADONLY (aP,eU,cU) = {
941+ func eV (be,aM) = {
942+ let eW = be
943+ let eX = eW._1
944+ let eY = eW._2
945+ let eZ = eW._3
946+ let bo = valueOrErrorMessage(getString(this, (N + aM)), "Pool is not inited")
947+ let fa = aJ(Address(fromBase58String(aM)), bo)
948+ let dB = fa._1
949+ let dC = fa._2
950+ let aE = fa._3
951+ let aD = fa._4
952+ let aH = fa._5
953+ let es = valueOrElse(getInteger(this, (((((aM + "_") + aP) + "_") + cU[eZ]) + w)), 0)
954+ let cx = ek(aP, aM, cU[eZ], (es > 0))
955+ let eT = bn(aH)
956+ let fb = pow(10, 0, aY(aH), 0, 0, DOWN)
957+ let fc = fraction(cx, eT, fb)
958+ if ((es == 0))
959+ then $Tuple3((eX :+ fc), (eY :+ 0), (eZ + 1))
960+ else {
961+ let dU = getStringValue(this, (((((aM + "_") + aP) + "_") + cU[eZ]) + x))
962+ let dT = {
963+ let ay = invoke(ai(), "getAssetDebt", [false, ((aP + "_") + cU[eZ]), dU], nil)
964+ if ($isInstanceOf(ay, "Int"))
965+ then ay
966+ else throw(($getType(ay) + " couldn't be cast to Int"))
967+ }
968+ let fd = getIntegerValue(ae, (dU + R))
969+ let fe = pow(10, 0, aY(dU), 0, 0, DOWN)
970+ let ff = fraction(dT, fd, fe)
971+ $Tuple3((eX :+ fc), (eY :+ ff), (eZ + 1))
972+ }
973+ }
974+
975+ let fg = {
976+ let bg = eU
977+ let bh = size(bg)
978+ let bi = $Tuple3(nil, nil, 0)
979+ func bj (bk,bl) = if ((bl >= bh))
980+ then bk
981+ else eV(bk, bg[bl])
982+
983+ func bm (bk,bl) = if ((bl >= bh))
984+ then bk
985+ else throw("List size exceeds 20")
986+
987+ bm(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bi, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
988+ }
989+ let fh = fg._1
990+ let dT = fg._2
991+ $Tuple2(nil, $Tuple2(fh, dT))
992+ }
993+
994+
995+
996+@Callable(al)
997+func replenish (aM,eF,eG) = if (if ((100 > eF))
998+ then true
999+ else (eF > 300))
1000+ then throw("Leverage can't be <100 and >300")
1001+ else if (if (!(getBooleanValue(this, (aM + E))))
1002+ then (eF > 100)
1003+ else false)
1004+ then throw("You can't borrow in this pool")
1005+ else {
1006+ let bo = valueOrErrorMessage(getString(this, (N + aM)), "Pool is not inited")
1007+ let fi = aJ(Address(fromBase58String(aM)), bo)
1008+ let dB = fi._1
1009+ let dC = fi._2
1010+ let aE = fi._3
1011+ let aD = fi._4
1012+ let aH = fi._5
1013+ let fj = eN(al.payments, dB, dC)
1014+ let bH = fj._1
1015+ let fk = fj._2
1016+ let bI = fj._3
1017+ let fl = fj._4
1018+ let aP = toString(al.caller)
1019+ let fm = aO(aP)
1020+ if ((eF > 100))
1021+ then {
1022+ let es = eE(bH, bI, fk, fl, eF, eG)
1023+ let eB = makeString([aP, aM, toString(bH), fk, toString(bI), fl, toString(aE), toString(aD), aH, eG, toString(es)], ",")
1024+ let fn = {
1025+ let ay = invoke(this, "createNewRequest", [eB], nil)
1026+ if ($isInstanceOf(ay, "Int"))
1027+ then ay
1028+ else throw(($getType(ay) + " couldn't be cast to Int"))
1029+ }
1030+ if ((fn == fn))
1031+ then {
1032+ let fo = [((aP + "_") + toString(fm)), aH, eG, es, toString(this), "replenishFromLand", toString(valueOrErrorMessage(fn, "Can't create new request"))]
1033+ let cb = reentrantInvoke(ai(), "flashPosition", fo, nil)
1034+ if ((cb == cb))
1035+ then {
1036+ let fp = getIntegerValue(this, (((((aM + "_") + aP) + "_") + toString(fm)) + u))
1037+ let fq = az(Address(fromBase58String(aM)), bo, dB, dC)
1038+ if ((fq == fq))
1039+ then {
1040+ let eR = fq._2
1041+ let eQ = fq._1
1042+ let fr = eP(aE, aD, eQ, eR)
1043+ let fs = cw(Address(fromBase58String(aM)), bo, aH, fp)
1044+ let ft = fs._1
1045+ let fu = fs._2
1046+ $Tuple2(nil, [fr, ft, fu])
1047+ }
1048+ else throw("Strict value is not equal to itself.")
1049+ }
1050+ else throw("Strict value is not equal to itself.")
1051+ }
1052+ else throw("Strict value is not equal to itself.")
1053+ }
1054+ else {
1055+ let fv = cE(bo, aM, h, bH, dB, bI, dC, aE, aD, aH)
1056+ let fp = fv._1
1057+ let dR = fv._2
1058+ let fw = az(Address(fromBase58String(aM)), bo, dB, dC)
1059+ if ((fw == fw))
1060+ then {
1061+ let eR = fw._2
1062+ let eQ = fw._1
1063+ let fr = eP(aE, aD, eQ, eR)
1064+ let fx = cw(Address(fromBase58String(aM)), bo, aH, fp)
1065+ let ft = fx._1
1066+ let fu = fx._2
1067+ $Tuple2((cS(aM, aP, fp, dR, fm, aH, bo, false) ++ bB(dB, dC, aH, [toString(ft), toString(fu)])), [fr, ft, fu])
1068+ }
1069+ else throw("Strict value is not equal to itself.")
1070+ }
1071+ }
1072+
1073+
1074+
1075+@Callable(al)
1076+func withdraw (aM,el) = eq(toString(al.caller), aM, toString(el), false)
1077+
1078+
1079+
1080+@Callable(al)
1081+func createUpdateStopLoss (el,fy,ap,fz) = {
1082+ let fA = getIntegerValue(ae, (ap + R))
1083+ if (!(isDefined(getInteger(this, (((((fy + "_") + toString(al.caller)) + "_") + toString(el)) + u)))))
1084+ then throw("There are no user position")
1085+ else if ((0 >= fz))
1086+ then throw("Price must be greater than 0")
1087+ else if ((fz > fA))
1088+ then throw("Price must be less than current token price")
1089+ else [IntegerEntry((((((((toString(al.caller) + "_") + toString(el)) + "_") + fy) + "_") + ap) + S), fz)]
1090+ }
1091+
1092+
1093+
1094+@Callable(al)
1095+func deleteStopLoss (el,fy,ap) = if (!(isDefined(getInteger(this, (((((((toString(al.caller) + "_") + toString(el)) + "_") + fy) + "_") + ap) + S)))))
1096+ then throw("No entry")
1097+ else [DeleteEntry((((((((toString(al.caller) + "_") + toString(el)) + "_") + fy) + "_") + ap) + S))]
1098+
1099+
1100+
1101+@Callable(al)
1102+func init (fB,fC,fD,ae,fE,af,fF,fG,fH) = if (isDefined(getString(T)))
1103+ then throw("Already inited")
1104+ else [StringEntry(T, fB), StringEntry(U, fC), StringEntry(V, fD), StringEntry(X, ae), StringEntry(Y, fE), StringEntry(Z, af), StringEntry(aa, fF), StringEntry(ab, fG), StringEntry(W, fH)]
1105+
1106+
1107+
1108+@Callable(al)
1109+func createNewRequest (ca) = valueOrElse(am(al), {
1110+ let fn = (valueOrElse(getInteger(this, M), 0) + 1)
1111+ $Tuple2([StringEntry((toString(fn) + L), ca), IntegerEntry(M, fn)], fn)
1112+ })
1113+
1114+
1115+
1116+@Callable(al)
1117+func replenishFromLand (eA) = valueOrElse(an(al), {
1118+ let fI = ez(eA)
1119+ let aP = fI._1
1120+ let aM = fI._2
1121+ let bH = fI._3
1122+ let dB = fI._4
1123+ let bI = fI._5
1124+ let dC = fI._6
1125+ let aE = fI._7
1126+ let aD = fI._8
1127+ let aH = fI._9
1128+ let eC = fI._10
1129+ let eD = fI._11
10191130 if ((size(al.payments) != 1))
10201131 then throw("Wrong payment size")
1021- else if (if ((aR(al.payments[0].assetId) != eL))
1132+ else if (if ((aW(al.payments[0].assetId) != eC))
10221133 then true
1023- else (al.payments[0].amount != eM))
1134+ else (al.payments[0].amount != eD))
10241135 then throw("Wrong payment")
10251136 else {
1026- let fd = if ((dM == eL))
1027- then $Tuple2((bC + al.payments[0].amount), bD)
1028- else $Tuple2(bC, (bD + al.payments[0].amount))
1029- let fe = fd._1
1030- let ff = fd._2
1031- let bj = valueOrErrorMessage(getString(this, (N + aH)), "Unknown pool")
1032- let fg = cT(bj, aH, g, fe, dM, ff, dN, aB, aC, aA)
1033- let fh = fg._1
1034- let ec = fg._2
1035- let df = aJ(aK)
1036- let fi = [IntegerEntry((((((aH + "_") + aK) + "_") + toString(df)) + w), eM), StringEntry((((((aH + "_") + aK) + "_") + toString(df)) + x), eL)]
1037- let fj = dd(aH, aK, fh, ec, df, aA, bj, true)
1038- nil
1137+ let fJ = if ((dB == eC))
1138+ then $Tuple2((bH + al.payments[0].amount), bI)
1139+ else $Tuple2(bH, (bI + al.payments[0].amount))
1140+ let fK = fJ._1
1141+ let fL = fJ._2
1142+ let bo = valueOrErrorMessage(getString(this, (N + aM)), "Unknown pool")
1143+ let fM = cE(bo, aM, g, fK, dB, fL, dC, aE, aD, aH)
1144+ let fp = fM._1
1145+ let dR = fM._2
1146+ let cU = aO(aP)
1147+ let fN = [IntegerEntry((((((aM + "_") + aP) + "_") + toString(cU)) + w), eD), StringEntry((((((aM + "_") + aP) + "_") + toString(cU)) + x), eC)]
1148+ let fO = cS(aM, aP, fp, dR, cU, aH, bo, true)
1149+ let fP = cw(Address(fromBase58String(aM)), bo, aH, fp)
1150+ let ft = fP._1
1151+ let fu = fP._2
1152+ $Tuple2((((fO ++ bB(dB, dC, aH, [toString(ft), toString(fu)])) ++ fN) :+ DeleteEntry((eA + L))), fp)
10391153 }
10401154 })
10411155
10421156
10431157
10441158 @Callable(al)
1045-func getShareAssetPriceREADONLY (aA) = {
1046- let fk = bi(aA)
1047- $Tuple2(nil, fk)
1048- }
1049-
1050-
1051-
1052-@Callable(al)
1053-func getUserPositionShareAmountREADONLY (aK,df) = {
1054- let aH = valueOrErrorMessage(getString(this, (((aK + "_") + df) + v)), "Unknown position")
1055- let cJ = getIntegerValue(this, (((((aH + "_") + aK) + "_") + df) + w))
1056- let cE = eu(aK, aH, df, (cJ > 0))
1057- $Tuple2(nil, cE)
1058- }
1059-
1060-
1061-
1062-@Callable(al)
1063-func getUserPositionInDollarsREADONLY (aK,fl,df) = {
1064- func fm (aZ,aH) = {
1065- let fn = aZ
1066- let fo = fn._1
1067- let fp = fn._2
1068- let fq = fn._3
1069- let bj = valueOrErrorMessage(getString(this, (N + aH)), "Pool is not inited")
1070- let fr = aD(Address(fromBase58String(aH)), bj)
1071- let dM = fr._1
1072- let dN = fr._2
1073- let aB = fr._3
1074- let aC = fr._4
1075- let aA = fr._5
1076- let cJ = valueOrElse(getInteger(this, (((((aH + "_") + aK) + "_") + df[fq]) + w)), 0)
1077- let cE = eu(aK, aH, df[fq], (cJ > 0))
1078- let fk = bi(aA)
1079- let fs = pow(10, 0, aT(aA), 0, 0, DOWN)
1080- let ft = fraction(cE, fk, fs)
1081- if ((cJ == 0))
1082- then $Tuple3((fo :+ ft), (fp :+ 0), (fq + 1))
1083- else {
1084- let ef = getStringValue(this, (((((aH + "_") + aK) + "_") + df[fq]) + x))
1085- let ee = {
1086- let ax = invoke(ai(), "getAssetDebt", [false, ((aK + "_") + df[fq]), ef], nil)
1087- if ($isInstanceOf(ax, "Int"))
1088- then ax
1089- else throw(($getType(ax) + " couldn't be cast to Int"))
1090- }
1091- let fu = getIntegerValue(ae, (ef + R))
1092- let fv = pow(10, 0, aT(ef), 0, 0, DOWN)
1093- let fw = fraction(ee, fu, fv)
1094- $Tuple3((fo :+ ft), (fp :+ fw), (fq + 1))
1095- }
1096- }
1097-
1098- let fx = {
1099- let bb = fl
1100- let bc = size(bb)
1101- let bd = $Tuple3(nil, nil, 0)
1102- func be (bf,bg) = if ((bg >= bc))
1103- then bf
1104- else fm(bf, bb[bg])
1105-
1106- func bh (bf,bg) = if ((bg >= bc))
1107- then bf
1108- else throw("List size exceeds 20")
1109-
1110- bh(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(bd, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
1111- }
1112- let fy = fx._1
1113- let ee = fx._2
1114- $Tuple2(nil, $Tuple2(fy, ee))
1115- }
1116-
1117-
1118-
1119-@Callable(al)
1120-func replenish (aH,eO,eP) = if (if ((100 > eO))
1121- then true
1122- else (eO > 300))
1123- then throw("Leverage can't be <100 and >300")
1124- else if (if (!(getBooleanValue(this, (aH + E))))
1125- then (eO > 100)
1126- else false)
1127- then throw("You can't borrow in this pool")
1128- else {
1129- let bj = valueOrErrorMessage(getString(this, (N + aH)), "Pool is not inited")
1130- let fz = aD(Address(fromBase58String(aH)), bj)
1131- let dM = fz._1
1132- let dN = fz._2
1133- let aB = fz._3
1134- let aC = fz._4
1135- let aA = fz._5
1136- let fA = if ((size(al.payments) == 2))
1137- then if ((aR(al.payments[0].assetId) != dM))
1138- then throw("Wrong payment asset A")
1139- else if ((aR(al.payments[1].assetId) != dN))
1140- then throw("Wrong payment asset B")
1141- else $Tuple4(al.payments[0].amount, dM, al.payments[1].amount, dN)
1142- else if ((size(al.payments) == 1))
1143- then if ((aR(al.payments[0].assetId) == dM))
1144- then $Tuple4(al.payments[0].amount, dM, 0, dN)
1145- else if ((aR(al.payments[0].assetId) == dN))
1146- then $Tuple4(0, dM, al.payments[0].amount, dN)
1147- else throw("Wrong payment")
1148- else throw("One or two payments expected")
1149- let bC = fA._1
1150- let fB = fA._2
1151- let bD = fA._3
1152- let fC = fA._4
1153- let fD = aJ(toString(al.caller))
1154- if ((eO > 100))
1155- then {
1156- let cJ = eN(bC, bD, fB, fC, eO, eP)
1157- let eK = makeString([toString(al.caller), aH, toString(bC), fB, toString(bD), fC, toString(aB), toString(aC), aA, eP, toString(cJ)], ",")
1158- let fE = {
1159- let ax = invoke(this, "createNewRequest", [eK], nil)
1160- if ($isInstanceOf(ax, "Int"))
1161- then ax
1162- else throw(($getType(ax) + " couldn't be cast to Int"))
1163- }
1164- if ((fE == fE))
1165- then {
1166- let fF = [((toString(al.caller) + "_") + toString(fD)), aA, eP, cJ, toString(this), "replenishFromLand", toString(valueOrErrorMessage(fE, "Can't create new request"))]
1167- let bW = reentrantInvoke(ai(), "flashPosition", fF, nil)
1168- if ((bW == bW))
1169- then nil
1170- else throw("Strict value is not equal to itself.")
1171- }
1172- else throw("Strict value is not equal to itself.")
1173- }
1174- else {
1175- let fG = cT(bj, aH, h, bC, dM, bD, dN, aB, aC, aA)
1176- let fh = fG._1
1177- let ec = fG._2
1178- let fH = cD(Address(fromBase58String(aH)), bj, aA, fh)
1179- let fI = fH._1
1180- let fJ = fH._2
1181- (dd(aH, toString(al.caller), fh, ec, fD, aA, bj, false) ++ bw(dM, dN, aA, [toString(fI), toString(fJ)]))
1182- }
1183- }
1184-
1185-
1186-
1187-@Callable(al)
1188-func withdraw (aH,ev) = eA(toString(al.caller), aH, toString(ev), false)
1189-
1190-
1191-
1192-@Callable(al)
1193-func createUpdateStopLoss (ev,fK,ap,fL) = {
1194- let fM = getIntegerValue(ae, (ap + R))
1195- if (!(isDefined(getInteger(this, (((((fK + "_") + toString(al.caller)) + "_") + toString(ev)) + u)))))
1196- then throw("There are no user position")
1197- else if ((0 >= fL))
1198- then throw("Price must be greater than 0")
1199- else if ((fL > fM))
1200- then throw("Price must be less than current token price")
1201- else [IntegerEntry((((((((toString(al.caller) + "_") + toString(ev)) + "_") + fK) + "_") + ap) + S), fL)]
1202- }
1203-
1204-
1205-
1206-@Callable(al)
1207-func deleteStopLoss (ev,fK,ap) = if (!(isDefined(getInteger(this, (((((((toString(al.caller) + "_") + toString(ev)) + "_") + fK) + "_") + ap) + S)))))
1208- then throw("No entry")
1209- else [DeleteEntry((((((((toString(al.caller) + "_") + toString(ev)) + "_") + fK) + "_") + ap) + S))]
1210-
1211-
1212-
1213-@Callable(al)
1214-func init (fN,fO,fP,ae,fQ,af,fR,fS,fT) = if (isDefined(getString(T)))
1215- then throw("Already inited")
1216- else [StringEntry(T, fN), StringEntry(U, fO), StringEntry(V, fP), StringEntry(X, ae), StringEntry(Y, fQ), StringEntry(Z, af), StringEntry(aa, fR), StringEntry(ab, fS), StringEntry(W, fT)]
1217-
1218-
1219-
1220-@Callable(al)
1221-func createNewRequest (bV) = valueOrElse(am(al), {
1222- let fE = (valueOrElse(getInteger(this, M), 0) + 1)
1223- $Tuple2([StringEntry((toString(fE) + L), bV), IntegerEntry(M, fE)], fE)
1159+func liquidate (aP,el,fQ) = valueOrElse(an(al), {
1160+ let aM = valueOrErrorMessage(getString(this, (((aP + "_") + el) + v)), "no position")
1161+ let bo = valueOrErrorMessage(getString(this, (N + aM)), "Pool is not inited")
1162+ let fR = aJ(Address(fromBase58String(aM)), bo)
1163+ let dB = fR._1
1164+ let dC = fR._2
1165+ let aE = fR._3
1166+ let aD = fR._4
1167+ let aH = fR._5
1168+ let bV = bW(aM, bo, aH, fQ)
1169+ let es = getIntegerValue(this, (((((aM + "_") + aP) + "_") + el) + w))
1170+ let dU = getStringValue(this, (((((aM + "_") + aP) + "_") + el) + x))
1171+ let cx = ek(aP, aM, el, (es > 0))
1172+ if ((es == 0))
1173+ then throw("You can't liquidate position without borrow")
1174+ else [IntegerEntry((((((aM + "_") + aP) + "_") + el) + z), getIntegerValue(this, (aM + C))), IntegerEntry((aM + B), (aN(aM) - fQ)), IntegerEntry((aM + A), (aL(aM) - fQ)), IntegerEntry((((((aM + "_") + aP) + "_") + el) + u), (cx - fQ)), ScriptTransfer(al.caller, bV, fromBase58String(aH))]
12241175 })
12251176
12261177
12271178
12281179 @Callable(al)
1229-func replenishFromLand (eJ) = valueOrElse(an(al), {
1230- let fU = eI(eJ)
1231- let aK = fU._1
1232- let aH = fU._2
1233- let bC = fU._3
1234- let dM = fU._4
1235- let bD = fU._5
1236- let dN = fU._6
1237- let aB = fU._7
1238- let aC = fU._8
1239- let aA = fU._9
1240- let eL = fU._10
1241- let eM = fU._11
1242- if ((size(al.payments) != 1))
1243- then throw("Wrong payment size")
1244- else if (if ((aR(al.payments[0].assetId) != eL))
1245- then true
1246- else (al.payments[0].amount != eM))
1247- then throw("Wrong payment")
1248- else {
1249- let fV = if ((dM == eL))
1250- then $Tuple2((bC + al.payments[0].amount), bD)
1251- else $Tuple2(bC, (bD + al.payments[0].amount))
1252- let fe = fV._1
1253- let ff = fV._2
1254- let bj = valueOrErrorMessage(getString(this, (N + aH)), "Unknown pool")
1255- let fW = cT(bj, aH, g, fe, dM, ff, dN, aB, aC, aA)
1256- let fh = fW._1
1257- let ec = fW._2
1258- let df = aJ(aK)
1259- let fi = [IntegerEntry((((((aH + "_") + aK) + "_") + toString(df)) + w), eM), StringEntry((((((aH + "_") + aK) + "_") + toString(df)) + x), eL)]
1260- let fj = dd(aH, aK, fh, ec, df, aA, bj, true)
1261- let fX = cD(Address(fromBase58String(aH)), bj, aA, fh)
1262- let fI = fX._1
1263- let fJ = fX._2
1264- $Tuple2((((fj ++ bw(dM, dN, aA, [toString(fI), toString(fJ)])) ++ fi) :+ DeleteEntry((eJ + L))), fh)
1265- }
1180+func stopLoss (aP,el,aM,ap) = valueOrElse(ak(al), {
1181+ let fA = getIntegerValue(ae, (ap + R))
1182+ if (!(isDefined(getInteger(this, (((((((aP + "_") + toString(el)) + "_") + aM) + "_") + ap) + S)))))
1183+ then throw("No entry")
1184+ else (eq(toString(al.caller), aM, toString(el), true) :+ DeleteEntry((((((((aP + "_") + toString(el)) + "_") + aM) + "_") + ap) + S)))
12661185 })
12671186
12681187
12691188
12701189 @Callable(al)
1271-func liquidate (aK,ev,fY) = valueOrElse(an(al), {
1272- let aH = valueOrErrorMessage(getString(this, (((aK + "_") + ev) + v)), "no position")
1273- let bj = valueOrErrorMessage(getString(this, (N + aH)), "Pool is not inited")
1274- let fZ = aD(Address(fromBase58String(aH)), bj)
1275- let dM = fZ._1
1276- let dN = fZ._2
1277- let aB = fZ._3
1278- let aC = fZ._4
1279- let aA = fZ._5
1280- let bQ = bR(aH, bj, aA, fY)
1281- let cJ = getIntegerValue(this, (((((aH + "_") + aK) + "_") + ev) + w))
1282- let ef = getStringValue(this, (((((aH + "_") + aK) + "_") + ev) + x))
1283- let cE = eu(aK, aH, ev, (cJ > 0))
1284- if ((cJ == 0))
1285- then throw("You can't liquidate position without borrow")
1286- else [IntegerEntry((((((aH + "_") + aK) + "_") + ev) + z), getIntegerValue(this, (aH + C))), IntegerEntry((aH + B), (aI(aH) - fY)), IntegerEntry((aH + A), (aG(aH) - fY)), IntegerEntry((((((aH + "_") + aK) + "_") + ev) + u), (cE - fY)), ScriptTransfer(al.caller, bQ, fromBase58String(aA))]
1190+func capitalizeExKeeper (aM,aA,fS,fT,fU,df,dg,dh,di,dj,dk,dl) = valueOrElse(ak(al), {
1191+ let fV = if (fU)
1192+ then cB(aA, aM)
1193+ else {
1194+ let fW = if ((aA == a))
1195+ then ag
1196+ else ah
1197+ $Tuple2(fT, fW)
1198+ }
1199+ let fX = fV._1
1200+ let fW = fV._2
1201+ let fY = db(fS, fT, fW, df, dg, dh, di, dj, dk, dl)
1202+ let cL = (fX - fT)
1203+ let fZ = if ((cL > 0))
1204+ then [IntegerEntry((aM + P), (cL + valueOrElse(getInteger(this, (aM + P)), 0)))]
1205+ else nil
1206+ (dx(aM, aA, fS, fY) ++ fZ)
12871207 })
12881208
12891209
12901210
12911211 @Callable(al)
1292-func stopLoss (aK,ev,aH,ap) = valueOrElse(ak(al), {
1293- let fM = getIntegerValue(ae, (ap + R))
1294- if (!(isDefined(getInteger(this, (((((((aK + "_") + toString(ev)) + "_") + aH) + "_") + ap) + S)))))
1295- then throw("No entry")
1296- else (eA(toString(al.caller), aH, toString(ev), true) :+ DeleteEntry((((((((aK + "_") + toString(ev)) + "_") + aH) + "_") + ap) + S)))
1212+func capitalizeExPuzzle (aM,aA,fS,fT,fU,do,dp,dl) = valueOrElse(ak(al), {
1213+ let ga = if (fU)
1214+ then cB(aA, aM)
1215+ else {
1216+ let fW = if ((aA == a))
1217+ then ag
1218+ else ah
1219+ $Tuple2(fT, fW)
1220+ }
1221+ let fX = ga._1
1222+ let fW = ga._2
1223+ let fY = dn(fS, fT, fW, do, dp, dl)
1224+ let cL = (fX - fT)
1225+ let fZ = if ((cL > 0))
1226+ then [IntegerEntry((aM + P), (cL + valueOrElse(getInteger(this, (aM + P)), 0)))]
1227+ else nil
1228+ (dx(aM, aA, fS, fY) ++ fZ)
12971229 })
12981230
12991231
13001232
13011233 @Callable(al)
1302-func capitalizeExKeeper (aH,aE,ga,gb,gc,dq,dr,ds,dt,du,dv,dw) = valueOrElse(ak(al), {
1303- let gd = if (gc)
1304- then cQ(aE, aH)
1234+func capitalizeExSwopFi (aM,aA,fS,fT,fU,dr,ds,dt,du,dv,dw,dl) = valueOrElse(ak(al), {
1235+ let gb = if (fU)
1236+ then cB(aA, aM)
13051237 else {
1306- let ge = if ((aE == a))
1238+ let fW = if ((aA == a))
13071239 then ag
13081240 else ah
1309- $Tuple2(gb, ge)
1241+ $Tuple2(fT, fW)
13101242 }
1311- let gf = gd._1
1312- let ge = gd._2
1313- let gg = dm(ga, gb, ge, dq, dr, ds, dt, du, dv, dw)
1314- let cw = (gf - gb)
1315- let gh = if ((cw > 0))
1316- then [IntegerEntry((aH + P), (cw + valueOrElse(getInteger(this, (aH + P)), 0)))]
1243+ let fX = gb._1
1244+ let fW = gb._2
1245+ let fY = dq(fS, fT, fW, dr, ds, dt, du, dv, dw, dl)
1246+ let cL = (fX - fT)
1247+ let fZ = if ((cL > 0))
1248+ then [IntegerEntry((aM + P), (cL + valueOrElse(getInteger(this, (aM + P)), 0)))]
13171249 else nil
1318- (dI(aH, aE, ga, gg) ++ gh)
1250+ (dx(aM, aA, fS, fY) ++ fZ)
13191251 })
13201252
13211253
13221254
13231255 @Callable(al)
1324-func capitalizeExPuzzle (aH,aE,ga,gb,gc,dz,dA,dw) = valueOrElse(ak(al), {
1325- let gi = if (gc)
1326- then cQ(aE, aH)
1327- else {
1328- let ge = if ((aE == a))
1329- then ag
1330- else ah
1331- $Tuple2(gb, ge)
1332- }
1333- let gf = gi._1
1334- let ge = gi._2
1335- let gg = dy(ga, gb, ge, dz, dA, dw)
1336- let cw = (gf - gb)
1337- let gh = if ((cw > 0))
1338- then [IntegerEntry((aH + P), (cw + valueOrElse(getInteger(this, (aH + P)), 0)))]
1339- else nil
1340- (dI(aH, aE, ga, gg) ++ gh)
1341- })
1342-
1343-
1344-
1345-@Callable(al)
1346-func capitalizeExSwopFi (aH,aE,ga,gb,gc,dC,dD,dE,dF,dG,dH,dw) = valueOrElse(ak(al), {
1347- let gj = if (gc)
1348- then cQ(aE, aH)
1349- else {
1350- let ge = if ((aE == a))
1351- then ag
1352- else ah
1353- $Tuple2(gb, ge)
1354- }
1355- let gf = gj._1
1356- let ge = gj._2
1357- let gg = dB(ga, gb, ge, dC, dD, dE, dF, dG, dH, dw)
1358- let cw = (gf - gb)
1359- let gh = if ((cw > 0))
1360- then [IntegerEntry((aH + P), (cw + valueOrElse(getInteger(this, (aH + P)), 0)))]
1361- else nil
1362- (dI(aH, aE, ga, gg) ++ gh)
1363- })
1364-
1365-
1366-
1367-@Callable(al)
1368-func initNewPool (aE,au,gk,gl,gm,gn,go,gp,gq) = valueOrElse(ak(al), if (if ((aE != a))
1369- then (aE != b)
1256+func initNewPool (aA,au,gc,gd,ge,gf,gg,gh,gi) = valueOrElse(ak(al), if (if ((aA != a))
1257+ then (aA != b)
13701258 else false)
13711259 then throw("Wrong type")
13721260 else {
1373- let gr = aD(Address(fromBase58String(au)), aE)
1374- let ay = gr._1
1375- let az = gr._2
1376- let gs = gr._3
1377- let gt = gr._4
1378- let aA = gr._5
1379-[IntegerEntry((au + F), gk), IntegerEntry((au + G), gl), IntegerEntry((au + H), gm), IntegerEntry((au + I), gn), IntegerEntry((au + J), go), IntegerEntry((au + K), gp), IntegerEntry((au + C), 0), IntegerEntry((au + D), 0), StringEntry((N + au), aE), StringEntry((aA + O), au), BooleanEntry((au + E), gq)]
1261+ let gj = aJ(Address(fromBase58String(au)), aA)
1262+ let aw = gj._1
1263+ let ax = gj._2
1264+ let gk = gj._3
1265+ let gl = gj._4
1266+ let aH = gj._5
1267+[IntegerEntry((au + F), gc), IntegerEntry((au + G), gd), IntegerEntry((au + H), ge), IntegerEntry((au + I), gf), IntegerEntry((au + J), gg), IntegerEntry((au + K), gh), IntegerEntry((au + C), 0), IntegerEntry((au + D), 0), StringEntry((N + au), aA), StringEntry((aH + O), au), BooleanEntry((au + E), gi)]
13801268 })
13811269
13821270
1383-@Verifier(gu)
1384-func gv () = sigVerify(gu.bodyBytes, gu.proofs[0], gu.senderPublicKey)
1271+@Verifier(gm)
1272+func gn () = sigVerify(gm.bodyBytes, gm.proofs[0], gm.senderPublicKey)
13851273

github/deemru/w8io/026f985 
377.04 ms