tx · 3qpmxjEJDyLxnAnwC6JH8HkcoShp1w8USfxK2td5XV7c

3MvRWw2FPEimFCTGtK7qY9uAJbM7XJ4ZfJS:  -0.04500000 Waves

2023.06.12 21:20 [2619806] smart account 3MvRWw2FPEimFCTGtK7qY9uAJbM7XJ4ZfJS > SELF 0.00000000 Waves

{ "type": 13, "id": "3qpmxjEJDyLxnAnwC6JH8HkcoShp1w8USfxK2td5XV7c", "fee": 4500000, "feeAssetId": null, "timestamp": 1686594050734, "version": 2, "chainId": 84, "sender": "3MvRWw2FPEimFCTGtK7qY9uAJbM7XJ4ZfJS", "senderPublicKey": "HP8sssVq1866F7CaPQJwgFrt6fsqhQjKwM84cL1wjD2a", "proofs": [ "4sN4xyArxZQZyMePQGUuCQ39e1bMjGvdoQmXZcwTLFUUAjQwP6LrBqBvCsMMLhYRLhBuggvUmuq33XychwE3qcNL" ], "script": "base64:BgKYAQgCEgcKBQgBCAEBEgMKAQgSBAoCCAgSBQoDCBgYEgUKAwgBCBIDCgEIEgQKAggBEgYKBAEICAESBQoDAQgIEgMKAQgSBgoECAEICBIFCgMICAESDgoMCAgIAQQRGBgRAQEYEgoKCAgICAEECAEYEg4KDAgICAEEGBgYGBgBGBIKCggICAEBAQEBARIGCgQICAgBEgQKAggIYQAHU0ZfUE9PTAICU0YAB1dYX1BPT0wCAldYAA9DQVBfRkVFX05PX0xPQU4CCWNhcE5vTG9hbgAMQ0FQX0ZFRV9MT0FOAgdjYXBMb2FuABRTVE9QTE9TU19GRUVfTk9fTE9BTgIOc3RvcExvc3NOb0xvYW4ADVNUT1BMT1NTX0xPQU4CDHN0b3BMb3NzTG9hbgAITE9BTl9GRUUCBGxvYW4AC05PX0xPQU5fRkVFAgZub0xvYW4ABk5PX0ZFRQIFbm9GZWUABlNDQUxFOACAwtcvAAdTQ0FMRTEwAIDIr6AlAApGRUVfU0NBTEU2AMCEPQAUa1NGUG9vbEFBc3NldEJhbGFuY2UCD0FfYXNzZXRfYmFsYW5jZQAUa1NGUG9vbEJBc3NldEJhbGFuY2UCD0JfYXNzZXRfYmFsYW5jZQAPa1NGUG9vbEFBc3NldElkAgpBX2Fzc2V0X2lkAA9rU0ZQb29sQkFzc2V0SWQCCkJfYXNzZXRfaWQADmtTRlBvb2xTaGFyZUlkAg5zaGFyZV9hc3NldF9pZAASa1NGUG9vbFNoYXJlU3VwcGx5AhJzaGFyZV9hc3NldF9zdXBwbHkACmtTRlBvb2xGZWUCCmNvbW1pc3Npb24ADWtVc2VyUG9zaXRpb24CDl91c2VyX3Bvc2l0aW9uABFrVXNlclBvc2l0aW9uUG9vbAITX3VzZXJfcG9zaXRpb25fcG9vbAARa1VzZXJCb3Jyb3dBbW91bnQCHF91c2VyX3Bvc2l0aW9uX2JvcnJvd19hbW91bnQAEmtVc2VyQm9ycm93QXNzZXRJZAIeX3VzZXJfcG9zaXRpb25fYm9ycm93X2Fzc2V0X2lkABBrVXNlclBvc2l0aW9uTnVtAhVfdXNlcl9wb3NpdGlvbl9udW1iZXIAFWtVc2VyUG9zaXRpb25JbnRlcmVzdAIXX3VzZXJfcG9zaXRpb25faW50ZXJlc3QACmtQb29sVG90YWwCC19wb29sX3RvdGFsAA5rUG9vbFRvdGFsTG9hbgIQX3Bvb2xfdG90YWxfbG9hbgARa1Bvb2xJbnRlcmVzdExvYW4CE19wb29sX2ludGVyZXN0X2xvYW4AE2tQb29sSW50ZXJlc3ROb0xvYW4CFl9wb29sX2ludGVyZXN0X25vX2xvYW4AFWtBeGx5SW5GZWVXaXRob3V0TG9hbgIWX2F4bHlfZmVlX3dpdGhvdXRfbG9hbgASa0F4bHlJbkZlZVdpdGhMb2FuAhNfYXhseV9mZWVfd2l0aF9sb2FuABFrQXhseU5vTG9hbkNhcEZlZQIXX2F4bHlfZmVlX2NhcF93aXRoX2xvYW4AE2tBeGx5V2l0aExvYW5DYXBGZWUCFV9heGx5X2ZlZV9jYXBfbm9fbG9hbgAWa0F4bHlTdG9wTG9zc05vTG9hbkZlZQIcX2F4bHlfZmVlX3N0b3Bsb3NzX3dpdGhfbG9hbgAUa0F4bHlTdG9wTG9zc0xvYW5GZWUCGl9heGx5X2ZlZV9zdG9wbG9zc19ub19sb2FuAAprUmVxdWVzdElkAgtfcmVxdWVzdF9pZAAMa1JlcXVlc3RJdGVyAg1yZXF1ZXN0c19pdGVyAAVrUG9vbAIFcG9vbF8ACmtTaGFyZVBvb2wCDl9wb29sX3NoYXJlX2lkAA5rUG9vbENhcENoYW5nZQIQX3Bvb2xfY2FwX2NoYW5nZQAPa1Rva2VuTGFzdFByaWNlAgpsYXN0X3ByaWNlAA1rVXNlclN0b3BMb3NzAgpfc3RvcF9sb3NzAAlrTW9uZXlCb3gCDmF4bHlfbW9uZXlfYm94AA5rU0ZGYXJtaW5nQWRkcgITc3dvcGZpX2Zhcm1pbmdfYWRkcgAMa0xlbmRTZXJ2aWNlAhFsZW5kX3NlcnZpY2VfYWRkcgAMa1ByaWNlT3JhY2xlAgxwcmljZV9vcmFjbGUAC2tFeENvbnRyYWN0AhFleGNoYW5nZV9jb250cmFjdAAPa1d4U3dhcENvbnRyYWN0AhB3eF9zd2FwX2NvbnRyYWN0AAhtb25leUJveAkBB0FkZHJlc3MBCQDZBAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzBQlrTW9uZXlCb3gCGE5vIGF4bHkgbW9uZXlCb3ggYWRkcmVzcwAKZXhDb250cmFjdAkBB0FkZHJlc3MBCQDZBAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzBQtrRXhDb250cmFjdAIcTm8gZXhjaGFuZ2UgY29udHJhY3QgYWRkcmVzcwAPcHJpY2VPcmFjbGVBZGRyCQEHQWRkcmVzcwEJANkEAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMFDGtQcmljZU9yYWNsZQIXTm8gcHJpY2Ugb3JhY2xlIGFkZHJlc3MADnd4U3dhcENvbnRyYWN0CQEHQWRkcmVzcwEJANkEAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMFD2tXeFN3YXBDb250cmFjdAISTm8gd3ggc3dhcCBhZGRyZXNzAAZTV09QSUQBIDQBE1aOYEbiflupuAFHguexACYSm3bkTkuioHycbe6BAARXWElEASDGUh6BTupu4zzAl7AOXyzyauntnbKG0ZpCeKhgfT4bsQEKaXNTZWxmQ2FsbAEBaQMJAAACCAUBaQZjYWxsZXIFBHRoaXMFBHVuaXQJAAIBAitPbmx5IGNvbnRyYWN0IGl0c2VsZiBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uAQ5hY2NvdW50QmFsYW5jZQEHYXNzZXRJZAQHJG1hdGNoMAUHYXNzZXRJZAMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAJpZAUHJG1hdGNoMAkA8AcCBQR0aGlzBQJpZAMJAAECBQckbWF0Y2gwAgRVbml0BAV3YXZlcwUHJG1hdGNoMAgJAO8HAQUEdGhpcwlhdmFpbGFibGUJAAIBAgtNYXRjaCBlcnJvcgENZ2V0U0ZQb29sRGF0YQEIcG9vbEFkZHIJAJcKBQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFCHBvb2xBZGRyBQ9rU0ZQb29sQUFzc2V0SWQCGUNhbid0IGdldCBwb29sIEEgYXNzZXQgaWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQhwb29sQWRkcgUPa1NGUG9vbEJBc3NldElkAhlDYW4ndCBnZXQgcG9vbCBCIGFzc2V0IGlkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUIcG9vbEFkZHIFFGtTRlBvb2xBQXNzZXRCYWxhbmNlAh5DYW4ndCBnZXQgcG9vbCBBIGFzc2V0IGJhbGFuY2UJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQhwb29sQWRkcgUUa1NGUG9vbEJBc3NldEJhbGFuY2UCHkNhbid0IGdldCBwb29sIEIgYXNzZXQgYmFsYW5jZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFCHBvb2xBZGRyBQ5rU0ZQb29sU2hhcmVJZAIYQ2FuJ3QgZ2V0IHNoYXJlIGFzc2V0IGlkAQ1nZXRXWFBvb2xEYXRhAQhwb29sQWRkcgQDY2ZnCgABQAkA/AcEBQhwb29sQWRkcgIcZ2V0UG9vbENvbmZpZ1dyYXBwZXJSRUFET05MWQUDbmlsBQNuaWwDCQABAgUBQAIJTGlzdFtBbnldBQFACQACAQkArAICCQADAQUBQAIeIGNvdWxkbid0IGJlIGNhc3QgdG8gTGlzdFtBbnldAwkAAAIFA2NmZwUDY2ZnBANhSWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgoAAUAJAJEDAgUDY2ZnAAQDCQABAgUBQAIGU3RyaW5nBQFABQR1bml0AhlDYW4ndCBnZXQgcG9vbCBBIGFzc2V0IGlkBANiSWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgoAAUAJAJEDAgUDY2ZnAAUDCQABAgUBQAIGU3RyaW5nBQFABQR1bml0AhlDYW4ndCBnZXQgcG9vbCBCIGFzc2V0IGlkBAdzaGFyZUlkCQETdmFsdWVPckVycm9yTWVzc2FnZQIKAAFACQCRAwIFA2NmZwADAwkAAQIFAUACBlN0cmluZwUBQAUEdW5pdAIaQ2FuJ3QgZ2V0IHBvb2wgTFAgYXNzZXQgaWQEBGJhbEEKAAFACQD8BwQFCHBvb2xBZGRyAhxnZXRBY2NCYWxhbmNlV3JhcHBlclJFQURPTkxZCQDMCAIFA2FJZAUDbmlsBQNuaWwDCQABAgUBQAIDSW50BQFACQACAQkArAICCQADAQUBQAIYIGNvdWxkbid0IGJlIGNhc3QgdG8gSW50AwkAAAIFBGJhbEEFBGJhbEEEBGJhbEIKAAFACQD8BwQFCHBvb2xBZGRyAhxnZXRBY2NCYWxhbmNlV3JhcHBlclJFQURPTkxZCQDMCAIFA2JJZAUDbmlsBQNuaWwDCQABAgUBQAIDSW50BQFACQACAQkArAICCQADAQUBQAIYIGNvdWxkbid0IGJlIGNhc3QgdG8gSW50AwkAAAIFBGJhbEIFBGJhbEIJAJcKBQUDYUlkBQNiSWQFBGJhbEEFBGJhbEIFB3NoYXJlSWQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BC2dldFBvb2xEYXRhAghwb29sQWRkcgR0eXBlAwkAAAIFBHR5cGUFB1NGX1BPT0wJAQ1nZXRTRlBvb2xEYXRhAQUIcG9vbEFkZHIDCQAAAgUEdHlwZQUHV1hfUE9PTAkBDWdldFdYUG9vbERhdGEBBQhwb29sQWRkcgkAAgECD1dyb25nIHBvb2wgdHlwZQEOZ2V0U2hhcmVTdXBwbHkDCHBvb2xBZGRyBHR5cGUHc2hhcmVJZAMJAAACBQR0eXBlBQdTRl9QT09MCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUIcG9vbEFkZHIFEmtTRlBvb2xTaGFyZVN1cHBseQIcQ2FuJ3QgZ2V0IHNoYXJlIGFzc2V0IHN1cHBseQMJAAACBQR0eXBlBQdXWF9QT09MCAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDsBwEJANkEAQUHc2hhcmVJZAINV3JvbmcgU2hhcmVJZAhxdWFudGl0eQkAAgECD1dyb25nIHBvb2wgdHlwZQERZ2V0UG9vbFRvdGFsU2hhcmUBBHBvb2wJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICBQRwb29sBQprUG9vbFRvdGFsAAABGWdldFBvb2xUb3RhbFNoYXJlV2l0aExvYW4BBHBvb2wJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICBQRwb29sBQ5rUG9vbFRvdGFsTG9hbgAAARhnZXROZXdVc2VyUG9zaXRpb25OdW1iZXICBHBvb2wEdXNlcgkAZAIJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICBQR1c2VyBRBrVXNlclBvc2l0aW9uTnVtAAAAAQEKZ2V0QXhseUZlZQIEcG9vbAdmZWVUeXBlAwkAAAIFB2ZlZVR5cGUFDENBUF9GRUVfTE9BTgkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkArAICBQRwb29sBRNrQXhseVdpdGhMb2FuQ2FwRmVlAwkAAAIFB2ZlZVR5cGUFD0NBUF9GRUVfTk9fTE9BTgkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkArAICBQRwb29sBRFrQXhseU5vTG9hbkNhcEZlZQMJAAACBQdmZWVUeXBlBQhMT0FOX0ZFRQkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkArAICBQRwb29sBRJrQXhseUluRmVlV2l0aExvYW4DCQAAAgUHZmVlVHlwZQULTk9fTE9BTl9GRUUJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgUEcG9vbAUVa0F4bHlJbkZlZVdpdGhvdXRMb2FuAwkAAAIFB2ZlZVR5cGUFBk5PX0ZFRQAACQACAQIOV3JvbmcgZmVlIHR5cGUBEGdldFNGRmFybWluZ0FkZHIACQEHQWRkcmVzcwEJANkEAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMFDmtTRkZhcm1pbmdBZGRyAh1DYW4ndCBnZXQgc3dvcGZpIGZhcm1pbmcgYWRkcgEQZ2V0V1hGYXJtaW5nQWRkcgEIcG9vbEFkZHIECWZDb250cmFjdAkBB0FkZHJlc3MBCQDZBAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQhwb29sQWRkcgITJXNfX2ZhY3RvcnlDb250cmFjdAIiQ2FuJ3QgZ2V0IFdYIGZhY3RvcnkgY29udHJhY3QgYWRkcgQKZmFjdHJveUNmZwkAtQkCCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUJZkNvbnRyYWN0AhElc19fZmFjdG9yeUNvbmZpZwIYQ2FuJ3QgZ2V0IFdYIGZhY3RvcnkgY2ZnAgJfXwkBB0FkZHJlc3MBCQDZBAEJAJEDAgUKZmFjdHJveUNmZwABAQ5nZXRMZW5kU3J2QWRkcgAJAQdBZGRyZXNzAQkA2QQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwUMa0xlbmRTZXJ2aWNlAhtDYW4ndCBnZXQgbGVuZCBzZXJ2aWNlIGFkZHIBDGFzc2V0SWRUb1N0cgEHYXNzZXRJZAQHJG1hdGNoMAUHYXNzZXRJZAMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAJpZAUHJG1hdGNoMAkA2AQBBQJpZAMJAAECBQckbWF0Y2gwAgRVbml0BAV3YXZlcwUHJG1hdGNoMAIFV0FWRVMJAAIBAgtNYXRjaCBlcnJvcgEOYXNzZXRJZEZyb21TdHIBB2Fzc2V0SWQDCQAAAgUHYXNzZXRJZAIFV0FWRVMFBHVuaXQJANkEAQUHYXNzZXRJZAEQZ2V0QXNzZXREZWNpbWFscwEHYXNzZXRJZAMJAAACBQdhc3NldElkAgVXQVZFUwAIBAckbWF0Y2gwCQDsBwEJANkEAQUHYXNzZXRJZAMJAAECBQckbWF0Y2gwAgVBc3NldAQFYXNzZXQFByRtYXRjaDAIBQVhc3NldAhkZWNpbWFscwkAAgECEENhbid0IGZpbmQgYXNzZXQBEWdldEFzc2V0UHJlY2l0aW9uAQdhc3NldElkCQBsBgAKAAAJARBnZXRBc3NldERlY2ltYWxzAQUHYXNzZXRJZAAAAAAFBERPV04BDmdldEFzc2V0c1ByaWNlAQhhc3NldElkcwoBCWdldFByaWNlcwIBYQdhc3NldElkBAphc3NldFByaWNlCAoAAUAJAPwHBAUPcHJpY2VPcmFjbGVBZGRyAglnZXRUV0FQNjAJAMwIAgUHYXNzZXRJZAkAzAgCBwUDbmlsBQNuaWwDCQABAgUBQAIKKEludCwgSW50KQUBQAkAAgEJAKwCAgkAAwEFAUACHyBjb3VsZG4ndCBiZSBjYXN0IHRvIChJbnQsIEludCkCXzIJAM0IAgUBYQUKYXNzZXRQcmljZQoAAiRsBQhhc3NldElkcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEJZ2V0UHJpY2VzAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyA1MAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRm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IGNvdWxkbid0IGJlIGNhc3QgdG8gU3RyaW5nAgJfXwMJAAACBQskdDA5NjU0OTk1OQULJHQwOTY1NDk5NTkECmV2YWxQdXRJbkIIBQskdDA5NjU0OTk1OQJfMgQKZXZhbFB1dEluQQgFCyR0MDk2NTQ5OTU5Al8xBAwkdDA5OTY5MTAxNjUDCQAAAgUFcFR5cGUFB1NGX1BPT0wJAJQKAgkAawMFBlNDQUxFOAUEcG10QQUEYmFsQQkAawMFBlNDQUxFOAUEcG10QgUEYmFsQgkAlAoCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKZXZhbFB1dEluQQABCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKZXZhbFB1dEluQgABBAZyYXRpb0EIBQwkdDA5OTY5MTAxNjUCXzEEBnJhdGlvQggFDCR0MDk5NjkxMDE2NQJfMgQNJHQwMTAxNzExMDY1MwMJAGYCBQZyYXRpb0IFBnJhdGlvQQQDcG10AwkAAAIFBXBUeXBlBQdTRl9QT09MCQBuBAUEYmFsQgUGcmF0aW9BBQZTQ0FMRTgFB0NFSUxJTkcJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQpldmFsUHV0SW5BAAgJAJcKBQUEcG10QQUDcG10CQBlAgUEcG10QgUDcG10BQNiSWQFBnJhdGlvQgQDcG10AwkAAAIFBXBUeXBlBQdTRl9QT09MCQBuBAUEYmFsQQUGcmF0aW9CBQZTQ0FMRTgFB0NFSUxJTkcJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQpldmFsUHV0SW5CAAcJAJcKBQUDcG10BQRwbXRCCQBlAgUEcG10QQUDcG10BQNhSWQFBnJhdGlvQQQGcG10SW5BCAUNJHQwMTAxNzExMDY1MwJfMQQGcG10SW5CCAUNJHQwMTAxNzExMDY1MwJfMgQGY2hhbmdlCAUNJHQwMTAxNzExMDY1MwJfMwQNY2hhbmdlQXNzZXRJZAgFDSR0MDEwMTcxMTA2NTMCXzQEAmxwCAUNJHQwMTAxNzExMDY1MwJfNQkAlwoFBQZwbXRJbkEFBnBtdEluQgUGY2hhbmdlBQ1jaGFuZ2VBc3NldElkBQJscAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgEYcmVwbGVuaXNoVHdvVG9rZW5zQnlUeXBlBghwb29sQWRkcgVwVHlwZQRwbXRBA2FJZARwbXRCA2JJZAQIcGF5bWVudHMJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQ5hc3NldElkRnJvbVN0cgEFA2FJZAUEcG10QQkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBDmFzc2V0SWRGcm9tU3RyAQUDYklkBQRwbXRCBQNuaWwDCQAAAgUFcFR5cGUFB1NGX1BPT0wJAPwHBAUIcG9vbEFkZHICDGNhbGxGdW5jdGlvbgkAzAgCAhZyZXBsZW5pc2hXaXRoVHdvVG9rZW5zCQDMCAIJAMwIAgIFZmFsc2UJAMwIAgIBMAUDbmlsBQNuaWwFCHBheW1lbnRzCQD8BwQFCHBvb2xBZGRyAgNwdXQJAMwIAgDAhD0JAMwIAgcFA25pbAUIcGF5bWVudHMBF3JlcGxlbmlzaE9uZVRva2VuQnlUeXBlBAhwb29sQWRkcgVwVHlwZQNwbXQFcG10SWQECHBheW1lbnRzCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQEOYXNzZXRJZEZyb21TdHIBBQVwbXRJZAUDcG10BQNuaWwDCQAAAgUFcFR5cGUFB1NGX1BPT0wJAPwHBAUIcG9vbEFkZHICDGNhbGxGdW5jdGlvbgkAzAgCAhVyZXBsZW5pc2hXaXRoT25lVG9rZW4JAMwIAgkAzAgCAgEwCQDMCAICBWZhbHNlCQDMCAICATAFA25pbAUDbmlsBQhwYXltZW50cwkA/AcEBQhwb29sQWRkcgIJcHV0T25lVGtuCQDMCAIAAAkAzAgCBwUDbmlsBQhwYXltZW50cwEHc3Rha2VMUAQEcG9vbAVwVHlwZQdzaGFyZUlkBmFtb3VudAQIcGF5bWVudHMJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJANkEAQUHc2hhcmVJZAUGYW1vdW50BQNuaWwDCQAAAgUFcFR5cGUFB1NGX1BPT0wJAPwHBAkBEGdldFNGRmFybWluZ0FkZHIAAg9sb2NrU2hhcmVUb2tlbnMJAMwIAgUEcG9vbAkAzAgCAAAFA25pbAUIcGF5bWVudHMJAPwHBAkBEGdldFdYRmFybWluZ0FkZHIBCQERQGV4dHJOYXRpdmUoMTA2MikBBQRwb29sAgVzdGFrZQUDbmlsBQhwYXltZW50cwEJdW5zdGFrZUxQBARwb29sBXBUeXBlB3NoYXJlSWQGYW1vdW50BA0kdDAxMTg4MzEyMjQwAwkAAAIFBXBUeXBlBQdTRl9QT09MCQCVCgMJARBnZXRTRkZhcm1pbmdBZGRyAAITd2l0aGRyYXdTaGFyZVRva2VucwkAzAgCBQRwb29sCQDMCAIFBmFtb3VudAUDbmlsAwkAAAIFBXBUeXBlBQdXWF9QT09MCQCVCgMJARBnZXRXWEZhcm1pbmdBZGRyAQkBB0FkZHJlc3MBCQDZBAEFBHBvb2wCB3Vuc3Rha2UJAMwIAgUHc2hhcmVJZAkAzAgCBQZhbW91bnQFA25pbAkAAgECD1dyb25nIHBvb2wgdHlwZQQIZmFybUFkZHIIBQ0kdDAxMTg4MzEyMjQwAl8xBAVmTmFtZQgFDSR0MDExODgzMTIyNDACXzIEBnBhcmFtcwgFDSR0MDExODgzMTIyNDACXzMEA2ludgkA/AcEBQhmYXJtQWRkcgUFZk5hbWUFBnBhcmFtcwUDbmlsAwkAAAIFA2ludgUDaW52BQZhbW91bnQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BEWNhbGNBbW91bnRUb1BheVNGBwRwb29sCGFzc2V0SWRBCGFzc2V0SWRCBGJhbEEEYmFsQhBhbW91bnRUb2tlblRvR2V0D2Fzc2V0VG9rZW5Ub0dldAQIcG9vbEFkZHIJAQdBZGRyZXNzAQkA2QQBBQRwb29sBAlmZWVTY2FsZTYAwIQ9BANmZWUJARFAZXh0ck5hdGl2ZSgxMDUwKQIFCHBvb2xBZGRyBQprU0ZQb29sRmVlBAxhbW50R2V0Tm9GZWUJAGsDBRBhbW91bnRUb2tlblRvR2V0BQlmZWVTY2FsZTYJAGUCBQlmZWVTY2FsZTYFA2ZlZQQNJHQwMTI2NTMxMjk0MQMJAAACBQ9hc3NldFRva2VuVG9HZXQFCGFzc2V0SWRBBAthbW91bnRUb1BheQkAawMFBGJhbEEFDGFtbnRHZXROb0ZlZQkAZQIFBGJhbEIFDGFtbnRHZXROb0ZlZQkAlAoCBQthbW91bnRUb1BheQUIYXNzZXRJZEIEC2Ftb3VudFRvUGF5CQBrAwUEYmFsQgUMYW1udEdldE5vRmVlCQBlAgUEYmFsQQUMYW1udEdldE5vRmVlCQCUCgIFC2Ftb3VudFRvUGF5BQhhc3NldElkQQQLYW1vdW50VG9QYXkIBQ0kdDAxMjY1MzEyOTQxAl8xBAphc3NldFRvUGF5CAUNJHQwMTI2NTMxMjk0MQJfMgkAlAoCBQphc3NldFRvUGF5BQthbW91bnRUb1BheQERY2FsY0Ftb3VudFRvUGF5V1gHBHBvb2wIYXNzZXRJZEEIYXNzZXRJZEIEYmFsQQRiYWxCEGFtb3VudFRva2VuVG9HZXQPYXNzZXRUb2tlblRvR2V0BAVwckZlZQkBEUBleHRyTmF0aXZlKDEwNTApAgUOd3hTd2FwQ29udHJhY3QCDyVzX19wcm90b2NvbEZlZQQEcEZlZQkBEUBleHRyTmF0aXZlKDEwNTApAgUOd3hTd2FwQ29udHJhY3QCCyVzX19wb29sRmVlBAhmZWVTY2FsZQkAtgIBAIDC1y8EDSR0MDEzMjgwMTM1ODgDCQAAAgUPYXNzZXRUb2tlblRvR2V0BQhhc3NldElkQQQLYW1vdW50VG9QYXkJAGsDBQRiYWxBBRBhbW91bnRUb2tlblRvR2V0CQBlAgUEYmFsQgUQYW1vdW50VG9rZW5Ub0dldAkAlAoCBQthbW91bnRUb1BheQUIYXNzZXRJZEIEC2Ftb3VudFRvUGF5CQBrAwUEYmFsQgUQYW1vdW50VG9rZW5Ub0dldAkAZQIFBGJhbEEFEGFtb3VudFRva2VuVG9HZXQJAJQKAgULYW1vdW50VG9QYXkFCGFzc2V0SWRBBAthbW91bnRUb1BheQgFDSR0MDEzMjgwMTM1ODgCXzEECmFzc2V0VG9QYXkIBQ0kdDAxMzI4MDEzNTg4Al8yBBJhbW91bnRUb1BheVdpdGhGZWUJAKADAQkAvAIDCQC2AgEFC2Ftb3VudFRvUGF5BQhmZWVTY2FsZQkAuAICBQhmZWVTY2FsZQkAtgIBCQBkAgUFcHJGZWUFBHBGZWUJAJQKAgUKYXNzZXRUb1BheQUSYW1vdW50VG9QYXlXaXRoRmVlARBleGNoYW5nZURpcmVjdGx5CAR0eXBlBHBvb2wIYXNzZXRJZEEIYXNzZXRJZEIEYmFsQQRiYWxCEGFtb3VudFRva2VuVG9HZXQPYXNzZXRUb2tlblRvR2V0AwkAAAIFBHR5cGUFB1NGX1BPT0wEDSR0MDEzOTI2MTQwNDgJARFjYWxjQW1vdW50VG9QYXlTRgcFBHBvb2wFCGFzc2V0SWRBBQhhc3NldElkQgUEYmFsQQUEYmFsQgUQYW1vdW50VG9rZW5Ub0dldAUPYXNzZXRUb2tlblRvR2V0BAphc3NldFRvUGF5CAUNJHQwMTM5MjYxNDA0OAJfMQQLYW1vdW50VG9QYXkIBQ0kdDAxMzkyNjE0MDQ4Al8yCQD8BwQJARFAZXh0ck5hdGl2ZSgxMDYyKQEFBHBvb2wCDGNhbGxGdW5jdGlvbgkAzAgCAghleGNoYW5nZQkAzAgCCQDMCAICATEFA25pbAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQEOYXNzZXRJZEZyb21TdHIBBQphc3NldFRvUGF5BQthbW91bnRUb1BheQUDbmlsBA0kdDAxNDE5OTE0MzIxCQERY2FsY0Ftb3VudFRvUGF5V1gHBQRwb29sBQhhc3NldElkQQUIYXNzZXRJZEIFBGJhbEEFBGJhbEIFEGFtb3VudFRva2VuVG9HZXQFD2Fzc2V0VG9rZW5Ub0dldAQKYXNzZXRUb1BheQgFDSR0MDE0MTk5MTQzMjECXzEEC2Ftb3VudFRvUGF5CAUNJHQwMTQxOTkxNDMyMQJfMgkA/AcEBQ53eFN3YXBDb250cmFjdAIEc3dhcAkAzAgCAAEJAMwIAgUPYXNzZXRUb2tlblRvR2V0CQDMCAIJAKUIAQUEdGhpcwUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQEOYXNzZXRJZEZyb21TdHIBBQphc3NldFRvUGF5BQthbW91bnRUb1BheQUDbmlsARNjYWxjUmVwbGVuaXNoTFBWaXJ0CAVwVHlwZQRwb29sBHBtdEEDYUlkBHBtdEIDYklkBGJhbEEEYmFsQgQIcG9vbEFkZHIJARFAZXh0ck5hdGl2ZSgxMDYyKQEFBHBvb2wDCQAAAgUFcFR5cGUFB1NGX1BPT0wEA2ludgoAAUAJAPwHBAUIcG9vbEFkZHICDGNhbGxGdW5jdGlvbgkAzAgCAh9jYWxjTFBSZXBsZW5pc2hEaWZmUHJvcFJFQURPTkxZCQDMCAIJAMwIAgkApAMBBQRwbXRBCQDMCAIJAKQDAQUEcG10QgkAzAgCAgEw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dWFsIHRvIGl0c2VsZi4JAAIBAg9Xcm9uZyBwb29sIHR5cGUECmdldEFtb3VudEEIBQ0kdDAxNTcxMzE2MTc5Al8xBApnZXRBbW91bnRCCAUNJHQwMTU3MTMxNjE3OQJfMgMJAGYCBQxib3Jyb3dBbW91bnQAAAQNYW1vdW50VG9HZXRFeAMDCQAAAgUNYm9ycm93QXNzZXRJZAUDYUlkCQBmAgUMYm9ycm93QW1vdW50BQpnZXRBbW91bnRBBwkAZQIFDGJvcnJvd0Ftb3VudAUKZ2V0QW1vdW50QQMDCQAAAgUNYm9ycm93QXNzZXRJZAUDYklkCQBmAgUMYm9ycm93QW1vdW50BQpnZXRBbW91bnRCBwkAZQIFDGJvcnJvd0Ftb3VudAUKZ2V0QW1vdW50QgAABA0kdDAxNjQ4MjE2Nzk3AwkAZgIFDWFtb3VudFRvR2V0RXgAAAMJAAACBQVwVHlwZQUHU0ZfUE9PTAkBEWNhbGNBbW91bnRUb1BheVNGBwUEcG9vbAUDYUlkBQNiSWQFBGJhbEEFBGJhbEIFDWFtb3VudFRvR2V0RXgFDWJvcnJvd0Fzc2V0SWQJARFjYWxjQW1vdW50VG9QYXlXWAcFBHBvb2wFA2FJZAUDYklkBQRiYWxBBQRiYWxCBQ1hbW91bnRUb0dldEV4BQ1ib3Jyb3dBc3NldElkCQCUCgICAAAABAphc3NldFRvUGF5CAUNJHQwMTY0ODIxNjc5NwJfMQQLYW1vdW50VG9QYXkIBQ0kdDAxNjQ4MjE2Nzk3Al8yAwkAAAIFDWJvcnJvd0Fzc2V0SWQFA2FJZAkAlAoCCQBlAgkAZAIFCmdldEFtb3VudEEFDWFtb3VudFRvR2V0RXgFDGJvcnJvd0Ftb3VudAkAZQIFCmdldEFtb3VudEIFC2Ftb3VudFRvUGF5CQCUCgIJAGUCBQpnZXRBbW91bnRBBQthbW91bnRUb1BheQkAZQIJAGQCBQpnZXRBbW91bnRCBQ1hbW91bnRUb0dldEV4BQxib3Jyb3dBbW91bnQJAJQKAgUKZ2V0QW1vdW50QQUKZ2V0QW1vdW50QgELY2xhaW1GYXJtZWQCBHR5cGUEcG9vbAMJAAACBQR0eXBlBQdTRl9QT09MBAliYWxCZWZvcmUJAQ5hY2NvdW50QmFsYW5jZQEFBlNXT1BJRAMJAAACBQliYWxCZWZvcmUFCWJhbEJlZm9yZQQDaW52CQD8BwQJARBnZXRTRkZhcm1pbmdBZGRyAAIFY2xhaW0JAMwIAgUEcG9vbAUDbmlsBQNuaWwDCQAAAgUDaW52BQNpbnYECGJhbEFmdGVyCQEOYWNjb3VudEJhbGFuY2UBBQZTV09QSUQJAJQKAgkAZQIFCGJhbEFmdGVyBQliYWxCZWZvcmUFBlNXT1BJRAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgMJAAACBQR0eXBlBQdXWF9QT09MBAliYWxCZWZvcmUJAQ5hY2NvdW50QmFsYW5jZQEFBFdYSUQDCQAAAgUJYmFsQmVmb3JlBQliYWxCZWZvcmUEA2ludgkA/AcECQEQZ2V0V1hGYXJtaW5nQWRkcgEJAQdBZGRyZXNzAQkA2QQBBQRwb29sAgdjbGFpbVdYCQDMCAIFBHBvb2wFA25pbAUDbmlsAwkAAAIFA2ludgUDaW52BAhiYWxBZnRlcgkBDmFjY291bnRCYWxhbmNlAQUEV1hJRAkAlAoCCQBlAgUIYmFsQWZ0ZXIFCWJhbEJlZm9yZQUEV1hJRAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECD1dyb25nIHBvb2wgdHlwZQEPcmVwbGVuaXNoQnlUeXBlCgVwVHlwZQRwb29sB2ZlZVR5cGUEcG10QQNhSWQEcG10QgNiSWQEYmFsQQRiYWxCBExQSWQED2xwQmFsYW5jZUJlZm9yZQkBDmFjY291bnRCYWxhbmNlAQkA2QQBBQRMUElkAwkAAAIFD2xwQmFsYW5jZUJlZm9yZQUPbHBCYWxhbmNlQmVmb3JlBAhwb29sQWRkcgkBEUBleHRyTmF0aXZlKDEwNjIpAQUEcG9vbAQNJHQwMTgwMDYxODQyMgMDCQBmAgUEcG10QQAACQBmAgUEcG10QgAABwQNJHQwMTgwNzIxODE4OAkBGGNhbGNSZXBsZW5pc2hCeVR3b1Rva2VucwgFBXBUeXBlBQhwb29sQWRkcgUEcG10QQUDYUlkBQRwbXRCBQNiSWQFBGJhbEEFBGJhbEIEBnBtdEluQQgFDSR0MDE4MDcyMTgxODgCXzEEBnBtdEluQggFDSR0MDE4MDcyMTgxODgCXzIEBmNoYW5nZQgFDSR0MDE4MDcyMTgxODgCXzMECGNoYW5nZUlkCAUNJHQwMTgwNzIxODE4OAJfNAQDaW52CQEYcmVwbGVuaXNoVHdvVG9rZW5zQnlUeXBlBgUIcG9vbEFkZHIFBXBUeXBlBQZwbXRJbkEFA2FJZAUGcG10SW5CBQNiSWQDCQAAAgUDaW52BQNpbnYJAJQKAgUGY2hhbmdlBQhjaGFuZ2VJZAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgMJAGYCBQRwbXRBAAAJAJQKAgUEcG10QQUDYUlkAwkAZgIFBHBtdEIAAAkAlAoCBQRwbXRCBQNiSWQJAAIBAhBwbXRzIG11c3QgYmUgPiAwBAZjaGFuZ2UIBQ0kdDAxODAwNjE4NDIyAl8xBAhjaGFuZ2VJZAgFDSR0MDE4MDA2MTg0MjICXzIEA2ludgMJAGYCBQZjaGFuZ2UAAAkBF3JlcGxlbmlzaE9uZVRva2VuQnlUeXBlBAUIcG9vbEFkZHIFBXBUeXBlBQZjaGFuZ2UFCGNoYW5nZUlkBQNuaWwDCQAAAgUDaW52BQNpbnYEDmxwQmFsYW5jZUFmdGVyCQEOYWNjb3VudEJhbGFuY2UBCQDZBAEFBExQSWQEC3RvdGFsU3Rha2VkCQBlAgUObHBCYWxhbmNlQWZ0ZXIFD2xwQmFsYW5jZUJlZm9yZQQNYXhseUZlZUFtb3VudAkAawMFC3RvdGFsU3Rha2VkCQEKZ2V0QXhseUZlZQIFBHBvb2wFB2ZlZVR5cGUFCkZFRV9TQ0FMRTYEEXVzZXJTaGFyZUZvclN0YWtlCQBlAgULdG90YWxTdGFrZWQFDWF4bHlGZWVBbW91bnQDCQBnAgAABRF1c2VyU2hhcmVGb3JTdGFrZQkAAgECKGFtb3VudCBvZiBzdGFrZWQgc2hhcmV0b2tlbnMgbXVzdCBiZSA+IDAEBWludkxQCQEHc3Rha2VMUAQFBHBvb2wFBXBUeXBlBQRMUElkBRF1c2VyU2hhcmVGb3JTdGFrZQMJAAACBQVpbnZMUAUFaW52TFAJAJQKAgURdXNlclNoYXJlRm9yU3Rha2UFDWF4bHlGZWVBbW91bnQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BEHJlcGxlbmlzaEVudHJpZXMIBHBvb2wEdXNlcgxzdGFrZWRBbW91bnQNYXhseUZlZUFtb3VudAZwb3NOdW0Hc2hhcmVJZAR0eXBlCHdpdGhMb2FuBAt0b3RhbEFtb3VudAkBEWdldFBvb2xUb3RhbFNoYXJlAQUEcG9vbAQPdG90YWxBbW91bnRMb2FuCQEZZ2V0UG9vbFRvdGFsU2hhcmVXaXRoTG9hbgEFBHBvb2wEDSR0MDE5MjgwMTk1MTgDBQh3aXRoTG9hbgkAlAoCCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQCsAgIFBHBvb2wFEWtQb29sSW50ZXJlc3RMb2FuCQBkAgUPdG90YWxBbW91bnRMb2FuBQxzdGFrZWRBbW91bnQJAJQKAgkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkArAICBQRwb29sBRNrUG9vbEludGVyZXN0Tm9Mb2FuBQ90b3RhbEFtb3VudExvYW4ED2N1clBvb2xJbnRlcmVzdAgFDSR0MDE5MjgwMTk1MTgCXzEEE3RvdGFsU3Rha2VkV2l0aExvYW4IBQ0kdDAxOTI4MDE5NTE4Al8yCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHBvb2wFCmtQb29sVG90YWwJAGQCBQt0b3RhbEFtb3VudAUMc3Rha2VkQW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHBvb2wFDmtQb29sVG90YWxMb2FuBRN0b3RhbFN0YWtlZFdpdGhMb2FuCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgIBXwkApAMBBQZwb3NOdW0FDWtVc2VyUG9zaXRpb24FDHN0YWtlZEFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXICAV8JAKQDAQUGcG9zTnVtBRVrVXNlclBvc2l0aW9uSW50ZXJlc3QFD2N1clBvb2xJbnRlcmVzdAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICBQR1c2VyAgFfCQCkAwEFBnBvc051bQURa1VzZXJQb3NpdGlvblBvb2wFBHBvb2wJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEdXNlcgUQa1VzZXJQb3NpdGlvbk51bQUGcG9zTnVtCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFCG1vbmV5Qm94BQ1heGx5RmVlQW1vdW50CQDZBAEFB3NoYXJlSWQFA25pbAEOZXhjaGFuZ2VLZWVwZXIKB3RvVG9rZW4JcG10QW1vdW50CHBtdEFzc2V0CWFtb3VudHNJbglhZGRyZXNzZXMPYXNzZXRzVG9SZWNlaXZlC2VzdFJlY2VpdmVkEXNsaXBwYWdlVG9sZXJhbmNlC21pblJlY2VpdmVkB29wdGlvbnMEEnRva2VuQmFsYW5jZUJlZm9yZQkBDmFjY291bnRCYWxhbmNlAQkBDmFzc2V0SWRGcm9tU3RyAQUHdG9Ub2tlbgMJAAACBRJ0b2tlbkJhbGFuY2VCZWZvcmUFEnRva2VuQmFsYW5jZUJlZm9yZQQDaW52CQD8BwQFCmV4Q29udHJhY3QCBHN3YXAJAMwIAgUJYW1vdW50c0luCQDMCAIFCWFkZHJlc3NlcwkAzAgCBQ9hc3NldHNUb1JlY2VpdmUJAMwIAgULZXN0UmVjZWl2ZWQJAMwIAgURc2xpcHBhZ2VUb2xlcmFuY2UJAMwIAgULbWluUmVjZWl2ZWQJAMwIAgUHb3B0aW9ucwUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQhwbXRBc3NldAUJcG10QW1vdW50BQNuaWwDCQAAAgUDaW52BQNpbnYJAGUCCQEOYWNjb3VudEJhbGFuY2UBCQEOYXNzZXRJZEZyb21TdHIBBQd0b1Rva2VuBRJ0b2tlbkJhbGFuY2VCZWZvcmUJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BDmV4Y2hhbmdlUHV6emxlBgd0b1Rva2VuCXBtdEFtb3VudAhwbXRBc3NldAlyb3V0ZXNTdHIMbWluVG9SZWNlaXZlB29wdGlvbnMEEnRva2VuQmFsYW5jZUJlZm9yZQkBDmFjY291bnRCYWxhbmNlAQkBDmFzc2V0SWRGcm9tU3RyAQUHdG9Ub2tlbgMJAAACBRJ0b2tlbkJhbGFuY2VCZWZvcmUFEnRva2VuQmFsYW5jZUJlZm9yZQQDaW52CQD8BwQFCmV4Q29udHJhY3QCCnB1enpsZVN3YXAJAMwIAgUJcm91dGVzU3RyCQDMCAIFDG1pblRvUmVjZWl2ZQkAzAgCBQdvcHRpb25zBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFCHBtdEFzc2V0BQlwbXRBbW91bnQFA25pbAMJAAACBQNpbnYFA2ludgkAZQIJAQ5hY2NvdW50QmFsYW5jZQEJAQ5hc3NldElkRnJvbVN0cgEFB3RvVG9rZW4FEnRva2VuQmFsYW5jZUJlZm9yZQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgEOZXhjaGFuZ2VTd29wRmkKB3RvVG9rZW4JcG10QW1vdW50CHBtdEFzc2V0CmV4Y2hhbmdlcnMOZXhjaGFuZ2Vyc1R5cGUFYXJnczEFYXJnczIRcm91dGluZ0Fzc2V0c0tleXMSbWluQW1vdW50VG9SZWNlaXZlB29wdGlvbnMEEnRva2VuQmFsYW5jZUJlZm9yZQkBDmFjY291bnRCYWxhbmNlAQkBDmFzc2V0SWRGcm9tU3RyAQUHdG9Ub2tlbgMJAAACBRJ0b2tlbkJhbGFuY2VCZWZvcmUFEnRva2VuQmFsYW5jZUJlZm9yZQQDaW52CQD8BwQFCmV4Q29udHJhY3QCCnN3b3BmaVN3YXAJAMwIAgUKZXhjaGFuZ2VycwkAzAgCBQ5leGNoYW5nZXJzVHlwZQkAzAgCBQVhcmdzMQkAzAgCBQVhcmdzMgkAzAgCBRFyb3V0aW5nQXNzZXRzS2V5cwkAzAgCBRJtaW5BbW91bnRUb1JlY2VpdmUJAMwIAgUHb3B0aW9ucwUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQhwbXRBc3NldAUJcG10QW1vdW50BQNuaWwDCQAAAgUDaW52BQNpbnYJAGUCCQEOYWNjb3VudEJhbGFuY2UBCQEOYXNzZXRJZEZyb21TdHIBBQd0b1Rva2VuBRJ0b2tlbkJhbGFuY2VCZWZvcmUJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BCmNhcGl0YWxpemUEBHBvb2wFcFR5cGUHdG9rZW5JZAt0b2tlbkFtb3VudAQIcG9vbEFkZHIJAQdBZGRyZXNzAQkA2QQBBQRwb29sBA0kdDAyMTg2OTIxOTM1CQELZ2V0UG9vbERhdGECBQhwb29sQWRkcgUFcFR5cGUEA0FJZAgFDSR0MDIxODY5MjE5MzUCXzEEA0JJZAgFDSR0MDIxODY5MjE5MzUCXzIEBGJhbEEIBQ0kdDAyMTg2OTIxOTM1Al8zBARiYWxCCAUNJHQwMjE4NjkyMTkzNQJfNAQHc2hhcmVJZAgFDSR0MDIxODY5MjE5MzUCXzUDAwkBAiE9AgUHdG9rZW5JZAUDQUlkCQECIT0CBQd0b2tlbklkBQNCSWQHCQACAQILV3JvbmcgYXNzZXQEDSR0MDIyMDIwMjIxMDADCQAAAgUHdG9rZW5JZAUDQUlkCQCUCgIFC3Rva2VuQW1vdW50AAAJAJQKAgAABQt0b2tlbkFtb3VudAQEcG10QQgFDSR0MDIyMDIwMjIxMDACXzEEBHBtdEIIBQ0kdDAyMjAyMDIyMTAwAl8yBA0kdDAyMjEwMzIyMjA3CQEPcmVwbGVuaXNoQnlUeXBlCgUFcFR5cGUFBHBvb2wFBk5PX0ZFRQUEcG10QQUDQUlkBQRwbXRCBQNCSWQFBGJhbEEFBGJhbEIFB3NoYXJlSWQEDHN0YWtlZEFtb3VudAgFDSR0MDIyMTAzMjIyMDcCXzEEAm5mCAUNJHQwMjIxMDMyMjIwNwJfMgQTY3VyUG9vbEludGVyZXN0TG9hbgkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIFBHBvb2wFEWtQb29sSW50ZXJlc3RMb2FuAAAEFWN1clBvb2xJbnRlcmVzdE5vTG9hbgkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIFBHBvb2wFE2tQb29sSW50ZXJlc3ROb0xvYW4AAAQQdG90YWxTaGFyZUFtb3VudAkBEWdldFBvb2xUb3RhbFNoYXJlAQUEcG9vbAQYdG90YWxTaGFyZUFtb3VudFdpdGhMb2FuCQEZZ2V0UG9vbFRvdGFsU2hhcmVXaXRoTG9hbgEFBHBvb2wEC2xvYW5QZXJjZW50CQBrAwUYdG90YWxTaGFyZUFtb3VudFdpdGhMb2FuBQZTQ0FMRTgFEHRvdGFsU2hhcmVBbW91bnQECnN0YWtlZExvYW4JAGsDBQxzdGFrZWRBbW91bnQFC2xvYW5QZXJjZW50BQZTQ0FMRTgEDHN0YWtlZE5vTG9hbgkAZQIFDHN0YWtlZEFtb3VudAUKc3Rha2VkTG9hbgQPbmV3SW50ZXJlc3RMb2FuAwkAZgIFGHRvdGFsU2hhcmVBbW91bnRXaXRoTG9hbgAACQBkAgUTY3VyUG9vbEludGVyZXN0TG9hbgkAawMFCnN0YWtlZExvYW4FB1NDQUxFMTAFGHRvdGFsU2hhcmVBbW91bnRXaXRoTG9hbgAABBFuZXdJbnRlcmVzdE5vTG9hbgMJAGYCCQBlAgUQdG90YWxTaGFyZUFtb3VudAUYdG90YWxTaGFyZUFtb3VudFdpdGhMb2FuAAAJAGQCBRVjdXJQb29sSW50ZXJlc3ROb0xvYW4JAGsDBQxzdGFrZWROb0xvYW4FB1NDQUxFMTAJAGUCBRB0b3RhbFNoYXJlQW1vdW50BRh0b3RhbFNoYXJlQW1vdW50V2l0aExvYW4AAAQLYXhseUZlZUxvYW4JAGsDBQpzdGFrZWRMb2FuCQEKZ2V0QXhseUZlZQIFBHBvb2wFDENBUF9GRUVfTE9BTgUKRkVFX1NDQUxFNgQNYXhseUZlZU5vTG9hbgkAawMFDHN0YWtlZE5vTG9hbgkBCmdldEF4bHlGZWUCBQRwb29sBQ9DQVBfRkVFX05PX0xPQU4FCkZFRV9TQ0FMRTYEB2F4bHlGZWUJAQl1bnN0YWtlTFAEBQRwb29sBQVwVHlwZQUHc2hhcmVJZAkAZAIFC2F4bHlGZWVMb2FuBQ1heGx5RmVlTm9Mb2FuAwkAAAIFB2F4bHlGZWUFB2F4bHlGZWUJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBRFrUG9vbEludGVyZXN0TG9hbgUPbmV3SW50ZXJlc3RMb2FuCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHBvb2wFE2tQb29sSW50ZXJlc3ROb0xvYW4FEW5ld0ludGVyZXN0Tm9Mb2FuCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHBvb2wFCmtQb29sVG90YWwJAGUCCQBkAgUQdG90YWxTaGFyZUFtb3VudAUMc3Rha2VkQW1vdW50BQdheGx5RmVlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHBvb2wFDmtQb29sVG90YWxMb2FuCQBlAgkAZAIFGHRvdGFsU2hhcmVBbW91bnRXaXRoTG9hbgUKc3Rha2VkTG9hbgULYXhseUZlZUxvYW4JAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUIbW9uZXlCb3gJAGQCBQtheGx5RmVlTG9hbgUNYXhseUZlZU5vTG9hbgkA2QQBBQdzaGFyZUlkBQNuaWwJAQ5nZXRDdXJzRW50cmllcwMFA0FJZAUDQklkBQdzaGFyZUlkCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuARJ3aXRoZHJhd0Ftb3VudENhbGMEBHBvb2wPdXNlckNhbldpdGhkcmF3BGRlYnQLYm9ycm93QXNzZXQECHBvb2xBZGRyCQEHQWRkcmVzcwEJANkEAQUEcG9vbAQFcFR5cGUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzCQCsAgIFBWtQb29sBQRwb29sAgxVbmtub3duIHBvb2wEDSR0MDIzOTc1MjQwNTEJAQtnZXRQb29sRGF0YQIFCHBvb2xBZGRyBQVwVHlwZQQIYXNzZXRJZEEIBQ0kdDAyMzk3NTI0MDUxAl8xBAhhc3NldElkQggFDSR0MDIzOTc1MjQwNTECXzIEBGJhbEEIBQ0kdDAyMzk3NTI0MDUxAl8zBARiYWxCCAUNJHQwMjM5NzUyNDA1MQJfNAQHc2hhcmVJZAgFDSR0MDIzOTc1MjQwNTECXzUEC2NCYWxBQmVmb3JlCQEOYWNjb3VudEJhbGFuY2UBCQEOYXNzZXRJZEZyb21TdHIBBQhhc3NldElkQQMJAAACBQtjQmFsQUJlZm9yZQULY0JhbEFCZWZvcmUEC2NCYWxCQmVmb3JlCQEOYWNjb3VudEJhbGFuY2UBCQEOYXNzZXRJZEZyb21TdHIBBQhhc3NldElkQgMJAAACBQtjQmFsQkJlZm9yZQULY0JhbEJCZWZvcmUEA2ludgMJAAACBQVwVHlwZQUHU0ZfUE9PTAkA/AcEBQhwb29sQWRkcgIMY2FsbEZ1bmN0aW9uCQDMCAICCHdpdGhkcmF3CQDMCAIJAMwIAgkApAMBBQ91c2VyQ2FuV2l0aGRyYXcFA25pbAUDbmlsBQNuaWwEA2ludgkBCXVuc3Rha2VMUAQFBHBvb2wFBXBUeXBlBQdzaGFyZUlkBQ91c2VyQ2FuV2l0aGRyYXcDCQAAAgUDaW52BQNpbnYJAPwHBAUIcG9vbEFkZHICA2dldAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQEOYXNzZXRJZEZyb21TdHIBBQdzaGFyZUlkBQ91c2VyQ2FuV2l0aGRyYXcFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgMJAAACBQNpbnYFA2ludgQKY0JhbEFBZnRlcgkBDmFjY291bnRCYWxhbmNlAQkBDmFzc2V0SWRGcm9tU3RyAQUIYXNzZXRJZEEECmNCYWxCQWZ0ZXIJAQ5hY2NvdW50QmFsYW5jZQEJAQ5hc3NldElkRnJvbVN0cgEFCGFzc2V0SWRCBA0kdDAyNDYxNDI0NzAzCQCUCgIJAGUCBQpjQmFsQUFmdGVyBQtjQmFsQUJlZm9yZQkAZQIFCmNCYWxCQWZ0ZXIFC2NCYWxCQmVmb3JlBA10b2tlbnNBbW91bnRBCAUNJHQwMjQ2MTQyNDcwMwJfMQQNdG9rZW5zQW1vdW50QggFDSR0MDI0NjE0MjQ3MDMCXzIEDSR0MDI0NzA2MjU0MDIDCQBmAgUEZGVidAAABA1hbW91bnRUb0dldEV4AwMJAAACBQtib3Jyb3dBc3NldAUIYXNzZXRJZEEJAGYCBQRkZWJ0BQ10b2tlbnNBbW91bnRBBwkAZQIFBGRlYnQFDXRva2Vuc0Ftb3VudEEDAwkAAAIFC2JvcnJvd0Fzc2V0BQhhc3NldElkQgkAZgIFBGRlYnQFDXRva2Vuc0Ftb3VudEIHCQBlAgUEZGVidAUNdG9rZW5zQW1vdW50QgAABAVleEludgMJAGYCBQ1hbW91bnRUb0dldEV4AAAJARBleGNoYW5nZURpcmVjdGx5CAUFcFR5cGUFBHBvb2wFCGFzc2V0SWRBBQhhc3NldElkQgUEYmFsQQUEYmFsQgUNYW1vdW50VG9HZXRFeAULYm9ycm93QXNzZXQAAAMJAAACBQVleEludgUFZXhJbnYED2NCYWxBQWZ0ZXJSZXBheQkBDmFjY291bnRCYWxhbmNlAQkBDmFzc2V0SWRGcm9tU3RyAQUIYXNzZXRJZEEED2NCYWxCQWZ0ZXJSZXBheQkBDmFjY291bnRCYWxhbmNlAQkBDmFzc2V0SWRGcm9tU3RyAQUIYXNzZXRJZEIJAJQKAgkAZQIFD2NCYWxBQWZ0ZXJSZXBheQULY0JhbEFCZWZvcmUJAGUCBQ9jQmFsQkFmdGVyUmVwYXkFC2NCYWxCQmVmb3JlCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQCUCgIFDXRva2Vuc0Ftb3VudEEFDXRva2Vuc0Ftb3VudEIEDXRvVXNlckFtb3VudEEIBQ0kdDAyNDcwNjI1NDAyAl8xBA10b1VzZXJBbW91bnRCCAUNJHQwMjQ3MDYyNTQwMgJfMgkAmQoHBQ10b1VzZXJBbW91bnRBBQhhc3NldElkQQUNdG9Vc2VyQW1vdW50QgUIYXNzZXRJZEIFCmNCYWxBQWZ0ZXIFCmNCYWxCQWZ0ZXIFB3NoYXJlSWQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BGHVzZXJDYW5XaXRoZHJhd1NoYXJlQ2FsYwQEdXNlcgRwb29sBXBvc0lkCGJvcnJvd2VkBAdwQW1vdW50CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUEdGhpcwkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXICAV8FBXBvc0lkBQ1rVXNlclBvc2l0aW9uAhBVbmtub3duIHBvc2l0aW9uBAx1c2VySW50ZXJlc3QJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfBQVwb3NJZAUVa1VzZXJQb3NpdGlvbkludGVyZXN0BAxwb29sSW50ZXJlc3QDBQhib3Jyb3dlZAkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkArAICBQRwb29sBRFrUG9vbEludGVyZXN0TG9hbgkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkArAICBQRwb29sBRNrUG9vbEludGVyZXN0Tm9Mb2FuCQBkAgUHcEFtb3VudAkAawMFB3BBbW91bnQJAGUCBQxwb29sSW50ZXJlc3QFDHVzZXJJbnRlcmVzdAUHU0NBTEUxMAEOd2l0aGRyYXdUb1VzZXIEBHVzZXIEcG9vbAVwb3NJZAhzdG9wTG9zcwQHcEFtb3VudAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFBHRoaXMJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfBQVwb3NJZAUNa1VzZXJQb3NpdGlvbgIQVW5rbm93biBwb3NpdGlvbgQMdXNlckludGVyZXN0CQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgIBXwUFcG9zSWQFFWtVc2VyUG9zaXRpb25JbnRlcmVzdAQMYm9ycm93QW1vdW50CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfBQVwb3NJZAURa1VzZXJCb3Jyb3dBbW91bnQAAAQPdXNlckNhbldpdGhkcmF3CQEYdXNlckNhbldpdGhkcmF3U2hhcmVDYWxjBAUEdXNlcgUEcG9vbAUFcG9zSWQJAGYCBQxib3Jyb3dBbW91bnQAAAQOcG9vbFRvdGFsU2hhcmUJARFnZXRQb29sVG90YWxTaGFyZQEFBHBvb2wECHVzZXJBZGRyCQEHQWRkcmVzcwEJANkEAQUEdXNlcgQLYm9ycm93QXNzZXQJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXICAV8FBXBvc0lkBRJrVXNlckJvcnJvd0Fzc2V0SWQCAAQEZGVidAMJAGYCBQxib3Jyb3dBbW91bnQAAAoAAUAJAPwHBAkBDmdldExlbmRTcnZBZGRyAAIMZ2V0QXNzZXREZWJ0CQDMCAIHCQDMCAIJAKwCAgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgIBXwUFcG9zSWQJAMwIAgULYm9ycm93QXNzZXQFA25pbAUDbmlsAwkAAQIFAUACA0ludAUBQAkAAgEJAKwCAgkAAwEFAUACGCBjb3VsZG4ndCBiZSBjYXN0IHRvIEludAAABA0kdDAyNjkxNDI3MDY3CQESd2l0aGRyYXdBbW91bnRDYWxjBAUEcG9vbAUPdXNlckNhbldpdGhkcmF3BQRkZWJ0BQtib3Jyb3dBc3NldAMJAAACBQ0kdDAyNjkxNDI3MDY3BQ0kdDAyNjkxNDI3MDY3BAdzaGFyZUlkCAUNJHQwMjY5MTQyNzA2NwJfNwQKY0JhbEJBZnRlcggFDSR0MDI2OTE0MjcwNjcCXzYECmNCYWxBQWZ0ZXIIBQ0kdDAyNjkxNDI3MDY3Al81BAhhc3NldElkQggFDSR0MDI2OTE0MjcwNjcCXzQEDXRvVXNlckFtb3VudEIIBQ0kdDAyNjkxNDI3MDY3Al8zBAhhc3NldElkQQgFDSR0MDI2OTE0MjcwNjcCXzIEDXRvVXNlckFtb3VudEEIBQ0kdDAyNjkxNDI3MDY3Al8xBAtjbG9zZURidEludgMJAGYCBQRkZWJ0AAAJAPwHBAkBDmdldExlbmRTcnZBZGRyAAIIcmVwYXlGb3IJAMwIAgkArAICCQCsAgIFBHVzZXICAV8FBXBvc0lkBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQ5hc3NldElkRnJvbVN0cgEFC2JvcnJvd0Fzc2V0BQRkZWJ0BQNuaWwAAAMJAAACBQtjbG9zZURidEludgULY2xvc2VEYnRJbnYJAM4IAgkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgIBXwUFcG9zSWQFDWtVc2VyUG9zaXRpb24JAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXICAV8FBXBvc0lkBRVrVXNlclBvc2l0aW9uSW50ZXJlc3QJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAUKa1Bvb2xUb3RhbAkAZQIFDnBvb2xUb3RhbFNoYXJlBQ91c2VyQ2FuV2l0aGRyYXcJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUIdXNlckFkZHIFDXRvVXNlckFtb3VudEEJAQ5hc3NldElkRnJvbVN0cgEFCGFzc2V0SWRBCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFCHVzZXJBZGRyBQ10b1VzZXJBbW91bnRCCQEOYXNzZXRJZEZyb21TdHIBBQhhc3NldElkQgUDbmlsCQEOZ2V0Q3Vyc0VudHJpZXMDBQhhc3NldElkQQUIYXNzZXRJZEIFB3NoYXJlSWQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BDHBhcnNlUmVxdWVzdAEJcmVxdWVzdElkBAdyZXF1ZXN0CQC1CQIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzCQCsAgIFCXJlcXVlc3RJZAUKa1JlcXVlc3RJZAkArAICAhNObyByZXF1ZXN0IHdpdGggaWQgBQlyZXF1ZXN0SWQCASwEBHVzZXIJAJEDAgUHcmVxdWVzdAAABARwb29sCQCRAwIFB3JlcXVlc3QAAQQEcG10QQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB3JlcXVlc3QAAgQDQUlkCQCRAwIFB3JlcXVlc3QAAwQEcG10QgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB3JlcXVlc3QABAQDQklkCQCRAwIFB3JlcXVlc3QABQQEYmFsQQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB3JlcXVlc3QABgQEYmFsQgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB3JlcXVlc3QABwQHc2hhcmVJZAkAkQMCBQdyZXF1ZXN0AAgEB2J3QXNzZXQJAJEDAgUHcmVxdWVzdAAJBAhid0Ftb3VudAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB3JlcXVlc3QACgkAnQoLBQR1c2VyBQRwb29sBQRwbXRBBQNBSWQFBHBtdEIFA0JJZAUEYmFsQQUEYmFsQgUHc2hhcmVJZAUHYndBc3NldAUIYndBbW91bnQBEGNhbGNCb3Jyb3dBbW91bnQGBHBtdEEEcG10QgNhSWQDYklkCGxldmVyYWdlCGJvcnJvd0lkBAdkUHJpY2VBCAoAAUAJAPwHBAUPcHJpY2VPcmFjbGVBZGRyAglnZXRUV0FQNjAJAMwIAgUDYUlkCQDMCAIHBQNuaWwFA25pbAMJAAECBQFAAgooSW50LCBJbnQpBQFACQACAQkArAICCQADAQUBQAIfIGNvdWxkbid0IGJlIGNhc3QgdG8gKEludCwgSW50KQJfMgQHZFByaWNlQggKAAFACQD8BwQFD3ByaWNlT3JhY2xlQWRkcgIJZ2V0VFdBUDYwCQDMCAIFA2JJZAkAzAgCBwUDbmlsBQNuaWwDCQABAgUBQAIKKEludCwgSW50KQUBQAkAAgEJAKwCAgkAAwEFAUACHyBjb3VsZG4ndCBiZSBjYXN0IHRvIChJbnQsIEludCkCXzIEBmRlY1ByQQkAbAYACgAACQEQZ2V0QXNzZXREZWNpbWFscwEFA2FJZAAAAAAFBERPV04EBmRlY1ByQgkAbAYACgAACQEQZ2V0QXNzZXREZWNpbWFscwEFA2JJZAAAAAAFBERPV04EDHBheWRJbkRvbGxhcgkAZAIJAGsDBQdkUHJpY2VBBQRwbXRBBQZkZWNQckEJAGsDBQdkUHJpY2VCBQRwbXRCBQZkZWNQckIEDSR0MDI4NzUzMjg4NTADCQAAAgUIYm9ycm93SWQFA2FJZAkAlAoCBQdkUHJpY2VBBQZkZWNQckEJAJQKAgUHZFByaWNlQgUGZGVjUHJCBAtib3Jyb3dQcmljZQgFDSR0MDI4NzUzMjg4NTACXzEEC2JvcnJvd0RlY1ByCAUNJHQwMjg3NTMyODg1MAJfMgkAawMJAGsDBQxwYXlkSW5Eb2xsYXIJAGUCBQhsZXZlcmFnZQBkAGQFC2JvcnJvd0RlY1ByBQtib3Jyb3dQcmljZRIBaQERcmVwbGVuaXNoRVZBTE9OTFkFBHBvb2wIbGV2ZXJhZ2UIYm9ycm93SWQEcG10QQRwbXRCAwMJAGYCAGQFCGxldmVyYWdlBgkAZgIFCGxldmVyYWdlAKwCCQACAQIfTGV2ZXJhZ2UgY2FuJ3QgYmUgPDEwMCBhbmQgPjMwMAQFcFR5cGUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzCQCsAgIFBWtQb29sBQRwb29sAhJQb29sIGlzIG5vdCBpbml0ZWQEDSR0MDI5MjYyMjkzNTIJAQtnZXRQb29sRGF0YQIJAQdBZGRyZXNzAQkA2QQBBQRwb29sBQVwVHlwZQQDQUlkCAUNJHQwMjkyNjIyOTM1MgJfMQQDQklkCAUNJHQwMjkyNjIyOTM1MgJfMgQEYmFsQQgFDSR0MDI5MjYyMjkzNTICXzMEBGJhbEIIBQ0kdDAyOTI2MjI5MzUyAl80BAdzaGFyZUlkCAUNJHQwMjkyNjIyOTM1MgJfNQQMYm9ycm93QW1vdW50AwkAZgIFCGxldmVyYWdlAGQJARBjYWxjQm9ycm93QW1vdW50BgUEcG10QQUEcG10QgUDQUlkBQNCSWQFCGxldmVyYWdlBQhib3Jyb3dJZAAABA0kdDAyOTQ4NzI5NTk0AwkAAAIFCGJvcnJvd0lkBQNBSWQJAJQKAgkAZAIFBHBtdEEFDGJvcnJvd0Ftb3VudAUEcG10QgkAlAoCBQRwbXRBCQBkAgUEcG10QgUMYm9ycm93QW1vdW50BAZwYXlJbkEIBQ0kdDAyOTQ4NzI5NTk0Al8xBAZwYXlJbkIIBQ0kdDAyOTQ4NzI5NTk0Al8yBAhscEFtb3VudAkBE2NhbGNSZXBsZW5pc2hMUFZpcnQIBQVwVHlwZQUEcG9vbAUGcGF5SW5BBQNBSWQFBnBheUluQgUDQklkBQRiYWxBBQRiYWxCBAduZXdCYWxBCQBkAgUEYmFsQQUGcGF5SW5BBAduZXdCYWxCCQBkAgUEYmFsQgUGcGF5SW5CBA0kdDAyOTc1MTI5ODg3CQESY2FsY1dpdGhkcmF3TFBWaXJ0CgUFcFR5cGUFBHBvb2wFCGxwQW1vdW50BQdzaGFyZUlkBQNBSWQFA0JJZAUHbmV3QmFsQQUHbmV3QmFsQgUMYm9ycm93QW1vdW50BQhib3Jyb3dJZAMJAAACBQ0kdDAyOTc1MTI5ODg3BQ0kdDAyOTc1MTI5ODg3BAphbW91bnRHZXRCCAUNJHQwMjk3NTEyOTg4NwJfMgQKYW1vdW50R2V0QQgFDSR0MDI5NzUxMjk4ODcCXzEEC3JhdGlvQmVmb3JlCQBrAwUEYmFsQgUGU0NBTEU4BQRiYWxBBApyYXRpb0FmdGVyCQBrAwkAZQIFB25ld0JhbEIFCmFtb3VudEdldEIFBlNDQUxFOAkAZQIFB25ld0JhbEEFCmFtb3VudEdldEEEBmltcGFjdAkAZQIFBlNDQUxFOAkAawMFC3JhdGlvQmVmb3JlBQZTQ0FMRTgFCnJhdGlvQWZ0ZXIECWltcGFjdE1vZAMJAGYCAAAFBmltcGFjdAkAaAIFBmltcGFjdAD///////////8BBQZpbXBhY3QJAJQKAgUDbmlsCQDMCAIFCmFtb3VudEdldEEJAMwIAgUKYW1vdW50R2V0QgkAzAgCBQlpbXBhY3RNb2QFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARpnZXRTaGFyZUFzc2V0UHJpY2VSRUFET05MWQEHc2hhcmVJZAQLc2hhcmVQcmljZXMJAQ1nZXRTaGFyZVByaWNlAQUHc2hhcmVJZAkAlAoCBQNuaWwFC3NoYXJlUHJpY2VzAWkBImdldFVzZXJQb3NpdGlvblNoYXJlQW1vdW50UkVBRE9OTFkCBHVzZXIGcG9zTnVtBARwb29sCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwkArAICCQCsAgIJAKwCAgUEdXNlcgIBXwUGcG9zTnVtBRFrVXNlclBvc2l0aW9uUG9vbAIQVW5rbm93biBwb3NpdGlvbgQMYm9ycm93QW1vdW50CQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgIBXwUGcG9zTnVtBRFrVXNlckJvcnJvd0Ftb3VudAQPdXNlckNhbldpdGhkcmF3CQEYdXNlckNhbldpdGhkcmF3U2hhcmVDYWxjBAUEdXNlcgUEcG9vbAUGcG9zTnVtCQBmAgUMYm9ycm93QW1vdW50AAAJAJQKAgUDbmlsBQ91c2VyQ2FuV2l0aGRyYXcBaQEgZ2V0VXNlclBvc2l0aW9uSW5Eb2xsYXJzUkVBRE9OTFkDBHVzZXIFcG9vbHMGcG9zTnVtCgEHdXNlclBvcwIBYQRwb29sBA0kdDAzMDkyNTMwOTU5BQFhBAh0b3RhbFBvcwgFDSR0MDMwOTI1MzA5NTkCXzEEB3Bvc0RlYnQIBQ0kdDAzMDkyNTMwOTU5Al8yBAVpbmRleAgFDSR0MDMwOTI1MzA5NTkCXzMEBXBUeXBlCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwkArAICBQVrUG9vbAUEcG9vbAISUG9vbCBpcyBub3QgaW5pdGVkBA0kdDAzMTA1MTMxMTQxCQELZ2V0UG9vbERhdGECCQEHQWRkcmVzcwEJANkEAQUEcG9vbAUFcFR5cGUEA0FJZAgFDSR0MDMxMDUxMzExNDECXzEEA0JJZAgFDSR0MDMxMDUxMzExNDECXzIEBGJhbEEIBQ0kdDAzMTA1MTMxMTQxAl8zBARiYWxCCAUNJHQwMzEwNTEzMTE0MQJfNAQHc2hhcmVJZAgFDSR0MDMxMDUxMzExNDECXzUEDGJvcnJvd0Ftb3VudAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgIBXwkAkQMCBQZwb3NOdW0FBWluZGV4BRFrVXNlckJvcnJvd0Ftb3VudAAABA91c2VyQ2FuV2l0aGRyYXcJARh1c2VyQ2FuV2l0aGRyYXdTaGFyZUNhbGMEBQR1c2VyBQRwb29sCQCRAwIFBnBvc051bQUFaW5kZXgJAGYCBQxib3Jyb3dBbW91bnQAAAQLc2hhcmVQcmljZXMJAQ1nZXRTaGFyZVByaWNlAQUHc2hhcmVJZAQKZGVjUHJTaGFyZQkAbAYACgAACQEQZ2V0QXNzZXREZWNpbWFscwEFB3NoYXJlSWQAAAAABQRET1dOBAZzaGFyZUQJAGsDBQ91c2VyQ2FuV2l0aGRyYXcFC3NoYXJlUHJpY2VzBQpkZWNQclNoYXJlAwkAAAIFDGJvcnJvd0Ftb3VudAAACQCVCgMJAM0IAgUIdG90YWxQb3MFBnNoYXJlRAkAzQgCBQdwb3NEZWJ0AAAJAGQC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ZSBjYXN0IHRvIEludAMJAAACBQxuZXdSZXF1ZXN0SWQFDG5ld1JlcXVlc3RJZAQEYXJncwkAzAgCCQCsAgIJAKwCAgkApQgBCAUBaQZjYWxsZXICAV8JAKQDAQUJbmV3UG9zTnVtCQDMCAIFB3NoYXJlSWQJAMwIAgUIYm9ycm93SWQJAMwIAgUMYm9ycm93QW1vdW50CQDMCAIJAKUIAQUEdGhpcwkAzAgCAhFyZXBsZW5pc2hGcm9tTGFuZAkAzAgCCQCkAwEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgUMbmV3UmVxdWVzdElkAhhDYW4ndCBjcmVhdGUgbmV3IHJlcXVlc3QFA25pbAQDaW52CQD9BwQJAQ5nZXRMZW5kU3J2QWRkcgACDWZsYXNoUG9zaXRpb24FBGFyZ3MFA25pbAMJAAACBQNpbnYFA2ludgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBA0kdDAzNDIzOTM0MzUxCQEPcmVwbGVuaXNoQnlUeXBlCgUFcFR5cGUFBHBvb2wFC05PX0xPQU5fRkVFBQRwbXRBBQNBSWQFBHBtdEIFA0JJZAUEYmFsQQUEYmFsQgUHc2hhcmVJZAQKdXNlclN0YWtlZAgFDSR0MDM0MjM5MzQzNTECXzEEB2F4bHlGZWUIBQ0kdDAzNDIzOTM0MzUxAl8yCQDOCAIJARByZXBsZW5pc2hFbnRyaWVzCAUEcG9vbAkApQgBCAUBaQZjYWxsZXIFCnVzZXJTdGFrZWQFB2F4bHlGZWUFCW5ld1Bvc051bQUHc2hhcmVJZAUFcFR5cGUHCQEOZ2V0Q3Vyc0VudHJpZXMDBQNBSWQFA0JJZAUHc2hhcmVJZAFpARFyZXBsZW5pc2hGcm9tTGFuZAEJcmVxdWVzdElkBA0kdDAzNDU2MjM0NjY2CQEMcGFyc2VSZXF1ZXN0AQUJcmVxdWVzdElkBAR1c2VyCAUNJHQwMzQ1NjIzNDY2NgJfMQQEcG9vbAgFDSR0MDM0NTYyMzQ2NjYCXzIEBHBtdEEIBQ0kdDAzNDU2MjM0NjY2Al8zBANBSWQIBQ0kdDAzNDU2MjM0NjY2Al80BARwbXRCCAUNJHQwMzQ1NjIzNDY2NgJfNQQDQklkCAUNJHQwMzQ1NjIzNDY2NgJfNgQEYmFsQQgFDSR0MDM0NTYyMzQ2NjYCXzcEBGJhbEIIBQ0kdDAzNDU2MjM0NjY2Al84BAdzaGFyZUlkCAUNJHQwMzQ1NjIzNDY2NgJfOQQHYndBc3NldAgFDSR0MDM0NTYyMzQ2NjYDXzEwBAhid0Ftb3VudAgFDSR0MDM0NTYyMzQ2NjYDXzExAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQISV3JvbmcgcGF5bWVudCBzaXplAwMJAQIhPQIJAQxhc3NldElkVG9TdHIBCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQFB2J3QXNzZXQGCQECIT0CCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAUIYndBbW91bnQJAAIBAg1Xcm9uZyBwYXltZW50BA0kdDAzNDg1NjM0OTgwAwkAAAIFA0FJZAUHYndBc3NldAkAlAoCCQBkAgUEcG10QQgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQFBHBtdEIJAJQKAgUEcG10QQkAZAIFBHBtdEIICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BAdwbXRBbGxBCAUNJHQwMzQ4NTYzNDk4MAJfMQQHcG10QWxsQggFDSR0MDM0ODU2MzQ5ODACXzIEBXBUeXBlCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwkArAICBQVrUG9vbAUEcG9vbAIMVW5rbm93biBwb29sBA0kdDAzNTA2MjM1MTcxCQEPcmVwbGVuaXNoQnlUeXBlCgUFcFR5cGUFBHBvb2wFCExPQU5fRkVFBQRwbXRBBQNBSWQFBHBtdEIFA0JJZAUEYmFsQQUEYmFsQgUHc2hhcmVJZAQKdXNlclN0YWtlZAgFDSR0MDM1MDYyMzUxNzECXzEEB2F4bHlGZWUIBQ0kdDAzNTA2MjM1MTcxAl8yBAZwb3NOdW0JARhnZXROZXdVc2VyUG9zaXRpb25OdW1iZXICBQRwb29sCQClCAEIBQFpBmNhbGxlcgQNYm9ycm93RW50cmllcwkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXICAV8JAKQDAQUGcG9zTnVtBRFrVXNlckJvcnJvd0Ftb3VudAUIYndBbW91bnQJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXICAV8JAKQDAQUGcG9zTnVtBRJrVXNlckJvcnJvd0Fzc2V0SWQFB2J3QXNzZXQFA25pbAQHZW50cmllcwkBEHJlcGxlbmlzaEVudHJpZXMIBQRwb29sBQR1c2VyBQp1c2VyU3Rha2VkBQdheGx5RmVlBQZwb3NOdW0FB3NoYXJlSWQFBXBUeXBlBgkAlAoCCQDNCAIJAM4IAgkAzggCBQdlbnRyaWVzCQEOZ2V0Q3Vyc0VudHJpZXMDBQNBSWQFA0JJZAUHc2hhcmVJZAUNYm9ycm93RW50cmllcwkBC0RlbGV0ZUVudHJ5AQkArAICBQlyZXF1ZXN0SWQFCmtSZXF1ZXN0SWQFCnVzZXJTdGFrZWQBaQEId2l0aGRyYXcCBHBvb2wFcG9zSWQJAQ53aXRoZHJhd1RvVXNlcgQJAKUIAQgFAWkGY2FsbGVyBQRwb29sCQCkAwEFBXBvc0lkBwFpARRjcmVhdGVVcGRhdGVTdG9wTG9zcwQFcG9zSWQGcG9vbElkB2Fzc2V0SWQFcHJpY2UEEHRva2VuT3JhY2xlUHJpY2UICgABQAkA/AcEBQ9wcmljZU9yYWNsZUFkZHICCWdldFRXQVA2MAkAzAgCBQdhc3NldElkCQDMCAIHBQNuaWwFA25pbAMJAAECBQFAAgooSW50LCBJbnQpBQFACQACAQkArAICCQADAQUBQAIfIGNvdWxkbid0IGJlIGNhc3QgdG8gKEludCwgSW50KQJfMQMJAQEhAQkBCWlzRGVmaW5lZAEJAJoIAgUEdGhpcwkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFBnBvb2xJZAIBXwkApQgBCAUBaQZjYWxsZXICAV8JAKQDAQUFcG9zSWQFDWtVc2VyUG9zaXRpb24JAAIBAhpUaGVyZSBhcmUgbm8gdXNlciBwb3NpdGlvbgMJAGcCAAAFBXByaWNlCQACAQIcUHJpY2UgbXVzdCBiZSBncmVhdGVyIHRoYW4gMAMJAGYCBQVwcmljZQUQdG9rZW5PcmFjbGVQcmljZQkAAgECK1ByaWNlIG11c3QgYmUgbGVzcyB0aGFuIGN1cnJlbnQgdG9rZW4gcHJpY2UJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkApQgBCAUBaQZjYWxsZXICAV8JAKQDAQUFcG9zSWQCAV8FBnBvb2xJZAIBXwUHYXNzZXRJZAUNa1VzZXJTdG9wTG9zcwUFcHJpY2UFA25pbAFpAQ5kZWxldGVTdG9wTG9zcwMFcG9zSWQGcG9vbElkB2Fzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBCQCaCAIFBHRoaXMJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkApQgBCAUBaQZjYWxsZXICAV8JAKQDAQUFcG9zSWQCAV8FBnBvb2xJZAIBXwUHYXNzZXRJZAUNa1VzZXJTdG9wTG9zcwkAAgECCE5vIGVudHJ5CQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkApQgBCAUBaQZjYWxsZXICAV8JAKQDAQUFcG9zSWQCAV8FBnBvb2xJZAIBXwUHYXNzZXRJZAUNa1VzZXJTdG9wTG9zcwUDbmlsAWkBEGNyZWF0ZU5ld1JlcXVlc3QBBnBhcmFtcwkBC3ZhbHVlT3JFbHNlAgkBCmlzU2VsZkNhbGwBBQFpBAxuZXdSZXF1ZXN0SWQJAGQCCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFDGtSZXF1ZXN0SXRlcgAAAAEJAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKQDAQUMbmV3UmVxdWVzdElkBQprUmVxdWVzdElkBQZwYXJhbXMJAMwIAgkBDEludGVnZXJFbnRyeQIFDGtSZXF1ZXN0SXRlcgUMbmV3UmVxdWVzdElkBQNuaWwFDG5ld1JlcXVlc3RJZAFpAQhzdG9wTG9zcwQEdXNlcgVwb3NJZARwb29sB2Fzc2V0SWQEEHRva2VuT3JhY2xlUHJpY2UICgABQAkA/AcEBQ9wcmljZU9yYWNsZUFkZHICCWdldFRXQVA2MAkAzAgCBQdhc3NldElkCQDMCAIHBQNuaWwFA25pbAMJAAECBQFAAgooSW50LCBJbnQpBQFACQACAQkArAICCQADAQUBQAIfIGNvdWxkbid0IGJlIGNhc3QgdG8gKEludCwgSW50KQJfMQMJAQEhAQkBCWlzRGVmaW5lZAEJAJoIAgUEdGhpcwkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQR1c2VyAgFfCQCkAwEFBXBvc0lkAgFfBQRwb29sAgFfBQdhc3NldElkBQ1rVXNlclN0b3BMb3NzCQACAQIITm8gZW50cnkJAM0IAgkBDndpdGhkcmF3VG9Vc2VyBAkApQgBCAUBaQZjYWxsZXIFBHBvb2wJAKQDAQUFcG9zSWQGCQELRGVsZXRlRW50cnkBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFBHVzZXICAV8JAKQDAQUFcG9zSWQCAV8FBHBvb2wCAV8FB2Fzc2V0SWQFDWtVc2VyU3RvcExvc3MBaQEJbGlxdWlkYXRlAwR1c2VyBXBvc0lkD2xpcXVpZGF0ZUFtb3VudAQEcG9vbAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMJAKwCAgkArAICCQCsAgIFBHVzZXICAV8FBXBvc0lkBRFrVXNlclBvc2l0aW9uUG9vbAILbm8gcG9zaXRpb24EBXBUeXBlCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwkArAICBQVrUG9vbAUEcG9vbAISUG9vbCBpcyBub3QgaW5pdGVkBA0kdDAzNzk1NDM4MDQ0CQELZ2V0UG9vbERhdGECCQEHQWRkcmVzcwEJANkEAQUEcG9vbAUFcFR5cGUEA0FJZAgFDSR0MDM3OTU0MzgwNDQCXzEEA0JJZAgFDSR0MDM3OTU0MzgwNDQCXzIEBGJhbEEIBQ0kdDAzNzk1NDM4MDQ0Al8zBARiYWxCCAUNJHQwMzc5NTQzODA0NAJfNAQHc2hhcmVJZAgFDSR0MDM3OTU0MzgwNDQCXzUEBmFtb3VudAkBCXVuc3Rha2VMUAQFBHBvb2wFBXBUeXBlBQdzaGFyZUlkBQ9saXF1aWRhdGVBbW91bnQEDGJvcnJvd0Ftb3VudAkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXICAV8FBXBvc0lkBRFrVXNlckJvcnJvd0Ftb3VudAQLYm9ycm93QXNzZXQJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfBQVwb3NJZAUSa1VzZXJCb3Jyb3dBc3NldElkBA91c2VyQ2FuV2l0aGRyYXcJARh1c2VyQ2FuV2l0aGRyYXdTaGFyZUNhbGMEBQR1c2VyBQRwb29sBQVwb3NJZAkAZgIFDGJvcnJvd0Ftb3VudAAAAwkAAAIFDGJvcnJvd0Ftb3VudAAACQACAQIrWW91IGNhbid0IGxpcXVpZGF0ZSBwb3NpdGlvbiB3aXRob3V0IGJvcnJvdwkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXICAV8FBXBvc0lkBRVrVXNlclBvc2l0aW9uSW50ZXJlc3QJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgUEcG9vbAURa1Bvb2xJbnRlcmVzdExvYW4JAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAUOa1Bvb2xUb3RhbExvYW4JAGUCCQEZZ2V0UG9vbFRvdGFsU2hhcmVXaXRoTG9hbgEFBHBvb2wFD2xpcXVpZGF0ZUFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBQprUG9vbFRvdGFsCQBlAgkBEWdldFBvb2xUb3RhbFNoYXJlAQUEcG9vbAUPbGlxdWlkYXRlQW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgIBXwUFcG9zSWQFDWtVc2VyUG9zaXRpb24JAGUCBQ91c2VyQ2FuV2l0aGRyYXcFD2xpcXVpZGF0ZUFtb3VudAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFBmFtb3VudAkA2QQBBQdzaGFyZUlkBQNuaWwBaQESY2FwaXRhbGl6ZUV4S2VlcGVyDARwb29sBHR5cGUJdG9rZW5Ub0lkEGFtb3VudFRvRXhjaGFuZ2UFY2xhaW0JYW1vdW50c0luCWFkZHJlc3Nlcw9hc3NldHNUb1JlY2VpdmULZXN0UmVjZWl2ZWQRc2xpcHBhZ2VUb2xlcmFuY2ULbWluUmVjZWl2ZWQHb3B0aW9ucwQNJHQwMzkyNzkzOTQ3MwMFBWNsYWltCQELY2xhaW1GYXJtZWQCBQR0eXBlBQRwb29sBAxjbGFpbWVkQXNzZXQDCQAAAgUEdHlwZQUHU0ZfUE9PTAUGU1dPUElEBQRXWElECQCUCgIFEGFtb3VudFRvRXhjaGFuZ2UFDGNsYWltZWRBc3NldAQNY2xhaW1lZEFtb3VudAgFDSR0MDM5Mjc5Mzk0NzMCXzEEDGNsYWltZWRBc3NldAgFDSR0MDM5Mjc5Mzk0NzMCXzIED2V4Y2hhbmdlZEFtb3VudAkBDmV4Y2hhbmdlS2VlcGVyCgUJdG9rZW5Ub0lkBRBhbW91bnRUb0V4Y2hhbmdlBQxjbGFpbWVkQXNzZXQFCWFtb3VudHNJbgUJYWRkcmVzc2VzBQ9hc3NldHNUb1JlY2VpdmUFC2VzdFJlY2VpdmVkBRFzbGlwcGFnZVRvbGVyYW5jZQULbWluUmVjZWl2ZWQFB29wdGlvbnMEBmNoYW5nZQkAZQIFDWNsYWltZWRBbW91bnQFEGFtb3VudFRvRXhjaGFuZ2UEC2NoYW5nZUVudHJ5AwkAZgIFBmNoYW5nZQAACQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHBvb2wFDmtQb29sQ2FwQ2hhbmdlCQBkAgUGY2hhbmdlCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgUEcG9vbAUOa1Bvb2xDYXBDaGFuZ2UAAAUDbmlsBQNuaWwJAM4IAgkBCmNhcGl0YWxpemUEBQRwb29sBQR0eXBlBQl0b2tlblRvSWQFD2V4Y2hhbmdlZEFtb3VudAULY2hhbmdlRW50cnkBaQESY2FwaXRhbGl6ZUV4UHV6emxlCARwb29sBHR5cGUJdG9rZW5Ub0lkEGFtb3VudFRvRXhjaGFuZ2UFY2xhaW0Jcm91dGVzU3RyDG1pblRvUmVjZWl2ZQdvcHRpb25zBA0kdDA0MDEzMDQwMzI0AwUFY2xhaW0JAQtjbGFpbUZhcm1lZAIFBHR5cGUFBHBvb2wEDGNsYWltZWRBc3NldAMJAAACBQR0eXBlBQdTRl9QT09MBQZTV09QSUQFBFdYSUQJAJQKAgUQYW1vdW50VG9FeGNoYW5nZQUMY2xhaW1lZEFzc2V0BA1jbGFpbWVkQW1vdW50CAUNJHQwNDAxMzA0MDMyNAJfMQQMY2xhaW1lZEFzc2V0CAUNJHQwNDAxMzA0MDMyNAJfMgQPZXhjaGFuZ2VkQW1vdW50CQEOZXhjaGFuZ2VQdXp6bGUGBQl0b2tlblRvSWQFEGFtb3VudFRvRXhjaGFuZ2UFDGNsYWltZWRBc3NldAUJcm91dGVzU3RyBQxtaW5Ub1JlY2VpdmUFB29wdGlvbnMEBmNoYW5nZQkAZQIFDWNsYWltZWRBbW91bnQFEGFtb3VudFRvRXhjaGFuZ2UEC2NoYW5nZUVudHJ5AwkAZgIFBmNoYW5nZQAACQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHBvb2wFDmtQb29sQ2FwQ2hhbmdlCQBkAgUGY2hhbmdlCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgUEcG9vbAUOa1Bvb2xDYXBDaGFuZ2UAAAUDbmlsBQNuaWwJAM4IAgkBCmNhcGl0YWxpemUEBQRwb29sBQR0eXBlBQl0b2tlblRvSWQFD2V4Y2hhbmdlZEFtb3VudAULY2hhbmdlRW50cnkBaQESY2FwaXRhbGl6ZUV4U3dvcEZpDARwb29sBHR5cGUJdG9rZW5Ub0lkEGFtb3VudFRvRXhjaGFuZ2UFY2xhaW0KZXhjaGFuZ2Vycw5leGNoYW5nZXJzVHlwZQVhcmdzMQVhcmdzMhFyb3V0aW5nQXNzZXRzS2V5cxJtaW5BbW91bnRUb1JlY2VpdmUHb3B0aW9ucwQNJHQwNDEwNDc0MTI0MQMFBWNsYWltCQELY2xhaW1GYXJtZWQCBQR0eXBlBQRwb29sBAxjbGFpbWVkQXNzZXQDCQAAAgUEdHlwZQUHU0ZfUE9PTAUGU1dPUElEBQRXWElECQCUCgIFEGFtb3VudFRvRXhjaGFuZ2UFDGNsYWltZWRBc3NldAQNY2xhaW1lZEFtb3VudAgFDSR0MDQxMDQ3NDEyNDECXzEEDGNsYWltZWRBc3NldAgFDSR0MDQxMDQ3NDEyNDECXzIED2V4Y2hhbmdlZEFtb3VudAkBDmV4Y2hhbmdlU3dvcEZpCgUJdG9rZW5Ub0lkBRBhbW91bnRUb0V4Y2hhbmdlBQxjbGFpbWVkQXNzZXQFCmV4Y2hhbmdlcnMFDmV4Y2hhbmdlcnNUeXBlBQVhcmdzMQUFYXJnczIFEXJvdXRpbmdBc3NldHNLZXlzBRJtaW5BbW91bnRUb1JlY2VpdmUFB29wdGlvbnMEBmNoYW5nZQkAZQIFDWNsYWltZWRBbW91bnQFEGFtb3VudFRvRXhjaGFuZ2UEC2NoYW5nZUVudHJ5AwkAZgIFBmNoYW5nZQAACQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHBvb2wFDmtQb29sQ2FwQ2hhbmdlCQBkAgUGY2hhbmdlCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgUEcG9vbAUOa1Bvb2xDYXBDaGFuZ2UAAAUDbmlsBQNuaWwJAM4IAgkBCmNhcGl0YWxpemUEBQRwb29sBQR0eXBlBQl0b2tlblRvSWQFD2V4Y2hhbmdlZEFtb3VudAULY2hhbmdlRW50cnkBaQELaW5pdE5ld1Bvb2wIBHR5cGUIcG9vbEFkZHILaW5GZWVOb0xvYW4JaW5GZWVMb2FuDGNhcEZlZU5vTG9hbg5jYXBGZWVXaXRoTG9hbhFzdG9wbG9zc0ZlZU5vTG9hbhNzdG9wbG9zc0ZlZVdpdGhMb2FuAwMJAQIhPQIFBHR5cGUFB1NGX1BPT0wJAQIhPQIFBHR5cGUFB1dYX1BPT0wHCQACAQIKV3JvbmcgdHlwZQQNJHQwNDE5MzQ0MjAyOAkBC2dldFBvb2xEYXRhAgkBB0FkZHJlc3MBCQDZBAEFCHBvb2xBZGRyBQR0eXBlBANhSWQIBQ0kdDA0MTkzNDQyMDI4Al8xBANiSWQIBQ0kdDA0MTkzNDQyMDI4Al8yBARhQmFsCAUNJHQwNDE5MzQ0MjAyOAJfMwQEYkJhbAgFDSR0MDQxOTM0NDIwMjgCXzQEB3NoYXJlSWQIBQ0kdDA0MTkzNDQyMDI4Al81CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFCHBvb2xBZGRyBRVrQXhseUluRmVlV2l0aG91dExvYW4FC2luRmVlTm9Mb2FuCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFCHBvb2xBZGRyBRJrQXhseUluRmVlV2l0aExvYW4FCWluRmVlTG9hbgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQhwb29sQWRkcgURa0F4bHlOb0xvYW5DYXBGZWUFDGNhcEZlZU5vTG9hbgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQhwb29sQWRkcgUTa0F4bHlXaXRoTG9hbkNhcEZlZQUOY2FwRmVlV2l0aExvYW4JAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUIcG9vbEFkZHIFFmtBeGx5U3RvcExvc3NOb0xvYW5GZWUFEXN0b3Bsb3NzRmVlTm9Mb2FuCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFCHBvb2xBZGRyBRRrQXhseVN0b3BMb3NzTG9hbkZlZQUTc3RvcGxvc3NGZWVXaXRoTG9hbgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQhwb29sQWRkcgURa1Bvb2xJbnRlcmVzdExvYW4AAAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQhwb29sQWRkcgUTa1Bvb2xJbnRlcmVzdE5vTG9hbgAACQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUFa1Bvb2wFCHBvb2xBZGRyBQR0eXBlCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUHc2hhcmVJZAUKa1NoYXJlUG9vbAUIcG9vbEFkZHIFA25pbAFpAQ5jYXBpdGFsaXplVGVzdAQEcG9vbAVwVHlwZQd0b2tlbklkC3Rva2VuQW1vdW50BAhwb29sQWRkcgkBB0FkZHJlc3MBCQDZBAEFBHBvb2wEDSR0MDQyODI0NDI5MDMJAQtnZXRQb29sRGF0YQIFCHBvb2xBZGRyBQVwVHlwZQQDQUlkCAUNJHQwNDI4MjQ0MjkwMwJfMQQDQklkCAUNJHQwNDI4MjQ0MjkwMwJfMgQEYmFsQQgFDSR0MDQyODI0NDI5MDMCXzMEBGJhbEIIBQ0kdDA0MjgyNDQyOTAzAl80BAdzaGFyZUlkCAUNJHQwNDI4MjQ0MjkwMwJfNQQNJHQwNDI5MDY0Mjk4NgMJAAACBQd0b2tlbklkBQNBSWQJAJQKAgULdG9rZW5BbW91bnQAAAkAlAoCAAAFC3Rva2VuQW1vdW50BARwbXRBCAUNJHQwNDI5MDY0Mjk4NgJfMQQEcG10QggFDSR0MDQyOTA2NDI5ODYCXzIEDSR0MDQyOTg5NDMwOTMJAQ9yZXBsZW5pc2hCeVR5cGUKBQVwVHlwZQUEcG9vbAUGTk9fRkVFBQRwbXRBBQNBSWQFBHBtdEIFA0JJZAUEYmFsQQUEYmFsQgUHc2hhcmVJZAQMc3Rha2VkQW1vdW50CAUNJHQwNDI5ODk0MzA5MwJfMQQCbmYIBQ0kdDA0Mjk4OTQzMDkzAl8yBBNjdXJQb29sSW50ZXJlc3RMb2FuCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgUEcG9vbAURa1Bvb2xJbnRlcmVzdExvYW4AAAQVY3VyUG9vbEludGVyZXN0Tm9Mb2FuCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgUEcG9vbAUTa1Bvb2xJbnRlcmVzdE5vTG9hbgAABBB0b3RhbFNoYXJlQW1vdW50CQERZ2V0UG9vbFRvdGFsU2hhcmUBBQRwb29sBBh0b3RhbFNoYXJlQW1vdW50V2l0aExvYW4JARlnZXRQb29sVG90YWxTaGFyZVdpdGhMb2FuAQUEcG9vbAQLbG9hblBlcmNlbnQJAGsDBRh0b3RhbFNoYXJlQW1vdW50V2l0aExvYW4FBlNDQUxFOAUQdG90YWxTaGFyZUFtb3VudAQKc3Rha2VkTG9hbgkAawMFDHN0YWtlZEFtb3VudAULbG9hblBlcmNlbnQFBlNDQUxFOAQMc3Rha2VkTm9Mb2FuCQBlAgUMc3Rha2VkQW1vdW50BQpzdGFrZWRMb2FuBA9uZXdJbnRlcmVzdExvYW4DCQBmAgUYdG90YWxTaGFyZUFtb3VudFdpdGhMb2FuAAAJAGQCBRNjdXJQb29sSW50ZXJlc3RMb2FuCQBrAwUKc3Rha2VkTG9hbgUHU0NBTEUxMAUYdG90YWxTaGFyZUFtb3VudFdpdGhMb2FuAAAEEW5ld0ludGVyZXN0Tm9Mb2FuAwkAZgIJAGUCBRB0b3RhbFNoYXJlQW1vdW50BRh0b3RhbFNoYXJlQW1vdW50V2l0aExvYW4AAAkAZAIFFWN1clBvb2xJbnRlcmVzdE5vTG9hbgkAawMFDHN0YWtlZE5vTG9hbgUHU0NBTEUxMAkAZQIFEHRvdGFsU2hhcmVBbW91bnQFGHRvdGFsU2hhcmVBbW91bnRXaXRoTG9hbgAABAtheGx5RmVlTG9hbgkAawMFCnN0YWtlZExvYW4JAQpnZXRBeGx5RmVlAgUEcG9vbAUMQ0FQX0ZFRV9MT0FOBQpGRUVfU0NBTEU2BA1heGx5RmVlTm9Mb2FuCQBrAwUMc3Rha2VkTm9Mb2FuCQEKZ2V0QXhseUZlZQIFBHBvb2wFD0NBUF9GRUVfTk9fTE9BTgUKRkVFX1NDQUxFNgQHYXhseUZlZQkBCXVuc3Rha2VMUAQFBHBvb2wFBXBUeXBlBQdzaGFyZUlkCQBkAgULYXhseUZlZUxvYW4FDWF4bHlGZWVOb0xvYW4DCQAAAgUHYXhseUZlZQUHYXhseUZlZQkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHBvb2wFEWtQb29sSW50ZXJlc3RMb2FuBQ9uZXdJbnRlcmVzdExvYW4JAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAUTa1Bvb2xJbnRlcmVzdE5vTG9hbgURbmV3SW50ZXJlc3ROb0xvYW4JAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAUKa1Bvb2xUb3RhbAkAZQIJAGQCBRB0b3RhbFNoYXJlQW1vdW50BQxzdGFrZWRBbW91bnQFB2F4bHlGZWUJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAUOa1Bvb2xUb3RhbExvYW4JAGUCCQBkAgUYdG90YWxTaGFyZUFtb3VudFdpdGhMb2FuBQpzdGFrZWRMb2FuBQtheGx5RmVlTG9hbgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQhtb25leUJveAkAZAIFC2F4bHlGZWVMb2FuBQ1heGx5RmVlTm9Mb2FuCQDZBAEFB3NoYXJlSWQFA25pbAkBDmdldEN1cnNFbnRyaWVzAwUDQUlkBQNCSWQFB3NoYXJlSWQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEPY2xhaW1GYXJtZWRUZXN0AgR0eXBlBHBvb2wDCQAAAgUEdHlwZQUHU0ZfUE9PTAQJYmFsQmVmb3JlCQEOYWNjb3VudEJhbGFuY2UBBQZTV09QSUQDCQAAAgUJYmFsQmVmb3JlBQliYWxCZWZvcmUEA2ludgkA/AcECQEQZ2V0U0ZGYXJtaW5nQWRkcgACBWNsYWltCQDMCAIFBHBvb2wFA25pbAUDbmlsAwkAAAIFA2ludgUDaW52BAhiYWxBZnRlcgkBDmFjY291bnRCYWxhbmNlAQUGU1dPUElECQCUCgIFA25pbAkAlAoCCQBlAgUIYmFsQWZ0ZXIFCWJhbEJlZm9yZQUGU1dPUElECQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAwkAAAIFBHR5cGUFB1dYX1BPT0wECWJhbEJlZm9yZQkBDmFjY291bnRCYWxhbmNlAQUEV1hJRAMJAAACBQliYWxCZWZvcmUFCWJhbEJlZm9yZQQDaW52CQD8BwQJARBnZXRXWEZhcm1pbmdBZGRyAQkBB0FkZHJlc3MBCQDZBAEFBHBvb2wCB2NsYWltV1gJAMwIAgUEcG9vbAUDbmlsBQNuaWwDCQAAAgUDaW52BQNpbnYECGJhbEFmdGVyCQEOYWNjb3VudEJhbGFuY2UBBQRXWElECQCUCgIFA25pbAkAlAoCCQBlAgUIYmFsQWZ0ZXIFCWJhbEJlZm9yZQUEV1hJRAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECD1dyb25nIHBvb2wgdHlwZQECdHgBBnZlcmlmeQAJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAIBQJ0eA9zZW5kZXJQdWJsaWNLZXkiOQrk", "height": 2619806, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: BNCrKqrqpbVPB8r469QWPMGuPsbi2qaWVJXfVCUW7drw Next: AyhzvFQeNbLSeaLq5z1UEcTGbpMRYAba7CrywXMMaqQo Diff:
OldNewDifferences
288288
289289 func aY (aW,aX) = if ((aX >= aT))
290290 then aW
291- else throw("List size exceeds 100")
291+ else throw("List size exceeds 50")
292292
293- aY(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aU, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100)
293+ aY(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aU, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50)
294294 }
295295
296296
297-func aZ (ba) = {
298- func aP (aQ,aq) = {
299- let ax = valueOrErrorMessage(getString(this, (aq + M)), "Can't find pool addr by share id")
300- let ak = Address(fromBase58String(ax))
301- let bb = valueOrErrorMessage(getString(this, (L + ax)), "Pool is not inited")
302- let bc = at(ak, bb)
303- let ao = bc._1
304- let ap = bc._2
305- let bd = bc._3
306- let be = bc._4
307- let bf = ( let an = invoke(Y, "getTWAP60", [ao, false], nil)
308- if ($isInstanceOf(an, "(Int, Int)"))
309- then an
310- else throw(($getType(an) + " couldn't be cast to (Int, Int)")))._2
311- let bg = ( let an = invoke(Y, "getTWAP60", [ap, false], nil)
312- if ($isInstanceOf(an, "(Int, Int)"))
313- then an
314- else throw(($getType(an) + " couldn't be cast to (Int, Int)")))._2
315- let bh = av(ak, bb, aq)
316- let bi = pow(10, 0, aK(ao), 0, 0, DOWN)
317- let bj = pow(10, 0, aK(ap), 0, 0, DOWN)
318- let bk = pow(10, 0, aK(aq), 0, 0, DOWN)
319- let bl = (fraction(bd, bf, bi) + fraction(be, bg, bj))
320- let bm = fraction(bl, bk, bh)
321- (aQ :+ bm)
322- }
297+func aZ (aq) = {
298+ let ax = valueOrErrorMessage(getString(this, (aq + M)), "Can't find pool addr by share id")
299+ let ak = Address(fromBase58String(ax))
300+ let ba = valueOrErrorMessage(getString(this, (L + ax)), "Pool is not inited")
301+ let bb = at(ak, ba)
302+ let ao = bb._1
303+ let ap = bb._2
304+ let bc = bb._3
305+ let bd = bb._4
306+ let be = ( let an = invoke(Y, "getTWAP60", [ao, false], nil)
307+ if ($isInstanceOf(an, "(Int, Int)"))
308+ then an
309+ else throw(($getType(an) + " couldn't be cast to (Int, Int)")))._2
310+ let bf = ( let an = invoke(Y, "getTWAP60", [ap, false], nil)
311+ if ($isInstanceOf(an, "(Int, Int)"))
312+ then an
313+ else throw(($getType(an) + " couldn't be cast to (Int, Int)")))._2
314+ let bg = av(ak, ba, aq)
315+ let bh = pow(10, 0, aK(ao), 0, 0, DOWN)
316+ let bi = pow(10, 0, aK(ap), 0, 0, DOWN)
317+ let bj = pow(10, 0, aK(aq), 0, 0, DOWN)
318+ let bk = (fraction(bc, be, bh) + fraction(bd, bf, bi))
319+ fraction(bk, bj, bg)
320+ }
323321
324- let aS = ba
322+
323+func bl (bm) = {
324+ func aP (aQ,aq) = (aQ :+ aZ(aq))
325+
326+ let aS = bm
325327 let aT = size(aS)
326328 let aU = nil
327329 func aV (aW,aX) = if ((aX >= aT))
330332
331333 func aY (aW,aX) = if ((aX >= aT))
332334 then aW
333- else throw("List size exceeds 50")
335+ else throw("List size exceeds 20")
334336
335- aY(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aU, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50)
337+ aY(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aU, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
336338 }
337339
338340
339341 func bn (ao,ap,aq) = {
340342 let bo = aN([ao, ap])
341- let bm = aZ([aq])
342- let bp = [toString(bo[0]), toString(bo[1]), toString(bm[0])]
343-[StringEntry(O, makeString(bp, ","))]
343+ let bp = aZ(aq)
344+ let bq = [toString(bo[0]), toString(bo[1]), toString(bp)]
345+[StringEntry(O, makeString(bq, ","))]
344346 }
345347
346348
347-func bq (bb,ak,br,ao,bs,ap,ar,as) = {
348- let bt = if ((bb == a))
349+func br (ba,ak,bs,ao,bt,ap,ar,as) = {
350+ let bu = if ((ba == a))
349351 then $Tuple2(nil, nil)
350352 else $Tuple2(split({
351- let an = invoke(ak, "evaluatePutByAmountAssetREADONLY", [br], nil)
353+ let an = invoke(ak, "evaluatePutByAmountAssetREADONLY", [bs], nil)
352354 if ($isInstanceOf(an, "String"))
353355 then an
354356 else throw(($getType(an) + " couldn't be cast to String"))
355357 }, "__"), split({
356- let an = invoke(ak, "evaluatePutByPriceAssetREADONLY", [bs], nil)
358+ let an = invoke(ak, "evaluatePutByPriceAssetREADONLY", [bt], nil)
357359 if ($isInstanceOf(an, "String"))
358360 then an
359361 else throw(($getType(an) + " couldn't be cast to String"))
360362 }, "__"))
361- if ((bt == bt))
363+ if ((bu == bu))
362364 then {
363- let bu = bt._2
364- let bv = bt._1
365- let bw = if ((bb == a))
366- then $Tuple2(fraction(j, br, ar), fraction(j, bs, as))
367- else $Tuple2(parseIntValue(bv[1]), parseIntValue(bu[1]))
368- let bx = bw._1
369- let by = bw._2
370- let bz = if ((by > bx))
365+ let bv = bu._2
366+ let bw = bu._1
367+ let bx = if ((ba == a))
368+ then $Tuple2(fraction(j, bs, ar), fraction(j, bt, as))
369+ else $Tuple2(parseIntValue(bw[1]), parseIntValue(bv[1]))
370+ let by = bx._1
371+ let bz = bx._2
372+ let bA = if ((bz > by))
371373 then {
372- let bA = if ((bb == a))
373- then fraction(as, bx, j, CEILING)
374- else parseIntValue(bv[8])
375- $Tuple5(br, bA, (bs - bA), ap, by)
374+ let bB = if ((ba == a))
375+ then fraction(as, by, j, CEILING)
376+ else parseIntValue(bw[8])
377+ $Tuple5(bs, bB, (bt - bB), ap, bz)
376378 }
377379 else {
378- let bA = if ((bb == a))
379- then fraction(ar, by, j, CEILING)
380- else parseIntValue(bu[7])
381- $Tuple5(bA, bs, (br - bA), ao, bx)
380+ let bB = if ((ba == a))
381+ then fraction(ar, bz, j, CEILING)
382+ else parseIntValue(bv[7])
383+ $Tuple5(bB, bt, (bs - bB), ao, by)
382384 }
383- let bB = bz._1
384- let bC = bz._2
385- let bD = bz._3
386- let bE = bz._4
387- let bF = bz._5
388- $Tuple5(bB, bC, bD, bE, bF)
385+ let bC = bA._1
386+ let bD = bA._2
387+ let bE = bA._3
388+ let bF = bA._4
389+ let bG = bA._5
390+ $Tuple5(bC, bD, bE, bF, bG)
389391 }
390392 else throw("Strict value is not equal to itself.")
391393 }
392394
393395
394-func bG (ak,bb,br,ao,bs,ap) = {
395- let bH = [AttachedPayment(aJ(ao), br), AttachedPayment(aJ(ap), bs)]
396- if ((bb == a))
397- then invoke(ak, "callFunction", ["replenishWithTwoTokens", ["false", "0"]], bH)
398- else invoke(ak, "put", [1000000, false], bH)
396+func bH (ak,ba,bs,ao,bt,ap) = {
397+ let bI = [AttachedPayment(aJ(ao), bs), AttachedPayment(aJ(ap), bt)]
398+ if ((ba == a))
399+ then invoke(ak, "callFunction", ["replenishWithTwoTokens", ["false", "0"]], bI)
400+ else invoke(ak, "put", [1000000, false], bI)
399401 }
400402
401403
402-func bI (ak,bb,bA,bJ) = {
403- let bH = [AttachedPayment(aJ(bJ), bA)]
404- if ((bb == a))
405- then invoke(ak, "callFunction", ["replenishWithOneToken", ["0", "false", "0"]], bH)
406- else invoke(ak, "putOneTkn", [0, false], bH)
404+func bJ (ak,ba,bB,bK) = {
405+ let bI = [AttachedPayment(aJ(bK), bB)]
406+ if ((ba == a))
407+ then invoke(ak, "callFunction", ["replenishWithOneToken", ["0", "false", "0"]], bI)
408+ else invoke(ak, "putOneTkn", [0, false], bI)
407409 }
408410
409411
410-func bK (ax,bb,aq,bL) = {
411- let bH = [AttachedPayment(fromBase58String(aq), bL)]
412- if ((bb == a))
413- then invoke(aD(), "lockShareTokens", [ax, 0], bH)
414- else invoke(aE(addressFromStringValue(ax)), "stake", nil, bH)
412+func bL (ax,ba,aq,bM) = {
413+ let bI = [AttachedPayment(fromBase58String(aq), bM)]
414+ if ((ba == a))
415+ then invoke(aD(), "lockShareTokens", [ax, 0], bI)
416+ else invoke(aE(addressFromStringValue(ax)), "stake", nil, bI)
415417 }
416418
417419
418-func bM (ax,bb,aq,bL) = {
419- let bN = if ((bb == a))
420- then $Tuple3(aD(), "withdrawShareTokens", [ax, bL])
421- else if ((bb == b))
422- then $Tuple3(aE(Address(fromBase58String(ax))), "unstake", [aq, bL])
420+func bN (ax,ba,aq,bM) = {
421+ let bO = if ((ba == a))
422+ then $Tuple3(aD(), "withdrawShareTokens", [ax, bM])
423+ else if ((ba == b))
424+ then $Tuple3(aE(Address(fromBase58String(ax))), "unstake", [aq, bM])
423425 else throw("Wrong pool type")
424- let bO = bN._1
425- let bP = bN._2
426- let bQ = bN._3
427- let bR = invoke(bO, bP, bQ, nil)
428- if ((bR == bR))
429- then bL
426+ let bP = bO._1
427+ let bQ = bO._2
428+ let bR = bO._3
429+ let bS = invoke(bP, bQ, bR, nil)
430+ if ((bS == bS))
431+ then bM
430432 else throw("Strict value is not equal to itself.")
431433 }
432434
433435
434-func bS (ax,bT,bU,ar,as,bV,bW) = {
436+func bT (ax,bU,bV,ar,as,bW,bX) = {
435437 let ak = Address(fromBase58String(ax))
436- let bX = 1000000
437- let bY = getIntegerValue(ak, s)
438- let bZ = fraction(bV, bX, (bX - bY))
439- let ca = if ((bW == bT))
438+ let bY = 1000000
439+ let bZ = getIntegerValue(ak, s)
440+ let ca = fraction(bW, bY, (bY - bZ))
441+ let cb = if ((bX == bU))
440442 then {
441- let cb = fraction(ar, bZ, (as - bZ))
442- $Tuple2(cb, bU)
443+ let cc = fraction(ar, ca, (as - ca))
444+ $Tuple2(cc, bV)
443445 }
444446 else {
445- let cb = fraction(as, bZ, (ar - bZ))
446- $Tuple2(cb, bT)
447+ let cc = fraction(as, ca, (ar - ca))
448+ $Tuple2(cc, bU)
447449 }
448- let cb = ca._1
449- let cc = ca._2
450- $Tuple2(cc, cb)
450+ let cc = cb._1
451+ let cd = cb._2
452+ $Tuple2(cd, cc)
451453 }
452454
453455
454-func cd (ax,bT,bU,ar,as,bV,bW) = {
455- let ce = getIntegerValue(Z, "%s__protocolFee")
456- let cf = getIntegerValue(Z, "%s__poolFee")
457- let cg = toBigInt(100000000)
458- let ch = if ((bW == bT))
456+func ce (ax,bU,bV,ar,as,bW,bX) = {
457+ let cf = getIntegerValue(Z, "%s__protocolFee")
458+ let cg = getIntegerValue(Z, "%s__poolFee")
459+ let ch = toBigInt(100000000)
460+ let ci = if ((bX == bU))
459461 then {
460- let cb = fraction(ar, bV, (as - bV))
461- $Tuple2(cb, bU)
462+ let cc = fraction(ar, bW, (as - bW))
463+ $Tuple2(cc, bV)
462464 }
463465 else {
464- let cb = fraction(as, bV, (ar - bV))
465- $Tuple2(cb, bT)
466+ let cc = fraction(as, bW, (ar - bW))
467+ $Tuple2(cc, bU)
466468 }
467- let cb = ch._1
468- let cc = ch._2
469- let ci = toInt(fraction(toBigInt(cb), cg, (cg - toBigInt((ce + cf)))))
470- $Tuple2(cc, ci)
469+ let cc = ci._1
470+ let cd = ci._2
471+ let cj = toInt(fraction(toBigInt(cc), ch, (ch - toBigInt((cf + cg)))))
472+ $Tuple2(cd, cj)
471473 }
472474
473475
474-func cj (au,ax,bT,bU,ar,as,bV,bW) = if ((au == a))
476+func ck (au,ax,bU,bV,ar,as,bW,bX) = if ((au == a))
475477 then {
476- let ck = bS(ax, bT, bU, ar, as, bV, bW)
477- let cc = ck._1
478- let cb = ck._2
479- invoke(addressFromStringValue(ax), "callFunction", ["exchange", ["1"]], [AttachedPayment(aJ(cc), cb)])
478+ let cl = bT(ax, bU, bV, ar, as, bW, bX)
479+ let cd = cl._1
480+ let cc = cl._2
481+ invoke(addressFromStringValue(ax), "callFunction", ["exchange", ["1"]], [AttachedPayment(aJ(cd), cc)])
480482 }
481483 else {
482- let cl = cd(ax, bT, bU, ar, as, bV, bW)
483- let cc = cl._1
484- let cb = cl._2
485- invoke(Z, "swap", [1, bW, toString(this)], [AttachedPayment(aJ(cc), cb)])
484+ let cm = ce(ax, bU, bV, ar, as, bW, bX)
485+ let cd = cm._1
486+ let cc = cm._2
487+ invoke(Z, "swap", [1, bX, toString(this)], [AttachedPayment(aJ(cd), cc)])
486488 }
487489
488490
489-func cm (bb,ax,br,ao,bs,ap,ar,as) = {
491+func cn (ba,ax,bs,ao,bt,ap,ar,as) = {
490492 let ak = addressFromStringValue(ax)
491- if ((bb == a))
493+ if ((ba == a))
492494 then {
493- let bR = {
494- let an = invoke(ak, "callFunction", ["calcLPReplenishDiffPropREADONLY", [toString(br), toString(bs), "0"]], nil)
495+ let bS = {
496+ let an = invoke(ak, "callFunction", ["calcLPReplenishDiffPropREADONLY", [toString(bs), toString(bt), "0"]], nil)
495497 if ($isInstanceOf(an, "List[Any]"))
496498 then an
497499 else throw(($getType(an) + " couldn't be cast to List[Any]"))
498500 }
499- if ((bR == bR))
501+ if ((bS == bS))
500502 then {
501- let an = bR[0]
503+ let an = bS[0]
502504 if ($isInstanceOf(an, "Int"))
503505 then an
504506 else throw(($getType(an) + " couldn't be cast to Int"))
505507 }
506508 else throw("Strict value is not equal to itself.")
507509 }
508- else if ((bb == b))
510+ else if ((ba == b))
509511 then {
510- let cn = if (if ((br > 0))
511- then (bs > 0)
512+ let co = if (if ((bs > 0))
513+ then (bt > 0)
512514 else false)
513515 then {
514- let co = bq(bb, ak, br, ao, bs, ap, ar, as)
515- let bB = co._1
516- let bC = co._2
517- let bD = co._3
518- let cp = co._4
519- let cq = co._5
520- $Tuple3(bD, cp, cq)
516+ let cp = br(ba, ak, bs, ao, bt, ap, ar, as)
517+ let bC = cp._1
518+ let bD = cp._2
519+ let bE = cp._3
520+ let cq = cp._4
521+ let cr = cp._5
522+ $Tuple3(bE, cq, cr)
521523 }
522- else if ((br > 0))
523- then $Tuple3(br, ao, 0)
524- else $Tuple3(bs, ap, 0)
525- let bD = cn._1
526- let cp = cn._2
527- let cr = cn._3
528- let cs = if ((bD > 0))
524+ else if ((bs > 0))
525+ then $Tuple3(bs, ao, 0)
526+ else $Tuple3(bt, ap, 0)
527+ let bE = co._1
528+ let cq = co._2
529+ let cs = co._3
530+ let ct = if ((bE > 0))
529531 then {
530- let bR = {
531- let an = invoke(ak, "putOneTknREADONLY", [cp, bD], nil)
532+ let bS = {
533+ let an = invoke(ak, "putOneTknREADONLY", [cq, bE], nil)
532534 if ($isInstanceOf(an, "(Int, Int, Int)"))
533535 then an
534536 else throw(($getType(an) + " couldn't be cast to (Int, Int, Int)"))
535537 }
536- if ((bR == bR))
537- then bR._1
538+ if ((bS == bS))
539+ then bS._1
538540 else throw("Strict value is not equal to itself.")
539541 }
540542 else 0
541- (cr + cs)
543+ (cs + ct)
542544 }
543545 else throw("Wrong pool type")
544546 }
545547
546548
547-func ct (bb,ax,cq,aq,ao,ap,ar,as,cu,cv) = {
549+func cu (ba,ax,cr,aq,ao,ap,ar,as,cv,cw) = {
548550 let ak = addressFromStringValue(ax)
549- let cw = if ((bb == a))
551+ let cx = if ((ba == a))
550552 then {
551- let bR = {
552- let an = invoke(ak, "callFunction", ["withdrawREADONLY", [toString(cq)]], nil)
553+ let bS = {
554+ let an = invoke(ak, "callFunction", ["withdrawREADONLY", [toString(cr)]], nil)
553555 if ($isInstanceOf(an, "List[Any]"))
554556 then an
555557 else throw(($getType(an) + " couldn't be cast to List[Any]"))
556558 }
557- if ((bR == bR))
559+ if ((bS == bS))
558560 then $Tuple2({
559- let an = bR[0]
561+ let an = bS[0]
560562 if ($isInstanceOf(an, "Int"))
561563 then an
562564 else throw(($getType(an) + " couldn't be cast to Int"))
563565 }, {
564- let an = bR[1]
566+ let an = bS[1]
565567 if ($isInstanceOf(an, "Int"))
566568 then an
567569 else throw(($getType(an) + " couldn't be cast to Int"))
568570 })
569571 else throw("Strict value is not equal to itself.")
570572 }
571- else if ((bb == b))
573+ else if ((ba == b))
572574 then {
573- let cx = split({
574- let an = invoke(ak, "evaluateGetREADONLY", [aq, cq], nil)
575+ let cy = split({
576+ let an = invoke(ak, "evaluateGetREADONLY", [aq, cr], nil)
575577 if ($isInstanceOf(an, "String"))
576578 then an
577579 else throw(($getType(an) + " couldn't be cast to String"))
578580 }, "__")
579- if ((cx == cx))
580- then $Tuple2(parseIntValue(cx[1]), parseIntValue(cx[2]))
581+ if ((cy == cy))
582+ then $Tuple2(parseIntValue(cy[1]), parseIntValue(cy[2]))
581583 else throw("Strict value is not equal to itself.")
582584 }
583585 else throw("Wrong pool type")
584- let cy = cw._1
585- let cz = cw._2
586- if ((cu > 0))
586+ let cz = cx._1
587+ let cA = cx._2
588+ if ((cv > 0))
587589 then {
588- let cA = if (if ((cv == ao))
589- then (cu > cy)
590+ let cB = if (if ((cw == ao))
591+ then (cv > cz)
590592 else false)
591- then (cu - cy)
592- else if (if ((cv == ap))
593- then (cu > cz)
593+ then (cv - cz)
594+ else if (if ((cw == ap))
595+ then (cv > cA)
594596 else false)
595- then (cu - cz)
597+ then (cv - cA)
596598 else 0
597- let cB = if ((cA > 0))
598- then if ((bb == a))
599- then bS(ax, ao, ap, ar, as, cA, cv)
600- else cd(ax, ao, ap, ar, as, cA, cv)
599+ let cC = if ((cB > 0))
600+ then if ((ba == a))
601+ then bT(ax, ao, ap, ar, as, cB, cw)
602+ else ce(ax, ao, ap, ar, as, cB, cw)
601603 else $Tuple2("", 0)
602- let cc = cB._1
603- let cb = cB._2
604- if ((cv == ao))
605- then $Tuple2(((cy + cA) - cu), (cz - cb))
606- else $Tuple2((cy - cb), ((cz + cA) - cu))
604+ let cd = cC._1
605+ let cc = cC._2
606+ if ((cw == ao))
607+ then $Tuple2(((cz + cB) - cv), (cA - cc))
608+ else $Tuple2((cz - cc), ((cA + cB) - cv))
607609 }
608- else $Tuple2(cy, cz)
610+ else $Tuple2(cz, cA)
609611 }
610612
611613
612-func cC (au,ax) = if ((au == a))
614+func cD (au,ax) = if ((au == a))
613615 then {
614- let cD = ae(aa)
615- if ((cD == cD))
616+ let cE = ae(aa)
617+ if ((cE == cE))
616618 then {
617- let bR = invoke(aD(), "claim", [ax], nil)
618- if ((bR == bR))
619+ let bS = invoke(aD(), "claim", [ax], nil)
620+ if ((bS == bS))
619621 then {
620- let cE = ae(aa)
621- $Tuple2((cE - cD), aa)
622+ let cF = ae(aa)
623+ $Tuple2((cF - cE), aa)
622624 }
623625 else throw("Strict value is not equal to itself.")
624626 }
626628 }
627629 else if ((au == b))
628630 then {
629- let cD = ae(ab)
630- if ((cD == cD))
631+ let cE = ae(ab)
632+ if ((cE == cE))
631633 then {
632- let bR = invoke(aE(Address(fromBase58String(ax))), "claimWX", [ax], nil)
633- if ((bR == bR))
634+ let bS = invoke(aE(Address(fromBase58String(ax))), "claimWX", [ax], nil)
635+ if ((bS == bS))
634636 then {
635- let cE = ae(ab)
636- $Tuple2((cE - cD), ab)
637+ let cF = ae(ab)
638+ $Tuple2((cF - cE), ab)
637639 }
638640 else throw("Strict value is not equal to itself.")
639641 }
642644 else throw("Wrong pool type")
643645
644646
645-func cF (bb,ax,aC,br,ao,bs,ap,ar,as,cG) = {
646- let cH = ae(fromBase58String(cG))
647- if ((cH == cH))
647+func cG (ba,ax,aC,bs,ao,bt,ap,ar,as,cH) = {
648+ let cI = ae(fromBase58String(cH))
649+ if ((cI == cI))
648650 then {
649651 let ak = addressFromStringValue(ax)
650- let cI = if (if ((br > 0))
651- then (bs > 0)
652+ let cJ = if (if ((bs > 0))
653+ then (bt > 0)
652654 else false)
653655 then {
654- let cJ = bq(bb, ak, br, ao, bs, ap, ar, as)
655- let bB = cJ._1
656- let bC = cJ._2
657- let bD = cJ._3
658- let cp = cJ._4
659- let bR = bG(ak, bb, bB, ao, bC, ap)
660- if ((bR == bR))
661- then $Tuple2(bD, cp)
656+ let cK = br(ba, ak, bs, ao, bt, ap, ar, as)
657+ let bC = cK._1
658+ let bD = cK._2
659+ let bE = cK._3
660+ let cq = cK._4
661+ let bS = bH(ak, ba, bC, ao, bD, ap)
662+ if ((bS == bS))
663+ then $Tuple2(bE, cq)
662664 else throw("Strict value is not equal to itself.")
663665 }
664- else if ((br > 0))
665- then $Tuple2(br, ao)
666- else if ((bs > 0))
667- then $Tuple2(bs, ap)
666+ else if ((bs > 0))
667+ then $Tuple2(bs, ao)
668+ else if ((bt > 0))
669+ then $Tuple2(bt, ap)
668670 else throw("pmts must be > 0")
669- let bD = cI._1
670- let cp = cI._2
671- let bR = if ((bD > 0))
672- then bI(ak, bb, bD, cp)
671+ let bE = cJ._1
672+ let cq = cJ._2
673+ let bS = if ((bE > 0))
674+ then bJ(ak, ba, bE, cq)
673675 else nil
674- if ((bR == bR))
676+ if ((bS == bS))
675677 then {
676- let cK = ae(fromBase58String(cG))
677- let cL = (cK - cH)
678- let cM = fraction(cL, aB(ax, aC), l)
679- let cN = (cL - cM)
680- if ((0 >= cN))
678+ let cL = ae(fromBase58String(cH))
679+ let cM = (cL - cI)
680+ let cN = fraction(cM, aB(ax, aC), l)
681+ let cO = (cM - cN)
682+ if ((0 >= cO))
681683 then throw("amount of staked sharetokens must be > 0")
682684 else {
683- let cO = bK(ax, bb, cG, cN)
684- if ((cO == cO))
685- then $Tuple2(cN, cM)
685+ let cP = bL(ax, ba, cH, cO)
686+ if ((cP == cP))
687+ then $Tuple2(cO, cN)
686688 else throw("Strict value is not equal to itself.")
687689 }
688690 }
692694 }
693695
694696
695-func cP (ax,aA,cQ,cM,cR,aq,au,cS) = {
696- let cT = aw(ax)
697- let cU = ay(ax)
698- let cV = if (cS)
699- then $Tuple2(getIntegerValue(this, (ax + B)), (cU + cQ))
700- else $Tuple2(getIntegerValue(this, (ax + C)), cU)
701- let cW = cV._1
702- let cX = cV._2
703-[IntegerEntry((ax + z), (cT + cQ)), IntegerEntry((ax + A), cX), IntegerEntry((((((ax + "_") + aA) + "_") + toString(cR)) + t), cQ), IntegerEntry((((((ax + "_") + aA) + "_") + toString(cR)) + y), cW), StringEntry((((aA + "_") + toString(cR)) + u), ax), IntegerEntry((aA + x), cR), ScriptTransfer(W, cM, fromBase58String(aq))]
697+func cQ (ax,aA,cR,cN,cS,aq,au,cT) = {
698+ let cU = aw(ax)
699+ let cV = ay(ax)
700+ let cW = if (cT)
701+ then $Tuple2(getIntegerValue(this, (ax + B)), (cV + cR))
702+ else $Tuple2(getIntegerValue(this, (ax + C)), cV)
703+ let cX = cW._1
704+ let cY = cW._2
705+[IntegerEntry((ax + z), (cU + cR)), IntegerEntry((ax + A), cY), IntegerEntry((((((ax + "_") + aA) + "_") + toString(cS)) + t), cR), IntegerEntry((((((ax + "_") + aA) + "_") + toString(cS)) + y), cX), StringEntry((((aA + "_") + toString(cS)) + u), ax), IntegerEntry((aA + x), cS), ScriptTransfer(W, cN, fromBase58String(aq))]
704706 }
705707
706708
707-func cY (cZ,da,db,dc,dd,de,df,dg,dh,di) = {
708- let dj = ae(aJ(cZ))
709- if ((dj == dj))
709+func cZ (da,db,dc,dd,de,df,dg,dh,di,dj) = {
710+ let dk = ae(aJ(da))
711+ if ((dk == dk))
710712 then {
711- let bR = invoke(X, "swap", [dc, dd, de, df, dg, dh, di], [AttachedPayment(db, da)])
712- if ((bR == bR))
713- then (ae(aJ(cZ)) - dj)
713+ let bS = invoke(X, "swap", [dd, de, df, dg, dh, di, dj], [AttachedPayment(dc, db)])
714+ if ((bS == bS))
715+ then (ae(aJ(da)) - dk)
714716 else throw("Strict value is not equal to itself.")
715717 }
716718 else throw("Strict value is not equal to itself.")
717719 }
718720
719721
720-func dk (cZ,da,db,dl,dm,di) = {
721- let dj = ae(aJ(cZ))
722- if ((dj == dj))
722+func dl (da,db,dc,dm,dn,dj) = {
723+ let dk = ae(aJ(da))
724+ if ((dk == dk))
723725 then {
724- let bR = invoke(X, "puzzleSwap", [dl, dm, di], [AttachedPayment(db, da)])
725- if ((bR == bR))
726- then (ae(aJ(cZ)) - dj)
726+ let bS = invoke(X, "puzzleSwap", [dm, dn, dj], [AttachedPayment(dc, db)])
727+ if ((bS == bS))
728+ then (ae(aJ(da)) - dk)
727729 else throw("Strict value is not equal to itself.")
728730 }
729731 else throw("Strict value is not equal to itself.")
730732 }
731733
732734
733-func dn (cZ,da,db,do,dp,dq,dr,ds,dt,di) = {
734- let dj = ae(aJ(cZ))
735- if ((dj == dj))
735+func do (da,db,dc,dp,dq,dr,ds,dt,du,dj) = {
736+ let dk = ae(aJ(da))
737+ if ((dk == dk))
736738 then {
737- let bR = invoke(X, "swopfiSwap", [do, dp, dq, dr, ds, dt, di], [AttachedPayment(db, da)])
738- if ((bR == bR))
739- then (ae(aJ(cZ)) - dj)
739+ let bS = invoke(X, "swopfiSwap", [dp, dq, dr, ds, dt, du, dj], [AttachedPayment(dc, db)])
740+ if ((bS == bS))
741+ then (ae(aJ(da)) - dk)
740742 else throw("Strict value is not equal to itself.")
741743 }
742744 else throw("Strict value is not equal to itself.")
743745 }
744746
745747
746-func du (ax,bb,dv,dw) = {
748+func dv (ax,ba,dw,dx) = {
747749 let ak = Address(fromBase58String(ax))
748- let dx = at(ak, bb)
749- let dy = dx._1
750- let dz = dx._2
751- let ar = dx._3
752- let as = dx._4
753- let aq = dx._5
754- let dA = if ((dv == dy))
755- then $Tuple2(dw, 0)
756- else $Tuple2(0, dw)
757- let br = dA._1
758- let bs = dA._2
759- let dB = cF(bb, ax, i, br, dy, bs, dz, ar, as, aq)
760- let cQ = dB._1
761- let dC = dB._2
762- let dD = valueOrElse(getInteger(this, (ax + B)), 0)
763- let dE = valueOrElse(getInteger(this, (ax + C)), 0)
764- let dF = aw(ax)
765- let dG = ay(ax)
766- let dH = fraction(dG, j, dF)
767- let dI = fraction(cQ, dH, j)
768- let dJ = (cQ - dI)
769- let dK = if ((dG > 0))
770- then (dD + fraction(dI, k, dG))
771- else 0
772- let dL = if (((dF - dG) > 0))
773- then (dE + fraction(dJ, k, (dF - dG)))
774- else 0
775- let dM = fraction(dI, aB(ax, d), l)
776- let dN = fraction(dJ, aB(ax, c), l)
777- let dO = bM(ax, bb, aq, (dM + dN))
778- if ((dO == dO))
779- then ([IntegerEntry((ax + B), dK), IntegerEntry((ax + C), dL), IntegerEntry((ax + z), ((dF + cQ) - dO)), IntegerEntry((ax + A), ((dG + dI) - dM)), ScriptTransfer(W, (dM + dN), fromBase58String(aq))] ++ bn(dy, dz, aq))
780- else throw("Strict value is not equal to itself.")
750+ let dy = at(ak, ba)
751+ let dz = dy._1
752+ let dA = dy._2
753+ let ar = dy._3
754+ let as = dy._4
755+ let aq = dy._5
756+ if (if ((dw != dz))
757+ then (dw != dA)
758+ else false)
759+ then throw("Wrong asset")
760+ else {
761+ let dB = if ((dw == dz))
762+ then $Tuple2(dx, 0)
763+ else $Tuple2(0, dx)
764+ let bs = dB._1
765+ let bt = dB._2
766+ let dC = cG(ba, ax, i, bs, dz, bt, dA, ar, as, aq)
767+ let cR = dC._1
768+ let dD = dC._2
769+ let dE = valueOrElse(getInteger(this, (ax + B)), 0)
770+ let dF = valueOrElse(getInteger(this, (ax + C)), 0)
771+ let dG = aw(ax)
772+ let dH = ay(ax)
773+ let dI = fraction(dH, j, dG)
774+ let dJ = fraction(cR, dI, j)
775+ let dK = (cR - dJ)
776+ let dL = if ((dH > 0))
777+ then (dE + fraction(dJ, k, dH))
778+ else 0
779+ let dM = if (((dG - dH) > 0))
780+ then (dF + fraction(dK, k, (dG - dH)))
781+ else 0
782+ let dN = fraction(dJ, aB(ax, d), l)
783+ let dO = fraction(dK, aB(ax, c), l)
784+ let dP = bN(ax, ba, aq, (dN + dO))
785+ if ((dP == dP))
786+ then ([IntegerEntry((ax + B), dL), IntegerEntry((ax + C), dM), IntegerEntry((ax + z), ((dG + cR) - dP)), IntegerEntry((ax + A), ((dH + dJ) - dN)), ScriptTransfer(W, (dN + dO), fromBase58String(aq))] ++ bn(dz, dA, aq))
787+ else throw("Strict value is not equal to itself.")
788+ }
781789 }
782790
783791
784-func dP (ax,dQ,dR,dS) = {
792+func dQ (ax,dR,dS,dT) = {
785793 let ak = Address(fromBase58String(ax))
786- let bb = valueOrErrorMessage(getString(this, (L + ax)), "Unknown pool")
787- let dT = at(ak, bb)
788- let bT = dT._1
789- let bU = dT._2
790- let ar = dT._3
791- let as = dT._4
792- let aq = dT._5
793- let dU = ae(aJ(bT))
794- if ((dU == dU))
794+ let ba = valueOrErrorMessage(getString(this, (L + ax)), "Unknown pool")
795+ let dU = at(ak, ba)
796+ let bU = dU._1
797+ let bV = dU._2
798+ let ar = dU._3
799+ let as = dU._4
800+ let aq = dU._5
801+ let dV = ae(aJ(bU))
802+ if ((dV == dV))
795803 then {
796- let dV = ae(aJ(bU))
797- if ((dV == dV))
804+ let dW = ae(aJ(bV))
805+ if ((dW == dW))
798806 then {
799- let bR = if ((bb == a))
800- then invoke(ak, "callFunction", ["withdraw", [toString(dQ)]], nil)
807+ let bS = if ((ba == a))
808+ then invoke(ak, "callFunction", ["withdraw", [toString(dR)]], nil)
801809 else {
802- let bR = bM(ax, bb, aq, dQ)
803- if ((bR == bR))
804- then invoke(ak, "get", nil, [AttachedPayment(aJ(aq), dQ)])
810+ let bS = bN(ax, ba, aq, dR)
811+ if ((bS == bS))
812+ then invoke(ak, "get", nil, [AttachedPayment(aJ(aq), dR)])
805813 else throw("Strict value is not equal to itself.")
806814 }
807- if ((bR == bR))
815+ if ((bS == bS))
808816 then {
809- let dW = ae(aJ(bT))
810817 let dX = ae(aJ(bU))
811- let dY = $Tuple2((dW - dU), (dX - dV))
812- let dZ = dY._1
813- let ea = dY._2
814- let eb = if ((dR > 0))
818+ let dY = ae(aJ(bV))
819+ let dZ = $Tuple2((dX - dV), (dY - dW))
820+ let ea = dZ._1
821+ let eb = dZ._2
822+ let ec = if ((dS > 0))
815823 then {
816- let cA = if (if ((dS == bT))
817- then (dR > dZ)
824+ let cB = if (if ((dT == bU))
825+ then (dS > ea)
818826 else false)
819- then (dR - dZ)
820- else if (if ((dS == bU))
821- then (dR > ea)
827+ then (dS - ea)
828+ else if (if ((dT == bV))
829+ then (dS > eb)
822830 else false)
823- then (dR - ea)
831+ then (dS - eb)
824832 else 0
825- let ec = if ((cA > 0))
826- then cj(bb, ax, bT, bU, ar, as, cA, dS)
833+ let ed = if ((cB > 0))
834+ then ck(ba, ax, bU, bV, ar, as, cB, dT)
827835 else 0
828- if ((ec == ec))
836+ if ((ed == ed))
829837 then {
830- let ed = ae(aJ(bT))
831838 let ee = ae(aJ(bU))
832- $Tuple2((ed - dU), (ee - dV))
839+ let ef = ae(aJ(bV))
840+ $Tuple2((ee - dV), (ef - dW))
833841 }
834842 else throw("Strict value is not equal to itself.")
835843 }
836- else $Tuple2(dZ, ea)
837- let ef = eb._1
838- let eg = eb._2
839- $Tuple7(ef, bT, eg, bU, dW, dX, aq)
844+ else $Tuple2(ea, eb)
845+ let eg = ec._1
846+ let eh = ec._2
847+ $Tuple7(eg, bU, eh, bV, dX, dY, aq)
840848 }
841849 else throw("Strict value is not equal to itself.")
842850 }
846854 }
847855
848856
849-func eh (aA,ax,ei,ej) = {
850- let ek = valueOrErrorMessage(getInteger(this, (((((ax + "_") + aA) + "_") + ei) + t)), "Unknown position")
851- let el = getIntegerValue(this, (((((ax + "_") + aA) + "_") + ei) + y))
852- let em = if (ej)
857+func ei (aA,ax,ej,ek) = {
858+ let el = valueOrErrorMessage(getInteger(this, (((((ax + "_") + aA) + "_") + ej) + t)), "Unknown position")
859+ let em = getIntegerValue(this, (((((ax + "_") + aA) + "_") + ej) + y))
860+ let en = if (ek)
853861 then getIntegerValue(this, (ax + B))
854862 else getIntegerValue(this, (ax + C))
855- (ek + fraction(ek, (em - el), k))
863+ (el + fraction(el, (en - em), k))
856864 }
857865
858866
859-func en (aA,ax,ei,eo) = {
860- let ek = valueOrErrorMessage(getInteger(this, (((((ax + "_") + aA) + "_") + ei) + t)), "Unknown position")
861- let el = getIntegerValue(this, (((((ax + "_") + aA) + "_") + ei) + y))
862- let cu = valueOrElse(getInteger(this, (((((ax + "_") + aA) + "_") + ei) + v)), 0)
863- let dQ = eh(aA, ax, ei, (cu > 0))
864- let ep = aw(ax)
865- let eq = Address(fromBase58String(aA))
866- let dS = valueOrElse(getString(this, (((((ax + "_") + aA) + "_") + ei) + w)), "")
867- let dR = if ((cu > 0))
867+func eo (aA,ax,ej,ep) = {
868+ let el = valueOrErrorMessage(getInteger(this, (((((ax + "_") + aA) + "_") + ej) + t)), "Unknown position")
869+ let em = getIntegerValue(this, (((((ax + "_") + aA) + "_") + ej) + y))
870+ let cv = valueOrElse(getInteger(this, (((((ax + "_") + aA) + "_") + ej) + v)), 0)
871+ let dR = ei(aA, ax, ej, (cv > 0))
872+ let eq = aw(ax)
873+ let er = Address(fromBase58String(aA))
874+ let dT = valueOrElse(getString(this, (((((ax + "_") + aA) + "_") + ej) + w)), "")
875+ let dS = if ((cv > 0))
868876 then {
869- let an = invoke(aH(), "getAssetDebt", [false, ((((ax + "_") + aA) + "_") + ei), dS], nil)
877+ let an = invoke(aH(), "getAssetDebt", [false, ((((ax + "_") + aA) + "_") + ej), dT], nil)
870878 if ($isInstanceOf(an, "Int"))
871879 then an
872880 else throw(($getType(an) + " couldn't be cast to Int"))
873881 }
874882 else 0
875- let er = dP(ax, dQ, dR, dS)
876- if ((er == er))
883+ let es = dQ(ax, dR, dS, dT)
884+ if ((es == es))
877885 then {
878- let aq = er._7
879- let dX = er._6
880- let dW = er._5
881- let bU = er._4
882- let eg = er._3
883- let bT = er._2
884- let ef = er._1
885- let es = if ((dR > 0))
886- then invoke(aH(), "repayFor", [((aA + "_") + ei)], [AttachedPayment(aJ(dS), dR)])
886+ let aq = es._7
887+ let dY = es._6
888+ let dX = es._5
889+ let bV = es._4
890+ let eh = es._3
891+ let bU = es._2
892+ let eg = es._1
893+ let et = if ((dS > 0))
894+ then invoke(aH(), "repayFor", [((aA + "_") + ej)], [AttachedPayment(aJ(dT), dS)])
887895 else 0
888- if ((es == es))
889- then ([DeleteEntry((((((ax + "_") + aA) + "_") + ei) + t)), DeleteEntry((((((ax + "_") + aA) + "_") + ei) + y)), IntegerEntry((ax + z), (ep - dQ)), ScriptTransfer(eq, ef, aJ(bT)), ScriptTransfer(eq, eg, aJ(bU))] ++ bn(bT, bU, aq))
896+ if ((et == et))
897+ then ([DeleteEntry((((((ax + "_") + aA) + "_") + ej) + t)), DeleteEntry((((((ax + "_") + aA) + "_") + ej) + y)), IntegerEntry((ax + z), (eq - dR)), ScriptTransfer(er, eg, aJ(bU)), ScriptTransfer(er, eh, aJ(bV))] ++ bn(bU, bV, aq))
890898 else throw("Strict value is not equal to itself.")
891899 }
892900 else throw("Strict value is not equal to itself.")
893901 }
894902
895903
896-func et (eu) = {
897- let ev = split(valueOrErrorMessage(getString(this, (eu + J)), ("No request with id " + eu)), ",")
898- let aA = ev[0]
899- let ax = ev[1]
900- let br = parseIntValue(ev[2])
901- let dy = ev[3]
902- let bs = parseIntValue(ev[4])
903- let dz = ev[5]
904- let ar = parseIntValue(ev[6])
905- let as = parseIntValue(ev[7])
906- let aq = ev[8]
907- let ew = ev[9]
908- let ex = parseIntValue(ev[10])
909- $Tuple11(aA, ax, br, dy, bs, dz, ar, as, aq, ew, ex)
904+func eu (ev) = {
905+ let ew = split(valueOrErrorMessage(getString(this, (ev + J)), ("No request with id " + ev)), ",")
906+ let aA = ew[0]
907+ let ax = ew[1]
908+ let bs = parseIntValue(ew[2])
909+ let dz = ew[3]
910+ let bt = parseIntValue(ew[4])
911+ let dA = ew[5]
912+ let ar = parseIntValue(ew[6])
913+ let as = parseIntValue(ew[7])
914+ let aq = ew[8]
915+ let ex = ew[9]
916+ let ey = parseIntValue(ew[10])
917+ $Tuple11(aA, ax, bs, dz, bt, dA, ar, as, aq, ex, ey)
910918 }
911919
912920
913-func ey (br,bs,ao,ap,ez,eA) = {
914- let bf = ( let an = invoke(Y, "getTWAP60", [ao, false], nil)
921+func ez (bs,bt,ao,ap,eA,eB) = {
922+ let be = ( let an = invoke(Y, "getTWAP60", [ao, false], nil)
915923 if ($isInstanceOf(an, "(Int, Int)"))
916924 then an
917925 else throw(($getType(an) + " couldn't be cast to (Int, Int)")))._2
918- let bg = ( let an = invoke(Y, "getTWAP60", [ap, false], nil)
926+ let bf = ( let an = invoke(Y, "getTWAP60", [ap, false], nil)
919927 if ($isInstanceOf(an, "(Int, Int)"))
920928 then an
921929 else throw(($getType(an) + " couldn't be cast to (Int, Int)")))._2
922- let eB = pow(10, 0, aK(ao), 0, 0, DOWN)
923- let eC = pow(10, 0, aK(ap), 0, 0, DOWN)
924- let eD = (fraction(bf, br, eB) + fraction(bg, bs, eC))
925- let eE = if ((eA == ao))
926- then $Tuple2(bf, eB)
927- else $Tuple2(bg, eC)
928- let eF = eE._1
929- let eG = eE._2
930- fraction(fraction(eD, (ez - 100), 100), eG, eF)
930+ let eC = pow(10, 0, aK(ao), 0, 0, DOWN)
931+ let eD = pow(10, 0, aK(ap), 0, 0, DOWN)
932+ let eE = (fraction(be, bs, eC) + fraction(bf, bt, eD))
933+ let eF = if ((eB == ao))
934+ then $Tuple2(be, eC)
935+ else $Tuple2(bf, eD)
936+ let eG = eF._1
937+ let eH = eF._2
938+ fraction(fraction(eE, (eA - 100), 100), eH, eG)
931939 }
932940
933941
934942 @Callable(ad)
935-func replenishEVALONLY (ax,ez,eA,br,bs) = if (if ((100 > ez))
943+func replenishEVALONLY (ax,eA,eB,bs,bt) = if (if ((100 > eA))
936944 then true
937- else (ez > 300))
945+ else (eA > 300))
938946 then throw("Leverage can't be <100 and >300")
939947 else {
940- let bb = valueOrErrorMessage(getString(this, (L + ax)), "Pool is not inited")
941- let eH = at(Address(fromBase58String(ax)), bb)
942- let dy = eH._1
943- let dz = eH._2
944- let ar = eH._3
945- let as = eH._4
946- let aq = eH._5
947- let cu = if ((ez > 100))
948- then ey(br, bs, dy, dz, ez, eA)
948+ let ba = valueOrErrorMessage(getString(this, (L + ax)), "Pool is not inited")
949+ let eI = at(Address(fromBase58String(ax)), ba)
950+ let dz = eI._1
951+ let dA = eI._2
952+ let ar = eI._3
953+ let as = eI._4
954+ let aq = eI._5
955+ let cv = if ((eA > 100))
956+ then ez(bs, bt, dz, dA, eA, eB)
949957 else 0
950- let eI = if ((eA == dy))
951- then $Tuple2((br + cu), bs)
952- else $Tuple2(br, (bs + cu))
953- let eJ = eI._1
954- let eK = eI._2
955- let cq = cm(bb, ax, eJ, dy, eK, dz, ar, as)
956- let eL = (ar + eJ)
957- let eM = (as + eK)
958- let eN = ct(bb, ax, cq, aq, dy, dz, eL, eM, cu, eA)
959- if ((eN == eN))
958+ let eJ = if ((eB == dz))
959+ then $Tuple2((bs + cv), bt)
960+ else $Tuple2(bs, (bt + cv))
961+ let eK = eJ._1
962+ let eL = eJ._2
963+ let cr = cn(ba, ax, eK, dz, eL, dA, ar, as)
964+ let eM = (ar + eK)
965+ let eN = (as + eL)
966+ let eO = cu(ba, ax, cr, aq, dz, dA, eM, eN, cv, eB)
967+ if ((eO == eO))
960968 then {
961- let eO = eN._2
962- let eP = eN._1
963- let eQ = fraction(as, j, ar)
964- let eR = fraction((eM - eO), j, (eL - eP))
965- let eS = (j - fraction(eQ, j, eR))
966- let eT = if ((0 > eS))
967- then (eS * -1)
968- else eS
969- $Tuple2(nil, [eP, eO, eT])
969+ let eP = eO._2
970+ let eQ = eO._1
971+ let eR = fraction(as, j, ar)
972+ let eS = fraction((eN - eP), j, (eM - eQ))
973+ let eT = (j - fraction(eR, j, eS))
974+ let eU = if ((0 > eT))
975+ then (eT * -1)
976+ else eT
977+ $Tuple2(nil, [eQ, eP, eU])
970978 }
971979 else throw("Strict value is not equal to itself.")
972980 }
975983
976984 @Callable(ad)
977985 func getShareAssetPriceREADONLY (aq) = {
978- let eU = aZ([aq])
979- $Tuple2(nil, eU[0])
986+ let eV = aZ(aq)
987+ $Tuple2(nil, eV)
980988 }
981989
982990
983991
984992 @Callable(ad)
985-func getUserPositionShareAmountREADONLY (aA,cR) = {
986- let ax = valueOrErrorMessage(getString(this, (((aA + "_") + cR) + u)), "Unknown position")
987- let cu = getIntegerValue(this, (((((ax + "_") + aA) + "_") + cR) + v))
988- let dQ = eh(aA, ax, cR, (cu > 0))
989- $Tuple2(nil, dQ)
993+func getUserPositionShareAmountREADONLY (aA,cS) = {
994+ let ax = valueOrErrorMessage(getString(this, (((aA + "_") + cS) + u)), "Unknown position")
995+ let cv = getIntegerValue(this, (((((ax + "_") + aA) + "_") + cS) + v))
996+ let dR = ei(aA, ax, cS, (cv > 0))
997+ $Tuple2(nil, dR)
990998 }
991999
9921000
9931001
9941002 @Callable(ad)
995-func replenish (ax,ez,eA) = if (if ((100 > ez))
996- then true
997- else (ez > 300))
998- then throw("Leverage can't be <100 and >300")
999- else {
1000- let bb = valueOrErrorMessage(getString(this, (L + ax)), "Pool is not inited")
1001- let eV = at(Address(fromBase58String(ax)), bb)
1002- let dy = eV._1
1003- let dz = eV._2
1004- let ar = eV._3
1005- let as = eV._4
1006- let aq = eV._5
1007- let eW = if ((size(ad.payments) == 2))
1008- then if ((aI(ad.payments[0].assetId) != dy))
1009- then throw("Wrong payment asset A")
1010- else if ((aI(ad.payments[1].assetId) != dz))
1011- then throw("Wrong payment asset B")
1012- else $Tuple4(ad.payments[0].amount, dy, ad.payments[1].amount, dz)
1013- else if ((size(ad.payments) == 1))
1014- then if ((aI(ad.payments[0].assetId) == dy))
1015- then $Tuple4(ad.payments[0].amount, dy, 0, dz)
1016- else if ((aI(ad.payments[0].assetId) == dz))
1017- then $Tuple4(0, dy, ad.payments[0].amount, dz)
1018- else throw("Wrong payment")
1019- else throw("One or two payments expected")
1020- let br = eW._1
1021- let eX = eW._2
1022- let bs = eW._3
1023- let eY = eW._4
1024- let eZ = az(ax, toString(ad.caller))
1025- if ((ez > 100))
1026- then {
1027- let cu = ey(br, bs, eX, eY, ez, eA)
1028- let ev = makeString([toString(ad.caller), ax, toString(br), eX, toString(bs), eY, toString(ar), toString(as), aq, eA, toString(cu)], ",")
1029- let fa = {
1030- let an = invoke(this, "createNewRequest", [ev], nil)
1003+func getUserPositionInDollarsREADONLY (aA,eW,cS) = {
1004+ func eX (aQ,ax) = {
1005+ let eY = aQ
1006+ let eZ = eY._1
1007+ let fa = eY._2
1008+ let fb = eY._3
1009+ let ba = valueOrErrorMessage(getString(this, (L + ax)), "Pool is not inited")
1010+ let fc = at(Address(fromBase58String(ax)), ba)
1011+ let dz = fc._1
1012+ let dA = fc._2
1013+ let ar = fc._3
1014+ let as = fc._4
1015+ let aq = fc._5
1016+ let cv = valueOrElse(getInteger(this, (((((ax + "_") + aA) + "_") + cS[fb]) + v)), 0)
1017+ let dR = ei(aA, ax, cS[fb], (cv > 0))
1018+ let eV = aZ(aq)
1019+ let fd = pow(10, 0, aK(aq), 0, 0, DOWN)
1020+ let fe = fraction(dR, eV, fd)
1021+ if ((cv == 0))
1022+ then $Tuple3((eZ :+ fe), (fa :+ 0), (fb + 1))
1023+ else {
1024+ let dT = getStringValue(this, (((((ax + "_") + aA) + "_") + cS[fb]) + w))
1025+ let dS = {
1026+ let an = invoke(aH(), "getAssetDebt", [false, ((((ax + "_") + aA) + "_") + cS[fb]), dT], nil)
10311027 if ($isInstanceOf(an, "Int"))
10321028 then an
10331029 else throw(($getType(an) + " couldn't be cast to Int"))
10341030 }
1035- if ((fa == fa))
1031+ let ff = ( let an = invoke(Y, "getTWAP60", [dT, false], nil)
1032+ if ($isInstanceOf(an, "(Int, Int)"))
1033+ then an
1034+ else throw(($getType(an) + " couldn't be cast to (Int, Int)")))._1
1035+ let fg = pow(10, 0, aK(dT), 0, 0, DOWN)
1036+ let fh = fraction(dS, ff, fg)
1037+ $Tuple3((eZ :+ fe), (fa :+ fh), (fb + 1))
1038+ }
1039+ }
1040+
1041+ let fi = {
1042+ let aS = eW
1043+ let aT = size(aS)
1044+ let aU = $Tuple3(nil, nil, 0)
1045+ func aV (aW,aX) = if ((aX >= aT))
1046+ then aW
1047+ else eX(aW, aS[aX])
1048+
1049+ func aY (aW,aX) = if ((aX >= aT))
1050+ then aW
1051+ else throw("List size exceeds 20")
1052+
1053+ aY(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aU, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
1054+ }
1055+ let fj = fi._1
1056+ let dS = fi._2
1057+ $Tuple2(nil, $Tuple2(fj, dS))
1058+ }
1059+
1060+
1061+
1062+@Callable(ad)
1063+func replenish (ax,eA,eB) = if (if ((100 > eA))
1064+ then true
1065+ else (eA > 300))
1066+ then throw("Leverage can't be <100 and >300")
1067+ else {
1068+ let ba = valueOrErrorMessage(getString(this, (L + ax)), "Pool is not inited")
1069+ let fk = at(Address(fromBase58String(ax)), ba)
1070+ let dz = fk._1
1071+ let dA = fk._2
1072+ let ar = fk._3
1073+ let as = fk._4
1074+ let aq = fk._5
1075+ let fl = if ((size(ad.payments) == 2))
1076+ then if ((aI(ad.payments[0].assetId) != dz))
1077+ then throw("Wrong payment asset A")
1078+ else if ((aI(ad.payments[1].assetId) != dA))
1079+ then throw("Wrong payment asset B")
1080+ else $Tuple4(ad.payments[0].amount, dz, ad.payments[1].amount, dA)
1081+ else if ((size(ad.payments) == 1))
1082+ then if ((aI(ad.payments[0].assetId) == dz))
1083+ then $Tuple4(ad.payments[0].amount, dz, 0, dA)
1084+ else if ((aI(ad.payments[0].assetId) == dA))
1085+ then $Tuple4(0, dz, ad.payments[0].amount, dA)
1086+ else throw("Wrong payment")
1087+ else throw("One or two payments expected")
1088+ let bs = fl._1
1089+ let fm = fl._2
1090+ let bt = fl._3
1091+ let fn = fl._4
1092+ let fo = az(ax, toString(ad.caller))
1093+ if ((eA > 100))
1094+ then {
1095+ let cv = ez(bs, bt, fm, fn, eA, eB)
1096+ let ew = makeString([toString(ad.caller), ax, toString(bs), fm, toString(bt), fn, toString(ar), toString(as), aq, eB, toString(cv)], ",")
1097+ let fp = {
1098+ let an = invoke(this, "createNewRequest", [ew], nil)
1099+ if ($isInstanceOf(an, "Int"))
1100+ then an
1101+ else throw(($getType(an) + " couldn't be cast to Int"))
1102+ }
1103+ if ((fp == fp))
10361104 then {
1037- let fb = [((toString(ad.caller) + "_") + toString(eZ)), aq, eA, cu, toString(this), "replenishFromLand", toString(valueOrErrorMessage(fa, "Can't create new request"))]
1038- let bR = reentrantInvoke(aH(), "flashPosition", fb, nil)
1039- if ((bR == bR))
1105+ let fq = [((toString(ad.caller) + "_") + toString(fo)), aq, eB, cv, toString(this), "replenishFromLand", toString(valueOrErrorMessage(fp, "Can't create new request"))]
1106+ let bS = reentrantInvoke(aH(), "flashPosition", fq, nil)
1107+ if ((bS == bS))
10401108 then nil
10411109 else throw("Strict value is not equal to itself.")
10421110 }
10431111 else throw("Strict value is not equal to itself.")
10441112 }
10451113 else {
1046- let fc = cF(bb, ax, h, br, dy, bs, dz, ar, as, aq)
1047- let fd = fc._1
1048- let dO = fc._2
1049- (cP(ax, toString(ad.caller), fd, dO, eZ, aq, bb, false) ++ bn(dy, dz, aq))
1114+ let fr = cG(ba, ax, h, bs, dz, bt, dA, ar, as, aq)
1115+ let fs = fr._1
1116+ let dP = fr._2
1117+ (cQ(ax, toString(ad.caller), fs, dP, fo, aq, ba, false) ++ bn(dz, dA, aq))
10501118 }
10511119 }
10521120
10531121
10541122
10551123 @Callable(ad)
1056-func replenishFromLand (eu) = {
1057- let fe = et(eu)
1058- let aA = fe._1
1059- let ax = fe._2
1060- let br = fe._3
1061- let dy = fe._4
1062- let bs = fe._5
1063- let dz = fe._6
1064- let ar = fe._7
1065- let as = fe._8
1066- let aq = fe._9
1067- let ew = fe._10
1068- let ex = fe._11
1124+func replenishFromLand (ev) = {
1125+ let ft = eu(ev)
1126+ let aA = ft._1
1127+ let ax = ft._2
1128+ let bs = ft._3
1129+ let dz = ft._4
1130+ let bt = ft._5
1131+ let dA = ft._6
1132+ let ar = ft._7
1133+ let as = ft._8
1134+ let aq = ft._9
1135+ let ex = ft._10
1136+ let ey = ft._11
10691137 if ((size(ad.payments) != 1))
10701138 then throw("Wrong payment size")
1071- else if (if ((aI(ad.payments[0].assetId) != ew))
1139+ else if (if ((aI(ad.payments[0].assetId) != ex))
10721140 then true
1073- else (ad.payments[0].amount != ex))
1141+ else (ad.payments[0].amount != ey))
10741142 then throw("Wrong payment")
10751143 else {
1076- let ff = if ((dy == ew))
1077- then $Tuple2((br + ad.payments[0].amount), bs)
1078- else $Tuple2(br, (bs + ad.payments[0].amount))
1079- let fg = ff._1
1080- let fh = ff._2
1081- let bb = valueOrErrorMessage(getString(this, (L + ax)), "Unknown pool")
1082- let fi = cF(bb, ax, g, br, dy, bs, dz, ar, as, aq)
1083- let fd = fi._1
1084- let dO = fi._2
1085- let cR = az(ax, toString(ad.caller))
1086- let fj = [IntegerEntry((((((ax + "_") + aA) + "_") + toString(cR)) + v), ex), StringEntry((((((ax + "_") + aA) + "_") + toString(cR)) + w), ew)]
1087- let fk = cP(ax, aA, fd, dO, cR, aq, bb, true)
1088- $Tuple2((((fk ++ bn(dy, dz, aq)) ++ fj) :+ DeleteEntry((eu + J))), fd)
1144+ let fu = if ((dz == ex))
1145+ then $Tuple2((bs + ad.payments[0].amount), bt)
1146+ else $Tuple2(bs, (bt + ad.payments[0].amount))
1147+ let fv = fu._1
1148+ let fw = fu._2
1149+ let ba = valueOrErrorMessage(getString(this, (L + ax)), "Unknown pool")
1150+ let fx = cG(ba, ax, g, bs, dz, bt, dA, ar, as, aq)
1151+ let fs = fx._1
1152+ let dP = fx._2
1153+ let cS = az(ax, toString(ad.caller))
1154+ let fy = [IntegerEntry((((((ax + "_") + aA) + "_") + toString(cS)) + v), ey), StringEntry((((((ax + "_") + aA) + "_") + toString(cS)) + w), ex)]
1155+ let fz = cQ(ax, aA, fs, dP, cS, aq, ba, true)
1156+ $Tuple2((((fz ++ bn(dz, dA, aq)) ++ fy) :+ DeleteEntry((ev + J))), fs)
10891157 }
10901158 }
10911159
10921160
10931161
10941162 @Callable(ad)
1095-func withdraw (ax,ei) = en(toString(ad.caller), ax, toString(ei), false)
1163+func withdraw (ax,ej) = eo(toString(ad.caller), ax, toString(ej), false)
10961164
10971165
10981166
10991167 @Callable(ad)
1100-func createUpdateStopLoss (ei,fl,af,fm) = {
1101- let fn = ( let an = invoke(Y, "getTWAP60", [af, false], nil)
1168+func createUpdateStopLoss (ej,fA,af,fB) = {
1169+ let fC = ( let an = invoke(Y, "getTWAP60", [af, false], nil)
11021170 if ($isInstanceOf(an, "(Int, Int)"))
11031171 then an
11041172 else throw(($getType(an) + " couldn't be cast to (Int, Int)")))._1
1105- if (!(isDefined(getInteger(this, (((((fl + "_") + toString(ad.caller)) + "_") + toString(ei)) + t)))))
1173+ if (!(isDefined(getInteger(this, (((((fA + "_") + toString(ad.caller)) + "_") + toString(ej)) + t)))))
11061174 then throw("There are no user position")
1107- else if ((0 >= fm))
1175+ else if ((0 >= fB))
11081176 then throw("Price must be greater than 0")
1109- else if ((fm > fn))
1177+ else if ((fB > fC))
11101178 then throw("Price must be less than current token price")
1111- else [IntegerEntry((((((((toString(ad.caller) + "_") + toString(ei)) + "_") + fl) + "_") + af) + P), fm)]
1179+ else [IntegerEntry((((((((toString(ad.caller) + "_") + toString(ej)) + "_") + fA) + "_") + af) + P), fB)]
11121180 }
11131181
11141182
11151183
11161184 @Callable(ad)
1117-func deleteStopLoss (ei,fl,af) = if (!(isDefined(getInteger(this, (((((((toString(ad.caller) + "_") + toString(ei)) + "_") + fl) + "_") + af) + P)))))
1185+func deleteStopLoss (ej,fA,af) = if (!(isDefined(getInteger(this, (((((((toString(ad.caller) + "_") + toString(ej)) + "_") + fA) + "_") + af) + P)))))
11181186 then throw("No entry")
1119- else [DeleteEntry((((((((toString(ad.caller) + "_") + toString(ei)) + "_") + fl) + "_") + af) + P))]
1187+ else [DeleteEntry((((((((toString(ad.caller) + "_") + toString(ej)) + "_") + fA) + "_") + af) + P))]
11201188
11211189
11221190
11231191 @Callable(ad)
1124-func createNewRequest (bQ) = valueOrElse(ac(ad), {
1125- let fa = (valueOrElse(getInteger(this, K), 0) + 1)
1126- $Tuple2([StringEntry((toString(fa) + J), bQ), IntegerEntry(K, fa)], fa)
1192+func createNewRequest (bR) = valueOrElse(ac(ad), {
1193+ let fp = (valueOrElse(getInteger(this, K), 0) + 1)
1194+ $Tuple2([StringEntry((toString(fp) + J), bR), IntegerEntry(K, fp)], fp)
11271195 })
11281196
11291197
11301198
11311199 @Callable(ad)
1132-func stopLoss (aA,ei,ax,af) = {
1133- let fn = ( let an = invoke(Y, "getTWAP60", [af, false], nil)
1200+func stopLoss (aA,ej,ax,af) = {
1201+ let fC = ( let an = invoke(Y, "getTWAP60", [af, false], nil)
11341202 if ($isInstanceOf(an, "(Int, Int)"))
11351203 then an
11361204 else throw(($getType(an) + " couldn't be cast to (Int, Int)")))._1
1137- if (!(isDefined(getInteger(this, (((((((aA + "_") + toString(ei)) + "_") + ax) + "_") + af) + P)))))
1205+ if (!(isDefined(getInteger(this, (((((((aA + "_") + toString(ej)) + "_") + ax) + "_") + af) + P)))))
11381206 then throw("No entry")
1139- else (en(toString(ad.caller), ax, toString(ei), true) :+ DeleteEntry((((((((aA + "_") + toString(ei)) + "_") + ax) + "_") + af) + P)))
1207+ else (eo(toString(ad.caller), ax, toString(ej), true) :+ DeleteEntry((((((((aA + "_") + toString(ej)) + "_") + ax) + "_") + af) + P)))
11401208 }
11411209
11421210
11431211
11441212 @Callable(ad)
1145-func liquidate (aA,ei,fo) = {
1146- let ax = valueOrErrorMessage(getString(this, (((aA + "_") + ei) + u)), "no position")
1147- let bb = valueOrErrorMessage(getString(this, (L + ax)), "Pool is not inited")
1148- let fp = at(Address(fromBase58String(ax)), bb)
1149- let dy = fp._1
1150- let dz = fp._2
1151- let ar = fp._3
1152- let as = fp._4
1153- let aq = fp._5
1154- let bL = bM(ax, bb, aq, fo)
1155- let cu = getIntegerValue(this, (((((ax + "_") + aA) + "_") + ei) + v))
1156- let dS = getStringValue(this, (((((ax + "_") + aA) + "_") + ei) + w))
1157- let dQ = eh(aA, ax, ei, (cu > 0))
1158- if ((cu == 0))
1213+func liquidate (aA,ej,fD) = {
1214+ let ax = valueOrErrorMessage(getString(this, (((aA + "_") + ej) + u)), "no position")
1215+ let ba = valueOrErrorMessage(getString(this, (L + ax)), "Pool is not inited")
1216+ let fE = at(Address(fromBase58String(ax)), ba)
1217+ let dz = fE._1
1218+ let dA = fE._2
1219+ let ar = fE._3
1220+ let as = fE._4
1221+ let aq = fE._5
1222+ let bM = bN(ax, ba, aq, fD)
1223+ let cv = getIntegerValue(this, (((((ax + "_") + aA) + "_") + ej) + v))
1224+ let dT = getStringValue(this, (((((ax + "_") + aA) + "_") + ej) + w))
1225+ let dR = ei(aA, ax, ej, (cv > 0))
1226+ if ((cv == 0))
11591227 then throw("You can't liquidate position without borrow")
1160- else [IntegerEntry((((((ax + "_") + aA) + "_") + ei) + y), getIntegerValue(this, (ax + B))), IntegerEntry((ax + A), (ay(ax) - fo)), IntegerEntry((ax + z), (aw(ax) - fo)), IntegerEntry((((((ax + "_") + aA) + "_") + ei) + t), (dQ - fo)), ScriptTransfer(ad.caller, bL, fromBase58String(aq))]
1228+ else [IntegerEntry((((((ax + "_") + aA) + "_") + ej) + y), getIntegerValue(this, (ax + B))), IntegerEntry((ax + A), (ay(ax) - fD)), IntegerEntry((ax + z), (aw(ax) - fD)), IntegerEntry((((((ax + "_") + aA) + "_") + ej) + t), (dR - fD)), ScriptTransfer(ad.caller, bM, fromBase58String(aq))]
11611229 }
11621230
11631231
11641232
11651233 @Callable(ad)
1166-func capitalizeExKeeper (ax,au,fq,fr,fs,dc,dd,de,df,dg,dh,di) = {
1167- let ft = if (fs)
1168- then cC(au, ax)
1234+func capitalizeExKeeper (ax,au,fF,fG,fH,dd,de,df,dg,dh,di,dj) = {
1235+ let fI = if (fH)
1236+ then cD(au, ax)
11691237 else {
1170- let fu = if ((au == a))
1238+ let fJ = if ((au == a))
11711239 then aa
11721240 else ab
1173- $Tuple2(fr, fu)
1241+ $Tuple2(fG, fJ)
11741242 }
1175- let fv = ft._1
1176- let fu = ft._2
1177- let fw = cY(fq, fr, fu, dc, dd, de, df, dg, dh, di)
1178- let bD = (fv - fr)
1179- let fx = if ((bD > 0))
1180- then [IntegerEntry((ax + N), (bD + valueOrElse(getInteger(this, (ax + N)), 0)))]
1243+ let fK = fI._1
1244+ let fJ = fI._2
1245+ let fL = cZ(fF, fG, fJ, dd, de, df, dg, dh, di, dj)
1246+ let bE = (fK - fG)
1247+ let fM = if ((bE > 0))
1248+ then [IntegerEntry((ax + N), (bE + valueOrElse(getInteger(this, (ax + N)), 0)))]
11811249 else nil
1182- (du(ax, au, fq, fw) ++ fx)
1250+ (dv(ax, au, fF, fL) ++ fM)
11831251 }
11841252
11851253
11861254
11871255 @Callable(ad)
1188-func capitalizeExPuzzle (ax,au,fq,fr,fs,dl,dm,di) = {
1189- let fy = if (fs)
1190- then cC(au, ax)
1256+func capitalizeExPuzzle (ax,au,fF,fG,fH,dm,dn,dj) = {
1257+ let fN = if (fH)
1258+ then cD(au, ax)
11911259 else {
1192- let fu = if ((au == a))
1260+ let fJ = if ((au == a))
11931261 then aa
11941262 else ab
1195- $Tuple2(fr, fu)
1263+ $Tuple2(fG, fJ)
11961264 }
1197- let fv = fy._1
1198- let fu = fy._2
1199- let fw = dk(fq, fr, fu, dl, dm, di)
1200- let bD = (fv - fr)
1201- let fx = if ((bD > 0))
1202- then [IntegerEntry((ax + N), (bD + valueOrElse(getInteger(this, (ax + N)), 0)))]
1265+ let fK = fN._1
1266+ let fJ = fN._2
1267+ let fL = dl(fF, fG, fJ, dm, dn, dj)
1268+ let bE = (fK - fG)
1269+ let fM = if ((bE > 0))
1270+ then [IntegerEntry((ax + N), (bE + valueOrElse(getInteger(this, (ax + N)), 0)))]
12031271 else nil
1204- (du(ax, au, fq, fw) ++ fx)
1272+ (dv(ax, au, fF, fL) ++ fM)
12051273 }
12061274
12071275
12081276
12091277 @Callable(ad)
1210-func capitalizeExSwopFi (ax,au,fq,fr,fs,do,dp,dq,dr,ds,dt,di) = {
1211- let fz = if (fs)
1212- then cC(au, ax)
1278+func capitalizeExSwopFi (ax,au,fF,fG,fH,dp,dq,dr,ds,dt,du,dj) = {
1279+ let fO = if (fH)
1280+ then cD(au, ax)
12131281 else {
1214- let fu = if ((au == a))
1282+ let fJ = if ((au == a))
12151283 then aa
12161284 else ab
1217- $Tuple2(fr, fu)
1285+ $Tuple2(fG, fJ)
12181286 }
1219- let fv = fz._1
1220- let fu = fz._2
1221- let fw = dn(fq, fr, fu, do, dp, dq, dr, ds, dt, di)
1222- let bD = (fv - fr)
1223- let fx = if ((bD > 0))
1224- then [IntegerEntry((ax + N), (bD + valueOrElse(getInteger(this, (ax + N)), 0)))]
1287+ let fK = fO._1
1288+ let fJ = fO._2
1289+ let fL = do(fF, fG, fJ, dp, dq, dr, ds, dt, du, dj)
1290+ let bE = (fK - fG)
1291+ let fM = if ((bE > 0))
1292+ then [IntegerEntry((ax + N), (bE + valueOrElse(getInteger(this, (ax + N)), 0)))]
12251293 else nil
1226- (du(ax, au, fq, fw) ++ fx)
1294+ (dv(ax, au, fF, fL) ++ fM)
12271295 }
12281296
12291297
12301298
12311299 @Callable(ad)
1232-func initNewPool (au,ak,fA,fB,fC,fD,fE,fF) = if (if ((au != a))
1300+func initNewPool (au,ak,fP,fQ,fR,fS,fT,fU) = if (if ((au != a))
12331301 then (au != b)
12341302 else false)
12351303 then throw("Wrong type")
12361304 else {
1237- let fG = at(Address(fromBase58String(ak)), au)
1238- let ao = fG._1
1239- let ap = fG._2
1240- let fH = fG._3
1241- let fI = fG._4
1242- let aq = fG._5
1243-[IntegerEntry((ak + D), fA), IntegerEntry((ak + E), fB), IntegerEntry((ak + F), fC), IntegerEntry((ak + G), fD), IntegerEntry((ak + H), fE), IntegerEntry((ak + I), fF), IntegerEntry((ak + B), 0), IntegerEntry((ak + C), 0), StringEntry((L + ak), au), StringEntry((aq + M), ak)]
1305+ let fV = at(Address(fromBase58String(ak)), au)
1306+ let ao = fV._1
1307+ let ap = fV._2
1308+ let fW = fV._3
1309+ let fX = fV._4
1310+ let aq = fV._5
1311+[IntegerEntry((ak + D), fP), IntegerEntry((ak + E), fQ), IntegerEntry((ak + F), fR), IntegerEntry((ak + G), fS), IntegerEntry((ak + H), fT), IntegerEntry((ak + I), fU), IntegerEntry((ak + B), 0), IntegerEntry((ak + C), 0), StringEntry((L + ak), au), StringEntry((aq + M), ak)]
12441312 }
12451313
12461314
12471315
12481316 @Callable(ad)
1249-func capitalizeTest (ax,bb,dv,dw) = {
1317+func capitalizeTest (ax,ba,dw,dx) = {
12501318 let ak = Address(fromBase58String(ax))
1251- let fJ = at(ak, bb)
1252- let dy = fJ._1
1253- let dz = fJ._2
1254- let ar = fJ._3
1255- let as = fJ._4
1256- let aq = fJ._5
1257- let fK = if ((dv == dy))
1258- then $Tuple2(dw, 0)
1259- else $Tuple2(0, dw)
1260- let br = fK._1
1261- let bs = fK._2
1262- let fL = cF(bb, ax, i, br, dy, bs, dz, ar, as, aq)
1263- let cQ = fL._1
1264- let dC = fL._2
1265- let dD = valueOrElse(getInteger(this, (ax + B)), 0)
1266- let dE = valueOrElse(getInteger(this, (ax + C)), 0)
1267- let dF = aw(ax)
1268- let dG = ay(ax)
1269- let dH = fraction(dG, j, dF)
1270- let dI = fraction(cQ, dH, j)
1271- let dJ = (cQ - dI)
1272- let dK = if ((dG > 0))
1273- then (dD + fraction(dI, k, dG))
1319+ let fY = at(ak, ba)
1320+ let dz = fY._1
1321+ let dA = fY._2
1322+ let ar = fY._3
1323+ let as = fY._4
1324+ let aq = fY._5
1325+ let fZ = if ((dw == dz))
1326+ then $Tuple2(dx, 0)
1327+ else $Tuple2(0, dx)
1328+ let bs = fZ._1
1329+ let bt = fZ._2
1330+ let ga = cG(ba, ax, i, bs, dz, bt, dA, ar, as, aq)
1331+ let cR = ga._1
1332+ let dD = ga._2
1333+ let dE = valueOrElse(getInteger(this, (ax + B)), 0)
1334+ let dF = valueOrElse(getInteger(this, (ax + C)), 0)
1335+ let dG = aw(ax)
1336+ let dH = ay(ax)
1337+ let dI = fraction(dH, j, dG)
1338+ let dJ = fraction(cR, dI, j)
1339+ let dK = (cR - dJ)
1340+ let dL = if ((dH > 0))
1341+ then (dE + fraction(dJ, k, dH))
12741342 else 0
1275- let dL = if (((dF - dG) > 0))
1276- then (dE + fraction(dJ, k, (dF - dG)))
1343+ let dM = if (((dG - dH) > 0))
1344+ then (dF + fraction(dK, k, (dG - dH)))
12771345 else 0
1278- let dM = fraction(dI, aB(ax, d), l)
1279- let dN = fraction(dJ, aB(ax, c), l)
1280- let dO = bM(ax, bb, aq, (dM + dN))
1281- if ((dO == dO))
1282- then ([IntegerEntry((ax + B), dK), IntegerEntry((ax + C), dL), IntegerEntry((ax + z), ((dF + cQ) - dO)), IntegerEntry((ax + A), ((dG + dI) - dM)), ScriptTransfer(W, (dM + dN), fromBase58String(aq))] ++ bn(dy, dz, aq))
1346+ let dN = fraction(dJ, aB(ax, d), l)
1347+ let dO = fraction(dK, aB(ax, c), l)
1348+ let dP = bN(ax, ba, aq, (dN + dO))
1349+ if ((dP == dP))
1350+ then ([IntegerEntry((ax + B), dL), IntegerEntry((ax + C), dM), IntegerEntry((ax + z), ((dG + cR) - dP)), IntegerEntry((ax + A), ((dH + dJ) - dN)), ScriptTransfer(W, (dN + dO), fromBase58String(aq))] ++ bn(dz, dA, aq))
12831351 else throw("Strict value is not equal to itself.")
12841352 }
12851353
12881356 @Callable(ad)
12891357 func claimFarmedTest (au,ax) = if ((au == a))
12901358 then {
1291- let cD = ae(aa)
1292- if ((cD == cD))
1359+ let cE = ae(aa)
1360+ if ((cE == cE))
12931361 then {
1294- let bR = invoke(aD(), "claim", [ax], nil)
1295- if ((bR == bR))
1362+ let bS = invoke(aD(), "claim", [ax], nil)
1363+ if ((bS == bS))
12961364 then {
1297- let cE = ae(aa)
1298- $Tuple2(nil, $Tuple2((cE - cD), aa))
1365+ let cF = ae(aa)
1366+ $Tuple2(nil, $Tuple2((cF - cE), aa))
12991367 }
13001368 else throw("Strict value is not equal to itself.")
13011369 }
13031371 }
13041372 else if ((au == b))
13051373 then {
1306- let cD = ae(ab)
1307- if ((cD == cD))
1374+ let cE = ae(ab)
1375+ if ((cE == cE))
13081376 then {
1309- let bR = invoke(aE(Address(fromBase58String(ax))), "claimWX", [ax], nil)
1310- if ((bR == bR))
1377+ let bS = invoke(aE(Address(fromBase58String(ax))), "claimWX", [ax], nil)
1378+ if ((bS == bS))
13111379 then {
1312- let cE = ae(ab)
1313- $Tuple2(nil, $Tuple2((cE - cD), ab))
1380+ let cF = ae(ab)
1381+ $Tuple2(nil, $Tuple2((cF - cE), ab))
13141382 }
13151383 else throw("Strict value is not equal to itself.")
13161384 }
13191387 else throw("Wrong pool type")
13201388
13211389
1322-@Verifier(fM)
1323-func fN () = sigVerify(fM.bodyBytes, fM.proofs[0], fM.senderPublicKey)
1390+@Verifier(gb)
1391+func gc () = sigVerify(gb.bodyBytes, gb.proofs[0], gb.senderPublicKey)
13241392
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = "SF"
55
66 let b = "WX"
77
88 let c = "capNoLoan"
99
1010 let d = "capLoan"
1111
1212 let e = "stopLossNoLoan"
1313
1414 let f = "stopLossLoan"
1515
1616 let g = "loan"
1717
1818 let h = "noLoan"
1919
2020 let i = "noFee"
2121
2222 let j = 100000000
2323
2424 let k = 10000000000
2525
2626 let l = 1000000
2727
2828 let m = "A_asset_balance"
2929
3030 let n = "B_asset_balance"
3131
3232 let o = "A_asset_id"
3333
3434 let p = "B_asset_id"
3535
3636 let q = "share_asset_id"
3737
3838 let r = "share_asset_supply"
3939
4040 let s = "commission"
4141
4242 let t = "_user_position"
4343
4444 let u = "_user_position_pool"
4545
4646 let v = "_user_position_borrow_amount"
4747
4848 let w = "_user_position_borrow_asset_id"
4949
5050 let x = "_user_position_number"
5151
5252 let y = "_user_position_interest"
5353
5454 let z = "_pool_total"
5555
5656 let A = "_pool_total_loan"
5757
5858 let B = "_pool_interest_loan"
5959
6060 let C = "_pool_interest_no_loan"
6161
6262 let D = "_axly_fee_without_loan"
6363
6464 let E = "_axly_fee_with_loan"
6565
6666 let F = "_axly_fee_cap_with_loan"
6767
6868 let G = "_axly_fee_cap_no_loan"
6969
7070 let H = "_axly_fee_stoploss_with_loan"
7171
7272 let I = "_axly_fee_stoploss_no_loan"
7373
7474 let J = "_request_id"
7575
7676 let K = "requests_iter"
7777
7878 let L = "pool_"
7979
8080 let M = "_pool_share_id"
8181
8282 let N = "_pool_cap_change"
8383
8484 let O = "last_price"
8585
8686 let P = "_stop_loss"
8787
8888 let Q = "axly_money_box"
8989
9090 let R = "swopfi_farming_addr"
9191
9292 let S = "lend_service_addr"
9393
9494 let T = "price_oracle"
9595
9696 let U = "exchange_contract"
9797
9898 let V = "wx_swap_contract"
9999
100100 let W = Address(fromBase58String(valueOrErrorMessage(getString(this, Q), "No axly moneyBox address")))
101101
102102 let X = Address(fromBase58String(valueOrErrorMessage(getString(this, U), "No exchange contract address")))
103103
104104 let Y = Address(fromBase58String(valueOrErrorMessage(getString(this, T), "No price oracle address")))
105105
106106 let Z = Address(fromBase58String(valueOrErrorMessage(getString(this, V), "No wx swap address")))
107107
108108 let aa = base58'4W19ndijcc2CsQa9HGW2dfXKTVXhnneWWttxXrtjPmEp'
109109
110110 let ab = base58'EMAMLxDnv3xiz8RXg8Btj33jcEw3wLczL3JKYYmuubpc'
111111
112112 func ac (ad) = if ((ad.caller == this))
113113 then unit
114114 else throw("Only contract itself can call this function")
115115
116116
117117 func ae (af) = {
118118 let ag = af
119119 if ($isInstanceOf(ag, "ByteVector"))
120120 then {
121121 let ah = ag
122122 assetBalance(this, ah)
123123 }
124124 else if ($isInstanceOf(ag, "Unit"))
125125 then {
126126 let ai = ag
127127 wavesBalance(this).available
128128 }
129129 else throw("Match error")
130130 }
131131
132132
133133 func aj (ak) = $Tuple5(valueOrErrorMessage(getString(ak, o), "Can't get pool A asset id"), valueOrErrorMessage(getString(ak, p), "Can't get pool B asset id"), valueOrErrorMessage(getInteger(ak, m), "Can't get pool A asset balance"), valueOrErrorMessage(getInteger(ak, n), "Can't get pool B asset balance"), valueOrErrorMessage(getString(ak, q), "Can't get share asset id"))
134134
135135
136136 func al (ak) = {
137137 let am = {
138138 let an = invoke(ak, "getPoolConfigWrapperREADONLY", nil, nil)
139139 if ($isInstanceOf(an, "List[Any]"))
140140 then an
141141 else throw(($getType(an) + " couldn't be cast to List[Any]"))
142142 }
143143 if ((am == am))
144144 then {
145145 let ao = valueOrErrorMessage({
146146 let an = am[4]
147147 if ($isInstanceOf(an, "String"))
148148 then an
149149 else unit
150150 }, "Can't get pool A asset id")
151151 let ap = valueOrErrorMessage({
152152 let an = am[5]
153153 if ($isInstanceOf(an, "String"))
154154 then an
155155 else unit
156156 }, "Can't get pool B asset id")
157157 let aq = valueOrErrorMessage({
158158 let an = am[3]
159159 if ($isInstanceOf(an, "String"))
160160 then an
161161 else unit
162162 }, "Can't get pool LP asset id")
163163 let ar = {
164164 let an = invoke(ak, "getAccBalanceWrapperREADONLY", [ao], nil)
165165 if ($isInstanceOf(an, "Int"))
166166 then an
167167 else throw(($getType(an) + " couldn't be cast to Int"))
168168 }
169169 if ((ar == ar))
170170 then {
171171 let as = {
172172 let an = invoke(ak, "getAccBalanceWrapperREADONLY", [ap], nil)
173173 if ($isInstanceOf(an, "Int"))
174174 then an
175175 else throw(($getType(an) + " couldn't be cast to Int"))
176176 }
177177 if ((as == as))
178178 then $Tuple5(ao, ap, ar, as, aq)
179179 else throw("Strict value is not equal to itself.")
180180 }
181181 else throw("Strict value is not equal to itself.")
182182 }
183183 else throw("Strict value is not equal to itself.")
184184 }
185185
186186
187187 func at (ak,au) = if ((au == a))
188188 then aj(ak)
189189 else if ((au == b))
190190 then al(ak)
191191 else throw("Wrong pool type")
192192
193193
194194 func av (ak,au,aq) = if ((au == a))
195195 then valueOrErrorMessage(getInteger(ak, r), "Can't get share asset supply")
196196 else if ((au == b))
197197 then valueOrErrorMessage(assetInfo(fromBase58String(aq)), "Wrong ShareId").quantity
198198 else throw("Wrong pool type")
199199
200200
201201 func aw (ax) = valueOrElse(getInteger(this, (ax + z)), 0)
202202
203203
204204 func ay (ax) = valueOrElse(getInteger(this, (ax + A)), 0)
205205
206206
207207 func az (ax,aA) = (valueOrElse(getInteger(this, (aA + x)), 0) + 1)
208208
209209
210210 func aB (ax,aC) = if ((aC == d))
211211 then getIntegerValue(this, (ax + G))
212212 else if ((aC == c))
213213 then getIntegerValue(this, (ax + F))
214214 else if ((aC == g))
215215 then getIntegerValue(this, (ax + E))
216216 else if ((aC == h))
217217 then getIntegerValue(this, (ax + D))
218218 else if ((aC == i))
219219 then 0
220220 else throw("Wrong fee type")
221221
222222
223223 func aD () = Address(fromBase58String(valueOrErrorMessage(getString(this, R), "Can't get swopfi farming addr")))
224224
225225
226226 func aE (ak) = {
227227 let aF = Address(fromBase58String(valueOrErrorMessage(getString(ak, "%s__factoryContract"), "Can't get WX factory contract addr")))
228228 let aG = split(valueOrErrorMessage(getString(aF, "%s__factoryConfig"), "Can't get WX factory cfg"), "__")
229229 Address(fromBase58String(aG[1]))
230230 }
231231
232232
233233 func aH () = Address(fromBase58String(valueOrErrorMessage(getString(this, S), "Can't get lend service addr")))
234234
235235
236236 func aI (af) = {
237237 let ag = af
238238 if ($isInstanceOf(ag, "ByteVector"))
239239 then {
240240 let ah = ag
241241 toBase58String(ah)
242242 }
243243 else if ($isInstanceOf(ag, "Unit"))
244244 then {
245245 let ai = ag
246246 "WAVES"
247247 }
248248 else throw("Match error")
249249 }
250250
251251
252252 func aJ (af) = if ((af == "WAVES"))
253253 then unit
254254 else fromBase58String(af)
255255
256256
257257 func aK (af) = if ((af == "WAVES"))
258258 then 8
259259 else {
260260 let ag = assetInfo(fromBase58String(af))
261261 if ($isInstanceOf(ag, "Asset"))
262262 then {
263263 let aL = ag
264264 aL.decimals
265265 }
266266 else throw("Can't find asset")
267267 }
268268
269269
270270 func aM (af) = pow(10, 0, aK(af), 0, 0, DOWN)
271271
272272
273273 func aN (aO) = {
274274 func aP (aQ,af) = {
275275 let aR = ( let an = invoke(Y, "getTWAP60", [af, false], nil)
276276 if ($isInstanceOf(an, "(Int, Int)"))
277277 then an
278278 else throw(($getType(an) + " couldn't be cast to (Int, Int)")))._2
279279 (aQ :+ aR)
280280 }
281281
282282 let aS = aO
283283 let aT = size(aS)
284284 let aU = nil
285285 func aV (aW,aX) = if ((aX >= aT))
286286 then aW
287287 else aP(aW, aS[aX])
288288
289289 func aY (aW,aX) = if ((aX >= aT))
290290 then aW
291- else throw("List size exceeds 100")
291+ else throw("List size exceeds 50")
292292
293- aY(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aU, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100)
293+ aY(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aU, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50)
294294 }
295295
296296
297-func aZ (ba) = {
298- func aP (aQ,aq) = {
299- let ax = valueOrErrorMessage(getString(this, (aq + M)), "Can't find pool addr by share id")
300- let ak = Address(fromBase58String(ax))
301- let bb = valueOrErrorMessage(getString(this, (L + ax)), "Pool is not inited")
302- let bc = at(ak, bb)
303- let ao = bc._1
304- let ap = bc._2
305- let bd = bc._3
306- let be = bc._4
307- let bf = ( let an = invoke(Y, "getTWAP60", [ao, false], nil)
308- if ($isInstanceOf(an, "(Int, Int)"))
309- then an
310- else throw(($getType(an) + " couldn't be cast to (Int, Int)")))._2
311- let bg = ( let an = invoke(Y, "getTWAP60", [ap, false], nil)
312- if ($isInstanceOf(an, "(Int, Int)"))
313- then an
314- else throw(($getType(an) + " couldn't be cast to (Int, Int)")))._2
315- let bh = av(ak, bb, aq)
316- let bi = pow(10, 0, aK(ao), 0, 0, DOWN)
317- let bj = pow(10, 0, aK(ap), 0, 0, DOWN)
318- let bk = pow(10, 0, aK(aq), 0, 0, DOWN)
319- let bl = (fraction(bd, bf, bi) + fraction(be, bg, bj))
320- let bm = fraction(bl, bk, bh)
321- (aQ :+ bm)
322- }
297+func aZ (aq) = {
298+ let ax = valueOrErrorMessage(getString(this, (aq + M)), "Can't find pool addr by share id")
299+ let ak = Address(fromBase58String(ax))
300+ let ba = valueOrErrorMessage(getString(this, (L + ax)), "Pool is not inited")
301+ let bb = at(ak, ba)
302+ let ao = bb._1
303+ let ap = bb._2
304+ let bc = bb._3
305+ let bd = bb._4
306+ let be = ( let an = invoke(Y, "getTWAP60", [ao, false], nil)
307+ if ($isInstanceOf(an, "(Int, Int)"))
308+ then an
309+ else throw(($getType(an) + " couldn't be cast to (Int, Int)")))._2
310+ let bf = ( let an = invoke(Y, "getTWAP60", [ap, false], nil)
311+ if ($isInstanceOf(an, "(Int, Int)"))
312+ then an
313+ else throw(($getType(an) + " couldn't be cast to (Int, Int)")))._2
314+ let bg = av(ak, ba, aq)
315+ let bh = pow(10, 0, aK(ao), 0, 0, DOWN)
316+ let bi = pow(10, 0, aK(ap), 0, 0, DOWN)
317+ let bj = pow(10, 0, aK(aq), 0, 0, DOWN)
318+ let bk = (fraction(bc, be, bh) + fraction(bd, bf, bi))
319+ fraction(bk, bj, bg)
320+ }
323321
324- let aS = ba
322+
323+func bl (bm) = {
324+ func aP (aQ,aq) = (aQ :+ aZ(aq))
325+
326+ let aS = bm
325327 let aT = size(aS)
326328 let aU = nil
327329 func aV (aW,aX) = if ((aX >= aT))
328330 then aW
329331 else aP(aW, aS[aX])
330332
331333 func aY (aW,aX) = if ((aX >= aT))
332334 then aW
333- else throw("List size exceeds 50")
335+ else throw("List size exceeds 20")
334336
335- aY(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aU, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50)
337+ aY(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aU, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
336338 }
337339
338340
339341 func bn (ao,ap,aq) = {
340342 let bo = aN([ao, ap])
341- let bm = aZ([aq])
342- let bp = [toString(bo[0]), toString(bo[1]), toString(bm[0])]
343-[StringEntry(O, makeString(bp, ","))]
343+ let bp = aZ(aq)
344+ let bq = [toString(bo[0]), toString(bo[1]), toString(bp)]
345+[StringEntry(O, makeString(bq, ","))]
344346 }
345347
346348
347-func bq (bb,ak,br,ao,bs,ap,ar,as) = {
348- let bt = if ((bb == a))
349+func br (ba,ak,bs,ao,bt,ap,ar,as) = {
350+ let bu = if ((ba == a))
349351 then $Tuple2(nil, nil)
350352 else $Tuple2(split({
351- let an = invoke(ak, "evaluatePutByAmountAssetREADONLY", [br], nil)
353+ let an = invoke(ak, "evaluatePutByAmountAssetREADONLY", [bs], nil)
352354 if ($isInstanceOf(an, "String"))
353355 then an
354356 else throw(($getType(an) + " couldn't be cast to String"))
355357 }, "__"), split({
356- let an = invoke(ak, "evaluatePutByPriceAssetREADONLY", [bs], nil)
358+ let an = invoke(ak, "evaluatePutByPriceAssetREADONLY", [bt], nil)
357359 if ($isInstanceOf(an, "String"))
358360 then an
359361 else throw(($getType(an) + " couldn't be cast to String"))
360362 }, "__"))
361- if ((bt == bt))
363+ if ((bu == bu))
362364 then {
363- let bu = bt._2
364- let bv = bt._1
365- let bw = if ((bb == a))
366- then $Tuple2(fraction(j, br, ar), fraction(j, bs, as))
367- else $Tuple2(parseIntValue(bv[1]), parseIntValue(bu[1]))
368- let bx = bw._1
369- let by = bw._2
370- let bz = if ((by > bx))
365+ let bv = bu._2
366+ let bw = bu._1
367+ let bx = if ((ba == a))
368+ then $Tuple2(fraction(j, bs, ar), fraction(j, bt, as))
369+ else $Tuple2(parseIntValue(bw[1]), parseIntValue(bv[1]))
370+ let by = bx._1
371+ let bz = bx._2
372+ let bA = if ((bz > by))
371373 then {
372- let bA = if ((bb == a))
373- then fraction(as, bx, j, CEILING)
374- else parseIntValue(bv[8])
375- $Tuple5(br, bA, (bs - bA), ap, by)
374+ let bB = if ((ba == a))
375+ then fraction(as, by, j, CEILING)
376+ else parseIntValue(bw[8])
377+ $Tuple5(bs, bB, (bt - bB), ap, bz)
376378 }
377379 else {
378- let bA = if ((bb == a))
379- then fraction(ar, by, j, CEILING)
380- else parseIntValue(bu[7])
381- $Tuple5(bA, bs, (br - bA), ao, bx)
380+ let bB = if ((ba == a))
381+ then fraction(ar, bz, j, CEILING)
382+ else parseIntValue(bv[7])
383+ $Tuple5(bB, bt, (bs - bB), ao, by)
382384 }
383- let bB = bz._1
384- let bC = bz._2
385- let bD = bz._3
386- let bE = bz._4
387- let bF = bz._5
388- $Tuple5(bB, bC, bD, bE, bF)
385+ let bC = bA._1
386+ let bD = bA._2
387+ let bE = bA._3
388+ let bF = bA._4
389+ let bG = bA._5
390+ $Tuple5(bC, bD, bE, bF, bG)
389391 }
390392 else throw("Strict value is not equal to itself.")
391393 }
392394
393395
394-func bG (ak,bb,br,ao,bs,ap) = {
395- let bH = [AttachedPayment(aJ(ao), br), AttachedPayment(aJ(ap), bs)]
396- if ((bb == a))
397- then invoke(ak, "callFunction", ["replenishWithTwoTokens", ["false", "0"]], bH)
398- else invoke(ak, "put", [1000000, false], bH)
396+func bH (ak,ba,bs,ao,bt,ap) = {
397+ let bI = [AttachedPayment(aJ(ao), bs), AttachedPayment(aJ(ap), bt)]
398+ if ((ba == a))
399+ then invoke(ak, "callFunction", ["replenishWithTwoTokens", ["false", "0"]], bI)
400+ else invoke(ak, "put", [1000000, false], bI)
399401 }
400402
401403
402-func bI (ak,bb,bA,bJ) = {
403- let bH = [AttachedPayment(aJ(bJ), bA)]
404- if ((bb == a))
405- then invoke(ak, "callFunction", ["replenishWithOneToken", ["0", "false", "0"]], bH)
406- else invoke(ak, "putOneTkn", [0, false], bH)
404+func bJ (ak,ba,bB,bK) = {
405+ let bI = [AttachedPayment(aJ(bK), bB)]
406+ if ((ba == a))
407+ then invoke(ak, "callFunction", ["replenishWithOneToken", ["0", "false", "0"]], bI)
408+ else invoke(ak, "putOneTkn", [0, false], bI)
407409 }
408410
409411
410-func bK (ax,bb,aq,bL) = {
411- let bH = [AttachedPayment(fromBase58String(aq), bL)]
412- if ((bb == a))
413- then invoke(aD(), "lockShareTokens", [ax, 0], bH)
414- else invoke(aE(addressFromStringValue(ax)), "stake", nil, bH)
412+func bL (ax,ba,aq,bM) = {
413+ let bI = [AttachedPayment(fromBase58String(aq), bM)]
414+ if ((ba == a))
415+ then invoke(aD(), "lockShareTokens", [ax, 0], bI)
416+ else invoke(aE(addressFromStringValue(ax)), "stake", nil, bI)
415417 }
416418
417419
418-func bM (ax,bb,aq,bL) = {
419- let bN = if ((bb == a))
420- then $Tuple3(aD(), "withdrawShareTokens", [ax, bL])
421- else if ((bb == b))
422- then $Tuple3(aE(Address(fromBase58String(ax))), "unstake", [aq, bL])
420+func bN (ax,ba,aq,bM) = {
421+ let bO = if ((ba == a))
422+ then $Tuple3(aD(), "withdrawShareTokens", [ax, bM])
423+ else if ((ba == b))
424+ then $Tuple3(aE(Address(fromBase58String(ax))), "unstake", [aq, bM])
423425 else throw("Wrong pool type")
424- let bO = bN._1
425- let bP = bN._2
426- let bQ = bN._3
427- let bR = invoke(bO, bP, bQ, nil)
428- if ((bR == bR))
429- then bL
426+ let bP = bO._1
427+ let bQ = bO._2
428+ let bR = bO._3
429+ let bS = invoke(bP, bQ, bR, nil)
430+ if ((bS == bS))
431+ then bM
430432 else throw("Strict value is not equal to itself.")
431433 }
432434
433435
434-func bS (ax,bT,bU,ar,as,bV,bW) = {
436+func bT (ax,bU,bV,ar,as,bW,bX) = {
435437 let ak = Address(fromBase58String(ax))
436- let bX = 1000000
437- let bY = getIntegerValue(ak, s)
438- let bZ = fraction(bV, bX, (bX - bY))
439- let ca = if ((bW == bT))
438+ let bY = 1000000
439+ let bZ = getIntegerValue(ak, s)
440+ let ca = fraction(bW, bY, (bY - bZ))
441+ let cb = if ((bX == bU))
440442 then {
441- let cb = fraction(ar, bZ, (as - bZ))
442- $Tuple2(cb, bU)
443+ let cc = fraction(ar, ca, (as - ca))
444+ $Tuple2(cc, bV)
443445 }
444446 else {
445- let cb = fraction(as, bZ, (ar - bZ))
446- $Tuple2(cb, bT)
447+ let cc = fraction(as, ca, (ar - ca))
448+ $Tuple2(cc, bU)
447449 }
448- let cb = ca._1
449- let cc = ca._2
450- $Tuple2(cc, cb)
450+ let cc = cb._1
451+ let cd = cb._2
452+ $Tuple2(cd, cc)
451453 }
452454
453455
454-func cd (ax,bT,bU,ar,as,bV,bW) = {
455- let ce = getIntegerValue(Z, "%s__protocolFee")
456- let cf = getIntegerValue(Z, "%s__poolFee")
457- let cg = toBigInt(100000000)
458- let ch = if ((bW == bT))
456+func ce (ax,bU,bV,ar,as,bW,bX) = {
457+ let cf = getIntegerValue(Z, "%s__protocolFee")
458+ let cg = getIntegerValue(Z, "%s__poolFee")
459+ let ch = toBigInt(100000000)
460+ let ci = if ((bX == bU))
459461 then {
460- let cb = fraction(ar, bV, (as - bV))
461- $Tuple2(cb, bU)
462+ let cc = fraction(ar, bW, (as - bW))
463+ $Tuple2(cc, bV)
462464 }
463465 else {
464- let cb = fraction(as, bV, (ar - bV))
465- $Tuple2(cb, bT)
466+ let cc = fraction(as, bW, (ar - bW))
467+ $Tuple2(cc, bU)
466468 }
467- let cb = ch._1
468- let cc = ch._2
469- let ci = toInt(fraction(toBigInt(cb), cg, (cg - toBigInt((ce + cf)))))
470- $Tuple2(cc, ci)
469+ let cc = ci._1
470+ let cd = ci._2
471+ let cj = toInt(fraction(toBigInt(cc), ch, (ch - toBigInt((cf + cg)))))
472+ $Tuple2(cd, cj)
471473 }
472474
473475
474-func cj (au,ax,bT,bU,ar,as,bV,bW) = if ((au == a))
476+func ck (au,ax,bU,bV,ar,as,bW,bX) = if ((au == a))
475477 then {
476- let ck = bS(ax, bT, bU, ar, as, bV, bW)
477- let cc = ck._1
478- let cb = ck._2
479- invoke(addressFromStringValue(ax), "callFunction", ["exchange", ["1"]], [AttachedPayment(aJ(cc), cb)])
478+ let cl = bT(ax, bU, bV, ar, as, bW, bX)
479+ let cd = cl._1
480+ let cc = cl._2
481+ invoke(addressFromStringValue(ax), "callFunction", ["exchange", ["1"]], [AttachedPayment(aJ(cd), cc)])
480482 }
481483 else {
482- let cl = cd(ax, bT, bU, ar, as, bV, bW)
483- let cc = cl._1
484- let cb = cl._2
485- invoke(Z, "swap", [1, bW, toString(this)], [AttachedPayment(aJ(cc), cb)])
484+ let cm = ce(ax, bU, bV, ar, as, bW, bX)
485+ let cd = cm._1
486+ let cc = cm._2
487+ invoke(Z, "swap", [1, bX, toString(this)], [AttachedPayment(aJ(cd), cc)])
486488 }
487489
488490
489-func cm (bb,ax,br,ao,bs,ap,ar,as) = {
491+func cn (ba,ax,bs,ao,bt,ap,ar,as) = {
490492 let ak = addressFromStringValue(ax)
491- if ((bb == a))
493+ if ((ba == a))
492494 then {
493- let bR = {
494- let an = invoke(ak, "callFunction", ["calcLPReplenishDiffPropREADONLY", [toString(br), toString(bs), "0"]], nil)
495+ let bS = {
496+ let an = invoke(ak, "callFunction", ["calcLPReplenishDiffPropREADONLY", [toString(bs), toString(bt), "0"]], nil)
495497 if ($isInstanceOf(an, "List[Any]"))
496498 then an
497499 else throw(($getType(an) + " couldn't be cast to List[Any]"))
498500 }
499- if ((bR == bR))
501+ if ((bS == bS))
500502 then {
501- let an = bR[0]
503+ let an = bS[0]
502504 if ($isInstanceOf(an, "Int"))
503505 then an
504506 else throw(($getType(an) + " couldn't be cast to Int"))
505507 }
506508 else throw("Strict value is not equal to itself.")
507509 }
508- else if ((bb == b))
510+ else if ((ba == b))
509511 then {
510- let cn = if (if ((br > 0))
511- then (bs > 0)
512+ let co = if (if ((bs > 0))
513+ then (bt > 0)
512514 else false)
513515 then {
514- let co = bq(bb, ak, br, ao, bs, ap, ar, as)
515- let bB = co._1
516- let bC = co._2
517- let bD = co._3
518- let cp = co._4
519- let cq = co._5
520- $Tuple3(bD, cp, cq)
516+ let cp = br(ba, ak, bs, ao, bt, ap, ar, as)
517+ let bC = cp._1
518+ let bD = cp._2
519+ let bE = cp._3
520+ let cq = cp._4
521+ let cr = cp._5
522+ $Tuple3(bE, cq, cr)
521523 }
522- else if ((br > 0))
523- then $Tuple3(br, ao, 0)
524- else $Tuple3(bs, ap, 0)
525- let bD = cn._1
526- let cp = cn._2
527- let cr = cn._3
528- let cs = if ((bD > 0))
524+ else if ((bs > 0))
525+ then $Tuple3(bs, ao, 0)
526+ else $Tuple3(bt, ap, 0)
527+ let bE = co._1
528+ let cq = co._2
529+ let cs = co._3
530+ let ct = if ((bE > 0))
529531 then {
530- let bR = {
531- let an = invoke(ak, "putOneTknREADONLY", [cp, bD], nil)
532+ let bS = {
533+ let an = invoke(ak, "putOneTknREADONLY", [cq, bE], nil)
532534 if ($isInstanceOf(an, "(Int, Int, Int)"))
533535 then an
534536 else throw(($getType(an) + " couldn't be cast to (Int, Int, Int)"))
535537 }
536- if ((bR == bR))
537- then bR._1
538+ if ((bS == bS))
539+ then bS._1
538540 else throw("Strict value is not equal to itself.")
539541 }
540542 else 0
541- (cr + cs)
543+ (cs + ct)
542544 }
543545 else throw("Wrong pool type")
544546 }
545547
546548
547-func ct (bb,ax,cq,aq,ao,ap,ar,as,cu,cv) = {
549+func cu (ba,ax,cr,aq,ao,ap,ar,as,cv,cw) = {
548550 let ak = addressFromStringValue(ax)
549- let cw = if ((bb == a))
551+ let cx = if ((ba == a))
550552 then {
551- let bR = {
552- let an = invoke(ak, "callFunction", ["withdrawREADONLY", [toString(cq)]], nil)
553+ let bS = {
554+ let an = invoke(ak, "callFunction", ["withdrawREADONLY", [toString(cr)]], nil)
553555 if ($isInstanceOf(an, "List[Any]"))
554556 then an
555557 else throw(($getType(an) + " couldn't be cast to List[Any]"))
556558 }
557- if ((bR == bR))
559+ if ((bS == bS))
558560 then $Tuple2({
559- let an = bR[0]
561+ let an = bS[0]
560562 if ($isInstanceOf(an, "Int"))
561563 then an
562564 else throw(($getType(an) + " couldn't be cast to Int"))
563565 }, {
564- let an = bR[1]
566+ let an = bS[1]
565567 if ($isInstanceOf(an, "Int"))
566568 then an
567569 else throw(($getType(an) + " couldn't be cast to Int"))
568570 })
569571 else throw("Strict value is not equal to itself.")
570572 }
571- else if ((bb == b))
573+ else if ((ba == b))
572574 then {
573- let cx = split({
574- let an = invoke(ak, "evaluateGetREADONLY", [aq, cq], nil)
575+ let cy = split({
576+ let an = invoke(ak, "evaluateGetREADONLY", [aq, cr], nil)
575577 if ($isInstanceOf(an, "String"))
576578 then an
577579 else throw(($getType(an) + " couldn't be cast to String"))
578580 }, "__")
579- if ((cx == cx))
580- then $Tuple2(parseIntValue(cx[1]), parseIntValue(cx[2]))
581+ if ((cy == cy))
582+ then $Tuple2(parseIntValue(cy[1]), parseIntValue(cy[2]))
581583 else throw("Strict value is not equal to itself.")
582584 }
583585 else throw("Wrong pool type")
584- let cy = cw._1
585- let cz = cw._2
586- if ((cu > 0))
586+ let cz = cx._1
587+ let cA = cx._2
588+ if ((cv > 0))
587589 then {
588- let cA = if (if ((cv == ao))
589- then (cu > cy)
590+ let cB = if (if ((cw == ao))
591+ then (cv > cz)
590592 else false)
591- then (cu - cy)
592- else if (if ((cv == ap))
593- then (cu > cz)
593+ then (cv - cz)
594+ else if (if ((cw == ap))
595+ then (cv > cA)
594596 else false)
595- then (cu - cz)
597+ then (cv - cA)
596598 else 0
597- let cB = if ((cA > 0))
598- then if ((bb == a))
599- then bS(ax, ao, ap, ar, as, cA, cv)
600- else cd(ax, ao, ap, ar, as, cA, cv)
599+ let cC = if ((cB > 0))
600+ then if ((ba == a))
601+ then bT(ax, ao, ap, ar, as, cB, cw)
602+ else ce(ax, ao, ap, ar, as, cB, cw)
601603 else $Tuple2("", 0)
602- let cc = cB._1
603- let cb = cB._2
604- if ((cv == ao))
605- then $Tuple2(((cy + cA) - cu), (cz - cb))
606- else $Tuple2((cy - cb), ((cz + cA) - cu))
604+ let cd = cC._1
605+ let cc = cC._2
606+ if ((cw == ao))
607+ then $Tuple2(((cz + cB) - cv), (cA - cc))
608+ else $Tuple2((cz - cc), ((cA + cB) - cv))
607609 }
608- else $Tuple2(cy, cz)
610+ else $Tuple2(cz, cA)
609611 }
610612
611613
612-func cC (au,ax) = if ((au == a))
614+func cD (au,ax) = if ((au == a))
613615 then {
614- let cD = ae(aa)
615- if ((cD == cD))
616+ let cE = ae(aa)
617+ if ((cE == cE))
616618 then {
617- let bR = invoke(aD(), "claim", [ax], nil)
618- if ((bR == bR))
619+ let bS = invoke(aD(), "claim", [ax], nil)
620+ if ((bS == bS))
619621 then {
620- let cE = ae(aa)
621- $Tuple2((cE - cD), aa)
622+ let cF = ae(aa)
623+ $Tuple2((cF - cE), aa)
622624 }
623625 else throw("Strict value is not equal to itself.")
624626 }
625627 else throw("Strict value is not equal to itself.")
626628 }
627629 else if ((au == b))
628630 then {
629- let cD = ae(ab)
630- if ((cD == cD))
631+ let cE = ae(ab)
632+ if ((cE == cE))
631633 then {
632- let bR = invoke(aE(Address(fromBase58String(ax))), "claimWX", [ax], nil)
633- if ((bR == bR))
634+ let bS = invoke(aE(Address(fromBase58String(ax))), "claimWX", [ax], nil)
635+ if ((bS == bS))
634636 then {
635- let cE = ae(ab)
636- $Tuple2((cE - cD), ab)
637+ let cF = ae(ab)
638+ $Tuple2((cF - cE), ab)
637639 }
638640 else throw("Strict value is not equal to itself.")
639641 }
640642 else throw("Strict value is not equal to itself.")
641643 }
642644 else throw("Wrong pool type")
643645
644646
645-func cF (bb,ax,aC,br,ao,bs,ap,ar,as,cG) = {
646- let cH = ae(fromBase58String(cG))
647- if ((cH == cH))
647+func cG (ba,ax,aC,bs,ao,bt,ap,ar,as,cH) = {
648+ let cI = ae(fromBase58String(cH))
649+ if ((cI == cI))
648650 then {
649651 let ak = addressFromStringValue(ax)
650- let cI = if (if ((br > 0))
651- then (bs > 0)
652+ let cJ = if (if ((bs > 0))
653+ then (bt > 0)
652654 else false)
653655 then {
654- let cJ = bq(bb, ak, br, ao, bs, ap, ar, as)
655- let bB = cJ._1
656- let bC = cJ._2
657- let bD = cJ._3
658- let cp = cJ._4
659- let bR = bG(ak, bb, bB, ao, bC, ap)
660- if ((bR == bR))
661- then $Tuple2(bD, cp)
656+ let cK = br(ba, ak, bs, ao, bt, ap, ar, as)
657+ let bC = cK._1
658+ let bD = cK._2
659+ let bE = cK._3
660+ let cq = cK._4
661+ let bS = bH(ak, ba, bC, ao, bD, ap)
662+ if ((bS == bS))
663+ then $Tuple2(bE, cq)
662664 else throw("Strict value is not equal to itself.")
663665 }
664- else if ((br > 0))
665- then $Tuple2(br, ao)
666- else if ((bs > 0))
667- then $Tuple2(bs, ap)
666+ else if ((bs > 0))
667+ then $Tuple2(bs, ao)
668+ else if ((bt > 0))
669+ then $Tuple2(bt, ap)
668670 else throw("pmts must be > 0")
669- let bD = cI._1
670- let cp = cI._2
671- let bR = if ((bD > 0))
672- then bI(ak, bb, bD, cp)
671+ let bE = cJ._1
672+ let cq = cJ._2
673+ let bS = if ((bE > 0))
674+ then bJ(ak, ba, bE, cq)
673675 else nil
674- if ((bR == bR))
676+ if ((bS == bS))
675677 then {
676- let cK = ae(fromBase58String(cG))
677- let cL = (cK - cH)
678- let cM = fraction(cL, aB(ax, aC), l)
679- let cN = (cL - cM)
680- if ((0 >= cN))
678+ let cL = ae(fromBase58String(cH))
679+ let cM = (cL - cI)
680+ let cN = fraction(cM, aB(ax, aC), l)
681+ let cO = (cM - cN)
682+ if ((0 >= cO))
681683 then throw("amount of staked sharetokens must be > 0")
682684 else {
683- let cO = bK(ax, bb, cG, cN)
684- if ((cO == cO))
685- then $Tuple2(cN, cM)
685+ let cP = bL(ax, ba, cH, cO)
686+ if ((cP == cP))
687+ then $Tuple2(cO, cN)
686688 else throw("Strict value is not equal to itself.")
687689 }
688690 }
689691 else throw("Strict value is not equal to itself.")
690692 }
691693 else throw("Strict value is not equal to itself.")
692694 }
693695
694696
695-func cP (ax,aA,cQ,cM,cR,aq,au,cS) = {
696- let cT = aw(ax)
697- let cU = ay(ax)
698- let cV = if (cS)
699- then $Tuple2(getIntegerValue(this, (ax + B)), (cU + cQ))
700- else $Tuple2(getIntegerValue(this, (ax + C)), cU)
701- let cW = cV._1
702- let cX = cV._2
703-[IntegerEntry((ax + z), (cT + cQ)), IntegerEntry((ax + A), cX), IntegerEntry((((((ax + "_") + aA) + "_") + toString(cR)) + t), cQ), IntegerEntry((((((ax + "_") + aA) + "_") + toString(cR)) + y), cW), StringEntry((((aA + "_") + toString(cR)) + u), ax), IntegerEntry((aA + x), cR), ScriptTransfer(W, cM, fromBase58String(aq))]
697+func cQ (ax,aA,cR,cN,cS,aq,au,cT) = {
698+ let cU = aw(ax)
699+ let cV = ay(ax)
700+ let cW = if (cT)
701+ then $Tuple2(getIntegerValue(this, (ax + B)), (cV + cR))
702+ else $Tuple2(getIntegerValue(this, (ax + C)), cV)
703+ let cX = cW._1
704+ let cY = cW._2
705+[IntegerEntry((ax + z), (cU + cR)), IntegerEntry((ax + A), cY), IntegerEntry((((((ax + "_") + aA) + "_") + toString(cS)) + t), cR), IntegerEntry((((((ax + "_") + aA) + "_") + toString(cS)) + y), cX), StringEntry((((aA + "_") + toString(cS)) + u), ax), IntegerEntry((aA + x), cS), ScriptTransfer(W, cN, fromBase58String(aq))]
704706 }
705707
706708
707-func cY (cZ,da,db,dc,dd,de,df,dg,dh,di) = {
708- let dj = ae(aJ(cZ))
709- if ((dj == dj))
709+func cZ (da,db,dc,dd,de,df,dg,dh,di,dj) = {
710+ let dk = ae(aJ(da))
711+ if ((dk == dk))
710712 then {
711- let bR = invoke(X, "swap", [dc, dd, de, df, dg, dh, di], [AttachedPayment(db, da)])
712- if ((bR == bR))
713- then (ae(aJ(cZ)) - dj)
713+ let bS = invoke(X, "swap", [dd, de, df, dg, dh, di, dj], [AttachedPayment(dc, db)])
714+ if ((bS == bS))
715+ then (ae(aJ(da)) - dk)
714716 else throw("Strict value is not equal to itself.")
715717 }
716718 else throw("Strict value is not equal to itself.")
717719 }
718720
719721
720-func dk (cZ,da,db,dl,dm,di) = {
721- let dj = ae(aJ(cZ))
722- if ((dj == dj))
722+func dl (da,db,dc,dm,dn,dj) = {
723+ let dk = ae(aJ(da))
724+ if ((dk == dk))
723725 then {
724- let bR = invoke(X, "puzzleSwap", [dl, dm, di], [AttachedPayment(db, da)])
725- if ((bR == bR))
726- then (ae(aJ(cZ)) - dj)
726+ let bS = invoke(X, "puzzleSwap", [dm, dn, dj], [AttachedPayment(dc, db)])
727+ if ((bS == bS))
728+ then (ae(aJ(da)) - dk)
727729 else throw("Strict value is not equal to itself.")
728730 }
729731 else throw("Strict value is not equal to itself.")
730732 }
731733
732734
733-func dn (cZ,da,db,do,dp,dq,dr,ds,dt,di) = {
734- let dj = ae(aJ(cZ))
735- if ((dj == dj))
735+func do (da,db,dc,dp,dq,dr,ds,dt,du,dj) = {
736+ let dk = ae(aJ(da))
737+ if ((dk == dk))
736738 then {
737- let bR = invoke(X, "swopfiSwap", [do, dp, dq, dr, ds, dt, di], [AttachedPayment(db, da)])
738- if ((bR == bR))
739- then (ae(aJ(cZ)) - dj)
739+ let bS = invoke(X, "swopfiSwap", [dp, dq, dr, ds, dt, du, dj], [AttachedPayment(dc, db)])
740+ if ((bS == bS))
741+ then (ae(aJ(da)) - dk)
740742 else throw("Strict value is not equal to itself.")
741743 }
742744 else throw("Strict value is not equal to itself.")
743745 }
744746
745747
746-func du (ax,bb,dv,dw) = {
748+func dv (ax,ba,dw,dx) = {
747749 let ak = Address(fromBase58String(ax))
748- let dx = at(ak, bb)
749- let dy = dx._1
750- let dz = dx._2
751- let ar = dx._3
752- let as = dx._4
753- let aq = dx._5
754- let dA = if ((dv == dy))
755- then $Tuple2(dw, 0)
756- else $Tuple2(0, dw)
757- let br = dA._1
758- let bs = dA._2
759- let dB = cF(bb, ax, i, br, dy, bs, dz, ar, as, aq)
760- let cQ = dB._1
761- let dC = dB._2
762- let dD = valueOrElse(getInteger(this, (ax + B)), 0)
763- let dE = valueOrElse(getInteger(this, (ax + C)), 0)
764- let dF = aw(ax)
765- let dG = ay(ax)
766- let dH = fraction(dG, j, dF)
767- let dI = fraction(cQ, dH, j)
768- let dJ = (cQ - dI)
769- let dK = if ((dG > 0))
770- then (dD + fraction(dI, k, dG))
771- else 0
772- let dL = if (((dF - dG) > 0))
773- then (dE + fraction(dJ, k, (dF - dG)))
774- else 0
775- let dM = fraction(dI, aB(ax, d), l)
776- let dN = fraction(dJ, aB(ax, c), l)
777- let dO = bM(ax, bb, aq, (dM + dN))
778- if ((dO == dO))
779- then ([IntegerEntry((ax + B), dK), IntegerEntry((ax + C), dL), IntegerEntry((ax + z), ((dF + cQ) - dO)), IntegerEntry((ax + A), ((dG + dI) - dM)), ScriptTransfer(W, (dM + dN), fromBase58String(aq))] ++ bn(dy, dz, aq))
780- else throw("Strict value is not equal to itself.")
750+ let dy = at(ak, ba)
751+ let dz = dy._1
752+ let dA = dy._2
753+ let ar = dy._3
754+ let as = dy._4
755+ let aq = dy._5
756+ if (if ((dw != dz))
757+ then (dw != dA)
758+ else false)
759+ then throw("Wrong asset")
760+ else {
761+ let dB = if ((dw == dz))
762+ then $Tuple2(dx, 0)
763+ else $Tuple2(0, dx)
764+ let bs = dB._1
765+ let bt = dB._2
766+ let dC = cG(ba, ax, i, bs, dz, bt, dA, ar, as, aq)
767+ let cR = dC._1
768+ let dD = dC._2
769+ let dE = valueOrElse(getInteger(this, (ax + B)), 0)
770+ let dF = valueOrElse(getInteger(this, (ax + C)), 0)
771+ let dG = aw(ax)
772+ let dH = ay(ax)
773+ let dI = fraction(dH, j, dG)
774+ let dJ = fraction(cR, dI, j)
775+ let dK = (cR - dJ)
776+ let dL = if ((dH > 0))
777+ then (dE + fraction(dJ, k, dH))
778+ else 0
779+ let dM = if (((dG - dH) > 0))
780+ then (dF + fraction(dK, k, (dG - dH)))
781+ else 0
782+ let dN = fraction(dJ, aB(ax, d), l)
783+ let dO = fraction(dK, aB(ax, c), l)
784+ let dP = bN(ax, ba, aq, (dN + dO))
785+ if ((dP == dP))
786+ then ([IntegerEntry((ax + B), dL), IntegerEntry((ax + C), dM), IntegerEntry((ax + z), ((dG + cR) - dP)), IntegerEntry((ax + A), ((dH + dJ) - dN)), ScriptTransfer(W, (dN + dO), fromBase58String(aq))] ++ bn(dz, dA, aq))
787+ else throw("Strict value is not equal to itself.")
788+ }
781789 }
782790
783791
784-func dP (ax,dQ,dR,dS) = {
792+func dQ (ax,dR,dS,dT) = {
785793 let ak = Address(fromBase58String(ax))
786- let bb = valueOrErrorMessage(getString(this, (L + ax)), "Unknown pool")
787- let dT = at(ak, bb)
788- let bT = dT._1
789- let bU = dT._2
790- let ar = dT._3
791- let as = dT._4
792- let aq = dT._5
793- let dU = ae(aJ(bT))
794- if ((dU == dU))
794+ let ba = valueOrErrorMessage(getString(this, (L + ax)), "Unknown pool")
795+ let dU = at(ak, ba)
796+ let bU = dU._1
797+ let bV = dU._2
798+ let ar = dU._3
799+ let as = dU._4
800+ let aq = dU._5
801+ let dV = ae(aJ(bU))
802+ if ((dV == dV))
795803 then {
796- let dV = ae(aJ(bU))
797- if ((dV == dV))
804+ let dW = ae(aJ(bV))
805+ if ((dW == dW))
798806 then {
799- let bR = if ((bb == a))
800- then invoke(ak, "callFunction", ["withdraw", [toString(dQ)]], nil)
807+ let bS = if ((ba == a))
808+ then invoke(ak, "callFunction", ["withdraw", [toString(dR)]], nil)
801809 else {
802- let bR = bM(ax, bb, aq, dQ)
803- if ((bR == bR))
804- then invoke(ak, "get", nil, [AttachedPayment(aJ(aq), dQ)])
810+ let bS = bN(ax, ba, aq, dR)
811+ if ((bS == bS))
812+ then invoke(ak, "get", nil, [AttachedPayment(aJ(aq), dR)])
805813 else throw("Strict value is not equal to itself.")
806814 }
807- if ((bR == bR))
815+ if ((bS == bS))
808816 then {
809- let dW = ae(aJ(bT))
810817 let dX = ae(aJ(bU))
811- let dY = $Tuple2((dW - dU), (dX - dV))
812- let dZ = dY._1
813- let ea = dY._2
814- let eb = if ((dR > 0))
818+ let dY = ae(aJ(bV))
819+ let dZ = $Tuple2((dX - dV), (dY - dW))
820+ let ea = dZ._1
821+ let eb = dZ._2
822+ let ec = if ((dS > 0))
815823 then {
816- let cA = if (if ((dS == bT))
817- then (dR > dZ)
824+ let cB = if (if ((dT == bU))
825+ then (dS > ea)
818826 else false)
819- then (dR - dZ)
820- else if (if ((dS == bU))
821- then (dR > ea)
827+ then (dS - ea)
828+ else if (if ((dT == bV))
829+ then (dS > eb)
822830 else false)
823- then (dR - ea)
831+ then (dS - eb)
824832 else 0
825- let ec = if ((cA > 0))
826- then cj(bb, ax, bT, bU, ar, as, cA, dS)
833+ let ed = if ((cB > 0))
834+ then ck(ba, ax, bU, bV, ar, as, cB, dT)
827835 else 0
828- if ((ec == ec))
836+ if ((ed == ed))
829837 then {
830- let ed = ae(aJ(bT))
831838 let ee = ae(aJ(bU))
832- $Tuple2((ed - dU), (ee - dV))
839+ let ef = ae(aJ(bV))
840+ $Tuple2((ee - dV), (ef - dW))
833841 }
834842 else throw("Strict value is not equal to itself.")
835843 }
836- else $Tuple2(dZ, ea)
837- let ef = eb._1
838- let eg = eb._2
839- $Tuple7(ef, bT, eg, bU, dW, dX, aq)
844+ else $Tuple2(ea, eb)
845+ let eg = ec._1
846+ let eh = ec._2
847+ $Tuple7(eg, bU, eh, bV, dX, dY, aq)
840848 }
841849 else throw("Strict value is not equal to itself.")
842850 }
843851 else throw("Strict value is not equal to itself.")
844852 }
845853 else throw("Strict value is not equal to itself.")
846854 }
847855
848856
849-func eh (aA,ax,ei,ej) = {
850- let ek = valueOrErrorMessage(getInteger(this, (((((ax + "_") + aA) + "_") + ei) + t)), "Unknown position")
851- let el = getIntegerValue(this, (((((ax + "_") + aA) + "_") + ei) + y))
852- let em = if (ej)
857+func ei (aA,ax,ej,ek) = {
858+ let el = valueOrErrorMessage(getInteger(this, (((((ax + "_") + aA) + "_") + ej) + t)), "Unknown position")
859+ let em = getIntegerValue(this, (((((ax + "_") + aA) + "_") + ej) + y))
860+ let en = if (ek)
853861 then getIntegerValue(this, (ax + B))
854862 else getIntegerValue(this, (ax + C))
855- (ek + fraction(ek, (em - el), k))
863+ (el + fraction(el, (en - em), k))
856864 }
857865
858866
859-func en (aA,ax,ei,eo) = {
860- let ek = valueOrErrorMessage(getInteger(this, (((((ax + "_") + aA) + "_") + ei) + t)), "Unknown position")
861- let el = getIntegerValue(this, (((((ax + "_") + aA) + "_") + ei) + y))
862- let cu = valueOrElse(getInteger(this, (((((ax + "_") + aA) + "_") + ei) + v)), 0)
863- let dQ = eh(aA, ax, ei, (cu > 0))
864- let ep = aw(ax)
865- let eq = Address(fromBase58String(aA))
866- let dS = valueOrElse(getString(this, (((((ax + "_") + aA) + "_") + ei) + w)), "")
867- let dR = if ((cu > 0))
867+func eo (aA,ax,ej,ep) = {
868+ let el = valueOrErrorMessage(getInteger(this, (((((ax + "_") + aA) + "_") + ej) + t)), "Unknown position")
869+ let em = getIntegerValue(this, (((((ax + "_") + aA) + "_") + ej) + y))
870+ let cv = valueOrElse(getInteger(this, (((((ax + "_") + aA) + "_") + ej) + v)), 0)
871+ let dR = ei(aA, ax, ej, (cv > 0))
872+ let eq = aw(ax)
873+ let er = Address(fromBase58String(aA))
874+ let dT = valueOrElse(getString(this, (((((ax + "_") + aA) + "_") + ej) + w)), "")
875+ let dS = if ((cv > 0))
868876 then {
869- let an = invoke(aH(), "getAssetDebt", [false, ((((ax + "_") + aA) + "_") + ei), dS], nil)
877+ let an = invoke(aH(), "getAssetDebt", [false, ((((ax + "_") + aA) + "_") + ej), dT], nil)
870878 if ($isInstanceOf(an, "Int"))
871879 then an
872880 else throw(($getType(an) + " couldn't be cast to Int"))
873881 }
874882 else 0
875- let er = dP(ax, dQ, dR, dS)
876- if ((er == er))
883+ let es = dQ(ax, dR, dS, dT)
884+ if ((es == es))
877885 then {
878- let aq = er._7
879- let dX = er._6
880- let dW = er._5
881- let bU = er._4
882- let eg = er._3
883- let bT = er._2
884- let ef = er._1
885- let es = if ((dR > 0))
886- then invoke(aH(), "repayFor", [((aA + "_") + ei)], [AttachedPayment(aJ(dS), dR)])
886+ let aq = es._7
887+ let dY = es._6
888+ let dX = es._5
889+ let bV = es._4
890+ let eh = es._3
891+ let bU = es._2
892+ let eg = es._1
893+ let et = if ((dS > 0))
894+ then invoke(aH(), "repayFor", [((aA + "_") + ej)], [AttachedPayment(aJ(dT), dS)])
887895 else 0
888- if ((es == es))
889- then ([DeleteEntry((((((ax + "_") + aA) + "_") + ei) + t)), DeleteEntry((((((ax + "_") + aA) + "_") + ei) + y)), IntegerEntry((ax + z), (ep - dQ)), ScriptTransfer(eq, ef, aJ(bT)), ScriptTransfer(eq, eg, aJ(bU))] ++ bn(bT, bU, aq))
896+ if ((et == et))
897+ then ([DeleteEntry((((((ax + "_") + aA) + "_") + ej) + t)), DeleteEntry((((((ax + "_") + aA) + "_") + ej) + y)), IntegerEntry((ax + z), (eq - dR)), ScriptTransfer(er, eg, aJ(bU)), ScriptTransfer(er, eh, aJ(bV))] ++ bn(bU, bV, aq))
890898 else throw("Strict value is not equal to itself.")
891899 }
892900 else throw("Strict value is not equal to itself.")
893901 }
894902
895903
896-func et (eu) = {
897- let ev = split(valueOrErrorMessage(getString(this, (eu + J)), ("No request with id " + eu)), ",")
898- let aA = ev[0]
899- let ax = ev[1]
900- let br = parseIntValue(ev[2])
901- let dy = ev[3]
902- let bs = parseIntValue(ev[4])
903- let dz = ev[5]
904- let ar = parseIntValue(ev[6])
905- let as = parseIntValue(ev[7])
906- let aq = ev[8]
907- let ew = ev[9]
908- let ex = parseIntValue(ev[10])
909- $Tuple11(aA, ax, br, dy, bs, dz, ar, as, aq, ew, ex)
904+func eu (ev) = {
905+ let ew = split(valueOrErrorMessage(getString(this, (ev + J)), ("No request with id " + ev)), ",")
906+ let aA = ew[0]
907+ let ax = ew[1]
908+ let bs = parseIntValue(ew[2])
909+ let dz = ew[3]
910+ let bt = parseIntValue(ew[4])
911+ let dA = ew[5]
912+ let ar = parseIntValue(ew[6])
913+ let as = parseIntValue(ew[7])
914+ let aq = ew[8]
915+ let ex = ew[9]
916+ let ey = parseIntValue(ew[10])
917+ $Tuple11(aA, ax, bs, dz, bt, dA, ar, as, aq, ex, ey)
910918 }
911919
912920
913-func ey (br,bs,ao,ap,ez,eA) = {
914- let bf = ( let an = invoke(Y, "getTWAP60", [ao, false], nil)
921+func ez (bs,bt,ao,ap,eA,eB) = {
922+ let be = ( let an = invoke(Y, "getTWAP60", [ao, false], nil)
915923 if ($isInstanceOf(an, "(Int, Int)"))
916924 then an
917925 else throw(($getType(an) + " couldn't be cast to (Int, Int)")))._2
918- let bg = ( let an = invoke(Y, "getTWAP60", [ap, false], nil)
926+ let bf = ( let an = invoke(Y, "getTWAP60", [ap, false], nil)
919927 if ($isInstanceOf(an, "(Int, Int)"))
920928 then an
921929 else throw(($getType(an) + " couldn't be cast to (Int, Int)")))._2
922- let eB = pow(10, 0, aK(ao), 0, 0, DOWN)
923- let eC = pow(10, 0, aK(ap), 0, 0, DOWN)
924- let eD = (fraction(bf, br, eB) + fraction(bg, bs, eC))
925- let eE = if ((eA == ao))
926- then $Tuple2(bf, eB)
927- else $Tuple2(bg, eC)
928- let eF = eE._1
929- let eG = eE._2
930- fraction(fraction(eD, (ez - 100), 100), eG, eF)
930+ let eC = pow(10, 0, aK(ao), 0, 0, DOWN)
931+ let eD = pow(10, 0, aK(ap), 0, 0, DOWN)
932+ let eE = (fraction(be, bs, eC) + fraction(bf, bt, eD))
933+ let eF = if ((eB == ao))
934+ then $Tuple2(be, eC)
935+ else $Tuple2(bf, eD)
936+ let eG = eF._1
937+ let eH = eF._2
938+ fraction(fraction(eE, (eA - 100), 100), eH, eG)
931939 }
932940
933941
934942 @Callable(ad)
935-func replenishEVALONLY (ax,ez,eA,br,bs) = if (if ((100 > ez))
943+func replenishEVALONLY (ax,eA,eB,bs,bt) = if (if ((100 > eA))
936944 then true
937- else (ez > 300))
945+ else (eA > 300))
938946 then throw("Leverage can't be <100 and >300")
939947 else {
940- let bb = valueOrErrorMessage(getString(this, (L + ax)), "Pool is not inited")
941- let eH = at(Address(fromBase58String(ax)), bb)
942- let dy = eH._1
943- let dz = eH._2
944- let ar = eH._3
945- let as = eH._4
946- let aq = eH._5
947- let cu = if ((ez > 100))
948- then ey(br, bs, dy, dz, ez, eA)
948+ let ba = valueOrErrorMessage(getString(this, (L + ax)), "Pool is not inited")
949+ let eI = at(Address(fromBase58String(ax)), ba)
950+ let dz = eI._1
951+ let dA = eI._2
952+ let ar = eI._3
953+ let as = eI._4
954+ let aq = eI._5
955+ let cv = if ((eA > 100))
956+ then ez(bs, bt, dz, dA, eA, eB)
949957 else 0
950- let eI = if ((eA == dy))
951- then $Tuple2((br + cu), bs)
952- else $Tuple2(br, (bs + cu))
953- let eJ = eI._1
954- let eK = eI._2
955- let cq = cm(bb, ax, eJ, dy, eK, dz, ar, as)
956- let eL = (ar + eJ)
957- let eM = (as + eK)
958- let eN = ct(bb, ax, cq, aq, dy, dz, eL, eM, cu, eA)
959- if ((eN == eN))
958+ let eJ = if ((eB == dz))
959+ then $Tuple2((bs + cv), bt)
960+ else $Tuple2(bs, (bt + cv))
961+ let eK = eJ._1
962+ let eL = eJ._2
963+ let cr = cn(ba, ax, eK, dz, eL, dA, ar, as)
964+ let eM = (ar + eK)
965+ let eN = (as + eL)
966+ let eO = cu(ba, ax, cr, aq, dz, dA, eM, eN, cv, eB)
967+ if ((eO == eO))
960968 then {
961- let eO = eN._2
962- let eP = eN._1
963- let eQ = fraction(as, j, ar)
964- let eR = fraction((eM - eO), j, (eL - eP))
965- let eS = (j - fraction(eQ, j, eR))
966- let eT = if ((0 > eS))
967- then (eS * -1)
968- else eS
969- $Tuple2(nil, [eP, eO, eT])
969+ let eP = eO._2
970+ let eQ = eO._1
971+ let eR = fraction(as, j, ar)
972+ let eS = fraction((eN - eP), j, (eM - eQ))
973+ let eT = (j - fraction(eR, j, eS))
974+ let eU = if ((0 > eT))
975+ then (eT * -1)
976+ else eT
977+ $Tuple2(nil, [eQ, eP, eU])
970978 }
971979 else throw("Strict value is not equal to itself.")
972980 }
973981
974982
975983
976984 @Callable(ad)
977985 func getShareAssetPriceREADONLY (aq) = {
978- let eU = aZ([aq])
979- $Tuple2(nil, eU[0])
986+ let eV = aZ(aq)
987+ $Tuple2(nil, eV)
980988 }
981989
982990
983991
984992 @Callable(ad)
985-func getUserPositionShareAmountREADONLY (aA,cR) = {
986- let ax = valueOrErrorMessage(getString(this, (((aA + "_") + cR) + u)), "Unknown position")
987- let cu = getIntegerValue(this, (((((ax + "_") + aA) + "_") + cR) + v))
988- let dQ = eh(aA, ax, cR, (cu > 0))
989- $Tuple2(nil, dQ)
993+func getUserPositionShareAmountREADONLY (aA,cS) = {
994+ let ax = valueOrErrorMessage(getString(this, (((aA + "_") + cS) + u)), "Unknown position")
995+ let cv = getIntegerValue(this, (((((ax + "_") + aA) + "_") + cS) + v))
996+ let dR = ei(aA, ax, cS, (cv > 0))
997+ $Tuple2(nil, dR)
990998 }
991999
9921000
9931001
9941002 @Callable(ad)
995-func replenish (ax,ez,eA) = if (if ((100 > ez))
996- then true
997- else (ez > 300))
998- then throw("Leverage can't be <100 and >300")
999- else {
1000- let bb = valueOrErrorMessage(getString(this, (L + ax)), "Pool is not inited")
1001- let eV = at(Address(fromBase58String(ax)), bb)
1002- let dy = eV._1
1003- let dz = eV._2
1004- let ar = eV._3
1005- let as = eV._4
1006- let aq = eV._5
1007- let eW = if ((size(ad.payments) == 2))
1008- then if ((aI(ad.payments[0].assetId) != dy))
1009- then throw("Wrong payment asset A")
1010- else if ((aI(ad.payments[1].assetId) != dz))
1011- then throw("Wrong payment asset B")
1012- else $Tuple4(ad.payments[0].amount, dy, ad.payments[1].amount, dz)
1013- else if ((size(ad.payments) == 1))
1014- then if ((aI(ad.payments[0].assetId) == dy))
1015- then $Tuple4(ad.payments[0].amount, dy, 0, dz)
1016- else if ((aI(ad.payments[0].assetId) == dz))
1017- then $Tuple4(0, dy, ad.payments[0].amount, dz)
1018- else throw("Wrong payment")
1019- else throw("One or two payments expected")
1020- let br = eW._1
1021- let eX = eW._2
1022- let bs = eW._3
1023- let eY = eW._4
1024- let eZ = az(ax, toString(ad.caller))
1025- if ((ez > 100))
1026- then {
1027- let cu = ey(br, bs, eX, eY, ez, eA)
1028- let ev = makeString([toString(ad.caller), ax, toString(br), eX, toString(bs), eY, toString(ar), toString(as), aq, eA, toString(cu)], ",")
1029- let fa = {
1030- let an = invoke(this, "createNewRequest", [ev], nil)
1003+func getUserPositionInDollarsREADONLY (aA,eW,cS) = {
1004+ func eX (aQ,ax) = {
1005+ let eY = aQ
1006+ let eZ = eY._1
1007+ let fa = eY._2
1008+ let fb = eY._3
1009+ let ba = valueOrErrorMessage(getString(this, (L + ax)), "Pool is not inited")
1010+ let fc = at(Address(fromBase58String(ax)), ba)
1011+ let dz = fc._1
1012+ let dA = fc._2
1013+ let ar = fc._3
1014+ let as = fc._4
1015+ let aq = fc._5
1016+ let cv = valueOrElse(getInteger(this, (((((ax + "_") + aA) + "_") + cS[fb]) + v)), 0)
1017+ let dR = ei(aA, ax, cS[fb], (cv > 0))
1018+ let eV = aZ(aq)
1019+ let fd = pow(10, 0, aK(aq), 0, 0, DOWN)
1020+ let fe = fraction(dR, eV, fd)
1021+ if ((cv == 0))
1022+ then $Tuple3((eZ :+ fe), (fa :+ 0), (fb + 1))
1023+ else {
1024+ let dT = getStringValue(this, (((((ax + "_") + aA) + "_") + cS[fb]) + w))
1025+ let dS = {
1026+ let an = invoke(aH(), "getAssetDebt", [false, ((((ax + "_") + aA) + "_") + cS[fb]), dT], nil)
10311027 if ($isInstanceOf(an, "Int"))
10321028 then an
10331029 else throw(($getType(an) + " couldn't be cast to Int"))
10341030 }
1035- if ((fa == fa))
1031+ let ff = ( let an = invoke(Y, "getTWAP60", [dT, false], nil)
1032+ if ($isInstanceOf(an, "(Int, Int)"))
1033+ then an
1034+ else throw(($getType(an) + " couldn't be cast to (Int, Int)")))._1
1035+ let fg = pow(10, 0, aK(dT), 0, 0, DOWN)
1036+ let fh = fraction(dS, ff, fg)
1037+ $Tuple3((eZ :+ fe), (fa :+ fh), (fb + 1))
1038+ }
1039+ }
1040+
1041+ let fi = {
1042+ let aS = eW
1043+ let aT = size(aS)
1044+ let aU = $Tuple3(nil, nil, 0)
1045+ func aV (aW,aX) = if ((aX >= aT))
1046+ then aW
1047+ else eX(aW, aS[aX])
1048+
1049+ func aY (aW,aX) = if ((aX >= aT))
1050+ then aW
1051+ else throw("List size exceeds 20")
1052+
1053+ aY(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aU, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
1054+ }
1055+ let fj = fi._1
1056+ let dS = fi._2
1057+ $Tuple2(nil, $Tuple2(fj, dS))
1058+ }
1059+
1060+
1061+
1062+@Callable(ad)
1063+func replenish (ax,eA,eB) = if (if ((100 > eA))
1064+ then true
1065+ else (eA > 300))
1066+ then throw("Leverage can't be <100 and >300")
1067+ else {
1068+ let ba = valueOrErrorMessage(getString(this, (L + ax)), "Pool is not inited")
1069+ let fk = at(Address(fromBase58String(ax)), ba)
1070+ let dz = fk._1
1071+ let dA = fk._2
1072+ let ar = fk._3
1073+ let as = fk._4
1074+ let aq = fk._5
1075+ let fl = if ((size(ad.payments) == 2))
1076+ then if ((aI(ad.payments[0].assetId) != dz))
1077+ then throw("Wrong payment asset A")
1078+ else if ((aI(ad.payments[1].assetId) != dA))
1079+ then throw("Wrong payment asset B")
1080+ else $Tuple4(ad.payments[0].amount, dz, ad.payments[1].amount, dA)
1081+ else if ((size(ad.payments) == 1))
1082+ then if ((aI(ad.payments[0].assetId) == dz))
1083+ then $Tuple4(ad.payments[0].amount, dz, 0, dA)
1084+ else if ((aI(ad.payments[0].assetId) == dA))
1085+ then $Tuple4(0, dz, ad.payments[0].amount, dA)
1086+ else throw("Wrong payment")
1087+ else throw("One or two payments expected")
1088+ let bs = fl._1
1089+ let fm = fl._2
1090+ let bt = fl._3
1091+ let fn = fl._4
1092+ let fo = az(ax, toString(ad.caller))
1093+ if ((eA > 100))
1094+ then {
1095+ let cv = ez(bs, bt, fm, fn, eA, eB)
1096+ let ew = makeString([toString(ad.caller), ax, toString(bs), fm, toString(bt), fn, toString(ar), toString(as), aq, eB, toString(cv)], ",")
1097+ let fp = {
1098+ let an = invoke(this, "createNewRequest", [ew], nil)
1099+ if ($isInstanceOf(an, "Int"))
1100+ then an
1101+ else throw(($getType(an) + " couldn't be cast to Int"))
1102+ }
1103+ if ((fp == fp))
10361104 then {
1037- let fb = [((toString(ad.caller) + "_") + toString(eZ)), aq, eA, cu, toString(this), "replenishFromLand", toString(valueOrErrorMessage(fa, "Can't create new request"))]
1038- let bR = reentrantInvoke(aH(), "flashPosition", fb, nil)
1039- if ((bR == bR))
1105+ let fq = [((toString(ad.caller) + "_") + toString(fo)), aq, eB, cv, toString(this), "replenishFromLand", toString(valueOrErrorMessage(fp, "Can't create new request"))]
1106+ let bS = reentrantInvoke(aH(), "flashPosition", fq, nil)
1107+ if ((bS == bS))
10401108 then nil
10411109 else throw("Strict value is not equal to itself.")
10421110 }
10431111 else throw("Strict value is not equal to itself.")
10441112 }
10451113 else {
1046- let fc = cF(bb, ax, h, br, dy, bs, dz, ar, as, aq)
1047- let fd = fc._1
1048- let dO = fc._2
1049- (cP(ax, toString(ad.caller), fd, dO, eZ, aq, bb, false) ++ bn(dy, dz, aq))
1114+ let fr = cG(ba, ax, h, bs, dz, bt, dA, ar, as, aq)
1115+ let fs = fr._1
1116+ let dP = fr._2
1117+ (cQ(ax, toString(ad.caller), fs, dP, fo, aq, ba, false) ++ bn(dz, dA, aq))
10501118 }
10511119 }
10521120
10531121
10541122
10551123 @Callable(ad)
1056-func replenishFromLand (eu) = {
1057- let fe = et(eu)
1058- let aA = fe._1
1059- let ax = fe._2
1060- let br = fe._3
1061- let dy = fe._4
1062- let bs = fe._5
1063- let dz = fe._6
1064- let ar = fe._7
1065- let as = fe._8
1066- let aq = fe._9
1067- let ew = fe._10
1068- let ex = fe._11
1124+func replenishFromLand (ev) = {
1125+ let ft = eu(ev)
1126+ let aA = ft._1
1127+ let ax = ft._2
1128+ let bs = ft._3
1129+ let dz = ft._4
1130+ let bt = ft._5
1131+ let dA = ft._6
1132+ let ar = ft._7
1133+ let as = ft._8
1134+ let aq = ft._9
1135+ let ex = ft._10
1136+ let ey = ft._11
10691137 if ((size(ad.payments) != 1))
10701138 then throw("Wrong payment size")
1071- else if (if ((aI(ad.payments[0].assetId) != ew))
1139+ else if (if ((aI(ad.payments[0].assetId) != ex))
10721140 then true
1073- else (ad.payments[0].amount != ex))
1141+ else (ad.payments[0].amount != ey))
10741142 then throw("Wrong payment")
10751143 else {
1076- let ff = if ((dy == ew))
1077- then $Tuple2((br + ad.payments[0].amount), bs)
1078- else $Tuple2(br, (bs + ad.payments[0].amount))
1079- let fg = ff._1
1080- let fh = ff._2
1081- let bb = valueOrErrorMessage(getString(this, (L + ax)), "Unknown pool")
1082- let fi = cF(bb, ax, g, br, dy, bs, dz, ar, as, aq)
1083- let fd = fi._1
1084- let dO = fi._2
1085- let cR = az(ax, toString(ad.caller))
1086- let fj = [IntegerEntry((((((ax + "_") + aA) + "_") + toString(cR)) + v), ex), StringEntry((((((ax + "_") + aA) + "_") + toString(cR)) + w), ew)]
1087- let fk = cP(ax, aA, fd, dO, cR, aq, bb, true)
1088- $Tuple2((((fk ++ bn(dy, dz, aq)) ++ fj) :+ DeleteEntry((eu + J))), fd)
1144+ let fu = if ((dz == ex))
1145+ then $Tuple2((bs + ad.payments[0].amount), bt)
1146+ else $Tuple2(bs, (bt + ad.payments[0].amount))
1147+ let fv = fu._1
1148+ let fw = fu._2
1149+ let ba = valueOrErrorMessage(getString(this, (L + ax)), "Unknown pool")
1150+ let fx = cG(ba, ax, g, bs, dz, bt, dA, ar, as, aq)
1151+ let fs = fx._1
1152+ let dP = fx._2
1153+ let cS = az(ax, toString(ad.caller))
1154+ let fy = [IntegerEntry((((((ax + "_") + aA) + "_") + toString(cS)) + v), ey), StringEntry((((((ax + "_") + aA) + "_") + toString(cS)) + w), ex)]
1155+ let fz = cQ(ax, aA, fs, dP, cS, aq, ba, true)
1156+ $Tuple2((((fz ++ bn(dz, dA, aq)) ++ fy) :+ DeleteEntry((ev + J))), fs)
10891157 }
10901158 }
10911159
10921160
10931161
10941162 @Callable(ad)
1095-func withdraw (ax,ei) = en(toString(ad.caller), ax, toString(ei), false)
1163+func withdraw (ax,ej) = eo(toString(ad.caller), ax, toString(ej), false)
10961164
10971165
10981166
10991167 @Callable(ad)
1100-func createUpdateStopLoss (ei,fl,af,fm) = {
1101- let fn = ( let an = invoke(Y, "getTWAP60", [af, false], nil)
1168+func createUpdateStopLoss (ej,fA,af,fB) = {
1169+ let fC = ( let an = invoke(Y, "getTWAP60", [af, false], nil)
11021170 if ($isInstanceOf(an, "(Int, Int)"))
11031171 then an
11041172 else throw(($getType(an) + " couldn't be cast to (Int, Int)")))._1
1105- if (!(isDefined(getInteger(this, (((((fl + "_") + toString(ad.caller)) + "_") + toString(ei)) + t)))))
1173+ if (!(isDefined(getInteger(this, (((((fA + "_") + toString(ad.caller)) + "_") + toString(ej)) + t)))))
11061174 then throw("There are no user position")
1107- else if ((0 >= fm))
1175+ else if ((0 >= fB))
11081176 then throw("Price must be greater than 0")
1109- else if ((fm > fn))
1177+ else if ((fB > fC))
11101178 then throw("Price must be less than current token price")
1111- else [IntegerEntry((((((((toString(ad.caller) + "_") + toString(ei)) + "_") + fl) + "_") + af) + P), fm)]
1179+ else [IntegerEntry((((((((toString(ad.caller) + "_") + toString(ej)) + "_") + fA) + "_") + af) + P), fB)]
11121180 }
11131181
11141182
11151183
11161184 @Callable(ad)
1117-func deleteStopLoss (ei,fl,af) = if (!(isDefined(getInteger(this, (((((((toString(ad.caller) + "_") + toString(ei)) + "_") + fl) + "_") + af) + P)))))
1185+func deleteStopLoss (ej,fA,af) = if (!(isDefined(getInteger(this, (((((((toString(ad.caller) + "_") + toString(ej)) + "_") + fA) + "_") + af) + P)))))
11181186 then throw("No entry")
1119- else [DeleteEntry((((((((toString(ad.caller) + "_") + toString(ei)) + "_") + fl) + "_") + af) + P))]
1187+ else [DeleteEntry((((((((toString(ad.caller) + "_") + toString(ej)) + "_") + fA) + "_") + af) + P))]
11201188
11211189
11221190
11231191 @Callable(ad)
1124-func createNewRequest (bQ) = valueOrElse(ac(ad), {
1125- let fa = (valueOrElse(getInteger(this, K), 0) + 1)
1126- $Tuple2([StringEntry((toString(fa) + J), bQ), IntegerEntry(K, fa)], fa)
1192+func createNewRequest (bR) = valueOrElse(ac(ad), {
1193+ let fp = (valueOrElse(getInteger(this, K), 0) + 1)
1194+ $Tuple2([StringEntry((toString(fp) + J), bR), IntegerEntry(K, fp)], fp)
11271195 })
11281196
11291197
11301198
11311199 @Callable(ad)
1132-func stopLoss (aA,ei,ax,af) = {
1133- let fn = ( let an = invoke(Y, "getTWAP60", [af, false], nil)
1200+func stopLoss (aA,ej,ax,af) = {
1201+ let fC = ( let an = invoke(Y, "getTWAP60", [af, false], nil)
11341202 if ($isInstanceOf(an, "(Int, Int)"))
11351203 then an
11361204 else throw(($getType(an) + " couldn't be cast to (Int, Int)")))._1
1137- if (!(isDefined(getInteger(this, (((((((aA + "_") + toString(ei)) + "_") + ax) + "_") + af) + P)))))
1205+ if (!(isDefined(getInteger(this, (((((((aA + "_") + toString(ej)) + "_") + ax) + "_") + af) + P)))))
11381206 then throw("No entry")
1139- else (en(toString(ad.caller), ax, toString(ei), true) :+ DeleteEntry((((((((aA + "_") + toString(ei)) + "_") + ax) + "_") + af) + P)))
1207+ else (eo(toString(ad.caller), ax, toString(ej), true) :+ DeleteEntry((((((((aA + "_") + toString(ej)) + "_") + ax) + "_") + af) + P)))
11401208 }
11411209
11421210
11431211
11441212 @Callable(ad)
1145-func liquidate (aA,ei,fo) = {
1146- let ax = valueOrErrorMessage(getString(this, (((aA + "_") + ei) + u)), "no position")
1147- let bb = valueOrErrorMessage(getString(this, (L + ax)), "Pool is not inited")
1148- let fp = at(Address(fromBase58String(ax)), bb)
1149- let dy = fp._1
1150- let dz = fp._2
1151- let ar = fp._3
1152- let as = fp._4
1153- let aq = fp._5
1154- let bL = bM(ax, bb, aq, fo)
1155- let cu = getIntegerValue(this, (((((ax + "_") + aA) + "_") + ei) + v))
1156- let dS = getStringValue(this, (((((ax + "_") + aA) + "_") + ei) + w))
1157- let dQ = eh(aA, ax, ei, (cu > 0))
1158- if ((cu == 0))
1213+func liquidate (aA,ej,fD) = {
1214+ let ax = valueOrErrorMessage(getString(this, (((aA + "_") + ej) + u)), "no position")
1215+ let ba = valueOrErrorMessage(getString(this, (L + ax)), "Pool is not inited")
1216+ let fE = at(Address(fromBase58String(ax)), ba)
1217+ let dz = fE._1
1218+ let dA = fE._2
1219+ let ar = fE._3
1220+ let as = fE._4
1221+ let aq = fE._5
1222+ let bM = bN(ax, ba, aq, fD)
1223+ let cv = getIntegerValue(this, (((((ax + "_") + aA) + "_") + ej) + v))
1224+ let dT = getStringValue(this, (((((ax + "_") + aA) + "_") + ej) + w))
1225+ let dR = ei(aA, ax, ej, (cv > 0))
1226+ if ((cv == 0))
11591227 then throw("You can't liquidate position without borrow")
1160- else [IntegerEntry((((((ax + "_") + aA) + "_") + ei) + y), getIntegerValue(this, (ax + B))), IntegerEntry((ax + A), (ay(ax) - fo)), IntegerEntry((ax + z), (aw(ax) - fo)), IntegerEntry((((((ax + "_") + aA) + "_") + ei) + t), (dQ - fo)), ScriptTransfer(ad.caller, bL, fromBase58String(aq))]
1228+ else [IntegerEntry((((((ax + "_") + aA) + "_") + ej) + y), getIntegerValue(this, (ax + B))), IntegerEntry((ax + A), (ay(ax) - fD)), IntegerEntry((ax + z), (aw(ax) - fD)), IntegerEntry((((((ax + "_") + aA) + "_") + ej) + t), (dR - fD)), ScriptTransfer(ad.caller, bM, fromBase58String(aq))]
11611229 }
11621230
11631231
11641232
11651233 @Callable(ad)
1166-func capitalizeExKeeper (ax,au,fq,fr,fs,dc,dd,de,df,dg,dh,di) = {
1167- let ft = if (fs)
1168- then cC(au, ax)
1234+func capitalizeExKeeper (ax,au,fF,fG,fH,dd,de,df,dg,dh,di,dj) = {
1235+ let fI = if (fH)
1236+ then cD(au, ax)
11691237 else {
1170- let fu = if ((au == a))
1238+ let fJ = if ((au == a))
11711239 then aa
11721240 else ab
1173- $Tuple2(fr, fu)
1241+ $Tuple2(fG, fJ)
11741242 }
1175- let fv = ft._1
1176- let fu = ft._2
1177- let fw = cY(fq, fr, fu, dc, dd, de, df, dg, dh, di)
1178- let bD = (fv - fr)
1179- let fx = if ((bD > 0))
1180- then [IntegerEntry((ax + N), (bD + valueOrElse(getInteger(this, (ax + N)), 0)))]
1243+ let fK = fI._1
1244+ let fJ = fI._2
1245+ let fL = cZ(fF, fG, fJ, dd, de, df, dg, dh, di, dj)
1246+ let bE = (fK - fG)
1247+ let fM = if ((bE > 0))
1248+ then [IntegerEntry((ax + N), (bE + valueOrElse(getInteger(this, (ax + N)), 0)))]
11811249 else nil
1182- (du(ax, au, fq, fw) ++ fx)
1250+ (dv(ax, au, fF, fL) ++ fM)
11831251 }
11841252
11851253
11861254
11871255 @Callable(ad)
1188-func capitalizeExPuzzle (ax,au,fq,fr,fs,dl,dm,di) = {
1189- let fy = if (fs)
1190- then cC(au, ax)
1256+func capitalizeExPuzzle (ax,au,fF,fG,fH,dm,dn,dj) = {
1257+ let fN = if (fH)
1258+ then cD(au, ax)
11911259 else {
1192- let fu = if ((au == a))
1260+ let fJ = if ((au == a))
11931261 then aa
11941262 else ab
1195- $Tuple2(fr, fu)
1263+ $Tuple2(fG, fJ)
11961264 }
1197- let fv = fy._1
1198- let fu = fy._2
1199- let fw = dk(fq, fr, fu, dl, dm, di)
1200- let bD = (fv - fr)
1201- let fx = if ((bD > 0))
1202- then [IntegerEntry((ax + N), (bD + valueOrElse(getInteger(this, (ax + N)), 0)))]
1265+ let fK = fN._1
1266+ let fJ = fN._2
1267+ let fL = dl(fF, fG, fJ, dm, dn, dj)
1268+ let bE = (fK - fG)
1269+ let fM = if ((bE > 0))
1270+ then [IntegerEntry((ax + N), (bE + valueOrElse(getInteger(this, (ax + N)), 0)))]
12031271 else nil
1204- (du(ax, au, fq, fw) ++ fx)
1272+ (dv(ax, au, fF, fL) ++ fM)
12051273 }
12061274
12071275
12081276
12091277 @Callable(ad)
1210-func capitalizeExSwopFi (ax,au,fq,fr,fs,do,dp,dq,dr,ds,dt,di) = {
1211- let fz = if (fs)
1212- then cC(au, ax)
1278+func capitalizeExSwopFi (ax,au,fF,fG,fH,dp,dq,dr,ds,dt,du,dj) = {
1279+ let fO = if (fH)
1280+ then cD(au, ax)
12131281 else {
1214- let fu = if ((au == a))
1282+ let fJ = if ((au == a))
12151283 then aa
12161284 else ab
1217- $Tuple2(fr, fu)
1285+ $Tuple2(fG, fJ)
12181286 }
1219- let fv = fz._1
1220- let fu = fz._2
1221- let fw = dn(fq, fr, fu, do, dp, dq, dr, ds, dt, di)
1222- let bD = (fv - fr)
1223- let fx = if ((bD > 0))
1224- then [IntegerEntry((ax + N), (bD + valueOrElse(getInteger(this, (ax + N)), 0)))]
1287+ let fK = fO._1
1288+ let fJ = fO._2
1289+ let fL = do(fF, fG, fJ, dp, dq, dr, ds, dt, du, dj)
1290+ let bE = (fK - fG)
1291+ let fM = if ((bE > 0))
1292+ then [IntegerEntry((ax + N), (bE + valueOrElse(getInteger(this, (ax + N)), 0)))]
12251293 else nil
1226- (du(ax, au, fq, fw) ++ fx)
1294+ (dv(ax, au, fF, fL) ++ fM)
12271295 }
12281296
12291297
12301298
12311299 @Callable(ad)
1232-func initNewPool (au,ak,fA,fB,fC,fD,fE,fF) = if (if ((au != a))
1300+func initNewPool (au,ak,fP,fQ,fR,fS,fT,fU) = if (if ((au != a))
12331301 then (au != b)
12341302 else false)
12351303 then throw("Wrong type")
12361304 else {
1237- let fG = at(Address(fromBase58String(ak)), au)
1238- let ao = fG._1
1239- let ap = fG._2
1240- let fH = fG._3
1241- let fI = fG._4
1242- let aq = fG._5
1243-[IntegerEntry((ak + D), fA), IntegerEntry((ak + E), fB), IntegerEntry((ak + F), fC), IntegerEntry((ak + G), fD), IntegerEntry((ak + H), fE), IntegerEntry((ak + I), fF), IntegerEntry((ak + B), 0), IntegerEntry((ak + C), 0), StringEntry((L + ak), au), StringEntry((aq + M), ak)]
1305+ let fV = at(Address(fromBase58String(ak)), au)
1306+ let ao = fV._1
1307+ let ap = fV._2
1308+ let fW = fV._3
1309+ let fX = fV._4
1310+ let aq = fV._5
1311+[IntegerEntry((ak + D), fP), IntegerEntry((ak + E), fQ), IntegerEntry((ak + F), fR), IntegerEntry((ak + G), fS), IntegerEntry((ak + H), fT), IntegerEntry((ak + I), fU), IntegerEntry((ak + B), 0), IntegerEntry((ak + C), 0), StringEntry((L + ak), au), StringEntry((aq + M), ak)]
12441312 }
12451313
12461314
12471315
12481316 @Callable(ad)
1249-func capitalizeTest (ax,bb,dv,dw) = {
1317+func capitalizeTest (ax,ba,dw,dx) = {
12501318 let ak = Address(fromBase58String(ax))
1251- let fJ = at(ak, bb)
1252- let dy = fJ._1
1253- let dz = fJ._2
1254- let ar = fJ._3
1255- let as = fJ._4
1256- let aq = fJ._5
1257- let fK = if ((dv == dy))
1258- then $Tuple2(dw, 0)
1259- else $Tuple2(0, dw)
1260- let br = fK._1
1261- let bs = fK._2
1262- let fL = cF(bb, ax, i, br, dy, bs, dz, ar, as, aq)
1263- let cQ = fL._1
1264- let dC = fL._2
1265- let dD = valueOrElse(getInteger(this, (ax + B)), 0)
1266- let dE = valueOrElse(getInteger(this, (ax + C)), 0)
1267- let dF = aw(ax)
1268- let dG = ay(ax)
1269- let dH = fraction(dG, j, dF)
1270- let dI = fraction(cQ, dH, j)
1271- let dJ = (cQ - dI)
1272- let dK = if ((dG > 0))
1273- then (dD + fraction(dI, k, dG))
1319+ let fY = at(ak, ba)
1320+ let dz = fY._1
1321+ let dA = fY._2
1322+ let ar = fY._3
1323+ let as = fY._4
1324+ let aq = fY._5
1325+ let fZ = if ((dw == dz))
1326+ then $Tuple2(dx, 0)
1327+ else $Tuple2(0, dx)
1328+ let bs = fZ._1
1329+ let bt = fZ._2
1330+ let ga = cG(ba, ax, i, bs, dz, bt, dA, ar, as, aq)
1331+ let cR = ga._1
1332+ let dD = ga._2
1333+ let dE = valueOrElse(getInteger(this, (ax + B)), 0)
1334+ let dF = valueOrElse(getInteger(this, (ax + C)), 0)
1335+ let dG = aw(ax)
1336+ let dH = ay(ax)
1337+ let dI = fraction(dH, j, dG)
1338+ let dJ = fraction(cR, dI, j)
1339+ let dK = (cR - dJ)
1340+ let dL = if ((dH > 0))
1341+ then (dE + fraction(dJ, k, dH))
12741342 else 0
1275- let dL = if (((dF - dG) > 0))
1276- then (dE + fraction(dJ, k, (dF - dG)))
1343+ let dM = if (((dG - dH) > 0))
1344+ then (dF + fraction(dK, k, (dG - dH)))
12771345 else 0
1278- let dM = fraction(dI, aB(ax, d), l)
1279- let dN = fraction(dJ, aB(ax, c), l)
1280- let dO = bM(ax, bb, aq, (dM + dN))
1281- if ((dO == dO))
1282- then ([IntegerEntry((ax + B), dK), IntegerEntry((ax + C), dL), IntegerEntry((ax + z), ((dF + cQ) - dO)), IntegerEntry((ax + A), ((dG + dI) - dM)), ScriptTransfer(W, (dM + dN), fromBase58String(aq))] ++ bn(dy, dz, aq))
1346+ let dN = fraction(dJ, aB(ax, d), l)
1347+ let dO = fraction(dK, aB(ax, c), l)
1348+ let dP = bN(ax, ba, aq, (dN + dO))
1349+ if ((dP == dP))
1350+ then ([IntegerEntry((ax + B), dL), IntegerEntry((ax + C), dM), IntegerEntry((ax + z), ((dG + cR) - dP)), IntegerEntry((ax + A), ((dH + dJ) - dN)), ScriptTransfer(W, (dN + dO), fromBase58String(aq))] ++ bn(dz, dA, aq))
12831351 else throw("Strict value is not equal to itself.")
12841352 }
12851353
12861354
12871355
12881356 @Callable(ad)
12891357 func claimFarmedTest (au,ax) = if ((au == a))
12901358 then {
1291- let cD = ae(aa)
1292- if ((cD == cD))
1359+ let cE = ae(aa)
1360+ if ((cE == cE))
12931361 then {
1294- let bR = invoke(aD(), "claim", [ax], nil)
1295- if ((bR == bR))
1362+ let bS = invoke(aD(), "claim", [ax], nil)
1363+ if ((bS == bS))
12961364 then {
1297- let cE = ae(aa)
1298- $Tuple2(nil, $Tuple2((cE - cD), aa))
1365+ let cF = ae(aa)
1366+ $Tuple2(nil, $Tuple2((cF - cE), aa))
12991367 }
13001368 else throw("Strict value is not equal to itself.")
13011369 }
13021370 else throw("Strict value is not equal to itself.")
13031371 }
13041372 else if ((au == b))
13051373 then {
1306- let cD = ae(ab)
1307- if ((cD == cD))
1374+ let cE = ae(ab)
1375+ if ((cE == cE))
13081376 then {
1309- let bR = invoke(aE(Address(fromBase58String(ax))), "claimWX", [ax], nil)
1310- if ((bR == bR))
1377+ let bS = invoke(aE(Address(fromBase58String(ax))), "claimWX", [ax], nil)
1378+ if ((bS == bS))
13111379 then {
1312- let cE = ae(ab)
1313- $Tuple2(nil, $Tuple2((cE - cD), ab))
1380+ let cF = ae(ab)
1381+ $Tuple2(nil, $Tuple2((cF - cE), ab))
13141382 }
13151383 else throw("Strict value is not equal to itself.")
13161384 }
13171385 else throw("Strict value is not equal to itself.")
13181386 }
13191387 else throw("Wrong pool type")
13201388
13211389
1322-@Verifier(fM)
1323-func fN () = sigVerify(fM.bodyBytes, fM.proofs[0], fM.senderPublicKey)
1390+@Verifier(gb)
1391+func gc () = sigVerify(gb.bodyBytes, gb.proofs[0], gb.senderPublicKey)
13241392

github/deemru/w8io/169f3d6 
501.75 ms