tx · 8apwSkDMttUUEx6axjrXFJ8VtmNXfk8oTPRi6cR1JDkf

3MsXpzisJAwnzUr7XrEoW1BZo4U6rw4tsYK:  -0.14000000 Waves

2023.01.19 15:56 [2411841] smart account 3MsXpzisJAwnzUr7XrEoW1BZo4U6rw4tsYK > SELF 0.00000000 Waves

{ "type": 13, "id": "8apwSkDMttUUEx6axjrXFJ8VtmNXfk8oTPRi6cR1JDkf", "fee": 14000000, "feeAssetId": null, "timestamp": 1674132988321, "version": 2, "chainId": 84, "sender": "3MsXpzisJAwnzUr7XrEoW1BZo4U6rw4tsYK", "senderPublicKey": "FFdBua5rzzMkZebvsvmN7sAdU7XhFK8QNJ3hiwwxAYRA", "proofs": [ "2v6dvsCFKm1GniKzHL6ChVCWyXue9MdG49qMukXS56cZUEVWcsS6CCfSX5rtwJKzWpX7owkMP1ybYsfaYrcxVoxg", "5HTjgHU6i6oGdTwSuZvqYBpTtcDKJNK8gyVRrZ7wFR8ZY2xku5xPKpoj8kX9qPy1cWruQsaPFndRdSYMxfR4VNsn" ], "script": "base64:BgJiCAISAwoBCBIDCgEIEgMKAQgSBAoCCAESBQoDAggBEgUKAwgBARIECgIICBIECgIICBIECgIIARIFCgMCCAESAwoBCBIECgIIAhIDCgEIEgMKARgSAwoBGBIECgIICBIAEgBgAAdrQWN0aXZlAgZhY3RpdmUAC2tBY3RpdmVHbG9iAhRhY3RpdmVfYWxsX2NvbnRyYWN0cwAPa0RlcHJlY2F0ZWRQb29sAgtkZXByZWNhdGVkXwAGa0NhdXNlAg5zaHV0ZG93bl9jYXVzZQAaa1Jld2FyZFBvb2xGcmFjdGlvbkN1cnJlbnQCHV9jdXJyZW50X3Bvb2xfZnJhY3Rpb25fcmV3YXJkABtrUmV3YXJkUG9vbEZyYWN0aW9uUHJldmlvdXMCHl9wcmV2aW91c19wb29sX2ZyYWN0aW9uX3Jld2FyZAATa0hlaWdodFBvb2xGcmFjdGlvbgIaX3Bvb2xfcmV3YXJkX3VwZGF0ZV9oZWlnaHQAG2tUb3RhbFJld2FyZFBlckJsb2NrQ3VycmVudAIedG90YWxfcmV3YXJkX3Blcl9ibG9ja19jdXJyZW50ABxrVG90YWxSZXdhcmRQZXJCbG9ja1ByZXZpb3VzAh90b3RhbF9yZXdhcmRfcGVyX2Jsb2NrX3ByZXZpb3VzABNrUmV3YXJkVXBkYXRlSGVpZ2h0AhRyZXdhcmRfdXBkYXRlX2hlaWdodAAWa1VzZXJTaGFyZVRva2Vuc1N0YWtlZAIUX3NoYXJlX3Rva2Vuc19sb2NrZWQAFmtVc2VyU2hhcmVUb2tlbnNMb2NrZWQCFV9zaGFyZV90b2tlbnNfYmxvY2tlZAAaa1VzZXJTaGFyZVRva2Vuc0xvY2tlZFR5cGUCGl9zaGFyZV90b2tlbnNfYmxvY2tlZF90eXBlABxrVXNlclNoYXJlVG9rZW5zTG9ja2VkSGVpZ2h0Ahxfc2hhcmVfdG9rZW5zX2Jsb2NrZWRfaGVpZ2h0ABdrVXNlclNoYXJlVG9rZW5zVmlydHVhbAIVX3NoYXJlX3Rva2Vuc192aXJ0dWFsABZrU2hhcmVUb3RhbFNoYXJlVG9rZW5zAhpfdG90YWxfc2hhcmVfdG9rZW5zX2xvY2tlZAATa1NoYXJlVG9rZW5zVmlydHVhbAIbX3RvdGFsX3NoYXJlX3Rva2Vuc192aXJ0dWFsAAtrTG9ja1BhcmFtcwIMX2xvY2tfcGFyYW1zAA1rTG9ja1dhdmVzRmVlAg5sb2NrX3dhdmVzX2ZlZQAOa1Bvb2xCb29zdENvZWYCC19ib29zdF9jb2VmABFrRmFybUxhc3RJbnRlcmVzdAIOX2xhc3RfaW50ZXJlc3QAFWtGYXJtVXNlckxhc3RJbnRlcmVzdAIOX2xhc3RfaW50ZXJlc3QAEmtCb29zdExhc3RJbnRlcmVzdAIQX2xhc3RfaW50ZXJlc3RfYgAWa0Jvb3N0VXNlckxhc3RJbnRlcmVzdAISX2xhc3RfaW50ZXJlc3RfdV9iABNrTGFzdEludGVyZXN0SGVpZ2h0AhVfbGFzdF9pbnRlcmVzdF9oZWlnaHQAB2tTV09QaWQCB1NXT1BfaWQADmtBdmFpbGFibGVTV09QAg9fYXZhaWxhYmxlX1NXT1AAEWtTd29wWWVhckVtaXNzaW9uAhJzd29wX3llYXJfZW1pc3Npb24AEGtIYXJ2ZXN0UG9vbFZvdGUCGF9oYXJ2ZXN0X3Bvb2xfdm90ZV9nU1dPUAAJa1Bvb2xWb3RlAhBfcG9vbF92b3RlX2dTV09QAA1rVXNlclBvb2xWb3RlAhBfdXNlcl92b3RlX2dTV09QAAprUG9vbFN0cnVjAgtfcG9vbF9zdHJ1YwAOa1VzZXJQb29sU3RydWMCEF91c2VyX3Bvb2xfc3RydWMAFGtIYXJ2ZXN0VXNlclBvb2xWb3RlAh1faGFydmVzdF91c2VyX3Bvb2xfdm90ZV9nU1dPUAATa0ZpcnN0SGFydmVzdEhlaWdodAIUZmlyc3RfaGFydmVzdF9oZWlnaHQADWtTaGFyZUxpbWl0RkgCHHNoYXJlX2xpbWl0X29uX2ZpcnN0X2hhcnZlc3QAE2tTdHJhdEJGYXJtSW50ZXJlc3QCFl9zdHJhdF9iX2Zhcm1faW50ZXJlc3QADWtDcG1tQ29udHJhY3QCDWNwbW1fY29udHJhY3QADWtBZG1pblB1YktleTECC2FkbWluX3B1Yl8xAA1rQWRtaW5QdWJLZXkyAgthZG1pbl9wdWJfMgANa0FkbWluUHViS2V5MwILYWRtaW5fcHViXzMAEmtBZG1pbkludm9rZVB1YktleQIQYWRtaW5faW52b2tlX3B1YgAQa01vbmV5Qm94QWRkcmVzcwIRbW9uZXlfYm94X2FkZHJlc3MADmtWb3RpbmdBZGRyZXNzAg52b3RpbmdfYWRkcmVzcwALa0dvdkFkZHJlc3MCEmdvdmVybmFuY2VfYWRkcmVzcwARa0xQRmFybWluZ0FkZHJlc3MCCmxwX2Zhcm1pbmcAFGtGYXJtaW5nVHJlYXN1cmVBZGRyAhBmYXJtaW5nX3RyZWFzdXJlAAZvcmFjbGUJAQdBZGRyZXNzAQEaAVRIE5cMwNMzzCUygLYp96dkaICr48x7S5kADnRvdGFsVm90ZVNoYXJlAIDIr6AlAAtzY2FsZVZhbHVlOACAwtcvABJsb2NrQm9vc3RDb2VmU2NhbGUA6AcAEGRlZlBvb2xCb29zdENvZWYA9AMAB2JTdGFydEgA2rHPAQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEDa2V5BAckbWF0Y2gwCQCdCAIFBm9yYWNsZQUDa2V5AwkAAQIFByRtYXRjaDACBlN0cmluZwQGc3RyaW5nBQckbWF0Y2gwCQDZBAEFBnN0cmluZwQHbm90aGluZwUHJG1hdGNoMAkAAgEJAKwCAgUDa2V5AghpcyBlbXB0eQAMYWRtaW5QdWJLZXkxCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFDWtBZG1pblB1YktleTEADGFkbWluUHViS2V5MgkBE2dldEJhc2U1OEZyb21PcmFjbGUBBQ1rQWRtaW5QdWJLZXkyAAxhZG1pblB1YktleTMJARNnZXRCYXNlNThGcm9tT3JhY2xlAQUNa0FkbWluUHViS2V5MwAPbW9uZXlCb3hBZGRyZXNzCQEHQWRkcmVzcwEJARNnZXRCYXNlNThGcm9tT3JhY2xlAQUQa01vbmV5Qm94QWRkcmVzcwANdm90aW5nQWRkcmVzcwkBB0FkZHJlc3MBCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFDmtWb3RpbmdBZGRyZXNzAApnb3ZBZGRyZXNzCQEHQWRkcmVzcwEJARNnZXRCYXNlNThGcm9tT3JhY2xlAQULa0dvdkFkZHJlc3MAEWFkbWluSW52b2tlUHViS2V5CQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFEmtBZG1pbkludm9rZVB1YktleQAQbHBGYXJtaW5nQWRkcmVzcwkBB0FkZHJlc3MBCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFEWtMUEZhcm1pbmdBZGRyZXNzABNmYXJtaW5nVHJlYXN1cmVBZGRyCQEHQWRkcmVzcwEJARNnZXRCYXNlNThGcm9tT3JhY2xlAQUUa0Zhcm1pbmdUcmVhc3VyZUFkZHIADGNwbW1Db250cmFjdAkBB0FkZHJlc3MBCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFDWtDcG1tQ29udHJhY3QABmFjdGl2ZQkBEUBleHRyTmF0aXZlKDEwNTEpAgUEdGhpcwUHa0FjdGl2ZQAKYWN0aXZlR2xvYgkBC3ZhbHVlT3JFbHNlAgkAmwgCBQZvcmFjbGUFC2tBY3RpdmVHbG9iBgAEU1dPUAkA2QQBCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzBQdrU1dPUGlkARVnZXRIZWlnaHRGaXJzdEhhcnZlc3QBBHBvb2wJAQt2YWx1ZU9yRWxzZQIJAJoIAgkBB0FkZHJlc3MBCQDZBAEFBHBvb2wFE2tGaXJzdEhhcnZlc3RIZWlnaHQAAAEUZ2V0RkhTaGFyZUxpbWl0VG9rZW4BBHBvb2wJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQRwb29sBQ1rU2hhcmVMaW1pdEZICQCsAgICFE5vIGRhdGEgb24gdGhlIGtleTogBQ1rU2hhcmVMaW1pdEZIARJnZXRUb3RhbFNoYXJlVG9rZW4BBHBvb2wJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQR0aGlzCQCsAgIFBHBvb2wFFmtTaGFyZVRvdGFsU2hhcmVUb2tlbnMJAKwCAgkArAICAhRObyBkYXRhIG9uIHRoZSBrZXk6IAUEcG9vbAUWa1NoYXJlVG90YWxTaGFyZVRva2VucwEMZ2V0UG9vbFZvdGVkAQRwb29sCQELdmFsdWVPckVsc2UCCQCaCAIFDXZvdGluZ0FkZHJlc3MJAKwCAgUEcG9vbAUJa1Bvb2xWb3RlCQELdmFsdWVPckVsc2UCCQC2CQEJAJEDAgkAtQkCCQELdmFsdWVPckVsc2UCCQCdCAIFDXZvdGluZ0FkZHJlc3MJAKwCAgUEcG9vbAUKa1Bvb2xTdHJ1YwIAAgFfAAAAAAEQZ2V0VXNlclBvb2xWb3RlZAIEcG9vbAR1c2VyCQELdmFsdWVPckVsc2UCCQCaCAIFDXZvdGluZ0FkZHJlc3MJAKwCAgkArAICCQCsAgIFBHVzZXICAV8FBHBvb2wFDWtVc2VyUG9vbFZvdGUJAQt2YWx1ZU9yRWxzZQIJALYJAQkAkQMCCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUNdm90aW5nQWRkcmVzcwkArAICCQCsAgIJAKwCAgUEdXNlcgIBXwUEcG9vbAUOa1VzZXJQb29sU3RydWMCAAIBXwAAAAABD2dldFNoYXJlQXNzZXRJZAEEcG9vbAkA2QQBCQERQGV4dHJOYXRpdmUoMTA1MykCCQEFdmFsdWUBCQCmCAEFBHBvb2wCDnNoYXJlX2Fzc2V0X2lkAQ5hY2NvdW50QmFsYW5jZQEHYXNzZXRJZAQHJG1hdGNoMAUHYXNzZXRJZAMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAJpZAUHJG1hdGNoMAkA8AcCBQR0aGlzBQJpZAMJAAECBQckbWF0Y2gwAgRVbml0BAV3YXZlcwUHJG1hdGNoMAgJAO8HAQUEdGhpcwlhdmFpbGFibGUJAAIBAgtNYXRjaCBlcnJvcgEOY2FsY1NjYWxlVmFsdWUCCGFzc2V0SWQxCGFzc2V0SWQyBBBhc3NldElkMURlY2ltYWxzCAkBBXZhbHVlAQkA7AcBBQhhc3NldElkMQhkZWNpbWFscwQQYXNzZXRJZDJEZWNpbWFscwgJAQV2YWx1ZQEJAOwHAQUIYXNzZXRJZDIIZGVjaW1hbHMEC3NjYWxlRGlnaXRzCQBkAgkAZQIFEGFzc2V0SWQyRGVjaW1hbHMFEGFzc2V0SWQxRGVjaW1hbHMACAkAbAYACgAABQtzY2FsZURpZ2l0cwAAAAAFBERPV04BEXVzZXJBdmFpbGFibGVTV09QAgRwb29sBHVzZXIJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUOa0F2YWlsYWJsZVNXT1AAAAEKcmV3YXJkSW5mbwEEcG9vbAQadG90YWxSZXdhcmRQZXJCbG9ja0N1cnJlbnQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQpnb3ZBZGRyZXNzBRtrVG90YWxSZXdhcmRQZXJCbG9ja0N1cnJlbnQJAKwCAgkArAICCQCsAgICFE5vIGRhdGEgb24gdGhlIGtleTogBRtrVG90YWxSZXdhcmRQZXJCbG9ja0N1cnJlbnQCDCBhdCBhZGRyZXNzIAkApQgBBQpnb3ZBZGRyZXNzBBt0b3RhbFJld2FyZFBlckJsb2NrUHJldmlvdXMJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQpnb3ZBZGRyZXNzBRxrVG90YWxSZXdhcmRQZXJCbG9ja1ByZXZpb3VzCQCsAgIJAKwCAgkArAICAhRObyBkYXRhIG9uIHRoZSBrZXk6IAUca1RvdGFsUmV3YXJkUGVyQmxvY2tQcmV2aW91cwIMIGF0IGFkZHJlc3MgCQClCAEFCmdvdkFkZHJlc3MEGXJld2FyZFBvb2xGcmFjdGlvbkN1cnJlbnQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQpnb3ZBZGRyZXNzCQCsAgIFBHBvb2wFGmtSZXdhcmRQb29sRnJhY3Rpb25DdXJyZW50CQCsAgIJAKwCAgkArAICCQCsAgICFE5vIGRhdGEgb24gdGhlIGtleTogBQRwb29sBRprUmV3YXJkUG9vbEZyYWN0aW9uQ3VycmVudAIMIGF0IGFkZHJlc3MgCQClCAEFCmdvdkFkZHJlc3MEEnJld2FyZFVwZGF0ZUhlaWdodAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFCmdvdkFkZHJlc3MFE2tSZXdhcmRVcGRhdGVIZWlnaHQJAKwCAgkArAICCQCsAgICFE5vIGRhdGEgb24gdGhlIGtleTogBRNrUmV3YXJkVXBkYXRlSGVpZ2h0AgwgYXQgYWRkcmVzcyAJAKUIAQUKZ292QWRkcmVzcwQWcG9vbFJld2FyZFVwZGF0ZUhlaWdodAkBC3ZhbHVlT3JFbHNlAgkAmggCBQpnb3ZBZGRyZXNzCQCsAgIFBHBvb2wFE2tIZWlnaHRQb29sRnJhY3Rpb24FEnJld2FyZFVwZGF0ZUhlaWdodAQacmV3YXJkUG9vbEZyYWN0aW9uUHJldmlvdXMJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQpnb3ZBZGRyZXNzCQCsAgIFBHBvb2wFG2tSZXdhcmRQb29sRnJhY3Rpb25QcmV2aW91cwkArAICCQCsAgIJAKwCAgkArAICAhRObyBkYXRhIG9uIHRoZSBrZXk6IAUEcG9vbAUba1Jld2FyZFBvb2xGcmFjdGlvblByZXZpb3VzAgwgYXQgYWRkcmVzcyAJAKUIAQUKZ292QWRkcmVzcwQRcmV3YXJkUG9vbEN1cnJlbnQJAGsDBRp0b3RhbFJld2FyZFBlckJsb2NrQ3VycmVudAUZcmV3YXJkUG9vbEZyYWN0aW9uQ3VycmVudAUOdG90YWxWb3RlU2hhcmUEEnJld2FyZFBvb2xQcmV2aW91cwkAawMFGnRvdGFsUmV3YXJkUGVyQmxvY2tDdXJyZW50BRpyZXdhcmRQb29sRnJhY3Rpb25QcmV2aW91cwUOdG90YWxWb3RlU2hhcmUDAwkAZgIFEXJld2FyZFBvb2xDdXJyZW50BRp0b3RhbFJld2FyZFBlckJsb2NrQ3VycmVudAYJAGYCBRJyZXdhcmRQb29sUHJldmlvdXMFG3RvdGFsUmV3YXJkUGVyQmxvY2tQcmV2aW91cwkAAgECYnJld2FyZFBvb2xDdXJyZW50ID4gdG90YWxSZXdhcmRQZXJCbG9ja0N1cnJlbnQgb3IgcmV3YXJkUG9vbFByZXZpb3VzID4gdG90YWxSZXdhcmRQZXJCbG9ja1ByZXZpb3VzCQCWCgQFEXJld2FyZFBvb2xDdXJyZW50BRJyZXdhcmRVcGRhdGVIZWlnaHQFEnJld2FyZFBvb2xQcmV2aW91cwUWcG9vbFJld2FyZFVwZGF0ZUhlaWdodAETZ2V0TGFzdEludGVyZXN0SW5mbwEEcG9vbAQMZmFybUludGVyZXN0CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUEdGhpcwkArAICBQRwb29sBRFrRmFybUxhc3RJbnRlcmVzdAkArAICCQCsAgICFE5vIGRhdGEgb24gdGhlIGtleTogBQRwb29sBRFrRmFybUxhc3RJbnRlcmVzdAQNYm9vc3RJbnRlcmVzdAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIFBHBvb2wFEmtCb29zdExhc3RJbnRlcmVzdAAABBJsYXN0SW50ZXJlc3RIZWlnaHQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICBQRwb29sBRNrTGFzdEludGVyZXN0SGVpZ2h0BQZoZWlnaHQJAJUKAwUSbGFzdEludGVyZXN0SGVpZ2h0BQxmYXJtSW50ZXJlc3QFDWJvb3N0SW50ZXJlc3QBC2NhbGNGYXJtUndkAgRwb29sDmN1clRvdGFsUmV3YXJkBA1wb29sQm9vc3RDb2VmCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgUEcG9vbAUOa1Bvb2xCb29zdENvZWYFEGRlZlBvb2xCb29zdENvZWYJAGsDBQ5jdXJUb3RhbFJld2FyZAUSbG9ja0Jvb3N0Q29lZlNjYWxlCQBkAgUNcG9vbEJvb3N0Q29lZgUSbG9ja0Jvb3N0Q29lZlNjYWxlAQxjYWxjQm9vc3RSd2QCBHBvb2wOY3VyVG90YWxSZXdhcmQEDXBvb2xCb29zdENvZWYJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICBQRwb29sBQ5rUG9vbEJvb3N0Q29lZgUQZGVmUG9vbEJvb3N0Q29lZgkAawMFDmN1clRvdGFsUmV3YXJkBQ1wb29sQm9vc3RDb2VmCQBkAgUNcG9vbEJvb3N0Q29lZgUSbG9ja0Jvb3N0Q29lZlNjYWxlAQxjYWxjSW50ZXJlc3QLBHBvb2wSbGFzdEludGVyZXN0SGVpZ2h0EnJld2FyZFVwZGF0ZUhlaWdodBZwb29sUmV3YXJkVXBkYXRlSGVpZ2h0DGZhcm1JbnRlcmVzdA1ib29zdEludGVyZXN0CXBvb2xWb3RlZBVjdXJyZW50UmV3YXJkUGVyQmxvY2sQc2hhcmVUb2tlbkxvY2tlZBZwcmV2aW91c1Jld2FyZFBlckJsb2NrCnNjYWxlVmFsdWUEDCR0MDk1MTYxMDY4OQMDAwkAZgIFEnJld2FyZFVwZGF0ZUhlaWdodAUGaGVpZ2h0CQAAAgUScmV3YXJkVXBkYXRlSGVpZ2h0BRZwb29sUmV3YXJkVXBkYXRlSGVpZ2h0BwYDCQBmAgUGaGVpZ2h0BRJyZXdhcmRVcGRhdGVIZWlnaHQJAQIhPQIFEnJld2FyZFVwZGF0ZUhlaWdodAUWcG9vbFJld2FyZFVwZGF0ZUhlaWdodAcEAXIJAGgCBRZwcmV2aW91c1Jld2FyZFBlckJsb2NrCQBlAgUGaGVpZ2h0BRJsYXN0SW50ZXJlc3RIZWlnaHQJAJUKAwUBcgUMZmFybUludGVyZXN0BQ1ib29zdEludGVyZXN0AwMDCQBmAgUGaGVpZ2h0BRJyZXdhcmRVcGRhdGVIZWlnaHQJAAACBRJyZXdhcmRVcGRhdGVIZWlnaHQFFnBvb2xSZXdhcmRVcGRhdGVIZWlnaHQHCQBmAgUSbGFzdEludGVyZXN0SGVpZ2h0BRJyZXdhcmRVcGRhdGVIZWlnaHQHBAFyCQBoAgUVY3VycmVudFJld2FyZFBlckJsb2NrCQBlAgUGaGVpZ2h0BRJsYXN0SW50ZXJlc3RIZWlnaHQJAJUKAwUBcgUMZmFybUludGVyZXN0BQ1ib29zdEludGVyZXN0BAlyd2RCZnJVcGQJAGgCBRZwcmV2aW91c1Jld2FyZFBlckJsb2NrCQBlAgUScmV3YXJkVXBkYXRlSGVpZ2h0BRJsYXN0SW50ZXJlc3RIZWlnaHQEBmZCZnJVcAkAZAIFDGZhcm1JbnRlcmVzdAkAawMJAQtjYWxjRmFybVJ3ZAIFBHBvb2wFCXJ3ZEJmclVwZAUKc2NhbGVWYWx1ZQUQc2hhcmVUb2tlbkxvY2tlZAQGYkJmclVwCQBkAgUNYm9vc3RJbnRlcmVzdAMJAGYCBQlwb29sVm90ZWQAAAkAawMJAQxjYWxjQm9vc3RSd2QCBQRwb29sBQlyd2RCZnJVcGQFC3NjYWxlVmFsdWU4BQlwb29sVm90ZWQAAAQDcndkCQBoAgUVY3VycmVudFJld2FyZFBlckJsb2NrCQBlAgUGaGVpZ2h0BRJyZXdhcmRVcGRhdGVIZWlnaHQJAJUKAwUDcndkBQZmQmZyVXAFBmJCZnJVcAQGcmV3YXJkCAUMJHQwOTUxNjEwNjg5Al8xBA5mYXJtSW50ckJlZm9yZQgFDCR0MDk1MTYxMDY4OQJfMgQPYm9vc3RJbnRyQmVmb3JlCAUMJHQwOTUxNjEwNjg5Al8zBA9uZXdGYXJtSW50ZXJlc3QJAGQCBQ5mYXJtSW50ckJlZm9yZQkAawMJAQtjYWxjRmFybVJ3ZAIFBHBvb2wFBnJld2FyZAUKc2NhbGVWYWx1ZQUQc2hhcmVUb2tlbkxvY2tlZAQQbmV3Qm9vc3RJbnRlcmVzdAkAZAIFD2Jvb3N0SW50ckJlZm9yZQMJAGYCBQlwb29sVm90ZWQAAAkAawMJAQxjYWxjQm9vc3RSd2QCBQRwb29sBQZyZXdhcmQFC3NjYWxlVmFsdWU4BQlwb29sVm90ZWQAAAkAlAoCBQ9uZXdGYXJtSW50ZXJlc3QFEG5ld0Jvb3N0SW50ZXJlc3QBCWNsYWltQ2FsYwIEcG9vbAR1c2VyBApzY2FsZVZhbHVlCQEOY2FsY1NjYWxlVmFsdWUCBQRTV09QCQEPZ2V0U2hhcmVBc3NldElkAQUEcG9vbAQJcG9vbFZvdGVkCQEMZ2V0UG9vbFZvdGVkAQUEcG9vbAQKdVBvb2xWb3RlZAkBEGdldFVzZXJQb29sVm90ZWQCBQRwb29sBQR1c2VyBApzaGFyZVRva2VuCQESZ2V0VG90YWxTaGFyZVRva2VuAQUEcG9vbAQRdG90YWxTaGFyZVZpcnR1YWwJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICBQRwb29sBRNrU2hhcmVUb2tlbnNWaXJ0dWFsBQpzaGFyZVRva2VuBBJzdHJhdEJGYXJtSW50ZXJlc3QJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICBQRwb29sBRNrU3RyYXRCRmFybUludGVyZXN0AAAEDSR0MDExNTI3MTE2MDgJARNnZXRMYXN0SW50ZXJlc3RJbmZvAQUEcG9vbAQSbGFzdEludGVyZXN0SGVpZ2h0CAUNJHQwMTE1MjcxMTYwOAJfMQQMZmFybUludGVyZXN0CAUNJHQwMTE1MjcxMTYwOAJfMgQNYm9vc3RJbnRlcmVzdAgFDSR0MDExNTI3MTE2MDgCXzMEDSR0MDExNjEzMTE3MjcJAQpyZXdhcmRJbmZvAQUEcG9vbAQVY3VycmVudFJld2FyZFBlckJsb2NrCAUNJHQwMTE2MTMxMTcyNwJfMQQScmV3YXJkVXBkYXRlSGVpZ2h0CAUNJHQwMTE2MTMxMTcyNwJfMgQWcHJldmlvdXNSZXdhcmRQZXJCbG9jawgFDSR0MDExNjEzMTE3MjcCXzMEFnBvb2xSZXdhcmRVcGRhdGVIZWlnaHQIBQ0kdDAxMTYxMzExNzI3Al80BA11RmFybUludGVyZXN0CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXIFFWtGYXJtVXNlckxhc3RJbnRlcmVzdAUMZmFybUludGVyZXN0BA51Qm9vc3RJbnRlcmVzdAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyBRZrQm9vc3RVc2VyTGFzdEludGVyZXN0AwMJAGYCBRJzdHJhdEJGYXJtSW50ZXJlc3QFDXVGYXJtSW50ZXJlc3QJAGYCBQp1UG9vbFZvdGVkAAAHAAAFDWJvb3N0SW50ZXJlc3QEEnVTaGFyZVRva2Vuc1N0YWtlZAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyBRZrVXNlclNoYXJlVG9rZW5zU3Rha2VkAAAEEHVTaGFyZVRva2Vuc1ZpcnQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUXa1VzZXJTaGFyZVRva2Vuc1ZpcnR1YWwFEnVTaGFyZVRva2Vuc1N0YWtlZAMJAAACBRF0b3RhbFNoYXJlVmlydHVhbAAABAp0b1RyZWFzdXJ5CQBoAgUVY3VycmVudFJld2FyZFBlckJsb2NrCQBlAgUGaGVpZ2h0BRJsYXN0SW50ZXJlc3RIZWlnaHQJAJYKBAUMZmFybUludGVyZXN0BQ1ib29zdEludGVyZXN0AAAFCnRvVHJlYXN1cnkEDSR0MDEyNDQwMTI4MzIJAQxjYWxjSW50ZXJlc3QLBQRwb29sBRJsYXN0SW50ZXJlc3RIZWlnaHQFEnJld2FyZFVwZGF0ZUhlaWdodAUWcG9vbFJld2FyZFVwZGF0ZUhlaWdodAUMZmFybUludGVyZXN0BQ1ib29zdEludGVyZXN0BQlwb29sVm90ZWQFFWN1cnJlbnRSZXdhcmRQZXJCbG9jawURdG90YWxTaGFyZVZpcnR1YWwFFnByZXZpb3VzUmV3YXJkUGVyQmxvY2sFCnNjYWxlVmFsdWUED25ld0Zhcm1JbnRlcmVzdAgFDSR0MDEyNDQwMTI4MzICXzEEEG5ld0Jvb3N0SW50ZXJlc3QIBQ0kdDAxMjQ0MDEyODMyAl8yBAdmYXJtUndkCQBrAwUQdVNoYXJlVG9rZW5zVmlydAkAZQIFD25ld0Zhcm1JbnRlcmVzdAUNdUZhcm1JbnRlcmVzdAUKc2NhbGVWYWx1ZQQNcG9vbEJvb3N0Q29lZgkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIFBHBvb2wFDmtQb29sQm9vc3RDb2VmBRBkZWZQb29sQm9vc3RDb2VmBAtib29zdFJ3ZE1heAkAawMJAGsDBRB1U2hhcmVUb2tlbnNWaXJ0CQBlAgUPbmV3RmFybUludGVyZXN0CQCWAwEJAMwIAgUNdUZhcm1JbnRlcmVzdAkAzAgCBRJzdHJhdEJGYXJtSW50ZXJlc3QFA25pbAUKc2NhbGVWYWx1ZQUNcG9vbEJvb3N0Q29lZgUSbG9ja0Jvb3N0Q29lZlNjYWxlBAtjdXJCb29zdFJ3ZAkAawMJAGUCBRBuZXdCb29zdEludGVyZXN0BQ51Qm9vc3RJbnRlcmVzdAUKdVBvb2xWb3RlZAULc2NhbGVWYWx1ZTgECGJvb3N0UndkCQCXAwEJAMwIAgULYm9vc3RSd2RNYXgJAMwIAgULY3VyQm9vc3RSd2QFA25pbAQKdG9UcmVhc3VyeQkAZQIFC2Jvb3N0UndkTWF4BQhib29zdFJ3ZAMJAGYCAAAFCnRvVHJlYXN1cnkJAAIBAg50b1RyZWFzdXJ5IDwgMAkAlgoEBQ9uZXdGYXJtSW50ZXJlc3QFEG5ld0Jvb3N0SW50ZXJlc3QJAGQCBQdmYXJtUndkBQhib29zdFJ3ZAUKdG9UcmVhc3VyeQEbYXZhaWxhYmxlQ2xhaW1DYWxjQWxsQnlVc2VyAgVwb29scwR1c2VyCgENY2FsY0F2YWlsYWJsZQIDYWNjBHBvb2wEDSR0MDEzNzAxMTM3MzAFA2FjYwQIbmV3UG9vbHMIBQ0kdDAxMzcwMTEzNzMwAl8xBAdhbW91bnRzCAUNJHQwMTM3MDExMzczMAJfMgQNJHQwMTM3MzkxMzc5MgkBCWNsYWltQ2FsYwIFBHBvb2wFBHVzZXIEAmZpCAUNJHQwMTM3MzkxMzc5MgJfMQQCYmkIBQ0kdDAxMzczOTEzNzkyAl8yBAtjbGFpbUFtb3VudAgFDSR0MDEzNzM5MTM3OTICXzMEAnR0CAUNJHQwMTM3MzkxMzc5MgJfNAQNYXZhaWxhYmxlRnVuZAkAZAIJARF1c2VyQXZhaWxhYmxlU1dPUAIFBHBvb2wFBHVzZXIFC2NsYWltQW1vdW50CQCUCgIJAM0IAgUIbmV3UG9vbHMFBHBvb2wJAM0IAgUHYW1vdW50cwUNYXZhaWxhYmxlRnVuZAoAAiRsBQVwb29scwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgUDbmlsBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBDWNhbGNBdmFpbGFibGUCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDYwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkAGgAbABwAHQAeAB8AIAAhACIAIwAkACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgAzADQANQA2ADcAOAA5ADoAOwA8ARVjYW5Mb2NrSW5GaXJzdEhhcnZlc3QFBHBvb2wEdXNlchV1c2VyU2hhcmVUb2tlbnNTdGFrZWQJcG10QW1vdW50CGxvY2tUeXBlAwkAZgIJARVnZXRIZWlnaHRGaXJzdEhhcnZlc3QBBQRwb29sBQZoZWlnaHQED3RvdGFsVm90ZUFtb3VudAkBC3ZhbHVlT3JFbHNlAgkAmggCBQ12b3RpbmdBZGRyZXNzCQCsAgIFBHBvb2wFEGtIYXJ2ZXN0UG9vbFZvdGUAAAQOdXNlclZvdGVBbW91bnQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUNdm90aW5nQWRkcmVzcwkArAICCQCsAgIJAKwCAgUEdXNlcgIBXwUEcG9vbAUUa0hhcnZlc3RVc2VyUG9vbFZvdGUAAAQRRkhTaGFyZVRva2VuTGltaXQJARRnZXRGSFNoYXJlTGltaXRUb2tlbgEJARFAZXh0ck5hdGl2ZSgxMDYyKQEFBHBvb2wEFUZIU2hhcmVUb2tlblVzZXJMaW1pdAkAZQIJAGsDBRFGSFNoYXJlVG9rZW5MaW1pdAUOdXNlclZvdGVBbW91bnQFD3RvdGFsVm90ZUFtb3VudAUVdXNlclNoYXJlVG9rZW5zU3Rha2VkAwkAZgIFCGxvY2tUeXBlAAAJAAIBAjJZb3UgY2FuJ3QgbG9jayBzaGFyZVRva2VucyB0aWxsIGZpcnN0IGhhcnZlc3QgZW5kLgMJAAACBQ51c2VyVm90ZUFtb3VudAAAAAADCQBnAgUJcG10QW1vdW50BRVGSFNoYXJlVG9rZW5Vc2VyTGltaXQJAGUCBQlwbXRBbW91bnQFFUZIU2hhcmVUb2tlblVzZXJMaW1pdAAAAAABDWdldExvY2tQYXJhbXMBBHR5cGUECmxvY2tQYXJhbXMJALUJAgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMJAKwCAgkApAMBBQR0eXBlBQtrTG9ja1BhcmFtcwkArAICAh5UaGVyZSBhcmUgbm8ga2V5IGZvciBsb2NrIHR5cGUJAKQDAQUEdHlwZQIBXwkAlAoCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKbG9ja1BhcmFtcwAACQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKbG9ja1BhcmFtcwABAQdzdXNwZW5kAQVjYXVzZQkAzAgCCQEMQm9vbGVhbkVudHJ5AgUHa0FjdGl2ZQcJAMwIAgkBC1N0cmluZ0VudHJ5AgUGa0NhdXNlBQVjYXVzZQUDbmlsAQhpc0FjdGl2ZQADAwUGYWN0aXZlBQphY3RpdmVHbG9iBwUEdW5pdAkAAgECH0RBcHAgaXMgaW5hY3RpdmUgYXQgdGhpcyBtb21lbnQBC2lzQWRtaW5DYWxsAQFpAwkBD2NvbnRhaW5zRWxlbWVudAIJAMwIAgUMYWRtaW5QdWJLZXkxCQDMCAIFDGFkbWluUHViS2V5MgkAzAgCBQxhZG1pblB1YktleTMFA25pbAgFAWkPY2FsbGVyUHVibGljS2V5BQR1bml0CQACAQIhT25seSBhZG1pbiBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uAQppc1Bvb2xDYWxsAgFpBHBvb2wDAwkAAAIJAKUIAQgFAWkGY2FsbGVyBQRwb29sBgkAAAIIBQFpBmNhbGxlcgUMY3BtbUNvbnRyYWN0BQR1bml0CQACAQIgT25seSBwb29sIGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24BEWdldERlcHJlY2F0ZWRQb29sAQRwb29sCQELdmFsdWVPckVsc2UCCQCbCAIFBm9yYWNsZQkArAICBQ9rRGVwcmVjYXRlZFBvb2wFBHBvb2wHARBpc0RlcHJlY2F0ZWRQb29sAQRwb29sAwkBASEBCQERZ2V0RGVwcmVjYXRlZFBvb2wBBQRwb29sBQR1bml0CQACAQIvUG9vbCBpcyBkZXByZWNhdGVkLiBPbmx5IHVubG9jayBhY3Rpb24gYWxsb3dlZC4BCmlzU2VsZkNhbGwBAWkDCQAAAggFAWkGY2FsbGVyBQR0aGlzBQR1bml0CQACAQIrT25seSBjb250cmFjdCBpdHNlbGYgY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgETY2FsY0xvY2tTaGFyZVRva2VucwQBaQZjYWxsZXIEcG9vbAhsb2NrVHlwZQQMc2hhcmVBc3NldElkCQEPZ2V0U2hhcmVBc3NldElkAQUEcG9vbAQEdXNlcgkApQgBBQZjYWxsZXIECnRvdGFsU2hhcmUJARJnZXRUb3RhbFNoYXJlVG9rZW4BBQRwb29sBBF0b3RhbFNoYXJlVmlydHVhbAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIFBHBvb2wFE2tTaGFyZVRva2Vuc1ZpcnR1YWwFCnRvdGFsU2hhcmUEEHVzZXJTdGFrZWRBbW91bnQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUWa1VzZXJTaGFyZVRva2Vuc1N0YWtlZAAABA91c2VyTG9ja2VkSGVpZ3QJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUca1VzZXJTaGFyZVRva2Vuc0xvY2tlZEhlaWdodAAABBB1c2VyTG9ja2VkQW1vdW50CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXIFFmtVc2VyU2hhcmVUb2tlbnNMb2NrZWQAAAQRdXNlckFtb3VudFZpcnR1YWwJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUXa1VzZXJTaGFyZVRva2Vuc1ZpcnR1YWwFEHVzZXJTdGFrZWRBbW91bnQEFHRvdGFsVXNlclNoYXJlVG9rZW5zCQBkAgkAZAIFEHVzZXJTdGFrZWRBbW91bnQFEHVzZXJMb2NrZWRBbW91bnQICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BA0kdDAxNjg0MTE2ODkzCQENZ2V0TG9ja1BhcmFtcwEFCGxvY2tUeXBlBApsb2NrUGVyaW9kCAUNJHQwMTY4NDExNjg5MwJfMQQIbG9ja0NvZWYIBQ0kdDAxNjg0MTE2ODkzAl8yBAxsb2NrV2F2ZXNGZWUJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMFDWtMb2NrV2F2ZXNGZWUDCQECIT0CCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQFDHNoYXJlQXNzZXRJZAkAAgECG1dyb25nIHNoYXJldG9rZW4gaW4gcGF5bWVudAMJAGcCAAAICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50CQACAQIlUGF5bWVudCBhbW91bnQgbXVzdCBiZSBncmVhdGVyIHRoYW4gMAMJAGYCAAAFCGxvY2tUeXBlCQACAQIVbG9ja1R5cGUgbXVzdCBiZSA+PSAwBBVzaGFyZVRva2Vuc0NoYW5nZU9uRkgJARVjYW5Mb2NrSW5GaXJzdEhhcnZlc3QFBQRwb29sBQR1c2VyBRB1c2VyU3Rha2VkQW1vdW50CAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAUIbG9ja1R5cGUDCQAAAgUVc2hhcmVUb2tlbnNDaGFuZ2VPbkZIBRVzaGFyZVRva2Vuc0NoYW5nZU9uRkgEDSR0MDE3MzIwMTkyNTQDCQAAAgUIbG9ja1R5cGUAAAQUdXNlckFtb3VudFZpcnR1YWxOZXcJAGUCCQBkAgURdXNlckFtb3VudFZpcnR1YWwICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BRVzaGFyZVRva2Vuc0NoYW5nZU9uRkgJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUWa1VzZXJTaGFyZVRva2Vuc1N0YWtlZAkAZQIJAGQCBRB1c2VyU3Rha2VkQW1vdW50CAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAUVc2hhcmVUb2tlbnNDaGFuZ2VPbkZICQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyBRdrVXNlclNoYXJlVG9rZW5zVmlydHVhbAUUdXNlckFtb3VudFZpcnR1YWxOZXcJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAUTa1NoYXJlVG9rZW5zVmlydHVhbAkAZQIJAGQCBRF0b3RhbFNoYXJlVmlydHVhbAgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQFFXNoYXJlVG9rZW5zQ2hhbmdlT25GSAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQZjYWxsZXIFFXNoYXJlVG9rZW5zQ2hhbmdlT25GSAgJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBQNuaWwJAGUCCQBkAgUKdG90YWxTaGFyZQgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQFFXNoYXJlVG9rZW5zQ2hhbmdlT25GSAMDCQAAAgUPdXNlckxvY2tlZEhlaWd0AAADAwkAZgIAAgkAkAMBCAUBaQhwYXltZW50cwYJAQIhPQIICQCRAwIIBQFpCHBheW1lbnRzAAEHYXNzZXRJZAUEdW5pdAYJAGYCBQxsb2NrV2F2ZXNGZWUICQCRAwIIBQFpCHBheW1lbnRzAAEGYW1vdW50BwkAAgEJAKwCAgkArAICAitZb3UgbmVlZCB0byBwYXkgYWRkaXRpb25hbCB3YXZlcyBjb21pc3Npb24gCQCkAwEFDGxvY2tXYXZlc0ZlZQIFV0FWRVMDCQBmAgUPdXNlckxvY2tlZEhlaWd0CQBkAgUGaGVpZ2h0BQpsb2NrUGVyaW9kCQACAQJPWW91IGNhbm5vdCBsb2NrIHNoYXJldG9rZW5zIGZvciBhIHBlcmlvZCBsZXNzIHRoYW4gd2hhdCB5b3UgaGF2ZSBhbHJlYWR5IGxvY2tlZAQTdXNlckxvY2tlZEFtb3VudE5ldwkAZAIFEHVzZXJMb2NrZWRBbW91bnQICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BBJ1c2VyTG9ja2VkSGVpZ3ROZXcJAGQCBQZoZWlnaHQFCmxvY2tQZXJpb2QEFHVzZXJBbW91bnRWaXJ0dWFsTmV3CQBkAgkAawMFE3VzZXJMb2NrZWRBbW91bnROZXcFCGxvY2tDb2VmBRJsb2NrQm9vc3RDb2VmU2NhbGUFEHVzZXJTdGFrZWRBbW91bnQJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUWa1VzZXJTaGFyZVRva2Vuc0xvY2tlZAUTdXNlckxvY2tlZEFtb3VudE5ldwkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUca1VzZXJTaGFyZVRva2Vuc0xvY2tlZEhlaWdodAUSdXNlckxvY2tlZEhlaWd0TmV3CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyBRprVXNlclNoYXJlVG9rZW5zTG9ja2VkVHlwZQUIbG9ja1R5cGUJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXIFF2tVc2VyU2hhcmVUb2tlbnNWaXJ0dWFsBRR1c2VyQW1vdW50VmlydHVhbE5ldwkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBRNrU2hhcmVUb2tlbnNWaXJ0dWFsCQBkAgkAZQIFEXRvdGFsU2hhcmVWaXJ0dWFsBRF1c2VyQW1vdW50VmlydHVhbAUUdXNlckFtb3VudFZpcnR1YWxOZXcFA25pbAkAZAIFCnRvdGFsU2hhcmUICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BAtsb2NrRW50cmllcwgFDSR0MDE3MzIwMTkyNTQCXzEEDXRvdGFsU2hhcmVOZXcIBQ0kdDAxNzMyMDE5MjU0Al8yAwkAZgIJAQ5hY2NvdW50QmFsYW5jZQEFDHNoYXJlQXNzZXRJZAUNdG90YWxTaGFyZU5ldwkAAgECMEJhbGFuY2Ugb2Ygc2hhcmUtdG9rZW4gaXMgbG93ZXIgdGhhbiB0b3RhbEFtb3VudAQNJHQwMTkzNzkxOTQ2MQkBCWNsYWltQ2FsYwIFBHBvb2wFBHVzZXIEDGZhcm1JbnRlcmVzdAgFDSR0MDE5Mzc5MTk0NjECXzEEDWJvb3N0SW50ZXJlc3QIBQ0kdDAxOTM3OTE5NDYxAl8yBAtjbGFpbUFtb3VudAgFDSR0MDE5Mzc5MTk0NjECXzMECnRvVHJlYXN1cmUIBQ0kdDAxOTM3OTE5NDYxAl80BBFhdmFpbGFibGVGdW5kc05ldwkAZAIJARF1c2VyQXZhaWxhYmxlU1dPUAIFBHBvb2wFBHVzZXIFC2NsYWltQW1vdW50BAR1cGxwAwkAAAIJAJ0IAgkBB0FkZHJlc3MBCQDZBAEFBHBvb2wCB3ZlcnNpb24CBTMuMC4wCQD8BwQFEGxwRmFybWluZ0FkZHJlc3MCEnVwZGF0ZVVzZXJJbnRlcmVzdAkAzAgCBQR1c2VyCQDMCAIFBHBvb2wJAMwIAgUUdG90YWxVc2VyU2hhcmVUb2tlbnMFA25pbAUDbmlsAAADCQAAAgUEdXBscAUEdXBscAkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyBRVrRmFybVVzZXJMYXN0SW50ZXJlc3QFDGZhcm1JbnRlcmVzdAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUWa0Jvb3N0VXNlckxhc3RJbnRlcmVzdAUNYm9vc3RJbnRlcmVzdAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBRFrRmFybUxhc3RJbnRlcmVzdAUMZmFybUludGVyZXN0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHBvb2wFEmtCb29zdExhc3RJbnRlcmVzdAUNYm9vc3RJbnRlcmVzdAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBRNrTGFzdEludGVyZXN0SGVpZ2h0BQZoZWlnaHQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAUWa1NoYXJlVG90YWxTaGFyZVRva2VucwUNdG90YWxTaGFyZU5ldwkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUOa0F2YWlsYWJsZVNXT1AFEWF2YWlsYWJsZUZ1bmRzTmV3CQDMCAIJAQdSZWlzc3VlAwUEU1dPUAUKdG9UcmVhc3VyZQYJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUTZmFybWluZ1RyZWFzdXJlQWRkcgUKdG9UcmVhc3VyZQUEU1dPUAUDbmlsBQtsb2NrRW50cmllcwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgEXY2FsY1dpdGhkcmF3U2hhcmVUb2tlbnMEAWkGY2FsbGVyBHBvb2wZc2hhcmVUb2tlbnNXaXRoZHJhd0Ftb3VudAQDaW52AwkBEWdldERlcHJlY2F0ZWRQb29sAQUEcG9vbAkA/AcEBQR0aGlzAhh1bmxvY2tVc2VyTG9ja0RlcHJlY2F0ZWQJAMwIAgUEcG9vbAkAzAgCCQClCAEFBmNhbGxlcgUDbmlsBQNuaWwAAAMJAAACBQNpbnYFA2ludgQNc2hhcmVUb2tlbnNJZAkA2QQBCQERQGV4dHJOYXRpdmUoMTA1MykCCQEFdmFsdWUBCQCmCAEFBHBvb2wCDnNoYXJlX2Fzc2V0X2lkBAR1c2VyCQClCAEFBmNhbGxlcgQNJHQwMjA3NTgyMDg0MAkBCWNsYWltQ2FsYwIFBHBvb2wFBHVzZXIEDGZhcm1JbnRlcmVzdAgFDSR0MDIwNzU4MjA4NDACXzEEDWJvb3N0SW50ZXJlc3QIBQ0kdDAyMDc1ODIwODQwAl8yBAtjbGFpbUFtb3VudAgFDSR0MDIwNzU4MjA4NDACXzMECnRvVHJlYXN1cmUIBQ0kdDAyMDc1ODIwODQwAl80BBB1c2VyU3Rha2VkQW1vdW50CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXIFFmtVc2VyU2hhcmVUb2tlbnNTdGFrZWQAAAQQdXNlckxvY2tlZEFtb3VudAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyBRZrVXNlclNoYXJlVG9rZW5zTG9ja2VkAAAEEXVzZXJBbW91bnRWaXJ0dWFsCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXIFF2tVc2VyU2hhcmVUb2tlbnNWaXJ0dWFsBRB1c2VyU3Rha2VkQW1vdW50BBN1c2VyU3Rha2VkQW1vdW50TmV3CQBlAgUQdXNlclN0YWtlZEFtb3VudAUZc2hhcmVUb2tlbnNXaXRoZHJhd0Ftb3VudAQRYXZhaWxhYmxlRnVuZHNOZXcJAGQCCQERdXNlckF2YWlsYWJsZVNXT1ACBQRwb29sBQR1c2VyBQtjbGFpbUFtb3VudAQQdG90YWxTaGFyZUFtb3VudAkBEmdldFRvdGFsU2hhcmVUb2tlbgEFBHBvb2wEEXRvdGFsU2hhcmVWaXJ0dWFsCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgUEcG9vbAUTa1NoYXJlVG9rZW5zVmlydHVhbAUQdG90YWxTaGFyZUFtb3VudAQTdG90YWxTaGFyZUFtb3VudE5ldwkAZQIFEHRvdGFsU2hhcmVBbW91bnQFGXNoYXJlVG9rZW5zV2l0aGRyYXdBbW91bnQEFHRvdGFsU2hhcmVWaXJ0dWFsTmV3CQBlAgURdG90YWxTaGFyZVZpcnR1YWwFGXNoYXJlVG9rZW5zV2l0aGRyYXdBbW91bnQEFHVzZXJBbW91bnRWaXJ0dWFsTmV3CQBlAgURdXNlckFtb3VudFZpcnR1YWwFGXNoYXJlVG9rZW5zV2l0aGRyYXdBbW91bnQDCQBmAgUZc2hhcmVUb2tlbnNXaXRoZHJhd0Ftb3VudAUQdXNlclN0YWtlZEFtb3VudAkAAgECLFdpdGhkcmF3IGFtb3VudCBtb3JlIHRoZW4gdXNlciBsb2NrZWQgYW1vdW50AwkAZgIJAQ5hY2NvdW50QmFsYW5jZQEFDXNoYXJlVG9rZW5zSWQFEHRvdGFsU2hhcmVBbW91bnQJAAIBAjBCYWxhbmNlIG9mIHNoYXJlLXRva2VuIGlzIGxvd2VyIHRoYW4gdG90YWxBbW91bnQEBHVwbHADCQAAAgkAnQgCCQEHQWRkcmVzcwEJANkEAQUEcG9vbAIHdmVyc2lvbgIFMy4wLjAJAPwHBAUQbHBGYXJtaW5nQWRkcmVzcwISdXBkYXRlVXNlckludGVyZXN0CQDMCAIFBHVzZXIJAMwIAgUEcG9vbAkAzAgCCQBkAgUQdXNlclN0YWtlZEFtb3VudAUQdXNlckxvY2tlZEFtb3VudAUDbmlsBQNuaWwAAAMJAAACBQR1cGxwBQR1cGxwCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyBRVrRmFybVVzZXJMYXN0SW50ZXJlc3QFDGZhcm1JbnRlcmVzdAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUWa0Jvb3N0VXNlckxhc3RJbnRlcmVzdAUNYm9vc3RJbnRlcmVzdAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBRFrRmFybUxhc3RJbnRlcmVzdAUMZmFybUludGVyZXN0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHBvb2wFEmtCb29zdExhc3RJbnRlcmVzdAUNYm9vc3RJbnRlcmVzdAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBRNrTGFzdEludGVyZXN0SGVpZ2h0BQZoZWlnaHQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXIFFmtVc2VyU2hhcmVUb2tlbnNTdGFrZWQFE3VzZXJTdGFrZWRBbW91bnROZXcJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXIFF2tVc2VyU2hhcmVUb2tlbnNWaXJ0dWFsBRR1c2VyQW1vdW50VmlydHVhbE5ldwkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBRZrU2hhcmVUb3RhbFNoYXJlVG9rZW5zBRN0b3RhbFNoYXJlQW1vdW50TmV3CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHBvb2wFE2tTaGFyZVRva2Vuc1ZpcnR1YWwFFHRvdGFsU2hhcmVWaXJ0dWFsTmV3CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyBQ5rQXZhaWxhYmxlU1dPUAURYXZhaWxhYmxlRnVuZHNOZXcJAMwIAgkBB1JlaXNzdWUDBQRTV09QBQp0b1RyZWFzdXJlBgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBRNmYXJtaW5nVHJlYXN1cmVBZGRyBQp0b1RyZWFzdXJlBQRTV09QCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgUZc2hhcmVUb2tlbnNXaXRoZHJhd0Ftb3VudAUNc2hhcmVUb2tlbnNJZAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQljYWxjQ2xhaW0DAWkEcG9vbAZjYWxsZXIEDXNoYXJlVG9rZW5zSWQJANkEAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBBXZhbHVlAQkApggBBQRwb29sAg5zaGFyZV9hc3NldF9pZAQEdXNlcgkApQgBBQZjYWxsZXIEEHNoYXJlVG9rZW5Mb2NrZWQJARJnZXRUb3RhbFNoYXJlVG9rZW4BBQRwb29sBA0kdDAyMzM1MTIzNDMzCQEJY2xhaW1DYWxjAgUEcG9vbAUEdXNlcgQMZmFybUludGVyZXN0CAUNJHQwMjMzNTEyMzQzMwJfMQQNYm9vc3RJbnRlcmVzdAgFDSR0MDIzMzUxMjM0MzMCXzIEC2NsYWltQW1vdW50CAUNJHQwMjMzNTEyMzQzMwJfMwQKdG9UcmVhc3VyZQgFDSR0MDIzMzUxMjM0MzMCXzQEDWF2YWlsYWJsZUZ1bmQJAGQCCQERdXNlckF2YWlsYWJsZVNXT1ACBQRwb29sBQR1c2VyBQtjbGFpbUFtb3VudAMJAGYCCQEOYWNjb3VudEJhbGFuY2UBBQ1zaGFyZVRva2Vuc0lkBRBzaGFyZVRva2VuTG9ja2VkCQACAQIwQmFsYW5jZSBvZiBzaGFyZS10b2tlbiBpcyBsb3dlciB0aGFuIHRvdGFsQW1vdW50BAZ1VHJhbnMDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQ1hdmFpbGFibGVGdW5kBQRTV09QBQNuaWwFA25pbAkAlAoCCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXIFFWtGYXJtVXNlckxhc3RJbnRlcmVzdAUMZmFybUludGVyZXN0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyBRZrQm9vc3RVc2VyTGFzdEludGVyZXN0BQ1ib29zdEludGVyZXN0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHBvb2wFEWtGYXJtTGFzdEludGVyZXN0BQxmYXJtSW50ZXJlc3QJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAUSa0Jvb3N0TGFzdEludGVyZXN0BQ1ib29zdEludGVyZXN0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHBvb2wFE2tMYXN0SW50ZXJlc3RIZWlnaHQFBmhlaWdodAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUOa0F2YWlsYWJsZVNXT1AAAAkAzAgCCQEHUmVpc3N1ZQMFBFNXT1AJAGQCBQp0b1RyZWFzdXJlBQ1hdmFpbGFibGVGdW5kBgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBRNmYXJtaW5nVHJlYXN1cmVBZGRyBQp0b1RyZWFzdXJlBQRTV09QBQNuaWwFBnVUcmFucwUNYXZhaWxhYmxlRnVuZAESdW5sb2NrVXNlckxvY2tDYWxjAwFpBHBvb2wEdXNlcgQRdG90YWxTaGFyZVZpcnR1YWwJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgUEcG9vbAUTa1NoYXJlVG9rZW5zVmlydHVhbAQQdXNlclN0YWtlZEFtb3VudAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyBRZrVXNlclNoYXJlVG9rZW5zU3Rha2VkAAAEEHVzZXJMb2NrZWRBbW91bnQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUWa1VzZXJTaGFyZVRva2Vuc0xvY2tlZAAABBF1c2VyQW1vdW50VmlydHVhbAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyBRdrVXNlclNoYXJlVG9rZW5zVmlydHVhbAUQdXNlclN0YWtlZEFtb3VudAQTdXNlclN0YWtlZEFtb3VudE5ldwkAZAIFEHVzZXJTdGFrZWRBbW91bnQFEHVzZXJMb2NrZWRBbW91bnQEDSR0MDI0ODM2MjQ5MTgJAQljbGFpbUNhbGMCBQRwb29sBQR1c2VyBAxmYXJtSW50ZXJlc3QIBQ0kdDAyNDgzNjI0OTE4Al8xBA1ib29zdEludGVyZXN0CAUNJHQwMjQ4MzYyNDkxOAJfMgQLY2xhaW1BbW91bnQIBQ0kdDAyNDgzNjI0OTE4Al8zBAp0b1RyZWFzdXJlCAUNJHQwMjQ4MzYyNDkxOAJfNAQRYXZhaWxhYmxlRnVuZHNOZXcJAGQCCQERdXNlckF2YWlsYWJsZVNXT1ACBQRwb29sBQR1c2VyBQtjbGFpbUFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUVa0Zhcm1Vc2VyTGFzdEludGVyZXN0BQxmYXJtSW50ZXJlc3QJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXIFFmtCb29zdFVzZXJMYXN0SW50ZXJlc3QFDWJvb3N0SW50ZXJlc3QJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAURa0Zhcm1MYXN0SW50ZXJlc3QFDGZhcm1JbnRlcmVzdAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBRJrQm9vc3RMYXN0SW50ZXJlc3QFDWJvb3N0SW50ZXJlc3QJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAUTa0xhc3RJbnRlcmVzdEhlaWdodAUGaGVpZ2h0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyBRZrVXNlclNoYXJlVG9rZW5zU3Rha2VkBRN1c2VyU3Rha2VkQW1vdW50TmV3CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyBRdrVXNlclNoYXJlVG9rZW5zVmlydHVhbAUTdXNlclN0YWtlZEFtb3VudE5ldwkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBRNrU2hhcmVUb2tlbnNWaXJ0dWFsCQBkAgkAZQIFEXRvdGFsU2hhcmVWaXJ0dWFsBRF1c2VyQW1vdW50VmlydHVhbAUTdXNlclN0YWtlZEFtb3VudE5ldwkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUOa0F2YWlsYWJsZVNXT1AFEWF2YWlsYWJsZUZ1bmRzTmV3CQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXIFFmtVc2VyU2hhcmVUb2tlbnNMb2NrZWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUca1VzZXJTaGFyZVRva2Vuc0xvY2tlZEhlaWdodAkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyBRprVXNlclNoYXJlVG9rZW5zTG9ja2VkVHlwZQkAzAgCCQEHUmVpc3N1ZQMFBFNXT1AFCnRvVHJlYXN1cmUGCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFE2Zhcm1pbmdUcmVhc3VyZUFkZHIFCnRvVHJlYXN1cmUFBFNXT1AFA25pbBIBaQEEaW5pdAEHZWFybHlMUAMJAQlpc0RlZmluZWQBCQCdCAIFBHRoaXMFB2tTV09QaWQJAAIBAhhTV09QIGFscmVhZHkgaW5pdGlhbGl6ZWQECmluaXRBbW91bnQAgIDpg7HeFgQJU1dPUGlzc3VlCQDCCAUCBFNXT1ACE1NXT1AgcHJvdG9jb2wgdG9rZW4FCmluaXRBbW91bnQACAYEBlNXT1BpZAkAuAgBBQlTV09QaXNzdWUJAMwIAgkBDEJvb2xlYW5FbnRyeQIFB2tBY3RpdmUGCQDMCAIJAMIIBQIEU1dPUAITU1dPUCBwcm90b2NvbCB0b2tlbgUKaW5pdEFtb3VudAAIBgkAzAgCCQELU3RyaW5nRW50cnkCBQdrU1dPUGlkCQDYBAEFBlNXT1BpZAUDbmlsAWkBFGluaXRQb29sU2hhcmVGYXJtaW5nAQRwb29sCQELdmFsdWVPckVsc2UCCQELaXNBZG1pbkNhbGwBBQFpCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHBvb2wFFmtTaGFyZVRvdGFsU2hhcmVUb2tlbnMAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBRFrRmFybUxhc3RJbnRlcmVzdAAACQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHBvb2wFEmtCb29zdExhc3RJbnRlcmVzdAAACQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHBvb2wFE2tMYXN0SW50ZXJlc3RIZWlnaHQFBmhlaWdodAUDbmlsAWkBEnVwZGF0ZVBvb2xJbnRlcmVzdAEEcG9vbAkBC3ZhbHVlT3JFbHNlAgkBCGlzQWN0aXZlAAMJAQIhPQIIBQFpBmNhbGxlcgUKZ292QWRkcmVzcwkAAgECJk9ubHkgR292ZXJuYW5jZSBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uBAR1c2VyCQClCAEJAKcIAQURYWRtaW5JbnZva2VQdWJLZXkEDSR0MDI3MDg0MjcxNTgJAQljbGFpbUNhbGMCBQRwb29sBQR1c2VyBAxmYXJtSW50ZXJlc3QIBQ0kdDAyNzA4NDI3MTU4Al8xBA1ib29zdEludGVyZXN0CAUNJHQwMjcwODQyNzE1OAJfMgQPYm9vc3RMUGludGVyZXN0CAUNJHQwMjcwODQyNzE1OAJfMwkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBRFrRmFybUxhc3RJbnRlcmVzdAUMZmFybUludGVyZXN0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHBvb2wFEmtCb29zdExhc3RJbnRlcmVzdAUNYm9vc3RJbnRlcmVzdAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBRNrTGFzdEludGVyZXN0SGVpZ2h0BQZoZWlnaHQFA25pbAFpAQ9sb2NrU2hhcmVUb2tlbnMCBHBvb2wIbG9ja1R5cGUJAQt2YWx1ZU9yRWxzZQIJARBpc0RlcHJlY2F0ZWRQb29sAQUEcG9vbAkBC3ZhbHVlT3JFbHNlAgkBCGlzQWN0aXZlAAkBE2NhbGNMb2NrU2hhcmVUb2tlbnMEBQFpCAUBaQZjYWxsZXIFBHBvb2wFCGxvY2tUeXBlAWkBF2xvY2tTaGFyZVRva2Vuc0Zyb21Qb29sAwtjYWxsZXJCeXRlcwRwb29sCGxvY2tUeXBlCQELdmFsdWVPckVsc2UCCQEQaXNEZXByZWNhdGVkUG9vbAEFBHBvb2wJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQAJAQt2YWx1ZU9yRWxzZQIJAQppc1Bvb2xDYWxsAgUBaQUEcG9vbAkBE2NhbGNMb2NrU2hhcmVUb2tlbnMEBQFpCQEHQWRkcmVzcwEFC2NhbGxlckJ5dGVzBQRwb29sBQhsb2NrVHlwZQFpARVsb2NrU3Rha2VkU2hhcmVUb2tlbnMDBHBvb2wIbG9ja1R5cGUKbG9ja0Ftb3VudAkBC3ZhbHVlT3JFbHNlAgkBEGlzRGVwcmVjYXRlZFBvb2wBBQRwb29sCQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUABAxzaGFyZUFzc2V0SWQJAQ9nZXRTaGFyZUFzc2V0SWQBBQRwb29sBAR1c2VyCQClCAEIBQFpBmNhbGxlcgQKdG90YWxTaGFyZQkBEmdldFRvdGFsU2hhcmVUb2tlbgEFBHBvb2wEEXRvdGFsU2hhcmVWaXJ0dWFsCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgUEcG9vbAUTa1NoYXJlVG9rZW5zVmlydHVhbAUKdG90YWxTaGFyZQQQdXNlclN0YWtlZEFtb3VudAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyBRZrVXNlclNoYXJlVG9rZW5zU3Rha2VkAAAED3VzZXJMb2NrZWRIZWlndAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyBRxrVXNlclNoYXJlVG9rZW5zTG9ja2VkSGVpZ2h0AAAEEHVzZXJMb2NrZWRBbW91bnQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUWa1VzZXJTaGFyZVRva2Vuc0xvY2tlZAAABBF1c2VyQW1vdW50VmlydHVhbAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyBRdrVXNlclNoYXJlVG9rZW5zVmlydHVhbAUQdXNlclN0YWtlZEFtb3VudAQUdG90YWxVc2VyU2hhcmVUb2tlbnMJAGQCBRB1c2VyU3Rha2VkQW1vdW50BRB1c2VyTG9ja2VkQW1vdW50BA0kdDAyODc4NzI4ODM5CQENZ2V0TG9ja1BhcmFtcwEFCGxvY2tUeXBlBApsb2NrUGVyaW9kCAUNJHQwMjg3ODcyODgzOQJfMQQIbG9ja0NvZWYIBQ0kdDAyODc4NzI4ODM5Al8yBAxsb2NrV2F2ZXNGZWUJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMFDWtMb2NrV2F2ZXNGZWUDCQBmAgkBFWdldEhlaWdodEZpcnN0SGFydmVzdAEFBHBvb2wFBmhlaWdodAkAAgECMllvdSBjYW4ndCBsb2NrIHNoYXJlVG9rZW5zIHRpbGwgZmlyc3QgaGFydmVzdCBlbmQuAwkAZwIAAAUIbG9ja1R5cGUJAAIBAhRsb2NrVHlwZSBtdXN0IGJlID4gMAMJAGYCBQpsb2NrQW1vdW50BRB1c2VyU3Rha2VkQW1vdW50CQACAQkArAICAhlZb3UgY2FuJ3QgbG9jayBtb3JlIHRoYW4gCQCkAwEFEHVzZXJTdGFrZWRBbW91bnQDCQBmAgkBDmFjY291bnRCYWxhbmNlAQUMc2hhcmVBc3NldElkBQp0b3RhbFNoYXJlCQACAQIwQmFsYW5jZSBvZiBzaGFyZS10b2tlbiBpcyBsb3dlciB0aGFuIHRvdGFsQW1vdW50AwMJAAACBQ91c2VyTG9ja2VkSGVpZ3QAAAMDCQBmAgABCQCQAwEIBQFpCHBheW1lbnRzBgkBAiE9AggJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBQR1bml0BgkAZgIFDGxvY2tXYXZlc0ZlZQgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQHCQACAQkArAICCQCsAgICK1lvdSBuZWVkIHRvIHBheSBhZGRpdGlvbmFsIHdhdmVzIGNvbWlzc2lvbiAJAKQDAQUMbG9ja1dhdmVzRmVlAgVXQVZFUwMDCQAAAgUPdXNlckxvY2tlZEhlaWd0AAAJAGcCAAAFCmxvY2tBbW91bnQHCQACAQIhbG9ja0Ftb3VudCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwAwkAZgIAAAUKbG9ja0Ftb3VudAkAAgECG2xvY2tBbW91bnQgbXVzdCBiZSBwb3NpdGl2ZQMJAGYCBQ91c2VyTG9ja2VkSGVpZ3QJAGQCBQZoZWlnaHQFCmxvY2tQZXJpb2QJAAIBAk9Zb3UgY2Fubm90IGxvY2sgc2hhcmV0b2tlbnMgZm9yIGEgcGVyaW9kIGxlc3MgdGhhbiB3aGF0IHlvdSBoYXZlIGFscmVhZHkgbG9ja2VkBBN1c2VyTG9ja2VkQW1vdW50TmV3CQBkAgUQdXNlckxvY2tlZEFtb3VudAUKbG9ja0Ftb3VudAQTdXNlclN0YWtlZEFtb3VudE5ldwkAZQIFEHVzZXJTdGFrZWRBbW91bnQFCmxvY2tBbW91bnQEEnVzZXJMb2NrZWRIZWlndE5ldwkAZAIFBmhlaWdodAUKbG9ja1BlcmlvZAQUdXNlckFtb3VudFZpcnR1YWxOZXcJAGQCCQBrAwUTdXNlckxvY2tlZEFtb3VudE5ldwUIbG9ja0NvZWYFEmxvY2tCb29zdENvZWZTY2FsZQUTdXNlclN0YWtlZEFtb3VudE5ldwQNJHQwMzAxODUzMDI2NwkBCWNsYWltQ2FsYwIFBHBvb2wFBHVzZXIEDGZhcm1JbnRlcmVzdAgFDSR0MDMwMTg1MzAyNjcCXzEEDWJvb3N0SW50ZXJlc3QIBQ0kdDAzMDE4NTMwMjY3Al8yBAtjbGFpbUFtb3VudAgFDSR0MDMwMTg1MzAyNjcCXzMECnRvVHJlYXN1cmUIBQ0kdDAzMDE4NTMwMjY3Al80BBFhdmFpbGFibGVGdW5kc05ldwkAZAIJARF1c2VyQXZhaWxhYmxlU1dPUAIFBHBvb2wFBHVzZXIFC2NsYWltQW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyBRZrVXNlclNoYXJlVG9rZW5zU3Rha2VkBRN1c2VyU3Rha2VkQW1vdW50TmV3CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyBRZrVXNlclNoYXJlVG9rZW5zTG9ja2VkBRN1c2VyTG9ja2VkQW1vdW50TmV3CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyBRxrVXNlclNoYXJlVG9rZW5zTG9ja2VkSGVpZ2h0BRJ1c2VyTG9ja2VkSGVpZ3ROZXcJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXIFGmtVc2VyU2hhcmVUb2tlbnNMb2NrZWRUeXBlBQhsb2NrVHlwZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUXa1VzZXJTaGFyZVRva2Vuc1ZpcnR1YWwFFHVzZXJBbW91bnRWaXJ0dWFsTmV3CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHBvb2wFE2tTaGFyZVRva2Vuc1ZpcnR1YWwJAGQCCQBlAgURdG90YWxTaGFyZVZpcnR1YWwFEXVzZXJBbW91bnRWaXJ0dWFsBRR1c2VyQW1vdW50VmlydHVhbE5ldwkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUVa0Zhcm1Vc2VyTGFzdEludGVyZXN0BQxmYXJtSW50ZXJlc3QJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXIFFmtCb29zdFVzZXJMYXN0SW50ZXJlc3QFDWJvb3N0SW50ZXJlc3QJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAURa0Zhcm1MYXN0SW50ZXJlc3QFDGZhcm1JbnRlcmVzdAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBRJrQm9vc3RMYXN0SW50ZXJlc3QFDWJvb3N0SW50ZXJlc3QJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAUTa0xhc3RJbnRlcmVzdEhlaWdodAUGaGVpZ2h0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyBQ5rQXZhaWxhYmxlU1dPUAURYXZhaWxhYmxlRnVuZHNOZXcJAMwIAgkBB1JlaXNzdWUDBQRTV09QBQp0b1RyZWFzdXJlBgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBRNmYXJtaW5nVHJlYXN1cmVBZGRyBQp0b1RyZWFzdXJlBQRTV09QBQNuaWwBaQEOdW5sb2NrVXNlckxvY2sCBHBvb2wEdXNlcgkBC3ZhbHVlT3JFbHNlAgkBCGlzQWN0aXZlAAQPdXNlckxvY2tlZEhlaWd0CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUEdGhpcwkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUca1VzZXJTaGFyZVRva2Vuc0xvY2tlZEhlaWdodAkArAICCQCsAgIJAKwCAgkArAICAhFUaGVyZSBpcyBubyBwb29sIAUEcG9vbAIJIG9yIHVzZXIgBQR1c2VyAgl3aXRoIGxvY2sDCQBmAgUPdXNlckxvY2tlZEhlaWd0BQZoZWlnaHQJAAIBCQCsAgICIllvdSBjYW4ndCB1bmxvY2sgc2hhcmV0b2tlbnMgdGlsbCAJAKQDAQUPdXNlckxvY2tlZEhlaWd0CQDOCAIJARJ1bmxvY2tVc2VyTG9ja0NhbGMDBQFpBQRwb29sBQR1c2VyCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwUNa0xvY2tXYXZlc0ZlZQUEdW5pdAUDbmlsAWkBGHVubG9ja1VzZXJMb2NrRGVwcmVjYXRlZAIEcG9vbAR1c2VyCQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUACQELdmFsdWVPckVsc2UCCQEKaXNTZWxmQ2FsbAEFAWkJAQt2YWx1ZU9yRWxzZQIJARBpc0RlcHJlY2F0ZWRQb29sAQUEcG9vbAkAzggCCQESdW5sb2NrVXNlckxvY2tDYWxjAwUBaQUEcG9vbAUEdXNlcgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQ9tb25leUJveEFkZHJlc3MJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMFDWtMb2NrV2F2ZXNGZWUFBHVuaXQFA25pbAFpARN3aXRoZHJhd1NoYXJlVG9rZW5zAgRwb29sGXNoYXJlVG9rZW5zV2l0aGRyYXdBbW91bnQJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQAJARdjYWxjV2l0aGRyYXdTaGFyZVRva2VucwQFAWkIBQFpBmNhbGxlcgUEcG9vbAUZc2hhcmVUb2tlbnNXaXRoZHJhd0Ftb3VudAFpARt3aXRoZHJhd1NoYXJlVG9rZW5zRnJvbVBvb2wDC2NhbGxlckJ5dGVzBHBvb2wZc2hhcmVUb2tlbnNXaXRoZHJhd0Ftb3VudAkBC3ZhbHVlT3JFbHNlAgkBCGlzQWN0aXZlAAkBC3ZhbHVlT3JFbHNlAgkBCmlzUG9vbENhbGwCBQFpBQRwb29sCQEXY2FsY1dpdGhkcmF3U2hhcmVUb2tlbnMEBQFpCQEHQWRkcmVzcwEFC2NhbGxlckJ5dGVzBQRwb29sBRlzaGFyZVRva2Vuc1dpdGhkcmF3QW1vdW50AWkBBWNsYWltAQRwb29sCQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUABAFyCQEJY2FsY0NsYWltAwUBaQUEcG9vbAgFAWkGY2FsbGVyAwkAAAIIBQFyAl8yAAAJAAIBAhlZb3UgaGF2ZSAwIGF2YWlsYWJsZSBTV09QBQFyAWkBDWNsYWltSW50ZXJuYWwCBHBvb2wGY2FsbGVyCQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUACQELdmFsdWVPckVsc2UCCQEKaXNTZWxmQ2FsbAEFAWkJAQljYWxjQ2xhaW0DBQFpBQRwb29sCQEHQWRkcmVzcwEFBmNhbGxlcgFpAQ1jbGFpbUFuZFN0YWtlAQRwb29sCQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUABAtjbGFpbUFtb3VudAoAAUAJAPwHBAUEdGhpcwINY2xhaW1JbnRlcm5hbAkAzAgCBQRwb29sCQDMCAIICAUBaQZjYWxsZXIFYnl0ZXMFA25pbAUDbmlsAwkAAQIFAUACA0ludAUBQAkAAgEJAKwCAgkAAwEFAUACGCBjb3VsZG4ndCBiZSBjYXN0IHRvIEludAMJAAACBQtjbGFpbUFtb3VudAULY2xhaW1BbW91bnQDCQAAAgULY2xhaW1BbW91bnQAAAkAAgECGVlvdSBoYXZlIDAgYXZhaWxhYmxlIFNXT1AECnN0YWtlVG9Hb3YJAPwHBAUKZ292QWRkcmVzcwITbG9ja1NXT1BGcm9tRmFybWluZwUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQRTV09QBQtjbGFpbUFtb3VudAUDbmlsAwkAAAIFCnN0YWtlVG9Hb3YFCnN0YWtlVG9Hb3YFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQhjbGFpbUFsbAEFcG9vbHMJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQAKAQhjbGFpbUludgIKY2xhaW1Ub3RhbARwb29sBAtjbGFpbUFtb3VudAoAAUAJAPwHBAUEdGhpcwINY2xhaW1JbnRlcm5hbAkAzAgCBQRwb29sCQDMCAIICAUBaQZjYWxsZXIFYnl0ZXMFA25pbAUDbmlsAwkAAQIFAUACA0ludAUBQAkAAgEJAKwCAgkAAwEFAUACGCBjb3VsZG4ndCBiZSBjYXN0IHRvIEludAMJAAACBQtjbGFpbUFtb3VudAULY2xhaW1BbW91bnQJAGQCBQpjbGFpbVRvdGFsBQtjbGFpbUFtb3VudAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgQKY2xhaW1Ub3RhbAoAAiRsBQVwb29scwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEIY2xhaW1JbnYCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDYwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkAGgAbABwAHQAeAB8AIAAhACIAIwAkACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgAzADQANQA2ADcAOAA5ADoAOwA8AwkAAAIFCmNsYWltVG90YWwAAAkAAgECGVlvdSBoYXZlIDAgYXZhaWxhYmxlIFNXT1AJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQpjbGFpbVRvdGFsBQRTV09QBQNuaWwBaQEQY2xhaW1BbGxBbmRTdGFrZQEFcG9vbHMJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQAKAQhjbGFpbUludgIKY2xhaW1Ub3RhbARwb29sBAtjbGFpbUFtb3VudAoAAUAJAPwHBAUEdGhpcwINY2xhaW1JbnRlcm5hbAkAzAgCBQRwb29sCQDMCAIICAUBaQZjYWxsZXIFYnl0ZXMFA25pbAUDbmlsAwkAAQIFAUACA0ludAUBQAkAAgEJAKwCAgkAAwEFAUACGCBjb3VsZG4ndCBiZSBjYXN0IHRvIEludAMJAAACBQtjbGFpbUFtb3VudAULY2xhaW1BbW91bnQJAGQCBQpjbGFpbVRvdGFsBQtjbGFpbUFtb3VudAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgQKY2xhaW1Ub3RhbAoAAiRsBQVwb29scwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEIY2xhaW1JbnYCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDYwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkAGgAbABwAHQAeAB8AIAAhACIAIwAkACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgAzADQANQA2ADcAOAA5ADoAOwA8AwkAAAIFCmNsYWltVG90YWwAAAkAAgECGVlvdSBoYXZlIDAgYXZhaWxhYmxlIFNXT1AECnN0YWtlVG9Hb3YJAPwHBAUKZ292QWRkcmVzcwITbG9ja1NXT1BGcm9tRmFybWluZwUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQRTV09QBQpjbGFpbVRvdGFsBQNuaWwDCQAAAgUKc3Rha2VUb0dvdgUKc3Rha2VUb0dvdgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBF3VwZGF0ZVVzZXJCb29zdEludGVyZXN0AgRwb29sBHVzZXIJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQADCQECIT0CCAUBaQZjYWxsZXIFDXZvdGluZ0FkZHJlc3MJAAIBAiNPbmx5IHZvaXRpbmcgY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgQNJHQwMzQ4NDYzNDkyOAkBCWNsYWltQ2FsYwIFBHBvb2wFBHVzZXIEDGZhcm1JbnRlcmVzdAgFDSR0MDM0ODQ2MzQ5MjgCXzEEDWJvb3N0SW50ZXJlc3QIBQ0kdDAzNDg0NjM0OTI4Al8yBAtjbGFpbUFtb3VudAgFDSR0MDM0ODQ2MzQ5MjgCXzMECnRvVHJlYXN1cmUIBQ0kdDAzNDg0NjM0OTI4Al80BBFhdmFpbGFibGVGdW5kc05ldwkAZAIJARF1c2VyQXZhaWxhYmxlU1dPUAIFBHBvb2wFBHVzZXIFC2NsYWltQW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyBRVrRmFybVVzZXJMYXN0SW50ZXJlc3QFDGZhcm1JbnRlcmVzdAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUWa0Jvb3N0VXNlckxhc3RJbnRlcmVzdAUNYm9vc3RJbnRlcmVzdAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBRFrRmFybUxhc3RJbnRlcmVzdAUMZmFybUludGVyZXN0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHBvb2wFEmtCb29zdExhc3RJbnRlcmVzdAUNYm9vc3RJbnRlcmVzdAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBRNrTGFzdEludGVyZXN0SGVpZ2h0BQZoZWlnaHQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXIFDmtBdmFpbGFibGVTV09QBRFhdmFpbGFibGVGdW5kc05ldwkAzAgCCQEHUmVpc3N1ZQMFBFNXT1AFCnRvVHJlYXN1cmUGCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFE2Zhcm1pbmdUcmVhc3VyZUFkZHIFCnRvVHJlYXN1cmUFBFNXT1AFA25pbAFpAQhzaHV0ZG93bgAJAQt2YWx1ZU9yRWxzZQIJAQtpc0FkbWluQ2FsbAEFAWkDCQEBIQEFBmFjdGl2ZQkAAgEJAKwCAgIiREFwcCBpcyBhbHJlYWR5IHN1c3BlbmRlZC4gQ2F1c2U6IAkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzBQZrQ2F1c2UCGnRoZSBjYXVzZSB3YXNuJ3Qgc3BlY2lmaWVkCQEHc3VzcGVuZAECD1BhdXNlZCBieSBhZG1pbgFpAQhhY3RpdmF0ZQAJAQt2YWx1ZU9yRWxzZQIJAQtpc0FkbWluQ2FsbAEFAWkDBQZhY3RpdmUJAAIBAhZEQXBwIGlzIGFscmVhZHkgYWN0aXZlCQDMCAIJAQxCb29sZWFuRW50cnkCBQdrQWN0aXZlBgkAzAgCCQELRGVsZXRlRW50cnkBBQZrQ2F1c2UFA25pbAECdHgBBnZlcmlmeQAEByRtYXRjaDAFAnR4BBJhZG1pblB1YktleTFTaWduZWQDCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAABQxhZG1pblB1YktleTEAAQAABBJhZG1pblB1YktleTJTaWduZWQDCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwABBQxhZG1pblB1YktleTIAAQAABBJhZG1pblB1YktleTNTaWduZWQDCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwACBQxhZG1pblB1YktleTMAAQAACQBnAgkAZAIJAGQCBRJhZG1pblB1YktleTFTaWduZWQFEmFkbWluUHViS2V5MlNpZ25lZAUSYWRtaW5QdWJLZXkzU2lnbmVkAAK3mBkS", "height": 2411841, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 2zQmk5sL4QGGFAhn9BuaN4tH2uzF88oby1x3jBTPfxcL Next: 6td6NtM3MYnWxeNWtf1n4AT1kYJwgpMPsDqiWCsM3hCM Diff:
OldNewDifferences
55
66 let b = "active_all_contracts"
77
8-let c = "shutdown_cause"
8+let c = "deprecated_"
99
10-let d = "_current_pool_fraction_reward"
10+let d = "shutdown_cause"
1111
12-let e = "_previous_pool_fraction_reward"
12+let e = "_current_pool_fraction_reward"
1313
14-let f = "_pool_reward_update_height"
14+let f = "_previous_pool_fraction_reward"
1515
16-let g = "total_reward_per_block_current"
16+let g = "_pool_reward_update_height"
1717
18-let h = "total_reward_per_block_previous"
18+let h = "total_reward_per_block_current"
1919
20-let i = "reward_update_height"
20+let i = "total_reward_per_block_previous"
2121
22-let j = "_share_tokens_locked"
22+let j = "reward_update_height"
2323
24-let k = "_share_tokens_blocked"
24+let k = "_share_tokens_locked"
2525
26-let l = "_share_tokens_blocked_type"
26+let l = "_share_tokens_blocked"
2727
28-let m = "_share_tokens_blocked_height"
28+let m = "_share_tokens_blocked_type"
2929
30-let n = "_share_tokens_virtual"
30+let n = "_share_tokens_blocked_height"
3131
32-let o = "_total_share_tokens_locked"
32+let o = "_share_tokens_virtual"
3333
34-let p = "_total_share_tokens_virtual"
34+let p = "_total_share_tokens_locked"
3535
36-let q = "_lock_params"
36+let q = "_total_share_tokens_virtual"
3737
38-let r = "lock_waves_fee"
38+let r = "_lock_params"
3939
40-let s = "_boost_coef"
40+let s = "lock_waves_fee"
4141
42-let t = "_last_interest"
42+let t = "_boost_coef"
4343
4444 let u = "_last_interest"
4545
46-let v = "_last_interest_b"
46+let v = "_last_interest"
4747
48-let w = "_last_interest_u_b"
48+let w = "_last_interest_b"
4949
50-let x = "_last_interest_height"
50+let x = "_last_interest_u_b"
5151
52-let y = "SWOP_id"
52+let y = "_last_interest_height"
5353
54-let z = "_available_SWOP"
54+let z = "SWOP_id"
5555
56-let A = "swop_year_emission"
56+let A = "_available_SWOP"
5757
58-let B = "_harvest_pool_vote_gSWOP"
58+let B = "swop_year_emission"
5959
60-let C = "_pool_vote_gSWOP"
60+let C = "_harvest_pool_vote_gSWOP"
6161
62-let D = "_user_vote_gSWOP"
62+let D = "_pool_vote_gSWOP"
6363
64-let E = "_pool_struc"
64+let E = "_user_vote_gSWOP"
6565
66-let F = "_user_pool_struc"
66+let F = "_pool_struc"
6767
68-let G = "_harvest_user_pool_vote_gSWOP"
68+let G = "_user_pool_struc"
6969
70-let H = "first_harvest_height"
70+let H = "_harvest_user_pool_vote_gSWOP"
7171
72-let I = "share_limit_on_first_harvest"
72+let I = "first_harvest_height"
7373
74-let J = "_strat_b_farm_interest"
74+let J = "share_limit_on_first_harvest"
7575
76-let K = "cpmm_contract"
76+let K = "_strat_b_farm_interest"
7777
78-let L = "admin_pub_1"
78+let L = "cpmm_contract"
7979
80-let M = "admin_pub_2"
80+let M = "admin_pub_1"
8181
82-let N = "admin_pub_3"
82+let N = "admin_pub_2"
8383
84-let O = "admin_invoke_pub"
84+let O = "admin_pub_3"
8585
86-let P = "money_box_address"
86+let P = "admin_invoke_pub"
8787
88-let Q = "voting_address"
88+let Q = "money_box_address"
8989
90-let R = "governance_address"
90+let R = "voting_address"
9191
92-let S = "lp_farming"
92+let S = "governance_address"
9393
94-let T = "farming_treasure"
94+let T = "lp_farming"
9595
96-let U = Address(base58'3MvVBtsXroQpy1tsPw21TU2ET9A8WfmrNjz')
96+let U = "farming_treasure"
9797
98-let V = 10000000000
98+let V = Address(base58'3MvVBtsXroQpy1tsPw21TU2ET9A8WfmrNjz')
9999
100-let W = 100000000
100+let W = 10000000000
101101
102-let X = 1000
102+let X = 100000000
103103
104-let Y = 500
104+let Y = 1000
105105
106-let Z = 3397850
106+let Z = 500
107107
108-func aa (ab) = {
109- let ac = getString(U, ab)
110- if ($isInstanceOf(ac, "String"))
108+let aa = 3397850
109+
110+func ab (ac) = {
111+ let ad = getString(V, ac)
112+ if ($isInstanceOf(ad, "String"))
111113 then {
112- let ad = ac
113- fromBase58String(ad)
114+ let ae = ad
115+ fromBase58String(ae)
114116 }
115117 else {
116- let ae = ac
117- throw((ab + "is empty"))
118+ let af = ad
119+ throw((ac + "is empty"))
118120 }
119121 }
120122
121123
122-let af = aa(L)
124+let ag = ab(M)
123125
124-let ag = aa(M)
126+let ah = ab(N)
125127
126-let ah = aa(N)
128+let ai = ab(O)
127129
128-let ai = Address(aa(P))
130+let aj = Address(ab(Q))
129131
130-let aj = Address(aa(Q))
132+let ak = Address(ab(R))
131133
132-let ak = Address(aa(R))
134+let al = Address(ab(S))
133135
134-let al = aa(O)
136+let am = ab(P)
135137
136-let am = Address(aa(S))
138+let an = Address(ab(T))
137139
138-let an = Address(aa(T))
140+let ao = Address(ab(U))
139141
140-let ao = Address(aa(K))
142+let ap = Address(ab(L))
141143
142-let ap = getBooleanValue(this, a)
144+let aq = getBooleanValue(this, a)
143145
144-let aq = valueOrElse(getBoolean(U, b), true)
146+let ar = valueOrElse(getBoolean(V, b), true)
145147
146-let ar = fromBase58String(getStringValue(this, y))
148+let as = fromBase58String(getStringValue(this, z))
147149
148-func as (at) = valueOrElse(getInteger(Address(fromBase58String(at)), H), 0)
150+func at (au) = valueOrElse(getInteger(Address(fromBase58String(au)), I), 0)
149151
150152
151-func au (at) = valueOrErrorMessage(getInteger(at, I), ("No data on the key: " + I))
153+func av (au) = valueOrErrorMessage(getInteger(au, J), ("No data on the key: " + J))
152154
153155
154-func av (at) = valueOrErrorMessage(getInteger(this, (at + o)), (("No data on the key: " + at) + o))
156+func aw (au) = valueOrErrorMessage(getInteger(this, (au + p)), (("No data on the key: " + au) + p))
155157
156158
157-func aw (at) = valueOrElse(getInteger(aj, (at + C)), valueOrElse(parseInt(split(valueOrElse(getString(aj, (at + E)), ""), "_")[0]), 0))
159+func ax (au) = valueOrElse(getInteger(ak, (au + D)), valueOrElse(parseInt(split(valueOrElse(getString(ak, (au + F)), ""), "_")[0]), 0))
158160
159161
160-func ax (at,ay) = valueOrElse(getInteger(aj, (((ay + "_") + at) + D)), valueOrElse(parseInt(split(valueOrElse(getString(aj, (((ay + "_") + at) + F)), ""), "_")[0]), 0))
162+func ay (au,az) = valueOrElse(getInteger(ak, (((az + "_") + au) + E)), valueOrElse(parseInt(split(valueOrElse(getString(ak, (((az + "_") + au) + G)), ""), "_")[0]), 0))
161163
162164
163-func az (at) = fromBase58String(getStringValue(value(addressFromString(at)), "share_asset_id"))
165+func aA (au) = fromBase58String(getStringValue(value(addressFromString(au)), "share_asset_id"))
164166
165167
166-func aA (aB) = {
167- let ac = aB
168- if ($isInstanceOf(ac, "ByteVector"))
168+func aB (aC) = {
169+ let ad = aC
170+ if ($isInstanceOf(ad, "ByteVector"))
169171 then {
170- let aC = ac
171- assetBalance(this, aC)
172+ let aD = ad
173+ assetBalance(this, aD)
172174 }
173- else if ($isInstanceOf(ac, "Unit"))
175+ else if ($isInstanceOf(ad, "Unit"))
174176 then {
175- let aD = ac
177+ let aE = ad
176178 wavesBalance(this).available
177179 }
178180 else throw("Match error")
179181 }
180182
181183
182-func aE (aF,aG) = {
183- let aH = value(assetInfo(aF)).decimals
184+func aF (aG,aH) = {
184185 let aI = value(assetInfo(aG)).decimals
185- let aJ = ((aI - aH) + 8)
186- pow(10, 0, aJ, 0, 0, DOWN)
186+ let aJ = value(assetInfo(aH)).decimals
187+ let aK = ((aJ - aI) + 8)
188+ pow(10, 0, aK, 0, 0, DOWN)
187189 }
188190
189191
190-func aK (at,ay) = valueOrElse(getInteger(this, (((at + "_") + ay) + z)), 0)
192+func aL (au,az) = valueOrElse(getInteger(this, (((au + "_") + az) + A)), 0)
191193
192194
193-func aL (at) = {
194- let aM = valueOrErrorMessage(getInteger(ak, g), ((("No data on the key: " + g) + " at address ") + toString(ak)))
195- let aN = valueOrErrorMessage(getInteger(ak, h), ((("No data on the key: " + h) + " at address ") + toString(ak)))
196- let aO = valueOrErrorMessage(getInteger(ak, (at + d)), (((("No data on the key: " + at) + d) + " at address ") + toString(ak)))
197- let aP = valueOrErrorMessage(getInteger(ak, i), ((("No data on the key: " + i) + " at address ") + toString(ak)))
198- let aQ = valueOrElse(getInteger(ak, (at + f)), aP)
199- let aR = valueOrErrorMessage(getInteger(ak, (at + e)), (((("No data on the key: " + at) + e) + " at address ") + toString(ak)))
200- let aS = fraction(aM, aO, V)
201- let aT = fraction(aM, aR, V)
202- if (if ((aS > aM))
195+func aM (au) = {
196+ let aN = valueOrErrorMessage(getInteger(al, h), ((("No data on the key: " + h) + " at address ") + toString(al)))
197+ let aO = valueOrErrorMessage(getInteger(al, i), ((("No data on the key: " + i) + " at address ") + toString(al)))
198+ let aP = valueOrErrorMessage(getInteger(al, (au + e)), (((("No data on the key: " + au) + e) + " at address ") + toString(al)))
199+ let aQ = valueOrErrorMessage(getInteger(al, j), ((("No data on the key: " + j) + " at address ") + toString(al)))
200+ let aR = valueOrElse(getInteger(al, (au + g)), aQ)
201+ let aS = valueOrErrorMessage(getInteger(al, (au + f)), (((("No data on the key: " + au) + f) + " at address ") + toString(al)))
202+ let aT = fraction(aN, aP, W)
203+ let aU = fraction(aN, aS, W)
204+ if (if ((aT > aN))
203205 then true
204- else (aT > aN))
206+ else (aU > aO))
205207 then throw("rewardPoolCurrent > totalRewardPerBlockCurrent or rewardPoolPrevious > totalRewardPerBlockPrevious")
206- else $Tuple4(aS, aP, aT, aQ)
208+ else $Tuple4(aT, aQ, aU, aR)
207209 }
208210
209211
210-func aU (at) = {
211- let aV = valueOrErrorMessage(getInteger(this, (at + t)), (("No data on the key: " + at) + t))
212- let aW = valueOrElse(getInteger(this, (at + v)), 0)
213- let aX = valueOrElse(getInteger(this, (at + x)), height)
214- $Tuple3(aX, aV, aW)
212+func aV (au) = {
213+ let aW = valueOrErrorMessage(getInteger(this, (au + u)), (("No data on the key: " + au) + u))
214+ let aX = valueOrElse(getInteger(this, (au + w)), 0)
215+ let aY = valueOrElse(getInteger(this, (au + y)), height)
216+ $Tuple3(aY, aW, aX)
215217 }
216218
217219
218-func aY (at,aZ) = {
219- let ba = valueOrElse(getInteger(this, (at + s)), Y)
220- fraction(aZ, X, (ba + X))
220+func aZ (au,ba) = {
221+ let bb = valueOrElse(getInteger(this, (au + t)), Z)
222+ fraction(ba, Y, (bb + Y))
221223 }
222224
223225
224-func bb (at,aZ) = {
225- let ba = valueOrElse(getInteger(this, (at + s)), Y)
226- fraction(aZ, ba, (ba + X))
226+func bc (au,ba) = {
227+ let bb = valueOrElse(getInteger(this, (au + t)), Z)
228+ fraction(ba, bb, (bb + Y))
227229 }
228230
229231
230-func bc (at,aX,aP,aQ,aV,aW,bd,be,bf,bg,bh) = {
231- let bi = if (if (if ((aP > height))
232- then (aP == aQ)
232+func bd (au,aY,aQ,aR,aW,aX,be,bf,bg,bh,bi) = {
233+ let bj = if (if (if ((aQ > height))
234+ then (aQ == aR)
233235 else false)
234236 then true
235- else if ((height > aP))
236- then (aP != aQ)
237+ else if ((height > aQ))
238+ then (aQ != aR)
237239 else false)
238240 then {
239- let bj = (bg * (height - aX))
240- $Tuple3(bj, aV, aW)
241+ let bk = (bh * (height - aY))
242+ $Tuple3(bk, aW, aX)
241243 }
242- else if (if (if ((height > aP))
243- then (aP == aQ)
244+ else if (if (if ((height > aQ))
245+ then (aQ == aR)
244246 else false)
245- then (aX > aP)
247+ then (aY > aQ)
246248 else false)
247249 then {
248- let bj = (be * (height - aX))
249- $Tuple3(bj, aV, aW)
250+ let bk = (bf * (height - aY))
251+ $Tuple3(bk, aW, aX)
250252 }
251253 else {
252- let bk = (bg * (aP - aX))
253- let bl = (aV + fraction(aY(at, bk), bh, bf))
254- let bm = (aW + (if ((bd > 0))
255- then fraction(bb(at, bk), W, bd)
254+ let bl = (bh * (aQ - aY))
255+ let bm = (aW + fraction(aZ(au, bl), bi, bg))
256+ let bn = (aX + (if ((be > 0))
257+ then fraction(bc(au, bl), X, be)
256258 else 0))
257- let bn = (be * (height - aP))
258- $Tuple3(bn, bl, bm)
259+ let bo = (bf * (height - aQ))
260+ $Tuple3(bo, bm, bn)
259261 }
260- let bo = bi._1
261- let bp = bi._2
262- let bq = bi._3
263- let br = (bp + fraction(aY(at, bo), bh, bf))
264- let bs = (bq + (if ((bd > 0))
265- then fraction(bb(at, bo), W, bd)
262+ let bp = bj._1
263+ let bq = bj._2
264+ let br = bj._3
265+ let bs = (bq + fraction(aZ(au, bp), bi, bg))
266+ let bt = (br + (if ((be > 0))
267+ then fraction(bc(au, bp), X, be)
266268 else 0))
267- $Tuple2(br, bs)
269+ $Tuple2(bs, bt)
268270 }
269271
270272
271-func bt (at,ay) = {
272- let bh = aE(ar, az(at))
273- let bd = aw(at)
274- let bu = ax(at, ay)
275- let bv = av(at)
276- let bw = valueOrElse(getInteger(this, (at + p)), bv)
277- let bx = valueOrElse(getInteger(this, (at + J)), 0)
278- let by = aU(at)
279- let aX = by._1
280- let aV = by._2
281- let aW = by._3
282- let bz = aL(at)
283- let be = bz._1
284- let aP = bz._2
285- let bg = bz._3
286- let aQ = bz._4
287- let bA = valueOrElse(getInteger(this, (((at + "_") + ay) + u)), aV)
288- let bB = valueOrElse(getInteger(this, (((at + "_") + ay) + w)), if (if ((bx > bA))
289- then (bu > 0)
273+func bu (au,az) = {
274+ let bi = aF(as, aA(au))
275+ let be = ax(au)
276+ let bv = ay(au, az)
277+ let bw = aw(au)
278+ let bx = valueOrElse(getInteger(this, (au + q)), bw)
279+ let by = valueOrElse(getInteger(this, (au + K)), 0)
280+ let bz = aV(au)
281+ let aY = bz._1
282+ let aW = bz._2
283+ let aX = bz._3
284+ let bA = aM(au)
285+ let bf = bA._1
286+ let aQ = bA._2
287+ let bh = bA._3
288+ let aR = bA._4
289+ let bB = valueOrElse(getInteger(this, (((au + "_") + az) + v)), aW)
290+ let bC = valueOrElse(getInteger(this, (((au + "_") + az) + x)), if (if ((by > bB))
291+ then (bv > 0)
290292 else false)
291293 then 0
292- else aW)
293- let bC = valueOrElse(getInteger(this, (((at + "_") + ay) + j)), 0)
294- let bD = valueOrElse(getInteger(this, (((at + "_") + ay) + n)), bC)
295- if ((bw == 0))
294+ else aX)
295+ let bD = valueOrElse(getInteger(this, (((au + "_") + az) + k)), 0)
296+ let bE = valueOrElse(getInteger(this, (((au + "_") + az) + o)), bD)
297+ if ((bx == 0))
296298 then {
297- let bE = if ((aV == 0))
298- then (be * (height - aX))
299- else 0
300- $Tuple4(aV, aW, 0, bE)
299+ let bF = (bf * (height - aY))
300+ $Tuple4(aW, aX, 0, bF)
301301 }
302302 else {
303- let bF = bc(at, aX, aP, aQ, aV, aW, bd, be, bw, bg, bh)
304- let br = bF._1
305- let bs = bF._2
306- let bG = fraction(bD, (br - bA), bh)
307- let ba = valueOrElse(getInteger(this, (at + s)), Y)
308- let bH = fraction(fraction(bD, (br - max([bA, bx])), bh), ba, X)
309- let bI = fraction((bs - bB), bu, W)
310- let bJ = min([bH, bI])
311- let bE = (bH - bJ)
312- if ((0 > bE))
303+ let bG = bd(au, aY, aQ, aR, aW, aX, be, bf, bx, bh, bi)
304+ let bs = bG._1
305+ let bt = bG._2
306+ let bH = fraction(bE, (bs - bB), bi)
307+ let bb = valueOrElse(getInteger(this, (au + t)), Z)
308+ let bI = fraction(fraction(bE, (bs - max([bB, by])), bi), bb, Y)
309+ let bJ = fraction((bt - bC), bv, X)
310+ let bK = min([bI, bJ])
311+ let bF = (bI - bK)
312+ if ((0 > bF))
313313 then throw("toTreasury < 0")
314- else $Tuple4(br, bs, (bG + bJ), bE)
314+ else $Tuple4(bs, bt, (bH + bK), bF)
315315 }
316316 }
317317
318318
319-func bK (bL,ay) = {
320- func bM (bN,at) = {
321- let bO = bN
322- let bP = bO._1
323- let bQ = bO._2
324- let bR = bt(at, ay)
325- let bS = bR._1
326- let bT = bR._2
327- let bU = bR._3
328- let bV = bR._4
329- let bW = (aK(at, ay) + bU)
330- $Tuple2((bP :+ at), (bQ :+ bW))
319+func bL (bM,az) = {
320+ func bN (bO,au) = {
321+ let bP = bO
322+ let bQ = bP._1
323+ let bR = bP._2
324+ let bS = bu(au, az)
325+ let bT = bS._1
326+ let bU = bS._2
327+ let bV = bS._3
328+ let bW = bS._4
329+ let bX = (aL(au, az) + bV)
330+ $Tuple2((bQ :+ au), (bR :+ bX))
331331 }
332332
333- let bX = bL
334- let bY = size(bX)
335- let bZ = $Tuple2(nil, nil)
336- func ca (cb,cc) = if ((cc >= bY))
337- then cb
338- else bM(cb, bX[cc])
333+ let bY = bM
334+ let bZ = size(bY)
335+ let ca = $Tuple2(nil, nil)
336+ func cb (cc,cd) = if ((cd >= bZ))
337+ then cc
338+ else bN(cc, bY[cd])
339339
340- func cd (cb,cc) = if ((cc >= bY))
341- then cb
340+ func ce (cc,cd) = if ((cd >= bZ))
341+ then cc
342342 else throw("List size exceeds 60")
343343
344- cd(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(bZ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60)
344+ ce(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(ca, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60)
345345 }
346346
347347
348-func ce (at,ay,cf,cg,ch) = if ((as(at) > height))
348+func cf (au,az,cg,ch,ci) = if ((at(au) > height))
349349 then {
350- let ci = valueOrElse(getInteger(aj, (at + B)), 0)
351- let cj = valueOrElse(getInteger(aj, (((ay + "_") + at) + G)), 0)
352- let ck = au(addressFromStringValue(at))
353- let cl = (fraction(ck, cj, ci) - cf)
354- if ((ch > 0))
350+ let cj = valueOrElse(getInteger(ak, (au + C)), 0)
351+ let ck = valueOrElse(getInteger(ak, (((az + "_") + au) + H)), 0)
352+ let cl = av(addressFromStringValue(au))
353+ let cm = (fraction(cl, ck, cj) - cg)
354+ if ((ci > 0))
355355 then throw("You can't lock shareTokens till first harvest end.")
356- else if ((cj == 0))
356+ else if ((ck == 0))
357357 then 0
358- else if ((cg >= cl))
359- then (cg - cl)
358+ else if ((ch >= cm))
359+ then (ch - cm)
360360 else 0
361361 }
362362 else 0
363363
364364
365-func cm (cn) = {
366- let co = split(valueOrErrorMessage(getString(this, (toString(cn) + q)), ("There are no key for lock type" + toString(cn))), "_")
367- $Tuple2(parseIntValue(co[0]), parseIntValue(co[1]))
365+func cn (co) = {
366+ let cp = split(valueOrErrorMessage(getString(this, (toString(co) + r)), ("There are no key for lock type" + toString(co))), "_")
367+ $Tuple2(parseIntValue(cp[0]), parseIntValue(cp[1]))
368368 }
369369
370370
371-func cp (cq) = [BooleanEntry(a, false), StringEntry(c, cq)]
371+func cq (cr) = [BooleanEntry(a, false), StringEntry(d, cr)]
372372
373373
374-func cr () = if (if (ap)
375- then aq
374+func cs () = if (if (aq)
375+ then ar
376376 else false)
377377 then unit
378378 else throw("DApp is inactive at this moment")
379379
380380
381-func cs (ct) = if (containsElement([af, ag, ah], ct.callerPublicKey))
381+func ct (cu) = if (containsElement([ag, ah, ai], cu.callerPublicKey))
382382 then unit
383383 else throw("Only admin can call this function")
384384
385385
386-func cu (ct,at) = if (if ((toString(ct.caller) == at))
386+func cv (cu,au) = if (if ((toString(cu.caller) == au))
387387 then true
388- else (ct.caller == ao))
388+ else (cu.caller == ap))
389389 then unit
390390 else throw("Only pool can call this function")
391391
392392
393-func cv (ct) = if ((ct.caller == this))
393+func cw (au) = valueOrElse(getBoolean(V, (c + au)), false)
394+
395+
396+func cx (au) = if (!(cw(au)))
397+ then unit
398+ else throw("Pool is deprecated. Only unlock action allowed.")
399+
400+
401+func cy (cu) = if ((cu.caller == this))
394402 then unit
395403 else throw("Only contract itself can call this function")
396404
397405
398-func cw (ct,cx,at,ch) = {
399- let cy = az(at)
400- let ay = toString(cx)
401- let cz = av(at)
402- let bw = valueOrElse(getInteger(this, (at + p)), cz)
403- let cA = valueOrElse(getInteger(this, (((at + "_") + ay) + j)), 0)
404- let cB = valueOrElse(getInteger(this, (((at + "_") + ay) + m)), 0)
405- let cC = valueOrElse(getInteger(this, (((at + "_") + ay) + k)), 0)
406- let cD = valueOrElse(getInteger(this, (((at + "_") + ay) + n)), cA)
407- let cE = ((cA + cC) + ct.payments[0].amount)
408- let cF = cm(ch)
409- let cG = cF._1
410- let cH = cF._2
411- let cI = getIntegerValue(this, r)
412- if ((ct.payments[0].assetId != cy))
406+func cz (cu,cA,au,ci) = {
407+ let cB = aA(au)
408+ let az = toString(cA)
409+ let cC = aw(au)
410+ let bx = valueOrElse(getInteger(this, (au + q)), cC)
411+ let cD = valueOrElse(getInteger(this, (((au + "_") + az) + k)), 0)
412+ let cE = valueOrElse(getInteger(this, (((au + "_") + az) + n)), 0)
413+ let cF = valueOrElse(getInteger(this, (((au + "_") + az) + l)), 0)
414+ let cG = valueOrElse(getInteger(this, (((au + "_") + az) + o)), cD)
415+ let cH = ((cD + cF) + cu.payments[0].amount)
416+ let cI = cn(ci)
417+ let cJ = cI._1
418+ let cK = cI._2
419+ let cL = getIntegerValue(this, s)
420+ if ((cu.payments[0].assetId != cB))
413421 then throw("Wrong sharetoken in payment")
414- else if ((0 >= ct.payments[0].amount))
422+ else if ((0 >= cu.payments[0].amount))
415423 then throw("Payment amount must be greater than 0")
416- else if ((0 > ch))
424+ else if ((0 > ci))
417425 then throw("lockType must be >= 0")
418426 else {
419- let cJ = ce(at, ay, cA, ct.payments[0].amount, ch)
420- if ((cJ == cJ))
427+ let cM = cf(au, az, cD, cu.payments[0].amount, ci)
428+ if ((cM == cM))
421429 then {
422- let cK = if ((ch == 0))
430+ let cN = if ((ci == 0))
423431 then {
424- let cL = ((cD + ct.payments[0].amount) - cJ)
425- $Tuple2([IntegerEntry((((at + "_") + ay) + j), ((cA + ct.payments[0].amount) - cJ)), IntegerEntry((((at + "_") + ay) + n), cL), IntegerEntry((at + p), ((bw + ct.payments[0].amount) - cJ)), ScriptTransfer(cx, cJ, ct.payments[0].assetId)], ((cz + ct.payments[0].amount) - cJ))
432+ let cO = ((cG + cu.payments[0].amount) - cM)
433+ $Tuple2([IntegerEntry((((au + "_") + az) + k), ((cD + cu.payments[0].amount) - cM)), IntegerEntry((((au + "_") + az) + o), cO), IntegerEntry((au + q), ((bx + cu.payments[0].amount) - cM)), ScriptTransfer(cA, cM, cu.payments[0].assetId)], ((cC + cu.payments[0].amount) - cM))
426434 }
427- else if (if ((cB == 0))
428- then if (if ((2 > size(ct.payments)))
435+ else if (if ((cE == 0))
436+ then if (if ((2 > size(cu.payments)))
429437 then true
430- else (ct.payments[1].assetId != unit))
438+ else (cu.payments[1].assetId != unit))
431439 then true
432- else (cI > ct.payments[1].amount)
440+ else (cL > cu.payments[1].amount)
433441 else false)
434- then throw((("You need to pay additional waves comission " + toString(cI)) + "WAVES"))
435- else if ((cB > (height + cG)))
442+ then throw((("You need to pay additional waves comission " + toString(cL)) + "WAVES"))
443+ else if ((cE > (height + cJ)))
436444 then throw("You cannot lock sharetokens for a period less than what you have already locked")
437445 else {
438- let cM = (cC + ct.payments[0].amount)
439- let cN = (height + cG)
440- let cL = (fraction(cM, cH, X) + cA)
441- $Tuple2([IntegerEntry((((at + "_") + ay) + k), cM), IntegerEntry((((at + "_") + ay) + m), cN), IntegerEntry((((at + "_") + ay) + l), ch), IntegerEntry((((at + "_") + ay) + n), cL), IntegerEntry((at + p), ((bw - cD) + cL))], (cz + ct.payments[0].amount))
446+ let cP = (cF + cu.payments[0].amount)
447+ let cQ = (height + cJ)
448+ let cO = (fraction(cP, cK, Y) + cD)
449+ $Tuple2([IntegerEntry((((au + "_") + az) + l), cP), IntegerEntry((((au + "_") + az) + n), cQ), IntegerEntry((((au + "_") + az) + m), ci), IntegerEntry((((au + "_") + az) + o), cO), IntegerEntry((au + q), ((bx - cG) + cO))], (cC + cu.payments[0].amount))
442450 }
443- let cO = cK._1
444- let cP = cK._2
445- if ((aA(cy) > cP))
451+ let cR = cN._1
452+ let cS = cN._2
453+ if ((aB(cB) > cS))
446454 then throw("Balance of share-token is lower than totalAmount")
447455 else {
448- let cQ = bt(at, ay)
449- let aV = cQ._1
450- let aW = cQ._2
451- let bU = cQ._3
452- let cR = cQ._4
453- let cS = (aK(at, ay) + bU)
454- let cT = if ((getString(Address(fromBase58String(at)), "version") == "3.0.0"))
455- then invoke(am, "updateUserInterest", [ay, at, cE], nil)
456+ let cT = bu(au, az)
457+ let aW = cT._1
458+ let aX = cT._2
459+ let bV = cT._3
460+ let cU = cT._4
461+ let cV = (aL(au, az) + bV)
462+ let cW = if ((getString(Address(fromBase58String(au)), "version") == "3.0.0"))
463+ then invoke(an, "updateUserInterest", [az, au, cH], nil)
456464 else 0
457- if ((cT == cT))
458- then ([IntegerEntry((((at + "_") + ay) + u), aV), IntegerEntry((((at + "_") + ay) + w), aW), IntegerEntry((at + t), aV), IntegerEntry((at + v), aW), IntegerEntry((at + x), height), IntegerEntry((at + o), cP), IntegerEntry((((at + "_") + ay) + z), cS), Reissue(ar, cR, true), ScriptTransfer(an, cR, ar)] ++ cO)
465+ if ((cW == cW))
466+ then ([IntegerEntry((((au + "_") + az) + v), aW), IntegerEntry((((au + "_") + az) + x), aX), IntegerEntry((au + u), aW), IntegerEntry((au + w), aX), IntegerEntry((au + y), height), IntegerEntry((au + p), cS), IntegerEntry((((au + "_") + az) + A), cV), Reissue(as, cU, true), ScriptTransfer(ao, cU, as)] ++ cR)
459467 else throw("Strict value is not equal to itself.")
460468 }
461469 }
464472 }
465473
466474
467-func cU (ct,cx,at,cV) = valueOrElse(cr(), {
468- let cW = fromBase58String(getStringValue(value(addressFromString(at)), "share_asset_id"))
469- let ay = toString(cx)
470- let cX = bt(at, ay)
471- let aV = cX._1
472- let aW = cX._2
473- let bU = cX._3
474- let cR = cX._4
475- let cA = valueOrElse(getInteger(this, (((at + "_") + ay) + j)), 0)
476- let cC = valueOrElse(getInteger(this, (((at + "_") + ay) + k)), 0)
477- let cD = valueOrElse(getInteger(this, (((at + "_") + ay) + n)), cA)
478- let cY = (cA - cV)
479- let cS = (aK(at, ay) + bU)
480- let cZ = av(at)
481- let bw = valueOrElse(getInteger(this, (at + p)), cZ)
482- let da = (cZ - cV)
483- let db = (bw - cV)
484- let cL = (cD - cV)
485- if ((cV > cA))
486- then throw("Withdraw amount more then user locked amount")
487- else if ((aA(cW) > cZ))
488- then throw("Balance of share-token is lower than totalAmount")
489- else {
490- let cT = if ((getString(Address(fromBase58String(at)), "version") == "3.0.0"))
491- then invoke(am, "updateUserInterest", [ay, at, (cA + cC)], nil)
492- else 0
493- if ((cT == cT))
494- then [IntegerEntry((((at + "_") + ay) + u), aV), IntegerEntry((((at + "_") + ay) + w), aW), IntegerEntry((at + t), aV), IntegerEntry((at + v), aW), IntegerEntry((at + x), height), IntegerEntry((((at + "_") + ay) + j), cY), IntegerEntry((((at + "_") + ay) + n), cL), IntegerEntry((at + o), da), IntegerEntry((at + p), db), IntegerEntry((((at + "_") + ay) + z), cS), Reissue(ar, cR, true), ScriptTransfer(an, cR, ar), ScriptTransfer(ct.caller, cV, cW)]
495- else throw("Strict value is not equal to itself.")
496- }
497- })
475+func cX (cu,cA,au,cY) = {
476+ let cZ = if (cw(au))
477+ then invoke(this, "unlockUserLockDeprecated", [au, toString(cA)], nil)
478+ else 0
479+ if ((cZ == cZ))
480+ then {
481+ let da = fromBase58String(getStringValue(value(addressFromString(au)), "share_asset_id"))
482+ let az = toString(cA)
483+ let db = bu(au, az)
484+ let aW = db._1
485+ let aX = db._2
486+ let bV = db._3
487+ let cU = db._4
488+ let cD = valueOrElse(getInteger(this, (((au + "_") + az) + k)), 0)
489+ let cF = valueOrElse(getInteger(this, (((au + "_") + az) + l)), 0)
490+ let cG = valueOrElse(getInteger(this, (((au + "_") + az) + o)), cD)
491+ let dc = (cD - cY)
492+ let cV = (aL(au, az) + bV)
493+ let dd = aw(au)
494+ let bx = valueOrElse(getInteger(this, (au + q)), dd)
495+ let de = (dd - cY)
496+ let df = (bx - cY)
497+ let cO = (cG - cY)
498+ if ((cY > cD))
499+ then throw("Withdraw amount more then user locked amount")
500+ else if ((aB(da) > dd))
501+ then throw("Balance of share-token is lower than totalAmount")
502+ else {
503+ let cW = if ((getString(Address(fromBase58String(au)), "version") == "3.0.0"))
504+ then invoke(an, "updateUserInterest", [az, au, (cD + cF)], nil)
505+ else 0
506+ if ((cW == cW))
507+ then [IntegerEntry((((au + "_") + az) + v), aW), IntegerEntry((((au + "_") + az) + x), aX), IntegerEntry((au + u), aW), IntegerEntry((au + w), aX), IntegerEntry((au + y), height), IntegerEntry((((au + "_") + az) + k), dc), IntegerEntry((((au + "_") + az) + o), cO), IntegerEntry((au + p), de), IntegerEntry((au + q), df), IntegerEntry((((au + "_") + az) + A), cV), Reissue(as, cU, true), ScriptTransfer(ao, cU, as), ScriptTransfer(cu.caller, cY, da)]
508+ else throw("Strict value is not equal to itself.")
509+ }
510+ }
511+ else throw("Strict value is not equal to itself.")
512+ }
498513
499514
500-func dc (ct,at,cx) = {
501- let cW = fromBase58String(getStringValue(value(addressFromString(at)), "share_asset_id"))
502- let ay = toString(cx)
503- let bf = av(at)
504- let dd = bt(at, ay)
505- let aV = dd._1
506- let aW = dd._2
507- let bU = dd._3
508- let cR = dd._4
509- let bW = (aK(at, ay) + bU)
510- if ((aA(cW) > bf))
515+func dg (cu,au,cA) = {
516+ let da = fromBase58String(getStringValue(value(addressFromString(au)), "share_asset_id"))
517+ let az = toString(cA)
518+ let bg = aw(au)
519+ let dh = bu(au, az)
520+ let aW = dh._1
521+ let aX = dh._2
522+ let bV = dh._3
523+ let cU = dh._4
524+ let bX = (aL(au, az) + bV)
525+ if ((aB(da) > bg))
511526 then throw("Balance of share-token is lower than totalAmount")
512527 else {
513- let de = if ((ct.caller != this))
514- then [ScriptTransfer(ct.caller, bW, ar)]
528+ let di = if ((cu.caller != this))
529+ then [ScriptTransfer(cu.caller, bX, as)]
515530 else nil
516- $Tuple2(([IntegerEntry((((at + "_") + ay) + u), aV), IntegerEntry((((at + "_") + ay) + w), aW), IntegerEntry((at + t), aV), IntegerEntry((at + v), aW), IntegerEntry((at + x), height), IntegerEntry((((at + "_") + ay) + z), 0), Reissue(ar, (cR + bW), true), ScriptTransfer(an, cR, ar)] ++ de), bW)
531+ $Tuple2(([IntegerEntry((((au + "_") + az) + v), aW), IntegerEntry((((au + "_") + az) + x), aX), IntegerEntry((au + u), aW), IntegerEntry((au + w), aX), IntegerEntry((au + y), height), IntegerEntry((((au + "_") + az) + A), 0), Reissue(as, (cU + bX), true), ScriptTransfer(ao, cU, as)] ++ di), bX)
517532 }
518533 }
519534
520535
521-@Callable(ct)
522-func init (df) = if (isDefined(getString(this, y)))
536+func dj (cu,au,az) = {
537+ let bx = getIntegerValue(this, (au + q))
538+ let cD = valueOrElse(getInteger(this, (((au + "_") + az) + k)), 0)
539+ let cF = valueOrElse(getInteger(this, (((au + "_") + az) + l)), 0)
540+ let cG = valueOrElse(getInteger(this, (((au + "_") + az) + o)), cD)
541+ let dc = (cD + cF)
542+ let dk = bu(au, az)
543+ let aW = dk._1
544+ let aX = dk._2
545+ let bV = dk._3
546+ let cU = dk._4
547+ let cV = (aL(au, az) + bV)
548+[IntegerEntry((((au + "_") + az) + v), aW), IntegerEntry((((au + "_") + az) + x), aX), IntegerEntry((au + u), aW), IntegerEntry((au + w), aX), IntegerEntry((au + y), height), IntegerEntry((((au + "_") + az) + k), dc), IntegerEntry((((au + "_") + az) + o), dc), IntegerEntry((au + q), ((bx - cG) + dc)), IntegerEntry((((au + "_") + az) + A), cV), DeleteEntry((((au + "_") + az) + l)), DeleteEntry((((au + "_") + az) + n)), DeleteEntry((((au + "_") + az) + m)), Reissue(as, cU, true), ScriptTransfer(ao, cU, as)]
549+ }
550+
551+
552+@Callable(cu)
553+func init (dl) = if (isDefined(getString(this, z)))
523554 then throw("SWOP already initialized")
524555 else {
525- let dg = 100000000000000
526- let dh = Issue("SWOP", "SWOP protocol token", dg, 8, true)
527- let di = calculateAssetId(dh)
528-[BooleanEntry(a, true), Issue("SWOP", "SWOP protocol token", dg, 8, true), StringEntry(y, toBase58String(di))]
556+ let dm = 100000000000000
557+ let dn = Issue("SWOP", "SWOP protocol token", dm, 8, true)
558+ let do = calculateAssetId(dn)
559+[BooleanEntry(a, true), Issue("SWOP", "SWOP protocol token", dm, 8, true), StringEntry(z, toBase58String(do))]
529560 }
530561
531562
532563
533-@Callable(ct)
534-func initPoolShareFarming (at) = valueOrElse(cs(ct), [IntegerEntry((at + o), 0), IntegerEntry((at + t), 0), IntegerEntry((at + v), 0), IntegerEntry((at + x), height)])
564+@Callable(cu)
565+func initPoolShareFarming (au) = valueOrElse(ct(cu), [IntegerEntry((au + p), 0), IntegerEntry((au + u), 0), IntegerEntry((au + w), 0), IntegerEntry((au + y), height)])
535566
536567
537568
538-@Callable(ct)
539-func updatePoolInterest (at) = valueOrElse(cr(), if ((ct.caller != ak))
569+@Callable(cu)
570+func updatePoolInterest (au) = valueOrElse(cs(), if ((cu.caller != al))
540571 then throw("Only Governance can call this function")
541572 else {
542- let ay = toString(addressFromPublicKey(al))
543- let dj = bt(at, ay)
544- let aV = dj._1
545- let aW = dj._2
546- let dk = dj._3
547-[IntegerEntry((at + t), aV), IntegerEntry((at + v), aW), IntegerEntry((at + x), height)]
573+ let az = toString(addressFromPublicKey(am))
574+ let dp = bu(au, az)
575+ let aW = dp._1
576+ let aX = dp._2
577+ let dq = dp._3
578+[IntegerEntry((au + u), aW), IntegerEntry((au + w), aX), IntegerEntry((au + y), height)]
548579 })
549580
550581
551582
552-@Callable(ct)
553-func lockShareTokens (at,ch) = valueOrElse(cr(), cw(ct, ct.caller, at, ch))
583+@Callable(cu)
584+func lockShareTokens (au,ci) = valueOrElse(cx(au), valueOrElse(cs(), cz(cu, cu.caller, au, ci)))
554585
555586
556587
557-@Callable(ct)
558-func lockShareTokensFromPool (dl,at,ch) = valueOrElse(cr(), valueOrElse(cu(ct, at), cw(ct, Address(dl), at, ch)))
588+@Callable(cu)
589+func lockShareTokensFromPool (dr,au,ci) = valueOrElse(cx(au), valueOrElse(cs(), valueOrElse(cv(cu, au), cz(cu, Address(dr), au, ci))))
559590
560591
561592
562-@Callable(ct)
563-func lockStakedShareTokens (at,ch,dm) = valueOrElse(cr(), {
564- let cy = az(at)
565- let ay = toString(ct.caller)
566- let cz = av(at)
567- let bw = valueOrElse(getInteger(this, (at + p)), cz)
568- let cA = valueOrElse(getInteger(this, (((at + "_") + ay) + j)), 0)
569- let cB = valueOrElse(getInteger(this, (((at + "_") + ay) + m)), 0)
570- let cC = valueOrElse(getInteger(this, (((at + "_") + ay) + k)), 0)
571- let cD = valueOrElse(getInteger(this, (((at + "_") + ay) + n)), cA)
572- let cE = (cA + cC)
573- let dn = cm(ch)
574- let cG = dn._1
575- let cH = dn._2
576- let cI = getIntegerValue(this, r)
577- if ((as(at) > height))
593+@Callable(cu)
594+func lockStakedShareTokens (au,ci,ds) = valueOrElse(cx(au), valueOrElse(cs(), {
595+ let cB = aA(au)
596+ let az = toString(cu.caller)
597+ let cC = aw(au)
598+ let bx = valueOrElse(getInteger(this, (au + q)), cC)
599+ let cD = valueOrElse(getInteger(this, (((au + "_") + az) + k)), 0)
600+ let cE = valueOrElse(getInteger(this, (((au + "_") + az) + n)), 0)
601+ let cF = valueOrElse(getInteger(this, (((au + "_") + az) + l)), 0)
602+ let cG = valueOrElse(getInteger(this, (((au + "_") + az) + o)), cD)
603+ let cH = (cD + cF)
604+ let dt = cn(ci)
605+ let cJ = dt._1
606+ let cK = dt._2
607+ let cL = getIntegerValue(this, s)
608+ if ((at(au) > height))
578609 then throw("You can't lock shareTokens till first harvest end.")
579- else if ((0 >= ch))
610+ else if ((0 >= ci))
580611 then throw("lockType must be > 0")
581- else if ((dm > cA))
582- then throw(("You can't lock more than " + toString(cA)))
583- else if ((aA(cy) > cz))
612+ else if ((ds > cD))
613+ then throw(("You can't lock more than " + toString(cD)))
614+ else if ((aB(cB) > cC))
584615 then throw("Balance of share-token is lower than totalAmount")
585- else if (if ((cB == 0))
586- then if (if ((1 > size(ct.payments)))
616+ else if (if ((cE == 0))
617+ then if (if ((1 > size(cu.payments)))
587618 then true
588- else (ct.payments[0].assetId != unit))
619+ else (cu.payments[0].assetId != unit))
589620 then true
590- else (cI > ct.payments[0].amount)
621+ else (cL > cu.payments[0].amount)
591622 else false)
592- then throw((("You need to pay additional waves comission " + toString(cI)) + "WAVES"))
593- else if (if ((cB == 0))
594- then (0 >= dm)
623+ then throw((("You need to pay additional waves comission " + toString(cL)) + "WAVES"))
624+ else if (if ((cE == 0))
625+ then (0 >= ds)
595626 else false)
596627 then throw("lockAmount must be greater than 0")
597- else if ((0 > dm))
628+ else if ((0 > ds))
598629 then throw("lockAmount must be positive")
599- else if ((cB > (height + cG)))
630+ else if ((cE > (height + cJ)))
600631 then throw("You cannot lock sharetokens for a period less than what you have already locked")
601632 else {
602- let cM = (cC + dm)
603- let cY = (cA - dm)
604- let cN = (height + cG)
605- let cL = (fraction(cM, cH, X) + cY)
606- let do = bt(at, ay)
607- let aV = do._1
608- let aW = do._2
609- let bU = do._3
610- let cR = do._4
611- let cS = (aK(at, ay) + bU)
612-[IntegerEntry((((at + "_") + ay) + j), cY), IntegerEntry((((at + "_") + ay) + k), cM), IntegerEntry((((at + "_") + ay) + m), cN), IntegerEntry((((at + "_") + ay) + l), ch), IntegerEntry((((at + "_") + ay) + n), cL), IntegerEntry((at + p), ((bw - cD) + cL)), IntegerEntry((((at + "_") + ay) + u), aV), IntegerEntry((((at + "_") + ay) + w), aW), IntegerEntry((at + t), aV), IntegerEntry((at + v), aW), IntegerEntry((at + x), height), IntegerEntry((((at + "_") + ay) + z), cS), Reissue(ar, cR, true), ScriptTransfer(an, cR, ar)]
633+ let cP = (cF + ds)
634+ let dc = (cD - ds)
635+ let cQ = (height + cJ)
636+ let cO = (fraction(cP, cK, Y) + dc)
637+ let du = bu(au, az)
638+ let aW = du._1
639+ let aX = du._2
640+ let bV = du._3
641+ let cU = du._4
642+ let cV = (aL(au, az) + bV)
643+[IntegerEntry((((au + "_") + az) + k), dc), IntegerEntry((((au + "_") + az) + l), cP), IntegerEntry((((au + "_") + az) + n), cQ), IntegerEntry((((au + "_") + az) + m), ci), IntegerEntry((((au + "_") + az) + o), cO), IntegerEntry((au + q), ((bx - cG) + cO)), IntegerEntry((((au + "_") + az) + v), aW), IntegerEntry((((au + "_") + az) + x), aX), IntegerEntry((au + u), aW), IntegerEntry((au + w), aX), IntegerEntry((au + y), height), IntegerEntry((((au + "_") + az) + A), cV), Reissue(as, cU, true), ScriptTransfer(ao, cU, as)]
613644 }
645+ }))
646+
647+
648+
649+@Callable(cu)
650+func unlockUserLock (au,az) = valueOrElse(cs(), {
651+ let cE = valueOrErrorMessage(getInteger(this, (((au + "_") + az) + n)), (((("There is no pool " + au) + " or user ") + az) + "with lock"))
652+ if ((cE > height))
653+ then throw(("You can't unlock sharetokens till " + toString(cE)))
654+ else (dj(cu, au, az) ++ [ScriptTransfer(cu.caller, getIntegerValue(this, s), unit)])
614655 })
615656
616657
617658
618-@Callable(ct)
619-func unlockUserLock (at,ay) = valueOrElse(cr(), {
620- let cI = getIntegerValue(this, r)
621- let cB = valueOrErrorMessage(getInteger(this, (((at + "_") + ay) + m)), (((("There is no pool " + at) + " or user ") + ay) + "with lock"))
622- let bw = getIntegerValue(this, (at + p))
623- let cA = valueOrElse(getInteger(this, (((at + "_") + ay) + j)), 0)
624- let cC = valueOrElse(getInteger(this, (((at + "_") + ay) + k)), 0)
625- let cD = valueOrElse(getInteger(this, (((at + "_") + ay) + n)), cA)
626- if ((cB > height))
627- then throw(("You can't unlock sharetokens till " + toString(cB)))
628- else {
629- let cY = (cA + cC)
630- let dp = bt(at, ay)
631- let aV = dp._1
632- let aW = dp._2
633- let bU = dp._3
634- let cR = dp._4
635- let cS = (aK(at, ay) + bU)
636-[IntegerEntry((((at + "_") + ay) + u), aV), IntegerEntry((((at + "_") + ay) + w), aW), IntegerEntry((at + t), aV), IntegerEntry((at + v), aW), IntegerEntry((at + x), height), IntegerEntry((((at + "_") + ay) + j), cY), IntegerEntry((((at + "_") + ay) + n), cY), IntegerEntry((at + p), ((bw - cD) + cY)), IntegerEntry((((at + "_") + ay) + z), cS), DeleteEntry((((at + "_") + ay) + k)), DeleteEntry((((at + "_") + ay) + m)), DeleteEntry((((at + "_") + ay) + l)), Reissue(ar, cR, true), ScriptTransfer(an, cR, ar), ScriptTransfer(ct.caller, cI, unit)]
637- }
659+@Callable(cu)
660+func unlockUserLockDeprecated (au,az) = valueOrElse(cs(), valueOrElse(cy(cu), valueOrElse(cx(au), (dj(cu, au, az) ++ [ScriptTransfer(aj, getIntegerValue(this, s), unit)]))))
661+
662+
663+
664+@Callable(cu)
665+func withdrawShareTokens (au,cY) = valueOrElse(cs(), cX(cu, cu.caller, au, cY))
666+
667+
668+
669+@Callable(cu)
670+func withdrawShareTokensFromPool (dr,au,cY) = valueOrElse(cs(), valueOrElse(cv(cu, au), cX(cu, Address(dr), au, cY)))
671+
672+
673+
674+@Callable(cu)
675+func claim (au) = valueOrElse(cs(), {
676+ let bk = dg(cu, au, cu.caller)
677+ if ((bk._2 == 0))
678+ then throw("You have 0 available SWOP")
679+ else bk
638680 })
639681
640682
641683
642-@Callable(ct)
643-func unlockStableLock (ay) = valueOrElse(cr(), {
644- let dq = Address(base58'3MpNDxa2QpcAzbaLaV6qacbuASgtH7wcric')
645- let dr = ["3MpygN8qm376tUAHB6mhC5BxG5NKYortiyX", "3MvMXhKFMPz4BuZj9Jr9UysuxbWFKRJZgb3"]
646- let cI = getIntegerValue(this, r)
647- if ((ct.caller != dq))
648- then throw((("Only " + toString(dq)) + "can call this function"))
649- else {
650- func ds (dt,at) = {
651- let du = dt
652- let dv = du._1
653- let dw = du._2
654- let dx = du._3
655- let cB = valueOrElse(getInteger(this, (((at + "_") + ay) + m)), 0)
656- if ((cB == 0))
657- then dt
658- else {
659- let bw = getIntegerValue(this, (at + p))
660- let cA = valueOrElse(getInteger(this, (((at + "_") + ay) + j)), 0)
661- let cC = valueOrElse(getInteger(this, (((at + "_") + ay) + k)), 0)
662- let cD = valueOrElse(getInteger(this, (((at + "_") + ay) + n)), cA)
663- let cY = (cA + cC)
664- let dy = bt(at, ay)
665- let aV = dy._1
666- let aW = dy._2
667- let bU = dy._3
668- let cR = dy._4
669- let cS = (aK(at, ay) + bU)
670- $Tuple3((dv ++ [IntegerEntry((((at + "_") + ay) + u), aV), IntegerEntry((((at + "_") + ay) + w), aW), IntegerEntry((at + t), aV), IntegerEntry((at + v), aW), IntegerEntry((at + x), height), IntegerEntry((((at + "_") + ay) + j), cY), IntegerEntry((((at + "_") + ay) + n), cY), IntegerEntry((at + p), ((bw - cD) + cY)), IntegerEntry((((at + "_") + ay) + z), cS), DeleteEntry((((at + "_") + ay) + k)), DeleteEntry((((at + "_") + ay) + m)), DeleteEntry((((at + "_") + ay) + l))]), (dw + cR), (dx + cI))
671- }
672- }
673-
674- let dz = {
675- let bX = dr
676- let bY = size(bX)
677- let bZ = $Tuple3(nil, 0, 0)
678- func ca (cb,cc) = if ((cc >= bY))
679- then cb
680- else ds(cb, bX[cc])
681-
682- func cd (cb,cc) = if ((cc >= bY))
683- then cb
684- else throw("List size exceeds 2")
685-
686- cd(ca(ca(bZ, 0), 1), 2)
687- }
688- let dv = dz._1
689- let dA = dz._2
690- let dB = dz._3
691- if ((size(dv) == 0))
692- then throw("Nothing to unlock")
693- else ([Reissue(ar, dA, true), ScriptTransfer(an, dA, ar), ScriptTransfer(ai, dB, unit)] ++ dv)
694- }
695- })
684+@Callable(cu)
685+func claimInternal (au,cA) = valueOrElse(cs(), valueOrElse(cy(cu), dg(cu, au, Address(cA))))
696686
697687
698688
699-@Callable(ct)
700-func withdrawShareTokens (at,cV) = valueOrElse(cr(), cU(ct, ct.caller, at, cV))
701-
702-
703-
704-@Callable(ct)
705-func withdrawShareTokensFromPool (dl,at,cV) = valueOrElse(cr(), valueOrElse(cu(ct, at), cU(ct, Address(dl), at, cV)))
706-
707-
708-
709-@Callable(ct)
710-func claim (at) = valueOrElse(cr(), {
711- let bj = dc(ct, at, ct.caller)
712- if ((bj._2 == 0))
713- then throw("You have 0 available SWOP")
714- else bj
715- })
716-
717-
718-
719-@Callable(ct)
720-func claimInternal (at,cx) = valueOrElse(cr(), valueOrElse(cv(ct), dc(ct, at, Address(cx))))
721-
722-
723-
724-@Callable(ct)
725-func claimAndStake (at) = valueOrElse(cr(), {
726- let bU = {
727- let dC = invoke(this, "claimInternal", [at, ct.caller.bytes], nil)
728- if ($isInstanceOf(dC, "Int"))
729- then dC
730- else throw(($getType(dC) + " couldn't be cast to Int"))
689+@Callable(cu)
690+func claimAndStake (au) = valueOrElse(cs(), {
691+ let bV = {
692+ let dv = invoke(this, "claimInternal", [au, cu.caller.bytes], nil)
693+ if ($isInstanceOf(dv, "Int"))
694+ then dv
695+ else throw(($getType(dv) + " couldn't be cast to Int"))
731696 }
732- if ((bU == bU))
733- then if ((bU == 0))
697+ if ((bV == bV))
698+ then if ((bV == 0))
734699 then throw("You have 0 available SWOP")
735700 else {
736- let dD = invoke(ak, "lockSWOPFromFarming", nil, [AttachedPayment(ar, bU)])
737- if ((dD == dD))
701+ let dw = invoke(al, "lockSWOPFromFarming", nil, [AttachedPayment(as, bV)])
702+ if ((dw == dw))
738703 then nil
739704 else throw("Strict value is not equal to itself.")
740705 }
743708
744709
745710
746-@Callable(ct)
747-func claimAll (bL) = valueOrElse(cr(), {
748- func dE (dF,at) = {
749- let bU = {
750- let dC = invoke(this, "claimInternal", [at, ct.caller.bytes], nil)
751- if ($isInstanceOf(dC, "Int"))
752- then dC
753- else throw(($getType(dC) + " couldn't be cast to Int"))
711+@Callable(cu)
712+func claimAll (bM) = valueOrElse(cs(), {
713+ func dx (dy,au) = {
714+ let bV = {
715+ let dv = invoke(this, "claimInternal", [au, cu.caller.bytes], nil)
716+ if ($isInstanceOf(dv, "Int"))
717+ then dv
718+ else throw(($getType(dv) + " couldn't be cast to Int"))
754719 }
755- if ((bU == bU))
756- then (dF + bU)
720+ if ((bV == bV))
721+ then (dy + bV)
757722 else throw("Strict value is not equal to itself.")
758723 }
759724
760- let dF = {
761- let bX = bL
762- let bY = size(bX)
763- let bZ = 0
764- func ca (cb,cc) = if ((cc >= bY))
765- then cb
766- else dE(cb, bX[cc])
725+ let dy = {
726+ let bY = bM
727+ let bZ = size(bY)
728+ let ca = 0
729+ func cb (cc,cd) = if ((cd >= bZ))
730+ then cc
731+ else dx(cc, bY[cd])
767732
768- func cd (cb,cc) = if ((cc >= bY))
769- then cb
733+ func ce (cc,cd) = if ((cd >= bZ))
734+ then cc
770735 else throw("List size exceeds 60")
771736
772- cd(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(bZ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60)
737+ ce(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(ca, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60)
773738 }
774- if ((dF == 0))
739+ if ((dy == 0))
775740 then throw("You have 0 available SWOP")
776- else [ScriptTransfer(ct.caller, dF, ar)]
741+ else [ScriptTransfer(cu.caller, dy, as)]
777742 })
778743
779744
780745
781-@Callable(ct)
782-func claimAllAndStake (bL) = valueOrElse(cr(), {
783- func dE (dF,at) = {
784- let bU = {
785- let dC = invoke(this, "claimInternal", [at, ct.caller.bytes], nil)
786- if ($isInstanceOf(dC, "Int"))
787- then dC
788- else throw(($getType(dC) + " couldn't be cast to Int"))
746+@Callable(cu)
747+func claimAllAndStake (bM) = valueOrElse(cs(), {
748+ func dx (dy,au) = {
749+ let bV = {
750+ let dv = invoke(this, "claimInternal", [au, cu.caller.bytes], nil)
751+ if ($isInstanceOf(dv, "Int"))
752+ then dv
753+ else throw(($getType(dv) + " couldn't be cast to Int"))
789754 }
790- if ((bU == bU))
791- then (dF + bU)
755+ if ((bV == bV))
756+ then (dy + bV)
792757 else throw("Strict value is not equal to itself.")
793758 }
794759
795- let dF = {
796- let bX = bL
797- let bY = size(bX)
798- let bZ = 0
799- func ca (cb,cc) = if ((cc >= bY))
800- then cb
801- else dE(cb, bX[cc])
760+ let dy = {
761+ let bY = bM
762+ let bZ = size(bY)
763+ let ca = 0
764+ func cb (cc,cd) = if ((cd >= bZ))
765+ then cc
766+ else dx(cc, bY[cd])
802767
803- func cd (cb,cc) = if ((cc >= bY))
804- then cb
768+ func ce (cc,cd) = if ((cd >= bZ))
769+ then cc
805770 else throw("List size exceeds 60")
806771
807- cd(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(bZ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60)
772+ ce(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(ca, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60)
808773 }
809- if ((dF == 0))
774+ if ((dy == 0))
810775 then throw("You have 0 available SWOP")
811776 else {
812- let dD = invoke(ak, "lockSWOPFromFarming", nil, [AttachedPayment(ar, dF)])
813- if ((dD == dD))
777+ let dw = invoke(al, "lockSWOPFromFarming", nil, [AttachedPayment(as, dy)])
778+ if ((dw == dw))
814779 then nil
815780 else throw("Strict value is not equal to itself.")
816781 }
818783
819784
820785
821-@Callable(ct)
822-func updateUserBoostInterest (at,ay) = valueOrElse(cr(), if ((ct.caller != aj))
786+@Callable(cu)
787+func updateUserBoostInterest (au,az) = valueOrElse(cs(), if ((cu.caller != ak))
823788 then throw("Only voiting can call this function")
824789 else {
825- let dG = bt(at, ay)
826- let aV = dG._1
827- let aW = dG._2
828- let bU = dG._3
829- let cR = dG._4
830- let cS = (aK(at, ay) + bU)
831-[IntegerEntry((((at + "_") + ay) + u), aV), IntegerEntry((((at + "_") + ay) + w), aW), IntegerEntry((at + t), aV), IntegerEntry((at + v), aW), IntegerEntry((at + x), height), IntegerEntry((((at + "_") + ay) + z), cS), Reissue(ar, cR, true), ScriptTransfer(an, cR, ar)]
790+ let dz = bu(au, az)
791+ let aW = dz._1
792+ let aX = dz._2
793+ let bV = dz._3
794+ let cU = dz._4
795+ let cV = (aL(au, az) + bV)
796+[IntegerEntry((((au + "_") + az) + v), aW), IntegerEntry((((au + "_") + az) + x), aX), IntegerEntry((au + u), aW), IntegerEntry((au + w), aX), IntegerEntry((au + y), height), IntegerEntry((((au + "_") + az) + A), cV), Reissue(as, cU, true), ScriptTransfer(ao, cU, as)]
832797 })
833798
834799
835800
836-@Callable(ct)
837-func shutdown () = valueOrElse(cs(ct), if (!(ap))
838- then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, c), "the cause wasn't specified")))
839- else cp("Paused by admin"))
801+@Callable(cu)
802+func shutdown () = valueOrElse(ct(cu), if (!(aq))
803+ then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, d), "the cause wasn't specified")))
804+ else cq("Paused by admin"))
840805
841806
842807
843-@Callable(ct)
844-func activate () = valueOrElse(cs(ct), if (ap)
808+@Callable(cu)
809+func activate () = valueOrElse(ct(cu), if (aq)
845810 then throw("DApp is already active")
846- else [BooleanEntry(a, true), DeleteEntry(c)])
811+ else [BooleanEntry(a, true), DeleteEntry(d)])
847812
848813
849-@Verifier(dH)
850-func dI () = {
851- let ac = dH
852- let dJ = if (sigVerify(dH.bodyBytes, dH.proofs[0], af))
814+@Verifier(dA)
815+func dB () = {
816+ let ad = dA
817+ let dC = if (sigVerify(dA.bodyBytes, dA.proofs[0], ag))
853818 then 1
854819 else 0
855- let dK = if (sigVerify(dH.bodyBytes, dH.proofs[1], ag))
820+ let dD = if (sigVerify(dA.bodyBytes, dA.proofs[1], ah))
856821 then 1
857822 else 0
858- let dL = if (sigVerify(dH.bodyBytes, dH.proofs[2], ah))
823+ let dE = if (sigVerify(dA.bodyBytes, dA.proofs[2], ai))
859824 then 1
860825 else 0
861- (((dJ + dK) + dL) >= 2)
826+ (((dC + dD) + dE) >= 2)
862827 }
863828
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = "active"
55
66 let b = "active_all_contracts"
77
8-let c = "shutdown_cause"
8+let c = "deprecated_"
99
10-let d = "_current_pool_fraction_reward"
10+let d = "shutdown_cause"
1111
12-let e = "_previous_pool_fraction_reward"
12+let e = "_current_pool_fraction_reward"
1313
14-let f = "_pool_reward_update_height"
14+let f = "_previous_pool_fraction_reward"
1515
16-let g = "total_reward_per_block_current"
16+let g = "_pool_reward_update_height"
1717
18-let h = "total_reward_per_block_previous"
18+let h = "total_reward_per_block_current"
1919
20-let i = "reward_update_height"
20+let i = "total_reward_per_block_previous"
2121
22-let j = "_share_tokens_locked"
22+let j = "reward_update_height"
2323
24-let k = "_share_tokens_blocked"
24+let k = "_share_tokens_locked"
2525
26-let l = "_share_tokens_blocked_type"
26+let l = "_share_tokens_blocked"
2727
28-let m = "_share_tokens_blocked_height"
28+let m = "_share_tokens_blocked_type"
2929
30-let n = "_share_tokens_virtual"
30+let n = "_share_tokens_blocked_height"
3131
32-let o = "_total_share_tokens_locked"
32+let o = "_share_tokens_virtual"
3333
34-let p = "_total_share_tokens_virtual"
34+let p = "_total_share_tokens_locked"
3535
36-let q = "_lock_params"
36+let q = "_total_share_tokens_virtual"
3737
38-let r = "lock_waves_fee"
38+let r = "_lock_params"
3939
40-let s = "_boost_coef"
40+let s = "lock_waves_fee"
4141
42-let t = "_last_interest"
42+let t = "_boost_coef"
4343
4444 let u = "_last_interest"
4545
46-let v = "_last_interest_b"
46+let v = "_last_interest"
4747
48-let w = "_last_interest_u_b"
48+let w = "_last_interest_b"
4949
50-let x = "_last_interest_height"
50+let x = "_last_interest_u_b"
5151
52-let y = "SWOP_id"
52+let y = "_last_interest_height"
5353
54-let z = "_available_SWOP"
54+let z = "SWOP_id"
5555
56-let A = "swop_year_emission"
56+let A = "_available_SWOP"
5757
58-let B = "_harvest_pool_vote_gSWOP"
58+let B = "swop_year_emission"
5959
60-let C = "_pool_vote_gSWOP"
60+let C = "_harvest_pool_vote_gSWOP"
6161
62-let D = "_user_vote_gSWOP"
62+let D = "_pool_vote_gSWOP"
6363
64-let E = "_pool_struc"
64+let E = "_user_vote_gSWOP"
6565
66-let F = "_user_pool_struc"
66+let F = "_pool_struc"
6767
68-let G = "_harvest_user_pool_vote_gSWOP"
68+let G = "_user_pool_struc"
6969
70-let H = "first_harvest_height"
70+let H = "_harvest_user_pool_vote_gSWOP"
7171
72-let I = "share_limit_on_first_harvest"
72+let I = "first_harvest_height"
7373
74-let J = "_strat_b_farm_interest"
74+let J = "share_limit_on_first_harvest"
7575
76-let K = "cpmm_contract"
76+let K = "_strat_b_farm_interest"
7777
78-let L = "admin_pub_1"
78+let L = "cpmm_contract"
7979
80-let M = "admin_pub_2"
80+let M = "admin_pub_1"
8181
82-let N = "admin_pub_3"
82+let N = "admin_pub_2"
8383
84-let O = "admin_invoke_pub"
84+let O = "admin_pub_3"
8585
86-let P = "money_box_address"
86+let P = "admin_invoke_pub"
8787
88-let Q = "voting_address"
88+let Q = "money_box_address"
8989
90-let R = "governance_address"
90+let R = "voting_address"
9191
92-let S = "lp_farming"
92+let S = "governance_address"
9393
94-let T = "farming_treasure"
94+let T = "lp_farming"
9595
96-let U = Address(base58'3MvVBtsXroQpy1tsPw21TU2ET9A8WfmrNjz')
96+let U = "farming_treasure"
9797
98-let V = 10000000000
98+let V = Address(base58'3MvVBtsXroQpy1tsPw21TU2ET9A8WfmrNjz')
9999
100-let W = 100000000
100+let W = 10000000000
101101
102-let X = 1000
102+let X = 100000000
103103
104-let Y = 500
104+let Y = 1000
105105
106-let Z = 3397850
106+let Z = 500
107107
108-func aa (ab) = {
109- let ac = getString(U, ab)
110- if ($isInstanceOf(ac, "String"))
108+let aa = 3397850
109+
110+func ab (ac) = {
111+ let ad = getString(V, ac)
112+ if ($isInstanceOf(ad, "String"))
111113 then {
112- let ad = ac
113- fromBase58String(ad)
114+ let ae = ad
115+ fromBase58String(ae)
114116 }
115117 else {
116- let ae = ac
117- throw((ab + "is empty"))
118+ let af = ad
119+ throw((ac + "is empty"))
118120 }
119121 }
120122
121123
122-let af = aa(L)
124+let ag = ab(M)
123125
124-let ag = aa(M)
126+let ah = ab(N)
125127
126-let ah = aa(N)
128+let ai = ab(O)
127129
128-let ai = Address(aa(P))
130+let aj = Address(ab(Q))
129131
130-let aj = Address(aa(Q))
132+let ak = Address(ab(R))
131133
132-let ak = Address(aa(R))
134+let al = Address(ab(S))
133135
134-let al = aa(O)
136+let am = ab(P)
135137
136-let am = Address(aa(S))
138+let an = Address(ab(T))
137139
138-let an = Address(aa(T))
140+let ao = Address(ab(U))
139141
140-let ao = Address(aa(K))
142+let ap = Address(ab(L))
141143
142-let ap = getBooleanValue(this, a)
144+let aq = getBooleanValue(this, a)
143145
144-let aq = valueOrElse(getBoolean(U, b), true)
146+let ar = valueOrElse(getBoolean(V, b), true)
145147
146-let ar = fromBase58String(getStringValue(this, y))
148+let as = fromBase58String(getStringValue(this, z))
147149
148-func as (at) = valueOrElse(getInteger(Address(fromBase58String(at)), H), 0)
150+func at (au) = valueOrElse(getInteger(Address(fromBase58String(au)), I), 0)
149151
150152
151-func au (at) = valueOrErrorMessage(getInteger(at, I), ("No data on the key: " + I))
153+func av (au) = valueOrErrorMessage(getInteger(au, J), ("No data on the key: " + J))
152154
153155
154-func av (at) = valueOrErrorMessage(getInteger(this, (at + o)), (("No data on the key: " + at) + o))
156+func aw (au) = valueOrErrorMessage(getInteger(this, (au + p)), (("No data on the key: " + au) + p))
155157
156158
157-func aw (at) = valueOrElse(getInteger(aj, (at + C)), valueOrElse(parseInt(split(valueOrElse(getString(aj, (at + E)), ""), "_")[0]), 0))
159+func ax (au) = valueOrElse(getInteger(ak, (au + D)), valueOrElse(parseInt(split(valueOrElse(getString(ak, (au + F)), ""), "_")[0]), 0))
158160
159161
160-func ax (at,ay) = valueOrElse(getInteger(aj, (((ay + "_") + at) + D)), valueOrElse(parseInt(split(valueOrElse(getString(aj, (((ay + "_") + at) + F)), ""), "_")[0]), 0))
162+func ay (au,az) = valueOrElse(getInteger(ak, (((az + "_") + au) + E)), valueOrElse(parseInt(split(valueOrElse(getString(ak, (((az + "_") + au) + G)), ""), "_")[0]), 0))
161163
162164
163-func az (at) = fromBase58String(getStringValue(value(addressFromString(at)), "share_asset_id"))
165+func aA (au) = fromBase58String(getStringValue(value(addressFromString(au)), "share_asset_id"))
164166
165167
166-func aA (aB) = {
167- let ac = aB
168- if ($isInstanceOf(ac, "ByteVector"))
168+func aB (aC) = {
169+ let ad = aC
170+ if ($isInstanceOf(ad, "ByteVector"))
169171 then {
170- let aC = ac
171- assetBalance(this, aC)
172+ let aD = ad
173+ assetBalance(this, aD)
172174 }
173- else if ($isInstanceOf(ac, "Unit"))
175+ else if ($isInstanceOf(ad, "Unit"))
174176 then {
175- let aD = ac
177+ let aE = ad
176178 wavesBalance(this).available
177179 }
178180 else throw("Match error")
179181 }
180182
181183
182-func aE (aF,aG) = {
183- let aH = value(assetInfo(aF)).decimals
184+func aF (aG,aH) = {
184185 let aI = value(assetInfo(aG)).decimals
185- let aJ = ((aI - aH) + 8)
186- pow(10, 0, aJ, 0, 0, DOWN)
186+ let aJ = value(assetInfo(aH)).decimals
187+ let aK = ((aJ - aI) + 8)
188+ pow(10, 0, aK, 0, 0, DOWN)
187189 }
188190
189191
190-func aK (at,ay) = valueOrElse(getInteger(this, (((at + "_") + ay) + z)), 0)
192+func aL (au,az) = valueOrElse(getInteger(this, (((au + "_") + az) + A)), 0)
191193
192194
193-func aL (at) = {
194- let aM = valueOrErrorMessage(getInteger(ak, g), ((("No data on the key: " + g) + " at address ") + toString(ak)))
195- let aN = valueOrErrorMessage(getInteger(ak, h), ((("No data on the key: " + h) + " at address ") + toString(ak)))
196- let aO = valueOrErrorMessage(getInteger(ak, (at + d)), (((("No data on the key: " + at) + d) + " at address ") + toString(ak)))
197- let aP = valueOrErrorMessage(getInteger(ak, i), ((("No data on the key: " + i) + " at address ") + toString(ak)))
198- let aQ = valueOrElse(getInteger(ak, (at + f)), aP)
199- let aR = valueOrErrorMessage(getInteger(ak, (at + e)), (((("No data on the key: " + at) + e) + " at address ") + toString(ak)))
200- let aS = fraction(aM, aO, V)
201- let aT = fraction(aM, aR, V)
202- if (if ((aS > aM))
195+func aM (au) = {
196+ let aN = valueOrErrorMessage(getInteger(al, h), ((("No data on the key: " + h) + " at address ") + toString(al)))
197+ let aO = valueOrErrorMessage(getInteger(al, i), ((("No data on the key: " + i) + " at address ") + toString(al)))
198+ let aP = valueOrErrorMessage(getInteger(al, (au + e)), (((("No data on the key: " + au) + e) + " at address ") + toString(al)))
199+ let aQ = valueOrErrorMessage(getInteger(al, j), ((("No data on the key: " + j) + " at address ") + toString(al)))
200+ let aR = valueOrElse(getInteger(al, (au + g)), aQ)
201+ let aS = valueOrErrorMessage(getInteger(al, (au + f)), (((("No data on the key: " + au) + f) + " at address ") + toString(al)))
202+ let aT = fraction(aN, aP, W)
203+ let aU = fraction(aN, aS, W)
204+ if (if ((aT > aN))
203205 then true
204- else (aT > aN))
206+ else (aU > aO))
205207 then throw("rewardPoolCurrent > totalRewardPerBlockCurrent or rewardPoolPrevious > totalRewardPerBlockPrevious")
206- else $Tuple4(aS, aP, aT, aQ)
208+ else $Tuple4(aT, aQ, aU, aR)
207209 }
208210
209211
210-func aU (at) = {
211- let aV = valueOrErrorMessage(getInteger(this, (at + t)), (("No data on the key: " + at) + t))
212- let aW = valueOrElse(getInteger(this, (at + v)), 0)
213- let aX = valueOrElse(getInteger(this, (at + x)), height)
214- $Tuple3(aX, aV, aW)
212+func aV (au) = {
213+ let aW = valueOrErrorMessage(getInteger(this, (au + u)), (("No data on the key: " + au) + u))
214+ let aX = valueOrElse(getInteger(this, (au + w)), 0)
215+ let aY = valueOrElse(getInteger(this, (au + y)), height)
216+ $Tuple3(aY, aW, aX)
215217 }
216218
217219
218-func aY (at,aZ) = {
219- let ba = valueOrElse(getInteger(this, (at + s)), Y)
220- fraction(aZ, X, (ba + X))
220+func aZ (au,ba) = {
221+ let bb = valueOrElse(getInteger(this, (au + t)), Z)
222+ fraction(ba, Y, (bb + Y))
221223 }
222224
223225
224-func bb (at,aZ) = {
225- let ba = valueOrElse(getInteger(this, (at + s)), Y)
226- fraction(aZ, ba, (ba + X))
226+func bc (au,ba) = {
227+ let bb = valueOrElse(getInteger(this, (au + t)), Z)
228+ fraction(ba, bb, (bb + Y))
227229 }
228230
229231
230-func bc (at,aX,aP,aQ,aV,aW,bd,be,bf,bg,bh) = {
231- let bi = if (if (if ((aP > height))
232- then (aP == aQ)
232+func bd (au,aY,aQ,aR,aW,aX,be,bf,bg,bh,bi) = {
233+ let bj = if (if (if ((aQ > height))
234+ then (aQ == aR)
233235 else false)
234236 then true
235- else if ((height > aP))
236- then (aP != aQ)
237+ else if ((height > aQ))
238+ then (aQ != aR)
237239 else false)
238240 then {
239- let bj = (bg * (height - aX))
240- $Tuple3(bj, aV, aW)
241+ let bk = (bh * (height - aY))
242+ $Tuple3(bk, aW, aX)
241243 }
242- else if (if (if ((height > aP))
243- then (aP == aQ)
244+ else if (if (if ((height > aQ))
245+ then (aQ == aR)
244246 else false)
245- then (aX > aP)
247+ then (aY > aQ)
246248 else false)
247249 then {
248- let bj = (be * (height - aX))
249- $Tuple3(bj, aV, aW)
250+ let bk = (bf * (height - aY))
251+ $Tuple3(bk, aW, aX)
250252 }
251253 else {
252- let bk = (bg * (aP - aX))
253- let bl = (aV + fraction(aY(at, bk), bh, bf))
254- let bm = (aW + (if ((bd > 0))
255- then fraction(bb(at, bk), W, bd)
254+ let bl = (bh * (aQ - aY))
255+ let bm = (aW + fraction(aZ(au, bl), bi, bg))
256+ let bn = (aX + (if ((be > 0))
257+ then fraction(bc(au, bl), X, be)
256258 else 0))
257- let bn = (be * (height - aP))
258- $Tuple3(bn, bl, bm)
259+ let bo = (bf * (height - aQ))
260+ $Tuple3(bo, bm, bn)
259261 }
260- let bo = bi._1
261- let bp = bi._2
262- let bq = bi._3
263- let br = (bp + fraction(aY(at, bo), bh, bf))
264- let bs = (bq + (if ((bd > 0))
265- then fraction(bb(at, bo), W, bd)
262+ let bp = bj._1
263+ let bq = bj._2
264+ let br = bj._3
265+ let bs = (bq + fraction(aZ(au, bp), bi, bg))
266+ let bt = (br + (if ((be > 0))
267+ then fraction(bc(au, bp), X, be)
266268 else 0))
267- $Tuple2(br, bs)
269+ $Tuple2(bs, bt)
268270 }
269271
270272
271-func bt (at,ay) = {
272- let bh = aE(ar, az(at))
273- let bd = aw(at)
274- let bu = ax(at, ay)
275- let bv = av(at)
276- let bw = valueOrElse(getInteger(this, (at + p)), bv)
277- let bx = valueOrElse(getInteger(this, (at + J)), 0)
278- let by = aU(at)
279- let aX = by._1
280- let aV = by._2
281- let aW = by._3
282- let bz = aL(at)
283- let be = bz._1
284- let aP = bz._2
285- let bg = bz._3
286- let aQ = bz._4
287- let bA = valueOrElse(getInteger(this, (((at + "_") + ay) + u)), aV)
288- let bB = valueOrElse(getInteger(this, (((at + "_") + ay) + w)), if (if ((bx > bA))
289- then (bu > 0)
273+func bu (au,az) = {
274+ let bi = aF(as, aA(au))
275+ let be = ax(au)
276+ let bv = ay(au, az)
277+ let bw = aw(au)
278+ let bx = valueOrElse(getInteger(this, (au + q)), bw)
279+ let by = valueOrElse(getInteger(this, (au + K)), 0)
280+ let bz = aV(au)
281+ let aY = bz._1
282+ let aW = bz._2
283+ let aX = bz._3
284+ let bA = aM(au)
285+ let bf = bA._1
286+ let aQ = bA._2
287+ let bh = bA._3
288+ let aR = bA._4
289+ let bB = valueOrElse(getInteger(this, (((au + "_") + az) + v)), aW)
290+ let bC = valueOrElse(getInteger(this, (((au + "_") + az) + x)), if (if ((by > bB))
291+ then (bv > 0)
290292 else false)
291293 then 0
292- else aW)
293- let bC = valueOrElse(getInteger(this, (((at + "_") + ay) + j)), 0)
294- let bD = valueOrElse(getInteger(this, (((at + "_") + ay) + n)), bC)
295- if ((bw == 0))
294+ else aX)
295+ let bD = valueOrElse(getInteger(this, (((au + "_") + az) + k)), 0)
296+ let bE = valueOrElse(getInteger(this, (((au + "_") + az) + o)), bD)
297+ if ((bx == 0))
296298 then {
297- let bE = if ((aV == 0))
298- then (be * (height - aX))
299- else 0
300- $Tuple4(aV, aW, 0, bE)
299+ let bF = (bf * (height - aY))
300+ $Tuple4(aW, aX, 0, bF)
301301 }
302302 else {
303- let bF = bc(at, aX, aP, aQ, aV, aW, bd, be, bw, bg, bh)
304- let br = bF._1
305- let bs = bF._2
306- let bG = fraction(bD, (br - bA), bh)
307- let ba = valueOrElse(getInteger(this, (at + s)), Y)
308- let bH = fraction(fraction(bD, (br - max([bA, bx])), bh), ba, X)
309- let bI = fraction((bs - bB), bu, W)
310- let bJ = min([bH, bI])
311- let bE = (bH - bJ)
312- if ((0 > bE))
303+ let bG = bd(au, aY, aQ, aR, aW, aX, be, bf, bx, bh, bi)
304+ let bs = bG._1
305+ let bt = bG._2
306+ let bH = fraction(bE, (bs - bB), bi)
307+ let bb = valueOrElse(getInteger(this, (au + t)), Z)
308+ let bI = fraction(fraction(bE, (bs - max([bB, by])), bi), bb, Y)
309+ let bJ = fraction((bt - bC), bv, X)
310+ let bK = min([bI, bJ])
311+ let bF = (bI - bK)
312+ if ((0 > bF))
313313 then throw("toTreasury < 0")
314- else $Tuple4(br, bs, (bG + bJ), bE)
314+ else $Tuple4(bs, bt, (bH + bK), bF)
315315 }
316316 }
317317
318318
319-func bK (bL,ay) = {
320- func bM (bN,at) = {
321- let bO = bN
322- let bP = bO._1
323- let bQ = bO._2
324- let bR = bt(at, ay)
325- let bS = bR._1
326- let bT = bR._2
327- let bU = bR._3
328- let bV = bR._4
329- let bW = (aK(at, ay) + bU)
330- $Tuple2((bP :+ at), (bQ :+ bW))
319+func bL (bM,az) = {
320+ func bN (bO,au) = {
321+ let bP = bO
322+ let bQ = bP._1
323+ let bR = bP._2
324+ let bS = bu(au, az)
325+ let bT = bS._1
326+ let bU = bS._2
327+ let bV = bS._3
328+ let bW = bS._4
329+ let bX = (aL(au, az) + bV)
330+ $Tuple2((bQ :+ au), (bR :+ bX))
331331 }
332332
333- let bX = bL
334- let bY = size(bX)
335- let bZ = $Tuple2(nil, nil)
336- func ca (cb,cc) = if ((cc >= bY))
337- then cb
338- else bM(cb, bX[cc])
333+ let bY = bM
334+ let bZ = size(bY)
335+ let ca = $Tuple2(nil, nil)
336+ func cb (cc,cd) = if ((cd >= bZ))
337+ then cc
338+ else bN(cc, bY[cd])
339339
340- func cd (cb,cc) = if ((cc >= bY))
341- then cb
340+ func ce (cc,cd) = if ((cd >= bZ))
341+ then cc
342342 else throw("List size exceeds 60")
343343
344- cd(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(bZ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60)
344+ ce(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(ca, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60)
345345 }
346346
347347
348-func ce (at,ay,cf,cg,ch) = if ((as(at) > height))
348+func cf (au,az,cg,ch,ci) = if ((at(au) > height))
349349 then {
350- let ci = valueOrElse(getInteger(aj, (at + B)), 0)
351- let cj = valueOrElse(getInteger(aj, (((ay + "_") + at) + G)), 0)
352- let ck = au(addressFromStringValue(at))
353- let cl = (fraction(ck, cj, ci) - cf)
354- if ((ch > 0))
350+ let cj = valueOrElse(getInteger(ak, (au + C)), 0)
351+ let ck = valueOrElse(getInteger(ak, (((az + "_") + au) + H)), 0)
352+ let cl = av(addressFromStringValue(au))
353+ let cm = (fraction(cl, ck, cj) - cg)
354+ if ((ci > 0))
355355 then throw("You can't lock shareTokens till first harvest end.")
356- else if ((cj == 0))
356+ else if ((ck == 0))
357357 then 0
358- else if ((cg >= cl))
359- then (cg - cl)
358+ else if ((ch >= cm))
359+ then (ch - cm)
360360 else 0
361361 }
362362 else 0
363363
364364
365-func cm (cn) = {
366- let co = split(valueOrErrorMessage(getString(this, (toString(cn) + q)), ("There are no key for lock type" + toString(cn))), "_")
367- $Tuple2(parseIntValue(co[0]), parseIntValue(co[1]))
365+func cn (co) = {
366+ let cp = split(valueOrErrorMessage(getString(this, (toString(co) + r)), ("There are no key for lock type" + toString(co))), "_")
367+ $Tuple2(parseIntValue(cp[0]), parseIntValue(cp[1]))
368368 }
369369
370370
371-func cp (cq) = [BooleanEntry(a, false), StringEntry(c, cq)]
371+func cq (cr) = [BooleanEntry(a, false), StringEntry(d, cr)]
372372
373373
374-func cr () = if (if (ap)
375- then aq
374+func cs () = if (if (aq)
375+ then ar
376376 else false)
377377 then unit
378378 else throw("DApp is inactive at this moment")
379379
380380
381-func cs (ct) = if (containsElement([af, ag, ah], ct.callerPublicKey))
381+func ct (cu) = if (containsElement([ag, ah, ai], cu.callerPublicKey))
382382 then unit
383383 else throw("Only admin can call this function")
384384
385385
386-func cu (ct,at) = if (if ((toString(ct.caller) == at))
386+func cv (cu,au) = if (if ((toString(cu.caller) == au))
387387 then true
388- else (ct.caller == ao))
388+ else (cu.caller == ap))
389389 then unit
390390 else throw("Only pool can call this function")
391391
392392
393-func cv (ct) = if ((ct.caller == this))
393+func cw (au) = valueOrElse(getBoolean(V, (c + au)), false)
394+
395+
396+func cx (au) = if (!(cw(au)))
397+ then unit
398+ else throw("Pool is deprecated. Only unlock action allowed.")
399+
400+
401+func cy (cu) = if ((cu.caller == this))
394402 then unit
395403 else throw("Only contract itself can call this function")
396404
397405
398-func cw (ct,cx,at,ch) = {
399- let cy = az(at)
400- let ay = toString(cx)
401- let cz = av(at)
402- let bw = valueOrElse(getInteger(this, (at + p)), cz)
403- let cA = valueOrElse(getInteger(this, (((at + "_") + ay) + j)), 0)
404- let cB = valueOrElse(getInteger(this, (((at + "_") + ay) + m)), 0)
405- let cC = valueOrElse(getInteger(this, (((at + "_") + ay) + k)), 0)
406- let cD = valueOrElse(getInteger(this, (((at + "_") + ay) + n)), cA)
407- let cE = ((cA + cC) + ct.payments[0].amount)
408- let cF = cm(ch)
409- let cG = cF._1
410- let cH = cF._2
411- let cI = getIntegerValue(this, r)
412- if ((ct.payments[0].assetId != cy))
406+func cz (cu,cA,au,ci) = {
407+ let cB = aA(au)
408+ let az = toString(cA)
409+ let cC = aw(au)
410+ let bx = valueOrElse(getInteger(this, (au + q)), cC)
411+ let cD = valueOrElse(getInteger(this, (((au + "_") + az) + k)), 0)
412+ let cE = valueOrElse(getInteger(this, (((au + "_") + az) + n)), 0)
413+ let cF = valueOrElse(getInteger(this, (((au + "_") + az) + l)), 0)
414+ let cG = valueOrElse(getInteger(this, (((au + "_") + az) + o)), cD)
415+ let cH = ((cD + cF) + cu.payments[0].amount)
416+ let cI = cn(ci)
417+ let cJ = cI._1
418+ let cK = cI._2
419+ let cL = getIntegerValue(this, s)
420+ if ((cu.payments[0].assetId != cB))
413421 then throw("Wrong sharetoken in payment")
414- else if ((0 >= ct.payments[0].amount))
422+ else if ((0 >= cu.payments[0].amount))
415423 then throw("Payment amount must be greater than 0")
416- else if ((0 > ch))
424+ else if ((0 > ci))
417425 then throw("lockType must be >= 0")
418426 else {
419- let cJ = ce(at, ay, cA, ct.payments[0].amount, ch)
420- if ((cJ == cJ))
427+ let cM = cf(au, az, cD, cu.payments[0].amount, ci)
428+ if ((cM == cM))
421429 then {
422- let cK = if ((ch == 0))
430+ let cN = if ((ci == 0))
423431 then {
424- let cL = ((cD + ct.payments[0].amount) - cJ)
425- $Tuple2([IntegerEntry((((at + "_") + ay) + j), ((cA + ct.payments[0].amount) - cJ)), IntegerEntry((((at + "_") + ay) + n), cL), IntegerEntry((at + p), ((bw + ct.payments[0].amount) - cJ)), ScriptTransfer(cx, cJ, ct.payments[0].assetId)], ((cz + ct.payments[0].amount) - cJ))
432+ let cO = ((cG + cu.payments[0].amount) - cM)
433+ $Tuple2([IntegerEntry((((au + "_") + az) + k), ((cD + cu.payments[0].amount) - cM)), IntegerEntry((((au + "_") + az) + o), cO), IntegerEntry((au + q), ((bx + cu.payments[0].amount) - cM)), ScriptTransfer(cA, cM, cu.payments[0].assetId)], ((cC + cu.payments[0].amount) - cM))
426434 }
427- else if (if ((cB == 0))
428- then if (if ((2 > size(ct.payments)))
435+ else if (if ((cE == 0))
436+ then if (if ((2 > size(cu.payments)))
429437 then true
430- else (ct.payments[1].assetId != unit))
438+ else (cu.payments[1].assetId != unit))
431439 then true
432- else (cI > ct.payments[1].amount)
440+ else (cL > cu.payments[1].amount)
433441 else false)
434- then throw((("You need to pay additional waves comission " + toString(cI)) + "WAVES"))
435- else if ((cB > (height + cG)))
442+ then throw((("You need to pay additional waves comission " + toString(cL)) + "WAVES"))
443+ else if ((cE > (height + cJ)))
436444 then throw("You cannot lock sharetokens for a period less than what you have already locked")
437445 else {
438- let cM = (cC + ct.payments[0].amount)
439- let cN = (height + cG)
440- let cL = (fraction(cM, cH, X) + cA)
441- $Tuple2([IntegerEntry((((at + "_") + ay) + k), cM), IntegerEntry((((at + "_") + ay) + m), cN), IntegerEntry((((at + "_") + ay) + l), ch), IntegerEntry((((at + "_") + ay) + n), cL), IntegerEntry((at + p), ((bw - cD) + cL))], (cz + ct.payments[0].amount))
446+ let cP = (cF + cu.payments[0].amount)
447+ let cQ = (height + cJ)
448+ let cO = (fraction(cP, cK, Y) + cD)
449+ $Tuple2([IntegerEntry((((au + "_") + az) + l), cP), IntegerEntry((((au + "_") + az) + n), cQ), IntegerEntry((((au + "_") + az) + m), ci), IntegerEntry((((au + "_") + az) + o), cO), IntegerEntry((au + q), ((bx - cG) + cO))], (cC + cu.payments[0].amount))
442450 }
443- let cO = cK._1
444- let cP = cK._2
445- if ((aA(cy) > cP))
451+ let cR = cN._1
452+ let cS = cN._2
453+ if ((aB(cB) > cS))
446454 then throw("Balance of share-token is lower than totalAmount")
447455 else {
448- let cQ = bt(at, ay)
449- let aV = cQ._1
450- let aW = cQ._2
451- let bU = cQ._3
452- let cR = cQ._4
453- let cS = (aK(at, ay) + bU)
454- let cT = if ((getString(Address(fromBase58String(at)), "version") == "3.0.0"))
455- then invoke(am, "updateUserInterest", [ay, at, cE], nil)
456+ let cT = bu(au, az)
457+ let aW = cT._1
458+ let aX = cT._2
459+ let bV = cT._3
460+ let cU = cT._4
461+ let cV = (aL(au, az) + bV)
462+ let cW = if ((getString(Address(fromBase58String(au)), "version") == "3.0.0"))
463+ then invoke(an, "updateUserInterest", [az, au, cH], nil)
456464 else 0
457- if ((cT == cT))
458- then ([IntegerEntry((((at + "_") + ay) + u), aV), IntegerEntry((((at + "_") + ay) + w), aW), IntegerEntry((at + t), aV), IntegerEntry((at + v), aW), IntegerEntry((at + x), height), IntegerEntry((at + o), cP), IntegerEntry((((at + "_") + ay) + z), cS), Reissue(ar, cR, true), ScriptTransfer(an, cR, ar)] ++ cO)
465+ if ((cW == cW))
466+ then ([IntegerEntry((((au + "_") + az) + v), aW), IntegerEntry((((au + "_") + az) + x), aX), IntegerEntry((au + u), aW), IntegerEntry((au + w), aX), IntegerEntry((au + y), height), IntegerEntry((au + p), cS), IntegerEntry((((au + "_") + az) + A), cV), Reissue(as, cU, true), ScriptTransfer(ao, cU, as)] ++ cR)
459467 else throw("Strict value is not equal to itself.")
460468 }
461469 }
462470 else throw("Strict value is not equal to itself.")
463471 }
464472 }
465473
466474
467-func cU (ct,cx,at,cV) = valueOrElse(cr(), {
468- let cW = fromBase58String(getStringValue(value(addressFromString(at)), "share_asset_id"))
469- let ay = toString(cx)
470- let cX = bt(at, ay)
471- let aV = cX._1
472- let aW = cX._2
473- let bU = cX._3
474- let cR = cX._4
475- let cA = valueOrElse(getInteger(this, (((at + "_") + ay) + j)), 0)
476- let cC = valueOrElse(getInteger(this, (((at + "_") + ay) + k)), 0)
477- let cD = valueOrElse(getInteger(this, (((at + "_") + ay) + n)), cA)
478- let cY = (cA - cV)
479- let cS = (aK(at, ay) + bU)
480- let cZ = av(at)
481- let bw = valueOrElse(getInteger(this, (at + p)), cZ)
482- let da = (cZ - cV)
483- let db = (bw - cV)
484- let cL = (cD - cV)
485- if ((cV > cA))
486- then throw("Withdraw amount more then user locked amount")
487- else if ((aA(cW) > cZ))
488- then throw("Balance of share-token is lower than totalAmount")
489- else {
490- let cT = if ((getString(Address(fromBase58String(at)), "version") == "3.0.0"))
491- then invoke(am, "updateUserInterest", [ay, at, (cA + cC)], nil)
492- else 0
493- if ((cT == cT))
494- then [IntegerEntry((((at + "_") + ay) + u), aV), IntegerEntry((((at + "_") + ay) + w), aW), IntegerEntry((at + t), aV), IntegerEntry((at + v), aW), IntegerEntry((at + x), height), IntegerEntry((((at + "_") + ay) + j), cY), IntegerEntry((((at + "_") + ay) + n), cL), IntegerEntry((at + o), da), IntegerEntry((at + p), db), IntegerEntry((((at + "_") + ay) + z), cS), Reissue(ar, cR, true), ScriptTransfer(an, cR, ar), ScriptTransfer(ct.caller, cV, cW)]
495- else throw("Strict value is not equal to itself.")
496- }
497- })
475+func cX (cu,cA,au,cY) = {
476+ let cZ = if (cw(au))
477+ then invoke(this, "unlockUserLockDeprecated", [au, toString(cA)], nil)
478+ else 0
479+ if ((cZ == cZ))
480+ then {
481+ let da = fromBase58String(getStringValue(value(addressFromString(au)), "share_asset_id"))
482+ let az = toString(cA)
483+ let db = bu(au, az)
484+ let aW = db._1
485+ let aX = db._2
486+ let bV = db._3
487+ let cU = db._4
488+ let cD = valueOrElse(getInteger(this, (((au + "_") + az) + k)), 0)
489+ let cF = valueOrElse(getInteger(this, (((au + "_") + az) + l)), 0)
490+ let cG = valueOrElse(getInteger(this, (((au + "_") + az) + o)), cD)
491+ let dc = (cD - cY)
492+ let cV = (aL(au, az) + bV)
493+ let dd = aw(au)
494+ let bx = valueOrElse(getInteger(this, (au + q)), dd)
495+ let de = (dd - cY)
496+ let df = (bx - cY)
497+ let cO = (cG - cY)
498+ if ((cY > cD))
499+ then throw("Withdraw amount more then user locked amount")
500+ else if ((aB(da) > dd))
501+ then throw("Balance of share-token is lower than totalAmount")
502+ else {
503+ let cW = if ((getString(Address(fromBase58String(au)), "version") == "3.0.0"))
504+ then invoke(an, "updateUserInterest", [az, au, (cD + cF)], nil)
505+ else 0
506+ if ((cW == cW))
507+ then [IntegerEntry((((au + "_") + az) + v), aW), IntegerEntry((((au + "_") + az) + x), aX), IntegerEntry((au + u), aW), IntegerEntry((au + w), aX), IntegerEntry((au + y), height), IntegerEntry((((au + "_") + az) + k), dc), IntegerEntry((((au + "_") + az) + o), cO), IntegerEntry((au + p), de), IntegerEntry((au + q), df), IntegerEntry((((au + "_") + az) + A), cV), Reissue(as, cU, true), ScriptTransfer(ao, cU, as), ScriptTransfer(cu.caller, cY, da)]
508+ else throw("Strict value is not equal to itself.")
509+ }
510+ }
511+ else throw("Strict value is not equal to itself.")
512+ }
498513
499514
500-func dc (ct,at,cx) = {
501- let cW = fromBase58String(getStringValue(value(addressFromString(at)), "share_asset_id"))
502- let ay = toString(cx)
503- let bf = av(at)
504- let dd = bt(at, ay)
505- let aV = dd._1
506- let aW = dd._2
507- let bU = dd._3
508- let cR = dd._4
509- let bW = (aK(at, ay) + bU)
510- if ((aA(cW) > bf))
515+func dg (cu,au,cA) = {
516+ let da = fromBase58String(getStringValue(value(addressFromString(au)), "share_asset_id"))
517+ let az = toString(cA)
518+ let bg = aw(au)
519+ let dh = bu(au, az)
520+ let aW = dh._1
521+ let aX = dh._2
522+ let bV = dh._3
523+ let cU = dh._4
524+ let bX = (aL(au, az) + bV)
525+ if ((aB(da) > bg))
511526 then throw("Balance of share-token is lower than totalAmount")
512527 else {
513- let de = if ((ct.caller != this))
514- then [ScriptTransfer(ct.caller, bW, ar)]
528+ let di = if ((cu.caller != this))
529+ then [ScriptTransfer(cu.caller, bX, as)]
515530 else nil
516- $Tuple2(([IntegerEntry((((at + "_") + ay) + u), aV), IntegerEntry((((at + "_") + ay) + w), aW), IntegerEntry((at + t), aV), IntegerEntry((at + v), aW), IntegerEntry((at + x), height), IntegerEntry((((at + "_") + ay) + z), 0), Reissue(ar, (cR + bW), true), ScriptTransfer(an, cR, ar)] ++ de), bW)
531+ $Tuple2(([IntegerEntry((((au + "_") + az) + v), aW), IntegerEntry((((au + "_") + az) + x), aX), IntegerEntry((au + u), aW), IntegerEntry((au + w), aX), IntegerEntry((au + y), height), IntegerEntry((((au + "_") + az) + A), 0), Reissue(as, (cU + bX), true), ScriptTransfer(ao, cU, as)] ++ di), bX)
517532 }
518533 }
519534
520535
521-@Callable(ct)
522-func init (df) = if (isDefined(getString(this, y)))
536+func dj (cu,au,az) = {
537+ let bx = getIntegerValue(this, (au + q))
538+ let cD = valueOrElse(getInteger(this, (((au + "_") + az) + k)), 0)
539+ let cF = valueOrElse(getInteger(this, (((au + "_") + az) + l)), 0)
540+ let cG = valueOrElse(getInteger(this, (((au + "_") + az) + o)), cD)
541+ let dc = (cD + cF)
542+ let dk = bu(au, az)
543+ let aW = dk._1
544+ let aX = dk._2
545+ let bV = dk._3
546+ let cU = dk._4
547+ let cV = (aL(au, az) + bV)
548+[IntegerEntry((((au + "_") + az) + v), aW), IntegerEntry((((au + "_") + az) + x), aX), IntegerEntry((au + u), aW), IntegerEntry((au + w), aX), IntegerEntry((au + y), height), IntegerEntry((((au + "_") + az) + k), dc), IntegerEntry((((au + "_") + az) + o), dc), IntegerEntry((au + q), ((bx - cG) + dc)), IntegerEntry((((au + "_") + az) + A), cV), DeleteEntry((((au + "_") + az) + l)), DeleteEntry((((au + "_") + az) + n)), DeleteEntry((((au + "_") + az) + m)), Reissue(as, cU, true), ScriptTransfer(ao, cU, as)]
549+ }
550+
551+
552+@Callable(cu)
553+func init (dl) = if (isDefined(getString(this, z)))
523554 then throw("SWOP already initialized")
524555 else {
525- let dg = 100000000000000
526- let dh = Issue("SWOP", "SWOP protocol token", dg, 8, true)
527- let di = calculateAssetId(dh)
528-[BooleanEntry(a, true), Issue("SWOP", "SWOP protocol token", dg, 8, true), StringEntry(y, toBase58String(di))]
556+ let dm = 100000000000000
557+ let dn = Issue("SWOP", "SWOP protocol token", dm, 8, true)
558+ let do = calculateAssetId(dn)
559+[BooleanEntry(a, true), Issue("SWOP", "SWOP protocol token", dm, 8, true), StringEntry(z, toBase58String(do))]
529560 }
530561
531562
532563
533-@Callable(ct)
534-func initPoolShareFarming (at) = valueOrElse(cs(ct), [IntegerEntry((at + o), 0), IntegerEntry((at + t), 0), IntegerEntry((at + v), 0), IntegerEntry((at + x), height)])
564+@Callable(cu)
565+func initPoolShareFarming (au) = valueOrElse(ct(cu), [IntegerEntry((au + p), 0), IntegerEntry((au + u), 0), IntegerEntry((au + w), 0), IntegerEntry((au + y), height)])
535566
536567
537568
538-@Callable(ct)
539-func updatePoolInterest (at) = valueOrElse(cr(), if ((ct.caller != ak))
569+@Callable(cu)
570+func updatePoolInterest (au) = valueOrElse(cs(), if ((cu.caller != al))
540571 then throw("Only Governance can call this function")
541572 else {
542- let ay = toString(addressFromPublicKey(al))
543- let dj = bt(at, ay)
544- let aV = dj._1
545- let aW = dj._2
546- let dk = dj._3
547-[IntegerEntry((at + t), aV), IntegerEntry((at + v), aW), IntegerEntry((at + x), height)]
573+ let az = toString(addressFromPublicKey(am))
574+ let dp = bu(au, az)
575+ let aW = dp._1
576+ let aX = dp._2
577+ let dq = dp._3
578+[IntegerEntry((au + u), aW), IntegerEntry((au + w), aX), IntegerEntry((au + y), height)]
548579 })
549580
550581
551582
552-@Callable(ct)
553-func lockShareTokens (at,ch) = valueOrElse(cr(), cw(ct, ct.caller, at, ch))
583+@Callable(cu)
584+func lockShareTokens (au,ci) = valueOrElse(cx(au), valueOrElse(cs(), cz(cu, cu.caller, au, ci)))
554585
555586
556587
557-@Callable(ct)
558-func lockShareTokensFromPool (dl,at,ch) = valueOrElse(cr(), valueOrElse(cu(ct, at), cw(ct, Address(dl), at, ch)))
588+@Callable(cu)
589+func lockShareTokensFromPool (dr,au,ci) = valueOrElse(cx(au), valueOrElse(cs(), valueOrElse(cv(cu, au), cz(cu, Address(dr), au, ci))))
559590
560591
561592
562-@Callable(ct)
563-func lockStakedShareTokens (at,ch,dm) = valueOrElse(cr(), {
564- let cy = az(at)
565- let ay = toString(ct.caller)
566- let cz = av(at)
567- let bw = valueOrElse(getInteger(this, (at + p)), cz)
568- let cA = valueOrElse(getInteger(this, (((at + "_") + ay) + j)), 0)
569- let cB = valueOrElse(getInteger(this, (((at + "_") + ay) + m)), 0)
570- let cC = valueOrElse(getInteger(this, (((at + "_") + ay) + k)), 0)
571- let cD = valueOrElse(getInteger(this, (((at + "_") + ay) + n)), cA)
572- let cE = (cA + cC)
573- let dn = cm(ch)
574- let cG = dn._1
575- let cH = dn._2
576- let cI = getIntegerValue(this, r)
577- if ((as(at) > height))
593+@Callable(cu)
594+func lockStakedShareTokens (au,ci,ds) = valueOrElse(cx(au), valueOrElse(cs(), {
595+ let cB = aA(au)
596+ let az = toString(cu.caller)
597+ let cC = aw(au)
598+ let bx = valueOrElse(getInteger(this, (au + q)), cC)
599+ let cD = valueOrElse(getInteger(this, (((au + "_") + az) + k)), 0)
600+ let cE = valueOrElse(getInteger(this, (((au + "_") + az) + n)), 0)
601+ let cF = valueOrElse(getInteger(this, (((au + "_") + az) + l)), 0)
602+ let cG = valueOrElse(getInteger(this, (((au + "_") + az) + o)), cD)
603+ let cH = (cD + cF)
604+ let dt = cn(ci)
605+ let cJ = dt._1
606+ let cK = dt._2
607+ let cL = getIntegerValue(this, s)
608+ if ((at(au) > height))
578609 then throw("You can't lock shareTokens till first harvest end.")
579- else if ((0 >= ch))
610+ else if ((0 >= ci))
580611 then throw("lockType must be > 0")
581- else if ((dm > cA))
582- then throw(("You can't lock more than " + toString(cA)))
583- else if ((aA(cy) > cz))
612+ else if ((ds > cD))
613+ then throw(("You can't lock more than " + toString(cD)))
614+ else if ((aB(cB) > cC))
584615 then throw("Balance of share-token is lower than totalAmount")
585- else if (if ((cB == 0))
586- then if (if ((1 > size(ct.payments)))
616+ else if (if ((cE == 0))
617+ then if (if ((1 > size(cu.payments)))
587618 then true
588- else (ct.payments[0].assetId != unit))
619+ else (cu.payments[0].assetId != unit))
589620 then true
590- else (cI > ct.payments[0].amount)
621+ else (cL > cu.payments[0].amount)
591622 else false)
592- then throw((("You need to pay additional waves comission " + toString(cI)) + "WAVES"))
593- else if (if ((cB == 0))
594- then (0 >= dm)
623+ then throw((("You need to pay additional waves comission " + toString(cL)) + "WAVES"))
624+ else if (if ((cE == 0))
625+ then (0 >= ds)
595626 else false)
596627 then throw("lockAmount must be greater than 0")
597- else if ((0 > dm))
628+ else if ((0 > ds))
598629 then throw("lockAmount must be positive")
599- else if ((cB > (height + cG)))
630+ else if ((cE > (height + cJ)))
600631 then throw("You cannot lock sharetokens for a period less than what you have already locked")
601632 else {
602- let cM = (cC + dm)
603- let cY = (cA - dm)
604- let cN = (height + cG)
605- let cL = (fraction(cM, cH, X) + cY)
606- let do = bt(at, ay)
607- let aV = do._1
608- let aW = do._2
609- let bU = do._3
610- let cR = do._4
611- let cS = (aK(at, ay) + bU)
612-[IntegerEntry((((at + "_") + ay) + j), cY), IntegerEntry((((at + "_") + ay) + k), cM), IntegerEntry((((at + "_") + ay) + m), cN), IntegerEntry((((at + "_") + ay) + l), ch), IntegerEntry((((at + "_") + ay) + n), cL), IntegerEntry((at + p), ((bw - cD) + cL)), IntegerEntry((((at + "_") + ay) + u), aV), IntegerEntry((((at + "_") + ay) + w), aW), IntegerEntry((at + t), aV), IntegerEntry((at + v), aW), IntegerEntry((at + x), height), IntegerEntry((((at + "_") + ay) + z), cS), Reissue(ar, cR, true), ScriptTransfer(an, cR, ar)]
633+ let cP = (cF + ds)
634+ let dc = (cD - ds)
635+ let cQ = (height + cJ)
636+ let cO = (fraction(cP, cK, Y) + dc)
637+ let du = bu(au, az)
638+ let aW = du._1
639+ let aX = du._2
640+ let bV = du._3
641+ let cU = du._4
642+ let cV = (aL(au, az) + bV)
643+[IntegerEntry((((au + "_") + az) + k), dc), IntegerEntry((((au + "_") + az) + l), cP), IntegerEntry((((au + "_") + az) + n), cQ), IntegerEntry((((au + "_") + az) + m), ci), IntegerEntry((((au + "_") + az) + o), cO), IntegerEntry((au + q), ((bx - cG) + cO)), IntegerEntry((((au + "_") + az) + v), aW), IntegerEntry((((au + "_") + az) + x), aX), IntegerEntry((au + u), aW), IntegerEntry((au + w), aX), IntegerEntry((au + y), height), IntegerEntry((((au + "_") + az) + A), cV), Reissue(as, cU, true), ScriptTransfer(ao, cU, as)]
613644 }
645+ }))
646+
647+
648+
649+@Callable(cu)
650+func unlockUserLock (au,az) = valueOrElse(cs(), {
651+ let cE = valueOrErrorMessage(getInteger(this, (((au + "_") + az) + n)), (((("There is no pool " + au) + " or user ") + az) + "with lock"))
652+ if ((cE > height))
653+ then throw(("You can't unlock sharetokens till " + toString(cE)))
654+ else (dj(cu, au, az) ++ [ScriptTransfer(cu.caller, getIntegerValue(this, s), unit)])
614655 })
615656
616657
617658
618-@Callable(ct)
619-func unlockUserLock (at,ay) = valueOrElse(cr(), {
620- let cI = getIntegerValue(this, r)
621- let cB = valueOrErrorMessage(getInteger(this, (((at + "_") + ay) + m)), (((("There is no pool " + at) + " or user ") + ay) + "with lock"))
622- let bw = getIntegerValue(this, (at + p))
623- let cA = valueOrElse(getInteger(this, (((at + "_") + ay) + j)), 0)
624- let cC = valueOrElse(getInteger(this, (((at + "_") + ay) + k)), 0)
625- let cD = valueOrElse(getInteger(this, (((at + "_") + ay) + n)), cA)
626- if ((cB > height))
627- then throw(("You can't unlock sharetokens till " + toString(cB)))
628- else {
629- let cY = (cA + cC)
630- let dp = bt(at, ay)
631- let aV = dp._1
632- let aW = dp._2
633- let bU = dp._3
634- let cR = dp._4
635- let cS = (aK(at, ay) + bU)
636-[IntegerEntry((((at + "_") + ay) + u), aV), IntegerEntry((((at + "_") + ay) + w), aW), IntegerEntry((at + t), aV), IntegerEntry((at + v), aW), IntegerEntry((at + x), height), IntegerEntry((((at + "_") + ay) + j), cY), IntegerEntry((((at + "_") + ay) + n), cY), IntegerEntry((at + p), ((bw - cD) + cY)), IntegerEntry((((at + "_") + ay) + z), cS), DeleteEntry((((at + "_") + ay) + k)), DeleteEntry((((at + "_") + ay) + m)), DeleteEntry((((at + "_") + ay) + l)), Reissue(ar, cR, true), ScriptTransfer(an, cR, ar), ScriptTransfer(ct.caller, cI, unit)]
637- }
659+@Callable(cu)
660+func unlockUserLockDeprecated (au,az) = valueOrElse(cs(), valueOrElse(cy(cu), valueOrElse(cx(au), (dj(cu, au, az) ++ [ScriptTransfer(aj, getIntegerValue(this, s), unit)]))))
661+
662+
663+
664+@Callable(cu)
665+func withdrawShareTokens (au,cY) = valueOrElse(cs(), cX(cu, cu.caller, au, cY))
666+
667+
668+
669+@Callable(cu)
670+func withdrawShareTokensFromPool (dr,au,cY) = valueOrElse(cs(), valueOrElse(cv(cu, au), cX(cu, Address(dr), au, cY)))
671+
672+
673+
674+@Callable(cu)
675+func claim (au) = valueOrElse(cs(), {
676+ let bk = dg(cu, au, cu.caller)
677+ if ((bk._2 == 0))
678+ then throw("You have 0 available SWOP")
679+ else bk
638680 })
639681
640682
641683
642-@Callable(ct)
643-func unlockStableLock (ay) = valueOrElse(cr(), {
644- let dq = Address(base58'3MpNDxa2QpcAzbaLaV6qacbuASgtH7wcric')
645- let dr = ["3MpygN8qm376tUAHB6mhC5BxG5NKYortiyX", "3MvMXhKFMPz4BuZj9Jr9UysuxbWFKRJZgb3"]
646- let cI = getIntegerValue(this, r)
647- if ((ct.caller != dq))
648- then throw((("Only " + toString(dq)) + "can call this function"))
649- else {
650- func ds (dt,at) = {
651- let du = dt
652- let dv = du._1
653- let dw = du._2
654- let dx = du._3
655- let cB = valueOrElse(getInteger(this, (((at + "_") + ay) + m)), 0)
656- if ((cB == 0))
657- then dt
658- else {
659- let bw = getIntegerValue(this, (at + p))
660- let cA = valueOrElse(getInteger(this, (((at + "_") + ay) + j)), 0)
661- let cC = valueOrElse(getInteger(this, (((at + "_") + ay) + k)), 0)
662- let cD = valueOrElse(getInteger(this, (((at + "_") + ay) + n)), cA)
663- let cY = (cA + cC)
664- let dy = bt(at, ay)
665- let aV = dy._1
666- let aW = dy._2
667- let bU = dy._3
668- let cR = dy._4
669- let cS = (aK(at, ay) + bU)
670- $Tuple3((dv ++ [IntegerEntry((((at + "_") + ay) + u), aV), IntegerEntry((((at + "_") + ay) + w), aW), IntegerEntry((at + t), aV), IntegerEntry((at + v), aW), IntegerEntry((at + x), height), IntegerEntry((((at + "_") + ay) + j), cY), IntegerEntry((((at + "_") + ay) + n), cY), IntegerEntry((at + p), ((bw - cD) + cY)), IntegerEntry((((at + "_") + ay) + z), cS), DeleteEntry((((at + "_") + ay) + k)), DeleteEntry((((at + "_") + ay) + m)), DeleteEntry((((at + "_") + ay) + l))]), (dw + cR), (dx + cI))
671- }
672- }
673-
674- let dz = {
675- let bX = dr
676- let bY = size(bX)
677- let bZ = $Tuple3(nil, 0, 0)
678- func ca (cb,cc) = if ((cc >= bY))
679- then cb
680- else ds(cb, bX[cc])
681-
682- func cd (cb,cc) = if ((cc >= bY))
683- then cb
684- else throw("List size exceeds 2")
685-
686- cd(ca(ca(bZ, 0), 1), 2)
687- }
688- let dv = dz._1
689- let dA = dz._2
690- let dB = dz._3
691- if ((size(dv) == 0))
692- then throw("Nothing to unlock")
693- else ([Reissue(ar, dA, true), ScriptTransfer(an, dA, ar), ScriptTransfer(ai, dB, unit)] ++ dv)
694- }
695- })
684+@Callable(cu)
685+func claimInternal (au,cA) = valueOrElse(cs(), valueOrElse(cy(cu), dg(cu, au, Address(cA))))
696686
697687
698688
699-@Callable(ct)
700-func withdrawShareTokens (at,cV) = valueOrElse(cr(), cU(ct, ct.caller, at, cV))
701-
702-
703-
704-@Callable(ct)
705-func withdrawShareTokensFromPool (dl,at,cV) = valueOrElse(cr(), valueOrElse(cu(ct, at), cU(ct, Address(dl), at, cV)))
706-
707-
708-
709-@Callable(ct)
710-func claim (at) = valueOrElse(cr(), {
711- let bj = dc(ct, at, ct.caller)
712- if ((bj._2 == 0))
713- then throw("You have 0 available SWOP")
714- else bj
715- })
716-
717-
718-
719-@Callable(ct)
720-func claimInternal (at,cx) = valueOrElse(cr(), valueOrElse(cv(ct), dc(ct, at, Address(cx))))
721-
722-
723-
724-@Callable(ct)
725-func claimAndStake (at) = valueOrElse(cr(), {
726- let bU = {
727- let dC = invoke(this, "claimInternal", [at, ct.caller.bytes], nil)
728- if ($isInstanceOf(dC, "Int"))
729- then dC
730- else throw(($getType(dC) + " couldn't be cast to Int"))
689+@Callable(cu)
690+func claimAndStake (au) = valueOrElse(cs(), {
691+ let bV = {
692+ let dv = invoke(this, "claimInternal", [au, cu.caller.bytes], nil)
693+ if ($isInstanceOf(dv, "Int"))
694+ then dv
695+ else throw(($getType(dv) + " couldn't be cast to Int"))
731696 }
732- if ((bU == bU))
733- then if ((bU == 0))
697+ if ((bV == bV))
698+ then if ((bV == 0))
734699 then throw("You have 0 available SWOP")
735700 else {
736- let dD = invoke(ak, "lockSWOPFromFarming", nil, [AttachedPayment(ar, bU)])
737- if ((dD == dD))
701+ let dw = invoke(al, "lockSWOPFromFarming", nil, [AttachedPayment(as, bV)])
702+ if ((dw == dw))
738703 then nil
739704 else throw("Strict value is not equal to itself.")
740705 }
741706 else throw("Strict value is not equal to itself.")
742707 })
743708
744709
745710
746-@Callable(ct)
747-func claimAll (bL) = valueOrElse(cr(), {
748- func dE (dF,at) = {
749- let bU = {
750- let dC = invoke(this, "claimInternal", [at, ct.caller.bytes], nil)
751- if ($isInstanceOf(dC, "Int"))
752- then dC
753- else throw(($getType(dC) + " couldn't be cast to Int"))
711+@Callable(cu)
712+func claimAll (bM) = valueOrElse(cs(), {
713+ func dx (dy,au) = {
714+ let bV = {
715+ let dv = invoke(this, "claimInternal", [au, cu.caller.bytes], nil)
716+ if ($isInstanceOf(dv, "Int"))
717+ then dv
718+ else throw(($getType(dv) + " couldn't be cast to Int"))
754719 }
755- if ((bU == bU))
756- then (dF + bU)
720+ if ((bV == bV))
721+ then (dy + bV)
757722 else throw("Strict value is not equal to itself.")
758723 }
759724
760- let dF = {
761- let bX = bL
762- let bY = size(bX)
763- let bZ = 0
764- func ca (cb,cc) = if ((cc >= bY))
765- then cb
766- else dE(cb, bX[cc])
725+ let dy = {
726+ let bY = bM
727+ let bZ = size(bY)
728+ let ca = 0
729+ func cb (cc,cd) = if ((cd >= bZ))
730+ then cc
731+ else dx(cc, bY[cd])
767732
768- func cd (cb,cc) = if ((cc >= bY))
769- then cb
733+ func ce (cc,cd) = if ((cd >= bZ))
734+ then cc
770735 else throw("List size exceeds 60")
771736
772- cd(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(bZ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60)
737+ ce(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(ca, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60)
773738 }
774- if ((dF == 0))
739+ if ((dy == 0))
775740 then throw("You have 0 available SWOP")
776- else [ScriptTransfer(ct.caller, dF, ar)]
741+ else [ScriptTransfer(cu.caller, dy, as)]
777742 })
778743
779744
780745
781-@Callable(ct)
782-func claimAllAndStake (bL) = valueOrElse(cr(), {
783- func dE (dF,at) = {
784- let bU = {
785- let dC = invoke(this, "claimInternal", [at, ct.caller.bytes], nil)
786- if ($isInstanceOf(dC, "Int"))
787- then dC
788- else throw(($getType(dC) + " couldn't be cast to Int"))
746+@Callable(cu)
747+func claimAllAndStake (bM) = valueOrElse(cs(), {
748+ func dx (dy,au) = {
749+ let bV = {
750+ let dv = invoke(this, "claimInternal", [au, cu.caller.bytes], nil)
751+ if ($isInstanceOf(dv, "Int"))
752+ then dv
753+ else throw(($getType(dv) + " couldn't be cast to Int"))
789754 }
790- if ((bU == bU))
791- then (dF + bU)
755+ if ((bV == bV))
756+ then (dy + bV)
792757 else throw("Strict value is not equal to itself.")
793758 }
794759
795- let dF = {
796- let bX = bL
797- let bY = size(bX)
798- let bZ = 0
799- func ca (cb,cc) = if ((cc >= bY))
800- then cb
801- else dE(cb, bX[cc])
760+ let dy = {
761+ let bY = bM
762+ let bZ = size(bY)
763+ let ca = 0
764+ func cb (cc,cd) = if ((cd >= bZ))
765+ then cc
766+ else dx(cc, bY[cd])
802767
803- func cd (cb,cc) = if ((cc >= bY))
804- then cb
768+ func ce (cc,cd) = if ((cd >= bZ))
769+ then cc
805770 else throw("List size exceeds 60")
806771
807- cd(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(bZ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60)
772+ ce(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(ca, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60)
808773 }
809- if ((dF == 0))
774+ if ((dy == 0))
810775 then throw("You have 0 available SWOP")
811776 else {
812- let dD = invoke(ak, "lockSWOPFromFarming", nil, [AttachedPayment(ar, dF)])
813- if ((dD == dD))
777+ let dw = invoke(al, "lockSWOPFromFarming", nil, [AttachedPayment(as, dy)])
778+ if ((dw == dw))
814779 then nil
815780 else throw("Strict value is not equal to itself.")
816781 }
817782 })
818783
819784
820785
821-@Callable(ct)
822-func updateUserBoostInterest (at,ay) = valueOrElse(cr(), if ((ct.caller != aj))
786+@Callable(cu)
787+func updateUserBoostInterest (au,az) = valueOrElse(cs(), if ((cu.caller != ak))
823788 then throw("Only voiting can call this function")
824789 else {
825- let dG = bt(at, ay)
826- let aV = dG._1
827- let aW = dG._2
828- let bU = dG._3
829- let cR = dG._4
830- let cS = (aK(at, ay) + bU)
831-[IntegerEntry((((at + "_") + ay) + u), aV), IntegerEntry((((at + "_") + ay) + w), aW), IntegerEntry((at + t), aV), IntegerEntry((at + v), aW), IntegerEntry((at + x), height), IntegerEntry((((at + "_") + ay) + z), cS), Reissue(ar, cR, true), ScriptTransfer(an, cR, ar)]
790+ let dz = bu(au, az)
791+ let aW = dz._1
792+ let aX = dz._2
793+ let bV = dz._3
794+ let cU = dz._4
795+ let cV = (aL(au, az) + bV)
796+[IntegerEntry((((au + "_") + az) + v), aW), IntegerEntry((((au + "_") + az) + x), aX), IntegerEntry((au + u), aW), IntegerEntry((au + w), aX), IntegerEntry((au + y), height), IntegerEntry((((au + "_") + az) + A), cV), Reissue(as, cU, true), ScriptTransfer(ao, cU, as)]
832797 })
833798
834799
835800
836-@Callable(ct)
837-func shutdown () = valueOrElse(cs(ct), if (!(ap))
838- then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, c), "the cause wasn't specified")))
839- else cp("Paused by admin"))
801+@Callable(cu)
802+func shutdown () = valueOrElse(ct(cu), if (!(aq))
803+ then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, d), "the cause wasn't specified")))
804+ else cq("Paused by admin"))
840805
841806
842807
843-@Callable(ct)
844-func activate () = valueOrElse(cs(ct), if (ap)
808+@Callable(cu)
809+func activate () = valueOrElse(ct(cu), if (aq)
845810 then throw("DApp is already active")
846- else [BooleanEntry(a, true), DeleteEntry(c)])
811+ else [BooleanEntry(a, true), DeleteEntry(d)])
847812
848813
849-@Verifier(dH)
850-func dI () = {
851- let ac = dH
852- let dJ = if (sigVerify(dH.bodyBytes, dH.proofs[0], af))
814+@Verifier(dA)
815+func dB () = {
816+ let ad = dA
817+ let dC = if (sigVerify(dA.bodyBytes, dA.proofs[0], ag))
853818 then 1
854819 else 0
855- let dK = if (sigVerify(dH.bodyBytes, dH.proofs[1], ag))
820+ let dD = if (sigVerify(dA.bodyBytes, dA.proofs[1], ah))
856821 then 1
857822 else 0
858- let dL = if (sigVerify(dH.bodyBytes, dH.proofs[2], ah))
823+ let dE = if (sigVerify(dA.bodyBytes, dA.proofs[2], ai))
859824 then 1
860825 else 0
861- (((dJ + dK) + dL) >= 2)
826+ (((dC + dD) + dE) >= 2)
862827 }
863828

github/deemru/w8io/026f985 
326.41 ms