tx · 2dh898hSMEeoAvR25DE53RCGXkHrz6yz86qyw8fANhKh

3N2M4PztorHwrfENp7D6LhYGgGodjiD1fjn:  -0.02400000 Waves

2023.08.24 15:42 [2724733] smart account 3N2M4PztorHwrfENp7D6LhYGgGodjiD1fjn > SELF 0.00000000 Waves

{ "type": 13, "id": "2dh898hSMEeoAvR25DE53RCGXkHrz6yz86qyw8fANhKh", "fee": 2400000, "feeAssetId": null, "timestamp": 1692880933594, "version": 2, "chainId": 84, "sender": "3N2M4PztorHwrfENp7D6LhYGgGodjiD1fjn", "senderPublicKey": "Fj9LPkCtmW3pDnVU6wPQnvqpZJCBieWSvZqY5FAGeCyp", "proofs": [ "36d4N8ykDfk9x3zDuGNZeefpuB5iixZrK97HqRqDDJKUgrQRrm1K8fxuHWhWJwwnY5Qe6DhHdnySD8roWQAPicJR", "39PhwqhCVo6SFJq82qWNEzaHAy4md4rwBBm3pNFJN1pjbe71C9oM93n7NsjYxShiw5oHarYvN9PDXYZeb84SiSVJ" ], "script": "base64:BgIhCAISABIAEgQKAggIEgMKAQgSBwoFCAgIAQESAwoBCBIAUAAGU0NBTEU4AIDC1y8AC0xFTkRFUlNfQVBSCQDMCAIAlgEJAMwIAgB4CQDMCAIAZAkAzAgCAFAJAMwIAgA8CQDMCAIAKAkAzAgCAB4JAMwIAgAUCQDMCAIACgUDbmlsABNMRU5ERVJTX0FQUl9QRVJJT0RTCQDMCAICAzEtMQkAzAgCAgMyLTIJAMwIAgIDMy0zCQDMCAICAzQtNAkAzAgCAgM1LTgJAMwIAgIEOS0xMgkAzAgCAgUxNC0xNgkAzAgCAgUxNy0yMAkAzAgCAgYyMC0xMDQFA25pbAATTEVOREVSU19NQVhfUEVSSU9EUwBoAAZMUF9BUFIJAMwIAgCWAQkAzAgCAHgJAMwIAgBkCQDMCAIAUAkAzAgCADwJAMwIAgAoBQNuaWwADkxQX0FQUl9QRVJJT0RTCQDMCAICAzEtMQkAzAgCAgMyLTIJAMwIAgIDMy0zCQDMCAICAzQtNAkAzAgCAgM1LTgJAMwIAgIEOS0xMgUDbmlsAA5MUF9NQVhfUEVSSU9EUwAMAAxrU3RhcnRIZWlnaHQCC3N0YXJ0SGVpZ2h0AA1rUGVyaW9kTGVuZ3RoAgxwZXJpb2RMZW5ndGgAEWtMZW5kZXJzTWF4QW1vdW50AhFsZW5kUmV3YXJkc0Ftb3VudAAMa0xQTWF4QW1vdW50Ag5scFJld2FyZEFtb3VudAAHa1Rva2VucwIGdG9rZW5zAAtrVXNlclN1cHBseQIQX3VzZXJUb3RhbFN1cHBseQAOa1Rva2VuSW50ZXJlc3QCDl90b2tlbkludGVyZXN0ABRrVG9rZW5JbnRlcmVzdEhlaWdodAIUX3Rva2VuSW50ZXJlc3RIZWlnaHQAFGtUb2tlblJld2FyZFBlckJsb2NrAhRfdG9rZW5SZXdhcmRQZXJCbG9jawARa0xhc3RVcGRhdGVQZXJpb2QCEnJld2FyZFVwZGF0ZVBlcmlvZAARa1VzZXJMZW5kSW50ZXJlc3QCEV91c2VyTGFuZEludGVyZXN0ABdrVXNlckxlbmRBdmFpbGFibGVDbGFpbQIXX3VzZXJMZW5kQXZhaWxhYmxlQ2xhaW0AFWtVc2VyTHBBdmFpbGFibGVDbGFpbQIVX3VzZXJMcEF2YWlsYWJsZUNsYWltAAtrTHBJbnRlcmVzdAIKbHBJbnRlcmVzdAARa0xwSW50ZXJlc3RIZWlnaHQCEGxwSW50ZXJlc3RIZWlnaHQADWtQcmV2TFBTdXBwbHkCEXByZXZMUFRvdGFsU3VwcGx5ABFrTHBSZXdhcmRQZXJCbG9jawIQbHBSZXdhcmRQZXJCbG9jawAPa1VzZXJMcEludGVyZXN0Ag9fdXNlckxwSW50ZXJlc3QADmtQcmljZUluT3JhY2xlAgdfdHdhcDVCABRrUHJldkxlbmRUb2tlblN1cHBseQIUX3ByZXZMZW5kVG90YWxTdXBwbHkADGtBWExZVG9rZW5JZAILYXhseVRva2VuSWQAEGtMZW5kVG9rZW5TdXBwbHkCD3RvdGFsX3N1cHBsaWVkXwAPa0xlbmRVc2VyU3VwcGx5Agpfc3VwcGxpZWRfABBrTGVuZFNldHVwVG9rZW5zAgxzZXR1cF90b2tlbnMADmtTRlRvdGFsU3VwcGx5AhpfdG90YWxfc2hhcmVfdG9rZW5zX2xvY2tlZAASa1NGVXNlclRvdGFsU3VwcGx5AhRfc2hhcmVfdG9rZW5zX2xvY2tlZAAJa0F4bHlQb29sAghheGx5UG9vbAAFa0xwSWQCDnNoYXJlX2Fzc2V0X2lkAAxrUHJpY2VPcmFjbGUCDHByaWNlX29yYWNsZQARa0F4bHlNYWluQ29udHJhY3QCDG1haW5Db250cmFjdAAWa0F4bHlUb2tlbm9taWNDb250cmFjdAIRdG9rZW5vbWljQ29udHJhY3QAEmtTRkZhcm1pbmdDb250cmFjdAITc3dvcGZpX2Zhcm1pbmdfYWRkcgANa0xlbmRDb250cmFjdAIRbGVuZF9zZXJ2aWNlX2FkZHIACWtBZG1pbjFQSwIVZ3JvdXAxX2FkbWluMV9wdWJfa2V5AAlrQWRtaW4yUEsCFWdyb3VwMV9hZG1pbjJfcHViX2tleQAJa0FkbWluM1BLAhVncm91cDFfYWRtaW4zX3B1Yl9rZXkAD2tPcGVyYXRvckNhbGxQSwISYWRtaW5fY2FsbF9wdWJfa2V5AAhheGx5UG9vbAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMFCWtBeGx5UG9vbAIWQ2FuJ3QgZ2V0IGF4bHlQb29sIGtleQAMbWFpbkNvbnRyYWN0CQERQGV4dHJOYXRpdmUoMTA2MikBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwURa0F4bHlNYWluQ29udHJhY3QCGUNhbid0IGdldCBtYWluQ29udGFjdCBrZXkADXRva2VuQ29udHJhY3QJARFAZXh0ck5hdGl2ZSgxMDYyKQEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzBRZrQXhseVRva2Vub21pY0NvbnRyYWN0Ah9DYW4ndCBnZXQgdG9rZW5vbWljQ29udHJhY3Qga2V5AAxsZW5kQ29udHJhY3QJARFAZXh0ck5hdGl2ZSgxMDYyKQEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQxtYWluQ29udHJhY3QFDWtMZW5kQ29udHJhY3QCH0Nhbid0IGdldCBsZW5kX3NlcnZpY2VfYWRkciBrZXkAEXNmRmFybWluZ0NvbnRyYWN0CQERQGV4dHJOYXRpdmUoMTA2MikBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUMbWFpbkNvbnRyYWN0BRJrU0ZGYXJtaW5nQ29udHJhY3QCIUNhbid0IGdldCBzd29wZmlfZmFybWluZ19hZGRyIGtleQAPcHJpY2VPcmFjbGVBZGRyCQERQGV4dHJOYXRpdmUoMTA2MikBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUMbWFpbkNvbnRyYWN0BQxrUHJpY2VPcmFjbGUCGkNhbid0IGdldCBwcmljZV9vcmFjbGUga2V5AAhhZG1pbjFQSwkA2QQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUMbWFpbkNvbnRyYWN0BQlrQWRtaW4xUEsCEkNhbid0IGdldCBhZG1pbjFQSwAIYWRtaW4yUEsJANkEAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFDG1haW5Db250cmFjdAUJa0FkbWluMlBLAhJDYW4ndCBnZXQgYWRtaW4yUEsACGFkbWluM1BLCQDZBAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQxtYWluQ29udHJhY3QFCWtBZG1pbjNQSwIUQ2FuJ3QgZ2V0IG9wZXJhdG9yUEsACm9wZXJhdG9yUEsJANkEAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMFD2tPcGVyYXRvckNhbGxQSwIUQ2FuJ3QgZ2V0IG9wZXJhdG9yUEsABmF4bHlJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFDXRva2VuQ29udHJhY3QFDGtBWExZVG9rZW5JZAIXQ2FuJ3QgZ2V0IEF4bHkgdG9rZW4gaWQAC3N0YXJ0SGVpZ2h0CQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzBQxrU3RhcnRIZWlnaHQADHBlcmlvZExlbmd0aAkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwUNa1BlcmlvZExlbmd0aAANbGVuZE1heEFtb3VudAkBEUBleHRyTmF0aXZlKDEwNTApAgUNdG9rZW5Db250cmFjdAURa0xlbmRlcnNNYXhBbW91bnQAE2xlbmRNYXhQZXJpb2RBbW91bnQJAGkCBQ1sZW5kTWF4QW1vdW50BRNMRU5ERVJTX01BWF9QRVJJT0RTAAtscE1heEFtb3VudAkBEUBleHRyTmF0aXZlKDEwNTApAgUNdG9rZW5Db250cmFjdAUMa0xQTWF4QW1vdW50ABFscE1heFBlcmlvZEFtb3VudAkAaQIFC2xwTWF4QW1vdW50BQ5MUF9NQVhfUEVSSU9EUwELaXNBZG1pbkNhbGwBAWkDCQEPY29udGFpbnNFbGVtZW50AgkAzAgCBQhhZG1pbjFQSwkAzAgCBQhhZG1pbjJQSwkAzAgCBQhhZG1pbjNQSwUDbmlsCAUBaQ9jYWxsZXJQdWJsaWNLZXkFBHVuaXQJAAIBAihPbmx5IGFkbWluIGdyb3VwMSBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uAQppc1NlbGZDYWxsAQFpAwkAAAIIBQFpBmNhbGxlcgUEdGhpcwUEdW5pdAkAAgECK09ubHkgY29udHJhY3QgaXRzZWxmIGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24BDmlzT3BlcmF0b3JDYWxsAQFpAwkAAAIIBQFpD2NhbGxlclB1YmxpY0tleQUKb3BlcmF0b3JQSwUEdW5pdAkAAgECJE9ubHkgb3BlcmF0b3IgY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgEKaXNMYW5kQ2FsbAEBaQMJAAACCAUBaQZjYWxsZXIFDGxlbmRDb250cmFjdAUEdW5pdAkAAgECKU9ubHkgbGFuZCBjb250cmFjdCBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uAQ9pc1NGRmFybWluZ0NhbGwBAWkDCQAAAggFAWkGY2FsbGVyBRFzZkZhcm1pbmdDb250cmFjdAUEdW5pdAkAAgECKU9ubHkgbGFuZCBjb250cmFjdCBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uAQxnZXRBbGxUb2tlbnMABAZ0b2tlbnMJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwUHa1Rva2VucwIAAwkAAAIFBnRva2VucwIABQNuaWwJALUJAgUGdG9rZW5zAgEsAQ1nZXRBc3NldFByaWNlAQdhc3NldElkCQERQGV4dHJOYXRpdmUoMTA1MCkCBQ9wcmljZU9yYWNsZUFkZHIJAKwCAgUHYXNzZXRJZAUOa1ByaWNlSW5PcmFjbGUBEGdldEFzc2V0RGVjaW1hbHMBB2Fzc2V0SWQDCQAAAgUHYXNzZXRJZAIFV0FWRVMACAQHJG1hdGNoMAkA7AcBCQDZBAEFB2Fzc2V0SWQDCQABAgUHJG1hdGNoMAIFQXNzZXQEBWFzc2V0BQckbWF0Y2gwCAUFYXNzZXQIZGVjaW1hbHMJAAIBAhBDYW4ndCBmaW5kIGFzc2V0ARFnZXRBc3NldFByZWNpc2lvbgEHYXNzZXRJZAkAbAYACgAACQEQZ2V0QXNzZXREZWNpbWFscwEFB2Fzc2V0SWQAAAAABQRET1dOARVnZXRBZG9wdGVkQVBSQnlQZXJpb2QDBnBlcmlvZAphcHJQZXJpb2RzA2FwcgoBA2ZvcgIBYQdhcGVyaW9kBAskdDA1MzYyNTM4NAUBYQQFaW5kZXgIBQskdDA1MzYyNTM4NAJfMQQFZm91bmQIBQskdDA1MzYyNTM4NAJfMgQCZnQJALUJAgUHYXBlcmlvZAIBLQQLJHQwNTQyMTU0ODQJAJQKAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmZ0AAAJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJmdAABBARmcm9tCAULJHQwNTQyMTU0ODQCXzEEAnRvCAULJHQwNTQyMTU0ODQCXzIDBQVmb3VuZAUBYQMDCQBnAgUGcGVyaW9kBQRmcm9tCQBnAgUCdG8FBnBlcmlvZAcJAJQKAgUFaW5kZXgGCQCUCgIJAGQCBQVpbmRleAABBwQLJHQwNTYyMTU2ODcKAAIkbAUTTEVOREVSU19BUFJfUEVSSU9EUwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgAABwoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEDZm9yAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA5CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJBAVpbmRleAgFCyR0MDU2MjE1Njg3Al8xBAVmb3VuZAgFCyR0MDU2MjE1Njg3Al8yAwUFZm91bmQJAGsDCQBoAgkAkQMCBQtMRU5ERVJTX0FQUgUFaW5kZXgFBlNDQUxFOAAHAO0CAAABF2dldFRvdGFsU3VwcGx5QWxsVG9rZW5zAAoBA2ZvcgIBYQd0b2tlbklkBAskdDA1ODc1NTkzMQUBYQQLdG90YWxTdXBwbHkIBQskdDA1ODc1NTkzMQJfMQQOdG90YWxTdXBwbHlVc2QIBQskdDA1ODc1NTkzMQJfMgQRdG90YWxTdXBwbHlVc2RBbGwIBQskdDA1ODc1NTkzMQJfMwQHdFN1cHBseQkBC3ZhbHVlT3JFbHNlAgkAmggCBQxsZW5kQ29udHJhY3QJAKwCAgUQa0xlbmRUb2tlblN1cHBseQUHdG9rZW5JZAAABAphc3NldFByaWNlCQENZ2V0QXNzZXRQcmljZQEFB3Rva2VuSWQEDmFzc2V0UHJlY2lzaW9uCQERZ2V0QXNzZXRQcmVjaXNpb24BBQd0b2tlbklkBAp0U3VwcGx5VXNkCQBrAwUHdFN1cHBseQUKYXNzZXRQcmljZQUOYXNzZXRQcmVjaXNpb24JAJUKAwkAzQgCBQt0b3RhbFN1cHBseQUHdFN1cHBseQkAzQgCBQ50b3RhbFN1cHBseVVzZAUKdFN1cHBseVVzZAkAZAIFEXRvdGFsU3VwcGx5VXNkQWxsBQp0U3VwcGx5VXNkCgACJGwJAQxnZXRBbGxUb2tlbnMACgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlQoDBQNuaWwFA25pbAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQNmb3ICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDMwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkAGgAbABwAHQAeARFnZXRUb3RhbFN1cHBseVVzZAEHdG9rZW5JZAQHdFN1cHBseQkBC3ZhbHVlT3JFbHNlAgkAmggCBQxsZW5kQ29udHJhY3QJAKwCAgUQa0xlbmRUb2tlblN1cHBseQUHdG9rZW5JZAAABAphc3NldFByaWNlCQENZ2V0QXNzZXRQcmljZQEFB3Rva2VuSWQEDmFzc2V0UHJlY2lzaW9uCQERZ2V0QXNzZXRQcmVjaXNpb24BBQd0b2tlbklkCQBrAwUHdFN1cHBseQUKYXNzZXRQcmljZQUOYXNzZXRQcmVjaXNpb24BFGNhbGNOZXdUb2tlbkludGVyZXN0Agd0b2tlbklkC3RvdGFsU3VwcGx5AwkAZwIFC3N0YXJ0SGVpZ2h0BQZoZWlnaHQAAAQOcmV3YXJkUGVyQmxvY2sJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgUHdG9rZW5JZAUUa1Rva2VuUmV3YXJkUGVyQmxvY2sEC29sZEludGVyZXN0CQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQCsAgIFB3Rva2VuSWQFDmtUb2tlbkludGVyZXN0BAx1cGRhdGVIZWlnaHQJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgUHdG9rZW5JZAUUa1Rva2VuSW50ZXJlc3RIZWlnaHQEBnJld2FyZAkAaAIJAGUCBQZoZWlnaHQFDHVwZGF0ZUhlaWdodAUOcmV3YXJkUGVyQmxvY2sECGludGVyZXN0AwkAZgIFC3RvdGFsU3VwcGx5AAAJAGsDBQZyZXdhcmQFBlNDQUxFOAULdG90YWxTdXBwbHkAAAkAZAIFC29sZEludGVyZXN0BQhpbnRlcmVzdAERY2FsY05ld0xwSW50ZXJlc3QBC3RvdGFsU3VwcGx5AwkAZwIFC3N0YXJ0SGVpZ2h0BQZoZWlnaHQAAAQOcmV3YXJkUGVyQmxvY2sJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwURa0xwUmV3YXJkUGVyQmxvY2sAAAQLb2xkSW50ZXJlc3QJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwULa0xwSW50ZXJlc3QAAAQMdXBkYXRlSGVpZ2h0CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFEWtMcEludGVyZXN0SGVpZ2h0BQZoZWlnaHQEBnJld2FyZAkAaAIJAGUCBQZoZWlnaHQFDHVwZGF0ZUhlaWdodAUOcmV3YXJkUGVyQmxvY2sECGludGVyZXN0AwkAZgIFC3RvdGFsU3VwcGx5AAAJAGsDBQZyZXdhcmQFBlNDQUxFOAULdG90YWxTdXBwbHkAAAkAZAIFC29sZEludGVyZXN0BQhpbnRlcmVzdAESY2FsY0xlbmRVc2VyUmV3YXJkAgR1c2VyB3Rva2VuSWQEC3RvdGFsU3VwcGx5CQELdmFsdWVPckVsc2UCCQCaCAIFDGxlbmRDb250cmFjdAkArAICBRBrTGVuZFRva2VuU3VwcGx5BQd0b2tlbklkAAAEDXRva2VuSW50ZXJlc3QJARRjYWxjTmV3VG9rZW5JbnRlcmVzdAIFB3Rva2VuSWQFC3RvdGFsU3VwcGx5BAp1c2VyU3VwcGx5CQELdmFsdWVPckVsc2UCCQCaCAIFDGxlbmRDb250cmFjdAkArAICCQCsAgIFBHVzZXIFD2tMZW5kVXNlclN1cHBseQUHdG9rZW5JZAAABBF1c2VyVG9rZW5JbnRlcmVzdAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgkArAICBQd0b2tlbklkAgFfBQR1c2VyBRFrVXNlckxlbmRJbnRlcmVzdAMJAAACBQp1c2VyU3VwcGx5AAAFDXRva2VuSW50ZXJlc3QAAAQGcmV3YXJkCQBrAwUKdXNlclN1cHBseQkAZQIFDXRva2VuSW50ZXJlc3QFEXVzZXJUb2tlbkludGVyZXN0BQZTQ0FMRTgJAJUKAwUGcmV3YXJkBQ10b2tlbkludGVyZXN0BQp1c2VyU3VwcGx5ARBjYWxjTHBVc2VyUmV3YXJkAQR1c2VyBAt0b3RhbFN1cHBseQkBC3ZhbHVlT3JFbHNlAgkAmggCBRFzZkZhcm1pbmdDb250cmFjdAkArAICBQhheGx5UG9vbAUOa1NGVG90YWxTdXBwbHkAAAQNdG9rZW5JbnRlcmVzdAkBEWNhbGNOZXdMcEludGVyZXN0AQULdG90YWxTdXBwbHkECnVzZXJTdXBwbHkJAQt2YWx1ZU9yRWxzZQIJAJoIAgURc2ZGYXJtaW5nQ29udHJhY3QJAKwCAgkArAICCQCsAgIFCGF4bHlQb29sAgFfBQR1c2VyBRJrU0ZVc2VyVG90YWxTdXBwbHkAAAQRdXNlclRva2VuSW50ZXJlc3QJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICBQR1c2VyBQ9rVXNlckxwSW50ZXJlc3QDCQAAAgUKdXNlclN1cHBseQAABQ10b2tlbkludGVyZXN0AAAEBnJld2FyZAkAawMFCnVzZXJTdXBwbHkJAGUCBQ10b2tlbkludGVyZXN0BRF1c2VyVG9rZW5JbnRlcmVzdAUGU0NBTEU4CQCVCgMFBnJld2FyZAUNdG9rZW5JbnRlcmVzdAUKdXNlclN1cHBseQEYY2xhaW1MZW5kZXJSZXdhcmRzQ29tbW9uAgR1c2VyCHJlYWRPbmx5CgEFY2xhaW0CAWEHdG9rZW5JZAQLJHQwODgyMDg4NjQFAWEECHRva2VuSWRzCAULJHQwODgyMDg4NjQCXzEEB2NBbW91bnQIBQskdDA4ODIwODg2NAJfMgQFdG90YWwIBQskdDA4ODIwODg2NAJfMwQIZW50ZXJpZXMIBQskdDA4ODIwODg2NAJfNAQSdXNlckF2YWlsYWJsZUNsYWltCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgkArAICCQCsAgIFB3Rva2VuSWQCAV8FBHVzZXIFF2tVc2VyTGVuZEF2YWlsYWJsZUNsYWltAAAECyR0MDg5Nzc5MDU2CQESY2FsY0xlbmRVc2VyUmV3YXJkAgUEdXNlcgUHdG9rZW5JZAQHdVJld2FyZAgFCyR0MDg5Nzc5MDU2Al8xBBBuZXdUb2tlbkludGVyZXN0CAULJHQwODk3NzkwNTYCXzIECnVzZXJTdXBwbHkIBQskdDA4OTc3OTA1NgJfMwQMdG90YWxUb0NsYWltCQBkAgUSdXNlckF2YWlsYWJsZUNsYWltBQd1UmV3YXJkAwMJAGYCBQx0b3RhbFRvQ2xhaW0AAAYJAGYCBQp1c2VyU3VwcGx5AAAEDG5ld0VudHJlcmllcwMDBQhyZWFkT25seQYJAAACBQx0b3RhbFRvQ2xhaW0AAAUIZW50ZXJpZXMJAM4IAgUIZW50ZXJpZXMJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIFB3Rva2VuSWQCAV8FBHVzZXIFEWtVc2VyTGVuZEludGVyZXN0BRBuZXdUb2tlbkludGVyZXN0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICBQd0b2tlbklkAgFfBQR1c2VyBRdrVXNlckxlbmRBdmFpbGFibGVDbGFpbQAACQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFB3Rva2VuSWQFDmtUb2tlbkludGVyZXN0BRBuZXdUb2tlbkludGVyZXN0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFB3Rva2VuSWQFFGtUb2tlbkludGVyZXN0SGVpZ2h0BQZoZWlnaHQFA25pbAkAlgoECQDNCAIFCHRva2VuSWRzBQd0b2tlbklkCQDNCAIFB2NBbW91bnQFDHRvdGFsVG9DbGFpbQkAZAIFBXRvdGFsBQx0b3RhbFRvQ2xhaW0FDG5ld0VudHJlcmllcwkAlgoEBQh0b2tlbklkcwUHY0Ftb3VudAUFdG90YWwFCGVudGVyaWVzCgACJGwJAQxnZXRBbGxUb2tlbnMACgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlgoEBQNuaWwFA25pbAAABQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBBWNsYWltAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAzMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAAZABoAGwAcAB0AHgEUY2xhaW1McFJld2FyZHNDb21tb24CBHVzZXIIcmVhZE9ubHkEEnVzZXJBdmFpbGFibGVDbGFpbQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIFBHVzZXIFFWtVc2VyTHBBdmFpbGFibGVDbGFpbQAABAwkdDA5OTg3MTAwNTIJARBjYWxjTHBVc2VyUmV3YXJkAQUEdXNlcgQHdVJld2FyZAgFDCR0MDk5ODcxMDA1MgJfMQQNbmV3THBJbnRlcmVzdAgFDCR0MDk5ODcxMDA1MgJfMgQKdXNlclN1cHBseQgFDCR0MDk5ODcxMDA1MgJfMwQMdG90YWxUb0NsYWltCQBkAgUSdXNlckF2YWlsYWJsZUNsYWltBQd1UmV3YXJkAwMFCHJlYWRPbmx5BgkAAAIFDHRvdGFsVG9DbGFpbQAACQCUCgIFDHRvdGFsVG9DbGFpbQUDbmlsCQCUCgIFDHRvdGFsVG9DbGFpbQkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQR1c2VyBQ9rVXNlckxwSW50ZXJlc3QFDW5ld0xwSW50ZXJlc3QJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEdXNlcgUVa1VzZXJMcEF2YWlsYWJsZUNsYWltAAAJAMwIAgkBDEludGVnZXJFbnRyeQIFC2tMcEludGVyZXN0BQ1uZXdMcEludGVyZXN0CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRFrTHBJbnRlcmVzdEhlaWdodAUGaGVpZ2h0BQNuaWwBDWdldFRva2Vuc0FQUnMABAlheGx5UHJpY2UJAQ1nZXRBc3NldFByaWNlAQUGYXhseUlkBA1heGx5UHJlY2lzaW9uCQERZ2V0QXNzZXRQcmVjaXNpb24BBQZheGx5SWQKAQp0b2tlbnNBcHJzAgNhcHIHdG9rZW5JZAQEcndwYgkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIFB3Rva2VuSWQFFGtUb2tlblJld2FyZFBlckJsb2NrAAAEB3J3cGJVc2QJAGsDBQRyd3BiBQlheGx5UHJpY2UFDWF4bHlQcmVjaXNpb24EBnJ3WWVhcgkAaAIJAGgCBQdyd3BiVXNkBQxwZXJpb2RMZW5ndGgANAQOdG90YWxTdXBwbHlVc2QJARFnZXRUb3RhbFN1cHBseVVzZAEFB3Rva2VuSWQJAM0IAgUDYXByCQBrAwUGcndZZWFyBQZTQ0FMRTgFDnRvdGFsU3VwcGx5VXNkBARhcHJzCgACJGwJAQxnZXRBbGxUb2tlbnMACgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQp0b2tlbnNBcHJzAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAzMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAAZABoAGwAcAB0AHgQNbHBUb3RhbFN1cHBseQkBEUBleHRyTmF0aXZlKDEwNTApAgURc2ZGYXJtaW5nQ29udHJhY3QJAKwCAgUIYXhseVBvb2wFDmtTRlRvdGFsU3VwcGx5BARscElkCQERQGV4dHJOYXRpdmUoMTA1MykCCQERQGV4dHJOYXRpdmUoMTA2MikBBQhheGx5UG9vbAUFa0xwSWQEC2xwUHJlY2lzaW9uCQERZ2V0QXNzZXRQcmVjaXNpb24BBQRscElkBAdscFByaWNlCgABQAkA/AcEBQxtYWluQ29udHJhY3QCGmdldFNoYXJlQXNzZXRQcmljZVJFQURPTkxZCQDMCAIFBGxwSWQFA25pbAUDbmlsAwkAAQIFAUACA0ludAUBQAkAAgEJAKwCAgkAAwEFAUACGCBjb3VsZG4ndCBiZSBjYXN0IHRvIEludAQQbHBUb3RhbFN1cHBseVVzZAkAawMFDWxwVG90YWxTdXBwbHkFB2xwUHJpY2UFC2xwUHJlY2lzaW9uBARyd3BiCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFEWtMcFJld2FyZFBlckJsb2NrAAAEB3J3cGJVc2QJAGsDBQRyd3BiBQlheGx5UHJpY2UFDWF4bHlQcmVjaXNpb24EBnJ3WWVhcgkAaAIJAGgCBQdyd3BiVXNkBQxwZXJpb2RMZW5ndGgANAQFbHBBcHIJAGsDBQZyd1llYXIFBlNDQUxFOAUQbHBUb3RhbFN1cHBseVVzZAkAlQoDCQEMZ2V0QWxsVG9rZW5zAAUEYXBycwUFbHBBcHIHAWkBEmNsYWltTGVuZGVyUmV3YXJkcwAECGNsYWltUmVzCQEYY2xhaW1MZW5kZXJSZXdhcmRzQ29tbW9uAgkApQgBCAUBaQZjYWxsZXIHAwkAAAIIBQhjbGFpbVJlcwJfMwAACQACAQIjY2xhaW0gYW1vdW50IG11c3QgYmUgZ3JlYXRlciB0aGFuIDAEA2ludgkA/AcEBQ10b2tlbkNvbnRyYWN0AhJ3aXRoZHJhd0xlbmRSZXdhcmQJAMwIAggFCGNsYWltUmVzAl8zCQDMCAIJAKUIAQgFAWkGY2FsbGVyBQNuaWwFA25pbAMJAAACBQNpbnYFA2ludggFCGNsYWltUmVzAl80CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBDmNsYWltTHBSZXdhcmRzAAQIY2xhaW1SZXMJARRjbGFpbUxwUmV3YXJkc0NvbW1vbgIJAKUIAQgFAWkGY2FsbGVyBwMJAAACCAUIY2xhaW1SZXMCXzEAAAkAAgECI2NsYWltIGFtb3VudCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwBANpbnYJAPwHBAUNdG9rZW5Db250cmFjdAIQd2l0aGRyYXdMcFJld2FyZAkAzAgCCAUIY2xhaW1SZXMCXzEJAMwIAgkApQgBCAUBaQZjYWxsZXIFA25pbAUDbmlsAwkAAAIFA2ludgUDaW52CAUIY2xhaW1SZXMCXzIJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEKbGVuZEFjdGlvbgIEdXNlcgd0b2tlbklkCQELdmFsdWVPckVsc2UCCQEKaXNMYW5kQ2FsbAEFAWkEEnVzZXJBdmFpbGFibGVDbGFpbQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIFB3Rva2VuSWQFF2tVc2VyTGVuZEF2YWlsYWJsZUNsYWltAAAEDSR0MDEyMzk5MTI0NjYJARJjYWxjTGVuZFVzZXJSZXdhcmQCBQR1c2VyBQd0b2tlbklkBAd1UmV3YXJkCAUNJHQwMTIzOTkxMjQ2NgJfMQQQbmV3VG9rZW5JbnRlcmVzdAgFDSR0MDEyMzk5MTI0NjYCXzIJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIFB3Rva2VuSWQCAV8FBHVzZXIFEWtVc2VyTGVuZEludGVyZXN0BRBuZXdUb2tlbkludGVyZXN0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICBQd0b2tlbklkAgFfBQR1c2VyBRdrVXNlckxlbmRBdmFpbGFibGVDbGFpbQkAZAIFEnVzZXJBdmFpbGFibGVDbGFpbQUHdVJld2FyZAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQd0b2tlbklkBQ5rVG9rZW5JbnRlcmVzdAUQbmV3VG9rZW5JbnRlcmVzdAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQd0b2tlbklkBRRrVG9rZW5JbnRlcmVzdEhlaWdodAUGaGVpZ2h0BQNuaWwBaQEIbHBBY3Rpb24BBHVzZXIJAQt2YWx1ZU9yRWxzZQIJAQ9pc1NGRmFybWluZ0NhbGwBBQFpBBJ1c2VyQXZhaWxhYmxlQ2xhaW0JAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUVa1VzZXJMcEF2YWlsYWJsZUNsYWltAAAEDSR0MDEyOTMxMTI5ODQJARBjYWxjTHBVc2VyUmV3YXJkAQUEdXNlcgQHdVJld2FyZAgFDSR0MDEyOTMxMTI5ODQCXzEEDW5ld0xwSW50ZXJlc3QIBQ0kdDAxMjkzMTEyOTg0Al8yCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHVzZXIFD2tVc2VyTHBJbnRlcmVzdAUNbmV3THBJbnRlcmVzdAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQR1c2VyBRVrVXNlckxwQXZhaWxhYmxlQ2xhaW0JAGQCBRJ1c2VyQXZhaWxhYmxlQ2xhaW0FB3VSZXdhcmQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEdXNlcgULa0xwSW50ZXJlc3QFDW5ld0xwSW50ZXJlc3QJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEdXNlcgURa0xwSW50ZXJlc3RIZWlnaHQFBmhlaWdodAUDbmlsAWkBBGluaXQFFGF4bHlNYWluQ29udHJhY3RBZGRyGWF4bHlUb2tlbm9taWNDb250cmFjdEFkZHIMYXhseVBvb2xBZGRyEmZhcm1pbmdTdGFydEhlaWdodAxwZXJpb2RMZW5ndGgJAQt2YWx1ZU9yRWxzZQIJAQppc1NlbGZDYWxsAQUBaQMJAQEhAQkBCWlzRGVmaW5lZAEJAKYIAQUUYXhseU1haW5Db250cmFjdEFkZHIJAAIBAhVXcm9uZyBmYXJtaW5nIGFkZHJlc3MDCQEBIQEJAQlpc0RlZmluZWQBCQCmCAEFGWF4bHlUb2tlbm9taWNDb250cmFjdEFkZHIJAAIBAhtXcm9uZyBtYWluIGNvbnRyYWN0IGFkZHJlc3MJAMwIAgkBC1N0cmluZ0VudHJ5AgURa0F4bHlNYWluQ29udHJhY3QFFGF4bHlNYWluQ29udHJhY3RBZGRyCQDMCAIJAQtTdHJpbmdFbnRyeQIFFmtBeGx5VG9rZW5vbWljQ29udHJhY3QFGWF4bHlUb2tlbm9taWNDb250cmFjdEFkZHIJAMwIAgkBC1N0cmluZ0VudHJ5AgUJa0F4bHlQb29sBQxheGx5UG9vbEFkZHIJAMwIAgkBDEludGVnZXJFbnRyeQIFDGtTdGFydEhlaWdodAUSZmFybWluZ1N0YXJ0SGVpZ2h0CQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ1rUGVyaW9kTGVuZ3RoBQxwZXJpb2RMZW5ndGgFA25pbAFpAQxpbml0TmV3VG9rZW4BB3Rva2VuSWQJAQt2YWx1ZU9yRWxzZQIJAQtpc0FkbWluQ2FsbAEFAWkDCQEJaXNEZWZpbmVkAQkAmggCBQR0aGlzCQCsAgIFB3Rva2VuSWQFDmtUb2tlbkludGVyZXN0CQACAQIUdG9rZW4gYWxyZWFkeSBpbml0ZWQDCQEBIQEJAQhjb250YWlucwIJARFAZXh0ck5hdGl2ZSgxMDUzKQIFDGxlbmRDb250cmFjdAUQa0xlbmRTZXR1cFRva2VucwUHdG9rZW5JZAkAAgECE25vIHRva2VuIG9uIGxhbmRpbmcEDG5ld0FsbFRva2VucwkAzQgCCQEMZ2V0QWxsVG9rZW5zAAUHdG9rZW5JZAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQd0b2tlbklkBQ5rVG9rZW5JbnRlcmVzdAAACQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFB3Rva2VuSWQFFGtUb2tlbkludGVyZXN0SGVpZ2h0CQCWAwEJAMwIAgULc3RhcnRIZWlnaHQJAMwIAgUGaGVpZ2h0BQNuaWwJAMwIAgkBC1N0cmluZ0VudHJ5AgUHa1Rva2VucwkAuQkCBQxuZXdBbGxUb2tlbnMCASwJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUHdG9rZW5JZAUUa1Rva2VuUmV3YXJkUGVyQmxvY2sAAAUDbmlsAWkBDXVwZGF0ZVJld2FyZHMACQELdmFsdWVPckVsc2UCCQEOaXNPcGVyYXRvckNhbGwBBQFpBBBsYXN0VXBkYXRlUGVyaW9kCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFEWtMYXN0VXBkYXRlUGVyaW9kAAAECmNhbGNQZXJpb2QJAGQCCQBpAgkAZQIFBmhlaWdodAULc3RhcnRIZWlnaHQFDHBlcmlvZExlbmd0aAABBAljdXJQZXJpb2QDCQBnAgAABQpjYWxjUGVyaW9kAAEFCmNhbGNQZXJpb2QDCQBmAgUJY3VyUGVyaW9kAGgJAAIBAhFtYXggcGVyaW9kIGlzIDEwNAMDCQBnAgUQbGFzdFVwZGF0ZVBlcmlvZAUJY3VyUGVyaW9kCQECIT0CBRBsYXN0VXBkYXRlUGVyaW9kAAAHCQACAQIlcmV3YXJkcyBhbHJlZHkgdXBkYXRlZCBpbiB0aGlzIHBlcmlvZAQNJHQwMTQ5NDIxNTAyMgkBF2dldFRvdGFsU3VwcGx5QWxsVG9rZW5zAAQLdG90YWxTdXBwbHkIBQ0kdDAxNDk0MjE1MDIyAl8xBA50b3RhbFN1cHBseVVzZAgFDSR0MDE0OTQyMTUwMjICXzIEEXRvdGFsU3VwcGx5VXNkQWxsCAUNJHQwMTQ5NDIxNTAyMgJfMwQJYXhseVByaWNlCQENZ2V0QXNzZXRQcmljZQEFBmF4bHlJZAQNYXhseVByZWNpc2lvbgkBEWdldEFzc2V0UHJlY2lzaW9uAQUGYXhseUlkBAZtYXhBUFIJARVnZXRBZG9wdGVkQVBSQnlQZXJpb2QDBQljdXJQZXJpb2QFE0xFTkRFUlNfQVBSX1BFUklPRFMFC0xFTkRFUlNfQVBSCgEMdXBkYXRlUmV3YXJkAgFhB3Rva2VuSWQEDSR0MDE1MjcxMTUzMTUFAWEECGVudGVyaWVzCAUNJHQwMTUyNzExNTMxNQJfMQQRdG90YWxQZXJpb2RSZXdhcmQIBQ0kdDAxNTI3MTE1MzE1Al8yBAVpbmRleAgFDSR0MDE1MjcxMTUzMTUCXzMDCQAAAgkAkQMCBQt0b3RhbFN1cHBseQUFaW5kZXgAAAkAlQoDCQDOCAIFCGVudGVyaWVzCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFB3Rva2VuSWQFFGtQcmV2TGVuZFRva2VuU3VwcGx5CQCRAwIFC3RvdGFsU3VwcGx5BQVpbmRleAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQd0b2tlbklkBRRrVG9rZW5SZXdhcmRQZXJCbG9jawAACQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFB3Rva2VuSWQFDmtUb2tlbkludGVyZXN0CQEUY2FsY05ld1Rva2VuSW50ZXJlc3QCBQd0b2tlbklkCQCRAwIFC3RvdGFsU3VwcGx5BQVpbmRleAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQd0b2tlbklkBRRrVG9rZW5JbnRlcmVzdEhlaWdodAkAlgMBCQDMCAIFC3N0YXJ0SGVpZ2h0CQDMCAIFBmhlaWdodAUDbmlsBQNuaWwFEXRvdGFsUGVyaW9kUmV3YXJkCQBkAgUFaW5kZXgAAQQFc2hhcmUJAGsDCQCRAwIFDnRvdGFsU3VwcGx5VXNkBQVpbmRleAUGU0NBTEU4BRF0b3RhbFN1cHBseVVzZEFsbAQJbWF4UmV3YXJkCQBrAwUFc2hhcmUFE2xlbmRNYXhQZXJpb2RBbW91bnQFBlNDQUxFOAQMbWF4UmV3YXJkVXNkCQBrAwUJbWF4UmV3YXJkBQlheGx5UHJpY2UFDWF4bHlQcmVjaXNpb24ED3ByZXZUb3RhbFN1cHBseQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIFB3Rva2VuSWQFFGtQcmV2TGVuZFRva2VuU3VwcGx5AAAEBnJ0Q29lZgMDCQAAAgUPcHJldlRvdGFsU3VwcGx5AAAGCQAAAgkAkQMCBQt0b3RhbFN1cHBseQUFaW5kZXgAAAAACQBlAgkAawMJAJEDAgULdG90YWxTdXBwbHkFBWluZGV4BQZTQ0FMRTgFD3ByZXZUb3RhbFN1cHBseQUGU0NBTEU4BAZyZXdhcmQJAGkCCQBpAgkAlwMBCQDMCAIJAGgCBQZtYXhBUFIJAGQCBQZTQ0FMRTgJAJYDAQkAzAgCBQZydENvZWYJAMwIAgAABQNuaWwJAMwIAgkAawMFBm1heEFQUgkAaAIADwUGU0NBTEU4AAoFA25pbAUGU0NBTEU4AGQECXJld2FyZFVzZAkAlwMBCQDMCAIFDG1heFJld2FyZFVzZAkAzAgCCQBrAwkAkQMCBQ50b3RhbFN1cHBseVVzZAUFaW5kZXgFBnJld2FyZAUGU0NBTEU4BQNuaWwEDHJld2FyZFBlcmlvZAkAawMFCXJld2FyZFVzZAUNYXhseVByZWNpc2lvbgUJYXhseVByaWNlBA5yZXdhcmRQZXJCbG9jawkAaQIFDHJld2FyZFBlcmlvZAUMcGVyaW9kTGVuZ3RoCQCVCgMJAM4IAgUIZW50ZXJpZXMJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUHdG9rZW5JZAUUa1ByZXZMZW5kVG9rZW5TdXBwbHkJAJEDAgULdG90YWxTdXBwbHkFBWluZGV4CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFB3Rva2VuSWQFFGtUb2tlblJld2FyZFBlckJsb2NrBQ5yZXdhcmRQZXJCbG9jawkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQd0b2tlbklkBQ5rVG9rZW5JbnRlcmVzdAkBFGNhbGNOZXdUb2tlbkludGVyZXN0AgUHdG9rZW5JZAkAkQMCBQt0b3RhbFN1cHBseQUFaW5kZXgJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUHdG9rZW5JZAUUa1Rva2VuSW50ZXJlc3RIZWlnaHQJAJYDAQkAzAgCBQtzdGFydEhlaWdodAkAzAgCBQZoZWlnaHQFA25pbAUDbmlsCQBkAgURdG90YWxQZXJpb2RSZXdhcmQFDHJld2FyZFBlcmlvZAkAZAIFBWluZGV4AAEEDSR0MDE3MDA3MTcwOTkKAAIkbAkBDGdldEFsbFRva2VucwAKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCVCgMFA25pbAAAAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBDHVwZGF0ZVJld2FyZAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMzAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUABUAFgAXABgAGQAaABsAHAAdAB4EDnRva2Vuc0VudGVyaWVzCAUNJHQwMTcwMDcxNzA5OQJfMQQQdG90YWxUb2tlblJld2FyZAgFDSR0MDE3MDA3MTcwOTkCXzIECGxwTWF4QVBSCQEVZ2V0QWRvcHRlZEFQUkJ5UGVyaW9kAwUJY3VyUGVyaW9kBQ5MUF9BUFJfUEVSSU9EUwUGTFBfQVBSBA1scFRvdGFsU3VwcGx5CQERQGV4dHJOYXRpdmUoMTA1MCkCBRFzZkZhcm1pbmdDb250cmFjdAkArAICBQhheGx5UG9vbAUOa1NGVG90YWxTdXBwbHkEC3ByZUxQU3VwcGx5CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFDWtQcmV2TFBTdXBwbHkAAAQEbHBJZAkBEUBleHRyTmF0aXZlKDEwNTMpAgkBEUBleHRyTmF0aXZlKDEwNjIpAQUIYXhseVBvb2wFBWtMcElkBAtscFByZWNpc2lvbgkBEWdldEFzc2V0UHJlY2lzaW9uAQUEbHBJZAQHbHBQcmljZQoAAUAJAPwHBAUMbWFpbkNvbnRyYWN0AhpnZXRTaGFyZUFzc2V0UHJpY2VSRUFET05MWQkAzAgCBQRscElkBQNuaWwFA25pbAMJAAECBQFAAgNJbnQFAUAJAAIBCQCsAgIJAAMBBQFAAhggY291bGRuJ3QgYmUgY2FzdCB0byBJbnQEEGxwVG90YWxTdXBwbHlVc2QJAGsDBQ1scFRvdGFsU3VwcGx5BQdscFByaWNlBQtscFByZWNpc2lvbgQObWF4TFBSZXdhcmRVc2QJAGsDBRFscE1heFBlcmlvZEFtb3VudAUJYXhseVByaWNlBQ1heGx5UHJlY2lzaW9uBAhydExQQ29lZgMDCQAAAgULcHJlTFBTdXBwbHkAAAYJAAACBQ1scFRvdGFsU3VwcGx5AAAAAAkAZQIJAGsDBQ1scFRvdGFsU3VwcGx5BQZTQ0FMRTgFC3ByZUxQU3VwcGx5BQZTQ0FMRTgECHJld2FyZExwCQBpAgkAaQIJAJcDAQkAzAgCCQBoAgUIbHBNYXhBUFIJAGQCBQZTQ0FMRTgJAJYDAQkAzAgCBQhydExQQ29lZgkAzAgCAAAFA25pbAkAzAgCCQBrAwUIbHBNYXhBUFIJAGgCAA8FBlNDQUxFOAAKBQNuaWwFBlNDQUxFOABkBAtyZXdhcmRMcFVzZAkAlwMBCQDMCAIFDm1heExQUmV3YXJkVXNkCQDMCAIJAGsDBRBscFRvdGFsU3VwcGx5VXNkBQhyZXdhcmRMcAUGU0NBTEU4BQNuaWwEDnJld2FyZExwUGVyaW9kCQBrAwULcmV3YXJkTHBVc2QFDWF4bHlQcmVjaXNpb24FCWF4bHlQcmljZQQQcmV3YXJkTHBQZXJCbG9jawkAaQIFDnJld2FyZExwUGVyaW9kBQxwZXJpb2RMZW5ndGgECGJ1cm5MZW5kCQBlAgUTbGVuZE1heFBlcmlvZEFtb3VudAUQdG90YWxUb2tlblJld2FyZAQGYnVybkxwCQBlAgURbHBNYXhQZXJpb2RBbW91bnQFDnJld2FyZExwUGVyaW9kBANpbnYJAPwHBAUNdG9rZW5Db250cmFjdAIQd2l0aGRyYXdMcFJld2FyZAkAzAgCCQBkAgUIYnVybkxlbmQFBmJ1cm5McAkAzAgCCQClCAEFBHRoaXMFA25pbAUDbmlsAwkAAAIFA2ludgUDaW52BApscEVudGVyaWVzAwkAZwIADAUJY3VyUGVyaW9kCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ1rUHJldkxQU3VwcGx5BQ1scFRvdGFsU3VwcGx5CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRFrTHBSZXdhcmRQZXJCbG9jawUQcmV3YXJkTHBQZXJCbG9jawkAzAgCCQEMSW50ZWdlckVudHJ5AgULa0xwSW50ZXJlc3QJARFjYWxjTmV3THBJbnRlcmVzdAEFDWxwVG90YWxTdXBwbHkJAMwIAgkBDEludGVnZXJFbnRyeQIFEWtMcEludGVyZXN0SGVpZ2h0CQCWAwEJAMwIAgULc3RhcnRIZWlnaHQJAMwIAgUGaGVpZ2h0BQNuaWwJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBARoBVCeRLDw6Cc0O274F1dPN7wpIGPs2Az2GuwUIYnVybkxlbmQJANkEAQUGYXhseUlkCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQEaAVQnkSw8OgnNDtu+BdXTze8KSBj7NgM9hrsFBmJ1cm5McAkA2QQBBQZheGx5SWQFA25pbAUDbmlsCQDNCAIJAM4IAgUKbHBFbnRlcmllcwUOdG9rZW5zRW50ZXJpZXMJAQxJbnRlZ2VyRW50cnkCBRFrTGFzdFVwZGF0ZVBlcmlvZAUJY3VyUGVyaW9kCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQJ0eAEGdmVyaWZ5AAQTbXVsdGlTaWduZWRCeUFkbWlucwQSYWRtaW5QdWJLZXkxU2lnbmVkAwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAUIYWRtaW4xUEsAAQAABBJhZG1pblB1YktleTJTaWduZWQDCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwABBQhhZG1pbjJQSwABAAAEEmFkbWluUHViS2V5M1NpZ25lZAMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAIFCGFkbWluM1BLAAEAAAkAZwIJAGQCCQBkAgUSYWRtaW5QdWJLZXkxU2lnbmVkBRJhZG1pblB1YktleTJTaWduZWQFEmFkbWluUHViS2V5M1NpZ25lZAACBAckbWF0Y2gwBQJ0eAMJAAECBQckbWF0Y2gwAhdJbnZva2VTY3JpcHRUcmFuc2FjdGlvbgQDaW52BQckbWF0Y2gwBAZpc1NlbGYJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAIBQJ0eA9zZW5kZXJQdWJsaWNLZXkECmlzUmlnaHRGZWUDCQAAAggFA2ludgNmZWUAoPc2CQAAAggFA2ludgpmZWVBc3NldElkBQR1bml0BwQKaXNJbml0Q2FsbAkAAAIIBQNpbnYIZnVuY3Rpb24CBGluaXQEDGlzbm9QYXltZW50cwkAAAIJAJADAQgFA2ludghwYXltZW50cwAAAwMDAwUKaXNSaWdodEZlZQUKaXNJbml0Q2FsbAcFBmlzU2VsZgcFDGlzbm9QYXltZW50cwcGBRNtdWx0aVNpZ25lZEJ5QWRtaW5zBRNtdWx0aVNpZ25lZEJ5QWRtaW5z0LG/mw==", "height": 2724733, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 3Fk2KfwHLRibW9g4DvSGvAHjtHiaGeD1x3jBGN91vo8b Next: FPKLWkgy6Zyj2uXph7GjFcrdZcyNFMGewQVs8tPsYURU Diff:
OldNewDifferences
55
66 let b = [150, 120, 100, 80, 60, 40, 30, 20, 10]
77
8-let c = ["1-1", "2-2", "3-3", "4-4", "5-8", "9-12", "14 - 16", "17-20", "20-104"]
8+let c = ["1-1", "2-2", "3-3", "4-4", "5-8", "9-12", "14-16", "17-20", "20-104"]
99
1010 let d = 104
1111
3333
3434 let p = "_tokenRewardPerBlock"
3535
36-let q = "rewardUpdateHeight"
36+let q = "rewardUpdatePeriod"
3737
3838 let r = "_userLandInterest"
3939
115115
116116 let ae = getIntegerValue(this, i)
117117
118-let af = ((height - ad) / ae)
118+let af = getIntegerValue(U, j)
119119
120-let ag = getIntegerValue(U, j)
120+let ag = (af / d)
121121
122-let ah = (ag / d)
122+let ah = getIntegerValue(U, k)
123123
124-let ai = getIntegerValue(U, k)
124+let ai = (ah / g)
125125
126-let aj = (ai / g)
127-
128-func ak (al) = if (containsElement([Y, Z, aa], al.callerPublicKey))
126+func aj (ak) = if (containsElement([Y, Z, aa], ak.callerPublicKey))
129127 then unit
130128 else throw("Only admin group1 can call this function")
131129
132130
133-func am (al) = if ((al.caller == this))
131+func al (ak) = if ((ak.caller == this))
134132 then unit
135133 else throw("Only contract itself can call this function")
136134
137135
138-func an (al) = if ((al.callerPublicKey == ab))
136+func am (ak) = if ((ak.callerPublicKey == ab))
139137 then unit
140138 else throw("Only operator can call this function")
141139
142140
143-func ao (al) = if ((al.caller == V))
141+func an (ak) = if ((ak.caller == V))
144142 then unit
145143 else throw("Only land contract can call this function")
146144
147145
148-func ap (al) = if ((al.caller == W))
146+func ao (ak) = if ((ak.caller == W))
149147 then unit
150148 else throw("Only land contract can call this function")
151149
152150
153-func aq () = {
154- let ar = valueOrElse(getString(this, l), "")
155- if ((ar == ""))
151+func ap () = {
152+ let aq = valueOrElse(getString(this, l), "")
153+ if ((aq == ""))
156154 then nil
157- else split(ar, ",")
155+ else split(aq, ",")
158156 }
159157
160158
161-func as (at) = getIntegerValue(X, (at + z))
159+func ar (as) = getIntegerValue(X, (as + z))
162160
163161
164-func au (at) = if ((at == "WAVES"))
162+func at (as) = if ((as == "WAVES"))
165163 then 8
166164 else {
167- let av = assetInfo(fromBase58String(at))
168- if ($isInstanceOf(av, "Asset"))
165+ let au = assetInfo(fromBase58String(as))
166+ if ($isInstanceOf(au, "Asset"))
169167 then {
170- let aw = av
171- aw.decimals
168+ let av = au
169+ av.decimals
172170 }
173171 else throw("Can't find asset")
174172 }
175173
176174
177-func ax (at) = pow(10, 0, au(at), 0, 0, DOWN)
175+func aw (as) = pow(10, 0, at(as), 0, 0, DOWN)
178176
179177
180-func ay (az,aA,aB) = {
181- func aC (aD,aE) = {
182- let aF = aD
183- let aG = aF._1
184- let aH = aF._2
185- let aI = split(aE, "-")
186- let aJ = $Tuple2(parseIntValue(aI[0]), parseIntValue(aI[1]))
187- let aK = aJ._1
188- let aL = aJ._2
189- if (aH)
190- then aD
191- else if (if ((az >= aK))
192- then (aL >= az)
178+func ax (ay,az,aA) = {
179+ func aB (aC,aD) = {
180+ let aE = aC
181+ let aF = aE._1
182+ let aG = aE._2
183+ let aH = split(aD, "-")
184+ let aI = $Tuple2(parseIntValue(aH[0]), parseIntValue(aH[1]))
185+ let aJ = aI._1
186+ let aK = aI._2
187+ if (aG)
188+ then aC
189+ else if (if ((ay >= aJ))
190+ then (aK >= ay)
193191 else false)
194- then $Tuple2(aG, true)
195- else $Tuple2((aG + 1), false)
192+ then $Tuple2(aF, true)
193+ else $Tuple2((aF + 1), false)
196194 }
197195
198- let aM = {
199- let aN = c
200- let aO = size(aN)
201- let aP = $Tuple2(0, false)
202- func aQ (aR,aS) = if ((aS >= aO))
203- then aR
204- else aC(aR, aN[aS])
196+ let aL = {
197+ let aM = c
198+ let aN = size(aM)
199+ let aO = $Tuple2(0, false)
200+ func aP (aQ,aR) = if ((aR >= aN))
201+ then aQ
202+ else aB(aQ, aM[aR])
205203
206- func aT (aR,aS) = if ((aS >= aO))
207- then aR
204+ func aS (aQ,aR) = if ((aR >= aN))
205+ then aQ
208206 else throw("List size exceeds 9")
209207
210- aT(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aP, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9)
208+ aS(aP(aP(aP(aP(aP(aP(aP(aP(aP(aO, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9)
211209 }
212- let aG = aM._1
213- let aH = aM._2
214- if (aH)
215- then fraction((b[aG] * a), 7, 365)
210+ let aF = aL._1
211+ let aG = aL._2
212+ if (aG)
213+ then fraction((b[aF] * a), 7, 365)
216214 else 0
217215 }
218216
219217
220-func aU () = {
221- func aC (aD,aV) = {
222- let aW = aD
223- let aX = aW._1
224- let aY = aW._2
225- let aZ = aW._3
226- let ba = valueOrElse(getInteger(V, (C + aV)), 0)
227- let bb = as(aV)
228- let bc = ax(aV)
229- let bd = fraction(ba, bb, bc)
230- $Tuple3((aX :+ ba), (aY :+ bd), (aZ + bd))
218+func aT () = {
219+ func aB (aC,aU) = {
220+ let aV = aC
221+ let aW = aV._1
222+ let aX = aV._2
223+ let aY = aV._3
224+ let aZ = valueOrElse(getInteger(V, (C + aU)), 0)
225+ let ba = ar(aU)
226+ let bb = aw(aU)
227+ let bc = fraction(aZ, ba, bb)
228+ $Tuple3((aW :+ aZ), (aX :+ bc), (aY + bc))
231229 }
232230
233- let aN = aq()
234- let aO = size(aN)
235- let aP = $Tuple3(nil, nil, 0)
236- func aQ (aR,aS) = if ((aS >= aO))
237- then aR
238- else aC(aR, aN[aS])
231+ let aM = ap()
232+ let aN = size(aM)
233+ let aO = $Tuple3(nil, nil, 0)
234+ func aP (aQ,aR) = if ((aR >= aN))
235+ then aQ
236+ else aB(aQ, aM[aR])
239237
240- func aT (aR,aS) = if ((aS >= aO))
241- then aR
238+ func aS (aQ,aR) = if ((aR >= aN))
239+ then aQ
242240 else throw("List size exceeds 30")
243241
244- aT(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aP, 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)
242+ aS(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aO, 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)
245243 }
246244
247245
248-func be (aV) = {
249- let ba = valueOrElse(getInteger(V, (C + aV)), 0)
250- let bb = as(aV)
251- let bc = ax(aV)
252- fraction(ba, bb, bc)
246+func bd (aU) = {
247+ let aZ = valueOrElse(getInteger(V, (C + aU)), 0)
248+ let ba = ar(aU)
249+ let bb = aw(aU)
250+ fraction(aZ, ba, bb)
253251 }
254252
255253
256-func bf (aV,aX) = if ((height >= ad))
254+func be (aU,aW) = if ((ad >= height))
257255 then 0
258256 else {
259- let bg = getIntegerValue(this, (aV + p))
260- let bh = getIntegerValue(this, (aV + n))
261- let bi = getIntegerValue(this, (aV + o))
262- let bj = ((height - bi) * bg)
263- let bk = if ((aX > 0))
264- then fraction(bj, a, aX)
257+ let bf = getIntegerValue(this, (aU + p))
258+ let bg = getIntegerValue(this, (aU + n))
259+ let bh = getIntegerValue(this, (aU + o))
260+ let bi = ((height - bh) * bf)
261+ let bj = if ((aW > 0))
262+ then fraction(bi, a, aW)
265263 else 0
266- (bh + bk)
264+ (bg + bj)
267265 }
268266
269267
270-func bl (aX) = if ((height >= ad))
268+func bk (aW) = if ((ad >= height))
271269 then 0
272270 else {
273- let bg = valueOrElse(getInteger(this, x), 0)
274- let bh = valueOrElse(getInteger(this, u), 0)
275- let bi = valueOrElse(getInteger(this, v), height)
276- let bj = ((height - bi) * bg)
277- let bk = if ((aX > 0))
278- then fraction(bj, a, aX)
271+ let bf = valueOrElse(getInteger(this, x), 0)
272+ let bg = valueOrElse(getInteger(this, u), 0)
273+ let bh = valueOrElse(getInteger(this, v), height)
274+ let bi = ((height - bh) * bf)
275+ let bj = if ((aW > 0))
276+ then fraction(bi, a, aW)
279277 else 0
280- (bh + bk)
278+ (bg + bj)
281279 }
282280
283281
284-func bm (bn,aV) = {
285- let aX = valueOrElse(getInteger(V, (C + aV)), 0)
286- let bo = bf(aV, aX)
287- let bp = valueOrElse(getInteger(V, ((bn + D) + aV)), 0)
288- let bq = valueOrElse(getInteger(this, (((aV + "_") + bn) + r)), if ((bp == 0))
289- then bo
282+func bl (bm,aU) = {
283+ let aW = valueOrElse(getInteger(V, (C + aU)), 0)
284+ let bn = be(aU, aW)
285+ let bo = valueOrElse(getInteger(V, ((bm + D) + aU)), 0)
286+ let bp = valueOrElse(getInteger(this, (((aU + "_") + bm) + r)), if ((bo == 0))
287+ then bn
290288 else 0)
291- let bj = fraction(bp, (bo - bq), a)
292- $Tuple3(bj, bo, bp)
289+ let bi = fraction(bo, (bn - bp), a)
290+ $Tuple3(bi, bn, bo)
293291 }
294292
295293
296-func br (bn) = {
297- let aX = valueOrElse(getInteger(W, (S + F)), 0)
298- let bo = bl(aX)
299- let bp = valueOrElse(getInteger(V, (((S + "_") + bn) + G)), 0)
300- let bq = valueOrElse(getInteger(this, (bn + y)), if ((bp == 0))
301- then bo
294+func bq (bm) = {
295+ let aW = valueOrElse(getInteger(W, (S + F)), 0)
296+ let bn = bk(aW)
297+ let bo = valueOrElse(getInteger(W, (((S + "_") + bm) + G)), 0)
298+ let bp = valueOrElse(getInteger(this, (bm + y)), if ((bo == 0))
299+ then bn
302300 else 0)
303- let bj = fraction(bp, (bo - bq), a)
304- $Tuple3(bj, bo, bp)
301+ let bi = fraction(bo, (bn - bp), a)
302+ $Tuple3(bi, bn, bo)
305303 }
306304
307305
308-func bs (bn,bt) = {
309- func bu (aD,aV) = {
310- let bv = aD
311- let bw = bv._1
312- let bx = bv._2
313- let by = bv._3
314- let bz = bv._4
315- let bA = valueOrElse(getInteger(this, (((aV + "_") + bn) + s)), 0)
316- let bB = bm(bn, aV)
317- let bC = bB._1
318- let bD = bB._2
319- let bp = bB._3
320- let bE = (bA + bC)
321- if (if ((bE > 0))
306+func br (bm,bs) = {
307+ func bt (aC,aU) = {
308+ let bu = aC
309+ let bv = bu._1
310+ let bw = bu._2
311+ let bx = bu._3
312+ let by = bu._4
313+ let bz = valueOrElse(getInteger(this, (((aU + "_") + bm) + s)), 0)
314+ let bA = bl(bm, aU)
315+ let bB = bA._1
316+ let bC = bA._2
317+ let bo = bA._3
318+ let bD = (bz + bB)
319+ if (if ((bD > 0))
322320 then true
323- else (bp > 0))
321+ else (bo > 0))
324322 then {
325- let bF = if (if (bt)
323+ let bE = if (if (bs)
326324 then true
327- else (bE == 0))
328- then bz
329- else (bz ++ [IntegerEntry((((aV + "_") + bn) + r), bD), IntegerEntry((((aV + "_") + bn) + s), 0), IntegerEntry((aV + n), bD), IntegerEntry((aV + o), height)])
330- $Tuple4((bw :+ aV), (bx :+ bE), (by + bE), bF)
325+ else (bD == 0))
326+ then by
327+ else (by ++ [IntegerEntry((((aU + "_") + bm) + r), bC), IntegerEntry((((aU + "_") + bm) + s), 0), IntegerEntry((aU + n), bC), IntegerEntry((aU + o), height)])
328+ $Tuple4((bv :+ aU), (bw :+ bD), (bx + bD), bE)
331329 }
332- else $Tuple4(bw, bx, by, bz)
330+ else $Tuple4(bv, bw, bx, by)
333331 }
334332
335- let aN = aq()
336- let aO = size(aN)
337- let aP = $Tuple4(nil, nil, 0, nil)
338- func aQ (aR,aS) = if ((aS >= aO))
339- then aR
340- else bu(aR, aN[aS])
333+ let aM = ap()
334+ let aN = size(aM)
335+ let aO = $Tuple4(nil, nil, 0, nil)
336+ func aP (aQ,aR) = if ((aR >= aN))
337+ then aQ
338+ else bt(aQ, aM[aR])
341339
342- func aT (aR,aS) = if ((aS >= aO))
343- then aR
340+ func aS (aQ,aR) = if ((aR >= aN))
341+ then aQ
344342 else throw("List size exceeds 30")
345343
346- aT(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aP, 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)
344+ aS(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aO, 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)
347345 }
348346
349347
350-func bG (bn,bt) = {
351- let bA = valueOrElse(getInteger(this, (bn + t)), 0)
352- let bH = br(bn)
353- let bC = bH._1
354- let bI = bH._2
355- let bp = bH._3
356- let bE = (bA + bC)
357- if (if (bt)
348+func bF (bm,bs) = {
349+ let bz = valueOrElse(getInteger(this, (bm + t)), 0)
350+ let bG = bq(bm)
351+ let bB = bG._1
352+ let bH = bG._2
353+ let bo = bG._3
354+ let bD = (bz + bB)
355+ if (if (bs)
358356 then true
359- else (bE == 0))
360- then $Tuple2(bE, nil)
361- else $Tuple2(bE, [IntegerEntry((bn + y), bI), IntegerEntry((bn + t), 0), IntegerEntry(u, bI), IntegerEntry(v, height)])
357+ else (bD == 0))
358+ then $Tuple2(bD, nil)
359+ else $Tuple2(bD, [IntegerEntry((bm + y), bH), IntegerEntry((bm + t), 0), IntegerEntry(u, bH), IntegerEntry(v, height)])
362360 }
363361
364362
365-func bJ () = {
366- let bK = as(ac)
367- let bL = ax(ac)
368- func bM (aB,aV) = {
369- let bN = valueOrElse(getInteger(this, (aV + p)), 0)
370- let bO = fraction(bN, bK, bL)
371- let bP = ((bO * ae) * 52)
372- let aY = be(aV)
373- (aB :+ fraction(bP, a, aY))
363+func bI () = {
364+ let bJ = ar(ac)
365+ let bK = aw(ac)
366+ func bL (aA,aU) = {
367+ let bM = valueOrElse(getInteger(this, (aU + p)), 0)
368+ let bN = fraction(bM, bJ, bK)
369+ let bO = ((bN * ae) * 52)
370+ let aX = bd(aU)
371+ (aA :+ fraction(bO, a, aX))
374372 }
375373
376- let bQ = {
377- let aN = aq()
378- let aO = size(aN)
379- let aP = nil
380- func aQ (aR,aS) = if ((aS >= aO))
381- then aR
382- else bM(aR, aN[aS])
374+ let bP = {
375+ let aM = ap()
376+ let aN = size(aM)
377+ let aO = nil
378+ func aP (aQ,aR) = if ((aR >= aN))
379+ then aQ
380+ else bL(aQ, aM[aR])
383381
384- func aT (aR,aS) = if ((aS >= aO))
385- then aR
382+ func aS (aQ,aR) = if ((aR >= aN))
383+ then aQ
386384 else throw("List size exceeds 30")
387385
388- aT(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aP, 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)
386+ aS(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aO, 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)
389387 }
390- let bR = getIntegerValue(W, (S + F))
391- let bS = getStringValue(addressFromStringValue(S), I)
392- let bT = ax(bS)
393- let bU = {
394- let bV = ({
395- let bV = invoke(T, "getShareAssetPriceREADONLY", [[bS]], nil)
396- if ($isInstanceOf(bV, "List[Any]"))
397- then bV
398- else throw(($getType(bV) + " couldn't be cast to List[Any]"))
399- })[0]
400- if ($isInstanceOf(bV, "Int"))
401- then bV
402- else throw(($getType(bV) + " couldn't be cast to Int"))
388+ let bQ = getIntegerValue(W, (S + F))
389+ let bR = getStringValue(addressFromStringValue(S), I)
390+ let bS = aw(bR)
391+ let bT = {
392+ let bU = invoke(T, "getShareAssetPriceREADONLY", [bR], nil)
393+ if ($isInstanceOf(bU, "Int"))
394+ then bU
395+ else throw(($getType(bU) + " couldn't be cast to Int"))
403396 }
404- let bW = fraction(bR, bU, bT)
405- let bN = valueOrElse(getInteger(this, x), 0)
406- let bO = fraction(bN, bK, bL)
407- let bP = ((bO * ae) * 52)
408- let bX = fraction(bP, a, bW)
409- $Tuple3(aq(), bQ, bX)
397+ let bV = fraction(bQ, bT, bS)
398+ let bM = valueOrElse(getInteger(this, x), 0)
399+ let bN = fraction(bM, bJ, bK)
400+ let bO = ((bN * ae) * 52)
401+ let bW = fraction(bO, a, bV)
402+ $Tuple3(ap(), bP, bW)
410403 }
411404
412405
413-@Callable(al)
406+@Callable(ak)
414407 func claimLenderRewards () = {
415- let bY = bs(toString(al.caller), false)
416- if ((bY._3 == 0))
408+ let bX = br(toString(ak.caller), false)
409+ if ((bX._3 == 0))
417410 then throw("claim amount must be greater than 0")
418411 else {
419- let bZ = invoke(U, "withdrawLendReward", [bY._3, toString(al.caller)], nil)
420- if ((bZ == bZ))
421- then bY._4
412+ let bY = invoke(U, "withdrawLendReward", [bX._3, toString(ak.caller)], nil)
413+ if ((bY == bY))
414+ then bX._4
422415 else throw("Strict value is not equal to itself.")
423416 }
424417 }
425418
426419
427420
428-@Callable(al)
421+@Callable(ak)
429422 func claimLpRewards () = {
430- let bY = bG(toString(al.caller), false)
431- if ((bY._1 == 0))
423+ let bX = bF(toString(ak.caller), false)
424+ if ((bX._1 == 0))
432425 then throw("claim amount must be greater than 0")
433426 else {
434- let bZ = invoke(U, "withdrawLpReward", [bY._1, toString(al.caller)], nil)
435- if ((bZ == bZ))
436- then bY._2
427+ let bY = invoke(U, "withdrawLpReward", [bX._1, toString(ak.caller)], nil)
428+ if ((bY == bY))
429+ then bX._2
437430 else throw("Strict value is not equal to itself.")
438431 }
439432 }
440433
441434
442435
443-@Callable(al)
444-func lendAction (bn,aV) = valueOrElse(ao(al), {
445- let bA = valueOrElse(getInteger(this, (aV + s)), 0)
446- let ca = bm(bn, aV)
447- let bC = ca._1
448- let bD = ca._2
449-[IntegerEntry((((aV + "_") + bn) + r), bD), IntegerEntry((((aV + "_") + bn) + s), (bA + bC)), IntegerEntry((aV + n), bD), IntegerEntry((aV + o), height)]
436+@Callable(ak)
437+func lendAction (bm,aU) = valueOrElse(an(ak), {
438+ let bz = valueOrElse(getInteger(this, (aU + s)), 0)
439+ let bZ = bl(bm, aU)
440+ let bB = bZ._1
441+ let bC = bZ._2
442+[IntegerEntry((((aU + "_") + bm) + r), bC), IntegerEntry((((aU + "_") + bm) + s), (bz + bB)), IntegerEntry((aU + n), bC), IntegerEntry((aU + o), height)]
450443 })
451444
452445
453446
454-@Callable(al)
455-func lpAction (bn) = valueOrElse(ap(al), {
456- let bA = valueOrElse(getInteger(this, t), 0)
457- let cb = br(bn)
458- let bC = cb._1
459- let bI = cb._2
460-[IntegerEntry((bn + y), bI), IntegerEntry((bn + t), (bA + bC)), IntegerEntry((bn + u), bI), IntegerEntry((bn + v), height)]
447+@Callable(ak)
448+func lpAction (bm) = valueOrElse(ao(ak), {
449+ let bz = valueOrElse(getInteger(this, t), 0)
450+ let ca = bq(bm)
451+ let bB = ca._1
452+ let bH = ca._2
453+[IntegerEntry((bm + y), bH), IntegerEntry((bm + t), (bz + bB)), IntegerEntry((bm + u), bH), IntegerEntry((bm + v), height)]
461454 })
462455
463456
464457
465-@Callable(al)
466-func init (cc,cd,ce,cf,ae) = valueOrElse(am(al), if (!(isDefined(addressFromString(cc))))
458+@Callable(ak)
459+func init (cb,cc,cd,ce,ae) = valueOrElse(al(ak), if (!(isDefined(addressFromString(cb))))
467460 then throw("Wrong farming address")
468- else if (!(isDefined(addressFromString(cd))))
461+ else if (!(isDefined(addressFromString(cc))))
469462 then throw("Wrong main contract address")
470- else [StringEntry(K, cc), StringEntry(L, cd), StringEntry(H, ce), IntegerEntry(h, cf), IntegerEntry(i, ae)])
463+ else [StringEntry(K, cb), StringEntry(L, cc), StringEntry(H, cd), IntegerEntry(h, ce), IntegerEntry(i, ae)])
471464
472465
473466
474-@Callable(al)
475-func initNewToken (aV) = valueOrElse(ak(al), if (isDefined(getInteger(this, (aV + n))))
467+@Callable(ak)
468+func initNewToken (aU) = valueOrElse(aj(ak), if (isDefined(getInteger(this, (aU + n))))
476469 then throw("token already inited")
477- else if (!(contains(getStringValue(V, E), aV)))
470+ else if (!(contains(getStringValue(V, E), aU)))
478471 then throw("no token on landing")
479472 else {
480- let cg = (aq() :+ aV)
481-[IntegerEntry((aV + n), 0), IntegerEntry((aV + o), max([ad, height])), StringEntry(l, makeString(cg, ",")), IntegerEntry((aV + p), 0)]
473+ let cf = (ap() :+ aU)
474+[IntegerEntry((aU + n), 0), IntegerEntry((aU + o), max([ad, height])), StringEntry(l, makeString(cf, ",")), IntegerEntry((aU + p), 0)]
482475 })
483476
484477
485478
486-@Callable(al)
487-func updateRewards () = valueOrElse(an(al), {
488- let ch = valueOrElse(getInteger(this, q), 0)
489- if (((ch + ae) > height))
490- then throw("rewards alredy updated in this period")
491- else {
492- let ci = aU()
493- let aX = ci._1
494- let aY = ci._2
495- let aZ = ci._3
496- let bK = as(ac)
497- let bL = ax(ac)
498- let cj = ay(af, c, b)
499- func ck (aD,aV) = {
500- let cl = aD
501- let bz = cl._1
502- let aG = cl._2
503- if ((aX[aG] == 0))
504- then $Tuple2((bz ++ [IntegerEntry((aV + A), aX[aG]), IntegerEntry((aV + p), 0), IntegerEntry((aV + n), bf(aV, aX[aG])), IntegerEntry((aV + o), max([ad, height]))]), (aG + 1))
505- else {
506- let cm = fraction(aY[aG], a, aZ)
507- let cn = fraction(cm, ah, a)
508- let co = fraction(cn, bK, bL)
509- let cp = valueOrElse(getInteger(this, A), 0)
510- let cq = if (if ((cp == 0))
511- then true
512- else (aX[aG] == 0))
513- then 0
514- else fraction(cp, a, aX[aG])
515- let bj = (min([(cj * (a + cq)), fraction(cj, (15 * a), 10)]) / a)
516- let cr = min([co, fraction(aY[aG], bj, a)])
517- let cs = fraction(cr, bL, bK)
518- let bg = (cs / ae)
519- $Tuple2((bz ++ [IntegerEntry((aV + A), aX[aG]), IntegerEntry((aV + p), bg), IntegerEntry((aV + n), bf(aV, aX[aG])), IntegerEntry((aV + o), max([ad, height]))]), (aG + 1))
479+@Callable(ak)
480+func updateRewards () = valueOrElse(am(ak), {
481+ let cg = valueOrElse(getInteger(this, q), 0)
482+ let ch = (((height - ad) / ae) + 1)
483+ let ci = if ((0 >= ch))
484+ then 1
485+ else ch
486+ if ((ci > 104))
487+ then throw("max period is 104")
488+ else if (if ((cg >= ci))
489+ then (cg != 0)
490+ else false)
491+ then throw("rewards alredy updated in this period")
492+ else {
493+ let cj = aT()
494+ let aW = cj._1
495+ let aX = cj._2
496+ let aY = cj._3
497+ let bJ = ar(ac)
498+ let bK = aw(ac)
499+ let ck = ax(ci, c, b)
500+ func cl (aC,aU) = {
501+ let cm = aC
502+ let by = cm._1
503+ let cn = cm._2
504+ let aF = cm._3
505+ if ((aW[aF] == 0))
506+ then $Tuple3((by ++ [IntegerEntry((aU + A), aW[aF]), IntegerEntry((aU + p), 0), IntegerEntry((aU + n), be(aU, aW[aF])), IntegerEntry((aU + o), max([ad, height]))]), cn, (aF + 1))
507+ else {
508+ let co = fraction(aX[aF], a, aY)
509+ let cp = fraction(co, ag, a)
510+ let cq = fraction(cp, bJ, bK)
511+ let cr = valueOrElse(getInteger(this, (aU + A)), 0)
512+ let cs = if (if ((cr == 0))
513+ then true
514+ else (aW[aF] == 0))
515+ then 0
516+ else (fraction(aW[aF], a, cr) - a)
517+ let bi = ((min([(ck * (a + max([cs, 0]))), fraction(ck, (15 * a), 10)]) / a) / 100)
518+ let ct = min([cq, fraction(aX[aF], bi, a)])
519+ let cu = fraction(ct, bK, bJ)
520+ let bf = (cu / ae)
521+ $Tuple3((by ++ [IntegerEntry((aU + A), aW[aF]), IntegerEntry((aU + p), bf), IntegerEntry((aU + n), be(aU, aW[aF])), IntegerEntry((aU + o), max([ad, height]))]), (cn + cu), (aF + 1))
522+ }
523+ }
524+
525+ let cv = {
526+ let aM = ap()
527+ let aN = size(aM)
528+ let aO = $Tuple3(nil, 0, 0)
529+ func aP (aQ,aR) = if ((aR >= aN))
530+ then aQ
531+ else cl(aQ, aM[aR])
532+
533+ func aS (aQ,aR) = if ((aR >= aN))
534+ then aQ
535+ else throw("List size exceeds 30")
536+
537+ aS(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aO, 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)
538+ }
539+ let cw = cv._1
540+ let cx = cv._2
541+ let cy = ax(ci, f, e)
542+ let bQ = getIntegerValue(W, (S + F))
543+ let cz = valueOrElse(getInteger(this, w), 0)
544+ let bR = getStringValue(addressFromStringValue(S), I)
545+ let bS = aw(bR)
546+ let bT = {
547+ let bU = invoke(T, "getShareAssetPriceREADONLY", [bR], nil)
548+ if ($isInstanceOf(bU, "Int"))
549+ then bU
550+ else throw(($getType(bU) + " couldn't be cast to Int"))
551+ }
552+ let bV = fraction(bQ, bT, bS)
553+ let cA = fraction(ai, bJ, bK)
554+ let cB = if (if ((cz == 0))
555+ then true
556+ else (bQ == 0))
557+ then 0
558+ else (fraction(bQ, a, cz) - a)
559+ let cC = ((min([(cy * (a + max([cB, 0]))), fraction(cy, (15 * a), 10)]) / a) / 100)
560+ let cD = min([cA, fraction(bV, cC, a)])
561+ let cE = fraction(cD, bK, bJ)
562+ let cF = (cE / ae)
563+ let cG = (ag - cx)
564+ let cH = (ai - cE)
565+ let bY = invoke(U, "withdrawLpReward", [(cG + cH), toString(this)], nil)
566+ if ((bY == bY))
567+ then {
568+ let cI = if ((12 >= ci))
569+ then [IntegerEntry(w, bQ), IntegerEntry(x, cF), IntegerEntry(u, bk(bQ)), IntegerEntry(v, max([ad, height])), ScriptTransfer(Address(base58'3MsXJ3BesPECkYejzBQGHZPJT8GVYy4Fd3Q'), cG, fromBase58String(ac)), ScriptTransfer(Address(base58'3MsXJ3BesPECkYejzBQGHZPJT8GVYy4Fd3Q'), cH, fromBase58String(ac))]
570+ else nil
571+ ((cI ++ cw) :+ IntegerEntry(q, ci))
520572 }
573+ else throw("Strict value is not equal to itself.")
521574 }
522-
523- let ct = {
524- let aN = aq()
525- let aO = size(aN)
526- let aP = $Tuple2(nil, 0)
527- func aQ (aR,aS) = if ((aS >= aO))
528- then aR
529- else ck(aR, aN[aS])
530-
531- func aT (aR,aS) = if ((aS >= aO))
532- then aR
533- else throw("List size exceeds 30")
534-
535- aT(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aP, 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)
536- }
537- let cu = ct._1
538- let aG = ct._2
539- let cv = ay(af, f, e)
540- let bR = getIntegerValue(W, (S + F))
541- let cw = valueOrElse(getInteger(this, w), 0)
542- let bS = getStringValue(addressFromStringValue(S), I)
543- let bT = ax(bS)
544- let bU = {
545- let bV = invoke(T, "getShareAssetPriceREADONLY", [bS], nil)
546- if ($isInstanceOf(bV, "Int"))
547- then bV
548- else throw(($getType(bV) + " couldn't be cast to Int"))
549- }
550- let bW = fraction(bR, bU, bT)
551- let cx = fraction(aj, bK, bL)
552- let cy = if (if ((cw == 0))
553- then true
554- else (bR == 0))
555- then 0
556- else fraction(cw, a, bR)
557- let cz = (min([(cv * (a + cy)), fraction(cv, (15 * a), 10)]) / a)
558- let cA = min([cx, fraction(bW, cz, a)])
559- let cB = fraction(cA, bK, bL)
560- let cC = (cB / ae)
561- let cD = [IntegerEntry(w, bR), IntegerEntry(x, cC), IntegerEntry(u, bl(bR)), IntegerEntry(v, max([ad, height]))]
562- ((cD ++ cu) :+ IntegerEntry(q, max([ad, height])))
563- }
564575 })
565576
566577
567-@Verifier(cE)
568-func cF () = {
569- let cG = {
570- let cH = if (sigVerify(cE.bodyBytes, cE.proofs[0], Y))
578+@Verifier(cJ)
579+func cK () = {
580+ let cL = {
581+ let cM = if (sigVerify(cJ.bodyBytes, cJ.proofs[0], Y))
571582 then 1
572583 else 0
573- let cI = if (sigVerify(cE.bodyBytes, cE.proofs[1], Z))
584+ let cN = if (sigVerify(cJ.bodyBytes, cJ.proofs[1], Z))
574585 then 1
575586 else 0
576- let cJ = if (sigVerify(cE.bodyBytes, cE.proofs[2], aa))
587+ let cO = if (sigVerify(cJ.bodyBytes, cJ.proofs[2], aa))
577588 then 1
578589 else 0
579- (((cH + cI) + cJ) >= 2)
590+ (((cM + cN) + cO) >= 2)
580591 }
581- let av = cE
582- if ($isInstanceOf(av, "InvokeScriptTransaction"))
592+ let au = cJ
593+ if ($isInstanceOf(au, "InvokeScriptTransaction"))
583594 then {
584- let bZ = av
585- let cK = sigVerify(cE.bodyBytes, cE.proofs[0], cE.senderPublicKey)
586- let cL = if ((bZ.fee == 900000))
587- then (bZ.feeAssetId == unit)
595+ let bY = au
596+ let cP = sigVerify(cJ.bodyBytes, cJ.proofs[0], cJ.senderPublicKey)
597+ let cQ = if ((bY.fee == 900000))
598+ then (bY.feeAssetId == unit)
588599 else false
589- let cM = (bZ.function == "init")
590- let cN = (size(bZ.payments) == 0)
591- if (if (if (if (cL)
592- then cM
600+ let cR = (bY.function == "init")
601+ let cS = (size(bY.payments) == 0)
602+ if (if (if (if (cQ)
603+ then cR
593604 else false)
594- then cK
605+ then cP
595606 else false)
596- then cN
607+ then cS
597608 else false)
598609 then true
599- else cG
610+ else cL
600611 }
601- else cG
612+ else cL
602613 }
603614
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = 100000000
55
66 let b = [150, 120, 100, 80, 60, 40, 30, 20, 10]
77
8-let c = ["1-1", "2-2", "3-3", "4-4", "5-8", "9-12", "14 - 16", "17-20", "20-104"]
8+let c = ["1-1", "2-2", "3-3", "4-4", "5-8", "9-12", "14-16", "17-20", "20-104"]
99
1010 let d = 104
1111
1212 let e = [150, 120, 100, 80, 60, 40]
1313
1414 let f = ["1-1", "2-2", "3-3", "4-4", "5-8", "9-12"]
1515
1616 let g = 12
1717
1818 let h = "startHeight"
1919
2020 let i = "periodLength"
2121
2222 let j = "lendRewardsAmount"
2323
2424 let k = "lpRewardAmount"
2525
2626 let l = "tokens"
2727
2828 let m = "_userTotalSupply"
2929
3030 let n = "_tokenInterest"
3131
3232 let o = "_tokenInterestHeight"
3333
3434 let p = "_tokenRewardPerBlock"
3535
36-let q = "rewardUpdateHeight"
36+let q = "rewardUpdatePeriod"
3737
3838 let r = "_userLandInterest"
3939
4040 let s = "_userLendAvailableClaim"
4141
4242 let t = "_userLpAvailableClaim"
4343
4444 let u = "lpInterest"
4545
4646 let v = "lpInterestHeight"
4747
4848 let w = "prevLPTotalSupply"
4949
5050 let x = "lpRewardPerBlock"
5151
5252 let y = "_userLpInterest"
5353
5454 let z = "_twap5B"
5555
5656 let A = "_prevLendTotalSupply"
5757
5858 let B = "axlyTokenId"
5959
6060 let C = "total_supplied_"
6161
6262 let D = "_supplied_"
6363
6464 let E = "setup_tokens"
6565
6666 let F = "_total_share_tokens_locked"
6767
6868 let G = "_share_tokens_locked"
6969
7070 let H = "axlyPool"
7171
7272 let I = "share_asset_id"
7373
7474 let J = "price_oracle"
7575
7676 let K = "mainContract"
7777
7878 let L = "tokenomicContract"
7979
8080 let M = "swopfi_farming_addr"
8181
8282 let N = "lend_service_addr"
8383
8484 let O = "group1_admin1_pub_key"
8585
8686 let P = "group1_admin2_pub_key"
8787
8888 let Q = "group1_admin3_pub_key"
8989
9090 let R = "admin_call_pub_key"
9191
9292 let S = valueOrErrorMessage(getString(this, H), "Can't get axlyPool key")
9393
9494 let T = addressFromStringValue(valueOrErrorMessage(getString(this, K), "Can't get mainContact key"))
9595
9696 let U = addressFromStringValue(valueOrErrorMessage(getString(this, L), "Can't get tokenomicContract key"))
9797
9898 let V = addressFromStringValue(valueOrErrorMessage(getString(T, N), "Can't get lend_service_addr key"))
9999
100100 let W = addressFromStringValue(valueOrErrorMessage(getString(T, M), "Can't get swopfi_farming_addr key"))
101101
102102 let X = addressFromStringValue(valueOrErrorMessage(getString(T, J), "Can't get price_oracle key"))
103103
104104 let Y = fromBase58String(valueOrErrorMessage(getString(T, O), "Can't get admin1PK"))
105105
106106 let Z = fromBase58String(valueOrErrorMessage(getString(T, P), "Can't get admin2PK"))
107107
108108 let aa = fromBase58String(valueOrErrorMessage(getString(T, Q), "Can't get operatorPK"))
109109
110110 let ab = fromBase58String(valueOrErrorMessage(getString(this, R), "Can't get operatorPK"))
111111
112112 let ac = valueOrErrorMessage(getString(U, B), "Can't get Axly token id")
113113
114114 let ad = getIntegerValue(this, h)
115115
116116 let ae = getIntegerValue(this, i)
117117
118-let af = ((height - ad) / ae)
118+let af = getIntegerValue(U, j)
119119
120-let ag = getIntegerValue(U, j)
120+let ag = (af / d)
121121
122-let ah = (ag / d)
122+let ah = getIntegerValue(U, k)
123123
124-let ai = getIntegerValue(U, k)
124+let ai = (ah / g)
125125
126-let aj = (ai / g)
127-
128-func ak (al) = if (containsElement([Y, Z, aa], al.callerPublicKey))
126+func aj (ak) = if (containsElement([Y, Z, aa], ak.callerPublicKey))
129127 then unit
130128 else throw("Only admin group1 can call this function")
131129
132130
133-func am (al) = if ((al.caller == this))
131+func al (ak) = if ((ak.caller == this))
134132 then unit
135133 else throw("Only contract itself can call this function")
136134
137135
138-func an (al) = if ((al.callerPublicKey == ab))
136+func am (ak) = if ((ak.callerPublicKey == ab))
139137 then unit
140138 else throw("Only operator can call this function")
141139
142140
143-func ao (al) = if ((al.caller == V))
141+func an (ak) = if ((ak.caller == V))
144142 then unit
145143 else throw("Only land contract can call this function")
146144
147145
148-func ap (al) = if ((al.caller == W))
146+func ao (ak) = if ((ak.caller == W))
149147 then unit
150148 else throw("Only land contract can call this function")
151149
152150
153-func aq () = {
154- let ar = valueOrElse(getString(this, l), "")
155- if ((ar == ""))
151+func ap () = {
152+ let aq = valueOrElse(getString(this, l), "")
153+ if ((aq == ""))
156154 then nil
157- else split(ar, ",")
155+ else split(aq, ",")
158156 }
159157
160158
161-func as (at) = getIntegerValue(X, (at + z))
159+func ar (as) = getIntegerValue(X, (as + z))
162160
163161
164-func au (at) = if ((at == "WAVES"))
162+func at (as) = if ((as == "WAVES"))
165163 then 8
166164 else {
167- let av = assetInfo(fromBase58String(at))
168- if ($isInstanceOf(av, "Asset"))
165+ let au = assetInfo(fromBase58String(as))
166+ if ($isInstanceOf(au, "Asset"))
169167 then {
170- let aw = av
171- aw.decimals
168+ let av = au
169+ av.decimals
172170 }
173171 else throw("Can't find asset")
174172 }
175173
176174
177-func ax (at) = pow(10, 0, au(at), 0, 0, DOWN)
175+func aw (as) = pow(10, 0, at(as), 0, 0, DOWN)
178176
179177
180-func ay (az,aA,aB) = {
181- func aC (aD,aE) = {
182- let aF = aD
183- let aG = aF._1
184- let aH = aF._2
185- let aI = split(aE, "-")
186- let aJ = $Tuple2(parseIntValue(aI[0]), parseIntValue(aI[1]))
187- let aK = aJ._1
188- let aL = aJ._2
189- if (aH)
190- then aD
191- else if (if ((az >= aK))
192- then (aL >= az)
178+func ax (ay,az,aA) = {
179+ func aB (aC,aD) = {
180+ let aE = aC
181+ let aF = aE._1
182+ let aG = aE._2
183+ let aH = split(aD, "-")
184+ let aI = $Tuple2(parseIntValue(aH[0]), parseIntValue(aH[1]))
185+ let aJ = aI._1
186+ let aK = aI._2
187+ if (aG)
188+ then aC
189+ else if (if ((ay >= aJ))
190+ then (aK >= ay)
193191 else false)
194- then $Tuple2(aG, true)
195- else $Tuple2((aG + 1), false)
192+ then $Tuple2(aF, true)
193+ else $Tuple2((aF + 1), false)
196194 }
197195
198- let aM = {
199- let aN = c
200- let aO = size(aN)
201- let aP = $Tuple2(0, false)
202- func aQ (aR,aS) = if ((aS >= aO))
203- then aR
204- else aC(aR, aN[aS])
196+ let aL = {
197+ let aM = c
198+ let aN = size(aM)
199+ let aO = $Tuple2(0, false)
200+ func aP (aQ,aR) = if ((aR >= aN))
201+ then aQ
202+ else aB(aQ, aM[aR])
205203
206- func aT (aR,aS) = if ((aS >= aO))
207- then aR
204+ func aS (aQ,aR) = if ((aR >= aN))
205+ then aQ
208206 else throw("List size exceeds 9")
209207
210- aT(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aP, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9)
208+ aS(aP(aP(aP(aP(aP(aP(aP(aP(aP(aO, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9)
211209 }
212- let aG = aM._1
213- let aH = aM._2
214- if (aH)
215- then fraction((b[aG] * a), 7, 365)
210+ let aF = aL._1
211+ let aG = aL._2
212+ if (aG)
213+ then fraction((b[aF] * a), 7, 365)
216214 else 0
217215 }
218216
219217
220-func aU () = {
221- func aC (aD,aV) = {
222- let aW = aD
223- let aX = aW._1
224- let aY = aW._2
225- let aZ = aW._3
226- let ba = valueOrElse(getInteger(V, (C + aV)), 0)
227- let bb = as(aV)
228- let bc = ax(aV)
229- let bd = fraction(ba, bb, bc)
230- $Tuple3((aX :+ ba), (aY :+ bd), (aZ + bd))
218+func aT () = {
219+ func aB (aC,aU) = {
220+ let aV = aC
221+ let aW = aV._1
222+ let aX = aV._2
223+ let aY = aV._3
224+ let aZ = valueOrElse(getInteger(V, (C + aU)), 0)
225+ let ba = ar(aU)
226+ let bb = aw(aU)
227+ let bc = fraction(aZ, ba, bb)
228+ $Tuple3((aW :+ aZ), (aX :+ bc), (aY + bc))
231229 }
232230
233- let aN = aq()
234- let aO = size(aN)
235- let aP = $Tuple3(nil, nil, 0)
236- func aQ (aR,aS) = if ((aS >= aO))
237- then aR
238- else aC(aR, aN[aS])
231+ let aM = ap()
232+ let aN = size(aM)
233+ let aO = $Tuple3(nil, nil, 0)
234+ func aP (aQ,aR) = if ((aR >= aN))
235+ then aQ
236+ else aB(aQ, aM[aR])
239237
240- func aT (aR,aS) = if ((aS >= aO))
241- then aR
238+ func aS (aQ,aR) = if ((aR >= aN))
239+ then aQ
242240 else throw("List size exceeds 30")
243241
244- aT(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aP, 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)
242+ aS(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aO, 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)
245243 }
246244
247245
248-func be (aV) = {
249- let ba = valueOrElse(getInteger(V, (C + aV)), 0)
250- let bb = as(aV)
251- let bc = ax(aV)
252- fraction(ba, bb, bc)
246+func bd (aU) = {
247+ let aZ = valueOrElse(getInteger(V, (C + aU)), 0)
248+ let ba = ar(aU)
249+ let bb = aw(aU)
250+ fraction(aZ, ba, bb)
253251 }
254252
255253
256-func bf (aV,aX) = if ((height >= ad))
254+func be (aU,aW) = if ((ad >= height))
257255 then 0
258256 else {
259- let bg = getIntegerValue(this, (aV + p))
260- let bh = getIntegerValue(this, (aV + n))
261- let bi = getIntegerValue(this, (aV + o))
262- let bj = ((height - bi) * bg)
263- let bk = if ((aX > 0))
264- then fraction(bj, a, aX)
257+ let bf = getIntegerValue(this, (aU + p))
258+ let bg = getIntegerValue(this, (aU + n))
259+ let bh = getIntegerValue(this, (aU + o))
260+ let bi = ((height - bh) * bf)
261+ let bj = if ((aW > 0))
262+ then fraction(bi, a, aW)
265263 else 0
266- (bh + bk)
264+ (bg + bj)
267265 }
268266
269267
270-func bl (aX) = if ((height >= ad))
268+func bk (aW) = if ((ad >= height))
271269 then 0
272270 else {
273- let bg = valueOrElse(getInteger(this, x), 0)
274- let bh = valueOrElse(getInteger(this, u), 0)
275- let bi = valueOrElse(getInteger(this, v), height)
276- let bj = ((height - bi) * bg)
277- let bk = if ((aX > 0))
278- then fraction(bj, a, aX)
271+ let bf = valueOrElse(getInteger(this, x), 0)
272+ let bg = valueOrElse(getInteger(this, u), 0)
273+ let bh = valueOrElse(getInteger(this, v), height)
274+ let bi = ((height - bh) * bf)
275+ let bj = if ((aW > 0))
276+ then fraction(bi, a, aW)
279277 else 0
280- (bh + bk)
278+ (bg + bj)
281279 }
282280
283281
284-func bm (bn,aV) = {
285- let aX = valueOrElse(getInteger(V, (C + aV)), 0)
286- let bo = bf(aV, aX)
287- let bp = valueOrElse(getInteger(V, ((bn + D) + aV)), 0)
288- let bq = valueOrElse(getInteger(this, (((aV + "_") + bn) + r)), if ((bp == 0))
289- then bo
282+func bl (bm,aU) = {
283+ let aW = valueOrElse(getInteger(V, (C + aU)), 0)
284+ let bn = be(aU, aW)
285+ let bo = valueOrElse(getInteger(V, ((bm + D) + aU)), 0)
286+ let bp = valueOrElse(getInteger(this, (((aU + "_") + bm) + r)), if ((bo == 0))
287+ then bn
290288 else 0)
291- let bj = fraction(bp, (bo - bq), a)
292- $Tuple3(bj, bo, bp)
289+ let bi = fraction(bo, (bn - bp), a)
290+ $Tuple3(bi, bn, bo)
293291 }
294292
295293
296-func br (bn) = {
297- let aX = valueOrElse(getInteger(W, (S + F)), 0)
298- let bo = bl(aX)
299- let bp = valueOrElse(getInteger(V, (((S + "_") + bn) + G)), 0)
300- let bq = valueOrElse(getInteger(this, (bn + y)), if ((bp == 0))
301- then bo
294+func bq (bm) = {
295+ let aW = valueOrElse(getInteger(W, (S + F)), 0)
296+ let bn = bk(aW)
297+ let bo = valueOrElse(getInteger(W, (((S + "_") + bm) + G)), 0)
298+ let bp = valueOrElse(getInteger(this, (bm + y)), if ((bo == 0))
299+ then bn
302300 else 0)
303- let bj = fraction(bp, (bo - bq), a)
304- $Tuple3(bj, bo, bp)
301+ let bi = fraction(bo, (bn - bp), a)
302+ $Tuple3(bi, bn, bo)
305303 }
306304
307305
308-func bs (bn,bt) = {
309- func bu (aD,aV) = {
310- let bv = aD
311- let bw = bv._1
312- let bx = bv._2
313- let by = bv._3
314- let bz = bv._4
315- let bA = valueOrElse(getInteger(this, (((aV + "_") + bn) + s)), 0)
316- let bB = bm(bn, aV)
317- let bC = bB._1
318- let bD = bB._2
319- let bp = bB._3
320- let bE = (bA + bC)
321- if (if ((bE > 0))
306+func br (bm,bs) = {
307+ func bt (aC,aU) = {
308+ let bu = aC
309+ let bv = bu._1
310+ let bw = bu._2
311+ let bx = bu._3
312+ let by = bu._4
313+ let bz = valueOrElse(getInteger(this, (((aU + "_") + bm) + s)), 0)
314+ let bA = bl(bm, aU)
315+ let bB = bA._1
316+ let bC = bA._2
317+ let bo = bA._3
318+ let bD = (bz + bB)
319+ if (if ((bD > 0))
322320 then true
323- else (bp > 0))
321+ else (bo > 0))
324322 then {
325- let bF = if (if (bt)
323+ let bE = if (if (bs)
326324 then true
327- else (bE == 0))
328- then bz
329- else (bz ++ [IntegerEntry((((aV + "_") + bn) + r), bD), IntegerEntry((((aV + "_") + bn) + s), 0), IntegerEntry((aV + n), bD), IntegerEntry((aV + o), height)])
330- $Tuple4((bw :+ aV), (bx :+ bE), (by + bE), bF)
325+ else (bD == 0))
326+ then by
327+ else (by ++ [IntegerEntry((((aU + "_") + bm) + r), bC), IntegerEntry((((aU + "_") + bm) + s), 0), IntegerEntry((aU + n), bC), IntegerEntry((aU + o), height)])
328+ $Tuple4((bv :+ aU), (bw :+ bD), (bx + bD), bE)
331329 }
332- else $Tuple4(bw, bx, by, bz)
330+ else $Tuple4(bv, bw, bx, by)
333331 }
334332
335- let aN = aq()
336- let aO = size(aN)
337- let aP = $Tuple4(nil, nil, 0, nil)
338- func aQ (aR,aS) = if ((aS >= aO))
339- then aR
340- else bu(aR, aN[aS])
333+ let aM = ap()
334+ let aN = size(aM)
335+ let aO = $Tuple4(nil, nil, 0, nil)
336+ func aP (aQ,aR) = if ((aR >= aN))
337+ then aQ
338+ else bt(aQ, aM[aR])
341339
342- func aT (aR,aS) = if ((aS >= aO))
343- then aR
340+ func aS (aQ,aR) = if ((aR >= aN))
341+ then aQ
344342 else throw("List size exceeds 30")
345343
346- aT(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aP, 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)
344+ aS(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aO, 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)
347345 }
348346
349347
350-func bG (bn,bt) = {
351- let bA = valueOrElse(getInteger(this, (bn + t)), 0)
352- let bH = br(bn)
353- let bC = bH._1
354- let bI = bH._2
355- let bp = bH._3
356- let bE = (bA + bC)
357- if (if (bt)
348+func bF (bm,bs) = {
349+ let bz = valueOrElse(getInteger(this, (bm + t)), 0)
350+ let bG = bq(bm)
351+ let bB = bG._1
352+ let bH = bG._2
353+ let bo = bG._3
354+ let bD = (bz + bB)
355+ if (if (bs)
358356 then true
359- else (bE == 0))
360- then $Tuple2(bE, nil)
361- else $Tuple2(bE, [IntegerEntry((bn + y), bI), IntegerEntry((bn + t), 0), IntegerEntry(u, bI), IntegerEntry(v, height)])
357+ else (bD == 0))
358+ then $Tuple2(bD, nil)
359+ else $Tuple2(bD, [IntegerEntry((bm + y), bH), IntegerEntry((bm + t), 0), IntegerEntry(u, bH), IntegerEntry(v, height)])
362360 }
363361
364362
365-func bJ () = {
366- let bK = as(ac)
367- let bL = ax(ac)
368- func bM (aB,aV) = {
369- let bN = valueOrElse(getInteger(this, (aV + p)), 0)
370- let bO = fraction(bN, bK, bL)
371- let bP = ((bO * ae) * 52)
372- let aY = be(aV)
373- (aB :+ fraction(bP, a, aY))
363+func bI () = {
364+ let bJ = ar(ac)
365+ let bK = aw(ac)
366+ func bL (aA,aU) = {
367+ let bM = valueOrElse(getInteger(this, (aU + p)), 0)
368+ let bN = fraction(bM, bJ, bK)
369+ let bO = ((bN * ae) * 52)
370+ let aX = bd(aU)
371+ (aA :+ fraction(bO, a, aX))
374372 }
375373
376- let bQ = {
377- let aN = aq()
378- let aO = size(aN)
379- let aP = nil
380- func aQ (aR,aS) = if ((aS >= aO))
381- then aR
382- else bM(aR, aN[aS])
374+ let bP = {
375+ let aM = ap()
376+ let aN = size(aM)
377+ let aO = nil
378+ func aP (aQ,aR) = if ((aR >= aN))
379+ then aQ
380+ else bL(aQ, aM[aR])
383381
384- func aT (aR,aS) = if ((aS >= aO))
385- then aR
382+ func aS (aQ,aR) = if ((aR >= aN))
383+ then aQ
386384 else throw("List size exceeds 30")
387385
388- aT(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aP, 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)
386+ aS(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aO, 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)
389387 }
390- let bR = getIntegerValue(W, (S + F))
391- let bS = getStringValue(addressFromStringValue(S), I)
392- let bT = ax(bS)
393- let bU = {
394- let bV = ({
395- let bV = invoke(T, "getShareAssetPriceREADONLY", [[bS]], nil)
396- if ($isInstanceOf(bV, "List[Any]"))
397- then bV
398- else throw(($getType(bV) + " couldn't be cast to List[Any]"))
399- })[0]
400- if ($isInstanceOf(bV, "Int"))
401- then bV
402- else throw(($getType(bV) + " couldn't be cast to Int"))
388+ let bQ = getIntegerValue(W, (S + F))
389+ let bR = getStringValue(addressFromStringValue(S), I)
390+ let bS = aw(bR)
391+ let bT = {
392+ let bU = invoke(T, "getShareAssetPriceREADONLY", [bR], nil)
393+ if ($isInstanceOf(bU, "Int"))
394+ then bU
395+ else throw(($getType(bU) + " couldn't be cast to Int"))
403396 }
404- let bW = fraction(bR, bU, bT)
405- let bN = valueOrElse(getInteger(this, x), 0)
406- let bO = fraction(bN, bK, bL)
407- let bP = ((bO * ae) * 52)
408- let bX = fraction(bP, a, bW)
409- $Tuple3(aq(), bQ, bX)
397+ let bV = fraction(bQ, bT, bS)
398+ let bM = valueOrElse(getInteger(this, x), 0)
399+ let bN = fraction(bM, bJ, bK)
400+ let bO = ((bN * ae) * 52)
401+ let bW = fraction(bO, a, bV)
402+ $Tuple3(ap(), bP, bW)
410403 }
411404
412405
413-@Callable(al)
406+@Callable(ak)
414407 func claimLenderRewards () = {
415- let bY = bs(toString(al.caller), false)
416- if ((bY._3 == 0))
408+ let bX = br(toString(ak.caller), false)
409+ if ((bX._3 == 0))
417410 then throw("claim amount must be greater than 0")
418411 else {
419- let bZ = invoke(U, "withdrawLendReward", [bY._3, toString(al.caller)], nil)
420- if ((bZ == bZ))
421- then bY._4
412+ let bY = invoke(U, "withdrawLendReward", [bX._3, toString(ak.caller)], nil)
413+ if ((bY == bY))
414+ then bX._4
422415 else throw("Strict value is not equal to itself.")
423416 }
424417 }
425418
426419
427420
428-@Callable(al)
421+@Callable(ak)
429422 func claimLpRewards () = {
430- let bY = bG(toString(al.caller), false)
431- if ((bY._1 == 0))
423+ let bX = bF(toString(ak.caller), false)
424+ if ((bX._1 == 0))
432425 then throw("claim amount must be greater than 0")
433426 else {
434- let bZ = invoke(U, "withdrawLpReward", [bY._1, toString(al.caller)], nil)
435- if ((bZ == bZ))
436- then bY._2
427+ let bY = invoke(U, "withdrawLpReward", [bX._1, toString(ak.caller)], nil)
428+ if ((bY == bY))
429+ then bX._2
437430 else throw("Strict value is not equal to itself.")
438431 }
439432 }
440433
441434
442435
443-@Callable(al)
444-func lendAction (bn,aV) = valueOrElse(ao(al), {
445- let bA = valueOrElse(getInteger(this, (aV + s)), 0)
446- let ca = bm(bn, aV)
447- let bC = ca._1
448- let bD = ca._2
449-[IntegerEntry((((aV + "_") + bn) + r), bD), IntegerEntry((((aV + "_") + bn) + s), (bA + bC)), IntegerEntry((aV + n), bD), IntegerEntry((aV + o), height)]
436+@Callable(ak)
437+func lendAction (bm,aU) = valueOrElse(an(ak), {
438+ let bz = valueOrElse(getInteger(this, (aU + s)), 0)
439+ let bZ = bl(bm, aU)
440+ let bB = bZ._1
441+ let bC = bZ._2
442+[IntegerEntry((((aU + "_") + bm) + r), bC), IntegerEntry((((aU + "_") + bm) + s), (bz + bB)), IntegerEntry((aU + n), bC), IntegerEntry((aU + o), height)]
450443 })
451444
452445
453446
454-@Callable(al)
455-func lpAction (bn) = valueOrElse(ap(al), {
456- let bA = valueOrElse(getInteger(this, t), 0)
457- let cb = br(bn)
458- let bC = cb._1
459- let bI = cb._2
460-[IntegerEntry((bn + y), bI), IntegerEntry((bn + t), (bA + bC)), IntegerEntry((bn + u), bI), IntegerEntry((bn + v), height)]
447+@Callable(ak)
448+func lpAction (bm) = valueOrElse(ao(ak), {
449+ let bz = valueOrElse(getInteger(this, t), 0)
450+ let ca = bq(bm)
451+ let bB = ca._1
452+ let bH = ca._2
453+[IntegerEntry((bm + y), bH), IntegerEntry((bm + t), (bz + bB)), IntegerEntry((bm + u), bH), IntegerEntry((bm + v), height)]
461454 })
462455
463456
464457
465-@Callable(al)
466-func init (cc,cd,ce,cf,ae) = valueOrElse(am(al), if (!(isDefined(addressFromString(cc))))
458+@Callable(ak)
459+func init (cb,cc,cd,ce,ae) = valueOrElse(al(ak), if (!(isDefined(addressFromString(cb))))
467460 then throw("Wrong farming address")
468- else if (!(isDefined(addressFromString(cd))))
461+ else if (!(isDefined(addressFromString(cc))))
469462 then throw("Wrong main contract address")
470- else [StringEntry(K, cc), StringEntry(L, cd), StringEntry(H, ce), IntegerEntry(h, cf), IntegerEntry(i, ae)])
463+ else [StringEntry(K, cb), StringEntry(L, cc), StringEntry(H, cd), IntegerEntry(h, ce), IntegerEntry(i, ae)])
471464
472465
473466
474-@Callable(al)
475-func initNewToken (aV) = valueOrElse(ak(al), if (isDefined(getInteger(this, (aV + n))))
467+@Callable(ak)
468+func initNewToken (aU) = valueOrElse(aj(ak), if (isDefined(getInteger(this, (aU + n))))
476469 then throw("token already inited")
477- else if (!(contains(getStringValue(V, E), aV)))
470+ else if (!(contains(getStringValue(V, E), aU)))
478471 then throw("no token on landing")
479472 else {
480- let cg = (aq() :+ aV)
481-[IntegerEntry((aV + n), 0), IntegerEntry((aV + o), max([ad, height])), StringEntry(l, makeString(cg, ",")), IntegerEntry((aV + p), 0)]
473+ let cf = (ap() :+ aU)
474+[IntegerEntry((aU + n), 0), IntegerEntry((aU + o), max([ad, height])), StringEntry(l, makeString(cf, ",")), IntegerEntry((aU + p), 0)]
482475 })
483476
484477
485478
486-@Callable(al)
487-func updateRewards () = valueOrElse(an(al), {
488- let ch = valueOrElse(getInteger(this, q), 0)
489- if (((ch + ae) > height))
490- then throw("rewards alredy updated in this period")
491- else {
492- let ci = aU()
493- let aX = ci._1
494- let aY = ci._2
495- let aZ = ci._3
496- let bK = as(ac)
497- let bL = ax(ac)
498- let cj = ay(af, c, b)
499- func ck (aD,aV) = {
500- let cl = aD
501- let bz = cl._1
502- let aG = cl._2
503- if ((aX[aG] == 0))
504- then $Tuple2((bz ++ [IntegerEntry((aV + A), aX[aG]), IntegerEntry((aV + p), 0), IntegerEntry((aV + n), bf(aV, aX[aG])), IntegerEntry((aV + o), max([ad, height]))]), (aG + 1))
505- else {
506- let cm = fraction(aY[aG], a, aZ)
507- let cn = fraction(cm, ah, a)
508- let co = fraction(cn, bK, bL)
509- let cp = valueOrElse(getInteger(this, A), 0)
510- let cq = if (if ((cp == 0))
511- then true
512- else (aX[aG] == 0))
513- then 0
514- else fraction(cp, a, aX[aG])
515- let bj = (min([(cj * (a + cq)), fraction(cj, (15 * a), 10)]) / a)
516- let cr = min([co, fraction(aY[aG], bj, a)])
517- let cs = fraction(cr, bL, bK)
518- let bg = (cs / ae)
519- $Tuple2((bz ++ [IntegerEntry((aV + A), aX[aG]), IntegerEntry((aV + p), bg), IntegerEntry((aV + n), bf(aV, aX[aG])), IntegerEntry((aV + o), max([ad, height]))]), (aG + 1))
479+@Callable(ak)
480+func updateRewards () = valueOrElse(am(ak), {
481+ let cg = valueOrElse(getInteger(this, q), 0)
482+ let ch = (((height - ad) / ae) + 1)
483+ let ci = if ((0 >= ch))
484+ then 1
485+ else ch
486+ if ((ci > 104))
487+ then throw("max period is 104")
488+ else if (if ((cg >= ci))
489+ then (cg != 0)
490+ else false)
491+ then throw("rewards alredy updated in this period")
492+ else {
493+ let cj = aT()
494+ let aW = cj._1
495+ let aX = cj._2
496+ let aY = cj._3
497+ let bJ = ar(ac)
498+ let bK = aw(ac)
499+ let ck = ax(ci, c, b)
500+ func cl (aC,aU) = {
501+ let cm = aC
502+ let by = cm._1
503+ let cn = cm._2
504+ let aF = cm._3
505+ if ((aW[aF] == 0))
506+ then $Tuple3((by ++ [IntegerEntry((aU + A), aW[aF]), IntegerEntry((aU + p), 0), IntegerEntry((aU + n), be(aU, aW[aF])), IntegerEntry((aU + o), max([ad, height]))]), cn, (aF + 1))
507+ else {
508+ let co = fraction(aX[aF], a, aY)
509+ let cp = fraction(co, ag, a)
510+ let cq = fraction(cp, bJ, bK)
511+ let cr = valueOrElse(getInteger(this, (aU + A)), 0)
512+ let cs = if (if ((cr == 0))
513+ then true
514+ else (aW[aF] == 0))
515+ then 0
516+ else (fraction(aW[aF], a, cr) - a)
517+ let bi = ((min([(ck * (a + max([cs, 0]))), fraction(ck, (15 * a), 10)]) / a) / 100)
518+ let ct = min([cq, fraction(aX[aF], bi, a)])
519+ let cu = fraction(ct, bK, bJ)
520+ let bf = (cu / ae)
521+ $Tuple3((by ++ [IntegerEntry((aU + A), aW[aF]), IntegerEntry((aU + p), bf), IntegerEntry((aU + n), be(aU, aW[aF])), IntegerEntry((aU + o), max([ad, height]))]), (cn + cu), (aF + 1))
522+ }
523+ }
524+
525+ let cv = {
526+ let aM = ap()
527+ let aN = size(aM)
528+ let aO = $Tuple3(nil, 0, 0)
529+ func aP (aQ,aR) = if ((aR >= aN))
530+ then aQ
531+ else cl(aQ, aM[aR])
532+
533+ func aS (aQ,aR) = if ((aR >= aN))
534+ then aQ
535+ else throw("List size exceeds 30")
536+
537+ aS(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aO, 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)
538+ }
539+ let cw = cv._1
540+ let cx = cv._2
541+ let cy = ax(ci, f, e)
542+ let bQ = getIntegerValue(W, (S + F))
543+ let cz = valueOrElse(getInteger(this, w), 0)
544+ let bR = getStringValue(addressFromStringValue(S), I)
545+ let bS = aw(bR)
546+ let bT = {
547+ let bU = invoke(T, "getShareAssetPriceREADONLY", [bR], nil)
548+ if ($isInstanceOf(bU, "Int"))
549+ then bU
550+ else throw(($getType(bU) + " couldn't be cast to Int"))
551+ }
552+ let bV = fraction(bQ, bT, bS)
553+ let cA = fraction(ai, bJ, bK)
554+ let cB = if (if ((cz == 0))
555+ then true
556+ else (bQ == 0))
557+ then 0
558+ else (fraction(bQ, a, cz) - a)
559+ let cC = ((min([(cy * (a + max([cB, 0]))), fraction(cy, (15 * a), 10)]) / a) / 100)
560+ let cD = min([cA, fraction(bV, cC, a)])
561+ let cE = fraction(cD, bK, bJ)
562+ let cF = (cE / ae)
563+ let cG = (ag - cx)
564+ let cH = (ai - cE)
565+ let bY = invoke(U, "withdrawLpReward", [(cG + cH), toString(this)], nil)
566+ if ((bY == bY))
567+ then {
568+ let cI = if ((12 >= ci))
569+ then [IntegerEntry(w, bQ), IntegerEntry(x, cF), IntegerEntry(u, bk(bQ)), IntegerEntry(v, max([ad, height])), ScriptTransfer(Address(base58'3MsXJ3BesPECkYejzBQGHZPJT8GVYy4Fd3Q'), cG, fromBase58String(ac)), ScriptTransfer(Address(base58'3MsXJ3BesPECkYejzBQGHZPJT8GVYy4Fd3Q'), cH, fromBase58String(ac))]
570+ else nil
571+ ((cI ++ cw) :+ IntegerEntry(q, ci))
520572 }
573+ else throw("Strict value is not equal to itself.")
521574 }
522-
523- let ct = {
524- let aN = aq()
525- let aO = size(aN)
526- let aP = $Tuple2(nil, 0)
527- func aQ (aR,aS) = if ((aS >= aO))
528- then aR
529- else ck(aR, aN[aS])
530-
531- func aT (aR,aS) = if ((aS >= aO))
532- then aR
533- else throw("List size exceeds 30")
534-
535- aT(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aP, 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)
536- }
537- let cu = ct._1
538- let aG = ct._2
539- let cv = ay(af, f, e)
540- let bR = getIntegerValue(W, (S + F))
541- let cw = valueOrElse(getInteger(this, w), 0)
542- let bS = getStringValue(addressFromStringValue(S), I)
543- let bT = ax(bS)
544- let bU = {
545- let bV = invoke(T, "getShareAssetPriceREADONLY", [bS], nil)
546- if ($isInstanceOf(bV, "Int"))
547- then bV
548- else throw(($getType(bV) + " couldn't be cast to Int"))
549- }
550- let bW = fraction(bR, bU, bT)
551- let cx = fraction(aj, bK, bL)
552- let cy = if (if ((cw == 0))
553- then true
554- else (bR == 0))
555- then 0
556- else fraction(cw, a, bR)
557- let cz = (min([(cv * (a + cy)), fraction(cv, (15 * a), 10)]) / a)
558- let cA = min([cx, fraction(bW, cz, a)])
559- let cB = fraction(cA, bK, bL)
560- let cC = (cB / ae)
561- let cD = [IntegerEntry(w, bR), IntegerEntry(x, cC), IntegerEntry(u, bl(bR)), IntegerEntry(v, max([ad, height]))]
562- ((cD ++ cu) :+ IntegerEntry(q, max([ad, height])))
563- }
564575 })
565576
566577
567-@Verifier(cE)
568-func cF () = {
569- let cG = {
570- let cH = if (sigVerify(cE.bodyBytes, cE.proofs[0], Y))
578+@Verifier(cJ)
579+func cK () = {
580+ let cL = {
581+ let cM = if (sigVerify(cJ.bodyBytes, cJ.proofs[0], Y))
571582 then 1
572583 else 0
573- let cI = if (sigVerify(cE.bodyBytes, cE.proofs[1], Z))
584+ let cN = if (sigVerify(cJ.bodyBytes, cJ.proofs[1], Z))
574585 then 1
575586 else 0
576- let cJ = if (sigVerify(cE.bodyBytes, cE.proofs[2], aa))
587+ let cO = if (sigVerify(cJ.bodyBytes, cJ.proofs[2], aa))
577588 then 1
578589 else 0
579- (((cH + cI) + cJ) >= 2)
590+ (((cM + cN) + cO) >= 2)
580591 }
581- let av = cE
582- if ($isInstanceOf(av, "InvokeScriptTransaction"))
592+ let au = cJ
593+ if ($isInstanceOf(au, "InvokeScriptTransaction"))
583594 then {
584- let bZ = av
585- let cK = sigVerify(cE.bodyBytes, cE.proofs[0], cE.senderPublicKey)
586- let cL = if ((bZ.fee == 900000))
587- then (bZ.feeAssetId == unit)
595+ let bY = au
596+ let cP = sigVerify(cJ.bodyBytes, cJ.proofs[0], cJ.senderPublicKey)
597+ let cQ = if ((bY.fee == 900000))
598+ then (bY.feeAssetId == unit)
588599 else false
589- let cM = (bZ.function == "init")
590- let cN = (size(bZ.payments) == 0)
591- if (if (if (if (cL)
592- then cM
600+ let cR = (bY.function == "init")
601+ let cS = (size(bY.payments) == 0)
602+ if (if (if (if (cQ)
603+ then cR
593604 else false)
594- then cK
605+ then cP
595606 else false)
596- then cN
607+ then cS
597608 else false)
598609 then true
599- else cG
610+ else cL
600611 }
601- else cG
612+ else cL
602613 }
603614

github/deemru/w8io/c3f4982 
179.54 ms