tx · 9YZ9zJxaUyTWBMA7DjNtdK7M8RmB4o4syWwHmKYncQSy

3MsxHxruYWoddB4HRiPBYAWtMXMtCF1V9XT:  -0.01400000 Waves

2021.09.14 17:17 [1702809] smart account 3MsxHxruYWoddB4HRiPBYAWtMXMtCF1V9XT > SELF 0.00000000 Waves

{ "type": 13, "id": "9YZ9zJxaUyTWBMA7DjNtdK7M8RmB4o4syWwHmKYncQSy", "fee": 1400000, "feeAssetId": null, "timestamp": 1631628998982, "version": 2, "chainId": 84, "sender": "3MsxHxruYWoddB4HRiPBYAWtMXMtCF1V9XT", "senderPublicKey": "3ijdmxaYrpDFsKVbQH2kvB7i6JzHj9bep9bGWiQPra2D", "proofs": [ "3y3GHXtVQsN24ST7rKvnBzV46GZskW9ADMUFTeJnNz8sR3go6BdzAc289Dq7JGqkdc48R7XFUTMLQ97o4rqa1wK8", "2DhjmXA5Kx7gn9X59U1pNXG6dy2y8f7BtAV3ERw5Qgfftksnth7kMJhws61xJo5NDrKxtShpyQL1dvVSQft241xc" ], "script": "base64:AAIFAAAAAAAAFwwIAhIDCgEIEgMKAQgSAwoBCBIDCgEIEgQKAggBEgUKAwgYARIFCgMICAESBAoCCAESAwoBCBIAEgAaEgoCYTESDGFkbWluUHViS2V5MRoSCgJhMhIMYWRtaW5QdWJLZXkyGhIKAmEzEgxhZG1pblB1YktleTMaEAoCYTQSCmFkbVN0YWtpbmcaGgoCYTUSFGtleVNoYXJlVG9rZW5zTG9ja2VkGhEKAmE2EgtrU2hhcmVMaW1pdBoPCgJhNxIJa2V5QWN0aXZlGg4KAmE4EghrZXlDYXVzZRoiCgJhORIca2V5UmV3YXJkUG9vbEZyYWN0aW9uQ3VycmVudBojCgJiMRIda2V5UmV3YXJkUG9vbEZyYWN0aW9uUHJldmlvdXMaGwoCYjISFWtleUhlaWdodFBvb2xGcmFjdGlvbhojCgJiMxIda2V5VG90YWxSZXdhcmRQZXJCbG9ja0N1cnJlbnQaJAoCYjQSHmtleVRvdGFsUmV3YXJkUGVyQmxvY2tQcmV2aW91cxobCgJiNRIVa2V5UmV3YXJkVXBkYXRlSGVpZ2h0GhUKAmI2Eg9rZXlMYXN0SW50ZXJlc3QaGwoCYjcSFWtleUxhc3RJbnRlcmVzdEhlaWdodBoeCgJiOBIYa2V5VXNlclNoYXJlVG9rZW5zTG9ja2VkGhkKAmI5EhNrZXlVc2VyTGFzdEludGVyZXN0Gg8KAmMxEglrZXlTV09QaWQaHgoCYzISGGtleVVzZXJTV09QQ2xhaW1lZEFtb3VudBoiCgJjMxIca2V5VXNlclNXT1BMYXN0Q2xhaW1lZEFtb3VudBoWCgJjNBIQa2V5QXZhaWxhYmxlU1dPUBobCgJjNRIVa2V5RmFybWluZ1N0YXJ0SGVpZ2h0GgwKAmM2EgZrZXlBUFkaHAoCYzcSFmtQcmV2aW91c1RvdGFsVm90ZVNXT1AaGQoCYzgSE2tleVN3b3BZZWFyRW1pc3Npb24aFQoCYzkSD2tleUJhbGFuY2VjcG1tQRoVCgJkMRIPa2V5QmFsYW5jZWNwbW1CGicKAmQyEiFrSGFydmVzdFBvb2xBY3RpdmVWb3RlU3RydWNWb3RpbmcaKwoCZDMSJWtIYXJ2ZXN0VXNlclBvb2xBY3RpdmVWb3RlU3RydWNWb3RpbmcaHwoCZDQSGWtleUxpbWl0U2hhcmVGaXJzdEhhcnZlc3QaEQoCZDUSC2tleUFzc2V0SWRBGhEKAmQ2EgtrZXlBc3NldElkQhobCgJkNxIVa2V5Rmlyc3RIYXJ2ZXN0SGVpZ2h0GhkKAmQ4EhNrZXlmaXJzdEhhcnZlc3RDcG1tGhQKAmQ5Eg5rZXlUZW1wUHJldlN1bRoTCgJlMRINa2V5VGVtcEN1clN1bRoXCgJlMhIRZ292ZXJuYW5jZUFkZHJlc3MaDAoCZTMSBndhbGxldBoTCgJlNBINdm90aW5nQWRkcmVzcxoiCgJlNRIcYWRtaW5JbmNyZWFzZUludGVyZXN0QWRkcmVzcxoUCgJlNhIOb25lV2Vla0luQmxvY2saFAoCZTcSDnRvdGFsVm90ZVNoYXJlGhEKAmU4EgtzY2FsZVZhbHVlMRoRCgJlORILc2NhbGVWYWx1ZTMaEQoCZjESC3NjYWxlVmFsdWU1GhEKAmYyEgtzY2FsZVZhbHVlNhoRCgJmMxILc2NhbGVWYWx1ZTgaEgoCZjQSDHNjYWxlVmFsdWUxMRoRCgJmNRILc3RyQXNzZXRJZEEaCgoCZjYSBHBvb2waEQoCZjcSC3N0ckFzc2V0SWRCGg4KAmY4Eghhc3NldElkQRoOCgJmORIIYXNzZXRJZEIaEQoCZzESC2tCYXNlUGVyaW9kGhMKAmcyEg1rUGVyaW9kTGVuZ3RoGhIKAmczEgxrU3RhcnRIZWlnaHQaGQoCZzQSE2tGaXJzdEhhcnZlc3RIZWlnaHQaHAoCZzUSFmtEdXJhdGlvbkZ1bGxWb3RlUG93ZXIaEwoCZzYSDWtNaW5Wb3RlUG93ZXIaEAoCZzcSCmJhc2VQZXJpb2QaEQoCZzgSC3N0YXJ0SGVpZ2h0GhIKAmc5EgxwZXJpb2RMZW5ndGgaGwoCaDESFWR1cmF0aW9uRnVsbFZvdGVQb3dlchoSCgJoMhIMbWluVm90ZVBvd2VyGg4KAmgzEghpc0FjdGl2ZRoQCgJoNBIKY3VyclBlcmlvZBoTCgJoNRINZ2V0TGltaXRUb2tlbhoJCgJoNhIDQVBZGhYKAmg3EhBTd29wWWVhckVtaXNzaW9uGhAKAmg4Egphc3NldE5hbWVBGg0KAmg5EgckbWF0Y2gwGggKAmkxEgJpZBoLCgJpMhIFd2F2ZXMaEAoCaTMSCmFzc2V0TmFtZUIaCgoCaTQSBFNXT1AaFAoCaTUSDmlzRmlyc3RIYXJ2ZXN0GhsKAmk2EhVnZXRIZWlnaHRGaXJzdEhhcnZlc3QaEQoCaTcSC2dldEJhbGFuY2VBGhEKAmk4EgtnZXRCYWxhbmNlQhoYCgJpORISZ2V0U2hhcmVMaW1pdFRva2VuGh4KAmoxEhhnZXRUb3RhbFNoYXJlVG9rZW5Mb2NrZWQaFQoCajISD2dldFNoYXJlQXNzZXRJZBoUCgJqMxIOYWNjb3VudEJhbGFuY2UaDQoCajQSB2Fzc2V0SWQaEgoCajUSDGdldEFzc2V0SW5mbxoOCgJqNhIIc3RyaW5nSWQaCgoCajcSBGluZm8aFAoCajgSDmNhbGNTY2FsZVZhbHVlGg4KAmo5Eghhc3NldElkMRoOCgJrMRIIYXNzZXRJZDIaFgoCazISEGFzc2V0SWQxRGVjaW1hbHMaFgoCazMSEGFzc2V0SWQyRGVjaW1hbHMaEQoCazQSC3NjYWxlRGlnaXRzGhcKAms1EhF1c2VyQXZhaWxhYmxlU1dPUBoKCgJrNhIEdXNlchoQCgJrNxIKcmV3YXJkSW5mbxogCgJrOBIadG90YWxSZXdhcmRQZXJCbG9ja0N1cnJlbnQaIQoCazkSG3RvdGFsUmV3YXJkUGVyQmxvY2tQcmV2aW91cxofCgJsMRIZcmV3YXJkUG9vbEZyYWN0aW9uQ3VycmVudBoYCgJsMhIScmV3YXJkVXBkYXRlSGVpZ2h0GhwKAmwzEhZwb29sUmV3YXJkVXBkYXRlSGVpZ2h0GiAKAmw0EhpyZXdhcmRQb29sRnJhY3Rpb25QcmV2aW91cxoXCgJsNRIRcmV3YXJkUG9vbEN1cnJlbnQaGAoCbDYSEnJld2FyZFBvb2xQcmV2aW91cxoZCgJsNxITZ2V0TGFzdEludGVyZXN0SW5mbxoSCgJsOBIMbGFzdEludGVyZXN0GhgKAmw5EhJsYXN0SW50ZXJlc3RIZWlnaHQaGQoCbTESE2dldFVzZXJJbnRlcmVzdEluZm8aEQoCbTISC3VzZXJBZGRyU3RyGhYKAm0zEhB1c2VyTGFzdEludGVyZXN0Gg8KAm00Egl1c2VyU2hhcmUaGwoCbTUSFXVzZXJMYXN0SW50ZXJlc3RWYWx1ZRobCgJtNhIVdXNlclNoYXJlVG9rZW5zQW1vdW50GhIKAm03EgxjYWxjSW50ZXJlc3QaGwoCbTgSFWN1cnJlbnRSZXdhcmRQZXJCbG9jaxoWCgJtORIQc2hhcmVUb2tlbkxvY2tlZBocCgJuMRIWcHJldmlvdXNSZXdhcmRQZXJCbG9jaxoQCgJuMhIKc2NhbGVWYWx1ZRoHCgJuMxIBaBoMCgJuNBIGcmV3YXJkGjAKAm41EipyZXdhcmRBZnRlckxhc3RJbnRlcmVzdEJlZm9yZVJlYXdhcmRVcGRhdGUaGQoCbjYSE2ludGVyZXN0QWZ0ZXJVcGRhdGUaDwoCbjcSCWNsYWltQ2FsYxoSCgJuOBIMc2hhcmVBc3NldElkGhMKAm45Eg0kdDAxMzA5NjEzMTYxGhMKAm8xEg0kdDAxMzE2NjEzMjc4GhMKAm8yEg0kdDAxMzI4MzEzMzY3GhUKAm8zEg9jdXJyZW50SW50ZXJlc3QaEQoCbzQSC2NsYWltQW1vdW50GhUKAm81Eg91c2VyTmV3SW50ZXJlc3QaGwoCbzYSFWNsYWltQ2FsY0Zvck1pZ3JhdGlvbhoTCgJvNxINJHQwMTQwOTAxNDE1NRoTCgJvOBINJHQwMTQxNjAxNDI3MhoTCgJvORINJHQwMTQyNzcxNDM2MRodCgJwMRIXY2FsY3VsYXRlUHJvdG9jb2xSZXdhcmQaEwoCcDISDSR0MDE0ODY1MTQ5MzAaEwoCcDMSDSR0MDE0OTM1MTUwNDYaHAoCcDQSFmNoZWNrUG10QXNzZXRJZENvcnJlY3QaEAoCcDUSCnBtdEFzc2V0SWQaFgoCcDYSEHBvb2xTaGFyZUFzc2V0SWQaHgoCcDcSGGdldFVzZXJTV09QQ2xhaW1lZEFtb3VudBoNCgJwOBIHc3VzcGVuZBoLCgJwORIFY2F1c2UaBwoCcTESAWkaDQoCcTISB2Vhcmx5TFAaEAoCcTMSCmluaXRBbW91bnQaDwoCcTQSCVNXT1Bpc3N1ZRoMCgJxNRIGU1dPUGlkGhMKAnE2Eg0kdDAxODAxNjE4MTE5GhMKAnE3Eg1jdXJyZW50UmV3YXJkGhMKAnE4Eg0kdDAxODUyODE4NjY0GhMKAnE5Eg0kdDAxODY2OTE4NzcyGhMKAnIxEg0kdDAxOTAwNjE5MDgxGg8KAnIyEglwbXRBbW91bnQaEwoCcjMSDSR0MDE5MDg2MTkxNTkaEwoCcjQSDXBtdFN0ckFzc2V0SWQaEgoCcjUSDHBtdEFzc2V0TmFtZRoRCgJyNhILcG10RGVjaW1hbHMaEwoCcjcSDSR0MDE5MTY0MTkyODAaGAoCcjgSEnVzZXJTaGFyZUFtb3VudE5ldxoXCgJyORIRYXZhaWxhYmxlRnVuZHNOZXcaFgoCczESEHRvdGFsU2hhcmVBbW91bnQaGQoCczISE3RvdGFsU2hhcmVBbW91bnROZXcaFwoCczMSEXVzZXJDbGFpbWVkQW1vdW50GhoKAnM0EhR1c2VyQ2xhaW1lZEFtb3VudE5ldxoPCgJzNRIJYmFzZUVudHJ5GhMKAnM2Eg1oYXJ2ZXN0UGVyaW9kGhQKAnM3Eg5hbW91bnRPZlZvdGluZxoWCgJzOBIQYW1vdW50UG9vbFN0cmFjdBokCgJzORIeYW1vdW50QWN0aXZlVm90ZVVzZXJQb29sU3RyYWN0GiAKAnQxEhphbW91bnRQb29sQWN0aXZlVm90ZVN0cmFjdBoaCgJ0MhIUdXNlclNoYXJlVG9rZW5Mb2NrZWQaGAoCdDMSEnVzZXJQb29sQWN0aXZlVm90ZRoUCgJ0NBIOcG9vbEFjdGl2ZVZvdGUaFAoCdDUSDnByb3RvY29sUmV3YXJkGhUKAnQ2Eg9saW1pdFNoYXJlVG9rZW4aEAoCdDcSCnNoYXJlVG9rZW4aHwoCdDgSGXNoYXJlVG9rZW5zV2l0aGRyYXdBbW91bnQaEwoCdDkSDXNoYXJlVG9rZW5zSWQaEwoCdTESDSR0MDIzODE1MjM5MzEaCwoCdTISBXVzZXJzGhUKAnUzEg9taWdyYXRpb25IZWlnaHQaEAoCdTQSCnVwZGF0ZVVzZXIaCwoCdTUSBWFjY3VtGgcKAnU2EgF1GgcKAnU3EgFyGhUKAnU4Eg8kbGlzdDI2NDM3MjY0NjgaFQoCdTkSDyRzaXplMjY0MzcyNjQ2OBoVCgJ2MRIPJGFjYzAyNjQzNzI2NDY4GhUKAnYyEg8kYWNjMTI2NDM3MjY0NjgaFQoCdjMSDyRhY2MyMjY0MzcyNjQ2OBoVCgJ2NBIPJGFjYzMyNjQzNzI2NDY4GhUKAnY1Eg8kYWNjNDI2NDM3MjY0NjgaFQoCdjYSDyRhY2M1MjY0MzcyNjQ2OBoVCgJ2NxIPJGFjYzYyNjQzNzI2NDY4GhUKAnY4Eg8kYWNjNzI2NDM3MjY0NjgaFQoCdjkSDyRhY2M4MjY0MzcyNjQ2OBoVCgJ3MRIPJGFjYzkyNjQzNzI2NDY4GhYKAncyEhAkYWNjMTAyNjQzNzI2NDY4GhYKAnczEhAkYWNjMTEyNjQzNzI2NDY4GhYKAnc0EhAkYWNjMTIyNjQzNzI2NDY4GhYKAnc1EhAkYWNjMTMyNjQzNzI2NDY4GhYKAnc2EhAkYWNjMTQyNjQzNzI2NDY4GhYKAnc3EhAkYWNjMTUyNjQzNzI2NDY4GhYKAnc4EhAkYWNjMTYyNjQzNzI2NDY4GhYKAnc5EhAkYWNjMTcyNjQzNzI2NDY4GhYKAngxEhAkYWNjMTgyNjQzNzI2NDY4GhYKAngyEhAkYWNjMTkyNjQzNzI2NDY4GhYKAngzEhAkYWNjMjAyNjQzNzI2NDY4GhYKAng0EhAkYWNjMjEyNjQzNzI2NDY4GhYKAng1EhAkYWNjMjIyNjQzNzI2NDY4GhYKAng2EhAkYWNjMjMyNjQzNzI2NDY4GhYKAng3EhAkYWNjMjQyNjQzNzI2NDY4GhYKAng4EhAkYWNjMjUyNjQzNzI2NDY4GhYKAng5EhAkYWNjMjYyNjQzNzI2NDY4GhYKAnkxEhAkYWNjMjcyNjQzNzI2NDY4GhYKAnkyEhAkYWNjMjgyNjQzNzI2NDY4GhYKAnkzEhAkYWNjMjkyNjQzNzI2NDY4GhYKAnk0EhAkYWNjMzAyNjQzNzI2NDY4GhYKAnk1EhAkYWNjMzEyNjQzNzI2NDY4GhYKAnk2EhAkYWNjMzIyNjQzNzI2NDY4GhYKAnk3EhAkYWNjMzMyNjQzNzI2NDY4GhYKAnk4EhAkYWNjMzQyNjQzNzI2NDY4GhYKAnk5EhAkYWNjMzUyNjQzNzI2NDY4GhYKAnoxEhAkYWNjMzYyNjQzNzI2NDY4GhcKA3oxMBIQJGFjYzQ1MjY0MzcyNjQ2OBoXCgN6MTESECRhY2M0NjI2NDM3MjY0NjgaGwoDejEyEhRzaGFyZVRva2VuTXVsdGlwbHllchoUCgN6MTMSDSR0MDI2Njc5MjY3OTEaHwoDejE0Ehh1c2VyU2hhcmVUb2tlbnNBbW91bnROZXcaJQoDejE1Eh50b3RhbEFtb3VudE5ld1NoYXJlVG9rZW5Mb2NrZWQaKQoDejE2EiJ0b3RhbEFtb3VudFNoYXJlVG9rZW5zTG9ja2VkQmVmb3JlGiYKA3oxNxIfdG90YWxBbW91bnRTaGFyZVRva2Vuc0xvY2tlZE5ldxoUCgN6MTgSDSR0MDI4OTcxMjkwMzYaFAoDejE5Eg0kdDAyOTA0MTI5MTUzGhYKAnoyEhAkYWNjMzcyNjQzNzI2NDY4GhQKA3oyMBINJHQwMjkxNTgyOTI3NBoUCgN6MjESDWF2YWlsYWJsZUZ1bmQaCQoDejIyEgJ0eBoNCgN6MjMSBnZlcmlmeRoKCgN6MjQSA2ludhoPCgN6MjUSCGNhbGxFZ2cxGhQKA3oyNhINc2lnbmVkQnlBZG1pbhoZCgN6MjcSEmFkbWluUHViS2V5MVNpZ25lZBoZCgN6MjgSEmFkbWluUHViS2V5MlNpZ25lZBoZCgN6MjkSEmFkbWluUHViS2V5M1NpZ25lZBoWCgJ6MxIQJGFjYzM4MjY0MzcyNjQ2OBoWCgJ6NBIQJGFjYzM5MjY0MzcyNjQ2OBoWCgJ6NRIQJGFjYzQwMjY0MzcyNjQ2OBoWCgJ6NhIQJGFjYzQxMjY0MzcyNjQ2OBoWCgJ6NxIQJGFjYzQyMjY0MzcyNjQ2OBoWCgJ6OBIQJGFjYzQzMjY0MzcyNjQ2OBoWCgJ6ORIQJGFjYzQ0MjY0MzcyNjQ2OAAAAF0AAAAAAmExAQAAACDip4xAO4bNF+a0S4fb5aGDrK4qoew3Ll5lBRPytezvBAAAAAACYTIBAAAAIOo4rLkBtYg8cqOeKD2B1BoiZRETjd+Og418/VfxmxFZAAAAAAJhMwEAAAAgpzSWgrCjycddMmIBfztFJ08z6r82xAHPELd0cKonzG4AAAAAAmE0AQAAACAEz3XlZNDBD05nuR8TZMQaDeqEJEIxfTOQXUBYCp2TSgAAAAACYTUCAAAAGl90b3RhbF9zaGFyZV90b2tlbnNfbG9ja2VkAAAAAAJhNgIAAAAcc2hhcmVfbGltaXRfb25fZmlyc3RfaGFydmVzdAAAAAACYTcCAAAABmFjdGl2ZQAAAAACYTgCAAAADnNodXRkb3duX2NhdXNlAAAAAAJhOQIAAAAdX2N1cnJlbnRfcG9vbF9mcmFjdGlvbl9yZXdhcmQAAAAAAmIxAgAAAB5fcHJldmlvdXNfcG9vbF9mcmFjdGlvbl9yZXdhcmQAAAAAAmIyAgAAABpfcG9vbF9yZXdhcmRfdXBkYXRlX2hlaWdodAAAAAACYjMCAAAAHnRvdGFsX3Jld2FyZF9wZXJfYmxvY2tfY3VycmVudAAAAAACYjQCAAAAH3RvdGFsX3Jld2FyZF9wZXJfYmxvY2tfcHJldmlvdXMAAAAAAmI1AgAAABRyZXdhcmRfdXBkYXRlX2hlaWdodAAAAAACYjYCAAAADl9sYXN0X2ludGVyZXN0AAAAAAJiNwIAAAAVX2xhc3RfaW50ZXJlc3RfaGVpZ2h0AAAAAAJiOAIAAAAUX3NoYXJlX3Rva2Vuc19sb2NrZWQAAAAAAmI5AgAAAA5fbGFzdF9pbnRlcmVzdAAAAAACYzECAAAAB1NXT1BfaWQAAAAAAmMyAgAAABRfU1dPUF9jbGFpbWVkX2Ftb3VudAAAAAACYzMCAAAAGV9TV09QX2xhc3RfY2xhaW1lZF9hbW91bnQAAAAAAmM0AgAAAA9fYXZhaWxhYmxlX1NXT1AAAAAAAmM1AgAAABRmYXJtaW5nX3N0YXJ0X2hlaWdodAAAAAACYzYCAAAAA2FweQAAAAACYzcCAAAAGHByZXZpb3VzX3RvdGFsX3ZvdGVfU1dPUAAAAAACYzgCAAAAEnN3b3BfeWVhcl9lbWlzc2lvbgAAAAACYzkCAAAAD0FfYXNzZXRfYmFsYW5jZQAAAAACZDECAAAAD0JfYXNzZXRfYmFsYW5jZQAAAAACZDICAAAAHl9oYXJ2ZXN0X3Bvb2xfYWN0aXZlVm90ZV9zdHJ1YwAAAAACZDMCAAAAI19oYXJ2ZXN0X3VzZXJfcG9vbF9hY3RpdmVWb3RlX3N0cnVjAAAAAAJkNAIAAAAcc2hhcmVfbGltaXRfb25fZmlyc3RfaGFydmVzdAAAAAACZDUCAAAACkFfYXNzZXRfaWQAAAAAAmQ2AgAAAApCX2Fzc2V0X2lkAAAAAAJkNwIAAAAUZmlyc3RfaGFydmVzdF9oZWlnaHQAAAAAAmQ4AgAAAA1maXJzdF9oYXJ2ZXN0AAAAAAJkOQIAAAATc3VtX3Jld2FyZF9wcmV2aW91cwAAAAACZTECAAAAEnN1bV9yZXdhcmRfY3VycmVudAAAAAACZTIJAQAAAAdBZGRyZXNzAAAAAQEAAAAaAVSq+mnegfQTUoXKPy46iFGzGeqYHFnyDS0AAAAA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AwkAAAAAAAACBQAAAAJ1OQAAAAAAAAAACAUAAAACdjkEAAAAAncxCQEAAAACdTQAAAACBQAAAAJ2OQkAAZEAAAACBQAAAAJ1OAAAAAAAAAAACAMJAAAAAAAAAgUAAAACdTkAAAAAAAAAAAkFAAAAAncxBAAAAAJ3MgkBAAAAAnU0AAAAAgUAAAACdzEJAAGRAAAAAgUAAAACdTgAAAAAAAAAAAkDCQAAAAAAAAIFAAAAAnU5AAAAAAAAAAAKBQAAAAJ3MgQAAAACdzMJAQAAAAJ1NAAAAAIFAAAAAncyCQABkQAAAAIFAAAAAnU4AAAAAAAAAAAKAwkAAAAAAAACBQAAAAJ1OQAAAAAAAAAACwUAAAACdzMEAAAAAnc0CQEAAAACdTQAAAACBQAAAAJ3MwkAAZEAAAACBQAAAAJ1OAAAAAAAAAAACwMJAAAAAAAAAgUAAAACdTkAAAAAAAAAAAwFAAAAAnc0BAAAAAJ3NQkBAAAAAnU0AAAAAgUAAAACdzQJAAGRAAAAAgUAAAACdTgAAAAAAAAAAAwDCQAAAAAAAAIFAAAAAnU5AAAAAAAAAAANBQAAAAJ3NQQAAAACdzYJAQAAAAJ1NAAAAAIFAAAAAnc1CQABkQAAAAIFAAAAAnU4AAAAAAAAAAANAwkAAAAAAAACBQAAAAJ1OQAAAAAAAAAADgUAAAACdzYEAAAAAnc3CQEAAAACdTQAAAACBQAAAAJ3NgkAAZEAAAACBQAAAAJ1OAAAAAAAAAAADgMJAAAAAAAAAgUAAAACdTkAAAAAAAAAAA8FAAAAAnc3BAAAAAJ3OAkBAAAAAnU0AAAAAgUAAAACdzcJAAGRAAAAAgUAAAACdTgAAAAAAAAAAA8DCQAAAAAAAAIFAAAAAnU5AAAAAAAAAAAQBQAAAAJ3OAQAAAACdzkJAQAAAAJ1NAAAAAIFAAAAAnc4CQABkQAAAAIFAAAAAnU4AAAAAAAAAAAQAwkAAAAAAAACBQAAAAJ1OQAAAAAAAAAAEQUAAAACdzkEAAAAAngxCQEAAAACdTQAAAACBQAAAAJ3OQkAAZEAAAACBQAAAAJ1OAAAAAAAAAAAEQMJAAAAAAAAAgUAAAACdTkAAAAAAAAAABIFAAAAAngxBAAAAAJ4MgkBAAAAAnU0AAAAAgUAAAACeDEJAAGRAAAAAgUAAAACdTgAAAAAAAAAABIDCQAAAAAAAAIFAAAAAnU5AAAAAAAAAAATBQAAAAJ4MgQAAAACeDMJAQAAAAJ1NAAAAAIFAAAAAngyCQABkQAAAAIFAAAAAnU4AAAAAAAAAAATAwkAAAAAAAACBQAAAAJ1OQAAAAAAAAAAFAUAAAACeDMEAAAAAng0CQEAAAACdTQAAAACBQAAAAJ4MwkAAZEAAAACBQAAAAJ1OAAAAAAAAAAAFAMJAAAAAAAAAgUAAAACdTkAAAAAAAAAABUFAAAAAng0BAAAAAJ4NQkBAAAAAnU0AAAAAgUAAAACeDQJAAGRAAAAAgUAAAACdTgAAAAAAAAAABUDCQAAAAAAAAIFAAAAAnU5AAAAAAAAAAAWBQAAAAJ4NQQAAAACeDYJAQAAAAJ1NAAAAAIFAAAAAng1CQABkQAAAAIFAAAAAnU4AAAAAAAAAAAWAwkAAAAAAAACBQAAAAJ1OQAAAAAAAAAAFwUAAAACeDYEAAAAAng3CQEAAAACdTQAAAACBQAAAAJ4NgkAAZEAAAACBQAAAAJ1OAAAAAAAAAAAFwMJAAAAAAAAAgUAAAACdTkAAAAAAAAAABgFAAAAAng3BAAAAAJ4OAkBAAAAAnU0AAAAAgUAAAACeDcJAAGRAAAAAgUAAAACdTgAAAAAAAAAABgDCQAAAAAAAAIFAAAAAnU5AAAAAAAAAAAZBQAAAAJ4OAQAAAACeDkJAQAAAAJ1NAAAAAIFAAAAAng4CQABkQAAAAIFAAAAAnU4AAAAAAAAAAAZAwkAAAAAAAACBQAAAAJ1OQAAAAAAAAAAGgUAAAACeDkEAAAAAnkxCQEAAAACdTQAAAACBQAAAAJ4OQkAAZEAAAACBQAAAAJ1OAAAAAAAAAAAGgMJAAAAAAAAAgUAAAACdTkAAAAAAAAAABsFAAAAAnkxBAAAAAJ5MgkBAAAAAnU0AAAAAgUAAAACeTEJAAGRAAAAAgUAAAACdTgAAAAAAAAAABsDCQAAAAAAAAIFAAAAAnU5AAAAAAAAAAAcBQAAAAJ5MgQAAAACeTMJAQAAAAJ1NAAAAAIFAAAAAnkyCQABkQAAAAIFAAAAAnU4AAAAAAAAAAAcAwkAAAAAAAACBQAAAAJ1OQAAAAAAAAAAHQUAAAACeTMEAAAAAnk0CQEAAAACdTQAAAACBQAAAAJ5MwkAAZEAAAACBQAAAAJ1OAAAAAAAAAAAHQMJAAAAAAAAAgUAAAACdTkAAAAAAAAAAB4FAAAAAnk0BAAAAAJ5NQkBAAAAAnU0AAAAAgUAAAACeTQJAAGRAAAAAgUAAAACdTgAAAAAAAAAAB4DCQAAAAAAAAIFAAAAAnU5AAAAAAAAAAAfBQAAAAJ5NQQAAAACeTYJAQAAAAJ1NAAAAAIFAAAAAnk1CQABkQAAAAIFAAAAAnU4AAAAAAAAAAAfAwkAAAAAAAACBQAAAAJ1OQAAAAAAAAAAIAUAAAACeTYEAAAAAnk3CQEAAAACdTQAAAACBQAAAAJ5NgkAAZEAAAACBQAAAAJ1OAAAAAAAAAAAIAMJAAAAAAAAAgUAAAACdTkAAAAAAAAAACEFAAAAAnk3BAAAAAJ5OAkBAAAAAnU0AAAAAgUAAAACeTcJAAGRAAAAAgUAAAACdTgAAAAAAAAAACEDCQAAAAAAAAIFAAAAAnU5AAAAAAAAAAAiBQAAAAJ5OAQAAAACeTkJAQAAAAJ1NAAAAAIFAAAAAnk4CQABkQAAAAIFAAAAAnU4AAAAAAAAAAAiAwkAAAAAAAACBQAAAAJ1OQAAAAAAAAAAIwUAAAACeTkEAAAAAnoxCQEAAAACdTQAAAACBQAAAAJ5OQkAAZEAAAACBQAAAAJ1OAAAAAAAAAAAIwMJAAAAAAAAAgUAAAACdTkAAAAAAAAAACQFAAAAAnoxBAAAAAJ6MgkBAAAAAnU0AAAAAgUAAAACejEJAAGRAAAAAgUAAAACdTgAAAAAAAAAACQDCQAAAAAAAAIFAAAAAnU5AAAAAAAAAAAlBQAAAAJ6MgQAAAACejMJAQAAAAJ1NAAAAAIFAAAAAnoyCQABkQAAAAIFAAAAAnU4AAAAAAAAAAAlAwkAAAAAAAACBQAAAAJ1OQAAAAAAAAAAJgUAAAACejMEAAAAAno0CQEAAAACdTQAAAACBQAAAAJ6MwkAAZEAAAACBQAAAAJ1OAAAAAAAAAAAJgMJAAAAAAAAAgUAAAACdTkAAAAAAAAAACcFAAAAAno0BAAAAAJ6NQkBAAAAAnU0AAAAAgUAAAACejQJAAGRAAAAAgUAAAACdTgAAAAAAAAAACcDCQAAAAAAAAIFAAAAAnU5AAAAAAAAAAAoBQAAAAJ6NQQAAAACejYJAQAAAAJ1NAAAAAIFAAAAAno1CQABkQAAAAIFAAAAAnU4AAAAAAAAAAAoAwkAAAAAAAACBQAAAAJ1OQAAAAAAAAAAKQUAAAACejYEAAAAAno3CQEAAAACdTQAAAACBQAAAAJ6NgkAAZEAAAACBQAAAAJ1OAAAAAAAAAAAKQMJAAAAAAAAAgUAAAACdTkAAAAAAAAAACoFAAAAAno3BAAAAAJ6OAkBAAAAAnU0AAAAAgUAAAACejcJAAGRAAAAAgUAAAACdTgAAAAAAAAAACoDCQAAAAAAAAIFAAAAAnU5AAAAAAAAAAArBQAAAAJ6OAQAAAACejkJAQAAAAJ1NAAAAAIFAAAAAno4CQABkQAAAAIFAAAAAnU4AAAAAAAAAAArAwkAAAAAAAACBQAAAAJ1OQAAAAAAAAAALAUAAAACejkEAAAAA3oxMAkBAAAAAnU0AAAAAgUAAAACejkJAAGRAAAAAgUAAAACdTgAAAAAAAAAACwDCQAAAAAAAAIFAAAAAnU5AAAAAAAAAAAtBQAAAAN6MTAEAAAAA3oxMQkBAAAAAnU0AAAAAgUAAAADejEwCQABkQAAAAIFAAAAAnU4AAAAAAAAAAAtCQAAAgAAAAECAAAAE0xpc3Qgc2l6ZSBleGNlZWQgNDUAAAACcTEBAAAABGVnZzEAAAADAAAAAmY2AAAAAnU2AAAAAnUzAwkBAAAAAiE9AAAAAggFAAAAAnExAAAABmNhbGxlcgUAAAAEdGhpcwkAAAIAAAABAgAAAC1Pbmx5IGNvbnRyYWN0IGl0c2VsZiBjYW4gaW52b2tlIHRoaXMgZnVuY3Rpb24EAAAAA3oxMgAAAAAAAAAD6AQAAAADejEzCQEAAAACbjcAAAADBQAAAAJmNgUAAAACdTYFAAAAAnUzBAAAAAJvNQgFAAAAA3oxMwAAAAJfMQQAAAACbzMIBQAAAAN6MTMAAAACXzIEAAAAAm80CAUAAAADejEzAAAAAl8zBAAAAAJtNggFAAAAA3oxMwAAAAJfNAQAAAACcjkJAABkAAAAAgkBAAAAAms1AAAAAgUAAAACZjYFAAAAAnU2BQAAAAJvNAQAAAACczMJAQAAAAJwNwAAAAIFAAAAAmY2BQAAAAJ1NgQAAAACczQJAABkAAAAAgUAAAACczMFAAAAAm80BAAAAAN6MTQJAABoAAAAAgUAAAACbTYFAAAAA3oxMgQAAAADejE1CQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAABHRoaXMJAAEsAAAAAgkAASwAAAACBQAAAAJmNgIAAAABXwIAAAAidG90YWxfYW1vdW50X25ld19zaGFyZXRva2VuX2xvY2tlZAAAAAAAAAAAAAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgUAAAACZjYCAAAAAV8FAAAAAnU2BQAAAAJiOQAAAAAAAAAAAAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgUAAAACZjYCAAAAAV8FAAAAAnU2BQAAAAJiOAUAAAADejE0CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACBQAAAAJmNgIAAAABXwUAAAACdTYFAAAAAmM0BQAAAAJyOQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgUAAAACZjYCAAAAAV8JAAQlAAAAAQgFAAAAAnExAAAABmNhbGxlcgUAAAACYzIFAAAAAnM0CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACBQAAAAJmNgIAAAABXwkABCUAAAABCAUAAAACcTEAAAAGY2FsbGVyBQAAAAJjMwUAAAACbzQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgkAASwAAAACBQAAAAJmNgIAAAABXwIAAAAidG90YWxfYW1vdW50X25ld19zaGFyZXRva2VuX2xvY2tlZAkAAGQAAAACBQAAAAN6MTUFAAAAA3oxNAUAAAADbmlsAAAAAnExAQAAABx1cGRhdGVUb3RhbFNoYXJlVG9rZW5zTG9ja2VkAAAAAgAAAAJmNgAAAAJ1MwMJAQAAAAEhAAAAAQkBAAAAD2NvbnRhaW5zRWxlbWVudAAAAAIJAARMAAAAAgUAAAACYTEJAARMAAAAAgUAAAACYTIJAARMAAAAAgUAAAACYTMJAARMAAAAAgUAAAACYTQFAAAAA25pbAgFAAAAAnExAAAAD2NhbGxlclB1YmxpY0tleQkAAAIAAAABAgAAACFPbmx5IGFkbWluIGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24EAAAAA3oxMgAAAAAAAAAD6AQAAAADejE2CQAAaAAAAAIJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAABHRoaXMJAAEsAAAAAgUAAAACZjYFAAAAAmE1AAAAAAAAAAPoBAAAAAN6MTcJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAABHRoaXMJAAEsAAAAAgkAASwAAAACBQAAAAJmNgIAAAABXwIAAAAidG90YWxfYW1vdW50X25ld19zaGFyZXRva2VuX2xvY2tlZAMJAQAAAAIhPQAAAAIFAAAAA3oxNgUAAAADejE3CQAAAgAAAAECAAAAMk5ldyB0b3RhbCBhbW91bnQgc2hhcmUgdG9ja2VucyAhPSBvbGQgdG90YWwgYW1vdW50CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIFAAAAAmY2BQAAAAJiNgAAAAAAAAAAAAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACBQAAAAJmNgUAAAACYjcFAAAAAnUzCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIFAAAAAmY2BQAAAAJhNQUAAAADejE3CQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEJAAEsAAAAAgkAASwAAAACBQAAAAJmNgIAAAABXwIAAAAidG90YWxfYW1vdW50X25ld19zaGFyZXRva2VuX2xvY2tlZAUAAAADbmlsAAAAAnExAQAAAAVjbGFpbQAAAAEAAAACZjYEAAAAAnQ5CQACWQAAAAEJAQAAABFAZXh0ck5hdGl2ZSgxMDUzKQAAAAIJAQAAAAV2YWx1ZQAAAAEJAAQmAAAAAQUAAAACZjYCAAAADnNoYXJlX2Fzc2V0X2lkBAAAAAJtOQkBAAAAAmoxAAAAAQUAAAACZjYEAAAAA3oxOAkBAAAAAmw3AAAAAQUAAAACZjYEAAAAAmw5CAUAAAADejE4AAAAAl8xBAAAAAJsOAgFAAAAA3oxOAAAAAJfMgQAAAADejE5CQEAAAACazcAAAABBQAAAAJmNgQAAAACbTgIBQAAAAN6MTkAAAACXzEEAAAAAmwyCAUAAAADejE5AAAAAl8yBAAAAAJuMQgFAAAAA3oxOQAAAAJfMwQAAAACbDMIBQAAAAN6MTkAAAACXzQEAAAAA3oyMAkBAAAAAm43AAAAAwUAAAACZjYJAAQlAAAAAQgFAAAAAnExAAAABmNhbGxlcgUAAAAGaGVpZ2h0BAAAAAJvNQgFAAAAA3oyMAAAAAJfMQQAAAACbzMIBQAAAAN6MjAAAAACXzIEAAAAAm80CAUAAAADejIwAAAAAl8zBAAAAAJtNggFAAAAA3oyMAAAAAJfNAQAAAADejIxCQAAZAAAAAIJAQAAAAJrNQAAAAIFAAAAAmY2CQAEJQAAAAEIBQAAAAJxMQAAAAZjYWxsZXIFAAAAAm80BAAAAAJzMwkBAAAAAnA3AAAAAgUAAAACZjYJAAQlAAAAAQgFAAAAAnExAAAABmNhbGxlcgQAAAACczQJAABkAAAAAgUAAAACczMFAAAAAm80AwMJAAAAAAAAAgUAAAACZjYCAAAAIzNNeDZ3QkZ6UEpHMmhVV05MeTJtZWk4WkhidG1SWjZKSlRHBgkAAAAAAAACBQAAAAJmNgIAAAAjM01yd2U4Qk1GWExWZEdjQmhkZjNUOVlOVW5yVUVNSGtEQTgJAQAAAAV0aHJvdwAAAAADCQAAAAAAAAIFAAAAA3oyMQAAAAAAAAAAAAkAAAIAAAABAgAAABlZb3UgaGF2ZSAwIGF2YWlsYWJsZSBTV09QAwkBAAAAASEAAAABBQAAAAJoMwkAAAIAAAABAgAAAB9EQXBwIGlzIGluYWN0aXZlIGF0IHRoaXMgbW9tZW50AwkAAAAAAAACBQAAAAN6MjEAAAAAAAAAAAAJAAACAAAAAQIAAAAZWW91IGhhdmUgMCBhdmFpbGFibGUgU1dPUAMJAABmAAAAAgkAAGsAAAADAAAAAAAAAABjCQEAAAACajMAAAABBQAAAAJ0OQAAAAAAAAAAZAUAAAACbTkJAAACAAAAAQIAAAAyQmFsYW5jZSBvZiBzaGFyZS10b2tlbiBpcyBncmVhdGVyIHRoYW4gdG90YWxBbW91bnQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIFAAAAAmY2AgAAAAFfCQAEJQAAAAEIBQAAAAJxMQAAAAZjYWxsZXIFAAAAAmI5BQAAAAJvNQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACBQAAAAJmNgUAAAACYjYFAAAAAm8zCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIFAAAAAmY2BQAAAAJiNwUAAAAGaGVpZ2h0CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACBQAAAAJmNgIAAAABXwkABCUAAAABCAUAAAACcTEAAAAGY2FsbGVyBQAAAAJjNAAAAAAAAAAAAAkABEwAAAACCQEAAAAHUmVpc3N1ZQAAAAMFAAAAAmk0BQAAAAN6MjEGCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACBQAAAAJmNgIAAAABXwkABCUAAAABCAUAAAACcTEAAAAGY2FsbGVyBQAAAAJjMgUAAAACczQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIFAAAAAmY2AgAAAAFfCQAEJQAAAAEIBQAAAAJxMQAAAAZjYWxsZXIFAAAAAmMzBQAAAAJvNAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAACcTEAAAAGY2FsbGVyBQAAAAN6MjEFAAAAAmk0BQAAAANuaWwAAAACcTEBAAAACHNodXRkb3duAAAAAAMJAQAAAAEhAAAAAQUAAAACaDMJAAACAAAAAQkAASwAAAACAgAAACJEQXBwIGlzIGFscmVhZHkgc3VzcGVuZGVkLiBDYXVzZTogCQEAAAALdmFsdWVPckVsc2UAAAACCQAEHQAAAAIFAAAABHRoaXMFAAAAAmE4AgAAABp0aGUgY2F1c2Ugd2Fzbid0IHNwZWNpZmllZAMJAQAAAAEhAAAAAQkBAAAAD2NvbnRhaW5zRWxlbWVudAAAAAIJAARMAAAAAgUAAAACYTEJAARMAAAAAgUAAAACYTIJAARMAAAAAgUAAAACYTMFAAAAA25pbAgFAAAAAnExAAAAD2NhbGxlclB1YmxpY0tleQkAAAIAAAABAgAAACFPbmx5IGFkbWluIGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24JAQAAAAJwOAAAAAECAAAAD1BhdXNlZCBieSBhZG1pbgAAAAJxMQEAAAAIYWN0aXZhdGUAAAAAAwUAAAACaDMJAAACAAAAAQIAAAAWREFwcCBpcyBhbHJlYWR5IGFjdGl2ZQMJAQAAAAEhAAAAAQkBAAAAD2NvbnRhaW5zRWxlbWVudAAAAAIJAARMAAAAAgUAAAACYTEJAARMAAAAAgUAAAACYTIJAARMAAAAAgUAAAACYTMFAAAAA25pbAgFAAAAAnExAAAAD2NhbGxlclB1YmxpY0tleQkAAAIAAAABAgAAACFPbmx5IGFkbWluIGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24JAARMAAAAAgkBAAAADEJvb2xlYW5FbnRyeQAAAAIFAAAAAmE3BgkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABBQAAAAJhOAUAAAADbmlsAAAAAQAAAAN6MjIBAAAAA3oyMwAAAAAEAAAAAmg5BQAAAAN6MjIDCQAAAQAAAAIFAAAAAmg5AgAAABdJbnZva2VTY3JpcHRUcmFuc2FjdGlvbgQAAAADejI0BQAAAAJoOQQAAAADejI1AwkAAAAAAAACCAUAAAADejI0AAAABGRBcHAFAAAABHRoaXMJAAAAAAAAAggFAAAAA3oyNAAAAAhmdW5jdGlvbgIAAAAEZWdnMQcEAAAAA3oyNgMDAwkAAfQAAAADCAUAAAADejIyAAAACWJvZHlCeXRlcwkAAZEAAAACCAUAAAADejIyAAAABnByb29mcwAAAAAAAAAAAAUAAAACYTEGCQAB9AAAAAMIBQAAAAN6MjIAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAN6MjIAAAAGcHJvb2ZzAAAAAAAAAAAABQAAAAJhMgYJAAH0AAAAAwgFAAAAA3oyMgAAAAlib2R5Qnl0ZXMJAAGRAAAAAggFAAAAA3oyMgAAAAZwcm9vZnMAAAAAAAAAAAAFAAAAAmEzBgkAAfQAAAADCAUAAAADejIyAAAACWJvZHlCeXRlcwkAAZEAAAACCAUAAAADejIyAAAABnByb29mcwAAAAAAAAAAAAUAAAACYTQDBQAAAAN6MjUFAAAAA3oyNgcEAAAAA3oyNwMJAAH0AAAAAwgFAAAAA3oyMgAAAAlib2R5Qnl0ZXMJAAGRAAAAAggFAAAAA3oyMgAAAAZwcm9vZnMAAAAAAAAAAAAFAAAAAmExAAAAAAAAAAABAAAAAAAAAAAABAAAAAN6MjgDCQAB9AAAAAMIBQAAAAN6MjIAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAN6MjIAAAAGcHJvb2ZzAAAAAAAAAAABBQAAAAJhMgAAAAAAAAAAAQAAAAAAAAAAAAQAAAADejI5AwkAAfQAAAADCAUAAAADejIyAAAACWJvZHlCeXRlcwkAAZEAAAACCAUAAAADejIyAAAABnByb29mcwAAAAAAAAAAAgUAAAACYTMAAAAAAAAAAAEAAAAAAAAAAAAJAABnAAAAAgkAAGQAAAACCQAAZAAAAAIFAAAAA3oyNwUAAAADejI4BQAAAAN6MjkAAAAAAAAAAAJNOKi/", "height": 1702809, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: CMEH5S5X7x2bBSYrHfnR5pw8ArvH5LhRkFZmF5s6ndEe Next: G6JKKDtnrXWZggHs1qNV2tDtSqLCijYZuh9Cc1XsvHNU Diff:
OldNewDifferences
875875 let totalAmountShareTokensLockedNew = getIntegerValue(this, ((pool + "_") + "total_amount_new_sharetoken_locked"))
876876 if ((totalAmountShareTokensLockedBefore != totalAmountShareTokensLockedNew))
877877 then throw("New total amount share tockens != old total amount")
878- else [IntegerEntry((pool + keyLastInterest), 0), IntegerEntry((pool + keyLastInterestHeight), migrationHeight), DeleteEntry(((pool + "_") + "total_amount_new_sharetoken_locked"))]
878+ else [IntegerEntry((pool + keyLastInterest), 0), IntegerEntry((pool + keyLastInterestHeight), migrationHeight), IntegerEntry((pool + keyShareTokensLocked), totalAmountShareTokensLockedNew), DeleteEntry(((pool + "_") + "total_amount_new_sharetoken_locked"))]
879879 }
880880
881881
884884 func claim (pool) = {
885885 let shareTokensId = fromBase58String(getStringValue(value(addressFromString(pool)), "share_asset_id"))
886886 let shareTokenLocked = getTotalShareTokenLocked(pool)
887- let $t02888728952 = getLastInterestInfo(pool)
888- let lastInterestHeight = $t02888728952._1
889- let lastInterest = $t02888728952._2
890- let $t02895729069 = rewardInfo(pool)
891- let currentRewardPerBlock = $t02895729069._1
892- let rewardUpdateHeight = $t02895729069._2
893- let previousRewardPerBlock = $t02895729069._3
894- let poolRewardUpdateHeight = $t02895729069._4
895- let $t02907429190 = claimCalc(pool, toString(i.caller), height)
896- let userNewInterest = $t02907429190._1
897- let currentInterest = $t02907429190._2
898- let claimAmount = $t02907429190._3
899- let userShareTokensAmount = $t02907429190._4
887+ let $t02897129036 = getLastInterestInfo(pool)
888+ let lastInterestHeight = $t02897129036._1
889+ let lastInterest = $t02897129036._2
890+ let $t02904129153 = rewardInfo(pool)
891+ let currentRewardPerBlock = $t02904129153._1
892+ let rewardUpdateHeight = $t02904129153._2
893+ let previousRewardPerBlock = $t02904129153._3
894+ let poolRewardUpdateHeight = $t02904129153._4
895+ let $t02915829274 = claimCalc(pool, toString(i.caller), height)
896+ let userNewInterest = $t02915829274._1
897+ let currentInterest = $t02915829274._2
898+ let claimAmount = $t02915829274._3
899+ let userShareTokensAmount = $t02915829274._4
900900 let availableFund = (userAvailableSWOP(pool, toString(i.caller)) + claimAmount)
901901 let userClaimedAmount = getUserSWOPClaimedAmount(pool, toString(i.caller))
902902 let userClaimedAmountNew = (userClaimedAmount + claimAmount)
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let adminPubKey1 = base58'GFmKZ2naZFRoCvNbwKAQVGmLb1uBeWGDgFabdGBuZiuy'
55
66 let adminPubKey2 = base58'GmJXRyhRA79g8yUGgKBAVdnFfQFDMjQG98b1MmLDh5kk'
77
88 let adminPubKey3 = base58'CFhbV6h41hVjbGHudGtS3fYUv7QAKRxFQzKNtx4B5PqP'
99
1010 let admStaking = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
1111
1212 let keyShareTokensLocked = "_total_share_tokens_locked"
1313
1414 let kShareLimit = "share_limit_on_first_harvest"
1515
1616 let keyActive = "active"
1717
1818 let keyCause = "shutdown_cause"
1919
2020 let keyRewardPoolFractionCurrent = "_current_pool_fraction_reward"
2121
2222 let keyRewardPoolFractionPrevious = "_previous_pool_fraction_reward"
2323
2424 let keyHeightPoolFraction = "_pool_reward_update_height"
2525
2626 let keyTotalRewardPerBlockCurrent = "total_reward_per_block_current"
2727
2828 let keyTotalRewardPerBlockPrevious = "total_reward_per_block_previous"
2929
3030 let keyRewardUpdateHeight = "reward_update_height"
3131
3232 let keyLastInterest = "_last_interest"
3333
3434 let keyLastInterestHeight = "_last_interest_height"
3535
3636 let keyUserShareTokensLocked = "_share_tokens_locked"
3737
3838 let keyUserLastInterest = "_last_interest"
3939
4040 let keySWOPid = "SWOP_id"
4141
4242 let keyUserSWOPClaimedAmount = "_SWOP_claimed_amount"
4343
4444 let keyUserSWOPLastClaimedAmount = "_SWOP_last_claimed_amount"
4545
4646 let keyAvailableSWOP = "_available_SWOP"
4747
4848 let keyFarmingStartHeight = "farming_start_height"
4949
5050 let keyAPY = "apy"
5151
5252 let kPreviousTotalVoteSWOP = "previous_total_vote_SWOP"
5353
5454 let keySwopYearEmission = "swop_year_emission"
5555
5656 let keyBalancecpmmA = "A_asset_balance"
5757
5858 let keyBalancecpmmB = "B_asset_balance"
5959
6060 let kHarvestPoolActiveVoteStrucVoting = "_harvest_pool_activeVote_struc"
6161
6262 let kHarvestUserPoolActiveVoteStrucVoting = "_harvest_user_pool_activeVote_struc"
6363
6464 let keyLimitShareFirstHarvest = "share_limit_on_first_harvest"
6565
6666 let keyAssetIdA = "A_asset_id"
6767
6868 let keyAssetIdB = "B_asset_id"
6969
7070 let keyFirstHarvestHeight = "first_harvest_height"
7171
7272 let keyfirstHarvestCpmm = "first_harvest"
7373
7474 let keyTempPrevSum = "sum_reward_previous"
7575
7676 let keyTempCurSum = "sum_reward_current"
7777
7878 let governanceAddress = Address(base58'3N5W8da2iiijVieA6qLGo7KzCJj8B19smWU')
7979
8080 let wallet = Address(base58'3NAGTtZz6WpupSN89NZD5rMZwwziZEg4Kx4')
8181
8282 let votingAddress = Address(base58'3MrJgdL1GniipErHy44YF9idzLaUL2iX5DQ')
8383
8484 let adminIncreaseInterestAddress = Address(base58'3NAGTtZz6WpupSN89NZD5rMZwwziZEg4Kx4')
8585
8686 let oneWeekInBlock = 10106
8787
8888 let totalVoteShare = 10000000000
8989
9090 let scaleValue1 = 10
9191
9292 let scaleValue3 = 1000
9393
9494 let scaleValue5 = 100000
9595
9696 let scaleValue6 = 1000000
9797
9898 let scaleValue8 = 100000000
9999
100100 let scaleValue11 = 100000000000
101101
102102 func strAssetIdA (pool) = getStringValue(pool, keyAssetIdA)
103103
104104
105105 func strAssetIdB (pool) = getStringValue(pool, keyAssetIdB)
106106
107107
108108 func assetIdA (pool) = if ((strAssetIdA(pool) == "WAVES"))
109109 then unit
110110 else fromBase58String(strAssetIdA(pool))
111111
112112
113113 func assetIdB (pool) = if ((strAssetIdB(pool) == "WAVES"))
114114 then unit
115115 else fromBase58String(strAssetIdB(pool))
116116
117117
118118 let kBasePeriod = "base_period"
119119
120120 let kPeriodLength = "period_length"
121121
122122 let kStartHeight = "start_height"
123123
124124 let kFirstHarvestHeight = "first_harvest_height"
125125
126126 let kDurationFullVotePower = "duration_full_vote_power"
127127
128128 let kMinVotePower = "min_vote_power"
129129
130130 let basePeriod = valueOrErrorMessage(getInteger(votingAddress, kBasePeriod), "Empty kBasePeriod")
131131
132132 let startHeight = valueOrErrorMessage(getInteger(votingAddress, kStartHeight), "Empty kStartHeight")
133133
134134 let periodLength = valueOrErrorMessage(getInteger(votingAddress, kPeriodLength), "Empty kPeriodLength")
135135
136136 let durationFullVotePower = valueOrErrorMessage(getInteger(votingAddress, kDurationFullVotePower), "Empty kDurationFullVotePower")
137137
138138 let minVotePower = valueOrErrorMessage(getInteger(votingAddress, kMinVotePower), "Empty kMinVotePower")
139139
140140 let isActive = getBooleanValue(this, keyActive)
141141
142142 let currPeriod = (basePeriod + ((height - startHeight) / periodLength))
143143
144144 func getLimitToken (pool) = valueOrElse(getIntegerValue(pool, keyLimitShareFirstHarvest), 0)
145145
146146
147147 let APY = getIntegerValue(this, keyAPY)
148148
149149 let SwopYearEmission = getIntegerValue(this, keySwopYearEmission)
150150
151151 func assetNameA (pool) = match assetIdA(pool) {
152152 case id: ByteVector =>
153153 value(assetInfo(id)).name
154154 case waves: Unit =>
155155 "WAVES"
156156 case _ =>
157157 throw("Match error")
158158 }
159159
160160
161161 func assetNameB (pool) = match assetIdB(pool) {
162162 case id: ByteVector =>
163163 value(assetInfo(id)).name
164164 case waves: Unit =>
165165 "WAVES"
166166 case _ =>
167167 throw("Match error")
168168 }
169169
170170
171171 let SWOP = fromBase58String(getStringValue(this, keySWOPid))
172172
173173 func isFirstHarvest (pool) = valueOrElse(getBoolean(pool, keyfirstHarvestCpmm), false)
174174
175175
176176 func getHeightFirstHarvest (pool) = valueOrElse(getInteger(pool, keyFirstHarvestHeight), 0)
177177
178178
179179 func getBalanceA (pool) = valueOrErrorMessage(getInteger(pool, keyBalancecpmmA), ("No data on the key: " + keyBalancecpmmA))
180180
181181
182182 func getBalanceB (pool) = valueOrErrorMessage(getInteger(pool, keyBalancecpmmB), ("No data on the key: " + keyBalancecpmmB))
183183
184184
185185 func getShareLimitToken (pool) = valueOrErrorMessage(getInteger(pool, kShareLimit), ("No data on the key: " + kShareLimit))
186186
187187
188188 func getTotalShareTokenLocked (pool) = valueOrErrorMessage(getInteger(this, (pool + keyShareTokensLocked)), (("No data on the key: " + pool) + keyShareTokensLocked))
189189
190190
191191 func getShareAssetId (pool) = fromBase58String(getStringValue(value(addressFromString(pool)), "share_asset_id"))
192192
193193
194194 func accountBalance (assetId) = match assetId {
195195 case id: ByteVector =>
196196 assetBalance(this, id)
197197 case waves: Unit =>
198198 wavesBalance(this).available
199199 case _ =>
200200 throw("Match error")
201201 }
202202
203203
204204 func getAssetInfo (assetId) = match assetId {
205205 case id: ByteVector =>
206206 let stringId = toBase58String(id)
207207 let info = valueOrErrorMessage(assetInfo(id), (("Asset " + stringId) + " doesn't exist"))
208208 $Tuple3(stringId, info.name, info.decimals)
209209 case waves: Unit =>
210210 $Tuple3("WAVES", "WAVES", 8)
211211 case _ =>
212212 throw("Match error")
213213 }
214214
215215
216216 func calcScaleValue (assetId1,assetId2) = {
217217 let assetId1Decimals = value(assetInfo(assetId1)).decimals
218218 let assetId2Decimals = value(assetInfo(assetId2)).decimals
219219 let scaleDigits = ((assetId2Decimals - assetId1Decimals) + 8)
220220 pow(10, 0, scaleDigits, 0, 0, FLOOR)
221221 }
222222
223223
224224 func userAvailableSWOP (pool,user) = valueOrElse(getInteger(this, (((pool + "_") + user) + keyAvailableSWOP)), 0)
225225
226226
227227 func rewardInfo (pool) = {
228228 let totalRewardPerBlockCurrent = valueOrErrorMessage(getInteger(governanceAddress, keyTotalRewardPerBlockCurrent), ((("No data on the key: " + keyTotalRewardPerBlockCurrent) + " at address ") + toString(governanceAddress)))
229229 let totalRewardPerBlockPrevious = valueOrErrorMessage(getInteger(governanceAddress, keyTotalRewardPerBlockPrevious), ((("No data on the key: " + keyTotalRewardPerBlockPrevious) + " at address ") + toString(governanceAddress)))
230230 let rewardPoolFractionCurrent = valueOrErrorMessage(getInteger(governanceAddress, (pool + keyRewardPoolFractionCurrent)), (((("No data on the key: " + pool) + keyRewardPoolFractionCurrent) + " at address ") + toString(governanceAddress)))
231231 let rewardUpdateHeight = valueOrErrorMessage(getInteger(governanceAddress, keyRewardUpdateHeight), ((("No data on the key: " + keyRewardUpdateHeight) + " at address ") + toString(governanceAddress)))
232232 let poolRewardUpdateHeight = valueOrElse(getInteger(governanceAddress, (pool + keyHeightPoolFraction)), 0)
233233 let rewardPoolFractionPrevious = valueOrErrorMessage(getInteger(governanceAddress, (pool + keyRewardPoolFractionPrevious)), (((("No data on the key: " + pool) + keyRewardPoolFractionPrevious) + " at address ") + toString(governanceAddress)))
234234 let rewardPoolCurrent = fraction(totalRewardPerBlockCurrent, rewardPoolFractionCurrent, totalVoteShare)
235235 let rewardPoolPrevious = fraction(totalRewardPerBlockPrevious, rewardPoolFractionPrevious, totalVoteShare)
236236 if (if ((rewardPoolCurrent > totalRewardPerBlockCurrent))
237237 then true
238238 else (rewardPoolPrevious > totalRewardPerBlockPrevious))
239239 then throw("rewardPoolCurrent > totalRewardPerBlockCurrent or rewardPoolPrevious > totalRewardPerBlockPrevious")
240240 else $Tuple4(rewardPoolCurrent, rewardUpdateHeight, rewardPoolPrevious, poolRewardUpdateHeight)
241241 }
242242
243243
244244 func getLastInterestInfo (pool) = {
245245 let lastInterest = valueOrErrorMessage(getInteger(this, (pool + keyLastInterest)), (("No data on the key: " + pool) + keyLastInterest))
246246 let lastInterestHeight = valueOrElse(getInteger(this, (pool + keyLastInterestHeight)), height)
247247 $Tuple2(lastInterestHeight, lastInterest)
248248 }
249249
250250
251251 func getUserInterestInfo (pool,userAddrStr) = {
252252 let userLastInterest = getInteger(this, (((pool + "_") + userAddrStr) + keyUserLastInterest))
253253 let userShare = getInteger(this, (((pool + "_") + userAddrStr) + keyUserShareTokensLocked))
254254 let lastInterest = valueOrErrorMessage(getInteger(this, (pool + keyLastInterest)), (("No data on the key: " + pool) + keyLastInterest))
255255 let userLastInterestValue = match userLastInterest {
256256 case userLastInterest: Int =>
257257 userLastInterest
258258 case _ =>
259259 lastInterest
260260 }
261261 let userShareTokensAmount = match userShare {
262262 case userShare: Int =>
263263 userShare
264264 case _ =>
265265 0
266266 }
267267 $Tuple2(userLastInterestValue, userShareTokensAmount)
268268 }
269269
270270
271271 func calcInterest (lastInterestHeight,rewardUpdateHeight,poolRewardUpdateHeight,lastInterest,currentRewardPerBlock,shareTokenLocked,previousRewardPerBlock,scaleValue,h) = if ((shareTokenLocked == 0))
272272 then 0
273273 else if ((poolRewardUpdateHeight != 0))
274274 then if (if ((rewardUpdateHeight > h))
275275 then (rewardUpdateHeight == poolRewardUpdateHeight)
276276 else false)
277277 then {
278278 let reward = (previousRewardPerBlock * (h - lastInterestHeight))
279279 (lastInterest + fraction(reward, scaleValue, shareTokenLocked))
280280 }
281281 else if (if ((h > rewardUpdateHeight))
282282 then (rewardUpdateHeight != poolRewardUpdateHeight)
283283 else false)
284284 then {
285285 let reward = (previousRewardPerBlock * (h - lastInterestHeight))
286286 (lastInterest + fraction(reward, scaleValue, shareTokenLocked))
287287 }
288288 else if (if (if ((h > rewardUpdateHeight))
289289 then (rewardUpdateHeight == poolRewardUpdateHeight)
290290 else false)
291291 then (lastInterestHeight > rewardUpdateHeight)
292292 else false)
293293 then {
294294 let reward = (currentRewardPerBlock * (h - lastInterestHeight))
295295 (lastInterest + fraction(reward, scaleValue, shareTokenLocked))
296296 }
297297 else {
298298 let rewardAfterLastInterestBeforeReawardUpdate = (previousRewardPerBlock * (rewardUpdateHeight - lastInterestHeight))
299299 let interestAfterUpdate = (lastInterest + fraction(rewardAfterLastInterestBeforeReawardUpdate, scaleValue, shareTokenLocked))
300300 let reward = (currentRewardPerBlock * (h - rewardUpdateHeight))
301301 (interestAfterUpdate + fraction(reward, scaleValue, shareTokenLocked))
302302 }
303303 else if ((rewardUpdateHeight > h))
304304 then {
305305 let reward = (previousRewardPerBlock * (h - lastInterestHeight))
306306 (lastInterest + fraction(reward, scaleValue, shareTokenLocked))
307307 }
308308 else if ((lastInterestHeight > rewardUpdateHeight))
309309 then {
310310 let reward = (currentRewardPerBlock * (h - lastInterestHeight))
311311 (lastInterest + fraction(reward, scaleValue, shareTokenLocked))
312312 }
313313 else {
314314 let rewardAfterLastInterestBeforeReawardUpdate = (previousRewardPerBlock * (rewardUpdateHeight - lastInterestHeight))
315315 let interestAfterUpdate = (lastInterest + fraction(rewardAfterLastInterestBeforeReawardUpdate, scaleValue, shareTokenLocked))
316316 let reward = (currentRewardPerBlock * (h - rewardUpdateHeight))
317317 (interestAfterUpdate + fraction(reward, scaleValue, shareTokenLocked))
318318 }
319319
320320
321321 func claimCalc (pool,userAddrStr,h) = {
322322 let shareAssetId = getShareAssetId(pool)
323323 let scaleValue = calcScaleValue(SWOP, shareAssetId)
324324 let shareTokenLocked = getTotalShareTokenLocked(pool)
325325 let $t01309613161 = getLastInterestInfo(pool)
326326 let lastInterestHeight = $t01309613161._1
327327 let lastInterest = $t01309613161._2
328328 let $t01316613278 = rewardInfo(pool)
329329 let currentRewardPerBlock = $t01316613278._1
330330 let rewardUpdateHeight = $t01316613278._2
331331 let previousRewardPerBlock = $t01316613278._3
332332 let poolRewardUpdateHeight = $t01316613278._4
333333 let $t01328313367 = getUserInterestInfo(pool, userAddrStr)
334334 let userLastInterest = $t01328313367._1
335335 let userShareTokensAmount = $t01328313367._2
336336 let currentInterest = calcInterest(lastInterestHeight, rewardUpdateHeight, poolRewardUpdateHeight, lastInterest, currentRewardPerBlock, shareTokenLocked, previousRewardPerBlock, scaleValue, h)
337337 let claimAmount = fraction(userShareTokensAmount, (currentInterest - userLastInterest), scaleValue)
338338 let userNewInterest = currentInterest
339339 $Tuple4(userNewInterest, currentInterest, claimAmount, userShareTokensAmount)
340340 }
341341
342342
343343 func claimCalcForMigration (pool,userAddrStr,h) = {
344344 let shareAssetId = getShareAssetId(pool)
345345 let scaleValue = calcScaleValue(SWOP, shareAssetId)
346346 let shareTokenLocked = getTotalShareTokenLocked(pool)
347347 let $t01409014155 = getLastInterestInfo(pool)
348348 let lastInterestHeight = $t01409014155._1
349349 let lastInterest = $t01409014155._2
350350 let $t01416014272 = rewardInfo(pool)
351351 let currentRewardPerBlock = $t01416014272._1
352352 let rewardUpdateHeight = $t01416014272._2
353353 let previousRewardPerBlock = $t01416014272._3
354354 let poolRewardUpdateHeight = $t01416014272._4
355355 let $t01427714361 = getUserInterestInfo(pool, userAddrStr)
356356 let userLastInterest = $t01427714361._1
357357 let userShareTokensAmount = $t01427714361._2
358358 let currentInterest = calcInterest(lastInterestHeight, rewardUpdateHeight, poolRewardUpdateHeight, lastInterest, currentRewardPerBlock, shareTokenLocked, previousRewardPerBlock, scaleValue, h)
359359 let claimAmount = fraction(userShareTokensAmount, (currentInterest - userLastInterest), scaleValue)
360360 let userNewInterest = currentInterest
361361 $Tuple4(userNewInterest, currentInterest, claimAmount, userShareTokensAmount)
362362 }
363363
364364
365365 func calculateProtocolReward (pool) = {
366366 let $t01486514930 = getLastInterestInfo(pool)
367367 let lastInterestHeight = $t01486514930._1
368368 let lastInterest = $t01486514930._2
369369 let $t01493515046 = rewardInfo(pool)
370370 let currentRewardPerBlock = $t01493515046._1
371371 let rewardUpdateHeight = $t01493515046._2
372372 let previousRewardPerBlock = $t01493515046._3
373373 let poolRewardUpdateHeight = $t01493515046._4
374374 let shareTokenLocked = getTotalShareTokenLocked(pool)
375375 if (if ((shareTokenLocked == 0))
376376 then (poolRewardUpdateHeight == 0)
377377 else false)
378378 then if ((rewardUpdateHeight > height))
379379 then {
380380 let reward = (previousRewardPerBlock * (height - lastInterestHeight))
381381 reward
382382 }
383383 else if ((lastInterestHeight > rewardUpdateHeight))
384384 then {
385385 let reward = (currentRewardPerBlock * (height - lastInterestHeight))
386386 reward
387387 }
388388 else {
389389 let rewardAfterLastInterestBeforeReawardUpdate = (previousRewardPerBlock * (rewardUpdateHeight - lastInterestHeight))
390390 let reward = (currentRewardPerBlock * (height - rewardUpdateHeight))
391391 (reward + rewardAfterLastInterestBeforeReawardUpdate)
392392 }
393393 else if (if ((shareTokenLocked == 0))
394394 then (poolRewardUpdateHeight != 0)
395395 else false)
396396 then if (if ((rewardUpdateHeight > height))
397397 then (rewardUpdateHeight == poolRewardUpdateHeight)
398398 else false)
399399 then {
400400 let reward = (previousRewardPerBlock * (height - lastInterestHeight))
401401 reward
402402 }
403403 else if (if ((height > rewardUpdateHeight))
404404 then (rewardUpdateHeight != poolRewardUpdateHeight)
405405 else false)
406406 then {
407407 let reward = (previousRewardPerBlock * (height - lastInterestHeight))
408408 reward
409409 }
410410 else if (if (if ((height > rewardUpdateHeight))
411411 then (rewardUpdateHeight == poolRewardUpdateHeight)
412412 else false)
413413 then (lastInterestHeight > rewardUpdateHeight)
414414 else false)
415415 then {
416416 let reward = (currentRewardPerBlock * (height - lastInterestHeight))
417417 reward
418418 }
419419 else {
420420 let rewardAfterLastInterestBeforeReawardUpdate = (previousRewardPerBlock * (rewardUpdateHeight - lastInterestHeight))
421421 let reward = (currentRewardPerBlock * (height - rewardUpdateHeight))
422422 (reward + rewardAfterLastInterestBeforeReawardUpdate)
423423 }
424424 else 0
425425 }
426426
427427
428428 func checkPmtAssetIdCorrect (pool,pmtAssetId) = {
429429 let poolShareAssetId = fromBase58String(getStringValue(value(addressFromString(pool)), "share_asset_id"))
430430 if ((pmtAssetId == poolShareAssetId))
431431 then true
432432 else false
433433 }
434434
435435
436436 func getUserSWOPClaimedAmount (pool,user) = valueOrElse(getInteger(this, (((pool + "_") + user) + keyUserSWOPClaimedAmount)), 0)
437437
438438
439439 func suspend (cause) = [BooleanEntry(keyActive, false), StringEntry(keyCause, cause)]
440440
441441
442442 @Callable(i)
443443 func init (earlyLP) = if (isDefined(getString(this, keySWOPid)))
444444 then throw("SWOP already initialized")
445445 else {
446446 let initAmount = 100000000000000
447447 let SWOPissue = Issue("SWOP", "SWOP protocol token", initAmount, 8, true)
448448 let SWOPid = calculateAssetId(SWOPissue)
449449 [BooleanEntry(keyActive, true), Issue("SWOP", "SWOP protocol token", initAmount, 8, true), StringEntry(keySWOPid, toBase58String(SWOPid))]
450450 }
451451
452452
453453
454454 @Callable(i)
455455 func initPoolShareFarming (pool) = if ((i.caller != this))
456456 then throw("Only the DApp itself can call this function")
457457 else {
458458 let $t01801618119 = rewardInfo(pool)
459459 let currentReward = $t01801618119._1
460460 let rewardUpdateHeight = $t01801618119._2
461461 let previousRewardPerBlock = $t01801618119._3
462462 let poolRewardUpdateHeight = $t01801618119._4
463463 [IntegerEntry((pool + keyShareTokensLocked), 0), IntegerEntry((pool + keyLastInterest), 0), IntegerEntry((pool + keyLastInterestHeight), height)]
464464 }
465465
466466
467467
468468 @Callable(i)
469469 func updatePoolInterest (pool) = if ((i.caller != wallet))
470470 then throw("Only the Admin itself can call this function")
471471 else if (!(isActive))
472472 then throw("DApp is inactive at this moment")
473473 else {
474474 let $t01852818664 = claimCalc(pool, toString(adminIncreaseInterestAddress), height)
475475 let userNewInterest = $t01852818664._1
476476 let currentInterest = $t01852818664._2
477477 let claimAmount = $t01852818664._3
478478 let userShareTokensAmount = $t01852818664._4
479479 let $t01866918772 = rewardInfo(pool)
480480 let currentReward = $t01866918772._1
481481 let rewardUpdateHeight = $t01866918772._2
482482 let previousRewardPerBlock = $t01866918772._3
483483 let poolRewardUpdateHeight = $t01866918772._4
484484 [IntegerEntry((pool + keyLastInterest), userNewInterest), IntegerEntry((pool + keyLastInterestHeight), height)]
485485 }
486486
487487
488488
489489 @Callable(i)
490490 func lockShareTokens (pool) = {
491491 let userAddrStr = toString(i.caller)
492492 let $t01900619081 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
493493 let pmtAmount = $t01900619081._1
494494 let pmtAssetId = $t01900619081._2
495495 let $t01908619159 = getAssetInfo(pmtAssetId)
496496 let pmtStrAssetId = $t01908619159._1
497497 let pmtAssetName = $t01908619159._2
498498 let pmtDecimals = $t01908619159._3
499499 let $t01916419280 = claimCalc(pool, toString(i.caller), height)
500500 let userNewInterest = $t01916419280._1
501501 let currentInterest = $t01916419280._2
502502 let claimAmount = $t01916419280._3
503503 let userShareTokensAmount = $t01916419280._4
504504 let userShareAmountNew = (userShareTokensAmount + pmtAmount)
505505 let availableFundsNew = (userAvailableSWOP(pool, toString(i.caller)) + claimAmount)
506506 let totalShareAmount = getTotalShareTokenLocked(pool)
507507 let totalShareAmountNew = (totalShareAmount + pmtAmount)
508508 let userClaimedAmount = getUserSWOPClaimedAmount(pool, toString(i.caller))
509509 let userClaimedAmountNew = (userClaimedAmount + claimAmount)
510510 let baseEntry = [IntegerEntry((((pool + "_") + userAddrStr) + keyUserLastInterest), userNewInterest), IntegerEntry((((pool + "_") + userAddrStr) + keyUserShareTokensLocked), userShareAmountNew), IntegerEntry((pool + keyShareTokensLocked), totalShareAmountNew), IntegerEntry((pool + keyLastInterest), currentInterest), IntegerEntry((pool + keyLastInterestHeight), height), IntegerEntry((((pool + "_") + userAddrStr) + keyUserSWOPClaimedAmount), userClaimedAmountNew), IntegerEntry((((pool + "_") + userAddrStr) + keyUserSWOPLastClaimedAmount), claimAmount), IntegerEntry((((pool + "_") + userAddrStr) + keyAvailableSWOP), availableFundsNew)]
511511 if (if ((pool == "3Mx6wBFzPJG2hUWNLy2mei8ZHbtmRZ6JJTG"))
512512 then true
513513 else (pool == "3Mrwe8BMFXLVdGcBhdf3T9YNUnrUEMHkDA8"))
514514 then throw()
515515 else if ((0 >= pmtAmount))
516516 then throw("You can't lock token")
517517 else if (!(isActive))
518518 then throw("DApp is inactive at this moment")
519519 else if (!(checkPmtAssetIdCorrect(pool, pmtAssetId)))
520520 then throw("Incorrect pmtAssetId")
521521 else if (if (isFirstHarvest(Address(fromBase58String(pool))))
522522 then (getHeightFirstHarvest(Address(fromBase58String(pool))) > height)
523523 else false)
524524 then {
525525 let harvestPeriod = ((((getHeightFirstHarvest(Address(fromBase58String(pool))) - startHeight) + 1) / periodLength) - 1)
526526 let amountOfVoting = split(getStringValue(votingAddress, (((userAddrStr + "_") + pool) + "_user_pool_struc")), "_")
527527 let amountPoolStract = split(getStringValue(votingAddress, (pool + "_pool_struc")), "_")
528528 let amountActiveVoteUserPoolStract = split(valueOrElse(getString(votingAddress, (((userAddrStr + "_") + pool) + kHarvestUserPoolActiveVoteStrucVoting)), ""), "_")
529529 let amountPoolActiveVoteStract = split(valueOrElse(getString(votingAddress, (pool + kHarvestPoolActiveVoteStrucVoting)), ""), "_")
530530 let userShareTokenLocked = userShareTokensAmount
531531 let userPoolActiveVote = if ((toString(currPeriod) == amountOfVoting[2]))
532532 then valueOrElse(parseInt(amountActiveVoteUserPoolStract[0]), 0)
533533 else valueOrElse(parseInt(amountOfVoting[1]), 0)
534534 let poolActiveVote = if ((toString(currPeriod) == amountPoolStract[2]))
535535 then valueOrElse(parseInt(amountPoolActiveVoteStract[0]), 0)
536536 else valueOrElse(parseInt(amountPoolStract[1]), 0)
537537 let protocolReward = calculateProtocolReward(pool)
538538 if ((userPoolActiveVote != 0))
539539 then {
540540 let limitShareToken = getShareLimitToken(addressFromStringValue(pool))
541541 let shareToken = (fraction(limitShareToken, userPoolActiveVote, poolActiveVote) - userShareTokenLocked)
542542 if (if ((size(amountActiveVoteUserPoolStract) > 1))
543543 then (valueOrElse(parseInt(amountActiveVoteUserPoolStract[1]), 0) >= harvestPeriod)
544544 else false)
545545 then throw("You can't share token")
546546 else if ((pmtAmount > limitShareToken))
547547 then throw(("You can't share token more than " + toString(limitShareToken)))
548548 else if ((shareToken > 0))
549549 then if ((fraction(99, (accountBalance(pmtAssetId) + pmtAmount), 100) > totalShareAmountNew))
550550 then throw("Balance of share-token is greater than totalAmount")
551551 else if ((totalShareAmount == 0))
552552 then (baseEntry ++ [Reissue(SWOP, protocolReward, true), ScriptTransfer(wallet, protocolReward, SWOP)])
553553 else if ((shareToken >= pmtAmount))
554554 then baseEntry
555555 else throw(("Your maximum share token is " + toString(shareToken)))
556556 else throw("You can't share token")
557557 }
558558 else throw("Your amount of token less than 0")
559559 }
560560 else baseEntry
561561 }
562562
563563
564564
565565 @Callable(i)
566566 func withdrawShareTokens (pool,shareTokensWithdrawAmount) = {
567567 let shareTokensId = fromBase58String(getStringValue(value(addressFromString(pool)), "share_asset_id"))
568568 let $t02381523931 = claimCalc(pool, toString(i.caller), height)
569569 let userNewInterest = $t02381523931._1
570570 let currentInterest = $t02381523931._2
571571 let claimAmount = $t02381523931._3
572572 let userShareTokensAmount = $t02381523931._4
573573 let userShareAmountNew = (userShareTokensAmount - shareTokensWithdrawAmount)
574574 let availableFundsNew = (userAvailableSWOP(pool, toString(i.caller)) + claimAmount)
575575 let totalShareAmount = getTotalShareTokenLocked(pool)
576576 let totalShareAmountNew = (totalShareAmount - shareTokensWithdrawAmount)
577577 let userClaimedAmount = getUserSWOPClaimedAmount(pool, toString(i.caller))
578578 let userClaimedAmountNew = (userClaimedAmount + claimAmount)
579579 if (if ((pool == "3Mx6wBFzPJG2hUWNLy2mei8ZHbtmRZ6JJTG"))
580580 then true
581581 else (pool == "3Mrwe8BMFXLVdGcBhdf3T9YNUnrUEMHkDA8"))
582582 then throw()
583583 else if ((shareTokensWithdrawAmount > userShareTokensAmount))
584584 then throw("Withdraw amount more then user locked amount")
585585 else if (!(isActive))
586586 then throw("DApp is inactive at this moment")
587587 else if ((shareTokensWithdrawAmount > userShareTokensAmount))
588588 then throw("Withdraw amount more then user locked amount")
589589 else if ((fraction(99, (accountBalance(shareTokensId) - shareTokensWithdrawAmount), 100) > totalShareAmountNew))
590590 then throw("Balance of share-token is greater than totalAmount")
591591 else [IntegerEntry((((pool + "_") + toString(i.caller)) + keyUserLastInterest), userNewInterest), IntegerEntry((((pool + "_") + toString(i.caller)) + keyUserShareTokensLocked), userShareAmountNew), IntegerEntry((pool + keyLastInterest), currentInterest), IntegerEntry((pool + keyLastInterestHeight), height), IntegerEntry((pool + keyShareTokensLocked), totalShareAmountNew), IntegerEntry((((pool + "_") + toString(i.caller)) + keyAvailableSWOP), availableFundsNew), IntegerEntry((((pool + "_") + toString(i.caller)) + keyUserSWOPClaimedAmount), userClaimedAmountNew), IntegerEntry((((pool + "_") + toString(i.caller)) + keyUserSWOPLastClaimedAmount), claimAmount), ScriptTransfer(i.caller, shareTokensWithdrawAmount, shareTokensId)]
592592 }
593593
594594
595595
596596 @Callable(i)
597597 func egg0 (pool,users,migrationHeight) = if (if ((pool != "3Mx6wBFzPJG2hUWNLy2mei8ZHbtmRZ6JJTG"))
598598 then (pool != "3Mrwe8BMFXLVdGcBhdf3T9YNUnrUEMHkDA8")
599599 else false)
600600 then throw()
601601 else if (!(containsElement([adminPubKey1, adminPubKey2, adminPubKey3, admStaking], i.callerPublicKey)))
602602 then throw("Only admin can call this function")
603603 else {
604604 func updateUser (accum,u) = {
605605 let r = invoke(this, "egg1", [pool, u, migrationHeight], nil)
606606 if ((r == r))
607607 then (accum :+ BooleanEntry((u + "_migration"), true))
608608 else throw("Strict value is not equal to itself.")
609609 }
610610
611611 let $list2643726468 = users
612612 let $size2643726468 = size($list2643726468)
613613 let $acc02643726468 = nil
614614 if (($size2643726468 == 0))
615615 then $acc02643726468
616616 else {
617617 let $acc12643726468 = updateUser($acc02643726468, $list2643726468[0])
618618 if (($size2643726468 == 1))
619619 then $acc12643726468
620620 else {
621621 let $acc22643726468 = updateUser($acc12643726468, $list2643726468[1])
622622 if (($size2643726468 == 2))
623623 then $acc22643726468
624624 else {
625625 let $acc32643726468 = updateUser($acc22643726468, $list2643726468[2])
626626 if (($size2643726468 == 3))
627627 then $acc32643726468
628628 else {
629629 let $acc42643726468 = updateUser($acc32643726468, $list2643726468[3])
630630 if (($size2643726468 == 4))
631631 then $acc42643726468
632632 else {
633633 let $acc52643726468 = updateUser($acc42643726468, $list2643726468[4])
634634 if (($size2643726468 == 5))
635635 then $acc52643726468
636636 else {
637637 let $acc62643726468 = updateUser($acc52643726468, $list2643726468[5])
638638 if (($size2643726468 == 6))
639639 then $acc62643726468
640640 else {
641641 let $acc72643726468 = updateUser($acc62643726468, $list2643726468[6])
642642 if (($size2643726468 == 7))
643643 then $acc72643726468
644644 else {
645645 let $acc82643726468 = updateUser($acc72643726468, $list2643726468[7])
646646 if (($size2643726468 == 8))
647647 then $acc82643726468
648648 else {
649649 let $acc92643726468 = updateUser($acc82643726468, $list2643726468[8])
650650 if (($size2643726468 == 9))
651651 then $acc92643726468
652652 else {
653653 let $acc102643726468 = updateUser($acc92643726468, $list2643726468[9])
654654 if (($size2643726468 == 10))
655655 then $acc102643726468
656656 else {
657657 let $acc112643726468 = updateUser($acc102643726468, $list2643726468[10])
658658 if (($size2643726468 == 11))
659659 then $acc112643726468
660660 else {
661661 let $acc122643726468 = updateUser($acc112643726468, $list2643726468[11])
662662 if (($size2643726468 == 12))
663663 then $acc122643726468
664664 else {
665665 let $acc132643726468 = updateUser($acc122643726468, $list2643726468[12])
666666 if (($size2643726468 == 13))
667667 then $acc132643726468
668668 else {
669669 let $acc142643726468 = updateUser($acc132643726468, $list2643726468[13])
670670 if (($size2643726468 == 14))
671671 then $acc142643726468
672672 else {
673673 let $acc152643726468 = updateUser($acc142643726468, $list2643726468[14])
674674 if (($size2643726468 == 15))
675675 then $acc152643726468
676676 else {
677677 let $acc162643726468 = updateUser($acc152643726468, $list2643726468[15])
678678 if (($size2643726468 == 16))
679679 then $acc162643726468
680680 else {
681681 let $acc172643726468 = updateUser($acc162643726468, $list2643726468[16])
682682 if (($size2643726468 == 17))
683683 then $acc172643726468
684684 else {
685685 let $acc182643726468 = updateUser($acc172643726468, $list2643726468[17])
686686 if (($size2643726468 == 18))
687687 then $acc182643726468
688688 else {
689689 let $acc192643726468 = updateUser($acc182643726468, $list2643726468[18])
690690 if (($size2643726468 == 19))
691691 then $acc192643726468
692692 else {
693693 let $acc202643726468 = updateUser($acc192643726468, $list2643726468[19])
694694 if (($size2643726468 == 20))
695695 then $acc202643726468
696696 else {
697697 let $acc212643726468 = updateUser($acc202643726468, $list2643726468[20])
698698 if (($size2643726468 == 21))
699699 then $acc212643726468
700700 else {
701701 let $acc222643726468 = updateUser($acc212643726468, $list2643726468[21])
702702 if (($size2643726468 == 22))
703703 then $acc222643726468
704704 else {
705705 let $acc232643726468 = updateUser($acc222643726468, $list2643726468[22])
706706 if (($size2643726468 == 23))
707707 then $acc232643726468
708708 else {
709709 let $acc242643726468 = updateUser($acc232643726468, $list2643726468[23])
710710 if (($size2643726468 == 24))
711711 then $acc242643726468
712712 else {
713713 let $acc252643726468 = updateUser($acc242643726468, $list2643726468[24])
714714 if (($size2643726468 == 25))
715715 then $acc252643726468
716716 else {
717717 let $acc262643726468 = updateUser($acc252643726468, $list2643726468[25])
718718 if (($size2643726468 == 26))
719719 then $acc262643726468
720720 else {
721721 let $acc272643726468 = updateUser($acc262643726468, $list2643726468[26])
722722 if (($size2643726468 == 27))
723723 then $acc272643726468
724724 else {
725725 let $acc282643726468 = updateUser($acc272643726468, $list2643726468[27])
726726 if (($size2643726468 == 28))
727727 then $acc282643726468
728728 else {
729729 let $acc292643726468 = updateUser($acc282643726468, $list2643726468[28])
730730 if (($size2643726468 == 29))
731731 then $acc292643726468
732732 else {
733733 let $acc302643726468 = updateUser($acc292643726468, $list2643726468[29])
734734 if (($size2643726468 == 30))
735735 then $acc302643726468
736736 else {
737737 let $acc312643726468 = updateUser($acc302643726468, $list2643726468[30])
738738 if (($size2643726468 == 31))
739739 then $acc312643726468
740740 else {
741741 let $acc322643726468 = updateUser($acc312643726468, $list2643726468[31])
742742 if (($size2643726468 == 32))
743743 then $acc322643726468
744744 else {
745745 let $acc332643726468 = updateUser($acc322643726468, $list2643726468[32])
746746 if (($size2643726468 == 33))
747747 then $acc332643726468
748748 else {
749749 let $acc342643726468 = updateUser($acc332643726468, $list2643726468[33])
750750 if (($size2643726468 == 34))
751751 then $acc342643726468
752752 else {
753753 let $acc352643726468 = updateUser($acc342643726468, $list2643726468[34])
754754 if (($size2643726468 == 35))
755755 then $acc352643726468
756756 else {
757757 let $acc362643726468 = updateUser($acc352643726468, $list2643726468[35])
758758 if (($size2643726468 == 36))
759759 then $acc362643726468
760760 else {
761761 let $acc372643726468 = updateUser($acc362643726468, $list2643726468[36])
762762 if (($size2643726468 == 37))
763763 then $acc372643726468
764764 else {
765765 let $acc382643726468 = updateUser($acc372643726468, $list2643726468[37])
766766 if (($size2643726468 == 38))
767767 then $acc382643726468
768768 else {
769769 let $acc392643726468 = updateUser($acc382643726468, $list2643726468[38])
770770 if (($size2643726468 == 39))
771771 then $acc392643726468
772772 else {
773773 let $acc402643726468 = updateUser($acc392643726468, $list2643726468[39])
774774 if (($size2643726468 == 40))
775775 then $acc402643726468
776776 else {
777777 let $acc412643726468 = updateUser($acc402643726468, $list2643726468[40])
778778 if (($size2643726468 == 41))
779779 then $acc412643726468
780780 else {
781781 let $acc422643726468 = updateUser($acc412643726468, $list2643726468[41])
782782 if (($size2643726468 == 42))
783783 then $acc422643726468
784784 else {
785785 let $acc432643726468 = updateUser($acc422643726468, $list2643726468[42])
786786 if (($size2643726468 == 43))
787787 then $acc432643726468
788788 else {
789789 let $acc442643726468 = updateUser($acc432643726468, $list2643726468[43])
790790 if (($size2643726468 == 44))
791791 then $acc442643726468
792792 else {
793793 let $acc452643726468 = updateUser($acc442643726468, $list2643726468[44])
794794 if (($size2643726468 == 45))
795795 then $acc452643726468
796796 else {
797797 let $acc462643726468 = updateUser($acc452643726468, $list2643726468[45])
798798 throw("List size exceed 45")
799799 }
800800 }
801801 }
802802 }
803803 }
804804 }
805805 }
806806 }
807807 }
808808 }
809809 }
810810 }
811811 }
812812 }
813813 }
814814 }
815815 }
816816 }
817817 }
818818 }
819819 }
820820 }
821821 }
822822 }
823823 }
824824 }
825825 }
826826 }
827827 }
828828 }
829829 }
830830 }
831831 }
832832 }
833833 }
834834 }
835835 }
836836 }
837837 }
838838 }
839839 }
840840 }
841841 }
842842 }
843843 }
844844 }
845845 }
846846
847847
848848
849849 @Callable(i)
850850 func egg1 (pool,u,migrationHeight) = if ((i.caller != this))
851851 then throw("Only contract itself can invoke this function")
852852 else {
853853 let shareTokenMultiplyer = 1000
854854 let $t02667926791 = claimCalc(pool, u, migrationHeight)
855855 let userNewInterest = $t02667926791._1
856856 let currentInterest = $t02667926791._2
857857 let claimAmount = $t02667926791._3
858858 let userShareTokensAmount = $t02667926791._4
859859 let availableFundsNew = (userAvailableSWOP(pool, u) + claimAmount)
860860 let userClaimedAmount = getUserSWOPClaimedAmount(pool, u)
861861 let userClaimedAmountNew = (userClaimedAmount + claimAmount)
862862 let userShareTokensAmountNew = (userShareTokensAmount * shareTokenMultiplyer)
863863 let totalAmountNewShareTokenLocked = valueOrElse(getInteger(this, ((pool + "_") + "total_amount_new_sharetoken_locked")), 0)
864864 [IntegerEntry((((pool + "_") + u) + keyUserLastInterest), 0), IntegerEntry((((pool + "_") + u) + keyUserShareTokensLocked), userShareTokensAmountNew), IntegerEntry((((pool + "_") + u) + keyAvailableSWOP), availableFundsNew), IntegerEntry((((pool + "_") + toString(i.caller)) + keyUserSWOPClaimedAmount), userClaimedAmountNew), IntegerEntry((((pool + "_") + toString(i.caller)) + keyUserSWOPLastClaimedAmount), claimAmount), IntegerEntry(((pool + "_") + "total_amount_new_sharetoken_locked"), (totalAmountNewShareTokenLocked + userShareTokensAmountNew))]
865865 }
866866
867867
868868
869869 @Callable(i)
870870 func updateTotalShareTokensLocked (pool,migrationHeight) = if (!(containsElement([adminPubKey1, adminPubKey2, adminPubKey3, admStaking], i.callerPublicKey)))
871871 then throw("Only admin can call this function")
872872 else {
873873 let shareTokenMultiplyer = 1000
874874 let totalAmountShareTokensLockedBefore = (getIntegerValue(this, (pool + keyShareTokensLocked)) * 1000)
875875 let totalAmountShareTokensLockedNew = getIntegerValue(this, ((pool + "_") + "total_amount_new_sharetoken_locked"))
876876 if ((totalAmountShareTokensLockedBefore != totalAmountShareTokensLockedNew))
877877 then throw("New total amount share tockens != old total amount")
878- else [IntegerEntry((pool + keyLastInterest), 0), IntegerEntry((pool + keyLastInterestHeight), migrationHeight), DeleteEntry(((pool + "_") + "total_amount_new_sharetoken_locked"))]
878+ else [IntegerEntry((pool + keyLastInterest), 0), IntegerEntry((pool + keyLastInterestHeight), migrationHeight), IntegerEntry((pool + keyShareTokensLocked), totalAmountShareTokensLockedNew), DeleteEntry(((pool + "_") + "total_amount_new_sharetoken_locked"))]
879879 }
880880
881881
882882
883883 @Callable(i)
884884 func claim (pool) = {
885885 let shareTokensId = fromBase58String(getStringValue(value(addressFromString(pool)), "share_asset_id"))
886886 let shareTokenLocked = getTotalShareTokenLocked(pool)
887- let $t02888728952 = getLastInterestInfo(pool)
888- let lastInterestHeight = $t02888728952._1
889- let lastInterest = $t02888728952._2
890- let $t02895729069 = rewardInfo(pool)
891- let currentRewardPerBlock = $t02895729069._1
892- let rewardUpdateHeight = $t02895729069._2
893- let previousRewardPerBlock = $t02895729069._3
894- let poolRewardUpdateHeight = $t02895729069._4
895- let $t02907429190 = claimCalc(pool, toString(i.caller), height)
896- let userNewInterest = $t02907429190._1
897- let currentInterest = $t02907429190._2
898- let claimAmount = $t02907429190._3
899- let userShareTokensAmount = $t02907429190._4
887+ let $t02897129036 = getLastInterestInfo(pool)
888+ let lastInterestHeight = $t02897129036._1
889+ let lastInterest = $t02897129036._2
890+ let $t02904129153 = rewardInfo(pool)
891+ let currentRewardPerBlock = $t02904129153._1
892+ let rewardUpdateHeight = $t02904129153._2
893+ let previousRewardPerBlock = $t02904129153._3
894+ let poolRewardUpdateHeight = $t02904129153._4
895+ let $t02915829274 = claimCalc(pool, toString(i.caller), height)
896+ let userNewInterest = $t02915829274._1
897+ let currentInterest = $t02915829274._2
898+ let claimAmount = $t02915829274._3
899+ let userShareTokensAmount = $t02915829274._4
900900 let availableFund = (userAvailableSWOP(pool, toString(i.caller)) + claimAmount)
901901 let userClaimedAmount = getUserSWOPClaimedAmount(pool, toString(i.caller))
902902 let userClaimedAmountNew = (userClaimedAmount + claimAmount)
903903 if (if ((pool == "3Mx6wBFzPJG2hUWNLy2mei8ZHbtmRZ6JJTG"))
904904 then true
905905 else (pool == "3Mrwe8BMFXLVdGcBhdf3T9YNUnrUEMHkDA8"))
906906 then throw()
907907 else if ((availableFund == 0))
908908 then throw("You have 0 available SWOP")
909909 else if (!(isActive))
910910 then throw("DApp is inactive at this moment")
911911 else if ((availableFund == 0))
912912 then throw("You have 0 available SWOP")
913913 else if ((fraction(99, accountBalance(shareTokensId), 100) > shareTokenLocked))
914914 then throw("Balance of share-token is greater than totalAmount")
915915 else [IntegerEntry((((pool + "_") + toString(i.caller)) + keyUserLastInterest), userNewInterest), IntegerEntry((pool + keyLastInterest), currentInterest), IntegerEntry((pool + keyLastInterestHeight), height), IntegerEntry((((pool + "_") + toString(i.caller)) + keyAvailableSWOP), 0), Reissue(SWOP, availableFund, true), IntegerEntry((((pool + "_") + toString(i.caller)) + keyUserSWOPClaimedAmount), userClaimedAmountNew), IntegerEntry((((pool + "_") + toString(i.caller)) + keyUserSWOPLastClaimedAmount), claimAmount), ScriptTransfer(i.caller, availableFund, SWOP)]
916916 }
917917
918918
919919
920920 @Callable(i)
921921 func shutdown () = if (!(isActive))
922922 then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, keyCause), "the cause wasn't specified")))
923923 else if (!(containsElement([adminPubKey1, adminPubKey2, adminPubKey3], i.callerPublicKey)))
924924 then throw("Only admin can call this function")
925925 else suspend("Paused by admin")
926926
927927
928928
929929 @Callable(i)
930930 func activate () = if (isActive)
931931 then throw("DApp is already active")
932932 else if (!(containsElement([adminPubKey1, adminPubKey2, adminPubKey3], i.callerPublicKey)))
933933 then throw("Only admin can call this function")
934934 else [BooleanEntry(keyActive, true), DeleteEntry(keyCause)]
935935
936936
937937 @Verifier(tx)
938938 func verify () = match tx {
939939 case inv: InvokeScriptTransaction =>
940940 let callEgg1 = if ((inv.dApp == this))
941941 then (inv.function == "egg1")
942942 else false
943943 let signedByAdmin = if (if (if (sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey1))
944944 then true
945945 else sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey2))
946946 then true
947947 else sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey3))
948948 then true
949949 else sigVerify(tx.bodyBytes, tx.proofs[0], admStaking)
950950 if (callEgg1)
951951 then signedByAdmin
952952 else false
953953 case _ =>
954954 let adminPubKey1Signed = if (sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey1))
955955 then 1
956956 else 0
957957 let adminPubKey2Signed = if (sigVerify(tx.bodyBytes, tx.proofs[1], adminPubKey2))
958958 then 1
959959 else 0
960960 let adminPubKey3Signed = if (sigVerify(tx.bodyBytes, tx.proofs[2], adminPubKey3))
961961 then 1
962962 else 0
963963 (((adminPubKey1Signed + adminPubKey2Signed) + adminPubKey3Signed) >= 2)
964964 }
965965

github/deemru/w8io/c3f4982 
160.25 ms