tx · A2SapnPHH4MQ9YHSLWFDqkyu5oAnJSDgs5bP9WNFq6jT

3N2M4PztorHwrfENp7D6LhYGgGodjiD1fjn:  -0.02400000 Waves

2023.08.17 14:43 [2714549] smart account 3N2M4PztorHwrfENp7D6LhYGgGodjiD1fjn > SELF 0.00000000 Waves

{ "type": 13, "id": "A2SapnPHH4MQ9YHSLWFDqkyu5oAnJSDgs5bP9WNFq6jT", "fee": 2400000, "feeAssetId": null, "timestamp": 1692272634083, "version": 2, "chainId": 84, "sender": "3N2M4PztorHwrfENp7D6LhYGgGodjiD1fjn", "senderPublicKey": "Fj9LPkCtmW3pDnVU6wPQnvqpZJCBieWSvZqY5FAGeCyp", "proofs": [ "2AETyvgy9zpDz1FPxid8UDrYo5gEE6mMt4ZPpu5WgwRMnAMSxVpat8cypPH5EgWT21EQAsrB2kpnxM4GBqVfmUXw", "5w9ikohjMJcBhq6MoRfVrwdws1jteSLWQs1QsFWnEcFNUmPD4BKQyLT4QbUi7GVBfPa1cD6ghjQ8JXUNpTwVXbaV" ], "script": "base64:BgIhCAISABIAEgQKAggIEgMKAQgSBwoFCAgIAQESAwoBCBIAUQAGU0NBTEU4AIDC1y8AC0xFTkRFUlNfQVBSCQDMCAIAlgEJAMwIAgB4CQDMCAIAZAkAzAgCAFAJAMwIAgA8CQDMCAIAKAkAzAgCAB4JAMwIAgAUCQDMCAIACgUDbmlsABNMRU5ERVJTX0FQUl9QRVJJT0RTCQDMCAICAzEtMQkAzAgCAgMyLTIJAMwIAgIDMy0zCQDMCAICAzQtNAkAzAgCAgM1LTgJAMwIAgIEOS0xMgkAzAgCAgcxNCAtIDE2CQDMCAICBTE3LTIwCQDMCAICBjIwLTEwNAUDbmlsABNMRU5ERVJTX01BWF9QRVJJT0RTAGgABkxQX0FQUgkAzAgCAJYBCQDMCAIAeAkAzAgCAGQJAMwIAgBQCQDMCAIAPAkAzAgCACgFA25pbAAOTFBfQVBSX1BFUklPRFMJAMwIAgIDMS0xCQDMCAICAzItMgkAzAgCAgMzLTMJAMwIAgIDNC00CQDMCAICAzUtOAkAzAgCAgQ5LTEyBQNuaWwADkxQX01BWF9QRVJJT0RTAAwADGtTdGFydEhlaWdodAILc3RhcnRIZWlnaHQADWtQZXJpb2RMZW5ndGgCDHBlcmlvZExlbmd0aAARa0xlbmRlcnNNYXhBbW91bnQCEWxlbmRSZXdhcmRzQW1vdW50AAxrTFBNYXhBbW91bnQCDmxwUmV3YXJkQW1vdW50AAdrVG9rZW5zAgZ0b2tlbnMAC2tVc2VyU3VwcGx5AhBfdXNlclRvdGFsU3VwcGx5AA5rVG9rZW5JbnRlcmVzdAIOX3Rva2VuSW50ZXJlc3QAFGtUb2tlbkludGVyZXN0SGVpZ2h0AhRfdG9rZW5JbnRlcmVzdEhlaWdodAAUa1Rva2VuUmV3YXJkUGVyQmxvY2sCFF90b2tlblJld2FyZFBlckJsb2NrABNrUmV3YXJkVXBkYXRlSGVpZ2h0AhJyZXdhcmRVcGRhdGVIZWlnaHQAEWtVc2VyTGVuZEludGVyZXN0AhFfdXNlckxhbmRJbnRlcmVzdAAXa1VzZXJMZW5kQXZhaWxhYmxlQ2xhaW0CF191c2VyTGVuZEF2YWlsYWJsZUNsYWltABVrVXNlckxwQXZhaWxhYmxlQ2xhaW0CFV91c2VyTHBBdmFpbGFibGVDbGFpbQALa0xwSW50ZXJlc3QCCmxwSW50ZXJlc3QAEWtMcEludGVyZXN0SGVpZ2h0AhBscEludGVyZXN0SGVpZ2h0AA1rUHJldkxQU3VwcGx5AhFwcmV2TFBUb3RhbFN1cHBseQARa0xwUmV3YXJkUGVyQmxvY2sCEGxwUmV3YXJkUGVyQmxvY2sAD2tVc2VyTHBJbnRlcmVzdAIPX3VzZXJMcEludGVyZXN0AA5rUHJpY2VJbk9yYWNsZQIHX3R3YXA1QgAUa1ByZXZMZW5kVG9rZW5TdXBwbHkCFF9wcmV2TGVuZFRvdGFsU3VwcGx5AAxrQVhMWVRva2VuSWQCC2F4bHlUb2tlbklkABBrTGVuZFRva2VuU3VwcGx5Ag90b3RhbF9zdXBwbGllZF8AD2tMZW5kVXNlclN1cHBseQIKX3N1cHBsaWVkXwAQa0xlbmRTZXR1cFRva2VucwIMc2V0dXBfdG9rZW5zAA5rU0ZUb3RhbFN1cHBseQIaX3RvdGFsX3NoYXJlX3Rva2Vuc19sb2NrZWQAEmtTRlVzZXJUb3RhbFN1cHBseQIUX3NoYXJlX3Rva2Vuc19sb2NrZWQACWtBeGx5UG9vbAIIYXhseVBvb2wABWtMcElkAg5zaGFyZV9hc3NldF9pZAAMa1ByaWNlT3JhY2xlAgxwcmljZV9vcmFjbGUAEWtBeGx5TWFpbkNvbnRyYWN0AgxtYWluQ29udHJhY3QAFmtBeGx5VG9rZW5vbWljQ29udHJhY3QCEXRva2Vub21pY0NvbnRyYWN0ABJrU0ZGYXJtaW5nQ29udHJhY3QCE3N3b3BmaV9mYXJtaW5nX2FkZHIADWtMZW5kQ29udHJhY3QCEWxlbmRfc2VydmljZV9hZGRyAAlrQWRtaW4xUEsCFWdyb3VwMV9hZG1pbjFfcHViX2tleQAJa0FkbWluMlBLAhVncm91cDFfYWRtaW4yX3B1Yl9rZXkACWtBZG1pbjNQSwIVZ3JvdXAxX2FkbWluM19wdWJfa2V5AA9rT3BlcmF0b3JDYWxsUEsCEmFkbWluX2NhbGxfcHViX2tleQAIYXhseVBvb2wJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzBQlrQXhseVBvb2wCFkNhbid0IGdldCBheGx5UG9vbCBrZXkADG1haW5Db250cmFjdAkBEUBleHRyTmF0aXZlKDEwNjIpAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMFEWtBeGx5TWFpbkNvbnRyYWN0AhlDYW4ndCBnZXQgbWFpbkNvbnRhY3Qga2V5AA10b2tlbkNvbnRyYWN0CQERQGV4dHJOYXRpdmUoMTA2MikBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwUWa0F4bHlUb2tlbm9taWNDb250cmFjdAIfQ2FuJ3QgZ2V0IHRva2Vub21pY0NvbnRyYWN0IGtleQAMbGVuZENvbnRyYWN0CQERQGV4dHJOYXRpdmUoMTA2MikBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUMbWFpbkNvbnRyYWN0BQ1rTGVuZENvbnRyYWN0Ah9DYW4ndCBnZXQgbGVuZF9zZXJ2aWNlX2FkZHIga2V5ABFzZkZhcm1pbmdDb250cmFjdAkBEUBleHRyTmF0aXZlKDEwNjIpAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFDG1haW5Db250cmFjdAUSa1NGRmFybWluZ0NvbnRyYWN0AiFDYW4ndCBnZXQgc3dvcGZpX2Zhcm1pbmdfYWRkciBrZXkAD3ByaWNlT3JhY2xlQWRkcgkBEUBleHRyTmF0aXZlKDEwNjIpAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFDG1haW5Db250cmFjdAUMa1ByaWNlT3JhY2xlAhpDYW4ndCBnZXQgcHJpY2Vfb3JhY2xlIGtleQAIYWRtaW4xUEsJANkEAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFDG1haW5Db250cmFjdAUJa0FkbWluMVBLAhJDYW4ndCBnZXQgYWRtaW4xUEsACGFkbWluMlBLCQDZBAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQxtYWluQ29udHJhY3QFCWtBZG1pbjJQSwISQ2FuJ3QgZ2V0IGFkbWluMlBLAAhhZG1pbjNQSwkA2QQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUMbWFpbkNvbnRyYWN0BQlrQWRtaW4zUEsCFENhbid0IGdldCBvcGVyYXRvclBLAApvcGVyYXRvclBLCQDZBAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzBQ9rT3BlcmF0b3JDYWxsUEsCFENhbid0IGdldCBvcGVyYXRvclBLAAZheGx5SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ10b2tlbkNvbnRyYWN0BQxrQVhMWVRva2VuSWQCF0Nhbid0IGdldCBBeGx5IHRva2VuIGlkAAtzdGFydEhlaWdodAkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwUMa1N0YXJ0SGVpZ2h0AAxwZXJpb2RMZW5ndGgJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMFDWtQZXJpb2RMZW5ndGgACWN1clBlcmlvZAkAaQIJAGUCBQZoZWlnaHQFC3N0YXJ0SGVpZ2h0BQxwZXJpb2RMZW5ndGgADWxlbmRNYXhBbW91bnQJARFAZXh0ck5hdGl2ZSgxMDUwKQIFDXRva2VuQ29udHJhY3QFEWtMZW5kZXJzTWF4QW1vdW50ABNsZW5kTWF4UGVyaW9kQW1vdW50CQBpAgUNbGVuZE1heEFtb3VudAUTTEVOREVSU19NQVhfUEVSSU9EUwALbHBNYXhBbW91bnQJARFAZXh0ck5hdGl2ZSgxMDUwKQIFDXRva2VuQ29udHJhY3QFDGtMUE1heEFtb3VudAARbHBNYXhQZXJpb2RBbW91bnQJAGkCBQtscE1heEFtb3VudAUOTFBfTUFYX1BFUklPRFMBC2lzQWRtaW5DYWxsAQFpAwkBD2NvbnRhaW5zRWxlbWVudAIJAMwIAgUIYWRtaW4xUEsJAMwIAgUIYWRtaW4yUEsJAMwIAgUIYWRtaW4zUEsFA25pbAgFAWkPY2FsbGVyUHVibGljS2V5BQR1bml0CQACAQIoT25seSBhZG1pbiBncm91cDEgY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgEKaXNTZWxmQ2FsbAEBaQMJAAACCAUBaQZjYWxsZXIFBHRoaXMFBHVuaXQJAAIBAitPbmx5IGNvbnRyYWN0IGl0c2VsZiBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uAQ5pc09wZXJhdG9yQ2FsbAEBaQMJAAACCAUBaQ9jYWxsZXJQdWJsaWNLZXkFCm9wZXJhdG9yUEsFBHVuaXQJAAIBAiRPbmx5IG9wZXJhdG9yIGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24BCmlzTGFuZENhbGwBAWkDCQAAAggFAWkGY2FsbGVyBQxsZW5kQ29udHJhY3QFBHVuaXQJAAIBAilPbmx5IGxhbmQgY29udHJhY3QgY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgEPaXNTRkZhcm1pbmdDYWxsAQFpAwkAAAIIBQFpBmNhbGxlcgURc2ZGYXJtaW5nQ29udHJhY3QFBHVuaXQJAAIBAilPbmx5IGxhbmQgY29udHJhY3QgY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgEMZ2V0QWxsVG9rZW5zAAQGdG9rZW5zCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMFB2tUb2tlbnMCAAMJAAACBQZ0b2tlbnMCAAUDbmlsCQC1CQIFBnRva2VucwIBLAENZ2V0QXNzZXRQcmljZQEHYXNzZXRJZAkBEUBleHRyTmF0aXZlKDEwNTApAgUPcHJpY2VPcmFjbGVBZGRyCQCsAgIFB2Fzc2V0SWQFDmtQcmljZUluT3JhY2xlARBnZXRBc3NldERlY2ltYWxzAQdhc3NldElkAwkAAAIFB2Fzc2V0SWQCBVdBVkVTAAgEByRtYXRjaDAJAOwHAQkA2QQBBQdhc3NldElkAwkAAQIFByRtYXRjaDACBUFzc2V0BAVhc3NldAUHJG1hdGNoMAgFBWFzc2V0CGRlY2ltYWxzCQACAQIQQ2FuJ3QgZmluZCBhc3NldAERZ2V0QXNzZXRQcmVjaXNpb24BB2Fzc2V0SWQJAGwGAAoAAAkBEGdldEFzc2V0RGVjaW1hbHMBBQdhc3NldElkAAAAAAUERE9XTgEVZ2V0QWRvcHRlZEFQUkJ5UGVyaW9kAwZwZXJpb2QKYXByUGVyaW9kcwNhcHIKAQNmb3ICAWEHYXBlcmlvZAQLJHQwNTQyMDU0NDIFAWEEBWluZGV4CAULJHQwNTQyMDU0NDICXzEEBWZvdW5kCAULJHQwNTQyMDU0NDICXzIEAmZ0CQC1CQIFB2FwZXJpb2QCAS0ECyR0MDU0Nzk1NTQyCQCUCgIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJmdAAACQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCZnQAAQQEZnJvbQgFCyR0MDU0Nzk1NTQyAl8xBAJ0bwgFCyR0MDU0Nzk1NTQyAl8yAwUFZm91bmQFAWEDAwkAZwIFBnBlcmlvZAUEZnJvbQkAZwIFAnRvBQZwZXJpb2QHCQCUCgIFBWluZGV4BgkAlAoCCQBkAgUFaW5kZXgAAQcECyR0MDU2Nzk1NzQ1CgACJGwFE0xFTkRFUlNfQVBSX1BFUklPRFMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCUCgIAAAcKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBA2ZvcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgOQkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQQFaW5kZXgIBQskdDA1Njc5NTc0NQJfMQQFZm91bmQIBQskdDA1Njc5NTc0NQJfMgMFBWZvdW5kCQBrAwkAaAIJAJEDAgULTEVOREVSU19BUFIFBWluZGV4BQZTQ0FMRTgABwDtAgAAARdnZXRUb3RhbFN1cHBseUFsbFRva2VucwAKAQNmb3ICAWEHdG9rZW5JZAQLJHQwNTkzMzU5ODkFAWEEC3RvdGFsU3VwcGx5CAULJHQwNTkzMzU5ODkCXzEEDnRvdGFsU3VwcGx5VXNkCAULJHQwNTkzMzU5ODkCXzIEEXRvdGFsU3VwcGx5VXNkQWxsCAULJHQwNTkzMzU5ODkCXzMEB3RTdXBwbHkJAQt2YWx1ZU9yRWxzZQIJAJoIAgUMbGVuZENvbnRyYWN0CQCsAgIFEGtMZW5kVG9rZW5TdXBwbHkFB3Rva2VuSWQAAAQKYXNzZXRQcmljZQkBDWdldEFzc2V0UHJpY2UBBQd0b2tlbklkBA5hc3NldFByZWNpc2lvbgkBEWdldEFzc2V0UHJlY2lzaW9uAQUHdG9rZW5JZAQKdFN1cHBseVVzZAkAawMFB3RTdXBwbHkFCmFzc2V0UHJpY2UFDmFzc2V0UHJlY2lzaW9uCQCVCgMJAM0IAgULdG90YWxTdXBwbHkFB3RTdXBwbHkJAM0IAgUOdG90YWxTdXBwbHlVc2QFCnRTdXBwbHlVc2QJAGQCBRF0b3RhbFN1cHBseVVzZEFsbAUKdFN1cHBseVVzZAoAAiRsCQEMZ2V0QWxsVG9rZW5zAAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJUKAwUDbmlsBQNuaWwAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEDZm9yAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAzMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAAZABoAGwAcAB0AHgERZ2V0VG90YWxTdXBwbHlVc2QBB3Rva2VuSWQEB3RTdXBwbHkJAQt2YWx1ZU9yRWxzZQIJAJoIAgUMbGVuZENvbnRyYWN0CQCsAgIFEGtMZW5kVG9rZW5TdXBwbHkFB3Rva2VuSWQAAAQKYXNzZXRQcmljZQkBDWdldEFzc2V0UHJpY2UBBQd0b2tlbklkBA5hc3NldFByZWNpc2lvbgkBEWdldEFzc2V0UHJlY2lzaW9uAQUHdG9rZW5JZAkAawMFB3RTdXBwbHkFCmFzc2V0UHJpY2UFDmFzc2V0UHJlY2lzaW9uARRjYWxjTmV3VG9rZW5JbnRlcmVzdAIHdG9rZW5JZAt0b3RhbFN1cHBseQMJAGcCBQZoZWlnaHQFC3N0YXJ0SGVpZ2h0AAAEDnJld2FyZFBlckJsb2NrCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQCsAgIFB3Rva2VuSWQFFGtUb2tlblJld2FyZFBlckJsb2NrBAtvbGRJbnRlcmVzdAkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkArAICBQd0b2tlbklkBQ5rVG9rZW5JbnRlcmVzdAQMdXBkYXRlSGVpZ2h0CQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQCsAgIFB3Rva2VuSWQFFGtUb2tlbkludGVyZXN0SGVpZ2h0BAZyZXdhcmQJAGgCCQBlAgUGaGVpZ2h0BQx1cGRhdGVIZWlnaHQFDnJld2FyZFBlckJsb2NrBAhpbnRlcmVzdAMJAGYCBQt0b3RhbFN1cHBseQAACQBrAwUGcmV3YXJkBQZTQ0FMRTgFC3RvdGFsU3VwcGx5AAAJAGQCBQtvbGRJbnRlcmVzdAUIaW50ZXJlc3QBEWNhbGNOZXdMcEludGVyZXN0AQt0b3RhbFN1cHBseQMJAGcCBQZoZWlnaHQFC3N0YXJ0SGVpZ2h0AAAEDnJld2FyZFBlckJsb2NrCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzBRFrTHBSZXdhcmRQZXJCbG9jawQLb2xkSW50ZXJlc3QJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMFC2tMcEludGVyZXN0BAx1cGRhdGVIZWlnaHQJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMFEWtMcEludGVyZXN0SGVpZ2h0BAZyZXdhcmQJAGgCCQBlAgUGaGVpZ2h0BQx1cGRhdGVIZWlnaHQFDnJld2FyZFBlckJsb2NrBAhpbnRlcmVzdAMJAGYCBQt0b3RhbFN1cHBseQAACQBrAwUGcmV3YXJkBQZTQ0FMRTgFC3RvdGFsU3VwcGx5AAAJAGQCBQtvbGRJbnRlcmVzdAUIaW50ZXJlc3QBEmNhbGNMZW5kVXNlclJld2FyZAIEdXNlcgd0b2tlbklkBAt0b3RhbFN1cHBseQkBC3ZhbHVlT3JFbHNlAgkAmggCBQxsZW5kQ29udHJhY3QJAKwCAgUQa0xlbmRUb2tlblN1cHBseQUHdG9rZW5JZAAABA10b2tlbkludGVyZXN0CQEUY2FsY05ld1Rva2VuSW50ZXJlc3QCBQd0b2tlbklkBQt0b3RhbFN1cHBseQQKdXNlclN1cHBseQkBC3ZhbHVlT3JFbHNlAgkAmggCBQxsZW5kQ29udHJhY3QJAKwCAgkArAICBQR1c2VyBQ9rTGVuZFVzZXJTdXBwbHkFB3Rva2VuSWQAAAQRdXNlclRva2VuSW50ZXJlc3QJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICCQCsAgIJAKwCAgUHdG9rZW5JZAIBXwUEdXNlcgURa1VzZXJMZW5kSW50ZXJlc3QDCQAAAgUKdXNlclN1cHBseQAABQ10b2tlbkludGVyZXN0AAAEBnJld2FyZAkAawMFCnVzZXJTdXBwbHkJAGUCBQ10b2tlbkludGVyZXN0BRF1c2VyVG9rZW5JbnRlcmVzdAUGU0NBTEU4CQCVCgMFBnJld2FyZAUNdG9rZW5JbnRlcmVzdAUKdXNlclN1cHBseQEQY2FsY0xwVXNlclJld2FyZAEEdXNlcgQLdG90YWxTdXBwbHkJAQt2YWx1ZU9yRWxzZQIJAJoIAgURc2ZGYXJtaW5nQ29udHJhY3QJAKwCAgUIYXhseVBvb2wFDmtTRlRvdGFsU3VwcGx5AAAEDXRva2VuSW50ZXJlc3QJARFjYWxjTmV3THBJbnRlcmVzdAEFC3RvdGFsU3VwcGx5BAp1c2VyU3VwcGx5CQELdmFsdWVPckVsc2UCCQCaCAIFDGxlbmRDb250cmFjdAkArAICCQCsAgIJAKwCAgUIYXhseVBvb2wCAV8FBHVzZXIFEmtTRlVzZXJUb3RhbFN1cHBseQAABBF1c2VyVG9rZW5JbnRlcmVzdAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIFBHVzZXIFD2tVc2VyTHBJbnRlcmVzdAMJAAACBQp1c2VyU3VwcGx5AAAFDXRva2VuSW50ZXJlc3QAAAQGcmV3YXJkCQBrAwUKdXNlclN1cHBseQkAZQIFDXRva2VuSW50ZXJlc3QFEXVzZXJUb2tlbkludGVyZXN0BQZTQ0FMRTgJAJUKAwUGcmV3YXJkBQ10b2tlbkludGVyZXN0BQp1c2VyU3VwcGx5ARhjbGFpbUxlbmRlclJld2FyZHNDb21tb24CBHVzZXIIcmVhZE9ubHkKAQVjbGFpbQIBYQd0b2tlbklkBAskdDA4ODM4ODg4MgUBYQQIdG9rZW5JZHMIBQskdDA4ODM4ODg4MgJfMQQHY0Ftb3VudAgFCyR0MDg4Mzg4ODgyAl8yBAV0b3RhbAgFCyR0MDg4Mzg4ODgyAl8zBAhlbnRlcmllcwgFCyR0MDg4Mzg4ODgyAl80BBJ1c2VyQXZhaWxhYmxlQ2xhaW0JAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICCQCsAgIJAKwCAgUHdG9rZW5JZAIBXwUEdXNlcgUXa1VzZXJMZW5kQXZhaWxhYmxlQ2xhaW0AAAQLJHQwODk5NTkwNzQJARJjYWxjTGVuZFVzZXJSZXdhcmQCBQR1c2VyBQd0b2tlbklkBAd1UmV3YXJkCAULJHQwODk5NTkwNzQCXzEEEG5ld1Rva2VuSW50ZXJlc3QIBQskdDA4OTk1OTA3NAJfMgQKdXNlclN1cHBseQgFCyR0MDg5OTU5MDc0Al8zBAx0b3RhbFRvQ2xhaW0JAGQCBRJ1c2VyQXZhaWxhYmxlQ2xhaW0FB3VSZXdhcmQDAwkAZgIFDHRvdGFsVG9DbGFpbQAABgkAZgIFCnVzZXJTdXBwbHkAAAQMbmV3RW50cmVyaWVzAwMFCHJlYWRPbmx5BgkAAAIFDHRvdGFsVG9DbGFpbQAABQhlbnRlcmllcwkAzggCBQhlbnRlcmllcwkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgUHdG9rZW5JZAIBXwUEdXNlcgURa1VzZXJMZW5kSW50ZXJlc3QFEG5ld1Rva2VuSW50ZXJlc3QJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIFB3Rva2VuSWQCAV8FBHVzZXIFF2tVc2VyTGVuZEF2YWlsYWJsZUNsYWltAAAJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUHdG9rZW5JZAUOa1Rva2VuSW50ZXJlc3QFEG5ld1Rva2VuSW50ZXJlc3QJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUHdG9rZW5JZAUUa1Rva2VuSW50ZXJlc3RIZWlnaHQFBmhlaWdodAUDbmlsCQCWCgQJAM0IAgUIdG9rZW5JZHMFB3Rva2VuSWQJAM0IAgUHY0Ftb3VudAUMdG90YWxUb0NsYWltCQBkAgUFdG90YWwFDHRvdGFsVG9DbGFpbQUMbmV3RW50cmVyaWVzCQCWCgQFCHRva2VuSWRzBQdjQW1vdW50BQV0b3RhbAUIZW50ZXJpZXMKAAIkbAkBDGdldEFsbFRva2VucwAKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCWCgQFA25pbAUDbmlsAAAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEFY2xhaW0CBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDMwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkAGgAbABwAHQAeARRjbGFpbUxwUmV3YXJkc0NvbW1vbgIEdXNlcghyZWFkT25seQQSdXNlckF2YWlsYWJsZUNsYWltCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgUEdXNlcgUVa1VzZXJMcEF2YWlsYWJsZUNsYWltAAAEDSR0MDEwMDA2MTAwNzEJARBjYWxjTHBVc2VyUmV3YXJkAQUEdXNlcgQHdVJld2FyZAgFDSR0MDEwMDA2MTAwNzECXzEEDW5ld0xwSW50ZXJlc3QIBQ0kdDAxMDAwNjEwMDcxAl8yBAp1c2VyU3VwcGx5CAUNJHQwMTAwMDYxMDA3MQJfMwQMdG90YWxUb0NsYWltCQBkAgUSdXNlckF2YWlsYWJsZUNsYWltBQd1UmV3YXJkAwMFCHJlYWRPbmx5BgkAAAIFDHRvdGFsVG9DbGFpbQAACQCUCgIFDHRvdGFsVG9DbGFpbQUDbmlsCQCUCgIFDHRvdGFsVG9DbGFpbQkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQR1c2VyBQ9rVXNlckxwSW50ZXJlc3QFDW5ld0xwSW50ZXJlc3QJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEdXNlcgUVa1VzZXJMcEF2YWlsYWJsZUNsYWltAAAJAMwIAgkBDEludGVnZXJFbnRyeQIFC2tMcEludGVyZXN0BQ1uZXdMcEludGVyZXN0CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRFrTHBJbnRlcmVzdEhlaWdodAUGaGVpZ2h0BQNuaWwBDWdldFRva2Vuc0FQUnMABAlheGx5UHJpY2UJAQ1nZXRBc3NldFByaWNlAQUGYXhseUlkBA1heGx5UHJlY2lzaW9uCQERZ2V0QXNzZXRQcmVjaXNpb24BBQZheGx5SWQKAQp0b2tlbnNBcHJzAgNhcHIHdG9rZW5JZAQEcndwYgkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIFB3Rva2VuSWQFFGtUb2tlblJld2FyZFBlckJsb2NrAAAEB3J3cGJVc2QJAGsDBQRyd3BiBQlheGx5UHJpY2UFDWF4bHlQcmVjaXNpb24EBnJ3WWVhcgkAaAIJAGgCBQdyd3BiVXNkBQxwZXJpb2RMZW5ndGgANAQOdG90YWxTdXBwbHlVc2QJARFnZXRUb3RhbFN1cHBseVVzZAEFB3Rva2VuSWQJAM0IAgUDYXByCQBrAwUGcndZZWFyBQZTQ0FMRTgFDnRvdGFsU3VwcGx5VXNkBARhcHJzCgACJGwJAQxnZXRBbGxUb2tlbnMACgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQp0b2tlbnNBcHJzAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAzMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAAZABoAGwAcAB0AHgQNbHBUb3RhbFN1cHBseQkBEUBleHRyTmF0aXZlKDEwNTApAgURc2ZGYXJtaW5nQ29udHJhY3QJAKwCAgUIYXhseVBvb2wFDmtTRlRvdGFsU3VwcGx5BARscElkCQERQGV4dHJOYXRpdmUoMTA1MykCCQERQGV4dHJOYXRpdmUoMTA2MikBBQhheGx5UG9vbAUFa0xwSWQEC2xwUHJlY2lzaW9uCQERZ2V0QXNzZXRQcmVjaXNpb24BBQRscElkBAdscFByaWNlCgABQAkAkQMCCgABQAkA/AcEBQxtYWluQ29udHJhY3QCGmdldFNoYXJlQXNzZXRQcmljZVJFQURPTkxZCQDMCAIJAMwIAgUEbHBJZAUDbmlsBQNuaWwFA25pbAMJAAECBQFAAglMaXN0W0FueV0FAUAJAAIBCQCsAgIJAAMBBQFAAh4gY291bGRuJ3QgYmUgY2FzdCB0byBMaXN0W0FueV0AAAMJAAECBQFAAgNJbnQFAUAJAAIBCQCsAgIJAAMBBQFAAhggY291bGRuJ3QgYmUgY2FzdCB0byBJbnQEEGxwVG90YWxTdXBwbHlVc2QJAGsDBQ1scFRvdGFsU3VwcGx5BQdscFByaWNlBQtscFByZWNpc2lvbgQEcndwYgkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBRFrTHBSZXdhcmRQZXJCbG9jawAABAdyd3BiVXNkCQBrAwUEcndwYgUJYXhseVByaWNlBQ1heGx5UHJlY2lzaW9uBAZyd1llYXIJAGgCCQBoAgUHcndwYlVzZAUMcGVyaW9kTGVuZ3RoADQEBWxwQXByCQBrAwUGcndZZWFyBQZTQ0FMRTgFEGxwVG90YWxTdXBwbHlVc2QJAJUKAwkBDGdldEFsbFRva2VucwAFBGFwcnMFBWxwQXByBwFpARJjbGFpbUxlbmRlclJld2FyZHMABAhjbGFpbVJlcwkBGGNsYWltTGVuZGVyUmV3YXJkc0NvbW1vbgIJAKUIAQgFAWkGY2FsbGVyBwMJAAACCAUIY2xhaW1SZXMCXzMAAAkAAgECI2NsYWltIGFtb3VudCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwBANpbnYJAPwHBAUNdG9rZW5Db250cmFjdAISd2l0aGRyYXdMZW5kUmV3YXJkCQDMCAIIBQhjbGFpbVJlcwJfMwkAzAgCCQClCAEIBQFpBmNhbGxlcgUDbmlsBQNuaWwDCQAAAgUDaW52BQNpbnYIBQhjbGFpbVJlcwJfNAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQ5jbGFpbUxwUmV3YXJkcwAECGNsYWltUmVzCQEUY2xhaW1McFJld2FyZHNDb21tb24CCQClCAEIBQFpBmNhbGxlcgcDCQAAAggFCGNsYWltUmVzAl8xAAAJAAIBAiNjbGFpbSBhbW91bnQgbXVzdCBiZSBncmVhdGVyIHRoYW4gMAQDaW52CQD8BwQFDXRva2VuQ29udHJhY3QCEHdpdGhkcmF3THBSZXdhcmQJAMwIAggFCGNsYWltUmVzAl8xCQDMCAIJAKUIAQgFAWkGY2FsbGVyBQNuaWwFA25pbAMJAAACBQNpbnYFA2ludggFCGNsYWltUmVzAl8yCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBCmxlbmRBY3Rpb24CBHVzZXIHdG9rZW5JZAkBC3ZhbHVlT3JFbHNlAgkBCmlzTGFuZENhbGwBBQFpBBJ1c2VyQXZhaWxhYmxlQ2xhaW0JAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICBQd0b2tlbklkBRdrVXNlckxlbmRBdmFpbGFibGVDbGFpbQAABA0kdDAxMjQ0MzEyNTEwCQESY2FsY0xlbmRVc2VyUmV3YXJkAgUEdXNlcgUHdG9rZW5JZAQHdVJld2FyZAgFDSR0MDEyNDQzMTI1MTACXzEEEG5ld1Rva2VuSW50ZXJlc3QIBQ0kdDAxMjQ0MzEyNTEwAl8yCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICBQR1c2VyAgFfBQd0b2tlbklkBRFrVXNlckxlbmRJbnRlcmVzdAUQbmV3VG9rZW5JbnRlcmVzdAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgUEdXNlcgIBXwUHdG9rZW5JZAUXa1VzZXJMZW5kQXZhaWxhYmxlQ2xhaW0JAGQCBRJ1c2VyQXZhaWxhYmxlQ2xhaW0FB3VSZXdhcmQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUHdG9rZW5JZAUOa1Rva2VuSW50ZXJlc3QFEG5ld1Rva2VuSW50ZXJlc3QJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUHdG9rZW5JZAUUa1Rva2VuSW50ZXJlc3RIZWlnaHQFBmhlaWdodAUDbmlsAWkBCGxwQWN0aW9uAQR1c2VyCQELdmFsdWVPckVsc2UCCQEPaXNTRkZhcm1pbmdDYWxsAQUBaQQSdXNlckF2YWlsYWJsZUNsYWltCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFFWtVc2VyTHBBdmFpbGFibGVDbGFpbQAABA0kdDAxMjk3NTEzMDI4CQEQY2FsY0xwVXNlclJld2FyZAEFBHVzZXIEB3VSZXdhcmQIBQ0kdDAxMjk3NTEzMDI4Al8xBA1uZXdMcEludGVyZXN0CAUNJHQwMTI5NzUxMzAyOAJfMgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQR1c2VyBQ9rVXNlckxwSW50ZXJlc3QFDW5ld0xwSW50ZXJlc3QJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEdXNlcgUVa1VzZXJMcEF2YWlsYWJsZUNsYWltCQBkAgUSdXNlckF2YWlsYWJsZUNsYWltBQd1UmV3YXJkCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHVzZXIFC2tMcEludGVyZXN0BQ1uZXdMcEludGVyZXN0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHVzZXIFEWtMcEludGVyZXN0SGVpZ2h0BQZoZWlnaHQFA25pbAFpAQRpbml0BRRheGx5TWFpbkNvbnRyYWN0QWRkchlheGx5VG9rZW5vbWljQ29udHJhY3RBZGRyDGF4bHlQb29sQWRkchJmYXJtaW5nU3RhcnRIZWlnaHQMcGVyaW9kTGVuZ3RoCQELdmFsdWVPckVsc2UCCQEKaXNTZWxmQ2FsbAEFAWkDCQEBIQEJAQlpc0RlZmluZWQBCQCmCAEFFGF4bHlNYWluQ29udHJhY3RBZGRyCQACAQIVV3JvbmcgZmFybWluZyBhZGRyZXNzAwkBASEBCQEJaXNEZWZpbmVkAQkApggBBRlheGx5VG9rZW5vbWljQ29udHJhY3RBZGRyCQACAQIbV3JvbmcgbWFpbiBjb250cmFjdCBhZGRyZXNzCQDMCAIJAQtTdHJpbmdFbnRyeQIFEWtBeGx5TWFpbkNvbnRyYWN0BRRheGx5TWFpbkNvbnRyYWN0QWRkcgkAzAgCCQELU3RyaW5nRW50cnkCBRZrQXhseVRva2Vub21pY0NvbnRyYWN0BRlheGx5VG9rZW5vbWljQ29udHJhY3RBZGRyCQDMCAIJAQtTdHJpbmdFbnRyeQIFCWtBeGx5UG9vbAUMYXhseVBvb2xBZGRyCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQxrU3RhcnRIZWlnaHQFEmZhcm1pbmdTdGFydEhlaWdodAkAzAgCCQEMSW50ZWdlckVudHJ5AgUNa1BlcmlvZExlbmd0aAUMcGVyaW9kTGVuZ3RoBQNuaWwBaQEMaW5pdE5ld1Rva2VuAQd0b2tlbklkCQELdmFsdWVPckVsc2UCCQELaXNBZG1pbkNhbGwBBQFpAwkBCWlzRGVmaW5lZAEJAJoIAgUEdGhpcwkArAICBQd0b2tlbklkBQ5rVG9rZW5JbnRlcmVzdAkAAgECFHRva2VuIGFscmVhZHkgaW5pdGVkAwkBASEBCQEIY29udGFpbnMCCQERQGV4dHJOYXRpdmUoMTA1MykCBQxsZW5kQ29udHJhY3QFEGtMZW5kU2V0dXBUb2tlbnMFB3Rva2VuSWQJAAIBAhNubyB0b2tlbiBvbiBsYW5kaW5nBAxuZXdBbGxUb2tlbnMJAM0IAgkBDGdldEFsbFRva2VucwAFB3Rva2VuSWQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUHdG9rZW5JZAUOa1Rva2VuSW50ZXJlc3QAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQd0b2tlbklkBRRrVG9rZW5JbnRlcmVzdEhlaWdodAkAlgMBCQDMCAIFC3N0YXJ0SGVpZ2h0CQDMCAIFBmhlaWdodAUDbmlsCQDMCAIJAQtTdHJpbmdFbnRyeQIFB2tUb2tlbnMJALkJAgUMbmV3QWxsVG9rZW5zAgEsCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFB3Rva2VuSWQFFGtUb2tlblJld2FyZFBlckJsb2NrAAAFA25pbAFpAQ11cGRhdGVSZXdhcmRzAAkBC3ZhbHVlT3JFbHNlAgkBDmlzT3BlcmF0b3JDYWxsAQUBaQQQbGFzdFVwZGF0ZUhlaWdodAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBRNrUmV3YXJkVXBkYXRlSGVpZ2h0AAADCQBmAgkAZAIFEGxhc3RVcGRhdGVIZWlnaHQFDHBlcmlvZExlbmd0aAUGaGVpZ2h0CQACAQIlcmV3YXJkcyBhbHJlZHkgdXBkYXRlZCBpbiB0aGlzIHBlcmlvZAQNJHQwMTQ3OTUxNDg3NQkBF2dldFRvdGFsU3VwcGx5QWxsVG9rZW5zAAQLdG90YWxTdXBwbHkIBQ0kdDAxNDc5NTE0ODc1Al8xBA50b3RhbFN1cHBseVVzZAgFDSR0MDE0Nzk1MTQ4NzUCXzIEEXRvdGFsU3VwcGx5VXNkQWxsCAUNJHQwMTQ3OTUxNDg3NQJfMwQJYXhseVByaWNlCQENZ2V0QXNzZXRQcmljZQEFBmF4bHlJZAQNYXhseVByZWNpc2lvbgkBEWdldEFzc2V0UHJlY2lzaW9uAQUGYXhseUlkBAZtYXhBUFIJARVnZXRBZG9wdGVkQVBSQnlQZXJpb2QDBQljdXJQZXJpb2QFE0xFTkRFUlNfQVBSX1BFUklPRFMFC0xFTkRFUlNfQVBSCgEMdXBkYXRlUmV3YXJkAgFhB3Rva2VuSWQEDSR0MDE1MTE5MTUxNDQFAWEECGVudGVyaWVzCAUNJHQwMTUxMTkxNTE0NAJfMQQFaW5kZXgIBQ0kdDAxNTExOTE1MTQ0Al8yAwkAAAIJAJEDAgULdG90YWxTdXBwbHkFBWluZGV4AAAJAJQKAgkAzggCBQhlbnRlcmllcwkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQd0b2tlbklkBRRrUHJldkxlbmRUb2tlblN1cHBseQkAkQMCBQt0b3RhbFN1cHBseQUFaW5kZXgJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUHdG9rZW5JZAUUa1Rva2VuUmV3YXJkUGVyQmxvY2sAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQd0b2tlbklkBQ5rVG9rZW5JbnRlcmVzdAkBFGNhbGNOZXdUb2tlbkludGVyZXN0AgUHdG9rZW5JZAkAkQMCBQt0b3RhbFN1cHBseQUFaW5kZXgJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUHdG9rZW5JZAUUa1Rva2VuSW50ZXJlc3RIZWlnaHQJAJYDAQkAzAgCBQtzdGFydEhlaWdodAkAzAgCBQZoZWlnaHQFA25pbAUDbmlsCQBkAgUFaW5kZXgAAQQFc2hhcmUJAGsDCQCRAwIFDnRvdGFsU3VwcGx5VXNkBQVpbmRleAUGU0NBTEU4BRF0b3RhbFN1cHBseVVzZEFsbAQJbWF4UmV3YXJkCQBrAwUFc2hhcmUFE2xlbmRNYXhQZXJpb2RBbW91bnQFBlNDQUxFOAQMbWF4UmV3YXJkVXNkCQBrAwUJbWF4UmV3YXJkBQlheGx5UHJpY2UFDWF4bHlQcmVjaXNpb24ED3ByZXZUb3RhbFN1cHBseQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBRRrUHJldkxlbmRUb2tlblN1cHBseQAABAZydENvZWYDAwkAAAIFD3ByZXZUb3RhbFN1cHBseQAABgkAAAIJAJEDAgULdG90YWxTdXBwbHkFBWluZGV4AAAAAAkAawMFD3ByZXZUb3RhbFN1cHBseQUGU0NBTEU4CQCRAwIFC3RvdGFsU3VwcGx5BQVpbmRleAQGcmV3YXJkCQBpAgkAlwMBCQDMCAIJAGgCBQZtYXhBUFIJAGQCBQZTQ0FMRTgFBnJ0Q29lZgkAzAgCCQBrAwUGbWF4QVBSCQBoAgAPBQZTQ0FMRTgACgUDbmlsBQZTQ0FMRTgECXJld2FyZFVzZAkAlwMBCQDMCAIFDG1heFJld2FyZFVzZAkAzAgCCQBrAwkAkQMCBQ50b3RhbFN1cHBseVVzZAUFaW5kZXgFBnJld2FyZAUGU0NBTEU4BQNuaWwEDHJld2FyZFBlcmlvZAkAawMFCXJld2FyZFVzZAUJYXhseVByaWNlBQ1heGx5UHJlY2lzaW9uBA5yZXdhcmRQZXJCbG9jawkAaQIFDHJld2FyZFBlcmlvZAUMcGVyaW9kTGVuZ3RoCQCUCgIJAM4IAgUIZW50ZXJpZXMJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUHdG9rZW5JZAUUa1ByZXZMZW5kVG9rZW5TdXBwbHkJAJEDAgULdG90YWxTdXBwbHkFBWluZGV4CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFB3Rva2VuSWQFFGtUb2tlblJld2FyZFBlckJsb2NrBQ5yZXdhcmRQZXJCbG9jawkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQd0b2tlbklkBQ5rVG9rZW5JbnRlcmVzdAkBFGNhbGNOZXdUb2tlbkludGVyZXN0AgUHdG9rZW5JZAkAkQMCBQt0b3RhbFN1cHBseQUFaW5kZXgJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUHdG9rZW5JZAUUa1Rva2VuSW50ZXJlc3RIZWlnaHQJAJYDAQkAzAgCBQtzdGFydEhlaWdodAkAzAgCBQZoZWlnaHQFA25pbAUDbmlsCQBkAgUFaW5kZXgAAQQNJHQwMTY3MzExNjgwOAoAAiRsCQEMZ2V0QWxsVG9rZW5zAAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgUDbmlsAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBDHVwZGF0ZVJld2FyZAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMzAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUABUAFgAXABgAGQAaABsAHAAdAB4EDnRva2Vuc0VudGVyaWVzCAUNJHQwMTY3MzExNjgwOAJfMQQFaW5kZXgIBQ0kdDAxNjczMTE2ODA4Al8yBAhscE1heEFQUgkBFWdldEFkb3B0ZWRBUFJCeVBlcmlvZAMFCWN1clBlcmlvZAUOTFBfQVBSX1BFUklPRFMFBkxQX0FQUgQNbHBUb3RhbFN1cHBseQkBEUBleHRyTmF0aXZlKDEwNTApAgURc2ZGYXJtaW5nQ29udHJhY3QJAKwCAgUIYXhseVBvb2wFDmtTRlRvdGFsU3VwcGx5BAtwcmVMUFN1cHBseQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQ1rUHJldkxQU3VwcGx5AAAEBGxwSWQJARFAZXh0ck5hdGl2ZSgxMDUzKQIJARFAZXh0ck5hdGl2ZSgxMDYyKQEFCGF4bHlQb29sBQVrTHBJZAQLbHBQcmVjaXNpb24JARFnZXRBc3NldFByZWNpc2lvbgEFBGxwSWQEB2xwUHJpY2UKAAFACQCRAwIKAAFACQD8BwQFDG1haW5Db250cmFjdAIaZ2V0U2hhcmVBc3NldFByaWNlUkVBRE9OTFkJAMwIAgkAzAgCBQRscElkBQNuaWwFA25pbAUDbmlsAwkAAQIFAUACCUxpc3RbQW55XQUBQAkAAgEJAKwCAgkAAwEFAUACHiBjb3VsZG4ndCBiZSBjYXN0IHRvIExpc3RbQW55XQAAAwkAAQIFAUACA0ludAUBQAkAAgEJAKwCAgkAAwEFAUACGCBjb3VsZG4ndCBiZSBjYXN0IHRvIEludAQQbHBUb3RhbFN1cHBseVVzZAkAawMFDWxwVG90YWxTdXBwbHkFB2xwUHJpY2UFC2xwUHJlY2lzaW9uBA5tYXhMUFJld2FyZFVzZAkAawMFEWxwTWF4UGVyaW9kQW1vdW50BQlheGx5UHJpY2UFDWF4bHlQcmVjaXNpb24ECHJ0TFBDb2VmAwMJAAACBQtwcmVMUFN1cHBseQAABgkAAAIFDWxwVG90YWxTdXBwbHkAAAAACQBrAwULcHJlTFBTdXBwbHkFBlNDQUxFOAUNbHBUb3RhbFN1cHBseQQIcmV3YXJkTHAJAGkCCQCXAwEJAMwIAgkAaAIFCGxwTWF4QVBSCQBkAgUGU0NBTEU4BQhydExQQ29lZgkAzAgCCQBrAwUIbHBNYXhBUFIJAGgCAA8FBlNDQUxFOAAKBQNuaWwFBlNDQUxFOAQLcmV3YXJkTHBVc2QJAJcDAQkAzAgCBQ5tYXhMUFJld2FyZFVzZAkAzAgCCQBrAwUQbHBUb3RhbFN1cHBseVVzZAUIcmV3YXJkTHAFBlNDQUxFOAUDbmlsBA5yZXdhcmRMcFBlcmlvZAkAawMFC3Jld2FyZExwVXNkBQlheGx5UHJpY2UFDWF4bHlQcmVjaXNpb24EEHJld2FyZExwUGVyQmxvY2sJAGkCBQ5yZXdhcmRMcFBlcmlvZAUMcGVyaW9kTGVuZ3RoBApscEVudGVyaWVzCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ1rUHJldkxQU3VwcGx5BQ1scFRvdGFsU3VwcGx5CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRFrTHBSZXdhcmRQZXJCbG9jawUQcmV3YXJkTHBQZXJCbG9jawkAzAgCCQEMSW50ZWdlckVudHJ5AgULa0xwSW50ZXJlc3QJARFjYWxjTmV3THBJbnRlcmVzdAEFDWxwVG90YWxTdXBwbHkJAMwIAgkBDEludGVnZXJFbnRyeQIFEWtMcEludGVyZXN0SGVpZ2h0CQCWAwEJAMwIAgULc3RhcnRIZWlnaHQJAMwIAgUGaGVpZ2h0BQNuaWwFA25pbAkAzQgCCQDOCAIFCmxwRW50ZXJpZXMFDnRva2Vuc0VudGVyaWVzCQEMSW50ZWdlckVudHJ5AgUTa1Jld2FyZFVwZGF0ZUhlaWdodAkAlgMBCQDMCAIFC3N0YXJ0SGVpZ2h0CQDMCAIFBmhlaWdodAUDbmlsAQJ0eAEGdmVyaWZ5AAQTbXVsdGlTaWduZWRCeUFkbWlucwQSYWRtaW5QdWJLZXkxU2lnbmVkAwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAUIYWRtaW4xUEsAAQAABBJhZG1pblB1YktleTJTaWduZWQDCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwABBQhhZG1pbjJQSwABAAAEEmFkbWluUHViS2V5M1NpZ25lZAMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAIFCGFkbWluM1BLAAEAAAkAZwIJAGQCCQBkAgUSYWRtaW5QdWJLZXkxU2lnbmVkBRJhZG1pblB1YktleTJTaWduZWQFEmFkbWluUHViS2V5M1NpZ25lZAACBAckbWF0Y2gwBQJ0eAMJAAECBQckbWF0Y2gwAhdJbnZva2VTY3JpcHRUcmFuc2FjdGlvbgQDaW52BQckbWF0Y2gwBAZpc1NlbGYJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAIBQJ0eA9zZW5kZXJQdWJsaWNLZXkECmlzUmlnaHRGZWUDCQAAAggFA2ludgNmZWUAoPc2CQAAAggFA2ludgpmZWVBc3NldElkBQR1bml0BwQKaXNJbml0Q2FsbAkAAAIIBQNpbnYIZnVuY3Rpb24CBGluaXQEDGlzbm9QYXltZW50cwkAAAIJAJADAQgFA2ludghwYXltZW50cwAAAwMDAwUKaXNSaWdodEZlZQUKaXNJbml0Q2FsbAcFBmlzU2VsZgcFDGlzbm9QYXltZW50cwcGBRNtdWx0aVNpZ25lZEJ5QWRtaW5zBRNtdWx0aVNpZ25lZEJ5QWRtaW5zFsbXUQ==", "height": 2714549, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: FrqMnAPBVFDTHsepjajhd6DFybASWHwBRjCX3jbTDnpL Next: 4AVszmih4JRDsCjb5e6wKEapVJQ6ujWZHyK4jh7gvGVf Diff:
OldNewDifferences
125125
126126 let aj = (ai / g)
127127
128-let ak = split(valueOrElse(getString(this, l), ""), ",")
129-
130-func al (am) = if (containsElement([Y, Z, aa], am.callerPublicKey))
128+func ak (al) = if (containsElement([Y, Z, aa], al.callerPublicKey))
131129 then unit
132130 else throw("Only admin group1 can call this function")
133131
134132
135-func an (am) = if ((am.caller == this))
133+func am (al) = if ((al.caller == this))
136134 then unit
137135 else throw("Only contract itself can call this function")
138136
139137
140-func ao (am) = if ((am.callerPublicKey == ab))
138+func an (al) = if ((al.callerPublicKey == ab))
141139 then unit
142140 else throw("Only operator can call this function")
143141
144142
145-func ap (am) = if ((am.caller == V))
143+func ao (al) = if ((al.caller == V))
146144 then unit
147145 else throw("Only land contract can call this function")
148146
149147
150-func aq (am) = if ((am.caller == W))
148+func ap (al) = if ((al.caller == W))
151149 then unit
152150 else throw("Only land contract can call this function")
153151
154152
155-func ar (as) = getIntegerValue(X, (as + z))
153+func aq () = {
154+ let ar = valueOrElse(getString(this, l), "")
155+ if ((ar == ""))
156+ then nil
157+ else split(ar, ",")
158+ }
156159
157160
158-func at (as) = if ((as == "WAVES"))
161+func as (at) = getIntegerValue(X, (at + z))
162+
163+
164+func au (at) = if ((at == "WAVES"))
159165 then 8
160166 else {
161- let au = assetInfo(fromBase58String(as))
162- if ($isInstanceOf(au, "Asset"))
167+ let av = assetInfo(fromBase58String(at))
168+ if ($isInstanceOf(av, "Asset"))
163169 then {
164- let av = au
165- av.decimals
170+ let aw = av
171+ aw.decimals
166172 }
167173 else throw("Can't find asset")
168174 }
169175
170176
171-func aw (as) = pow(10, 0, at(as), 0, 0, DOWN)
177+func ax (at) = pow(10, 0, au(at), 0, 0, DOWN)
172178
173179
174-func ax (ay,az,aA) = {
175- func aB (aC,aD) = {
176- let aE = aC
177- let aF = aE._1
178- let aG = aE._2
179- let aH = split(aD, "-")
180- let aI = $Tuple2(parseIntValue(aH[0]), parseIntValue(aH[1]))
181- let aJ = aI._1
182- let aK = aI._2
183- if (aG)
184- then aC
185- else if (if ((ay >= aJ))
186- then (aK >= ay)
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)
187193 else false)
188- then $Tuple2(aF, true)
189- else $Tuple2((aF + 1), false)
194+ then $Tuple2(aG, true)
195+ else $Tuple2((aG + 1), false)
190196 }
191197
192- let aL = {
193- let aM = c
194- let aN = size(aM)
195- let aO = $Tuple2(0, false)
196- func aP (aQ,aR) = if ((aR >= aN))
197- then aQ
198- else aB(aQ, aM[aR])
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])
199205
200- func aS (aQ,aR) = if ((aR >= aN))
201- then aQ
206+ func aT (aR,aS) = if ((aS >= aO))
207+ then aR
202208 else throw("List size exceeds 9")
203209
204- aS(aP(aP(aP(aP(aP(aP(aP(aP(aP(aO, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9)
210+ aT(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aP, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9)
205211 }
206- let aF = aL._1
207- let aG = aL._2
208- if (aG)
209- then fraction((b[aF] * a), 7, 365)
212+ let aG = aM._1
213+ let aH = aM._2
214+ if (aH)
215+ then fraction((b[aG] * a), 7, 365)
210216 else 0
211217 }
212218
213219
214-func aT () = {
215- func aB (aC,aU) = {
216- let aV = aC
217- let aW = aV._1
218- let aX = aV._2
219- let aY = aV._3
220- let aZ = valueOrElse(getInteger(V, (C + aU)), 0)
221- let ba = ar(aU)
222- let bb = aw(aU)
223- let bc = fraction(aZ, ba, bb)
224- $Tuple3((aW :+ aZ), (aX :+ bc), (aY + bc))
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))
225231 }
226232
227- let aM = ak
228- let aN = size(aM)
229- let aO = $Tuple3(nil, nil, 0)
230- func aP (aQ,aR) = if ((aR >= aN))
231- then aQ
232- else aB(aQ, aM[aR])
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])
233239
234- func aS (aQ,aR) = if ((aR >= aN))
235- then aQ
240+ func aT (aR,aS) = if ((aS >= aO))
241+ then aR
236242 else throw("List size exceeds 30")
237243
238- 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)
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)
239245 }
240246
241247
242-func bd (aU) = {
243- let aZ = valueOrElse(getInteger(V, (C + aU)), 0)
244- let ba = ar(aU)
245- let bb = aw(aU)
246- fraction(aZ, ba, bb)
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)
247253 }
248254
249255
250-func be (aU,aW) = if ((height >= ad))
256+func bf (aV,aX) = if ((height >= ad))
251257 then 0
252258 else {
253- let bf = getIntegerValue(this, (aU + p))
254- let bg = getIntegerValue(this, (aU + n))
255- let bh = getIntegerValue(this, (aU + o))
256- let bi = ((height - bh) * bf)
257- let bj = if ((aW > 0))
258- then fraction(bi, a, aW)
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)
259265 else 0
260- (bg + bj)
266+ (bh + bk)
261267 }
262268
263269
264-func bk (aW) = if ((height >= ad))
270+func bl (aX) = if ((height >= ad))
265271 then 0
266272 else {
267- let bf = getIntegerValue(this, x)
268- let bg = getIntegerValue(this, u)
269- let bh = getIntegerValue(this, v)
270- let bi = ((height - bh) * bf)
271- let bj = if ((aW > 0))
272- then fraction(bi, a, aW)
273+ let bg = getIntegerValue(this, x)
274+ let bh = getIntegerValue(this, u)
275+ let bi = getIntegerValue(this, v)
276+ let bj = ((height - bi) * bg)
277+ let bk = if ((aX > 0))
278+ then fraction(bj, a, aX)
273279 else 0
274- (bg + bj)
280+ (bh + bk)
275281 }
276282
277283
278-func bl (bm,aU) = {
279- let aW = valueOrElse(getInteger(V, (C + aU)), 0)
280- let bn = be(aU, aW)
281- let bo = valueOrElse(getInteger(V, ((bm + D) + aU)), 0)
282- let bp = valueOrElse(getInteger(this, (((aU + "_") + bm) + r)), if ((bo == 0))
283- then bn
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
284290 else 0)
285- let bi = fraction(bo, (bn - bp), a)
286- $Tuple3(bi, bn, bo)
291+ let bj = fraction(bp, (bo - bq), a)
292+ $Tuple3(bj, bo, bp)
287293 }
288294
289295
290-func bq (bm) = {
291- let aW = valueOrElse(getInteger(W, (S + F)), 0)
292- let bn = bk(aW)
293- let bo = valueOrElse(getInteger(V, (((S + "_") + bm) + G)), 0)
294- let bp = valueOrElse(getInteger(this, (bm + y)), if ((bo == 0))
295- then bn
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
296302 else 0)
297- let bi = fraction(bo, (bn - bp), a)
298- $Tuple3(bi, bn, bo)
303+ let bj = fraction(bp, (bo - bq), a)
304+ $Tuple3(bj, bo, bp)
299305 }
300306
301307
302-func br (bm,bs) = {
303- func bt (aC,aU) = {
304- let bu = aC
305- let bv = bu._1
306- let bw = bu._2
307- let bx = bu._3
308- let by = bu._4
309- let bz = valueOrElse(getInteger(this, (((aU + "_") + bm) + s)), 0)
310- let bA = bl(bm, aU)
311- let bB = bA._1
312- let bC = bA._2
313- let bo = bA._3
314- let bD = (bz + bB)
315- if (if ((bD > 0))
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))
316322 then true
317- else (bo > 0))
323+ else (bp > 0))
318324 then {
319- let bE = if (if (bs)
325+ let bF = if (if (bt)
320326 then true
321- else (bD == 0))
322- then by
323- else (by ++ [IntegerEntry((((aU + "_") + bm) + r), bC), IntegerEntry((((aU + "_") + bm) + s), 0), IntegerEntry((aU + n), bC), IntegerEntry((aU + o), height)])
324- $Tuple4((bv :+ aU), (bw :+ bD), (bx + bD), bE)
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)
325331 }
326- else $Tuple4(bv, bw, bx, by)
332+ else $Tuple4(bw, bx, by, bz)
327333 }
328334
329- let aM = ak
330- let aN = size(aM)
331- let aO = $Tuple4(nil, nil, 0, nil)
332- func aP (aQ,aR) = if ((aR >= aN))
333- then aQ
334- else bt(aQ, aM[aR])
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])
335341
336- func aS (aQ,aR) = if ((aR >= aN))
337- then aQ
342+ func aT (aR,aS) = if ((aS >= aO))
343+ then aR
338344 else throw("List size exceeds 30")
339345
340- 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)
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)
341347 }
342348
343349
344-func bF (bm,bs) = {
345- let bz = valueOrElse(getInteger(this, (bm + t)), 0)
346- let bG = bq(bm)
347- let bB = bG._1
348- let bH = bG._2
349- let bo = bG._3
350- let bD = (bz + bB)
351- if (if (bs)
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)
352358 then true
353- else (bD == 0))
354- then $Tuple2(bD, nil)
355- else $Tuple2(bD, [IntegerEntry((bm + y), bH), IntegerEntry((bm + t), 0), IntegerEntry(u, bH), IntegerEntry(v, height)])
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)])
356362 }
357363
358364
359-func bI () = {
360- let bJ = ar(ac)
361- let bK = aw(ac)
362- func bL (aA,aU) = {
363- let bM = valueOrElse(getInteger(this, (aU + p)), 0)
364- let bN = fraction(bM, bJ, bK)
365- let bO = ((bN * ae) * 52)
366- let aX = bd(aU)
367- (aA :+ fraction(bO, a, aX))
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))
368374 }
369375
370- let bP = {
371- let aM = ak
372- let aN = size(aM)
373- let aO = nil
374- func aP (aQ,aR) = if ((aR >= aN))
375- then aQ
376- else bL(aQ, aM[aR])
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])
377383
378- func aS (aQ,aR) = if ((aR >= aN))
379- then aQ
384+ func aT (aR,aS) = if ((aS >= aO))
385+ then aR
380386 else throw("List size exceeds 30")
381387
382- 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)
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)
383389 }
384- let bQ = getIntegerValue(W, (S + F))
385- let bR = getStringValue(addressFromStringValue(S), I)
386- let bS = aw(bR)
387- let bT = {
388- let bU = ({
389- let bU = invoke(T, "getShareAssetPriceREADONLY", [[bR]], nil)
390- if ($isInstanceOf(bU, "List[Any]"))
391- then bU
392- else throw(($getType(bU) + " couldn't be cast to List[Any]"))
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]"))
393399 })[0]
394- if ($isInstanceOf(bU, "Int"))
395- then bU
396- else throw(($getType(bU) + " couldn't be cast to Int"))
400+ if ($isInstanceOf(bV, "Int"))
401+ then bV
402+ else throw(($getType(bV) + " couldn't be cast to Int"))
397403 }
398- let bV = fraction(bQ, bT, bS)
399- let bM = valueOrElse(getInteger(this, x), 0)
400- let bN = fraction(bM, bJ, bK)
401- let bO = ((bN * ae) * 52)
402- let bW = fraction(bO, a, bV)
403- $Tuple3(ak, bP, bW)
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)
404410 }
405411
406412
407-@Callable(am)
413+@Callable(al)
408414 func claimLenderRewards () = {
409- let bX = br(toString(am.caller), false)
410- if ((bX._3 == 0))
415+ let bY = bs(toString(al.caller), false)
416+ if ((bY._3 == 0))
411417 then throw("claim amount must be greater than 0")
412418 else {
413- let bY = invoke(U, "withdrawLendReward", [bX._3, toString(am.caller)], nil)
414- if ((bY == bY))
415- then bX._4
419+ let bZ = invoke(U, "withdrawLendReward", [bY._3, toString(al.caller)], nil)
420+ if ((bZ == bZ))
421+ then bY._4
416422 else throw("Strict value is not equal to itself.")
417423 }
418424 }
419425
420426
421427
422-@Callable(am)
428+@Callable(al)
423429 func claimLpRewards () = {
424- let bX = bF(toString(am.caller), false)
425- if ((bX._1 == 0))
430+ let bY = bG(toString(al.caller), false)
431+ if ((bY._1 == 0))
426432 then throw("claim amount must be greater than 0")
427433 else {
428- let bY = invoke(U, "withdrawLpReward", [bX._1, toString(am.caller)], nil)
429- if ((bY == bY))
430- then bX._2
434+ let bZ = invoke(U, "withdrawLpReward", [bY._1, toString(al.caller)], nil)
435+ if ((bZ == bZ))
436+ then bY._2
431437 else throw("Strict value is not equal to itself.")
432438 }
433439 }
434440
435441
436442
437-@Callable(am)
438-func lendAction (bm,aU) = valueOrElse(ap(am), {
439- let bz = valueOrElse(getInteger(this, (aU + s)), 0)
440- let bZ = bl(bm, aU)
441- let bB = bZ._1
442- let bC = bZ._2
443-[IntegerEntry((((bm + "_") + aU) + r), bC), IntegerEntry((((bm + "_") + aU) + s), (bz + bB)), IntegerEntry((aU + n), bC), IntegerEntry((aU + o), height)]
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((((bn + "_") + aV) + r), bD), IntegerEntry((((bn + "_") + aV) + s), (bA + bC)), IntegerEntry((aV + n), bD), IntegerEntry((aV + o), height)]
444450 })
445451
446452
447453
448-@Callable(am)
449-func lpAction (bm) = valueOrElse(aq(am), {
450- let bz = valueOrElse(getInteger(this, t), 0)
451- let ca = bq(bm)
452- let bB = ca._1
453- let bH = ca._2
454-[IntegerEntry((bm + y), bH), IntegerEntry((bm + t), (bz + bB)), IntegerEntry((bm + u), bH), IntegerEntry((bm + v), height)]
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)]
455461 })
456462
457463
458464
459-@Callable(am)
460-func init (cb,cc,cd,ce,ae) = valueOrElse(an(am), if (!(isDefined(addressFromString(cb))))
465+@Callable(al)
466+func init (cc,cd,ce,cf,ae) = valueOrElse(am(al), if (!(isDefined(addressFromString(cc))))
461467 then throw("Wrong farming address")
462- else if (!(isDefined(addressFromString(cc))))
468+ else if (!(isDefined(addressFromString(cd))))
463469 then throw("Wrong main contract address")
464- else [StringEntry(K, cb), StringEntry(L, cc), StringEntry(H, cd), IntegerEntry(h, ce), IntegerEntry(i, ae)])
470+ else [StringEntry(K, cc), StringEntry(L, cd), StringEntry(H, ce), IntegerEntry(h, cf), IntegerEntry(i, ae)])
465471
466472
467473
468-@Callable(am)
469-func initNewToken (aU) = valueOrElse(al(am), if (isDefined(getInteger(this, (aU + n))))
474+@Callable(al)
475+func initNewToken (aV) = valueOrElse(ak(al), if (isDefined(getInteger(this, (aV + n))))
470476 then throw("token already inited")
471- else if (!(contains(getStringValue(V, E), aU)))
477+ else if (!(contains(getStringValue(V, E), aV)))
472478 then throw("no token on landing")
473479 else {
474- let cf = if ((size(ak) == 0))
475- then [aU]
476- else (ak :+ aU)
477-[IntegerEntry((aU + n), 0), IntegerEntry((aU + o), max([ad, height])), StringEntry(l, makeString(cf, ",")), IntegerEntry((aU + p), 0)]
480+ let cg = (aq() :+ aV)
481+[IntegerEntry((aV + n), 0), IntegerEntry((aV + o), max([ad, height])), StringEntry(l, makeString(cg, ",")), IntegerEntry((aV + p), 0)]
478482 })
479483
480484
481485
482-@Callable(am)
483-func updateRewards () = valueOrElse(ao(am), {
484- let cg = valueOrElse(getInteger(this, q), 0)
485- if (((cg + ae) > height))
486+@Callable(al)
487+func updateRewards () = valueOrElse(an(al), {
488+ let ch = valueOrElse(getInteger(this, q), 0)
489+ if (((ch + ae) > height))
486490 then throw("rewards alredy updated in this period")
487491 else {
488- let ch = aT()
489- let aW = ch._1
490- let aX = ch._2
491- let aY = ch._3
492- let bJ = ar(ac)
493- let bK = aw(ac)
494- let ci = ax(af, c, b)
495- func cj (aC,aU) = {
496- let ck = aC
497- let by = ck._1
498- let aF = ck._2
499- if ((aW[aF] == 0))
500- then $Tuple2((by ++ [IntegerEntry((aU + p), 0), IntegerEntry((aU + n), be(aU, aW[aF])), IntegerEntry((aU + o), height)]), (aF + 1))
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))
501505 else {
502- let cl = fraction(aX[aF], a, aY)
503- let cm = fraction(cl, ah, a)
504- let cn = fraction(cm, bJ, bK)
505- let co = valueOrElse(getInteger(this, A), 0)
506- let cp = if (if ((co == 0))
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))
507511 then true
508- else (aW[aF] == 0))
512+ else (aX[aG] == 0))
509513 then 0
510- else fraction(co, a, aW[aF])
511- let bi = (min([(ci * (a + cp)), fraction(ci, (15 * a), 10)]) / a)
512- let cq = min([cn, fraction(aX[aF], bi, a)])
513- let cr = fraction(cq, bJ, bK)
514- let bf = (cr / ae)
515- $Tuple2((by ++ [IntegerEntry((aU + A), aW[aF]), IntegerEntry((aU + p), bf), IntegerEntry((aU + n), be(aU, aW[aF])), IntegerEntry((aU + o), height)]), (aF + 1))
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, bK, bL)
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))
516520 }
517521 }
518522
519- let cs = {
520- let aM = ak
521- let aN = size(aM)
522- let aO = $Tuple2(nil, 0)
523- func aP (aQ,aR) = if ((aR >= aN))
524- then aQ
525- else cj(aQ, aM[aR])
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])
526530
527- func aS (aQ,aR) = if ((aR >= aN))
528- then aQ
531+ func aT (aR,aS) = if ((aS >= aO))
532+ then aR
529533 else throw("List size exceeds 30")
530534
531- 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)
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)
532536 }
533- let ct = cs._1
534- let aF = cs._2
535- let cu = ax(af, f, e)
536- let bQ = getIntegerValue(W, (S + F))
537- let cv = valueOrElse(getInteger(this, w), 0)
538- let bR = getStringValue(addressFromStringValue(S), I)
539- let bS = aw(bR)
540- let bT = {
541- let bU = ({
542- let bU = invoke(T, "getShareAssetPriceREADONLY", [[bR]], nil)
543- if ($isInstanceOf(bU, "List[Any]"))
544- then bU
545- else throw(($getType(bU) + " couldn't be cast to List[Any]"))
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 = ({
546+ let bV = invoke(T, "getShareAssetPriceREADONLY", [[bS]], nil)
547+ if ($isInstanceOf(bV, "List[Any]"))
548+ then bV
549+ else throw(($getType(bV) + " couldn't be cast to List[Any]"))
546550 })[0]
547- if ($isInstanceOf(bU, "Int"))
548- then bU
549- else throw(($getType(bU) + " couldn't be cast to Int"))
551+ if ($isInstanceOf(bV, "Int"))
552+ then bV
553+ else throw(($getType(bV) + " couldn't be cast to Int"))
550554 }
551- let bV = fraction(bQ, bT, bS)
552- let cw = fraction(aj, bJ, bK)
553- let cx = if (if ((cv == 0))
555+ let bW = fraction(bR, bU, bT)
556+ let cx = fraction(aj, bK, bL)
557+ let cy = if (if ((cw == 0))
554558 then true
555- else (bQ == 0))
559+ else (bR == 0))
556560 then 0
557- else fraction(cv, a, bQ)
558- let cy = (min([(cu * (a + cx)), fraction(cu, (15 * a), 10)]) / a)
559- let cz = min([cw, fraction(bV, cy, a)])
560- let cA = fraction(cz, bJ, bK)
561- let cB = (cA / ae)
562- let cC = [IntegerEntry(w, bQ), IntegerEntry(x, cB), IntegerEntry(u, bk(bQ)), IntegerEntry(v, height)]
563- ((cC ++ ct) :+ IntegerEntry(q, height))
561+ else fraction(cw, a, bR)
562+ let cz = (min([(cv * (a + cy)), fraction(cv, (15 * a), 10)]) / a)
563+ let cA = min([cx, fraction(bW, cz, a)])
564+ let cB = fraction(cA, bK, bL)
565+ let cC = (cB / ae)
566+ let cD = [IntegerEntry(w, bR), IntegerEntry(x, cC), IntegerEntry(u, bl(bR)), IntegerEntry(v, max([ad, height]))]
567+ ((cD ++ cu) :+ IntegerEntry(q, max([ad, height])))
564568 }
565569 })
566570
567571
568-@Verifier(cD)
569-func cE () = {
570- let cF = {
571- let cG = if (sigVerify(cD.bodyBytes, cD.proofs[0], Y))
572+@Verifier(cE)
573+func cF () = {
574+ let cG = {
575+ let cH = if (sigVerify(cE.bodyBytes, cE.proofs[0], Y))
572576 then 1
573577 else 0
574- let cH = if (sigVerify(cD.bodyBytes, cD.proofs[1], Z))
578+ let cI = if (sigVerify(cE.bodyBytes, cE.proofs[1], Z))
575579 then 1
576580 else 0
577- let cI = if (sigVerify(cD.bodyBytes, cD.proofs[2], aa))
581+ let cJ = if (sigVerify(cE.bodyBytes, cE.proofs[2], aa))
578582 then 1
579583 else 0
580- (((cG + cH) + cI) >= 2)
584+ (((cH + cI) + cJ) >= 2)
581585 }
582- let au = cD
583- if ($isInstanceOf(au, "InvokeScriptTransaction"))
586+ let av = cE
587+ if ($isInstanceOf(av, "InvokeScriptTransaction"))
584588 then {
585- let bY = au
586- let cJ = sigVerify(cD.bodyBytes, cD.proofs[0], cD.senderPublicKey)
587- let cK = if ((bY.fee == 900000))
588- then (bY.feeAssetId == unit)
589+ let bZ = av
590+ let cK = sigVerify(cE.bodyBytes, cE.proofs[0], cE.senderPublicKey)
591+ let cL = if ((bZ.fee == 900000))
592+ then (bZ.feeAssetId == unit)
589593 else false
590- let cL = (bY.function == "init")
591- let cM = (size(bY.payments) == 0)
592- if (if (if (if (cK)
593- then cL
594- else false)
595- then cJ
596- else false)
594+ let cM = (bZ.function == "init")
595+ let cN = (size(bZ.payments) == 0)
596+ if (if (if (if (cL)
597597 then cM
598598 else false)
599+ then cK
600+ else false)
601+ then cN
602+ else false)
599603 then true
600- else cF
604+ else cG
601605 }
602- else cF
606+ else cG
603607 }
604608
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
88 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
3636 let q = "rewardUpdateHeight"
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
118118 let af = ((height - ad) / ae)
119119
120120 let ag = getIntegerValue(U, j)
121121
122122 let ah = (ag / d)
123123
124124 let ai = getIntegerValue(U, k)
125125
126126 let aj = (ai / g)
127127
128-let ak = split(valueOrElse(getString(this, l), ""), ",")
129-
130-func al (am) = if (containsElement([Y, Z, aa], am.callerPublicKey))
128+func ak (al) = if (containsElement([Y, Z, aa], al.callerPublicKey))
131129 then unit
132130 else throw("Only admin group1 can call this function")
133131
134132
135-func an (am) = if ((am.caller == this))
133+func am (al) = if ((al.caller == this))
136134 then unit
137135 else throw("Only contract itself can call this function")
138136
139137
140-func ao (am) = if ((am.callerPublicKey == ab))
138+func an (al) = if ((al.callerPublicKey == ab))
141139 then unit
142140 else throw("Only operator can call this function")
143141
144142
145-func ap (am) = if ((am.caller == V))
143+func ao (al) = if ((al.caller == V))
146144 then unit
147145 else throw("Only land contract can call this function")
148146
149147
150-func aq (am) = if ((am.caller == W))
148+func ap (al) = if ((al.caller == W))
151149 then unit
152150 else throw("Only land contract can call this function")
153151
154152
155-func ar (as) = getIntegerValue(X, (as + z))
153+func aq () = {
154+ let ar = valueOrElse(getString(this, l), "")
155+ if ((ar == ""))
156+ then nil
157+ else split(ar, ",")
158+ }
156159
157160
158-func at (as) = if ((as == "WAVES"))
161+func as (at) = getIntegerValue(X, (at + z))
162+
163+
164+func au (at) = if ((at == "WAVES"))
159165 then 8
160166 else {
161- let au = assetInfo(fromBase58String(as))
162- if ($isInstanceOf(au, "Asset"))
167+ let av = assetInfo(fromBase58String(at))
168+ if ($isInstanceOf(av, "Asset"))
163169 then {
164- let av = au
165- av.decimals
170+ let aw = av
171+ aw.decimals
166172 }
167173 else throw("Can't find asset")
168174 }
169175
170176
171-func aw (as) = pow(10, 0, at(as), 0, 0, DOWN)
177+func ax (at) = pow(10, 0, au(at), 0, 0, DOWN)
172178
173179
174-func ax (ay,az,aA) = {
175- func aB (aC,aD) = {
176- let aE = aC
177- let aF = aE._1
178- let aG = aE._2
179- let aH = split(aD, "-")
180- let aI = $Tuple2(parseIntValue(aH[0]), parseIntValue(aH[1]))
181- let aJ = aI._1
182- let aK = aI._2
183- if (aG)
184- then aC
185- else if (if ((ay >= aJ))
186- then (aK >= ay)
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)
187193 else false)
188- then $Tuple2(aF, true)
189- else $Tuple2((aF + 1), false)
194+ then $Tuple2(aG, true)
195+ else $Tuple2((aG + 1), false)
190196 }
191197
192- let aL = {
193- let aM = c
194- let aN = size(aM)
195- let aO = $Tuple2(0, false)
196- func aP (aQ,aR) = if ((aR >= aN))
197- then aQ
198- else aB(aQ, aM[aR])
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])
199205
200- func aS (aQ,aR) = if ((aR >= aN))
201- then aQ
206+ func aT (aR,aS) = if ((aS >= aO))
207+ then aR
202208 else throw("List size exceeds 9")
203209
204- aS(aP(aP(aP(aP(aP(aP(aP(aP(aP(aO, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9)
210+ aT(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aP, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9)
205211 }
206- let aF = aL._1
207- let aG = aL._2
208- if (aG)
209- then fraction((b[aF] * a), 7, 365)
212+ let aG = aM._1
213+ let aH = aM._2
214+ if (aH)
215+ then fraction((b[aG] * a), 7, 365)
210216 else 0
211217 }
212218
213219
214-func aT () = {
215- func aB (aC,aU) = {
216- let aV = aC
217- let aW = aV._1
218- let aX = aV._2
219- let aY = aV._3
220- let aZ = valueOrElse(getInteger(V, (C + aU)), 0)
221- let ba = ar(aU)
222- let bb = aw(aU)
223- let bc = fraction(aZ, ba, bb)
224- $Tuple3((aW :+ aZ), (aX :+ bc), (aY + bc))
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))
225231 }
226232
227- let aM = ak
228- let aN = size(aM)
229- let aO = $Tuple3(nil, nil, 0)
230- func aP (aQ,aR) = if ((aR >= aN))
231- then aQ
232- else aB(aQ, aM[aR])
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])
233239
234- func aS (aQ,aR) = if ((aR >= aN))
235- then aQ
240+ func aT (aR,aS) = if ((aS >= aO))
241+ then aR
236242 else throw("List size exceeds 30")
237243
238- 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)
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)
239245 }
240246
241247
242-func bd (aU) = {
243- let aZ = valueOrElse(getInteger(V, (C + aU)), 0)
244- let ba = ar(aU)
245- let bb = aw(aU)
246- fraction(aZ, ba, bb)
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)
247253 }
248254
249255
250-func be (aU,aW) = if ((height >= ad))
256+func bf (aV,aX) = if ((height >= ad))
251257 then 0
252258 else {
253- let bf = getIntegerValue(this, (aU + p))
254- let bg = getIntegerValue(this, (aU + n))
255- let bh = getIntegerValue(this, (aU + o))
256- let bi = ((height - bh) * bf)
257- let bj = if ((aW > 0))
258- then fraction(bi, a, aW)
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)
259265 else 0
260- (bg + bj)
266+ (bh + bk)
261267 }
262268
263269
264-func bk (aW) = if ((height >= ad))
270+func bl (aX) = if ((height >= ad))
265271 then 0
266272 else {
267- let bf = getIntegerValue(this, x)
268- let bg = getIntegerValue(this, u)
269- let bh = getIntegerValue(this, v)
270- let bi = ((height - bh) * bf)
271- let bj = if ((aW > 0))
272- then fraction(bi, a, aW)
273+ let bg = getIntegerValue(this, x)
274+ let bh = getIntegerValue(this, u)
275+ let bi = getIntegerValue(this, v)
276+ let bj = ((height - bi) * bg)
277+ let bk = if ((aX > 0))
278+ then fraction(bj, a, aX)
273279 else 0
274- (bg + bj)
280+ (bh + bk)
275281 }
276282
277283
278-func bl (bm,aU) = {
279- let aW = valueOrElse(getInteger(V, (C + aU)), 0)
280- let bn = be(aU, aW)
281- let bo = valueOrElse(getInteger(V, ((bm + D) + aU)), 0)
282- let bp = valueOrElse(getInteger(this, (((aU + "_") + bm) + r)), if ((bo == 0))
283- then bn
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
284290 else 0)
285- let bi = fraction(bo, (bn - bp), a)
286- $Tuple3(bi, bn, bo)
291+ let bj = fraction(bp, (bo - bq), a)
292+ $Tuple3(bj, bo, bp)
287293 }
288294
289295
290-func bq (bm) = {
291- let aW = valueOrElse(getInteger(W, (S + F)), 0)
292- let bn = bk(aW)
293- let bo = valueOrElse(getInteger(V, (((S + "_") + bm) + G)), 0)
294- let bp = valueOrElse(getInteger(this, (bm + y)), if ((bo == 0))
295- then bn
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
296302 else 0)
297- let bi = fraction(bo, (bn - bp), a)
298- $Tuple3(bi, bn, bo)
303+ let bj = fraction(bp, (bo - bq), a)
304+ $Tuple3(bj, bo, bp)
299305 }
300306
301307
302-func br (bm,bs) = {
303- func bt (aC,aU) = {
304- let bu = aC
305- let bv = bu._1
306- let bw = bu._2
307- let bx = bu._3
308- let by = bu._4
309- let bz = valueOrElse(getInteger(this, (((aU + "_") + bm) + s)), 0)
310- let bA = bl(bm, aU)
311- let bB = bA._1
312- let bC = bA._2
313- let bo = bA._3
314- let bD = (bz + bB)
315- if (if ((bD > 0))
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))
316322 then true
317- else (bo > 0))
323+ else (bp > 0))
318324 then {
319- let bE = if (if (bs)
325+ let bF = if (if (bt)
320326 then true
321- else (bD == 0))
322- then by
323- else (by ++ [IntegerEntry((((aU + "_") + bm) + r), bC), IntegerEntry((((aU + "_") + bm) + s), 0), IntegerEntry((aU + n), bC), IntegerEntry((aU + o), height)])
324- $Tuple4((bv :+ aU), (bw :+ bD), (bx + bD), bE)
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)
325331 }
326- else $Tuple4(bv, bw, bx, by)
332+ else $Tuple4(bw, bx, by, bz)
327333 }
328334
329- let aM = ak
330- let aN = size(aM)
331- let aO = $Tuple4(nil, nil, 0, nil)
332- func aP (aQ,aR) = if ((aR >= aN))
333- then aQ
334- else bt(aQ, aM[aR])
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])
335341
336- func aS (aQ,aR) = if ((aR >= aN))
337- then aQ
342+ func aT (aR,aS) = if ((aS >= aO))
343+ then aR
338344 else throw("List size exceeds 30")
339345
340- 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)
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)
341347 }
342348
343349
344-func bF (bm,bs) = {
345- let bz = valueOrElse(getInteger(this, (bm + t)), 0)
346- let bG = bq(bm)
347- let bB = bG._1
348- let bH = bG._2
349- let bo = bG._3
350- let bD = (bz + bB)
351- if (if (bs)
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)
352358 then true
353- else (bD == 0))
354- then $Tuple2(bD, nil)
355- else $Tuple2(bD, [IntegerEntry((bm + y), bH), IntegerEntry((bm + t), 0), IntegerEntry(u, bH), IntegerEntry(v, height)])
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)])
356362 }
357363
358364
359-func bI () = {
360- let bJ = ar(ac)
361- let bK = aw(ac)
362- func bL (aA,aU) = {
363- let bM = valueOrElse(getInteger(this, (aU + p)), 0)
364- let bN = fraction(bM, bJ, bK)
365- let bO = ((bN * ae) * 52)
366- let aX = bd(aU)
367- (aA :+ fraction(bO, a, aX))
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))
368374 }
369375
370- let bP = {
371- let aM = ak
372- let aN = size(aM)
373- let aO = nil
374- func aP (aQ,aR) = if ((aR >= aN))
375- then aQ
376- else bL(aQ, aM[aR])
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])
377383
378- func aS (aQ,aR) = if ((aR >= aN))
379- then aQ
384+ func aT (aR,aS) = if ((aS >= aO))
385+ then aR
380386 else throw("List size exceeds 30")
381387
382- 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)
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)
383389 }
384- let bQ = getIntegerValue(W, (S + F))
385- let bR = getStringValue(addressFromStringValue(S), I)
386- let bS = aw(bR)
387- let bT = {
388- let bU = ({
389- let bU = invoke(T, "getShareAssetPriceREADONLY", [[bR]], nil)
390- if ($isInstanceOf(bU, "List[Any]"))
391- then bU
392- else throw(($getType(bU) + " couldn't be cast to List[Any]"))
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]"))
393399 })[0]
394- if ($isInstanceOf(bU, "Int"))
395- then bU
396- else throw(($getType(bU) + " couldn't be cast to Int"))
400+ if ($isInstanceOf(bV, "Int"))
401+ then bV
402+ else throw(($getType(bV) + " couldn't be cast to Int"))
397403 }
398- let bV = fraction(bQ, bT, bS)
399- let bM = valueOrElse(getInteger(this, x), 0)
400- let bN = fraction(bM, bJ, bK)
401- let bO = ((bN * ae) * 52)
402- let bW = fraction(bO, a, bV)
403- $Tuple3(ak, bP, bW)
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)
404410 }
405411
406412
407-@Callable(am)
413+@Callable(al)
408414 func claimLenderRewards () = {
409- let bX = br(toString(am.caller), false)
410- if ((bX._3 == 0))
415+ let bY = bs(toString(al.caller), false)
416+ if ((bY._3 == 0))
411417 then throw("claim amount must be greater than 0")
412418 else {
413- let bY = invoke(U, "withdrawLendReward", [bX._3, toString(am.caller)], nil)
414- if ((bY == bY))
415- then bX._4
419+ let bZ = invoke(U, "withdrawLendReward", [bY._3, toString(al.caller)], nil)
420+ if ((bZ == bZ))
421+ then bY._4
416422 else throw("Strict value is not equal to itself.")
417423 }
418424 }
419425
420426
421427
422-@Callable(am)
428+@Callable(al)
423429 func claimLpRewards () = {
424- let bX = bF(toString(am.caller), false)
425- if ((bX._1 == 0))
430+ let bY = bG(toString(al.caller), false)
431+ if ((bY._1 == 0))
426432 then throw("claim amount must be greater than 0")
427433 else {
428- let bY = invoke(U, "withdrawLpReward", [bX._1, toString(am.caller)], nil)
429- if ((bY == bY))
430- then bX._2
434+ let bZ = invoke(U, "withdrawLpReward", [bY._1, toString(al.caller)], nil)
435+ if ((bZ == bZ))
436+ then bY._2
431437 else throw("Strict value is not equal to itself.")
432438 }
433439 }
434440
435441
436442
437-@Callable(am)
438-func lendAction (bm,aU) = valueOrElse(ap(am), {
439- let bz = valueOrElse(getInteger(this, (aU + s)), 0)
440- let bZ = bl(bm, aU)
441- let bB = bZ._1
442- let bC = bZ._2
443-[IntegerEntry((((bm + "_") + aU) + r), bC), IntegerEntry((((bm + "_") + aU) + s), (bz + bB)), IntegerEntry((aU + n), bC), IntegerEntry((aU + o), height)]
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((((bn + "_") + aV) + r), bD), IntegerEntry((((bn + "_") + aV) + s), (bA + bC)), IntegerEntry((aV + n), bD), IntegerEntry((aV + o), height)]
444450 })
445451
446452
447453
448-@Callable(am)
449-func lpAction (bm) = valueOrElse(aq(am), {
450- let bz = valueOrElse(getInteger(this, t), 0)
451- let ca = bq(bm)
452- let bB = ca._1
453- let bH = ca._2
454-[IntegerEntry((bm + y), bH), IntegerEntry((bm + t), (bz + bB)), IntegerEntry((bm + u), bH), IntegerEntry((bm + v), height)]
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)]
455461 })
456462
457463
458464
459-@Callable(am)
460-func init (cb,cc,cd,ce,ae) = valueOrElse(an(am), if (!(isDefined(addressFromString(cb))))
465+@Callable(al)
466+func init (cc,cd,ce,cf,ae) = valueOrElse(am(al), if (!(isDefined(addressFromString(cc))))
461467 then throw("Wrong farming address")
462- else if (!(isDefined(addressFromString(cc))))
468+ else if (!(isDefined(addressFromString(cd))))
463469 then throw("Wrong main contract address")
464- else [StringEntry(K, cb), StringEntry(L, cc), StringEntry(H, cd), IntegerEntry(h, ce), IntegerEntry(i, ae)])
470+ else [StringEntry(K, cc), StringEntry(L, cd), StringEntry(H, ce), IntegerEntry(h, cf), IntegerEntry(i, ae)])
465471
466472
467473
468-@Callable(am)
469-func initNewToken (aU) = valueOrElse(al(am), if (isDefined(getInteger(this, (aU + n))))
474+@Callable(al)
475+func initNewToken (aV) = valueOrElse(ak(al), if (isDefined(getInteger(this, (aV + n))))
470476 then throw("token already inited")
471- else if (!(contains(getStringValue(V, E), aU)))
477+ else if (!(contains(getStringValue(V, E), aV)))
472478 then throw("no token on landing")
473479 else {
474- let cf = if ((size(ak) == 0))
475- then [aU]
476- else (ak :+ aU)
477-[IntegerEntry((aU + n), 0), IntegerEntry((aU + o), max([ad, height])), StringEntry(l, makeString(cf, ",")), IntegerEntry((aU + p), 0)]
480+ let cg = (aq() :+ aV)
481+[IntegerEntry((aV + n), 0), IntegerEntry((aV + o), max([ad, height])), StringEntry(l, makeString(cg, ",")), IntegerEntry((aV + p), 0)]
478482 })
479483
480484
481485
482-@Callable(am)
483-func updateRewards () = valueOrElse(ao(am), {
484- let cg = valueOrElse(getInteger(this, q), 0)
485- if (((cg + ae) > height))
486+@Callable(al)
487+func updateRewards () = valueOrElse(an(al), {
488+ let ch = valueOrElse(getInteger(this, q), 0)
489+ if (((ch + ae) > height))
486490 then throw("rewards alredy updated in this period")
487491 else {
488- let ch = aT()
489- let aW = ch._1
490- let aX = ch._2
491- let aY = ch._3
492- let bJ = ar(ac)
493- let bK = aw(ac)
494- let ci = ax(af, c, b)
495- func cj (aC,aU) = {
496- let ck = aC
497- let by = ck._1
498- let aF = ck._2
499- if ((aW[aF] == 0))
500- then $Tuple2((by ++ [IntegerEntry((aU + p), 0), IntegerEntry((aU + n), be(aU, aW[aF])), IntegerEntry((aU + o), height)]), (aF + 1))
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))
501505 else {
502- let cl = fraction(aX[aF], a, aY)
503- let cm = fraction(cl, ah, a)
504- let cn = fraction(cm, bJ, bK)
505- let co = valueOrElse(getInteger(this, A), 0)
506- let cp = if (if ((co == 0))
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))
507511 then true
508- else (aW[aF] == 0))
512+ else (aX[aG] == 0))
509513 then 0
510- else fraction(co, a, aW[aF])
511- let bi = (min([(ci * (a + cp)), fraction(ci, (15 * a), 10)]) / a)
512- let cq = min([cn, fraction(aX[aF], bi, a)])
513- let cr = fraction(cq, bJ, bK)
514- let bf = (cr / ae)
515- $Tuple2((by ++ [IntegerEntry((aU + A), aW[aF]), IntegerEntry((aU + p), bf), IntegerEntry((aU + n), be(aU, aW[aF])), IntegerEntry((aU + o), height)]), (aF + 1))
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, bK, bL)
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))
516520 }
517521 }
518522
519- let cs = {
520- let aM = ak
521- let aN = size(aM)
522- let aO = $Tuple2(nil, 0)
523- func aP (aQ,aR) = if ((aR >= aN))
524- then aQ
525- else cj(aQ, aM[aR])
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])
526530
527- func aS (aQ,aR) = if ((aR >= aN))
528- then aQ
531+ func aT (aR,aS) = if ((aS >= aO))
532+ then aR
529533 else throw("List size exceeds 30")
530534
531- 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)
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)
532536 }
533- let ct = cs._1
534- let aF = cs._2
535- let cu = ax(af, f, e)
536- let bQ = getIntegerValue(W, (S + F))
537- let cv = valueOrElse(getInteger(this, w), 0)
538- let bR = getStringValue(addressFromStringValue(S), I)
539- let bS = aw(bR)
540- let bT = {
541- let bU = ({
542- let bU = invoke(T, "getShareAssetPriceREADONLY", [[bR]], nil)
543- if ($isInstanceOf(bU, "List[Any]"))
544- then bU
545- else throw(($getType(bU) + " couldn't be cast to List[Any]"))
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 = ({
546+ let bV = invoke(T, "getShareAssetPriceREADONLY", [[bS]], nil)
547+ if ($isInstanceOf(bV, "List[Any]"))
548+ then bV
549+ else throw(($getType(bV) + " couldn't be cast to List[Any]"))
546550 })[0]
547- if ($isInstanceOf(bU, "Int"))
548- then bU
549- else throw(($getType(bU) + " couldn't be cast to Int"))
551+ if ($isInstanceOf(bV, "Int"))
552+ then bV
553+ else throw(($getType(bV) + " couldn't be cast to Int"))
550554 }
551- let bV = fraction(bQ, bT, bS)
552- let cw = fraction(aj, bJ, bK)
553- let cx = if (if ((cv == 0))
555+ let bW = fraction(bR, bU, bT)
556+ let cx = fraction(aj, bK, bL)
557+ let cy = if (if ((cw == 0))
554558 then true
555- else (bQ == 0))
559+ else (bR == 0))
556560 then 0
557- else fraction(cv, a, bQ)
558- let cy = (min([(cu * (a + cx)), fraction(cu, (15 * a), 10)]) / a)
559- let cz = min([cw, fraction(bV, cy, a)])
560- let cA = fraction(cz, bJ, bK)
561- let cB = (cA / ae)
562- let cC = [IntegerEntry(w, bQ), IntegerEntry(x, cB), IntegerEntry(u, bk(bQ)), IntegerEntry(v, height)]
563- ((cC ++ ct) :+ IntegerEntry(q, height))
561+ else fraction(cw, a, bR)
562+ let cz = (min([(cv * (a + cy)), fraction(cv, (15 * a), 10)]) / a)
563+ let cA = min([cx, fraction(bW, cz, a)])
564+ let cB = fraction(cA, bK, bL)
565+ let cC = (cB / ae)
566+ let cD = [IntegerEntry(w, bR), IntegerEntry(x, cC), IntegerEntry(u, bl(bR)), IntegerEntry(v, max([ad, height]))]
567+ ((cD ++ cu) :+ IntegerEntry(q, max([ad, height])))
564568 }
565569 })
566570
567571
568-@Verifier(cD)
569-func cE () = {
570- let cF = {
571- let cG = if (sigVerify(cD.bodyBytes, cD.proofs[0], Y))
572+@Verifier(cE)
573+func cF () = {
574+ let cG = {
575+ let cH = if (sigVerify(cE.bodyBytes, cE.proofs[0], Y))
572576 then 1
573577 else 0
574- let cH = if (sigVerify(cD.bodyBytes, cD.proofs[1], Z))
578+ let cI = if (sigVerify(cE.bodyBytes, cE.proofs[1], Z))
575579 then 1
576580 else 0
577- let cI = if (sigVerify(cD.bodyBytes, cD.proofs[2], aa))
581+ let cJ = if (sigVerify(cE.bodyBytes, cE.proofs[2], aa))
578582 then 1
579583 else 0
580- (((cG + cH) + cI) >= 2)
584+ (((cH + cI) + cJ) >= 2)
581585 }
582- let au = cD
583- if ($isInstanceOf(au, "InvokeScriptTransaction"))
586+ let av = cE
587+ if ($isInstanceOf(av, "InvokeScriptTransaction"))
584588 then {
585- let bY = au
586- let cJ = sigVerify(cD.bodyBytes, cD.proofs[0], cD.senderPublicKey)
587- let cK = if ((bY.fee == 900000))
588- then (bY.feeAssetId == unit)
589+ let bZ = av
590+ let cK = sigVerify(cE.bodyBytes, cE.proofs[0], cE.senderPublicKey)
591+ let cL = if ((bZ.fee == 900000))
592+ then (bZ.feeAssetId == unit)
589593 else false
590- let cL = (bY.function == "init")
591- let cM = (size(bY.payments) == 0)
592- if (if (if (if (cK)
593- then cL
594- else false)
595- then cJ
596- else false)
594+ let cM = (bZ.function == "init")
595+ let cN = (size(bZ.payments) == 0)
596+ if (if (if (if (cL)
597597 then cM
598598 else false)
599+ then cK
600+ else false)
601+ then cN
602+ else false)
599603 then true
600- else cF
604+ else cG
601605 }
602- else cF
606+ else cG
603607 }
604608

github/deemru/w8io/169f3d6 
188.08 ms