tx · CZHRW83L3jrKgPjrDp9UJ1zCjV27zQSKPpuoHnoTfvMn

3N8E9LU71MDkdP8FWtbP4TBXCNhoc15hWfs:  -0.14000000 Waves

2022.10.19 16:58 [2279358] smart account 3N8E9LU71MDkdP8FWtbP4TBXCNhoc15hWfs > SELF 0.00000000 Waves

{ "type": 13, "id": "CZHRW83L3jrKgPjrDp9UJ1zCjV27zQSKPpuoHnoTfvMn", "fee": 14000000, "feeAssetId": null, "timestamp": 1666187990653, "version": 2, "chainId": 84, "sender": "3N8E9LU71MDkdP8FWtbP4TBXCNhoc15hWfs", "senderPublicKey": "2EDucEDvqYfn6hdx4PbvykQFRoNgPMWX6SiVPjM8AyxM", "proofs": [ "35BR14HSBfd1zGMq9z3UZrcBBQhZAbrWF1FqkVUEb7daDJ18SyBL2gZkqUtN1vocXr2qKrBuqBPCi5iwJDf5stqg", "228i2eGzgJ8KxDNPTSKZ89Z7oThjv2UkcDxXrhLUVmuL7ZgsknMPzSq9ajKpvZY6ppX9JZJGr1jqg4m9KKvXPF5x" ], "script": "base64:BgIiCAISAwoBCBIAEgASAwoBARIAEgASABIGCgQYEQEBEgASAFsAB2tBY3RpdmUCBmFjdGl2ZQALa0FjdGl2ZUdsb2ICFGFjdGl2ZV9hbGxfY29udHJhY3RzAAZrQ2F1c2UCDnNodXRkb3duX2NhdXNlAA1rTGFzdEludGVyZXN0Ag1sYXN0X2ludGVyZXN0ABFrVXNlckxhc3RJbnRlcmVzdAIOX2xhc3RfaW50ZXJlc3QAD2tVc2VyU1dPUExvY2tlZAIMX1NXT1BfYW1vdW50ABBrVG90YWxTV09QTG9ja2VkAhF0b3RhbF9TV09QX2Ftb3VudAAVa1VzZXJTd29wVW5sb2NrSGVpZ2h0AhNfU1dPUF91bmxvY2tfaGVpZ2h0ABBrVXNlckdTd29wTG9ja2VkAg1fR1N3b3BfYW1vdW50ABFrVG90YWxHU3dvcExvY2tlZAISdG90YWxfR1N3b3BfYW1vdW50ABJrVXNlclRvdGFsVm90ZVNXT1ACFl91c2VyX3RvdGFsX3ZvdGVfZ1NXT1AAFmtVc2VyQXZhaWxhYmxlRm9yQ2xhaW0CGV91c2VyX2F2YWlsYWJsZV9mb3JfY2xhaW0AGmtSZXdhcmRQb29sRnJhY3Rpb25DdXJyZW50Ah1fY3VycmVudF9wb29sX2ZyYWN0aW9uX3Jld2FyZAAba1Jld2FyZFBvb2xGcmFjdGlvblByZXZpb3VzAh5fcHJldmlvdXNfcG9vbF9mcmFjdGlvbl9yZXdhcmQAE2tIZWlnaHRQb29sRnJhY3Rpb24CGl9wb29sX3Jld2FyZF91cGRhdGVfaGVpZ2h0ABNrUmV3YXJkVXBkYXRlSGVpZ2h0AhRyZXdhcmRfdXBkYXRlX2hlaWdodAAia1Jld2FyZFVwZGF0ZUZpcnN0UGFnaW5hdGlvbkhlaWdodAIlcmV3YXJkX3VwZGF0ZV9oZWlnaHRfZmlyc3RfcGFnaW5hdGlvbgATa05vVm90aW5nRm9yTmV3UG9vbAIIX3ZvdGVfbm8AFGtZZXNWb3RpbmdGb3JOZXdQb29sAglfdm90ZV95ZXMAGWtTdGF0dXNPZlZvdGluZ0Zvck5ld1Bvb2wCB19zdGF0dXMAHWtIZWlnaHRPZlBvb2xWb3RpbmdGb3JOZXdQb29sAg5fZmluaXNoX2hlaWdodAAPYWN0aXZlVm90ZUZpcnN0AhR2b3RpbmdfYWN0aXZlX2NlbGxfMQAQYWN0aXZlVm90ZVNlY29uZAIUdm90aW5nX2FjdGl2ZV9jZWxsXzIAD2FjdGl2ZVZvdGVUaGlyZAIUdm90aW5nX2FjdGl2ZV9jZWxsXzMAC2tUZW1wQ3VyU3VtAhJzdW1fcmV3YXJkX2N1cnJlbnQAF2tMYXVuY2hwYWRCb3VnaHRUaWNrZXRzAg9fYm91Z2h0X3RpY2tldHMAGGtMYXVuY2hwYWRTd29wUGVyVGlja2V0cwIQX3N3b3BfcGVyX3RpY2tldAASa0xhdW5jaHBhZEFjdGl2ZUlkAhNsYXVuY2hwYWRfYWN0aXZlX2lkABJrTGF1bmNocGFkRHVyYXRpb24CCV9kdXJhdGlvbgAVa0xhdW5jaHBhZFN0YXJ0SGVpZ2h0Ag1fc3RhcnRfaGVpZ2h0AAxrU3RhcnRIZWlnaHQCDHN0YXJ0X2hlaWdodAALa0Jhc2VQZXJpb2QCC2Jhc2VfcGVyaW9kAA1rUGVyaW9kTGVuZ3RoAg1wZXJpb2RfbGVuZ3RoAA9rVXNlclRvdGFsU3RydWMCEV91c2VyX3RvdGFsX3N0cnVjABprTGF1Y2hwYWRGcmVlelN3b3BEdXJhdGlvbgIVX2ZyZWV6ZV9zd29wX2R1cmF0aW9uAAdrU1dPUGlkAgdTV09QX2lkAAtrQWlyZHJvcEZlZQILYWlyZHJvcF9mZWUADWtBZG1pblB1YktleTECC2FkbWluX3B1Yl8xAA1rQWRtaW5QdWJLZXkyAgthZG1pbl9wdWJfMgANa0FkbWluUHViS2V5MwILYWRtaW5fcHViXzMAD2tNb25leUJveFB1YktleQIRbW9uZXlfYm94X3B1Yl9rZXkADGtGYXJtaW5nQWRkcgIPZmFybWluZ19hZGRyZXNzAAtrVm90aW5nQWRkcgIOdm90aW5nX2FkZHJlc3MAEmtWb3RpbmdOZXdQb29sQWRkcgIXdm90aW5nX25ld19wb29sX2FkZHJlc3MADmtMYXVuY2hwYWRBZGRyAhFsYXVuY2hwYWRfYWRkcmVzcwAUa0FpcmRyb3BNb25leUJveEFkZHICFWFpcmRyb3BfZmVlX21vbmV5X2JveAALa09yYWNsZVBvb2wCBXBvb2xfAAZvcmFjbGUJAQdBZGRyZXNzAQEaAVRIE5cMwNMzzCUygLYp96dkaICr48x7S5kBE2dldEJhc2U1OEZyb21PcmFjbGUBA2tleQQHJG1hdGNoMAkAnQgCBQZvcmFjbGUFA2tleQMJAAECBQckbWF0Y2gwAgZTdHJpbmcEBnN0cmluZwUHJG1hdGNoMAkA2QQBBQZzdHJpbmcEB25vdGhpbmcFByRtYXRjaDAJAAIBCQCsAgIFA2tleQIIaXMgZW1wdHkADGFkbWluUHViS2V5MQkBE2dldEJhc2U1OEZyb21PcmFjbGUBBQ1rQWRtaW5QdWJLZXkxAAxhZG1pblB1YktleTIJARNnZXRCYXNlNThGcm9tT3JhY2xlAQUNa0FkbWluUHViS2V5MgAMYWRtaW5QdWJLZXkzCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFDWtBZG1pblB1YktleTMADm1vbmV5Qm94UHViS2V5CQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFD2tNb25leUJveFB1YktleQALZmFybWluZ0FkZHIJAQdBZGRyZXNzAQkBE2dldEJhc2U1OEZyb21PcmFjbGUBBQxrRmFybWluZ0FkZHIACnZvdGluZ0FkZHIJAQdBZGRyZXNzAQkBE2dldEJhc2U1OEZyb21PcmFjbGUBBQtrVm90aW5nQWRkcgARdm90aW5nTmV3UG9vbEFkZHIJAQdBZGRyZXNzAQkBE2dldEJhc2U1OEZyb21PcmFjbGUBBRJrVm90aW5nTmV3UG9vbEFkZHIADWxhdW5jaHBhZEFkZHIJAQdBZGRyZXNzAQkBE2dldEJhc2U1OEZyb21PcmFjbGUBBQ5rTGF1bmNocGFkQWRkcgATYWlyZHJvcE1vbmV5Qm94QWRkcgkBB0FkZHJlc3MBCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFFGtBaXJkcm9wTW9uZXlCb3hBZGRyABRsb2NrU3dvcEJsb2Nrc0Ftb3VudAkAaAIA9k4ABAAEU1dPUAkA2QQBCQERQGV4dHJOYXRpdmUoMTA1MykCBQtmYXJtaW5nQWRkcgUHa1NXT1BpZAAKc2NhbGVWYWx1ZQCAwtcvAA50b3RhbFZvdGVTaGFyZQCAyK+gJQAJZmVlU2FjbGU2AMCEPQAKYmFzZVBlcmlvZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFCnZvdGluZ0FkZHIFC2tCYXNlUGVyaW9kAiRFbXB0eSBrQmFzZVBlcmlvZCBhdCB2b3RpbmcgY29udHJhY3QAC3N0YXJ0SGVpZ2h0CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUKdm90aW5nQWRkcgUMa1N0YXJ0SGVpZ2h0AiVFbXB0eSBrU3RhcnRIZWlnaHQgYXQgdm90aW5nIGNvbnRyYWN0AAxwZXJpb2RMZW5ndGgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQp2b3RpbmdBZGRyBQ1rUGVyaW9kTGVuZ3RoAiZFbXB0eSBrUGVyaW9kTGVuZ3RoIGF0IHZvdGluZyBjb250cmFjdAAPZmlyc3RBY3RpdmVWb3RlCQELdmFsdWVPckVsc2UCCQCdCAIFEXZvdGluZ05ld1Bvb2xBZGRyBQ9hY3RpdmVWb3RlRmlyc3QCAAAQc2Vjb25kQWN0aXZlVm90ZQkBC3ZhbHVlT3JFbHNlAgkAnQgCBRF2b3RpbmdOZXdQb29sQWRkcgUQYWN0aXZlVm90ZVNlY29uZAIAAA90aGlyZEFjdGl2ZVZvdGUJAQt2YWx1ZU9yRWxzZQIJAJ0IAgURdm90aW5nTmV3UG9vbEFkZHIFD2FjdGl2ZVZvdGVUaGlyZAIAAAZhY3RpdmUJAQt2YWx1ZU9yRWxzZQIJAJsIAgUEdGhpcwUHa0FjdGl2ZQYACmFjdGl2ZUdsb2IJAQt2YWx1ZU9yRWxzZQIJAJsIAgUGb3JhY2xlBQtrQWN0aXZlR2xvYgYACmFpcmRyb3BGZWUJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBm9yYWNsZQULa0FpcmRyb3BGZWUAEGN1cnJWb3RpbmdQZXJpb2QJAGQCBQpiYXNlUGVyaW9kCQBpAgkAZQIFBmhlaWdodAULc3RhcnRIZWlnaHQFDHBlcmlvZExlbmd0aAEHc3VzcGVuZAEFY2F1c2UJAMwIAgkBDEJvb2xlYW5FbnRyeQIFB2tBY3RpdmUHCQDMCAIJAQtTdHJpbmdFbnRyeQIFBmtDYXVzZQUFY2F1c2UFA25pbAEIaXNBY3RpdmUAAwMFBmFjdGl2ZQUKYWN0aXZlR2xvYgcFBHVuaXQJAAIBAh9EQXBwIGlzIGluYWN0aXZlIGF0IHRoaXMgbW9tZW50AQtpc0FkbWluQ2FsbAEBaQMJAQ9jb250YWluc0VsZW1lbnQCCQDMCAIFDGFkbWluUHViS2V5MQkAzAgCBQxhZG1pblB1YktleTIJAMwIAgUMYWRtaW5QdWJLZXkzBQNuaWwIBQFpD2NhbGxlclB1YmxpY0tleQUEdW5pdAkAAgECIU9ubHkgYWRtaW4gY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgETZ2V0TGFzdEludGVyZXN0SW5mbwAJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUNa0xhc3RJbnRlcmVzdAAAARJnZXRUb3RhbExvY2tlZEluZm8ABA90b3RhbFN3b3BMb2NrZWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUQa1RvdGFsU1dPUExvY2tlZAAABBB0b3RhbEdTd29wTG9ja2VkCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFEWtUb3RhbEdTd29wTG9ja2VkBQ90b3RhbFN3b3BMb2NrZWQJAJQKAgUPdG90YWxTd29wTG9ja2VkBRB0b3RhbEdTd29wTG9ja2VkARFnZXRVc2VyTG9ja2VkSW5mbwEEdXNlcgQOdXNlclN3b3BMb2NrZWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICBQR1c2VyBQ9rVXNlclNXT1BMb2NrZWQAAAQPdXNlckdTd29wTG9ja2VkCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgUEdXNlcgUQa1VzZXJHU3dvcExvY2tlZAUOdXNlclN3b3BMb2NrZWQJAJQKAgUOdXNlclN3b3BMb2NrZWQFD3VzZXJHU3dvcExvY2tlZAETZ2V0VXNlckludGVyZXN0SW5mbwIEdXNlcgxsYXN0SW50ZXJlc3QECyR0MDUwMzY1MDk5CQERZ2V0VXNlckxvY2tlZEluZm8BBQR1c2VyBA51c2VyU1dPUEFtb3VudAgFCyR0MDUwMzY1MDk5Al8xBA91c2VyR1N3b3BBbW91bnQIBQskdDA1MDM2NTA5OQJfMgQQdXNlckxhc3RJbnRlcmVzdAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIFBHVzZXIFEWtVc2VyTGFzdEludGVyZXN0BQxsYXN0SW50ZXJlc3QJAJUKAwUQdXNlckxhc3RJbnRlcmVzdAUOdXNlclNXT1BBbW91bnQFD3VzZXJHU3dvcEFtb3VudAEYZ2V0VXNlckF2YWlsYWJsZUZvckNsYWltAQR1c2VyCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgUEdXNlcgUWa1VzZXJBdmFpbGFibGVGb3JDbGFpbQAAASBnZXRVc2VyVG90YWxWb3RlQW1vdW50Rm9yT25lUG9vbAIEcG9vbAR1c2VyBAZ2b3RpbmcJAQt2YWx1ZU9yRWxzZQIJAJoIAgURdm90aW5nTmV3UG9vbEFkZHIFBHBvb2wA////////////AQQOaGVpZ2h0T2ZWb3RpbmcJAQt2YWx1ZU9yRWxzZQIJAJoIAgURdm90aW5nTmV3UG9vbEFkZHIJAKwCAgkApAMBBQZ2b3RpbmcFHWtIZWlnaHRPZlBvb2xWb3RpbmdGb3JOZXdQb29sAAAEDnN0YXR1c09mVm90aW5nCQELdmFsdWVPckVsc2UCCQCbCAIFEXZvdGluZ05ld1Bvb2xBZGRyCQCsAgIJAKQDAQUGdm90aW5nBRlrU3RhdHVzT2ZWb3RpbmdGb3JOZXdQb29sBgQNY3VycmVudEhlaWdodAUGaGVpZ2h0AwkAZgIAAAUGdm90aW5nAAADCQEBIQEFDnN0YXR1c09mVm90aW5nAAADCQBmAgUOaGVpZ2h0T2ZWb3RpbmcFDWN1cnJlbnRIZWlnaHQJAGQCCQELdmFsdWVPckVsc2UCCQCaCAIFEXZvdGluZ05ld1Bvb2xBZGRyCQCsAgIJAKwCAgkArAICCQClCAEFBHVzZXICAV8JAKQDAQUGdm90aW5nBRRrWWVzVm90aW5nRm9yTmV3UG9vbAAACQELdmFsdWVPckVsc2UCCQCaCAIFEXZvdGluZ05ld1Bvb2xBZGRyCQCsAgIJAKwCAgkArAICCQClCAEFBHVzZXICAV8JAKQDAQUGdm90aW5nBRNrTm9Wb3RpbmdGb3JOZXdQb29sAAAAAAEgZ2V0VXNlclRvdGFsVm90ZUZvck5ld1Bvb2xBbW91bnQBBHVzZXIEDGxpc3RPZlZvdGluZwkAzAgCCQEgZ2V0VXNlclRvdGFsVm90ZUFtb3VudEZvck9uZVBvb2wCBQ9maXJzdEFjdGl2ZVZvdGUFBHVzZXIJAMwIAgkBIGdldFVzZXJUb3RhbFZvdGVBbW91bnRGb3JPbmVQb29sAgUQc2Vjb25kQWN0aXZlVm90ZQUEdXNlcgkAzAgCCQEgZ2V0VXNlclRvdGFsVm90ZUFtb3VudEZvck9uZVBvb2wCBQ90aGlyZEFjdGl2ZVZvdGUFBHVzZXIFA25pbAkAlgMBBQxsaXN0T2ZWb3RpbmcBGGdldFVzZXJCbG9ja2VkSW5MYXVjaHBhZAEEdXNlcgQKbGF1Y2hwYWRJZAkApAMBCQELdmFsdWVPckVsc2UCCQCaCAIFDWxhdW5jaHBhZEFkZHIFEmtMYXVuY2hwYWRBY3RpdmVJZAAAAwkAAAIFCmxhdWNocGFkSWQCATAAAAQMbFN0YXJ0SGVpZ2h0CQELdmFsdWVPckVsc2UCCQCaCAIFDWxhdW5jaHBhZEFkZHIJAKwCAgUKbGF1Y2hwYWRJZAUVa0xhdW5jaHBhZFN0YXJ0SGVpZ2h0AAAECWxEdXJhdGlvbgkBC3ZhbHVlT3JFbHNlAgkAmggCBQ1sYXVuY2hwYWRBZGRyCQCsAgIFCmxhdWNocGFkSWQFEmtMYXVuY2hwYWREdXJhdGlvbgAABBNsRnJlZXplU3dvcER1cmF0aW9uCQELdmFsdWVPckVsc2UCCQCaCAIFDWxhdW5jaHBhZEFkZHIJAKwCAgUKbGF1Y2hwYWRJZAUaa0xhdWNocGFkRnJlZXpTd29wRHVyYXRpb24AAAQOYmxvY2tFbmRIZWlnaHQJAGQCCQBkAgUMbFN0YXJ0SGVpZ2h0BQlsRHVyYXRpb24FE2xGcmVlemVTd29wRHVyYXRpb24DCQBmAgUGaGVpZ2h0BQ5ibG9ja0VuZEhlaWdodAAABA1ib3VnaHRUaWNrZXRzCQELdmFsdWVPckVsc2UCCQCaCAIFDWxhdW5jaHBhZEFkZHIJAKwCAgkArAICCQCsAgIJAKUIAQUEdXNlcgIBXwUKbGF1Y2hwYWRJZAUXa0xhdW5jaHBhZEJvdWdodFRpY2tldHMAAAQNc3dvcFBlclRpY2tldAkBC3ZhbHVlT3JFbHNlAgkAmggCBQ1sYXVuY2hwYWRBZGRyCQCsAgIFCmxhdWNocGFkSWQFGGtMYXVuY2hwYWRTd29wUGVyVGlja2V0cwAACQBoAgUNYm91Z2h0VGlja2V0cwUNc3dvcFBlclRpY2tldAEPZ2V0VXNlclZvdGVJbmZvAQR1c2VyBAskdDA3NDYzNzk5NgMJAQlpc0RlZmluZWQBCQCdCAIFCnZvdGluZ0FkZHIJAKwCAgkApQgBBQR1c2VyBQ9rVXNlclRvdGFsU3RydWMEBGRhdGEJALUJAgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFCnZvdGluZ0FkZHIJAKwCAgkApQgBBQR1c2VyBQ9rVXNlclRvdGFsU3RydWMCFUVtcHR5IGtVc2VyVG90YWxTdHJ1YwIBXwkAlQoDCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEZGF0YQAACQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEZGF0YQABCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEZGF0YQACBA51UG9vbFRvdGFsU1dPUAkBC3ZhbHVlT3JFbHNlAgkAmggCBQp2b3RpbmdBZGRyCQCsAgIJAKUIAQUEdXNlcgUSa1VzZXJUb3RhbFZvdGVTV09QAAAJAJUKAwUOdVBvb2xUb3RhbFNXT1AAAAUQY3VyclZvdGluZ1BlcmlvZAQRdXNlclRvdGFsVm90ZVNXT1AIBQskdDA3NDYzNzk5NgJfMQQLdXNlclVudm90ZWQIBQskdDA3NDYzNzk5NgJfMgQRdXNlclVudm90ZWRQZXJpb2QIBQskdDA3NDYzNzk5NgJfMwQRdXNlclVudm90ZWRBY3R1YWwDCQAAAgURdXNlclVudm90ZWRQZXJpb2QFEGN1cnJWb3RpbmdQZXJpb2QFC3VzZXJVbnZvdGVkAAAJAJQKAgURdXNlclRvdGFsVm90ZVNXT1AFEXVzZXJVbnZvdGVkQWN0dWFsARNnZXRQb29sVXBkYXRlSGVpZ2h0AQRwb29sCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgUEcG9vbAUTa0hlaWdodFBvb2xGcmFjdGlvbgAAARhpc0RlZmluZVBvb2xVcGRhdGVIZWlnaHQBBHBvb2wJAQlpc0RlZmluZWQBCQCaCAIFBHRoaXMJAKwCAgUEcG9vbAUTa0hlaWdodFBvb2xGcmFjdGlvbgEQZ2V0Q3VyUG9vbFdlaWdodAEEcG9vbAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIFBHBvb2wFGmtSZXdhcmRQb29sRnJhY3Rpb25DdXJyZW50AAABEWdldFByZXZQb29sV2VpZ2h0AQRwb29sCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgUEcG9vbAUba1Jld2FyZFBvb2xGcmFjdGlvblByZXZpb3VzAAABCWNsYWltQ2FsYwEEdXNlcgQMbGFzdEludGVyZXN0CQETZ2V0TGFzdEludGVyZXN0SW5mbwAECyR0MDg4NzA4OTY3CQETZ2V0VXNlckludGVyZXN0SW5mbwIFBHVzZXIFDGxhc3RJbnRlcmVzdAQQdXNlckxhc3RJbnRlcmVzdAgFCyR0MDg4NzA4OTY3Al8xBA51c2VyU1dPUExvY2tlZAgFCyR0MDg4NzA4OTY3Al8yBA91c2VyR1N3b3BBbW91bnQIBQskdDA4ODcwODk2NwJfMwQLY2xhaW1BbW91bnQJAGsDBQ91c2VyR1N3b3BBbW91bnQJAGUCBQxsYXN0SW50ZXJlc3QFEHVzZXJMYXN0SW50ZXJlc3QFCnNjYWxlVmFsdWUED3VzZXJOZXdJbnRlcmVzdAUMbGFzdEludGVyZXN0CQCUCgIFD3VzZXJOZXdJbnRlcmVzdAULY2xhaW1BbW91bnQBDGlzT3JhY2xlUG9vbAELcG9vbEFkZHJlc3MDCQEJaXNEZWZpbmVkAQkAnQgCBQZvcmFjbGUJAKwCAgULa09yYWNsZVBvb2wFC3Bvb2xBZGRyZXNzBQR1bml0CQACAQIbREFwcCBpcyBub3QgcmVnaXN0ZXJlZCBwb29sCgFpAQdhZGRQb29sAQtwb29sQWRkcmVzcwkBC3ZhbHVlT3JFbHNlAgkBC2lzQWRtaW5DYWxsAQUBaQkBC3ZhbHVlT3JFbHNlAgkBCGlzQWN0aXZlAAkBC3ZhbHVlT3JFbHNlAgkBDGlzT3JhY2xlUG9vbAEFC3Bvb2xBZGRyZXNzAwkBCWlzRGVmaW5lZAEJAJoIAgUEdGhpcwkArAICBQtwb29sQWRkcmVzcwUaa1Jld2FyZFBvb2xGcmFjdGlvbkN1cnJlbnQJAAIBAhpQb29sIGFscmVhZHkgaW4gZ292ZXJuYW5jZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQtwb29sQWRkcmVzcwUaa1Jld2FyZFBvb2xGcmFjdGlvbkN1cnJlbnQAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQtwb29sQWRkcmVzcwUba1Jld2FyZFBvb2xGcmFjdGlvblByZXZpb3VzAAAJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgULcG9vbEFkZHJlc3MFE2tIZWlnaHRQb29sRnJhY3Rpb24JARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMFE2tSZXdhcmRVcGRhdGVIZWlnaHQFA25pbAFpAQdhaXJEcm9wAAkBC3ZhbHVlT3JFbHNlAgkBCGlzQWN0aXZlAAQLJHQwOTg2Njk5NDEJAJQKAggJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAQJcG10QW1vdW50CAULJHQwOTg2Njk5NDECXzEECnBtdEFzc2V0SWQIBQskdDA5ODY2OTk0MQJfMgMJAQIhPQIFCnBtdEFzc2V0SWQFBFNXT1AJAAIBAhRJbmNvcnJlY3QgcG10QXNzZXRJZAQQYWlyZHJvcEZlZUFtb3VudAkAbgQFCXBtdEFtb3VudAUKYWlyZHJvcEZlZQUJZmVlU2FjbGU2BQdDRUlMSU5HBA0kdDAxMDExNDEwMTc2CQESZ2V0VG90YWxMb2NrZWRJbmZvAAQPdG90YWxTV09QTG9ja2VkCAUNJHQwMTAxMTQxMDE3NgJfMQQQdG90YWxHU3dvcExvY2tlZAgFDSR0MDEwMTE0MTAxNzYCXzIEDGxhc3RJbnRlcmVzdAkBE2dldExhc3RJbnRlcmVzdEluZm8ABAtpbnRlcmVzdE5ldwkAZAIFDGxhc3RJbnRlcmVzdAkAawMJAGUCBQlwbXRBbW91bnQFEGFpcmRyb3BGZWVBbW91bnQFCnNjYWxlVmFsdWUFEHRvdGFsR1N3b3BMb2NrZWQJAMwIAgkBDEludGVnZXJFbnRyeQIFDWtMYXN0SW50ZXJlc3QFC2ludGVyZXN0TmV3CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFE2FpcmRyb3BNb25leUJveEFkZHIFEGFpcmRyb3BGZWVBbW91bnQFBFNXT1AFA25pbAFpAQhsb2NrU1dPUAAJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQAEDSR0MDEwNTU0MTA2MjkJAJQKAggJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAQJcG10QW1vdW50CAUNJHQwMTA1NTQxMDYyOQJfMQQKcG10QXNzZXRJZAgFDSR0MDEwNTU0MTA2MjkCXzIDCQECIT0CBQpwbXRBc3NldElkBQRTV09QCQACAQIUSW5jb3JyZWN0IHBtdEFzc2V0SWQEBHVzZXIJAKUIAQgFAWkGY2FsbGVyBAxsYXN0SW50ZXJlc3QJARNnZXRMYXN0SW50ZXJlc3RJbmZvAAQNJHQwMTA3ODAxMDg0MwkBEWdldFVzZXJMb2NrZWRJbmZvAQUEdXNlcgQOdXNlclNXT1BMb2NrZWQIBQ0kdDAxMDc4MDEwODQzAl8xBA91c2VyR1N3b3BMb2NrZWQIBQ0kdDAxMDc4MDEwODQzAl8yBA0kdDAxMDg0ODEwOTA5CQEJY2xhaW1DYWxjAQUEdXNlcgQPdXNlck5ld0ludGVyZXN0CAUNJHQwMTA4NDgxMDkwOQJfMQQUY2xhaW1BbW91bnRBdmFpbGFibGUIBQ0kdDAxMDg0ODEwOTA5Al8yBBFhdmFpbGFibGVGb3JDbGFpbQkBGGdldFVzZXJBdmFpbGFibGVGb3JDbGFpbQEFBHVzZXIEFGF2YWlsYWJsZUZvckNsYWltTmV3CQBkAgURYXZhaWxhYmxlRm9yQ2xhaW0FFGNsYWltQW1vdW50QXZhaWxhYmxlBBF1c2VyU1dPUExvY2tlZE5ldwkAZAIFDnVzZXJTV09QTG9ja2VkBQlwbXRBbW91bnQEEnVzZXJHU3dvcExvY2tlZE5ldwkAZAIFD3VzZXJHU3dvcExvY2tlZAUJcG10QW1vdW50BA0kdDAxMTE1NzExMjE5CQESZ2V0VG90YWxMb2NrZWRJbmZvAAQPdG90YWxTV09QTG9ja2VkCAUNJHQwMTExNTcxMTIxOQJfMQQQdG90YWxHU3dvcExvY2tlZAgFDSR0MDExMTU3MTEyMTkCXzIEEnRvdGFsU1dPUExvY2tlZE5ldwkAZAIFD3RvdGFsU1dPUExvY2tlZAUJcG10QW1vdW50BBN0b3RhbEdTd29wTG9ja2VkTmV3CQBkAgUQdG90YWxHU3dvcExvY2tlZAUJcG10QW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHVzZXIFFWtVc2VyU3dvcFVubG9ja0hlaWdodAkAZAIFBmhlaWdodAUUbG9ja1N3b3BCbG9ja3NBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEdXNlcgURa1VzZXJMYXN0SW50ZXJlc3QFD3VzZXJOZXdJbnRlcmVzdAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQR1c2VyBQ9rVXNlclNXT1BMb2NrZWQFEXVzZXJTV09QTG9ja2VkTmV3CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHVzZXIFEGtVc2VyR1N3b3BMb2NrZWQFEnVzZXJHU3dvcExvY2tlZE5ldwkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQR1c2VyBRZrVXNlckF2YWlsYWJsZUZvckNsYWltBRRhdmFpbGFibGVGb3JDbGFpbU5ldwkAzAgCCQEMSW50ZWdlckVudHJ5AgUQa1RvdGFsU1dPUExvY2tlZAUSdG90YWxTV09QTG9ja2VkTmV3CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRFrVG90YWxHU3dvcExvY2tlZAUTdG90YWxHU3dvcExvY2tlZE5ldwUDbmlsAWkBDHdpdGhkcmF3U1dPUAEOd2l0aGRyYXdBbW91bnQJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQAEBHVzZXIJAKUIAQgFAWkGY2FsbGVyBAx1bmxvY2tIZWlnaHQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICBQR1c2VyBRVrVXNlclN3b3BVbmxvY2tIZWlnaHQAAAMJAGcCAAAFDndpdGhkcmF3QW1vdW50CQACAQITd2l0aGRyYXdBbW91bnQgPD0gMAMJAGYCBQx1bmxvY2tIZWlnaHQFBmhlaWdodAkAAgEJAKwCAgIYWW91IGNhbid0IHdpdGhkcmF3IHRpbGwgCQCkAwEFDHVubG9ja0hlaWdodAQNJHQwMTIxOTcxMjI1OQkBEmdldFRvdGFsTG9ja2VkSW5mbwAED3RvdGFsU1dPUExvY2tlZAgFDSR0MDEyMTk3MTIyNTkCXzEEEHRvdGFsR1N3b3BMb2NrZWQIBQ0kdDAxMjE5NzEyMjU5Al8yBA0kdDAxMjI2NDEyMzI3CQERZ2V0VXNlckxvY2tlZEluZm8BBQR1c2VyBA51c2VyU1dPUExvY2tlZAgFDSR0MDEyMjY0MTIzMjcCXzEED3VzZXJHU3dvcExvY2tlZAgFDSR0MDEyMjY0MTIzMjcCXzIEDSR0MDEyMzMyMTIzOTMJAQljbGFpbUNhbGMBBQR1c2VyBA91c2VyTmV3SW50ZXJlc3QIBQ0kdDAxMjMzMjEyMzkzAl8xBBRjbGFpbUFtb3VudEF2YWlsYWJsZQgFDSR0MDEyMzMyMTIzOTMCXzIEDSR0MDEyMzk4MTI0NjQJAQ9nZXRVc2VyVm90ZUluZm8BCAUBaQZjYWxsZXIEDnVzZXJWb3RlQW1vdW50CAUNJHQwMTIzOTgxMjQ2NAJfMQQQdXNlclVudm90ZUFtb3VudAgFDSR0MDEyMzk4MTI0NjQCXzIEGHVzZXJWb3RlQW1vdW50Rm9yTmV3UG9vbAkBIGdldFVzZXJUb3RhbFZvdGVGb3JOZXdQb29sQW1vdW50AQgFAWkGY2FsbGVyBBJibG9ja2VkSW5MYXVuY2hwYWQJARhnZXRVc2VyQmxvY2tlZEluTGF1Y2hwYWQBCAUBaQZjYWxsZXIDAwMJAGYCAAAFEHVzZXJVbnZvdGVBbW91bnQGCQBmAgAABQ51c2VyVm90ZUFtb3VudAYJAGYCAAAFGHVzZXJWb3RlQW1vdW50Rm9yTmV3UG9vbAkAAgECSnVzZXJVbnZvdGVBbW91bnQgPCAwIHx8IHVzZXJWb3RlQW1vdW50IDwgMCB8fCB1c2VyVm90ZUFtb3VudEZvck5ld1Bvb2wgPCAwBBJhdmFpbGFibGVUb1Vuc3Rha2UJAGUCBQ51c2VyU1dPUExvY2tlZAkAlgMBCQDMCAIFGHVzZXJWb3RlQW1vdW50Rm9yTmV3UG9vbAkAzAgCCQBkAgUOdXNlclZvdGVBbW91bnQFEHVzZXJVbnZvdGVBbW91bnQJAMwIAgUSYmxvY2tlZEluTGF1bmNocGFkBQNuaWwDCQBmAgUOd2l0aGRyYXdBbW91bnQFEmF2YWlsYWJsZVRvVW5zdGFrZQkAAgECI3dpdGhkcmF3QW1vdW50ID4gYXZhaWxhYmxlVG9VbnN0YWtlBBFhdmFpbGFibGVGb3JDbGFpbQkBGGdldFVzZXJBdmFpbGFibGVGb3JDbGFpbQEFBHVzZXIEFGF2YWlsYWJsZUZvckNsYWltTmV3CQBkAgURYXZhaWxhYmxlRm9yQ2xhaW0FFGNsYWltQW1vdW50QXZhaWxhYmxlBBJ0b3RhbFNXT1BMb2NrZWROZXcJAGUCBQ90b3RhbFNXT1BMb2NrZWQFDndpdGhkcmF3QW1vdW50BBF1c2VyU1dPUEFtb3VudE5ldwkAZQIFDnVzZXJTV09QTG9ja2VkBQ53aXRoZHJhd0Ftb3VudAQTdG90YWxHU3dvcExvY2tlZE5ldwkAZAIJAGUCBRB0b3RhbEdTd29wTG9ja2VkBQ91c2VyR1N3b3BMb2NrZWQFEXVzZXJTV09QQW1vdW50TmV3CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHVzZXIFEWtVc2VyTGFzdEludGVyZXN0BQ91c2VyTmV3SW50ZXJlc3QJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEdXNlcgUPa1VzZXJTV09QTG9ja2VkBRF1c2VyU1dPUEFtb3VudE5ldwkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQR1c2VyBRBrVXNlckdTd29wTG9ja2VkBRF1c2VyU1dPUEFtb3VudE5ldwkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQR1c2VyBRZrVXNlckF2YWlsYWJsZUZvckNsYWltBRRhdmFpbGFibGVGb3JDbGFpbU5ldwkAzAgCCQEMSW50ZWdlckVudHJ5AgUQa1RvdGFsU1dPUExvY2tlZAUSdG90YWxTV09QTG9ja2VkTmV3CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRFrVG90YWxHU3dvcExvY2tlZAUTdG90YWxHU3dvcExvY2tlZE5ldwkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFDndpdGhkcmF3QW1vdW50BQRTV09QBQNuaWwBaQEUY2xhaW1BbmRXaXRoZHJhd1NXT1AACQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUABAR1c2VyCQClCAEIBQFpBmNhbGxlcgQRYXZhaWxhYmxlRm9yQ2xhaW0JARhnZXRVc2VyQXZhaWxhYmxlRm9yQ2xhaW0BBQR1c2VyBA0kdDAxMzk4MzE0MDM1CQEJY2xhaW1DYWxjAQUEdXNlcgQPdXNlck5ld0ludGVyZXN0CAUNJHQwMTM5ODMxNDAzNQJfMQQLY2xhaW1BbW91bnQIBQ0kdDAxMzk4MzE0MDM1Al8yBA91c2VyQ2xhaW1BbW91bnQJAGQCBRFhdmFpbGFibGVGb3JDbGFpbQULY2xhaW1BbW91bnQDCQAAAgUPdXNlckNsYWltQW1vdW50AAAJAAIBAhlZb3UgaGF2ZSAwIGF2YWlsYWJsZSBTV09QCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHVzZXIFEWtVc2VyTGFzdEludGVyZXN0BQ91c2VyTmV3SW50ZXJlc3QJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEdXNlcgUWa1VzZXJBdmFpbGFibGVGb3JDbGFpbQAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgUPdXNlckNsYWltQW1vdW50BQRTV09QBQNuaWwBaQERY2xhaW1BbmRTdGFrZVNXT1AACQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUABAR1c2VyCQClCAEIBQFpBmNhbGxlcgQNJHQwMTQ0NjUxNDUyNwkBEmdldFRvdGFsTG9ja2VkSW5mbwAED3RvdGFsU1dPUExvY2tlZAgFDSR0MDE0NDY1MTQ1MjcCXzEEEHRvdGFsR1N3b3BMb2NrZWQIBQ0kdDAxNDQ2NTE0NTI3Al8yBA0kdDAxNDUzMjE0NTk1CQERZ2V0VXNlckxvY2tlZEluZm8BBQR1c2VyBA51c2VyU1dPUExvY2tlZAgFDSR0MDE0NTMyMTQ1OTUCXzEED3VzZXJHU3dvcExvY2tlZAgFDSR0MDE0NTMyMTQ1OTUCXzIEEWF2YWlsYWJsZUZvckNsYWltCQEYZ2V0VXNlckF2YWlsYWJsZUZvckNsYWltAQUEdXNlcgQNJHQwMTQ2NTkxNDcxMAkBCWNsYWltQ2FsYwEFBHVzZXIED3VzZXJOZXdJbnRlcmVzdAgFDSR0MDE0NjU5MTQ3MTACXzEEC2NsYWltQW1vdW50CAUNJHQwMTQ2NTkxNDcxMAJfMgQPdXNlckNsYWltQW1vdW50CQBkAgURYXZhaWxhYmxlRm9yQ2xhaW0FC2NsYWltQW1vdW50BBF1c2VyU1dPUExvY2tlZE5ldwkAZAIFDnVzZXJTV09QTG9ja2VkBQ91c2VyQ2xhaW1BbW91bnQEEnVzZXJHU3dvcExvY2tlZE5ldwkAZAIFD3VzZXJHU3dvcExvY2tlZAkAaAIFD3VzZXJDbGFpbUFtb3VudAACBBJ0b3RhbFNXT1BMb2NrZWROZXcJAGQCBQ90b3RhbFNXT1BMb2NrZWQFD3VzZXJDbGFpbUFtb3VudAQTdG90YWxHU3dvcExvY2tlZE5ldwkAZAIFEHRvdGFsR1N3b3BMb2NrZWQJAGgCBQ91c2VyQ2xhaW1BbW91bnQAAgMJAAACBQ91c2VyQ2xhaW1BbW91bnQAAAkAAgECGVlvdSBoYXZlIDAgYXZhaWxhYmxlIFNXT1AJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkApQgBCAUBaQZjYWxsZXIFFWtVc2VyU3dvcFVubG9ja0hlaWdodAkAZAIFBmhlaWdodAUUbG9ja1N3b3BCbG9ja3NBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkApQgBCAUBaQZjYWxsZXIFEWtVc2VyTGFzdEludGVyZXN0BQ91c2VyTmV3SW50ZXJlc3QJAMwIAgkBDEludGVnZXJFbnRyeQIFEGtUb3RhbFNXT1BMb2NrZWQFEnRvdGFsU1dPUExvY2tlZE5ldwkAzAgCCQEMSW50ZWdlckVudHJ5AgURa1RvdGFsR1N3b3BMb2NrZWQFE3RvdGFsR1N3b3BMb2NrZWROZXcJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkApQgBCAUBaQZjYWxsZXIFD2tVc2VyU1dPUExvY2tlZAURdXNlclNXT1BMb2NrZWROZXcJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkApQgBCAUBaQZjYWxsZXIFEGtVc2VyR1N3b3BMb2NrZWQFEnVzZXJHU3dvcExvY2tlZE5ldwkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQR1c2VyBRZrVXNlckF2YWlsYWJsZUZvckNsYWltAAAFA25pbAFpARNsb2NrU1dPUEZyb21GYXJtaW5nAAkBC3ZhbHVlT3JFbHNlAgkBCGlzQWN0aXZlAAQNJHQwMTU3MDYxNTc4MQkAlAoCCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAgJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBAlwbXRBbW91bnQIBQ0kdDAxNTcwNjE1NzgxAl8xBApwbXRBc3NldElkCAUNJHQwMTU3MDYxNTc4MQJfMgMJAQIhPQIIBQFpBmNhbGxlcgULZmFybWluZ0FkZHIJAAIBAiNPbmx5IGZhcm1pbmcgY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgMJAQIhPQIFCnBtdEFzc2V0SWQFBFNXT1AJAAIBAhRJbmNvcnJlY3QgcG10QXNzZXRJZAQEdXNlcgkApQgBCAUBaQxvcmlnaW5DYWxsZXIEDGxhc3RJbnRlcmVzdAkBE2dldExhc3RJbnRlcmVzdEluZm8ABA0kdDAxNjAyNDE2MDg3CQERZ2V0VXNlckxvY2tlZEluZm8BBQR1c2VyBA51c2VyU1dPUExvY2tlZAgFDSR0MDE2MDI0MTYwODcCXzEED3VzZXJHU3dvcExvY2tlZAgFDSR0MDE2MDI0MTYwODcCXzIEDSR0MDE2MDkyMTYxNTMJAQljbGFpbUNhbGMBBQR1c2VyBA91c2VyTmV3SW50ZXJlc3QIBQ0kdDAxNjA5MjE2MTUzAl8xBBRjbGFpbUFtb3VudEF2YWlsYWJsZQgFDSR0MDE2MDkyMTYxNTMCXzIEEWF2YWlsYWJsZUZvckNsYWltCQEYZ2V0VXNlckF2YWlsYWJsZUZvckNsYWltAQUEdXNlcgQUYXZhaWxhYmxlRm9yQ2xhaW1OZXcJAGQCBRFhdmFpbGFibGVGb3JDbGFpbQUUY2xhaW1BbW91bnRBdmFpbGFibGUEEXVzZXJTV09QTG9ja2VkTmV3CQBkAgUOdXNlclNXT1BMb2NrZWQFCXBtdEFtb3VudAQSdXNlckdTd29wTG9ja2VkTmV3CQBkAgUPdXNlckdTd29wTG9ja2VkCQBoAgUJcG10QW1vdW50AAIEDSR0MDE2NDA1MTY0NjcJARJnZXRUb3RhbExvY2tlZEluZm8ABA90b3RhbFNXT1BMb2NrZWQIBQ0kdDAxNjQwNTE2NDY3Al8xBBB0b3RhbEdTd29wTG9ja2VkCAUNJHQwMTY0MDUxNjQ2NwJfMgQSdG90YWxTV09QTG9ja2VkTmV3CQBkAgUPdG90YWxTV09QTG9ja2VkBQlwbXRBbW91bnQEE3RvdGFsR1N3b3BMb2NrZWROZXcJAGQCBRB0b3RhbEdTd29wTG9ja2VkCQBoAgUJcG10QW1vdW50AAIJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEdXNlcgUVa1VzZXJTd29wVW5sb2NrSGVpZ2h0CQBkAgUGaGVpZ2h0BRRsb2NrU3dvcEJsb2Nrc0Ftb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQR1c2VyBRFrVXNlckxhc3RJbnRlcmVzdAUPdXNlck5ld0ludGVyZXN0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHVzZXIFD2tVc2VyU1dPUExvY2tlZAURdXNlclNXT1BMb2NrZWROZXcJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEdXNlcgUQa1VzZXJHU3dvcExvY2tlZAUPdXNlckdTd29wTG9ja2VkCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHVzZXIFFmtVc2VyQXZhaWxhYmxlRm9yQ2xhaW0FFGF2YWlsYWJsZUZvckNsYWltTmV3CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRBrVG90YWxTV09QTG9ja2VkBRJ0b3RhbFNXT1BMb2NrZWROZXcJAMwIAgkBDEludGVnZXJFbnRyeQIFEWtUb3RhbEdTd29wTG9ja2VkBRN0b3RhbEdTd29wTG9ja2VkTmV3BQNuaWwBaQENdXBkYXRlV2VpZ2h0cwQMY3VycmVudFBvb2xzDmN1cnJlbnRSZXdhcmRzEnJld2FyZFVwZGF0ZUhlaWdodApwYWdpbmF0aW9uCQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUABAthbW91bnRQb29scwAKBBd0b3RhbFJld2FyZFVwZGF0ZUhlaWdodAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBRNrUmV3YXJkVXBkYXRlSGVpZ2h0AAADCQEBIQEJAQ9jb250YWluc0VsZW1lbnQCCQDMCAIFDGFkbWluUHViS2V5MQkAzAgCBQxhZG1pblB1YktleTIJAMwIAgUMYWRtaW5QdWJLZXkzCQDMCAIFDm1vbmV5Qm94UHViS2V5BQNuaWwIBQFpD2NhbGxlclB1YmxpY0tleQkAAgECIU9ubHkgYWRtaW4gY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgMJAGYCCQCQAwEFDGN1cnJlbnRQb29scwULYW1vdW50UG9vbHMJAAIBCQCsAgICFk1heCBhbW91bnQgb2YgcG9vbCBpcyAJAKQDAQULYW1vdW50UG9vbHMDCQBnAgUXdG90YWxSZXdhcmRVcGRhdGVIZWlnaHQFEnJld2FyZFVwZGF0ZUhlaWdodAkAAgECLXJld2FyZFVwZGF0ZUhlaWdodCA8PSB0b3RhbFJld2FyZFVwZGF0ZUhlaWdodAMJAGcCBQZoZWlnaHQFEnJld2FyZFVwZGF0ZUhlaWdodAkAAgECHGhlaWdodCA+PSByZXdhcmRVcGRhdGVIZWlnaHQDCQBnAgAABRJyZXdhcmRVcGRhdGVIZWlnaHQJAAIBAhgwID49IHJld2FyZFVwZGF0ZUhlaWdodCAKAQNzdW0CAWEBYgkAZAIFAWEFAWIKARljaGFuZ2VQcmV2aW91c1Jld2FyZEVudHJ5AgthY2N1bXVsYXRlZARwb29sBBZwb29sUmV3YXJkVXBkYXRlSGVpZ2h0CQETZ2V0UG9vbFVwZGF0ZUhlaWdodAEFBHBvb2wDAwkBASEBCQEYaXNEZWZpbmVQb29sVXBkYXRlSGVpZ2h0AQUEcG9vbAYDCQECIT0CBRJyZXdhcmRVcGRhdGVIZWlnaHQFFnBvb2xSZXdhcmRVcGRhdGVIZWlnaHQJAAACBRZwb29sUmV3YXJkVXBkYXRlSGVpZ2h0BRd0b3RhbFJld2FyZFVwZGF0ZUhlaWdodAcECnBvb2xSZXdhcmQJARBnZXRDdXJQb29sV2VpZ2h0AQUEcG9vbAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBRtrUmV3YXJkUG9vbEZyYWN0aW9uUHJldmlvdXMFCnBvb2xSZXdhcmQFC2FjY3VtdWxhdGVkBApwb29sUmV3YXJkCQERZ2V0UHJldlBvb2xXZWlnaHQBBQRwb29sCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHBvb2wFG2tSZXdhcmRQb29sRnJhY3Rpb25QcmV2aW91cwUKcG9vbFJld2FyZAULYWNjdW11bGF0ZWQKARhjaGFuZ2VDdXJyZW50UmV3YXJkRW50cnkCC2FjY3VtdWxhdGVkBHBvb2wECXBvb2xJbmRleAkBBXZhbHVlAQkAzwgCBQxjdXJyZW50UG9vbHMFBHBvb2wECnBvb2xSZXdhcmQJAJEDAgUOY3VycmVudFJld2FyZHMFCXBvb2xJbmRleAMJAGYCAAAFCnBvb2xSZXdhcmQJAAIBAg5Qb29sUmV3YXJkIDwgMAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBRprUmV3YXJkUG9vbEZyYWN0aW9uQ3VycmVudAUKcG9vbFJld2FyZAULYWNjdW11bGF0ZWQKARFjaGFuZ2VIZWlnaHRFbnRyeQILYWNjdW11bGF0ZWQEcG9vbAQKcG9vbEhlaWdodAUScmV3YXJkVXBkYXRlSGVpZ2h0BAd1cFVJbnRyCQD8BwQFC2Zhcm1pbmdBZGRyAhJ1cGRhdGVQb29sSW50ZXJlc3QJAMwIAgUEcG9vbAUDbmlsBQNuaWwDCQAAAgUHdXBVSW50cgUHdXBVSW50cgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBRNrSGVpZ2h0UG9vbEZyYWN0aW9uBQpwb29sSGVpZ2h0BQthY2N1bXVsYXRlZAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgoBDGdldFN1bVJld2FyZAIKY3VyVGVtcFN1bQpwYWdpbmF0aW9uAwkAAAIFCnBhZ2luYXRpb24AAAMJAGYCBQpjdXJUZW1wU3VtBQ50b3RhbFZvdGVTaGFyZQkAAgEJAKwCAgkArAICCQCsAgICSnN1bVJld2FyZFByZXZpb3VzID4gdG90YWxWb3RlU2hhcmUgb3Igc3VtUmV3YXJkQ3VycmVudCA+IHRvdGFsVm90ZVNoYXJlIC0gCQCkAwEFCnBhZ2luYXRpb24CASAJAKQDAQUKY3VyVGVtcFN1bQkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQtrVGVtcEN1clN1bQUKY3VyVGVtcFN1bQUDbmlsCQDMCAIJAQxJbnRlZ2VyRW50cnkCBSJrUmV3YXJkVXBkYXRlRmlyc3RQYWdpbmF0aW9uSGVpZ2h0BRJyZXdhcmRVcGRhdGVIZWlnaHQFA25pbAMJAAACBQpwYWdpbmF0aW9uAAEEEWN1clRlbXBTdW1Gcm9tS2V5CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFC2tUZW1wQ3VyU3VtAAAEJnJld2FyZFVwZGF0ZUhlaWdodEZpcnN0UGFnaW5hdGlvbkVudHJ5CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFImtSZXdhcmRVcGRhdGVGaXJzdFBhZ2luYXRpb25IZWlnaHQAAAMJAGYCCQBkAgUKY3VyVGVtcFN1bQURY3VyVGVtcFN1bUZyb21LZXkFDnRvdGFsVm90ZVNoYXJlCQACAQkArAICCQCsAgIJAKwCAgJKc3VtUmV3YXJkUHJldmlvdXMgPiB0b3RhbFZvdGVTaGFyZSBvciBzdW1SZXdhcmRDdXJyZW50ID4gdG90YWxWb3RlU2hhcmUgLSAJAKQDAQUKcGFnaW5hdGlvbgIBIAkApAMBCQBkAgUKY3VyVGVtcFN1bQURY3VyVGVtcFN1bUZyb21LZXkDCQECIT0CBSZyZXdhcmRVcGRhdGVIZWlnaHRGaXJzdFBhZ2luYXRpb25FbnRyeQUScmV3YXJkVXBkYXRlSGVpZ2h0CQACAQJEY3VycmVudCByZXdhcmRVcGRhdGVIZWlnaHQgIT0gcmV3YXJkVXBkYXRlSGVpZ2h0Rmlyc3RQYWdpbmF0aW9uRW50cnkJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgULa1RlbXBDdXJTdW0JAGQCBQpjdXJUZW1wU3VtBRFjdXJUZW1wU3VtRnJvbUtleQUDbmlsBQNuaWwDCQAAAgUKcGFnaW5hdGlvbgACBAZjdXJTdW0JAGQCCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFC2tUZW1wQ3VyU3VtAAAFCmN1clRlbXBTdW0EJnJld2FyZFVwZGF0ZUhlaWdodEZpcnN0UGFnaW5hdGlvbkVudHJ5CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFImtSZXdhcmRVcGRhdGVGaXJzdFBhZ2luYXRpb25IZWlnaHQAAAMJAQIhPQIFBmN1clN1bQUOdG90YWxWb3RlU2hhcmUJAAIBAklzdW1SZXdhcmRQcmV2aW91cyAhPSB0b3RhbFZvdGVTaGFyZSBvciBzdW1SZXdhcmRDdXJyZW50ICE9IHRvdGFsVm90ZVNoYXJlAwkBAiE9AgUmcmV3YXJkVXBkYXRlSGVpZ2h0Rmlyc3RQYWdpbmF0aW9uRW50cnkFEnJld2FyZFVwZGF0ZUhlaWdodAkAAgECRGN1cnJlbnQgcmV3YXJkVXBkYXRlSGVpZ2h0ICE9IHJld2FyZFVwZGF0ZUhlaWdodEZpcnN0UGFnaW5hdGlvbkVudHJ5CQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIFC2tUZW1wQ3VyU3VtBQZjdXJTdW0FA25pbAUDbmlsCQACAQIUSW5jb3JyZWN0IHBhZ2luYXRpb24EFnByZXZpb3VzUmV3YXJkRW50cnlOZXcKAAIkbAUMY3VycmVudFBvb2xzCgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJARljaGFuZ2VQcmV2aW91c1Jld2FyZEVudHJ5AgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKBBVjdXJyZW50UmV3YXJkRW50cnlOZXcKAAIkbAUMY3VycmVudFBvb2xzCgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYxXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJARhjaGFuZ2VDdXJyZW50UmV3YXJkRW50cnkCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjFfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEwCQEFJGYxXzICCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoEEWhlaWdodEVudHJ5TmV3Q3VyCgACJGwFDGN1cnJlbnRQb29scwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMl8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQERY2hhbmdlSGVpZ2h0RW50cnkCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjJfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEwCQEFJGYyXzICCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoEFHN1bVJld2FyZEN1cnJlbnRUZW1wCgACJGwFDmN1cnJlbnRSZXdhcmRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAAACgEFJGYzXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQNzdW0CBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjNfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEwCQEFJGYzXzICCQEFJGYzXzECCQEFJGYzXzECCQEFJGYzXzECCQEFJGYzXzECCQEFJGYzXzECCQEFJGYzXzECCQEFJGYzXzECCQEFJGYzXzECCQEFJGYzXzECCQEFJGYzXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoEDSR0MDIxNDg4MjE1OTkJAQxnZXRTdW1SZXdhcmQCBRRzdW1SZXdhcmRDdXJyZW50VGVtcAUKcGFnaW5hdGlvbgQQc3VtUmV3YXJkQ3VycmVudAgFDSR0MDIxNDg4MjE1OTkCXzEEJnJld2FyZFVwZGF0ZUhlaWdodEZpcnN0UGFnaW5hdGlvbkVudHJ5CAUNJHQwMjE0ODgyMTU5OQJfMgQXcmV3YXJkVXBkYXRlSGVpZ2h0RW50cnkDCQAAAgUKcGFnaW5hdGlvbgACCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRNrUmV3YXJkVXBkYXRlSGVpZ2h0BRJyZXdhcmRVcGRhdGVIZWlnaHQFA25pbAUDbmlsAwkAZgIFBmhlaWdodAUScmV3YXJkVXBkYXRlSGVpZ2h0CQACAQIbcmV3YXJkVXBkYXRlSGVpZ2h0IDwgaGVpZ2h0CQDOCAIJAM4IAgkAzggCCQDOCAIJAM4IAgUWcHJldmlvdXNSZXdhcmRFbnRyeU5ldwUVY3VycmVudFJld2FyZEVudHJ5TmV3BRFoZWlnaHRFbnRyeU5ld0N1cgUQc3VtUmV3YXJkQ3VycmVudAUXcmV3YXJkVXBkYXRlSGVpZ2h0RW50cnkFJnJld2FyZFVwZGF0ZUhlaWdodEZpcnN0UGFnaW5hdGlvbkVudHJ5AWkBCHNodXRkb3duAAkBC3ZhbHVlT3JFbHNlAgkBC2lzQWRtaW5DYWxsAQUBaQMJAQEhAQUGYWN0aXZlCQACAQkArAICAiJEQXBwIGlzIGFscmVhZHkgc3VzcGVuZGVkLiBDYXVzZTogCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMFBmtDYXVzZQIadGhlIGNhdXNlIHdhc24ndCBzcGVjaWZpZWQJAQdzdXNwZW5kAQIPUGF1c2VkIGJ5IGFkbWluAWkBCGFjdGl2YXRlAAkBC3ZhbHVlT3JFbHNlAgkBC2lzQWRtaW5DYWxsAQUBaQMFBmFjdGl2ZQkAAgECFkRBcHAgaXMgYWxyZWFkeSBhY3RpdmUJAMwIAgkBDEJvb2xlYW5FbnRyeQIFB2tBY3RpdmUGCQDMCAIJAQtEZWxldGVFbnRyeQEFBmtDYXVzZQUDbmlsAQJ0eAEGdmVyaWZ5AAQSYWRtaW5QdWJLZXkxU2lnbmVkAwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAUMYWRtaW5QdWJLZXkxAAEAAAQSYWRtaW5QdWJLZXkyU2lnbmVkAwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAQUMYWRtaW5QdWJLZXkyAAEAAAQSYWRtaW5QdWJLZXkzU2lnbmVkAwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAgUMYWRtaW5QdWJLZXkzAAEAAAkAZwIJAGQCCQBkAgUSYWRtaW5QdWJLZXkxU2lnbmVkBRJhZG1pblB1YktleTJTaWduZWQFEmFkbWluUHViS2V5M1NpZ25lZAACLy++PQ==", "height": 2279358, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: DUg3371WqvKdHqXYPo6PGFt8PPWKGKBNPRSqTTLwGgqb Next: EHYDiRDmTfBPmLcejzEMHuQ3iGqnPppZham6mRg8hwrN Diff:
OldNewDifferences
33 {-# CONTENT_TYPE DAPP #-}
44 let a = "active"
55
6-let b = "shutdown_cause"
6+let b = "active_all_contracts"
77
8-let c = "last_interest"
8+let c = "shutdown_cause"
99
10-let d = "_last_interest"
10+let d = "last_interest"
1111
12-let e = "_SWOP_amount"
12+let e = "_last_interest"
1313
14-let f = "total_SWOP_amount"
14+let f = "_SWOP_amount"
1515
16-let g = "_SWOP_unlock_height"
16+let g = "total_SWOP_amount"
1717
18-let h = "_GSwop_amount"
18+let h = "_SWOP_unlock_height"
1919
20-let i = "total_GSwop_amount"
20+let i = "_GSwop_amount"
2121
22-let j = "_user_total_vote_gSWOP"
22+let j = "total_GSwop_amount"
2323
24-let k = "_user_available_for_claim"
24+let k = "_user_total_vote_gSWOP"
2525
26-let l = "_current_pool_fraction_reward"
26+let l = "_user_available_for_claim"
2727
28-let m = "_previous_pool_fraction_reward"
28+let m = "_current_pool_fraction_reward"
2929
30-let n = "_pool_reward_update_height"
30+let n = "_previous_pool_fraction_reward"
3131
32-let o = "reward_update_height"
32+let o = "_pool_reward_update_height"
3333
34-let p = "reward_update_height_first_pagination"
34+let p = "reward_update_height"
3535
36-let q = "_vote_no"
36+let q = "reward_update_height_first_pagination"
3737
38-let r = "_vote_yes"
38+let r = "_vote_no"
3939
40-let s = "_status"
40+let s = "_vote_yes"
4141
42-let t = "_finish_height"
42+let t = "_status"
4343
44-let u = "voting_active_cell_1"
44+let u = "_finish_height"
4545
46-let v = "voting_active_cell_2"
46+let v = "voting_active_cell_1"
4747
48-let w = "voting_active_cell_3"
48+let w = "voting_active_cell_2"
4949
50-let x = "sum_reward_current"
50+let x = "voting_active_cell_3"
5151
52-let y = "_bought_tickets"
52+let y = "sum_reward_current"
5353
54-let z = "_swop_per_ticket"
54+let z = "_bought_tickets"
5555
56-let A = "launchpad_active_id"
56+let A = "_swop_per_ticket"
5757
58-let B = "_duration"
58+let B = "launchpad_active_id"
5959
60-let C = "_start_height"
60+let C = "_duration"
6161
62-let D = "start_height"
62+let D = "_start_height"
6363
64-let E = "base_period"
64+let E = "start_height"
6565
66-let F = "period_length"
66+let F = "base_period"
6767
68-let G = "_user_total_struc"
68+let G = "period_length"
6969
70-let H = "_freeze_swop_duration"
70+let H = "_user_total_struc"
7171
72-let I = "SWOP_id"
72+let I = "_freeze_swop_duration"
7373
74-let J = "airdrop_fee"
74+let J = "SWOP_id"
7575
76-let K = "admin_pub_1"
76+let K = "airdrop_fee"
7777
78-let L = "admin_pub_2"
78+let L = "admin_pub_1"
7979
80-let M = "admin_pub_3"
80+let M = "admin_pub_2"
8181
82-let N = "money_box_pub_key"
82+let N = "admin_pub_3"
8383
84-let O = "farming_address"
84+let O = "money_box_pub_key"
8585
86-let P = "voting_address"
86+let P = "farming_address"
8787
88-let Q = "voting_new_pool_address"
88+let Q = "voting_address"
8989
90-let R = "launchpad_address"
90+let R = "voting_new_pool_address"
9191
92-let S = "airdrop_fee_money_box"
92+let S = "launchpad_address"
9393
94-let T = Address(base58'3MvVBtsXroQpy1tsPw21TU2ET9A8WfmrNjz')
94+let T = "airdrop_fee_money_box"
9595
96-func U (V) = {
97- let W = getString(T, V)
98- if ($isInstanceOf(W, "String"))
96+let U = "pool_"
97+
98+let V = Address(base58'3MvVBtsXroQpy1tsPw21TU2ET9A8WfmrNjz')
99+
100+func W (X) = {
101+ let Y = getString(V, X)
102+ if ($isInstanceOf(Y, "String"))
99103 then {
100- let X = W
101- fromBase58String(X)
104+ let Z = Y
105+ fromBase58String(Z)
102106 }
103107 else {
104- let Y = W
105- throw((V + "is empty"))
108+ let aa = Y
109+ throw((X + "is empty"))
106110 }
107111 }
108112
109113
110-let Z = U(K)
114+let ab = W(L)
111115
112-let aa = U(L)
116+let ac = W(M)
113117
114-let ab = U(M)
118+let ad = W(N)
115119
116-let ac = U(N)
120+let ae = W(O)
117121
118-let ad = Address(U(O))
122+let af = Address(W(P))
119123
120-let ae = Address(U(P))
124+let ag = Address(W(Q))
121125
122-let af = Address(U(Q))
126+let ah = Address(W(R))
123127
124-let ag = Address(U(R))
128+let ai = Address(W(S))
125129
126-let ah = Address(U(S))
130+let aj = Address(W(T))
127131
128-let ai = (10102 * 4)
132+let ak = (10102 * 4)
129133
130-let aj = fromBase58String(getStringValue(ad, I))
134+let al = fromBase58String(getStringValue(af, J))
131135
132-let ak = 100000000
136+let am = 100000000
133137
134-let al = 10000000000
138+let an = 10000000000
135139
136-let am = 1000000
140+let ao = 1000000
137141
138-let an = valueOrErrorMessage(getInteger(ae, E), "Empty kBasePeriod at voting contract")
142+let ap = valueOrErrorMessage(getInteger(ag, F), "Empty kBasePeriod at voting contract")
139143
140-let ao = valueOrErrorMessage(getInteger(ae, D), "Empty kStartHeight at voting contract")
144+let aq = valueOrErrorMessage(getInteger(ag, E), "Empty kStartHeight at voting contract")
141145
142-let ap = valueOrErrorMessage(getInteger(ae, F), "Empty kPeriodLength at voting contract")
146+let ar = valueOrErrorMessage(getInteger(ag, G), "Empty kPeriodLength at voting contract")
143147
144-let aq = valueOrElse(getString(af, u), "")
148+let as = valueOrElse(getString(ah, v), "")
145149
146-let ar = valueOrElse(getString(af, v), "")
150+let at = valueOrElse(getString(ah, w), "")
147151
148-let as = valueOrElse(getString(af, w), "")
152+let au = valueOrElse(getString(ah, x), "")
149153
150-let at = valueOrElse(getBoolean(this, a), true)
154+let av = valueOrElse(getBoolean(this, a), true)
151155
152-let au = getIntegerValue(T, J)
156+let aw = valueOrElse(getBoolean(V, b), true)
153157
154-let av = (an + ((height - ao) / ap))
158+let ax = getIntegerValue(V, K)
155159
156-func aw (ax) = [BooleanEntry(a, false), StringEntry(b, ax)]
160+let ay = (ap + ((height - aq) / ar))
161+
162+func az (aA) = [BooleanEntry(a, false), StringEntry(c, aA)]
157163
158164
159-func ay () = if (at)
165+func aB () = if (if (av)
166+ then aw
167+ else false)
160168 then unit
161169 else throw("DApp is inactive at this moment")
162170
163171
164-func az (aA) = if (containsElement([Z, aa, ab], aA.callerPublicKey))
172+func aC (aD) = if (containsElement([ab, ac, ad], aD.callerPublicKey))
165173 then unit
166174 else throw("Only admin can call this function")
167175
168176
169-func aB () = valueOrElse(getInteger(this, c), 0)
177+func aE () = valueOrElse(getInteger(this, d), 0)
170178
171179
172-func aC () = {
173- let aD = valueOrElse(getInteger(this, f), 0)
174- let aE = valueOrElse(getInteger(this, i), aD)
175- $Tuple2(aD, aE)
180+func aF () = {
181+ let aG = valueOrElse(getInteger(this, g), 0)
182+ let aH = valueOrElse(getInteger(this, j), aG)
183+ $Tuple2(aG, aH)
176184 }
177185
178186
179-func aF (aG) = {
180- let aH = valueOrElse(getInteger(this, (aG + e)), 0)
181- let aI = valueOrElse(getInteger(this, (aG + h)), aH)
182- $Tuple2(aH, aI)
187+func aI (aJ) = {
188+ let aK = valueOrElse(getInteger(this, (aJ + f)), 0)
189+ let aL = valueOrElse(getInteger(this, (aJ + i)), aK)
190+ $Tuple2(aK, aL)
183191 }
184192
185193
186-func aJ (aG,aK) = {
187- let aL = aF(aG)
188- let aM = aL._1
189- let aN = aL._2
190- let aO = valueOrElse(getInteger(this, (aG + d)), aK)
191- $Tuple3(aO, aM, aN)
194+func aM (aJ,aN) = {
195+ let aO = aI(aJ)
196+ let aP = aO._1
197+ let aQ = aO._2
198+ let aR = valueOrElse(getInteger(this, (aJ + e)), aN)
199+ $Tuple3(aR, aP, aQ)
192200 }
193201
194202
195-func aP (aG) = valueOrElse(getInteger(this, (aG + k)), 0)
203+func aS (aJ) = valueOrElse(getInteger(this, (aJ + l)), 0)
196204
197205
198-func aQ (aR,aG) = {
199- let aS = valueOrElse(getInteger(af, aR), -1)
200- let aT = valueOrElse(getInteger(af, (toString(aS) + t)), 0)
201- let aU = valueOrElse(getBoolean(af, (toString(aS) + s)), true)
202- let aV = height
203- if ((0 > aS))
206+func aT (aU,aJ) = {
207+ let aV = valueOrElse(getInteger(ah, aU), -1)
208+ let aW = valueOrElse(getInteger(ah, (toString(aV) + u)), 0)
209+ let aX = valueOrElse(getBoolean(ah, (toString(aV) + t)), true)
210+ let aY = height
211+ if ((0 > aV))
204212 then 0
205- else if (!(aU))
213+ else if (!(aX))
206214 then 0
207- else if ((aT > aV))
208- then (valueOrElse(getInteger(af, (((toString(aG) + "_") + toString(aS)) + r)), 0) + valueOrElse(getInteger(af, (((toString(aG) + "_") + toString(aS)) + q)), 0))
215+ else if ((aW > aY))
216+ then (valueOrElse(getInteger(ah, (((toString(aJ) + "_") + toString(aV)) + s)), 0) + valueOrElse(getInteger(ah, (((toString(aJ) + "_") + toString(aV)) + r)), 0))
209217 else 0
210218 }
211219
212220
213-func aW (aG) = {
214- let aX = [aQ(aq, aG), aQ(ar, aG), aQ(as, aG)]
215- max(aX)
221+func aZ (aJ) = {
222+ let ba = [aT(as, aJ), aT(at, aJ), aT(au, aJ)]
223+ max(ba)
216224 }
217225
218226
219-func aY (aG) = {
220- let aZ = toString(valueOrElse(getInteger(ag, A), 0))
221- if ((aZ == "0"))
227+func bb (aJ) = {
228+ let bc = toString(valueOrElse(getInteger(ai, B), 0))
229+ if ((bc == "0"))
222230 then 0
223231 else {
224- let ba = valueOrElse(getInteger(ag, (aZ + C)), 0)
225- let bb = valueOrElse(getInteger(ag, (aZ + B)), 0)
226- let bc = valueOrElse(getInteger(ag, (aZ + H)), 0)
227- let bd = ((ba + bb) + bc)
228- if ((height > bd))
232+ let bd = valueOrElse(getInteger(ai, (bc + D)), 0)
233+ let be = valueOrElse(getInteger(ai, (bc + C)), 0)
234+ let bf = valueOrElse(getInteger(ai, (bc + I)), 0)
235+ let bg = ((bd + be) + bf)
236+ if ((height > bg))
229237 then 0
230238 else {
231- let be = valueOrElse(getInteger(ag, (((toString(aG) + "_") + aZ) + y)), 0)
232- let bf = valueOrElse(getInteger(ag, (aZ + z)), 0)
233- (be * bf)
239+ let bh = valueOrElse(getInteger(ai, (((toString(aJ) + "_") + bc) + z)), 0)
240+ let bi = valueOrElse(getInteger(ai, (bc + A)), 0)
241+ (bh * bi)
234242 }
235243 }
236244 }
237245
238246
239-func bg (aG) = {
240- let bh = if (isDefined(getString(ae, (toString(aG) + G))))
247+func bj (aJ) = {
248+ let bk = if (isDefined(getString(ag, (toString(aJ) + H))))
241249 then {
242- let bi = split(valueOrErrorMessage(getString(ae, (toString(aG) + G)), "Empty kUserTotalStruc"), "_")
243- $Tuple3(parseIntValue(bi[0]), parseIntValue(bi[1]), parseIntValue(bi[2]))
250+ let bl = split(valueOrErrorMessage(getString(ag, (toString(aJ) + H)), "Empty kUserTotalStruc"), "_")
251+ $Tuple3(parseIntValue(bl[0]), parseIntValue(bl[1]), parseIntValue(bl[2]))
244252 }
245253 else {
246- let bj = valueOrElse(getInteger(ae, (toString(aG) + j)), 0)
247- $Tuple3(bj, 0, av)
254+ let bm = valueOrElse(getInteger(ag, (toString(aJ) + k)), 0)
255+ $Tuple3(bm, 0, ay)
248256 }
249- let bk = bh._1
250- let bl = bh._2
251- let bm = bh._3
252- let bn = if ((bm == av))
253- then bl
257+ let bn = bk._1
258+ let bo = bk._2
259+ let bp = bk._3
260+ let bq = if ((bp == ay))
261+ then bo
254262 else 0
255- $Tuple2(bk, bn)
263+ $Tuple2(bn, bq)
256264 }
257265
258266
259-func bo (aR) = valueOrElse(getInteger(this, (aR + n)), 0)
267+func br (aU) = valueOrElse(getInteger(this, (aU + o)), 0)
260268
261269
262-func bp (aR) = isDefined(getInteger(this, (aR + n)))
270+func bs (aU) = isDefined(getInteger(this, (aU + o)))
263271
264272
265-func bq (aR) = valueOrElse(getInteger(this, (aR + l)), 0)
273+func bt (aU) = valueOrElse(getInteger(this, (aU + m)), 0)
266274
267275
268-func br (aR) = valueOrElse(getInteger(this, (aR + m)), 0)
276+func bu (aU) = valueOrElse(getInteger(this, (aU + n)), 0)
269277
270278
271-func bs (aG) = {
272- let aK = aB()
273- let bt = aJ(aG, aK)
274- let aO = bt._1
275- let bu = bt._2
276- let aN = bt._3
277- let bv = fraction(aN, (aK - aO), ak)
278- let bw = aK
279- $Tuple2(bw, bv)
279+func bv (aJ) = {
280+ let aN = aE()
281+ let bw = aM(aJ, aN)
282+ let aR = bw._1
283+ let bx = bw._2
284+ let aQ = bw._3
285+ let by = fraction(aQ, (aN - aR), am)
286+ let bz = aN
287+ $Tuple2(bz, by)
280288 }
281289
282290
283-@Callable(aA)
284-func airDrop () = valueOrElse(ay(), {
285- let bx = $Tuple2(aA.payments[0].amount, aA.payments[0].assetId)
286- let by = bx._1
287- let bz = bx._2
288- if ((bz != aj))
291+func bA (bB) = if (isDefined(getString(V, (U + bB))))
292+ then unit
293+ else throw("DApp is not registered pool")
294+
295+
296+@Callable(aD)
297+func addPool (bB) = valueOrElse(aC(aD), valueOrElse(aB(), valueOrElse(bA(bB), if (isDefined(getInteger(this, (bB + m))))
298+ then throw("Pool already in governance")
299+ else [IntegerEntry((bB + m), 0), IntegerEntry((bB + n), 0), IntegerEntry((bB + o), getIntegerValue(this, p))])))
300+
301+
302+
303+@Callable(aD)
304+func airDrop () = valueOrElse(aB(), {
305+ let bC = $Tuple2(aD.payments[0].amount, aD.payments[0].assetId)
306+ let bD = bC._1
307+ let bE = bC._2
308+ if ((bE != al))
289309 then throw("Incorrect pmtAssetId")
290310 else {
291- let bA = fraction(by, au, am, CEILING)
292- let bB = aC()
293- let bC = bB._1
294- let aE = bB._2
295- let aK = aB()
296- let bD = (aK + fraction((by - bA), ak, aE))
297-[IntegerEntry(c, bD), ScriptTransfer(ah, bA, aj)]
311+ let bF = fraction(bD, ax, ao, CEILING)
312+ let bG = aF()
313+ let bH = bG._1
314+ let aH = bG._2
315+ let aN = aE()
316+ let bI = (aN + fraction((bD - bF), am, aH))
317+[IntegerEntry(d, bI), ScriptTransfer(aj, bF, al)]
298318 }
299319 })
300320
301321
302322
303-@Callable(aA)
304-func lockSWOP () = valueOrElse(ay(), {
305- let bE = $Tuple2(aA.payments[0].amount, aA.payments[0].assetId)
306- let by = bE._1
307- let bz = bE._2
308- if ((bz != aj))
323+@Callable(aD)
324+func lockSWOP () = valueOrElse(aB(), {
325+ let bJ = $Tuple2(aD.payments[0].amount, aD.payments[0].assetId)
326+ let bD = bJ._1
327+ let bE = bJ._2
328+ if ((bE != al))
309329 then throw("Incorrect pmtAssetId")
310330 else {
311- let aG = toString(aA.caller)
312- let aK = aB()
313- let bF = aF(aG)
314- let bu = bF._1
315- let aI = bF._2
316- let bG = bs(aG)
317- let bw = bG._1
318- let bH = bG._2
319- let bI = aP(aG)
320- let bJ = (bI + bH)
321- let bK = (bu + by)
322- let bL = (aI + by)
323- let bM = aC()
324- let bC = bM._1
325- let aE = bM._2
326- let bN = (bC + by)
327- let bO = (aE + by)
328-[IntegerEntry((aG + g), (height + ai)), IntegerEntry((aG + d), bw), IntegerEntry((aG + e), bK), IntegerEntry((aG + h), bL), IntegerEntry((aG + k), bJ), IntegerEntry(f, bN), IntegerEntry(i, bO)]
331+ let aJ = toString(aD.caller)
332+ let aN = aE()
333+ let bK = aI(aJ)
334+ let bx = bK._1
335+ let aL = bK._2
336+ let bL = bv(aJ)
337+ let bz = bL._1
338+ let bM = bL._2
339+ let bN = aS(aJ)
340+ let bO = (bN + bM)
341+ let bP = (bx + bD)
342+ let bQ = (aL + bD)
343+ let bR = aF()
344+ let bH = bR._1
345+ let aH = bR._2
346+ let bS = (bH + bD)
347+ let bT = (aH + bD)
348+[IntegerEntry((aJ + h), (height + ak)), IntegerEntry((aJ + e), bz), IntegerEntry((aJ + f), bP), IntegerEntry((aJ + i), bQ), IntegerEntry((aJ + l), bO), IntegerEntry(g, bS), IntegerEntry(j, bT)]
329349 }
330350 })
331351
332352
333353
334-@Callable(aA)
335-func withdrawSWOP (bP) = valueOrElse(ay(), {
336- let aG = toString(aA.caller)
337- let bQ = valueOrElse(getInteger(this, (aG + g)), 0)
338- if ((0 >= bP))
354+@Callable(aD)
355+func withdrawSWOP (bU) = valueOrElse(aB(), {
356+ let aJ = toString(aD.caller)
357+ let bV = valueOrElse(getInteger(this, (aJ + h)), 0)
358+ if ((0 >= bU))
339359 then throw("withdrawAmount <= 0")
340- else if ((bQ > height))
341- then throw(("You can't withdraw till " + toString(bQ)))
360+ else if ((bV > height))
361+ then throw(("You can't withdraw till " + toString(bV)))
342362 else {
343- let bR = aC()
344- let bC = bR._1
345- let aE = bR._2
346- let bS = aF(aG)
347- let bu = bS._1
348- let aI = bS._2
349- let bT = bs(aG)
350- let bw = bT._1
351- let bH = bT._2
352- let bU = bg(aA.caller)
353- let bV = bU._1
354- let bW = bU._2
355- let bX = aW(aA.caller)
356- let bY = aY(aA.caller)
357- if (if (if ((0 > bW))
363+ let bW = aF()
364+ let bH = bW._1
365+ let aH = bW._2
366+ let bX = aI(aJ)
367+ let bx = bX._1
368+ let aL = bX._2
369+ let bY = bv(aJ)
370+ let bz = bY._1
371+ let bM = bY._2
372+ let bZ = bj(aD.caller)
373+ let ca = bZ._1
374+ let cb = bZ._2
375+ let cc = aZ(aD.caller)
376+ let cd = bb(aD.caller)
377+ if (if (if ((0 > cb))
358378 then true
359- else (0 > bV))
379+ else (0 > ca))
360380 then true
361- else (0 > bX))
381+ else (0 > cc))
362382 then throw("userUnvoteAmount < 0 || userVoteAmount < 0 || userVoteAmountForNewPool < 0")
363383 else {
364- let bZ = (bu - max([bX, (bV + bW), bY]))
365- if ((bP > bZ))
384+ let ce = (bx - max([cc, (ca + cb), cd]))
385+ if ((bU > ce))
366386 then throw("withdrawAmount > availableToUnstake")
367387 else {
368- let bI = aP(aG)
369- let bJ = (bI + bH)
370- let bN = (bC - bP)
371- let ca = (bu - bP)
372- let bO = ((aE - aI) + ca)
373-[IntegerEntry((aG + d), bw), IntegerEntry((aG + e), ca), IntegerEntry((aG + h), ca), IntegerEntry((aG + k), bJ), IntegerEntry(f, bN), IntegerEntry(i, bO), ScriptTransfer(aA.caller, bP, aj)]
388+ let bN = aS(aJ)
389+ let bO = (bN + bM)
390+ let bS = (bH - bU)
391+ let cf = (bx - bU)
392+ let bT = ((aH - aL) + cf)
393+[IntegerEntry((aJ + e), bz), IntegerEntry((aJ + f), cf), IntegerEntry((aJ + i), cf), IntegerEntry((aJ + l), bO), IntegerEntry(g, bS), IntegerEntry(j, bT), ScriptTransfer(aD.caller, bU, al)]
374394 }
375395 }
376396 }
378398
379399
380400
381-@Callable(aA)
382-func claimAndWithdrawSWOP () = valueOrElse(ay(), {
383- let aG = toString(aA.caller)
384- let bI = aP(aG)
385- let cb = bs(aG)
386- let bw = cb._1
387- let bv = cb._2
388- let cc = (bI + bv)
389- if ((cc == 0))
401+@Callable(aD)
402+func claimAndWithdrawSWOP () = valueOrElse(aB(), {
403+ let aJ = toString(aD.caller)
404+ let bN = aS(aJ)
405+ let cg = bv(aJ)
406+ let bz = cg._1
407+ let by = cg._2
408+ let ch = (bN + by)
409+ if ((ch == 0))
390410 then throw("You have 0 available SWOP")
391- else [IntegerEntry((aG + d), bw), ScriptTransfer(aA.caller, cc, aj)]
411+ else [IntegerEntry((aJ + e), bz), IntegerEntry((aJ + l), 0), ScriptTransfer(aD.caller, ch, al)]
392412 })
393413
394414
395415
396-@Callable(aA)
397-func claimAndStakeSWOP () = valueOrElse(ay(), {
398- let aG = toString(aA.caller)
399- let cd = aC()
400- let bC = cd._1
401- let aE = cd._2
402- let ce = aF(aG)
403- let bu = ce._1
404- let aI = ce._2
405- let bI = aP(aG)
406- let cf = bs(aG)
407- let bw = cf._1
408- let bv = cf._2
409- let cc = (bI + bv)
410- let bK = (bu + cc)
411- let bL = (aI + (cc * 2))
412- let bN = (bC + cc)
413- let bO = (aE + (cc * 2))
414- if ((cc == 0))
416+@Callable(aD)
417+func claimAndStakeSWOP () = valueOrElse(aB(), {
418+ let aJ = toString(aD.caller)
419+ let ci = aF()
420+ let bH = ci._1
421+ let aH = ci._2
422+ let cj = aI(aJ)
423+ let bx = cj._1
424+ let aL = cj._2
425+ let bN = aS(aJ)
426+ let ck = bv(aJ)
427+ let bz = ck._1
428+ let by = ck._2
429+ let ch = (bN + by)
430+ let bP = (bx + ch)
431+ let bQ = (aL + (ch * 2))
432+ let bS = (bH + ch)
433+ let bT = (aH + (ch * 2))
434+ if ((ch == 0))
415435 then throw("You have 0 available SWOP")
416- else [IntegerEntry((toString(aA.caller) + g), (height + ai)), IntegerEntry((toString(aA.caller) + d), bw), IntegerEntry(f, bN), IntegerEntry(i, bO), IntegerEntry((toString(aA.caller) + e), bK), IntegerEntry((toString(aA.caller) + h), bL)]
436+ else [IntegerEntry((toString(aD.caller) + h), (height + ak)), IntegerEntry((toString(aD.caller) + e), bz), IntegerEntry(g, bS), IntegerEntry(j, bT), IntegerEntry((toString(aD.caller) + f), bP), IntegerEntry((toString(aD.caller) + i), bQ), IntegerEntry((aJ + l), 0)]
417437 })
418438
419439
420440
421-@Callable(aA)
422-func lockSWOPFromFarming () = valueOrElse(ay(), {
423- let cg = $Tuple2(aA.payments[0].amount, aA.payments[0].assetId)
424- let by = cg._1
425- let bz = cg._2
426- if ((aA.caller != ad))
441+@Callable(aD)
442+func lockSWOPFromFarming () = valueOrElse(aB(), {
443+ let cl = $Tuple2(aD.payments[0].amount, aD.payments[0].assetId)
444+ let bD = cl._1
445+ let bE = cl._2
446+ if ((aD.caller != af))
427447 then throw("Only farming can call this function")
428- else if ((bz != aj))
448+ else if ((bE != al))
429449 then throw("Incorrect pmtAssetId")
430450 else {
431- let aG = toString(aA.originCaller)
432- let aK = aB()
433- let ch = aF(aG)
434- let bu = ch._1
435- let aI = ch._2
436- let ci = bs(aG)
437- let bw = ci._1
438- let bH = ci._2
439- let bI = aP(aG)
440- let bJ = (bI + bH)
441- let bK = (bu + by)
442- let bL = (aI + (by * 2))
443- let cj = aC()
444- let bC = cj._1
445- let aE = cj._2
446- let bN = (bC + by)
447- let bO = (aE + (by * 2))
448-[IntegerEntry((aG + g), (height + ai)), IntegerEntry((aG + d), bw), IntegerEntry((aG + e), bK), IntegerEntry((aG + h), aI), IntegerEntry((aG + k), bJ), IntegerEntry(f, bN), IntegerEntry(i, bO)]
451+ let aJ = toString(aD.originCaller)
452+ let aN = aE()
453+ let cm = aI(aJ)
454+ let bx = cm._1
455+ let aL = cm._2
456+ let cn = bv(aJ)
457+ let bz = cn._1
458+ let bM = cn._2
459+ let bN = aS(aJ)
460+ let bO = (bN + bM)
461+ let bP = (bx + bD)
462+ let bQ = (aL + (bD * 2))
463+ let co = aF()
464+ let bH = co._1
465+ let aH = co._2
466+ let bS = (bH + bD)
467+ let bT = (aH + (bD * 2))
468+[IntegerEntry((aJ + h), (height + ak)), IntegerEntry((aJ + e), bz), IntegerEntry((aJ + f), bP), IntegerEntry((aJ + i), aL), IntegerEntry((aJ + l), bO), IntegerEntry(g, bS), IntegerEntry(j, bT)]
449469 }
450470 })
451471
452472
453473
454-@Callable(aA)
455-func updateWeights (ck,cl,cm,cn) = valueOrElse(ay(), {
456- let co = 10
457- let cp = valueOrElse(getInteger(this, o), 0)
458- if (!(containsElement([Z, aa, ab, ac], aA.callerPublicKey)))
474+@Callable(aD)
475+func updateWeights (cp,cq,cr,cs) = valueOrElse(aB(), {
476+ let ct = 10
477+ let cu = valueOrElse(getInteger(this, p), 0)
478+ if (!(containsElement([ab, ac, ad, ae], aD.callerPublicKey)))
459479 then throw("Only admin can call this function")
460- else if ((size(ck) > co))
461- then throw(("Max amount of pool is " + toString(co)))
462- else if ((cp >= cm))
480+ else if ((size(cp) > ct))
481+ then throw(("Max amount of pool is " + toString(ct)))
482+ else if ((cu >= cr))
463483 then throw("rewardUpdateHeight <= totalRewardUpdateHeight")
464- else if ((height >= cm))
484+ else if ((height >= cr))
465485 then throw("height >= rewardUpdateHeight")
466- else if ((0 >= cm))
486+ else if ((0 >= cr))
467487 then throw("0 >= rewardUpdateHeight ")
468488 else {
469- func cq (cr,cs) = (cr + cs)
489+ func cv (cw,cx) = (cw + cx)
470490
471- func ct (cu,aR) = {
472- let cv = bo(aR)
473- if (if (!(bp(aR)))
491+ func cy (cz,aU) = {
492+ let cA = br(aU)
493+ if (if (!(bs(aU)))
474494 then true
475- else if ((cm != cv))
476- then (cv == cp)
495+ else if ((cr != cA))
496+ then (cA == cu)
477497 else false)
478498 then {
479- let cw = bq(aR)
480-IntegerEntry((aR + m), cw) :: cu
499+ let cB = bt(aU)
500+IntegerEntry((aU + n), cB) :: cz
481501 }
482502 else {
483- let cw = br(aR)
484-IntegerEntry((aR + m), cw) :: cu
503+ let cB = bu(aU)
504+IntegerEntry((aU + n), cB) :: cz
485505 }
486506 }
487507
488- func cx (cu,aR) = {
489- let cy = value(indexOf(ck, aR))
490- let cw = cl[cy]
491- if ((0 > cw))
508+ func cC (cz,aU) = {
509+ let cD = value(indexOf(cp, aU))
510+ let cB = cq[cD]
511+ if ((0 > cB))
492512 then throw("PoolReward < 0")
493- else IntegerEntry((aR + l), cw) :: cu
513+ else IntegerEntry((aU + m), cB) :: cz
494514 }
495515
496- func cz (cu,aR) = {
497- let cA = cm
498- let cB = invoke(ad, "updatePoolInterest", [aR], nil)
499- if ((cB == cB))
500- then IntegerEntry((aR + n), cA) :: cu
516+ func cE (cz,aU) = {
517+ let cF = cr
518+ let cG = invoke(af, "updatePoolInterest", [aU], nil)
519+ if ((cG == cG))
520+ then IntegerEntry((aU + o), cF) :: cz
501521 else throw("Strict value is not equal to itself.")
502522 }
503523
504- func cC (cD,cn) = if ((cn == 0))
505- then if ((cD > al))
506- then throw(((("sumRewardPrevious > totalVoteShare or sumRewardCurrent > totalVoteShare - " + toString(cn)) + " ") + toString(cD)))
507- else $Tuple2([IntegerEntry(x, cD)], [IntegerEntry(p, cm)])
508- else if ((cn == 1))
524+ func cH (cI,cs) = if ((cs == 0))
525+ then if ((cI > an))
526+ then throw(((("sumRewardPrevious > totalVoteShare or sumRewardCurrent > totalVoteShare - " + toString(cs)) + " ") + toString(cI)))
527+ else $Tuple2([IntegerEntry(y, cI)], [IntegerEntry(q, cr)])
528+ else if ((cs == 1))
509529 then {
510- let cE = valueOrElse(getInteger(this, x), 0)
511- let cF = valueOrElse(getInteger(this, p), 0)
512- if (((cD + cE) > al))
513- then throw(((("sumRewardPrevious > totalVoteShare or sumRewardCurrent > totalVoteShare - " + toString(cn)) + " ") + toString((cD + cE))))
514- else if ((cF != cm))
530+ let cJ = valueOrElse(getInteger(this, y), 0)
531+ let cK = valueOrElse(getInteger(this, q), 0)
532+ if (((cI + cJ) > an))
533+ then throw(((("sumRewardPrevious > totalVoteShare or sumRewardCurrent > totalVoteShare - " + toString(cs)) + " ") + toString((cI + cJ))))
534+ else if ((cK != cr))
515535 then throw("current rewardUpdateHeight != rewardUpdateHeightFirstPaginationEntry")
516- else $Tuple2([IntegerEntry(x, (cD + cE))], nil)
536+ else $Tuple2([IntegerEntry(y, (cI + cJ))], nil)
517537 }
518- else if ((cn == 2))
538+ else if ((cs == 2))
519539 then {
520- let cG = (valueOrElse(getInteger(this, x), 0) + cD)
521- let cF = valueOrElse(getInteger(this, p), 0)
522- if ((cG != al))
540+ let cL = (valueOrElse(getInteger(this, y), 0) + cI)
541+ let cK = valueOrElse(getInteger(this, q), 0)
542+ if ((cL != an))
523543 then throw("sumRewardPrevious != totalVoteShare or sumRewardCurrent != totalVoteShare")
524- else if ((cF != cm))
544+ else if ((cK != cr))
525545 then throw("current rewardUpdateHeight != rewardUpdateHeightFirstPaginationEntry")
526- else $Tuple2([IntegerEntry(x, cG)], nil)
546+ else $Tuple2([IntegerEntry(y, cL)], nil)
527547 }
528548 else throw("Incorrect pagination")
529549
530- let cH = {
531- let cI = ck
532- let cJ = size(cI)
533- let cK = nil
534- func cL (cM,cN) = if ((cN >= cJ))
535- then cM
536- else ct(cM, cI[cN])
550+ let cM = {
551+ let cN = cp
552+ let cO = size(cN)
553+ let cP = nil
554+ func cQ (cR,cS) = if ((cS >= cO))
555+ then cR
556+ else cy(cR, cN[cS])
537557
538- func cO (cM,cN) = if ((cN >= cJ))
539- then cM
558+ func cT (cR,cS) = if ((cS >= cO))
559+ then cR
540560 else throw("List size exceeds 10")
541561
542- cO(cL(cL(cL(cL(cL(cL(cL(cL(cL(cL(cK, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
562+ cT(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
543563 }
544- let cP = {
545- let cI = ck
546- let cJ = size(cI)
547- let cK = nil
548- func cQ (cM,cN) = if ((cN >= cJ))
549- then cM
550- else cx(cM, cI[cN])
564+ let cU = {
565+ let cN = cp
566+ let cO = size(cN)
567+ let cP = nil
568+ func cV (cR,cS) = if ((cS >= cO))
569+ then cR
570+ else cC(cR, cN[cS])
551571
552- func cR (cM,cN) = if ((cN >= cJ))
553- then cM
572+ func cW (cR,cS) = if ((cS >= cO))
573+ then cR
554574 else throw("List size exceeds 10")
555575
556- cR(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cK, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
576+ cW(cV(cV(cV(cV(cV(cV(cV(cV(cV(cV(cP, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
557577 }
558- let cS = {
559- let cI = ck
560- let cJ = size(cI)
561- let cK = nil
562- func cT (cM,cN) = if ((cN >= cJ))
563- then cM
564- else cz(cM, cI[cN])
578+ let cX = {
579+ let cN = cp
580+ let cO = size(cN)
581+ let cP = nil
582+ func cY (cR,cS) = if ((cS >= cO))
583+ then cR
584+ else cE(cR, cN[cS])
565585
566- func cU (cM,cN) = if ((cN >= cJ))
567- then cM
586+ func cZ (cR,cS) = if ((cS >= cO))
587+ then cR
568588 else throw("List size exceeds 10")
569589
570- cU(cT(cT(cT(cT(cT(cT(cT(cT(cT(cT(cK, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
590+ cZ(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cP, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
571591 }
572- let cV = {
573- let cI = cl
574- let cJ = size(cI)
575- let cK = 0
576- func cW (cM,cN) = if ((cN >= cJ))
577- then cM
578- else cq(cM, cI[cN])
592+ let da = {
593+ let cN = cq
594+ let cO = size(cN)
595+ let cP = 0
596+ func db (cR,cS) = if ((cS >= cO))
597+ then cR
598+ else cv(cR, cN[cS])
579599
580- func cX (cM,cN) = if ((cN >= cJ))
581- then cM
600+ func dc (cR,cS) = if ((cS >= cO))
601+ then cR
582602 else throw("List size exceeds 10")
583603
584- cX(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cK, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
604+ dc(db(db(db(db(db(db(db(db(db(db(cP, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
585605 }
586- let cY = cC(cV, cn)
587- let cZ = cY._1
588- let cF = cY._2
589- let da = if ((cn == 2))
590- then [IntegerEntry(o, cm)]
606+ let dd = cH(da, cs)
607+ let de = dd._1
608+ let cK = dd._2
609+ let df = if ((cs == 2))
610+ then [IntegerEntry(p, cr)]
591611 else nil
592- if ((height > cm))
612+ if ((height > cr))
593613 then throw("rewardUpdateHeight < height")
594- else (((((cH ++ cP) ++ cS) ++ cZ) ++ da) ++ cF)
614+ else (((((cM ++ cU) ++ cX) ++ de) ++ df) ++ cK)
595615 }
596616 })
597617
598618
599619
600-@Callable(aA)
601-func shutdown () = valueOrElse(az(aA), if (!(at))
602- then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, b), "the cause wasn't specified")))
603- else aw("Paused by admin"))
620+@Callable(aD)
621+func shutdown () = valueOrElse(aC(aD), if (!(av))
622+ then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, c), "the cause wasn't specified")))
623+ else az("Paused by admin"))
604624
605625
606626
607-@Callable(aA)
608-func activate () = valueOrElse(az(aA), if (at)
627+@Callable(aD)
628+func activate () = valueOrElse(aC(aD), if (av)
609629 then throw("DApp is already active")
610- else [BooleanEntry(a, true), DeleteEntry(b)])
630+ else [BooleanEntry(a, true), DeleteEntry(c)])
611631
612632
613-@Verifier(db)
614-func dc () = {
615- let dd = if (sigVerify(db.bodyBytes, db.proofs[0], Z))
633+@Verifier(dg)
634+func dh () = {
635+ let di = if (sigVerify(dg.bodyBytes, dg.proofs[0], ab))
616636 then 1
617637 else 0
618- let de = if (sigVerify(db.bodyBytes, db.proofs[1], aa))
638+ let dj = if (sigVerify(dg.bodyBytes, dg.proofs[1], ac))
619639 then 1
620640 else 0
621- let df = if (sigVerify(db.bodyBytes, db.proofs[2], ab))
641+ let dk = if (sigVerify(dg.bodyBytes, dg.proofs[2], ad))
622642 then 1
623643 else 0
624- (((dd + de) + df) >= 2)
644+ (((di + dj) + dk) >= 2)
625645 }
626646
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = "active"
55
6-let b = "shutdown_cause"
6+let b = "active_all_contracts"
77
8-let c = "last_interest"
8+let c = "shutdown_cause"
99
10-let d = "_last_interest"
10+let d = "last_interest"
1111
12-let e = "_SWOP_amount"
12+let e = "_last_interest"
1313
14-let f = "total_SWOP_amount"
14+let f = "_SWOP_amount"
1515
16-let g = "_SWOP_unlock_height"
16+let g = "total_SWOP_amount"
1717
18-let h = "_GSwop_amount"
18+let h = "_SWOP_unlock_height"
1919
20-let i = "total_GSwop_amount"
20+let i = "_GSwop_amount"
2121
22-let j = "_user_total_vote_gSWOP"
22+let j = "total_GSwop_amount"
2323
24-let k = "_user_available_for_claim"
24+let k = "_user_total_vote_gSWOP"
2525
26-let l = "_current_pool_fraction_reward"
26+let l = "_user_available_for_claim"
2727
28-let m = "_previous_pool_fraction_reward"
28+let m = "_current_pool_fraction_reward"
2929
30-let n = "_pool_reward_update_height"
30+let n = "_previous_pool_fraction_reward"
3131
32-let o = "reward_update_height"
32+let o = "_pool_reward_update_height"
3333
34-let p = "reward_update_height_first_pagination"
34+let p = "reward_update_height"
3535
36-let q = "_vote_no"
36+let q = "reward_update_height_first_pagination"
3737
38-let r = "_vote_yes"
38+let r = "_vote_no"
3939
40-let s = "_status"
40+let s = "_vote_yes"
4141
42-let t = "_finish_height"
42+let t = "_status"
4343
44-let u = "voting_active_cell_1"
44+let u = "_finish_height"
4545
46-let v = "voting_active_cell_2"
46+let v = "voting_active_cell_1"
4747
48-let w = "voting_active_cell_3"
48+let w = "voting_active_cell_2"
4949
50-let x = "sum_reward_current"
50+let x = "voting_active_cell_3"
5151
52-let y = "_bought_tickets"
52+let y = "sum_reward_current"
5353
54-let z = "_swop_per_ticket"
54+let z = "_bought_tickets"
5555
56-let A = "launchpad_active_id"
56+let A = "_swop_per_ticket"
5757
58-let B = "_duration"
58+let B = "launchpad_active_id"
5959
60-let C = "_start_height"
60+let C = "_duration"
6161
62-let D = "start_height"
62+let D = "_start_height"
6363
64-let E = "base_period"
64+let E = "start_height"
6565
66-let F = "period_length"
66+let F = "base_period"
6767
68-let G = "_user_total_struc"
68+let G = "period_length"
6969
70-let H = "_freeze_swop_duration"
70+let H = "_user_total_struc"
7171
72-let I = "SWOP_id"
72+let I = "_freeze_swop_duration"
7373
74-let J = "airdrop_fee"
74+let J = "SWOP_id"
7575
76-let K = "admin_pub_1"
76+let K = "airdrop_fee"
7777
78-let L = "admin_pub_2"
78+let L = "admin_pub_1"
7979
80-let M = "admin_pub_3"
80+let M = "admin_pub_2"
8181
82-let N = "money_box_pub_key"
82+let N = "admin_pub_3"
8383
84-let O = "farming_address"
84+let O = "money_box_pub_key"
8585
86-let P = "voting_address"
86+let P = "farming_address"
8787
88-let Q = "voting_new_pool_address"
88+let Q = "voting_address"
8989
90-let R = "launchpad_address"
90+let R = "voting_new_pool_address"
9191
92-let S = "airdrop_fee_money_box"
92+let S = "launchpad_address"
9393
94-let T = Address(base58'3MvVBtsXroQpy1tsPw21TU2ET9A8WfmrNjz')
94+let T = "airdrop_fee_money_box"
9595
96-func U (V) = {
97- let W = getString(T, V)
98- if ($isInstanceOf(W, "String"))
96+let U = "pool_"
97+
98+let V = Address(base58'3MvVBtsXroQpy1tsPw21TU2ET9A8WfmrNjz')
99+
100+func W (X) = {
101+ let Y = getString(V, X)
102+ if ($isInstanceOf(Y, "String"))
99103 then {
100- let X = W
101- fromBase58String(X)
104+ let Z = Y
105+ fromBase58String(Z)
102106 }
103107 else {
104- let Y = W
105- throw((V + "is empty"))
108+ let aa = Y
109+ throw((X + "is empty"))
106110 }
107111 }
108112
109113
110-let Z = U(K)
114+let ab = W(L)
111115
112-let aa = U(L)
116+let ac = W(M)
113117
114-let ab = U(M)
118+let ad = W(N)
115119
116-let ac = U(N)
120+let ae = W(O)
117121
118-let ad = Address(U(O))
122+let af = Address(W(P))
119123
120-let ae = Address(U(P))
124+let ag = Address(W(Q))
121125
122-let af = Address(U(Q))
126+let ah = Address(W(R))
123127
124-let ag = Address(U(R))
128+let ai = Address(W(S))
125129
126-let ah = Address(U(S))
130+let aj = Address(W(T))
127131
128-let ai = (10102 * 4)
132+let ak = (10102 * 4)
129133
130-let aj = fromBase58String(getStringValue(ad, I))
134+let al = fromBase58String(getStringValue(af, J))
131135
132-let ak = 100000000
136+let am = 100000000
133137
134-let al = 10000000000
138+let an = 10000000000
135139
136-let am = 1000000
140+let ao = 1000000
137141
138-let an = valueOrErrorMessage(getInteger(ae, E), "Empty kBasePeriod at voting contract")
142+let ap = valueOrErrorMessage(getInteger(ag, F), "Empty kBasePeriod at voting contract")
139143
140-let ao = valueOrErrorMessage(getInteger(ae, D), "Empty kStartHeight at voting contract")
144+let aq = valueOrErrorMessage(getInteger(ag, E), "Empty kStartHeight at voting contract")
141145
142-let ap = valueOrErrorMessage(getInteger(ae, F), "Empty kPeriodLength at voting contract")
146+let ar = valueOrErrorMessage(getInteger(ag, G), "Empty kPeriodLength at voting contract")
143147
144-let aq = valueOrElse(getString(af, u), "")
148+let as = valueOrElse(getString(ah, v), "")
145149
146-let ar = valueOrElse(getString(af, v), "")
150+let at = valueOrElse(getString(ah, w), "")
147151
148-let as = valueOrElse(getString(af, w), "")
152+let au = valueOrElse(getString(ah, x), "")
149153
150-let at = valueOrElse(getBoolean(this, a), true)
154+let av = valueOrElse(getBoolean(this, a), true)
151155
152-let au = getIntegerValue(T, J)
156+let aw = valueOrElse(getBoolean(V, b), true)
153157
154-let av = (an + ((height - ao) / ap))
158+let ax = getIntegerValue(V, K)
155159
156-func aw (ax) = [BooleanEntry(a, false), StringEntry(b, ax)]
160+let ay = (ap + ((height - aq) / ar))
161+
162+func az (aA) = [BooleanEntry(a, false), StringEntry(c, aA)]
157163
158164
159-func ay () = if (at)
165+func aB () = if (if (av)
166+ then aw
167+ else false)
160168 then unit
161169 else throw("DApp is inactive at this moment")
162170
163171
164-func az (aA) = if (containsElement([Z, aa, ab], aA.callerPublicKey))
172+func aC (aD) = if (containsElement([ab, ac, ad], aD.callerPublicKey))
165173 then unit
166174 else throw("Only admin can call this function")
167175
168176
169-func aB () = valueOrElse(getInteger(this, c), 0)
177+func aE () = valueOrElse(getInteger(this, d), 0)
170178
171179
172-func aC () = {
173- let aD = valueOrElse(getInteger(this, f), 0)
174- let aE = valueOrElse(getInteger(this, i), aD)
175- $Tuple2(aD, aE)
180+func aF () = {
181+ let aG = valueOrElse(getInteger(this, g), 0)
182+ let aH = valueOrElse(getInteger(this, j), aG)
183+ $Tuple2(aG, aH)
176184 }
177185
178186
179-func aF (aG) = {
180- let aH = valueOrElse(getInteger(this, (aG + e)), 0)
181- let aI = valueOrElse(getInteger(this, (aG + h)), aH)
182- $Tuple2(aH, aI)
187+func aI (aJ) = {
188+ let aK = valueOrElse(getInteger(this, (aJ + f)), 0)
189+ let aL = valueOrElse(getInteger(this, (aJ + i)), aK)
190+ $Tuple2(aK, aL)
183191 }
184192
185193
186-func aJ (aG,aK) = {
187- let aL = aF(aG)
188- let aM = aL._1
189- let aN = aL._2
190- let aO = valueOrElse(getInteger(this, (aG + d)), aK)
191- $Tuple3(aO, aM, aN)
194+func aM (aJ,aN) = {
195+ let aO = aI(aJ)
196+ let aP = aO._1
197+ let aQ = aO._2
198+ let aR = valueOrElse(getInteger(this, (aJ + e)), aN)
199+ $Tuple3(aR, aP, aQ)
192200 }
193201
194202
195-func aP (aG) = valueOrElse(getInteger(this, (aG + k)), 0)
203+func aS (aJ) = valueOrElse(getInteger(this, (aJ + l)), 0)
196204
197205
198-func aQ (aR,aG) = {
199- let aS = valueOrElse(getInteger(af, aR), -1)
200- let aT = valueOrElse(getInteger(af, (toString(aS) + t)), 0)
201- let aU = valueOrElse(getBoolean(af, (toString(aS) + s)), true)
202- let aV = height
203- if ((0 > aS))
206+func aT (aU,aJ) = {
207+ let aV = valueOrElse(getInteger(ah, aU), -1)
208+ let aW = valueOrElse(getInteger(ah, (toString(aV) + u)), 0)
209+ let aX = valueOrElse(getBoolean(ah, (toString(aV) + t)), true)
210+ let aY = height
211+ if ((0 > aV))
204212 then 0
205- else if (!(aU))
213+ else if (!(aX))
206214 then 0
207- else if ((aT > aV))
208- then (valueOrElse(getInteger(af, (((toString(aG) + "_") + toString(aS)) + r)), 0) + valueOrElse(getInteger(af, (((toString(aG) + "_") + toString(aS)) + q)), 0))
215+ else if ((aW > aY))
216+ then (valueOrElse(getInteger(ah, (((toString(aJ) + "_") + toString(aV)) + s)), 0) + valueOrElse(getInteger(ah, (((toString(aJ) + "_") + toString(aV)) + r)), 0))
209217 else 0
210218 }
211219
212220
213-func aW (aG) = {
214- let aX = [aQ(aq, aG), aQ(ar, aG), aQ(as, aG)]
215- max(aX)
221+func aZ (aJ) = {
222+ let ba = [aT(as, aJ), aT(at, aJ), aT(au, aJ)]
223+ max(ba)
216224 }
217225
218226
219-func aY (aG) = {
220- let aZ = toString(valueOrElse(getInteger(ag, A), 0))
221- if ((aZ == "0"))
227+func bb (aJ) = {
228+ let bc = toString(valueOrElse(getInteger(ai, B), 0))
229+ if ((bc == "0"))
222230 then 0
223231 else {
224- let ba = valueOrElse(getInteger(ag, (aZ + C)), 0)
225- let bb = valueOrElse(getInteger(ag, (aZ + B)), 0)
226- let bc = valueOrElse(getInteger(ag, (aZ + H)), 0)
227- let bd = ((ba + bb) + bc)
228- if ((height > bd))
232+ let bd = valueOrElse(getInteger(ai, (bc + D)), 0)
233+ let be = valueOrElse(getInteger(ai, (bc + C)), 0)
234+ let bf = valueOrElse(getInteger(ai, (bc + I)), 0)
235+ let bg = ((bd + be) + bf)
236+ if ((height > bg))
229237 then 0
230238 else {
231- let be = valueOrElse(getInteger(ag, (((toString(aG) + "_") + aZ) + y)), 0)
232- let bf = valueOrElse(getInteger(ag, (aZ + z)), 0)
233- (be * bf)
239+ let bh = valueOrElse(getInteger(ai, (((toString(aJ) + "_") + bc) + z)), 0)
240+ let bi = valueOrElse(getInteger(ai, (bc + A)), 0)
241+ (bh * bi)
234242 }
235243 }
236244 }
237245
238246
239-func bg (aG) = {
240- let bh = if (isDefined(getString(ae, (toString(aG) + G))))
247+func bj (aJ) = {
248+ let bk = if (isDefined(getString(ag, (toString(aJ) + H))))
241249 then {
242- let bi = split(valueOrErrorMessage(getString(ae, (toString(aG) + G)), "Empty kUserTotalStruc"), "_")
243- $Tuple3(parseIntValue(bi[0]), parseIntValue(bi[1]), parseIntValue(bi[2]))
250+ let bl = split(valueOrErrorMessage(getString(ag, (toString(aJ) + H)), "Empty kUserTotalStruc"), "_")
251+ $Tuple3(parseIntValue(bl[0]), parseIntValue(bl[1]), parseIntValue(bl[2]))
244252 }
245253 else {
246- let bj = valueOrElse(getInteger(ae, (toString(aG) + j)), 0)
247- $Tuple3(bj, 0, av)
254+ let bm = valueOrElse(getInteger(ag, (toString(aJ) + k)), 0)
255+ $Tuple3(bm, 0, ay)
248256 }
249- let bk = bh._1
250- let bl = bh._2
251- let bm = bh._3
252- let bn = if ((bm == av))
253- then bl
257+ let bn = bk._1
258+ let bo = bk._2
259+ let bp = bk._3
260+ let bq = if ((bp == ay))
261+ then bo
254262 else 0
255- $Tuple2(bk, bn)
263+ $Tuple2(bn, bq)
256264 }
257265
258266
259-func bo (aR) = valueOrElse(getInteger(this, (aR + n)), 0)
267+func br (aU) = valueOrElse(getInteger(this, (aU + o)), 0)
260268
261269
262-func bp (aR) = isDefined(getInteger(this, (aR + n)))
270+func bs (aU) = isDefined(getInteger(this, (aU + o)))
263271
264272
265-func bq (aR) = valueOrElse(getInteger(this, (aR + l)), 0)
273+func bt (aU) = valueOrElse(getInteger(this, (aU + m)), 0)
266274
267275
268-func br (aR) = valueOrElse(getInteger(this, (aR + m)), 0)
276+func bu (aU) = valueOrElse(getInteger(this, (aU + n)), 0)
269277
270278
271-func bs (aG) = {
272- let aK = aB()
273- let bt = aJ(aG, aK)
274- let aO = bt._1
275- let bu = bt._2
276- let aN = bt._3
277- let bv = fraction(aN, (aK - aO), ak)
278- let bw = aK
279- $Tuple2(bw, bv)
279+func bv (aJ) = {
280+ let aN = aE()
281+ let bw = aM(aJ, aN)
282+ let aR = bw._1
283+ let bx = bw._2
284+ let aQ = bw._3
285+ let by = fraction(aQ, (aN - aR), am)
286+ let bz = aN
287+ $Tuple2(bz, by)
280288 }
281289
282290
283-@Callable(aA)
284-func airDrop () = valueOrElse(ay(), {
285- let bx = $Tuple2(aA.payments[0].amount, aA.payments[0].assetId)
286- let by = bx._1
287- let bz = bx._2
288- if ((bz != aj))
291+func bA (bB) = if (isDefined(getString(V, (U + bB))))
292+ then unit
293+ else throw("DApp is not registered pool")
294+
295+
296+@Callable(aD)
297+func addPool (bB) = valueOrElse(aC(aD), valueOrElse(aB(), valueOrElse(bA(bB), if (isDefined(getInteger(this, (bB + m))))
298+ then throw("Pool already in governance")
299+ else [IntegerEntry((bB + m), 0), IntegerEntry((bB + n), 0), IntegerEntry((bB + o), getIntegerValue(this, p))])))
300+
301+
302+
303+@Callable(aD)
304+func airDrop () = valueOrElse(aB(), {
305+ let bC = $Tuple2(aD.payments[0].amount, aD.payments[0].assetId)
306+ let bD = bC._1
307+ let bE = bC._2
308+ if ((bE != al))
289309 then throw("Incorrect pmtAssetId")
290310 else {
291- let bA = fraction(by, au, am, CEILING)
292- let bB = aC()
293- let bC = bB._1
294- let aE = bB._2
295- let aK = aB()
296- let bD = (aK + fraction((by - bA), ak, aE))
297-[IntegerEntry(c, bD), ScriptTransfer(ah, bA, aj)]
311+ let bF = fraction(bD, ax, ao, CEILING)
312+ let bG = aF()
313+ let bH = bG._1
314+ let aH = bG._2
315+ let aN = aE()
316+ let bI = (aN + fraction((bD - bF), am, aH))
317+[IntegerEntry(d, bI), ScriptTransfer(aj, bF, al)]
298318 }
299319 })
300320
301321
302322
303-@Callable(aA)
304-func lockSWOP () = valueOrElse(ay(), {
305- let bE = $Tuple2(aA.payments[0].amount, aA.payments[0].assetId)
306- let by = bE._1
307- let bz = bE._2
308- if ((bz != aj))
323+@Callable(aD)
324+func lockSWOP () = valueOrElse(aB(), {
325+ let bJ = $Tuple2(aD.payments[0].amount, aD.payments[0].assetId)
326+ let bD = bJ._1
327+ let bE = bJ._2
328+ if ((bE != al))
309329 then throw("Incorrect pmtAssetId")
310330 else {
311- let aG = toString(aA.caller)
312- let aK = aB()
313- let bF = aF(aG)
314- let bu = bF._1
315- let aI = bF._2
316- let bG = bs(aG)
317- let bw = bG._1
318- let bH = bG._2
319- let bI = aP(aG)
320- let bJ = (bI + bH)
321- let bK = (bu + by)
322- let bL = (aI + by)
323- let bM = aC()
324- let bC = bM._1
325- let aE = bM._2
326- let bN = (bC + by)
327- let bO = (aE + by)
328-[IntegerEntry((aG + g), (height + ai)), IntegerEntry((aG + d), bw), IntegerEntry((aG + e), bK), IntegerEntry((aG + h), bL), IntegerEntry((aG + k), bJ), IntegerEntry(f, bN), IntegerEntry(i, bO)]
331+ let aJ = toString(aD.caller)
332+ let aN = aE()
333+ let bK = aI(aJ)
334+ let bx = bK._1
335+ let aL = bK._2
336+ let bL = bv(aJ)
337+ let bz = bL._1
338+ let bM = bL._2
339+ let bN = aS(aJ)
340+ let bO = (bN + bM)
341+ let bP = (bx + bD)
342+ let bQ = (aL + bD)
343+ let bR = aF()
344+ let bH = bR._1
345+ let aH = bR._2
346+ let bS = (bH + bD)
347+ let bT = (aH + bD)
348+[IntegerEntry((aJ + h), (height + ak)), IntegerEntry((aJ + e), bz), IntegerEntry((aJ + f), bP), IntegerEntry((aJ + i), bQ), IntegerEntry((aJ + l), bO), IntegerEntry(g, bS), IntegerEntry(j, bT)]
329349 }
330350 })
331351
332352
333353
334-@Callable(aA)
335-func withdrawSWOP (bP) = valueOrElse(ay(), {
336- let aG = toString(aA.caller)
337- let bQ = valueOrElse(getInteger(this, (aG + g)), 0)
338- if ((0 >= bP))
354+@Callable(aD)
355+func withdrawSWOP (bU) = valueOrElse(aB(), {
356+ let aJ = toString(aD.caller)
357+ let bV = valueOrElse(getInteger(this, (aJ + h)), 0)
358+ if ((0 >= bU))
339359 then throw("withdrawAmount <= 0")
340- else if ((bQ > height))
341- then throw(("You can't withdraw till " + toString(bQ)))
360+ else if ((bV > height))
361+ then throw(("You can't withdraw till " + toString(bV)))
342362 else {
343- let bR = aC()
344- let bC = bR._1
345- let aE = bR._2
346- let bS = aF(aG)
347- let bu = bS._1
348- let aI = bS._2
349- let bT = bs(aG)
350- let bw = bT._1
351- let bH = bT._2
352- let bU = bg(aA.caller)
353- let bV = bU._1
354- let bW = bU._2
355- let bX = aW(aA.caller)
356- let bY = aY(aA.caller)
357- if (if (if ((0 > bW))
363+ let bW = aF()
364+ let bH = bW._1
365+ let aH = bW._2
366+ let bX = aI(aJ)
367+ let bx = bX._1
368+ let aL = bX._2
369+ let bY = bv(aJ)
370+ let bz = bY._1
371+ let bM = bY._2
372+ let bZ = bj(aD.caller)
373+ let ca = bZ._1
374+ let cb = bZ._2
375+ let cc = aZ(aD.caller)
376+ let cd = bb(aD.caller)
377+ if (if (if ((0 > cb))
358378 then true
359- else (0 > bV))
379+ else (0 > ca))
360380 then true
361- else (0 > bX))
381+ else (0 > cc))
362382 then throw("userUnvoteAmount < 0 || userVoteAmount < 0 || userVoteAmountForNewPool < 0")
363383 else {
364- let bZ = (bu - max([bX, (bV + bW), bY]))
365- if ((bP > bZ))
384+ let ce = (bx - max([cc, (ca + cb), cd]))
385+ if ((bU > ce))
366386 then throw("withdrawAmount > availableToUnstake")
367387 else {
368- let bI = aP(aG)
369- let bJ = (bI + bH)
370- let bN = (bC - bP)
371- let ca = (bu - bP)
372- let bO = ((aE - aI) + ca)
373-[IntegerEntry((aG + d), bw), IntegerEntry((aG + e), ca), IntegerEntry((aG + h), ca), IntegerEntry((aG + k), bJ), IntegerEntry(f, bN), IntegerEntry(i, bO), ScriptTransfer(aA.caller, bP, aj)]
388+ let bN = aS(aJ)
389+ let bO = (bN + bM)
390+ let bS = (bH - bU)
391+ let cf = (bx - bU)
392+ let bT = ((aH - aL) + cf)
393+[IntegerEntry((aJ + e), bz), IntegerEntry((aJ + f), cf), IntegerEntry((aJ + i), cf), IntegerEntry((aJ + l), bO), IntegerEntry(g, bS), IntegerEntry(j, bT), ScriptTransfer(aD.caller, bU, al)]
374394 }
375395 }
376396 }
377397 })
378398
379399
380400
381-@Callable(aA)
382-func claimAndWithdrawSWOP () = valueOrElse(ay(), {
383- let aG = toString(aA.caller)
384- let bI = aP(aG)
385- let cb = bs(aG)
386- let bw = cb._1
387- let bv = cb._2
388- let cc = (bI + bv)
389- if ((cc == 0))
401+@Callable(aD)
402+func claimAndWithdrawSWOP () = valueOrElse(aB(), {
403+ let aJ = toString(aD.caller)
404+ let bN = aS(aJ)
405+ let cg = bv(aJ)
406+ let bz = cg._1
407+ let by = cg._2
408+ let ch = (bN + by)
409+ if ((ch == 0))
390410 then throw("You have 0 available SWOP")
391- else [IntegerEntry((aG + d), bw), ScriptTransfer(aA.caller, cc, aj)]
411+ else [IntegerEntry((aJ + e), bz), IntegerEntry((aJ + l), 0), ScriptTransfer(aD.caller, ch, al)]
392412 })
393413
394414
395415
396-@Callable(aA)
397-func claimAndStakeSWOP () = valueOrElse(ay(), {
398- let aG = toString(aA.caller)
399- let cd = aC()
400- let bC = cd._1
401- let aE = cd._2
402- let ce = aF(aG)
403- let bu = ce._1
404- let aI = ce._2
405- let bI = aP(aG)
406- let cf = bs(aG)
407- let bw = cf._1
408- let bv = cf._2
409- let cc = (bI + bv)
410- let bK = (bu + cc)
411- let bL = (aI + (cc * 2))
412- let bN = (bC + cc)
413- let bO = (aE + (cc * 2))
414- if ((cc == 0))
416+@Callable(aD)
417+func claimAndStakeSWOP () = valueOrElse(aB(), {
418+ let aJ = toString(aD.caller)
419+ let ci = aF()
420+ let bH = ci._1
421+ let aH = ci._2
422+ let cj = aI(aJ)
423+ let bx = cj._1
424+ let aL = cj._2
425+ let bN = aS(aJ)
426+ let ck = bv(aJ)
427+ let bz = ck._1
428+ let by = ck._2
429+ let ch = (bN + by)
430+ let bP = (bx + ch)
431+ let bQ = (aL + (ch * 2))
432+ let bS = (bH + ch)
433+ let bT = (aH + (ch * 2))
434+ if ((ch == 0))
415435 then throw("You have 0 available SWOP")
416- else [IntegerEntry((toString(aA.caller) + g), (height + ai)), IntegerEntry((toString(aA.caller) + d), bw), IntegerEntry(f, bN), IntegerEntry(i, bO), IntegerEntry((toString(aA.caller) + e), bK), IntegerEntry((toString(aA.caller) + h), bL)]
436+ else [IntegerEntry((toString(aD.caller) + h), (height + ak)), IntegerEntry((toString(aD.caller) + e), bz), IntegerEntry(g, bS), IntegerEntry(j, bT), IntegerEntry((toString(aD.caller) + f), bP), IntegerEntry((toString(aD.caller) + i), bQ), IntegerEntry((aJ + l), 0)]
417437 })
418438
419439
420440
421-@Callable(aA)
422-func lockSWOPFromFarming () = valueOrElse(ay(), {
423- let cg = $Tuple2(aA.payments[0].amount, aA.payments[0].assetId)
424- let by = cg._1
425- let bz = cg._2
426- if ((aA.caller != ad))
441+@Callable(aD)
442+func lockSWOPFromFarming () = valueOrElse(aB(), {
443+ let cl = $Tuple2(aD.payments[0].amount, aD.payments[0].assetId)
444+ let bD = cl._1
445+ let bE = cl._2
446+ if ((aD.caller != af))
427447 then throw("Only farming can call this function")
428- else if ((bz != aj))
448+ else if ((bE != al))
429449 then throw("Incorrect pmtAssetId")
430450 else {
431- let aG = toString(aA.originCaller)
432- let aK = aB()
433- let ch = aF(aG)
434- let bu = ch._1
435- let aI = ch._2
436- let ci = bs(aG)
437- let bw = ci._1
438- let bH = ci._2
439- let bI = aP(aG)
440- let bJ = (bI + bH)
441- let bK = (bu + by)
442- let bL = (aI + (by * 2))
443- let cj = aC()
444- let bC = cj._1
445- let aE = cj._2
446- let bN = (bC + by)
447- let bO = (aE + (by * 2))
448-[IntegerEntry((aG + g), (height + ai)), IntegerEntry((aG + d), bw), IntegerEntry((aG + e), bK), IntegerEntry((aG + h), aI), IntegerEntry((aG + k), bJ), IntegerEntry(f, bN), IntegerEntry(i, bO)]
451+ let aJ = toString(aD.originCaller)
452+ let aN = aE()
453+ let cm = aI(aJ)
454+ let bx = cm._1
455+ let aL = cm._2
456+ let cn = bv(aJ)
457+ let bz = cn._1
458+ let bM = cn._2
459+ let bN = aS(aJ)
460+ let bO = (bN + bM)
461+ let bP = (bx + bD)
462+ let bQ = (aL + (bD * 2))
463+ let co = aF()
464+ let bH = co._1
465+ let aH = co._2
466+ let bS = (bH + bD)
467+ let bT = (aH + (bD * 2))
468+[IntegerEntry((aJ + h), (height + ak)), IntegerEntry((aJ + e), bz), IntegerEntry((aJ + f), bP), IntegerEntry((aJ + i), aL), IntegerEntry((aJ + l), bO), IntegerEntry(g, bS), IntegerEntry(j, bT)]
449469 }
450470 })
451471
452472
453473
454-@Callable(aA)
455-func updateWeights (ck,cl,cm,cn) = valueOrElse(ay(), {
456- let co = 10
457- let cp = valueOrElse(getInteger(this, o), 0)
458- if (!(containsElement([Z, aa, ab, ac], aA.callerPublicKey)))
474+@Callable(aD)
475+func updateWeights (cp,cq,cr,cs) = valueOrElse(aB(), {
476+ let ct = 10
477+ let cu = valueOrElse(getInteger(this, p), 0)
478+ if (!(containsElement([ab, ac, ad, ae], aD.callerPublicKey)))
459479 then throw("Only admin can call this function")
460- else if ((size(ck) > co))
461- then throw(("Max amount of pool is " + toString(co)))
462- else if ((cp >= cm))
480+ else if ((size(cp) > ct))
481+ then throw(("Max amount of pool is " + toString(ct)))
482+ else if ((cu >= cr))
463483 then throw("rewardUpdateHeight <= totalRewardUpdateHeight")
464- else if ((height >= cm))
484+ else if ((height >= cr))
465485 then throw("height >= rewardUpdateHeight")
466- else if ((0 >= cm))
486+ else if ((0 >= cr))
467487 then throw("0 >= rewardUpdateHeight ")
468488 else {
469- func cq (cr,cs) = (cr + cs)
489+ func cv (cw,cx) = (cw + cx)
470490
471- func ct (cu,aR) = {
472- let cv = bo(aR)
473- if (if (!(bp(aR)))
491+ func cy (cz,aU) = {
492+ let cA = br(aU)
493+ if (if (!(bs(aU)))
474494 then true
475- else if ((cm != cv))
476- then (cv == cp)
495+ else if ((cr != cA))
496+ then (cA == cu)
477497 else false)
478498 then {
479- let cw = bq(aR)
480-IntegerEntry((aR + m), cw) :: cu
499+ let cB = bt(aU)
500+IntegerEntry((aU + n), cB) :: cz
481501 }
482502 else {
483- let cw = br(aR)
484-IntegerEntry((aR + m), cw) :: cu
503+ let cB = bu(aU)
504+IntegerEntry((aU + n), cB) :: cz
485505 }
486506 }
487507
488- func cx (cu,aR) = {
489- let cy = value(indexOf(ck, aR))
490- let cw = cl[cy]
491- if ((0 > cw))
508+ func cC (cz,aU) = {
509+ let cD = value(indexOf(cp, aU))
510+ let cB = cq[cD]
511+ if ((0 > cB))
492512 then throw("PoolReward < 0")
493- else IntegerEntry((aR + l), cw) :: cu
513+ else IntegerEntry((aU + m), cB) :: cz
494514 }
495515
496- func cz (cu,aR) = {
497- let cA = cm
498- let cB = invoke(ad, "updatePoolInterest", [aR], nil)
499- if ((cB == cB))
500- then IntegerEntry((aR + n), cA) :: cu
516+ func cE (cz,aU) = {
517+ let cF = cr
518+ let cG = invoke(af, "updatePoolInterest", [aU], nil)
519+ if ((cG == cG))
520+ then IntegerEntry((aU + o), cF) :: cz
501521 else throw("Strict value is not equal to itself.")
502522 }
503523
504- func cC (cD,cn) = if ((cn == 0))
505- then if ((cD > al))
506- then throw(((("sumRewardPrevious > totalVoteShare or sumRewardCurrent > totalVoteShare - " + toString(cn)) + " ") + toString(cD)))
507- else $Tuple2([IntegerEntry(x, cD)], [IntegerEntry(p, cm)])
508- else if ((cn == 1))
524+ func cH (cI,cs) = if ((cs == 0))
525+ then if ((cI > an))
526+ then throw(((("sumRewardPrevious > totalVoteShare or sumRewardCurrent > totalVoteShare - " + toString(cs)) + " ") + toString(cI)))
527+ else $Tuple2([IntegerEntry(y, cI)], [IntegerEntry(q, cr)])
528+ else if ((cs == 1))
509529 then {
510- let cE = valueOrElse(getInteger(this, x), 0)
511- let cF = valueOrElse(getInteger(this, p), 0)
512- if (((cD + cE) > al))
513- then throw(((("sumRewardPrevious > totalVoteShare or sumRewardCurrent > totalVoteShare - " + toString(cn)) + " ") + toString((cD + cE))))
514- else if ((cF != cm))
530+ let cJ = valueOrElse(getInteger(this, y), 0)
531+ let cK = valueOrElse(getInteger(this, q), 0)
532+ if (((cI + cJ) > an))
533+ then throw(((("sumRewardPrevious > totalVoteShare or sumRewardCurrent > totalVoteShare - " + toString(cs)) + " ") + toString((cI + cJ))))
534+ else if ((cK != cr))
515535 then throw("current rewardUpdateHeight != rewardUpdateHeightFirstPaginationEntry")
516- else $Tuple2([IntegerEntry(x, (cD + cE))], nil)
536+ else $Tuple2([IntegerEntry(y, (cI + cJ))], nil)
517537 }
518- else if ((cn == 2))
538+ else if ((cs == 2))
519539 then {
520- let cG = (valueOrElse(getInteger(this, x), 0) + cD)
521- let cF = valueOrElse(getInteger(this, p), 0)
522- if ((cG != al))
540+ let cL = (valueOrElse(getInteger(this, y), 0) + cI)
541+ let cK = valueOrElse(getInteger(this, q), 0)
542+ if ((cL != an))
523543 then throw("sumRewardPrevious != totalVoteShare or sumRewardCurrent != totalVoteShare")
524- else if ((cF != cm))
544+ else if ((cK != cr))
525545 then throw("current rewardUpdateHeight != rewardUpdateHeightFirstPaginationEntry")
526- else $Tuple2([IntegerEntry(x, cG)], nil)
546+ else $Tuple2([IntegerEntry(y, cL)], nil)
527547 }
528548 else throw("Incorrect pagination")
529549
530- let cH = {
531- let cI = ck
532- let cJ = size(cI)
533- let cK = nil
534- func cL (cM,cN) = if ((cN >= cJ))
535- then cM
536- else ct(cM, cI[cN])
550+ let cM = {
551+ let cN = cp
552+ let cO = size(cN)
553+ let cP = nil
554+ func cQ (cR,cS) = if ((cS >= cO))
555+ then cR
556+ else cy(cR, cN[cS])
537557
538- func cO (cM,cN) = if ((cN >= cJ))
539- then cM
558+ func cT (cR,cS) = if ((cS >= cO))
559+ then cR
540560 else throw("List size exceeds 10")
541561
542- cO(cL(cL(cL(cL(cL(cL(cL(cL(cL(cL(cK, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
562+ cT(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
543563 }
544- let cP = {
545- let cI = ck
546- let cJ = size(cI)
547- let cK = nil
548- func cQ (cM,cN) = if ((cN >= cJ))
549- then cM
550- else cx(cM, cI[cN])
564+ let cU = {
565+ let cN = cp
566+ let cO = size(cN)
567+ let cP = nil
568+ func cV (cR,cS) = if ((cS >= cO))
569+ then cR
570+ else cC(cR, cN[cS])
551571
552- func cR (cM,cN) = if ((cN >= cJ))
553- then cM
572+ func cW (cR,cS) = if ((cS >= cO))
573+ then cR
554574 else throw("List size exceeds 10")
555575
556- cR(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cK, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
576+ cW(cV(cV(cV(cV(cV(cV(cV(cV(cV(cV(cP, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
557577 }
558- let cS = {
559- let cI = ck
560- let cJ = size(cI)
561- let cK = nil
562- func cT (cM,cN) = if ((cN >= cJ))
563- then cM
564- else cz(cM, cI[cN])
578+ let cX = {
579+ let cN = cp
580+ let cO = size(cN)
581+ let cP = nil
582+ func cY (cR,cS) = if ((cS >= cO))
583+ then cR
584+ else cE(cR, cN[cS])
565585
566- func cU (cM,cN) = if ((cN >= cJ))
567- then cM
586+ func cZ (cR,cS) = if ((cS >= cO))
587+ then cR
568588 else throw("List size exceeds 10")
569589
570- cU(cT(cT(cT(cT(cT(cT(cT(cT(cT(cT(cK, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
590+ cZ(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cP, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
571591 }
572- let cV = {
573- let cI = cl
574- let cJ = size(cI)
575- let cK = 0
576- func cW (cM,cN) = if ((cN >= cJ))
577- then cM
578- else cq(cM, cI[cN])
592+ let da = {
593+ let cN = cq
594+ let cO = size(cN)
595+ let cP = 0
596+ func db (cR,cS) = if ((cS >= cO))
597+ then cR
598+ else cv(cR, cN[cS])
579599
580- func cX (cM,cN) = if ((cN >= cJ))
581- then cM
600+ func dc (cR,cS) = if ((cS >= cO))
601+ then cR
582602 else throw("List size exceeds 10")
583603
584- cX(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cK, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
604+ dc(db(db(db(db(db(db(db(db(db(db(cP, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
585605 }
586- let cY = cC(cV, cn)
587- let cZ = cY._1
588- let cF = cY._2
589- let da = if ((cn == 2))
590- then [IntegerEntry(o, cm)]
606+ let dd = cH(da, cs)
607+ let de = dd._1
608+ let cK = dd._2
609+ let df = if ((cs == 2))
610+ then [IntegerEntry(p, cr)]
591611 else nil
592- if ((height > cm))
612+ if ((height > cr))
593613 then throw("rewardUpdateHeight < height")
594- else (((((cH ++ cP) ++ cS) ++ cZ) ++ da) ++ cF)
614+ else (((((cM ++ cU) ++ cX) ++ de) ++ df) ++ cK)
595615 }
596616 })
597617
598618
599619
600-@Callable(aA)
601-func shutdown () = valueOrElse(az(aA), if (!(at))
602- then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, b), "the cause wasn't specified")))
603- else aw("Paused by admin"))
620+@Callable(aD)
621+func shutdown () = valueOrElse(aC(aD), if (!(av))
622+ then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, c), "the cause wasn't specified")))
623+ else az("Paused by admin"))
604624
605625
606626
607-@Callable(aA)
608-func activate () = valueOrElse(az(aA), if (at)
627+@Callable(aD)
628+func activate () = valueOrElse(aC(aD), if (av)
609629 then throw("DApp is already active")
610- else [BooleanEntry(a, true), DeleteEntry(b)])
630+ else [BooleanEntry(a, true), DeleteEntry(c)])
611631
612632
613-@Verifier(db)
614-func dc () = {
615- let dd = if (sigVerify(db.bodyBytes, db.proofs[0], Z))
633+@Verifier(dg)
634+func dh () = {
635+ let di = if (sigVerify(dg.bodyBytes, dg.proofs[0], ab))
616636 then 1
617637 else 0
618- let de = if (sigVerify(db.bodyBytes, db.proofs[1], aa))
638+ let dj = if (sigVerify(dg.bodyBytes, dg.proofs[1], ac))
619639 then 1
620640 else 0
621- let df = if (sigVerify(db.bodyBytes, db.proofs[2], ab))
641+ let dk = if (sigVerify(dg.bodyBytes, dg.proofs[2], ad))
622642 then 1
623643 else 0
624- (((dd + de) + df) >= 2)
644+ (((di + dj) + dk) >= 2)
625645 }
626646

github/deemru/w8io/026f985 
414.60 ms